summaryrefslogtreecommitdiffstats
path: root/sal
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /sal
parentInitial commit. (diff)
downloadlibreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz
libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sal')
-rw-r--r--sal/CompilerTest_sal_rtl_oustring.mk16
-rw-r--r--sal/CppunitTest_Module_DLL.mk26
-rw-r--r--sal/CppunitTest_sal_comtools.mk24
-rw-r--r--sal/CppunitTest_sal_osl.mk44
-rw-r--r--sal/CppunitTest_sal_osl_security.mk21
-rw-r--r--sal/CppunitTest_sal_retry_if_failed.mk16
-rw-r--r--sal/CppunitTest_sal_rtl.mk75
-rw-r--r--sal/CppunitTest_sal_types.mk21
-rw-r--r--sal/Executable_cppunittester.mk45
-rw-r--r--sal/Executable_osl_process_child.mk42
-rw-r--r--sal/Library_lo-bootstrap.mk31
-rw-r--r--sal/Library_sal.mk259
-rw-r--r--sal/Library_sal_textenc.mk33
-rw-r--r--sal/Makefile24
-rw-r--r--sal/Module_sal.mk40
-rw-r--r--sal/README.md11
-rw-r--r--sal/android/libreofficekit-jni.c209
-rw-r--r--sal/android/lo-bootstrap.c921
-rw-r--r--sal/android/uthash.h971
-rw-r--r--sal/cppunittester/cppunittester.cxx632
-rw-r--r--sal/inc/backtraceasstring.hxx24
-rw-r--r--sal/inc/oslmemory.h30
-rw-r--r--sal/inc/oslrandom.h25
-rw-r--r--sal/inc/oslsocket.hxx24
-rw-r--r--sal/inc/pch/precompiled_sal.cxx12
-rw-r--r--sal/inc/pch/precompiled_sal.hxx113
-rw-r--r--sal/inc/rtllifecycle.h41
-rw-r--r--sal/inc/salusesyslog.hxx23
-rw-r--r--sal/inc/signalshared.hxx39
-rw-r--r--sal/inc/uri_internal.hxx40
-rw-r--r--sal/osl/all/compat.cxx197
-rw-r--r--sal/osl/all/debugbase.cxx145
-rw-r--r--sal/osl/all/filepath.cxx113
-rw-r--r--sal/osl/all/loadmodulerelative.cxx60
-rw-r--r--sal/osl/all/log.cxx477
-rw-r--r--sal/osl/all/mutexshared.cxx20
-rw-r--r--sal/osl/all/signalshared.cxx141
-rw-r--r--sal/osl/all/utility.cxx49
-rw-r--r--sal/osl/unx/asm/interlck_sparc.s79
-rw-r--r--sal/osl/unx/backtrace.c246
-rw-r--r--sal/osl/unx/backtrace.h51
-rw-r--r--sal/osl/unx/backtraceapi.cxx279
-rw-r--r--sal/osl/unx/conditn.cxx270
-rw-r--r--sal/osl/unx/createfilehandlefromfd.hxx24
-rw-r--r--sal/osl/unx/file.cxx1606
-rw-r--r--sal/osl/unx/file_error_transl.cxx181
-rw-r--r--sal/osl/unx/file_error_transl.hxx37
-rw-r--r--sal/osl/unx/file_impl.hxx55
-rw-r--r--sal/osl/unx/file_misc.cxx1049
-rw-r--r--sal/osl/unx/file_path_helper.cxx262
-rw-r--r--sal/osl/unx/file_path_helper.hxx251
-rw-r--r--sal/osl/unx/file_stat.cxx453
-rw-r--r--sal/osl/unx/file_url.cxx972
-rw-r--r--sal/osl/unx/file_url.hxx50
-rw-r--r--sal/osl/unx/file_volume.cxx336
-rw-r--r--sal/osl/unx/interlck.cxx95
-rw-r--r--sal/osl/unx/memory.cxx35
-rw-r--r--sal/osl/unx/module.cxx344
-rw-r--r--sal/osl/unx/mutex.cxx163
-rw-r--r--sal/osl/unx/nlsupport.cxx872
-rw-r--r--sal/osl/unx/nlsupport.hxx40
-rw-r--r--sal/osl/unx/osxlocale.cxx104
-rw-r--r--sal/osl/unx/pipe.cxx523
-rw-r--r--sal/osl/unx/process.cxx1194
-rw-r--r--sal/osl/unx/process_impl.cxx473
-rw-r--r--sal/osl/unx/profile.cxx1866
-rw-r--r--sal/osl/unx/random.cxx46
-rw-r--r--sal/osl/unx/readwrite_helper.cxx79
-rw-r--r--sal/osl/unx/readwrite_helper.hxx26
-rw-r--r--sal/osl/unx/salinit.cxx98
-rw-r--r--sal/osl/unx/saltime.hxx29
-rw-r--r--sal/osl/unx/secimpl.hxx35
-rw-r--r--sal/osl/unx/security.cxx537
-rw-r--r--sal/osl/unx/signal.cxx452
-rw-r--r--sal/osl/unx/socket.cxx2046
-rw-r--r--sal/osl/unx/sockimpl.hxx61
-rw-r--r--sal/osl/unx/soffice.cxx25
-rw-r--r--sal/osl/unx/soffice.hxx26
-rw-r--r--sal/osl/unx/system.cxx167
-rw-r--r--sal/osl/unx/system.hxx406
-rw-r--r--sal/osl/unx/system.mm1
-rw-r--r--sal/osl/unx/tempfile.cxx340
-rw-r--r--sal/osl/unx/thread.cxx1102
-rw-r--r--sal/osl/unx/time.cxx310
-rw-r--r--sal/osl/unx/unixerrnostring.hxx27
-rw-r--r--sal/osl/unx/uunxapi.cxx905
-rw-r--r--sal/osl/unx/uunxapi.hxx83
-rw-r--r--sal/osl/unx/uunxapi.mm1
-rw-r--r--sal/osl/w32/backtrace.cxx92
-rw-r--r--sal/osl/w32/conditn.cxx114
-rw-r--r--sal/osl/w32/dllentry.cxx235
-rw-r--r--sal/osl/w32/file-impl.hxx25
-rw-r--r--sal/osl/w32/file.cxx1121
-rw-r--r--sal/osl/w32/file_dirvol.cxx1691
-rw-r--r--sal/osl/w32/file_error.cxx125
-rw-r--r--sal/osl/w32/file_error.hxx29
-rw-r--r--sal/osl/w32/file_url.cxx990
-rw-r--r--sal/osl/w32/file_url.hxx63
-rw-r--r--sal/osl/w32/filetime.hxx40
-rw-r--r--sal/osl/w32/interlck.cxx34
-rw-r--r--sal/osl/w32/memory.cxx24
-rw-r--r--sal/osl/w32/module.cxx202
-rw-r--r--sal/osl/w32/mutex.cxx88
-rw-r--r--sal/osl/w32/nlsupport.cxx202
-rw-r--r--sal/osl/w32/nlsupport.hxx21
-rw-r--r--sal/osl/w32/path_helper.cxx89
-rw-r--r--sal/osl/w32/path_helper.hxx125
-rw-r--r--sal/osl/w32/pipe.cxx489
-rw-r--r--sal/osl/w32/process.cxx525
-rw-r--r--sal/osl/w32/procimpl.cxx596
-rw-r--r--sal/osl/w32/procimpl.hxx33
-rw-r--r--sal/osl/w32/profile.cxx2341
-rw-r--r--sal/osl/w32/random.cxx63
-rw-r--r--sal/osl/w32/salinit.cxx83
-rw-r--r--sal/osl/w32/secimpl.hxx40
-rw-r--r--sal/osl/w32/security.cxx662
-rw-r--r--sal/osl/w32/signal.cxx133
-rw-r--r--sal/osl/w32/socket.cxx1611
-rw-r--r--sal/osl/w32/sockimpl.hxx42
-rw-r--r--sal/osl/w32/system.h54
-rw-r--r--sal/osl/w32/tempfile.cxx238
-rw-r--r--sal/osl/w32/thread.cxx540
-rw-r--r--sal/osl/w32/thread.hxx18
-rw-r--r--sal/osl/w32/time.cxx200
-rw-r--r--sal/osl/w32/time.hxx19
-rw-r--r--sal/qa/ByteSequence/ByteSequence.cxx183
-rw-r--r--sal/qa/OStringBuffer/rtl_OStringBuffer.cxx18393
-rw-r--r--sal/qa/OStringBuffer/rtl_String_Const.h468
-rw-r--r--sal/qa/OStringBuffer/rtl_String_Utils_Const.h45
-rw-r--r--sal/qa/inc/stringhelper.hxx33
-rw-r--r--sal/qa/inc/valueequal.hxx120
-rw-r--r--sal/qa/libs2test.txt101
-rw-r--r--sal/qa/osl/condition/osl_Condition.cxx327
-rw-r--r--sal/qa/osl/condition/osl_Condition_Const.h47
-rw-r--r--sal/qa/osl/file/osl_File.cxx4980
-rw-r--r--sal/qa/osl/file/osl_File_Const.h206
-rw-r--r--sal/qa/osl/file/osl_old_test_file.cxx115
-rw-r--r--sal/qa/osl/file/test_cpy_wrt_file.cxx76
-rw-r--r--sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx243
-rw-r--r--sal/qa/osl/module/osl_Module.cxx376
-rw-r--r--sal/qa/osl/module/osl_Module_Const.h46
-rw-r--r--sal/qa/osl/module/osl_Module_DLL.cxx32
-rw-r--r--sal/qa/osl/mutex/osl_Mutex.cxx905
-rw-r--r--sal/qa/osl/mutex/osl_Mutex_Const.h37
-rw-r--r--sal/qa/osl/pipe/osl_Pipe.cxx894
-rwxr-xr-xsal/qa/osl/process/batch.bat19
-rwxr-xr-xsal/qa/osl/process/batch.sh2
-rw-r--r--sal/qa/osl/process/osl_Thread.cxx2005
-rw-r--r--sal/qa/osl/process/osl_Thread.xsce18
-rw-r--r--sal/qa/osl/process/osl_process.cxx450
-rw-r--r--sal/qa/osl/process/osl_process_child.cxx101
-rw-r--r--sal/qa/osl/profile/osl_old_testprofile.cxx62
-rw-r--r--sal/qa/osl/security/TODO.h8
-rw-r--r--sal/qa/osl/security/osl_Security.cxx624
-rw-r--r--sal/qa/osl/security/osl_Security_Const.h58
-rw-r--r--sal/qa/osl/setthreadname/test-setthreadname.cxx79
-rw-r--r--sal/qa/osl/socket.cxx58
-rw-r--r--sal/qa/osl/thread/test_thread.cxx80
-rw-r--r--sal/qa/rtl/alloc/rtl_alloc.cxx211
-rw-r--r--sal/qa/rtl/bootstrap/expand.cxx58
-rw-r--r--sal/qa/rtl/cipher/rtl_cipher.cxx600
-rw-r--r--sal/qa/rtl/crc32/rtl_crc32.cxx154
-rw-r--r--sal/qa/rtl/digest/rtl_digest.cxx515
-rw-r--r--sal/qa/rtl/doublelock/rtl_doublelocking.cxx182
-rw-r--r--sal/qa/rtl/locale/rtl_locale.cxx280
-rw-r--r--sal/qa/rtl/math/test-rtl-math.cxx677
-rw-r--r--sal/qa/rtl/ostring/rtl_OString2.cxx508
-rw-r--r--sal/qa/rtl/ostring/rtl_str.cxx724
-rw-r--r--sal/qa/rtl/ostring/rtl_str.xsce43
-rw-r--r--sal/qa/rtl/ostring/rtl_string.cxx169
-rw-r--r--sal/qa/rtl/ostring/rtl_string.xsce18
-rw-r--r--sal/qa/rtl/oustring/joblist.txt27
-rw-r--r--sal/qa/rtl/oustring/rtl_OUString2.cxx1068
-rw-r--r--sal/qa/rtl/oustring/rtl_ustr.cxx1080
-rw-r--r--sal/qa/rtl/oustring/rtl_ustr.xsce50
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx43
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx66
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx92
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx61
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx121
-rw-r--r--sal/qa/rtl/process/child_process.cxx60
-rw-r--r--sal/qa/rtl/process/child_process_id.cxx54
-rw-r--r--sal/qa/rtl/process/rtl_Process.cxx258
-rw-r--r--sal/qa/rtl/process/rtl_Process_Const.h40
-rw-r--r--sal/qa/rtl/random/random.txt22
-rw-r--r--sal/qa/rtl/random/rtl_random.cxx363
-rw-r--r--sal/qa/rtl/ref/rtl_ref.cxx115
-rw-r--r--sal/qa/rtl/strings/compile-oustring.cxx45
-rw-r--r--sal/qa/rtl/strings/nonconstarray.cxx94
-rw-r--r--sal/qa/rtl/strings/test_ostring.cxx123
-rw-r--r--sal/qa/rtl/strings/test_ostring_concat.cxx206
-rw-r--r--sal/qa/rtl/strings/test_ostring_stringliterals.cxx282
-rw-r--r--sal/qa/rtl/strings/test_ostringbuffer.cxx56
-rw-r--r--sal/qa/rtl/strings/test_oustring_compare.cxx97
-rw-r--r--sal/qa/rtl/strings/test_oustring_concat.cxx213
-rw-r--r--sal/qa/rtl/strings/test_oustring_convert.cxx177
-rw-r--r--sal/qa/rtl/strings/test_oustring_endswith.cxx113
-rw-r--r--sal/qa/rtl/strings/test_oustring_startswith.cxx38
-rw-r--r--sal/qa/rtl/strings/test_oustring_stringliterals.cxx432
-rw-r--r--sal/qa/rtl/strings/test_strings_defaultstringview.cxx118
-rw-r--r--sal/qa/rtl/strings/test_strings_replace.cxx339
-rw-r--r--sal/qa/rtl/strings/test_strings_toint.cxx72
-rw-r--r--sal/qa/rtl/strings/test_strings_valuex.cxx115
-rw-r--r--sal/qa/rtl/textenc/rtl_tencinfo.cxx1674
-rw-r--r--sal/qa/rtl/textenc/rtl_textcvt.cxx3313
-rw-r--r--sal/qa/rtl/uri/rtl_Uri.cxx79
-rw-r--r--sal/qa/rtl/uri/rtl_testuri.cxx514
-rw-r--r--sal/qa/rtl/uuid/rtl_Uuid.cxx159
-rw-r--r--sal/qa/sal/test_types.cxx75
-rw-r--r--sal/qa/systools/test_comtools.cxx247
-rw-r--r--sal/qa/systools/test_retry_if_failed.cxx78
-rw-r--r--sal/rtl/alloc_arena.cxx1112
-rw-r--r--sal/rtl/alloc_arena.hxx118
-rw-r--r--sal/rtl/alloc_cache.cxx225
-rw-r--r--sal/rtl/alloc_cache.hxx40
-rw-r--r--sal/rtl/alloc_fini.cxx97
-rw-r--r--sal/rtl/alloc_global.cxx79
-rw-r--r--sal/rtl/alloc_impl.hxx219
-rw-r--r--sal/rtl/bootstrap.cxx992
-rw-r--r--sal/rtl/byteseq.cxx246
-rw-r--r--sal/rtl/cipher.cxx1433
-rw-r--r--sal/rtl/cmdargs.cxx103
-rw-r--r--sal/rtl/crc.cxx45
-rw-r--r--sal/rtl/digest.cxx1897
-rw-r--r--sal/rtl/hash.cxx241
-rw-r--r--sal/rtl/hash.hxx33
-rw-r--r--sal/rtl/locale.cxx136
-rw-r--r--sal/rtl/math.cxx828
-rw-r--r--sal/rtl/random.cxx310
-rw-r--r--sal/rtl/rtl_process.cxx56
-rw-r--r--sal/rtl/strbuf.cxx83
-rw-r--r--sal/rtl/strimp.cxx90
-rw-r--r--sal/rtl/strimp.hxx92
-rw-r--r--sal/rtl/string.cxx667
-rw-r--r--sal/rtl/strtmpl.hxx1904
-rw-r--r--sal/rtl/unload.cxx34
-rw-r--r--sal/rtl/uri.cxx759
-rw-r--r--sal/rtl/ustrbuf.cxx115
-rw-r--r--sal/rtl/ustring.cxx1324
-rw-r--r--sal/rtl/uuid.cxx173
-rw-r--r--sal/test/bootstrap82
-rwxr-xr-xsal/test/bootstrap.bat79
-rw-r--r--sal/test/bootstrap.pl251
-rw-r--r--sal/test/bootstraptest.ini28
-rw-r--r--sal/test/makefile.mk145
-rw-r--r--sal/test/test_salmain.cxx31
-rw-r--r--sal/test/test_salmainwithargs.cxx31
-rw-r--r--sal/test/testbootstrap.cxx116
-rw-r--r--sal/test/testbootstrap.ini4
-rw-r--r--sal/textenc/context.cxx42
-rw-r--r--sal/textenc/context.hxx35
-rw-r--r--sal/textenc/convertadobe.tab320
-rw-r--r--sal/textenc/convertbig5hkscs.cxx501
-rw-r--r--sal/textenc/convertbig5hkscs.hxx68
-rw-r--r--sal/textenc/convertbig5hkscs.tab57
-rw-r--r--sal/textenc/converter.cxx157
-rw-r--r--sal/textenc/converter.hxx53
-rw-r--r--sal/textenc/converteuctw.cxx461
-rw-r--r--sal/textenc/converteuctw.hxx65
-rw-r--r--sal/textenc/converteuctw.tab54
-rw-r--r--sal/textenc/convertgb18030.cxx475
-rw-r--r--sal/textenc/convertgb18030.hxx79
-rw-r--r--sal/textenc/convertgb18030.tab53
-rw-r--r--sal/textenc/convertisciidevangari.cxx515
-rw-r--r--sal/textenc/convertisciidevangari.hxx39
-rw-r--r--sal/textenc/convertisciidevangari.tab35
-rw-r--r--sal/textenc/convertiso2022cn.cxx873
-rw-r--r--sal/textenc/convertiso2022cn.hxx73
-rw-r--r--sal/textenc/convertiso2022cn.tab59
-rw-r--r--sal/textenc/convertiso2022jp.cxx581
-rw-r--r--sal/textenc/convertiso2022jp.hxx67
-rw-r--r--sal/textenc/convertiso2022jp.tab50
-rw-r--r--sal/textenc/convertiso2022kr.cxx541
-rw-r--r--sal/textenc/convertiso2022kr.hxx67
-rw-r--r--sal/textenc/convertiso2022kr.tab50
-rw-r--r--sal/textenc/convertsimple.cxx665
-rw-r--r--sal/textenc/convertsimple.hxx34
-rw-r--r--sal/textenc/convertsinglebytetobmpunicode.cxx210
-rw-r--r--sal/textenc/convertsinglebytetobmpunicode.hxx121
-rw-r--r--sal/textenc/generate/big5hkscs2001.pl795
-rw-r--r--sal/textenc/generate/big5hkscs2001.tab8813
-rw-r--r--sal/textenc/generate/cns116431992.pl845
-rw-r--r--sal/textenc/generate/cns116431992.tab22858
-rw-r--r--sal/textenc/generate/gb180302000.pl296
-rw-r--r--sal/textenc/generate/gb180302000.tab9027
-rw-r--r--sal/textenc/gettextencodingdata.hxx30
-rw-r--r--sal/textenc/handleundefinedunicodetotextchar.cxx171
-rw-r--r--sal/textenc/handleundefinedunicodetotextchar.hxx30
-rw-r--r--sal/textenc/tables.cxx270
-rw-r--r--sal/textenc/tcvtarb1.tab932
-rw-r--r--sal/textenc/tcvtbyte.cxx161
-rw-r--r--sal/textenc/tcvtbyte.hxx35
-rw-r--r--sal/textenc/tcvteas1.tab432
-rw-r--r--sal/textenc/tcvtest1.tab4580
-rw-r--r--sal/textenc/tcvtjp1.tab1547
-rw-r--r--sal/textenc/tcvtjp2.tab3955
-rw-r--r--sal/textenc/tcvtjp3.tab2905
-rw-r--r--sal/textenc/tcvtjp4.tab3576
-rw-r--r--sal/textenc/tcvtjp5.tab3341
-rw-r--r--sal/textenc/tcvtjp6.tab2656
-rw-r--r--sal/textenc/tcvtkr1.tab3314
-rw-r--r--sal/textenc/tcvtkr2.tab5406
-rw-r--r--sal/textenc/tcvtkr4.tab3494
-rw-r--r--sal/textenc/tcvtkr5.tab5406
-rw-r--r--sal/textenc/tcvtkr6.tab1233
-rw-r--r--sal/textenc/tcvtlat1.tab1552
-rw-r--r--sal/textenc/tcvtmb.cxx682
-rw-r--r--sal/textenc/tcvtscn1.tab3851
-rw-r--r--sal/textenc/tcvtscn2.tab4454
-rw-r--r--sal/textenc/tcvtscn3.tab1493
-rw-r--r--sal/textenc/tcvtscn4.tab3061
-rw-r--r--sal/textenc/tcvtscn5.tab3226
-rw-r--r--sal/textenc/tcvtscn6.tab2951
-rw-r--r--sal/textenc/tcvtsym1.tab42
-rw-r--r--sal/textenc/tcvttcn1.tab2885
-rw-r--r--sal/textenc/tcvttcn2.tab3706
-rw-r--r--sal/textenc/tcvttcn6.tab1728
-rw-r--r--sal/textenc/tcvtuni1.tab42
-rw-r--r--sal/textenc/tcvtutf7.cxx602
-rw-r--r--sal/textenc/tcvtutf8.cxx458
-rw-r--r--sal/textenc/tcvtutf8.hxx41
-rw-r--r--sal/textenc/tenchelp.hxx250
-rw-r--r--sal/textenc/tencinfo.cxx982
-rw-r--r--sal/textenc/textcvt.cxx299
-rw-r--r--sal/textenc/textenc.cxx436
-rw-r--r--sal/textenc/unichars.cxx87
-rw-r--r--sal/textenc/unichars.hxx40
-rw-r--r--sal/util/sal.map778
328 files changed, 224624 insertions, 0 deletions
diff --git a/sal/CompilerTest_sal_rtl_oustring.mk b/sal/CompilerTest_sal_rtl_oustring.mk
new file mode 100644
index 000000000..fb77d8904
--- /dev/null
+++ b/sal/CompilerTest_sal_rtl_oustring.mk
@@ -0,0 +1,16 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CompilerTest_CompilerTest,sal_rtl_oustring))
+
+$(eval $(call gb_CompilerTest_add_exception_objects,sal_rtl_oustring, \
+ sal/qa/rtl/strings/compile-oustring \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/CppunitTest_Module_DLL.mk b/sal/CppunitTest_Module_DLL.mk
new file mode 100644
index 000000000..a00429de3
--- /dev/null
+++ b/sal/CppunitTest_Module_DLL.mk
@@ -0,0 +1,26 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+# This is not really a test. Only a dynamic library which is loaded by
+# sal_osl_module unit test library.
+
+$(eval $(call gb_CppunitTest_CppunitTest,Module_DLL))
+
+$(eval $(call gb_CppunitTest_set_visibility_default,Module_DLL))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,Module_DLL,\
+ sal/qa/osl/module/osl_Module_DLL \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,Module_DLL,\
+ sal \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/CppunitTest_sal_comtools.mk b/sal/CppunitTest_sal_comtools.mk
new file mode 100644
index 000000000..1f9c24a0c
--- /dev/null
+++ b/sal/CppunitTest_sal_comtools.mk
@@ -0,0 +1,24 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,sal_comtools))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sal_comtools,\
+ sal/qa/systools/test_comtools \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sal_comtools,\
+ sal \
+))
+
+$(eval $(call gb_CppunitTest_use_system_win32_libs,sal_comtools,\
+ ole32 \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/CppunitTest_sal_osl.mk b/sal/CppunitTest_sal_osl.mk
new file mode 100644
index 000000000..5cfda8620
--- /dev/null
+++ b/sal/CppunitTest_sal_osl.mk
@@ -0,0 +1,44 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,sal_osl))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sal_osl,\
+ sal/qa/osl/condition/osl_Condition \
+ sal/qa/osl/file/osl_File \
+ sal/qa/osl/file/osl_old_test_file \
+ sal/qa/osl/file/test_cpy_wrt_file \
+ sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl \
+ $(if $(DISABLE_DYNLOADING),,sal/qa/osl/module/osl_Module) \
+ sal/qa/osl/mutex/osl_Mutex \
+ sal/qa/osl/pipe/osl_Pipe \
+ sal/qa/osl/process/osl_process \
+ sal/qa/osl/process/osl_Thread \
+ sal/qa/osl/profile/osl_old_testprofile \
+ sal/qa/osl/setthreadname/test-setthreadname \
+ sal/qa/osl/socket \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sal_osl,\
+ sal \
+ tl \
+))
+
+# the test uses the library created by Module_DLL
+$(call gb_CppunitTest_get_target,sal_osl) : $(call gb_CppunitTest_get_linktarget_target,Module_DLL)
+
+$(eval $(call gb_CppunitTest_use_executable,sal_osl,osl_process_child))
+
+$(eval $(call gb_CppunitTest_use_externals,sal_osl,\
+ boost_headers \
+ valgrind \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/CppunitTest_sal_osl_security.mk b/sal/CppunitTest_sal_osl_security.mk
new file mode 100644
index 000000000..0a0905c00
--- /dev/null
+++ b/sal/CppunitTest_sal_osl_security.mk
@@ -0,0 +1,21 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,sal_osl_security))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sal_osl_security,\
+ sal/qa/osl/security/osl_Security \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sal_osl_security,\
+ sal \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/CppunitTest_sal_retry_if_failed.mk b/sal/CppunitTest_sal_retry_if_failed.mk
new file mode 100644
index 000000000..6e131afb5
--- /dev/null
+++ b/sal/CppunitTest_sal_retry_if_failed.mk
@@ -0,0 +1,16 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,sal_retry_if_failed))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sal_retry_if_failed,\
+ sal/qa/systools/test_retry_if_failed \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/CppunitTest_sal_rtl.mk b/sal/CppunitTest_sal_rtl.mk
new file mode 100644
index 000000000..2568d8dde
--- /dev/null
+++ b/sal/CppunitTest_sal_rtl.mk
@@ -0,0 +1,75 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,sal_rtl))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sal_rtl,\
+ sal/qa/ByteSequence/ByteSequence \
+ sal/qa/OStringBuffer/rtl_OStringBuffer \
+ sal/qa/rtl/alloc/rtl_alloc \
+ sal/qa/rtl/bootstrap/expand \
+ sal/qa/rtl/cipher/rtl_cipher \
+ sal/qa/rtl/crc32/rtl_crc32 \
+ sal/qa/rtl/digest/rtl_digest \
+ sal/qa/rtl/doublelock/rtl_doublelocking \
+ sal/qa/rtl/locale/rtl_locale \
+ sal/qa/rtl/math/test-rtl-math \
+ sal/qa/rtl/ostring/rtl_str \
+ sal/qa/rtl/oustring/rtl_ustr \
+ sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar \
+ sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized \
+ sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign \
+ sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring \
+ sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32 \
+ sal/qa/rtl/oustring/rtl_OUString2 \
+ sal/qa/rtl/process/rtl_Process \
+ sal/qa/rtl/random/rtl_random \
+ sal/qa/rtl/ref/rtl_ref \
+ sal/qa/rtl/strings/nonconstarray \
+ sal/qa/rtl/strings/test_strings_replace \
+ sal/qa/rtl/strings/test_strings_defaultstringview \
+ sal/qa/rtl/strings/test_ostring \
+ sal/qa/rtl/strings/test_ostring_concat \
+ sal/qa/rtl/strings/test_ostring_stringliterals \
+ sal/qa/rtl/strings/test_ostringbuffer \
+ sal/qa/rtl/strings/test_oustring_compare \
+ sal/qa/rtl/strings/test_oustring_concat \
+ sal/qa/rtl/strings/test_oustring_convert \
+ sal/qa/rtl/strings/test_oustring_endswith \
+ sal/qa/rtl/strings/test_oustring_startswith \
+ sal/qa/rtl/strings/test_oustring_stringliterals \
+ sal/qa/rtl/strings/test_strings_toint \
+ sal/qa/rtl/strings/test_strings_valuex \
+ sal/qa/rtl/textenc/rtl_tencinfo \
+ sal/qa/rtl/textenc/rtl_textcvt \
+ sal/qa/rtl/uri/rtl_Uri \
+ sal/qa/rtl/uri/rtl_testuri \
+ sal/qa/rtl/uuid/rtl_Uuid \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sal_rtl,\
+ sal \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sal_rtl,\
+ -I$(SRCDIR)/sal/qa/inc \
+ $$(INCLUDE) \
+))
+
+# The test uses O(U)String capabilities that dlopen this lib:
+$(call gb_CppunitTest_get_target,sal_rtl) : \
+ $(call gb_Library_get_target,sal_textenc)
+
+$(eval $(call gb_CppunitTest_use_external,sal_rtl,boost_headers))
+
+ifeq ($(ENABLE_CIPHER_OPENSSL_BACKEND),TRUE)
+$(eval $(call gb_CppunitTest_add_defs,sal_rtl,-DLIBO_CIPHER_OPENSSL_BACKEND))
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/CppunitTest_sal_types.mk b/sal/CppunitTest_sal_types.mk
new file mode 100644
index 000000000..487d2f9a2
--- /dev/null
+++ b/sal/CppunitTest_sal_types.mk
@@ -0,0 +1,21 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,sal_types))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sal_types,\
+ sal/qa/sal/test_types \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sal_types,\
+ sal \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/Executable_cppunittester.mk b/sal/Executable_cppunittester.mk
new file mode 100644
index 000000000..959b3cd8b
--- /dev/null
+++ b/sal/Executable_cppunittester.mk
@@ -0,0 +1,45 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Executable_Executable,cppunittester))
+
+$(eval $(call gb_Executable_set_include,cppunittester,\
+ $$(INCLUDE) \
+ -I$(SRCDIR)/sal/inc \
+))
+
+$(eval $(call gb_Executable_use_libraries,cppunittester,\
+ sal \
+))
+
+$(eval $(call gb_Executable_use_externals,cppunittester,\
+ boost_headers \
+ cppunit \
+))
+
+$(eval $(call gb_Executable_add_exception_objects,cppunittester,\
+ sal/cppunittester/cppunittester \
+))
+
+ifneq ($(strip $(debug)$(DEBUG)),)
+$(eval $(call gb_Executable_use_system_win32_libs,cppunittester,\
+ dbghelp \
+))
+endif
+
+ifeq ($(COM),MSC)
+
+$(eval $(call gb_Executable_add_ldflags,cppunittester,\
+ /STACK:10000000 \
+))
+
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/Executable_osl_process_child.mk b/sal/Executable_osl_process_child.mk
new file mode 100644
index 000000000..f64f94605
--- /dev/null
+++ b/sal/Executable_osl_process_child.mk
@@ -0,0 +1,42 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+# This executable is required only by sal_osl_process test.
+# See qa/osl/process/osl_process.cxx:411
+$(eval $(call gb_Executable_Executable,osl_process_child))
+
+$(eval $(call gb_Executable_use_libraries,osl_process_child,\
+ sal \
+))
+
+$(eval $(call gb_Executable_add_exception_objects,osl_process_child,\
+ sal/qa/osl/process/osl_process_child \
+))
+
+# Also this batch file is required by sal_osl_process.
+# See qa/osl/process/osl_process.cxx:675
+ifeq ($(OS),WNT)
+sal_BATCH_FILE := batch.bat
+else
+sal_BATCH_FILE := batch.sh
+endif
+
+$(call gb_Executable_get_target,osl_process_child) : \
+ $(WORKDIR)/LinkTarget/Executable/$(sal_BATCH_FILE)
+
+$(WORKDIR)/LinkTarget/Executable/$(sal_BATCH_FILE) : \
+ $(SRCDIR)/sal/qa/osl/process/$(sal_BATCH_FILE)
+ mkdir -p $(dir $@) && \
+ $(call gb_Deliver_deliver,$<,$@)
+
+$(call gb_Executable_get_clean_target,osl_process_child) :
+ rm -f $(WORKDIR)/LinkTarget/Executable/$(sal_BATCH_FILE)
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/Library_lo-bootstrap.mk b/sal/Library_lo-bootstrap.mk
new file mode 100644
index 000000000..3dc4bf9df
--- /dev/null
+++ b/sal/Library_lo-bootstrap.mk
@@ -0,0 +1,31 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Library_Library,lo-bootstrap))
+
+# We explicitly *don't* want gb_STDLIBS to be linked here
+$(eval $(call gb_Library_disable_standard_system_libs,lo-bootstrap))
+
+$(eval $(call gb_Library_add_libs,lo-bootstrap,\
+ -llog \
+ -landroid \
+))
+
+$(eval $(call gb_Library_add_cobjects,lo-bootstrap,\
+ sal/android/libreofficekit-jni \
+ sal/android/lo-bootstrap \
+))
+
+$(eval $(call gb_Library_set_include,lo-bootstrap,\
+ $$(INCLUDE) \
+ -I$(SRCDIR)/sal/inc \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk
new file mode 100644
index 000000000..aae7c97f0
--- /dev/null
+++ b/sal/Library_sal.mk
@@ -0,0 +1,259 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Library_Library,sal))
+
+$(eval $(call gb_Library_set_soversion_script,sal,$(SRCDIR)/sal/util/sal.map))
+
+$(eval $(call gb_Library_set_precompiled_header,sal,sal/inc/pch/precompiled_sal))
+
+$(eval $(call gb_Library_set_is_ure_library_or_dependency,sal))
+
+$(eval $(call gb_Library_set_include,sal,\
+ $$(INCLUDE) \
+ -I$(SRCDIR)/sal/inc \
+ $(BACKTRACE_CFLAGS) \
+))
+
+$(eval $(call gb_Library_add_defs,sal,\
+ $(if $(filter FUZZERS,$(BUILD_TYPE)), \
+ -DFORCE_DEFAULT_SIGNAL \
+ ) \
+ $(if $(filter iOS,$(OS)), \
+ -DNO_CHILD_PROCESSES \
+ ) \
+ -DSAL_DLLIMPLEMENTATION \
+ -DRTL_OS="\"$(RTL_OS)\"" \
+ -DRTL_ARCH="\"$(RTL_ARCH)\"" \
+ -DSRCDIR="\"$(SRCDIR)\"" \
+ $(call gb_CondLibSalTextenc,-DCOND_LIB_SAL_TEXTENC) \
+))
+
+$(eval $(call gb_Library_use_libraries,sal,\
+ $(if $(filter ANDROID,$(OS)), \
+ lo-bootstrap \
+ ) \
+))
+
+$(eval $(call gb_Library_use_externals,sal,\
+ dragonbox \
+ dtoa \
+ valgrind \
+ zlib \
+))
+
+$(eval $(call gb_Library_use_system_win32_libs,sal,\
+ advapi32 \
+ comdlg32 \
+ dbghelp \
+ mpr \
+ ole32 \
+ shell32 \
+ user32 \
+ userenv \
+ wer \
+ ws2_32 \
+))
+
+$(eval $(call gb_Library_add_libs,sal,\
+ $(if $(filter LINUX,$(OS)), \
+ -ldl \
+ -lrt \
+ ) \
+ $(if $(filter SOLARIS,$(OS)), \
+ -lnsl \
+ -lsocket \
+ ) \
+ $(if $(filter HAIKU,$(OS)), \
+ -lnetwork \
+ ) \
+ $(BACKTRACE_LIBS) \
+))
+
+ifeq ($(OS),MACOSX)
+$(eval $(call gb_Library_use_system_darwin_frameworks,sal,\
+ Carbon \
+ CoreFoundation \
+ Foundation \
+ $(if $(ENABLE_MACOSX_SANDBOX),Security) \
+))
+endif
+
+$(eval $(call gb_Library_add_exception_objects,sal,\
+ sal/osl/all/compat \
+ sal/osl/all/debugbase \
+ sal/osl/all/filepath \
+ sal/osl/all/loadmodulerelative \
+ sal/osl/all/log \
+ sal/osl/all/mutexshared \
+ sal/osl/all/signalshared \
+ sal/osl/all/utility \
+ sal/rtl/alloc_arena \
+ sal/rtl/alloc_cache \
+ sal/rtl/alloc_fini \
+ sal/rtl/alloc_global \
+ sal/rtl/bootstrap \
+ sal/rtl/byteseq \
+ sal/rtl/cipher \
+ sal/rtl/cmdargs \
+ sal/rtl/crc \
+ sal/rtl/digest \
+ sal/rtl/hash \
+ sal/rtl/locale \
+ sal/rtl/math \
+ sal/rtl/random \
+ sal/rtl/rtl_process \
+ sal/rtl/strbuf \
+ sal/rtl/strimp \
+ sal/rtl/string \
+ sal/rtl/unload \
+ sal/rtl/uri \
+ sal/rtl/ustrbuf \
+ sal/rtl/ustring \
+ sal/rtl/uuid \
+ sal/textenc/converter \
+ sal/textenc/convertsimple \
+ sal/textenc/handleundefinedunicodetotextchar \
+ sal/textenc/tcvtutf8 \
+ sal/textenc/tencinfo \
+ sal/textenc/textcvt \
+ sal/textenc/textenc \
+ sal/textenc/unichars \
+))
+
+ifeq ($(OS),iOS)
+$(eval $(call gb_Library_add_cxxflags,sal,\
+ $(gb_OBJCXXFLAGS) \
+))
+endif
+
+ifeq (,$(call gb_CondLibSalTextenc,$(true)))
+$(eval $(call gb_Library_add_exception_objects,sal,\
+ sal/textenc/context \
+ sal/textenc/convertbig5hkscs \
+ sal/textenc/converteuctw \
+ sal/textenc/convertgb18030 \
+ sal/textenc/convertisciidevangari \
+ sal/textenc/convertiso2022cn \
+ sal/textenc/convertiso2022jp \
+ sal/textenc/convertiso2022kr \
+ sal/textenc/convertsinglebytetobmpunicode \
+ sal/textenc/tables \
+ sal/textenc/tcvtbyte \
+ sal/textenc/tcvtmb \
+ sal/textenc/tcvtutf7 \
+))
+endif
+
+ifneq ($(OS),WNT)
+$(eval $(call gb_Library_add_exception_objects,sal,\
+ sal/osl/unx/backtraceapi \
+ sal/osl/unx/conditn \
+ sal/osl/unx/file \
+ sal/osl/unx/file_error_transl \
+ sal/osl/unx/file_misc \
+ sal/osl/unx/file_path_helper \
+ sal/osl/unx/file_stat \
+ sal/osl/unx/file_url \
+ sal/osl/unx/file_volume \
+ sal/osl/unx/memory \
+ sal/osl/unx/module \
+ sal/osl/unx/mutex \
+ sal/osl/unx/nlsupport \
+ sal/osl/unx/pipe \
+ sal/osl/unx/process \
+ sal/osl/unx/process_impl \
+ sal/osl/unx/profile \
+ sal/osl/unx/random \
+ sal/osl/unx/readwrite_helper \
+ sal/osl/unx/salinit \
+ sal/osl/unx/security \
+ sal/osl/unx/signal \
+ sal/osl/unx/socket \
+ sal/osl/unx/soffice \
+ sal/osl/unx/tempfile \
+ sal/osl/unx/thread \
+ sal/osl/unx/time \
+))
+
+# Note that the uunxapi.mm file just includes the uunxapi.cxx one. Ditto for system.mm
+ifeq ($(OS),MACOSX)
+$(eval $(call gb_Library_add_objcxxobjects,sal,\
+ sal/osl/unx/uunxapi \
+ sal/osl/unx/system \
+))
+else
+$(eval $(call gb_Library_add_exception_objects,sal,\
+ sal/osl/unx/uunxapi \
+ sal/osl/unx/system \
+))
+endif
+
+ifneq ($(filter MACOSX iOS,$(OS)),)
+$(eval $(call gb_Library_add_exception_objects,sal,\
+ sal/osl/unx/osxlocale \
+))
+endif
+ifneq ($(OS),WNT)
+$(eval $(call gb_Library_add_cobjects,sal,\
+ sal/osl/unx/backtrace \
+))
+endif
+ifneq ($(filter SPARC64 SPARC,$(CPUNAME)),)
+$(eval $(call gb_Library_add_asmobjects,sal,\
+ sal/osl/unx/asm/interlck_sparc \
+))
+else
+$(eval $(call gb_Library_add_exception_objects,sal,\
+ sal/osl/unx/interlck \
+))
+endif
+
+else # $(OS) == WNT
+
+$(eval $(call gb_Library_add_exception_objects,sal,\
+ sal/osl/w32/backtrace \
+ sal/osl/w32/conditn \
+ sal/osl/w32/dllentry \
+ sal/osl/w32/file \
+ sal/osl/w32/file_dirvol \
+ sal/osl/w32/file_error \
+ sal/osl/w32/file_url \
+ sal/osl/w32/interlck \
+ sal/osl/w32/memory \
+ sal/osl/w32/module \
+ sal/osl/w32/mutex \
+ sal/osl/w32/nlsupport \
+ sal/osl/w32/path_helper \
+ sal/osl/w32/pipe \
+ sal/osl/w32/process \
+ sal/osl/w32/procimpl \
+ sal/osl/w32/profile \
+ sal/osl/w32/random \
+ sal/osl/w32/salinit \
+ sal/osl/w32/security \
+ sal/osl/w32/signal \
+ sal/osl/w32/socket \
+ sal/osl/w32/tempfile \
+ sal/osl/w32/thread \
+ sal/osl/w32/time \
+))
+
+endif # ifneq ($(OS),WNT)
+
+ifeq ($(ENABLE_CIPHER_OPENSSL_BACKEND),TRUE)
+$(eval $(call gb_Library_add_defs,sal,-DLIBO_CIPHER_OPENSSL_BACKEND))
+$(eval $(call gb_Library_use_externals,sal, \
+ openssl \
+ openssl_headers \
+))
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/Library_sal_textenc.mk b/sal/Library_sal_textenc.mk
new file mode 100644
index 000000000..0fba5d083
--- /dev/null
+++ b/sal/Library_sal_textenc.mk
@@ -0,0 +1,33 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Library_Library,sal_textenc))
+
+$(eval $(call gb_Library_set_plugin_for,sal_textenc,sal))
+
+$(eval $(call gb_Library_use_external,sal_textenc,boost_headers))
+
+$(eval $(call gb_Library_add_exception_objects,sal_textenc,\
+ sal/textenc/context \
+ sal/textenc/convertbig5hkscs \
+ sal/textenc/converteuctw \
+ sal/textenc/convertgb18030 \
+ sal/textenc/convertisciidevangari \
+ sal/textenc/convertiso2022cn \
+ sal/textenc/convertiso2022jp \
+ sal/textenc/convertiso2022kr \
+ sal/textenc/convertsinglebytetobmpunicode \
+ sal/textenc/tables \
+ sal/textenc/tcvtbyte \
+ sal/textenc/tcvtmb \
+ sal/textenc/tcvtutf7 \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/Makefile b/sal/Makefile
new file mode 100644
index 000000000..d22b9aca9
--- /dev/null
+++ b/sal/Makefile
@@ -0,0 +1,24 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+
+include $(module_directory)/../solenv/gbuild/partial_build.mk
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/Module_sal.mk b/sal/Module_sal.mk
new file mode 100644
index 000000000..e0448a508
--- /dev/null
+++ b/sal/Module_sal.mk
@@ -0,0 +1,40 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Module_Module,sal))
+
+$(eval $(call gb_Module_add_targets,sal,\
+ $(if $(CROSS_COMPILING),,$(if $(filter TRUE,$(DISABLE_DYNLOADING)),,Executable_cppunittester)) \
+ $(if $(filter $(OS),ANDROID), \
+ Library_lo-bootstrap) \
+ Library_sal \
+ $(call gb_CondLibSalTextenc,Library_sal_textenc) \
+))
+
+ifneq (,$(filter DESKTOP,$(BUILD_TYPE)))
+
+$(eval $(call gb_Module_add_targets,sal,\
+ Executable_osl_process_child \
+))
+
+$(eval $(call gb_Module_add_check_targets,sal,\
+ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),,CppunitTest_Module_DLL) \
+ $(if $(filter WNT,$(OS)),CppunitTest_sal_comtools) \
+ $(if $(filter WNT,$(OS)),CppunitTest_sal_retry_if_failed) \
+ CppunitTest_sal_osl_security \
+ CppunitTest_sal_osl \
+ CppunitTest_sal_rtl \
+ CppunitTest_sal_types \
+ $(if $(COM_IS_CLANG),$(if $(COMPILER_EXTERNAL_TOOL)$(COMPILER_PLUGIN_TOOL),, \
+ CompilerTest_sal_rtl_oustring)) \
+))
+
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/README.md b/sal/README.md
new file mode 100644
index 000000000..deaf7b4c0
--- /dev/null
+++ b/sal/README.md
@@ -0,0 +1,11 @@
+# System Abstraction Layer (SAL)
+
+System abstraction layer; rtl, osl and sal
+
+`rtl`:
+Platform independent strings
+
+`osl`:
+platform specific stuff, threads, dynamic loading, process, ipc, etc
+
+Exports only C API and some inline-methods (only C++ API).
diff --git a/sal/android/libreofficekit-jni.c b/sal/android/libreofficekit-jni.c
new file mode 100644
index 000000000..08827df54
--- /dev/null
+++ b/sal/android/libreofficekit-jni.c
@@ -0,0 +1,209 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <fcntl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <jni.h>
+
+#include <android/log.h>
+#include <android/asset_manager.h>
+#include <android/asset_manager_jni.h>
+
+#include <osl/detail/android-bootstrap.h>
+
+#include <LibreOfficeKit/LibreOfficeKit.h>
+
+#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "LibreOfficeKit", __VA_ARGS__))
+#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "LibreOfficeKit", __VA_ARGS__))
+
+/* These are valid / used in all apps. */
+extern const char* data_dir;
+extern const char* cache_dir;
+extern void* apk_file;
+extern int apk_file_size;
+AAssetManager* native_asset_manager;
+
+extern void Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env, jobject clazz, jstring string);
+extern void Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env, jobject clazz, jboolean state);
+
+extern LibreOfficeKit* libreofficekit_hook(const char* install_path);
+
+static char *full_program_dir = NULL;
+
+/// Call the same method from Bootstrap.
+__attribute__ ((visibility("default")))
+void
+Java_org_libreoffice_kit_LibreOfficeKit_putenv
+ (JNIEnv* env, jobject clazz, jstring string)
+{
+ Java_org_libreoffice_android_Bootstrap_putenv(env, clazz, string);
+}
+
+/// Call the same method from Bootstrap.
+__attribute__ ((visibility("default")))
+void Java_org_libreoffice_kit_LibreOfficeKit_redirectStdio
+ (JNIEnv* env, jobject clazz, jboolean state)
+{
+ Java_org_libreoffice_android_Bootstrap_redirect_1stdio(env, clazz, state);
+}
+
+/// Initialize the LibreOfficeKit.
+__attribute__ ((visibility("default")))
+jboolean libreofficekit_initialize(JNIEnv* env,
+ jstring dataDir, jstring cacheDir, jstring apkFile, jobject assetManager)
+{
+ struct stat st;
+ int fd;
+ const char *dataDirPath;
+ const char *cacheDirPath;
+ const char *apkFilePath;
+
+ size_t data_dir_len;
+ const char fontsConf[] = "/etc/fonts/fonts.conf";
+ char *fontsConfPath;
+
+ setenv("OOO_DISABLE_RECOVERY", "1", 1);
+
+ native_asset_manager = AAssetManager_fromJava(env, assetManager);
+
+ dataDirPath = (*env)->GetStringUTFChars(env, dataDir, NULL);
+ data_dir = strdup(dataDirPath);
+ (*env)->ReleaseStringUTFChars(env, dataDir, dataDirPath);
+
+ cacheDirPath = (*env)->GetStringUTFChars(env, cacheDir, NULL);
+ cache_dir = strdup(cacheDirPath);
+ (*env)->ReleaseStringUTFChars(env, cacheDir, cacheDirPath);
+
+ // TMPDIR is used by osl_getTempDirURL()
+ setenv("TMPDIR", cache_dir, 1);
+
+ data_dir_len = strlen(data_dir);
+ fontsConfPath = malloc(data_dir_len + sizeof(fontsConf));
+ strncpy(fontsConfPath, data_dir, data_dir_len);
+ strncpy(fontsConfPath + data_dir_len, fontsConf, sizeof(fontsConf));
+
+ fd = open(fontsConfPath, O_RDONLY);
+ if (fd != -1) {
+ close(fd);
+ LOGI("Setting FONTCONFIG_FILE to %s", fontsConfPath);
+ setenv("FONTCONFIG_FILE", fontsConfPath, 1);
+ // DEBUG:
+ //setenv("FC_DEBUG", "8191", 1); // log everything
+ //Java_org_libreoffice_android_Bootstrap_redirect_1stdio(NULL, NULL, JNI_TRUE);
+ }
+ free(fontsConfPath);
+
+ apkFilePath = (*env)->GetStringUTFChars(env, apkFile, NULL);
+
+ fd = open(apkFilePath, O_RDONLY);
+ if (fd == -1) {
+ LOGE("Could not open %s", apkFilePath);
+ (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
+ return JNI_FALSE;
+ }
+ if (fstat(fd, &st) == -1) {
+ LOGE("Could not fstat %s", apkFilePath);
+ close(fd);
+ (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
+ return JNI_FALSE;
+ }
+ apk_file = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+ close(fd);
+
+ if (apk_file == MAP_FAILED) {
+ LOGE("Could not mmap %s", apkFilePath);
+ (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
+ return JNI_FALSE;
+ }
+ apk_file_size = st.st_size;
+
+ (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
+
+ if (!setup_cdir())
+ {
+ LOGE("setup_cdir failed");
+ return JNI_FALSE;
+ }
+
+ if (!setup_assets_tree())
+ {
+ LOGE("setup_assets_tree failed");
+ return JNI_FALSE;
+ }
+
+ LOGI("LibreOfficeKit: libreofficekit_initialize finished");
+
+ return JNI_TRUE;
+}
+
+/// Initialize the LibreOfficeKit.
+__attribute__ ((visibility("default")))
+jboolean Java_org_libreoffice_kit_LibreOfficeKit_initializeNative
+ (JNIEnv* env, jobject clazz,
+ jstring dataDir, jstring cacheDir, jstring apkFile, jobject assetManager)
+{
+ const char program_dir[] = "/program";
+ size_t data_dir_len;
+
+ (void) clazz;
+
+ libreofficekit_initialize(env, dataDir, cacheDir, apkFile, assetManager);
+
+ // LibreOfficeKit expects a path to the program/ directory
+ free(full_program_dir);
+ data_dir_len = strlen(data_dir);
+ full_program_dir = malloc(data_dir_len + sizeof(program_dir));
+
+ strncpy(full_program_dir, data_dir, data_dir_len);
+ strncpy(full_program_dir + data_dir_len, program_dir, sizeof(program_dir));
+
+ // Initialize LibreOfficeKit
+ if (!libreofficekit_hook(full_program_dir))
+ {
+ LOGE("libreofficekit_hook returned null");
+ return JNI_FALSE;
+ }
+
+ LOGI("LibreOfficeKit successfully initialized");
+
+ return JNI_TRUE;
+}
+
+__attribute__ ((visibility("default")))
+jobject Java_org_libreoffice_kit_LibreOfficeKit_getLibreOfficeKitHandle
+ (JNIEnv* env, jobject clazz)
+{
+ LibreOfficeKit* aOffice;
+
+ (void) env;
+ (void) clazz;
+
+ aOffice = libreofficekit_hook(full_program_dir);
+
+ return (*env)->NewDirectByteBuffer(env, (void*) aOffice, sizeof(LibreOfficeKit));
+}
+
+__attribute__ ((visibility("default")))
+AAssetManager *
+lo_get_native_assetmgr(void)
+{
+ return native_asset_manager;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/android/lo-bootstrap.c b/sal/android/lo-bootstrap.c
new file mode 100644
index 000000000..0af8cfbb4
--- /dev/null
+++ b/sal/android/lo-bootstrap.c
@@ -0,0 +1,921 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <time.h>
+
+#include <dlfcn.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+#include <jni.h>
+#include <zlib.h>
+
+#include <android/log.h>
+
+#include "uthash.h"
+
+#include <osl/detail/android-bootstrap.h>
+
+#undef LOGI
+
+#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "lo-bootstrap", __VA_ARGS__))
+#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "lo-bootstrap", __VA_ARGS__))
+
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+
+// TODO: workaround for unified headers migration - only made available when
+// __USE_BSD or __BIONIC__ are defined, so just add those here...
+#define letoh16(x) (x)
+#define letoh32(x) (x)
+
+struct engine {
+ int dummy;
+};
+
+/* These are valid / used in all apps. */
+const char *data_dir;
+const char *cache_dir;
+void *apk_file;
+int apk_file_size;
+JavaVM *the_java_vm;
+
+/* Zip data structures */
+
+/* compression methods */
+#define STORE 0
+
+struct local_file_header {
+ uint32_t signature;
+ uint16_t min_version;
+ uint16_t general_flag;
+ uint16_t compression;
+ uint16_t lastmod_time;
+ uint16_t lastmod_date;
+ uint32_t crc32;
+ uint32_t compressed_size;
+ uint32_t uncompressed_size;
+ uint16_t filename_size;
+ uint16_t extra_field_size;
+ char data[0];
+} __attribute__((__packed__));
+
+struct cdir_entry {
+ uint32_t signature;
+ uint16_t creator_version;
+ uint16_t min_version;
+ uint16_t general_flag;
+ uint16_t compression;
+ uint16_t lastmod_time;
+ uint16_t lastmod_date;
+ uint32_t crc32;
+ uint32_t compressed_size;
+ uint32_t uncompressed_size;
+ uint16_t filename_size;
+ uint16_t extra_field_size;
+ uint16_t file_comment_size;
+ uint16_t disk_num;
+ uint16_t internal_attr;
+ uint32_t external_attr;
+ uint32_t offset;
+ char data[0];
+} __attribute__((__packed__));
+
+#define CDIR_END_SIG 0x06054b50
+
+struct cdir_end {
+ uint32_t signature;
+ uint16_t disk_num;
+ uint16_t cdir_disk;
+ uint16_t disk_entries;
+ uint16_t cdir_entries;
+ uint32_t cdir_size;
+ uint32_t cdir_offset;
+ uint16_t comment_size;
+ char comment[0];
+} __attribute__((__packed__));
+
+/* End of Zip data structures */
+
+static struct cdir_entry *cdir_start;
+static uint16_t cdir_entries;
+
+/* Data structure to turn Zip's list in arbitrary order of
+ * hierarchical pathnames (not necessarily including entries for
+ * directories) into an actual hierarchical directory tree, so that we
+ * can iterate over directory entries properly in the dirent style
+ * functions.
+ */
+
+typedef struct direntry *direntry;
+
+struct direntry {
+ UT_hash_handle hh;
+ enum { REGULAR, DIRECTORY } kind;
+ int ino;
+ union {
+ struct cdir_entry *file;
+ direntry subdir;
+ };
+};
+
+struct lo_apk_dir {
+ direntry cur;
+};
+
+static direntry assets = NULL;
+
+static uint32_t
+cdir_entry_size(struct cdir_entry *entry)
+{
+ return sizeof(*entry) +
+ letoh16(entry->filename_size) +
+ letoh16(entry->extra_field_size) +
+ letoh16(entry->file_comment_size);
+}
+
+int
+setup_cdir(void)
+{
+ struct cdir_end *dirend = (struct cdir_end *)((char *) apk_file + apk_file_size - sizeof(*dirend));
+ uint32_t cdir_offset;
+
+ while ((void *)dirend > apk_file &&
+ letoh32(dirend->signature) != CDIR_END_SIG)
+ dirend = (struct cdir_end *)((char *)dirend - 1);
+ if (letoh32(dirend->signature) != CDIR_END_SIG) {
+ LOGE("setup_cdir: Could not find end of central directory record");
+ return 0;
+ }
+
+ cdir_offset = letoh32(dirend->cdir_offset);
+
+ cdir_entries = letoh16(dirend->cdir_entries);
+ cdir_start = (struct cdir_entry *)((char *)apk_file + cdir_offset);
+
+ return 1;
+}
+
+static struct cdir_entry *
+find_cdir_entry(struct cdir_entry *entry, int count, const char *name)
+{
+ size_t name_size = strlen(name);
+ while (count--) {
+ if (letoh16(entry->filename_size) == name_size &&
+ !memcmp(entry->data, name, name_size))
+ return entry;
+ entry = (struct cdir_entry *)((char *)entry + cdir_entry_size(entry));
+ }
+ return NULL;
+}
+
+static void
+handle_one_asset(struct cdir_entry *entry)
+{
+ /* In the .apk there are no initial slashes */
+ const char *p = entry->data + sizeof("assets/")-1;
+ const char *z = entry->data + entry->filename_size;
+ direntry *dir = &assets;
+ static int ino = 1;
+
+ while (p < z) {
+ const char *q = p;
+ direntry old, new;
+
+ while (q < z && *q != '/')
+ q++;
+ HASH_FIND(hh, *dir, p, (unsigned)(q - p), old);
+ if (*q == '/') {
+ if (old == NULL) {
+ new = malloc(sizeof(*new));
+ new->ino = ino++;
+ new->kind = DIRECTORY;
+ new->subdir = NULL;
+ HASH_ADD_KEYPTR(hh, *dir, p, (unsigned)(q - p), new);
+ dir = &new->subdir;
+ } else {
+ dir = &old->subdir;
+ }
+ p = q + 1;
+ } else {
+ if (old == NULL) {
+ new = malloc(sizeof(*new));
+ new->ino = ino++;
+ new->kind = REGULAR;
+ new->file = entry;
+ HASH_ADD_KEYPTR(hh, *dir, p, (unsigned)(q - p), new);
+ } else {
+ LOGE("duplicate entry in apk: %.*s", entry->filename_size, entry->data);
+ }
+ p = q;
+ }
+ (void) dir;
+ }
+}
+
+int
+setup_assets_tree(void)
+{
+ int count = cdir_entries;
+ struct cdir_entry *entry = cdir_start;
+
+ while (count--) {
+ if (letoh16(entry->filename_size) >= sizeof("assets/")-1 &&
+ memcmp(entry->data, "assets/", sizeof("assets/")-1) == 0)
+ handle_one_asset(entry);
+ entry = (struct cdir_entry *)((char *)entry + cdir_entry_size(entry));
+ }
+ return 1;
+}
+
+/* The lo-native-code shared library is always loaded from Java, so this is
+ * always called by JNI first.
+ */
+__attribute__ ((visibility("default")))
+jint
+JNI_OnLoad(JavaVM* vm, void* reserved)
+{
+ (void) reserved;
+
+ the_java_vm = vm;
+
+ return JNI_VERSION_1_6;
+}
+
+// public static native boolean setup(String dataDir,
+// String cacheDir,
+// String apkFile)
+
+__attribute__ ((visibility("default")))
+jboolean
+Java_org_libreoffice_android_Bootstrap_setup__Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2
+ (JNIEnv* env,
+ jobject clazz,
+ jstring dataDir,
+ jstring cacheDir,
+ jstring apkFile)
+{
+ struct stat st;
+ int fd;
+ const char *dataDirPath;
+ const char *cacheDirPath;
+ const char *apkFilePath;
+
+ (void) clazz;
+
+ dataDirPath = (*env)->GetStringUTFChars(env, dataDir, NULL);
+ data_dir = strdup(dataDirPath);
+ (*env)->ReleaseStringUTFChars(env, dataDir, dataDirPath);
+
+ cacheDirPath = (*env)->GetStringUTFChars(env, cacheDir, NULL);
+ cache_dir = strdup(cacheDirPath);
+ (*env)->ReleaseStringUTFChars(env, cacheDir, cacheDirPath);
+
+ apkFilePath = (*env)->GetStringUTFChars(env, apkFile, NULL);
+
+ fd = open(apkFilePath, O_RDONLY);
+ if (fd == -1) {
+ LOGE("Could not open %s", apkFilePath);
+ (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
+ return JNI_FALSE;
+ }
+ if (fstat(fd, &st) == -1) {
+ LOGE("Could not fstat %s", apkFilePath);
+ close(fd);
+ (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
+ return JNI_FALSE;
+ }
+ apk_file = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+ close(fd);
+
+ if (apk_file == MAP_FAILED) {
+ LOGE("Could not mmap %s", apkFilePath);
+ (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
+ return JNI_FALSE;
+ }
+ apk_file_size = st.st_size;
+
+ (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
+
+ if (!setup_cdir())
+ return JNI_FALSE;
+
+ if (!setup_assets_tree())
+ return JNI_FALSE;
+
+ return JNI_TRUE;
+}
+
+static jboolean
+get_jni_string_array(JNIEnv *env,
+ const char *function_and_parameter_name,
+ jobject strv,
+ int *argc,
+ const char ***argv)
+{
+ jclass StringArray;
+ int i;
+
+ StringArray = (*env)->FindClass(env, "[Ljava/lang/String;");
+ if (StringArray == NULL) {
+ LOGE("Could not find String[] class");
+ return JNI_FALSE;
+ }
+
+ if (!(*env)->IsInstanceOf(env, strv, StringArray)) {
+ LOGE("%s is not a String[]?", function_and_parameter_name);
+ return JNI_FALSE;
+ }
+
+ *argc = (*env)->GetArrayLength(env, strv);
+ *argv = malloc(sizeof(char *) * (*argc+1));
+
+ for (i = 0; i < *argc; i++) {
+ const char *s = (*env)->GetStringUTFChars(env, (*env)->GetObjectArrayElement(env, strv, i), NULL);
+ (*argv)[i] = strdup(s);
+ (*env)->ReleaseStringUTFChars(env, (*env)->GetObjectArrayElement(env, strv, i), s);
+ }
+ (*argv)[*argc] = NULL;
+
+ return JNI_TRUE;
+}
+
+// public static native int getpid();
+
+__attribute__ ((visibility("default")))
+jint
+Java_org_libreoffice_android_Bootstrap_getpid(JNIEnv* env,
+ jobject clazz)
+{
+ (void) env;
+ (void) clazz;
+
+ return getpid();
+}
+
+// public static native void system(String cmdline);
+
+__attribute__ ((visibility("default")))
+void
+Java_org_libreoffice_android_Bootstrap_system(JNIEnv* env,
+ jobject clazz,
+ jstring cmdline)
+{
+ const char *s;
+
+ (void) clazz;
+
+ s = (*env)->GetStringUTFChars(env, cmdline, NULL);
+
+ LOGI("system(%s)", s);
+
+ system(s);
+
+ (*env)->ReleaseStringUTFChars(env, cmdline, s);
+}
+
+// public static native void putenv(String string);
+
+__attribute__ ((visibility("default")))
+void
+Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env,
+ jobject clazz,
+ jstring string)
+{
+ const char *s;
+ char *s_copy;
+
+ (void) clazz;
+
+ s = (*env)->GetStringUTFChars(env, string, NULL);
+ s_copy = strdup(s);
+
+ LOGI("putenv(%s)", s_copy);
+
+ putenv(s_copy);
+
+#if 0
+ {
+ static int beenhere=0;
+ if (!beenhere) {
+ LOGI("lo-bootstrap: Sleeping for 20 seconds, start ndk-gdb NOW if that is your intention");
+ sleep(20);
+ beenhere = 1;
+ }
+ }
+#endif
+
+ (*env)->ReleaseStringUTFChars(env, string, s);
+}
+
+__attribute__ ((visibility("default")))
+void *
+lo_apkentry(const char *filename,
+ size_t *size)
+{
+ struct cdir_entry *entry;
+ struct local_file_header *file;
+ void *data;
+
+ if (*filename == '/')
+ filename++;
+
+ entry = find_cdir_entry(cdir_start, cdir_entries, filename);
+
+ if (entry == NULL) {
+ LOGE("lo_apkentry: Could not find %s", filename);
+ return NULL;
+ }
+ file = (struct local_file_header *)((char *)apk_file + letoh32(entry->offset));
+
+ if (letoh16(file->compression) != STORE) {
+ LOGE("lo_apkentry: File %s is compressed", filename);
+ return NULL;
+ }
+
+ data = ((char *)&file->data) + letoh16(file->filename_size) + letoh16(file->extra_field_size);
+ *size = file->uncompressed_size;
+
+ /* LOGI("lo_apkentry(%s): %p, %d", filename, data, *size); */
+
+ return data;
+}
+
+__attribute__ ((visibility("default")))
+lo_apk_dir *
+lo_apk_opendir(const char *dirname)
+{
+ /* In the .apk there are no initial slashes, but the parameter passed to
+ * us does have it.
+ */
+ const char *p = dirname + sizeof("/assets/")-1;
+ direntry dir = assets;
+
+ if (!*p) {
+ lo_apk_dir *result = malloc(sizeof(*result));
+ result->cur = assets;
+ return result;
+ }
+
+ while (1) {
+ const char *q = p;
+ direntry entry;
+
+ while (*q && *q != '/')
+ q++;
+
+ HASH_FIND(hh, dir, p, (unsigned)(q - p), entry);
+
+ if (entry == NULL && *q == '/') {
+ errno = ENOENT;
+ return NULL;
+ } else if (entry == NULL) {
+ /* Empty directories, or directories containing only "hidden"
+ * files (like the .gitignore in sc/qa/unit/qpro/indeterminate)
+ * are not present in the .apk. So we need to pretend that any
+ * directory that doesn't exist as a parent of an entry in the
+ * .apk *does* exist but is empty.
+ */
+ lo_apk_dir *result = malloc(sizeof(*result));
+ result->cur = NULL;
+ return result;
+ }
+
+ if (entry->kind != DIRECTORY) {
+ errno = ENOTDIR;
+ return NULL;
+ }
+
+ if (!q[0] || !q[1]) {
+ lo_apk_dir *result = malloc(sizeof(*result));
+ result->cur = entry->subdir;
+ return result;
+ }
+
+ dir = entry->subdir;
+ p = q + 1;
+ }
+}
+
+__attribute__ ((visibility("default")))
+struct dirent *
+lo_apk_readdir(lo_apk_dir *dirp)
+{
+ static struct dirent result;
+
+ if (dirp->cur == NULL) {
+ /* LOGI("lo_apk_readdir(%p) = NULL", dirp); */
+ return NULL;
+ }
+
+ result.d_ino = dirp->cur->ino;
+ result.d_off = 0;
+ result.d_reclen = 0;
+
+ if (dirp->cur->kind == DIRECTORY)
+ result.d_type = DT_DIR;
+ else
+ result.d_type = DT_REG;
+
+ memcpy(result.d_name, dirp->cur->hh.key, dirp->cur->hh.keylen);
+ result.d_name[dirp->cur->hh.keylen] = '\0';
+
+ dirp->cur = dirp->cur->hh.next;
+
+ /* LOGI("lo_apk_readdir(%p) = %s:%s", dirp, result.d_type == DT_DIR ? "DIR" : "REG", result.d_name); */
+
+ return &result;
+}
+
+__attribute__ ((visibility("default")))
+int
+lo_apk_closedir(lo_apk_dir *dirp)
+{
+ free(dirp);
+
+ /* LOGI("lo_apk_closedir(%p)", dirp); */
+
+ return 0;
+}
+
+static int
+new_stat(const char *path,
+ struct stat *statp,
+ struct cdir_entry *entry,
+ int mode,
+ int fake_ino)
+{
+ struct tm tm;
+
+ memset(statp, 0, sizeof(*statp));
+ statp->st_mode = mode | S_IRUSR;
+ statp->st_nlink = 1;
+
+ statp->st_uid = getuid();
+ statp->st_gid = getgid();
+
+ if (entry != NULL)
+ statp->st_size = entry->uncompressed_size;
+ else
+ statp->st_size = 0;
+ statp->st_blksize = 512;
+ if (statp->st_size == 0)
+ statp->st_blocks = 0;
+ else
+ statp->st_blocks = (statp->st_size - 1) / statp->st_blksize + 1;
+
+ statp->st_atime = time(NULL);
+
+ memset(&tm, 0, sizeof(tm));
+ tm.tm_sec = (letoh16(entry->lastmod_time) & 0x1F) * 2;
+ tm.tm_min = (letoh16(entry->lastmod_time) >> 5) & 0x3F;
+ tm.tm_hour = (letoh16(entry->lastmod_time) >> 11) & 0x1F;
+ tm.tm_mday = letoh16(entry->lastmod_date) & 0x1F;
+ tm.tm_mon = ((letoh16(entry->lastmod_date) >> 5) & 0x0F) - 1;
+ tm.tm_year = ((letoh16(entry->lastmod_date) >> 9) & 0x7F) + 80;
+
+ statp->st_mtime = mktime(&tm);
+ statp->st_ctime = statp->st_mtime;
+
+ statp->st_ino = fake_ino;
+
+ (void) path;
+ /* LOGI("lo_apk_lstat(%s) = { mode=%o, size=%lld, ino=%lld mtime=%.24s }",
+ path, statp->st_mode, statp->st_size, statp->st_ino,
+ ctime((const time_t *) &statp->st_mtime)); */
+
+ return 0;
+}
+
+__attribute__ ((visibility("default")))
+int
+lo_apk_lstat(const char *path,
+ struct stat *statp)
+{
+ const char *pn = path;
+ int count = cdir_entries;
+ struct cdir_entry *entry = cdir_start;
+ size_t name_size;
+
+ if (*pn == '/') {
+ pn++;
+ if (!pn[0])
+ return new_stat(path, statp, NULL, S_IFDIR | S_IXUSR, 1);
+ }
+
+ name_size = strlen(pn);
+ while (count--)
+ {
+ if (letoh16(entry->filename_size) >= name_size &&
+ !memcmp(entry->data, pn, name_size) &&
+ (letoh16(entry->filename_size) == name_size || entry->data[name_size] == '/'))
+ break;
+ entry = (struct cdir_entry *)((char *)entry + cdir_entry_size(entry));
+ }
+ if (count >= 0) {
+ if (letoh16(entry->filename_size) == name_size)
+ return new_stat(path, statp, entry, S_IFREG, cdir_entries - count + 1);
+ else
+ return new_stat(path, statp, entry, S_IFDIR | S_IXUSR, cdir_entries - count + 1);
+ }
+
+ errno = ENOENT;
+ return -1;
+}
+
+/* Android's JNI works only to libraries loaded through Java's
+ * System.loadLibrary(), it seems. But now with just one big app-specific .so
+ * on Android, that would not be a problem, but for historical reasons, we
+ * have JNI wrappers here, and then call the VCL etc function from them. Oh
+ * well, one could say it's clean to have all the Android-specific JNI
+ * functions here in this file.
+ */
+
+extern void osl_setCommandArgs(int, char **);
+
+__attribute__ ((visibility("default")))
+void
+Java_org_libreoffice_android_Bootstrap_setCommandArgs(JNIEnv* env,
+ jobject clazz,
+ jobject argv)
+{
+ char **c_argv;
+ int c_argc;
+ Dl_info lo_bootstrap_info;
+
+ (void) clazz;
+
+ if (!get_jni_string_array(env, "setCommandArgs :argv", argv, &c_argc, (const char ***) &c_argv))
+ return;
+
+ if (dladdr(Java_org_libreoffice_android_Bootstrap_setCommandArgs, &lo_bootstrap_info) != 0) {
+ char *new_argv0 = malloc(strlen(lo_bootstrap_info.dli_fname) + strlen(c_argv[0]));
+ char *slash;
+ strcpy(new_argv0, lo_bootstrap_info.dli_fname);
+ slash = strrchr(new_argv0, '/');
+ if (slash != NULL)
+ *slash = '\0';
+ slash = strrchr(new_argv0, '/');
+ if (slash != NULL)
+ strcpy(slash+1, c_argv[0]);
+ else
+ strcpy(new_argv0, c_argv[0]);
+ free(c_argv[0]);
+ c_argv[0] = new_argv0;
+ }
+
+ osl_setCommandArgs(c_argc, c_argv);
+}
+
+/* Code for reading lines from the pipe based on the (Apache-licensed) Android
+ * logwrapper.c
+ */
+
+static int
+read_from(int fd, const char *tag, char *buffer, int *sz, int *a, int *b, size_t sizeof_buffer)
+{
+ int nread;
+
+ nread = read(fd, buffer+*b, sizeof_buffer - 1 - *b);
+ *sz = nread;
+
+ if (nread == -1) {
+ LOGE("redirect_thread: Reading from %d failed: %s", fd, strerror(errno));
+ close(fd);
+ return -1;
+ }
+
+ if (nread == 0) {
+ LOGI("redirect_thread: EOF from fd %d", fd);
+ close(fd);
+ return 0;
+ }
+
+ *sz += *b;
+
+ for (*b = 0; *b < *sz; (*b)++) {
+ if (buffer[*b] == '\n') {
+ buffer[*b] = '\0';
+ __android_log_print(ANDROID_LOG_INFO, tag, "%s", &buffer[*a]);
+ *a = *b + 1;
+ }
+ }
+
+ if (*a == 0 && *b == (int) sizeof_buffer - 1) {
+ // buffer is full, flush
+ buffer[*b] = '\0';
+ __android_log_print(ANDROID_LOG_INFO, tag, "%s", &buffer[*a]);
+ *b = 0;
+ } else if (*a != *b) {
+ // Keep left-overs
+ *b -= *a;
+ memmove(buffer, &buffer[*a], *b);
+ *a = 0;
+ } else {
+ *a = 0;
+ *b = 0;
+ }
+
+ return nread;
+}
+
+static int stdout_pipe[2], stderr_pipe[2];
+
+static void *
+redirect_thread(void *arg)
+{
+ char buffer[2][4096];
+ int a[2] = { 0, 0 };
+ int b[2] = { 0, 0 };
+ int sz[2];
+
+ (void) arg;
+
+ while (1) {
+ fd_set readfds;
+ int nfds = 0;
+
+ FD_ZERO(&readfds);
+ if (stdout_pipe[0] != -1) {
+ FD_SET(stdout_pipe[0], &readfds);
+ nfds = MAX(nfds, stdout_pipe[0] + 1);
+ }
+ if (stderr_pipe[0] != -1) {
+ FD_SET(stderr_pipe[0], &readfds);
+ nfds = MAX(nfds, stderr_pipe[0] + 1);
+ }
+ if (nfds == 0) {
+ LOGI("redirect_thread: Nothing to read any more, thread exiting");
+ return NULL;
+ }
+
+ if (select(nfds, &readfds, NULL, NULL, NULL) == -1) {
+ LOGE("redirect_thread: select failed: %s, thread exiting", strerror(errno));
+ close(stdout_pipe[0]);
+ stdout_pipe[0] = -1;
+ close(stderr_pipe[0]);
+ stderr_pipe[0] = -1;
+ return NULL;
+ }
+
+ if (stdout_pipe[0] != -1 &&
+ FD_ISSET(stdout_pipe[0], &readfds)) {
+ if (read_from(stdout_pipe[0], "stdout", buffer[0], &sz[0], &a[0], &b[0], sizeof(buffer[0])) <= 0) {
+ stdout_pipe[0] = -1;
+ }
+ }
+
+ if (stderr_pipe[0] != -1 &&
+ FD_ISSET(stderr_pipe[0], &readfds)) {
+ if (read_from(stderr_pipe[0], "stderr", buffer[1], &sz[1], &a[1], &b[1], sizeof(buffer[1])) <= 0) {
+ stderr_pipe[0] = -1;
+ }
+ }
+ }
+}
+
+static int
+redirect_to_null(void)
+{
+ int null = open("/dev/null", O_WRONLY);
+ if (null == -1) {
+ LOGE("redirect_stdio: Could not open /dev/null: %s", strerror(errno));
+ /* If we can't redirect stdout or stderr to /dev/null, just close them
+ * then instead. Huh?
+ */
+ close(1);
+ close(2);
+ return 0;
+ }
+ if (dup2(null, 1) == -1) {
+ LOGE("redirect_stdio: Could not dup2 %d to 1: %s", null, strerror(errno));
+ close(null);
+ close(1);
+ close(2);
+ return 0;
+ }
+ if (dup2(null, 2) == -1) {
+ LOGE("redirect_stdio: Could not dup2 %d to 2: %s", null, strerror(errno));
+ close(null);
+ close(1);
+ close(2);
+ return 0;
+ }
+ close(null);
+ return 1;
+}
+
+__attribute__ ((visibility("default")))
+void
+Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env,
+ jobject clazz,
+ jboolean state)
+{
+ static jboolean current = JNI_FALSE;
+ pthread_t thread;
+ pthread_attr_t attr;
+
+ (void) env;
+ (void) clazz;
+
+ if (state == current)
+ return;
+
+ if (state == JNI_FALSE) {
+ if (!redirect_to_null())
+ return;
+ } else {
+ if (pipe(stdout_pipe) == -1) {
+ LOGE("redirect_stdio: Could not create pipes: %s", strerror(errno));
+ return;
+ }
+ if (pipe(stderr_pipe) == -1) {
+ LOGE("redirect_stdio: Could not create pipes: %s", strerror(errno));
+ close(stdout_pipe[0]);
+ close(stdout_pipe[1]);
+ return;
+ }
+ LOGI("redirect_stdio: stdout pipe: [%d,%d], stderr pipe: [%d,%d]",
+ stdout_pipe[0], stdout_pipe[1], stderr_pipe[0], stderr_pipe[1]);
+
+ if (dup2(stdout_pipe[1], 1) == -1) {
+ LOGE("redirect_stdio: Could not dup2 %d to 1: %s", stdout_pipe[1], strerror(errno));
+ close(stdout_pipe[0]);
+ close(stdout_pipe[1]);
+ close(stderr_pipe[0]);
+ close(stderr_pipe[1]);
+ return;
+ }
+
+ if (dup2(stderr_pipe[1], 2) == -1) {
+ LOGE("redirect_stdio: Could not dup2 %d to 2: %s", stdout_pipe[1], strerror(errno));
+ /* stdout has already been redirected to its pipe, so redirect
+ * it back to /dev/null
+ */
+ redirect_to_null();
+ close(stdout_pipe[0]);
+ close(stdout_pipe[1]);
+ close(stderr_pipe[0]);
+ close(stderr_pipe[1]);
+ return;
+ }
+ close(stdout_pipe[1]);
+ close(stderr_pipe[1]);
+
+ if (pthread_attr_init(&attr) != 0 ||
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0 ||
+ pthread_create(&thread, &attr, redirect_thread, NULL) != 0) {
+ LOGE("redirect_stdio: Could not create thread: %s", strerror(errno));
+ redirect_to_null();
+ close(stdout_pipe[0]);
+ close(stderr_pipe[0]);
+ return;
+ }
+ }
+ current = state;
+ return;
+}
+
+__attribute__ ((visibility("default")))
+jlong
+Java_org_libreoffice_android_Bootstrap_address_1of_1direct_1byte_1buffer(JNIEnv *env,
+ jobject bbuffer)
+{
+ return (jlong) (intptr_t) (*env)->GetDirectBufferAddress(env, bbuffer);
+}
+
+__attribute__ ((visibility("default")))
+void
+libreofficekit_set_javavm(JavaVM *vm)
+{
+ the_java_vm = vm;
+}
+
+__attribute__ ((visibility("default")))
+JavaVM *
+lo_get_javavm(void)
+{
+ return the_java_vm;
+}
+
+__attribute__ ((visibility("default")))
+const char *
+lo_get_app_data_dir(void)
+{
+ return data_dir;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/android/uthash.h b/sal/android/uthash.h
new file mode 100644
index 000000000..5884108b8
--- /dev/null
+++ b/sal/android/uthash.h
@@ -0,0 +1,971 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+Copyright (c) 2003-2010, Troy D. Hanson http://uthash.sourceforge.net
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef INCLUDED_SAL_ANDROID_UTHASH_H
+#define INCLUDED_SAL_ANDROID_UTHASH_H
+
+#include <string.h> /* memcmp,strlen */
+#include <stddef.h> /* ptrdiff_t */
+
+/* These macros use decltype or the earlier __typeof GNU extension.
+ As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+ when compiling c++ source) this code uses whatever method is needed
+ or, for VS2008 where neither is available, uses casting workarounds. */
+#ifdef _MSC_VER /* MS compiler */
+#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
+#define DECLTYPE(x) (decltype(x))
+#else /* VS2008 or older (or VS2010 in C mode) */
+#define NO_DECLTYPE
+#define DECLTYPE(x)
+#endif
+#else /* GNU, Sun and other compilers */
+#define DECLTYPE(x) (__typeof(x))
+#endif
+
+#ifdef NO_DECLTYPE
+#define DECLTYPE_ASSIGN(dst,src) \
+do { \
+ char **_da_dst = (char**)(&(dst)); \
+ *_da_dst = (char*)(src); \
+} while(0)
+#else
+#define DECLTYPE_ASSIGN(dst,src) \
+do { \
+ (dst) = DECLTYPE(dst)(src); \
+} while(0)
+#endif
+
+/* a number of the hash function use uint32_t which isn't defined on win32 */
+#ifdef _MSC_VER
+typedef unsigned int uint32_t;
+#else
+#include <inttypes.h> /* uint32_t */
+#endif
+
+
+#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */
+#define uthash_malloc(sz) malloc(sz) /* malloc fcn */
+#define uthash_free(ptr,sz) free(ptr) /* free fcn */
+
+#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */
+#define uthash_expand_fyi(tbl) /* can be defined to log expands */
+
+/* initial number of buckets */
+#define HASH_INITIAL_NUM_BUCKETS 32 /* initial number of buckets */
+#define HASH_INITIAL_NUM_BUCKETS_LOG2 5 /* lg2 of initial number of buckets */
+#define HASH_BKT_CAPACITY_THRESH 10 /* expand when bucket count reaches */
+
+/* calculate the element whose hash handle address is the */
+#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
+
+#define HASH_FIND(hh,head,keyptr,keylen,out) \
+do { \
+ out=NULL; \
+ if (head) { \
+ unsigned _hf_bkt,_hf_hashv; \
+ HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \
+ if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \
+ HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \
+ keyptr,keylen,out); \
+ } \
+ } \
+} while (0)
+
+#ifdef HASH_BLOOM
+#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM)
+#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0)
+#define HASH_BLOOM_MAKE(tbl) \
+do { \
+ (tbl)->bloom_nbits = HASH_BLOOM; \
+ (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \
+ if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \
+ memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \
+ (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \
+} while (0);
+
+#define HASH_BLOOM_FREE(tbl) \
+do { \
+ uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
+} while (0);
+
+#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8)))
+#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8)))
+
+#define HASH_BLOOM_ADD(tbl,hashv) \
+ HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))
+
+#define HASH_BLOOM_TEST(tbl,hashv) \
+ HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))
+
+#else
+#define HASH_BLOOM_MAKE(tbl)
+#define HASH_BLOOM_FREE(tbl)
+#define HASH_BLOOM_ADD(tbl,hashv)
+#define HASH_BLOOM_TEST(tbl,hashv) (1)
+#endif
+
+#define HASH_MAKE_TABLE(hh,head) \
+do { \
+ (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \
+ sizeof(UT_hash_table)); \
+ if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \
+ memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \
+ (head)->hh.tbl->tail = &((head)->hh); \
+ (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \
+ (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \
+ (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
+ (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \
+ HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \
+ if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \
+ memset((head)->hh.tbl->buckets, 0, \
+ HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \
+ HASH_BLOOM_MAKE((head)->hh.tbl); \
+ (head)->hh.tbl->signature = HASH_SIGNATURE; \
+} while(0)
+
+#define HASH_ADD(hh,head,fieldname,keylen_in,add) \
+ HASH_ADD_KEYPTR(hh,head,&add->fieldname,keylen_in,add)
+
+#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \
+do { \
+ unsigned _ha_bkt; \
+ (add)->hh.next = NULL; \
+ (add)->hh.key = (char*)keyptr; \
+ (add)->hh.keylen = keylen_in; \
+ if (!(head)) { \
+ head = (add); \
+ (head)->hh.prev = NULL; \
+ HASH_MAKE_TABLE(hh,head); \
+ } else { \
+ (head)->hh.tbl->tail->next = (add); \
+ (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
+ (head)->hh.tbl->tail = &((add)->hh); \
+ } \
+ (head)->hh.tbl->num_items++; \
+ (add)->hh.tbl = (head)->hh.tbl; \
+ HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \
+ (add)->hh.hashv, _ha_bkt); \
+ HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \
+ HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \
+ HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \
+ HASH_FSCK(hh,head); \
+} while(0)
+
+#define HASH_TO_BKT( hashv, num_bkts, bkt ) \
+do { \
+ bkt = ((hashv) & ((num_bkts) - 1)); \
+} while(0)
+
+/* delete "delptr" from the hash table.
+ * "the usual" patch-up process for the app-order doubly-linked-list.
+ * The use of _hd_hh_del below deserves special explanation.
+ * These used to be expressed using (delptr) but that led to a bug
+ * if someone used the same symbol for the head and deletee, like
+ * HASH_DELETE(hh,users,users);
+ * We want that to work, but by changing the head (users) below
+ * we were forfeiting our ability to further refer to the deletee (users)
+ * in the patch-up process. Solution: use scratch space to
+ * copy the deletee pointer, then the latter references are via that
+ * scratch pointer rather than through the repointed (users) symbol.
+ */
+#define HASH_DELETE(hh,head,delptr) \
+do { \
+ unsigned _hd_bkt; \
+ struct UT_hash_handle *_hd_hh_del; \
+ if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \
+ uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \
+ HASH_BLOOM_FREE((head)->hh.tbl); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ head = NULL; \
+ } else { \
+ _hd_hh_del = &((delptr)->hh); \
+ if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \
+ (head)->hh.tbl->tail = \
+ (UT_hash_handle*)((char*)((delptr)->hh.prev) + \
+ (head)->hh.tbl->hho); \
+ } \
+ if ((delptr)->hh.prev) { \
+ ((UT_hash_handle*)((char*)((delptr)->hh.prev) + \
+ (head)->hh.tbl->hho))->next = (delptr)->hh.next; \
+ } else { \
+ DECLTYPE_ASSIGN(head,(delptr)->hh.next); \
+ } \
+ if (_hd_hh_del->next) { \
+ ((UT_hash_handle*)((char*)_hd_hh_del->next + \
+ (head)->hh.tbl->hho))->prev = \
+ _hd_hh_del->prev; \
+ } \
+ HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+ HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
+ (head)->hh.tbl->num_items--; \
+ } \
+ HASH_FSCK(hh,head); \
+} while (0)
+
+/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
+#define HASH_FIND_STR(head,findstr,out) \
+ HASH_FIND(hh,head,findstr,strlen(findstr),out)
+#define HASH_ADD_STR(head,strfield,add) \
+ HASH_ADD(hh,head,strfield,strlen(add->strfield),add)
+#define HASH_FIND_INT(head,findint,out) \
+ HASH_FIND(hh,head,findint,sizeof(int),out)
+#define HASH_ADD_INT(head,intfield,add) \
+ HASH_ADD(hh,head,intfield,sizeof(int),add)
+#define HASH_FIND_PTR(head,findptr,out) \
+ HASH_FIND(hh,head,findptr,sizeof(void *),out)
+#define HASH_ADD_PTR(head,ptrfield,add) \
+ HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
+#define HASH_DEL(head,delptr) \
+ HASH_DELETE(hh,head,delptr)
+
+/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
+ * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
+ */
+#ifdef HASH_DEBUG
+#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
+#define HASH_FSCK(hh,head) \
+do { \
+ if (head) { \
+ unsigned _bkt_i; \
+ unsigned _count, _bkt_count; \
+ char *_prev; \
+ struct UT_hash_handle *_thh; \
+ _count = 0; \
+ for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \
+ _bkt_count = 0; \
+ _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
+ _prev = NULL; \
+ while (_thh) { \
+ if (_prev != (char*)(_thh->hh_prev)) { \
+ HASH_OOPS("invalid hh_prev %p, actual %p\n", \
+ _thh->hh_prev, _prev ); \
+ } \
+ _bkt_count++; \
+ _prev = (char*)(_thh); \
+ _thh = _thh->hh_next; \
+ } \
+ _count += _bkt_count; \
+ if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
+ HASH_OOPS("invalid bucket count %d, actual %u\n", \
+ (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
+ } \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ HASH_OOPS("invalid hh item count %d, actual %u\n", \
+ (head)->hh.tbl->num_items, _count ); \
+ } \
+ /* traverse hh in app order; check next/prev integrity, count */ \
+ _count = 0; \
+ _prev = NULL; \
+ _thh = &(head)->hh; \
+ while (_thh) { \
+ _count++; \
+ if (_prev !=(char*)(_thh->prev)) { \
+ HASH_OOPS("invalid prev %p, actual %p\n", \
+ _thh->prev, _prev ); \
+ } \
+ _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \
+ _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \
+ (head)->hh.tbl->hho) : NULL ); \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ HASH_OOPS("invalid app item count %d, actual %u\n", \
+ (head)->hh.tbl->num_items, _count ); \
+ } \
+ } \
+} while (0)
+#else
+#define HASH_FSCK(hh,head)
+#endif
+
+/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
+ * the descriptor to which this macro is defined for tuning the hash function.
+ * The app can #include <unistd.h> to get the prototype for write(2). */
+#ifdef HASH_EMIT_KEYS
+#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \
+do { \
+ unsigned _klen = fieldlen; \
+ write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
+ write(HASH_EMIT_KEYS, keyptr, fieldlen); \
+} while (0)
+#else
+#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
+#endif
+
+/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
+#ifdef HASH_FUNCTION
+#define HASH_FCN HASH_FUNCTION
+#else
+#define HASH_FCN HASH_JEN
+#endif
+
+/* The Bernstein hash function, used in Perl prior to v5.6 */
+#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _hb_keylen=keylen; \
+ char *_hb_key=(char*)(key); \
+ (hashv) = 0; \
+ while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \
+ bkt = (hashv) & (num_bkts-1); \
+} while (0)
+
+/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
+ * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
+#define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _sx_i; \
+ char *_hs_key=(char*)(key); \
+ hashv = 0; \
+ for(_sx_i=0; _sx_i < keylen; _sx_i++) \
+ hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \
+ bkt = hashv & (num_bkts-1); \
+} while (0)
+
+#define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _fn_i; \
+ char *_hf_key=(char*)(key); \
+ hashv = 2166136261UL; \
+ for(_fn_i=0; _fn_i < keylen; _fn_i++) \
+ hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; \
+ bkt = hashv & (num_bkts-1); \
+} while(0);
+
+#define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _ho_i; \
+ char *_ho_key=(char*)(key); \
+ hashv = 0; \
+ for(_ho_i=0; _ho_i < keylen; _ho_i++) { \
+ hashv += _ho_key[_ho_i]; \
+ hashv += (hashv << 10); \
+ hashv ^= (hashv >> 6); \
+ } \
+ hashv += (hashv << 3); \
+ hashv ^= (hashv >> 11); \
+ hashv += (hashv << 15); \
+ bkt = hashv & (num_bkts-1); \
+} while(0)
+
+#define HASH_JEN_MIX(a,b,c) \
+do { \
+ a -= b; a -= c; a ^= ( c >> 13 ); \
+ b -= c; b -= a; b ^= ( a << 8 ); \
+ c -= a; c -= b; c ^= ( b >> 13 ); \
+ a -= b; a -= c; a ^= ( c >> 12 ); \
+ b -= c; b -= a; b ^= ( a << 16 ); \
+ c -= a; c -= b; c ^= ( b >> 5 ); \
+ a -= b; a -= c; a ^= ( c >> 3 ); \
+ b -= c; b -= a; b ^= ( a << 10 ); \
+ c -= a; c -= b; c ^= ( b >> 15 ); \
+} while (0)
+
+#define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _hj_i,_hj_j,_hj_k; \
+ char *_hj_key=(char*)(key); \
+ hashv = 0xfeedbeef; \
+ _hj_i = _hj_j = 0x9e3779b9; \
+ _hj_k = keylen; \
+ while (_hj_k >= 12) { \
+ _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \
+ + ( (unsigned)_hj_key[2] << 16 ) \
+ + ( (unsigned)_hj_key[3] << 24 ) ); \
+ _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \
+ + ( (unsigned)_hj_key[6] << 16 ) \
+ + ( (unsigned)_hj_key[7] << 24 ) ); \
+ hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \
+ + ( (unsigned)_hj_key[10] << 16 ) \
+ + ( (unsigned)_hj_key[11] << 24 ) ); \
+ \
+ HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ \
+ _hj_key += 12; \
+ _hj_k -= 12; \
+ } \
+ hashv += keylen; \
+ switch ( _hj_k ) { \
+ case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \
+ case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \
+ case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \
+ case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \
+ case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \
+ case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \
+ case 5: _hj_j += _hj_key[4]; \
+ case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \
+ case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \
+ case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \
+ case 1: _hj_i += _hj_key[0]; \
+ } \
+ HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ bkt = hashv & (num_bkts-1); \
+} while(0)
+
+/* The Paul Hsieh hash function */
+#undef get16bits
+#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
+ || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+#define get16bits(d) (*((const uint16_t *) (d)))
+#endif
+
+#if !defined (get16bits)
+#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
+ +(uint32_t)(((const uint8_t *)(d))[0]) )
+#endif
+#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ char *_sfh_key=(char*)(key); \
+ uint32_t _sfh_tmp, _sfh_len = keylen; \
+ \
+ int _sfh_rem = _sfh_len & 3; \
+ _sfh_len >>= 2; \
+ hashv = 0xcafebabe; \
+ \
+ /* Main loop */ \
+ for (;_sfh_len > 0; _sfh_len--) { \
+ hashv += get16bits (_sfh_key); \
+ _sfh_tmp = (get16bits (_sfh_key+2) << 11) ^ hashv; \
+ hashv = (hashv << 16) ^ _sfh_tmp; \
+ _sfh_key += 2*sizeof (uint16_t); \
+ hashv += hashv >> 11; \
+ } \
+ \
+ /* Handle end cases */ \
+ switch (_sfh_rem) { \
+ case 3: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 16; \
+ hashv ^= _sfh_key[sizeof (uint16_t)] << 18; \
+ hashv += hashv >> 11; \
+ break; \
+ case 2: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 11; \
+ hashv += hashv >> 17; \
+ break; \
+ case 1: hashv += *_sfh_key; \
+ hashv ^= hashv << 10; \
+ hashv += hashv >> 1; \
+ } \
+ \
+ /* Force "avalanching" of final 127 bits */ \
+ hashv ^= hashv << 3; \
+ hashv += hashv >> 5; \
+ hashv ^= hashv << 4; \
+ hashv += hashv >> 17; \
+ hashv ^= hashv << 25; \
+ hashv += hashv >> 6; \
+ bkt = hashv & (num_bkts-1); \
+} while(0);
+
+#ifdef HASH_USING_NO_STRICT_ALIASING
+/* The MurmurHash exploits some CPU's (e.g. x86) tolerance for unaligned reads.
+ * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
+ * So MurmurHash comes in two versions, the faster unaligned one and the slower
+ * aligned one. We only use the faster one on CPU's where we know it's safe.
+ *
+ * Note the preprocessor built-in defines can be emitted using:
+ *
+ * gcc -m64 -dM -E - < /dev/null (on gcc)
+ * cc -## a.c (where a.c is a simple test file) (Sun Studio)
+ */
+#if (defined(__i386__) || defined(__x86_64__))
+#define HASH_MUR HASH_MUR_UNALIGNED
+#else
+#define HASH_MUR HASH_MUR_ALIGNED
+#endif
+
+/* Appleby's MurmurHash fast version for unaligned-tolerant archs like i386 */
+#define HASH_MUR_UNALIGNED(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ const unsigned int _mur_m = 0x5bd1e995; \
+ const int _mur_r = 24; \
+ hashv = 0xcafebabe ^ keylen; \
+ char *_mur_key = (char *)(key); \
+ uint32_t _mur_tmp, _mur_len = keylen; \
+ \
+ for (;_mur_len >= 4; _mur_len-=4) { \
+ _mur_tmp = *(uint32_t *)_mur_key; \
+ _mur_tmp *= _mur_m; \
+ _mur_tmp ^= _mur_tmp >> _mur_r; \
+ _mur_tmp *= _mur_m; \
+ hashv *= _mur_m; \
+ hashv ^= _mur_tmp; \
+ _mur_key += 4; \
+ } \
+ \
+ switch(_mur_len) \
+ { \
+ case 3: hashv ^= _mur_key[2] << 16; \
+ case 2: hashv ^= _mur_key[1] << 8; \
+ case 1: hashv ^= _mur_key[0]; \
+ hashv *= _mur_m; \
+ }; \
+ \
+ hashv ^= hashv >> 13; \
+ hashv *= _mur_m; \
+ hashv ^= hashv >> 15; \
+ \
+ bkt = hashv & (num_bkts-1); \
+} while(0)
+
+/* Appleby's MurmurHash version for alignment-sensitive archs like Sparc */
+#define HASH_MUR_ALIGNED(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ const unsigned int _mur_m = 0x5bd1e995; \
+ const int _mur_r = 24; \
+ hashv = 0xcafebabe ^ (keylen); \
+ char *_mur_key = (char *)(key); \
+ uint32_t _mur_len = keylen; \
+ int _mur_align = (int)_mur_key & 3; \
+ \
+ if (_mur_align && (_mur_len >= 4)) { \
+ unsigned _mur_t = 0, _mur_d = 0; \
+ switch(_mur_align) { \
+ case 1: _mur_t |= _mur_key[2] << 16; \
+ case 2: _mur_t |= _mur_key[1] << 8; \
+ case 3: _mur_t |= _mur_key[0]; \
+ } \
+ _mur_t <<= (8 * _mur_align); \
+ _mur_key += 4-_mur_align; \
+ _mur_len -= 4-_mur_align; \
+ int _mur_sl = 8 * (4-_mur_align); \
+ int _mur_sr = 8 * _mur_align; \
+ \
+ for (;_mur_len >= 4; _mur_len-=4) { \
+ _mur_d = *(unsigned *)_mur_key; \
+ _mur_t = (_mur_t >> _mur_sr) | (_mur_d << _mur_sl); \
+ unsigned _mur_k = _mur_t; \
+ _mur_k *= _mur_m; \
+ _mur_k ^= _mur_k >> _mur_r; \
+ _mur_k *= _mur_m; \
+ hashv *= _mur_m; \
+ hashv ^= _mur_k; \
+ _mur_t = _mur_d; \
+ _mur_key += 4; \
+ } \
+ _mur_d = 0; \
+ if(_mur_len >= _mur_align) { \
+ switch(_mur_align) { \
+ case 3: _mur_d |= _mur_key[2] << 16; \
+ case 2: _mur_d |= _mur_key[1] << 8; \
+ case 1: _mur_d |= _mur_key[0]; \
+ } \
+ unsigned _mur_k = (_mur_t >> _mur_sr) | (_mur_d << _mur_sl); \
+ _mur_k *= _mur_m; \
+ _mur_k ^= _mur_k >> _mur_r; \
+ _mur_k *= _mur_m; \
+ hashv *= _mur_m; \
+ hashv ^= _mur_k; \
+ _mur_k += _mur_align; \
+ _mur_len -= _mur_align; \
+ \
+ switch(_mur_len) \
+ { \
+ case 3: hashv ^= _mur_key[2] << 16; \
+ case 2: hashv ^= _mur_key[1] << 8; \
+ case 1: hashv ^= _mur_key[0]; \
+ hashv *= _mur_m; \
+ } \
+ } else { \
+ switch(_mur_len) \
+ { \
+ case 3: _mur_d ^= _mur_key[2] << 16; \
+ case 2: _mur_d ^= _mur_key[1] << 8; \
+ case 1: _mur_d ^= _mur_key[0]; \
+ case 0: hashv ^= (_mur_t >> _mur_sr) | (_mur_d << _mur_sl); \
+ hashv *= _mur_m; \
+ } \
+ } \
+ \
+ hashv ^= hashv >> 13; \
+ hashv *= _mur_m; \
+ hashv ^= hashv >> 15; \
+ } else { \
+ for (;_mur_len >= 4; _mur_len-=4) { \
+ unsigned _mur_k = *(unsigned*)_mur_key; \
+ _mur_k *= _mur_m; \
+ _mur_k ^= _mur_k >> _mur_r; \
+ _mur_k *= _mur_m; \
+ hashv *= _mur_m; \
+ hashv ^= _mur_k; \
+ _mur_key += 4; \
+ } \
+ switch(_mur_len) \
+ { \
+ case 3: hashv ^= _mur_key[2] << 16; \
+ case 2: hashv ^= _mur_key[1] << 8; \
+ case 1: hashv ^= _mur_key[0]; \
+ hashv *= _mur_m; \
+ } \
+ \
+ hashv ^= hashv >> 13; \
+ hashv *= _mur_m; \
+ hashv ^= hashv >> 15; \
+ } \
+ bkt = hashv & (num_bkts-1); \
+} while(0)
+#endif /* HASH_USING_NO_STRICT_ALIASING */
+
+/* key comparison function; return 0 if keys equal */
+#define HASH_KEYCMP(a,b,len) memcmp(a,b,len)
+
+/* iterate over items in a known bucket to find desired item */
+#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \
+do { \
+ if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \
+ else out=NULL; \
+ while (out) { \
+ if (out->hh.keylen == keylen_in) { \
+ if ((HASH_KEYCMP(out->hh.key,keyptr,keylen_in)) == 0) break; \
+ } \
+ if (out->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,out->hh.hh_next)); \
+ else out = NULL; \
+ } \
+} while(0)
+
+/* add an item to a bucket */
+#define HASH_ADD_TO_BKT(head,addhh) \
+do { \
+ head.count++; \
+ (addhh)->hh_next = head.hh_head; \
+ (addhh)->hh_prev = NULL; \
+ if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \
+ (head).hh_head=addhh; \
+ if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \
+ && (addhh)->tbl->noexpand != 1) { \
+ HASH_EXPAND_BUCKETS((addhh)->tbl); \
+ } \
+} while(0)
+
+/* remove an item from a given bucket */
+#define HASH_DEL_IN_BKT(hh,head,hh_del) \
+ (head).count--; \
+ if ((head).hh_head == hh_del) { \
+ (head).hh_head = hh_del->hh_next; \
+ } \
+ if (hh_del->hh_prev) { \
+ hh_del->hh_prev->hh_next = hh_del->hh_next; \
+ } \
+ if (hh_del->hh_next) { \
+ hh_del->hh_next->hh_prev = hh_del->hh_prev; \
+ }
+
+/* Bucket expansion has the effect of doubling the number of buckets
+ * and redistributing the items into the new buckets. Ideally the
+ * items will distribute more or less evenly into the new buckets
+ * (the extent to which this is true is a measure of the quality of
+ * the hash function as it applies to the key domain).
+ *
+ * With the items distributed into more buckets, the chain length
+ * (item count) in each bucket is reduced. Thus by expanding buckets
+ * the hash keeps a bound on the chain length. This bounded chain
+ * length is the essence of how a hash provides constant time lookup.
+ *
+ * The calculation of tbl->ideal_chain_maxlen below deserves some
+ * explanation. First, keep in mind that we're calculating the ideal
+ * maximum chain length based on the *new* (doubled) bucket count.
+ * In fractions this is just n/b (n=number of items,b=new num buckets).
+ * Since the ideal chain length is an integer, we want to calculate
+ * ceil(n/b). We don't depend on floating point arithmetic in this
+ * hash, so to calculate ceil(n/b) with integers we could write
+ *
+ * ceil(n/b) = (n/b) + ((n%b)?1:0)
+ *
+ * and in fact a previous version of this hash did just that.
+ * But now we have improved things a bit by recognizing that b is
+ * always a power of two. We keep its base 2 log handy (call it lb),
+ * so now we can write this with a bit shift and logical AND:
+ *
+ * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
+ *
+ */
+#define HASH_EXPAND_BUCKETS(tbl) \
+do { \
+ unsigned _he_bkt; \
+ unsigned _he_bkt_i; \
+ struct UT_hash_handle *_he_thh, *_he_hh_nxt; \
+ UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
+ _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \
+ 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
+ if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \
+ memset(_he_new_buckets, 0, \
+ 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
+ tbl->ideal_chain_maxlen = \
+ (tbl->num_items >> (tbl->log2_num_buckets+1)) + \
+ ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \
+ tbl->nonideal_items = 0; \
+ for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \
+ { \
+ _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \
+ while (_he_thh) { \
+ _he_hh_nxt = _he_thh->hh_next; \
+ HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \
+ _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \
+ if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \
+ tbl->nonideal_items++; \
+ _he_newbkt->expand_mult = _he_newbkt->count / \
+ tbl->ideal_chain_maxlen; \
+ } \
+ _he_thh->hh_prev = NULL; \
+ _he_thh->hh_next = _he_newbkt->hh_head; \
+ if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \
+ _he_thh; \
+ _he_newbkt->hh_head = _he_thh; \
+ _he_thh = _he_hh_nxt; \
+ } \
+ } \
+ uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \
+ tbl->num_buckets *= 2; \
+ tbl->log2_num_buckets++; \
+ tbl->buckets = _he_new_buckets; \
+ tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \
+ (tbl->ineff_expands+1) : 0; \
+ if (tbl->ineff_expands > 1) { \
+ tbl->noexpand=1; \
+ uthash_noexpand_fyi(tbl); \
+ } \
+ uthash_expand_fyi(tbl); \
+} while(0)
+
+/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
+/* Note that HASH_SORT assumes the hash handle name to be hh.
+ * HASH_SRT was added to allow the hash handle name to be passed in. */
+#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn)
+#define HASH_SRT(hh,head,cmpfcn) \
+do { \
+ unsigned _hs_i; \
+ unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \
+ struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \
+ if (head) { \
+ _hs_insize = 1; \
+ _hs_looping = 1; \
+ _hs_list = &((head)->hh); \
+ while (_hs_looping) { \
+ _hs_p = _hs_list; \
+ _hs_list = NULL; \
+ _hs_tail = NULL; \
+ _hs_nmerges = 0; \
+ while (_hs_p) { \
+ _hs_nmerges++; \
+ _hs_q = _hs_p; \
+ _hs_psize = 0; \
+ for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \
+ _hs_psize++; \
+ _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ if (! (_hs_q) ) break; \
+ } \
+ _hs_qsize = _hs_insize; \
+ while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \
+ if (_hs_psize == 0) { \
+ _hs_e = _hs_q; \
+ _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_qsize--; \
+ } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \
+ _hs_e = _hs_p; \
+ _hs_p = (UT_hash_handle*)((_hs_p->next) ? \
+ ((void*)((char*)(_hs_p->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_psize--; \
+ } else if (( \
+ cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \
+ DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \
+ ) <= 0) { \
+ _hs_e = _hs_p; \
+ _hs_p = (UT_hash_handle*)((_hs_p->next) ? \
+ ((void*)((char*)(_hs_p->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_psize--; \
+ } else { \
+ _hs_e = _hs_q; \
+ _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_qsize--; \
+ } \
+ if ( _hs_tail ) { \
+ _hs_tail->next = ((_hs_e) ? \
+ ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \
+ } else { \
+ _hs_list = _hs_e; \
+ } \
+ _hs_e->prev = ((_hs_tail) ? \
+ ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \
+ _hs_tail = _hs_e; \
+ } \
+ _hs_p = _hs_q; \
+ } \
+ _hs_tail->next = NULL; \
+ if ( _hs_nmerges <= 1 ) { \
+ _hs_looping=0; \
+ (head)->hh.tbl->tail = _hs_tail; \
+ DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
+ } \
+ _hs_insize *= 2; \
+ } \
+ HASH_FSCK(hh,head); \
+ } \
+} while (0)
+
+/* This function selects items from one hash into another hash.
+ * The end result is that the selected items have dual presence
+ * in both hashes. There is no copy of the items made; rather
+ * they are added into the new hash through a secondary hash
+ * hash handle that must be present in the structure. */
+#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \
+do { \
+ unsigned _src_bkt, _dst_bkt; \
+ void *_last_elt=NULL, *_elt; \
+ UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \
+ ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \
+ if (src) { \
+ for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
+ for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
+ _src_hh; \
+ _src_hh = _src_hh->hh_next) { \
+ _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
+ if (cond(_elt)) { \
+ _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \
+ _dst_hh->key = _src_hh->key; \
+ _dst_hh->keylen = _src_hh->keylen; \
+ _dst_hh->hashv = _src_hh->hashv; \
+ _dst_hh->prev = _last_elt; \
+ _dst_hh->next = NULL; \
+ if (_last_elt_hh) { _last_elt_hh->next = _elt; } \
+ if (!dst) { \
+ DECLTYPE_ASSIGN(dst,_elt); \
+ HASH_MAKE_TABLE(hh_dst,dst); \
+ } else { \
+ _dst_hh->tbl = (dst)->hh_dst.tbl; \
+ } \
+ HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
+ HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \
+ (dst)->hh_dst.tbl->num_items++; \
+ _last_elt = _elt; \
+ _last_elt_hh = _dst_hh; \
+ } \
+ } \
+ } \
+ } \
+ HASH_FSCK(hh_dst,dst); \
+} while (0)
+
+#define HASH_CLEAR(hh,head) \
+do { \
+ if (head) { \
+ uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ (head)=NULL; \
+ } \
+} while(0)
+
+#ifdef NO_DECLTYPE
+#define HASH_ITER(hh,head,el,tmp) \
+for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \
+ el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL))
+#else
+#define HASH_ITER(hh,head,el,tmp) \
+for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \
+ el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL))
+#endif
+
+/* obtain a count of items in the hash */
+#define HASH_COUNT(head) HASH_CNT(hh,head)
+#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0)
+
+typedef struct UT_hash_bucket {
+ struct UT_hash_handle *hh_head;
+ unsigned count;
+
+ /* expand_mult is normally set to 0. In this situation, the max chain length
+ * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
+ * the bucket's chain exceeds this length, bucket expansion is triggered).
+ * However, setting expand_mult to a non-zero value delays bucket expansion
+ * (that would be triggered by additions to this particular bucket)
+ * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
+ * (The multiplier is simply expand_mult+1). The whole idea of this
+ * multiplier is to reduce bucket expansions, since they are expensive, in
+ * situations where we know that a particular bucket tends to be overused.
+ * It is better to let its chain length grow to a longer yet-still-bounded
+ * value, than to do an O(n) bucket expansion too often.
+ */
+ unsigned expand_mult;
+
+} UT_hash_bucket;
+
+/* random signature used only to find hash tables in external analysis */
+#define HASH_SIGNATURE 0xa0111fe1
+#define HASH_BLOOM_SIGNATURE 0xb12220f2
+
+typedef struct UT_hash_table {
+ UT_hash_bucket *buckets;
+ unsigned num_buckets, log2_num_buckets;
+ unsigned num_items;
+ struct UT_hash_handle *tail; /* tail hh in app order, for fast append */
+ ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
+
+ /* in an ideal situation (all buckets used equally), no bucket would have
+ * more than ceil(#items/#buckets) items. that's the ideal chain length. */
+ unsigned ideal_chain_maxlen;
+
+ /* nonideal_items is the number of items in the hash whose chain position
+ * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
+ * hash distribution; reaching them in a chain traversal takes >ideal steps */
+ unsigned nonideal_items;
+
+ /* ineffective expands occur when a bucket doubling was performed, but
+ * afterward, more than half the items in the hash had nonideal chain
+ * positions. If this happens on two consecutive expansions we inhibit any
+ * further expansion, as it's not helping; this happens when the hash
+ * function isn't a good fit for the key domain. When expansion is inhibited
+ * the hash will still work, albeit no longer in constant time. */
+ unsigned ineff_expands, noexpand;
+
+ uint32_t signature; /* used only to find hash tables in external analysis */
+#ifdef HASH_BLOOM
+ uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
+ uint8_t *bloom_bv;
+ char bloom_nbits;
+#endif
+
+} UT_hash_table;
+
+typedef struct UT_hash_handle {
+ struct UT_hash_table *tbl;
+ void *prev; /* prev element in app order */
+ void *next; /* next element in app order */
+ struct UT_hash_handle *hh_prev; /* previous hh in bucket order */
+ struct UT_hash_handle *hh_next; /* next hh in bucket order */
+ void *key; /* ptr to enclosing struct's key */
+ unsigned keylen; /* enclosing struct's key len */
+ unsigned hashv; /* result of hash-fcn(key) */
+} UT_hash_handle;
+
+#endif // INCLUDED_SAL_ANDROID_UTHASH_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/cppunittester/cppunittester.cxx b/sal/cppunittester/cppunittester.cxx
new file mode 100644
index 000000000..81ddec156
--- /dev/null
+++ b/sal/cppunittester/cppunittester.cxx
@@ -0,0 +1,632 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#endif
+#if defined(_WIN32) && defined(_DEBUG)
+#include <dbghelp.h>
+#include <sal/backtrace.hxx>
+#include <signal.h>
+#endif
+
+#ifdef UNX
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
+#include <stdlib.h>
+#include <cstdlib>
+#include <iostream>
+#include <string>
+#include <sal/log.hxx>
+#include <sal/types.h>
+#include <cppunittester/protectorfactory.hxx>
+#include <osl/module.h>
+#include <osl/module.hxx>
+#include <osl/thread.h>
+#include <rtl/character.hxx>
+#include <rtl/process.h>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+#include <rtl/textcvt.h>
+#include <rtl/ustring.hxx>
+#include <sal/main.h>
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/Exception.h>
+#include <cppunit/TestFailure.h>
+#include <cppunit/TestResult.h>
+#include <cppunit/TestResultCollector.h>
+#include <cppunit/TestRunner.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/plugin/PlugInManager.h>
+#include <cppunit/plugin/DynamicLibraryManagerException.h>
+#include <cppunit/portability/Stream.h>
+
+#include <memory>
+#include <boost/algorithm/string.hpp>
+
+#include <algorithm>
+#include <string_view>
+#include <utility>
+
+namespace {
+
+void usageFailure() {
+ std::cerr
+ << ("Usage: cppunittester (--protector <shared-library-path>"
+ " <function-symbol>)* <shared-library-path>")
+ << std::endl;
+ std::exit(EXIT_FAILURE);
+}
+
+OUString getArgument(sal_Int32 index) {
+ OUString arg;
+ osl_getCommandArg(index, &arg.pData);
+ return arg;
+}
+
+std::string convertLazy(std::u16string_view s16) {
+ OString s8(OUStringToOString(s16, osl_getThreadTextEncoding()));
+ static_assert(sizeof (sal_Int32) <= sizeof (std::string::size_type), "must be at least the same size");
+ // ensure following cast is legitimate
+ return std::string(
+ s8.getStr(), static_cast< std::string::size_type >(s8.getLength()));
+}
+
+//Output how long each test took
+class TimingListener
+ : public CppUnit::TestListener
+{
+public:
+ TimingListener()
+ : m_nStartTime(0)
+ {
+ }
+ TimingListener(const TimingListener&) = delete;
+ TimingListener& operator=(const TimingListener&) = delete;
+
+ void startTest( CppUnit::Test *test) override
+ {
+ std::cout << "[_RUN_____] " << test->getName() << std::endl;
+ m_nStartTime = osl_getGlobalTimer();
+ }
+
+ void endTest( CppUnit::Test *test ) override
+ {
+ sal_uInt32 nEndTime = osl_getGlobalTimer();
+ std::cout << test->getName() << " finished in: "
+ << nEndTime-m_nStartTime << "ms" << std::endl;
+ }
+
+private:
+ sal_uInt32 m_nStartTime;
+};
+
+// Setup an env variable so that temp file (or other) can
+// have a useful value to identify the source
+class EyecatcherListener
+ : public CppUnit::TestListener
+{
+public:
+ EyecatcherListener() = default;
+ EyecatcherListener(const EyecatcherListener&) = delete;
+ EyecatcherListener& operator=(const EyecatcherListener&) = delete;
+ void startTest( CppUnit::Test* test) override
+ {
+ rtl::OStringBuffer tn(test->getName());
+ for(int i = 0; i < tn.getLength(); i++)
+ {
+ if(!rtl::isAsciiAlphanumeric(static_cast<unsigned char>(tn[i])))
+ {
+ tn[i] = '_';
+ }
+ }
+ tn.append('_');
+#ifdef WIN32
+ _putenv_s("LO_TESTNAME", tn.getStr());
+#else
+ setenv("LO_TESTNAME", tn.getStr(), true);
+#endif
+ }
+
+ void endTest( CppUnit::Test* /* test */ ) override
+ {
+ }
+};
+
+class LogFailuresAsTheyHappen : public CppUnit::TestListener
+{
+public:
+ virtual void addFailure( const CppUnit::TestFailure &failure ) override
+ {
+ printFailureLocation( failure.sourceLine() );
+ printFailedTestName( failure );
+ printFailureMessage( failure );
+ }
+
+private:
+ static void printFailureLocation( const CppUnit::SourceLine &sourceLine )
+ {
+ if ( !sourceLine.isValid() )
+ std::cerr << "unknown:0:";
+ else
+ std::cerr << sourceLine.fileName() << ":" << sourceLine.lineNumber() << ":";
+ }
+
+ static void printFailedTestName( const CppUnit::TestFailure &failure )
+ {
+ std::cerr << failure.failedTestName() << std::endl;
+ }
+
+ static void printFailureMessage( const CppUnit::TestFailure &failure )
+ {
+ std::cerr << failure.thrownException()->message().shortDescription() << std::endl;
+ std::cerr << failure.thrownException()->message().details() << std::endl;
+ }
+};
+
+struct test_name_compare
+{
+ explicit test_name_compare(std::string aName):
+ maName(std::move(aName))
+ {
+ }
+
+ bool operator()(const std::string& rCmp)
+ {
+ size_t nPos = maName.find(rCmp);
+ if (nPos == std::string::npos)
+ return false;
+
+ size_t nEndPos = nPos + rCmp.size();
+ return nEndPos == maName.size();
+ }
+
+ std::string maName;
+};
+
+bool addRecursiveTests(const std::vector<std::string>& test_names, CppUnit::Test* pTest, CppUnit::TestRunner& rRunner)
+{
+ bool ret(false);
+ for (int i = 0; i < pTest->getChildTestCount(); ++i)
+ {
+ CppUnit::Test* pNewTest = pTest->getChildTestAt(i);
+ ret |= addRecursiveTests(test_names, pNewTest, rRunner);
+ if (std::any_of(test_names.begin(), test_names.end(), test_name_compare(pNewTest->getName())))
+ {
+ rRunner.addTest(pNewTest);
+ ret = true;
+ }
+ }
+ return ret;
+}
+
+//Allow the whole uniting testing framework to be run inside a "Protector"
+//which knows about uno exceptions, so it can print the content of the
+//exception before falling over and dying
+class CPPUNIT_API ProtectedFixtureFunctor
+ : public CppUnit::Functor
+{
+private:
+ const std::string &testlib;
+ const std::string &args;
+ std::vector<CppUnit::Protector *> &protectors;
+ CppUnit::TestResult &result;
+public:
+ ProtectedFixtureFunctor(const std::string& testlib_, const std::string &args_, std::vector<CppUnit::Protector*> &protectors_, CppUnit::TestResult &result_)
+ : testlib(testlib_)
+ , args(args_)
+ , protectors(protectors_)
+ , result(result_)
+ {
+ }
+ ProtectedFixtureFunctor(const ProtectedFixtureFunctor&) = delete;
+ ProtectedFixtureFunctor& operator=(const ProtectedFixtureFunctor&) = delete;
+ bool run() const
+ {
+#ifdef DISABLE_DYNLOADING
+
+ // NOTE: Running cppunit unit tests on iOS was something I did
+ // only very early (several years ago) when starting porting
+ // this stuff to iOS. The complicated mechanisms to do build
+ // such unit test single executables have surely largely
+ // bit-rotted or been semi-intentionally broken since. This
+ // stuff here left for information only. --tml 2014.
+
+ // For iOS cppunit plugins aren't really "plugins" (shared
+ // libraries), but just static archives. In the real main
+ // program of a cppunit app, which calls the lo_main() that
+ // the SAL_IMPLEMENT_MAIN() below expands to, we specifically
+ // call the initialize methods of the CppUnitTestPlugIns that
+ // we statically link to the app executable.
+#else
+ // The PlugInManager instance is deliberately leaked, so that the dynamic libraries it loads
+ // are never unloaded (which could make e.g. pointers from other libraries' static data
+ // structures to const data in those libraries, like some static OUString cache pointing at
+ // a const OUStringLiteral, become dangling by the time those static data structures are
+ // destroyed during exit):
+ auto manager = new CppUnit::PlugInManager;
+ try {
+ manager->load(testlib, args);
+ } catch (const CppUnit::DynamicLibraryManagerException &e) {
+ std::cerr << "DynamicLibraryManagerException: \"" << e.what() << "\"\n";
+ const char *pPath = getenv ("PATH");
+ const size_t nPathLen = pPath ? strlen(pPath) : 0;
+#ifdef _WIN32
+ if (nPathLen > 256)
+ {
+ std::cerr << "Windows has significant build problems with long PATH variables ";
+ std::cerr << "please check your PATH variable and re-autogen.\n";
+ }
+#endif
+ std::cerr << "Path (length: " << nPathLen << ") is '" << pPath << "'\n";
+ return false;
+ }
+#endif
+
+ for (size_t i = 0; i < protectors.size(); ++i)
+ result.pushProtector(protectors[i]);
+
+ bool success;
+ {
+ CppUnit::TestResultCollector collector;
+ result.addListener(&collector);
+
+ LogFailuresAsTheyHappen logger;
+ result.addListener(&logger);
+
+ TimingListener timer;
+ result.addListener(&timer);
+
+ EyecatcherListener eye;
+ result.addListener(&eye);
+
+ // set this to track down files created before first test method
+ std::string lib = testlib.substr(testlib.rfind('/')+1);
+#ifdef WIN32
+ _putenv_s("LO_TESTNAME", lib.c_str());
+#else
+ setenv("LO_TESTNAME", lib.c_str(), true);
+#endif
+ const char* pVal = getenv("CPPUNIT_TEST_NAME");
+
+ CppUnit::TestRunner runner;
+ if (pVal)
+ {
+ std::vector<std::string> test_names;
+ boost::split(test_names, pVal, boost::is_any_of("\t "));
+ CppUnit::Test* pTest = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
+ bool const added(addRecursiveTests(test_names, pTest, runner));
+ if (!added)
+ {
+ std::cerr << "\nFatal error: CPPUNIT_TEST_NAME contains no valid tests\n";
+ // coverity[leaked_storage] - `manager` leaked on purpose
+ return false;
+ }
+ }
+ else
+ {
+ runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
+ }
+ runner.run(result);
+
+ CppUnit::CompilerOutputter outputter(&collector, CppUnit::stdCErr());
+ outputter.setNoWrap();
+ outputter.write();
+ success = collector.wasSuccessful();
+ }
+
+ for (size_t i = 0; i < protectors.size(); ++i)
+ result.popProtector();
+
+ return success;
+ }
+ virtual bool operator()() const override
+ {
+ return run();
+ }
+};
+
+#ifdef UNX
+
+double get_time(timeval* time)
+{
+ double nTime = static_cast<double>(time->tv_sec);
+ nTime += static_cast<double>(time->tv_usec)/1000000.0;
+ return nTime;
+}
+
+OString generateTestName(std::u16string_view rPath)
+{
+ size_t nPathSep = rPath.rfind('/');
+ std::u16string_view aTestName = rPath.substr(nPathSep+1);
+ return OUStringToOString(aTestName, RTL_TEXTENCODING_UTF8);
+}
+
+void reportResourceUsage(std::u16string_view rPath)
+{
+ OUString aFullPath = OUString::Concat(rPath) + ".resource.log";
+ rusage resource_usage;
+ getrusage(RUSAGE_SELF, &resource_usage);
+
+ OString aPath = OUStringToOString(aFullPath, RTL_TEXTENCODING_UTF8);
+ std::ofstream resource_file(aPath.getStr());
+ resource_file << "Name = " << generateTestName(rPath) << std::endl;
+ double nUserSpace = get_time(&resource_usage.ru_utime);
+ double nKernelSpace = get_time(&resource_usage.ru_stime);
+ resource_file << "UserSpace = " << nUserSpace << std::endl;
+ resource_file << "KernelSpace = " << nKernelSpace << std::endl;
+}
+#else
+void reportResourceUsage([[maybe_unused]] const OUString& /*rPath*/)
+{
+}
+#endif
+
+}
+
+static bool main2()
+{
+ bool ok = false;
+ OUString path;
+
+#ifdef _WIN32
+ //Disable Dr-Watson in order to crash simply without popup dialogs under
+ //windows
+ DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
+ SetErrorMode(SEM_NOGPFAULTERRORBOX|dwMode);
+#ifdef _DEBUG // These functions are present only in the debugging runtime
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE);
+ _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE);
+ _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE);
+ _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
+#endif
+#endif
+
+ std::vector<CppUnit::Protector *> protectors;
+ CppUnit::TestResult result;
+ std::string args;
+ std::string testlib;
+ sal_uInt32 index = 0;
+ while (index < osl_getCommandArgCount())
+ {
+ OUString arg = getArgument(index);
+ if (arg.startsWith("-env:CPPUNITTESTTARGET=", &path))
+ {
+ ++index;
+ continue;
+ }
+ if (arg.startsWith("-env:"))
+ {
+ ++index;
+ continue; // ignore it here - will be read later
+ }
+ if ( arg != "--protector" )
+ {
+ if (testlib.empty())
+ {
+ testlib = OUStringToOString(arg, osl_getThreadTextEncoding()).getStr();
+ args += testlib;
+ }
+ else
+ {
+ args += ' ';
+ args += OUStringToOString(arg, osl_getThreadTextEncoding()).getStr();
+ }
+ ++index;
+ continue;
+ }
+ if (osl_getCommandArgCount() - index < 3) {
+ usageFailure();
+ }
+ OUString lib(getArgument(index + 1));
+ OUString sym(getArgument(index + 2));
+#ifndef DISABLE_DYNLOADING
+ osl::Module mod(lib, SAL_LOADMODULE_GLOBAL);
+ oslGenericFunction fn = mod.getFunctionSymbol(sym);
+ mod.release();
+#else
+ oslGenericFunction fn = 0;
+ if (sym == "unoexceptionprotector")
+ fn = (oslGenericFunction) unoexceptionprotector;
+ else if (sym == "unobootstrapprotector")
+ fn = (oslGenericFunction) unobootstrapprotector;
+ else if (sym == "vclbootstrapprotector")
+ fn = (oslGenericFunction) vclbootstrapprotector;
+ else
+ {
+ std::cerr
+ << "Only unoexceptionprotector or unobootstrapprotector protectors allowed"
+ << std::endl;
+ std::exit(EXIT_FAILURE);
+ }
+#endif
+ CppUnit::Protector *protector = fn == nullptr
+ ? nullptr
+ : (*reinterpret_cast< cppunittester::ProtectorFactory * >(fn))();
+ if (protector == nullptr) {
+ std::cerr
+ << "Failure instantiating protector \"" << convertLazy(lib)
+ << "\", \"" << convertLazy(sym) << '"' << std::endl;
+ std::exit(EXIT_FAILURE);
+ }
+ protectors.push_back(protector);
+ index+=3;
+ }
+
+ ProtectedFixtureFunctor tests(testlib, args, protectors, result);
+ ok = tests.run();
+
+ reportResourceUsage(path);
+
+ return ok;
+}
+
+#if defined(_WIN32) && defined(_DEBUG)
+
+//Prints stack trace based on exception context record
+static void printStack( PCONTEXT ctx )
+{
+ HANDLE process = GetCurrentProcess();
+ HANDLE thread = GetCurrentThread();
+
+ STACKFRAME64 stack {};
+ stack.AddrPC.Mode = AddrModeFlat;
+ stack.AddrStack.Mode = AddrModeFlat;
+ stack.AddrFrame.Mode = AddrModeFlat;
+#ifdef _M_AMD64
+ stack.AddrPC.Offset = ctx->Rip;
+ stack.AddrStack.Offset = ctx->Rsp;
+ stack.AddrFrame.Offset = ctx->Rsp;
+#else
+ stack.AddrPC.Offset = ctx->Eip;
+ stack.AddrStack.Offset = ctx->Esp;
+ stack.AddrFrame.Offset = ctx->Ebp;
+#endif
+
+ DWORD symOptions = SymGetOptions();
+ symOptions |= SYMOPT_LOAD_LINES;
+ symOptions |= SYMOPT_FAIL_CRITICAL_ERRORS;
+ symOptions = SymSetOptions(symOptions);
+
+ SymInitialize( process, nullptr, TRUE ); //load symbols
+
+ IMAGEHLP_LINE64 line{};
+ line.SizeOfStruct = sizeof(line);
+
+ char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)];
+ PSYMBOL_INFO pSymbol = reinterpret_cast<PSYMBOL_INFO>(buffer);
+
+ for (;;)
+ {
+ //get next call from stack
+ bool result = StackWalk64
+ (
+#ifdef _M_AMD64
+ IMAGE_FILE_MACHINE_AMD64,
+#else
+ IMAGE_FILE_MACHINE_I386,
+#endif
+ process,
+ thread,
+ &stack,
+ ctx,
+ nullptr,
+ SymFunctionTableAccess64,
+ SymGetModuleBase64,
+ nullptr
+ );
+
+ if( !result )
+ break;
+
+ //get symbol name for address
+ pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
+ pSymbol->MaxNameLen = MAX_SYM_NAME + 1;
+ if (SymFromAddr(process, stack.AddrPC.Offset, nullptr, pSymbol))
+ printf("\tat %s", pSymbol->Name);
+ else
+ printf("\tat unknown (Error in SymFromAddr=%#08lx)", GetLastError());
+
+ DWORD disp;
+ //try to get line
+ if (SymGetLineFromAddr64(process, stack.AddrPC.Offset, &disp, &line))
+ {
+ printf(" in %s: line: %lu:\n", line.FileName, line.LineNumber);
+ }
+ else
+ {
+ //failed to get line
+ printf(", address 0x%0I64X", stack.AddrPC.Offset);
+ HMODULE hModule = nullptr;
+ GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ reinterpret_cast<LPCTSTR>(stack.AddrPC.Offset), &hModule);
+
+ char sModule[256];
+ //at least print module name
+ if (hModule != nullptr)
+ GetModuleFileNameA(hModule, sModule, std::size(sModule));
+
+ printf (" in %s\n", sModule);
+ }
+ }
+}
+
+// The exception filter function:
+static LONG WINAPI ExpFilter(EXCEPTION_POINTERS* ex)
+{
+ // we only want this active on the Jenkins tinderboxes
+ printf("*** Exception 0x%lx occurred ***\n\n",ex->ExceptionRecord->ExceptionCode);
+ printStack(ex->ContextRecord);
+ return EXCEPTION_EXECUTE_HANDLER;
+}
+
+static void AbortSignalHandler(int signal)
+{
+ if (signal == SIGABRT) {
+ std::unique_ptr<sal::BacktraceState> bs = sal::backtrace_get(50);
+ SAL_WARN("sal.cppunittester", "CAUGHT SIGABRT:\n" << sal::backtrace_to_string(bs.get()));
+ }
+}
+
+SAL_IMPLEMENT_MAIN()
+{
+ // catch the kind of signal that is thrown when an assert fails, and log a stacktrace
+ signal(SIGABRT, AbortSignalHandler);
+
+ bool ok = false;
+ // This magic kind of Windows-specific exception handling has to be in its own function
+ // because it cannot be in a function that has objects with destructors.
+ __try
+ {
+ ok = main2();
+ }
+ __except (ExpFilter(GetExceptionInformation()))
+ {
+ }
+ return ok ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+#else
+
+SAL_IMPLEMENT_MAIN()
+{
+ bool ok = false;
+ try
+ {
+ ok = main2();
+ }
+ catch (const std::exception& e)
+ {
+ SAL_WARN("vcl.app", "Fatal exception: " << e.what());
+ }
+ return ok ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/inc/backtraceasstring.hxx b/sal/inc/backtraceasstring.hxx
new file mode 100644
index 000000000..e857ea476
--- /dev/null
+++ b/sal/inc/backtraceasstring.hxx
@@ -0,0 +1,24 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_INC_BACKTRACEASSTRING_HXX
+#define INCLUDED_SAL_INC_BACKTRACEASSTRING_HXX
+
+#include <sal/config.h>
+
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+
+namespace osl::detail
+{
+/// Build a debugging backtrace from current PC location.
+OUString backtraceAsString(sal_uInt32 maxDepth);
+}
+
+#endif // INCLUDED_SAL_INC_INTERNAL_MISC_H
diff --git a/sal/inc/oslmemory.h b/sal/inc/oslmemory.h
new file mode 100644
index 000000000..de99e9851
--- /dev/null
+++ b/sal/inc/oslmemory.h
@@ -0,0 +1,30 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_INC_INTERNAL_OSLMEMORY_H
+#define INCLUDED_SAL_INC_INTERNAL_OSLMEMORY_H
+
+#include <sal/saldllapi.h>
+#include <sal/types.h>
+
+#if defined __cplusplus
+extern "C" {
+#endif
+
+void* osl_aligned_alloc(sal_Size align, sal_Size size);
+
+void osl_aligned_free(void* p);
+
+#if defined __cplusplus
+}
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/inc/oslrandom.h b/sal/inc/oslrandom.h
new file mode 100644
index 000000000..305eaf937
--- /dev/null
+++ b/sal/inc/oslrandom.h
@@ -0,0 +1,25 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_INC_INTERNAL_OSLRANDOM_H
+#define INCLUDED_SAL_INC_INTERNAL_OSLRANDOM_H
+
+#if defined __cplusplus
+extern "C" {
+#endif
+
+int osl_get_system_random_data(char* buffer, size_t desired_len);
+
+#if defined __cplusplus
+}
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/inc/oslsocket.hxx b/sal/inc/oslsocket.hxx
new file mode 100644
index 000000000..52260c263
--- /dev/null
+++ b/sal/inc/oslsocket.hxx
@@ -0,0 +1,24 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <rtl/ustring.h>
+#include <osl/socket.h>
+
+/** Retrieve this machines hostname as fully qualified domain name (FQDN).
+ Note that this might be slower than calling osl_getLocalHostname
+ since DNS needs to be queried to determine the FQDN.
+ @param strLocalHostname out-parameter. The string that receives the local host name.
+ @retval sal_True upon success
+ @retval sal_False
+*/
+oslSocketResult osl_getLocalHostnameFQDN(rtl_uString** strLocalHostname);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ \ No newline at end of file
diff --git a/sal/inc/pch/precompiled_sal.cxx b/sal/inc/pch/precompiled_sal.cxx
new file mode 100644
index 000000000..5386a69d7
--- /dev/null
+++ b/sal/inc/pch/precompiled_sal.cxx
@@ -0,0 +1,12 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "precompiled_sal.hxx"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/inc/pch/precompiled_sal.hxx b/sal/inc/pch/precompiled_sal.hxx
new file mode 100644
index 000000000..006c691a3
--- /dev/null
+++ b/sal/inc/pch/precompiled_sal.hxx
@@ -0,0 +1,113 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+/*
+ This file has been autogenerated by update_pch.sh. It is possible to edit it
+ manually (such as when an include file has been moved/renamed/removed). All such
+ manual changes will be rewritten by the next run of update_pch.sh (which presumably
+ also fixes all possible problems, so it's usually better to use it).
+
+ Generated on 2021-03-08 13:14:16 using:
+ ./bin/update_pch sal sal --cutoff=2 --exclude:system --exclude:module --include:local
+
+ If after updating build fails, use the following command to locate conflicting headers:
+ ./bin/update_pch_bisect ./sal/inc/pch/precompiled_sal.hxx "make sal.build" --find-conflicts
+*/
+
+#if defined(_WIN32)
+#define _CRT_RAND_S
+#endif
+
+#include <sal/config.h>
+#if PCH_LEVEL >= 1
+#include <algorithm>
+#include <assert.h>
+#include <cassert>
+#include <cstddef>
+#include <cstdlib>
+#include <cstring>
+#include <limits>
+#include <math.h>
+#include <memory>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unordered_map>
+#include <vector>
+#endif // PCH_LEVEL >= 1
+#if PCH_LEVEL >= 2
+#endif // PCH_LEVEL >= 2
+#if PCH_LEVEL >= 3
+#include <o3tl/safeint.hxx>
+#endif // PCH_LEVEL >= 3
+#if PCH_LEVEL >= 4
+#include <osl/diagnose.h>
+#include <osl/diagnose.hxx>
+#include <osl/endian.h>
+#include <osl/file.h>
+#include <osl/file.hxx>
+#include <osl/interlck.h>
+#include <osl/module.h>
+#include <osl/module.hxx>
+#include <osl/mutex.h>
+#include <osl/mutex.hxx>
+#include <osl/pipe.h>
+#include <osl/process.h>
+#include <osl/profile.hxx>
+#include <osl/security.hxx>
+#include <osl/signal.h>
+#include <osl/socket.h>
+#include <osl/thread.h>
+#include <osl/thread.hxx>
+#include <osl/time.h>
+#include <oslmemory.h>
+#include <oslrandom.h>
+#include <rtl/alloc.h>
+#include <rtl/bootstrap.h>
+#include <rtl/bootstrap.hxx>
+#include <rtl/byteseq.h>
+#include <rtl/byteseq.hxx>
+#include <rtl/character.hxx>
+#include <rtl/cipher.h>
+#include <rtl/crc.h>
+#include <rtl/digest.h>
+#include <rtl/instance.hxx>
+#include <rtl/locale.h>
+#include <rtl/malformeduriexception.hxx>
+#include <rtl/math.h>
+#include <rtl/math.hxx>
+#include <rtl/process.h>
+#include <rtl/random.h>
+#include <rtl/strbuf.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/tencinfo.h>
+#include <rtl/textcvt.h>
+#include <rtl/textenc.h>
+#include <rtl/unload.h>
+#include <rtl/uri.h>
+#include <rtl/uri.hxx>
+#include <rtl/ustrbuf.h>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <rtl/uuid.h>
+#include <rtllifecycle.h>
+#include <sal/alloca.h>
+#include <sal/detail/log.h>
+#include <sal/log.hxx>
+#include <sal/macros.h>
+#include <sal/mathconf.h>
+#include <sal/saldllapi.h>
+#include <sal/types.h>
+#include <salusesyslog.hxx>
+#endif // PCH_LEVEL >= 4
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/inc/rtllifecycle.h b/sal/inc/rtllifecycle.h
new file mode 100644
index 000000000..44af09e58
--- /dev/null
+++ b/sal/inc/rtllifecycle.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_INC_INTERNAL_RTLLIFECYCLE_H
+#define INCLUDED_SAL_INC_INTERNAL_RTLLIFECYCLE_H
+
+#if defined __cplusplus
+extern "C" {
+#endif
+
+void rtl_arena_init(void);
+
+void rtl_arena_fini(void);
+
+void ensureArenaSingleton(void);
+
+void rtl_cache_init(void);
+
+void rtl_cache_fini(void);
+
+void ensureCacheSingleton(void);
+
+void rtl_locale_init(void);
+
+void rtl_locale_fini(void);
+
+void ensureLocaleSingleton(void);
+
+#if defined __cplusplus
+}
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/inc/salusesyslog.hxx b/sal/inc/salusesyslog.hxx
new file mode 100644
index 000000000..ae1c14a88
--- /dev/null
+++ b/sal/inc/salusesyslog.hxx
@@ -0,0 +1,23 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_INC_SALUSESYSLOG_HXX
+#define INCLUDED_SAL_INC_SALUSESYSLOG_HXX
+
+#include <sal/config.h>
+
+#include <config_global.h>
+
+#if HAVE_SYSLOG_H
+extern bool sal_use_syslog;
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/inc/signalshared.hxx b/sal/inc/signalshared.hxx
new file mode 100644
index 000000000..10bc0f57b
--- /dev/null
+++ b/sal/inc/signalshared.hxx
@@ -0,0 +1,39 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SAL_INC_INTERNAL_SIGNALSHARED_HXX
+#define INCLUDED_SAL_INC_INTERNAL_SIGNALSHARED_HXX
+
+#include <sal/config.h>
+#include <osl/signal.h>
+
+struct oslSignalHandlerImpl
+{
+ oslSignalHandlerFunction Handler;
+ void* pData;
+ oslSignalHandlerImpl* pNext;
+};
+
+oslSignalAction callSignalHandler(oslSignalInfo* pInfo);
+
+// platform-specific functions that need to be implemented
+bool onInitSignal();
+bool onDeInitSignal();
+
+#endif
+
diff --git a/sal/inc/uri_internal.hxx b/sal/inc/uri_internal.hxx
new file mode 100644
index 000000000..0ec0650ca
--- /dev/null
+++ b/sal/inc/uri_internal.hxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_INC_URI_INTERNAL_HXX
+#define INCLUDED_SAL_INC_URI_INTERNAL_HXX
+
+#include <sal/config.h>
+
+namespace rtl::uri::detail
+{
+enum EscapeType
+{
+ EscapeNo,
+ EscapeChar,
+ EscapeOctet
+};
+
+sal_uInt32 readUcs4(sal_Unicode const** pBegin, sal_Unicode const* pEnd, bool bEncoded,
+ rtl_TextEncoding eCharset, EscapeType* pType);
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/osl/all/compat.cxx b/sal/osl/all/compat.cxx
new file mode 100644
index 000000000..8fafc628b
--- /dev/null
+++ b/sal/osl/all/compat.cxx
@@ -0,0 +1,197 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cstdlib>
+
+#include <osl/module.h>
+#include <osl/pipe.h>
+#include <osl/socket.h>
+#include <osl/time.h>
+#include <sal/types.h>
+
+// Stubs for removed functionality, to be killed when we bump sal SONAME
+
+extern "C" {
+
+SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_acquireSemaphore(void *) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC void SAL_CALL osl_addToSocketSet(void *, oslSocket) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT int SAL_CALL osl_areCommandArgsSet() {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_assertFailedLine(
+ char const *, sal_Int32, char const *)
+{
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL osl_breakDebug() {
+ std::abort();
+}
+
+SAL_DLLPUBLIC void SAL_CALL osl_clearSocketSet(void *) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT void * SAL_CALL osl_createSemaphore(sal_uInt32) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC void * SAL_CALL osl_createSocketSet() {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_demultiplexSocketEvents(
+ void *, void *, void *, TimeValue const *)
+{
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL osl_destroySemaphore(void *) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC void SAL_CALL osl_destroySocketSet(void *) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_getEthernetAddress(sal_uInt8 *) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isInSocketSet(void *, oslSocket) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT oslSocket SAL_CALL osl_receiveResourcePipe(oslPipe) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_releaseSemaphore(void *) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Int32 SAL_CALL osl_reportError(
+ sal_uInt32, char const *)
+{
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC void SAL_CALL osl_removeFromSocketSet(void *, oslSocket) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_sendResourcePipe(oslPipe, oslSocket)
+{
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+namespace {
+typedef void (* pfunc_osl_printDebugMessage)(char const *);
+}
+SAL_DLLPUBLIC_EXPORT pfunc_osl_printDebugMessage SAL_CALL
+osl_setDebugMessageFunc(pfunc_osl_printDebugMessage) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+namespace {
+typedef void (* pfunc_osl_printDetailedDebugMessage)(
+ char const *, sal_Int32, char const *);
+}
+SAL_DLLPUBLIC_EXPORT pfunc_osl_printDetailedDebugMessage SAL_CALL
+osl_setDetailedDebugMessageFunc(pfunc_osl_printDetailedDebugMessage) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL osl_trace(char const *, ...) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_tryToAcquireSemaphore(void *) {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Int32 SAL_CALL rtl_addUnloadingListener(
+ void (SAL_CALL *)(void *), void *)
+{
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Int32 SAL_CALL rtl_compareMemory(
+ void const *, void const *, sal_Size)
+{
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_copyMemory(
+ void *, void const *, sal_Size)
+{
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_fillMemory(void *, sal_Size, sal_uInt8) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT void * SAL_CALL rtl_findInMemory(
+ void const *, sal_uInt8, sal_Size)
+{
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_moveMemory(
+ void *, void const *, sal_Size)
+{
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL rtl_registerModuleForUnloading(oslModule)
+{
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_removeUnloadingListener(sal_Int32) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_unloadUnusedModules(TimeValue *) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_unregisterModuleForUnloading(oslModule) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_zeroMemory(void *, sal_Size) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_logfile_trace( const char*, ... ) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_logfile_longTrace(char const *, ...) {
+ std::abort();
+}
+
+SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL rtl_logfile_hasLogFile() {
+ for (;;) { std::abort(); } // avoid "must return a value" warnings
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/all/debugbase.cxx b/sal/osl/all/debugbase.cxx
new file mode 100644
index 000000000..59848a883
--- /dev/null
+++ b/sal/osl/all/debugbase.cxx
@@ -0,0 +1,145 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <rtl/strbuf.hxx>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <osl/process.h>
+#include <osl/diagnose.hxx>
+#include <sal/log.hxx>
+#include <o3tl/string_view.hxx>
+
+#include <algorithm>
+#include <vector>
+
+namespace {
+
+struct StaticDebugBaseAddressFilter
+ : rtl::StaticWithInit<std::vector<OString>, StaticDebugBaseAddressFilter> {
+ std::vector<OString> operator()() const {
+ std::vector<OString> vec;
+ rtl_uString * pStr = nullptr;
+ OUString const name(
+ "OSL_DEBUGBASE_STORE_ADDRESSES" );
+ if (osl_getEnvironment( name.pData, &pStr ) == osl_Process_E_None) {
+ OUString const str(pStr);
+ rtl_uString_release(pStr);
+ sal_Int32 nIndex = 0;
+ do {
+ vec.push_back( OUStringToOString(
+ o3tl::getToken(str, 0, ';', nIndex ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ }
+ while (nIndex >= 0);
+ }
+ return vec;
+ }
+};
+
+bool isSubStr( char const* pStr, OString const& subStr )
+{
+ return rtl_str_indexOfStr( pStr, subStr.getStr() ) >= 0;
+}
+
+} // anon namespace
+
+extern "C" {
+
+// These functions presumably should not be extern "C", but changing
+// that would break binary compatibility.
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
+#endif
+
+osl::Mutex & SAL_CALL osl_detail_ObjectRegistry_getMutex()
+ SAL_THROW_EXTERN_C()
+{
+ static osl::Mutex aMutex;
+ return aMutex;
+}
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+bool SAL_CALL osl_detail_ObjectRegistry_storeAddresses( char const* pName )
+ SAL_THROW_EXTERN_C()
+{
+ std::vector<OString> const& rVec = StaticDebugBaseAddressFilter::get();
+ if (rVec.empty())
+ return false;
+ // check for "all":
+ OString const& rFirst = rVec[0];
+ if ( rFirst == "all" )
+ return true;
+ auto const iEnd( rVec.cend() );
+ return std::any_of( rVec.begin(), iEnd,
+ [pName] (OString const& it) { return isSubStr(pName, it); });
+}
+
+bool SAL_CALL osl_detail_ObjectRegistry_checkObjectCount(
+ osl::detail::ObjectRegistryData const& rData, std::size_t nExpected )
+ SAL_THROW_EXTERN_C()
+{
+ std::size_t nSize;
+ if (rData.m_bStoreAddresses)
+ nSize = rData.m_addresses.size();
+ else
+ nSize = static_cast<std::size_t>(rData.m_nCount);
+
+ bool const bRet = (nSize == nExpected);
+ SAL_WARN_IF(
+ !bRet, "sal.osl",
+ "unexpected number of " << rData.m_pName << ": " << nSize
+ << "; Expected: " << nExpected);
+ return bRet;
+}
+
+void SAL_CALL osl_detail_ObjectRegistry_registerObject(
+ osl::detail::ObjectRegistryData & rData, void const* pObj )
+ SAL_THROW_EXTERN_C()
+{
+ if (rData.m_bStoreAddresses) {
+ osl::MutexGuard const guard( osl_detail_ObjectRegistry_getMutex() );
+ std::pair<osl::detail::VoidPointerSet::iterator, bool> const insertion(
+ rData.m_addresses.insert(pObj) );
+ SAL_WARN_IF(!insertion.second, "sal.osl", "insertion failed!?");
+ }
+ else {
+ osl_atomic_increment(&rData.m_nCount);
+ }
+}
+
+void SAL_CALL osl_detail_ObjectRegistry_revokeObject(
+ osl::detail::ObjectRegistryData & rData, void const* pObj )
+ SAL_THROW_EXTERN_C()
+{
+ if (rData.m_bStoreAddresses) {
+ osl::MutexGuard const guard( osl_detail_ObjectRegistry_getMutex() );
+ std::size_t const n = rData.m_addresses.erase(pObj);
+ SAL_WARN_IF(n != 1, "sal.osl", "erased more than 1 entry!?");
+ }
+ else {
+ osl_atomic_decrement(&rData.m_nCount);
+ }
+}
+
+} // extern "C"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/all/filepath.cxx b/sal/osl/all/filepath.cxx
new file mode 100644
index 000000000..afba01739
--- /dev/null
+++ b/sal/osl/all/filepath.cxx
@@ -0,0 +1,113 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <osl/file.h>
+#include <rtl/ustring.h>
+#include <cassert>
+
+static sal_uInt32 osl_defCalcTextWidth( rtl_uString *ustrText )
+{
+ return ustrText ? ustrText->length : 0;
+}
+
+oslFileError SAL_CALL osl_abbreviateSystemPath( rtl_uString *ustrSystemPath, rtl_uString **pustrCompacted, sal_uInt32 uMaxWidth, oslCalcTextWidthFunc pfnCalcWidth )
+{
+ rtl_uString *ustrPath = nullptr;
+ rtl_uString *ustrFile = nullptr;
+ sal_uInt32 uPathWidth, uFileWidth;
+
+ if ( !pfnCalcWidth )
+ pfnCalcWidth = osl_defCalcTextWidth;
+
+ {
+ sal_Int32 iLastSlash = rtl_ustr_lastIndexOfChar_WithLength( ustrSystemPath->buffer, ustrSystemPath->length, SAL_PATHDELIMITER );
+
+ if ( iLastSlash >= 0 )
+ {
+ rtl_uString_newFromStr_WithLength( &ustrPath, ustrSystemPath->buffer, iLastSlash );
+ rtl_uString_newFromStr_WithLength( &ustrFile, &ustrSystemPath->buffer[iLastSlash], ustrSystemPath->length - iLastSlash );
+ }
+ else
+ {
+ rtl_uString_new( &ustrPath );
+ rtl_uString_newFromString( &ustrFile, ustrSystemPath );
+ }
+ }
+
+ assert(ustrPath && ustrFile);
+
+ uPathWidth = pfnCalcWidth( ustrPath );
+ uFileWidth = pfnCalcWidth( ustrFile );
+
+ /* First abbreviate the directory component of the path */
+
+ while ( uPathWidth + uFileWidth > uMaxWidth )
+ {
+ if ( ustrPath->length > 3 )
+ {
+ ustrPath->length--;
+ ustrPath->buffer[ustrPath->length-3] = '.';
+ ustrPath->buffer[ustrPath->length-2] = '.';
+ ustrPath->buffer[ustrPath->length-1] = '.';
+ ustrPath->buffer[ustrPath->length] = 0;
+
+ uPathWidth = pfnCalcWidth( ustrPath );
+ }
+ else
+ break;
+ }
+
+ /* Now abbreviate file component */
+
+ while ( uPathWidth + uFileWidth > uMaxWidth )
+ {
+ if ( ustrFile->length > 4 )
+ {
+ ustrFile->length--;
+ ustrFile->buffer[ustrFile->length-3] = '.';
+ ustrFile->buffer[ustrFile->length-2] = '.';
+ ustrFile->buffer[ustrFile->length-1] = '.';
+ ustrFile->buffer[ustrFile->length] = 0;
+
+ uFileWidth = pfnCalcWidth( ustrFile );
+ }
+ else
+ break;
+ }
+
+ rtl_uString_newConcat( pustrCompacted, ustrPath, ustrFile );
+
+ /* Event now if path was compacted to ".../..." it can be too large */
+
+ uPathWidth += uFileWidth;
+
+ while ( uPathWidth > uMaxWidth )
+ {
+ (*pustrCompacted)->length--;
+ (*pustrCompacted)->buffer[(*pustrCompacted)->length] = 0;
+ uPathWidth = pfnCalcWidth( *pustrCompacted );
+ }
+
+ rtl_uString_release(ustrPath);
+ rtl_uString_release(ustrFile);
+
+ return osl_File_E_None;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/all/loadmodulerelative.cxx b/sal/osl/all/loadmodulerelative.cxx
new file mode 100644
index 000000000..242bb6210
--- /dev/null
+++ b/sal/osl/all/loadmodulerelative.cxx
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cstddef>
+
+#include <sal/log.hxx>
+#include <osl/module.h>
+#include <osl/module.hxx>
+#include <rtl/malformeduriexception.hxx>
+#include <rtl/uri.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+
+extern "C" {
+
+#ifndef DISABLE_DYNLOADING
+
+oslModule SAL_CALL osl_loadModuleRelative(
+ oslGenericFunction const baseModule, rtl_uString * const relativePath,
+ sal_Int32 const mode)
+{
+ OUString base;
+ if (!osl::Module::getUrlFromAddress(baseModule, base)) {
+ SAL_INFO("sal.osl","osl::Module::getUrlFromAddress failed");
+ return nullptr;
+ }
+ OUString abs;
+ try {
+ abs = rtl::Uri::convertRelToAbs(base, relativePath);
+ } catch (const rtl::MalformedUriException & e) {
+ SAL_INFO("sal.osl", "rtl::MalformedUriException <" << e.getMessage() << ">");
+ return nullptr;
+ }
+ return osl_loadModule(abs.pData, mode);
+}
+
+#endif // !DISABLE_DYNLOADING
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/all/log.cxx b/sal/osl/all/log.cxx
new file mode 100644
index 000000000..405d5599c
--- /dev/null
+++ b/sal/osl/all/log.cxx
@@ -0,0 +1,477 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstdarg>
+#include <cstddef>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <sstream>
+
+#include <stdio.h>
+#include <string.h>
+#include <fstream>
+
+#include <config_global.h>
+#include <osl/thread.hxx>
+#include <rtl/string.h>
+#include <sal/detail/log.h>
+#include <sal/log.hxx>
+#include <sal/types.h>
+#include <backtraceasstring.hxx>
+#include <salusesyslog.hxx>
+
+#if defined ANDROID
+#include <android/log.h>
+#elif defined _WIN32
+#include <process.h>
+#include <windows.h>
+#define OSL_DETAIL_GETPID _getpid()
+#else
+#include <unistd.h>
+#define OSL_DETAIL_GETPID getpid()
+#endif
+
+#if HAVE_SYSLOG_H
+#include <syslog.h>
+// sal/osl/unx/salinit.cxx::sal_detail_initialize updates this:
+bool sal_use_syslog;
+#else
+bool const sal_use_syslog = false;
+#endif
+
+// Avoid the use of other sal code in this file as much as possible, so that
+// this code can be called from other sal code without causing endless
+// recursion.
+
+namespace {
+
+struct TimeContainer
+{
+ TimeValue aTime;
+ TimeContainer()
+ {
+ osl_getSystemTime(&aTime);
+ }
+};
+
+TimeContainer aStartTime;
+
+bool equalStrings(
+ char const * string1, std::size_t length1, char const * string2,
+ std::size_t length2)
+{
+ return length1 == length2 && std::memcmp(string1, string2, length1) == 0;
+}
+
+#if !defined ANDROID
+char const * toString(sal_detail_LogLevel level) {
+ switch (level) {
+ case SAL_DETAIL_LOG_LEVEL_INFO:
+ return "info";
+ case SAL_DETAIL_LOG_LEVEL_WARN:
+ return "warn";
+ case SAL_DETAIL_LOG_LEVEL_DEBUG:
+ return "debug";
+ default:
+ assert(false); // this cannot happen
+ return "broken";
+ }
+}
+#endif
+
+#ifdef _WIN32
+
+char const* setEnvFromLoggingIniFile(const char* env, const char* key)
+{
+ char const* sResult = nullptr;
+ wchar_t buffer[MAX_PATH];
+ GetModuleFileNameW(nullptr, buffer, MAX_PATH);
+ std::wstring sProgramDirectory(buffer);
+ std::wstring::size_type pos = sProgramDirectory.find_last_of(L"\\/");
+ sProgramDirectory = sProgramDirectory.substr(0, pos+1);
+ sProgramDirectory += L"logging.ini";
+
+ std::ifstream logFileStream(sProgramDirectory);
+ if (!logFileStream.good())
+ return sResult;
+
+ std::size_t n;
+ std::string aKey;
+ std::string sWantedKey(key);
+ std::string sLine;
+ while (std::getline(logFileStream, sLine)) {
+ if (sLine.find('#') == 0)
+ continue;
+ if ( ( n = sLine.find('=') ) != std::string::npos) {
+ aKey = sLine.substr(0, n);
+ if (aKey != sWantedKey)
+ continue;
+ _putenv_s(env, sLine.substr(n+1, sLine.length()).c_str());
+ sResult = std::getenv(env);
+ break;
+ }
+ }
+ return sResult;
+}
+#endif
+
+char const* pLogSelector = nullptr;
+
+char const* getLogLevelEnvVar() {
+ static char const* const pLevel = [] {
+ char const* pResult = nullptr;
+
+ // First check the environment variable, then the setting in logging.ini
+ char const* env = std::getenv("SAL_LOG");
+
+#ifdef _WIN32
+ if (!env)
+ env = setEnvFromLoggingIniFile("SAL_LOG", "LogLevel");
+#endif
+
+ if (env)
+ {
+ // Make a copy from the string in environment block
+ static std::string sLevel(env);
+ pResult = sLevel.c_str();
+ }
+ return pResult;
+ }();
+
+ return pLevel;
+}
+
+#if !defined ANDROID
+
+std::ofstream * getLogFile() {
+ static std::ofstream* const pFile = [] {
+ std::ofstream* pResult = nullptr;
+
+ // First check the environment variable, then the setting in logging.ini
+ char const* logFile = std::getenv("SAL_LOG_FILE");
+
+#ifdef _WIN32
+ if (!logFile)
+ logFile = setEnvFromLoggingIniFile("SAL_LOG_FILE", "LogFilePath");
+#endif
+
+ if (logFile)
+ {
+ // stays until process exits
+ static std::ofstream file(logFile, std::ios::app | std::ios::out);
+ pResult = &file;
+ }
+
+ return pResult;
+ }();
+
+ return pFile;
+}
+
+
+std::pair<bool, bool> getTimestampFlags(char const *selector)
+{
+ bool outputTimestamp = false;
+ bool outputRelativeTimer = false;
+ for (char const* p = selector; p && *p;)
+ {
+ if (*p++ == '+')
+ {
+ char const * p1 = p;
+ while (*p1 != '.' && *p1 != '+' && *p1 != '-' && *p1 != '\0') {
+ ++p1;
+ }
+ if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("TIMESTAMP")))
+ outputTimestamp = true;
+ else if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("RELATIVETIMER")))
+ outputRelativeTimer = true;
+ char const * p2 = p1;
+ while (*p2 != '+' && *p2 != '-' && *p2 != '\0') {
+ ++p2;
+ }
+ p = p2;
+ }
+ }
+ return std::pair(outputTimestamp, outputRelativeTimer);
+}
+
+void maybeOutputTimestamp(std::ostringstream &s) {
+ static const std::pair<bool, bool> aEnvFlags = getTimestampFlags(getLogLevelEnvVar());
+ const auto& [outputTimestamp, outputRelativeTimer] = (pLogSelector == nullptr ? aEnvFlags : getTimestampFlags(pLogSelector));
+
+ if (outputTimestamp)
+ {
+ char ts[100];
+ TimeValue systemTime;
+ osl_getSystemTime(&systemTime);
+ TimeValue localTime;
+ osl_getLocalTimeFromSystemTime(&systemTime, &localTime);
+ oslDateTime dateTime;
+ osl_getDateTimeFromTimeValue(&localTime, &dateTime);
+ struct tm tm;
+ tm.tm_sec = dateTime.Seconds;
+ tm.tm_min = dateTime.Minutes;
+ tm.tm_hour = dateTime.Hours;
+ tm.tm_mday = dateTime.Day;
+ tm.tm_wday = dateTime.DayOfWeek;
+ tm.tm_mon = dateTime.Month - 1;
+ tm.tm_year = dateTime.Year - 1900;
+ tm.tm_yday = 0;
+ strftime(ts, sizeof(ts), "%Y-%m-%d:%H:%M:%S", &tm);
+ char milliSecs[11];
+ snprintf(milliSecs, sizeof(milliSecs), "%03u",
+ static_cast<unsigned>(dateTime.NanoSeconds / 1000000));
+ s << ts << '.' << milliSecs << ':';
+ }
+ if (!outputRelativeTimer)
+ return;
+
+ TimeValue now;
+ osl_getSystemTime(&now);
+ int seconds = now.Seconds - aStartTime.aTime.Seconds;
+ int milliSeconds;
+ if (now.Nanosec < aStartTime.aTime.Nanosec)
+ {
+ seconds--;
+ milliSeconds = 1000 - (aStartTime.aTime.Nanosec - now.Nanosec) / 1000000;
+ }
+ else
+ milliSeconds = (now.Nanosec - aStartTime.aTime.Nanosec) / 1000000;
+ char relativeTimestamp[100];
+ snprintf(relativeTimestamp, sizeof(relativeTimestamp), "%d.%03d", seconds, milliSeconds);
+ s << relativeTimestamp << ':';
+}
+
+#endif
+
+}
+
+void sal_detail_log(
+ sal_detail_LogLevel level, char const * area, char const * where,
+ char const * message, sal_uInt32 backtraceDepth)
+{
+ std::ostringstream s;
+#if !defined ANDROID
+ // On Android, the area will be used as the "tag," and log info already
+ // contains timestamp and PID.
+ if (!sal_use_syslog) {
+ maybeOutputTimestamp(s);
+ s << toString(level) << ':';
+ }
+ if (level != SAL_DETAIL_LOG_LEVEL_DEBUG) {
+ s << area << ':';
+ }
+ s << OSL_DETAIL_GETPID << ':';
+#endif
+ s << osl::Thread::getCurrentIdentifier() << ':';
+ if (level == SAL_DETAIL_LOG_LEVEL_DEBUG) {
+ s << ' ';
+ } else {
+ const size_t nStrLen(std::strlen(SRCDIR "/"));
+ s << (where
+ + (std::strncmp(where, SRCDIR "/", nStrLen) == 0
+ ? nStrLen : 0));
+ }
+ s << message;
+ if (backtraceDepth != 0) {
+ s << " at:\n" << osl::detail::backtraceAsString(backtraceDepth);
+ }
+
+#if defined ANDROID
+ int android_log_level;
+ switch (level) {
+ case SAL_DETAIL_LOG_LEVEL_INFO:
+ android_log_level = ANDROID_LOG_INFO;
+ break;
+ case SAL_DETAIL_LOG_LEVEL_WARN:
+ android_log_level = ANDROID_LOG_WARN;
+ break;
+ case SAL_DETAIL_LOG_LEVEL_DEBUG:
+ android_log_level = ANDROID_LOG_DEBUG;
+ break;
+ default:
+ android_log_level = ANDROID_LOG_INFO;
+ break;
+ }
+ __android_log_print(
+ android_log_level, area == 0 ? "LibreOffice" : area, "%s",
+ s.str().c_str());
+#else
+ if (sal_use_syslog) {
+#if HAVE_SYSLOG_H
+ int prio;
+ switch (level) {
+ case SAL_DETAIL_LOG_LEVEL_INFO:
+ prio = LOG_INFO;
+ break;
+ case SAL_DETAIL_LOG_LEVEL_WARN:
+ prio = LOG_WARNING;
+ break;
+ case SAL_DETAIL_LOG_LEVEL_DEBUG:
+ prio = LOG_DEBUG;
+ break;
+ default:
+ assert(false); // this cannot happen
+ prio = LOG_WARNING;
+ }
+ syslog(prio, "%s", s.str().c_str());
+#endif
+ } else {
+ // avoid calling getLogFile() more than once
+ static std::ofstream * logFile = getLogFile();
+ if (logFile) {
+ *logFile << s.str() << std::endl;
+ }
+ else {
+ s << '\n';
+#ifdef _WIN32
+ // write to Windows debugger console, too
+ OutputDebugStringA(s.str().c_str());
+#endif
+ std::fputs(s.str().c_str(), stderr);
+ std::fflush(stderr);
+ }
+ }
+#endif
+}
+
+void sal_detail_set_log_selector(char const *logSelector)
+{
+ pLogSelector = logSelector;
+}
+
+void sal_detail_logFormat(
+ sal_detail_LogLevel level, char const * area, char const * where,
+ char const * format, ...)
+{
+ const sal_detail_LogAction eAction
+ = static_cast<sal_detail_LogAction>(sal_detail_log_report(level, area));
+ if (eAction == SAL_DETAIL_LOG_ACTION_IGNORE)
+ return;
+
+ std::va_list args;
+ va_start(args, format);
+ char buf[1024];
+ int const len = sizeof buf - RTL_CONSTASCII_LENGTH("...");
+ int n = vsnprintf(buf, len, format, args);
+ if (n < 0) {
+ std::strcpy(buf, "???");
+ } else if (n >= len) {
+ std::strcpy(buf + len - 1, "...");
+ }
+ sal_detail_log(level, area, where, buf, 0);
+ va_end(args);
+
+ if (eAction == SAL_DETAIL_LOG_ACTION_FATAL)
+ std::abort();
+}
+
+unsigned char sal_detail_log_report(sal_detail_LogLevel level, char const * area)
+{
+ if (level == SAL_DETAIL_LOG_LEVEL_DEBUG) {
+ return SAL_DETAIL_LOG_ACTION_LOG;
+ }
+ assert(area != nullptr);
+ static char const* const envEnv = [] {
+ char const* pResult = getLogLevelEnvVar();
+ if (!pResult)
+ pResult = "+WARN";
+ return pResult;
+ }();
+ char const* const env = (pLogSelector == nullptr ? envEnv : pLogSelector);
+ std::size_t areaLen = std::strlen(area);
+ enum Sense { POSITIVE = 0, NEGATIVE = 1 };
+ std::size_t senseLen[2] = { 0, 1 };
+ // initial senseLen[POSITIVE] < senseLen[NEGATIVE], so that if there are
+ // no matching switches at all, the result will be negative (and
+ // initializing with 1 is safe as the length of a valid switch, even
+ // without the "+"/"-" prefix, will always be > 1)
+ bool senseFatal[2] = { false, false };
+ bool seenWarn = false;
+ bool bFlagFatal = false;
+ for (char const * p = env;;) {
+ Sense sense;
+ switch (*p++) {
+ case '\0':
+ {
+ if (level == SAL_DETAIL_LOG_LEVEL_WARN && !seenWarn)
+ return sal_detail_log_report(SAL_DETAIL_LOG_LEVEL_INFO, area);
+
+ sal_detail_LogAction eAction = SAL_DETAIL_LOG_ACTION_IGNORE;
+ // if a specific item is positive and negative (==), default to positive
+ if (senseLen[POSITIVE] >= senseLen[NEGATIVE])
+ {
+ if (senseFatal[POSITIVE]) eAction = SAL_DETAIL_LOG_ACTION_FATAL;
+ else eAction = SAL_DETAIL_LOG_ACTION_LOG;
+ }
+ return eAction;
+ }
+ case '+':
+ sense = POSITIVE;
+ break;
+ case '-':
+ sense = NEGATIVE;
+ break;
+ default:
+ return SAL_DETAIL_LOG_ACTION_LOG; // upon an illegal SAL_LOG value, enable everything
+ }
+ char const * p1 = p;
+ while (*p1 != '.' && *p1 != '+' && *p1 != '-' && *p1 != '\0') {
+ ++p1;
+ }
+ bool match;
+ if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("INFO"))) {
+ match = level == SAL_DETAIL_LOG_LEVEL_INFO;
+ } else if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("WARN")))
+ {
+ match = level == SAL_DETAIL_LOG_LEVEL_WARN;
+ seenWarn = true;
+ } else if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("FATAL")))
+ {
+ bFlagFatal = (sense == POSITIVE);
+ match = false;
+ } else if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("TIMESTAMP")) ||
+ equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("RELATIVETIMER")))
+ {
+ // handled later
+ match = false;
+ } else {
+ return SAL_DETAIL_LOG_ACTION_LOG;
+ // upon an illegal SAL_LOG value, everything is considered
+ // positive
+ }
+ char const * p2 = p1;
+ while (*p2 != '+' && *p2 != '-' && *p2 != '\0') {
+ ++p2;
+ }
+ if (match) {
+ if (*p1 == '.') {
+ ++p1;
+ std::size_t n = p2 - p1;
+ if ((n == areaLen && equalStrings(p1, n, area, areaLen))
+ || (n < areaLen && area[n] == '.'
+ && equalStrings(p1, n, area, n)))
+ {
+ senseLen[sense] = p2 - p;
+ senseFatal[sense] = bFlagFatal;
+ }
+ } else {
+ senseLen[sense] = p1 - p;
+ senseFatal[sense] = bFlagFatal;
+ }
+ }
+ p = p2;
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/all/mutexshared.cxx b/sal/osl/all/mutexshared.cxx
new file mode 100644
index 000000000..3de7f9930
--- /dev/null
+++ b/sal/osl/all/mutexshared.cxx
@@ -0,0 +1,20 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <osl/mutex.hxx>
+
+oslMutex* SAL_CALL osl_getGlobalMutex()
+{
+ static osl::Mutex g_Mutex;
+ return &g_Mutex.mutex;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/osl/all/signalshared.cxx b/sal/osl/all/signalshared.cxx
new file mode 100644
index 000000000..530413f26
--- /dev/null
+++ b/sal/osl/all/signalshared.cxx
@@ -0,0 +1,141 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <stdlib.h>
+
+#include <signalshared.hxx>
+
+#include <osl/diagnose.h>
+#include <mutex>
+
+namespace
+{
+oslSignalHandlerImpl* SignalList;
+bool bInitSignal = false;
+
+std::mutex& getSignalMutex()
+{
+ static std::mutex aMutex;
+ return aMutex;
+}
+}
+
+oslSignalAction callSignalHandler(oslSignalInfo* pInfo)
+{
+ oslSignalHandlerImpl* pHandler = SignalList;
+ oslSignalAction Action = osl_Signal_ActCallNextHdl;
+
+ while (pHandler)
+ {
+ if ((Action = pHandler->Handler(pHandler->pData, pInfo)) != osl_Signal_ActCallNextHdl)
+ break;
+
+ pHandler = pHandler->pNext;
+ }
+
+ return Action;
+}
+
+oslSignalHandler SAL_CALL osl_addSignalHandler(oslSignalHandlerFunction handler, void* pData)
+{
+ if (!handler)
+ return nullptr;
+
+ oslSignalHandlerImpl* pHandler
+ = static_cast<oslSignalHandlerImpl*>(calloc(1, sizeof(oslSignalHandlerImpl)));
+
+ std::scoped_lock aGuard(getSignalMutex());
+
+ if (!bInitSignal)
+ bInitSignal = onInitSignal();
+
+ if (pHandler)
+ {
+ pHandler->Handler = handler;
+ pHandler->pData = pData;
+
+ pHandler->pNext = SignalList;
+ SignalList = pHandler;
+
+ return pHandler;
+ }
+
+ return nullptr;
+}
+
+sal_Bool SAL_CALL osl_removeSignalHandler(oslSignalHandler handler)
+{
+ std::scoped_lock aGuard(getSignalMutex());
+
+ if (!bInitSignal)
+ bInitSignal = onInitSignal();
+
+ oslSignalHandlerImpl* pHandler = SignalList;
+ oslSignalHandlerImpl* pPrevious = nullptr;
+
+ while (pHandler)
+ {
+ if (pHandler == handler)
+ {
+ if (pPrevious)
+ pPrevious->pNext = pHandler->pNext;
+ else
+ SignalList = pHandler->pNext;
+
+ if (SignalList == nullptr)
+ bInitSignal = onDeInitSignal();
+
+ free(pHandler);
+
+ return true;
+ }
+
+ pPrevious = pHandler;
+ pHandler = pHandler->pNext;
+ }
+
+ return false;
+}
+
+oslSignalAction SAL_CALL osl_raiseSignal(sal_Int32 userSignal, void* userData)
+{
+ std::scoped_lock aGuard(getSignalMutex());
+
+ if (!bInitSignal)
+ bInitSignal = onInitSignal();
+
+ oslSignalInfo info;
+ info.Signal = osl_Signal_User;
+ info.UserSignal = userSignal;
+ info.UserData = userData;
+
+ oslSignalAction action = callSignalHandler(&info);
+
+ return action;
+}
+
+sal_Bool SAL_CALL osl_setErrorReporting(sal_Bool /*bEnable*/)
+{
+ // this is part of the stable API
+ return false;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/all/utility.cxx b/sal/osl/all/utility.cxx
new file mode 100644
index 000000000..e22bdd3de
--- /dev/null
+++ b/sal/osl/all/utility.cxx
@@ -0,0 +1,49 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <osl/time.h>
+
+/*
+ * mfe : maybe it would be wishful to include initialization
+ * of the global timer in dllmain or _init directly.
+ * But nonetheless this (should) work too.
+ */
+namespace osl
+{
+
+namespace {
+
+class OGlobalTimer
+{
+
+public:
+
+ OGlobalTimer() {
+ osl_getGlobalTimer();
+ }
+
+};
+
+}
+
+static OGlobalTimer aGlobalTimer;
+
+} // namespace osl
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/asm/interlck_sparc.s b/sal/osl/unx/asm/interlck_sparc.s
new file mode 100644
index 000000000..7b971a50a
--- /dev/null
+++ b/sal/osl/unx/asm/interlck_sparc.s
@@ -0,0 +1,79 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+
+/*
+ * Implements osl_[increment|decrement]InterlockedCount:
+ * sparcv9/sparcv8plus architecture: use the "cas" instruction
+ *
+ * 32 bit mode with v8plus support or 64 bit mode:
+ * sparcv9 mode is implied. Assemble with -xarch=v8plus (32 bit) or
+ * -xarch=v9 (64 bit).
+ *
+ */
+
+#if !defined(__sparcv8plus) && !defined(__sparcv9) && !defined(__sparc_v9__)
+
+#error LibreOffice requires SPARCv8plus or SPARCv9 CPU with "cas" instruction
+
+#endif
+
+.section ".text"
+ .global osl_incrementInterlockedCount
+ .align 8
+
+! Implements osl_[increment|decrement]InterlockedCount with sparcv9(sparcv8plus) "cas"
+! instruction.
+
+osl_incrementInterlockedCount:
+
+1: ld [%o0], %o1
+ add %o1, 1, %o2
+! allow linux to build for v8
+ .word 0xD5E21009
+! cas [%o0], %o1, %o2
+ cmp %o1, %o2
+ bne 1b
+ nop ! delay slot
+ retl
+ add %o2, 1, %o0 ! delay slot
+
+ .type osl_incrementInterlockedCount,#function
+ .size osl_incrementInterlockedCount,.-osl_incrementInterlockedCount
+
+
+.section ".text"
+ .global osl_decrementInterlockedCount
+ .align 8
+
+osl_decrementInterlockedCount:
+
+1: ld [%o0], %o1
+ sub %o1, 1, %o2
+! allow linux to build for v8
+ .word 0xD5E21009
+! cas [%o0], %o1, %o2
+ cmp %o1, %o2
+ bne 1b
+ nop ! delay slot
+ retl
+ sub %o2, 1, %o0 ! delay slot
+
+ .type osl_decrementInterlockedCount,#function
+ .size osl_decrementInterlockedCount,.-osl_decrementInterlockedCount
+
diff --git a/sal/osl/unx/backtrace.c b/sal/osl/unx/backtrace.c
new file mode 100644
index 000000000..f7bd01c33
--- /dev/null
+++ b/sal/osl/unx/backtrace.c
@@ -0,0 +1,246 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "backtrace.h"
+
+#if ! HAVE_FEATURE_BACKTRACE /* no GNU backtrace implementation available */
+
+#include <sal/types.h>
+
+#ifdef __sun /* Solaris */
+
+#include <dlfcn.h>
+#include <pthread.h>
+#include <setjmp.h>
+#include <stdio.h>
+#include <sys/frame.h>
+
+#if defined(SPARC)
+
+#if defined IS_LP64
+
+#define FRAME_PTR_OFFSET 1
+#define FRAME_OFFSET 0
+#define STACK_BIAS 0x7ff
+
+#else
+
+#define FRAME_PTR_OFFSET 1
+#define FRAME_OFFSET 0
+#define STACK_BIAS 0
+
+#endif
+
+#elif defined( INTEL )
+
+#define FRAME_PTR_OFFSET 3
+#define FRAME_OFFSET 0
+#define STACK_BIAS 0
+
+#else
+
+#error Unknown Solaris target platform.
+
+#endif /* defined SPARC or INTEL */
+
+int backtrace( void **buffer, int max_frames )
+{
+ jmp_buf ctx;
+ long fpval;
+ struct frame *fp;
+ int i;
+
+ /* flush register windows */
+#ifdef SPARC
+ asm("ta 3");
+#endif
+
+ /* get stack- and framepointer */
+ setjmp(ctx);
+
+ fpval = ((long*)(ctx))[FRAME_PTR_OFFSET];
+ fp = (struct frame*)((char*)(fpval) + STACK_BIAS);
+
+ for (i = 0; (i < FRAME_OFFSET) && (fp != 0); i++)
+ fp = (struct frame*)((char*)(fp->fr_savfp) + STACK_BIAS);
+
+ /* iterate through backtrace */
+ for (i = 0; (fp != 0) && (fp->fr_savpc != 0) && (i < max_frames); i++)
+ {
+ /* saved (prev) frame */
+ struct frame * prev = (struct frame*)((char*)(fp->fr_savfp) + STACK_BIAS);
+
+ /* store frame */
+ *(buffer++) = (void*)(fp->fr_savpc);
+
+ /* prev frame (w/ stack growing top down) */
+ fp = (prev > fp) ? prev : 0;
+ }
+
+ /* return number of frames stored */
+ return i;
+}
+
+char ** backtrace_symbols(void * const * buffer, int size)
+{
+ (void)buffer; (void)size;
+ return NULL; /*TODO*/
+}
+
+void backtrace_symbols_fd( void **buffer, int size, int fd )
+{
+ FILE *fp = fdopen( fd, "w" );
+
+ if ( fp )
+ {
+ void **pFramePtr;
+
+ for ( pFramePtr = buffer; size > 0 && pFramePtr && *pFramePtr; pFramePtr++, size-- )
+ {
+ Dl_info dli;
+ ptrdiff_t offset;
+
+ if ( 0 != dladdr( *pFramePtr, &dli ) )
+ {
+ if ( dli.dli_fname && dli.dli_fbase )
+ {
+ offset = (ptrdiff_t)*pFramePtr - (ptrdiff_t)dli.dli_fbase;
+ fprintf( fp, "%s+0x%" SAL_PRI_PTRDIFFT "x", dli.dli_fname, offset );
+ }
+ if ( dli.dli_sname && dli.dli_saddr )
+ {
+ offset = (ptrdiff_t)*pFramePtr - (ptrdiff_t)dli.dli_saddr;
+ fprintf( fp, "(%s+0x%" SAL_PRI_PTRDIFFT "x)", dli.dli_sname, offset );
+ }
+ }
+ fprintf( fp, "[%p]\n", *pFramePtr );
+ }
+
+ fclose( fp );
+ }
+}
+
+#elif defined FREEBSD || defined NETBSD || defined OPENBSD || defined(DRAGONFLY)
+
+#include <dlfcn.h>
+#include <pthread.h>
+#include <setjmp.h>
+#include <stddef.h>
+#include <stdio.h>
+
+/* no frame.h on FreeBSD */
+struct frame {
+ struct frame *fr_savfp;
+ long fr_savpc;
+};
+
+#if defined(POWERPC) || defined(POWERPC64)
+
+#define FRAME_PTR_OFFSET 1
+#define FRAME_OFFSET 0
+
+#else
+
+#define FRAME_PTR_OFFSET 3
+#define FRAME_OFFSET 0
+
+#endif
+
+int backtrace( void **buffer, int max_frames )
+{
+ struct frame *fp;
+ jmp_buf ctx;
+ int i;
+ /* get stack- and framepointer */
+ setjmp(ctx);
+ fp = (struct frame*)(((size_t*)(ctx))[FRAME_PTR_OFFSET]);
+ for ( i=0; (i<FRAME_OFFSET) && (fp!=0); i++)
+ fp = fp->fr_savfp;
+ /* iterate through backtrace */
+ for (i=0; fp && fp->fr_savpc && i<max_frames; i++)
+ {
+ /* store frame */
+ *(buffer++) = (void *)fp->fr_savpc;
+ /* next frame */
+ fp=fp->fr_savfp;
+ }
+ return i;
+}
+
+char ** backtrace_symbols(void * const * buffer, int size)
+{
+ (void)buffer; (void)size;
+ return NULL; /*TODO*/
+}
+
+void backtrace_symbols_fd( void **buffer, int size, int fd )
+{
+ FILE *fp = fdopen( fd, "w" );
+
+ if ( fp )
+ {
+ void **pFramePtr;
+ for ( pFramePtr = buffer; size > 0 && pFramePtr && *pFramePtr; pFramePtr++, size-- )
+ {
+ Dl_info dli;
+ ptrdiff_t offset;
+
+ if ( 0 != dladdr( *pFramePtr, &dli ) )
+ {
+ if ( dli.dli_fname && dli.dli_fbase )
+ {
+ offset = (ptrdiff_t)*pFramePtr - (ptrdiff_t)dli.dli_fbase;
+ fprintf( fp, "%s+0x%" SAL_PRI_PTRDIFFT "x", dli.dli_fname, offset );
+ }
+ if ( dli.dli_sname && dli.dli_saddr )
+ {
+ offset = (ptrdiff_t)*pFramePtr - (ptrdiff_t)dli.dli_saddr;
+ fprintf( fp, "(%s+0x%" SAL_PRI_PTRDIFFT "x)", dli.dli_sname, offset );
+ }
+ }
+ fprintf( fp, "[%p]\n", *pFramePtr );
+ }
+ fclose( fp );
+ }
+}
+
+#else /* not GNU/BSD/Solaris */
+
+int backtrace( void **buffer, int max_frames )
+{
+ (void)buffer; (void)max_frames;
+ return 0;
+}
+
+char ** backtrace_symbols(void * const * buffer, int size)
+{
+ (void)buffer; (void)size;
+ return NULL; /*TODO*/
+}
+
+void backtrace_symbols_fd( void **buffer, int size, int fd )
+{
+ (void)buffer; (void)size; (void)fd;
+}
+
+#endif /* not GNU/BSD/Solaris */
+
+#endif /* ! HAVE_FEATURE_BACKTRACE */
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/backtrace.h b/sal/osl/unx/backtrace.h
new file mode 100644
index 000000000..11a9da52e
--- /dev/null
+++ b/sal/osl/unx/backtrace.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_BACKTRACE_H
+#define INCLUDED_SAL_OSL_UNX_BACKTRACE_H
+
+#include <config_features.h>
+
+#if HAVE_FEATURE_BACKTRACE /* GNU backtrace implementation available */
+
+#include <execinfo.h>
+
+#else
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* backtrace function with same behaviour as defined in GNU libc */
+
+int backtrace( void **buffer, int max_frames );
+
+char ** backtrace_symbols(void * const * buffer, int size);
+
+void backtrace_symbols_fd( void **buffer, int size, int fd );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/backtraceapi.cxx b/sal/osl/unx/backtraceapi.cxx
new file mode 100644
index 000000000..a4cec46ca
--- /dev/null
+++ b/sal/osl/unx/backtraceapi.cxx
@@ -0,0 +1,279 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstdlib>
+#include <limits>
+#include <memory>
+#include <mutex>
+
+#include <o3tl/runtimetooustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+#include <sal/log.hxx>
+#include <sal/backtrace.hxx>
+
+#include "backtrace.h"
+#include <backtraceasstring.hxx>
+
+OUString osl::detail::backtraceAsString(sal_uInt32 maxDepth) {
+ std::unique_ptr<sal::BacktraceState> backtrace = sal::backtrace_get( maxDepth );
+ return sal::backtrace_to_string( backtrace.get());
+}
+
+std::unique_ptr<sal::BacktraceState> sal::backtrace_get(sal_uInt32 maxDepth)
+{
+ assert(maxDepth != 0);
+ auto const maxInt = static_cast<unsigned int>(
+ std::numeric_limits<int>::max());
+ if (maxDepth > maxInt) {
+ maxDepth = static_cast<sal_uInt32>(maxInt);
+ }
+ auto b1 = new void *[maxDepth];
+ int n = backtrace(b1, static_cast<int>(maxDepth));
+ return std::unique_ptr<BacktraceState>(new BacktraceState{ b1, n });
+}
+
+#if OSL_DEBUG_LEVEL > 0 && (defined LINUX || defined MACOSX || defined FREEBSD || defined NETBSD || defined OPENBSD || defined(DRAGONFLY))
+// The backtrace_symbols() function is unreliable, it requires -rdynamic and even then it cannot resolve names
+// of many functions, such as those with hidden ELF visibility. Libunwind doesn't resolve names for me either,
+// boost::stacktrace doesn't work properly, the best result I've found is addr2line. Using addr2line is relatively
+// slow, but I don't find that to be a big problem for printing of backtraces. Feel free to improve if needed
+// (e.g. the calls could be grouped by the binary).
+#include <dlfcn.h>
+#include <unistd.h>
+#include <vector>
+#include <osl/process.h>
+#include <rtl/strbuf.hxx>
+#include <osl/mutex.hxx>
+#include <o3tl/lru_map.hxx>
+#include "file_url.hxx"
+
+namespace
+{
+struct FrameData
+{
+ const char* file = nullptr;
+ void* addr;
+ ptrdiff_t offset;
+ OString info;
+ bool handled = false;
+};
+
+typedef o3tl::lru_map<void*, OString> FrameCache;
+std::mutex frameCacheMutex;
+FrameCache frameCache( 256 );
+
+void process_file_addr2line( const char* file, std::vector<FrameData>& frameData )
+{
+ if(access( file, R_OK ) != 0)
+ return; // cannot read info from the binary file anyway
+ OUString binary("addr2line");
+ OUString dummy;
+#if defined __clang__
+ // llvm-addr2line is faster than addr2line
+ if(osl::detail::find_in_PATH("llvm-addr2line", dummy))
+ binary = "llvm-addr2line";
+#endif
+ if(!osl::detail::find_in_PATH(binary, dummy))
+ return; // Will not work, avoid warnings from osl process code.
+ OUString arg1("-Cfe");
+ OUString arg2 = OUString::fromUtf8(file);
+ std::vector<OUString> addrs;
+ std::vector<rtl_uString*> args;
+ args.reserve(frameData.size() + 2);
+ args.push_back( arg1.pData );
+ args.push_back( arg2.pData );
+ for( FrameData& frame : frameData )
+ {
+ if( frame.file != nullptr && strcmp( file, frame.file ) == 0 )
+ {
+ addrs.push_back("0x" + OUString::number(frame.offset, 16));
+ args.push_back(addrs.back().pData);
+ frame.handled = true;
+ }
+ }
+
+ oslProcess aProcess;
+ oslFileHandle pOut = nullptr;
+ oslFileHandle pErr = nullptr;
+ oslSecurity pSecurity = osl_getCurrentSecurity();
+ oslProcessError eErr = osl_executeProcess_WithRedirectedIO(
+ binary.pData, args.data(), args.size(), osl_Process_SEARCHPATH | osl_Process_HIDDEN, pSecurity, nullptr,
+ nullptr, 0, &aProcess, nullptr, &pOut, &pErr);
+ osl_freeSecurityHandle(pSecurity);
+
+ if (eErr != osl_Process_E_None)
+ {
+ SAL_WARN("sal.osl", binary << " call to resolve " << file << " symbols failed");
+ return;
+ }
+
+ OStringBuffer outputBuffer;
+ if (pOut)
+ {
+ const sal_uInt64 BUF_SIZE = 1024;
+ char buffer[BUF_SIZE];
+ while (true)
+ {
+ sal_uInt64 bytesRead = 0;
+ while(osl_readFile(pErr, buffer, BUF_SIZE, &bytesRead) == osl_File_E_None
+ && bytesRead != 0)
+ ; // discard possible stderr output
+ oslFileError err = osl_readFile(pOut, buffer, BUF_SIZE, &bytesRead);
+ if(bytesRead == 0 && err == osl_File_E_None)
+ break;
+ outputBuffer.append(buffer, bytesRead);
+ if (err != osl_File_E_None && err != osl_File_E_AGAIN)
+ break;
+ }
+ osl_closeFile(pOut);
+ }
+ if(pErr)
+ osl_closeFile(pErr);
+ eErr = osl_joinProcess(aProcess);
+ osl_freeProcessHandle(aProcess);
+
+ OString output = outputBuffer.makeStringAndClear();
+ std::vector<OString> lines;
+ sal_Int32 outputPos = 0;
+ while(outputPos < output.getLength())
+ {
+ sal_Int32 end1 = output.indexOf('\n', outputPos);
+ if(end1 < 0)
+ break;
+ sal_Int32 end2 = output.indexOf('\n', end1 + 1);
+ if(end2 < 0)
+ end2 = output.getLength();
+ lines.push_back(output.copy( outputPos, end1 - outputPos ));
+ lines.push_back(output.copy( end1 + 1, end2 - end1 - 1 ));
+ outputPos = end2 + 1;
+ }
+ if(lines.size() != addrs.size() * 2)
+ {
+ SAL_WARN("sal.osl", "failed to parse " << binary << " call output to resolve " << file << " symbols ");
+ return; // addr2line problem?
+ }
+ size_t linesPos = 0;
+ for( FrameData& frame : frameData )
+ {
+ if( frame.file != nullptr && strcmp( file, frame.file ) == 0 )
+ {
+ // There should be two lines, first function name and second source file information.
+ // If each of them starts with ??, it is invalid/unknown.
+ OString function = lines[linesPos];
+ OString source = lines[linesPos+1];
+ linesPos += 2;
+ if(function.isEmpty() || function.startsWith("??"))
+ {
+ // Cache that the address cannot be resolved.
+ std::lock_guard guard(frameCacheMutex);
+ frameCache.insert( { frame.addr, "" } );
+ }
+ else
+ {
+ if( source.startsWith("??"))
+ frame.info = function + " in " + file;
+ else
+ frame.info = function + " at " + source;
+ std::lock_guard guard(frameCacheMutex);
+ frameCache.insert( { frame.addr, frame.info } );
+ }
+ }
+ }
+}
+
+} // namespace
+
+OUString sal::backtrace_to_string(BacktraceState* backtraceState)
+{
+ // Collect frames for each binary and process each binary in one addr2line
+ // call for better performance.
+ std::vector< FrameData > frameData;
+ frameData.resize(backtraceState->nDepth);
+ for (int i = 0; i != backtraceState->nDepth; ++i)
+ {
+ Dl_info dli;
+ void* addr = backtraceState->buffer[i];
+ std::unique_lock guard(frameCacheMutex);
+ auto it = frameCache.find(addr);
+ bool found = it != frameCache.end();
+ guard.unlock();
+ if( found )
+ {
+ frameData[ i ].info = it->second;
+ frameData[ i ].handled = true;
+ }
+ else if (dladdr(addr, &dli) != 0)
+ {
+ if (dli.dli_fname && dli.dli_fbase)
+ {
+ frameData[ i ].file = dli.dli_fname;
+ frameData[ i ].addr = addr;
+ frameData[ i ].offset = reinterpret_cast<ptrdiff_t>(addr) - reinterpret_cast<ptrdiff_t>(dli.dli_fbase);
+ }
+ }
+ }
+ for (int i = 0; i != backtraceState->nDepth; ++i)
+ {
+ if(frameData[ i ].file != nullptr && !frameData[ i ].handled)
+ process_file_addr2line( frameData[ i ].file, frameData );
+ }
+ OUStringBuffer b3;
+ std::unique_ptr<char*, decltype(free)*> b2{ nullptr, free };
+ bool fallbackInitDone = false;
+ for (int i = 0; i != backtraceState->nDepth; ++i)
+ {
+ if (i != 0)
+ b3.append("\n");
+ b3.append( "#" + OUString::number( i ) + " " );
+ if(!frameData[i].info.isEmpty())
+ b3.append(o3tl::runtimeToOUString(frameData[i].info.getStr()));
+ else
+ {
+ if(!fallbackInitDone)
+ {
+ b2 = std::unique_ptr<char*, decltype(free)*>
+ {backtrace_symbols(backtraceState->buffer, backtraceState->nDepth), free};
+ fallbackInitDone = true;
+ }
+ if(b2)
+ b3.append(o3tl::runtimeToOUString(b2.get()[i]));
+ else
+ b3.append("??");
+ }
+ }
+ return b3.makeStringAndClear();
+}
+
+#else
+
+OUString sal::backtrace_to_string(BacktraceState* backtraceState)
+{
+ std::unique_ptr<char*, decltype(free)*> b2{backtrace_symbols(backtraceState->buffer, backtraceState->nDepth), free};
+ if (!b2) {
+ return OUString();
+ }
+ OUStringBuffer b3;
+ for (int i = 0; i != backtraceState->nDepth; ++i) {
+ if (i != 0) {
+ b3.append("\n");
+ }
+ b3.append( "#" + OUString::number( i ) + " " );
+ b3.append(o3tl::runtimeToOUString(b2.get()[i]));
+ }
+ return b3.makeStringAndClear();
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/conditn.cxx b/sal/osl/unx/conditn.cxx
new file mode 100644
index 000000000..602240922
--- /dev/null
+++ b/sal/osl/unx/conditn.cxx
@@ -0,0 +1,270 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <assert.h>
+
+#include "system.hxx"
+#include "unixerrnostring.hxx"
+#include <sal/log.hxx>
+#include <sal/types.h>
+
+#include <osl/conditn.h>
+#include <osl/time.h>
+
+namespace {
+
+struct oslConditionImpl
+{
+ pthread_cond_t m_Condition;
+ pthread_mutex_t m_Lock;
+ bool m_State;
+};
+
+}
+
+oslCondition SAL_CALL osl_createCondition()
+{
+ oslConditionImpl* pCond;
+ int nRet=0;
+
+ pCond = static_cast<oslConditionImpl*>(malloc(sizeof(oslConditionImpl)));
+
+ if ( pCond == nullptr )
+ {
+ return nullptr;
+ }
+
+ pCond->m_State = false;
+
+ /* init condition variable with default attr. (PTHREAD_PROCESS_PRIVAT) */
+ nRet = pthread_cond_init(&pCond->m_Condition, PTHREAD_CONDATTR_DEFAULT);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "pthread_cond_init failed: " << UnixErrnoString(nRet) );
+
+ free(pCond);
+ return nullptr;
+ }
+
+ nRet = pthread_mutex_init(&pCond->m_Lock, PTHREAD_MUTEXATTR_DEFAULT);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "pthread_mutex_init failed: " << UnixErrnoString(nRet) );
+
+ nRet = pthread_cond_destroy(&pCond->m_Condition);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "pthread_cond_destroy failed: " << UnixErrnoString(nRet) );
+
+ free(pCond);
+ pCond = nullptr;
+ }
+
+ SAL_INFO( "sal.osl.condition", "osl_createCondition(): " << pCond );
+
+ return static_cast<oslCondition>(pCond);
+}
+
+void SAL_CALL osl_destroyCondition(oslCondition Condition)
+{
+ oslConditionImpl* pCond;
+
+ pCond = static_cast<oslConditionImpl*>(Condition);
+
+ SAL_INFO( "sal.osl.condition", "osl_destroyCondition(" << pCond << ")" );
+
+ if ( pCond )
+ {
+ int nRet = pthread_cond_destroy(&pCond->m_Condition);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "pthread_cond_destroy failed: " << UnixErrnoString(nRet) );
+ nRet = pthread_mutex_destroy(&pCond->m_Lock);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "pthread_mutex_destroy failed: " << UnixErrnoString(nRet) );
+
+ free(Condition);
+ }
+}
+
+sal_Bool SAL_CALL osl_setCondition(oslCondition Condition)
+{
+ oslConditionImpl* pCond;
+ int nRet=0;
+
+ assert(Condition);
+ pCond = static_cast<oslConditionImpl*>(Condition);
+
+ nRet = pthread_mutex_lock(&pCond->m_Lock);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "osl_setCondition(" << pCond << "): pthread_mutex_lock failed: " << UnixErrnoString(nRet) );
+ return false;
+ }
+
+ pCond->m_State = true;
+ nRet = pthread_cond_broadcast(&pCond->m_Condition);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "osl_setCondition(" << pCond << "): pthread_cond_broadcast failed: " << UnixErrnoString(nRet) );
+ // try to unlock the mutex
+ pthread_mutex_unlock(&pCond->m_Lock);
+ return false;
+ }
+
+ nRet = pthread_mutex_unlock(&pCond->m_Lock);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "osl_setCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) );
+ return false;
+ }
+
+ SAL_INFO( "sal.osl.condition", "osl_setCondition(" << pCond << ")" );
+
+ return true;
+
+}
+
+sal_Bool SAL_CALL osl_resetCondition(oslCondition Condition)
+{
+ oslConditionImpl* pCond;
+ int nRet=0;
+
+ assert(Condition);
+
+ pCond = static_cast<oslConditionImpl*>(Condition);
+
+ nRet = pthread_mutex_lock(&pCond->m_Lock);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "osl_resetCondition(" << pCond << "): pthread_mutex_lock failed: " << UnixErrnoString(nRet) );
+ return false;
+ }
+
+ pCond->m_State = false;
+
+ nRet = pthread_mutex_unlock(&pCond->m_Lock);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "osl_resetCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) );
+ return false;
+ }
+
+ SAL_INFO( "sal.osl.condition", "osl_resetCondition(" << pCond << ")" );
+
+ return true;
+}
+
+oslConditionResult SAL_CALL osl_waitCondition(oslCondition Condition, const TimeValue* pTimeout)
+{
+ oslConditionImpl* pCond;
+ int nRet=0;
+
+ assert(Condition);
+ pCond = static_cast<oslConditionImpl*>(Condition);
+
+ SAL_INFO( "sal.osl.condition", "osl_waitCondition(" << pCond << ")" );
+
+ nRet = pthread_mutex_lock(&pCond->m_Lock);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_lock failed: " << UnixErrnoString(nRet) );
+ return osl_cond_result_error;
+ }
+
+ if ( pTimeout )
+ {
+ if ( ! pCond->m_State )
+ {
+ struct timeval tp;
+ struct timespec to;
+
+ gettimeofday(&tp, nullptr);
+
+ SET_TIMESPEC( to, tp.tv_sec + pTimeout->Seconds,
+ tp.tv_usec * 1000 + pTimeout->Nanosec );
+
+ /* spurious wake up prevention */
+ do
+ {
+ const int ret = pthread_cond_timedwait(&pCond->m_Condition, &pCond->m_Lock, &to);
+ if ( ret != 0 )
+ {
+ if ( ret == ETIME || ret == ETIMEDOUT )
+ {
+ nRet = pthread_mutex_unlock(&pCond->m_Lock);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) );
+
+ return osl_cond_result_timeout;
+ }
+ if ( ret != EINTR )
+ {
+ nRet = pthread_mutex_unlock(&pCond->m_Lock);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) );
+ return osl_cond_result_error;
+ }
+ }
+ }
+ while ( !pCond->m_State );
+ }
+ }
+ else
+ {
+ while ( !pCond->m_State )
+ {
+ nRet = pthread_cond_wait(&pCond->m_Condition, &pCond->m_Lock);
+ if ( nRet != 0 )
+ {
+ SAL_WARN( "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_cond_wait failed: " << UnixErrnoString(nRet) );
+ nRet = pthread_mutex_unlock(&pCond->m_Lock);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) );
+
+ return osl_cond_result_error;
+ }
+ }
+ }
+
+ nRet = pthread_mutex_unlock(&pCond->m_Lock);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) );
+
+ SAL_INFO( "sal.osl.condition", "osl_waitCondition(" << pCond << "): OK" );
+
+ return osl_cond_result_ok;
+}
+
+sal_Bool SAL_CALL osl_checkCondition(oslCondition Condition)
+{
+ bool State;
+ oslConditionImpl* pCond;
+ int nRet=0;
+
+ assert(Condition);
+ pCond = static_cast<oslConditionImpl*>(Condition);
+
+ nRet = pthread_mutex_lock(&pCond->m_Lock);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_checkCondition(" << pCond << "): pthread_mutex_lock failed: " << UnixErrnoString(nRet) );
+
+ State = pCond->m_State;
+
+ nRet = pthread_mutex_unlock(&pCond->m_Lock);
+ SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_checkCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) );
+
+ SAL_INFO( "sal.osl.condition", "osl_checkCondition(" << pCond << "): " << (State ? "YES" : "NO") );
+
+ return State;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/createfilehandlefromfd.hxx b/sal/osl/unx/createfilehandlefromfd.hxx
new file mode 100644
index 000000000..bb8a768ef
--- /dev/null
+++ b/sal/osl/unx/createfilehandlefromfd.hxx
@@ -0,0 +1,24 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_CREATEFILEHANDLEFROMFD_HXX
+#define INCLUDED_SAL_OSL_UNX_CREATEFILEHANDLEFROMFD_HXX
+
+#include <sal/config.h>
+
+#include <osl/file.h>
+
+namespace osl::detail
+{
+oslFileHandle createFileHandleFromFD(int fd); // defined in file.cxx
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file.cxx b/sal/osl/unx/file.cxx
new file mode 100644
index 000000000..ac93ffacd
--- /dev/null
+++ b/sal/osl/unx/file.cxx
@@ -0,0 +1,1606 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_features.h>
+#include <o3tl/safeint.hxx>
+#include <o3tl/string_view.hxx>
+#include <o3tl/typed_flags_set.hxx>
+#include <sal/log.hxx>
+#include <osl/diagnose.h>
+#include <osl/file.hxx>
+#include <osl/detail/file.h>
+#include <rtl/alloc.h>
+#include <rtl/byteseq.hxx>
+#include <rtl/string.hxx>
+
+#include "system.hxx"
+#include "createfilehandlefromfd.hxx"
+#include "file_error_transl.hxx"
+#include "file_impl.hxx"
+#include "file_url.hxx"
+#include "uunxapi.hxx"
+#include "unixerrnostring.hxx"
+
+#include <algorithm>
+#include <atomic>
+#include <vector>
+#include <cassert>
+#include <limits>
+
+#include <string.h>
+#include <pthread.h>
+#include <sys/mman.h>
+
+#if defined(MACOSX)
+
+#include <sys/param.h>
+#include <sys/mount.h>
+#define HAVE_O_EXLOCK
+
+#include <CoreFoundation/CoreFoundation.h>
+
+#endif /* MACOSX */
+
+#ifdef ANDROID
+#include <osl/detail/android-bootstrap.h>
+#include <android/log.h>
+#include <android/asset_manager.h>
+#endif
+
+namespace {
+
+enum class State
+{
+ Seekable = 1, /*< default */
+ Readable = 2, /*< default */
+ Writeable = 4, /*< open() sets, write() requires, else osl_File_E_BADF */
+ Modified = 8 /*< write() sets, flush() resets */
+};
+
+}
+
+template<> struct o3tl::typed_flags<State>: o3tl::is_typed_flags<State, 15> {};
+
+namespace {
+
+struct FileHandle_Impl
+{
+ pthread_mutex_t m_mutex;
+ OString m_strFilePath; /*< holds native file path */
+ int m_fd;
+
+ enum Kind
+ {
+ KIND_FD = 1,
+ KIND_MEM = 2
+ };
+ int m_kind;
+ /** State
+ */
+ State m_state;
+
+ sal_uInt64 m_size; /*< file size */
+ off_t m_offset; /*< physical offset from begin of file */
+ // m_fileptr is hit hard in some situations, where the overhead of a mutex starts to show up, so use an atomic
+ std::atomic<off_t> m_fileptr; /*< logical offset from begin of file */
+
+ off_t m_bufptr; /*< buffer offset from begin of file */
+ size_t m_buflen; /*< buffer filled [0, m_bufsiz - 1] */
+
+ size_t m_bufsiz;
+ sal_uInt8 * m_buffer;
+#ifdef ANDROID
+ rtl_String* m_memstreambuf; /*< used for in-memory streams */
+#endif
+
+ explicit FileHandle_Impl(int fd, Kind kind = KIND_FD, OString path = "<anon>");
+ ~FileHandle_Impl();
+
+ static size_t getpagesize();
+
+ sal_uInt64 getPos() const;
+ void setPos(sal_uInt64 uPos);
+
+ sal_uInt64 getSize() const;
+ oslFileError setSize(sal_uInt64 uSize);
+
+ oslFileError readAt(
+ off_t nOffset,
+ void* pBuffer,
+ size_t nBytesRequested,
+ sal_uInt64* pBytesRead);
+
+ oslFileError writeAt(
+ off_t nOffset,
+ void const* pBuffer,
+ size_t nBytesToWrite,
+ sal_uInt64* pBytesWritten);
+
+ oslFileError readFileAt(
+ off_t nOffset,
+ void* pBuffer,
+ size_t nBytesRequested,
+ sal_uInt64* pBytesRead);
+
+ oslFileError writeFileAt(
+ off_t nOffset,
+ void const* pBuffer,
+ size_t nBytesToWrite,
+ sal_uInt64* pBytesWritten);
+
+ oslFileError readLineAt(
+ off_t nOffset,
+ sal_Sequence** ppSequence,
+ sal_uInt64* pBytesRead);
+
+ static oslFileError writeSequence_Impl(
+ sal_Sequence** ppSequence,
+ size_t* pnOffset,
+ const void* pBuffer,
+ size_t nBytes);
+
+ oslFileError syncFile();
+
+ class Guard
+ {
+ pthread_mutex_t *m_mutex;
+
+ public:
+ explicit Guard(pthread_mutex_t *pMutex);
+ ~Guard();
+ };
+};
+
+}
+
+FileHandle_Impl::Guard::Guard(pthread_mutex_t * pMutex)
+ : m_mutex(pMutex)
+{
+ assert(m_mutex);
+ (void) pthread_mutex_lock(m_mutex); // ignoring EINVAL if a null mutex is passed ...
+}
+
+FileHandle_Impl::Guard::~Guard()
+{
+ assert(m_mutex);
+ (void) pthread_mutex_unlock(m_mutex);
+}
+
+FileHandle_Impl::FileHandle_Impl(int fd, enum Kind kind, OString path)
+ : m_strFilePath(std::move(path)),
+ m_fd (fd),
+ m_kind (kind),
+ m_state (State::Seekable | State::Readable),
+ m_size (0),
+ m_offset (0),
+ m_fileptr (0),
+ m_bufptr (-1),
+ m_buflen (0),
+ m_bufsiz (0),
+ m_buffer (nullptr)
+{
+ (void) pthread_mutex_init(&m_mutex, nullptr);
+ if (m_kind == KIND_FD)
+ {
+ size_t const pagesize = getpagesize();
+ if (pagesize != size_t(-1))
+ {
+ m_bufsiz = pagesize;
+ m_buffer = static_cast<sal_uInt8 *>(malloc(m_bufsiz));
+ if (m_buffer)
+ memset(m_buffer, 0, m_bufsiz);
+ }
+ }
+}
+
+FileHandle_Impl::~FileHandle_Impl()
+{
+ if (m_kind == KIND_FD)
+ {
+ free(m_buffer);
+ m_buffer = nullptr;
+ }
+
+ (void) pthread_mutex_destroy(&m_mutex); // ignoring EBUSY ...
+}
+
+size_t FileHandle_Impl::getpagesize()
+{
+ return sal::static_int_cast< size_t >(::sysconf(_SC_PAGESIZE));
+}
+
+sal_uInt64 FileHandle_Impl::getPos() const
+{
+ return sal::static_int_cast< sal_uInt64 >(m_fileptr.load());
+}
+
+void FileHandle_Impl::setPos(sal_uInt64 uPos)
+{
+ m_fileptr = sal::static_int_cast< off_t >(uPos);
+}
+
+sal_uInt64 FileHandle_Impl::getSize() const
+{
+ off_t const bufend = std::max(off_t(0), m_bufptr) + m_buflen;
+ return std::max(m_size, sal::static_int_cast< sal_uInt64 >(bufend));
+}
+
+oslFileError FileHandle_Impl::setSize(sal_uInt64 uSize)
+{
+ off_t const nSize = sal::static_int_cast< off_t >(uSize);
+ if (ftruncate_with_name(m_fd, nSize, m_strFilePath) == -1)
+ {
+ /* Failure. Save original result. Try fallback algorithm */
+ oslFileError result = oslTranslateFileError(errno);
+
+ /* Check against current size. Fail upon 'shrink' */
+ if (uSize <= getSize())
+ {
+ /* Failure upon 'shrink'. Return original result */
+ return result;
+ }
+
+ /* Save current position */
+ off_t const nCurPos = lseek(m_fd, off_t(0), SEEK_CUR);
+ if (nCurPos == off_t(-1))
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "lseek(" << m_fd << ",0,SEEK_CUR): " << UnixErrnoString(e));
+ return result;
+ }
+ else
+ SAL_INFO("sal.file", "lseek(" << m_fd << ",0,SEEK_CUR): OK");
+
+ /* Try 'expand' via 'lseek()' and 'write()' */
+ if (lseek(m_fd, static_cast<off_t>(nSize - 1), SEEK_SET) == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "lseek(" << m_fd << "," << nSize - 1 << ",SEEK_SET): " << UnixErrnoString(e));
+ return result;
+ }
+ else
+ SAL_INFO("sal.file", "lseek(" << m_fd << "," << nSize - 1 << ",SEEK_SET): OK");
+
+ if (write(m_fd, "", size_t(1)) == -1)
+ {
+ /* Failure. Restore saved position */
+ int e = errno;
+ SAL_INFO("sal.file", "write(" << m_fd << ",\"\",1): " << UnixErrnoString(e));
+ (void) lseek(m_fd, nCurPos, SEEK_SET);
+ return result;
+ }
+ else
+ SAL_INFO("sal.file", "write(" << m_fd << ",\"\",1): OK");
+
+ /* Success. Restore saved position */
+ if (lseek(m_fd, nCurPos, SEEK_SET) == -1)
+ return result;
+ }
+
+ m_size = sal::static_int_cast< sal_uInt64 >(nSize);
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::readAt(
+ off_t nOffset,
+ void * pBuffer,
+ size_t nBytesRequested,
+ sal_uInt64 * pBytesRead)
+{
+ SAL_WARN_IF(!(m_state & State::Seekable), "sal.osl", "FileHandle_Impl::readAt(): not seekable");
+ if (!(m_state & State::Seekable))
+ return osl_File_E_SPIPE;
+
+ SAL_WARN_IF(!(m_state & State::Readable), "sal.osl", "FileHandle_Impl::readAt(): not readable");
+ if (!(m_state & State::Readable))
+ return osl_File_E_BADF;
+
+ if (m_kind == KIND_MEM)
+ {
+ ssize_t nBytes;
+
+ m_offset = nOffset;
+
+ if (o3tl::make_unsigned(m_offset) >= m_size)
+ {
+ nBytes = 0;
+ }
+ else
+ {
+ nBytes = std::min(nBytesRequested, static_cast<size_t>(m_size - m_offset));
+ memmove(pBuffer, m_buffer + m_offset, nBytes);
+ m_offset += nBytes;
+ }
+ *pBytesRead = nBytes;
+ return osl_File_E_None;
+ }
+
+ ssize_t nBytes = ::pread(m_fd, pBuffer, nBytesRequested, nOffset);
+ if ((nBytes == -1) && (errno == EOVERFLOW))
+ {
+ /* Some 'pread()'s fail with EOVERFLOW when reading at (or past)
+ * end-of-file, different from 'lseek() + read()' behaviour.
+ * Returning '0 bytes read' and 'osl_File_E_None' instead.
+ */
+ nBytes = 0;
+ }
+
+ if (nBytes == -1)
+ return oslTranslateFileError(errno);
+
+ *pBytesRead = nBytes;
+
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::writeAt(
+ off_t nOffset,
+ void const * pBuffer,
+ size_t nBytesToWrite,
+ sal_uInt64 * pBytesWritten)
+{
+ SAL_WARN_IF(!(m_state & State::Seekable), "sal.osl", "FileHandle_Impl::writeAt(): not seekable");
+ if (!(m_state & State::Seekable))
+ return osl_File_E_SPIPE;
+
+ SAL_WARN_IF(!(m_state & State::Writeable), "sal.osl", "FileHandle_Impl::writeAt(): not writeable");
+ if (!(m_state & State::Writeable))
+ return osl_File_E_BADF;
+
+ ssize_t nBytes = ::pwrite(m_fd, pBuffer, nBytesToWrite, nOffset);
+ if (nBytes == -1)
+ return oslTranslateFileError(errno);
+
+ m_size = std::max(m_size, sal::static_int_cast< sal_uInt64 >(nOffset + nBytes));
+
+ *pBytesWritten = nBytes;
+
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::readFileAt(
+ off_t nOffset,
+ void* pBuffer,
+ size_t nBytesRequested,
+ sal_uInt64* pBytesRead)
+{
+ if (!(m_state & State::Seekable))
+ {
+ // not seekable (pipe)
+ ssize_t nBytes = ::read(m_fd, pBuffer, nBytesRequested);
+ if (nBytes == -1)
+ return oslTranslateFileError(errno);
+
+ *pBytesRead = nBytes;
+
+ return osl_File_E_None;
+ }
+
+ if (m_kind == KIND_MEM || !m_buffer)
+ {
+ // not buffered
+ return readAt(nOffset, pBuffer, nBytesRequested, pBytesRead);
+ }
+
+ sal_uInt8 *buffer = static_cast<sal_uInt8*>(pBuffer);
+ for (*pBytesRead = 0; nBytesRequested > 0; )
+ {
+ off_t const bufptr = (nOffset / m_bufsiz) * m_bufsiz;
+ size_t const bufpos = nOffset % m_bufsiz;
+
+ if (bufptr != m_bufptr)
+ {
+ // flush current buffer
+ oslFileError result = syncFile();
+ if (result != osl_File_E_None)
+ return result;
+
+ m_bufptr = -1;
+ m_buflen = 0;
+
+ if (nBytesRequested >= m_bufsiz)
+ {
+ // buffer too small, read through from file
+ sal_uInt64 uDone = 0;
+ result = readAt(nOffset, &(buffer[*pBytesRead]), nBytesRequested, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ *pBytesRead += uDone;
+
+ return osl_File_E_None;
+ }
+
+ // update buffer (pointer)
+ sal_uInt64 uDone = 0;
+ result = readAt(bufptr, m_buffer, m_bufsiz, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ m_bufptr = bufptr;
+ m_buflen = uDone;
+ }
+
+ if (bufpos >= m_buflen)
+ {
+ // end of file
+ return osl_File_E_None;
+ }
+
+ size_t const bytes = std::min(m_buflen - bufpos, nBytesRequested);
+ SAL_INFO("sal.fileio", "FileHandle_Impl::readFileAt(" << m_fd << ", " << nOffset << ", " << bytes << ")");
+
+ memcpy(&(buffer[*pBytesRead]), &(m_buffer[bufpos]), bytes);
+ nBytesRequested -= bytes;
+ *pBytesRead += bytes;
+ nOffset += bytes;
+ }
+
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::writeFileAt(
+ off_t nOffset,
+ void const * pBuffer,
+ size_t nBytesToWrite,
+ sal_uInt64 * pBytesWritten)
+{
+ if (!(m_state & State::Seekable))
+ {
+ // not seekable (pipe)
+ ssize_t nBytes = ::write(m_fd, pBuffer, nBytesToWrite);
+ if (nBytes == -1)
+ return oslTranslateFileError(errno);
+
+ *pBytesWritten = nBytes;
+
+ return osl_File_E_None;
+ }
+ if (!m_buffer)
+ {
+ // not buffered
+ return writeAt(nOffset, pBuffer, nBytesToWrite, pBytesWritten);
+ }
+
+ sal_uInt8 const * buffer = static_cast<sal_uInt8 const *>(pBuffer);
+ for (*pBytesWritten = 0; nBytesToWrite > 0;)
+ {
+ off_t const bufptr = (nOffset / m_bufsiz) * m_bufsiz;
+ size_t const bufpos = nOffset % m_bufsiz;
+ if (bufptr != m_bufptr)
+ {
+ // flush current buffer
+ oslFileError result = syncFile();
+ if (result != osl_File_E_None)
+ return result;
+ m_bufptr = -1;
+ m_buflen = 0;
+
+ if (nBytesToWrite >= m_bufsiz)
+ {
+ // buffer too small, write through to file
+ sal_uInt64 uDone = 0;
+ result = writeAt(nOffset, &(buffer[*pBytesWritten]), nBytesToWrite, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ if (uDone != nBytesToWrite)
+ return osl_File_E_IO;
+
+ *pBytesWritten += uDone;
+
+ return osl_File_E_None;
+ }
+
+ // update buffer (pointer)
+ sal_uInt64 uDone = 0;
+ result = readAt(bufptr, m_buffer, m_bufsiz, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ m_bufptr = bufptr;
+ m_buflen = uDone;
+ }
+
+ size_t const bytes = std::min(m_bufsiz - bufpos, nBytesToWrite);
+ SAL_INFO("sal.fileio", "FileHandle_Impl::writeFileAt(" << m_fd << ", " << nOffset << ", " << bytes << ")");
+
+ memcpy(&(m_buffer[bufpos]), &(buffer[*pBytesWritten]), bytes);
+ nBytesToWrite -= bytes;
+ *pBytesWritten += bytes;
+ nOffset += bytes;
+
+ m_buflen = std::max(m_buflen, bufpos + bytes);
+ m_state |= State::Modified;
+ }
+
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::readLineAt(
+ off_t nOffset,
+ sal_Sequence ** ppSequence,
+ sal_uInt64 * pBytesRead)
+{
+ oslFileError result = osl_File_E_None;
+
+ off_t bufptr = nOffset / m_bufsiz * m_bufsiz;
+ if (bufptr != m_bufptr)
+ {
+ /* flush current buffer */
+ result = syncFile();
+ if (result != osl_File_E_None)
+ return result;
+
+ /* update buffer (pointer) */
+ sal_uInt64 uDone = 0;
+ result = readAt(bufptr, m_buffer, m_bufsiz, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ m_bufptr = bufptr;
+ m_buflen = uDone;
+ }
+
+ static int const LINE_STATE_BEGIN = 0;
+ static int const LINE_STATE_CR = 1;
+ static int const LINE_STATE_LF = 2;
+
+ size_t bufpos = nOffset - m_bufptr, curpos = bufpos, dstpos = 0;
+ int state = (bufpos >= m_buflen) ? LINE_STATE_LF : LINE_STATE_BEGIN;
+
+ while (state != LINE_STATE_LF)
+ {
+ if (curpos >= m_buflen)
+ {
+ /* buffer examined */
+ if ((curpos - bufpos) > 0)
+ {
+ /* flush buffer to sequence */
+ result = writeSequence_Impl(
+ ppSequence, &dstpos, &(m_buffer[bufpos]), curpos - bufpos);
+ if (result != osl_File_E_None)
+ return result;
+
+ *pBytesRead += curpos - bufpos;
+ nOffset += curpos - bufpos;
+ }
+
+ bufptr = nOffset / m_bufsiz * m_bufsiz;
+ if (bufptr != m_bufptr)
+ {
+ /* update buffer (pointer) */
+ sal_uInt64 uDone = 0;
+ result = readAt(bufptr, m_buffer, m_bufsiz, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ m_bufptr = bufptr;
+ m_buflen = uDone;
+ }
+
+ bufpos = nOffset - m_bufptr;
+ curpos = bufpos;
+ if (bufpos >= m_buflen)
+ break;
+ }
+
+ switch (state)
+ {
+ case LINE_STATE_CR:
+ state = LINE_STATE_LF;
+ switch (m_buffer[curpos])
+ {
+ case 0x0A: /* CRLF */
+ /* eat current char */
+ curpos++;
+ break;
+ default: /* single CR */
+ /* keep current char */
+ break;
+ }
+ break;
+ default:
+ /* determine next state */
+ switch (m_buffer[curpos])
+ {
+ case 0x0A: /* single LF */
+ state = LINE_STATE_LF;
+ break;
+ case 0x0D: /* CR */
+ state = LINE_STATE_CR;
+ break;
+ default: /* advance to next char */
+ curpos++;
+ break;
+ }
+ if (state != LINE_STATE_BEGIN)
+ {
+ /* skip the newline char */
+ curpos++;
+
+ /* flush buffer to sequence */
+ result = writeSequence_Impl(
+ ppSequence, &dstpos, &(m_buffer[bufpos]), curpos - bufpos - 1);
+ if (result != osl_File_E_None)
+ return result;
+
+ *pBytesRead += curpos - bufpos;
+ nOffset += curpos - bufpos;
+ }
+ break;
+ }
+ }
+
+ result = writeSequence_Impl(ppSequence, &dstpos, nullptr, 0);
+ if (result != osl_File_E_None)
+ return result;
+
+ if (dstpos > 0)
+ return osl_File_E_None;
+
+ if (bufpos >= m_buflen)
+ return osl_File_E_AGAIN;
+
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::writeSequence_Impl(
+ sal_Sequence ** ppSequence,
+ size_t * pnOffset,
+ const void * pBuffer,
+ size_t nBytes)
+{
+ sal_Int32 nElements = *pnOffset + nBytes;
+ if (!*ppSequence)
+ {
+ /* construct sequence */
+ rtl_byte_sequence_constructNoDefault(ppSequence, nElements);
+ }
+ else if (nElements != (*ppSequence)->nElements)
+ {
+ /* resize sequence */
+ rtl_byte_sequence_realloc(ppSequence, nElements);
+ }
+
+ if (*ppSequence && nBytes != 0)
+ {
+ /* fill sequence */
+ memcpy(&((*ppSequence)->elements[*pnOffset]), pBuffer, nBytes);
+ *pnOffset += nBytes;
+ }
+
+ return (*ppSequence) ? osl_File_E_None : osl_File_E_NOMEM;
+}
+
+oslFileError FileHandle_Impl::syncFile()
+{
+ oslFileError result = osl_File_E_None;
+ if (m_state & State::Modified)
+ {
+ sal_uInt64 uDone = 0;
+ result = writeAt(m_bufptr, m_buffer, m_buflen, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ if (uDone != m_buflen)
+ return osl_File_E_IO;
+
+ m_state &= ~State::Modified;
+ }
+
+ return result;
+}
+
+oslFileHandle osl::detail::createFileHandleFromFD(int fd)
+{
+ if (fd == -1)
+ return nullptr; // EINVAL
+
+ struct stat aFileStat;
+ if (fstat(fd, &aFileStat) == -1)
+ return nullptr; // EBADF
+
+ FileHandle_Impl *pImpl = new FileHandle_Impl(fd);
+
+ // assume writeable
+ pImpl->m_state |= State::Writeable;
+ if (!S_ISREG(aFileStat.st_mode))
+ {
+ /* not a regular file, mark not seekable */
+ pImpl->m_state &= ~State::Seekable;
+ }
+ else
+ {
+ /* regular file, init current size */
+ pImpl->m_size = sal::static_int_cast< sal_uInt64 >(aFileStat.st_size);
+ }
+
+ SAL_INFO("sal.file", "osl::detail::createFileHandleFromFD(" << pImpl->m_fd << ", writeable) => " << pImpl->m_strFilePath);
+
+ return static_cast<oslFileHandle>(pImpl);
+}
+
+static int osl_file_adjustLockFlags(const OString& path, int flags)
+{
+#ifdef MACOSX
+ /*
+ * The AFP implementation of MacOS X 10.4 treats O_EXLOCK in a way
+ * that makes it impossible for OOo to create a backup copy of the
+ * file it keeps opened. OTOH O_SHLOCK for AFP behaves as desired by
+ * the OOo file handling, so we need to check the path of the file
+ * for the filesystem name.
+ */
+ struct statfs s;
+ if(statfs(path.getStr(), &s) >= 0)
+ {
+ if(strncmp("afpfs", s.f_fstypename, 5) == 0)
+ {
+ flags &= ~O_EXLOCK;
+ flags |= O_SHLOCK;
+ }
+ else
+ {
+ /* Needed flags to allow opening a webdav file */
+ flags &= ~(O_EXLOCK | O_SHLOCK | O_NONBLOCK);
+ }
+ }
+#else
+ (void) path;
+#endif
+
+ return flags;
+}
+
+static bool osl_file_queryLocking(sal_uInt32 uFlags)
+{
+#if !defined HAVE_O_EXLOCK
+ if (!(uFlags & osl_File_OpenFlag_NoLock)
+ && ((uFlags & osl_File_OpenFlag_Write)
+ || (uFlags & osl_File_OpenFlag_Create)))
+ {
+ static bool enabled = getenv("SAL_ENABLE_FILE_LOCKING") != nullptr;
+ // getenv is not thread safe, so minimize use of result
+ return enabled;
+ }
+#else
+ (void) uFlags;
+#endif
+ return false;
+}
+
+#ifdef HAVE_O_EXLOCK
+#define OPEN_WRITE_FLAGS ( O_RDWR | O_EXLOCK | O_NONBLOCK )
+#define OPEN_CREATE_FLAGS ( O_CREAT | O_RDWR | O_EXLOCK | O_NONBLOCK )
+#else
+#define OPEN_WRITE_FLAGS ( O_RDWR )
+#define OPEN_CREATE_FLAGS ( O_CREAT | O_RDWR )
+#endif
+
+#if defined ANDROID
+
+namespace {
+
+static oslFileError openMemoryAsFile(const OString &rData,
+ oslFileHandle *pHandle,
+ const OString& path)
+{
+ const char *address = rData.getStr();
+ size_t size = rData.getLength();
+
+ FileHandle_Impl *pImpl = new FileHandle_Impl(-1, FileHandle_Impl::KIND_MEM, path);
+ pImpl->m_size = sal::static_int_cast< sal_uInt64 >(size);
+
+ *pHandle = (oslFileHandle)(pImpl);
+
+ pImpl->m_bufptr = 0;
+ pImpl->m_buflen = size;
+ pImpl->m_memstreambuf = rData.pData;
+ rtl_string_acquire(pImpl->m_memstreambuf);
+
+ pImpl->m_bufsiz = size;
+ pImpl->m_buffer = reinterpret_cast<sal_uInt8*>(const_cast<char *>(address));
+
+ return osl_File_E_None;
+}
+
+/*
+ * Reading files from /assets/ on Android via a transition into the VM
+ * shows on profiles and is rather slow; so we cache small files as
+ * used by UNO, UI-builder etc.
+ */
+class AndroidFileCache {
+public:
+ struct Entry {
+ OString maFilePath;
+ OString maData;
+ };
+ AndroidFileCache(size_t nElements)
+ : mnCur(0)
+ {
+ maEntries.resize(nElements);
+ assert (maEntries.size() == nElements);
+ }
+ Entry *find(const char *cpFilePath)
+ {
+ for (auto &it : maEntries)
+ {
+ if (!strcmp(it.maFilePath.getStr(), cpFilePath))
+ return &it;
+ }
+ return nullptr;
+ }
+ // no clever LRU - but - good enough for now.
+ void insert(const char *cpFilePath, OString &rData)
+ {
+ assert (maEntries.size() > 0);
+ if (++mnCur >= maEntries.size())
+ mnCur = 0;
+ maEntries[mnCur].maFilePath = OString(cpFilePath, strlen(cpFilePath));
+ maEntries[mnCur].maData = rData;
+ }
+ static AndroidFileCache &getHitCache()
+ {
+ static AndroidFileCache *pCache = new AndroidFileCache(16);
+ return *pCache;
+ }
+ static AndroidFileCache &getMissCache()
+ {
+ static AndroidFileCache *pCache = new AndroidFileCache(32);
+ return *pCache;
+ }
+private:
+ size_t mnCur;
+ std::vector<Entry> maEntries;
+};
+
+} // namespace
+
+#endif
+
+oslFileError openFilePath(const OString& filePath, oslFileHandle* pHandle,
+ sal_uInt32 uFlags, mode_t mode)
+{
+ oslFileError eRet;
+
+#ifdef ANDROID
+ /* Opening a file from /assets read-only means
+ * we should mmap it from the .apk file
+ */
+ if (o3tl::starts_with(filePath, "/assets/"))
+ {
+ OString aData;
+ bool bCache = true;
+
+ const char *cpAssetsPath = filePath.getStr() + sizeof("/assets/") - 1;
+ // some requests are /assets//foo...
+ if (cpAssetsPath[0] == '/')
+ {
+ __android_log_print(ANDROID_LOG_DEBUG,"libo:sal/osl/unx/file", "double-slash in path: %s", filePath.getStr());
+ cpAssetsPath++;
+ }
+
+ AndroidFileCache::Entry *pHit = AndroidFileCache::getHitCache().find(cpAssetsPath);
+ if (pHit)
+ aData = pHit->maData;
+
+ else
+ {
+ bCache = false;
+ AndroidFileCache::Entry *pMiss = AndroidFileCache::getMissCache().find(cpAssetsPath);
+ if (pMiss)
+ {
+ errno = ENOENT;
+ __android_log_print(ANDROID_LOG_ERROR,"libo:sal/osl/unx/file", "miss cache: failed to open %s", filePath.getStr());
+ return osl_File_E_NOENT;
+ }
+ AAssetManager* mgr = lo_get_native_assetmgr();
+ AAsset* asset = AAssetManager_open(mgr, cpAssetsPath, AASSET_MODE_BUFFER);
+ if (!asset)
+ {
+ AndroidFileCache::getMissCache().insert(cpAssetsPath, aData);
+ errno = ENOENT;
+ __android_log_print(ANDROID_LOG_ERROR,"libo:sal/osl/unx/file", "failed to open %s", filePath.getStr());
+ return osl_File_E_NOENT;
+ }
+ else
+ {
+ rtl_String *pData = nullptr;
+ size_t size = AAsset_getLength(asset);
+ rtl_string_new_WithLength(&pData, size);
+ pData->length = size;
+ AAsset_read(asset, pData->buffer, size);
+ AAsset_close(asset);
+
+ aData = OString(pData, SAL_NO_ACQUIRE);
+
+ if (pData->length < 50 * 1024)
+ AndroidFileCache::getHitCache().insert(cpAssetsPath, aData);
+ }
+ }
+
+ if (uFlags & osl_File_OpenFlag_Write)
+ {
+ // It seems to work better to silently "open" it read-only
+ // and let write attempts, if any, fail later. Otherwise
+ // loading a document from /assets fails with that idiotic
+ // "General Error" dialog...
+ }
+ SAL_INFO("sal.file", "osl_openFile(" << filePath << ") => '" << cpAssetsPath << "'"
+ << aData.getLength() << " bytes from file " << (bCache ? "cache" : "system"));
+ return openMemoryAsFile(aData, pHandle, filePath);
+ }
+#endif
+
+ /* set mode and flags */
+ int defmode = (uFlags & osl_File_OpenFlag_Private) ? S_IRUSR : S_IRUSR | S_IRGRP | S_IROTH;
+ int flags = O_RDONLY;
+
+ if (uFlags & osl_File_OpenFlag_Write)
+ {
+ defmode |= (uFlags & osl_File_OpenFlag_Private) ? S_IWUSR : S_IWUSR | S_IWGRP | S_IWOTH;
+ flags = OPEN_WRITE_FLAGS;
+ }
+
+ if (uFlags & osl_File_OpenFlag_Create)
+ {
+ defmode |= (uFlags & osl_File_OpenFlag_Private) ? S_IWUSR : S_IWUSR | S_IWGRP | S_IWOTH;
+ flags = OPEN_CREATE_FLAGS;
+ }
+
+ if (mode == mode_t(-1))
+ mode = defmode;
+
+ /* Check for flags passed in from SvFileStream::Open() */
+ if (uFlags & osl_File_OpenFlag_Trunc)
+ flags |= O_TRUNC;
+
+ if (!(uFlags & osl_File_OpenFlag_NoExcl))
+ flags |= O_EXCL;
+
+ if (uFlags & osl_File_OpenFlag_NoLock)
+ {
+#ifdef HAVE_O_EXLOCK
+ flags &= ~(O_EXLOCK | O_SHLOCK | O_NONBLOCK);
+#endif /* HAVE_O_EXLOCK */
+ }
+ else
+ {
+ flags = osl_file_adjustLockFlags (filePath, flags);
+ }
+
+ // O_EXCL can be set only when O_CREAT is set
+ if (flags & O_EXCL && !(flags & O_CREAT))
+ flags &= ~O_EXCL;
+
+ /* open the file */
+ int fd = open_c( filePath, flags, mode );
+ if (fd == -1)
+ {
+ return oslTranslateFileError(errno);
+ }
+
+#if !HAVE_FEATURE_MACOSX_SANDBOX
+ /* reset O_NONBLOCK flag */
+ if (flags & O_NONBLOCK)
+ {
+ int f = fcntl(fd, F_GETFL, 0);
+ if (f == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "fcntl(" << fd << ",F_GETFL,0): " << UnixErrnoString(e));
+ eRet = oslTranslateFileError(e);
+ (void) close(fd);
+ SAL_INFO("sal.file", "close(" << fd << ")");
+ return eRet;
+ }
+ else
+ SAL_INFO("sal.file", "fcntl(" << fd << ",F_GETFL,0): OK");
+
+ if (fcntl(fd, F_SETFL, (f & ~O_NONBLOCK)) == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "fcntl(" << fd << ",F_SETFL,(f & ~O_NONBLOCK)): " << UnixErrnoString(e));
+ eRet = oslTranslateFileError(e);
+ (void) close(fd);
+ SAL_INFO("sal.file", "close(" << fd << ")");
+ return eRet;
+ }
+ else
+ SAL_INFO("sal.file", "fcntl(" << fd << ",F_SETFL,(f & ~O_NONBLOCK)): OK");
+ }
+#endif
+
+ /* get file status (mode, size) */
+ struct stat aFileStat;
+ if (fstat(fd, &aFileStat) == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "fstat(" << fd << "): " << UnixErrnoString(e));
+ eRet = oslTranslateFileError(e);
+ (void) close(fd);
+ SAL_INFO("sal.file", "close(" << fd << ")");
+ return eRet;
+ }
+ else
+ SAL_INFO("sal.file", "fstat(" << fd << "): OK");
+
+ if (!S_ISREG(aFileStat.st_mode))
+ {
+ /* we only open regular files here */
+ SAL_INFO("sal.file", "osl_openFile(" << filePath << "): not a regular file");
+ (void) close(fd);
+ SAL_INFO("sal.file", "close(" << fd << ")");
+ return osl_File_E_INVAL;
+ }
+
+ if (osl_file_queryLocking(uFlags))
+ {
+#ifdef MACOSX
+ if (flock(fd, LOCK_EX | LOCK_NB) == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "flock(" << fd << ",LOCK_EX|LOCK_NB): " << UnixErrnoString(e));
+ /* Mac OSX returns ENOTSUP for webdav drives. We should try read lock */
+
+ // Restore errno after possibly having been overwritten by the SAL_INFO above...
+ errno = e;
+ if ((errno != ENOTSUP) || ((flock(fd, LOCK_SH | LOCK_NB) == 1) && (errno != ENOTSUP)))
+ {
+ eRet = oslTranslateFileError(errno);
+ (void) close(fd);
+ SAL_INFO("sal.file", "close(" << fd << ")");
+ return eRet;
+ }
+ }
+ else
+ SAL_INFO("sal.file", "flock(" << fd << ",LOCK_EX|LOCK_NB): OK");
+#else /* F_SETLK */
+ struct flock aflock;
+
+ aflock.l_type = F_WRLCK;
+ aflock.l_whence = SEEK_SET;
+ aflock.l_start = 0;
+ aflock.l_len = 0;
+
+ if (fcntl(fd, F_SETLK, &aflock) == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "fcntl(" << fd << ",F_SETLK): " << UnixErrnoString(e));
+ eRet = oslTranslateFileError(e);
+ (void) close(fd);
+ SAL_INFO("sal.file", "close(" << fd << ")");
+ return eRet;
+ }
+#endif /* F_SETLK */
+ }
+
+ /* allocate memory for impl structure */
+ FileHandle_Impl *pImpl = new FileHandle_Impl(fd, FileHandle_Impl::KIND_FD, filePath);
+ if (flags & O_RDWR)
+ pImpl->m_state |= State::Writeable;
+
+ pImpl->m_size = sal::static_int_cast< sal_uInt64 >(aFileStat.st_size);
+
+ *pHandle = static_cast<oslFileHandle>(pImpl);
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_openFile(rtl_uString* ustrFileURL, oslFileHandle* pHandle, sal_uInt32 uFlags)
+{
+ return openFile(ustrFileURL, pHandle, uFlags, mode_t(-1));
+}
+
+oslFileError openFile(rtl_uString* ustrFileURL, oslFileHandle* pHandle, sal_uInt32 uFlags, mode_t mode)
+{
+ oslFileError eRet;
+
+ if ((!ustrFileURL) || (ustrFileURL->length == 0) || (!pHandle))
+ return osl_File_E_INVAL;
+
+ /* convert file URL to system path */
+ char buffer[PATH_MAX];
+ eRet = FileURLToPath(buffer, sizeof(buffer), ustrFileURL);
+ if (eRet != osl_File_E_None)
+ return eRet;
+
+#ifdef MACOSX
+ if (macxp_resolveAlias(buffer, sizeof(buffer)) != 0)
+ return oslTranslateFileError(errno);
+#endif /* MACOSX */
+
+ return openFilePath(buffer, pHandle, uFlags, mode);
+}
+
+oslFileError SAL_CALL osl_closeFile(oslFileHandle Handle)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if (!pImpl)
+ return osl_File_E_INVAL;
+
+ if (pImpl->m_kind == FileHandle_Impl::KIND_MEM)
+ {
+#ifdef ANDROID
+ rtl_string_release(pImpl->m_memstreambuf);
+ pImpl->m_memstreambuf = nullptr;
+
+ pImpl->m_buffer = NULL;
+#endif
+ delete pImpl;
+ return osl_File_E_None;
+ }
+
+ if (pImpl->m_fd < 0)
+ return osl_File_E_INVAL;
+
+ (void) pthread_mutex_lock(&(pImpl->m_mutex));
+
+ /* close(2) implicitly (and unconditionally) unlocks */
+ oslFileError result = pImpl->syncFile();
+ if (result != osl_File_E_None)
+ {
+ /* close, ignoring double failure */
+ (void) close(pImpl->m_fd);
+ SAL_INFO("sal.file", "close(" << pImpl->m_fd << ")");
+ }
+ else if (close(pImpl->m_fd) == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "close(" << pImpl->m_fd << "): " << UnixErrnoString(e));
+ /* translate error code */
+ result = oslTranslateFileError(e);
+ }
+ else
+ SAL_INFO("sal.file", "close(" << pImpl->m_fd << "): OK");
+
+ (void) pthread_mutex_unlock(&(pImpl->m_mutex));
+ delete pImpl;
+ return result;
+}
+
+oslFileError SAL_CALL osl_syncFile(oslFileHandle Handle)
+{
+ FileHandle_Impl* pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)))
+ return osl_File_E_INVAL;
+
+ if (pImpl->m_kind == FileHandle_Impl::KIND_MEM)
+ return osl_File_E_None;
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+
+ oslFileError result = pImpl->syncFile();
+
+ if (result != osl_File_E_None)
+ return result;
+
+ if (fsync(pImpl->m_fd) == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "fsync(" << pImpl->m_fd << "): " << UnixErrnoString(e));
+ return oslTranslateFileError(e);
+ }
+ else
+ SAL_INFO("sal.file", "fsync(" << pImpl->m_fd << "): OK");
+
+ return osl_File_E_None;
+}
+
+const off_t MAX_OFF_T = std::numeric_limits< off_t >::max();
+
+namespace {
+
+// coverity[result_independent_of_operands] - crossplatform requirement
+template<typename T> bool exceedsMaxOffT(T n) { return n > MAX_OFF_T; }
+
+// coverity[result_independent_of_operands] - crossplatform requirement
+template<typename T> bool exceedsMinOffT(T n)
+{ return n < std::numeric_limits<off_t>::min(); }
+
+}
+
+oslFileError SAL_CALL osl_mapFile(
+ oslFileHandle Handle,
+ void** ppAddr,
+ sal_uInt64 uLength,
+ sal_uInt64 uOffset,
+ sal_uInt32 uFlags
+)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!ppAddr))
+ return osl_File_E_INVAL;
+
+ *ppAddr = nullptr;
+
+ if (uLength > SAL_MAX_SIZE)
+ return osl_File_E_OVERFLOW;
+
+ size_t const nLength = sal::static_int_cast< size_t >(uLength);
+
+ if (exceedsMaxOffT(uOffset))
+ return osl_File_E_OVERFLOW;
+
+ if (pImpl->m_kind == FileHandle_Impl::KIND_MEM)
+ {
+ *ppAddr = pImpl->m_buffer + uOffset;
+ return osl_File_E_None;
+ }
+
+ off_t const nOffset = sal::static_int_cast< off_t >(uOffset);
+
+ void* p = mmap(nullptr, nLength, PROT_READ, MAP_SHARED, pImpl->m_fd, nOffset);
+
+ if (p == MAP_FAILED)
+ return oslTranslateFileError(errno);
+
+ *ppAddr = p;
+
+ if (uFlags & osl_File_MapFlag_RandomAccess)
+ {
+ // Determine memory pagesize.
+ size_t const nPageSize = FileHandle_Impl::getpagesize();
+ if (nPageSize != size_t(-1))
+ {
+ /*
+ * Pagein, touching first byte of every memory page.
+ * Note: volatile disables optimizing the loop away.
+ */
+ sal_uInt8 volatile *pData(static_cast<sal_uInt8*>(*ppAddr));
+ size_t nSize(nLength);
+
+ while (nSize > nPageSize)
+ {
+ pData[0];
+ pData += nPageSize;
+ nSize -= nPageSize;
+ }
+
+ if (nSize > 0)
+ pData[0];
+ }
+ }
+
+ if (uFlags & osl_File_MapFlag_WillNeed)
+ {
+ // On Linux, madvise(..., MADV_WILLNEED) appears to have the undesirable
+ // effect of not returning until the data has actually been paged in, so
+ // that its net effect would typically be to slow down the process
+ // (which could start processing at the beginning of the data while the
+ // OS simultaneously pages in the rest); on other platforms, it remains
+ // to be evaluated whether madvise or equivalent is available and
+ // actually useful:
+#if defined MACOSX || (defined(__sun) && (!defined(__XOPEN_OR_POSIX) || defined(_XPG6) || defined(__EXTENSIONS__)))
+ int e = posix_madvise(p, nLength, POSIX_MADV_WILLNEED);
+ if (e != 0)
+ SAL_INFO("sal.file", "posix_madvise(..., POSIX_MADV_WILLNEED) failed with " << e);
+
+#elif defined __sun
+ if (madvise(static_cast< caddr_t >(p), nLength, MADV_WILLNEED) != 0)
+ SAL_INFO("sal.file", "madvise(..., MADV_WILLNEED) failed with " << UnixErrnoString(errno));
+#endif
+ }
+
+ return osl_File_E_None;
+}
+
+static oslFileError unmapFile(void* pAddr, sal_uInt64 uLength)
+{
+ if (!pAddr)
+ return osl_File_E_INVAL;
+
+ if (uLength > SAL_MAX_SIZE)
+ return osl_File_E_OVERFLOW;
+
+ size_t const nLength = sal::static_int_cast< size_t >(uLength);
+
+ if (munmap(pAddr, nLength) == -1)
+ return oslTranslateFileError(errno);
+
+ return osl_File_E_None;
+}
+
+#ifndef ANDROID
+
+// Note that osl_unmapFile() just won't work on Android in general
+// where for (uncompressed) files inside the .apk, in the /assets
+// folder osl_mapFile just returns a pointer to the file inside the
+// already mmapped .apk archive.
+
+oslFileError SAL_CALL osl_unmapFile(void* pAddr, sal_uInt64 uLength)
+{
+ return unmapFile(pAddr, uLength);
+}
+
+#endif
+
+oslFileError SAL_CALL osl_unmapMappedFile(oslFileHandle Handle, void* pAddr, sal_uInt64 uLength)
+{
+ FileHandle_Impl *pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if (!pImpl)
+ return osl_File_E_INVAL;
+
+ if (pImpl->m_kind == FileHandle_Impl::KIND_FD)
+ return unmapFile(pAddr, uLength);
+
+ // For parts of already mmapped "parent" files, whose mapping we
+ // can't change, not much we can or should do...
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_readLine(
+ oslFileHandle Handle,
+ sal_Sequence ** ppSequence)
+{
+ FileHandle_Impl *pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!ppSequence))
+ return osl_File_E_INVAL;
+
+ sal_uInt64 uBytesRead = 0;
+
+ // read at current fileptr; fileptr += uBytesRead;
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ oslFileError result = pImpl->readLineAt(pImpl->m_fileptr, ppSequence, &uBytesRead);
+
+ if (result == osl_File_E_None)
+ pImpl->m_fileptr += uBytesRead;
+
+ return result;
+}
+
+oslFileError SAL_CALL osl_readFile(
+ oslFileHandle Handle,
+ void * pBuffer,
+ sal_uInt64 uBytesRequested,
+ sal_uInt64 * pBytesRead)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pBuffer) || (!pBytesRead))
+ return osl_File_E_INVAL;
+
+ static sal_uInt64 const g_limit_ssize_t = std::numeric_limits< ssize_t >::max();
+ if (g_limit_ssize_t < uBytesRequested)
+ return osl_File_E_OVERFLOW;
+
+ size_t const nBytesRequested = sal::static_int_cast< size_t >(uBytesRequested);
+
+ // read at current fileptr; fileptr += *pBytesRead;
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ oslFileError result = pImpl->readFileAt(pImpl->m_fileptr, pBuffer, nBytesRequested, pBytesRead);
+
+ if (result == osl_File_E_None)
+ pImpl->m_fileptr += *pBytesRead;
+
+ return result;
+}
+
+oslFileError SAL_CALL osl_writeFile(
+ oslFileHandle Handle,
+ const void * pBuffer,
+ sal_uInt64 uBytesToWrite,
+ sal_uInt64 * pBytesWritten)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || (pImpl->m_fd == -1) || (!pBuffer) || (!pBytesWritten))
+ return osl_File_E_INVAL;
+
+ if (!(pImpl->m_state & State::Writeable))
+ return osl_File_E_BADF;
+
+ static sal_uInt64 const g_limit_ssize_t = std::numeric_limits< ssize_t >::max();
+ if (g_limit_ssize_t < uBytesToWrite)
+ return osl_File_E_OVERFLOW;
+
+ size_t const nBytesToWrite = sal::static_int_cast< size_t >(uBytesToWrite);
+
+ // write at current fileptr; fileptr += *pBytesWritten;
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ oslFileError result = pImpl->writeFileAt(pImpl->m_fileptr, pBuffer, nBytesToWrite, pBytesWritten);
+ if (result == osl_File_E_None)
+ pImpl->m_fileptr += *pBytesWritten;
+
+ return result;
+}
+
+oslFileError SAL_CALL osl_readFileAt(
+ oslFileHandle Handle,
+ sal_uInt64 uOffset,
+ void* pBuffer,
+ sal_uInt64 uBytesRequested,
+ sal_uInt64* pBytesRead)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pBuffer) || (!pBytesRead))
+ return osl_File_E_INVAL;
+
+ if (!(pImpl->m_state & State::Seekable))
+ return osl_File_E_SPIPE;
+
+ if (exceedsMaxOffT(uOffset))
+ return osl_File_E_OVERFLOW;
+
+ off_t const nOffset = sal::static_int_cast< off_t >(uOffset);
+
+ static sal_uInt64 const g_limit_ssize_t = std::numeric_limits< ssize_t >::max();
+ if (g_limit_ssize_t < uBytesRequested)
+ return osl_File_E_OVERFLOW;
+
+ size_t const nBytesRequested = sal::static_int_cast< size_t >(uBytesRequested);
+
+ // read at specified fileptr
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+
+ return pImpl->readFileAt(nOffset, pBuffer, nBytesRequested, pBytesRead);
+}
+
+oslFileError SAL_CALL osl_writeFileAt(
+ oslFileHandle Handle,
+ sal_uInt64 uOffset,
+ const void* pBuffer,
+ sal_uInt64 uBytesToWrite,
+ sal_uInt64* pBytesWritten)
+{
+ FileHandle_Impl* pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || (pImpl->m_fd == -1) || (!pBuffer) || (!pBytesWritten))
+ return osl_File_E_INVAL;
+
+ if (!(pImpl->m_state & State::Seekable))
+ return osl_File_E_SPIPE;
+
+ if (!(pImpl->m_state & State::Writeable))
+ return osl_File_E_BADF;
+
+ if (exceedsMaxOffT(uOffset))
+ return osl_File_E_OVERFLOW;
+
+ off_t const nOffset = sal::static_int_cast< off_t >(uOffset);
+
+ static sal_uInt64 const g_limit_ssize_t = std::numeric_limits< ssize_t >::max();
+ if (g_limit_ssize_t < uBytesToWrite)
+ return osl_File_E_OVERFLOW;
+
+ size_t const nBytesToWrite = sal::static_int_cast< size_t >(uBytesToWrite);
+
+ // write at specified fileptr
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+
+ return pImpl->writeFileAt(nOffset, pBuffer, nBytesToWrite, pBytesWritten);
+}
+
+oslFileError SAL_CALL osl_isEndOfFile(oslFileHandle Handle, sal_Bool *pIsEOF)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pIsEOF))
+ return osl_File_E_INVAL;
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ *pIsEOF = (pImpl->getPos() == pImpl->getSize());
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_getFilePos(oslFileHandle Handle, sal_uInt64* pPos)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pPos))
+ return osl_File_E_INVAL;
+
+ // no need to lock because pos is atomic
+ *pPos = pImpl->getPos();
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_setFilePos(oslFileHandle Handle, sal_uInt32 uHow, sal_Int64 uOffset)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)))
+ return osl_File_E_INVAL;
+
+ if (exceedsMaxOffT(uOffset) || exceedsMinOffT(uOffset))
+ return osl_File_E_OVERFLOW;
+
+ off_t nPos = 0, nOffset = sal::static_int_cast< off_t >(uOffset);
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ switch (uHow)
+ {
+ case osl_Pos_Absolut:
+ if (nOffset < 0)
+ return osl_File_E_INVAL;
+ break;
+
+ case osl_Pos_Current:
+ nPos = sal::static_int_cast< off_t >(pImpl->getPos());
+ if ((nOffset < 0) && (nPos < -1*nOffset))
+ return osl_File_E_INVAL;
+
+ assert(nPos >= 0);
+ if (nOffset > MAX_OFF_T - nPos)
+ return osl_File_E_OVERFLOW;
+ break;
+
+ case osl_Pos_End:
+ nPos = sal::static_int_cast< off_t >(pImpl->getSize());
+ if ((nOffset < 0) && (nPos < -1*nOffset))
+ return osl_File_E_INVAL;
+
+ assert(nPos >= 0);
+ if (nOffset > MAX_OFF_T - nPos)
+ return osl_File_E_OVERFLOW;
+ break;
+
+ default:
+ return osl_File_E_INVAL;
+ }
+
+ pImpl->setPos(nPos + nOffset);
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_getFileSize(oslFileHandle Handle, sal_uInt64* pSize)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pSize))
+ return osl_File_E_INVAL;
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ *pSize = pImpl->getSize();
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_setFileSize(oslFileHandle Handle, sal_uInt64 uSize)
+{
+ FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle);
+
+ if ((!pImpl) || (pImpl->m_fd == -1))
+ return osl_File_E_INVAL;
+
+ if (!(pImpl->m_state & State::Writeable))
+ return osl_File_E_BADF;
+
+ if (exceedsMaxOffT(uSize))
+ return osl_File_E_OVERFLOW;
+
+ oslFileError result = pImpl->syncFile();
+ if (result != osl_File_E_None)
+ return result;
+
+ pImpl->m_bufptr = -1;
+ pImpl->m_buflen = 0;
+
+ return pImpl->setSize(uSize);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_error_transl.cxx b/sal/osl/unx/file_error_transl.cxx
new file mode 100644
index 000000000..ad6e00558
--- /dev/null
+++ b/sal/osl/unx/file_error_transl.cxx
@@ -0,0 +1,181 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cerrno>
+
+#include "file_error_transl.hxx"
+
+oslFileError oslTranslateFileError(int Errno)
+{
+ switch (Errno)
+ {
+ case EPERM:
+ return osl_File_E_PERM;
+
+ case ENOENT:
+ return osl_File_E_NOENT;
+
+ case ESRCH:
+ return osl_File_E_SRCH;
+
+ case EINTR:
+ return osl_File_E_INTR;
+
+ case EIO:
+ return osl_File_E_IO;
+
+ case ENXIO:
+ return osl_File_E_IO;
+
+ case E2BIG:
+ return osl_File_E_2BIG;
+
+ case ENOEXEC:
+ return osl_File_E_NOEXEC;
+
+ case EBADF:
+ return osl_File_E_BADF;
+
+ case ECHILD:
+ return osl_File_E_CHILD;
+
+ case EAGAIN:
+ return osl_File_E_AGAIN;
+
+ case ENOMEM:
+ return osl_File_E_NOMEM;
+
+ case EACCES:
+ return osl_File_E_ACCES;
+
+ case EFAULT:
+ return osl_File_E_FAULT;
+
+ case EBUSY:
+ return osl_File_E_BUSY;
+
+ case EEXIST:
+ return osl_File_E_EXIST;
+
+ case EXDEV:
+ return osl_File_E_XDEV;
+
+ case ENODEV:
+ return osl_File_E_NODEV;
+
+ case ENOTDIR:
+ return osl_File_E_NOTDIR;
+
+ case EISDIR:
+ return osl_File_E_ISDIR;
+
+ case EINVAL:
+ return osl_File_E_INVAL;
+
+ case ENFILE:
+ return osl_File_E_NFILE;
+
+ case EMFILE:
+ return osl_File_E_MFILE;
+
+ case ENOTTY:
+ return osl_File_E_NOTTY;
+
+ case EFBIG:
+ return osl_File_E_FBIG;
+
+ case ENOSPC:
+ return osl_File_E_NOSPC;
+
+ case ESPIPE:
+ return osl_File_E_SPIPE;
+
+ case EROFS:
+ return osl_File_E_ROFS;
+
+ case EMLINK:
+ return osl_File_E_MLINK;
+
+ case EPIPE:
+ return osl_File_E_PIPE;
+
+ case EDOM:
+ return osl_File_E_DOM;
+
+ case ERANGE:
+ return osl_File_E_RANGE;
+
+ case EDEADLK:
+ return osl_File_E_DEADLK;
+
+ case ENAMETOOLONG:
+ return osl_File_E_NAMETOOLONG;
+
+ case ENOLCK:
+ return osl_File_E_NOLCK;
+
+ case ENOSYS:
+ case ENOTSUP:
+#if EOPNOTSUPP != ENOTSUP
+ case EOPNOTSUPP:
+#endif
+ return osl_File_E_NOSYS;
+
+#if !defined(AIX) || !(defined(_ALL_SOURCE) && !defined(_LINUX_SOURCE_COMPAT))
+ case ENOTEMPTY:
+ return osl_File_E_NOTEMPTY;
+#endif
+
+ case ELOOP:
+ return osl_File_E_LOOP;
+
+#if !(defined(MACOSX) || defined(NETBSD) || defined(FREEBSD) || defined(OPENBSD) \
+ || defined(DRAGONFLY))
+ case EILSEQ:
+ return osl_File_E_ILSEQ;
+
+ case ENOLINK:
+ return osl_File_E_NOLINK;
+
+ case EMULTIHOP:
+ return osl_File_E_MULTIHOP;
+#endif /* MACOSX */
+
+#if !defined(HAIKU)
+ case EUSERS:
+ return osl_File_E_USERS;
+#endif
+
+ case EOVERFLOW:
+ return osl_File_E_OVERFLOW;
+
+ case ETIMEDOUT:
+ return osl_File_E_TIMEDOUT;
+
+ default:
+ assert(Errno != 0);
+ /* FIXME translateFileError: is this alright? Or add a new one: osl_File_E_Unknown? */
+ return osl_File_E_invalidError;
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_error_transl.hxx b/sal/osl/unx/file_error_transl.hxx
new file mode 100644
index 000000000..81d972032
--- /dev/null
+++ b/sal/osl/unx/file_error_transl.hxx
@@ -0,0 +1,37 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_FILE_ERROR_TRANSL_HXX
+#define INCLUDED_SAL_OSL_UNX_FILE_ERROR_TRANSL_HXX
+
+#include <osl/file.h>
+#include <sal/types.h>
+
+/** Translate errno's to osl file errors
+
+ @param [in] nErrno the errno; must not be 0
+
+ @returns the osl error code appropriate to the errno
+
+*/
+oslFileError oslTranslateFileError(int Errno);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_impl.hxx b/sal/osl/unx/file_impl.hxx
new file mode 100644
index 000000000..2b374cb68
--- /dev/null
+++ b/sal/osl/unx/file_impl.hxx
@@ -0,0 +1,55 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_FILE_IMPL_HXX
+#define INCLUDED_SAL_OSL_UNX_FILE_IMPL_HXX
+
+#include <osl/file.h>
+#include <stddef.h>
+#include <sys/types.h>
+#include <rtl/string.hxx>
+
+struct DirectoryItem_Impl
+{
+ OString m_strFilePath; /* holds native file name */
+ sal_Int32 m_RefCount;
+ unsigned char m_DType;
+
+ explicit DirectoryItem_Impl(
+ OString strFilePath, unsigned char DType = 0);
+ ~DirectoryItem_Impl();
+
+ void acquire(); /* @see osl_acquireDirectoryItem() */
+ void release(); /* @see osl_releaseDirectoryItem() */
+
+ oslFileType getFileType() const;
+};
+
+oslFileError openFile(
+ rtl_uString * pustrFileURL, oslFileHandle * pHandle, sal_uInt32 uFlags,
+ mode_t mode);
+
+oslFileError openFilePath(
+ const OString& filePath,
+ oslFileHandle* pHandle,
+ sal_uInt32 uFlags, mode_t mode );
+
+#endif // INCLUDED_SAL_OSL_UNX_FILE_IMPL_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_misc.cxx b/sal/osl/unx/file_misc.cxx
new file mode 100644
index 000000000..b2d6010fe
--- /dev/null
+++ b/sal/osl/unx/file_misc.cxx
@@ -0,0 +1,1049 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <osl/file.hxx>
+#include <osl/detail/file.h>
+
+#include <osl/diagnose.h>
+#include <osl/thread.h>
+#include <osl/signal.h>
+#include <rtl/alloc.h>
+#include <rtl/string.hxx>
+#include <sal/log.hxx>
+
+#include "system.hxx"
+#include "file_impl.hxx"
+#include "file_error_transl.hxx"
+#include "file_path_helper.hxx"
+#include "file_url.hxx"
+#include "uunxapi.hxx"
+#include "readwrite_helper.hxx"
+#include "unixerrnostring.hxx"
+
+#include <sys/types.h>
+#include <errno.h>
+#include <dirent.h>
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#include <algorithm>
+#include <cassert>
+#include <cstring>
+#include <memory>
+#include <new>
+
+#ifdef ANDROID
+#include <osl/detail/android-bootstrap.h>
+#endif
+
+/************************************************************************
+ * TODO
+ *
+ * - Fix: check for corresponding struct sizes in exported functions
+ * - check size/use of oslDirectory
+ * - check size/use of oslDirectoryItem
+ ***********************************************************************/
+
+namespace {
+
+struct DirectoryImpl
+{
+ OString strPath; /* holds native directory path */
+ DIR* pDirStruct;
+#ifdef ANDROID
+ enum Kind
+ {
+ KIND_DIRENT = 1,
+ KIND_ASSETS = 2
+ };
+ int eKind;
+ lo_apk_dir* pApkDirStruct;
+#endif
+};
+
+}
+
+DirectoryItem_Impl::DirectoryItem_Impl(
+ OString strFilePath, unsigned char DType)
+ : m_strFilePath (std::move(strFilePath)),
+ m_RefCount (1),
+ m_DType (DType)
+{
+}
+DirectoryItem_Impl::~DirectoryItem_Impl()
+{
+}
+
+void DirectoryItem_Impl::acquire()
+{
+ ++m_RefCount;
+}
+void DirectoryItem_Impl::release()
+{
+ if (--m_RefCount == 0)
+ delete this;
+}
+
+oslFileType DirectoryItem_Impl::getFileType() const
+{
+ switch (m_DType)
+ {
+#ifdef _DIRENT_HAVE_D_TYPE
+ case DT_LNK:
+ return osl_File_Type_Link;
+ case DT_DIR:
+ return osl_File_Type_Directory;
+ case DT_REG:
+ return osl_File_Type_Regular;
+ case DT_FIFO:
+ return osl_File_Type_Fifo;
+ case DT_SOCK:
+ return osl_File_Type_Socket;
+ case DT_CHR:
+ case DT_BLK:
+ return osl_File_Type_Special;
+#endif /* _DIRENT_HAVE_D_TYPE */
+ default:
+ break;
+ }
+ return osl_File_Type_Unknown;
+}
+
+static oslFileError osl_psz_createDirectory(
+ char const * pszPath, sal_uInt32 flags);
+static oslFileError osl_psz_removeDirectory(const char* pszPath);
+
+oslFileError SAL_CALL osl_openDirectory(rtl_uString* ustrDirectoryURL, oslDirectory* pDirectory)
+{
+ oslFileError eRet;
+
+ OString path;
+
+ if ((ustrDirectoryURL == nullptr) || (ustrDirectoryURL->length == 0) || (pDirectory == nullptr))
+ return osl_File_E_INVAL;
+
+ /* convert file URL to system path */
+ eRet = osl::detail::convertUrlToPathname(OUString::unacquired(&ustrDirectoryURL), &path);
+
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+ osl_systemPathRemoveSeparator(path.pData);
+
+#ifdef MACOSX
+ {
+ auto const n = std::max(int(path.getLength() + 1), int(PATH_MAX));
+ auto const tmp = std::make_unique<char[]>(n);
+ std::strcpy(tmp.get(), path.getStr());
+ if (macxp_resolveAlias(tmp.get(), n) != 0) {
+ return oslTranslateFileError(errno);
+ }
+ path = OString(tmp.get(), std::strlen(tmp.get()));
+ }
+#endif /* MACOSX */
+
+#ifdef ANDROID
+ if( strncmp( path.getStr(), "/assets/", sizeof( "/assets/" ) - 1) == 0 )
+ {
+ lo_apk_dir *pdir = lo_apk_opendir( path.getStr() );
+
+ if( pdir )
+ {
+ DirectoryImpl* pDirImpl = new(std::nothrow) DirectoryImpl;
+
+ if( pDirImpl )
+ {
+ pDirImpl->eKind = DirectoryImpl::KIND_ASSETS;
+ pDirImpl->pApkDirStruct = pdir;
+ pDirImpl->strPath = path;
+
+ *pDirectory = (oslDirectory) pDirImpl;
+ return osl_File_E_None;
+ }
+ else
+ {
+ errno = ENOMEM;
+ lo_apk_closedir( pdir );
+ }
+ }
+ }
+ else
+#endif
+ {
+ /* open directory */
+ DIR *pdir = opendir( path.getStr() );
+
+ if( pdir )
+ {
+ SAL_INFO("sal.file", "opendir(" << path << ") => " << pdir);
+
+ /* create and initialize impl structure */
+ DirectoryImpl* pDirImpl = new(std::nothrow) DirectoryImpl;
+
+ if( pDirImpl )
+ {
+ pDirImpl->pDirStruct = pdir;
+ pDirImpl->strPath = path;
+#ifdef ANDROID
+ pDirImpl->eKind = DirectoryImpl::KIND_DIRENT;
+#endif
+ *pDirectory = static_cast<oslDirectory>(pDirImpl);
+ return osl_File_E_None;
+ }
+ errno = ENOMEM;
+ closedir( pdir );
+ }
+ else
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "opendir(" << path << "): " << UnixErrnoString(e));
+ // Restore errno after possible modification by SAL_INFO above
+ errno = e;
+ }
+ }
+
+ return oslTranslateFileError(errno);
+}
+
+oslFileError SAL_CALL osl_closeDirectory(oslDirectory pDirectory)
+{
+ SAL_WARN_IF(!pDirectory, "sal.file", "pDirectory is nullptr");
+ DirectoryImpl* pDirImpl = static_cast<DirectoryImpl*>(pDirectory);
+ oslFileError err = osl_File_E_None;
+
+ if (!pDirImpl)
+ return osl_File_E_INVAL;
+
+#ifdef ANDROID
+ if (pDirImpl->eKind == DirectoryImpl::KIND_ASSETS)
+ {
+ if (lo_apk_closedir(pDirImpl->pApkDirStruct))
+ err = osl_File_E_IO;
+ }
+ else
+#endif
+ {
+ if (closedir( pDirImpl->pDirStruct) != 0)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "closedir(" << pDirImpl->pDirStruct << "): " << UnixErrnoString(e));
+ err = oslTranslateFileError(e);
+ }
+ else
+ SAL_INFO("sal.file", "closedir(" << pDirImpl->pDirStruct << "): OK");
+ }
+
+ delete pDirImpl;
+
+ return err;
+}
+
+/**********************************************
+ * osl_readdir_impl_
+ *
+ * readdir wrapper, filters out "." and ".."
+ * on request
+ *********************************************/
+
+static struct dirent* osl_readdir_impl_(DIR* pdir)
+{
+ struct dirent* pdirent;
+
+ while ((pdirent = readdir(pdir)) != nullptr)
+ {
+ if ((strcmp(pdirent->d_name, ".") == 0) || (strcmp(pdirent->d_name, "..") == 0))
+ continue;
+ break;
+ }
+
+ return pdirent;
+}
+
+oslFileError SAL_CALL osl_getNextDirectoryItem(oslDirectory pDirectory,
+ oslDirectoryItem* pItem, SAL_UNUSED_PARAMETER sal_uInt32 /*uHint*/)
+{
+ SAL_WARN_IF(!pDirectory, "sal.file", "pDirectory is nullptr");
+ SAL_WARN_IF(!pItem, "sal.file", "pItem is nullptr");
+
+ DirectoryImpl* pDirImpl = static_cast<DirectoryImpl*>(pDirectory);
+ OString strFileName;
+ struct dirent* pEntry;
+
+ if ((pDirectory == nullptr) || (pItem == nullptr))
+ return osl_File_E_INVAL;
+
+#ifdef ANDROID
+ if(pDirImpl->eKind == DirectoryImpl::KIND_ASSETS)
+ {
+ pEntry = lo_apk_readdir(pDirImpl->pApkDirStruct);
+ }
+ else
+#endif
+ {
+ pEntry = osl_readdir_impl_(pDirImpl->pDirStruct);
+ }
+
+ if (!pEntry)
+ return osl_File_E_NOENT;
+
+ char const * filename = pEntry->d_name;
+
+#if defined(MACOSX)
+ // convert decomposed filename to precomposed UTF-8
+ char composed_name[BUFSIZ];
+ CFMutableStringRef strRef = CFStringCreateMutable(nullptr, 0 );
+ CFStringAppendCString(strRef, filename, kCFStringEncodingUTF8); // UTF8 is default on Mac OSX
+ CFStringNormalize(strRef, kCFStringNormalizationFormC);
+ CFStringGetCString(strRef, composed_name, BUFSIZ, kCFStringEncodingUTF8);
+ CFRelease(strRef);
+ filename = composed_name;
+#endif
+
+ strFileName = OString(filename, strlen(filename));
+
+ auto const strFilePath = osl::systemPathMakeAbsolutePath(pDirImpl->strPath, strFileName);
+
+ DirectoryItem_Impl* pImpl = static_cast< DirectoryItem_Impl* >(*pItem);
+ if (pImpl)
+ {
+ pImpl->release();
+ pImpl = nullptr;
+ }
+#ifdef _DIRENT_HAVE_D_TYPE
+ pImpl = new DirectoryItem_Impl(std::move(strFilePath), pEntry->d_type);
+#else
+ pImpl = new DirectoryItem_Impl(std::move(strFilePath));
+#endif /* _DIRENT_HAVE_D_TYPE */
+ *pItem = pImpl;
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_getDirectoryItem(rtl_uString* ustrFileURL, oslDirectoryItem* pItem)
+{
+ OString strSystemPath;
+ oslFileError osl_error = osl_File_E_INVAL;
+
+ if ((!ustrFileURL) || (ustrFileURL->length == 0) || (!pItem))
+ return osl_File_E_INVAL;
+
+ osl_error = osl::detail::convertUrlToPathname(OUString::unacquired(&ustrFileURL), &strSystemPath);
+ if (osl_error != osl_File_E_None)
+ return osl_error;
+
+ osl_systemPathRemoveSeparator(strSystemPath.pData);
+
+ if (osl::access(strSystemPath, F_OK) == -1)
+ {
+ osl_error = oslTranslateFileError(errno);
+ }
+ else
+ {
+ *pItem = new DirectoryItem_Impl(std::move(strSystemPath));
+ }
+
+ return osl_error;
+}
+
+oslFileError SAL_CALL osl_acquireDirectoryItem( oslDirectoryItem Item )
+{
+ DirectoryItem_Impl * pImpl = static_cast< DirectoryItem_Impl* >(Item);
+ if (pImpl == nullptr)
+ return osl_File_E_INVAL;
+
+ pImpl->acquire();
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_releaseDirectoryItem( oslDirectoryItem Item )
+{
+ DirectoryItem_Impl * pImpl = static_cast< DirectoryItem_Impl* >(Item);
+ if (pImpl == nullptr)
+ return osl_File_E_INVAL;
+
+ pImpl->release();
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_createDirectory( rtl_uString* ustrDirectoryURL )
+{
+ return osl_createDirectoryWithFlags(
+ ustrDirectoryURL, osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+}
+
+oslFileError osl_createDirectoryWithFlags(
+ rtl_uString * ustrDirectoryURL, sal_uInt32 flags)
+{
+ char path[PATH_MAX];
+ oslFileError eRet;
+
+ SAL_WARN_IF((!ustrDirectoryURL) || (ustrDirectoryURL->length == 0),
+ "sal.file", "Invalid directory URL");
+
+ /* convert directory url to system path */
+ eRet = FileURLToPath( path, PATH_MAX, ustrDirectoryURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+#ifdef MACOSX
+ if ( macxp_resolveAlias( path, PATH_MAX ) != 0 )
+ return oslTranslateFileError( errno );
+#endif/* MACOSX */
+
+ return osl_psz_createDirectory( path, flags );
+}
+
+oslFileError SAL_CALL osl_removeDirectory( rtl_uString* ustrDirectoryURL )
+{
+ char path[PATH_MAX];
+ oslFileError eRet;
+
+ SAL_WARN_IF((!ustrDirectoryURL) || (ustrDirectoryURL->length == 0),
+ "sal.file", "Invalid directory URL");
+
+ /* convert directory url to system path */
+ eRet = FileURLToPath( path, PATH_MAX, ustrDirectoryURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+#ifdef MACOSX
+ if ( macxp_resolveAlias( path, PATH_MAX ) != 0 )
+ return oslTranslateFileError( errno );
+#endif/* MACOSX */
+
+ return osl_psz_removeDirectory( path );
+}
+
+oslFileError osl_psz_createDirectory(char const * pszPath, sal_uInt32 flags)
+{
+ int nRet=0;
+ int mode
+ = (((flags & osl_File_OpenFlag_Read) == 0
+ ? 0
+ : ((flags & osl_File_OpenFlag_Private) == 0
+ ? S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH
+ : S_IRUSR | S_IXUSR))
+ | ((flags & osl_File_OpenFlag_Write) == 0
+ ? 0
+ : ((flags & osl_File_OpenFlag_Private) == 0
+ ? S_IWUSR | S_IWGRP | S_IWOTH
+ : S_IWUSR)));
+
+ nRet = mkdir(pszPath,mode);
+
+ if ( nRet < 0 )
+ {
+ nRet=errno;
+ SAL_INFO("sal.file", "mkdir(" << pszPath << ",0" << std::oct << mode << std::dec << "): " << UnixErrnoString(nRet));
+ return oslTranslateFileError(nRet);
+ }
+ else
+ SAL_INFO("sal.file", "mkdir(" << pszPath << ",0" << std::oct << mode << std::dec << "): OK");
+
+ return osl_File_E_None;
+}
+
+static oslFileError osl_psz_removeDirectory( const char* pszPath )
+{
+ int nRet = rmdir(pszPath);
+
+ if ( nRet < 0 )
+ {
+ nRet=errno;
+ SAL_INFO("sal.file", "rmdir(" << pszPath << "): " << UnixErrnoString(nRet));
+ return oslTranslateFileError(nRet);
+ }
+ else
+ SAL_INFO("sal.file", "rmdir(" << pszPath << "): OK");
+
+ return osl_File_E_None;
+}
+
+static int path_make_parent(char* path)
+{
+ int i = rtl_str_lastIndexOfChar(path, '/');
+
+ if (i > 0)
+ {
+ *(path + i) = 0;
+ return i;
+ }
+ return 0;
+}
+
+static int create_dir_with_callback(
+ char* directory_path,
+ oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc,
+ void* pData)
+{
+ if (osl::mkdir(directory_path, S_IRWXU | S_IRWXG | S_IRWXO) == 0)
+ {
+ if (aDirectoryCreationCallbackFunc)
+ {
+ OUString url;
+ osl::detail::convertPathnameToUrl(directory_path, &url);
+ aDirectoryCreationCallbackFunc(pData, url.pData);
+ }
+ return 0;
+ }
+ return errno;
+}
+
+static oslFileError create_dir_recursively_(
+ char* dir_path,
+ oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc,
+ void* pData)
+{
+ OSL_PRECOND((rtl_str_getLength(dir_path) > 0) && ((dir_path + (rtl_str_getLength(dir_path) - 1)) != (dir_path + rtl_str_lastIndexOfChar(dir_path, '/'))),
+ "Path must not end with a slash");
+
+ int native_err = create_dir_with_callback(
+ dir_path, aDirectoryCreationCallbackFunc, pData);
+
+ if (native_err == 0)
+ return osl_File_E_None;
+
+ if (native_err != ENOENT)
+ return oslTranslateFileError(native_err);
+
+ // we step back until '/a_dir' at maximum because
+ // we should get an error unequal ENOENT when
+ // we try to create 'a_dir' at '/' and would so
+ // return before
+ int pos = path_make_parent(dir_path);
+
+ oslFileError osl_error = create_dir_recursively_(
+ dir_path, aDirectoryCreationCallbackFunc, pData);
+
+ if (osl_error != osl_File_E_None && osl_error != osl_File_E_EXIST)
+ return osl_error;
+
+ dir_path[pos] = '/';
+
+ return create_dir_recursively_(dir_path, aDirectoryCreationCallbackFunc, pData);
+}
+
+oslFileError SAL_CALL osl_createDirectoryPath(
+ rtl_uString* aDirectoryUrl,
+ oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc,
+ void* pData)
+{
+ if (aDirectoryUrl == nullptr)
+ return osl_File_E_INVAL;
+
+ OString sys_path;
+ oslFileError osl_error = osl::detail::convertUrlToPathname(
+ OUString::unacquired(&aDirectoryUrl), &sys_path);
+
+ if (osl_error != osl_File_E_None)
+ return osl_error;
+
+ osl::systemPathRemoveSeparator(sys_path);
+
+ // const_cast because sys_path is a local copy which we want to modify inplace instead of
+ // copy it into another buffer on the heap again
+ return create_dir_recursively_(sys_path.pData->buffer, aDirectoryCreationCallbackFunc, pData);
+}
+
+static oslFileError osl_unlinkFile(const char* pszPath);
+static oslFileError osl_psz_copyFile(const char* pszPath, const char* pszDestPath, bool preserveMetadata);
+static oslFileError osl_psz_moveFile(const char* pszPath, const char* pszDestPath);
+
+static oslFileError oslDoCopy(const char* pszSourceFileName, const char* pszDestFileName, mode_t nMode, size_t nSourceSize, bool DestFileExists);
+static void attemptChangeMetadata(const char* pszFileName, mode_t nMode, time_t nAcTime, time_t nModTime, uid_t nUID, gid_t nGID);
+static int oslDoCopyLink(const char* pszSourceFileName, const char* pszDestFileName);
+static int oslDoCopyFile(const char* pszSourceFileName, const char* pszDestFileName, size_t nSourceSize, mode_t mode);
+static oslFileError oslDoMoveFile(const char* pszPath, const char* pszDestPath);
+
+oslFileError SAL_CALL osl_moveFile( rtl_uString* ustrFileURL, rtl_uString* ustrDestURL )
+{
+ char srcPath[PATH_MAX];
+ char destPath[PATH_MAX];
+ oslFileError eRet;
+
+ SAL_WARN_IF((!ustrFileURL) || (ustrFileURL->length == 0), "sal.file", "Invalid source file URL");
+ SAL_WARN_IF((!ustrDestURL) || (ustrDestURL->length == 0), "sal.file", "Invalid destination file URL");
+
+ /* convert source url to system path */
+ eRet = FileURLToPath( srcPath, PATH_MAX, ustrFileURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+ /* convert destination url to system path */
+ eRet = FileURLToPath( destPath, PATH_MAX, ustrDestURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+#ifdef MACOSX
+ if ( macxp_resolveAlias( srcPath, PATH_MAX ) != 0 || macxp_resolveAlias( destPath, PATH_MAX ) != 0 )
+ return oslTranslateFileError( errno );
+#endif/* MACOSX */
+
+ return oslDoMoveFile( srcPath, destPath );
+}
+
+oslFileError SAL_CALL osl_replaceFile(rtl_uString* ustrFileURL, rtl_uString* ustrDestURL)
+{
+ int nGid = -1;
+ char destPath[PATH_MAX];
+ oslFileError eRet = FileURLToPath(destPath, PATH_MAX, ustrDestURL);
+ if (eRet == osl_File_E_None)
+ {
+ struct stat aFileStat;
+ // coverity[fs_check_call] - unavoidable TOCTOU
+ int nRet = stat(destPath, &aFileStat);
+ if (nRet == -1)
+ {
+ nRet = errno;
+ SAL_INFO("sal.file", "stat(" << destPath << "): " << UnixErrnoString(nRet));
+ }
+ else
+ {
+ nGid = aFileStat.st_gid;
+ }
+ }
+
+ eRet = osl_moveFile(ustrFileURL, ustrDestURL);
+
+ if (eRet == osl_File_E_None && nGid != -1)
+ {
+ int nRet = chown(destPath, -1, nGid);
+ if (nRet == -1)
+ {
+ nRet = errno;
+ SAL_INFO("sal.file",
+ "chown(" << destPath << "-1, " << nGid << "): " << UnixErrnoString(nRet));
+ }
+ }
+
+ return eRet;
+}
+
+oslFileError SAL_CALL osl_copyFile( rtl_uString* ustrFileURL, rtl_uString* ustrDestURL )
+{
+ char srcPath[PATH_MAX];
+ char destPath[PATH_MAX];
+ oslFileError eRet;
+
+ SAL_WARN_IF((!ustrFileURL) || (ustrFileURL->length == 0), "sal.file", "Invalid source file URL");
+ SAL_WARN_IF((!ustrDestURL) || (ustrDestURL->length == 0), "sal.file", "Invalid destination file URL");
+
+ /* convert source url to system path */
+ eRet = FileURLToPath( srcPath, PATH_MAX, ustrFileURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+ /* convert destination url to system path */
+ eRet = FileURLToPath( destPath, PATH_MAX, ustrDestURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+#ifdef MACOSX
+ if ( macxp_resolveAlias( srcPath, PATH_MAX ) != 0 || macxp_resolveAlias( destPath, PATH_MAX ) != 0 )
+ return oslTranslateFileError( errno );
+#endif/* MACOSX */
+
+ return osl_psz_copyFile( srcPath, destPath, false );
+}
+
+oslFileError SAL_CALL osl_removeFile(rtl_uString* ustrFileURL)
+{
+ char path[PATH_MAX];
+ oslFileError eRet;
+
+ SAL_WARN_IF(!ustrFileURL || ustrFileURL->length == 0, "sal.file", "Invalid file URL");
+
+ /* convert file url to system path */
+ eRet = FileURLToPath(path, PATH_MAX, ustrFileURL);
+ if (eRet != osl_File_E_None)
+ return eRet;
+
+#ifdef MACOSX
+ if (macxp_resolveAlias(path, PATH_MAX) != 0)
+ return oslTranslateFileError(errno);
+#endif/* MACOSX */
+
+ return osl_unlinkFile(path);
+}
+
+static oslFileError oslDoMoveFile(const char* pszPath, const char* pszDestPath)
+{
+ oslFileError tErr = osl_psz_moveFile(pszPath,pszDestPath);
+ if (tErr == osl_File_E_None)
+ return tErr;
+
+ if (tErr != osl_File_E_XDEV)
+ return tErr;
+
+ tErr = osl_psz_copyFile(pszPath,pszDestPath, true);
+
+ if (tErr != osl_File_E_None)
+ {
+ osl_unlinkFile(pszDestPath);
+ return tErr;
+ }
+
+ tErr = osl_unlinkFile(pszPath);
+
+ return tErr;
+}
+
+static oslFileError osl_unlinkFile(const char* pszPath)
+{
+ int nRet=0;
+ struct stat aStat;
+
+ nRet = lstat_c(pszPath,&aStat);
+ if (nRet < 0)
+ {
+ nRet=errno;
+ return oslTranslateFileError(nRet);
+ }
+
+ if (S_ISDIR(aStat.st_mode))
+ return osl_File_E_ISDIR;
+
+ nRet = unlink(pszPath);
+ if (nRet < 0)
+ {
+ nRet=errno;
+ SAL_INFO("sal.file", "unlink(" << pszPath << "): " << UnixErrnoString(nRet));
+ return oslTranslateFileError(nRet);
+ }
+ else
+ SAL_INFO("sal.file", "unlink(" << pszPath << "): OK");
+
+ return osl_File_E_None;
+}
+
+static oslFileError osl_psz_moveFile(const char* pszPath, const char* pszDestPath)
+{
+ int nRet = rename(pszPath,pszDestPath);
+
+ if (nRet < 0)
+ {
+ nRet=errno;
+ SAL_INFO("sal.file", "rename(" << pszPath << "," << pszDestPath << "): " << UnixErrnoString(nRet));
+ return oslTranslateFileError(nRet);
+ }
+ else
+ SAL_INFO("sal.file", "rename(" << pszPath << "," << pszDestPath << "): OK");
+
+ return osl_File_E_None;
+}
+
+static oslFileError osl_psz_copyFile( const char* pszPath, const char* pszDestPath, bool preserveMetadata )
+{
+ time_t nAcTime=0;
+ time_t nModTime=0;
+ uid_t nUID=0;
+ gid_t nGID=0;
+ int nRet=0;
+ mode_t nMode=0;
+ struct stat aFileStat;
+ oslFileError tErr=osl_File_E_invalidError;
+ size_t nSourceSize=0;
+ bool DestFileExists=true;
+
+ /* mfe: does the source file really exists? */
+ nRet = lstat_c(pszPath,&aFileStat);
+
+ if (nRet < 0)
+ {
+ nRet=errno;
+ return oslTranslateFileError(nRet);
+ }
+
+ /* we do only copy files here */
+ if (S_ISDIR(aFileStat.st_mode))
+ return osl_File_E_ISDIR;
+
+ nSourceSize = static_cast< size_t >(aFileStat.st_size);
+ nMode = aFileStat.st_mode;
+ nAcTime = aFileStat.st_atime;
+ nModTime = aFileStat.st_mtime;
+ nUID = aFileStat.st_uid;
+ nGID = aFileStat.st_gid;
+
+ nRet = stat_c(pszDestPath,&aFileStat);
+ if (nRet < 0)
+ {
+ nRet=errno;
+
+#ifdef IOS
+ // Checking for nonexistent files at least in the iCloud cache directory (like
+ // "/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/helloodt0.odt" fails
+ // with EPERM, not ENOENT.
+ if (nRet == EPERM)
+ DestFileExists=false;
+#endif
+
+ if (nRet == ENOENT)
+ DestFileExists=false;
+ }
+
+ /* mfe: the destination file must not be a directory! */
+ if (nRet == 0 && S_ISDIR(aFileStat.st_mode))
+ return osl_File_E_ISDIR;
+
+ /* mfe: file does not exists or is no dir */
+
+ tErr = oslDoCopy(pszPath, pszDestPath, nMode, nSourceSize, DestFileExists);
+
+ if (tErr != osl_File_E_None)
+ return tErr;
+
+ if (preserveMetadata)
+ attemptChangeMetadata(pszDestPath, nMode, nAcTime, nModTime, nUID, nGID);
+
+ return tErr;
+}
+
+static oslFileError oslDoCopy(const char* pszSourceFileName, const char* pszDestFileName, mode_t nMode, size_t nSourceSize, bool DestFileExists)
+{
+ int nRet=0;
+
+ OString tmpDestFile;
+ if ( DestFileExists )
+ {
+ //TODO: better pick a temp file name instead of adding .osl-tmp:
+ // use the destination file to avoid EXDEV /* Cross-device link */
+ tmpDestFile = pszDestFileName + OString::Concat(".osl-tmp");
+ if (rename(pszDestFileName, tmpDestFile.getStr()) != 0)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "rename(" << pszDestFileName << ", " << tmpDestFile
+ << "): " << UnixErrnoString(e));
+ if (e == ENOENT)
+ {
+ DestFileExists = false;
+ }
+ else
+ {
+ return osl_File_E_EXIST; // for want of a better error code
+ }
+ }
+ else
+ {
+ SAL_INFO("sal.file", "rename(" << pszDestFileName << ", " << tmpDestFile
+ << "): OK");
+ }
+ }
+
+ /* mfe: should be S_ISREG */
+ if ( !S_ISLNK(nMode) )
+ {
+ /* copy SourceFile to DestFile */
+ nRet = oslDoCopyFile(pszSourceFileName,pszDestFileName,nSourceSize, nMode);
+ }
+ /* mfe: OK redundant at the moment */
+ else if ( S_ISLNK(nMode) )
+ {
+ nRet = oslDoCopyLink(pszSourceFileName,pszDestFileName);
+ }
+ else
+ {
+ /* mfe: what to do here? */
+ nRet=ENOSYS;
+ }
+
+ if ( nRet > 0 && DestFileExists )
+ {
+ if (unlink(pszDestFileName) != 0)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "unlink(" << pszDestFileName << "): " << UnixErrnoString(e));
+ }
+ else
+ SAL_INFO("sal.file", "unlink(" << pszDestFileName << "): OK");
+
+ if (rename(tmpDestFile.getStr(), pszDestFileName) != 0)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "rename(" << tmpDestFile << ", " << pszDestFileName
+ << "): " << UnixErrnoString(e));
+ }
+ else
+ SAL_INFO("sal.file", "rename(" << tmpDestFile << ", " << pszDestFileName << "): OK");
+ }
+
+ if ( nRet > 0 )
+ {
+ return oslTranslateFileError(nRet);
+ }
+
+ if ( DestFileExists )
+ {
+ unlink(tmpDestFile.getStr());
+ }
+
+ return osl_File_E_None;
+}
+
+void attemptChangeMetadata( const char* pszFileName, mode_t nMode, time_t nAcTime, time_t nModTime, uid_t nUID, gid_t nGID)
+{
+ struct utimbuf aTimeBuffer;
+
+#if !defined AT_FDCWD
+ if (!S_ISLNK(nMode) && chmod(pszFileName, nMode) < 0)
+#else
+ if ( fchmodat(AT_FDCWD, pszFileName, nMode, AT_SYMLINK_NOFOLLOW) < 0 )
+#endif
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "chmod(" << pszFileName << ",0" << std::oct << nMode << std::dec <<"): " << UnixErrnoString(e));
+ }
+ else
+ SAL_INFO("sal.file", "chmod(" << pszFileName << ",0" << std::oct << nMode << std::dec <<"): OK");
+
+ // No way to change utime of a symlink itself:
+ if (!S_ISLNK(nMode))
+ {
+ aTimeBuffer.actime=nAcTime;
+ aTimeBuffer.modtime=nModTime;
+ if ( utime(pszFileName,&aTimeBuffer) < 0 )
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "utime(" << pszFileName << "): errno " << e);
+ }
+ }
+
+ if ( nUID != getuid() )
+ {
+ nUID=getuid();
+ }
+ if ( lchown(pszFileName,nUID,nGID) < 0 )
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "lchown(" << pszFileName << "): errno " << e);
+ }
+ else
+ SAL_INFO("sal.file", "lchown(" << pszFileName << "): OK");
+}
+
+static int oslDoCopyLink(const char* pszSourceFileName, const char* pszDestFileName)
+{
+ int nRet=0;
+
+ /* mfe: if dest file is symbolic link remove the link and place the file instead (hro says so) */
+ /* mfe: if source is a link copy the link and not the file it points to (hro says so) */
+ char pszLinkContent[PATH_MAX+1];
+
+ pszLinkContent[0] = '\0';
+
+ nRet = readlink(pszSourceFileName,pszLinkContent,PATH_MAX);
+
+ if ( nRet < 0 )
+ {
+ nRet=errno;
+ return nRet;
+ }
+
+ pszLinkContent[ nRet ] = 0;
+
+ nRet = symlink(pszLinkContent,pszDestFileName);
+
+ if ( nRet < 0 )
+ {
+ nRet=errno;
+ return nRet;
+ }
+
+ return 0;
+}
+
+static int oslDoCopyFile(const char* pszSourceFileName, const char* pszDestFileName, size_t nSourceSize, mode_t mode)
+{
+ oslFileHandle SourceFileFH=nullptr;
+ int DestFileFD=0;
+ int nRet=0;
+
+ if (openFilePath(pszSourceFileName,
+ &SourceFileFH,
+ osl_File_OpenFlag_Read|osl_File_OpenFlag_NoLock|osl_File_OpenFlag_NoExcl, mode_t(-1)) != osl_File_E_None)
+ {
+ // Let's hope errno is still set relevantly after openFilePath...
+ nRet=errno;
+ return nRet;
+ }
+
+ DestFileFD=open(pszDestFileName, O_WRONLY | O_CREAT, mode);
+
+ if ( DestFileFD < 0 )
+ {
+ nRet=errno;
+ SAL_INFO("sal.file", "open(" << pszDestFileName << ",O_WRONLY|O_CREAT,0" << std::oct << mode << std::dec << "): " << UnixErrnoString(nRet));
+ osl_closeFile(SourceFileFH);
+ return nRet;
+ }
+ else
+ SAL_INFO("sal.file", "open(" << pszDestFileName << ",O_WRONLY|O_CREAT,0" << std::oct << mode << std::dec << "): OK");
+
+ size_t nRemains = nSourceSize;
+
+ if ( nRemains )
+ {
+ /* mmap has problems, try the direct streaming */
+ char pBuffer[0x7FFF];
+
+ do
+ {
+ size_t nToRead = std::min( sizeof(pBuffer), nRemains );
+ sal_uInt64 nRead;
+ bool succeeded;
+ if ( osl_readFile( SourceFileFH, pBuffer, nToRead, &nRead ) != osl_File_E_None || nRead > nToRead || nRead == 0 )
+ break;
+
+ succeeded = safeWrite( DestFileFD, pBuffer, nRead );
+ if ( !succeeded )
+ break;
+
+ // We know nRead <= nToRead, so it must fit in a size_t
+ nRemains -= static_cast<size_t>(nRead);
+ }
+ while( nRemains );
+ }
+
+ if ( nRemains )
+ {
+ if ( errno )
+ nRet = errno;
+ else
+ nRet = ENOSPC;
+ }
+
+ osl_closeFile( SourceFileFH );
+ if ( close( DestFileFD ) == -1 )
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "close(" << DestFileFD << "): " << UnixErrnoString(e));
+ if ( nRet == 0 )
+ nRet = e;
+ }
+ else
+ SAL_INFO("sal.file", "close(" << DestFileFD << "): OK");
+
+ return nRet;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_path_helper.cxx b/sal/osl/unx/file_path_helper.cxx
new file mode 100644
index 000000000..a8ee5238f
--- /dev/null
+++ b/sal/osl/unx/file_path_helper.cxx
@@ -0,0 +1,262 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <utility>
+
+#include "file_path_helper.hxx"
+#include "uunxapi.hxx"
+
+#include <osl/diagnose.h>
+#include <rtl/ustring.hxx>
+#include <sal/log.hxx>
+
+const sal_Unicode FPH_CHAR_PATH_SEPARATOR = '/';
+const sal_Unicode FPH_CHAR_DOT = '.';
+const sal_Unicode FPH_CHAR_COLON = ':';
+
+void osl_systemPathRemoveSeparator(rtl_String* pstrPath)
+{
+ OSL_PRECOND(nullptr != pstrPath, "osl_systemPathRemoveSeparator: Invalid parameter");
+ if (pstrPath == nullptr)
+ return;
+
+ // maybe there are more than one separator at end
+ // so we run in a loop
+ while ((pstrPath->length > 1) && (pstrPath->buffer[pstrPath->length - 1] == FPH_CHAR_PATH_SEPARATOR))
+ {
+ pstrPath->length--;
+ pstrPath->buffer[pstrPath->length] = '\0';
+ }
+
+ SAL_WARN_IF( !((0 == pstrPath->length) || (1 == pstrPath->length) ||
+ (pstrPath->length > 1 && pstrPath->buffer[pstrPath->length - 1] != FPH_CHAR_PATH_SEPARATOR)),
+ "sal.osl",
+ "osl_systemPathRemoveSeparator: Post condition failed");
+}
+
+namespace {
+
+template<typename T> void systemPathEnsureSeparator(T* ppstrPath)
+{
+ assert(nullptr != ppstrPath);
+ sal_Int32 lp = ppstrPath->getLength();
+ sal_Int32 i = ppstrPath->lastIndexOf(FPH_CHAR_PATH_SEPARATOR);
+
+ if ((lp > 1 && i != (lp - 1)) || ((lp < 2) && i < 0))
+ {
+ *ppstrPath += "/";
+ }
+
+ SAL_WARN_IF( !ppstrPath->endsWith("/"),
+ "sal.osl",
+ "systemPathEnsureSeparator: Post condition failed");
+}
+
+}
+
+bool osl_systemPathIsRelativePath(const rtl_uString* pustrPath)
+{
+ OSL_PRECOND(nullptr != pustrPath, "osl_systemPathIsRelativePath: Invalid parameter");
+ return ((pustrPath == nullptr) || (pustrPath->length == 0) || (pustrPath->buffer[0] != FPH_CHAR_PATH_SEPARATOR));
+}
+
+namespace {
+
+template<typename T> T systemPathMakeAbsolutePath_(
+ const T& BasePath,
+ const T& RelPath)
+{
+ T base(BasePath);
+
+ if (!base.isEmpty())
+ systemPathEnsureSeparator(&base);
+
+ return base + RelPath;
+}
+
+}
+
+OString osl::systemPathMakeAbsolutePath(
+ const OString& BasePath,
+ const OString& RelPath)
+{
+ return systemPathMakeAbsolutePath_(BasePath, RelPath);
+}
+
+OUString osl::systemPathMakeAbsolutePath(
+ const OUString& BasePath,
+ const OUString& RelPath)
+{
+ return systemPathMakeAbsolutePath_(BasePath, RelPath);
+}
+
+void osl_systemPathGetFileNameOrLastDirectoryPart(
+ const rtl_String* pstrPath,
+ rtl_String** ppstrFileNameOrLastDirPart)
+{
+ OSL_PRECOND(pstrPath && ppstrFileNameOrLastDirPart,
+ "osl_systemPathGetFileNameOrLastDirectoryPart: Invalid parameter");
+
+ OString path(const_cast<rtl_String*>(pstrPath));
+
+ osl_systemPathRemoveSeparator(path.pData);
+
+ OString last_part;
+
+ if (path.getLength() > 1 || (path.getLength() == 1 && path[0] != FPH_CHAR_PATH_SEPARATOR))
+ {
+ sal_Int32 idx_ps = path.lastIndexOf(FPH_CHAR_PATH_SEPARATOR);
+ idx_ps++; // always right to increment by one even if idx_ps == -1!
+ last_part = path.copy(idx_ps);
+ }
+ rtl_string_assign(ppstrFileNameOrLastDirPart, last_part.pData);
+}
+
+bool osl_systemPathIsHiddenFileOrDirectoryEntry(
+ const rtl_String* pstrPath)
+{
+ OSL_PRECOND(nullptr != pstrPath, "osl_systemPathIsHiddenFileOrDirectoryEntry: Invalid parameter");
+ if ((pstrPath == nullptr) || (pstrPath->length == 0))
+ return false;
+
+ OString fdp;
+ osl_systemPathGetFileNameOrLastDirectoryPart(pstrPath, &fdp.pData);
+
+ return ((fdp.pData->length > 0) &&
+ (fdp.pData->buffer[0] == FPH_CHAR_DOT) &&
+ !osl_systemPathIsLocalOrParentDirectoryEntry(fdp.pData));
+}
+
+bool osl_systemPathIsLocalOrParentDirectoryEntry(
+ const rtl_String* pstrPath)
+{
+ OSL_PRECOND(pstrPath, "osl_systemPathIsLocalOrParentDirectoryEntry: Invalid parameter");
+
+ OString dirent;
+
+ osl_systemPathGetFileNameOrLastDirectoryPart(pstrPath, &dirent.pData);
+
+ return (dirent == "." ||
+ dirent == "..");
+}
+
+namespace {
+
+/** Simple iterator for a path list separated by the specified character
+*/
+class path_list_iterator
+{
+public:
+
+ /* after construction get_current_item
+ returns the first path in list, no need
+ to call reset first
+ */
+ path_list_iterator(OUString path_list, sal_Unicode list_separator = FPH_CHAR_COLON) :
+ m_path_list(std::move(path_list)),
+ m_end(m_path_list.getStr() + m_path_list.getLength() + 1),
+ m_separator(list_separator)
+ {
+ reset();
+ }
+
+ path_list_iterator(const path_list_iterator&) = delete;
+ path_list_iterator& operator=(const path_list_iterator&) = delete;
+
+ void reset()
+ {
+ m_path_segment_begin = m_path_segment_end = m_path_list.getStr();
+ advance();
+ }
+
+ void next()
+ {
+ OSL_PRECOND(!done(), "path_list_iterator: Already done!");
+
+ m_path_segment_begin = ++m_path_segment_end;
+ advance();
+ }
+
+ bool done() const
+ {
+ return (m_path_segment_end >= m_end);
+ }
+
+ OUString get_current_item() const
+ {
+ return OUString(
+ m_path_segment_begin,
+ (m_path_segment_end - m_path_segment_begin));
+ }
+
+private:
+ /* move m_path_end to the next separator or
+ to the end of the string
+ */
+ void advance()
+ {
+ while (!done() && *m_path_segment_end && (*m_path_segment_end != m_separator))
+ ++m_path_segment_end;
+
+ OSL_ASSERT(m_path_segment_end <= m_end);
+ }
+
+private:
+ OUString m_path_list;
+ const sal_Unicode* m_end;
+ const sal_Unicode m_separator;
+ const sal_Unicode* m_path_segment_begin;
+ const sal_Unicode* m_path_segment_end;
+};
+
+}
+
+bool osl_searchPath(
+ const rtl_uString* pustrFilePath,
+ const rtl_uString* pustrSearchPathList,
+ rtl_uString** ppustrPathFound)
+{
+ OSL_PRECOND(pustrFilePath && pustrSearchPathList && ppustrPathFound, "osl_searchPath: Invalid parameter");
+
+ bool bfound = false;
+ OUString fp(const_cast<rtl_uString*>(pustrFilePath));
+ OUString pl(const_cast<rtl_uString*>(pustrSearchPathList));
+ path_list_iterator pli(pl);
+
+ while (!pli.done())
+ {
+ OUString p = pli.get_current_item();
+ systemPathEnsureSeparator(&p);
+ p += fp;
+
+ if (osl::access(osl::OUStringToOString(p), F_OK) > -1)
+ {
+ bfound = true;
+ rtl_uString_assign(ppustrPathFound, p.pData);
+ break;
+ }
+ pli.next();
+ }
+ return bfound;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_path_helper.hxx b/sal/osl/unx/file_path_helper.hxx
new file mode 100644
index 000000000..e210b27a3
--- /dev/null
+++ b/sal/osl/unx/file_path_helper.hxx
@@ -0,0 +1,251 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_FILE_PATH_HELPER_HXX
+#define INCLUDED_SAL_OSL_UNX_FILE_PATH_HELPER_HXX
+
+#include <sal/types.h>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+
+/**
+ Removes the last separator from the given system path if any and if the path
+ is not the root path '/'
+
+ @param ppstrPath[inout] a system path if the path is not the root path
+ and the last character is a path separator it
+ will be cut off ppstrPath must not be NULL and
+ must point to a valid rtl_String
+
+ @returns nothing
+
+*/
+void osl_systemPathRemoveSeparator(rtl_String* pstrPath);
+
+/**
+ Returns true if the given path is a relative path and so starts not with '/'
+
+ @param pustrPath [in] a system path - must not be NULL
+
+ @retval sal_True the given path doesn't start with a separator
+ @retval sal_False the given path starts with a separator
+
+*/
+bool osl_systemPathIsRelativePath(
+ const rtl_uString* pustrPath);
+
+/**
+ Returns the file or the directory part of the given path
+
+ @param pstrPath [in] a system path, must not be NULL
+
+ @param ppstrFileOrDirPart [out] on return receives the last part of the
+ given directory or the file name if pstrPath is the
+ root path '/' an empty string will be returned if
+ pstrPath has a trailing '/' the last part before the
+ '/' will be returned else the part after the last '/'
+ will be returned
+
+ @returns nothing
+
+*/
+void osl_systemPathGetFileNameOrLastDirectoryPart(
+ const rtl_String* pstrPath,
+ rtl_String** ppstrFileNameOrLastDirPart);
+
+/**
+ @param pustrPath [in] a system path, must not be NULL
+
+ @retval sal_True the last part of the given system path starts with '.'
+ @retval sal_False the last part of the given system path is '.' or '..'
+ alone or doesn't start with a dot
+
+*/
+bool osl_systemPathIsHiddenFileOrDirectoryEntry(
+ const rtl_String* pustrPath);
+
+/************************************************
+ osl_systemPathIsLocalOrParentDirectoryEntry
+ Returns sal_True if the last part of the given
+ system path is the local directory entry '.'
+ or the parent directory entry '..'
+
+ @param pstrPath [in] a system path,
+ must not be NULL
+
+ @returns sal_True if the last part of the
+ given system path is '.' or '..'
+ else sal_False
+
+************************************************/
+
+bool osl_systemPathIsLocalOrParentDirectoryEntry(
+ const rtl_String* pstrPath);
+
+/************************************************
+ osl_searchPath
+ Searches for a file name or path name in all
+ directories specified by a given path list.
+ Symbolic links in the resulting path will not be
+ resolved, it's up to the caller to do this.
+
+ @param pustrFilePath [in] a file name or
+ directory name to search for, the name must
+ be provided as system path not as a file URL
+
+ @param pustrSearchPathList [in] a ':'
+ separated list of paths in which to search for
+ the file or directory name
+
+ @param ppustrPathFound [out] on success receives the
+ complete path of the file or directory found
+ as a system path
+
+ @returns sal_True if the specified file or
+ directory was found else sal_False
+ ***********************************************/
+
+bool osl_searchPath(
+ const rtl_uString* pustrFilePath,
+ const rtl_uString* pustrSearchPathList,
+ rtl_uString** ppustrPathFound);
+
+namespace osl
+{
+
+ /*******************************************
+ systemPathRemoveSeparator
+ Removes the last separator from the
+ given system path if any and if the path
+ is not the root path '/'
+
+ @param ppustrPath [inout] a system path
+ if the path is not the root path
+ and the last character is a
+ path separator it will be cut off
+ ppustrPath must not be NULL and
+ must point to a valid rtl_uString
+
+ @returns nothing
+
+ ******************************************/
+
+ inline void systemPathRemoveSeparator(/*inout*/ OString& Path)
+ {
+ osl_systemPathRemoveSeparator(Path.pData);
+ }
+
+ /*******************************************
+ systemPathIsRelativePath
+ Returns true if the given path is a
+ relative path and so starts not with '/'
+
+ @param pustrPath [in] a system path
+ pustrPath must not be NULL
+
+ @returns sal_True if the given path
+ doesn't start with a separator
+ else sal_False will be returned
+
+ ******************************************/
+
+ inline bool systemPathIsRelativePath(const OUString& Path)
+ {
+ return osl_systemPathIsRelativePath(Path.pData);
+ }
+
+ /******************************************
+ systemPathMakeAbsolutePath
+ Append a relative path to a base path
+
+ @param BasePath [in] a system
+ path that will be considered as
+ base path
+
+ @param RelPath [in] a system path
+ that will be considered as
+ relative path
+
+ @return the
+ resulting path which is a
+ concatenation of the base and
+ the relative path
+ if base path is empty the
+ resulting absolute path is the
+ relative path
+ if relative path is empty the
+ resulting absolute path is the
+ base path
+ if base and relative path are
+ empty the resulting absolute
+ path is also empty
+
+ *****************************************/
+
+ OString systemPathMakeAbsolutePath(
+ const OString& BasePath,
+ const OString& RelPath);
+
+ OUString systemPathMakeAbsolutePath(
+ const OUString& BasePath,
+ const OUString& RelPath);
+
+ /********************************************
+ systemPathIsHiddenFileOrDirectoryEntry
+ Returns sal_True if the last part of
+ given system path is not '.' or '..'
+ alone and starts with a '.'
+
+ @param pustrPath [in] a system path,
+ must not be NULL
+
+ @returns sal_True if the last part of
+ the given system path starts
+ with '.' or sal_False the last
+ part is '.' or '..' alone or
+ doesn't start with a dot
+
+ *********************************************/
+
+ inline bool systemPathIsHiddenFileOrDirectoryEntry(
+ const OString& Path)
+ {
+ return osl_systemPathIsHiddenFileOrDirectoryEntry(Path.pData);
+ }
+
+ /************************************************
+ searchPath
+ ***********************************************/
+
+ inline bool searchPath(
+ const OUString& ustrFilePath,
+ const OUString& ustrSearchPathList,
+ OUString& ustrPathFound)
+ {
+ return osl_searchPath(
+ ustrFilePath.pData,
+ ustrSearchPathList.pData,
+ &ustrPathFound.pData);
+ }
+
+ } // namespace osl
+
+ #endif /* #ifndef _OSL_PATH_HELPER_HXX_ */
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_stat.cxx b/sal/osl/unx/file_stat.cxx
new file mode 100644
index 000000000..3b702905c
--- /dev/null
+++ b/sal/osl/unx/file_stat.cxx
@@ -0,0 +1,453 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <osl/file.h>
+
+#include "system.hxx"
+#include <sys/types.h>
+#include <dirent.h>
+#include <errno.h>
+#include <limits.h>
+#include <unistd.h>
+
+#include <osl/diagnose.h>
+#include <osl/thread.h>
+
+#include "file_impl.hxx"
+#include "file_error_transl.hxx"
+#include "file_path_helper.hxx"
+#include "file_url.hxx"
+#include "uunxapi.hxx"
+
+namespace
+{
+ void set_file_type(const struct stat& file_stat, oslFileStatus* pStat)
+ {
+ /* links to directories state also to be a directory */
+ if (S_ISLNK(file_stat.st_mode))
+ pStat->eType = osl_File_Type_Link;
+ else if (S_ISDIR(file_stat.st_mode))
+ pStat->eType = osl_File_Type_Directory;
+ else if (S_ISREG(file_stat.st_mode))
+ pStat->eType = osl_File_Type_Regular;
+ else if (S_ISFIFO(file_stat.st_mode))
+ pStat->eType = osl_File_Type_Fifo;
+ else if (S_ISSOCK(file_stat.st_mode))
+ pStat->eType = osl_File_Type_Socket;
+ else if (S_ISCHR(file_stat.st_mode) || S_ISBLK(file_stat.st_mode))
+ pStat->eType = osl_File_Type_Special;
+ else
+ pStat->eType = osl_File_Type_Unknown;
+
+ pStat->uValidFields |= osl_FileStatus_Mask_Type;
+ }
+
+ void set_file_access_mask(const struct stat& file_stat, oslFileStatus* pStat)
+ {
+ // user permissions
+ if (S_IRUSR & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_OwnRead;
+
+ if (S_IWUSR & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_OwnWrite;
+
+ if (S_IXUSR & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_OwnExe;
+
+ // group permissions
+ if (S_IRGRP & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_GrpRead;
+
+ if (S_IWGRP & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_GrpWrite;
+
+ if (S_IXGRP & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_GrpExe;
+
+ // others permissions
+ if (S_IROTH & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_OthRead;
+
+ if (S_IWOTH & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_OthWrite;
+
+ if (S_IXOTH & file_stat.st_mode)
+ pStat->uAttributes |= osl_File_Attribute_OthExe;
+
+ pStat->uValidFields |= osl_FileStatus_Mask_Attributes;
+ }
+
+ /* This code used not to use access(...) because access follows links which
+ may cause performance problems see #97133. (That apparently references a
+ no-longer accessible Hamburg-internal bug-tracking system.)
+ However, contrary to what is stated above the use of access calls is
+ required on network file systems not using unix semantics (AFS, see
+ fdo#43095).
+ */
+ void set_file_access_rights(const OString& file_path, oslFileStatus* pStat)
+ {
+ pStat->uValidFields |= osl_FileStatus_Mask_Attributes;
+
+ if (osl::access(file_path, W_OK) < 0)
+ pStat->uAttributes |= osl_File_Attribute_ReadOnly;
+
+ if (osl::access(file_path, X_OK) == 0)
+ pStat->uAttributes |= osl_File_Attribute_Executable;
+ }
+
+ void set_file_hidden_status(const OString& file_path, oslFileStatus* pStat)
+ {
+ pStat->uAttributes = osl::systemPathIsHiddenFileOrDirectoryEntry(file_path) ? osl_File_Attribute_Hidden : 0;
+ pStat->uValidFields |= osl_FileStatus_Mask_Attributes;
+ }
+
+ /* the set_file_access_rights must be called after set_file_hidden_status(...) and
+ set_file_access_mask(...) because of the hack in set_file_access_rights(...) */
+ void set_file_attributes(
+ const OString& file_path, const struct stat& file_stat, const sal_uInt32 uFieldMask, oslFileStatus* pStat)
+ {
+ set_file_hidden_status(file_path, pStat);
+ set_file_access_mask(file_stat, pStat);
+
+ // we set the file access rights only on demand
+ // because it's potentially expensive
+ if (uFieldMask & osl_FileStatus_Mask_Attributes)
+ set_file_access_rights(file_path, pStat);
+ }
+
+ void set_file_access_time(const struct stat& file_stat, oslFileStatus* pStat)
+ {
+ pStat->aAccessTime.Seconds = file_stat.st_atime;
+ pStat->aAccessTime.Nanosec = 0;
+ pStat->uValidFields |= osl_FileStatus_Mask_AccessTime;
+ }
+
+ void set_file_modify_time(const struct stat& file_stat, oslFileStatus* pStat)
+ {
+ pStat->aModifyTime.Seconds = file_stat.st_mtime;
+ pStat->aModifyTime.Nanosec = 0;
+ pStat->uValidFields |= osl_FileStatus_Mask_ModifyTime;
+ }
+
+ void set_file_size(const struct stat& file_stat, oslFileStatus* pStat)
+ {
+ if (S_ISREG(file_stat.st_mode))
+ {
+ pStat->uFileSize = file_stat.st_size;
+ pStat->uValidFields |= osl_FileStatus_Mask_FileSize;
+ }
+ }
+
+ /* we only need to call stat or lstat if one of the
+ following flags is set */
+ bool is_stat_call_necessary(sal_uInt32 field_mask, oslFileType file_type)
+ {
+ return (
+ ((field_mask & osl_FileStatus_Mask_Type) && (file_type == osl_File_Type_Unknown)) ||
+ (field_mask & osl_FileStatus_Mask_Attributes) ||
+ (field_mask & osl_FileStatus_Mask_CreationTime) ||
+ (field_mask & osl_FileStatus_Mask_AccessTime) ||
+ (field_mask & osl_FileStatus_Mask_ModifyTime) ||
+ (field_mask & osl_FileStatus_Mask_FileSize) ||
+ (field_mask & osl_FileStatus_Mask_LinkTargetURL) ||
+ (field_mask & osl_FileStatus_Mask_Validate));
+ }
+
+ oslFileError set_link_target_url(const OString& file_path, oslFileStatus* pStat)
+ {
+ OString link_target;
+ if (!osl::realpath(file_path, link_target))
+ return oslTranslateFileError(errno);
+
+ OUString url;
+ oslFileError osl_error = osl::detail::convertPathnameToUrl(link_target, &url);
+ if (osl_error != osl_File_E_None)
+ return osl_error;
+ rtl_uString_assign(&pStat->ustrLinkTargetURL, url.pData);
+
+ pStat->uValidFields |= osl_FileStatus_Mask_LinkTargetURL;
+ return osl_File_E_None;
+ }
+
+ oslFileError setup_osl_getFileStatus(
+ DirectoryItem_Impl * pImpl, oslFileStatus* pStat, OString& file_path)
+ {
+ if ((pImpl == nullptr) || (pStat == nullptr))
+ return osl_File_E_INVAL;
+
+ file_path = pImpl->m_strFilePath;
+ OSL_ASSERT(!file_path.isEmpty());
+ if (file_path.isEmpty())
+ return osl_File_E_INVAL;
+
+ pStat->uValidFields = 0;
+ return osl_File_E_None;
+ }
+
+}
+
+oslFileError SAL_CALL osl_getFileStatus(oslDirectoryItem Item, oslFileStatus* pStat, sal_uInt32 uFieldMask)
+{
+ DirectoryItem_Impl * pImpl = static_cast< DirectoryItem_Impl* >(Item);
+
+ OString file_path;
+ oslFileError osl_error = setup_osl_getFileStatus(pImpl, pStat, file_path);
+ if (osl_error != osl_File_E_None)
+ return osl_error;
+
+ struct stat file_stat;
+
+ bool bStatNeeded = is_stat_call_necessary(uFieldMask, pImpl->getFileType());
+ if (bStatNeeded && (osl::lstat(file_path, file_stat) != 0))
+ return oslTranslateFileError(errno);
+
+ if (bStatNeeded)
+ {
+ // we set all these attributes because it's cheap
+ set_file_type(file_stat, pStat);
+ set_file_access_time(file_stat, pStat);
+ set_file_modify_time(file_stat, pStat);
+ set_file_size(file_stat, pStat);
+ set_file_attributes(file_path, file_stat, uFieldMask, pStat);
+
+ // file exists semantic of osl_FileStatus_Mask_Validate
+ if ((uFieldMask & osl_FileStatus_Mask_LinkTargetURL) && S_ISLNK(file_stat.st_mode))
+ {
+ osl_error = set_link_target_url(file_path, pStat);
+ if (osl_error != osl_File_E_None)
+ return osl_error;
+ }
+ }
+#ifdef _DIRENT_HAVE_D_TYPE
+ else if (uFieldMask & osl_FileStatus_Mask_Type)
+ {
+ pStat->eType = pImpl->getFileType();
+ pStat->uValidFields |= osl_FileStatus_Mask_Type;
+ }
+#endif /* _DIRENT_HAVE_D_TYPE */
+
+ if (uFieldMask & osl_FileStatus_Mask_FileURL)
+ {
+ OUString url;
+ if ((osl_error = osl::detail::convertPathnameToUrl(file_path, &url)) != osl_File_E_None)
+ return osl_error;
+ rtl_uString_assign(&pStat->ustrFileURL, url.pData);
+
+ pStat->uValidFields |= osl_FileStatus_Mask_FileURL;
+ }
+
+ if (uFieldMask & osl_FileStatus_Mask_FileName)
+ {
+ OString name;
+ osl_systemPathGetFileNameOrLastDirectoryPart(file_path.pData, &name.pData);
+ bool ok = rtl_convertStringToUString(
+ &pStat->ustrFileName, name.getStr(), name.getLength(), osl_getThreadTextEncoding(),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_DEFAULT | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT));
+ assert(ok); (void)ok;
+ pStat->uValidFields |= osl_FileStatus_Mask_FileName;
+ }
+ return osl_File_E_None;
+}
+
+static oslFileError osl_psz_setFileAttributes( const char* pszFilePath, sal_uInt64 uAttributes )
+{
+ oslFileError osl_error = osl_File_E_None;
+ mode_t nNewMode = 0;
+
+ OSL_ENSURE(!(osl_File_Attribute_Hidden & uAttributes), "osl_File_Attribute_Hidden doesn't work under Unix");
+
+ if (uAttributes & osl_File_Attribute_OwnRead)
+ nNewMode |= S_IRUSR;
+
+ if (uAttributes & osl_File_Attribute_OwnWrite)
+ nNewMode|=S_IWUSR;
+
+ if (uAttributes & osl_File_Attribute_OwnExe)
+ nNewMode|=S_IXUSR;
+
+ if (uAttributes & osl_File_Attribute_GrpRead)
+ nNewMode|=S_IRGRP;
+
+ if (uAttributes & osl_File_Attribute_GrpWrite)
+ nNewMode|=S_IWGRP;
+
+ if (uAttributes & osl_File_Attribute_GrpExe)
+ nNewMode|=S_IXGRP;
+
+ if (uAttributes & osl_File_Attribute_OthRead)
+ nNewMode|=S_IROTH;
+
+ if (uAttributes & osl_File_Attribute_OthWrite)
+ nNewMode|=S_IWOTH;
+
+ if (uAttributes & osl_File_Attribute_OthExe)
+ nNewMode|=S_IXOTH;
+
+ if (chmod(pszFilePath, nNewMode) < 0)
+ osl_error = oslTranslateFileError(errno);
+
+ return osl_error;
+}
+
+oslFileError SAL_CALL osl_setFileAttributes( rtl_uString* ustrFileURL, sal_uInt64 uAttributes )
+{
+ char path[PATH_MAX];
+ oslFileError eRet;
+
+ OSL_ASSERT( ustrFileURL );
+
+ /* convert file url to system path */
+ eRet = FileURLToPath( path, PATH_MAX, ustrFileURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+#ifdef MACOSX
+ if ( macxp_resolveAlias( path, PATH_MAX ) != 0 )
+ return oslTranslateFileError( errno );
+#endif/* MACOSX */
+
+ return osl_psz_setFileAttributes( path, uAttributes );
+}
+
+static oslFileError osl_psz_setFileTime (
+ const char* pszFilePath,
+ const TimeValue* pLastAccessTime,
+ const TimeValue* pLastWriteTime )
+{
+ int nRet=0;
+ struct utimbuf aTimeBuffer;
+ struct stat aFileStat;
+#ifdef DEBUG_OSL_FILE
+ struct tm* pTM=0;
+#endif
+
+ nRet = lstat_c(pszFilePath,&aFileStat);
+
+ if ( nRet < 0 )
+ {
+ nRet=errno;
+ return oslTranslateFileError(nRet);
+ }
+
+#ifdef DEBUG_OSL_FILE
+ fprintf(stderr,"File Times are (in localtime):\n");
+ pTM=localtime(&aFileStat.st_ctime);
+ fprintf(stderr,"CreationTime is '%s'\n",asctime(pTM));
+ pTM=localtime(&aFileStat.st_atime);
+ fprintf(stderr,"AccessTime is '%s'\n",asctime(pTM));
+ pTM=localtime(&aFileStat.st_mtime);
+ fprintf(stderr,"Modification is '%s'\n",asctime(pTM));
+
+ fprintf(stderr,"File Times are (in UTC):\n");
+ fprintf(stderr,"CreationTime is '%s'\n",ctime(&aFileStat.st_ctime));
+ fprintf(stderr,"AccessTime is '%s'\n",ctime(&aTimeBuffer.actime));
+ fprintf(stderr,"Modification is '%s'\n",ctime(&aTimeBuffer.modtime));
+#endif
+
+ if ( pLastAccessTime != nullptr )
+ {
+ aTimeBuffer.actime=pLastAccessTime->Seconds;
+ }
+ else
+ {
+ aTimeBuffer.actime=aFileStat.st_atime;
+ }
+
+ if ( pLastWriteTime != nullptr )
+ {
+ aTimeBuffer.modtime=pLastWriteTime->Seconds;
+ }
+ else
+ {
+ aTimeBuffer.modtime=aFileStat.st_mtime;
+ }
+
+ /* mfe: Creation time not used here! */
+
+#ifdef DEBUG_OSL_FILE
+ fprintf(stderr,"File Times are (in localtime):\n");
+ pTM=localtime(&aFileStat.st_ctime);
+ fprintf(stderr,"CreationTime now '%s'\n",asctime(pTM));
+ pTM=localtime(&aTimeBuffer.actime);
+ fprintf(stderr,"AccessTime now '%s'\n",asctime(pTM));
+ pTM=localtime(&aTimeBuffer.modtime);
+ fprintf(stderr,"Modification now '%s'\n",asctime(pTM));
+
+ fprintf(stderr,"File Times are (in UTC):\n");
+ fprintf(stderr,"CreationTime now '%s'\n",ctime(&aFileStat.st_ctime));
+ fprintf(stderr,"AccessTime now '%s'\n",ctime(&aTimeBuffer.actime));
+ fprintf(stderr,"Modification now '%s'\n",ctime(&aTimeBuffer.modtime));
+#endif
+
+ nRet = utime_c(pszFilePath,&aTimeBuffer);
+ if ( nRet < 0 )
+ {
+ nRet=errno;
+ return oslTranslateFileError(nRet);
+ }
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_setFileTime (
+ rtl_uString* ustrFileURL,
+ SAL_UNUSED_PARAMETER const TimeValue* /* pCreationTime */,
+ const TimeValue* pLastAccessTime,
+ const TimeValue* pLastWriteTime )
+{
+ char path[PATH_MAX];
+ oslFileError eRet;
+
+ OSL_ASSERT( ustrFileURL );
+
+ /* convert file url to system path */
+ eRet = FileURLToPath( path, PATH_MAX, ustrFileURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+#ifdef MACOSX
+ if ( macxp_resolveAlias( path, PATH_MAX ) != 0 )
+ return oslTranslateFileError( errno );
+#endif/* MACOSX */
+
+ return osl_psz_setFileTime( path, pLastAccessTime, pLastWriteTime );
+}
+
+sal_Bool
+SAL_CALL osl_identicalDirectoryItem( oslDirectoryItem a, oslDirectoryItem b)
+{
+ DirectoryItem_Impl *pA = static_cast<DirectoryItem_Impl *>(a);
+ DirectoryItem_Impl *pB = static_cast<DirectoryItem_Impl *>(b);
+ if (a == b)
+ return true;
+ /* same name => same item, unless renaming / moving madness has occurred */
+ if (pA->m_strFilePath == pB->m_strFilePath)
+ return true;
+
+ struct stat a_stat, b_stat;
+
+ if (osl::lstat(pA->m_strFilePath, a_stat) != 0 ||
+ osl::lstat(pB->m_strFilePath, b_stat) != 0)
+ return false;
+
+ return (a_stat.st_ino == b_stat.st_ino);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_url.cxx b/sal/osl/unx/file_url.cxx
new file mode 100644
index 000000000..4b5a16885
--- /dev/null
+++ b/sal/osl/unx/file_url.cxx
@@ -0,0 +1,972 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "file_url.hxx"
+
+#include "system.hxx"
+
+#include <algorithm>
+#include <cassert>
+#include <cstring>
+#include <stdexcept>
+#include <string_view>
+#include <type_traits>
+#include <limits.h>
+#include <errno.h>
+#include <strings.h>
+#include <unistd.h>
+
+#include <o3tl/safeint.hxx>
+#include <osl/file.hxx>
+#include <osl/security.hxx>
+#include <osl/socket.h>
+#include <oslsocket.hxx>
+#include <osl/diagnose.h>
+#include <osl/thread.h>
+#include <osl/process.h>
+
+#include <rtl/character.hxx>
+#include <rtl/strbuf.hxx>
+#include <rtl/uri.h>
+#include <rtl/uri.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.h>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/textcvt.h>
+#include <sal/log.hxx>
+
+#include <uri_internal.hxx>
+
+#include "file_error_transl.hxx"
+#include "file_path_helper.hxx"
+
+#include "uunxapi.hxx"
+
+/** @file
+
+ General note
+
+ This file contains the part that handles File URLs.
+
+ File URLs as scheme specific notion of URIs
+ (RFC2396) may be handled platform independent, but
+ will not in osl which is considered wrong.
+ Future version of osl should handle File URLs this
+ way. In rtl/uri there is already a URI parser etc.
+ so this code should be consolidated.
+
+*/
+
+using namespace osl;
+
+namespace {
+
+// A slightly modified version of Pchar in rtl/source/uri.c, but without
+// encoding slashes:
+constexpr auto uriCharClass = rtl::createUriCharClass(
+ u8"!$&'()*+,-./0123456789:=@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~");
+
+}
+
+oslFileError SAL_CALL osl_getCanonicalName( rtl_uString* ustrFileURL, rtl_uString** pustrValidURL )
+{
+ OSL_FAIL("osl_getCanonicalName not implemented");
+
+ rtl_uString_newFromString(pustrValidURL, ustrFileURL);
+ return osl_File_E_None;
+}
+
+namespace {
+
+ class UnicodeToTextConverter_Impl
+ {
+ rtl_UnicodeToTextConverter m_converter;
+
+ UnicodeToTextConverter_Impl()
+ : m_converter (rtl_createUnicodeToTextConverter (osl_getThreadTextEncoding()))
+ {}
+
+ ~UnicodeToTextConverter_Impl()
+ {
+ rtl_destroyUnicodeToTextConverter (m_converter);
+ }
+ public:
+ static UnicodeToTextConverter_Impl & getInstance()
+ {
+ static UnicodeToTextConverter_Impl g_theConverter;
+ return g_theConverter;
+ }
+
+ sal_Size convert(
+ sal_Unicode const * pSrcBuf, sal_Size nSrcChars, char * pDstBuf, sal_Size nDstBytes,
+ sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtChars)
+ {
+ OSL_ASSERT(m_converter != nullptr);
+ return rtl_convertUnicodeToText (
+ m_converter, nullptr, pSrcBuf, nSrcChars, pDstBuf, nDstBytes, nFlags, pInfo, pSrcCvtChars);
+ }
+ };
+
+bool convert(OUStringBuffer const & in, OStringBuffer * append) {
+ assert(append != nullptr);
+ for (sal_Size nConvert = in.getLength();;) {
+ auto const oldLen = append->getLength();
+ auto n = std::min(
+ std::max(nConvert, sal_Size(PATH_MAX)),
+ sal_Size(std::numeric_limits<sal_Int32>::max() - oldLen));
+ // approximation of required converted size
+ auto s = append->appendUninitialized(n);
+ sal_uInt32 info;
+ sal_Size converted;
+ //TODO: context, for reliable treatment of DESTBUFFERTOSMALL:
+ n = UnicodeToTextConverter_Impl::getInstance().convert(
+ in.getStr() + in.getLength() - nConvert, nConvert, s, n,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_FLUSH),
+ &info, &converted);
+ if ((info & RTL_UNICODETOTEXT_INFO_ERROR) != 0) {
+ return false;
+ }
+ append->setLength(oldLen + n);
+ assert(converted <= nConvert);
+ nConvert -= converted;
+ assert((nConvert == 0) == ((info & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0));
+ if ((info & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0) {
+ break;
+ }
+ }
+ return true;
+}
+
+bool decodeFromUtf8(std::u16string_view text, OString * result) {
+ assert(result != nullptr);
+ auto p = text.data();
+ auto const end = p + text.size();
+ OUStringBuffer ubuf(static_cast<int>(text.size()));
+ OStringBuffer bbuf(PATH_MAX);
+ while (p < end) {
+ rtl::uri::detail::EscapeType t;
+ sal_uInt32 c = rtl::uri::detail::readUcs4(&p, end, true, RTL_TEXTENCODING_UTF8, &t);
+ switch (t) {
+ case rtl::uri::detail::EscapeNo:
+ if (c == '%') {
+ return false;
+ }
+ [[fallthrough]];
+ case rtl::uri::detail::EscapeChar:
+ if (rtl::isSurrogate(c)) {
+ return false;
+ }
+ ubuf.appendUtf32(c);
+ break;
+ case rtl::uri::detail::EscapeOctet:
+ if (!convert(ubuf, &bbuf)) {
+ return false;
+ }
+ ubuf.setLength(0);
+ assert(c <= 0xFF);
+ bbuf.append(char(c));
+ break;
+ }
+ }
+ if (!convert(ubuf, &bbuf)) {
+ return false;
+ }
+ *result = bbuf.makeStringAndClear();
+ return true;
+}
+
+template<typename T> oslFileError getSystemPathFromFileUrl(
+ OUString const & url, T * path, bool resolveHome)
+{
+ assert(path != nullptr);
+ // For compatibility with assumptions in other parts of the code base,
+ // assume that anything starting with a slash is a system path instead of a
+ // (relative) file URL (except if it starts with two slashes, in which case
+ // it is a relative URL with an authority component):
+ if (url.isEmpty()
+ || (url[0] == '/' && (url.getLength() == 1 || url[1] != '/')))
+ {
+ return osl_File_E_INVAL;
+ }
+ // Check for non file scheme:
+ sal_Int32 i = 0;
+ if (rtl::isAsciiAlpha(url[0])) {
+ for (sal_Int32 j = 1; j != url.getLength(); ++j) {
+ auto c = url[j];
+ if (c == ':') {
+ if (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths(
+ url.pData->buffer, j,
+ RTL_CONSTASCII_STRINGPARAM("file"))
+ != 0)
+ {
+ return osl_File_E_INVAL;
+ }
+ i = j + 1;
+ break;
+ }
+ if (!rtl::isAsciiAlphanumeric(c) && c != '+' && c != '-'
+ && c != '.')
+ {
+ break;
+ }
+ }
+ }
+ // Handle query or fragment:
+ if (url.indexOf('?', i) != -1 || url.indexOf('#', i) != -1)
+ return osl_File_E_INVAL;
+ // Handle authority, supporting a host of "localhost", "127.0.0.1", or the exact value (e.g.,
+ // not supporting an additional final dot, for simplicity) reported by osl_getLocalHostnameFQDN
+ // (and, in each case, ignoring case of ASCII letters):
+ if (url.getLength() - i >= 2 && url[i] == '/' && url[i + 1] == '/')
+ {
+ i += 2;
+ sal_Int32 j = url.indexOf('/', i);
+ if (j == -1)
+ j = url.getLength();
+ if (j != i
+ && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths(
+ url.pData->buffer + i, j - i,
+ RTL_CONSTASCII_STRINGPARAM("localhost"))
+ != 0)
+ && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths(
+ url.pData->buffer + i, j - i,
+ RTL_CONSTASCII_STRINGPARAM("127.0.0.1"))
+ != 0))
+ {
+ OUString hostname;
+ // The 'file' URI Scheme does imply that we want a FQDN in this case
+ // See https://tools.ietf.org/html/rfc8089#section-3
+ if (osl_getLocalHostnameFQDN(&hostname.pData) != osl_Socket_Ok
+ || (rtl_ustr_compareIgnoreAsciiCase_WithLength(
+ url.pData->buffer + i, j - i, hostname.getStr(), hostname.getLength())
+ != 0))
+ {
+ return osl_File_E_INVAL;
+ }
+ }
+ i = j;
+ }
+ // Handle empty path:
+ if (i == url.getLength())
+ {
+ *path = "/";
+ return osl_File_E_None;
+ }
+ // Path must not contain %2F:
+ if (url.indexOf("%2F", i) != -1 || url.indexOf("%2f", i) != -1)
+ return osl_File_E_INVAL;
+
+ if constexpr (std::is_same_v<T, rtl::OString>) {
+ if (!decodeFromUtf8(url.subView(i), path)) {
+ return osl_File_E_INVAL;
+ }
+ } else if constexpr (std::is_same_v<T, rtl::OUString>) {
+ *path = rtl::Uri::decode(
+ url.copy(i), rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8);
+ } else {
+ static_assert(std::is_same_v<T, rtl::OString> || std::is_same_v<T, rtl::OUString>);
+ }
+ // Path must not contain %2F:
+ if (path->indexOf('\0') != -1)
+ return osl_File_E_INVAL;
+
+ // Handle ~ notation:
+ if (resolveHome && path->getLength() >= 2 && (*path)[1] == '~')
+ {
+ sal_Int32 j = path->indexOf('/', 2);
+ if (j == -1)
+ j = path->getLength();
+
+ if (j == 2)
+ {
+ OUString home;
+ if (!osl::Security().getHomeDir(home))
+ {
+ SAL_WARN("sal.file", "osl::Security::getHomeDir failed");
+ return osl_File_E_INVAL;
+ }
+
+ i = url.indexOf('/', i + 1);
+
+ if (i == -1)
+ i = url.getLength();
+ else
+ ++i;
+
+ //TODO: cheesy way of ensuring home's path ends in slash:
+ if (!home.isEmpty() && home[home.getLength() - 1] != '/')
+ home += "/";
+ try
+ {
+ home = rtl::Uri::convertRelToAbs(home, url.copy(i));
+ }
+ catch (rtl::MalformedUriException & e)
+ {
+ SAL_WARN("sal.file", "rtl::MalformedUriException " << e.getMessage());
+ return osl_File_E_INVAL;
+ }
+ return getSystemPathFromFileUrl(home, path, false);
+ }
+ // FIXME: replace ~user with user's home directory
+ return osl_File_E_INVAL;
+ }
+ return osl_File_E_None;
+}
+
+}
+
+oslFileError SAL_CALL osl_getSystemPathFromFileURL( rtl_uString *ustrFileURL, rtl_uString **pustrSystemPath )
+{
+ OUString path;
+ oslFileError e;
+ try
+ {
+ e = getSystemPathFromFileUrl(
+ OUString::unacquired(&ustrFileURL), &path, true);
+ }
+ catch (std::length_error &)
+ {
+ e = osl_File_E_RANGE;
+ }
+
+ if (e == osl_File_E_None)
+ rtl_uString_assign(pustrSystemPath, path.pData);
+
+ return e;
+}
+
+oslFileError SAL_CALL osl_getFileURLFromSystemPath( rtl_uString *ustrSystemPath, rtl_uString **pustrFileURL )
+{
+ rtl_uString *pTmp = nullptr;
+ sal_Int32 nIndex;
+
+ auto const & systemPath = OUString::unacquired(&ustrSystemPath);
+
+ if( systemPath.isEmpty() )
+ return osl_File_E_INVAL;
+
+ if( systemPath.startsWith( "file:" ) )
+ return osl_File_E_INVAL;
+
+ /* check if system path starts with ~ or ~user and replace it with the appropriate home dir */
+ if( systemPath.startsWith("~") )
+ {
+ /* check if another user is specified */
+ if( ( systemPath.getLength() == 1 ) ||
+ ( systemPath[1] == '/' ) )
+ {
+ /* osl_getHomeDir returns file URL */
+ oslSecurity pSecurity = osl_getCurrentSecurity();
+ osl_getHomeDir( pSecurity , &pTmp );
+ osl_freeSecurityHandle( pSecurity );
+
+ if (!pTmp)
+ return osl_File_E_INVAL;
+
+ /* remove "file://" prefix */
+ rtl_uString_newFromStr_WithLength( &pTmp, pTmp->buffer + 7, pTmp->length - 7 );
+
+ /* replace '~' in original string */
+ rtl_uString_newReplaceStrAt( &pTmp, systemPath.pData, 0, 1, pTmp );
+ }
+ else
+ {
+ /* FIXME: replace ~user with users home directory */
+ return osl_File_E_INVAL;
+ }
+ }
+
+ /* check if initial string contains repeated '/' characters */
+ nIndex = systemPath.indexOf( "//" );
+ if( nIndex != -1 )
+ {
+ sal_Int32 nSrcIndex;
+ sal_Int32 nDeleted = 0;
+
+ /* if pTmp is not already allocated, copy systemPath for modification */
+ if( pTmp == nullptr )
+ rtl_uString_newFromString( &pTmp, systemPath.pData );
+
+ /* adapt index to pTmp */
+ nIndex += pTmp->length - systemPath.getLength();
+
+ /* replace repeated '/' characters with a single '/' */
+ for( nSrcIndex = nIndex + 1; nSrcIndex < pTmp->length; nSrcIndex++ )
+ {
+ if( (pTmp->buffer[nSrcIndex] == '/') && (pTmp->buffer[nIndex] == '/') )
+ nDeleted++;
+ else
+ pTmp->buffer[++nIndex] = pTmp->buffer[nSrcIndex];
+ }
+
+ /* adjust length member */
+ pTmp->length -= nDeleted;
+ }
+
+ if( pTmp == nullptr )
+ rtl_uString_assign( &pTmp, systemPath.pData );
+
+ /* file URLs must be URI encoded */
+ rtl_uriEncode( pTmp, uriCharClass.data(), rtl_UriEncodeIgnoreEscapes, RTL_TEXTENCODING_UTF8, pustrFileURL );
+
+ rtl_uString_release( pTmp );
+
+ /* absolute urls should start with 'file://' */
+ if( (*pustrFileURL)->buffer[0] == '/' )
+ {
+ rtl_uString *pProtocol = nullptr;
+
+ rtl_uString_newFromAscii( &pProtocol, "file://" );
+ rtl_uString_newConcat( pustrFileURL, pProtocol, *pustrFileURL );
+ rtl_uString_release( pProtocol );
+ }
+
+ return osl_File_E_None;
+}
+
+/*
+ * relative URLs are not accepted
+ */
+oslFileError getSystemPathFromFileURL_Ex(
+ rtl_uString *ustrFileURL, rtl_uString **pustrSystemPath)
+{
+ rtl_uString* temp = nullptr;
+ oslFileError osl_error = osl_getSystemPathFromFileURL(ustrFileURL, &temp);
+
+ if (osl_error == osl_File_E_None)
+ {
+ if (temp->buffer[0] == '/')
+ {
+ *pustrSystemPath = temp;
+ }
+ else
+ {
+ rtl_uString_release(temp);
+ osl_error = osl_File_E_INVAL;
+ }
+ }
+
+ return osl_error;
+}
+
+namespace
+{
+
+ /** Helper function, return a pointer to the final '\0'
+ of a string
+ */
+
+ sal_Unicode* ustrtoend(sal_Unicode* pStr)
+ {
+ return (pStr + rtl_ustr_getLength(pStr));
+ }
+
+ sal_Unicode* ustrchrcat(const sal_Unicode chr, sal_Unicode* d)
+ {
+ sal_Unicode* p = ustrtoend(d);
+ *p++ = chr;
+ *p = 0;
+ return d;
+ }
+
+ bool _islastchr(sal_Unicode* pStr, sal_Unicode Chr)
+ {
+ sal_Unicode* p = ustrtoend(pStr);
+ if (p > pStr)
+ p--;
+ return (*p == Chr);
+ }
+
+ /**
+ Remove the last part of a path, a path that has
+ only a '/' or no '/' at all will be returned
+ unmodified
+ */
+
+ sal_Unicode* _rmlastpathtoken(sal_Unicode* aPath)
+ {
+ /* we may always skip -2 because we
+ may at least stand on a '/' but
+ either there is no other character
+ before this '/' or it's another
+ character than the '/'
+ */
+ sal_Unicode* p = ustrtoend(aPath) - 2;
+
+ /* move back to the next path separator
+ or to the start of the string */
+ while ((p > aPath) && (*p != '/'))
+ p--;
+
+ if (p >= aPath)
+ {
+ if (*p == '/')
+ {
+ p++;
+ *p = '\0';
+ }
+ else
+ {
+ *p = '\0';
+ }
+ }
+
+ return aPath;
+ }
+
+ oslFileError _osl_resolvepath(
+ /*inout*/ sal_Unicode* path,
+ /*inout*/ bool* failed)
+ {
+ oslFileError ferr = osl_File_E_None;
+
+ if (!*failed)
+ {
+ char unresolved_path[PATH_MAX];
+ if (!UnicodeToText(unresolved_path, sizeof(unresolved_path), path, rtl_ustr_getLength(path)))
+ return oslTranslateFileError(ENAMETOOLONG);
+
+ char resolved_path[PATH_MAX];
+ if (realpath(unresolved_path, resolved_path))
+ {
+ if (!TextToUnicode(resolved_path, strlen(resolved_path), path, PATH_MAX))
+ return oslTranslateFileError(ENAMETOOLONG);
+ }
+ else
+ {
+ if (EACCES == errno || ENOTDIR == errno || ENOENT == errno)
+ *failed = true;
+ else
+ ferr = oslTranslateFileError(errno);
+ }
+ }
+
+ return ferr;
+ }
+
+ /**
+ Works even with non existing paths. The resulting path must not exceed
+ PATH_MAX else osl_File_E_NAMETOOLONG is the result
+ */
+
+ oslFileError osl_getAbsoluteFileURL_impl_(const OUString& unresolved_path, OUString& resolved_path)
+ {
+ /* the given unresolved path must not exceed PATH_MAX */
+ if (unresolved_path.getLength() >= (PATH_MAX - 2))
+ return oslTranslateFileError(ENAMETOOLONG);
+
+ sal_Unicode path_resolved_so_far[PATH_MAX];
+ const sal_Unicode* punresolved = unresolved_path.getStr();
+ sal_Unicode* presolvedsf = path_resolved_so_far;
+
+ /* reserve space for leading '/' and trailing '\0'
+ do not exceed this limit */
+ sal_Unicode* sentinel = path_resolved_so_far + PATH_MAX - 2;
+
+ /* if realpath fails with error ENOTDIR, EACCES or ENOENT
+ we will not call it again, because _osl_realpath should also
+ work with non existing directories etc. */
+ bool realpath_failed = false;
+ oslFileError ferr;
+
+ path_resolved_so_far[0] = '\0';
+
+ while (*punresolved != '\0')
+ {
+ /* ignore '/.' , skip one part back when '/..' */
+ if ((*punresolved == '.') && (*presolvedsf == '/'))
+ {
+ if (*(punresolved + 1) == '\0')
+ {
+ punresolved++;
+ continue;
+ }
+ if (*(punresolved + 1) == '/')
+ {
+ punresolved += 2;
+ continue;
+ }
+ if ((*(punresolved + 1) == '.') && (*(punresolved + 2) == '\0' || (*(punresolved + 2) == '/')))
+ {
+ _rmlastpathtoken(path_resolved_so_far);
+
+ presolvedsf = ustrtoend(path_resolved_so_far) - 1;
+
+ if (*(punresolved + 2) == '/')
+ punresolved += 3;
+ else
+ punresolved += 2;
+
+ continue;
+ }
+
+ /* a file or directory name may start with '.' */
+ if ((presolvedsf = ustrtoend(path_resolved_so_far)) > sentinel)
+ return oslTranslateFileError(ENAMETOOLONG);
+
+ ustrchrcat(*punresolved++, path_resolved_so_far);
+
+ if (*punresolved == '\0' && !realpath_failed)
+ {
+ ferr = _osl_resolvepath(
+ path_resolved_so_far,
+ &realpath_failed);
+
+ if (ferr != osl_File_E_None)
+ return ferr;
+ }
+ }
+ else if (*punresolved == '/')
+ {
+ if ((presolvedsf = ustrtoend(path_resolved_so_far)) > sentinel)
+ return oslTranslateFileError(ENAMETOOLONG);
+
+ ustrchrcat(*punresolved++, path_resolved_so_far);
+
+ if (!realpath_failed)
+ {
+ ferr = _osl_resolvepath(
+ path_resolved_so_far,
+ &realpath_failed);
+
+ if (ferr != osl_File_E_None)
+ return ferr;
+
+ if (!_islastchr(path_resolved_so_far, '/'))
+ {
+ if ((presolvedsf = ustrtoend(path_resolved_so_far)) > sentinel)
+ return oslTranslateFileError(ENAMETOOLONG);
+
+ ustrchrcat('/', path_resolved_so_far);
+ }
+ }
+ }
+ else // any other character
+ {
+ if ((presolvedsf = ustrtoend(path_resolved_so_far)) > sentinel)
+ return oslTranslateFileError(ENAMETOOLONG);
+
+ ustrchrcat(*punresolved++, path_resolved_so_far);
+
+ if (*punresolved == '\0' && !realpath_failed)
+ {
+ ferr = _osl_resolvepath(
+ path_resolved_so_far,
+ &realpath_failed);
+
+ if (ferr != osl_File_E_None)
+ return ferr;
+ }
+ }
+ }
+
+ sal_Int32 len = rtl_ustr_getLength(path_resolved_so_far);
+
+ OSL_ASSERT(len < PATH_MAX);
+
+ resolved_path = OUString(path_resolved_so_far, len);
+
+ return osl_File_E_None;
+ }
+
+}
+
+oslFileError osl_getAbsoluteFileURL(
+ rtl_uString* ustrBaseDirURL,
+ rtl_uString* ustrRelativeURL,
+ rtl_uString** pustrAbsoluteURL)
+{
+ /* Work around the below call to getSystemPathFromFileURL rejecting input
+ that starts with "/" (for whatever reason it behaves that way; but
+ changing that would start to break lots of tests at least) */
+ OUString relUrl(ustrRelativeURL);
+ if (relUrl.startsWith("//"))
+ relUrl = "file:" + relUrl;
+ else if (relUrl.startsWith("/"))
+ relUrl = "file://" + relUrl;
+
+ OUString unresolved_path;
+
+ FileBase::RC frc = FileBase::getSystemPathFromFileURL(relUrl, unresolved_path);
+ if (frc != FileBase::E_None)
+ return oslFileError(frc);
+
+ if (systemPathIsRelativePath(unresolved_path))
+ {
+ OUString base_path;
+ oslFileError rc = getSystemPathFromFileURL_Ex(ustrBaseDirURL, &base_path.pData);
+ if (rc != osl_File_E_None)
+ return rc;
+
+ unresolved_path = systemPathMakeAbsolutePath(base_path, unresolved_path);
+ }
+
+ OUString resolved_path;
+ oslFileError rc = osl_getAbsoluteFileURL_impl_(unresolved_path, resolved_path);
+ if (rc == osl_File_E_None)
+ {
+ rc = osl_getFileURLFromSystemPath(resolved_path.pData, pustrAbsoluteURL);
+ OSL_ASSERT(osl_File_E_None == rc);
+ }
+
+ return rc;
+}
+
+namespace osl::detail {
+
+ /**
+ No separate error code if unicode to text conversion or getenv fails because for the
+ caller there is no difference why a file could not be found in $PATH
+ */
+ bool find_in_PATH(const OUString& file_path, OUString& result)
+ {
+ bool bfound = false;
+ OUString path("PATH");
+ OUString env_path;
+
+ if (osl_getEnvironment(path.pData, &env_path.pData) == osl_Process_E_None)
+ bfound = osl::searchPath(file_path, env_path, result);
+
+ return bfound;
+ }
+}
+
+namespace
+{
+ /**
+ No separate error code if unicode to text conversion or getcwd fails because for the
+ caller there is no difference why a file could not be found in CDW
+ */
+ bool find_in_CWD(const OUString& file_path, OUString& result)
+ {
+ bool bfound = false;
+ OUString cwd_url;
+
+ if (osl_getProcessWorkingDir(&cwd_url.pData) == osl_Process_E_None)
+ {
+ OUString cwd;
+ FileBase::getSystemPathFromFileURL(cwd_url, cwd);
+ bfound = osl::searchPath(file_path, cwd, result);
+ }
+ return bfound;
+ }
+
+ bool find_in_searchPath(const OUString& file_path, rtl_uString* search_path, OUString& result)
+ {
+ return (search_path && osl::searchPath(file_path, OUString(search_path), result));
+ }
+
+}
+
+oslFileError osl_searchFileURL(rtl_uString* ustrFilePath, rtl_uString* ustrSearchPath, rtl_uString** pustrURL)
+{
+ OSL_PRECOND(ustrFilePath && pustrURL, "osl_searchFileURL: invalid parameter");
+
+ FileBase::RC rc;
+ OUString file_path;
+
+ // try to interpret search path as file url else assume it's a system path list
+ rc = FileBase::getSystemPathFromFileURL(ustrFilePath, file_path);
+ if (rc == FileBase::E_INVAL)
+ file_path = ustrFilePath;
+ else if (rc != FileBase::E_None)
+ return oslFileError(rc);
+
+ bool bfound = false;
+ OUString result;
+
+ if (find_in_searchPath(file_path, ustrSearchPath, result) ||
+ osl::detail::find_in_PATH(file_path, result) ||
+ find_in_CWD(file_path, result))
+ {
+ OUString resolved;
+
+ if (osl::realpath(result, resolved))
+ {
+ oslFileError osl_error = osl_getFileURLFromSystemPath(resolved.pData, pustrURL);
+ SAL_WARN_IF(osl_File_E_None != osl_error, "sal.file", "osl_getFileURLFromSystemPath failed");
+ bfound = true;
+ }
+ }
+ return bfound ? osl_File_E_None : osl_File_E_NOENT;
+}
+
+oslFileError FileURLToPath(char * buffer, size_t bufLen, rtl_uString* ustrFileURL)
+{
+ OString strSystemPath;
+ oslFileError osl_error = osl::detail::convertUrlToPathname(
+ OUString::unacquired(&ustrFileURL), &strSystemPath);
+
+ if(osl_error != osl_File_E_None)
+ return osl_error;
+
+ osl_systemPathRemoveSeparator(strSystemPath.pData);
+
+ if (o3tl::make_unsigned(strSystemPath.getLength()) >= bufLen) {
+ return osl_File_E_OVERFLOW;
+ }
+ std::strcpy(buffer, strSystemPath.getStr());
+
+ return osl_error;
+}
+
+int UnicodeToText( char * buffer, size_t bufLen, const sal_Unicode * uniText, sal_Int32 uniTextLen )
+{
+ sal_uInt32 nInfo = 0;
+ sal_Size nSrcChars = 0;
+
+ sal_Size nDestBytes = UnicodeToTextConverter_Impl::getInstance().convert (
+ uniText, uniTextLen, buffer, bufLen,
+ OUSTRING_TO_OSTRING_CVTFLAGS | RTL_UNICODETOTEXT_FLAGS_FLUSH, &nInfo, &nSrcChars);
+
+ if( nInfo & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL )
+ {
+ errno = EOVERFLOW;
+ return 0;
+ }
+
+ /* ensure trailing '\0' */
+ buffer[nDestBytes] = '\0';
+ return nDestBytes;
+}
+
+namespace
+{
+ class TextToUnicodeConverter_Impl
+ {
+ rtl_TextToUnicodeConverter m_converter;
+
+ TextToUnicodeConverter_Impl()
+ : m_converter (rtl_createTextToUnicodeConverter (osl_getThreadTextEncoding()))
+ {}
+
+ ~TextToUnicodeConverter_Impl()
+ {
+ rtl_destroyTextToUnicodeConverter (m_converter);
+ }
+
+ public:
+ static TextToUnicodeConverter_Impl & getInstance()
+ {
+ static TextToUnicodeConverter_Impl g_theConverter;
+ return g_theConverter;
+ }
+
+ sal_Size convert(
+ char const * pSrcBuf, sal_Size nSrcBytes, sal_Unicode * pDstBuf, sal_Size nDstChars,
+ sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes)
+ {
+ OSL_ASSERT(m_converter != nullptr);
+ return rtl_convertTextToUnicode (
+ m_converter, nullptr, pSrcBuf, nSrcBytes, pDstBuf, nDstChars, nFlags, pInfo, pSrcCvtBytes);
+ }
+ };
+}
+
+int TextToUnicode(
+ const char* text,
+ size_t text_buffer_size,
+ sal_Unicode* unic_text,
+ sal_Int32 unic_text_buffer_size)
+{
+ sal_uInt32 nInfo = 0;
+ sal_Size nSrcChars = 0;
+
+ sal_Size nDestBytes = TextToUnicodeConverter_Impl::getInstance().convert(
+ text, text_buffer_size, unic_text, unic_text_buffer_size,
+ OSTRING_TO_OUSTRING_CVTFLAGS | RTL_TEXTTOUNICODE_FLAGS_FLUSH, &nInfo, &nSrcChars);
+
+ if (nInfo & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)
+ {
+ errno = EOVERFLOW;
+ return 0;
+ }
+
+ /* ensure trailing '\0' */
+ unic_text[nDestBytes] = '\0';
+ return nDestBytes;
+}
+
+oslFileError osl::detail::convertUrlToPathname(OUString const & url, OString * pathname) {
+ assert(pathname != nullptr);
+ oslFileError e;
+ try {
+ e = getSystemPathFromFileUrl(url, pathname, true);
+ } catch (std::length_error &) {
+ e = osl_File_E_RANGE;
+ }
+ if (e == osl_File_E_None && !pathname->startsWith("/")) {
+ e = osl_File_E_INVAL;
+ }
+ return e;
+}
+
+oslFileError osl::detail::convertPathnameToUrl(OString const & pathname, OUString * url) {
+ assert(url != nullptr);
+ OUStringBuffer buf(10+pathname.getLength());
+ buf.append("file:");
+ if (pathname.startsWith("/")) {
+ buf.append("//");
+ // so if pathname should ever start with "//" that isn't mistaken for an authority
+ // component
+ }
+ for (sal_Size convert = pathname.getLength();;) {
+ auto n = std::max(convert, sal_Size(PATH_MAX)); // approximation of required converted size
+ OUStringBuffer ubuf(static_cast<int>(n));
+ auto s = ubuf.appendUninitialized(n);
+ sal_uInt32 info;
+ sal_Size converted;
+ //TODO: context, for reliable treatment of DESTBUFFERTOSMALL:
+ n = TextToUnicodeConverter_Impl::getInstance().convert(
+ pathname.getStr() + pathname.getLength() - convert, convert, s, n,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ ubuf.setLength(n);
+ buf.append(
+ rtl::Uri::encode(
+ ubuf.makeStringAndClear(), uriCharClass.data(), rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8));
+ assert(converted <= convert);
+ convert -= converted;
+ if ((info & RTL_TEXTTOUNICODE_INFO_ERROR) != 0) {
+ assert(convert > 0);
+ //TODO: see writeEscapeOctet in sal/rtl/uri.cxx
+ buf.append("%");
+ unsigned char c = pathname[pathname.getLength() - convert];
+ assert(c >= 0x80);
+ static sal_Unicode const aHex[16]
+ = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }; /* '0'--'9', 'A'--'F' */
+ buf.append(aHex[c >> 4]);
+ buf.append(aHex[c & 15]);
+ --convert;
+ continue;
+ }
+ assert((convert == 0) == ((info & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL) == 0));
+ if ((info & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL) == 0) {
+ break;
+ }
+ }
+ *url = buf.makeStringAndClear();
+ return osl_File_E_None;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_url.hxx b/sal/osl/unx/file_url.hxx
new file mode 100644
index 000000000..3ffd9e06b
--- /dev/null
+++ b/sal/osl/unx/file_url.hxx
@@ -0,0 +1,50 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_FILE_URL_HXX
+#define INCLUDED_SAL_OSL_UNX_FILE_URL_HXX
+
+#include <osl/file.h>
+
+namespace rtl {
+ class OString;
+ class OUString;
+}
+
+oslFileError getSystemPathFromFileURL_Ex(rtl_uString *ustrFileURL, rtl_uString **pustrSystemPath);
+
+oslFileError FileURLToPath(char * buffer, size_t bufLen, rtl_uString* ustrFileURL);
+
+int UnicodeToText(char * buffer, size_t bufLen, const sal_Unicode * uniText, sal_Int32 uniTextLen);
+
+int TextToUnicode(const char* text, size_t text_buffer_size, sal_Unicode* unic_text, sal_Int32 unic_text_buffer_size);
+
+namespace osl::detail {
+
+oslFileError convertUrlToPathname(rtl::OUString const & url, rtl::OString * pathname);
+
+oslFileError convertPathnameToUrl(rtl::OString const & pathname, rtl::OUString * url);
+
+bool find_in_PATH(const rtl::OUString& file_path, rtl::OUString& result);
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file_volume.cxx b/sal/osl/unx/file_volume.cxx
new file mode 100644
index 000000000..5e661bd65
--- /dev/null
+++ b/sal/osl/unx/file_volume.cxx
@@ -0,0 +1,336 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <osl/file.h>
+
+#include <osl/diagnose.h>
+#include <osl/thread.h>
+#include <rtl/alloc.h>
+
+#include "file_error_transl.hxx"
+#include "file_url.hxx"
+#include "system.hxx"
+
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sal/macros.h>
+
+#ifdef HAVE_STATFS_H
+#undef HAVE_STATFS_H
+#endif
+
+#if defined(LINUX) && defined(__FreeBSD_kernel__)
+#undef LINUX
+#define FREEBSD 1
+#endif
+
+#if defined(__sun)
+
+#include <sys/mnttab.h>
+#include <sys/statvfs.h>
+#define HAVE_STATFS_H
+
+#elif defined(LINUX)
+
+#include <mntent.h>
+#include <sys/vfs.h>
+#define HAVE_STATFS_H
+
+#elif defined(NETBSD) || defined(FREEBSD) || defined(OPENBSD) || defined(DRAGONFLY)
+
+#include <sys/param.h>
+#include <sys/ucred.h>
+#include <sys/mount.h>
+#define HAVE_STATFS_H
+
+#elif defined(MACOSX)
+
+#include <sys/param.h>
+#include <sys/mount.h>
+#define HAVE_STATFS_H
+
+#endif /* HAVE_STATFS_H */
+
+/************************************************************************
+ * ToDo
+ *
+ * - Fix: check for corresponding struct sizes in exported functions
+ * - check size/use of oslVolumeInfo
+ ***********************************************************************/
+
+/******************************************************************************
+ *
+ * C-String Function Declarations
+ *
+ *****************************************************************************/
+
+static oslFileError osl_psz_getVolumeInformation(const char* , oslVolumeInfo* pInfo, sal_uInt32 uFieldMask);
+
+/****************************************************************************/
+/* osl_getVolumeInformation */
+/****************************************************************************/
+
+oslFileError osl_getVolumeInformation( rtl_uString* ustrDirectoryURL, oslVolumeInfo* pInfo, sal_uInt32 uFieldMask )
+{
+ char path[PATH_MAX];
+ oslFileError eRet;
+
+ OSL_ASSERT( ustrDirectoryURL );
+ OSL_ASSERT( pInfo );
+
+ /* convert directory url to system path */
+ eRet = FileURLToPath( path, PATH_MAX, ustrDirectoryURL );
+ if( eRet != osl_File_E_None )
+ return eRet;
+
+#ifdef MACOSX
+ if ( macxp_resolveAlias( path, PATH_MAX ) != 0 )
+ return oslTranslateFileError( errno );
+#endif/* MACOSX */
+
+ return osl_psz_getVolumeInformation( path, pInfo, uFieldMask);
+}
+
+/******************************************************************************
+ *
+ * C-String Versions of Exported Module Functions
+ *
+ *****************************************************************************/
+
+#ifdef HAVE_STATFS_H
+
+#if defined(FREEBSD) || defined(MACOSX) || defined(OPENBSD) || defined(DRAGONFLY)
+# define OSL_detail_STATFS_STRUCT struct statfs
+# define OSL_detail_STATFS(dir, sfs) statfs((dir), (sfs))
+# define OSL_detail_STATFS_BLKSIZ(a) (static_cast<sal_uInt64>((a).f_bsize))
+# define OSL_detail_STATFS_TYPENAME(a) ((a).f_fstypename)
+#if defined(OPENBSD)
+# define OSL_detail_STATFS_ISREMOTE(a) (rtl_str_compare((a).f_fstypename, "nfs") == 0)
+#else
+# define OSL_detail_STATFS_ISREMOTE(a) (((a).f_type & MNT_LOCAL) == 0)
+#endif
+
+/* always return true if queried for the properties of
+ the file system. If you think this is wrong under any
+ of the target platforms fix it!!!! */
+# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) (true)
+# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) (true)
+#endif /* FREEBSD || MACOSX || OPENBSD */
+
+#if defined(NETBSD)
+
+# define OSL_detail_STATFS_STRUCT struct statvfs
+# define OSL_detail_STATFS(dir, sfs) statvfs((dir), (sfs))
+# define OSL_detail_STATFS_ISREMOTE(a) (((a).f_flag & ST_LOCAL) == 0)
+
+# define OSL_detail_STATFS_BLKSIZ(a) ((sal_uInt64)((a).f_bsize))
+# define OSL_detail_STATFS_TYPENAME(a) ((a).f_fstypename)
+
+# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) (strcmp((a).f_fstypename, "msdos") != 0 && strcmp((a).f_fstypename, "ntfs") != 0 && strcmp((a).f_fstypename, "smbfs") != 0)
+# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) (strcmp((a).f_fstypename, "msdos") != 0)
+#endif /* NETBSD */
+
+#if defined(LINUX)
+# define OSL_detail_NFS_SUPER_MAGIC 0x6969
+# define OSL_detail_SMB_SUPER_MAGIC 0x517B
+# define OSL_detail_MSDOS_SUPER_MAGIC 0x4d44
+# define OSL_detail_NTFS_SUPER_MAGIC 0x5346544e
+# define OSL_detail_STATFS_STRUCT struct statfs
+# define OSL_detail_STATFS(dir, sfs) statfs((dir), (sfs))
+# define OSL_detail_STATFS_BLKSIZ(a) (static_cast<sal_uInt64>((a).f_bsize))
+# define OSL_detail_STATFS_IS_NFS(a) (OSL_detail_NFS_SUPER_MAGIC == (a).f_type)
+# define OSL_detail_STATFS_IS_SMB(a) (OSL_detail_SMB_SUPER_MAGIC == (a).f_type)
+# define OSL_detail_STATFS_ISREMOTE(a) (OSL_detail_STATFS_IS_NFS((a)) || OSL_detail_STATFS_IS_SMB((a)))
+# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) ((OSL_detail_MSDOS_SUPER_MAGIC != (a).f_type) && (OSL_detail_NTFS_SUPER_MAGIC != (a).f_type))
+# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) ((OSL_detail_MSDOS_SUPER_MAGIC != (a).f_type))
+#endif /* LINUX */
+
+#if defined(__sun)
+# define OSL_detail_STATFS_STRUCT struct statvfs
+# define OSL_detail_STATFS(dir, sfs) statvfs((dir), (sfs))
+# define OSL_detail_STATFS_BLKSIZ(a) ((sal_uInt64)((a).f_frsize))
+# define OSL_detail_STATFS_TYPENAME(a) ((a).f_basetype)
+# define OSL_detail_STATFS_ISREMOTE(a) (rtl_str_compare((a).f_basetype, "nfs") == 0)
+
+/* always return true if queried for the properties of
+ the file system. If you think this is wrong under any
+ of the target platforms fix it!!!! */
+# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) (true)
+# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) (true)
+#endif /* __sun */
+
+# define OSL_detail_STATFS_INIT(a) (memset(&(a), 0, sizeof(OSL_detail_STATFS_STRUCT)))
+
+#else /* no statfs available */
+
+# define OSL_detail_STATFS_STRUCT struct dummy {int i;}
+# define OSL_detail_STATFS_INIT(a) ((void)a)
+# define OSL_detail_STATFS(dir, sfs) (1)
+# define OSL_detail_STATFS_ISREMOTE(sfs) (false)
+# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) (true)
+# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) (true)
+#endif /* HAVE_STATFS_H */
+
+static oslFileError osl_psz_getVolumeInformation (
+ const char* pszDirectory, oslVolumeInfo* pInfo, sal_uInt32 uFieldMask)
+{
+ if (!pInfo)
+ return osl_File_E_INVAL;
+
+ pInfo->uValidFields = 0;
+ pInfo->uAttributes = 0;
+ pInfo->uTotalSpace = 0;
+ pInfo->uFreeSpace = 0;
+ pInfo->uUsedSpace = 0;
+
+ if ((uFieldMask
+ & (osl_VolumeInfo_Mask_Attributes | osl_VolumeInfo_Mask_TotalSpace
+ | osl_VolumeInfo_Mask_UsedSpace | osl_VolumeInfo_Mask_FreeSpace
+ | osl_VolumeInfo_Mask_FileSystemName
+ | osl_VolumeInfo_Mask_FileSystemCaseHandling))
+ != 0)
+ {
+ OSL_detail_STATFS_STRUCT sfs;
+ OSL_detail_STATFS_INIT(sfs);
+ // coverity[fs_check_call : FALSE]
+ if ((OSL_detail_STATFS(pszDirectory, &sfs)) < (0))
+ {
+ oslFileError result = oslTranslateFileError(errno);
+ return result;
+ }
+
+ /* FIXME: how to detect the kind of storage (fixed, cdrom, ...) */
+ if (uFieldMask & osl_VolumeInfo_Mask_Attributes)
+ {
+ bool const remote = OSL_detail_STATFS_ISREMOTE(sfs);
+ // extracted from the 'if' to avoid Clang -Wunreachable-code
+ if (remote)
+ pInfo->uAttributes |= osl_Volume_Attribute_Remote;
+
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_Attributes;
+ }
+
+ if (uFieldMask & osl_VolumeInfo_Mask_FileSystemCaseHandling)
+ {
+ if (OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(sfs))
+ pInfo->uAttributes |= osl_Volume_Attribute_Case_Sensitive;
+
+ if (OSL_detail_STATFS_IS_CASE_PRESERVING_FS(sfs))
+ pInfo->uAttributes |= osl_Volume_Attribute_Case_Is_Preserved;
+
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_Attributes;
+ }
+
+#if defined(OSL_detail_STATFS_BLKSIZ)
+
+ if ((uFieldMask & osl_VolumeInfo_Mask_TotalSpace) ||
+ (uFieldMask & osl_VolumeInfo_Mask_UsedSpace))
+ {
+ pInfo->uTotalSpace = OSL_detail_STATFS_BLKSIZ(sfs);
+ pInfo->uTotalSpace *= static_cast<sal_uInt64>(sfs.f_blocks);
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_TotalSpace;
+ }
+
+ if ((uFieldMask & osl_VolumeInfo_Mask_FreeSpace) ||
+ (uFieldMask & osl_VolumeInfo_Mask_UsedSpace))
+ {
+ pInfo->uFreeSpace = OSL_detail_STATFS_BLKSIZ(sfs);
+
+ if (getuid() == 0)
+ pInfo->uFreeSpace *= static_cast<sal_uInt64>(sfs.f_bfree);
+ else
+ pInfo->uFreeSpace *= static_cast<sal_uInt64>(sfs.f_bavail);
+
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_FreeSpace;
+ }
+
+ if ((pInfo->uValidFields & osl_VolumeInfo_Mask_TotalSpace) &&
+ (pInfo->uValidFields & osl_VolumeInfo_Mask_FreeSpace ))
+ {
+ pInfo->uUsedSpace = pInfo->uTotalSpace - pInfo->uFreeSpace;
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_UsedSpace;
+ }
+
+#endif /* OSL_detail_STATFS_BLKSIZ */
+
+#if defined(OSL_detail_STATFS_TYPENAME)
+
+ if (uFieldMask & osl_VolumeInfo_Mask_FileSystemName)
+ {
+ rtl_string2UString(
+ &(pInfo->ustrFileSystemName),
+ OSL_detail_STATFS_TYPENAME(sfs),
+ rtl_str_getLength(OSL_detail_STATFS_TYPENAME(sfs)),
+ osl_getThreadTextEncoding(),
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+ OSL_ASSERT(pInfo->ustrFileSystemName != nullptr);
+
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_FileSystemName;
+ }
+
+#endif /* OSL_detail_STATFS_TYPENAME */
+ }
+
+ pInfo->uMaxNameLength = 0;
+ if (uFieldMask & osl_VolumeInfo_Mask_MaxNameLength)
+ {
+ long nLen = pathconf(pszDirectory, _PC_NAME_MAX);
+ if (nLen > 0)
+ {
+ pInfo->uMaxNameLength = static_cast<sal_uInt32>(nLen);
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_MaxNameLength;
+ }
+ }
+
+ pInfo->uMaxPathLength = 0;
+ if (uFieldMask & osl_VolumeInfo_Mask_MaxPathLength)
+ {
+ long nLen = pathconf (pszDirectory, _PC_PATH_MAX);
+ if (nLen > 0)
+ {
+ pInfo->uMaxPathLength = static_cast<sal_uInt32>(nLen);
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_MaxPathLength;
+ }
+ }
+
+ return osl_File_E_None;
+}
+
+oslFileError osl_getVolumeDeviceMountPath( oslVolumeDeviceHandle, rtl_uString ** )
+{
+ return osl_File_E_INVAL;
+}
+
+oslFileError osl_acquireVolumeDeviceHandle( oslVolumeDeviceHandle )
+{
+ return osl_File_E_INVAL;
+}
+
+oslFileError osl_releaseVolumeDeviceHandle( oslVolumeDeviceHandle )
+{
+ return osl_File_E_INVAL;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/interlck.cxx b/sal/osl/unx/interlck.cxx
new file mode 100644
index 000000000..81404cb57
--- /dev/null
+++ b/sal/osl/unx/interlck.cxx
@@ -0,0 +1,95 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.hxx"
+
+#include <config_global.h>
+#include <osl/interlck.h>
+
+#if ( defined (__sun) || defined ( NETBSD ) ) && defined ( SPARC )
+#error please use asm/interlck_sparc.s
+#elif defined (__sun) && defined ( X86 )
+#error please use asm/interlck_x86.s
+#elif HAVE_GCC_BUILTIN_ATOMIC
+oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount)
+{
+ return __sync_add_and_fetch(pCount, 1);
+}
+oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount)
+{
+ return __sync_sub_and_fetch(pCount, 1);
+}
+#elif defined ( __GNUC__ ) && ( defined ( X86 ) || defined ( X86_64 ) )
+/* That's possible on x86-64 too since oslInterlockedCount is a sal_Int32 */
+
+oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount)
+{
+ register oslInterlockedCount nCount asm("%eax");
+ nCount = 1;
+ __asm__ __volatile__ (
+ "lock\n\t"
+ "xaddl %0, %1\n\t"
+ : "+r" (nCount), "+m" (*pCount)
+ : /* nothing */
+ : "memory");
+ return ++nCount;
+}
+
+oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount)
+{
+ register oslInterlockedCount nCount asm("%eax");
+ nCount = -1;
+ __asm__ __volatile__ (
+ "lock\n\t"
+ "xaddl %0, %1\n\t"
+ : "+r" (nCount), "+m" (*pCount)
+ : /* nothing */
+ : "memory");
+ return --nCount;
+}
+#else
+/* use only if nothing else works, expensive due to single mutex for all reference counts */
+
+static pthread_mutex_t InterLock = PTHREAD_MUTEX_INITIALIZER;
+
+oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount)
+{
+ oslInterlockedCount Count;
+
+ pthread_mutex_lock(&InterLock);
+ Count = ++(*pCount);
+ pthread_mutex_unlock(&InterLock);
+
+ return Count;
+}
+
+oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount)
+{
+ oslInterlockedCount Count;
+
+ pthread_mutex_lock(&InterLock);
+ Count = --(*pCount);
+ pthread_mutex_unlock(&InterLock);
+
+ return Count;
+}
+
+#endif /* default */
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/memory.cxx b/sal/osl/unx/memory.cxx
new file mode 100644
index 000000000..be3e41fb5
--- /dev/null
+++ b/sal/osl/unx/memory.cxx
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <oslmemory.h>
+
+#include <stdlib.h>
+#ifdef __ANDROID__
+#include <malloc.h>
+#endif
+
+void* osl_aligned_alloc(sal_Size align, sal_Size size)
+{
+ if (size == 0)
+ {
+ return nullptr;
+ }
+
+#if defined __ANDROID__
+ return memalign(align, size);
+#else
+ void* ptr;
+ int err = posix_memalign(&ptr, align, size);
+ return err ? nullptr : ptr;
+#endif
+}
+
+void osl_aligned_free(void* p) { free(p); }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/module.cxx b/sal/osl/unx/module.cxx
new file mode 100644
index 000000000..606c8fa47
--- /dev/null
+++ b/sal/osl/unx/module.cxx
@@ -0,0 +1,344 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <sal/log.hxx>
+#include <sal/types.h>
+#include <osl/module.h>
+#include <osl/thread.h>
+#include <osl/process.h>
+#include <osl/file.h>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <assert.h>
+#include "system.hxx"
+#include "file_url.hxx"
+
+#ifdef AIX
+#include <sys/ldr.h>
+#endif
+
+static bool getModulePathFromAddress(void * address, rtl_String ** path)
+{
+ bool result = false;
+#if defined(AIX)
+ int size = 4 * 1024;
+ char *buf, *filename=NULL;
+ struct ld_info *lp;
+
+ if ((buf = (char*)malloc(size)) == NULL)
+ return false;
+
+ //figure out how big a buffer we need
+ while (loadquery(L_GETINFO, buf, size) == -1 && errno == ENOMEM)
+ {
+ size += 4 * 1024;
+ free(buf);
+ if ((buf = (char*)malloc(size)) == NULL)
+ return false;
+ }
+
+ lp = (struct ld_info*) buf;
+ while (lp)
+ {
+ unsigned long start = (unsigned long)lp->ldinfo_dataorg;
+ unsigned long end = start + lp->ldinfo_datasize;
+ if (start <= (unsigned long)address && end > (unsigned long)address)
+ {
+ filename = lp->ldinfo_filename;
+ break;
+ }
+ if (!lp->ldinfo_next)
+ break;
+ lp = (struct ld_info*) ((char *) lp + lp->ldinfo_next);
+ }
+
+ if (filename)
+ {
+ rtl_string_newFromStr(path, filename);
+ result = sal_True;
+ }
+ else
+ {
+ result = sal_False;
+ }
+
+ free(buf);
+#else
+#if HAVE_UNIX_DLAPI
+ Dl_info dl_info;
+
+ result = dladdr(address, &dl_info) != 0;
+
+ if (result)
+ {
+ rtl_string_newFromStr(path, dl_info.dli_fname);
+ }
+#else
+ (void) address;
+ (void) path;
+#endif
+#endif
+ return result;
+}
+
+#ifndef DISABLE_DYNLOADING
+
+/*****************************************************************************/
+/* osl_loadModule */
+/*****************************************************************************/
+
+oslModule SAL_CALL osl_loadModule(rtl_uString *ustrModuleName, sal_Int32 nRtldMode)
+{
+ oslModule pModule=nullptr;
+ rtl_uString* ustrTmp = nullptr;
+
+ SAL_WARN_IF(ustrModuleName == nullptr, "sal.osl", "string is not valid");
+
+ /* ensure ustrTmp hold valid string */
+ if (osl_getSystemPathFromFileURL(ustrModuleName, &ustrTmp) != osl_File_E_None)
+ rtl_uString_assign(&ustrTmp, ustrModuleName);
+
+ if (ustrTmp)
+ {
+ char buffer[PATH_MAX];
+
+ if (UnicodeToText(buffer, PATH_MAX, ustrTmp->buffer, ustrTmp->length))
+ pModule = osl_loadModuleAscii(buffer, nRtldMode);
+ rtl_uString_release(ustrTmp);
+ }
+
+ return pModule;
+}
+
+/*****************************************************************************/
+/* osl_loadModuleAscii */
+/*****************************************************************************/
+
+oslModule SAL_CALL osl_loadModuleAscii(const char *pModuleName, sal_Int32 nRtldMode)
+{
+#if HAVE_UNIX_DLAPI
+ SAL_WARN_IF(
+ ((nRtldMode & SAL_LOADMODULE_LAZY) != 0
+ && (nRtldMode & SAL_LOADMODULE_NOW) != 0),
+ "sal.osl", "only either LAZY or NOW");
+ if (pModuleName)
+ {
+ int rtld_mode =
+ ((nRtldMode & SAL_LOADMODULE_NOW) ? RTLD_NOW : RTLD_LAZY) |
+ ((nRtldMode & SAL_LOADMODULE_GLOBAL) ? RTLD_GLOBAL : RTLD_LOCAL);
+ void* pLib = dlopen(pModuleName, rtld_mode);
+
+ SAL_WARN_IF(
+ pLib == nullptr, "sal.osl",
+ "dlopen(" << pModuleName << ", " << rtld_mode << "): "
+ << dlerror());
+ return pLib;
+ }
+#else
+ (void) pModuleName;
+ (void) nRtldMode;
+#endif
+ return nullptr;
+}
+
+oslModule osl_loadModuleRelativeAscii(
+ oslGenericFunction baseModule, char const * relativePath, sal_Int32 mode)
+{
+ assert(relativePath && "illegal argument");
+ if (relativePath[0] == '/') {
+ return osl_loadModuleAscii(relativePath, mode);
+ }
+ rtl_String * path = nullptr;
+ rtl_String * suffix = nullptr;
+ oslModule module;
+ if (!getModulePathFromAddress(
+ reinterpret_cast< void * >(baseModule), &path))
+ {
+ return nullptr;
+ }
+ rtl_string_newFromStr_WithLength(
+ &path, path->buffer,
+ (rtl_str_lastIndexOfChar_WithLength(path->buffer, path->length, '/')
+ + 1));
+ /* cut off everything after the last slash; should the original path
+ contain no slash, the resulting path is the empty string */
+ rtl_string_newFromStr(&suffix, relativePath);
+ rtl_string_newConcat(&path, path, suffix);
+ rtl_string_release(suffix);
+ module = osl_loadModuleAscii(path->buffer, mode);
+ rtl_string_release(path);
+ return module;
+}
+
+#endif // !DISABLE_DYNLOADING
+
+/*****************************************************************************/
+/* osl_getModuleHandle */
+/*****************************************************************************/
+
+sal_Bool SAL_CALL
+osl_getModuleHandle(rtl_uString *, oslModule *pResult)
+{
+#if HAVE_UNIX_DLAPI
+ *pResult = static_cast<oslModule>(RTLD_DEFAULT);
+ return true;
+#else
+ *pResult = nullptr;
+ return false;
+#endif
+}
+
+/*****************************************************************************/
+/* osl_unloadModule */
+/*****************************************************************************/
+void SAL_CALL osl_unloadModule(oslModule hModule)
+{
+#if !defined(DISABLE_DYNLOADING) && HAVE_UNIX_DLAPI
+ if (hModule)
+ {
+ int nRet = dlclose(hModule);
+ SAL_INFO_IF(
+ nRet != 0, "sal.osl", "dlclose(" << hModule << "): " << dlerror());
+ }
+#else
+ (void) hModule;
+#endif
+}
+
+namespace {
+
+void * getSymbol(oslModule module, char const * symbol)
+{
+ assert(symbol != nullptr);
+#if HAVE_UNIX_DLAPI
+ // We do want to use dlsym() also in the DISABLE_DYNLOADING case
+ // just to look up symbols in the static executable, I think:
+ void * p = dlsym(module, symbol);
+ SAL_INFO_IF(
+ p == nullptr, "sal.osl",
+ "dlsym(" << module << ", " << symbol << "): " << dlerror());
+#else
+ (void) module;
+ (void) symbol;
+ void *p = nullptr;
+#endif
+ return p;
+}
+
+}
+
+/*****************************************************************************/
+/* osl_getSymbol */
+/*****************************************************************************/
+void* SAL_CALL
+osl_getSymbol(oslModule Module, rtl_uString* pSymbolName)
+{
+ // Arbitrarily using UTF-8:
+ OString s;
+ if (!OUString::unacquired(&pSymbolName).convertToString(
+ &s, RTL_TEXTENCODING_UTF8,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
+ RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)))
+ {
+ SAL_INFO(
+ "sal.osl", "cannot convert \"" << OUString::unacquired(&pSymbolName)
+ << "\" to UTF-8");
+ return nullptr;
+ }
+ if (s.indexOf('\0') != -1) {
+ SAL_INFO("sal.osl", "\"" << s << "\" contains embedded NUL");
+ return nullptr;
+ }
+ return getSymbol(Module, s.getStr());
+}
+
+/*****************************************************************************/
+/* osl_getAsciiFunctionSymbol */
+/*****************************************************************************/
+oslGenericFunction SAL_CALL
+osl_getAsciiFunctionSymbol(oslModule Module, const char *pSymbol)
+{
+ return reinterpret_cast<oslGenericFunction>(getSymbol(Module, pSymbol));
+ // requires conditionally-supported conversion from void * to function
+ // pointer
+}
+
+/*****************************************************************************/
+/* osl_getFunctionSymbol */
+/*****************************************************************************/
+oslGenericFunction SAL_CALL
+osl_getFunctionSymbol(oslModule module, rtl_uString *puFunctionSymbolName)
+{
+ return reinterpret_cast<oslGenericFunction>(
+ osl_getSymbol(module, puFunctionSymbolName));
+ // requires conditionally-supported conversion from void * to function
+ // pointer
+}
+
+/*****************************************************************************/
+/* osl_getModuleURLFromAddress */
+/*****************************************************************************/
+sal_Bool SAL_CALL osl_getModuleURLFromAddress(void * addr, rtl_uString ** ppLibraryUrl)
+{
+ bool result = false;
+ rtl_String * path = nullptr;
+ if (getModulePathFromAddress(addr, &path))
+ {
+ rtl_string2UString(ppLibraryUrl,
+ path->buffer,
+ path->length,
+ osl_getThreadTextEncoding(),
+ OSTRING_TO_OUSTRING_CVTFLAGS);
+
+ SAL_WARN_IF(
+ *ppLibraryUrl == nullptr, "sal.osl", "rtl_string2UString failed");
+ auto const e = osl_getFileURLFromSystemPath(*ppLibraryUrl, ppLibraryUrl);
+ if (e == osl_File_E_None)
+ {
+ SAL_INFO("sal.osl", "osl_getModuleURLFromAddress(" << addr << ") => " << OUString(*ppLibraryUrl));
+
+ result = true;
+ }
+ else
+ {
+ SAL_WARN(
+ "sal.osl",
+ "osl_getModuleURLFromAddress(" << addr << "), osl_getFileURLFromSystemPath("
+ << OUString::unacquired(ppLibraryUrl) << ") failed with " << e);
+ result = false;
+ }
+ rtl_string_release(path);
+ }
+ return result;
+}
+
+/*****************************************************************************/
+/* osl_getModuleURLFromFunctionAddress */
+/*****************************************************************************/
+sal_Bool SAL_CALL osl_getModuleURLFromFunctionAddress(oslGenericFunction addr, rtl_uString ** ppLibraryUrl)
+{
+ return osl_getModuleURLFromAddress(
+ reinterpret_cast<void*>(addr), ppLibraryUrl);
+ // requires conditionally-supported conversion from function pointer to
+ // void *
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/mutex.cxx b/sal/osl/unx/mutex.cxx
new file mode 100644
index 000000000..1ca4958fd
--- /dev/null
+++ b/sal/osl/unx/mutex.cxx
@@ -0,0 +1,163 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#if defined LINUX
+// to define __USE_UNIX98, via _XOPEN_SOURCE, enabling pthread_mutexattr_settype
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1
+#endif
+#endif
+#include "system.hxx"
+#include "unixerrnostring.hxx"
+
+#include <sal/log.hxx>
+#include <osl/mutex.h>
+
+#include <pthread.h>
+#include <stdlib.h>
+
+
+typedef struct _oslMutexImpl
+{
+ pthread_mutex_t mutex;
+} oslMutexImpl;
+
+oslMutex SAL_CALL osl_createMutex()
+{
+ oslMutexImpl* pMutex = static_cast<oslMutexImpl*>(malloc(sizeof(oslMutexImpl)));
+ pthread_mutexattr_t aMutexAttr;
+ int nRet=0;
+
+ SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex");
+
+ if ( pMutex == nullptr )
+ {
+ return nullptr;
+ }
+
+ pthread_mutexattr_init(&aMutexAttr);
+
+ nRet = pthread_mutexattr_settype(&aMutexAttr, PTHREAD_MUTEX_RECURSIVE);
+ if( nRet == 0 )
+ nRet = pthread_mutex_init(&(pMutex->mutex), &aMutexAttr);
+ if ( nRet != 0 )
+ {
+ SAL_WARN("sal.osl.mutex", "pthread_muxex_init failed: " << UnixErrnoString(nRet));
+
+ free(pMutex);
+ pMutex = nullptr;
+ }
+
+ pthread_mutexattr_destroy(&aMutexAttr);
+
+ return pMutex;
+}
+
+void SAL_CALL osl_destroyMutex(oslMutex pMutex)
+{
+ SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex");
+
+ if ( pMutex != nullptr )
+ {
+ int nRet = pthread_mutex_destroy(&(pMutex->mutex));
+ if ( nRet != 0 )
+ {
+ SAL_WARN("sal.osl.mutex", "pthread_mutex_destroy failed: " << UnixErrnoString(nRet));
+ }
+
+ free(pMutex);
+ }
+}
+
+#ifdef __COVERITY__
+ extern void __coverity_recursive_lock_acquire__(void*);
+ extern void __coverity_recursive_lock_release__(void*);
+ extern void __coverity_assert_locked__(void*);
+#endif
+
+sal_Bool SAL_CALL osl_acquireMutex(oslMutex pMutex)
+{
+ SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex");
+
+ if ( pMutex != nullptr )
+ {
+ int nRet = pthread_mutex_lock(&(pMutex->mutex));
+ if ( nRet != 0 )
+ {
+ SAL_WARN("sal.osl.mutex", "pthread_mutex_lock failed: " << UnixErrnoString(nRet));
+ return false;
+ }
+#ifdef __COVERITY__
+ __coverity_recursive_lock_acquire__(pMutex);
+#endif
+ return true;
+ }
+
+ /* not initialized */
+ return false;
+}
+
+sal_Bool SAL_CALL osl_tryToAcquireMutex(oslMutex pMutex)
+{
+ bool result = false;
+
+ SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex");
+
+ if ( pMutex )
+ {
+ int nRet = pthread_mutex_trylock(&(pMutex->mutex));
+ if ( nRet == 0 )
+ {
+#ifdef __COVERITY__
+ __coverity_recursive_lock_acquire__(pMutex);
+#endif
+ result = true;
+ }
+ }
+
+ return result;
+}
+
+sal_Bool SAL_CALL osl_releaseMutex(oslMutex pMutex)
+{
+#ifdef __COVERITY__
+ __coverity_assert_locked__(pMutex);
+#endif
+ SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex");
+
+ if ( pMutex )
+ {
+ int nRet = pthread_mutex_unlock(&(pMutex->mutex));
+ if ( nRet != 0 )
+ {
+ SAL_WARN("sal.osl.mutex", "pthread_mutex_unlock failed: " << UnixErrnoString(nRet));
+ return false;
+ }
+
+#ifdef __COVERITY__
+ __coverity_recursive_lock_release__(pMutex);
+#endif
+ return true;
+ }
+
+ /* not initialized */
+ return false;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/nlsupport.cxx b/sal/osl/unx/nlsupport.cxx
new file mode 100644
index 000000000..2780a7fdd
--- /dev/null
+++ b/sal/osl/unx/nlsupport.cxx
@@ -0,0 +1,872 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <algorithm>
+#include <cstring>
+
+#include <osl/nlsupport.h>
+#include <osl/diagnose.h>
+#include <osl/process.h>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <sal/log.hxx>
+
+#include "nlsupport.hxx"
+
+// these share a lot, so use one define
+#if defined(LINUX) || defined(EMSCRIPTEN) || defined(__sun) || \
+ defined(FREEBSD) || defined(OPENBSD) || defined(DRAGONFLY) || defined(NETBSD)
+#define LO_COMMON_NLS_ARCHS 1
+#else
+#define LO_COMMON_NLS_ARCHS 0
+#endif
+
+#if LO_COMMON_NLS_ARCHS
+#include <locale.h>
+#include <langinfo.h>
+#elif defined(MACOSX) || defined(IOS)
+#include <osl/module.h>
+#include <osl/thread.h>
+#include "system.hxx"
+#endif
+
+#include <string.h>
+
+namespace {
+
+struct Pair {
+ const char *key;
+ const rtl_TextEncoding value;
+};
+
+}
+
+/*****************************************************************************
+ compare function for binary search
+ *****************************************************************************/
+
+static int
+pair_compare (const char *key, const Pair *pair)
+{
+ int result = rtl_str_compareIgnoreAsciiCase( key, pair->key );
+ return result;
+}
+
+/*****************************************************************************
+ binary search on encoding tables
+ *****************************************************************************/
+
+static const Pair*
+pair_search (const char *key, const Pair *base, unsigned int member )
+{
+ unsigned int lower = 0;
+ unsigned int upper = member;
+
+ /* check for validity of input */
+ if ( (key == nullptr) || (base == nullptr) || (member == 0) )
+ return nullptr;
+
+ /* binary search */
+ while ( lower < upper )
+ {
+ const unsigned int current = (lower + upper) / 2;
+ const int comparison = pair_compare( key, base + current );
+ if (comparison < 0)
+ upper = current;
+ else if (comparison > 0)
+ lower = current + 1;
+ else
+ return base + current;
+ }
+
+ return nullptr;
+}
+
+/*****************************************************************************
+ convert rtl_Locale to locale string
+ *****************************************************************************/
+
+static char * compose_locale( rtl_Locale * pLocale, char * buffer, size_t n )
+{
+ /* check if a valid locale is specified */
+ if( pLocale && pLocale->Language &&
+ (pLocale->Language->length == 2 || pLocale->Language->length == 3) )
+ {
+ size_t offset = 0;
+
+ /* convert language code to ascii */
+ {
+ rtl_String *pLanguage = nullptr;
+
+ rtl_uString2String( &pLanguage,
+ pLocale->Language->buffer, pLocale->Language->length,
+ RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS );
+
+ if( sal::static_int_cast<sal_uInt32>(pLanguage->length) < n )
+ {
+ strcpy( buffer, pLanguage->buffer );
+ offset = pLanguage->length;
+ }
+
+ rtl_string_release( pLanguage );
+ }
+
+ /* convert country code to ascii */
+ if( pLocale->Country && (pLocale->Country->length == 2) )
+ {
+ rtl_String *pCountry = nullptr;
+
+ rtl_uString2String( &pCountry,
+ pLocale->Country->buffer, pLocale->Country->length,
+ RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS );
+
+ if( offset + pCountry->length + 1 < n )
+ {
+ strcpy( buffer + offset++, "_" );
+ strcpy( buffer + offset, pCountry->buffer );
+ offset += pCountry->length;
+ }
+
+ rtl_string_release( pCountry );
+ }
+
+ /* convert variant to ascii - check if there is enough space for the variant string */
+ if( pLocale->Variant && pLocale->Variant->length &&
+ ( sal::static_int_cast<sal_uInt32>(pLocale->Variant->length) < n - 6 ) )
+ {
+ rtl_String *pVariant = nullptr;
+
+ rtl_uString2String( &pVariant,
+ pLocale->Variant->buffer, pLocale->Variant->length,
+ RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS );
+
+ if( offset + pVariant->length + 1 < n )
+ {
+ strcpy( buffer + offset, pVariant->buffer );
+ }
+
+ rtl_string_release( pVariant );
+ }
+
+ return buffer;
+ }
+
+ return nullptr;
+}
+
+/*****************************************************************************
+ convert locale string to rtl_Locale
+ *****************************************************************************/
+
+static rtl_Locale * parse_locale( const char * locale )
+{
+ assert(locale != nullptr);
+
+ if (*locale == '\0' || std::strcmp(locale, "C") == 0
+ || std::strcmp(locale, "POSIX") == 0)
+ {
+ return rtl_locale_register(u"C", u"", u"");
+ }
+
+ size_t len = strlen( locale );
+
+ rtl_uString * pLanguage = nullptr;
+ rtl_uString * pCountry = nullptr;
+ rtl_uString * pVariant = nullptr;
+
+ size_t offset = std::min<size_t>(len, 2);
+
+ rtl_Locale * ret;
+
+ /* language is a two or three letter code */
+ if( (len > 3 && locale[3] == '_') || (len == 3 && locale[2] != '_') )
+ offset = 3;
+
+ /* convert language code to unicode */
+ rtl_string2UString( &pLanguage, locale, offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
+ OSL_ASSERT(pLanguage != nullptr);
+
+ /* convert country code to unicode */
+ if( len >= offset+3 && locale[offset] == '_' )
+ {
+ rtl_string2UString( &pCountry, locale + offset + 1, 2, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
+ OSL_ASSERT(pCountry != nullptr);
+ offset += 3;
+ }
+
+ /* convert variant code to unicode - do not rely on "." as delimiter */
+ if( len > offset ) {
+ rtl_string2UString( &pVariant, locale + offset, len - offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
+ OSL_ASSERT(pVariant != nullptr);
+ }
+
+ ret = rtl_locale_register( pLanguage->buffer, pCountry ? pCountry->buffer : u"", pVariant ? pVariant->buffer : u"" );
+
+ if (pVariant) rtl_uString_release(pVariant);
+ if (pCountry) rtl_uString_release(pCountry);
+ if (pLanguage) rtl_uString_release(pLanguage);
+
+ return ret;
+}
+
+#if LO_COMMON_NLS_ARCHS
+
+/*
+ * This implementation of osl_getTextEncodingFromLocale maps
+ * from nl_langinfo_l(CODESET) to rtl_textencoding defines.
+ * nl_langinfo() is supported only on Linux, Solaris,
+ * >= NetBSD 1.6 and >= FreeBSD 4.4
+ *
+ * _nl_language_list[] is an array list of supported encodings. Because
+ * we are using a binary search, the list has to be in ascending order.
+ * We are comparing the encodings case insensitive, so the list has
+ * to be completely upper or lowercase.
+ */
+
+#if defined(__sun)
+
+/* The values in the below list can be obtained with a script like
+ * #!/bin/sh
+ * for i in `locale -a`; do
+ * LC_ALL=$i locale -k code_set_name
+ * done
+ */
+static const Pair nl_language_list[] = {
+ { "5601", RTL_TEXTENCODING_EUC_KR }, /* ko_KR.EUC */
+ { "646", RTL_TEXTENCODING_ISO_8859_1 }, /* fake: ASCII_US */
+ { "ANSI-1251", RTL_TEXTENCODING_MS_1251 }, /* ru_RU.ANSI1251 */
+ { "BIG5", RTL_TEXTENCODING_BIG5 }, /* zh_CN.BIG5 */
+ { "BIG5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* zh_CN.BIG5HK */
+ { "CNS11643", RTL_TEXTENCODING_EUC_TW }, /* zh_TW.EUC */
+ { "EUCJP", RTL_TEXTENCODING_EUC_JP }, /* ja_JP.eucjp */
+ { "GB18030", RTL_TEXTENCODING_GB_18030 }, /* zh_CN.GB18030 */
+ { "GB2312", RTL_TEXTENCODING_GB_2312 }, /* zh_CN */
+ { "GBK", RTL_TEXTENCODING_GBK }, /* zh_CN.GBK */
+ { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1 },
+ { "ISO8859-10", RTL_TEXTENCODING_ISO_8859_10 },
+ { "ISO8859-13", RTL_TEXTENCODING_ISO_8859_13 }, /* lt_LT lv_LV */
+ { "ISO8859-14", RTL_TEXTENCODING_ISO_8859_14 },
+ { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15 },
+ { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2 },
+ { "ISO8859-3", RTL_TEXTENCODING_ISO_8859_3 },
+ { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4 },
+ { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5 },
+ { "ISO8859-6", RTL_TEXTENCODING_ISO_8859_6 },
+ { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7 },
+ { "ISO8859-8", RTL_TEXTENCODING_ISO_8859_8 },
+ { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9 },
+ { "KOI8-R", RTL_TEXTENCODING_KOI8_R },
+ { "KOI8-U", RTL_TEXTENCODING_KOI8_U },
+ { "PCK", RTL_TEXTENCODING_MS_932 },
+ { "SUN_EU_GREEK", RTL_TEXTENCODING_ISO_8859_7 }, /* 8859-7 + Euro */
+ { "TIS620.2533", RTL_TEXTENCODING_MS_874 }, /* th_TH.TIS620 */
+ { "UTF-8", RTL_TEXTENCODING_UTF8 }
+};
+
+/* XXX MS-874 is an extension to tis620, so this is not
+ * really equivalent */
+
+#elif defined(LINUX) || defined(EMSCRIPTEN)
+
+#if !defined(CODESET)
+#define CODESET _NL_CTYPE_CODESET_NAME
+#endif
+
+const Pair nl_language_list[] = {
+ { "ANSI_X3.110-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-99 NAPLPS */
+ { "ANSI_X3.4-1968", RTL_TEXTENCODING_ISO_8859_1 }, /* fake: ASCII_US */
+ { "ASMO_449", RTL_TEXTENCODING_DONTKNOW }, /* ISO_9036 ARABIC7 */
+ { "BALTIC", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-179 */
+ { "BIG5", RTL_TEXTENCODING_BIG5 }, /* locale: zh_TW */
+ { "BIG5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* locale: zh_CN.BIG5HK */
+ { "BIG5HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* deprecated */
+ { "BS_4730", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-4 ISO646-GB */
+ { "BS_VIEWDATA", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-47 */
+ { "CP1250", RTL_TEXTENCODING_MS_1250 }, /* MS-EE */
+ { "CP1251", RTL_TEXTENCODING_MS_1251 }, /* MS-CYRL */
+ { "CP1252", RTL_TEXTENCODING_MS_1252 }, /* MS-ANSI */
+ { "CP1253", RTL_TEXTENCODING_MS_1253 }, /* MS-GREEK */
+ { "CP1254", RTL_TEXTENCODING_MS_1254 }, /* MS-TURK */
+ { "CP1255", RTL_TEXTENCODING_MS_1255 }, /* MS-HEBR */
+ { "CP1256", RTL_TEXTENCODING_MS_1256 }, /* MS-ARAB */
+ { "CP1257", RTL_TEXTENCODING_MS_1257 }, /* WINBALTRIM */
+ { "CSA_Z243.4-1985-1", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-121 */
+ { "CSA_Z243.4-1985-2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-122 CSA7-2 */
+ { "CSA_Z243.4-1985-GR", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-123 */
+ { "CSN_369103", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-139 */
+ { "CWI", RTL_TEXTENCODING_DONTKNOW }, /* CWI-2 CP-HU */
+ { "DEC-MCS", RTL_TEXTENCODING_DONTKNOW }, /* DEC */
+ { "DIN_66003", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-21 */
+ { "DS_2089", RTL_TEXTENCODING_DONTKNOW }, /* DS2089 ISO646-DK */
+ { "EBCDIC-AT-DE", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-AT-DE-A", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-CA-FR", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-DK-NO", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-DK-NO-A", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-ES", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-ES-A", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-ES-S", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-FI-SE", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-FI-SE-A", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-FR", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-IS-FRISS", RTL_TEXTENCODING_DONTKNOW }, /* FRISS */
+ { "EBCDIC-IT", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-PT", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-UK", RTL_TEXTENCODING_DONTKNOW },
+ { "EBCDIC-US", RTL_TEXTENCODING_DONTKNOW },
+ { "ECMA-CYRILLIC", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-111 */
+ { "ES", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-17 */
+ { "ES2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-85 */
+ { "EUC-JP", RTL_TEXTENCODING_EUC_JP }, /* locale: ja_JP.eucjp */
+ { "EUC-KR", RTL_TEXTENCODING_EUC_KR }, /* locale: ko_KR.euckr */
+ { "EUC-TW", RTL_TEXTENCODING_EUC_TW }, /* locale: zh_TW.euctw */
+ { "GB18030", RTL_TEXTENCODING_GB_18030 }, /* locale: zh_CN.gb18030 */
+ { "GB2312", RTL_TEXTENCODING_GB_2312 }, /* locale: zh_CN */
+ { "GB_1988-80", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-57 */
+ { "GBK", RTL_TEXTENCODING_GBK }, /* locale: zh_CN.GBK */
+ { "GOST_19768-74", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-153 */
+ { "GREEK-CCITT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-150 */
+ { "GREEK7", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-88 */
+ { "GREEK7-OLD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-18 */
+ { "HP-ROMAN8", RTL_TEXTENCODING_DONTKNOW }, /* ROMAN8 R8 */
+ { "IBM037", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-[US|CA|WT] */
+ { "IBM038", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-INT CP038 */
+ { "IBM1004", RTL_TEXTENCODING_DONTKNOW }, /* CP1004 OS2LATIN1 */
+ { "IBM1026", RTL_TEXTENCODING_DONTKNOW }, /* CP1026 1026 */
+ { "IBM1047", RTL_TEXTENCODING_DONTKNOW }, /* CP1047 1047 */
+ { "IBM256", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-INT1 */
+ { "IBM273", RTL_TEXTENCODING_DONTKNOW }, /* CP273 */
+ { "IBM274", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-BE CP274 */
+ { "IBM275", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-BR CP275 */
+ { "IBM277", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-[DK|NO] */
+ { "IBM278", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-[FISE]*/
+ { "IBM280", RTL_TEXTENCODING_DONTKNOW }, /* CP280 EBCDIC-CP-IT*/
+ { "IBM281", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-JP-E CP281 */
+ { "IBM284", RTL_TEXTENCODING_DONTKNOW }, /* CP284 EBCDIC-CP-ES */
+ { "IBM285", RTL_TEXTENCODING_DONTKNOW }, /* CP285 EBCDIC-CP-GB */
+ { "IBM290", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-JP-KANA */
+ { "IBM297", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-FR */
+ { "IBM420", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-AR1 */
+ { "IBM423", RTL_TEXTENCODING_DONTKNOW }, /* CP423 EBCDIC-CP-GR */
+ { "IBM424", RTL_TEXTENCODING_DONTKNOW }, /* CP424 EBCDIC-CP-HE */
+ { "IBM437", RTL_TEXTENCODING_IBM_437 }, /* CP437 437 */
+ { "IBM500", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-[BE|CH] */
+ { "IBM850", RTL_TEXTENCODING_IBM_850 }, /* CP850 850 */
+ { "IBM851", RTL_TEXTENCODING_DONTKNOW }, /* CP851 851 */
+ { "IBM852", RTL_TEXTENCODING_IBM_852 }, /* CP852 852 */
+ { "IBM855", RTL_TEXTENCODING_IBM_855 }, /* CP855 855 */
+ { "IBM857", RTL_TEXTENCODING_IBM_857 }, /* CP857 857 */
+ { "IBM860", RTL_TEXTENCODING_IBM_860 }, /* CP860 860 */
+ { "IBM861", RTL_TEXTENCODING_IBM_861 }, /* CP861 861 CP-IS */
+ { "IBM862", RTL_TEXTENCODING_IBM_862 }, /* CP862 862 */
+ { "IBM863", RTL_TEXTENCODING_IBM_863 }, /* CP863 863 */
+ { "IBM864", RTL_TEXTENCODING_IBM_864 }, /* CP864 */
+ { "IBM865", RTL_TEXTENCODING_IBM_865 }, /* CP865 865 */
+ { "IBM866", RTL_TEXTENCODING_IBM_866 }, /* CP866 866 */
+ { "IBM868", RTL_TEXTENCODING_DONTKNOW }, /* CP868 CP-AR */
+ { "IBM869", RTL_TEXTENCODING_IBM_869 }, /* CP869 869 CP-GR */
+ { "IBM870", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-[ROECE|YU] */
+ { "IBM871", RTL_TEXTENCODING_DONTKNOW }, /* CP871 EBCDIC-CP-IS */
+ { "IBM875", RTL_TEXTENCODING_DONTKNOW }, /* CP875 EBCDIC-GREEK */
+ { "IBM880", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CYRILLIC */
+ { "IBM891", RTL_TEXTENCODING_DONTKNOW }, /* CP891 */
+ { "IBM903", RTL_TEXTENCODING_DONTKNOW }, /* CP903 */
+ { "IBM904", RTL_TEXTENCODING_DONTKNOW }, /* CP904 904 */
+ { "IBM905", RTL_TEXTENCODING_DONTKNOW }, /* CP905 EBCDIC-CP-TR */
+ { "IBM918", RTL_TEXTENCODING_DONTKNOW }, /* CP918 EBCDIC-AR2 */
+ { "IEC_P27-1", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-143 */
+ { "INIS", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-49 */
+ { "INIS-8", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-50 */
+ { "INIS-CYRILLIC", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-51 */
+ { "INVARIANT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-170 */
+ { "ISO-8859-1", RTL_TEXTENCODING_ISO_8859_1 }, /* ISO-IR-100 CP819 */
+ { "ISO-8859-10", RTL_TEXTENCODING_ISO_8859_10 }, /* ISO-IR-157 LATIN6 */
+ { "ISO-8859-13", RTL_TEXTENCODING_ISO_8859_13 }, /* ISO-IR-179 LATIN7 */
+ { "ISO-8859-14", RTL_TEXTENCODING_ISO_8859_14 }, /* LATIN8 L8 */
+ { "ISO-8859-15", RTL_TEXTENCODING_ISO_8859_15 },
+ { "ISO-8859-2", RTL_TEXTENCODING_ISO_8859_2 }, /* LATIN2 L2 */
+ { "ISO-8859-3", RTL_TEXTENCODING_ISO_8859_3 }, /* LATIN3 L3 */
+ { "ISO-8859-4", RTL_TEXTENCODING_ISO_8859_4 }, /* LATIN4 L4 */
+ { "ISO-8859-5", RTL_TEXTENCODING_ISO_8859_5 }, /* CYRILLIC */
+ { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6 }, /* ECMA-114 ARABIC */
+ { "ISO-8859-7", RTL_TEXTENCODING_ISO_8859_7 }, /* ECMA-118 GREEK8 */
+ { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8 }, /* ISO_8859-8 HEBREW */
+ { "ISO-8859-9", RTL_TEXTENCODING_ISO_8859_9 }, /* ISO_8859-9 LATIN5 */
+ { "ISO-IR-90", RTL_TEXTENCODING_DONTKNOW }, /* ISO_6937-2:1983 */
+ { "ISO_10367-BOX", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-155 */
+ { "ISO_2033-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-98 E13B */
+ { "ISO_5427", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-37 KOI-7 */
+ { "ISO_5427-EXT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-54 */
+ { "ISO_5428", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-55 */
+ { "ISO_646.BASIC", RTL_TEXTENCODING_ASCII_US }, /* REF */
+ { "ISO_646.IRV", RTL_TEXTENCODING_ASCII_US }, /* ISO-IR-2 IRV */
+ { "ISO_646.IRV:1983", RTL_TEXTENCODING_ISO_8859_1 }, /* fake: ASCII_US, used for "C" locale*/
+ { "ISO_6937", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-156 ISO6937*/
+ { "ISO_6937-2-25", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-152 */
+ { "ISO_6937-2-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-142 */
+ { "ISO_8859-SUPP", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-154 */
+ { "IT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-15 */
+ { "JIS_C6220-1969-JP", RTL_TEXTENCODING_DONTKNOW }, /* KATAKANA X0201-7 */
+ { "JIS_C6220-1969-RO", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-14 */
+ { "JIS_C6229-1984-A", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-91 */
+ { "JIS_C6229-1984-B", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-92 */
+ { "JIS_C6229-1984-B-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-93 */
+ { "JIS_C6229-1984-HAND", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-94 */
+ { "JIS_C6229-1984-HAND-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-95 */
+ { "JIS_C6229-1984-KANA", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-96 */
+ { "JIS_X0201", RTL_TEXTENCODING_DONTKNOW }, /* X0201 */
+ { "JUS_I.B1.002", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-141 */
+ { "JUS_I.B1.003-MAC", RTL_TEXTENCODING_DONTKNOW }, /* MACEDONIAN */
+ { "JUS_I.B1.003-SERB", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-146 SERBIAN */
+ { "KOI-8", RTL_TEXTENCODING_DONTKNOW },
+ { "KOI8-R", RTL_TEXTENCODING_KOI8_R },
+ { "KOI8-U", RTL_TEXTENCODING_KOI8_U },
+ { "KSC5636", RTL_TEXTENCODING_DONTKNOW }, /* ISO646-KR */
+ { "LATIN-GREEK", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-19 */
+ { "LATIN-GREEK-1", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-27 */
+ { "MAC-IS", RTL_TEXTENCODING_APPLE_ROMAN },
+ { "MAC-UK", RTL_TEXTENCODING_APPLE_ROMAN },
+ { "MACINTOSH", RTL_TEXTENCODING_APPLE_ROMAN }, /* MAC */
+ { "MSZ_7795.3", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-86 */
+ { "NATS-DANO", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-9-1 */
+ { "NATS-DANO-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-9-2 */
+ { "NATS-SEFI", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-8-1 */
+ { "NATS-SEFI-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-8-2 */
+ { "NC_NC00-10", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-151 */
+ { "NEXTSTEP", RTL_TEXTENCODING_DONTKNOW }, /* NEXT */
+ { "NF_Z_62-010", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-69 */
+ { "NF_Z_62-010_(1973)", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-25 */
+ { "NS_4551-1", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-60 */
+ { "NS_4551-2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-61 */
+ { "PT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-16 */
+ { "PT2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-84 */
+ { "SAMI", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-158 */
+ { "SEN_850200_B", RTL_TEXTENCODING_DONTKNOW }, /* ISO646-[FI|SE] */
+ { "SEN_850200_C", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-11 */
+ { "T.101-G2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-128 */
+ { "T.61-7BIT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-102 */
+ { "T.61-8BIT", RTL_TEXTENCODING_DONTKNOW }, /* T.61 ISO-IR-103 */
+ { "TIS-620", RTL_TEXTENCODING_MS_874 }, /* locale: th_TH */
+ { "UTF-8", RTL_TEXTENCODING_UTF8 }, /* ISO-10646/UTF-8 */
+ { "VIDEOTEX-SUPPL", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-70 */
+ { "WIN-SAMI-2", RTL_TEXTENCODING_DONTKNOW } /* WS2 */
+};
+
+#elif defined(FREEBSD) || defined(DRAGONFLY)
+
+static const Pair nl_language_list[] = {
+ { "ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */
+ { "BIG5", RTL_TEXTENCODING_BIG5 }, /* China - Traditional Chinese */
+ { "CP1251", RTL_TEXTENCODING_MS_1251 }, /* MS-CYRL */
+ { "CP866", RTL_TEXTENCODING_IBM_866 }, /* CP866 866 */
+ { "EUCCN", RTL_TEXTENCODING_EUC_CN }, /* China - Simplified Chinese */
+ { "EUCJP", RTL_TEXTENCODING_EUC_JP }, /* Japan */
+ { "EUCKR", RTL_TEXTENCODING_EUC_KR }, /* Korea */
+ { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1 }, /* Western */
+ { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15 }, /* Western Updated (w/Euro sign) */
+ { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2 }, /* Central European */
+ { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4 }, /* LATIN4 L4 */
+ { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5 }, /* Cyrillic */
+ { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7 }, /* Greek */
+ { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9 }, /* Turkish */
+ { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* KOI8-R */
+ { "KOI8-U", RTL_TEXTENCODING_KOI8_U }, /* KOI8-U */
+ { "SJIS", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */
+ { "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */
+ { "UTF-8", RTL_TEXTENCODING_UTF8 } /* ISO-10646/UTF-8 */
+};
+
+#elif defined(NETBSD)
+
+static const Pair nl_language_list[] = {
+ { "ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */
+ { "BIG5", RTL_TEXTENCODING_BIG5 }, /* China - Traditional Chinese */
+ { "Big5", RTL_TEXTENCODING_BIG5 }, /* China - Traditional Chinese */
+ { "Big5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* locale: zh_CN.BIG5HK */
+ { "Big5HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* deprecated */
+ { "CP1251", RTL_TEXTENCODING_MS_1251 }, /* MS-CYRL */
+ { "CP866", RTL_TEXTENCODING_IBM_866 }, /* CP866 866 */
+ { "CTEXT", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */
+ { "eucCN", RTL_TEXTENCODING_EUC_CN }, /* China - Simplified Chinese */
+ { "eucJP", RTL_TEXTENCODING_EUC_JP }, /* Japan */
+ { "eucKR", RTL_TEXTENCODING_EUC_KR }, /* Korea */
+ { "eucTW", RTL_TEXTENCODING_EUC_TW }, /* China - Traditional Chinese */
+ { "GB18030", RTL_TEXTENCODING_GB_18030 }, /* locale: zh_CN.gb18030 */
+ { "GB2312", RTL_TEXTENCODING_GB_2312 }, /* locale: zh_CN */
+ { "ISO-2022-JP", RTL_TEXTENCODING_DONTKNOW }, /* */
+ { "ISO-2022-JP-2", RTL_TEXTENCODING_DONTKNOW }, /* */
+ { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1 }, /* Western */
+ { "ISO8859-13", RTL_TEXTENCODING_ISO_8859_13 }, /* ISO-IR-179 LATIN7 */
+ { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15 }, /* Western Updated (w/Euro sign) */
+ { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2 }, /* Central European */
+ { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4 }, /* LATIN4 L4 */
+ { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5 }, /* Cyrillic */
+ { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7 }, /* Greek */
+ { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9 }, /* Turkish */
+ { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* KOI8-R */
+ { "KOI8-U", RTL_TEXTENCODING_KOI8_U }, /* KOI8-U */
+ { "PT154", RTL_TEXTENCODING_PT154 }, /* */
+ { "SJIS", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */
+ { "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */
+ { "UTF-8", RTL_TEXTENCODING_UTF8 } /* ISO-10646/UTF-8 */
+};
+
+#elif defined(OPENBSD)
+
+static const Pair nl_language_list[] = {
+ { "ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */
+ { "BIG5", RTL_TEXTENCODING_BIG5 }, /* China - Traditional Chinese */
+ { "CP1251", RTL_TEXTENCODING_MS_1251 }, /* MS-CYRL */
+ { "CP866", RTL_TEXTENCODING_IBM_866 }, /* CP866 866 */
+ { "EUCCN", RTL_TEXTENCODING_EUC_CN }, /* China - Simplified Chinese */
+ { "EUCJP", RTL_TEXTENCODING_EUC_JP }, /* Japan */
+ { "EUCKR", RTL_TEXTENCODING_EUC_KR }, /* Korea */
+ { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1 }, /* Western */
+ { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15 }, /* Western Updated (w/Euro sign) */
+ { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2 }, /* Central European */
+ { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4 }, /* LATIN4 L4 */
+ { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5 }, /* Cyrillic */
+ { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7 }, /* Greek */
+ { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9 }, /* Turkish */
+ { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* KOI8-R */
+ { "KOI8-U", RTL_TEXTENCODING_KOI8_U }, /* KOI8-U */
+ { "SJIS", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */
+ { "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */
+ { "UTF-8", RTL_TEXTENCODING_UTF8 } /* ISO-10646/UTF-8 */
+};
+
+#else
+#error Unhandled individual LO_COMMON_NLS_ARCHS
+#endif // individual common NLS archs
+
+/*****************************************************************************
+ return the text encoding corresponding to the given locale
+ *****************************************************************************/
+
+rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale )
+{
+ const Pair *language=nullptr;
+
+ char locale_buf[64] = "";
+ char codeset_buf[64];
+
+ char *codeset = nullptr;
+
+ /* default to process locale if pLocale == NULL */
+ if( pLocale == nullptr )
+ osl_getProcessLocale( &pLocale );
+
+ /* convert rtl_Locale to locale string */
+ compose_locale( pLocale, locale_buf, 64 );
+
+ locale_t ctype_locale = newlocale(
+ LC_CTYPE_MASK, locale_buf, static_cast<locale_t>(0));
+ if (ctype_locale == static_cast<locale_t>(0))
+ {
+ return RTL_TEXTENCODING_DONTKNOW;
+ }
+
+ /* get the charset as indicated by the LC_CTYPE locale */
+#if defined(NETBSD) && !defined(CODESET)
+ codeset = NULL;
+#else
+ codeset = nl_langinfo_l(CODESET, ctype_locale);
+ // per SUSv4, the return value of nl_langinfo_l can be invalidated by a
+ // subsequent call to nl_langinfo (not nl_langinfo_l) in any thread, but
+ // we cannot guard against that (at least, no code in LO itself should
+ // call nl_langinfo)
+#endif
+
+ if ( codeset != nullptr )
+ {
+ /* get codeset into mt save memory */
+ strncpy( codeset_buf, codeset, sizeof(codeset_buf) );
+ codeset_buf[sizeof(codeset_buf) - 1] = 0;
+ codeset = codeset_buf;
+ }
+
+ freelocale(ctype_locale);
+
+ /* search the codeset in our language list */
+ if ( codeset != nullptr )
+ {
+ language = pair_search (codeset, nl_language_list, SAL_N_ELEMENTS( nl_language_list ) );
+ }
+
+ OSL_ASSERT( language && ( RTL_TEXTENCODING_DONTKNOW != language->value ) );
+
+ /* a matching item in our list provides a mapping from codeset to
+ * rtl-codeset */
+ if ( language != nullptr )
+ return language->value;
+
+ return RTL_TEXTENCODING_DONTKNOW;
+}
+
+/*****************************************************************************
+ return the current process locale
+ *****************************************************************************/
+
+void imp_getProcessLocale( rtl_Locale ** ppLocale )
+{
+ char const * locale = getenv("LC_ALL");
+ if (locale == nullptr || *locale == '\0') {
+ locale = getenv("LC_CTYPE");
+ if (locale == nullptr || *locale == '\0') {
+ locale = getenv("LANG");
+ if (locale == nullptr || *locale == '\0') {
+ locale = "C";
+ }
+ }
+ }
+ // coverity[overrun-buffer-val : FALSE] - coverity gets this very wrong
+ *ppLocale = parse_locale(locale);
+}
+
+#else // !LO_COMMON_NLS_ARCHS
+
+/*
+ * This implementation of osl_getTextEncodingFromLocale maps
+ * from the ISO language codes.
+ */
+
+const Pair full_locale_list[] = {
+ { "ja_JP.eucJP", RTL_TEXTENCODING_EUC_JP },
+ { "ja_JP.EUC", RTL_TEXTENCODING_EUC_JP },
+ { "ko_KR.EUC", RTL_TEXTENCODING_EUC_KR },
+ { "zh_CN.EUC", RTL_TEXTENCODING_EUC_CN },
+ { "zh_TW.EUC", RTL_TEXTENCODING_EUC_TW }
+};
+
+const Pair locale_extension_list[] = {
+ { "big5", RTL_TEXTENCODING_BIG5 },
+ { "big5hk", RTL_TEXTENCODING_BIG5_HKSCS },
+ { "gb18030", RTL_TEXTENCODING_GB_18030 },
+ { "euc", RTL_TEXTENCODING_EUC_JP },
+ { "iso8859-1", RTL_TEXTENCODING_ISO_8859_1 },
+ { "iso8859-10", RTL_TEXTENCODING_ISO_8859_10 },
+ { "iso8859-13", RTL_TEXTENCODING_ISO_8859_13 },
+ { "iso8859-14", RTL_TEXTENCODING_ISO_8859_14 },
+ { "iso8859-15", RTL_TEXTENCODING_ISO_8859_15 },
+ { "iso8859-2", RTL_TEXTENCODING_ISO_8859_2 },
+ { "iso8859-3", RTL_TEXTENCODING_ISO_8859_3 },
+ { "iso8859-4", RTL_TEXTENCODING_ISO_8859_4 },
+ { "iso8859-5", RTL_TEXTENCODING_ISO_8859_5 },
+ { "iso8859-6", RTL_TEXTENCODING_ISO_8859_6 },
+ { "iso8859-7", RTL_TEXTENCODING_ISO_8859_7 },
+ { "iso8859-8", RTL_TEXTENCODING_ISO_8859_8 },
+ { "iso8859-9", RTL_TEXTENCODING_ISO_8859_9 },
+ { "koi8-r", RTL_TEXTENCODING_KOI8_R },
+ { "koi8-u", RTL_TEXTENCODING_KOI8_U },
+ { "pck", RTL_TEXTENCODING_MS_932 },
+#if (0)
+ { "sun_eu_greek", RTL_TEXTENCODING_DONTKNOW },
+#endif
+ { "utf-16", RTL_TEXTENCODING_UNICODE },
+ { "utf-7", RTL_TEXTENCODING_UTF7 },
+ { "utf-8", RTL_TEXTENCODING_UTF8 }
+};
+
+const Pair iso_language_list[] = {
+ { "af", RTL_TEXTENCODING_ISO_8859_1 },
+ { "ar", RTL_TEXTENCODING_ISO_8859_6 },
+ { "az", RTL_TEXTENCODING_ISO_8859_9 },
+ { "be", RTL_TEXTENCODING_ISO_8859_5 },
+ { "bg", RTL_TEXTENCODING_ISO_8859_5 },
+ { "ca", RTL_TEXTENCODING_ISO_8859_1 },
+ { "cs", RTL_TEXTENCODING_ISO_8859_2 },
+ { "da", RTL_TEXTENCODING_ISO_8859_1 },
+ { "de", RTL_TEXTENCODING_ISO_8859_1 },
+ { "el", RTL_TEXTENCODING_ISO_8859_7 },
+ { "en", RTL_TEXTENCODING_ISO_8859_1 },
+ { "es", RTL_TEXTENCODING_ISO_8859_1 },
+ { "et", RTL_TEXTENCODING_ISO_8859_4 },
+ { "eu", RTL_TEXTENCODING_ISO_8859_1 },
+ { "fa", RTL_TEXTENCODING_ISO_8859_6 },
+ { "fi", RTL_TEXTENCODING_ISO_8859_1 },
+ { "fo", RTL_TEXTENCODING_ISO_8859_1 },
+ { "fr", RTL_TEXTENCODING_ISO_8859_1 },
+ { "gr", RTL_TEXTENCODING_ISO_8859_7 },
+ { "he", RTL_TEXTENCODING_ISO_8859_8 },
+ { "hi", RTL_TEXTENCODING_DONTKNOW },
+ { "hr", RTL_TEXTENCODING_ISO_8859_2 },
+ { "hu", RTL_TEXTENCODING_ISO_8859_2 },
+ { "hy", RTL_TEXTENCODING_DONTKNOW },
+ { "id", RTL_TEXTENCODING_ISO_8859_1 },
+ { "is", RTL_TEXTENCODING_ISO_8859_1 },
+ { "it", RTL_TEXTENCODING_ISO_8859_1 },
+ { "iw", RTL_TEXTENCODING_ISO_8859_8 },
+ { "ja", RTL_TEXTENCODING_EUC_JP },
+ { "ka", RTL_TEXTENCODING_DONTKNOW },
+ { "kk", RTL_TEXTENCODING_ISO_8859_5 },
+ { "ko", RTL_TEXTENCODING_EUC_KR },
+ { "lt", RTL_TEXTENCODING_ISO_8859_4 },
+ { "lv", RTL_TEXTENCODING_ISO_8859_4 },
+ { "mk", RTL_TEXTENCODING_ISO_8859_5 },
+ { "mr", RTL_TEXTENCODING_DONTKNOW },
+ { "ms", RTL_TEXTENCODING_ISO_8859_1 },
+ { "nl", RTL_TEXTENCODING_ISO_8859_1 },
+ { "no", RTL_TEXTENCODING_ISO_8859_1 },
+ { "pl", RTL_TEXTENCODING_ISO_8859_2 },
+ { "pt", RTL_TEXTENCODING_ISO_8859_1 },
+ { "ro", RTL_TEXTENCODING_ISO_8859_2 },
+ { "ru", RTL_TEXTENCODING_ISO_8859_5 },
+ { "sa", RTL_TEXTENCODING_DONTKNOW },
+ { "sk", RTL_TEXTENCODING_ISO_8859_2 },
+ { "sl", RTL_TEXTENCODING_ISO_8859_2 },
+ { "sq", RTL_TEXTENCODING_ISO_8859_2 },
+ { "sv", RTL_TEXTENCODING_ISO_8859_1 },
+ { "sw", RTL_TEXTENCODING_ISO_8859_1 },
+ { "ta", RTL_TEXTENCODING_DONTKNOW },
+ { "th", RTL_TEXTENCODING_DONTKNOW },
+ { "tr", RTL_TEXTENCODING_ISO_8859_9 },
+ { "tt", RTL_TEXTENCODING_ISO_8859_5 },
+ { "uk", RTL_TEXTENCODING_ISO_8859_5 },
+ { "ur", RTL_TEXTENCODING_ISO_8859_6 },
+ { "uz", RTL_TEXTENCODING_ISO_8859_9 },
+ { "vi", RTL_TEXTENCODING_DONTKNOW },
+ { "zh", RTL_TEXTENCODING_BIG5 }
+};
+
+/*****************************************************************************
+ return the text encoding corresponding to the given locale
+ *****************************************************************************/
+
+rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale )
+{
+ const Pair *language = nullptr;
+ char locale_buf[64] = "";
+
+ /* default to process locale if pLocale == NULL */
+ if( nullptr == pLocale )
+ osl_getProcessLocale( &pLocale );
+
+ /* convert rtl_Locale to locale string */
+ if( compose_locale( pLocale, locale_buf, 64 ) )
+ {
+ /* check special handling list (EUC) first */
+ language = pair_search( locale_buf, full_locale_list, SAL_N_ELEMENTS( full_locale_list ) );
+
+ if( nullptr == language )
+ {
+ /*
+ * check if there is a charset qualifier at the end of the given locale string
+ * e.g. de.ISO8859-15 or de.ISO8859-15@euro which strongly indicates what
+ * charset to use
+ */
+ char* cp = strrchr( locale_buf, '.' );
+
+ if( nullptr != cp )
+ {
+ language = pair_search( cp + 1, locale_extension_list, SAL_N_ELEMENTS( locale_extension_list ) );
+ }
+ }
+
+ /* use iso language code to determine the charset */
+ if( nullptr == language )
+ {
+ /* iso lang codes have 2 characters */
+ locale_buf[2] = '\0';
+
+ language = pair_search( locale_buf, iso_language_list, SAL_N_ELEMENTS( iso_language_list ) );
+ }
+ }
+
+ /* a matching item in our list provides a mapping from codeset to
+ * rtl-codeset */
+ if ( language != nullptr )
+ return language->value;
+
+ return RTL_TEXTENCODING_DONTKNOW;
+}
+
+#if defined(MACOSX) || defined(IOS)
+
+/*****************************************************************************
+ return the current process locale
+ *****************************************************************************/
+
+void imp_getProcessLocale( rtl_Locale ** ppLocale )
+{
+ OUString loc16(macosx_getLocale());
+ OString locale;
+ if (!loc16.convertToString(
+ &locale, RTL_TEXTENCODING_UTF8,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)))
+ {
+ SAL_INFO("sal.osl", "Cannot convert \"" << loc16 << "\" to UTF-8");
+ }
+
+ /* handle the case where OS specific method of finding locale fails */
+ if ( locale.isEmpty() )
+ {
+ /* simulate behavior of setlocale */
+ locale = getenv( "LC_ALL" );
+
+ if( locale.isEmpty() )
+ locale = getenv( "LC_CTYPE" );
+
+ if( locale.isEmpty() )
+ locale = getenv( "LANG" );
+
+ if( locale.isEmpty() )
+ locale = "C";
+ }
+
+ /* return the locale */
+ *ppLocale = parse_locale( locale.getStr() );
+}
+
+#else // !MACOSX && !IOS
+
+/*****************************************************************************
+ return the current process locale
+ *****************************************************************************/
+
+void imp_getProcessLocale( rtl_Locale ** ppLocale )
+{
+#ifdef ANDROID
+ /* No locale environment variables on Android, so why even bother
+ * with getenv().
+ */
+ const char* locale = "en-US.UTF-8";
+#else
+ /* simulate behavior off setlocale */
+ const char* locale = getenv("LC_ALL");
+
+ if( NULL == locale )
+ locale = getenv( "LC_CTYPE" );
+
+ if( NULL == locale )
+ locale = getenv( "LANG" );
+
+ if( NULL == locale )
+ locale = "C";
+
+#endif
+ *ppLocale = parse_locale( locale );
+}
+
+#endif // !MACOSX && !IOS
+#endif // !LO_COMMON_NLS_ARCHS
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/nlsupport.hxx b/sal/osl/unx/nlsupport.hxx
new file mode 100644
index 000000000..ba5acf23c
--- /dev/null
+++ b/sal/osl/unx/nlsupport.hxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_NLSUPPORT_HXX
+#define INCLUDED_SAL_OSL_UNX_NLSUPPORT_HXX
+
+#include <sal/config.h>
+
+#include <rtl/locale.h>
+
+namespace rtl
+{
+class OUString;
+}
+
+void imp_getProcessLocale(rtl_Locale**);
+
+#if defined IOS || defined MACOSX
+OUString macosx_getLocale();
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/osxlocale.cxx b/sal/osl/unx/osxlocale.cxx
new file mode 100644
index 000000000..f82ea1436
--- /dev/null
+++ b/sal/osl/unx/osxlocale.cxx
@@ -0,0 +1,104 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <assert.h>
+
+#include <premac.h>
+#ifndef IOS
+#include <CoreServices/CoreServices.h>
+#endif
+#include <CoreFoundation/CoreFoundation.h>
+#include <postmac.h>
+
+#include <rtl/ustrbuf.hxx>
+
+#include "nlsupport.hxx"
+
+namespace
+{
+ template <typename T>
+ class CFGuard
+ {
+ public:
+ explicit CFGuard(T& rT) : rT_(rT) {}
+ ~CFGuard() { if (rT_) CFRelease(rT_); }
+ private:
+ T& rT_;
+ };
+
+ typedef CFGuard<CFArrayRef> CFArrayGuard;
+ typedef CFGuard<CFStringRef> CFStringGuard;
+ typedef CFGuard<CFPropertyListRef> CFPropertyListGuard;
+
+ /** Get the current process locale from system
+ */
+ CFStringRef getProcessLocale()
+ {
+ CFPropertyListRef pref = CFPreferencesCopyAppValue(CFSTR("AppleLanguages"), kCFPreferencesCurrentApplication);
+ CFPropertyListGuard proplGuard(pref);
+
+ if (pref == nullptr) // return fallback value 'en_US'
+ return CFStringCreateWithCString(kCFAllocatorDefault, "en_US", kCFStringEncodingASCII);
+
+ CFStringRef sref = (CFGetTypeID(pref) == CFArrayGetTypeID()) ? static_cast<CFStringRef>(CFArrayGetValueAtIndex(static_cast<CFArrayRef>(pref), 0)) : static_cast<CFStringRef>(pref);
+
+ return CFLocaleCreateCanonicalLocaleIdentifierFromString(kCFAllocatorDefault, sref);
+ }
+
+ void append(OUStringBuffer & buffer, CFStringRef string) {
+ CFIndex n = CFStringGetLength(string);
+ CFStringGetCharacters(
+ string, CFRangeMake(0, n),
+ reinterpret_cast<UniChar *>(buffer.appendUninitialized(n)));
+ }
+}
+
+/** Grab current locale from system.
+*/
+OUString macosx_getLocale()
+{
+ CFStringRef sref = getProcessLocale();
+ CFStringGuard sGuard(sref);
+
+ assert(sref != nullptr && "osxlocale.cxx: getProcessLocale must return a non-NULL value");
+
+ // split the string into substrings; the first two (if there are two) substrings
+ // are language and country
+ CFArrayRef subs = CFStringCreateArrayBySeparatingStrings(nullptr, sref, CFSTR("-"));
+ CFArrayGuard arrGuard(subs);
+
+ OUStringBuffer buf;
+ append(buf, static_cast<CFStringRef>(CFArrayGetValueAtIndex(subs, 0)));
+
+ // country also available? Assumption: if the array contains more than one
+ // value the second value is always the country!
+ if (CFArrayGetCount(subs) > 1)
+ {
+ buf.append("_");
+ append(buf, static_cast<CFStringRef>(CFArrayGetValueAtIndex(subs, 1)));
+ }
+ // Append 'UTF-8' to the locale because the macOS file
+ // system interface is UTF-8 based and sal tries to determine
+ // the file system locale from the locale information
+ buf.append(".UTF-8");
+ return buf.makeStringAndClear();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/pipe.cxx b/sal/osl/unx/pipe.cxx
new file mode 100644
index 000000000..45d31e008
--- /dev/null
+++ b/sal/osl/unx/pipe.cxx
@@ -0,0 +1,523 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.hxx"
+
+#include <o3tl/safeint.hxx>
+#include <osl/pipe.h>
+#include <osl/diagnose.h>
+#include <osl/thread.h>
+#include <osl/interlck.h>
+#include <rtl/string.h>
+#include <rtl/ustring.h>
+#include <rtl/bootstrap.hxx>
+#include <sal/log.hxx>
+
+#include "sockimpl.hxx"
+#include "secimpl.hxx"
+#include "unixerrnostring.hxx"
+
+#include <cassert>
+#include <cstring>
+
+constexpr OStringLiteral PIPEDEFAULTPATH = "/tmp";
+constexpr OStringLiteral PIPEALTERNATEPATH = "/var/tmp";
+
+static oslPipe osl_psz_createPipe(const char *pszPipeName, oslPipeOptions Options, oslSecurity Security);
+
+struct
+{
+ int errcode;
+ oslPipeError error;
+} const PipeError[]= {
+ { 0, osl_Pipe_E_None }, /* no error */
+ { EPROTOTYPE, osl_Pipe_E_NoProtocol }, /* Protocol wrong type for socket */
+ { ENOPROTOOPT, osl_Pipe_E_NoProtocol }, /* Protocol not available */
+ { EPROTONOSUPPORT, osl_Pipe_E_NoProtocol }, /* Protocol not supported */
+#ifdef ESOCKTNOSUPPORT
+ { ESOCKTNOSUPPORT, osl_Pipe_E_NoProtocol }, /* Socket type not supported */
+#endif
+ { EPFNOSUPPORT, osl_Pipe_E_NoProtocol }, /* Protocol family not supported */
+ { EAFNOSUPPORT, osl_Pipe_E_NoProtocol }, /* Address family not supported by */
+ /* protocol family */
+ { ENETRESET, osl_Pipe_E_NetworkReset }, /* Network dropped connection because */
+ /* of reset */
+ { ECONNABORTED, osl_Pipe_E_ConnectionAbort }, /* Software caused connection abort */
+ { ECONNRESET, osl_Pipe_E_ConnectionReset }, /* Connection reset by peer */
+ { ENOBUFS, osl_Pipe_E_NoBufferSpace }, /* No buffer space available */
+ { ETIMEDOUT, osl_Pipe_E_TimedOut }, /* Connection timed out */
+ { ECONNREFUSED, osl_Pipe_E_ConnectionRefused }, /* Connection refused */
+ { -1, osl_Pipe_E_invalidError }
+};
+
+static oslPipeError osl_PipeErrorFromNative(int nativeType)
+{
+ int i = 0;
+
+ while ((PipeError[i].error != osl_Pipe_E_invalidError) &&
+ (PipeError[i].errcode != nativeType))
+ {
+ i++;
+ }
+
+ return PipeError[i].error;
+}
+
+static oslPipe createPipeImpl()
+{
+ oslPipe pPipeImpl;
+
+ pPipeImpl = static_cast< oslPipe >(calloc(1, sizeof(struct oslPipeImpl)));
+ if (!pPipeImpl)
+ return nullptr;
+
+ pPipeImpl->m_nRefCount = 1;
+ pPipeImpl->m_bClosed = false;
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ pPipeImpl->m_bIsInShutdown = false;
+ pPipeImpl->m_bIsAccepting = false;
+#endif
+
+ return pPipeImpl;
+}
+
+static void destroyPipeImpl(oslPipe pImpl)
+{
+ if (pImpl)
+ free(pImpl);
+}
+
+oslPipe SAL_CALL osl_createPipe(rtl_uString *ustrPipeName, oslPipeOptions Options, oslSecurity Security)
+{
+ oslPipe pPipe = nullptr;
+ rtl_String* strPipeName = nullptr;
+
+ if (ustrPipeName)
+ {
+ rtl_uString2String(&strPipeName,
+ rtl_uString_getStr(ustrPipeName),
+ rtl_uString_getLength(ustrPipeName),
+ osl_getThreadTextEncoding(),
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+ char* pszPipeName = rtl_string_getStr(strPipeName);
+ pPipe = osl_psz_createPipe(pszPipeName, Options, Security);
+
+ if (strPipeName)
+ rtl_string_release(strPipeName);
+ }
+
+ return pPipe;
+
+}
+
+static OString
+getBootstrapSocketPath()
+{
+ OUString pValue;
+
+ if (rtl::Bootstrap::get("OSL_SOCKET_PATH", pValue))
+ {
+ return OUStringToOString(pValue, RTL_TEXTENCODING_UTF8);
+ }
+ return "";
+}
+
+static oslPipe osl_psz_createPipe(const char *pszPipeName, oslPipeOptions Options,
+ oslSecurity Security)
+{
+ int Flags;
+ size_t len;
+ struct sockaddr_un addr;
+
+ OString name;
+ oslPipe pPipe;
+
+ if (access(PIPEDEFAULTPATH.getStr(), W_OK) == 0)
+ name = PIPEDEFAULTPATH;
+ else if (access(PIPEALTERNATEPATH.getStr(), W_OK) == 0)
+ name = PIPEALTERNATEPATH;
+ else {
+ name = getBootstrapSocketPath ();
+ }
+
+ name += "/";
+
+ if (Security)
+ {
+ char Ident[256];
+
+ Ident[0] = '\0';
+
+ OSL_VERIFY(osl_psz_getUserIdent(Security, Ident, sizeof(Ident)));
+
+ name += OString::Concat("OSL_PIPE_") + Ident + "_" + pszPipeName;
+ }
+ else
+ {
+ name += OString::Concat("OSL_PIPE_") + pszPipeName;
+ }
+
+ if (o3tl::make_unsigned(name.getLength()) >= sizeof addr.sun_path)
+ {
+ SAL_WARN("sal.osl.pipe", "osl_createPipe: pipe name too long");
+ return nullptr;
+ }
+
+ /* alloc memory */
+ pPipe = createPipeImpl();
+
+ if (!pPipe)
+ return nullptr;
+
+ /* create socket */
+ pPipe->m_Socket = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (pPipe->m_Socket < 0)
+ {
+ SAL_WARN("sal.osl.pipe", "socket() failed: " << UnixErrnoString(errno));
+ destroyPipeImpl(pPipe);
+ return nullptr;
+ }
+
+ /* set close-on-exec flag */
+ if ((Flags = fcntl(pPipe->m_Socket, F_GETFD, 0)) != -1)
+ {
+ Flags |= FD_CLOEXEC;
+ if (fcntl(pPipe->m_Socket, F_SETFD, Flags) == -1)
+ {
+ SAL_WARN("sal.osl.pipe", "fcntl() failed: " << UnixErrnoString(errno));
+ }
+ }
+
+ memset(&addr, 0, sizeof(addr));
+
+ SAL_INFO("sal.osl.pipe", "new pipe on fd " << pPipe->m_Socket << " '" << name << "'");
+
+ addr.sun_family = AF_UNIX;
+ // coverity[fixed_size_dest : FALSE] - safe, see check above
+ strcpy(addr.sun_path, name.getStr());
+#if defined(FREEBSD)
+ len = SUN_LEN(&addr);
+#else
+ len = sizeof(addr);
+#endif
+
+ if (Options & osl_Pipe_CREATE)
+ {
+ struct stat status;
+
+ /* check if there exists an orphan filesystem entry */
+ if ((stat(name.getStr(), &status) == 0) &&
+ (S_ISSOCK(status.st_mode) || S_ISFIFO(status.st_mode)))
+ {
+ if (connect(pPipe->m_Socket, reinterpret_cast< sockaddr* >(&addr), len) >= 0)
+ {
+ close (pPipe->m_Socket);
+ destroyPipeImpl(pPipe);
+ return nullptr;
+ }
+
+ unlink(name.getStr());
+ }
+
+ /* ok, fs clean */
+ if (bind(pPipe->m_Socket, reinterpret_cast< sockaddr* >(&addr), len) < 0)
+ {
+ SAL_WARN("sal.osl.pipe", "bind() failed: " << UnixErrnoString(errno));
+ close(pPipe->m_Socket);
+ destroyPipeImpl(pPipe);
+ return nullptr;
+ }
+
+ /* Only give access to all if no security handle was specified, otherwise security
+ depends on umask */
+
+ if (!Security)
+ (void)chmod(name.getStr(),S_IRWXU | S_IRWXG |S_IRWXO);
+
+ strcpy(pPipe->m_Name, name.getStr()); // safe, see check above
+
+ if (listen(pPipe->m_Socket, 5) < 0)
+ {
+ SAL_WARN("sal.osl.pipe", "listen() failed: " << UnixErrnoString(errno));
+ // cid#1255391 warns about unlink(name) after stat(name, &status)
+ // above, but the intervening call to bind makes those two clearly
+ // unrelated, as it would fail if name existed at that point in
+ // time:
+ // coverity[toctou] - this is bogus
+ unlink(name.getStr()); /* remove filesystem entry */
+ close(pPipe->m_Socket);
+ destroyPipeImpl(pPipe);
+ return nullptr;
+ }
+
+ return pPipe;
+ }
+
+ /* osl_pipe_OPEN */
+ if (access(name.getStr(), F_OK) != -1)
+ {
+ if (connect(pPipe->m_Socket, reinterpret_cast< sockaddr* >(&addr), len) >= 0)
+ return pPipe;
+
+ SAL_WARN("sal.osl.pipe", "connect() failed: " << UnixErrnoString(errno));
+ }
+
+ close (pPipe->m_Socket);
+ destroyPipeImpl(pPipe);
+ return nullptr;
+}
+
+void SAL_CALL osl_acquirePipe(oslPipe pPipe)
+{
+ osl_atomic_increment(&(pPipe->m_nRefCount));
+}
+
+void SAL_CALL osl_releasePipe(oslPipe pPipe)
+{
+ if (!pPipe)
+ return;
+
+ if (osl_atomic_decrement(&(pPipe->m_nRefCount)) == 0)
+ {
+ if (!pPipe->m_bClosed)
+ osl_closePipe(pPipe);
+
+ destroyPipeImpl(pPipe);
+ }
+}
+
+void SAL_CALL osl_closePipe(oslPipe pPipe)
+{
+ int nRet;
+ int ConnFD;
+
+ if (!pPipe)
+ return;
+
+ if (pPipe->m_bClosed)
+ return;
+
+ ConnFD = pPipe->m_Socket;
+
+ /* Thread does not return from accept on linux, so
+ connect to the accepting pipe
+ */
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ struct sockaddr_un addr;
+
+ if (pPipe->m_bIsAccepting)
+ {
+ pPipe->m_bIsInShutdown = true;
+ pPipe->m_Socket = -1;
+
+ int fd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd < 0)
+ {
+ SAL_WARN("sal.osl.pipe", "socket() failed: " << UnixErrnoString(errno));
+ return;
+ }
+
+ memset(&addr, 0, sizeof(addr));
+
+ SAL_INFO("sal.osl.pipe", "osl_destroyPipe : Pipe Name '" << pPipe->m_Name << "'");
+
+ addr.sun_family = AF_UNIX;
+ strcpy(addr.sun_path, pPipe->m_Name); // safe, as both are same size
+
+ nRet = connect(fd, reinterpret_cast< sockaddr* >(&addr), sizeof(addr));
+ if (nRet < 0)
+ SAL_WARN("sal.osl.pipe", "connect() failed: " << UnixErrnoString(errno));
+
+ close(fd);
+ }
+#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */
+
+ nRet = shutdown(ConnFD, 2);
+ if (nRet < 0)
+ SAL_WARN("sal.osl.pipe", "shutdown() failed: " << UnixErrnoString(errno));
+
+ nRet = close(ConnFD);
+ if (nRet < 0)
+ SAL_WARN("sal.osl.pipe", "close() failed: " << UnixErrnoString(errno));
+
+ /* remove filesystem entry */
+ if (pPipe->m_Name[0] != '\0')
+ unlink(pPipe->m_Name);
+
+ pPipe->m_bClosed = true;
+}
+
+oslPipe SAL_CALL osl_acceptPipe(oslPipe pPipe)
+{
+ int s;
+ oslPipe pAcceptedPipe;
+
+ SAL_WARN_IF(!pPipe, "sal.osl.pipe", "invalid pipe");
+ if (!pPipe)
+ return nullptr;
+
+ assert(pPipe->m_Name[0] != '\0'); // you cannot have an empty pipe name
+
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ pPipe->m_bIsAccepting = true;
+#endif
+
+ s = accept(pPipe->m_Socket, nullptr, nullptr);
+
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ pPipe->m_bIsAccepting = false;
+#endif
+
+ if (s < 0)
+ {
+ SAL_WARN("sal.osl.pipe", "accept() failed: " << UnixErrnoString(errno));
+ return nullptr;
+ }
+
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ if (pPipe->m_bIsInShutdown)
+ {
+ close(s);
+ return nullptr;
+ }
+#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */
+
+ /* alloc memory */
+ pAcceptedPipe = createPipeImpl();
+
+ assert(pAcceptedPipe); // should never be the case that an oslPipe cannot be initialized
+ if (!pAcceptedPipe)
+ {
+ close(s);
+ return nullptr;
+ }
+
+ /* set close-on-exec flag */
+ int flags;
+ if ((flags = fcntl(s, F_GETFD, 0)) >= 0)
+ {
+ flags |= FD_CLOEXEC;
+ if (fcntl(s, F_SETFD, flags) < 0)
+ SAL_WARN("sal.osl.pipe", "fcntl() failed: " << UnixErrnoString(errno));
+ }
+
+ pAcceptedPipe->m_Socket = s;
+
+ return pAcceptedPipe;
+}
+
+sal_Int32 SAL_CALL osl_receivePipe(oslPipe pPipe,
+ void* pBuffer,
+ sal_Int32 BytesToRead)
+{
+ int nRet = 0;
+
+ SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_receivePipe: invalid pipe");
+ if (!pPipe)
+ {
+ SAL_WARN("sal.osl.pipe", "osl_receivePipe: Invalid socket");
+ errno=EINVAL;
+ return -1;
+ }
+
+ nRet = recv(pPipe->m_Socket, pBuffer, BytesToRead, 0);
+
+ if (nRet < 0)
+ SAL_WARN("sal.osl.pipe", "recv() failed: " << UnixErrnoString(errno));
+
+ return nRet;
+}
+
+sal_Int32 SAL_CALL osl_sendPipe(oslPipe pPipe,
+ const void* pBuffer,
+ sal_Int32 BytesToSend)
+{
+ int nRet=0;
+
+ SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_sendPipe: invalid pipe");
+ if (!pPipe)
+ {
+ SAL_WARN("sal.osl.pipe", "osl_sendPipe: Invalid socket");
+ errno=EINVAL;
+ return -1;
+ }
+
+ nRet = send(pPipe->m_Socket, pBuffer, BytesToSend, 0);
+
+ if (nRet <= 0)
+ SAL_WARN("sal.osl.pipe", "send() failed: " << UnixErrnoString(errno));
+
+ return nRet;
+}
+
+oslPipeError SAL_CALL osl_getLastPipeError(SAL_UNUSED_PARAMETER oslPipe)
+{
+ return osl_PipeErrorFromNative(errno);
+}
+
+sal_Int32 SAL_CALL osl_writePipe(oslPipe pPipe, const void *pBuffer, sal_Int32 n)
+{
+ /* loop until all desired bytes were send or an error occurred */
+ sal_Int32 BytesSend = 0;
+ sal_Int32 BytesToSend = n;
+
+ SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_writePipe: invalid pipe"); // osl_sendPipe detects invalid pipe
+ while (BytesToSend > 0)
+ {
+ sal_Int32 RetVal;
+
+ RetVal= osl_sendPipe(pPipe, pBuffer, BytesToSend);
+
+ /* error occurred? */
+ if (RetVal <= 0)
+ break;
+
+ BytesToSend -= RetVal;
+ BytesSend += RetVal;
+ pBuffer= static_cast< char const* >(pBuffer) + RetVal;
+ }
+
+ return BytesSend;
+}
+
+sal_Int32 SAL_CALL osl_readPipe( oslPipe pPipe, void *pBuffer , sal_Int32 n )
+{
+ /* loop until all desired bytes were read or an error occurred */
+ sal_Int32 BytesRead = 0;
+ sal_Int32 BytesToRead = n;
+
+ SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_readPipe: invalid pipe"); // osl_receivePipe detects invalid pipe
+ while (BytesToRead > 0)
+ {
+ sal_Int32 RetVal;
+ RetVal= osl_receivePipe(pPipe, pBuffer, BytesToRead);
+
+ /* error occurred? */
+ if (RetVal <= 0)
+ break;
+
+ BytesToRead -= RetVal;
+ BytesRead += RetVal;
+ pBuffer= static_cast< char* >(pBuffer) + RetVal;
+ }
+
+ return BytesRead;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/process.cxx b/sal/osl/unx/process.cxx
new file mode 100644
index 000000000..f75534fdc
--- /dev/null
+++ b/sal/osl/unx/process.cxx
@@ -0,0 +1,1194 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+#include <rtl/ustring.hxx>
+
+#include <cassert>
+
+/*
+ * ToDo:
+ * - cleanup of process status things
+ * - cleanup of process spawning
+ * - cleanup of resource transfer
+ */
+
+#if defined(__sun)
+ // The procfs may only be used without LFS in 32bits.
+# ifdef _FILE_OFFSET_BITS
+# undef _FILE_OFFSET_BITS
+# endif
+#endif
+
+#if defined(FREEBSD) || defined(NETBSD) || defined(DRAGONFLY)
+#include <machine/param.h>
+#endif
+
+#include "system.hxx"
+#include "unixerrnostring.hxx"
+#if defined(__sun)
+# include <sys/procfs.h>
+#endif
+#include <osl/diagnose.h>
+#include <osl/mutex.h>
+#include <osl/process.h>
+#include <osl/conditn.h>
+#include <osl/thread.h>
+#include <osl/file.h>
+#include <osl/file.hxx>
+#include <osl/signal.h>
+#include <rtl/alloc.h>
+#include <sal/log.hxx>
+
+#include <grp.h>
+
+#include "createfilehandlefromfd.hxx"
+#include "file_url.hxx"
+#include "readwrite_helper.hxx"
+#include "sockimpl.hxx"
+#include "secimpl.hxx"
+
+#define MAX_ARGS 255
+#define MAX_ENVS 255
+
+namespace
+{
+
+struct oslProcessImpl {
+ pid_t m_pid;
+ oslCondition m_terminated;
+ int m_status;
+ oslProcessImpl* m_pnext;
+};
+
+struct ProcessData
+{
+ const char* m_pszArgs[MAX_ARGS + 1];
+ const char* m_pszDir;
+ char* m_pszEnv[MAX_ENVS + 1];
+ uid_t m_uid;
+ gid_t m_gid;
+ char* m_name;
+ oslCondition m_started;
+ oslProcessImpl* m_pProcImpl;
+ oslFileHandle *m_pInputWrite;
+ oslFileHandle *m_pOutputRead;
+ oslFileHandle *m_pErrorRead;
+};
+
+oslProcessImpl* ChildList;
+oslMutex ChildListMutex;
+
+} //Anonymous namespace
+
+static oslProcessError osl_psz_executeProcess(char *pszImageName,
+ char *pszArguments[],
+ oslProcessOption Options,
+ oslSecurity Security,
+ char *pszDirectory,
+ char *pszEnvironments[],
+ oslProcess *pProcess,
+ oslFileHandle *pInputWrite,
+ oslFileHandle *pOutputRead,
+ oslFileHandle *pErrorRead );
+
+extern "C" {
+
+static void ChildStatusProc(void *pData)
+{
+ osl_setThreadName("osl_executeProcess");
+
+ pid_t pid = -1;
+ int status = 0;
+ int channel[2] = { -1, -1 };
+ ProcessData data;
+ ProcessData *pdata;
+ int stdOutput[2] = { -1, -1 }, stdInput[2] = { -1, -1 }, stdError[2] = { -1, -1 };
+
+ pdata = static_cast<ProcessData *>(pData);
+
+ /* make a copy of our data, because forking will only copy
+ our local stack of the thread, so the process data will not be accessible
+ in our child process */
+ memcpy(&data, pData, sizeof(data));
+
+#ifdef NO_CHILD_PROCESSES
+#define fork() (errno = EINVAL, -1)
+#endif
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, channel) == -1)
+ {
+ status = errno;
+ SAL_WARN("sal.osl", "executeProcess socketpair() errno " << status);
+ }
+
+ (void) fcntl(channel[0], F_SETFD, FD_CLOEXEC);
+ (void) fcntl(channel[1], F_SETFD, FD_CLOEXEC);
+
+ /* Create redirected IO pipes */
+ if ( status == 0 && data.m_pInputWrite && pipe( stdInput ) == -1 )
+ {
+ status = errno;
+ assert(status != 0);
+ SAL_WARN("sal.osl", "executeProcess pipe(stdInput) errno " << status);
+ }
+
+ if ( status == 0 && data.m_pOutputRead && pipe( stdOutput ) == -1 )
+ {
+ status = errno;
+ assert(status != 0);
+ SAL_WARN("sal.osl", "executeProcess pipe(stdOutput) errno " << status);
+ }
+
+ if ( status == 0 && data.m_pErrorRead && pipe( stdError ) == -1 )
+ {
+ status = errno;
+ assert(status != 0);
+ SAL_WARN("sal.osl", "executeProcess pipe(stdError) errno " << status);
+ }
+
+ if ( (status == 0) && ((pid = fork()) == 0) )
+ {
+ /* Child */
+ int chstatus = 0;
+ int errno_copy;
+
+ if (channel[0] != -1) close(channel[0]);
+
+ if ((data.m_uid != uid_t(-1)) && ((data.m_uid != getuid()) || (data.m_gid != getgid())))
+ {
+ OSL_ASSERT(geteuid() == 0); /* must be root */
+
+ if (! INIT_GROUPS(data.m_name, data.m_gid) || (setuid(data.m_uid) != 0))
+ {
+ // ignore; can't do much about it here after fork
+ }
+
+ unsetenv("HOME");
+ }
+
+ if (data.m_pszDir)
+ chstatus = chdir(data.m_pszDir);
+
+ if (chstatus == 0 && ((data.m_uid == uid_t(-1)) || ((data.m_uid == getuid()) && (data.m_gid == getgid()))))
+ {
+ int i;
+ for (i = 0; data.m_pszEnv[i] != nullptr; i++)
+ {
+ if (strchr(data.m_pszEnv[i], '=') == nullptr)
+ {
+ unsetenv(data.m_pszEnv[i]); /*TODO: check error return*/
+ }
+ else
+ {
+ putenv(data.m_pszEnv[i]); /*TODO: check error return*/
+ }
+ }
+
+ /* Connect std IO to pipe ends */
+
+ /* Write end of stdInput not used in child process */
+ if (stdInput[1] != -1) close( stdInput[1] );
+
+ /* Read end of stdOutput not used in child process */
+ if (stdOutput[0] != -1) close( stdOutput[0] );
+
+ /* Read end of stdError not used in child process */
+ if (stdError[0] != -1) close( stdError[0] );
+
+ /* Redirect pipe ends to std IO */
+
+ if ( stdInput[0] != STDIN_FILENO )
+ {
+ dup2( stdInput[0], STDIN_FILENO );
+ if (stdInput[0] != -1) close( stdInput[0] );
+ }
+
+ if ( stdOutput[1] != STDOUT_FILENO )
+ {
+ dup2( stdOutput[1], STDOUT_FILENO );
+ if (stdOutput[1] != -1) close( stdOutput[1] );
+ }
+
+ if ( stdError[1] != STDERR_FILENO )
+ {
+ dup2( stdError[1], STDERR_FILENO );
+ if (stdError[1] != -1) close( stdError[1] );
+ }
+
+ // No need to check the return value of execv. If we return from
+ // it, an error has occurred.
+ execv(data.m_pszArgs[0], const_cast<char **>(data.m_pszArgs));
+ }
+
+ /* if we reach here, something went wrong */
+ errno_copy = errno;
+ if ( !safeWrite(channel[1], &errno_copy, sizeof(errno_copy)) )
+ {
+ // ignore; can't do much about it here after fork
+ }
+
+ if ( channel[1] != -1 )
+ close(channel[1]);
+
+ _exit(255);
+ }
+ else
+ { /* Parent */
+ int i = -1;
+ if (channel[1] != -1) close(channel[1]);
+
+ /* Close unused pipe ends */
+ if (stdInput[0] != -1) close( stdInput[0] );
+ if (stdOutput[1] != -1) close( stdOutput[1] );
+ if (stdError[1] != -1) close( stdError[1] );
+
+ if (pid > 0)
+ {
+ while ((i = read(channel[0], &status, sizeof(status))) < 0)
+ {
+ if (errno != EINTR)
+ break;
+ }
+ }
+
+ if (channel[0] != -1) close(channel[0]);
+
+ if ((pid > 0) && (i == 0))
+ {
+ pid_t child_pid;
+ osl_acquireMutex(ChildListMutex);
+
+ pdata->m_pProcImpl->m_pid = pid;
+ pdata->m_pProcImpl->m_pnext = ChildList;
+ ChildList = pdata->m_pProcImpl;
+
+ /* Store used pipe ends in data structure */
+
+ if ( pdata->m_pInputWrite )
+ *(pdata->m_pInputWrite) = osl::detail::createFileHandleFromFD( stdInput[1] );
+
+ if ( pdata->m_pOutputRead )
+ *(pdata->m_pOutputRead) = osl::detail::createFileHandleFromFD( stdOutput[0] );
+
+ if ( pdata->m_pErrorRead )
+ *(pdata->m_pErrorRead) = osl::detail::createFileHandleFromFD( stdError[0] );
+
+ osl_releaseMutex(ChildListMutex);
+
+ osl_setCondition(pdata->m_started);
+
+ do
+ {
+ child_pid = waitpid(pid, &status, 0);
+ } while ( 0 > child_pid && EINTR == errno );
+
+ if ( child_pid < 0)
+ {
+ SAL_WARN("sal.osl", "Failed to wait for child process: " << UnixErrnoString(errno));
+
+ /*
+ We got another error than EINTR. Anyway we have to wake up the
+ waiting thread under any circumstances */
+
+ child_pid = pid;
+ }
+
+ if ( child_pid > 0 )
+ {
+ oslProcessImpl* pChild;
+
+ osl_acquireMutex(ChildListMutex);
+
+ pChild = ChildList;
+
+ /* check if it is one of our child processes */
+ while (pChild != nullptr)
+ {
+ if (pChild->m_pid == child_pid)
+ {
+ if (WIFEXITED(status))
+ pChild->m_status = WEXITSTATUS(status);
+ else if (WIFSIGNALED(status))
+ pChild->m_status = 128 + WTERMSIG(status);
+ else
+ pChild->m_status = -1;
+
+ osl_setCondition(pChild->m_terminated);
+ }
+
+ pChild = pChild->m_pnext;
+ }
+
+ osl_releaseMutex(ChildListMutex);
+ }
+ }
+ else
+ {
+ SAL_WARN("sal.osl", "ChildStatusProc : starting '" << data.m_pszArgs[0] << "' failed");
+ SAL_WARN("sal.osl", "Failed to launch child process, child reports " << UnixErrnoString(status));
+
+ /* Close pipe ends */
+ if ( pdata->m_pInputWrite )
+ *pdata->m_pInputWrite = nullptr;
+
+ if ( pdata->m_pOutputRead )
+ *pdata->m_pOutputRead = nullptr;
+
+ if ( pdata->m_pErrorRead )
+ *pdata->m_pErrorRead = nullptr;
+
+ if (stdInput[1] != -1) close( stdInput[1] );
+ if (stdOutput[0] != -1) close( stdOutput[0] );
+ if (stdError[0] != -1) close( stdError[0] );
+
+ /* if pid > 0 then a process was created, even if it later failed
+ e.g. bash searching for a command to execute, and we still
+ need to clean it up to avoid "defunct" processes */
+ if (pid > 0)
+ {
+ pid_t child_pid;
+ do
+ {
+ child_pid = waitpid(pid, &status, 0);
+ } while ( 0 > child_pid && EINTR == errno );
+ }
+
+ /* notify (and unblock) parent thread */
+ osl_setCondition(pdata->m_started);
+ }
+ }
+}
+
+}
+
+oslProcessError SAL_CALL osl_executeProcess_WithRedirectedIO(
+ rtl_uString *ustrImageName,
+ rtl_uString *ustrArguments[],
+ sal_uInt32 nArguments,
+ oslProcessOption Options,
+ oslSecurity Security,
+ rtl_uString *ustrWorkDir,
+ rtl_uString *ustrEnvironment[],
+ sal_uInt32 nEnvironmentVars,
+ oslProcess *pProcess,
+ oslFileHandle *pInputWrite,
+ oslFileHandle *pOutputRead,
+ oslFileHandle *pErrorRead
+ )
+{
+ OUString image;
+ if (ustrImageName == nullptr)
+ {
+ if (nArguments == 0)
+ {
+ return osl_Process_E_InvalidError;
+ }
+ image = OUString::unacquired(ustrArguments);
+ }
+ else
+ {
+ osl::FileBase::RC e = osl::FileBase::getSystemPathFromFileURL(
+ OUString::unacquired(&ustrImageName), image);
+ if (e != osl::FileBase::E_None)
+ {
+ SAL_INFO(
+ "sal.osl",
+ "getSystemPathFromFileURL("
+ << OUString::unacquired(&ustrImageName)
+ << ") failed with " << e);
+ return osl_Process_E_Unknown;
+ }
+ }
+
+ if ((Options & osl_Process_SEARCHPATH) != 0)
+ {
+ OUString path;
+ if (osl::detail::find_in_PATH(image, path))
+ {
+ image = path;
+ }
+ }
+
+ oslProcessError Error;
+ char* pszWorkDir=nullptr;
+ char** pArguments=nullptr;
+ char** pEnvironment=nullptr;
+ unsigned int idx;
+
+ char szImagePath[PATH_MAX] = "";
+ if (!image.isEmpty()
+ && (UnicodeToText(
+ szImagePath, SAL_N_ELEMENTS(szImagePath), image.getStr(),
+ image.getLength())
+ == 0))
+ {
+ int e = errno;
+ SAL_INFO("sal.osl", "UnicodeToText(" << image << ") failed with " << e);
+ return osl_Process_E_Unknown;
+ }
+
+ char szWorkDir[PATH_MAX] = "";
+ if ( ustrWorkDir != nullptr && ustrWorkDir->length )
+ {
+ oslFileError e = FileURLToPath( szWorkDir, PATH_MAX, ustrWorkDir );
+ if (e != osl_File_E_None)
+ {
+ SAL_INFO(
+ "sal.osl",
+ "FileURLToPath(" << OUString::unacquired(&ustrWorkDir)
+ << ") failed with " << e);
+ return osl_Process_E_Unknown;
+ }
+ pszWorkDir = szWorkDir;
+ }
+
+ if ( pArguments == nullptr && nArguments > 0 )
+ {
+ pArguments = static_cast<char**>(malloc( ( nArguments + 2 ) * sizeof(char*) ));
+ }
+
+ for ( idx = 0 ; idx < nArguments ; ++idx )
+ {
+ rtl_String* strArg =nullptr;
+
+ rtl_uString2String( &strArg,
+ rtl_uString_getStr(ustrArguments[idx]),
+ rtl_uString_getLength(ustrArguments[idx]),
+ osl_getThreadTextEncoding(),
+ OUSTRING_TO_OSTRING_CVTFLAGS );
+
+ pArguments[idx]=strdup(rtl_string_getStr(strArg));
+ rtl_string_release(strArg);
+ pArguments[idx+1]=nullptr;
+ }
+
+ for ( idx = 0 ; idx < nEnvironmentVars ; ++idx )
+ {
+ rtl_String* strEnv=nullptr;
+
+ if ( pEnvironment == nullptr )
+ {
+ pEnvironment = static_cast<char**>(malloc( ( nEnvironmentVars + 2 ) * sizeof(char*) ));
+ }
+
+ rtl_uString2String( &strEnv,
+ rtl_uString_getStr(ustrEnvironment[idx]),
+ rtl_uString_getLength(ustrEnvironment[idx]),
+ osl_getThreadTextEncoding(),
+ OUSTRING_TO_OSTRING_CVTFLAGS );
+
+ pEnvironment[idx]=strdup(rtl_string_getStr(strEnv));
+ rtl_string_release(strEnv);
+ pEnvironment[idx+1]=nullptr;
+ }
+
+ Error = osl_psz_executeProcess(szImagePath,
+ pArguments,
+ Options,
+ Security,
+ pszWorkDir,
+ pEnvironment,
+ pProcess,
+ pInputWrite,
+ pOutputRead,
+ pErrorRead
+ );
+
+ if ( pArguments != nullptr )
+ {
+ for ( idx = 0 ; idx < nArguments ; ++idx )
+ {
+ if ( pArguments[idx] != nullptr )
+ {
+ free(pArguments[idx]);
+ }
+ }
+ free(pArguments);
+ }
+
+ if ( pEnvironment != nullptr )
+ {
+ for ( idx = 0 ; idx < nEnvironmentVars ; ++idx )
+ {
+ if ( pEnvironment[idx] != nullptr )
+ {
+ free(pEnvironment[idx]);
+ }
+ }
+ free(pEnvironment);
+ }
+
+ return Error;
+}
+
+oslProcessError SAL_CALL osl_executeProcess(
+ rtl_uString *ustrImageName,
+ rtl_uString *ustrArguments[],
+ sal_uInt32 nArguments,
+ oslProcessOption Options,
+ oslSecurity Security,
+ rtl_uString *ustrWorkDir,
+ rtl_uString *ustrEnvironment[],
+ sal_uInt32 nEnvironmentVars,
+ oslProcess *pProcess
+ )
+{
+ return osl_executeProcess_WithRedirectedIO(
+ ustrImageName,
+ ustrArguments,
+ nArguments,
+ Options,
+ Security,
+ ustrWorkDir,
+ ustrEnvironment,
+ nEnvironmentVars,
+ pProcess,
+ nullptr,
+ nullptr,
+ nullptr
+ );
+}
+
+oslProcessError osl_psz_executeProcess(char *pszImageName,
+ char *pszArguments[],
+ oslProcessOption Options,
+ oslSecurity Security,
+ char *pszDirectory,
+ char *pszEnvironments[],
+ oslProcess *pProcess,
+ oslFileHandle *pInputWrite,
+ oslFileHandle *pOutputRead,
+ oslFileHandle *pErrorRead
+ )
+{
+ int i;
+ ProcessData Data;
+ oslThread hThread;
+
+ memset(&Data,0,sizeof(ProcessData));
+ Data.m_pInputWrite = pInputWrite;
+ Data.m_pOutputRead = pOutputRead;
+ Data.m_pErrorRead = pErrorRead;
+
+ OSL_ASSERT(pszImageName != nullptr);
+
+ if ( pszImageName == nullptr )
+ {
+ return osl_Process_E_NotFound;
+ }
+
+ Data.m_pszArgs[0] = strdup(pszImageName);
+ Data.m_pszArgs[1] = nullptr;
+
+ if ( pszArguments != nullptr )
+ {
+ for (i = 0; ((i + 2) < MAX_ARGS) && (pszArguments[i] != nullptr); i++)
+ Data.m_pszArgs[i+1] = strdup(pszArguments[i]);
+ Data.m_pszArgs[i+2] = nullptr;
+ }
+
+ Data.m_pszDir = (pszDirectory != nullptr) ? strdup(pszDirectory) : nullptr;
+
+ if (pszEnvironments != nullptr)
+ {
+ for (i = 0; ((i + 1) < MAX_ENVS) && (pszEnvironments[i] != nullptr); i++)
+ Data.m_pszEnv[i] = strdup(pszEnvironments[i]);
+ Data.m_pszEnv[i+1] = nullptr;
+ }
+ else
+ Data.m_pszEnv[0] = nullptr;
+
+ if (Security != nullptr)
+ {
+ Data.m_uid = static_cast<oslSecurityImpl*>(Security)->m_pPasswd.pw_uid;
+ Data.m_gid = static_cast<oslSecurityImpl*>(Security)->m_pPasswd.pw_gid;
+ Data.m_name = static_cast<oslSecurityImpl*>(Security)->m_pPasswd.pw_name;
+ }
+ else
+ Data.m_uid = uid_t(-1);
+
+ Data.m_pProcImpl = static_cast<oslProcessImpl*>(malloc(sizeof(oslProcessImpl)));
+ Data.m_pProcImpl->m_pid = 0;
+ Data.m_pProcImpl->m_terminated = osl_createCondition();
+ Data.m_pProcImpl->m_pnext = nullptr;
+
+ if (ChildListMutex == nullptr)
+ ChildListMutex = osl_createMutex();
+
+ Data.m_started = osl_createCondition();
+
+ hThread = osl_createThread(ChildStatusProc, &Data);
+
+ if (hThread != nullptr)
+ {
+ osl_waitCondition(Data.m_started, nullptr);
+ }
+ osl_destroyCondition(Data.m_started);
+
+ for (i = 0; Data.m_pszArgs[i] != nullptr; i++)
+ free(const_cast<char *>(Data.m_pszArgs[i]));
+
+ for (i = 0; Data.m_pszEnv[i] != nullptr; i++)
+ free(Data.m_pszEnv[i]);
+
+ if ( Data.m_pszDir != nullptr )
+ {
+ free(const_cast<char *>(Data.m_pszDir));
+ }
+
+ osl_destroyThread(hThread);
+
+ if (Data.m_pProcImpl->m_pid != 0)
+ {
+ assert(hThread != nullptr);
+
+ *pProcess = Data.m_pProcImpl;
+
+ if (Options & osl_Process_WAIT)
+ osl_joinProcess(*pProcess);
+
+ return osl_Process_E_None;
+ }
+
+ osl_destroyCondition(Data.m_pProcImpl->m_terminated);
+ free(Data.m_pProcImpl);
+
+ return osl_Process_E_Unknown;
+}
+
+oslProcessError SAL_CALL osl_terminateProcess(oslProcess Process)
+{
+ if (Process == nullptr)
+ return osl_Process_E_Unknown;
+
+ if (kill(static_cast<oslProcessImpl*>(Process)->m_pid, SIGKILL) != 0)
+ {
+ switch (errno)
+ {
+ case EPERM:
+ return osl_Process_E_NoPermission;
+
+ case ESRCH:
+ return osl_Process_E_NotFound;
+
+ default:
+ return osl_Process_E_Unknown;
+ }
+ }
+
+ return osl_Process_E_None;
+}
+
+oslProcess SAL_CALL osl_getProcess(oslProcessIdentifier Ident)
+{
+ oslProcessImpl *pProcImpl;
+
+ if (kill(Ident, 0) != -1)
+ {
+ oslProcessImpl* pChild;
+
+ if (ChildListMutex == nullptr)
+ ChildListMutex = osl_createMutex();
+
+ osl_acquireMutex(ChildListMutex);
+
+ pChild = ChildList;
+
+ /* check if it is one of our child processes */
+ while (pChild != nullptr)
+ {
+ if (Ident == static_cast<sal_uInt32>(pChild->m_pid))
+ break;
+
+ pChild = pChild->m_pnext;
+ }
+
+ pProcImpl = static_cast<oslProcessImpl*>(malloc(sizeof(oslProcessImpl)));
+ pProcImpl->m_pid = Ident;
+ pProcImpl->m_terminated = osl_createCondition();
+
+ if (pChild != nullptr)
+ {
+ /* process is a child so insert into list */
+ pProcImpl->m_pnext = pChild->m_pnext;
+ pChild->m_pnext = pProcImpl;
+
+ pProcImpl->m_status = pChild->m_status;
+
+ if (osl_checkCondition(pChild->m_terminated))
+ osl_setCondition(pProcImpl->m_terminated);
+ }
+ else
+ pProcImpl->m_pnext = nullptr;
+
+ osl_releaseMutex(ChildListMutex);
+ }
+ else
+ pProcImpl = nullptr;
+
+ return pProcImpl;
+}
+
+void SAL_CALL osl_freeProcessHandle(oslProcess Process)
+{
+ if (Process == nullptr)
+ return;
+
+ oslProcessImpl *pChild, *pPrev = nullptr;
+
+ OSL_ASSERT(ChildListMutex != nullptr);
+
+ if ( ChildListMutex == nullptr )
+ {
+ return;
+ }
+
+ osl_acquireMutex(ChildListMutex);
+
+ pChild = ChildList;
+
+ /* remove process from child list */
+ while (pChild != nullptr)
+ {
+ if (pChild == static_cast<oslProcessImpl*>(Process))
+ {
+ if (pPrev != nullptr)
+ pPrev->m_pnext = pChild->m_pnext;
+ else
+ ChildList = pChild->m_pnext;
+
+ break;
+ }
+
+ pPrev = pChild;
+ pChild = pChild->m_pnext;
+ }
+
+ osl_releaseMutex(ChildListMutex);
+
+ osl_destroyCondition(static_cast<oslProcessImpl*>(Process)->m_terminated);
+
+ free(Process);
+}
+
+#if defined(LINUX)
+namespace {
+
+struct osl_procStat
+{
+ /* from 'stat' */
+ pid_t pid; /* pid */
+ char command[16]; /* 'argv[0]' */ /* mfe: it all right char comm[16] in kernel! */
+ char state; /* state (running, stopped, ...) */
+ pid_t ppid; /* parent pid */
+ pid_t pgrp; /* parent group */
+ int session; /* session ID */
+ int tty; /* no of tty */
+ pid_t tpgid; /* group of process owning the tty */
+ unsigned long flags; /* flags dunno */
+ unsigned long minflt; /* minor page faults */
+ unsigned long cminflt; /* minor page faults with children */
+ unsigned long majflt; /* major page faults */
+ unsigned long cmajflt; /* major page faults with children */
+ unsigned long utime; /* no of jiffies in user mode */
+ unsigned long stime; /* no of jiffies in kernel mode */
+ unsigned long cutime; /* no of jiffies in user mode with children */
+ unsigned long cstime; /* no of jiffies in kernel mode with children */
+ unsigned long priority; /* nice value + 15 (kernel scheduling prio)*/
+ long nice; /* nice value */
+ long timeout; /* no of jiffies of next process timeout */
+ long itrealvalue; /* no jiffies before next SIGALRM */
+ unsigned long starttime; /* process started this no of jiffies after boot */
+ unsigned long vsize; /* virtual memory size (in bytes) */
+ long rss; /* resident set size (in pages) */
+ unsigned long rss_rlim; /* rss limit (in bytes) */
+ unsigned long startcode; /* address above program text can run */
+ unsigned long endcode; /* address below program text can run */
+ unsigned long startstack; /* address of start of stack */
+ unsigned long kstkesp; /* current value of 'esp' (stack pointer) */
+ unsigned long kstkeip; /* current value of 'eip' (instruction pointer) */
+ /* mfe: Linux > 2.1.7x have more signals (88) */
+ char signal[24]; /* pending signals */
+ char blocked[24]; /* blocked signals */
+ char sigignore[24]; /* ignored signals */
+ char sigcatch[24]; /* caught signals */
+ unsigned long wchan; /* 'channel' the process is waiting in */
+ unsigned long nswap; /* ? */
+ unsigned long cnswap; /* ? */
+
+ /* from 'status' */
+ int ruid; /* real uid */
+ int euid; /* effective uid */
+ int suid; /* saved uid */
+ int fuid; /* file access uid */
+ int rgid; /* real gid */
+ int egid; /* effective gid */
+ int sgid; /* saved gid */
+ int fgid; /* file access gid */
+ unsigned long vm_size; /* like vsize but on kb */
+ unsigned long vm_lock; /* locked pages in kb */
+ unsigned long vm_rss; /* like rss but in kb */
+ unsigned long vm_data; /* data size */
+ unsigned long vm_stack; /* stack size */
+ unsigned long vm_exe; /* executable size */
+ unsigned long vm_lib; /* library size */
+};
+
+}
+
+static bool osl_getProcStat(pid_t pid, struct osl_procStat* procstat)
+{
+ int fd = 0;
+ bool bRet = false;
+ char name[PATH_MAX + 1];
+ snprintf(name, sizeof(name), "/proc/%u/stat", pid);
+
+ if ((fd = open(name,O_RDONLY)) >=0 )
+ {
+ char* tmp=nullptr;
+ char prstatbuf[512];
+ memset(prstatbuf,0,512);
+ bRet = safeRead(fd, prstatbuf, 511);
+
+ close(fd);
+
+ if (!bRet)
+ return false;
+
+ tmp = strrchr(prstatbuf, ')');
+ if(tmp)
+ {
+ *tmp = '\0';
+
+ memset(procstat->command, 0, sizeof(procstat->command));
+
+ sscanf(prstatbuf, "%d (%15c", &procstat->pid, procstat->command);
+ sscanf(tmp + 2,
+ "%c"
+ "%i %i %i %i %i"
+ "%lu %lu %lu %lu %lu"
+ "%lu %lu %lu %lu"
+ "%lu %li %li %li"
+ "%lu %lu %li %lu"
+ "%lu %lu %lu %lu %lu"
+ "%23s %23s %23s %23s"
+ "%lu %lu %lu",
+ &procstat->state,
+ &procstat->ppid, &procstat->pgrp, &procstat->session, &procstat->tty, &procstat->tpgid,
+ &procstat->flags, &procstat->minflt, &procstat->cminflt, &procstat->majflt, &procstat->cmajflt,
+ &procstat->utime, &procstat->stime, &procstat->cutime, &procstat->cstime,
+ &procstat->priority, &procstat->nice, &procstat->timeout, &procstat->itrealvalue,
+ &procstat->starttime, &procstat->vsize, &procstat->rss, &procstat->rss_rlim,
+ &procstat->startcode, &procstat->endcode, &procstat->startstack, &procstat->kstkesp, &procstat->kstkeip,
+ procstat->signal, procstat->blocked, procstat->sigignore, procstat->sigcatch,
+ &procstat->wchan, &procstat->nswap, &procstat->cnswap
+ );
+ }
+ else
+ {
+ bRet = false;
+ }
+ }
+ return bRet;
+}
+
+static bool osl_getProcStatus(pid_t pid, struct osl_procStat* procstat)
+{
+ int fd = 0;
+ char name[PATH_MAX + 1];
+ bool bRet = false;
+
+ snprintf(name, sizeof(name), "/proc/%u/status", pid);
+
+ if ((fd = open(name,O_RDONLY)) >=0 )
+ {
+ char* tmp=nullptr;
+ char prstatusbuf[512];
+ memset(prstatusbuf,0,512);
+ bRet = safeRead(fd, prstatusbuf, 511);
+
+ close(fd);
+
+ if (!bRet)
+ return false;
+
+ tmp = strstr(prstatusbuf,"Uid:");
+ if(tmp)
+ {
+ sscanf(tmp,"Uid:\t%d\t%d\t%d\t%d",
+ &procstat->ruid, &procstat->euid, &procstat->suid, &procstat->fuid
+ );
+ }
+
+ tmp = strstr(prstatusbuf,"Gid:");
+ if(tmp)
+ {
+ sscanf(tmp,"Gid:\t%d\t%d\t%d\t%d",
+ &procstat->rgid, &procstat->egid, &procstat->sgid, &procstat->fgid
+ );
+ }
+
+ tmp = strstr(prstatusbuf,"VmSize:");
+ if(tmp)
+ {
+ sscanf(tmp,
+ "VmSize: %lu kB\n"
+ "VmLck: %lu kB\n"
+ "VmRSS: %lu kB\n"
+ "VmData: %lu kB\n"
+ "VmStk: %lu kB\n"
+ "VmExe: %lu kB\n"
+ "VmLib: %lu kB\n",
+ &procstat->vm_size, &procstat->vm_lock, &procstat->vm_rss, &procstat->vm_data,
+ &procstat->vm_stack, &procstat->vm_exe, &procstat->vm_lib
+ );
+ }
+
+ tmp = strstr(prstatusbuf,"SigPnd:");
+ if(tmp)
+ {
+ sscanf(tmp, "SigPnd: %23s SigBlk: %23s SigIgn: %23s %*s %23s",
+ procstat->signal, procstat->blocked, procstat->sigignore, procstat->sigcatch
+ );
+ }
+ }
+ return bRet;
+}
+
+#endif
+
+oslProcessError SAL_CALL osl_getProcessInfo(oslProcess Process, oslProcessData Fields, oslProcessInfo* pInfo)
+{
+ pid_t pid;
+
+ if (Process == nullptr)
+ pid = getpid();
+ else
+ pid = static_cast<oslProcessImpl*>(Process)->m_pid;
+
+ if (! pInfo || (pInfo->Size != sizeof(oslProcessInfo)))
+ return osl_Process_E_Unknown;
+
+ pInfo->Fields = 0;
+
+ if (Fields & osl_Process_IDENTIFIER)
+ {
+ pInfo->Ident = pid;
+ pInfo->Fields |= osl_Process_IDENTIFIER;
+ }
+
+ if (Fields & osl_Process_EXITCODE)
+ {
+ if ((Process != nullptr) &&
+ osl_checkCondition(static_cast<oslProcessImpl*>(Process)->m_terminated))
+ {
+ pInfo->Code = static_cast<oslProcessImpl*>(Process)->m_status;
+ pInfo->Fields |= osl_Process_EXITCODE;
+ }
+ }
+
+ if (Fields & (osl_Process_HEAPUSAGE | osl_Process_CPUTIMES))
+ {
+
+#if defined(__sun)
+
+ int fd;
+ char name[PATH_MAX + 1];
+
+ snprintf(name, sizeof(name), "/proc/%ld", (long)pid);
+
+ if ((fd = open(name, O_RDONLY)) >= 0)
+ {
+ prstatus_t prstatus;
+
+ if (ioctl(fd, PIOCSTATUS, &prstatus) >= 0)
+ {
+ if (Fields & osl_Process_CPUTIMES)
+ {
+ pInfo->UserTime.Seconds = prstatus.pr_utime.tv_sec;
+ pInfo->UserTime.Nanosec = prstatus.pr_utime.tv_nsec;
+ pInfo->SystemTime.Seconds = prstatus.pr_stime.tv_sec;
+ pInfo->SystemTime.Nanosec = prstatus.pr_stime.tv_nsec;
+
+ pInfo->Fields |= osl_Process_CPUTIMES;
+ }
+
+ if (Fields & osl_Process_HEAPUSAGE)
+ {
+ pInfo->HeapUsage = prstatus.pr_brksize;
+
+ pInfo->Fields |= osl_Process_HEAPUSAGE;
+ }
+
+ close(fd);
+
+ return (pInfo->Fields == Fields) ? osl_Process_E_None : osl_Process_E_Unknown;
+ }
+ else
+ close(fd);
+ }
+
+#elif defined(LINUX)
+
+ if ( (Fields & osl_Process_CPUTIMES) || (Fields & osl_Process_HEAPUSAGE) )
+ {
+ struct osl_procStat procstat;
+ memset(&procstat,0,sizeof(procstat));
+
+ if ( (Fields & osl_Process_CPUTIMES) && osl_getProcStat(pid, &procstat) )
+ {
+ /*
+ * mfe:
+ * We calculate only time of the process proper.
+ * Threads are processes, we do not consider their time here!
+ * (For this, cutime and cstime should be used, it seems not
+ * to work in 2.0.36)
+ */
+
+ long clktck;
+ unsigned long hz;
+ unsigned long userseconds;
+ unsigned long systemseconds;
+
+ clktck = sysconf(_SC_CLK_TCK);
+ if (clktck <= 0) {
+ return osl_Process_E_Unknown;
+ }
+ hz = static_cast<unsigned long>(clktck);
+
+ userseconds = procstat.utime/hz;
+ systemseconds = procstat.stime/hz;
+
+ pInfo->UserTime.Seconds = userseconds;
+ pInfo->UserTime.Nanosec = procstat.utime - (userseconds * hz);
+ pInfo->SystemTime.Seconds = systemseconds;
+ pInfo->SystemTime.Nanosec = procstat.stime - (systemseconds * hz);
+
+ pInfo->Fields |= osl_Process_CPUTIMES;
+ }
+
+ if ( (Fields & osl_Process_HEAPUSAGE) && osl_getProcStatus(pid, &procstat) )
+ {
+ /*
+ * mfe:
+ * vm_data (found in status) shows the size of the data segment
+ * it a rough approximation of the core heap size
+ */
+ pInfo->HeapUsage = procstat.vm_data*1024;
+
+ pInfo->Fields |= osl_Process_HEAPUSAGE;
+ }
+ }
+
+ return (pInfo->Fields == Fields) ? osl_Process_E_None : osl_Process_E_Unknown;
+#endif
+
+ }
+
+ return (pInfo->Fields == Fields) ? osl_Process_E_None : osl_Process_E_Unknown;
+}
+
+/** Helper function for osl_joinProcessWithTimeout
+ */
+
+static bool is_timeout(const struct timeval* tend)
+{
+ struct timeval tcurrent;
+ gettimeofday(&tcurrent, nullptr);
+ return (tcurrent.tv_sec >= tend->tv_sec);
+}
+
+/* kill(pid, 0) is useful for checking if a
+ process is still alive, but remember that
+ kill even returns 0 if the process is already
+ a zombie. */
+
+static bool is_process_dead(pid_t pid)
+{
+ return ((kill(pid, 0) == -1) && (ESRCH == errno));
+}
+
+oslProcessError SAL_CALL osl_joinProcessWithTimeout(oslProcess Process, const TimeValue* pTimeout)
+{
+ oslProcessImpl* pChild = ChildList;
+ oslProcessError osl_error = osl_Process_E_None;
+
+ OSL_PRECOND(Process, "osl_joinProcess: Invalid parameter");
+ OSL_ASSERT(ChildListMutex);
+
+ if (Process == nullptr || ChildListMutex == nullptr)
+ return osl_Process_E_Unknown;
+
+ osl_acquireMutex(ChildListMutex);
+
+ /* check if process is a child of ours */
+ while (pChild != nullptr)
+ {
+ if (pChild == static_cast<oslProcessImpl*>(Process))
+ break;
+
+ pChild = pChild->m_pnext;
+ }
+
+ osl_releaseMutex(ChildListMutex);
+
+ if (pChild != nullptr)
+ {
+ oslConditionResult cond_res = osl_waitCondition(pChild->m_terminated, pTimeout);
+
+ if (cond_res == osl_cond_result_timeout)
+ osl_error = osl_Process_E_TimedOut;
+ else if (cond_res != osl_cond_result_ok)
+ osl_error = osl_Process_E_Unknown;
+ }
+ else /* alien process; StatusThread will not be able
+ to set the condition terminated */
+ {
+ pid_t pid = static_cast<oslProcessImpl*>(Process)->m_pid;
+
+ if (pTimeout)
+ {
+ bool timeout = false;
+ struct timeval tend;
+
+ gettimeofday(&tend, nullptr);
+
+ tend.tv_sec += pTimeout->Seconds;
+
+ while (!is_process_dead(pid) && !(timeout = is_timeout(&tend)))
+ sleep(1);
+
+ if (timeout)
+ osl_error = osl_Process_E_TimedOut;
+ }
+ else /* infinite */
+ {
+ while (!is_process_dead(pid))
+ sleep(1);
+ }
+ }
+ return osl_error;
+}
+
+oslProcessError SAL_CALL osl_joinProcess(oslProcess Process)
+{
+ return osl_joinProcessWithTimeout(Process, nullptr);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/process_impl.cxx b/sal/osl/unx/process_impl.cxx
new file mode 100644
index 000000000..5d7f7644f
--- /dev/null
+++ b/sal/osl/unx/process_impl.cxx
@@ -0,0 +1,473 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_features.h>
+
+#include <osl/process.h>
+
+#include <limits.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <osl/diagnose.h>
+#include <osl/file.hxx>
+#include <osl/module.h>
+#include <osl/thread.h>
+#include <rtl/alloc.h>
+#include <rtl/ustring.hxx>
+#include <rtl/strbuf.h>
+#include <sal/log.hxx>
+
+#include "file_path_helper.hxx"
+
+#include "uunxapi.hxx"
+#include "nlsupport.hxx"
+
+#ifdef ANDROID
+#include <osl/detail/android-bootstrap.h>
+#endif
+
+#if defined(MACOSX) || defined(IOS)
+#include <mach-o/dyld.h>
+
+namespace {
+
+oslProcessError bootstrap_getExecutableFile(rtl_uString ** ppFileURL)
+{
+ oslProcessError result = osl_Process_E_NotFound;
+
+ char buffer[PATH_MAX];
+ uint32_t buflen = sizeof(buffer);
+
+ if (_NSGetExecutablePath (buffer, &buflen) == 0)
+ {
+ /* Determine absolute path. */
+ char abspath[PATH_MAX];
+ if (realpath (buffer, abspath) != nullptr)
+ {
+ /* Convert from utf8 to unicode. */
+ rtl_uString * pAbsPath = nullptr;
+ rtl_string2UString (
+ &pAbsPath,
+ abspath, rtl_str_getLength (abspath),
+ RTL_TEXTENCODING_UTF8,
+ OSTRING_TO_OUSTRING_CVTFLAGS);
+
+ if (pAbsPath)
+ {
+ /* Convert from path to url. */
+ if (osl_getFileURLFromSystemPath (pAbsPath, ppFileURL) == osl_File_E_None)
+ {
+ /* Success. */
+ result = osl_Process_E_None;
+ }
+ rtl_uString_release (pAbsPath);
+ }
+ }
+ }
+
+ return result;
+}
+
+}
+
+#else
+#include <dlfcn.h>
+
+namespace {
+
+oslProcessError bootstrap_getExecutableFile(rtl_uString ** ppFileURL)
+{
+ oslProcessError result = osl_Process_E_NotFound;
+
+#ifdef ANDROID
+ /* Now with just a single DSO, this one from lo-bootstrap.c is as good as
+ * any */
+ void * addr = dlsym (RTLD_DEFAULT, "JNI_OnLoad");
+#else
+#if defined __linux
+ // The below code looking for "main" with dlsym() will typically
+ // fail, as there is little reason for "main" to be exported, in
+ // the dlsym() sense, from an executable. But Linux has
+ // /proc/self/exe, try using that.
+ char buf[PATH_MAX];
+ int rc = readlink("/proc/self/exe", buf, sizeof(buf));
+ if (rc > 0 && rc < PATH_MAX)
+ {
+ buf[rc] = '\0';
+ OUString path = OUString::fromUtf8(buf);
+ OUString fileURL;
+ if (osl::File::getFileURLFromSystemPath(path, fileURL) == osl::File::E_None)
+ {
+ rtl_uString_acquire(fileURL.pData);
+ *ppFileURL = fileURL.pData;
+ return osl_Process_E_None;
+ }
+ }
+#endif
+ /* Determine address of "main()" function. */
+ void * addr = dlsym (RTLD_DEFAULT, "main");
+#endif
+ if (addr != nullptr)
+ {
+ /* Determine module URL. */
+ if (osl_getModuleURLFromAddress (addr, ppFileURL))
+ {
+ /* Success. */
+ result = osl_Process_E_None;
+ }
+ }
+
+ return result;
+}
+
+}
+
+#endif
+
+namespace {
+
+struct CommandArgs_Impl
+{
+ pthread_mutex_t m_mutex;
+ sal_uInt32 m_nCount;
+ rtl_uString ** m_ppArgs;
+};
+
+}
+
+static struct CommandArgs_Impl g_command_args =
+{
+ PTHREAD_MUTEX_INITIALIZER,
+ 0,
+ nullptr
+};
+
+oslProcessError SAL_CALL osl_getExecutableFile (rtl_uString ** ppustrFile)
+{
+ pthread_mutex_lock (&(g_command_args.m_mutex));
+ if (g_command_args.m_nCount == 0)
+ {
+ pthread_mutex_unlock (&(g_command_args.m_mutex));
+ return bootstrap_getExecutableFile(ppustrFile);
+ }
+
+ /* CommandArgs set. Obtain argv[0]. */
+ rtl_uString_assign (ppustrFile, g_command_args.m_ppArgs[0]);
+ pthread_mutex_unlock (&(g_command_args.m_mutex));
+ return osl_Process_E_None;
+}
+
+sal_uInt32 SAL_CALL osl_getCommandArgCount()
+{
+ sal_uInt32 result = 0;
+
+ pthread_mutex_lock (&(g_command_args.m_mutex));
+ SAL_INFO_IF(
+ g_command_args.m_nCount == 0, "sal.osl",
+ "osl_getCommandArgCount w/o prior call to osl_setCommandArgs");
+ if (g_command_args.m_nCount > 0)
+ result = g_command_args.m_nCount - 1;
+ pthread_mutex_unlock (&(g_command_args.m_mutex));
+
+ return result;
+}
+
+oslProcessError SAL_CALL osl_getCommandArg (sal_uInt32 nArg, rtl_uString ** strCommandArg)
+{
+ oslProcessError result = osl_Process_E_NotFound;
+
+ pthread_mutex_lock (&(g_command_args.m_mutex));
+ assert(g_command_args.m_nCount > 0);
+ if (g_command_args.m_nCount > (nArg + 1))
+ {
+ rtl_uString_assign (strCommandArg, g_command_args.m_ppArgs[nArg + 1]);
+ result = osl_Process_E_None;
+ }
+ pthread_mutex_unlock (&(g_command_args.m_mutex));
+
+ return result;
+}
+
+void SAL_CALL osl_setCommandArgs (int argc, char ** argv)
+{
+ assert(argc > 0);
+ pthread_mutex_lock (&(g_command_args.m_mutex));
+ SAL_WARN_IF(g_command_args.m_nCount != 0, "sal.osl", "args already set");
+ if (g_command_args.m_nCount == 0)
+ {
+ rtl_uString** ppArgs = static_cast<rtl_uString**>(rtl_allocateZeroMemory (argc * sizeof(rtl_uString*)));
+ if (ppArgs != nullptr)
+ {
+ rtl_TextEncoding encoding = osl_getThreadTextEncoding();
+ for (int i = 0; i < argc; i++)
+ {
+ rtl_string2UString (
+ &(ppArgs[i]),
+ argv[i], rtl_str_getLength (argv[i]), encoding,
+ OSTRING_TO_OUSTRING_CVTFLAGS);
+ }
+ if (ppArgs[0] != nullptr)
+ {
+#if HAVE_FEATURE_MACOSX_SANDBOX
+ // If we are called with a relative path in argv[0] in a sandboxed process
+ // osl::realpath() fails. So just use bootstrap_getExecutableFile() instead.
+ // Somewhat silly to use argv[0] and tediously figure out the absolute path from it
+ // anyway.
+ bootstrap_getExecutableFile(&ppArgs[0]);
+ OUString pArg0(ppArgs[0]);
+ osl_getFileURLFromSystemPath (pArg0.pData, &(ppArgs[0]));
+#else
+#if !defined(ANDROID) && !defined(IOS) // No use searching PATH on Android or iOS
+ /* see @ osl_getExecutableFile(). */
+ if (rtl_ustr_indexOfChar (rtl_uString_getStr(ppArgs[0]), '/') == -1)
+ {
+ const OUString PATH ("PATH");
+
+ rtl_uString * pSearchPath = nullptr;
+ osl_getEnvironment (PATH.pData, &pSearchPath);
+ if (pSearchPath)
+ {
+ rtl_uString * pSearchResult = nullptr;
+ osl_searchPath (ppArgs[0], pSearchPath, &pSearchResult);
+ if (pSearchResult)
+ {
+ rtl_uString_assign (&(ppArgs[0]), pSearchResult);
+ rtl_uString_release (pSearchResult);
+ }
+ rtl_uString_release (pSearchPath);
+ }
+ }
+#endif
+ OUString pArg0;
+ if (osl::realpath (OUString::unacquired(&ppArgs[0]), pArg0))
+ {
+ osl_getFileURLFromSystemPath (pArg0.pData, &(ppArgs[0]));
+ }
+#endif // !HAVE_FEATURE_MACOSX_SANDBOX
+ }
+ g_command_args.m_nCount = argc;
+ g_command_args.m_ppArgs = ppArgs;
+ }
+ }
+ pthread_mutex_unlock (&(g_command_args.m_mutex));
+}
+
+oslProcessError SAL_CALL osl_getEnvironment(rtl_uString* pustrEnvVar, rtl_uString** ppustrValue)
+{
+ oslProcessError result = osl_Process_E_NotFound;
+ rtl_TextEncoding encoding = osl_getThreadTextEncoding();
+ rtl_String* pstr_env_var = nullptr;
+
+ OSL_PRECOND(pustrEnvVar, "osl_getEnvironment(): Invalid parameter");
+ OSL_PRECOND(ppustrValue, "osl_getEnvironment(): Invalid parameter");
+
+ rtl_uString2String(
+ &pstr_env_var,
+ rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+ if (pstr_env_var != nullptr)
+ {
+ const char* p_env_var = getenv (rtl_string_getStr (pstr_env_var));
+ if (p_env_var != nullptr)
+ {
+ rtl_string2UString(
+ ppustrValue,
+ p_env_var, strlen(p_env_var), encoding,
+ OSTRING_TO_OUSTRING_CVTFLAGS);
+ OSL_ASSERT(*ppustrValue != nullptr);
+
+ result = osl_Process_E_None;
+ }
+ rtl_string_release(pstr_env_var);
+ }
+
+ return result;
+}
+
+oslProcessError SAL_CALL osl_setEnvironment(rtl_uString* pustrEnvVar, rtl_uString* pustrValue)
+{
+ oslProcessError result = osl_Process_E_Unknown;
+ rtl_TextEncoding encoding = osl_getThreadTextEncoding();
+ rtl_String* pstr_env_var = nullptr;
+ rtl_String* pstr_val = nullptr;
+
+ OSL_PRECOND(pustrEnvVar, "osl_setEnvironment(): Invalid parameter");
+ OSL_PRECOND(pustrValue, "osl_setEnvironment(): Invalid parameter");
+
+ rtl_uString2String(
+ &pstr_env_var,
+ rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ rtl_uString2String(
+ &pstr_val,
+ rtl_uString_getStr(pustrValue), rtl_uString_getLength(pustrValue), encoding,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ if (pstr_env_var != nullptr && pstr_val != nullptr)
+ {
+#if defined (__sun)
+ rtl_String * pBuffer = NULL;
+
+ sal_Int32 nCapacity = rtl_stringbuffer_newFromStringBuffer( &pBuffer,
+ rtl_string_getLength(pstr_env_var) + rtl_string_getLength(pstr_val) + 1,
+ pstr_env_var );
+ rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length, "=", 1);
+ rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length,
+ rtl_string_getStr(pstr_val), rtl_string_getLength(pstr_val) );
+
+ rtl_string_acquire(pBuffer); // argument to putenv must leak on success
+
+ if (putenv(rtl_string_getStr(pBuffer)) == 0)
+ result = osl_Process_E_None;
+ else
+ rtl_string_release(pBuffer);
+#else
+ if (setenv(rtl_string_getStr(pstr_env_var), rtl_string_getStr(pstr_val), 1) == 0)
+ result = osl_Process_E_None;
+#endif
+ }
+
+ if (pstr_val)
+ rtl_string_release(pstr_val);
+
+ if (pstr_env_var != nullptr)
+ rtl_string_release(pstr_env_var);
+
+ return result;
+}
+
+oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString* pustrEnvVar)
+{
+ oslProcessError result = osl_Process_E_Unknown;
+ rtl_TextEncoding encoding = osl_getThreadTextEncoding();
+ rtl_String* pstr_env_var = nullptr;
+
+ OSL_PRECOND(pustrEnvVar, "osl_setEnvironment(): Invalid parameter");
+
+ rtl_uString2String(
+ &pstr_env_var,
+ rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ if (pstr_env_var)
+ {
+#if defined (__sun)
+ rtl_String * pBuffer = NULL;
+
+ sal_Int32 nCapacity = rtl_stringbuffer_newFromStringBuffer( &pBuffer,
+ rtl_string_getLength(pstr_env_var) + 1, pstr_env_var );
+ rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length, "=", 1);
+
+ rtl_string_acquire(pBuffer); // argument to putenv must leak on success
+
+ if (putenv(rtl_string_getStr(pBuffer)) == 0)
+ result = osl_Process_E_None;
+ else
+ rtl_string_release(pBuffer);
+#elif (defined(MACOSX) || defined(NETBSD) || defined(FREEBSD))
+ // MacOSX baseline is 10.4, which has an old-school void return
+ // for unsetenv.
+ // See: http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/10.4/man3/unsetenv.3.html?useVersion=10.4
+ unsetenv(rtl_string_getStr(pstr_env_var));
+ result = osl_Process_E_None;
+#else
+ if (unsetenv(rtl_string_getStr(pstr_env_var)) == 0)
+ result = osl_Process_E_None;
+#endif
+ rtl_string_release(pstr_env_var);
+ }
+
+ return result;
+}
+
+oslProcessError SAL_CALL osl_getProcessWorkingDir(rtl_uString **ppustrWorkingDir)
+{
+ oslProcessError result = osl_Process_E_Unknown;
+ char buffer[PATH_MAX];
+
+ OSL_PRECOND(ppustrWorkingDir, "osl_getProcessWorkingDir(): Invalid parameter");
+
+ if (getcwd (buffer, sizeof(buffer)) != nullptr)
+ {
+ rtl_uString* ustrTmp = nullptr;
+
+ rtl_string2UString(
+ &ustrTmp,
+ buffer, strlen(buffer), osl_getThreadTextEncoding(),
+ OSTRING_TO_OUSTRING_CVTFLAGS);
+ if (ustrTmp != nullptr)
+ {
+ if (osl_getFileURLFromSystemPath (ustrTmp, ppustrWorkingDir) == osl_File_E_None)
+ result = osl_Process_E_None;
+ rtl_uString_release (ustrTmp);
+ }
+ }
+
+ return result;
+}
+
+namespace {
+
+struct ProcessLocale_Impl
+{
+ pthread_mutex_t m_mutex;
+ rtl_Locale * m_pLocale;
+};
+
+}
+
+static struct ProcessLocale_Impl g_process_locale =
+{
+ PTHREAD_MUTEX_INITIALIZER,
+ nullptr
+};
+
+oslProcessError SAL_CALL osl_getProcessLocale( rtl_Locale ** ppLocale )
+{
+ oslProcessError result = osl_Process_E_Unknown;
+ OSL_PRECOND(ppLocale, "osl_getProcessLocale(): Invalid parameter.");
+ if (ppLocale)
+ {
+ pthread_mutex_lock(&(g_process_locale.m_mutex));
+
+ if (g_process_locale.m_pLocale == nullptr)
+ imp_getProcessLocale (&(g_process_locale.m_pLocale));
+ *ppLocale = g_process_locale.m_pLocale;
+ result = osl_Process_E_None;
+
+ pthread_mutex_unlock (&(g_process_locale.m_mutex));
+ }
+ return result;
+}
+
+oslProcessError SAL_CALL osl_setProcessLocale( rtl_Locale * pLocale )
+{
+ OSL_PRECOND(pLocale, "osl_setProcessLocale(): Invalid parameter.");
+
+ pthread_mutex_lock(&(g_process_locale.m_mutex));
+ g_process_locale.m_pLocale = pLocale;
+ pthread_mutex_unlock (&(g_process_locale.m_mutex));
+
+ return osl_Process_E_None;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/profile.cxx b/sal/osl/unx/profile.cxx
new file mode 100644
index 000000000..354fe626f
--- /dev/null
+++ b/sal/osl/unx/profile.cxx
@@ -0,0 +1,1866 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.hxx"
+#include "readwrite_helper.hxx"
+#include "file_url.hxx"
+#include "unixerrnostring.hxx"
+
+#include <osl/diagnose.h>
+#include <osl/profile.h>
+#include <osl/process.h>
+#include <osl/thread.h>
+#include <rtl/alloc.h>
+#include <sal/log.hxx>
+
+#define LINES_INI 32
+#define LINES_ADD 10
+#define SECTIONS_INI 5
+#define SECTIONS_ADD 3
+#define ENTRIES_INI 5
+#define ENTRIES_ADD 3
+
+#define STR_INI_BOOLYES "yes"
+#define STR_INI_BOOLON "on"
+#define STR_INI_BOOLONE "1"
+#define STR_INI_BOOLNO "no"
+#define STR_INI_BOOLOFF "off"
+#define STR_INI_BOOLZERO "0"
+
+#define FLG_USER 0x00FF
+#define FLG_AUTOOPEN 0x0100
+#define FLG_MODIFIED 0x0200
+
+#define DEFAULT_PMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
+
+typedef time_t osl_TStamp;
+
+namespace {
+
+enum osl_TLockMode
+{
+ un_lock, read_lock, write_lock
+};
+
+struct osl_TFile
+{
+ int m_Handle;
+ char* m_pReadPtr;
+ char m_ReadBuf[512];
+ char* m_pWriteBuf;
+ sal_uInt32 m_nWriteBufLen;
+ sal_uInt32 m_nWriteBufFree;
+};
+
+struct osl_TProfileEntry
+{
+ sal_uInt32 m_Line;
+ sal_uInt32 m_Offset;
+ sal_uInt32 m_Len;
+};
+
+struct osl_TProfileSection
+{
+ sal_uInt32 m_Line;
+ sal_uInt32 m_Offset;
+ sal_uInt32 m_Len;
+ sal_uInt32 m_NoEntries;
+ sal_uInt32 m_MaxEntries;
+ osl_TProfileEntry* m_Entries;
+};
+
+/* Profile-data structure hidden behind oslProfile: */
+struct osl_TProfileImpl
+{
+ sal_uInt32 m_Flags;
+ osl_TFile* m_pFile;
+ osl_TStamp m_Stamp;
+ char m_FileName[PATH_MAX + 1];
+ sal_uInt32 m_NoLines;
+ sal_uInt32 m_MaxLines;
+ sal_uInt32 m_NoSections;
+ sal_uInt32 m_MaxSections;
+ char** m_Lines;
+ osl_TProfileSection* m_Sections;
+ pthread_mutex_t m_AccessLock;
+ bool m_bIsValid;
+};
+
+}
+
+static osl_TFile* openFileImpl(const char* pszFilename, oslProfileOption ProfileFlags);
+static osl_TStamp closeFileImpl(osl_TFile* pFile, oslProfileOption Flags);
+static bool OslProfile_lockFile(const osl_TFile* pFile, osl_TLockMode eMode);
+static bool OslProfile_rewindFile(osl_TFile* pFile, bool bTruncate);
+static osl_TStamp OslProfile_getFileStamp(osl_TFile* pFile);
+
+static char* OslProfile_getLine(osl_TFile* pFile);
+static bool OslProfile_putLine(osl_TFile* pFile, const char *pszLine);
+static char* stripBlanks(char* String, sal_uInt32* pLen);
+static char* addLine(osl_TProfileImpl* pProfile, const char* Line);
+static char* insertLine(osl_TProfileImpl* pProfile, const char* Line, sal_uInt32 LineNo);
+static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo);
+static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection,
+ sal_uInt32 NoEntry, sal_uInt32 Line,
+ char* Entry, sal_uInt32 Len);
+static bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection,
+ int Line, char* Entry, sal_uInt32 Len);
+static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry);
+static bool addSection(osl_TProfileImpl* pProfile, int Line, const char* Section, sal_uInt32 Len);
+static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection);
+static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, const char* Section,
+ const char* Entry, sal_uInt32 *pNoEntry);
+static bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile);
+static bool storeProfile(osl_TProfileImpl* pProfile, bool bCleanup);
+static osl_TProfileImpl* acquireProfile(oslProfile Profile, bool bWriteable);
+static bool releaseProfile(osl_TProfileImpl* pProfile);
+
+static bool writeProfileImpl (osl_TFile* pFile);
+static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl*);
+static bool osl_ProfileSwapProfileNames(osl_TProfileImpl*);
+static void osl_ProfileGenerateExtension(const char* pszFileName, const char* pszExtension, char* pszTmpName, int BufferMaxLen);
+static oslProfile osl_psz_openProfile(const char *pszProfileName, oslProfileOption Flags);
+
+oslProfile SAL_CALL osl_openProfile(rtl_uString *ustrProfileName, oslProfileOption Options)
+{
+ char profilePath[PATH_MAX] = "";
+ return
+ (ustrProfileName == nullptr
+ || ustrProfileName->buffer[0] == 0
+ || (FileURLToPath(profilePath, PATH_MAX, ustrProfileName)
+ == osl_File_E_None))
+ ? osl_psz_openProfile(profilePath, Options)
+ : nullptr;
+}
+
+static oslProfile osl_psz_openProfile(const char *pszProfileName, oslProfileOption Flags)
+{
+ osl_TFile* pFile;
+ osl_TProfileImpl* pProfile;
+ bool bRet = false;
+
+ if ( ( pFile = openFileImpl(pszProfileName, Flags ) ) == nullptr )
+ {
+ return nullptr;
+ }
+
+ pProfile = static_cast<osl_TProfileImpl*>(calloc(1, sizeof(osl_TProfileImpl)));
+
+ if ( pProfile == nullptr )
+ {
+ closeFileImpl(pFile, Flags);
+ return nullptr;
+ }
+
+ pProfile->m_Flags = Flags & FLG_USER;
+
+ if ( Flags & ( osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) )
+ {
+ pProfile->m_pFile = pFile;
+ }
+
+ pthread_mutex_init(&(pProfile->m_AccessLock),PTHREAD_MUTEXATTR_DEFAULT);
+ pProfile->m_bIsValid = true;
+
+ pProfile->m_Stamp = OslProfile_getFileStamp(pFile);
+ bRet=loadProfile(pFile, pProfile);
+ bRet &= realpath(pszProfileName, pProfile->m_FileName) != nullptr;
+ SAL_WARN_IF(!bRet, "sal.osl", "realpath(pszProfileName, pProfile->m_FileName) != NULL ==> false");
+
+ if (pProfile->m_pFile == nullptr)
+ closeFileImpl(pFile,pProfile->m_Flags);
+
+ // coverity[leaked_storage] - pFile is not leaked
+ return pProfile;
+}
+
+sal_Bool SAL_CALL osl_closeProfile(oslProfile Profile)
+{
+ osl_TProfileImpl* pProfile = static_cast<osl_TProfileImpl*>(Profile);
+ osl_TProfileImpl* pTmpProfile;
+
+ if ( Profile == nullptr )
+ {
+ return false;
+ }
+
+ pthread_mutex_lock(&(pProfile->m_AccessLock));
+
+ if ( !pProfile->m_bIsValid )
+ {
+ SAL_WARN("sal.osl", "!pProfile->m_bIsValid");
+ pthread_mutex_unlock(&(pProfile->m_AccessLock));
+
+ return false;
+ }
+
+ pProfile->m_bIsValid = false;
+
+ if ( ! ( pProfile->m_Flags & osl_Profile_READLOCK ) && ( pProfile->m_Flags & FLG_MODIFIED ) )
+ {
+ pTmpProfile = acquireProfile(Profile, true);
+
+ if ( pTmpProfile != nullptr )
+ {
+ bool bRet = storeProfile(pTmpProfile, true);
+ SAL_WARN_IF(!bRet, "sal.osl", "storeProfile(pTmpProfile, true) ==> false");
+ }
+ }
+ else
+ {
+ pTmpProfile = acquireProfile(Profile, false);
+ }
+
+ if ( pTmpProfile == nullptr )
+ {
+ pthread_mutex_unlock(&(pProfile->m_AccessLock));
+
+ SAL_INFO("sal.osl", "Out osl_closeProfile [pProfile==0]");
+ return false;
+ }
+
+ pProfile = pTmpProfile;
+
+ if (pProfile->m_pFile != nullptr)
+ closeFileImpl(pProfile->m_pFile,pProfile->m_Flags);
+
+ pProfile->m_pFile = nullptr;
+ pProfile->m_FileName[0] = '\0';
+
+ /* release whole profile data types memory */
+ if ( pProfile->m_NoLines > 0)
+ {
+ unsigned int idx=0;
+ if ( pProfile->m_Lines != nullptr )
+ {
+ for ( idx = 0 ; idx < pProfile->m_NoLines ; ++idx)
+ {
+ if ( pProfile->m_Lines[idx] != nullptr )
+ {
+ free(pProfile->m_Lines[idx]);
+ pProfile->m_Lines[idx]=nullptr;
+ }
+ }
+ free(pProfile->m_Lines);
+ pProfile->m_Lines=nullptr;
+ }
+ if ( pProfile->m_Sections != nullptr )
+ {
+ /*osl_TProfileSection* pSections=pProfile->m_Sections;*/
+ for ( idx = 0 ; idx < pProfile->m_NoSections ; ++idx )
+ {
+ if ( pProfile->m_Sections[idx].m_Entries != nullptr )
+ {
+ free(pProfile->m_Sections[idx].m_Entries);
+ pProfile->m_Sections[idx].m_Entries=nullptr;
+ }
+ }
+ free(pProfile->m_Sections);
+ pProfile->m_Sections=nullptr;
+ }
+ }
+
+ pthread_mutex_unlock(&(pProfile->m_AccessLock));
+
+ pthread_mutex_destroy(&(pProfile->m_AccessLock));
+
+ free(pProfile);
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_flushProfile(oslProfile Profile)
+{
+ osl_TProfileImpl* pProfile = static_cast<osl_TProfileImpl*>(Profile);
+ osl_TFile* pFile;
+ bool bRet = false;
+
+ if ( pProfile == nullptr )
+ {
+ return false;
+ }
+
+ pthread_mutex_lock(&(pProfile->m_AccessLock));
+
+ if ( !pProfile->m_bIsValid )
+ {
+ SAL_WARN_IF(!pProfile->m_bIsValid, "sal.osl", "!pProfile->m_bIsValid");
+ pthread_mutex_unlock(&(pProfile->m_AccessLock));
+ return false;
+ }
+
+ pFile = pProfile->m_pFile;
+ if ( pFile == nullptr || pFile->m_Handle < 0 )
+ {
+ pthread_mutex_unlock(&(pProfile->m_AccessLock));
+
+ return false;
+ }
+
+ if ( pProfile->m_Flags & FLG_MODIFIED )
+ {
+ bRet = storeProfile(pProfile, false);
+ SAL_WARN_IF(!bRet, "sal.osl", "storeProfile(pProfile, false) ==> false");
+ }
+
+ pthread_mutex_unlock(&(pProfile->m_AccessLock));
+ return bRet;
+}
+
+static bool writeProfileImpl(osl_TFile* pFile)
+{
+ if ( pFile == nullptr || pFile->m_Handle < 0 || pFile->m_pWriteBuf == nullptr )
+ {
+ return false;
+ }
+
+ SAL_WARN_IF(
+ (strlen(pFile->m_pWriteBuf)
+ != pFile->m_nWriteBufLen - pFile->m_nWriteBufFree),
+ "sal.osl",
+ strlen(pFile->m_pWriteBuf) << " != "
+ << (pFile->m_nWriteBufLen - pFile->m_nWriteBufFree));
+
+ if ( !safeWrite(pFile->m_Handle, pFile->m_pWriteBuf, pFile->m_nWriteBufLen - pFile->m_nWriteBufFree) )
+ {
+ SAL_INFO("sal.osl", "write failed: " << UnixErrnoString(errno));
+ return false;
+ }
+
+ free(pFile->m_pWriteBuf);
+ pFile->m_pWriteBuf=nullptr;
+ pFile->m_nWriteBufLen=0;
+ pFile->m_nWriteBufFree=0;
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_readProfileString(oslProfile Profile,
+ const char* pszSection,
+ const char* pszEntry,
+ char* pszString,
+ sal_uInt32 MaxLen,
+ const char* pszDefault)
+{
+ sal_uInt32 NoEntry;
+ char* pStr=nullptr;
+ osl_TProfileImpl* pProfile=nullptr;
+ osl_TProfileImpl* pTmpProfile=nullptr;
+ bool bRet = false;
+
+ pTmpProfile = static_cast<osl_TProfileImpl*>(Profile);
+
+ if ( pTmpProfile == nullptr )
+ {
+ return false;
+ }
+
+ pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
+
+ if ( !pTmpProfile->m_bIsValid )
+ {
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return false;
+ }
+
+ pProfile = acquireProfile(Profile, false);
+
+ if ( pProfile == nullptr )
+ {
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return false;
+ }
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ osl_TProfileSection* pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry);
+ if ((pSec != nullptr) &&
+ (NoEntry < pSec->m_NoEntries) &&
+ ((pStr = strchr(pProfile->m_Lines[pSec->m_Entries[NoEntry].m_Line],
+ '=')) != nullptr))
+ {
+ pStr++;
+ }
+ else
+ {
+ pStr=const_cast<char*>(pszDefault);
+ }
+
+ if ( pStr != nullptr )
+ {
+ pStr = stripBlanks(pStr, nullptr);
+ MaxLen = (MaxLen - 1 < strlen(pStr)) ? (MaxLen - 1) : strlen(pStr);
+ pStr = stripBlanks(pStr, &MaxLen);
+ strncpy(pszString, pStr, MaxLen);
+ pszString[MaxLen] = '\0';
+ }
+ }
+ else
+ { /* not implemented */ }
+
+ bRet=releaseProfile(pProfile);
+ SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false");
+
+ if ( pStr == nullptr )
+ {
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return false;
+ }
+
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_readProfileBool(oslProfile Profile,
+ const char* pszSection,
+ const char* pszEntry,
+ sal_Bool Default)
+{
+ char Line[32];
+ Line[0] = '\0';
+
+ if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), ""))
+ {
+ if ((strcasecmp(Line, STR_INI_BOOLYES) == 0) ||
+ (strcasecmp(Line, STR_INI_BOOLON) == 0) ||
+ (strcasecmp(Line, STR_INI_BOOLONE) == 0))
+ Default = true;
+ else
+ if ((strcasecmp(Line, STR_INI_BOOLNO) == 0) ||
+ (strcasecmp(Line, STR_INI_BOOLOFF) == 0) ||
+ (strcasecmp(Line, STR_INI_BOOLZERO) == 0))
+ Default = false;
+ }
+
+ return Default;
+}
+
+sal_uInt32 SAL_CALL osl_readProfileIdent(oslProfile Profile,
+ const char* pszSection,
+ const char* pszEntry,
+ sal_uInt32 FirstId,
+ const char* Strings[],
+ sal_uInt32 Default)
+{
+ sal_uInt32 i;
+ char Line[256];
+ Line[0] = '\0';
+
+ if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), ""))
+ {
+ i = 0;
+ while (Strings[i] != nullptr)
+ {
+ if (strcasecmp(Line, Strings[i]) == 0)
+ {
+ Default = i + FirstId;
+ break;
+ }
+ i++;
+ }
+ }
+
+ return Default;
+}
+
+sal_Bool SAL_CALL osl_writeProfileString(oslProfile Profile,
+ const char* pszSection,
+ const char* pszEntry,
+ const char* pszString)
+{
+ bool bRet = false;
+ sal_uInt32 NoEntry;
+ char* pStr;
+ char* Line = nullptr;
+ osl_TProfileImpl* pProfile = nullptr;
+ osl_TProfileImpl* pTmpProfile = static_cast<osl_TProfileImpl*>(Profile);
+
+ if ( pTmpProfile == nullptr )
+ {
+ return false;
+ }
+
+ pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
+
+ if ( !pTmpProfile->m_bIsValid )
+ {
+ SAL_WARN_IF(!pTmpProfile->m_bIsValid, "sal.osl", "!pTmpProfile->m_bIsValid");
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return false;
+ }
+
+ pProfile=acquireProfile(Profile, true);
+
+ if (pProfile == nullptr)
+ {
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return false;
+ }
+
+ Line = static_cast<char*>(malloc(strlen(pszEntry)+strlen(pszString)+48));
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ osl_TProfileSection* pSec;
+ if ((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) == nullptr)
+ {
+ Line[0] = '\0';
+ addLine(pProfile, Line);
+
+ Line[0] = '[';
+ strcpy(&Line[1], pszSection);
+ Line[1 + strlen(pszSection)] = ']';
+ Line[2 + strlen(pszSection)] = '\0';
+
+ pStr = addLine(pProfile, Line);
+ if ((pStr == nullptr) ||
+ (! addSection(pProfile, pProfile->m_NoLines - 1, &pStr[1], strlen(pszSection))))
+ {
+ bRet=releaseProfile(pProfile);
+ SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false");
+
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ free(Line);
+ return false;
+ }
+
+ pSec = &pProfile->m_Sections[pProfile->m_NoSections - 1];
+ NoEntry = pSec->m_NoEntries;
+ }
+
+ Line[0] = '\0';
+ strcpy(&Line[0], pszEntry);
+ Line[0 + strlen(pszEntry)] = '=';
+ strcpy(&Line[1 + strlen(pszEntry)], pszString);
+
+ if (NoEntry >= pSec->m_NoEntries)
+ {
+ sal_uInt32 i;
+ if (pSec->m_NoEntries > 0)
+ i = pSec->m_Entries[pSec->m_NoEntries - 1].m_Line + 1;
+ else
+ i = pSec->m_Line + 1;
+
+ pStr = insertLine(pProfile, Line, i);
+ if ((pStr == nullptr) ||
+ (! addEntry(pProfile, pSec, i, pStr, strlen(pszEntry))))
+ {
+ bRet=releaseProfile(pProfile);
+ SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false");
+
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+ free(Line);
+
+ return false;
+ }
+
+ pProfile->m_Flags |= FLG_MODIFIED;
+ }
+ else
+ {
+ sal_uInt32 i = pSec->m_Entries[NoEntry].m_Line;
+ free(pProfile->m_Lines[i]);
+ pProfile->m_Lines[i] = strdup(Line);
+ setEntry(pProfile, pSec, NoEntry, i, pProfile->m_Lines[i], strlen(pszEntry));
+
+ pProfile->m_Flags |= FLG_MODIFIED;
+ }
+ }
+ else {
+ /* not implemented */
+ }
+
+ bRet = releaseProfile(pProfile);
+ SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false");
+
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+ if ( Line!= nullptr )
+ {
+ free(Line);
+ }
+
+ return bRet;
+}
+
+sal_Bool SAL_CALL osl_writeProfileBool(oslProfile Profile,
+ const char* pszSection,
+ const char* pszEntry,
+ sal_Bool Value)
+{
+ bool bRet = false;
+
+ if (Value)
+ bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLONE);
+ else
+ bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLZERO);
+
+ return bRet;
+}
+
+sal_Bool SAL_CALL osl_writeProfileIdent(oslProfile Profile,
+ const char* pszSection,
+ const char* pszEntry,
+ sal_uInt32 FirstId,
+ const char* Strings[],
+ sal_uInt32 Value)
+{
+ int i, n = 0;
+ bool bRet = false;
+
+ while (Strings[n] != nullptr)
+ ++n;
+
+ if ((i = Value - FirstId) >= n)
+ bRet = false;
+ else
+ bRet = osl_writeProfileString(Profile, pszSection, pszEntry, Strings[i]);
+
+ return bRet;
+}
+
+sal_Bool SAL_CALL osl_removeProfileEntry(oslProfile Profile,
+ const char *pszSection,
+ const char *pszEntry)
+{
+ sal_uInt32 NoEntry;
+ osl_TProfileImpl* pProfile = nullptr;
+ osl_TProfileImpl* pTmpProfile = nullptr;
+ bool bRet = false;
+
+ pTmpProfile = static_cast<osl_TProfileImpl*>(Profile);
+
+ if ( pTmpProfile == nullptr )
+ {
+ return false;
+ }
+
+ pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
+
+ if ( !pTmpProfile->m_bIsValid )
+ {
+ SAL_WARN_IF(!pTmpProfile->m_bIsValid, "sal.osl", "!pTmpProfile->m_bIsValid");
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+ return false;
+ }
+
+ pProfile = acquireProfile(Profile, true);
+
+ if (pProfile == nullptr)
+ {
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return false;
+ }
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ osl_TProfileSection* pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry);
+ if ((pSec != nullptr) &&
+ (NoEntry < pSec->m_NoEntries))
+ {
+ removeLine(pProfile, pSec->m_Entries[NoEntry].m_Line);
+ removeEntry(pSec, NoEntry);
+ if (pSec->m_NoEntries == 0)
+ {
+ removeLine(pProfile, pSec->m_Line);
+
+ /* remove any empty separation line */
+ if ((pSec->m_Line > 0) && (pProfile->m_Lines[pSec->m_Line - 1][0] == '\0'))
+ removeLine(pProfile, pSec->m_Line - 1);
+
+ removeSection(pProfile, pSec);
+ }
+
+ pProfile->m_Flags |= FLG_MODIFIED;
+ }
+ }
+ else
+ { /* not implemented */ }
+
+ bRet = releaseProfile(pProfile);
+ SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false");
+
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return bRet;
+}
+
+sal_uInt32 SAL_CALL osl_getProfileSectionEntries(oslProfile Profile,
+ const char *pszSection,
+ char* pszBuffer,
+ sal_uInt32 MaxLen)
+{
+ sal_uInt32 i, n = 0;
+ sal_uInt32 NoEntry;
+ osl_TProfileImpl* pProfile = nullptr;
+ osl_TProfileImpl* pTmpProfile = nullptr;
+ bool bRet = false;
+
+ pTmpProfile = static_cast<osl_TProfileImpl*>(Profile);
+
+ if ( pTmpProfile == nullptr )
+ {
+ return 0;
+
+ }
+
+ pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
+
+ if ( !pTmpProfile->m_bIsValid )
+ {
+ SAL_WARN_IF(!pTmpProfile->m_bIsValid, "sal.osl", "!pTmpProfile->m_bIsValid");
+
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return 0;
+ }
+
+ pProfile = acquireProfile(Profile, false);
+
+ if (pProfile == nullptr)
+ {
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return 0;
+ }
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ osl_TProfileSection* pSec;
+ if ((pSec = findEntry(pProfile, pszSection, "", &NoEntry)) != nullptr)
+ {
+ if (MaxLen != 0)
+ {
+ for (i = 0; i < pSec->m_NoEntries; i++)
+ {
+ if ((n + pSec->m_Entries[i].m_Len + 1) < MaxLen)
+ {
+ strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Entries[i].m_Line]
+ [pSec->m_Entries[i].m_Offset], pSec->m_Entries[i].m_Len);
+ n += pSec->m_Entries[i].m_Len;
+ pszBuffer[n++] = '\0';
+ }
+ else
+ break;
+
+ }
+
+ pszBuffer[n++] = '\0';
+ }
+ else
+ {
+ for (i = 0; i < pSec->m_NoEntries; i++)
+ n += pSec->m_Entries[i].m_Len + 1;
+
+ n += 1;
+ }
+ }
+ else
+ n = 0;
+ }
+ else {
+ /* not implemented */
+ }
+
+ bRet=releaseProfile(pProfile);
+ SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false");
+
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return n;
+}
+
+sal_uInt32 SAL_CALL osl_getProfileSections(oslProfile Profile,
+ char* pszBuffer,
+ sal_uInt32 MaxLen)
+{
+ sal_uInt32 i, n = 0;
+ osl_TProfileImpl* pProfile = nullptr;
+ osl_TProfileImpl* pTmpProfile = nullptr;
+ bool bRet = false;
+
+ pTmpProfile = static_cast<osl_TProfileImpl*>(Profile);
+
+ if ( pTmpProfile == nullptr )
+ {
+ return 0;
+ }
+
+ pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
+
+ if ( !pTmpProfile->m_bIsValid )
+ {
+ SAL_WARN_IF(!pTmpProfile->m_bIsValid, "sal.osl", "!pTmpProfile->m_bIsValid");
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return 0;
+ }
+
+ pProfile = acquireProfile(Profile, false);
+
+ if (pProfile == nullptr)
+ {
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return 0;
+ }
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ if (MaxLen != 0)
+ {
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ {
+ osl_TProfileSection* pSec = &pProfile->m_Sections[i];
+
+ if ((n + pSec->m_Len + 1) < MaxLen)
+ {
+ strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset],
+ pSec->m_Len);
+ n += pSec->m_Len;
+ pszBuffer[n++] = '\0';
+ }
+ else
+ break;
+ }
+
+ pszBuffer[n++] = '\0';
+ }
+ else
+ {
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ n += pProfile->m_Sections[i].m_Len + 1;
+
+ n += 1;
+ }
+ }
+ else
+ { /* not implemented */ }
+
+ bRet=releaseProfile(pProfile);
+ SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false");
+
+ pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
+
+ return n;
+}
+
+static osl_TStamp OslProfile_getFileStamp(osl_TFile* pFile)
+{
+ struct stat status;
+
+ if ( (pFile->m_Handle < 0) || (fstat(pFile->m_Handle, &status) < 0) )
+ {
+ return 0;
+ }
+
+ return status.st_mtime;
+}
+
+static bool OslProfile_lockFile(const osl_TFile* pFile, osl_TLockMode eMode)
+{
+ struct flock lock;
+ static bool const bLockingDisabled = getenv( "STAR_PROFILE_LOCKING_DISABLED" ) != nullptr;
+
+ if (pFile->m_Handle < 0)
+ {
+ return false;
+ }
+
+ if ( bLockingDisabled )
+ {
+ return true;
+ }
+
+ lock.l_start = 0;
+ lock.l_whence = SEEK_SET;
+ lock.l_len = 0;
+
+ switch (eMode)
+ {
+ case un_lock:
+ lock.l_type = F_UNLCK;
+ break;
+
+ case read_lock:
+ lock.l_type = F_RDLCK;
+ break;
+
+ case write_lock:
+ lock.l_type = F_WRLCK;
+ break;
+ }
+
+#ifndef MACOSX
+ if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 )
+#else
+ /* Mac OSX will return ENOTSUP for webdav drives so we should ignore it */
+ if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 && errno != ENOTSUP )
+#endif
+ {
+ SAL_INFO("sal.osl", "fcntl failed: " << UnixErrnoString(errno));
+ return false;
+ }
+
+ return true;
+}
+
+static osl_TFile* openFileImpl(const char* pszFilename, oslProfileOption ProfileFlags )
+{
+ int Flags;
+ osl_TFile* pFile = static_cast<osl_TFile*>(calloc(1, sizeof(osl_TFile)));
+ bool bWriteable = false;
+
+ if ( ProfileFlags & ( osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) )
+ {
+ bWriteable = true;
+ }
+
+ if (! bWriteable)
+ {
+ pFile->m_Handle = open(pszFilename, O_RDONLY);
+
+ if (pFile->m_Handle == -1)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "open(" << pszFilename << ",O_RDONLY): " << UnixErrnoString(e));
+ }
+ else
+ SAL_INFO("sal.file", "open(" << pszFilename << ",O_RDONLY) => " << pFile->m_Handle);
+
+ /* mfe: argghh!!! do not check if the file could be opened */
+ /* default mode expects it that way!!! */
+ }
+ else
+ {
+ if (((pFile->m_Handle = open(pszFilename, O_RDWR | O_CREAT | O_EXCL, DEFAULT_PMODE)) < 0) &&
+ ((pFile->m_Handle = open(pszFilename, O_RDWR)) < 0))
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "open(" << pszFilename << ",...): " << UnixErrnoString(e));
+ free(pFile);
+ return nullptr;
+ }
+ else
+ SAL_INFO("sal.file", "open(" << pszFilename << ",...) => " << pFile->m_Handle);
+ }
+
+ /* set close-on-exec flag */
+ if ((Flags = fcntl(pFile->m_Handle, F_GETFD, 0)) != -1)
+ {
+ Flags |= FD_CLOEXEC;
+ int e = fcntl(pFile->m_Handle, F_SETFD, Flags);
+ SAL_INFO_IF(
+ e != 0, "sal.osl",
+ "fcntl to set FD_CLOEXEC failed for " << pszFilename);
+ }
+
+ pFile->m_pWriteBuf=nullptr;
+ pFile->m_nWriteBufFree=0;
+ pFile->m_nWriteBufLen=0;
+
+ if ( ProfileFlags & (osl_Profile_WRITELOCK | osl_Profile_READLOCK ) )
+ {
+ OslProfile_lockFile(pFile, bWriteable ? write_lock : read_lock);
+ }
+
+ return pFile;
+}
+
+static osl_TStamp closeFileImpl(osl_TFile* pFile, oslProfileOption Flags)
+{
+ osl_TStamp stamp = 0;
+
+ if ( pFile == nullptr )
+ {
+ return stamp;
+ }
+
+ if ( pFile->m_Handle >= 0 )
+ {
+ stamp = OslProfile_getFileStamp(pFile);
+
+ if ( Flags & (osl_Profile_WRITELOCK | osl_Profile_READLOCK ) )
+ {
+ OslProfile_lockFile(pFile, un_lock);
+ }
+
+ close(pFile->m_Handle);
+ SAL_INFO("sal.file", "close(" << pFile->m_Handle << ")");
+ pFile->m_Handle = -1;
+ }
+
+ if ( pFile->m_pWriteBuf )
+ {
+ free(pFile->m_pWriteBuf);
+ }
+
+ free(pFile);
+
+ return stamp;
+}
+
+static bool OslProfile_rewindFile(osl_TFile* pFile, bool bTruncate)
+{
+ bool bRet = true;
+
+ if (pFile->m_Handle >= 0)
+ {
+ pFile->m_pReadPtr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf);
+
+ bRet = (lseek(pFile->m_Handle, SEEK_SET, 0) == 0);
+
+ if (bTruncate)
+ {
+ bRet &= (ftruncate(pFile->m_Handle, 0) == 0);
+ }
+
+ }
+
+ return bRet;
+}
+
+static char* OslProfile_getLine(osl_TFile* pFile)
+{
+ int Max, Free, nLineBytes = 0;
+ char* pChr;
+ char* pLine = nullptr;
+ char* pNewLine;
+
+ if ( pFile == nullptr )
+ {
+ return nullptr;
+ }
+
+ if (pFile->m_Handle < 0)
+ return nullptr;
+
+ do
+ {
+ int Bytes = sizeof(pFile->m_ReadBuf) - (pFile->m_pReadPtr - pFile->m_ReadBuf);
+
+ if (Bytes <= 1)
+ {
+ /* refill buffer */
+ memcpy(pFile->m_ReadBuf, pFile->m_pReadPtr, Bytes);
+ pFile->m_pReadPtr = pFile->m_ReadBuf;
+
+ Free = sizeof(pFile->m_ReadBuf) - Bytes;
+
+ if ((Max = read(pFile->m_Handle, &pFile->m_ReadBuf[Bytes], Free)) < 0)
+ {
+ SAL_INFO("sal.osl", "read failed: " << UnixErrnoString(errno));
+
+ if( pLine )
+ free( pLine );
+ pLine = nullptr;
+ break;
+ }
+
+ if (Max < Free)
+ {
+ if ((Max == 0) && ! pLine)
+ break;
+
+ pFile->m_ReadBuf[Bytes + Max] = '\0';
+ }
+ }
+
+ for (pChr = pFile->m_pReadPtr;
+ (*pChr != '\n') && (*pChr != '\r') && (*pChr != '\0') &&
+ (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1));
+ pChr++);
+
+ Max = pChr - pFile->m_pReadPtr;
+ pNewLine = static_cast<char*>(malloc( nLineBytes + Max + 1 ));
+ if( pLine )
+ {
+ memcpy( pNewLine, pLine, nLineBytes );
+ free( pLine );
+ }
+ memcpy(pNewLine+nLineBytes, pFile->m_pReadPtr, Max);
+ nLineBytes += Max;
+ pNewLine[ nLineBytes ] = 0;
+ pLine = pNewLine;
+
+ if (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1))
+ {
+ if (*pChr != '\0')
+ {
+ if ((pChr[0] == '\r') && (pChr[1] == '\n'))
+ pChr += 2;
+ else
+ pChr += 1;
+ }
+
+ if ((pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf))) &&
+ (*pChr == '\0'))
+ pChr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf);
+
+ /* setting Max to -1 indicates terminating read loop */
+ Max = -1;
+ }
+
+ pFile->m_pReadPtr = pChr;
+ }
+ while (Max > 0) ;
+
+ return pLine;
+}
+
+static bool OslProfile_putLine(osl_TFile* pFile, const char *pszLine)
+{
+ unsigned int Len = strlen(pszLine);
+
+ if ( pFile == nullptr || pFile->m_Handle < 0 )
+ {
+ return false;
+ }
+
+ if ( pFile->m_pWriteBuf == nullptr )
+ {
+ pFile->m_pWriteBuf = static_cast<char*>(malloc(Len+3));
+ pFile->m_nWriteBufLen = Len+3;
+ pFile->m_nWriteBufFree = Len+3;
+ }
+ else
+ {
+ if ( pFile->m_nWriteBufFree <= Len + 3 )
+ {
+ char* pTmp;
+
+ pTmp=static_cast<char*>(realloc(pFile->m_pWriteBuf,( ( pFile->m_nWriteBufLen + Len ) * 2) ));
+ if ( pTmp == nullptr )
+ {
+ return false;
+ }
+ pFile->m_pWriteBuf = pTmp;
+ pFile->m_nWriteBufFree = pFile->m_nWriteBufFree + pFile->m_nWriteBufLen + ( 2 * Len );
+ pFile->m_nWriteBufLen = ( pFile->m_nWriteBufLen + Len ) * 2;
+ memset( (pFile->m_pWriteBuf) + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ), 0, pFile->m_nWriteBufFree);
+ }
+ }
+
+ memcpy(pFile->m_pWriteBuf + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ),pszLine,Len+1);
+ pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len]='\n';
+ pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len + 1]='\0';
+
+ pFile->m_nWriteBufFree-=Len+1;
+
+ return true;
+}
+
+static char* stripBlanks(char* String, sal_uInt32* pLen)
+{
+ if ( ( pLen != nullptr ) && ( *pLen != 0 ) )
+ {
+ while ((String[*pLen - 1] == ' ') || (String[*pLen - 1] == '\t'))
+ (*pLen)--;
+
+ while ( (*String == ' ') || (*String == '\t') )
+ {
+ String++;
+ (*pLen)--;
+ }
+ }
+ else
+ while ( (*String == ' ') || (*String == '\t') )
+ String++;
+
+ return String;
+}
+
+static char* addLine(osl_TProfileImpl* pProfile, const char* Line)
+{
+ if (pProfile->m_NoLines >= pProfile->m_MaxLines)
+ {
+ if (pProfile->m_Lines == nullptr)
+ {
+ pProfile->m_MaxLines = LINES_INI;
+ pProfile->m_Lines = static_cast<char **>(calloc(pProfile->m_MaxLines, sizeof(char *)));
+ }
+ else
+ {
+ unsigned int idx=0;
+ unsigned int oldmax=pProfile->m_MaxLines;
+
+ pProfile->m_MaxLines += LINES_ADD;
+ pProfile->m_Lines = static_cast<char **>(realloc(pProfile->m_Lines,
+ pProfile->m_MaxLines * sizeof(char *)));
+ for ( idx = oldmax ; idx < pProfile->m_MaxLines ; ++idx )
+ {
+ pProfile->m_Lines[idx]=nullptr;
+ }
+ }
+ }
+ if (pProfile->m_Lines == nullptr)
+ {
+ pProfile->m_NoLines = 0;
+ pProfile->m_MaxLines = 0;
+ return nullptr;
+ }
+
+ if ( pProfile->m_Lines[pProfile->m_NoLines] != nullptr )
+ {
+ free(pProfile->m_Lines[pProfile->m_NoLines]);
+ }
+ pProfile->m_Lines[pProfile->m_NoLines++] = strdup(Line);
+
+ return pProfile->m_Lines[pProfile->m_NoLines - 1];
+}
+
+static char* insertLine(osl_TProfileImpl* pProfile, const char* Line, sal_uInt32 LineNo)
+{
+ if (pProfile->m_NoLines >= pProfile->m_MaxLines)
+ {
+ if (pProfile->m_Lines == nullptr)
+ {
+ pProfile->m_MaxLines = LINES_INI;
+ pProfile->m_Lines = static_cast<char **>(calloc(pProfile->m_MaxLines, sizeof(char *)));
+ }
+ else
+ {
+ pProfile->m_MaxLines += LINES_ADD;
+ pProfile->m_Lines = static_cast<char **>(realloc(pProfile->m_Lines,
+ pProfile->m_MaxLines * sizeof(char *)));
+
+ memset(&pProfile->m_Lines[pProfile->m_NoLines],
+ 0,
+ (pProfile->m_MaxLines - pProfile->m_NoLines - 1) * sizeof(char*));
+ }
+
+ if (pProfile->m_Lines == nullptr)
+ {
+ pProfile->m_NoLines = 0;
+ pProfile->m_MaxLines = 0;
+ return nullptr;
+ }
+ }
+
+ LineNo = std::min(LineNo, pProfile->m_NoLines);
+
+ if (LineNo < pProfile->m_NoLines)
+ {
+ sal_uInt32 i, n;
+
+ memmove(&pProfile->m_Lines[LineNo + 1], &pProfile->m_Lines[LineNo],
+ (pProfile->m_NoLines - LineNo) * sizeof(char *));
+
+ /* adjust line references */
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ {
+ osl_TProfileSection* pSec = &pProfile->m_Sections[i];
+
+ if (pSec->m_Line >= LineNo)
+ pSec->m_Line++;
+
+ for (n = 0; n < pSec->m_NoEntries; n++)
+ if (pSec->m_Entries[n].m_Line >= LineNo)
+ pSec->m_Entries[n].m_Line++;
+ }
+ }
+
+ pProfile->m_NoLines++;
+
+ pProfile->m_Lines[LineNo] = strdup(Line);
+
+ return pProfile->m_Lines[LineNo];
+}
+
+static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo)
+{
+ if (LineNo >= pProfile->m_NoLines)
+ return;
+
+ free(pProfile->m_Lines[LineNo]);
+ pProfile->m_Lines[LineNo]=nullptr;
+ if (pProfile->m_NoLines - LineNo > 1)
+ {
+ sal_uInt32 i, n;
+
+ memmove(&pProfile->m_Lines[LineNo], &pProfile->m_Lines[LineNo + 1],
+ (pProfile->m_NoLines - LineNo - 1) * sizeof(char *));
+
+ memset(&pProfile->m_Lines[pProfile->m_NoLines - 1],
+ 0,
+ (pProfile->m_MaxLines - pProfile->m_NoLines) * sizeof(char*));
+
+ /* adjust line references */
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ {
+ osl_TProfileSection* pSec = &pProfile->m_Sections[i];
+
+ if (pSec->m_Line > LineNo)
+ pSec->m_Line--;
+
+ for (n = 0; n < pSec->m_NoEntries; n++)
+ if (pSec->m_Entries[n].m_Line > LineNo)
+ pSec->m_Entries[n].m_Line--;
+ }
+ }
+ else
+ {
+ pProfile->m_Lines[LineNo] = nullptr;
+ }
+
+ pProfile->m_NoLines--;
+}
+
+static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection,
+ sal_uInt32 NoEntry, sal_uInt32 Line,
+ char* Entry, sal_uInt32 Len)
+{
+ Entry = stripBlanks(Entry, &Len);
+ pSection->m_Entries[NoEntry].m_Line = Line;
+ pSection->m_Entries[NoEntry].m_Offset = Entry - pProfile->m_Lines[Line];
+ pSection->m_Entries[NoEntry].m_Len = Len;
+}
+
+static bool addEntry(osl_TProfileImpl* pProfile,
+ osl_TProfileSection *pSection,
+ int Line, char* Entry,
+ sal_uInt32 Len)
+{
+ if (pSection != nullptr)
+ {
+ if (pSection->m_NoEntries >= pSection->m_MaxEntries)
+ {
+ if (pSection->m_Entries == nullptr)
+ {
+ pSection->m_MaxEntries = ENTRIES_INI;
+ pSection->m_Entries = static_cast<osl_TProfileEntry *>(malloc(
+ pSection->m_MaxEntries * sizeof(osl_TProfileEntry)));
+ }
+ else
+ {
+ pSection->m_MaxEntries += ENTRIES_ADD;
+ pSection->m_Entries = static_cast<osl_TProfileEntry *>(realloc(pSection->m_Entries,
+ pSection->m_MaxEntries * sizeof(osl_TProfileEntry)));
+ }
+
+ if (pSection->m_Entries == nullptr)
+ {
+ pSection->m_NoEntries = 0;
+ pSection->m_MaxEntries = 0;
+ return false;
+ }
+ }
+
+ pSection->m_NoEntries++;
+
+ Entry = stripBlanks(Entry, &Len);
+ setEntry(pProfile, pSection, pSection->m_NoEntries - 1, Line,
+ Entry, Len);
+
+ return true;
+ }
+
+ return false;
+}
+
+static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry)
+{
+ if (NoEntry >= pSection->m_NoEntries)
+ return;
+
+ if (pSection->m_NoEntries - NoEntry > 1)
+ {
+ memmove(&pSection->m_Entries[NoEntry],
+ &pSection->m_Entries[NoEntry + 1],
+ (pSection->m_NoEntries - NoEntry - 1) * sizeof(osl_TProfileEntry));
+ pSection->m_Entries[pSection->m_NoEntries - 1].m_Line=0;
+ pSection->m_Entries[pSection->m_NoEntries - 1].m_Offset=0;
+ pSection->m_Entries[pSection->m_NoEntries - 1].m_Len=0;
+ }
+
+ pSection->m_NoEntries--;
+
+}
+
+static bool addSection(osl_TProfileImpl* pProfile, int Line, const char* Section, sal_uInt32 Len)
+{
+ if (pProfile->m_NoSections >= pProfile->m_MaxSections)
+ {
+ if (pProfile->m_Sections == nullptr)
+ {
+ pProfile->m_MaxSections = SECTIONS_INI;
+ pProfile->m_Sections = static_cast<osl_TProfileSection *>(calloc(pProfile->m_MaxSections, sizeof(osl_TProfileSection)));
+ }
+ else
+ {
+ unsigned int idx=0;
+ unsigned int oldmax=pProfile->m_MaxSections;
+
+ pProfile->m_MaxSections += SECTIONS_ADD;
+ pProfile->m_Sections = static_cast<osl_TProfileSection *>(realloc(pProfile->m_Sections,
+ pProfile->m_MaxSections * sizeof(osl_TProfileSection)));
+ for ( idx = oldmax ; idx < pProfile->m_MaxSections ; ++idx )
+ {
+ pProfile->m_Sections[idx].m_Entries=nullptr;
+ }
+ }
+
+ if (pProfile->m_Sections == nullptr)
+ {
+ pProfile->m_NoSections = 0;
+ pProfile->m_MaxSections = 0;
+ return false;
+ }
+ }
+
+ pProfile->m_NoSections++;
+
+ if ( pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries != nullptr )
+ {
+ free(pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries);
+ }
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = nullptr;
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_NoEntries = 0;
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_MaxEntries = 0;
+
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Line = Line;
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Offset = Section - pProfile->m_Lines[Line];
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Len = Len;
+
+ return true;
+}
+
+static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection)
+{
+ sal_uInt32 Section;
+
+ if ((Section = pSection - pProfile->m_Sections) >= pProfile->m_NoSections)
+ return;
+
+ free (pSection->m_Entries);
+ pSection->m_Entries=nullptr;
+ if (pProfile->m_NoSections - Section > 1)
+ {
+ memmove(&pProfile->m_Sections[Section], &pProfile->m_Sections[Section + 1],
+ (pProfile->m_NoSections - Section - 1) * sizeof(osl_TProfileSection));
+
+ memset(&pProfile->m_Sections[pProfile->m_NoSections - 1],
+ 0,
+ (pProfile->m_MaxSections - pProfile->m_NoSections) * sizeof(osl_TProfileSection));
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = nullptr;
+ }
+ else
+ {
+ pSection->m_Entries = nullptr;
+ }
+
+ pProfile->m_NoSections--;
+}
+
+static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile,
+ const char* Section,
+ const char* Entry,
+ sal_uInt32 *pNoEntry)
+{
+ static sal_uInt32 Sect = 0;
+ sal_uInt32 i, n;
+ sal_uInt32 Len;
+ osl_TProfileSection* pSec=nullptr;
+
+ Len = strlen(Section);
+
+ n = Sect;
+
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ {
+ n %= pProfile->m_NoSections;
+ pSec = &pProfile->m_Sections[n];
+ if ((Len == pSec->m_Len) &&
+ (strncasecmp(Section, &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset], pSec->m_Len)
+ == 0))
+ break;
+ n++;
+ }
+
+ Sect = n;
+
+ if (i < pProfile->m_NoSections)
+ {
+ Len = strlen(Entry);
+
+ *pNoEntry = pSec->m_NoEntries;
+
+ for (i = 0; i < pSec->m_NoEntries; i++)
+ {
+ const char* pStr = &pProfile->m_Lines[pSec->m_Entries[i].m_Line]
+ [pSec->m_Entries[i].m_Offset];
+ if ((Len == pSec->m_Entries[i].m_Len) &&
+ (strncasecmp(Entry, pStr, pSec->m_Entries[i].m_Len)
+ == 0))
+ {
+ *pNoEntry = i;
+ break;
+ }
+ }
+ }
+ else
+ pSec = nullptr;
+
+ return pSec;
+}
+
+static bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile)
+{
+ sal_uInt32 i;
+ char* pStr;
+ char* pChar;
+
+ char* pLine;
+
+ if ( !pFile )
+ {
+ return false;
+ }
+
+ if ( !pProfile )
+ {
+ return false;
+ }
+
+ pProfile->m_NoLines = 0;
+ pProfile->m_NoSections = 0;
+
+ OSL_VERIFY(OslProfile_rewindFile(pFile, false));
+
+ while ( ( pLine=OslProfile_getLine(pFile) ) != nullptr )
+ {
+ char* bWasAdded = addLine( pProfile, pLine );
+ free( pLine );
+ SAL_WARN_IF(!bWasAdded, "sal.osl", "addLine( pProfile, pLine ) ==> false");
+ if ( ! bWasAdded )
+ return false;
+ }
+
+ for (i = 0; i < pProfile->m_NoLines; i++)
+ {
+ pStr = stripBlanks(pProfile->m_Lines[i], nullptr);
+
+ if ((*pStr == '\0') || (*pStr == ';'))
+ continue;
+
+ if ((*pStr != '[') || ((pChar = strrchr(pStr, ']')) == nullptr) ||
+ ((pChar - pStr) <= 2))
+ {
+ /* insert entry */
+
+ if (pProfile->m_NoSections < 1)
+ continue;
+
+ if ((pChar = strchr(pStr, '=')) == nullptr)
+ pChar = pStr + strlen(pStr);
+
+ if (! addEntry(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1],
+ i, pStr, pChar - pStr))
+ {
+ SAL_WARN("sal.osl", "Adding entry => false");
+ continue;
+ }
+
+ }
+ else
+ {
+ /* new section */
+
+ if (! addSection(pProfile, i, pStr + 1, pChar - pStr - 1))
+ {
+ SAL_WARN("sal.osl", "Adding section => false");
+ continue;
+ }
+
+ }
+ }
+
+ return true;
+}
+
+static bool storeProfile(osl_TProfileImpl* pProfile, bool bCleanup)
+{
+ if (pProfile->m_Lines != nullptr)
+ {
+ if (pProfile->m_Flags & FLG_MODIFIED)
+ {
+ sal_uInt32 i;
+
+ osl_TFile* pTmpFile = osl_openTmpProfileImpl(pProfile);
+
+ if ( pTmpFile == nullptr )
+ {
+ return false;
+ }
+
+ OSL_VERIFY(OslProfile_rewindFile(pTmpFile, true));
+
+ for ( i = 0 ; i < pProfile->m_NoLines ; i++ )
+ {
+ OSL_VERIFY(OslProfile_putLine(pTmpFile, pProfile->m_Lines[i]));
+ }
+
+ if ( ! writeProfileImpl(pTmpFile) )
+ {
+ if ( pTmpFile->m_pWriteBuf != nullptr )
+ {
+ free(pTmpFile->m_pWriteBuf);
+ }
+
+ pTmpFile->m_pWriteBuf=nullptr;
+ pTmpFile->m_nWriteBufLen=0;
+ pTmpFile->m_nWriteBufFree=0;
+
+ closeFileImpl(pTmpFile,pProfile->m_Flags);
+
+ return false;
+ }
+
+ pProfile->m_Flags &= ~FLG_MODIFIED;
+
+ closeFileImpl(pProfile->m_pFile,pProfile->m_Flags);
+ closeFileImpl(pTmpFile,pProfile->m_Flags);
+
+ osl_ProfileSwapProfileNames(pProfile);
+
+ pProfile->m_pFile = openFileImpl(pProfile->m_FileName,pProfile->m_Flags);
+
+ }
+
+ if (bCleanup)
+ {
+ while (pProfile->m_NoLines > 0)
+ removeLine(pProfile, pProfile->m_NoLines - 1);
+
+ free(pProfile->m_Lines);
+ pProfile->m_Lines = nullptr;
+ pProfile->m_NoLines = 0;
+ pProfile->m_MaxLines = 0;
+
+ while (pProfile->m_NoSections > 0)
+ removeSection(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1]);
+
+ free(pProfile->m_Sections);
+ pProfile->m_Sections = nullptr;
+ pProfile->m_NoSections = 0;
+ pProfile->m_MaxSections = 0;
+ }
+ }
+
+ return true;
+}
+
+static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl* pProfile)
+{
+ osl_TFile* pFile=nullptr;
+ char const * const pszExtension = "tmp";
+ char pszTmpName[PATH_MAX];
+ oslProfileOption PFlags=0;
+
+ pszTmpName[0] = '\0';
+
+ /* generate tmp profilename */
+ osl_ProfileGenerateExtension(pProfile->m_FileName, pszExtension, pszTmpName, PATH_MAX);
+
+ if ( pszTmpName[0] == 0 )
+ {
+ return nullptr;
+ }
+
+ if ( ! ( pProfile->m_Flags & osl_Profile_READLOCK ) )
+ {
+ PFlags |= osl_Profile_WRITELOCK;
+ }
+
+ /* open this file */
+ pFile = openFileImpl(pszTmpName,pProfile->m_Flags | PFlags);
+
+ /* return new pFile */
+ return pFile;
+}
+
+static bool osl_ProfileSwapProfileNames(osl_TProfileImpl* pProfile)
+{
+ char pszBakFile[PATH_MAX];
+ char pszTmpFile[PATH_MAX];
+
+ pszBakFile[0] = '\0';
+ pszTmpFile[0] = '\0';
+
+ osl_ProfileGenerateExtension(pProfile->m_FileName, "bak", pszBakFile, PATH_MAX);
+ osl_ProfileGenerateExtension(pProfile->m_FileName, "tmp", pszTmpFile, PATH_MAX);
+
+ /* unlink bak */
+ unlink( pszBakFile );
+
+ // Rename ini -> bak, then tmp -> ini:
+ bool result = rename( pProfile->m_FileName, pszBakFile ) == 0;
+ if (!result)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "rename(" << pProfile->m_FileName << "," << pszBakFile << "): " << UnixErrnoString(e));
+ }
+ else
+ {
+ SAL_INFO("sal.file", "rename(" << pProfile->m_FileName << "," << pszBakFile << "): OK");
+ result = rename( pszTmpFile, pProfile->m_FileName ) == 0;
+ if (!result)
+ {
+ int e = errno;
+ SAL_INFO("sal.file", "rename(" << pszTmpFile << "," << pProfile->m_FileName << "): " << UnixErrnoString(e));
+ }
+ else
+ {
+ SAL_INFO("sal.file", "rename(" << pszTmpFile << "," << pProfile->m_FileName << "): OK");
+ }
+ }
+ return result;
+}
+
+static void osl_ProfileGenerateExtension(const char* pszFileName, const char* pszExtension, char* pszTmpName, int BufferMaxLen)
+{
+ char* cursor = pszTmpName;
+ int len;
+
+ /* concatenate filename + "." + extension, limited to the size of the
+ * output buffer; in case of overrun, data is truncated at the end...
+ * and the result is always 0-terminated.
+ */
+ len = strlen(pszFileName);
+ if(len < BufferMaxLen)
+ {
+ memcpy(cursor, pszFileName, len);
+ cursor += len;
+ BufferMaxLen -= len;
+ }
+ else
+ {
+ memcpy(cursor, pszFileName, BufferMaxLen - 1);
+ cursor += BufferMaxLen - 1;
+ BufferMaxLen = 1;
+ }
+ if(BufferMaxLen > 1)
+ {
+ *cursor++ = '.';
+ BufferMaxLen -= 1;
+ }
+ len = strlen(pszExtension);
+ if(len < BufferMaxLen)
+ {
+ memcpy(cursor, pszExtension, len);
+ cursor += len;
+ }
+ else
+ {
+ memcpy(cursor, pszExtension, BufferMaxLen - 1);
+ cursor += BufferMaxLen - 1;
+ }
+ *cursor = 0;
+}
+
+static osl_TProfileImpl* acquireProfile(oslProfile Profile, bool bWriteable)
+{
+ osl_TProfileImpl* pProfile = static_cast<osl_TProfileImpl*>(Profile);
+ oslProfileOption PFlags=0;
+
+ if ( bWriteable )
+ {
+ PFlags = osl_Profile_DEFAULT | osl_Profile_WRITELOCK;
+ }
+ else
+ {
+ PFlags = osl_Profile_DEFAULT;
+ }
+
+ if (pProfile == nullptr)
+ {
+ if ( ( pProfile = static_cast<osl_TProfileImpl*>(osl_openProfile(nullptr, PFlags )) ) != nullptr )
+ {
+ pProfile->m_Flags |= FLG_AUTOOPEN;
+ }
+ }
+ else
+ {
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ if (! (pProfile->m_Flags & (osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE )))
+ {
+ osl_TStamp Stamp;
+
+ if (! (pProfile->m_pFile = openFileImpl(pProfile->m_FileName, pProfile->m_Flags | PFlags )))
+ return nullptr;
+
+ Stamp = OslProfile_getFileStamp(pProfile->m_pFile);
+
+ if (memcmp(&Stamp, &(pProfile->m_Stamp), sizeof(osl_TStamp)))
+ {
+ pProfile->m_Stamp = Stamp;
+ bool bRet = loadProfile(pProfile->m_pFile, pProfile);
+ SAL_WARN_IF(!bRet, "sal.osl", "loadProfile(pProfile->m_pFile, pProfile) ==> false");
+ }
+ }
+ else
+ {
+ /* A readlock file could not be written */
+ if ((pProfile->m_Flags & osl_Profile_READLOCK) && bWriteable)
+ {
+ return nullptr;
+ }
+ }
+ }
+ }
+
+ return pProfile;
+}
+
+static bool releaseProfile(osl_TProfileImpl* pProfile)
+{
+ if ( pProfile == nullptr )
+ {
+ return false;
+ }
+
+ if (pProfile->m_Flags & FLG_AUTOOPEN)
+ {
+ return osl_closeProfile(static_cast<oslProfile>(pProfile));
+ }
+
+ if (! (pProfile->m_Flags & (osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE )))
+ {
+ if (pProfile->m_Flags & FLG_MODIFIED)
+ {
+ bool bRet = storeProfile(pProfile, false);
+ SAL_WARN_IF(!bRet, "sal.osl", "storeProfile(pProfile, false) ==> false");
+ }
+
+ closeFileImpl(pProfile->m_pFile,pProfile->m_Flags);
+ pProfile->m_pFile = nullptr;
+ }
+
+ return true;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/random.cxx b/sal/osl/unx/random.cxx
new file mode 100644
index 000000000..260aa61ba
--- /dev/null
+++ b/sal/osl/unx/random.cxx
@@ -0,0 +1,46 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "system.hxx"
+#include <oslrandom.h>
+
+#include <assert.h>
+
+int osl_get_system_random_data(char* buffer, size_t desired_len)
+{
+ int fd;
+
+ assert(buffer);
+ fd = open("/dev/urandom", O_RDONLY);
+ if (fd != -1)
+ {
+ while (desired_len)
+ {
+ ssize_t nb_read;
+ if ((nb_read = read(fd, buffer, desired_len)) == -1)
+ {
+ if (errno != EINTR)
+ {
+ close(fd);
+ return false;
+ }
+ }
+ else
+ {
+ buffer += nb_read;
+ desired_len -= nb_read;
+ }
+ }
+ close(fd);
+ return true;
+ }
+ return false;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/readwrite_helper.cxx b/sal/osl/unx/readwrite_helper.cxx
new file mode 100644
index 000000000..49c44c2c0
--- /dev/null
+++ b/sal/osl/unx/readwrite_helper.cxx
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <algorithm>
+#include <cassert>
+#include <cstddef>
+#include <limits>
+
+#include "readwrite_helper.hxx"
+
+#include "system.hxx"
+
+namespace {
+
+std::size_t cap_ssize_t(std::size_t value) {
+ return std::min(value, std::size_t(std::numeric_limits<ssize_t>::max()));
+}
+
+}
+
+bool safeWrite(int fd, void* data, std::size_t dataSize)
+{
+ auto nToWrite = dataSize;
+ unsigned char* dataToWrite = static_cast<unsigned char *>(data);
+
+ while ( nToWrite ) {
+ auto nWritten = write(fd, dataToWrite, cap_ssize_t(nToWrite));
+ if ( nWritten < 0 ) {
+ if ( errno == EINTR )
+ continue;
+
+ return false;
+
+ }
+
+ assert(nWritten > 0);
+ nToWrite -= nWritten;
+ dataToWrite += nWritten;
+ }
+
+ return true;
+}
+
+bool safeRead( int fd, void* buffer, std::size_t count )
+{
+ auto nToRead = count;
+ unsigned char* bufferForReading = static_cast<unsigned char *>(buffer);
+
+ while ( nToRead ) {
+ auto nRead = read(fd, bufferForReading, cap_ssize_t(nToRead));
+ if ( nRead < 0 ) {
+ // We were interrupted before reading, retry.
+ if (errno == EINTR)
+ continue;
+
+ return false;
+ }
+
+ // If we reach the EOF, we consider this a partial transfer and thus
+ // an error.
+ if ( nRead == 0 )
+ return false;
+
+ nToRead -= nRead;
+ bufferForReading += nRead;
+ }
+
+ return true;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/readwrite_helper.hxx b/sal/osl/unx/readwrite_helper.hxx
new file mode 100644
index 000000000..133ccd016
--- /dev/null
+++ b/sal/osl/unx/readwrite_helper.hxx
@@ -0,0 +1,26 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_READWRITE_HELPER_HXX
+#define INCLUDED_SAL_OSL_UNX_READWRITE_HELPER_HXX
+
+#include <sal/config.h>
+
+#include <cstddef>
+
+bool safeWrite(int fd, void* data, std::size_t dataSize);
+
+// This function *will* read |count| bytes from |fd|, busy looping
+// if needed. Don't use it when you don't know if you can request enough
+// data. It will return sal_False for any partial transfer or error.
+bool safeRead(int fd, void* buffer, std::size_t count);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/salinit.cxx b/sal/osl/unx/salinit.cxx
new file mode 100644
index 000000000..c55cb2667
--- /dev/null
+++ b/sal/osl/unx/salinit.cxx
@@ -0,0 +1,98 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_features.h>
+
+#include <sal/config.h>
+
+#if defined MACOSX
+#include <cassert>
+#include <limits>
+#include <unistd.h>
+#include <sys/stat.h>
+#endif
+
+#include <config_global.h>
+#include <osl/process.h>
+#include <sal/main.h>
+#include <sal/types.h>
+
+#include "saltime.hxx"
+#include "soffice.hxx"
+#include <salusesyslog.hxx>
+
+#if HAVE_SYSLOG_H
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#endif
+
+extern "C" {
+
+void sal_detail_initialize(int argc, char ** argv) {
+ if (argc == sal::detail::InitializeSoffice)
+ {
+ sal::detail::setSoffice();
+ return;
+ }
+#if defined MACOSX && !HAVE_FEATURE_MACOSX_SANDBOX
+ // On macOS when not sandboxed, soffice can restart itself via exec (see
+ // restartOnMac in desktop/source/app/app.cxx), which leaves all file
+ // descriptors open, which in turn can have unwanted effects (see
+ // <https://bugs.libreoffice.org/show_bug.cgi?id=50603> "Unable to update
+ // LibreOffice without resetting user profile"). But closing fds in
+ // restartOnMac before calling exec does not work, as additional threads
+ // might still be running then, which can still use those fds and cause
+ // crashes. Therefore, the simplest solution is to close fds at process
+ // start (as early as possible, so that no other threads have been created
+ // yet that might already have opened some fds); this is done for all kinds
+ // of processes here, not just soffice, but hopefully none of our processes
+ // rely on being spawned with certain fds already open. Unfortunately, Mac
+ // macOS appears to have no better interface to close all fds (like
+ // closefrom):
+ long openMax = sysconf(_SC_OPEN_MAX);
+ // When LibreOffice restarts itself on macOS 11 beta on arm64, for
+ // some reason sysconf(_SC_OPEN_MAX) returns 0x7FFFFFFFFFFFFFFF,
+ // so use a sanity limit here.
+ if (openMax == -1 || openMax == std::numeric_limits<long>::max()) {
+ openMax = 100000;
+ }
+ assert(openMax >= 0 && openMax <= std::numeric_limits< int >::max());
+ for (int fd = 3; fd < int(openMax); ++fd) {
+ struct stat s;
+ if (fstat(fd, &s) != -1 && S_ISREG(s.st_mode))
+ close(fd);
+ }
+#endif
+ sal_initGlobalTimer();
+#if HAVE_SYSLOG_H
+ const char *use_syslog = getenv("SAL_LOG_SYSLOG");
+ sal_use_syslog = use_syslog != nullptr && !strcmp(use_syslog, "1");
+ if (sal_use_syslog)
+ openlog("libreoffice", 0, LOG_USER);
+#endif
+
+ osl_setCommandArgs(argc, argv);
+}
+
+void sal_detail_deinitialize() {}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/saltime.hxx b/sal/osl/unx/saltime.hxx
new file mode 100644
index 000000000..03e8047e0
--- /dev/null
+++ b/sal/osl/unx/saltime.hxx
@@ -0,0 +1,29 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_SALTIME_HXX
+#define INCLUDED_SAL_OSL_UNX_SALTIME_HXX
+
+#include <sal/config.h>
+
+void sal_initGlobalTimer();
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/secimpl.hxx b/sal/osl/unx/secimpl.hxx
new file mode 100644
index 000000000..1577d6609
--- /dev/null
+++ b/sal/osl/unx/secimpl.hxx
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_SECIMPL_HXX
+#define INCLUDED_SAL_OSL_UNX_SECIMPL_HXX
+
+#include <pwd.h>
+
+struct oslSecurityImpl
+{
+ struct passwd m_pPasswd;
+ char m_buffer[1]; /* should be a C99 flexible array member */
+};
+
+bool osl_psz_getUserIdent(oslSecurity Security, char* pszIdent, sal_uInt32 nMax);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/security.cxx b/sal/osl/unx/security.cxx
new file mode 100644
index 000000000..f541c9000
--- /dev/null
+++ b/sal/osl/unx/security.cxx
@@ -0,0 +1,537 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstddef>
+#include <cstring>
+#include <limits>
+
+#ifdef IOS
+#include <premac.h>
+#import <Foundation/Foundation.h>
+#include <postmac.h>
+#endif
+
+#include "system.hxx"
+
+#include <o3tl/safeint.hxx>
+#include <osl/security.h>
+#include <rtl/bootstrap.hxx>
+#include <sal/log.hxx>
+
+#include <osl/thread.h>
+#include <osl/file.h>
+
+#if defined LINUX || defined __sun
+#include <crypt.h>
+#endif
+
+#if defined HAIKU
+#include <fs_info.h>
+#include <FindDirectory.h>
+#endif
+
+#include "secimpl.hxx"
+
+#ifdef ANDROID
+#define getpwuid_r(uid, pwd, buf, buflen, result) (*(result) = getpwuid(uid), (*(result) ? (memcpy (buf, *(result), sizeof (struct passwd)), 0) : errno))
+#endif
+
+static bool osl_psz_getHomeDir(oslSecurity Security, OString* pszDirectory);
+static bool osl_psz_getConfigDir(oslSecurity Security, OString* pszDirectory);
+
+static bool sysconf_SC_GETPW_R_SIZE_MAX(std::size_t * value) {
+#if defined _SC_GETPW_R_SIZE_MAX
+ long m;
+ errno = 0;
+ m = sysconf(_SC_GETPW_R_SIZE_MAX);
+ if (m == -1) {
+ /* _SC_GETPW_R_SIZE_MAX has no limit; some platforms like certain
+ FreeBSD versions support sysconf(_SC_GETPW_R_SIZE_MAX) in a broken
+ way and always set EINVAL, so be resilient here: */
+ return false;
+ }
+ SAL_WARN_IF( m < 0 || o3tl::make_unsigned(m) >= std::numeric_limits<std::size_t>::max(), "sal.osl",
+ "m < 0 || (unsigned long) m >= std::numeric_limits<std::size_t>::max()");
+ *value = static_cast<std::size_t>(m);
+ return true;
+#else
+ /* some platforms like macOS 1.3 do not define _SC_GETPW_R_SIZE_MAX: */
+ return false;
+#endif
+}
+
+static oslSecurityImpl * growSecurityImpl(
+ oslSecurityImpl * impl, std::size_t * bufSize)
+{
+ std::size_t n = 0;
+ oslSecurityImpl * p = nullptr;
+ if (impl == nullptr) {
+ if (!sysconf_SC_GETPW_R_SIZE_MAX(&n)) {
+ /* choose something sensible (the callers of growSecurityImpl will
+ detect it if the allocated buffer is too small: */
+ n = 1024;
+ }
+ } else if (*bufSize <= std::numeric_limits<std::size_t>::max() / 2) {
+ n = 2 * *bufSize;
+ }
+ if (n != 0) {
+ if (n <= std::numeric_limits<std::size_t>::max()
+ - offsetof(oslSecurityImpl, m_buffer))
+ {
+ *bufSize = n;
+ n += offsetof(oslSecurityImpl, m_buffer);
+ } else {
+ *bufSize = std::numeric_limits<std::size_t>::max()
+ - offsetof(oslSecurityImpl, m_buffer);
+ n = std::numeric_limits<std::size_t>::max();
+ }
+ p = static_cast<oslSecurityImpl *>(realloc(impl, n));
+ memset (p, 0, n);
+ }
+ if (p == nullptr) {
+ free(impl);
+ }
+ return p;
+}
+
+static void deleteSecurityImpl(oslSecurityImpl * impl) {
+ free(impl);
+}
+
+oslSecurity SAL_CALL osl_getCurrentSecurity()
+{
+ std::size_t n = 0;
+ oslSecurityImpl * p = nullptr;
+ for (;;) {
+ struct passwd * found;
+ p = growSecurityImpl(p, &n);
+ if (p == nullptr) {
+ return nullptr;
+ }
+#if (defined(IOS) && defined(X86_64)) || defined(EMSCRIPTEN)
+ // getpwuid_r() does not work in the iOS simulator
+ (void) found;
+ char * buffer = p->m_buffer;
+ assert(n >= 100);
+ strcpy(buffer, "mobile");
+ p->m_pPasswd.pw_name = buffer;
+ buffer += strlen(buffer) + 1;
+ strcpy(buffer, "*");
+ p->m_pPasswd.pw_passwd = buffer;
+ buffer += strlen(buffer) + 1;
+ p->m_pPasswd.pw_uid = geteuid();
+ p->m_pPasswd.pw_gid = getegid();
+#if !defined(EMSCRIPTEN)
+ p->m_pPasswd.pw_change = 0;
+ strcpy(buffer, "");
+ p->m_pPasswd.pw_class = buffer;
+ buffer += strlen(buffer) + 1;
+ p->m_pPasswd.pw_expire = 0;
+#endif
+ strcpy(buffer, "Mobile User");
+ p->m_pPasswd.pw_gecos = buffer;
+ buffer += strlen(buffer) + 1;
+ strcpy(buffer, "/var/mobile"); // ???
+ p->m_pPasswd.pw_dir = buffer;
+ buffer += strlen(buffer) + 1;
+ strcpy(buffer, "");
+ p->m_pPasswd.pw_shell = buffer;
+ buffer += strlen(buffer) + 1;
+ return p;
+#else
+ switch (getpwuid_r(getuid(), &p->m_pPasswd, p->m_buffer, n, &found)) {
+ case ERANGE:
+ break;
+ case 0:
+ if (found != nullptr) {
+ return p;
+ }
+ [[fallthrough]];
+ default:
+ deleteSecurityImpl(p);
+ return nullptr;
+ }
+#endif
+ }
+}
+
+oslSecurityError SAL_CALL osl_loginUser(
+ SAL_UNUSED_PARAMETER rtl_uString *,
+ SAL_UNUSED_PARAMETER rtl_uString *,
+ SAL_UNUSED_PARAMETER oslSecurity *
+ )
+{
+ return osl_Security_E_None;
+}
+
+oslSecurityError SAL_CALL osl_loginUserOnFileServer(
+ SAL_UNUSED_PARAMETER rtl_uString *,
+ SAL_UNUSED_PARAMETER rtl_uString *,
+ SAL_UNUSED_PARAMETER rtl_uString *,
+ SAL_UNUSED_PARAMETER oslSecurity *
+ )
+{
+ return osl_Security_E_UserUnknown;
+}
+
+sal_Bool SAL_CALL osl_getUserIdent(oslSecurity Security, rtl_uString **ustrIdent)
+{
+ bool bRet = false;
+ char pszIdent[1024];
+
+ pszIdent[0] = '\0';
+
+ bRet = osl_psz_getUserIdent(Security,pszIdent,sizeof(pszIdent));
+
+ rtl_string2UString( ustrIdent, pszIdent, rtl_str_getLength( pszIdent ), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS );
+ SAL_WARN_IF(*ustrIdent == nullptr, "sal.osl", "*ustrIdent == NULL");
+
+ return bRet;
+}
+
+bool osl_psz_getUserIdent(oslSecurity Security, char *pszIdent, sal_uInt32 nMax)
+{
+ char buffer[32];
+ sal_Int32 nChr;
+
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl *>(Security);
+
+ if (pSecImpl == nullptr)
+ return false;
+
+ nChr = snprintf(buffer, sizeof(buffer), "%u", pSecImpl->m_pPasswd.pw_uid);
+ if ( nChr < 0 || sal::static_int_cast<sal_uInt32>(nChr) >= sizeof(buffer)
+ || sal::static_int_cast<sal_uInt32>(nChr) >= nMax )
+ return false; /* leave *pszIdent unmodified in case of failure */
+
+ memcpy(pszIdent, buffer, nChr+1);
+ return true;
+}
+
+sal_Bool SAL_CALL osl_getUserName(oslSecurity Security, rtl_uString **ustrName)
+{
+ bool bRet = false;
+ char * pszName;
+ sal_Int32 len;
+
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl *>(Security);
+
+ if (pSecImpl != nullptr && pSecImpl->m_pPasswd.pw_name != nullptr) {
+ pszName = pSecImpl->m_pPasswd.pw_name;
+ auto const n = std::strlen(pszName);
+ if (n <= o3tl::make_unsigned(std::numeric_limits<sal_Int32>::max())) {
+ len = n;
+ bRet = true;
+ }
+ }
+
+ if (!bRet) {
+ pszName = nullptr;
+ len = 0;
+ }
+
+ rtl_string2UString( ustrName, pszName, len, osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS );
+ SAL_WARN_IF(*ustrName == nullptr, "sal.osl", "ustrName == NULL");
+
+ return bRet;
+}
+
+sal_Bool SAL_CALL osl_getShortUserName(oslSecurity Security, rtl_uString **ustrName)
+{
+ return osl_getUserName(Security, ustrName); // No domain name on unix
+}
+
+sal_Bool SAL_CALL osl_getHomeDir(oslSecurity Security, rtl_uString **pustrDirectory)
+{
+ bool bRet = false;
+ OString pszDirectory;
+
+ bRet = osl_psz_getHomeDir(Security,&pszDirectory);
+
+ if ( bRet )
+ {
+ rtl_string2UString( pustrDirectory, pszDirectory.getStr(), pszDirectory.getLength(), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS );
+ SAL_WARN_IF(*pustrDirectory == nullptr, "sal.osl", "*pustrDirectory == NULL");
+ osl_getFileURLFromSystemPath( *pustrDirectory, pustrDirectory );
+ }
+
+ return bRet;
+}
+
+static bool osl_psz_getHomeDir(oslSecurity Security, OString* pszDirectory)
+{
+ assert(pszDirectory != nullptr);
+
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl *>(Security);
+
+ if (pSecImpl == nullptr)
+ return false;
+
+#ifdef HAIKU
+ dev_t volume = dev_for_path("/boot");
+ char homeDir[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+ status_t result = find_directory(B_USER_DIRECTORY, volume, false, homeDir,
+ sizeof(homeDir));
+ if (result == B_OK) {
+ static_assert(
+ B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH <= std::numeric_limits<sal_Int32>::max());
+ *pszDirectory = OString(homeDir, std::strlen(homeDir));
+ return true;
+ }
+ return false;
+#endif
+
+#ifdef ANDROID
+{
+ OUString pValue;
+
+ if (rtl::Bootstrap::get("HOME", pValue))
+ {
+ auto const pStrValue = OUStringToOString(pValue, RTL_TEXTENCODING_UTF8);
+ if (!pStrValue.isEmpty())
+ {
+ *pszDirectory = pStrValue;
+ return true;
+ }
+ }
+}
+#endif
+
+#ifdef IOS
+ {
+ // Let's pretend the app-specific "Documents" directory is the home directory for now
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+ NSString *userDirectory = [paths objectAtIndex:0];
+ auto const len = [userDirectory length];
+ if (len <= std::numeric_limits<sal_Int32>::max())
+ {
+ *pszDirectory = OString([userDirectory UTF8String], len);
+ return sal_True;
+ }
+ }
+#endif
+
+ /* if current user, check also environment for HOME */
+ if (getuid() == pSecImpl->m_pPasswd.pw_uid)
+ {
+ char *pStr = nullptr;
+#ifdef __sun
+ char buffer[8192];
+
+ struct passwd pwd;
+ struct passwd *ppwd;
+
+#ifdef _POSIX_PTHREAD_SEMANTICS
+ if ( 0 != getpwuid_r(getuid(), &pwd, buffer, sizeof(buffer), &ppwd ) )
+ ppwd = NULL;
+#else
+ ppwd = getpwuid_r(getuid(), &pwd, buffer, sizeof(buffer) );
+#endif
+
+ if ( ppwd )
+ pStr = ppwd->pw_dir;
+#else
+ pStr = getenv("HOME");
+#endif
+
+ if (pStr != nullptr && pStr[0] != '\0' && access(pStr, 0) == 0)
+ {
+ auto const len = std::strlen(pStr);
+ if (len > o3tl::make_unsigned(std::numeric_limits<sal_Int32>::max())) {
+ return false;
+ }
+ *pszDirectory = OString(pStr, len);
+ return true;
+ }
+ }
+ if (pSecImpl->m_pPasswd.pw_dir != nullptr)
+ {
+ auto const len = std::strlen(pSecImpl->m_pPasswd.pw_dir);
+ if (len > o3tl::make_unsigned(std::numeric_limits<sal_Int32>::max())) {
+ return false;
+ }
+ *pszDirectory = OString(pSecImpl->m_pPasswd.pw_dir, len);
+ }
+ else
+ return false;
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_getConfigDir(oslSecurity Security, rtl_uString **pustrDirectory)
+{
+ bool bRet = false;
+ OString pszDirectory;
+
+ bRet = osl_psz_getConfigDir(Security,&pszDirectory);
+
+ if ( bRet )
+ {
+ rtl_string2UString( pustrDirectory, pszDirectory.getStr(), pszDirectory.getLength(), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS );
+ SAL_WARN_IF(*pustrDirectory == nullptr, "sal.osl", "*pustrDirectory == NULL");
+ osl_getFileURLFromSystemPath( *pustrDirectory, pustrDirectory );
+ }
+
+ return bRet;
+}
+
+#if defined HAIKU
+
+static bool osl_psz_getConfigDir(oslSecurity Security, OString* pszDirectory)
+{
+ assert(pszDirectory != nullptr);
+ (void) Security;
+ dev_t volume = dev_for_path("/boot");
+ char configDir[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+ status_t result = find_directory(B_USER_SETTINGS_DIRECTORY, volume, false,
+ configDir, sizeof(configDir));
+ if (result == B_OK) {
+ auto const len = strlen(configDir);
+ if (len <= sal_uInt32(std::numeric_limits<sal_Int32>::max())) {
+ *pszDirectory = OString(configDir, len);
+ return true;
+ }
+ }
+ return false;
+}
+
+#elif !defined(MACOSX) && !defined(IOS)
+
+static bool osl_psz_getConfigDir(oslSecurity Security, OString* pszDirectory)
+{
+ assert(pszDirectory != nullptr);
+
+ char *pStr = getenv("XDG_CONFIG_HOME");
+
+ if (pStr == nullptr || pStr[0] == '\0' || access(pStr, 0) != 0)
+ {
+ // a default equal to $HOME/.config should be used.
+ OString home;
+ if (!osl_psz_getHomeDir(Security, &home))
+ return false;
+ auto const config = OString(home + "/.config");
+
+ // try to create dir if not present
+ bool dirOK = true;
+ if (mkdir(config.getStr(), S_IRWXU) != 0)
+ {
+ int e = errno;
+ if (e != EEXIST)
+ {
+ SAL_WARN(
+ "sal.osl",
+ "mkdir(" << config << "): errno=" << e);
+ dirOK = false;
+ }
+ }
+ if (dirOK)
+ {
+ // check file type and permissions
+ struct stat st;
+ if (stat(config.getStr(), &st) != 0)
+ {
+ SAL_INFO("sal.osl","Could not stat $HOME/.config");
+ dirOK = false;
+ }
+ else
+ {
+ if (!S_ISDIR(st.st_mode))
+ {
+ SAL_INFO("sal.osl", "$HOME/.config is not a directory");
+ dirOK = false;
+ }
+ if (!(st.st_mode & S_IRUSR && st.st_mode & S_IWUSR && st.st_mode & S_IXUSR))
+ {
+ SAL_INFO("sal.osl", "$HOME/.config has bad permissions");
+ dirOK = false;
+ }
+ }
+ }
+
+ // if !dirOK, resort to HOME
+ if (dirOK)
+ home = config;
+ *pszDirectory = home;
+ }
+ else
+ {
+ auto const len = std::strlen(pStr);
+ if (len > o3tl::make_unsigned(std::numeric_limits<sal_Int32>::max())) {
+ return false;
+ }
+ *pszDirectory = OString(pStr, len);
+ }
+
+ return true;
+}
+
+#else
+
+/*
+ * FIXME: rewrite to use more flexible
+ * NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES)
+ * as soon as we can bump the baseline to Tiger (for NSApplicationSupportDirectory) and have
+ * support for Objective-C in the build environment
+ */
+
+static bool osl_psz_getConfigDir(oslSecurity Security, OString* pszDirectory)
+{
+ assert(pszDirectory != nullptr);
+
+ OString home;
+ if( osl_psz_getHomeDir(Security, &home) )
+ {
+ *pszDirectory = home + "/Library/Application Support"; /* Used on iOS, too */
+ return true;
+ }
+
+ return false;
+}
+
+#endif
+
+sal_Bool SAL_CALL osl_isAdministrator(oslSecurity Security)
+{
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl *>(Security);
+
+ if (pSecImpl == nullptr)
+ return false;
+
+ if (pSecImpl->m_pPasswd.pw_uid != 0)
+ return false;
+
+ return true;
+}
+
+void SAL_CALL osl_freeSecurityHandle(oslSecurity Security)
+{
+ deleteSecurityImpl(static_cast<oslSecurityImpl *>(Security));
+}
+
+sal_Bool SAL_CALL osl_loadUserProfile(SAL_UNUSED_PARAMETER oslSecurity)
+{
+ return false;
+}
+
+void SAL_CALL osl_unloadUserProfile(SAL_UNUSED_PARAMETER oslSecurity) {}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/signal.cxx b/sal/osl/unx/signal.cxx
new file mode 100644
index 000000000..91cf59ff1
--- /dev/null
+++ b/sal/osl/unx/signal.cxx
@@ -0,0 +1,452 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <signalshared.hxx>
+
+#include <config_features.h>
+
+#include "soffice.hxx"
+/* system headers */
+#include "system.hxx"
+
+#include "backtrace.h"
+
+#define MAX_STACK_FRAMES 256
+
+#include <osl/diagnose.h>
+#include <osl/signal.h>
+#include <sal/log.hxx>
+#include <sal/macros.h>
+#include <rtl/bootstrap.h>
+#include <rtl/digest.h>
+
+#include "file_path_helper.hxx"
+#define ACT_IGNORE 1
+#define ACT_EXIT 2
+#define ACT_SYSTEM 3
+#define ACT_HIDE 4
+#define ACT_ABORT 5
+
+#if defined HAVE_VALGRIND_HEADERS
+#include <valgrind/memcheck.h>
+#endif
+
+namespace
+{
+extern "C" using Handler1 = void (*)(int);
+extern "C" using Handler2 = void (*)(int, siginfo_t *, void *);
+struct SignalAction
+{
+ int Signal;
+ int Action;
+ Handler1 Handler;
+ bool siginfo; // Handler's type is Handler2
+} Signals[] =
+{
+ { SIGHUP, ACT_HIDE, SIG_DFL, false }, /* hangup */
+ { SIGINT, ACT_EXIT, SIG_DFL, false }, /* interrupt (rubout) */
+ { SIGQUIT, ACT_EXIT, SIG_DFL, false }, /* quit (ASCII FS) */
+ { SIGILL, ACT_SYSTEM, SIG_DFL, false }, /* illegal instruction (not reset when caught) */
+/* changed from ACT_ABOUT to ACT_SYSTEM to try and get collector to run*/
+ { SIGTRAP, ACT_ABORT, SIG_DFL, false }, /* trace trap (not reset when caught) */
+#if ( SIGIOT != SIGABRT )
+ { SIGIOT, ACT_ABORT, SIG_DFL, false }, /* IOT instruction */
+#endif
+#if defined(FORCE_DEFAULT_SIGNAL)
+ { SIGABRT, ACT_SYSTEM, SIG_DFL, false }, /* used by abort, replace SIGIOT in the future */
+#else
+ { SIGABRT, ACT_ABORT, SIG_DFL, false }, /* used by abort, replace SIGIOT in the future */
+#endif
+#ifdef SIGEMT
+ { SIGEMT, ACT_SYSTEM, SIG_DFL, false }, /* EMT instruction */
+/* changed from ACT_ABORT to ACT_SYSTEM to remove handler*/
+/* SIGEMT may also be used by the profiler - so it is probably not a good
+plan to have the new handler use this signal*/
+#endif
+ { SIGFPE, ACT_ABORT, SIG_DFL, false }, /* floating point exception */
+ { SIGKILL, ACT_SYSTEM, SIG_DFL, false }, /* kill (cannot be caught or ignored) */
+ { SIGBUS, ACT_ABORT, SIG_DFL, false }, /* bus error */
+#if defined(FORCE_DEFAULT_SIGNAL)
+ { SIGSEGV, ACT_SYSTEM, SIG_DFL, false }, /* segmentation violation */
+#else
+ { SIGSEGV, ACT_ABORT, SIG_DFL, false }, /* segmentation violation */
+#endif
+#ifdef SIGSYS
+ { SIGSYS, ACT_ABORT, SIG_DFL, false }, /* bad argument to system call */
+#endif
+ { SIGPIPE, ACT_HIDE, SIG_DFL, false }, /* write on a pipe with no one to read it */
+#if defined(FORCE_DEFAULT_SIGNAL)
+ { SIGALRM, ACT_SYSTEM, SIG_DFL, false }, /* alarm clock */
+#else
+ { SIGALRM, ACT_EXIT, SIG_DFL, false }, /* alarm clock */
+#endif
+ { SIGTERM, ACT_EXIT, SIG_DFL, false }, /* software termination signal from kill */
+ { SIGUSR1, ACT_SYSTEM, SIG_DFL, false }, /* user defined signal 1 */
+ { SIGUSR2, ACT_SYSTEM, SIG_DFL, false }, /* user defined signal 2 */
+ { SIGCHLD, ACT_SYSTEM, SIG_DFL, false }, /* child status change */
+#ifdef SIGPWR
+ { SIGPWR, ACT_IGNORE, SIG_DFL, false }, /* power-fail restart */
+#endif
+ { SIGWINCH, ACT_IGNORE, SIG_DFL, false }, /* window size change */
+ { SIGURG, ACT_EXIT, SIG_DFL, false }, /* urgent socket condition */
+#ifdef SIGPOLL
+ { SIGPOLL, ACT_EXIT, SIG_DFL, false }, /* pollable event occurred */
+#endif
+ { SIGSTOP, ACT_SYSTEM, SIG_DFL, false }, /* stop (cannot be caught or ignored) */
+ { SIGTSTP, ACT_SYSTEM, SIG_DFL, false }, /* user stop requested from tty */
+ { SIGCONT, ACT_SYSTEM, SIG_DFL, false }, /* stopped process has been continued */
+ { SIGTTIN, ACT_SYSTEM, SIG_DFL, false }, /* background tty read attempted */
+ { SIGTTOU, ACT_SYSTEM, SIG_DFL, false }, /* background tty write attempted */
+ { SIGVTALRM, ACT_EXIT, SIG_DFL, false }, /* virtual timer expired */
+ { SIGPROF, ACT_SYSTEM, SIG_DFL, false }, /* profiling timer expired */
+/*Change from ACT_EXIT to ACT_SYSTEM for SIGPROF is so that profiling signals do
+not get taken by the new handler - the new handler does not pass on context
+information which causes 'collect' to crash. This is a way of avoiding
+what looks like a bug in the new handler*/
+ { SIGXCPU, ACT_ABORT, SIG_DFL, false }, /* exceeded cpu limit */
+ { SIGXFSZ, ACT_ABORT, SIG_DFL, false } /* exceeded file size limit */
+};
+const int NoSignals = SAL_N_ELEMENTS(Signals);
+
+bool bSetSEGVHandler = false;
+bool bSetWINCHHandler = false;
+bool bSetILLHandler = false;
+
+void signalHandlerFunction(int, siginfo_t *, void *);
+
+#if HAVE_FEATURE_BREAKPAD
+bool is_unset_signal(int signal)
+{
+#ifdef DBG_UTIL
+ return (!bSetSEGVHandler && signal == SIGSEGV) ||
+ (!bSetWINCHHandler && signal == SIGWINCH) ||
+ (!bSetILLHandler && signal == SIGILL);
+#else
+ (void) signal;
+ return false;
+#endif
+}
+#endif
+
+}
+
+bool onInitSignal()
+{
+ if (sal::detail::isSoffice())
+ {
+ // WORKAROUND FOR SEGV HANDLER CONFLICT
+ //
+ // the java jit needs SIGSEGV for proper work
+ // and we need SIGSEGV for the office crashguard
+ //
+ // TEMPORARY SOLUTION:
+ // the office sets the signal handler during startup
+ // java can than overwrite it, if needed
+ bSetSEGVHandler = true;
+
+ // WORKAROUND FOR WINCH HANDLER (SEE ABOVE)
+ bSetWINCHHandler = true;
+
+ // WORKAROUND FOR ILLEGAL INSTRUCTION HANDLER (SEE ABOVE)
+ bSetILLHandler = true;
+ }
+
+#ifdef DBG_UTIL
+ bSetSEGVHandler = bSetWINCHHandler = bSetILLHandler = false;
+#endif
+
+ struct sigaction act;
+ act.sa_sigaction = signalHandlerFunction;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+
+ sigfillset(&(act.sa_mask));
+
+ /* Initialize the rest of the signals */
+ for (SignalAction & rSignal : Signals)
+ {
+#if defined HAVE_VALGRIND_HEADERS
+ if (rSignal.Signal == SIGUSR2 && RUNNING_ON_VALGRIND)
+ rSignal.Action = ACT_IGNORE;
+#endif
+
+ /* hack: stomcatd is attaching JavaVM which does not work with an sigaction(SEGV) */
+ if ((bSetSEGVHandler || rSignal.Signal != SIGSEGV)
+ && (bSetWINCHHandler || rSignal.Signal != SIGWINCH)
+ && (bSetILLHandler || rSignal.Signal != SIGILL))
+ {
+ if (rSignal.Action != ACT_SYSTEM)
+ {
+ if (rSignal.Action == ACT_HIDE)
+ {
+ struct sigaction ign;
+
+ ign.sa_handler = SIG_IGN;
+ ign.sa_flags = 0;
+ sigemptyset(&ign.sa_mask);
+
+ struct sigaction oact;
+ if (sigaction(rSignal.Signal, &ign, &oact) == 0) {
+ rSignal.siginfo = (oact.sa_flags & SA_SIGINFO) != 0;
+ if (rSignal.siginfo) {
+ rSignal.Handler = reinterpret_cast<Handler1>(
+ oact.sa_sigaction);
+ } else {
+ rSignal.Handler = oact.sa_handler;
+ }
+ } else {
+ rSignal.Handler = SIG_DFL;
+ rSignal.siginfo = false;
+ }
+ }
+ else
+ {
+ struct sigaction oact;
+ if (sigaction(rSignal.Signal, &act, &oact) == 0) {
+ rSignal.siginfo = (oact.sa_flags & SA_SIGINFO) != 0;
+ if (rSignal.siginfo) {
+ rSignal.Handler = reinterpret_cast<Handler1>(
+ oact.sa_sigaction);
+ } else {
+ rSignal.Handler = oact.sa_handler;
+ }
+ } else {
+ rSignal.Handler = SIG_DFL;
+ rSignal.siginfo = false;
+ }
+ }
+ }
+ }
+ }
+
+ /* Clear signal mask inherited from parent process (on macOS, upon a
+ crash soffice re-execs itself from within the signal handler, so the
+ second soffice would have the guilty signal blocked and would freeze upon
+ encountering a similar crash again): */
+ sigset_t unset;
+ if (sigemptyset(&unset) < 0 ||
+ pthread_sigmask(SIG_SETMASK, &unset, nullptr) < 0)
+ {
+ SAL_WARN("sal.osl", "sigemptyset or pthread_sigmask failed");
+ }
+
+ return true;
+}
+
+bool onDeInitSignal()
+{
+ struct sigaction act;
+
+ sigemptyset(&(act.sa_mask));
+
+ /* Initialize the rest of the signals */
+ for (int i = NoSignals - 1; i >= 0; i--)
+ if (Signals[i].Action != ACT_SYSTEM
+ && ((bSetSEGVHandler || Signals[i].Signal != SIGSEGV)
+ && (bSetWINCHHandler || Signals[i].Signal != SIGWINCH)
+ && (bSetILLHandler || Signals[i].Signal != SIGILL)))
+ {
+ if (Signals[i].siginfo) {
+ act.sa_sigaction = reinterpret_cast<Handler2>(
+ Signals[i].Handler);
+ act.sa_flags = SA_SIGINFO;
+ } else {
+ act.sa_handler = Signals[i].Handler;
+ act.sa_flags = 0;
+ }
+
+ sigaction(Signals[i].Signal, &act, nullptr);
+ }
+
+ return false;
+}
+
+namespace
+{
+void printStack(int sig)
+{
+ void *buffer[MAX_STACK_FRAMES];
+ int size = backtrace( buffer, SAL_N_ELEMENTS(buffer) );
+
+ fprintf( stderr, "\n\nFatal exception: Signal %d\n", sig );
+
+#if ! HAVE_FEATURE_BACKTRACE && defined( MACOSX ) && !defined( INTEL )
+ fprintf( stderr, "Please turn on Enable Crash Reporting and\nAutomatic Display of Crashlogs in the Console application\n" );
+#endif
+
+ if ( size > 0 )
+ {
+ fputs( "Stack:\n", stderr );
+ backtrace_symbols_fd( buffer, size, fileno(stderr) );
+ }
+}
+
+void callSystemHandler(int signal, siginfo_t * info, void * context)
+{
+ int i;
+
+ for (i = 0; i < NoSignals; i++)
+ {
+ if (Signals[i].Signal == signal)
+ break;
+ }
+
+ if (i >= NoSignals)
+ return;
+
+ if ((Signals[i].Handler == SIG_DFL) ||
+ (Signals[i].Handler == SIG_IGN) ||
+ (Signals[i].Handler == SIG_ERR))
+ {
+ switch (Signals[i].Action)
+ {
+ case ACT_EXIT: /* terminate */
+ /* prevent dumping core on exit() */
+ _exit(255);
+ break;
+
+ case ACT_ABORT: /* terminate with core dump */
+ struct sigaction act;
+ act.sa_handler = SIG_DFL;
+ act.sa_flags = 0;
+ sigemptyset(&(act.sa_mask));
+ sigaction(SIGABRT, &act, nullptr);
+ printStack( signal );
+ abort();
+ break;
+
+ case ACT_IGNORE: /* ignore */
+ break;
+
+ default: /* should never happen */
+ OSL_ASSERT(false);
+ }
+ }
+ else if (Signals[i].siginfo) {
+ (*reinterpret_cast<Handler2>(Signals[i].Handler))(
+ signal, info, context);
+ } else {
+ (*Signals[i].Handler)(signal);
+ }
+}
+
+#if defined HAVE_VALGRIND_HEADERS
+void DUMPCURRENTALLOCS()
+{
+ VALGRIND_PRINTF( "=== start memcheck dump of active allocations ===\n" );
+
+#if __GNUC__ && !defined(__clang__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
+
+ VALGRIND_DO_LEAK_CHECK;
+
+#if __GNUC__ && !defined(__clang__)
+# pragma GCC diagnostic pop
+#endif
+
+ VALGRIND_PRINTF( "=== end memcheck dump of active allocations ===\n" );
+}
+#endif
+
+void signalHandlerFunction(int signal, siginfo_t * info, void * context)
+{
+ oslSignalInfo Info;
+
+ Info.UserSignal = signal;
+ Info.UserData = nullptr;
+
+ switch (signal)
+ {
+ case SIGBUS:
+ case SIGILL:
+ case SIGSEGV:
+ case SIGIOT:
+#if ( SIGIOT != SIGABRT )
+ case SIGABRT:
+#endif
+ Info.Signal = osl_Signal_AccessViolation;
+ break;
+
+ case -1:
+ Info.Signal = osl_Signal_IntegerDivideByZero;
+ break;
+
+ case SIGFPE:
+ Info.Signal = osl_Signal_FloatDivideByZero;
+ break;
+
+ case SIGINT:
+ case SIGTERM:
+ case SIGQUIT:
+ Info.Signal = osl_Signal_Terminate;
+ break;
+
+#if defined HAVE_VALGRIND_HEADERS
+ case SIGUSR2:
+ if (RUNNING_ON_VALGRIND)
+ DUMPCURRENTALLOCS();
+ Info.Signal = osl_Signal_System;
+ break;
+#endif
+
+ default:
+ Info.Signal = osl_Signal_System;
+ break;
+ }
+
+#if HAVE_FEATURE_BREAKPAD
+ if ((Info.Signal == osl_Signal_AccessViolation ||
+ Info.Signal == osl_Signal_IntegerDivideByZero ||
+ Info.Signal == osl_Signal_FloatDivideByZero) && !is_unset_signal(signal))
+ {
+ callSystemHandler(signal, info, context);
+ }
+#endif
+
+ switch (callSignalHandler(&Info))
+ {
+ case osl_Signal_ActCallNextHdl:
+ callSystemHandler(signal, info, context);
+ break;
+
+ case osl_Signal_ActAbortApp:
+ struct sigaction act;
+ act.sa_handler = SIG_DFL;
+ act.sa_flags = 0;
+ sigemptyset(&(act.sa_mask));
+ sigaction(SIGABRT, &act, nullptr);
+ printStack( signal );
+ abort();
+ break;
+
+ case osl_Signal_ActKillApp:
+ /* prevent dumping core on exit() */
+ _exit(255);
+ break;
+ default:
+ break;
+ }
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/socket.cxx b/sal/osl/unx/socket.cxx
new file mode 100644
index 000000000..535c1727c
--- /dev/null
+++ b/sal/osl/unx/socket.cxx
@@ -0,0 +1,2046 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <utility>
+
+#include "system.hxx"
+
+#include <osl/socket.h>
+#include <osl/mutex.h>
+#include <osl/signal.h>
+
+#include <rtl/alloc.h>
+#include <rtl/byteseq.h>
+#include <rtl/ustring.hxx>
+#include <assert.h>
+#include <sal/types.h>
+#include <sal/log.hxx>
+
+#include "sockimpl.hxx"
+#include "unixerrnostring.hxx"
+#include <oslsocket.hxx>
+
+#include <poll.h>
+
+/* defines for shutdown */
+#define SD_RECEIVE 0
+#define SD_SEND 1
+#define SD_BOTH 2
+
+/*
+ oslSocketAddr is a pointer to a Berkeley struct sockaddr.
+ I refrained from using sockaddr_in because of possible further
+ extensions of this socket-interface (IP-NG?).
+ The intention was to hide all Berkeley data-structures from
+ direct access past the osl-interface.
+
+ The current implementation is internet (IP) centered. All
+ the constructor-functions (osl_create...) take parameters
+ that will probably make sense only in the IP-environment
+ (e.g. because of using the dotted-address-format).
+
+ If the interface will be extended to host other protocol-
+ families, I expect no externally visible changes in the
+ existing functions. You'll probably need only new
+ constructor-functions who take the different address
+ formats into consideration (maybe a long dotted address
+ or whatever).
+*/
+
+/* _Note_ that I rely on the fact that oslSocketAddr and struct sockaddr */
+/* are the same! I don't like it very much but see no other easy way to */
+/* conceal the struct sockaddr from the eyes of the user. */
+
+#define OSL_INVALID_SOCKET -1
+#define OSL_SOCKET_ERROR -1
+
+/* Buffer size for getnameinfo */
+#define MAX_HOSTBUFFER_SIZE 2048
+
+const unsigned long FamilyMap[]= {
+ AF_INET, /* osl_Socket_FamilyInet */
+ AF_IPX, /* osl_Socket_FamilyIpx */
+ 0 /* osl_Socket_FamilyInvalid */
+};
+
+static oslAddrFamily osl_AddrFamilyFromNative(sal_uInt32 nativeType)
+{
+ oslAddrFamily i= oslAddrFamily(0);
+
+ while(i != osl_Socket_FamilyInvalid)
+ {
+ if(FamilyMap[i] == nativeType)
+ return i;
+ i = static_cast<oslAddrFamily>( i + 1 );
+ }
+
+ return i;
+}
+
+#define FAMILY_FROM_NATIVE(y) osl_AddrFamilyFromNative(y)
+#define FAMILY_TO_NATIVE(x) static_cast<short>(FamilyMap[x])
+
+const sal_uInt32 ProtocolMap[]= {
+ 0, /* osl_Socket_ProtocolIp */
+ NSPROTO_IPX, /* osl_Socket_ProtocolIpx */
+ NSPROTO_SPX, /* osl_Socket_ProtocolSpx */
+ NSPROTO_SPXII, /* osl_Socket_ProtocolSpxII */
+ 0 /* osl_Socket_ProtocolInvalid */
+};
+
+#define PROTOCOL_TO_NATIVE(x) ProtocolMap[x]
+
+const sal_uInt32 TypeMap[]= {
+ SOCK_STREAM, /* osl_Socket_TypeStream */
+ SOCK_DGRAM, /* osl_Socket_TypeDgram */
+ SOCK_RAW, /* osl_Socket_TypeRaw */
+ SOCK_RDM, /* osl_Socket_TypeRdm */
+ SOCK_SEQPACKET, /* osl_Socket_TypeSeqPacket */
+ 0 /* osl_Socket_TypeInvalid */
+};
+
+static oslSocketType osl_SocketTypeFromNative(sal_uInt32 nativeType)
+{
+ oslSocketType i= oslSocketType(0);
+
+ while(i != osl_Socket_TypeInvalid)
+ {
+ if(TypeMap[i] == nativeType)
+ return i;
+ i = static_cast<oslSocketType>(i + 1);
+ }
+
+ return i;
+}
+
+#define TYPE_TO_NATIVE(x) TypeMap[x]
+#define TYPE_FROM_NATIVE(y) osl_SocketTypeFromNative(y)
+
+const sal_uInt32 OptionMap[]= {
+ SO_DEBUG, /* osl_Socket_OptionDebug */
+ SO_ACCEPTCONN, /* osl_Socket_OptionAcceptConn */
+ SO_REUSEADDR, /* osl_Socket_OptionReuseAddr */
+ SO_KEEPALIVE, /* osl_Socket_OptionKeepAlive */
+ SO_DONTROUTE, /* osl_Socket_OptionDontRoute */
+ SO_BROADCAST, /* osl_Socket_OptionBroadcast */
+ SO_USELOOPBACK, /* osl_Socket_OptionUseLoopback */
+ SO_LINGER, /* osl_Socket_OptionLinger */
+ SO_OOBINLINE, /* osl_Socket_OptionOOBinLine */
+ SO_SNDBUF, /* osl_Socket_OptionSndBuf */
+ SO_RCVBUF, /* osl_Socket_OptionRcvBuf */
+ SO_SNDLOWAT, /* osl_Socket_OptionSndLowat */
+ SO_RCVLOWAT, /* osl_Socket_OptionRcvLowat */
+ SO_SNDTIMEO, /* osl_Socket_OptionSndTimeo */
+ SO_RCVTIMEO, /* osl_Socket_OptionRcvTimeo */
+ SO_ERROR, /* osl_Socket_OptionError */
+ SO_TYPE, /* osl_Socket_OptionType */
+ TCP_NODELAY, /* osl_Socket_OptionTcpNoDelay */
+ 0 /* osl_Socket_OptionInvalid */
+};
+
+#define OPTION_TO_NATIVE(x) OptionMap[x]
+
+const sal_uInt32 OptionLevelMap[]= {
+ SOL_SOCKET, /* osl_Socket_LevelSocket */
+ IPPROTO_TCP, /* osl_Socket_LevelTcp */
+ 0 /* osl_Socket_LevelInvalid */
+};
+
+#define OPTION_LEVEL_TO_NATIVE(x) OptionLevelMap[x]
+
+const sal_uInt32 SocketMsgFlagMap[]= {
+ 0, /* osl_Socket_MsgNormal */
+ MSG_OOB, /* osl_Socket_MsgOOB */
+ MSG_PEEK, /* osl_Socket_MsgPeek */
+ MSG_DONTROUTE, /* osl_Socket_MsgDontRoute */
+ MSG_MAXIOVLEN, /* osl_Socket_MsgMaxIOVLen */
+ 0 /* osl_Socket_MsgInvalid */
+};
+
+#define MSG_FLAG_TO_NATIVE(x) SocketMsgFlagMap[x]
+
+const sal_uInt32 SocketDirection[]= {
+ SD_RECEIVE, /* osl_Socket_DirRead */
+ SD_SEND, /* osl_Socket_DirWrite */
+ SD_BOTH, /* osl_Socket_DirReadWrite */
+ 0 /* osl_Socket_DirInvalid */
+};
+
+#define DIRECTION_TO_NATIVE(x) SocketDirection[x]
+
+const struct
+{
+ int errcode;
+ oslSocketError error;
+} SocketError[]= {
+ { 0, osl_Socket_E_None }, /* no error */
+ { ENOTSOCK, osl_Socket_E_NotSocket }, /* Socket operation on non-socket */
+ { EDESTADDRREQ, osl_Socket_E_DestAddrReq }, /* Destination address required */
+ { EMSGSIZE, osl_Socket_E_MsgSize }, /* Message too long */
+ { EPROTOTYPE, osl_Socket_E_Prototype }, /* Protocol wrong type for socket */
+ { ENOPROTOOPT, osl_Socket_E_NoProtocol }, /* Protocol not available */
+ { EPROTONOSUPPORT, osl_Socket_E_ProtocolNoSupport }, /* Protocol not supported */
+#ifdef ESOCKTNOSUPPORT
+ { ESOCKTNOSUPPORT, osl_Socket_E_TypeNoSupport }, /* Socket type not supported */
+#endif
+ { EOPNOTSUPP, osl_Socket_E_OpNotSupport }, /* Operation not supported on socket */
+ { EPFNOSUPPORT, osl_Socket_E_PfNoSupport }, /* Protocol family not supported */
+ { EAFNOSUPPORT, osl_Socket_E_AfNoSupport }, /* Address family not supported by
+ protocol family */
+ { EADDRINUSE, osl_Socket_E_AddrInUse }, /* Address already in use */
+ { EADDRNOTAVAIL, osl_Socket_E_AddrNotAvail }, /* Can't assign requested address */
+ { ENETDOWN, osl_Socket_E_NetDown }, /* Network is down */
+ { ENETUNREACH, osl_Socket_E_NetUnreachable }, /* Network is unreachable */
+ { ENETRESET, osl_Socket_E_NetReset }, /* Network dropped connection because
+ of reset */
+ { ECONNABORTED, osl_Socket_E_ConnAborted }, /* Software caused connection abort */
+ { ECONNRESET, osl_Socket_E_ConnReset }, /* Connection reset by peer */
+ { ENOBUFS, osl_Socket_E_NoBufferSpace }, /* No buffer space available */
+ { EISCONN, osl_Socket_E_IsConnected }, /* Socket is already connected */
+ { ENOTCONN, osl_Socket_E_NotConnected }, /* Socket is not connected */
+ { ESHUTDOWN, osl_Socket_E_Shutdown }, /* Can't send after socket shutdown */
+#ifdef ETOOMANYREFS
+ { ETOOMANYREFS, osl_Socket_E_TooManyRefs }, /* Too many references: can't splice */
+#endif
+ { ETIMEDOUT, osl_Socket_E_TimedOut }, /* Connection timed out */
+ { ECONNREFUSED, osl_Socket_E_ConnRefused }, /* Connection refused */
+ { EHOSTDOWN, osl_Socket_E_HostDown }, /* Host is down */
+ { EHOSTUNREACH, osl_Socket_E_HostUnreachable }, /* No route to host */
+ { EWOULDBLOCK, osl_Socket_E_WouldBlock }, /* call would block on non-blocking socket */
+ { EALREADY, osl_Socket_E_Already }, /* operation already in progress */
+ { EINPROGRESS, osl_Socket_E_InProgress }, /* operation now in progress */
+ { EAGAIN, osl_Socket_E_WouldBlock }, /* same as EWOULDBLOCK */
+ { -1, osl_Socket_E_InvalidError }
+};
+
+static oslSocketError osl_SocketErrorFromNative(int nativeType)
+{
+ int i = 0;
+
+ while ((SocketError[i].error != osl_Socket_E_InvalidError) &&
+ (SocketError[i].errcode != nativeType)) i++;
+
+ return SocketError[i].error;
+}
+
+#define ERROR_FROM_NATIVE(y) osl_SocketErrorFromNative(y)
+
+static oslSocketAddr osl_psz_createInetSocketAddr (
+ const char* pszDottedAddr, sal_Int32 Port);
+
+static oslHostAddr osl_psz_createHostAddr (
+ const char *pszHostname, const oslSocketAddr Addr);
+
+static oslHostAddr osl_psz_createHostAddrByName (
+ const char *pszHostname);
+
+static const char* osl_psz_getHostnameOfHostAddr (
+ const oslHostAddr Addr);
+
+static oslSocketAddr osl_psz_resolveHostname (
+ const char* pszHostname);
+
+static sal_Int32 osl_psz_getServicePort (
+ const char* pszServicename, const char* pszProtocol);
+
+static void osl_psz_getLastSocketErrorDescription (
+ oslSocket Socket, char* pBuffer, sal_uInt32 BufferSize);
+
+namespace {
+
+int convertToMs(TimeValue const * value) {
+ return value->Seconds * 1000 + value->Nanosec / 1000000; //TODO: overflow
+}
+
+}
+
+static oslSocket createSocketImpl()
+{
+ oslSocket pSocket;
+
+ pSocket = static_cast<oslSocket>(calloc(1, sizeof(struct oslSocketImpl)));
+
+ pSocket->m_Socket = OSL_INVALID_SOCKET;
+ pSocket->m_nLastError = 0;
+ pSocket->m_nRefCount = 1;
+
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ pSocket->m_bIsAccepting = false;
+#endif
+
+ return pSocket;
+}
+
+static void destroySocketImpl(oslSocket Socket)
+{
+ if ( Socket != nullptr)
+ free(Socket);
+}
+
+static oslSocketAddr createSocketAddr()
+{
+ oslSocketAddr pAddr = static_cast<oslSocketAddr>(rtl_allocateZeroMemory( sizeof( struct oslSocketAddrImpl )));
+ return pAddr;
+}
+
+static oslSocketAddr createSocketAddrWithFamily(
+ oslAddrFamily family, sal_Int32 port, sal_uInt32 nAddr )
+{
+ oslSocketAddr pAddr;
+
+ SAL_WARN_IF( family != osl_Socket_FamilyInet, "sal.osl", "creating socket for non-IP address family" );
+
+ pAddr = createSocketAddr();
+ switch( family )
+ {
+ case osl_Socket_FamilyInet:
+ {
+ struct sockaddr_in* pInetAddr= reinterpret_cast<sockaddr_in*>(&pAddr->m_sockaddr);
+
+ pInetAddr->sin_family = FAMILY_TO_NATIVE(osl_Socket_FamilyInet);
+ pInetAddr->sin_addr.s_addr = nAddr;
+ pInetAddr->sin_port = static_cast<sal_uInt16>(port&0xffff);
+ break;
+ }
+ default:
+ pAddr->m_sockaddr.sa_family = FAMILY_TO_NATIVE(family);
+ }
+ return pAddr;
+}
+
+static oslSocketAddr createSocketAddrFromSystem( struct sockaddr *pSystemSockAddr )
+{
+ oslSocketAddr pAddr = createSocketAddr();
+ memcpy( &(pAddr->m_sockaddr), pSystemSockAddr, sizeof( struct sockaddr ) );
+ return pAddr;
+}
+
+static void destroySocketAddr( oslSocketAddr addr )
+{
+ free( addr );
+}
+
+oslSocketAddr SAL_CALL osl_createEmptySocketAddr(oslAddrFamily Family)
+{
+ oslSocketAddr pAddr = nullptr;
+
+ /* is it an internet-Addr? */
+ if (Family == osl_Socket_FamilyInet)
+ {
+ pAddr = createSocketAddrWithFamily(Family, 0 , htonl(INADDR_ANY) );
+ }
+ else
+ {
+ pAddr = createSocketAddrWithFamily( Family , 0 , 0 );
+ }
+
+ return pAddr;
+}
+
+oslSocketAddr SAL_CALL osl_copySocketAddr(oslSocketAddr Addr)
+{
+ oslSocketAddr pCopy = nullptr;
+ if (Addr)
+ {
+ pCopy = createSocketAddr();
+
+ if (pCopy)
+ memcpy(&(pCopy->m_sockaddr),&(Addr->m_sockaddr), sizeof(struct sockaddr));
+ }
+ return pCopy;
+}
+
+sal_Bool SAL_CALL osl_isEqualSocketAddr (
+ oslSocketAddr Addr1,
+ oslSocketAddr Addr2)
+{
+ struct sockaddr* pAddr1 = nullptr;
+ struct sockaddr* pAddr2 = nullptr;
+
+ assert(Addr1 && Addr2);
+ pAddr1 = &(Addr1->m_sockaddr);
+ pAddr2 = &(Addr2->m_sockaddr);
+
+ if (pAddr1 == pAddr2)
+ {
+ return true;
+ }
+
+ if (pAddr1->sa_family == pAddr2->sa_family)
+ {
+ switch (pAddr1->sa_family)
+ {
+ case AF_INET:
+ {
+ struct sockaddr_in* pInetAddr1= reinterpret_cast<sockaddr_in*>(pAddr1);
+ struct sockaddr_in* pInetAddr2= reinterpret_cast<sockaddr_in*>(pAddr2);
+
+ if ((pInetAddr1->sin_family == pInetAddr2->sin_family) &&
+ (pInetAddr1->sin_addr.s_addr == pInetAddr2->sin_addr.s_addr) &&
+ (pInetAddr1->sin_port == pInetAddr2->sin_port))
+ return true;
+ [[fallthrough]];
+ }
+
+ default:
+ {
+ return (memcmp(pAddr1, pAddr2, sizeof(struct sockaddr)) == 0);
+ }
+ }
+ }
+
+ return false;
+}
+
+oslSocketAddr SAL_CALL osl_createInetBroadcastAddr (
+ rtl_uString *strDottedAddr,
+ sal_Int32 Port)
+{
+ sal_uInt32 nAddr = OSL_INADDR_NONE;
+ oslSocketAddr pAddr;
+
+ if (strDottedAddr && strDottedAddr->length)
+ {
+ /* Dotted host address for limited broadcast */
+ rtl_String *pDottedAddr = nullptr;
+
+ rtl_uString2String (
+ &pDottedAddr, strDottedAddr->buffer, strDottedAddr->length,
+ RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ in_addr buf;
+ if (inet_pton (AF_INET, pDottedAddr->buffer, &buf) == 1) {
+ nAddr = buf.s_addr;
+ }
+ rtl_string_release (pDottedAddr);
+ }
+
+ if (nAddr != OSL_INADDR_NONE)
+ {
+ /* Limited broadcast */
+ nAddr = ntohl(nAddr);
+ if (IN_CLASSA(nAddr))
+ {
+ nAddr &= IN_CLASSA_NET;
+ nAddr |= IN_CLASSA_HOST;
+ }
+ else if (IN_CLASSB(nAddr))
+ {
+ nAddr &= IN_CLASSB_NET;
+ nAddr |= IN_CLASSB_HOST;
+ }
+ else if (IN_CLASSC(nAddr))
+ {
+ nAddr &= IN_CLASSC_NET;
+ nAddr |= IN_CLASSC_HOST;
+ }
+ else
+ {
+ /* No broadcast in class D */
+ return nullptr;
+ }
+ nAddr = htonl(nAddr);
+ }
+
+ pAddr = createSocketAddrWithFamily( osl_Socket_FamilyInet, htons(Port), nAddr );
+ return pAddr;
+}
+
+oslSocketAddr SAL_CALL osl_createInetSocketAddr (
+ rtl_uString *ustrDottedAddr,
+ sal_Int32 Port)
+{
+ rtl_String* strDottedAddr=nullptr;
+ oslSocketAddr Addr;
+ char* pszDottedAddr=nullptr;
+
+ if ( ustrDottedAddr != nullptr )
+ {
+ rtl_uString2String( &strDottedAddr,
+ rtl_uString_getStr(ustrDottedAddr),
+ rtl_uString_getLength(ustrDottedAddr),
+ RTL_TEXTENCODING_UTF8,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+ pszDottedAddr = rtl_string_getStr(strDottedAddr);
+ }
+
+ Addr = pszDottedAddr ? osl_psz_createInetSocketAddr(pszDottedAddr, Port) : nullptr;
+
+ if ( strDottedAddr != nullptr )
+ {
+ rtl_string_release(strDottedAddr);
+ }
+
+ return Addr;
+}
+
+oslSocketAddr osl_psz_createInetSocketAddr (
+ const char* pszDottedAddr,
+ sal_Int32 Port)
+{
+ oslSocketAddr pAddr = nullptr;
+ in_addr buf;
+ if(inet_pton(AF_INET, pszDottedAddr, &buf) == 1)
+ {
+ /* valid dotted addr */
+ pAddr = createSocketAddrWithFamily( osl_Socket_FamilyInet, htons(Port) , buf.s_addr );
+ }
+ return pAddr;
+}
+
+oslSocketResult SAL_CALL osl_setAddrOfSocketAddr( oslSocketAddr pAddr, sal_Sequence *pByteSeq )
+{
+ oslSocketResult res = osl_Socket_Error;
+
+ SAL_WARN_IF( !pAddr, "sal.osl", "setting address of undefined socket address" );
+ SAL_WARN_IF( !pByteSeq, "sal.osl", "setting undefined address for socket address" );
+
+ if( pAddr && pByteSeq )
+ {
+ struct sockaddr_in * pSystemInetAddr;
+
+ assert( pAddr->m_sockaddr.sa_family == FAMILY_TO_NATIVE( osl_Socket_FamilyInet ) );
+ assert( pByteSeq->nElements == 4 );
+
+ pSystemInetAddr = reinterpret_cast<sockaddr_in *>(&pAddr->m_sockaddr);
+ memcpy( &(pSystemInetAddr->sin_addr) , pByteSeq->elements , 4 );
+ res = osl_Socket_Ok;
+ }
+ return res;
+}
+
+oslSocketResult SAL_CALL osl_getAddrOfSocketAddr( oslSocketAddr pAddr, sal_Sequence **ppByteSeq )
+{
+ oslSocketResult res = osl_Socket_Error;
+
+ SAL_WARN_IF( !pAddr, "sal.osl", "getting address of undefined socket address" );
+ SAL_WARN_IF( !ppByteSeq, "sal.osl", "getting address to undefined address pointer" );
+
+ if( pAddr && ppByteSeq )
+ {
+ struct sockaddr_in * pSystemInetAddr = reinterpret_cast<sockaddr_in *>(&pAddr->m_sockaddr);
+ rtl_byte_sequence_constructFromArray( ppByteSeq, reinterpret_cast<sal_Int8 *>(&pSystemInetAddr->sin_addr), 4);
+ res = osl_Socket_Ok;
+ }
+ return res;
+}
+
+/** try to figure out a full-qualified hostname, by adding the current domain
+ as given by the domainname program to the given hostname.
+ This function MUST NOT call gethostbyname since pHostName already points
+ to data returned by gethostname and would be garbled: use gethostname_r
+ instead!
+ */
+
+namespace {
+
+struct oslAddrInfo
+{
+ addrinfo* pAddrInfoList = nullptr;
+ int nError;
+
+ oslAddrInfo(const char* name, bool isInet = false)
+ {
+ addrinfo aHints;
+ memset(&aHints, 0, sizeof(addrinfo));
+ if (isInet)
+ aHints.ai_family = AF_INET;
+ aHints.ai_flags = AI_CANONNAME;
+
+ nError = getaddrinfo(name, nullptr, &aHints, &pAddrInfoList);
+ }
+
+ ~oslAddrInfo()
+ {
+ if (nError == 0)
+ freeaddrinfo(pAddrInfoList);
+ }
+
+ const char* getHostName() const
+ {
+ assert(pAddrInfoList);
+ return pAddrInfoList->ai_canonname;
+ }
+};
+
+}
+static bool isFullQualifiedDomainName (const char *pHostName)
+{
+ /* a FQDN (aka 'hostname.domain.top_level_domain' )
+ * is a name which contains a dot '.' in it ( would
+ * match as well for 'hostname.' but is good enough
+ * for now )*/
+ return strchr( pHostName, int('.') ) != nullptr;
+}
+
+static char* getFullQualifiedDomainName (const char *pHostName)
+{
+ char *pFullQualifiedName = nullptr;
+
+ if (isFullQualifiedDomainName(pHostName))
+ {
+ pFullQualifiedName = strdup(pHostName);
+ }
+ else
+ {
+ oslAddrInfo aAddrInfo(pHostName);
+ if (aAddrInfo.nError == 0)
+ pFullQualifiedName = strdup(aAddrInfo.getHostName());
+ }
+
+ return pFullQualifiedName;
+}
+
+struct oslHostAddrImpl
+{
+ char *pHostName;
+ oslSocketAddr pSockAddr;
+};
+
+static oslHostAddr addrinfoToHostAddr (const addrinfo* ai)
+{
+ if (!ai || !ai->ai_canonname || !ai->ai_addr)
+ return nullptr;
+
+ char* cn = getFullQualifiedDomainName(ai->ai_canonname);
+ SAL_WARN_IF( !cn, "sal.osl", "couldn't get full qualified domain name" );
+ if (cn == nullptr)
+ return nullptr;
+
+ oslSocketAddr pSockAddr = createSocketAddr();
+ SAL_WARN_IF( !pSockAddr, "sal.osl", "insufficient memory" );
+ if (pSockAddr == nullptr)
+ {
+ free(cn);
+ return nullptr;
+ }
+
+ if (ai->ai_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ {
+ memcpy (
+ &(pSockAddr->m_sockaddr),
+ ai->ai_addr,
+ ai->ai_addrlen);
+ }
+ else
+ {
+ /* unknown address family */
+ /* future extensions for new families might be implemented here */
+
+ SAL_WARN( "sal.osl", "unknown address family" );
+
+ destroySocketAddr( pSockAddr );
+ free (cn);
+ return nullptr;
+ }
+
+ oslHostAddr pAddr = static_cast<oslHostAddr>(malloc(sizeof(struct oslHostAddrImpl)));
+ SAL_WARN_IF( !pAddr, "sal.osl", "allocation error" );
+ if (pAddr == nullptr)
+ {
+ destroySocketAddr( pSockAddr );
+ free (cn);
+ return nullptr;
+ }
+
+ pAddr->pHostName= cn;
+ pAddr->pSockAddr= pSockAddr;
+
+ return pAddr;
+}
+
+oslHostAddr SAL_CALL osl_createHostAddr (
+ rtl_uString *ustrHostname,
+ const oslSocketAddr Addr)
+{
+ oslHostAddr HostAddr;
+ rtl_String* strHostname=nullptr;
+ char* pszHostName=nullptr;
+
+ if ( ustrHostname != nullptr )
+ {
+ rtl_uString2String( &strHostname,
+ rtl_uString_getStr(ustrHostname),
+ rtl_uString_getLength(ustrHostname),
+ RTL_TEXTENCODING_UTF8,
+ OUSTRING_TO_OSTRING_CVTFLAGS );
+ pszHostName = rtl_string_getStr(strHostname);
+ }
+
+ HostAddr = osl_psz_createHostAddr(pszHostName,Addr);
+
+ if ( strHostname != nullptr )
+ {
+ rtl_string_release(strHostname);
+ }
+
+ return HostAddr;
+}
+
+oslHostAddr osl_psz_createHostAddr (
+ const char *pszHostname,
+ const oslSocketAddr pAddr)
+{
+ oslHostAddr pHostAddr;
+ char *cn;
+
+ SAL_WARN_IF( !pszHostname, "sal.osl", "undefined hostname" );
+ SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" );
+ if ((pszHostname == nullptr) || (pAddr == nullptr))
+ return nullptr;
+
+ cn = strdup(pszHostname);
+ SAL_WARN_IF( !cn, "sal.osl", "insufficient memory" );
+ if (cn == nullptr)
+ return nullptr;
+
+ pHostAddr= static_cast<oslHostAddr>(malloc(sizeof(struct oslHostAddrImpl)));
+ SAL_WARN_IF( !pHostAddr, "sal.osl", "allocation error" );
+ if (pHostAddr == nullptr)
+ {
+ free (cn);
+ return nullptr;
+ }
+
+ pHostAddr->pHostName= cn;
+ pHostAddr->pSockAddr= osl_copySocketAddr( pAddr );
+
+ return pHostAddr;
+}
+
+oslHostAddr SAL_CALL osl_createHostAddrByName(rtl_uString *ustrHostname)
+{
+ oslHostAddr HostAddr;
+ rtl_String* strHostname=nullptr;
+ char* pszHostName=nullptr;
+
+ if ( ustrHostname != nullptr )
+ {
+ rtl_uString2String( &strHostname,
+ rtl_uString_getStr(ustrHostname),
+ rtl_uString_getLength(ustrHostname),
+ RTL_TEXTENCODING_UTF8,
+ OUSTRING_TO_OSTRING_CVTFLAGS );
+ pszHostName=rtl_string_getStr(strHostname);
+ }
+
+ HostAddr = osl_psz_createHostAddrByName(pszHostName);
+
+ if ( strHostname != nullptr )
+ {
+ rtl_string_release(strHostname);
+ }
+
+ return HostAddr;
+}
+
+oslHostAddr osl_psz_createHostAddrByName (const char *pszHostname)
+{
+ oslAddrInfo aAddrInfo(pszHostname, /* isInet */ true);
+
+ return addrinfoToHostAddr (aAddrInfo.pAddrInfoList);
+}
+
+oslHostAddr SAL_CALL osl_createHostAddrByAddr (const oslSocketAddr pAddr)
+{
+ SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" );
+
+ if (pAddr == nullptr)
+ return nullptr;
+
+ if (pAddr->m_sockaddr.sa_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ {
+ const struct sockaddr_in *sin = reinterpret_cast<sockaddr_in *>(&pAddr->m_sockaddr);
+ if (sin->sin_addr.s_addr == htonl(INADDR_ANY))
+ return nullptr;
+
+ char host[MAX_HOSTBUFFER_SIZE];
+ int res = getnameinfo(&pAddr->m_sockaddr, sizeof(struct sockaddr_in),
+ host, sizeof(host), nullptr, 0, NI_NAMEREQD);
+ if (res != 0)
+ return nullptr;
+
+ char *cn = getFullQualifiedDomainName(host);
+ SAL_WARN_IF( !cn, "sal.osl", "couldn't get full qualified domain name" );
+ if (cn == nullptr)
+ return nullptr;
+
+ oslSocketAddr pSockAddr = createSocketAddr();
+ SAL_WARN_IF( !pSockAddr, "sal.osl", "insufficient memory" );
+ if (pSockAddr == nullptr)
+ {
+ free(cn);
+ return nullptr;
+ }
+
+ memcpy(&pSockAddr->m_sockaddr, &pAddr->m_sockaddr, sizeof(pAddr->m_sockaddr));
+
+ oslHostAddr pHostAddr = static_cast<oslHostAddr>(malloc(sizeof(struct oslHostAddrImpl)));
+ SAL_WARN_IF( !pAddr, "sal.osl", "allocation error" );
+ if (pHostAddr == nullptr)
+ {
+ destroySocketAddr(pSockAddr);
+ free(cn);
+ return nullptr;
+ }
+
+ pHostAddr->pHostName = cn;
+ pHostAddr->pSockAddr = pSockAddr;
+
+ return pHostAddr;
+ }
+
+ return nullptr;
+}
+
+oslHostAddr SAL_CALL osl_copyHostAddr (const oslHostAddr pAddr)
+{
+ SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" );
+
+ if (pAddr)
+ return osl_psz_createHostAddr (pAddr->pHostName, pAddr->pSockAddr);
+ return nullptr;
+}
+
+void SAL_CALL osl_getHostnameOfHostAddr (
+ const oslHostAddr Addr,
+ rtl_uString **ustrHostname)
+{
+ const char* pHostname = osl_psz_getHostnameOfHostAddr(Addr);
+
+ rtl_uString_newFromAscii (ustrHostname, pHostname);
+}
+
+const char* osl_psz_getHostnameOfHostAddr (const oslHostAddr pAddr)
+{
+ if (pAddr)
+ return pAddr->pHostName;
+ return nullptr;
+}
+
+oslSocketAddr SAL_CALL osl_getSocketAddrOfHostAddr (const oslHostAddr pAddr)
+{
+ SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" );
+
+ if (pAddr)
+ return pAddr->pSockAddr;
+ return nullptr;
+}
+
+void SAL_CALL osl_destroyHostAddr (oslHostAddr pAddr)
+{
+ if (pAddr)
+ {
+ if (pAddr->pHostName)
+ free (pAddr->pHostName);
+ if (pAddr->pSockAddr)
+ osl_destroySocketAddr (pAddr->pSockAddr);
+ free (pAddr);
+ }
+}
+
+namespace
+{
+oslSocketResult lcl_getLocalHostname(rtl_uString **ustrLocalHostname, bool bUseFQDN)
+{
+ static auto const init = [bUseFQDN]() -> std::pair<oslSocketResult, OUString> {
+ char LocalHostname[256] = "";
+
+#ifdef SYSV
+ struct utsname uts;
+
+ if (uname(&uts) < 0)
+ return {osl_Socket_Error, OUString()};
+
+ if ((strlen(uts.nodename) + 1) > nBufLen)
+ return {osl_Socket_Error, OUString()};
+
+ strncpy(LocalHostname, uts.nodename, sizeof( LocalHostname ));
+#else /* BSD compatible */
+ if (gethostname(LocalHostname, sizeof(LocalHostname)-1) != 0)
+ return {osl_Socket_Error, OUString()};
+#endif /* SYSV */
+ LocalHostname[sizeof(LocalHostname)-1] = 0;
+
+ /* check if we have an FQDN */
+ if (bUseFQDN && strchr(LocalHostname, '.') == nullptr)
+ {
+ oslHostAddr Addr;
+
+ /* no, determine it via dns */
+ Addr = osl_psz_createHostAddrByName(LocalHostname);
+
+ const char *pStr;
+ if ((pStr = osl_psz_getHostnameOfHostAddr(Addr)) != nullptr)
+ {
+ strncpy(LocalHostname, pStr, sizeof( LocalHostname ));
+ LocalHostname[sizeof(LocalHostname)-1] = 0;
+ }
+ osl_destroyHostAddr(Addr);
+ }
+
+ if (LocalHostname[0] != '\0')
+ {
+ return {osl_Socket_Ok, OUString::createFromAscii(LocalHostname)};
+ }
+
+ return {osl_Socket_Error, OUString()};
+ }();
+
+ rtl_uString_assign(ustrLocalHostname,init.second.pData);
+
+ return init.first;
+}
+}
+
+oslSocketResult SAL_CALL osl_getLocalHostname(rtl_uString **ustrLocalHostname)
+{
+ return lcl_getLocalHostname(ustrLocalHostname, false);
+}
+
+oslSocketResult osl_getLocalHostnameFQDN(rtl_uString **ustrLocalHostname)
+{
+ return lcl_getLocalHostname(ustrLocalHostname, true);
+}
+
+oslSocketAddr SAL_CALL osl_resolveHostname(rtl_uString *ustrHostname)
+{
+ oslSocketAddr Addr;
+ rtl_String* strHostname=nullptr;
+ char* pszHostName=nullptr;
+
+ if ( ustrHostname != nullptr )
+ {
+ rtl_uString2String( &strHostname,
+ rtl_uString_getStr(ustrHostname),
+ rtl_uString_getLength(ustrHostname),
+ RTL_TEXTENCODING_UTF8,
+ OUSTRING_TO_OSTRING_CVTFLAGS );
+ pszHostName = rtl_string_getStr(strHostname);
+ }
+
+ Addr = osl_psz_resolveHostname(pszHostName);
+
+ if ( strHostname != nullptr )
+ {
+ rtl_string_release(strHostname);
+ }
+
+ return Addr;
+}
+
+oslSocketAddr osl_psz_resolveHostname(const char* pszHostname)
+{
+ struct oslHostAddrImpl *pAddr = osl_psz_createHostAddrByName(pszHostname);
+
+ if (pAddr)
+ {
+ oslSocketAddr SockAddr = osl_copySocketAddr(pAddr->pSockAddr);
+
+ osl_destroyHostAddr(pAddr);
+
+ return SockAddr;
+ }
+
+ return nullptr;
+}
+
+sal_Int32 SAL_CALL osl_getServicePort(rtl_uString *ustrServicename, rtl_uString *ustrProtocol)
+{
+ sal_Int32 nPort;
+ rtl_String* strServicename=nullptr;
+ rtl_String* strProtocol=nullptr;
+ char* pszServiceName=nullptr;
+ char* pszProtocol=nullptr;
+
+ if ( ustrServicename != nullptr )
+ {
+ rtl_uString2String( &strServicename,
+ rtl_uString_getStr(ustrServicename),
+ rtl_uString_getLength(ustrServicename),
+ RTL_TEXTENCODING_UTF8,
+ OUSTRING_TO_OSTRING_CVTFLAGS );
+ pszServiceName = rtl_string_getStr(strServicename);
+ }
+
+ if ( ustrProtocol != nullptr )
+ {
+ rtl_uString2String( &strProtocol,
+ rtl_uString_getStr(ustrProtocol),
+ rtl_uString_getLength(ustrProtocol),
+ RTL_TEXTENCODING_UTF8,
+ OUSTRING_TO_OSTRING_CVTFLAGS );
+ pszProtocol = rtl_string_getStr(strProtocol);
+ }
+
+ nPort = osl_psz_getServicePort(pszServiceName,pszProtocol);
+
+ if ( strServicename != nullptr )
+ {
+ rtl_string_release(strServicename);
+ }
+
+ if ( strProtocol != nullptr )
+ {
+ rtl_string_release(strProtocol);
+ }
+
+ return nPort;
+}
+
+sal_Int32 osl_psz_getServicePort(const char* pszServicename,
+ const char* pszProtocol)
+{
+ struct servent* ps;
+
+ ps= getservbyname(pszServicename, pszProtocol);
+
+ if (ps != nullptr)
+ return ntohs(ps->s_port);
+
+ return OSL_INVALID_PORT;
+}
+
+void SAL_CALL osl_destroySocketAddr(oslSocketAddr pAddr)
+{
+ destroySocketAddr( pAddr );
+}
+
+oslAddrFamily SAL_CALL osl_getFamilyOfSocketAddr(oslSocketAddr pAddr)
+{
+ SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" );
+
+ if (pAddr)
+ return FAMILY_FROM_NATIVE(pAddr->m_sockaddr.sa_family);
+ return osl_Socket_FamilyInvalid;
+}
+
+sal_Int32 SAL_CALL osl_getInetPortOfSocketAddr(oslSocketAddr pAddr)
+{
+ SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" );
+
+ if( pAddr )
+ {
+ struct sockaddr_in* pSystemInetAddr= reinterpret_cast<sockaddr_in*>(&pAddr->m_sockaddr);
+
+ if ( pSystemInetAddr->sin_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ return ntohs(pSystemInetAddr->sin_port);
+ }
+ return OSL_INVALID_PORT;
+}
+
+sal_Bool SAL_CALL osl_setInetPortOfSocketAddr(oslSocketAddr pAddr, sal_Int32 Port)
+{
+ SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" );
+
+ if( pAddr )
+ {
+ struct sockaddr_in* pSystemInetAddr= reinterpret_cast<sockaddr_in*>(&pAddr->m_sockaddr);
+ if ( pSystemInetAddr->sin_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ {
+ pSystemInetAddr->sin_port= htons(static_cast<short>(Port));
+ return true;
+ }
+ }
+
+ /* this is not a inet-addr => can't set port */
+ return false;
+}
+
+oslSocketResult SAL_CALL osl_getHostnameOfSocketAddr(oslSocketAddr Addr, rtl_uString **ustrHostname)
+{
+ oslHostAddr pHostAddr= osl_createHostAddrByAddr(Addr);
+
+ if (!pHostAddr)
+ {
+ return osl_Socket_Error;
+ }
+
+ rtl_uString_newFromAscii(ustrHostname,pHostAddr->pHostName);
+
+ osl_destroyHostAddr(pHostAddr);
+
+ return osl_Socket_Ok;
+}
+
+oslSocketResult SAL_CALL osl_getDottedInetAddrOfSocketAddr(oslSocketAddr Addr, rtl_uString **ustrDottedInetAddr)
+{
+ if( !Addr )
+ {
+ return osl_Socket_Error;
+ }
+
+ struct sockaddr_in* pSystemInetAddr = reinterpret_cast<sockaddr_in *>(&Addr->m_sockaddr);
+
+ if (pSystemInetAddr->sin_family != FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ {
+ return osl_Socket_Error;
+ }
+
+ char buf[INET_ADDRSTRLEN];
+ auto const text = inet_ntop(AF_INET, &pSystemInetAddr->sin_addr, buf, INET_ADDRSTRLEN);
+ assert(text != nullptr);
+ rtl_uString_newFromAscii(ustrDottedInetAddr,text);
+
+ return osl_Socket_Ok;
+
+}
+
+oslSocket SAL_CALL osl_createSocket(
+ oslAddrFamily Family,
+ oslSocketType Type,
+ oslProtocol Protocol)
+{
+ oslSocket pSocket;
+
+ /* alloc memory */
+ pSocket= createSocketImpl();
+
+ /* create socket */
+ pSocket->m_Socket= socket(FAMILY_TO_NATIVE(Family),
+ TYPE_TO_NATIVE(Type),
+ PROTOCOL_TO_NATIVE(Protocol));
+
+ /* creation failed => free memory */
+ if(pSocket->m_Socket == OSL_INVALID_SOCKET)
+ {
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "socket creation failed: " << UnixErrnoString(nErrno) );
+
+ destroySocketImpl(pSocket);
+ pSocket= nullptr;
+ }
+ else
+ {
+ sal_Int32 nFlags=0;
+ /* set close-on-exec flag */
+ if ((nFlags = fcntl(pSocket->m_Socket, F_GETFD, 0)) != -1)
+ {
+ nFlags |= FD_CLOEXEC;
+ if (fcntl(pSocket->m_Socket, F_SETFD, nFlags) == -1)
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "failed changing socket flags: " << UnixErrnoString(nErrno) );
+ }
+ }
+ else
+ {
+ pSocket->m_nLastError=errno;
+ }
+ }
+
+ return pSocket;
+}
+
+void SAL_CALL osl_acquireSocket(oslSocket pSocket)
+{
+ osl_atomic_increment(&(pSocket->m_nRefCount));
+}
+
+void SAL_CALL osl_releaseSocket(oslSocket pSocket)
+{
+ if (pSocket && osl_atomic_decrement(&(pSocket->m_nRefCount)) == 0)
+ {
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ if (pSocket->m_bIsAccepting)
+ {
+ SAL_WARN( "sal.osl", "attempt to destroy socket while accepting" );
+ return;
+ }
+#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */
+ osl_closeSocket(pSocket);
+ destroySocketImpl(pSocket);
+ }
+}
+
+void SAL_CALL osl_closeSocket(oslSocket pSocket)
+{
+ /* socket already invalid */
+ if (!pSocket)
+ return;
+
+ pSocket->m_nLastError=0;
+ sal_Int32 nFD = pSocket->m_Socket;
+
+ if (nFD == OSL_INVALID_SOCKET)
+ return;
+
+ pSocket->m_Socket = OSL_INVALID_SOCKET;
+
+ sal_Int32 nRet=0;
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ pSocket->m_bIsInShutdown = true;
+
+ if (pSocket->m_bIsAccepting)
+ {
+ union {
+ struct sockaddr aSockAddr;
+ struct sockaddr_in aSockAddrIn;
+ } s;
+ socklen_t nSockLen = sizeof(s.aSockAddr);
+
+ nRet = getsockname(nFD, &s.aSockAddr, &nSockLen);
+ if (nRet < 0)
+ {
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "getsockname call failed: " << UnixErrnoString(nErrno) );
+ }
+
+ if (s.aSockAddr.sa_family == AF_INET)
+ {
+ if (s.aSockAddrIn.sin_addr.s_addr == htonl(INADDR_ANY))
+ {
+ s.aSockAddrIn.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ }
+
+ int nConnFD = socket(AF_INET, SOCK_STREAM, 0);
+ if (nConnFD < 0)
+ {
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "socket call failed: " << UnixErrnoString(nErrno) );
+ }
+ else
+ {
+ nRet = connect(nConnFD, &s.aSockAddr, sizeof(s.aSockAddr));
+ if (nRet < 0)
+ {
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "connect call failed: " << UnixErrnoString(nErrno) );
+ }
+ close(nConnFD);
+ }
+ }
+ pSocket->m_bIsAccepting = false;
+ }
+#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */
+
+ nRet=close(nFD);
+ if (nRet != 0)
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "closeSocket close failed: " << UnixErrnoString(nErrno) );
+ }
+
+ pSocket->m_Socket = OSL_INVALID_SOCKET;
+}
+
+/* Note from function creator: I rely on the fact that oslSocketAddr and struct sockaddr
+ are the same! I don't like it very much but see no other easy way to conceal
+ the struct sockaddr from the eyes of the user. */
+oslSocketAddr SAL_CALL osl_getLocalAddrOfSocket(oslSocket pSocket)
+{
+ socklen_t AddrLen;
+ struct sockaddr Addr;
+ oslSocketAddr pAddr;
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return nullptr;
+
+ AddrLen= sizeof(struct sockaddr);
+
+ if (getsockname(pSocket->m_Socket, &Addr, &AddrLen) == OSL_SOCKET_ERROR)
+ return nullptr;
+
+ pAddr = createSocketAddrFromSystem( &Addr );
+ return pAddr;
+}
+
+oslSocketAddr SAL_CALL osl_getPeerAddrOfSocket(oslSocket pSocket)
+{
+ socklen_t AddrLen;
+ struct sockaddr Addr;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return nullptr;
+ }
+
+ pSocket->m_nLastError=0;
+ AddrLen= sizeof(struct sockaddr);
+
+ if(getpeername(pSocket->m_Socket, &Addr, &AddrLen) == OSL_SOCKET_ERROR)
+ {
+ pSocket->m_nLastError=errno;
+ return nullptr;
+ }
+ return createSocketAddrFromSystem( &Addr );
+}
+
+sal_Bool SAL_CALL osl_bindAddrToSocket(oslSocket pSocket,
+ oslSocketAddr pAddr)
+{
+ int nRet;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" );
+ if ( pSocket == nullptr || pAddr == nullptr )
+ {
+ return false;
+ }
+
+ pSocket->m_nLastError=0;
+
+ nRet = bind(pSocket->m_Socket, &(pAddr->m_sockaddr), sizeof(struct sockaddr));
+
+ if ( nRet == OSL_SOCKET_ERROR)
+ {
+ pSocket->m_nLastError=errno;
+ return false;
+ }
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_listenOnSocket(oslSocket pSocket,
+ sal_Int32 MaxPendingConnections)
+{
+ int nRet;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return false;
+ }
+
+ pSocket->m_nLastError=0;
+
+ nRet = listen(pSocket->m_Socket,
+ MaxPendingConnections == -1 ?
+ SOMAXCONN :
+ MaxPendingConnections);
+ if ( nRet == OSL_SOCKET_ERROR)
+ {
+ pSocket->m_nLastError=errno;
+ return false;
+ }
+
+ return true;
+}
+
+oslSocketResult SAL_CALL osl_connectSocketTo(oslSocket pSocket,
+ oslSocketAddr pAddr,
+ const TimeValue* pTimeout)
+{
+ int ReadyHandles;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+
+ if ( pSocket == nullptr )
+ {
+ return osl_Socket_Error;
+ }
+
+ pSocket->m_nLastError=0;
+
+ if (osl_isNonBlockingMode(pSocket))
+ {
+ if (connect(pSocket->m_Socket,
+ &(pAddr->m_sockaddr),
+ sizeof(struct sockaddr)) != OSL_SOCKET_ERROR)
+ return osl_Socket_Ok;
+
+ if (errno == EWOULDBLOCK || errno == EINPROGRESS)
+ {
+ pSocket->m_nLastError=EINPROGRESS;
+ return osl_Socket_InProgress;
+ }
+
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "connection failed: " << UnixErrnoString(nErrno) );
+ return osl_Socket_Error;
+ }
+
+ /* set socket temporarily to non-blocking */
+ if( !osl_enableNonBlockingMode(pSocket, true) )
+ SAL_WARN( "sal.osl", "failed to enable non-blocking mode" );
+
+ /* initiate connect */
+ if(connect(pSocket->m_Socket,
+ &(pAddr->m_sockaddr),
+ sizeof(struct sockaddr)) != OSL_SOCKET_ERROR)
+ {
+ /* immediate connection */
+ osl_enableNonBlockingMode(pSocket, false);
+
+ return osl_Socket_Ok;
+ }
+
+ /* really an error or just delayed? */
+ if (errno != EINPROGRESS)
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "connection failed: " << UnixErrnoString(nErrno) );
+
+ osl_enableNonBlockingMode(pSocket, false);
+ return osl_Socket_Error;
+ }
+
+ /* prepare poll set for socket */
+ pollfd Set = {pSocket->m_Socket, POLLPRI | POLLOUT, 0};
+
+ /* poll */
+ ReadyHandles= poll(&Set, 1,
+ pTimeout ? convertToMs(pTimeout) : -1);
+
+ if (ReadyHandles > 0) /* connected */
+ {
+ if ( (Set.revents & POLLOUT) != 0 )
+ {
+ int nErrorCode = 0;
+ socklen_t nErrorSize = sizeof( nErrorCode );
+
+ int nSockOpt;
+
+ nSockOpt = getsockopt ( pSocket->m_Socket, SOL_SOCKET, SO_ERROR,
+ &nErrorCode, &nErrorSize );
+ if ( (nSockOpt == 0) && (nErrorCode == 0))
+ {
+ osl_enableNonBlockingMode(pSocket, false);
+ return osl_Socket_Ok;
+ }
+ else
+ {
+ pSocket->m_nLastError = (nSockOpt == 0) ? nErrorCode : errno;
+ return osl_Socket_Error;
+ }
+ }
+ else
+ {
+ return osl_Socket_Error;
+ }
+ }
+ else if (ReadyHandles < 0) /* error */
+ {
+ if (errno == EBADF) /* most probably interrupted by close() */
+ {
+ /* do not access pSockImpl because it is about to be or */
+ /* already destroyed */
+ return osl_Socket_Interrupted;
+ }
+ pSocket->m_nLastError=errno;
+ return osl_Socket_Error;
+ }
+ else /* timeout */
+ {
+ pSocket->m_nLastError=errno;
+ return osl_Socket_TimedOut;
+ }
+}
+
+oslSocket SAL_CALL osl_acceptConnectionOnSocket(oslSocket pSocket,
+ oslSocketAddr* ppAddr)
+{
+ struct sockaddr Addr;
+ int Connection, Flags;
+ oslSocket pConnectionSockImpl;
+
+ socklen_t AddrLen = sizeof(struct sockaddr);
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return nullptr;
+ }
+
+ pSocket->m_nLastError=0;
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ pSocket->m_bIsAccepting = true;
+#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */
+
+ if( ppAddr && *ppAddr )
+ {
+ osl_destroySocketAddr( *ppAddr );
+ *ppAddr = nullptr;
+ }
+
+ /* prevent Linux EINTR behaviour */
+ do
+ {
+ Connection = accept(pSocket->m_Socket, &Addr, &AddrLen);
+ } while (Connection == -1 && errno == EINTR);
+
+ /* accept failed? */
+ if( Connection == OSL_SOCKET_ERROR )
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "accept connection failed: " << UnixErrnoString(nErrno) );
+
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ pSocket->m_bIsAccepting = false;
+#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */
+ return nullptr;
+ }
+
+ assert(AddrLen == sizeof(struct sockaddr));
+
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ if ( pSocket->m_bIsInShutdown )
+ {
+ close(Connection);
+ SAL_WARN( "sal.osl", "close while accept" );
+ return nullptr;
+ }
+#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */
+
+ if(ppAddr)
+ {
+ *ppAddr= createSocketAddrFromSystem(&Addr);
+ }
+
+ /* alloc memory */
+ pConnectionSockImpl= createSocketImpl();
+
+ /* set close-on-exec flag */
+ if ((Flags = fcntl(Connection, F_GETFD, 0)) != -1)
+ {
+ Flags |= FD_CLOEXEC;
+ if (fcntl(Connection, F_SETFD, Flags) == -1)
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "fcntl failed: " << UnixErrnoString(nErrno) );
+ }
+
+ }
+
+ pConnectionSockImpl->m_Socket = Connection;
+ pConnectionSockImpl->m_nLastError = 0;
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ pConnectionSockImpl->m_bIsAccepting = false;
+
+ pSocket->m_bIsAccepting = false;
+#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */
+ return pConnectionSockImpl;
+}
+
+sal_Int32 SAL_CALL osl_receiveSocket(oslSocket pSocket,
+ void* pBuffer,
+ sal_uInt32 BytesToRead,
+ oslSocketMsgFlag Flag)
+{
+ int nRead;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return -1;
+ }
+
+ pSocket->m_nLastError=0;
+
+ do
+ {
+ nRead = recv(pSocket->m_Socket,
+ pBuffer,
+ BytesToRead,
+ MSG_FLAG_TO_NATIVE(Flag));
+ } while ( nRead < 0 && errno == EINTR );
+
+ if ( nRead < 0 )
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "receive socket [" << nRead << "] failed: " << UnixErrnoString(nErrno) );
+ }
+ else if ( nRead == 0 )
+ {
+ SAL_WARN( "sal.osl", "receive socket [" << nRead << "] failed: EOL" );
+ }
+
+ return nRead;
+}
+
+sal_Int32 SAL_CALL osl_receiveFromSocket(oslSocket pSocket,
+ oslSocketAddr pSenderAddr,
+ void* pBuffer,
+ sal_uInt32 BufferSize,
+ oslSocketMsgFlag Flag)
+{
+ int nRead;
+ struct sockaddr *pSystemSockAddr = nullptr;
+ socklen_t AddrLen = 0;
+ if( pSenderAddr )
+ {
+ AddrLen = sizeof( struct sockaddr );
+ pSystemSockAddr = &(pSenderAddr->m_sockaddr);
+ }
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return -1;
+ }
+
+ pSocket->m_nLastError=0;
+
+ nRead = recvfrom(pSocket->m_Socket,
+ pBuffer,
+ BufferSize,
+ MSG_FLAG_TO_NATIVE(Flag),
+ pSystemSockAddr,
+ &AddrLen);
+
+ if ( nRead < 0 )
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "receive socket [" << nRead << "] failed: " << UnixErrnoString(nErrno) );
+ }
+ else if ( nRead == 0 )
+ {
+ SAL_WARN( "sal.osl", "receive socket [" << nRead << "] failed: EOL" );
+ }
+
+ return nRead;
+}
+
+sal_Int32 SAL_CALL osl_sendSocket(oslSocket pSocket,
+ const void* pBuffer,
+ sal_uInt32 BytesToSend,
+ oslSocketMsgFlag Flag)
+{
+ int nWritten;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return -1;
+ }
+
+ pSocket->m_nLastError=0;
+
+ do
+ {
+ nWritten = send(pSocket->m_Socket,
+ pBuffer,
+ BytesToSend,
+ MSG_FLAG_TO_NATIVE(Flag));
+ } while ( nWritten < 0 && errno == EINTR );
+
+ if ( nWritten < 0 )
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "send socket [" << nWritten << "] failed: " << UnixErrnoString(nErrno) );
+ }
+ else if ( nWritten == 0 )
+ {
+ SAL_WARN( "sal.osl", "send socket [" << nWritten << "] failed: EOL" );
+ }
+
+ return nWritten;
+}
+
+sal_Int32 SAL_CALL osl_sendToSocket(oslSocket pSocket,
+ oslSocketAddr ReceiverAddr,
+ const void* pBuffer,
+ sal_uInt32 BytesToSend,
+ oslSocketMsgFlag Flag)
+{
+ int nWritten;
+
+ struct sockaddr *pSystemSockAddr = nullptr;
+ int AddrLen = 0;
+ if( ReceiverAddr )
+ {
+ pSystemSockAddr = &(ReceiverAddr->m_sockaddr);
+ AddrLen = sizeof( struct sockaddr );
+ }
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return -1;
+ }
+
+ pSocket->m_nLastError=0;
+
+ /* ReceiverAddr might be 0 when used on a connected socket. */
+ /* Then sendto should behave like send. */
+
+ nWritten = sendto(pSocket->m_Socket,
+ pBuffer,
+ BytesToSend,
+ MSG_FLAG_TO_NATIVE(Flag),
+ pSystemSockAddr,
+ AddrLen);
+
+ if ( nWritten < 0 )
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "send socket [" << nWritten << "] failed: " << UnixErrnoString(nErrno) );
+ }
+ else if ( nWritten == 0 )
+ {
+ SAL_WARN( "sal.osl", "send socket [" << nWritten << "] failed: EOL" );
+ }
+
+ return nWritten;
+}
+
+sal_Int32 SAL_CALL osl_readSocket (
+ oslSocket pSocket, void *pBuffer, sal_Int32 n )
+{
+ sal_uInt8 * Ptr = static_cast<sal_uInt8 *>(pBuffer);
+ sal_uInt32 BytesRead= 0;
+ sal_uInt32 BytesToRead= n;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+
+ /* loop until all desired bytes were read or an error occurred */
+ while (BytesToRead > 0)
+ {
+ sal_Int32 RetVal;
+ RetVal= osl_receiveSocket(pSocket,
+ Ptr,
+ BytesToRead,
+ osl_Socket_MsgNormal);
+
+ /* error occurred? */
+ if(RetVal <= 0)
+ {
+ break;
+ }
+
+ BytesToRead -= RetVal;
+ BytesRead += RetVal;
+ Ptr += RetVal;
+ }
+
+ return BytesRead;
+}
+
+sal_Int32 SAL_CALL osl_writeSocket(
+ oslSocket pSocket, const void *pBuffer, sal_Int32 n )
+{
+ /* loop until all desired bytes were send or an error occurred */
+ sal_uInt32 BytesSend= 0;
+ sal_uInt32 BytesToSend= n;
+ sal_uInt8 const *Ptr = static_cast<sal_uInt8 const *>(pBuffer);
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+
+ while (BytesToSend > 0)
+ {
+ sal_Int32 RetVal;
+
+ RetVal= osl_sendSocket( pSocket,Ptr,BytesToSend,osl_Socket_MsgNormal);
+
+ /* error occurred? */
+ if(RetVal <= 0)
+ {
+ break;
+ }
+
+ BytesToSend -= RetVal;
+ BytesSend += RetVal;
+ Ptr += RetVal;
+
+ }
+ return BytesSend;
+}
+
+static bool socket_poll (
+ oslSocket pSocket,
+ const TimeValue* pTimeout,
+ short nEvent)
+{
+ struct pollfd fds;
+ int timeout;
+ int result;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if (pSocket == nullptr)
+ return false; /* EINVAL */
+
+ pSocket->m_nLastError = 0;
+
+ fds.fd = pSocket->m_Socket;
+ fds.events = nEvent;
+ fds.revents = 0;
+
+ timeout = -1;
+ if (pTimeout)
+ {
+ timeout = convertToMs(pTimeout);
+ }
+
+ result = poll (&fds, 1, timeout);
+ if (result < 0)
+ {
+ pSocket->m_nLastError = errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "poll failed: " << UnixErrnoString(nErrno) );
+ return false;
+ }
+ if (result == 0)
+ {
+ /* Timeout */
+ return false;
+ }
+
+ return ((fds.revents & nEvent) == nEvent);
+}
+
+sal_Bool SAL_CALL osl_isReceiveReady (
+ oslSocket pSocket, const TimeValue* pTimeout)
+{
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if (pSocket == nullptr)
+ {
+ /* ENOTSOCK */
+ return false;
+ }
+
+ return socket_poll (pSocket, pTimeout, POLLIN);
+}
+
+sal_Bool SAL_CALL osl_isSendReady (
+ oslSocket pSocket, const TimeValue* pTimeout)
+{
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if (pSocket == nullptr)
+ {
+ /* ENOTSOCK */
+ return false;
+ }
+
+ return socket_poll (pSocket, pTimeout, POLLOUT);
+}
+
+sal_Bool SAL_CALL osl_isExceptionPending (
+ oslSocket pSocket, const TimeValue* pTimeout)
+{
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if (pSocket == nullptr)
+ {
+ /* ENOTSOCK */
+ return false;
+ }
+
+ return socket_poll (pSocket, pTimeout, POLLPRI);
+}
+
+sal_Bool SAL_CALL osl_shutdownSocket(oslSocket pSocket,
+ oslSocketDirection Direction)
+{
+ int nRet;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return false;
+ }
+
+ pSocket->m_nLastError=0;
+
+ nRet=shutdown(pSocket->m_Socket, DIRECTION_TO_NATIVE(Direction));
+ if (nRet != 0 )
+ {
+ pSocket->m_nLastError=errno;
+ int nErrno = errno;
+ SAL_WARN( "sal.osl", "shutdown failed: " << UnixErrnoString(nErrno) );
+ }
+ return (nRet==0);
+}
+
+sal_Int32 SAL_CALL osl_getSocketOption(oslSocket pSocket,
+ oslSocketOptionLevel Level,
+ oslSocketOption Option,
+ void* pBuffer,
+ sal_uInt32 BufferLen)
+{
+ socklen_t nOptLen = static_cast<socklen_t>(BufferLen);
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return -1;
+ }
+
+ pSocket->m_nLastError=0;
+
+ if(getsockopt(pSocket->m_Socket,
+ OPTION_LEVEL_TO_NATIVE(Level),
+ OPTION_TO_NATIVE(Option),
+ pBuffer,
+ &nOptLen) == -1)
+ {
+ pSocket->m_nLastError=errno;
+ return -1;
+ }
+
+ return nOptLen;
+}
+
+sal_Bool SAL_CALL osl_setSocketOption(oslSocket pSocket,
+ oslSocketOptionLevel Level,
+ oslSocketOption Option,
+ void* pBuffer,
+ sal_uInt32 BufferLen)
+{
+ int nRet;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return false;
+ }
+
+ pSocket->m_nLastError=0;
+
+ nRet = setsockopt(pSocket->m_Socket,
+ OPTION_LEVEL_TO_NATIVE(Level),
+ OPTION_TO_NATIVE(Option),
+ pBuffer,
+ BufferLen);
+
+ if ( nRet < 0 )
+ {
+ pSocket->m_nLastError=errno;
+ return false;
+ }
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_enableNonBlockingMode(oslSocket pSocket,
+ sal_Bool On)
+{
+ int flags;
+ int nRet;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return false;
+ }
+
+ pSocket->m_nLastError=0;
+
+ flags = fcntl(pSocket->m_Socket, F_GETFL, 0);
+
+ if (On)
+ flags |= O_NONBLOCK;
+ else
+ flags &= ~(O_NONBLOCK);
+
+ nRet = fcntl(pSocket->m_Socket, F_SETFL, flags);
+
+ if ( nRet < 0 )
+ {
+ pSocket->m_nLastError=errno;
+ return false;
+ }
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_isNonBlockingMode(oslSocket pSocket)
+{
+ int flags;
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return false;
+ }
+
+ pSocket->m_nLastError=0;
+
+ flags = fcntl(pSocket->m_Socket, F_GETFL, 0);
+
+ if (flags == -1 || !(flags & O_NONBLOCK))
+ return false;
+
+ return true;
+}
+
+oslSocketType SAL_CALL osl_getSocketType(oslSocket pSocket)
+{
+ int Type=0;
+ socklen_t TypeSize= sizeof(Type);
+
+ SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" );
+ if ( pSocket == nullptr )
+ {
+ return osl_Socket_TypeInvalid;
+ }
+
+ pSocket->m_nLastError=0;
+
+ if(getsockopt(pSocket->m_Socket,
+ OPTION_LEVEL_TO_NATIVE(osl_Socket_LevelSocket),
+ OPTION_TO_NATIVE(osl_Socket_OptionType),
+ &Type,
+ &TypeSize) == -1)
+ {
+ /* error */
+ pSocket->m_nLastError=errno;
+ return osl_Socket_TypeInvalid;
+ }
+
+ return TYPE_FROM_NATIVE(Type);
+
+}
+
+void SAL_CALL osl_getLastSocketErrorDescription(oslSocket Socket, rtl_uString **ustrError)
+{
+ char pszError[1024];
+
+ pszError[0] = '\0';
+
+ osl_psz_getLastSocketErrorDescription(Socket,pszError,sizeof(pszError));
+
+ rtl_uString_newFromAscii(ustrError,pszError);
+}
+
+void osl_psz_getLastSocketErrorDescription(oslSocket pSocket, char* pBuffer, sal_uInt32 BufferSize)
+{
+ /* make sure pBuffer will be a zero-terminated string even when strncpy has to cut */
+ pBuffer[BufferSize-1]= '\0';
+
+ if ( pSocket == nullptr )
+ {
+ strncpy(pBuffer, strerror(EINVAL), BufferSize-1);
+ return;
+ }
+
+ strncpy(pBuffer, strerror(pSocket->m_nLastError), BufferSize-1);
+}
+
+oslSocketError SAL_CALL osl_getLastSocketError(oslSocket pSocket)
+{
+ if ( pSocket == nullptr )
+ {
+ return ERROR_FROM_NATIVE(EINVAL);
+ }
+
+ return ERROR_FROM_NATIVE(pSocket->m_nLastError);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/sockimpl.hxx b/sal/osl/unx/sockimpl.hxx
new file mode 100644
index 000000000..1a9bc1f9e
--- /dev/null
+++ b/sal/osl/unx/sockimpl.hxx
@@ -0,0 +1,61 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_SOCKIMPL_HXX
+#define INCLUDED_SAL_OSL_UNX_SOCKIMPL_HXX
+
+#include <osl/pipe.h>
+#include <osl/socket.h>
+#include <osl/interlck.h>
+
+#include "system.hxx"
+
+#if defined(LINUX) || defined(FREEBSD) || defined(NETBSD)
+#define CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT 1
+#endif
+
+struct oslSocketImpl {
+ int m_Socket;
+ int m_nLastError;
+ oslInterlockedCount m_nRefCount;
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ bool m_bIsAccepting;
+ bool m_bIsInShutdown;
+#endif
+};
+
+struct oslSocketAddrImpl
+{
+ struct sockaddr m_sockaddr;
+};
+
+struct oslPipeImpl {
+ int m_Socket;
+ char m_Name[sizeof sockaddr_un::sun_path];
+ oslInterlockedCount m_nRefCount;
+ bool m_bClosed;
+#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT)
+ bool m_bIsAccepting;
+ bool m_bIsInShutdown;
+#endif
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/soffice.cxx b/sal/osl/unx/soffice.cxx
new file mode 100644
index 000000000..bcead388b
--- /dev/null
+++ b/sal/osl/unx/soffice.cxx
@@ -0,0 +1,25 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <atomic>
+
+#include "soffice.hxx"
+
+namespace
+{
+std::atomic<bool> flag(false);
+}
+
+void sal::detail::setSoffice() { flag = true; }
+
+bool sal::detail::isSoffice() { return flag; }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/osl/unx/soffice.hxx b/sal/osl/unx/soffice.hxx
new file mode 100644
index 000000000..da1b684af
--- /dev/null
+++ b/sal/osl/unx/soffice.hxx
@@ -0,0 +1,26 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_SOFFICE_HXX
+#define INCLUDED_SAL_OSL_UNX_SOFFICE_HXX
+
+#include <sal/config.h>
+
+// Used to communicate special sal::detail::InitializeSoffice sal_detail_initialize call:
+
+namespace sal::detail
+{
+void setSoffice();
+
+bool isSoffice();
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/osl/unx/system.cxx b/sal/osl/unx/system.cxx
new file mode 100644
index 000000000..875f41016
--- /dev/null
+++ b/sal/osl/unx/system.cxx
@@ -0,0 +1,167 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <unistd.h>
+#include <string.h>
+
+#include <config_features.h>
+
+#include "system.hxx"
+
+#ifdef NO_PTHREAD_RTL
+
+#if defined(MACOSX)
+
+#include <premac.h>
+#include <Foundation/Foundation.h>
+#include <postmac.h>
+
+/*
+ * Add support for resolving Mac native alias files (not the same as unix alias files)
+ * (what are "unix alias files"?)
+ * returns 0 on success.
+ */
+int macxp_resolveAlias(char *path, int buflen)
+{
+#if HAVE_FEATURE_MACOSX_SANDBOX
+ /* Avoid unnecessary messages in the system.log:
+ *
+ * soffice(57342) deny file-read-data /Users/tml/Documents/b.odt/..namedfork/rsrc
+ * etc.
+ *
+ * Just don't bother with resolving aliases. I doubt its usefulness anyway.
+ */
+ (void) path;
+ (void) buflen;
+ return 0;
+#else
+ CFStringRef cfpath;
+ CFURLRef cfurl;
+ CFErrorRef cferror;
+ CFDataRef cfbookmark;
+
+ // Don't even try anything for files inside the app bundle. Just a
+ // waste of time.
+
+ static const char * const appBundle = [[[NSBundle mainBundle] bundlePath] UTF8String];
+
+ const size_t appBundleLen = strlen(appBundle);
+ if (strncmp(path, appBundle, appBundleLen) == 0 && path[appBundleLen] == '/')
+ return 0;
+
+ char *unprocessedPath = path;
+
+ if ( *unprocessedPath == '/' )
+ unprocessedPath++;
+
+ int nRet = 0;
+ while ( !nRet && unprocessedPath && *unprocessedPath )
+ {
+ unprocessedPath = strchr( unprocessedPath, '/' );
+ if ( unprocessedPath )
+ *unprocessedPath = '\0';
+
+ cfpath = CFStringCreateWithCString( nullptr, path, kCFStringEncodingUTF8 );
+ cfurl = CFURLCreateWithFileSystemPath( nullptr, cfpath, kCFURLPOSIXPathStyle, false );
+ CFRelease( cfpath );
+ cferror = nullptr;
+ cfbookmark = CFURLCreateBookmarkDataFromFile( nullptr, cfurl, &cferror );
+ CFRelease( cfurl );
+
+ if ( cfbookmark == nullptr )
+ {
+ if(cferror)
+ {
+ CFRelease( cferror );
+ }
+ }
+ else
+ {
+ Boolean isStale;
+ cfurl = CFURLCreateByResolvingBookmarkData( nullptr, cfbookmark, kCFBookmarkResolutionWithoutUIMask,
+ nullptr, nullptr, &isStale, &cferror );
+ CFRelease( cfbookmark );
+ if ( cfurl == nullptr )
+ {
+ CFRelease( cferror );
+ }
+ else
+ {
+ cfpath = CFURLCopyFileSystemPath( cfurl, kCFURLPOSIXPathStyle );
+ CFRelease( cfurl );
+ if ( cfpath != nullptr )
+ {
+ char tmpPath[ PATH_MAX ];
+ if ( CFStringGetCString( cfpath, tmpPath, PATH_MAX, kCFStringEncodingUTF8 ) )
+ {
+ int nLen = strlen( tmpPath ) + ( unprocessedPath ? strlen( unprocessedPath + 1 ) + 1 : 0 );
+ if ( nLen < buflen && nLen < PATH_MAX )
+ {
+ if ( unprocessedPath )
+ {
+ int nTmpPathLen = strlen( tmpPath );
+ strcat( tmpPath, "/" );
+ strcat( tmpPath, unprocessedPath + 1 );
+ strcpy( path, tmpPath);
+ unprocessedPath = path + nTmpPathLen;
+ }
+ else if ( !unprocessedPath )
+ {
+ strcpy( path, tmpPath );
+ }
+ }
+ else
+ {
+ errno = ENAMETOOLONG;
+ nRet = -1;
+ }
+ }
+ CFRelease( cfpath );
+ }
+ }
+ }
+
+ if ( unprocessedPath )
+ *unprocessedPath++ = '/';
+ }
+
+ return nRet;
+#endif
+}
+
+#endif /* defined MACOSX */
+
+#endif /* NO_PTHREAD_RTL */
+
+//might be useful on other platforms, but doesn't compiler under MACOSX anyway
+#if defined(__GNUC__) && defined(LINUX)
+//force the __data_start symbol to exist in any executables that link against
+//libuno_sal so that dlopening of the libgcj provided libjvm.so on some
+//platforms where it needs that symbol will succeed. e.g. Debian mips/lenny
+//with gcc 4.3. With this in place the smoketest succeeds with libgcj provided
+//java. Quite possibly also required/helpful for s390x/s390 and maybe some
+//others. Without it the dlopen of libjvm.so will fail with __data_start
+//not found
+extern int __data_start[] __attribute__((weak));
+extern int data_start[] __attribute__((weak));
+extern int _end[] __attribute__((weak));
+static void *dummy[] __attribute__((used)) = {__data_start, data_start, _end};
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/system.hxx b/sal/osl/unx/system.hxx
new file mode 100644
index 000000000..8b1f1dccc
--- /dev/null
+++ b/sal/osl/unx/system.hxx
@@ -0,0 +1,406 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_SYSTEM_HXX
+#define INCLUDED_SAL_OSL_UNX_SYSTEM_HXX
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include <errno.h>
+#include <stdarg.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <signal.h>
+#include <utime.h>
+
+#include <pwd.h>
+
+#include <netdb.h>
+
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <sys/types.h>
+
+/* Make sockets of type AF_UNIX use underlying FS rights */
+#if defined(__sun) && !defined(_XOPEN_SOURCE)
+# define _XOPEN_SOURCE 500
+# include <sys/socket.h>
+# undef _XOPEN_SOURCE
+#else
+# include <sys/socket.h>
+#endif
+
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#ifdef SYSV
+# include <sys/utsname.h>
+#endif
+
+#ifdef LINUX
+# ifndef __USE_GNU
+# define __USE_GNU
+# endif
+
+# include <shadow.h>
+# include <pthread.h>
+# include <sys/file.h>
+# include <sys/ioctl.h>
+# include <sys/uio.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# include <dlfcn.h>
+# include <endian.h>
+# include <sys/time.h>
+# define IORESOURCE_TRANSFER_BSD
+# define IOCHANNEL_TRANSFER_BSD_RENO
+# define pthread_testcancel()
+# define NO_PTHREAD_PRIORITY
+# define PTHREAD_SIGACTION pthread_sigaction
+
+# ifndef ETIME
+# define ETIME ETIMEDOUT
+# endif
+
+#endif
+
+#ifdef HAIKU
+# include <shadow.h>
+# include <pthread.h>
+# include <sys/file.h>
+# include <sys/ioctl.h>
+# include <sys/uio.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# include <dlfcn.h>
+# include <endian.h>
+# include <sys/time.h>
+# define IORESOURCE_TRANSFER_BSD
+# define IOCHANNEL_TRANSFER_BSD_RENO
+# define pthread_testcancel()
+# define NO_PTHREAD_PRIORITY
+# define NO_PTHREAD_RTL
+# define PTHREAD_SIGACTION pthread_sigaction
+
+# ifndef ETIME
+# define ETIME ETIMEDOUT
+# endif
+# define SIGIOT SIGABRT
+# define SOCK_RDM 0
+// hack: Haiku defines SOL_SOCKET as -1, but this makes GCC complain about
+// narrowing conversion
+# undef SOL_SOCKET
+# define SOL_SOCKET (sal_uInt32) -1
+
+#endif
+
+#if defined(ANDROID)
+# include <pthread.h>
+# include <sys/file.h>
+# include <sys/ioctl.h>
+# include <sys/uio.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# include <dlfcn.h>
+# include <endian.h>
+# include <sys/time.h>
+# define IORESOURCE_TRANSFER_BSD
+# define IOCHANNEL_TRANSFER_BSD_RENO
+# define pthread_testcancel()
+# define NO_PTHREAD_PRIORITY
+#endif
+
+#ifdef NETBSD
+# define NO_PTHREAD_RTL
+#endif
+
+#ifdef FREEBSD
+# ifndef ETIME
+# define ETIME ETIMEDOUT
+# endif
+# include <pthread.h>
+# include <sys/sem.h>
+# include <dlfcn.h>
+# include <sys/filio.h>
+# include <sys/ioctl.h>
+# include <sys/param.h>
+# include <sys/time.h>
+# include <sys/uio.h>
+# include <sys/exec.h>
+# include <vm/vm.h>
+# include <vm/vm_param.h>
+# include <vm/pmap.h>
+# include <vm/swap_pager.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# define IORESOURCE_TRANSFER_BSD
+# include <machine/endian.h>
+# define NO_PTHREAD_RTL
+#endif
+
+#ifdef OPENBSD
+# define ETIME ETIMEDOUT
+# include <pthread.h>
+# include <sys/sem.h>
+# include <dlfcn.h>
+# include <sys/filio.h>
+# include <sys/ioctl.h>
+# include <sys/param.h>
+# include <sys/time.h>
+# include <sys/uio.h>
+# include <sys/exec.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# define IORESOURCE_TRANSFER_BSD
+# include <machine/endian.h>
+# define PTR_SIZE_T(s) ((size_t *)&(s))
+# define IORESOURCE_TRANSFER_BSD
+# define IOCHANNEL_TRANSFER_BSD_RENO
+# define pthread_testcancel()
+# define NO_PTHREAD_PRIORITY
+# define NO_PTHREAD_RTL
+# define PTHREAD_SIGACTION pthread_sigaction
+#endif
+
+#if defined(DRAGONFLY) || defined(NETBSD)
+# define ETIME ETIMEDOUT
+# include <pthread.h>
+# include <sys/sem.h>
+# include <dlfcn.h>
+# include <sys/filio.h>
+# include <sys/ioctl.h>
+# include <sys/param.h>
+# include <sys/time.h>
+# include <sys/uio.h>
+# include <sys/exec.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# include <machine/endian.h>
+# define IORESOURCE_TRANSFER_BSD
+# define IOCHANNEL_TRANSFER_BSD_RENO
+#endif
+
+#ifdef AIX
+# define AF_IPX -1
+# include <strings.h>
+# include <pthread.h>
+# include <dlfcn.h>
+# include <sys/time.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# include <sys/machine.h>
+# define SLEEP_TIMESPEC(timespec) nsleep(&timespec, 0)
+# define LIBPATH "LIBPATH"
+#endif
+
+#ifdef __sun
+# include <shadow.h>
+# include <sys/un.h>
+# include <stropts.h>
+# include <pthread.h>
+# include <netinet/tcp.h>
+# include <sys/filio.h>
+# include <dlfcn.h>
+# include <sys/isa_defs.h>
+# define IORESOURCE_TRANSFER_SYSV
+# define IOCHANNEL_TRANSFER_BSD
+# define LIBPATH "LD_LIBRARY_PATH"
+#endif
+
+#ifdef MACOSX
+#define TimeValue CFTimeValue // Do not conflict with TimeValue in sal/inc/osl/time.h
+#include <Carbon/Carbon.h>
+#undef TimeValue
+# ifndef ETIME
+# define ETIME ETIMEDOUT
+# endif
+# include <dlfcn.h>
+# include <pthread.h>
+# include <sys/file.h>
+# include <sys/ioctl.h>
+# include <sys/uio.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# include <machine/endian.h>
+# include <sys/time.h>
+# include <mach-o/dyld.h>
+# define IOCHANNEL_TRANSFER_BSD_RENO
+# define NO_PTHREAD_RTL
+/* for NSGetArgc/Argv/Environ */
+# include <crt_externs.h>
+int macxp_resolveAlias(char *path, int buflen);
+#endif
+
+#ifdef IOS
+# ifndef ETIME
+# define ETIME ETIMEDOUT
+# endif
+# include <dlfcn.h>
+# include <pthread.h>
+# include <sys/file.h>
+# include <sys/ioctl.h>
+# include <sys/uio.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# include <machine/endian.h>
+# include <sys/time.h>
+# define IOCHANNEL_TRANSFER_BSD_RENO
+# define NO_PTHREAD_RTL
+#endif
+
+#ifdef EMSCRIPTEN
+# ifndef ETIME
+# define ETIME ETIMEDOUT
+# endif
+# include <pthread.h>
+# include <sys/file.h>
+# include <sys/ioctl.h>
+# include <sys/uio.h>
+# include <sys/un.h>
+# include <netinet/tcp.h>
+# include <dlfcn.h>
+# include <endian.h>
+# include <sys/time.h>
+# define IORESOURCE_TRANSFER_BSD
+# define IOCHANNEL_TRANSFER_BSD_RENO
+# define pthread_testcancel()
+# define NO_PTHREAD_PRIORITY
+# define INIT_GROUPS(name, gid) false
+#endif
+
+#if !defined(_WIN32) && \
+ !defined(LINUX) && !defined(NETBSD) && !defined(FREEBSD) && \
+ !defined(AIX) && \
+ !defined(__sun) && !defined(MACOSX) && \
+ !defined(OPENBSD) && !defined(DRAGONFLY) && \
+ !defined(IOS) && !defined(ANDROID) && \
+ !defined(HAIKU) && !defined(EMSCRIPTEN)
+# error "Target platform not specified!"
+#endif
+
+#ifndef PTR_FD_SET
+# define PTR_FD_SET(s) (&(s))
+#endif
+
+#ifndef NORMALIZE_TIMESPEC
+# define NORMALIZE_TIMESPEC(timespec) \
+ timespec . tv_sec += timespec . tv_nsec / 1000000000; \
+ timespec . tv_nsec %= 1000000000;
+#endif
+
+#ifndef SET_TIMESPEC
+# define SET_TIMESPEC(timespec, sec, nsec) \
+ timespec . tv_sec = (sec); \
+ timespec . tv_nsec = (nsec); \
+ NORMALIZE_TIMESPEC(timespec);
+#endif
+
+#ifndef SLEEP_TIMESPEC
+# define SLEEP_TIMESPEC(timespec) nanosleep(&timespec, nullptr)
+#endif
+
+#ifndef INIT_GROUPS
+# define INIT_GROUPS(name, gid) ((setgid((gid)) == 0) && (initgroups((name), (gid)) == 0))
+#endif
+
+#ifndef PTHREAD_NONE
+# define PTHREAD_NONE _pthread_none_
+# ifndef PTHREAD_NONE_INIT
+# define PTHREAD_NONE_INIT ((pthread_t)-1)
+# endif
+#endif
+
+#ifndef PTHREAD_ATTR_DEFAULT
+# define PTHREAD_ATTR_DEFAULT nullptr
+#endif
+#ifndef PTHREAD_MUTEXATTR_DEFAULT
+# define PTHREAD_MUTEXATTR_DEFAULT nullptr
+#endif
+#ifndef PTHREAD_CONDATTR_DEFAULT
+# define PTHREAD_CONDATTR_DEFAULT nullptr
+#endif
+
+#ifndef PTHREAD_SIGACTION
+# define PTHREAD_SIGACTION sigaction
+#endif
+
+#ifndef STAT_PARENT
+# define STAT_PARENT lstat
+#endif
+
+/* socket options which might not be defined on all unx flavors */
+#ifndef SO_ACCEPTCONN
+# define SO_ACCEPTCONN 0
+#endif
+#ifndef SO_SNDLOWAT
+# define SO_SNDLOWAT 0
+#endif
+#ifndef SO_RCVLOWAT
+# define SO_RCVLOWAT 0
+#endif
+#ifndef SO_SNDTIMEO
+# define SO_SNDTIMEO 0
+#endif
+#ifndef SO_RCVTIMEO
+# define SO_RCVTIMEO 0
+#endif
+#ifndef SO_USELOOPBACK
+# define SO_USELOOPBACK 0
+#endif
+#ifndef MSG_MAXIOVLEN
+# define MSG_MAXIOVLEN 0
+#endif
+
+/* BEGIN HACK */
+/* dummy define and declarations for IPX should be replaced by */
+/* original ipx headers when these are available for this platform */
+
+#ifndef SA_FAMILY_DECL
+# define SA_FAMILY_DECL short sa_family
+#endif
+
+#define NSPROTO_IPX 1000
+#define NSPROTO_SPX 1256
+#define NSPROTO_SPXII 1257
+
+/* END HACK */
+
+#ifdef NO_PTHREAD_RTL
+#if !defined FREEBSD
+#if !defined NETBSD
+struct passwd *getpwent_r(struct passwd *pwd, char *buffer, int buflen);
+#endif
+extern struct spwd *getspnam_r(const char *name, struct spwd *result,
+ char *buffer, int buflen);
+
+#if !defined MACOSX
+struct tm *localtime_r(const time_t *timep, struct tm *buffer);
+struct tm *gmtime_r(const time_t *timep, struct tm *buffer);
+#endif
+#endif /* !defined(FREEBSD) */
+#endif
+
+#endif // INCLUDED_SAL_OSL_UNX_SYSTEM_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/system.mm b/sal/osl/unx/system.mm
new file mode 100644
index 000000000..7495a3e73
--- /dev/null
+++ b/sal/osl/unx/system.mm
@@ -0,0 +1 @@
+#include "system.cxx"
diff --git a/sal/osl/unx/tempfile.cxx b/sal/osl/unx/tempfile.cxx
new file mode 100644
index 000000000..29a4d453f
--- /dev/null
+++ b/sal/osl/unx/tempfile.cxx
@@ -0,0 +1,340 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include "system.hxx"
+#include <osl/file.h>
+#include <osl/thread.h>
+#include <rtl/ustrbuf.h>
+#include <osl/diagnose.h>
+#include <sal/macros.h>
+
+#include "file_url.hxx"
+#include "file_impl.hxx"
+
+#include <cassert>
+
+oslFileError SAL_CALL osl_getTempDirURL( rtl_uString** pustrTempDir )
+{
+ oslFileError error;
+ /* described in environ(7) */
+ const char *pValue = getenv( "TMPDIR" );
+ rtl_uString *ustrTempPath = nullptr;
+
+ if ( !pValue )
+ pValue = getenv( "TEMP" );
+
+ if ( !pValue )
+ pValue = getenv( "TMP" );
+
+ if ( !pValue )
+ pValue = "/tmp";
+
+ auto nLen = strlen(pValue);
+ while (nLen > 1 && pValue[nLen - 1] == '/') // Allow path consisting of single "/"
+ --nLen;
+ rtl_string2UString( &ustrTempPath, pValue, nLen, osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS );
+ assert(ustrTempPath);
+ error = osl_getFileURLFromSystemPath( ustrTempPath, pustrTempDir );
+ rtl_uString_release( ustrTempPath );
+
+ return error;
+}
+
+/******************************************************************
+ * Generates a random unique file name. We're using the scheme
+ * from the standard c-lib function mkstemp to generate a more
+ * or less random unique file name
+ *
+ * @param rand_name
+ * receives the random name
+ ******************************************************************/
+
+const char LETTERS[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
+const int COUNT_OF_LETTERS = SAL_N_ELEMENTS(LETTERS) - 1;
+
+#define RAND_NAME_LENGTH 6
+
+static void osl_gen_random_name_impl_(rtl_uString** rand_name)
+{
+ static uint64_t value;
+
+ char buffer[RAND_NAME_LENGTH];
+ struct timeval tv;
+ uint64_t v;
+ int i;
+
+ gettimeofday(&tv, nullptr);
+
+ value += (static_cast<uint64_t>(tv.tv_usec) << 16) ^ tv.tv_sec ^ getpid();
+
+ v = value;
+
+ for (i = 0; i < RAND_NAME_LENGTH; i++)
+ {
+ buffer[i] = LETTERS[v % COUNT_OF_LETTERS];
+ v /= COUNT_OF_LETTERS;
+ }
+
+ rtl_string2UString(
+ rand_name,
+ buffer,
+ RAND_NAME_LENGTH,
+ RTL_TEXTENCODING_ASCII_US,
+ OSTRING_TO_OUSTRING_CVTFLAGS);
+
+ assert(*rand_name);
+}
+
+/*****************************************************************
+ * Helper function
+ * Either use the directory provided or the result of
+ * osl_getTempDirUrl and return it as system path and file url
+ ****************************************************************/
+
+static oslFileError osl_setup_base_directory_impl_(
+ rtl_uString* pustrDirectoryURL,
+ rtl_uString** ppustr_base_dir)
+{
+ rtl_uString* dir_url = nullptr;
+ rtl_uString* dir = nullptr;
+ oslFileError error = osl_File_E_None;
+
+ if (pustrDirectoryURL)
+ rtl_uString_assign(&dir_url, pustrDirectoryURL);
+ else
+ error = osl_getTempDirURL(&dir_url);
+
+ if (error == osl_File_E_None)
+ {
+ error = getSystemPathFromFileURL_Ex(dir_url, &dir);
+ rtl_uString_release(dir_url);
+ }
+
+ if (error == osl_File_E_None)
+ {
+ rtl_uString_assign(ppustr_base_dir, dir);
+ rtl_uString_release(dir);
+ }
+
+ return error;
+}
+
+/*****************************************************************
+ * osl_setup_createTempFile_impl
+ * validate input parameter, setup variables
+ ****************************************************************/
+
+ static oslFileError osl_setup_createTempFile_impl_(
+ rtl_uString* pustrDirectoryURL,
+ oslFileHandle* pHandle,
+ rtl_uString** ppustrTempFileURL,
+ rtl_uString** ppustr_base_dir,
+ bool* b_delete_on_close)
+ {
+ oslFileError osl_error;
+
+ OSL_PRECOND(((nullptr != pHandle) || (nullptr != ppustrTempFileURL)), "Invalid parameter!");
+
+ if ((pHandle == nullptr) && (ppustrTempFileURL == nullptr))
+ {
+ osl_error = osl_File_E_INVAL;
+ }
+ else
+ {
+ osl_error = osl_setup_base_directory_impl_(
+ pustrDirectoryURL, ppustr_base_dir);
+
+ *b_delete_on_close = (ppustrTempFileURL == nullptr);
+ }
+
+ return osl_error;
+ }
+
+/*****************************************************************
+ * Create a unique file in the specified directory and return
+ * its name
+ ****************************************************************/
+
+static oslFileError osl_create_temp_file_impl_(
+ const rtl_uString* pustr_base_directory,
+ oslFileHandle* file_handle,
+ rtl_uString** ppustr_temp_file_name)
+{
+ rtl_uString* rand_name = nullptr;
+ sal_uInt32 len_base_dir = 0;
+ rtl_uString* tmp_file_path = nullptr;
+ rtl_uString* tmp_file_url = nullptr;
+ sal_Int32 capacity = 0;
+ oslFileError osl_error = osl_File_E_None;
+ sal_Int32 offset_file_name;
+ const sal_Unicode* puchr;
+
+ OSL_PRECOND(pustr_base_directory, "Invalid Parameter");
+ OSL_PRECOND(file_handle, "Invalid Parameter");
+ OSL_PRECOND(ppustr_temp_file_name, "Invalid Parameter");
+
+ len_base_dir = rtl_uString_getLength(pustr_base_directory);
+
+ rtl_uString_new_WithLength(
+ &tmp_file_path,
+ (len_base_dir + 1 + RAND_NAME_LENGTH));
+ capacity = len_base_dir + 1 + RAND_NAME_LENGTH;
+
+ rtl_uStringbuffer_insert(
+ &tmp_file_path,
+ &capacity,
+ 0,
+ rtl_uString_getStr(const_cast<rtl_uString*>(pustr_base_directory)),
+ len_base_dir);
+
+ offset_file_name = len_base_dir;
+
+ puchr = rtl_uString_getStr(tmp_file_path);
+
+ /* ensure that the last character is a '/' */
+
+ if (puchr[len_base_dir - 1] != '/')
+ {
+ rtl_uStringbuffer_insert_ascii(
+ &tmp_file_path,
+ &capacity,
+ len_base_dir,
+ "/",
+ 1);
+
+ offset_file_name++;
+ }
+
+ while(true) /* try until success */
+ {
+ osl_gen_random_name_impl_(&rand_name);
+
+ rtl_uStringbuffer_insert(
+ &tmp_file_path,
+ &capacity,
+ offset_file_name,
+ rtl_uString_getStr(rand_name),
+ rtl_uString_getLength(rand_name));
+
+ osl_error = osl_getFileURLFromSystemPath(
+ tmp_file_path, &tmp_file_url);
+
+ if (osl_error == osl_File_E_None)
+ {
+ osl_error = openFile(
+ tmp_file_url,
+ file_handle,
+ osl_File_OpenFlag_Read |
+ osl_File_OpenFlag_Write |
+ osl_File_OpenFlag_Create,
+ S_IRUSR | S_IWUSR);
+ }
+
+ /* in case of error osl_File_E_EXIST we simply try again else we give up */
+
+ if (osl_error != osl_File_E_EXIST)
+ {
+ rtl_uString_release(rand_name);
+
+ if (tmp_file_url)
+ rtl_uString_release(tmp_file_url);
+
+ break;
+ }
+ } /* while(1) */
+
+ if (osl_error == osl_File_E_None)
+ rtl_uString_assign(ppustr_temp_file_name, tmp_file_path);
+
+ rtl_uString_release(tmp_file_path);
+
+ return osl_error;
+}
+
+oslFileError SAL_CALL osl_createTempFile(
+ rtl_uString* pustrDirectoryURL,
+ oslFileHandle* pHandle,
+ rtl_uString** ppustrTempFileURL)
+{
+ rtl_uString* base_directory = nullptr;
+ oslFileHandle temp_file_handle = nullptr;
+ bool b_delete_on_close;
+ oslFileError osl_error;
+
+ osl_error = osl_setup_createTempFile_impl_(
+ pustrDirectoryURL,
+ pHandle,
+ ppustrTempFileURL,
+ &base_directory,
+ &b_delete_on_close);
+
+ if (osl_error != osl_File_E_None)
+ return osl_error;
+
+ rtl_uString* temp_file_name = nullptr;
+ osl_error = osl_create_temp_file_impl_(
+ base_directory, &temp_file_handle, &temp_file_name);
+
+ rtl_uString* temp_file_url = nullptr;
+ if (osl_error == osl_File_E_None)
+ {
+ osl_error = osl_getFileURLFromSystemPath(temp_file_name, &temp_file_url);
+ rtl_uString_release(temp_file_name);
+ }
+
+ if (osl_error == osl_File_E_None)
+ {
+ if (b_delete_on_close)
+ {
+ osl_error = osl_removeFile(temp_file_url);
+
+ if (osl_error == osl_File_E_None)
+ {
+ *pHandle = temp_file_handle;
+ temp_file_handle = nullptr;
+ }
+ }
+ else
+ {
+ if (pHandle)
+ {
+ *pHandle = temp_file_handle;
+ temp_file_handle = nullptr;
+ }
+
+ rtl_uString_assign(ppustrTempFileURL, temp_file_url);
+ }
+
+ rtl_uString_release(temp_file_url);
+ }
+
+ if (temp_file_handle)
+ osl_closeFile(temp_file_handle);
+
+ rtl_uString_release(base_directory);
+
+ return osl_error;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/thread.cxx b/sal/osl/unx/thread.cxx
new file mode 100644
index 000000000..b122c5f31
--- /dev/null
+++ b/sal/osl/unx/thread.cxx
@@ -0,0 +1,1102 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstddef>
+#include <limits>
+#include <functional>
+#include <mutex>
+
+#include "system.hxx"
+#include "unixerrnostring.hxx"
+#include <string.h>
+#if defined(OPENBSD)
+#include <sched.h>
+#endif
+#ifdef __FreeBSD__
+#if __FreeBSD_version <= 1201517
+#include <pthread_np.h>
+#define pthread_setname_np pthread_set_name_np
+#endif
+#endif
+#include <config_options.h>
+#include <o3tl/safeint.hxx>
+#include <osl/thread.h>
+#include <osl/nlsupport.h>
+#include <rtl/textenc.h>
+#include <rtl/alloc.h>
+#include <sal/log.hxx>
+#include <sal/macros.h>
+#ifdef ANDROID
+#include <jni.h>
+#include <android/log.h>
+#include <osl/detail/android-bootstrap.h>
+#endif
+
+#if defined LINUX && ! defined __FreeBSD_kernel__
+#include <sys/syscall.h>
+#endif
+
+/****************************************************************************
+ * @@@ TODO @@@
+ *
+ * (1) 'osl_thread_priority_init_Impl()'
+ * - insane assumption that initializing caller is main thread
+ * - use _POSIX_THREAD_PRIORITY_SCHEDULING, not NO_PTHREAD_PRIORITY (?)
+ * - POSIX doesn't require defined prio's for SCHED_OTHER (!)
+ * - use SCHED_RR instead of SCHED_OTHER for defined behaviour (?)
+ * (2) 'oslThreadIdentifier' and '{insert|remove|lookup}ThreadId()'
+ * - cannot reliably be applied to 'alien' threads;
+ * - memory leak for 'alien' thread 'HashEntry's;
+ * - use 'reinterpret_cast<unsigned long>(pthread_t)' as identifier
+ * instead (?)
+ * - if yes, change 'oslThreadIdentifier' to 'intptr_t' or similar
+ * (3) 'oslSigAlarmHandler()' (#71232#)
+ * - [Under Solaris we get SIGALRM in e.g. pthread_join which terminates
+ * the process. So we initialize our signal handling module and do
+ * register a SIGALRM Handler which catches and ignores it]
+ * - should this still happen, 'signal.c' needs to be fixed instead.
+ *
+ ****************************************************************************/
+
+#define THREADIMPL_FLAGS_TERMINATE 0x00001
+#define THREADIMPL_FLAGS_STARTUP 0x00002
+#define THREADIMPL_FLAGS_SUSPENDED 0x00004
+#define THREADIMPL_FLAGS_ACTIVE 0x00008
+#define THREADIMPL_FLAGS_ATTACHED 0x00010
+#define THREADIMPL_FLAGS_DESTROYED 0x00020
+
+namespace {
+
+typedef struct osl_thread_impl_st
+{
+ pthread_t m_hThread;
+ oslThreadIdentifier m_Ident; /* @@@ see TODO @@@ */
+ short m_Flags;
+ oslWorkerFunction m_WorkerFunction;
+ void* m_pData;
+ pthread_mutex_t m_Lock;
+ pthread_cond_t m_Cond;
+} Thread_Impl;
+
+#if !defined NO_PTHREAD_PRIORITY
+struct osl_thread_priority_st
+{
+ int m_Highest;
+ int m_Above_Normal;
+ int m_Normal;
+ int m_Below_Normal;
+ int m_Lowest;
+};
+#endif
+
+}
+
+#if !defined NO_PTHREAD_PRIORITY
+#define OSL_THREAD_PRIORITY_INITIALIZER { 127, 96, 64, 32, 0 }
+#endif
+
+static void osl_thread_priority_init_Impl();
+
+namespace {
+
+struct osl_thread_textencoding_st
+{
+ pthread_key_t m_key; /* key to store thread local text encoding */
+ rtl_TextEncoding m_default; /* the default text encoding */
+};
+
+}
+
+#define OSL_THREAD_TEXTENCODING_INITIALIZER { 0, RTL_TEXTENCODING_DONTKNOW }
+static void osl_thread_textencoding_init_Impl();
+
+namespace {
+
+struct osl_thread_global_st
+{
+ pthread_once_t m_once;
+#if !defined NO_PTHREAD_PRIORITY
+ struct osl_thread_priority_st m_priority;
+#endif
+ struct osl_thread_textencoding_st m_textencoding;
+};
+
+}
+
+static struct osl_thread_global_st g_thread =
+{
+ PTHREAD_ONCE_INIT,
+#if !defined NO_PTHREAD_PRIORITY
+ OSL_THREAD_PRIORITY_INITIALIZER,
+#endif
+ OSL_THREAD_TEXTENCODING_INITIALIZER
+};
+
+static void osl_thread_init_Impl();
+
+static Thread_Impl* osl_thread_construct_Impl();
+static void osl_thread_destruct_Impl (Thread_Impl ** ppImpl);
+
+static void* osl_thread_start_Impl (void * pData);
+static void osl_thread_cleanup_Impl (Thread_Impl * pImpl);
+
+static oslThread osl_thread_create_Impl (
+ oslWorkerFunction pWorker, void * pThreadData, short nFlags);
+
+/* @@@ see TODO @@@ */
+static oslThreadIdentifier insertThreadId (pthread_t hThread);
+static oslThreadIdentifier lookupThreadId (pthread_t hThread);
+static void removeThreadId (pthread_t hThread);
+
+static void osl_thread_init_Impl()
+{
+ osl_thread_priority_init_Impl();
+ osl_thread_textencoding_init_Impl();
+}
+
+Thread_Impl* osl_thread_construct_Impl()
+{
+ Thread_Impl* pImpl = new Thread_Impl;
+ memset (pImpl, 0, sizeof(Thread_Impl));
+
+ pthread_mutex_init (&(pImpl->m_Lock), PTHREAD_MUTEXATTR_DEFAULT);
+ pthread_cond_init (&(pImpl->m_Cond), PTHREAD_CONDATTR_DEFAULT);
+ return pImpl;
+}
+
+static void osl_thread_destruct_Impl (Thread_Impl ** ppImpl)
+{
+ assert(ppImpl);
+ if (*ppImpl)
+ {
+ pthread_cond_destroy (&((*ppImpl)->m_Cond));
+ pthread_mutex_destroy (&((*ppImpl)->m_Lock));
+
+ delete *ppImpl;
+ (*ppImpl) = nullptr;
+ }
+}
+
+static void osl_thread_cleanup_Impl (Thread_Impl * pImpl)
+{
+ pthread_t thread;
+ bool attached;
+ bool destroyed;
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+ thread = pImpl->m_hThread;
+ attached = (pImpl->m_Flags & THREADIMPL_FLAGS_ATTACHED) != 0;
+ destroyed = (pImpl->m_Flags & THREADIMPL_FLAGS_DESTROYED) != 0;
+ pImpl->m_Flags &= ~(THREADIMPL_FLAGS_ACTIVE | THREADIMPL_FLAGS_ATTACHED);
+
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+
+ /* release oslThreadIdentifier @@@ see TODO @@@ */
+ removeThreadId (thread);
+
+ if (attached)
+ {
+ pthread_detach (thread);
+ }
+
+ if (destroyed)
+ {
+ osl_thread_destruct_Impl (&pImpl);
+ }
+}
+
+static void* osl_thread_start_Impl (void* pData)
+{
+ bool terminate;
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(pData);
+
+ assert(pImpl);
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+ /* request oslThreadIdentifier @@@ see TODO @@@ */
+ pImpl->m_Ident = insertThreadId (pImpl->m_hThread);
+
+ /* signal change from STARTUP to ACTIVE state */
+ pImpl->m_Flags &= ~THREADIMPL_FLAGS_STARTUP;
+ pImpl->m_Flags |= THREADIMPL_FLAGS_ACTIVE;
+ pthread_cond_signal (&(pImpl->m_Cond));
+
+ /* Check if thread is started in SUSPENDED state */
+ while (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED)
+ {
+ /* wait until SUSPENDED flag is cleared */
+ pthread_cond_wait (&(pImpl->m_Cond), &(pImpl->m_Lock));
+ }
+
+ /* check for SUSPENDED to TERMINATE state change */
+ terminate = ((pImpl->m_Flags & THREADIMPL_FLAGS_TERMINATE) > 0);
+
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+
+ if (!terminate)
+ {
+#ifdef ANDROID
+ JNIEnv* env = 0;
+ int res = (*lo_get_javavm()).AttachCurrentThread(&env, NULL);
+ __android_log_print(ANDROID_LOG_INFO, "LibreOffice", "New sal thread started and attached res=%d", res);
+#endif
+ /* call worker function */
+ pImpl->m_WorkerFunction(pImpl->m_pData);
+
+#ifdef ANDROID
+ res = (*lo_get_javavm()).DetachCurrentThread();
+ __android_log_print(ANDROID_LOG_INFO, "LibreOffice", "Detached finished sal thread res=%d", res);
+#endif
+ }
+
+ osl_thread_cleanup_Impl (pImpl);
+ return nullptr;
+}
+
+static oslThread osl_thread_create_Impl (
+ oslWorkerFunction pWorker,
+ void* pThreadData,
+ short nFlags)
+{
+ Thread_Impl* pImpl;
+#if defined OPENBSD || defined MACOSX || (defined LINUX && !ENABLE_RUNTIME_OPTIMIZATIONS)
+ pthread_attr_t attr;
+ size_t stacksize;
+#endif
+ int nRet=0;
+
+ pImpl = osl_thread_construct_Impl();
+ if (!pImpl)
+ return nullptr; /* ENOMEM */
+
+ pImpl->m_WorkerFunction = pWorker;
+ pImpl->m_pData = pThreadData;
+ pImpl->m_Flags = nFlags | THREADIMPL_FLAGS_STARTUP;
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+#if defined OPENBSD || defined MACOSX || (defined LINUX && !ENABLE_RUNTIME_OPTIMIZATIONS)
+ if (pthread_attr_init(&attr) != 0)
+ return nullptr;
+
+#if defined OPENBSD
+ stacksize = 262144;
+#elif !ENABLE_RUNTIME_OPTIMIZATIONS
+ stacksize = 12 * 1024 * 1024; // 8MB is not enough for ASAN on x86-64
+#else
+ stacksize = 1 * 1024 * 1024; // macOS default for non-main threads (512kB) is not enough...
+#endif
+ if (pthread_attr_setstacksize(&attr, stacksize) != 0) {
+ pthread_attr_destroy(&attr);
+ return nullptr;
+ }
+#endif
+
+ if ((nRet = pthread_create (
+ &(pImpl->m_hThread),
+#if defined OPENBSD || defined MACOSX || (defined LINUX && !ENABLE_RUNTIME_OPTIMIZATIONS)
+ &attr,
+#else
+ PTHREAD_ATTR_DEFAULT,
+#endif
+ osl_thread_start_Impl,
+ static_cast<void*>(pImpl))) != 0)
+ {
+ SAL_WARN(
+ "sal.osl",
+ "pthread_create failed: " << UnixErrnoString(nRet));
+
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+ osl_thread_destruct_Impl (&pImpl);
+
+ return nullptr;
+ }
+
+#if defined OPENBSD || defined MACOSX || (defined LINUX && !ENABLE_RUNTIME_OPTIMIZATIONS)
+ pthread_attr_destroy(&attr);
+#endif
+
+ /* wait for change from STARTUP to ACTIVE state */
+ while (pImpl->m_Flags & THREADIMPL_FLAGS_STARTUP)
+ {
+ /* wait until STARTUP flag is cleared */
+ pthread_cond_wait (&(pImpl->m_Cond), &(pImpl->m_Lock));
+ }
+
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+
+ return static_cast<oslThread>(pImpl);
+}
+
+oslThread osl_createThread (
+ oslWorkerFunction pWorker,
+ void * pThreadData)
+{
+ return osl_thread_create_Impl (
+ pWorker,
+ pThreadData,
+ THREADIMPL_FLAGS_ATTACHED);
+}
+
+oslThread osl_createSuspendedThread (
+ oslWorkerFunction pWorker,
+ void * pThreadData)
+{
+ return osl_thread_create_Impl (
+ pWorker,
+ pThreadData,
+ THREADIMPL_FLAGS_ATTACHED |
+ THREADIMPL_FLAGS_SUSPENDED );
+}
+
+void SAL_CALL osl_destroyThread(oslThread Thread)
+{
+ if (Thread != nullptr) {
+ Thread_Impl * impl = static_cast<Thread_Impl *>(Thread);
+ bool active;
+ pthread_mutex_lock(&impl->m_Lock);
+ active = (impl->m_Flags & THREADIMPL_FLAGS_ACTIVE) != 0;
+ impl->m_Flags |= THREADIMPL_FLAGS_DESTROYED;
+ pthread_mutex_unlock(&impl->m_Lock);
+ if (!active) {
+ osl_thread_destruct_Impl(&impl);
+ }
+ }
+}
+
+void SAL_CALL osl_resumeThread(oslThread Thread)
+{
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+
+ if (!pImpl)
+ {
+ SAL_WARN("sal.osl", "invalid osl_resumeThread(nullptr) call");
+ return; /* EINVAL */
+ }
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+ if (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED)
+ {
+ /* clear SUSPENDED flag */
+ pImpl->m_Flags &= ~THREADIMPL_FLAGS_SUSPENDED;
+ pthread_cond_signal (&(pImpl->m_Cond));
+ }
+
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+}
+
+void SAL_CALL osl_suspendThread(oslThread Thread)
+{
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+
+ if (!pImpl)
+ {
+ SAL_WARN("sal.osl", "invalid osl_suspendThread(nullptr) call");
+ return; /* EINVAL */
+ }
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+ pImpl->m_Flags |= THREADIMPL_FLAGS_SUSPENDED;
+
+ if (pthread_equal (pthread_self(), pImpl->m_hThread))
+ {
+ /* self suspend */
+ while (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED)
+ {
+ /* wait until SUSPENDED flag is cleared */
+ pthread_cond_wait (&(pImpl->m_Cond), &(pImpl->m_Lock));
+ }
+ }
+
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+}
+
+sal_Bool SAL_CALL osl_isThreadRunning(const oslThread Thread)
+{
+ bool active;
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+
+ if (!pImpl)
+ return false;
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+ active = ((pImpl->m_Flags & THREADIMPL_FLAGS_ACTIVE) > 0);
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+
+ return active;
+}
+
+void SAL_CALL osl_joinWithThread(oslThread Thread)
+{
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+
+ if (!pImpl)
+ return;
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+ pthread_t const thread = pImpl->m_hThread;
+ bool const attached = ((pImpl->m_Flags & THREADIMPL_FLAGS_ATTACHED) > 0);
+
+ /* check this only if *this* thread is still attached - if it's not,
+ then it could have terminated and another newly created thread could
+ have recycled the same id as m_hThread! */
+ if (attached && pthread_equal(pthread_self(), pImpl->m_hThread))
+ {
+ assert(false); /* Win32 implementation would deadlock here! */
+ /* self join */
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+ return; /* EDEADLK */
+ }
+
+ pImpl->m_Flags &= ~THREADIMPL_FLAGS_ATTACHED;
+
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+
+ if (attached)
+ {
+ pthread_join (thread, nullptr);
+ }
+}
+
+void SAL_CALL osl_terminateThread(oslThread Thread)
+{
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+
+ if (!pImpl)
+ {
+ SAL_WARN("sal.osl", "invalid osl_terminateThread(nullptr) call");
+ return; /* EINVAL */
+ }
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+ if (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED)
+ {
+ /* clear SUSPENDED flag */
+ pImpl->m_Flags &= ~THREADIMPL_FLAGS_SUSPENDED;
+ pthread_cond_signal (&(pImpl->m_Cond));
+ }
+
+ pImpl->m_Flags |= THREADIMPL_FLAGS_TERMINATE;
+
+ pthread_mutex_unlock (&(pImpl->m_Lock));
+}
+
+sal_Bool SAL_CALL osl_scheduleThread(oslThread Thread)
+{
+ bool terminate;
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+
+ if (!pImpl)
+ {
+ SAL_WARN("sal.osl", "invalid osl_scheduleThread(nullptr) call");
+ return false; /* EINVAL */
+ }
+
+ if (!(pthread_equal (pthread_self(), pImpl->m_hThread)))
+ {
+ SAL_WARN("sal.osl", "invalid osl_scheduleThread(non-self) call");
+ return false; /* EINVAL */
+ }
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+ while (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED)
+ {
+ /* wait until SUSPENDED flag is cleared */
+ pthread_cond_wait (&(pImpl->m_Cond), &(pImpl->m_Lock));
+ }
+
+ terminate = ((pImpl->m_Flags & THREADIMPL_FLAGS_TERMINATE) > 0);
+
+ pthread_mutex_unlock(&(pImpl->m_Lock));
+
+ return !terminate;
+}
+
+void SAL_CALL osl_waitThread(const TimeValue* pDelay)
+{
+ if (pDelay)
+ {
+ struct timespec delay;
+
+ SET_TIMESPEC(delay, pDelay->Seconds, pDelay->Nanosec);
+
+ SLEEP_TIMESPEC(delay);
+ }
+}
+
+/** Yields thread
+
+ @attention Note that POSIX scheduling @em really requires threads to call this
+ function, since a thread only reschedules to other thread, when
+ it blocks (sleep, blocking I/O) OR calls sched_yield().
+*/
+void SAL_CALL osl_yieldThread()
+{
+ sched_yield();
+}
+
+void SAL_CALL osl_setThreadName(char const * name)
+{
+ assert( name );
+#if defined LINUX && ! defined __FreeBSD_kernel__
+ const int LINUX_THREAD_NAME_MAXLEN = 15;
+ if ( strlen( name ) > LINUX_THREAD_NAME_MAXLEN )
+ SAL_INFO( "sal.osl", "osl_setThreadName truncated thread name to "
+ << LINUX_THREAD_NAME_MAXLEN << " chars from name '"
+ << name << "'" );
+ char shortname[ LINUX_THREAD_NAME_MAXLEN + 1 ];
+ shortname[ LINUX_THREAD_NAME_MAXLEN ] = '\0';
+ strncpy( shortname, name, LINUX_THREAD_NAME_MAXLEN );
+ int err = pthread_setname_np( pthread_self(), shortname );
+ if ( 0 != err )
+ SAL_WARN("sal.osl", "pthread_setname_np failed with errno " << err);
+#elif defined __FreeBSD__
+ pthread_setname_np( pthread_self(), name );
+#elif defined MACOSX || defined IOS
+ pthread_setname_np( name );
+#else
+ (void) name;
+#endif
+}
+
+/* osl_getThreadIdentifier @@@ see TODO @@@ */
+
+namespace {
+
+struct HashEntry
+{
+ pthread_t Handle;
+ oslThreadIdentifier Ident;
+ HashEntry * Next;
+};
+
+}
+
+static HashEntry* HashTable[31];
+const int HashSize = SAL_N_ELEMENTS(HashTable);
+
+static std::mutex HashLock;
+
+#if ! ((defined LINUX && !defined __FreeBSD_kernel__) || defined MACOSX || defined IOS)
+static oslThreadIdentifier LastIdent = 0;
+#endif
+
+namespace {
+
+std::size_t HASHID(pthread_t x)
+{ return std::hash<pthread_t>()(x) % HashSize; }
+
+}
+
+static oslThreadIdentifier lookupThreadId (pthread_t hThread)
+{
+ HashEntry *pEntry;
+
+ std::unique_lock aGuard(HashLock);
+
+ pEntry = HashTable[HASHID(hThread)];
+ while (pEntry != nullptr)
+ {
+ if (pthread_equal(pEntry->Handle, hThread))
+ {
+ return pEntry->Ident;
+ }
+ pEntry = pEntry->Next;
+ }
+
+ return 0;
+}
+
+static oslThreadIdentifier insertThreadId (pthread_t hThread)
+{
+ HashEntry *pEntry, *pInsert = nullptr;
+
+ std::unique_lock aGuard(HashLock);
+
+ pEntry = HashTable[HASHID(hThread)];
+
+ while (pEntry != nullptr)
+ {
+ if (pthread_equal(pEntry->Handle, hThread))
+ break;
+
+ pInsert = pEntry;
+ pEntry = pEntry->Next;
+ }
+
+ if (pEntry == nullptr)
+ {
+ pEntry = static_cast<HashEntry*>(calloc(sizeof(HashEntry), 1));
+
+ pEntry->Handle = hThread;
+
+#if defined LINUX && ! defined __FreeBSD_kernel__
+#if defined __GLIBC__ && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 30))
+ // gettid returns a pid_t, which POSIX defines to be a signed integer type; assume that all
+ // valid pid_t values on Linux are positive (zero is filtered out in the generic code
+ // below):
+ pid_t const tid = gettid();
+ assert(tid >= 0);
+#else
+ long const tid = syscall(SYS_gettid);
+ if (tid < 0 || o3tl::make_unsigned(tid) > std::numeric_limits<sal_uInt32>::max()) {
+ std::abort();
+ }
+#endif
+ pEntry->Ident = tid;
+#elif defined MACOSX || defined IOS
+ // currently the value of pthread_threadid_np is the same then
+ // syscall(SYS_thread_selfid), which returns an int as the TID.
+ // may change, as the syscall interface was deprecated.
+ uint64_t mac_tid;
+ pthread_threadid_np(nullptr, &mac_tid);
+ if (mac_tid > SAL_MAX_UINT32)
+ std::abort();
+ pEntry->Ident = mac_tid;
+#else
+ ++LastIdent;
+ if (0 == LastIdent)
+ LastIdent = 1;
+ pEntry->Ident = LastIdent;
+#endif
+ if (0 == pEntry->Ident)
+ std::abort();
+
+ if (pInsert)
+ pInsert->Next = pEntry;
+ else
+ HashTable[HASHID(hThread)] = pEntry;
+ }
+
+ return pEntry->Ident;
+}
+
+static void removeThreadId (pthread_t hThread)
+{
+ HashEntry *pEntry, *pRemove = nullptr;
+
+ std::unique_lock aGuard(HashLock);
+
+ pEntry = HashTable[HASHID(hThread)];
+ while (pEntry != nullptr)
+ {
+ if (pthread_equal(pEntry->Handle, hThread))
+ break;
+
+ pRemove = pEntry;
+ pEntry = pEntry->Next;
+ }
+
+ if (pEntry != nullptr)
+ {
+ if (pRemove)
+ pRemove->Next = pEntry->Next;
+ else
+ HashTable[HASHID(hThread)] = pEntry->Next;
+
+ free(pEntry);
+ }
+}
+
+oslThreadIdentifier SAL_CALL osl_getThreadIdentifier(oslThread Thread)
+{
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+ oslThreadIdentifier Ident;
+
+ if (pImpl)
+ Ident = pImpl->m_Ident;
+ else
+ {
+ /* current thread */
+ pthread_t current = pthread_self();
+
+ Ident = lookupThreadId (current);
+ if (Ident == 0)
+ /* @@@ see TODO: alien pthread_self() @@@ */
+ Ident = insertThreadId (current);
+ }
+
+ return Ident;
+}
+
+/*****************************************************************************
+ @@@ see TODO @@@
+ osl_thread_priority_init_Impl
+
+ set the base-priority of the main-thread to
+ oslThreadPriorityNormal (64) since 0 (lowest) is
+ the system default. This behaviour collides with
+ our enum-priority definition (highest..normal..lowest).
+ A normaluser will expect the main-thread of an app.
+ to have the "normal" priority.
+
+*****************************************************************************/
+static void osl_thread_priority_init_Impl()
+{
+#ifndef NO_PTHREAD_PRIORITY
+ struct sched_param param;
+ int policy=0;
+ int nRet=0;
+
+/* @@@ see TODO: calling thread may not be main thread @@@ */
+
+ if ((nRet = pthread_getschedparam(pthread_self(), &policy, &param)) != 0)
+ {
+ SAL_WARN(
+ "sal.osl",
+ "pthread_getschedparam failed: " << UnixErrnoString(nRet));
+ return;
+ }
+
+#if defined (__sun)
+ if ( policy >= _SCHED_NEXT)
+ {
+ /* mfe: pthread_getschedparam on Solaris has a possible Bug */
+ /* one gets 959917873 as the policy */
+ /* so set the policy to a default one */
+ policy=SCHED_OTHER;
+ }
+#endif /* __sun */
+
+ if ((nRet = sched_get_priority_min(policy) ) != -1)
+ {
+ SAL_INFO(
+ "sal.osl", "Min Prioriy for policy " << policy << " == " << nRet);
+ g_thread.m_priority.m_Lowest=nRet;
+ }
+ else
+ {
+ int e = errno;
+ SAL_WARN(
+ "sal.osl",
+ "sched_get_priority_min failed: " << UnixErrnoString(e));
+ }
+
+ if ((nRet = sched_get_priority_max(policy) ) != -1)
+ {
+ SAL_INFO(
+ "sal.osl", "Max Prioriy for policy " << policy << " == " << nRet);
+ g_thread.m_priority.m_Highest=nRet;
+ }
+ else
+ {
+ int e = errno;
+ SAL_WARN(
+ "sal.osl",
+ "sched_get_priority_max failed: " << UnixErrnoString(e));
+ }
+
+ g_thread.m_priority.m_Normal =
+ (g_thread.m_priority.m_Lowest + g_thread.m_priority.m_Highest) / 2;
+ g_thread.m_priority.m_Below_Normal =
+ (g_thread.m_priority.m_Lowest + g_thread.m_priority.m_Normal) / 2;
+ g_thread.m_priority.m_Above_Normal =
+ (g_thread.m_priority.m_Normal + g_thread.m_priority.m_Highest) / 2;
+
+/* @@@ set prio of calling (not main) thread (?) @@@ */
+
+ param.sched_priority= g_thread.m_priority.m_Normal;
+
+ if ((nRet = pthread_setschedparam(pthread_self(), policy, &param)) != 0)
+ {
+ SAL_WARN(
+ "sal.osl",
+ "pthread_setschedparam failed: " << UnixErrnoString(nRet));
+ SAL_INFO(
+ "sal.osl",
+ "Thread ID " << pthread_self() << ", Policy " << policy
+ << ", Priority " << param.sched_priority);
+ }
+
+#endif /* NO_PTHREAD_PRIORITY */
+}
+
+/**
+ Impl-Notes: contrary to solaris-docu, which claims
+ valid priority-levels from 0 .. INT_MAX, only the
+ range 0..127 is accepted. (0 lowest, 127 highest)
+*/
+void SAL_CALL osl_setThreadPriority (
+ oslThread Thread,
+ oslThreadPriority Priority)
+{
+#ifndef NO_PTHREAD_PRIORITY
+
+ struct sched_param Param;
+ int policy;
+ int nRet;
+
+#endif /* NO_PTHREAD_PRIORITY */
+
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+
+ if (!pImpl)
+ {
+ SAL_WARN("sal.osl", "invalid osl_setThreadPriority(nullptr, ...) call");
+ return; /* EINVAL */
+ }
+
+#ifdef NO_PTHREAD_PRIORITY
+ (void) Priority; /* unused */
+#else /* NO_PTHREAD_PRIORITY */
+
+ if (pthread_getschedparam(pImpl->m_hThread, &policy, &Param) != 0)
+ return; /* ESRCH */
+
+#if defined (__sun)
+ if ( policy >= _SCHED_NEXT)
+ {
+ /* mfe: pthread_getschedparam on Solaris has a possible Bug */
+ /* one gets 959917873 as the policy */
+ /* so set the policy to a default one */
+ policy=SCHED_OTHER;
+ }
+#endif /* __sun */
+
+ pthread_once (&(g_thread.m_once), osl_thread_init_Impl);
+
+ switch(Priority)
+ {
+ case osl_Thread_PriorityHighest:
+ Param.sched_priority= g_thread.m_priority.m_Highest;
+ break;
+
+ case osl_Thread_PriorityAboveNormal:
+ Param.sched_priority= g_thread.m_priority.m_Above_Normal;
+ break;
+
+ case osl_Thread_PriorityNormal:
+ Param.sched_priority= g_thread.m_priority.m_Normal;
+ break;
+
+ case osl_Thread_PriorityBelowNormal:
+ Param.sched_priority= g_thread.m_priority.m_Below_Normal;
+ break;
+
+ case osl_Thread_PriorityLowest:
+ Param.sched_priority= g_thread.m_priority.m_Lowest;
+ break;
+
+ case osl_Thread_PriorityUnknown:
+ SAL_WARN(
+ "sal.osl",
+ "invalid osl_setThreadPriority(..., osl_Thread_PriorityUnknown)"
+ " call");
+ return;
+
+ default:
+ SAL_WARN(
+ "sal.osl",
+ "invalid osl_setThreadPriority(..., " << Priority << ") call");
+ return;
+ }
+
+ if ((nRet = pthread_setschedparam(pImpl->m_hThread, policy, &Param)) != 0)
+ {
+ SAL_WARN(
+ "sal.osl",
+ "pthread_setschedparam failed: " << UnixErrnoString(nRet));
+ }
+
+#endif /* NO_PTHREAD_PRIORITY */
+}
+
+oslThreadPriority SAL_CALL osl_getThreadPriority(const oslThread Thread)
+{
+#ifndef NO_PTHREAD_PRIORITY
+
+ struct sched_param Param;
+ int Policy;
+
+#endif /* NO_PTHREAD_PRIORITY */
+
+ oslThreadPriority Priority = osl_Thread_PriorityNormal;
+ Thread_Impl* pImpl= static_cast<Thread_Impl*>(Thread);
+
+ if (!pImpl)
+ {
+ SAL_WARN("sal.osl", "invalid osl_getThreadPriority(nullptr) call");
+ return osl_Thread_PriorityUnknown; /* EINVAL */
+ }
+
+#ifndef NO_PTHREAD_PRIORITY
+
+ if (pthread_getschedparam(pImpl->m_hThread, &Policy, &Param) != 0)
+ return osl_Thread_PriorityUnknown; /* ESRCH */
+
+ pthread_once (&(g_thread.m_once), osl_thread_init_Impl);
+
+ /* map pthread priority to enum */
+ if (Param.sched_priority==g_thread.m_priority.m_Highest)
+ {
+ /* 127 - highest */
+ Priority= osl_Thread_PriorityHighest;
+ }
+ else if (Param.sched_priority > g_thread.m_priority.m_Normal)
+ {
+ /* 65..126 - above normal */
+ Priority= osl_Thread_PriorityAboveNormal;
+ }
+ else if (Param.sched_priority == g_thread.m_priority.m_Normal)
+ {
+ /* normal */
+ Priority= osl_Thread_PriorityNormal;
+ }
+ else if (Param.sched_priority > g_thread.m_priority.m_Lowest)
+ {
+ /* 63..1 -below normal */
+ Priority= osl_Thread_PriorityBelowNormal;
+ }
+ else if (Param.sched_priority == g_thread.m_priority.m_Lowest)
+ {
+ /* 0 - lowest */
+ Priority= osl_Thread_PriorityLowest;
+ }
+ else
+ {
+ /* unknown */
+ Priority= osl_Thread_PriorityUnknown;
+ }
+
+#endif /* NO_PTHREAD_PRIORITY */
+
+ return Priority;
+}
+
+namespace {
+
+struct wrapper_pthread_key
+{
+ pthread_key_t m_key;
+ oslThreadKeyCallbackFunction pfnCallback;
+};
+
+}
+
+oslThreadKey SAL_CALL osl_createThreadKey( oslThreadKeyCallbackFunction pCallback )
+{
+ wrapper_pthread_key *pKey = static_cast<wrapper_pthread_key*>(malloc(sizeof(wrapper_pthread_key)));
+
+ if (pKey)
+ {
+ pKey->pfnCallback = pCallback;
+
+ if (pthread_key_create(&(pKey->m_key), pKey->pfnCallback) != 0)
+ {
+ free(pKey);
+ pKey = nullptr;
+ }
+ }
+
+ return static_cast<oslThreadKey>(pKey);
+}
+
+void SAL_CALL osl_destroyThreadKey(oslThreadKey Key)
+{
+ wrapper_pthread_key *pKey = static_cast<wrapper_pthread_key*>(Key);
+ if (pKey)
+ {
+ pthread_key_delete(pKey->m_key);
+ free(pKey);
+ }
+}
+
+void* SAL_CALL osl_getThreadKeyData(oslThreadKey Key)
+{
+ wrapper_pthread_key *pKey = static_cast<wrapper_pthread_key*>(Key);
+ return pKey ? pthread_getspecific(pKey->m_key) : nullptr;
+}
+
+sal_Bool SAL_CALL osl_setThreadKeyData(oslThreadKey Key, void *pData)
+{
+ bool bRet;
+ void *pOldData = nullptr;
+ wrapper_pthread_key *pKey = static_cast<wrapper_pthread_key*>(Key);
+ if (!pKey)
+ return false;
+
+ if (pKey->pfnCallback)
+ pOldData = pthread_getspecific(pKey->m_key);
+
+ bRet = (pthread_setspecific(pKey->m_key, pData) == 0);
+
+ if (bRet && pKey->pfnCallback && pOldData)
+ pKey->pfnCallback(pOldData);
+
+ return bRet;
+}
+
+static void osl_thread_textencoding_init_Impl()
+{
+ rtl_TextEncoding defaultEncoding;
+
+ /* create thread specific data key */
+ pthread_key_create (&(g_thread.m_textencoding.m_key), nullptr);
+
+ /* determine default text encoding */
+ defaultEncoding = osl_getTextEncodingFromLocale(nullptr);
+ // Tools string functions call abort() on an unknown encoding so ASCII is a
+ // meaningful fallback:
+ if ( RTL_TEXTENCODING_DONTKNOW == defaultEncoding )
+ {
+ SAL_WARN("sal.osl", "RTL_TEXTENCODING_DONTKNOW -> _ASCII_US");
+ defaultEncoding = RTL_TEXTENCODING_ASCII_US;
+ }
+
+ g_thread.m_textencoding.m_default = defaultEncoding;
+}
+
+rtl_TextEncoding SAL_CALL osl_getThreadTextEncoding()
+{
+ rtl_TextEncoding threadEncoding;
+
+ pthread_once (&(g_thread.m_once), osl_thread_init_Impl);
+
+ /* check for thread specific encoding, use default if not set */
+ threadEncoding = static_cast<rtl_TextEncoding>(
+ reinterpret_cast<sal_uIntPtr>(pthread_getspecific(g_thread.m_textencoding.m_key)));
+ if (threadEncoding == 0)
+ threadEncoding = g_thread.m_textencoding.m_default;
+
+ return threadEncoding;
+}
+
+rtl_TextEncoding osl_setThreadTextEncoding(rtl_TextEncoding Encoding)
+{
+ rtl_TextEncoding oldThreadEncoding = osl_getThreadTextEncoding();
+
+ /* save encoding in thread local storage */
+ pthread_setspecific (
+ g_thread.m_textencoding.m_key,
+ reinterpret_cast<void*>(static_cast<sal_uIntPtr>(Encoding)));
+
+ return oldThreadEncoding;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/time.cxx b/sal/osl/unx/time.cxx
new file mode 100644
index 000000000..a77015614
--- /dev/null
+++ b/sal/osl/unx/time.cxx
@@ -0,0 +1,310 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "saltime.hxx"
+#include "system.hxx"
+
+#include <osl/time.h>
+#include <time.h>
+#include <unistd.h>
+
+#ifdef __MACH__
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+
+/* FIXME: detection should be done in configure script */
+#if defined(MACOSX) || defined(IOS) || defined(FREEBSD) || defined(NETBSD) || \
+ defined(LINUX) || defined(OPENBSD) || defined(DRAGONFLY)
+#define STRUCT_TM_HAS_GMTOFF 1
+
+#elif defined(__sun)
+#define HAS_ALTZONE 1
+#endif
+
+#ifdef __MACH__
+typedef mach_timespec_t osl_time_t;
+#else
+#if defined(_POSIX_TIMERS)
+#define USE_CLOCK_GETTIME
+typedef struct timespec osl_time_t;
+#else
+typedef struct timeval osl_time_t;
+#endif
+#endif
+static osl_time_t startTime;
+
+sal_Bool SAL_CALL osl_getSystemTime(TimeValue* tv)
+{
+#ifdef __MACH__
+ clock_serv_t cclock;
+ mach_timespec_t mts;
+
+ host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
+ clock_get_time(cclock, &mts);
+ mach_port_deallocate(mach_task_self(), cclock);
+
+ tv->Seconds = mts.tv_sec;
+ tv->Nanosec = mts.tv_nsec;
+#else
+ int res;
+ osl_time_t tp;
+#if defined(USE_CLOCK_GETTIME)
+ res = clock_gettime(CLOCK_REALTIME, &tp);
+#else
+ res = gettimeofday(&tp, NULL);
+#endif
+
+ if (res != 0)
+ {
+ return false;
+ }
+
+ tv->Seconds = tp.tv_sec;
+ #if defined(USE_CLOCK_GETTIME)
+ tv->Nanosec = tp.tv_nsec;
+ #else
+ tv->Nanosec = tp.tv_usec * 1000;
+ #endif
+#endif
+ return true;
+}
+
+sal_Bool SAL_CALL osl_getDateTimeFromTimeValue( const TimeValue* pTimeVal, oslDateTime* pDateTime )
+{
+ struct tm *pSystemTime;
+ struct tm tmBuf;
+ time_t atime;
+
+ atime = static_cast<time_t>(pTimeVal->Seconds);
+
+ /* Convert time from type time_t to struct tm */
+ pSystemTime = gmtime_r( &atime, &tmBuf );
+
+ /* Convert struct tm to struct oslDateTime */
+ if ( pSystemTime != nullptr )
+ {
+ pDateTime->NanoSeconds = pTimeVal->Nanosec;
+ pDateTime->Seconds = pSystemTime->tm_sec;
+ pDateTime->Minutes = pSystemTime->tm_min;
+ pDateTime->Hours = pSystemTime->tm_hour;
+ pDateTime->Day = pSystemTime->tm_mday;
+ pDateTime->DayOfWeek = pSystemTime->tm_wday;
+ pDateTime->Month = pSystemTime->tm_mon + 1;
+ pDateTime->Year = pSystemTime->tm_year + 1900;
+
+ return true;
+ }
+
+ return false;
+}
+
+sal_Bool SAL_CALL osl_getTimeValueFromDateTime( const oslDateTime* pDateTime, TimeValue* pTimeVal )
+{
+ struct tm aTime;
+ time_t nSeconds;
+
+ /* Convert struct oslDateTime to struct tm */
+ aTime.tm_sec = pDateTime->Seconds;
+ aTime.tm_min = pDateTime->Minutes;
+ aTime.tm_hour = pDateTime->Hours;
+ aTime.tm_mday = pDateTime->Day;
+
+ if ( pDateTime->Month > 0 )
+ aTime.tm_mon = pDateTime->Month - 1;
+ else
+ return false;
+
+ aTime.tm_year = pDateTime->Year - 1900;
+
+ aTime.tm_isdst = -1;
+ aTime.tm_wday = 0;
+ aTime.tm_yday = 0;
+
+#if defined(STRUCT_TM_HAS_GMTOFF)
+ aTime.tm_gmtoff = 0;
+#endif
+
+ /* Convert time to calendar value */
+ nSeconds = mktime( &aTime );
+
+ /*
+ * mktime expects the struct tm to be in local timezone, so we have to adjust
+ * the returned value to be timezone neutral.
+ */
+
+ if ( nSeconds != time_t(-1) )
+ {
+ time_t bias;
+
+ /* timezone corrections */
+ tzset();
+
+#if defined(STRUCT_TM_HAS_GMTOFF)
+ /* members of struct tm are corrected by mktime */
+ bias = 0 - aTime.tm_gmtoff;
+
+#elif defined(HAS_ALTZONE)
+ /* check if daylight saving time is in effect */
+ bias = aTime.tm_isdst > 0 ? altzone : timezone;
+#else
+ /* expect daylight saving time to be one hour */
+ bias = aTime.tm_isdst > 0 ? timezone - 3600 : timezone;
+#endif
+
+ pTimeVal->Seconds = nSeconds;
+ pTimeVal->Nanosec = pDateTime->NanoSeconds;
+
+ if ( nSeconds > bias )
+ pTimeVal->Seconds -= bias;
+
+ return true;
+ }
+
+ return false;
+}
+
+sal_Bool SAL_CALL osl_getLocalTimeFromSystemTime( const TimeValue* pSystemTimeVal, TimeValue* pLocalTimeVal )
+{
+ struct tm *pLocalTime;
+ struct tm tmBuf;
+ time_t bias;
+ time_t atime;
+
+ atime = static_cast<time_t>(pSystemTimeVal->Seconds);
+ pLocalTime = localtime_r( &atime, &tmBuf );
+
+#if defined(STRUCT_TM_HAS_GMTOFF)
+ /* members of struct tm are corrected by mktime */
+ bias = -pLocalTime->tm_gmtoff;
+
+#elif defined(HAS_ALTZONE)
+ /* check if daylight saving time is in effect */
+ bias = pLocalTime->tm_isdst > 0 ? altzone : timezone;
+#else
+ /* expect daylight saving time to be one hour */
+ bias = pLocalTime->tm_isdst > 0 ? timezone - 3600 : timezone;
+#endif
+
+ if ( static_cast<sal_Int64>(pSystemTimeVal->Seconds) > bias )
+ {
+ pLocalTimeVal->Seconds = pSystemTimeVal->Seconds - bias;
+ pLocalTimeVal->Nanosec = pSystemTimeVal->Nanosec;
+
+ return true;
+ }
+
+ return false;
+}
+
+sal_Bool SAL_CALL osl_getSystemTimeFromLocalTime( const TimeValue* pLocalTimeVal, TimeValue* pSystemTimeVal )
+{
+ struct tm *pLocalTime;
+ struct tm tmBuf;
+ time_t bias;
+ time_t atime;
+
+ atime = static_cast<time_t>(pLocalTimeVal->Seconds);
+
+ /* Convert atime, which is a local time, to its GMT equivalent. Then, get
+ * the timezone offset for the local time for the GMT equivalent time. Note
+ * that we cannot directly use local time to determine the timezone offset
+ * because GMT is the only reliable time that we can determine timezone
+ * offset from.
+ */
+
+ atime = mktime( gmtime_r( &atime, &tmBuf ) );
+ pLocalTime = localtime_r( &atime, &tmBuf );
+
+#if defined(STRUCT_TM_HAS_GMTOFF)
+ /* members of struct tm are corrected by mktime */
+ bias = 0 - pLocalTime->tm_gmtoff;
+
+#elif defined(HAS_ALTZONE)
+ /* check if daylight saving time is in effect */
+ bias = pLocalTime->tm_isdst > 0 ? altzone : timezone;
+#else
+ /* expect daylight saving time to be one hour */
+ bias = pLocalTime->tm_isdst > 0 ? timezone - 3600 : timezone;
+#endif
+
+ if ( static_cast<sal_Int64>(pLocalTimeVal->Seconds) + bias > 0 )
+ {
+ pSystemTimeVal->Seconds = pLocalTimeVal->Seconds + bias;
+ pSystemTimeVal->Nanosec = pLocalTimeVal->Nanosec;
+
+ return true;
+ }
+
+ return false;
+}
+
+void sal_initGlobalTimer()
+{
+#ifdef __MACH__
+ clock_serv_t cclock;
+
+ host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
+ clock_get_time(cclock, &startTime);
+ mach_port_deallocate(mach_task_self(), cclock);
+#else /* ! (MACOSX || IOS) */
+#if defined(USE_CLOCK_GETTIME)
+ clock_gettime(CLOCK_REALTIME, &startTime);
+#else /* Ndef USE_CLOCK_GETTIME */
+ gettimeofday( &startTime, NULL );
+#endif /* NDef USE_CLOCK_GETTIME */
+#endif /* ! (MACOSX || IOS) */
+}
+
+sal_uInt32 SAL_CALL osl_getGlobalTimer()
+{
+ sal_uInt32 nSeconds;
+
+#ifdef __MACH__
+ clock_serv_t cclock;
+ mach_timespec_t currentTime;
+
+ host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
+ clock_get_time(cclock, &currentTime);
+ mach_port_deallocate(mach_task_self(), cclock);
+
+ nSeconds = ( currentTime.tv_sec - startTime.tv_sec );
+ nSeconds = ( nSeconds * 1000 ) + static_cast<long>(( currentTime.tv_nsec - startTime.tv_nsec) / 1000000 );
+#else
+ osl_time_t currentTime;
+
+#if defined(USE_CLOCK_GETTIME)
+ clock_gettime(CLOCK_REALTIME, &currentTime);
+#else
+ gettimeofday( &currentTime, NULL );
+#endif
+
+ nSeconds = static_cast<sal_uInt32>( currentTime.tv_sec - startTime.tv_sec );
+#if defined(USE_CLOCK_GETTIME)
+ nSeconds = ( nSeconds * 1000 ) + static_cast<long>(( currentTime.tv_nsec - startTime.tv_nsec) / 1000000 );
+#else
+ nSeconds = ( nSeconds * 1000 ) + (long) (( currentTime.tv_usec - startTime.tv_usec) / 1000 );
+#endif
+#endif
+ return nSeconds;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/unixerrnostring.hxx b/sal/osl/unx/unixerrnostring.hxx
new file mode 100644
index 000000000..9e13b04e6
--- /dev/null
+++ b/sal/osl/unx/unixerrnostring.hxx
@@ -0,0 +1,27 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_UNIXERRNOSTRING_HXX
+#define INCLUDED_SAL_OSL_UNX_UNIXERRNOSTRING_HXX
+
+#include <string>
+
+// Return the symbolic name of an errno value, like "ENOENT".
+
+// Rationale why to use this and not strerror(): This is intended to be used in SAL_INFO() and
+// SAL_WARN(). Such messages are intended to be read by developers, not end-users. Developers are
+// (or should be) familiar with symbolic errno names in code anyway. strerror() is localized and the
+// localised error strings might be less familiar to a developer that happens to run a localised
+// environment.
+
+std::string UnixErrnoString(int nErrno);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/uunxapi.cxx b/sal/osl/unx/uunxapi.cxx
new file mode 100644
index 000000000..5311bc719
--- /dev/null
+++ b/sal/osl/unx/uunxapi.cxx
@@ -0,0 +1,905 @@
+/* -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <string_view>
+
+#include <config_features.h>
+
+#include "uunxapi.hxx"
+#include "system.hxx"
+#include "unixerrnostring.hxx"
+#include <limits.h>
+#include <rtl/ustring.hxx>
+#include <osl/thread.h>
+#include <sal/log.hxx>
+
+#ifdef ANDROID
+#include <osl/detail/android-bootstrap.h>
+#endif
+
+OString osl::OUStringToOString(std::u16string_view s)
+{
+ return rtl::OUStringToOString(s, osl_getThreadTextEncoding());
+}
+
+#if HAVE_FEATURE_MACOSX_SANDBOX
+
+#include <Foundation/Foundation.h>
+#include <Security/Security.h>
+#include <mach-o/dyld.h>
+
+static NSUserDefaults *userDefaults = NULL;
+static bool isSandboxed = false;
+
+static void do_once()
+{
+ SecCodeRef code;
+ OSStatus rc = SecCodeCopySelf(kSecCSDefaultFlags, &code);
+
+ SecStaticCodeRef staticCode;
+ if (rc == errSecSuccess)
+ rc = SecCodeCopyStaticCode(code, kSecCSDefaultFlags, &staticCode);
+
+ CFDictionaryRef signingInformation;
+ if (rc == errSecSuccess)
+ rc = SecCodeCopySigningInformation(staticCode, kSecCSRequirementInformation, &signingInformation);
+
+ CFDictionaryRef entitlements = NULL;
+ if (rc == errSecSuccess)
+ entitlements = (CFDictionaryRef) CFDictionaryGetValue(signingInformation, kSecCodeInfoEntitlementsDict);
+
+ if (entitlements != NULL)
+ if (CFDictionaryGetValue(entitlements, CFSTR("com.apple.security.app-sandbox")) != NULL)
+ isSandboxed = true;
+
+ if (isSandboxed)
+ userDefaults = [NSUserDefaults standardUserDefaults];
+}
+
+typedef struct {
+ NSURL *scopeURL;
+ NSAutoreleasePool *pool;
+} accessFilePathState;
+
+static accessFilePathState *
+prepare_to_access_file_path( const char *cpFilePath )
+{
+ static pthread_once_t once = PTHREAD_ONCE_INIT;
+ pthread_once(&once, &do_once);
+ NSURL *fileURL = nil;
+ NSData *data = nil;
+ BOOL stale;
+ accessFilePathState *state;
+
+ if (!isSandboxed)
+ return NULL;
+
+ // If malloc() fails we are screwed anyway
+ state = (accessFilePathState*) malloc(sizeof(accessFilePathState));
+
+ state->pool = [[NSAutoreleasePool alloc] init];
+ state->scopeURL = nil;
+
+ if (userDefaults != nil)
+ fileURL = [NSURL fileURLWithPath:[NSString stringWithUTF8String:cpFilePath]];
+
+ if (fileURL != nil)
+ data = [userDefaults dataForKey:[@"bookmarkFor:" stringByAppendingString:[fileURL absoluteString]]];
+
+ if (data != nil)
+ state->scopeURL = [NSURL URLByResolvingBookmarkData:data
+ options:NSURLBookmarkResolutionWithSecurityScope
+ relativeToURL:nil
+ bookmarkDataIsStale:&stale
+ error:nil];
+ if (state->scopeURL != nil)
+ [state->scopeURL startAccessingSecurityScopedResource];
+
+ return state;
+}
+
+static void
+done_accessing_file_path( const char * /*cpFilePath*/, accessFilePathState *state )
+{
+ if (!isSandboxed)
+ return;
+
+ int saved_errno = errno;
+
+ if (state->scopeURL != nil)
+ [state->scopeURL stopAccessingSecurityScopedResource];
+ [state->pool release];
+ free(state);
+
+ errno = saved_errno;
+}
+
+#else
+
+typedef void accessFilePathState;
+
+#define prepare_to_access_file_path( cpFilePath ) nullptr
+
+#define done_accessing_file_path( cpFilePath, state ) ((void) cpFilePath, (void) state)
+
+#endif
+
+#ifdef MACOSX
+/*
+ * Helper function for resolving Mac native alias files (not the same as unix alias files)
+ * and to return the resolved alias as OString
+ */
+static OString macxp_resolveAliasAndConvert(OString const & p)
+{
+ char path[PATH_MAX];
+ if (p.getLength() < PATH_MAX)
+ {
+ strcpy(path, p.getStr());
+ macxp_resolveAlias(path, PATH_MAX);
+ return OString(path);
+ }
+ return p;
+}
+#endif /* MACOSX */
+
+int osl::access(const OString& pstrPath, int mode)
+{
+ OString fn = pstrPath;
+#ifdef ANDROID
+ if (fn == "/assets" || fn.startsWith("/assets/"))
+ {
+ struct stat stat;
+ if (lo_apk_lstat(fn.getStr(), &stat) == -1)
+ return -1;
+ if (mode & W_OK)
+ {
+ errno = EACCES;
+ return -1;
+ }
+ return 0;
+ }
+#endif
+
+#ifdef MACOSX
+ fn = macxp_resolveAliasAndConvert(fn);
+#endif
+
+ accessFilePathState *state = prepare_to_access_file_path(fn.getStr());
+
+ int result = ::access(fn.getStr(), mode);
+ int saved_errno = errno;
+ if (result == -1)
+ SAL_INFO("sal.file", "access(" << fn << ",0" << std::oct << mode << std::dec << "): " << UnixErrnoString(saved_errno));
+ else
+ SAL_INFO("sal.file", "access(" << fn << ",0" << std::oct << mode << std::dec << "): OK");
+
+ done_accessing_file_path(fn.getStr(), state);
+
+ errno = saved_errno;
+
+ return result;
+}
+
+namespace {
+
+OString toOString(OString const & s) { return s; }
+
+OString toOString(std::u16string_view s) { return osl::OUStringToOString(s); }
+
+template<typename T> T fromOString(OString const &) = delete;
+
+template<> OString fromOString(OString const & s) { return s; }
+
+template<> OUString fromOString(OString const & s)
+{ return OStringToOUString(s, osl_getThreadTextEncoding()); }
+
+template<typename T> bool realpath_(const T& pstrFileName, T& ppstrResolvedName)
+{
+ OString fn = toOString(pstrFileName);
+#if defined ANDROID || defined(EMSCRIPTEN)
+#if defined ANDROID
+ if (fn == "/assets" || fn.startsWith("/assets/"))
+#else
+ if (fn == "/instdir" || fn.startsWith("/instdir/"))
+#endif
+ {
+ if (osl::access(fn, F_OK) == -1)
+ return false;
+
+ ppstrResolvedName = pstrFileName;
+
+ return true;
+ }
+#endif // ANDROID || EMSCRIPTEN
+
+#ifdef MACOSX
+ fn = macxp_resolveAliasAndConvert(fn);
+#endif
+
+ accessFilePathState *state = prepare_to_access_file_path(fn.getStr());
+
+ char rp[PATH_MAX];
+ bool bRet = realpath(fn.getStr(), rp);
+ int saved_errno = errno;
+ if (!bRet)
+ SAL_INFO("sal.file", "realpath(" << fn << "): " << UnixErrnoString(saved_errno));
+ else
+ SAL_INFO("sal.file", "realpath(" << fn << "): OK");
+
+ done_accessing_file_path(fn.getStr(), state);
+
+ if (bRet)
+ {
+ ppstrResolvedName = fromOString<T>(OString(rp));
+ }
+
+ errno = saved_errno;
+
+ return bRet;
+}
+
+}
+
+bool osl::realpath(const OUString& pustrFileName, OUString& ppustrResolvedName)
+{
+ return realpath_(pustrFileName, ppustrResolvedName);
+}
+
+bool osl::realpath(const OString& pstrFileName, OString& ppstrResolvedName)
+{
+ return realpath_(pstrFileName, ppstrResolvedName);
+}
+
+int stat_c(const char* cpPath, struct stat* buf)
+{
+#ifdef ANDROID
+ if (strncmp(cpPath, "/assets", sizeof("/assets")-1) == 0 &&
+ (cpPath[sizeof("/assets")-1] == '\0' ||
+ cpPath[sizeof("/assets")-1] == '/'))
+ return lo_apk_lstat(cpPath, buf);
+#endif
+
+ accessFilePathState *state = prepare_to_access_file_path(cpPath);
+
+ int result = stat(cpPath, buf);
+ int saved_errno = errno;
+ if (result == -1)
+ SAL_INFO("sal.file", "stat(" << cpPath << "): " << UnixErrnoString(saved_errno));
+ else
+ SAL_INFO("sal.file", "stat(" << cpPath << "): OK");
+
+ done_accessing_file_path(cpPath, state);
+
+ errno = saved_errno;
+
+ return result;
+}
+
+int lstat_c(const char* cpPath, struct stat* buf)
+{
+#ifdef ANDROID
+ if (strncmp(cpPath, "/assets", sizeof("/assets")-1) == 0 &&
+ (cpPath[sizeof("/assets")-1] == '\0' ||
+ cpPath[sizeof("/assets")-1] == '/'))
+ return lo_apk_lstat(cpPath, buf);
+#endif
+
+ accessFilePathState *state = prepare_to_access_file_path(cpPath);
+
+ int result = lstat(cpPath, buf);
+ int saved_errno = errno;
+ if (result == -1)
+ SAL_INFO("sal.file", "lstat(" << cpPath << "): " << UnixErrnoString(saved_errno));
+ else
+ SAL_INFO("sal.file", "lstat(" << cpPath << "): OK");
+
+ done_accessing_file_path(cpPath, state);
+
+ errno = saved_errno;
+
+ return result;
+}
+
+namespace {
+
+template<typename T> int lstat_(const T& pstrPath, struct stat& buf)
+{
+ OString fn = toOString(pstrPath);
+
+#ifdef MACOSX
+ fn = macxp_resolveAliasAndConvert(fn);
+#endif
+
+ return lstat_c(fn.getStr(), &buf);
+}
+
+}
+
+int osl::lstat(const OUString& pustrPath, struct stat& buf)
+{
+ return lstat_(pustrPath, buf);
+}
+
+int osl::lstat(const OString& pstrPath, struct stat& buf)
+{
+ return lstat_(pstrPath, buf);
+}
+
+int osl::mkdir(const OString& path, mode_t mode)
+{
+ accessFilePathState *state = prepare_to_access_file_path(path.getStr());
+
+ int result = ::mkdir(path.getStr(), mode);
+ int saved_errno = errno;
+ if (result == -1)
+ SAL_INFO("sal.file", "mkdir(" << path << ",0" << std::oct << mode << std::dec << "): " << UnixErrnoString(saved_errno));
+ else
+ SAL_INFO("sal.file", "mkdir(" << path << ",0" << std::oct << mode << std::dec << "): OK");
+
+ done_accessing_file_path(path.getStr(), state);
+
+ errno = saved_errno;
+
+ return result;
+}
+
+int open_c(const OString& path, int oflag, int mode)
+{
+ accessFilePathState *state = prepare_to_access_file_path(path.getStr());
+
+ int result = open(path.getStr(), oflag, mode);
+ int saved_errno = errno;
+ if (result == -1)
+ SAL_INFO("sal.file", "open(" << path << ",0" << std::oct << oflag << ",0" << mode << std::dec << "): " << UnixErrnoString(saved_errno));
+ else
+ SAL_INFO("sal.file", "open(" << path << ",0" << std::oct << oflag << ",0" << mode << std::dec << ") => " << result);
+
+#if HAVE_FEATURE_MACOSX_SANDBOX
+ if (isSandboxed && result != -1 && (oflag & O_CREAT) && (oflag & O_EXCL))
+ {
+ // A new file was created. Check if it is outside the sandbox.
+ // (In that case it must be one the user selected as export or
+ // save destination in a file dialog, otherwise we wouldn't
+ // have been able to create it.) Create and store a security
+ // scoped bookmark for it so that we can access the file in
+ // the future, too. (For the "Recent Files" functionality.)
+ const char *sandbox = [NSHomeDirectory() UTF8String];
+ if (!(strncmp(sandbox, path.getStr(), strlen(sandbox)) == 0 &&
+ path[strlen(sandbox)] == '/'))
+ {
+ auto cpPath = path.getStr();
+ NSURL *url = [NSURL fileURLWithPath:[NSString stringWithUTF8String:cpPath]];
+ NSData *data = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
+ includingResourceValuesForKeys:nil
+ relativeToURL:nil
+ error:nil];
+ if (data != NULL)
+ {
+ [userDefaults setObject:data
+ forKey:[@"bookmarkFor:" stringByAppendingString:[url absoluteString]]];
+ }
+ }
+ }
+#endif
+
+ done_accessing_file_path(path.getStr(), state);
+
+ errno = saved_errno;
+
+ return result;
+}
+
+int utime_c(const char *cpPath, struct utimbuf *times)
+{
+ accessFilePathState *state = prepare_to_access_file_path(cpPath);
+
+ int result = utime(cpPath, times);
+
+ done_accessing_file_path(cpPath, state);
+
+ return result;
+}
+
+int ftruncate_with_name(int fd, sal_uInt64 uSize, const OString& path)
+{
+ /* When sandboxed on macOS, ftruncate(), even if it takes an
+ * already open file descriptor which was returned from an open()
+ * call already checked by the sandbox, still requires a security
+ * scope bookmark for the file to be active in case the file is
+ * one that the sandbox doesn't otherwise allow access to. Luckily
+ * LibreOffice usually calls ftruncate() through the helpful C++
+ * abstraction layer that keeps the pathname around.
+ */
+
+ OString fn(path);
+
+#ifdef MACOSX
+ fn = macxp_resolveAliasAndConvert(fn);
+#endif
+
+ accessFilePathState *state = prepare_to_access_file_path(fn.getStr());
+
+ int result = ftruncate(fd, uSize);
+ int saved_errno = errno;
+ if (result < 0)
+ SAL_INFO("sal.file", "ftruncate(" << fd << "," << uSize << "): " << UnixErrnoString(saved_errno));
+ else
+ SAL_INFO("sal.file", "ftruncate(" << fd << "," << uSize << "): OK");
+
+ done_accessing_file_path(fn.getStr(), state);
+
+ errno = saved_errno;
+
+ return result;
+}
+
+
+std::string UnixErrnoString(int nErrno)
+{
+ // Errnos from <asm-generic/errno-base.h> and <asm-generic/errno.h> on Linux and <sys/errno.h>
+ // on macOS.
+ switch (nErrno)
+ {
+ case EPERM:
+ return "EPERM";
+ case ENOENT:
+ return "ENOENT";
+ case ESRCH:
+ return "ESRCH";
+ case EINTR:
+ return "EINTR";
+ case EIO:
+ return "EIO";
+ case ENXIO:
+ return "ENXIO";
+ case E2BIG:
+ return "E2BIG";
+ case ENOEXEC:
+ return "ENOEXEC";
+ case EBADF:
+ return "EBADF";
+ case ECHILD:
+ return "ECHILD";
+ case EAGAIN:
+ return "EAGAIN";
+ case ENOMEM:
+ return "ENOMEM";
+ case EACCES:
+ return "EACCES";
+ case EFAULT:
+ return "EFAULT";
+#ifdef ENOTBLK
+ case ENOTBLK:
+ return "ENOTBLK";
+#endif
+ case EBUSY:
+ return "EBUSY";
+ case EEXIST:
+ return "EEXIST";
+ case EXDEV:
+ return "EXDEV";
+ case ENODEV:
+ return "ENODEV";
+ case ENOTDIR:
+ return "ENOTDIR";
+ case EISDIR:
+ return "EISDIR";
+ case EINVAL:
+ return "EINVAL";
+ case ENFILE:
+ return "ENFILE";
+ case EMFILE:
+ return "EMFILE";
+ case ENOTTY:
+ return "ENOTTY";
+ case ETXTBSY:
+ return "ETXTBSY";
+ case EFBIG:
+ return "EFBIG";
+ case ENOSPC:
+ return "ENOSPC";
+ case ESPIPE:
+ return "ESPIPE";
+ case EROFS:
+ return "EROFS";
+ case EMLINK:
+ return "EMLINK";
+ case EPIPE:
+ return "EPIPE";
+ case EDOM:
+ return "EDOM";
+ case ERANGE:
+ return "ERANGE";
+ case EDEADLK:
+ return "EDEADLK";
+ case ENAMETOOLONG:
+ return "ENAMETOOLONG";
+ case ENOLCK:
+ return "ENOLCK";
+ case ENOSYS:
+ return "ENOSYS";
+ case ENOTEMPTY:
+ return "ENOTEMPTY";
+ case ELOOP:
+ return "ELOOP";
+ case ENOMSG:
+ return "ENOMSG";
+ case EIDRM:
+ return "EIDRM";
+#ifdef ECHRNG
+ case ECHRNG:
+ return "ECHRNG";
+#endif
+#ifdef EL2NSYNC
+ case EL2NSYNC:
+ return "EL2NSYNC";
+#endif
+#ifdef EL3HLT
+ case EL3HLT:
+ return "EL3HLT";
+#endif
+#ifdef EL3RST
+ case EL3RST:
+ return "EL3RST";
+#endif
+#ifdef ELNRNG
+ case ELNRNG:
+ return "ELNRNG";
+#endif
+#ifdef EUNATCH
+ case EUNATCH:
+ return "EUNATCH";
+#endif
+#ifdef ENOCSI
+ case ENOCSI:
+ return "ENOCSI";
+#endif
+#ifdef EL2HLT
+ case EL2HLT:
+ return "EL2HLT";
+#endif
+#ifdef EBADE
+ case EBADE:
+ return "EBADE";
+#endif
+#ifdef EBADR
+ case EBADR:
+ return "EBADR";
+#endif
+#ifdef EXFULL
+ case EXFULL:
+ return "EXFULL";
+#endif
+#ifdef ENOANO
+ case ENOANO:
+ return "ENOANO";
+#endif
+#ifdef EBADRQC
+ case EBADRQC:
+ return "EBADRQC";
+#endif
+#ifdef EBADSLT
+ case EBADSLT:
+ return "EBADSLT";
+#endif
+#ifdef EBFONT
+ case EBFONT:
+ return "EBFONT";
+#endif
+ case ENOSTR:
+ return "ENOSTR";
+ case ENODATA:
+ return "ENODATA";
+ case ETIME:
+ return "ETIME";
+ case ENOSR:
+ return "ENOSR";
+#ifdef ENONET
+ case ENONET:
+ return "ENONET";
+#endif
+#ifdef ENOPKG
+ case ENOPKG:
+ return "ENOPKG";
+#endif
+#ifdef EREMOTE
+ case EREMOTE:
+ return "EREMOTE";
+#endif
+ case ENOLINK:
+ return "ENOLINK";
+#ifdef EADV
+ case EADV:
+ return "EADV";
+#endif
+#ifdef ESRMNT
+ case ESRMNT:
+ return "ESRMNT";
+#endif
+#ifdef ECOMM
+ case ECOMM:
+ return "ECOMM";
+#endif
+ case EPROTO:
+ return "EPROTO";
+ case EMULTIHOP:
+ return "EMULTIHOP";
+#ifdef EDOTDOT
+ case EDOTDOT:
+ return "EDOTDOT";
+#endif
+ case EBADMSG:
+ return "EBADMSG";
+ case EOVERFLOW:
+ return "EOVERFLOW";
+#ifdef ENOTUNIQ
+ case ENOTUNIQ:
+ return "ENOTUNIQ";
+#endif
+#ifdef EBADFD
+ case EBADFD:
+ return "EBADFD";
+#endif
+#ifdef EREMCHG
+ case EREMCHG:
+ return "EREMCHG";
+#endif
+#ifdef ELIBACC
+ case ELIBACC:
+ return "ELIBACC";
+#endif
+#ifdef ELIBBAD
+ case ELIBBAD:
+ return "ELIBBAD";
+#endif
+#ifdef ELIBSCN
+ case ELIBSCN:
+ return "ELIBSCN";
+#endif
+#ifdef ELIBMAX
+ case ELIBMAX:
+ return "ELIBMAX";
+#endif
+#ifdef ELIBEXEC
+ case ELIBEXEC:
+ return "ELIBEXEC";
+#endif
+ case EILSEQ:
+ return "EILSEQ";
+#ifdef ERESTART
+ case ERESTART:
+ return "ERESTART";
+#endif
+#ifdef ESTRPIPE
+ case ESTRPIPE:
+ return "ESTRPIPE";
+#endif
+#ifdef EUSERS
+ case EUSERS:
+ return "EUSERS";
+#endif
+ case ENOTSOCK:
+ return "ENOTSOCK";
+ case EDESTADDRREQ:
+ return "EDESTADDRREQ";
+ case EMSGSIZE:
+ return "EMSGSIZE";
+ case EPROTOTYPE:
+ return "EPROTOTYPE";
+ case ENOPROTOOPT:
+ return "ENOPROTOOPT";
+ case EPROTONOSUPPORT:
+ return "EPROTONOSUPPORT";
+#ifdef ESOCKTNOSUPPORT
+ case ESOCKTNOSUPPORT:
+ return "ESOCKTNOSUPPORT";
+#endif
+#ifdef EOPNOTSUPP
+ case EOPNOTSUPP:
+ return "EOPNOTSUPP";
+#endif
+ case EPFNOSUPPORT:
+ return "EPFNOSUPPORT";
+ case EAFNOSUPPORT:
+ return "EAFNOSUPPORT";
+ case EADDRINUSE:
+ return "EADDRINUSE";
+ case EADDRNOTAVAIL:
+ return "EADDRNOTAVAIL";
+ case ENETDOWN:
+ return "ENETDOWN";
+ case ENETUNREACH:
+ return "ENETUNREACH";
+ case ENETRESET:
+ return "ENETRESET";
+ case ECONNABORTED:
+ return "ECONNABORTED";
+ case ECONNRESET:
+ return "ECONNRESET";
+ case ENOBUFS:
+ return "ENOBUFS";
+ case EISCONN:
+ return "EISCONN";
+ case ENOTCONN:
+ return "ENOTCONN";
+#ifdef ESHUTDOWN
+ case ESHUTDOWN:
+ return "ESHUTDOWN";
+#endif
+#ifdef ETOOMANYREFS
+ case ETOOMANYREFS:
+ return "ETOOMANYREFS";
+#endif
+ case ETIMEDOUT:
+ return "ETIMEDOUT";
+ case ECONNREFUSED:
+ return "ECONNREFUSED";
+#ifdef EHOSTDOWN
+ case EHOSTDOWN:
+ return "EHOSTDOWN";
+#endif
+ case EHOSTUNREACH:
+ return "EHOSTUNREACH";
+ case EALREADY:
+ return "EALREADY";
+ case EINPROGRESS:
+ return "EINPROGRESS";
+ case ESTALE:
+ return "ESTALE";
+#ifdef EUCLEAN
+ case EUCLEAN:
+ return "EUCLEAN";
+#endif
+#ifdef ENOTNAM
+ case ENOTNAM:
+ return "ENOTNAM";
+#endif
+#ifdef ENAVAIL
+ case ENAVAIL:
+ return "ENAVAIL";
+#endif
+#ifdef EISNAM
+ case EISNAM:
+ return "EISNAM";
+#endif
+#ifdef EREMOTEIO
+ case EREMOTEIO:
+ return "EREMOTEIO";
+#endif
+ case EDQUOT:
+ return "EDQUOT";
+#ifdef ENOMEDIUM
+ case ENOMEDIUM:
+ return "ENOMEDIUM";
+#endif
+#ifdef EMEDIUMTYPE
+ case EMEDIUMTYPE:
+ return "EMEDIUMTYPE";
+#endif
+ case ECANCELED:
+ return "ECANCELED";
+#ifdef ENOKEY
+ case ENOKEY:
+ return "ENOKEY";
+#endif
+#ifdef EKEYEXPIRED
+ case EKEYEXPIRED:
+ return "EKEYEXPIRED";
+#endif
+#ifdef EKEYREVOKED
+ case EKEYREVOKED:
+ return "EKEYREVOKED";
+#endif
+#ifdef EKEYREJECTED
+ case EKEYREJECTED:
+ return "EKEYREJECTED";
+#endif
+#ifdef EOWNERDEAD
+ case EOWNERDEAD:
+ return "EOWNERDEAD";
+#endif
+#ifdef ENOTRECOVERABLE
+ case ENOTRECOVERABLE:
+ return "ENOTRECOVERABLE";
+#endif
+#ifdef ERFKILL
+ case ERFKILL:
+ return "ERFKILL";
+#endif
+#ifdef EHWPOISON
+ case EHWPOISON:
+ return "EHWPOISON";
+#endif
+#ifdef EPROCLIM
+ case EPROCLIM:
+ return "EPROCLIM";
+#endif
+#ifdef EBADRPC
+ case EBADRPC:
+ return "EBADRPC";
+#endif
+#ifdef ERPCMISMATCH
+ case ERPCMISMATCH:
+ return "ERPCMISMATCH";
+#endif
+#ifdef EPROGUNAVAIL
+ case EPROGUNAVAIL:
+ return "EPROGUNAVAIL";
+#endif
+#ifdef EPROGMISMATCH
+ case EPROGMISMATCH:
+ return "EPROGMISMATCH";
+#endif
+#ifdef EPROCUNAVAIL
+ case EPROCUNAVAIL:
+ return "EPROCUNAVAIL";
+#endif
+#ifdef EFTYPE
+ case EFTYPE:
+ return "EFTYPE";
+#endif
+#ifdef EAUTH
+ case EAUTH:
+ return "EAUTH";
+#endif
+#ifdef ENEEDAUTH
+ case ENEEDAUTH:
+ return "ENEEDAUTH";
+#endif
+#ifdef EPWROFF
+ case EPWROFF:
+ return "EPWROFF";
+#endif
+#ifdef EDEVERR
+ case EDEVERR:
+ return "EDEVERR";
+#endif
+#ifdef EBADEXEC
+ case EBADEXEC:
+ return "EBADEXEC";
+#endif
+#ifdef EBADARCH
+ case EBADARCH:
+ return "EBADARCH";
+#endif
+#ifdef ESHLIBVERS
+ case ESHLIBVERS:
+ return "ESHLIBVERS";
+#endif
+#ifdef EBADMACHO
+ case EBADMACHO:
+ return "EBADMACHO";
+#endif
+#ifdef ENOATTR
+ case ENOATTR:
+ return "ENOATTR";
+#endif
+#ifdef EQFULL
+ case EQFULL:
+ return "EQFULL";
+#endif
+ default:
+ char* str = strerror(nErrno);
+ return std::to_string(nErrno) + " (" + std::string(str) + ")";
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/uunxapi.hxx b/sal/osl/unx/uunxapi.hxx
new file mode 100644
index 000000000..9f792765c
--- /dev/null
+++ b/sal/osl/unx/uunxapi.hxx
@@ -0,0 +1,83 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_UNX_UUNXAPI_HXX
+#define INCLUDED_SAL_OSL_UNX_UUNXAPI_HXX
+
+#include <sal/config.h>
+
+#include <string_view>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <rtl/ustring.h>
+
+#include <rtl/ustring.hxx>
+
+int stat_c(const char *cpPath, struct stat* buf);
+
+int lstat_c(const char *cpPath, struct stat* buf);
+
+int mkdir_c(OString const & path, mode_t mode);
+
+int open_c(const OString& path, int oflag, int mode);
+
+int utime_c(const char *cpPath, struct utimbuf *times);
+
+int ftruncate_with_name(int fd, sal_uInt64 uSize, const OString& path);
+
+namespace osl
+{
+ OString OUStringToOString(std::u16string_view s);
+
+ int access(const OString& strPath, int mode);
+
+ /***********************************
+ osl::realpath
+
+ @descr
+ The return value differs from the
+ realpath function
+
+ @returns sal_True on success else
+ sal_False
+
+ @see realpath
+ **********************************/
+
+ bool realpath(
+ const OUString& ustrFileName,
+ OUString& ustrResolvedName);
+
+ bool realpath(
+ const OString& strFileName,
+ OString& strResolvedName);
+
+ int lstat(const OUString& ustrPath, struct stat& buf);
+
+ int lstat(const OString& strPath, struct stat& buf);
+
+ int mkdir(const OString& aPath, mode_t aMode);
+} // end namespace osl
+
+#endif // INCLUDED_SAL_OSL_UNX_UUNXAPI_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/uunxapi.mm b/sal/osl/unx/uunxapi.mm
new file mode 100644
index 000000000..5a7e17f34
--- /dev/null
+++ b/sal/osl/unx/uunxapi.mm
@@ -0,0 +1 @@
+#include "uunxapi.cxx"
diff --git a/sal/osl/w32/backtrace.cxx b/sal/osl/w32/backtrace.cxx
new file mode 100644
index 000000000..d9231de44
--- /dev/null
+++ b/sal/osl/w32/backtrace.cxx
@@ -0,0 +1,92 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <limits>
+#include <memory>
+
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <process.h>
+#include <iostream>
+#define OPTIONAL
+#include <DbgHelp.h>
+
+#include <rtl/ustrbuf.hxx>
+#include <sal/backtrace.hxx>
+
+#include <backtraceasstring.hxx>
+
+namespace {
+
+template<typename T> T clampToULONG(T n) {
+ auto const maxUlong = std::numeric_limits<ULONG>::max();
+ return n > maxUlong ? static_cast<T>(maxUlong) : n;
+}
+
+}
+
+OUString osl::detail::backtraceAsString(sal_uInt32 maxDepth)
+{
+ std::unique_ptr<sal::BacktraceState> backtrace = sal::backtrace_get( maxDepth );
+ return sal::backtrace_to_string( backtrace.get());
+}
+
+std::unique_ptr<sal::BacktraceState> sal::backtrace_get(sal_uInt32 maxDepth)
+{
+ assert(maxDepth != 0);
+ maxDepth = clampToULONG(maxDepth);
+
+ auto pStack = new void *[maxDepth];
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/bb204633.aspx
+ // "CaptureStackBackTrace function" claims that you "can capture up to
+ // MAXUSHORT frames", and on Windows Server 2003 and Windows XP it even
+ // "must be less than 63", but assume that a too large input value is
+ // clamped internally, instead of resulting in an error:
+ int nFrames = CaptureStackBackTrace( 0, static_cast<ULONG>(maxDepth), pStack, nullptr );
+
+ return std::unique_ptr<BacktraceState>(new BacktraceState{ pStack, nFrames });
+}
+
+OUString sal::backtrace_to_string(BacktraceState* backtraceState)
+{
+ HANDLE hProcess = GetCurrentProcess();
+ // https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-syminitialize
+ // says to not initialize more than once.
+ [[maybe_unused]] static bool bInitialized = SymInitialize(hProcess, nullptr, false);
+ SymRefreshModuleList(hProcess);
+ SYMBOL_INFO * pSymbol;
+ pSymbol = static_cast<SYMBOL_INFO *>(calloc( sizeof( SYMBOL_INFO ) + 1024 * sizeof( char ), 1 ));
+ assert(pSymbol);
+ pSymbol->MaxNameLen = 1024 - 1;
+ pSymbol->SizeOfStruct = sizeof( SYMBOL_INFO );
+
+ auto nFrames = backtraceState->nDepth;
+ OUStringBuffer aBuf;
+ for( int i = 0; i < nFrames; i++ )
+ {
+ SymFromAddr( hProcess, reinterpret_cast<DWORD64>(backtraceState->buffer[ i ]), nullptr, pSymbol );
+ aBuf.append( static_cast<sal_Int32>(nFrames - i - 1) );
+ aBuf.append( ": " );
+ aBuf.appendAscii( pSymbol->Name );
+ aBuf.append( " - 0x" );
+ aBuf.append( static_cast<sal_Int64>(pSymbol->Address), 16 );
+ aBuf.append( "\n" );
+ }
+
+ free( pSymbol );
+
+ return aBuf.makeStringAndClear();
+}
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/conditn.cxx b/sal/osl/w32/conditn.cxx
new file mode 100644
index 000000000..6bc6d9d3e
--- /dev/null
+++ b/sal/osl/w32/conditn.cxx
@@ -0,0 +1,114 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.h"
+
+#include <osl/conditn.h>
+#include <osl/diagnose.h>
+#include <osl/time.h>
+
+/*
+ under WIN32, we use the void* oslCondition
+ as a WIN32 HANDLE (which is also a 32-bit value)
+*/
+
+oslCondition SAL_CALL osl_createCondition(void)
+{
+ oslCondition Condition;
+
+ Condition= reinterpret_cast<oslCondition>(CreateEventW(nullptr, /* no security */
+ true, /* manual reset */
+ false, /* initial state not signaled */
+ nullptr)); /* automatic name */
+
+ return Condition;
+
+}
+
+void SAL_CALL osl_destroyCondition(oslCondition Condition)
+{
+ if(Condition)
+ OSL_VERIFY(CloseHandle(Condition));
+}
+
+sal_Bool SAL_CALL osl_setCondition(oslCondition Condition)
+{
+ OSL_ASSERT(Condition);
+
+ return SetEvent(reinterpret_cast<HANDLE>(Condition)) != FALSE;
+}
+
+sal_Bool SAL_CALL osl_resetCondition(oslCondition Condition)
+{
+ OSL_ASSERT(Condition);
+
+ return ResetEvent(reinterpret_cast<HANDLE>(Condition)) != FALSE;
+}
+
+oslConditionResult SAL_CALL osl_waitCondition(oslCondition Condition,
+ const TimeValue* pTimeout)
+{
+ DWORD timeout;
+
+ OSL_ASSERT(Condition);
+
+ if (pTimeout)
+ timeout = pTimeout->Seconds * 1000 + pTimeout->Nanosec / 1000000L;
+ else
+ timeout = INFINITE;
+
+ /* It's necessary to process SendMessage calls to the current thread to give other threads
+ access to COM objects instantiated in this thread */
+
+ while ( true )
+ {
+ /* Only wake up if a SendMessage call to the threads message loop is detected */
+ switch( MsgWaitForMultipleObjects( 1, reinterpret_cast<HANDLE *>(&Condition), FALSE, timeout, QS_SENDMESSAGE ) )
+ {
+ case WAIT_OBJECT_0 + 1:
+ {
+ MSG msg;
+
+ /* We Must not dispatch the message. PM_NOREMOVE leaves the message queue untouched
+ but dispatches SendMessage calls automatically */
+
+ PeekMessageW( &msg, nullptr, 0, 0, PM_NOREMOVE );
+ }
+ break;
+
+ case WAIT_OBJECT_0:
+ return osl_cond_result_ok;
+
+ case WAIT_TIMEOUT:
+ return osl_cond_result_timeout;
+
+ default:
+ return osl_cond_result_error;
+ }
+ }
+}
+
+sal_Bool SAL_CALL osl_checkCondition(oslCondition Condition)
+{
+ OSL_ASSERT(Condition);
+
+ return WaitForSingleObject(reinterpret_cast<HANDLE>(Condition), 0) == WAIT_OBJECT_0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/dllentry.cxx b/sal/osl/w32/dllentry.cxx
new file mode 100644
index 000000000..81139a058
--- /dev/null
+++ b/sal/osl/w32/dllentry.cxx
@@ -0,0 +1,235 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <systools/win32/uwinapi.h>
+#include <tlhelp32.h>
+#include <rpc.h>
+#include <winsock.h>
+#ifdef _DEBUG
+#include <crtdbg.h>
+#endif
+#include <osl/diagnose.h>
+#include <sal/types.h>
+#include <float.h>
+
+#include <osl/mutex.h>
+#include <osl/thread.h>
+
+#include "file_url.hxx"
+#include <rtllifecycle.h>
+
+#include "thread.hxx"
+
+/*
+This is needed because DllMain is called after static constructors. A DLL's
+startup and shutdown sequence looks like this:
+
+_pRawDllMain()
+_CRT_INIT()
+DllMain()
+...
+DllMain()
+_CRT_INIT()
+_pRawDllMain()
+
+*/
+
+extern "C" {
+
+static BOOL WINAPI RawDllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved );
+BOOL (WINAPI *_pRawDllMain)(HINSTANCE, DWORD, LPVOID) = RawDllMain;
+
+}
+
+static BOOL WINAPI RawDllMain( HINSTANCE, DWORD fdwReason, LPVOID )
+{
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+#ifdef _DEBUG
+ WCHAR buf[64];
+ DWORD const res = GetEnvironmentVariableW(L"SAL_NO_ASSERT_DIALOGS", buf, SAL_N_ELEMENTS(buf));
+ if (res && res < SAL_N_ELEMENTS(buf))
+ {
+ // disable the dialog on abort()
+ _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode(_CRT_ERROR, (_CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE));
+ // not sure which assertions this affects
+ _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode(_CRT_ASSERT, (_CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE));
+ // disable the dialog on assert(false)
+ _set_error_mode(_OUT_TO_STDERR);
+ }
+#endif
+
+#if OSL_DEBUG_LEVEL < 2
+ /* Suppress file error messages from system like "Floppy A: not inserted" */
+ SetErrorMode( SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS );
+#endif
+
+ //We disable floating point exceptions. This is the usual state at program startup
+ //but on Windows 98 and ME this is not always the case.
+ _control87(_MCW_EM, _MCW_EM);
+ break;
+ }
+
+ case DLL_PROCESS_DETACH:
+ WSACleanup( );
+
+ /*
+
+ On a product build memory management finalization might
+ cause a crash without assertion (assertions off) if heap is
+ corrupted. But a crash report won't help here because at
+ this point all other threads have been terminated and only
+ ntdll is on the stack. No chance to find the reason for the
+ corrupted heap if so.
+
+ So annoying the user with a crash report is completely useless.
+
+ */
+
+#ifndef DBG_UTIL
+ __try
+#endif
+ {
+ /* cleanup locale hashtable */
+ rtl_locale_fini();
+
+ /* finalize memory management */
+ rtl_cache_fini();
+ rtl_arena_fini();
+ }
+#ifndef DBG_UTIL
+ __except( EXCEPTION_EXECUTE_HANDLER )
+ {
+ }
+#endif
+ break;
+ }
+
+ return TRUE;
+}
+
+static DWORD GetParentProcessId()
+{
+ DWORD dwParentProcessId = 0;
+ HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
+
+ if ( IsValidHandle( hSnapshot ) )
+ {
+ PROCESSENTRY32 pe;
+ bool fSuccess;
+
+ ZeroMemory( &pe, sizeof(pe) );
+ pe.dwSize = sizeof(pe);
+ fSuccess = Process32First( hSnapshot, &pe );
+
+ while( fSuccess )
+ {
+ if ( GetCurrentProcessId() == pe.th32ProcessID )
+ {
+ dwParentProcessId = pe.th32ParentProcessID;
+ break;
+ }
+
+ fSuccess = Process32Next( hSnapshot, &pe );
+ }
+
+ CloseHandle( hSnapshot );
+ }
+
+ return dwParentProcessId;
+}
+
+static DWORD WINAPI ParentMonitorThreadProc( LPVOID lpParam )
+{
+ DWORD_PTR dwParentProcessId = reinterpret_cast<DWORD_PTR>(lpParam);
+
+ HANDLE hParentProcess = OpenProcess( SYNCHRONIZE, FALSE, dwParentProcessId );
+
+ osl_setThreadName("headless ParentMonitorThread");
+
+ if ( IsValidHandle( hParentProcess ) )
+ {
+ if ( WAIT_OBJECT_0 == WaitForSingleObject( hParentProcess, INFINITE ) )
+ {
+ TerminateProcess( GetCurrentProcess(), 0 );
+ }
+ CloseHandle( hParentProcess );
+ }
+ return 0;
+}
+
+extern "C"
+BOOL WINAPI DllMain( HINSTANCE, DWORD fdwReason, LPVOID )
+{
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+ WCHAR szBuffer[64];
+
+ // This code will attach the process to its parent process
+ // if the parent process had set the environment variable.
+ // The corresponding code (setting the environment variable)
+ // is desktop/win32/source/officeloader.cxx
+
+ DWORD dwResult = GetEnvironmentVariableW( L"ATTACHED_PARENT_PROCESSID", szBuffer, SAL_N_ELEMENTS(szBuffer) );
+
+ if ( dwResult && dwResult < SAL_N_ELEMENTS(szBuffer) )
+ {
+ DWORD dwThreadId = 0;
+
+ DWORD_PTR dwParentProcessId = static_cast<DWORD_PTR>(_wtol( szBuffer ));
+
+ if ( dwParentProcessId && GetParentProcessId() == dwParentProcessId )
+ {
+ // No error check, it works or it does not
+ // Thread should only be started for headless mode, see desktop/win32/source/officeloader.cxx
+ HANDLE hThread
+ = CreateThread(nullptr, 0, ParentMonitorThreadProc,
+ reinterpret_cast<LPVOID>(dwParentProcessId), 0, &dwThreadId);
+ // Note: calling CreateThread in DllMain is discouraged
+ // but this is only done in the headless mode and in
+ // that case no other threads should be running at startup
+ // when sal3.dll is loaded; also there is no
+ // synchronization with the spawned thread, so there
+ // does not appear to be a real risk of deadlock here
+ if (hThread)
+ CloseHandle(hThread);
+ }
+ }
+
+ return TRUE;
+ }
+
+ case DLL_THREAD_ATTACH:
+ break;
+
+ case DLL_THREAD_DETACH:
+ osl_callThreadKeyCallbackOnThreadDetach( );
+ break;
+ }
+
+ return TRUE;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/file-impl.hxx b/sal/osl/w32/file-impl.hxx
new file mode 100644
index 000000000..3f1d2136d
--- /dev/null
+++ b/sal/osl/w32/file-impl.hxx
@@ -0,0 +1,25 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_FILE_IMPL_HXX
+#define INCLUDED_SAL_OSL_W32_FILE_IMPL_HXX
+
+#include <sal/config.h>
+
+#include <osl/file.h>
+#include <sal/types.h>
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+extern "C" oslFileHandle osl_createFileHandleFromOSHandle(HANDLE hFile, sal_uInt32 uFlags);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/osl/w32/file.cxx b/sal/osl/w32/file.cxx
new file mode 100644
index 000000000..be921aede
--- /dev/null
+++ b/sal/osl/w32/file.cxx
@@ -0,0 +1,1121 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <systools/win32/uwinapi.h>
+
+#include <osl/file.hxx>
+#include <rtl/alloc.h>
+#include <rtl/byteseq.h>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+#include <o3tl/typed_flags_set.hxx>
+
+#include "file-impl.hxx"
+#include "file_url.hxx"
+#include "file_error.hxx"
+
+#include <atomic>
+#include <cassert>
+#include <algorithm>
+#include <limits>
+
+#ifdef max /* conflict w/ std::numeric_limits<T>::max() */
+#undef max
+#endif
+#ifdef min
+#undef min
+#endif
+
+namespace {
+
+/** State
+ */
+enum class StateBits
+{
+ Seekable = 1, /*< open() sets, iff regular file */
+ Readable = 2, /*< open() sets, read() requires */
+ Writeable = 4, /*< open() sets, write() requires */
+ Modified = 8 /* write() sets, flush() resets */
+};
+
+}
+
+template<> struct o3tl::typed_flags<StateBits>: o3tl::is_typed_flags<StateBits, 0xF> {};
+
+namespace {
+
+/** File handle implementation.
+*/
+struct FileHandle_Impl
+{
+ CRITICAL_SECTION m_mutex;
+ HANDLE m_hFile;
+
+ StateBits m_state;
+
+ sal_uInt64 m_size; /*< file size */
+ LONGLONG m_offset; /*< physical offset from begin of file */
+ // m_filepos is hit hard in some situations, where the overhead of a mutex starts to show up, so use an atomic
+ std::atomic<LONGLONG> m_filepos; /*< logical offset from begin of file */
+
+ LONGLONG m_bufptr; /*< buffer offset from begin of file */
+ SIZE_T m_buflen; /*< buffer filled [0, m_bufsiz - 1] */
+
+ SIZE_T m_bufsiz;
+ sal_uInt8 * m_buffer;
+
+ explicit FileHandle_Impl (HANDLE hFile);
+ ~FileHandle_Impl();
+
+ static SIZE_T getpagesize();
+
+ sal_uInt64 getPos() const;
+ oslFileError setPos (sal_uInt64 uPos);
+
+ sal_uInt64 getSize() const;
+ oslFileError setSize (sal_uInt64 uPos);
+
+ oslFileError readAt(
+ LONGLONG nOffset,
+ void * pBuffer,
+ DWORD nBytesRequested,
+ sal_uInt64 * pBytesRead);
+
+ oslFileError writeAt(
+ LONGLONG nOffset,
+ void const * pBuffer,
+ DWORD nBytesToWrite,
+ sal_uInt64 * pBytesWritten);
+
+ oslFileError readFileAt(
+ LONGLONG nOffset,
+ void * pBuffer,
+ sal_uInt64 uBytesRequested,
+ sal_uInt64 * pBytesRead);
+
+ oslFileError writeFileAt(
+ LONGLONG nOffset,
+ void const * pBuffer,
+ sal_uInt64 uBytesToWrite,
+ sal_uInt64 * pBytesWritten);
+
+ oslFileError readLineAt(
+ LONGLONG nOffset,
+ sal_Sequence ** ppSequence,
+ sal_uInt64 * pBytesRead);
+
+ static oslFileError writeSequence_Impl (
+ sal_Sequence ** ppSequence,
+ SIZE_T * pnOffset,
+ const void * pBuffer,
+ SIZE_T nBytes);
+
+ oslFileError syncFile();
+
+ /** Guard.
+ */
+ class Guard
+ {
+ LPCRITICAL_SECTION m_mutex;
+
+ public:
+ explicit Guard(LPCRITICAL_SECTION pMutex);
+ ~Guard();
+ };
+};
+
+}
+
+FileHandle_Impl::Guard::Guard(LPCRITICAL_SECTION pMutex)
+ : m_mutex (pMutex)
+{
+ assert(pMutex);
+ ::EnterCriticalSection (m_mutex);
+}
+
+FileHandle_Impl::Guard::~Guard()
+{
+ ::LeaveCriticalSection (m_mutex);
+}
+
+FileHandle_Impl::FileHandle_Impl(HANDLE hFile)
+ : m_hFile (hFile),
+ m_state (StateBits::Readable | StateBits::Writeable),
+ m_size (0),
+ m_offset (0),
+ m_filepos (0),
+ m_bufptr (-1),
+ m_buflen (0),
+ m_bufsiz (getpagesize()),
+ m_buffer (nullptr)
+{
+ ::InitializeCriticalSection (&m_mutex);
+ m_buffer = static_cast<sal_uInt8 *>(calloc(m_bufsiz, 1));
+}
+
+FileHandle_Impl::~FileHandle_Impl()
+{
+ free(m_buffer);
+ m_buffer = nullptr;
+ ::DeleteCriticalSection (&m_mutex);
+}
+
+SIZE_T FileHandle_Impl::getpagesize()
+{
+ SYSTEM_INFO info;
+ ::GetSystemInfo(&info);
+ return sal::static_int_cast< SIZE_T >(info.dwPageSize);
+}
+
+sal_uInt64 FileHandle_Impl::getPos() const
+{
+ return sal::static_int_cast< sal_uInt64 >(m_filepos.load());
+}
+
+oslFileError FileHandle_Impl::setPos(sal_uInt64 uPos)
+{
+ m_filepos = sal::static_int_cast< LONGLONG >(uPos);
+ return osl_File_E_None;
+}
+
+sal_uInt64 FileHandle_Impl::getSize() const
+{
+ LONGLONG bufend = std::max(LONGLONG(0), m_bufptr) + m_buflen;
+ return std::max(m_size, sal::static_int_cast< sal_uInt64 >(bufend));
+}
+
+oslFileError FileHandle_Impl::setSize(sal_uInt64 uSize)
+{
+ LARGE_INTEGER nDstPos; nDstPos.QuadPart = sal::static_int_cast< LONGLONG >(uSize);
+ if (!::SetFilePointerEx(m_hFile, nDstPos, nullptr, FILE_BEGIN))
+ return oslTranslateFileError(GetLastError());
+
+ if (!::SetEndOfFile(m_hFile))
+ return oslTranslateFileError(GetLastError());
+ m_size = uSize;
+
+ nDstPos.QuadPart = m_offset;
+ if (!::SetFilePointerEx(m_hFile, nDstPos, nullptr, FILE_BEGIN))
+ return oslTranslateFileError(GetLastError());
+
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::readAt(
+ LONGLONG nOffset,
+ void * pBuffer,
+ DWORD nBytesRequested,
+ sal_uInt64 * pBytesRead)
+{
+ SAL_WARN_IF(!(m_state & StateBits::Seekable), "sal.osl", "FileHandle_Impl::readAt(): not seekable");
+ if (!(m_state & StateBits::Seekable))
+ return osl_File_E_SPIPE;
+
+ SAL_WARN_IF(!(m_state & StateBits::Readable), "sal.osl", "FileHandle_Impl::readAt(): not readable");
+ if (!(m_state & StateBits::Readable))
+ return osl_File_E_BADF;
+
+ if (nOffset != m_offset)
+ {
+ LARGE_INTEGER liOffset; liOffset.QuadPart = nOffset;
+ if (!::SetFilePointerEx(m_hFile, liOffset, nullptr, FILE_BEGIN))
+ return oslTranslateFileError(GetLastError());
+ m_offset = nOffset;
+ }
+
+ DWORD dwDone = 0;
+ if (!::ReadFile(m_hFile, pBuffer, nBytesRequested, &dwDone, nullptr))
+ return oslTranslateFileError(GetLastError());
+ m_offset += dwDone;
+
+ *pBytesRead = dwDone;
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::writeAt(
+ LONGLONG nOffset,
+ void const * pBuffer,
+ DWORD nBytesToWrite,
+ sal_uInt64 * pBytesWritten)
+{
+ SAL_WARN_IF(!(m_state & StateBits::Seekable), "sal.osl", "FileHandle_Impl::writeAt(): not seekable");
+ if (!(m_state & StateBits::Seekable))
+ return osl_File_E_SPIPE;
+
+ SAL_WARN_IF(!(m_state & StateBits::Writeable), "sal.osl", "FileHandle_Impl::writeAt(): not writeable");
+ if (!(m_state & StateBits::Writeable))
+ return osl_File_E_BADF;
+
+ if (nOffset != m_offset)
+ {
+ LARGE_INTEGER liOffset; liOffset.QuadPart = nOffset;
+ if (!::SetFilePointerEx (m_hFile, liOffset, nullptr, FILE_BEGIN))
+ return oslTranslateFileError(GetLastError());
+ m_offset = nOffset;
+ }
+
+ DWORD dwDone = 0;
+ if (!::WriteFile(m_hFile, pBuffer, nBytesToWrite, &dwDone, nullptr))
+ return oslTranslateFileError(GetLastError());
+ m_offset += dwDone;
+
+ m_size = std::max(m_size, sal::static_int_cast< sal_uInt64 >(m_offset));
+
+ *pBytesWritten = dwDone;
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::readFileAt(
+ LONGLONG nOffset,
+ void * pBuffer,
+ sal_uInt64 uBytesRequested,
+ sal_uInt64 * pBytesRead)
+{
+ static sal_uInt64 const g_limit_dword = std::numeric_limits< DWORD >::max();
+ if (g_limit_dword < uBytesRequested)
+ return osl_File_E_OVERFLOW;
+ DWORD nBytesRequested = sal::static_int_cast< DWORD >(uBytesRequested);
+
+ if (!(m_state & StateBits::Seekable))
+ {
+ // not seekable (pipe)
+ DWORD dwDone = 0;
+ if (!::ReadFile(m_hFile, pBuffer, nBytesRequested, &dwDone, nullptr))
+ return oslTranslateFileError(GetLastError());
+ *pBytesRead = dwDone;
+ return osl_File_E_None;
+ }
+ else if (!m_buffer)
+ {
+ // not buffered
+ return readAt (nOffset, pBuffer, nBytesRequested, pBytesRead);
+ }
+ else
+ {
+ sal_uInt8 * buffer = static_cast< sal_uInt8* >(pBuffer);
+ for (*pBytesRead = 0; nBytesRequested > 0;)
+ {
+ LONGLONG const bufptr = (nOffset / m_bufsiz) * m_bufsiz;
+ SIZE_T const bufpos = nOffset % m_bufsiz;
+
+ if (bufptr != m_bufptr)
+ {
+ // flush current buffer
+ oslFileError result = syncFile();
+ if (result != osl_File_E_None)
+ return result;
+ m_bufptr = -1;
+ m_buflen = 0;
+
+ if (nBytesRequested >= m_bufsiz)
+ {
+ // buffer too small, read through from file
+ sal_uInt64 uDone = 0;
+ result = readAt (nOffset, &(buffer[*pBytesRead]), nBytesRequested, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ nBytesRequested -= sal::static_int_cast< DWORD >(uDone);
+ *pBytesRead += uDone;
+ return osl_File_E_None;
+ }
+
+ // update buffer (pointer)
+ sal_uInt64 uDone = 0;
+ result = readAt(bufptr, m_buffer, m_bufsiz, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+ m_bufptr = bufptr;
+ m_buflen = sal::static_int_cast< SIZE_T >(uDone);
+ }
+ if (bufpos >= m_buflen)
+ {
+ // end of file
+ return osl_File_E_None;
+ }
+
+ SIZE_T const bytes = std::min(m_buflen - bufpos, static_cast<SIZE_T>(nBytesRequested));
+ memcpy(&(buffer[*pBytesRead]), &(m_buffer[bufpos]), bytes);
+ nBytesRequested -= bytes;
+ *pBytesRead += bytes;
+ nOffset += bytes;
+ }
+ return osl_File_E_None;
+ }
+}
+
+oslFileError FileHandle_Impl::writeFileAt(
+ LONGLONG nOffset,
+ void const * pBuffer,
+ sal_uInt64 uBytesToWrite,
+ sal_uInt64 * pBytesWritten)
+{
+ static sal_uInt64 const g_limit_dword = std::numeric_limits< DWORD >::max();
+ if (g_limit_dword < uBytesToWrite)
+ return osl_File_E_OVERFLOW;
+ DWORD nBytesToWrite = sal::static_int_cast< DWORD >(uBytesToWrite);
+
+ if (!(m_state & StateBits::Seekable))
+ {
+ // not seekable (pipe)
+ DWORD dwDone = 0;
+ if (!::WriteFile(m_hFile, pBuffer, nBytesToWrite, &dwDone, nullptr))
+ return oslTranslateFileError(GetLastError());
+ *pBytesWritten = dwDone;
+ return osl_File_E_None;
+ }
+ else if (!m_buffer)
+ {
+ // not buffered
+ return writeAt(nOffset, pBuffer, nBytesToWrite, pBytesWritten);
+ }
+ else
+ {
+ sal_uInt8 const * buffer = static_cast< sal_uInt8 const* >(pBuffer);
+ for (*pBytesWritten = 0; nBytesToWrite > 0;)
+ {
+ LONGLONG const bufptr = (nOffset / m_bufsiz) * m_bufsiz;
+ SIZE_T const bufpos = nOffset % m_bufsiz;
+ if (bufptr != m_bufptr)
+ {
+ // flush current buffer
+ oslFileError result = syncFile();
+ if (result != osl_File_E_None)
+ return result;
+ m_bufptr = -1;
+ m_buflen = 0;
+
+ if (nBytesToWrite >= m_bufsiz)
+ {
+ // buffer too small, write through to file
+ sal_uInt64 uDone = 0;
+ result = writeAt(nOffset, &(buffer[*pBytesWritten]), nBytesToWrite, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+ if (uDone != nBytesToWrite)
+ return osl_File_E_IO;
+
+ nBytesToWrite -= sal::static_int_cast< DWORD >(uDone);
+ *pBytesWritten += uDone;
+ return osl_File_E_None;
+ }
+
+ // update buffer (pointer)
+ sal_uInt64 uDone = 0;
+ result = readAt(bufptr, m_buffer, m_bufsiz, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+ m_bufptr = bufptr;
+ m_buflen = sal::static_int_cast< SIZE_T >(uDone);
+ }
+
+ SIZE_T const bytes = std::min(m_bufsiz - bufpos, static_cast<SIZE_T>(nBytesToWrite));
+ memcpy(&(m_buffer[bufpos]), &(buffer[*pBytesWritten]), bytes);
+ nBytesToWrite -= bytes;
+ *pBytesWritten += bytes;
+ nOffset += bytes;
+
+ m_buflen = std::max(m_buflen, bufpos + bytes);
+ m_state |= StateBits::Modified;
+ }
+ return osl_File_E_None;
+ }
+}
+
+oslFileError FileHandle_Impl::readLineAt(
+ LONGLONG nOffset,
+ sal_Sequence ** ppSequence,
+ sal_uInt64 * pBytesRead)
+{
+ oslFileError result = osl_File_E_None;
+
+ LONGLONG bufptr = (nOffset / m_bufsiz) * m_bufsiz;
+ if (bufptr != m_bufptr)
+ {
+ /* flush current buffer */
+ result = syncFile();
+ if (result != osl_File_E_None)
+ return result;
+
+ /* update buffer (pointer) */
+ sal_uInt64 uDone = 0;
+ result = readAt(bufptr, m_buffer, m_bufsiz, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+
+ m_bufptr = bufptr;
+ m_buflen = sal::static_int_cast< SIZE_T >(uDone);
+ }
+
+ static int const LINE_STATE_BEGIN = 0;
+ static int const LINE_STATE_CR = 1;
+ static int const LINE_STATE_LF = 2;
+
+ SIZE_T bufpos = sal::static_int_cast< SIZE_T >(nOffset - m_bufptr), curpos = bufpos, dstpos = 0;
+ int state = (bufpos >= m_buflen) ? LINE_STATE_LF : LINE_STATE_BEGIN;
+
+ for (; state != LINE_STATE_LF;)
+ {
+ if (curpos >= m_buflen)
+ {
+ /* buffer examined */
+ if (curpos > bufpos) // actually, curpos can't become less than bufpos, so != could do
+ {
+ /* flush buffer to sequence */
+ result = writeSequence_Impl(
+ ppSequence, &dstpos, &(m_buffer[bufpos]), curpos - bufpos);
+ if (result != osl_File_E_None)
+ return result;
+ *pBytesRead += curpos - bufpos;
+ nOffset += curpos - bufpos;
+ }
+
+ bufptr = nOffset / m_bufsiz * m_bufsiz;
+ if (bufptr != m_bufptr)
+ {
+ /* update buffer (pointer) */
+ sal_uInt64 uDone = 0;
+ result = readAt(bufptr, m_buffer, m_bufsiz, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+ m_bufptr = bufptr;
+ m_buflen = sal::static_int_cast< SIZE_T >(uDone);
+ }
+
+ bufpos = sal::static_int_cast< SIZE_T >(nOffset - m_bufptr);
+ curpos = bufpos;
+ if (bufpos >= m_buflen)
+ break;
+ }
+ switch (state)
+ {
+ case LINE_STATE_CR:
+ state = LINE_STATE_LF;
+ switch (m_buffer[curpos])
+ {
+ case 0x0A: /* CRLF */
+ /* eat current char */
+ curpos++;
+ break;
+ default: /* single CR */
+ /* keep current char */
+ break;
+ }
+ break;
+ default:
+ /* determine next state */
+ switch (m_buffer[curpos])
+ {
+ case 0x0A: /* single LF */
+ state = LINE_STATE_LF;
+ break;
+ case 0x0D: /* CR */
+ state = LINE_STATE_CR;
+ break;
+ default: /* advance to next char */
+ curpos++;
+ break;
+ }
+ if (state != LINE_STATE_BEGIN)
+ {
+ /* store (and eat) the newline char */
+ m_buffer[curpos] = 0x0A;
+ curpos++;
+
+ /* flush buffer to sequence */
+ result = writeSequence_Impl(
+ ppSequence, &dstpos, &(m_buffer[bufpos]), curpos - bufpos - 1);
+ if (result != osl_File_E_None)
+ return result;
+ *pBytesRead += curpos - bufpos;
+ nOffset += curpos - bufpos;
+ }
+ break;
+ }
+ }
+
+ result = writeSequence_Impl(ppSequence, &dstpos, nullptr, 0);
+ if (result != osl_File_E_None)
+ return result;
+ if (dstpos > 0)
+ return osl_File_E_None;
+ if (bufpos >= m_buflen)
+ return osl_File_E_AGAIN;
+ return osl_File_E_None;
+}
+
+oslFileError FileHandle_Impl::writeSequence_Impl(
+ sal_Sequence ** ppSequence,
+ SIZE_T * pnOffset,
+ const void * pBuffer,
+ SIZE_T nBytes)
+{
+ sal_Int32 nElements = *pnOffset + nBytes;
+ if (!*ppSequence)
+ {
+ /* construct sequence */
+ rtl_byte_sequence_constructNoDefault(ppSequence, nElements);
+ }
+ else if (nElements != (*ppSequence)->nElements)
+ {
+ /* resize sequence */
+ rtl_byte_sequence_realloc(ppSequence, nElements);
+ }
+ if (*ppSequence)
+ {
+ /* fill sequence */
+ memcpy(&((*ppSequence)->elements[*pnOffset]), pBuffer, nBytes);
+ *pnOffset += nBytes;
+ }
+ return (*ppSequence) ? osl_File_E_None : osl_File_E_NOMEM;
+}
+
+oslFileError FileHandle_Impl::syncFile()
+{
+ oslFileError result = osl_File_E_None;
+ if (m_state & StateBits::Modified)
+ {
+ sal_uInt64 uDone = 0;
+ result = writeAt(m_bufptr, m_buffer, m_buflen, &uDone);
+ if (result != osl_File_E_None)
+ return result;
+ if (uDone != m_buflen)
+ return osl_File_E_IO;
+ m_state &= ~StateBits::Modified;
+ }
+ return result;
+}
+
+extern "C" oslFileHandle osl_createFileHandleFromOSHandle(
+ HANDLE hFile,
+ sal_uInt32 uFlags)
+{
+ if (!IsValidHandle(hFile))
+ return nullptr; // EINVAL
+
+ FileHandle_Impl * pImpl = new FileHandle_Impl(hFile);
+
+ /* check for regular file */
+ if (GetFileType(hFile) == FILE_TYPE_DISK)
+ {
+ /* mark seekable */
+ pImpl->m_state |= StateBits::Seekable;
+
+ /* init current size */
+ LARGE_INTEGER uSize = { { 0, 0 } };
+ (void) ::GetFileSizeEx(hFile, &uSize);
+ pImpl->m_size = (sal::static_int_cast<sal_uInt64>(uSize.HighPart) << 32) + uSize.LowPart;
+ }
+
+ if (!(uFlags & osl_File_OpenFlag_Read))
+ pImpl->m_state &= ~StateBits::Readable;
+ if (!(uFlags & osl_File_OpenFlag_Write))
+ pImpl->m_state &= ~StateBits::Writeable;
+
+ SAL_WARN_IF(
+ !((uFlags & osl_File_OpenFlag_Read) || (uFlags & osl_File_OpenFlag_Write)),
+ "sal.osl",
+ "osl_createFileHandleFromOSHandle(): missing read/write access flags");
+ return static_cast<oslFileHandle>(pImpl);
+}
+
+oslFileError SAL_CALL osl_openFile(
+ rtl_uString * strPath,
+ oslFileHandle * pHandle,
+ sal_uInt32 uFlags)
+{
+ OUString strSysPath;
+ oslFileError result = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false);
+ if (result != osl_File_E_None)
+ return result;
+
+ // tdf126742 use FILE_SHARE_WRITE to get closer to non-Windows platform behaviour,
+ // for details and discussion see task please
+ DWORD dwAccess = GENERIC_READ, dwShare = FILE_SHARE_READ | FILE_SHARE_WRITE, dwCreation = 0;
+
+ if (uFlags & osl_File_OpenFlag_Write)
+ dwAccess |= GENERIC_WRITE;
+
+ if (uFlags & osl_File_OpenFlag_NoLock)
+ dwShare |= FILE_SHARE_DELETE;
+
+ if (uFlags & osl_File_OpenFlag_Create)
+ dwCreation |= CREATE_NEW;
+ else
+ dwCreation |= OPEN_EXISTING;
+
+ HANDLE hFile = CreateFileW(
+ o3tl::toW(strSysPath.getStr()),
+ dwAccess, dwShare, nullptr, dwCreation, 0, nullptr);
+
+ // @@@ ERROR HANDLING @@@
+ if (!IsValidHandle(hFile))
+ result = oslTranslateFileError(GetLastError());
+
+ *pHandle = osl_createFileHandleFromOSHandle(hFile, uFlags | osl_File_OpenFlag_Read);
+
+ return result;
+}
+
+oslFileError SAL_CALL osl_syncFile(oslFileHandle Handle)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile))
+ return osl_File_E_INVAL;
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+
+ oslFileError result = pImpl->syncFile();
+ if (result != osl_File_E_None)
+ return result;
+
+ if (!FlushFileBuffers(pImpl->m_hFile))
+ return oslTranslateFileError(GetLastError());
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_closeFile(oslFileHandle Handle)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile))
+ return osl_File_E_INVAL;
+
+ ::EnterCriticalSection(&(pImpl->m_mutex));
+
+ oslFileError result = pImpl->syncFile();
+ if (result != osl_File_E_None)
+ {
+ /* ignore double failure */
+ (void)::CloseHandle(pImpl->m_hFile);
+ }
+ else if (!::CloseHandle(pImpl->m_hFile))
+ {
+ /* translate error code */
+ result = oslTranslateFileError(GetLastError());
+ }
+
+ ::LeaveCriticalSection(&(pImpl->m_mutex));
+ delete pImpl;
+ return result;
+}
+
+namespace {
+
+// coverity[result_independent_of_operands] - crossplatform requirement
+template<typename T> bool exceedsMaxSIZE_T(T n)
+{ return n > std::numeric_limits< SIZE_T >::max(); }
+
+}
+
+oslFileError SAL_CALL osl_mapFile(
+ oslFileHandle Handle,
+ void** ppAddr,
+ sal_uInt64 uLength,
+ sal_uInt64 uOffset,
+ sal_uInt32 uFlags)
+{
+ struct FileMapping
+ {
+ HANDLE m_handle;
+
+ explicit FileMapping(HANDLE hMap)
+ : m_handle(hMap)
+ {}
+
+ ~FileMapping()
+ {
+ (void)::CloseHandle(m_handle);
+ }
+ };
+
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!ppAddr))
+ return osl_File_E_INVAL;
+ *ppAddr = nullptr;
+
+ if (exceedsMaxSIZE_T(uLength))
+ return osl_File_E_OVERFLOW;
+ SIZE_T const nLength = sal::static_int_cast< SIZE_T >(uLength);
+
+ FileMapping aMap(::CreateFileMappingW(pImpl->m_hFile, nullptr, SEC_COMMIT | PAGE_READONLY, 0, 0, nullptr));
+ if (!IsValidHandle(aMap.m_handle))
+ return oslTranslateFileError(GetLastError());
+
+ DWORD const dwOffsetHi = sal::static_int_cast<DWORD>(uOffset >> 32);
+ DWORD const dwOffsetLo = sal::static_int_cast<DWORD>(uOffset & 0xFFFFFFFF);
+
+ *ppAddr = ::MapViewOfFile(aMap.m_handle, FILE_MAP_READ, dwOffsetHi, dwOffsetLo, nLength);
+ if (!*ppAddr)
+ return oslTranslateFileError(GetLastError());
+
+ if (uFlags & osl_File_MapFlag_RandomAccess)
+ {
+ // Determine memory pagesize.
+ SYSTEM_INFO info;
+ ::GetSystemInfo(&info);
+ DWORD const dwPageSize = info.dwPageSize;
+
+ /*
+ * Pagein, touching first byte of each memory page.
+ * Note: volatile disables optimizing the loop away.
+ */
+ BYTE volatile * pData(static_cast<BYTE*>(*ppAddr));
+ SIZE_T nSize(nLength);
+
+ while (nSize > dwPageSize)
+ {
+ pData[0];
+ pData += dwPageSize;
+ nSize -= dwPageSize;
+ }
+ if (nSize > 0)
+ {
+ pData[0];
+ }
+ }
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_unmapFile(void* pAddr, sal_uInt64 /* uLength */)
+{
+ if (!pAddr)
+ return osl_File_E_INVAL;
+
+ if (!::UnmapViewOfFile(pAddr))
+ return oslTranslateFileError(GetLastError());
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_unmapMappedFile(oslFileHandle /* Handle */, void* pAddr, sal_uInt64 uLength)
+{
+ return osl_unmapFile(pAddr, uLength);
+}
+
+oslFileError
+SAL_CALL osl_readLine(
+ oslFileHandle Handle,
+ sal_Sequence ** ppSequence)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!ppSequence))
+ return osl_File_E_INVAL;
+ sal_uInt64 uBytesRead = 0;
+
+ // read at current filepos; filepos += uBytesRead;
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ oslFileError result = pImpl->readLineAt(
+ pImpl->m_filepos, ppSequence, &uBytesRead);
+ if (result == osl_File_E_None)
+ pImpl->m_filepos += uBytesRead;
+ return result;
+}
+
+oslFileError SAL_CALL osl_readFile(
+ oslFileHandle Handle,
+ void * pBuffer,
+ sal_uInt64 uBytesRequested,
+ sal_uInt64 * pBytesRead)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pBuffer) || (!pBytesRead))
+ return osl_File_E_INVAL;
+
+ // read at current filepos; filepos += *pBytesRead;
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ oslFileError result = pImpl->readFileAt(
+ pImpl->m_filepos, pBuffer, uBytesRequested, pBytesRead);
+ if (result == osl_File_E_None)
+ pImpl->m_filepos += *pBytesRead;
+ return result;
+}
+
+oslFileError SAL_CALL osl_writeFile(
+ oslFileHandle Handle,
+ const void * pBuffer,
+ sal_uInt64 uBytesToWrite,
+ sal_uInt64 * pBytesWritten)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pBuffer) || (!pBytesWritten))
+ return osl_File_E_INVAL;
+
+ // write at current filepos; filepos += *pBytesWritten;
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ oslFileError result = pImpl->writeFileAt(
+ pImpl->m_filepos, pBuffer, uBytesToWrite, pBytesWritten);
+ if (result == osl_File_E_None)
+ pImpl->m_filepos += *pBytesWritten;
+ return result;
+}
+
+LONGLONG const g_limit_longlong = std::numeric_limits< LONGLONG >::max();
+
+namespace {
+
+// coverity[result_independent_of_operands] - crossplatform requirement
+template<typename T> bool exceedsMaxLONGLONG(T n)
+{ return n > g_limit_longlong; }
+
+template<typename T> bool exceedsMinLONGLONG(T n)
+{ return n < std::numeric_limits<LONGLONG>::min(); }
+
+}
+
+oslFileError SAL_CALL osl_readFileAt(
+ oslFileHandle Handle,
+ sal_uInt64 uOffset,
+ void* pBuffer,
+ sal_uInt64 uBytesRequested,
+ sal_uInt64* pBytesRead)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pBuffer) || (!pBytesRead))
+ return osl_File_E_INVAL;
+ if (!(pImpl->m_state & StateBits::Seekable))
+ return osl_File_E_SPIPE;
+
+ if (exceedsMaxLONGLONG(uOffset))
+ return osl_File_E_OVERFLOW;
+ LONGLONG const nOffset = sal::static_int_cast< LONGLONG >(uOffset);
+
+ // read at specified fileptr
+ FileHandle_Impl::Guard lock (&(pImpl->m_mutex));
+ return pImpl->readFileAt(nOffset, pBuffer, uBytesRequested, pBytesRead);
+}
+
+oslFileError SAL_CALL osl_writeFileAt(
+ oslFileHandle Handle,
+ sal_uInt64 uOffset,
+ const void* pBuffer,
+ sal_uInt64 uBytesToWrite,
+ sal_uInt64* pBytesWritten)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pBuffer) || (!pBytesWritten))
+ return osl_File_E_INVAL;
+ if (!(pImpl->m_state & StateBits::Seekable))
+ return osl_File_E_SPIPE;
+
+ if (exceedsMaxLONGLONG(uOffset))
+ return osl_File_E_OVERFLOW;
+ LONGLONG const nOffset = sal::static_int_cast< LONGLONG >(uOffset);
+
+ // write at specified fileptr
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ return pImpl->writeFileAt(nOffset, pBuffer, uBytesToWrite, pBytesWritten);
+}
+
+oslFileError SAL_CALL osl_isEndOfFile(oslFileHandle Handle, sal_Bool *pIsEOF)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pIsEOF))
+ return osl_File_E_INVAL;
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ *pIsEOF = (pImpl->getPos() == pImpl->getSize());
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_getFilePos(oslFileHandle Handle, sal_uInt64 *pPos)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pPos))
+ return osl_File_E_INVAL;
+
+ // no need to lock because pos is atomic
+ *pPos = pImpl->getPos();
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_setFilePos(oslFileHandle Handle, sal_uInt32 uHow, sal_Int64 uOffset)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile))
+ return osl_File_E_INVAL;
+
+ if (exceedsMaxLONGLONG(uOffset) || exceedsMinLONGLONG(uOffset))
+ return osl_File_E_OVERFLOW;
+ LONGLONG nPos = 0, nOffset = sal::static_int_cast< LONGLONG >(uOffset);
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ switch (uHow)
+ {
+ case osl_Pos_Absolut:
+ if (nOffset < 0)
+ return osl_File_E_INVAL;
+ break;
+
+ case osl_Pos_Current:
+ nPos = sal::static_int_cast< LONGLONG >(pImpl->getPos());
+ if ((nOffset < 0) && (nPos < -1*nOffset))
+ return osl_File_E_INVAL;
+ assert(nPos >= 0);
+ if (nOffset > g_limit_longlong - nPos)
+ return osl_File_E_OVERFLOW;
+ break;
+
+ case osl_Pos_End:
+ nPos = sal::static_int_cast< LONGLONG >(pImpl->getSize());
+ if ((nOffset < 0) && (nPos < -1*nOffset))
+ return osl_File_E_INVAL;
+ assert(nPos >= 0);
+ if (nOffset > g_limit_longlong - nPos)
+ return osl_File_E_OVERFLOW;
+ break;
+
+ default:
+ return osl_File_E_INVAL;
+ }
+
+ return pImpl->setPos(nPos + nOffset);
+}
+
+oslFileError SAL_CALL osl_getFileSize(oslFileHandle Handle, sal_uInt64 *pSize)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pSize))
+ return osl_File_E_INVAL;
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ *pSize = pImpl->getSize();
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_setFileSize(oslFileHandle Handle, sal_uInt64 uSize)
+{
+ FileHandle_Impl * pImpl = static_cast<FileHandle_Impl*>(Handle);
+
+ if ((!pImpl) || !IsValidHandle(pImpl->m_hFile))
+ return osl_File_E_INVAL;
+ if (!(pImpl->m_state & StateBits::Writeable))
+ return osl_File_E_BADF;
+
+ if (exceedsMaxLONGLONG(uSize))
+ return osl_File_E_OVERFLOW;
+
+ FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ oslFileError result = pImpl->syncFile();
+ if (result != osl_File_E_None)
+ return result;
+ pImpl->m_bufptr = -1;
+ pImpl->m_buflen = 0;
+
+ return pImpl->setSize(uSize);
+}
+
+oslFileError SAL_CALL osl_removeFile(rtl_uString* strPath)
+{
+ OUString strSysPath;
+ oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false);
+
+ if (error == osl_File_E_None)
+ {
+ if (DeleteFileW(o3tl::toW(strSysPath.getStr())))
+ error = osl_File_E_None;
+ else
+ error = oslTranslateFileError(GetLastError());
+ }
+ return error;
+}
+
+oslFileError SAL_CALL osl_copyFile(rtl_uString* strPath, rtl_uString *strDestPath)
+{
+ OUString strSysPath, strSysDestPath;
+ oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false);
+
+ if (error == osl_File_E_None)
+ error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDestPath), &strSysDestPath.pData, false);
+
+ if (error == osl_File_E_None)
+ {
+ LPCWSTR src = o3tl::toW(strSysPath.getStr());
+ LPCWSTR dst = o3tl::toW(strSysDestPath.getStr());
+
+ if (CopyFileW(src, dst, FALSE))
+ error = osl_File_E_None;
+ else
+ error = oslTranslateFileError(GetLastError());
+ }
+
+ return error;
+}
+
+oslFileError SAL_CALL osl_moveFile(rtl_uString* strPath, rtl_uString *strDestPath)
+{
+ OUString strSysPath, strSysDestPath;
+ oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false);
+
+ if (error == osl_File_E_None)
+ error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDestPath), &strSysDestPath.pData, false);
+
+ if (error == osl_File_E_None)
+ {
+ LPCWSTR src = o3tl::toW(strSysPath.getStr());
+ LPCWSTR dst = o3tl::toW(strSysDestPath.getStr());
+
+ if (MoveFileExW(src, dst, MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH | MOVEFILE_REPLACE_EXISTING))
+ error = osl_File_E_None;
+ else
+ error = oslTranslateFileError(GetLastError());
+ }
+
+ return error;
+}
+
+oslFileError SAL_CALL osl_replaceFile(rtl_uString* strPath, rtl_uString* strDestPath)
+{
+ OUString strSysPath, strSysDestPath;
+ oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false);
+
+ if (error == osl_File_E_None)
+ error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDestPath), &strSysDestPath.pData, false);
+
+ if (error == osl_File_E_None)
+ {
+ LPCWSTR src = o3tl::toW(strSysPath.getStr());
+ LPCWSTR dst = o3tl::toW(strSysDestPath.getStr());
+
+ if (!ReplaceFileW(dst, src, nullptr,
+ REPLACEFILE_WRITE_THROUGH | REPLACEFILE_IGNORE_MERGE_ERRORS
+ | REPLACEFILE_IGNORE_ACL_ERRORS,
+ nullptr, nullptr))
+ {
+ DWORD dwError = GetLastError();
+ if (dwError == ERROR_FILE_NOT_FOUND // no strDestPath file?
+ || dwError == ERROR_UNABLE_TO_MOVE_REPLACEMENT // e.g., files on different volumes
+ || dwError == ERROR_UNABLE_TO_MOVE_REPLACEMENT_2
+ || dwError == ERROR_UNABLE_TO_REMOVE_REPLACED)
+ error = osl_moveFile(strPath, strDestPath);
+ else
+ error = oslTranslateFileError(dwError);
+ }
+ }
+
+ return error;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/file_dirvol.cxx b/sal/osl/w32/file_dirvol.cxx
new file mode 100644
index 000000000..f9d821605
--- /dev/null
+++ b/sal/osl/w32/file_dirvol.cxx
@@ -0,0 +1,1691 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <systools/win32/uwinapi.h>
+
+#include "file_url.hxx"
+#include "filetime.hxx"
+#include "file_error.hxx"
+
+#include "path_helper.hxx"
+
+#include <rtl/alloc.h>
+#include <rtl/ustring.hxx>
+#include <rtl/character.hxx>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+
+const wchar_t UNC_PREFIX[] = L"\\\\";
+const wchar_t BACKSLASH = '\\';
+const wchar_t SLASH = '/';
+
+BOOL TimeValueToFileTime(const TimeValue *cpTimeVal, FILETIME *pFTime)
+{
+ SYSTEMTIME BaseSysTime;
+ FILETIME BaseFileTime;
+ FILETIME FTime;
+ bool fSuccess = false;
+
+ BaseSysTime.wYear = 1970;
+ BaseSysTime.wMonth = 1;
+ BaseSysTime.wDayOfWeek = 0;
+ BaseSysTime.wDay = 1;
+ BaseSysTime.wHour = 0;
+ BaseSysTime.wMinute = 0;
+ BaseSysTime.wSecond = 0;
+ BaseSysTime.wMilliseconds = 0;
+
+ if (cpTimeVal==nullptr)
+ return fSuccess;
+
+ if ( SystemTimeToFileTime(&BaseSysTime, &BaseFileTime) )
+ {
+ __int64 timeValue;
+
+ __int64 localTime = cpTimeVal->Seconds*__int64(10000000)+cpTimeVal->Nanosec/100;
+ osl::detail::setFiletime(FTime, localTime);
+ fSuccess = 0 <= (timeValue= osl::detail::getFiletime(BaseFileTime) + osl::detail::getFiletime(FTime));
+ if (fSuccess)
+ osl::detail::setFiletime(*pFTime, timeValue);
+ }
+ return fSuccess;
+}
+
+BOOL FileTimeToTimeValue(const FILETIME *cpFTime, TimeValue *pTimeVal)
+{
+ SYSTEMTIME BaseSysTime;
+ FILETIME BaseFileTime;
+ bool fSuccess = false; /* Assume failure */
+
+ BaseSysTime.wYear = 1970;
+ BaseSysTime.wMonth = 1;
+ BaseSysTime.wDayOfWeek = 0;
+ BaseSysTime.wDay = 1;
+ BaseSysTime.wHour = 0;
+ BaseSysTime.wMinute = 0;
+ BaseSysTime.wSecond = 0;
+ BaseSysTime.wMilliseconds = 0;
+
+ if ( SystemTimeToFileTime(&BaseSysTime, &BaseFileTime) )
+ {
+ __int64 Value;
+
+ fSuccess = 0 <= (Value = osl::detail::getFiletime(*cpFTime) - osl::detail::getFiletime(BaseFileTime));
+
+ if ( fSuccess )
+ {
+ pTimeVal->Seconds = static_cast<unsigned long>(Value / 10000000L);
+ pTimeVal->Nanosec = static_cast<unsigned long>((Value % 10000000L) * 100);
+ }
+ }
+ return fSuccess;
+}
+
+namespace
+{
+
+ struct Component
+ {
+ Component() :
+ begin_(nullptr), end_(nullptr)
+ {}
+
+ bool isPresent() const
+ { return (static_cast<sal_IntPtr>(end_ - begin_) > 0); }
+
+ const sal_Unicode* begin_;
+ const sal_Unicode* end_;
+ };
+
+ struct UNCComponents
+ {
+ Component server_;
+ Component share_;
+ Component resource_;
+ };
+
+ bool is_UNC_path(const sal_Unicode* path)
+ { return (0 == wcsncmp(UNC_PREFIX, o3tl::toW(path), SAL_N_ELEMENTS(UNC_PREFIX) - 1)); }
+
+ void parse_UNC_path(const sal_Unicode* path, UNCComponents* puncc)
+ {
+ OSL_PRECOND(is_UNC_path(path), "Precondition violated: No UNC path");
+ OSL_PRECOND(rtl_ustr_indexOfChar(path, SLASH) == -1, "Path must not contain slashes");
+
+ const sal_Unicode* pend = path + rtl_ustr_getLength(path);
+ const sal_Unicode* ppos = path + 2;
+
+ puncc->server_.begin_ = ppos;
+ while ((ppos < pend) && (*ppos != BACKSLASH))
+ ppos++;
+
+ puncc->server_.end_ = ppos;
+
+ if (BACKSLASH == *ppos)
+ {
+ puncc->share_.begin_ = ++ppos;
+ while ((ppos < pend) && (*ppos != BACKSLASH))
+ ppos++;
+
+ puncc->share_.end_ = ppos;
+
+ if (BACKSLASH == *ppos)
+ {
+ puncc->resource_.begin_ = ++ppos;
+ while (ppos < pend)
+ ppos++;
+
+ puncc->resource_.end_ = ppos;
+ }
+ }
+
+ SAL_WARN_IF(!puncc->server_.isPresent() || !puncc->share_.isPresent(),
+ "sal.osl",
+ "Postcondition violated: Invalid UNC path detected");
+ }
+
+ bool has_path_parent(const sal_Unicode* path)
+ {
+ // Has the given path a parent or are we already there,
+ // e.g. 'c:\' or '\\server\share\'?
+
+ bool has_parent = false;
+ if (is_UNC_path(path))
+ {
+ UNCComponents unc_comp;
+ parse_UNC_path(path, &unc_comp);
+ has_parent = unc_comp.resource_.isPresent();
+ }
+ else
+ {
+ has_parent = !osl::systemPathIsLogicalDrivePattern(OUString(path));
+ }
+ return has_parent;
+ }
+
+ bool has_path_parent(const OUString& path)
+ { return has_path_parent(path.getStr()); }
+
+}
+
+oslFileError SAL_CALL osl_acquireVolumeDeviceHandle( oslVolumeDeviceHandle Handle )
+{
+ if ( Handle )
+ {
+ rtl_uString_acquire( static_cast<rtl_uString *>(Handle) );
+ return osl_File_E_None;
+ }
+ else
+ return osl_File_E_INVAL;
+}
+
+oslFileError SAL_CALL osl_releaseVolumeDeviceHandle( oslVolumeDeviceHandle Handle )
+{
+ if ( Handle )
+ {
+ rtl_uString_release( static_cast<rtl_uString *>(Handle) );
+ return osl_File_E_None;
+ }
+ else
+ return osl_File_E_INVAL;
+}
+
+oslFileError SAL_CALL osl_getVolumeDeviceMountPath( oslVolumeDeviceHandle Handle, rtl_uString **pstrPath )
+{
+ if ( Handle && pstrPath )
+ {
+ rtl_uString_assign( pstrPath, static_cast<rtl_uString *>(Handle) );
+ return osl_File_E_None;
+ }
+ else
+ return osl_File_E_INVAL;
+}
+
+#define DIRECTORYITEM_DRIVE 0
+#define DIRECTORYITEM_FILE 1
+#define DIRECTORYITEM_SERVER 2
+
+namespace {
+
+struct DirectoryItem_Impl
+{
+ UINT uType = 0;
+ union {
+ WIN32_FIND_DATAW FindData;
+ WCHAR cDriveString[MAX_PATH];
+ };
+ OUString m_sFullPath;
+ bool bFullPathNormalized = false;
+ int nRefCount = 0;
+};
+
+}
+
+#define DIRECTORYTYPE_LOCALROOT 0
+#define DIRECTORYTYPE_NETROOT 1
+#define DIRECTORYTYPE_FILESYSTEM 3
+
+namespace {
+
+struct Directory_Impl
+{
+ UINT uType = 0;
+ union {
+ HANDLE hDirectory = nullptr;
+ HANDLE hEnumDrives;
+ };
+ OUString m_sDirectoryPath;
+};
+
+typedef struct tagDRIVEENUM
+{
+ LPCWSTR lpIdent;
+ WCHAR cBuffer[/*('Z' - 'A' + 1) * sizeof("A:\\") + 1*/256];
+ LPCWSTR lpCurrent;
+} DRIVEENUM, *PDRIVEENUM, *LPDRIVEENUM;
+
+}
+
+static HANDLE WINAPI OpenLogicalDrivesEnum()
+{
+ LPDRIVEENUM pEnum = static_cast<LPDRIVEENUM>(HeapAlloc( GetProcessHeap(), 0, sizeof(DRIVEENUM) ));
+ if ( pEnum )
+ {
+ DWORD dwNumCopied = GetLogicalDriveStringsW( SAL_N_ELEMENTS(pEnum->cBuffer) - 1, pEnum->cBuffer );
+
+ if ( dwNumCopied && dwNumCopied < SAL_N_ELEMENTS(pEnum->cBuffer) )
+ {
+ pEnum->lpCurrent = pEnum->cBuffer;
+ pEnum->lpIdent = L"tagDRIVEENUM";
+ }
+ else
+ {
+ HeapFree( GetProcessHeap(), 0, pEnum );
+ pEnum = nullptr;
+ }
+ }
+ return pEnum ? static_cast<HANDLE>(pEnum) : INVALID_HANDLE_VALUE;
+}
+
+static bool WINAPI EnumLogicalDrives(HANDLE hEnum, LPWSTR lpBuffer)
+{
+ LPDRIVEENUM pEnum = static_cast<LPDRIVEENUM>(hEnum);
+ if ( !pEnum )
+ {
+ SetLastError( ERROR_INVALID_HANDLE );
+ return false;
+ }
+
+ int nLen = wcslen( pEnum->lpCurrent );
+ if ( !nLen )
+ {
+ SetLastError( ERROR_NO_MORE_FILES );
+ return false;
+ }
+
+ CopyMemory( lpBuffer, pEnum->lpCurrent, (nLen + 1) * sizeof(WCHAR) );
+ pEnum->lpCurrent += nLen + 1;
+ return true;
+}
+
+static bool WINAPI CloseLogicalDrivesEnum(HANDLE hEnum)
+{
+ bool fSuccess = false;
+ LPDRIVEENUM pEnum = static_cast<LPDRIVEENUM>(hEnum);
+
+ if ( pEnum )
+ {
+ HeapFree( GetProcessHeap(), 0, pEnum );
+ fSuccess = true;
+ }
+ else
+ SetLastError( ERROR_INVALID_HANDLE );
+
+ return fSuccess;
+}
+
+namespace {
+
+typedef struct tagDIRECTORY
+{
+ HANDLE hFind;
+ WIN32_FIND_DATAW aFirstData;
+} DIRECTORY, *PDIRECTORY, *LPDIRECTORY;
+
+}
+
+static HANDLE WINAPI OpenDirectory( rtl_uString* pPath)
+{
+ if ( !pPath )
+ return nullptr;
+
+ sal_uInt32 nLen = rtl_uString_getLength( pPath );
+ if ( !nLen )
+ return nullptr;
+
+ const WCHAR* pSuffix = nullptr;
+ sal_uInt32 nSuffLen = 0;
+ if ( pPath->buffer[nLen - 1] != L'\\' )
+ {
+ pSuffix = L"\\*.*";
+ nSuffLen = 4;
+ }
+ else
+ {
+ pSuffix = L"*.*";
+ nSuffLen = 3;
+ }
+
+ WCHAR* szFileMask = static_cast< WCHAR* >( malloc( sizeof( WCHAR ) * ( nLen + nSuffLen + 1 ) ) );
+ assert(szFileMask); // Don't handle OOM conditions
+ wcscpy( szFileMask, o3tl::toW(rtl_uString_getStr( pPath )) );
+ wcscat( szFileMask, pSuffix );
+
+ LPDIRECTORY pDirectory = static_cast<LPDIRECTORY>(HeapAlloc(GetProcessHeap(), 0, sizeof(DIRECTORY)));
+ assert(pDirectory); // Don't handle OOM conditions
+ pDirectory->hFind = FindFirstFileW(szFileMask, &pDirectory->aFirstData);
+
+ if (!IsValidHandle(pDirectory->hFind))
+ {
+ if ( GetLastError() != ERROR_NO_MORE_FILES )
+ {
+ HeapFree(GetProcessHeap(), 0, pDirectory);
+ pDirectory = nullptr;
+ }
+ }
+ free(szFileMask);
+
+ return static_cast<HANDLE>(pDirectory);
+}
+
+static bool WINAPI EnumDirectory(HANDLE hDirectory, LPWIN32_FIND_DATAW pFindData)
+{
+ LPDIRECTORY pDirectory = static_cast<LPDIRECTORY>(hDirectory);
+ if ( !pDirectory )
+ {
+ SetLastError( ERROR_INVALID_HANDLE );
+ return false;
+ }
+
+ bool fSuccess = false;
+ bool fValid;
+ do
+ {
+ if ( pDirectory->aFirstData.cFileName[0] )
+ {
+ *pFindData = pDirectory->aFirstData;
+ fSuccess = true;
+ pDirectory->aFirstData.cFileName[0] = 0;
+ }
+ else if ( IsValidHandle( pDirectory->hFind ) )
+ fSuccess = FindNextFileW( pDirectory->hFind, pFindData );
+ else
+ {
+ fSuccess = false;
+ SetLastError( ERROR_NO_MORE_FILES );
+ }
+
+ fValid = fSuccess && wcscmp( L".", pFindData->cFileName ) != 0 && wcscmp( L"..", pFindData->cFileName ) != 0;
+
+ } while( fSuccess && !fValid );
+
+ return fSuccess;
+}
+
+static bool WINAPI CloseDirectory(HANDLE hDirectory)
+{
+ bool fSuccess = false;
+ LPDIRECTORY pDirectory = static_cast<LPDIRECTORY>(hDirectory);
+
+ if (pDirectory)
+ {
+ if (IsValidHandle(pDirectory->hFind))
+ fSuccess = FindClose(pDirectory->hFind);
+
+ fSuccess = HeapFree(GetProcessHeap(), 0, pDirectory) && fSuccess;
+ }
+ else
+ SetLastError(ERROR_INVALID_HANDLE);
+
+ return fSuccess;
+}
+
+static oslFileError osl_openLocalRoot(
+ rtl_uString *strDirectoryPath, oslDirectory *pDirectory)
+{
+ if ( !pDirectory )
+ return osl_File_E_INVAL;
+
+ *pDirectory = nullptr;
+
+ OUString strSysPath;
+ oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDirectoryPath), &strSysPath.pData, false);
+ if ( osl_File_E_None != error )
+ return error;
+
+ Directory_Impl* pDirImpl = new (std::nothrow) Directory_Impl;
+ assert(pDirImpl); // Don't handle OOM conditions
+ pDirImpl->m_sDirectoryPath = strSysPath;
+
+ /* Append backslash if necessary */
+
+ /* @@@ToDo
+ use function ensure backslash
+ */
+ sal_uInt32 nLen = pDirImpl->m_sDirectoryPath.getLength();
+ if ( nLen && pDirImpl->m_sDirectoryPath[nLen - 1] != L'\\' )
+ {
+ pDirImpl->m_sDirectoryPath += "\\";
+ }
+
+ pDirImpl->uType = DIRECTORYTYPE_LOCALROOT;
+ pDirImpl->hEnumDrives = OpenLogicalDrivesEnum();
+
+ /* @@@ToDo
+ Use IsValidHandle(...)
+ */
+ if ( pDirImpl->hEnumDrives != INVALID_HANDLE_VALUE )
+ {
+ *pDirectory = static_cast<oslDirectory>(pDirImpl);
+ error = osl_File_E_None;
+ }
+ else
+ {
+ if ( pDirImpl )
+ {
+ delete pDirImpl;
+ pDirImpl = nullptr;
+ }
+
+ error = oslTranslateFileError( GetLastError() );
+ }
+ return error;
+}
+
+static oslFileError osl_openFileDirectory(
+ rtl_uString *strDirectoryPath, oslDirectory *pDirectory)
+{
+ oslFileError error = osl_File_E_None;
+
+ if ( !pDirectory )
+ return osl_File_E_INVAL;
+ *pDirectory = nullptr;
+
+ Directory_Impl *pDirImpl = new (std::nothrow) Directory_Impl;
+ assert(pDirImpl); // Don't handle OOM conditions
+ pDirImpl->m_sDirectoryPath = strDirectoryPath;
+
+ /* Append backslash if necessary */
+
+ /* @@@ToDo
+ use function ensure backslash
+ */
+ sal_uInt32 nLen = pDirImpl->m_sDirectoryPath.getLength();
+ if ( nLen && pDirImpl->m_sDirectoryPath[nLen - 1] != '\\' )
+ pDirImpl->m_sDirectoryPath += "\\";
+
+ pDirImpl->uType = DIRECTORYTYPE_FILESYSTEM;
+ pDirImpl->hDirectory = OpenDirectory( pDirImpl->m_sDirectoryPath.pData );
+
+ if ( !pDirImpl->hDirectory )
+ {
+ error = oslTranslateFileError( GetLastError() );
+
+ delete pDirImpl;
+ pDirImpl = nullptr;
+ }
+
+ *pDirectory = static_cast<oslDirectory>(pDirImpl);
+ return error;
+}
+
+static oslFileError osl_openNetworkServer(
+ rtl_uString *strSysDirPath, oslDirectory *pDirectory)
+{
+ NETRESOURCEW aNetResource;
+ HANDLE hEnum;
+ DWORD dwError;
+
+ ZeroMemory( &aNetResource, sizeof(aNetResource) );
+
+ aNetResource.lpRemoteName = o3tl::toW(strSysDirPath->buffer);
+
+ dwError = WNetOpenEnumW(
+ RESOURCE_GLOBALNET,
+ RESOURCETYPE_DISK,
+ RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER,
+ &aNetResource,
+ &hEnum );
+
+ if ( ERROR_SUCCESS == dwError )
+ {
+ Directory_Impl *pDirImpl = new (std::nothrow) Directory_Impl;
+ assert(pDirImpl); // Don't handle OOM conditions
+ pDirImpl->uType = DIRECTORYTYPE_NETROOT;
+ pDirImpl->hDirectory = hEnum;
+ *pDirectory = static_cast<oslDirectory>(pDirImpl);
+ }
+ return oslTranslateFileError( dwError );
+}
+
+static DWORD create_dir_with_callback(
+ rtl_uString * dir_path,
+ oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc,
+ void* pData)
+{
+ // Create the specified directory and call the
+ // user specified callback function. On success
+ // the function returns ERROR_SUCCESS else a Win32 error code.
+
+ bool bCreated = CreateDirectoryW( o3tl::toW(rtl_uString_getStr( dir_path )), nullptr );
+
+ if ( bCreated )
+ {
+ if (aDirectoryCreationCallbackFunc)
+ {
+ OUString url;
+ osl_getFileURLFromSystemPath(dir_path, &(url.pData));
+ aDirectoryCreationCallbackFunc(pData, url.pData);
+ }
+ return ERROR_SUCCESS;
+ }
+ return GetLastError();
+}
+
+static int path_make_parent(sal_Unicode* path)
+{
+ /* Cut off the last part of the given path to
+ get the parent only, e.g. 'c:\dir\subdir' ->
+ 'c:\dir' or '\\share\sub\dir' -> '\\share\sub'
+ @return The position where the path has been cut
+ off (this is the position of the last backslash).
+ If there are no more parents 0 will be returned,
+ e.g. 'c:\' or '\\Share' have no more parents */
+
+ OSL_PRECOND(rtl_ustr_indexOfChar(path, SLASH) == -1, "Path must not contain slashes");
+ OSL_PRECOND(has_path_parent(path), "Path must have a parent");
+
+ sal_Unicode* pos_last_backslash = path + rtl_ustr_lastIndexOfChar(path, BACKSLASH);
+ *pos_last_backslash = 0;
+ return (pos_last_backslash - path);
+}
+
+static DWORD create_dir_recursively_(
+ rtl_uString * dir_path,
+ oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc,
+ void* pData)
+{
+ OSL_PRECOND(
+ rtl_ustr_lastIndexOfChar_WithLength(dir_path->buffer, dir_path->length, BACKSLASH) != dir_path->length,
+ "Path must not end with a backslash");
+
+ DWORD w32_error = create_dir_with_callback(
+ dir_path, aDirectoryCreationCallbackFunc, pData);
+ if (w32_error == ERROR_SUCCESS)
+ return ERROR_SUCCESS;
+
+ if ((w32_error != ERROR_PATH_NOT_FOUND) || !has_path_parent(dir_path->buffer))
+ return w32_error;
+
+ int pos = path_make_parent(dir_path->buffer); // dir_path->buffer[pos] = 0, restore below
+
+ w32_error = create_dir_recursively_(
+ dir_path, aDirectoryCreationCallbackFunc, pData);
+
+ dir_path->buffer[pos] = BACKSLASH; // restore
+
+ if (ERROR_SUCCESS != w32_error && ERROR_ALREADY_EXISTS != w32_error)
+ return w32_error;
+
+ return create_dir_recursively_(dir_path, aDirectoryCreationCallbackFunc, pData);
+}
+
+oslFileError SAL_CALL osl_createDirectoryPath(
+ rtl_uString* aDirectoryUrl,
+ oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc,
+ void* pData)
+{
+ if (aDirectoryUrl == nullptr)
+ return osl_File_E_INVAL;
+
+ OUString sys_path;
+ oslFileError osl_error =
+ osl_getSystemPathFromFileURL_(OUString::unacquired(&aDirectoryUrl), &sys_path.pData, false);
+
+ if (osl_error != osl_File_E_None)
+ return osl_error;
+
+ osl::systemPathRemoveSeparator(sys_path);
+
+ // const_cast because sys_path is a local copy
+ // which we want to modify inplace instead of
+ // copy it into another buffer on the heap again
+ return oslTranslateFileError(create_dir_recursively_(
+ sys_path.pData, aDirectoryCreationCallbackFunc, pData));
+}
+
+oslFileError SAL_CALL osl_createDirectory(rtl_uString* strPath)
+{
+ return osl_createDirectoryWithFlags(
+ strPath, osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+}
+
+oslFileError osl_createDirectoryWithFlags(rtl_uString * strPath, sal_uInt32)
+{
+ OUString strSysPath;
+ oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false);
+
+ if ( osl_File_E_None != error )
+ return error;
+
+ bool bCreated = CreateDirectoryW(o3tl::toW(strSysPath.getStr()), nullptr);
+ if ( !bCreated )
+ {
+ /*@@@ToDo
+ The following case is a hack because the ucb or the webtop had some
+ problems with the error code that CreateDirectory returns in
+ case the path is only a logical drive, should be removed!
+ */
+
+ if ((strSysPath.getLength() == 2 || (strSysPath.getLength() == 3 && strSysPath[2] == '\\'))
+ && rtl::isAsciiAlpha(strSysPath[0]) && strSysPath[1] == ':')
+ SetLastError( ERROR_ALREADY_EXISTS );
+
+ error = oslTranslateFileError( GetLastError() );
+ }
+
+ return error;
+}
+
+oslFileError SAL_CALL osl_removeDirectory(rtl_uString* strPath)
+{
+ OUString strSysPath;
+ oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false);
+
+ if ( osl_File_E_None == error )
+ {
+ if (RemoveDirectoryW(o3tl::toW(strSysPath.getStr())))
+ error = osl_File_E_None;
+ else
+ error = oslTranslateFileError( GetLastError() );
+ }
+ return error;
+}
+
+oslFileError SAL_CALL osl_openDirectory(rtl_uString *strDirectoryPath, oslDirectory *pDirectory)
+{
+ oslFileError error;
+
+ if ( 0 == rtl_ustr_ascii_compareIgnoreAsciiCase( strDirectoryPath->buffer, "file:///" ) )
+ error = osl_openLocalRoot( strDirectoryPath, pDirectory );
+ else
+ {
+ OUString strSysDirectoryPath;
+ DWORD dwPathType;
+
+ error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDirectoryPath), &strSysDirectoryPath.pData, false);
+
+ if ( osl_File_E_None != error )
+ return error;
+
+ dwPathType = IsValidFilePath(strSysDirectoryPath, VALIDATEPATH_NORMAL, nullptr);
+
+ if ( dwPathType & PATHTYPE_IS_SERVER )
+ error = osl_openNetworkServer(strSysDirectoryPath.pData, pDirectory);
+ else
+ error = osl_openFileDirectory(strSysDirectoryPath.pData, pDirectory);
+ }
+ return error;
+}
+
+static oslFileError osl_getNextNetResource(
+ oslDirectory Directory, oslDirectoryItem *pItem, sal_uInt32 /*uHint*/ )
+{
+ Directory_Impl *pDirImpl = static_cast<Directory_Impl *>(Directory);
+ DirectoryItem_Impl *pItemImpl = nullptr;
+ BYTE buffer[16384];
+ LPNETRESOURCEW lpNetResource = reinterpret_cast<LPNETRESOURCEW>(buffer);
+ DWORD dwError, dwCount, dwBufSize;
+
+ if ( !pItem )
+ return osl_File_E_INVAL;
+ *pItem = nullptr;
+
+ if ( !pDirImpl )
+ return osl_File_E_INVAL;
+
+ dwCount = 1;
+ dwBufSize = sizeof(buffer);
+ dwError = WNetEnumResourceW( pDirImpl->hDirectory, &dwCount, lpNetResource, &dwBufSize );
+
+ switch ( dwError )
+ {
+ case NO_ERROR:
+ case ERROR_MORE_DATA:
+ {
+ pItemImpl = new (std::nothrow) DirectoryItem_Impl;
+ if ( !pItemImpl )
+ return osl_File_E_NOMEM;
+
+ pItemImpl->uType = DIRECTORYITEM_DRIVE;
+ osl_acquireDirectoryItem( static_cast<oslDirectoryItem>(pItemImpl) );
+
+ wcscpy( pItemImpl->cDriveString, lpNetResource->lpRemoteName );
+
+ *pItem = pItemImpl;
+ }
+ return osl_File_E_None;
+ case ERROR_NO_MORE_ITEMS:
+ return osl_File_E_NOENT;
+ default:
+ return oslTranslateFileError( dwError );
+ }
+}
+
+static oslFileError osl_getNextDrive(
+ oslDirectory Directory, oslDirectoryItem *pItem, sal_uInt32 /*uHint*/ )
+{
+ Directory_Impl *pDirImpl = static_cast<Directory_Impl *>(Directory);
+ DirectoryItem_Impl *pItemImpl = nullptr;
+ bool fSuccess;
+
+ if ( !pItem )
+ return osl_File_E_INVAL;
+ *pItem = nullptr;
+
+ if ( !pDirImpl )
+ return osl_File_E_INVAL;
+
+ pItemImpl = new (std::nothrow) DirectoryItem_Impl;
+ if ( !pItemImpl )
+ return osl_File_E_NOMEM;
+
+ pItemImpl->uType = DIRECTORYITEM_DRIVE;
+ osl_acquireDirectoryItem( static_cast<oslDirectoryItem>(pItemImpl) );
+ fSuccess = EnumLogicalDrives( pDirImpl->hEnumDrives, pItemImpl->cDriveString );
+
+ if ( fSuccess )
+ {
+ *pItem = pItemImpl;
+ return osl_File_E_None;
+ }
+ else
+ {
+ delete pItemImpl;
+ return oslTranslateFileError( GetLastError() );
+ }
+}
+
+static oslFileError osl_getNextFileItem(
+ oslDirectory Directory, oslDirectoryItem *pItem, sal_uInt32 /*uHint*/)
+{
+ Directory_Impl *pDirImpl = static_cast<Directory_Impl *>(Directory);
+ DirectoryItem_Impl *pItemImpl = nullptr;
+ bool fFound;
+
+ if ( !pItem )
+ return osl_File_E_INVAL;
+ *pItem = nullptr;
+
+ if ( !pDirImpl )
+ return osl_File_E_INVAL;
+
+ pItemImpl = new (std::nothrow) DirectoryItem_Impl;
+ if ( !pItemImpl )
+ return osl_File_E_NOMEM;
+
+ fFound = EnumDirectory( pDirImpl->hDirectory, &pItemImpl->FindData );
+ if ( !fFound )
+ {
+ delete pItemImpl;
+ return oslTranslateFileError( GetLastError() );
+ }
+
+ pItemImpl->uType = DIRECTORYITEM_FILE;
+ pItemImpl->nRefCount = 1;
+
+ pItemImpl->m_sFullPath = pDirImpl->m_sDirectoryPath + o3tl::toU(pItemImpl->FindData.cFileName);
+
+ pItemImpl->bFullPathNormalized = true;
+ *pItem = static_cast<oslDirectoryItem>(pItemImpl);
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_getNextDirectoryItem(
+ oslDirectory Directory, oslDirectoryItem *pItem, sal_uInt32 uHint)
+{
+ Directory_Impl *pDirImpl = static_cast<Directory_Impl *>(Directory);
+
+ /* Assume failure */
+
+ if ( !pItem )
+ return osl_File_E_INVAL;
+ *pItem = nullptr;
+
+ if ( !pDirImpl )
+ return osl_File_E_INVAL;
+
+ switch ( pDirImpl->uType )
+ {
+ case DIRECTORYTYPE_LOCALROOT:
+ return osl_getNextDrive( Directory, pItem, uHint );
+ case DIRECTORYTYPE_NETROOT:
+ return osl_getNextNetResource( Directory, pItem, uHint );
+ case DIRECTORYTYPE_FILESYSTEM:
+ return osl_getNextFileItem( Directory, pItem, uHint );
+ default:
+ return osl_File_E_INVAL;
+ }
+}
+
+oslFileError SAL_CALL osl_closeDirectory(oslDirectory Directory)
+{
+ Directory_Impl *pDirImpl = static_cast<Directory_Impl *>(Directory);
+ oslFileError eError = osl_File_E_INVAL;
+
+ if ( pDirImpl )
+ {
+ switch ( pDirImpl->uType )
+ {
+ case DIRECTORYTYPE_FILESYSTEM:
+ eError = CloseDirectory( pDirImpl->hDirectory ) ? osl_File_E_None : oslTranslateFileError( GetLastError() );
+ break;
+ case DIRECTORYTYPE_LOCALROOT:
+ eError = CloseLogicalDrivesEnum( pDirImpl->hEnumDrives ) ? osl_File_E_None : oslTranslateFileError( GetLastError() );
+ break;
+ case DIRECTORYTYPE_NETROOT:
+ {
+ DWORD err = WNetCloseEnum(pDirImpl->hDirectory);
+ eError = (err == NO_ERROR) ? osl_File_E_None : oslTranslateFileError(err);
+ }
+ break;
+ default:
+ OSL_FAIL( "Invalid directory type" );
+ break;
+ }
+
+ delete pDirImpl;
+ }
+ return eError;
+}
+
+namespace {
+
+/* Different types of paths */
+enum PATHTYPE
+{
+ PATHTYPE_SYNTAXERROR = 0,
+ PATHTYPE_NETROOT,
+ PATHTYPE_NETSERVER,
+ PATHTYPE_VOLUME,
+ PATHTYPE_FILE
+};
+
+}
+
+oslFileError SAL_CALL osl_getDirectoryItem(rtl_uString *strFilePath, oslDirectoryItem *pItem)
+{
+ oslFileError error = osl_File_E_None;
+ OUString strSysFilePath;
+ PATHTYPE type = PATHTYPE_FILE;
+ DWORD dwPathType;
+
+ /* Assume failure */
+
+ if ( !pItem )
+ return osl_File_E_INVAL;
+
+ *pItem = nullptr;
+
+ error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strFilePath), &strSysFilePath.pData, false);
+
+ if ( osl_File_E_None != error )
+ return error;
+
+ dwPathType = IsValidFilePath( strSysFilePath, VALIDATEPATH_NORMAL, nullptr );
+
+ if ( dwPathType & PATHTYPE_IS_VOLUME )
+ type = PATHTYPE_VOLUME;
+ else if ( dwPathType & PATHTYPE_IS_SERVER )
+ type = PATHTYPE_NETSERVER;
+ else
+ type = PATHTYPE_FILE;
+
+ switch ( type )
+ {
+ case PATHTYPE_NETSERVER:
+ {
+ DirectoryItem_Impl* pItemImpl = new (std::nothrow) DirectoryItem_Impl;
+
+ if ( !pItemImpl )
+ error = osl_File_E_NOMEM;
+
+ if ( osl_File_E_None == error )
+ {
+ pItemImpl->uType = DIRECTORYITEM_SERVER;
+
+ osl_acquireDirectoryItem( static_cast<oslDirectoryItem>(pItemImpl) );
+ pItemImpl->m_sFullPath = strSysFilePath;
+
+ // Assign a title anyway
+ {
+ int iSrc = 2;
+ int iDst = 0;
+
+ while( iSrc < strSysFilePath.getLength() && strSysFilePath[iSrc] && strSysFilePath[iSrc] != '\\')
+ {
+ pItemImpl->FindData.cFileName[iDst++] = strSysFilePath[iSrc++];
+ }
+ }
+
+ *pItem = pItemImpl;
+ }
+ }
+ break;
+ case PATHTYPE_VOLUME:
+ {
+ DirectoryItem_Impl* pItemImpl = new (std::nothrow) DirectoryItem_Impl;
+
+ if ( !pItemImpl )
+ error = osl_File_E_NOMEM;
+
+ if ( osl_File_E_None == error )
+ {
+ pItemImpl->uType = DIRECTORYITEM_DRIVE;
+
+ osl_acquireDirectoryItem( static_cast<oslDirectoryItem>(pItemImpl) );
+
+ wcscpy( pItemImpl->cDriveString, o3tl::toW(strSysFilePath.getStr()) );
+ pItemImpl->cDriveString[0] = rtl::toAsciiUpperCase( pItemImpl->cDriveString[0] );
+
+ if ( pItemImpl->cDriveString[wcslen(pItemImpl->cDriveString) - 1] != '\\' )
+ wcscat( pItemImpl->cDriveString, L"\\" );
+
+ *pItem = pItemImpl;
+ }
+ }
+ break;
+ case PATHTYPE_SYNTAXERROR:
+ case PATHTYPE_NETROOT:
+ case PATHTYPE_FILE:
+ {
+ HANDLE hFind;
+ WIN32_FIND_DATAW aFindData;
+
+ if (!strSysFilePath.isEmpty() && strSysFilePath[strSysFilePath.getLength() - 1] == '\\')
+ strSysFilePath = strSysFilePath.copy(0, strSysFilePath.getLength() - 1);
+
+ hFind = FindFirstFileW( o3tl::toW(strSysFilePath.getStr()), &aFindData );
+
+ if ( hFind != INVALID_HANDLE_VALUE )
+ {
+ DirectoryItem_Impl *pItemImpl = new (std::nothrow) DirectoryItem_Impl;
+ if (!pItemImpl)
+ error = osl_File_E_NOMEM;
+
+ if (osl_File_E_None == error)
+ {
+ osl_acquireDirectoryItem(static_cast<oslDirectoryItem>(pItemImpl));
+
+ CopyMemory(&pItemImpl->FindData, &aFindData, sizeof(WIN32_FIND_DATAW));
+ pItemImpl->m_sFullPath = strSysFilePath;
+
+ pItemImpl->uType = DIRECTORYITEM_FILE;
+ *pItem = pItemImpl;
+ }
+
+ FindClose( hFind );
+ }
+ else
+ error = oslTranslateFileError( GetLastError() );
+ }
+ break;
+ }
+
+ return error;
+}
+
+oslFileError SAL_CALL osl_acquireDirectoryItem( oslDirectoryItem Item )
+{
+ DirectoryItem_Impl *pItemImpl = static_cast<DirectoryItem_Impl *>(Item);
+
+ if ( !pItemImpl )
+ return osl_File_E_INVAL;
+
+ pItemImpl->nRefCount++;
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_releaseDirectoryItem( oslDirectoryItem Item )
+{
+ DirectoryItem_Impl *pItemImpl = static_cast<DirectoryItem_Impl *>(Item);
+
+ if ( !pItemImpl )
+ return osl_File_E_INVAL;
+
+ if ( ! --pItemImpl->nRefCount )
+ delete pItemImpl;
+
+ return osl_File_E_None;
+}
+
+sal_Bool
+SAL_CALL osl_identicalDirectoryItem( oslDirectoryItem a, oslDirectoryItem b)
+{
+ DirectoryItem_Impl *pA = static_cast<DirectoryItem_Impl *>(a);
+ DirectoryItem_Impl *pB = static_cast<DirectoryItem_Impl *>(b);
+ if (a == b)
+ return true;
+ /* same name => same item, unless renaming / moving madness has occurred */
+ if (pA->m_sFullPath == pB->m_sFullPath)
+ return true;
+
+ // FIXME: as/when/if this is used in anger on Windows we could
+ // do better here.
+
+ return false;
+}
+
+static bool is_floppy_A_present()
+{ return (GetLogicalDrives() & 1); }
+
+static bool is_floppy_B_present()
+{ return (GetLogicalDrives() & 2); }
+
+static bool is_floppy_volume_mount_point(const OUString& path)
+{
+ // determines if a volume mount point shows to a floppy
+ // disk by comparing the unique volume names
+ static const LPCWSTR FLOPPY_A = L"A:\\";
+ static const LPCWSTR FLOPPY_B = L"B:\\";
+
+ OUString p(path);
+ osl::systemPathEnsureSeparator(p);
+
+ WCHAR vn[51];
+ if (GetVolumeNameForVolumeMountPointW(o3tl::toW(p.getStr()), vn, SAL_N_ELEMENTS(vn)))
+ {
+ WCHAR vnfloppy[51];
+ if (is_floppy_A_present() &&
+ GetVolumeNameForVolumeMountPointW(FLOPPY_A, vnfloppy, SAL_N_ELEMENTS(vnfloppy)) &&
+ (0 == wcscmp(vn, vnfloppy)))
+ return true;
+
+ if (is_floppy_B_present() &&
+ GetVolumeNameForVolumeMountPointW(FLOPPY_B, vnfloppy, SAL_N_ELEMENTS(vnfloppy)) &&
+ (0 == wcscmp(vn, vnfloppy)))
+ return true;
+ }
+ return false;
+}
+
+static bool is_floppy_drive(const OUString& path)
+{
+ static const LPCWSTR FLOPPY_DRV_LETTERS = L"AaBb";
+
+ // we must take into account that even a floppy
+ // drive may be mounted to a directory so checking
+ // for the drive letter alone is not sufficient
+ // we must compare the unique volume name with
+ // that of the available floppy disks
+
+ const sal_Unicode* pszPath = path.getStr();
+ return ((wcschr(FLOPPY_DRV_LETTERS, pszPath[0]) && (L':' == pszPath[1])) || is_floppy_volume_mount_point(path));
+}
+
+static bool is_volume_mount_point(const OUString& path)
+{
+ OUString p(path);
+ osl::systemPathRemoveSeparator(p);
+
+ if (is_floppy_drive(p))
+ return false;
+
+ DWORD fattr = GetFileAttributesW(o3tl::toW(p.getStr()));
+ if ((INVALID_FILE_ATTRIBUTES == fattr) ||
+ !(FILE_ATTRIBUTE_REPARSE_POINT & fattr))
+ return false;
+
+ bool is_volume_root = false;
+ WIN32_FIND_DATAW find_data;
+ HANDLE h_find = FindFirstFileW(o3tl::toW(p.getStr()), &find_data);
+
+ if (IsValidHandle(h_find) &&
+ (FILE_ATTRIBUTE_REPARSE_POINT & find_data.dwFileAttributes) &&
+ (IO_REPARSE_TAG_MOUNT_POINT == find_data.dwReserved0))
+ {
+ is_volume_root = true;
+ }
+ if (IsValidHandle(h_find))
+ FindClose(h_find);
+ return is_volume_root;
+}
+
+static UINT get_volume_mount_point_drive_type(const OUString& path)
+{
+ if (0 == path.getLength())
+ return GetDriveTypeW(nullptr);
+
+ OUString p(path);
+ osl::systemPathEnsureSeparator(p);
+
+ WCHAR vn[51];
+ if (GetVolumeNameForVolumeMountPointW(o3tl::toW(p.getStr()), vn, SAL_N_ELEMENTS(vn)))
+ return GetDriveTypeW(vn);
+
+ return DRIVE_NO_ROOT_DIR;
+}
+
+static bool is_drivetype_request(sal_uInt32 field_mask)
+{
+ return (field_mask & osl_VolumeInfo_Mask_Attributes);
+}
+
+static oslFileError osl_get_drive_type(
+ const OUString& path, oslVolumeInfo* pInfo)
+{
+ // GetDriveType fails on empty volume mount points
+ // see Knowledge Base Q244089
+ UINT drive_type;
+ if (is_volume_mount_point(path))
+ drive_type = get_volume_mount_point_drive_type(path);
+ else
+ drive_type = GetDriveTypeW(o3tl::toW(path.getStr()));
+
+ if (DRIVE_NO_ROOT_DIR == drive_type)
+ return oslTranslateFileError(ERROR_INVALID_DRIVE);
+
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_Attributes;
+
+ switch (drive_type)
+ {
+ case DRIVE_CDROM:
+ pInfo->uAttributes |= osl_Volume_Attribute_CompactDisc | osl_Volume_Attribute_Removeable;
+ break;
+ case DRIVE_REMOVABLE:
+ pInfo->uAttributes |= osl_Volume_Attribute_Removeable;
+ if (is_floppy_drive(path))
+ pInfo->uAttributes |= osl_Volume_Attribute_FloppyDisk;
+ break;
+ case DRIVE_FIXED:
+ pInfo->uAttributes |= osl_Volume_Attribute_FixedDisk;
+ break;
+ case DRIVE_RAMDISK:
+ pInfo->uAttributes |= osl_Volume_Attribute_RAMDisk;
+ break;
+ case DRIVE_REMOTE:
+ pInfo->uAttributes |= osl_Volume_Attribute_Remote;
+ break;
+ case DRIVE_UNKNOWN:
+ pInfo->uAttributes = 0;
+ break;
+ default:
+ pInfo->uValidFields &= ~osl_VolumeInfo_Mask_Attributes;
+ pInfo->uAttributes = 0;
+ break;
+ }
+ return osl_File_E_None;
+}
+
+static bool is_volume_space_info_request(sal_uInt32 field_mask)
+{
+ return (field_mask &
+ (osl_VolumeInfo_Mask_TotalSpace |
+ osl_VolumeInfo_Mask_UsedSpace |
+ osl_VolumeInfo_Mask_FreeSpace));
+}
+
+static void get_volume_space_information(
+ const OUString& path, oslVolumeInfo *pInfo)
+{
+ bool ret = GetDiskFreeSpaceExW(
+ o3tl::toW(path.getStr()),
+ reinterpret_cast<PULARGE_INTEGER>(&pInfo->uFreeSpace),
+ reinterpret_cast<PULARGE_INTEGER>(&pInfo->uTotalSpace),
+ nullptr);
+
+ if (ret)
+ {
+ pInfo->uUsedSpace = pInfo->uTotalSpace - pInfo->uFreeSpace;
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_TotalSpace |
+ osl_VolumeInfo_Mask_UsedSpace |
+ osl_VolumeInfo_Mask_FreeSpace;
+ }
+}
+
+static bool is_filesystem_attributes_request(sal_uInt32 field_mask)
+{
+ return (field_mask &
+ (osl_VolumeInfo_Mask_MaxNameLength |
+ osl_VolumeInfo_Mask_MaxPathLength |
+ osl_VolumeInfo_Mask_FileSystemName |
+ osl_VolumeInfo_Mask_FileSystemCaseHandling));
+}
+
+static oslFileError get_filesystem_attributes(
+ const OUString& path, sal_uInt32 field_mask, oslVolumeInfo* pInfo)
+{
+ pInfo->uAttributes = 0;
+
+ // osl_get_drive_type must be called first because
+ // this function resets osl_VolumeInfo_Mask_Attributes
+ // on failure
+ if (is_drivetype_request(field_mask))
+ {
+ oslFileError osl_error = osl_get_drive_type(path, pInfo);
+ if (osl_File_E_None != osl_error)
+ return osl_error;
+ }
+ if (is_filesystem_attributes_request(field_mask))
+ {
+ /* the following two parameters can not be longer than MAX_PATH+1 */
+ WCHAR vn[MAX_PATH+1];
+ WCHAR fsn[MAX_PATH+1];
+
+ DWORD serial;
+ DWORD mcl;
+ DWORD flags;
+
+ LPCWSTR pszPath = o3tl::toW(path.getStr());
+ if (GetVolumeInformationW(pszPath, vn, MAX_PATH+1, &serial, &mcl, &flags, fsn, MAX_PATH+1))
+ {
+ // Currently sal does not use this value, instead MAX_PATH is used
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_MaxNameLength;
+ pInfo->uMaxNameLength = mcl;
+
+ // Should the uMaxPathLength be set to 32767, "\\?\" prefix allows it
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_MaxPathLength;
+ pInfo->uMaxPathLength = MAX_PATH;
+
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_FileSystemName;
+ rtl_uString_newFromStr(&pInfo->ustrFileSystemName, o3tl::toU(fsn));
+
+ // volumes (even NTFS) will always be considered case
+ // insensitive because the Win32 API is not able to
+ // deal with case sensitive volumes see M$ Knowledge Base
+ // article 100625 that's why we never set the attribute
+ // osl_Volume_Attribute_Case_Sensitive
+
+ if (flags & FS_CASE_IS_PRESERVED)
+ pInfo->uAttributes |= osl_Volume_Attribute_Case_Is_Preserved;
+
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_Attributes;
+ }
+ }
+ return osl_File_E_None;
+}
+
+static bool path_get_parent(OUString& path)
+{
+ OSL_PRECOND(path.lastIndexOf(SLASH) == -1, "Path must not have slashes");
+
+ if (!has_path_parent(path))
+ {
+ sal_Int32 i = path.lastIndexOf(BACKSLASH);
+ if (-1 < i)
+ {
+ path = OUString(path.getStr(), i);
+ return true;
+ }
+ }
+ return false;
+}
+
+static void path_travel_to_volume_root(const OUString& system_path, OUString& volume_root)
+{
+ OUString sys_path(system_path);
+
+ while(!is_volume_mount_point(sys_path) && path_get_parent(sys_path))
+ /**/;
+
+ volume_root = sys_path;
+ osl::systemPathEnsureSeparator(volume_root);
+}
+
+oslFileError SAL_CALL osl_getVolumeInformation(
+ rtl_uString *ustrURL, oslVolumeInfo *pInfo, sal_uInt32 uFieldMask )
+{
+ if (!pInfo)
+ return osl_File_E_INVAL;
+
+ OUString system_path;
+ oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrURL), &system_path.pData, false);
+
+ if (osl_File_E_None != error)
+ return error;
+
+ OUString volume_root;
+ path_travel_to_volume_root(system_path, volume_root);
+
+ pInfo->uValidFields = 0;
+
+ if ((error = get_filesystem_attributes(volume_root, uFieldMask, pInfo)) != osl_File_E_None)
+ return error;
+
+ if (is_volume_space_info_request(uFieldMask))
+ get_volume_space_information(volume_root, pInfo);
+
+ if (uFieldMask & osl_VolumeInfo_Mask_DeviceHandle)
+ {
+ error = osl_getFileURLFromSystemPath(volume_root.pData, reinterpret_cast<rtl_uString**>(&pInfo->pDeviceHandle));
+ if (error != osl_File_E_None)
+ return error;
+ pInfo->uValidFields |= osl_VolumeInfo_Mask_DeviceHandle;
+ }
+
+ return osl_File_E_None;
+}
+
+static oslFileError osl_getDriveInfo(
+ oslDirectoryItem Item, oslFileStatus *pStatus, sal_uInt32 uFieldMask)
+{
+ DirectoryItem_Impl *pItemImpl = static_cast<DirectoryItem_Impl *>(Item);
+ WCHAR cDrive[3] = L"A:";
+ WCHAR cRoot[4] = L"A:\\";
+
+ if ( !pItemImpl )
+ return osl_File_E_INVAL;
+
+ pStatus->uValidFields = 0;
+
+ cDrive[0] = pItemImpl->cDriveString[0];
+ cRoot[0] = pItemImpl->cDriveString[0];
+
+ if ( uFieldMask & osl_FileStatus_Mask_FileName )
+ {
+ if ( pItemImpl->cDriveString[0] == '\\' && pItemImpl->cDriveString[1] == '\\' )
+ {
+ LPCWSTR lpFirstBkSlash = wcschr( &pItemImpl->cDriveString[2], '\\' );
+
+ if ( lpFirstBkSlash && lpFirstBkSlash[1] )
+ {
+ LPCWSTR lpLastBkSlash = wcschr( &lpFirstBkSlash[1], '\\' );
+
+ if ( lpLastBkSlash )
+ rtl_uString_newFromStr_WithLength( &pStatus->ustrFileName, o3tl::toU(&lpFirstBkSlash[1]), lpLastBkSlash - lpFirstBkSlash - 1 );
+ else
+ rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(&lpFirstBkSlash[1]) );
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileName;
+ }
+ }
+ else switch ( GetDriveTypeW( cRoot ) )
+ {
+ case DRIVE_REMOTE:
+ {
+ WCHAR szBuffer[1024];
+ DWORD const dwBufsizeConst = SAL_N_ELEMENTS(szBuffer);
+ DWORD dwBufsize = dwBufsizeConst;
+
+ DWORD dwResult = WNetGetConnectionW( cDrive, szBuffer, &dwBufsize );
+ if ( NO_ERROR == dwResult )
+ {
+ WCHAR szFileName[dwBufsizeConst + 16];
+
+ swprintf( szFileName, L"%s [%s]", cDrive, szBuffer );
+ rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(szFileName) );
+ }
+ else
+ rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(cDrive) );
+ }
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileName;
+ break;
+ case DRIVE_FIXED:
+ {
+ WCHAR szVolumeNameBuffer[1024];
+ DWORD const dwBufsizeConst = SAL_N_ELEMENTS(szVolumeNameBuffer);
+
+ if ( GetVolumeInformationW( cRoot, szVolumeNameBuffer, dwBufsizeConst, nullptr, nullptr, nullptr, nullptr, 0 ) )
+ {
+ WCHAR szFileName[dwBufsizeConst + 16];
+
+ swprintf( szFileName, L"%s [%s]", cDrive, szVolumeNameBuffer );
+ rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(szFileName) );
+ }
+ else
+ rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(cDrive) );
+ }
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileName;
+ break;
+ case DRIVE_CDROM:
+ case DRIVE_REMOVABLE:
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileName;
+ rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(cRoot) );
+ break;
+ case DRIVE_UNKNOWN:
+ default:
+ break;
+ }
+ }
+
+ pStatus->eType = osl_File_Type_Volume;
+ pStatus->uValidFields |= osl_FileStatus_Mask_Type;
+
+ if ( uFieldMask & osl_FileStatus_Mask_FileURL )
+ {
+ rtl_uString *ustrSystemPath = nullptr;
+
+ rtl_uString_newFromStr( &ustrSystemPath, o3tl::toU(pItemImpl->cDriveString) );
+ oslFileError error = osl_getFileURLFromSystemPath( ustrSystemPath, &pStatus->ustrFileURL );
+ rtl_uString_release( ustrSystemPath );
+ if (error != osl_File_E_None)
+ return error;
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileURL;
+ }
+ return osl_File_E_None;
+}
+
+static oslFileError osl_getServerInfo(
+ oslDirectoryItem Item, oslFileStatus *pStatus, sal_uInt32 uFieldMask )
+{
+ DirectoryItem_Impl *pItemImpl = static_cast<DirectoryItem_Impl *>(Item);
+ if ( !pItemImpl )
+ return osl_File_E_INVAL;
+
+ pStatus->uValidFields = 0;
+ pStatus->eType = osl_File_Type_Directory;
+ pStatus->uValidFields |= osl_FileStatus_Mask_Type;
+
+ if ( uFieldMask & osl_FileStatus_Mask_FileURL )
+ {
+ oslFileError error = osl_getFileURLFromSystemPath( pItemImpl->m_sFullPath.pData, &pStatus->ustrFileURL );
+ if (error != osl_File_E_None)
+ return error;
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileURL;
+ }
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_getFileStatus(
+ oslDirectoryItem Item,
+ oslFileStatus *pStatus,
+ sal_uInt32 uFieldMask )
+{
+ DirectoryItem_Impl *pItemImpl = static_cast<DirectoryItem_Impl *>(Item);
+
+ if ( !pItemImpl )
+ return osl_File_E_INVAL;
+
+ switch ( pItemImpl->uType )
+ {
+ case DIRECTORYITEM_DRIVE:
+ return osl_getDriveInfo( Item, pStatus, uFieldMask );
+ case DIRECTORYITEM_SERVER:
+ return osl_getServerInfo( Item, pStatus, uFieldMask );
+ default:
+ break;
+ }
+
+ OUString sFullPath(pItemImpl->m_sFullPath);
+
+ // Prefix long paths, windows API calls expect this prefix
+ // (only local paths starting with something like C: or D:)
+ if (sFullPath.getLength() >= MAX_PATH && isalpha(sFullPath[0]) && sFullPath[1] == ':')
+ sFullPath = "\\\\?\\" + sFullPath;
+
+ if ( uFieldMask & osl_FileStatus_Mask_Validate )
+ {
+ HANDLE hFind = FindFirstFileW( o3tl::toW(sFullPath.getStr() ), &pItemImpl->FindData );
+
+ if ( hFind != INVALID_HANDLE_VALUE )
+ FindClose( hFind );
+ else
+ return oslTranslateFileError( GetLastError() );
+
+ uFieldMask &= ~ osl_FileStatus_Mask_Validate;
+ }
+
+ /* If no fields to retrieve left ignore pStatus */
+ if ( !uFieldMask )
+ return osl_File_E_None;
+
+ /* Otherwise, this must be a valid pointer */
+ if ( !pStatus )
+ return osl_File_E_INVAL;
+
+ if ( pStatus->uStructSize != sizeof(oslFileStatus) )
+ return osl_File_E_INVAL;
+
+ pStatus->uValidFields = 0;
+
+ /* File time stamps */
+
+ if ( (uFieldMask & osl_FileStatus_Mask_ModifyTime) &&
+ FileTimeToTimeValue( &pItemImpl->FindData.ftLastWriteTime, &pStatus->aModifyTime ) )
+ pStatus->uValidFields |= osl_FileStatus_Mask_ModifyTime;
+
+ if ( (uFieldMask & osl_FileStatus_Mask_AccessTime) &&
+ FileTimeToTimeValue( &pItemImpl->FindData.ftLastAccessTime, &pStatus->aAccessTime ) )
+ pStatus->uValidFields |= osl_FileStatus_Mask_AccessTime;
+
+ if ( (uFieldMask & osl_FileStatus_Mask_CreationTime) &&
+ FileTimeToTimeValue( &pItemImpl->FindData.ftCreationTime, &pStatus->aCreationTime ) )
+ pStatus->uValidFields |= osl_FileStatus_Mask_CreationTime;
+
+ /* Most of the fields are already set, regardless of required fields */
+
+ rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(pItemImpl->FindData.cFileName) );
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileName;
+
+ if ((FILE_ATTRIBUTE_REPARSE_POINT & pItemImpl->FindData.dwFileAttributes) &&
+ (IO_REPARSE_TAG_MOUNT_POINT == pItemImpl->FindData.dwReserved0))
+ pStatus->eType = osl_File_Type_Volume;
+ else if (pItemImpl->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ pStatus->eType = osl_File_Type_Directory;
+ else
+ pStatus->eType = osl_File_Type_Regular;
+
+ pStatus->uValidFields |= osl_FileStatus_Mask_Type;
+
+ pStatus->uAttributes = pItemImpl->FindData.dwFileAttributes;
+ pStatus->uValidFields |= osl_FileStatus_Mask_Attributes;
+
+ pStatus->uFileSize = static_cast<sal_uInt64>(pItemImpl->FindData.nFileSizeLow) + (static_cast<sal_uInt64>(pItemImpl->FindData.nFileSizeHigh) << 32);
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileSize;
+
+ if ( uFieldMask & osl_FileStatus_Mask_LinkTargetURL )
+ {
+ oslFileError error = osl_getFileURLFromSystemPath( sFullPath.pData, &pStatus->ustrLinkTargetURL );
+ if (error != osl_File_E_None)
+ return error;
+
+ pStatus->uValidFields |= osl_FileStatus_Mask_LinkTargetURL;
+ }
+
+ if ( uFieldMask & osl_FileStatus_Mask_FileURL )
+ {
+ if ( !pItemImpl->bFullPathNormalized )
+ {
+ ::osl::LongPathBuffer<sal_Unicode> aBuffer(MAX_LONG_PATH);
+ sal_uInt32 nNewLen = GetLongPathNameW(o3tl::toW(sFullPath.getStr()), o3tl::toW(aBuffer),
+ aBuffer.getBufSizeInSymbols());
+
+ if ( nNewLen )
+ {
+ /* Capitalizes drive name (single letter). Windows file paths are processed
+ case-sensitively. While parsing a path, function osl_DirectoryItem has case
+ PATHTYPE_VOLUME for drives, and capitalizes them. That can be overwritten by
+ function osl_getFileStatus, in it win32 api GetLongPathNameW does no
+ capitalization. Thus it needs to be postprocessed.*/
+ sal_Int32 nIndex = rtl_ustr_indexOfChar(aBuffer, ':');
+ if (nIndex > 0) {
+ aBuffer[nIndex - 1] = rtl::toAsciiUpperCase(aBuffer[nIndex - 1]);
+ }
+
+ pItemImpl->m_sFullPath = OUString(&*aBuffer, nNewLen);
+ sFullPath = pItemImpl->m_sFullPath;
+ pItemImpl->bFullPathNormalized = true;
+ }
+ }
+
+ oslFileError error = osl_getFileURLFromSystemPath( sFullPath.pData, &pStatus->ustrFileURL );
+ if (error != osl_File_E_None)
+ return error;
+ pStatus->uValidFields |= osl_FileStatus_Mask_FileURL;
+ }
+
+ return osl_File_E_None;
+}
+
+oslFileError SAL_CALL osl_setFileAttributes(
+ rtl_uString *ustrFileURL,
+ sal_uInt64 uAttributes )
+{
+ oslFileError error;
+ OUString ustrSysPath;
+ DWORD dwFileAttributes;
+ bool fSuccess;
+
+ // Converts the normalized path into a systempath
+ error = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrFileURL), &ustrSysPath.pData, false);
+
+ if ( osl_File_E_None != error )
+ return error;
+
+ dwFileAttributes = GetFileAttributesW(o3tl::toW(ustrSysPath.getStr()));
+
+ if ( DWORD(-1) != dwFileAttributes )
+ {
+ dwFileAttributes &= ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN);
+
+ if ( uAttributes & osl_File_Attribute_ReadOnly )
+ dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
+
+ if ( uAttributes & osl_File_Attribute_Hidden )
+ dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;
+
+ fSuccess = SetFileAttributesW(o3tl::toW(ustrSysPath.getStr()), dwFileAttributes);
+ }
+ else
+ {
+ fSuccess = false;
+ }
+
+ if ( !fSuccess )
+ error = oslTranslateFileError( GetLastError() );
+
+ return error;
+}
+
+oslFileError SAL_CALL osl_setFileTime(
+ rtl_uString *filePath,
+ const TimeValue *aCreationTime,
+ const TimeValue *aLastAccessTime,
+ const TimeValue *aLastWriteTime)
+{
+ oslFileError error;
+ OUString sysPath;
+ FILETIME *lpCreationTime=nullptr;
+ FILETIME *lpLastAccessTime=nullptr;
+ FILETIME *lpLastWriteTime=nullptr;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ HANDLE hFile;
+ bool fSuccess;
+
+ error=osl_getSystemPathFromFileURL_(OUString::unacquired(&filePath), &sysPath.pData, false);
+
+ if (error==osl_File_E_INVAL)
+ return error;
+
+ hFile=CreateFileW(o3tl::toW(sysPath.getStr()), GENERIC_WRITE, 0, nullptr , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
+
+ if (hFile==INVALID_HANDLE_VALUE)
+ return osl_File_E_NOENT;
+
+ if (TimeValueToFileTime(aCreationTime, &ftCreationTime))
+ lpCreationTime=&ftCreationTime;
+
+ if (TimeValueToFileTime(aLastAccessTime, &ftLastAccessTime))
+ lpLastAccessTime=&ftLastAccessTime;
+
+ if (TimeValueToFileTime(aLastWriteTime, &ftLastWriteTime))
+ lpLastWriteTime=&ftLastWriteTime;
+
+ fSuccess=SetFileTime(hFile, lpCreationTime, lpLastAccessTime, lpLastWriteTime);
+
+ CloseHandle(hFile);
+
+ if (!fSuccess)
+ return osl_File_E_INVAL;
+ else
+ return osl_File_E_None;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/file_error.cxx b/sal/osl/w32/file_error.cxx
new file mode 100644
index 000000000..feefaca38
--- /dev/null
+++ b/sal/osl/w32/file_error.cxx
@@ -0,0 +1,125 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "file_error.hxx"
+#include <winerror.h>
+
+namespace {
+
+/* OS error to oslFileError values mapping table */
+struct osl_file_error_entry
+{
+ unsigned long oscode; /* OS return value */
+ int errnocode; /* oslFileError code */
+};
+
+}
+
+const struct osl_file_error_entry errtable[] = {
+ { ERROR_SUCCESS, osl_File_E_None }, /* 0 */
+ { ERROR_INVALID_FUNCTION, osl_File_E_INVAL }, /* 1 */
+ { ERROR_FILE_NOT_FOUND, osl_File_E_NOENT }, /* 2 */
+ { ERROR_PATH_NOT_FOUND, osl_File_E_NOENT }, /* 3 */
+ { ERROR_TOO_MANY_OPEN_FILES, osl_File_E_MFILE }, /* 4 */
+ { ERROR_ACCESS_DENIED, osl_File_E_ACCES }, /* 5 */
+ { ERROR_INVALID_HANDLE, osl_File_E_BADF }, /* 6 */
+ { ERROR_ARENA_TRASHED, osl_File_E_NOMEM }, /* 7 */
+ { ERROR_NOT_ENOUGH_MEMORY, osl_File_E_NOMEM }, /* 8 */
+ { ERROR_INVALID_BLOCK, osl_File_E_NOMEM }, /* 9 */
+ { ERROR_BAD_ENVIRONMENT, osl_File_E_2BIG }, /* 10 */
+ { ERROR_BAD_FORMAT, osl_File_E_NOEXEC }, /* 11 */
+ { ERROR_INVALID_ACCESS, osl_File_E_INVAL }, /* 12 */
+ { ERROR_INVALID_DATA, osl_File_E_INVAL }, /* 13 */
+ { ERROR_INVALID_DRIVE, osl_File_E_NOENT }, /* 15 */
+ { ERROR_CURRENT_DIRECTORY, osl_File_E_ACCES }, /* 16 */
+ { ERROR_NOT_SAME_DEVICE, osl_File_E_XDEV }, /* 17 */
+ { ERROR_NO_MORE_FILES, osl_File_E_NOENT }, /* 18 */
+ { ERROR_NOT_READY, osl_File_E_NOTREADY }, /* 21 */
+ { ERROR_SHARING_VIOLATION, osl_File_E_ACCES }, /* 32 */
+ { ERROR_LOCK_VIOLATION, osl_File_E_ACCES }, /* 33 */
+ { ERROR_BAD_NETPATH, osl_File_E_NOENT }, /* 53 */
+ { ERROR_NETWORK_ACCESS_DENIED, osl_File_E_ACCES }, /* 65 */
+ { ERROR_BAD_NET_NAME, osl_File_E_NOENT }, /* 67 */
+ { ERROR_FILE_EXISTS, osl_File_E_EXIST }, /* 80 */
+ { ERROR_CANNOT_MAKE, osl_File_E_ACCES }, /* 82 */
+ { ERROR_FAIL_I24, osl_File_E_ACCES }, /* 83 */
+ { ERROR_INVALID_PARAMETER, osl_File_E_INVAL }, /* 87 */
+ { ERROR_NO_PROC_SLOTS, osl_File_E_AGAIN }, /* 89 */
+ { ERROR_DRIVE_LOCKED, osl_File_E_ACCES }, /* 108 */
+ { ERROR_BROKEN_PIPE, osl_File_E_PIPE }, /* 109 */
+ { ERROR_DISK_FULL, osl_File_E_NOSPC }, /* 112 */
+ { ERROR_INVALID_TARGET_HANDLE, osl_File_E_BADF }, /* 114 */
+ { ERROR_INVALID_NAME, osl_File_E_NOENT }, /* 123 */
+ { ERROR_INVALID_HANDLE, osl_File_E_INVAL }, /* 124 */
+ { ERROR_WAIT_NO_CHILDREN, osl_File_E_CHILD }, /* 128 */
+ { ERROR_CHILD_NOT_COMPLETE, osl_File_E_CHILD }, /* 129 */
+ { ERROR_DIRECT_ACCESS_HANDLE, osl_File_E_BADF }, /* 130 */
+ { ERROR_NEGATIVE_SEEK, osl_File_E_INVAL }, /* 131 */
+ { ERROR_SEEK_ON_DEVICE, osl_File_E_ACCES }, /* 132 */
+ { ERROR_DIR_NOT_EMPTY, osl_File_E_NOTEMPTY }, /* 145 */
+ { ERROR_NOT_LOCKED, osl_File_E_ACCES }, /* 158 */
+ { ERROR_BAD_PATHNAME, osl_File_E_NOENT }, /* 161 */
+ { ERROR_MAX_THRDS_REACHED, osl_File_E_AGAIN }, /* 164 */
+ { ERROR_LOCK_FAILED, osl_File_E_ACCES }, /* 167 */
+ { ERROR_ALREADY_EXISTS, osl_File_E_EXIST }, /* 183 */
+ { ERROR_FILENAME_EXCED_RANGE, osl_File_E_NOENT }, /* 206 */
+ { ERROR_NESTING_NOT_ALLOWED, osl_File_E_AGAIN }, /* 215 */
+ { ERROR_FILE_CHECKED_OUT, osl_File_E_ACCES }, /* 220 */
+ { ERROR_DIRECTORY, osl_File_E_NOTDIR }, /* 267 */
+ { ERROR_NOT_ENOUGH_QUOTA, osl_File_E_NOMEM }, /* 1816 */
+ { ERROR_CANT_ACCESS_FILE, osl_File_E_ACCES }, /* 1920 */
+ { ERROR_UNEXP_NET_ERR, osl_File_E_NETWORK } /* 59 */
+};
+
+/* The following two constants must be the minimum and maximum
+ values in the (contiguous) range of osl_File_E_xec Failure errors.
+*/
+#define MIN_EXEC_ERROR ERROR_INVALID_STARTING_CODESEG
+#define MAX_EXEC_ERROR ERROR_INFLOOP_IN_RELOC_CHAIN
+
+/* These are the low and high value in the range of errors that are
+ access violations
+*/
+#define MIN_EACCES_RANGE ERROR_WRITE_PROTECT
+#define MAX_EACCES_RANGE ERROR_SHARING_BUFFER_EXCEEDED
+
+oslFileError oslTranslateFileError (/*DWORD*/ unsigned long dwError)
+{
+ static const int n = SAL_N_ELEMENTS(errtable);
+
+ int i;
+ for (i = 0; i < n; ++i )
+ {
+ if (dwError == errtable[i].oscode)
+ return static_cast<oslFileError>(errtable[i].errnocode);
+ }
+
+ /* The error code wasn't in the table. We check for a range of
+ osl_File_E_ACCES errors or exec failure errors (ENOEXEC).
+ Otherwise osl_File_E_INVAL is returned.
+ */
+ if ( (dwError >= MIN_EACCES_RANGE) && (dwError <= MAX_EACCES_RANGE) )
+ return osl_File_E_ACCES;
+ else if ( (dwError >= MIN_EXEC_ERROR) && (dwError <= MAX_EXEC_ERROR) )
+ return osl_File_E_NOEXEC;
+ else
+ return osl_File_E_INVAL;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/file_error.hxx b/sal/osl/w32/file_error.hxx
new file mode 100644
index 000000000..4da87c132
--- /dev/null
+++ b/sal/osl/w32/file_error.hxx
@@ -0,0 +1,29 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_FILE_ERROR_HXX
+#define INCLUDED_SAL_OSL_W32_FILE_ERROR_HXX
+
+#include <osl/file.h>
+
+oslFileError oslTranslateFileError(/*DWORD*/ unsigned long dwError);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/file_url.cxx b/sal/osl/w32/file_url.cxx
new file mode 100644
index 000000000..8c525042d
--- /dev/null
+++ b/sal/osl/w32/file_url.cxx
@@ -0,0 +1,990 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+#include <sal/log.hxx>
+
+#include <algorithm>
+#include <optional>
+#include <stack>
+#include <string_view>
+
+#include <systools/win32/uwinapi.h>
+
+#include "file_url.hxx"
+#include "file_error.hxx"
+
+#include <rtl/alloc.h>
+#include <rtl/character.hxx>
+#include <rtl/strbuf.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/mutex.h>
+#include <o3tl/char16_t2wchar_t.hxx>
+#include <o3tl/string_view.hxx>
+
+#include "path_helper.hxx"
+
+// FileURL functions
+
+namespace
+{
+constexpr std::u16string_view WSTR_SYSTEM_ROOT_PATH = u"\\\\.\\";
+constexpr std::u16string_view WSTR_LONG_PATH_PREFIX = u"\\\\?\\";
+constexpr std::u16string_view WSTR_LONG_PATH_PREFIX_UNC = u"\\\\?\\UNC\\";
+
+// Internal functions that expect only backslashes as path separators
+
+bool startsWithDriveColon(std::u16string_view s)
+{
+ return s.length() >= 2 && rtl::isAsciiAlpha(s[0]) && s[1] == ':';
+}
+
+bool startsWithDriveColonSlash(std::u16string_view s)
+{
+ return s.length() >= 3 && startsWithDriveColon(s) && s[2] == '\\';
+}
+
+bool startsWithSlashSlash(std::u16string_view s) { return o3tl::starts_with(s, u"\\\\"); }
+
+// An absolute path starts either with \\ (an UNC or device path like \\.\ or \\?\)
+// or with a ASCII alpha character followed by colon followed by backslash.
+bool isAbsolute(std::u16string_view s)
+{
+ return startsWithSlashSlash(s) || startsWithDriveColonSlash(s);
+}
+
+bool onSameDrive(std::u16string_view s1, std::u16string_view s2)
+{
+ assert(startsWithDriveColon(s1) && startsWithDriveColon(s2));
+ return rtl::toAsciiUpperCase(s1[0]) == rtl::toAsciiUpperCase(s2[0]) && s1[1] == s2[1];
+}
+
+sal_Int32 getRootLength(std::u16string_view path)
+{
+ assert(isAbsolute(path));
+ size_t nResult = 0;
+ if (startsWithSlashSlash(path))
+ {
+ // Cases:
+ // 1. Device UNC: \\?\UNC\server\share or \\.\UNC\server\share
+ // 2. Non-device UNC: \\server\share
+ // 3. Device non-UNC: \\?\C: or \\.\C:
+ bool bUNC = false;
+ if (path.length() > 3 && (path[2] == '.' || path[2] == '?') && path[3] == '\\')
+ {
+ if (path.substr(4, 4) == u"UNC\\")
+ {
+ // \\?\UNC\server\share or \\.\UNC\server\share
+ nResult = 8;
+ bUNC = true;
+ }
+ else
+ {
+ // \\?\C: or \\.\C:
+ assert(startsWithDriveColon(path.substr(4)));
+ nResult = 6;
+ }
+ }
+ else
+ {
+ // \\server\share
+ nResult = 2;
+ bUNC = true;
+ }
+ if (bUNC)
+ {
+ // \\?\UNC\server\share or \\.\UNC\server\share or \\server\share
+ assert(nResult < path.length() && path[nResult] != '\\');
+ // Skip server name and share name
+ for (int nSlashes = 0; nResult < path.length(); ++nResult)
+ {
+ if (path[nResult] == '\\' && ++nSlashes == 2)
+ break;
+ }
+ }
+ }
+ else
+ {
+ // C:
+ assert(startsWithDriveColon(path));
+ nResult = 2;
+ }
+ return std::min(nResult, path.length());
+}
+
+std::u16string_view pathView(std::u16string_view path, bool bOnlyRoot)
+{
+ return bOnlyRoot ? path.substr(0, getRootLength(path)) : path;
+}
+
+OUString combinePath(std::u16string_view basePath, std::u16string_view relPath)
+{
+ const bool needSep = !o3tl::ends_with(basePath, u'\\');
+ const auto sSeparator = needSep ? std::u16string_view(u"\\") : std::u16string_view();
+ if (o3tl::starts_with(relPath, u'\\'))
+ relPath.remove_prefix(1); // avoid two adjacent backslashes
+ return OUString::Concat(basePath) + sSeparator + relPath;
+}
+
+OUString removeRelativeParts(const OUString& p)
+{
+ const sal_Int32 rootPos = getRootLength(p);
+ OUStringBuffer buf(p.getLength());
+ buf.append(p.subView(0, rootPos));
+ std::stack<sal_Int32> partPositions;
+ bool bAfterSlash = false;
+ for (sal_Int32 i = rootPos; i < p.getLength(); ++i)
+ {
+ sal_Unicode c = p[i];
+ if (c == '\\')
+ {
+ if (i + 1 < p.getLength() && p[i + 1] == '.')
+ {
+ if (i + 2 == p.getLength() || p[i + 2] == '\\')
+ {
+ // 1. Skip current directory (\.\ or trailing \.)
+ ++i; // process next slash: it may start another "\.\"
+ }
+ else if (p[i + 2] == '.' && (i + 3 == p.getLength() || p[i + 3] == '\\'))
+ {
+ // 2. For parent directory (\..\), drop previous part and skip
+ if (bAfterSlash && partPositions.size())
+ partPositions.pop();
+ sal_Int32 nParentPos = partPositions.size() ? partPositions.top() : rootPos;
+ if (partPositions.size())
+ partPositions.pop();
+ buf.truncate(nParentPos);
+ bAfterSlash = false; // we have just removed slash after parent part
+ i += 2; // process next slash: it may start another "\.\"
+ }
+ }
+ if (bAfterSlash)
+ continue; // 3. Skip double backslashes (\\)
+ partPositions.push(buf.getLength());
+ bAfterSlash = true;
+ }
+ else
+ bAfterSlash = false;
+
+ buf.append(c);
+ }
+ return buf.makeStringAndClear();
+}
+}
+
+static bool IsValidFilePathComponent(
+ std::optional<std::u16string_view>& roComponent,
+ DWORD dwFlags)
+{
+ assert(roComponent);
+ auto lpComponentEnd = roComponent->end();
+ auto lpCurrent = roComponent->begin();
+ bool bValid = lpCurrent != lpComponentEnd; // Empty components are not allowed
+ sal_Unicode cLast = 0;
+
+ while (bValid)
+ {
+ /* Path component length must not exceed MAX_PATH even if long path with "\\?\" prefix is used */
+ if (lpCurrent - roComponent->begin() >= MAX_PATH)
+ {
+ bValid = false;
+ break;
+ }
+
+ switch ( *lpCurrent )
+ {
+ /* Both backslash and slash determine the end of a path component */
+ case '\0':
+ case '/':
+ case '\\':
+ switch ( cLast )
+ {
+ /* Component must not end with '.' or blank and can't be empty */
+
+ case '.':
+ if ( dwFlags & VALIDATEPATH_ALLOW_ELLIPSE )
+ {
+ if ( (dwFlags & VALIDATEPATH_ALLOW_INVALID_SPACE_AND_PERIOD) ||
+ 1 == lpCurrent - roComponent->begin() )
+ {
+ /* Either do allow periods anywhere, or current directory */
+ lpComponentEnd = lpCurrent;
+ break;
+ }
+ else if ( 2 == lpCurrent - roComponent->begin() && '.' == roComponent->front() )
+ {
+ /* Parent directory is O.K. */
+ lpComponentEnd = lpCurrent;
+ break;
+ }
+ }
+ [[fallthrough]];
+ case 0:
+ case ' ':
+ if ( dwFlags & VALIDATEPATH_ALLOW_INVALID_SPACE_AND_PERIOD )
+ lpComponentEnd = lpCurrent;
+ else
+ bValid = false;
+ break;
+ default:
+ lpComponentEnd = lpCurrent;
+ break;
+ }
+ break;
+ /* The following characters are reserved */
+ case '?':
+ case '*':
+ case '<':
+ case '>':
+ case '\"':
+ case '|':
+ case ':':
+ bValid = false;
+ break;
+ default:
+ /* Characters below ASCII 32 are not allowed */
+ if ( *lpCurrent < ' ' )
+ bValid = false;
+ break;
+ }
+
+ if (lpCurrent != lpComponentEnd)
+ cLast = *lpCurrent++;
+
+ if (lpCurrent == lpComponentEnd)
+ break;
+ }
+
+ if ( bValid )
+ {
+ // Empty components are not allowed
+ if (lpComponentEnd - roComponent->begin() < 1)
+ bValid = false;
+ // If we reached the end of the string nullopt is returned
+ else if (lpComponentEnd == roComponent->end())
+ roComponent.reset();
+ else
+ roComponent->remove_prefix(lpComponentEnd - roComponent->begin());
+ }
+
+ return bValid;
+}
+
+static sal_Int32 countInitialSeparators(std::u16string_view path) {
+ size_t n = 0;
+ while (n < path.length() && (path[n] == '\\' || path[n] == '/'))
+ ++n;
+ return n;
+}
+
+DWORD IsValidFilePath(const OUString& path, DWORD dwFlags, OUString* corrected)
+{
+ std::optional<std::u16string_view> oComponent = path;
+ bool bValid = true;
+ DWORD dwPathType = PATHTYPE_ERROR;
+
+ if ( dwFlags & VALIDATEPATH_ALLOW_RELATIVE )
+ dwFlags |= VALIDATEPATH_ALLOW_ELLIPSE;
+
+ DWORD dwCandidatPathType = PATHTYPE_ERROR;
+
+ if (path.matchIgnoreAsciiCase(WSTR_LONG_PATH_PREFIX_UNC))
+ {
+ /* This is long path in UNC notation */
+ oComponent = path.subView(WSTR_LONG_PATH_PREFIX_UNC.size());
+ dwCandidatPathType = PATHTYPE_ABSOLUTE_UNC | PATHTYPE_IS_LONGPATH;
+ }
+ else if (path.matchIgnoreAsciiCase(WSTR_LONG_PATH_PREFIX))
+ {
+ /* This is long path */
+ oComponent = path.subView(WSTR_LONG_PATH_PREFIX.size());
+
+ if (startsWithDriveColon(*oComponent))
+ {
+ oComponent->remove_prefix(2);
+ dwCandidatPathType = PATHTYPE_ABSOLUTE_LOCAL | PATHTYPE_IS_LONGPATH;
+ }
+ }
+ else if ( 2 == countInitialSeparators(path) )
+ {
+ /* The UNC path notation */
+ oComponent = path.subView(2);
+ dwCandidatPathType = PATHTYPE_ABSOLUTE_UNC;
+ }
+ else if (startsWithDriveColon(path))
+ {
+ /* Local path verification. Must start with <drive>: */
+ oComponent = path.subView(2);
+ dwCandidatPathType = PATHTYPE_ABSOLUTE_LOCAL;
+ }
+
+ if ( ( dwCandidatPathType & PATHTYPE_MASK_TYPE ) == PATHTYPE_ABSOLUTE_UNC )
+ {
+ bValid = IsValidFilePathComponent(oComponent, VALIDATEPATH_ALLOW_ELLIPSE);
+
+ /* So far we have a valid servername. Now let's see if we also have a network resource */
+
+ dwPathType = dwCandidatPathType;
+
+ if ( bValid )
+ {
+ if (oComponent)
+ {
+ oComponent->remove_prefix(1);
+ if (oComponent->empty())
+ oComponent.reset();
+ }
+
+ if (!oComponent)
+ {
+ dwPathType |= PATHTYPE_IS_SERVER;
+ }
+ else
+ {
+ /* Now test the network resource */
+
+ bValid = IsValidFilePathComponent(oComponent, 0);
+
+ /* If we now reached the end of the path, everything is O.K. */
+
+ if (bValid)
+ {
+ if (oComponent)
+ {
+ oComponent->remove_prefix(1);
+ if (oComponent->empty())
+ oComponent.reset();
+ }
+ if (!oComponent)
+ dwPathType |= PATHTYPE_IS_VOLUME;
+ }
+ }
+ }
+ }
+ else if ( ( dwCandidatPathType & PATHTYPE_MASK_TYPE ) == PATHTYPE_ABSOLUTE_LOCAL )
+ {
+ if (1 == countInitialSeparators(*oComponent))
+ oComponent->remove_prefix(1);
+ else if (!oComponent->empty())
+ bValid = false;
+
+ dwPathType = dwCandidatPathType;
+
+ /* Now we are behind the backslash or it was a simple drive without backslash */
+
+ if (bValid && oComponent->empty())
+ {
+ oComponent.reset();
+ dwPathType |= PATHTYPE_IS_VOLUME;
+ }
+ }
+ else if ( dwFlags & VALIDATEPATH_ALLOW_RELATIVE )
+ {
+ /* Can be a relative path */
+ oComponent = path;
+
+ /* Relative path can start with a backslash */
+
+ if (1 == countInitialSeparators(*oComponent))
+ {
+ oComponent->remove_prefix(1);
+ if (oComponent->empty())
+ oComponent.reset();
+ }
+
+ dwPathType = PATHTYPE_RELATIVE;
+ }
+ else
+ {
+ /* Anything else is an error */
+ bValid = false;
+ }
+
+ /* Now validate each component of the path */
+ OUString lastCorrected = path;
+ while (bValid && oComponent)
+ {
+ // Correct path by merging consecutive slashes:
+ if (o3tl::starts_with(*oComponent, u"\\") && corrected != nullptr) {
+ sal_Int32 i = oComponent->data() - lastCorrected.getStr();
+ *corrected = lastCorrected.replaceAt(i, 1, {});
+ //TODO: handle out-of-memory
+ lastCorrected = *corrected;
+ oComponent = lastCorrected.subView(i);
+ }
+
+ bValid = IsValidFilePathComponent(oComponent, dwFlags | VALIDATEPATH_ALLOW_INVALID_SPACE_AND_PERIOD);
+
+ if (bValid && oComponent)
+ {
+ oComponent->remove_prefix(1);
+
+ /* If the string behind the backslash is empty, we've done */
+
+ if (oComponent->empty())
+ oComponent.reset();
+ }
+ }
+
+ /* The path can be longer than MAX_PATH only in case it has the longpath prefix */
+ if (bValid && !(dwPathType & PATHTYPE_IS_LONGPATH) && path.getLength() >= MAX_PATH)
+ {
+ bValid = false;
+ }
+
+ return bValid ? dwPathType : PATHTYPE_ERROR;
+}
+
+static std::optional<OUString> osl_decodeURL_(const OString& sUTF8)
+{
+ const char *pSrcEnd;
+ const char *pSrc;
+ bool bValidEncoded = true; /* Assume success */
+
+ /* The resulting decoded string length is shorter or equal to the source length */
+
+ const sal_Int32 nSrcLen = sUTF8.getLength();
+ OStringBuffer aBuffer(nSrcLen + 1);
+
+ pSrc = sUTF8.getStr();
+ pSrcEnd = pSrc + nSrcLen;
+
+ /* Now decode the URL what should result in a UTF-8 string */
+ while ( bValidEncoded && pSrc < pSrcEnd )
+ {
+ switch ( *pSrc )
+ {
+ case '%':
+ {
+ char aToken[3];
+ char aChar;
+
+ pSrc++;
+ aToken[0] = *pSrc++;
+ aToken[1] = *pSrc++;
+ aToken[2] = 0;
+
+ aChar = static_cast<char>(strtoul( aToken, nullptr, 16 ));
+
+ /* The chars are path delimiters and must not be encoded */
+
+ if ( 0 == aChar || '\\' == aChar || '/' == aChar || ':' == aChar )
+ bValidEncoded = false;
+ else
+ aBuffer.append(aChar);
+ }
+ break;
+ case '\0':
+ case '#':
+ case '?':
+ bValidEncoded = false;
+ break;
+ default:
+ aBuffer.append(*pSrc++);
+ break;
+ }
+ }
+
+ return bValidEncoded ? OUString(aBuffer.getStr(), aBuffer.getLength(), RTL_TEXTENCODING_UTF8)
+ : std::optional<OUString>();
+}
+
+static OUString osl_encodeURL_(std::u16string_view sURL)
+{
+ /* Encode non ascii characters within the URL */
+
+ const char *pURLScan;
+ sal_Int32 nURLScanLen;
+ sal_Int32 nURLScanCount;
+
+ OString sUTF8 = OUStringToOString(sURL, RTL_TEXTENCODING_UTF8);
+
+ OUStringBuffer sEncodedURL(sUTF8.getLength() * 3 + 1);
+ pURLScan = sUTF8.getStr();
+ nURLScanLen = sUTF8.getLength();
+ nURLScanCount = 0;
+
+ while ( nURLScanCount < nURLScanLen )
+ {
+ char cCurrent = *pURLScan;
+ switch ( cCurrent )
+ {
+ default:
+ if (!( ( cCurrent >= 'a' && cCurrent <= 'z' ) || ( cCurrent >= 'A' && cCurrent <= 'Z' ) || ( cCurrent >= '0' && cCurrent <= '9' ) ) )
+ {
+ char buf[3];
+ sprintf( buf, "%02X", static_cast<unsigned char>(cCurrent) );
+ sEncodedURL.append('%').appendAscii(buf, 2);
+ break;
+ }
+ [[fallthrough]];
+ case '!':
+ case '\'':
+ case '(':
+ case ')':
+ case '*':
+ case '-':
+ case '.':
+ case '_':
+ case '~':
+ case '$':
+ case '&':
+ case '+':
+ case ',':
+ case '=':
+ case '@':
+ case ':':
+ case '/':
+ case '\\':
+ case '|':
+ sEncodedURL.appendAscii(&cCurrent, 1);
+ break;
+ case 0:
+ break;
+ }
+
+ pURLScan++;
+ nURLScanCount++;
+ }
+
+ return sEncodedURL.makeStringAndClear();
+}
+
+// A helper that makes sure that for existing part of the path, the case is correct.
+// Unlike GetLongPathNameW that it wraps, this function does not require the path to exist.
+static OUString GetCaseCorrectPathName(std::u16string_view sysPath)
+{
+ // Prepare a null-terminated string first.
+ // Neither OUString, nor u16string_view are guaranteed to be null-terminated
+ osl::LongPathBuffer<wchar_t> szPath(sysPath.size() + WSTR_LONG_PATH_PREFIX_UNC.size() + 1);
+ wchar_t* const pPath = szPath;
+ wchar_t* pEnd = pPath;
+ size_t sysPathOffset = 0;
+ if (sysPath.size() >= MAX_PATH && isAbsolute(sysPath)
+ && !o3tl::starts_with(sysPath, WSTR_LONG_PATH_PREFIX))
+ {
+ // Allow GetLongPathNameW consume long paths
+ std::u16string_view prefix = WSTR_LONG_PATH_PREFIX;
+ if (startsWithSlashSlash(sysPath))
+ {
+ sysPathOffset = 2; // skip leading "\\"
+ prefix = WSTR_LONG_PATH_PREFIX_UNC;
+ }
+ pEnd = std::copy(prefix.begin(), prefix.end(), pEnd);
+ }
+ wchar_t* const pStart = pEnd;
+ pEnd = std::copy(sysPath.begin() + sysPathOffset, sysPath.end(), pStart);
+ *pEnd = 0;
+ osl::LongPathBuffer<wchar_t> aBuf(MAX_LONG_PATH);
+ while (pEnd > pStart)
+ {
+ std::u16string_view curPath(o3tl::toU(pPath), pEnd - pPath);
+ if (curPath == u"\\\\" || curPath == WSTR_SYSTEM_ROOT_PATH
+ || curPath == WSTR_LONG_PATH_PREFIX
+ || o3tl::equalsIgnoreAsciiCase(curPath, WSTR_LONG_PATH_PREFIX_UNC))
+ break; // Do not check if the special path prefix exists itself
+
+ DWORD nNewLen = GetLongPathNameW(pPath, aBuf, aBuf.getBufSizeInSymbols());
+ if (nNewLen == 0)
+ {
+ // Error?
+ const DWORD err = GetLastError();
+ if (err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND)
+ {
+ // Check the base path; skip possible trailing separator
+ size_t sepPos = curPath.substr(0, curPath.size() - 1).rfind(u'\\');
+ if (sepPos != std::u16string_view::npos)
+ {
+ pEnd = pPath + sepPos;
+ *pEnd = 0;
+ continue;
+ }
+ }
+ else
+ {
+ SAL_WARN("sal.osl", "GetLongPathNameW: Windows error code "
+ << err << " processing path " << OUString(curPath));
+ }
+ break; // All other errors, or no separators left
+ }
+ assert(nNewLen < aBuf.getBufSizeInSymbols());
+ // Combine the case-correct leading part with the non-existing trailing part
+ return OUString::Concat(std::u16string_view(o3tl::toU(aBuf), nNewLen))
+ + sysPath.substr(pEnd - pStart + sysPathOffset);
+ };
+ return OUString(sysPath); // We found no existing parts - just assume it's OK
+}
+
+oslFileError osl_getSystemPathFromFileURL_(const OUString& strURL, rtl_uString **pustrPath, bool bAllowRelative)
+{
+ OUString sTempPath;
+ oslFileError nError = osl_File_E_INVAL; /* Assume failure */
+
+ /* If someone hasn't encoded the complete URL we convert it to UTF8 now to prevent from
+ having a mixed encoded URL later */
+
+ OString sUTF8 = OUStringToOString(strURL, RTL_TEXTENCODING_UTF8);
+
+ /* If the length of strUTF8 and strURL differs it indicates that the URL was not correct encoded */
+
+ SAL_WARN_IF(
+ sUTF8.getLength() != strURL.getLength() &&
+ strURL.matchIgnoreAsciiCase("file:\\")
+ , "sal.osl"
+ ,"osl_getSystemPathFromFileURL: \"" << strURL << "\" is not encoded !!!");
+
+ if (auto sDecodedURL = osl_decodeURL_(sUTF8))
+ {
+ /* Replace backslashes and pipes */
+
+ sDecodedURL = sDecodedURL->replace('/', '\\').replace('|', ':');
+
+ /* Must start with "file:/" */
+ if ( sDecodedURL->startsWithIgnoreAsciiCase("file:\\") )
+ {
+ sal_uInt32 nSkip;
+
+ if ( sDecodedURL->startsWithIgnoreAsciiCase("file:\\\\\\") )
+ nSkip = 8;
+ else if (
+ sDecodedURL->startsWithIgnoreAsciiCase("file:\\\\localhost\\") ||
+ sDecodedURL->startsWithIgnoreAsciiCase("file:\\\\127.0.0.1\\")
+ )
+ nSkip = 17;
+ else if ( sDecodedURL->startsWithIgnoreAsciiCase("file:\\\\") )
+ nSkip = 5;
+ else
+ nSkip = 6;
+
+ const sal_uInt32 nDecodedLen = sDecodedURL->getLength();
+
+ /* Indicates local root */
+ if ( nDecodedLen == nSkip )
+ sTempPath = WSTR_SYSTEM_ROOT_PATH;
+ else
+ {
+ /* do not separate the directory and file case, so the maximal path length without prefix is MAX_PATH-12 */
+ if ( nDecodedLen - nSkip <= MAX_PATH - 12 )
+ {
+ sTempPath = sDecodedURL->subView(nSkip);
+ }
+ else
+ {
+ sDecodedURL = GetCaseCorrectPathName(sDecodedURL->subView(nSkip));
+ if (sDecodedURL->getLength() <= MAX_PATH - 12
+ || sDecodedURL->startsWith(WSTR_SYSTEM_ROOT_PATH)
+ || sDecodedURL->startsWith(WSTR_LONG_PATH_PREFIX))
+ {
+ sTempPath = *sDecodedURL;
+ }
+ else if (sDecodedURL->startsWith("\\\\"))
+ {
+ /* it should be an UNC path, use the according prefix */
+ sTempPath = OUString::Concat(WSTR_LONG_PATH_PREFIX_UNC) + sDecodedURL->subView(2);
+ }
+ else
+ {
+ sTempPath = WSTR_LONG_PATH_PREFIX + *sDecodedURL;
+ }
+ }
+ }
+
+ if (IsValidFilePath(sTempPath, VALIDATEPATH_ALLOW_ELLIPSE, &sTempPath))
+ nError = osl_File_E_None;
+ }
+ else if ( bAllowRelative ) /* This maybe a relative file URL */
+ {
+ /* In future the relative path could be converted to absolute if it is too long */
+ sTempPath = *sDecodedURL;
+
+ if (IsValidFilePath(sTempPath, VALIDATEPATH_ALLOW_RELATIVE | VALIDATEPATH_ALLOW_ELLIPSE, &sTempPath))
+ nError = osl_File_E_None;
+ }
+ else
+ SAL_INFO_IF(nError, "sal.osl",
+ "osl_getSystemPathFromFileURL: \"" << strURL << "\" is not an absolute FileURL");
+
+ }
+
+ if ( osl_File_E_None == nError )
+ rtl_uString_assign(pustrPath, sTempPath.pData);
+
+ SAL_INFO_IF(nError, "sal.osl",
+ "osl_getSystemPathFromFileURL: \"" << strURL << "\" is not a FileURL");
+
+ return nError;
+}
+
+oslFileError osl_getFileURLFromSystemPath( rtl_uString* strPath, rtl_uString** pstrURL )
+{
+ oslFileError nError = osl_File_E_INVAL; /* Assume failure */
+ OUString sTempURL;
+ DWORD dwPathType = PATHTYPE_ERROR;
+
+ if (strPath)
+ dwPathType = IsValidFilePath(OUString::unacquired(&strPath), VALIDATEPATH_ALLOW_RELATIVE, nullptr);
+
+ if (dwPathType)
+ {
+ OUString sTempPath;
+ const OUString& sPath = OUString::unacquired(&strPath);
+
+ if ( dwPathType & PATHTYPE_IS_LONGPATH )
+ {
+ /* the path has the longpath prefix, lets remove it */
+ switch ( dwPathType & PATHTYPE_MASK_TYPE )
+ {
+ case PATHTYPE_ABSOLUTE_UNC:
+ static_assert(WSTR_LONG_PATH_PREFIX_UNC.size() == 8,
+ "Unexpected long path UNC prefix!");
+
+ /* generate the normal UNC path */
+ sTempPath = "\\\\" + sPath.copy(8).replace('\\', '/');
+ break;
+
+ case PATHTYPE_ABSOLUTE_LOCAL:
+ static_assert(WSTR_LONG_PATH_PREFIX.size() == 4,
+ "Unexpected long path prefix!");
+
+ /* generate the normal path */
+ sTempPath = sPath.copy(4).replace('\\', '/');
+ break;
+
+ default:
+ OSL_FAIL( "Unexpected long path format!" );
+ sTempPath = sPath.replace('\\', '/');
+ break;
+ }
+ }
+ else
+ {
+ /* Replace backslashes */
+ sTempPath = sPath.replace('\\', '/');
+ }
+
+ switch ( dwPathType & PATHTYPE_MASK_TYPE )
+ {
+ case PATHTYPE_RELATIVE:
+ sTempURL = sTempPath;
+ nError = osl_File_E_None;
+ break;
+ case PATHTYPE_ABSOLUTE_UNC:
+ sTempURL = "file:" + sTempPath;
+ nError = osl_File_E_None;
+ break;
+ case PATHTYPE_ABSOLUTE_LOCAL:
+ sTempURL = "file:///" + sTempPath;
+ nError = osl_File_E_None;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if ( osl_File_E_None == nError )
+ {
+ /* Encode the URL */
+ rtl_uString_assign(pstrURL, osl_encodeURL_(sTempURL).pData);
+ OSL_ASSERT(*pstrURL != nullptr);
+ }
+
+ SAL_INFO_IF(nError, "sal.osl",
+ "osl_getFileURLFromSystemPath: \"" << OUString::unacquired(&strPath) << "\" is not a systemPath");
+ return nError;
+}
+
+oslFileError SAL_CALL osl_getSystemPathFromFileURL(
+ rtl_uString *ustrURL, rtl_uString **pustrPath)
+{
+ return osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrURL), pustrPath, true);
+}
+
+oslFileError SAL_CALL osl_searchFileURL(
+ rtl_uString *ustrFileName,
+ rtl_uString *ustrSystemSearchPath,
+ rtl_uString **pustrPath)
+{
+ OUString ustrUNCPath;
+ OUString ustrSysPath;
+ oslFileError error;
+
+ /* First try to interpret the file name as a URL even a relative one */
+ error = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrFileName), &ustrUNCPath.pData, true);
+
+ /* So far we either have an UNC path or something invalid
+ Now create a system path */
+ if ( osl_File_E_None == error )
+ error = osl_getSystemPathFromFileURL_(ustrUNCPath, &ustrSysPath.pData, true);
+
+ if ( osl_File_E_None == error )
+ {
+ DWORD nBufferLength;
+ DWORD dwResult;
+ LPWSTR lpBuffer = nullptr;
+ LPWSTR lpszFilePart;
+
+ /* Repeat calling SearchPath ...
+ Start with MAX_PATH for the buffer. In most cases this
+ will be enough and does not force the loop to run twice */
+ dwResult = MAX_PATH;
+
+ do
+ {
+ /* If search path is empty use a nullptr pointer instead according to MSDN documentation of SearchPath */
+ LPCWSTR lpszSearchPath = ustrSystemSearchPath && ustrSystemSearchPath->length ? o3tl::toW(ustrSystemSearchPath->buffer) : nullptr;
+ LPCWSTR lpszSearchFile = o3tl::toW(ustrSysPath.getStr());
+
+ /* Allocate space for buffer according to previous returned count of required chars */
+ /* +1 is not necessary if we follow MSDN documentation but for robustness we do so */
+ nBufferLength = dwResult + 1;
+ lpBuffer = lpBuffer ?
+ static_cast<LPWSTR>(realloc(lpBuffer, nBufferLength * sizeof(WCHAR))) :
+ static_cast<LPWSTR>(malloc(nBufferLength * sizeof(WCHAR)));
+
+ dwResult = SearchPathW( lpszSearchPath, lpszSearchFile, nullptr, nBufferLength, lpBuffer, &lpszFilePart );
+ } while ( dwResult && dwResult >= nBufferLength );
+
+ /* ... until an error occurs or buffer is large enough.
+ dwResult == nBufferLength can not happen according to documentation but lets be robust ;-) */
+
+ if ( dwResult )
+ {
+ ustrSysPath = o3tl::toU(lpBuffer);
+ error = osl_getFileURLFromSystemPath(ustrSysPath.pData, pustrPath);
+ }
+ else
+ {
+ WIN32_FIND_DATAW aFindFileData;
+ HANDLE hFind;
+
+ /* something went wrong, perhaps the path was absolute */
+ error = oslTranslateFileError( GetLastError() );
+
+ hFind = FindFirstFileW(o3tl::toW(ustrSysPath.getStr()), &aFindFileData);
+
+ if ( IsValidHandle(hFind) )
+ {
+ error = osl_getFileURLFromSystemPath(ustrSysPath.pData, pustrPath);
+ FindClose( hFind );
+ }
+ }
+
+ free( lpBuffer );
+ }
+
+ return error;
+}
+
+oslFileError SAL_CALL osl_getAbsoluteFileURL( rtl_uString* ustrBaseURL, rtl_uString* ustrRelativeURL, rtl_uString** pustrAbsoluteURL )
+{
+ oslFileError eError = osl_File_E_None;
+ OUString ustrRelSysPath;
+ OUString ustrBaseSysPath;
+
+ if ( ustrBaseURL && ustrBaseURL->length )
+ {
+ eError = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrBaseURL), &ustrBaseSysPath.pData, false);
+ OSL_ENSURE( osl_File_E_None == eError, "osl_getAbsoluteFileURL called with relative or invalid base URL" );
+ }
+ if (eError == osl_File_E_None)
+ {
+ eError = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrRelativeURL), &ustrRelSysPath.pData,
+ !ustrBaseSysPath.isEmpty());
+ OSL_ENSURE( osl_File_E_None == eError, "osl_getAbsoluteFileURL called with empty base URL and/or invalid relative URL" );
+ }
+
+ if ( !eError )
+ {
+ OUString sResultPath;
+/*@@@ToDo
+ The whole FileURL implementation should be merged
+ with the rtl/uri class.
+*/
+ // If ustrRelSysPath is absolute, we don't need ustrBaseSysPath.
+ if (!ustrBaseSysPath.isEmpty() && !isAbsolute(ustrRelSysPath))
+ {
+ // ustrBaseSysPath is known here to be a valid absolute path -> its first two characters
+ // are ASCII (either alpha + colon, or double backslashes)
+
+ // Don't use SetCurrentDirectoryW together with GetFullPathNameW, because:
+ // (a) it needs synchronization and may affect threads that may access relative paths;
+ // (b) it would give wrong results for non-existing base path (allowed by RFC2396).
+
+ if (startsWithDriveColon(ustrRelSysPath))
+ {
+ // Special case: a path relative to a specific drive's current directory.
+ // Should we error out here?
+
+ // If ustrBaseSysPath is on the same drive as ustrRelSysPath, then take base path
+ // as is; otherwise, use current directory on ustrRelSysPath's drive as base path
+ if (onSameDrive(ustrRelSysPath, ustrBaseSysPath))
+ {
+ sResultPath = combinePath(ustrBaseSysPath, ustrRelSysPath.subView(2));
+ }
+ else
+ {
+ // Call GetFullPathNameW to get current directory on ustrRelSysPath's drive
+ wchar_t baseDrive[3] = { ustrRelSysPath[0], ':' }; // just "C:"
+ osl::LongPathBuffer<wchar_t> aBuf(MAX_LONG_PATH);
+ DWORD dwResult
+ = GetFullPathNameW(baseDrive, aBuf.getBufSizeInSymbols(), aBuf, nullptr);
+ if (dwResult)
+ {
+ if (dwResult >= aBuf.getBufSizeInSymbols())
+ eError = osl_File_E_INVAL;
+ else
+ sResultPath = combinePath(o3tl::toU(aBuf), ustrRelSysPath.subView(2));
+ }
+ else
+ eError = oslTranslateFileError(GetLastError());
+ }
+ }
+ else
+ {
+ // Is this a rooted relative path (starting with a backslash)?
+ // Then we need only root from base. E.g.,
+ // ustrBaseSysPath is "\\server\share\path1\" and ustrRelSysPath is "\path2\to\file"
+ // => \\server\share\path2\to\file
+ // ustrBaseSysPath is "D:\path1\" and ustrRelSysPath is "\path2\to\file"
+ // => D:\path2\to\file
+ auto sBaseView(pathView(ustrBaseSysPath, ustrRelSysPath.startsWith("\\")));
+ sResultPath = combinePath(sBaseView, ustrRelSysPath);
+ }
+ }
+ else
+ sResultPath = ustrRelSysPath;
+
+ if (eError == osl_File_E_None)
+ {
+ sResultPath = removeRelativeParts(sResultPath);
+ eError = osl_getFileURLFromSystemPath(sResultPath.pData, pustrAbsoluteURL);
+ }
+ }
+
+ return eError;
+}
+
+oslFileError SAL_CALL osl_getCanonicalName( rtl_uString *strRequested, rtl_uString **strValid )
+{
+ rtl_uString_newFromString(strValid, strRequested);
+ return osl_File_E_None;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/file_url.hxx b/sal/osl/w32/file_url.hxx
new file mode 100644
index 000000000..86ce27060
--- /dev/null
+++ b/sal/osl/w32/file_url.hxx
@@ -0,0 +1,63 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_FILE_URL_HXX
+#define INCLUDED_SAL_OSL_W32_FILE_URL_HXX
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/file.h>
+#include <osl/mutex.hxx>
+
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+
+#define PATHTYPE_ERROR 0
+#define PATHTYPE_RELATIVE 1
+#define PATHTYPE_ABSOLUTE_UNC 2
+#define PATHTYPE_ABSOLUTE_LOCAL 3
+#define PATHTYPE_MASK_TYPE 0xFF
+#define PATHTYPE_IS_VOLUME 0x0100
+#define PATHTYPE_IS_SERVER 0x0200
+#define PATHTYPE_IS_LONGPATH 0x0400
+
+#define VALIDATEPATH_NORMAL 0x0000
+#define VALIDATEPATH_ALLOW_ELLIPSE 0x0002
+#define VALIDATEPATH_ALLOW_RELATIVE 0x0004
+#define VALIDATEPATH_ALLOW_INVALID_SPACE_AND_PERIOD 0x0010
+
+#define MAX_LONG_PATH 32767
+
+DWORD IsValidFilePath (
+ const OUString& path,
+ DWORD dwFlags,
+ OUString* corrected
+);
+
+oslFileError osl_getSystemPathFromFileURL_ (
+ const OUString& strURL,
+ rtl_uString** pustrPath,
+ bool bAllowRelative
+);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/filetime.hxx b/sal/osl/w32/filetime.hxx
new file mode 100644
index 000000000..dc355591a
--- /dev/null
+++ b/sal/osl/w32/filetime.hxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_FILETIME_HXX
+#define INCLUDED_SAL_OSL_W32_FILETIME_HXX
+
+#include <sal/config.h>
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#include <osl/time.h>
+
+BOOL TimeValueToFileTime(TimeValue const* cpTimeVal, FILETIME* pFTime);
+
+BOOL FileTimeToTimeValue(FILETIME const* cpFTime, TimeValue* pTimeVal);
+
+namespace osl::detail
+{
+inline __int64 getFiletime(FILETIME const& ft)
+{
+ return (DWORD64(ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+}
+
+inline void setFiletime(FILETIME& ft, __int64 value)
+{
+ ft.dwHighDateTime = value >> 32;
+ ft.dwLowDateTime = value & 0xFFFFFFFF;
+}
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/osl/w32/interlck.cxx b/sal/osl/w32/interlck.cxx
new file mode 100644
index 000000000..b9ecf6d78
--- /dev/null
+++ b/sal/osl/w32/interlck.cxx
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.h"
+
+#include <osl/interlck.h>
+
+oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount)
+{
+ return InterlockedIncrement(pCount);
+}
+
+oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount)
+{
+ return InterlockedDecrement(pCount);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/memory.cxx b/sal/osl/w32/memory.cxx
new file mode 100644
index 000000000..1f1a5b516
--- /dev/null
+++ b/sal/osl/w32/memory.cxx
@@ -0,0 +1,24 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <oslmemory.h>
+
+#include <malloc.h>
+
+void* osl_aligned_alloc( sal_Size align, sal_Size size )
+{
+ return _aligned_malloc(size, align);
+}
+
+void osl_aligned_free( void* p )
+{
+ _aligned_free(p);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/module.cxx b/sal/osl/w32/module.cxx
new file mode 100644
index 000000000..8379e14b2
--- /dev/null
+++ b/sal/osl/w32/module.cxx
@@ -0,0 +1,202 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.h"
+
+#include "file_url.hxx"
+#include "path_helper.hxx"
+
+#include <osl/module.h>
+#include <osl/diagnose.h>
+#include <osl/thread.h>
+#include <osl/file.h>
+#include <rtl/ustring.hxx>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+#include <vector>
+
+/*
+ under WIN32, we use the void* oslModule
+ as a WIN32 HANDLE (which is also a 32-bit value)
+*/
+
+oslModule SAL_CALL osl_loadModule(rtl_uString *strModuleName, sal_Int32 /*nRtldMode*/ )
+{
+ HMODULE h;
+#if OSL_DEBUG_LEVEL < 2
+ UINT errorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS);
+#endif
+ rtl_uString* Module = nullptr;
+ oslModule ret = nullptr;
+ oslFileError nError;
+
+ SAL_INFO( "sal.osl", "osl_loadModule: " << OUString(strModuleName) );
+ OSL_ASSERT(strModuleName);
+
+ nError = osl_getSystemPathFromFileURL(strModuleName, &Module);
+
+ if ( osl_File_E_None != nError )
+ rtl_uString_assign(&Module, strModuleName);
+
+ h = LoadLibraryW(o3tl::toW(Module->buffer));
+
+ if (h == nullptr)
+ h = LoadLibraryExW(o3tl::toW(Module->buffer), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH);
+
+ // In case of long path names (\\?\c:\...) try to shorten the filename.
+ // LoadLibrary cannot handle file names which exceed 260 letters.
+ // In case the path is too long, the function will fail. However, the error
+ // code can be different. For example, it returned ERROR_FILENAME_EXCED_RANGE
+ // on Windows XP and ERROR_INSUFFICIENT_BUFFER on Windows 7 (64bit)
+ if (h == nullptr && Module->length > 260)
+ {
+ std::vector<WCHAR> vec(Module->length + 1);
+ DWORD len = GetShortPathNameW(o3tl::toW(Module->buffer), vec.data(), Module->length + 1);
+ if (len )
+ {
+ h = LoadLibraryW(vec.data());
+
+ if (h == nullptr)
+ h = LoadLibraryExW(vec.data(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH);
+ }
+ }
+
+ ret = static_cast<oslModule>(h);
+ rtl_uString_release(Module);
+#if OSL_DEBUG_LEVEL < 2
+ SetErrorMode(errorMode);
+#endif
+
+ return ret;
+}
+
+oslModule SAL_CALL osl_loadModuleAscii(const char *pModuleName, sal_Int32 )
+{
+ HMODULE h;
+ UINT errorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS);
+ oslModule ret = nullptr;
+
+ SAL_INFO( "sal.osl", "osl_loadModule: " << pModuleName );
+ OSL_ASSERT(pModuleName);
+
+ h = LoadLibraryA(pModuleName);
+ if (h == nullptr)
+ h = LoadLibraryExA(pModuleName, nullptr,
+ LOAD_WITH_ALTERED_SEARCH_PATH);
+
+ ret = static_cast<oslModule>(h);
+ SetErrorMode(errorMode);
+
+ return ret;
+}
+
+oslModule osl_loadModuleRelativeAscii(
+ oslGenericFunction baseModule, char const * relativePath, sal_Int32 mode)
+{
+ return osl_loadModuleRelative(baseModule, OUString::createFromAscii(relativePath).pData, mode);
+}
+
+sal_Bool SAL_CALL
+osl_getModuleHandle(rtl_uString *pModuleName, oslModule *pResult)
+{
+ LPCWSTR pName = pModuleName ? o3tl::toW(pModuleName->buffer) : nullptr;
+ HMODULE h = GetModuleHandleW(pName);
+ if( h )
+ {
+ *pResult = static_cast<oslModule>(h);
+ return true;
+ }
+
+ return false;
+}
+
+void SAL_CALL osl_unloadModule(oslModule Module)
+{
+ FreeLibrary(static_cast<HMODULE>(Module));
+}
+
+void* SAL_CALL osl_getSymbol(oslModule Module, rtl_uString *strSymbolName)
+{
+ /* casting from a function pointer to a data pointer is invalid
+ be in this case unavoidable because the API has to stay
+ compatible. We need to keep this function which returns a
+ void* by definition */
+ return reinterpret_cast<void*>(osl_getFunctionSymbol(Module, strSymbolName));
+}
+
+oslGenericFunction SAL_CALL osl_getFunctionSymbol( oslModule Module, rtl_uString *strSymbolName )
+{
+ rtl_String *symbolName = nullptr;
+ oslGenericFunction address;
+
+ OSL_ASSERT(Module);
+ OSL_ASSERT(strSymbolName);
+
+ rtl_uString2String(
+ &symbolName,
+ strSymbolName->buffer,
+ strSymbolName->length,
+ RTL_TEXTENCODING_UTF8,
+ OUSTRING_TO_OSTRING_CVTFLAGS
+ );
+
+ address=osl_getAsciiFunctionSymbol(Module, rtl_string_getStr(symbolName));
+ rtl_string_release(symbolName);
+
+ return address;
+}
+
+oslGenericFunction SAL_CALL
+osl_getAsciiFunctionSymbol( oslModule Module, const char *pSymbol )
+{
+ oslGenericFunction fncAddr = nullptr;
+
+ if( pSymbol )
+ fncAddr=reinterpret_cast<oslGenericFunction>(GetProcAddress(static_cast<HMODULE>(Module), pSymbol));
+
+ return fncAddr;
+}
+
+sal_Bool SAL_CALL osl_getModuleURLFromAddress( void *pv, rtl_uString **pustrURL )
+{
+ HMODULE hModule{};
+ GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
+ | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ static_cast<LPCWSTR>(pv), &hModule);
+ if (!hModule)
+ return false;
+
+ ::osl::LongPathBuffer<sal_Unicode> aBuffer(MAX_LONG_PATH);
+
+ DWORD nch = GetModuleFileNameW(hModule, o3tl::toW(aBuffer), aBuffer.getBufSizeInSymbols());
+
+ OUString ustrSysPath(aBuffer, nch);
+ return osl_getFileURLFromSystemPath(ustrSysPath.pData, pustrURL) == osl_File_E_None;
+}
+
+sal_Bool SAL_CALL osl_getModuleURLFromFunctionAddress( oslGenericFunction addr, rtl_uString ** ppLibraryUrl )
+{
+ /* casting a function pointer to a data pointer (void*) is
+ not allowed according to the C/C++ standards. In this case
+ it is unavoidable because we have to stay compatible we
+ cannot remove any function. */
+ return osl_getModuleURLFromAddress(reinterpret_cast<void*>(addr), ppLibraryUrl);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/mutex.cxx b/sal/osl/w32/mutex.cxx
new file mode 100644
index 000000000..7de4c41ee
--- /dev/null
+++ b/sal/osl/w32/mutex.cxx
@@ -0,0 +1,88 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "system.h"
+
+#include <osl/mutex.h>
+#include <osl/diagnose.h>
+
+/*
+ Implementation notes:
+ The void* hidden by oslMutex points to a WIN32
+ CRITICAL_SECTION structure.
+*/
+
+oslMutex SAL_CALL osl_createMutex(void)
+{
+ CRITICAL_SECTION* pMutexImpl;
+
+ pMutexImpl = static_cast<CRITICAL_SECTION*>(calloc(sizeof(CRITICAL_SECTION), 1));
+
+ OSL_ASSERT(pMutexImpl); /* alloc successful? */
+
+ InitializeCriticalSection(pMutexImpl);
+
+ return reinterpret_cast<oslMutex>(pMutexImpl);
+}
+
+void SAL_CALL osl_destroyMutex(oslMutex Mutex)
+{
+ CRITICAL_SECTION* pMutexImpl = reinterpret_cast<CRITICAL_SECTION*>(Mutex);
+
+ if (pMutexImpl)
+ {
+ DeleteCriticalSection(pMutexImpl);
+ free(pMutexImpl);
+ }
+}
+
+sal_Bool SAL_CALL osl_acquireMutex(oslMutex Mutex)
+{
+ CRITICAL_SECTION* pMutexImpl = reinterpret_cast<CRITICAL_SECTION*>(Mutex);
+
+ OSL_ASSERT(Mutex);
+
+ EnterCriticalSection(pMutexImpl);
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_tryToAcquireMutex(oslMutex Mutex)
+{
+ CRITICAL_SECTION* pMutexImpl = reinterpret_cast<CRITICAL_SECTION*>(Mutex);
+
+ OSL_ASSERT(Mutex);
+
+ return TryEnterCriticalSection(pMutexImpl) != FALSE;
+}
+
+sal_Bool SAL_CALL osl_releaseMutex(oslMutex Mutex)
+{
+ CRITICAL_SECTION* pMutexImpl = reinterpret_cast<CRITICAL_SECTION*>(Mutex);
+
+ OSL_ASSERT(Mutex);
+
+ LeaveCriticalSection(pMutexImpl);
+
+ return true;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/nlsupport.cxx b/sal/osl/w32/nlsupport.cxx
new file mode 100644
index 000000000..f27b97aa7
--- /dev/null
+++ b/sal/osl/w32/nlsupport.cxx
@@ -0,0 +1,202 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#include <wchar.h>
+
+#include "nlsupport.hxx"
+
+#include <osl/mutex.h>
+#include <osl/nlsupport.h>
+#include <osl/diagnose.h>
+#include <osl/process.h>
+#include <rtl/tencinfo.h>
+#include <o3tl/char16_t2wchar_t.hxx>
+
+/* XXX NOTE:
+ * http://msdn.microsoft.com/en-us/library/windows/desktop/dd373848.aspx
+ * (retrieved 2013-02-13) has some weird description for the LOCALE_SISO*
+ * constants: "The maximum number of characters allowed for this string is
+ * nine, including a terminating null character." NINE?!? In ISO 639 and ISO
+ * 3166?
+ */
+#define ELP_LANGUAGE_FIELD_LENGTH 4
+#define ELP_COUNTRY_FIELD_LENGTH 3
+
+namespace {
+
+/** Struct used in EnumLocalesProcW() called via EnumSystemLocalesW() to obtain
+ available locales.
+*/
+struct EnumLocalesParams
+{
+ WCHAR Language[ELP_LANGUAGE_FIELD_LENGTH];
+ WCHAR Country[ELP_COUNTRY_FIELD_LENGTH];
+ LCID Locale;
+};
+
+}
+
+static DWORD g_dwTLSLocaleEncId = DWORD(-1);
+
+/*****************************************************************************
+ * callback function test
+ *****************************************************************************/
+
+static BOOL CALLBACK EnumLocalesProcW( LPWSTR lpLocaleStringW )
+{
+ /* check params received via TLS */
+ EnumLocalesParams * params = static_cast<EnumLocalesParams *>(TlsGetValue( g_dwTLSLocaleEncId ));
+ if( nullptr == params || '\0' == params->Language[0] )
+ return FALSE;
+
+ LPWSTR pszEnd;
+ WCHAR langCode[ELP_LANGUAGE_FIELD_LENGTH];
+
+ /* convert hex-string to LCID */
+ LCID localeId = wcstol(lpLocaleStringW, &pszEnd, 16);
+
+ /*
+ get the ISO language code for this locale
+ */
+ if( !GetLocaleInfoW( localeId, LOCALE_SISO639LANGNAME , langCode, ELP_LANGUAGE_FIELD_LENGTH ) )
+ /* retry by going on */
+ return TRUE;
+
+ WCHAR ctryCode[ELP_COUNTRY_FIELD_LENGTH];
+
+ /* continue if language code does not match */
+ if( 0 != wcscmp( langCode, params->Language ) )
+ return TRUE;
+
+ /* check if country code is set and equals the current locale */
+ if( '\0' != params->Country[0] && GetLocaleInfoW( localeId,
+ LOCALE_SISO3166CTRYNAME , ctryCode, ELP_COUNTRY_FIELD_LENGTH ) )
+ {
+ /* save return value in TLS and break if found desired locale */
+ if( 0 == wcscmp( ctryCode, params->Country ) )
+ {
+ params->Locale = localeId;
+ return FALSE;
+ }
+ }
+ else
+ {
+ /* fill with default values for that language */
+ LANGID langId = LANGIDFROMLCID( localeId );
+
+ /* exchange sublanguage with SUBLANG_NEUTRAL */
+ langId = MAKELANGID( PRIMARYLANGID( langId ), SUBLANG_NEUTRAL );
+
+ /* and use default sorting order */
+ params->Locale = MAKELCID( langId, SORT_DEFAULT );
+
+ return FALSE;
+ }
+
+ /* retry by going on */
+ return TRUE;
+}
+
+static rtl_TextEncoding GetTextEncodingFromLCID( LCID localeId )
+{
+ /* query ansi codepage for given locale */
+ WCHAR ansiCP[6];
+ if( !localeId || !GetLocaleInfoW( localeId, LOCALE_IDEFAULTANSICODEPAGE, ansiCP, 6 ) )
+ return RTL_TEXTENCODING_DONTKNOW;
+
+ /* if GetLocaleInfo returns "0", it is a UNICODE only locale */
+ if( 0 == wcscmp( ansiCP, L"0" ) )
+ return RTL_TEXTENCODING_UNICODE;
+
+ /* values returned from GetLocaleInfo are decimal based */
+ WCHAR *pwcEnd;
+ UINT codepage = wcstol( ansiCP, &pwcEnd, 10 );
+
+ /* find matching rtl encoding */
+ return rtl_getTextEncodingFromWindowsCodePage( codepage );
+}
+
+rtl_TextEncoding SAL_CALL osl_getTextEncodingFromLocale( rtl_Locale * pLocale )
+{
+ struct EnumLocalesParams params = { L"", L"", 0 };
+
+ /* initialise global TLS id */
+ if( DWORD(-1) == g_dwTLSLocaleEncId )
+ {
+ oslMutex globalMutex = * osl_getGlobalMutex();
+
+ /* initializing must be thread save */
+ osl_acquireMutex( globalMutex );
+
+ if( DWORD(-1) == g_dwTLSLocaleEncId )
+ g_dwTLSLocaleEncId = TlsAlloc();
+
+ osl_releaseMutex( globalMutex );
+ }
+
+ /* if pLocale is NULL, use process locale as default */
+ if( nullptr == pLocale )
+ osl_getProcessLocale( &pLocale );
+
+ /* copy in parameters to structure */
+ if( !pLocale || !pLocale->Language || pLocale->Language->length >= ELP_LANGUAGE_FIELD_LENGTH )
+ return RTL_TEXTENCODING_DONTKNOW;
+
+ wcscpy( params.Language, o3tl::toW(pLocale->Language->buffer) );
+
+ if( pLocale->Country && pLocale->Country->length < ELP_COUNTRY_FIELD_LENGTH )
+ wcscpy( params.Country, o3tl::toW(pLocale->Country->buffer) );
+
+ /* save pointer to local structure in TLS */
+ TlsSetValue( g_dwTLSLocaleEncId, &params );
+
+ /* enum all locales known to Windows */
+ EnumSystemLocalesW( EnumLocalesProcW, LCID_SUPPORTED );
+
+ /* use the LCID found in iteration */
+ return GetTextEncodingFromLCID( params.Locale );
+}
+
+void imp_getProcessLocale( rtl_Locale ** ppLocale )
+{
+ WCHAR langCode[ELP_LANGUAGE_FIELD_LENGTH];
+ WCHAR ctryCode[ELP_COUNTRY_FIELD_LENGTH];
+ LCID localeId;
+
+ OSL_ASSERT( ppLocale );
+
+ /* get the LCID to retrieve information from */
+ localeId = GetUserDefaultLCID();
+
+ /* call GetLocaleInfo to retrieve the iso codes */
+ if( GetLocaleInfoW( localeId, LOCALE_SISO639LANGNAME , langCode, ELP_LANGUAGE_FIELD_LENGTH ) &&
+ GetLocaleInfoW( localeId, LOCALE_SISO3166CTRYNAME , ctryCode, ELP_COUNTRY_FIELD_LENGTH ) )
+ {
+ *ppLocale = rtl_locale_register( o3tl::toU(langCode), o3tl::toU(ctryCode), u"" );
+ }
+ else
+ {
+ *ppLocale = rtl_locale_register( u"C", u"", u"" );
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/nlsupport.hxx b/sal/osl/w32/nlsupport.hxx
new file mode 100644
index 000000000..2d818c378
--- /dev/null
+++ b/sal/osl/w32/nlsupport.hxx
@@ -0,0 +1,21 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_NLSUPPORT_HXX
+#define INCLUDED_SAL_OSL_W32_NLSUPPORT_HXX
+
+#include <sal/config.h>
+
+#include <rtl/locale.h>
+
+void imp_getProcessLocale(rtl_Locale** ppLocale);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/osl/w32/path_helper.cxx b/sal/osl/w32/path_helper.cxx
new file mode 100644
index 000000000..a2dd134fd
--- /dev/null
+++ b/sal/osl/w32/path_helper.cxx
@@ -0,0 +1,89 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "path_helper.hxx"
+#include <osl/diagnose.h>
+#include <rtl/ustring.hxx>
+#include <sal/log.hxx>
+
+#include <algorithm>
+#include <wchar.h>
+
+constexpr OUStringLiteral BACKSLASH (u"\\");
+constexpr OUStringLiteral SLASH (u"/");
+
+void osl_systemPathEnsureSeparator(/*inout*/ rtl_uString** ppustrPath)
+{
+ OSL_PRECOND(ppustrPath && (nullptr != *ppustrPath),
+ "osl_systemPathEnsureSeparator: Invalid parameter");
+
+ OUString path(*ppustrPath);
+ sal_Int32 i = std::max<sal_Int32>(path.lastIndexOf(BACKSLASH), path.lastIndexOf(SLASH));
+
+ if (i < (path.getLength()-1))
+ {
+ path += BACKSLASH;
+ rtl_uString_assign(ppustrPath, path.pData);
+ }
+
+ SAL_WARN_IF( !path.endsWith(BACKSLASH),
+ "sal.osl",
+ "osl_systemPathEnsureSeparator: Post condition failed");
+}
+
+void osl_systemPathRemoveSeparator(/*inout*/ rtl_uString** ppustrPath)
+{
+ OUString path(*ppustrPath);
+
+ if (!osl::systemPathIsLogicalDrivePattern(path))
+ {
+ sal_Int32 i = std::max<sal_Int32>(path.lastIndexOf(BACKSLASH), path.lastIndexOf(SLASH));
+
+ if (i > -1 && (i == (path.getLength() - 1)))
+ {
+ path = OUString(path.getStr(), path.getLength() - 1);
+ rtl_uString_assign(ppustrPath, path.pData);
+ }
+ }
+}
+
+// is [A-Za-z]:[/|\]\0
+const char* const LDP = ":";
+const char* const LDP_WITH_BACKSLASH = ":\\";
+const char* const LDP_WITH_SLASH = ":/";
+
+// degenerated case returned by the Windows FileOpen dialog
+// when someone enters for instance "x:filename", the Win32
+// API accepts this case
+const char* const LDP_WITH_DOT_BACKSLASH = ":.\\";
+
+bool osl_systemPathIsLogicalDrivePattern(/*in*/ const rtl_uString* pustrPath)
+{
+ const sal_Unicode* p = rtl_uString_getStr(const_cast<rtl_uString*>(pustrPath));
+ if (iswalpha(*p++))
+ {
+ return ((0 == rtl_ustr_ascii_compare(p, LDP)) ||
+ (0 == rtl_ustr_ascii_compare(p, LDP_WITH_BACKSLASH)) ||
+ (0 == rtl_ustr_ascii_compare(p, LDP_WITH_SLASH)) ||
+ (0 == rtl_ustr_ascii_compare(p, LDP_WITH_DOT_BACKSLASH)));
+ }
+ return false;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/path_helper.hxx b/sal/osl/w32/path_helper.hxx
new file mode 100644
index 000000000..bcb4f83af
--- /dev/null
+++ b/sal/osl/w32/path_helper.hxx
@@ -0,0 +1,125 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_PATH_HELPER_HXX
+#define INCLUDED_SAL_OSL_W32_PATH_HELPER_HXX
+
+#include <sal/config.h>
+
+#include <osl/diagnose.h>
+#include <osl/file.h>
+#include <rtl/alloc.h>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+
+/**
+ Adds a trailing path separator to the given system path if not
+ already there and if the path is not the root path or a logical
+ drive alone
+*/
+
+void osl_systemPathEnsureSeparator(/*inout*/ rtl_uString** ppustrPath);
+
+/**
+ Removes the last separator from the given system path if any and
+ if the path is not the root path '\'
+*/
+
+void osl_systemPathRemoveSeparator(/*inout*/ rtl_uString** ppustrPath);
+
+/**
+ Returns whether a given path is only a logical drive pattern or not.
+ A logical drive pattern is something like "a:\", "c:\".
+ No logical drive pattern is something like "c:\test"
+*/
+
+bool osl_systemPathIsLogicalDrivePattern(/*in*/ const rtl_uString* pustrPath);
+
+namespace osl
+{
+
+/**
+ Adds a trailing path separator to the given system path if not
+ already there and if the path is not the root path or a logical
+ drive alone
+*/
+
+inline void systemPathEnsureSeparator(/*inout*/ OUString& Path)
+{
+ osl_systemPathEnsureSeparator(&Path.pData);
+}
+
+/**
+ Removes the last separator from the given system path if any and
+ if the path is not the root path '\'
+*/
+
+inline void systemPathRemoveSeparator(/*inout*/ OUString& Path)
+{
+ osl_systemPathRemoveSeparator(&Path.pData);
+}
+
+inline bool systemPathIsLogicalDrivePattern(/*in*/ const OUString& path)
+{
+ return osl_systemPathIsLogicalDrivePattern(path.pData);
+}
+
+template< class T >
+class LongPathBuffer
+{
+ T* m_pBuffer;
+ sal_uInt32 m_nCharNum;
+
+ LongPathBuffer();
+ LongPathBuffer( const LongPathBuffer& );
+ LongPathBuffer& operator=( const LongPathBuffer& );
+
+public:
+ explicit LongPathBuffer( sal_uInt32 nCharNum )
+ : m_pBuffer( static_cast<T*>( malloc( nCharNum * sizeof( T ) ) ) )
+ , m_nCharNum( nCharNum )
+ {
+ OSL_ENSURE( m_pBuffer, "Can not allocate the buffer!" );
+ }
+
+ ~LongPathBuffer()
+ {
+ if ( m_pBuffer )
+ free( m_pBuffer );
+ m_pBuffer = nullptr;
+ }
+
+ sal_uInt32 getBufSizeInSymbols()
+ {
+ return m_nCharNum;
+ }
+
+ operator T* ()
+ {
+ return m_pBuffer;
+ }
+
+};
+
+} // end namespace osl
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/pipe.cxx b/sal/osl/w32/pipe.cxx
new file mode 100644
index 000000000..c94441e63
--- /dev/null
+++ b/sal/osl/w32/pipe.cxx
@@ -0,0 +1,489 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.h"
+
+#include <osl/pipe.h>
+#include <osl/diagnose.h>
+#include <osl/thread.h>
+#include <osl/mutex.h>
+#include <osl/conditn.h>
+#include <osl/interlck.h>
+#include <osl/process.h>
+#include <rtl/alloc.h>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+
+#include <cassert>
+#include <string.h>
+
+#define PIPESYSTEM "\\\\.\\pipe\\"
+#define PIPEPREFIX "OSL_PIPE_"
+
+struct oslPipeImpl
+{
+ oslInterlockedCount m_Reference;
+ HANDLE m_File;
+ HANDLE m_NamedObject;
+ PSECURITY_ATTRIBUTES m_Security;
+ HANDLE m_ReadEvent;
+ HANDLE m_WriteEvent;
+ HANDLE m_AcceptEvent;
+ rtl_uString* m_Name;
+ oslPipeError m_Error;
+ bool m_bClosed;
+};
+
+static oslPipe osl_createPipeImpl(void)
+{
+ oslPipe pPipe;
+
+ pPipe = static_cast< oslPipe >(rtl_allocateZeroMemory(sizeof(struct oslPipeImpl)));
+
+ pPipe->m_bClosed = false;
+ pPipe->m_Reference = 0;
+ pPipe->m_Name = nullptr;
+ pPipe->m_File = INVALID_HANDLE_VALUE;
+ pPipe->m_NamedObject = nullptr;
+
+ pPipe->m_ReadEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr);
+ pPipe->m_WriteEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr);
+ pPipe->m_AcceptEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr);
+
+ return pPipe;
+}
+
+static void osl_destroyPipeImpl(oslPipe pPipe)
+{
+ if (!pPipe)
+ return;
+
+ if (pPipe->m_NamedObject)
+ CloseHandle(pPipe->m_NamedObject);
+
+ if (pPipe->m_Security)
+ {
+ free(pPipe->m_Security->lpSecurityDescriptor);
+ free(pPipe->m_Security);
+ }
+
+ CloseHandle(pPipe->m_ReadEvent);
+ CloseHandle(pPipe->m_WriteEvent);
+ CloseHandle(pPipe->m_AcceptEvent);
+
+ if (pPipe->m_Name)
+ rtl_uString_release(pPipe->m_Name);
+
+ free(pPipe);
+}
+
+oslPipe SAL_CALL osl_createPipe(rtl_uString *strPipeName, oslPipeOptions Options,
+ oslSecurity Security)
+{
+ rtl_uString* name = nullptr;
+ rtl_uString* path = nullptr;
+ rtl_uString* temp = nullptr;
+ oslPipe pPipe;
+
+ PSECURITY_ATTRIBUTES pSecAttr = nullptr;
+
+ rtl_uString_newFromAscii(&path, PIPESYSTEM);
+ rtl_uString_newFromAscii(&name, PIPEPREFIX);
+
+ if (Security)
+ {
+ rtl_uString *Ident = nullptr;
+ rtl_uString *Delim = nullptr;
+
+ OSL_VERIFY(osl_getUserIdent(Security, &Ident));
+ rtl_uString_newFromAscii(&Delim, "_");
+
+ rtl_uString_newConcat(&temp, name, Ident);
+ rtl_uString_newConcat(&name, temp, Delim);
+
+ rtl_uString_release(Ident);
+ rtl_uString_release(Delim);
+ }
+ else
+ {
+ if (Options & osl_Pipe_CREATE)
+ {
+ PSECURITY_DESCRIPTOR pSecDesc;
+
+ pSecDesc = static_cast< PSECURITY_DESCRIPTOR >(malloc(SECURITY_DESCRIPTOR_MIN_LENGTH));
+ assert(pSecDesc); // Don't handle OOM conditions
+
+ /* add a NULL disc. ACL to the security descriptor */
+ OSL_VERIFY(InitializeSecurityDescriptor(pSecDesc, SECURITY_DESCRIPTOR_REVISION));
+ OSL_VERIFY(SetSecurityDescriptorDacl(pSecDesc, TRUE, nullptr, FALSE));
+
+ pSecAttr = static_cast< PSECURITY_ATTRIBUTES >(malloc(sizeof(SECURITY_ATTRIBUTES)));
+ assert(pSecAttr); // Don't handle OOM conditions
+ pSecAttr->nLength = sizeof(SECURITY_ATTRIBUTES);
+ pSecAttr->lpSecurityDescriptor = pSecDesc;
+ pSecAttr->bInheritHandle = TRUE;
+ }
+ }
+
+ rtl_uString_assign(&temp, name);
+ rtl_uString_newConcat(&name, temp, strPipeName);
+
+ /* alloc memory */
+ pPipe = osl_createPipeImpl();
+
+ assert(pPipe); // if osl_createPipeImpl() cannot init. a new pipe, this is a failure
+
+ osl_atomic_increment(&(pPipe->m_Reference));
+
+ /* build system pipe name */
+ rtl_uString_assign(&temp, path);
+ rtl_uString_newConcat(&path, temp, name);
+ rtl_uString_release(temp);
+ temp = nullptr;
+
+ if (Options & osl_Pipe_CREATE)
+ {
+ SetLastError(ERROR_SUCCESS);
+
+ pPipe->m_NamedObject = CreateMutexW(nullptr, FALSE, o3tl::toW(name->buffer));
+
+ if (pPipe->m_NamedObject)
+ {
+ if (GetLastError() != ERROR_ALREADY_EXISTS)
+ {
+ pPipe->m_Security = pSecAttr;
+ rtl_uString_assign(&pPipe->m_Name, name);
+
+ /* try to open system pipe */
+ pPipe->m_File = CreateNamedPipeW(
+ o3tl::toW(path->buffer),
+ PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
+ PIPE_WAIT | PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE,
+ PIPE_UNLIMITED_INSTANCES,
+ 4096, 4096,
+ NMPWAIT_WAIT_FOREVER,
+ pPipe->m_Security);
+
+ if (pPipe->m_File != INVALID_HANDLE_VALUE)
+ {
+ rtl_uString_release( name );
+ rtl_uString_release( path );
+
+ return pPipe;
+ }
+ }
+ else
+ {
+ CloseHandle(pPipe->m_NamedObject);
+ pPipe->m_NamedObject = nullptr;
+ }
+ }
+ }
+ else
+ {
+ bool bPipeAvailable;
+
+ do
+ {
+ /* free instance should be available first */
+ bPipeAvailable = WaitNamedPipeW(o3tl::toW(path->buffer), NMPWAIT_WAIT_FOREVER);
+
+ /* first try to open system pipe */
+ if (bPipeAvailable)
+ {
+ pPipe->m_File = CreateFileW(
+ o3tl::toW(path->buffer),
+ GENERIC_READ|GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ nullptr,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
+ nullptr);
+
+ if (pPipe->m_File != INVALID_HANDLE_VALUE)
+ {
+ // We got it !
+ rtl_uString_release(name);
+ rtl_uString_release(path);
+
+ // We should try to transfer our privilege to become foreground process
+ // to the other process, so that it may show popups (otherwise, they might
+ // be blocked by SPI_GETFOREGROUNDLOCKTIMEOUT setting -
+ // see SystemParametersInfo function at MSDN
+ ULONG ServerProcessId = 0;
+ if (GetNamedPipeServerProcessId(pPipe->m_File, &ServerProcessId))
+ AllowSetForegroundWindow(ServerProcessId);
+
+ return pPipe;
+ }
+ else
+ {
+ // Pipe instance maybe caught by another client -> try again
+ }
+ }
+ } while (bPipeAvailable);
+ }
+
+ /* if we reach here something went wrong */
+ osl_destroyPipeImpl(pPipe);
+
+ return nullptr;
+}
+
+void SAL_CALL osl_acquirePipe(oslPipe pPipe)
+{
+ osl_atomic_increment(&(pPipe->m_Reference));
+}
+
+void SAL_CALL osl_releasePipe(oslPipe pPipe)
+{
+ if (!pPipe)
+ return;
+
+ if (osl_atomic_decrement(&(pPipe->m_Reference)) == 0)
+ {
+ if (!pPipe->m_bClosed)
+ osl_closePipe(pPipe);
+
+ osl_destroyPipeImpl(pPipe);
+ }
+}
+
+void SAL_CALL osl_closePipe(oslPipe pPipe)
+{
+ if (pPipe && !pPipe->m_bClosed)
+ {
+ pPipe->m_bClosed = true;
+ /* if we have a system pipe close it */
+ if (pPipe->m_File != INVALID_HANDLE_VALUE)
+ {
+ DisconnectNamedPipe(pPipe->m_File);
+ CloseHandle(pPipe->m_File);
+ }
+ }
+}
+
+oslPipe SAL_CALL osl_acceptPipe(oslPipe pPipe)
+{
+ oslPipe pAcceptedPipe = nullptr;
+
+ OVERLAPPED os = {};
+
+ DWORD nBytesTransferred;
+ rtl_uString* path = nullptr;
+ rtl_uString* temp = nullptr;
+
+ SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_acceptPipe: invalid pipe");
+ if (!pPipe)
+ return nullptr;
+
+ SAL_WARN_IF(pPipe->m_File == INVALID_HANDLE_VALUE, "sal.osl.pipe", "osl_acceptPipe: invalid handle");
+
+ os.hEvent = pPipe->m_AcceptEvent;
+ ResetEvent(pPipe->m_AcceptEvent);
+
+ if (!ConnectNamedPipe(pPipe->m_File, &os))
+ {
+ switch (GetLastError())
+ {
+ case ERROR_PIPE_CONNECTED: // Client already connected to pipe
+ case ERROR_NO_DATA: // Client was connected but has already closed pipe end
+ // should only appear in nonblocking mode but in fact does
+ // in blocking asynchronous mode.
+ break;
+ case ERROR_PIPE_LISTENING: // Only for nonblocking mode but see ERROR_NO_DATA
+ case ERROR_IO_PENDING: // This is normal if not client is connected yet
+ case ERROR_MORE_DATA: // Should not happen
+ // blocking call to accept
+ if( !GetOverlappedResult(pPipe->m_File, &os, &nBytesTransferred, TRUE))
+ {
+ // Possible error could be that between ConnectNamedPipe and
+ // GetOverlappedResult a connect took place.
+
+ switch (GetLastError())
+ {
+ case ERROR_PIPE_CONNECTED: // Pipe was already connected
+ case ERROR_NO_DATA: // Pipe was connected but client has already closed -> ver fast client ;-)
+ break; // Everything's fine !!!
+ default:
+ // Something went wrong
+ return nullptr;
+ }
+ }
+ break;
+ default: // All other error say that somethings going wrong.
+ return nullptr;
+ }
+ }
+
+ pAcceptedPipe = osl_createPipeImpl();
+ assert(pAcceptedPipe); // should never be the case that an oslPipe cannot be initialized
+
+ osl_atomic_increment(&(pAcceptedPipe->m_Reference));
+ rtl_uString_assign(&pAcceptedPipe->m_Name, pPipe->m_Name);
+ pAcceptedPipe->m_File = pPipe->m_File;
+
+ rtl_uString_newFromAscii(&temp, PIPESYSTEM);
+ rtl_uString_newConcat(&path, temp, pPipe->m_Name);
+ rtl_uString_release(temp);
+
+ // prepare for next accept
+ pPipe->m_File =
+ CreateNamedPipeW(o3tl::toW(path->buffer),
+ PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
+ PIPE_WAIT | PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE,
+ PIPE_UNLIMITED_INSTANCES,
+ 4096, 4096,
+ NMPWAIT_WAIT_FOREVER,
+ pAcceptedPipe->m_Security);
+ rtl_uString_release(path);
+
+ return pAcceptedPipe;
+}
+
+sal_Int32 SAL_CALL osl_receivePipe(oslPipe pPipe,
+ void* pBuffer,
+ sal_Int32 BytesToRead)
+{
+ DWORD nBytes;
+ OVERLAPPED os = {};
+
+ assert(pPipe);
+
+ os.hEvent = pPipe->m_ReadEvent;
+
+ ResetEvent(pPipe->m_ReadEvent);
+
+ if (!ReadFile(pPipe->m_File, pBuffer, BytesToRead, &nBytes, &os) &&
+ ((GetLastError() != ERROR_IO_PENDING) ||
+ !GetOverlappedResult(pPipe->m_File, &os, &nBytes, TRUE)))
+ {
+ DWORD lastError = GetLastError();
+
+ if (lastError == ERROR_MORE_DATA)
+ {
+ nBytes = BytesToRead;
+ }
+ else
+ {
+ if (lastError == ERROR_PIPE_NOT_CONNECTED)
+ nBytes = 0;
+ else
+ nBytes = DWORD(-1);
+
+ pPipe->m_Error = osl_Pipe_E_ConnectionAbort;
+ }
+ }
+
+ return nBytes;
+}
+
+sal_Int32 SAL_CALL osl_sendPipe(oslPipe pPipe,
+ const void* pBuffer,
+ sal_Int32 BytesToSend)
+{
+ DWORD nBytes;
+ OVERLAPPED os = {};
+
+ assert(pPipe);
+
+ os.hEvent = pPipe->m_WriteEvent;
+ ResetEvent(pPipe->m_WriteEvent);
+
+ if (!WriteFile(pPipe->m_File, pBuffer, BytesToSend, &nBytes, &os) &&
+ ((GetLastError() != ERROR_IO_PENDING) ||
+ !GetOverlappedResult(pPipe->m_File, &os, &nBytes, TRUE)))
+ {
+ if (GetLastError() == ERROR_PIPE_NOT_CONNECTED)
+ nBytes = 0;
+ else
+ nBytes = DWORD(-1);
+
+ pPipe->m_Error = osl_Pipe_E_ConnectionAbort;
+ }
+
+ return nBytes;
+}
+
+sal_Int32 SAL_CALL osl_writePipe(oslPipe pPipe, const void *pBuffer , sal_Int32 n)
+{
+ /* loop until all desired bytes were send or an error occurred */
+ sal_Int32 BytesSend = 0;
+ sal_Int32 BytesToSend = n;
+
+ SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_writePipe: invalid pipe");
+ while (BytesToSend > 0)
+ {
+ sal_Int32 RetVal;
+
+ RetVal= osl_sendPipe(pPipe, pBuffer, BytesToSend);
+
+ /* error occurred? */
+ if (RetVal <= 0)
+ break;
+
+ BytesToSend -= RetVal;
+ BytesSend += RetVal;
+ pBuffer= static_cast< char const* >(pBuffer) + RetVal;
+ }
+
+ return BytesSend;
+}
+
+sal_Int32 SAL_CALL osl_readPipe(oslPipe pPipe, void *pBuffer, sal_Int32 n)
+{
+ /* loop until all desired bytes were read or an error occurred */
+ sal_Int32 BytesRead = 0;
+ sal_Int32 BytesToRead = n;
+
+ SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_readPipe: invalid pipe");
+ while (BytesToRead > 0)
+ {
+ sal_Int32 RetVal;
+ RetVal= osl_receivePipe(pPipe, pBuffer, BytesToRead);
+
+ /* error occurred? */
+ if(RetVal <= 0)
+ break;
+
+ BytesToRead -= RetVal;
+ BytesRead += RetVal;
+ pBuffer= static_cast< char* >(pBuffer) + RetVal;
+ }
+ return BytesRead;
+}
+
+oslPipeError SAL_CALL osl_getLastPipeError(oslPipe pPipe)
+{
+ oslPipeError Error;
+
+ if (pPipe)
+ {
+ Error = pPipe->m_Error;
+ pPipe->m_Error = osl_Pipe_E_None;
+ }
+ else
+ {
+ Error = osl_Pipe_E_NotFound;
+ }
+
+ return Error;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/process.cxx b/sal/osl/w32/process.cxx
new file mode 100644
index 000000000..065415f2c
--- /dev/null
+++ b/sal/osl/w32/process.cxx
@@ -0,0 +1,525 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.h"
+#include <string.h>
+
+#include <shellapi.h>
+
+#include <cassert>
+
+#include <osl/mutex.hxx>
+#include <osl/nlsupport.h>
+#include <o3tl/char16_t2wchar_t.hxx>
+
+#include "filetime.hxx"
+#include "nlsupport.hxx"
+#include "procimpl.hxx"
+#include "file_url.hxx"
+#include "path_helper.hxx"
+#include <rtl/alloc.h>
+#include <rtl/ustring.hxx>
+#include <sal/log.hxx>
+
+oslProcessError SAL_CALL osl_terminateProcess(oslProcess Process)
+{
+ if (Process == nullptr)
+ return osl_Process_E_Unknown;
+
+ HANDLE hProcess = static_cast<oslProcessImpl*>(Process)->m_hProcess;
+ DWORD dwPID = GetProcessId(hProcess);
+
+ // cannot be System Process (0x00000000)
+ if (dwPID == 0x0)
+ return osl_Process_E_InvalidError;
+
+ // Test to see if we can create a thread in a process... adapted from:
+ // * https://support.microsoft.com/en-us/help/178893/how-to-terminate-an-application-cleanly-in-win32
+ // * http://www.drdobbs.com/a-safer-alternative-to-terminateprocess/184416547
+
+ // TODO: we really should firstly check to see if we have access to create threads and only
+ // duplicate the handle with elevated access if we don't have access... this can be done, but
+ // it's not exactly easy - an example can be found here:
+ // http://windowsitpro.com/site-files/windowsitpro.com/files/archive/windowsitpro.com/content/content/15989/listing_01.txt
+
+ HANDLE hDupProcess = nullptr;
+
+
+ // we need to make sure we can create a thread in the remote process, if the handle was created
+ // in something that doesn't give us appropriate levels of access then we will need to give it the
+ // desired level of access - if the process handle was grabbed from OpenProcess it's quite possible
+ // that the handle doesn't have the appropriate level of access...
+
+ // see https://msdn.microsoft.com/en-au/library/windows/desktop/ms684880(v=vs.85).aspx
+ DWORD const dwAccessFlags = (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION
+ | PROCESS_VM_WRITE | PROCESS_VM_READ);
+
+ bool bHaveDuplHdl = DuplicateHandle(GetCurrentProcess(), // handle to process that has handle
+ hProcess, // handle to be duplicated
+ GetCurrentProcess(), // process that will get the dup handle
+ &hDupProcess, // store duplicate process handle here
+ dwAccessFlags, // desired access
+ FALSE, // handle can't be inherited
+ 0); // zero means no additional action needed
+
+ if (bHaveDuplHdl)
+ hProcess = hDupProcess; // so we were able to duplicate the handle, all good...
+ else
+ SAL_WARN("sal.osl", "Could not duplicate process handle, let's hope for the best...");
+
+ DWORD dwProcessStatus = 0;
+ HANDLE hRemoteThread = nullptr;
+
+ if (GetExitCodeProcess(hProcess, &dwProcessStatus) && (dwProcessStatus == STILL_ACTIVE))
+ {
+ // We need to get the address of the Win32 procedure ExitProcess, can't call it
+ // directly because we'll be calling the thunk and that will probably lead to an
+ // access violation. Once we have the address, then we need to create a new
+ // thread in the process (which we might need to run in the address space of
+ // another process) and then call on ExitProcess to try to cleanly terminate that
+ // process
+
+ DWORD dwTID = 0; // dummy variable as we don't need to track the thread ID
+
+ // Note: we want to call on ExitProcess() and not TerminateProcess() - this is
+ // because with ExitProcess() Windows notifies all attached dlls that the process
+ // is detaching from the dll, but TerminateProcess() terminates all threads
+ // immediately, doesn't call any termination handlers and doesn't notify any dlls
+ // that it is detaching from them
+
+ HINSTANCE hKernel = GetModuleHandleW(L"kernel32.dll");
+ FARPROC pfnExitProc = GetProcAddress(hKernel, "ExitProcess");
+ hRemoteThread = CreateRemoteThread(
+ hProcess, /* process handle */
+ nullptr, /* default security descriptor */
+ 0, /* initial size of stack in bytes is default
+ size for executable */
+ reinterpret_cast<LPTHREAD_START_ROUTINE>(pfnExitProc), /* Win32 ExitProcess() */
+ reinterpret_cast<PVOID>(UINT(0)), /* ExitProcess(UINT uExitCode) argument */
+ 0, /* value of 0 tells thread to run immediately
+ after creation */
+ &dwTID); /* new remote thread's identifier */
+
+ }
+
+ bool bHasExited = false;
+
+ if (hRemoteThread)
+ {
+ WaitForSingleObject(hProcess, INFINITE); // wait for process to terminate, never stop waiting...
+ CloseHandle(hRemoteThread); // close the thread handle to allow the process to exit
+ bHasExited = true;
+ }
+
+ // need to close this duplicated process handle...
+ if (bHaveDuplHdl)
+ CloseHandle(hProcess);
+
+ if (bHasExited)
+ return osl_Process_E_None;
+
+ // fallback - given that we wait for an infinite time on WaitForSingleObject, this should
+ // never occur... unless CreateRemoteThread failed
+ SAL_WARN("sal.osl", "TerminateProcess(hProcess, 0) called - we should never get here!");
+ return (TerminateProcess(hProcess, 0) == FALSE) ? osl_Process_E_Unknown : osl_Process_E_None;
+}
+
+oslProcess SAL_CALL osl_getProcess(oslProcessIdentifier Ident)
+{
+ oslProcessImpl* pProcImpl;
+ HANDLE hProcess = OpenProcess(
+ STANDARD_RIGHTS_REQUIRED | PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, static_cast<DWORD>(Ident));
+
+ if (hProcess)
+ {
+ pProcImpl = static_cast< oslProcessImpl*>( malloc(sizeof(oslProcessImpl)) );
+ pProcImpl->m_hProcess = hProcess;
+ pProcImpl->m_IdProcess = Ident;
+ }
+ else
+ pProcImpl = nullptr;
+
+ return pProcImpl;
+}
+
+void SAL_CALL osl_freeProcessHandle(oslProcess Process)
+{
+ if (Process != nullptr)
+ {
+ CloseHandle(static_cast<oslProcessImpl*>(Process)->m_hProcess);
+
+ free(Process);
+ }
+}
+
+oslProcessError SAL_CALL osl_getProcessInfo(oslProcess Process, oslProcessData Fields,
+ oslProcessInfo* pInfo)
+{
+ HANDLE hProcess;
+ DWORD IdProcess;
+
+ if (Process == nullptr)
+ {
+ hProcess = GetCurrentProcess();
+ IdProcess = GetCurrentProcessId();
+ }
+ else
+ {
+ hProcess = static_cast<oslProcessImpl*>(Process)->m_hProcess;
+ IdProcess = static_cast<oslProcessImpl*>(Process)->m_IdProcess;
+ }
+
+ if (! pInfo || (pInfo->Size != sizeof(oslProcessInfo)))
+ return osl_Process_E_Unknown;
+
+ pInfo->Fields = 0;
+
+ if (Fields & osl_Process_IDENTIFIER)
+ {
+ pInfo->Ident = IdProcess;
+ pInfo->Fields |= osl_Process_IDENTIFIER;
+ }
+
+ if (Fields & osl_Process_EXITCODE)
+ {
+ if (GetExitCodeProcess(hProcess, &(pInfo->Code)) && (pInfo->Code != STILL_ACTIVE))
+ pInfo->Fields |= osl_Process_EXITCODE;
+ }
+
+ if (Fields & osl_Process_HEAPUSAGE)
+ {
+ void* lpAddress=nullptr;
+ MEMORY_BASIC_INFORMATION Info;
+
+ pInfo->HeapUsage = 0;
+
+ do
+ {
+ if (VirtualQueryEx(hProcess, lpAddress, &Info, sizeof(Info)) == 0)
+ break;
+
+ if ((Info.State == MEM_COMMIT) && (Info.Type == MEM_PRIVATE))
+ pInfo->HeapUsage += Info.RegionSize;
+
+ lpAddress = static_cast<LPBYTE>(lpAddress) + Info.RegionSize;
+ }
+ while (reinterpret_cast<uintptr_t>(lpAddress) <= 0x7FFFFFFFU); // 2GB address space
+
+ pInfo->Fields |= osl_Process_HEAPUSAGE;
+ }
+
+ if (Fields & osl_Process_CPUTIMES)
+ {
+ FILETIME CreationTime, ExitTime, KernelTime, UserTime;
+
+ if (GetProcessTimes(hProcess, &CreationTime, &ExitTime,
+ &KernelTime, &UserTime))
+ {
+ __int64 Value;
+
+ Value = osl::detail::getFiletime(UserTime);
+ pInfo->UserTime.Seconds = static_cast<unsigned long>(Value / 10000000L);
+ pInfo->UserTime.Nanosec = static_cast<unsigned long>((Value % 10000000L) * 100);
+
+ Value = osl::detail::getFiletime(KernelTime);
+ pInfo->SystemTime.Seconds = static_cast<unsigned long>(Value / 10000000L);
+ pInfo->SystemTime.Nanosec = static_cast<unsigned long>((Value % 10000000L) * 100);
+
+ pInfo->Fields |= osl_Process_CPUTIMES;
+ }
+ }
+
+ return (pInfo->Fields == Fields) ? osl_Process_E_None : osl_Process_E_Unknown;
+}
+
+oslProcessError SAL_CALL osl_joinProcess(oslProcess Process)
+{
+ return osl_joinProcessWithTimeout(Process, nullptr);
+}
+
+oslProcessError SAL_CALL osl_joinProcessWithTimeout(oslProcess Process, const TimeValue* pTimeout)
+{
+ DWORD timeout = INFINITE;
+ oslProcessError osl_error = osl_Process_E_None;
+ DWORD ret;
+
+ if (nullptr == Process)
+ return osl_Process_E_Unknown;
+
+ if (pTimeout)
+ timeout = pTimeout->Seconds * 1000 + pTimeout->Nanosec / 1000000L;
+
+ ret = WaitForSingleObject(static_cast<oslProcessImpl*>(Process)->m_hProcess, timeout);
+
+ if (WAIT_FAILED == ret)
+ osl_error = osl_Process_E_Unknown;
+ else if (WAIT_TIMEOUT == ret)
+ osl_error = osl_Process_E_TimedOut;
+
+ return osl_error;
+}
+
+namespace {
+
+oslProcessError bootstrap_getExecutableFile(rtl_uString ** ppFileURL)
+{
+ oslProcessError result = osl_Process_E_NotFound;
+
+ ::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH );
+ DWORD buflen = 0;
+
+ if ((buflen = GetModuleFileNameW (nullptr, o3tl::toW(aBuffer), aBuffer.getBufSizeInSymbols())) > 0)
+ {
+ rtl_uString * pAbsPath = nullptr;
+ rtl_uString_newFromStr_WithLength (&pAbsPath, aBuffer, buflen);
+ if (pAbsPath)
+ {
+ /* Convert from path to url. */
+ if (osl_getFileURLFromSystemPath (pAbsPath, ppFileURL) == osl_File_E_None)
+ {
+ /* Success. */
+ result = osl_Process_E_None;
+ }
+ rtl_uString_release (pAbsPath);
+ }
+ }
+
+ return result;
+}
+
+struct CommandArgs_Impl
+{
+ sal_uInt32 m_nCount;
+ rtl_uString ** m_ppArgs;
+};
+
+}
+
+static struct CommandArgs_Impl g_command_args =
+{
+ 0,
+ nullptr
+};
+
+static rtl_uString ** osl_createCommandArgs_Impl (int argc, char **)
+{
+ rtl_uString ** ppArgs =
+ static_cast<rtl_uString**>(rtl_allocateZeroMemory (argc * sizeof(rtl_uString*)));
+ if (ppArgs != nullptr)
+ {
+ int i;
+ int nArgs;
+ LPWSTR *wargv = CommandLineToArgvW( GetCommandLineW(), &nArgs );
+ assert( nArgs == argc );
+ for (i = 0; i < nArgs; i++)
+ {
+ /* Convert to unicode */
+ rtl_uString_newFromStr( &(ppArgs[i]), o3tl::toU(wargv[i]) );
+ }
+ if (ppArgs[0] != nullptr)
+ {
+ /* Ensure absolute path */
+ ::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH );
+ DWORD dwResult
+ = GetModuleFileNameW(nullptr, o3tl::toW(aBuffer), aBuffer.getBufSizeInSymbols());
+ if ((0 < dwResult) && (dwResult < aBuffer.getBufSizeInSymbols()))
+ {
+ /* Replace argv[0] with its absolute path */
+ rtl_uString_newFromStr_WithLength(
+ &(ppArgs[0]), aBuffer, dwResult);
+ }
+ }
+ if (ppArgs[0] != nullptr)
+ {
+ /* Convert to FileURL, see @ osl_getExecutableFile() */
+ rtl_uString * pResult = nullptr;
+ osl_getFileURLFromSystemPath (ppArgs[0], &pResult);
+ if (pResult != nullptr)
+ {
+ rtl_uString_assign (&(ppArgs[0]), pResult);
+ rtl_uString_release (pResult);
+ }
+ }
+ }
+ return ppArgs;
+
+}
+
+oslProcessError SAL_CALL osl_getExecutableFile( rtl_uString **ppustrFile )
+{
+ {
+ osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex());
+ if (g_command_args.m_nCount > 0)
+ {
+ /* CommandArgs set. Obtain arv[0]. */
+ rtl_uString_assign(ppustrFile, g_command_args.m_ppArgs[0]);
+ return osl_Process_E_None;
+ }
+ }
+ return bootstrap_getExecutableFile(ppustrFile);
+}
+
+sal_uInt32 SAL_CALL osl_getCommandArgCount()
+{
+ sal_uInt32 result = 0;
+
+ osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex());
+ SAL_INFO_IF(
+ g_command_args.m_nCount == 0, "sal.osl",
+ "osl_getCommandArgCount w/o prior call to osl_setCommandArgs");
+ if (g_command_args.m_nCount > 0)
+ {
+ /* We're not counting argv[0] here. */
+ result = g_command_args.m_nCount - 1;
+ }
+
+ return result;
+}
+
+oslProcessError SAL_CALL osl_getCommandArg( sal_uInt32 nArg, rtl_uString **strCommandArg)
+{
+ oslProcessError result = osl_Process_E_NotFound;
+
+ osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex());
+ assert(g_command_args.m_nCount > 0);
+ if (g_command_args.m_nCount > (nArg + 1))
+ {
+ /* We're not counting argv[0] here. */
+ rtl_uString_assign (strCommandArg, g_command_args.m_ppArgs[nArg + 1]);
+ result = osl_Process_E_None;
+ }
+
+ return result;
+}
+
+void SAL_CALL osl_setCommandArgs (int argc, char ** argv)
+{
+ assert(argc > 0);
+ osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex());
+ SAL_WARN_IF(g_command_args.m_nCount != 0, "sal.osl", "args already set");
+ if (g_command_args.m_nCount == 0)
+ {
+ rtl_uString** ppArgs = osl_createCommandArgs_Impl (argc, argv);
+ if (ppArgs != nullptr)
+ {
+ g_command_args.m_nCount = argc;
+ g_command_args.m_ppArgs = ppArgs;
+ }
+ }
+}
+
+/* TODO because of an issue with GetEnvironmentVariableW we have to
+ allocate a buffer large enough to hold the requested environment
+ variable instead of testing for the required size. This wastes
+ some stack space, maybe we should revoke this work around if
+ this is no longer a problem */
+#define ENV_BUFFER_SIZE (32*1024-1)
+
+oslProcessError SAL_CALL osl_getEnvironment(rtl_uString *ustrVar, rtl_uString **ustrValue)
+{
+ WCHAR buff[ENV_BUFFER_SIZE];
+
+ if (GetEnvironmentVariableW(o3tl::toW(ustrVar->buffer), buff, ENV_BUFFER_SIZE) > 0)
+ {
+ rtl_uString_newFromStr(ustrValue, o3tl::toU(buff));
+ return osl_Process_E_None;
+ }
+ return osl_Process_E_Unknown;
+}
+
+oslProcessError SAL_CALL osl_setEnvironment(rtl_uString *ustrVar, rtl_uString *ustrValue)
+{
+ // set Windows environment variable
+ if (SetEnvironmentVariableW(o3tl::toW(ustrVar->buffer), o3tl::toW(ustrValue->buffer)))
+ {
+ OUString sAssign = OUString::unacquired(&ustrVar) + "=" + OUString::unacquired(&ustrValue);
+ _wputenv(o3tl::toW(sAssign.getStr()));
+ return osl_Process_E_None;
+ }
+ return osl_Process_E_Unknown;
+}
+
+oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString *ustrVar)
+{
+ // delete the variable from the current process environment
+ // by setting SetEnvironmentVariable's second parameter to NULL
+ if (SetEnvironmentVariableW(o3tl::toW(ustrVar->buffer), nullptr))
+ {
+ OUString sAssign = OUString::unacquired(&ustrVar) + "=";
+ _wputenv(o3tl::toW(sAssign.getStr()));
+ return osl_Process_E_None;
+ }
+ return osl_Process_E_Unknown;
+}
+
+oslProcessError SAL_CALL osl_getProcessWorkingDir( rtl_uString **pustrWorkingDir )
+{
+ ::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH );
+ DWORD dwLen = GetCurrentDirectoryW(aBuffer.getBufSizeInSymbols(), o3tl::toW(aBuffer));
+
+ if ( dwLen && dwLen < aBuffer.getBufSizeInSymbols() )
+ {
+ oslFileError eError;
+ rtl_uString *ustrTemp = nullptr;
+
+ rtl_uString_newFromStr_WithLength( &ustrTemp, aBuffer, dwLen );
+ eError = osl_getFileURLFromSystemPath( ustrTemp, pustrWorkingDir );
+
+ rtl_uString_release( ustrTemp );
+
+ if ( osl_File_E_None != eError )
+ return osl_Process_E_Unknown;
+ else
+ return osl_Process_E_None;
+ }
+ else
+ return osl_Process_E_Unknown;
+}
+
+static rtl_Locale * g_theProcessLocale = nullptr;
+
+oslProcessError SAL_CALL osl_getProcessLocale( rtl_Locale ** ppLocale )
+{
+ osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex());
+
+ /* determine the users default locale */
+ if( nullptr == g_theProcessLocale )
+ imp_getProcessLocale( &g_theProcessLocale );
+
+ /* or return the cached value */
+ *ppLocale = g_theProcessLocale;
+
+ return osl_Process_E_None;
+}
+
+oslProcessError SAL_CALL osl_setProcessLocale( rtl_Locale * pLocale )
+{
+ osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex());
+
+ /* check if locale is supported */
+ if( RTL_TEXTENCODING_DONTKNOW == osl_getTextEncodingFromLocale( pLocale ) )
+ return osl_Process_E_Unknown;
+
+ /* just remember the locale here */
+ g_theProcessLocale = pLocale;
+
+ return osl_Process_E_None;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/procimpl.cxx b/sal/osl/w32/procimpl.cxx
new file mode 100644
index 000000000..5fb9a4634
--- /dev/null
+++ b/sal/osl/w32/procimpl.cxx
@@ -0,0 +1,596 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# undef WIN32_LEAN_AND_MEAN
+#endif
+
+#include "file-impl.hxx"
+#include "procimpl.hxx"
+#include <rtl/alloc.h>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include "secimpl.hxx"
+#include <osl/file.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+
+#include <vector>
+#include <algorithm>
+
+namespace /* private */
+{
+ /* Function object that compares two strings that are
+ expected to be environment variables in the form
+ "name=value". Only the 'name' part will be compared.
+ The comparison is in upper case and returns true
+ if the first of both strings is less than the
+ second one. */
+ struct less_environment_variable
+ {
+ bool operator() (const OUString& lhs, const OUString& rhs) const
+ {
+ OSL_ENSURE((lhs.indexOf(L'=') > -1) &&
+ (rhs.indexOf(L'=') > -1),
+ "Malformed environment variable");
+
+ // Windows compares environment variables uppercase
+ // so we do it, too
+ return (rtl_ustr_compare_WithLength(
+ lhs.toAsciiUpperCase().pData->buffer,
+ lhs.indexOf(L'='),
+ rhs.toAsciiUpperCase().pData->buffer,
+ rhs.indexOf(L'=')) < 0);
+ }
+ };
+
+ /* Function object used by for_each algorithm to
+ calculate the sum of the length of all strings
+ in a string container. */
+ class sum_of_string_lengths
+ {
+ public:
+
+ sum_of_string_lengths() : sum_(0) {}
+
+ void operator() (const OUString& string)
+ {
+ OSL_ASSERT(string.getLength());
+
+ // always include the terminating '\0'
+ if (string.getLength())
+ sum_ += string.getLength() + 1;
+ }
+
+ operator size_t () const
+ {
+ return sum_;
+ }
+ private:
+ size_t sum_;
+ };
+
+ size_t calc_sum_of_string_lengths(const std::vector<OUString>& string_cont)
+ {
+ return std::for_each(
+ string_cont.begin(), string_cont.end(), sum_of_string_lengths());
+ }
+
+ void read_environment(/*out*/ std::vector<OUString>* environment)
+ {
+ // GetEnvironmentStrings returns a sorted list, Windows
+ // sorts environment variables upper case
+ LPWSTR env = GetEnvironmentStringsW();
+ LPWSTR p = env;
+
+ while (size_t l = wcslen(p))
+ {
+ environment->push_back(OUString(o3tl::toU(p)));
+ p += l + 1;
+ }
+ FreeEnvironmentStringsW(env);
+
+ // it is apparently possible that the environment is not completely
+ // sorted; Cygwin may append entries, which breaks the equal_range
+ std::stable_sort(environment->begin(), environment->end(),
+ less_environment_variable());
+ }
+
+ /* the environment list must be sorted, new values
+ should either replace existing ones or should be
+ added to the list, environment variables will
+ be handled case-insensitive */
+ bool create_merged_environment(
+ rtl_uString* env_vars[],
+ sal_uInt32 env_vars_count,
+ /*in|out*/ std::vector<OUString>* merged_env)
+ {
+ OSL_ASSERT(env_vars && env_vars_count > 0 && merged_env);
+
+ read_environment(merged_env);
+
+ for (sal_uInt32 i = 0; i < env_vars_count; i++)
+ {
+ OUString env_var(env_vars[i]);
+
+ if (env_var.getLength() == 0)
+ return false;
+
+ auto iter_pair = std::equal_range(
+ merged_env->begin(),
+ merged_env->end(),
+ env_var,
+ less_environment_variable());
+
+ if (env_var.indexOf(L'=') == -1)
+ {
+ merged_env->erase(iter_pair.first, iter_pair.second);
+ }
+ else
+ {
+ if (iter_pair.first != iter_pair.second) // found
+ *iter_pair.first = env_var;
+ else // not found
+ merged_env->insert(iter_pair.first, env_var);
+ }
+ }
+ return true;
+ }
+
+ /* Create a merged environment */
+ bool setup_process_environment(
+ rtl_uString* environment_vars[],
+ sal_uInt32 n_environment_vars,
+ /*in|out*/ std::vector<sal_Unicode>& environment)
+ {
+ std::vector<OUString> merged_env;
+ if (!create_merged_environment(environment_vars, n_environment_vars, &merged_env))
+ return false;
+
+ // allocate enough space for the '\0'-separated environment strings and
+ // a final '\0'
+ environment.resize(calc_sum_of_string_lengths(merged_env) + 1);
+
+ sal_uInt32 pos = 0;
+ for (auto& envv : merged_env)
+ {
+ OSL_ASSERT(envv.getLength());
+
+ sal_uInt32 n = envv.getLength() + 1; // copy the final '\0', too
+ memcpy(&environment[pos], envv.getStr(), n * sizeof(sal_Unicode));
+ pos += n;
+ }
+ environment[pos] = 0; // append a final '\0'
+
+ return true;
+ }
+
+ /* In contrast to the Win32 API function CreatePipe with
+ this function the caller is able to determine separately
+ which handle of the pipe is inheritable. */
+ bool create_pipe(
+ PHANDLE p_read_pipe,
+ bool b_read_pipe_inheritable,
+ PHANDLE p_write_pipe,
+ bool b_write_pipe_inheritable,
+ LPVOID p_security_descriptor = nullptr,
+ DWORD pipe_size = 0)
+ {
+ SECURITY_ATTRIBUTES sa;
+ sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+ sa.lpSecurityDescriptor = p_security_descriptor;
+ sa.bInheritHandle = b_read_pipe_inheritable || b_write_pipe_inheritable;
+
+ bool bRet = false;
+ HANDLE hTemp = nullptr;
+
+ if (!b_read_pipe_inheritable && b_write_pipe_inheritable)
+ {
+ bRet = CreatePipe(&hTemp, p_write_pipe, &sa, pipe_size);
+
+ if (bRet && !DuplicateHandle(GetCurrentProcess(), hTemp,
+ GetCurrentProcess(), p_read_pipe, 0, FALSE,
+ DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS))
+ {
+ CloseHandle(hTemp);
+ CloseHandle(*p_read_pipe);
+ return false;
+ }
+ }
+ else if (b_read_pipe_inheritable && !b_write_pipe_inheritable)
+ {
+ bRet = CreatePipe(p_read_pipe, &hTemp, &sa, pipe_size);
+
+ if (bRet && !DuplicateHandle(GetCurrentProcess(), hTemp,
+ GetCurrentProcess(), p_write_pipe, 0, FALSE,
+ DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS))
+ {
+ CloseHandle(hTemp);
+ CloseHandle(*p_write_pipe);
+ return false;
+ }
+ }
+ else
+ {
+ bRet = CreatePipe(p_read_pipe, p_write_pipe, &sa, pipe_size);
+ }
+ return bRet;
+ }
+
+ // Add a quote sign to the start and the end of a string
+ // if not already present
+ OUString quote_string(const OUString& string)
+ {
+ OUStringBuffer quoted;
+ if (string.indexOf(L'"') != 0)
+ quoted.append('"');
+
+ quoted.append(string);
+
+ if (string.lastIndexOf(L'"') != (string.getLength() - 1))
+ quoted.append('"');
+
+ return quoted.makeStringAndClear();
+ }
+
+ // The parameter path must be a system path. If it is longer than 260 characters
+ // then it is shortened using the GetShortPathName function. This function only
+ // works if the path exists. Because "path" can be the path to an executable, it
+ // may not have the file extension ".exe". However, if the file on disk has the
+ // ".exe" extension, then the function will fail. In this case a second attempt
+ // is started by adding the parameter "extension" to "path".
+ OUString getShortPath(OUString const & path, OUString const & extension)
+ {
+ OUString ret(path);
+ if (path.getLength() > 260)
+ {
+ std::vector<sal_Unicode> vec(path.getLength() + 1);
+ //GetShortPathNameW only works if the file can be found!
+ const DWORD len = GetShortPathNameW(
+ o3tl::toW(path.getStr()), o3tl::toW(vec.data()), path.getLength() + 1);
+
+ if (!len && GetLastError() == ERROR_FILE_NOT_FOUND
+ && extension.getLength())
+ {
+ const OUString extPath(path + extension);
+ std::vector<sal_Unicode> vec2(
+ extPath.getLength() + 1);
+ const DWORD len2 = GetShortPathNameW(
+ o3tl::toW(extPath.getStr()), o3tl::toW(vec2.data()), extPath.getLength() + 1);
+ ret = OUString(vec2.data(), len2);
+ }
+ else
+ {
+ ret = OUString(vec.data(), len);
+ }
+ }
+ return ret;
+ }
+
+ // Returns the system path of the executable which can either
+ // be provided via the strImageName parameter or as first
+ // element of the strArguments list.
+ // The returned path will be quoted if it contains spaces.
+ OUString get_executable_path(
+ rtl_uString* image_name,
+ rtl_uString* cmdline_args[],
+ sal_uInt32 n_cmdline_args,
+ bool search_path)
+ {
+ OUString exe_name;
+
+ if (image_name)
+ exe_name = image_name;
+ else if (n_cmdline_args)
+ exe_name = OUString(cmdline_args[0]);
+
+ OUString exe_url = exe_name;
+ if (search_path)
+ osl_searchFileURL(exe_name.pData, nullptr, &exe_url.pData);
+
+ OUString exe_path;
+ if (osl::FileBase::E_None != osl::FileBase::getSystemPathFromFileURL(exe_url, exe_path))
+ return OUString();
+
+ exe_path = getShortPath(exe_path, ".exe");
+
+ if (exe_path.indexOf(' ') != -1)
+ exe_path = quote_string(exe_path);
+
+ return exe_path;
+ }
+
+ OUString get_file_extension(const OUString& file_name)
+ {
+ // Quoted file name
+ if ((file_name.indexOf(L'"') == 0) && (file_name.lastIndexOf(L'"') == (file_name.getLength() - 1)))
+ {
+ sal_Int32 index = file_name.lastIndexOf('.');
+ if ((index != -1) && ((index + 2) < file_name.getLength()))
+ return file_name.copy(index + 1, file_name.getLength() - (index + 2));
+ }
+ // Unquoted file name
+ else
+ {
+ sal_Int32 index = file_name.lastIndexOf('.');
+ if ((index != -1) && ((index + 1) < file_name.getLength()))
+ return file_name.copy(index + 1);
+ }
+ return OUString();
+ }
+
+ bool is_batch_file(const OUString& file_name)
+ {
+ OUString ext = get_file_extension(file_name);
+ return (ext.equalsIgnoreAsciiCase("bat") ||
+ ext.equalsIgnoreAsciiCase("cmd") ||
+ ext.equalsIgnoreAsciiCase("btm"));
+ }
+
+ const OUString ENV_COMSPEC ("COMSPEC");
+ OUString get_batch_processor()
+ {
+ OUString comspec;
+ osl_getEnvironment(ENV_COMSPEC.pData, &comspec.pData);
+
+ OSL_ASSERT(comspec.getLength());
+
+ /* check if comspec path contains blanks and quote it if any */
+ if (comspec.indexOf(' ') != -1)
+ comspec = quote_string(comspec);
+
+ return comspec;
+ }
+
+} // namespace private
+
+oslProcessError SAL_CALL osl_executeProcess(
+ rtl_uString *strImageName,
+ rtl_uString *strArguments[],
+ sal_uInt32 nArguments,
+ oslProcessOption Options,
+ oslSecurity Security,
+ rtl_uString *strDirectory,
+ rtl_uString *strEnvironmentVars[],
+ sal_uInt32 nEnvironmentVars,
+ oslProcess *pProcess
+)
+{
+ return osl_executeProcess_WithRedirectedIO(
+ strImageName,
+ strArguments,
+ nArguments,
+ Options,
+ Security,
+ strDirectory,
+ strEnvironmentVars,
+ nEnvironmentVars,
+ pProcess,
+ nullptr, nullptr, nullptr );
+}
+
+oslProcessError SAL_CALL osl_executeProcess_WithRedirectedIO(
+ rtl_uString *ustrImageName,
+ rtl_uString *ustrArguments[],
+ sal_uInt32 nArguments,
+ oslProcessOption Options,
+ oslSecurity Security,
+ rtl_uString *ustrDirectory,
+ rtl_uString *ustrEnvironmentVars[],
+ sal_uInt32 nEnvironmentVars,
+ oslProcess *pProcess,
+ oslFileHandle *pProcessInputWrite,
+ oslFileHandle *pProcessOutputRead,
+ oslFileHandle *pProcessErrorRead)
+{
+ OUString exe_path = get_executable_path(
+ ustrImageName, ustrArguments, nArguments, (Options & osl_Process_SEARCHPATH) != 0);
+
+ if (0 == exe_path.getLength())
+ return osl_Process_E_NotFound;
+
+ if (pProcess == nullptr)
+ return osl_Process_E_InvalidError;
+
+ DWORD flags = NORMAL_PRIORITY_CLASS;
+ OUStringBuffer command_line;
+
+ if (is_batch_file(exe_path))
+ {
+ OUString batch_processor = get_batch_processor();
+
+ if (batch_processor.getLength())
+ {
+ /* cmd.exe does not work without a console window */
+ if (!(Options & osl_Process_WAIT) || (Options & osl_Process_DETACHED))
+ flags |= CREATE_NEW_CONSOLE;
+
+ command_line.append(batch_processor);
+ command_line.append(" /c ");
+ }
+ else
+ // should we return here in case of error?
+ return osl_Process_E_Unknown;
+ }
+
+ command_line.append(exe_path);
+
+ /* Add remaining arguments to command line. If ustrImageName is nullptr
+ the first parameter is the name of the executable so we have to
+ start at 1 instead of 0 */
+ for (sal_uInt32 n = (nullptr != ustrImageName) ? 0 : 1; n < nArguments; n++)
+ {
+ command_line.append(" ");
+
+ /* Quote arguments containing blanks */
+ if (OUString(ustrArguments[n]).indexOf(' ') != -1)
+ command_line.append(quote_string(ustrArguments[n]));
+ else
+ command_line.append(ustrArguments[n]);
+ }
+
+ std::vector<sal_Unicode> environment;
+ LPVOID p_environment = nullptr;
+
+ if (nEnvironmentVars && ustrEnvironmentVars)
+ {
+ if (!setup_process_environment(
+ ustrEnvironmentVars, nEnvironmentVars, environment))
+ return osl_Process_E_InvalidError;
+
+ flags |= CREATE_UNICODE_ENVIRONMENT;
+ p_environment = environment.data();
+ }
+
+ OUString cwd;
+ if (ustrDirectory && ustrDirectory->length && (osl::FileBase::E_None != osl::FileBase::getSystemPathFromFileURL(ustrDirectory, cwd)))
+ return osl_Process_E_InvalidError;
+
+ LPCWSTR p_cwd = (cwd.getLength()) ? o3tl::toW(cwd.getStr()) : nullptr;
+
+ if ((Options & osl_Process_DETACHED) && !(flags & CREATE_NEW_CONSOLE))
+ flags |= DETACHED_PROCESS;
+
+ STARTUPINFOW startup_info = {};
+ startup_info.cb = sizeof(startup_info);
+ startup_info.dwFlags = STARTF_USESHOWWINDOW;
+ startup_info.lpDesktop = const_cast<LPWSTR>(L"");
+
+ /* Create pipes for redirected IO */
+ HANDLE hInputRead = nullptr;
+ HANDLE hInputWrite = nullptr;
+ if (pProcessInputWrite && create_pipe(&hInputRead, true, &hInputWrite, false))
+ startup_info.hStdInput = hInputRead;
+
+ HANDLE hOutputRead = nullptr;
+ HANDLE hOutputWrite = nullptr;
+ if (pProcessOutputRead && create_pipe(&hOutputRead, false, &hOutputWrite, true))
+ startup_info.hStdOutput = hOutputWrite;
+
+ HANDLE hErrorRead = nullptr;
+ HANDLE hErrorWrite = nullptr;
+ if (pProcessErrorRead && create_pipe(&hErrorRead, false, &hErrorWrite, true))
+ startup_info.hStdError = hErrorWrite;
+
+ bool b_inherit_handles = false;
+ if (pProcessInputWrite || pProcessOutputRead || pProcessErrorRead)
+ {
+ startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ b_inherit_handles = true;
+ }
+
+ switch(Options & (osl_Process_NORMAL | osl_Process_HIDDEN | osl_Process_MINIMIZED | osl_Process_MAXIMIZED | osl_Process_FULLSCREEN))
+ {
+ case osl_Process_HIDDEN:
+ startup_info.wShowWindow = SW_HIDE;
+ flags |= CREATE_NO_WINDOW; // ignored for non-console
+ // applications; ignored on
+ // Win9x
+ break;
+
+ case osl_Process_MINIMIZED:
+ startup_info.wShowWindow = SW_MINIMIZE;
+ break;
+
+ case osl_Process_MAXIMIZED:
+ case osl_Process_FULLSCREEN:
+ startup_info.wShowWindow = SW_MAXIMIZE;
+ break;
+
+ default:
+ startup_info.wShowWindow = SW_NORMAL;
+ }
+
+ OUString cmdline = command_line.makeStringAndClear();
+ PROCESS_INFORMATION process_info;
+ bool bRet = false;
+
+ if ((Security != nullptr) && (static_cast<oslSecurityImpl*>(Security)->m_hToken != nullptr))
+ {
+ bRet = CreateProcessAsUserW(
+ static_cast<oslSecurityImpl*>(Security)->m_hToken,
+ nullptr, const_cast<LPWSTR>(o3tl::toW(cmdline.getStr())), nullptr, nullptr,
+ b_inherit_handles, flags, p_environment, p_cwd,
+ &startup_info, &process_info);
+ }
+ else
+ {
+ bRet = CreateProcessW(
+ nullptr, const_cast<LPWSTR>(o3tl::toW(cmdline.getStr())), nullptr, nullptr,
+ b_inherit_handles, flags, p_environment, p_cwd,
+ &startup_info, &process_info);
+ }
+
+ /* Now we can close the pipe ends that are used by the child process */
+
+ if (hInputRead)
+ CloseHandle(hInputRead);
+
+ if (hOutputWrite)
+ CloseHandle(hOutputWrite);
+
+ if (hErrorWrite)
+ CloseHandle(hErrorWrite);
+
+ if (bRet)
+ {
+ CloseHandle(process_info.hThread);
+
+ oslProcessImpl* pProcImpl = static_cast<oslProcessImpl*>(
+ malloc(sizeof(oslProcessImpl)));
+
+ if (pProcImpl != nullptr)
+ {
+ pProcImpl->m_hProcess = process_info.hProcess;
+ pProcImpl->m_IdProcess = process_info.dwProcessId;
+
+ *pProcess = static_cast<oslProcess>(pProcImpl);
+
+ if (Options & osl_Process_WAIT)
+ WaitForSingleObject(pProcImpl->m_hProcess, INFINITE);
+
+ if (pProcessInputWrite)
+ *pProcessInputWrite = osl_createFileHandleFromOSHandle(hInputWrite, osl_File_OpenFlag_Write);
+
+ if (pProcessOutputRead)
+ *pProcessOutputRead = osl_createFileHandleFromOSHandle(hOutputRead, osl_File_OpenFlag_Read);
+
+ if (pProcessErrorRead)
+ *pProcessErrorRead = osl_createFileHandleFromOSHandle(hErrorRead, osl_File_OpenFlag_Read);
+
+ return osl_Process_E_None;
+ }
+ }
+
+ /* if an error occurred we have to close the server side pipe ends too */
+
+ if (hInputWrite)
+ CloseHandle(hInputWrite);
+
+ if (hOutputRead)
+ CloseHandle(hOutputRead);
+
+ if (hErrorRead)
+ CloseHandle(hErrorRead);
+
+ return osl_Process_E_Unknown;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/procimpl.hxx b/sal/osl/w32/procimpl.hxx
new file mode 100644
index 000000000..fb1263fa7
--- /dev/null
+++ b/sal/osl/w32/procimpl.hxx
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_PROCIMPL_HXX
+#define INCLUDED_SAL_OSL_W32_PROCIMPL_HXX
+
+#include <osl/process.h>
+
+struct oslProcessImpl
+{
+ HANDLE m_hProcess;
+ DWORD m_IdProcess;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/profile.cxx b/sal/osl/w32/profile.cxx
new file mode 100644
index 000000000..a0790c3de
--- /dev/null
+++ b/sal/osl/w32/profile.cxx
@@ -0,0 +1,2341 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.h"
+
+#include "file_url.hxx"
+#include "path_helper.hxx"
+
+#include <string.h>
+#include <osl/diagnose.h>
+#include <osl/profile.h>
+#include <osl/process.h>
+#include <osl/thread.h>
+#include <osl/file.h>
+#include <rtl/alloc.h>
+#include <sal/macros.h>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+#include <algorithm>
+#include <vector>
+using std::min;
+static void copy_ustr_n( void *dest, const void *source, size_t length ) { memcpy(dest, source, length*sizeof(sal_Unicode)); }
+
+#define LINES_INI 32
+#define LINES_ADD 10
+#define SECTIONS_INI 5
+#define SECTIONS_ADD 3
+#define ENTRIES_INI 5
+#define ENTRIES_ADD 3
+
+#define STR_INI_EXTENSION L".ini"
+#define STR_INI_METAHOME "?~"
+#define STR_INI_METASYS "?$"
+#define STR_INI_METACFG "?^"
+#define STR_INI_METAINS "?#"
+
+#define STR_INI_BOOLYES "yes"
+#define STR_INI_BOOLON "on"
+#define STR_INI_BOOLONE "1"
+#define STR_INI_BOOLNO "no"
+#define STR_INI_BOOLOFF "off"
+#define STR_INI_BOOLZERO "0"
+
+#define FLG_USER 0x00FF
+#define FLG_AUTOOPEN 0x0100
+#define FLG_MODIFIED 0x0200
+
+#define SVERSION_LOCATION STR_INI_METACFG
+#define SVERSION_FALLBACK STR_INI_METASYS
+#define SVERSION_NAME "sversion"
+#define SVERSION_SECTION "Versions"
+#define SVERSION_SOFFICE "StarOffice"
+#define SVERSION_PROFILE "soffice.ini"
+#define SVERSION_DIRS { "bin", "program" }
+#define SVERSION_USER "user"
+
+/*#define DEBUG_OSL_PROFILE 1*/
+
+typedef FILETIME osl_TStamp;
+
+namespace {
+
+enum osl_TLockMode
+{
+ un_lock, read_lock, write_lock
+};
+
+struct osl_TFile
+{
+ HANDLE m_Handle;
+ char* m_pReadPtr;
+ char m_ReadBuf[512];
+ char* m_pWriteBuf;
+ sal_uInt32 m_nWriteBufLen;
+ sal_uInt32 m_nWriteBufFree;
+};
+
+struct osl_TProfileEntry
+{
+ sal_uInt32 m_Line;
+ sal_uInt32 m_Offset;
+ sal_uInt32 m_Len;
+};
+
+struct osl_TProfileSection
+{
+ sal_uInt32 m_Line;
+ sal_uInt32 m_Offset;
+ sal_uInt32 m_Len;
+ sal_uInt32 m_NoEntries;
+ sal_uInt32 m_MaxEntries;
+ osl_TProfileEntry* m_Entries;
+};
+
+/*
+ Profile-data structure hidden behind oslProfile:
+*/
+struct osl_TProfileImpl
+{
+ sal_uInt32 m_Flags;
+ osl_TFile* m_pFile;
+ osl_TStamp m_Stamp;
+ sal_uInt32 m_NoLines;
+ sal_uInt32 m_MaxLines;
+ sal_uInt32 m_NoSections;
+ sal_uInt32 m_MaxSections;
+ char** m_Lines;
+ rtl_uString *m_strFileName;
+ osl_TProfileSection* m_Sections;
+};
+
+}
+
+static osl_TFile* openFileImpl(rtl_uString * strFileName, oslProfileOption ProfileFlags );
+static osl_TStamp closeFileImpl(osl_TFile* pFile);
+static bool lockFile(const osl_TFile* pFile, osl_TLockMode eMode);
+static bool rewindFile(osl_TFile* pFile, bool bTruncate);
+static osl_TStamp getFileStamp(osl_TFile* pFile);
+
+static bool getLine(osl_TFile* pFile, char *pszLine, int MaxLen);
+static bool putLine(osl_TFile* pFile, const char *pszLine);
+static const char* stripBlanks(const char* String, sal_uInt32* pLen);
+static const char* addLine(osl_TProfileImpl* pProfile, const char* Line);
+static const char* insertLine(osl_TProfileImpl* pProfile, const char* Line, sal_uInt32 LineNo);
+static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo);
+static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection,
+ sal_uInt32 NoEntry, sal_uInt32 Line,
+ const char* Entry, sal_uInt32 Len);
+static bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection,
+ int Line, const char* Entry, sal_uInt32 Len);
+static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry);
+static bool addSection(osl_TProfileImpl* pProfile, int Line, const char* Section, sal_uInt32 Len);
+static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection);
+static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, const char* Section,
+ const char* Entry, sal_uInt32 *pNoEntry);
+static bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile);
+static bool storeProfile(osl_TProfileImpl* pProfile, bool bCleanup);
+static osl_TProfileImpl* acquireProfile(oslProfile Profile, bool bWriteable);
+static bool releaseProfile(osl_TProfileImpl* pProfile);
+static bool lookupProfile(const sal_Unicode *strPath, const sal_Unicode *strFile, sal_Unicode *strProfile);
+
+static bool writeProfileImpl (osl_TFile* pFile);
+static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl*);
+static bool osl_ProfileSwapProfileNames(osl_TProfileImpl*);
+static rtl_uString* osl_ProfileGenerateExtension(rtl_uString* ustrFileName, rtl_uString* ustrExtension);
+
+static bool osl_getProfileName(rtl_uString* strPath, rtl_uString* strName, rtl_uString** strProfileName);
+
+oslProfile SAL_CALL osl_openProfile(rtl_uString *strProfileName, oslProfileOption Flags)
+{
+ osl_TFile* pFile = nullptr;
+ osl_TProfileImpl* pProfile;
+ rtl_uString *FileName=nullptr;
+
+ OSL_VERIFY(strProfileName);
+
+ if (rtl_uString_getLength(strProfileName) == 0 )
+ {
+ OSL_VERIFY(osl_getProfileName(nullptr, nullptr, &FileName));
+ }
+ else
+ {
+ rtl_uString_assign(&FileName, strProfileName);
+ }
+
+ osl_getSystemPathFromFileURL(FileName, &FileName);
+
+#ifdef DEBUG_OSL_PROFILE
+ Flags=osl_Profile_FLUSHWRITE;
+
+ if ( Flags == osl_Profile_DEFAULT )
+ {
+ SAL_INFO("sal.osl", "with osl_Profile_DEFAULT");
+ }
+ if ( Flags & osl_Profile_SYSTEM )
+ {
+ SAL_INFO("sal.osl", "with osl_Profile_SYSTEM");
+ }
+ if ( Flags & osl_Profile_READLOCK )
+ {
+ SAL_INFO("sal.osl", "with osl_Profile_READLOCK");
+ }
+ if ( Flags & osl_Profile_WRITELOCK )
+ {
+ SAL_INFO("sal.osl", "with osl_Profile_WRITELOCK");
+ }
+ if ( Flags & osl_Profile_FLUSHWRITE )
+ {
+ SAL_INFO("sal.osl", "with osl_Profile_FLUSHWRITE");
+ }
+#endif
+
+ if ( (! (Flags & osl_Profile_SYSTEM)) && ( (pFile = openFileImpl(FileName, Flags) ) == nullptr ) )
+ {
+ if( FileName)
+ rtl_uString_release( FileName);
+
+ return nullptr;
+ }
+
+ pProfile = static_cast<osl_TProfileImpl*>(calloc(1, sizeof(osl_TProfileImpl)));
+ if (!pProfile)
+ return nullptr;
+
+ pProfile->m_Flags = Flags & FLG_USER;
+ osl_getSystemPathFromFileURL(strProfileName, &pProfile->m_strFileName);
+
+ if (Flags & (osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ))
+ pProfile->m_pFile = pFile;
+
+ pProfile->m_Stamp = getFileStamp(pFile);
+
+ loadProfile(pFile, pProfile);
+
+ if (pProfile->m_pFile == nullptr)
+ closeFileImpl(pFile);
+
+ if( FileName)
+ rtl_uString_release( FileName);
+
+ return pProfile;
+}
+
+sal_Bool SAL_CALL osl_closeProfile(oslProfile Profile)
+{
+ osl_TProfileImpl* pProfile = static_cast<osl_TProfileImpl*>(Profile);
+
+
+ if ( Profile == nullptr )
+ {
+ return false;
+ }
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ pProfile = acquireProfile(Profile,true);
+
+ if ( pProfile != nullptr )
+ {
+ if ( !( pProfile->m_Flags & osl_Profile_READLOCK ) && ( pProfile->m_Flags & FLG_MODIFIED ) )
+ {
+ storeProfile(pProfile, false);
+ }
+ }
+ else
+ {
+ pProfile = acquireProfile(Profile,false);
+ }
+
+ if ( pProfile == nullptr )
+ {
+ return false;
+ }
+
+ if (pProfile->m_pFile != nullptr)
+ closeFileImpl(pProfile->m_pFile);
+ }
+
+ pProfile->m_pFile = nullptr;
+ rtl_uString_release(pProfile->m_strFileName);
+ pProfile->m_strFileName = nullptr;
+
+ /* release whole profile data types memory */
+ if ( pProfile->m_NoLines > 0)
+ {
+ unsigned int index=0;
+ if ( pProfile->m_Lines != nullptr )
+ {
+ for ( index = 0 ; index < pProfile->m_NoLines ; ++index)
+ {
+ if ( pProfile->m_Lines[index] != nullptr )
+ {
+ free(pProfile->m_Lines[index]);
+ }
+ }
+ free(pProfile->m_Lines);
+ }
+ if ( pProfile->m_Sections != nullptr )
+ {
+ for ( index = 0 ; index < pProfile->m_NoSections ; ++index )
+ {
+ if ( pProfile->m_Sections[index].m_Entries != nullptr )
+ free(pProfile->m_Sections[index].m_Entries);
+ }
+ free(pProfile->m_Sections);
+ }
+
+ }
+ free(pProfile);
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_flushProfile(oslProfile Profile)
+{
+ osl_TProfileImpl* pProfile = static_cast<osl_TProfileImpl*>(Profile);
+ osl_TFile* pFile;
+ bool bRet = false;
+
+
+ if ( pProfile == nullptr )
+ {
+ return false;
+ }
+
+ pFile = pProfile->m_pFile;
+ if ( pFile == nullptr || pFile->m_Handle == INVALID_HANDLE_VALUE )
+ {
+ return false;
+ }
+
+ if ( pProfile->m_Flags & FLG_MODIFIED )
+ {
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "swapping to storeprofile");
+#endif
+ bRet = storeProfile(pProfile,false);
+ }
+
+ return bRet;
+}
+
+static bool writeProfileImpl(osl_TFile* pFile)
+{
+ DWORD BytesWritten=0;
+ bool bRet;
+
+ if ( pFile == nullptr || pFile->m_Handle == INVALID_HANDLE_VALUE || ( pFile->m_pWriteBuf == nullptr ) )
+ {
+ return false;
+ }
+
+ bRet=WriteFile(pFile->m_Handle, pFile->m_pWriteBuf, pFile->m_nWriteBufLen - pFile->m_nWriteBufFree,&BytesWritten,nullptr);
+
+ if ( !bRet || BytesWritten == 0 )
+ {
+ OSL_ENSURE(bRet,"WriteFile failed!!!");
+ SAL_WARN("sal.osl", "write failed " << strerror(errno));
+
+ return false;
+ }
+
+ free(pFile->m_pWriteBuf);
+ pFile->m_pWriteBuf=nullptr;
+ pFile->m_nWriteBufLen=0;
+ pFile->m_nWriteBufFree=0;
+
+ return true;
+}
+
+namespace {
+// Use Unicode version of GetPrivateProfileString, to work with Multi-language paths
+DWORD GetPrivateProfileStringWrapper(const osl_TProfileImpl* pProfile,
+ const char* pszSection, const char* pszEntry,
+ char* pszString, sal_uInt32 MaxLen,
+ const char* pszDefault)
+{
+ OSL_ASSERT(pProfile && (!MaxLen || pszString));
+
+ rtl_uString *pSection = nullptr, *pEntry = nullptr, *pDefault = nullptr;
+ if (pszSection)
+ {
+ rtl_string2UString(&pSection, pszSection, strlen(pszSection), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS);
+ OSL_ASSERT(pSection);
+ }
+ if (pszEntry)
+ {
+ rtl_string2UString(&pEntry, pszEntry, strlen(pszEntry), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS);
+ OSL_ASSERT(pEntry);
+ }
+ if (pszDefault)
+ {
+ rtl_string2UString(&pDefault, pszDefault, strlen(pszDefault), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS);
+ OSL_ASSERT(pDefault);
+ }
+
+ LPCWSTR pWSection = (pSection ? o3tl::toW(rtl_uString_getStr(pSection)) : nullptr),
+ pWEntry = (pEntry ? o3tl::toW(rtl_uString_getStr(pEntry)) : nullptr),
+ pWDefault = (pDefault ? o3tl::toW(rtl_uString_getStr(pDefault)) : nullptr);
+
+ std::vector<wchar_t> aBuf(MaxLen + 1);
+ GetPrivateProfileStringW(pWSection, pWEntry, pWDefault, aBuf.data(), MaxLen, o3tl::toW(rtl_uString_getStr(pProfile->m_strFileName)));
+
+ if (pDefault)
+ rtl_uString_release(pDefault);
+ if (pEntry)
+ rtl_uString_release(pEntry);
+ if (pSection)
+ rtl_uString_release(pSection);
+
+ return WideCharToMultiByte(CP_ACP, 0, aBuf.data(), -1, pszString, MaxLen, nullptr, nullptr);
+}
+
+// Use Unicode version of WritePrivateProfileString, to work with Multi-language paths
+bool WritePrivateProfileStringWrapper(const osl_TProfileImpl* pProfile,
+ const char* pszSection, const char* pszEntry,
+ const char* pszString)
+{
+ OSL_ASSERT(pProfile && pszSection);
+ rtl_uString *pSection, *pEntry = nullptr, *pString = nullptr;
+ rtl_string2UString(&pSection, pszSection, strlen(pszSection), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS);
+ OSL_ASSERT(pSection);
+ if (pszEntry)
+ {
+ rtl_string2UString(&pEntry, pszEntry, strlen(pszEntry), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS);
+ OSL_ASSERT(pEntry);
+ }
+ if (pszString)
+ {
+ rtl_string2UString(&pString, pszString, strlen(pszString), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS);
+ OSL_ASSERT(pString);
+ }
+
+ LPCWSTR pWSection = o3tl::toW(pSection->buffer),
+ pWEntry = (pEntry ? o3tl::toW(rtl_uString_getStr(pEntry)) : nullptr),
+ pWString = (pString ? o3tl::toW(rtl_uString_getStr(pString)) : nullptr);
+
+ bool bResult = WritePrivateProfileStringW(pWSection, pWEntry, pWString, o3tl::toW(rtl_uString_getStr(pProfile->m_strFileName)));
+
+ if (pString)
+ rtl_uString_release(pString);
+ if (pEntry)
+ rtl_uString_release(pEntry);
+ rtl_uString_release(pSection);
+
+ return bResult;
+}
+}
+
+sal_Bool SAL_CALL osl_readProfileString(oslProfile Profile,
+ const char* pszSection, const char* pszEntry,
+ char* pszString, sal_uInt32 MaxLen,
+ const char* pszDefault)
+{
+ sal_uInt32 NoEntry;
+ const char* pStr = nullptr;
+ osl_TProfileImpl* pProfile = nullptr;
+
+ pProfile = acquireProfile(Profile, false);
+
+ if (pProfile == nullptr)
+ {
+ return false;
+ }
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ osl_TProfileSection* pSec;
+ if (((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) != nullptr) &&
+ (NoEntry < pSec->m_NoEntries) &&
+ ((pStr = strchr(pProfile->m_Lines[pSec->m_Entries[NoEntry].m_Line],
+ '=')) != nullptr))
+ pStr++;
+ else
+ pStr = pszDefault;
+
+ if ( pStr != nullptr )
+ {
+ pStr = stripBlanks(pStr, nullptr);
+ MaxLen = (MaxLen - 1 < strlen(pStr)) ? (MaxLen - 1) : strlen(pStr);
+ pStr = stripBlanks(pStr, &MaxLen);
+ strncpy(pszString, pStr, MaxLen);
+ pszString[MaxLen] = '\0';
+ }
+ }
+ else
+ {
+ if (GetPrivateProfileStringWrapper(pProfile, pszSection, pszEntry, pszString, MaxLen, pszDefault) > 0)
+ pStr = pszString; // required to return true below
+ }
+
+ releaseProfile(pProfile);
+
+ if ( pStr == nullptr )
+ {
+ return false;
+ }
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_readProfileBool(oslProfile Profile,
+ const char* pszSection, const char* pszEntry,
+ sal_Bool Default)
+{
+ char Line[32];
+
+ if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), ""))
+ {
+ if ((stricmp(Line, STR_INI_BOOLYES) == 0) ||
+ (stricmp(Line, STR_INI_BOOLON) == 0) ||
+ (stricmp(Line, STR_INI_BOOLONE) == 0))
+ Default = true;
+ else
+ if ((stricmp(Line, STR_INI_BOOLNO) == 0) ||
+ (stricmp(Line, STR_INI_BOOLOFF) == 0) ||
+ (stricmp(Line, STR_INI_BOOLZERO) == 0))
+ Default = false;
+ }
+
+ return Default;
+}
+
+sal_uInt32 SAL_CALL osl_readProfileIdent(oslProfile Profile,
+ const char* pszSection, const char* pszEntry,
+ sal_uInt32 FirstId, const char* Strings[],
+ sal_uInt32 Default)
+{
+ sal_uInt32 i;
+ char Line[256];
+
+ if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), ""))
+ {
+ i = 0;
+ while (Strings[i] != nullptr)
+ {
+ if (stricmp(Line, Strings[i]) == 0)
+ {
+ Default = i + FirstId;
+ break;
+ }
+ i++;
+ }
+ }
+
+ return Default;
+}
+
+sal_Bool SAL_CALL osl_writeProfileString(oslProfile Profile,
+ const char* pszSection, const char* pszEntry,
+ const char* pszString)
+{
+ sal_uInt32 i;
+ bool bRet = false;
+ sal_uInt32 NoEntry;
+ const char* pStr;
+ char Line[4096];
+ osl_TProfileSection* pSec;
+ osl_TProfileImpl* pProfile = nullptr;
+
+ pProfile = acquireProfile(Profile, true);
+
+ if (pProfile == nullptr)
+ {
+ return false;
+ }
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ if ((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) == nullptr)
+ {
+ Line[0] = '\0';
+ addLine(pProfile, Line);
+
+ Line[0] = '[';
+ strcpy(&Line[1], pszSection);
+ Line[1 + strlen(pszSection)] = ']';
+ Line[2 + strlen(pszSection)] = '\0';
+
+ if (((pStr = addLine(pProfile, Line)) == nullptr) ||
+ (! addSection(pProfile, pProfile->m_NoLines - 1, &pStr[1], strlen(pszSection))))
+ {
+ releaseProfile(pProfile);
+ return false;
+ }
+
+ pSec = &pProfile->m_Sections[pProfile->m_NoSections - 1];
+ NoEntry = pSec->m_NoEntries;
+ }
+
+ Line[0] = '\0';
+ strcpy(&Line[0], pszEntry);
+ Line[0 + strlen(pszEntry)] = '=';
+ strcpy(&Line[1 + strlen(pszEntry)], pszString);
+
+ if (NoEntry >= pSec->m_NoEntries)
+ {
+ if (pSec->m_NoEntries > 0)
+ i = pSec->m_Entries[pSec->m_NoEntries - 1].m_Line + 1;
+ else
+ i = pSec->m_Line + 1;
+
+ if (((pStr = insertLine(pProfile, Line, i)) == nullptr) ||
+ (! addEntry(pProfile, pSec, i, pStr, strlen(pszEntry))))
+ {
+ releaseProfile(pProfile);
+ return false;
+ }
+
+ pProfile->m_Flags |= FLG_MODIFIED;
+ }
+ else
+ {
+ i = pSec->m_Entries[NoEntry].m_Line;
+ free(pProfile->m_Lines[i]);
+ pProfile->m_Lines[i] = strdup(Line);
+ setEntry(pProfile, pSec, NoEntry, i, pProfile->m_Lines[i], strlen(pszEntry));
+
+ pProfile->m_Flags |= FLG_MODIFIED;
+ }
+ }
+ else
+ {
+ WritePrivateProfileStringWrapper(pProfile, pszSection, pszEntry, pszString);
+ }
+
+ bRet = releaseProfile(pProfile);
+ return bRet;
+}
+
+sal_Bool SAL_CALL osl_writeProfileBool(oslProfile Profile,
+ const char* pszSection, const char* pszEntry,
+ sal_Bool Value)
+{
+ bool bRet = false;
+
+ if (Value)
+ bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLONE);
+ else
+ bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLZERO);
+
+ return bRet;
+}
+
+sal_Bool SAL_CALL osl_writeProfileIdent(oslProfile Profile,
+ const char* pszSection, const char* pszEntry,
+ sal_uInt32 FirstId, const char* Strings[],
+ sal_uInt32 Value)
+{
+ int i, n;
+ bool bRet = false;
+
+ for (n = 0; Strings[n] != nullptr; n++);
+
+ if ((i = Value - FirstId) >= n)
+ bRet=false;
+ else
+ bRet=osl_writeProfileString(Profile, pszSection, pszEntry, Strings[i]);
+
+ return bRet;
+}
+
+sal_Bool SAL_CALL osl_removeProfileEntry(oslProfile Profile,
+ const char *pszSection, const char *pszEntry)
+{
+ sal_uInt32 NoEntry;
+ osl_TProfileImpl* pProfile = nullptr;
+ bool bRet = false;
+
+ pProfile = acquireProfile(Profile, true);
+
+ if (pProfile == nullptr)
+ return false;
+
+ if (!(pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ osl_TProfileSection* pSec;
+ if (((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) != nullptr) &&
+ (NoEntry < pSec->m_NoEntries))
+ {
+ removeLine(pProfile, pSec->m_Entries[NoEntry].m_Line);
+ removeEntry(pSec, NoEntry);
+ if (pSec->m_NoEntries == 0)
+ {
+ removeLine(pProfile, pSec->m_Line);
+
+ /* remove any empty separation line */
+ if ((pSec->m_Line > 0) && (pProfile->m_Lines[pSec->m_Line - 1][0] == '\0'))
+ removeLine(pProfile, pSec->m_Line - 1);
+
+ removeSection(pProfile, pSec);
+ }
+
+ pProfile->m_Flags |= FLG_MODIFIED;
+ }
+ }
+ else
+ {
+ WritePrivateProfileStringWrapper(pProfile, pszSection, pszEntry, nullptr);
+ }
+
+ bRet = releaseProfile(pProfile);
+ return bRet;
+}
+
+sal_uInt32 SAL_CALL osl_getProfileSectionEntries(oslProfile Profile, const char *pszSection,
+ char* pszBuffer, sal_uInt32 MaxLen)
+{
+ sal_uInt32 i, n = 0;
+ sal_uInt32 NoEntry;
+ osl_TProfileImpl* pProfile = nullptr;
+
+ pProfile = acquireProfile(Profile, false);
+
+ if (pProfile == nullptr)
+ return 0;
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ osl_TProfileSection* pSec;
+ if ((pSec = findEntry(pProfile, pszSection, "", &NoEntry)) != nullptr)
+ {
+ if (MaxLen != 0)
+ {
+ for (i = 0; i < pSec->m_NoEntries; i++)
+ {
+ if ((n + pSec->m_Entries[i].m_Len + 1) < MaxLen)
+ {
+ strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Entries[i].m_Line]
+ [pSec->m_Entries[i].m_Offset], pSec->m_Entries[i].m_Len);
+ n += pSec->m_Entries[i].m_Len;
+ pszBuffer[n++] = '\0';
+ }
+ else
+ {
+ break;
+ }
+
+ }
+
+ pszBuffer[n++] = '\0';
+ }
+ else
+ {
+ for (i = 0; i < pSec->m_NoEntries; i++)
+ {
+ n += pSec->m_Entries[i].m_Len + 1;
+ }
+
+ n += 1;
+ }
+ }
+ else
+ {
+ n = 0;
+ }
+ }
+ else
+ {
+ n = GetPrivateProfileStringWrapper(pProfile, pszSection, nullptr, pszBuffer, MaxLen, nullptr);
+ }
+
+ releaseProfile(pProfile);
+
+ return n;
+}
+
+bool osl_getProfileName(rtl_uString* strPath, rtl_uString* strName, rtl_uString** strProfileName)
+{
+ bool bFailed;
+ ::osl::LongPathBuffer< sal_Unicode > aFile( MAX_LONG_PATH );
+ ::osl::LongPathBuffer< sal_Unicode > aPath( MAX_LONG_PATH );
+ sal_uInt32 nFileLen = 0;
+ sal_uInt32 nPathLen = 0;
+
+ rtl_uString * strTmp = nullptr;
+ oslFileError nError;
+
+ /* build file name */
+ if (strName && strName->length)
+ {
+ if( ::sal::static_int_cast< sal_uInt32 >( strName->length ) >= aFile.getBufSizeInSymbols() )
+ return false;
+
+ copy_ustr_n( aFile, strName->buffer, strName->length+1);
+ nFileLen = strName->length;
+
+ if (rtl_ustr_indexOfChar( aFile, L'.' ) == -1)
+ {
+ if (nFileLen + wcslen(STR_INI_EXTENSION) >= aFile.getBufSizeInSymbols())
+ return false;
+
+ /* add default extension */
+ copy_ustr_n( aFile + nFileLen, STR_INI_EXTENSION, wcslen(STR_INI_EXTENSION)+1 );
+ nFileLen += wcslen(STR_INI_EXTENSION);
+ }
+ }
+ else
+ {
+ rtl_uString *strProgName = nullptr;
+ sal_Unicode *pProgName;
+ sal_Int32 nOffset = 0;
+ sal_Int32 nLen;
+ sal_Int32 nPos;
+
+ if (osl_getExecutableFile(&strProgName) != osl_Process_E_None)
+ return false;
+
+ /* remove path and extension from filename */
+ pProgName = strProgName->buffer;
+ nLen = strProgName->length ;
+
+ if ((nPos = rtl_ustr_lastIndexOfChar( pProgName, L'/' )) != -1)
+ nOffset = nPos + 1;
+ else if ((nPos = rtl_ustr_lastIndexOfChar( pProgName, L':' )) != -1)
+ nOffset = nPos + 1;
+
+ if ((nPos = rtl_ustr_lastIndexOfChar( pProgName, L'.' )) != -1 )
+ nLen -= 4;
+
+ if ((nFileLen = nLen - nOffset) >= aFile.getBufSizeInSymbols())
+ return false;
+
+ copy_ustr_n(aFile, pProgName + nOffset, nFileLen);
+
+ if (nFileLen + wcslen(STR_INI_EXTENSION) >= aFile.getBufSizeInSymbols())
+ return false;
+
+ /* add default extension */
+ copy_ustr_n(aFile + nFileLen, STR_INI_EXTENSION, wcslen(STR_INI_EXTENSION)+1);
+ nFileLen += wcslen(STR_INI_EXTENSION);
+
+ rtl_uString_release( strProgName );
+ }
+
+ if (aFile[0] == 0)
+ return false;
+
+ /* build directory path */
+ if (strPath && strPath->length)
+ {
+ sal_Unicode *pPath = rtl_uString_getStr(strPath);
+ sal_Int32 nLen = rtl_uString_getLength(strPath);
+
+ if ((rtl_ustr_ascii_compare_WithLength(pPath, RTL_CONSTASCII_LENGTH(STR_INI_METAHOME) , STR_INI_METAHOME) == 0) &&
+ ((nLen == RTL_CONSTASCII_LENGTH(STR_INI_METAHOME)) || (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METAHOME)] == '/')))
+ {
+ rtl_uString * strHome = nullptr;
+ oslSecurity security = osl_getCurrentSecurity();
+
+ bFailed = ! osl_getHomeDir(security, &strHome);
+ osl_freeSecurityHandle(security);
+
+ if (bFailed) return false;
+
+ if ( ::sal::static_int_cast< sal_uInt32 >( strHome->length ) >= aPath.getBufSizeInSymbols())
+ return false;
+
+ copy_ustr_n( aPath, strHome->buffer, strHome->length+1);
+ nPathLen = strHome->length;
+
+ if (nLen > RTL_CONSTASCII_LENGTH(STR_INI_METAHOME))
+ {
+ pPath += RTL_CONSTASCII_LENGTH(STR_INI_METAHOME);
+ nLen -= RTL_CONSTASCII_LENGTH(STR_INI_METAHOME);
+
+ if (nLen + nPathLen >= aPath.getBufSizeInSymbols())
+ return false;
+
+ copy_ustr_n(aPath + nPathLen, pPath, nLen+1);
+ nPathLen += nLen;
+ }
+
+ rtl_uString_release(strHome);
+ }
+
+ else if ((rtl_ustr_ascii_compare_WithLength(pPath, RTL_CONSTASCII_LENGTH(STR_INI_METACFG), STR_INI_METACFG) == 0) &&
+ ((nLen == RTL_CONSTASCII_LENGTH(STR_INI_METACFG)) || (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METACFG)] == '/')))
+ {
+ rtl_uString * strConfig = nullptr;
+ oslSecurity security = osl_getCurrentSecurity();
+
+ bFailed = ! osl_getConfigDir(security, &strConfig);
+ osl_freeSecurityHandle(security);
+
+ if (bFailed) return false;
+
+ if ( ::sal::static_int_cast< sal_uInt32 >( strConfig->length ) >= aPath.getBufSizeInSymbols())
+ return false;
+
+ copy_ustr_n( aPath, strConfig->buffer, strConfig->length+1 );
+ nPathLen = strConfig->length;
+
+ if (nLen > RTL_CONSTASCII_LENGTH(STR_INI_METACFG))
+ {
+ pPath += RTL_CONSTASCII_LENGTH(STR_INI_METACFG);
+ nLen -= RTL_CONSTASCII_LENGTH(STR_INI_METACFG);
+
+ if (nLen + nPathLen >= aPath.getBufSizeInSymbols())
+ return false;
+
+ copy_ustr_n(aPath + nPathLen, pPath, nLen+1);
+ nPathLen += nLen;
+ }
+
+ rtl_uString_release(strConfig);
+ }
+
+ else if ((rtl_ustr_ascii_compare_WithLength(pPath, RTL_CONSTASCII_LENGTH(STR_INI_METASYS), STR_INI_METASYS) == 0) &&
+ ((nLen == RTL_CONSTASCII_LENGTH(STR_INI_METASYS)) || (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METASYS)] == '/')))
+ {
+ if (((nPathLen = GetWindowsDirectoryW(o3tl::toW(aPath), aPath.getBufSizeInSymbols())) == 0) || (nPathLen >= aPath.getBufSizeInSymbols()))
+ return false;
+
+ if (nLen > RTL_CONSTASCII_LENGTH(STR_INI_METASYS))
+ {
+ pPath += RTL_CONSTASCII_LENGTH(STR_INI_METASYS);
+ nLen -= RTL_CONSTASCII_LENGTH(STR_INI_METASYS);
+
+ if (nLen + nPathLen >= aPath.getBufSizeInSymbols())
+ return false;
+
+ copy_ustr_n(aPath + nPathLen, pPath, nLen+1);
+ nPathLen += nLen;
+ }
+ }
+
+ else if ((rtl_ustr_ascii_compare_WithLength(pPath, RTL_CONSTASCII_LENGTH(STR_INI_METAINS), STR_INI_METAINS) == 0) &&
+ ((nLen == RTL_CONSTASCII_LENGTH(STR_INI_METAINS)) || (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METAINS)] == '/') ||
+ (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METAINS)] == '"') ) )
+ {
+ if (! lookupProfile(pPath + RTL_CONSTASCII_LENGTH(STR_INI_METAINS), aFile, aPath))
+ return false;
+
+ nPathLen = rtl_ustr_getLength(aPath);
+ }
+
+ else if( ::sal::static_int_cast< sal_uInt32 >( nLen ) < aPath.getBufSizeInSymbols())
+ {
+ copy_ustr_n(aPath, pPath, nLen+1);
+ nPathLen = rtl_ustr_getLength(aPath);
+ }
+ else
+ return false;
+ }
+ else
+ {
+ rtl_uString * strConfigDir = nullptr;
+ oslSecurity security = osl_getCurrentSecurity();
+
+ bFailed = ! osl_getConfigDir(security, &strConfigDir);
+ osl_freeSecurityHandle(security);
+
+ if (bFailed) return false;
+ if ( ::sal::static_int_cast< sal_uInt32 >( strConfigDir->length ) >= aPath.getBufSizeInSymbols() )
+ return false;
+
+ copy_ustr_n(aPath, strConfigDir->buffer, strConfigDir->length+1);
+ nPathLen = strConfigDir->length;
+ }
+
+ if (nPathLen && (aPath[nPathLen - 1] != L'/') && (aPath[nPathLen - 1] != L'\\'))
+ {
+ aPath[nPathLen++] = L'\\';
+ aPath[nPathLen] = 0;
+ }
+
+ if (nPathLen + nFileLen >= aPath.getBufSizeInSymbols())
+ return false;
+
+ /* append file name */
+ copy_ustr_n(aPath + nPathLen, aFile, nFileLen+1);
+ nPathLen += nFileLen;
+
+ /* copy filename */
+ rtl_uString_newFromStr_WithLength(&strTmp, aPath, nPathLen);
+ nError = osl_getFileURLFromSystemPath(strTmp, strProfileName);
+ rtl_uString_release(strTmp);
+
+ return nError == osl_File_E_None;
+}
+
+sal_uInt32 SAL_CALL osl_getProfileSections(oslProfile Profile, char* pszBuffer, sal_uInt32 MaxLen)
+{
+ sal_uInt32 i, n = 0;
+ osl_TProfileImpl* pProfile = acquireProfile(Profile, false);
+
+ if (pProfile == nullptr)
+ return 0;
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ if (MaxLen != 0)
+ {
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ {
+ osl_TProfileSection* pSec = &pProfile->m_Sections[i];
+
+ if ((n + pSec->m_Len + 1) < MaxLen)
+ {
+ strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset],
+ pSec->m_Len);
+ n += pSec->m_Len;
+ pszBuffer[n++] = '\0';
+ }
+ else
+ break;
+ }
+
+ pszBuffer[n++] = '\0';
+ }
+ else
+ {
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ n += pProfile->m_Sections[i].m_Len + 1;
+
+ n += 1;
+ }
+ }
+ else
+ {
+ std::vector<wchar_t> aBuf(MaxLen + 1);
+ GetPrivateProfileSectionNamesW(aBuf.data(), MaxLen, o3tl::toW(rtl_uString_getStr(pProfile->m_strFileName)));
+
+ n = WideCharToMultiByte(CP_ACP, 0, aBuf.data(), -1, pszBuffer, MaxLen, nullptr, nullptr);
+ }
+
+ releaseProfile(pProfile);
+
+ return n;
+}
+
+static osl_TStamp getFileStamp(osl_TFile* pFile)
+{
+ FILETIME FileTime;
+
+ if ((pFile->m_Handle == INVALID_HANDLE_VALUE) ||
+ (! GetFileTime(pFile->m_Handle, nullptr, nullptr, &FileTime)))
+ memset(&FileTime, 0, sizeof(FileTime));
+
+ return FileTime;
+}
+
+static bool lockFile(const osl_TFile* pFile, osl_TLockMode eMode)
+{
+ bool status = false;
+ OVERLAPPED Overlapped = {};
+
+ if (pFile->m_Handle == INVALID_HANDLE_VALUE)
+ return false;
+
+ switch (eMode)
+ {
+ case un_lock:
+ status = UnlockFileEx(
+ pFile->m_Handle, 0, 0xFFFFFFFF, 0, &Overlapped);
+ break;
+
+ case read_lock:
+ status = LockFileEx(
+ pFile->m_Handle, 0, 0, 0xFFFFFFFF, 0, &Overlapped);
+ break;
+
+ case write_lock:
+ status = LockFileEx(
+ pFile->m_Handle, LOCKFILE_EXCLUSIVE_LOCK, 0, 0xFFFFFFFF, 0,
+ &Overlapped);
+ break;
+ }
+
+ return status;
+}
+
+static osl_TFile* openFileImpl(rtl_uString * strFileName, oslProfileOption ProfileFlags )
+{
+ osl_TFile* pFile = static_cast< osl_TFile*>( calloc( 1, sizeof(osl_TFile) ) );
+ if (!pFile)
+ return nullptr;
+ bool bWriteable = false;
+
+ if ( ProfileFlags & ( osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) )
+ {
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "setting bWriteable to TRUE");
+#endif
+ bWriteable=true;
+ }
+
+ if (! bWriteable)
+ {
+ pFile->m_Handle = CreateFileW( o3tl::toW(rtl_uString_getStr( strFileName )), GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
+
+ /* mfe: argghh!!! do not check if the file could be opened */
+ /* default mode expects it that way!!! */
+ }
+ else
+ {
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "opening read/write " << pszFilename);
+#endif
+
+ if ((pFile->m_Handle = CreateFileW( o3tl::toW(rtl_uString_getStr( strFileName )), GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
+ OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr))
+ == INVALID_HANDLE_VALUE)
+ {
+ free(pFile);
+ return nullptr;
+ }
+ }
+
+ pFile->m_pWriteBuf=nullptr;
+ pFile->m_nWriteBufFree=0;
+ pFile->m_nWriteBufLen=0;
+
+ if ( ProfileFlags & (osl_Profile_WRITELOCK | osl_Profile_READLOCK ) )
+ {
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "locking file " << pszFilename);
+#endif
+
+ lockFile(pFile, bWriteable ? write_lock : read_lock);
+ }
+
+ return pFile;
+}
+
+static osl_TStamp closeFileImpl(osl_TFile* pFile)
+{
+ osl_TStamp stamp = {0, 0};
+
+ if ( pFile == nullptr )
+ {
+ return stamp;
+ }
+
+ if (pFile->m_Handle != INVALID_HANDLE_VALUE)
+ {
+ stamp = getFileStamp(pFile);
+
+ lockFile(pFile, un_lock);
+
+ CloseHandle(pFile->m_Handle);
+ pFile->m_Handle = INVALID_HANDLE_VALUE;
+ }
+
+ if ( pFile->m_pWriteBuf != nullptr )
+ {
+ free(pFile->m_pWriteBuf);
+ }
+
+ free(pFile);
+
+ return stamp;
+}
+
+static bool rewindFile(osl_TFile* pFile, bool bTruncate)
+{
+ if (pFile->m_Handle != INVALID_HANDLE_VALUE)
+ {
+ pFile->m_pReadPtr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf);
+
+ SetFilePointer(pFile->m_Handle, 0, nullptr, FILE_BEGIN);
+
+ if (bTruncate)
+ SetEndOfFile(pFile->m_Handle);
+ }
+
+ return true;
+}
+
+static bool getLine(osl_TFile* pFile, char *pszLine, int MaxLen)
+{
+ DWORD Max;
+ size_t Free;
+ char* pChr;
+ char* pLine = pszLine;
+
+ if (pFile->m_Handle == INVALID_HANDLE_VALUE)
+ return false;
+
+ MaxLen -= 1;
+
+ do
+ {
+ size_t Bytes = sizeof(pFile->m_ReadBuf) - (pFile->m_pReadPtr - pFile->m_ReadBuf);
+
+ if (Bytes <= 1)
+ {
+ /* refill buffer */
+ memcpy(pFile->m_ReadBuf, pFile->m_pReadPtr, Bytes);
+ pFile->m_pReadPtr = pFile->m_ReadBuf;
+
+ Free = sizeof(pFile->m_ReadBuf) - Bytes;
+
+ if (! ReadFile(pFile->m_Handle, &pFile->m_ReadBuf[Bytes], Free, &Max, nullptr))
+ {
+ *pLine = '\0';
+ return false;
+ }
+
+ if (Max < Free)
+ {
+ if ((Max == 0) && (pLine == pszLine))
+ {
+ *pLine = '\0';
+ return false;
+ }
+
+ pFile->m_ReadBuf[Bytes + Max] = '\0';
+ }
+ }
+
+ for (pChr = pFile->m_pReadPtr;
+ (*pChr != '\n') && (*pChr != '\r') && (*pChr != '\0') &&
+ (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1));
+ pChr++);
+
+ Max = min(static_cast<int>(pChr - pFile->m_pReadPtr), MaxLen);
+ memcpy(pLine, pFile->m_pReadPtr, Max);
+ MaxLen -= Max;
+ pLine += Max;
+
+ if (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1))
+ {
+ if (*pChr != '\0')
+ {
+ if ((pChr[0] == '\r') && (pChr[1] == '\n'))
+ pChr += 2;
+ else
+ pChr += 1;
+ }
+
+ if ((pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf))) &&
+ (*pChr == '\0'))
+ pChr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf);
+
+ *pLine = '\0';
+
+ /* setting MaxLen to -1 indicates terminating read loop */
+ MaxLen = -1;
+ }
+
+ pFile->m_pReadPtr = pChr;
+ }
+ while (MaxLen > 0);
+
+ return true;
+}
+
+static bool putLine(osl_TFile* pFile, const char *pszLine)
+{
+ unsigned int Len = strlen(pszLine);
+
+ if ( pFile == nullptr || pFile->m_Handle == INVALID_HANDLE_VALUE )
+ {
+ return false;
+ }
+
+ if ( pFile->m_pWriteBuf == nullptr )
+ {
+ pFile->m_pWriteBuf = static_cast<char*>(malloc(Len+3));
+ pFile->m_nWriteBufLen = Len+3;
+ pFile->m_nWriteBufFree = Len+3;
+ }
+ else
+ {
+ if ( pFile->m_nWriteBufFree <= Len + 3 )
+ {
+ char* pTmp;
+
+ pTmp=static_cast<char*>(realloc(pFile->m_pWriteBuf,( ( pFile->m_nWriteBufLen + Len ) * 2) ));
+ if ( pTmp == nullptr )
+ {
+ return false;
+ }
+ pFile->m_pWriteBuf = pTmp;
+ pFile->m_nWriteBufFree = pFile->m_nWriteBufFree + pFile->m_nWriteBufLen + ( 2 * Len );
+ pFile->m_nWriteBufLen = ( pFile->m_nWriteBufLen + Len ) * 2;
+ memset( (pFile->m_pWriteBuf) + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ), 0, pFile->m_nWriteBufFree);
+ }
+ }
+
+ memcpy(pFile->m_pWriteBuf + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ),pszLine,Len+1);
+
+ pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len]='\r';
+ pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len + 1]='\n';
+ pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len + 2]='\0';
+
+ pFile->m_nWriteBufFree-=Len+2;
+
+ return true;
+}
+
+/* platform specific end */
+
+static const char* stripBlanks(const char* String, sal_uInt32* pLen)
+{
+ if ( (pLen != nullptr) && ( *pLen != 0 ) )
+ {
+ while ((String[*pLen - 1] == ' ') || (String[*pLen - 1] == '\t'))
+ (*pLen)--;
+
+ while ((*String == ' ') || (*String == '\t'))
+ {
+ String++;
+ (*pLen)--;
+ }
+ }
+ else
+ while ((*String == ' ') || (*String == '\t'))
+ String++;
+
+ return String;
+}
+
+static const char* addLine(osl_TProfileImpl* pProfile, const char* Line)
+{
+ if (pProfile->m_NoLines >= pProfile->m_MaxLines)
+ {
+ if (pProfile->m_Lines == nullptr)
+ {
+ pProfile->m_MaxLines = LINES_INI;
+ pProfile->m_Lines = static_cast<char **>(calloc(pProfile->m_MaxLines, sizeof(char *)));
+ }
+ else
+ {
+ unsigned int index=0;
+ unsigned int oldmax=pProfile->m_MaxLines;
+
+ pProfile->m_MaxLines += LINES_ADD;
+ if (auto p = static_cast<char **>(realloc(pProfile->m_Lines, pProfile->m_MaxLines * sizeof(char *))))
+ {
+ pProfile->m_Lines = p;
+
+ for ( index = oldmax ; index < pProfile->m_MaxLines ; ++index )
+ {
+ pProfile->m_Lines[index]=nullptr;
+ }
+ }
+ else
+ {
+ free(pProfile->m_Lines);
+ pProfile->m_Lines = nullptr;
+ }
+ }
+
+ if (pProfile->m_Lines == nullptr)
+ {
+ pProfile->m_NoLines = 0;
+ pProfile->m_MaxLines = 0;
+ return nullptr;
+ }
+
+ }
+
+ if ( pProfile->m_Lines != nullptr && pProfile->m_Lines[pProfile->m_NoLines] != nullptr )
+ {
+ free(pProfile->m_Lines[pProfile->m_NoLines]);
+ }
+ pProfile->m_Lines[pProfile->m_NoLines++] = strdup(Line);
+
+ return pProfile->m_Lines[pProfile->m_NoLines - 1];
+}
+
+static const char* insertLine(osl_TProfileImpl* pProfile, const char* Line, sal_uInt32 LineNo)
+{
+ if (pProfile->m_NoLines >= pProfile->m_MaxLines)
+ {
+ if (pProfile->m_Lines == nullptr)
+ {
+ pProfile->m_MaxLines = LINES_INI;
+ pProfile->m_Lines = static_cast<char **>(calloc(pProfile->m_MaxLines, sizeof(char *)));
+ }
+ else
+ {
+ pProfile->m_MaxLines += LINES_ADD;
+ if (auto p = static_cast<char**>(
+ realloc(pProfile->m_Lines, pProfile->m_MaxLines * sizeof(char*))))
+ {
+ pProfile->m_Lines = p;
+
+ memset(&pProfile->m_Lines[pProfile->m_NoLines], 0,
+ (pProfile->m_MaxLines - pProfile->m_NoLines - 1) * sizeof(char*));
+ }
+ else
+ {
+ free(pProfile->m_Lines);
+ pProfile->m_Lines = nullptr;
+ }
+ }
+
+ if (pProfile->m_Lines == nullptr)
+ {
+ pProfile->m_NoLines = 0;
+ pProfile->m_MaxLines = 0;
+ return nullptr;
+ }
+ }
+
+ LineNo = std::min(LineNo, pProfile->m_NoLines);
+
+ if (LineNo < pProfile->m_NoLines)
+ {
+ sal_uInt32 i, n;
+
+ memmove(&pProfile->m_Lines[LineNo + 1], &pProfile->m_Lines[LineNo],
+ (pProfile->m_NoLines - LineNo) * sizeof(char *));
+
+ /* adjust line references */
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ {
+ osl_TProfileSection* pSec = &pProfile->m_Sections[i];
+
+ if (pSec->m_Line >= LineNo)
+ pSec->m_Line++;
+
+ for (n = 0; n < pSec->m_NoEntries; n++)
+ if (pSec->m_Entries[n].m_Line >= LineNo)
+ pSec->m_Entries[n].m_Line++;
+ }
+ }
+
+ pProfile->m_NoLines++;
+
+ pProfile->m_Lines[LineNo] = strdup(Line);
+
+ return pProfile->m_Lines[LineNo];
+}
+
+static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo)
+{
+ if (LineNo < pProfile->m_NoLines)
+ {
+ free(pProfile->m_Lines[LineNo]);
+ pProfile->m_Lines[LineNo]=nullptr;
+ if (pProfile->m_NoLines - LineNo > 1)
+ {
+ sal_uInt32 i, n;
+
+ memmove(&pProfile->m_Lines[LineNo], &pProfile->m_Lines[LineNo + 1],
+ (pProfile->m_NoLines - LineNo - 1) * sizeof(char *));
+
+ memset(&pProfile->m_Lines[pProfile->m_NoLines - 1],
+ 0,
+ (pProfile->m_MaxLines - pProfile->m_NoLines) * sizeof(char*));
+
+ /* adjust line references */
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ {
+ osl_TProfileSection* pSec = &pProfile->m_Sections[i];
+
+ if (pSec->m_Line > LineNo)
+ pSec->m_Line--;
+
+ for (n = 0; n < pSec->m_NoEntries; n++)
+ if (pSec->m_Entries[n].m_Line > LineNo)
+ pSec->m_Entries[n].m_Line--;
+ }
+ }
+ else
+ {
+ pProfile->m_Lines[LineNo] = nullptr;
+ }
+
+ pProfile->m_NoLines--;
+ }
+
+ return;
+}
+
+static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection,
+ sal_uInt32 NoEntry, sal_uInt32 Line,
+ const char* Entry, sal_uInt32 Len)
+{
+ Entry = stripBlanks(Entry, &Len);
+ pSection->m_Entries[NoEntry].m_Line = Line;
+ pSection->m_Entries[NoEntry].m_Offset = Entry - pProfile->m_Lines[Line];
+ pSection->m_Entries[NoEntry].m_Len = Len;
+
+ return;
+}
+
+static bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection,
+ int Line, const char* Entry, sal_uInt32 Len)
+{
+ if (pSection != nullptr)
+ {
+ if (pSection->m_NoEntries >= pSection->m_MaxEntries)
+ {
+ if (pSection->m_Entries == nullptr)
+ {
+ pSection->m_MaxEntries = ENTRIES_INI;
+ pSection->m_Entries = static_cast<osl_TProfileEntry *>(malloc(
+ pSection->m_MaxEntries * sizeof(osl_TProfileEntry)));
+ }
+ else
+ {
+ pSection->m_MaxEntries += ENTRIES_ADD;
+ if (auto p = static_cast<osl_TProfileEntry*>(realloc(
+ pSection->m_Entries, pSection->m_MaxEntries * sizeof(osl_TProfileEntry))))
+ pSection->m_Entries = p;
+ else
+ {
+ free(pSection->m_Entries);
+ pSection->m_Entries = nullptr;
+ }
+ }
+
+ if (pSection->m_Entries == nullptr)
+ {
+ pSection->m_NoEntries = 0;
+ pSection->m_MaxEntries = 0;
+ return false;
+ }
+ }
+
+ pSection->m_NoEntries++;
+
+ Entry = stripBlanks(Entry, &Len);
+ setEntry(pProfile, pSection, pSection->m_NoEntries - 1, Line,
+ Entry, Len);
+
+ return true;
+ }
+
+ return false;
+}
+
+static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry)
+{
+ if (NoEntry < pSection->m_NoEntries)
+ {
+ if (pSection->m_NoEntries - NoEntry > 1)
+ {
+ memmove(&pSection->m_Entries[NoEntry],
+ &pSection->m_Entries[NoEntry + 1],
+ (pSection->m_NoEntries - NoEntry - 1) * sizeof(osl_TProfileEntry));
+ pSection->m_Entries[pSection->m_NoEntries - 1].m_Line=0;
+ pSection->m_Entries[pSection->m_NoEntries - 1].m_Offset=0;
+ pSection->m_Entries[pSection->m_NoEntries - 1].m_Len=0;
+ }
+
+ pSection->m_NoEntries--;
+ }
+
+ return;
+}
+
+static bool addSection(osl_TProfileImpl* pProfile, int Line, const char* Section, sal_uInt32 Len)
+{
+ if (pProfile->m_NoSections >= pProfile->m_MaxSections)
+ {
+ if (pProfile->m_Sections == nullptr)
+ {
+ pProfile->m_MaxSections = SECTIONS_INI;
+ pProfile->m_Sections = static_cast<osl_TProfileSection*>(calloc(pProfile->m_MaxSections, sizeof(osl_TProfileSection)));
+ }
+ else
+ {
+ unsigned int index=0;
+ unsigned int oldmax=pProfile->m_MaxSections;
+
+ pProfile->m_MaxSections += SECTIONS_ADD;
+ if (auto p = static_cast<osl_TProfileSection*>(realloc(
+ pProfile->m_Sections, pProfile->m_MaxSections * sizeof(osl_TProfileSection))))
+ {
+ pProfile->m_Sections = p;
+ for ( index = oldmax ; index < pProfile->m_MaxSections ; ++index )
+ {
+ pProfile->m_Sections[index].m_Entries=nullptr;
+ }
+ }
+ else
+ {
+ free(pProfile->m_Sections);
+ pProfile->m_Sections = nullptr;
+ }
+ }
+
+ if (pProfile->m_Sections == nullptr)
+ {
+ pProfile->m_NoSections = 0;
+ pProfile->m_MaxSections = 0;
+ return false;
+ }
+ }
+
+ pProfile->m_NoSections++;
+
+ if ( pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries != nullptr )
+ {
+ free(pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries);
+ }
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = nullptr;
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_NoEntries = 0;
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_MaxEntries = 0;
+
+ Section = stripBlanks(Section, &Len);
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Line = Line;
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Offset = Section - pProfile->m_Lines[Line];
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Len = Len;
+
+ return true;
+}
+
+static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection)
+{
+ sal_uInt32 Section;
+
+ if ((Section = pSection - pProfile->m_Sections) < pProfile->m_NoSections)
+ {
+ free (pSection->m_Entries);
+ pSection->m_Entries=nullptr;
+ if (pProfile->m_NoSections - Section > 1)
+ {
+ memmove(&pProfile->m_Sections[Section], &pProfile->m_Sections[Section + 1],
+ (pProfile->m_NoSections - Section - 1) * sizeof(osl_TProfileSection));
+
+ memset(&pProfile->m_Sections[pProfile->m_NoSections - 1],
+ 0,
+ (pProfile->m_MaxSections - pProfile->m_NoSections) * sizeof(osl_TProfileSection));
+ pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = nullptr;
+ }
+ else
+ {
+ pSection->m_Entries = nullptr;
+ }
+
+ pProfile->m_NoSections--;
+ }
+
+ return;
+}
+
+static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, const char* Section,
+ const char* Entry, sal_uInt32 *pNoEntry)
+{
+ static sal_uInt32 Sect = 0;
+ sal_uInt32 i, n;
+ sal_uInt32 Len;
+ osl_TProfileSection* pSec = nullptr;
+
+ Len = strlen(Section);
+ Section = stripBlanks(Section, &Len);
+
+ n = Sect;
+
+ for (i = 0; i < pProfile->m_NoSections; i++)
+ {
+ n %= pProfile->m_NoSections;
+ pSec = &pProfile->m_Sections[n];
+ if ((Len == pSec->m_Len) &&
+ (strnicmp(Section, &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset], pSec->m_Len)
+ == 0))
+ break;
+ n++;
+ }
+
+ Sect = n;
+
+ if (i < pProfile->m_NoSections)
+ {
+ Len = strlen(Entry);
+ Entry = stripBlanks(Entry, &Len);
+
+ *pNoEntry = pSec->m_NoEntries;
+
+ for (i = 0; i < pSec->m_NoEntries; i++)
+ {
+ const char* pStr = &pProfile->m_Lines[pSec->m_Entries[i].m_Line]
+ [pSec->m_Entries[i].m_Offset];
+ if ((Len == pSec->m_Entries[i].m_Len) &&
+ (strnicmp(Entry, pStr, pSec->m_Entries[i].m_Len)
+ == 0))
+ {
+ *pNoEntry = i;
+ break;
+ }
+ }
+ }
+ else
+ pSec = nullptr;
+
+ return pSec;
+}
+
+static bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile)
+{
+ sal_uInt32 i;
+ char const * pStr;
+ char const * pChar;
+ char Line[4096];
+
+ pProfile->m_NoLines = 0;
+ pProfile->m_NoSections = 0;
+
+ OSL_VERIFY(rewindFile(pFile, false));
+
+ while (getLine(pFile, Line, sizeof(Line)))
+ {
+ if (! addLine(pProfile, Line))
+ return false;
+ }
+
+ for (i = 0; i < pProfile->m_NoLines; i++)
+ {
+ pStr = stripBlanks(pProfile->m_Lines[i], nullptr);
+
+ if ((*pStr == '\0') || (*pStr == ';'))
+ continue;
+
+ if ((*pStr != '[') || ((pChar = strrchr(pStr, ']')) == nullptr) ||
+ ((pChar - pStr) <= 2))
+ {
+ /* insert entry */
+
+ if (pProfile->m_NoSections < 1)
+ continue;
+
+ if ((pChar = strchr(pStr, '=')) == nullptr)
+ pChar = pStr + strlen(pStr);
+
+ if (! addEntry(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1],
+ i, pStr, pChar - pStr))
+ return false;
+ }
+ else
+ {
+ /* new section */
+ if (! addSection(pProfile, i, pStr + 1, pChar - pStr - 1))
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static bool storeProfile(osl_TProfileImpl* pProfile, bool bCleanup)
+{
+ if (pProfile->m_Lines != nullptr)
+ {
+ if (pProfile->m_Flags & FLG_MODIFIED)
+ {
+ sal_uInt32 i;
+
+ osl_TFile* pTmpFile = osl_openTmpProfileImpl(pProfile);
+
+ if ( pTmpFile == nullptr )
+ {
+ return false;
+ }
+
+ OSL_VERIFY(rewindFile(pTmpFile, true));
+
+ for (i = 0; i < pProfile->m_NoLines; i++)
+ {
+ OSL_VERIFY(putLine(pTmpFile, pProfile->m_Lines[i]));
+ }
+
+ if ( ! writeProfileImpl(pTmpFile) )
+ {
+ if ( pTmpFile->m_pWriteBuf != nullptr )
+ {
+ free(pTmpFile->m_pWriteBuf);
+ }
+
+ pTmpFile->m_pWriteBuf=nullptr;
+ pTmpFile->m_nWriteBufLen=0;
+ pTmpFile->m_nWriteBufFree=0;
+
+ closeFileImpl(pTmpFile);
+
+ return false;
+ }
+
+ pProfile->m_Flags &= ~FLG_MODIFIED;
+
+ closeFileImpl(pProfile->m_pFile);
+ closeFileImpl(pTmpFile);
+
+ osl_ProfileSwapProfileNames(pProfile);
+
+ pProfile->m_pFile = openFileImpl(pProfile->m_strFileName,pProfile->m_Flags);
+
+ }
+
+ if (bCleanup)
+ {
+ while (pProfile->m_NoLines > 0)
+ removeLine(pProfile, pProfile->m_NoLines - 1);
+
+ free(pProfile->m_Lines);
+ pProfile->m_Lines = nullptr;
+ pProfile->m_MaxLines = 0;
+
+ while (pProfile->m_NoSections > 0)
+ removeSection(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1]);
+
+ free(pProfile->m_Sections);
+ pProfile->m_Sections = nullptr;
+ pProfile->m_MaxSections = 0;
+ }
+ }
+
+ return true;
+}
+
+static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl* pProfile)
+{
+ osl_TFile* pFile=nullptr;
+ rtl_uString* ustrExtension=nullptr;
+ rtl_uString* ustrTmpName=nullptr;
+ oslProfileOption PFlags=0;
+
+ rtl_uString_newFromAscii(&ustrExtension,"tmp");
+
+ /* generate tmp profilename */
+ ustrTmpName=osl_ProfileGenerateExtension(pProfile->m_strFileName,ustrExtension);
+ rtl_uString_release(ustrExtension);
+
+ if (ustrTmpName == nullptr)
+ return nullptr;
+
+ if (!(pProfile->m_Flags & osl_Profile_READLOCK))
+ PFlags |= osl_Profile_WRITELOCK;
+
+ /* open this file */
+ pFile = openFileImpl(ustrTmpName,pProfile->m_Flags | PFlags);
+
+ /* return new pFile */
+ return pFile;
+}
+
+static bool osl_ProfileSwapProfileNames(osl_TProfileImpl* pProfile)
+{
+ rtl_uString* ustrBakFile=nullptr;
+ rtl_uString* ustrTmpFile=nullptr;
+ rtl_uString* ustrIniFile=nullptr;
+ rtl_uString* ustrExtension=nullptr;
+
+ rtl_uString_newFromAscii(&ustrExtension,"bak");
+
+ ustrBakFile=osl_ProfileGenerateExtension(pProfile->m_strFileName,ustrExtension);
+ rtl_uString_release(ustrExtension);
+ ustrExtension=nullptr;
+
+ rtl_uString_newFromAscii(&ustrExtension,"ini");
+
+ ustrIniFile=osl_ProfileGenerateExtension(pProfile->m_strFileName,ustrExtension);
+ rtl_uString_release(ustrExtension);
+ ustrExtension=nullptr;
+
+ rtl_uString_newFromAscii(&ustrExtension,"tmp");
+
+ ustrTmpFile=osl_ProfileGenerateExtension(pProfile->m_strFileName,ustrExtension);
+ rtl_uString_release(ustrExtension);
+ ustrExtension=nullptr;
+
+ /* unlink bak */
+ DeleteFileW( o3tl::toW(rtl_uString_getStr( ustrBakFile )) );
+
+ /* rename ini bak */
+ MoveFileExW( o3tl::toW(rtl_uString_getStr( ustrIniFile )), o3tl::toW(rtl_uString_getStr( ustrBakFile )), MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH );
+
+ /* rename tmp ini */
+ MoveFileExW( o3tl::toW(rtl_uString_getStr( ustrTmpFile )), o3tl::toW(rtl_uString_getStr( ustrIniFile )), MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH );
+
+ return false;
+}
+
+static rtl_uString* osl_ProfileGenerateExtension(rtl_uString* ustrFileName, rtl_uString* ustrExtension)
+{
+ rtl_uString* ustrNewFileName = nullptr;
+ rtl_uString* ustrOldExtension = nullptr;
+
+ sal_Unicode* pFileNameBuf = rtl_uString_getStr(ustrFileName);
+
+ rtl_uString_newFromAscii(&ustrOldExtension, ".");
+
+ sal_Unicode* pExtensionBuf = rtl_uString_getStr(ustrOldExtension);
+
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfChar(pFileNameBuf, *pExtensionBuf);
+
+ rtl_uString_newReplaceStrAt(&ustrNewFileName,
+ ustrFileName,
+ nIndex+1,
+ 3,
+ ustrExtension);
+
+ return ustrNewFileName;
+}
+
+static osl_TProfileImpl* acquireProfile(oslProfile Profile, bool bWriteable)
+{
+ osl_TProfileImpl* pProfile = static_cast<osl_TProfileImpl*>(Profile);
+ oslProfileOption PFlags=0;
+
+ if ( bWriteable )
+ {
+ PFlags = osl_Profile_DEFAULT | osl_Profile_WRITELOCK;
+ }
+ else
+ {
+ PFlags = osl_Profile_DEFAULT;
+ }
+
+ if (pProfile == nullptr)
+ {
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "AUTOOPEN MODE");
+#endif
+
+ if ( ( pProfile = static_cast<osl_TProfileImpl*>(osl_openProfile( nullptr, PFlags )) ) != nullptr )
+ {
+ pProfile->m_Flags |= FLG_AUTOOPEN;
+ }
+ }
+ else
+ {
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "try to acquire");
+#endif
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ if (! (pProfile->m_Flags & (osl_Profile_READLOCK |
+ osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE)))
+ {
+ osl_TStamp Stamp;
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "DEFAULT MODE");
+#endif
+ pProfile->m_pFile = openFileImpl(
+ pProfile->m_strFileName, pProfile->m_Flags | PFlags);
+ if (!pProfile->m_pFile)
+ return nullptr;
+
+ Stamp = getFileStamp(pProfile->m_pFile);
+
+ if (memcmp(&Stamp, &(pProfile->m_Stamp), sizeof(osl_TStamp)))
+ {
+ pProfile->m_Stamp = Stamp;
+
+ loadProfile(pProfile->m_pFile, pProfile);
+ }
+ }
+ else
+ {
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "READ/WRITELOCK MODE");
+#endif
+
+ /* A readlock file could not be written */
+ if ((pProfile->m_Flags & osl_Profile_READLOCK) && bWriteable)
+ {
+ return nullptr;
+ }
+ }
+ }
+ }
+
+ return pProfile;
+}
+
+static bool releaseProfile(osl_TProfileImpl* pProfile)
+{
+ if ( pProfile == nullptr )
+ {
+ return false;
+ }
+
+ if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
+ {
+ if (pProfile->m_Flags & FLG_AUTOOPEN)
+ {
+ return osl_closeProfile(static_cast<oslProfile>(pProfile));
+ }
+ else
+ {
+#ifdef DEBUG_OSL_PROFILE
+ SAL_INFO("sal.osl", "DEFAULT MODE");
+#endif
+ if (! (pProfile->m_Flags & (osl_Profile_READLOCK |
+ osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE)))
+ {
+ if (pProfile->m_Flags & FLG_MODIFIED)
+ storeProfile(pProfile, false);
+
+ closeFileImpl(pProfile->m_pFile);
+ pProfile->m_pFile = nullptr;
+ }
+ }
+ }
+
+ return true;
+}
+
+static bool lookupProfile(const sal_Unicode *strPath, const sal_Unicode *strFile, sal_Unicode *strProfile)
+{
+ char *pChr;
+ char Buffer[4096] = "";
+ char Product[132] = "";
+
+ ::osl::LongPathBuffer< sal_Unicode > aPath( MAX_LONG_PATH );
+ aPath[0] = 0;
+
+ if (*strPath == L'"')
+ {
+ int i = 0;
+
+ strPath++;
+
+ while ((strPath[i] != L'"') && (strPath[i] != L'\0'))
+ i++;
+
+ WideCharToMultiByte(CP_ACP,0, o3tl::toW(strPath), i, Product, sizeof(Product), nullptr, nullptr);
+ Product[i] = '\0';
+ strPath += i;
+
+ if (*strPath == L'"')
+ strPath++;
+
+ if ( (*strPath == L'/') || (*strPath == L'\\') )
+ {
+ strPath++;
+ }
+ }
+
+ else
+ {
+ /* if we have not product identification, do a special handling for soffice.ini */
+ if (rtl_ustr_ascii_compare(strFile, SVERSION_PROFILE) == 0)
+ {
+ rtl_uString * strSVProfile = nullptr;
+ rtl_uString * strSVFallback = nullptr;
+ rtl_uString * strSVLocation = nullptr;
+ rtl_uString * strSVName = nullptr;
+ ::osl::LongPathBuffer< char > aDir( MAX_LONG_PATH );
+ oslProfile hProfile;
+
+ rtl_uString_newFromAscii(&strSVFallback, SVERSION_FALLBACK);
+ rtl_uString_newFromAscii(&strSVLocation, SVERSION_LOCATION);
+ rtl_uString_newFromAscii(&strSVName, SVERSION_NAME);
+
+ /* open sversion.ini in the system directory, and try to locate the entry
+ with the highest version for StarOffice */
+ if (osl_getProfileName( strSVFallback, strSVName, &strSVProfile))
+ {
+ hProfile = osl_openProfile(strSVProfile, osl_Profile_READLOCK);
+ if (hProfile)
+ {
+ osl_getProfileSectionEntries(
+ hProfile, SVERSION_SECTION, Buffer, sizeof(Buffer));
+
+ for (pChr = Buffer; *pChr != '\0'; pChr += strlen(pChr) + 1)
+ {
+ if ((strnicmp(
+ pChr, SVERSION_SOFFICE,
+ sizeof(SVERSION_SOFFICE) - 1)
+ == 0)
+ && (stricmp(Product, pChr) < 0))
+ {
+ osl_readProfileString(
+ hProfile, SVERSION_SECTION, pChr, aDir,
+ aDir.getBufSizeInSymbols(), "");
+
+ /* check for existence of path */
+ if (access(aDir, 0) >= 0)
+ strcpy(Product, pChr);
+ }
+ }
+
+ osl_closeProfile(hProfile);
+ }
+ rtl_uString_release(strSVProfile);
+ strSVProfile = nullptr;
+ }
+
+ /* open sversion.ini in the users directory, and try to locate the entry
+ with the highest version for StarOffice */
+ if ( osl_getProfileName(strSVLocation, strSVName, &strSVProfile) )
+ {
+ hProfile = osl_openProfile(strSVProfile, osl_Profile_READLOCK);
+ if (hProfile)
+ {
+ osl_getProfileSectionEntries(
+ hProfile, SVERSION_SECTION, Buffer, sizeof(Buffer));
+
+ for (pChr = Buffer; *pChr != '\0'; pChr += strlen(pChr) + 1)
+ {
+ if ((strnicmp(
+ pChr, SVERSION_SOFFICE,
+ sizeof(SVERSION_SOFFICE) - 1)
+ == 0)
+ && (stricmp(Product, pChr) < 0))
+ {
+ osl_readProfileString(
+ hProfile, SVERSION_SECTION, pChr, aDir,
+ aDir.getBufSizeInSymbols(), "");
+
+ /* check for existence of path */
+ if (access(aDir, 0) >= 0)
+ strcpy(Product, pChr);
+ }
+ }
+
+ osl_closeProfile(hProfile);
+ }
+ rtl_uString_release(strSVProfile);
+ }
+
+ rtl_uString_release(strSVFallback);
+ rtl_uString_release(strSVLocation);
+ rtl_uString_release(strSVName);
+
+ /* remove any trailing build number */
+ if ((pChr = strrchr(Product, '/')) != nullptr)
+ *pChr = '\0';
+ }
+ }
+
+ rtl_uString * strExecutable = nullptr;
+ rtl_uString * strTmp = nullptr;
+ sal_Int32 nPos;
+
+ /* try to find the file in the directory of the executable */
+ if (osl_getExecutableFile(&strTmp) != osl_Process_E_None)
+ return false;
+
+ /* convert to native path */
+ if (osl_getSystemPathFromFileURL(strTmp, &strExecutable) != osl_File_E_None)
+ {
+ rtl_uString_release(strTmp);
+ return false;
+ }
+
+ rtl_uString_release(strTmp);
+
+ DWORD dwPathLen = 0;
+
+ /* separate path from filename */
+ if ((nPos = rtl_ustr_lastIndexOfChar(strExecutable->buffer, L'\\')) == -1)
+ {
+ if ((nPos = rtl_ustr_lastIndexOfChar(strExecutable->buffer, L':')) == -1)
+ {
+ rtl_uString_release(strExecutable);
+ return false;
+ }
+ else
+ {
+ copy_ustr_n(aPath, strExecutable->buffer, nPos);
+ aPath[nPos] = 0;
+ dwPathLen = nPos;
+ }
+ }
+ else
+ {
+ copy_ustr_n(aPath, strExecutable->buffer, nPos);
+ dwPathLen = nPos;
+ aPath[dwPathLen] = 0;
+ }
+
+ /* if we have no product identification use the executable file name */
+ if (*Product == 0)
+ {
+ WideCharToMultiByte(CP_ACP,0, o3tl::toW(strExecutable->buffer + nPos + 1), -1, Product, sizeof(Product), nullptr, nullptr);
+
+ /* remove extension */
+ if ((pChr = strrchr(Product, '.')) != nullptr)
+ *pChr = '\0';
+ }
+
+ rtl_uString_release(strExecutable);
+
+ /* remember last subdir */
+ nPos = rtl_ustr_lastIndexOfChar(aPath, L'\\');
+
+ copy_ustr_n(aPath + dwPathLen++, L"\\", 2);
+
+ if (*strPath)
+ {
+ copy_ustr_n(aPath + dwPathLen, strPath, rtl_ustr_getLength(strPath)+1);
+ dwPathLen += rtl_ustr_getLength(strPath);
+ }
+
+ {
+ ::osl::LongPathBuffer< char > aTmpPath( MAX_LONG_PATH );
+
+ WideCharToMultiByte(CP_ACP,0, o3tl::toW(aPath), -1, aTmpPath, aTmpPath.getBufSizeInSymbols(), nullptr, nullptr);
+
+ /* if file not exists, remove any specified subdirectories
+ like "bin" or "program" */
+
+ if (((access(aTmpPath, 0) < 0) && (nPos != -1)) || (*strPath == 0))
+ {
+ static const char *SubDirs[] = SVERSION_DIRS;
+
+ unsigned i = 0;
+ char *pStr = aTmpPath + nPos;
+
+ for (i = 0; i < SAL_N_ELEMENTS(SubDirs); i++)
+ if (strnicmp(pStr + 1, SubDirs[i], strlen(SubDirs[i])) == 0)
+ {
+ if ( *strPath == 0)
+ {
+ strcpy(pStr + 1,SVERSION_USER);
+ if ( access(aTmpPath, 0) < 0 )
+ {
+ *(pStr+1)='\0';
+ }
+ else
+ {
+ dwPathLen = nPos + MultiByteToWideChar( CP_ACP, 0, SVERSION_USER, -1, o3tl::toW(aPath + nPos + 1), aPath.getBufSizeInSymbols() - (nPos + 1) );
+ }
+ }
+ else
+ {
+ copy_ustr_n(aPath + nPos + 1, strPath, rtl_ustr_getLength(strPath)+1);
+ dwPathLen = nPos + 1 + rtl_ustr_getLength(strPath);
+ }
+
+ break;
+ }
+ }
+ }
+
+ if ((aPath[dwPathLen - 1] != L'/') && (aPath[dwPathLen - 1] != L'\\'))
+ {
+ aPath[dwPathLen++] = L'\\';
+ aPath[dwPathLen] = 0;
+ }
+
+ copy_ustr_n(aPath + dwPathLen, strFile, rtl_ustr_getLength(strFile)+1);
+
+ {
+ ::osl::LongPathBuffer< char > aTmpPath( MAX_LONG_PATH );
+
+ WideCharToMultiByte(CP_ACP,0, o3tl::toW(aPath), -1, aTmpPath, aTmpPath.getBufSizeInSymbols(), nullptr, nullptr);
+
+ if ((access(aTmpPath, 0) < 0) && (Product[0] != '\0'))
+ {
+ rtl_uString * strSVFallback = nullptr;
+ rtl_uString * strSVProfile = nullptr;
+ rtl_uString * strSVLocation = nullptr;
+ rtl_uString * strSVName = nullptr;
+ oslProfile hProfile;
+
+ rtl_uString_newFromAscii(&strSVFallback, SVERSION_FALLBACK);
+ rtl_uString_newFromAscii(&strSVLocation, SVERSION_LOCATION);
+ rtl_uString_newFromAscii(&strSVName, SVERSION_NAME);
+
+ /* open sversion.ini in the system directory, and try to locate the entry
+ with the highest version for StarOffice */
+ if (osl_getProfileName(strSVLocation, strSVName, &strSVProfile))
+ {
+ hProfile = osl_openProfile(
+ strSVProfile, osl_Profile_READLOCK);
+ if (hProfile)
+ {
+ osl_readProfileString(
+ hProfile, SVERSION_SECTION, Product, Buffer,
+ sizeof(Buffer), "");
+ osl_closeProfile(hProfile);
+
+ /* if not found, try the fallback */
+ if (Buffer[0] == '\0')
+ {
+ if (osl_getProfileName(
+ strSVFallback, strSVName, &strSVProfile))
+ {
+ hProfile = osl_openProfile(
+ strSVProfile, osl_Profile_READLOCK);
+ if (hProfile)
+ {
+ osl_readProfileString(
+ hProfile, SVERSION_SECTION, Product,
+ Buffer, sizeof(Buffer), "");
+ }
+ }
+
+ osl_closeProfile(hProfile);
+ }
+
+ if (Buffer[0] != '\0')
+ {
+ dwPathLen = MultiByteToWideChar(
+ CP_ACP, 0, Buffer, -1, o3tl::toW(aPath), aPath.getBufSizeInSymbols() );
+ dwPathLen -=1;
+
+ /* build full path */
+ if ((aPath[dwPathLen - 1] != L'/')
+ && (aPath[dwPathLen - 1] != L'\\'))
+ {
+ copy_ustr_n(aPath + dwPathLen++, L"\\", 2);
+ }
+
+ if (*strPath)
+ {
+ copy_ustr_n(aPath + dwPathLen, strPath, rtl_ustr_getLength(strPath)+1);
+ dwPathLen += rtl_ustr_getLength(strPath);
+ }
+ else
+ {
+ ::osl::LongPathBuffer< char > aTmpPath2( MAX_LONG_PATH );
+ int n;
+
+ if ((n = WideCharToMultiByte(
+ CP_ACP,0, o3tl::toW(aPath), -1, aTmpPath2,
+ aTmpPath2.getBufSizeInSymbols(), nullptr, nullptr))
+ > 0)
+ {
+ strcpy(aTmpPath2 + n, SVERSION_USER);
+ if (access(aTmpPath2, 0) >= 0)
+ {
+ dwPathLen += MultiByteToWideChar(
+ CP_ACP, 0, SVERSION_USER, -1,
+ o3tl::toW(aPath + dwPathLen),
+ aPath.getBufSizeInSymbols() - dwPathLen );
+ }
+ }
+ }
+ }
+ }
+
+ rtl_uString_release(strSVProfile);
+ }
+
+ rtl_uString_release(strSVFallback);
+ rtl_uString_release(strSVLocation);
+ rtl_uString_release(strSVName);
+ }
+ }
+
+ aPath[dwPathLen] = 0;
+
+ /* copy filename */
+ copy_ustr_n(strProfile, aPath, dwPathLen+1);
+
+ return true;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/random.cxx b/sal/osl/w32/random.cxx
new file mode 100644
index 000000000..a2c364da2
--- /dev/null
+++ b/sal/osl/w32/random.cxx
@@ -0,0 +1,63 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#define _CRT_RAND_S
+
+#include <stdlib.h>
+#include <memory.h>
+
+#include <oslrandom.h>
+
+int osl_get_system_random_data(char* buffer, size_t desired_len)
+{
+ unsigned int val;
+
+ /* if unaligned fill to alignment */
+ if (reinterpret_cast<uintptr_t>(buffer) & 3)
+ {
+ size_t len = 4 - (reinterpret_cast<size_t>(buffer) & 3);
+
+ if (len > desired_len)
+ {
+ len = desired_len;
+ }
+ if (rand_s(&val))
+ {
+ return 0;
+ }
+ memcpy(buffer, &val, len);
+ buffer += len;
+ desired_len -= len;
+ }
+ /* fill directly into the buffer as long as we can */
+ while (desired_len >= 4)
+ {
+ if (rand_s(reinterpret_cast<unsigned int*>(buffer)))
+ {
+ return 0;
+ }
+ else
+ {
+ buffer += 4;
+ desired_len -= 4;
+ }
+ }
+ /* deal with the partial int reminder to fill */
+ if (desired_len)
+ {
+ if (rand_s(&val))
+ {
+ return 0;
+ }
+ memcpy(buffer, &val, desired_len);
+ }
+ return 1;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/salinit.cxx b/sal/osl/w32/salinit.cxx
new file mode 100644
index 000000000..c0b917127
--- /dev/null
+++ b/sal/osl/w32/salinit.cxx
@@ -0,0 +1,83 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "system.h"
+#include "time.hxx"
+
+#include <osl/process.h>
+#include <sal/main.h>
+#include <sal/types.h>
+
+extern "C" {
+
+// Prototypes for initialization and deinitialization of SAL library
+
+void sal_detail_initialize(int argc, char ** argv)
+{
+ if (argc == sal::detail::InitializeSoffice)
+ {
+ return;
+ }
+ sal_initGlobalTimer();
+#ifndef _WIN64
+ SetProcessDEPPolicy(PROCESS_DEP_ENABLE);
+#endif
+ SetDllDirectoryW(L""); // remove the current directory from the default DLL search order
+ SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE | BASE_SEARCH_PATH_PERMANENT);
+
+ WSADATA wsaData;
+ int error;
+ WORD wVersionRequested;
+
+ wVersionRequested = MAKEWORD(1, 1);
+
+ error = WSAStartup(wVersionRequested, &wsaData);
+ if ( 0 == error )
+ {
+ WORD const wMajorVersionRequired = 1;
+ WORD const wMinorVersionRequired = 1;
+
+ if ((LOBYTE(wsaData.wVersion) < wMajorVersionRequired) ||
+ ((LOBYTE(wsaData.wVersion) == wMajorVersionRequired) &&
+ (HIBYTE(wsaData.wVersion) < wMinorVersionRequired)))
+ {
+ // How to handle a very unlikely error ???
+ }
+ }
+ else
+ {
+ // How to handle a very unlikely error ???
+ }
+
+ osl_setCommandArgs(argc, argv);
+}
+
+void sal_detail_deinitialize()
+{
+ if ( SOCKET_ERROR == WSACleanup() )
+ {
+ // We should never reach this point or we did wrong elsewhere
+ }
+}
+
+} // extern "C"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/secimpl.hxx b/sal/osl/w32/secimpl.hxx
new file mode 100644
index 000000000..7c952bb64
--- /dev/null
+++ b/sal/osl/w32/secimpl.hxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_SECIMPL_HXX
+#define INCLUDED_SAL_OSL_W32_SECIMPL_HXX
+
+#include <winnetwk.h>
+
+#include <osl/security.h>
+
+#define USER_BUFFER_SIZE 256
+
+typedef struct
+{
+ HANDLE m_hProfile;
+ HANDLE m_hToken;
+ sal_Unicode m_User[USER_BUFFER_SIZE];
+ /* extension by fileserver login */
+ NETRESOURCEW* m_pNetResource;
+} oslSecurityImpl;
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/security.cxx b/sal/osl/w32/security.cxx
new file mode 100644
index 000000000..21ed64a78
--- /dev/null
+++ b/sal/osl/w32/security.cxx
@@ -0,0 +1,662 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.h"
+#include <userenv.h>
+
+#include <cassert>
+#include <osl/security.h>
+#include <osl/diagnose.h>
+#include <osl/thread.h>
+#include <osl/file.h>
+#include <systools/win32/uwinapi.h>
+#include <sddl.h>
+#include <sal/macros.h>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+#include "secimpl.hxx"
+
+/* To get an impersonation token we need to create an impersonation
+ duplicate so every access token has to be created with duplicate
+ access rights */
+
+#define TOKEN_DUP_QUERY (TOKEN_QUERY|TOKEN_DUPLICATE)
+
+static bool GetSpecialFolder(rtl_uString **strPath, REFKNOWNFOLDERID rFolder);
+// We use LPCTSTR here, because we use it with SE_foo_NAME constants
+// which are defined in winnt.h as UNICODE-dependent TEXT("PrivilegeName")
+static bool Privilege(LPCTSTR pszPrivilege, bool bEnable);
+static bool getUserNameImpl(oslSecurity Security, rtl_uString **strName, bool bIncludeDomain);
+
+oslSecurity SAL_CALL osl_getCurrentSecurity(void)
+{
+ oslSecurityImpl* pSecImpl = static_cast<oslSecurityImpl *>(malloc(sizeof(oslSecurityImpl)));
+ if (pSecImpl)
+ {
+ pSecImpl->m_pNetResource = nullptr;
+ pSecImpl->m_User[0] = '\0';
+ pSecImpl->m_hToken = nullptr;
+ pSecImpl->m_hProfile = nullptr;
+ }
+ return pSecImpl;
+}
+
+oslSecurityError SAL_CALL osl_loginUser( rtl_uString *strUserName, rtl_uString *strPasswd, oslSecurity *pSecurity )
+{
+ oslSecurityError ret;
+
+ sal_Unicode* strUser;
+ sal_Unicode* strDomain = o3tl::toU(_wcsdup(o3tl::toW(rtl_uString_getStr(strUserName))));
+ HANDLE hUserToken;
+ LUID luid;
+
+ if (nullptr != (strUser = o3tl::toU(wcschr(o3tl::toW(strDomain), L'/'))))
+ *strUser++ = L'\0';
+ else
+ {
+ strUser = strDomain;
+ strDomain = nullptr;
+ }
+
+ // this process must have the right: 'act as a part of operatingsystem'
+ OSL_ASSERT(LookupPrivilegeValue(nullptr, SE_TCB_NAME, &luid));
+ (void) luid;
+
+ if (LogonUserW(o3tl::toW(strUser), strDomain ? o3tl::toW(strDomain) : L"", o3tl::toW(rtl_uString_getStr(strPasswd)),
+ LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
+ &hUserToken))
+ {
+ oslSecurityImpl* pSecImpl = static_cast<oslSecurityImpl *>(malloc(sizeof(oslSecurityImpl)));
+ if (pSecImpl)
+ {
+ pSecImpl->m_pNetResource = nullptr;
+ pSecImpl->m_hToken = hUserToken;
+ pSecImpl->m_hProfile = nullptr;
+ wcscpy(o3tl::toW(pSecImpl->m_User), o3tl::toW(strUser));
+ }
+ *pSecurity = pSecImpl;
+ ret = pSecImpl ? osl_Security_E_None : osl_Security_E_Unknown;
+ }
+ else
+ {
+ ret = osl_Security_E_UserUnknown;
+ }
+
+ if (strDomain)
+ free(strDomain);
+ else
+ free(strUser);
+
+ return ret;
+}
+
+oslSecurityError SAL_CALL osl_loginUserOnFileServer(rtl_uString *strUserName,
+ rtl_uString *strPasswd,
+ rtl_uString *strFileServer,
+ oslSecurity *pSecurity)
+{
+ oslSecurityError ret;
+ DWORD err;
+ NETRESOURCEW netResource;
+ sal_Unicode* remoteName;
+ sal_Unicode* userName;
+
+ remoteName = static_cast<sal_Unicode *>(malloc((rtl_uString_getLength(strFileServer) + rtl_uString_getLength(strUserName) + 4) * sizeof(sal_Unicode)));
+ userName = static_cast<sal_Unicode *>(malloc((rtl_uString_getLength(strFileServer) + rtl_uString_getLength(strUserName) + 2) * sizeof(sal_Unicode)));
+
+ wcscpy(o3tl::toW(remoteName), L"\\\\");
+ wcscat(o3tl::toW(remoteName), o3tl::toW(rtl_uString_getStr(strFileServer)));
+ wcscat(o3tl::toW(remoteName), L"\\");
+ wcscat(o3tl::toW(remoteName), o3tl::toW(rtl_uString_getStr(strUserName)));
+
+ wcscpy(o3tl::toW(userName), o3tl::toW(rtl_uString_getStr(strFileServer)));
+ wcscat(o3tl::toW(userName), L"\\");
+ wcscat(o3tl::toW(userName), o3tl::toW(rtl_uString_getStr(strUserName)));
+
+ netResource.dwScope = RESOURCE_GLOBALNET;
+ netResource.dwType = RESOURCETYPE_DISK;
+ netResource.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE;
+ netResource.dwUsage = RESOURCEUSAGE_CONNECTABLE;
+ netResource.lpLocalName = nullptr;
+ netResource.lpRemoteName = o3tl::toW(remoteName);
+ netResource.lpComment = nullptr;
+ netResource.lpProvider = nullptr;
+
+ err = WNetAddConnection2W(&netResource, o3tl::toW(rtl_uString_getStr(strPasswd)), o3tl::toW(userName), 0);
+
+ if ((err == NO_ERROR) || (err == ERROR_ALREADY_ASSIGNED))
+ {
+ oslSecurityImpl* pSecImpl = static_cast<oslSecurityImpl *>(malloc(sizeof(oslSecurityImpl)));
+ if (pSecImpl)
+ {
+ pSecImpl->m_pNetResource = static_cast<NETRESOURCEW *>(malloc(sizeof(NETRESOURCE)));
+ if (pSecImpl->m_pNetResource)
+ {
+ *pSecImpl->m_pNetResource = netResource;
+ pSecImpl->m_hToken = nullptr;
+ pSecImpl->m_hProfile = nullptr;
+ wcscpy(o3tl::toW(pSecImpl->m_User), o3tl::toW(rtl_uString_getStr(strUserName)));
+ }
+ else
+ {
+ free(pSecImpl);
+ pSecImpl = nullptr;
+ }
+ }
+ *pSecurity = pSecImpl;
+
+ ret = pSecImpl ? osl_Security_E_None : osl_Security_E_Unknown;
+ }
+ else
+ {
+ ret = osl_Security_E_UserUnknown;
+ }
+
+ free(remoteName);
+ free(userName);
+
+ return ret;
+}
+
+sal_Bool SAL_CALL osl_isAdministrator(oslSecurity Security)
+{
+ if (!Security)
+ return false;
+
+ HANDLE hImpersonationToken = nullptr;
+ PSID psidAdministrators;
+ SID_IDENTIFIER_AUTHORITY siaNtAuthority = { SECURITY_NT_AUTHORITY };
+ bool bSuccess = false;
+
+ /* If Security contains an access token we need to duplicate it to an impersonation
+ access token. NULL works with CheckTokenMembership() as the current effective
+ impersonation token
+ */
+
+ if ( static_cast<oslSecurityImpl*>(Security)->m_hToken )
+ {
+ if ( !DuplicateToken (static_cast<oslSecurityImpl*>(Security)->m_hToken, SecurityImpersonation, &hImpersonationToken) )
+ return false;
+ }
+
+ /* CheckTokenMembership() can be used on W2K and higher (NT4 no longer supported by OOo)
+ and also works on Vista to retrieve the effective user rights. Just checking for
+ membership of Administrators group is not enough on Vista this would require additional
+ complicated checks as described in KB article Q118626: http://support.microsoft.com/kb/118626/en-us
+ */
+
+ if (AllocateAndInitializeSid(&siaNtAuthority,
+ 2,
+ SECURITY_BUILTIN_DOMAIN_RID,
+ DOMAIN_ALIAS_RID_ADMINS,
+ 0, 0, 0, 0, 0, 0,
+ &psidAdministrators))
+ {
+ BOOL fSuccess = FALSE;
+
+ if (CheckTokenMembership(hImpersonationToken, psidAdministrators, &fSuccess) && fSuccess)
+ bSuccess = true;
+
+ FreeSid(psidAdministrators);
+ }
+
+ if (hImpersonationToken)
+ CloseHandle(hImpersonationToken);
+
+ return bSuccess;
+}
+
+void SAL_CALL osl_freeSecurityHandle(oslSecurity Security)
+{
+ if (!Security)
+ return;
+
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl*>(Security);
+
+ if (pSecImpl->m_pNetResource != nullptr)
+ {
+ WNetCancelConnection2W(pSecImpl->m_pNetResource->lpRemoteName, 0, true);
+
+ free(pSecImpl->m_pNetResource->lpRemoteName);
+ free(pSecImpl->m_pNetResource);
+ }
+
+ if (pSecImpl->m_hToken)
+ CloseHandle(pSecImpl->m_hToken);
+
+ if ( pSecImpl->m_hProfile )
+ CloseHandle(pSecImpl->m_hProfile);
+
+ free (pSecImpl);
+}
+
+sal_Bool SAL_CALL osl_getUserIdent(oslSecurity Security, rtl_uString **strIdent)
+{
+ if (!Security)
+ return false;
+
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl*>(Security);
+
+ HANDLE hAccessToken = pSecImpl->m_hToken;
+
+ if (hAccessToken == nullptr)
+ OpenProcessToken(GetCurrentProcess(), TOKEN_DUP_QUERY, &hAccessToken);
+
+ if (hAccessToken)
+ {
+ DWORD nInfoBuffer = 512;
+ UCHAR* pInfoBuffer = static_cast<UCHAR *>(malloc(nInfoBuffer));
+
+ while (!GetTokenInformation(hAccessToken, TokenUser,
+ pInfoBuffer, nInfoBuffer, &nInfoBuffer))
+ {
+ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ {
+ if (auto p = static_cast<UCHAR *>(realloc(pInfoBuffer, nInfoBuffer)))
+ pInfoBuffer = p;
+ else
+ {
+ free(pInfoBuffer);
+ pInfoBuffer = nullptr;
+ break;
+ }
+ }
+ else
+ {
+ free(pInfoBuffer);
+ pInfoBuffer = nullptr;
+ break;
+ }
+ }
+
+ if (pSecImpl->m_hToken == nullptr)
+ CloseHandle(hAccessToken);
+
+ if (pInfoBuffer)
+ {
+ PSID pSid = reinterpret_cast<PTOKEN_USER>(pInfoBuffer)->User.Sid;
+
+ LPWSTR pSidStr = nullptr;
+ bool bResult = ConvertSidToStringSidW(pSid, &pSidStr);
+ if (bResult)
+ {
+ rtl_uString_newFromStr(strIdent, o3tl::toU(pSidStr));
+ LocalFree(pSidStr);
+ }
+ else
+ {
+ const DWORD dwError = GetLastError();
+ SAL_WARN(
+ "sal.osl",
+ "ConvertSidToStringSidW failed. GetLastError returned: " << dwError);
+ }
+
+ free(pInfoBuffer);
+
+ return bResult;
+ }
+ }
+ else
+ {
+ DWORD needed = 0;
+
+ WNetGetUserW(nullptr, nullptr, &needed);
+ if (needed < 16)
+ needed = 16;
+
+ if (auto Ident = static_cast<sal_Unicode *>(malloc(needed*sizeof(sal_Unicode))))
+ {
+ if (WNetGetUserW(nullptr, o3tl::toW(Ident), &needed) != NO_ERROR)
+ {
+ wcscpy(o3tl::toW(Ident), L"unknown");
+ Ident[7] = L'\0';
+ }
+
+ rtl_uString_newFromStr( strIdent, Ident);
+ free(Ident);
+ return true;
+ }
+ }
+ return false;
+}
+
+sal_Bool SAL_CALL osl_getUserName(oslSecurity Security, rtl_uString **strName)
+{
+ return getUserNameImpl(Security, strName, true);
+}
+
+sal_Bool SAL_CALL osl_getShortUserName(oslSecurity Security, rtl_uString **strName)
+{
+ return getUserNameImpl(Security, strName, false);
+}
+
+sal_Bool SAL_CALL osl_getHomeDir(oslSecurity Security, rtl_uString **pustrDirectory)
+{
+ if (!Security)
+ return false;
+
+ rtl_uString *ustrSysDir = nullptr;
+ bool bSuccess = false;
+
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl*>(Security);
+
+ if (pSecImpl->m_pNetResource != nullptr)
+ {
+ rtl_uString_newFromStr( &ustrSysDir, o3tl::toU(pSecImpl->m_pNetResource->lpRemoteName));
+
+ bSuccess = osl_File_E_None == osl_getFileURLFromSystemPath( ustrSysDir, pustrDirectory );
+ }
+ else
+ {
+ bSuccess = GetSpecialFolder(&ustrSysDir, FOLDERID_Documents) &&
+ (osl_File_E_None == osl_getFileURLFromSystemPath(ustrSysDir, pustrDirectory));
+ }
+
+ if ( ustrSysDir )
+ rtl_uString_release( ustrSysDir );
+
+ return bSuccess;
+}
+
+sal_Bool SAL_CALL osl_getConfigDir(oslSecurity Security, rtl_uString **pustrDirectory)
+{
+ if (!Security)
+ return false;
+
+ bool bSuccess = false;
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl*>(Security);
+
+ if (pSecImpl->m_pNetResource != nullptr)
+ {
+ rtl_uString *ustrSysDir = nullptr;
+
+ rtl_uString_newFromStr( &ustrSysDir, o3tl::toU(pSecImpl->m_pNetResource->lpRemoteName));
+ bSuccess = osl_File_E_None == osl_getFileURLFromSystemPath( ustrSysDir, pustrDirectory);
+
+ if ( ustrSysDir )
+ rtl_uString_release( ustrSysDir );
+ }
+ else
+ {
+ if (pSecImpl->m_hToken)
+ {
+ /* not implemented */
+ OSL_ASSERT(false);
+ }
+ else
+ {
+ rtl_uString *ustrFile = nullptr;
+ sal_Unicode sFile[_MAX_PATH];
+
+ if ( !GetSpecialFolder( &ustrFile, FOLDERID_RoamingAppData) )
+ {
+ OSL_VERIFY(GetWindowsDirectoryW(o3tl::toW(sFile), _MAX_DIR) > 0);
+
+ rtl_uString_newFromStr( &ustrFile, sFile);
+ }
+
+ bSuccess = osl_File_E_None == osl_getFileURLFromSystemPath(ustrFile, pustrDirectory);
+
+ if ( ustrFile )
+ rtl_uString_release( ustrFile );
+ }
+ }
+
+ return bSuccess;
+}
+
+sal_Bool SAL_CALL osl_loadUserProfile(oslSecurity Security)
+{
+ /* CreateProcessAsUser does not load the specified user's profile
+ into the HKEY_USERS registry key. This means that access to information
+ in the HKEY_CURRENT_USER registry key may not produce results consistent
+ with a normal interactive logon.
+ It is your responsibility to load the user's registry hive into HKEY_USERS
+ with the LoadUserProfile function before calling CreateProcessAsUser.
+ */
+
+ RegCloseKey(HKEY_CURRENT_USER);
+
+ if (!Privilege(SE_RESTORE_NAME, true))
+ return false;
+
+ bool bOk = false;
+ HANDLE hAccessToken = static_cast<oslSecurityImpl*>(Security)->m_hToken;
+
+ /* try to create user profile */
+ if ( !hAccessToken )
+ {
+ /* retrieve security handle if not done before e.g. osl_getCurrentSecurity()
+ */
+ HANDLE hProcess = GetCurrentProcess();
+
+ if (hProcess != nullptr)
+ {
+ OpenProcessToken(hProcess, TOKEN_IMPERSONATE, &hAccessToken);
+ CloseHandle(hProcess);
+ }
+ }
+
+ rtl_uString *buffer = nullptr;
+ PROFILEINFOW pi;
+
+ getUserNameImpl(Security, &buffer, false);
+
+ ZeroMemory(&pi, sizeof(pi));
+ pi.dwSize = sizeof(pi);
+ pi.lpUserName = o3tl::toW(rtl_uString_getStr(buffer));
+ pi.dwFlags = PI_NOUI;
+
+ if (LoadUserProfileW(hAccessToken, &pi))
+ {
+ UnloadUserProfile(hAccessToken, pi.hProfile);
+
+ bOk = true;
+ }
+
+ rtl_uString_release(buffer);
+
+ if (hAccessToken && (hAccessToken != static_cast<oslSecurityImpl*>(Security)->m_hToken))
+ CloseHandle(hAccessToken);
+
+ return bOk;
+}
+
+void SAL_CALL osl_unloadUserProfile(oslSecurity Security)
+{
+ if ( static_cast<oslSecurityImpl*>(Security)->m_hProfile == nullptr )
+ return;
+
+ HANDLE hAccessToken = static_cast<oslSecurityImpl*>(Security)->m_hToken;
+
+ if ( !hAccessToken )
+ {
+ /* retrieve security handle if not done before e.g. osl_getCurrentSecurity()
+ */
+ HANDLE hProcess = GetCurrentProcess();
+
+ if (hProcess != nullptr)
+ {
+ OpenProcessToken(hProcess, TOKEN_IMPERSONATE, &hAccessToken);
+ CloseHandle(hProcess);
+ }
+ }
+
+ /* unloading the user profile */
+ UnloadUserProfile(hAccessToken, static_cast<oslSecurityImpl*>(Security)->m_hProfile);
+
+ static_cast<oslSecurityImpl*>(Security)->m_hProfile = nullptr;
+
+ if (hAccessToken && (hAccessToken != static_cast<oslSecurityImpl*>(Security)->m_hToken))
+ CloseHandle(hAccessToken);
+}
+
+static bool GetSpecialFolder(rtl_uString **strPath, REFKNOWNFOLDERID rFolder)
+{
+ bool bRet = false;
+ PWSTR PathW;
+ if (SUCCEEDED(SHGetKnownFolderPath(rFolder, KF_FLAG_CREATE, nullptr, &PathW)))
+ {
+ rtl_uString_newFromStr(strPath, o3tl::toU(PathW));
+ CoTaskMemFree(PathW);
+ bRet = true;
+ }
+
+ return bRet;
+}
+
+// We use LPCTSTR here, because we use it with SE_foo_NAME constants
+// which are defined in winnt.h as UNICODE-dependent TEXT("PrivilegeName")
+static bool Privilege(LPCTSTR strPrivilege, bool bEnable)
+{
+ HANDLE hToken;
+ TOKEN_PRIVILEGES tp;
+
+ // obtain the processes token
+ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_DUP_QUERY, &hToken))
+ return false;
+
+ // get the luid
+ if (!LookupPrivilegeValue(nullptr, strPrivilege, &tp.Privileges[0].Luid))
+ return false;
+
+ tp.PrivilegeCount = 1;
+
+ if (bEnable)
+ tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+ else
+ tp.Privileges[0].Attributes = 0;
+
+ // enable or disable the privilege
+ if (!AdjustTokenPrivileges(hToken, FALSE, &tp, 0, nullptr, nullptr))
+ return false;
+
+ if (!CloseHandle(hToken))
+ return false;
+
+ return true;
+}
+
+static bool getUserNameImpl(oslSecurity Security, rtl_uString **strName, bool bIncludeDomain)
+{
+ if (!Security)
+ return false;
+
+ oslSecurityImpl *pSecImpl = static_cast<oslSecurityImpl*>(Security);
+
+ HANDLE hAccessToken = pSecImpl->m_hToken;
+
+ if (hAccessToken == nullptr)
+ OpenProcessToken(GetCurrentProcess(), TOKEN_DUP_QUERY, &hAccessToken);
+
+ if (hAccessToken)
+ {
+ DWORD nInfoBuffer = 512;
+ UCHAR* pInfoBuffer = static_cast<UCHAR *>(malloc(nInfoBuffer));
+
+ while (!GetTokenInformation(hAccessToken, TokenUser,
+ pInfoBuffer, nInfoBuffer, &nInfoBuffer))
+ {
+ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ {
+ if (auto p = static_cast<UCHAR *>(realloc(pInfoBuffer, nInfoBuffer)))
+ pInfoBuffer = p;
+ else
+ {
+ free(pInfoBuffer);
+ pInfoBuffer = nullptr;
+ break;
+ }
+ }
+ else
+ {
+ free(pInfoBuffer);
+ pInfoBuffer = nullptr;
+ break;
+ }
+ }
+
+ if (pSecImpl->m_hToken == nullptr)
+ CloseHandle(hAccessToken);
+
+ if (pInfoBuffer)
+ {
+ sal_Unicode UserName[128];
+ sal_Unicode DomainName[128];
+ sal_Unicode Name[257];
+ DWORD nUserName = SAL_N_ELEMENTS(UserName);
+ DWORD nDomainName = SAL_N_ELEMENTS(DomainName);
+ SID_NAME_USE sUse;
+
+ if (LookupAccountSidW(nullptr, reinterpret_cast<PTOKEN_USER>(pInfoBuffer)->User.Sid,
+ o3tl::toW(UserName), &nUserName,
+ o3tl::toW(DomainName), &nDomainName, &sUse))
+ {
+ if (bIncludeDomain)
+ {
+ wcscpy(o3tl::toW(Name), o3tl::toW(DomainName));
+ wcscat(o3tl::toW(Name), L"/");
+ wcscat(o3tl::toW(Name), o3tl::toW(UserName));
+ }
+ else
+ {
+ wcscpy(o3tl::toW(Name), o3tl::toW(UserName));
+ }
+
+ rtl_uString_newFromStr(strName, Name);
+ free(pInfoBuffer);
+ return true;
+ }
+ }
+ }
+ else
+ {
+ DWORD needed=0;
+ sal_Unicode *pNameW=nullptr;
+
+ WNetGetUserW(nullptr, nullptr, &needed);
+ pNameW = static_cast<sal_Unicode *>(malloc (needed*sizeof(sal_Unicode)));
+ assert(pNameW); // Don't handle OOM conditions
+
+ if (WNetGetUserW(nullptr, o3tl::toW(pNameW), &needed) == NO_ERROR)
+ {
+ rtl_uString_newFromStr( strName, pNameW);
+
+ if (pNameW)
+ free(pNameW);
+ return true;
+ }
+ else if (pSecImpl->m_User[0] != '\0')
+ {
+ rtl_uString_newFromStr(strName, o3tl::toU(pSecImpl->m_pNetResource->lpRemoteName));
+
+ if (pNameW)
+ free(pNameW);
+
+ return true;
+ }
+
+ if (pNameW)
+ free(pNameW);
+ }
+
+ return false;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/signal.cxx b/sal/osl/w32/signal.cxx
new file mode 100644
index 000000000..dcb05beae
--- /dev/null
+++ b/sal/osl/w32/signal.cxx
@@ -0,0 +1,133 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <stdlib.h>
+
+#include <config_features.h>
+
+#include <signalshared.hxx>
+
+#include <systools/win32/uwinapi.h>
+#include <errorrep.h>
+#include <werapi.h>
+
+namespace
+{
+long WINAPI signalHandlerFunction(LPEXCEPTION_POINTERS lpEP);
+
+LPTOP_LEVEL_EXCEPTION_FILTER pPreviousHandler = nullptr;
+}
+
+bool onInitSignal()
+{
+ pPreviousHandler = SetUnhandledExceptionFilter(signalHandlerFunction);
+
+ WerAddExcludedApplication(L"SOFFICE.EXE", FALSE);
+
+ return true;
+}
+
+bool onDeInitSignal()
+{
+ SetUnhandledExceptionFilter(pPreviousHandler);
+
+ return false;
+}
+
+namespace
+{
+/* magic Microsoft C++ compiler exception constant */
+#define EXCEPTION_MSC_CPP_EXCEPTION 0xe06d7363
+
+long WINAPI signalHandlerFunction(LPEXCEPTION_POINTERS lpEP)
+{
+#if HAVE_FEATURE_BREAKPAD
+ // we should make sure to call the breakpad handler as
+ // first step when we hit a problem
+ if (pPreviousHandler)
+ pPreviousHandler(lpEP);
+#endif
+
+ static bool bNested = false;
+
+ oslSignalInfo info;
+
+ info.UserSignal = lpEP->ExceptionRecord->ExceptionCode;
+ info.UserData = nullptr;
+
+ switch (lpEP->ExceptionRecord->ExceptionCode)
+ {
+ /* Transform unhandled exceptions into access violations.
+ Microsoft C++ compiler (add more for other compilers if necessary).
+ */
+ case EXCEPTION_MSC_CPP_EXCEPTION:
+ case EXCEPTION_ACCESS_VIOLATION:
+ info.Signal = osl_Signal_AccessViolation;
+ break;
+
+ case EXCEPTION_INT_DIVIDE_BY_ZERO:
+ info.Signal = osl_Signal_IntegerDivideByZero;
+ break;
+
+ case EXCEPTION_FLT_DIVIDE_BY_ZERO:
+ info.Signal = osl_Signal_FloatDivideByZero;
+ break;
+
+ case EXCEPTION_BREAKPOINT:
+ info.Signal = osl_Signal_DebugBreak;
+ break;
+
+ default:
+ info.Signal = osl_Signal_System;
+ break;
+ }
+
+ oslSignalAction action;
+
+ if (!bNested)
+ {
+ bNested = true;
+ action = callSignalHandler(&info);
+ }
+ else
+ action = osl_Signal_ActKillApp;
+
+ switch (action)
+ {
+ case osl_Signal_ActCallNextHdl:
+ return EXCEPTION_CONTINUE_SEARCH;
+
+ case osl_Signal_ActAbortApp:
+ return EXCEPTION_EXECUTE_HANDLER;
+
+ case osl_Signal_ActKillApp:
+ SetErrorMode(SEM_NOGPFAULTERRORBOX);
+ exit(255);
+ break;
+ default:
+ break;
+ }
+
+ return EXCEPTION_CONTINUE_EXECUTION;
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/socket.cxx b/sal/osl/w32/socket.cxx
new file mode 100644
index 000000000..2548be0d5
--- /dev/null
+++ b/sal/osl/w32/socket.cxx
@@ -0,0 +1,1611 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <utility>
+
+#include "system.h"
+
+#include <osl/socket.h>
+#include <osl/thread.h>
+#include <osl/diagnose.h>
+#include <rtl/alloc.h>
+#include <rtl/byteseq.h>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+#include <o3tl/safeint.hxx>
+#include <comphelper/windowserrorstring.hxx>
+
+#include "sockimpl.hxx"
+
+/*
+ oslSocketAddr is a pointer to a Berkeley struct sockaddr.
+ I refrained from using sockaddr_in because of possible further
+ extensions of this socket-interface (IP-NG?).
+ The intention was to hide all Berkeley data-structures from
+ direct access past the osl-interface.
+
+ The current implementation is internet (IP) centered. All
+ the constructor-functions (osl_create...) take parameters
+ that will probably make sense only in the IP-environment
+ (e.g. because of using the dotted-Addr-format).
+
+ If the interface will be extended to host other protocol-
+ families, I expect no externally visible changes in the
+ existing functions. You'll probably need only new
+ constructor-functions who take the different Addr
+ formats into consideration (maybe a long dotted Addr
+ or whatever).
+*/
+
+/*
+ _Note_ that I rely on the fact that oslSocketAddr and struct sockaddr
+ are the same! I don't like it very much but see no other easy way to
+ conceal the struct sockaddr from the eyes of the user.
+*/
+
+#define OSL_INVALID_SOCKET INVALID_SOCKET /* WIN32 */
+#define OSL_SOCKET_ERROR SOCKET_ERROR /* WIN32 */
+
+static DWORD FamilyMap[]= {
+ AF_INET, /* osl_Socket_FamilyInet */
+ AF_IPX, /* osl_Socket_FamilyIpx */
+ 0 /* osl_Socket_FamilyInvalid */
+};
+
+static oslAddrFamily osl_AddrFamilyFromNative(DWORD nativeType)
+{
+ oslAddrFamily i= oslAddrFamily(0);
+ while(i != osl_Socket_FamilyInvalid)
+ {
+ if(FamilyMap[i] == nativeType)
+ return i;
+ i = static_cast<oslAddrFamily>( static_cast<int>(i) + 1);
+ }
+ return i;
+}
+
+#define FAMILY_FROM_NATIVE(y) osl_AddrFamilyFromNative(y)
+#define FAMILY_TO_NATIVE(x) static_cast<short>(FamilyMap[x])
+
+static DWORD ProtocolMap[]= {
+ 0, /* osl_Socket_FamilyInet */
+ NSPROTO_IPX, /* osl_Socket_FamilyIpx */
+ NSPROTO_SPX, /* osl_Socket_ProtocolSpx */
+ NSPROTO_SPXII, /* osl_Socket_ProtocolSpx_ii */
+ 0 /* osl_Socket_ProtocolInvalid */
+};
+
+#define PROTOCOL_TO_NATIVE(x) ProtocolMap[x]
+
+static DWORD TypeMap[]= {
+ SOCK_STREAM, /* osl_Socket_TypeStream */
+ SOCK_DGRAM, /* osl_Socket_TypeDgram */
+ SOCK_RAW, /* osl_Socket_TypeRaw */
+ SOCK_RDM, /* osl_Socket_TypeRdm */
+ SOCK_SEQPACKET, /* osl_Socket_TypeSeqPacket */
+ 0 /* osl_Socket_TypeInvalid */
+};
+
+static oslSocketType osl_SocketTypeFromNative(DWORD nativeType)
+{
+ oslSocketType i= oslSocketType(0);
+ while(i != osl_Socket_TypeInvalid)
+ {
+ if(TypeMap[i] == nativeType)
+ return i;
+ i = static_cast<oslSocketType>(static_cast<int>(i)+1);
+ }
+ return i;
+}
+
+#define TYPE_TO_NATIVE(x) TypeMap[x]
+#define TYPE_FROM_NATIVE(y) osl_SocketTypeFromNative(y)
+
+static DWORD OptionMap[]= {
+ SO_DEBUG, /* osl_Socket_OptionDebug */
+ SO_ACCEPTCONN, /* osl_Socket_OptionAcceptConn */
+ SO_REUSEADDR, /* osl_Socket_OptionReuseAddr */
+ SO_KEEPALIVE, /* osl_Socket_OptionKeepAlive */
+ SO_DONTROUTE, /* osl_Socket_OptionDontRoute */
+ SO_BROADCAST, /* osl_Socket_OptionBroadcast */
+ SO_USELOOPBACK, /* osl_Socket_OptionUseLoopback */
+ SO_LINGER, /* osl_Socket_OptionLinger */
+ SO_OOBINLINE, /* osl_Socket_OptionOOBinLine */
+ SO_SNDBUF, /* osl_Socket_OptionSndBuf */
+ SO_RCVBUF, /* osl_Socket_OptionRcvBuf */
+ SO_SNDLOWAT, /* osl_Socket_OptionSndLowat */
+ SO_RCVLOWAT, /* osl_Socket_OptionRcvLowat */
+ SO_SNDTIMEO, /* osl_Socket_OptionSndTimeo */
+ SO_RCVTIMEO, /* osl_Socket_OptionRcvTimeo */
+ SO_ERROR, /* osl_Socket_OptionError */
+ SO_TYPE, /* osl_Socket_OptionType */
+ TCP_NODELAY, /* osl_Socket_OptionTcpNoDelay */
+ 0 /* osl_Socket_OptionInvalid */
+};
+
+#define OPTION_TO_NATIVE(x) OptionMap[x]
+
+static DWORD OptionLevelMap[]= {
+ SOL_SOCKET, /* osl_Socket_LevelSocket */
+ IPPROTO_TCP, /* osl_Socket_LevelTcp */
+ 0 /* osl_invalid_SocketLevel */
+};
+
+#define OPTION_LEVEL_TO_NATIVE(x) OptionLevelMap[x]
+
+static DWORD SocketMsgFlagMap[]= {
+ 0, /* osl_Socket_MsgNormal */
+ MSG_OOB, /* osl_Socket_MsgOOB */
+ MSG_PEEK, /* osl_Socket_MsgPeek */
+ MSG_DONTROUTE, /* osl_Socket_MsgDontRoute */
+ MSG_MAXIOVLEN /* osl_Socket_MsgMaxIOVLen */
+};
+
+#define MSG_FLAG_TO_NATIVE(x) SocketMsgFlagMap[x]
+
+static DWORD SocketDirection[]= {
+ SD_RECEIVE, /* osl_Socket_DirRead */
+ SD_SEND, /* osl_Socket_DirWrite */
+ SD_BOTH /* osl_Socket_DirReadwrite */
+};
+
+#define DIRECTION_TO_NATIVE(x) SocketDirection[x]
+
+static int SocketError[]= {
+ 0, /* no error */
+ WSAENOTSOCK, /* Socket operation on non-socket */
+ WSAEDESTADDRREQ, /* Destination address required */
+ WSAEMSGSIZE, /* Message too long */
+ WSAEPROTOTYPE, /* Protocol wrong type for socket */
+ WSAENOPROTOOPT, /* Protocol not available */
+ WSAEPROTONOSUPPORT, /* Protocol not supported */
+ WSAESOCKTNOSUPPORT, /* Socket type not supported */
+ WSAEOPNOTSUPP, /* Operation not supported on socket */
+ WSAEPFNOSUPPORT, /* Protocol family not supported */
+ WSAEAFNOSUPPORT, /* Address family not supported by protocol family */
+ WSAEADDRINUSE, /* Address already in use */
+ WSAEADDRNOTAVAIL, /* Can't assign requested address */
+ WSAENETDOWN, /* Network is down */
+ WSAENETUNREACH, /* Network is unreachable */
+ WSAENETRESET, /* Network dropped connection because of reset */
+ WSAECONNABORTED, /* Software caused connection abort */
+ WSAECONNRESET, /* Connection reset by peer */
+ WSAENOBUFS, /* No buffer space available */
+ WSAEISCONN, /* Socket is already connected */
+ WSAENOTCONN, /* Socket is not connected */
+ WSAESHUTDOWN, /* Can't send after socket shutdown */
+ WSAETOOMANYREFS, /* Too many references: can't splice */
+ WSAETIMEDOUT, /* Connection timed out */
+ WSAECONNREFUSED, /* Connection refused */
+ WSAEHOSTDOWN, /* Host is down */
+ WSAEHOSTUNREACH, /* No route to host */
+ WSAEWOULDBLOCK, /* call would block on non-blocking socket */
+ WSAEALREADY, /* operation already in progress */
+ WSAEINPROGRESS /* operation now in progress */
+};
+
+static oslSocketError osl_SocketErrorFromNative(int nativeType)
+{
+ oslSocketError i= oslSocketError(0);
+
+ while(i != osl_Socket_E_InvalidError)
+ {
+ if(SocketError[i] == nativeType)
+ return i;
+
+ i = static_cast<oslSocketError>( static_cast<int>(i) + 1);
+ }
+ return i;
+}
+
+#define ERROR_FROM_NATIVE(y) osl_SocketErrorFromNative(y)
+
+#if OSL_DEBUG_LEVEL > 0
+static sal_uInt32 g_nSocketAddr = 0;
+
+namespace {
+
+struct LeakWarning
+{
+ ~LeakWarning()
+ {
+ SAL_WARN_IF( g_nSocketAddr, "sal.osl", "sal_socket: " << g_nSocketAddr << " socket address instances leak" );
+ }
+};
+
+}
+
+static LeakWarning socketWarning;
+#endif
+
+static oslSocket createSocketImpl(SOCKET Socket)
+{
+ oslSocket pSockImpl = static_cast<oslSocket>(rtl_allocateZeroMemory( sizeof(struct oslSocketImpl)));
+ pSockImpl->m_Socket = Socket;
+ pSockImpl->m_nRefCount = 1;
+ return pSockImpl;
+}
+
+static void destroySocketImpl(oslSocketImpl *pImpl)
+{
+ if (pImpl)
+ {
+ free (pImpl);
+ }
+}
+
+static oslSocketAddr createSocketAddr( )
+{
+ oslSocketAddr pAddr = static_cast<oslSocketAddr>(rtl_allocateZeroMemory( sizeof( struct oslSocketAddrImpl )));
+ pAddr->m_nRefCount = 1;
+#if OSL_DEBUG_LEVEL > 0
+ g_nSocketAddr ++;
+#endif
+ return pAddr;
+}
+
+static oslSocketAddr createSocketAddrWithFamily(
+ oslAddrFamily family, sal_Int32 port, sal_uInt32 nAddr )
+{
+ OSL_ASSERT( family == osl_Socket_FamilyInet );
+
+ oslSocketAddr pAddr = createSocketAddr();
+ switch( family )
+ {
+ case osl_Socket_FamilyInet:
+ {
+ struct sockaddr_in* pInetAddr= reinterpret_cast<struct sockaddr_in*>(&pAddr->m_sockaddr);
+
+ pInetAddr->sin_family = FAMILY_TO_NATIVE(osl_Socket_FamilyInet);
+ pInetAddr->sin_addr.s_addr = nAddr;
+ pInetAddr->sin_port = static_cast<sal_uInt16>(port&0xffff);
+ break;
+ }
+ default:
+ pAddr->m_sockaddr.sa_family = FAMILY_TO_NATIVE(family);
+ }
+ return pAddr;
+}
+
+static oslSocketAddr createSocketAddFromSystem( struct sockaddr *pSystemSockAddr )
+{
+ oslSocketAddr pAddr = createSocketAddr();
+ memcpy( &(pAddr->m_sockaddr), pSystemSockAddr, sizeof( sockaddr ) );
+ return pAddr;
+}
+
+static void destroySocketAddr( oslSocketAddr addr )
+{
+#if OSL_DEBUG_LEVEL > 0
+ g_nSocketAddr --;
+#endif
+ free( addr );
+}
+
+oslSocketAddr SAL_CALL osl_createEmptySocketAddr(oslAddrFamily Family)
+{
+ oslSocketAddr pAddr = nullptr;
+
+ /* is it an internet-Addr? */
+ if (Family == osl_Socket_FamilyInet)
+ pAddr = createSocketAddrWithFamily(Family, 0 , htonl(INADDR_ANY) );
+ else
+ pAddr = createSocketAddrWithFamily( Family , 0 , 0 );
+
+ return pAddr;
+}
+
+/** @deprecated, to be removed */
+oslSocketAddr SAL_CALL osl_copySocketAddr(oslSocketAddr Addr)
+{
+ oslSocketAddr pCopy = nullptr;
+ if (Addr)
+ {
+ pCopy = createSocketAddr();
+
+ if (pCopy)
+ memcpy(&(pCopy->m_sockaddr),&(Addr->m_sockaddr), sizeof(struct sockaddr));
+ }
+ return pCopy;
+}
+
+sal_Bool SAL_CALL osl_isEqualSocketAddr(oslSocketAddr Addr1, oslSocketAddr Addr2)
+{
+ OSL_ASSERT(Addr1);
+ OSL_ASSERT(Addr2);
+ struct sockaddr* pAddr1= &(Addr1->m_sockaddr);
+ struct sockaddr* pAddr2= &(Addr2->m_sockaddr);
+
+ OSL_ASSERT(pAddr1);
+ OSL_ASSERT(pAddr2);
+
+ if (pAddr1->sa_family == pAddr2->sa_family)
+ {
+ switch (pAddr1->sa_family)
+ {
+ case AF_INET:
+ {
+ struct sockaddr_in* pInetAddr1= reinterpret_cast<struct sockaddr_in*>(pAddr1);
+ struct sockaddr_in* pInetAddr2= reinterpret_cast<struct sockaddr_in*>(pAddr2);
+
+ if ((pInetAddr1->sin_family == pInetAddr2->sin_family) &&
+ (pInetAddr1->sin_addr.s_addr == pInetAddr2->sin_addr.s_addr) &&
+ (pInetAddr1->sin_port == pInetAddr2->sin_port))
+ return true;
+ [[fallthrough]];
+ }
+
+ default:
+ {
+ return (memcmp(pAddr1, pAddr2, sizeof(struct sockaddr)) == 0);
+ }
+ }
+ }
+
+ return false;
+}
+
+oslSocketAddr SAL_CALL osl_createInetBroadcastAddr (
+ rtl_uString *strDottedAddr,
+ sal_Int32 Port)
+{
+ sal_uInt32 nAddr = OSL_INADDR_NONE;
+
+ if (strDottedAddr && strDottedAddr->length)
+ {
+ IN_ADDR addr;
+ INT ret = InetPtonW(AF_INET, o3tl::toW(strDottedAddr->buffer), & addr);
+ if (1 == ret)
+ {
+ nAddr = addr.S_un.S_addr;
+ }
+ }
+
+ if (nAddr != OSL_INADDR_NONE)
+ {
+ /* Limited broadcast */
+ nAddr = ntohl(nAddr);
+ if (IN_CLASSA(nAddr))
+ {
+ nAddr &= IN_CLASSA_NET;
+ nAddr |= IN_CLASSA_HOST;
+ }
+ else if (IN_CLASSB(nAddr))
+ {
+ nAddr &= IN_CLASSB_NET;
+ nAddr |= IN_CLASSB_HOST;
+ }
+ else if (IN_CLASSC(nAddr))
+ {
+ nAddr &= IN_CLASSC_NET;
+ nAddr |= IN_CLASSC_HOST;
+ }
+ else
+ {
+ /* No broadcast in class D */
+ return nullptr;
+ }
+ nAddr = htonl(nAddr);
+ }
+
+ oslSocketAddr pAddr =
+ createSocketAddrWithFamily( osl_Socket_FamilyInet, htons( static_cast<sal_uInt16>(Port)), nAddr );
+ return pAddr;
+}
+
+oslSocketAddr SAL_CALL osl_createInetSocketAddr (
+ rtl_uString *strDottedAddr,
+ sal_Int32 Port)
+{
+ sal_uInt32 Addr;
+
+ IN_ADDR addr;
+ INT ret = InetPtonW(AF_INET, o3tl::toW(strDottedAddr->buffer), & addr);
+ Addr = ret == 1 ? addr.S_un.S_addr : OSL_INADDR_NONE;
+
+ oslSocketAddr pAddr = nullptr;
+ if(Addr != OSL_INADDR_NONE)
+ {
+ pAddr = createSocketAddrWithFamily( osl_Socket_FamilyInet, htons( static_cast<sal_uInt16>(Port)), Addr );
+ }
+ return pAddr;
+}
+
+oslSocketResult SAL_CALL osl_setAddrOfSocketAddr( oslSocketAddr pAddr, sal_Sequence *pByteSeq )
+{
+ OSL_ASSERT( pAddr );
+ OSL_ASSERT( pByteSeq );
+
+ oslSocketResult res = osl_Socket_Error;
+ if( pAddr && pByteSeq )
+ {
+ OSL_ASSERT( pAddr->m_sockaddr.sa_family == FAMILY_TO_NATIVE( osl_Socket_FamilyInet ) );
+ OSL_ASSERT( pByteSeq->nElements == 4 );
+ struct sockaddr_in * pSystemInetAddr = reinterpret_cast<struct sockaddr_in *>(&pAddr->m_sockaddr);
+ memcpy( &(pSystemInetAddr->sin_addr) , pByteSeq->elements , 4 );
+ res = osl_Socket_Ok;
+ }
+ return res;
+}
+
+/** Returns the addr field in the struct sockaddr. ppByteSeq is in network byteorder. *ppByteSeq may
+ either be 0 or contain a constructed sal_Sequence.
+ */
+oslSocketResult SAL_CALL osl_getAddrOfSocketAddr( oslSocketAddr pAddr, sal_Sequence **ppByteSeq )
+{
+ OSL_ASSERT( pAddr );
+ OSL_ASSERT( ppByteSeq );
+
+ oslSocketResult res = osl_Socket_Error;
+ if( pAddr && ppByteSeq )
+ {
+ struct sockaddr_in * pSystemInetAddr = reinterpret_cast<struct sockaddr_in *>(&pAddr->m_sockaddr);
+ rtl_byte_sequence_constructFromArray( ppByteSeq , reinterpret_cast<sal_Int8 *>(&pSystemInetAddr->sin_addr),4);
+ res = osl_Socket_Ok;
+ }
+ return res;
+}
+
+struct oslHostAddrImpl {
+ rtl_uString *pHostName;
+ oslSocketAddr pSockAddr;
+} ;
+
+oslHostAddr SAL_CALL osl_createHostAddr (
+ rtl_uString *strHostname,
+ const oslSocketAddr pSocketAddr)
+{
+ oslHostAddr pAddr;
+ rtl_uString *cn= nullptr;
+
+ if ((strHostname == nullptr) || (strHostname->length == 0) || (pSocketAddr == nullptr))
+ return nullptr;
+
+ rtl_uString_newFromString( &cn, strHostname);
+
+ pAddr= static_cast<oslHostAddr>(malloc (sizeof (struct oslHostAddrImpl)));
+
+ if (pAddr == nullptr)
+ {
+ rtl_uString_release(cn);
+ return nullptr;
+ }
+
+ pAddr->pHostName= cn;
+ pAddr->pSockAddr= osl_copySocketAddr( pSocketAddr );
+
+ return pAddr;
+}
+
+oslHostAddr SAL_CALL osl_createHostAddrByName(rtl_uString *strHostname)
+{
+ if ((strHostname == nullptr) || (strHostname->length == 0))
+ return nullptr;
+
+ PADDRINFOW pAddrInfo = nullptr;
+ int ret = GetAddrInfoW(
+ o3tl::toW(strHostname->buffer), nullptr, nullptr, & pAddrInfo);
+ if (0 != ret)
+ {
+ SAL_INFO("sal.osl", "GetAddrInfoW failed: " << WSAGetLastError());
+ return nullptr;
+ }
+
+ oslHostAddr pRet = nullptr;
+ for (PADDRINFOW pIter = pAddrInfo; pIter; pIter = pIter->ai_next)
+ {
+ if (AF_INET == pIter->ai_family)
+ {
+ pRet = static_cast<oslHostAddr>(
+ rtl_allocateZeroMemory(sizeof(struct oslHostAddrImpl)));
+ if (pIter->ai_canonname == nullptr) {
+ rtl_uString_new(&pRet->pHostName);
+ } else {
+ rtl_uString_newFromStr(&pRet->pHostName, o3tl::toU(pIter->ai_canonname));
+ }
+ pRet->pSockAddr = createSocketAddr();
+ memcpy(& pRet->pSockAddr->m_sockaddr,
+ pIter->ai_addr, pIter->ai_addrlen);
+ break; // ignore other results
+ }
+ }
+ FreeAddrInfoW(pAddrInfo);
+ return pRet;
+}
+
+oslHostAddr SAL_CALL osl_createHostAddrByAddr(const oslSocketAddr pAddr)
+{
+ if (pAddr == nullptr)
+ return nullptr;
+
+ if (pAddr->m_sockaddr.sa_family != FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ return nullptr;
+
+ const struct sockaddr_in *sin= reinterpret_cast<const struct sockaddr_in *>(&pAddr->m_sockaddr);
+
+ if (sin->sin_addr.s_addr == htonl(INADDR_ANY))
+ return nullptr;
+
+ WCHAR buf[NI_MAXHOST];
+ int ret = GetNameInfoW(
+ & pAddr->m_sockaddr, sizeof(struct sockaddr),
+ buf, NI_MAXHOST,
+ nullptr, 0, 0);
+ if (0 != ret)
+ {
+ SAL_INFO("sal.osl", "GetNameInfoW failed: " << WSAGetLastError());
+ return nullptr;
+ }
+
+ oslHostAddr pRet = static_cast<oslHostAddr>(
+ rtl_allocateZeroMemory(sizeof(struct oslHostAddrImpl)));
+ rtl_uString_newFromStr(&pRet->pHostName, o3tl::toU(buf));
+ pRet->pSockAddr = createSocketAddr();
+ memcpy(& pRet->pSockAddr->m_sockaddr,
+ & pAddr->m_sockaddr, sizeof(struct sockaddr));
+ return pRet;
+}
+
+oslHostAddr SAL_CALL osl_copyHostAddr(const oslHostAddr Addr)
+{
+ oslHostAddr pAddr = Addr;
+
+ if (pAddr)
+ return osl_createHostAddr (pAddr->pHostName, pAddr->pSockAddr);
+ else
+ return nullptr;
+}
+
+void SAL_CALL osl_getHostnameOfHostAddr(
+ const oslHostAddr pAddr, rtl_uString **strHostname)
+{
+ if (pAddr)
+ rtl_uString_assign (strHostname, pAddr->pHostName);
+ else
+ rtl_uString_new (strHostname);
+}
+
+oslSocketAddr SAL_CALL osl_getSocketAddrOfHostAddr(const oslHostAddr pAddr)
+{
+ if (pAddr)
+ return pAddr->pSockAddr;
+ else
+ return nullptr;
+}
+
+void SAL_CALL osl_destroyHostAddr(oslHostAddr pAddr)
+{
+ if (pAddr)
+ {
+ if (pAddr->pHostName)
+ rtl_uString_release (pAddr->pHostName);
+ if (pAddr->pSockAddr)
+ osl_destroySocketAddr( pAddr->pSockAddr );
+
+ free (pAddr);
+ }
+}
+
+oslSocketResult SAL_CALL osl_getLocalHostname (rtl_uString **strLocalHostname)
+{
+ static auto const init = []() -> std::pair<oslSocketResult, OUString> {
+ sal_Unicode LocalHostname[256] = {0};
+
+ char Host[256]= "";
+ if (gethostname(Host, sizeof(Host)) == 0)
+ {
+ OUString u;
+ if (rtl_convertStringToUString(
+ &u.pData, Host, strlen(Host), osl_getThreadTextEncoding(),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))
+ && o3tl::make_unsigned(u.getLength()) < SAL_N_ELEMENTS(LocalHostname))
+ {
+ memcpy(LocalHostname, u.getStr(), (u.getLength() + 1) * sizeof (sal_Unicode));
+ }
+ }
+
+ if (rtl_ustr_getLength(LocalHostname) > 0)
+ {
+ return {osl_Socket_Ok, OUString(LocalHostname)};
+ }
+
+ return {osl_Socket_Error, OUString()};
+ }();
+
+ rtl_uString_assign (strLocalHostname, init.second.pData);
+
+ return init.first;
+}
+
+oslSocketAddr SAL_CALL osl_resolveHostname(rtl_uString* strHostname)
+{
+ oslHostAddr pAddr = osl_createHostAddrByName (strHostname);
+ if (pAddr)
+ {
+ oslSocketAddr SockAddr = osl_copySocketAddr( pAddr->pSockAddr );
+ osl_destroyHostAddr(pAddr);
+ return SockAddr;
+ }
+ return nullptr;
+}
+
+sal_Int32 SAL_CALL osl_getServicePort (
+ rtl_uString* strServicename,
+ rtl_uString* strProtocol)
+{
+ struct servent* ps;
+
+ rtl_String *str_Servicename=nullptr;
+ rtl_String *str_Protocol=nullptr;
+
+ rtl_uString2String(
+ &str_Servicename,
+ rtl_uString_getStr(strServicename),
+ rtl_uString_getLength(strServicename),
+ RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS);
+ rtl_uString2String(
+ &str_Protocol,
+ rtl_uString_getStr(strProtocol),
+ rtl_uString_getLength(strProtocol),
+ RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ ps= getservbyname(
+ rtl_string_getStr(str_Servicename),
+ rtl_string_getStr(str_Protocol));
+
+ rtl_string_release( str_Servicename );
+ rtl_string_release( str_Protocol );
+
+ if (ps != nullptr)
+ return ntohs(ps->s_port);
+
+ return OSL_INVALID_PORT;
+}
+
+void SAL_CALL osl_destroySocketAddr(oslSocketAddr pAddr)
+{
+ destroySocketAddr( pAddr );
+}
+
+oslAddrFamily SAL_CALL osl_getFamilyOfSocketAddr(oslSocketAddr pAddr)
+{
+ if (pAddr)
+ return FAMILY_FROM_NATIVE(pAddr->m_sockaddr.sa_family);
+ else
+ return osl_Socket_FamilyInvalid;
+}
+
+sal_Int32 SAL_CALL osl_getInetPortOfSocketAddr(oslSocketAddr pAddr)
+{
+ if( pAddr )
+ {
+ struct sockaddr_in* pSystemInetAddr= reinterpret_cast<struct sockaddr_in*>(&pAddr->m_sockaddr);
+
+ if (pSystemInetAddr->sin_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ return ntohs(pSystemInetAddr->sin_port);
+ }
+ return OSL_INVALID_PORT;
+}
+
+sal_Bool SAL_CALL osl_setInetPortOfSocketAddr (
+ oslSocketAddr pAddr,
+ sal_Int32 Port)
+{
+ if (pAddr == nullptr)
+ return false;
+
+ struct sockaddr_in* pSystemInetAddr= reinterpret_cast<struct sockaddr_in*>(&pAddr->m_sockaddr);
+
+ if (pSystemInetAddr->sin_family != FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ return false;
+
+ pSystemInetAddr->sin_port= htons(static_cast<short>(Port));
+ return true;
+}
+
+oslSocketResult SAL_CALL osl_getHostnameOfSocketAddr (
+ oslSocketAddr Addr,
+ rtl_uString **strHostName)
+{
+ oslHostAddr pAddr= osl_createHostAddrByAddr (Addr);
+
+ if (pAddr)
+ {
+ rtl_uString_newFromString(strHostName, pAddr->pHostName);
+
+ osl_destroyHostAddr(pAddr);
+
+ return osl_Socket_Ok;
+ }
+
+ return osl_Socket_Error;
+}
+
+oslSocketResult SAL_CALL osl_getDottedInetAddrOfSocketAddr (
+ oslSocketAddr pAddr,
+ rtl_uString **strDottedInetAddr)
+{
+ if (pAddr == nullptr)
+ return osl_Socket_Error;
+
+ struct sockaddr_in *pSystemInetAddr = reinterpret_cast<struct sockaddr_in*>(&pAddr->m_sockaddr);
+ if (pSystemInetAddr->sin_family != FAMILY_TO_NATIVE(osl_Socket_FamilyInet))
+ return osl_Socket_Error;
+
+ *strDottedInetAddr = nullptr;
+ WCHAR buf[16]; // 16 for IPV4, 46 for IPV6
+ PCWSTR ret = InetNtopW(
+ AF_INET, & pSystemInetAddr->sin_addr,
+ buf, SAL_N_ELEMENTS(buf));
+ if (nullptr == ret)
+ {
+ SAL_INFO("sal.osl", "InetNtopW failed: " << WSAGetLastError());
+ return osl_Socket_Error;
+ }
+ rtl_uString_newFromStr(strDottedInetAddr, o3tl::toU(ret));
+ OSL_ASSERT(*strDottedInetAddr != nullptr);
+
+ return osl_Socket_Ok;
+}
+
+oslSocket SAL_CALL osl_createSocket(
+ oslAddrFamily Family,
+ oslSocketType Type,
+ oslProtocol Protocol)
+{
+ /* alloc memory */
+ oslSocket pSocket = createSocketImpl(0);
+
+ if (pSocket == nullptr)
+ return nullptr;
+
+ /* create socket */
+ pSocket->m_Socket = socket(FAMILY_TO_NATIVE(Family),
+ TYPE_TO_NATIVE(Type),
+ PROTOCOL_TO_NATIVE(Protocol));
+
+ /* creation failed => free memory */
+ if(pSocket->m_Socket == OSL_INVALID_SOCKET)
+ {
+ int nErrno = WSAGetLastError();
+ SAL_WARN("sal.osl", "socket creation failed: (" << nErrno << "): " << WindowsErrorString(nErrno));
+
+ destroySocketImpl(pSocket);
+ pSocket = nullptr;
+ }
+ else
+ {
+ pSocket->m_Flags = 0;
+ }
+
+ return pSocket;
+}
+
+void SAL_CALL osl_acquireSocket(oslSocket pSocket)
+{
+ osl_atomic_increment(&(pSocket->m_nRefCount));
+}
+
+void SAL_CALL osl_releaseSocket(oslSocket pSocket)
+{
+ if (pSocket && osl_atomic_decrement(&(pSocket->m_nRefCount)) == 0)
+ {
+ osl_closeSocket(pSocket);
+ destroySocketImpl(pSocket);
+ }
+}
+
+void SAL_CALL osl_closeSocket(oslSocket pSocket)
+{
+ /* socket already invalid */
+ if (!pSocket)
+ return;
+
+ /* close */
+ closesocket(pSocket->m_Socket);
+
+ pSocket->m_Socket = OSL_INVALID_SOCKET;
+}
+
+/**
+ Note that I rely on the fact that oslSocketAddr and struct sockaddr
+ are the same! I don't like it very much but see no other easy way
+ to conceal the struct sockaddr from the eyes of the user.
+*/
+oslSocketAddr SAL_CALL osl_getLocalAddrOfSocket(oslSocket pSocket)
+{
+ struct sockaddr Addr;
+ int AddrLen;
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return nullptr;
+
+ AddrLen= sizeof(struct sockaddr);
+
+ if (getsockname(pSocket->m_Socket, &Addr, &AddrLen) == OSL_SOCKET_ERROR)
+ return nullptr;
+
+ oslSocketAddr pAddr = createSocketAddFromSystem( &Addr );
+ return pAddr;
+}
+
+oslSocketAddr SAL_CALL osl_getPeerAddrOfSocket(oslSocket pSocket)
+{
+ struct sockaddr Addr;
+ int AddrLen;
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return nullptr;
+
+ AddrLen= sizeof(struct sockaddr);
+
+ if (getpeername(pSocket->m_Socket, &Addr, &AddrLen) == OSL_SOCKET_ERROR)
+ return nullptr;
+
+ oslSocketAddr pAddr = createSocketAddFromSystem( &Addr );
+ return pAddr;
+}
+
+sal_Bool SAL_CALL osl_bindAddrToSocket ( oslSocket pSocket, oslSocketAddr pAddr)
+{
+ OSL_ASSERT( pAddr );
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ return (bind(pSocket->m_Socket,
+ &(pAddr->m_sockaddr),
+ sizeof(struct sockaddr)) != OSL_SOCKET_ERROR);
+}
+
+oslSocketResult SAL_CALL osl_connectSocketTo (
+ oslSocket pSocket,
+ oslSocketAddr pAddr,
+ const TimeValue* pTimeout)
+{
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return osl_Socket_Error;
+
+ if (pAddr == nullptr) /* EDESTADDRREQ */
+ return osl_Socket_Error;
+
+ if (pTimeout == nullptr)
+ {
+ if(connect(pSocket->m_Socket,
+ &(pAddr->m_sockaddr),
+ sizeof(struct sockaddr)) == OSL_SOCKET_ERROR)
+ return osl_Socket_Error;
+ else
+ return osl_Socket_Ok;
+ }
+ else
+ {
+ fd_set fds;
+ int error;
+ struct timeval tv;
+ unsigned long Param;
+ oslSocketResult Result= osl_Socket_Ok;
+
+ if (pSocket->m_Flags & OSL_SOCKET_FLAGS_NONBLOCKING)
+ {
+ if (connect(pSocket->m_Socket,
+ &(pAddr->m_sockaddr),
+ sizeof(struct sockaddr)) == OSL_SOCKET_ERROR)
+ {
+ switch (WSAGetLastError())
+ {
+ case WSAEWOULDBLOCK:
+ case WSAEINPROGRESS:
+ return osl_Socket_InProgress;
+
+ default:
+ return osl_Socket_Error;
+ }
+ }
+ else
+ return osl_Socket_Ok;
+ }
+
+ /* set socket temporarily to non-blocking */
+ Param= 1;
+ OSL_VERIFY(ioctlsocket(
+ pSocket->m_Socket, FIONBIO, &Param) != OSL_SOCKET_ERROR);
+
+ /* initiate connect */
+ if (connect(pSocket->m_Socket,
+ &(pAddr->m_sockaddr),
+ sizeof(struct sockaddr)) != OSL_SOCKET_ERROR)
+ {
+ /* immediate connection */
+
+ Param= 0;
+ ioctlsocket(pSocket->m_Socket, FIONBIO, &Param);
+
+ return osl_Socket_Ok;
+ }
+ else
+ {
+ error = WSAGetLastError();
+
+ /* really an error or just delayed? */
+ if (error != WSAEWOULDBLOCK && error != WSAEINPROGRESS)
+ {
+ Param= 0;
+ ioctlsocket(pSocket->m_Socket, FIONBIO, &Param);
+
+ return osl_Socket_Error;
+ }
+ }
+
+ /* prepare select set for socket */
+ FD_ZERO(&fds);
+ FD_SET(pSocket->m_Socket, &fds);
+
+ /* divide milliseconds into seconds and microseconds */
+ tv.tv_sec= pTimeout->Seconds;
+ tv.tv_usec= pTimeout->Nanosec / 1000L;
+
+ /* select */
+ error= select(pSocket->m_Socket+1,
+ nullptr,
+ &fds,
+ nullptr,
+ &tv);
+
+ if (error > 0) /* connected */
+ {
+ SAL_WARN_IF(
+ !FD_ISSET(pSocket->m_Socket, &fds),
+ "sal.osl",
+ "osl_connectSocketTo(): select returned but socket not set");
+
+ Result= osl_Socket_Ok;
+
+ }
+ else if(error < 0) /* error */
+ {
+ /* errno == EBADF: most probably interrupted by close() */
+ if(WSAGetLastError() == WSAEBADF)
+ {
+ /* do not access pSockImpl because it is about to be or */
+ /* already destroyed */
+ return osl_Socket_Interrupted;
+ }
+ else
+ Result= osl_Socket_Error;
+
+ }
+ else /* timeout */
+ Result= osl_Socket_TimedOut;
+
+ /* clean up */
+ Param= 0;
+ ioctlsocket(pSocket->m_Socket, FIONBIO, &Param);
+
+ return Result;
+ }
+}
+
+sal_Bool SAL_CALL osl_listenOnSocket (
+ oslSocket pSocket,
+ sal_Int32 MaxPendingConnections)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ return (listen(pSocket->m_Socket,
+ MaxPendingConnections == -1 ?
+ SOMAXCONN :
+ MaxPendingConnections) != OSL_SOCKET_ERROR);
+}
+
+oslSocket SAL_CALL osl_acceptConnectionOnSocket (
+ oslSocket pSocket,
+ oslSocketAddr* ppAddr)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return nullptr;
+
+ SOCKET Connection;
+ if(ppAddr)
+ {
+ if( *ppAddr )
+ {
+ osl_destroySocketAddr( *ppAddr );
+ *ppAddr = nullptr;
+ }
+ int AddrLen= sizeof(struct sockaddr);
+
+ /* user wants to know peer Addr */
+ struct sockaddr Addr;
+
+ Connection= accept(pSocket->m_Socket, &Addr, &AddrLen);
+ OSL_ASSERT(AddrLen == sizeof(struct sockaddr));
+
+ if(Connection != static_cast<SOCKET>(OSL_SOCKET_ERROR))
+ *ppAddr= createSocketAddFromSystem(&Addr);
+ else
+ *ppAddr = nullptr;
+ }
+ else
+ {
+ /* user is not interested in peer-addr */
+ Connection= accept(pSocket->m_Socket, nullptr, nullptr);
+ }
+
+ /* accept failed? */
+ if(Connection == static_cast<SOCKET>(OSL_SOCKET_ERROR))
+ return nullptr;
+
+ /* alloc memory */
+ oslSocket pConnectionSocket;
+ pConnectionSocket= createSocketImpl(Connection);
+
+ pConnectionSocket->m_Flags = 0;
+
+ return pConnectionSocket;
+}
+
+sal_Int32 SAL_CALL osl_receiveSocket (
+ oslSocket pSocket,
+ void* pBuffer,
+ sal_uInt32 BytesToRead,
+ oslSocketMsgFlag Flag)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return osl_Socket_Error;
+
+ return recv(pSocket->m_Socket,
+ static_cast<char*>(pBuffer),
+ BytesToRead,
+ MSG_FLAG_TO_NATIVE(Flag));
+}
+
+sal_Int32 SAL_CALL osl_receiveFromSocket (
+ oslSocket pSocket,
+ oslSocketAddr SenderAddr,
+ void* pBuffer,
+ sal_uInt32 BufferSize,
+ oslSocketMsgFlag Flag)
+{
+ struct sockaddr *pSystemSockAddr = nullptr;
+ int AddrLen = 0;
+ if( SenderAddr )
+ {
+ AddrLen = sizeof( struct sockaddr );
+ pSystemSockAddr = &(SenderAddr->m_sockaddr);
+ }
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return osl_Socket_Error;
+
+ return recvfrom(pSocket->m_Socket,
+ static_cast<char*>(pBuffer),
+ BufferSize,
+ MSG_FLAG_TO_NATIVE(Flag),
+ pSystemSockAddr,
+ &AddrLen);
+}
+
+sal_Int32 SAL_CALL osl_sendSocket (
+ oslSocket pSocket,
+ const void* pBuffer,
+ sal_uInt32 BytesToSend,
+ oslSocketMsgFlag Flag)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return osl_Socket_Error;
+
+ return send(pSocket->m_Socket,
+ static_cast<char const *>(pBuffer),
+ BytesToSend,
+ MSG_FLAG_TO_NATIVE(Flag));
+}
+
+sal_Int32 SAL_CALL osl_sendToSocket (
+ oslSocket pSocket,
+ oslSocketAddr ReceiverAddr,
+ const void* pBuffer,
+ sal_uInt32 BytesToSend,
+ oslSocketMsgFlag Flag)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return osl_Socket_Error;
+
+ /* ReceiverAddr might be 0 when used on a connected socket. */
+ /* Then sendto should behave like send. */
+
+ struct sockaddr *pSystemSockAddr = nullptr;
+ if( ReceiverAddr )
+ pSystemSockAddr = &(ReceiverAddr->m_sockaddr);
+
+ return sendto(pSocket->m_Socket,
+ static_cast<char const *>(pBuffer),
+ BytesToSend,
+ MSG_FLAG_TO_NATIVE(Flag),
+ pSystemSockAddr,
+ pSystemSockAddr == nullptr ? 0 : sizeof(struct sockaddr));
+}
+
+sal_Int32 SAL_CALL osl_readSocket( oslSocket pSocket, void *pBuffer, sal_Int32 n )
+{
+ sal_uInt8 * Ptr = static_cast<sal_uInt8 *>(pBuffer);
+
+ OSL_ASSERT( pSocket);
+
+ /* loop until all desired bytes were read or an error occurred */
+ sal_uInt32 BytesRead= 0;
+ sal_uInt32 BytesToRead= n;
+ while (BytesToRead > 0)
+ {
+ sal_Int32 RetVal;
+ RetVal= osl_receiveSocket(pSocket,
+ Ptr,
+ BytesToRead,
+ osl_Socket_MsgNormal);
+
+ /* error occurred? */
+ if(RetVal <= 0)
+ {
+ break;
+ }
+
+ BytesToRead -= RetVal;
+ BytesRead += RetVal;
+ Ptr += RetVal;
+ }
+
+ return BytesRead;
+}
+
+sal_Int32 SAL_CALL osl_writeSocket( oslSocket pSocket, const void *pBuffer, sal_Int32 n )
+{
+ OSL_ASSERT( pSocket );
+
+ /* loop until all desired bytes were send or an error occurred */
+ sal_uInt32 BytesSend= 0;
+ sal_uInt32 BytesToSend= n;
+ sal_uInt8 const *Ptr = static_cast<sal_uInt8 const *>(pBuffer);
+ while (BytesToSend > 0)
+ {
+ sal_Int32 RetVal;
+
+ RetVal= osl_sendSocket( pSocket,Ptr,BytesToSend,osl_Socket_MsgNormal);
+
+ /* error occurred? */
+ if(RetVal <= 0)
+ {
+ break;
+ }
+
+ BytesToSend -= RetVal;
+ BytesSend += RetVal;
+ Ptr += RetVal;
+
+ }
+ return BytesSend;
+}
+
+sal_Bool SAL_CALL osl_isReceiveReady (
+ oslSocket pSocket,
+ const TimeValue* pTimeout)
+{
+ fd_set fds;
+ struct timeval tv;
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ FD_ZERO(&fds);
+ FD_SET(pSocket->m_Socket, &fds);
+
+ if (pTimeout)
+ {
+ tv.tv_sec = pTimeout->Seconds;
+ tv.tv_usec = pTimeout->Nanosec / 1000L;
+ }
+
+ return (select(pSocket->m_Socket + 1, /* no of sockets to monitor */
+ &fds, /* check read operations */
+ nullptr, /* check write ops */
+ nullptr, /* ckeck for OOB */
+ pTimeout ? &tv : nullptr)==1); /* use timeout? */
+}
+
+/*****************************************************************************/
+/* osl_isSendReady */
+/*****************************************************************************/
+sal_Bool SAL_CALL osl_isSendReady (
+ oslSocket pSocket,
+ const TimeValue* pTimeout)
+{
+ fd_set fds;
+ struct timeval tv;
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ FD_ZERO(&fds);
+ FD_SET(pSocket->m_Socket, &fds);
+
+ if (pTimeout)
+ {
+ tv.tv_sec = pTimeout->Seconds;
+ tv.tv_usec = pTimeout->Nanosec / 1000L;
+ }
+
+ return (select(pSocket->m_Socket + 1, /* no of sockets to monitor */
+ nullptr, /* check read operations */
+ &fds, /* check write ops */
+ nullptr, /* ckeck for OOB */
+ pTimeout ? &tv : nullptr)==1); /* use timeout? */
+}
+
+sal_Bool SAL_CALL osl_isExceptionPending (
+ oslSocket pSocket,
+ const TimeValue* pTimeout)
+{
+ fd_set fds;
+ struct timeval tv;
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ FD_ZERO(&fds);
+ FD_SET(pSocket->m_Socket, &fds);
+
+ if (pTimeout)
+ {
+ tv.tv_sec = pTimeout->Seconds;
+ tv.tv_usec = pTimeout->Nanosec / 1000L;
+ }
+
+ return (select(pSocket->m_Socket + 1, /* no of sockets to monitor */
+ nullptr, /* check read operations */
+ nullptr, /* check write ops */
+ &fds, /* ckeck for OOB */
+ pTimeout ? &tv : nullptr)==1); /* use timeout? */
+}
+
+sal_Bool SAL_CALL osl_shutdownSocket (
+ oslSocket pSocket,
+ oslSocketDirection Direction)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ return (shutdown(pSocket->m_Socket, DIRECTION_TO_NATIVE(Direction))==0);
+}
+
+sal_Int32 SAL_CALL osl_getSocketOption (
+ oslSocket pSocket,
+ oslSocketOptionLevel Level,
+ oslSocketOption Option,
+ void* pBuffer,
+ sal_uInt32 BufferLen)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return osl_Socket_Error;
+
+ int len = BufferLen;
+ if (getsockopt(pSocket->m_Socket,
+ OPTION_LEVEL_TO_NATIVE(Level),
+ OPTION_TO_NATIVE(Option),
+ static_cast<char *>(pBuffer),
+ &len) == -1)
+ {
+ return -1;
+ }
+
+ return len;
+}
+
+sal_Bool SAL_CALL osl_setSocketOption (
+ oslSocket pSocket,
+ oslSocketOptionLevel Level,
+ oslSocketOption Option,
+ void* pBuffer,
+ sal_uInt32 BufferLen)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ return(setsockopt(pSocket->m_Socket,
+ OPTION_LEVEL_TO_NATIVE(Level),
+ OPTION_TO_NATIVE(Option),
+ static_cast<char*>(pBuffer),
+ BufferLen) == 0);
+}
+
+sal_Bool SAL_CALL osl_enableNonBlockingMode ( oslSocket pSocket, sal_Bool On)
+{
+ unsigned long Param= On ? 1 : 0;
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ pSocket->m_Flags = Param ?
+ (pSocket->m_Flags | OSL_SOCKET_FLAGS_NONBLOCKING) :
+ (pSocket->m_Flags & ~OSL_SOCKET_FLAGS_NONBLOCKING) ;
+
+ return (
+ ioctlsocket(pSocket->m_Socket, FIONBIO, &Param) != OSL_SOCKET_ERROR);
+}
+
+sal_Bool SAL_CALL osl_isNonBlockingMode(oslSocket pSocket)
+{
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return false;
+
+ return (pSocket->m_Flags & OSL_SOCKET_FLAGS_NONBLOCKING) != 0;
+}
+
+oslSocketType SAL_CALL osl_getSocketType(oslSocket pSocket)
+{
+ int Type=0;
+ int TypeSize= sizeof(Type);
+
+ if (pSocket == nullptr) /* ENOTSOCK */
+ return osl_Socket_TypeInvalid;
+
+ if(getsockopt(pSocket->m_Socket,
+ OPTION_LEVEL_TO_NATIVE(osl_Socket_LevelSocket),
+ OPTION_TO_NATIVE(osl_Socket_OptionType),
+ reinterpret_cast<char *>(&Type),
+ &TypeSize) == -1)
+ {
+ /* error */
+ return osl_Socket_TypeInvalid;
+ }
+
+ return TYPE_FROM_NATIVE(Type);
+}
+
+void SAL_CALL osl_getLastSocketErrorDescription (
+ oslSocket /*Socket*/,
+ rtl_uString **strError)
+{
+ int error;
+
+ switch(error = WSAGetLastError())
+ {
+ case WSAENOTSOCK:
+ rtl_uString_newFromAscii (strError, "WSAENOTSOCK, Socket operation on non-socket. A socket created in one process is used by another process.");
+ break;
+
+ case WSAEDESTADDRREQ:
+ rtl_uString_newFromAscii (strError, "WSAEDESTADDRREQ, Destination Addr required");
+ break;
+
+ case WSAEMSGSIZE:
+ rtl_uString_newFromAscii (strError, "WSAEMSGSIZE, Message too long");
+ break;
+
+ case WSAEPROTOTYPE:
+ rtl_uString_newFromAscii (strError, "WSAEPROTOTYPE, Protocol wrong type for socket");
+ break;
+
+ case WSAENOPROTOOPT:
+ rtl_uString_newFromAscii (strError, "WSAENOPROTOOPT, Protocol not available");
+ break;
+
+ case WSAEPROTONOSUPPORT:
+ rtl_uString_newFromAscii (strError, "WSAEPROTONOSUPPORT, Protocol not supported");
+ break;
+
+ case WSAESOCKTNOSUPPORT:
+ rtl_uString_newFromAscii (strError, "WSAESOCKTNOSUPPORT, Socket type not supported");
+ break;
+
+ case WSAEOPNOTSUPP:
+ rtl_uString_newFromAscii (strError, "WSAEOPNOTSUPP, Operation not supported on socket");
+ break;
+
+ case WSAEPFNOSUPPORT:
+ rtl_uString_newFromAscii (strError, "WSAEPFNOSUPPORT, Protocol family not supported");
+ break;
+
+ case WSAEAFNOSUPPORT:
+ rtl_uString_newFromAscii (strError, "WSEAFNOSUPPORT, Addr family not supported by protocol family");
+ break;
+
+ case WSAEADDRINUSE:
+ rtl_uString_newFromAscii (strError, "WSAEADDRINUSE, Triggered by bind() because a process went down without closing a socket.");
+ break;
+
+ case WSAEADDRNOTAVAIL:
+ rtl_uString_newFromAscii (strError, "WSAEADDRNOTAVAIL, Can't assign requested Addr");
+ break;
+
+ case WSAENETDOWN:
+ rtl_uString_newFromAscii (strError, "WSAENETDOWN, Network is down");
+ break;
+
+ case WSAENETUNREACH:
+ rtl_uString_newFromAscii (strError, "WSAENETUNREACH, Network is unreachable");
+ break;
+
+ case WSAENETRESET:
+ rtl_uString_newFromAscii (strError, "WSAENETRESET, Network dropped connection or reset");
+ break;
+
+ case WSAECONNABORTED:
+ rtl_uString_newFromAscii (strError, "WSAECONNABORTED, Software caused connection abort");
+ break;
+
+ case WSAECONNRESET:
+ rtl_uString_newFromAscii (strError, "WSAECONNRESET, Connection reset by peer");
+ break;
+
+ case WSAENOBUFS:
+ rtl_uString_newFromAscii (strError, "WSAENOBUFS, No buffer space available.");
+ break;
+
+ case WSAEISCONN:
+ rtl_uString_newFromAscii (strError, "WSAEISCONN, Socket is already connected");
+ break;
+
+ case WSAENOTCONN:
+ rtl_uString_newFromAscii (strError, "WSAENOTCONN, Socket is not connected");
+ break;
+
+ case WSAESHUTDOWN:
+ rtl_uString_newFromAscii (strError, "WSAESHUTDOWN, Can't send after socket shutdown");
+ break;
+
+ case WSAETIMEDOUT:
+ rtl_uString_newFromAscii (strError, "WSAETIMEDOUT, Connection timed out");
+ break;
+
+ case WSAECONNREFUSED:
+ rtl_uString_newFromAscii (strError, "WSAECONNREFUSED, Connection refused");
+ break;
+
+ case WSAEHOSTDOWN:
+ rtl_uString_newFromAscii (strError, "WSAEHOSTDOWN, Networking subsystem not started");
+ break;
+
+ case WSAEHOSTUNREACH:
+ rtl_uString_newFromAscii (strError, "WSAEHOSTUNREACH, No route to host");
+ break;
+
+ case WSAEWOULDBLOCK:
+ rtl_uString_newFromAscii (strError, "WSAEWOULDBLOCK, Operation would block");
+ break;
+
+ case WSAEINPROGRESS:
+ rtl_uString_newFromAscii (strError, "WSAEINPROGRESS, Operation now in progress");
+ break;
+
+ case WSAEALREADY:
+ rtl_uString_newFromAscii (strError, "WSAEALREADY, Operation already in progress");
+ break;
+
+ case WSAEINTR:
+ rtl_uString_newFromAscii (strError, "WSAEALREADY, Operation was interrupted");
+ break;
+
+ case WSAEBADF:
+ rtl_uString_newFromAscii (strError, "WSAEBADF, Bad file number");
+ break;
+
+ case WSAEACCES:
+ rtl_uString_newFromAscii (strError, "WSAEACCES, Access is denied");
+ break;
+
+ case WSAEFAULT:
+ rtl_uString_newFromAscii (strError, "WSAEFAULT, Bad memory Addr");
+ break;
+
+ case WSAEINVAL:
+ rtl_uString_newFromAscii (strError, "WSAEINVAL, The socket has not been bound with bind() or is already connected");
+ break;
+
+ case WSAEMFILE:
+ rtl_uString_newFromAscii (strError, "WSAEMFILE, No more file descriptors are available");
+ break;
+
+ case WSAETOOMANYREFS:
+ rtl_uString_newFromAscii (strError, "WSAETOOMANYREFS, Undocumented WinSock error");
+ break;
+
+ case WSAENAMETOOLONG:
+ rtl_uString_newFromAscii (strError, "WSAENAMETOOLONG, Undocumented WinSock error");
+ break;
+
+ case WSAENOTEMPTY:
+ rtl_uString_newFromAscii (strError, "WSAENOTEMPTY, Undocumented WinSock error");
+ break;
+
+ case WSAEPROCLIM:
+ rtl_uString_newFromAscii (strError, "WSAEPROCLIM, Undocumented WinSock error");
+ break;
+
+ case WSAEUSERS:
+ rtl_uString_newFromAscii (strError, "WSAEUSERS, Undocumented WinSock error");
+ break;
+
+ case WSAEDQUOT:
+ rtl_uString_newFromAscii (strError, "WSAEDQUOT, Undocumented WinSock error");
+ break;
+
+ case WSAESTALE:
+ rtl_uString_newFromAscii (strError, "WSAESTALE, Undocumented WinSock error");
+ break;
+
+ case WSAEREMOTE:
+ rtl_uString_newFromAscii (strError, "WSAEREMOTE, Undocumented WinSock error");
+ break;
+
+ case WSAEDISCON:
+ rtl_uString_newFromAscii (strError, "WSAEDISCON, Circuit was gracefully terminated");
+ break;
+
+ case WSASYSNOTREADY:
+ rtl_uString_newFromAscii (strError, "WSASYSNOTREADY, The underlying network subsystem is not ready for network communication");
+ break;
+
+ case WSAVERNOTSUPPORTED:
+ rtl_uString_newFromAscii (strError, "WSAVERNOTSUPPORTED, The version of Windows Sockets API support requested is not provided by this particular Windows Sockets implementation");
+ break;
+
+ case WSANOTINITIALISED:
+ rtl_uString_newFromAscii (strError, "WSANOTINITIALISED, WSAStartup() has not been called");
+ break;
+
+ case WSAHOST_NOT_FOUND:
+ rtl_uString_newFromAscii (strError, "WSAHOST_NOT_FOUND, Authoritative answer host not found");
+ break;
+
+ case WSATRY_AGAIN:
+ rtl_uString_newFromAscii (strError, "WSATRY_AGAIN, Non-authoritative answer host not found or SERVERFAIL");
+ break;
+
+ case WSANO_RECOVERY:
+ rtl_uString_newFromAscii (strError, "WSANO_RECOVERY, Non recoverable errors, FORMERR, REFUSED, NOTIMP");
+ break;
+
+ case WSANO_DATA:
+ rtl_uString_newFromAscii (strError, "WSANO_DATA or WSANO_ADDRESS, Valid name, no data record of requested type");
+ break;
+
+ default:
+ {
+ sal_Unicode message[128];
+
+ wsprintfW(o3tl::toW(message), L"Unknown WinSock Error Number %d", error);
+ rtl_uString_newFromStr (strError, message);
+ }
+
+ return;
+
+ }
+}
+
+oslSocketError SAL_CALL osl_getLastSocketError(oslSocket /*Socket*/)
+{
+ return ERROR_FROM_NATIVE(WSAGetLastError());
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/sockimpl.hxx b/sal/osl/w32/sockimpl.hxx
new file mode 100644
index 000000000..72b204a2e
--- /dev/null
+++ b/sal/osl/w32/sockimpl.hxx
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <osl/socket.h>
+#include <osl/interlck.h>
+
+#define OSL_SOCKET_FLAGS_NONBLOCKING 0x0001
+
+struct oslSocketImpl {
+ oslInterlockedCount m_nRefCount;
+ SOCKET m_Socket;
+ int m_Flags;
+};
+
+struct oslSocketAddrImpl
+{
+ struct sockaddr m_sockaddr;
+ oslInterlockedCount m_nRefCount;
+};
+
+oslSocket osl_createSocketImpl_(SOCKET Socket);
+void osl_destroySocketImpl_(oslSocket pImpl);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/system.h b/sal/osl/w32/system.h
new file mode 100644
index 000000000..921d746fd
--- /dev/null
+++ b/sal/osl/w32/system.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#if OSL_DEBUG_LEVEL <= 3
+#define NO_DEBUG_CRT
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <malloc.h>
+#include <limits.h>
+#include <process.h>
+#include <time.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <io.h>
+#include <share.h>
+#include <direct.h>
+
+/* Must define this else build breaks because Winsock2.h
+ includes Windows.h and without WIN32_LEAN_AND_MEAN
+ also includes mswsock.h which needs a forward typedef
+ of SOCKET ...
+*/
+#define WIN32_LEAN_AND_MEAN
+
+// winsock2.h includes windows.h
+#include <winsock2.h>
+#include <wsipx.h>
+#include <ws2tcpip.h>
+#include <shlobj.h>
+#ifndef NO_DEBUG_CRT
+#include <crtdbg.h>
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/tempfile.cxx b/sal/osl/w32/tempfile.cxx
new file mode 100644
index 000000000..f0065bf2d
--- /dev/null
+++ b/sal/osl/w32/tempfile.cxx
@@ -0,0 +1,238 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <systools/win32/uwinapi.h>
+
+#include <osl/file.h>
+#include <o3tl/char16_t2wchar_t.hxx>
+#include <rtl/ustring.hxx>
+
+#include "file-impl.hxx"
+#include "file_error.hxx"
+#include "file_url.hxx"
+#include "path_helper.hxx"
+
+#include <malloc.h>
+#include <cassert>
+
+// Allocate n number of t's on the stack return a pointer to it in p
+#define STACK_ALLOC(p, t, n) __try {(p) = static_cast<t*>(_alloca((n)*sizeof(t)));} \
+ __except(EXCEPTION_EXECUTE_HANDLER) {(p) = nullptr;}
+
+// Temp file functions
+
+static oslFileError osl_setup_base_directory_impl_(
+ rtl_uString* pustrDirectoryURL,
+ rtl_uString** ppustr_base_dir)
+{
+ OUString dir_url;
+ OUString dir;
+ oslFileError error = osl_File_E_None;
+
+ if (pustrDirectoryURL)
+ dir_url = pustrDirectoryURL;
+ else
+ error = osl_getTempDirURL(&dir_url.pData);
+
+ if (error == osl_File_E_None)
+ error = osl_getSystemPathFromFileURL_(dir_url, &dir.pData, false);
+
+ if (error == osl_File_E_None)
+ rtl_uString_assign(ppustr_base_dir, dir.pData);
+
+ return error;
+}
+
+static oslFileError osl_setup_createTempFile_impl_(
+ rtl_uString* pustrDirectoryURL,
+ oslFileHandle* pHandle,
+ rtl_uString** ppustrTempFileURL,
+ rtl_uString** ppustr_base_dir,
+ sal_Bool* b_delete_on_close)
+{
+ oslFileError osl_error;
+
+ OSL_PRECOND(((pHandle != nullptr) || (ppustrTempFileURL != nullptr)), "Invalid parameter!");
+
+ if ((pHandle == nullptr) && (ppustrTempFileURL == nullptr))
+ {
+ osl_error = osl_File_E_INVAL;
+ }
+ else
+ {
+ osl_error = osl_setup_base_directory_impl_(
+ pustrDirectoryURL, ppustr_base_dir);
+
+ *b_delete_on_close = (ppustrTempFileURL == nullptr);
+ }
+
+ return osl_error;
+}
+
+static oslFileError osl_win32_GetTempFileName_impl_(
+ rtl_uString* base_directory, LPWSTR temp_file_name)
+{
+ oslFileError osl_error = osl_File_E_None;
+
+ if (GetTempFileNameW(
+ o3tl::toW(rtl_uString_getStr(base_directory)),
+ L"",
+ 0,
+ temp_file_name) == 0)
+ {
+ osl_error = oslTranslateFileError(GetLastError());
+ }
+
+ return osl_error;
+}
+
+static bool osl_win32_CreateFile_impl_(
+ LPCWSTR file_name, bool b_delete_on_close, oslFileHandle* p_handle)
+{
+ DWORD flags = FILE_ATTRIBUTE_NORMAL;
+ HANDLE hFile;
+
+ assert(p_handle);
+
+ if (b_delete_on_close)
+ flags |= FILE_FLAG_DELETE_ON_CLOSE;
+
+ hFile = CreateFileW(
+ file_name,
+ GENERIC_READ | GENERIC_WRITE,
+ 0,
+ nullptr,
+ TRUNCATE_EXISTING,
+ flags,
+ nullptr);
+
+ // @@@ ERROR HANDLING @@@
+ if (IsValidHandle(hFile))
+ *p_handle = osl_createFileHandleFromOSHandle(hFile, osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+
+ return IsValidHandle(hFile);
+}
+
+static oslFileError osl_createTempFile_impl_(
+ rtl_uString* base_directory,
+ LPWSTR tmp_name,
+ bool b_delete_on_close,
+ oslFileHandle* pHandle,
+ rtl_uString** ppustrTempFileURL)
+{
+ oslFileError osl_error;
+
+ do
+ {
+ osl_error = osl_win32_GetTempFileName_impl_(base_directory, tmp_name);
+
+ /* if file could not be opened try again */
+
+ if ((osl_File_E_None != osl_error) || (nullptr == pHandle) ||
+ osl_win32_CreateFile_impl_(tmp_name, b_delete_on_close, pHandle))
+ break;
+
+ } while(true); // try until success
+
+ if ((osl_error == osl_File_E_None) && !b_delete_on_close)
+ {
+ rtl_uString* pustr = nullptr;
+ rtl_uString_newFromStr(&pustr, o3tl::toU(tmp_name));
+ osl_getFileURLFromSystemPath(pustr, ppustrTempFileURL);
+ rtl_uString_release(pustr);
+ }
+
+ return osl_error;
+}
+
+oslFileError SAL_CALL osl_createTempFile(
+ rtl_uString* pustrDirectoryURL,
+ oslFileHandle* pHandle,
+ rtl_uString** ppustrTempFileURL)
+{
+ rtl_uString* base_directory = nullptr;
+ LPWSTR tmp_name;
+ sal_Bool b_delete_on_close;
+ oslFileError osl_error;
+
+ osl_error = osl_setup_createTempFile_impl_(
+ pustrDirectoryURL,
+ pHandle,
+ ppustrTempFileURL,
+ &base_directory,
+ &b_delete_on_close);
+
+ if (osl_error != osl_File_E_None)
+ return osl_error;
+
+ /* allocate enough space on the stack, the file name can not be longer than MAX_PATH */
+ STACK_ALLOC(tmp_name, WCHAR, (rtl_uString_getLength(base_directory) + MAX_PATH));
+
+ if (tmp_name)
+ {
+ osl_error = osl_createTempFile_impl_(
+ base_directory,
+ tmp_name,
+ b_delete_on_close,
+ pHandle,
+ ppustrTempFileURL);
+ }
+ else // stack alloc failed
+ {
+ osl_error = osl_File_E_NOMEM;
+ }
+
+ if (base_directory)
+ rtl_uString_release(base_directory);
+
+ return osl_error;
+}
+
+oslFileError SAL_CALL osl_getTempDirURL(rtl_uString** pustrTempDir)
+{
+ ::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH );
+ LPWSTR lpBuffer = o3tl::toW(aBuffer);
+ DWORD nBufferLength = aBuffer.getBufSizeInSymbols() - 1;
+
+ DWORD nLength;
+ oslFileError error;
+
+ nLength = GetTempPathW( aBuffer.getBufSizeInSymbols(), lpBuffer );
+
+ if ( nLength > nBufferLength )
+ {
+ // the provided path has invalid length
+ error = osl_File_E_NOENT;
+ }
+ else if ( nLength )
+ {
+ if ( '\\' == lpBuffer[nLength-1] )
+ --nLength;
+
+ const OUString ustrTempPath(o3tl::toU(lpBuffer), static_cast<sal_Int32>(nLength));
+
+ error = osl_getFileURLFromSystemPath(ustrTempPath.pData, pustrTempDir);
+ }
+ else
+ error = oslTranslateFileError( GetLastError() );
+
+ return error;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/thread.cxx b/sal/osl/w32/thread.cxx
new file mode 100644
index 000000000..fe5ac30b0
--- /dev/null
+++ b/sal/osl/w32/thread.cxx
@@ -0,0 +1,540 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "system.h"
+#include "thread.hxx"
+
+#include <comphelper/windowserrorstring.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+#include <osl/thread.h>
+#include <rtl/alloc.h>
+#include <osl/time.h>
+#include <osl/interlck.h>
+#include <rtl/tencinfo.h>
+#include <sal/log.hxx>
+#include <systools/win32/comtools.hxx>
+
+#include <errno.h>
+
+namespace {
+
+/**
+ Thread-data structure hidden behind oslThread:
+ */
+typedef struct
+{
+ HANDLE m_hThread; /* OS-handle used for all thread-functions */
+ DWORD m_ThreadId; /* identifier for this thread */
+ sal_Int32 m_nTerminationRequested;
+ oslWorkerFunction m_WorkerFunction;
+ void* m_pData;
+
+} osl_TThreadImpl;
+
+}
+
+static oslThread oslCreateThread(oslWorkerFunction pWorker, void* pThreadData, sal_uInt32 nFlags);
+
+static DWORD WINAPI oslWorkerWrapperFunction(_In_ LPVOID pData)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(pData);
+
+ /* Initialize COM - Multi Threaded Apartment (MTA) for all threads */
+ sal::systools::CoInitializeGuard aGuard(COINIT_MULTITHREADED, false,
+ sal::systools::CoInitializeGuard::WhenFailed::NoThrow);
+
+ /* call worker-function with data */
+
+ pThreadImpl->m_WorkerFunction(pThreadImpl->m_pData);
+
+ return 0;
+}
+
+static oslThread oslCreateThread(oslWorkerFunction pWorker,
+ void* pThreadData,
+ sal_uInt32 nFlags)
+{
+ osl_TThreadImpl* pThreadImpl;
+
+ /* alloc mem. for our internal data structure */
+ pThreadImpl= static_cast<osl_TThreadImpl *>(malloc(sizeof(osl_TThreadImpl)));
+
+ OSL_ASSERT(pThreadImpl);
+
+ if ( pThreadImpl == nullptr )
+ {
+ return nullptr;
+ }
+
+ pThreadImpl->m_WorkerFunction= pWorker;
+ pThreadImpl->m_pData= pThreadData;
+ pThreadImpl->m_nTerminationRequested= 0;
+
+ pThreadImpl->m_hThread= CreateThread(
+ nullptr, /* no security */
+ 0, /* default stack-size */
+ oslWorkerWrapperFunction, /* worker-function */
+ pThreadImpl, /* provide worker-function with data */
+ nFlags, /* start thread immediately or suspended */
+ &pThreadImpl->m_ThreadId);
+
+ if(pThreadImpl->m_hThread == nullptr)
+ {
+ SAL_WARN("sal.osl", "CreateThread failed:" << WindowsErrorString(GetLastError()));
+
+ /* create failed */
+ free(pThreadImpl);
+ return nullptr;
+ }
+
+ return pThreadImpl;
+}
+
+oslThread SAL_CALL osl_createThread(oslWorkerFunction pWorker,
+ void* pThreadData)
+{
+ return oslCreateThread(pWorker, pThreadData, 0);
+}
+
+oslThread SAL_CALL osl_createSuspendedThread(oslWorkerFunction pWorker,
+ void* pThreadData)
+{
+ return oslCreateThread(pWorker, pThreadData, CREATE_SUSPENDED);
+}
+
+oslThreadIdentifier SAL_CALL osl_getThreadIdentifier(oslThread Thread)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ if (pThreadImpl != nullptr)
+ return static_cast<oslThreadIdentifier>(pThreadImpl->m_ThreadId);
+ else
+ return static_cast<oslThreadIdentifier>(GetCurrentThreadId());
+}
+
+void SAL_CALL osl_destroyThread(oslThread Thread)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ if (Thread == nullptr) /* valid ptr? */
+ {
+ /* thread already destroyed or not created */
+ return;
+ }
+
+ /* !!!! _exitthreadex does _not_ call CloseHandle !!! */
+ CloseHandle( pThreadImpl->m_hThread );
+
+ /* free memory */
+ free(Thread);
+}
+
+void SAL_CALL osl_resumeThread(oslThread Thread)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ OSL_ASSERT(pThreadImpl); /* valid ptr? */
+
+ ResumeThread(pThreadImpl->m_hThread);
+}
+
+void SAL_CALL osl_suspendThread(oslThread Thread)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ OSL_ASSERT(pThreadImpl); /* valid ptr? */
+
+ SuspendThread(pThreadImpl->m_hThread);
+}
+
+void SAL_CALL osl_setThreadPriority(oslThread Thread,
+ oslThreadPriority Priority)
+{
+ int winPriority;
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ OSL_ASSERT(pThreadImpl); /* valid ptr? */
+
+ /* map enum to WIN32 levels
+ it would be faster and more elegant to preset
+ the enums, but that would require an #ifdef in
+ the exported header, which is not desired.
+ */
+ switch(Priority) {
+
+ case osl_Thread_PriorityHighest:
+ winPriority= THREAD_PRIORITY_HIGHEST;
+ break;
+
+ case osl_Thread_PriorityAboveNormal:
+ winPriority= THREAD_PRIORITY_ABOVE_NORMAL;
+ break;
+
+ case osl_Thread_PriorityNormal:
+ winPriority= THREAD_PRIORITY_NORMAL;
+ break;
+
+ case osl_Thread_PriorityBelowNormal:
+ winPriority= THREAD_PRIORITY_BELOW_NORMAL;
+ break;
+
+ case osl_Thread_PriorityLowest:
+ winPriority= THREAD_PRIORITY_LOWEST;
+ break;
+
+ case osl_Thread_PriorityUnknown:
+ OSL_ASSERT(FALSE); /* only fools try this...*/
+
+ /* let release-version behave friendly */
+ return;
+
+ default:
+ OSL_ASSERT(FALSE); /* enum expanded, but forgotten here...*/
+
+ /* let release-version behave friendly */
+ return;
+ }
+
+ SetThreadPriority(pThreadImpl->m_hThread, winPriority);
+}
+
+oslThreadPriority SAL_CALL osl_getThreadPriority(const oslThread Thread)
+{
+ int winPriority;
+ oslThreadPriority Priority;
+
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ /* invalid arguments ?*/
+ if(pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr)
+ {
+ return osl_Thread_PriorityUnknown;
+ }
+
+ winPriority=
+ GetThreadPriority(pThreadImpl->m_hThread);
+
+ if(winPriority == THREAD_PRIORITY_ERROR_RETURN)
+ {
+ return osl_Thread_PriorityUnknown;
+ }
+
+ /* map WIN32 priority to enum */
+ switch(winPriority)
+ {
+ case THREAD_PRIORITY_TIME_CRITICAL:
+ case THREAD_PRIORITY_HIGHEST:
+ Priority= osl_Thread_PriorityHighest;
+ break;
+
+ case THREAD_PRIORITY_ABOVE_NORMAL:
+ Priority= osl_Thread_PriorityAboveNormal;
+ break;
+
+ case THREAD_PRIORITY_NORMAL:
+ Priority= osl_Thread_PriorityNormal;
+ break;
+
+ case THREAD_PRIORITY_BELOW_NORMAL:
+ Priority= osl_Thread_PriorityBelowNormal;
+ break;
+
+ case THREAD_PRIORITY_IDLE:
+ case THREAD_PRIORITY_LOWEST:
+ Priority= osl_Thread_PriorityLowest;
+ break;
+
+ default:
+ OSL_ASSERT(FALSE); /* WIN32 API changed, incorporate new prio-level! */
+
+ /* release-version behaves friendly */
+ Priority= osl_Thread_PriorityUnknown;
+ }
+
+ return Priority;
+}
+
+sal_Bool SAL_CALL osl_isThreadRunning(const oslThread Thread)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ /* invalid arguments ?*/
+ if(pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr)
+ {
+ return false;
+ }
+
+ return WaitForSingleObject(pThreadImpl->m_hThread, 0) != WAIT_OBJECT_0;
+}
+
+void SAL_CALL osl_joinWithThread(oslThread Thread)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ /* invalid arguments?*/
+ if(pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr)
+ {
+ /* assume thread is not running */
+ return;
+ }
+
+ WaitForSingleObject(pThreadImpl->m_hThread, INFINITE);
+}
+
+void SAL_CALL osl_waitThread(const TimeValue* pDelay)
+{
+ if (pDelay)
+ {
+ DWORD millisecs = pDelay->Seconds * 1000L + pDelay->Nanosec / 1000000L;
+
+ Sleep(millisecs);
+ }
+}
+
+void SAL_CALL osl_terminateThread(oslThread Thread)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ /* invalid arguments?*/
+ if (pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr)
+ {
+ /* assume thread is not running */
+ return;
+ }
+
+ osl_atomic_increment(&(pThreadImpl->m_nTerminationRequested));
+}
+
+sal_Bool SAL_CALL osl_scheduleThread(oslThread Thread)
+{
+ osl_TThreadImpl* pThreadImpl= static_cast<osl_TThreadImpl*>(Thread);
+
+ osl_yieldThread();
+
+ /* invalid arguments?*/
+ if (pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr)
+ {
+ /* assume thread is not running */
+ return false;
+ }
+
+ return 0 == pThreadImpl->m_nTerminationRequested;
+}
+
+void SAL_CALL osl_yieldThread(void)
+{
+ Sleep(0);
+}
+
+static void impSetThreadDescription(char const * name) {
+ // SetThreadDescription is only available since Windows 10 version 1607
+ typedef HRESULT(WINAPI * TSetThreadDescription)(HANDLE, PCWSTR);
+ static const auto pSetThreadDescription = reinterpret_cast<TSetThreadDescription>(
+ GetProcAddress(GetModuleHandleA("KernelBase.dll"), "SetThreadDescription"));
+ if (pSetThreadDescription)
+ {
+ if (const int nReqCCh = MultiByteToWideChar(CP_ACP, 0, name, -1, nullptr, 0))
+ {
+ if (PWSTR wStr = static_cast<PWSTR>(malloc(nReqCCh * sizeof(WCHAR))))
+ {
+ if (MultiByteToWideChar(CP_ACP, 0, name, -1, wStr, nReqCCh))
+ pSetThreadDescription(GetCurrentThread(), wStr);
+ free(wStr);
+ }
+ }
+ }
+}
+
+void SAL_CALL osl_setThreadName(char const * name) {
+ /* See < https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-set-a-thread-name-in-native-code >: */
+#pragma pack(push, 8)
+ struct {
+ DWORD dwType = 0x1000;
+ LPCSTR szName;
+ DWORD dwThreadID = DWORD(-1);
+ DWORD dwFlags = 0;
+ } info;
+#pragma pack(pop)
+ info.szName = name;
+ __try {
+ RaiseException(
+ 0x406D1388, 0, sizeof info / sizeof (ULONG_PTR),
+ reinterpret_cast<ULONG_PTR *>(&info));
+ } __except (EXCEPTION_EXECUTE_HANDLER) {}
+
+ impSetThreadDescription(name);
+}
+
+namespace {
+
+typedef struct TLS_
+{
+ DWORD dwIndex;
+ oslThreadKeyCallbackFunction pfnCallback;
+ struct TLS_ *pNext, *pPrev;
+} TLS, *PTLS;
+
+PTLS g_pThreadKeyList = nullptr;
+osl::Mutex& getThreadKeyListMutex()
+{
+ static osl::Mutex g_ThreadKeyListMutex;
+ return g_ThreadKeyListMutex;
+}
+
+}
+
+static void AddKeyToList( PTLS pTls )
+{
+ if ( pTls )
+ {
+ osl::MutexGuard aGuard(getThreadKeyListMutex());
+
+ pTls->pNext = g_pThreadKeyList;
+ pTls->pPrev = nullptr;
+
+ if ( g_pThreadKeyList )
+ g_pThreadKeyList->pPrev = pTls;
+
+ g_pThreadKeyList = pTls;
+ }
+}
+
+static void RemoveKeyFromList( PTLS pTls )
+{
+ if ( pTls )
+ {
+ osl::MutexGuard aGuard(getThreadKeyListMutex());
+ if ( pTls->pPrev )
+ pTls->pPrev->pNext = pTls->pNext;
+ else
+ {
+ OSL_ASSERT( pTls == g_pThreadKeyList );
+ g_pThreadKeyList = pTls->pNext;
+ }
+
+ if ( pTls->pNext )
+ pTls->pNext->pPrev = pTls->pPrev;
+ }
+}
+
+void osl_callThreadKeyCallbackOnThreadDetach(void)
+{
+ PTLS pTls;
+
+ osl::MutexGuard aGuard(getThreadKeyListMutex());
+ pTls = g_pThreadKeyList;
+ while ( pTls )
+ {
+ if ( pTls->pfnCallback )
+ {
+ void *pValue = TlsGetValue( pTls->dwIndex );
+
+ if ( pValue )
+ pTls->pfnCallback( pValue );
+ }
+
+ pTls = pTls->pNext;
+ }
+}
+
+oslThreadKey SAL_CALL osl_createThreadKey(oslThreadKeyCallbackFunction pCallback)
+{
+ PTLS pTls = static_cast<PTLS>(malloc( sizeof(TLS) ));
+
+ if ( pTls )
+ {
+ pTls->pfnCallback = pCallback;
+ if ( DWORD(-1) == (pTls->dwIndex = TlsAlloc()) )
+ {
+ free( pTls );
+ pTls = nullptr;
+ }
+ else
+ AddKeyToList( pTls );
+ }
+
+ return pTls;
+}
+
+void SAL_CALL osl_destroyThreadKey(oslThreadKey Key)
+{
+ if (Key != nullptr)
+ {
+ PTLS pTls = static_cast<PTLS>(Key);
+
+ RemoveKeyFromList( pTls );
+ TlsFree( pTls->dwIndex );
+ free( pTls );
+ }
+}
+
+void* SAL_CALL osl_getThreadKeyData(oslThreadKey Key)
+{
+ if (Key != nullptr)
+ {
+ PTLS pTls = static_cast<PTLS>(Key);
+
+ return TlsGetValue( pTls->dwIndex );
+ }
+
+ return nullptr;
+}
+
+sal_Bool SAL_CALL osl_setThreadKeyData(oslThreadKey Key, void *pData)
+{
+ if (Key != nullptr)
+ {
+ PTLS pTls = static_cast<PTLS>(Key);
+ void* pOldData = nullptr;
+ bool fSuccess;
+
+ if ( pTls->pfnCallback )
+ pOldData = TlsGetValue( pTls->dwIndex );
+
+ fSuccess = TlsSetValue( pTls->dwIndex, pData );
+
+ if ( fSuccess && pTls->pfnCallback && pOldData )
+ pTls->pfnCallback( pOldData );
+
+ return fSuccess;
+ }
+
+ return false;
+}
+
+namespace
+{
+rtl_TextEncoding& getThreadTextEncodingImpl()
+{
+ static thread_local rtl_TextEncoding s_enc = rtl_getTextEncodingFromWindowsCodePage(GetACP());
+ return s_enc;
+}
+}
+
+rtl_TextEncoding SAL_CALL osl_getThreadTextEncoding(void) { return getThreadTextEncodingImpl(); }
+
+rtl_TextEncoding SAL_CALL osl_setThreadTextEncoding( rtl_TextEncoding Encoding )
+{
+ rtl_TextEncoding oldEncoding = getThreadTextEncodingImpl();
+ getThreadTextEncodingImpl() = Encoding;
+ return oldEncoding;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/thread.hxx b/sal/osl/w32/thread.hxx
new file mode 100644
index 000000000..8002d8b7f
--- /dev/null
+++ b/sal/osl/w32/thread.hxx
@@ -0,0 +1,18 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+
+void osl_callThreadKeyCallbackOnThreadDetach(void);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/osl/w32/time.cxx b/sal/osl/w32/time.cxx
new file mode 100644
index 000000000..3f11746fe
--- /dev/null
+++ b/sal/osl/w32/time.cxx
@@ -0,0 +1,200 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+#include "system.h"
+
+#include "filetime.hxx"
+#include "time.hxx"
+
+#include <osl/diagnose.h>
+#include <osl/time.h>
+#include <sys/timeb.h>
+
+sal_Bool SAL_CALL osl_getSystemTime(TimeValue* pTimeVal)
+{
+ unsigned __int64 CurTime;
+
+ typedef VOID (WINAPI *GetSystemTimePreciseAsFileTime_PROC)(LPFILETIME);
+
+ OSL_ASSERT(pTimeVal != nullptr);
+
+ static GetSystemTimePreciseAsFileTime_PROC pGetSystemTimePreciseAsFileTime = []()
+ {
+ HMODULE hModule = GetModuleHandleW( L"Kernel32.dll" );
+ return reinterpret_cast<GetSystemTimePreciseAsFileTime_PROC>(
+ GetProcAddress(hModule, "GetSystemTimePreciseAsFileTime"));
+ }();
+
+ // use ~1 microsecond resolution if available
+ if (pGetSystemTimePreciseAsFileTime)
+ pGetSystemTimePreciseAsFileTime(reinterpret_cast<LPFILETIME>(&CurTime));
+ else
+ {
+ SYSTEMTIME SystemTime;
+ GetSystemTime(&SystemTime);
+ SystemTimeToFileTime(&SystemTime, reinterpret_cast<LPFILETIME>(&CurTime));
+ }
+
+ static const unsigned __int64 OffTime = [] {
+ SYSTEMTIME SystemTime;
+ SystemTime.wYear = 1970;
+ SystemTime.wMonth = 1;
+ SystemTime.wDayOfWeek = 0;
+ SystemTime.wDay = 1;
+ SystemTime.wHour = 0;
+ SystemTime.wMinute = 0;
+ SystemTime.wSecond = 0;
+ SystemTime.wMilliseconds = 0;
+
+ unsigned __int64 ft;
+ SystemTimeToFileTime(&SystemTime, reinterpret_cast<LPFILETIME>(&ft));
+ return ft;
+ }();
+
+ const unsigned __int64 Value = CurTime - OffTime;
+
+ pTimeVal->Seconds = static_cast<unsigned long>(Value / 10000000L);
+ pTimeVal->Nanosec = static_cast<unsigned long>((Value % 10000000L) * 100);
+
+ return true;
+}
+
+sal_Bool SAL_CALL osl_getDateTimeFromTimeValue( const TimeValue* pTimeVal, oslDateTime* pDateTime )
+{
+ FILETIME aFileTime;
+ SYSTEMTIME aSystemTime;
+
+ if ( TimeValueToFileTime(pTimeVal, &aFileTime) )
+ {
+ if ( FileTimeToSystemTime( &aFileTime, &aSystemTime ) )
+ {
+ pDateTime->NanoSeconds = pTimeVal->Nanosec;
+
+ pDateTime->Seconds = aSystemTime.wSecond;
+ pDateTime->Minutes = aSystemTime.wMinute;
+ pDateTime->Hours = aSystemTime.wHour;
+ pDateTime->Day = aSystemTime.wDay;
+ pDateTime->DayOfWeek = aSystemTime.wDayOfWeek;
+ pDateTime->Month = aSystemTime.wMonth;
+ pDateTime->Year = aSystemTime.wYear;
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+sal_Bool SAL_CALL osl_getTimeValueFromDateTime( const oslDateTime* pDateTime, TimeValue* pTimeVal )
+{
+ FILETIME aFileTime;
+ SYSTEMTIME aSystemTime;
+
+ aSystemTime.wMilliseconds = 0;
+ aSystemTime.wSecond = pDateTime->Seconds;
+ aSystemTime.wMinute = pDateTime->Minutes;
+ aSystemTime.wHour = pDateTime->Hours;
+ aSystemTime.wDay = pDateTime->Day;
+ aSystemTime.wDayOfWeek = pDateTime->DayOfWeek;
+ aSystemTime.wMonth = pDateTime->Month;
+ aSystemTime.wYear = pDateTime->Year;
+
+ if ( SystemTimeToFileTime( &aSystemTime, &aFileTime ) )
+ {
+ if (FileTimeToTimeValue( &aFileTime, pTimeVal ) )
+ {
+ pTimeVal->Nanosec = pDateTime->NanoSeconds;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+sal_Bool SAL_CALL osl_getLocalTimeFromSystemTime( const TimeValue* pSystemTimeVal, TimeValue* pLocalTimeVal )
+{
+ TIME_ZONE_INFORMATION aTimeZoneInformation;
+
+ // get timezone information
+ DWORD Success = GetTimeZoneInformation( &aTimeZoneInformation );
+ if (Success == TIME_ZONE_ID_INVALID)
+ return false;
+
+ sal_Int64 bias = aTimeZoneInformation.Bias;
+
+ // add bias for daylight saving time
+ if ( Success == TIME_ZONE_ID_DAYLIGHT )
+ bias+=aTimeZoneInformation.DaylightBias;
+
+ if ( static_cast<sal_Int64>(pSystemTimeVal->Seconds) > ( bias * 60 ) )
+ {
+ pLocalTimeVal->Seconds = static_cast<sal_uInt32>(pSystemTimeVal->Seconds - ( bias * 60) );
+ pLocalTimeVal->Nanosec = pSystemTimeVal->Nanosec;
+
+ return true;
+ }
+ return false;
+}
+
+sal_Bool SAL_CALL osl_getSystemTimeFromLocalTime( const TimeValue* pLocalTimeVal, TimeValue* pSystemTimeVal )
+{
+ TIME_ZONE_INFORMATION aTimeZoneInformation;
+
+ // get timezone information
+ DWORD Success = GetTimeZoneInformation( &aTimeZoneInformation );
+ if ( Success == TIME_ZONE_ID_INVALID )
+ return false;
+
+ sal_Int64 bias = aTimeZoneInformation.Bias;
+
+ // add bias for daylight saving time
+ if ( Success == TIME_ZONE_ID_DAYLIGHT )
+ bias+=aTimeZoneInformation.DaylightBias;
+
+ if ( static_cast<sal_Int64>(pLocalTimeVal->Seconds) + ( bias * 60 ) > 0 )
+ {
+ pSystemTimeVal->Seconds = static_cast<sal_uInt32>( pLocalTimeVal->Seconds + ( bias * 60) );
+ pSystemTimeVal->Nanosec = pLocalTimeVal->Nanosec;
+
+ return true;
+ }
+
+ return false;
+}
+
+static struct _timeb startTime;
+void sal_initGlobalTimer()
+{
+ _ftime( &startTime );
+}
+
+sal_uInt32 SAL_CALL osl_getGlobalTimer(void)
+{
+ struct _timeb currentTime;
+ sal_uInt32 nSeconds;
+
+ _ftime( &currentTime );
+
+ nSeconds = static_cast<sal_uInt32>( currentTime.time - startTime.time );
+
+ return ( nSeconds * 1000 ) + static_cast<long>( currentTime.millitm - startTime.millitm );
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/w32/time.hxx b/sal/osl/w32/time.hxx
new file mode 100644
index 000000000..c0ca9d777
--- /dev/null
+++ b/sal/osl/w32/time.hxx
@@ -0,0 +1,19 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_OSL_W32_TIME_HXX
+#define INCLUDED_SAL_OSL_W32_TIME_HXX
+
+#include <sal/config.h>
+
+void sal_initGlobalTimer(void);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/qa/ByteSequence/ByteSequence.cxx b/sal/qa/ByteSequence/ByteSequence.cxx
new file mode 100644
index 000000000..f5541a0f3
--- /dev/null
+++ b/sal/qa/ByteSequence/ByteSequence.cxx
@@ -0,0 +1,183 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <rtl/byteseq.hxx>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+public:
+ void test_default() {
+ rtl::ByteSequence s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+
+ void test_size0() {
+ rtl::ByteSequence s(sal_Int32(0));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+
+ void test_size5() {
+ rtl::ByteSequence s(5);
+ sal_Int8 const * p = s.getConstArray();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[0]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[1]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[2]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[3]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[4]);
+ }
+
+ void test_noinit0() {
+ rtl::ByteSequence s(0, rtl::BYTESEQ_NODEFAULT);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+
+ void test_noinit5() {
+ rtl::ByteSequence s(5, rtl::BYTESEQ_NODEFAULT);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ }
+
+ void test_elem0() {
+ rtl::ByteSequence s(nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+
+ void test_elem5() {
+ sal_Int8 const a[5] = { 0, 1, 2, 3, 4 };
+ rtl::ByteSequence s(a, 5);
+ sal_Int8 const * p = s.getConstArray();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[0]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(1), p[1]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(2), p[2]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(3), p[3]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(4), p[4]);
+ }
+
+ void test_copy() {
+ rtl::ByteSequence s1(5);
+ {
+ rtl::ByteSequence s2(s1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s2.getLength());
+ CPPUNIT_ASSERT_EQUAL(s1.getConstArray(), s2.getConstArray());
+ CPPUNIT_ASSERT_EQUAL(s1.getHandle(), s2.getHandle());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s1.getHandle()->nRefCount);
+ }
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getHandle()->nRefCount);
+ }
+
+ void test_fromC() {
+ sal_Sequence c = { 1, 1, { 0 } };
+ {
+ rtl::ByteSequence s(&c);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< void const * >(c.elements),
+ static_cast< void const * >(s.getConstArray()));
+ CPPUNIT_ASSERT_EQUAL(&c, s.getHandle());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), c.nRefCount);
+ }
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), c.nRefCount);
+ }
+
+ void test_noacquire() {
+ sal_Sequence c = { 2, 1, { 0 } };
+ {
+ rtl::ByteSequence s(&c, rtl::BYTESEQ_NOACQUIRE);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< void const * >(c.elements),
+ static_cast< void const * >(s.getConstArray()));
+ CPPUNIT_ASSERT_EQUAL(&c, s.getHandle());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), c.nRefCount);
+ }
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), c.nRefCount);
+ }
+
+ void test_getArray() {
+ sal_Int8 const a[5] = { 0, 1, 2, 3, 4 };
+ rtl::ByteSequence s1(a, 5);
+ rtl::ByteSequence s2(s1);
+ sal_Int8 * p = s2.getArray();
+ p[2] = 10;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getHandle()->nRefCount);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s2.getHandle()->nRefCount);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(2), s1.getConstArray()[2]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(10), s2.getConstArray()[2]);
+ }
+
+ void test_same0() {
+ rtl::ByteSequence s1;
+ rtl::ByteSequence s2;
+ CPPUNIT_ASSERT_EQUAL(true, s1 == s2);
+ CPPUNIT_ASSERT_EQUAL(true, s2 == s1);
+ CPPUNIT_ASSERT_EQUAL(false, s1 != s2);
+ CPPUNIT_ASSERT_EQUAL(false, s2 != s1);
+ }
+
+ void test_diffLen() {
+ sal_Int8 const a[5] = { 0, 1, 2, 3, 4 };
+ rtl::ByteSequence s1(a, 5);
+ rtl::ByteSequence s2(a, 4);
+ CPPUNIT_ASSERT_EQUAL(false, s1 == s2);
+ CPPUNIT_ASSERT_EQUAL(false, s2 == s1);
+ CPPUNIT_ASSERT_EQUAL(true, s1 != s2);
+ CPPUNIT_ASSERT_EQUAL(true, s2 != s1);
+ }
+
+ void test_diffElem() {
+ sal_Int8 const a1[5] = { 0, 1, 2, 3, 4 };
+ rtl::ByteSequence s1(a1, 5);
+ sal_Int8 const a2[5] = { 0, 1, 10, 3, 4 };
+ rtl::ByteSequence s2(a2, 5);
+ CPPUNIT_ASSERT_EQUAL(false, s1 == s2);
+ CPPUNIT_ASSERT_EQUAL(false, s2 == s1);
+ CPPUNIT_ASSERT_EQUAL(true, s1 != s2);
+ CPPUNIT_ASSERT_EQUAL(true, s2 != s1);
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test_default);
+ CPPUNIT_TEST(test_size0);
+ CPPUNIT_TEST(test_size5);
+ CPPUNIT_TEST(test_noinit0);
+ CPPUNIT_TEST(test_noinit5);
+ CPPUNIT_TEST(test_elem0);
+ CPPUNIT_TEST(test_elem5);
+ CPPUNIT_TEST(test_copy);
+ CPPUNIT_TEST(test_fromC);
+ CPPUNIT_TEST(test_noacquire);
+ CPPUNIT_TEST(test_getArray);
+ CPPUNIT_TEST(test_same0);
+ CPPUNIT_TEST(test_diffLen);
+ CPPUNIT_TEST(test_diffElem);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
new file mode 100644
index 000000000..5b55d8a49
--- /dev/null
+++ b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
@@ -0,0 +1,18393 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <rtl/string.hxx>
+#include "rtl_String_Const.h"
+#include <rtl/strbuf.hxx>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <string.h>
+
+// This file contains cppunit tests for the
+// OString and OStringBuffer classes
+
+// testing constructors
+namespace rtl_OStringBuffer
+{
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+
+ void ctor_001()
+ {
+ OStringBuffer aStrBuf;
+ const char* pStr = aStrBuf.getStr();
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "New OStringBuffer containing no characters",
+ aStrBuf.isEmpty()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters",
+ '\0', *pStr
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters",
+ sal_Int32(16), aStrBuf.getCapacity()
+ );
+ }
+
+ void ctor_002()
+ {
+ OString aStrtmp( kTestStr1 );
+ OStringBuffer aStrBuftmp( aStrtmp );
+ OStringBuffer aStrBuf( aStrBuftmp );
+ // sal_Bool res = cmpstr(aStrBuftmp.getStr(),aStrBuf.getStr());
+
+ sal_Int32 nLenStrBuftmp = aStrBuftmp.getLength();
+
+ OString sStr(aStrBuftmp.getStr());
+ bool res = aStrtmp == sStr;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from another OStringBuffer",
+ nLenStrBuftmp, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from another OStringBuffer",
+ aStrBuftmp.getCapacity(), aStrBuf.getCapacity()
+ );
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "New OStringBuffer from another OStringBuffer",
+ res
+ );
+
+ }
+
+ void ctor_003()
+ {
+ OStringBuffer aStrBuf1(kTestStr2Len);
+ OStringBuffer aStrBuf2(0);
+
+ const char* pStr1 = aStrBuf1.getStr();
+ const char* pStr2 = aStrBuf2.getStr();
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ aStrBuf1.isEmpty()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ '\0', *pStr1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ kTestStr2Len, aStrBuf1.getCapacity()
+ );
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ aStrBuf2.isEmpty()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ '\0', *pStr2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ sal_Int32(0), aStrBuf2.getCapacity()
+ );
+
+ }
+
+ void ctor_004()
+ {
+ OString aStrtmp( kTestStr1 );
+ OStringBuffer aStrBuf( aStrtmp );
+ sal_Int32 leg = aStrBuf.getLength();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from OString",
+ aStrtmp, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from OString",
+ aStrtmp.pData->length, leg
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from OString",
+ leg+16, aStrBuf.getCapacity()
+
+ );
+ }
+
+ void ctor_005() {
+ OStringBuffer b1;
+ auto dummy = b1.makeStringAndClear();
+ (void)dummy;
+ OStringBuffer b2(b1);
+ (void)b2;
+ }
+
+ void ctor_006()
+ {
+ //pass in a const char*, get a temp
+ //OString
+ OStringBuffer aStrBuf(kTestStr1);
+ sal_Int32 leg = aStrBuf.getLength();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from const char*",
+ rtl_str_getLength(kTestStr1), leg
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from const char*",
+ leg+16, aStrBuf.getCapacity()
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST(ctor_002);
+ CPPUNIT_TEST(ctor_003);
+ CPPUNIT_TEST(ctor_004);
+ CPPUNIT_TEST(ctor_005);
+ CPPUNIT_TEST(ctor_006);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class makeStringAndClear : public CppUnit::TestFixture
+ {
+ OString arrOUS[6];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr1 );
+ arrOUS[1] = OString( kTestStr14 );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( kTestStr27 );
+ arrOUS[4] = OString( kTestStr29 );
+ arrOUS[5] = OString( "\0", 1 );
+
+ }
+
+ void makeStringAndClear_001()
+ {
+ OStringBuffer aStrBuf1;
+
+ bool lastRes = aStrBuf1.makeStringAndClear().isEmpty();
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "two empty strings(def. constructor)",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "two empty strings(def. constructor)",
+ sal_Int32(0), aStrBuf1.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "two empty strings(def. constructor)",
+ '\0', *(aStrBuf1.getStr())
+ );
+
+ }
+
+ void makeStringAndClear_002()
+ {
+ OStringBuffer aStrBuf2(26);
+
+ bool lastRes = aStrBuf2.makeStringAndClear().isEmpty();
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "two empty strings(with an argu)",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "two empty strings(with an argu)",
+ sal_Int32(0), aStrBuf2.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "two empty strings(with an argu)",
+ '\0', *(aStrBuf2.getStr())
+ );
+
+ }
+
+ void makeStringAndClear_003()
+ {
+ OStringBuffer aStrBuf3(arrOUS[0]);
+ OString aStr3(arrOUS[0]);
+
+ bool lastRes = (aStrBuf3.makeStringAndClear() == aStr3 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "normal string",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "normal string",
+ sal_Int32(0), aStrBuf3.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "normal string",
+ '\0', *(aStrBuf3.getStr())
+ );
+
+ }
+
+ void makeStringAndClear_004()
+ {
+ OStringBuffer aStrBuf4(arrOUS[1]);
+ OString aStr4(arrOUS[1]);
+
+ bool lastRes = (aStrBuf4.makeStringAndClear() == aStr4 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "string with space ",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "string with space ",
+ sal_Int32(0), aStrBuf4.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "string with space ",
+ '\0', *(aStrBuf4.getStr())
+ );
+ }
+
+ void makeStringAndClear_005()
+ {
+ OStringBuffer aStrBuf5(arrOUS[2]);
+ OString aStr5(arrOUS[2]);
+
+ bool lastRes = (aStrBuf5.makeStringAndClear() == aStr5 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "empty string",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "empty string",
+ sal_Int32(0), aStrBuf5.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "empty string",
+ '\0', *(aStrBuf5.getStr())
+ );
+ }
+
+ void makeStringAndClear_006()
+ {
+ OStringBuffer aStrBuf6(arrOUS[3]);
+ OString aStr6(arrOUS[3]);
+
+ bool lastRes = (aStrBuf6.makeStringAndClear() == aStr6 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "string with a character",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "string with a character",
+ sal_Int32(0), aStrBuf6.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "string with a character",
+ '\0', *(aStrBuf6.getStr())
+ );
+ }
+
+ void makeStringAndClear_007()
+ {
+ OStringBuffer aStrBuf7(arrOUS[4]);
+ OString aStr7(arrOUS[4]);
+
+ bool lastRes = (aStrBuf7.makeStringAndClear() == aStr7 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "string with special characters",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "string with special characters",
+ sal_Int32(0), aStrBuf7.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "string with special characters",
+ '\0', *(aStrBuf7.getStr())
+ );
+ }
+
+ void makeStringAndClear_008()
+ {
+ OStringBuffer aStrBuf8(arrOUS[5]);
+ OString aStr8(arrOUS[5]);
+
+ bool lastRes = (aStrBuf8.makeStringAndClear() == aStr8 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "string only with (\0)",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "string only with (\0)",
+ sal_Int32(0), aStrBuf8.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "string only with (\0)",
+ '\0', *(aStrBuf8.getStr())
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(makeStringAndClear);
+ CPPUNIT_TEST(makeStringAndClear_001);
+ CPPUNIT_TEST(makeStringAndClear_002);
+ CPPUNIT_TEST(makeStringAndClear_003);
+ CPPUNIT_TEST(makeStringAndClear_004);
+ CPPUNIT_TEST(makeStringAndClear_005);
+ CPPUNIT_TEST(makeStringAndClear_006);
+ CPPUNIT_TEST(makeStringAndClear_007);
+ CPPUNIT_TEST(makeStringAndClear_008);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class remove : public CppUnit::TestFixture
+ {
+ public:
+ void remove_001()
+ {
+ OStringBuffer sb(
+ RTL_CONSTASCII_STRINGPARAM("Red Hat, Inc."));
+
+ sb.remove(0, 4);
+ CPPUNIT_ASSERT(sb.toString().equalsL(
+ RTL_CONSTASCII_STRINGPARAM("Hat, Inc.")));
+
+ sb.remove(3, 6);
+ CPPUNIT_ASSERT(sb.toString().equalsL(
+ RTL_CONSTASCII_STRINGPARAM("Hat")));
+
+ sb.remove(0, 100);
+
+ CPPUNIT_ASSERT(sb.toString().isEmpty());
+
+ sb.append(RTL_CONSTASCII_STRINGPARAM("Red Hat, Inc."));
+
+ sb.remove(3, 100);
+
+ CPPUNIT_ASSERT(sb.toString().equalsL(
+ RTL_CONSTASCII_STRINGPARAM("Red")));
+
+ sb.remove(0, sb.getLength());
+
+ CPPUNIT_ASSERT(sb.toString().isEmpty());
+ }
+
+ CPPUNIT_TEST_SUITE(remove);
+ CPPUNIT_TEST(remove_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class getLength : public CppUnit::TestFixture
+ {
+ OString arrOUS[6];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr1 );
+ arrOUS[1] = OString( "1" );
+ arrOUS[2] = OString( );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( "\0", 1 );
+ arrOUS[5] = OString( kTestStr2 );
+
+ }
+
+ void getLength_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal = kTestStr1Len;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of ascii string",
+ expVal, aStrBuf.getLength()
+ );
+
+ }
+
+ void getLength_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal = 1;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of ascii string of size 1",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of empty string",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of empty string (empty ascii string arg)",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal = 1;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of string with \\0 embedded",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal = kTestStr2Len;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length(>16) of ascii string",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_007()
+ {
+ OStringBuffer aStrBuf;
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of empty string (default constructor)",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_008()
+ {
+ OStringBuffer aStrBuf( 26 );
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of empty string (with capacity)",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ CPPUNIT_TEST_SUITE( getLength );
+ CPPUNIT_TEST( getLength_001 );
+ CPPUNIT_TEST( getLength_002 );
+ CPPUNIT_TEST( getLength_003 );
+ CPPUNIT_TEST( getLength_004 );
+ CPPUNIT_TEST( getLength_005 );
+ CPPUNIT_TEST( getLength_006 );
+ CPPUNIT_TEST( getLength_007 );
+ CPPUNIT_TEST( getLength_008 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class getCapacity : public CppUnit::TestFixture
+ {
+ OString arrOUS[6];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr1 );
+ arrOUS[1] = OString( "1" );
+ arrOUS[2] = OString( );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( "\0", 1 );
+ arrOUS[5] = OString( kTestStr2 );
+
+ }
+
+ void getCapacity_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal = kTestStr1Len+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of ascii string",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void getCapacity_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal = 1+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of ascii string of size 1",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal = 0+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal = 0+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (empty ascii string arg)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal = 1+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of string with \\0 embedded",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal = kTestStr2Len+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity(>16) of ascii string",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_007()
+ {
+ OStringBuffer aStrBuf;
+ sal_Int32 expVal = 16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (default constructor)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_010()
+ {
+ OStringBuffer aStrBuf( 16 );
+ sal_Int32 expVal = 16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (with capacity 16)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_011()
+ {
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 expVal = 6;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (with capacity 6)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_012()
+ {
+ OStringBuffer aStrBuf( 0 );
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (with capacity 0)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ CPPUNIT_TEST_SUITE( getCapacity );
+ CPPUNIT_TEST( getCapacity_001 );
+ CPPUNIT_TEST( getCapacity_002 );
+ CPPUNIT_TEST( getCapacity_003 );
+ CPPUNIT_TEST( getCapacity_004 );
+ CPPUNIT_TEST( getCapacity_005 );
+ CPPUNIT_TEST( getCapacity_006 );
+ CPPUNIT_TEST( getCapacity_007 );
+ CPPUNIT_TEST( getCapacity_010 );
+ CPPUNIT_TEST( getCapacity_011 );
+ CPPUNIT_TEST( getCapacity_012 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class ensureCapacity : public CppUnit::TestFixture
+ {
+ void ensureCapacity_001()
+ {
+ sal_Int32 expVal = 16;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = 5;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is 5",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_002()
+ {
+ sal_Int32 expVal = 16;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = -5;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is -5",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_003()
+ {
+ sal_Int32 expVal = 16;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = 0;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is 0",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_004() //the testcase is based on comments
+ {
+ sal_Int32 expVal = 20;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = 20;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is 20",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_005()
+ {
+ sal_Int32 expVal = 50;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = 50;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is 50",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_006()
+ {
+ sal_Int32 expVal = 20;
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 input = 20;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 6, minimum is 20",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_007()
+ {
+ sal_Int32 expVal = 6;
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 input = 2;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 6, minimum is 2",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_008()
+ {
+ sal_Int32 expVal = 6;
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 input = -6;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 6, minimum is -6",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_009() //the testcase is based on comments
+ {
+ sal_Int32 expVal = 10;
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 input = 10;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 6, minimum is -6",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_010()
+ {
+ sal_Int32 expVal = 6;
+ OStringBuffer aStrBuf( 0 );
+ sal_Int32 input = 6;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 0, minimum is 6",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_011() //the testcase is based on comments
+ {
+ sal_Int32 expVal = 2; // capacity is x = (str->length + 1) * 2; minimum < x ? x : minimum
+ OStringBuffer aStrBuf( 0 );
+ sal_Int32 input = 1;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 0, minimum is 1",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_012()
+ {
+ sal_Int32 expVal = 0;
+ OStringBuffer aStrBuf( 0 );
+ sal_Int32 input = -1;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 0, minimum is -1",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( ensureCapacity );
+ CPPUNIT_TEST( ensureCapacity_001 );
+ CPPUNIT_TEST( ensureCapacity_002 );
+ CPPUNIT_TEST( ensureCapacity_003 );
+ CPPUNIT_TEST( ensureCapacity_004 );
+ CPPUNIT_TEST( ensureCapacity_005 );
+ CPPUNIT_TEST( ensureCapacity_006 );
+ CPPUNIT_TEST( ensureCapacity_007 );
+ CPPUNIT_TEST( ensureCapacity_008 );
+ CPPUNIT_TEST( ensureCapacity_009 );
+ CPPUNIT_TEST( ensureCapacity_010 );
+ CPPUNIT_TEST( ensureCapacity_011 );
+ CPPUNIT_TEST( ensureCapacity_012 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class setLength : public CppUnit::TestFixture
+ {
+ OString arrOUS[6];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr1 );
+ arrOUS[1] = OString( "1" );
+ arrOUS[2] = OString( );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( "\0", 1 );
+ arrOUS[5] = OString( kTestStr2 );
+
+ }
+
+ void setLength_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = 50;
+ OString expVal2( kTestStr1 );
+ sal_Int32 expVal3 = 50;
+ sal_Int32 input = 50;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(kTestStr1)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(kTestStr1)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(kTestStr1)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = kTestStr13Len;
+ OString expVal2( kTestStr1 );
+ sal_Int32 expVal3 = 32;
+ sal_Int32 input = kTestStr13Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(kTestStr1)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(kTestStr1)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(kTestStr1)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = kTestStr1Len;
+ OString expVal2( kTestStr1 );
+ sal_Int32 expVal3 = 32;
+ sal_Int32 input = kTestStr1Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OStringBuffer(kTestStr1)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OStringBuffer(kTestStr1)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OStringBuffer(kTestStr1)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = kTestStr7Len;
+ OString expVal2( kTestStr7 );
+ sal_Int32 expVal3 = 32;
+ sal_Int32 input = kTestStr7Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer(kTestStr1)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer(kTestStr1)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer(kTestStr1)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = 0;
+ sal_Int32 expVal3 = 32;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to 0",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to 0",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to 0",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal1 = 25;
+ OString expVal2( arrOUS[1] );
+ sal_Int32 expVal3 = 25;
+ sal_Int32 input = 25;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(1)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(1)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(1)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal1 = kTestStr27Len;
+ OString expVal2( arrOUS[1] );
+ sal_Int32 expVal3 = 17;
+ sal_Int32 input = kTestStr27Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OStringBuffer(1)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OStringBuffer(1)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OStringBuffer(1)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal1 = 0;
+ sal_Int32 expVal3 = 17;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OUStringBuffer(1)",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OUStringBuffer(1)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OUStringBuffer(1)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal1 = 20;
+ sal_Int32 expVal3 = 20;
+ sal_Int32 input = 20;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer()",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer()",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer()",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal1 = 3;
+ sal_Int32 expVal3 = 16;
+ sal_Int32 input = 3;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer()",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer()",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer()",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal1 = 0;
+ sal_Int32 expVal3 = 16;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer()",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer()",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer()",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal1 = 20;
+ sal_Int32 expVal3 = 20;
+ sal_Int32 input = 20;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer("")",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer("")",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer("")",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal1 = 5;
+ sal_Int32 expVal3 = 16;
+ sal_Int32 input = 5;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer("")",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer("")",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer("")",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal1 = 0;
+ sal_Int32 expVal3 = 16;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer("")",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer("")",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer("")",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal1 = 20;
+ sal_Int32 expVal3 = 20;
+ sal_Int32 input = 20;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(\0)",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(\0)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(\0)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal1 = 5;
+ sal_Int32 expVal3 = 17;
+ sal_Int32 input = 5;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(\0)",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(\0)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(\0)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal1 = 0;
+ sal_Int32 expVal3 = 17;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer(\0)",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer(\0)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer(\0)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = 50;
+ OString expVal2( kTestStr2 );
+ sal_Int32 expVal3 = 66;
+ sal_Int32 input = 50;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(kTestStr2)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(kTestStr2)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(kTestStr2)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = 40;
+ OString expVal2(kTestStr2);
+ sal_Int32 expVal3 = 48;
+ sal_Int32 input = 40;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(kTestStr2)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(kTestStr2)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(kTestStr2)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = kTestStr2Len;
+ OString expVal2(kTestStr2);
+ sal_Int32 expVal3 = 48;
+ sal_Int32 input = kTestStr2Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OUStringBuffer(kTestStr2)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OUStringBuffer(kTestStr2)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to the length of OUStringBuffer(kTestStr2)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = kTestStr7Len;
+ OString expVal2(kTestStr7);
+ sal_Int32 expVal3 = 48;
+ sal_Int32 input = kTestStr7Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OUStringBuffer(TestStr2)",
+ expVal2, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OUStringBuffer(TestStr2)",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength less than the length of OUStringBuffer(TestStr2)",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void setLength_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = 0;
+ sal_Int32 expVal3 = 48;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to 0",
+ '\0', aStrBuf.getStr()[0]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to 0",
+ expVal1, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "newLength equal to 0",
+ expVal3, aStrBuf.getCapacity()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( setLength );
+ CPPUNIT_TEST( setLength_001 );
+ CPPUNIT_TEST( setLength_002 );
+ CPPUNIT_TEST( setLength_003 );
+ CPPUNIT_TEST( setLength_004 );
+ CPPUNIT_TEST( setLength_005 );
+ CPPUNIT_TEST( setLength_006 );
+ CPPUNIT_TEST( setLength_007 );
+ CPPUNIT_TEST( setLength_008 );
+ CPPUNIT_TEST( setLength_009 );
+ CPPUNIT_TEST( setLength_010 );
+ CPPUNIT_TEST( setLength_011 );
+ CPPUNIT_TEST( setLength_012 );
+ CPPUNIT_TEST( setLength_013 );
+ CPPUNIT_TEST( setLength_014 );
+ CPPUNIT_TEST( setLength_015 );
+ CPPUNIT_TEST( setLength_016 );
+ CPPUNIT_TEST( setLength_017 );
+ CPPUNIT_TEST( setLength_018 );
+ CPPUNIT_TEST( setLength_019 );
+ CPPUNIT_TEST( setLength_020 );
+ CPPUNIT_TEST( setLength_021 );
+ CPPUNIT_TEST( setLength_022 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class csuc : public CppUnit::TestFixture
+ {
+ void csuc_001()
+ {
+ const char* expVal = kTestStr1;
+ OStringBuffer aStrBuf( kTestStr1 );
+ sal_Int32 cmpLen = kTestStr1Len;
+
+ // LLA: wrong access! const char* pstr = *&aStrBuf;
+ const char* pstr = aStrBuf.getStr();
+ int nEqual = strncmp(pstr, expVal, cmpLen);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test normal string",
+ /* cmpstr( pstr, expVal, cmpLen ) */
+ 0, nEqual
+ );
+
+ }
+
+ void csuc_002()
+ {
+ OStringBuffer aStrBuf;
+
+ // LLA: wrong access! const char* pstr = *&aStrBuf;
+ const char* pstr = aStrBuf.getStr();
+ sal_Int32 nLen = strlen(pstr);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test empty string",
+ // cmpstr( pstr, &expVal, cmpLen )
+ static_cast<sal_Int32>(0), nLen
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( csuc );
+ CPPUNIT_TEST( csuc_001 );
+ CPPUNIT_TEST( csuc_002 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class getStr : public CppUnit::TestFixture
+ {
+ void getStr_001()
+ {
+ const char* expVal = kTestStr1;
+ OStringBuffer aStrBuf( kTestStr1 );
+ sal_Int32 cmpLen = kTestStr1Len;
+
+ const char* pstr = aStrBuf.getStr();
+ int nEqual = strncmp(pstr, expVal, cmpLen);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test normal string",
+ 0, nEqual
+ );
+
+ }
+
+ void getStr_002()
+ {
+ OStringBuffer aStrBuf;
+ const char* pstr = aStrBuf.getStr();
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test empty string",
+ pstr != nullptr
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test empty string",
+ '\0', pstr[0]
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( getStr );
+ CPPUNIT_TEST( getStr_001 );
+ CPPUNIT_TEST( getStr_002 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_001 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ OString empty; // silence loplugin
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_001_001()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString input2( kTestStr8 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_002()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString input2( kTestStr36 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_003()
+ {
+ OString expVal( kTestStr37 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString input2( kTestStr23 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_004()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+
+ aStrBuf.append( empty );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_005()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString input2( kTestStr7 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_006()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString input2( kTestStr2 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_007()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString input2( kTestStr1 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_008()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[1] );
+
+ aStrBuf.append( empty );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_009()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString input2( kTestStr7 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_010()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString input2( kTestStr2 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_011()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString input2( kTestStr1 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_012()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[2] );
+
+ aStrBuf.append( empty );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_013()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString input2( kTestStr7 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_014()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString input2( kTestStr2 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_015()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString input2( kTestStr1 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_016()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[3] );
+
+ aStrBuf.append( empty );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_017()
+ {
+ OString expVal( kTestStr29 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString input2( kTestStr38 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_018()
+ {
+ OString expVal( kTestStr39 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString input2( kTestStr17 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_019()
+ {
+ OString expVal( kTestStr40 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString input2( kTestStr31 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_001_020()
+ {
+ OString expVal( kTestStr28 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+
+ aStrBuf.append( empty );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_null()
+ {
+ OStringBuffer aStrBuf("hello world");
+
+ aStrBuf.append('\0');
+ aStrBuf.append('\1');
+ aStrBuf.append('\2');
+
+ aStrBuf.append("hello world");
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "should be able to append nulls",
+ sal_Int32(2 * RTL_CONSTASCII_LENGTH("hello world") + 3), aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "should be able to append nulls",
+ '\0', aStrBuf[RTL_CONSTASCII_LENGTH("hello world")]
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "should be able to append nulls",
+ 1, aStrBuf[RTL_CONSTASCII_LENGTH("hello world")]+1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "should be able to append nulls",
+ 2, aStrBuf[RTL_CONSTASCII_LENGTH("hello world")]+2
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_001 );
+ CPPUNIT_TEST( append_001_001 );
+ CPPUNIT_TEST( append_001_002 );
+ CPPUNIT_TEST( append_001_003 );
+ CPPUNIT_TEST( append_001_004 );
+ CPPUNIT_TEST( append_001_005 );
+ CPPUNIT_TEST( append_001_006 );
+ CPPUNIT_TEST( append_001_007 );
+ CPPUNIT_TEST( append_001_008 );
+ CPPUNIT_TEST( append_001_009 );
+ CPPUNIT_TEST( append_001_010 );
+ CPPUNIT_TEST( append_001_011 );
+ CPPUNIT_TEST( append_001_012 );
+ CPPUNIT_TEST( append_001_013 );
+ CPPUNIT_TEST( append_001_014 );
+ CPPUNIT_TEST( append_001_015 );
+ CPPUNIT_TEST( append_001_016 );
+ CPPUNIT_TEST( append_001_017 );
+ CPPUNIT_TEST( append_001_018 );
+ CPPUNIT_TEST( append_001_019 );
+ CPPUNIT_TEST( append_001_020 );
+ CPPUNIT_TEST( append_null );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_002 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_002_001()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input = kTestStr8;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_002()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input = kTestStr36;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_003()
+ {
+ OString expVal( kTestStr37 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input = kTestStr23;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_004()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_005()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input = kTestStr7;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_006()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input = kTestStr2;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_007()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input = kTestStr1;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_008()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_009()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input = kTestStr7;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_010()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input = kTestStr2;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_011()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input = kTestStr1;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_012()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_013()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input = kTestStr7;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_014()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input = kTestStr2;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_015()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input = kTestStr1;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_016()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_017()
+ {
+ OString expVal( kTestStr29 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input = kTestStr38;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_018()
+ {
+ OString expVal( kTestStr39 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input = kTestStr17;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_019()
+ {
+ OString expVal( kTestStr40 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input = kTestStr31;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002_020()
+ {
+ OString expVal( kTestStr28 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_002_021()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( kSInt32Max );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer(with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_002 );
+ CPPUNIT_TEST( append_002_001 );
+ CPPUNIT_TEST( append_002_002 );
+ CPPUNIT_TEST( append_002_003 );
+ CPPUNIT_TEST( append_002_004 );
+ CPPUNIT_TEST( append_002_005 );
+ CPPUNIT_TEST( append_002_006 );
+ CPPUNIT_TEST( append_002_007 );
+ CPPUNIT_TEST( append_002_008 );
+ CPPUNIT_TEST( append_002_009 );
+ CPPUNIT_TEST( append_002_010 );
+ CPPUNIT_TEST( append_002_011 );
+ CPPUNIT_TEST( append_002_012 );
+ CPPUNIT_TEST( append_002_013 );
+ CPPUNIT_TEST( append_002_014 );
+ CPPUNIT_TEST( append_002_015 );
+ CPPUNIT_TEST( append_002_016 );
+ CPPUNIT_TEST( append_002_017 );
+ CPPUNIT_TEST( append_002_018 );
+ CPPUNIT_TEST( append_002_019 );
+ CPPUNIT_TEST( append_002_020 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_002_021 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_003 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_003_001()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input1 = kTestStr36;
+ sal_Int32 input2 = 12;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_002()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input1 = kTestStr36;
+ sal_Int32 input2 = 28;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_003()
+ {
+ OString expVal( kTestStr37 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input1 = kTestStr23;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_004()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_006()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 4;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_007()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 32;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_008()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_009()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_011()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 4;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_012()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 32;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_013()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_014()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_016()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 4;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_017()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 32;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_018()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_019()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_021()
+ {
+ OString expVal( kTestStr29 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input1 = kTestStr38;
+ sal_Int32 input2 = 7;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_022()
+ {
+ OString expVal( kTestStr39 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input1 = kTestStr17;
+ sal_Int32 input2 = 22;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_023()
+ {
+ OString expVal( kTestStr40 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input1 = kTestStr31;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003_024()
+ {
+ OString expVal( kTestStr28 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_003 );
+ CPPUNIT_TEST( append_003_001 );
+ CPPUNIT_TEST( append_003_002 );
+ CPPUNIT_TEST( append_003_003 );
+ CPPUNIT_TEST( append_003_004 );
+ CPPUNIT_TEST( append_003_006 );
+ CPPUNIT_TEST( append_003_007 );
+ CPPUNIT_TEST( append_003_008 );
+ CPPUNIT_TEST( append_003_009 );
+ CPPUNIT_TEST( append_003_011 );
+ CPPUNIT_TEST( append_003_012 );
+ CPPUNIT_TEST( append_003_013 );
+ CPPUNIT_TEST( append_003_014 );
+ CPPUNIT_TEST( append_003_016 );
+ CPPUNIT_TEST( append_003_017 );
+ CPPUNIT_TEST( append_003_018 );
+ CPPUNIT_TEST( append_003_019 );
+ CPPUNIT_TEST( append_003_021 );
+ CPPUNIT_TEST( append_003_022 );
+ CPPUNIT_TEST( append_003_023 );
+ CPPUNIT_TEST( append_003_024 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_004 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_004_001()
+ {
+ OString expVal( kTestStr45 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_002()
+ {
+ OString expVal( kTestStr46 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_003()
+ {
+ OString expVal( kTestStr47 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_004()
+ {
+ OString expVal( kTestStr48 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_005()
+ {
+ OString expVal( kTestStr47 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_006()
+ {
+ OString expVal( kTestStr48 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_007()
+ {
+ OString expVal( kTestStr47 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_008()
+ {
+ OString expVal( kTestStr48 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_009()
+ {
+ OString expVal( kTestStr49 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004_010()
+ {
+ OString expVal( kTestStr50 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_004_011()
+ {
+ OString expVal( kTestStr47 );
+ OStringBuffer aStrBuf( kSInt32Max );
+ sal_Bool input = sal_True;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer(with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_012()
+ {
+ OString expVal( kTestStr48 );
+ OStringBuffer aStrBuf( kSInt32Max );
+ sal_Bool input = sal_False;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer(with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_004 );
+ CPPUNIT_TEST( append_004_001 );
+ CPPUNIT_TEST( append_004_002 );
+ CPPUNIT_TEST( append_004_003 );
+ CPPUNIT_TEST( append_004_004 );
+ CPPUNIT_TEST( append_004_005 );
+ CPPUNIT_TEST( append_004_006 );
+ CPPUNIT_TEST( append_004_007 );
+ CPPUNIT_TEST( append_004_008 );
+ CPPUNIT_TEST( append_004_009 );
+ CPPUNIT_TEST( append_004_010 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_004_011 );
+ CPPUNIT_TEST( append_004_012 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append(char c)
+
+ class append_005 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_001()
+ {
+ OString expVal( kTestStr51 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ char input = 'M';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(M) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(M) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OString expVal( kTestStr143 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Unicode(kSInt8Max) to the string buffer arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the sal_Unicode(kSInt8Max) to the string buffer arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OString expVal( kTestStr27 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OString expVal( kTestStr144 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005_005()
+ {
+ OString expVal( kTestStr27 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OString expVal( kTestStr144 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OString expVal( kTestStr27 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OString expVal( kTestStr144 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OString expVal( kTestStr56 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OString expVal( kTestStr145 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_011()
+ {
+ OString expVal( kTestStr27 );
+ OStringBuffer aStrBuf( kSInt32Max );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(s) to the string buffer(with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_012()
+ {
+ OString expVal( kTestStr144 );
+ OStringBuffer aStrBuf( kSInt32Max );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_005 );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_006_Int32 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_051()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_052()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_053()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_054()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_055()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_056()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_057()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_058()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_059()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_060()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_061()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_062()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_063()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_064()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_065()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_066()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_067()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_068()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_069()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_070()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_071()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_072()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_073()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_074()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_075()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_076()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_077()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_078()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_079()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_080()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_081()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_082()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_083()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_084()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_085()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_086()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_087()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_088()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_089()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_090()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_091()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_092()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_093()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_094()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_095()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_096()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_097()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_098()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_099()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_100()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_006_Int32 );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 );
+ CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 );
+ CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 );
+ CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 );
+ CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 );
+ CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 );
+ CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 );
+ CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 );
+ CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 );
+ CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 );
+ CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 );
+ CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 );
+ CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 );
+ CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 );
+ CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 );
+ CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 );
+ CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 );
+ CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 );
+ CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 );
+ CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 );
+ CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 );
+ CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 );
+ CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 );
+ CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 );
+ CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int32 i, sal_Int16 radix=2 )
+// where i = large constants
+// testing the method append( sal_Int32 i, sal_Int16 radix=8 )
+// where i = large constants
+// testing the method append( sal_Int32 i, sal_Int16 radix=10 )
+// where i = large constants
+// testing the method append( sal_Int32 i, sal_Int16 radix=16 )
+// where i = large constants
+// testing the method append( sal_Int32 i, sal_Int16 radix=36 )
+// where i = large constants
+
+ class append_006_Int32_Bounderies : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_006_Int32_Bounderies );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int32 i, sal_Int16 radix=2 )
+// for negative value
+// testing the method append( sal_Int32 i, sal_Int16 radix=8 )
+// for negative value
+// testing the method append( sal_Int32 i, sal_Int16 radix=10 )
+// for negative value
+// testing the method append( sal_Int32 i, sal_Int16 radix=16 )
+// for negative value
+// testing the method append( sal_Int32 i, sal_Int16 radix=36 )
+// for negative value
+
+ class append_006_Int32_Negative : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_051()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_052()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_053()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_054()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_055()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_056()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_057()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_058()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_059()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_060()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_061()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_062()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_063()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_064()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_065()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_066()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_067()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_068()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_069()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_070()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_071()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_072()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_073()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_074()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_075()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_076()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_077()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_078()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_079()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_080()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_081()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_082()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_083()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_084()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_085()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_086()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_087()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_088()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_089()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_090()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_091()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_092()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_093()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_094()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_095()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_096()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_097()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_098()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+ }
+
+ void append_099()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+ }
+
+ void append_100()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+ }
+
+ CPPUNIT_TEST_SUITE( append_006_Int32_Negative );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 );
+ CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 );
+ CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 );
+ CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 );
+ CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 );
+ CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 );
+ CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 );
+ CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 );
+ CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 );
+ CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 );
+ CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 );
+ CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 );
+ CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 );
+ CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 );
+ CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 );
+ CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 );
+ CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 );
+ CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 );
+ CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 );
+ CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 );
+ CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 );
+ CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 );
+ CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 );
+ CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 );
+ CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_006_Int32_defaultParam : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr59 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[0]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[0]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr62 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[0]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[0]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr63 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[0]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[0]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr64 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[0]+2147483647",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[0]+2147483647",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr65 );
+ sal_Int32 input = kNonSInt32Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[0]+(-2147483648)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[0]+(-2147483648)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr60 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[1]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[1]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr66 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[1]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[1]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr67 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[1]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[1]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr68 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[1]+2147483647",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[1]+2147483647",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr69 );
+ sal_Int32 input = SAL_MIN_INT32 /*-2147483648*/;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[1]+(-2147483648)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[1]+(-2147483648)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr60 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[2]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[2]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr66 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OUStringBuffer[2]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OUStringBuffer[2]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr67 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OUStringBuffer[2]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OUStringBuffer[2]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr68 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[2]+2147483647",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[2]+2147483647",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr69 );
+ sal_Int32 input = SAL_MIN_INT32;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[2]+(-2147483648)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[2]+(-2147483648)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr60 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[3]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[3]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr66 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[3]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[3]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr67 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[3]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[3]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr68 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[3]+2147483647",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[3]+2147483647",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr69 );
+ sal_Int32 input = SAL_MIN_INT32;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[3]+(-2147483648)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[3]+(-2147483648)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr61 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[4]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[4]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr70 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[4]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[4]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr71 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[4]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[4]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr72 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[4]+2147483647",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[4]+2147483647",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr73 );
+ sal_Int32 input = SAL_MIN_INT32;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[4]+(-2147483648)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[4]+(-2147483648)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+#ifdef WITH_CORE
+ void append_026()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr60 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer(kSInt32Max)+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr66 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer(kSInt32Max)+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr67 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer(kSInt32Max)+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr68 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer(kSInt32Max)+2147483647",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr69 );
+ sal_Int32 input = SAL_MIN_INT32;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer(kSInt32Max)+(-2147483648)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_006_Int32_defaultParam );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 );
+ CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 );
+ CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 );
+ CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 );
+ CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 );
+ CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 );
+ CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 );
+ CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 );
+ CPPUNIT_TEST( append_030 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int64 l, sal_Int16 radix=2 )
+// testing the method append( sal_Int64 l, sal_Int16 radix=8 )
+// testing the method append( sal_Int64 l, sal_Int16 radix=10 )
+// testing the method append( sal_Int64 l, sal_Int16 radix=16 )
+// testing the method append( sal_Int64 l, sal_Int16 radix=36 )
+
+ class append_007_Int64 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_051()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_052()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_053()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_054()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_055()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_056()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_057()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_058()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_059()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_060()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_061()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_062()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_063()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_064()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_065()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_066()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_067()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_068()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_069()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_070()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_071()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_072()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_073()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_074()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_075()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_076()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_077()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_078()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_079()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_080()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_081()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_082()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_083()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_084()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_085()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_086()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_087()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_088()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_089()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_090()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_091()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_092()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_093()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_094()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_095()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_096()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_097()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_098()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_099()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_100()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_007_Int64 );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 );
+ CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 );
+ CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 );
+ CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 );
+ CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 );
+ CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 );
+ CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 );
+ CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 );
+ CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 );
+ CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 );
+ CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 );
+ CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 );
+ CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 );
+ CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 );
+ CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 );
+ CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 );
+ CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 );
+ CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 );
+ CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 );
+ CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 );
+ CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 );
+ CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 );
+ CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 );
+ CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 );
+ CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int64 i, sal_Int16 radix=2 )
+// where i = large constants
+// testing the method append( sal_Int64 i, sal_Int16 radix=8 )
+// where i = large constants
+// testing the method append( sal_Int64 i, sal_Int16 radix=10 )
+// where i = large constants
+// testing the method append( sal_Int64 i, sal_Int16 radix=16 )
+// where i = large constants
+// testing the method append( sal_Int64 i, sal_Int16 radix=36 )
+// where i = large constants
+
+ class append_007_Int64_Bounderies : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_007_Int64_Bounderies );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int64 i, sal_Int16 radix=2 )
+// for negative value
+// testing the method append( sal_Int64 i, sal_Int16 radix=8 )
+// for negative value
+// testing the method append( sal_Int64 i, sal_Int16 radix=10 )
+// for negative value
+// testing the method append( sal_Int64 i, sal_Int16 radix=16 )
+// for negative value
+// testing the method append( sal_Int64 i, sal_Int16 radix=36 )
+// for negative value
+
+ class append_007_Int64_Negative : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_051()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_052()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_053()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_054()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_055()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_056()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_057()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_058()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_059()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_060()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_061()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_062()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_063()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_064()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_065()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_066()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_067()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_068()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_069()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_070()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_071()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_072()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_073()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_074()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_075()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_076()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_077()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_078()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_079()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_080()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_081()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_082()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_083()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_084()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_085()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_086()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_087()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_088()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_089()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_090()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_091()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_092()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_093()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_094()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_095()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_096()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_097()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_098()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_099()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_100()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_007_Int64_Negative );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 );
+ CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 );
+ CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 );
+ CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 );
+ CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 );
+ CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 );
+ CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 );
+ CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 );
+ CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 );
+ CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 );
+ CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 );
+ CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 );
+ CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 );
+ CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 );
+ CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 );
+ CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 );
+ CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 );
+ CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 );
+ CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 );
+ CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 );
+ CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 );
+ CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 );
+ CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 );
+ CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 );
+ CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_007_Int64_defaultParam : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr59 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[0]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[0]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr62 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[0]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[0]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr63 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[0]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[0]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr116 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[0]+9223372036854775807",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[0]+9223372036854775807",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr117 );
+ sal_Int64 input = SAL_MIN_INT64/*-9223372036854775808*/; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ bool bRes = expVal == aStrBuf.getStr();
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[0]+(-9223372036854775808)",
+ bRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[0]+(-9223372036854775808)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr60 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[1]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[1]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr66 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[1]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[1]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr67 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[1]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[1]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr118 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[1]+9223372036854775807",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[1]+9223372036854775807",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr119 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[1]+(-9223372036854775808)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[1]+(-9223372036854775808)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr60 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[2]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[2]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr66 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OUStringBuffer[2]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OUStringBuffer[2]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr67 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OUStringBuffer[2]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OUStringBuffer[2]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr118 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[2]+9223372036854775807",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[2]+9223372036854775807",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr119 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[2]+(-9223372036854775808)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[2]+(-9223372036854775808)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr60 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[3]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[3]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr66 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[3]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[3]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr67 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[3]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[3]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr118 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[3]+9223372036854775807",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[3]+9223372036854775807",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr119 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[3]+(-9223372036854775808)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[3]+(-9223372036854775808)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr61 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[4]+11",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[4]+11",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr70 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[4]+0",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[4]+0",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr71 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[4]+(-11)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[4]+(-11)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr120 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[4]+9223372036854775807",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[4]+9223372036854775807",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr121 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[4]+(-9223372036854775808)",
+ expVal, aStrBuf.toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[4]+(-9223372036854775808)",
+ expVal.getLength(), aStrBuf.getLength()
+ );
+
+ }
+#ifdef WITH_CORE
+ void append_026()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr60 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer(kSInt64Max)+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr66 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer(kSInt64Max)+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr67 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer(kSInt64Max)+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr118 );
+ sal_Int64 input = 9223372036854775807;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer(kSInt64Max)+9223372036854775807",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr119 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer(kSInt64Max)+(-9223372036854775808)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_007_Int64_defaultParam );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 );
+ CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 );
+ CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 );
+ CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 );
+ CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 );
+ CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 );
+ CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 );
+ CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 );
+ CPPUNIT_TEST( append_030 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( float f )
+
+ class checkfloat : public CppUnit::TestFixture
+ {
+ public:
+ bool checkIfStrBufContainAtPosTheFloat(OStringBuffer const& _sStrBuf, sal_Int32 _nLen, float _nFloat)
+ {
+ OString sFloatValue = OString::number(_nFloat);
+
+ OString sBufferString(_sStrBuf.getStr());
+ sal_Int32 nPos = sBufferString.indexOf(sFloatValue);
+ return nPos >= 0 && nPos == _nLen;
+ }
+ };
+
+ class append_008_float : public checkfloat
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.0"));
+
+ // LLA:
+ // the complex problem is here, that a float value is not really what we write.
+ // So a 3.0 could also be 3 or 3.0 or 3.0000001 or 2.9999999
+ // this has to be checked.
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_036()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.0");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.5");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.0625");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.502525");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.141592");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.5025255");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.00390625");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_008_float );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 );
+ CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 );
+ CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 );
+ CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 );
+ CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 );
+ CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 );
+ CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 );
+ CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 );
+ CPPUNIT_TEST( append_030 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( float f ) for negative value
+
+ class append_008_Float_Negative : public checkfloat
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("-3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("-3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("-3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("-3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_036()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.0");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.5");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.0625");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.502525");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.141592");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.5025255");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.00390625");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_008_Float_Negative );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 );
+ CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 );
+ CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 );
+ CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 );
+ CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 );
+ CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 );
+ CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 );
+ CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 );
+ CPPUNIT_TEST( append_030 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( double d )
+
+ class checkdouble : public CppUnit::TestFixture
+ {
+ public:
+ bool checkIfStrBufContainAtPosTheDouble(OStringBuffer const& _sStrBuf, sal_Int32 _nLen, double _nDouble)
+ {
+ OString sDoubleValue = OString::number(_nDouble);
+
+ OString sBufferString(_sStrBuf.getStr());
+ sal_Int32 nPos = sBufferString.indexOf(sDoubleValue);
+ return nPos >= 0 && nPos == _nLen;
+ }
+ };
+
+ class append_009_double : public checkdouble
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ double input = atof("3.0");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.0",
+ checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ double input = atof("3.141592653589793238462643");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[4] append 3.141592653589793238462643",
+ checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input)
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_009_double );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_035 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( double f ) for negative value
+
+ class append_009_Double_Negative : public checkdouble
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ double input = atof("-3.0");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.0",
+ checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ double input = atof("-3.141592653589793238462643");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[4] append -3.141592653589793238462643",
+ checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input)
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_009_Double_Negative );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_035 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class AppendUninitialized: public CppUnit::TestFixture {
+ private:
+ void testEmpty();
+
+ void testNonEmpty();
+
+ void testZero();
+
+ CPPUNIT_TEST_SUITE(AppendUninitialized);
+ CPPUNIT_TEST(testEmpty);
+ CPPUNIT_TEST(testNonEmpty);
+ CPPUNIT_TEST(testZero);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ void AppendUninitialized::testEmpty() {
+ OStringBuffer s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ char * p = s.appendUninitialized(5);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr()),
+ static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ }
+
+ void AppendUninitialized::testNonEmpty() {
+ OStringBuffer s("ab");
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s.getLength());
+ char * p = s.appendUninitialized(5);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr() + 2),
+ static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength());
+ }
+
+ void AppendUninitialized::testZero() {
+ OStringBuffer s;
+ char * p = s.appendUninitialized(0);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr()),
+ static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+} // namespace rtl_OStringBuffer
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::ctors);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::makeStringAndClear);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getCapacity);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::ensureCapacity);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::setLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::csuc);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getStr);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_001);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_002);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_003);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_004);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_005);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_Bounderies);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_Negative);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_defaultParam);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_Bounderies);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_Negative);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_defaultParam);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_008_float);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_008_Float_Negative);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_009_double);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_009_Double_Negative);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::AppendUninitialized);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::remove);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/OStringBuffer/rtl_String_Const.h b/sal/qa/OStringBuffer/rtl_String_Const.h
new file mode 100644
index 000000000..551191fcc
--- /dev/null
+++ b/sal/qa/OStringBuffer/rtl_String_Const.h
@@ -0,0 +1,468 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H
+#define INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H
+
+#include <limits.h>
+#include <sal/types.h>
+#include <rtl/textenc.h>
+#include <rtl/ustring.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+const rtl_TextEncoding kEncodingRTLTextUSASCII = RTL_TEXTENCODING_ASCII_US;
+
+const sal_uInt32 kConvertFlagsOUStringToOString = OUSTRING_TO_OSTRING_CVTFLAGS;
+const sal_uInt32 kConvertFlagsOStringToOUString = OSTRING_TO_OUSTRING_CVTFLAGS;
+
+const char * const kTestStr1 = "Sun Microsystems";
+const char * const kTestStr2 = "Sun Microsystems Java Technology";
+const char * const kTestStr7 = "Sun ";
+const char * const kTestStr8 = "Microsystems";
+const char * const kTestStr14 = " Sun Microsystems";
+const char * const kTestStr17 = " Sun Microsystems ";
+const char * const kTestStr23 = " Java Technology";
+const char * const kTestStr25 = "";
+const char * const kTestStr27 = "s";
+const char * const kTestStr28 = "\50\3\5\7\11\13\15\17sun";
+const char * const kTestStr29 = "\50\3\5\7\11\13\15\17sun\21\23\25\27\31\33\50";
+const char * const kTestStr31 = "sun Microsystems";
+const char * const kTestStr36 = "Microsystems Java Technology";
+const char * const kTestStr37 = "Sun Java Technology";
+const char * const kTestStr38 = "\21\23\25\27\31\33\50";
+const char * const kTestStr39 = "\50\3\5\7\11\13\15\17sun Sun Microsystems ";
+const char * const kTestStr40 = "\50\3\5\7\11\13\15\17sunsun Microsystems";
+const char * const kTestStr45 = "Sun true";
+const char * const kTestStr46 = "Sun false";
+const char * const kTestStr47 = "true";
+const char * const kTestStr48 = "false";
+const char * const kTestStr49 = "\50\3\5\7\11\13\15\17suntrue";
+const char * const kTestStr50 = "\50\3\5\7\11\13\15\17sunfalse";
+const char * const kTestStr51 = "Sun M";
+//static const char *kTestStr52 = "Sun \077777";
+//static const char *kTestStr53 = "Sun \100000";
+//static const char *kTestStr54 = "\77777";
+//static const char *kTestStr55 = "\100000";
+const char * const kTestStr56 = "\50\3\5\7\11\13\15\17suns";
+//static const char *kTestStr57 = "\50\3\5\7\11\13\15\17sun\77777";
+//static const char *kTestStr58 = "\50\3\5\7\11\13\15\17sun\10000";
+const char * const kTestStr59 = "Sun 11";
+const char * const kTestStr60 = "11";
+const char * const kTestStr61 = "\50\3\5\7\11\13\15\17sun11";
+const char * const kTestStr62 = "Sun 0";
+const char * const kTestStr63 = "Sun -11";
+const char * const kTestStr64 = "Sun 2147483647";
+const char * const kTestStr65 = "Sun -2147483648";
+const char * const kTestStr66 = "0";
+const char * const kTestStr67 = "-11";
+const char * const kTestStr68 = "2147483647";
+const char * const kTestStr69 = "-2147483648";
+const char * const kTestStr70 = "\50\3\5\7\11\13\15\17sun0";
+const char * const kTestStr71 = "\50\3\5\7\11\13\15\17sun-11";
+const char * const kTestStr72 = "\50\3\5\7\11\13\15\17sun2147483647";
+const char * const kTestStr73 = "\50\3\5\7\11\13\15\17sun-2147483648";
+const char * const kTestStr116 = "Sun 9223372036854775807";
+const char * const kTestStr117 = "Sun -9223372036854775808";
+const char * const kTestStr118 = "9223372036854775807";
+const char * const kTestStr119 = "-9223372036854775808";
+const char * const kTestStr120 = "\50\3\5\7\11\13\15\17sun9223372036854775807";
+const char * const kTestStr121 = "\50\3\5\7\11\13\15\17sun-9223372036854775808";
+const char * const kTestStr143 = "Sun \377";
+const char * const kTestStr144 = "\377";
+const char * const kTestStr145 = "\50\3\5\7\11\13\15\17sun\377";
+
+const sal_Int32 kTestStr1Len = 16;
+const sal_Int32 kTestStr2Len = 32;
+const sal_Int32 kTestStr3Len = 16;
+const sal_Int32 kTestStr4Len = 16;
+const sal_Int32 kTestStr5Len = 16;
+const sal_Int32 kTestStr6Len = 15;
+const sal_Int32 kTestStr7Len = 4;
+const sal_Int32 kTestStr8Len = 12;
+const sal_Int32 kTestStr9Len = 32;
+const sal_Int32 kTestStr10Len = 17;
+const sal_Int32 kTestStr11Len = 17;
+const sal_Int32 kTestStr12Len = 18;
+const sal_Int32 kTestStr13Len = 19;
+const sal_Int32 kTestStr14Len = 19;
+const sal_Int32 kTestStr15Len = 20;
+const sal_Int32 kTestStr16Len = 20;
+const sal_Int32 kTestStr17Len = 22;
+const sal_Int32 kTestStr18Len = 16;
+const sal_Int32 kTestStr19Len = 22;
+const sal_Int32 kTestStr20Len = 3;
+const sal_Int32 kTestStr21Len = 3;
+const sal_Int32 kTestStr22Len = 32;
+const sal_Int32 kTestStr23Len = 16;
+const sal_Int32 kTestStr24Len = 31;
+const sal_Int32 kTestStr25Len = 0;
+const sal_Int32 kTestStr26Len = 4;
+const sal_Int32 kTestStr27Len = 1;
+const sal_Int32 kTestStr28Len = 11;
+const sal_Int32 kTestStr29Len = 18;
+const sal_Int32 kTestStr30Len = 10;
+const sal_Int32 kTestStr31Len = 16;
+const sal_Int32 kTestStr32Len = 16;
+const sal_Int32 kTestStr33Len = 1;
+const sal_Int32 kTestStr34Len = 11;
+const sal_Int32 kTestStr35Len = 11;
+const sal_Int32 kTestStr36Len = 28;
+const sal_Int32 kTestStr37Len = 20;
+const sal_Int32 kTestStr38Len = 7;
+const sal_Int32 kTestStr39Len = 33;
+const sal_Int32 kTestStr40Len = 27;
+const sal_Int32 kTestStr41Len = 3;
+const sal_Int32 kTestStr42Len = 10;
+const sal_Int32 kTestStr43Len = 13;
+const sal_Int32 kTestStr44Len = 2;
+const sal_Int32 kTestStr45Len = 8;
+const sal_Int32 kTestStr46Len = 9;
+const sal_Int32 kTestStr47Len = 4;
+const sal_Int32 kTestStr48Len = 5;
+const sal_Int32 kTestStr49Len = 15;
+const sal_Int32 kTestStr50Len = 16;
+const sal_Int32 kTestStr51Len = 5;
+const sal_Int32 kTestStr52Len = 5;
+const sal_Int32 kTestStr53Len = 5;
+const sal_Int32 kTestStr54Len = 1;
+const sal_Int32 kTestStr55Len = 1;
+const sal_Int32 kTestStr56Len = 12;
+const sal_Int32 kTestStr57Len = 12;
+const sal_Int32 kTestStr58Len = 12;
+const sal_Int32 kTestStr59Len = 6;
+const sal_Int32 kTestStr60Len = 2;
+const sal_Int32 kTestStr61Len = 13;
+const sal_Int32 kTestStr62Len = 5;
+const sal_Int32 kTestStr63Len = 7;
+const sal_Int32 kTestStr64Len = 14;
+const sal_Int32 kTestStr65Len = 15;
+const sal_Int32 kTestStr66Len = 1;
+const sal_Int32 kTestStr67Len = 3;
+const sal_Int32 kTestStr68Len = 10;
+const sal_Int32 kTestStr69Len = 11;
+const sal_Int32 kTestStr70Len = 12;
+const sal_Int32 kTestStr71Len = 14;
+const sal_Int32 kTestStr72Len = 21;
+const sal_Int32 kTestStr73Len = 22;
+const sal_Int32 kTestStr74Len = 7;
+const sal_Int32 kTestStr75Len = 7;
+const sal_Int32 kTestStr76Len = 10;
+const sal_Int32 kTestStr77Len = 12;
+const sal_Int32 kTestStr78Len = 12;
+const sal_Int32 kTestStr79Len = 13;
+const sal_Int32 kTestStr80Len = 13;
+const sal_Int32 kTestStr81Len = 3;
+const sal_Int32 kTestStr82Len = 3;
+const sal_Int32 kTestStr83Len = 6;
+const sal_Int32 kTestStr84Len = 8;
+const sal_Int32 kTestStr85Len = 8;
+const sal_Int32 kTestStr86Len = 9;
+const sal_Int32 kTestStr87Len = 9;
+const sal_Int32 kTestStr88Len = 14;
+const sal_Int32 kTestStr89Len = 14;
+const sal_Int32 kTestStr90Len = 17;
+const sal_Int32 kTestStr91Len = 19;
+const sal_Int32 kTestStr92Len = 19;
+const sal_Int32 kTestStr93Len = 20;
+const sal_Int32 kTestStr94Len = 20;
+const sal_Int32 kTestStr95Len = 8;
+const sal_Int32 kTestStr96Len = 8;
+const sal_Int32 kTestStr97Len = 11;
+const sal_Int32 kTestStr98Len = 13;
+const sal_Int32 kTestStr99Len = 13;
+const sal_Int32 kTestStr100Len = 14;
+const sal_Int32 kTestStr101Len = 14;
+const sal_Int32 kTestStr102Len = 4;
+const sal_Int32 kTestStr103Len = 4;
+const sal_Int32 kTestStr104Len = 7;
+const sal_Int32 kTestStr105Len = 9;
+const sal_Int32 kTestStr106Len = 9;
+const sal_Int32 kTestStr107Len = 10;
+const sal_Int32 kTestStr108Len = 10;
+const sal_Int32 kTestStr109Len = 15;
+const sal_Int32 kTestStr110Len = 15;
+const sal_Int32 kTestStr111Len = 18;
+const sal_Int32 kTestStr112Len = 20;
+const sal_Int32 kTestStr113Len = 20;
+const sal_Int32 kTestStr114Len = 21;
+const sal_Int32 kTestStr115Len = 21;
+const sal_Int32 kTestStr116Len = 23;
+const sal_Int32 kTestStr117Len = 24;
+const sal_Int32 kTestStr118Len = 19;
+const sal_Int32 kTestStr119Len = 20;
+const sal_Int32 kTestStr120Len = 30;
+const sal_Int32 kTestStr121Len = 31;
+const sal_Int32 kTestStr122Len = 16;
+const sal_Int32 kTestStr123Len = 21;
+const sal_Int32 kTestStr124Len = 23;
+const sal_Int32 kTestStr125Len = 30;
+const sal_Int32 kTestStr126Len = 12;
+const sal_Int32 kTestStr127Len = 17;
+const sal_Int32 kTestStr128Len = 19;
+const sal_Int32 kTestStr129Len = 26;
+const sal_Int32 kTestStr130Len = 23;
+const sal_Int32 kTestStr131Len = 28;
+const sal_Int32 kTestStr132Len = 30;
+const sal_Int32 kTestStr133Len = 37;
+const sal_Int32 kTestStr134Len = 22;
+const sal_Int32 kTestStr135Len = 24;
+const sal_Int32 kTestStr136Len = 31;
+const sal_Int32 kTestStr137Len = 18;
+const sal_Int32 kTestStr138Len = 20;
+const sal_Int32 kTestStr139Len = 27;
+const sal_Int32 kTestStr140Len = 29;
+const sal_Int32 kTestStr141Len = 31;
+const sal_Int32 kTestStr142Len = 38;
+const sal_Int32 kTestStr143Len = 5;
+const sal_Int32 kTestStr144Len = 1;
+const sal_Int32 kTestStr145Len = 12;
+const sal_Int32 kTestStr146Len = 19;
+const sal_Int32 kTestStr147Len = 19;
+const sal_Int32 kTestStr148Len = 19;
+const sal_Int32 kTestStr149Len = 32;
+const sal_Int32 kTestStr150Len = 32;
+const sal_Int32 kTestStr151Len = 31;
+const sal_Int32 kTestStr152Len = 31;
+const sal_Int32 kTestStr153Len = 31;
+const sal_Int32 kTestStr154Len = 36;
+const sal_Int32 kTestStr155Len = 36;
+const sal_Int32 kTestStr156Len = 36;
+const sal_Int32 kTestStr157Len = 49;
+const sal_Int32 kTestStr158Len = 49;
+const sal_Int32 kTestStr159Len = 49;
+const sal_Int32 kTestStr160Len = 48;
+const sal_Int32 kTestStr161Len = 48;
+const sal_Int32 kTestStr162Len = 48;
+const sal_Int32 kTestStr163Len = 15;
+const sal_Int32 kTestStr164Len = 15;
+const sal_Int32 kTestStr165Len = 15;
+const sal_Int32 kTestStr166Len = 28;
+const sal_Int32 kTestStr167Len = 28;
+const sal_Int32 kTestStr168Len = 28;
+const sal_Int32 kTestStr169Len = 27;
+const sal_Int32 kTestStr170Len = 27;
+const sal_Int32 kTestStr171Len = 27;
+const sal_Int32 kTestStr1PlusStr6Len = kTestStr1Len + kTestStr6Len;
+
+const sal_Int32 uTestStr1Len = 16;
+const sal_Int32 uTestStr2Len = 32;
+const sal_Int32 uTestStr3Len = 16;
+const sal_Int32 uTestStr4Len = 16;
+const sal_Int32 uTestStr5Len = 16;
+const sal_Int32 uTestStr9Len = 32;
+const sal_Int32 uTestStr22Len = 32;
+
+const sal_Unicode uTestStr31[]= {0x400,0x410,0x4DF};
+const sal_Unicode uTestStr32[]= {0x9F9F,0xA000,0x8F80,0x9AD9};
+
+const sal_Int32 uTestStr31Len = 3;
+const sal_Int32 uTestStr32Len = 4;
+
+const sal_Int16 kRadixBinary = 2;
+const sal_Int16 kRadixOctol = 8;
+const sal_Int16 kRadixDecimal = 10;
+const sal_Int16 kRadixHexdecimal = 16;
+const sal_Int16 kRadixBase36 = 36;
+
+const sal_Int8 kSInt8Max = SCHAR_MAX;
+const sal_Int16 kUInt8Max = UCHAR_MAX;
+const sal_Int16 kSInt16Max = SHRT_MAX;
+const sal_Int32 kUInt16Max = USHRT_MAX;
+const sal_Int32 kSInt32Max = INT_MAX;
+const sal_Int64 kUInt32Max = UINT_MAX;
+const sal_Int64 kSInt64Max = SAL_CONST_INT64(9223372036854775807);
+
+const sal_Int32 kInt32MaxNumsCount = 5;
+
+const sal_Int32 kInt32MaxNums[kInt32MaxNumsCount] =
+ {
+ kSInt8Max, kUInt8Max,
+ kSInt16Max, kUInt16Max,
+ kSInt32Max
+ };
+
+const sal_Int32 kInt64MaxNumsCount = 7;
+
+const sal_Int64 kInt64MaxNums[kInt64MaxNumsCount] =
+ {
+ kSInt8Max, kUInt8Max,
+ kSInt16Max, kUInt16Max,
+ kSInt32Max, kUInt32Max,
+ kSInt64Max
+ };
+
+const sal_Int32 kBinaryNumsCount = 16;
+
+const sal_Int32 kBinaryMaxNumsCount = 7;
+
+const sal_Int32 kOctolNumsCount = 16;
+
+const sal_Int32 kOctolMaxNumsCount = 7;
+
+const sal_Int32 kDecimalNumsCount = 16;
+
+const sal_Int32 kDecimalMaxNumsCount = 7;
+
+const sal_Int32 kHexDecimalNumsCount = 16;
+
+const sal_Int32 kHexDecimalMaxNumsCount = 7;
+
+const sal_Int32 kBase36NumsCount = 36;
+
+const sal_Int32 kBase36MaxNumsCount = 7;
+
+const sal_Int32 nDoubleCount=24;
+const double expValDouble[nDoubleCount]=
+ {
+ 3.0,3.1,3.1415,3.1415926535,3.141592653589793,
+ 3.1415926535897932,3.14159265358979323,3.1,
+ 3.141592653589793238462643,9.1096e-31,2.997925e8,6.241e18,5.381e18,
+ 1.7e-309,6.5822e-16,1.7e+307,2.2e30,3.1,3.1,-3.1,
+ 0.0,0.0,0.0,1.00e+308
+ };
+
+const sal_Int32 nFloatCount=22;
+const float expValFloat[nFloatCount] =
+ {
+ 3.0f,3.1f,3.1415f,3.14159f,3.141592f,
+ 3.1415926f,3.14159265f,3.141592653589793238462643f,
+ 6.5822e-16f,9.1096e-31f,2.997925e8f,6.241e18f,
+ 1.00e38f,6.241e-37f,6.241e37f,3.1f,3.1f,-3.1f,
+ 3.1f,0.0f,0.0f,0.0f
+ };
+
+const sal_Int32 nCharCount=15;
+const sal_Unicode expValChar[nCharCount] =
+ {
+ 65,97,48,45,95,
+ 21,27,29,
+ 64,10,39,34,
+ 0,0,83
+ };
+
+const sal_Int32 nDefaultCount=6;
+const sal_Unicode input1Default[nDefaultCount] =
+ {
+ 77,115,85,119,32,0
+ };
+const sal_Int32 input2Default[nDefaultCount] =
+ {
+ 0,0,0,0,0,0
+ };
+const sal_Int32 expValDefault[nDefaultCount] =
+ {
+ 4,9,-1,-1,3,-1
+ };
+
+const sal_Int32 nNormalCount=10;
+const sal_Unicode input1Normal[nNormalCount] =
+ {
+ 77,77,77,115,115,115,119,119,0,0
+ };
+const sal_Int32 input2Normal[nNormalCount] =
+ {
+ 0,32,80,0,13,20,0,80,0,32
+ };
+const sal_Int32 expValNormal[nNormalCount] =
+ {
+ 4,-1,-1,9,15,-1,-1,-1,-1,-1
+ };
+
+const sal_Int32 nlastDefaultCount=5;
+const sal_Unicode input1lastDefault[nlastDefaultCount] =
+ {
+ 77,115,119,32,0
+ };
+const sal_Int32 input2lastDefault[nlastDefaultCount] =
+ {
+ 31,31,31,31,31
+ };
+const sal_Int32 expVallastDefault[nlastDefaultCount] =
+ {
+ 4,15,-1,21,-1
+ };
+
+const sal_Int32 nlastNormalCount=8;
+const sal_Unicode input1lastNormal[nlastNormalCount] =
+ {
+ 77,77,77,115,115,119,119,0
+ };
+const sal_Int32 input2lastNormal[nlastNormalCount] =
+ {
+ 29,0,80,31,3,31,80,31
+ };
+const sal_Int32 expVallastNormal[nlastNormalCount] =
+ {
+ 4,-1,4,15,-1,-1,-1,-1
+ };
+
+const sal_Int32 nStrDefaultCount=6;
+const sal_Int32 input2StrDefault[nStrDefaultCount] =
+ {
+ 0,0,0,0,0,0
+ };
+const sal_Int32 expValStrDefault[nStrDefaultCount] =
+ {
+ 0,4,-1,-1,-1,3
+ };
+
+const sal_Int32 nStrNormalCount=9;
+const sal_Int32 input2StrNormal[nStrNormalCount] =
+ {
+ 0,32,0,30,0,0,0,32,0
+ };
+const sal_Int32 expValStrNormal[nStrNormalCount] =
+ {
+ 0,-1,4,-1,-1,-1,-1,-1,3
+ };
+
+const sal_Int32 nStrLastDefaultCount=6;
+const sal_Int32 input2StrLastDefault[nStrLastDefaultCount] =
+ {
+ 31,31,31,31,31,31
+ };
+const sal_Int32 expValStrLastDefault[nStrLastDefaultCount] =
+ {
+ 0,4,-1,-1,-1,3
+ };
+
+const sal_Int32 nStrLastNormalCount=12;
+const sal_Int32 input2StrLastNormal[nStrLastNormalCount] =
+ {
+ 31,0,80,31,2,31,31,31,0,31,31,14
+ };
+const sal_Int32 expValStrLastNormal[nStrLastNormalCount] =
+ {
+ 0,-1,0,4,-1,-1,-1,-1,-1,3,15,11
+ };
+
+const sal_Int32 kNonSInt32Max = INT_MIN;
+const sal_Int32 kNonSInt16Max = SHRT_MIN;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/OStringBuffer/rtl_String_Utils_Const.h b/sal/qa/OStringBuffer/rtl_String_Utils_Const.h
new file mode 100644
index 000000000..fc258ead3
--- /dev/null
+++ b/sal/qa/OStringBuffer/rtl_String_Utils_Const.h
@@ -0,0 +1,45 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H
+#define INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H
+
+#include <sal/types.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+static const sal_Int32 kErrCompareAStringToUString = -2;
+static const sal_Int32 kErrCompareNAStringToUString = -3;
+static const sal_Int32 kErrCompareAStringToRTLUString = -4;
+static const sal_Int32 kErrCompareNAStringToRTLUString = -5;
+static const sal_Int32 kErrAStringToByteStringCompare = -6;
+static const sal_Int32 kErrAStringToByteStringNCompare = -7;
+static const sal_Int32 kErrCompareAStringToString = -8;
+static const sal_Int32 kErrCompareNAStringToString = -9;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/inc/stringhelper.hxx b/sal/qa/inc/stringhelper.hxx
new file mode 100644
index 000000000..24222b915
--- /dev/null
+++ b/sal/qa/inc/stringhelper.hxx
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_INC_STRINGHELPER_HXX
+#define INCLUDED_SAL_QA_INC_STRINGHELPER_HXX
+
+#include <rtl/ustring.hxx>
+#include <rtl/string.hxx>
+
+inline void operator<<=(OString& _rAsciiString, OUString const& _rUnicodeString)
+{
+ _rAsciiString = OUStringToOString(_rUnicodeString, RTL_TEXTENCODING_ASCII_US);
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/inc/valueequal.hxx b/sal/qa/inc/valueequal.hxx
new file mode 100644
index 000000000..5e6d47d30
--- /dev/null
+++ b/sal/qa/inc/valueequal.hxx
@@ -0,0 +1,120 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX
+#define INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX
+
+#include <sal/config.h>
+
+#include <cmath>
+
+#define PREC_float 1
+#define PREC_double 2
+#define PREC_long_double 3
+
+template<class T>
+bool is_equal(T x, T y, sal_Int16 _nPrec)
+{
+ if (!(std::isfinite(x) && std::isfinite(y))) {
+ return x == y;
+ }
+
+ // due to the fact that this check looks only if both values are equal
+ // we only need to look on one value
+
+ // 14 digits will announce the checkPrecisionSize
+
+ sal_Int32 nPRECISION;
+ switch(_nPrec)
+ {
+ case PREC_float:
+ nPRECISION = 6;
+ break;
+ case PREC_double:
+ nPRECISION = 14;
+ break;
+ case PREC_long_double:
+ nPRECISION = 20;
+ break;
+ default:
+ nPRECISION = 2;
+ }
+
+ if (x < 0)
+ {
+ x = -x;
+ }
+ if (y < 0)
+ {
+ y = -y;
+ }
+
+ if (_nPrec != PREC_long_double)
+ {
+ printf("double equal: %.20f\n", x);
+ printf(" %.20f\n", y);
+ }
+ //here nPrecOfN is the number after dot
+ sal_Int32 nBeforeDot = sal_Int32( log10(x) );
+ if ( nBeforeDot < 0)
+ {
+ nBeforeDot = 0;
+ }
+ //printf("nPRECISION is %d\n", nPRECISION);
+ sal_Int32 nPrecOfN = -nPRECISION + nBeforeDot;
+
+ if (_nPrec != PREC_long_double)
+ printf("nPrecOfN is %" SAL_PRIdINT32 "\n", nPrecOfN);
+
+ double nPrec = pow(0.1, -nPrecOfN);
+
+ if (_nPrec != PREC_long_double)
+ printf(" prec: %.20f\n", nPrec);
+
+ double nDelta = fabs( x - y ) ;
+
+ if (_nPrec != PREC_long_double)
+ {
+ printf(" delta: %.20f\n", nDelta);
+ printf(" nPrec: %.20f\n", nPrec);
+ printf("delta must be less or equal to prec\n\n");
+ }
+
+ if (nDelta > nPrec)
+ {
+ // values are not equal
+ return false;
+ }
+
+ // values are equal
+ return true;
+}
+
+bool is_float_equal(float x, float y)
+{
+ return is_equal<float>(x, y, PREC_float);
+}
+bool is_double_equal(double x, double y)
+{
+ return is_equal<double>(x, y, PREC_double);
+}
+
+#endif // INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/libs2test.txt b/sal/qa/libs2test.txt
new file mode 100644
index 000000000..5503124f4
--- /dev/null
+++ b/sal/qa/libs2test.txt
@@ -0,0 +1,101 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+#
+# This file contain a list of todos for testshl2 automated tests.
+#
+# Legend:
+# there exist 2 formats
+# 1. file
+# 2. path ; file
+#
+# 1. if only a file exist, it will be assume, that a directory with name 'file'
+# exist, and a library with name 'file' create.
+# 2. if the path to the file differ from the library file, use this format.
+#
+
+
+# LLA: marked as deprecated by Stephan Bergmann
+ByteSequence ; rtl_ByteSequence
+
+OStringBuffer ; rtl_OStringBuffer
+
+rtl_strings ; rtl_OUString
+rtl_strings ; rtl_OString
+rtl_strings ; rtl_OUStringBuffer
+
+# replacements for old rtl::XString tests
+rtl/oustring ; rtl_OUString2
+rtl/ostring ; rtl_OString2
+
+osl/file ; osl_File
+# LLA: temporarily removed, there are lot of problems with our environment
+osl/socket ; osl_StreamSocket
+osl/socket ; osl_DatagramSocket
+osl/socket ; osl_SocketAddr
+osl/socket ; osl_Socket2
+osl/socket ; osl_ConnectorSocket
+osl/socket ; osl_AcceptorSocket
+
+osl/mutex ; osl_Mutex
+osl/pipe ; osl_Pipe
+osl/condition ; osl_Condition
+osl/module ; osl_Module
+osl/security ; osl_Security
+
+rtl/math ; rtl_math
+rtl/math ; rtl_math2
+
+# new 20040315
+rtl/alloc ; rtl_Alloc
+rtl/crc32 ; rtl_crc32
+rtl/digest ; rtl_digest
+rtl/bootstrap ; rtl_Bootstrap
+rtl/ostring ; rtl_str
+rtl/ostring ; rtl_string
+rtl/random ; rtl_Random
+
+# new 20040324
+rtl/oustring ; rtl_ustr
+
+# new 20040326
+rtl/cipher ; rtl_cipher
+
+# new 20040331
+rtl/locale ; rtl_locale
+rtl/uuid ; rtl_Uuid
+rtl/process ; rtl_Process
+
+# new 20040413
+rtl/textenc ; rtl_textcvt
+rtl/textenc ; rtl_tencinfo
+rtl/oustringbuffer; rtl_OUStringBuffer2
+
+# new 20040420
+rtl/uri ; rtl_Uri
+rtl/logfile ; rtl_logfile
+
+# LLA: Due to the fact, that thread testing seems to be little bit error prone, now
+# check this at the end.
+osl/process ; osl_Thread
+
+# not ready yet
+# strings ; test_oustring
+
+# new 20041025
+rtl/doublelock ; rtl_doublelocking
+
diff --git a/sal/qa/osl/condition/osl_Condition.cxx b/sal/qa/osl/condition/osl_Condition.cxx
new file mode 100644
index 000000000..05b7fc661
--- /dev/null
+++ b/sal/qa/osl/condition/osl_Condition.cxx
@@ -0,0 +1,327 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "osl_Condition_Const.h"
+#include <stdlib.h>
+
+using namespace osl;
+
+namespace {
+
+enum ConditionType
+{
+ thread_type_set,
+ thread_type_reset,
+ thread_type_wait
+};
+
+/** thread for testing Condition.
+ */
+class ConditionThread : public Thread
+{
+public:
+ //get the Condition to operate
+ ConditionThread( ::osl::Condition& Con, ConditionType tType): m_MyCon( Con ), m_MyType( tType ) { }
+
+protected:
+ ::osl::Condition& m_MyCon;
+ ConditionType m_MyType;
+
+ void SAL_CALL run() override
+ {
+ switch ( m_MyType )
+ {
+ case thread_type_wait:
+ m_MyCon.wait(); break;
+ case thread_type_set:
+ m_MyCon.set(); break;
+ case thread_type_reset:
+ m_MyCon.reset(); break;
+ default:
+ break;
+ }
+ }
+};
+
+}
+
+namespace osl_Condition
+{
+ /** testing the method:
+ Condition()
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void ctors_create()
+ {
+ ::osl::Condition aCond;
+ bRes = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition its initial check state should be sal_False.",
+ !bRes );
+ }
+
+ void ctors_createAndSet()
+ {
+ ::osl::Condition aCond;
+ aCond.set();
+ bRes = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and set it.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_create);
+ CPPUNIT_TEST(ctors_createAndSet);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ /** testing the method:
+ void set()
+ */
+ class set : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+
+ void set_createAndSet()
+ {
+ ::osl::Condition aCond;
+ aCond.set();
+ bRes = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: check state should be sal_True after set.",
+ bRes );
+ }
+
+ void set_threadWaitRelease()
+ {
+ ::osl::Condition aCond;
+ ConditionThread myThread1(aCond, thread_type_wait);
+ myThread1.create();
+ bRes = myThread1.isRunning();
+
+ ConditionThread myThread2(aCond, thread_type_set);
+ myThread2.create();
+
+ myThread1.join();
+ bRes1 = myThread1.isRunning();
+ bRes2 = aCond.check();
+ myThread2.join();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: use one thread to set the condition in order to release another thread.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: use one thread to set the condition in order to release another thread.",
+ !bRes1);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: use one thread to set the condition in order to release another thread.",
+ bRes2);
+ }
+
+ CPPUNIT_TEST_SUITE(set);
+ CPPUNIT_TEST(set_createAndSet);
+ CPPUNIT_TEST(set_threadWaitRelease);
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ void reset()
+ */
+ class reset : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+
+ void reset_resetWaitAndSet()
+ {
+ ::osl::Condition aCond;
+ aCond.reset();
+
+ ConditionThread myThread(aCond, thread_type_wait);
+ myThread.create();
+ bRes = myThread.isRunning();
+ bRes2 = aCond.check();
+
+ aCond.set();
+ myThread.join();
+ bRes1 = myThread.isRunning();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.",
+ !bRes1);
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.",
+ !bRes2);
+ }
+
+ void reset_resetAndSet()
+ {
+ ::osl::Condition aCond;
+ aCond.reset();
+ bRes = aCond.check();
+ aCond.set();
+ bRes1 = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and reset/set it.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and reset/set it.",
+ bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE(reset);
+ CPPUNIT_TEST(reset_resetWaitAndSet);
+ CPPUNIT_TEST(reset_resetAndSet);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ /** testing the method:
+ Result wait(const TimeValue *pTimeout = 0)
+ */
+ class wait : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+ std::unique_ptr<TimeValue> tv1;
+
+ void setUp() override
+ {
+ tv1.reset(new TimeValue);
+ tv1->Seconds = 1;
+ tv1->Nanosec = 0;
+ }
+
+ void tearDown() override
+ {
+ tv1.reset();
+ }
+
+ void wait_testAllCombos( )
+ {
+ ::osl::Condition cond1;
+ ::osl::Condition cond2;
+ ::osl::Condition cond3;
+
+ cond1.set();
+ cond2.set();
+
+ osl::Condition::Result r1=cond1.wait(tv1.get());
+ osl::Condition::Result r2=cond2.wait();
+ osl::Condition::Result r3=cond3.wait(tv1.get());
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.",
+ ::osl::Condition::result_ok, r1 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.",
+ ::osl::Condition::result_ok, r2 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.",
+ ::osl::Condition::result_timeout, r3 );
+ }
+
+ void wait_timeoutWaits()
+ {
+ ::osl::Condition aCond;
+ ::osl::Condition::Result wRes, wRes1;
+
+ aCond.reset();
+ bRes = aCond.check();
+ wRes = aCond.wait(tv1.get());
+
+ aCond.set();
+ wRes1 = aCond.wait(tv1.get());
+ bRes1 = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait a condition after set/reset.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait a condition after set/reset.",
+ bRes1 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#test comment#: wait a condition after set/reset.",
+ ::osl::Condition::result_timeout, wRes );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#test comment#: wait a condition after set/reset.",
+ ::osl::Condition::result_ok, wRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE(wait);
+ CPPUNIT_TEST(wait_testAllCombos);
+ CPPUNIT_TEST(wait_timeoutWaits);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ /** testing the method:
+ sal_Bool check()
+ */
+ class check : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+
+ void check_checkStates()
+ {
+ ::osl::Condition aCond;
+
+ aCond.reset();
+ bRes = aCond.check();
+ aCond.set();
+ bRes1 = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: check the condition states.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: check the condition states.",
+ bRes1 );
+ }
+
+ void check_threadedCheckStates( )
+ {
+ ::osl::Condition aCond;
+ aCond.reset();
+
+ ConditionThread myThread(aCond, thread_type_set);
+ myThread.create();
+ myThread.join();
+ bRes = aCond.check();
+
+ ConditionThread myThread1(aCond, thread_type_reset);
+ myThread1.create();
+ myThread1.join();
+ bRes1 = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: use threads to set/reset Condition and check it in main routine.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: use threads to set/reset Condition and check it in main routine.",
+ !bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE(check);
+ CPPUNIT_TEST(check_checkStates);
+ CPPUNIT_TEST(check_threadedCheckStates);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::ctors);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::set);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::reset);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::wait);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::check);
+
+} // namespace osl_Condition
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/condition/osl_Condition_Const.h b/sal/qa/osl/condition/osl_Condition_Const.h
new file mode 100644
index 000000000..89b26121b
--- /dev/null
+++ b/sal/qa/osl/condition/osl_Condition_Const.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H
+#define INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/thread.hxx>
+#include <osl/mutex.hxx>
+#include <osl/pipe.hxx>
+#include <osl/conditn.hxx>
+#include <osl/time.h>
+
+#ifdef UNX
+#include <unistd.h>
+#endif
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+// condition names
+
+OUString aTestCon("testcondition");
+
+const char pTestString[17] = "Sun Microsystems";
+
+#endif // INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/file/osl_File.cxx b/sal/qa/osl/file/osl_File.cxx
new file mode 100644
index 000000000..718fb6542
--- /dev/null
+++ b/sal/qa/osl/file/osl_File.cxx
@@ -0,0 +1,4980 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <rtl/byteseq.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <osl/thread.h>
+#include <osl/file.hxx>
+#include "osl_File_Const.h"
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <tools/urlobj.hxx>
+
+#include <memory>
+
+#ifdef _WIN32
+#include <prewin.h>
+#include <postwin.h>
+#include <o3tl/char16_t2wchar_t.hxx>
+#endif
+
+using namespace osl;
+
+/** detailed wrong message.
+*/
+static OString errorToString(const osl::FileBase::RC _nError)
+{
+ OString sResult;
+ switch (_nError) {
+ case osl::FileBase::E_None:
+ sResult = "Success";
+ break;
+ case osl::FileBase::E_PERM:
+ sResult = "Operation not permitted";
+ break;
+ case osl::FileBase::E_NOENT:
+ sResult = "No such file or directory";
+ break;
+ case osl::FileBase::E_EXIST:
+ sResult = "Already Exist";
+ break;
+ case osl::FileBase::E_ACCES:
+ sResult = "Permission denied";
+ break;
+ case osl::FileBase::E_INVAL:
+ sResult = "The format of the parameters was not valid";
+ break;
+ case osl::FileBase::E_NOTDIR:
+ sResult = "Not a directory";
+ break;
+ case osl::FileBase::E_ISDIR:
+ sResult = "Is a directory";
+ break;
+ case osl::FileBase::E_BADF:
+ sResult = "Bad file";
+ break;
+ case osl::FileBase::E_NOTEMPTY:
+ sResult = "The directory is not empty";
+ break;
+ default:
+ sResult = "Unknown Error";
+ break;
+ }
+ return sResult;
+}
+
+static OString errorToStr(osl::FileBase::RC const& nError)
+{
+ OString suBuf = "The returned error is: " +
+ errorToString(nError) +
+ "!\n";
+ return suBuf;
+}
+
+/** compare two TimeValue, unit is "ms", since Windows time precision is better than UNX.
+*/
+/* FIXME: the above assertion is bogus */
+
+#if (defined UNX) // precision of time in Windows is better than UNX
+# define delta 2000 // time precision, 2000ms
+#else
+# define delta 1800 // time precision, 1.8s
+#endif
+
+static bool t_compareTime(TimeValue *m_aEndTime, TimeValue *m_aStartTime, sal_Int32 nDelta)
+{
+ sal_Int32 nDeltaSeconds = m_aEndTime->Seconds - m_aStartTime->Seconds;
+ sal_Int32 nDeltaNanoSec = sal_Int32(m_aEndTime->Nanosec) - sal_Int32(m_aStartTime->Nanosec);
+ if (nDeltaNanoSec < 0)
+ {
+ nDeltaNanoSec = 1000000000 + nDeltaNanoSec;
+ nDeltaSeconds--;
+ }
+
+ sal_Int32 nDeltaMilliSec = (nDeltaSeconds * 1000) + (nDeltaNanoSec / 1000000);
+ return (nDeltaMilliSec < nDelta);
+}
+
+/** compare two OUString file name.
+*/
+static bool compareFileName(const OUString & ustr1, const OUString & ustr2)
+{
+ bool bOk;
+// on Windows, the separator is '\', so here change to '/', then compare
+#if defined(_WIN32)
+ OUString ustr1new,ustr2new;
+ sal_Unicode reverseSlash = '\\';
+
+ if (ustr1.lastIndexOf(reverseSlash) != -1)
+ ustr1new = ustr1.replace(reverseSlash,'/');
+ else
+ ustr1new = ustr1;
+ if (ustr2.lastIndexOf(reverseSlash) != -1)
+ ustr2new = ustr2.replace(reverseSlash,'/');
+ else
+ ustr2new = ustr2;
+ bOk = ustr1new.equalsIgnoreAsciiCase(ustr2new);
+#else
+ bOk = ustr1.equalsIgnoreAsciiCase(ustr2);
+#endif
+ return bOk;
+}
+
+/** simple version to judge if a file name or directory name is a URL or a system path, just to see if it
+ is start with "file:///";.
+*/
+static bool isURL(const OUString& pathname)
+{
+ return pathname.startsWith(aPreURL);
+}
+
+/** concat two part to form a URL or system path, add PATH_SEPARATOR between them if necessary, add "file:///" to beginning if necessary.
+*/
+static void concatURL(OUString & pathname1, const OUString & pathname2)
+{
+ // check if pathname1 is full qualified URL;
+ if (!isURL(pathname1))
+ {
+ OUString aPathName = pathname1.copy(0);
+ osl::FileBase::getFileURLFromSystemPath(pathname1, aPathName); // convert if not full qualified URL
+ pathname1 = aPathName.copy(0);
+ }
+
+ // check if '/' is in the end of pathname1 or at the begin of pathname2;
+ if (!pathname1.endsWith(aSlashURL) && !pathname2.startsWith(aSlashURL))
+ pathname1 += aSlashURL;
+ pathname1 += pathname2;
+}
+
+/** create a temp test file using OUString name of full qualified URL or system path.
+*/
+static void createTestFile(const OUString& filename)
+{
+ OUString aPathURL = filename.copy(0);
+ osl::FileBase::RC nError;
+
+ if (!isURL(filename))
+ osl::FileBase::getFileURLFromSystemPath(filename, aPathURL); // convert if not full qualified URL
+
+ File aFile(aPathURL);
+ nError = aFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write | osl_File_OpenFlag_Create);
+ if ((nError != osl::FileBase::E_None) && (nError != osl::FileBase::E_EXIST))
+ printf("createTestFile failed!\n");
+
+ aFile.close();
+
+}
+
+/** create a temp test file using OUString name of full qualified URL or system path in a base directory.
+*/
+static void createTestFile(const OUString& basename, const OUString& filename)
+{
+ OUString aBaseURL = basename.copy(0);
+
+ concatURL(aBaseURL, filename);
+ createTestFile(aBaseURL);
+}
+
+/** delete a temp test file using OUString name.
+*/
+static void deleteTestFile(const OUString& filename)
+{
+ OUString aPathURL = filename.copy(0);
+ osl::FileBase::RC nError;
+
+ if (!isURL(filename))
+ osl::FileBase::getFileURLFromSystemPath(filename, aPathURL); // convert if not full qualified URL
+
+ nError = File::setAttributes(aPathURL, osl_File_Attribute_GrpWrite| osl_File_Attribute_OwnWrite| osl_File_Attribute_OthWrite); // if readonly, make writable.
+ CPPUNIT_ASSERT_MESSAGE("In deleteTestFile Function: set writable ", (osl::FileBase::E_None == nError) || (osl::FileBase::E_NOENT == nError));
+
+ nError = File::remove(aPathURL);
+ CPPUNIT_ASSERT_MESSAGE("In deleteTestFile Function: remove ", (osl::FileBase::E_None == nError) || (nError == osl::FileBase::E_NOENT));
+}
+
+/** delete a temp test file using OUString name of full qualified URL or system path in a base directory.
+*/
+static void deleteTestFile(const OUString& basename, const OUString& filename)
+{
+ OUString aBaseURL = basename.copy(0);
+
+ concatURL(aBaseURL, filename);
+ deleteTestFile(aBaseURL);
+}
+
+/** create a temp test directory using OUString name of full qualified URL or system path.
+*/
+static void createTestDirectory(const OUString& dirname)
+{
+ OUString aPathURL = dirname.copy(0);
+ osl::FileBase::RC nError;
+
+ if (!isURL(dirname))
+ osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL
+ nError = Directory::create(aPathURL);
+ if ((nError != osl::FileBase::E_None) && (nError != osl::FileBase::E_EXIST))
+ printf("createTestDirectory failed: %d!\n", int(nError));
+}
+
+/** create a temp test directory using OUString name of full qualified URL or system path in a base directory.
+*/
+static void createTestDirectory(const OUString& basename, const OUString& dirname)
+{
+ OUString aBaseURL = basename.copy(0);
+
+ concatURL(aBaseURL, dirname);
+ createTestDirectory(aBaseURL);
+}
+
+/** delete a temp test directory using OUString name of full qualified URL or system path.
+*/
+static void deleteTestDirectory(const OUString& dirname)
+{
+ OUString aPathURL = dirname.copy(0);
+ if (!isURL(dirname))
+ osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL
+
+ Directory testDir(aPathURL);
+ if (testDir.isOpen())
+ testDir.close(); // close if still open.
+
+ osl::FileBase::RC nError = Directory::remove(aPathURL);
+
+ OString strError = "In deleteTestDirectory function: remove Directory " +
+ OUStringToOString(aPathURL, RTL_TEXTENCODING_ASCII_US) + " -> result: " + OString::number(nError);
+ CPPUNIT_ASSERT_MESSAGE(strError.getStr(), (osl::FileBase::E_None == nError) || (nError == osl::FileBase::E_NOENT));
+}
+
+/** delete a temp test directory using OUString name of full qualified URL or system path in a base directory.
+*/
+static void deleteTestDirectory(const OUString& basename, const OUString& dirname)
+{
+ OUString aBaseURL = basename.copy(0);
+
+ concatURL(aBaseURL, dirname);
+ deleteTestDirectory(aBaseURL);
+}
+
+namespace {
+
+/** Check for the file and directory access right.
+*/
+enum class oslCheckMode {
+ Exist,
+ OpenAccess,
+ ReadAccess,
+ WriteAccess
+};
+
+}
+
+/** check if the file exist
+*/
+static bool ifFileExist(const OUString & str)
+{
+ File testFile(str);
+ return (testFile.open(osl_File_OpenFlag_Read) == osl::FileBase::E_None);
+}
+
+/** check if the file can be written
+*/
+static bool ifFileCanWrite(const OUString & str)
+{
+ // on Windows, the file has no write right, but can be written
+#ifdef _WIN32
+ bool bCheckResult = false;
+ OUString aUStr = str.copy(0);
+ if (isURL(str))
+ osl::FileBase::getSystemPathFromFileURL(str, aUStr);
+
+ OString aString = OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US);
+ const char *path = aString.getStr();
+ if ((_access(path, 2)) != -1)
+ bCheckResult = true;
+ // on UNX, just test if open success with osl_File_OpenFlag_Write
+#else
+ File testFile(str);
+ bool bCheckResult = (testFile.open(osl_File_OpenFlag_Write) == osl::FileBase::E_None);
+#endif
+ return bCheckResult;
+}
+
+static bool checkDirectory(const OUString& str, oslCheckMode nCheckMode)
+{
+ OUString aUString;
+ DirectoryItem rItem;
+ osl::FileBase::RC rc;
+ bool bCheckResult= false;
+
+ Directory aDir(str);
+ rc = aDir.open();
+
+ if ((rc != osl::FileBase::E_NOENT) && (rc != osl::FileBase::E_ACCES))
+ {
+ switch (nCheckMode)
+ {
+ case oslCheckMode::Exist:
+ if (rc == ::osl::FileBase::E_None)
+ bCheckResult = true;
+ break;
+ case oslCheckMode::OpenAccess:
+ if (rc == osl::FileBase::E_None)
+ bCheckResult = true;
+ break;
+ case oslCheckMode::ReadAccess:
+ rc = aDir.getNextItem(rItem);
+ bCheckResult = (rc == osl::FileBase::E_None) || (rc == osl::FileBase::E_NOENT);
+ break;
+ case oslCheckMode::WriteAccess:
+ ((aUString += str) += aSlashURL) += aTmpName2;
+ if (Directory::create(aUString) == osl::FileBase::E_None)
+ {
+ bCheckResult = true;
+ rc = Directory::remove(aUString);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, rc);
+ }
+ else
+ {
+ bCheckResult = false;
+ }
+ break;
+
+ default:
+ bCheckResult = false;
+ }
+
+ rc = aDir.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, rc);
+ }
+
+ return bCheckResult;
+}
+
+/** construct error message
+*/
+static OString outputError(const OString & returnVal, const OString & rightVal, const char * msg = "")
+{
+ if (returnVal == rightVal)
+ return OString();
+
+ OString aString = msg +
+ OString::Concat(": the returned value is '") +
+ returnVal +
+ "', but the value should be '" +
+ rightVal +
+ "'.";
+ return aString;
+}
+
+#if (defined UNX) /* chmod() method is different in Windows */
+/** Change file mode, two version in UNIX and Windows;.
+*/
+static void changeFileMode(OUString & filepath, sal_Int32 mode)
+{
+ OString aString;
+ OUString aUStr = filepath.copy(0);
+
+ if (isURL(filepath))
+ osl::FileBase::getSystemPathFromFileURL(filepath, aUStr);
+
+ aString = OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US);
+ int ret = chmod(aString.getStr(), mode);
+ CPPUNIT_ASSERT_EQUAL(0, ret);
+}
+#else
+static void hideFile(const OUString& filepath)
+{
+ OUString aSysPath(filepath);
+
+ if (isURL(filepath))
+ osl::FileBase::getSystemPathFromFileURL(filepath, aSysPath);
+
+ bool ret = SetFileAttributesW(o3tl::toW(aSysPath.getStr()), FILE_ATTRIBUTE_HIDDEN);
+ CPPUNIT_ASSERT(ret);
+}
+#endif
+
+#if 0
+#if defined UNX
+static OUString getCurrentPID();
+#endif
+#endif
+
+// Beginning of the test cases for osl::FileBase class
+
+namespace osl_FileBase
+{
+ // testing the method
+ // static inline RC getAbsoluteFileURL(const OUString& ustrBaseDirectoryURL,
+ // const OUString& ustrRelativeFileURL,
+ // OUString& ustrAbsoluteFileURL)
+
+ class getAbsoluteFileURL : public CppUnit::TestFixture
+ {
+ public:
+ void check_getAbsoluteFileURL(OUString const& _suBaseURL,
+ OString const& _sRelativeURL,
+ osl::FileBase::RC _nAssumeError,
+ OUString const& _suAssumeResultStr);
+
+ void getAbsoluteFileURL_001_1();
+ void getAbsoluteFileURL_001_2();
+ void getAbsoluteFileURL_001_3();
+ void getAbsoluteFileURL_001_4();
+ void getAbsoluteFileURL_001_5();
+ void getAbsoluteFileURL_001_6();
+ void getAbsoluteFileURL_001_7();
+ void getAbsoluteFileURL_001_8();
+ void getAbsoluteFileURL_002();
+ void getAbsoluteFileURL_003();
+ void getAbsoluteFileURL_004();
+
+ CPPUNIT_TEST_SUITE(getAbsoluteFileURL);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_1);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_2);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_3);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_4);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_5);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_6);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_7);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_8);
+ CPPUNIT_TEST(getAbsoluteFileURL_002);
+ CPPUNIT_TEST(getAbsoluteFileURL_003);
+ CPPUNIT_TEST(getAbsoluteFileURL_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ void getAbsoluteFileURL::check_getAbsoluteFileURL(OUString const& _suBaseURL,
+ OString const& _sRelativeURL,
+ osl::FileBase::RC _nAssumeError,
+ OUString const& _suAssumeResultStr)
+ {
+ OUString suRelativeURL = OStringToOUString(_sRelativeURL, RTL_TEXTENCODING_UTF8);
+ OString sBaseURL = OUStringToOString(_suBaseURL, RTL_TEXTENCODING_UTF8);
+ OUString suResultURL;
+ osl::FileBase::RC nError = osl::FileBase::getAbsoluteFileURL(_suBaseURL, suRelativeURL, suResultURL);
+ OString sResultURL = OUStringToOString(suResultURL, RTL_TEXTENCODING_UTF8);
+ OString sError = errorToString(nError);
+ printf("getAbsoluteFileURL('%s','%s') deliver absolute URL: '%s', error '%s'\n",
+ sBaseURL.getStr(), _sRelativeURL.getStr(),sResultURL.getStr(), sError.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong: error number is wrong", _nAssumeError, nError);
+
+ if (nError == osl::FileBase::E_None)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong: ResultURL is not equal to expected URL ", _suAssumeResultStr, suResultURL);
+ }
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_1()
+ {
+ OUString suAssume = aUserDirectoryURL + "/relative/file1";
+ check_getAbsoluteFileURL(aUserDirectoryURL, "relative/file1",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_2()
+ {
+ OUString suAssume = aUserDirectoryURL + "/relative/file2";
+ check_getAbsoluteFileURL(aUserDirectoryURL, "relative/./file2",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_3()
+ {
+ OUString suAssume = aUserDirectoryURL + "/file3";
+ check_getAbsoluteFileURL(aUserDirectoryURL, "relative/../file3",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_4()
+ {
+ OUString suAssume = aUserDirectoryURL + "/file4";
+ check_getAbsoluteFileURL(aUserDirectoryURL, "././relative/../file4",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_5()
+ {
+ OUString suAssume;
+ suAssume = aUserDirectoryURL + "/relative/";
+ check_getAbsoluteFileURL(aUserDirectoryURL, "././relative/.",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_6()
+ {
+ OUString suAssume = aUserDirectoryURL + "/.relative";
+ check_getAbsoluteFileURL(aUserDirectoryURL, "./.relative",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_7()
+ {
+ OUString suAssume;
+ suAssume = aUserDirectoryURL + "/.a/";
+ check_getAbsoluteFileURL(aUserDirectoryURL, "./.a/mydir/..",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_8()
+ {
+ OUString suAssume = aUserDirectoryURL + "/tmp/ok";
+ check_getAbsoluteFileURL(aUserDirectoryURL, "tmp//ok",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_002()
+ {
+#if 0
+#if (defined UNX) // Link is not defined in Windows
+ OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
+ aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/link.file";
+ aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/canonical.name";
+
+ OString strLinkFileName, strSrcFileName;
+ strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US);
+ strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US);
+
+ createTestFile(aCanURL1);
+ sal_Int32 fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+ OString sLnkURL = OUStringToOString(aLnkURL1, RTL_TEXTENCODING_ASCII_US);
+ OUString suAssume = aUserDirectoryURL + "/canonical.name";
+ check_getAbsoluteFileURL(aUserDirectoryURL, sLnkURL, osl::FileBase::E_None, suAssume);
+ deleteTestFile(aCanURL1);
+ fd = remove(strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+#endif
+#endif
+ }
+
+ // please see line# 930
+ void getAbsoluteFileURL::getAbsoluteFileURL_003()
+ {
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_004()
+ {
+ // create two level directories under $Temp/PID/
+ OUString aUStrUpBase = aUserDirectoryURL + "/test1";
+ createTestDirectory(aUStrUpBase);
+ OUString aUStrBase = aUserDirectoryURL + "/test1/dir1";
+ createTestDirectory(aUStrBase);
+
+ OUString suAssume = aUserDirectoryURL + "/mytestfile";
+ check_getAbsoluteFileURL(aUStrBase, "../../mytestfile" , osl::FileBase::E_None, suAssume);
+ deleteTestDirectory(aUStrBase);
+ deleteTestDirectory(aUStrUpBase);
+ }
+
+ // testing two methods:
+ // static inline RC getSystemPathFromFileURL(const OUString& ustrFileURL,
+ // OUString& ustrSystemPath)
+ // static RC getFileURLFromSystemPath(const OUString & ustrSystemPath,
+ // OUString & ustrFileURL);
+
+ class SystemPath_FileURL : public CppUnit::TestFixture
+ {
+ public:
+ void getSystemPathFromFileURL_001_1();
+ void getSystemPathFromFileURL_001_2();
+ void getSystemPathFromFileURL_001_21();
+ void getSystemPathFromFileURL_001_22();
+ void getSystemPathFromFileURL_001_3();
+ void getSystemPathFromFileURL_001_31();
+ void getSystemPathFromFileURL_001_4();
+ void getSystemPathFromFileURL_001_41();
+ void getSystemPathFromFileURL_001_5();
+ void getSystemPathFromFileURL_001_51();
+ void getSystemPathFromFileURL_001_52();
+ void getSystemPathFromFileURL_001_53();
+ void getSystemPathFromFileURL_001_6();
+ void getSystemPathFromFileURL_001_61();
+ void getSystemPathFromFileURL_001_7();
+ void getSystemPathFromFileURL_001_71();
+ void getSystemPathFromFileURL_001_8();
+ void getSystemPathFromFileURL_001_81();
+ void getSystemPathFromFileURL_001_9();
+ void getSystemPathFromFileURL_001_91();
+ void getSystemPathFromFileURL_001_92();
+ void getSystemPathFromFileURL_004();
+ void getSystemPathFromFileURL_005();
+
+ // test case for getFileURLFromSystemPath
+ void getFileURLFromSystemPath_001();
+ void getFileURLFromSystemPath_002();
+ void getFileURLFromSystemPath_003();
+ void getFileURLFromSystemPath_004();
+ void getFileURLFromSystemPath_004_1();
+ void getFileURLFromSystemPath_005();
+
+ CPPUNIT_TEST_SUITE(SystemPath_FileURL);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_1);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_2);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_21);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_22);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_3);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_31);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_4);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_41);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_5);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_51);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_52);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_53);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_6);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_61);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_7);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_71);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_8);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_81);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_9);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_91);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_92);
+ CPPUNIT_TEST(getSystemPathFromFileURL_004);
+ CPPUNIT_TEST(getSystemPathFromFileURL_005);
+ CPPUNIT_TEST(getFileURLFromSystemPath_001);
+ CPPUNIT_TEST(getFileURLFromSystemPath_002);
+ CPPUNIT_TEST(getFileURLFromSystemPath_003);
+ CPPUNIT_TEST(getFileURLFromSystemPath_004);
+ CPPUNIT_TEST(getFileURLFromSystemPath_004_1);
+ CPPUNIT_TEST(getFileURLFromSystemPath_005);
+ CPPUNIT_TEST_SUITE_END();
+
+ private:
+ void check_SystemPath_FileURL(
+ OString const& _sSource,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sAssumeResultStr,
+ bool bDirection = true);
+
+ void checkWNTBehaviour_getSystemPathFromFileURL(
+ OString const& _sURL,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sWNTAssumeResultString);
+
+ void checkUNXBehaviour_getSystemPathFromFileURL(
+ OString const& _sURL,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sUnixAssumeResultString);
+
+ void checkWNTBehaviour_getFileURLFromSystemPath(OString const& _sSysPath,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sWNTAssumeResultString);
+
+ void checkUNXBehaviour_getFileURLFromSystemPath(
+ OString const& _sSysPath,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sUnixAssumeResultString);
+
+ };
+
+ // if bDirection==sal_True, check getSystemPathFromFileURL
+ // if bDirection==sal_False, check getFileURLFromSystemPath
+ void SystemPath_FileURL::check_SystemPath_FileURL(
+ OString const& _sSource,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sAssumeResultStr,
+ bool bDirection)
+ {
+ // PRE: URL as String
+ OUString suSource;
+ OUString suStr;
+ suSource = OStringToOUString(_sSource, RTL_TEXTENCODING_UTF8);
+ osl::FileBase::RC nError;
+
+ if (bDirection)
+ nError = osl::FileBase::getSystemPathFromFileURL(suSource, suStr);
+ else
+ nError = osl::FileBase::getFileURLFromSystemPath(suSource, suStr);
+
+ // if the given string is gt length 0,
+ // we check also this string
+ OString sStr = OUStringToOString(suStr, RTL_TEXTENCODING_UTF8);
+ OString sError = errorToString(nError);
+
+ if (bDirection)
+ printf("getSystemPathFromFileURL('%s') deliver system path: '%s', error '%s'\n",
+ _sSource.getStr(), sStr.getStr(), sError.getStr());
+ else
+ printf("getFileURLFromSystemPath('%s') deliver File URL: '%s', error '%s'\n",
+ _sSource.getStr(), sStr.getStr(), sError.getStr());
+
+ if (!_sAssumeResultStr.isEmpty())
+ {
+ bool bStrAreEqual = _sAssumeResultStr == sStr;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong",
+ _nAssumeError, nError);
+ CPPUNIT_ASSERT_MESSAGE("Assumption is wrong",
+ bStrAreEqual);
+ }
+ else
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong", _nAssumeError, nError);
+ }
+ }
+
+ void SystemPath_FileURL::checkWNTBehaviour_getSystemPathFromFileURL(
+ OString const& _sURL,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sWNTAssumeResultString)
+ {
+#if defined(_WIN32)
+ check_SystemPath_FileURL(_sURL, _nAssumeError, _sWNTAssumeResultString);
+#else
+ (void)_sURL;
+ (void)_nAssumeError;
+ (void)_sWNTAssumeResultString;
+#endif
+ }
+
+ void SystemPath_FileURL::checkUNXBehaviour_getSystemPathFromFileURL(
+ OString const& _sURL,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sUnixAssumeResultString)
+ {
+#if (defined UNX)
+ check_SystemPath_FileURL(_sURL, _nAssumeError, _sUnixAssumeResultString);
+#else
+ (void)_sURL;
+ (void)_nAssumeError;
+ (void)_sUnixAssumeResultString;
+#endif
+ }
+
+ void SystemPath_FileURL::checkWNTBehaviour_getFileURLFromSystemPath(
+ OString const& _sSysPath,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sWNTAssumeResultString)
+ {
+#if defined(_WIN32)
+ check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sWNTAssumeResultString, false);
+#else
+ (void)_sSysPath;
+ (void)_nAssumeError;
+ (void)_sWNTAssumeResultString;
+#endif
+ }
+
+ void SystemPath_FileURL::checkUNXBehaviour_getFileURLFromSystemPath(
+ OString const& _sSysPath,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sUnixAssumeResultString)
+ {
+#if (defined UNX)
+ check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sUnixAssumeResultString, false);
+#else
+ (void)_sSysPath;
+ (void)_nAssumeError;
+ (void)_sUnixAssumeResultString;
+#endif
+ }
+
+ /** Test for getSystemPathFromFileURL()
+ this test is split into 2 different OS tests,
+ the first function checkUNXBehaviour... runs only on Unix based Systems,
+ the second only on windows based systems
+ the first parameter are a file URL where we want to get the system path of,
+ the second parameter is the assumed error of the osl_getSystemPathFromFileURL() function,
+ the third parameter is the assumed result string, the string will only test, if its length is greater than 0
+ */
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_1()
+ {
+ OString sURL("");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_2()
+ {
+ OString sURL("/");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "\\");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_21()
+ {
+ /* From RFC3986, "2.2. Reserved Characters":
+
+ "The purpose of reserved characters is to provide a set of delimiting
+ characters that are distinguishable from other data within a URI.
+ URIs that differ in the replacement of a reserved character with its
+ corresponding percent-encoded octet are not equivalent. Percent-
+ encoding a reserved character, or decoding a percent-encoded octet
+ that corresponds to a reserved character, will change how the URI is
+ interpreted by most applications. Thus, characters in the reserved
+ set are protected from normalization and are therefore safe to be
+ used by scheme-specific and producer-specific algorithms for
+ delimiting data subcomponents within a URI."
+
+ In other words, %2F ("/") is NOT the same as /.
+ */
+ OString sURL("%2F");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_22()
+ {
+ OString sURL("file:///tmp%2Fmydir");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_3()
+ {
+ OString sURL("a");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_31()
+ {
+ OString sURL("tmpname");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_4()
+ {
+ OString sURL("file://");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_41()
+ {
+ OString sURL("file://localhost/tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_5()
+ {
+ OString sURL("file:///tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_51()
+ {
+ OString sURL("file://c:/tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_52()
+ {
+ OString sURL("file:///c:/tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_53()
+ {
+ OString sURL("file:///c|/tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c|/tmp");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_6()
+ {
+ OString sURL("file:///tmp/first");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_61()
+ {
+ OString sURL("file:///c:/tmp/first");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_7()
+ {
+ OString sURL("file:///tmp/../second");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/../second");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_71()
+ {
+ OString sURL("file:///c:/tmp/../second");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/../second");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\..\\second");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_8()
+ {
+ OString sURL("../tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "../tmp");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "..\\tmp");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_81()
+ {
+#if 0
+ OString sURL("file://~/tmp");
+ char* home_path;
+ home_path = getenv("HOME");
+ OString expResult(home_path ? home_path : "");
+ expResult += "/tmp";
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, expResult);
+#endif
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_9()
+ {
+ OString sURL("file:///tmp/first%20second");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first second");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_91()
+ {
+ OString sURL("file:///c:/tmp/first%20second");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first second");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first second");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_92()
+ {
+ OString sURL("ca@#;+.,$///78no%01ni..name");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ // normal legal case
+ void SystemPath_FileURL::getSystemPathFromFileURL_004()
+ {
+ OUString aUStr;
+ OUString aUNormalURL(aTmpName6);
+ OUString aUResultURL (aSysPath4);
+ osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL(aUNormalURL, aUStr);
+
+ bool bOk = compareFileName(aUStr, aUResultURL);
+
+ OString sError =
+ "test for getSystemPathFromFileURL(' " +
+ OUStringToOString(aUNormalURL, RTL_TEXTENCODING_ASCII_US) +
+ " ') function:use an absolute file URL, " +
+ outputError(OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US),
+ OUStringToOString(aUResultURL, RTL_TEXTENCODING_ASCII_US));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError);
+ CPPUNIT_ASSERT_MESSAGE(sError.getStr(), bOk);
+
+ }
+
+ // CJK characters case
+ void SystemPath_FileURL::getSystemPathFromFileURL_005()
+ {
+ OUString aUStr;
+ createTestDirectory(aTmpName10);
+ OUString aUNormalURL(aTmpName10);
+ OUString aUResultURL (aSysPath5);
+
+ osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL(aUNormalURL, aUStr);
+
+ bool bOk = compareFileName(aUStr, aUResultURL);
+
+ OString sError =
+ "test for getSystemPathFromFileURL(' " +
+ OUStringToOString(aUNormalURL, RTL_TEXTENCODING_ASCII_US) +
+ " ') function:use a CJK coded absolute URL, " +
+ outputError(OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US),
+ OUStringToOString(aUResultURL, RTL_TEXTENCODING_ASCII_US));
+ deleteTestDirectory(aTmpName10);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError);
+ CPPUNIT_ASSERT_MESSAGE(sError.getStr(), bOk);
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_001()
+ {
+ OString sSysPath("~/tmp");
+ char* home_path;
+ home_path = getenv("HOME");
+ OString expResult(home_path ? home_path : "");
+ expResult = "file://"+ expResult + "/tmp";
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, expResult);
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "~/tmp");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_002()
+ {
+ OString sSysPath("c:/tmp");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "c:/tmp");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///c:/tmp");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_003()
+ {
+ OString sSysPath("file:///temp");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_004()
+ {
+ OString sSysPath("//tmp//first start");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///tmp/first%20start");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_004_1()
+ {
+ OString sSysPath("/tmp///first start");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///tmp/first%20start");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_005()
+ {
+ OString sSysPath("");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ }
+
+ // testing the method
+ // static inline RC searchFileURL( const OUString& ustrFileName,
+ // const OUString& ustrSearchPath,
+ // OUString& ustrFileURL)
+
+ class searchFileURL : public CppUnit::TestFixture
+ {
+ private:
+ OUString aUStr;
+
+ public:
+ void searchFileURL_001()
+ {
+ /* search file is passed by system filename */
+ auto nError1 = osl::FileBase::searchFileURL(aTmpName1, aUserDirectorySys, aUStr);
+ /* search file is passed by full qualified file URL */
+ auto nError2 = osl::FileBase::searchFileURL(aCanURL1, aUserDirectorySys, aUStr);
+ /* search file is passed by relative file path */
+ auto nError3 = osl::FileBase::searchFileURL(aRelURL4, aUserDirectorySys, aUStr);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ",
+ osl::FileBase::E_NOENT, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ",
+ osl::FileBase::E_NOENT, nError2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ",
+ osl::FileBase::E_NOENT, nError3);
+ }
+
+ void searchFileURL_002()
+ {
+#ifndef UNX
+ /* search file is passed by system filename */
+ OUString strRootSys = INetURLObject(aTempDirectoryURL).GetLastName();
+ auto nError1 = osl::FileBase::searchFileURL(aTempDirectorySys, strRootSys, aUStr);
+ bool bOk1 = compareFileName(aUStr, aTempDirectoryURL);
+ /* search file is passed by full qualified file URL */
+ auto nError2 = osl::FileBase::searchFileURL(aTempDirectoryURL, strRootSys, aUStr);
+ bool bOk2 = compareFileName(aUStr, aTempDirectoryURL);
+#ifndef _WIN32
+ /* search file is passed by relative file path */
+ auto nError3 = osl::FileBase::searchFileURL(aRelURL5, strRootSys, aUStr);
+ bool bOk3 = compareFileName(aUStr, aTempDirectoryURL);
+#endif
+ /* search file is passed by an exist file */
+ createTestFile(aCanURL1);
+ auto nError4 = osl::FileBase::searchFileURL(aCanURL4, aUserDirectorySys, aUStr);
+ bool bOk4 = compareFileName(aUStr, aCanURL1);
+ deleteTestFile(aCanURL1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename, system directory, searched file already exist.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: URL filename, system directory, searched file already exist.",
+ osl::FileBase::E_None, nError2);
+#ifndef _WIN32
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: relative path, system directory, searched file already exist.",
+ osl::FileBase::E_None, nError3);
+#endif
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ osl::FileBase::E_None, nError4);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename, system directory, searched file already exist.",
+ bOk1);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: URL filename, system directory, searched file already exist.",
+ bOk2);
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: relative path, system directory, searched file already exist.",
+ bOk3);
+#endif
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ bOk4);
+#endif
+ }
+
+ void searchFileURL_003()
+ {
+ OUString aSystemPathList(aRootSys + PATH_LIST_DELIMITER + aTempDirectorySys + PATH_LIST_DELIMITER + aRootSys + "system/path");
+ auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aSystemPathList, aUStr);
+ bool bOk = compareFileName(aUStr, aUserDirectoryURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
+ bOk);
+ }
+
+ void searchFileURL_004()
+ {
+ OUString aSystemPathList(aRootSys + PATH_LIST_DELIMITER + aTempDirectorySys + PATH_LIST_DELIMITER + aRootSys + "system/path/../name");
+ auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aSystemPathList, aUStr);
+ bool bOk = compareFileName(aUStr, aUserDirectoryURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
+ bOk);
+ }
+
+ void searchFileURL_005()
+ {
+ auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aNullURL, aUStr);
+ bool bOk = compareFileName(aUStr, aUserDirectoryURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is NULL",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is NULL",
+ bOk);
+ }
+
+ CPPUNIT_TEST_SUITE(searchFileURL);
+ CPPUNIT_TEST(searchFileURL_001);
+ CPPUNIT_TEST(searchFileURL_002);
+ CPPUNIT_TEST(searchFileURL_003);
+ CPPUNIT_TEST(searchFileURL_004);
+ CPPUNIT_TEST(searchFileURL_005);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // static inline RC getTempDirURL(OUString& ustrTempDirURL)
+
+ class getTempDirURL : public CppUnit::TestFixture
+ {
+ private:
+ OUString aUStr;
+
+ public:
+ void setUp() override
+ {
+ osl::FileBase::RC nError = osl::FileBase::getTempDirURL(aUStr);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getTempDirURL function: execution",
+ osl::FileBase::E_None, nError);
+ }
+
+ void getTempDirURL_002()
+ {
+ CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
+ checkDirectory(aUStr, oslCheckMode::OpenAccess));
+ CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
+ checkDirectory(aUStr, oslCheckMode::ReadAccess));
+ CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
+ checkDirectory(aUStr, oslCheckMode::WriteAccess));
+ }
+
+ CPPUNIT_TEST_SUITE(getTempDirURL);
+ CPPUNIT_TEST(getTempDirURL_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // static inline RC createTempFile(OUString* pustrDirectoryURL,
+ // oslFileHandle* pHandle,
+ // OUString* pustrTempFileURL)
+
+ class createTempFile : public CppUnit::TestFixture
+ {
+ private:
+ std::unique_ptr<oslFileHandle> pHandle;
+ std::unique_ptr<OUString> pUStr_DirURL;
+ std::unique_ptr<OUString> pUStr_FileURL;
+
+ public:
+ void setUp() override
+ {
+ pHandle.reset(new oslFileHandle());
+ pUStr_DirURL.reset(new OUString(aUserDirectoryURL));
+ pUStr_FileURL.reset(new OUString());
+ }
+
+ void tearDown() override
+ {
+ pUStr_DirURL.reset();
+ pUStr_FileURL.reset();
+ pHandle.reset();
+ }
+
+ void createTempFile_001()
+ {
+ auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), pUStr_FileURL.get());
+ File testFile(*pUStr_FileURL);
+ auto nError2 = testFile.open(osl_File_OpenFlag_Create);
+
+ if (nError2 == osl::FileBase::E_EXIST)
+ {
+ osl_closeFile(*pHandle);
+ deleteTestFile(*pUStr_FileURL);
+ }
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: create temp file and test the existence",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for createTempFile function: create temp file and test the existence",
+ (pHandle != nullptr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: create temp file and test the existence",
+ osl::FileBase::E_EXIST, nError2);
+ }
+
+ void createTempFile_002()
+ {
+ bool bOK = false;
+ auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), pUStr_FileURL.get());
+ File testFile(*pUStr_FileURL);
+ auto nError2 = testFile.open(osl_File_OpenFlag_Create);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ (pHandle != nullptr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ osl::FileBase::E_EXIST, nError2);
+
+ // check file if have the write permission
+ if (nError2 == osl::FileBase::E_EXIST)
+ {
+ bOK = ifFileCanWrite(*pUStr_FileURL);
+ osl_closeFile(*pHandle);
+ deleteTestFile(*pUStr_FileURL);
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("test for open and write access rights, in (W32), it did not have write access right, but it should be writable.",
+ bOK);
+ }
+
+ void createTempFile_003()
+ {
+ auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), nullptr);
+ // the temp file will be removed when return from createTempFile
+ bool bOK = (pHandle != nullptr && nError1 == osl::FileBase::E_None);
+ if (bOK)
+ osl_closeFile(*pHandle);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.",
+ bOK);
+ }
+
+ void createTempFile_004()
+ {
+ auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), nullptr, pUStr_FileURL.get());
+ bool bOK = (pUStr_FileURL != nullptr);
+ CPPUNIT_ASSERT(bOK);
+ File testFile(*pUStr_FileURL);
+ auto nError2 = testFile.open(osl_File_OpenFlag_Create);
+ deleteTestFile(*pUStr_FileURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ osl::FileBase::E_EXIST, nError2);
+ CPPUNIT_ASSERT_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ bOK);
+
+ }
+
+ CPPUNIT_TEST_SUITE(createTempFile);
+ CPPUNIT_TEST(createTempFile_001);
+ CPPUNIT_TEST(createTempFile_002);
+ CPPUNIT_TEST(createTempFile_003);
+ CPPUNIT_TEST(createTempFile_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // FIXME: remove the _disabled to enable:
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::getAbsoluteFileURL, "osl_osl::FileBase");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::SystemPath_FileURL, "osl_osl::FileBase");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::searchFileURL, "osl_osl::FileBase");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::getTempDirURL, "osl_osl::FileBase");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::createTempFile, "osl_osl::FileBase");
+
+ CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_osl::FileBase");
+}
+
+namespace osl_FileStatus
+{
+ // testing the method
+ // FileStatus(sal_uInt32 nMask): _nMask(nMask)
+ class ctors : public CppUnit::TestFixture
+ {
+ private:
+ OUString aUStr;
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ Directory aDir(aTmpName3);
+ auto nError1 = aDir.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = aDir.getNextItem(rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ aDir.close();
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void ctors_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_All);
+ auto nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ aUStr = rFileStatus.getFileName();
+
+ CPPUNIT_ASSERT_MESSAGE("test for ctors function: mask all and see the file name",
+ compareFileName(aUStr, aTmpName2));
+ }
+
+ void ctors_002()
+ {
+ FileStatus rFileStatus(0);
+ auto nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ aUStr = rFileStatus.getFileName();
+
+ CPPUNIT_ASSERT_MESSAGE("test for ctors function: mask is empty",
+ compareFileName(aUStr, aNullURL));
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_001);
+ CPPUNIT_TEST(ctors_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_Bool isValid(sal_uInt32 nMask) const
+
+ class isValid : public CppUnit::TestFixture
+ {
+ private:
+ std::unique_ptr<Directory> pDir;
+ DirectoryItem rItem_file, rItem_link;
+
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ pDir.reset(new Directory(aTmpName3));
+ osl::FileBase::RC nError1 = pDir->open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = pDir->getNextItem(rItem_file, 1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ osl::FileBase::RC nError1 = pDir->close();
+ pDir.reset();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void isValid_001()
+ {
+ sal_uInt32 mask = 0;
+ FileStatus rFileStatus(mask);
+ osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ bool bOk = rFileStatus.isValid(mask);
+
+ CPPUNIT_ASSERT_MESSAGE("test for isValid function: no fields specified", bOk);
+ }
+
+ void check_FileStatus(FileStatus const& _aStatus)
+ {
+ OString sStat;
+ if (_aStatus.isValid(osl_FileStatus_Mask_Type))
+ sStat += "type ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_Attributes))
+ sStat += "attributes ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_CreationTime))
+ sStat += "ctime ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_AccessTime))
+ sStat += "atime ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_ModifyTime))
+ sStat += "mtime ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_FileSize))
+ sStat += "filesize ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_FileName))
+ sStat += "filename ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_FileURL))
+ sStat += "fileurl ";
+ printf("mask: %s\n", sStat.getStr());
+ }
+
+ void isValid_002()
+ {
+ createTestFile(aTmpName6);
+ sal_uInt32 mask_file = osl_FileStatus_Mask_Type |
+ osl_FileStatus_Mask_Attributes |
+ osl_FileStatus_Mask_CreationTime |
+ osl_FileStatus_Mask_AccessTime |
+ osl_FileStatus_Mask_ModifyTime |
+ osl_FileStatus_Mask_FileSize |
+ osl_FileStatus_Mask_FileName |
+ osl_FileStatus_Mask_FileURL;
+
+ FileStatus rFileStatus(mask_file);
+ DirectoryItem::get(aTmpName6, rItem_file);
+ osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+
+ check_FileStatus(rFileStatus);
+ deleteTestFile(aTmpName6);
+
+ }
+
+ /** Check if is a valid linked file.
+
+ Link is not defined in Windows, and on Linux, we can not get the directory item of the linked file.
+ We have to defer to filesystems, normal filesystems support links (EXT2, ...), castrated filesystems
+ don't have links (FAT, FAT32) and Windows NT NTFS support links, but the Windows API doesn't :-(
+ */
+ void isValid_003()
+ {
+#if 0
+#if defined (UNX)
+ sal_Int32 fd;
+
+ OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
+ aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/tmpdir/link.file";
+ aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/tmpdir/tmpname";
+
+ OString strLinkFileName;
+ OString strSrcFileName;
+ strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US);
+ strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US);
+
+ // create a link file and link it to file "/tmp/PID/tmpdir/tmpname"
+ fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+
+ // testDirectory is "/tmp/PID/tmpdir/"
+ Directory testDirectory(aTmpName3);
+ testDirectory.open();
+ OUString aFileName ("link.file");
+ bool bOk = false;
+ while (true)
+ {
+ osl::FileBase::RC nError1 = testDirectory.getNextItem(rItem_link, 4);
+
+ if (nError1 == osl::FileBase::E_None)
+ {
+ sal_uInt32 mask_link = osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_LinkTargetURL;
+ FileStatus rFileStatus(mask_link);
+ rItem_link.getFileStatus(rFileStatus);
+
+ if (compareFileName(rFileStatus.getFileName(), aFileName))
+ {
+ if (rFileStatus.isValid(osl_FileStatus_Mask_LinkTargetURL))
+ {
+ bOk = true;
+ break;
+ }
+ }
+ }
+ else
+ {
+ break;
+ }
+ };
+
+ fd = remove(strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+
+ CPPUNIT_ASSERT_MESSAGE("test for isValid function: link file, check for LinkTargetURL", bOk);
+#endif
+#endif
+ }
+
+ void isValid_004()
+ {
+ sal_uInt32 mask_file_all = osl_FileStatus_Mask_All;
+ FileStatus rFileStatus_all(mask_file_all);
+ osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus_all);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ check_FileStatus(rFileStatus_all);
+
+ sal_uInt32 mask_file_val = osl_FileStatus_Mask_Validate;
+ FileStatus rFileStatus_val(mask_file_val);
+ nError1 = rItem_file.getFileStatus(rFileStatus_val);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ check_FileStatus(rFileStatus_val);
+ }
+
+ CPPUNIT_TEST_SUITE(isValid);
+ CPPUNIT_TEST(isValid_001);
+ CPPUNIT_TEST(isValid_002);
+ CPPUNIT_TEST(isValid_003);
+ CPPUNIT_TEST(isValid_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline Type getFileType() const
+
+ class getFileType : public CppUnit::TestFixture
+ {
+ private:
+ DirectoryItem m_aItem_1, m_aItem_2, m_aVolumeItem, m_aFifoItem;
+ DirectoryItem m_aLinkItem, m_aSocketItem, m_aSpecialItem;
+
+ public:
+ void setUp() override
+ {
+ // create a tempfile: $TEMP/tmpdir/tmpname.
+ // a tempdirectory: $TEMP/tmpdir/tmpdir.
+ // use $ROOT/staroffice as volume ---> use dev/fd as volume.
+ // and get their directory item.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName3, aTmpName2);
+ createTestDirectory(aTmpName3, aTmpName1);
+
+ std::unique_ptr<Directory> xDir(new Directory(aTmpName3));
+ auto nError1 = xDir->open();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("open aTmpName3 failed!", osl::FileBase::E_None, nError1);
+ // getNextItem can not assure which item retrieved
+ nError1 = xDir->getNextItem(m_aItem_1, 1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("get first item failed!", osl::FileBase::E_None, nError1);
+
+ nError1 = xDir->getNextItem(m_aItem_2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("get second item failed!", osl::FileBase::E_None, nError1);
+ xDir->close();
+ // FIXME mindy: failed on my RH9, so removed temporarily
+ // nError1 = DirectoryItem::get(aVolURL2, m_aVolumeItem);
+ // CPPUNIT_ASSERT_MESSAGE("get volume item failed!", osl::FileBase::E_None == nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove all in $TEMP/tmpdir.
+ deleteTestDirectory(aTmpName3, aTmpName1);
+ deleteTestFile(aTmpName3, aTmpName2);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void getFileType_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileName);
+ auto nError1 = m_aItem_1.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("getFileStatus failed", osl::FileBase::E_None, nError1);
+
+ check_FileType(rFileStatus);
+ }
+
+ void check_FileType(osl::FileStatus const& _rFileStatus)
+ {
+ if (_rFileStatus.isValid(osl_FileStatus_Mask_FileName))
+ {
+ OUString suFilename = _rFileStatus.getFileName();
+
+ if (_rFileStatus.isValid(osl_FileStatus_Mask_Type))
+ {
+ osl::FileStatus::Type eType = _rFileStatus.getFileType();
+ bool bOK = false;
+
+ if (compareFileName(suFilename, aTmpName2))
+ bOK = (eType == osl::FileStatus::Regular);
+
+ if (compareFileName(suFilename, aTmpName1))
+ bOK = (eType == FileStatus::Directory);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getFileType function: ", bOK);
+ }
+ }
+ // LLA: it's not a bug, if a FileStatus not exist, so no else
+ }
+
+ void getFileType_002()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileName);
+ auto nError1 = m_aItem_2.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ check_FileType(rFileStatus);
+ }
+
+ void getFileType_003()
+ {
+ }
+
+ void getFileType_007()
+ {
+#if defined(__sun) // Special file is different in Windows
+ auto nError1 = DirectoryItem::get(aTypeURL2, m_aSpecialItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check for File type
+ FileStatus rFileStatus(osl_FileStatus_Mask_Type);
+ nError1 = m_aSpecialItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ if (rFileStatus.isValid(osl_FileStatus_Mask_Type))
+ {
+ osl::FileStatus::Type eType = rFileStatus.getFileType();
+
+ CPPUNIT_ASSERT_MESSAGE("test for getFileType function: Special, Solaris version ",
+ (eType == FileStatus::Special));
+ }
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getFileType);
+ CPPUNIT_TEST(getFileType_001);
+ CPPUNIT_TEST(getFileType_002);
+ CPPUNIT_TEST(getFileType_003);
+ CPPUNIT_TEST(getFileType_007);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_uInt64 getAttributes() const
+
+ class getAttributes : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL, aTypeURL_Hid;
+ DirectoryItem rItem, rItem_hidden;
+
+ public:
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ aTypeURL_Hid = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL_Hid, aHidURL1);
+ createTestFile(aTypeURL_Hid);
+#ifdef _WIN32
+ hideFile(aTypeURL_Hid);
+#endif
+ nError = DirectoryItem::get(aTypeURL_Hid, rItem_hidden);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ deleteTestFile(aTypeURL_Hid);
+ }
+
+#if (defined UNX)
+// windows only has 3 file attributes: normal, readonly and hidden
+ void getAttributes_001()
+ {
+ changeFileMode(aTypeURL, S_IRUSR | S_IRGRP | S_IROTH);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ if (geteuid() == 0) // as root, access(W_OK) may be true despite mode
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: (not ReadOnly,) GrpRead, OwnRead, OthRead(UNX version) ",
+ static_cast<sal_uInt64>(osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead),
+ rFileStatus.getAttributes());
+ }
+ else
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead(UNX version) ",
+ static_cast<sal_uInt64>(osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead),
+ rFileStatus.getAttributes());
+ }
+ }
+#else // Windows version
+ void getAttributes_001()
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead(Windows version)",
+ 1, 1);
+ }
+#endif
+
+ void getAttributes_002()
+ {
+#if (defined UNX)
+ changeFileMode(aTypeURL, S_IXUSR | S_IXGRP | S_IXOTH);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ if (geteuid() == 0) // as root, access(W_OK) may be true despite mode
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: Executable, GrpExe, OwnExe, OthExe, the result is (not Readonly,) Executable, GrpExe, OwnExe, OthExe, it partly not pass(Solaris version)",
+ static_cast<sal_uInt64>(osl_File_Attribute_Executable | osl_File_Attribute_GrpExe | osl_File_Attribute_OwnExe | osl_File_Attribute_OthExe),
+ rFileStatus.getAttributes());
+ }
+ else
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: Executable, GrpExe, OwnExe, OthExe, the result is Readonly, Executable, GrpExe, OwnExe, OthExe, it partly not pass(Solaris version)",
+ static_cast<sal_uInt64>(osl_File_Attribute_ReadOnly | osl_File_Attribute_Executable | osl_File_Attribute_GrpExe | osl_File_Attribute_OwnExe | osl_File_Attribute_OthExe),
+ rFileStatus.getAttributes());
+ }
+#endif
+ }
+
+#if (defined UNX)
+ void getAttributes_003()
+ {
+ changeFileMode(aTypeURL, S_IWUSR | S_IWGRP | S_IWOTH);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: GrpWrite, OwnWrite, OthWrite(Solaris version)",
+ static_cast<sal_uInt64>(osl_File_Attribute_GrpWrite | osl_File_Attribute_OwnWrite | osl_File_Attribute_OthWrite),
+ rFileStatus.getAttributes());
+ }
+#else // Windows version
+ void getAttributes_003()
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: GrpWrite, OwnWrite, OthWrite(Windows version)",
+ 1, 1);
+ }
+#endif
+
+ void getAttributes_004()
+ {
+ sal_Int32 test_Attributes = osl_File_Attribute_Hidden;
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ osl::FileBase::RC nError = rItem_hidden.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ test_Attributes &= rFileStatus.getAttributes();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: Hidden files",
+ static_cast<sal_Int32>(osl_File_Attribute_Hidden), test_Attributes);
+ }
+
+ CPPUNIT_TEST_SUITE(getAttributes);
+ CPPUNIT_TEST(getAttributes_001);
+ CPPUNIT_TEST(getAttributes_002);
+ CPPUNIT_TEST(getAttributes_003);
+ CPPUNIT_TEST(getAttributes_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline TimeValue getAccessTime() const
+
+ class getAccessTime : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ }
+
+ void getAccessTime_001()
+ {
+ TimeValue *pTV_current = nullptr;
+ CPPUNIT_ASSERT((pTV_current = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ TimeValue *pTV_access = nullptr;
+ CPPUNIT_ASSERT((pTV_access = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_AccessTime);
+ osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus);
+ bool bOk = osl_getSystemTime(pTV_current);
+ CPPUNIT_ASSERT(bOk);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ *pTV_access = rFileStatus.getAccessTime();
+
+ bool bOK = t_compareTime(pTV_access, pTV_current, delta);
+ free(pTV_current);
+ free(pTV_access);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getAccessTime function: This test turns out that UNX precision is no more than 1 sec, don't know how to test this function, in Windows test, it lost hour min sec, only have date time. ",
+ bOK);
+ }
+
+ CPPUNIT_TEST_SUITE(getAccessTime);
+ CPPUNIT_TEST(getAccessTime_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline TimeValue getModifyTime() const
+
+ class getModifyTime : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ DirectoryItem rItem;
+
+ public:
+ void getModifyTime_001()
+ {
+ TimeValue *pTV_current = nullptr;
+ CPPUNIT_ASSERT((pTV_current = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+
+ // create file
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+
+ // get current time
+ bool bOk = osl_getSystemTime(pTV_current);
+ CPPUNIT_ASSERT(bOk);
+
+ // get instance item and filestatus
+ osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ FileStatus rFileStatus(osl_FileStatus_Mask_ModifyTime);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ // get modify time
+ TimeValue* pTV_modify = nullptr;
+ CPPUNIT_ASSERT((pTV_modify = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ *pTV_modify = rFileStatus.getModifyTime();
+
+ bool bOK = t_compareTime(pTV_modify, pTV_current, delta);
+ // delete file
+ deleteTestFile(aTypeURL);
+ free(pTV_current);
+ free(pTV_modify);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getModifyTime function: This test turns out that UNX precision is no more than 1 sec, don't know how to improve this function. ",
+ bOK);
+ }
+
+ CPPUNIT_TEST_SUITE(getModifyTime);
+ CPPUNIT_TEST(getModifyTime_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_uInt64 getFileSize() const
+
+ class getFileSize : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ }
+
+ void getFileSize_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileSize);
+ osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ sal_uInt64 uFileSize = rFileStatus.getFileSize();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileSize function: empty file ",
+ static_cast<sal_uInt64>(0), uFileSize);
+ }
+
+ void getFileSize_002()
+ {
+ File testfile(aTypeURL);
+ osl::FileBase::RC nError = testfile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ nError = testfile.setSize(TEST_FILE_SIZE);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileSize);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ sal_uInt64 uFileSize = rFileStatus.getFileSize();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileSize function: file with size of TEST_FILE_SIZE, did not pass in (W32). ",
+ static_cast<sal_uInt64>(TEST_FILE_SIZE), uFileSize);
+ }
+
+ CPPUNIT_TEST_SUITE(getFileSize);
+ CPPUNIT_TEST(getFileSize_001);
+ CPPUNIT_TEST(getFileSize_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline OUString getFileName() const
+
+ class getFileName : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ }
+
+
+ void getFileName_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ OUString aFileName = rFileStatus.getFileName();
+
+ CPPUNIT_ASSERT_MESSAGE("test for getFileName function: name compare with specify",
+ compareFileName(aFileName, aTmpName2));
+ }
+
+ CPPUNIT_TEST_SUITE(getFileName);
+ CPPUNIT_TEST(getFileName_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline OUString getFileURL() const
+
+ class getFileURL : public CppUnit::TestFixture
+ {
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ createTestFile(aTmpName6);
+ osl::FileBase::RC nError = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void getFileURL_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileURL);
+ osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ OUString aFileURL = rFileStatus.getFileURL();
+
+ CPPUNIT_ASSERT_MESSAGE("test for getFileURL function: ",
+ compareFileName(aFileURL, aTmpName6));
+ }
+
+ CPPUNIT_TEST_SUITE(getFileURL);
+ CPPUNIT_TEST(getFileURL_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline OUString getLinkTargetURL() const
+
+ class getLinkTargetURL : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ }
+
+ void getLinkTargetURL_001()
+ {
+#if 0
+#if (defined UNX) // Link file is not defined in Windows
+ // create a link file;
+ OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
+ aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/link.file";
+ aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/tmpname";
+
+ OString strLinkFileName, strSrcFileName;
+ strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US);
+ strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US);
+
+ sal_Int32 fd;
+ fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("in creating link file", static_cast<sal_Int32>(0), fd);
+
+ // get linkTarget URL
+ auto nError = DirectoryItem::get(aLnkURL1, rItem);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("in getting link file item", osl::FileBase::E_None, nError);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_LinkTargetURL);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("in getting link file status", osl::FileBase::E_None, nError);
+ OUString aFileURL = rFileStatus.getLinkTargetURL();
+
+ // remove link file
+ fd = remove(strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("in deleting link file", static_cast<sal_Int32>(0), fd);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getLinkTargetURL function: Solaris version, create a file, and a link file link to it, get its LinkTargetURL and compare",
+ compareFileName(aFileURL, aTypeURL));
+#endif
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getLinkTargetURL);
+ CPPUNIT_TEST(getLinkTargetURL_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::ctors, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::isValid, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileType, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getAttributes, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getAccessTime, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getModifyTime, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileSize, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileName, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileURL, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getLinkTargetURL, "osl_FileStatus");
+
+ CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_FileStatus");
+}
+
+namespace osl_File
+{
+
+ // testing the method
+ // File(const OUString& ustrFileURL)
+
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void ctors_001()
+ {
+ File testFile(aTmpName4);
+
+ osl::FileBase::RC nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ osl::FileBase::RC nError2 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a File and test its open and close",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a File and test its open and close",
+ osl::FileBase::E_None, nError2);
+ }
+
+ void ctors_002()
+ {
+ File testFile(aTmpName5);
+ char buffer[30] = "Test for File constructor";
+ sal_uInt64 nCount;
+
+ osl::FileBase::RC nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ osl::FileBase::RC nError2 = testFile.write(buffer, 30, nCount);
+ testFile.close();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: test relative file URL, this test show that relative file URL is also acceptable",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: test relative file URL, this test show that relative file URL is also acceptable",
+ osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_001);
+ CPPUNIT_TEST(ctors_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC open(sal_uInt32 uFlags)
+
+ class open : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void open_001()
+ {
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ auto nError2 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("close error", osl::FileBase::E_None, nError2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a regular file",
+ osl::FileBase::E_None, nError1);
+ }
+
+ void open_002()
+ {
+ File testFile(aTmpName3);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read);
+
+ CPPUNIT_ASSERT_MESSAGE("test for open function: open a directory",
+ (File::E_INVAL == nError1) || (File::E_ACCES == nError1));
+ }
+
+ void open_003()
+ {
+ File testFile(aCanURL1);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a non-exist file",
+ File::E_NOENT, nError1);
+ }
+
+ void open_005()
+ {
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Create);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: create an exist file",
+ File::E_EXIST, nError1);
+ }
+
+ void open_006()
+ {
+ File testFile(aCanURL1);
+ char buffer_write[30] = "Test for File open";
+ char buffer_read[30];
+ sal_uInt64 nCount_write, nCount_read;
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write | osl_File_OpenFlag_Create);
+ auto nError2 = testFile.write(buffer_write, 30, nCount_write);
+ osl::FileBase::RC nError4 = testFile.setPos(osl_Pos_Absolut, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError4);
+ auto nError3 = testFile.read(buffer_read, 10, nCount_read);
+
+ osl::FileBase::RC nError5 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError5);
+ osl::FileBase::RC nError6 = osl::File::remove(aCanURL1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ osl::FileBase::E_None, nError3);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ sal_uInt64(30), nCount_write);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ sal_uInt64(10), nCount_read);
+ }
+
+ CPPUNIT_TEST_SUITE(open);
+ CPPUNIT_TEST(open_001);
+ CPPUNIT_TEST(open_002);
+ CPPUNIT_TEST(open_003);
+ CPPUNIT_TEST(open_005);
+ CPPUNIT_TEST(open_006);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC close()
+
+ class close : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void close_001()
+ {
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ auto nError2 = testFile.close();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for close function: close a regular file",
+ osl::FileBase::E_None, nError2);
+ }
+
+ void close_002()
+ {
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ auto nError2 = testFile.close();
+
+ auto nError3 = testFile.setPos(osl_Pos_Absolut, 0);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for close function: manipulate a file after it has been closed",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for close function: manipulate a file after it has been closed",
+ (osl::FileBase::E_None != nError3));
+ }
+
+ CPPUNIT_TEST_SUITE(close);
+ CPPUNIT_TEST(close_001);
+ CPPUNIT_TEST(close_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC setPos(sal_uInt32 uHow, sal_Int64 uPos)
+
+ class setPos : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_write = 0;
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void setPos_001()
+ {
+ File testFile(aTmpName4);
+ char buffer_read[2];
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.setPos(osl_Pos_Absolut, 26);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_read = 0;
+ nError1 = testFile.read(buffer_read, 1, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_Absolut, set the position to 26, test if the 26th char in file is correct",
+ pBuffer_Char[26], buffer_read[0]);
+ }
+
+ void setPos_002()
+ {
+ File testFile(aTmpName4);
+ char buffer_read[2];
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.setPos(osl_Pos_Absolut, sizeof(pBuffer_Char) - 2);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.setPos(osl_Pos_Current, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_read = 0;
+ nError1 = testFile.read(buffer_read, 1, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_Current, set the position to end, test if the (end -1) char in file is correct",
+ pBuffer_Char[sizeof(pBuffer_Char) - 2], buffer_read[0]);
+ }
+
+ void setPos_003()
+ {
+ File testFile(aTmpName4);
+ char buffer_read[2];
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // the file size is smaller than 100
+ nError1 = testFile.setPos(osl_Pos_End, -100);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("should return error", osl::FileBase::E_INVAL, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_End, -53);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_read = 0;
+ nError1 = testFile.read(buffer_read, 1, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_End, set the position to end, test if the first char in file is correct",
+ pBuffer_Char[0], buffer_read[0]);
+ }
+
+ CPPUNIT_TEST_SUITE(setPos);
+ CPPUNIT_TEST(setPos_001);
+ CPPUNIT_TEST(setPos_002);
+ CPPUNIT_TEST(setPos_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC getPos(sal_uInt64& uPos)
+
+ class getPos : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_write = 0;
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void getPos_001()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+
+ auto nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, nError1);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_Absolut, 26);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getPos function: set the position to 26, get position and check if it is right",
+ static_cast<sal_uInt64>(26), nFilePointer);
+ }
+
+ CPPUNIT_TEST_SUITE(getPos);
+ CPPUNIT_TEST(getPos_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC isEndOfFile(sal_Bool *pIsEOF)
+
+ class isEndOfFile : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_write = 0;
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void isEndOfFile_001()
+ {
+ File testFile(aTmpName4);
+ sal_Bool bEOF = false;
+ sal_Bool *pEOF = &bEOF;
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_End, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.isEndOfFile(pEOF);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for isEndOfFile function: set the position to end, check if reach end",
+ *pEOF);
+ }
+
+ void isEndOfFile_002()
+ {
+ File testFile(aTmpName4);
+ sal_Bool bEOF = false;
+ sal_Bool *pEOF = &bEOF;
+ sal_uInt64 nFilePointer = 0;
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_Absolut, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ *pEOF = false;
+
+ while (!(*pEOF))
+ {
+ nError1 = testFile.isEndOfFile(pEOF);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.setPos(osl_Pos_Current, 1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for isEndOfFile function: use isEndOfFile to move pointer step by step",
+ static_cast<sal_uInt64>(sizeof(pBuffer_Char) + 1), nFilePointer);
+ }
+ CPPUNIT_TEST_SUITE(isEndOfFile);
+ CPPUNIT_TEST(isEndOfFile_001);
+ CPPUNIT_TEST(isEndOfFile_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC setSize(sal_uInt64 uSize)
+
+ class setSize : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_write = 0;
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void setSize_001()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // enlarge the file to size of 100;
+ nError1 = testFile.setSize(100);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // get the file size;
+ nError1 = testFile.setPos(osl_Pos_End, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setSize function: enlarge the file ",
+ static_cast<sal_uInt64>(100), nFilePointer);
+ }
+
+ void setSize_002()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // enlarge the file to size of 100;
+ nError1 = testFile.setSize(10);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // get the file size;
+ nError1 = testFile.setPos(osl_Pos_End, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setSize function: truncate the file ",
+ static_cast<sal_uInt64>(10), nFilePointer);
+ }
+
+ CPPUNIT_TEST_SUITE(setSize);
+ CPPUNIT_TEST(setSize_001);
+ CPPUNIT_TEST(setSize_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC read(void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64& rBytesRead)
+
+ class read : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_write = 0;
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void read_001()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+ char buffer_read[10];
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_read = 0;
+ nError1 = testFile.read(buffer_read, 10, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read whole content in the file to a buffer",
+ sal_uInt64(10), nFilePointer);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read whole content in the file to a buffer",
+ 0, strncmp(buffer_read, pBuffer_Char, 10));
+ }
+
+ void read_002()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+ char buffer_read[26];
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_Absolut, 26);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_read = 0;
+ nError1 = testFile.read(buffer_read, 26, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file",
+ sal_uInt64(52), nFilePointer);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file",
+ sal_uInt64(26), nCount_read);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file",
+ 0, strncmp(buffer_read, &pBuffer_Char[26], 26));
+ }
+
+ CPPUNIT_TEST_SUITE(read);
+ CPPUNIT_TEST(read_001);
+ CPPUNIT_TEST(read_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC write(const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64& rBytesWritten)
+
+ class write : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void write_001()
+ {
+ File testFile(aTmpName6);
+ sal_uInt64 nFilePointer;
+ char buffer_read[10];
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ sal_uInt64 nCount_write = 0, nCount_read = 0;
+ // write chars into the file.
+ nError1 = testFile.write(pBuffer_Char, 10, nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get the current pointer;
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // reset pointer to the beginning;
+ nError1 = testFile.setPos(osl_Pos_Absolut, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.read(buffer_read, 10, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size",
+ sal_uInt64(10), nFilePointer);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size",
+ 0, strncmp(buffer_read, pBuffer_Char, 10));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size",
+ sal_uInt64(10), nCount_write);
+ }
+
+ CPPUNIT_TEST_SUITE(write);
+ CPPUNIT_TEST(write_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC readLine(::ByteSequence& aSeq)
+
+ class readLine : public CppUnit::TestFixture
+ {
+ rtl::ByteSequence aSequence;
+
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+
+ // write some strings into the file.
+ File testFile(aTmpName6);
+ char ppStrSeq[3][27] = { "abcde\n",
+ "1234567890\n",
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ };
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ sal_uInt64 nCount_write = 0;
+ for (int nCount = 0; nCount < 3; nCount++)
+ {
+ nError1 = testFile.write(ppStrSeq[nCount], strlen(ppStrSeq[nCount]), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void readLine_001()
+ {
+ File testFile(aTmpName6);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.readLine(aSequence);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read the first line of the file.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read the first line of the file.",
+ 0, strncmp(reinterpret_cast<char *>(aSequence.getArray()), pBuffer_Char, 5));
+ }
+
+ void readLine_002()
+ {
+ File testFile(aTmpName6);
+ sal_Bool bEOF = false;
+ sal_Bool *pEOF = &bEOF;
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ for (int nCount = 0; nCount < 3; nCount++)
+ {
+ nError1 = testFile.readLine(aSequence);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+ nError1 = testFile.isEndOfFile(pEOF);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for readLine function: read three lines of the file and check the file pointer moving.",
+ *pEOF);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read three lines of the file and check the file pointer moving.",
+ 0, strncmp(reinterpret_cast<char *>(aSequence.getArray()), &pBuffer_Char[26], 26));
+ }
+ CPPUNIT_TEST_SUITE(readLine);
+ CPPUNIT_TEST(readLine_001);
+ CPPUNIT_TEST(readLine_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC copy(const OUString& ustrSourceFileURL, const OUString& ustrDestFileURL)
+
+ class copy : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_write = 0;
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void copy_001()
+ {
+ File testFile(aTmpName6);
+
+ // copy $TEMP/tmpdir/tmpname to $TEMP/tmpname.
+ auto nError1 = File::copy(aTmpName4, aTmpName6);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // check
+ nError1 = testFile.open(osl_File_OpenFlag_Create);
+ deleteTestFile(aTmpName6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy file to upper directory",
+ osl::FileBase::E_EXIST, nError1);
+ }
+
+ void copy_002()
+ {
+ // copy $TEMP/tmpdir/tmpname to $TEMP/tmpdir.
+ auto nError1 = File::copy(aTmpName4, aTmpName3);
+
+ CPPUNIT_ASSERT_MESSAGE("test for copy function: use directory as destination",
+ (osl::FileBase::E_ISDIR == nError1) ||(osl::FileBase::E_ACCES == nError1));
+ }
+
+ void copy_003()
+ {
+#if 0
+ // copy $TEMP/tmpdir/tmpname to $ROOT/tmpname.
+ auto nError1 = File::copy(aTmpName4, aTmpName7);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy to an illegal place",
+ osl::FileBase::E_ACCES, nError1);
+#endif
+ }
+
+ void copy_004()
+ {
+ // copy $TEMP/tmpname to $TEMP/tmpdir/tmpname.
+ auto nError1 = File::copy(aTmpName6, aTmpName4);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy a not exist file",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void copy_005()
+ {
+ // copy $TEMP/tmpname to $TEMP/system.path using system path.
+ auto nError1 = File::copy(aTmpName6, aSysPath1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy a file using system file path",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void copy_006()
+ {
+ createTestFile(aTmpName6);
+ File tmpFile(aTmpName6);
+ tmpFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read);
+ tmpFile.setSize(200);
+ tmpFile.close();
+ // copy to new path
+ auto nError1 = File::copy(aTmpName6, aTmpName4);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check if is the new file
+ File newFile(aTmpName4);
+ newFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read);
+ nError1 = newFile.setPos(osl_Pos_End, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ sal_uInt64 nFilePointer;
+ nError1 = newFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ newFile.close();
+ deleteTestFile(aTmpName6);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: the dest file exist",
+ static_cast<sal_uInt64>(200), nFilePointer);
+ }
+
+ CPPUNIT_TEST_SUITE(copy);
+ CPPUNIT_TEST(copy_001);
+ CPPUNIT_TEST(copy_002);
+ CPPUNIT_TEST(copy_003);
+ CPPUNIT_TEST(copy_004);
+ CPPUNIT_TEST(copy_005);
+ CPPUNIT_TEST(copy_006);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC move(const OUString& ustrSourceFileURL, const OUString& ustrDestFileURL)
+
+ class move : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_write = 0;
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void move_001()
+ {
+ // rename $TEMP/tmpdir/tmpname to $TEMP/canonical.name.
+ auto nError1 = File::move(aTmpName4, aCanURL1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // check
+ File testFile(aCanURL1);
+ auto nError2 = testFile.open(osl_File_OpenFlag_Create);
+ deleteTestFile(aCanURL1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: rename file to another directory",
+ osl::FileBase::E_EXIST, nError2);
+ }
+
+ void move_002()
+ {
+#ifdef _WIN32
+ // move $TEMP/tmpdir/tmpname to $TEMP/tmpdir.
+ auto nError1 = File::move(aTmpName4, aTmpName3);
+ // returned osl::FileBase::E_ACCES on WNT
+ CPPUNIT_ASSERT_MESSAGE("test for move function: use directory as destination",
+ (osl::FileBase::E_ACCES == nError1 || osl::FileBase::E_ISDIR == nError1) ||(osl::FileBase::E_EXIST == nError1));
+#endif
+ }
+
+ void move_003()
+ {
+#if 0
+ // move $TEMP/tmpdir/tmpname to $ROOT/tmpname.
+ auto nError1 = File::move(aTmpName4, aTmpName7);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move to an illegal place",
+ osl::FileBase::E_ACCES, nError1);
+#endif
+ }
+
+ void move_004()
+ {
+ // move $TEMP/tmpname to $TEMP/tmpdir/tmpname.
+ auto nError1 = File::move(aTmpName6, aTmpName4);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a not exist file",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void move_005()
+ {
+ // move $TEMP/tmpname to $TEMP/system.path using system path.
+ auto nError1 = File::move(aTmpName6, aSysPath1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a file using system file",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void move_006()
+ {
+ // move directory $TEMP/tmpname to $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName6);
+ auto nError1 = File::move(aTmpName6, aTmpName4);
+ // move file $TEMP/tmpdir/tmpname to $TEMP/tmpname
+ auto nError2 = File::move(aTmpName4, aTmpName6);
+ deleteTestDirectory(aTmpName6);
+#if defined(_WIN32)
+ deleteTestDirectory(aTmpName4);// in Windows, it can be moved!!!!! this is only for not influence the following test.
+ deleteTestFile(aTmpName6);
+ nError1 = osl::FileBase::E_NOTDIR;
+ nError2 = osl::FileBase::E_ISDIR;
+#endif
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name, did not pass in (W32)",
+ osl::FileBase::E_NOTDIR, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name, did not pass in (W32)",
+ osl::FileBase::E_ISDIR, nError2);
+ }
+
+ void move_007()
+ {
+ // create directory $TEMP/tmpname.
+ createTestDirectory(aTmpName6);
+ // move directory $TEMP/tmpdir to $TEMP/tmpname/tmpdir
+ auto nError1 = File::move(aTmpName3, aTmpName8);
+ // check
+ auto nError2 = Directory::create(aTmpName8);
+ File::move(aTmpName8, aTmpName3);
+ deleteTestDirectory(aTmpName6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name",
+ osl::FileBase::E_EXIST, nError2);
+ }
+
+ // bugid# 115420, after the bug fix, add the case
+ CPPUNIT_TEST_SUITE(move);
+ CPPUNIT_TEST(move_001);
+ CPPUNIT_TEST(move_002);
+ CPPUNIT_TEST(move_003);
+ CPPUNIT_TEST(move_004);
+ CPPUNIT_TEST(move_005);
+ CPPUNIT_TEST(move_006);
+ CPPUNIT_TEST(move_007);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC remove(const OUString& ustrFileURL)
+
+ class remove : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ auto nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ sal_uInt64 nCount_write = 0;
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void remove_001()
+ {
+ // remove $TEMP/tmpdir/tmpname.
+ auto nError1 = File::remove(aTmpName4);
+ // check
+ File testFile(aTmpName4);
+ auto nError2 = testFile.open(osl_File_OpenFlag_Create);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a file",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for remove function: remove a file",
+ (osl::FileBase::E_EXIST != nError2));
+ }
+
+ void remove_002()
+ {
+ // remove $TEMP/tmpname.
+ auto nError1 = File::remove(aTmpName6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a file not exist",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void remove_003()
+ {
+ // remove $TEMP/system/path.
+ auto nError1 = File::remove(aSysPath2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: removing a file not using full qualified URL",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void remove_004()
+ {
+ // remove $TEMP/tmpdir.
+ auto nError1 = File::remove(aTmpName3);
+
+ CPPUNIT_ASSERT_MESSAGE("test for remove function: remove a directory",
+ (osl::FileBase::E_ISDIR == nError1) || (osl::FileBase::E_ACCES == nError1));
+ }
+
+ CPPUNIT_TEST_SUITE(remove);
+ CPPUNIT_TEST(remove_001);
+ CPPUNIT_TEST(remove_002);
+ CPPUNIT_TEST(remove_003);
+ CPPUNIT_TEST(remove_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC setAttributes(const OUString& ustrFileURL, sal_uInt64 uAttributes)
+
+ class setAttributes : public CppUnit::TestFixture
+ {
+ private:
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void setAttributes_001()
+ {
+ // on windows, only can set 2 attributes: osl_File_Attribute_ReadOnly, osl_File_Attribute_Hidden
+#ifdef UNX
+ // set the file to readonly
+ auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get the file attributes
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ if (geteuid() == 0) // as root, access(W_OK) may be true despite mode
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setAttributes function: set file attributes and get it to verify.",
+ static_cast<sal_uInt64>(osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead),
+ rFileStatus.getAttributes());
+ }
+ else
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setAttributes function: set file attributes and get it to verify.",
+ static_cast<sal_uInt64>(osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead),
+ rFileStatus.getAttributes());
+ }
+#else
+ // please see GetFileAttributes
+ auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get the file attributes
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // here the file has 2 Attributes: FILE_ATTRIBUTE_READONLY and FILE_ATTRIBUTE_NORMAL,
+ // but FILE_ATTRIBUTE_NORMAL is valid only if used alone, so this is maybe a bug
+ /*OString aString = OUStringToOString(aTmpName6, RTL_TEXTENCODING_ASCII_US);
+ DWORD dwFileAttributes = GetFileAttributes(aString.getStr());
+ if (dwFileAttributes & FILE_ATTRIBUTE_NORMAL)
+ printf("has normal attribute");
+ if (dwFileAttributes & FILE_ATTRIBUTE_READONLY)
+ printf("has readonly attribute");
+ */
+ CPPUNIT_ASSERT_MESSAGE("test for setAttributes function: set file attributes READONLY and get it to verify.",
+ (osl_File_Attribute_ReadOnly & rFileStatus.getAttributes()) != 0);
+#endif
+ }
+ void setAttributes_002()
+ {
+ // on UNX, can not set hidden attribute to file, rename file can set the attribute
+#ifdef _WIN32
+ // set the file to hidden
+ auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_Hidden);
+
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get the file attributes
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for setAttributes function: set file attributes and get it to verify.",
+ (osl_File_Attribute_Hidden & rFileStatus.getAttributes()) != 0);
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(setAttributes);
+ CPPUNIT_TEST(setAttributes_001);
+ CPPUNIT_TEST(setAttributes_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC setTime(
+ // const OUString& ustrFileURL,
+ // const TimeValue& rCreationTime,
+ // const TimeValue& rLastAccessTime,
+ // const TimeValue& rLastWriteTime)
+
+ class setTime : public CppUnit::TestFixture
+ {
+ private:
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void setTime_001()
+ {
+ TimeValue *pTV_current = nullptr;
+ CPPUNIT_ASSERT((pTV_current = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ TimeValue *pTV_creation = nullptr;
+ CPPUNIT_ASSERT((pTV_creation = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ TimeValue *pTV_access = nullptr;
+ CPPUNIT_ASSERT((pTV_access = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ TimeValue *pTV_modify = nullptr;
+ CPPUNIT_ASSERT((pTV_modify = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+
+ // get current time
+ bool bOk = osl_getSystemTime(pTV_current);
+ CPPUNIT_ASSERT(bOk);
+
+ // set the file time
+ auto nError2 = File::setTime(aTmpName6, *pTV_current, *pTV_current, *pTV_current);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError2).getStr(), osl::FileBase::E_None, nError2);
+
+ // get the file access time, creation time, modify time
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_AccessTime);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+ *pTV_access = rFileStatus.getAccessTime();
+
+ FileStatus rFileStatus1(osl_FileStatus_Mask_CreationTime);
+ nError1 = rItem.getFileStatus(rFileStatus1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+ *pTV_creation = rFileStatus1.getCreationTime();
+
+ FileStatus rFileStatus2(osl_FileStatus_Mask_ModifyTime);
+ nError1 = rItem.getFileStatus(rFileStatus2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+ *pTV_modify = rFileStatus2.getModifyTime();
+
+ CPPUNIT_ASSERT_MESSAGE("test for setTime function: set access time then get it. time precision is still a problem for it cut off the nanosec.",
+ t_compareTime(pTV_access, pTV_current, delta));
+#if defined(_WIN32)
+ // Unfortunately there is no way to get the creation time of a file under Unix (it's a Windows only feature).
+ // That means the flag osl_FileStatus_Mask_CreationTime should be deprecated under Unix.
+ CPPUNIT_ASSERT_MESSAGE("test for setTime function: set creation time then get it. ",
+ t_compareTime(pTV_creation, pTV_current, delta));
+#endif
+ CPPUNIT_ASSERT_MESSAGE("test for setTime function: set modify time then get it. ",
+ t_compareTime(pTV_modify, pTV_current, delta));
+ free(pTV_current);
+ free(pTV_creation);
+ free(pTV_access);
+ free(pTV_modify);
+ }
+
+ CPPUNIT_TEST_SUITE(setTime);
+ CPPUNIT_TEST(setTime_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC sync()
+
+ class sync : public CppUnit::TestFixture
+ {
+ private:
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestFile(aTmpName6);
+
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+ // test case: if The file is located on a read only file system.
+ void sync_001()
+ {
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ File tmp_file(aTmpName6);
+ osl::FileBase::RC err = tmp_file.open(osl_File_OpenFlag_Write);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("File open failed", osl::FileBase::E_None, err);
+
+ char buffer[50000];
+ sal_uInt64 written = 0;
+ nError1 = tmp_file.write(static_cast<void*>(buffer), sizeof(buffer), written);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("write failed!", osl::FileBase::E_None, nError1);
+
+ // set the file to readonly
+ auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+
+ nError2 = tmp_file.sync();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("can not sync to readonly file!", osl::FileBase::E_None, nError2);
+
+ tmp_file.close();
+ }
+ // test case:no enough space, how to create such case???see test_cpy_wrt_file.cxx::test_osl_writeFile
+
+ CPPUNIT_TEST_SUITE(sync);
+ CPPUNIT_TEST(sync_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::ctors, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::open, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::close, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setPos, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::getPos, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::isEndOfFile, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setSize, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::read, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::write, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::readLine, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::copy, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::move, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::remove, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setAttributes, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setTime, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::sync, "osl_File");
+
+ CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_File");
+}
+
+// Beginning of the test cases for DirectoryItem class
+
+namespace osl_DirectoryItem
+{
+ // testing the method
+ // DirectoryItem(): _pData(NULL)
+
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+ void ctors_001()
+ {
+ File testFile(aTmpName6);
+ DirectoryItem rItem; // constructor
+
+ // get the DirectoryItem.
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a new instance of DirectoryItem and get an item to check.",
+ osl::FileBase::E_None, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // DirectoryItem(const DirectoryItem& rItem): _pData(rItem._pData)
+
+ class copy_assin_Ctors : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void copy_assin_Ctors_001()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ DirectoryItem copyItem(rItem); // copy constructor
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError1 = copyItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for copy_assin_Ctors function: use copy constructor to get an item and check filename.",
+ compareFileName(rFileStatus.getFileName(), aTmpName2));
+ }
+
+ void copy_assin_Ctors_002()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ DirectoryItem copyItem;
+ copyItem = rItem; // assignment operator
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError1 = copyItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for copy_assin_Ctors function: test assignment operator here since it is same as copy constructor in test way.",
+ compareFileName(rFileStatus.getFileName(), aTmpName2));
+ }
+
+ CPPUNIT_TEST_SUITE(copy_assin_Ctors);
+ CPPUNIT_TEST(copy_assin_Ctors_001);
+ CPPUNIT_TEST(copy_assin_Ctors_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_Bool is()
+
+ class is : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+ void is_001()
+ {
+ DirectoryItem rItem; // constructor
+
+ CPPUNIT_ASSERT_MESSAGE("test for is function: use an uninitialized instance.",
+ !rItem.is());
+ }
+
+ void is_002()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for is function: use an uninitialized instance.",
+ rItem.is());
+ }
+
+ CPPUNIT_TEST_SUITE(is);
+ CPPUNIT_TEST(is_001);
+ CPPUNIT_TEST(is_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // static inline RC get(const OUString& ustrFileURL, DirectoryItem& rItem)
+
+ class get : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void get_001()
+ {
+ DirectoryItem rItem;
+ auto nError2 = DirectoryItem::get(aTmpName6, rItem);
+
+ // check the file name
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ auto nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use copy constructor to get an item and check filename.",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for get function: use copy constructor to get an item and check filename.",
+ compareFileName(rFileStatus.getFileName(), aTmpName2));
+ }
+
+ void get_002()
+ {
+ DirectoryItem rItem;
+ auto nError1 = DirectoryItem::get(aSysPath1, rItem);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use a system name instead of a URL.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void get_003()
+ {
+ DirectoryItem rItem;
+
+ auto nError1 = DirectoryItem::get(aTmpName3, rItem);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use a non existed file URL.",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(get);
+ CPPUNIT_TEST(get_001);
+ CPPUNIT_TEST(get_002);
+ CPPUNIT_TEST(get_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC getFileStatus(FileStatus& rStatus)
+
+ class getFileStatus : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void getFileStatus_001()
+ {
+ DirectoryItem rItem;
+ // get the DirectoryItem.
+ auto nError1 = DirectoryItem::get(aTmpName4, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check the file name
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ auto nError2 = rItem.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: get file status and check filename",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for getFileStatus function: get file status and check filename",
+ compareFileName(rFileStatus.getFileName(), aTmpName2));
+ }
+
+ void getFileStatus_002()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_NOENT, nError1);
+
+ // check the file name
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ auto nError2 = rItem.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: file not existed",
+ osl::FileBase::E_INVAL, nError2);
+ }
+
+ void getFileStatus_003()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ auto nError1 = DirectoryItem::get(aTmpName3, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check the file name
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ auto nError2 = rItem.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: get directory information",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for getFileStatus function: get directory information",
+ compareFileName(rFileStatus.getFileName(), aTmpName1));
+ }
+
+ CPPUNIT_TEST_SUITE(getFileStatus);
+ CPPUNIT_TEST(getFileStatus_001);
+ CPPUNIT_TEST(getFileStatus_002);
+ CPPUNIT_TEST(getFileStatus_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::ctors, "osl_DirectoryItem");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::copy_assin_Ctors, "osl_DirectoryItem");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::is, "osl_DirectoryItem");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::get, "osl_DirectoryItem");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::getFileStatus, "osl_DirectoryItem");
+
+ CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_DirectoryItem");
+}
+
+// Beginning of the test cases for Directory class
+
+namespace osl_Directory
+{
+ // testing the method
+ // Directory(const OUString& strPath): _pData(0), _aPath(strPath)
+
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ // LLA: t_print("tearDown done.\n");
+ }
+
+
+ void ctors_001()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // close a directory
+ auto nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: create an instance and check open and close",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: create an instance and check open and close",
+ osl::FileBase::E_None, nError2);
+ }
+
+ void ctors_002()
+ {
+ Directory testDirectory(aTmpName9); // constructor
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // close a directory
+ auto nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: relative URL, :-), it is also worked",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: relative URL, :-), it is also worked",
+ osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_001);
+ CPPUNIT_TEST(ctors_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC open()
+
+ class open : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void open_001()
+ {
+ Directory testDirectory(aTmpName3);
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ // check if directory is opened.
+ bool bOk = testDirectory.isOpen();
+ // close a directory
+ auto nError2 = testDirectory.close();
+
+ CPPUNIT_ASSERT_MESSAGE("test for open function: open a directory and check for open",
+ bOk);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a directory and check for open",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a directory and check for open",
+ osl::FileBase::E_None, nError2);
+ }
+
+ void open_002()
+ {
+ Directory testDirectory(aTmpName6);
+
+ auto nError1 = testDirectory.open();
+ if (nError1 == osl::FileBase::E_None)
+ {
+ auto nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a file that is not existed",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void open_003()
+ {
+ Directory testDirectory(aUserDirectorySys);
+
+ auto nError1 = testDirectory.open();
+ if (nError1 == osl::FileBase::E_None)
+ {
+ auto nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: using system path",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void open_004()
+ {
+ Directory testDirectory(aTmpName4);
+
+ auto nError1 = testDirectory.open();
+ if (nError1 == osl::FileBase::E_None)
+ {
+ auto nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("test for open function: open a file instead of a directory",
+ (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_ACCES == nError1));
+ }
+
+ CPPUNIT_TEST_SUITE(open);
+ CPPUNIT_TEST(open_001);
+ CPPUNIT_TEST(open_002);
+ CPPUNIT_TEST(open_003);
+ CPPUNIT_TEST(open_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_Bool isOpen() { return _pData != NULL; };
+
+ class isOpen : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void isOpen_001()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // check if directory is opened.
+ bool bOk = testDirectory.isOpen();
+ // close a directory
+ auto nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for isOpen function: open a directory and check for open",
+ bOk);
+ }
+
+ void isOpen_002()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // check if directory is opened.
+ bool bOk = testDirectory.isOpen();
+
+ CPPUNIT_ASSERT_MESSAGE("test for isOpen function: do not open a directory and check for open",
+ !bOk);
+ }
+
+ CPPUNIT_TEST_SUITE(isOpen);
+ CPPUNIT_TEST(isOpen_001);
+ CPPUNIT_TEST(isOpen_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC close()
+
+ class close : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempdirectory : $TEMP/tmpdir.
+ createTestDirectory(aTmpName3);
+ }
+
+ void tearDown() override
+ {
+ // remove a tempdirectory : $TEMP/tmpdir.
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void close_001()
+ {
+ Directory testDirectory(aTmpName3);
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // close a directory
+ auto nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ // check if directory is opened.
+ bool bOk = testDirectory.isOpen();
+
+ CPPUNIT_ASSERT_MESSAGE("test for isOpen function: close a directory and check for open",
+ !bOk);
+ }
+
+ void close_002()
+ {
+ Directory testDirectory(aTmpName3);
+
+ // close a directory
+ auto nError1 = testDirectory.close();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for isOpen function: close a not opened directory",
+ osl::FileBase::E_BADF, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(close);
+ CPPUNIT_TEST(close_001);
+ CPPUNIT_TEST(close_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC reset()
+
+ class reset : public CppUnit::TestFixture
+ {
+ private:
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ // create a tempdirectory : $TEMP/tmpdir.
+ createTestDirectory(aTmpName3);
+ // create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
+ createTestFile(aTmpName3, aTmpName2);
+ createTestFile(aTmpName3, aTmpName1);
+ createTestFile(aTmpName3, aHidURL1);
+ }
+
+ void tearDown() override
+ {
+ // remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
+ deleteTestFile(aTmpName3, aHidURL1);
+ deleteTestFile(aTmpName3, aTmpName1);
+ deleteTestFile(aTmpName3, aTmpName2);
+ // remove a tempdirectory : $TEMP/tmpdir.
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void reset_001()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get first Item
+ nError1 = testDirectory.getNextItem(rItem, 1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // check the file name of first Item
+ FileStatus rFileStatusFirst(osl_FileStatus_Mask_FileName);
+ nError1 = rItem.getFileStatus(rFileStatusFirst);
+
+ // get second Item
+ // mindy: nError1 = testDirectory.getNextItem(rItem, 0);
+ // mindy: CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // reset enumeration
+ auto nError2 = testDirectory.reset();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ // get reset Item, if reset does not work, getNextItem() should return the second Item (aTmpName1)
+ nError1 = testDirectory.getNextItem(rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check the file name again
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ // close a directory
+ nError1 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ bool bOK1,bOK2,bOK3;
+ bOK1 = compareFileName(rFileStatus.getFileName(), aTmpName2);
+ bOK2 = compareFileName(rFileStatus.getFileName(), aHidURL1);
+ bOK3 = compareFileName(rFileStatus.getFileName(), rFileStatusFirst.getFileName());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: get two directory item, reset it, then get again, check the filename",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for reset function: get two directory item, reset it, then get again, check the filename",
+ (bOK1 || bOK2 || bOK3));
+ }
+
+ void reset_002()
+ {
+ Directory testDirectory(aTmpName6); // constructor
+
+ // close a directory
+ auto nError1 = testDirectory.reset();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: reset a non existed directory",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void reset_003()
+ {
+ Directory testDirectory(aTmpName4); // constructor
+
+ // close a directory
+ auto nError1 = testDirectory.reset();
+
+ CPPUNIT_ASSERT_MESSAGE("test for reset function: reset a file instead of a directory",
+ (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_NOENT == nError1));
+ }
+
+ void reset_004()
+ {
+ Directory testDirectory(aUserDirectorySys); // constructor
+
+ // close a directory
+ auto nError1 = testDirectory.reset();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: use a system path",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(reset);
+ CPPUNIT_TEST(reset_001);
+ CPPUNIT_TEST(reset_002);
+ CPPUNIT_TEST(reset_003);
+ CPPUNIT_TEST(reset_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC getNextItem(DirectoryItem& rItem, sal_uInt32 nHint = 0)
+
+ class getNextItem : public CppUnit::TestFixture
+ {
+ private:
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ // create a tempdirectory : $TEMP/tmpdir.
+ createTestDirectory(aTmpName3);
+ // create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
+ createTestFile(aTmpName3, aTmpName2);
+ createTestFile(aTmpName3, aTmpName1);
+ createTestFile(aTmpName3, aHidURL1);
+
+ }
+
+ void tearDown() override
+ {
+ // remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
+ deleteTestFile(aTmpName3, aHidURL1);
+ deleteTestFile(aTmpName3, aTmpName1);
+ deleteTestFile(aTmpName3, aTmpName2);
+ // remove a tempdirectory : $TEMP/tmpdir.
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void getNextItem_001()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check the file name
+ bool bOk1 = false;
+ bool bOk2 = false;
+ bool bOk3 = false;
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+
+ for (int nCount = 0; nCount < 3; nCount++)
+ {
+ // get three Items
+ nError1 = testDirectory.getNextItem(rItem, 2);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // a special order is not guaranteed. So any file may occur on any time.
+ // But every file name should occur only once.
+ if (!bOk1 && compareFileName(rFileStatus.getFileName(), aTmpName1))
+ {
+ bOk1 = true;
+ }
+
+ if (!bOk2 && compareFileName(rFileStatus.getFileName(), aTmpName2))
+ {
+ bOk2 = true;
+ }
+
+ if (!bOk3 && compareFileName(rFileStatus.getFileName(), aHidURL1))
+ {
+ bOk3 = true;
+ }
+ }
+
+ // close a directory
+ nError1 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
+ bOk1);
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
+ bOk2);
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
+ bOk3);
+ }
+
+ void getNextItem_002()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+ auto nError1 = testDirectory.getNextItem(rItem);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getNextItem function: retrieve an item in a directory which is not opened, also test for nHint's default value.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void getNextItem_003()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ osl::FileBase::RC nError2 = osl::FileBase::E_None;
+ for (int nCount = 0; nCount < 4; nCount++)
+ {
+ nError2 = testDirectory.getNextItem(rItem, 3);
+ }
+
+ // close a directory
+ nError1 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getNextItem function: retrieve 4 times in a directory which contain only 3 files.",
+ osl::FileBase::E_NOENT, nError2);
+ }
+
+ void getNextItem_004()
+ {
+ // create a link file(can not on Windows), then check if getNextItem can get it.
+#ifdef UNX
+ bool bLnkOK = false;
+ bool bFoundOK = false;
+
+ OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
+ aUStr_LnkFileSys += aSlashURL + "/tmpdir/link.file";
+ aUStr_SrcFileSys += aSlashURL + "/tmpdir/tmpname";
+
+ OString strLinkFileName, strSrcFileName;
+ strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US);
+ strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US);
+
+ // create a link file and link it to file "/tmp/PID/tmpdir/tmpname"
+ sal_Int32 fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+ Directory testDirectory(aTmpName3);
+
+ // open a directory
+ auto nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ OUString aFileName ("link.file");
+
+ while (true) {
+ nError1 = testDirectory.getNextItem(rItem, 4);
+ if (nError1 == osl::FileBase::E_None) {
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_Type);
+ rItem.getFileStatus(rFileStatus);
+ if (compareFileName(rFileStatus.getFileName(), aFileName))
+ {
+ bFoundOK = true;
+ if (rFileStatus.getFileType() == FileStatus::Link)
+ {
+ bLnkOK = true;
+ break;
+ }
+ }
+ }
+ else
+ break;
+ }
+ fd = std::remove(strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("remove link file failed", static_cast<sal_Int32>(0), fd);
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: check if can retrieve the link file name",
+ bFoundOK);
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: check if link file has file type link",
+ bLnkOK);
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getNextItem);
+ CPPUNIT_TEST(getNextItem_001);
+ CPPUNIT_TEST(getNextItem_002);
+ CPPUNIT_TEST(getNextItem_003);
+ CPPUNIT_TEST(getNextItem_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC getVolumeInfo(const OUString& ustrDirectoryURL, VolumeInfo& rInfo)
+
+ class getVolumeInfo : public CppUnit::TestFixture
+ {
+ public:
+ void checkValidMask(osl::VolumeInfo const& _aVolumeInfo, sal_Int32 _nMask)
+ {
+ if (_nMask == osl_VolumeInfo_Mask_FileSystemName)
+ {
+ // get file system name
+ OUString aFileSysName = _aVolumeInfo.getFileSystemName();
+
+ bool bRes2 = compareFileName(aFileSysName, aNullURL);
+ CPPUNIT_ASSERT_MESSAGE("test for getVolumeInfo function: getVolumeInfo of root directory.",
+ !bRes2);
+ }
+
+ if (_nMask == osl_VolumeInfo_Mask_Attributes)
+ {
+ bool b1 = _aVolumeInfo.getRemoteFlag();
+ bool b2 = _aVolumeInfo.getRemoveableFlag();
+ bool b3 = _aVolumeInfo.getCompactDiscFlag();
+ bool b4 = _aVolumeInfo.getFloppyDiskFlag();
+ bool b5 = _aVolumeInfo.getFixedDiskFlag();
+ bool b6 = _aVolumeInfo.getRAMDiskFlag();
+
+ OString sAttr;
+ if (b1) sAttr = "Remote";
+ if (b2) sAttr += " Removeable";
+ if (b3) sAttr += " CDROM";
+ if (b4) sAttr += " Floppy";
+ if (b5) sAttr += " FixedDisk";
+ if (b6) sAttr += " RAMDisk";
+
+ printf("Attributes: %s\n", sAttr.getStr());
+ }
+ if (_nMask == osl_VolumeInfo_Mask_TotalSpace)
+ {
+ // within Linux, df / * 1024 bytes is the result
+ sal_uInt64 nSize = _aVolumeInfo.getTotalSpace();
+ printf("Total space: %" SAL_PRIuUINT64 "\n", nSize);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_UsedSpace)
+ {
+ sal_uInt64 nSize = _aVolumeInfo.getUsedSpace();
+ printf(" Used space: %" SAL_PRIuUINT64 "\n", nSize);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_FreeSpace)
+ {
+ sal_uInt64 nSize = _aVolumeInfo.getFreeSpace();
+ printf(" Free space: %" SAL_PRIuUINT64 "\n", nSize);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_MaxNameLength)
+ {
+ sal_uInt32 nLength = _aVolumeInfo.getMaxNameLength();
+ printf("max name length: %" SAL_PRIuUINT32 "\n", nLength);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_MaxPathLength)
+ {
+ sal_uInt32 nLength = _aVolumeInfo.getMaxPathLength();
+ printf("max path length: %" SAL_PRIuUINT32 "\n", nLength);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_FileSystemCaseHandling)
+ {
+ bool bIsCase = _aVolumeInfo.isCaseSensitiveFileSystem();
+ printf("filesystem case sensitive: %s\n", bIsCase ? "yes" : "no");
+ }
+ }
+
+ void checkVolumeInfo(sal_Int32 _nMask)
+ {
+ VolumeInfo aVolumeInfo(_nMask);
+ // call getVolumeInfo here
+ auto nError1 = Directory::getVolumeInfo(aVolURL1, aVolumeInfo);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "test for getVolumeInfo function: getVolumeInfo of root directory.",
+ osl::FileBase::E_None, nError1);
+ // LLA: IMHO it's not a bug, if VolumeInfo is not valid, it's a feature
+ // LLA: CPPUNIT_ASSERT_MESSAGE("mask is not valid", sal_True == aVolumeInfo.isValid(_nMask));
+ if (aVolumeInfo.isValid(_nMask))
+ checkValidMask(aVolumeInfo, _nMask);
+ }
+
+ void getVolumeInfo_001_1()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_2()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_Attributes;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_3()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_TotalSpace;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_4()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_UsedSpace;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_5()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FreeSpace;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_6()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_MaxNameLength;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_7()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_MaxPathLength;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_8()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemCaseHandling;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_002()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName;
+ VolumeInfo aVolumeInfo(mask);
+ // call getVolumeInfo here
+
+ OUString aRootSysURL;
+ auto nError1 = osl::File::getFileURLFromSystemPath(aRootSys, aRootSysURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("can't convert root path to file url", osl::FileBase::E_None, nError1);
+
+ nError1 = Directory::getVolumeInfo(aRootSys, aVolumeInfo);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getVolumeInfo function: use system path as parameter.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void getVolumeInfo_003()
+ {
+// LLA: in Windows, it reply no error, it did not pass in (W32).
+#if defined(UNX) && !defined(IOS)
+ sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName;
+ VolumeInfo aVolumeInfo(mask);
+ // call getVolumeInfo here
+ auto nError1 = Directory::getVolumeInfo(aTmpName3, aVolumeInfo);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getVolumeInfo function: non-existence test. ",
+ osl::FileBase::E_NOENT, nError1);
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getVolumeInfo);
+ CPPUNIT_TEST(getVolumeInfo_001_1);
+ CPPUNIT_TEST(getVolumeInfo_001_2);
+ CPPUNIT_TEST(getVolumeInfo_001_3);
+ CPPUNIT_TEST(getVolumeInfo_001_4);
+ CPPUNIT_TEST(getVolumeInfo_001_5);
+ CPPUNIT_TEST(getVolumeInfo_001_6);
+ CPPUNIT_TEST(getVolumeInfo_001_7);
+ CPPUNIT_TEST(getVolumeInfo_001_8);
+ CPPUNIT_TEST(getVolumeInfo_002);
+ CPPUNIT_TEST(getVolumeInfo_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC create(const OUString& ustrDirectoryURL)
+
+ class create : public CppUnit::TestFixture
+ {
+ public:
+ void create_001()
+ {
+ // create directory in $TEMP/tmpdir
+ auto nError1 = Directory::create(aTmpName3);
+ // check for existence
+ auto nError2 = Directory::create(aTmpName3);
+ // remove it
+ deleteTestDirectory(aTmpName3);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory and check its existence.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory and check its existence.",
+ osl::FileBase::E_EXIST, nError2);
+ }
+
+ void create_002()
+ {
+#if !defined(_WIN32) && !defined(MACOSX) && defined(SAL_UNX)
+ if (geteuid() == 0) // don't test if building as root
+ return;
+
+ OUString aTmpDir;
+ auto nError1 = osl::FileBase::createTempFile(nullptr, nullptr, &aTmpDir);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File creation failed", osl::FileBase::E_None, nError1);
+
+ nError1 = File::remove(aTmpDir);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File removal failed", osl::FileBase::E_None, nError1);
+
+ nError1 = Directory::create(aTmpDir);
+ OString sError = "test for create function: create a directory '" +
+ OUStringToOString(aTmpDir, RTL_TEXTENCODING_ASCII_US) +
+ "' and check its existence.";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError1);
+ osl_setFileAttributes(aTmpDir.pData, 0); // no access allowed now
+
+ // Shouldn't be possible now to create a dir underneath it
+ OUString aTmpSubLevel = aTmpDir + "/notallowedhere";
+ nError1 = Directory::create(aTmpSubLevel);
+
+ // allow removal
+ osl_setFileAttributes(aTmpDir.pData,
+ osl_File_Attribute_OwnRead |
+ osl_File_Attribute_OwnWrite |
+ osl_File_Attribute_OwnExe);
+ deleteTestDirectory(aTmpDir);
+ sError = "test for create function: create a directory under '" +
+ OUStringToOString(aTmpDir, RTL_TEXTENCODING_ASCII_US) +
+ "' for access test.";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_ACCES, nError1);
+#endif
+ }
+
+ void create_003()
+ {
+ // create directory in /tmpname
+ auto nError1 = Directory::create(aSysPath1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory using system path.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(create);
+ CPPUNIT_TEST(create_001);
+ CPPUNIT_TEST(create_002);
+ CPPUNIT_TEST(create_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC remove(const OUString& ustrDirectoryURL)
+
+ class remove : public CppUnit::TestFixture
+ {
+ public:
+ void remove_001()
+ {
+ // create directory in $TEMP/tmpdir
+ auto nError1 = Directory::create(aTmpName3);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // remove it
+ nError1 = Directory::remove(aTmpName3);
+ // check for existence
+ Directory rDirectory(aTmpName3);
+ auto nError2 = rDirectory.open();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory and check its existence.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory and check its existence.",
+ osl::FileBase::E_NOENT, nError2);
+ }
+
+ void remove_002()
+ {
+ // create directory in $TEMP/tmpdir
+ auto nError1 = Directory::create(aTmpName3);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // try to remove it by system path
+ nError1 = Directory::remove(aSysPath3);
+ // check for existence
+ Directory rDirectory(aTmpName3);
+ auto nError2 = rDirectory.open();
+
+ if (nError2 != osl::FileBase::E_NOENT)
+ Directory::remove(aTmpName3);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory by its system path, and check its existence.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void remove_003()
+ {
+ // try to remove a non-existed directory
+ auto nError1 = Directory::remove(aTmpName6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: try to remove a non-existed directory.",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void remove_004()
+ {
+ createTestFile(aTmpName6);
+ bool bExist = ifFileExist(aTmpName6);
+ // try to remove file.
+ auto nError1 = Directory::remove(aTmpName6);
+ deleteTestFile(aTmpName6);
+
+ CPPUNIT_ASSERT_MESSAGE("test for remove function: try to remove a file but not directory.",
+ bExist);
+ CPPUNIT_ASSERT_MESSAGE("test for remove function: try to remove a file but not directory.",
+ (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_NOENT == nError1));
+ }
+
+ void remove_005()
+ {
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ auto nError1 = Directory::remove(aTmpName3);
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ OString sError = "test for remove function: try to remove a directory that is not empty." +
+ errorToStr(nError1);
+#if defined(__sun)
+ // on UNX, the implementation uses rmdir(), which EEXIST is thrown on Solaris when the directory is not empty, refer to: 'man -s 2 rmdir', while on linux, ENOTEMPTY is thrown.
+ // EEXIST The directory contains entries other than those for "." and "..".
+ printf("#Solaris test\n");
+ CPPUNIT_ASSERT_MESSAGE(sError.getStr(), (osl::FileBase::E_EXIST == nError1));
+#else
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_NOTEMPTY, nError1);
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(remove);
+ CPPUNIT_TEST(remove_001);
+ CPPUNIT_TEST(remove_002);
+ CPPUNIT_TEST(remove_003);
+ CPPUNIT_TEST(remove_004);
+ CPPUNIT_TEST(remove_005);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // TEST Directory::createPath
+
+ #ifdef _WIN32
+ # define PATH_BUFFER_SIZE MAX_PATH
+ #else
+ # define PATH_BUFFER_SIZE PATH_MAX
+ #endif
+
+#define TEST_PATH_POSTFIX "hello/world"
+
+ static OUString const & get_test_path()
+ {
+ static OUString test_path = []()
+ {
+ OUString tmp;
+ osl::FileBase::RC rc = osl::FileBase::getTempDirURL(tmp);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Getting the location of TMP dir failed",
+ osl::FileBase::E_None, rc
+ );
+
+ OUString system_path;
+ rc = osl::FileBase::getSystemPathFromFileURL(tmp, system_path);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Cannot convert the TMP dir to system path",
+ osl::FileBase::E_None, rc
+ );
+
+ OString tmp_x(OUStringToOString(system_path, RTL_TEXTENCODING_UTF8));
+ if (tmp_x.lastIndexOf('/') != (tmp_x.getLength() - 1))
+ tmp_x += "/";
+
+#if !defined(_WIN32) && !defined(ANDROID) && !defined(AIX)
+ // FIXME would be nice to create unique dir even on Windows
+ tmp_x += "XXXXXX";
+ char *out = mkdtemp(const_cast<char*>(tmp_x.getStr()));
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "mkdtemp call failed",
+ out != nullptr
+ );
+
+ tmp_x += "/";
+#endif
+ tmp_x += TEST_PATH_POSTFIX;
+
+ OUString tmpTestPath;
+ rc = osl::FileBase::getFileURLFromSystemPath(OStringToOUString(tmp_x, RTL_TEXTENCODING_UTF8), tmpTestPath);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Cannot convert the system path back to a URL",
+ osl::FileBase::E_None, rc
+ );
+ return tmpTestPath;
+ }();
+ return test_path;
+ }
+
+ static void rm_test_path(const OUString& path)
+ {
+ sal_Unicode buffer[PATH_BUFFER_SIZE];
+ memcpy(buffer, path.getStr(), (path.getLength() + 1) * sizeof(sal_Unicode));
+
+ sal_Int32 i = rtl_ustr_lastIndexOfChar(buffer, '/');
+ if (i == path.getLength())
+ buffer[i] = 0;
+
+ Directory::remove(OUString(buffer));
+
+ i = rtl_ustr_lastIndexOfChar(buffer, '/');
+ assert(i != -1);
+ if (i != -1)
+ {
+ buffer[i] = 0;
+ Directory::remove(OUString(buffer));
+ }
+ }
+
+ namespace {
+
+ class DirCreatedObserver : public DirectoryCreationObserver
+ {
+ public:
+ DirCreatedObserver() : i(0) {}
+ virtual void DirectoryCreated(const OUString&) override { i++; };
+
+ int number_of_dirs_created() const { return i; }
+
+ private:
+ int i;
+ };
+
+ }
+
+ class createPath : public CppUnit::TestFixture
+ {
+ public:
+ createPath()
+ {}
+
+ void with_relative_path()
+ {
+ osl::FileBase::RC rc = Directory::createPath(TEST_PATH_POSTFIX);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createDirectoryPath contract broken",
+ osl::FileBase::E_INVAL, rc
+ );
+ }
+
+ void without_callback()
+ {
+ OUString tp_url = get_test_path();
+
+ rm_test_path(tp_url);
+
+ osl::FileBase::RC rc = Directory::createPath(tp_url);
+
+ rm_test_path(tp_url);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createDirectoryPath failed",
+ osl::FileBase::E_None, rc
+ );
+ }
+
+ void with_callback()
+ {
+ OUString tp_url = get_test_path();
+
+ rm_test_path(tp_url);
+
+ DirCreatedObserver* observer = new DirCreatedObserver;
+ osl::FileBase::RC rc = Directory::createPath(tp_url, observer);
+ int nDirs = observer->number_of_dirs_created();
+ delete observer;
+
+ rm_test_path(tp_url);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createDirectoryPath failed",
+ osl::FileBase::E_None, rc
+ );
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "osl_createDirectoryPath failed",
+ nDirs > 0
+ );
+
+ }
+
+#ifdef _WIN32
+
+ const char* get_unused_drive_letter()
+ {
+ static const char m_aBuff[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ DWORD ld = GetLogicalDrives();
+ DWORD i = 4;
+ DWORD j = 2;
+
+ while ((ld & i) && (i > 1))
+ { i = i << 1; j++; }
+
+ if (i > 2)
+ return m_aBuff + j;
+
+ return nullptr;
+ }
+
+ void at_invalid_logical_drive()
+ {
+ const char* drv = get_unused_drive_letter();
+ char buff[PATH_BUFFER_SIZE];
+ memset(buff, 0, sizeof(buff));
+
+ strncpy(buff, drv, 1);
+ strcat(buff, ":\\");
+ strcat(buff, TEST_PATH_POSTFIX);
+
+ OUString path = OUString::createFromAscii(buff);
+ OUString tp_url;
+ osl::FileBase::getFileURLFromSystemPath(path, tp_url);
+
+ osl::FileBase::RC rc = Directory::createPath(tp_url);
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "osl_createDirectoryPath doesn't fail on unused logical drive letters",
+ rc != osl::FileBase::E_None
+ );
+ }
+#endif /* _WIN32 */
+
+ CPPUNIT_TEST_SUITE(createPath);
+ CPPUNIT_TEST(with_relative_path);
+ CPPUNIT_TEST(without_callback);
+ CPPUNIT_TEST(with_callback);
+#ifdef _WIN32
+ CPPUNIT_TEST(at_invalid_logical_drive);
+#endif
+ CPPUNIT_TEST_SUITE_END();
+
+ };
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::ctors);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::open);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::isOpen);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::close);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::reset);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::getNextItem);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::getVolumeInfo);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::create);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::remove);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::createPath);
+}
+
+#if 0
+#if defined UNX
+/** get Current PID.
+*/
+OUString getCurrentPID()
+{
+ //~ Get current PID and turn it into OUString;
+ int nPID = 0;
+#ifdef _WIN32
+ nPID = GetCurrentProcessId();
+#else
+ nPID = getpid();
+#endif
+ return OUString::number(nPID);
+}
+#endif
+#endif
+
+namespace {
+
+//~ do some clean up work after all test completed.
+class GlobalObject
+{
+public:
+ ~GlobalObject()
+ {
+ try
+ {
+ //~ special clean up task in Windows and Unix separately;
+#if (defined UNX)
+ //~ some clean up task for UNIX OS
+ ;
+#else
+ //~ some clean up task for Windows OS
+ //~ check if some files are in the way, remove them if necessary.
+ if (ifFileExist(aTmpName6))
+ deleteTestFile(aTmpName6);
+ if (ifFileExist(aTmpName4))
+ deleteTestFile(aTmpName4);
+ if (checkDirectory(aTmpName4, oslCheckMode::Exist))
+ deleteTestDirectory(aTmpName4);
+ if (ifFileExist(aTmpName3))
+ deleteTestFile(aTmpName3);
+ if (checkDirectory(aTmpName3, oslCheckMode::Exist))
+ deleteTestDirectory(aTmpName3);
+
+ OUString aUStr(aUserDirectoryURL);
+ concatURL(aUStr, aHidURL1);
+ if (ifFileExist(aUStr))
+ deleteTestFile(aUStr);
+
+ OUString aUStr1(aRootURL);
+ concatURL(aUStr1, aTmpName2);
+ if (ifFileExist(aUStr1))
+ deleteTestFile(aUStr1);
+#endif
+ }
+ catch (const CppUnit::Exception &e)
+ {
+ printf("Exception caught in GlobalObject dtor(). Exception message: '%s'. Source line: %d\n", e.what(), e.sourceLine().lineNumber());
+ }
+ catch (...)
+ {
+ printf("Exception caught (...) in GlobalObject dtor()\n");
+ }
+ }
+};
+
+}
+
+static GlobalObject theGlobalObject;
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/file/osl_File_Const.h b/sal/qa/osl/file/osl_File_Const.h
new file mode 100644
index 000000000..beee8d6d6
--- /dev/null
+++ b/sal/qa/osl/file/osl_File_Const.h
@@ -0,0 +1,206 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H
+#define INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sal/types.h>
+
+#include <rtl/ustring.hxx>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+static OUString getTempDirectoryURL_()
+{
+ OUString aDir;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("couldn't get system temp URL",
+ osl::FileBase::E_None, osl::FileBase::getTempDirURL(aDir));
+ // This resolves symlinks in the temp path if any
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None,
+ osl::FileBase::getAbsoluteFileURL(aDir, aDir, aDir));
+ return aDir;
+}
+
+static OUString getTempDirectorySys_()
+{
+ OUString aDir;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("couldn't get system temp directory",
+ osl::FileBase::E_None, osl::FileBase::getSystemPathFromFileURL(getTempDirectoryURL_(), aDir));
+ return aDir;
+}
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+// common used string resource
+// these common used string will be used as assist resource in test
+// they are mostly OS independent, some of the resource can be reused
+// so, a common test data repository will be better since it can be
+// shared among all test code
+
+const char pBuffer_Char[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+const char pBuffer_Number[] = "1234567890";
+const char pBuffer_Blank[] = "";
+
+// OS dependent/independent definitions/includes
+// we use FILE_PREFIX for URL prefix,
+// TEST_PLATFORM for test platform initial,
+// TEST_PLATFORM_ROOT for root dir in comrresponding platform,
+// TEST_PLATFORM_TEMP for temp dir in comrresponding platform,
+// PATH_LIST_DELIMITER for separator of path list in comrresponding platform,
+// PATH_SEPARATOR for separator in URL or system path in comrresponding platform,
+// PATH_MAX/MAX_PATH for max path length in comrresponding platform,
+
+// OS independent const definition
+
+# define FILE_PREFIX "file:///"
+# define TEST_FILE_SIZE 1024
+
+// OS dependent declaration and includes
+
+#if ( defined UNX ) //Unix
+# include <unistd.h>
+# include <limits.h>
+# include <math.h>
+# include <errno.h>
+# include <fcntl.h>
+# include <sys/stat.h>
+# if !defined(MACOSX) && !defined(IOS) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined (DRAGONFLY) && !defined(HAIKU)
+# include <sys/statfs.h>
+# else
+# include <sys/param.h>
+# ifndef HAIKU
+# include <sys/mount.h>
+# endif
+# endif
+# if !defined(ANDROID)
+# include <sys/statvfs.h>
+# endif
+# include <sys/types.h>
+# define TEST_PLATFORM_ROOT "/"
+# define PATH_LIST_DELIMITER ":"
+# define PATH_SEPARATOR "/"
+#endif
+
+#if defined(_WIN32) // Windows
+# include <io.h>
+# define PATH_MAX MAX_PATH
+# define TEST_PLATFORM_ROOT "c:/"
+# define PATH_LIST_DELIMITER ";"
+# define PATH_SEPARATOR "/"
+#endif
+
+// OS independent file definition
+
+OUString aNullURL( "" );
+OUString aSlashURL( PATH_SEPARATOR );
+OUString aPreURL( FILE_PREFIX );
+OUString aRootURL( FILE_PREFIX TEST_PLATFORM_ROOT );
+
+OUString aTempDirectorySys(getTempDirectorySys_());
+OUString aTempDirectoryURL(getTempDirectoryURL_());
+OUString aUserDirectorySys( aTempDirectorySys + "" );
+OUString aUserDirectoryURL( aTempDirectoryURL + "" );
+
+// common used URL:temp, canonical, root, relative, link,etc
+
+OUString aCanURL1( aTempDirectoryURL + "/canonical.name" );
+OUString aCanURL2(
+ RTL_CONSTASCII_USTRINGPARAM("ca@#;+.,$///78no\0ni..name"));
+OUString aCanURL3( "ca@#;+.,$//tmp/678nonical//name" );
+OUString aCanURL4( "canonical.name" );
+OUString aTmpName1( "tmpdir" );
+OUString aTmpName2( "tmpname" );
+OUString aTmpName3( aTempDirectoryURL + "/tmpdir" );
+OUString aTmpName4( aTempDirectoryURL + "/tmpdir/tmpname" );
+OUString aTmpName5( aTempDirectoryURL + "/tmpdir/../tmpdir/./tmpname" );
+OUString aTmpName6( aTempDirectoryURL + "/tmpname" );
+OUString aTmpName7( aTempDirectoryURL + "/noaccess" );
+OUString aTmpName8( aTempDirectoryURL + "/tmpname/tmpdir" );
+OUString aTmpName9( aTempDirectoryURL + "/tmpdir/../tmpdir/./" );
+OUString aTmpName10(aTempDirectoryURL + u"/\xE6\x9C\xAA\xE5\x91\xBD\xE5\x90\x8Dzhgb18030");
+
+OUString aRelURL1( "relative/file1" );
+OUString aRelURL2( "relative/./file2" );
+OUString aRelURL3( "relative/../file3" );
+OUString aRelURL4( "././relative/../file4" );
+OUString aRelURL5( aTempDirectoryURL + "/./../" );
+OUString aLnkURL1( aTempDirectoryURL + "/link.file" );
+OUString aHidURL1( ".hiddenfile" );
+
+// common used System Path:temp, root,etc
+
+OUString aRootSys( TEST_PLATFORM_ROOT );
+OUString aSysPath1( aTempDirectorySys + "/system.path" );
+OUString aSysPath2( aTempDirectorySys + "/system/path" );
+OUString aSysPath3( aTempDirectorySys + "/tmpdir" );
+OUString aSysPath4( aTempDirectorySys + "/tmpname" );
+OUString aSysPath5( aTempDirectorySys + u"/\xE6\x9C\xAA\xE5\x91\xBD\xE5\x90\x8Dzhgb18030" );
+OUString aSysPathLnk( aTempDirectorySys + "/link.file" );
+OUString aFifoSys( aTempDirectorySys + "/tmpdir/fifo" );
+
+// FileType URL, we pick some canonical file in corresponding system for test:
+// socket, link, etc.
+// Note that this may be changed in the different platform, so be careful to use.
+
+#if ( defined UNX ) // Unix
+OUString aTypeURL1( FILE_PREFIX "dev/ccv"); //socket Solaris/Linux
+OUString aTypeURL2( FILE_PREFIX "devices/pseudo/tcp@0:tcp"); //special Solaris/Linux
+OUString aTypeURL3( FILE_PREFIX "lib" ); //link Solaris
+#else // Windows
+OUString aTypeURL1( FILE_PREFIX "" );
+OUString aTypeURL2( FILE_PREFIX "" );
+OUString aTypeURL3( FILE_PREFIX "" );
+#endif
+
+// Volume device URL, we pick some canonical volume device for test:
+// UNIX file system, Floppy Disk, Proc file system, Temp file system, Compact Disk.
+
+#if ( defined UNX ) // Unix
+OUString aVolURL1( FILE_PREFIX ""); //ufs Solaris/Linux
+#ifdef __sun
+OUString aVolURL2( FILE_PREFIX "dev/fd" ); //fd Solaris
+#else
+OUString aVolURL2( FILE_PREFIX "dev/floppy/0u1440" ); //fd0 Linux
+#endif
+OUString aVolURL3( FILE_PREFIX "proc" ); //proc Solaris/Linux
+OUString aVolURL4( FILE_PREFIX "staroffice" ); //nfs Solaris/Linux
+OUString aVolURL5( FILE_PREFIX "tmp" ); //tmpfs Solaris
+OUString aVolURL6( FILE_PREFIX "cdrom" ); //cd Solaris
+#else // Windows
+OUString aVolURL1( FILE_PREFIX "c:/" );
+OUString aVolURL2( FILE_PREFIX "a:/" );
+OUString aVolURL3( FILE_PREFIX "" );
+OUString aVolURL4( FILE_PREFIX "" );
+OUString aVolURL5( FILE_PREFIX "c:/temp" );
+OUString aVolURL6( FILE_PREFIX "e:/" );
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/file/osl_old_test_file.cxx b/sal/qa/osl/file/osl_old_test_file.cxx
new file mode 100644
index 000000000..7b0ef6e6d
--- /dev/null
+++ b/sal/qa/osl/file/osl_old_test_file.cxx
@@ -0,0 +1,115 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <osl/file.h>
+#include <rtl/ustring.hxx>
+
+#ifdef SAL_UNX
+#define TEST_VOLUME ""
+#elif defined _WIN32
+#define TEST_VOLUME "Z:/"
+#endif
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <utility>
+
+namespace osl_test_file
+{
+
+class oldtestfile : public CppUnit::TestFixture
+{
+public:
+ void test_file_001();
+ void test_file_002();
+ void test_file_004();
+
+ CPPUNIT_TEST_SUITE( oldtestfile );
+ CPPUNIT_TEST( test_file_001 );
+ CPPUNIT_TEST( test_file_002 );
+ CPPUNIT_TEST( test_file_004 );
+ CPPUNIT_TEST_SUITE_END( );
+};
+
+const std::pair<OUString, OUString> aSource1[] = {
+ { u"a", u"file:///" TEST_VOLUME "bla/a" },
+ ///TODO: check if last slash must be omitted in resolved path.
+// { u"a/", u"file:///" TEST_VOLUME "bla/a" },
+ { u"../a", u"file:///" TEST_VOLUME "a" },
+ { u"a/..", u"file:///" TEST_VOLUME "bla/" },
+ { u"a/../b", u"file:///" TEST_VOLUME "bla/b" },
+ { u"..", u"file:///" TEST_VOLUME "" },
+ { u"a/b/c/d", u"file:///" TEST_VOLUME "bla/a/b/c/d" },
+ { u"a/./c", u"file:///" TEST_VOLUME "bla/a/c" },
+ { u"a/././c", u"file:///" TEST_VOLUME "bla/a/c" },
+ { u"file:///" TEST_VOLUME "bla1/blub", u"file:///" TEST_VOLUME "bla1/blub" },
+};
+
+const std::pair<OUString, OUString> aSource2[] = {
+ { u"a", u"file:///" TEST_VOLUME "bla/blubs/schnubbel/a" },
+ ///TODO: check if last slash must be omitted in resolved path.
+// { u"a/", u"file:///" TEST_VOLUME "bla/blubs/schnubbel/a" },
+ { u"../a", u"file:///" TEST_VOLUME "bla/blubs/a" },
+ { u"../../a", u"file:///" TEST_VOLUME "bla/a" },
+ { u"../../../a", u"file:///" TEST_VOLUME "a" },
+ { u"../../../a/b/c/d", u"file:///" TEST_VOLUME "a/b/c/d" },
+};
+
+void oldtestfile::test_file_001()
+{
+ OUString base1( "file:///" TEST_VOLUME "bla" );
+ for (const auto& [rel, expected] : aSource1)
+ {
+ OUString target;
+ oslFileError e = osl_getAbsoluteFileURL( base1.pData, rel.pData , &target.pData );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #1", osl_File_E_None, e );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #1.1", expected, target);
+ }
+}
+
+void oldtestfile::test_file_002()
+{
+ OUString base2( "file:///" TEST_VOLUME "bla/blubs/schnubbel" );
+ for (const auto& [rel, expected] : aSource2)
+ {
+ OUString target;
+ oslFileError e = osl_getAbsoluteFileURL( base2.pData, rel.pData , &target.pData );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #2", osl_File_E_None, e );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #2.1", expected, target);
+ }
+}
+
+void oldtestfile::test_file_004()
+{
+ OUString base4( "file:///" TEST_VOLUME "bla/" );
+ for (const auto& [rel, expected] : aSource1)
+ {
+ OUString target;
+ oslFileError e = osl_getAbsoluteFileURL( base4.pData, rel.pData , &target.pData );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #10", osl_File_E_None, e );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #10.1", expected, target);
+ }
+}
+
+} // namespace osl_test_file
+
+CPPUNIT_TEST_SUITE_REGISTRATION( osl_test_file::oldtestfile);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/file/test_cpy_wrt_file.cxx b/sal/qa/osl/file/test_cpy_wrt_file.cxx
new file mode 100644
index 000000000..6843d10b3
--- /dev/null
+++ b/sal/qa/osl/file/test_cpy_wrt_file.cxx
@@ -0,0 +1,76 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <osl/file.hxx>
+#include <osl/thread.h>
+#include <rtl/ustring.hxx>
+
+using namespace osl;
+
+class test_osl_writeFile : public CppUnit::TestFixture
+{
+public:
+ void wrt_file()
+ {
+ FileBase::RC err;
+
+ //create a tempfile
+ OUString aTmpFile;
+ err = FileBase::createTempFile(nullptr, nullptr, &aTmpFile);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File creation failed", osl::FileBase::E_None, err);
+
+ //now attempt to open with Create flag an existing file, should get E_EXIST
+ File tmp_file(aTmpFile);
+ err = tmp_file.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Create);
+
+ OString sErrorMsg = "Expected that '" +
+ OUStringToOString(aTmpFile, RTL_TEXTENCODING_ASCII_US) +
+ "' would exist!";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sErrorMsg.getStr(), FileBase::E_EXIST, err);
+
+ char buffer[1];
+ sal_uInt64 written = 0;
+ err = tmp_file.write(static_cast<void*>(buffer), sizeof(buffer), written);
+ CPPUNIT_ASSERT_MESSAGE("write on unconnected file should fail",
+ err != osl::FileBase::E_None);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("write on unconnected file should fail",
+ sal_uInt64(0), written);
+
+ err = tmp_file.sync();
+ CPPUNIT_ASSERT_MESSAGE("sync on unconnected file should fail", err != FileBase::E_None);
+ err = tmp_file.close();
+ CPPUNIT_ASSERT_MESSAGE("close on unconnected file should fail", err != FileBase::E_None);
+
+ err = ::osl::File::remove(aTmpFile);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("temp file should have existed", FileBase::E_None, err);
+ }
+
+ CPPUNIT_TEST_SUITE(test_osl_writeFile);
+ CPPUNIT_TEST(wrt_file);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// register test suites
+CPPUNIT_TEST_SUITE_REGISTRATION(test_osl_writeFile);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx b/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx
new file mode 100644
index 000000000..4fd5d6b16
--- /dev/null
+++ b/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx
@@ -0,0 +1,243 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <osl/file.hxx>
+
+#if defined(_WIN32)
+#define MY_PATH_IN "/c:/foo/bar"
+#define MY_PATH_OUT "c:\\foo\\bar"
+#define MY_PATH_OUT_CONT MY_PATH_OUT "\\"
+#define MY_PATH_OUT_REL "foo\\bar"
+#else
+#define MY_PATH_IN "/foo/bar"
+#define MY_PATH_OUT MY_PATH_IN
+#define MY_PATH_OUT_CONT MY_PATH_OUT "/"
+#define MY_PATH_OUT_REL "foo/bar"
+#endif
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testBadScheme);
+ CPPUNIT_TEST(testNoScheme);
+ CPPUNIT_TEST(testBadAuthority);
+ CPPUNIT_TEST(testLocalhost1Authority);
+ CPPUNIT_TEST(testLocalhost2Authority);
+ CPPUNIT_TEST(testLocalhost3Authority);
+ CPPUNIT_TEST(testNoAuthority);
+ CPPUNIT_TEST(testEmptyPath);
+ CPPUNIT_TEST(testHomeAbbreviation);
+ CPPUNIT_TEST(testOtherHomeAbbreviation);
+ CPPUNIT_TEST(testRelative);
+ CPPUNIT_TEST(testEscape);
+ CPPUNIT_TEST(testBadEscape2f);
+ CPPUNIT_TEST(testBadEscape2F);
+ CPPUNIT_TEST(testBad0);
+ CPPUNIT_TEST(testBadEscape0);
+ CPPUNIT_TEST(testBadQuery);
+ CPPUNIT_TEST(testBadFragment);
+ CPPUNIT_TEST_SUITE_END();
+
+ void testBadScheme();
+ void testNoScheme();
+ void testBadAuthority();
+ void testLocalhost1Authority();
+ void testLocalhost2Authority();
+ void testLocalhost3Authority();
+ void testNoAuthority();
+ void testEmptyPath();
+ void testHomeAbbreviation();
+ void testOtherHomeAbbreviation();
+ void testRelative();
+ void testEscape();
+ void testBadEscape2f();
+ void testBadEscape2F();
+ void testBad0();
+ void testBadEscape0();
+ void testBadQuery();
+ void testBadFragment();
+};
+
+void Test::testBadScheme() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("foo:bar", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testNoScheme() {
+#if !defined(_WIN32) //TODO
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("//" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+#endif
+}
+
+void Test::testBadAuthority() {
+#if defined UNX
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://baz" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+#endif
+}
+
+void Test::testLocalhost1Authority() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://localhost" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+}
+
+void Test::testLocalhost2Authority() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://LOCALHOST" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+}
+
+void Test::testLocalhost3Authority() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://127.0.0.1" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+}
+
+void Test::testNoAuthority() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("file:" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+}
+
+void Test::testEmptyPath() {
+#if defined UNX
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("file://", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString("/"), p);
+#endif
+}
+
+void Test::testHomeAbbreviation() {
+#if defined UNX
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("file:///~", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ // could theoretically fail due to osl::Security::getHomeDir problem
+ e = osl::FileBase::getSystemPathFromFileURL("file:///~/foo%2525/bar", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ // could theoretically fail due to osl::Security::getHomeDir problem
+ CPPUNIT_ASSERT(p.endsWith("/foo%25/bar"));
+#endif
+}
+
+void Test::testOtherHomeAbbreviation() {
+#if defined UNX
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file:///~baz" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); // not supported for now
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+#endif
+}
+
+void Test::testRelative() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("foo/bar", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT(p.endsWith(MY_PATH_OUT_REL));
+}
+
+void Test::testEscape() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "/b%61z", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT_CONT "baz"), p);
+}
+
+void Test::testBadEscape2f() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "/b%2fz", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBadEscape2F() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "/b%2Fz", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBad0() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ OUString(RTL_CONSTASCII_USTRINGPARAM("file://" MY_PATH_IN "/b\x00z")),
+ p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBadEscape0() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "/b%00z", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBadQuery() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "?baz", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBadFragment() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "#baz", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/module/osl_Module.cxx b/sal/qa/osl/module/osl_Module.cxx
new file mode 100644
index 000000000..f440a7151
--- /dev/null
+++ b/sal/qa/osl/module/osl_Module.cxx
@@ -0,0 +1,376 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// include files
+
+#include "osl_Module_Const.h"
+
+using namespace osl;
+
+/** get dll file URL.
+*/
+static OUString getDllURL()
+{
+#if defined(_WIN32) // lib in Unix and lib in Windows are not same in file name.
+ OUString libPath( "test_Module_DLL.dll" );
+#else
+ OUString libPath( "libtest_Module_DLL.so" );
+#endif
+
+ OUString dirPath, dllPath;
+ osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(&getDllURL), dirPath);
+ dirPath = dirPath.copy( 0, dirPath.lastIndexOf('/') + 1);
+ osl::FileBase::getAbsoluteFileURL( dirPath, libPath, dllPath );
+
+ return dllPath;
+}
+
+namespace osl_Module
+{
+ namespace {
+
+ /** class and member function that is available for module test :
+ */
+
+ class testClass
+ {
+ public:
+ static void myFunc()
+ {
+ printf("#Sun Microsystem\n");
+ };
+ };
+
+ }
+
+ /** testing the methods:
+ Module();
+ Module( const OUString& strModuleName, sal_Int32 nRtldMode = SAL_LOADMODULE_DEFAULT);
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void ctors_none( )
+ {
+ ::osl::Module aMod;
+ bRes = aMod.is();
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor without parameter.",
+ !bRes );
+ }
+
+ void ctors_name_mode( )
+ {
+ OUString aFileURL;
+ bRes = osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(
+ &osl_Module::testClass::myFunc),
+ aFileURL);
+
+ if ( !bRes )
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false );
+ }
+
+ ::osl::Module aMod( aFileURL );
+ bRes = aMod.is( );
+ aMod.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with load action.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( ctors );
+ CPPUNIT_TEST( ctors_none );
+ CPPUNIT_TEST( ctors_name_mode );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class ctors
+
+ /** testing the methods:
+ static sal_Bool getUrlFromAddress(void * addr, OUString & libraryUrl)
+ */
+ class getUrlFromAddress : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getUrlFromAddress_001( )
+ {
+ OUString aFileURL;
+ bRes = osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(
+ &osl_Module::testClass::myFunc),
+ aFileURL);
+ if ( !bRes )
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test get Module URL from address.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test get Module URL from address.",
+ 0 < aFileURL.lastIndexOf('/') );
+ }
+
+ void getUrlFromAddress_002( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod( getDllURL( ) );
+ FuncPtr pFunc = reinterpret_cast<FuncPtr>(aMod.getSymbol( "firstfunc" ));
+
+ OUString aFileURL;
+ bRes = osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(pFunc), aFileURL);
+ if ( !bRes )
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false );
+ }
+ aMod.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.",
+ 0 < aFileURL.lastIndexOf('/') );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.",
+ aFileURL.equalsIgnoreAsciiCase( getDllURL( ) ) );
+#endif
+ }
+
+ /* tester comments: another case is getFunctionSymbol_001*/
+
+ CPPUNIT_TEST_SUITE( getUrlFromAddress );
+ CPPUNIT_TEST( getUrlFromAddress_001 );
+ CPPUNIT_TEST( getUrlFromAddress_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getUrlFromAddress
+
+ /** testing the method:
+ sal_Bool SAL_CALL load( const OUString& strModuleName,
+ sal_Int32 nRtldMode = SAL_LOADMODULE_DEFAULT)
+ */
+ class load : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void load_001( )
+ {
+ ::osl::Module aMod( getDllURL( ) );
+ ::osl::Module aMod1;
+
+ aMod1.load( getDllURL( ) );
+ bRes = oslModule(aMod) == oslModule(aMod1);
+ aMod.unload( );
+ aMod1.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load function should do the same thing as constructor with library name.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( load );
+ CPPUNIT_TEST( load_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class load
+
+ /** testing the method:
+ void SAL_CALL unload()
+ */
+ class unload : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void unload_001( )
+ {
+ ::osl::Module aMod( getDllURL( ) );
+
+ aMod.unload( );
+ bRes = oslModule(aMod) ==nullptr;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: unload function should do the same thing as destructor.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( unload );
+ CPPUNIT_TEST( unload_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class unload
+
+ /** testing the methods:
+ sal_Bool SAL_CALL is() const
+ */
+ class is : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void is_001( )
+ {
+ OUString aFileURL;
+ bRes = osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(
+ osl_Module::testClass::myFunc),
+ aFileURL);
+ if ( !bRes )
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module - using executable instead", false );
+ }
+
+ ::osl::Module aMod;
+ bRes = aMod.is( );
+ aMod.load( aFileURL );
+ bRes1 = aMod.is( );
+ aMod.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test if a module is a loaded module.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test if a module is a loaded module.",
+ bRes1 );
+ }
+ CPPUNIT_TEST_SUITE( is );
+ CPPUNIT_TEST( is_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class is
+
+ /** testing the methods:
+ void* SAL_CALL getSymbol( const OUString& strSymbolName)
+ */
+ class getSymbol : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes;
+
+ void getSymbol_001( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod( getDllURL( ) );
+ FuncPtr pFunc = reinterpret_cast<FuncPtr>(aMod.getSymbol( "firstfunc" ));
+ bRes = false;
+ if ( pFunc )
+ bRes = pFunc( bRes );
+ aMod.unload();
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and call one function in it.",
+ bRes );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE( getSymbol );
+ CPPUNIT_TEST( getSymbol_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getSymbol
+
+ /** testing the methods:
+ operator oslModule() const
+ */
+ class optr_oslModule : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void optr_oslModule_001( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod;
+ bRes = ( static_cast<oslModule>(aMod) == nullptr );
+
+ aMod.load( getDllURL( ) );
+ bRes1 = static_cast<oslModule>(aMod) != nullptr;
+
+ aMod.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: the m_Module of a Module instance will be NULL when is not loaded, it will not be NULL after loaded.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: the m_Module of a Module instance will be NULL when is not loaded, it will not be NULL after loaded.",
+ bRes1 );
+#endif
+ }
+
+ void optr_oslModule_002( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod( getDllURL( ) );
+ OUString funcName( "firstfunc" );
+
+ FuncPtr pFunc = reinterpret_cast<FuncPtr>(osl_getSymbol( static_cast<oslModule>(aMod), funcName.pData ));
+ bRes = false;
+ if ( pFunc )
+ bRes = pFunc( bRes );
+
+ aMod.unload();
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: use m_Module to call osl_getSymbol() function.",
+ bRes );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE( optr_oslModule );
+ CPPUNIT_TEST( optr_oslModule_001 );
+ CPPUNIT_TEST( optr_oslModule_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class optr_oslModule
+
+ /** testing the methods:
+ oslGenericFunction SAL_CALL getFunctionSymbol( const OUString& ustrFunctionSymbolName )
+ */
+ class getFunctionSymbol : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getFunctionSymbol_001( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod( getDllURL( ) );
+ oslGenericFunction oslFunc = aMod.getFunctionSymbol( "firstfunc" );
+ OUString aLibraryURL;
+ bRes = ::osl::Module::getUrlFromAddress( oslFunc, aLibraryURL);
+ aMod.unload();
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and get its function addr and get its URL.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and get its function addr and get its URL.",
+ aLibraryURL.equalsIgnoreAsciiCase( getDllURL() ) );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE( getFunctionSymbol );
+ CPPUNIT_TEST( getFunctionSymbol_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getFunctionSymbol
+
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::ctors);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getUrlFromAddress);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::load);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::unload);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::is);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getSymbol);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::optr_oslModule);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getFunctionSymbol);
+
+} // namespace osl_Module
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/module/osl_Module_Const.h b/sal/qa/osl/module/osl_Module_Const.h
new file mode 100644
index 000000000..3434d439f
--- /dev/null
+++ b/sal/qa/osl/module/osl_Module_Const.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H
+#define INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/module.hxx>
+#include <osl/file.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#if defined(UNX) // Unix
+# include <unistd.h>
+#elif defined(_WIN32) // Windows
+# include <io.h>
+#endif
+
+# define FILE_PREFIX "file:///"
+
+// function pointer type.
+
+typedef sal_Bool (* FuncPtr )( sal_Bool );
+
+#endif // INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/module/osl_Module_DLL.cxx b/sal/qa/osl/module/osl_Module_DLL.cxx
new file mode 100644
index 000000000..59f30b137
--- /dev/null
+++ b/sal/qa/osl/module/osl_Module_DLL.cxx
@@ -0,0 +1,32 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "osl_Module_Const.h"
+
+#include <stdio.h>
+#include <sal/types.h>
+
+// This module contains no tests. It is loaded as a dynamic library by
+// osl_Module.
+// But we instantiate a test plugin to fake the build process.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool firstfunc(sal_Bool) { return true; }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/mutex/osl_Mutex.cxx b/sal/qa/osl/mutex/osl_Mutex.cxx
new file mode 100644
index 000000000..3424bca07
--- /dev/null
+++ b/sal/qa/osl/mutex/osl_Mutex.cxx
@@ -0,0 +1,905 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// include files
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include "osl_Mutex_Const.h"
+
+using namespace osl;
+
+/** pause nSec seconds helper function.
+*/
+namespace ThreadHelper
+{
+ static void thread_sleep_tenth_sec(sal_uInt32 _nTenthSec)
+ {
+ osl::Thread::wait(std::chrono::milliseconds(_nTenthSec * 100));
+ }
+ static void thread_sleep( sal_uInt32 _nSec )
+ {
+ /// print statement in thread process must use fflush() to force display.
+ // t_print("# wait %d seconds. ", _nSec );
+ fflush(stdout);
+
+ thread_sleep_tenth_sec( _nSec * 10 );
+ // printf("# done\n" );
+ }
+}
+
+// Beginning of the test cases for osl_Mutex class
+
+namespace {
+
+/** mutually exclusive data
+*/
+struct resource {
+ sal_Int32 data1;
+ sal_Int32 data2;
+ Mutex lock;
+};
+
+/** IncreaseThread provide data.
+*/
+class IncreaseThread : public Thread
+{
+public:
+ explicit IncreaseThread( struct resource *pData ): pResource( pData ) { }
+
+ virtual ~IncreaseThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#IncreaseThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ struct resource *pResource;
+
+ void SAL_CALL run( ) override
+ {
+ pResource->lock.acquire( );
+ for( sal_Int8 i = 0; i < 3; i++ )
+ {
+ pResource->data1++;
+ yield( ); //yield() give CPU time to other thread, other thread if not block, they will change the data;
+ }
+ if ( pResource->data2 == 0 )
+ pResource->data2 = ( pResource->data1 > 0 ? pResource->data1 : 0 - pResource->data1 );
+ pResource->lock.release();
+ }
+};
+
+/** DecreaseThread consume data.
+*/
+class DecreaseThread : public Thread
+{
+public:
+ explicit DecreaseThread( struct resource *pData ): pResource( pData ) { }
+
+ virtual ~DecreaseThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#DecreaseThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ struct resource *pResource;
+
+ void SAL_CALL run( ) override
+ {
+ pResource->lock.acquire( );
+ for( sal_Int8 i = 0; i < 3; i++ )
+ {
+ pResource->data1--;
+ yield( ); //yield() give CPU time to other thread, other thread if not block, they will change the data;
+ }
+ if ( pResource->data2 == 0 )
+ pResource->data2 = ( pResource->data1 > 0 ? pResource->data1 : 0 - pResource->data1 );
+ pResource->lock.release();
+ }
+};
+
+/** chain structure used in Threads as critical resource
+*/
+struct chain {
+ sal_Int32 buffer[ BUFFER_SIZE ];
+ Mutex lock;
+ sal_Int8 pos;
+};
+
+/** PutThread write to the chain structure in a mutex manner.
+*/
+class PutThread : public Thread
+{
+public:
+ //get the struct pointer to write data to buffer
+ explicit PutThread( struct chain* pData ): pChain( pData ) { }
+
+ virtual ~PutThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#PutThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ struct chain* pChain;
+
+ void SAL_CALL run( ) override
+ {
+ //block here if the mutex has been acquired
+ pChain->lock.acquire( );
+
+ //current position in buffer to write
+ sal_Int8 nPos = pChain->pos;
+ oslThreadIdentifier oId = getIdentifier( );
+ //write data
+ sal_Int8 i;
+ for ( i = 0; i < 5; i++ )
+ {
+ pChain->buffer[ nPos + i ] = oId;
+ yield( );
+ }
+ //revise the position
+ pChain->pos = nPos + i;
+
+ //finish writing, release the mutex
+ pChain->lock.release();
+ }
+};
+
+/** thread for testing Mutex acquire.
+ */
+class HoldThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit HoldThread( Mutex* pMutex ): pMyMutex( pMutex ) { }
+
+ virtual ~HoldThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#HoldThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run() override
+ {
+ // block here if the mutex has been acquired
+ pMyMutex->acquire( );
+ printf("# Mutex acquired. \n" );
+ pMyMutex->release( );
+ }
+};
+
+class WaitThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit WaitThread( Mutex* pMutex ): pMyMutex( pMutex ) { }
+
+ virtual ~WaitThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#WaitThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run( ) override
+ {
+ // block here if the mutex has been acquired
+ pMyMutex->acquire( );
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ pMyMutex->release( );
+ }
+};
+
+/** thread for testing getGlobalMutex.
+ */
+class GlobalMutexThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ GlobalMutexThread( ){ }
+
+ virtual ~GlobalMutexThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#GlobalMutexThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ void SAL_CALL run( ) override
+ {
+ // block here if the mutex has been acquired
+ Mutex* pGlobalMutex;
+ pGlobalMutex = Mutex::getGlobalMutex( );
+ pGlobalMutex->acquire( );
+ printf("# Global Mutex acquired. \n" );
+ pGlobalMutex->release( );
+ }
+};
+
+}
+
+namespace osl_Mutex
+{
+
+ /** Test of the osl::Mutex::constructor
+ */
+ class ctor : public CppUnit::TestFixture
+ {
+ public:
+ // initialise your test code values here.
+ struct chain m_Data;
+ struct resource m_Res;
+
+ void setUp( ) override
+ {
+ for ( sal_Int8 i=0; i < BUFFER_SIZE; i++ )
+ m_Data.buffer[i] = 0;
+ m_Data.pos = 0;
+
+ m_Res.data1 = 0;
+ m_Res.data2 = 0;
+ }
+
+ /** Create two threads to write data to the same buffer, use Mutex to assure
+ during one thread write data five times, the other thread should not begin writing.
+ the two threads wrote two different data: their thread ID, so we can check the data
+ in buffer to know the order of the two threads writing
+ */
+ void ctor_001()
+ {
+ PutThread myThread1( &m_Data );
+ PutThread myThread2( &m_Data );
+
+ myThread1.create( );
+ myThread2.create( );
+
+ //wait until the two threads terminate
+ myThread1.join( );
+ myThread2.join( );
+
+ bool bRes = false;
+
+ // every 5 data should the same
+ // LLA: this is not a good check, it's too fix
+ if (m_Data.buffer[0] == m_Data.buffer[1] &&
+ m_Data.buffer[1] == m_Data.buffer[2] &&
+ m_Data.buffer[2] == m_Data.buffer[3] &&
+ m_Data.buffer[3] == m_Data.buffer[4] &&
+ m_Data.buffer[5] == m_Data.buffer[6] &&
+ m_Data.buffer[6] == m_Data.buffer[7] &&
+ m_Data.buffer[7] == m_Data.buffer[8] &&
+ m_Data.buffer[8] == m_Data.buffer[9])
+ bRes = true;
+
+ /*for (sal_Int8 i=0; i<BUFFER_SIZE; i++)
+ printf("#data in buffer is %d\n", m_Data.buffer[i]);
+ */
+
+ CPPUNIT_ASSERT_MESSAGE("Mutex ctor", bRes);
+
+ }
+
+ /** Create two threads to write data to operate on the same number , use Mutex to assure,
+ one thread increase data 3 times, the other thread decrease 3 times, store the operate
+ result when the first thread complete, if it is interrupt by the other thread, the stored
+ number will not be 3.
+ */
+ void ctor_002()
+ {
+ IncreaseThread myThread1( &m_Res );
+ DecreaseThread myThread2( &m_Res );
+
+ myThread1.create( );
+ myThread2.create( );
+
+ //wait until the two threads terminate
+ myThread1.join( );
+ myThread2.join( );
+
+ bool bRes = false;
+
+ // every 5 data should the same
+ if ( ( m_Res.data1 == 0 ) && ( m_Res.data2 == 3 ) )
+ bRes = true;
+
+ CPPUNIT_ASSERT_MESSAGE( "test Mutex ctor function: increase and decrease a number 3 times without interrupt.", bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( ctor );
+ CPPUNIT_TEST( ctor_001 );
+ CPPUNIT_TEST( ctor_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class ctor
+
+ /** Test of the osl::Mutex::acquire method
+ */
+ class acquire : public CppUnit::TestFixture
+ {
+ public:
+ // acquire mutex in main thread, and then call acquire again in myThread,
+ // the child thread should block, wait 2 secs, it still block.
+ // Then release mutex in main thread, the child thread could return from acquire,
+ // and go to exec next statement, so could terminate quickly.
+ void acquire_001( )
+ {
+ Mutex aMutex;
+ //acquire here
+ bool bRes = aMutex.acquire( );
+ // pass the pointer of mutex to child thread
+ HoldThread myThread( &aMutex );
+ myThread.create( );
+
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ // if acquire in myThread does not work, 2 secs is long enough,
+ // myThread should terminate now, and bRes1 should be sal_False
+ bool bRes1 = myThread.isRunning( );
+
+ aMutex.release( );
+ ThreadHelper::thread_sleep_tenth_sec( 1 );
+ // after release mutex, myThread stops blocking and will terminate immediately
+ bool bRes2 = myThread.isRunning( );
+ myThread.join( );
+
+ CPPUNIT_ASSERT_MESSAGE( "Mutex acquire", bRes );
+ CPPUNIT_ASSERT_MESSAGE( "Mutex acquire", bRes1 );
+ CPPUNIT_ASSERT_MESSAGE( "Mutex acquire", !bRes2 );
+ }
+
+ //in the same thread, acquire twice should success
+ void acquire_002()
+ {
+ Mutex aMutex;
+ //acquire here
+ bool bRes = aMutex.acquire();
+ bool bRes1 = aMutex.acquire();
+
+ bool bRes2 = aMutex.tryToAcquire();
+
+ aMutex.release();
+
+ CPPUNIT_ASSERT_MESSAGE("Mutex acquire", bRes);
+ CPPUNIT_ASSERT_MESSAGE("Mutex acquire", bRes1);
+ CPPUNIT_ASSERT_MESSAGE("Mutex acquire", bRes2);
+
+ }
+
+ CPPUNIT_TEST_SUITE( acquire );
+ CPPUNIT_TEST( acquire_001 );
+ CPPUNIT_TEST( acquire_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class acquire
+
+ /** Test of the osl::Mutex::tryToAcquire method
+ */
+ class tryToAcquire : public CppUnit::TestFixture
+ {
+ public:
+ // First let child thread acquire the mutex, and wait 2 secs, during the 2 secs,
+ // in main thread, tryToAcquire mutex should return False
+ // then after the child thread terminated, tryToAcquire should return True
+ void tryToAcquire_001()
+ {
+ Mutex aMutex;
+ WaitThread myThread(&aMutex);
+ myThread.create();
+
+ // ensure the child thread acquire the mutex
+ ThreadHelper::thread_sleep_tenth_sec(1);
+
+ bool bRes1 = aMutex.tryToAcquire();
+
+ if (bRes1)
+ aMutex.release();
+ // wait the child thread terminate
+ myThread.join();
+
+ bool bRes2 = aMutex.tryToAcquire();
+
+ if (bRes2)
+ aMutex.release();
+
+ CPPUNIT_ASSERT_MESSAGE("Try to acquire Mutex", !bRes1);
+ CPPUNIT_ASSERT_MESSAGE("Try to acquire Mutex", bRes2);
+ }
+
+ CPPUNIT_TEST_SUITE(tryToAcquire);
+ CPPUNIT_TEST(tryToAcquire_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class tryToAcquire
+
+ /** Test of the osl::Mutex::release method
+ */
+ class release : public CppUnit::TestFixture
+ {
+ public:
+ /** acquire/release are not used in pairs: after child thread acquired mutex,
+ the main thread release it, then any thread could acquire it.
+ */
+ void release_001()
+ {
+ Mutex aMutex;
+ WaitThread myThread( &aMutex );
+ myThread.create( );
+
+ // ensure the child thread acquire the mutex
+ ThreadHelper::thread_sleep_tenth_sec( 1 );
+
+ bool bRunning = myThread.isRunning( );
+ bool bRes1 = aMutex.tryToAcquire( );
+ // wait the child thread terminate
+ myThread.join( );
+
+ bool bRes2 = aMutex.tryToAcquire( );
+
+ if ( bRes2 )
+ aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE( "release Mutex: try to acquire before and after the mutex has been released",
+ !bRes1 );
+ CPPUNIT_ASSERT_MESSAGE( "release Mutex: try to acquire before and after the mutex has been released",
+ bRes2 );
+ CPPUNIT_ASSERT_MESSAGE( "release Mutex: try to acquire before and after the mutex has been released",
+ bRunning );
+
+ }
+
+ // how about release twice?
+ void release_002()
+ {
+ }
+
+ CPPUNIT_TEST_SUITE( release );
+ CPPUNIT_TEST( release_001 );
+ CPPUNIT_TEST( release_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class release
+
+ /** Test of the osl::Mutex::getGlobalMutex method
+ */
+ class getGlobalMutex : public CppUnit::TestFixture
+ {
+ public:
+ // initialise your test code values here.
+ void getGlobalMutex_001()
+ {
+ Mutex* pGlobalMutex;
+ pGlobalMutex = Mutex::getGlobalMutex();
+ pGlobalMutex->acquire();
+
+ GlobalMutexThread myThread;
+ myThread.create();
+
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ bool bRes1 = myThread.isRunning();
+
+ pGlobalMutex->release();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ // after release mutex, myThread stops blocking and will terminate immediately
+ bool bRes2 = myThread.isRunning();
+
+ CPPUNIT_ASSERT_MESSAGE("Global Mutex works", bRes1);
+ CPPUNIT_ASSERT_MESSAGE("Global Mutex works", !bRes2);
+ }
+
+ void getGlobalMutex_002( )
+ {
+ bool bRes;
+
+ Mutex *pGlobalMutex;
+ pGlobalMutex = Mutex::getGlobalMutex( );
+ pGlobalMutex->acquire( );
+ {
+ Mutex *pGlobalMutex1;
+ pGlobalMutex1 = Mutex::getGlobalMutex( );
+ bRes = pGlobalMutex1->release( );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE( "Global Mutex works: if the code between {} get the different mutex as the former one, it will return false when release.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE(getGlobalMutex);
+ CPPUNIT_TEST(getGlobalMutex_001);
+ CPPUNIT_TEST(getGlobalMutex_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getGlobalMutex
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::ctor, "osl_Mutex");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::acquire, "osl_Mutex");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::tryToAcquire, "osl_Mutex");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::release, "osl_Mutex");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::getGlobalMutex, "osl_Mutex");
+} // namespace osl_Mutex
+
+// Beginning of the test cases for osl_Guard class
+
+namespace {
+
+class GuardThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit GuardThread( Mutex* pMutex ): pMyMutex( pMutex ) { }
+
+ virtual ~GuardThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#GuardThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run( ) override
+ {
+ // block here if the mutex has been acquired
+ MutexGuard aGuard( pMyMutex );
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ }
+};
+
+}
+
+namespace osl_Guard
+{
+ class ctor : public CppUnit::TestFixture
+ {
+ public:
+ // insert your test code here.
+ void ctor_001()
+ {
+ Mutex aMutex;
+ GuardThread myThread(&aMutex);
+ myThread.create();
+
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ bool bRes = aMutex.tryToAcquire();
+ // after 1 second, the mutex has been guarded, and the child thread should be running
+ bool bRes1 = myThread.isRunning();
+
+ myThread.join();
+ bool bRes2 = aMutex.tryToAcquire();
+
+ CPPUNIT_ASSERT_MESSAGE("GuardThread constructor",
+ !bRes);
+ CPPUNIT_ASSERT_MESSAGE("GuardThread constructor",
+ bRes1);
+ CPPUNIT_ASSERT_MESSAGE("GuardThread constructor",
+ bRes2);
+ }
+
+ void ctor_002( )
+ {
+ Mutex aMutex;
+
+ /// use reference constructor here
+ MutexGuard myGuard( aMutex );
+
+ /// the GuardThread will block here when it is initialised.
+ GuardThread myThread( &aMutex );
+ myThread.create( );
+
+ /// is it still blocking?
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ bool bRes = myThread.isRunning( );
+
+ /// oh, release him.
+ aMutex.release( );
+ myThread.join( );
+
+ CPPUNIT_ASSERT_MESSAGE("GuardThread constructor: reference initialization, acquire the mutex before running the thread, then check if it is blocking.",
+ bRes);
+ }
+
+ CPPUNIT_TEST_SUITE(ctor);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST(ctor_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ctor
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Guard::ctor, "osl_Guard");
+} // namespace osl_Guard
+
+// Beginning of the test cases for osl_ClearableGuard class
+
+namespace {
+
+/** Thread for test ClearableGuard
+ */
+class ClearGuardThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit ClearGuardThread( Mutex* pMutex ): pMyMutex( pMutex ) {}
+
+ virtual ~ClearGuardThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#ClearGuardThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run( ) override
+ {
+ // acquire the mutex
+ // printf("# ClearGuardThread" );
+ ClearableMutexGuard aGuard( pMyMutex );
+ ThreadHelper::thread_sleep( 5 );
+
+ // release the mutex
+ aGuard.clear( );
+ ThreadHelper::thread_sleep( 2 );
+ }
+};
+
+}
+
+namespace osl_ClearableGuard
+{
+
+ class ctor : public CppUnit::TestFixture
+ {
+ public:
+ void ctor_001()
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded.
+ ClearableMutexGuard myMutexGuard( &aMutex );
+
+ /// it will return sal_False if the aMutex has not been Guarded.
+ bool bRes = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE("ClearableMutexGuard constructor, test the acquire operation when initialized.",
+ bRes);
+ }
+
+ void ctor_002( )
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded, this time, we use reference constructor.
+ ClearableMutexGuard myMutexGuard( aMutex );
+
+ /// it will return sal_False if the aMutex has not been Guarded.
+ bool bRes = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE("ClearableMutexGuard constructor, test the acquire operation when initialized, we use reference constructor this time.",
+ bRes);
+ }
+
+ CPPUNIT_TEST_SUITE(ctor);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST(ctor_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ctor
+
+ class clear : public CppUnit::TestFixture
+ {
+ public:
+ void clear_001()
+ {
+ Mutex aMutex;
+ ClearGuardThread myThread(&aMutex);
+ myThread.create();
+
+ TimeValue aTimeVal_befor;
+ osl_getSystemTime( &aTimeVal_befor );
+ // wait 1 second to assure the child thread has begun
+ ThreadHelper::thread_sleep(1);
+
+ while (true)
+ {
+ if (aMutex.tryToAcquire())
+ {
+ break;
+ }
+ ThreadHelper::thread_sleep(1);
+ }
+ TimeValue aTimeVal_after;
+ osl_getSystemTime( &aTimeVal_after );
+ sal_Int32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds;
+ printf("nSec is %" SAL_PRIdINT32 "\n", nSec);
+
+ myThread.join();
+
+ CPPUNIT_ASSERT_MESSAGE("ClearableGuard method: clear",
+ nSec < 7);
+ CPPUNIT_ASSERT_MESSAGE("ClearableGuard method: clear",
+ nSec > 1);
+ }
+
+ void clear_002( )
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded.
+ ClearableMutexGuard myMutexGuard( &aMutex );
+
+ /// launch the HoldThread, it will be blocked here.
+ HoldThread myThread( &aMutex );
+ myThread.create( );
+
+ /// is it blocking?
+ ThreadHelper::thread_sleep_tenth_sec( 4 );
+ bool bRes = myThread.isRunning( );
+
+ /// use clear to release.
+ myMutexGuard.clear( );
+ myThread.join( );
+ bool bRes1 = myThread.isRunning( );
+
+ CPPUNIT_ASSERT_MESSAGE( "ClearableGuard method: clear, control the HoldThread's running status!",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "ClearableGuard method: clear, control the HoldThread's running status!",
+ !bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE( clear );
+ CPPUNIT_TEST( clear_001 );
+ CPPUNIT_TEST( clear_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class clear
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_ClearableGuard::ctor, "osl_ClearableGuard" );
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_ClearableGuard::clear, "osl_ClearableGuard" );
+} // namespace osl_ClearableGuard
+
+// Beginning of the test cases for osl_ResettableGuard class
+
+namespace {
+
+/** Thread for test ResettableGuard
+ */
+class ResetGuardThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit ResetGuardThread( Mutex* pMutex ): pMyMutex( pMutex ) {}
+
+ virtual ~ResetGuardThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#ResetGuardThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run( ) override
+ {
+ // acquire the mutex
+ printf("# ResettableGuard\n" );
+ ResettableMutexGuard aGuard( pMyMutex );
+ // release the mutex
+ aGuard.clear( );
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ }
+};
+
+}
+
+namespace osl_ResettableGuard
+{
+ class ctor : public CppUnit::TestFixture
+ {
+ public:
+ void ctor_001()
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded.
+ ResettableMutexGuard myMutexGuard( &aMutex );
+
+ /// it will return sal_False if the aMutex has not been Guarded.
+ bool bRes = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE("ResettableMutexGuard constructor, test the acquire operation when initialized.",
+ bRes);
+
+ aMutex.acquire();
+ }
+
+ void ctor_002( )
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded, this time, we use reference constructor.
+ ResettableMutexGuard myMutexGuard( aMutex );
+
+ /// it will return sal_False if the aMutex has not been Guarded.
+ bool bRes = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard constructor, test the acquire operation when initialized, we use reference constructor this time.",
+ bRes);
+
+ aMutex.acquire();
+ }
+
+ CPPUNIT_TEST_SUITE(ctor);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST(ctor_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ctor
+
+ class reset : public CppUnit::TestFixture
+ {
+ public:
+ void reset_001( )
+ {
+ Mutex aMutex;
+ ResetGuardThread myThread( &aMutex );
+ ResettableMutexGuard myMutexGuard( aMutex );
+ myThread.create( );
+
+ /// is it running? and clear done?
+ bool bRes = myThread.isRunning( );
+ myMutexGuard.clear( );
+ ThreadHelper::thread_sleep_tenth_sec( 1 );
+
+ /// if reset is not success, the release will return sal_False
+ myMutexGuard.reset( );
+ bool bRes1 = aMutex.release( );
+ myThread.join( );
+
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset",
+ bRes1 );
+
+ aMutex.acquire();
+ }
+
+#ifdef LINUX
+ void reset_002( )
+ {
+ Mutex aMutex;
+ ResettableMutexGuard myMutexGuard( &aMutex );
+
+ /// shouldn't release after clear;
+ myMutexGuard.clear( );
+ aMutex.acquire();
+ bool bRes = aMutex.release( );
+
+ /// can release after reset.
+ myMutexGuard.reset( );
+ bool bRes1 = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset, release after clear and reset, on Solaris, the mutex can be release without acquire, so it can not passed on (SOLARIS), but not the reason for reset_002",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset, release after clear and reset, on Solaris, the mutex can be release without acquire, so it can not passed on (SOLARIS), but not the reason for reset_002",
+ bRes1 );
+
+ aMutex.acquire();
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE(reset);
+ CPPUNIT_TEST(reset_001);
+#ifdef LINUX
+ CPPUNIT_TEST(reset_002);
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ }; // class reset
+
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_ResettableGuard::ctor);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_ResettableGuard::reset);
+} // namespace osl_ResettableGuard
+
+// The following sets variables for GNU EMACS
+// Local Variables:
+// tab-width:4
+// End:
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/mutex/osl_Mutex_Const.h b/sal/qa/osl/mutex/osl_Mutex_Const.h
new file mode 100644
index 000000000..a5ac53ed4
--- /dev/null
+++ b/sal/qa/osl/mutex/osl_Mutex_Const.h
@@ -0,0 +1,37 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H
+#define INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/thread.hxx>
+#include <osl/mutex.hxx>
+#include <osl/time.h>
+
+#ifdef UNX
+#include <unistd.h>
+#endif
+
+#define BUFFER_SIZE 16
+
+#endif // INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/pipe/osl_Pipe.cxx b/sal/qa/osl/pipe/osl_Pipe.cxx
new file mode 100644
index 000000000..eef77e998
--- /dev/null
+++ b/sal/qa/osl/pipe/osl_Pipe.cxx
@@ -0,0 +1,894 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// include files
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <rtl/ustring.hxx>
+
+#include <osl/test/uniquepipename.hxx>
+#include <osl/thread.hxx>
+
+#include <osl/pipe.hxx>
+#include <osl/time.h>
+
+#ifdef UNX
+#include <unistd.h>
+#endif
+#include <string.h>
+
+using namespace osl;
+
+/** print last error of pipe system.
+ */
+static void printPipeError( ::osl::Pipe const & aPipe )
+{
+ oslPipeError nError = aPipe.getError( );
+ printf("#printPipeError# " );
+ switch ( nError ) {
+ case osl_Pipe_E_None:
+ printf("Success!\n" );
+ break;
+ case osl_Pipe_E_NotFound:
+ printf("The returned error is: Not found!\n" );
+ break;
+ case osl_Pipe_E_AlreadyExists:
+ printf("The returned error is: Already exist!\n" );
+ break;
+ case osl_Pipe_E_NoProtocol:
+ printf("The returned error is: No protocol!\n" );
+ break;
+ case osl_Pipe_E_NetworkReset:
+ printf("The returned error is: Network reset!\n" );
+ break;
+ case osl_Pipe_E_ConnectionAbort:
+ printf("The returned error is: Connection aborted!\n" );
+ break;
+ case osl_Pipe_E_ConnectionReset:
+ printf("The returned error is: Connection reset!\n" );
+ break;
+ case osl_Pipe_E_NoBufferSpace:
+ printf("The returned error is: No buffer space!\n" );
+ break;
+ case osl_Pipe_E_TimedOut:
+ printf("The returned error is: Timeout!\n" );
+ break;
+ case osl_Pipe_E_ConnectionRefused:
+ printf("The returned error is: Connection refused!\n" );
+ break;
+ case osl_Pipe_E_invalidError:
+ printf("The returned error is: Invalid error!\n" );
+ break;
+ default:
+ printf("The returned error is: Number %d, Unknown Error\n", nError );
+ break;
+ }
+}
+
+// pipe name and transfer contents
+
+constexpr OUStringLiteral aTestPipeName(u"testpipe2");
+constexpr OUStringLiteral aTestPipe1(u"testpipe1");
+
+constexpr OStringLiteral m_pTestString1("Sun Microsystems");
+constexpr OStringLiteral m_pTestString2("test pipe PASS/OK");
+
+// test code start here
+
+namespace osl_Pipe
+{
+
+// most return value -1 denote a fail of operation.
+
+#define OSL_PIPE_FAIL -1
+
+ /** testing the methods:
+ inline Pipe();
+ inline Pipe(const OUString& strName, oslPipeOptions Options);
+ inline Pipe(const OUString& strName, oslPipeOptions Options,const Security & rSecurity);
+ inline Pipe(const Pipe& pipe);
+ inline Pipe(oslPipe pipe, __sal_NoAcquire noacquire );
+ inline Pipe(oslPipe Pipe);
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+
+ void ctors_none( )
+ {
+ ::osl::Pipe aPipe;
+ bRes = aPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, yet no case to test.",
+ !bRes );
+ }
+
+ void ctors_name_option( )
+ {
+ /// create a named pipe.
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ ::osl::Pipe aAssignPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
+
+ bRes = aPipe.is( ) && aAssignPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name and option.",
+ bRes );
+ }
+
+ void ctors_name_option_security( )
+ {
+ /// create a security pipe.
+ const ::osl::Security rSecurity;
+ ::osl::Pipe aSecurityPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSecurity );
+
+ bRes = aSecurityPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name, option and security, the test of security is not implemented yet.",
+ bRes );
+ }
+
+ void ctors_copy( )
+ {
+ /// create a pipe.
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ /// create a pipe using copy constructor.
+ ::osl::Pipe aCopyPipe( aPipe );
+
+ bRes = aCopyPipe.is( ) && aCopyPipe == aPipe;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test copy constructor.",
+ bRes );
+ }
+
+ /* Note: DO NOT DO THIS - I have very deliberately caused send to FAIL, *on purpose* as this is the
+ only sane way to test noacquire. This is a terrible misuse of no-acquire, but in this case is
+ needed only so we can test to make sure no-acquire is working!
+ */
+ void ctors_no_acquire( )
+ {
+ /// create a pipe.
+ OUString aPipeName(test::uniquePipeName(aTestPipeName));
+ oslPipe handle(osl_createPipe(aPipeName.pData, osl_Pipe_CREATE, nullptr));
+ /// constructs a pipe reference without acquiring the handle.
+ std::unique_ptr<osl::Pipe> xNoAcquirePipe(new osl::Pipe(handle, SAL_NO_ACQUIRE));
+
+ StreamPipe aStreamPipe(handle);
+ xNoAcquirePipe.reset();
+ int nRet = aStreamPipe.send("a", 1);
+
+ if (nRet >= 0)
+ bRes = false;
+ else
+ bRes = true;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no acquire of handle, deleted nonacquired pipe but could still send on original pipe!.",
+ bRes );
+ }
+
+ void ctors_acquire( )
+ {
+ /// create a base pipe.
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ /// constructs two pipes, the second acquires the first pipe's handle.
+ ::osl::Pipe aAcquirePipe( aPipe.getHandle( ) );
+ ::osl::Pipe aAcquirePipe1( nullptr );
+
+ bRes = aAcquirePipe.is();
+ bRes1 = aAcquirePipe1.is();
+ bRes2 = aPipe == aAcquirePipe;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with acquire of handle, original pipe does not exist.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with acquire of handle, copied pipe does not exist",
+ !bRes1 );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test pipes should have same handle", bRes2);
+ }
+
+ CPPUNIT_TEST_SUITE( ctors );
+ CPPUNIT_TEST( ctors_none );
+ CPPUNIT_TEST( ctors_name_option );
+ CPPUNIT_TEST( ctors_name_option_security );
+ CPPUNIT_TEST( ctors_copy );
+ CPPUNIT_TEST( ctors_no_acquire );
+ CPPUNIT_TEST( ctors_acquire );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL is() const;
+ */
+ class is : public CppUnit::TestFixture
+ {
+ public:
+ void is_001( )
+ {
+ ::osl::Pipe aPipe;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), check if the pipe is a valid one.", !aPipe.is( ) );
+ }
+
+ void is_002( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), a normal pipe creation.", aPipe.is( ) );
+ }
+
+ void is_003( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), an invalid case.", !aPipe.is( ) );
+ }
+
+ void is_004( )
+ {
+ ::osl::Pipe aPipe( nullptr );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), an invalid constructor.", !aPipe.is( ) );
+ }
+
+ CPPUNIT_TEST_SUITE( is );
+ CPPUNIT_TEST( is_001 );
+ CPPUNIT_TEST( is_002 );
+ CPPUNIT_TEST( is_003 );
+ CPPUNIT_TEST( is_004 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the methods:
+ inline sal_Bool create( const OUString & strName,
+ oslPipeOptions Options, const Security &rSec );
+ nline sal_Bool create( const OUString & strName,
+ oslPipeOptions Options = osl_Pipe_OPEN );
+ */
+ class create : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ /** tester comment:
+
+ security create only be tested creation, security section is
+ untested yet.
+ */
+
+ void create_named_security_001( )
+ {
+ const Security rSec;
+ ::osl::Pipe aPipe;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
+ bRes1 = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.",
+ !bRes1);
+ }
+
+ void create_named_security_002( )
+ {
+ const Security rSec;
+ ::osl::Pipe aPipe, aPipe1;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
+ bRes1 = aPipe1.create( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN, rSec );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.",
+ bRes1);
+ }
+
+ void create_named_001( )
+ {
+ ::osl::Pipe aPipe;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ bRes1 = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.",
+ !bRes1);
+ }
+
+ void create_named_002( )
+ {
+ ::osl::Pipe aPipe, aPipe1;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ bRes1 = aPipe1.create( test::uniquePipeName(aTestPipeName) );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.",
+ bRes1);
+ }
+
+ void create_named_003( )
+ {
+ ::osl::Pipe aPipe;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName) );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test default option is open.",
+ !bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( create );
+ CPPUNIT_TEST( create_named_security_001 );
+ CPPUNIT_TEST( create_named_security_002 );
+ CPPUNIT_TEST( create_named_001 );
+ CPPUNIT_TEST( create_named_002 );
+ CPPUNIT_TEST( create_named_003 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline void SAL_CALL clear();
+ */
+ class clear : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void clear_001( )
+ {
+ ::osl::Pipe aPipe;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe.clear( );
+ bRes = aPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test clear.",
+ !bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( clear );
+ CPPUNIT_TEST( clear_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the methods:
+ inline Pipe& SAL_CALL operator= (const Pipe& pipe);
+ inline Pipe& SAL_CALL operator= (const oslPipe pipe );
+ */
+ class assign : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void assign_ref( )
+ {
+ ::osl::Pipe aPipe, aPipe1;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe1 = aPipe;
+ bRes = aPipe1.is( );
+ bRes1 = aPipe == aPipe1;
+ aPipe.close( );
+ aPipe1.close( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with reference.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with reference.",
+ bRes1 );
+ }
+
+ void assign_handle( )
+ {
+ ::osl::Pipe aPipe, aPipe1;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe1 = aPipe.getHandle( );
+ bRes = aPipe1.is( );
+ bRes1 = aPipe == aPipe1;
+ aPipe.close( );
+ aPipe1.close( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with handle.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with handle.",
+ bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE( assign );
+ CPPUNIT_TEST( assign_ref );
+ CPPUNIT_TEST( assign_handle );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL isValid() const;
+ isValid( ) has not been implemented under the following platforms, please refer to osl/pipe.hxx
+ */
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL operator==( const Pipe& rPipe ) const;
+ */
+ class isEqual : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void isEqual_001( )
+ {
+ ::osl::Pipe aPipe;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ bRes = aPipe == aPipe; // NOLINT(misc-redundant-expression)
+ aPipe.close( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(), compare itself.",
+ bRes );
+ }
+
+ void isEqual_002( )
+ {
+ ::osl::Pipe aPipe, aPipe1, aPipe2;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+
+ aPipe1 = aPipe;
+ aPipe2.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+
+ bRes = aPipe == aPipe1;
+ bRes1 = aPipe == aPipe2;
+ aPipe.close( );
+ aPipe1.close( );
+ aPipe2.close( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(),create one copy instance, and compare.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(),create one copy instance, and compare.",
+ !bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE( isEqual );
+ CPPUNIT_TEST( isEqual_001 );
+ CPPUNIT_TEST( isEqual_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline void SAL_CALL close();
+ */
+ class close : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void close_001( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipe1), osl_Pipe_CREATE );
+ aPipe.close( );
+ bRes = aPipe.is( );
+
+ aPipe.clear( );
+ bRes1 = aPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: difference between close and clear.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: difference between close and clear.",
+ !bRes1);
+ }
+
+ void close_002( )
+ {
+ ::osl::StreamPipe aPipe( test::uniquePipeName(aTestPipe1), osl_Pipe_CREATE );
+ aPipe.close( );
+ int nRet = aPipe.send( m_pTestString1.getStr(), 3 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: use after close.",
+ OSL_PIPE_FAIL, nRet );
+ }
+
+ CPPUNIT_TEST_SUITE( close );
+ CPPUNIT_TEST( close_001 );
+ CPPUNIT_TEST( close_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline oslPipeError SAL_CALL accept(StreamPipe& Connection);
+ please refer to StreamPipe::recv
+ */
+
+ /** testing the method:
+ inline oslPipeError SAL_CALL getError() const;
+ */
+ class getError : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getError_001( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
+ oslPipeError nError = aPipe.getError( );
+ printPipeError( aPipe );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: open a non-exist pipe.",
+ nError != osl_Pipe_E_None );
+ }
+
+ void getError_002( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ ::osl::Pipe aPipe1( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ oslPipeError nError = aPipe.getError( );
+ printPipeError( aPipe );
+ aPipe.clear( );
+ aPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: create an already exist pipe.",
+ nError != osl_Pipe_E_None );
+ }
+
+ CPPUNIT_TEST_SUITE( getError );
+ CPPUNIT_TEST( getError_001 );
+ CPPUNIT_TEST( getError_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline oslPipe SAL_CALL getHandle() const;
+ */
+ class getHandle : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getHandle_equalityOperatorAgainstSelf( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
+ bRes = aPipe == aPipe.getHandle( );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: one pipe should equal to its handle.",
+ bRes );
+ }
+
+ void getHandle_equalityOperatorAgainstDerivedPipe( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ ::osl::Pipe aPipe1( aPipe.getHandle( ) );
+ bRes = aPipe == aPipe1;
+ aPipe.clear( );
+ aPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: one pipe derived from another pipe's handle.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getHandle );
+ CPPUNIT_TEST( getHandle_equalityOperatorAgainstSelf );
+ CPPUNIT_TEST( getHandle_equalityOperatorAgainstDerivedPipe );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::ctors);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::is);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::create);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::clear);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::assign);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::isEqual);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::close);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::getError);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::getHandle);
+
+} // namespace osl_Pipe
+
+namespace osl_StreamPipe
+{
+
+ /** testing the methods:
+ inline StreamPipe();
+ inline StreamPipe(oslPipe Pipe);
+ inline StreamPipe(const StreamPipe& Pipe);
+ inline StreamPipe(const OUString& strName, oslPipeOptions Options = osl_Pipe_OPEN);
+ inline StreamPipe(const OUString& strName, oslPipeOptions Options, const Security &rSec );
+ inline StreamPipe( oslPipe pipe, __sal_NoAcquire noacquire );
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void ctors_none( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ // create an unattached pipe.
+ ::osl::StreamPipe aStreamPipe1;
+ bRes = aStreamPipe1.is( );
+
+ // assign it and check.
+ aStreamPipe1 = aStreamPipe;
+ bRes1 = aStreamPipe1.is( );
+ aStreamPipe.clear( );
+ aStreamPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, before and after assign.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, before and after assign.",
+ bRes1 );
+ }
+
+ void ctors_handle( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ // create a pipe with last handle.
+ ::osl::StreamPipe aStreamPipe1( aStreamPipe.getHandle( ) );
+ bRes = aStreamPipe1.is( ) && aStreamPipe == aStreamPipe1;
+ aStreamPipe.clear( );
+ aStreamPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with other's handle.",
+ bRes );
+ }
+
+ void ctors_copy( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ // create an unattached pipe.
+ ::osl::StreamPipe aStreamPipe1( aStreamPipe );
+ bRes = aStreamPipe1.is( ) && aStreamPipe == aStreamPipe1;
+ aStreamPipe.clear( );
+ aStreamPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test copy constructor.",
+ bRes );
+ }
+
+ void ctors_name_option( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ // create an unattached pipe.
+ ::osl::StreamPipe aStreamPipe1( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
+ bRes = aStreamPipe1.is( ) && aStreamPipe.is( );
+ aStreamPipe.clear( );
+ aStreamPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name and option.",
+ bRes );
+ }
+
+ void ctors_name_option_security( )
+ {
+ /// create a security pipe.
+ const ::osl::Security rSecurity;
+ ::osl::StreamPipe aSecurityPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSecurity );
+
+ bRes = aSecurityPipe.is( );
+ aSecurityPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name, option and security, the test of security is not implemented yet.",
+ bRes );
+ }
+
+ /** tester comment:
+
+ When test the following constructor, don't know how to test the
+ acquire and no acquire action. possible plans:
+ 1.release one handle and check the other( did not success since the
+ other still exist and valid. )
+ 2. release one handle twice to see getLastError( )(the getLastError
+ always returns invalidError(LINUX)).
+ */
+
+ void ctors_no_acquire( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ osl_acquirePipe(aPipe.getHandle());
+ // constructs a pipe reference without acquiring the handle.
+ ::osl::StreamPipe aNoAcquirePipe( aPipe.getHandle( ), SAL_NO_ACQUIRE );
+
+ bRes = aNoAcquirePipe.is( );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no acquire of handle, only validation test, do not know how to test no acquire.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( ctors );
+ CPPUNIT_TEST( ctors_none );
+ CPPUNIT_TEST( ctors_handle );
+ CPPUNIT_TEST( ctors_copy );
+ CPPUNIT_TEST( ctors_name_option );
+ CPPUNIT_TEST( ctors_name_option_security );
+ CPPUNIT_TEST( ctors_no_acquire );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the methods:
+ inline StreamPipe & SAL_CALL operator=(oslPipe Pipe);
+ inline StreamPipe& SAL_CALL operator=(const Pipe& pipe);
+ mindy: not implemented in osl/pipe.hxx, so remove the cases
+ */
+
+ /** wait _nSec seconds.
+ */
+ static void thread_sleep( sal_uInt32 _nSec )
+ {
+ /// print statement in thread process must use fflush() to force display.
+ fflush(stdout);
+
+ osl::Thread::wait(std::chrono::seconds(_nSec));
+ }
+ // test read/write & send/recv data to pipe
+
+ namespace {
+
+ class Pipe_DataSink_Thread : public Thread
+ {
+ public:
+ char buf[256];
+ Pipe_DataSink_Thread( ) { }
+
+ protected:
+ void SAL_CALL run( ) override
+ {
+ printf("open pipe\n");
+ ::osl::StreamPipe aSenderPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN ); // test::uniquePipeName(aTestPipeName) is a string = "TestPipe"
+ if ( !aSenderPipe.is() )
+ {
+ printf("pipe open failed! \n");
+ }
+ else
+ {
+ printf("read\n");
+ sal_Int32 nChars = aSenderPipe.read( buf, m_pTestString1.getLength() + 1 );
+ if ( nChars < 0 )
+ {
+ printf("read failed! \n");
+ return;
+ }
+ buf[sizeof(buf)-1] = '\0';
+ printf("buffer is %s \n", buf);
+ printf("send\n");
+ nChars = aSenderPipe.send( m_pTestString2.getStr(), m_pTestString2.getLength() + 1 );
+ if ( nChars < 0 )
+ {
+ printf("client send failed! \n");
+ return;
+ }
+ }
+ }
+
+ };
+
+ class Pipe_DataSource_Thread : public Thread
+ {
+ public:
+ char buf[256];
+ ::osl::Pipe aListenPipe;
+ ::osl::StreamPipe aConnectionPipe;
+ Pipe_DataSource_Thread( )
+ {
+ printf("create pipe\n");
+ aListenPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ }
+ virtual ~Pipe_DataSource_Thread( ) override
+ {
+ aListenPipe.close();
+ }
+ protected:
+ void SAL_CALL run( ) override
+ {
+ //create pipe.
+ printf("listen\n");
+ if ( !aListenPipe.is() )
+ {
+ printf("pipe create failed! \n");
+ }
+ else
+ {
+ //start server and wait for connection.
+ printf("accept\n");
+ if ( aListenPipe.accept( aConnectionPipe ) != osl_Pipe_E_None )
+ {
+ printf("pipe accept failed!");
+ return;
+ }
+ printf("write\n");
+ // write to pipe
+ sal_Int32 nChars = aConnectionPipe.write( m_pTestString1.getStr(), m_pTestString1.getLength() + 1 );
+ if ( nChars < 0)
+ {
+ printf("server write failed! \n");
+ return;
+ }
+ printf("recv\n");
+ nChars = aConnectionPipe.recv( buf, 256 );
+
+ if ( nChars < 0)
+ {
+ printf("server receive failed! \n");
+ return;
+ }
+ buf[sizeof(buf)-1] = '\0';
+ printf("received message is: %s\n", buf );
+ }
+ }
+ };
+
+ }
+
+ /** testing the method: read/write/send/recv and Pipe::accept
+ */
+ class recv : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void recv_001( )
+ {
+ //launch threads.
+ Pipe_DataSource_Thread myDataSourceThread;
+ Pipe_DataSink_Thread myDataSinkThread;
+ myDataSourceThread.create( );
+ thread_sleep( 1 );
+ myDataSinkThread.create( );
+
+ //wait until the thread terminate
+ myDataSinkThread.join( );
+ myDataSourceThread.join( );
+
+ int nCompare1 = strcmp( myDataSinkThread.buf, m_pTestString1.getStr() );
+ int nCompare2 = strcmp( myDataSourceThread.buf, m_pTestString2.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "test send/recv/write/read.", 0, nCompare1 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "test send/recv/write/read.", 0, nCompare2 );
+ }
+ //close pipe when accept
+ void recv_002()
+ {
+ thread_sleep( 1 );
+
+ Pipe_DataSource_Thread myDataSourceThread;
+ Pipe_DataSink_Thread myDataSinkThread;
+ myDataSourceThread.create( );
+ thread_sleep( 1 );
+ myDataSourceThread.aListenPipe.close();
+ myDataSourceThread.join( );
+ //no condition judgment here, if the case could finish executing within 1 or 2 seconds, it passes.
+ }
+
+ CPPUNIT_TEST_SUITE( recv );
+ CPPUNIT_TEST( recv_001 );
+ CPPUNIT_TEST( recv_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::ctors);
+//CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::assign);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::recv);
+
+} // namespace osl_StreamPipe
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/process/batch.bat b/sal/qa/osl/process/batch.bat
new file mode 100755
index 000000000..e27f7191b
--- /dev/null
+++ b/sal/qa/osl/process/batch.bat
@@ -0,0 +1,19 @@
+rem
+rem This file is part of the LibreOffice project.
+rem
+rem This Source Code Form is subject to the terms of the Mozilla Public
+rem License, v. 2.0. If a copy of the MPL was not distributed with this
+rem file, You can obtain one at http://mozilla.org/MPL/2.0/.
+rem
+rem This file incorporates work covered by the following license notice:
+rem
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed
+rem with this work for additional information regarding copyright
+rem ownership. The ASF licenses this file to you under the Apache
+rem License, Version 2.0 (the "License"); you may not use this file
+rem except in compliance with the License. You may obtain a copy of
+rem the License at http://www.apache.org/licenses/LICENSE-2.0 .
+rem
+@echo off
+echo "Hello world" \ No newline at end of file
diff --git a/sal/qa/osl/process/batch.sh b/sal/qa/osl/process/batch.sh
new file mode 100755
index 000000000..fd3828c6a
--- /dev/null
+++ b/sal/qa/osl/process/batch.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo "Hello world" \ No newline at end of file
diff --git a/sal/qa/osl/process/osl_Thread.cxx b/sal/qa/osl/process/osl_Thread.cxx
new file mode 100644
index 000000000..3f62c6ea3
--- /dev/null
+++ b/sal/qa/osl/process/osl_Thread.cxx
@@ -0,0 +1,2005 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <algorithm>
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <time.h>
+#endif
+
+// include files
+
+#include <sal/types.h>
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+#include <osl/thread.hxx>
+#include <osl/mutex.hxx>
+#include <osl/time.h>
+
+#include <string.h>
+#include <memory>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#define t_print printf
+
+using namespace osl;
+
+namespace {
+
+// Small stopwatch
+class StopWatch {
+ TimeValue t1,t2; // Start and stoptime
+
+protected:
+ sal_Int32 m_nNanoSec;
+ sal_Int32 m_nSeconds;
+
+ bool m_bIsValid; // TRUE, when started and stopped
+ bool m_bIsRunning; // TRUE, when started
+
+public:
+ StopWatch();
+
+ void start(); // Starts time
+ void stop(); // Stops time
+
+ double getSeconds() const;
+ double getTenthSec() const;
+};
+
+}
+
+// ================================= Stop Watch =================================
+
+// A small stopwatch for internal use
+// (c) Lars Langhans 29.12.1996 22:10
+
+StopWatch::StopWatch()
+ : m_nNanoSec(0)
+ , m_nSeconds(0)
+ , m_bIsValid(false)
+ , m_bIsRunning(false)
+{
+ t1.Seconds = 0;
+ t1.Nanosec = 0;
+ t2.Seconds = 0;
+ t2.Nanosec = 0;
+}
+
+void StopWatch::start()
+{
+// pre: %
+// post: Start Timer
+
+ m_bIsValid = false;
+ m_bIsRunning = true;
+ osl_getSystemTime( &t1 );
+ t_print("# %u %u nsecs\n", static_cast<unsigned>(t1.Seconds), static_cast<unsigned>(t1.Nanosec));
+ // gettimeofday(&t1, 0);
+}
+
+void StopWatch::stop()
+{
+// pre: Timer should be started
+// post: Timer will stopped
+
+ osl_getSystemTime( &t2 );
+ t_print("# %u %u nsecs\n", static_cast<unsigned>(t2.Seconds), static_cast<unsigned>(t2.Nanosec));
+
+ if (m_bIsRunning)
+ { // check if started.
+ m_nSeconds = static_cast<sal_Int32>(t2.Seconds) - static_cast<sal_Int32>(t1.Seconds);
+ if ( t2.Nanosec > t1.Nanosec )
+ m_nNanoSec = static_cast<sal_Int32>(t2.Nanosec) - static_cast<sal_Int32>(t1.Nanosec);
+ else
+ {
+ m_nNanoSec = 1000000000 + static_cast<sal_Int32>(t2.Nanosec) - static_cast<sal_Int32>(t1.Nanosec);
+ m_nSeconds -= 1;
+ }
+ t_print("# %u %u nsecs\n", static_cast<unsigned>(m_nSeconds), static_cast<unsigned>(m_nNanoSec) );
+ m_bIsValid = true;
+ m_bIsRunning = false;
+ }
+}
+
+double StopWatch::getSeconds() const
+{
+// pre: valid = TRUE
+// BACK: time in seconds
+
+ double nValue = 0.0;
+ if (m_bIsValid)
+ {
+ nValue = double(m_nNanoSec) / 1000000000.0 + m_nSeconds; // milli micro nano
+ }
+ return nValue;
+}
+
+double StopWatch::getTenthSec() const
+{
+ double nValue = 0.0;
+ if (m_bIsValid)
+ {
+ nValue = double(m_nNanoSec) / 100000000.0 + m_nSeconds * 10;
+ }
+ return nValue ;
+}
+
+namespace {
+
+template <class T>
+class ThreadSafeValue
+{
+ T m_nFlag;
+ Mutex m_aMutex;
+public:
+ explicit ThreadSafeValue(T n = 0): m_nFlag(n) {}
+ T getValue()
+ {
+ //block if already acquired by another thread.
+ osl::MutexGuard g(m_aMutex);
+ return m_nFlag;
+ }
+ void incValue()
+ {
+ //only one thread operate on the flag.
+ osl::MutexGuard g(m_aMutex);
+ m_nFlag++;
+ }
+ void acquire() {m_aMutex.acquire();}
+ void release() {m_aMutex.release();}
+};
+
+}
+
+namespace ThreadHelper
+{
+ static void thread_sleep_tenth_sec(sal_Int32 _nTenthSec)
+ {
+ osl::Thread::wait(std::chrono::milliseconds(_nTenthSec * 100));
+ }
+
+ static void outputPriority(oslThreadPriority const& _aPriority)
+ {
+ // LLA: output the priority
+ if (_aPriority == osl_Thread_PriorityHighest)
+ {
+ t_print("Prio is High\n");
+ }
+ else if (_aPriority == osl_Thread_PriorityAboveNormal)
+ {
+ t_print("Prio is above normal\n");
+ }
+ else if (_aPriority == osl_Thread_PriorityNormal)
+ {
+ t_print("Prio is normal\n");
+ }
+ else if (_aPriority == osl_Thread_PriorityBelowNormal)
+ {
+ t_print("Prio is below normal\n");
+ }
+ else if (_aPriority == osl_Thread_PriorityLowest)
+ {
+ t_print("Prio is lowest\n");
+ }
+ else
+ {
+ t_print("Prio is unknown\n");
+ }
+ }
+}
+
+namespace {
+
+/** Simple thread for testing Thread-create.
+
+ Just add 1 of value 0, and after running, result is 1.
+ */
+class myThread : public Thread
+{
+ ThreadSafeValue<sal_Int32> m_aFlag;
+public:
+ sal_Int32 getValue() { return m_aFlag.getValue(); }
+protected:
+ /** guarded value which initialized 0
+
+ @see ThreadSafeValue
+ */
+ void SAL_CALL run() override
+ {
+ while(schedule())
+ {
+ m_aFlag.incValue();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ }
+ }
+
+public:
+
+ virtual void SAL_CALL suspend() override
+ {
+ m_aFlag.acquire();
+ ::osl::Thread::suspend();
+ m_aFlag.release();
+ }
+
+ virtual ~myThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+
+};
+
+/** Thread which has a flag add 1 every second until 20
+ */
+class OCountThread : public Thread
+{
+ ThreadSafeValue<sal_Int32> m_aFlag;
+public:
+ OCountThread() : m_nWaitSec(0)
+ {
+ t_print("new OCountThread thread %u!\n", static_cast<unsigned>(getIdentifier()));
+ }
+ sal_Int32 getValue() { return m_aFlag.getValue(); }
+
+ void setWait(sal_Int32 nSec)
+ {
+ m_nWaitSec = nSec;
+ //m_bWait = sal_True;
+ }
+
+ virtual void SAL_CALL suspend() override
+ {
+ m_aFlag.acquire();
+ ::osl::Thread::suspend();
+ m_aFlag.release();
+ }
+
+protected:
+ //sal_Bool m_bWait;
+ sal_Int32 m_nWaitSec;
+
+ void SAL_CALL run() override
+ {
+ /// if the thread should terminate, schedule return false
+ while (m_aFlag.getValue() < 20 && schedule())
+ {
+ m_aFlag.incValue();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+
+ if (m_nWaitSec != 0)
+ {
+ TimeValue nTV;
+ nTV.Seconds = m_nWaitSec / 10 ;
+ nTV.Nanosec = ( m_nWaitSec%10 ) * 100000000 ;
+ wait( nTV );
+ m_nWaitSec = 0;
+ }
+ }
+ }
+ void SAL_CALL onTerminated() override
+ {
+ t_print("normally terminate this thread %u!\n", static_cast<unsigned>(getIdentifier()));
+ }
+public:
+
+ virtual ~OCountThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+
+};
+
+/** no call schedule in the run method
+*/
+class ONoScheduleThread : public Thread
+{
+ ThreadSafeValue<sal_Int32> m_aFlag;
+public:
+ sal_Int32 getValue() { return m_aFlag.getValue(); }
+
+ virtual void SAL_CALL suspend() override
+ {
+ m_aFlag.acquire();
+ ::osl::Thread::suspend();
+ m_aFlag.release();
+ }
+protected:
+ void SAL_CALL run() override
+ {
+ while (m_aFlag.getValue() < 10)
+ {
+ m_aFlag.incValue();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ }
+ }
+ void SAL_CALL onTerminated() override
+ {
+ t_print("normally terminate this thread %u!\n", static_cast<unsigned>(getIdentifier()));
+ }
+public:
+ ONoScheduleThread()
+ {
+ t_print("new thread id %u!\n", static_cast<unsigned>(getIdentifier()));
+ }
+ virtual ~ONoScheduleThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+
+};
+
+
+class OAddThread : public Thread
+{
+ ThreadSafeValue<sal_Int32> m_aFlag;
+public:
+ //oslThreadIdentifier m_id, m_CurId;
+ OAddThread(){}
+ sal_Int32 getValue() { return m_aFlag.getValue(); }
+
+ virtual void SAL_CALL suspend() override
+ {
+ m_aFlag.acquire();
+ ::osl::Thread::suspend();
+ m_aFlag.release();
+ }
+protected:
+ void SAL_CALL run() override
+ {
+ //if the thread should terminate, schedule return false
+ while (schedule())
+ {
+ m_aFlag.incValue();
+ }
+ }
+ void SAL_CALL onTerminated() override
+ {
+ // t_print("normally terminate this thread %d!\n", getIdentifier());
+ }
+public:
+
+ virtual ~OAddThread() override
+ {
+ if (isRunning())
+ {
+ // t_print("error: not terminated.\n");
+ }
+ }
+
+};
+
+}
+
+namespace osl_Thread
+{
+
+ static void resumeAndWaitThread(Thread* _pThread)
+ {
+ // This function starts a thread, wait a second and suspends the thread
+ // Due to the fact, that a suspend and never run thread never really exists.
+
+ // Note: on UNX, after createSuspended, and then terminate the thread, it performs well;
+ // while on Windows, after createSuspended, the thread can not terminate, wait endlessly,
+ // so here call resume at first, then call terminate.
+#ifdef _WIN32
+ t_print("resumeAndWaitThread\n");
+ _pThread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+#else
+ _pThread->resume();
+#endif
+ }
+
+ // kill a running thread and join it, if it has terminated, do nothing
+ static void termAndJoinThread(Thread* _pThread)
+ {
+ _pThread->terminate();
+
+// LLA: Windows feature???, a suspended thread can not terminated, so we have to weak it up
+#ifdef _WIN32
+ _pThread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+#endif
+ t_print("#wait for join.\n");
+ _pThread->join();
+ }
+/** Test of the osl::Thread::create method
+ */
+
+ class create : public CppUnit::TestFixture
+ {
+ public:
+ /** Simple create a thread.
+
+ Create a simple thread, it just does add 1 to value(which initialized 0),
+ if the thread run, the value should be 1.
+ */
+ void create_001()
+ {
+ myThread* newthread = new myThread;
+ bool bRes = newthread->create();
+ CPPUNIT_ASSERT_MESSAGE("Can not creates a new thread!\n", bRes);
+
+ ThreadHelper::thread_sleep_tenth_sec(1); // wait short
+ bool isRunning = newthread->isRunning(); // check if thread is running
+ /// wait for the new thread to assure it has run
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nValue = newthread->getValue();
+ /// to assure the new thread has terminated
+ termAndJoinThread(newthread);
+ delete newthread;
+
+ t_print(" nValue = %d\n", static_cast<int>(nValue));
+ t_print("isRunning = %s\n", isRunning ? "true" : "false");
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread",
+ nValue >= 1
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread",
+ isRunning
+ );
+
+ }
+
+ /** only one running thread per instance, return false if create secondly
+ */
+ void create_002()
+ {
+ myThread* newthread = new myThread;
+ bool res1 = newthread->create();
+ bool res2 = newthread->create();
+ t_print("In non pro, an assertion should occurred. This behaviour is right.\n");
+ termAndJoinThread(newthread);
+ delete newthread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread: can not create two threads per instance",
+ res1
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread: can not create two threads per instance",
+ !res2
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE(create);
+ CPPUNIT_TEST(create_001);
+ CPPUNIT_TEST(create_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class create
+
+ /** Test of the osl::Thread::createSuspended method
+ */
+ class createSuspended : public CppUnit::TestFixture
+ {
+ public:
+ /** Create a suspended thread, use the same class as create_001
+
+ after create, wait enough time, check the value, if it's still the initial value, pass
+ */
+ void createSuspended_001()
+ {
+ myThread* newthread = new myThread;
+ bool bRes = newthread->createSuspended();
+ CPPUNIT_ASSERT_MESSAGE("Can not creates a new thread!", bRes);
+
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ bool isRunning = newthread->isRunning();
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nValue = newthread->getValue();
+
+ resumeAndWaitThread(newthread);
+
+ termAndJoinThread(newthread);
+ delete newthread;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Creates a new suspended thread",
+ sal_Int32(0), nValue
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new suspended thread",
+ isRunning
+ );
+ }
+
+ void createSuspended_002()
+ {
+ myThread* newthread = new myThread;
+ bool res1 = newthread->createSuspended();
+ bool res2 = newthread->createSuspended();
+
+ resumeAndWaitThread(newthread);
+
+ termAndJoinThread(newthread);
+
+ delete newthread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread: can not create two threads per instance",
+ res1
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread: can not create two threads per instance",
+ !res2
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(createSuspended);
+ CPPUNIT_TEST(createSuspended_001);
+ // LLA: Deadlocked!!!
+ CPPUNIT_TEST(createSuspended_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class createSuspended
+
+ /** when the count value equal to or more than 3, suspend the thread.
+ */
+ static void suspendCountThread(OCountThread* _pCountThread)
+ {
+ sal_Int32 nValue = 0;
+ while (true)
+ {
+ nValue = _pCountThread->getValue();
+ if (nValue >= 3)
+ {
+ _pCountThread->suspend();
+ break;
+ }
+ }
+ }
+
+ /** Test of the osl::Thread::suspend method
+ */
+ class suspend : public CppUnit::TestFixture
+ {
+ public:
+ /** Use a thread which has a flag added 1 every second
+
+ ALGORITHM:
+ create the thread, after running special time, record value of flag, then suspend it,
+ wait a long time, check the flag, if it remains unchanged during suspending
+ */
+ void suspend_001()
+ {
+ OCountThread* aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+ // the thread run for some seconds, but not terminate
+ suspendCountThread( aCountThread );
+
+ // the value just after calling suspend
+ sal_Int32 nValue = aCountThread->getValue(); // (2)
+
+ ThreadHelper::thread_sleep_tenth_sec(3);
+
+ // the value after waiting 3 seconds
+ sal_Int32 nLaterValue = aCountThread->getValue(); // (3)
+
+ resumeAndWaitThread(aCountThread);
+ termAndJoinThread(aCountThread);
+ delete aCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend the thread",
+ bRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Suspend the thread",
+ nValue, nLaterValue
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE(suspend);
+ CPPUNIT_TEST(suspend_001);
+ // LLA: Deadlocked!!!
+ // CPPUNIT_TEST(createSuspended_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class suspend
+
+ /** Test of the osl::Thread::resume method
+ */
+ class resume : public CppUnit::TestFixture
+ {
+ public:
+ /** check if the thread run samely as usual after suspend and resume
+
+ ALGORITHM:
+ compare the values before and after suspend, they should be same,
+ then compare values before and after resume, the difference should be same as the sleep seconds number
+ */
+ void resume_001()
+ {
+ OCountThread* pCountThread = new OCountThread();
+ bool bRes = pCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ suspendCountThread(pCountThread);
+
+ sal_Int32 nSuspendValue = pCountThread->getValue(); // (2)
+ // suspend for 3 seconds
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ pCountThread->resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nResumeValue = pCountThread->getValue();
+
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nLaterValue = pCountThread->getValue();
+
+ termAndJoinThread(pCountThread);
+ delete pCountThread;
+
+ t_print("SuspendValue: %d\n", static_cast<int>(nSuspendValue));
+ t_print("ResumeValue: %d\n", static_cast<int>(nResumeValue));
+ t_print("LaterValue: %d\n", static_cast<int>(nLaterValue));
+
+ /* LLA: this assumption is no longer relevant: nResumeValue == nSuspendValue && */
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend then resume the thread",
+ nLaterValue >= 9
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend then resume the thread",
+ nResumeValue > nSuspendValue
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend then resume the thread",
+ nLaterValue > nResumeValue
+ );
+
+ }
+
+ /** Create a suspended thread then resume, check if the thread has run
+ */
+ void resume_002()
+ {
+ myThread* newthread = new myThread;
+ bool bRes = newthread->createSuspended();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't create thread!", bRes );
+
+ newthread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ sal_Int32 nValue = newthread->getValue();
+
+ termAndJoinThread(newthread);
+ delete newthread;
+
+ t_print(" nValue = %d\n", static_cast<int>(nValue));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a suspended thread, then resume",
+ nValue >= 1
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(resume);
+ CPPUNIT_TEST(resume_001);
+ CPPUNIT_TEST(resume_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class resume
+
+ /** Test of the osl::Thread::terminate method
+ */
+ class terminate : public CppUnit::TestFixture
+ {
+ public:
+ /** Check after call terminate if the running thread running go on executing
+
+ ALGORITHM:
+ before and after call terminate, the values should be the same
+ */
+ void terminate_001()
+ {
+ OCountThread* aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ sal_Int32 nValue = aCountThread->getValue();
+ aCountThread->terminate();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ sal_Int32 nLaterValue = aCountThread->getValue();
+
+ // isRunning should be false after terminate
+ bool isRunning = aCountThread->isRunning();
+ aCountThread->join();
+ delete aCountThread;
+
+ t_print(" nValue = %d\n", static_cast<int>(nValue));
+ t_print("nLaterValue = %d\n", static_cast<int>(nLaterValue));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Terminate the thread",
+ !isRunning
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Terminate the thread",
+ nLaterValue >= nValue
+ );
+ }
+ /** Check if a suspended thread will terminate after call terminate, different on w32 and on UNX
+ */
+ void terminate_002()
+ {
+ OCountThread* aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ suspendCountThread(aCountThread);
+ sal_Int32 nValue = aCountThread->getValue();
+
+ // seems a suspended thread can not be terminated on W32, while on Solaris can
+ resumeAndWaitThread(aCountThread);
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+
+ termAndJoinThread(aCountThread);
+ sal_Int32 nLaterValue = aCountThread->getValue();
+ delete aCountThread;
+
+ t_print(" nValue = %d\n", static_cast<int>(nValue));
+ t_print("nLaterValue = %d\n", static_cast<int>(nLaterValue));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend then resume the thread",
+ nLaterValue > nValue );
+ }
+
+ CPPUNIT_TEST_SUITE(terminate);
+ CPPUNIT_TEST(terminate_001);
+ CPPUNIT_TEST(terminate_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class terminate
+
+ /** Test of the osl::Thread::join method
+ */
+ class join : public CppUnit::TestFixture
+ {
+ public:
+ /** Check after call terminate if the thread running function will not go on executing
+
+ the next statement after join will not exec before the thread terminates
+ ALGORITHM:
+ recode system time at the beginning of the thread run, call join, then record system time again,
+ the difference of the two times should be equal or more than 20 seconds, the CountThread normally terminates
+ */
+ void join_001()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ StopWatch aStopWatch;
+ aStopWatch.start();
+ // TimeValue aTimeVal_befor;
+ // osl_getSystemTime( &aTimeVal_befor );
+ //t_print("#join:the system time is %d,%d\n", pTimeVal_befor->Seconds,pTimeVal_befor->Nanosec);
+
+ aCountThread->join();
+
+ //the below line will be executed after aCountThread terminate
+ // TimeValue aTimeVal_after;
+ // osl_getSystemTime( &aTimeVal_after );
+ aStopWatch.stop();
+ // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds;
+ double nSec = aStopWatch.getSeconds();
+ t_print("join_001 nSec=%f\n", nSec);
+ delete aCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Join the thread: after the thread terminate",
+ nSec >= 2
+ );
+
+ }
+ /** after terminated by another thread, join exited immediately
+
+ ALGORITHM:
+ terminate the thread when value>=3, call join, check the beginning time and time after join,
+ the difference should be 3 seconds, join costs little time
+ */
+ void join_002()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ //record the time when the running begin
+ // TimeValue aTimeVal_befor;
+ // osl_getSystemTime( &aTimeVal_befor );
+ StopWatch aStopWatch;
+ aStopWatch.start();
+
+ ThreadHelper::thread_sleep_tenth_sec(10);
+ termAndJoinThread(aCountThread);
+
+ //the below line will be executed after aCountThread terminate
+ // TimeValue aTimeVal_after;
+ // osl_getSystemTime( &aTimeVal_after );
+ // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds;
+ aStopWatch.stop();
+ double nSec = aStopWatch.getSeconds();
+ t_print("join_002 nSec=%f\n", nSec);
+
+ delete aCountThread;
+ CPPUNIT_ASSERT_MESSAGE(
+ "Join the thread: after thread terminate by another thread",
+ nSec >= 1
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(join);
+ CPPUNIT_TEST(join_001);
+ CPPUNIT_TEST(join_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class join
+
+ /** Test of the osl::Thread::isRunning method
+ */
+ class isRunning : public CppUnit::TestFixture
+ {
+ public:
+ void isRunning_001()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ bool bRun = aCountThread->isRunning();
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ termAndJoinThread(aCountThread);
+ bool bTer = aCountThread->isRunning();
+ delete aCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ bRun
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ !bTer
+ );
+ }
+ /** check the value of isRunning when suspending and after resume
+ */
+ void isRunning_002()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ // sal_Bool bRunning = aCountThread->isRunning();
+ // sal_Int32 nValue = 0;
+ suspendCountThread(aCountThread);
+
+ bool bRunning_sup = aCountThread->isRunning();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ aCountThread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ bool bRunning_res = aCountThread->isRunning();
+ termAndJoinThread(aCountThread);
+ bool bRunning_ter = aCountThread->isRunning();
+ delete aCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ bRunning_sup );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ bRunning_res );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ !bRunning_ter );
+
+ }
+
+ CPPUNIT_TEST_SUITE(isRunning);
+ CPPUNIT_TEST(isRunning_001);
+ CPPUNIT_TEST(isRunning_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class isRunning
+
+ /// check osl::Thread::setPriority
+ class setPriority : public CppUnit::TestFixture
+ {
+ public:
+ // insert your test code here.
+ OString getPrioName(oslThreadPriority _aPriority)
+ {
+ OString sPrioStr;
+ switch (_aPriority)
+ {
+ case osl_Thread_PriorityHighest:
+ sPrioStr = "Highest";
+ break;
+
+ case osl_Thread_PriorityAboveNormal:
+ sPrioStr = "AboveNormal";
+ break;
+
+ case osl_Thread_PriorityNormal:
+ sPrioStr = "Normal";
+ break;
+
+ case osl_Thread_PriorityBelowNormal:
+ sPrioStr = "BelowNormal";
+ break;
+
+ case osl_Thread_PriorityLowest:
+ sPrioStr = "Lowest";
+ break;
+ default:
+ sPrioStr = "unknown";
+ }
+ return sPrioStr;
+ }
+
+ /** check 2 threads.
+
+ ALGORITHM:
+ Here the function should show, that 2 different threads,
+ which only increase a value, should run at the same time with same prio.
+ The test fails, if the difference between the two values is more than 5%
+ but IMHO this isn't a failure, it's only a feature of the OS.
+ */
+
+ void check2Threads(oslThreadPriority _aPriority)
+ {
+ // initial 5 threads with different priorities
+ OAddThread* pThread = new OAddThread();
+ OAddThread* p2Thread = new OAddThread();
+
+ //Create them and start running at the same time
+ pThread->create();
+ pThread->setPriority(_aPriority);
+ p2Thread->create();
+ p2Thread->setPriority(_aPriority);
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ pThread->terminate();
+ p2Thread->terminate();
+
+ sal_Int32 nValueNormal = pThread->getValue();
+
+ sal_Int32 nValueNormal2 = p2Thread->getValue();
+
+ OString sPrio = getPrioName(_aPriority);
+ t_print("After 10 tenth seconds\n");
+
+ t_print("nValue in %s Prio Thread is %d\n",sPrio.getStr(), static_cast<int>(nValueNormal));
+ t_print("nValue in %s Prio Thread is %d\n", sPrio.getStr(), static_cast<int>(nValueNormal2));
+
+ // ThreadHelper::thread_sleep_tenth_sec(1);
+ pThread->join();
+ p2Thread->join();
+
+ delete pThread;
+ delete p2Thread;
+
+ sal_Int32 nDelta = abs(nValueNormal - nValueNormal2);
+ double nQuotient = std::max(nValueNormal, nValueNormal2);
+ CPPUNIT_ASSERT_MESSAGE(
+ "Quotient is zero, which means, there exist no right values.",
+ nQuotient != 0
+ );
+ double nDeltaPercent = nDelta / nQuotient * 100;
+
+ t_print("Delta value %d, percent %f\n", static_cast<int>(nDelta), nDeltaPercent);
+
+ // LLA: it's not a bug if the current OS is not able to handle thread scheduling right and good.
+ // like Windows XP
+ // LLA: CPPUNIT_ASSERT_MESSAGE(
+ // LLA: "Run 2 normal threads, the count diff more than 5 percent.",
+ // LLA: nDeltaPercent <= 5
+ // LLA: );
+ }
+
+ void setPriority_001_1()
+ {
+ check2Threads(osl_Thread_PriorityHighest);
+ }
+ void setPriority_001_2()
+ {
+ check2Threads(osl_Thread_PriorityAboveNormal);
+ }
+ void setPriority_001_3()
+ {
+ check2Threads(osl_Thread_PriorityNormal);
+ }
+ void setPriority_001_4()
+ {
+ check2Threads(osl_Thread_PriorityBelowNormal);
+ }
+ void setPriority_001_5()
+ {
+ check2Threads(osl_Thread_PriorityLowest);
+ }
+
+ void setPriority_002()
+ {
+ // initial 5 threads with different priorities
+
+ OAddThread aHighestThread;
+ OAddThread aAboveNormalThread;
+ OAddThread aNormalThread;
+ //OAddThread *aBelowNormalThread = new OAddThread();
+ //OAddThread *aLowestThread = new OAddThread();
+
+ //Create them and start running at the same time
+ aHighestThread.createSuspended();
+ aHighestThread.setPriority(osl_Thread_PriorityHighest);
+
+ aAboveNormalThread.createSuspended();
+ aAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal);
+
+ aNormalThread.createSuspended();
+ aNormalThread.setPriority(osl_Thread_PriorityNormal);
+ /*aBelowNormalThread->create();
+ aBelowNormalThread->setPriority(osl_Thread_PriorityBelowNormal);
+ aLowestThread->create();
+ aLowestThread->setPriority(osl_Thread_PriorityLowest);
+ */
+
+ aHighestThread.resume();
+ aAboveNormalThread.resume();
+ aNormalThread.resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ aHighestThread.suspend();
+ aAboveNormalThread.suspend();
+ aNormalThread.suspend();
+
+ termAndJoinThread(&aNormalThread);
+ termAndJoinThread(&aAboveNormalThread);
+ termAndJoinThread(&aHighestThread);
+ //aBelowNormalThread->terminate();
+ //aLowestThread->terminate();
+
+ sal_Int32 nValueHighest = aHighestThread.getValue();
+
+ sal_Int32 nValueAboveNormal = aAboveNormalThread.getValue();
+
+ sal_Int32 nValueNormal = aNormalThread.getValue();
+
+ t_print("After 10 tenth seconds\n");
+ t_print("nValue in Highest Prio Thread is %d\n", static_cast<int>(nValueHighest));
+ t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast<int>(nValueAboveNormal));
+ t_print("nValue in Normal Prio Thread is %d\n", static_cast<int>(nValueNormal));
+
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueHighest > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueAboveNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueNormal > 0
+ );
+#endif
+ }
+
+ void setPriority_003()
+ {
+ // initial 5 threads with different priorities
+ OAddThread pHighestThread;
+ OAddThread pAboveNormalThread;
+ OAddThread pNormalThread;
+ OAddThread pBelowNormalThread;
+ OAddThread pLowestThread;
+
+ //Create them and start running at the same time
+ pHighestThread.createSuspended();
+ pHighestThread.setPriority(osl_Thread_PriorityHighest);
+
+ pAboveNormalThread.createSuspended();
+ pAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal);
+
+ pNormalThread.createSuspended();
+ pNormalThread.setPriority(osl_Thread_PriorityNormal);
+
+ pBelowNormalThread.createSuspended();
+ pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal);
+
+ pLowestThread.createSuspended();
+ pLowestThread.setPriority(osl_Thread_PriorityLowest);
+
+ pHighestThread.resume();
+ pAboveNormalThread.resume();
+ pNormalThread.resume();
+ pBelowNormalThread.resume();
+ pLowestThread.resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ pHighestThread.suspend();
+ pAboveNormalThread.suspend();
+ pNormalThread.suspend();
+ pBelowNormalThread.suspend();
+ pLowestThread.suspend();
+
+ termAndJoinThread(&pHighestThread);
+ termAndJoinThread(&pAboveNormalThread);
+ termAndJoinThread(&pNormalThread);
+ termAndJoinThread(&pBelowNormalThread);
+ termAndJoinThread(&pLowestThread);
+
+ sal_Int32 nValueHighest = pHighestThread.getValue();
+
+ sal_Int32 nValueAboveNormal = pAboveNormalThread.getValue();
+
+ sal_Int32 nValueNormal = pNormalThread.getValue();
+
+ sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue();
+
+ sal_Int32 nValueLowest = pLowestThread.getValue();
+
+ t_print("After 10 tenth seconds\n");
+ t_print("nValue in Highest Prio Thread is %d\n", static_cast<int>(nValueHighest));
+ t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast<int>(nValueAboveNormal));
+ t_print("nValue in Normal Prio Thread is %d\n", static_cast<int>(nValueNormal));
+ t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast<int>(nValueBelowNormal));
+ t_print("nValue in Lowest Prio Thread is %d\n", static_cast<int>(nValueLowest));
+
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueHighest > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueAboveNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueBelowNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueLowest > 0
+ );
+#endif
+ }
+
+ void setPriority_004()
+ {
+ // initial 5 threads with different priorities
+ // OAddThread *pHighestThread = new OAddThread();
+ OAddThread pAboveNormalThread;
+ OAddThread pNormalThread;
+ OAddThread pBelowNormalThread;
+ OAddThread pLowestThread;
+
+ //Create them and start running at the same time
+ // pHighestThread->createSuspended();
+ // pHighestThread->setPriority(osl_Thread_PriorityHighest);
+
+ pAboveNormalThread.createSuspended();
+ pAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal);
+
+ pNormalThread.createSuspended();
+ pNormalThread.setPriority(osl_Thread_PriorityNormal);
+
+ pBelowNormalThread.createSuspended();
+ pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal);
+
+ pLowestThread.createSuspended();
+ pLowestThread.setPriority(osl_Thread_PriorityLowest);
+
+ // pHighestThread->resume();
+ pAboveNormalThread.resume();
+ pNormalThread.resume();
+ pBelowNormalThread.resume();
+ pLowestThread.resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ // pHighestThread->suspend();
+ pAboveNormalThread.suspend();
+ pNormalThread.suspend();
+ pBelowNormalThread.suspend();
+ pLowestThread.suspend();
+
+ // termAndJoinThread(pHighestThread);
+ termAndJoinThread(&pAboveNormalThread);
+ termAndJoinThread(&pNormalThread);
+ termAndJoinThread(&pBelowNormalThread);
+ termAndJoinThread(&pLowestThread);
+
+ // sal_Int32 nValueHighest = 0;
+ // nValueHighest = pHighestThread->getValue();
+
+ sal_Int32 nValueAboveNormal = pAboveNormalThread.getValue();
+
+ sal_Int32 nValueNormal = pNormalThread.getValue();
+
+ sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue();
+
+ sal_Int32 nValueLowest = pLowestThread.getValue();
+
+ t_print("After 5 tenth seconds\n");
+ t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast<int>(nValueAboveNormal));
+ t_print("nValue in Normal Prio Thread is %d\n", static_cast<int>(nValueNormal));
+ t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast<int>(nValueBelowNormal));
+ t_print("nValue in Lowest Prio Thread is %d\n", static_cast<int>(nValueLowest));
+
+ // delete pHighestThread;
+
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ /* nValueHighest > 0 && */
+ nValueAboveNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueBelowNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueLowest > 0
+ );
+#endif
+ }
+ void setPriority_005()
+ {
+ // initial 5 threads with different priorities
+ // OAddThread *pHighestThread = new OAddThread();
+ // OAddThread *pAboveNormalThread = new OAddThread();
+ OAddThread pNormalThread;
+ OAddThread pBelowNormalThread;
+ OAddThread pLowestThread;
+
+ //Create them and start running at the same time
+ // pHighestThread->createSuspended();
+ // pHighestThread->setPriority(osl_Thread_PriorityHighest);
+
+ // pAboveNormalThread->createSuspended();
+ // pAboveNormalThread->setPriority(osl_Thread_PriorityAboveNormal);
+
+ pNormalThread.createSuspended();
+ pNormalThread.setPriority(osl_Thread_PriorityNormal);
+
+ pBelowNormalThread.createSuspended();
+ pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal);
+
+ pLowestThread.createSuspended();
+ pLowestThread.setPriority(osl_Thread_PriorityLowest);
+
+ // pHighestThread->resume();
+ // pAboveNormalThread->resume();
+ pNormalThread.resume();
+ pBelowNormalThread.resume();
+ pLowestThread.resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ // pHighestThread->suspend();
+ // pAboveNormalThread->suspend();
+ pNormalThread.suspend();
+ pBelowNormalThread.suspend();
+ pLowestThread.suspend();
+
+ // termAndJoinThread(pHighestThread);
+ // termAndJoinThread(pAboveNormalThread);
+ termAndJoinThread(&pNormalThread);
+ termAndJoinThread(&pBelowNormalThread);
+ termAndJoinThread(&pLowestThread);
+
+ // sal_Int32 nValueHighest = 0;
+ // nValueHighest = pHighestThread->getValue();
+
+ // sal_Int32 nValueAboveNormal = 0;
+ // nValueAboveNormal = pAboveNormalThread->getValue();
+
+ sal_Int32 nValueNormal = pNormalThread.getValue();
+
+ sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue();
+
+ sal_Int32 nValueLowest = pLowestThread.getValue();
+
+ t_print("After 5 tenth seconds\n");
+ t_print("nValue in Normal Prio Thread is %d\n", static_cast<int>(nValueNormal));
+ t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast<int>(nValueBelowNormal));
+ t_print("nValue in Lowest Prio Thread is %d\n", static_cast<int>(nValueLowest));
+
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ /* nValueHighest > 0 && */
+ /* nValueAboveNormal > 0 && */
+ nValueNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueBelowNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueLowest > 0
+ );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(setPriority);
+#ifndef __sun
+ CPPUNIT_TEST(setPriority_002);
+ CPPUNIT_TEST(setPriority_003);
+ CPPUNIT_TEST(setPriority_004);
+ CPPUNIT_TEST(setPriority_005);
+#endif
+ CPPUNIT_TEST(setPriority_001_1);
+ CPPUNIT_TEST(setPriority_001_2);
+ CPPUNIT_TEST(setPriority_001_3);
+ CPPUNIT_TEST(setPriority_001_4);
+ CPPUNIT_TEST(setPriority_001_5);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class setPriority
+
+ /** Test of the osl::Thread::getPriority method
+ */
+ class getPriority : public CppUnit::TestFixture
+ {
+ public:
+ // insert your test code here.
+ void getPriority_001()
+ {
+ OAddThread *pHighestThread = new OAddThread();
+
+ //Create them and start running at the same time
+ pHighestThread->create();
+ pHighestThread->setPriority(osl_Thread_PriorityHighest);
+
+ oslThreadPriority aPriority = pHighestThread->getPriority();
+ termAndJoinThread(pHighestThread);
+ delete pHighestThread;
+
+ ThreadHelper::outputPriority(aPriority);
+
+// LLA: Priority settings may not work within some OS versions.
+#if defined(_WIN32) || defined(__sun)
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "getPriority",
+ osl_Thread_PriorityHighest, aPriority
+ );
+#else
+// LLA: Linux
+// NO_PTHREAD_PRIORITY ???
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "getPriority",
+ osl_Thread_PriorityNormal, aPriority
+ );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getPriority);
+ CPPUNIT_TEST(getPriority_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getPriority
+
+ class getIdentifier : public CppUnit::TestFixture
+ {
+ public:
+ // initialise your test code values here.
+
+ void getIdentifier_001()
+ {
+ // insert your test code here.
+ }
+
+ CPPUNIT_TEST_SUITE(getIdentifier);
+ CPPUNIT_TEST(getIdentifier_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getIdentifier
+
+ /** Test of the osl::Thread::getCurrentIdentifier method
+ */
+ class getCurrentIdentifier : public CppUnit::TestFixture
+ {
+ public:
+ void getCurrentIdentifier_001()
+ {
+ oslThreadIdentifier oId;
+ OCountThread* pCountThread = new OCountThread;
+ pCountThread->create();
+ pCountThread->setWait(3);
+ oId = Thread::getCurrentIdentifier();
+ oslThreadIdentifier oIdChild = pCountThread->getIdentifier();
+ termAndJoinThread(pCountThread);
+ delete pCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Get the identifier for the current active thread.",
+ oId != oIdChild);
+ }
+
+ CPPUNIT_TEST_SUITE(getCurrentIdentifier);
+ CPPUNIT_TEST(getCurrentIdentifier_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getCurrentIdentifier
+
+ /** Test of the osl::Thread::wait method
+ */
+ class waittest : public CppUnit::TestFixture
+ {
+ public:
+ /** call wait in the run method
+
+ ALGORITHM:
+ tested thread wait nWaitSec seconds, main thread sleep (2) seconds,
+ then terminate the tested thread, due to the fact that the thread do a sleep(1) + wait(5)
+ it's finish after 6 seconds.
+ */
+ void wait_001()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ sal_Int32 nWaitSec = 5;
+ aCountThread->setWait(nWaitSec);
+ // thread runs at least 5 seconds.
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ //record the time when the running begin
+ StopWatch aStopWatch;
+ aStopWatch.start();
+
+ // wait a little bit, to let the thread the time, to start
+ ThreadHelper::thread_sleep_tenth_sec( 4 );
+
+ // if wait works,
+ // this function returns, after 4 sec. later
+ termAndJoinThread(aCountThread);
+
+ // value should be one.
+ sal_Int32 nValue = aCountThread->getValue();
+
+ aStopWatch.stop();
+
+ // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds;
+ double nTenthSec = aStopWatch.getTenthSec();
+ double nSec = aStopWatch.getSeconds();
+ delete aCountThread;
+ t_print("nTenthSec = %f \n", nTenthSec);
+ t_print("nSec = %f \n", nSec);
+ t_print("nValue = %d \n", static_cast<int>(nValue));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Wait: Blocks the calling thread for the given number of time.",
+ nTenthSec >= 5
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Wait: Blocks the calling thread for the given number of time.",
+ sal_Int32(1), nValue
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE(waittest);
+ CPPUNIT_TEST(wait_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class waittest
+
+ /** osl::Thread::yield method: can not design good test scenario to test up to now
+ */
+ class yield : public CppUnit::TestFixture
+ {
+ public:
+ void yield_001()
+ {
+ // insert your test code here.
+ }
+
+ CPPUNIT_TEST_SUITE(yield);
+ CPPUNIT_TEST(yield_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class yield
+
+ /** Test of the osl::Thread::schedule method
+ */
+ class schedule : public CppUnit::TestFixture
+ {
+ public:
+
+ /** The requested thread will get terminate the next time schedule() is called.
+
+ Note: on UNX, if call suspend thread is not the to be suspended thread, the to be
+ suspended thread will get suspended the next time schedule() is called,
+ while on w32, it's nothing with schedule.
+
+ check if suspend and terminate work well via schedule
+ */
+ void schedule_001()
+ {
+ OAddThread* aThread = new OAddThread();
+ bool bRes = aThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ aThread->suspend();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ sal_Int32 nValue = aThread->getValue();
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nLaterValue = aThread->getValue();
+ // resumeAndWaitThread(aThread);
+ t_print(" value = %d\n", static_cast<int>(nValue));
+ t_print("later value = %d\n", static_cast<int>(nLaterValue));
+ // if value and latervalue not equal, then the thread would not suspended
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Schedule: suspend works.",
+ nValue, nLaterValue
+ );
+
+ aThread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+
+ aThread->terminate();
+ sal_Int32 nValue_term = aThread->getValue();
+
+ aThread->join();
+ sal_Int32 nValue_join = aThread->getValue();
+
+ t_print("value after term = %d\n", static_cast<int>(nValue_term));
+ t_print("value after join = %d\n", static_cast<int>(nValue_join));
+
+ // nValue_term and nValue_join should be the same
+ // but should be differ from nValue
+
+ delete aThread;
+ //check if thread really terminate after call terminate, if join immediately return
+ CPPUNIT_ASSERT_MESSAGE(
+ "Schedule: Returns False if the thread should terminate.",
+ nValue_join - nValue_term <= 1
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Schedule: Returns False if the thread should terminate.",
+ nValue_join - nValue_term >= 0
+ );
+
+ }
+
+ /** design a thread that has not call schedule in the workfunction--run method
+ */
+ void schedule_002()
+ {
+ ONoScheduleThread aThread; // this thread runs 10 sec. (no schedule() used)
+ bool bRes = aThread.create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ aThread.suspend();
+ sal_Int32 nValue = aThread.getValue();
+
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nLaterValue = aThread.getValue();
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ resumeAndWaitThread(&aThread);
+
+ t_print(" value = %d\n", static_cast<int>(nValue));
+ t_print("later value = %d\n", static_cast<int>(nLaterValue));
+
+ //On windows, suspend works, so the values are same
+#ifdef _WIN32
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Schedule: don't schedule in thread run method, suspend works.",
+ nValue, nLaterValue
+ );
+#endif
+
+ //On UNX, suspend does not work, so the difference of the values equals to sleep seconds number
+#ifdef UNX
+ aThread.resume();
+ CPPUNIT_ASSERT_MESSAGE(
+ "Schedule: don't schedule in thread run method, suspend does not work too.",
+ nLaterValue > nValue
+ );
+#endif
+
+ // terminate will not work if no schedule in thread's work function
+ termAndJoinThread(&aThread);
+ sal_Int32 nValue_term = aThread.getValue();
+
+ t_print(" value term = %d\n", static_cast<int>(nValue_term));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Schedule: don't schedule in thread run method, terminate failed.",
+ static_cast<sal_Int32>(10), nValue_term
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(schedule);
+ CPPUNIT_TEST(schedule_001);
+ CPPUNIT_TEST(schedule_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class schedule
+
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::create, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::createSuspended, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::suspend, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::resume, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::terminate, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::join, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::isRunning, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::setPriority, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getPriority, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getIdentifier, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getCurrentIdentifier, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::waittest, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::yield, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::schedule, "osl_Thread");
+} // namespace osl_Thread
+
+// destroy function when the binding thread terminate
+static void destroyCallback(void * data)
+{
+ delete[] static_cast<char *>(data);
+}
+
+static ThreadData myThreadData(destroyCallback);
+
+namespace {
+
+class myKeyThread : public Thread
+{
+public:
+ // a public char member for test result checking
+ char m_Char_Test;
+ // for pass thread-special data to thread
+ explicit myKeyThread(const char cData)
+ : m_Char_Test(0)
+ {
+ m_nData = cData;
+ }
+private:
+ char m_nData;
+
+ void SAL_CALL run() override
+ {
+ char * pc = new char[2];
+// strcpy(pc, &m_nData);
+ memcpy(pc, &m_nData, 1);
+ pc[1] = '\0';
+
+ myThreadData.setData(pc);
+ char* pData = static_cast<char*>(myThreadData.getData());
+ m_Char_Test = *pData;
+ // wait for long time to check the data value in main thread
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ }
+public:
+ virtual ~myKeyThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+};
+
+}
+
+static ThreadData idData;
+
+namespace {
+
+class idThread: public Thread
+{
+public:
+ oslThreadIdentifier m_Id;
+private:
+ void SAL_CALL run() override
+ {
+ std::unique_ptr<oslThreadIdentifier> pId( new oslThreadIdentifier );
+ *pId = getIdentifier();
+ idData.setData(pId.get());
+ oslThreadIdentifier* pIdData = static_cast<oslThreadIdentifier*>(idData.getData());
+ //t_print("Thread %d has Data %d\n", getIdentifier(), *pIdData);
+ m_Id = *pIdData;
+ }
+
+public:
+ virtual ~idThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+};
+
+}
+
+namespace osl_ThreadData
+{
+
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+
+ // insert your test code here.
+ void ctor_001()
+ {
+
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ctors
+
+ class setData : public CppUnit::TestFixture
+ {
+ public:
+
+ /** the same instance of the class can have different values in different threads
+ */
+ void setData_001()
+ {
+ idThread aThread1;
+ aThread1.create();
+ idThread aThread2;
+ aThread2.create();
+
+ aThread1.join();
+ aThread2.join();
+
+ oslThreadIdentifier aThreadId1 = aThread1.getIdentifier();
+ oslThreadIdentifier aThreadId2 = aThread2.getIdentifier();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ aThread1.m_Id, aThreadId1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ aThread2.m_Id, aThreadId2
+ );
+
+ }
+
+ void setData_002()
+ {
+ // at first, set the data a value
+ char* pc = new char[2];
+ char nData = 'm';
+ pc[0] = nData;
+ pc[1] = '\0';
+
+ myThreadData.setData(pc);
+
+ myKeyThread aThread1('a');
+ aThread1.create();
+ myKeyThread aThread2('b');
+ aThread2.create();
+ // aThread1 and aThread2 should have not terminated yet, check current data, not 'a' 'b'
+ char* pChar = static_cast<char*>(myThreadData.getData());
+ char aChar = *pChar;
+
+ aThread1.join();
+ aThread2.join();
+
+ // the saved thread data of aThread1 & aThread2, different
+ char cData1 = aThread1.m_Char_Test;
+ char cData2 = aThread2.m_Char_Test;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'a', cData1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'b', cData2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'm', aChar
+ );
+
+ }
+ /** setData the second time, and then getData
+ */
+ void setData_003()
+ {
+ // at first, set the data a value
+ char* pc = new char[2];
+ char nData = 'm';
+ memcpy(pc, &nData, 1);
+ pc[1] = '\0';
+ myThreadData.setData(pc);
+
+ myKeyThread aThread1('a');
+ aThread1.create();
+ myKeyThread aThread2('b');
+ aThread2.create();
+ // aThread1 and aThread2 should have not terminated yet
+ // setData the second time
+ char* pc2 = new char[2];
+ nData = 'o';
+ memcpy(pc2, &nData, 1);
+ pc2[1] = '\0';
+
+ myThreadData.setData(pc2);
+ char* pChar = static_cast<char*>(myThreadData.getData());
+ char aChar = *pChar;
+
+ aThread1.join();
+ aThread2.join();
+
+ // the saved thread data of aThread1 & aThread2, different
+ char cData1 = aThread1.m_Char_Test;
+ char cData2 = aThread2.m_Char_Test;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'a', cData1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'b', cData2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'o', aChar
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(setData);
+ CPPUNIT_TEST(setData_001);
+ CPPUNIT_TEST(setData_002);
+ CPPUNIT_TEST(setData_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class setData
+
+ class getData : public CppUnit::TestFixture
+ {
+ public:
+
+ // After setData in child threads, get Data in the main thread, should be independent
+ void getData_001()
+ {
+ char* pc = new char[2];
+ strcpy(pc, "i");
+ myThreadData.setData(pc);
+
+ myKeyThread aThread1('c');
+ aThread1.create();
+ myKeyThread aThread2('d');
+ aThread2.create();
+
+ aThread1.join();
+ aThread2.join();
+
+ char cData1 = aThread1.m_Char_Test;
+ char cData2 = aThread2.m_Char_Test;
+
+ char* pChar = static_cast<char*>(myThreadData.getData());
+ char aChar = *pChar;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'c', cData1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'd', cData2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'i', aChar
+ );
+ }
+
+ // setData then change the value in the address data pointer points,
+ // and then getData, should get the new value
+ void getData_002()
+ {
+ char* pc = new char[2];
+ char nData = 'i';
+ memcpy(pc, &nData, 1);
+ pc[1] = '\0';
+
+ myThreadData.setData(pc);
+
+ myKeyThread aThread1('a');
+ aThread1.create();
+ myKeyThread aThread2('b');
+ aThread2.create();
+
+ // change the value which pc points
+ char nData2 = 'j';
+ memcpy(pc, &nData2, 1);
+ pc[1] = '\0';
+
+ void* pChar = myThreadData.getData();
+ char aChar = *static_cast<char*>(pChar);
+
+ aThread1.join();
+ aThread2.join();
+
+ char cData1 = aThread1.m_Char_Test;
+ char cData2 = aThread2.m_Char_Test;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'a', cData1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'b', cData2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'j', aChar
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE(getData);
+ CPPUNIT_TEST(getData_001);
+ CPPUNIT_TEST(getData_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getData
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::ctors);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::setData);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::getData);
+} // namespace osl_ThreadData
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/process/osl_Thread.xsce b/sal/qa/osl/process/osl_Thread.xsce
new file mode 100644
index 000000000..11d0c5da1
--- /dev/null
+++ b/sal/qa/osl/process/osl_Thread.xsce
@@ -0,0 +1,18 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+osl_Thread.setPriority.setPriority_001_1 unxsols4
diff --git a/sal/qa/osl/process/osl_process.cxx b/sal/qa/osl/process/osl_process.cxx
new file mode 100644
index 000000000..c396a06b5
--- /dev/null
+++ b/sal/qa/osl/process/osl_process.cxx
@@ -0,0 +1,450 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifdef IOS
+#define CPPUNIT_PLUGIN_EXPORTED_NAME cppunitTest_osl_process
+#endif
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <osl/process.h>
+#include <osl/file.hxx>
+#include <osl/thread.h>
+#include <rtl/ustring.hxx>
+#include <signal.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <osl/module.hxx>
+#include <sal/macros.h>
+
+#if defined HAVE_VALGRIND_HEADERS
+#include <valgrind/valgrind.h>
+#elif !defined _WIN32
+#define RUNNING_ON_VALGRIND false
+#endif
+
+#if !defined(_WIN32) // Windows
+#include <unistd.h>
+#endif
+
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include <algorithm>
+#include <iterator>
+#include <string>
+
+#ifdef UNX
+#if defined( MACOSX )
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+# else
+ extern char** environ;
+# endif
+#endif
+
+using namespace osl;
+
+/** get binary Path.
+*/
+static OUString getExecutablePath()
+{
+ OUString dirPath;
+ osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(&getExecutablePath), dirPath);
+ dirPath = dirPath.copy( 0, dirPath.lastIndexOf('/') );
+ dirPath = OUString::Concat(dirPath.subView( 0, dirPath.lastIndexOf('/') + 1)) +
+ "Executable";
+ return dirPath;
+}
+
+#if !defined _WIN32
+
+namespace {
+
+class exclude
+{
+public:
+
+ explicit exclude(const std::vector<OString>& exclude_list)
+ {
+ for (auto& exclude_list_item : exclude_list)
+ exclude_list_.push_back(env_var_name(exclude_list_item));
+ }
+
+ bool operator() (const OString& env_var) const
+ {
+ return (exclude_list_.end() !=
+ std::find(
+ exclude_list_.begin(),
+ exclude_list_.end(),
+ env_var_name(env_var)));
+ }
+
+private:
+
+ // extract the name from an environment variable
+ // that is given in the form "NAME=VALUE"
+ static OString env_var_name(const OString& env_var)
+ {
+ sal_Int32 pos_equal_sign =
+ env_var.indexOf('=');
+
+ if (pos_equal_sign != -1)
+ return env_var.copy(0, pos_equal_sign);
+
+ return OString();
+ }
+
+private:
+ std::vector<OString> exclude_list_;
+};
+
+ void tidy_container(std::vector<OString> &env_container)
+ {
+ //sort them because there are no guarantees to ordering
+ std::sort(env_container.begin(), env_container.end());
+ if (RUNNING_ON_VALGRIND)
+ {
+ env_container.erase(
+ std::remove_if(
+ env_container.begin(), env_container.end(),
+ [](OString const & s) {
+ return s.startsWith("LD_PRELOAD=")
+ || s.startsWith("VALGRIND_LIB="); }),
+ env_container.end());
+ }
+ }
+}
+
+ static void read_parent_environment(std::vector<OString>* env_container)
+ {
+ for (int i = 0; environ[i] != nullptr; i++)
+ env_container->push_back(OString(environ[i]));
+ tidy_container(*env_container);
+ }
+
+#endif
+
+class Test_osl_executeProcess : public CppUnit::TestFixture
+{
+ const OUString env_param_;
+
+ OUString temp_file_url_;
+ OUString temp_file_path_;
+ rtl_uString* parameters_[2];
+ static const int parameters_count_ = 2;
+ OUString suCWD;
+ OUString suExecutableFileURL;
+
+public:
+
+ // ctor
+ Test_osl_executeProcess() :
+ env_param_(OUString("-env")), suCWD(getExecutablePath())
+ {
+ parameters_[0] = env_param_.pData;
+
+#if defined(_WIN32)
+ suExecutableFileURL = suCWD + "/" "osl_process_child.exe";
+#else
+ suExecutableFileURL = suCWD + "/" "osl_process_child";
+#endif
+ }
+
+ virtual void setUp() override
+ {
+ temp_file_path_ = create_temp_file(temp_file_url_);
+ parameters_[1] = temp_file_path_.pData;
+ }
+
+ virtual void tearDown() override
+ {
+ osl::File::remove(temp_file_url_);
+ }
+
+ OUString create_temp_file(OUString &temp_file_url)
+ {
+ FileBase::RC rc = FileBase::createTempFile(nullptr, nullptr, &temp_file_url);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile failed", FileBase::E_None, rc);
+
+ OUString temp_file_path;
+ rc = FileBase::getSystemPathFromFileURL(temp_file_url, temp_file_path);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("getSystemPathFromFileURL failed", FileBase::E_None, rc);
+
+ return temp_file_path;
+ }
+
+#if !defined _WIN32
+
+ void read_child_environment(std::vector<OString>* env_container)
+ {
+ OString temp_file_name = OUStringToOString(OUString(
+ parameters_[1]), osl_getThreadTextEncoding());
+ std::ifstream file(temp_file_name.getStr());
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "I/O error, cannot open child environment file",
+ file.is_open()
+ );
+
+ std::string line;
+ line.reserve(1024);
+ while (std::getline(file, line, '\0'))
+ env_container->push_back(OString(line.c_str()));
+ tidy_container(*env_container);
+ }
+
+ // environment of the child process that was
+ // started. The child process writes his
+ // environment into a file
+ void compare_environments()
+ {
+ std::vector<OString> parent_env;
+ read_parent_environment(&parent_env);
+
+ std::vector<OString> child_env;
+ read_child_environment(&child_env);
+
+ OString msg(
+ OString::number(parent_env.size()) + "/"
+ + OString::number(child_env.size()));
+ auto min = std::min(parent_env.size(), child_env.size());
+ for (decltype(min) i = 0; i != min; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ msg.getStr(), parent_env[i], child_env[i]);
+ }
+ if (parent_env.size() != child_env.size()) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ (parent_env.size() >= child_env.size()
+ ? parent_env.back() : child_env.back()).getStr(),
+ parent_env.size(), child_env.size());
+ }
+ }
+
+ // compare the equal environment parts and the
+ // different part of the child environment
+ bool compare_merged_environments(const std::vector<OString>& different_env_vars)
+ {
+ std::vector<OString> parent_env;
+ read_parent_environment(&parent_env);
+
+ for (auto& env : parent_env)
+ std::cout << "initially parent env: " << env << "\n";
+
+ //remove the environment variables that we have changed
+ //in the child environment from the read parent environment
+ parent_env.erase(
+ std::remove_if(parent_env.begin(), parent_env.end(), exclude(different_env_vars)),
+ parent_env.end());
+
+ for (auto& env : parent_env)
+ std::cout << "stripped parent env: " << env << "\n";
+
+ //read the child environment and exclude the variables that
+ //are different
+ std::vector<OString> child_env;
+ read_child_environment(&child_env);
+
+ for (auto& env : child_env)
+ std::cout << "initial child env: " << env << "\n";
+ //partition the child environment into the variables that
+ //are different to the parent environment (they come first)
+ //and the variables that should be equal between parent
+ //and child environment
+ auto iter_logical_end =
+ std::stable_partition(child_env.begin(), child_env.end(), exclude(different_env_vars));
+
+ std::vector<OString> different_child_env_vars(child_env.begin(), iter_logical_end);
+ child_env.erase(child_env.begin(), iter_logical_end);
+
+ for (auto& env : child_env)
+ std::cout << "stripped child env: " << env << "\n";
+
+ bool common_env_size_equals = (parent_env.size() == child_env.size());
+ bool common_env_content_equals = std::equal(child_env.begin(), child_env.end(), parent_env.begin());
+
+ for (auto& env_var : different_env_vars)
+ std::cout << "different should be: " << env_var << "\n";
+
+ for (auto& env_var : different_child_env_vars)
+ std::cout << "different are: " << env_var << "\n";
+
+ bool different_env_size_equals = (different_child_env_vars.size() == different_env_vars.size());
+ bool different_env_content_equals =
+ std::equal(different_env_vars.begin(), different_env_vars.end(), different_child_env_vars.begin());
+
+ return (common_env_size_equals && common_env_content_equals &&
+ different_env_size_equals && different_env_content_equals);
+ }
+
+ // test that parent and child process have the
+ // same environment when osl_executeProcess will
+ // be called without setting new environment
+ // variables
+ void osl_execProc_parent_equals_child_environment()
+ {
+ oslProcess process;
+ oslProcessError osl_error = osl_executeProcess(
+ suExecutableFileURL.pData,
+ parameters_,
+ parameters_count_,
+ osl_Process_NORMAL,
+ nullptr,
+ suCWD.pData,
+ nullptr,
+ 0,
+ &process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_error = ::osl_joinProcess(process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_joinProcess returned with failure",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_freeProcessHandle(process);
+
+ compare_environments();
+ }
+
+ #define ENV1 "PAT=a:\\"
+ #define ENV2 "PATHb=b:\\"
+ #define ENV3 "Patha=c:\\"
+ #define ENV4 "Patha=d:\\"
+
+ void osl_execProc_merged_child_environment()
+ {
+ rtl_uString* child_env[4];
+ OUString env1(ENV1);
+ OUString env2(ENV2);
+ OUString env3(ENV3);
+ OUString env4(ENV4);
+
+ child_env[0] = env1.pData;
+ child_env[1] = env2.pData;
+ child_env[2] = env3.pData;
+ child_env[3] = env4.pData;
+
+ oslProcess process;
+ oslProcessError osl_error = osl_executeProcess(
+ suExecutableFileURL.pData,
+ parameters_,
+ parameters_count_,
+ osl_Process_NORMAL,
+ nullptr,
+ suCWD.pData,
+ child_env,
+ SAL_N_ELEMENTS(child_env),
+ &process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_error = ::osl_joinProcess(process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_joinProcess returned with failure",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_freeProcessHandle(process);
+
+ std::vector<OString> different_child_env_vars
+ {
+ ENV1,
+ ENV2,
+ ENV4
+ };
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "osl_execProc_merged_child_environment",
+ compare_merged_environments(different_child_env_vars)
+ );
+ }
+
+#endif
+
+ void osl_execProc_test_batch()
+ {
+ oslProcess process;
+#if defined(_WIN32)
+ OUString suBatch = suCWD + "/batch.bat";
+#else
+ OUString suBatch = suCWD + "/batch.sh";
+#endif
+ oslProcessError osl_error = osl_executeProcess(
+ suBatch.pData,
+ nullptr,
+ 0,
+ osl_Process_NORMAL,
+ nullptr,
+ suCWD.pData,
+ nullptr,
+ 0,
+ &process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_error = ::osl_joinProcess(process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_joinProcess returned with failure",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_freeProcessHandle(process);
+ }
+
+ CPPUNIT_TEST_SUITE(Test_osl_executeProcess);
+ //TODO: Repair these (at least under Windows)
+#if !defined(_WIN32)
+ CPPUNIT_TEST(osl_execProc_parent_equals_child_environment);
+ CPPUNIT_TEST(osl_execProc_merged_child_environment);
+#endif
+ CPPUNIT_TEST(osl_execProc_test_batch);
+ ///TODO: Repair test (or tested function ;-) - test fails.
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test_osl_executeProcess);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/process/osl_process_child.cxx b/sal/qa/osl/process/osl_process_child.cxx
new file mode 100644
index 000000000..17f749bc2
--- /dev/null
+++ b/sal/qa/osl/process/osl_process_child.cxx
@@ -0,0 +1,101 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#if defined(_WIN32) // Windows
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#else
+# include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fstream>
+#include <string.h>
+
+
+#ifdef UNX
+#if defined( MACOSX )
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+# else
+ extern char** environ;
+# endif
+#endif
+
+#ifdef _WIN32
+# define SLEEP(t) (Sleep((t)*1000))
+#else
+# define SLEEP(t) (sleep((t)))
+#endif
+
+static void wait_for_seconds(char* time)
+{
+ SLEEP(atoi(time));
+}
+
+#ifdef _WIN32
+
+static void w_to_a(LPCWSTR strW, LPSTR strA, DWORD size)
+{
+ WideCharToMultiByte(CP_ACP, 0, strW, -1, strA, size, nullptr, nullptr);
+}
+
+ static void dump_env(char* file_path)
+ {
+ LPWSTR env = GetEnvironmentStringsW();
+ LPWSTR p = env;
+
+ std::ofstream file(file_path);
+
+ char buffer[32767];
+ while (size_t l = wcslen(p))
+ {
+ w_to_a(p, buffer, sizeof(buffer));
+ file << buffer << '\0';
+ p += l + 1;
+ }
+ FreeEnvironmentStringsW(env);
+ }
+#else
+ static void dump_env(char* file_path)
+ {
+ std::ofstream file(file_path);
+ for (int i = 0; environ[i] != nullptr; ++i)
+ file << environ[i] << '\0';
+ }
+#endif
+
+int main(int argc, char* argv[])
+{
+ if (argc > 2)
+ {
+ if (strcmp("-join", argv[1]) == 0)
+ {
+ // coverity[tainted_data] - this is a build-time only test tool
+ wait_for_seconds(argv[2]);
+ }
+ else if (strcmp("-env", argv[1]) == 0)
+ dump_env(argv[2]);
+ }
+
+ return 0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/profile/osl_old_testprofile.cxx b/sal/qa/osl/profile/osl_old_testprofile.cxx
new file mode 100644
index 000000000..d1556bb15
--- /dev/null
+++ b/sal/qa/osl/profile/osl_old_testprofile.cxx
@@ -0,0 +1,62 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <osl/profile.h>
+#include <rtl/bootstrap.hxx>
+
+namespace osl_Profile
+{
+ class oldtests : public CppUnit::TestFixture
+ {
+ public:
+ void test_profile();
+
+ CPPUNIT_TEST_SUITE( oldtests );
+ CPPUNIT_TEST( test_profile );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+void oldtests::test_profile()
+{
+ OUString baseUrl;
+ CPPUNIT_ASSERT(rtl::Bootstrap::get("UserInstallation", baseUrl));
+
+ // successful write
+ oslProfile hProfile = osl_openProfile( OUString(baseUrl + "/soffice.ini").pData, osl_Profile_WRITELOCK );
+ CPPUNIT_ASSERT(hProfile != nullptr);
+ CPPUNIT_ASSERT_MESSAGE(
+ "cannot write into init file",
+ osl_writeProfileBool( hProfile, "testsection", "testbool", true ));
+ CPPUNIT_ASSERT(osl_closeProfile( hProfile ));
+
+ // unsuccessful open
+ CPPUNIT_ASSERT_EQUAL(oslProfile(nullptr), osl_openProfile( OUString(baseUrl + "/not_existing_path/soffice.ini").pData, osl_Profile_WRITELOCK ));
+}
+
+} // namespace osl_Profile
+
+CPPUNIT_TEST_SUITE_REGISTRATION( osl_Profile::oldtests );
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/security/TODO.h b/sal/qa/osl/security/TODO.h
new file mode 100644
index 000000000..082c54633
--- /dev/null
+++ b/sal/qa/osl/security/TODO.h
@@ -0,0 +1,8 @@
+#include "sal/types.h"
+#define T1(x) do { x; } while (0)
+#define T2(x) do { x; } while (sal_False)
+#define T3(x) do { x; } while (false)
+#define T4(x, y) do { x; } while (y)
+#define T5(x) T4(x, 0)
+#define T6(x) T4(x, sal_False)
+#define T7(x) T4(x, false)
diff --git a/sal/qa/osl/security/osl_Security.cxx b/sal/qa/osl/security/osl_Security.cxx
new file mode 100644
index 000000000..34417cd14
--- /dev/null
+++ b/sal/qa/osl/security/osl_Security.cxx
@@ -0,0 +1,624 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <algorithm>
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <sddl.h>
+#undef min
+#endif
+#include "osl_Security_Const.h"
+#include <osl/thread.h>
+#include <rtl/process.h>
+#include <rtl/strbuf.hxx>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+
+using namespace osl;
+using namespace rtl;
+
+/** print a UNICODE String.
+*/
+static void printUString( const OUString & str )
+{
+ //t_print("#printUString_u# " );
+ OString aString = OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
+ t_print("%s\n", aString.getStr( ) );
+}
+
+// test code start here
+
+namespace osl_Security
+{
+
+ /** testing the method:
+ Security()
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void ctors_001( )
+ {
+ ::osl::Security aSec;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: create a security its handle should not be NULL.",
+ aSec.getHandle( ) != nullptr );
+ }
+
+ CPPUNIT_TEST_SUITE( ctors );
+ CPPUNIT_TEST( ctors_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class ctors
+
+ /** testing the methods:
+ inline sal_Bool SAL_CALL logonUser(const OUString& strName,
+ const OUString& strPasswd);
+ inline sal_Bool SAL_CALL logonUser(const OUString & strName,
+ const OUString & strPasswd,
+ const OUString & strFileServer);
+ */
+ class logonUser : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes;
+
+ void logonUser_user_pwd( )
+ {
+ ::osl::Security aSec;
+ bRes = aSec.logonUser( aLogonUser, aLogonPasswd );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: check logon user through forwarded user name, pwd, passed in (UNX), failed in (W32).",
+ bRes );
+ }
+
+ void logonUser_user_pwd_server( )
+ {
+ ::osl::Security aSec;
+ bRes = aSec.logonUser( aLogonUser, aLogonPasswd, aFileServer );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: check logon user through forwarded user name, pwd and server name, failed in (UNX)(W32).",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( logonUser );
+ if ( !aStringForward.isEmpty() && aStringForward.indexOf( ' ' ) != -1 && ( aStringForward.indexOf( ' ' ) == aStringForward.lastIndexOf( ' ' ) ) )
+ /// if user name and passwd are forwarded
+ {
+ CPPUNIT_TEST( logonUser_user_pwd );
+ }
+ if ( !aStringForward.isEmpty() && aStringForward.indexOf( ' ' ) != -1 && ( aStringForward.indexOf( ' ' ) != aStringForward.lastIndexOf( ' ' ) ) )
+ /// if user name and passwd and file server are forwarded
+ {
+ CPPUNIT_TEST( logonUser_user_pwd_server );
+ }
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class logonUser
+
+ /** testing the method:
+ inline sal_Bool Security::getUserIdent( OUString& strIdent) const
+ */
+ class getUserIdent : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getUserIdent_001( )
+ {
+ ::osl::Security aSec;
+ OUString strID;
+ bRes = aSec.getUserIdent( strID );
+
+ OString aMessage = "strUserID: " +
+ OUStringToOString(strUserID, osl_getThreadTextEncoding()) +
+ ", strID: " +
+ OUStringToOString(strID, osl_getThreadTextEncoding()) +
+ ", bRes: " +
+ OString::boolean(bRes);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( aMessage.getStr(), strUserID, strID );
+ CPPUNIT_ASSERT_MESSAGE( aMessage.getStr(), bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getUserIdent );
+ CPPUNIT_TEST( getUserIdent_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getUserIdent
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL getUserName( OUString& strName) const;
+ */
+ class getUserName : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getUserName_001( )
+ {
+ ::osl::Security aSec;
+#ifdef _WIN32
+ OUString strName( strUserName ), strGetName;
+#else
+ OUString strName( strUserName ), strGetName;
+#endif
+ bRes = aSec.getUserName( strGetName );
+
+ sal_Int32 nPos = -1;
+ if (!strName.isEmpty())
+ {
+ nPos = strGetName.indexOf(strName);
+ }
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: get UserName and compare it with names got at the beginning of the test.",
+ ( nPos >= 0 ) );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: get UserName and compare it with names got at the beginning of the test.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getUserName );
+ CPPUNIT_TEST( getUserName_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getUserName
+
+ /** testing the method:
+ inline sal_Bool Security::getConfigDir( OUString& strDirectory ) const
+ */
+ class getConfigDir : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getConfigDir_001( )
+ {
+ ::osl::Security aSec;
+ OUString strConfig;
+ bRes = aSec.getConfigDir( strConfig );
+
+ CPPUNIT_ASSERT_MESSAGE( "failed to find a ConfigDir!", bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getConfigDir );
+ CPPUNIT_TEST( getConfigDir_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getConfigDir
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL isAdministrator() const;
+ */
+ class isAdministrator : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes;
+
+ void isAdministrator_001( )
+ {
+ ::osl::Security aSec;
+ bRes = aSec.isAdministrator( );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: check if the user is administrator at beginning, compare here.",
+ isAdmin, bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( isAdministrator );
+ CPPUNIT_TEST( isAdministrator_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class isAdministrator
+
+ /** testing the method:
+ inline oslSecurity getHandle() const;
+ */
+ class getHandle : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes;
+
+ void getHandle_001( )
+ {
+ ::osl::Security aSec;
+ bRes = aSec.isAdministrator( ) == bool(osl_isAdministrator( aSec.getHandle( ) ));
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: use getHandle function to call C API.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getHandle );
+ CPPUNIT_TEST( getHandle_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getHandle
+
+ class UserProfile : public CppUnit::TestFixture
+ {
+ public:
+
+ void loadUserProfile( )
+ {
+ ::osl::Security aSec;
+ bool bValue = osl_loadUserProfile(aSec.getHandle());
+
+ CPPUNIT_ASSERT_MESSAGE( "empty function.", !bValue );
+ }
+
+ void unloadUserProfile( )
+ {
+ ::osl::Security aSec;
+ osl_unloadUserProfile(aSec.getHandle());
+ CPPUNIT_ASSERT_MESSAGE( "empty function.", true );
+ }
+
+ CPPUNIT_TEST_SUITE( UserProfile );
+ CPPUNIT_TEST( loadUserProfile );
+ CPPUNIT_TEST( unloadUserProfile );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class UserProfile
+
+ class loginUserOnFileServer : public CppUnit::TestFixture
+ {
+ public:
+
+ void loginUserOnFileServer_001( )
+ {
+ OUString suUserName;
+ OUString suPassword;
+ OUString suFileServer;
+ ::osl::Security aSec;
+ oslSecurity pSec = aSec.getHandle();
+
+ oslSecurityError erg = osl_loginUserOnFileServer(suUserName.pData, suPassword.pData, suFileServer.pData, &pSec);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "empty function.", osl_Security_E_UserUnknown, erg );
+ }
+
+ CPPUNIT_TEST_SUITE( loginUserOnFileServer );
+ CPPUNIT_TEST( loginUserOnFileServer_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class loginUserOnFileServer
+
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::ctors);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::logonUser);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getUserIdent);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getUserName);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getConfigDir);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::isAdministrator);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getHandle);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::UserProfile);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::loginUserOnFileServer);
+
+} // namespace osl_Security
+
+/* This defines an own TestPlugIn implementation with an own initialize()
+ method that will be called after loading the PlugIn
+ */
+#include <cppunit/plugin/TestPlugInDefaultImpl.h>
+
+namespace {
+
+class MyTestPlugInImpl: public CPPUNIT_NS::TestPlugInDefaultImpl
+{
+ public:
+ MyTestPlugInImpl() {};
+ void initialize( CPPUNIT_NS::TestFactoryRegistry *registry,
+ const CPPUNIT_NS::PlugInParameters &parameters ) override;
+};
+
+}
+
+void MyTestPlugInImpl::initialize( CPPUNIT_NS::TestFactoryRegistry *,
+ const CPPUNIT_NS::PlugInParameters & )
+{
+ /// start message
+ t_print("#Initializing ...\n" );
+ t_print("#\n#logonUser function need root/Administrator account to test.\n" );
+ t_print("#You can test by login with root/Administrator, and execute:\n" );
+ t_print("#testshl2 -forward \"username password\" ../../../wntmsci9/bin/Security.dll\n" );
+ t_print("# where username and password are forwarded account info.\n" );
+ t_print("#if no text forwarded, this function will be skipped.\n" );
+
+ /// get system information
+#if ( defined UNX )
+ /// some initialization work for UNIX OS
+
+ struct passwd* pw;
+ CPPUNIT_ASSERT_MESSAGE( "getpwuid: no password entry\n",( pw = getpwuid( getuid() ) ) != nullptr );
+
+ /// get user ID;
+ strUserID = OUString::number( getuid( ) );
+
+ /// get user Name;
+ strUserName = OUString::createFromAscii( pw->pw_name );
+
+ /// get home directory;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.",
+ ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( OUString::createFromAscii( pw->pw_dir ), strHomeDirectory ) );
+
+ /// get config directory;
+ strConfigDirectory = strHomeDirectory.copy(0);
+
+ /// is administrator;
+ if( !getuid( ) )
+ isAdmin = true;
+
+#endif
+#if defined(_WIN32)
+ /// some initialization work for Windows OS
+
+ /// Get the user name, computer name, user home directory.
+ LPWSTR lpszSystemInfo; // pointer to system information string
+ DWORD cchBuff = BUFSIZE; // size of computer or user name
+ WCHAR wchBuffer[BUFSIZE]; // buffer for string
+
+ lpszSystemInfo = wchBuffer;
+ if( GetUserNameW(lpszSystemInfo, &cchBuff) )
+ strUserName = o3tl::toU(lpszSystemInfo);
+
+ cchBuff = BUFSIZE;
+ if( GetComputerNameW(lpszSystemInfo, &cchBuff) )
+ strComputerName = o3tl::toU(lpszSystemInfo);
+
+ /// Get user home directory.
+ HKEY hRegKey;
+ if (RegOpenKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", &hRegKey) == ERROR_SUCCESS)
+ {
+ sal_Unicode PathW[_MAX_PATH];
+ LSTATUS lRet;
+ DWORD lSize = sizeof(PathW);
+ DWORD Type;
+
+ lRet = RegQueryValueExW(hRegKey, L"AppData", nullptr, &Type, reinterpret_cast<unsigned char *>(PathW), &lSize);
+ if ( ( lRet == ERROR_SUCCESS ) && ( Type == REG_SZ ) && ( _waccess( o3tl::toW(PathW), 0 ) == 0 ) )
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.",
+ ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( OUString(PathW), strConfigDirectory ) );
+ }
+
+ lSize = sizeof(PathW);
+ lRet = RegQueryValueExW(hRegKey, L"Personal", nullptr, &Type, reinterpret_cast<unsigned char *>(PathW), &lSize);
+ if ( ( lRet == ERROR_SUCCESS ) && ( Type == REG_SZ ) && ( _waccess( o3tl::toW(PathW), 0 ) == 0 ) )
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.",
+ ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( OUString(PathW), strHomeDirectory ) );
+ }
+
+ RegCloseKey(hRegKey);
+ }
+
+ /// Get user Security ID:
+
+ // Create buffers that may be large enough. If a buffer is too small, the count parameter will be set to the size needed.
+ const DWORD INITIAL_SIZE = 32;
+ DWORD cbSid = 0;
+ DWORD dwSidBufferSize = INITIAL_SIZE;
+ DWORD cchDomainName = 0;
+ DWORD dwDomainBufferSize = INITIAL_SIZE;
+ WCHAR * wszDomainName = nullptr;
+ SID_NAME_USE eSidType;
+ DWORD dwErrorCode = 0;
+
+ OUString sLookupUserName = strUserName;
+ LPCWSTR wszAccName = o3tl::toW(sLookupUserName.getStr( ));
+
+ // Create buffers for the SID and the domain name.
+ PSID pSid = static_cast<PSID>(new BYTE[dwSidBufferSize]);
+ memset( pSid, 0, dwSidBufferSize);
+
+ wszDomainName = new WCHAR[dwDomainBufferSize];
+ memset(wszDomainName, 0, dwDomainBufferSize*sizeof(WCHAR));
+
+ // Obtain the SID for the account name passed.
+ for ( ; ; )
+ {
+ // Set the count variables to the buffer sizes and retrieve the SID.
+ cbSid = dwSidBufferSize;
+ cchDomainName = dwDomainBufferSize;
+ if (LookupAccountNameW(
+ nullptr, // Computer name. NULL for the local computer
+ wszAccName,
+ pSid, // Pointer to the SID buffer. Use NULL to get the size needed,
+ &cbSid, // Size of the SID buffer needed.
+ wszDomainName, // wszDomainName,
+ &cchDomainName,
+ &eSidType
+ ))
+ {
+ if (eSidType == SID_NAME_USE::SidTypeDomain)
+ {
+ // LookupAccountNameW returned SID of a domain; likely the hostname is the same as
+ // username (case-insensitive): something like "JOHNSMITH\JohnSmith", so looking up
+ // for "JohnSmith" without domain returns domain itself. Try getting the SID of the
+ // user using fully qualified name (the case of user of another domain having name
+ // identical this hostname is not handled).
+ sLookupUserName = OUString::Concat(o3tl::toU(wszDomainName)) + u"\\" + strUserName;
+ wszAccName = o3tl::toW(sLookupUserName.getStr());
+ continue;
+ }
+ if (IsValidSid( pSid) == FALSE)
+ wprintf(L"# The SID for %s is invalid.\n", wszAccName);
+ break;
+ }
+ dwErrorCode = GetLastError();
+
+ // Check if one of the buffers was too small.
+ if (dwErrorCode == ERROR_INSUFFICIENT_BUFFER)
+ {
+ if (cbSid > dwSidBufferSize)
+ {
+ // Reallocate memory for the SID buffer.
+ wprintf(L"# The SID buffer was too small. It will be reallocated.\n");
+ delete[] static_cast<BYTE*>(pSid);
+ pSid = static_cast<PSID>(new BYTE[cbSid]);
+ memset( pSid, 0, cbSid);
+ dwSidBufferSize = cbSid;
+ }
+ if (cchDomainName > dwDomainBufferSize)
+ {
+ // Reallocate memory for the domain name buffer.
+ wprintf(L"# The domain name buffer was too small. It will be reallocated.\n");
+ delete [] wszDomainName;
+ wszDomainName = new WCHAR[cchDomainName];
+ memset(wszDomainName, 0, cchDomainName*sizeof(WCHAR));
+ dwDomainBufferSize = cchDomainName;
+ }
+ }
+ else
+ {
+ wprintf(L"# LookupAccountNameW failed. GetLastError returned: %d\n", dwErrorCode);
+ break;
+ }
+ }
+
+ LPWSTR pSidStr = nullptr;
+ if (ConvertSidToStringSidW(pSid, &pSidStr))
+ {
+ strUserID = o3tl::toU(pSidStr);
+ LocalFree(pSidStr);
+ }
+ else
+ {
+ wprintf(L"# ConvertSidToStringSidW failed. GetLastError returned: %d\n", GetLastError());
+ }
+
+ delete [] static_cast<BYTE*>(pSid);
+ delete [] wszDomainName;
+
+ /// check if logged in user is administrator:
+
+ BOOL b;
+ SID_IDENTIFIER_AUTHORITY NtAuthority = { SECURITY_NT_AUTHORITY };
+ PSID AdministratorsGroup;
+ b = AllocateAndInitializeSid(
+ &NtAuthority,
+ 2,
+ SECURITY_BUILTIN_DOMAIN_RID,
+ DOMAIN_ALIAS_RID_ADMINS,
+ 0, 0, 0, 0, 0, 0,
+ &AdministratorsGroup);
+ if(b)
+ {
+ if (!CheckTokenMembership( nullptr, AdministratorsGroup, &b))
+ {
+ b = FALSE;
+ }
+ FreeSid(AdministratorsGroup);
+ }
+
+ isAdmin = b;
+
+#endif
+
+ /// print the information.
+ t_print("#\n#Retrieved system information is below:\n");
+
+ t_print("Computer Name: ");
+ if ( strComputerName.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strComputerName );
+
+ t_print("Current User Name: ");
+ if ( strUserName.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strUserName );
+
+ t_print("Current User Home Directory:");
+ if ( strHomeDirectory.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strHomeDirectory );
+
+ t_print("Current Config Directory: ");
+ if ( strConfigDirectory.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strConfigDirectory );
+
+ t_print("Current UserID: ");
+ if ( strUserID.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strUserID );
+
+ t_print("Current User is: ");
+ if ( !isAdmin )
+ t_print("NOT Administrator.\n" );
+ else
+ t_print("Administrator.\n" );
+
+ /// get and display forwarded text if available.
+ OUString args[ 3 ];
+ int argsCount = 0;
+ sal_uInt32 n = rtl_getAppCommandArgCount();
+ for (sal_uInt32 i = 0; i < n; ++i)
+ {
+ OUString arg;
+ rtl_getAppCommandArg(i, &arg.pData);
+ if( arg.startsWith("-") )
+ continue;
+ if( argsCount >= 3 )
+ {
+ SAL_WARN( "sal.osl", "Too many test arguments" );
+ continue;
+ }
+ args[ argsCount++ ] = arg;
+ }
+ /// only forwarded two parameters, username and password.
+ if( argsCount == 2 )
+ {
+ aLogonUser = args[ 0 ];
+ t_print("\n#Forwarded username: ");
+ printUString( aLogonUser);
+
+ aLogonPasswd = args[ 1 ];
+ t_print("#Forwarded password: ");
+ for (int i = 0; i < aLogonPasswd.getLength(); ++i)
+ t_print("*");
+ t_print("\n" );
+ }
+ else if( argsCount == 3 )
+ /// forwarded three parameters, username, password and fileserver.
+ {
+ aLogonUser = args[ 0 ];
+ t_print("#Forwarded username: ");
+ printUString( aLogonUser);
+
+ aLogonPasswd = args[ 1 ];
+ t_print("#Forwarded password: ");
+ for (int i = 0; i < aLogonPasswd.getLength(); ++i)
+ t_print("*");
+ t_print("\n" );
+
+ aFileServer = args[ 2 ];
+ t_print("#Forwarded FileServer: ");
+ printUString( aFileServer );
+ }
+ t_print("#\n#Initialization Done.\n" );
+
+}
+
+/* Instantiate and register the own TestPlugIn and instantiate the default
+ main() function.
+ (This is done by CPPUNIT_PLUGIN_IMPLEMENT() for TestPlugInDefaultImpl)
+ */
+
+CPPUNIT_PLUGIN_EXPORTED_FUNCTION_IMPL( MyTestPlugInImpl );
+CPPUNIT_PLUGIN_IMPLEMENT_MAIN();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/security/osl_Security_Const.h b/sal/qa/osl/security/osl_Security_Const.h
new file mode 100644
index 000000000..8329962a3
--- /dev/null
+++ b/sal/qa/osl/security/osl_Security_Const.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H
+#define INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H
+
+#if defined(_WIN32) // Windows
+#include <io.h>
+#endif
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/file.hxx>
+#include <osl/security.hxx>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#if (defined UNX)
+#include <unistd.h>
+#include <pwd.h>
+#endif
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <cppunit/plugin/TestPlugInDefaultImpl.h>
+
+#define t_print printf
+
+#define BUFSIZE 1024
+const char pTestString[17] = "Sun Microsystems";
+
+OUString aLogonUser, aLogonPasswd, aFileServer, aStringForward;
+OUString strUserName, strComputerName, strHomeDirectory;
+OUString strConfigDirectory, strUserID;
+
+bool isAdmin = false;
+
+#endif // INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/setthreadname/test-setthreadname.cxx b/sal/qa/osl/setthreadname/test-setthreadname.cxx
new file mode 100644
index 000000000..9af8793eb
--- /dev/null
+++ b/sal/qa/osl/setthreadname/test-setthreadname.cxx
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cstdlib>
+#include <iostream>
+#include <limits>
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <osl/thread.hxx>
+
+namespace {
+
+class TestThread: public osl::Thread {
+private:
+ virtual void SAL_CALL run() override;
+public:
+ TestThread() = default;
+ TestThread(const TestThread&) = delete;
+ TestThread& operator=(const TestThread&) = delete;
+};
+
+void TestThread::run() {
+#if defined(_WIN32)
+ if (std::getenv("URE_TEST_SETTHREADNAME") != nullptr) {
+ // On Windows, setting thread names appears to only take effect when the
+ // process is being debugged, so attach a debugger now:
+ std::cout << "set: ";
+ std::cin.ignore(std::numeric_limits< int >::max(), '\n');
+ }
+#endif
+ setName("TestThread");
+ if (std::getenv("URE_TEST_SETTHREADNAME") != nullptr) {
+ // On Linux, the thread name can now be observed with "ps -L"; on
+ // Windows, the thread name can now be observed in a debugger.
+ std::cout << "stop: ";
+ std::cin.ignore(std::numeric_limits< int >::max(), '\n');
+ }
+}
+
+class Test: public CppUnit::TestFixture {
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+
+ void test();
+};
+
+void Test::test() {
+ TestThread t;
+ t.create();
+ t.join();
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/socket.cxx b/sal/qa/osl/socket.cxx
new file mode 100644
index 000000000..ed31c9ede
--- /dev/null
+++ b/sal/qa/osl/socket.cxx
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <osl/socket.h>
+#include <rtl/ustring.hxx>
+
+namespace
+{
+class SocketTest : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE(SocketTest);
+ CPPUNIT_TEST(test_createInetSocketAddr);
+ CPPUNIT_TEST(test_createInetBroadcastAddr);
+ CPPUNIT_TEST_SUITE_END();
+
+ void test_createInetSocketAddr()
+ {
+ OUString const in("123.4.56.78");
+ auto const addr = osl_createInetSocketAddr(in.pData, 100);
+ CPPUNIT_ASSERT(addr != nullptr);
+ CPPUNIT_ASSERT_EQUAL(osl_Socket_FamilyInet, osl_getFamilyOfSocketAddr(addr));
+ OUString out;
+ auto const res = osl_getDottedInetAddrOfSocketAddr(addr, &out.pData);
+ CPPUNIT_ASSERT_EQUAL(osl_Socket_Ok, res);
+ CPPUNIT_ASSERT_EQUAL(in, out);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(100), osl_getInetPortOfSocketAddr(addr));
+ osl_destroySocketAddr(addr);
+ }
+
+ void test_createInetBroadcastAddr()
+ {
+ OUString const in("123.4.56.78");
+ auto const addr = osl_createInetBroadcastAddr(in.pData, 100);
+ CPPUNIT_ASSERT(addr != nullptr);
+ CPPUNIT_ASSERT_EQUAL(osl_Socket_FamilyInet, osl_getFamilyOfSocketAddr(addr));
+ OUString out;
+ auto const res = osl_getDottedInetAddrOfSocketAddr(addr, &out.pData);
+ CPPUNIT_ASSERT_EQUAL(osl_Socket_Ok, res);
+ CPPUNIT_ASSERT_EQUAL(OUString("123.255.255.255"), out);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(100), osl_getInetPortOfSocketAddr(addr));
+ osl_destroySocketAddr(addr);
+ }
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(SocketTest);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/qa/osl/thread/test_thread.cxx b/sal/qa/osl/thread/test_thread.cxx
new file mode 100644
index 000000000..12ddafc6d
--- /dev/null
+++ b/sal/qa/osl/thread/test_thread.cxx
@@ -0,0 +1,80 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include "osl/conditn.hxx"
+#include "osl/thread.hxx"
+#include "osl/time.h"
+#include <chrono>
+
+namespace {
+
+osl::Condition global;
+
+class Thread: public osl::Thread {
+public:
+ explicit Thread(osl::Condition & cond): m_cond(cond) {}
+
+private:
+ virtual void SAL_CALL run() {}
+
+ virtual void SAL_CALL onTerminated() {
+ m_cond.set();
+ CPPUNIT_ASSERT_EQUAL(osl::Condition::result_ok, global.wait());
+ }
+
+ osl::Condition & m_cond;
+};
+
+class Test: public CppUnit::TestFixture {
+public:
+ // Nondeterministic, best effort test that an osl::Thread can be destroyed
+ // (and in particular osl_destroyThread---indirectly---be called) before the
+ // corresponding thread has terminated:
+ void test() {
+ for (int i = 0; i < 50; ++i) {
+ osl::Condition c;
+ Thread t(c);
+ CPPUNIT_ASSERT(t.create());
+ // Make sure virtual Thread::run/onTerminated are called before
+ // Thread::~Thread:
+ CPPUNIT_ASSERT_EQUAL(osl::Condition::result_ok, c.wait());
+ }
+ // Make sure Thread::~Thread is called before each spawned thread
+ // terminates:
+ global.set();
+ // Give the spawned threads enough time to terminate:
+ osl::Thread::wait(std::chrono::seconds(20));
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/alloc/rtl_alloc.cxx b/sal/qa/rtl/alloc/rtl_alloc.cxx
new file mode 100644
index 000000000..419a3f3b0
--- /dev/null
+++ b/sal/qa/rtl/alloc/rtl_alloc.cxx
@@ -0,0 +1,211 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <rtl/alloc.h>
+#include <rtl/ustrbuf.hxx>
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include "../../../rtl/strimp.hxx"
+
+#include <memory.h>
+
+namespace rtl_alloc
+{
+
+ // small memory check routine, which return false, if there is a problem
+
+ static bool checkMemory(const char* _pMemory, sal_uInt32 _nSize, char _n)
+ {
+ bool bOk = true;
+
+ for (sal_uInt32 i=0;i<_nSize;i++)
+ {
+ if (_pMemory[i] != _n)
+ {
+ bOk = false;
+ }
+ }
+ return bOk;
+ }
+
+class Memory : public CppUnit::TestFixture
+{
+ // for normal alloc functions
+ char *m_pMemory;
+ static const sal_uInt32 m_nSizeOfMemory = 1024;
+
+public:
+ Memory()
+ : m_pMemory(nullptr)
+ {
+ }
+
+ // initialise your test code values here.
+ void setUp() override
+ {
+ m_pMemory = static_cast<char*>(rtl_allocateMemory( m_nSizeOfMemory ));
+ }
+
+ void tearDown() override
+ {
+ rtl_freeMemory(m_pMemory);
+ m_pMemory = nullptr;
+ }
+
+ void rtl_allocateMemory_001()
+ {
+ CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", m_pMemory != nullptr);
+ memset(m_pMemory, 1, m_nSizeOfMemory);
+ CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pMemory, m_nSizeOfMemory, 1));
+ }
+
+ void rtl_reallocateMemory_001()
+ {
+ sal_uInt32 nSize = 2 * 1024;
+ m_pMemory = static_cast<char*>(rtl_reallocateMemory(m_pMemory, nSize));
+
+ CPPUNIT_ASSERT_MESSAGE( "Can reallocate memory.", m_pMemory != nullptr);
+ memset(m_pMemory, 2, nSize);
+ CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pMemory, nSize, 2));
+ }
+
+ CPPUNIT_TEST_SUITE(Memory);
+ CPPUNIT_TEST(rtl_allocateMemory_001);
+ CPPUNIT_TEST(rtl_reallocateMemory_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class test
+
+class TestZeroMemory : public CppUnit::TestFixture
+{
+ // for zero functions
+ char *m_pZeroMemory;
+ static const sal_uInt32 m_nSizeOfZeroMemory = 50 * 1024 * 1024;
+
+public:
+ TestZeroMemory()
+ : m_pZeroMemory(nullptr)
+ {
+ }
+
+ // initialise your test code values here.
+ void setUp() override
+ {
+ m_pZeroMemory = static_cast<char*>(rtl_allocateZeroMemory( m_nSizeOfZeroMemory ));
+ }
+
+ void tearDown() override
+ {
+ rtl_freeZeroMemory(m_pZeroMemory, m_nSizeOfZeroMemory);
+ // LLA: no check possible, may GPF if there is something wrong.
+ // CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", pZeroMemory != NULL);
+ }
+
+ // insert your test code here.
+
+ void rtl_allocateZeroMemory_001()
+ {
+ CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", m_pZeroMemory != nullptr);
+ CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pZeroMemory, m_nSizeOfZeroMemory, 0));
+
+ memset(m_pZeroMemory, 3, m_nSizeOfZeroMemory);
+ CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pZeroMemory, m_nSizeOfZeroMemory, 3));
+ }
+
+ CPPUNIT_TEST_SUITE(TestZeroMemory);
+ CPPUNIT_TEST(rtl_allocateZeroMemory_001);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+class TestPreinit : public CppUnit::TestFixture
+{
+public:
+ TestPreinit()
+ {
+ }
+
+ // initialise your test code values here.
+ void setUp() override
+ {
+ }
+
+ void tearDown() override
+ {
+ }
+
+ // insert your test code here.
+
+ void test()
+ {
+ const char sample[] = "Hello World";
+ std::vector<OUString> aStrings;
+
+ rtl_alloc_preInit(true);
+
+ OUString aFoo("foo");
+
+ // fill some cache bits
+ for (int iter = 0; iter < 4; iter++)
+ {
+ for (int i = 1; i < 4096; i += 8)
+ {
+ OUStringBuffer aBuf(i);
+ aBuf.appendAscii(sample, (i/8) % (SAL_N_ELEMENTS(sample)-1));
+ OUString aStr = aBuf.makeStringAndClear();
+ aStrings.push_back(aStr);
+ }
+ // free some pieces to make holes
+ for (size_t i = iter; i < aStrings.size(); i += 17)
+ aStrings[i] = aFoo;
+ }
+
+ for (size_t i = 0; i < aStrings.size(); ++i)
+ {
+ CPPUNIT_ASSERT_MESSAGE( "not static before.", !(aStrings[i].pData->refCount & SAL_STRING_STATIC_FLAG) );
+ }
+
+ // should static-ize all the strings.
+ rtl_alloc_preInit(false);
+
+ for (size_t i = 0; i < aStrings.size(); ++i)
+ CPPUNIT_ASSERT_MESSAGE( "static after.", (aStrings[i].pData->refCount & SAL_STRING_STATIC_FLAG) );
+ }
+
+ void test2()
+ {
+ // should never happen but lets try it again.
+ test();
+ }
+
+ CPPUNIT_TEST_SUITE(TestPreinit);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST(test2);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::Memory);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::TestZeroMemory);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::TestPreinit);
+} // namespace rtl_alloc
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/bootstrap/expand.cxx b/sal/qa/rtl/bootstrap/expand.cxx
new file mode 100644
index 000000000..e9799c15f
--- /dev/null
+++ b/sal/qa/rtl/bootstrap/expand.cxx
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <rtl/bootstrap.hxx>
+#include <rtl/ustring.hxx>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+public:
+ virtual void setUp() override;
+
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testDollar);
+ CPPUNIT_TEST(testIndirectDollar);
+ CPPUNIT_TEST_SUITE_END();
+
+ void testDollar();
+
+ void testIndirectDollar();
+};
+
+void Test::setUp() {
+ rtl::Bootstrap::set("TEST", "<expanded TEST>");
+ rtl::Bootstrap::set("WITH_DOLLAR", "foo\\$TEST");
+ rtl::Bootstrap::set("INDIRECT", "$WITH_DOLLAR");
+}
+
+void Test::testDollar() {
+ OUString s("$WITH_DOLLAR");
+ rtl::Bootstrap::expandMacros(s);
+ CPPUNIT_ASSERT_EQUAL(OUString("foo$TEST"), s);
+}
+
+void Test::testIndirectDollar() {
+ OUString s("$INDIRECT");
+ rtl::Bootstrap::expandMacros(s);
+ CPPUNIT_ASSERT_EQUAL(OUString("foo$TEST"), s);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/cipher/rtl_cipher.cxx b/sal/qa/rtl/cipher/rtl_cipher.cxx
new file mode 100644
index 000000000..1f6852184
--- /dev/null
+++ b/sal/qa/rtl/cipher/rtl_cipher.cxx
@@ -0,0 +1,600 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cstring>
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/cipher.h>
+
+namespace rtl_cipher
+{
+
+class create : public CppUnit::TestFixture
+{
+public:
+
+ void create_001()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void create_002()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeECB);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+ void create_003()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void create_004()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeCBC);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+ void create_005()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeStream);
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+ }
+ void create_006()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeStream);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+ void create_007()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeInvalid);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+ void create_008()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeInvalid);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(create);
+ CPPUNIT_TEST(create_001);
+ CPPUNIT_TEST(create_002);
+ CPPUNIT_TEST(create_003);
+ CPPUNIT_TEST(create_004);
+ CPPUNIT_TEST(create_005);
+ CPPUNIT_TEST(create_006);
+ CPPUNIT_TEST(create_007);
+ CPPUNIT_TEST(create_008);
+ CPPUNIT_TEST_SUITE_END();
+}; // class create
+
+class createBF : public CppUnit::TestFixture
+{
+public:
+
+ void createBF_001()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void createBF_002()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeCBC);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void createBF_003()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeStream);
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+ }
+ void createBF_004()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeInvalid);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ // rtl_cipher_destroy(aCipher);
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(createBF);
+ CPPUNIT_TEST(createBF_001);
+ CPPUNIT_TEST(createBF_002);
+ CPPUNIT_TEST(createBF_003);
+ CPPUNIT_TEST(createBF_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class createBF
+
+class decode : public CppUnit::TestFixture
+{
+public:
+
+ void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, OString const& _sPlainTextStr)
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+ (void) _nKeyValue;
+ (void) _nArgValue;
+ (void) _sPlainTextStr;
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = _nKeyValue;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = _nArgValue;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nPlainTextLen = 16;
+ sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ];
+ memset(pPlainTextBuffer, 0, nPlainTextLen);
+ strncpy(reinterpret_cast<char*>(pPlainTextBuffer), _sPlainTextStr.getStr(), 16);
+
+ sal_uInt32 nCipherLen = 16;
+ sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ];
+ memset(pCipherBuffer, 0, nCipherLen);
+
+ /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nPlainText2Len = 16;
+ sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ];
+ memset(pPlainText2Buffer, 0, nPlainText2Len);
+
+ /* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len);
+ CPPUNIT_ASSERT_MESSAGE("decode should not work", aError != rtl_Cipher_E_None);
+
+ delete [] pPlainText2Buffer;
+
+ delete [] pCipherBuffer;
+ delete [] pPlainTextBuffer;
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+
+ void test_encode_and_decode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, OString const& _sPlainTextStr)
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+ (void) _nKeyValue;
+ (void) _nArgValue;
+ (void) _sPlainTextStr;
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = _nKeyValue;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = _nArgValue;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionBoth, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nPlainTextLen = 16;
+ sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ];
+ memset(pPlainTextBuffer, 0, nPlainTextLen);
+ strncpy(reinterpret_cast<char*>(pPlainTextBuffer), _sPlainTextStr.getStr(), 16);
+
+ sal_uInt32 nCipherLen = 16;
+ sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ];
+ memset(pCipherBuffer, 0, nCipherLen);
+
+ /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nPlainText2Len = 16;
+ sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ];
+ memset(pPlainText2Buffer, 0, nPlainText2Len);
+
+ /* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong decode", rtl_Cipher_E_None, aError);
+
+ sal_Int32 nCompare = memcmp(pPlainTextBuffer, pPlainText2Buffer, 16);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare between plain and decoded plain failed", static_cast<sal_Int32>(0), nCompare);
+
+ delete [] pPlainText2Buffer;
+
+ delete [] pCipherBuffer;
+ delete [] pPlainTextBuffer;
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+
+ void decode_001()
+ {
+ test_encode_and_decode(0,0,"");
+ test_encode_and_decode(0,0,"hallo");
+ test_encode_and_decode(1,0,"B2Aahg5B");
+ test_encode_and_decode(1,2,"Longer text string");
+ }
+
+ void decode_002()
+ {
+ test_encode(0,0,"");
+ test_encode(0,0,"hallo");
+ test_encode(1,0,"B2Aahg5B");
+ test_encode(1,2,"Longer text string");
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(decode);
+ CPPUNIT_TEST(decode_001);
+ CPPUNIT_TEST(decode_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class decode
+
+class decodeBF : public CppUnit::TestFixture
+{
+public:
+
+ void decodeBF_001()
+ {
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(decodeBF);
+ CPPUNIT_TEST(decodeBF_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class decodeBF
+
+class destroy : public CppUnit::TestFixture
+{
+public:
+
+ void destroy_001()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(destroy);
+ CPPUNIT_TEST(destroy_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class destroy
+
+class destroyBF : public CppUnit::TestFixture
+{
+public:
+
+ void destroyBF_001()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroyBF(aCipher);
+ // more proforma
+ // should not GPF
+#endif
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(destroyBF);
+ CPPUNIT_TEST(destroyBF_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class destroyBF
+
+class encode : public CppUnit::TestFixture
+{
+public:
+
+ void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, sal_uInt8 _nDataValue)
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+ (void) _nKeyValue;
+ (void) _nArgValue;
+ (void) _nDataValue;
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = _nKeyValue;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = _nArgValue;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nDataLen = 16;
+ sal_uInt8 *pDataBuffer = new sal_uInt8[ nDataLen ];
+ memset(pDataBuffer, 0, nDataLen);
+ pDataBuffer[0] = _nDataValue;
+
+ sal_uInt32 nLen = 16;
+ sal_uInt8 *pBuffer = new sal_uInt8[ nLen ];
+ memset(pBuffer, 0, nLen);
+
+ /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pDataBuffer, nDataLen, pBuffer, nLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError);
+
+ delete [] pBuffer;
+ delete [] pDataBuffer;
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+
+ void encode_001()
+ {
+ test_encode(0,0,0);
+ test_encode(1,0,0);
+ test_encode(0,1,0);
+ test_encode(1,1,0);
+
+ test_encode(0,0,1);
+ test_encode(1,0,1);
+ test_encode(0,1,1);
+ test_encode(1,1,1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(encode);
+ CPPUNIT_TEST(encode_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class encode
+
+class encodeBF : public CppUnit::TestFixture
+{
+public:
+
+ void encodeBF_001()
+ {
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(encodeBF);
+ CPPUNIT_TEST(encodeBF_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class encodeBF
+
+class init : public CppUnit::TestFixture
+{
+public:
+
+ void init_001()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+
+ void init_002()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = 1;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void init_003()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = 1;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void init_004()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = 1;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = 1;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(init);
+ CPPUNIT_TEST(init_001);
+ CPPUNIT_TEST(init_002);
+ CPPUNIT_TEST(init_003);
+ CPPUNIT_TEST(init_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class init
+
+class initBF : public CppUnit::TestFixture
+{
+public:
+
+ void initBF_001()
+ {
+ // seems to be the same as init, so empty
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(initBF);
+ CPPUNIT_TEST(initBF_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class initBF
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::create);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::createBF);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::decode);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::decodeBF);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::destroy);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::destroyBF);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::encode);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::encodeBF);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::init);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::initBF);
+
+} // namespace rtl_cipher
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/crc32/rtl_crc32.cxx b/sal/qa/rtl/crc32/rtl_crc32.cxx
new file mode 100644
index 000000000..00933b589
--- /dev/null
+++ b/sal/qa/rtl/crc32/rtl_crc32.cxx
@@ -0,0 +1,154 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/crc.h>
+
+namespace rtl_CRC32
+{
+
+class test : public CppUnit::TestFixture
+{
+public:
+
+ // insert your test code here.
+ void rtl_crc32_001()
+ {
+ // this is demonstration code
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+
+ sal_uInt32 nCRC = 0;
+
+ char buf[] = {0};
+ int num = 0;
+
+ nCRC = rtl_crc32(nCRC, buf, num);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("empty crc buffer", static_cast<sal_uInt32>(0), nCRC);
+ }
+
+ void rtl_crc32_002()
+ {
+ sal_uInt32 nCRC = 0;
+
+ char buf[] = {0,0};
+ int num = sizeof(buf);
+
+ nCRC = rtl_crc32(nCRC, buf, num);
+
+ CPPUNIT_ASSERT_MESSAGE("buffer contain 2 empty bytes, crc is zero", nCRC != 0);
+ }
+
+ void rtl_crc32_002_1()
+ {
+ sal_uInt32 nCRC = 0;
+
+ char buf[] = {0,0,0};
+ int num = sizeof(buf);
+
+ nCRC = rtl_crc32(nCRC, buf, num);
+
+ CPPUNIT_ASSERT_MESSAGE("buffer contain 3 empty bytes, crc is zero", nCRC != 0);
+ }
+
+ /**
+ * crc32 check:
+ * Build checksum on two buffers with same size but different content,
+ * the result (crc32 checksum) must differ
+ */
+
+ void rtl_crc32_003()
+ {
+ sal_uInt32 nCRC1 = 0;
+ char buf1[] = {2};
+ int num1 = sizeof(buf1);
+
+ nCRC1 = rtl_crc32(nCRC1, buf1, num1);
+
+ sal_uInt32 nCRC2 = 0;
+ char buf2[] = {3};
+ int num2 = sizeof(buf2);
+
+ nCRC2 = rtl_crc32(nCRC2, buf2, num2);
+
+ CPPUNIT_ASSERT_MESSAGE("checksum should differ for buf1 and buf2", nCRC1 != nCRC2);
+ }
+
+ /** check if the crc32 only use as much values, as given
+ *
+ */
+ void rtl_crc32_003_1()
+ {
+ sal_uInt32 nCRC1 = 0;
+ char buf1[] = {2,1};
+ int num1 = sizeof(buf1) - 1;
+
+ nCRC1 = rtl_crc32(nCRC1, buf1, num1);
+
+ sal_uInt32 nCRC2 = 0;
+ char buf2[] = {2,2};
+ int num2 = sizeof(buf2) - 1;
+
+ nCRC2 = rtl_crc32(nCRC2, buf2, num2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("checksum leave it's bounds", nCRC2, nCRC1);
+ }
+
+ /** check if the crc32 differ at same content in reverse order
+ *
+ */
+ void rtl_crc32_003_2()
+ {
+ sal_uInt32 nCRC1 = 0;
+ char buf1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
+ int num1 = sizeof(buf1);
+
+ nCRC1 = rtl_crc32(nCRC1, buf1, num1);
+
+ sal_uInt32 nCRC2 = 0;
+ char buf2[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
+ int num2 = sizeof(buf2);
+
+ nCRC2 = rtl_crc32(nCRC2, buf2, num2);
+
+ CPPUNIT_ASSERT_MESSAGE("checksum should differ", nCRC1 != nCRC2);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(test);
+ CPPUNIT_TEST(rtl_crc32_001);
+ CPPUNIT_TEST(rtl_crc32_002);
+ CPPUNIT_TEST(rtl_crc32_002_1);
+ CPPUNIT_TEST(rtl_crc32_003);
+ CPPUNIT_TEST(rtl_crc32_003_1);
+ CPPUNIT_TEST(rtl_crc32_003_2);
+ CPPUNIT_TEST_SUITE_END();
+}; // class test
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_CRC32::test);
+} // namespace rtl_CRC32
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/digest/rtl_digest.cxx b/sal/qa/rtl/digest/rtl_digest.cxx
new file mode 100644
index 000000000..4bf0512a0
--- /dev/null
+++ b/sal/qa/rtl/digest/rtl_digest.cxx
@@ -0,0 +1,515 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <memory>
+#include <string_view>
+
+#include <rtl/digest.h>
+#include <rtl/string.h>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/strbuf.hxx>
+
+#include <string.h>
+
+using namespace rtl;
+
+namespace
+{
+
+constexpr OStringLiteral sSampleString ("This is a sample sentence, which we use to check some crypto functions in sal.");
+constexpr OStringLiteral sSampleString_only_one_diff ("This is a sample sentence. which we use to check some crypto functions in sal.");
+
+const rtlDigestAlgorithm constDigestAlgorithms[] =
+{
+ rtl_Digest_AlgorithmMD2,
+ rtl_Digest_AlgorithmMD5,
+ rtl_Digest_AlgorithmSHA,
+ rtl_Digest_AlgorithmSHA1,
+ rtl_Digest_AlgorithmHMAC_MD5,
+ rtl_Digest_AlgorithmHMAC_SHA1,
+};
+
+const sal_uInt32 constDigestAlgorithmLengths[] =
+{
+ RTL_DIGEST_LENGTH_MD2,
+ RTL_DIGEST_LENGTH_MD5,
+ RTL_DIGEST_LENGTH_SHA,
+ RTL_DIGEST_LENGTH_SHA1,
+ RTL_DIGEST_LENGTH_HMAC_MD5,
+ RTL_DIGEST_LENGTH_HMAC_SHA1,
+};
+
+const std::string_view constSampleStringSums[] =
+{
+ std::string_view("647ee6c9d4aa5fdd374ed9d7a156acbf"),
+ std::string_view("b16b903e6fc0b62ae389013ed93fe531"),
+ std::string_view("eab2814429b2613301c8a077b806af3680548914"),
+ std::string_view("2bc5bdb7506a2cdc2fd27fc8b9889343012d5008"),
+ std::string_view("0b1b0e1a6f2e4420326354b031063605"),
+ std::string_view("1998c6a556915be76451bfb587fa7c34d849936e")
+};
+
+// Create hex-value string from the digest value to keep the string size minimal
+OString createHex(const sal_uInt8* pKeyBuffer, sal_uInt32 nKeyLen)
+{
+ OStringBuffer aBuffer(nKeyLen * 2 + 1);
+ for (sal_uInt32 i = 0; i < nKeyLen; ++i)
+ {
+ sal_Int32 nValue = static_cast<sal_Int32>(pKeyBuffer[i]);
+ if (nValue < 16)
+ aBuffer.append('0');
+ aBuffer.append(nValue, 16);
+ }
+ return aBuffer.makeStringAndClear();
+}
+
+OString getDigest(const OString& aMessage, rtlDigestAlgorithm aAlgorithm)
+{
+ rtlDigest handle = rtl_digest_create(aAlgorithm);
+
+ const sal_uInt8* pData = reinterpret_cast<const sal_uInt8*>(aMessage.getStr());
+ sal_uInt32 nSize = aMessage.getLength();
+
+ rtl_digest_init(handle, pData, nSize);
+ rtl_digest_update(handle, pData, nSize);
+
+ sal_uInt32 nKeyLen = rtl_digest_queryLength(handle);
+ std::unique_ptr<sal_uInt8[]> pKeyBuffer(new sal_uInt8[nKeyLen]);
+
+ rtl_digest_get(handle, pKeyBuffer.get(), nKeyLen);
+ OString aSum = createHex(pKeyBuffer.get(), nKeyLen);
+
+ rtl_digest_destroy( handle );
+ return aSum;
+}
+
+class DigestTest : public CppUnit::TestFixture
+{
+public:
+ void testCreate()
+ {
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ rtlDigest handle = rtl_digest_create( constDigestAlgorithms[i] );
+ CPPUNIT_ASSERT_MESSAGE("create digest", handle != nullptr);
+ rtl_digest_destroy( handle );
+ }
+
+ rtlDigest handle = rtl_digest_create( rtl_Digest_AlgorithmInvalid );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create invalid digest", static_cast<rtlDigest>(nullptr), handle);
+ rtl_digest_destroy( handle );
+ }
+
+ void testQuery()
+ {
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ rtlDigest handle = rtl_digest_create(constDigestAlgorithms[i]);
+ rtlDigestAlgorithm aAlgo = rtl_digest_queryAlgorithm(handle);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("query handle", aAlgo, constDigestAlgorithms[i]);
+ rtl_digest_destroy( handle );
+ }
+
+ }
+
+ void testQueryLength()
+ {
+ rtlDigest handle;
+ sal_uInt32 nAlgoLength;
+
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ handle = rtl_digest_create(constDigestAlgorithms[i]);
+ nAlgoLength = rtl_digest_queryLength(handle);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("query Length", nAlgoLength, constDigestAlgorithmLengths[i]);
+ rtl_digest_destroy( handle );
+ }
+
+ handle = rtl_digest_create( rtl_Digest_AlgorithmInvalid );
+ nAlgoLength = rtl_digest_queryLength(handle);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("query length", static_cast<sal_uInt32>(0), nAlgoLength);
+ rtl_digest_destroy( handle );
+ }
+
+ void testInit()
+ {
+ rtlDigestError aError;
+ rtlDigest handle;
+
+ handle = nullptr;
+ aError = rtl_digest_init(handle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("init(NULL, 0, 0)", rtl_Digest_E_Argument, aError);
+
+ handle = rtl_digest_create( rtl_Digest_AlgorithmMD5 );
+ aError = rtl_digest_init(handle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("init(handle, 0, 0)", rtl_Digest_E_None, aError);
+ rtl_digest_destroy( handle );
+
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ handle = rtl_digest_create(constDigestAlgorithms[i]);
+
+ OString aMessage = sSampleString;
+ const sal_uInt8* pData = reinterpret_cast<const sal_uInt8*>(aMessage.getStr());
+ sal_uInt32 nSize = aMessage.getLength();
+
+ aError = rtl_digest_init(handle, pData, nSize);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("init(handle, pData, nSize)", rtl_Digest_E_None, aError);
+
+ rtl_digest_update(handle, pData, nSize);
+
+ sal_uInt32 nKeyLen = rtl_digest_queryLength( handle );
+ std::unique_ptr<sal_uInt8[]> pKeyBuffer(new sal_uInt8[nKeyLen]);
+
+ rtl_digest_get( handle, pKeyBuffer.get(), nKeyLen );
+ createHex(pKeyBuffer.get(), nKeyLen);
+
+ rtl_digest_destroy( handle );
+ }
+ }
+
+ void testEqual()
+ {
+ {
+ OString aSum1 = getDigest(sSampleString, rtl_Digest_AlgorithmMD5);
+ OString aSum2 = getDigest(sSampleString, rtl_Digest_AlgorithmMD5);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "md5sum must have a length", sal_Int32(32), aSum1.getLength() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "md5sum must have a length", sal_Int32(32), aSum2.getLength() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("source is the same, dest must be also the same", aSum1, aSum2);
+ }
+
+ {
+ OString aSum1 = getDigest(sSampleString, rtl_Digest_AlgorithmMD5);
+ OString aSum2 = getDigest(sSampleString_only_one_diff, rtl_Digest_AlgorithmMD5);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "md5sum must have a length", sal_Int32(32), aSum1.getLength() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "md5sum must have a length", sal_Int32(32), aSum2.getLength() );
+ CPPUNIT_ASSERT_MESSAGE("differ only in one char", aSum1 != aSum2);
+ }
+ }
+
+ void testCheckSum()
+ {
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ OString aSum = getDigest(sSampleString, constDigestAlgorithms[i]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Checksum of sample string is wrong.", OString(constSampleStringSums[i]), aSum);
+ }
+ }
+
+ OString runCheckPBKDF2(OString& sPassword, bool bClearSalt, sal_uInt32 nCount)
+ {
+ sal_uInt32 nKeyLen = RTL_DIGEST_LENGTH_HMAC_SHA1;
+ std::unique_ptr<sal_uInt8[]> pKeyBuffer(new sal_uInt8[nKeyLen]);
+
+ memset(pKeyBuffer.get(), 0, nKeyLen);
+
+ sal_uInt8 const * pPassword = reinterpret_cast<sal_uInt8 const *>(sPassword.getStr());
+ sal_Int32 nPasswordLen = sPassword.getLength();
+
+ sal_uInt32 nSaltDataLen = RTL_DIGEST_LENGTH_HMAC_SHA1;
+ std::unique_ptr<sal_uInt8[]> pSaltData(new sal_uInt8[nSaltDataLen]);
+ memset(pSaltData.get(), 0, nSaltDataLen);
+
+ if (!bClearSalt)
+ {
+ // wilful contamination
+ pSaltData[0] = 1;
+ }
+
+ rtlDigestError aError = rtl_digest_PBKDF2(pKeyBuffer.get(), nKeyLen, pPassword, nPasswordLen, pSaltData.get(), nSaltDataLen, nCount);
+
+ CPPUNIT_ASSERT_EQUAL(rtl_Digest_E_None, aError);
+
+ OString aKey = createHex(pKeyBuffer.get(), nKeyLen);
+
+ // OString sSalt = createHex(pSaltData, nSaltDataLen);
+ // printf("Salt: %s\n", sSalt.getStr());
+
+ // CPPUNIT_ASSERT_MESSAGE("md5sum of sample string is wrong. Code changes or sample problems, please check.", aStr.equals(sSampleString_PBKDF2) );
+ return aKey;
+ }
+
+ void testPBKDF2()
+ {
+ OString aPassword = "Password";
+
+ // all permutations
+ runCheckPBKDF2(aPassword, false, 1);
+ runCheckPBKDF2(aPassword, false, 2);
+ runCheckPBKDF2(aPassword, true, 1);
+ runCheckPBKDF2(aPassword, true, 2);
+ runCheckPBKDF2(aPassword, false, 3);
+ runCheckPBKDF2(aPassword, false, 4);
+ runCheckPBKDF2(aPassword, true, 3);
+ runCheckPBKDF2(aPassword, true, 4);
+ }
+
+ void testUpdate()
+ {
+ rtlDigestError aError;
+ rtlDigest aHandle;
+
+ aHandle = nullptr;
+ aError = rtl_digest_update(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ aHandle = nullptr;
+ aError = rtl_digest_updateMD2(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_updateMD5(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ aHandle = rtl_digest_create( rtl_Digest_AlgorithmMD2 );
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr);
+
+ const sal_uInt8* pData = reinterpret_cast<const sal_uInt8*>(sSampleString.getStr());
+ sal_uInt32 nSize = sSampleString.getLength();
+
+ aError = rtl_digest_updateMD2(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_updateMD2(aHandle, pData, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_None, aError);
+
+ rtl_digest_destroyMD2(aHandle);
+
+ // use wrong Algorithm!!! This is volitional!
+ aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD2);
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr);
+
+ aError = rtl_digest_updateMD5(aHandle, pData, nSize);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'handle' wrong", rtl_Digest_E_Algorithm, aError);
+
+ rtl_digest_destroyMD5(aHandle);
+
+ aHandle = rtl_digest_create( rtl_Digest_AlgorithmMD5 );
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD5", aHandle != nullptr);
+
+ aError = rtl_digest_updateMD5(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_updateMD5(aHandle, pData, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_None, aError);
+
+ rtl_digest_destroyMD5(aHandle);
+ }
+
+ void testGet()
+ {
+ rtlDigest aHandle;
+ rtlDigestError aError;
+
+ aHandle = nullptr;
+ aError = rtl_digest_get(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ aHandle = nullptr;
+ aError = rtl_digest_getMD5(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ // test with wrong algorithm
+ aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD2);
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr);
+
+ sal_uInt32 nKeyLen = rtl_digest_queryLength(aHandle);
+ std::unique_ptr<sal_uInt8[]> pKeyBuffer(new sal_uInt8[nKeyLen]);
+
+ aError = rtl_digest_getMD5(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle 2. parameter wrong", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_getMD5(aHandle, pKeyBuffer.get(), 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'handle' wrong", rtl_Digest_E_Algorithm, aError);
+
+ rtl_digest_destroyMD2(aHandle);
+
+ aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD5);
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD5", aHandle != nullptr);
+
+ aError = rtl_digest_getMD5(aHandle, nullptr, nKeyLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_getMD5(aHandle, pKeyBuffer.get(), 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_BufferSize, aError);
+
+ rtl_digest_destroyMD5(aHandle);
+ }
+
+ void testSHA1SumForBiggerInputData()
+ {
+ // The test data was extracted from oox encrypted document (salt + password).
+ // First case: 16 bytes salt + 34 bytes password (12345678901234567)
+ // Second case: 16 bytes salt + 36 bytes password (123456789012345678)
+ {
+ const unsigned char aData[] = {
+ 0x37, 0x5f, 0x47, 0x7a, 0xd2, 0x13, 0xbe, 0xd2, 0x3c, 0x23, 0x33, 0x39,
+ 0x68, 0x21, 0x03, 0x6d, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00,
+ 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x30, 0x00,
+ 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00,
+ 0x37, 0x00
+ };
+
+ std::unique_ptr<sal_uInt8[]> pResult(new sal_uInt8[RTL_DIGEST_LENGTH_SHA1]);
+
+ rtl_digest_SHA1(aData, sizeof(aData), pResult.get(), RTL_DIGEST_LENGTH_SHA1);
+
+ OString sKey = createHex(pResult.get(), RTL_DIGEST_LENGTH_SHA1);
+
+ CPPUNIT_ASSERT_EQUAL(OString("06f460d693aecdd3b5cbe8365408eccfc570f32a"), sKey);
+ }
+
+ // tdf#114939, verify that rtl_digest_SHA1 computes broken results for certain input (which
+ // is not fixed for compatibility reasons):
+ {
+ sal_uInt8 result[RTL_DIGEST_LENGTH_SHA1];
+ rtl_digest_SHA1(
+ RTL_CONSTASCII_STRINGPARAM("1012345678901234567890123456789012345678901234567890"),
+ result, RTL_DIGEST_LENGTH_SHA1);
+ // Rather than correct "9cb1dab34448c1ea460da1f8736869c8852f212f":
+ CPPUNIT_ASSERT_EQUAL(
+ OString("90a461ee9cc69cedaeb25c2dc5cc62544ebd5241"),
+ createHex(result, RTL_DIGEST_LENGTH_SHA1));
+ }
+ }
+
+ void testMD5()
+ {
+ unsigned char const data[] = {
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ };
+ OString const expected[] = {
+ "d41d8cd98f00b204e9800998ecf8427e",
+ "cfcd208495d565ef66e7dff9f98764da",
+ "b4b147bc522828731f1a016bfa72c073",
+ "c6f057b86584942e415435ffb1fa93d4",
+ "4a7d1ed414474e4033ac29ccb8653d9b",
+ "dcddb75469b4b4875094e14561e573d8",
+ "670b14728ad9902aecba32e22fa4f6bd",
+ "29c3eea3f305d6b823f562ac4be35217",
+ "dd4b21e9ef71e1291183a46b913ae6f2",
+ "4c93008615c2d041e33ebac605d14b5b",
+ "f1b708bba17f1ce948dc979f4d7092bc",
+ "645a8aca5a5b84527c57ee2f153f1946",
+ "35b9ab5a36f3234dd26db357fd4a0dc1",
+ "4aad0d9ff11812ebdd5e376fdbef6222",
+ "c47532bbb1e2883c902071591ae1ec9b",
+ "5284047f4ffb4e04824a2fd1d1f0cd62",
+ "1e4a1b03d1b6cd8a174a826f76e009f4",
+ "0e7b9f29a828b6f953b482fc299e536b",
+ "3ea032bf79e8c116b05f4698d5a8e044",
+ "15f47c8a3e5e9685307dd65a653b8dc0",
+ "cc545187d0745132de1e9941db0ef6ce",
+ "0585e303e79acd837c3a3e2a2bec8b18",
+ "b28ccfdee4b9f39ba18b58a4f61a03d1",
+ "d018229b1183c926c10ea688350afec8",
+ "660719b4a7591769583a7c8d20c6dfa4",
+ "1e2432adacf481836265fcc62ee8f3e3",
+ "6e88e2af74c1d9d7d7d652b90d03751e",
+ "780ca685003cec1d617beaa6f346e1be",
+ "7f2e1dcfd6e2a3f5c38f31e640136ff6",
+ "1a3dee46117aeb8010cf365b8653faa8",
+ "1d0064395af3c745f6c3194e92373d7a",
+ "b52582043219f2deb2d3c9cb05d6448a",
+ "cd9e459ea708a948d5c2f5a6ca8838cf",
+ "00de800ecd7a4fb2813986c987e46d51",
+ "15336d4b38561a82bd24c9398b781aed",
+ "5fe699d3c461ab5a795505f59d5adf15",
+ "c5e0eb03cbb4bea95ce3f8f48fca77d5",
+ "355c1410373ef02fff2b03844d72c7d4",
+ "02df97da8207de2b3afa69c151ca8958",
+ "82c66dbf3e73f87ffc9564b2098d6a4f",
+ "b373e3ddc3438d7c10c76f3ad9d4c401",
+ "fac901a4a3dbc4461541731a33a31d15",
+ "f573e011b414bf3f9dd284f7dad29592",
+ "11694570cc5dda099669f2ba3660a70d",
+ "60997cc8aef7fedd9995e6b3ca89ce26",
+ "63c5fcf83c2275fe64e880dd8dfc5cd6",
+ "c7a0a100057ebbfc63ee169562026aea",
+ "42c2dec247919384edece38033458627",
+ "b505acf9fc996902b0c547a2abfc62b2",
+ "2fa7a1321d6b5fa0e04ad46785f574f3",
+ "86d2bfc0bab44eecf21e1432be7b3efc",
+ "7ca318f12a0955a3e637dc5645a2f96e",
+ "3eda02765b8fb8bb9b20c735f4537827",
+ "26dead12262c9a5c115b01e0a3c805b6",
+ "978b0444e93c5f7d714575f28a77dca1",
+ "d7fe636bd28e2ee2ba4d6c5898318699",
+ "ce992c2ad906967c63c3f9ab0c2294a9",
+ "1f3b814e9d417e9fd8750299982feb1f",
+ "1a2f42174eaa78ce6a67d75e98a59cb6",
+ "17c772c45c9a09f6e56b7228ddd161a7",
+ "5b19445b70b493c78f3bc06eb7962315",
+ "e590c24cc612bdedd522dfe23bb29b42",
+ "4d78c699a0167bc0cfce8a5c5a715c0e",
+ "5703db92acb9d45e3975822c9206453f",
+ "10eab6008d5642cf42abd2aa41f847cb",
+ };
+ rtlDigest digest = rtl_digest_createMD5();
+ for (size_t i = 0; i < sizeof(data); ++i)
+ {
+ rtl_digest_updateMD5(digest, &data, i);
+ sal_uInt8 buf[RTL_DIGEST_LENGTH_MD5];
+ rtl_digest_getMD5(digest, &buf[0], sizeof(buf));
+ OString const sResult = createHex(&buf[0], sizeof(buf));
+ CPPUNIT_ASSERT_EQUAL(expected[i], sResult);
+ }
+ rtl_digest_destroyMD5(digest);
+ }
+
+ CPPUNIT_TEST_SUITE(DigestTest);
+ CPPUNIT_TEST(testCreate);
+ CPPUNIT_TEST(testQuery);
+ CPPUNIT_TEST(testQueryLength);
+ CPPUNIT_TEST(testInit);
+ CPPUNIT_TEST(testEqual);
+ CPPUNIT_TEST(testCheckSum);
+ CPPUNIT_TEST(testPBKDF2);
+ CPPUNIT_TEST(testUpdate);
+ CPPUNIT_TEST(testGet);
+ CPPUNIT_TEST(testSHA1SumForBiggerInputData);
+ CPPUNIT_TEST(testMD5);
+
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(DigestTest);
+
+} // namespace rtl_digest
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/doublelock/rtl_doublelocking.cxx b/sal/qa/rtl/doublelock/rtl_doublelocking.cxx
new file mode 100644
index 000000000..ef639423d
--- /dev/null
+++ b/sal/qa/rtl/doublelock/rtl_doublelocking.cxx
@@ -0,0 +1,182 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <iostream>
+
+#include <sal/types.h>
+
+#include <osl/thread.hxx>
+
+#include <rtl/instance.hxx>
+#include <rtl/ustring.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <time.h>
+#endif
+
+#define CONST_TEST_STRING "gregorian"
+
+namespace {
+struct Gregorian : public rtl::StaticWithInit<OUString, Gregorian> {
+ OUString operator () () {
+ return CONST_TEST_STRING;
+ }
+};
+
+/** Simple thread for testing Thread-create.
+ * Just add 1 of value 0, and after running, result is 1.
+ */
+class OGetThread : public osl::Thread
+{
+ osl::Mutex m_mutex;
+ sal_Int32 m_nOK;
+ sal_Int32 m_nFails;
+
+ OUString m_sConstStr;
+public:
+ OGetThread()
+ :m_nOK(0),
+ m_nFails(0),
+ m_sConstStr(CONST_TEST_STRING)
+ {
+ }
+
+ sal_Int32 getOK() { osl::MutexGuard g(m_mutex); return m_nOK; }
+ sal_Int32 getFails() {osl::MutexGuard g(m_mutex); return m_nFails;}
+
+protected:
+
+ /** guarded value which initialized 0
+
+ @see ThreadSafeValue
+ */
+ void SAL_CALL run() override
+ {
+ for (int i = 0; i != 5; ++i)
+ {
+ OUString aStr = Gregorian::get();
+ if (aStr == m_sConstStr)
+ {
+ osl::MutexGuard g(m_mutex);
+ m_nOK++;
+ }
+ else
+ {
+ osl::MutexGuard g(m_mutex);
+ m_nFails++;
+ }
+ }
+ }
+
+public:
+
+ virtual ~OGetThread() override
+ {
+ if (isRunning())
+ {
+ printf("error: not terminated.\n");
+ }
+ }
+};
+
+}
+
+namespace rtl_DoubleLocking
+{
+
+/** Test of the osl::Thread::create method
+ */
+
+ class getValue : public CppUnit::TestFixture
+ {
+ public:
+
+ void getValue_001()
+ {
+ OUString aStr = Gregorian::get();
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Gregorian::get() failed, wrong value expected.",
+ !aStr.isEmpty()
+ );
+ }
+
+ /** check 2 threads.
+
+ ALGORITHM:
+ Here the function should show, that 2 different threads,
+ which only increase a value, should run at the same time with same prio.
+ The test fails, if the difference between the two values is more than 5%
+ but IMHO this isn't a failure, it's only a feature of the OS.
+ */
+
+ void getValue_002()
+ {
+ // initial 5 threads with different priorities
+ OGetThread* pThread = new OGetThread();
+ OGetThread* p2Thread = new OGetThread();
+
+ //Create them and start running at the same time
+ pThread->create();
+ p2Thread->create();
+
+ pThread->join();
+ p2Thread->join();
+
+ sal_Int32 nValueOK = pThread->getOK();
+
+ sal_Int32 nValueOK2 = p2Thread->getOK();
+
+ std::cout << "Value in Thread #1 is " << nValueOK << "\n";
+ std::cout << "Value in Thread #2 is " << nValueOK2 << "\n";
+ sal_Int32 nValueFails = pThread->getFails();
+
+ sal_Int32 nValueFails2 = p2Thread->getFails();
+
+ delete pThread;
+ delete p2Thread;
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), nValueOK);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), nValueOK2);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nValueFails);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nValueFails2);
+ }
+
+ CPPUNIT_TEST_SUITE(getValue);
+ CPPUNIT_TEST(getValue_001);
+ CPPUNIT_TEST(getValue_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class create
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(rtl_DoubleLocking::getValue);
+} // namespace rtl_DoubleLocking
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/locale/rtl_locale.cxx b/sal/qa/rtl/locale/rtl_locale.cxx
new file mode 100644
index 000000000..27e30db9f
--- /dev/null
+++ b/sal/qa/rtl/locale/rtl_locale.cxx
@@ -0,0 +1,280 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <rtl/locale.h>
+#include <rtl/ustring.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace rtl_locale
+{
+ // default locale for test purpose
+ static void setDefaultLocale()
+ {
+ rtl_locale_setDefault(OUString("de").getStr(), OUString("DE").getStr(), /* OUString() */ OUString("hochdeutsch").getStr() );
+ }
+
+class getDefault : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ void getDefault_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ CPPUNIT_ASSERT_MESSAGE("locale must not null", pData != nullptr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getDefault);
+ CPPUNIT_TEST(getDefault_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getDefault
+
+class setDefault : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ void tearDown() override
+ {
+ setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void setDefault_001()
+ {
+ rtl_locale_setDefault(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+ rtl_Locale* pData = rtl_locale_getDefault();
+ CPPUNIT_ASSERT_MESSAGE("locale must not null", pData != nullptr);
+
+ // be sure to not GPF
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(setDefault);
+ CPPUNIT_TEST(setDefault_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class setDefault
+
+class getLanguage : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void getLanguage_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suLanguage = pData->Language;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale language must be 'de'", OUString("de"), suLanguage );
+ }
+ void getLanguage_002()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suLanguage(rtl_locale_getLanguage(pData), SAL_NO_ACQUIRE);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale language must be 'de'", OUString("de"), suLanguage );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getLanguage);
+ CPPUNIT_TEST(getLanguage_001);
+ CPPUNIT_TEST(getLanguage_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getLanguage
+
+class getCountry : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void getCountry_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suCountry = pData->Country;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale country must be 'DE'", OUString("DE"), suCountry );
+ }
+ void getCountry_002()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suCountry(rtl_locale_getCountry(pData), SAL_NO_ACQUIRE);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale country must be 'DE'", OUString("DE"), suCountry );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getCountry);
+ CPPUNIT_TEST(getCountry_001);
+ CPPUNIT_TEST(getCountry_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getCountry
+
+class getVariant : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void getVariant_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suVariant = pData->Variant;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale variant must be 'hochdeutsch'", OUString("hochdeutsch"), suVariant );
+ }
+ void getVariant_002()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suVariant(rtl_locale_getVariant(pData), SAL_NO_ACQUIRE);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale variant must be 'hochdeutsch'", OUString("hochdeutsch"), suVariant );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getVariant);
+ CPPUNIT_TEST(getVariant_001);
+ CPPUNIT_TEST(getVariant_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getVariant
+
+class hashCode : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void hashCode_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ sal_Int32 nHashCode = pData->HashCode;
+ CPPUNIT_ASSERT_MESSAGE("locale hashcode must be 3831", nHashCode != 0);
+ }
+ void hashCode_002()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ sal_Int32 nHashCode = rtl_locale_hashCode(pData);
+ CPPUNIT_ASSERT_MESSAGE("locale hashcode must be 3831", nHashCode != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(hashCode);
+ CPPUNIT_TEST(hashCode_001);
+ CPPUNIT_TEST(hashCode_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class hashCode
+
+class equals : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void equals_001()
+ {
+ rtl_Locale* pData1 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+ rtl_Locale* pData2 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+
+ bool bLocaleAreEqual = (pData1 == pData2);
+
+ CPPUNIT_ASSERT_MESSAGE("check operator ==()", bLocaleAreEqual);
+ }
+
+ void equals_002()
+ {
+ rtl_Locale* pData1 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+ rtl_Locale* pData2 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+
+ sal_Int32 nEqual = rtl_locale_equals(pData1, pData2);
+ CPPUNIT_ASSERT(nEqual != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(equals);
+ CPPUNIT_TEST(equals_001);
+ CPPUNIT_TEST(equals_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class equals
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getDefault);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::setDefault);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getLanguage);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getCountry);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getVariant);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::hashCode);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::equals);
+} // namespace rtl_locale
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/math/test-rtl-math.cxx b/sal/qa/rtl/math/test-rtl-math.cxx
new file mode 100644
index 000000000..ee4ae55a1
--- /dev/null
+++ b/sal/qa/rtl/math/test-rtl-math.cxx
@@ -0,0 +1,677 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <rtl/math.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <limits>
+
+CPPUNIT_NS_BEGIN
+
+template<> struct assertion_traits<rtl_math_ConversionStatus>
+{
+ static bool equal( const rtl_math_ConversionStatus& x, const rtl_math_ConversionStatus& y )
+ {
+ return x == y;
+ }
+
+ static std::string toString( const rtl_math_ConversionStatus& x )
+ {
+ OStringStream ost;
+ ost << static_cast<unsigned int>(x);
+ return ost.str();
+ }
+};
+
+CPPUNIT_NS_END
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+public:
+ void test_stringToDouble_good() {
+ rtl_math_ConversionStatus status;
+ sal_Int32 end;
+ double res = rtl::math::stringToDouble(
+ " +1.E01foo",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH(" +1.E01"), end);
+ CPPUNIT_ASSERT_EQUAL(10.0, res);
+
+ res = rtl::math::stringToDouble(
+ "NaN",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end);
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::stringToDouble(
+ "NaN1.23",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end);
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::stringToDouble(
+ "+NaN",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ res = rtl::math::stringToDouble(
+ "-NaN",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ res = rtl::math::stringToDouble(
+ "+1.#NAN",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), end);
+ CPPUNIT_ASSERT(std::isnan(res));
+ CPPUNIT_ASSERT(!std::signbit(res));
+
+ res = rtl::math::stringToDouble(
+ "-1.#NAN",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), end);
+ CPPUNIT_ASSERT(std::isnan(res));
+ CPPUNIT_ASSERT(std::signbit(res));
+
+ res = rtl::math::stringToDouble(
+ "INF",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end);
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ res = rtl::math::stringToDouble(
+ "INF1.23",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end);
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ res = rtl::math::stringToDouble(
+ ".5",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end);
+ CPPUNIT_ASSERT_EQUAL(0.5, res);
+
+ res = rtl::math::stringToDouble(
+ "5.",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end);
+ CPPUNIT_ASSERT_EQUAL(5.0, res);
+
+ // Leading 0 and group separator.
+ res = rtl::math::stringToDouble(
+ "0,123",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end);
+ CPPUNIT_ASSERT_EQUAL(123.0, res);
+
+ // Leading 0 and two consecutive group separators are none.
+ res = rtl::math::stringToDouble(
+ "0,,1",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // Leading 0 and group separator at end is none.
+ res = rtl::math::stringToDouble(
+ "0,",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // Leading 0 and group separator before non-digit is none.
+ res = rtl::math::stringToDouble(
+ "0,x",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // Trailing group separator is none.
+ res = rtl::math::stringToDouble(
+ "1,234,",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end);
+ CPPUNIT_ASSERT_EQUAL(1234.0, res);
+
+ // Group separator followed by non-digit is none.
+ res = rtl::math::stringToDouble(
+ "1,234,x",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end);
+ CPPUNIT_ASSERT_EQUAL(1234.0, res);
+
+ // Check that the value is the nearest double-precision representation of the decimal 0.0042
+ // (it was 0.0042000000000000006 instead of 0.0041999999999999997)
+ res = rtl::math::stringToDouble("0,0042", ',', ' ', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(0.0042, res);
+
+ // "- 1" is nothing
+ res = rtl::math::stringToDouble("- 1", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // "-1E+E" : no exponent
+ res = rtl::math::stringToDouble("-1E+E", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end);
+ CPPUNIT_ASSERT_EQUAL(-1.0, res);
+
+ // "-0" is negative zero
+ res = rtl::math::stringToDouble("-0", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+ CPPUNIT_ASSERT(std::signbit(res));
+
+ // Compensating: "0.001E311" is 1E308, not overflow/inf
+ res = rtl::math::stringToDouble("0.001E311", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(9), end);
+ CPPUNIT_ASSERT_EQUAL(1E308, res);
+
+ res = rtl::math::stringToDouble("1E8589934590", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(12), end);
+ CPPUNIT_ASSERT_EQUAL(std::numeric_limits<double>::infinity(), res);
+
+ // DBL_MAX and 4 nextafters
+ double fValAfter = DBL_MAX;
+ res = rtl::math::stringToDouble("1.7976931348623157e+308", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end);
+ CPPUNIT_ASSERT_EQUAL(fValAfter, res);
+
+ fValAfter = std::nextafter( fValAfter, 0);
+ res = rtl::math::stringToDouble("1.7976931348623155e+308", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end);
+ CPPUNIT_ASSERT_EQUAL(fValAfter, res);
+
+ fValAfter = std::nextafter( fValAfter, 0);
+ res = rtl::math::stringToDouble("1.7976931348623153e+308", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end);
+ CPPUNIT_ASSERT_EQUAL(fValAfter, res);
+
+ fValAfter = std::nextafter( fValAfter, 0);
+ res = rtl::math::stringToDouble("1.7976931348623151e+308", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end);
+ CPPUNIT_ASSERT_EQUAL(fValAfter, res);
+
+ fValAfter = std::nextafter( fValAfter, 0);
+ res = rtl::math::stringToDouble("1.7976931348623149e+308", '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end);
+ CPPUNIT_ASSERT_EQUAL(fValAfter, res);
+ }
+
+ void test_stringToDouble_bad() {
+ rtl_math_ConversionStatus status;
+ sal_Int32 end;
+ double res = rtl::math::stringToDouble(
+ " +Efoo",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ res = rtl::math::stringToDouble(
+ ".",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ res = rtl::math::stringToDouble(
+ " +.Efoo",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ res = rtl::math::stringToDouble(
+ " +,.Efoo",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // Leading group separator is none.
+ res = rtl::math::stringToDouble(
+ ",1234",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+ }
+
+ void test_stringToDouble_exponent_without_digit() {
+ rtl_math_ConversionStatus status;
+ sal_Int32 end;
+ double res = rtl::math::stringToDouble(
+ "1e",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH("1"), end);
+ CPPUNIT_ASSERT_EQUAL(1.0, res);
+ res = rtl::math::stringToDouble(
+ "0e",
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH("1"), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+ }
+
+ void test_round() {
+ double fVal = 5000000000000001.0;
+ CPPUNIT_ASSERT_EQUAL( 5000000000000001.0, rtl::math::round( fVal, 9, rtl_math_RoundingMode_Corrected));
+
+ fVal = 8796093022188.0;
+ CPPUNIT_ASSERT_EQUAL( 6093022188.0 , rtl::math::round( fVal, 9, rtl_math_RoundingMode_Corrected) - 8790000000000);
+
+ fVal = 4503599627370491.0;
+ CPPUNIT_ASSERT_EQUAL( 4503599627370000.0, rtl::math::round( fVal, -3, rtl_math_RoundingMode_Corrected));
+ }
+
+ void test_doubleToString() {
+ double fVal = 999999999999999.0;
+ sal_Int32 aGroups[3] = { 3, 2, 0 };
+ OUString aRes( rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max,
+ '.', aGroups, ',', true));
+ CPPUNIT_ASSERT_EQUAL( OUString("99,99,99,99,99,99,999"), aRes);
+
+ fVal = 949.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ -2, // round before decimals
+ '.', aGroups, ',', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("900"), aRes);
+
+ fVal = 950.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ -2, // round before decimals
+ '.', aGroups, ',', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1,000"), aRes);
+
+ fVal = 4503599627370495.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.');
+ CPPUNIT_ASSERT_EQUAL( OUString("4503599627370495"), aRes);
+
+ fVal = 4503599627370496.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ 2, '.');
+ CPPUNIT_ASSERT_EQUAL( OUString("4503599627370496.00"), aRes);
+
+ fVal = -4503599627370496.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ 2, '.');
+ CPPUNIT_ASSERT_EQUAL( OUString("-4503599627370496.00"), aRes);
+
+ fVal = 9007199254740991.0; // (2^53)-1
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("9007199254740991"), aRes);
+
+ fVal = 9007199254740992.0; // (2^53), algorithm switch
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("9.00719925474099E+015"), aRes);
+
+ fVal = 9007199254740993.0; // (2^53)+1 would be but is 9007199254740992
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("9.00719925474099E+015"), aRes);
+
+ // Test rtl_math_StringFormat_G
+
+ fVal = 0.001234567;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("0.00123"), aRes);
+
+ fVal = 123.4567;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("123"), aRes);
+
+ fVal = 123.4567;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 4, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("123.5"), aRes);
+
+ fVal = 99.6;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("99.6"), aRes);
+
+ // Expected could be 1E+03 (as 999.6 rounded to 3 significant digits
+ // results in 1000 with an exponent equal to significant digits).
+ // Currently we don't and output 1000 instead, negligible.
+ fVal = 999.6;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1000"), aRes);
+
+ fVal = 9999.6;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1E+004"), aRes);
+
+ fVal = 12345.6789;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, -3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.2E+004"), aRes);
+
+ // DBL_MAX and 4 nextafters
+ fVal = DBL_MAX;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.7976931348623157E+308"), aRes);
+
+ fVal = std::nextafter( fVal, 0);
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.7976931348623155E+308"), aRes);
+
+ fVal = std::nextafter( fVal, 0);
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.7976931348623153E+308"), aRes);
+
+ fVal = std::nextafter( fVal, 0);
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.7976931348623151E+308"), aRes);
+
+ fVal = std::nextafter( fVal, 0);
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862315E+308"), aRes);
+ CPPUNIT_ASSERT_EQUAL(fVal, rtl::math::stringToDouble(aRes, '.', ',')); // Test roundtrip
+
+ // DBL_MAX and 4 nextafters rounded to 15 decimals
+ fVal = DBL_MAX;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862316E+308"), aRes);
+
+ fVal = std::nextafter( fVal, 0);
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862316E+308"), aRes);
+
+ fVal = std::nextafter( fVal, 0);
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862315E+308"), aRes);
+
+ fVal = std::nextafter( fVal, 0);
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862315E+308"), aRes);
+
+ fVal = std::nextafter( fVal, 0);
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862315E+308"), aRes);
+
+ // DBL_MAX rounded to 14 decimals
+ fVal = DBL_MAX;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 14, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.79769313486232E+308"), aRes);
+
+ // DBL_MAX rounded to 2 decimals
+ fVal = DBL_MAX;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 2, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.8E+308"), aRes);
+
+ // Crashed after commit eae24a9488814e77254d175c11fc4a138c1dbd30
+ fVal = 123456.789;
+ aRes = rtl::math::doubleToUString(fVal, rtl_math_StringFormat_E, 2, '.', false);
+ CPPUNIT_ASSERT_EQUAL(OUString("1.23E+005"), aRes);
+
+ fVal = 9.9999999999999929;
+ aRes = rtl::math::doubleToUString(fVal, rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL(OUString("9.99999999999999"), aRes);
+
+ fVal = 0.99999999999999933;
+ aRes = rtl::math::doubleToUString(fVal, rtl_math_StringFormat_F, rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL(OUString("0.999999999999999"), aRes);
+ }
+
+ void test_approx() {
+ // (2^53)-1 , (2^53)-3
+ CPPUNIT_ASSERT_EQUAL( false, rtl::math::approxEqual( 9007199254740991.0, 9007199254740989.0));
+ // (2^53)-1 , (2^53)-2
+ CPPUNIT_ASSERT_EQUAL( false, rtl::math::approxEqual( 9007199254740991.0, 9007199254740990.0));
+ // Note: the following are internally represented as 900719925474099.12
+ // and 900719925474098.88 and the difference is 0.25 ...
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 900719925474099.1, 900719925474098.9));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 72.944444444444443, 72.9444444444444));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 359650.27322404372, 359650.27322404401));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 5.3590326375710063e+238, 5.3590326375710109e+238));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 7.4124095894894475e+158, 7.4124095894894514e+158));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 1.2905754687023132e+79, 1.2905754687023098e+79));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 3.5612905090455637e+38, 3.5612905090455599e+38));
+ // 0.3 - 0.2 - 0.1 == 0.0
+ CPPUNIT_ASSERT_EQUAL( 0.0, rtl::math::approxSub( rtl::math::approxSub( 0.3, 0.2), 0.1));
+ // ((2^53)-1) - ((2^53)-2) == 1.0
+ CPPUNIT_ASSERT_EQUAL( 1.0, rtl::math::approxSub( 9007199254740991.0, 9007199254740990.0));
+ // (3^31) - ((3^31)-1) == 1.0
+ CPPUNIT_ASSERT_EQUAL( 1.0, rtl::math::approxSub( 617673396283947.0, 617673396283946.0));
+ }
+
+ void test_erf() {
+ double x, res;
+ x = 0.0;
+ res = rtl::math::erf(x);
+ CPPUNIT_ASSERT_EQUAL(0.0,res);
+ rtl::math::setInf( &x, false);
+ res = rtl::math::erf(x);
+ CPPUNIT_ASSERT_EQUAL(1.0,res);
+ rtl::math::setInf( &x, true);
+ res = rtl::math::erf(x);
+ CPPUNIT_ASSERT_EQUAL(-1.0,res);
+ rtl::math::setNan( &x);
+ res = rtl::math::erf(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ x = 3.0;
+ res = rtl::math::erf(-x);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL( -rtl::math::erf(x), res, 1E-12);
+ }
+
+ void test_erfc() {
+ double x, res;
+ x = 0.0;
+ res = rtl::math::erfc(x);
+ CPPUNIT_ASSERT_EQUAL(1.0,res);
+ rtl::math::setInf( &x, false);
+ res = rtl::math::erfc(x);
+ CPPUNIT_ASSERT_EQUAL(0.0,res);
+ rtl::math::setInf( &x, true);
+ res = rtl::math::erfc(x);
+ CPPUNIT_ASSERT_EQUAL(2.0,res);
+ rtl::math::setNan( &x);
+ res = rtl::math::erfc(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ x = 3.0;
+ res = rtl::math::erfc(-x);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL( 2.0 - rtl::math::erfc(x), res, 1E-12);
+ }
+
+ void test_expm1() {
+ double x, res;
+ x = 0.0;
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT_EQUAL(0.0,res);
+ x = -0.0;
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT_EQUAL(-0.0,res);
+ CPPUNIT_ASSERT(std::signbit(res));
+ rtl::math::setInf( &x, false);
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && !std::signbit(res));
+ rtl::math::setInf( &x, true);
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT_EQUAL(-1.0,res);
+ rtl::math::setNan( &x);
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ }
+
+ void test_log1p() {
+ double x, res;
+ x = 0.0;
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT_EQUAL(0.0,res);
+ x = -0.0;
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT_EQUAL(-0.0,res);
+ CPPUNIT_ASSERT(std::signbit(res));
+ rtl::math::setInf( &x, false);
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && !std::signbit(res));
+ x = -1.0;
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && std::signbit(res));
+ x = -1.1;
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ rtl::math::setInf( &x, true);
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ rtl::math::setNan( &x);
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ }
+
+ void test_acosh() {
+ double res;
+
+ res = rtl::math::acosh(-1.0); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::acosh(0.0); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::acosh(0.5); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::acosh(1.0));
+
+ res = rtl::math::acosh(std::numeric_limits<double>::infinity()); // +Inf
+ CPPUNIT_ASSERT(!std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ // #i97605
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(692.56728736744176, rtl::math::acosh(3e+300), 1e-15);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(0.014142017775252324, rtl::math::acosh(1.0001), 1e-15);
+ }
+
+ void test_asinh() {
+ double res;
+
+ res = rtl::math::asinh(-std::numeric_limits<double>::infinity()); // -Inf
+ CPPUNIT_ASSERT(std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::asinh(0.0));
+
+ res = rtl::math::asinh(std::numeric_limits<double>::infinity()); // +Inf
+ CPPUNIT_ASSERT(!std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ // #i97605
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(691.67568924815798, rtl::math::asinh(1.23e+300), 1e-15);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0350378961923076, rtl::math::asinh(1.23), 1e-16);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.23e-300, rtl::math::asinh(1.23e-300), 1e-303);
+
+ // asinh is an odd function
+ CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23e+300), rtl::math::asinh(-1.23e+300));
+ CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23), rtl::math::asinh(-1.23));
+ CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23e-300), rtl::math::asinh(-1.23e-300));
+ }
+
+ void test_atanh() {
+ double res;
+
+ res = rtl::math::atanh(-2.0); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::atanh(-1.0); // -Inf
+ CPPUNIT_ASSERT(std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::atanh(0.0));
+
+ res = rtl::math::atanh(1.0); // +Inf
+ CPPUNIT_ASSERT(!std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ res = rtl::math::atanh(2.0); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test_stringToDouble_good);
+ CPPUNIT_TEST(test_stringToDouble_bad);
+ CPPUNIT_TEST(test_stringToDouble_exponent_without_digit);
+ CPPUNIT_TEST(test_round);
+ CPPUNIT_TEST(test_doubleToString);
+ CPPUNIT_TEST(test_erf);
+ CPPUNIT_TEST(test_erfc);
+ CPPUNIT_TEST(test_expm1);
+ CPPUNIT_TEST(test_log1p);
+ CPPUNIT_TEST(test_approx);
+ CPPUNIT_TEST(test_acosh);
+ CPPUNIT_TEST(test_asinh);
+ CPPUNIT_TEST(test_atanh);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ostring/rtl_OString2.cxx b/sal/qa/rtl/ostring/rtl_OString2.cxx
new file mode 100644
index 000000000..204475084
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_OString2.cxx
@@ -0,0 +1,508 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/string.hxx>
+
+#include "valueequal.hxx"
+
+namespace rtl_OString
+{
+
+class valueOf : public CppUnit::TestFixture
+{
+ void valueOf_float_test_impl(float _nValue)
+ {
+ OString sValue;
+ sValue = OString::valueOf( _nValue );
+ printf("nFloat := %.9f sValue := %s\n", _nValue, sValue.getStr());
+
+ float nValueATOF = static_cast<float>(atof( sValue.getStr() ));
+
+ bool bEqualResult = is_float_equal(_nValue, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true);
+ }
+
+ void valueOf_float_test(float _nValue)
+ {
+ valueOf_float_test_impl(_nValue);
+
+ // test also the negative part.
+ float nNegativeValue = -_nValue;
+ valueOf_float_test_impl(nNegativeValue);
+ }
+
+public:
+ // insert your test code here.
+ void valueOf_float_test_001()
+ {
+ // this is demonstration code
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ float nValue = 3.0f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_002()
+ {
+ float nValue = 3.5f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_003()
+ {
+ float nValue = 3.0625f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_004()
+ {
+ float nValue = 3.502525f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_005()
+ {
+ float nValue = 3.141592f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_006()
+ {
+ float nValue = 3.5025255f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_007()
+ {
+ float nValue = 3.0039062f;
+ valueOf_float_test(nValue);
+ }
+
+private:
+
+ void valueOf_double_test_impl(double _nValue)
+ {
+ OString sValue;
+ sValue = OString::valueOf( _nValue );
+ printf("nDouble := %.20f sValue := %s\n", _nValue, sValue.getStr());
+
+ double nValueATOF = atof( sValue.getStr() );
+
+ bool bEqualResult = is_double_equal(_nValue, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true);
+ }
+
+ void valueOf_double_test(double _nValue)
+ {
+ valueOf_double_test_impl(_nValue);
+
+ // test also the negative part.
+ double nNegativeValue = -_nValue;
+ valueOf_double_test_impl(nNegativeValue);
+ }
+public:
+
+ // valueOf double
+ void valueOf_double_test_001()
+ {
+ double nValue = 3.0;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_002()
+ {
+ double nValue = 3.5;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_003()
+ {
+ double nValue = 3.0625;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_004()
+ {
+ double nValue = 3.1415926535;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_005()
+ {
+ double nValue = 3.141592653589793;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_006()
+ {
+ double nValue = 3.1415926535897932;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_007()
+ {
+ double nValue = 3.14159265358979323;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_008()
+ {
+ double nValue = 3.141592653589793238462643;
+ valueOf_double_test(nValue);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(valueOf);
+ CPPUNIT_TEST(valueOf_float_test_001);
+ CPPUNIT_TEST(valueOf_float_test_002);
+ CPPUNIT_TEST(valueOf_float_test_003);
+ CPPUNIT_TEST(valueOf_float_test_004);
+ CPPUNIT_TEST(valueOf_float_test_005);
+ CPPUNIT_TEST(valueOf_float_test_006);
+ CPPUNIT_TEST(valueOf_float_test_007);
+
+ CPPUNIT_TEST(valueOf_double_test_001);
+ CPPUNIT_TEST(valueOf_double_test_002);
+ CPPUNIT_TEST(valueOf_double_test_003);
+ CPPUNIT_TEST(valueOf_double_test_004);
+ CPPUNIT_TEST(valueOf_double_test_005);
+ CPPUNIT_TEST(valueOf_double_test_006);
+ CPPUNIT_TEST(valueOf_double_test_007);
+ CPPUNIT_TEST(valueOf_double_test_008);
+ CPPUNIT_TEST_SUITE_END();
+}; // class valueOf
+
+// - toDouble (tests)
+
+class toDouble : public CppUnit::TestFixture
+{
+
+public:
+
+ toDouble()
+ {
+ // testPrecision a;
+ }
+
+ void toDouble_test_impl(OString const& _sValue)
+ {
+ double nValueATOF = atof( _sValue.getStr() );
+
+ // OUString suValue = OUString::createFromAscii( _sValue.getStr() );
+ double nValueToDouble = _sValue.toDouble();
+
+ bool bEqualResult = is_double_equal(nValueToDouble, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true);
+ }
+
+ void toDouble_test(OString const& _sValue)
+ {
+ toDouble_test_impl(_sValue);
+
+ // test also the negative part.
+ OString sNegativValue("-");
+ sNegativValue += _sValue;
+ toDouble_test_impl(sNegativValue);
+ }
+
+ // insert your test code here.
+ void toDouble_selftest()
+ {
+ printf("Start selftest:\n");
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.01) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000001) == false);
+ // we check til 14 values after comma
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000000001) == true);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000000001) == true);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000000001) == true);
+ printf("Selftest done.\n");
+ }
+
+ void toDouble_test_3()
+ {
+ OString sValue("3");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_3_5()
+ {
+ OString sValue("3.5");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_3_0625()
+ {
+ OString sValue("3.0625");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_pi()
+ {
+ // value from http://www.angio.net/pi/digits/50.txt
+ OString sValue("3.141592653589793238462643383279502884197169399375");
+ toDouble_test(sValue);
+ }
+
+ void toDouble_test_1()
+ {
+ OString sValue("1");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_10()
+ {
+ OString sValue("10");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_100()
+ {
+ OString sValue("100");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1000()
+ {
+ OString sValue("1000");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_10000()
+ {
+ OString sValue("10000");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e99()
+ {
+ OString sValue("1e99");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e_n99()
+ {
+ OString sValue("1e-99");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e308()
+ {
+ OString sValue("1e308");
+ toDouble_test(sValue);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toDouble);
+ CPPUNIT_TEST(toDouble_selftest);
+
+ CPPUNIT_TEST(toDouble_test_3);
+ CPPUNIT_TEST(toDouble_test_3_5);
+ CPPUNIT_TEST(toDouble_test_3_0625);
+ CPPUNIT_TEST(toDouble_test_pi);
+ CPPUNIT_TEST(toDouble_test_1);
+ CPPUNIT_TEST(toDouble_test_10);
+ CPPUNIT_TEST(toDouble_test_100);
+ CPPUNIT_TEST(toDouble_test_1000);
+ CPPUNIT_TEST(toDouble_test_10000);
+ CPPUNIT_TEST(toDouble_test_1e99);
+ CPPUNIT_TEST(toDouble_test_1e_n99);
+ CPPUNIT_TEST(toDouble_test_1e308);
+ CPPUNIT_TEST_SUITE_END();
+}; // class toDouble
+
+// - getToken (tests)
+
+class getToken : public CppUnit::TestFixture
+{
+
+public:
+ void getToken_000()
+ {
+ OString sTokenStr;
+
+ sal_Int32 nIndex = 0;
+ do
+ {
+ OString sToken = sTokenStr.getToken( 0, ';', nIndex );
+ }
+ while ( nIndex >= 0 );
+ // printf("Index %d\n", nIndex);
+ // should not GPF
+ }
+
+ void getToken_001()
+ {
+ OString sTokenStr = "a;b";
+
+ sal_Int32 nIndex = 0;
+
+ OString sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True);
+ CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1);
+ }
+
+ void getToken_002()
+ {
+ OString sTokenStr = "a;b.c";
+
+ sal_Int32 nIndex = 0;
+
+ OString sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'c'", sToken.equals("c") == sal_True);
+ CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1);
+ }
+
+ void getToken_003()
+ {
+ OString sTokenStr = "a;;b";
+
+ sal_Int32 nIndex = 0;
+
+ OString sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be empty", sToken.isEmpty());
+
+ /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True);
+ CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1);
+ }
+
+ void getToken_004()
+ {
+ OString sTokenStr = "longer.then.ever.";
+
+ sal_Int32 nIndex = 0;
+
+ OString sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be 'longer'", sToken.equals("longer") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be 'then'", sToken.equals("then") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be 'ever'", sToken.equals("ever") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be empty", sToken.isEmpty());
+
+ CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1);
+ }
+
+ CPPUNIT_TEST_SUITE(getToken);
+ CPPUNIT_TEST(getToken_000);
+ CPPUNIT_TEST(getToken_001);
+ CPPUNIT_TEST(getToken_002);
+ CPPUNIT_TEST(getToken_003);
+ CPPUNIT_TEST(getToken_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getToken
+
+// testing the method replaceAt( sal_Int32 index, sal_Int32 count,
+// const OString& newStr )
+
+// Developer note: Mindy Liu, 2004-04-23
+// stolen from sal/qa/rtl_strings/rtl_OString.cxx
+
+class replaceAt : public CppUnit::TestFixture
+{
+
+public:
+ sal_Bool check_replaceAt( const OString* expVal, const OString* input,
+ const OString* newStr, sal_Int32 index, sal_Int32 count)
+ {
+ OString aStr1;
+ aStr1= input->replaceAt( index, count, *newStr );
+
+ printf("the result OString is %s#\n", aStr1.getStr() );
+
+ sal_Bool bRes = ( expVal->compareTo(aStr1) == 0 );
+ return bRes;
+ }
+
+ void replaceAt_001()
+ {
+ sal_Bool bRes = check_replaceAt(new OString("Java@Sun"),
+ new OString("Sun java"), new OString("Java@Sun"), 0, 8 );
+ CPPUNIT_ASSERT_MESSAGE("string differs, replace whole string", bRes == sal_True);
+ }
+
+ void replaceAt_002()
+ {
+ sal_Bool bRes = check_replaceAt(new OString("Sun Java desktop system"),
+ new OString("Sun "), new OString("Java desktop system"), 10, 8 );
+ CPPUNIT_ASSERT_MESSAGE("index > length of input string", bRes == sal_True);
+ }
+
+ void replaceAt_003()
+ {
+ sal_Bool bRes = check_replaceAt(new OString("SuJava desktop system"),
+ new OString("Sun "), new OString("Java desktop system"), 2, 64 );
+ CPPUNIT_ASSERT_MESSAGE("larger count", bRes == sal_True);
+ }
+
+ void replaceAt_004()
+ {
+
+ sal_Bool bRes = check_replaceAt(new OString("Java desktop system"),
+ new OString("Sun "), new OString("Java desktop system"), -4, 8 );
+ CPPUNIT_ASSERT_MESSAGE("navigate index", bRes == sal_True);
+ }
+ void replaceAt_005()
+ {
+
+ sal_Bool bRes = check_replaceAt(new OString("Sun Jesktop System"),
+ new OString("Sun Java Desktop System"), new OString(""), 5, 5 );
+ CPPUNIT_ASSERT_MESSAGE("replace with null string", bRes == sal_True);
+ }
+
+ CPPUNIT_TEST_SUITE(replaceAt);
+ CPPUNIT_TEST(replaceAt_001);
+ CPPUNIT_TEST(replaceAt_002);
+ CPPUNIT_TEST(replaceAt_003);
+ CPPUNIT_TEST(replaceAt_004);
+ CPPUNIT_TEST(replaceAt_005);
+ CPPUNIT_TEST_SUITE_END();
+}; // class replaceAt
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::valueOf);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::toDouble);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::getToken);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::replaceAt);
+
+} // namespace rtl_OString
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ostring/rtl_str.cxx b/sal/qa/rtl/ostring/rtl_str.cxx
new file mode 100644
index 000000000..f7af22008
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_str.cxx
@@ -0,0 +1,724 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/string.hxx>
+#include <cstring>
+
+namespace rtl_str
+{
+
+ class compare : public CppUnit::TestFixture
+ {
+ void compare_001()
+ {
+ OString aStr1 = "";
+ OString aStr2 = "";
+
+ sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_003()
+ {
+ OString aStr1 = "Line must differ.";
+ OString aStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(compare);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class compareIgnoreAsciiCase : public CppUnit::TestFixture
+ {
+ void compare_001()
+ {
+ OString aStr1 = "";
+ OString aStr2 = "";
+
+ sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002_1()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "LINE MUST BE EQUAL.";
+
+ sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue);
+ }
+
+ void compare_003()
+ {
+ OString aStr1 = "Line must differ.";
+ OString aStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(compareIgnoreAsciiCase);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_002_1);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compareIgnoreAsciiCase
+
+ class shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture
+ {
+ void compare_000()
+ {
+ rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( nullptr, 0, nullptr, 0, 0);
+ }
+
+ void compare_000_1()
+ {
+ OString aStr1 = "Line must be equal.";
+ rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), nullptr, 0, 1);
+ }
+ void compare_001()
+ {
+ OString aStr1 = "";
+ OString aStr2 = "";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), aStr2.getStr(), aStr2.getLength(), aStr1.getLength());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002_1()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "LINE MUST BE EQUAL.";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue);
+ }
+
+ void compare_003()
+ {
+ OString aStr1 = "Line must differ.";
+ OString aStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ 5);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal first 5 characters.", sal_Int32(0), nValue);
+ }
+
+ void compare_004()
+ {
+ OString aStr1 = "Line must differ.";
+ OString aStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(shortenedCompareIgnoreAsciiCase_WithLength);
+ CPPUNIT_TEST(compare_000);
+ CPPUNIT_TEST(compare_000_1);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_002_1);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST(compare_004);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class hashCode : public CppUnit::TestFixture
+ {
+ void hashCode_001()
+ {
+ OString aStr1 = "Line for a hashCode.";
+ sal_Int32 nHashCode = rtl_str_hashCode( aStr1.getStr() );
+ printf("hashcode: %" SAL_PRIdINT32 "\n", nHashCode);
+ // CPPUNIT_ASSERT_MESSAGE("failed.", nValue == 0);
+ }
+
+ void hashCode_002()
+ {
+ OString aStr1 = "Line for a hashCode.";
+ sal_Int32 nHashCode1 = rtl_str_hashCode( aStr1.getStr() );
+
+ OString aStr2 = "Line for a hashCode.";
+ sal_Int32 nHashCode2 = rtl_str_hashCode( aStr2.getStr() );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("hashcodes must be equal.", nHashCode1, nHashCode2 );
+ }
+
+ void hashCode_003()
+ {
+ OString aStr1 = "Line for a hashCode.";
+ sal_Int32 nHashCode1 = rtl_str_hashCode( aStr1.getStr() );
+
+ OString aStr2 = "Line for another hashcode.";
+ sal_Int32 nHashCode2 = rtl_str_hashCode( aStr2.getStr() );
+
+ CPPUNIT_ASSERT_MESSAGE("hashcodes must differ.", nHashCode1 != nHashCode2 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(hashCode);
+ CPPUNIT_TEST(hashCode_001);
+ CPPUNIT_TEST(hashCode_002);
+ CPPUNIT_TEST(hashCode_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class indexOfChar : public CppUnit::TestFixture
+ {
+ void indexOfChar_000()
+ {
+ sal_Int32 nIndex = rtl_str_indexOfChar("", 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Trailing zero character is not part of the string",
+ sal_Int32(-1), nIndex);
+ }
+
+ void indexOfChar_001()
+ {
+ OString aStr1 = "Line for an indexOfChar.";
+
+ sal_Int32 nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'L' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'i' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(1), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'n' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(2), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'e' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(3), nIndex);
+ }
+
+ void indexOfChar_002()
+ {
+ OString aStr1 = "Line for an indexOfChar.";
+ sal_Int32 nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'y' );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(indexOfChar);
+ CPPUNIT_TEST(indexOfChar_000);
+ CPPUNIT_TEST(indexOfChar_001);
+ CPPUNIT_TEST(indexOfChar_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class lastIndexOfChar : public CppUnit::TestFixture
+ {
+ void lastIndexOfChar_000()
+ {
+ sal_Int32 nIndex = rtl_str_lastIndexOfChar("", 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Trailing zero character is not part of the string",
+ sal_Int32(-1), nIndex);
+ }
+
+ void lastIndexOfChar_001()
+ {
+ OString aStr1 = "Line for a lastIndexOfChar.";
+
+ sal_Int32 nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'C' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(22), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'h' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(23), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'a' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(24), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'r' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(25), nIndex);
+ }
+
+ void lastIndexOfChar_002()
+ {
+ OString aStr1 = "Line for a lastIndexOfChar.";
+ sal_Int32 nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'y' );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOfChar);
+ CPPUNIT_TEST(lastIndexOfChar_000);
+ CPPUNIT_TEST(lastIndexOfChar_001);
+ CPPUNIT_TEST(lastIndexOfChar_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class lastIndexOfChar
+
+ class indexOfStr : public CppUnit::TestFixture
+ {
+ void indexOfStr_000()
+ {
+ OString aStr1("Line for an indexOfStr.");
+ sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "" );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("an empty substring is always not findable",
+ sal_Int32(-1), nIndex);
+ }
+
+ void indexOfStr_001()
+ {
+ OString aStr1 = "Line for an indexOfStr.";
+
+ sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "Line" );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "for" );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(5), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "a" );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(9), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "an index" );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(9), nIndex);
+ }
+
+ void indexOfStr_002()
+ {
+ OString aStr1 = "Line for an indexOfStr.";
+ sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "not exist" );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(indexOfStr);
+ CPPUNIT_TEST(indexOfStr_000);
+ CPPUNIT_TEST(indexOfStr_001);
+ CPPUNIT_TEST(indexOfStr_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class lastIndexOfStr : public CppUnit::TestFixture
+ {
+ void lastIndexOfStr_000()
+ {
+ OString aStr1("Line for a lastIndexOfStr.");
+ sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), "" );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("an empty substring is always not findable",
+ sal_Int32(-1), nIndex);
+ }
+
+ void lastIndexOfStr_001()
+ {
+ OString aStr1 = "Line for a lastIndexOfStr.";
+ OString aSearchStr = "Index";
+
+ sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(15), nIndex);
+
+ /* OString */ aSearchStr = "Line";
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex);
+
+ /* OString */ aSearchStr = "";
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ void lastIndexOfStr_002()
+ {
+ OString aStr1 = "Line for a lastIndexOfStr.";
+ OString aSearchStr = "foo";
+ sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ void lastIndexOfStr_003()
+ {
+ OString aStr1 = "Line for a lastIndexOfStr.";
+ OString aSearchStr = "O";
+ sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(20), nIndex);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOfStr);
+ CPPUNIT_TEST(lastIndexOfStr_000);
+ CPPUNIT_TEST(lastIndexOfStr_001);
+ CPPUNIT_TEST(lastIndexOfStr_002);
+ CPPUNIT_TEST(lastIndexOfStr_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class lastIndexOfStr
+
+ class replaceChar : public CppUnit::TestFixture
+ {
+ void replaceChar_001()
+ {
+ OString aStr1 = "replace char.";
+ OString aShouldStr1 = "ruplacu char.";
+
+ char* pStr = static_cast<char*>(malloc(aStr1.getLength() + 1));
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_replaceChar( pStr, 'e', 'u' );
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(OString(pStr)));
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(replaceChar);
+ CPPUNIT_TEST(replaceChar_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class replaceChar_WithLength : public CppUnit::TestFixture
+ {
+ void replaceChar_WithLength_000()
+ {
+ rtl_str_replaceChar_WithLength( nullptr, 0, 0, 0 );
+ }
+
+ void replaceChar_WithLength_001()
+ {
+ OString aStr1 = "replace char.";
+ OString aShouldStr1 = "ruplace char.";
+
+ char* pStr = static_cast<char*>(malloc(aStr1.getLength() + 1));
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_replaceChar_WithLength( pStr, 6, 'e', 'u' );
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(OString(pStr)));
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(replaceChar_WithLength);
+ CPPUNIT_TEST(replaceChar_WithLength_000);
+ CPPUNIT_TEST(replaceChar_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiLowerCase : public CppUnit::TestFixture
+ {
+ void toAsciiLowerCase_001()
+ {
+ OString aStr1 = "CHANGE THIS TO ASCII LOWER CASE.";
+ OString aShouldStr1 = "change this to ascii lower case.";
+
+ char* pStr = static_cast<char*>(malloc(aStr1.getLength() + 1));
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_toAsciiLowerCase( pStr );
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr)));
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiLowerCase);
+ CPPUNIT_TEST(toAsciiLowerCase_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiLowerCase_WithLength : public CppUnit::TestFixture
+ {
+ void toAsciiLowerCase_WithLength_000()
+ {
+ rtl_str_toAsciiLowerCase_WithLength( nullptr, 0 );
+ }
+
+ void toAsciiLowerCase_WithLength_001()
+ {
+ OString aStr1 = "CHANGE THIS TO ASCII LOWER CASE.";
+ OString aShouldStr1 = "change thiS TO ASCII LOWER CASE.";
+
+ char* pStr = static_cast<char*>(malloc(aStr1.getLength() + 1));
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_toAsciiLowerCase_WithLength( pStr, 10 );
+
+ printf("Lowercase with length: '%s'\n", pStr);
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr)));
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiLowerCase_WithLength);
+ CPPUNIT_TEST(toAsciiLowerCase_WithLength_000);
+ CPPUNIT_TEST(toAsciiLowerCase_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiUpperCase : public CppUnit::TestFixture
+ {
+ void toAsciiUpperCase_001()
+ {
+ OString aStr1 = "change this to ascii upper case.";
+ OString aShouldStr1 = "CHANGE THIS TO ASCII UPPER CASE.";
+
+ char* pStr = static_cast<char*>(malloc(aStr1.getLength() + 1));
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_toAsciiUpperCase( pStr );
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr)));
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiUpperCase);
+ CPPUNIT_TEST(toAsciiUpperCase_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiUpperCase_WithLength : public CppUnit::TestFixture
+ {
+ void toAsciiUpperCase_WithLength_000()
+ {
+ rtl_str_toAsciiUpperCase_WithLength( nullptr, 0 );
+ }
+
+ void toAsciiUpperCase_WithLength_001()
+ {
+ OString aStr1 = "change this to ascii lower case.";
+ OString aShouldStr1 = "CHANGE THIs to ascii lower case.";
+
+ char* pStr = static_cast<char*>(malloc(aStr1.getLength() + 1));
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr);
+
+ strcpy(pStr, aStr1.getStr());
+ rtl_str_toAsciiUpperCase_WithLength( pStr, 10 );
+
+ printf("Uppercase with length: '%s'\n", aStr1.getStr());
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr)));
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiUpperCase_WithLength);
+ CPPUNIT_TEST(toAsciiUpperCase_WithLength_000);
+ CPPUNIT_TEST(toAsciiUpperCase_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class trim_WithLength : public CppUnit::TestFixture
+ {
+ void trim_WithLength_000()
+ {
+ rtl_str_trim_WithLength(nullptr, 0);
+ // should not GPF
+ }
+
+ void trim_WithLength_000_1()
+ {
+ char pStr[] = { " trim this" };
+ rtl_str_trim_WithLength( pStr, 0 );
+ }
+
+ void trim_WithLength_001()
+ {
+ char pStr[] = { " trim this" };
+ rtl_str_trim_WithLength( pStr, 2 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should be empty", size_t(0), strlen(pStr));
+ }
+
+ void trim_WithLength_002()
+ {
+ char pStr[] = { "trim this" };
+ rtl_str_trim_WithLength( pStr, 5 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", size_t(4), strlen(pStr));
+ }
+
+ void trim_WithLength_003()
+ {
+ char pStr[] = {" trim this"};
+ rtl_str_trim_WithLength( pStr, 11 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", size_t(4), strlen(pStr));
+ }
+
+ void trim_WithLength_004()
+ {
+ char pStr[] = { "\r\n\t \n\r trim \n this" };
+ rtl_str_trim_WithLength( pStr, 17 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", size_t(4), strlen(pStr));
+ }
+
+ void trim_WithLength_005()
+ {
+ char pStr[] = { "\r\n\t \n\r trim \t this \n\r\t\t " };
+ rtl_str_trim_WithLength( pStr, strlen(pStr) );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim \t this'", size_t(11), strlen(pStr));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(trim_WithLength);
+ CPPUNIT_TEST(trim_WithLength_000);
+ CPPUNIT_TEST(trim_WithLength_000_1);
+ CPPUNIT_TEST(trim_WithLength_001);
+ CPPUNIT_TEST(trim_WithLength_002);
+ CPPUNIT_TEST(trim_WithLength_003);
+ CPPUNIT_TEST(trim_WithLength_004);
+ CPPUNIT_TEST(trim_WithLength_005);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class valueOfChar : public CppUnit::TestFixture
+ {
+ void valueOfChar_001()
+ {
+ char pStr[RTL_STR_MAX_VALUEOFCHAR];
+ rtl_str_valueOfChar(pStr, 'A');
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'A'", 'A', pStr[0]);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(valueOfChar);
+ CPPUNIT_TEST(valueOfChar_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::compare);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::compareIgnoreAsciiCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::shortenedCompareIgnoreAsciiCase_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::hashCode);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::indexOfChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::lastIndexOfChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::indexOfStr);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::lastIndexOfStr);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::replaceChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::replaceChar_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiLowerCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiLowerCase_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiUpperCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiUpperCase_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::trim_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::valueOfChar);
+
+} // namespace rtl_str
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ostring/rtl_str.xsce b/sal/qa/rtl/ostring/rtl_str.xsce
new file mode 100644
index 000000000..cd12e72f7
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_str.xsce
@@ -0,0 +1,43 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+# signaled with SIGNAL 11
+rtl_str.compare.compare_000
+rtl_str.compare.compare_000_1
+
+rtl_str.compareIgnoreAsciiCase.compare_000
+rtl_str.compareIgnoreAsciiCase.compare_000_1
+
+rtl_str.hashCode.hashCode_000
+
+rtl_str.indexOfChar.indexOfChar_000
+
+rtl_str.lastIndexOfChar.lastIndexOfChar_000
+
+rtl_str.indexOfStr.indexOfStr_000
+
+rtl_str.lastIndexOfStr.lastIndexOfStr_000
+
+rtl_str.replaceChar.replaceChar_000
+
+rtl_str.replaceChar_WithLength.replaceChar_WithLength_000_1
+
+rtl_str.toAsciiLowerCase.toAsciiLowerCase_000
+
+rtl_str.toAsciiUpperCase.toAsciiUpperCase_000
+
+rtl_str.valueOfChar.valueOfChar_000
diff --git a/sal/qa/rtl/ostring/rtl_string.cxx b/sal/qa/rtl/ostring/rtl_string.cxx
new file mode 100644
index 000000000..71c709519
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_string.cxx
@@ -0,0 +1,169 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/ustring.hxx>
+#include <cstring>
+
+namespace rtl_string
+{
+
+ class getLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void getLength_000()
+ {
+ rtl_string_getLength( NULL );
+ // should not GPF
+ }
+
+ void getLength_001()
+ {
+ OString aStr("Test Length.");
+ sal_Int32 nValue = rtl_string_getLength( aStr.pData );
+
+ CPPUNIT_ASSERT_MESSAGE("Length must equal getLength()", aStr.getLength() == nValue);
+ CPPUNIT_ASSERT_MESSAGE(
+ "Length must equal strlen()",
+ nValue >= 0
+ && (strlen(aStr.getStr())
+ == sal::static_int_cast< sal_uInt32 >(nValue)));
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getLength);
+ CPPUNIT_TEST(getLength_000);
+ CPPUNIT_TEST(getLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getLength
+
+ class newFromString : public CppUnit::TestFixture
+ {
+ public:
+
+ // void newFromString_000()
+ // {
+ // sal_Int32 nValue = rtl_string_newFromString( NULL, NULL );
+ // // should not GPF
+ // }
+
+ void newFromString_001()
+ {
+ OString aStr("Test Length.");
+ rtl_String *pStr = NULL;
+
+ rtl_string_newFromString( &pStr, aStr.pData );
+
+ OString aNewStr(pStr);
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", aStr.equals(aNewStr) == sal_True);
+
+ rtl_string_release(pStr);
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(newFromString);
+ // CPPUNIT_TEST(newFromString_000);
+ CPPUNIT_TEST(newFromString_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class newFromString
+
+ class convertUStringToString : public CppUnit::TestFixture
+ {
+ public:
+
+ // void newFromString_000()
+ // {
+ // sal_Int32 nValue = rtl_string_newFromString( NULL, NULL );
+ // // should not GPF
+ // }
+
+ void convertUStringToString_001()
+ {
+ OUString suString("Hello");
+ OString sString;
+ sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("Hello")) == sal_True);
+ }
+
+ void convertUStringToString_002()
+ {
+ OString sStr("H\xE4llo");
+ OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15);
+
+ OString sString;
+ sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("H\xE4llo")) == sal_True);
+ }
+
+ void convertUStringToString_003()
+ {
+ OString sStr("H\xC3\xA4llo");
+ OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_UTF8);
+
+ OString sString;
+ sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("H\xE4llo")) == sal_True);
+ }
+
+ void convertUStringToString_004()
+ {
+ OString sStr("Tsch\xFC\xDF");
+ OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15);
+ OString sString;
+
+ sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS);
+ /* sal_Bool */ bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS);
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("Tsch\xFC\xDF")) == sal_True);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(convertUStringToString);
+ CPPUNIT_TEST(convertUStringToString_001);
+ CPPUNIT_TEST(convertUStringToString_002);
+ CPPUNIT_TEST(convertUStringToString_003);
+ CPPUNIT_TEST(convertUStringToString_004);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class convertUStringToString
+
+} // namespace rtl_string
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::getLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::newFromString);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::convertUStringToString);
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ostring/rtl_string.xsce b/sal/qa/rtl/ostring/rtl_string.xsce
new file mode 100644
index 000000000..7c8227e49
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_string.xsce
@@ -0,0 +1,18 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+rtl_string.getLength.getLength_000
diff --git a/sal/qa/rtl/oustring/joblist.txt b/sal/qa/rtl/oustring/joblist.txt
new file mode 100644
index 000000000..c309c670d
--- /dev/null
+++ b/sal/qa/rtl/oustring/joblist.txt
@@ -0,0 +1,27 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+# JobFile for rtl_OUString
+# header source sal/inc/rtl/ustring.hxx
+
+rtl_OUString.valueOf.valueOf_double_001
+rtl_OUString.valueOf.valueOf_double_002
+rtl_OUString.valueOf.valueOf_double_003
+rtl_OUString.valueOf.valueOf_double_004
+rtl_OUString.valueOf.valueOf_double_005
+rtl_OUString.valueOf.valueOf_double_006
+rtl_OUString.valueOf.valueOf_double_007
diff --git a/sal/qa/rtl/oustring/rtl_OUString2.cxx b/sal/qa/rtl/oustring/rtl_OUString2.cxx
new file mode 100644
index 000000000..22e731fd1
--- /dev/null
+++ b/sal/qa/rtl/oustring/rtl_OUString2.cxx
@@ -0,0 +1,1068 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// autogenerated file with codegen.pl
+
+#include <memory>
+#include <math.h>
+#include <stdio.h>
+
+#include <algorithm>
+#include <limits>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <config_options.h>
+#include <o3tl/cppunittraitshelper.hxx>
+#include <o3tl/safeint.hxx>
+
+#include <stringhelper.hxx>
+#include <valueequal.hxx>
+
+namespace rtl_OUString
+{
+
+namespace {
+
+// Avoid -fsanitize=undefined warning e.g. "runtime error: value 1e+99 is
+// outside the range of representable values of type 'float'" with Clang prior to
+// <https://github.com/llvm/llvm-project/commit/9e52c43090f8cd980167bbd2719878ae36bcf6b5> "Treat the
+// range of representable values of floating-point types as [-inf, +inf] not as [-max, +max]"
+// (ENABLE_RUNTIME_OPTIMIZATIONS is an approximation for checking whether building is done without
+// -fsanitize=undefined):
+float doubleToFloat(double x) {
+#if !defined __clang__ || __clang_major__ >= 9 || ENABLE_RUNTIME_OPTIMIZATIONS
+ return static_cast<float>(x);
+#else
+ return
+ x < -std::numeric_limits<float>::max()
+ ? -std::numeric_limits<float>::infinity()
+ : x > std::numeric_limits<float>::max()
+ ? std::numeric_limits<float>::infinity()
+ : static_cast<float>(x);
+#endif
+}
+
+}
+
+class number : public CppUnit::TestFixture
+{
+ void number_float_test_impl(float _nValue)
+ {
+ OUString suValue(OUString::number(_nValue));
+ OString sValue;
+ sValue <<= suValue;
+ printf("nFloat := %.9f sValue := %s\n", _nValue, sValue.getStr());
+
+ double nValueATOF = doubleToFloat(atof( sValue.getStr() ));
+
+ bool bEqualResult = is_float_equal(_nValue, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult);
+ }
+
+ void number_float_test(float _nValue)
+ {
+ number_float_test_impl(_nValue);
+
+ // test also the negative part.
+ float nNegativeValue = -_nValue;
+ number_float_test_impl(nNegativeValue);
+ }
+
+public:
+ // insert your test code here.
+ void number_float_test_001()
+ {
+ // this is demonstration code
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ float nValue = 3.0f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_002()
+ {
+ float nValue = 3.5f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_003()
+ {
+ float nValue = 3.0625f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_004()
+ {
+ float nValue = 3.502525f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_005()
+ {
+ float nValue = 3.141592f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_006()
+ {
+ float nValue = 3.5025255f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_007()
+ {
+ float nValue = 3.0039062f;
+ number_float_test(nValue);
+ }
+
+private:
+
+ void number_double_test_impl(double _nValue)
+ {
+ OUString suValue = OUString::number( _nValue );
+ OString sValue;
+ sValue <<= suValue;
+ printf("nDouble := %.20f sValue := %s\n", _nValue, sValue.getStr());
+
+ double nValueATOF = atof( sValue.getStr() );
+
+ bool bEqualResult = is_double_equal(_nValue, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult);
+ }
+
+ void number_double_test(double _nValue)
+ {
+ number_double_test_impl(_nValue);
+
+ // test also the negative part.
+ double nNegativeValue = -_nValue;
+ number_double_test_impl(nNegativeValue);
+ }
+public:
+
+ // number double
+ void number_double_test_001()
+ {
+ double nValue = 3.0;
+ number_double_test(nValue);
+ }
+ void number_double_test_002()
+ {
+ double nValue = 3.5;
+ number_double_test(nValue);
+ }
+ void number_double_test_003()
+ {
+ double nValue = 3.0625;
+ number_double_test(nValue);
+ }
+ void number_double_test_004()
+ {
+ double nValue = 3.1415926535;
+ number_double_test(nValue);
+ }
+ void number_double_test_005()
+ {
+ double nValue = 3.141592653589793;
+ number_double_test(nValue);
+ }
+ void number_double_test_006()
+ {
+ double nValue = 3.1415926535897932;
+ number_double_test(nValue);
+ }
+ void number_double_test_007()
+ {
+ double nValue = 3.14159265358979323;
+ number_double_test(nValue);
+ }
+ void number_double_test_008()
+ {
+ double nValue = 3.141592653589793238462643;
+ number_double_test(nValue);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(number);
+ CPPUNIT_TEST(number_float_test_001);
+ CPPUNIT_TEST(number_float_test_002);
+ CPPUNIT_TEST(number_float_test_003);
+ CPPUNIT_TEST(number_float_test_004);
+ CPPUNIT_TEST(number_float_test_005);
+ CPPUNIT_TEST(number_float_test_006);
+ CPPUNIT_TEST(number_float_test_007);
+
+ CPPUNIT_TEST(number_double_test_001);
+ CPPUNIT_TEST(number_double_test_002);
+ CPPUNIT_TEST(number_double_test_003);
+ CPPUNIT_TEST(number_double_test_004);
+ CPPUNIT_TEST(number_double_test_005);
+ CPPUNIT_TEST(number_double_test_006);
+ CPPUNIT_TEST(number_double_test_007);
+ CPPUNIT_TEST(number_double_test_008);
+ CPPUNIT_TEST_SUITE_END();
+}; // class number
+
+ class toInt: public CppUnit::TestFixture {
+ public:
+ void test() {
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< sal_Int32 >(-0x76543210),
+ (OUString("-76543210").
+ toInt32(16)));
+ // @return 0 if this string represents no number or one of too large magnitude
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< sal_Int32 >(0),
+ (OUString("+FEDCBA98").
+ toInt32(16)));
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< sal_Int64 >(-SAL_CONST_INT64(0x76543210FEDCBA98)),
+ (OUString(
+ "-76543210FEDCBA98").
+ toInt64(16)));
+ // @return 0 if this string represents no number or one of too large magnitude
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< sal_Int64 >(SAL_CONST_INT64(0)),
+ (OUString(
+ "+FEDCBA9876543210").
+ toInt64(16)));
+ }
+
+ CPPUNIT_TEST_SUITE(toInt);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // - toDouble (tests)
+ class toDouble : public CppUnit::TestFixture
+ {
+ public:
+ void toDouble_test_impl(OString const& _sValue)
+ {
+ //printf("the original str is %s\n", _sValue.getStr());
+ double nValueATOF = atof( _sValue.getStr() );
+ //printf("original data is %e\n", nValueATOF);
+ OUString suValue = OUString::createFromAscii( _sValue.getStr() );
+ double nValueToDouble = suValue.toDouble();
+ //printf("result data is %e\n", nValueToDouble);
+
+ bool bEqualResult = is_double_equal(nValueToDouble, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult);
+ }
+
+ void toDouble_test(OString const& _sValue)
+ {
+ toDouble_test_impl(_sValue);
+
+ // test also the negative part.
+ OString sNegativValue("-");
+ sNegativValue += _sValue;
+ toDouble_test_impl(sNegativValue);
+ }
+
+ // insert your test code here.
+ void toDouble_selftest()
+ {
+ printf("Start selftest:\n");
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.01));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00000000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000000000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000000000001));
+ // we check til 15 values after comma
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000000001));
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000000001));
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000000001));
+ printf("Selftest done.\n");
+ }
+
+ void toDouble_test_3()
+ {
+ toDouble_test("3");
+ }
+ void toDouble_test_3_5()
+ {
+ toDouble_test("3.5");
+ }
+ void toDouble_test_3_0625()
+ {
+ toDouble_test("3.0625");
+ }
+ void toDouble_test_pi()
+ {
+ // value from http://www.angio.net/pi/digits/50.txt
+ toDouble_test("3.141592653589793238462643383279502884197169399375");
+ }
+
+ void toDouble_test_1()
+ {
+ toDouble_test("1");
+ }
+ void toDouble_test_10()
+ {
+ toDouble_test("10");
+ }
+ void toDouble_test_100()
+ {
+ toDouble_test("100");
+ }
+ void toDouble_test_1000()
+ {
+ toDouble_test("1000");
+ }
+ void toDouble_test_10000()
+ {
+ toDouble_test("10000");
+ }
+ void toDouble_test_1e99()
+ {
+ toDouble_test("1e99");
+ }
+ void toDouble_test_1e_n99()
+ {
+ toDouble_test("1e-99");
+ }
+ void toDouble_test_1e308()
+ {
+ toDouble_test("1e308");
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toDouble);
+ CPPUNIT_TEST(toDouble_selftest);
+
+ CPPUNIT_TEST(toDouble_test_3);
+ CPPUNIT_TEST(toDouble_test_3_5);
+ CPPUNIT_TEST(toDouble_test_3_0625);
+ CPPUNIT_TEST(toDouble_test_pi);
+ CPPUNIT_TEST(toDouble_test_1);
+ CPPUNIT_TEST(toDouble_test_10);
+ CPPUNIT_TEST(toDouble_test_100);
+ CPPUNIT_TEST(toDouble_test_1000);
+ CPPUNIT_TEST(toDouble_test_10000);
+ CPPUNIT_TEST(toDouble_test_1e99);
+ CPPUNIT_TEST(toDouble_test_1e_n99);
+ CPPUNIT_TEST(toDouble_test_1e308);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class toDouble
+
+ // - toFloat (tests)
+ class toFloat : public CppUnit::TestFixture
+ {
+ public:
+ void toFloat_test_impl(OString const& _sValue)
+ {
+ //printf("the original str is %s\n", _sValue.getStr());
+ float nValueATOF = doubleToFloat(atof( _sValue.getStr() ));
+ //printf("the original str is %.10f\n", nValueATOF);
+ OUString suValue = OUString::createFromAscii( _sValue.getStr() );
+ float nValueToFloat = suValue.toFloat();
+ //printf("the result str is %.10f\n", nValueToFloat);
+
+ bool bEqualResult = is_float_equal(nValueToFloat, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult);
+ }
+
+ void toFloat_test(OString const& _sValue)
+ {
+ toFloat_test_impl(_sValue);
+
+ // test also the negative part.
+ OString sNegativValue("-");
+ sNegativValue += _sValue;
+ toFloat_test_impl(sNegativValue);
+ }
+
+ // insert your test code here.
+ void toFloat_selftest()
+ {
+ printf("Start selftest:\n");
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.01f));
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.001f));
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.0001f));
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.00001f));
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.000002f));
+ CPPUNIT_ASSERT (is_float_equal(1.0f, 1.0000001f));
+ CPPUNIT_ASSERT (is_float_equal(1.0f, 1.00000001f));
+ CPPUNIT_ASSERT (is_float_equal(1.0f, 1.000000001f));
+
+ printf("Selftest done.\n");
+ }
+
+ void toFloat_test_3()
+ {
+ toFloat_test("3");
+ }
+ void toFloat_test_3_5()
+ {
+ toFloat_test("3.5");
+ }
+ void toFloat_test_3_0625()
+ {
+ toFloat_test("3.0625");
+ }
+ void toFloat_test_3_0625_e()
+ {
+ toFloat_test("3.0625e-4");
+ }
+ void toFloat_test_pi()
+ {
+ // value from http://www.angio.net/pi/digits/50.txt
+ toFloat_test("3.141592653589793238462643383279502884197169399375");
+ }
+
+ void toFloat_test_1()
+ {
+ toFloat_test("1");
+ }
+ void toFloat_test_10()
+ {
+ toFloat_test("10");
+ }
+ void toFloat_test_100()
+ {
+ toFloat_test("100");
+ }
+ void toFloat_test_1000()
+ {
+ toFloat_test("1000");
+ }
+ void toFloat_test_10000()
+ {
+ toFloat_test("10000");
+ }
+ void toFloat_test_mix()
+ {
+ toFloat_test("456789321455.123456789012");
+ }
+ void toFloat_test_1e99()
+ {
+ toFloat_test("1e99");
+ }
+ void toFloat_test_1e_n99()
+ {
+ toFloat_test("1e-9");
+ }
+ void toFloat_test_1e308()
+ {
+ toFloat_test("1e308");
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toFloat);
+ CPPUNIT_TEST(toFloat_selftest);
+
+ CPPUNIT_TEST(toFloat_test_3);
+ CPPUNIT_TEST(toFloat_test_3_5);
+ CPPUNIT_TEST(toFloat_test_3_0625);
+ CPPUNIT_TEST(toFloat_test_3_0625_e);
+ CPPUNIT_TEST(toFloat_test_pi);
+ CPPUNIT_TEST(toFloat_test_1);
+ CPPUNIT_TEST(toFloat_test_10);
+ CPPUNIT_TEST(toFloat_test_100);
+ CPPUNIT_TEST(toFloat_test_1000);
+ CPPUNIT_TEST(toFloat_test_10000);
+ CPPUNIT_TEST(toFloat_test_mix);
+ CPPUNIT_TEST(toFloat_test_1e99);
+ CPPUNIT_TEST(toFloat_test_1e_n99);
+ CPPUNIT_TEST(toFloat_test_1e308);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class toFloat
+
+// - lastIndexOf (tests)
+class lastIndexOf : public CppUnit::TestFixture
+{
+
+public:
+ void lastIndexOf_oustring(OUString const& _suStr, OUString const& _suSearchStr, sal_Int32 _nExpectedResultPos)
+ {
+ // Algorithm
+ // search the string _suSearchStr (OUString) in the string _suStr.
+ // check if the _nExpectedResultPos occurs.
+
+ sal_Int32 nPos = _suStr.lastIndexOf(_suSearchStr);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos);
+ }
+
+ void lastIndexOf_salunicode(OUString const& _suStr, sal_Unicode _cuSearchChar, sal_Int32 _nExpectedResultPos)
+ {
+ // Algorithm
+ // search the unicode char _suSearchChar (sal_Unicode) in the string _suStr.
+ // check if the _nExpectedResultPos occurs.
+
+ sal_Int32 nPos = _suStr.lastIndexOf(_cuSearchChar);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos);
+ }
+
+ void lastIndexOf_oustring_offset(OUString const& _suStr, OUString const& _suSearchStr, sal_Int32 _nExpectedResultPos, sal_Int32 _nStartOffset)
+ {
+ sal_Int32 nPos = _suStr.lastIndexOf(_suSearchStr, _nStartOffset);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos);
+ }
+
+ void lastIndexOf_salunicode_offset(OUString const& _suStr, sal_Unicode _cuSearchChar, sal_Int32 _nExpectedResultPos, sal_Int32 _nStartOffset)
+ {
+ sal_Int32 nPos = _suStr.lastIndexOf(_cuSearchChar, _nStartOffset);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos);
+ }
+
+ void lastIndexOf_test_oustring_offset_001()
+ {
+ // search for sun, start at the end, found (pos==0)
+ OUString aStr("sun java system");
+ lastIndexOf_oustring_offset(aStr, "sun", 0, aStr.getLength());
+ }
+
+ void lastIndexOf_test_oustring_offset_002()
+ {
+ // search for sun, start at pos = 3, found (pos==0)
+ lastIndexOf_oustring_offset("sun java system", "sun", 0, 3);
+ }
+
+ void lastIndexOf_test_oustring_offset_003()
+ {
+ // search for sun, start at pos = 2, found (pos==-1)
+ lastIndexOf_oustring_offset("sun java system", "sun", -1, 2);
+ }
+
+ void lastIndexOf_test_oustring_offset_004()
+ {
+ // search for sun, start at the end, found (pos==0)
+ lastIndexOf_oustring_offset("sun java system", "sun", -1, 1);
+ }
+
+ void lastIndexOf_test_oustring_001()
+ {
+ // search for sun, found (pos==0)
+ lastIndexOf_oustring("sun java system", "sun", 0);
+ }
+
+ void lastIndexOf_test_oustring_002()
+ {
+ // search for sun, found (pos==4)
+ lastIndexOf_oustring("the sun java system", "sun", 4);
+ }
+
+ void lastIndexOf_test_oustring_003()
+ {
+ // search for sun, found (pos==8)
+ lastIndexOf_oustring("the sun sun java system", "sun", 8);
+ }
+
+ void lastIndexOf_test_oustring_004()
+ {
+ // search for sun, found (pos==8)
+ lastIndexOf_oustring("the sun sun", "sun", 8);
+ }
+
+ void lastIndexOf_test_oustring_005()
+ {
+ // search for sun, found (pos==4)
+ lastIndexOf_oustring("the sun su", "sun", 4);
+ }
+
+ void lastIndexOf_test_oustring_006()
+ {
+ // search for sun, found (pos==-1)
+ lastIndexOf_oustring("the su su", "sun", -1);
+ }
+
+ void lastIndexOf_test_oustring_007()
+ {
+ // search for earth, not found (-1)
+ lastIndexOf_oustring("the su su", "earth", -1);
+ }
+
+ void lastIndexOf_test_oustring_008()
+ {
+ // search for earth, not found (-1)
+ lastIndexOf_oustring("", "earth", -1);
+ }
+
+ void lastIndexOf_test_oustring_009()
+ {
+ // search for earth, not found (-1)
+ lastIndexOf_oustring("", "", -1);
+
+ }
+
+ void lastIndexOf_test_salunicode_001()
+ {
+ // search for 's', found (19)
+ sal_Unicode suChar = L's';
+ lastIndexOf_salunicode("the sun sun java system", suChar, 19);
+ }
+
+ void lastIndexOf_test_salunicode_002()
+ {
+ // search for 'x', not found (-1)
+ sal_Unicode suChar = L'x';
+ lastIndexOf_salunicode("the sun sun java system", suChar, -1);
+ }
+
+ void lastIndexOf_test_salunicode_offset_001()
+ {
+ // search for 's', start from pos last char, found (19)
+ OUString aStr("the sun sun java system");
+ sal_Unicode cuChar = L's';
+ lastIndexOf_salunicode_offset(aStr, cuChar, 19, aStr.getLength());
+ }
+ void lastIndexOf_test_salunicode_offset_002()
+ {
+ // search for 's', start pos is last occur from search behind, found (17)
+ sal_Unicode cuChar = L's';
+ lastIndexOf_salunicode_offset("the sun sun java system", cuChar, 17, 19);
+ }
+ void lastIndexOf_test_salunicode_offset_003()
+ {
+ // search for 't', start pos is 1, found (0)
+ sal_Unicode cuChar = L't';
+ lastIndexOf_salunicode_offset("the sun sun java system", cuChar, 0, 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOf);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_001);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_002);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_003);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_004);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_005);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_006);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_007);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_008);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_009);
+
+ CPPUNIT_TEST(lastIndexOf_test_oustring_offset_001);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_offset_002);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_offset_003);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_offset_004);
+
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_001);
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_002);
+
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_001);
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_002);
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_003);
+
+ CPPUNIT_TEST_SUITE_END();
+}; // class lastIndexOf
+
+// - getToken (tests)
+class getToken : public CppUnit::TestFixture
+{
+
+public:
+ void getToken_000()
+ {
+ OUString suTokenStr;
+
+ sal_Int32 nIndex = 0;
+ do
+ {
+ suTokenStr.getToken( 0, ';', nIndex );
+ }
+ while ( nIndex >= 0 );
+ printf("Index %" SAL_PRIdINT32 "\n", nIndex);
+ // should not GPF
+ }
+
+ void getToken_001()
+ {
+ OUString suTokenStr("a;b");
+
+ sal_Int32 nIndex = 0;
+
+ OUString suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken);
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast<sal_Int32>(-1), nIndex);
+ }
+
+ void getToken_002()
+ {
+ OUString suTokenStr("a;b.c");
+
+ sal_Int32 nIndex = 0;
+
+ OUString suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'c'", OUString("c"), suToken );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast<sal_Int32>(-1), nIndex);
+ }
+
+ void getToken_003()
+ {
+ OUString suTokenStr("a;;b");
+
+ sal_Int32 nIndex = 0;
+
+ OUString suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be empty", suToken.isEmpty());
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast<sal_Int32>(-1), nIndex);
+ }
+
+ void getToken_004()
+ {
+ OUString suTokenStr("longer.then.ever.");
+
+ sal_Int32 nIndex = 0;
+
+ OUString suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'longer'", OUString("longer"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'then'", OUString("then"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'ever'", OUString("ever"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be empty", suToken.isEmpty());
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast<sal_Int32>(-1), nIndex);
+ }
+
+ void getToken_005() {
+ OUString ab("ab");
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "token should be 'ab'", ab, ab.getToken(0, '-', n));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("n should be -1", static_cast<sal_Int32>(-1), n);
+ CPPUNIT_ASSERT_MESSAGE(
+ "token should be empty", ab.getToken(0, '-', n).isEmpty());
+ }
+
+ void getToken_006()
+ {
+ OUString suTokenStr;
+ auto pTokenStr = suTokenStr.getStr();
+ sal_uInt64 n64 = reinterpret_cast<sal_uInt64>(pTokenStr) / sizeof(sal_Unicode);
+ // Point either to 0x0, or to some random address -4GiB away from this string
+ sal_Int32 n = n64 > o3tl::make_unsigned(SAL_MAX_INT32) ? -SAL_MAX_INT32
+ : -static_cast<sal_Int32>(n64);
+ suTokenStr.getToken(0, ';', n);
+ // should not GPF with negative index
+ }
+
+ CPPUNIT_TEST_SUITE(getToken);
+ CPPUNIT_TEST(getToken_000);
+ CPPUNIT_TEST(getToken_001);
+ CPPUNIT_TEST(getToken_002);
+ CPPUNIT_TEST(getToken_003);
+ CPPUNIT_TEST(getToken_004);
+ CPPUNIT_TEST(getToken_005);
+ CPPUNIT_TEST(getToken_006);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getToken
+
+class convertToString: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(convertToString);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void convertToString::test() {
+ static constexpr OUStringLiteral utf16 = u"A\u00E4a";
+ OString s;
+ CPPUNIT_ASSERT(
+ OUString(utf16).convertToString(
+ &s, RTL_TEXTENCODING_UTF7,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
+ RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT_EQUAL(
+ OString(RTL_CONSTASCII_STRINGPARAM("A+AOQ-a")), s);
+}
+
+// - string construction & interning (tests)
+
+class construction : public CppUnit::TestFixture
+{
+public:
+ void construct()
+ {
+#ifdef RTL_INLINE_STRINGS
+ OUString aFoo( "foo" );
+ CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[0] == 'f');
+ CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[1] == 'o');
+ CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[2] == 'o');
+ CPPUNIT_ASSERT_MESSAGE("string length", aFoo.getLength() == 3);
+
+ OUString aBaa( "this is a very long string with a lot of long things inside it and it goes on and on and on forever etc." );
+ CPPUNIT_ASSERT_MESSAGE("string length", aBaa.getLength() == 104);
+ // Dig at the internals ... FIXME: should we have the bit-flag defines public ?
+ CPPUNIT_ASSERT_MESSAGE("string static flags", (aBaa.pData->refCount & 1<<30) != 0);
+#endif
+ }
+
+ void intern()
+ {
+ // The empty string is 'static' a special case ...
+ OUString().intern();
+ OUString::intern( "",strlen(""),RTL_TEXTENCODING_ASCII_US );
+
+ OUString aFoo( "foo" );
+ OUString aFooIntern = aFoo.intern();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "string contents", OUString("foo"), aFooIntern);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string length", static_cast<sal_Int32>(3), aFooIntern.getLength());
+ // We have to dup due to no atomic 'intern' bit-set operation
+ CPPUNIT_ASSERT_MESSAGE("intern dups", aFoo.pData != aFooIntern.pData);
+
+ // Test interning lots of things
+ int i;
+ static const int nSequence = 4096;
+ std::unique_ptr<OUString[]> pStrs(new OUString[nSequence]);
+ for (i = 0; i < nSequence; i++)
+ {
+ pStrs[i] = OUString( OUString::number( sqrt( static_cast<double>(i) ) ) ).intern();
+ }
+ for (i = 0; i < nSequence; i++)
+ {
+ OUString aNew = OUString( OUString::number( sqrt( static_cast<double>(i) ) ) ).intern();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("double intern failed",
+ pStrs[i].pData, aNew.pData);
+ }
+ }
+
+ CPPUNIT_TEST_SUITE(construction);
+ CPPUNIT_TEST(construct);
+ CPPUNIT_TEST(intern);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+class indexOfAscii: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(indexOfAscii);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void indexOfAscii::test() {
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString().indexOf(""));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString().lastIndexOf(""));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), OUString("foo").indexOf("foo"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), OUString("foo").lastIndexOf("foo"));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(2), OUString("fofoobar").indexOf("foo"));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), OUString("foofoofob").lastIndexOf("foo"));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), OUString("foofoobar").indexOf("foo", 1));
+}
+
+class endsWith: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(endsWith);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void endsWith::test() {
+ CPPUNIT_ASSERT_EQUAL(true, OUString().endsWith(""));
+ CPPUNIT_ASSERT_EQUAL(false, OUString().endsWith("foo"));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("bar").endsWith("bar"));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("foobar").endsWith("bar"));
+ CPPUNIT_ASSERT_EQUAL(false, OUString("FOOBAR").endsWith("bar"));
+}
+
+class isEmpty: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(isEmpty);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void isEmpty::test() {
+ OUString aString;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Newly constructed string should be empty", true, aString.isEmpty() );
+
+ aString = "Not empty any more";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "String should not be empty", false, aString.isEmpty() );
+
+ aString.clear();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "aString.clear(), so should now be empty", true, aString.isEmpty() );
+}
+
+
+class createFromCodePoints: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(createFromCodePoints);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void createFromCodePoints::test() {
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(0),
+ OUString(static_cast< sal_uInt32 const * >(nullptr), 0).getLength());
+ sal_uInt32 cp[] = { 0, 0xD800, 0xFFFF, 0x10000, 0x10FFFF };
+ // non-const, to avoid loplugin:stringliteralvar
+ OUString s(cp, SAL_N_ELEMENTS(cp));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'\0', s[0]);
+ CPPUNIT_ASSERT_EQUAL(u'\xD800', s[1]);
+ CPPUNIT_ASSERT_EQUAL(u'\xFFFF', s[2]);
+ CPPUNIT_ASSERT_EQUAL(u'\xD800', s[3]);
+ CPPUNIT_ASSERT_EQUAL(u'\xDC00', s[4]);
+ CPPUNIT_ASSERT_EQUAL(u'\xDBFF', s[5]);
+ CPPUNIT_ASSERT_EQUAL(u'\xDFFF', s[6]);
+}
+
+class iterateCodePoints: public CppUnit::TestFixture {
+public:
+ void testNotWellFormed();
+
+ CPPUNIT_TEST_SUITE(iterateCodePoints);
+ CPPUNIT_TEST(testNotWellFormed);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void iterateCodePoints::testNotWellFormed() {
+ static constexpr OUStringLiteral utf16 =
+ u"\U00010000A\U0010FFFF\xDDEF\xD9AB";
+ OUString s(utf16);
+ sal_Int32 i = 0;
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x0041), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10FFFF), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDDEF), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xD9AB), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xD9AB), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDDEF), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10FFFF), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x0041), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ i = 1;
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDC00), s.iterateCodePoints(&i, 2));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i);
+ i = 4;
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i, -3));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+}
+
+class convertFromString: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(convertFromString);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void convertFromString::test() {
+ OUString t;
+ CPPUNIT_ASSERT(
+ !rtl_convertStringToUString(
+ &t.pData, RTL_CONSTASCII_STRINGPARAM("\x80"), RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT(
+ !rtl_convertStringToUString(
+ &t.pData, RTL_CONSTASCII_STRINGPARAM("\xC0"), RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT(
+ !rtl_convertStringToUString(
+ &t.pData, RTL_CONSTASCII_STRINGPARAM("\xFF"), RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT(
+ rtl_convertStringToUString(
+ &t.pData, RTL_CONSTASCII_STRINGPARAM("abc"), RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT_EQUAL( OUString("abc"), t );
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::number);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toInt);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toDouble);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toFloat);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::lastIndexOf);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::getToken);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::convertToString);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::construction);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::indexOfAscii);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::endsWith);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::isEmpty);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::createFromCodePoints);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::iterateCodePoints);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::convertFromString);
+
+} // namespace rtl_OUString
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustring/rtl_ustr.cxx b/sal/qa/rtl/oustring/rtl_ustr.cxx
new file mode 100644
index 000000000..f5c405dfd
--- /dev/null
+++ b/sal/qa/rtl/oustring/rtl_ustr.cxx
@@ -0,0 +1,1080 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <o3tl/cppunittraitshelper.hxx>
+#include <rtl/ustring.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace rtl_ustr
+{
+
+ class compare : public CppUnit::TestFixture
+ {
+ void compare_001()
+ {
+ OUString aStr1;
+ OUString aStr2;
+
+ sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("Line must be equal.");
+
+ sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_003()
+ {
+ OUString aStr1("Line must differ.");
+ OUString aStr2("Line foo bar, ok, differ.");
+
+ sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(compare);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST_SUITE_END();
+}; // class compare
+
+ class compareIgnoreAsciiCase : public CppUnit::TestFixture
+ {
+ void compare_001()
+ {
+ OUString aStr1;
+ OUString aStr2;
+
+ sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("Line must be equal.");
+
+ sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002_1()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("LINE MUST BE EQUAL.");
+
+ sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue);
+ }
+
+ void compare_003()
+ {
+ OUString aStr1("Line must differ.");
+ OUString aStr2("Line foo bar, ok, differ.");
+
+ sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(compareIgnoreAsciiCase);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_002_1);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compareIgnoreAsciiCase
+
+ class shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture
+ {
+ void compare_000()
+ {
+ rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( nullptr, 0, nullptr, 0, 0);
+ }
+
+ void compare_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), nullptr, 0, 1);
+ }
+ void compare_001()
+ {
+ OUString aStr1;
+ OUString aStr2;
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), aStr2.getStr(), aStr2.getLength(), aStr1.getLength());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("Line must be equal.");
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void compare_002_1()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("LINE MUST BE EQUAL.");
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue);
+ }
+
+ void compare_003()
+ {
+ OUString aStr1("Line must differ.");
+ OUString aStr2("Line foo bar, ok, differ.");
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ 5);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal first 5 characters.", sal_Int32(0), nValue);
+ }
+
+ void compare_004()
+ {
+ OUString aStr1("Line must differ.");
+ OUString aStr2("Line foo bar, ok, differ.");
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(shortenedCompareIgnoreAsciiCase_WithLength);
+ CPPUNIT_TEST(compare_000);
+ CPPUNIT_TEST(compare_000_1);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_002_1);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST(compare_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class compare
+
+//
+//
+// class hashCode : public CppUnit::TestFixture
+// {
+// void hashCode_000()
+// {
+// sal_Int32 nHashCode = rtl_ustr_hashCode( nullptr );
+// volatile int dummy = 0;
+// }
+//
+// void hashCode_001()
+// {
+// OString aStr1 = "Line for a hashCode.";
+// sal_Int32 nHashCode = rtl_ustr_hashCode( aStr1.getStr() );
+// printf("hashcode: %d\n", nHashCode);
+// // CPPUNIT_ASSERT_MESSAGE("failed.", nValue == 0);
+// }
+//
+// void hashCode_002()
+// {
+// OString aStr1 = "Line for a hashCode.";
+// sal_Int32 nHashCode1 = rtl_ustr_hashCode( aStr1.getStr() );
+//
+// OString aStr2 = "Line for a hashCode.";
+// sal_Int32 nHashCode2 = rtl_ustr_hashCode( aStr2.getStr() );
+//
+// CPPUNIT_ASSERT_MESSAGE("hashcodes must be equal.", nHashCode1 == nHashCode2 );
+// }
+//
+// void hashCode_003()
+// {
+// OString aStr1 = "Line for a hashCode.";
+// sal_Int32 nHashCode1 = rtl_ustr_hashCode( aStr1.getStr() );
+//
+// OString aStr2 = "Line for another hashcode.";
+// sal_Int32 nHashCode2 = rtl_ustr_hashCode( aStr2.getStr() );
+//
+// CPPUNIT_ASSERT_MESSAGE("hashcodes must differ.", nHashCode1 != nHashCode2 );
+// }
+//
+// // Change the following lines only, if you add, remove or rename
+// // member functions of the current class,
+// // because these macros are need by auto register mechanism.
+//
+// CPPUNIT_TEST_SUITE(hashCode);
+// CPPUNIT_TEST(hashCode_000);
+// CPPUNIT_TEST(hashCode_001);
+// CPPUNIT_TEST(hashCode_002);
+// CPPUNIT_TEST(hashCode_003);
+// CPPUNIT_TEST_SUITE_END();
+// }; // class compare
+
+ class indexOfChar : public CppUnit::TestFixture
+ {
+ void indexOfChar_000()
+ {
+ sal_Int32 nIndex = rtl_ustr_indexOfChar( u"", 0 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Trailing zero character is not part of the string",
+ sal_Int32(-1), nIndex);
+ }
+
+ void indexOfChar_001()
+ {
+ OUString aStr1("Line for an indexOfChar.");
+
+ sal_Int32 nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'L' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'i' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(1), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'n' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(2), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'e' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(3), nIndex);
+ }
+
+ void indexOfChar_002()
+ {
+ OUString aStr1("Line for an indexOfChar.");
+ sal_Int32 nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'y' );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(indexOfChar);
+ CPPUNIT_TEST(indexOfChar_000);
+ CPPUNIT_TEST(indexOfChar_001);
+ CPPUNIT_TEST(indexOfChar_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class indexOfChar
+
+ class lastIndexOfChar : public CppUnit::TestFixture
+ {
+ void lastIndexOfChar_000()
+ {
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfChar( u"", 0 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Trailing zero character is not part of the string",
+ sal_Int32(-1), nIndex);
+ }
+
+ void lastIndexOfChar_001()
+ {
+ OUString aStr1("Line for a lastIndexOfChar.");
+
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'C' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(22), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'h' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(23), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'a' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(24), nIndex);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'r' );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(25), nIndex);
+ }
+
+ void lastIndexOfChar_002()
+ {
+ OUString aStr1("Line for a lastIndexOfChar.");
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'y' );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOfChar);
+ CPPUNIT_TEST(lastIndexOfChar_000);
+ CPPUNIT_TEST(lastIndexOfChar_001);
+ CPPUNIT_TEST(lastIndexOfChar_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class lastIndexOfChar
+
+ class indexOfStr : public CppUnit::TestFixture
+ {
+ void indexOfStr_000()
+ {
+ OUString aStr1("Line for an indexOfStr.");
+ sal_Int32 nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), u"" );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("an empty substring is always not findable",
+ sal_Int32(-1), nIndex);
+ }
+
+ void indexOfStr_001()
+ {
+ OUString aStr1("Line for an indexOfStr.");
+
+ OUString suSearch("Line");
+ sal_Int32 nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex);
+
+ suSearch = "for";
+ nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(5), nIndex);
+
+ suSearch = "a";
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(9), nIndex);
+
+ suSearch = "an index";
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(9), nIndex);
+ }
+
+ void indexOfStr_002()
+ {
+ OUString aStr1("Line for an indexOfStr.");
+ OUString suSearch("not exist");
+ sal_Int32 nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(indexOfStr);
+ CPPUNIT_TEST(indexOfStr_000);
+ CPPUNIT_TEST(indexOfStr_001);
+ CPPUNIT_TEST(indexOfStr_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class lastIndexOfStr : public CppUnit::TestFixture
+ {
+ void lastIndexOfStr_000()
+ {
+ OUString aStr1("Line for a lastIndexOfStr.");
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), u"" );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("an empty substring is always not findable",
+ sal_Int32(-1), nIndex);
+ }
+
+ void lastIndexOfStr_001()
+ {
+ OUString aStr1("Line for a lastIndexOfStr.");
+ OUString aSearchStr("Index");
+
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(15), nIndex);
+
+ /* OString */ aSearchStr = OUString("Line");
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex);
+
+ /* OString */ aSearchStr = OUString();
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ void lastIndexOfStr_002()
+ {
+ OUString aStr1("Line for a lastIndexOfStr.");
+ OUString aSearchStr("foo");
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex);
+ }
+
+ void lastIndexOfStr_003()
+ {
+ OUString aStr1("Line for a lastIndexOfStr.");
+ OUString aSearchStr("O");
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(20), nIndex);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOfStr);
+ CPPUNIT_TEST(lastIndexOfStr_000);
+ CPPUNIT_TEST(lastIndexOfStr_001);
+ CPPUNIT_TEST(lastIndexOfStr_002);
+ CPPUNIT_TEST(lastIndexOfStr_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class lastIndexOfStr
+
+ class replaceChar : public CppUnit::TestFixture
+ {
+ void replaceChar_001()
+ {
+ sal_Unicode pStr[] = u"replace char.";
+ OUString aShouldStr1("ruplacu char.");
+
+ rtl_ustr_replaceChar( pStr, 'e', 'u' );
+ OUString suStr(pStr);
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(replaceChar);
+ CPPUNIT_TEST(replaceChar_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class replaceChar_WithLength : public CppUnit::TestFixture
+ {
+ void replaceChar_WithLength_000()
+ {
+ rtl_ustr_replaceChar_WithLength( nullptr, 0, 0, 0 );
+ }
+
+ void replaceChar_WithLength_001()
+ {
+ sal_Unicode pStr[] = u"replace char.";
+ OUString aShouldStr1("ruplace char.");
+
+ rtl_ustr_replaceChar_WithLength( pStr, 6, 'e', 'u' );
+ OUString suStr(pStr);
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr));
+ }
+
+ void replaceChar_WithLength_002()
+ {
+ sal_Unicode pStr[] = u"eeeeeeeeeeeee";
+ OUString aShouldStr1("uuuuuueeeeeee");
+
+ rtl_ustr_replaceChar_WithLength( pStr, 6, 'e', 'u' );
+ OUString suStr(pStr);
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(replaceChar_WithLength);
+ CPPUNIT_TEST(replaceChar_WithLength_000);
+ CPPUNIT_TEST(replaceChar_WithLength_001);
+ CPPUNIT_TEST(replaceChar_WithLength_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiLowerCase : public CppUnit::TestFixture
+ {
+ void toAsciiLowerCase_001()
+ {
+ sal_Unicode pStr[] = u"CHANGE THIS TO ASCII LOWER CASE.";
+ OUString aShouldStr1("change this to ascii lower case.");
+
+ rtl_ustr_toAsciiLowerCase( pStr );
+ OUString suStr(pStr);
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiLowerCase);
+ CPPUNIT_TEST(toAsciiLowerCase_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiLowerCase_WithLength : public CppUnit::TestFixture
+ {
+ void toAsciiLowerCase_WithLength_000()
+ {
+ rtl_ustr_toAsciiLowerCase_WithLength( nullptr, 0 );
+ }
+
+ void toAsciiLowerCase_WithLength_001()
+ {
+ sal_Unicode pStr[] = u"CHANGE THIS TO ASCII LOWER CASE.";
+ OUString aShouldStr1("change thiS TO ASCII LOWER CASE.");
+
+ rtl_ustr_toAsciiLowerCase_WithLength( pStr, 10 );
+ OUString suStr(pStr);
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiLowerCase_WithLength);
+ CPPUNIT_TEST(toAsciiLowerCase_WithLength_000);
+ CPPUNIT_TEST(toAsciiLowerCase_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiUpperCase : public CppUnit::TestFixture
+ {
+ void toAsciiUpperCase_001()
+ {
+ sal_Unicode pStr[] = u"change this to ascii upper case.";
+ OUString aShouldStr1("CHANGE THIS TO ASCII UPPER CASE.");
+
+ rtl_ustr_toAsciiUpperCase( pStr );
+ OUString suStr(pStr);
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiUpperCase);
+ CPPUNIT_TEST(toAsciiUpperCase_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiUpperCase_WithLength : public CppUnit::TestFixture
+ {
+ void toAsciiUpperCase_WithLength_000()
+ {
+ rtl_ustr_toAsciiUpperCase_WithLength( nullptr, 0 );
+ }
+
+ void toAsciiUpperCase_WithLength_001()
+ {
+ sal_Unicode pStr[] = u"change this to ascii lower case.";
+ OUString aShouldStr1("CHANGE THIs to ascii lower case.");
+
+ rtl_ustr_toAsciiUpperCase_WithLength( pStr, 10 );
+ OUString suStr(pStr);
+
+ // printf("Uppercase with length: '%s'\n", aStr1.getStr());
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiUpperCase_WithLength);
+ CPPUNIT_TEST(toAsciiUpperCase_WithLength_000);
+ CPPUNIT_TEST(toAsciiUpperCase_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class trim_WithLength : public CppUnit::TestFixture
+ {
+ void trim_WithLength_000()
+ {
+ rtl_ustr_trim_WithLength(nullptr, 0);
+ // should not GPF
+ }
+
+ void trim_WithLength_000_1()
+ {
+ sal_Unicode pStr[] = u" trim this";
+
+ rtl_ustr_trim_WithLength( pStr, 0 );
+ }
+
+ void trim_WithLength_001()
+ {
+ sal_Unicode pStr[] = u" trim this";
+
+ rtl_ustr_trim_WithLength( pStr, 2 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should be empty", OUString(pStr).isEmpty());
+ }
+
+ void trim_WithLength_002()
+ {
+ sal_Unicode pStr[] = u"trim this";
+
+ rtl_ustr_trim_WithLength( pStr, 5 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", sal_Int32(4), OUString(pStr).getLength());
+ }
+
+ void trim_WithLength_003()
+ {
+ sal_Unicode pStr[] = u" trim this";
+
+ rtl_ustr_trim_WithLength( pStr, 11 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", sal_Int32(4), OUString(pStr).getLength());
+ }
+
+ void trim_WithLength_004()
+ {
+ sal_Unicode pStr[] = u"\r\n\t \n\r trim \n this";
+
+ rtl_ustr_trim_WithLength( pStr, 17 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", sal_Int32(4), OUString(pStr).getLength());
+ }
+
+ void trim_WithLength_005()
+ {
+ sal_Unicode pStr[] = u"\r\n\t \n\r trim \t this \n\r\t\t ";
+
+ rtl_ustr_trim_WithLength( pStr, std::size(pStr) - 1 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim \\t this'", sal_Int32(11), OUString(pStr).getLength());
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(trim_WithLength);
+ CPPUNIT_TEST(trim_WithLength_000);
+ CPPUNIT_TEST(trim_WithLength_000_1);
+ CPPUNIT_TEST(trim_WithLength_001);
+ CPPUNIT_TEST(trim_WithLength_002);
+ CPPUNIT_TEST(trim_WithLength_003);
+ CPPUNIT_TEST(trim_WithLength_004);
+ CPPUNIT_TEST(trim_WithLength_005);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class valueOfChar : public CppUnit::TestFixture
+ {
+ void valueOfChar_001()
+ {
+ sal_Unicode pStr[RTL_USTR_MAX_VALUEOFCHAR];
+ rtl_ustr_valueOfChar(pStr, 'A');
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'A'", u'A', pStr[0]);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(valueOfChar);
+ CPPUNIT_TEST(valueOfChar_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class ascii_compare_WithLength : public CppUnit::TestFixture
+ {
+ void zero_length()
+ {
+ sal_Unicode pUnicode[] = {0xffff, 0xffff};
+ char const pAscii[] = "reference";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(pUnicode, 0, pAscii);
+ CPPUNIT_ASSERT_LESS(sal_Int32(0), value);
+ }
+
+ void equal_ascii_shorter()
+ {
+ OUString refStr("referenceString");
+ char const pAscii[] = "reference";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+ CPPUNIT_ASSERT_GREATER(sal_Int32(0), value);
+ }
+
+ void equal_ascii_shorter_asciiLength()
+ {
+ OUString refStr("referenceString");
+ char const pAscii[] = "reference";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, rtl_str_getLength(pAscii), pAscii);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), value);
+ }
+
+ void equal_ref_shorter()
+ {
+ OUString refStr("reference");
+ char const pAscii[] = "referenceString";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+ CPPUNIT_ASSERT_LESS(sal_Int32(0), value);
+ }
+
+ void equal()
+ {
+ OUString refStr("reference");
+ char const pAscii[] = "reference";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), value);
+ }
+
+ void unequal_reference_bigger()
+ {
+ OUString refStr("defghi");
+ char const pAscii[] = "abc";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+ CPPUNIT_ASSERT_GREATER(sal_Int32(0), value);
+ }
+
+ void unequal_ascii_bigger()
+ {
+ OUString refStr("abc");
+ char const pAscii[] = "defghi";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+
+ CPPUNIT_ASSERT_LESS(sal_Int32(0), value);
+ }
+
+ CPPUNIT_TEST_SUITE(ascii_compare_WithLength);
+ CPPUNIT_TEST(zero_length);
+ CPPUNIT_TEST(equal_ascii_shorter);
+ CPPUNIT_TEST(equal_ascii_shorter_asciiLength);
+ CPPUNIT_TEST(equal_ref_shorter);
+ CPPUNIT_TEST(equal);
+ CPPUNIT_TEST(unequal_reference_bigger);
+ CPPUNIT_TEST(unequal_ascii_bigger);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class ascii_shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture
+ {
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000()
+ {
+ rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( nullptr, 0, "", 0);
+ // should not GPF
+ }
+
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), "", 0);
+ // should not GPF
+ }
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_2()
+ {
+ OUString aStr1("Line must be equal.");
+ OString sStr2 = "Line is shorter.";
+ rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), sStr2.getLength(), sStr2.getStr(), 0);
+ // should not GPF
+ }
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1.getStr(), 0, sStr2.getStr(), 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr(), sStr2.getLength());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line must be differ and longer.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr(), sStr2.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_shortenedCompareIgnoreAsciiCase_WithLength);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_1);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_2);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_001);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_002);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_shortenedCompareIgnoreAsciiCase_WithLength
+
+ class ascii_compareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture
+ {
+ void ascii_compareIgnoreAsciiCase_WithLength_000()
+ {
+ rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( nullptr, 0, "");
+ // should not GPF
+ }
+
+ void ascii_compareIgnoreAsciiCase_WithLength_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( aStr1.getStr(), 0, "");
+ // should not GPF
+ }
+ void ascii_compareIgnoreAsciiCase_WithLength_000_2()
+ {
+ OUString aStr1("Line must be equal.");
+ OString sStr2 = "Line is shorter.";
+ rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( aStr1.getStr(), sStr2.getLength(), sStr2.getStr());
+ // should not GPF
+ }
+ void ascii_compareIgnoreAsciiCase_WithLength_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1.getStr(), 0, sStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compareIgnoreAsciiCase_WithLength failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void ascii_compareIgnoreAsciiCase_WithLength_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void ascii_compareIgnoreAsciiCase_WithLength_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line must be differ and longer.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_compareIgnoreAsciiCase_WithLength);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000_1);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000_2);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_001);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_002);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_compareIgnoreAsciiCase_WithLength
+
+ class ascii_compare : public CppUnit::TestFixture
+ {
+ void ascii_compare_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void ascii_compare_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void ascii_compare_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_compare);
+ CPPUNIT_TEST(ascii_compare_001);
+ CPPUNIT_TEST(ascii_compare_002);
+ CPPUNIT_TEST(ascii_compare_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_compare
+
+ class ascii_compareIgnoreAsciiCase : public CppUnit::TestFixture
+ {
+ void ascii_compareIgnoreAsciiCase_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void ascii_compareIgnoreAsciiCase_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue);
+ }
+
+ void ascii_compareIgnoreAsciiCase_002_1()
+ {
+ OUString suStr1("Line must be equal, when ignore case.");
+ OString sStr2 = "LINE MUST BE EQUAL, WHEN IGNORE CASE.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue);
+ }
+
+ void ascii_compareIgnoreAsciiCase_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ //! LLA: some more tests with some high level strings
+
+ // void ascii_compareIgnoreAsciiCase_001()
+ // {
+ // OUString suStr1("change this to ascii upper case.");
+ // OUString aShouldStr1("CHANGE THIS TO ASCII UPPER CASE.");
+ //
+ // sal_uInt32 nLength = suStr1.getLength() * sizeof(sal_Unicode);
+ // sal_Unicode* pStr = (sal_Unicode*) malloc(nLength + sizeof(sal_Unicode)); // length + null terminator
+ // CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr);
+ // memset(pStr, 0, nLength + sizeof(sal_Unicode));
+ // memcpy(pStr, suStr1.getStr(), nLength);
+ //
+ // rtl_ustr_ascii_compareIgnoreAsciiCase( pStr );
+ // OUString suStr(pStr, suStr1.getLength());
+ //
+ // CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr));
+ // free(pStr);
+ // }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_compareIgnoreAsciiCase);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_001);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_002);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_002_1);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_compareIgnoreAsciiCase
+
+ // sample out of inc/rtl/ustring.hxx
+ // rtl_uString * pToken = nullptr;
+ // sal_Int32 nIndex = 0;
+ // do
+ // {
+ // ...
+ // nIndex = rtl_uString_getToken(&pToken, pStr, 0, ';', nIndex);
+ // ...
+ // }
+ // while (nIndex >= 0);
+
+ class getToken : public CppUnit::TestFixture
+ {
+ void getToken_000()
+ {
+ OUString s("a;b;c");
+ // Replace the string in place
+ const sal_Int32 i = rtl_uString_getToken(&s.pData, s.pData, 1, ';', 0);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), i);
+ CPPUNIT_ASSERT_EQUAL(OUString("b"), s);
+ }
+
+ CPPUNIT_TEST_SUITE(getToken);
+ CPPUNIT_TEST(getToken_000);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_compareIgnoreAsciiCase
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::compare);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::compareIgnoreAsciiCase);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compare_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::shortenedCompareIgnoreAsciiCase_WithLength);
+// CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::hashCode);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::indexOfChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::lastIndexOfChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::indexOfStr);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::lastIndexOfStr);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::replaceChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::replaceChar_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiLowerCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiLowerCase_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiUpperCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiUpperCase_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::trim_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::valueOfChar);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compare);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compareIgnoreAsciiCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compareIgnoreAsciiCase_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_shortenedCompareIgnoreAsciiCase_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::getToken);
+
+} // namespace rtl_ustr
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustring/rtl_ustr.xsce b/sal/qa/rtl/oustring/rtl_ustr.xsce
new file mode 100644
index 000000000..c7b5c99f3
--- /dev/null
+++ b/sal/qa/rtl/oustring/rtl_ustr.xsce
@@ -0,0 +1,50 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+# functions which are gpf
+
+rtl_ustr.compare.compare_000
+rtl_ustr.compare.compare_000_1
+
+rtl_ustr.compareIgnoreAsciiCase.compare_000
+rtl_ustr.compareIgnoreAsciiCase.compare_000_1
+
+rtl_ustr.indexOfChar.indexOfChar_000
+
+rtl_ustr.lastIndexOfChar.lastIndexOfChar_000
+
+rtl_ustr.indexOfStr.indexOfStr_000
+
+rtl_ustr.lastIndexOfStr.lastIndexOfStr_000
+
+rtl_ustr.replaceChar.replaceChar_000
+
+rtl_ustr.replaceChar_WithLength.replaceChar_WithLength_000_1
+
+rtl_ustr.toAsciiLowerCase.toAsciiLowerCase_000
+
+rtl_ustr.toAsciiUpperCase.toAsciiUpperCase_000
+
+rtl_ustr.valueOfChar.valueOfChar_000
+
+rtl_ustr.ascii_compare.ascii_compare_000
+rtl_ustr.ascii_compare.ascii_compare_000_1
+rtl_ustr.ascii_compareIgnoreAsciiCase.ascii_compareIgnoreAsciiCase_000
+rtl_ustr.ascii_compareIgnoreAsciiCase.ascii_compareIgnoreAsciiCase_000_1
+rtl_ustr.ascii_compareIgnoreAsciiCase_WithLength.ascii_compareIgnoreAsciiCase_WithLength_000
+rtl_ustr.ascii_compareIgnoreAsciiCase_WithLength.ascii_compareIgnoreAsciiCase_WithLength_000_1
+
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx
new file mode 100644
index 000000000..f5168b60d
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <o3tl/cppunittraitshelper.hxx>
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustrbuf.hxx>
+
+namespace test::oustringbuffer {
+
+class AppendChar: public CppUnit::TestFixture {
+private:
+ void testAppendChar();
+
+ CPPUNIT_TEST_SUITE(AppendChar);
+ CPPUNIT_TEST(testAppendChar);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void AppendChar::testAppendChar() {
+ // Check that append('a') does not unexpectedly pick
+ // append(sal_Int32 i, sal_Int16 radix = 10):
+ OUStringBuffer s;
+ s.append('a');
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'a', s[0]);
+}
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::AppendChar);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx
new file mode 100644
index 000000000..7530d6a32
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx
@@ -0,0 +1,66 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustrbuf.hxx>
+#include <sal/types.h>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+private:
+ void testEmpty();
+
+ void testNonEmpty();
+
+ void testZero();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testEmpty);
+ CPPUNIT_TEST(testNonEmpty);
+ CPPUNIT_TEST(testZero);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::testEmpty() {
+ OUStringBuffer s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ sal_Unicode * p = s.appendUninitialized(5);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr()), static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+}
+
+void Test::testNonEmpty() {
+ OUStringBuffer s("ab");
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s.getLength());
+ sal_Unicode * p = s.appendUninitialized(5);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr() + 2),
+ static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength());
+}
+
+void Test::testZero() {
+ OUStringBuffer s;
+ sal_Unicode * p = s.appendUninitialized(0);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr()), static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx
new file mode 100644
index 000000000..3c3f436ee
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx
@@ -0,0 +1,92 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <string_view>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <o3tl/cppunittraitshelper.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.hxx>
+
+namespace
+{
+class Test : public CppUnit::TestFixture
+{
+private:
+ void test()
+ {
+ OUStringBuffer b1;
+ OUString s1("123456789012345");
+ b1 = s1;
+ CPPUNIT_ASSERT_EQUAL(s1, b1.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b1.getCapacity());
+ OUString s2("abc");
+ b1 = s2;
+ CPPUNIT_ASSERT_EQUAL(s2, b1.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b1.getCapacity());
+ OUString s3("1234567890123456");
+ b1 = s3;
+ CPPUNIT_ASSERT_EQUAL(s3, b1.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b1.getCapacity());
+ OUStringBuffer b2;
+ b2 = "123456789012345";
+ CPPUNIT_ASSERT_EQUAL(s1, b2.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b2.getCapacity());
+ b2 = "abc";
+ CPPUNIT_ASSERT_EQUAL(s2, b2.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b2.getCapacity());
+ b2 = "1234567890123456";
+ CPPUNIT_ASSERT_EQUAL(s3, b2.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b2.getCapacity());
+ OUStringBuffer b3;
+ b3 = u"123456789012345";
+ CPPUNIT_ASSERT_EQUAL(s1, b3.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b3.getCapacity());
+ b3 = u"abc";
+ CPPUNIT_ASSERT_EQUAL(s2, b3.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b3.getCapacity());
+ b3 = u"1234567890123456";
+ CPPUNIT_ASSERT_EQUAL(s3, b3.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b3.getCapacity());
+ OUStringBuffer b4;
+ b4 = OUStringLiteral(u"1") + "23456789012345";
+ CPPUNIT_ASSERT_EQUAL(s1, b4.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b4.getCapacity());
+ b4 = OUStringLiteral(u"a") + "bc";
+ CPPUNIT_ASSERT_EQUAL(s2, b4.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b4.getCapacity());
+ b4 = OUStringLiteral(u"1") + "234567890123456";
+ CPPUNIT_ASSERT_EQUAL(s3, b4.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b4.getCapacity());
+ b4 = OUStringChar('a');
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), b4.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'a', b4.getStr()[0]);
+ CPPUNIT_ASSERT_EQUAL(u'\0', b4.getStr()[1]);
+ b4 = std::u16string_view(u"abc").substr(
+ 0, 2); // avoid the string_view accidentally being NUL-terminated
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), b4.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'a', b4.getStr()[0]);
+ CPPUNIT_ASSERT_EQUAL(u'b', b4.getStr()[1]);
+ CPPUNIT_ASSERT_EQUAL(u'\0', b4.getStr()[2]);
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx
new file mode 100644
index 000000000..d942480d1
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx
@@ -0,0 +1,61 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.hxx>
+
+namespace test::oustringbuffer {
+
+class ToString: public CppUnit::TestFixture {
+private:
+ void testEmptyToString();
+ void testToString();
+
+ CPPUNIT_TEST_SUITE(ToString);
+ CPPUNIT_TEST(testEmptyToString);
+ CPPUNIT_TEST(testToString);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::ToString);
+
+void test::oustringbuffer::ToString::testEmptyToString() {
+ OUStringBuffer sb;
+ OUString str = sb.toString();
+ CPPUNIT_ASSERT_EQUAL(OUString(), str);
+}
+
+void test::oustringbuffer::ToString::testToString() {
+ OUStringBuffer sb("test string");
+ OUString str = sb.toString();
+ CPPUNIT_ASSERT_EQUAL( OUString("test string"), str );
+ // returned OUString must be independent from sb
+ sb.append( 'a' );
+ CPPUNIT_ASSERT_EQUAL( OUString("test string"), str );
+ sb.setLength(0);
+ CPPUNIT_ASSERT_EQUAL( OUString("test string"), str );
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx
new file mode 100644
index 000000000..764b03d8c
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx
@@ -0,0 +1,121 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+
+namespace test::oustringbuffer {
+
+class Utf32: public CppUnit::TestFixture {
+private:
+ void appendUtf32();
+
+ void insertUtf32();
+
+ CPPUNIT_TEST_SUITE(Utf32);
+ CPPUNIT_TEST(appendUtf32);
+ CPPUNIT_TEST(insertUtf32);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::Utf32);
+
+namespace {
+
+void appendString(OStringBuffer & buffer, OUString const & string) {
+ buffer.append('"');
+ for (int i = 0; i < string.getLength(); ++i) {
+ buffer.append("\\u");
+ sal_Unicode c = string[i];
+ if (c < 0x1000) {
+ buffer.append('0');
+ if (c < 0x100) {
+ buffer.append('0');
+ if (c < 0x10) {
+ buffer.append('0');
+ }
+ }
+ }
+ buffer.append(
+ static_cast< sal_Int32 >(c), static_cast< sal_Int16 >(16));
+ }
+ buffer.append('"');
+}
+
+void createMessage(
+ OStringBuffer & message, OUString const & string1,
+ OUString const & string2)
+{
+ message.setLength(0);
+ appendString(message, string1);
+ message.append(" vs. ");
+ appendString(message, string2);
+}
+
+}
+
+void test::oustringbuffer::Utf32::appendUtf32() {
+ int const str1Len = 3;
+ sal_Unicode const str1[str1Len] = { 'a', 'b', 'c' };
+ static constexpr OUStringLiteral str2 = u"abcd";
+ static constexpr OUStringLiteral str3 = u"abcd\U00010000";
+ OStringBuffer message;
+ OUStringBuffer buf1(std::u16string_view(str1, str1Len));
+ buf1.appendUtf32('d');
+ OUString res1(buf1.makeStringAndClear());
+ createMessage(message, res1, str2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ message.getStr(), OUString(str2), res1);
+ OUStringBuffer buf2(str2);
+ buf2.appendUtf32(0x10000);
+ OUString res2(buf2.makeStringAndClear());
+ createMessage(message, res2, str3);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ message.getStr(), OUString(str3), res2);
+}
+
+void test::oustringbuffer::Utf32::insertUtf32() {
+ int const str1Len = 3;
+ sal_Unicode const str1[str1Len] = { 'a', 'b', 'c' };
+ static constexpr OUStringLiteral str2 = u"abdc";
+ static constexpr OUStringLiteral str3 = u"ab\U0010FFFFdc";
+ OStringBuffer message;
+ OUStringBuffer buf1(std::u16string_view(str1, str1Len));
+ buf1.insertUtf32(2, 'd');
+ OUString res1(buf1.makeStringAndClear());
+ createMessage(message, res1, str2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ message.getStr(), OUString(str2), res1);
+ OUStringBuffer buf2(str2);
+ buf2.insertUtf32(2, 0x10FFFF);
+ OUString res2(buf2.makeStringAndClear());
+ createMessage(message, res2, str3);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ message.getStr(), OUString(str3), res2);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/process/child_process.cxx b/sal/qa/rtl/process/child_process.cxx
new file mode 100644
index 000000000..d5039b059
--- /dev/null
+++ b/sal/qa/rtl/process/child_process.cxx
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdio.h>
+#include "sal/main.h"
+#include <rtl/process.h>
+#include <rtl_Process_Const.h>
+
+// ----------------------------------- Main -----------------------------------
+SAL_IMPLEMENT_MAIN_WITH_ARGS(, argv)
+{
+ printf("# %s is called.\n", argv[0]);
+
+ sal_Int32 nCount = rtl_getAppCommandArgCount();
+ if ( nCount != 4 )
+ {
+ printf(
+ "# not enough arguments found, need 4 found %ld.\n",
+ sal::static_int_cast< long >(nCount));
+ return 0;
+ }
+
+ OUString suArg[4];
+ for( sal_Int32 i = 0 ; i < nCount ; i ++ )
+ {
+ rtl_getAppCommandArg( i , &(suArg[i].pData) );
+ OString aString;
+ aString = OUStringToOString( suArg[i], RTL_TEXTENCODING_ASCII_US );
+ printf(
+ "# Parameter[%ld] is %s\n", sal::static_int_cast< long >(i),
+ aString.getStr());
+ }
+
+ if ( suArg[0] != suParam0 ||
+ suArg[1] != suParam1 ||
+ suArg[2] != suParam2 ||
+ suArg[3] != suParam3 )
+ {
+ return 0;
+ }
+ return 2;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/process/child_process_id.cxx b/sal/qa/rtl/process/child_process_id.cxx
new file mode 100644
index 000000000..077f5c668
--- /dev/null
+++ b/sal/qa/rtl/process/child_process_id.cxx
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdio.h>
+#include "sal/main.h"
+#include <rtl/process.h>
+#include <rtl_Process_Const.h>
+
+void printUuid(sal_uInt8* pNode)
+{
+ for (sal_Int32 i1 = 0; i1 < 4; i1++)
+ {
+ for (sal_Int32 i2 = 0; i2 < 4; i2++)
+ {
+ sal_uInt8 nValue = pNode[i1 * 4 + i2];
+ if (nValue < 16)
+ {
+ printf("0");
+ }
+ printf("%02x", nValue);
+ }
+ if (i1 == 3)
+ break;
+ //printf( "-" );
+ }
+}
+
+// ----------------------------------- Main -----------------------------------
+
+SAL_IMPLEMENT_MAIN()
+{
+ sal_uInt8 pTargetUUID[16];
+ rtl_getGlobalProcessId(pTargetUUID);
+ printUuid(pTargetUUID);
+ return 1;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/process/rtl_Process.cxx b/sal/qa/rtl/process/rtl_Process.cxx
new file mode 100644
index 000000000..5d4f3e5b5
--- /dev/null
+++ b/sal/qa/rtl/process/rtl_Process.cxx
@@ -0,0 +1,258 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <memory>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sal/types.h>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/ustring.hxx>
+#include <rtl/string.hxx>
+#include <rtl/process.h>
+#include <osl/process.h>
+#include <osl/module.hxx>
+
+#include "rtl_Process_Const.h"
+
+using namespace osl;
+
+/** print a UNI_CODE String. And also print some comments of the string.
+*/
+static void printUString( const OUString & str, const char * msg )
+{
+ if ( msg != nullptr )
+ {
+ printf("#%s #printUString_u# ", msg );
+ }
+ OString aString = OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
+ printf("%s\n", aString.getStr( ) );
+}
+
+static OUString getModulePath()
+{
+ OUString suDirPath;
+ ::osl::Module::getUrlFromAddress(
+ reinterpret_cast< oslGenericFunction >(getModulePath), suDirPath );
+
+ printUString(suDirPath, "modulePath:");
+ suDirPath = suDirPath.copy( 0, suDirPath.lastIndexOf('/') );
+ suDirPath = OUString::Concat(suDirPath.subView( 0, suDirPath.lastIndexOf('/') + 1)) + "bin";
+ return suDirPath;
+}
+
+namespace rtl_Process
+{
+class getAppCommandArg : public CppUnit::TestFixture
+{
+public:
+ void getAppCommandArg_001()
+ {
+#if defined(_WIN32)
+ static const OUStringLiteral EXECUTABLE_NAME(u"child_process.exe");
+#else
+ static const OUStringLiteral EXECUTABLE_NAME(u"child_process");
+#endif
+ OUString suCWD = getModulePath();
+ // OUString suCWD2 = getExecutableDirectory();
+
+ printUString(suCWD, "path to the current module");
+ // printUString(suCWD2, "suCWD2");
+
+ oslProcess hProcess = nullptr;
+
+ const int nParameterCount = 4;
+ rtl_uString* pParameters[ nParameterCount ];
+
+ pParameters[0] = suParam0.pData;
+ pParameters[1] = suParam1.pData;
+ pParameters[2] = suParam2.pData;
+ pParameters[3] = suParam3.pData;
+
+ OUString suFileURL = suCWD + "/" + EXECUTABLE_NAME;
+
+ oslProcessError osl_error = osl_executeProcess(
+ suFileURL.pData,
+ pParameters,
+ nParameterCount,
+ osl_Process_WAIT,
+ nullptr, /* osl_getCurrentSecurity() */
+ suCWD.pData,
+ nullptr,
+ 0,
+ &hProcess );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+ //we could get return value only after the process terminated
+ osl_joinProcess(hProcess);
+ // CPPUNIT_ASSERT_MESSAGE
+ // (
+ // "osl_joinProcess returned with failure",
+ // osl_Process_E_None == osl_error
+ // );
+ std::unique_ptr<oslProcessInfo> pInfo( new oslProcessInfo );
+ //please pay attention to initial the Size to sizeof(oslProcessInfo), or else
+ //you will get unknown error when call osl_getProcessInfo
+ pInfo->Size = sizeof(oslProcessInfo);
+ osl_error = osl_getProcessInfo( hProcess, osl_Process_EXITCODE, pInfo.get() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_getProcessInfo returned with failure",
+ osl_Process_E_None, osl_error
+ );
+
+ printf("the exit code is %" SAL_PRIuUINT32 ".\n", pInfo->Code );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getAppCommandArg or rtl_getAppCommandArgCount error.", static_cast<oslProcessExitCode>(2), pInfo->Code);
+ }
+
+ CPPUNIT_TEST_SUITE(getAppCommandArg);
+ CPPUNIT_TEST(getAppCommandArg_001);
+ // CPPUNIT_TEST(getAppCommandArg_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getAppCommandArg
+
+/************************************************************************
+ * For diagnostics( from sal/test/testuuid.cxx )
+ ************************************************************************/
+static void printUuid( const sal_uInt8 *pNode )
+{
+ printf("# UUID is: ");
+ for( sal_Int32 i1 = 0 ; i1 < 4 ; i1++ )
+ {
+ for( sal_Int32 i2 = 0 ; i2 < 4 ; i2++ )
+ {
+ sal_uInt8 nValue = pNode[i1*4 +i2];
+ if (nValue < 16)
+ {
+ printf( "0");
+ }
+ printf( "%02x" ,nValue );
+ }
+ if( i1 == 3 )
+ break;
+ printf( "-" );
+ }
+ printf("\n");
+}
+
+/**************************************************************************
+ * output UUID to a string
+ **************************************************************************/
+static void printUuidtoBuffer( const sal_uInt8 *pNode, char * pBuffer )
+{
+ sal_Int8 nPtr = 0;
+ for( sal_Int32 i1 = 0 ; i1 < 16 ; i1++ )
+ {
+ sal_uInt8 nValue = pNode[i1];
+ if (nValue < 16)
+ {
+ SAL_WNODEPRECATED_DECLARATIONS_PUSH // sprintf (macOS 13 SDK)
+ sprintf( pBuffer + nPtr, "0");
+ SAL_WNODEPRECATED_DECLARATIONS_POP
+ nPtr++;
+ }
+ SAL_WNODEPRECATED_DECLARATIONS_PUSH // sprintf (macOS 13 SDK)
+ sprintf( pBuffer + nPtr, "%02x", nValue );
+ SAL_WNODEPRECATED_DECLARATIONS_POP
+ nPtr += 2 ;
+ }
+}
+
+class getGlobalProcessId : public CppUnit::TestFixture
+{
+public:
+ //gets a 16-byte fixed size identifier which is guaranteed not to change during the current process.
+ void getGlobalProcessId_001()
+ {
+ sal_uInt8 pTargetUUID1[16];
+ sal_uInt8 pTargetUUID2[16];
+ rtl_getGlobalProcessId( pTargetUUID1 );
+ rtl_getGlobalProcessId( pTargetUUID2 );
+ CPPUNIT_ASSERT_MESSAGE("getGlobalProcessId: got two same ProcessIds.", !memcmp( pTargetUUID1 , pTargetUUID2 , 16 ) );
+ }
+ //different processes different pids
+ void getGlobalProcessId_002()
+ {
+#if defined(_WIN32)
+ static const OUStringLiteral EXEC_NAME(u"child_process_id.exe");
+#else
+ static const OUStringLiteral EXEC_NAME(u"child_process_id");
+#endif
+ sal_uInt8 pTargetUUID1[16];
+ rtl_getGlobalProcessId( pTargetUUID1 );
+ printUuid( pTargetUUID1 );
+ char pUUID1[32];
+ printUuidtoBuffer( pTargetUUID1, pUUID1 );
+ printf("# UUID to String is %s\n", pUUID1);
+
+ OUString suCWD = getModulePath();
+ oslProcess hProcess = nullptr;
+ OUString suFileURL = suCWD + "/" + EXEC_NAME;
+ oslFileHandle* pChildOutputRead = new oslFileHandle();
+ oslProcessError osl_error = osl_executeProcess_WithRedirectedIO(
+ suFileURL.pData,
+ nullptr,
+ 0,
+ osl_Process_WAIT,
+ nullptr,
+ suCWD.pData,
+ nullptr,
+ 0,
+ &hProcess,
+ nullptr,
+ pChildOutputRead,
+ nullptr);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+ //we could get return value only after the process terminated
+ osl_joinProcess(hProcess);
+
+ char pUUID2[33] {};
+ sal_uInt64 nRead = 0;
+ osl_readFile( *pChildOutputRead, pUUID2, 32, &nRead );
+ printf("read buffer is %s, nRead is %" SAL_PRIdINT64 "\n", pUUID2, nRead );
+ OUString suUUID2 = OUString::createFromAscii( pUUID2 );
+ CPPUNIT_ASSERT_MESSAGE("getGlobalProcessId: got two same ProcessIds.", !suUUID2.equalsAsciiL( pUUID1, 32) );
+ }
+
+ CPPUNIT_TEST_SUITE(getGlobalProcessId);
+ CPPUNIT_TEST(getGlobalProcessId_001);
+ CPPUNIT_TEST(getGlobalProcessId_002);
+ CPPUNIT_TEST_SUITE_END();
+
+}; // class getGlobalProcessId
+
+} // namespace rtl_Process
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Process::getAppCommandArg, "rtl_Process");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Process::getGlobalProcessId, "rtl_Process");
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/process/rtl_Process_Const.h b/sal/qa/rtl/process/rtl_Process_Const.h
new file mode 100644
index 000000000..aab40ff9a
--- /dev/null
+++ b/sal/qa/rtl/process/rtl_Process_Const.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_RTL_PROCESS_RTL_PROCESS_CONST_H
+#define INCLUDED_SAL_QA_RTL_PROCESS_RTL_PROCESS_CONST_H
+
+#include <rtl/ustring.hxx>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+OUString suParam0("-join");
+OUString suParam1("-with");
+OUString suParam2("-child");
+OUString suParam3("-process");
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* RTL_PROCESS_CONST_H*/
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/random/random.txt b/sal/qa/rtl/random/random.txt
new file mode 100644
index 000000000..c5546df9b
--- /dev/null
+++ b/sal/qa/rtl/random/random.txt
@@ -0,0 +1,22 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+rtl_random.createPool.createPool_001
+rtl_random.destroyPool.destroyPool_001
+rtl_random.addBytes.addBytes_001
+rtl_random.getBytes.getBytes_001
+
diff --git a/sal/qa/rtl/random/rtl_random.cxx b/sal/qa/rtl/random/rtl_random.cxx
new file mode 100644
index 000000000..4987b5a0c
--- /dev/null
+++ b/sal/qa/rtl/random/rtl_random.cxx
@@ -0,0 +1,363 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <memory>
+#include <algorithm>
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/random.h>
+
+#include <string.h>
+
+namespace rtl_random
+{
+
+class createPool : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ // this is only demonstration code
+ void createPool_001()
+ {
+ // this is demonstration code
+
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ // LLA: seems to be that another test is not possible for createPool()
+ CPPUNIT_ASSERT_MESSAGE("create failed", aPool != nullptr);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(createPool);
+ CPPUNIT_TEST(createPool_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class createPool
+
+class destroyPool : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ void destroyPool_000()
+ {
+ // GPF, if failed
+ rtl_random_destroyPool(nullptr);
+ }
+
+ void destroyPool_001()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ // LLA: seems to be that another test is not possible for createPool()
+ CPPUNIT_ASSERT_MESSAGE("create failed", aPool != nullptr);
+
+ rtl_random_destroyPool(aPool);
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(destroyPool);
+ CPPUNIT_TEST(destroyPool_000);
+ CPPUNIT_TEST(destroyPool_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class destroyPool
+
+class addBytes : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ // this is only demonstration code
+ void addBytes_000()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ rtlRandomError aError = rtl_random_addBytes(nullptr, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError);
+
+ /* rtlRandomError */ aError = rtl_random_addBytes(aPool, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError);
+
+ /* rtlRandomError */ aError = rtl_random_addBytes(aPool, pBuffer.get(), nBufLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void addBytes_001()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+
+ memset(pBuffer.get(), 0, nBufLen);
+
+ rtl_random_addBytes(aPool, pBuffer.get(), nBufLen);
+
+ printf("%2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3]);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(addBytes);
+ CPPUNIT_TEST(addBytes_000);
+ CPPUNIT_TEST(addBytes_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class addBytes
+
+namespace {
+
+class Statistics
+{
+ int m_nDispensation[256];
+
+ int m_nMin;
+ int m_nMax;
+ int m_nAverage;
+ int m_nMinDeviation;
+ int m_nMaxDeviation;
+
+public:
+ void clearDispensation()
+ {
+ for (int i = 0;i < 256;++i) // clear array
+ {
+ m_nDispensation[i] = 0;
+ }
+ }
+ Statistics()
+ : m_nMin(0)
+ , m_nMax(0)
+ , m_nAverage(0)
+ , m_nMinDeviation(0)
+ , m_nMaxDeviation(0)
+ {
+ clearDispensation();
+ }
+
+ void addValue(sal_uInt8 _nIndex, sal_Int32 _nValue)
+ {
+ m_nDispensation[_nIndex] += _nValue;
+ }
+
+ void build(sal_Int32 _nCountMax)
+ {
+ m_nMin = _nCountMax;
+ m_nMax = 0;
+
+ m_nAverage = _nCountMax / 256;
+
+ m_nMinDeviation = _nCountMax;
+ m_nMaxDeviation = 0;
+
+ for (int i = 0;i < 256;++i) // show dispensation
+ {
+ m_nMin = std::min(m_nMin, m_nDispensation[i]);
+ m_nMax = std::max(m_nMax, m_nDispensation[i]);
+
+ m_nMinDeviation = std::min(m_nMinDeviation, abs(m_nAverage - m_nDispensation[i]));
+ m_nMaxDeviation = std::max(m_nMaxDeviation, abs(m_nAverage - m_nDispensation[i]));
+ }
+ }
+
+ void print()
+ {
+ // LLA: these are only info values
+ printf("\nSome statistics\n");
+ printf("Min: %d\n", m_nMin);
+ printf("Max: %d\n", m_nMax);
+ printf("Average: %d\n", m_nAverage);
+ printf("Min abs deviation: %d\n", m_nMinDeviation);
+ printf("Max abs deviation: %d\n", m_nMaxDeviation);
+ }
+
+ sal_Int32 getAverage() const {return m_nAverage;}
+ sal_Int32 getMaxDeviation() const {return m_nMaxDeviation;}
+
+};
+
+}
+
+class getBytes : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ void getBytes_000()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ rtlRandomError aError = rtl_random_getBytes(nullptr, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError);
+
+ /* rtlRandomError */ aError = rtl_random_getBytes(aPool, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError);
+
+ /* rtlRandomError */ aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void getBytes_001()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ rtlRandomError aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError);
+
+ printf("%2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3]);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void getBytes_002()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen << 1 ] );
+ memset(pBuffer.get(), 0, nBufLen << 1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", sal_uInt8(0), pBuffer[4]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", sal_uInt8(0), pBuffer[5]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", sal_uInt8(0), pBuffer[6]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", sal_uInt8(0), pBuffer[7]);
+
+ rtlRandomError aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError);
+
+ printf("%2x %2x %2x %2x %2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3], pBuffer[4], pBuffer[5], pBuffer[6], pBuffer[7]);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("internal memory overwrite", sal_uInt8(0), pBuffer[4]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("internal memory overwrite", sal_uInt8(0), pBuffer[5]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("internal memory overwrite", sal_uInt8(0), pBuffer[6]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("internal memory overwrite", sal_uInt8(0), pBuffer[7]);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void getBytes_003()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 1;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ Statistics aStat;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", static_cast<sal_uInt8>(0), pBuffer[0]);
+
+ int nCount = 0;
+
+ int nCountMax = 1000000;
+ for(nCount = 0;nCount < nCountMax; ++nCount) // run 100000000 through getBytes(...)
+ {
+ /* rtlRandomError aError = */ rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ /* CPPUNIT_ASSERT_MESSAGE("wrong parameter", aError == rtl_Random_E_None); */
+
+ aStat.addValue(pBuffer[0], 1);
+ }
+
+ aStat.build(nCountMax);
+ aStat.print();
+
+ CPPUNIT_ASSERT_MESSAGE("deviation should be less average", aStat.getMaxDeviation() < aStat.getAverage());
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void getBytes_003_1()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 256;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ Statistics aStat;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", static_cast<sal_uInt8>(0), pBuffer[0]);
+
+ int nCount = 0;
+
+ int nCountMax = 10000;
+ for(nCount = 0;nCount < nCountMax; ++nCount) // run 100000000 through getBytes(...)
+ {
+ /* rtlRandomError aError = */ rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ // CPPUNIT_ASSERT_MESSAGE("wrong parameter", aError == rtl_Random_E_None);
+
+ for (sal_uInt32 i=0;i<nBufLen;++i)
+ aStat.addValue(pBuffer[i], 1);
+ }
+
+ aStat.build(nCountMax * nBufLen);
+ aStat.print();
+
+ CPPUNIT_ASSERT_MESSAGE("deviation should be less average", aStat.getMaxDeviation() < aStat.getAverage());
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getBytes);
+ CPPUNIT_TEST(getBytes_000);
+ CPPUNIT_TEST(getBytes_001);
+ CPPUNIT_TEST(getBytes_002);
+ CPPUNIT_TEST(getBytes_003);
+ CPPUNIT_TEST(getBytes_003_1);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getBytes
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_random::createPool);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_random::destroyPool);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_random::addBytes);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_random::getBytes);
+} // namespace rtl_random
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ref/rtl_ref.cxx b/sal/qa/rtl/ref/rtl_ref.cxx
new file mode 100644
index 000000000..2bf7c9803
--- /dev/null
+++ b/sal/qa/rtl/ref/rtl_ref.cxx
@@ -0,0 +1,115 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <rtl/ref.hxx>
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace rtl_ref
+{
+
+namespace {
+
+class MoveTestClass
+{
+private:
+ bool m_bIncFlag;
+ long m_nRef;
+public:
+ MoveTestClass(): m_bIncFlag(false), m_nRef(0) { }
+
+ // There should never be more than two references to this class as it
+ // is used as a test class for move functions. One reference being the
+ // original reference and the second being the test reference
+ void acquire()
+ {
+ if(m_bIncFlag)
+ {
+ ++m_nRef;
+ m_bIncFlag = false;
+ }
+ else
+ CPPUNIT_FAIL("RC was incremented when in should not have been");
+ }
+
+ void release() { --m_nRef; }
+
+ long use_count() { return m_nRef; }
+
+ void set_inc_flag() { m_bIncFlag = true; }
+};
+
+}
+
+static rtl::Reference< MoveTestClass > get_reference( MoveTestClass* pcTestClass )
+{
+ // constructor will increment the reference count
+ pcTestClass->set_inc_flag();
+ rtl::Reference< MoveTestClass > tmp(pcTestClass);
+ return tmp;
+}
+
+class TestReferenceRefCounting : public CppUnit::TestFixture
+{
+ void testMove()
+ {
+ MoveTestClass cTestClass;
+
+ // constructor will increment the reference count
+ cTestClass.set_inc_flag();
+ rtl::Reference< MoveTestClass > test1( &cTestClass );
+
+ // move should not increment the reference count
+ rtl::Reference< MoveTestClass > test2( std::move(test1) );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 1",
+ static_cast<long>(1), test2->use_count());
+
+ // test1 now contains a null pointer
+ CPPUNIT_ASSERT_MESSAGE("!test1.is()",
+ !test1.is()); // NOLINT(bugprone-use-after-move)
+
+ // function return should move the reference
+ test2 = get_reference( &cTestClass );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 1",
+ static_cast<long>(1), test2->use_count());
+
+ // normal copy
+ test2->set_inc_flag();
+ test1 = test2;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 2",
+ static_cast<long>(2), test2->use_count());
+
+ // use count should decrement
+ test2 = rtl::Reference< MoveTestClass >();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test1.use_count() == 1",
+ static_cast<long>(1), test1->use_count());
+
+ // move of a null pointer should not cause an error
+ test1 = std::move(test2);
+
+ CPPUNIT_ASSERT_MESSAGE("!test1.is()",
+ !test1.is());
+ CPPUNIT_ASSERT_MESSAGE("!test2.is()",
+ !test2.is()); // NOLINT(bugprone-use-after-move)
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("cTestClass.use_count() == 0",
+ static_cast<long>(0), cTestClass.use_count());
+ }
+
+ CPPUNIT_TEST_SUITE(TestReferenceRefCounting);
+ CPPUNIT_TEST(testMove);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+} // namespace rtl_ref
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ref::TestReferenceRefCounting);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/compile-oustring.cxx b/sal/qa/rtl/strings/compile-oustring.cxx
new file mode 100644
index 000000000..667a52324
--- /dev/null
+++ b/sal/qa/rtl/strings/compile-oustring.cxx
@@ -0,0 +1,45 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <rtl/string.h>
+#include <rtl/ustring.hxx>
+
+// expected-note@rtl/ustring.hxx:* 1+ {{}}
+
+void checkExtraIntArgument()
+{
+ // This makes sure that using by mistake RTL_CONSTASCII_STRINGPARAM does not trigger a different
+ // overload, i.e. the second argument to match() in this case is the indexFrom argument,
+ // but with the macro it would contain the length of the string. Therefore
+ // match( RTL_CONSTASCII_STRINGPARAM( "bar" )) would be match( "bar", 3 ), which would be
+ // true when called for OUString( "foobar" ). But this should not happen because of the
+ // &foo[0] trick in the RTL_CONSTASCII_STRINGPARAM macro.
+ // expected-error@+1 {{}}
+ OUString("foobar").match(RTL_CONSTASCII_STRINGPARAM("bar"));
+}
+
+void checkNonconstChar()
+{
+ // check that non-const char[] data do not trigger string literal overloads
+ char test[] = "test";
+ char bar[] = "bar";
+ const char consttest[] = "test";
+ const char constbar[] = "bar";
+ // expected-error@+1 {{}}
+ (void)OUString("footest").replaceAll(test, bar);
+ // expected-error@+1 {{}}
+ (void)OUString("footest").replaceAll(consttest, bar);
+ // expected-error@+1 {{}}
+ (void)OUString("footest").replaceAll(test, constbar);
+ (void)OUString("footest").replaceAll(consttest, constbar);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/qa/rtl/strings/nonconstarray.cxx b/sal/qa/rtl/strings/nonconstarray.cxx
new file mode 100644
index 000000000..4b66e4e31
--- /dev/null
+++ b/sal/qa/rtl/strings/nonconstarray.cxx
@@ -0,0 +1,94 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+
+namespace
+{
+class Test : public CppUnit::TestFixture
+{
+private:
+ void testOString()
+ {
+ struct S
+ {
+ char a[4];
+ };
+ S s{ "x\0y" };
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OString(s.a).getLength());
+ // Ideally, the below would work the same as the above. However, the const reference makes
+ // the ConstCharArrayDetector instead of the NonConstCharArrayDetector kick in, so that the
+ // call to OString(r.a) would fire the ConstCharArrayDetector<T>::isValid assert (and in
+ // NDEBUG builds the CPPUNIT_ASSERT_EQUAL would fail with 3 != 1):
+ if ((false))
+ {
+ S const& r = s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OString(r.a).getLength());
+ }
+ }
+
+ void testOUStringChar()
+ {
+ struct S
+ {
+ char a[4];
+ };
+ S s{ "x\0y" };
+ // This would fail to compile, as there is no OUString ctor taking a
+ // NonConstCharArrayDetector char array:
+#if 0
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OUString(s.a).getLength());
+#endif
+ // Ideally, the below would fail to compile the same as the above. However, the const
+ // reference makes the ConstCharArrayDetector instead of the NonConstCharArrayDetector kick
+ // in, so that the call to OUString(r.a) would fire the ConstCharArrayDetector<T>::isValid
+ // assert (and in NDEBUG builds the CPPUNIT_ASSERT_EQUAL would fail with 3 != 1):
+ if ((false))
+ {
+ S const& r = s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OUString(r.a).getLength());
+ }
+ }
+
+ void testOUStringChar16t()
+ {
+ struct S
+ {
+ char16_t a[4];
+ };
+ S s{ u"x\0y" };
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OUString(s.a).getLength());
+ // Ideally, the below would work the same as the above. However, the const reference makes
+ // the ConstCharArrayDetector instead of the NonConstCharArrayDetector kick in, so that the
+ // call to OUString(r.a) would fire the ConstCharArrayDetector<T>::isValid assert (and in
+ // NDEBUG builds the CPPUNIT_ASSERT_EQUAL would fail with 3 != 1)::
+ if ((false))
+ {
+ S const& r = s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OUString(r.a).getLength());
+ }
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testOString);
+ CPPUNIT_TEST(testOUStringChar);
+ CPPUNIT_TEST(testOUStringChar16t);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/qa/rtl/strings/test_ostring.cxx b/sal/qa/rtl/strings/test_ostring.cxx
new file mode 100644
index 000000000..b4fb201ca
--- /dev/null
+++ b/sal/qa/rtl/strings/test_ostring.cxx
@@ -0,0 +1,123 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.hxx>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+private:
+ void testStartsWithIgnoreAsciiCase();
+ void testCompareTo();
+ void testUtf8StringLiterals();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testStartsWithIgnoreAsciiCase);
+ CPPUNIT_TEST(testCompareTo);
+ CPPUNIT_TEST(testUtf8StringLiterals);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::testStartsWithIgnoreAsciiCase() {
+ {
+ OString r;
+ CPPUNIT_ASSERT(OString().startsWithIgnoreAsciiCase(std::string_view(), &r));
+ CPPUNIT_ASSERT(r.isEmpty());
+ }
+ {
+ OString r;
+ CPPUNIT_ASSERT(OString("foo").startsWithIgnoreAsciiCase(std::string_view(), &r));
+ CPPUNIT_ASSERT_EQUAL(OString("foo"), r);
+ }
+ {
+ OString r;
+ CPPUNIT_ASSERT(
+ OString("foo").startsWithIgnoreAsciiCase("F", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("oo"), r);
+ }
+ {
+ OString r("other");
+ CPPUNIT_ASSERT(
+ !OString("foo").startsWithIgnoreAsciiCase("bar", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("other"), r);
+ }
+ {
+ OString r("other");
+ CPPUNIT_ASSERT(
+ !OString("foo").startsWithIgnoreAsciiCase("foobar", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("other"), r);
+ }
+
+ {
+ OString r;
+ CPPUNIT_ASSERT(OString().startsWithIgnoreAsciiCase("", &r));
+ CPPUNIT_ASSERT(r.isEmpty());
+ }
+ {
+ OString r;
+ CPPUNIT_ASSERT(OString("foo").startsWithIgnoreAsciiCase("", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("foo"), r);
+ }
+ {
+ OString r;
+ CPPUNIT_ASSERT(
+ OString("foo").startsWithIgnoreAsciiCase("F", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("oo"), r);
+ }
+ {
+ OString r("other");
+ CPPUNIT_ASSERT(
+ !OString("foo").startsWithIgnoreAsciiCase("bar", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("other"), r);
+ }
+ {
+ OString r("other");
+ CPPUNIT_ASSERT(
+ !OString("foo").startsWithIgnoreAsciiCase("foobar", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("other"), r);
+ }
+}
+
+void Test::testCompareTo()
+{
+ // test that embedded NUL does not stop the compare
+ char str1[2] = { '\0', 'x' };
+ char str2[2] = { '\0', 'y' };
+
+ OString s1(str1, 2);
+ OString s2(str2, 2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s1.compareTo(s1));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s2.compareTo(s2));
+ CPPUNIT_ASSERT(s1.compareTo(s2) < 0);
+ CPPUNIT_ASSERT(s2.compareTo(s1) > 0);
+ CPPUNIT_ASSERT(s1.compareTo(OString(s2 + "y")) < 0);
+ CPPUNIT_ASSERT(s2.compareTo(OString(s1 + "x")) > 0);
+ CPPUNIT_ASSERT(OString(s1 + "x").compareTo(s2) < 0);
+ CPPUNIT_ASSERT(OString(s2 + "y").compareTo(s1) > 0);
+}
+
+void Test::testUtf8StringLiterals()
+{
+ const OString sIn(u8"ßa");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), sIn.getLength());
+ CPPUNIT_ASSERT_EQUAL(195, int(static_cast<unsigned char>(sIn[0])));
+ CPPUNIT_ASSERT_EQUAL(159, int(static_cast<unsigned char>(sIn[1])));
+ CPPUNIT_ASSERT_EQUAL(97, int(static_cast<unsigned char>(sIn[2])));
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_ostring_concat.cxx b/sal/qa/rtl/strings/test_ostring_concat.cxx
new file mode 100644
index 000000000..853f97564
--- /dev/null
+++ b/sal/qa/rtl/strings/test_ostring_concat.cxx
@@ -0,0 +1,206 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// activate support for detecting errors instead of getting compile errors
+#define RTL_STRING_UNITTEST_CONCAT
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <string>
+#include <typeinfo>
+
+bool rtl_string_unittest_invalid_concat = false;
+
+using namespace rtl;
+
+namespace CppUnit
+{
+template<> struct assertion_traits<std::type_info>
+{
+ static bool equal(std::type_info const & x, std::type_info const & y) { return x == y; }
+
+ static std::string toString(std::type_info const & x) { return x.name(); }
+};
+} // namespace
+
+namespace test::ostring {
+
+class StringConcat : public CppUnit::TestFixture
+{
+private:
+ void checkConcat();
+ void checkEnsureCapacity();
+ void checkAppend();
+ void checkInvalid();
+
+CPPUNIT_TEST_SUITE(StringConcat);
+CPPUNIT_TEST(checkConcat);
+CPPUNIT_TEST(checkEnsureCapacity);
+CPPUNIT_TEST(checkAppend);
+CPPUNIT_TEST(checkInvalid);
+CPPUNIT_TEST_SUITE_END();
+};
+
+void test::ostring::StringConcat::checkConcat()
+{
+// All the extra () are to protect commas against being treated as separators of macro arguments.
+ CPPUNIT_ASSERT_EQUAL( OString(), OString(OString() + OString()));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OString( "foo" ) + OString( "bar" )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OString > )), typeid( OString( "foo" ) + OString( "bar" )));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OString( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char[ 4 ] > )), typeid( OString( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), OString( OString( "foo" ) + "bar" + "baz" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OString, const char[ 4 ] >, const char[ 4 ] > )), typeid( OString( "foo" ) + "bar" + "baz" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringBuffer( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringBuffer, const char[ 4 ] > )), typeid( OStringBuffer( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringLiteral( "foo" ) + "bar" ));
+#if defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char[ 4 ] > )), typeid( OStringLiteral<4>( "foo" ) + "bar" ));
+ // the explicit OStringLiteral<4> template argument in the unevaluated typeid context
+ // is needed by some GCC versions, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96878>
+ // "Failed class template argument deduction in unevaluated, parenthesized context"
+#else
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char[ 4 ] > )), typeid( OStringLiteral( "foo" ) + "bar" ));
+#endif
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringLiteral( "foo" ) + static_cast<const char*>("bar") ));
+#if defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char* > )), typeid( OStringLiteral<4>( "foo" ) + static_cast<const char*>("bar") ));
+ // the explicit OStringLiteral<4> template argument in the unevaluated typeid context
+ // is needed by some GCC versions, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96878>
+ // "Failed class template argument deduction in unevaluated, parenthesized context"
+#else
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char* > )), typeid( OStringLiteral( "foo" ) + static_cast<const char*>("bar") ));
+#endif
+ const char d1[] = "xyz";
+ char d2[] = "abc";
+ const char* d3 = d1;
+ char* d4 = d2;
+ CPPUNIT_ASSERT_EQUAL( OString( "fooxyz" ), OString( OString( "foo" ) + d1 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char[ 4 ] > )), typeid( OString( "foo" ) + d1 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d2 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char[ 4 ] > )), typeid( OString( "foo" ) + d2 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooxyz" ), OString( OString( "foo" ) + d3 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char* > )), typeid( OString( "foo" ) + d3 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char* > )), typeid( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char* > )), typeid( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OString::Concat( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OString::Concat( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "xyzbar" ), OString( OString::Concat( d1 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OString::Concat( d1 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "abcbar" ), OString( OString::Concat( d2 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, char[ 4 ] >, const char[ 4 ] > )), typeid( OString::Concat( d2 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "xyzbar" ), OString( OString::Concat( d3 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, const char* >, const char[ 4 ] > )), typeid( OString::Concat( d3 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "abcbar" ), OString( OString::Concat( d4 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, char* >, const char[ 4 ] > )), typeid( OString::Concat( d4 ) + "bar" ));
+
+ CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10 )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< int > > )), typeid( OString( "num" ) + OString::number( 10 )));
+ CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10L )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< long long > > )), typeid( OString( "num" ) + OString::number( 10L )));
+ CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10ULL )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< unsigned long long > > )), typeid( OString( "num" ) + OString::number( 10ULL )));
+ CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5f )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< float > > )), typeid( OString( "num" ) + OString::number( 10.5f )));
+ CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5 )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< double > > )), typeid( OString( "num" ) + OString::number( 10.5 )));
+}
+
+void test::ostring::StringConcat::checkEnsureCapacity()
+{
+ rtl_String* str = nullptr;
+ rtl_string_newFromLiteral( &str, "test", strlen( "test" ), 0 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+
+ rtl_String* oldStr = str;
+ rtl_string_ensureCapacity( &str, 4 ); // should be no-op
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ CPPUNIT_ASSERT_EQUAL( str, oldStr );
+
+ rtl_string_acquire( oldStr );
+ CPPUNIT_ASSERT_EQUAL( 2, int( str->refCount ));
+ rtl_string_ensureCapacity( &str, 4 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ // a copy was forced because of refcount
+ CPPUNIT_ASSERT( oldStr != str );
+ CPPUNIT_ASSERT_EQUAL( 0, strcmp( oldStr->buffer, str->buffer ) );
+ CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount ));
+ rtl_string_release( str );
+ str = oldStr;
+
+ rtl_string_acquire( oldStr );
+ rtl_string_ensureCapacity( &str, 1024 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); // size is still 4
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ CPPUNIT_ASSERT( oldStr != str );
+ CPPUNIT_ASSERT_EQUAL( 0, strcmp( oldStr->buffer, str->buffer ) );
+ CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount ));
+ strcpy( str->buffer, "01234567890123456789" ); // but there should be extra capacity
+ str->length += 20;
+ rtl_string_release( str );
+ rtl_string_release( oldStr );
+}
+
+void test::ostring::StringConcat::checkAppend()
+{
+ OString str( "foo" );
+ str += OStringLiteral( "bar" ) + "baz";
+ CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), str );
+ OStringBuffer buf( "foo" );
+ buf.append( OStringLiteral( "bar" ) + "baz" );
+ CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), buf.makeStringAndClear());
+}
+
+#define INVALID_CONCAT( expression ) \
+ ( \
+ rtl_string_unittest_invalid_concat = false, \
+ ( void ) OString( expression ), \
+ rtl_string_unittest_invalid_concat )
+
+void test::ostring::StringConcat::checkInvalid()
+{
+ CPPUNIT_ASSERT( !INVALID_CONCAT( OString() + OString()));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUStringBuffer( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUStringLiteral( u"b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString::Concat( u"b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + 1 ));
+ rtl_String* rs = nullptr;
+ rtl_uString* rus = nullptr;
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rs ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rus ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString::number( 10 )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString::number( 0 ) + OUString::number( 10 )));
+
+#if 0
+ // Should fail to compile, to avoid use of OStringConcat lvalues that
+ // contain dangling references to temporaries:
+ auto const conc = OStringLiteral("foo") + "bar";
+ (void) OString(conc);
+#endif
+}
+
+} // namespace
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::ostring::StringConcat);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
new file mode 100644
index 000000000..ec0faec94
--- /dev/null
+++ b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
@@ -0,0 +1,282 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// activate the extra needed ctor
+#define RTL_STRING_UNITTEST
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+
+bool rtl_string_unittest_const_literal;
+bool rtl_string_unittest_const_literal_function;
+static bool rtl_string_unittest_non_const_literal_function;
+
+namespace test::ostring {
+
+class StringLiterals: public CppUnit::TestFixture
+{
+private:
+ void checkCtors();
+ void checkConstexprCtor();
+ void checkUsage();
+ void checkNonConstUsage();
+ void checkBuffer();
+
+ void testcall( const char str[] );
+
+ static const char bad5[];
+ static char bad6[];
+
+ // Check that OStringLiteral ctor is actually constexpr:
+ static constexpr rtlunittest::OStringLiteral dummy{"dummy"};
+
+CPPUNIT_TEST_SUITE(StringLiterals);
+CPPUNIT_TEST(checkCtors);
+CPPUNIT_TEST(checkConstexprCtor);
+CPPUNIT_TEST(checkUsage);
+CPPUNIT_TEST(checkNonConstUsage);
+CPPUNIT_TEST(checkBuffer);
+CPPUNIT_TEST_SUITE_END();
+};
+
+// reset the flag, call OString ctor with the given argument and return
+// whether the string literal ctor was used
+#define CONST_CTOR_USED( argument ) \
+ ( \
+ rtl_string_unittest_const_literal = false, \
+ ( void ) rtl::OString( argument ), \
+ result_tmp = rtl_string_unittest_const_literal, \
+ rtl_string_unittest_const_literal = false, \
+ ( void ) rtl::OStringBuffer( argument ), \
+ rtl_string_unittest_const_literal && result_tmp )
+
+void test::ostring::StringLiterals::checkCtors()
+{
+ bool result_tmp;
+ CPPUNIT_ASSERT( CONST_CTOR_USED( "test" ));
+ const char good1[] = "test";
+ CPPUNIT_ASSERT( CONST_CTOR_USED( good1 ));
+
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( static_cast<const char*>("test") ));
+ const char* bad1 = good1;
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad1 ));
+ char bad2[] = "test";
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad2 ));
+ char* bad3 = bad2;
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad3 ));
+ const char* bad4[] = { "test1" };
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad4[ 0 ] ));
+ testcall( good1 );
+#ifndef _MSC_VER
+ // this is actually not supposed to work (see discussion in stringutils.hxx),
+ // but gcc and clang somehow manage, so keep it used, just in case some other problem
+ // shows up somewhen in the future
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad5 )); // size is not known here
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad6 ));
+#endif
+
+// This one is technically broken, since the first element is 6 characters test\0\0,
+// but there does not appear a way to detect this by compile time (runtime will assert()).
+// RTL_CONSTASCII_USTRINGPARAM() has the same flaw.
+ const char bad7[][ 6 ] = { "test", "test2" };
+// CPPUNIT_ASSERT( CONST_CTOR_USED( bad7[ 0 ] ));
+ CPPUNIT_ASSERT( CONST_CTOR_USED( bad7[ 1 ] ));
+
+// Check that contents are correct and equal to the case when const char* ctor is used.
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "" ), rtl::OString( static_cast<const char*>("") ) );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "ab" ), rtl::OString( static_cast<const char*>("ab") ) );
+
+// Check that contents are correct and equal to the case when RTL_CONSTASCII_STRINGPARAM is used.
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "" ), rtl::OString( RTL_CONSTASCII_STRINGPARAM( "" )) );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "ab" ), rtl::OString( RTL_CONSTASCII_STRINGPARAM( "ab" )) );
+}
+
+const char test::ostring::StringLiterals::bad5[] = "test";
+char test::ostring::StringLiterals::bad6[] = "test";
+
+void test::ostring::StringLiterals::testcall( const char str[] )
+{
+#ifndef _MSC_VER
+ bool result_tmp;
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( str ));
+#else
+ // MSVC just errors out on this for some reason, which is fine as well
+ (void)str;
+#endif
+}
+
+void test::ostring::StringLiterals::checkConstexprCtor()
+{
+#if __cplusplus >= 202002L
+ static constinit
+#endif
+ rtl::OString s(dummy);
+ CPPUNIT_ASSERT_EQUAL(oslInterlockedCount(0x40000000), s.pData->refCount);
+ // SAL_STRING_STATIC_FLAG (sal/rtl/strimp.hxx)
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(rtl::OString("dummy"), s);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(dummy.getStr()), static_cast<void const *>(s.getStr()));
+}
+
+void test::ostring::StringLiterals::checkUsage()
+{
+// simply check that all string literal based calls work as expected
+// also check that they really use string literal overload and do not convert to OString
+ rtl::OString foo( "foo" );
+ rtl::OString FoO( "FoO" );
+ rtl::OString foobarfoo( "foobarfoo" );
+ rtl::OString foobar( "foobar" );
+ rtl::OString FooBaRfoo( "FooBaRfoo" );
+ rtl::OString FooBaR( "FooBaR" );
+ rtl::OString bar( "bar" );
+
+ rtl_string_unittest_const_literal = false; // start checking for OString conversions
+ rtl_string_unittest_non_const_literal_function = false; // and check for non-const variants
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = "foo" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( "fOo" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foobarfoo.match( "bar", 3 ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foobar.match( "foo" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( "bAr", 3 ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( "fOo" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foobar.startsWith( "foo" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foobar.endsWith( "bar" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+// rtl_string_unittest_const_literal_function = false;
+// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( "bar" ));
+// CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( bool(foo == "foo") );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( bool("foo" == foo) );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foo != "bar" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( "foo" != bar );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.indexOf( "foo", 1 ) );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+// rtl_string_unittest_const_literal_function = false;
+// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( "foo" ) == 6 );
+// CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
+ // if this is not true, some of the calls above converted to OString
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal );
+ // if this is not true, some of the calls above used non-const variants
+ CPPUNIT_ASSERT( !rtl_string_unittest_non_const_literal_function );
+}
+
+void test::ostring::StringLiterals::checkNonConstUsage()
+{
+// check that (non-const) char[] overloads work and do not use const char[] overloads
+ rtl::OString foo( "foo" );
+ rtl::OString FoO( "FoO" );
+ rtl::OString foobarfoo( "foobarfoo" );
+ rtl::OString foobar( "foobar" );
+ rtl::OString FooBaRfoo( "FooBaRfoo" );
+ rtl::OString FooBaR( "FooBaR" );
+ rtl::OString bar( "bar" );
+ char foo_c[] = "foo";
+ char bar_c[] = "bar";
+ char fOo_c[] = "fOo";
+ char bAr_c[] = "bAr";
+
+ rtl_string_unittest_const_literal = false; // start checking for OString conversions
+ rtl_string_unittest_const_literal_function = false; // and check for const variants
+ CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = static_cast<const char*>(foo_c) );
+ CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = foo_c );
+ CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( static_cast<const char*>(fOo_c) ));
+ CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( fOo_c ));
+ CPPUNIT_ASSERT( foobarfoo.match( static_cast<const char*>(bar_c), 3 ));
+ CPPUNIT_ASSERT( foobarfoo.match( bar_c, 3 ));
+ CPPUNIT_ASSERT( foobar.match( static_cast<const char*>(foo_c) ));
+ CPPUNIT_ASSERT( foobar.match( foo_c ));
+ CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( static_cast<const char*>(bAr_c), 3 ));
+ CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( bAr_c, 3 ));
+ CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( static_cast<const char*>(fOo_c) ));
+ CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( fOo_c ));
+ CPPUNIT_ASSERT( foobar.startsWith( static_cast<const char*>(foo_c) ));
+ CPPUNIT_ASSERT( foobar.startsWith( foo_c ));
+ CPPUNIT_ASSERT( foobar.endsWith( static_cast<const char*>(bar_c) ));
+ CPPUNIT_ASSERT( foobar.endsWith( bar_c ));
+// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( (const char*)bar_c ));
+// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( bar_c ));
+ CPPUNIT_ASSERT( bool(foo == static_cast<const char*>(foo_c)) );
+ CPPUNIT_ASSERT( bool(foo == foo_c) );
+ CPPUNIT_ASSERT( bool(static_cast<const char*>(foo_c) == foo) );
+ CPPUNIT_ASSERT( bool(foo_c == foo) );
+ CPPUNIT_ASSERT( foo != static_cast<const char*>(bar_c) );
+ CPPUNIT_ASSERT( foo != bar_c );
+ CPPUNIT_ASSERT( static_cast<const char*>(foo_c) != bar );
+ CPPUNIT_ASSERT( foo_c != bar );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.indexOf( static_cast<const char*>(foo_c), 1 ) );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.indexOf( foo_c, 1 ) );
+// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( (const char*)foo_c ) == 6 );
+// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( foo_c ) == 6 );
+ // if this is not true, some of the calls above used const variants
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal );
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal_function );
+}
+
+void test::ostring::StringLiterals::checkBuffer()
+{
+ rtl::OStringBuffer buf;
+ rtl_string_unittest_const_literal_function = false;
+ buf.append( "foo" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "foo" ), buf.toString());
+ rtl_string_unittest_const_literal_function = false;
+ buf.append( "bar" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "foobar" ), buf.toString());
+ rtl_string_unittest_const_literal_function = false;
+ buf.insert( 3, "baz" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "foobazbar" ), buf.toString());
+
+ rtl::OString foobazbard( "foobazbard" );
+ rtl::OString foodbazbard( "foodbazbard" );
+ rtl_string_unittest_const_literal = false; // start checking for OString conversions
+ rtl_string_unittest_const_literal_function = false; // and check for const variants
+ char d[] = "d";
+ CPPUNIT_ASSERT_EQUAL( foobazbard, buf.append( d ).toString());
+ CPPUNIT_ASSERT_EQUAL( foodbazbard, buf.insert( 3, d ).toString() );
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal );
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal_function );
+}
+
+#undef CONST_CTOR_USED
+
+} // namespace
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::ostring::StringLiterals);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_ostringbuffer.cxx b/sal/qa/rtl/strings/test_ostringbuffer.cxx
new file mode 100644
index 000000000..292e24310
--- /dev/null
+++ b/sal/qa/rtl/strings/test_ostringbuffer.cxx
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <string_view>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/stringutils.hxx>
+#include <sal/types.h>
+
+namespace
+{
+class Test : public CppUnit::TestFixture
+{
+private:
+ void testStringView()
+ {
+ OStringBuffer b("foobar");
+ b = std::string_view("abc").substr(
+ 0, 2); // avoid the string_view accidentally being NUL-terminated
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), b.getLength());
+ CPPUNIT_ASSERT_EQUAL('a', b.getStr()[0]);
+ CPPUNIT_ASSERT_EQUAL('b', b.getStr()[1]);
+ CPPUNIT_ASSERT_EQUAL('\0', b.getStr()[2]);
+ }
+
+ void testOStringChar()
+ {
+ OStringBuffer b("foobar");
+ b = OStringChar('a');
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), b.getLength());
+ CPPUNIT_ASSERT_EQUAL('a', b.getStr()[0]);
+ CPPUNIT_ASSERT_EQUAL('\0', b.getStr()[1]);
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testStringView);
+ CPPUNIT_TEST(testOStringChar);
+ CPPUNIT_TEST_SUITE_END();
+};
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/qa/rtl/strings/test_oustring_compare.cxx b/sal/qa/rtl/strings/test_oustring_compare.cxx
new file mode 100644
index 000000000..e55d4d3d9
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_compare.cxx
@@ -0,0 +1,97 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.h>
+#include <rtl/ustring.hxx>
+
+namespace test::oustring {
+
+class Compare: public CppUnit::TestFixture
+{
+private:
+ void equalsIgnoreAsciiCaseAscii();
+ void compareToIgnoreAsciiCase();
+ void compareTo();
+
+CPPUNIT_TEST_SUITE(Compare);
+CPPUNIT_TEST(equalsIgnoreAsciiCaseAscii);
+CPPUNIT_TEST(compareToIgnoreAsciiCase);
+CPPUNIT_TEST(compareTo);
+CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::Compare);
+
+void test::oustring::Compare::equalsIgnoreAsciiCaseAscii()
+{
+ const char* const abc = "abc";
+ const char* const abcd = "abcd";
+ const char* const empty = "";
+ CPPUNIT_ASSERT(!OUString().equalsIgnoreAsciiCaseAscii(abc));
+ CPPUNIT_ASSERT(!OUString().equalsIgnoreAsciiCaseAsciiL(abc,3));
+ CPPUNIT_ASSERT(!OUString("abc").
+ equalsIgnoreAsciiCaseAscii(empty));
+ CPPUNIT_ASSERT(!OUString("abc").
+ equalsIgnoreAsciiCaseAsciiL(empty,0));
+
+ CPPUNIT_ASSERT(OUString("abc").
+ equalsIgnoreAsciiCaseAscii(abc));
+ CPPUNIT_ASSERT(!OUString("abcd").
+ equalsIgnoreAsciiCaseAscii(abc));
+ CPPUNIT_ASSERT(!OUString("abc").
+ equalsIgnoreAsciiCaseAscii(abcd));
+}
+
+void test::oustring::Compare::compareToIgnoreAsciiCase()
+{
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(0),
+ OUString("abc").compareToIgnoreAsciiCase(u"ABC"));
+ CPPUNIT_ASSERT(
+ OUString("ABC").compareToIgnoreAsciiCase(u"abcdef")
+ < 0);
+ CPPUNIT_ASSERT(
+ OUString("A").compareToIgnoreAsciiCase(u"_") > 0);
+}
+
+void test::oustring::Compare::compareTo()
+{
+ // test that embedded NUL does not stop the compare
+ // this sort of thing is how we assign shape ids in oox
+ sal_Unicode str1[2] = { '\0', 'x' };
+ sal_Unicode str2[2] = { '\0', 'y' };
+
+ OUString s1(str1, 2);
+ OUString s2(str2, 2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s1.compareTo(s1));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s2.compareTo(s2));
+ CPPUNIT_ASSERT(s1.compareTo(s2) < 0);
+ CPPUNIT_ASSERT(s2.compareTo(s1) > 0);
+ CPPUNIT_ASSERT(s1.compareTo(OUStringConcatenation(s2 + "y")) < 0);
+ CPPUNIT_ASSERT(s2.compareTo(OUStringConcatenation(s1 + "x")) > 0);
+ CPPUNIT_ASSERT(OUString(s1 + "x").compareTo(s2) < 0);
+ CPPUNIT_ASSERT(OUString(s2 + "y").compareTo(s1) > 0);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_concat.cxx b/sal/qa/rtl/strings/test_oustring_concat.cxx
new file mode 100644
index 000000000..5a11da892
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_concat.cxx
@@ -0,0 +1,213 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// activate support for detecting errors instead of getting compile errors
+#define RTL_STRING_UNITTEST_CONCAT
+extern bool rtl_string_unittest_invalid_concat;
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+
+#include <string>
+#include <typeinfo>
+
+using namespace rtl;
+
+namespace CppUnit
+{
+template<> struct assertion_traits<std::type_info>
+{
+ static bool equal(std::type_info const & x, std::type_info const & y) { return x == y; }
+
+ static std::string toString(std::type_info const & x) { return x.name(); }
+};
+} // namespace
+
+namespace test::oustring {
+
+class StringConcat : public CppUnit::TestFixture
+{
+private:
+ void checkConcat();
+ void checkConcatAsciiL();
+ void checkEnsureCapacity();
+ void checkAppend();
+ void checkInvalid();
+
+CPPUNIT_TEST_SUITE(StringConcat);
+CPPUNIT_TEST(checkConcat);
+CPPUNIT_TEST(checkConcatAsciiL);
+CPPUNIT_TEST(checkEnsureCapacity);
+CPPUNIT_TEST(checkAppend);
+CPPUNIT_TEST(checkInvalid);
+CPPUNIT_TEST_SUITE_END();
+};
+
+void test::oustring::StringConcat::checkConcat()
+{
+// All the extra () are to protect commas against being treated as separators of macro arguments.
+ CPPUNIT_ASSERT_EQUAL( OUString(), OUString(OUString() + OUString()));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString( "foo" ) + OUString( "bar" )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUString > )), typeid( OUString( "foo" ) + OUString( "bar" )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const char[ 4 ] > )), typeid( OUString( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), OUString( OUString( "foo" ) + "bar" + "baz" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< OUString, const char[ 4 ] >, const char[ 4 ] > )), typeid( OUString( "foo" ) + "bar" + "baz" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUStringBuffer( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringBuffer, const char[ 4 ] > )), typeid( OUStringBuffer( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUStringLiteral( u"foo" ) + "bar" ));
+#if defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringLiteral<4>, const char[ 4 ] > )), typeid( OUStringLiteral<4>( u"foo" ) + "bar" ));
+ // the explicit OUStringLiteral<4> template argument in the unevaluated typeid context
+ // is needed by some GCC versions, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96878>
+ // "Failed class template argument deduction in unevaluated, parenthesized context"
+#else
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringLiteral<4>, const char[ 4 ] > )), typeid( OUStringLiteral( u"foo" ) + "bar" ));
+#endif
+ const char d1[] = "xyz";
+ CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( OUString( "foo" ) + d1 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const char[ 4 ] > )), typeid( OUString( "foo" ) + d1 ));
+ const sal_Unicode* d2 = u"xyz";
+ CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( OUString( "foo" ) + d2 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const sal_Unicode* > )), typeid( OUString( "foo" ) + d2 ));
+ const sal_Unicode d3[] = u"xyz";
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString::Concat( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "xyzbar" ), OUString( OUString::Concat( d1 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( d1 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString::Concat( u"foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( u"foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "xyzbar" ), OUString( OUString::Concat( d2 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode* >, const char[ 4 ] > )), typeid( OUString::Concat( d2 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "xyzbar" ), OUString( OUString::Concat( d3 ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( d3 ) + "bar" ));
+
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10 )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< int > > )), typeid( OUString( "num" ) + OUString::number( 10 )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10L )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< long long > > )), typeid( OUString( "num" ) + OUString::number( 10L )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10ULL )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< unsigned long long > > )), typeid( OUString( "num" ) + OUString::number( 10ULL )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5f )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< float > > )), typeid( OUString( "num" ) + OUString::number( 10.5f )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5 )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< double > > )), typeid( OUString( "num" ) + OUString::number( 10.5 )));
+}
+
+void test::oustring::StringConcat::checkConcatAsciiL()
+{
+ {
+ OUString s("foo");
+ s += "";
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"), s);
+ }
+ {
+ OUString s("foo");
+ s += "bar";
+ CPPUNIT_ASSERT_EQUAL(OUString("foobar"), s);
+ }
+}
+
+void test::oustring::StringConcat::checkEnsureCapacity()
+{
+ rtl_uString* str = nullptr;
+ rtl_uString_newFromLiteral( &str, "test", strlen( "test" ), 0 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+
+ rtl_uString* oldStr = str;
+ rtl_uString_ensureCapacity( &str, 4 ); // should be no-op
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ CPPUNIT_ASSERT_EQUAL( str, oldStr );
+
+ rtl_uString_acquire( oldStr );
+ CPPUNIT_ASSERT_EQUAL( 2, int( str->refCount ));
+ rtl_uString_ensureCapacity( &str, 4 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ // a copy was forced because of refcount
+ CPPUNIT_ASSERT( oldStr != str );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(0), rtl_ustr_compare( oldStr->buffer, str->buffer ) );
+ CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount ));
+ rtl_uString_release( str );
+ str = oldStr;
+
+ rtl_uString_acquire( oldStr );
+ rtl_uString_ensureCapacity( &str, 1024 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); // size is still 4
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ CPPUNIT_ASSERT( oldStr != str );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(0), rtl_ustr_compare( oldStr->buffer, str->buffer ) );
+ CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount ));
+ // but there should be extra capacity
+ for( int i = 0;
+ i < 20;
+ ++i )
+ str->buffer[ str->length + i ] = '0';
+ str->length += 20;
+ rtl_uString_release( str );
+ rtl_uString_release( oldStr );
+}
+
+void test::oustring::StringConcat::checkAppend()
+{
+ OUString str( "foo" );
+ str += OUStringLiteral( u"bar" ) + "baz";
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), str );
+ OUStringBuffer buf( "foo" );
+ buf.append( OUStringLiteral( u"bar" ) + "baz" );
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), buf.makeStringAndClear());
+}
+
+#define INVALID_CONCAT( expression ) \
+ ( \
+ rtl_string_unittest_invalid_concat = false, \
+ ( void ) OUString( expression ), \
+ rtl_string_unittest_invalid_concat )
+
+void test::oustring::StringConcat::checkInvalid()
+{
+ CPPUNIT_ASSERT( !INVALID_CONCAT( OUString() + OUString()));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OStringBuffer( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + static_cast<const char*>("b") ));
+ char d[] = "b";
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + d ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + static_cast<char*>(d) ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OStringLiteral( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString::Concat( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + 1 ));
+ rtl_String* rs = nullptr;
+ rtl_uString* rus = nullptr;
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rs ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rus ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString::number( 10 )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString::number( 0 ) + OString::number( 10 )));
+
+#if 0
+ // Should fail to compile, to avoid use of OUStringConcat lvalues that
+ // contain dangling references to temporaries:
+ auto const conc = OUStringLiteral("foo") + "bar";
+ (void) OUString(conc);
+#endif
+}
+
+} // namespace
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StringConcat);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_convert.cxx b/sal/qa/rtl/strings/test_oustring_convert.cxx
new file mode 100644
index 000000000..da930a03f
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_convert.cxx
@@ -0,0 +1,177 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <sal/macros.h>
+
+namespace test::oustring {
+
+class Convert: public CppUnit::TestFixture
+{
+private:
+ void convertToString();
+
+ CPPUNIT_TEST_SUITE(Convert);
+ CPPUNIT_TEST(convertToString);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::Convert);
+
+namespace {
+
+struct TestConvertToString
+{
+ sal_Unicode aSource[100];
+ sal_Int32 nLength;
+ rtl_TextEncoding nEncoding;
+ sal_uInt32 nFlags;
+ char const * pStrict;
+ char const * pRelaxed;
+};
+
+void testConvertToString(TestConvertToString const & rTest)
+{
+ const OUString aSource(rTest.aSource, rTest.nLength);
+ OString aStrict(RTL_CONSTASCII_STRINGPARAM("12345"));
+ bool bSuccess = aSource.convertToString(&aStrict, rTest.nEncoding,
+ rTest.nFlags);
+ OString aRelaxed(OUStringToOString(aSource, rTest.nEncoding,
+ rTest.nFlags));
+
+ OStringBuffer aPrefix;
+ aPrefix.append("{");
+ for (sal_Int32 i = 0; i < rTest.nLength; ++i)
+ {
+ aPrefix.append("U+");
+ aPrefix.append(static_cast< sal_Int32 >(rTest.aSource[i]), 16);
+ if (i + 1 < rTest.nLength)
+ aPrefix.append(",");
+ }
+ aPrefix.append("}, ");
+ aPrefix.append(static_cast< sal_Int32 >(rTest.nEncoding));
+ aPrefix.append(", 0x");
+ aPrefix.append(static_cast< sal_Int32 >(rTest.nFlags), 16);
+ aPrefix.append(" -> ");
+
+ if (bSuccess)
+ {
+ if (rTest.pStrict == nullptr || aStrict != rTest.pStrict)
+ {
+ OStringBuffer aMessage(aPrefix);
+ aMessage.append("strict = \"");
+ aMessage.append(aStrict);
+ aMessage.append("\"");
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false);
+ }
+ }
+ else
+ {
+ if (aStrict != "12345")
+ {
+ OStringBuffer aMessage(aPrefix);
+ aMessage.append("modified output");
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false);
+ }
+ if (rTest.pStrict != nullptr)
+ {
+ OStringBuffer aMessage(aPrefix);
+ aMessage.append("failed");
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false);
+ }
+ }
+ if (aRelaxed != rTest.pRelaxed)
+ {
+ OStringBuffer aMessage(aPrefix);
+ aMessage.append("relaxed = \"");
+ aMessage.append(aRelaxed);
+ aMessage.append("\"");
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false);
+ }
+}
+
+}
+
+void test::oustring::Convert::convertToString()
+{
+ TestConvertToString const aTests[]
+ = { { { 0 },
+ 0,
+ RTL_TEXTENCODING_ASCII_US,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR,
+ "",
+ "" },
+ { { 0 },
+ 0,
+ RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS,
+ "",
+ "" },
+ { { 0x0041,0x0042,0x0043 },
+ 3,
+ RTL_TEXTENCODING_ASCII_US,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR,
+ "ABC",
+ "ABC" },
+ { { 0x0041,0x0042,0x0043 },
+ 3,
+ RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS,
+ "ABC",
+ "ABC" },
+ { { 0xB800 },
+ 1,
+ RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR,
+ nullptr,
+ "" },
+ { { 0x3001, 0xB800 },
+ 2,
+ RTL_TEXTENCODING_ISO_2022_JP,
+ OUSTRING_TO_OSTRING_CVTFLAGS,
+ "\x1b\x24\x42\x21\x22\x1b\x28\x42\x3f",
+ "\x1b\x24\x42\x21\x22\x1b\x28\x42\x3f" },
+ { { 0x0041,0x0100,0x0042 },
+ 3,
+ RTL_TEXTENCODING_ISO_8859_1,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR,
+ nullptr,
+ "A" },
+ { { 0x0041,0x0100,0x0042 },
+ 3,
+ RTL_TEXTENCODING_ISO_8859_1,
+ OUSTRING_TO_OSTRING_CVTFLAGS,
+ "A?B",
+ "A?B" } };
+ for (size_t i = 0; i < SAL_N_ELEMENTS(aTests); ++i)
+ testConvertToString(aTests[i]);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_endswith.cxx b/sal/qa/rtl/strings/test_oustring_endswith.cxx
new file mode 100644
index 000000000..bf01577e2
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_endswith.cxx
@@ -0,0 +1,113 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/textenc.h>
+#include <rtl/ustring.hxx>
+#include <sal/macros.h>
+
+namespace test::oustring {
+
+class EndsWith: public CppUnit::TestFixture
+{
+private:
+ void endsWith();
+
+ CPPUNIT_TEST_SUITE(EndsWith);
+ CPPUNIT_TEST(endsWith);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::EndsWith);
+
+namespace {
+
+void appendString(OStringBuffer & buffer, OString const & string)
+{
+ buffer.append('"');
+ for (int i = 0; i < string.getLength(); ++i) {
+ char c = string[i];
+ if (c < ' ' || c == '"' || c == '\\' || c > '~') {
+ buffer.append('\\');
+ sal_Int32 n = static_cast< sal_Int32 >(
+ static_cast< unsigned char >(c));
+ if (n < 16) {
+ buffer.append('0');
+ }
+ buffer.append(n, 16);
+ } else {
+ buffer.append(c);
+ }
+ }
+ buffer.append('"');
+}
+
+}
+
+void test::oustring::EndsWith::endsWith()
+{
+ struct Data {
+ char const * str1;
+ sal_Int32 str1Len;
+ char const * str2;
+ sal_Int32 str2Len;
+ bool endsWith;
+ };
+ Data const data[] = {
+ { RTL_CONSTASCII_STRINGPARAM(""), RTL_CONSTASCII_STRINGPARAM(""),
+ true },
+ { RTL_CONSTASCII_STRINGPARAM("abc"), RTL_CONSTASCII_STRINGPARAM(""),
+ true },
+ { RTL_CONSTASCII_STRINGPARAM(""), RTL_CONSTASCII_STRINGPARAM("abc"),
+ false },
+ { RTL_CONSTASCII_STRINGPARAM("ABC"), RTL_CONSTASCII_STRINGPARAM("abc"),
+ true },
+ { RTL_CONSTASCII_STRINGPARAM("abcd"), RTL_CONSTASCII_STRINGPARAM("bcd"),
+ true },
+ { RTL_CONSTASCII_STRINGPARAM("bcd"), RTL_CONSTASCII_STRINGPARAM("abcd"),
+ false },
+ { RTL_CONSTASCII_STRINGPARAM("a\0b\0c"),
+ RTL_CONSTASCII_STRINGPARAM("b\0c"), true },
+ { RTL_CONSTASCII_STRINGPARAM("a\0b\0c"),
+ RTL_CONSTASCII_STRINGPARAM("b"), false } };
+ for (size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ OStringBuffer msg;
+ appendString(msg, OString(data[i].str1, data[i].str1Len));
+ msg.append(".endsWithIgnoreAsciiCaseAsciiL(");
+ appendString(msg, OString(data[i].str2, data[i].str2Len));
+ msg.append(") == ");
+ msg.append(data[i].endsWith);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ msg.getStr(),
+ data[i].endsWith,
+ OUString(
+ data[i].str1, data[i].str1Len,
+ RTL_TEXTENCODING_ASCII_US).endsWithIgnoreAsciiCaseAsciiL(
+ data[i].str2, data[i].str2Len));
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_startswith.cxx b/sal/qa/rtl/strings/test_oustring_startswith.cxx
new file mode 100644
index 000000000..a74671e6e
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_startswith.cxx
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustring.hxx>
+
+namespace test::oustring {
+
+class StartsWith: public CppUnit::TestFixture
+{
+private:
+ void startsWith();
+
+ CPPUNIT_TEST_SUITE(StartsWith);
+ CPPUNIT_TEST(startsWith);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StartsWith);
+
+void test::oustring::StartsWith::startsWith()
+{
+ CPPUNIT_ASSERT( OUString( "foobar" ).startsWith( "foo" ));
+ CPPUNIT_ASSERT( !OUString( "foo" ).startsWith( "foobar" ));
+ CPPUNIT_ASSERT( !OUString( "foobar" ).startsWith( "oo" ));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_stringliterals.cxx b/sal/qa/rtl/strings/test_oustring_stringliterals.cxx
new file mode 100644
index 000000000..0caa3fc03
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_stringliterals.cxx
@@ -0,0 +1,432 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// activate the extra needed ctor
+#define RTL_STRING_UNITTEST
+
+#include <sal/config.h>
+
+#include <string>
+#include <string_view>
+#include <utility>
+
+#include <o3tl/cppunittraitshelper.hxx>
+#include <sal/types.h>
+#include <config_global.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.h>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+
+extern bool rtl_string_unittest_const_literal;
+bool rtl_string_unittest_invalid_conversion;
+
+namespace test::oustring {
+
+class StringLiterals: public CppUnit::TestFixture
+{
+private:
+ void checkCtors();
+ void checkConstexprCtor();
+ void checkUsage();
+ void checkBuffer();
+ void checkOUStringLiteral();
+ void checkOUStringChar();
+ void checkUtf16();
+ void checkEmbeddedNul();
+
+ void testcall( const char str[] );
+
+ // Check that OUStringLiteral ctor is actually constexpr:
+ static constexpr rtlunittest::OUStringLiteral dummy{u"dummy"};
+
+CPPUNIT_TEST_SUITE(StringLiterals);
+CPPUNIT_TEST(checkCtors);
+CPPUNIT_TEST(checkConstexprCtor);
+CPPUNIT_TEST(checkUsage);
+CPPUNIT_TEST(checkBuffer);
+CPPUNIT_TEST(checkOUStringLiteral);
+CPPUNIT_TEST(checkOUStringChar);
+CPPUNIT_TEST(checkUtf16);
+CPPUNIT_TEST(checkEmbeddedNul);
+CPPUNIT_TEST_SUITE_END();
+};
+
+// reset the flag, evaluate the expression and return
+// whether the string literal ctor was used (i.e. whether the conversion was valid)
+template<typename T> static bool VALID_CONVERSION( T && expression )
+{
+ rtl_string_unittest_invalid_conversion = false;
+ // OK to std::forward expression twice; what is relevant in both ctor calls
+ // is not the content of the passed argument (which is ignored anyway by the
+ // special RTL_STRING_UNITTEST ctors) but only its type:
+ ( void ) rtl::OUString( std::forward<T>(expression) );
+ ( void ) rtl::OUStringBuffer( std::forward<T>(expression) );
+ return !rtl_string_unittest_invalid_conversion;
+}
+template<typename T> static bool VALID_CONVERSION_CALL( T f )
+{
+ rtl_string_unittest_invalid_conversion = false;
+ ( void ) rtl::OUString( f() );
+ ( void ) rtl::OUStringBuffer( f() );
+ return !rtl_string_unittest_invalid_conversion;
+}
+
+void test::oustring::StringLiterals::checkCtors()
+{
+ CPPUNIT_ASSERT( VALID_CONVERSION( "test" ));
+ const char good1[] = "test";
+ CPPUNIT_ASSERT( VALID_CONVERSION( good1 ));
+
+ CPPUNIT_ASSERT( !VALID_CONVERSION( static_cast<const char*>("test") ));
+ const char* bad1 = good1;
+ CPPUNIT_ASSERT( !VALID_CONVERSION( bad1 ));
+ char bad2[] = "test";
+ CPPUNIT_ASSERT( !VALID_CONVERSION( bad2 ));
+ char* bad3 = bad2;
+ CPPUNIT_ASSERT( !VALID_CONVERSION( bad3 ));
+ const char* bad4[] = { "test1" };
+ CPPUNIT_ASSERT( !VALID_CONVERSION( bad4[ 0 ] ));
+ testcall( good1 );
+
+// This one is technically broken, since the first element is 6 characters test\0\0,
+// but there does not appear a way to detect this by compile time (runtime will assert()).
+// RTL_CONSTASCII_USTRINGPARAM() has the same flaw.
+ const char bad5[][ 6 ] = { "test", "test2" };
+// CPPUNIT_ASSERT( VALID_CONVERSION( bad5[ 0 ] ));
+ CPPUNIT_ASSERT( VALID_CONVERSION( bad5[ 1 ] ));
+
+// Check that contents are correct and equal to the case when RTL_CONSTASCII_USTRINGPARAM is used.
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "" ), rtl::OUString( "" ));
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "ab" ), rtl::OUString( "ab" ));
+#if 0
+// Also check that embedded \0 is included.
+// In fact, allowing this is probably just trouble, so this now asserts.
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "\0" ), rtl::OUString( "\0" ));
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "a\0b" ), rtl::OUString( "a\0b" ));
+#endif
+}
+
+void test::oustring::StringLiterals::testcall( const char str[] )
+{
+ CPPUNIT_ASSERT(
+ !VALID_CONVERSION_CALL([&str]() { return rtl::OUString(str); }));
+}
+
+void test::oustring::StringLiterals::checkConstexprCtor()
+{
+#if __cplusplus >= 202002L
+ static constinit
+#endif
+ rtl::OUString s(dummy);
+ CPPUNIT_ASSERT_EQUAL(oslInterlockedCount(0x40000000), s.pData->refCount);
+ // SAL_STRING_STATIC_FLAG (sal/rtl/strimp.hxx)
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("dummy"), s);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(dummy.getStr()), static_cast<void const *>(s.getStr()));
+}
+
+void test::oustring::StringLiterals::checkUsage()
+{
+// simply check that all string literal based calls work as expected
+// also check that they really use string literal overload and do not convert to OUString
+ rtl::OUString foo( "foo" );
+ rtl::OUString FoO( "FoO" );
+ rtl::OUString foobarfoo( "foobarfoo" );
+ rtl::OUString foobar( "foobar" );
+ rtl::OUString FooBaRfoo( "FooBaRfoo" );
+ rtl::OUString FooBaR( "FooBaR" );
+ rtl::OUString bar( "bar" );
+ rtl::OUString test( "test" );
+
+ rtl_string_unittest_const_literal = false; // start checking for OUString conversions
+ CPPUNIT_ASSERT_EQUAL( foo, rtl::OUString() = "foo" );
+ CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( "fOo" ));
+ CPPUNIT_ASSERT( foobarfoo.match( "bar", 3 ));
+ CPPUNIT_ASSERT( foobar.match( "foo" ));
+ CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( "bAr", 3 ));
+ CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( "fOo" ));
+ CPPUNIT_ASSERT( foobar.startsWith( "foo" ));
+ CPPUNIT_ASSERT( FooBaR.startsWithIgnoreAsciiCase( "foo" ));
+ CPPUNIT_ASSERT( foobar.endsWith( "bar" ));
+ CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( "bar" ));
+ CPPUNIT_ASSERT( bool(foo == "foo") );
+ CPPUNIT_ASSERT( bool("foo" == foo) );
+ CPPUNIT_ASSERT( foo != "bar" );
+ CPPUNIT_ASSERT( "foo" != bar );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.indexOf( "foo", 1 ) );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.lastIndexOf( "foo" ) );
+ CPPUNIT_ASSERT( bool(foobarfoo.replaceFirst( "foo", test ) == "testbarfoo") );
+ CPPUNIT_ASSERT( bool(foobarfoo.replaceFirst( "foo", "test" ) == "testbarfoo") );
+ CPPUNIT_ASSERT( bool(foobarfoo.replaceAll( "foo", test ) == "testbartest") );
+ CPPUNIT_ASSERT( bool(foobarfoo.replaceAll( "foo", "test" ) == "testbartest") );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(0), foo.reverseCompareTo( "foo" ) );
+ // if this is not true, some of the calls above converted to OUString
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal );
+}
+
+void test::oustring::StringLiterals::checkBuffer()
+{
+ rtl::OUStringBuffer buf;
+ buf.append( "foo" );
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foo" ), buf.toString());
+ buf.append( "bar" );
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foobar" ), buf.toString());
+ buf.insert( 3, "baz" );
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foobazbar" ), buf.toString());
+ char d[] = "d";
+ CPPUNIT_ASSERT( !VALID_CONVERSION( buf.append( rtl::OUString( d ))));
+ CPPUNIT_ASSERT( !VALID_CONVERSION( buf.append( rtl::OUStringBuffer( d ))));
+}
+
+namespace {
+
+rtl::OUString conditional(bool flag) {
+ return rtl::OUString::Concat(flag ? std::u16string_view(u"a") : std::u16string_view(u"bb"))
+ + "c";
+}
+
+}
+
+void test::oustring::StringLiterals::checkOUStringLiteral()
+{
+ CPPUNIT_ASSERT(bool(conditional(true) == "ac"));
+ CPPUNIT_ASSERT(bool(conditional(false) == "bbc"));
+
+ static constexpr rtlunittest::OUStringLiteral s1lit(u"abc");
+ rtl::OUString s1(s1lit);
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), s1);
+ static constexpr rtlunittest::OUStringLiteral de(u"de");
+ s1 = de;
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("de"), s1);
+ s1 += rtlunittest::OUStringLiteral(u"fde");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("defde"), s1);
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(0),
+ s1.reverseCompareTo(rtlunittest::OUStringLiteral(u"defde")));
+ CPPUNIT_ASSERT(
+ s1.equalsIgnoreAsciiCase(rtlunittest::OUStringLiteral(u"DEFDE")));
+ CPPUNIT_ASSERT(s1.match(rtlunittest::OUStringLiteral(u"fde"), 2));
+ CPPUNIT_ASSERT(
+ s1.matchIgnoreAsciiCase(rtlunittest::OUStringLiteral(u"FDE"), 2));
+ rtl::OUString s2;
+ CPPUNIT_ASSERT(s1.startsWith(rtlunittest::OUStringLiteral(u"de"), &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("fde"), s2);
+ CPPUNIT_ASSERT(
+ s1.startsWithIgnoreAsciiCase(
+ rtlunittest::OUStringLiteral(u"DEFD"), &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("e"), s2);
+ CPPUNIT_ASSERT(s1.endsWith(rtlunittest::OUStringLiteral(u"de"), &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("def"), s2);
+ CPPUNIT_ASSERT(
+ s1.endsWithIgnoreAsciiCase(rtlunittest::OUStringLiteral(u"EFDE"), &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("d"), s2);
+ static constexpr rtlunittest::OUStringLiteral defde(u"defde");
+ CPPUNIT_ASSERT(bool(s1 == defde));
+ CPPUNIT_ASSERT(bool(defde == s1));
+ static constexpr rtlunittest::OUStringLiteral abc(u"abc");
+ CPPUNIT_ASSERT(s1 != abc);
+ CPPUNIT_ASSERT(abc != s1);
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), s1.indexOf(rtlunittest::OUStringLiteral(u"de"), 1));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), s1.lastIndexOf(rtlunittest::OUStringLiteral(u"de")));
+ sal_Int32 i = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst(
+ rtlunittest::OUStringLiteral(u"de"), rtl::OUString("abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst(
+ rtl::OUString("de"), rtlunittest::OUStringLiteral(u"abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst(
+ rtlunittest::OUStringLiteral(u"de"),
+ rtlunittest::OUStringLiteral(u"abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst(rtlunittest::OUStringLiteral(u"de"), "abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst("de", rtlunittest::OUStringLiteral(u"abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll(
+ rtlunittest::OUStringLiteral(u"de"), rtl::OUString("abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll(
+ rtl::OUString("de"), rtlunittest::OUStringLiteral(u"abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll(
+ rtlunittest::OUStringLiteral(u"de"),
+ rtlunittest::OUStringLiteral(u"abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll(rtlunittest::OUStringLiteral(u"de"), "abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll("de", rtlunittest::OUStringLiteral(u"abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcdef"),
+ rtl::OUString(
+ rtl::OUString("abc") + rtlunittest::OUStringLiteral(u"def")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcdef"),
+ rtl::OUString(
+ rtlunittest::OUStringLiteral(u"abc") + rtl::OUString("def")));
+ rtl::OUStringBuffer b(rtlunittest::OUStringLiteral(u"abc"));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), b.toString());
+ b.append(rtlunittest::OUStringLiteral(u"def"));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abcdef"), b.toString());
+ b.insert(2, rtlunittest::OUStringLiteral(u"gabab"));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abgababcdef"), b.toString());
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), b.indexOf(rtlunittest::OUStringLiteral(u"ab"), 1));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(5), b.lastIndexOf(rtlunittest::OUStringLiteral(u"ab")));
+}
+
+void test::oustring::StringLiterals::checkOUStringChar()
+{
+ auto l1 = rtlunittest::OUStringChar('A');
+ CPPUNIT_ASSERT_EQUAL(u'A', l1.c);
+
+ char const c2 = 'A';
+ auto l2 = rtlunittest::OUStringChar(c2);
+ CPPUNIT_ASSERT_EQUAL(u'A', l2.c);
+
+ char c3 = 'A'; auto l3 = rtlunittest::OUStringChar(c3);
+ CPPUNIT_ASSERT_EQUAL(u'A', l3.c);
+
+ auto l4 = rtlunittest::OUStringChar(u'A');
+ CPPUNIT_ASSERT_EQUAL(u'A', l4.c);
+
+ sal_Unicode const c5 = 0x100;
+ auto l5 = rtlunittest::OUStringChar(c5);
+ CPPUNIT_ASSERT_EQUAL(c5, l5.c);
+
+ rtl::OUString s1{rtlunittest::OUStringChar('A')};
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'A', s1[0]);
+
+ CPPUNIT_ASSERT_EQUAL(
+ true, rtl::OUString("A") == rtlunittest::OUStringChar('A'));
+ CPPUNIT_ASSERT_EQUAL(
+ false, rtl::OUString("AB") == rtlunittest::OUStringChar('A'));
+ CPPUNIT_ASSERT_EQUAL(
+ false, rtl::OUString("A") != rtlunittest::OUStringChar('A'));
+ CPPUNIT_ASSERT_EQUAL(
+ true, rtl::OUString("AB") != rtlunittest::OUStringChar('A'));
+
+ rtl::OUString s2("A" + rtlunittest::OUStringChar('b'));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s2.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'A', s2[0]);
+ CPPUNIT_ASSERT_EQUAL(u'b', s2[1]);
+}
+
+void test::oustring::StringLiterals::checkUtf16() {
+ rtl::OUString s1(u"abc");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), s1);
+ s1 = u"de";
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("de"), s1);
+ s1 += u"fde";
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("defde"), s1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s1.reverseCompareTo(u"defde"));
+ CPPUNIT_ASSERT(s1.equalsIgnoreAsciiCase(u"DEFDE"));
+ CPPUNIT_ASSERT(s1.match(u"fde", 2));
+ CPPUNIT_ASSERT(s1.matchIgnoreAsciiCase(u"FDE", 2));
+ rtl::OUString s2;
+ CPPUNIT_ASSERT(s1.startsWith(u"de", &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"fde"), s2);
+ CPPUNIT_ASSERT(s1.startsWithIgnoreAsciiCase(u"DEFD", &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"e"), s2);
+ CPPUNIT_ASSERT(s1.endsWith(u"de", &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"def"), s2);
+ CPPUNIT_ASSERT(s1.endsWithIgnoreAsciiCase(u"EFDE", &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"d"), s2);
+ CPPUNIT_ASSERT(bool(s1 == u"defde"));
+ CPPUNIT_ASSERT(bool(u"defde" == s1));
+ CPPUNIT_ASSERT(s1 != u"abc");
+ CPPUNIT_ASSERT(u"abc" != s1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), s1.indexOf(u"de", 1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), s1.lastIndexOf(u"de"));
+ sal_Int32 i = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"),
+ s1.replaceFirst(u"de", rtl::OUString("abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"),
+ s1.replaceFirst(rtl::OUString("de"), u"abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"), s1.replaceFirst(u"de", u"abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"), s1.replaceFirst(u"de", "abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"), s1.replaceFirst("de", u"abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", rtl::OUString("abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll(rtl::OUString("de"), u"abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", u"abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", "abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll("de", u"abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcdef"), rtl::OUString(rtl::OUString("abc") + u"def"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcdef"), rtl::OUString(u"abc" + rtl::OUString("def")));
+ rtl::OUStringBuffer b(u"abc");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), b.toString());
+ b.append(u"def");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abcdef"), b.toString());
+ b.insert(2, u"gabab");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abgababcdef"), b.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), b.indexOf(u"ab", 1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), b.lastIndexOf(u"ab"));
+}
+
+void test::oustring::StringLiterals::checkEmbeddedNul() {
+ using namespace std::literals;
+ rtl::OUString const s("foobar");
+ constexpr char16_t const a[] = u"foo\0hidden";
+ char16_t const * const p = a;
+ CPPUNIT_ASSERT(s.startsWith(a));
+ CPPUNIT_ASSERT(s.startsWith(p));
+ CPPUNIT_ASSERT(s.startsWith(u"foo\0hidden"));
+ CPPUNIT_ASSERT(!s.startsWith(u"foo\0hidden"s));
+ CPPUNIT_ASSERT(!s.startsWith(u"foo\0hidden"sv));
+/*TODO:*/
+ CPPUNIT_ASSERT(!s.startsWith(rtlunittest::OUStringLiteral(a)));
+ CPPUNIT_ASSERT(!s.startsWith(rtlunittest::OUStringLiteral(u"foo\0hidden")));
+/*TODO*/
+}
+
+} // namespace
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StringLiterals);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_strings_defaultstringview.cxx b/sal/qa/rtl/strings/test_strings_defaultstringview.cxx
new file mode 100644
index 000000000..591688b31
--- /dev/null
+++ b/sal/qa/rtl/strings/test_strings_defaultstringview.cxx
@@ -0,0 +1,118 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <string_view>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <rtl/string.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.hxx>
+
+namespace
+{
+class Test : public CppUnit::TestFixture
+{
+ void string() { CPPUNIT_ASSERT_EQUAL(OString(), OString(std::string_view())); }
+
+ void stringbuffer()
+ {
+ // No functions related to OStringBuffer that take a std::string_view or std::u16string_view
+ // argument.
+ }
+
+ void ustring()
+ {
+ CPPUNIT_ASSERT_EQUAL(OUString(), OUString(std::u16string_view()));
+ OUString s1("foo");
+ s1 = std::u16string_view();
+ CPPUNIT_ASSERT_EQUAL(OUString(), s1);
+ OUString s2("foo");
+ s2 += std::u16string_view();
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"), s2);
+ CPPUNIT_ASSERT_GREATER(sal_Int32(0),
+ OUString("foo").reverseCompareTo(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(false, OUString("foo").equalsIgnoreAsciiCase(std::u16string_view()));
+ CPPUNIT_ASSERT_GREATER(sal_Int32(0),
+ OUString("foo").compareToIgnoreAsciiCase(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("foo").match(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("foo").matchIgnoreAsciiCase(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("foo").startsWith(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(true,
+ OUString("foo").startsWithIgnoreAsciiCase(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("foo").endsWith(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("foo").endsWithIgnoreAsciiCase(std::u16string_view()));
+ OUString const foo("foo"); // avoid loplugin:stringconstant, loplugin:stringview
+ CPPUNIT_ASSERT_EQUAL(false, foo == std::u16string_view());
+ CPPUNIT_ASSERT_EQUAL(true, foo != std::u16string_view());
+ CPPUNIT_ASSERT_EQUAL(false, foo < std::u16string_view());
+ CPPUNIT_ASSERT_EQUAL(false, foo <= std::u16string_view());
+ CPPUNIT_ASSERT_EQUAL(true, foo > std::u16string_view());
+ CPPUNIT_ASSERT_EQUAL(true, foo >= std::u16string_view());
+ CPPUNIT_ASSERT_EQUAL(false, std::u16string_view() == foo);
+ CPPUNIT_ASSERT_EQUAL(true, std::u16string_view() != foo);
+ CPPUNIT_ASSERT_EQUAL(true, std::u16string_view() < foo);
+ CPPUNIT_ASSERT_EQUAL(true, std::u16string_view() <= foo);
+ CPPUNIT_ASSERT_EQUAL(false, std::u16string_view() > foo);
+ CPPUNIT_ASSERT_EQUAL(false, std::u16string_view() >= foo);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString("foo").indexOf(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString("foo").lastIndexOf(std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString("foo").lastIndexOf(std::u16string_view(), 3));
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(std::u16string_view(), std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("barfoo"),
+ OUString("foobarfoo").replaceFirst(std::u16string_view(u"foo"), std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(std::u16string_view(), std::u16string_view(u"baz")));
+ CPPUNIT_ASSERT_EQUAL(OUString("barfoo"),
+ OUString("foobarfoo").replaceFirst("foo", std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(std::u16string_view(), "baz"));
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll(std::u16string_view(), std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("bar"),
+ OUString("foobarfoo").replaceAll(std::u16string_view(u"foo"), std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll(std::u16string_view(), std::u16string_view(u"baz")));
+ CPPUNIT_ASSERT_EQUAL(OUString("bar"),
+ OUString("foobarfoo").replaceAll("foo", std::u16string_view()));
+ CPPUNIT_ASSERT_EQUAL(OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll(std::u16string_view(), "baz"));
+ CPPUNIT_ASSERT_EQUAL(OUString(), OUString::createFromAscii(std::string_view()));
+ }
+
+ void ustringbuffer()
+ {
+ OUStringBuffer b("foo");
+ b.append(std::u16string_view());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"), b.toString());
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(string);
+ CPPUNIT_TEST(stringbuffer);
+ CPPUNIT_TEST(ustring);
+ CPPUNIT_TEST(ustringbuffer);
+ CPPUNIT_TEST_SUITE_END();
+};
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/qa/rtl/strings/test_strings_replace.cxx b/sal/qa/rtl/strings/test_strings_replace.cxx
new file mode 100644
index 000000000..3be6e176a
--- /dev/null
+++ b/sal/qa/rtl/strings/test_strings_replace.cxx
@@ -0,0 +1,339 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+
+namespace {
+
+OUString s_empty;
+OUString s_bar("bar");
+OUString s_bars("bars");
+OUString s_foo("foo");
+OUString s_other("other");
+OUString s_xa("xa");
+OUString s_xx("xx");
+
+class Test: public CppUnit::TestFixture {
+private:
+ void stringReplaceFirst();
+
+ void stringReplaceAll();
+
+ void ustringReplaceFirst();
+
+ void ustringReplaceFirstAsciiL();
+
+ void ustringReplaceFirstToAsciiL();
+
+ void ustringReplaceFirstAsciiLAsciiL();
+
+ void ustringReplaceAll();
+
+ void ustringReplaceAllAsciiL();
+
+ void ustringReplaceAllToAsciiL();
+
+ void ustringReplaceAllAsciiLAsciiL();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(stringReplaceFirst);
+ CPPUNIT_TEST(stringReplaceAll);
+ CPPUNIT_TEST(ustringReplaceFirst);
+ CPPUNIT_TEST(ustringReplaceFirstAsciiL);
+ CPPUNIT_TEST(ustringReplaceFirstToAsciiL);
+ CPPUNIT_TEST(ustringReplaceFirstAsciiLAsciiL);
+ CPPUNIT_TEST(ustringReplaceAll);
+ CPPUNIT_TEST(ustringReplaceAllAsciiL);
+ CPPUNIT_TEST(ustringReplaceAllToAsciiL);
+ CPPUNIT_TEST(ustringReplaceAllAsciiLAsciiL);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::stringReplaceFirst() {
+ CPPUNIT_ASSERT_EQUAL(
+ OString("otherbarfoo"),
+ OString("foobarfoo").replaceFirst("foo", "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OString("foobarfoo"),
+ OString("foobarfoo").replaceFirst("bars", "other"));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OString("otherbarfoo"),
+ OString("foobarfoo").replaceFirst("foo", "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OString("foobarother"),
+ OString("foobarfoo").replaceFirst("foo", "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OString("foobarfoo"),
+ OString("foobarfoo").replaceFirst("bar", "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+}
+
+void Test::stringReplaceAll() {
+ CPPUNIT_ASSERT_EQUAL(
+ OString("otherbarother"),
+ OString("foobarfoo").replaceAll("foo", "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OString("foobarfoo"),
+ OString("foobarfoo").replaceAll("bars", "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OString("xxa"), OString("xaa").replaceAll("xa", "xx"));
+}
+
+void Test::ustringReplaceFirst() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst(s_foo, s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(s_bars, s_other));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst(s_foo, s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarother"),
+ OUString("foobarfoo").replaceFirst(s_foo, s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(s_bar, s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+}
+
+void Test::ustringReplaceFirstAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst("foo", s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst("bars", s_other));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst("foo", s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarother"),
+ OUString("foobarfoo").replaceFirst("foo", s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst("bar", s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceFirst("xa", s_empty));
+}
+
+void Test::ustringReplaceFirstToAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst(s_foo, "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(s_bars, "other"));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst(s_foo, "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarother"),
+ OUString("foobarfoo").replaceFirst(s_foo, "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(s_bar, "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceFirst(s_xa, ""));
+}
+
+void Test::ustringReplaceFirstAsciiLAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ (OUString("foobarfoo").
+ replaceFirst("foo", "other")));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ (OUString("foobarfoo").
+ replaceFirst("bars", "other")));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ (OUString("foobarfoo").
+ replaceFirst("foo", "other", &n)));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarother"),
+ (OUString("foobarfoo").
+ replaceFirst("foo", "other", &n)));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ (OUString("foobarfoo").
+ replaceFirst("bar", "other", &n)));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceFirst("xa", ""));
+}
+
+void Test::ustringReplaceAll() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarother"),
+ OUString("foobarfoo").replaceAll(s_foo, s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll(s_bars, s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("xxa"),
+ OUString("xaa").replaceAll(s_xa, s_xx));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarbaz"), OUString("foobarfoo").replaceAll(u"foo", u"baz", 1));
+}
+
+void Test::ustringReplaceAllAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarother"),
+ OUString("foobarfoo").replaceAll("foo", s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll("bars", s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("xxa"),
+ OUString("xaa").replaceAll("xa", s_xx));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceAll("xa", s_empty));
+}
+
+void Test::ustringReplaceAllToAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarother"),
+ OUString("foobarfoo").replaceAll(s_foo, "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll(s_bars, "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("xxa"),
+ OUString("xaa").replaceAll(s_xa, "xx"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceAll(s_xa, ""));
+}
+
+void Test::ustringReplaceAllAsciiLAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarother"),
+ (OUString("foobarfoo").
+ replaceAll("foo", "other")));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ (OUString("foobarfoo").
+ replaceAll("bars", "other")));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("xxa"),
+ (OUString("xaa").
+ replaceAll("xa", "xx")));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceAll("xa", ""));
+}
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_strings_toint.cxx b/sal/qa/rtl/strings/test_strings_toint.cxx
new file mode 100644
index 000000000..d81525b94
--- /dev/null
+++ b/sal/qa/rtl/strings/test_strings_toint.cxx
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+
+namespace {
+
+template< typename T > class Test: public CppUnit::TestFixture {
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testToInt32Overflow);
+ CPPUNIT_TEST(testToUInt32Overflow);
+ CPPUNIT_TEST(testToInt64Overflow);
+ CPPUNIT_TEST(testToUInt64Overflow);
+ CPPUNIT_TEST_SUITE_END();
+
+ void testToInt32Overflow() {
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), T("-2147483649").toInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MIN_INT32, T("-2147483648").toInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MIN_INT32 + 1, T("-2147483647").toInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT32 - 1, T("2147483646").toInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT32, T("2147483647").toInt32());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), T("2147483648").toInt32());
+ }
+
+ void testToUInt32Overflow() {
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_UINT32 - 1, T("4294967294").toUInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_UINT32, T("4294967295").toUInt32());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), T("4294967296").toUInt32());
+ }
+
+ void testToInt64Overflow() {
+ CPPUNIT_ASSERT_EQUAL(sal_Int64(0), T("-9223372036854775809").toInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MIN_INT64, T("-9223372036854775808").toInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MIN_INT64 + 1, T("-9223372036854775807").toInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MAX_INT64 - 1, T("9223372036854775806").toInt64());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT64, T("9223372036854775807").toInt64());
+ CPPUNIT_ASSERT_EQUAL(sal_Int64(0), T("9223372036854775808").toInt64());
+ }
+
+ void testToUInt64Overflow() {
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MAX_UINT64 - 1, T("18446744073709551614").toUInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MAX_UINT64, T("18446744073709551615").toUInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ sal_uInt64(0), T("18446744073709551616").toUInt64());
+ }
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test< OString >);
+CPPUNIT_TEST_SUITE_REGISTRATION(Test< OUString >);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_strings_valuex.cxx b/sal/qa/rtl/strings/test_strings_valuex.cxx
new file mode 100644
index 000000000..6c9c83644
--- /dev/null
+++ b/sal/qa/rtl/strings/test_strings_valuex.cxx
@@ -0,0 +1,115 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustring.hxx>
+#include <iostream>
+
+namespace test::strings {
+
+class valueX : public CppUnit::TestFixture {
+public:
+ void testOBoolean();
+ void testOUBoolean();
+ void testOUInt();
+ void testOInt();
+ void testOUFloat();
+ void testOFloat();
+
+ CPPUNIT_TEST_SUITE(valueX);
+ CPPUNIT_TEST(testOBoolean);
+ CPPUNIT_TEST(testOUBoolean);
+ CPPUNIT_TEST(testOUInt);
+ CPPUNIT_TEST(testOInt);
+ CPPUNIT_TEST(testOUFloat);
+ CPPUNIT_TEST(testOFloat);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::strings::valueX);
+
+namespace {
+
+template< typename T >
+void testBoolean() {
+ CPPUNIT_ASSERT_EQUAL( T( "false" ), T::boolean( false ) );
+ CPPUNIT_ASSERT_EQUAL( T( "true" ), T::boolean( true ) );
+}
+
+}
+
+void test::strings::valueX::testOBoolean() {
+ testBoolean<OString>();
+}
+
+void test::strings::valueX::testOUBoolean() {
+ testBoolean<OUString>();
+}
+
+template< typename T >
+static void testInt() {
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( 30039062 )));
+
+ // test the overloading resolution
+
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< signed char >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< unsigned char >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< short >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< unsigned short >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< int >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned int >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< long >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned long >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< long long >( 30039062 ))));
+ // The highest bit set in unsigned long long may not actually work.
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned long long >( 30039062 ))));
+
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< sal_Int8 >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< sal_uInt8 >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< sal_Int16 >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< sal_uInt16 >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_Int32 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_uInt32 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_Int64 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_uInt64 >( 30039062 ))));
+
+ // The implementation internally uses sal_Int64 etc. types, so check ranges.
+ assert( sizeof( int ) <= sizeof( sal_Int32 ));
+ assert( sizeof( long ) <= sizeof( sal_Int64 ));
+ assert( sizeof( long long ) <= sizeof( sal_Int64 ));
+ assert( sizeof( unsigned int ) < sizeof( sal_Int64 ));
+}
+
+void test::strings::valueX::testOUInt() {
+ testInt<OUString>();
+}
+
+void test::strings::valueX::testOInt() {
+ testInt<OString>();
+}
+
+template< typename T >
+static void testFloat() {
+ CPPUNIT_ASSERT_EQUAL( T( "39062.2" ), T( T::number( 39062.2f )));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062.2" ), T( T::number( 30039062.2 )));
+ // long double not supported
+}
+
+void test::strings::valueX::testOUFloat() {
+ testFloat<OUString>();
+}
+
+void test::strings::valueX::testOFloat() {
+ testFloat<OString>();
+}
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/textenc/rtl_tencinfo.cxx b/sal/qa/rtl/textenc/rtl_tencinfo.cxx
new file mode 100644
index 000000000..88da153ae
--- /dev/null
+++ b/sal/qa/rtl/textenc/rtl_tencinfo.cxx
@@ -0,0 +1,1674 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_locales.h>
+
+#include <string.h>
+
+#include <rtl/tencinfo.h>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace
+{
+ class testBestMime : public CppUnit::TestFixture
+ {
+ public:
+ void check(rtl_TextEncoding eIn, rtl_TextEncoding eOut)
+ {
+ const char *pCharSet = rtl_getBestMimeCharsetFromTextEncoding(eIn);
+ rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromMimeCharset(pCharSet);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestMimeCharsetFromTextEncoding && rtl_getTextEncodingFromMimeCharset differdiffer", eOut, eTextEnc );
+ }
+
+ // the defines for the follows test could be found in file inc/rtl/textenc.h
+
+ void MimeCharsetFromTextEncoding_MS_1252()
+ {
+ check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void MimeCharsetFromTextEncoding_APPLE_ROMAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_APPLE_ROMAN);
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_437()
+ {
+ check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_IBM_437 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_850()
+ {
+ check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_IBM_850 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_860()
+ {
+ check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_IBM_860 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_861()
+ {
+ check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_IBM_861 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_863()
+ {
+ check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_IBM_863 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_865()
+ {
+ check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_IBM_865 );
+ }
+
+ void MimeCharsetFromTextEncoding_SYMBOL()
+ {
+ check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void MimeCharsetFromTextEncoding_ASCII_US()
+ {
+ check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_ASCII_US );
+ }
+
+ void MimeCharsetFromTextEncoding_ISO_8859_1()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_2()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_3()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_ISO_8859_3 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_4()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_5()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_6()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_ISO_8859_6 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_7()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_8()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_ISO_8859_8 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_9()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_14()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_ISO_8859_14 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_15()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_ISO_8859_15 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_737()
+ {
+ check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_775()
+ {
+ check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_852()
+ {
+ check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_IBM_852 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_855()
+ {
+ check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_857()
+ {
+ check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_862()
+ {
+ check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_IBM_862 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_864()
+ {
+ check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_IBM_864 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_866()
+ {
+ check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_IBM_866 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_869()
+ {
+ check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+ void MimeCharsetFromTextEncoding_MS_874()
+ {
+ check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_MS_874 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1250()
+ {
+ check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_MS_1250 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1251()
+ {
+ check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_MS_1251 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1253()
+ {
+ check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_MS_1253 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1254()
+ {
+ check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_MS_1254 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1255()
+ {
+ check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_MS_1255 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1256()
+ {
+ check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_MS_1256 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1257()
+ {
+ check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_MS_1257 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1258()
+ {
+ check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_MS_1258 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_CENTEURO()
+ {
+ check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_CROATIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_CYRILLIC()
+ {
+ check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_GREEK()
+ {
+ check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_ICELAND()
+ {
+ check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_ROMANIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_TURKISH()
+ {
+ check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_UKRAINIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+ void MimeCharsetFromTextEncoding_MS_932()
+ {
+ check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_SHIFT_JIS );
+ }
+ void MimeCharsetFromTextEncoding_MS_936()
+ {
+ check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_GB_2312 );
+ }
+ void MimeCharsetFromTextEncoding_MS_949()
+ {
+ check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_EUC_KR );
+ }
+ void MimeCharsetFromTextEncoding_MS_950()
+ {
+ check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_BIG5 );
+ }
+ void MimeCharsetFromTextEncoding_KOI8_R()
+ {
+ check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_KOI8_R );
+ }
+ void MimeCharsetFromTextEncoding_UTF7()
+ {
+ check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_UTF7 );
+ }
+ void MimeCharsetFromTextEncoding_UTF8()
+ {
+ check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_UTF8 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_10()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_ISO_8859_10 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_13()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_ISO_8859_13 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1361()
+ {
+ check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_EUC_KR );
+ }
+ void MimeCharsetFromTextEncoding_TIS_620()
+ {
+ check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_TIS_620 );
+ }
+ void MimeCharsetFromTextEncoding_KOI8_U()
+ {
+ check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_KOI8_U );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void MimeCharsetFromTextEncoding_APPLE_JAPANESE()
+ {
+ check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_SHIFT_JIS );
+ }
+ void MimeCharsetFromTextEncoding_SHIFT_JIS()
+ {
+ check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_SHIFT_JIS );
+ }
+ void MimeCharsetFromTextEncoding_EUC_JP()
+ {
+ check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_EUC_JP );
+ }
+ void MimeCharsetFromTextEncoding_ISO_2022_JP()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_ISO_2022_JP );
+ }
+ void MimeCharsetFromTextEncoding_JIS_X_0201()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_EUC_JP );
+ }
+ void MimeCharsetFromTextEncoding_JIS_X_0208()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_EUC_JP );
+ }
+ void MimeCharsetFromTextEncoding_JIS_X_0212()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_EUC_JP );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ void MimeCharsetFromTextEncoding_APPLE_KOREAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_EUC_KR );
+ }
+ void MimeCharsetFromTextEncoding_EUC_KR()
+ {
+ check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_EUC_KR );
+ }
+ void MimeCharsetFromTextEncoding_ISO_2022_KR()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_ISO_2022_KR );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void MimeCharsetFromTextEncoding_APPLE_CHINSIMP()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_GB_2312 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_CHINTRAD()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_BIG5 );
+ }
+ void MimeCharsetFromTextEncoding_GB_2312()
+ {
+ check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_GB_2312 );
+ }
+ void MimeCharsetFromTextEncoding_GBT_12345()
+ {
+ check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_GBT_12345 );
+ }
+ void MimeCharsetFromTextEncoding_GBK()
+ {
+ check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_GBK );
+ }
+ void MimeCharsetFromTextEncoding_BIG5()
+ {
+ check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_BIG5 );
+ }
+ void MimeCharsetFromTextEncoding_EUC_CN()
+ {
+ check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_GB_2312 );
+ }
+ void MimeCharsetFromTextEncoding_EUC_TW()
+ {
+ check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_BIG5 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_2022_CN()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_ISO_2022_CN );
+ }
+ void MimeCharsetFromTextEncoding_GB_18030()
+ {
+ check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_GB_18030 );
+ }
+ void MimeCharsetFromTextEncoding_BIG5_HKSCS()
+ {
+ check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_BIG5_HKSCS );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ void MimeCharsetFromTextEncoding_ISCII_DEVANAGARI()
+ {
+ check( RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_ISCII_DEVANAGARI );
+ }
+#endif
+ CPPUNIT_TEST_SUITE( testBestMime );
+
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1252 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ROMAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_437 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_850 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_860 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_861 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_863 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_865 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_SYMBOL );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ASCII_US );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_1 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_2 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_3 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_4 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_5 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_6 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_7 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_8 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_9 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_14 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_15 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_737 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_775 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_852 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_855 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_857 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_862 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_864 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_866 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_869 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_874 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1250 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1251 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1253 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1254 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1255 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1256 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1257 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1258 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CENTEURO );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CROATIAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CYRILLIC );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_GREEK );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ICELAND );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ROMANIAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_TURKISH );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_UKRAINIAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_932 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_936 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_949 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_950 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_KOI8_R );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_UTF7 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_UTF8 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_10 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_13 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1361 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_TIS_620 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_KOI8_U );
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_JAPANESE );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_SHIFT_JIS );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_JP );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_JP );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0201 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0208 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0212 );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_KOREAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_KR );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_KR );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CHINSIMP );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CHINTRAD );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_GB_2312 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_GBT_12345 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_GBK );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_BIG5 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_CN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_TW );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_CN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_GB_18030 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_BIG5_HKSCS );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISCII_DEVANAGARI );
+#endif
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ class testBestUnix : public CppUnit::TestFixture
+ {
+ public:
+ void check(rtl_TextEncoding eIn, rtl_TextEncoding eOut)
+ {
+ const char *pCharSet = rtl_getBestUnixCharsetFromTextEncoding(eIn);
+ rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromUnixCharset(pCharSet);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestUnixCharsetFromTextEncoding && rtl_getTextEncodingFromUnixCharset", eOut, eTextEnc );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1252()
+ {
+ check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_ROMAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_437()
+ {
+ check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_850()
+ {
+ check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_860()
+ {
+ check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_861()
+ {
+ check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_863()
+ {
+ check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_865()
+ {
+ check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_SYMBOL()
+ {
+ check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_SYMBOL );
+ }
+
+ void UnixCharsetFromTextEncoding_ASCII_US()
+ {
+ check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_1()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_2()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_3()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_ISO_8859_3 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_4()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_5()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_6()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_ISO_8859_6 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_7()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_8()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_ISO_8859_8 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_9()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_14()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_ISO_8859_14 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_15()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_ISO_8859_15 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_737()
+ {
+ check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_775()
+ {
+ check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_852()
+ {
+ check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_855()
+ {
+ check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_857()
+ {
+ check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_862()
+ {
+ check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_ISO_8859_8 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_864()
+ {
+ check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_ISO_8859_6 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_866()
+ {
+ check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_869()
+ {
+ check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_874()
+ {
+ check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1250()
+ {
+ check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1251()
+ {
+ check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1253()
+ {
+ check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1254()
+ {
+ check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1255()
+ {
+ check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_ISO_8859_8 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1256()
+ {
+ check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_ISO_8859_6 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1257()
+ {
+ check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1258()
+ {
+ check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_CENTEURO()
+ {
+ check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_CROATIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_CYRILLIC()
+ {
+ check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_GREEK()
+ {
+ check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_ICELAND()
+ {
+ check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_ROMANIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_TURKISH()
+ {
+ check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_UKRAINIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_APPLE_CHINSIMP()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_CHINTRAD()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_APPLE_JAPANESE()
+ {
+ check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ void UnixCharsetFromTextEncoding_APPLE_KOREAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+ void UnixCharsetFromTextEncoding_MS_932()
+ {
+ check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_936()
+ {
+ check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_949()
+ {
+ check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_950()
+ {
+ check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_DONTKNOW );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_SHIFT_JIS()
+ {
+ check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_GB_2312()
+ {
+ check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_GBT_12345()
+ {
+ check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_GBK()
+ {
+ check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_BIG5()
+ {
+ check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_EUC_JP()
+ {
+ check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_EUC_CN()
+ {
+ check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_EUC_TW()
+ {
+ check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_ISO_2022_JP()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_ISO_2022_CN()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+ void UnixCharsetFromTextEncoding_KOI8_R()
+ {
+ check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_KOI8_R );
+ }
+
+ void UnixCharsetFromTextEncoding_UTF7()
+ {
+ check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_UTF8()
+ {
+ check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_10()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_ISO_8859_10 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_13()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_ISO_8859_13 );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ void UnixCharsetFromTextEncoding_EUC_KR()
+ {
+ check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_2022_KR()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_JIS_X_0201()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_JIS_X_0208()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_JIS_X_0212()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+ void UnixCharsetFromTextEncoding_MS_1361()
+ {
+ check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_DONTKNOW );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_GB_18030()
+ {
+ check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_GBK );
+ }
+
+ void UnixCharsetFromTextEncoding_BIG5_HKSCS()
+ {
+ check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+ void UnixCharsetFromTextEncoding_TIS_620()
+ {
+ check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_KOI8_U()
+ {
+ check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_KOI8_U );
+ }
+
+ CPPUNIT_TEST_SUITE( testBestUnix );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1252 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ROMAN );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_437 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_850 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_860 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_861 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_863 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_865 );
+
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_SYMBOL );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ASCII_US );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_1 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_2 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_3 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_4 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_5 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_6 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_7 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_8 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_9 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_14 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_15 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_737 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_775 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_852 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_855 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_857 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_862 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_864 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_866 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_869 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_874 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1250 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1251 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1253 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1254 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1255 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1256 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1257 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1258 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CENTEURO );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CROATIAN );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CYRILLIC );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_GREEK );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ICELAND );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ROMANIAN );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_TURKISH );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_UKRAINIAN );
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CHINSIMP );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CHINTRAD );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_JAPANESE );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_KOREAN );
+#endif
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_932 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_936 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_949 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_950 );
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_SHIFT_JIS );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_GB_2312 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_GBT_12345 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_GBK );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_BIG5 );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_JP );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_CN );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_TW );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_JP );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_CN );
+#endif
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_KOI8_R );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_UTF7 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_UTF8 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_10 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_13 );
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_KR );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_KR );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0201 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0208 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0212 );
+#endif
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1361 );
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_GB_18030 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_BIG5_HKSCS );
+#endif
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_TIS_620 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_KOI8_U );
+
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ class testBestWindows : public CppUnit::TestFixture
+ {
+ public:
+ void check(rtl_TextEncoding nIn, rtl_TextEncoding nOut)
+ {
+ const sal_uInt8 nCharSet = rtl_getBestWindowsCharsetFromTextEncoding(nIn);
+ rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromWindowsCharset(nCharSet);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestWindowsCharsetFromTextEncoding && rtl_getTextEncodingFromWindowsCharset differ", nOut, eTextEnc );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1252()
+ {
+ check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_ROMAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_APPLE_ROMAN );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_437()
+ {
+ check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_850()
+ {
+ check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_860()
+ {
+ check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_861()
+ {
+ check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_863()
+ {
+ check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_865()
+ {
+ check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_SYMBOL()
+ {
+ check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_SYMBOL );
+ }
+
+ void WindowsCharsetFromTextEncoding_ASCII_US()
+ {
+ check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_1()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_MS_1252 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_ISO_8859_2()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_ISO_8859_3()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_4()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_MS_1257 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_ISO_8859_5()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_6()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_7()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_8()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_9()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_ISO_8859_14()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_15()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_MS_1252 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_IBM_737()
+ {
+ check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_775()
+ {
+ check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_852()
+ {
+ check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_855()
+ {
+ check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_857()
+ {
+ check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_862()
+ {
+ check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_864()
+ {
+ check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_866()
+ {
+ check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_869()
+ {
+ check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_874()
+ {
+ check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1250()
+ {
+ check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1251()
+ {
+ check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1253()
+ {
+ check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1254()
+ {
+ check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1255()
+ {
+ check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1256()
+ {
+ check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1257()
+ {
+ check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1258()
+ {
+ check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_ARABIC()
+ {
+ check( RTL_TEXTENCODING_APPLE_ARABIC, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CENTEURO()
+ {
+ check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CROATIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CYRILLIC()
+ {
+ check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_DEVANAGARI()
+ {
+ check( RTL_TEXTENCODING_APPLE_DEVANAGARI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_FARSI()
+ {
+ check( RTL_TEXTENCODING_APPLE_FARSI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_GREEK()
+ {
+ check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_GUJARATI()
+ {
+ check( RTL_TEXTENCODING_APPLE_GUJARATI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_GURMUKHI()
+ {
+ check( RTL_TEXTENCODING_APPLE_GURMUKHI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_HEBREW()
+ {
+ check( RTL_TEXTENCODING_APPLE_HEBREW, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_APPLE_ICELAND()
+ {
+ check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_MS_1252 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_APPLE_ROMANIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_THAI()
+ {
+ check( RTL_TEXTENCODING_APPLE_THAI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_TURKISH()
+ {
+ check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_UKRAINIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CHINSIMP()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CHINTRAD()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_JAPANESE()
+ {
+ check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_KOREAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_932()
+ {
+ check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_936()
+ {
+ check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_949()
+ {
+ check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_950()
+ {
+ check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_SHIFT_JIS()
+ {
+ check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_GB_2312()
+ {
+ check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_GBT_12345()
+ {
+ check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_GBK()
+ {
+ check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_BIG5()
+ {
+ check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_EUC_JP()
+ {
+ check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_EUC_CN()
+ {
+ check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_EUC_TW()
+ {
+ check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_2022_JP()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_2022_CN()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_KOI8_R()
+ {
+ check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_UTF7()
+ {
+ check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_UTF8()
+ {
+ check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_MS_1252 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_ISO_8859_10()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_13()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_EUC_KR()
+ {
+ check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_2022_KR()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_JIS_X_0201()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_JIS_X_0208()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_JIS_X_0212()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1361()
+ {
+ check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_GB_18030()
+ {
+ check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_BIG5_HKSCS()
+ {
+ check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_TIS_620()
+ {
+ check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_KOI8_U()
+ {
+ check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISCII_DEVANAGARI()
+ {
+ check( RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_JAVA_UTF8()
+ {
+ check( RTL_TEXTENCODING_JAVA_UTF8, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ CPPUNIT_TEST_SUITE( testBestWindows );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1252 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ROMAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_437 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_850 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_860 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_861 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_863 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_865 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_SYMBOL );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ASCII_US );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_1 );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_2 );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_3 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_4 );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_5 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_6 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_7 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_8 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_9 );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_14 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_15 );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_737 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_775 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_852 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_855 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_857 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_862 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_864 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_866 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_869 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_874 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1250 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1251 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1253 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1254 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1255 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1256 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1257 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1258 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ARABIC );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CENTEURO );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CROATIAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CYRILLIC );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_DEVANAGARI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_FARSI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GREEK );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GUJARATI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GURMUKHI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_HEBREW );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ICELAND );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ROMANIAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_THAI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_TURKISH );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_UKRAINIAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CHINSIMP );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CHINTRAD );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_JAPANESE );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_KOREAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_932 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_936 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_949 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_950 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_SHIFT_JIS );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GB_2312 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GBT_12345 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GBK );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_BIG5 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_JP );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_CN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_TW );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_JP );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_CN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_KOI8_R );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_UTF7 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_UTF8 );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_10 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_13 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_KR );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_KR );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0201 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0208 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0212 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1361 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GB_18030 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_BIG5_HKSCS );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_TIS_620 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_KOI8_U );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISCII_DEVANAGARI );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JAVA_UTF8 );
+
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ class testTextEncodingInfo: public CppUnit::TestFixture
+ {
+ public:
+ // not implemented encoding test
+ void testTextEncodingInfo_001()
+ {
+ rtl_TextEncodingInfo aInfo1, aInfo2, aInfo3, aInfo4, aInfo5;
+ aInfo1.StructSize = 4;
+ // not implemented
+ bool bRes1 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo1 );
+ // implemented
+ bool bRes11 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo1 );
+ CPPUNIT_ASSERT_MESSAGE("should return sal_False.", !bRes1);
+ CPPUNIT_ASSERT_MESSAGE("should return sal_False.", !bRes11);
+
+ aInfo2.StructSize = 5;
+ bool bRes2 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo2 );
+ bool bRes21 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo2 );
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes2);
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes21);
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", aInfo2.MinimumCharSize >=1 );
+
+ aInfo3.StructSize = 6;
+ bool bRes3 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo3 );
+ bool bRes31 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo3 );
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes3);
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes31);
+//&& aInfo2.MinimumCharSize >=1 );
+
+ aInfo4.StructSize = 8;
+ bool bRes4 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo4 );
+ bool bRes41 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo4);
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes4);
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes41);
+// && aInfo2.MinimumCharSize >=1 );
+
+ aInfo5.StructSize = sizeof aInfo5;
+ bool bRes5 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo5 );
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", !bRes5);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "StructSize<6 should return sal_True", sal_uInt32(0), aInfo5.Flags);
+
+ }
+ CPPUNIT_TEST_SUITE(testTextEncodingInfo);
+ CPPUNIT_TEST(testTextEncodingInfo_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class testEncodingFromUnix: public CppUnit::TestFixture
+ {
+ public:
+ void testIso8859() {
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO8859");
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO8859-0");
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO8859-01");
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO8859_1");
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO88591");
+ check(RTL_TEXTENCODING_ISO_8859_1, "ISO8859-1");
+ check(RTL_TEXTENCODING_ISO_8859_2, "ISO8859-2");
+ check(RTL_TEXTENCODING_ISO_8859_3, "ISO8859-3");
+ check(RTL_TEXTENCODING_ISO_8859_4, "ISO8859-4");
+ check(RTL_TEXTENCODING_ISO_8859_5, "ISO8859-5");
+ check(RTL_TEXTENCODING_ISO_8859_6, "ISO8859-6");
+ check(RTL_TEXTENCODING_ISO_8859_7, "ISO8859-7");
+ check(RTL_TEXTENCODING_ISO_8859_8, "ISO8859-8");
+ check(RTL_TEXTENCODING_ISO_8859_9, "ISO8859-9");
+ check(RTL_TEXTENCODING_ISO_8859_10, "ISO8859-10");
+ check(RTL_TEXTENCODING_TIS_620, "ISO8859-11");
+ check(RTL_TEXTENCODING_ISO_8859_13, "ISO8859-13");
+ check(RTL_TEXTENCODING_ISO_8859_14, "ISO8859-14");
+ check(RTL_TEXTENCODING_ISO_8859_15, "ISO8859-15");
+ }
+
+ void testTis620() {
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620-0");
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620-1");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620-2529");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620-2533");
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2529-0");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620.2529-1");
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2529-2");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620.2533-0");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620.2533-1");
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2533-2");
+ }
+
+ CPPUNIT_TEST_SUITE(testEncodingFromUnix);
+ CPPUNIT_TEST(testIso8859);
+ CPPUNIT_TEST(testTis620);
+ CPPUNIT_TEST_SUITE_END();
+
+ private:
+ void check(rtl_TextEncoding expected, char const * input) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ input, expected, rtl_getTextEncodingFromUnixCharset(input));
+ }
+ };
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(testBestMime);
+CPPUNIT_TEST_SUITE_REGISTRATION(testBestUnix);
+CPPUNIT_TEST_SUITE_REGISTRATION(testBestWindows);
+CPPUNIT_TEST_SUITE_REGISTRATION(testTextEncodingInfo);
+CPPUNIT_TEST_SUITE_REGISTRATION(testEncodingFromUnix);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/textenc/rtl_textcvt.cxx b/sal/qa/rtl/textenc/rtl_textcvt.cxx
new file mode 100644
index 000000000..55804bd32
--- /dev/null
+++ b/sal/qa/rtl/textenc/rtl_textcvt.cxx
@@ -0,0 +1,3313 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_locales.h>
+
+#include <sal/config.h>
+
+#include <cstddef>
+#include <cstring>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <o3tl/cppunittraitshelper.hxx>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/tencinfo.h>
+#include <rtl/textcvt.h>
+#include <rtl/textenc.h>
+#include <sal/types.h>
+#include <sal/macros.h>
+#include <osl/diagnose.h>
+
+namespace {
+
+struct SingleByteCharSet {
+ rtl_TextEncoding m_nEncoding;
+ sal_Unicode m_aMap[256];
+};
+
+void testSingleByteCharSet(SingleByteCharSet const & rSet) {
+ char aText[256];
+ sal_Unicode aUnicode[256];
+ sal_Size nNumber = 0;
+ for (int i = 0; i < 256; ++i) {
+ if (rSet.m_aMap[i] != 0xFFFF) {
+ aText[nNumber++] = static_cast< char >(i);
+ }
+ }
+ {
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rSet.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::number(rSet.m_nEncoding) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_TextToUnicodeContext aContext
+ = rtl_createTextToUnicodeContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertTextToUnicode(
+ aConverter, aContext, aText, nNumber, aUnicode, nNumber,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+ CPPUNIT_ASSERT_EQUAL(nNumber, nSize);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
+ CPPUNIT_ASSERT_EQUAL(nNumber, nConverted);
+ rtl_destroyTextToUnicodeContext(aConverter, aContext);
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ }
+ {
+ int j = 0;
+ for (int i = 0; i < 256; ++i) {
+ if (rSet.m_aMap[i] != 0xFFFF && aUnicode[j] != rSet.m_aMap[i]) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("rSet.m_aMap[" + OUString::number(i) + "] == " +
+ OUString::number(rSet.m_aMap[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ u'\xFFFF', rSet.m_aMap[i]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(j) + "] == " +
+ OUString::number(aUnicode[j], 16) +
+ ", rSet.m_aMap[" + OUString::number(i) + "] == " +
+ OUString::number(rSet.m_aMap[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rSet.m_aMap[i], aUnicode[j]);
+ }
+ if (rSet.m_aMap[i] != 0xFFFF)
+ j++;
+ }
+ }
+ if (rSet.m_nEncoding == RTL_TEXTENCODING_ASCII_US) {
+ nNumber = 128;
+ }
+ {
+ rtl_UnicodeToTextConverter aConverter
+ = rtl_createUnicodeToTextConverter(rSet.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_UnicodeToTextContext aContext
+ = rtl_createUnicodeToTextContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertUnicodeToText(
+ aConverter, aContext, aUnicode, nNumber, aText, nNumber,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+ CPPUNIT_ASSERT_EQUAL(nNumber, nSize);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
+ CPPUNIT_ASSERT_EQUAL(nNumber, nConverted);
+ rtl_destroyUnicodeToTextContext(aConverter, aContext);
+ rtl_destroyUnicodeToTextConverter(aConverter);
+ }
+ {
+ int j = 0;
+ for (int i = 0; i < 256; ++i) {
+ if (rSet.m_aMap[i] != 0xFFFF
+ && aText[j] != static_cast< char >(i))
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("rSet.m_aMap[" + OUString::number(i) + "] == " +
+ OUString::number(rSet.m_aMap[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ u'\xFFFF', rSet.m_aMap[i]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aText[" + OUString::number(j) + "] == " +
+ OUString::number(i, 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ static_cast< char >(i), aText[j]);
+ }
+ if (rSet.m_aMap[i] != 0xFFFF)
+ j++;
+ }
+ }
+ for (int i = 0; i < 256; ++i) {
+ if (rSet.m_aMap[i] == 0xFFFF) {
+ aText[0] = static_cast< char >(i);
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rSet.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_TextToUnicodeContext aContext
+ = rtl_createTextToUnicodeContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertTextToUnicode(
+ aConverter, aContext, aText, 1, aUnicode, 1,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+
+ sal_uInt32 nExpectedInfo = (RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_UNDEFINED);
+
+ CPPUNIT_ASSERT_EQUAL(sal_Size(0), nSize);
+ CPPUNIT_ASSERT_EQUAL(nExpectedInfo, nInfo);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), nConverted);
+
+ rtl_destroyTextToUnicodeContext(aConverter, aContext);
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ }
+ }
+}
+
+int const TEST_STRING_SIZE = 1000;
+
+struct ComplexCharSetTest {
+ rtl_TextEncoding m_nEncoding;
+ char const * m_pText;
+ sal_Size m_nTextSize;
+ sal_Unicode m_aUnicode[TEST_STRING_SIZE];
+ sal_Size m_nUnicodeSize;
+ bool m_bNoContext;
+ bool m_bForward;
+ bool m_bReverse;
+ bool m_bGlobalSignature;
+ sal_uInt32 m_nReverseUndefined;
+};
+
+void doComplexCharSetTest(ComplexCharSetTest const & rTest) {
+ if (rTest.m_bForward) {
+ sal_Unicode aUnicode[TEST_STRING_SIZE];
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_TextToUnicodeContext aContext
+ = rtl_createTextToUnicodeContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertTextToUnicode(
+ aConverter, aContext,
+ reinterpret_cast< char const * >(rTest.m_pText),
+ rTest.m_nTextSize, aUnicode, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH
+ | (rTest.m_bGlobalSignature ?
+ RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
+ &nInfo, &nConverted);
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nSize);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nConverted);
+
+ rtl_destroyTextToUnicodeContext(aConverter, aContext);
+ rtl_destroyTextToUnicodeConverter(aConverter);
+
+ for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(aUnicode[i], 16) +
+ ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_aUnicode[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_aUnicode[i], aUnicode[i]);
+ }
+ }
+ if (rTest.m_bForward) {
+ sal_Unicode aUnicode[TEST_STRING_SIZE];
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_TextToUnicodeContext aContext
+ = rtl_createTextToUnicodeContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ if (aContext != reinterpret_cast<rtl_TextToUnicodeContext>(1)) {
+ sal_Size nInput = 0;
+ sal_Size nOutput = 0;
+ for (bool bFlush = true; nInput < rTest.m_nTextSize || bFlush;) {
+ sal_Size nSrcBytes = 1;
+ sal_uInt32 nFlags
+ = (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
+ | (rTest.m_bGlobalSignature ?
+ RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0));
+ if (nInput >= rTest.m_nTextSize) {
+ nSrcBytes = 0;
+ nFlags |= RTL_TEXTTOUNICODE_FLAGS_FLUSH;
+ bFlush = false;
+ }
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ sal_Size nSize = rtl_convertTextToUnicode(
+ aConverter, aContext,
+ rTest.m_pText + nInput,
+ nSrcBytes, aUnicode + nOutput, TEST_STRING_SIZE - nOutput,
+ nFlags, &nInfo, &nConverted);
+ nOutput += nSize;
+ nInput += nConverted;
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0),
+ (nInfo & ~RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL));
+ }
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nOutput);
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nInput);
+
+ for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(aUnicode[i], 16) +
+ ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_aUnicode[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_aUnicode[i], aUnicode[i]);
+ }
+ }
+ rtl_destroyTextToUnicodeContext(aConverter, aContext);
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ }
+ if (rTest.m_bNoContext && rTest.m_bForward) {
+ sal_Unicode aUnicode[TEST_STRING_SIZE] = { 0, };
+ int nSize = 0;
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ for (sal_Size i = 0;;) {
+ if (i == rTest.m_nTextSize) {
+ goto done;
+ }
+ char c1 = rTest.m_pText[i++];
+ sal_Unicode aUC[2];
+ sal_uInt32 nInfo = 0;
+ sal_Size nCvtBytes;
+ sal_Size nChars = rtl_convertTextToUnicode(
+ aConverter, nullptr, &c1, 1, aUC, 2,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
+ | (rTest.m_bGlobalSignature ?
+ RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
+ &nInfo, &nCvtBytes);
+ if ((nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) != 0) {
+ char sBuffer[10];
+ sBuffer[0] = c1;
+ sal_uInt16 nLen = 1;
+ while ((nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) != 0
+ && nLen < 10)
+ {
+ if (i == rTest.m_nTextSize) {
+ goto done;
+ }
+ c1 = rTest.m_pText[i++];
+ sBuffer[nLen++] = c1;
+ nChars = rtl_convertTextToUnicode(
+ aConverter, nullptr, sBuffer, nLen, aUC, 2,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
+ | (rTest.m_bGlobalSignature ?
+ RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
+ &nInfo, &nCvtBytes);
+ }
+ if (nChars == 1 && nInfo == 0) {
+ OSL_ASSERT(nCvtBytes == nLen);
+ aUnicode[nSize++] = aUC[0];
+ } else if (nChars == 2 && nInfo == 0) {
+ OSL_ASSERT(nCvtBytes == nLen);
+ aUnicode[nSize++] = aUC[0];
+ aUnicode[nSize++] = aUC[1];
+ } else {
+ OSL_ASSERT(
+ (nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) == 0
+ && nChars == 0 && nInfo != 0);
+ aUnicode[nSize++] = sBuffer[0];
+ i -= nLen - 1;
+ }
+ } else if (nChars == 1 && nInfo == 0) {
+ OSL_ASSERT(nCvtBytes == 1);
+ aUnicode[nSize++] = aUC[0];
+ } else if (nChars == 2 && nInfo == 0) {
+ OSL_ASSERT(nCvtBytes == 1);
+ aUnicode[nSize++] = aUC[0];
+ aUnicode[nSize++] = aUC[1];
+ } else {
+ OSL_ASSERT(nChars == 0 && nInfo != 0);
+ aUnicode[nSize++] = c1;
+ }
+ }
+ done:
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(aUnicode[i], 16) +
+ ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_aUnicode[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_aUnicode[i], aUnicode[i]);
+ }
+ }
+ if (rTest.m_bReverse) {
+ char aText[TEST_STRING_SIZE];
+ rtl_UnicodeToTextConverter aConverter
+ = rtl_createUnicodeToTextConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_UnicodeToTextContext aContext
+ = rtl_createUnicodeToTextContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertUnicodeToText(
+ aConverter, aContext, rTest.m_aUnicode, rTest.m_nUnicodeSize, aText,
+ TEST_STRING_SIZE,
+ (rTest.m_nReverseUndefined | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_FLUSH
+ | (rTest.m_bGlobalSignature ?
+ RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE : 0)),
+ &nInfo, &nConverted);
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nSize);
+ if (nInfo != 0)
+ {
+ CPPUNIT_ASSERT_EQUAL(RTL_UNICODETOTEXT_INFO_UNDEFINED, nInfo);
+ CPPUNIT_ASSERT_MESSAGE("rTest.m_nReverseUndefined should not be RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR",
+ rTest.m_nReverseUndefined != RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR);
+ }
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nConverted);
+ rtl_destroyUnicodeToTextContext(aConverter, aContext);
+ rtl_destroyUnicodeToTextConverter(aConverter);
+ for (sal_Size i = 0; i < rTest.m_nTextSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aText[" + OUString::number(i) + "] == " +
+ OUString::number(aText[i], 16) +
+ ", rTest.m_pText[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_pText[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_pText[i], aText[i]);
+ }
+ }
+}
+
+void doComplexCharSetCutTest(ComplexCharSetTest const & rTest) {
+ if (rTest.m_bNoContext) {
+ sal_Unicode aUnicode[TEST_STRING_SIZE];
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertTextToUnicode(
+ aConverter, nullptr, reinterpret_cast< char const * >(rTest.m_pText),
+ rTest.m_nTextSize, aUnicode, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nSize);
+ if (nInfo != RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL)
+ {
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL,
+ nInfo);
+ }
+ CPPUNIT_ASSERT_MESSAGE("nConverted should be less than rTest.m_nTextSize", nConverted < rTest.m_nTextSize);
+
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ for (sal_Size i = 0; i < nSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(aUnicode[i], 16) +
+ ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_aUnicode[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_aUnicode[i], aUnicode[i]);
+ }
+ }
+}
+
+class Test: public CppUnit::TestFixture {
+public:
+ void testSingleByte();
+
+ void testComplex();
+
+ void testComplexCut();
+
+ void testInvalidUtf7();
+
+ void testInvalidUtf8();
+
+ void testInvalidUnicode();
+
+ void testSRCBUFFERTOSMALL();
+
+ void testMime();
+
+ void testWindows();
+
+ void testInfo();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testSingleByte);
+ CPPUNIT_TEST(testComplex);
+ CPPUNIT_TEST(testComplexCut);
+ CPPUNIT_TEST(testInvalidUtf7);
+ CPPUNIT_TEST(testInvalidUtf8);
+ CPPUNIT_TEST(testInvalidUnicode);
+ CPPUNIT_TEST(testSRCBUFFERTOSMALL);
+ CPPUNIT_TEST(testMime);
+ CPPUNIT_TEST(testWindows);
+ CPPUNIT_TEST(testInfo);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::testSingleByte() {
+ static SingleByteCharSet const data[]
+ = { { RTL_TEXTENCODING_MS_1250,
+ { 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,
+ 0x20AC,0xFFFF,0x201A,0xFFFF,0x201E,0x2026,0x2020,0x2021,
+ 0xFFFF,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A,
+ 0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B,
+ 0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,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 } },
+ { RTL_TEXTENCODING_MS_1251,
+ { 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,
+ 0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021,
+ 0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F,
+ 0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,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 } },
+ { RTL_TEXTENCODING_MS_1252,
+ { 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,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0x017D,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0x017E,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,
+ 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 } },
+ { RTL_TEXTENCODING_MS_1253,
+ { 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,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0xFFFF,0x2030,0xFFFF,0x2039,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0x2122,0xFFFF,0x203A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x00A0,0x0385,0x0386,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0xFFFF,0x00AB,0x00AC,0x00AD,0x00AE,0x2015,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x00B5,0x00B6,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,0xFFFF,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,0xFFFF } },
+ { RTL_TEXTENCODING_MS_1254,
+ { 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,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0xFFFF,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 } },
+ { RTL_TEXTENCODING_APPLE_ROMAN,
+ { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
+ 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, 0x7F,
+ 0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1,
+ 0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8,
+ 0x00EA,0x00EB,0x00ED,0x00EC,0x00EE,0x00EF,0x00F1,0x00F3,
+ 0x00F2,0x00F4,0x00F6,0x00F5,0x00FA,0x00F9,0x00FB,0x00FC,
+ 0x2020,0x00B0,0x00A2,0x00A3,0x00A7,0x2022,0x00B6,0x00DF,
+ 0x00AE,0x00A9,0x2122,0x00B4,0x00A8,0x2260,0x00C6,0x00D8,
+ 0x221E,0x00B1,0x2264,0x2265,0x00A5,0x00B5,0x2202,0x2211,
+ 0x220F,0x03C0,0x222B,0x00AA,0x00BA,0x03A9,0x00E6,0x00F8,
+ 0x00BF,0x00A1,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB,
+ 0x00BB,0x2026,0x00A0,0x00C0,0x00C3,0x00D5,0x0152,0x0153,
+ 0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA,
+ 0x00FF,0x0178,0x2044,0x20AC,0x2039,0x203A,0xFB01,0xFB02,
+ 0x2021,0x00B7,0x201A,0x201E,0x2030,0x00C2,0x00CA,0x00C1,
+ 0x00CB,0x00C8,0x00CD,0x00CE,0x00CF,0x00CC,0x00D3,0x00D4,
+ 0xF8FF,0x00D2,0x00DA,0x00DB,0x00D9,0x0131,0x02C6,0x02DC,
+ 0x00AF,0x02D8,0x02D9,0x02DA,0x00B8,0x02DD,0x02DB,0x02C7 } },
+ { RTL_TEXTENCODING_IBM_437,
+ { 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,
+ 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,0x00a2,0x00a3,0x00a5,0x20a7,0x0192,
+ 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba,
+ 0x00bf,0x2310,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb,
+ 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,
+ 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,
+ 0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229,
+ 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,
+ 0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 } },
+
+ { RTL_TEXTENCODING_ASCII_US,
+ { 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,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, // !
+ 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0x017D,0xFFFF, // !
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, // !
+ 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0x017E,0x0178, // !
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
+ 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF } },
+ { RTL_TEXTENCODING_ISO_8859_1,
+ { 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,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 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,
+ 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 } },
+ { RTL_TEXTENCODING_ISO_8859_2,
+ { 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,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 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 } },
+ { RTL_TEXTENCODING_ISO_8859_3,
+ { 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,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0x0126,0x02D8,0x00A3,0x00A4,0xFFFF,0x0124,0x00A7,
+ 0x00A8,0x0130,0x015E,0x011E,0x0134,0x00AD,0xFFFF,0x017B,
+ 0x00B0,0x0127,0x00B2,0x00B3,0x00B4,0x00B5,0x0125,0x00B7,
+ 0x00B8,0x0131,0x015F,0x011F,0x0135,0x00BD,0xFFFF,0x017C,
+ 0x00C0,0x00C1,0x00C2,0xFFFF,0x00C4,0x010A,0x0108,0x00C7,
+ 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
+ 0xFFFF,0x00D1,0x00D2,0x00D3,0x00D4,0x0120,0x00D6,0x00D7,
+ 0x011C,0x00D9,0x00DA,0x00DB,0x00DC,0x016C,0x015C,0x00DF,
+ 0x00E0,0x00E1,0x00E2,0xFFFF,0x00E4,0x010B,0x0109,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
+ 0xFFFF,0x00F1,0x00F2,0x00F3,0x00F4,0x0121,0x00F6,0x00F7,
+ 0x011D,0x00F9,0x00FA,0x00FB,0x00FC,0x016D,0x015D,0x02D9 } },
+
+ { RTL_TEXTENCODING_ISO_8859_6,
+ { 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,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0xFFFF,0xFFFF,0xFFFF,0x00A4,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x060C,0x00AD,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0x061B,0xFFFF,0xFFFF,0xFFFF,0x061F,
+ 0xFFFF,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,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647,
+ 0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F,
+ 0x0650,0x0651,0x0652,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
+
+ { RTL_TEXTENCODING_ISO_8859_8,
+ { 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,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0xFFFF,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,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,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,0xFFFF,0xFFFF,0x200E,0x200F,0xFFFF } },
+
+ { RTL_TEXTENCODING_TIS_620,
+ { 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,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07, // !
+ 0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
+ 0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
+ 0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
+ 0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
+ 0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
+ 0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
+ 0x0E38,0x0E39,0x0E3A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x0E3F,
+ 0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
+ 0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
+ 0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
+ 0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
+ { RTL_TEXTENCODING_MS_874,
+ { 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,
+ 0x20AC,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x2026,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07,
+ 0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
+ 0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
+ 0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
+ 0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
+ 0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
+ 0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
+ 0x0E38,0x0E39,0x0E3A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x0E3F,
+ 0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
+ 0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
+ 0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
+ 0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
+ { RTL_TEXTENCODING_MS_1255,
+ { 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,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0xFFFF,0x2039,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x02DC,0x2122,0xFFFF,0x203A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x00A0,0x00A1,0x00A2,0x00A3,0x20AA,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,0x00BF,
+ 0x05B0,0x05B1,0x05B2,0x05B3,0x05B4,0x05B5,0x05B6,0x05B7,
+ 0x05B8,0x05B9,0xFFFF,0x05BB,0x05BC,0x05BD,0x05BE,0x05BF,
+ 0x05C0,0x05C1,0x05C2,0x05C3,0x05F0,0x05F1,0x05F2,0x05F3,
+ 0x05F4,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 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,0xFFFF,0xFFFF,0x200E,0x200F,0xFFFF } },
+ { RTL_TEXTENCODING_MS_1256,
+ { 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,
+ 0x20AC,0x067E,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0x0679,0x2039,0x0152,0x0686,0x0698,0x0688,
+ 0x06AF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x06A9,0x2122,0x0691,0x203A,0x0153,0x200C,0x200D,0x06BA,
+ 0x00A0,0x060C,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x06BE,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x00B9,0x061B,0x00BB,0x00BC,0x00BD,0x00BE,0x061F,
+ 0x06C1,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,
+ 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
+ 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x00D7,
+ 0x0637,0x0638,0x0639,0x063A,0x0640,0x0641,0x0642,0x0643,
+ 0x00E0,0x0644,0x00E2,0x0645,0x0646,0x0647,0x0648,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x0649,0x064A,0x00EE,0x00EF,
+ 0x064B,0x064C,0x064D,0x064E,0x00F4,0x064F,0x0650,0x00F7,
+ 0x0651,0x00F9,0x0652,0x00FB,0x00FC,0x200E,0x200F,0x06D2 } },
+ { RTL_TEXTENCODING_MS_1257,
+ { 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,
+ 0x20AC,0xFFFF,0x201A,0xFFFF,0x201E,0x2026,0x2020,0x2021,
+ 0xFFFF,0x2030,0xFFFF,0x2039,0xFFFF,0x00A8,0x02C7,0x00B8,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0x2122,0xFFFF,0x203A,0xFFFF,0x00AF,0x02DB,0xFFFF,
+ 0x00A0,0xFFFF,0x00A2,0x00A3,0x00A4,0xFFFF,0x00A6,0x00A7,
+ 0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,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,0x02D9 } },
+ { RTL_TEXTENCODING_MS_1258,
+ { 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,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0xFFFF,0x2039,0x0152,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x02DC,0x2122,0xFFFF,0x203A,0x0153,0xFFFF,0xFFFF,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,0x0102,0x00C4,0x00C5,0x00C6,0x00C7,
+ 0x00C8,0x00C9,0x00CA,0x00CB,0x0300,0x00CD,0x00CE,0x00CF,
+ 0x0110,0x00D1,0x0309,0x00D3,0x00D4,0x01A0,0x00D6,0x00D7,
+ 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x01AF,0x0303,0x00DF,
+ 0x00E0,0x00E1,0x00E2,0x0103,0x00E4,0x00E5,0x00E6,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x0301,0x00ED,0x00EE,0x00EF,
+ 0x0111,0x00F1,0x0323,0x00F3,0x00F4,0x01A1,0x00F6,0x00F7,
+ 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x01B0,0x20AB,0x00FF } },
+ { RTL_TEXTENCODING_KOI8_U, // RFC 2319
+ { 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,
+ 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,0x0454,0x2554,0x0456,0x0457,
+ 0x2557,0x2558,0x2559,0x255A,0x255B,0x0491,0x255D,0x255E,
+ 0x255F,0x2560,0x2561,0x0401,0x0404,0x2563,0x0406,0x0407,
+ 0x2566,0x2567,0x2568,0x2569,0x256A,0x0490,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 } },
+ { RTL_TEXTENCODING_ADOBE_STANDARD,
+ { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x2019,
+ 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,
+ 0x2018,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,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x00A1,0x00A2,0x00A3,0x2215,0x00A5,0x0192,0x00A7,
+ 0x00A4,0x0027,0x201C,0x00AB,0x2039,0x203A,0xFB01,0xFB02,
+ 0xFFFF,0x2013,0x2020,0x2021,0x00B7,0xFFFF,0x00B6,0x2022,
+ 0x201A,0x201E,0x201D,0x00BB,0x2026,0x2030,0xFFFF,0x00BF,
+ 0xFFFF,0x0060,0x00B4,0x02C6,0x02DC,0x00AF,0x02D8,0x02D9,
+ 0x00A8,0xFFFF,0x02DA,0x00B8,0xFFFF,0x02DD,0x02DB,0x02C7,
+ 0x2014,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x00C6,0xFFFF,0x00AA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x0141,0x00D8,0x0152,0x00BA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x00E6,0xFFFF,0xFFFF,0xFFFF,0x0131,0xFFFF,0xFFFF,
+ 0x0142,0x00F8,0x0153,0x00DF,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL,
+ { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x0020,0x0021,0x2200,0x0023,0x2203,0x0025,0x0026,0x220B,
+ 0x0028,0x0029,0x2217,0x002B,0x002C,0x2212,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x2245,0x0391,0x0392,0x03A7,0x0394,0x0395,0x03A6,0x0393,
+ 0x0397,0x0399,0x03D1,0x039A,0x039B,0x039C,0x039D,0x039F,
+ 0x03A0,0x0398,0x03A1,0x03A3,0x03A4,0x03A5,0x03C2,0x03A9,
+ 0x039E,0x03A8,0x0396,0x005B,0x2234,0x005D,0x22A5,0x005F,
+ 0xF8E5,0x03B1,0x03B2,0x03C7,0x03B4,0x03B5,0x03C6,0x03B3,
+ 0x03B7,0x03B9,0x03D5,0x03BA,0x03BB,0x03BC,0x03BD,0x03BF,
+ 0x03C0,0x03B8,0x03C1,0x03C3,0x03C4,0x03C5,0x03D6,0x03C9,
+ 0x03BE,0x03C8,0x03B6,0x007B,0x007C,0x007D,0x223C,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x20AC,0x03D2,0x2032,0x2264,0x2215,0x221E,0x0192,0x2663,
+ 0x2666,0x2665,0x2660,0x2194,0x2190,0x2191,0x2192,0x2193,
+ 0x00B0,0x00B1,0x2033,0x2265,0x00D7,0x221D,0x2202,0x2022,
+ 0x00F7,0x2260,0x2261,0x2248,0x2026,0x23AF,0x23D0,0x21B5,
+ 0x2135,0x2111,0x211C,0x2118,0x2297,0x2295,0x2205,0x2229,
+ 0x222A,0x2283,0x2287,0x2284,0x2282,0x2286,0x2208,0x2209,
+ 0x2220,0x2207,0xF6DA,0xF6D9,0xF6DB,0x220F,0x221A,0x22C5,
+ 0x00AC,0x2227,0x2228,0x21D4,0x21D0,0x21D1,0x21D2,0x21D3,
+ 0x25CA,0x2329,0xF8E8,0xF8E9,0xF8EA,0x2211,0x239B,0x239C,
+ 0x239D,0x23A1,0x23A2,0x23A3,0x23A7,0x23A8,0x23A9,0x23AA,
+ 0xFFFF,0x232A,0x222B,0x2320,0x23AE,0x2321,0x239E,0x239F,
+ 0x23A0,0x23A4,0x23A5,0x23A6,0x23AB,0x23AC,0x23AD,0xFFFF } },
+ { RTL_TEXTENCODING_ADOBE_DINGBATS,
+ { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+// 20
+ 0x0020,0x2701,0x2702,0x2703,0x2704,0x260E,0x2706,0x2707,
+ 0x2708,0x2709,0x261B,0x261E,0x270C,0x270D,0x270E,0x270F,
+ 0x2710,0x2711,0x2712,0x2713,0x2714,0x2715,0x2716,0x2717,
+ 0x2718,0x2719,0x271A,0x271B,0x271C,0x271D,0x271E,0x271F,
+// 40
+ 0x2720,0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2727,
+ 0x2605,0x2729,0x272A,0x272B,0x272C,0x272D,0x272E,0x272F,
+ 0x2730,0x2731,0x2732,0x2733,0x2734,0x2735,0x2736,0x2737,
+ 0x2738,0x2739,0x273A,0x273B,0x273C,0x273D,0x273E,0x273F,
+// 60
+ 0x2740,0x2741,0x2742,0x2743,0x2744,0x2745,0x2746,0x2747,
+ 0x2748,0x2749,0x274A,0x274B,0x25CF,0x274D,0x25A0,0x274F,
+ 0x2750,0x2751,0x2752,0x25B2,0x25BC,0x25C6,0x2756,0x25D7,
+ 0x2758,0x2759,0x275A,0x275B,0x275C,0x275D,0x275E,0xFFFF,
+// 80
+ 0xF8D7,0xF8D8,0xF8D9,0xF8DA,0xF8DB,0xF8DC,0xF8DD,0xF8DE,
+ 0xF8DF,0xF8E0,0xF8E1,0xF8E2,0xF8E3,0xF8E4,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+// A0
+ 0xFFFF,0x2761,0x2762,0x2763,0x2764,0x2765,0x2766,0x2767,
+ 0x2663,0x2666,0x2665,0x2660,0x2460,0x2461,0x2462,0x2463,
+ 0x2464,0x2465,0x2466,0x2467,0x2468,0x2469,0x2776,0x2777,
+ 0x2778,0x2779,0x277A,0x277B,0x277C,0x277D,0x277E,0x277F,
+// C0
+ 0x2780,0x2781,0x2782,0x2783,0x2784,0x2785,0x2786,0x2787,
+ 0x2788,0x2789,0x278A,0x278B,0x278C,0x278D,0x278E,0x278F,
+ 0x2790,0x2791,0x2792,0x2793,0x2794,0x2795,0x2796,0x2797,
+ 0x2798,0x2799,0x279A,0x279B,0x279C,0x279D,0x279E,0x279F,
+// E0
+ 0x27A0,0x27A1,0x27A2,0x27A3,0x27A4,0x27A5,0x27A6,0x27A7,
+ 0x27A8,0x27A9,0x27AA,0x27AB,0x27AC,0x27AD,0x27AE,0x27AF,
+ 0xFFFF,0x27B1,0x27B2,0x27B3,0x27B4,0x27B5,0x27B6,0x27B7,
+ 0x27B8,0x27B9,0x27BA,0x27BB,0x27BC,0x27BD,0x27BE,0xFFFF } },
+ { RTL_TEXTENCODING_PT154,
+ { 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,
+ 0x0496,0x0492,0x04EE,0x0493,0x201E,0x2026,0x04B6,0x04AE,
+ 0x04B2,0x04AF,0x04A0,0x04E2,0x04A2,0x049A,0x04BA,0x04B8,
+ 0x0497,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x04B3,0x04B7,0x04A1,0x04E3,0x04A3,0x049B,0x04BB,0x04B9,
+ 0x00A0,0x040E,0x045E,0x0408,0x04E8,0x0498,0x04B0,0x00A7,
+ 0x0401,0x00A9,0x04D8,0x00AB,0x00AC,0x04EF,0x00AE,0x049C,
+ 0x00B0,0x04B1,0x0406,0x0456,0x0499,0x04E9,0x00B6,0x00B7,
+ 0x0451,0x2116,0x04D9,0x00BB,0x0458,0x04AA,0x04AB,0x049D,
+ 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 } } };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ testSingleByteCharSet(data[i]);
+ }
+}
+
+void Test::testComplex() {
+ static ComplexCharSetTest const data[]
+ = { { RTL_TEXTENCODING_ASCII_US,
+ RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E },
+ 7,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_EUC_CN,
+ RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~\xA1\xB9\xF0\xC5"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,
+ 0x300D,0x9E4B },
+ 9,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$~\xC5\xF0\x8E\xA4\xDC\xD9"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,
+ 0x4ED9,0xD87E,0xDD68 },
+ 10,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E },
+ 7,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM("\x81\x40\xFE\xFE"),
+ { 0x4E02,0xE4C5 },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x81\x30\xB1\x33\x81\x30\xD3\x30\x81\x36\xA5\x31"),
+ { 0x028A,0x0452,0x200F },
+ 3,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xFE\x50\xFE\x51\xFE\x52\xFE\x53\xFE\x54\xFE\x55\xFE\x56"
+ "\xFE\x57\xFE\x58\xFE\x59\xFE\x5A\xFE\x5B\xFE\x5C\xFE\x5D"
+ "\xFE\x5E\xFE\x5F\xFE\x60\xFE\x61\xFE\x62\xFE\x63\xFE\x64"
+ "\xFE\x65\xFE\x66\xFE\x67\xFE\x68\xFE\x69\xFE\x6A\xFE\x6B"
+ "\xFE\x6C\xFE\x6D\xFE\x6E\xFE\x6F\xFE\x70\xFE\x71\xFE\x72"
+ "\xFE\x73\xFE\x74\xFE\x75\xFE\x76\xFE\x77\xFE\x78\xFE\x79"
+ "\xFE\x7A\xFE\x7B\xFE\x7C\xFE\x7D\xFE\x7E\xFE\x80\xFE\x81"
+ "\xFE\x82\xFE\x83\xFE\x84\xFE\x85\xFE\x86\xFE\x87\xFE\x88"
+ "\xFE\x89\xFE\x8A\xFE\x8B\xFE\x8C\xFE\x8D\xFE\x8E\xFE\x8F"
+ "\xFE\x90\xFE\x91\xFE\x92\xFE\x93\xFE\x94\xFE\x95\xFE\x96"
+ "\xFE\x97\xFE\x98\xFE\x99\xFE\x9A\xFE\x9B\xFE\x9C\xFE\x9D"
+ "\xFE\x9E\xFE\x9F\xFE\xA0"),
+ { 0x2E81,0xE816,0xE817,0xE818,0x2E84,0x3473,0x3447,0x2E88,
+ 0x2E8B,0xE81E,0x359E,0x361A,0x360E,0x2E8C,0x2E97,0x396E,
+ 0x3918,0xE826,0x39CF,0x39DF,0x3A73,0x39D0,0xE82B,0xE82C,
+ 0x3B4E,0x3C6E,0x3CE0,0x2EA7,0xE831,0xE832,0x2EAA,0x4056,
+ 0x415F,0x2EAE,0x4337,0x2EB3,0x2EB6,0x2EB7,0xE83B,0x43B1,
+ 0x43AC,0x2EBB,0x43DD,0x44D6,0x4661,0x464C,0xE843,0x4723,
+ 0x4729,0x477C,0x478D,0x2ECA,0x4947,0x497A,0x497D,0x4982,
+ 0x4983,0x4985,0x4986,0x499F,0x499B,0x49B7,0x49B6,0xE854,
+ 0xE855,0x4CA3,0x4C9F,0x4CA0,0x4CA1,0x4C77,0x4CA2,0x4D13,
+ 0x4D14,0x4D15,0x4D16,0x4D17,0x4D18,0x4D19,0x4DAE,0xE864 },
+ 80,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x01\"3De$\\~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
+ 8,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x1B(B\x01\"3De$\\~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
+ 8,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x1B(J\x01\"3De$\\~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x00A5,0x00AF },
+ 8,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x1B$B\x26\x21\x27\x71\x1B(B"),
+ { 0x0391,0x044F },
+ 2,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ { RTL_TEXTENCODING_ISO_2022_KR,
+ RTL_CONSTASCII_STRINGPARAM("\x1B$)C\x01\"3De$\\~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
+ 8,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_KR,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x1B$)C\x0E\x25\x21\x0F\x0D\x0Ax\x0E\x48\x7E\x0F"),
+ { 0x2170,0x000D,0x000A,0x0078,0xD79D },
+ 5,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_ISO_2022_CN,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$\\~\x1B$)G\x0E\x45\x70\x1B$*H\x1BN\x22\x22"
+ "\x45\x70\x0F\x1B$)A\x0E\x26\x21\x0F"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E,
+ 0x4ED9,0x531F,0x4ED9,0x0391 },
+ 12,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_CN,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$\\~\x1B$)A\x0E\x26\x21\x1B$*H\x1BN\x22\x22"
+ "\x26\x21\x0F\x0D\x0A\x1B$)A\x0E\x26\x21\x0F"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E,
+ 0x0391,0x531F,0x0391,0x000D,0x000A,0x0391 },
+ 14,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ // The following does not work as long as Big5-HKSCS maps to
+ // Unicode PUA instead of Plane 2. Use the next two tests
+ // instead:
+// { RTL_TEXTENCODING_BIG5_HKSCS,
+// RTL_CONSTASCII_STRINGPARAM(
+// "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
+// { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
+// 0xFFED,0xD849,0xDD13,0x3000,0x9F98 },
+// 13,
+// true,
+// true,
+// true,
+// false,
+// RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
+ 0xFFED,0xE01E,0x3000,0x9F98 },
+ 12,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
+ 0xFFED,0xD849,0xDD13,0x3000,0x9F98 },
+ 13,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC6\xA1\xC6\xCF\xC6\xD3\xC6\xD5\xC6\xD7\xC6\xDE\xC6\xDF"
+ "\xC6\xFE\xC7\x40\xC7\x7E\xC7\xA1\xC7\xFE"),
+ { 0x2460,0xF6E0,0xF6E4,0xF6E6,0xF6E8,0xF6EF,0xF6F0,0x3058,
+ 0x3059,0x30A4,0x30A5,0x041A },
+ 12,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\x81\x40\x84\xFE"),
+ { 0xEEB8,0xF12B },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x81\x40\x8D\xFE\x8E\x40\xA0\xFE\xC6\xA1\xC8\xFE\xFA\x40"
+ "\xFE\xFE"),
+ { 0xEEB8,0xF6B0,0xE311,0xEEB7,0xF6B1,0xF848,0xE000,0xE310 },
+ 8,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\xAD\xC5\x94\x55"),
+ { 0x5029,0x7250 },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\xFA\x5F\xA0\xE4"),
+ { 0x5029,0x7250 },
+ 2,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
+ { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
+ 4,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5,
+ RTL_CONSTASCII_STRINGPARAM("\xA1\x45"),
+ { 0x2027 },
+ 1,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC6\xCF\xC6\xD3\xC6\xD5\xC6\xD7\xC6\xDE\xC6\xDF"),
+ { 0x306B,0x306F,0x3071,0x3073,0x307A,0x307B },
+ 6,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC7\xFD\xC7\xFE\xC8\x40\xC8\x7E\xC8\xA1\xC8\xFE"),
+ { 0xF7AA,0xF7AB,0xF7AC,0xF7EA,0xF7EB,0xF848 },
+ 6,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
+ { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
+ 4,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ { RTL_TEXTENCODING_MS_950,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC6\xA1\xC6\xFE\xC7\x40\xC7\x7E\xC7\xA1\xC7\xFE\xC8\x40"
+ "\xC8\x7E\xC8\xA1\xC8\xFE"),
+ { 0xF6B1,0xF70E,0xF70F,0xF74D,0xF74E,0xF7AB,0xF7AC,0xF7EA,
+ 0xF7EB,0xF848 },
+ 10,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_950,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
+ { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
+ 4,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ // Test Unicode beyond BMP:
+
+ // FIXME The second m_bForward test (requiring a context) does not
+ // work for UTF7:
+// { RTL_TEXTENCODING_UTF7,
+// RTL_CONSTASCII_STRINGPARAM("+2EndEw-"),
+// { 0xD849,0xDD13 },
+// 2,
+// true,
+// true,
+// true,
+// false,
+// RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xF0\xA2\x94\x93"),
+ { 0xD849,0xDD13 },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM("\x95\x39\xC5\x37"),
+ { 0xD849,0xDD13 },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\xFA\x5E"),
+ { 0xD849,0xDD13 },
+ 2,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ // Test GBK (aka CP936):
+
+ { RTL_TEXTENCODING_GBK,
+ RTL_CONSTASCII_STRINGPARAM("\xFD\x7C\xC1\xFA\xFD\x9B"),
+ { 0x9F76,0x9F99,0x9FA5 },
+ 3,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ { RTL_TEXTENCODING_MS_936,
+ RTL_CONSTASCII_STRINGPARAM("\xFD\x7C\xC1\xFA\xFD\x9B"),
+ { 0x9F76,0x9F99,0x9FA5 },
+ 3,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_GBK,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xFE\x50\xFE\x54\xFE\x55\xFE\x56"
+ "\xFE\x57\xFE\x58\xFE\x5A\xFE\x5B\xFE\x5C\xFE\x5D"
+ "\xFE\x5E\xFE\x5F\xFE\x60\xFE\x62\xFE\x63\xFE\x64"
+ "\xFE\x65\xFE\x68\xFE\x69\xFE\x6A\xFE\x6B"
+ "\xFE\x6E\xFE\x6F\xFE\x70\xFE\x71\xFE\x72"
+ "\xFE\x73\xFE\x74\xFE\x75\xFE\x77\xFE\x78\xFE\x79"
+ "\xFE\x7A\xFE\x7B\xFE\x7C\xFE\x7D\xFE\x80\xFE\x81"
+ "\xFE\x82\xFE\x83\xFE\x84\xFE\x85\xFE\x86\xFE\x87\xFE\x88"
+ "\xFE\x89\xFE\x8A\xFE\x8B\xFE\x8C\xFE\x8D\xFE\x8E\xFE\x8F"
+ "\xFE\x92\xFE\x93\xFE\x94\xFE\x95\xFE\x96"
+ "\xFE\x97\xFE\x98\xFE\x99\xFE\x9A\xFE\x9B\xFE\x9C\xFE\x9D"
+ "\xFE\x9E\xFE\x9F"),
+ { 0x2E81,0x2E84,0x3473,0x3447,0x2E88,0x2E8B,0x359E,0x361A,
+ 0x360E,0x2E8C,0x2E97,0x396E,0x3918,0x39CF,0x39DF,0x3A73,
+ 0x39D0,0x3B4E,0x3C6E,0x3CE0,0x2EA7,0x2EAA,0x4056,0x415F,
+ 0x2EAE,0x4337,0x2EB3,0x2EB6,0x2EB7,0x43B1,0x43AC,0x2EBB,
+ 0x43DD,0x44D6,0x4661,0x464C,0x4723,0x4729,0x477C,0x478D,
+ 0x2ECA,0x4947,0x497A,0x497D,0x4982,0x4983,0x4985,0x4986,
+ 0x499F,0x499B,0x49B7,0x49B6,0x4CA3,0x4C9F,0x4CA0,0x4CA1,
+ 0x4C77,0x4CA2,0x4D13,0x4D14,0x4D15,0x4D16,0x4D17,0x4D18,
+ 0x4D19,0x4DAE },
+ 66,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("?"),
+ { 0xFF0D },
+ 1,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK },
+#endif
+ // Test of "JIS X 0208 row 13" (taken from CP932; added to
+ // ISO-2022-JP and EUC-JP; 74 of the 83 characters introduce
+ // mappings to new Unicode characters):
+ { RTL_TEXTENCODING_MS_932,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x87\x40\x87\x41\x87\x42\x87\x43\x87\x44\x87\x45\x87\x46"
+ "\x87\x47\x87\x48\x87\x49\x87\x4A\x87\x4B\x87\x4C\x87\x4D"
+ "\x87\x4E\x87\x4F\x87\x50\x87\x51\x87\x52\x87\x53\x87\x54"
+ "\x87\x55\x87\x56\x87\x57\x87\x58\x87\x59\x87\x5A\x87\x5B"
+ "\x87\x5C\x87\x5D\x87\x5F\x87\x60\x87\x61\x87\x62\x87\x63"
+ "\x87\x64\x87\x65\x87\x66\x87\x67\x87\x68\x87\x69\x87\x6A"
+ "\x87\x6B\x87\x6C\x87\x6D\x87\x6E\x87\x6F\x87\x70\x87\x71"
+ "\x87\x72\x87\x73\x87\x74\x87\x75\x87\x7E\x87\x80\x87\x81"
+ "\x87\x82\x87\x83\x87\x84\x87\x85\x87\x86\x87\x87\x87\x88"
+ "\x87\x89\x87\x8A\x87\x8B\x87\x8C\x87\x8D\x87\x8E\x87\x8F"
+ "\x87\x90\x87\x91\x87\x92\x87\x93\x87\x94\x87\x95\x87\x96"
+ "\x87\x97\x87\x98\x87\x99\x87\x9A\x87\x9B\x87\x9C"),
+ { 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,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,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 },
+ 83,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM("\x00\xFA\x6F\xFA\x71"),
+ {0x0000, 0x4F92, 0x4F9A},
+ 3,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x87\x40\x87\x41\x87\x42\x87\x43\x87\x44\x87\x45\x87\x46"
+ "\x87\x47\x87\x48\x87\x49\x87\x4A\x87\x4B\x87\x4C\x87\x4D"
+ "\x87\x4E\x87\x4F\x87\x50\x87\x51\x87\x52\x87\x53\x87\x54"
+ "\x87\x55\x87\x56\x87\x57\x87\x58\x87\x59\x87\x5A\x87\x5B"
+ "\x87\x5C\x87\x5D\x87\x5F\x87\x60\x87\x61\x87\x62\x87\x63"
+ "\x87\x64\x87\x65\x87\x66\x87\x67\x87\x68\x87\x69\x87\x6A"
+ "\x87\x6B\x87\x6C\x87\x6D\x87\x6E\x87\x6F\x87\x70\x87\x71"
+ "\x87\x72\x87\x73\x87\x74\x87\x75\x87\x7E\x87\x80\x87\x81"
+ "\x87\x82\x87\x83\x87\x84\x87\x85\x87\x86\x87\x87\x87\x88"
+ "\x87\x89\x87\x8A\x87\x8B\x87\x8C\x87\x8D\x87\x8E\x87\x8F"
+ "\x87\x90\x87\x91\x87\x92\x87\x93\x87\x94\x87\x95\x87\x96"
+ "\x87\x97\x87\x98\x87\x99\x87\x9A\x87\x9B\x87\x9C"),
+ { 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,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,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 },
+ 83,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x1B$B\x2D\x21\x2D\x22\x2D\x23\x2D\x24\x2D\x25\x2D\x26"
+ "\x2D\x27\x2D\x28\x2D\x29\x2D\x2A\x2D\x2B\x2D\x2C\x2D\x2D"
+ "\x2D\x2E\x2D\x2F\x2D\x30\x2D\x31\x2D\x32\x2D\x33\x2D\x34"
+ "\x2D\x35\x2D\x36\x2D\x37\x2D\x38\x2D\x39\x2D\x3A\x2D\x3B"
+ "\x2D\x3C\x2D\x3D\x2D\x3E\x2D\x40\x2D\x41\x2D\x42\x2D\x43"
+ "\x2D\x44\x2D\x45\x2D\x46\x2D\x47\x2D\x48\x2D\x49\x2D\x4A"
+ "\x2D\x4B\x2D\x4C\x2D\x4D\x2D\x4E\x2D\x4F\x2D\x50\x2D\x51"
+ "\x2D\x52\x2D\x53\x2D\x54\x2D\x55\x2D\x56\x2D\x5F\x2D\x60"
+ "\x2D\x61\x2D\x62\x2D\x63\x2D\x64\x2D\x65\x2D\x66\x2D\x67"
+ "\x2D\x68\x2D\x69\x2D\x6A\x2D\x6B\x2D\x6C\x2D\x6D\x2D\x6E"
+ "\x2D\x6F\x2D\x70\x2D\x71\x2D\x72\x2D\x73\x2D\x74\x2D\x75"
+ "\x2D\x76\x2D\x77\x2D\x78\x2D\x79\x2D\x7A\x2D\x7B\x2D\x7C"
+ "\x1B(B"),
+ { 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,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,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 },
+ 83,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x1B$B\x2D\x21\x2D\x22\x2D\x23\x2D\x24\x2D\x25\x2D\x26"
+ "\x2D\x27\x2D\x28\x2D\x29\x2D\x2A\x2D\x2B\x2D\x2C\x2D\x2D"
+ "\x2D\x2E\x2D\x2F\x2D\x30\x2D\x31\x2D\x32\x2D\x33\x2D\x34"
+ "\x2D\x35\x2D\x36\x2D\x37\x2D\x38\x2D\x39\x2D\x3A\x2D\x3B"
+ "\x2D\x3C\x2D\x3D\x2D\x3E\x2D\x40\x2D\x41\x2D\x42\x2D\x43"
+ "\x2D\x44\x2D\x45\x2D\x46\x2D\x47\x2D\x48\x2D\x49\x2D\x4A"
+ "\x2D\x4B\x2D\x4C\x2D\x4D\x2D\x4E\x2D\x4F\x2D\x50\x2D\x51"
+ "\x2D\x52\x2D\x53\x2D\x54\x2D\x55\x2D\x56\x2D\x5F\x2D\x60"
+ "\x2D\x61\x2D\x62\x2D\x63\x2D\x64\x2D\x65\x2D\x66\x2D\x67"
+ "\x2D\x68\x2D\x69\x2D\x6A\x2D\x6B\x2D\x6C\x2D\x6D\x2D\x6E"
+ "\x2D\x6F\x2D\x73\x2D\x74\x2D\x78\x2D\x79\x1B(B"),
+ { 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,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
+ 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
+ 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x222E,0x2211,
+ 0x221F,0x22BF },
+ 74,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xAD\xA1\xAD\xA2\xAD\xA3\xAD\xA4\xAD\xA5\xAD\xA6\xAD\xA7"
+ "\xAD\xA8\xAD\xA9\xAD\xAA\xAD\xAB\xAD\xAC\xAD\xAD\xAD\xAE"
+ "\xAD\xAF\xAD\xB0\xAD\xB1\xAD\xB2\xAD\xB3\xAD\xB4\xAD\xB5"
+ "\xAD\xB6\xAD\xB7\xAD\xB8\xAD\xB9\xAD\xBA\xAD\xBB\xAD\xBC"
+ "\xAD\xBD\xAD\xBE\xAD\xC0\xAD\xC1\xAD\xC2\xAD\xC3\xAD\xC4"
+ "\xAD\xC5\xAD\xC6\xAD\xC7\xAD\xC8\xAD\xC9\xAD\xCA\xAD\xCB"
+ "\xAD\xCC\xAD\xCD\xAD\xCE\xAD\xCF\xAD\xD0\xAD\xD1\xAD\xD2"
+ "\xAD\xD3\xAD\xD4\xAD\xD5\xAD\xD6\xAD\xDF\xAD\xE0\xAD\xE1"
+ "\xAD\xE2\xAD\xE3\xAD\xE4\xAD\xE5\xAD\xE6\xAD\xE7\xAD\xE8"
+ "\xAD\xE9\xAD\xEA\xAD\xEB\xAD\xEC\xAD\xED\xAD\xEE\xAD\xEF"
+ "\xAD\xF0\xAD\xF1\xAD\xF2\xAD\xF3\xAD\xF4\xAD\xF5\xAD\xF6"
+ "\xAD\xF7\xAD\xF8\xAD\xF9\xAD\xFA\xAD\xFB\xAD\xFC"),
+ { 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,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,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 },
+ 83,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xAD\xA1\xAD\xA2\xAD\xA3\xAD\xA4\xAD\xA5\xAD\xA6\xAD\xA7"
+ "\xAD\xA8\xAD\xA9\xAD\xAA\xAD\xAB\xAD\xAC\xAD\xAD\xAD\xAE"
+ "\xAD\xAF\xAD\xB0\xAD\xB1\xAD\xB2\xAD\xB3\xAD\xB4\xAD\xB5"
+ "\xAD\xB6\xAD\xB7\xAD\xB8\xAD\xB9\xAD\xBA\xAD\xBB\xAD\xBC"
+ "\xAD\xBD\xAD\xBE\xAD\xC0\xAD\xC1\xAD\xC2\xAD\xC3\xAD\xC4"
+ "\xAD\xC5\xAD\xC6\xAD\xC7\xAD\xC8\xAD\xC9\xAD\xCA\xAD\xCB"
+ "\xAD\xCC\xAD\xCD\xAD\xCE\xAD\xCF\xAD\xD0\xAD\xD1\xAD\xD2"
+ "\xAD\xD3\xAD\xD4\xAD\xD5\xAD\xD6\xAD\xDF\xAD\xE0\xAD\xE1"
+ "\xAD\xE2\xAD\xE3\xAD\xE4\xAD\xE5\xAD\xE6\xAD\xE7\xAD\xE8"
+ "\xAD\xE9\xAD\xEA\xAD\xEB\xAD\xEC\xAD\xED\xAD\xEE\xAD\xEF"
+ "\xAD\xF3\xAD\xF4\xAD\xF8\xAD\xF9"),
+ { 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,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
+ 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
+ 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x222E,0x2211,
+ 0x221F,0x22BF },
+ 74,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\xB9\xF5"),
+ { 0x9ED2 },
+ 1,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ // Test ISO-8859-x/MS-125x range 0x80--9F:
+
+ { RTL_TEXTENCODING_ISO_8859_1,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_2,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_3,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_4,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_5,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_6,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_7,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_8,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_9,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_14,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_15,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_874,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1250,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1251,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1252,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1253,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1254,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1255,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1256,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1257,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1258,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_949,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xB0\xA1\xB0\xA2\x81\x41\x81\x42\xB0\xA3\x81\x43\x81\x44"
+ "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7\x81\x45\x81\x46\x81\x47"
+ "\x81\x48\x81\x49\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
+ "\xB0\xAD\xB0\xAE\xB0\xAF\x81\x4A\xB0\xB0\xB0\xB1\xB0\xB2"),
+ { 0xAC00,0xAC01,0xAC02,0xAC03,0xAC04,0xAC05,0xAC06,0xAC07,0xAC08,
+ 0xAC09,0xAC0A,0xAC0B,0xAC0C,0xAC0D,0xAC0E,0xAC0F,0xAC10,0xAC11,
+ 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC18,0xAC19,0xAC1A,
+ 0xAC1B },
+ 28,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_949,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC9\xA1\xC9\xA2\xC9\xA3\xC9\xFC\xC9\xFD\xC9\xFE"
+ "\xFE\xA1\xFE\xA2\xFE\xA3\xFE\xFC\xFE\xFD\xFE\xFE"),
+ { 0xE000,0xE001,0xE002,0xE05B,0xE05C,0xE05D,
+ 0xE05E,0xE05F,0xE060,0xE0B9,0xE0BA,0xE0BB },
+ 12,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ { RTL_TEXTENCODING_EUC_KR,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xB0\xA1\xB0\xA2" "\xB0\xA3"
+ "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7"
+ "\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
+ "\xB0\xAD\xB0\xAE\xB0\xAF" "\xB0\xB0\xB0\xB1\xB0\xB2"),
+ { 0xAC00,0xAC01, 0xAC04, 0xAC07,0xAC08,
+ 0xAC09,0xAC0A, 0xAC10,0xAC11,
+ 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17, 0xAC19,0xAC1A,
+ 0xAC1B },
+ 18,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_KR,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xB0\xA1\xB0\xA2" "\xB0\xA3"
+ "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7"
+ "\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
+ "\xB0\xAD\xB0\xAE\xB0\xAF" "\xB0\xB0\xB0\xB1\xB0\xB2"),
+ { 0xAC00,0xAC01,0xAC02,0xAC03,0xAC04,0xAC05,0xAC06,0xAC07,0xAC08,
+ 0xAC09,0xAC0A,0xAC0B,0xAC0C,0xAC0D,0xAC0E,0xAC0F,0xAC10,0xAC11,
+ 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC18,0xAC19,0xAC1A,
+ 0xAC1B },
+ 28,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_EUC_KR,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC9\xA1\xC9\xA2\xC9\xA3\xC9\xFC\xC9\xFD\xC9\xFE"
+ "\xFE\xA1\xFE\xA2\xFE\xA3\xFE\xFC\xFE\xFD\xFE\xFE"),
+ { 0xE000,0xE001,0xE002,0xE05B,0xE05C,0xE05D,
+ 0xE05E,0xE05F,0xE060,0xE0B9,0xE0BA,0xE0BB },
+ 12,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ // Test UTF-8:
+
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\x00"),
+ { 0x0000 },
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF"),
+ { 0xFEFF },
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF\xEF\xBB\xBF"),
+ { 0xFEFF,0xFEFF },
+ 2,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF"),
+ { 0 },
+ 0,
+ false,
+ true,
+ true,
+ true,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF\xEF\xBB\xBF"),
+ { 0xFEFF },
+ 1,
+ false,
+ true,
+ true,
+ true,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\x01\x02\x7E\x7F"),
+ { 0x0001,0x0002,0x007E,0x007F },
+ 4,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBF\xBF"),
+ {0xFFFF},
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ // Test Java UTF-8:
+
+ { RTL_TEXTENCODING_JAVA_UTF8,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xEF\xBB\xBF\xC0\x80\x01\x20\x41\x7F\xED\xA0\x80"
+ "\xED\xB0\x80"),
+ { 0xFEFF,0x0000,0x0001,0x0020,0x0041,0x007F,0xD800,0xDC00 },
+ 8,
+ false,
+ true,
+ true,
+ true,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ // Bug #112949#:
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM("\x81\x63"),
+ { 0x2026 },
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\xFF"),
+ { 0x00A0, 0x00A9, 0x2122, 0x2026 },
+ 4,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x00A0, 0x00A9, 0x2122 },
+ 3,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+#endif
+ { RTL_TEXTENCODING_MS_932,
+ RTL_CONSTASCII_STRINGPARAM("\x81\x63"),
+ { 0x2026 },
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_932,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\xFF"),
+ { 0x00A0, 0x00A9, 0x2122, 0x2026 },
+ 4,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_932,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x00A0, 0x00A9, 0x2122 },
+ 3,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_APPLE_JAPANESE,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\x81\x63"),
+ { 0x00A0, 0x00A9, 0x2122, 0x2026 },
+ 4,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_APPLE_JAPANESE,
+ RTL_CONSTASCII_STRINGPARAM("\xFF"),
+ { 0x2026 },
+ 1,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ { RTL_TEXTENCODING_ADOBE_STANDARD,
+ RTL_CONSTASCII_STRINGPARAM("\x20\x2D\xA4\xB4\xC5"),
+ { 0x0020, 0x002D, 0x2215, 0x00B7, 0x00AF },
+ 5,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ADOBE_STANDARD,
+ RTL_CONSTASCII_STRINGPARAM("\x20\x2D\xA4\xB4\xC5"),
+ { 0x00A0, 0x00AD, 0x2044, 0x2219, 0x02C9 },
+ 5,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ { RTL_TEXTENCODING_ADOBE_SYMBOL,
+ RTL_CONSTASCII_STRINGPARAM("\x20\x44\x57\x6D\xA4"),
+ { 0x0020, 0x0394, 0x03A9, 0x03BC, 0x2215 },
+ 5,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL,
+ RTL_CONSTASCII_STRINGPARAM("\x20\x44\x57\x6D\xA4"),
+ { 0x00A0, 0x2206, 0x2126, 0x00B5, 0x2044 },
+ 5,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ // Bug #i62310#:
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xF0\x40\xF0\x7E\xF0\x80\xF0\xFC\xF1\x40\xF9\xFC"),
+ { 0xE000, 0xE03E, 0xE03F, 0xE0BB, 0xE0BC, 0xE757 },
+ 6,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ // Bug #i73103#:
+ { RTL_TEXTENCODING_MS_1258,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC0\x41\xDE\xE3\xD2\xD4\xEC\xFD\xF2"),
+ { 0x00C0, 0x0041, 0x0303, 0x0103, 0x0309, 0x00D4, 0x0301, 0x01B0,
+ 0x0323 },
+ 9,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_1258,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC0\x41\xDE\xE3\xD2\xD4\xEC\xFD\xF2"),
+ { 0x00C0, 0x00C3, 0x1EB3, 0x1ED0, 0x1EF1 },
+ 5,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ { RTL_TEXTENCODING_ISCII_DEVANAGARI,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xD7\xE6\x20\xD4\xCF\xE8\xD6\x20"
+ "\xC8\xD8\xD1\xE1\x20\xB3\xCA\xDC"
+ "\xCF\xC4\xDA\xD7\x20\xD8\xDB\xA2"
+ "\xC4\xDE\x20\xB1\xCF\x20\xCC\xDD"
+ "\xD7\xD1\xCC\xDA\xC6\x20\xC4\xE5"
+ "\xC6\xE5\xA2\x20\xB3\xE1\x20\xB3"
+ "\xBD\xE8\xBD\xCF\xC8\xC6\x20\xB3"
+ "\xE5\x20\xC9\xBD\xB3\xDA\xCF\x20"
+ "\xB8\xDD\xB3\xE1\x20\xC3\xE1\x20"
+ "\xEA"),
+ { 0x0938, 0x094C, 0x0020, 0x0935, 0x0930, 0x094D, 0x0937, 0x0020,
+ 0x092A, 0x0939, 0x0932, 0x0947, 0x0020, 0x0915, 0x092C, 0x0940,
+ 0x0930, 0x0926, 0x093E, 0x0938, 0x0020, 0x0939, 0x093F, 0x0902,
+ 0x0926, 0x0942, 0x0020, 0x0914, 0x0930, 0x0020, 0x092E, 0x0941,
+ 0x0938, 0x0932, 0x092E, 0x093E, 0x0928, 0x0020, 0x0926, 0x094B,
+ 0x0928, 0x094B, 0x0902, 0x0020, 0x0915, 0x0947, 0x0020, 0x0915,
+ 0x091F, 0x094D, 0x091F, 0x0930, 0x092A, 0x0928, 0x0020, 0x0915,
+ 0x094B, 0x0020, 0x092B, 0x091F, 0x0915, 0x093E, 0x0930, 0x0020,
+ 0x091A, 0x0941, 0x0915, 0x0947, 0x0020, 0x0925, 0x0947, 0x0020,
+ 0x0964 },
+ 73,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISCII_DEVANAGARI,
+ RTL_CONSTASCII_STRINGPARAM("\xE8\xE8\xE8\xE9\xA1\xE9\xEA\xE9"),
+ { 0x094D, 0x200C, 0x094D, 0x200D, 0x0950, 0x93D },
+ 6,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }
+#endif
+ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ doComplexCharSetTest(data[i]);
+ }
+}
+
+void Test::testComplexCut() {
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja || WITH_LOCALE_zh
+ static ComplexCharSetTest const data[]
+ = {
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x8E"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x8F"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x8F\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_EUC_CN,
+ RTL_CONSTASCII_STRINGPARAM("\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+/* ,
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM("\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM("\x8E"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM("\x8E\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM("\x8E\xA1\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR } */ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ doComplexCharSetCutTest(data[i]);
+ }
+#endif
+}
+
+void Test::testInvalidUtf7() {
+ auto const converter = rtl_createTextToUnicodeConverter(RTL_TEXTENCODING_UTF7);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\x80"), buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+}
+
+void Test::testInvalidUtf8() {
+ // UTF-8, invalid bytes:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\x80\xBF\xFE\xFF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD\uFFFD\uFFFD\uFFFD"),
+ OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, non-shortest two-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xC0\x80"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(2), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, cut two-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xC0"), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL, info);
+ CPPUNIT_ASSERT(converted <= 1);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, non-shortest three-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x9F\xBF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(3), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, cut three-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x80"), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL, info);
+ CPPUNIT_ASSERT(converted <= 2);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, cut three-byte sequence followed by more:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x80."), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(2), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD."), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(3), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, surrogates:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr,
+ RTL_CONSTASCII_STRINGPARAM("\xED\xA0\x80\xED\xB0\x80"), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(2), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(6), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, non-shortest four-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xF0\x8F\xBF\xBF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, too-large four-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xF4\x90\x80\x80"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, five-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr,
+ RTL_CONSTASCII_STRINGPARAM("\xFB\xBF\xBF\xBF\xBF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(5), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, six-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr,
+ RTL_CONSTASCII_STRINGPARAM("\xFD\xBF\xBF\xBF\xBF\xBF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(6), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // Java UTF-8, U+0000:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_JAVA_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\0"), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // Java UTF-8, U+10000:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_JAVA_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ constexpr OStringLiteral input(u8"\U00010000");
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, input.getStr(), input.getLength(), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+}
+
+void Test::testInvalidUnicode() {
+ auto const converter = rtl_createUnicodeToTextConverter(RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode const input[] = {0xDC00}; // lone low surrogate
+ char buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertUnicodeToText(
+ converter, nullptr, input, SAL_N_ELEMENTS(input), buf, TEST_STRING_SIZE,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
+ CPPUNIT_ASSERT_EQUAL(RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+}
+
+void Test::testSRCBUFFERTOSMALL() {
+ rtl_TextToUnicodeConverter cv = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_EUC_JP);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeConverter(EUC-JP) failed",
+ cv != nullptr);
+ rtl_TextToUnicodeContext cx = rtl_createTextToUnicodeContext(cv);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", cx != nullptr);
+ char src = '\xA1';
+ sal_Unicode dst[10];
+ sal_uInt32 info;
+ sal_Size cvt;
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Size(0),
+ rtl_convertTextToUnicode(
+ cv, cx, &src, 1, dst, SAL_N_ELEMENTS(dst),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &info, &cvt));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL, info);
+ CPPUNIT_ASSERT(cvt <= 1);
+ rtl_destroyTextToUnicodeContext(cv, cx);
+ rtl_destroyTextToUnicodeConverter(cv);
+}
+
+void Test::testMime() {
+ struct Data {
+ char const * mime;
+ rtl_TextEncoding encoding;
+ bool reverse;
+ };
+ static Data const data[] = {
+ { "GBK", RTL_TEXTENCODING_GBK, false },
+ { "CP936", RTL_TEXTENCODING_GBK, false },
+ { "MS936", RTL_TEXTENCODING_GBK, false },
+ { "windows-936", RTL_TEXTENCODING_GBK, false },
+
+ { "GB18030", RTL_TEXTENCODING_GB_18030, false },
+
+ { "TIS-620", RTL_TEXTENCODING_TIS_620, true },
+ { "ISO-8859-11", RTL_TEXTENCODING_TIS_620, false }, // not registered
+
+ { "CP874", RTL_TEXTENCODING_MS_874, false }, // not registered
+ { "MS874", RTL_TEXTENCODING_MS_874, false }, // not registered
+ { "windows-874", RTL_TEXTENCODING_MS_874, true }, // not registered
+
+ { "ISO_8859-8:1988", RTL_TEXTENCODING_ISO_8859_8, false },
+ { "iso-ir-138", RTL_TEXTENCODING_ISO_8859_8, false },
+ { "ISO_8859-8", RTL_TEXTENCODING_ISO_8859_8, false },
+ { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8, true },
+ { "hebrew", RTL_TEXTENCODING_ISO_8859_8, false },
+ { "csISOLatinHebrew", RTL_TEXTENCODING_ISO_8859_8, false },
+
+ { "windows-1255", RTL_TEXTENCODING_MS_1255, true },
+
+ { "IBM862", RTL_TEXTENCODING_IBM_862, true },
+ { "cp862", RTL_TEXTENCODING_IBM_862, false },
+ { "862", RTL_TEXTENCODING_IBM_862, false },
+ { "csPC862LatinHebrew", RTL_TEXTENCODING_IBM_862, false },
+
+ { "ISO_8859-6:1987", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "iso-ir-127", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "ISO_8859-6", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6, true },
+ { "ECMA-114", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "ASMO-708", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "arabic", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "csISOLatinArabic", RTL_TEXTENCODING_ISO_8859_6, false },
+
+ { "windows-1256", RTL_TEXTENCODING_MS_1256, true },
+
+ { "IBM864", RTL_TEXTENCODING_IBM_864, true },
+ { "cp864", RTL_TEXTENCODING_IBM_864, false },
+ { "csIBM864", RTL_TEXTENCODING_IBM_864, false },
+
+ { "KOI8-R", RTL_TEXTENCODING_KOI8_R, false },
+ { "csKOI8R", RTL_TEXTENCODING_KOI8_R, false },
+ { "koi8-r", RTL_TEXTENCODING_KOI8_R, true },
+
+ { "KOI8-U", RTL_TEXTENCODING_KOI8_U, true },
+
+ { "IBM860", RTL_TEXTENCODING_IBM_860, true },
+ { "cp860", RTL_TEXTENCODING_IBM_860, false },
+ { "860", RTL_TEXTENCODING_IBM_860, false },
+ { "csIBM860", RTL_TEXTENCODING_IBM_860, false },
+
+ { "IBM861", RTL_TEXTENCODING_IBM_861, true },
+ { "cp861", RTL_TEXTENCODING_IBM_861, false },
+ { "861", RTL_TEXTENCODING_IBM_861, false },
+ { "cp-is", RTL_TEXTENCODING_IBM_861, false },
+ { "csIBM861", RTL_TEXTENCODING_IBM_861, false },
+
+ { "IBM863", RTL_TEXTENCODING_IBM_863, true },
+ { "cp863", RTL_TEXTENCODING_IBM_863, false },
+ { "863", RTL_TEXTENCODING_IBM_863, false },
+ { "csIBM863", RTL_TEXTENCODING_IBM_863, false },
+
+ { "IBM865", RTL_TEXTENCODING_IBM_865, true },
+ { "cp865", RTL_TEXTENCODING_IBM_865, false },
+ { "865", RTL_TEXTENCODING_IBM_865, false },
+ { "csIBM865", RTL_TEXTENCODING_IBM_865, false },
+
+ { "Latin-9", RTL_TEXTENCODING_ISO_8859_15, false },
+
+ { "KS_C_5601-1987", RTL_TEXTENCODING_MS_949, false },
+ { "iso-ir-149", RTL_TEXTENCODING_MS_949, false },
+ { "KS_C_5601-1989", RTL_TEXTENCODING_MS_949, false },
+ { "KSC_5601", RTL_TEXTENCODING_MS_949, false },
+ { "korean", RTL_TEXTENCODING_MS_949, false },
+ { "csKSC56011987", RTL_TEXTENCODING_MS_949, false },
+ { nullptr, RTL_TEXTENCODING_MS_949, true },
+
+ { "Adobe-Standard-Encoding", RTL_TEXTENCODING_ADOBE_STANDARD, false },
+ { "csAdobeStandardEncoding", RTL_TEXTENCODING_ADOBE_STANDARD, false },
+ { "Adobe-Symbol-Encoding", RTL_TEXTENCODING_ADOBE_SYMBOL, false },
+ { "csHPPSMath", RTL_TEXTENCODING_ADOBE_SYMBOL, false },
+
+ { "PTCP154", RTL_TEXTENCODING_PT154, true },
+ { "csPTCP154", RTL_TEXTENCODING_PT154, false },
+ { "PT154", RTL_TEXTENCODING_PT154, false },
+ { "CP154", RTL_TEXTENCODING_PT154, false },
+ { "Cyrillic-Asian", RTL_TEXTENCODING_PT154, false }
+ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ if (data[i].mime == nullptr) {
+ OSL_ASSERT(data[i].reverse);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< char const * >(nullptr),
+ rtl_getMimeCharsetFromTextEncoding(data[i].encoding));
+ } else {
+ CPPUNIT_ASSERT_EQUAL(
+ data[i].encoding,
+ rtl_getTextEncodingFromMimeCharset(data[i].mime));
+ if (data[i].reverse) {
+ CPPUNIT_ASSERT_EQUAL(
+ OString(data[i].mime),
+ OString(
+ rtl_getMimeCharsetFromTextEncoding(data[i].encoding)));
+ }
+ }
+ }
+}
+
+void Test::testWindows() {
+ struct Data {
+ sal_uInt32 codePage;
+ rtl_TextEncoding encoding;
+ bool reverse;
+ };
+ static Data const data[] = {
+ { 42, RTL_TEXTENCODING_SYMBOL, true },
+ { 437, RTL_TEXTENCODING_IBM_437, true },
+ { 708, RTL_TEXTENCODING_ISO_8859_6, false },
+ { 737, RTL_TEXTENCODING_IBM_737, true },
+ { 775, RTL_TEXTENCODING_IBM_775, true },
+ { 850, RTL_TEXTENCODING_IBM_850, true },
+ { 852, RTL_TEXTENCODING_IBM_852, true },
+ { 855, RTL_TEXTENCODING_IBM_855, true },
+ { 857, RTL_TEXTENCODING_IBM_857, true },
+ { 860, RTL_TEXTENCODING_IBM_860, true },
+ { 861, RTL_TEXTENCODING_IBM_861, true },
+ { 862, RTL_TEXTENCODING_IBM_862, true },
+ { 863, RTL_TEXTENCODING_IBM_863, true },
+ { 864, RTL_TEXTENCODING_IBM_864, true },
+ { 865, RTL_TEXTENCODING_IBM_865, true },
+ { 866, RTL_TEXTENCODING_IBM_866, true },
+ { 869, RTL_TEXTENCODING_IBM_869, true },
+ { 874, RTL_TEXTENCODING_MS_874, true },
+ { 932, RTL_TEXTENCODING_MS_932, true },
+ { 936, RTL_TEXTENCODING_MS_936, true },
+ { 949, RTL_TEXTENCODING_MS_949, true },
+ { 950, RTL_TEXTENCODING_MS_950, true },
+ { 1250, RTL_TEXTENCODING_MS_1250, true },
+ { 1251, RTL_TEXTENCODING_MS_1251, true },
+ { 1252, RTL_TEXTENCODING_MS_1252, true },
+ { 1253, RTL_TEXTENCODING_MS_1253, true },
+ { 1254, RTL_TEXTENCODING_MS_1254, true },
+ { 1255, RTL_TEXTENCODING_MS_1255, true },
+ { 1256, RTL_TEXTENCODING_MS_1256, true },
+ { 1257, RTL_TEXTENCODING_MS_1257, true },
+ { 1258, RTL_TEXTENCODING_MS_1258, true },
+ { 1361, RTL_TEXTENCODING_MS_1361, true },
+ { 10000, RTL_TEXTENCODING_APPLE_ROMAN, true },
+ { 10001, RTL_TEXTENCODING_APPLE_JAPANESE, true },
+ { 10002, RTL_TEXTENCODING_APPLE_CHINTRAD, true },
+ { 10003, RTL_TEXTENCODING_APPLE_KOREAN, true },
+ { 10004, RTL_TEXTENCODING_APPLE_ARABIC, true },
+ { 10005, RTL_TEXTENCODING_APPLE_HEBREW, true },
+ { 10006, RTL_TEXTENCODING_APPLE_GREEK, true },
+ { 10007, RTL_TEXTENCODING_APPLE_CYRILLIC, true },
+ { 10008, RTL_TEXTENCODING_APPLE_CHINSIMP, true },
+ { 10010, RTL_TEXTENCODING_APPLE_ROMANIAN, true },
+ { 10017, RTL_TEXTENCODING_APPLE_UKRAINIAN, true },
+ { 10029, RTL_TEXTENCODING_APPLE_CENTEURO, true },
+ { 10079, RTL_TEXTENCODING_APPLE_ICELAND, true },
+ { 10081, RTL_TEXTENCODING_APPLE_TURKISH, true },
+ { 10082, RTL_TEXTENCODING_APPLE_CROATIAN, true },
+ { 20127, RTL_TEXTENCODING_ASCII_US, true },
+ { 20866, RTL_TEXTENCODING_KOI8_R, true },
+ { 21866, RTL_TEXTENCODING_KOI8_U, true },
+ { 28591, RTL_TEXTENCODING_ISO_8859_1, true },
+ { 28592, RTL_TEXTENCODING_ISO_8859_2, true },
+ { 28593, RTL_TEXTENCODING_ISO_8859_3, true },
+ { 28594, RTL_TEXTENCODING_ISO_8859_4, true },
+ { 28595, RTL_TEXTENCODING_ISO_8859_5, true },
+ { 28596, RTL_TEXTENCODING_ISO_8859_6, true },
+ { 28597, RTL_TEXTENCODING_ISO_8859_7, true },
+ { 28598, RTL_TEXTENCODING_ISO_8859_8, true },
+ { 28599, RTL_TEXTENCODING_ISO_8859_9, true },
+ { 28605, RTL_TEXTENCODING_ISO_8859_15, true },
+ { 50220, RTL_TEXTENCODING_ISO_2022_JP, true },
+ { 50225, RTL_TEXTENCODING_ISO_2022_KR, true },
+ { 51932, RTL_TEXTENCODING_EUC_JP, true },
+ { 51936, RTL_TEXTENCODING_EUC_CN, true },
+ { 51949, RTL_TEXTENCODING_EUC_KR, true },
+ { 65000, RTL_TEXTENCODING_UTF7, true },
+ { 65001, RTL_TEXTENCODING_UTF8, true },
+ { 1200, RTL_TEXTENCODING_DONTKNOW, false }, // UTF_16LE
+ { 1201, RTL_TEXTENCODING_DONTKNOW, false }, // UTF_16LE
+ { 0, RTL_TEXTENCODING_DONTKNOW, true },
+ { 0, RTL_TEXTENCODING_UCS4, true },
+ { 0, RTL_TEXTENCODING_UCS2, true },
+ { 57002, RTL_TEXTENCODING_ISCII_DEVANAGARI, true }
+ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ OSL_ASSERT(data[i].codePage != 0 || data[i].reverse);
+ if (data[i].codePage != 0) {
+ CPPUNIT_ASSERT_EQUAL(
+ data[i].encoding,
+ rtl_getTextEncodingFromWindowsCodePage(data[i].codePage));
+ }
+ if (data[i].reverse) {
+ CPPUNIT_ASSERT_EQUAL(
+ data[i].codePage,
+ rtl_getWindowsCodePageFromTextEncoding(data[i].encoding));
+ }
+ }
+}
+
+void Test::testInfo() {
+ struct Data {
+ rtl_TextEncoding encoding;
+ sal_uInt32 flag;
+ bool value;
+ };
+ static Data const data[] = {
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_INFO_CONTEXT, true },
+ { RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_INFO_ASCII, false },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ { RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_INFO_CONTEXT, true },
+ { RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_INFO_ASCII, false },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_INFO_UNICODE, true },
+ { RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_INFO_CONTEXT, true },
+ { RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_INFO_ASCII, false },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ { RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_INFO_MIME, false },
+#endif
+ { RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_SYMBOL, false },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_SYMBOL, true },
+ { RTL_TEXTENCODING_PT154, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_PT154, RTL_TEXTENCODING_INFO_MIME, true }
+ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ rtl_TextEncodingInfo info;
+ info.StructSize = sizeof info;
+ CPPUNIT_ASSERT(rtl_getTextEncodingInfo(data[i].encoding, &info));
+ CPPUNIT_ASSERT_EQUAL(data[i].value, ((info.Flags & data[i].flag) != 0));
+ }
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/uri/rtl_Uri.cxx b/sal/qa/rtl/uri/rtl_Uri.cxx
new file mode 100644
index 000000000..1084926c6
--- /dev/null
+++ b/sal/qa/rtl/uri/rtl_Uri.cxx
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdlib.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/uri.hxx>
+#include <osl/thread.h>
+#include <osl/file.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace Stringtest
+{
+
+ class Convert : public CppUnit::TestFixture
+ {
+ public:
+ OString convertToOString(OUString const& _suStr)
+ {
+ return OUStringToOString(_suStr, osl_getThreadTextEncoding()/*RTL_TEXTENCODING_ASCII_US*/);
+ }
+
+ void showContent(OUString const& _suStr)
+ {
+ OString sStr = convertToOString(_suStr);
+ printf("%s\n", sStr.getStr());
+ }
+
+ void test_FromUTF8_001()
+ {
+ // string --> ustring
+ OUString suStrUTF8 = OStringToOUString("h%C3%A4llo", RTL_TEXTENCODING_ASCII_US);
+
+ // UTF8 --> real ustring
+ OUString suStr_UriDecodeToIuri = rtl::Uri::decode(suStrUTF8, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8);
+ showContent(suStr_UriDecodeToIuri);
+
+ // string --> ustring
+ OString sStr("h\xE4llo", strlen("h\xE4llo"));
+ OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Strings must be equal", suString, suStr_UriDecodeToIuri);
+
+ // ustring --> ustring (UTF8)
+ OUString suStr2 = rtl::Uri::encode(suStr_UriDecodeToIuri, rtl_UriCharClassUnoParamValue, rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8);
+ showContent(suStr2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Strings must be equal", suStr2, suStrUTF8);
+ // suStr should be equal to suStr2
+ }
+
+ CPPUNIT_TEST_SUITE( Convert );
+ CPPUNIT_TEST( test_FromUTF8_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION( Stringtest::Convert );
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/uri/rtl_testuri.cxx b/sal/qa/rtl/uri/rtl_testuri.cxx
new file mode 100644
index 000000000..fc45ba238
--- /dev/null
+++ b/sal/qa/rtl/uri/rtl_testuri.cxx
@@ -0,0 +1,514 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_locales.h>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/uri.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <cstddef>
+#include <stdio.h>
+
+namespace {
+
+struct Test: public CppUnit::TestFixture {
+ void test_Uri();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test_Uri);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::test_Uri() {
+ rtl_UriCharClass const eFirstCharClass = rtl_UriCharClassNone;
+ rtl_UriCharClass const eLastCharClass = rtl_UriCharClassUnoParamValue;
+
+ OUString aText1;
+ OUString aText2;
+
+ // Check that all characters map back to themselves when encoded/decoded:
+
+ aText1 = OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "\x00\x01\x02\x03\x04\x05\x06\x07"
+ "\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
+ "\x10\x11\x12\x13\x14\x15\x16\x17"
+ "\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
+ "\x20\x21\x22\x23\x24\x25\x26\x27"
+ "\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F"
+ "\x30\x31\x32\x33\x34\x35\x36\x37"
+ "\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F"
+ "\x40\x41\x42\x43\x44\x45\x46\x47"
+ "\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F"
+ "\x50\x51\x52\x53\x54\x55\x56\x57"
+ "\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F"
+ "\x60\x61\x62\x63\x64\x65\x66\x67"
+ "\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F"
+ "\x70\x71\x72\x73\x74\x75\x76\x77"
+ "\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F"));
+ aText2 = aText1;
+ for (rtl_UriCharClass eCharClass = eFirstCharClass;
+ eCharClass <= eLastCharClass;
+ eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1))
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 1",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 2",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 3",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 4",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 5",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 6",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+ }
+
+ aText1 = OUString(
+ ("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
+ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
+ "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F"
+ "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F"
+ "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F"
+ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F"
+ "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F"
+ "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F"
+ "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF"
+ "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF"
+ "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF"
+ "\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF"
+ "\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF"
+ "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"),
+ 256, RTL_TEXTENCODING_ISO_8859_1);
+ aText2 = aText1;
+ for (rtl_UriCharClass eCharClass = eFirstCharClass;
+ eCharClass <= eLastCharClass;
+ eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1))
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 7",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 8",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 9",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_UTF8),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 10",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_UTF8),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+ }
+
+ // Check surrogate handling:
+
+ aText1 = u"\xD800" // %ED%A0%80
+ u"\U000103FF" // 0xD800,0xDFFF -> %F0%90%8F%BF
+ u"\xDFFF" // %ED%BF%BF
+ u"A"; // A
+ aText2 = "%ED%A0%80" "%F0%90%8F%BF" "%ED%BF%BF" "A";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 11",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 12",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 13",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_UTF8));
+
+ aText1 = "%ed%a0%80" "%f0%90%8f%bf" "%ed%bf%bf" "A";
+ aText2 = u"%ED%A0%80" u"\U000103FF" u"%ED%BF%BF" u"A";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 14",
+ aText2,
+ rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 15",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+
+ // Check UTF-8 handling:
+
+ aText1 = "%E0%83%BF";
+ // \U+00FF encoded with three instead of two bytes
+ aText2 = aText1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 16",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_UTF8));
+
+ aText1 = "%EF%BF%BF";
+ // \U+FFFF is no legal character
+ aText2 = aText1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 17",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_UTF8));
+
+ // Check IURI handling:
+
+ aText1 = "%30%C3%BF";
+ aText2 = u"%30\u00FF";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 18",
+ aText2,
+ rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8));
+
+ // Check modified rtl_UriCharClassUnoParamValue (removed '[' and ']'):
+
+ aText1 = "[]%5B%5D";
+ aText2 = "%5B%5D%5B%5D";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 19",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUnoParamValue, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ASCII_US));
+
+ // Check Uri::convertRelToAbs:
+
+ struct RelToAbsTest
+ {
+ char const * pBase;
+ char const * pRel;
+ char const * pAbs;
+ };
+ static RelToAbsTest const aRelToAbsTest[]
+ = { // The following tests are taken from RFC 3986:
+ { "http://a/b/c/d;p?q", "g:h", "g:h" },
+ { "http://a/b/c/d;p?q", "g", "http://a/b/c/g" },
+ { "http://a/b/c/d;p?q", "./g", "http://a/b/c/g" },
+ { "http://a/b/c/d;p?q", "g/", "http://a/b/c/g/" },
+ { "http://a/b/c/d;p?q", "/g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "//g", "http://g" },
+ { "http://a/b/c/d;p?q", "?y", "http://a/b/c/d;p?y" },
+ { "http://a/b/c/d;p?q", "g?y", "http://a/b/c/g?y" },
+ { "http://a/b/c/d;p?q", "#s", "http://a/b/c/d;p?q#s" },
+ { "http://a/b/c/d;p?q", "g#s", "http://a/b/c/g#s" },
+ { "http://a/b/c/d;p?q", "g?y#s", "http://a/b/c/g?y#s" },
+ { "http://a/b/c/d;p?q", ";x", "http://a/b/c/;x" },
+ { "http://a/b/c/d;p?q", "g;x", "http://a/b/c/g;x" },
+ { "http://a/b/c/d;p?q", "g;x?y#s", "http://a/b/c/g;x?y#s" },
+ { "http://a/b/c/d;p?q", "", "http://a/b/c/d;p?q" },
+ { "http://a/b/c/d;p?q", ".", "http://a/b/c/" },
+ { "http://a/b/c/d;p?q", "./", "http://a/b/c/" },
+ { "http://a/b/c/d;p?q", "..", "http://a/b/" },
+ { "http://a/b/c/d;p?q", "../", "http://a/b/" },
+ { "http://a/b/c/d;p?q", "../g", "http://a/b/g" },
+ { "http://a/b/c/d;p?q", "../..", "http://a/" },
+ { "http://a/b/c/d;p?q", "../../", "http://a/" },
+ { "http://a/b/c/d;p?q", "../../g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "../../../g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "../../../../g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "/./g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "/../g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "g.", "http://a/b/c/g." },
+ { "http://a/b/c/d;p?q", ".g", "http://a/b/c/.g" },
+ { "http://a/b/c/d;p?q", "g..", "http://a/b/c/g.." },
+ { "http://a/b/c/d;p?q", "..g", "http://a/b/c/..g" },
+ { "http://a/b/c/d;p?q", "./../g", "http://a/b/g" },
+ { "http://a/b/c/d;p?q", "./g/.", "http://a/b/c/g/" },
+ { "http://a/b/c/d;p?q", "g/./h", "http://a/b/c/g/h" },
+ { "http://a/b/c/d;p?q", "g/../h", "http://a/b/c/h" },
+ { "http://a/b/c/d;p?q", "g;x=1/./y", "http://a/b/c/g;x=1/y" },
+ { "http://a/b/c/d;p?q", "g;x=1/../y", "http://a/b/c/y" },
+ { "http://a/b/c/d;p?q", "g?y/./x", "http://a/b/c/g?y/./x" },
+ { "http://a/b/c/d;p?q", "g?y/../x", "http://a/b/c/g?y/../x" },
+ { "http://a/b/c/d;p?q", "g#s/./x", "http://a/b/c/g#s/./x" },
+ { "http://a/b/c/d;p?q", "g#s/../x", "http://a/b/c/g#s/../x" },
+ { "http://a/b/c/d;p?q", "http:g", "http:g" },
+
+ { "http!://a/b/c/d;p?q", "g:h", "g:h" },
+ { "http!://a/b/c/d;p?q", "g", nullptr },
+ { "http:b/c/d;p?q", "g:h", "g:h" },
+ { "http:b/c/d;p?q", "g", "http:b/c/g" },
+ { "http://a/b/../", "../c", "http://a/c" },
+ { "http://a/b/..", "../c", "http://a/c" },
+ { "http://a/./b/", ".././.././../c", "http://a/c" },
+ { "http://a", "b", "http://a/b" },
+ { "", "http://a/b/../c", "http://a/c" },
+
+ { "http://a/b/c", "d", "http://a/b/d" },
+ { "http://a/b/c/", "d", "http://a/b/c/d" },
+ { "http://a/b/c//", "d", "http://a/b/c//d" } };
+
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(aRelToAbsTest); ++i)
+ {
+ OUString aAbs;
+ bool bMalformed = false;
+ try {
+ aAbs = rtl::Uri::convertRelToAbs(
+ OUString::createFromAscii(aRelToAbsTest[i].pBase),
+ OUString::createFromAscii(aRelToAbsTest[i].pRel));
+ } catch (const rtl::MalformedUriException &) {
+ bMalformed = true;
+ }
+ if (bMalformed
+ ? aRelToAbsTest[i].pAbs != nullptr
+ : (aRelToAbsTest[i].pAbs == nullptr
+ || !aAbs.equalsAscii(aRelToAbsTest[i].pAbs)))
+ {
+ printf(
+ "FAILED convertRelToAbs(%s, %s) -> %s != %s\n",
+ aRelToAbsTest[i].pBase, aRelToAbsTest[i].pRel,
+ (bMalformed
+ ? "<MALFORMED>"
+ : OUStringToOString(
+ aAbs, RTL_TEXTENCODING_UTF8).getStr()),
+ (aRelToAbsTest[i].pAbs == nullptr
+ ? "<MALFORMED>" : aRelToAbsTest[i].pAbs));
+ CPPUNIT_ASSERT(false);
+ }
+ }
+
+ // Check encode with unusual text encodings:
+
+ {
+ static constexpr OUStringLiteral aText1U = u" !\u0401\u045F";
+ aText1 = OUString(aText1U);
+ aText2 = "%20!%A1%FF";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 20",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_ISO_8859_5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 20a",
+ aText1,
+ rtl::Uri::decode(
+ aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5));
+ }
+ {
+ static constexpr OUStringLiteral aText1U = u" !\u0401\u0700\u045F";
+ aText1 = OUString(aText1U);
+ static constexpr OUStringLiteral aText2U =
+ u"%20!%A1\u0700%FF";
+ aText2 = OUString(aText2U);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 21",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_ISO_8859_5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 21a",
+ aText1,
+ rtl::Uri::decode(
+ aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5));
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ {
+ static constexpr OUStringLiteral aText1U = u" !\u028A\U00022513";
+ aText1 = OUString(aText1U);
+ aText2 = "%20!%81%30%B1%33%95%39%C5%37";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 22",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_GB_18030));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 22a",
+ aText1,
+ rtl::Uri::decode(
+ aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_GB_18030));
+ }
+#endif
+ // Check strict mode:
+
+ {
+ static constexpr OUStringLiteral aText1U = u" !\u0401\u0700\u045F";
+ aText1 = OUString(aText1U);
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 23",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeStrict,
+ RTL_TEXTENCODING_ISO_8859_5));
+ }
+ {
+ aText1 = "%20%C4%80%FF";
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 24",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_UTF8));
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ {
+ aText1 = "%81 ";
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 25",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030));
+ }
+ {
+ aText1 = "%81%20";
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 26",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030));
+ }
+ {
+ aText1 = "%81%30%B1%33";
+ static constexpr OUStringLiteral aText2U = u"\u028A";
+ aText2 = OUString(aText2U);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 27",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030));
+ }
+ {
+ aText1 = "%810%B13";
+ static constexpr OUStringLiteral aText2U = u"\u028A";
+ aText2 = OUString(aText2U);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 28",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030));
+ }
+#endif
+ // Check rtl_UriEncodeStrictKeepEscapes mode:
+
+ {
+ aText1 = "%%ea%c3%aa";
+ aText2 = "%25%EA%C3%AA";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 29",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
+ RTL_TEXTENCODING_UTF8));
+ }
+ {
+ static constexpr OUStringLiteral aText1U = u"\u00EA";
+ aText1 = OUString(aText1U);
+ aText2 = "%C3%AA";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 30",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
+ RTL_TEXTENCODING_UTF8));
+ }
+ {
+ static constexpr OUStringLiteral aText1U = u" !\u0401\u0700\u045F";
+ aText1 = OUString(aText1U);
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 23",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_5));
+ }
+}
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/uuid/rtl_Uuid.cxx b/sal/qa/rtl/uuid/rtl_Uuid.cxx
new file mode 100644
index 000000000..aae77cfe3
--- /dev/null
+++ b/sal/qa/rtl/uuid/rtl_Uuid.cxx
@@ -0,0 +1,159 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <rtl/uuid.h>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#elif defined UNX
+#include <unistd.h>
+#include <time.h>
+#endif
+
+
+namespace rtl_Uuid
+{
+class createUuid : public CppUnit::TestFixture
+{
+public:
+#define TEST_UUID 20
+ void createUuid_001()
+ {
+ sal_uInt8 aNode[TEST_UUID][16];
+ sal_Int32 i,i2;
+ for( i = 0 ; i < TEST_UUID ; i ++ )
+ {
+ rtl_createUuid( aNode[i], nullptr, false );
+ }
+ bool bRes = true;
+ for( i = 0 ; i < TEST_UUID ; i ++ )
+ {
+ for( i2 = i+1 ; i2 < TEST_UUID ; i2 ++ )
+ {
+ if ( rtl_compareUuid( aNode[i] , aNode[i2] ) == 0 )
+ {
+ bRes = false;
+ break;
+ }
+ }
+ if ( !bRes )
+ break;
+ }
+ CPPUNIT_ASSERT_MESSAGE("createUuid: every uuid must be different.", bRes);
+ }
+ /*
+ void createUuid_002()
+ {
+ sal_uInt8 pNode[16];
+ sal_uInt8 aNode[TEST_UUID][16];
+ sal_Int32 i,i2;
+ for( i = 0 ; i < TEST_UUID ; i ++ )
+ {
+ rtl_createUuid( aNode[i], pNode, sal_True );
+ }
+ sal_Bool bRes = sal_True;
+ for( i = 0 ; i < TEST_UUID ; i ++ )
+ {
+ //printUuid( aNode[i] );
+ for( i2 = i+1 ; i2 < TEST_UUID ; i2 ++ )
+ {
+ if ( rtl_compareUuid( aNode[i] , aNode[i2] ) == 0 )
+ {
+ bRes = sal_False;
+ break;
+ }
+ }
+ if ( bRes == sal_False )
+ break;
+ }
+ CPPUNIT_ASSERT_MESSAGE("createUuid: every uuid must be different.", bRes == sal_True );
+ }*/
+
+ CPPUNIT_TEST_SUITE(createUuid);
+ CPPUNIT_TEST(createUuid_001);
+ //CPPUNIT_TEST(createUuid_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class createUuid
+
+class createNamedUuid : public CppUnit::TestFixture
+{
+public:
+ void createNamedUuid_001()
+ {
+ sal_uInt8 NameSpace_DNS[16] = RTL_UUID_NAMESPACE_DNS;
+ sal_uInt8 NameSpace_URL[16] = RTL_UUID_NAMESPACE_URL;
+ sal_uInt8 pPriorCalculatedUUID[16] = {
+ 0x52,0xc9,0x30,0xa5,
+ 0xd1,0x61,0x3b,0x16,
+ 0x98,0xc5,0xf8,0xd1,
+ 0x10,0x10,0x6d,0x4d };
+
+ sal_uInt8 pNamedUUID[16], pNamedUUID2[16];
+
+ // Same name does generate the same uuid
+ rtl_String *pName = nullptr;
+ rtl_string_newFromStr( &pName , "this is a bla.blubs.DNS-Name" );
+ rtl_createNamedUuid( pNamedUUID , NameSpace_DNS , pName );
+ rtl_createNamedUuid( pNamedUUID2 , NameSpace_DNS , pName );
+ CPPUNIT_ASSERT_MESSAGE( "Same name should generate the same uuid", ! memcmp( pNamedUUID , pNamedUUID2 , 16 ));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Same name should generate the same uuid", sal_Int32(0), rtl_compareUuid( pNamedUUID , pNamedUUID2 ) );
+ CPPUNIT_ASSERT_MESSAGE( "Same name should generate the same uuid", ! memcmp( pNamedUUID , pPriorCalculatedUUID , 16 ) );
+
+ // Different names does not generate the same uuid
+ rtl_string_newFromStr( &pName , "this is a bla.blubs.DNS-Namf" );
+ rtl_createNamedUuid( pNamedUUID2 , NameSpace_DNS , pName );
+ CPPUNIT_ASSERT_MESSAGE("Different names does not generate the same uuid.", memcmp( pNamedUUID , pNamedUUID2 , 16 ) );
+
+ // the same name with different namespace uuid produces different uuids
+ rtl_createNamedUuid( pNamedUUID , NameSpace_URL , pName );
+ CPPUNIT_ASSERT_MESSAGE( " same name with different namespace uuid produces different uuids", memcmp( pNamedUUID , pNamedUUID2 , 16 ));
+ CPPUNIT_ASSERT_MESSAGE( " same name with different namespace uuid produces different uuids", rtl_compareUuid( pNamedUUID , pNamedUUID2 ) != 0);
+
+ //test compareUuid
+ if ( rtl_compareUuid( pNamedUUID , pNamedUUID2 ) > 0 )
+ { CPPUNIT_ASSERT_MESSAGE( " compare uuids", rtl_compareUuid( pNamedUUID2 , pNamedUUID ) < 0);
+ }
+ else
+ CPPUNIT_ASSERT_MESSAGE( " compare uuids", rtl_compareUuid( pNamedUUID2 , pNamedUUID ) > 0);
+
+ rtl_string_release( pName );
+ }
+
+ CPPUNIT_TEST_SUITE(createNamedUuid);
+ CPPUNIT_TEST(createNamedUuid_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class createNamedUuid
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_Uuid::createUuid);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_Uuid::createNamedUuid);
+} // namespace rtl_Uuid
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/sal/test_types.cxx b/sal/qa/sal/test_types.cxx
new file mode 100644
index 000000000..a03ccc93e
--- /dev/null
+++ b/sal/qa/sal/test_types.cxx
@@ -0,0 +1,75 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cstddef>
+#include <stdio.h>
+#include <string.h>
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace {
+
+template< typename T > void testPrintf(
+ char const * result, char const * format, T argument)
+{
+ std::size_t const bufsize = 1000;
+ char buf[bufsize];
+ int n = snprintf(buf, bufsize, format, argument);
+ CPPUNIT_ASSERT(n >= 0);
+ CPPUNIT_ASSERT(sal::static_int_cast< unsigned int >(n) < bufsize);
+ CPPUNIT_ASSERT_EQUAL(0, strcmp(buf, result));
+}
+
+class Test: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::test() {
+ testPrintf("-2147483648", "%" SAL_PRIdINT32, SAL_MIN_INT32);
+ testPrintf("4294967295", "%" SAL_PRIuUINT32, SAL_MAX_UINT32);
+ testPrintf("ffffffff", "%" SAL_PRIxUINT32, SAL_MAX_UINT32);
+ testPrintf("FFFFFFFF", "%" SAL_PRIXUINT32, SAL_MAX_UINT32);
+ testPrintf("-9223372036854775808", "%" SAL_PRIdINT64, SAL_MIN_INT64);
+ testPrintf("18446744073709551615", "%" SAL_PRIuUINT64, SAL_MAX_UINT64);
+ testPrintf("ffffffffffffffff", "%" SAL_PRIxUINT64, SAL_MAX_UINT64);
+ testPrintf("FFFFFFFFFFFFFFFF", "%" SAL_PRIXUINT64, SAL_MAX_UINT64);
+ testPrintf("123", "%" SAL_PRI_SIZET "u", static_cast< std::size_t >(123));
+ testPrintf(
+ "-123", "%" SAL_PRI_PTRDIFFT "d", static_cast< std::ptrdiff_t >(-123));
+ testPrintf("-123", "%" SAL_PRIdINTPTR, static_cast< sal_IntPtr >(-123));
+ testPrintf("123", "%" SAL_PRIuUINTPTR, static_cast< sal_uIntPtr >(123));
+ testPrintf("abc", "%" SAL_PRIxUINTPTR, static_cast< sal_uIntPtr >(0xabc));
+ testPrintf("ABC", "%" SAL_PRIXUINTPTR, static_cast< sal_uIntPtr >(0xabc));
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/systools/test_comtools.cxx b/sal/qa/systools/test_comtools.cxx
new file mode 100644
index 000000000..073bb79ec
--- /dev/null
+++ b/sal/qa/systools/test_comtools.cxx
@@ -0,0 +1,247 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <systools/win32/comtools.hxx>
+#include <shobjidl.h>
+
+namespace {
+
+class COMObject : public IUnknown
+{
+public:
+ COMObject() : ref_count_(0)
+ {
+ }
+
+ virtual ~COMObject()
+ {
+ }
+
+ ULONG __stdcall AddRef() override
+ {
+ ref_count_++;
+ return ref_count_;
+ }
+
+ ULONG __stdcall Release() override
+ {
+ ULONG cnt = --ref_count_;
+ if (cnt == 0)
+ delete this;
+ return cnt;
+ }
+
+ HRESULT __stdcall QueryInterface(REFIID riid, void** ppv) override
+ {
+ if (riid == IID_IUnknown)
+ {
+ AddRef();
+ *ppv = this;
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+ }
+
+ ULONG GetRefCount() const
+ {
+ return ref_count_;
+ }
+
+private:
+ ULONG ref_count_;
+};
+
+}
+
+static sal::systools::COMReference<IUnknown> comObjectSource()
+{
+ return sal::systools::COMReference<IUnknown>(new COMObject);
+}
+
+static bool comObjectSink(sal::systools::COMReference<IUnknown> r, ULONG expectedRefCountOnReturn)
+{
+ r = sal::systools::COMReference<IUnknown>();
+ COMObject* p = reinterpret_cast<COMObject*>(r.get());
+ if (p)
+ return (p->GetRefCount() == expectedRefCountOnReturn);
+ else
+ return (0 == expectedRefCountOnReturn);
+}
+
+static void comObjectSource2(LPVOID* ppv)
+{
+ COMObject* p = new COMObject;
+ p->AddRef();
+ *ppv = p;
+}
+
+namespace test_comtools
+{
+
+ class test_COMReference : public CppUnit::TestFixture
+ {
+
+ public:
+ /// test of COMReference<IUnknown> r;
+ void default_ctor()
+ {
+ sal::systools::COMReference<IUnknown> r;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("COMReference should be empty", static_cast<IUnknown *>(nullptr), r.get());
+ }
+
+ void test_ctor_manual_AddRef()
+ {
+ COMObject* p = new COMObject;
+ p->AddRef();
+ sal::systools::COMReference<IUnknown> r(p, false);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_copy_ctor()
+ {
+ sal::systools::COMReference<IUnknown> r(comObjectSource());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_copy_assignment()
+ {
+ sal::systools::COMReference<IUnknown> r;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("COMReference should be empty", static_cast<IUnknown *>(nullptr), r.get());
+
+ r = comObjectSource();
+ CPPUNIT_ASSERT_MESSAGE("COMReference should be empty", r.get() != nullptr);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_ref_to_ref_assignment()
+ {
+ sal::systools::COMReference<IUnknown> r1 = comObjectSource();
+ sal::systools::COMReference<IUnknown> r2 = r1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 2 is expected", ULONG(2), reinterpret_cast<COMObject*>(r2.get())->GetRefCount());
+ }
+
+ void test_pointer_to_ref_assignment()
+ {
+ sal::systools::COMReference<IUnknown> r;
+ r = new COMObject;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_pointer_to_ref_assignment2()
+ {
+ sal::systools::COMReference<IUnknown> r = comObjectSource();
+ r = new COMObject;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_source_sink()
+ {
+ CPPUNIT_ASSERT_MESSAGE("Wrong reference count, 0 is expected", comObjectSink(comObjectSource(), 0));
+ }
+
+ void test_address_operator()
+ {
+ sal::systools::COMReference<IUnknown> r;
+ comObjectSource2(reinterpret_cast<LPVOID*>(&r));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count, 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_address_operator2()
+ {
+ sal::systools::COMReference<IUnknown> r1 = comObjectSource();
+ sal::systools::COMReference<IUnknown> r2 = r1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 2 is expected", ULONG(2), reinterpret_cast<COMObject*>(r2.get())->GetRefCount());
+ comObjectSource2(reinterpret_cast<LPVOID*>(&r1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r1.get())->GetRefCount());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r2.get())->GetRefCount());
+ }
+
+ void test_clear()
+ {
+ sal::systools::COMReference<IUnknown> r = comObjectSource();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ r.clear();
+ CPPUNIT_ASSERT_MESSAGE("Expect reference to be empty", !r.is());
+ }
+
+ void test_query_interface()
+ {
+ sal::systools::COMReference<IUnknown> r1 = comObjectSource();
+ sal::systools::COMReference<IUnknown> r2;
+ CPPUNIT_ASSERT_NO_THROW_MESSAGE(
+ "Exception should not have been thrown",
+ r2 = r1.QueryInterface<IUnknown>(sal::systools::COM_QUERY_THROW));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count, 2 is expected", ULONG(2),
+ reinterpret_cast<COMObject*>(r2.get())->GetRefCount());
+ }
+
+ void test_query_interface_throw()
+ {
+ sal::systools::COMReference<IUnknown> r1 = comObjectSource();
+ CPPUNIT_ASSERT_THROW_MESSAGE("Exception should have been thrown",
+ auto r2 = r1.QueryInterface<IPersistFile>(sal::systools::COM_QUERY_THROW),
+ sal::systools::ComError);
+ }
+
+ void test_CoCreateInstance()
+ {
+ if (FAILED(CoInitialize(nullptr)))
+ return;
+ {
+ // Use scope to destroy the reference before calling CoUninitialize
+ sal::systools::COMReference<IFileOpenDialog> r;
+ CPPUNIT_ASSERT_NO_THROW(r.CoCreateInstance(__uuidof(FileOpenDialog)));
+ // Immediately after CoCreateInstance, refcount must be 1; increasing once gives 2
+ CPPUNIT_ASSERT_EQUAL(ULONG(2), r->AddRef());
+ r->Release();
+ }
+ CoUninitialize();
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(test_COMReference);
+ CPPUNIT_TEST(default_ctor);
+ CPPUNIT_TEST(test_ctor_manual_AddRef);
+ CPPUNIT_TEST(test_copy_ctor);
+ CPPUNIT_TEST(test_copy_assignment);
+ CPPUNIT_TEST(test_ref_to_ref_assignment);
+ CPPUNIT_TEST(test_pointer_to_ref_assignment);
+ CPPUNIT_TEST(test_pointer_to_ref_assignment2);
+ CPPUNIT_TEST(test_source_sink);
+ CPPUNIT_TEST(test_address_operator);
+ CPPUNIT_TEST(test_address_operator2);
+ CPPUNIT_TEST(test_clear);
+ CPPUNIT_TEST(test_query_interface);
+ CPPUNIT_TEST(test_query_interface_throw);
+ CPPUNIT_TEST(test_CoCreateInstance);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test_comtools::test_COMReference);
+
+} // namespace rtl_OUString
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/systools/test_retry_if_failed.cxx b/sal/qa/systools/test_retry_if_failed.cxx
new file mode 100644
index 000000000..a218b3e9f
--- /dev/null
+++ b/sal/qa/systools/test_retry_if_failed.cxx
@@ -0,0 +1,78 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <systools/win32/retry_if_failed.hxx>
+
+namespace test_systools
+{
+constexpr int ClockRes = 15; // default interval between system clock ticks is ~15 ms on x86
+
+class test_retry_if_failed : public CppUnit::TestFixture
+{
+public:
+ void test_success()
+ {
+ unsigned counter = 0;
+ const DWORD nTicksBefore = GetTickCount();
+ HRESULT hr = sal::systools::RetryIfFailed(10, 200, Tester(5, counter));
+ const DWORD nTicksAfter = GetTickCount();
+ const DWORD nTicksElapsed = nTicksAfter > nTicksBefore ? nTicksAfter - nTicksBefore
+ : std::numeric_limits<DWORD>::max()
+ - nTicksBefore + nTicksAfter;
+ CPPUNIT_ASSERT(SUCCEEDED(hr));
+ // 5 attempts, 4 sleeps by ~200 ms
+ CPPUNIT_ASSERT_EQUAL(5U, counter);
+ CPPUNIT_ASSERT_GREATER(DWORD(800 - ClockRes), nTicksElapsed);
+ }
+
+ void test_failure()
+ {
+ unsigned counter = 0;
+ const DWORD nTicksBefore = GetTickCount();
+ HRESULT hr = sal::systools::RetryIfFailed(10, 100, Tester(15, counter));
+ const DWORD nTicksAfter = GetTickCount();
+ const DWORD nTicksElapsed = nTicksAfter > nTicksBefore ? nTicksAfter - nTicksBefore
+ : std::numeric_limits<DWORD>::max()
+ - nTicksBefore + nTicksAfter;
+ CPPUNIT_ASSERT(FAILED(hr));
+ // 1 + 10 attempts, 10 sleeps by ~100 ms
+ CPPUNIT_ASSERT_EQUAL(11U, counter);
+ CPPUNIT_ASSERT_GREATER(DWORD(1000 - ClockRes), nTicksElapsed);
+ }
+
+ CPPUNIT_TEST_SUITE(test_retry_if_failed);
+ CPPUNIT_TEST(test_success);
+ CPPUNIT_TEST(test_failure);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ struct Tester
+ {
+ Tester(unsigned triesBeforeSuccess, unsigned& counter)
+ : m_nTriesBeforeSuccess(triesBeforeSuccess)
+ , m_rCounter(counter)
+ {
+ }
+
+ HRESULT operator()() { return ++m_rCounter >= m_nTriesBeforeSuccess ? S_OK : E_FAIL; }
+
+ unsigned m_nTriesBeforeSuccess;
+ unsigned& m_rCounter;
+ };
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test_systools::test_retry_if_failed);
+
+} // namespace test_systools
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/rtl/alloc_arena.cxx b/sal/rtl/alloc_arena.cxx
new file mode 100644
index 000000000..f126efdab
--- /dev/null
+++ b/sal/rtl/alloc_arena.cxx
@@ -0,0 +1,1112 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "alloc_arena.hxx"
+
+#include "alloc_impl.hxx"
+#include <rtllifecycle.h>
+#include <sal/macros.h>
+
+#include <cassert>
+#include <string.h>
+#include <stdio.h>
+
+namespace {
+
+/**
+ @internal
+*/
+struct rtl_arena_list_st
+{
+ rtl_memory_lock_type m_lock;
+ rtl_arena_type m_arena_head;
+};
+
+}
+
+static rtl_arena_list_st g_arena_list;
+
+/**
+ provided for arena_type allocations, and hash_table resizing.
+
+ @internal
+*/
+static rtl_arena_type * gp_arena_arena = nullptr;
+
+/**
+ Low level virtual memory (pseudo) arena
+ (platform dependent implementation)
+
+ @internal
+ */
+static rtl_arena_type * gp_machdep_arena = nullptr;
+
+rtl_arena_type * gp_default_arena = nullptr;
+
+namespace
+{
+
+void * rtl_machdep_alloc(
+ rtl_arena_type * pArena,
+ sal_Size * pSize
+);
+
+void rtl_machdep_free(
+ rtl_arena_type * pArena,
+ void * pAddr,
+ sal_Size nSize
+);
+
+sal_Size rtl_machdep_pagesize();
+
+void rtl_arena_segment_constructor(void * obj)
+{
+ rtl_arena_segment_type * segment = static_cast<rtl_arena_segment_type*>(obj);
+
+ QUEUE_START_NAMED(segment, s);
+ QUEUE_START_NAMED(segment, f);
+}
+
+void rtl_arena_segment_destructor(void * obj)
+{
+ rtl_arena_segment_type * segment = static_cast< rtl_arena_segment_type * >(
+ obj);
+ assert(QUEUE_STARTED_NAMED(segment, s));
+ assert(QUEUE_STARTED_NAMED(segment, f));
+ (void) segment; // avoid warnings
+}
+
+/**
+ @precond arena->m_lock acquired.
+ */
+bool rtl_arena_segment_populate(rtl_arena_type * arena)
+{
+ rtl_arena_segment_type *span;
+ sal_Size size = rtl_machdep_pagesize();
+
+ span = static_cast< rtl_arena_segment_type * >(
+ rtl_machdep_alloc(gp_machdep_arena, &size));
+ if (span)
+ {
+ rtl_arena_segment_type *first, *last, *head;
+ sal_Size count = size / sizeof(rtl_arena_segment_type);
+
+ /* insert onto reserve span list */
+ QUEUE_INSERT_TAIL_NAMED(&(arena->m_segment_reserve_span_head), span, s);
+ QUEUE_START_NAMED(span, f);
+ span->m_addr = reinterpret_cast<sal_uIntPtr>(span);
+ span->m_size = size;
+ span->m_type = RTL_ARENA_SEGMENT_TYPE_SPAN;
+
+ /* insert onto reserve list */
+ head = &(arena->m_segment_reserve_head);
+ for (first = span + 1, last = span + count; first < last; ++first)
+ {
+ QUEUE_INSERT_TAIL_NAMED(head, first, s);
+ QUEUE_START_NAMED(first, f);
+ first->m_addr = 0;
+ first->m_size = 0;
+ first->m_type = 0;
+ }
+ }
+ return (span != nullptr);
+}
+
+/**
+ @precond arena->m_lock acquired.
+ @precond (*ppSegment == 0)
+*/
+void rtl_arena_segment_get(
+ rtl_arena_type * arena,
+ rtl_arena_segment_type ** ppSegment
+)
+{
+ rtl_arena_segment_type * head;
+
+ assert(!*ppSegment);
+
+ head = &(arena->m_segment_reserve_head);
+ if (head->m_snext != head || rtl_arena_segment_populate (arena))
+ {
+ (*ppSegment) = head->m_snext;
+ QUEUE_REMOVE_NAMED(*ppSegment, s);
+ }
+}
+
+/**
+ @precond arena->m_lock acquired.
+ @postcond (*ppSegment == 0)
+ */
+void rtl_arena_segment_put(
+ rtl_arena_type * arena,
+ rtl_arena_segment_type ** ppSegment
+)
+{
+ rtl_arena_segment_type * head;
+
+ assert(QUEUE_STARTED_NAMED(*ppSegment, s));
+ assert(QUEUE_STARTED_NAMED(*ppSegment, f));
+
+ (*ppSegment)->m_addr = 0;
+ (*ppSegment)->m_size = 0;
+
+ assert((*ppSegment)->m_type != RTL_ARENA_SEGMENT_TYPE_HEAD);
+ (*ppSegment)->m_type = 0;
+
+ /* keep as reserve */
+ head = &(arena->m_segment_reserve_head);
+ QUEUE_INSERT_HEAD_NAMED(head, (*ppSegment), s);
+
+ /* clear */
+ (*ppSegment) = nullptr;
+}
+
+/**
+ @precond arena->m_lock acquired.
+*/
+void rtl_arena_freelist_insert (
+ rtl_arena_type * arena,
+ rtl_arena_segment_type * segment
+)
+{
+ rtl_arena_segment_type * head;
+ const auto bit = highbit(segment->m_size);
+ assert(bit > 0);
+ head = &(arena->m_freelist_head[bit - 1]);
+ QUEUE_INSERT_TAIL_NAMED(head, segment, f);
+
+ arena->m_freelist_bitmap |= head->m_size;
+}
+
+/**
+ @precond arena->m_lock acquired.
+*/
+void rtl_arena_freelist_remove(
+ rtl_arena_type * arena,
+ rtl_arena_segment_type * segment
+)
+{
+ if (segment->m_fnext->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD &&
+ segment->m_fprev->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD)
+ {
+ rtl_arena_segment_type * head;
+
+ head = segment->m_fprev;
+ assert(arena->m_freelist_bitmap & head->m_size);
+ arena->m_freelist_bitmap ^= head->m_size;
+ }
+ QUEUE_REMOVE_NAMED(segment, f);
+}
+
+#define RTL_ARENA_HASH_INDEX_IMPL(a, s, q, m) \
+ ((((a) + ((a) >> (s)) + ((a) >> ((s) << 1))) >> (q)) & (m))
+
+#define RTL_ARENA_HASH_INDEX(arena, addr) \
+ RTL_ARENA_HASH_INDEX_IMPL((addr), (arena)->m_hash_shift, (arena)->m_quantum_shift, ((arena)->m_hash_size - 1))
+
+/**
+ @precond arena->m_lock released.
+*/
+void rtl_arena_hash_rescale(
+ rtl_arena_type * arena,
+ sal_Size new_size
+)
+{
+ assert(new_size != 0);
+
+ rtl_arena_segment_type ** new_table;
+ sal_Size new_bytes;
+
+ new_bytes = new_size * sizeof(rtl_arena_segment_type*);
+ new_table = static_cast<rtl_arena_segment_type **>(rtl_arena_alloc (gp_arena_arena, &new_bytes));
+
+ if (new_table)
+ {
+ rtl_arena_segment_type ** old_table;
+ sal_Size old_size, i;
+
+ memset (new_table, 0, new_bytes);
+
+ RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock));
+
+ old_table = arena->m_hash_table;
+ old_size = arena->m_hash_size;
+
+ arena->m_hash_table = new_table;
+ arena->m_hash_size = new_size;
+ arena->m_hash_shift = highbit(arena->m_hash_size) - 1;
+
+ for (i = 0; i < old_size; i++)
+ {
+ rtl_arena_segment_type * curr = old_table[i];
+ while (curr)
+ {
+ rtl_arena_segment_type * next = curr->m_fnext;
+ rtl_arena_segment_type ** head;
+
+ // coverity[negative_shift] - bogus
+ head = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, curr->m_addr)]);
+ curr->m_fnext = (*head);
+ (*head) = curr;
+
+ curr = next;
+ }
+ old_table[i] = nullptr;
+ }
+
+ RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock));
+
+ if (old_table != arena->m_hash_table_0)
+ {
+ sal_Size old_bytes = old_size * sizeof(rtl_arena_segment_type*);
+ rtl_arena_free (gp_arena_arena, old_table, old_bytes);
+ }
+ }
+}
+
+/**
+ Insert arena hash, and update stats.
+*/
+void rtl_arena_hash_insert(
+ rtl_arena_type * arena,
+ rtl_arena_segment_type * segment
+)
+{
+ rtl_arena_segment_type ** ppSegment;
+
+ ppSegment = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, segment->m_addr)]);
+
+ segment->m_fnext = (*ppSegment);
+ (*ppSegment) = segment;
+
+ arena->m_stats.m_alloc += 1;
+ arena->m_stats.m_mem_alloc += segment->m_size;
+}
+
+/**
+ Remove arena hash, and update stats.
+*/
+rtl_arena_segment_type * rtl_arena_hash_remove(
+ rtl_arena_type * arena,
+ sal_uIntPtr addr,
+ sal_Size size
+)
+{
+ rtl_arena_segment_type *segment, **segpp;
+ sal_Size lookups = 0;
+
+ segpp = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, addr)]);
+ while ((segment = *segpp))
+ {
+ if (segment->m_addr == addr)
+ {
+ *segpp = segment->m_fnext;
+ segment->m_fnext = segment->m_fprev = segment;
+ break;
+ }
+
+ /* update lookup miss stats */
+ lookups += 1;
+ segpp = &(segment->m_fnext);
+ }
+
+ assert(segment); // bad free
+ if (segment)
+ {
+ assert(segment->m_size == size);
+ (void) size; // avoid warnings
+
+ arena->m_stats.m_free += 1;
+ arena->m_stats.m_mem_alloc -= segment->m_size;
+
+ if (lookups > 1)
+ {
+ sal_Size nseg = static_cast<sal_Size>(arena->m_stats.m_alloc - arena->m_stats.m_free);
+ if (nseg > 4 * arena->m_hash_size)
+ {
+ if (!(arena->m_flags & RTL_ARENA_FLAG_RESCALE))
+ {
+ sal_Size ave = nseg >> arena->m_hash_shift;
+ assert(ave != 0);
+ sal_Size new_size = arena->m_hash_size << (highbit(ave) - 1);
+
+ arena->m_flags |= RTL_ARENA_FLAG_RESCALE;
+ RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock));
+ rtl_arena_hash_rescale (arena, new_size);
+ RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock));
+ arena->m_flags &= ~RTL_ARENA_FLAG_RESCALE;
+ }
+ }
+ }
+ }
+
+ return segment;
+}
+
+/**
+ allocate (and remove) segment from freelist
+
+ @precond arena->m_lock acquired
+ @precond (*ppSegment == 0)
+*/
+bool rtl_arena_segment_alloc(
+ rtl_arena_type * arena,
+ sal_Size size,
+ rtl_arena_segment_type ** ppSegment
+)
+{
+ int index = 0;
+
+ assert(!*ppSegment);
+ if (!RTL_MEMORY_ISP2(size))
+ {
+ unsigned int msb = highbit(size);
+ if (RTL_ARENA_FREELIST_SIZE == msb)
+ {
+ /* highest possible freelist: fall back to first fit */
+ rtl_arena_segment_type *head, *segment;
+
+ head = &(arena->m_freelist_head[msb - 1]);
+ for (segment = head->m_fnext; segment != head; segment = segment->m_fnext)
+ {
+ if (segment->m_size >= size)
+ {
+ /* allocate first fit segment */
+ (*ppSegment) = segment;
+ break;
+ }
+ }
+ goto dequeue_and_leave;
+ }
+
+ /* roundup to next power of 2 */
+ size = ((sal_Size(1)) << msb);
+ }
+
+ index = lowbit(RTL_MEMORY_P2ALIGN(arena->m_freelist_bitmap, size));
+ if (index > 0)
+ {
+ /* instant fit: allocate first free segment */
+ rtl_arena_segment_type *head;
+
+ head = &(arena->m_freelist_head[index - 1]);
+ (*ppSegment) = head->m_fnext;
+ assert((*ppSegment) != head);
+ }
+
+dequeue_and_leave:
+ if (*ppSegment)
+ {
+ /* remove from freelist */
+ rtl_arena_freelist_remove (arena, (*ppSegment));
+ }
+ return (*ppSegment != nullptr);
+}
+
+/**
+ import new (span) segment from source arena
+
+ @precond arena->m_lock acquired
+ @precond (*ppSegment == 0)
+*/
+bool rtl_arena_segment_create(
+ rtl_arena_type * arena,
+ sal_Size size,
+ rtl_arena_segment_type ** ppSegment
+)
+{
+ assert(!*ppSegment);
+ if (arena->m_source_alloc)
+ {
+ rtl_arena_segment_get (arena, ppSegment);
+ if (*ppSegment)
+ {
+ rtl_arena_segment_type * span = nullptr;
+ rtl_arena_segment_get (arena, &span);
+ if (span)
+ {
+ /* import new span from source arena */
+ RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock));
+
+ span->m_size = size;
+ span->m_addr = reinterpret_cast<sal_uIntPtr>(
+ (arena->m_source_alloc)(
+ arena->m_source_arena, &(span->m_size)));
+
+ RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock));
+ if (span->m_addr != 0)
+ {
+ /* insert onto segment list, update stats */
+ span->m_type = RTL_ARENA_SEGMENT_TYPE_SPAN;
+ QUEUE_INSERT_HEAD_NAMED(&(arena->m_segment_head), span, s);
+ arena->m_stats.m_mem_total += span->m_size;
+
+ (*ppSegment)->m_addr = span->m_addr;
+ (*ppSegment)->m_size = span->m_size;
+ (*ppSegment)->m_type = RTL_ARENA_SEGMENT_TYPE_FREE;
+ QUEUE_INSERT_HEAD_NAMED(span, (*ppSegment), s);
+
+ /* report success */
+ return true;
+ }
+ rtl_arena_segment_put (arena, &span);
+ }
+ rtl_arena_segment_put (arena, ppSegment);
+ }
+ }
+ return false; // failure
+}
+
+/**
+ mark as free and join with adjacent free segment(s)
+
+ @precond arena->m_lock acquired
+ @precond segment marked 'used'
+*/
+void rtl_arena_segment_coalesce(
+ rtl_arena_type * arena,
+ rtl_arena_segment_type * segment
+)
+{
+ rtl_arena_segment_type *next, *prev;
+
+ /* mark segment free */
+ assert(segment->m_type == RTL_ARENA_SEGMENT_TYPE_USED);
+ segment->m_type = RTL_ARENA_SEGMENT_TYPE_FREE;
+
+ /* try to merge w/ next segment */
+ next = segment->m_snext;
+ if (next->m_type == RTL_ARENA_SEGMENT_TYPE_FREE)
+ {
+ assert(segment->m_addr + segment->m_size == next->m_addr);
+ segment->m_size += next->m_size;
+
+ /* remove from freelist */
+ rtl_arena_freelist_remove (arena, next);
+
+ /* remove from segment list */
+ QUEUE_REMOVE_NAMED(next, s);
+
+ /* release segment descriptor */
+ rtl_arena_segment_put (arena, &next);
+ }
+
+ /* try to merge w/ prev segment */
+ prev = segment->m_sprev;
+ if (prev->m_type == RTL_ARENA_SEGMENT_TYPE_FREE)
+ {
+ assert(prev->m_addr + prev->m_size == segment->m_addr);
+ segment->m_addr = prev->m_addr;
+ segment->m_size += prev->m_size;
+
+ /* remove from freelist */
+ rtl_arena_freelist_remove (arena, prev);
+
+ /* remove from segment list */
+ QUEUE_REMOVE_NAMED(prev, s);
+
+ /* release segment descriptor */
+ rtl_arena_segment_put (arena, &prev);
+ }
+}
+
+void rtl_arena_constructor(void * obj)
+{
+ rtl_arena_type * arena = static_cast<rtl_arena_type*>(obj);
+ rtl_arena_segment_type * head;
+ size_t i;
+
+ memset (arena, 0, sizeof(rtl_arena_type));
+
+ QUEUE_START_NAMED(arena, arena_);
+
+ RTL_MEMORY_LOCK_INIT(&(arena->m_lock));
+
+ head = &(arena->m_segment_reserve_span_head);
+ rtl_arena_segment_constructor (head);
+ head->m_type = RTL_ARENA_SEGMENT_TYPE_HEAD;
+
+ head = &(arena->m_segment_reserve_head);
+ rtl_arena_segment_constructor (head);
+ head->m_type = RTL_ARENA_SEGMENT_TYPE_HEAD;
+
+ head = &(arena->m_segment_head);
+ rtl_arena_segment_constructor (head);
+ head->m_type = RTL_ARENA_SEGMENT_TYPE_HEAD;
+
+ for (i = 0; i < RTL_ARENA_FREELIST_SIZE; i++)
+ {
+ head = &(arena->m_freelist_head[i]);
+ rtl_arena_segment_constructor (head);
+
+ head->m_size = ((sal_Size(1)) << i);
+ head->m_type = RTL_ARENA_SEGMENT_TYPE_HEAD;
+ }
+
+ arena->m_hash_table = arena->m_hash_table_0;
+ arena->m_hash_size = RTL_ARENA_HASH_SIZE;
+ arena->m_hash_shift = highbit(arena->m_hash_size) - 1;
+}
+
+void rtl_arena_destructor(void * obj)
+{
+ rtl_arena_type * arena = static_cast<rtl_arena_type*>(obj);
+ rtl_arena_segment_type * head;
+ size_t i;
+
+ assert(QUEUE_STARTED_NAMED(arena, arena_));
+
+ RTL_MEMORY_LOCK_DESTROY(&(arena->m_lock));
+
+ head = &(arena->m_segment_reserve_span_head);
+ assert(head->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD);
+ rtl_arena_segment_destructor (head);
+
+ head = &(arena->m_segment_reserve_head);
+ assert(head->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD);
+ rtl_arena_segment_destructor (head);
+
+ head = &(arena->m_segment_head);
+ assert(head->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD);
+ rtl_arena_segment_destructor (head);
+
+ for (i = 0; i < RTL_ARENA_FREELIST_SIZE; i++)
+ {
+ head = &(arena->m_freelist_head[i]);
+
+ assert(head->m_size == ((sal_Size(1)) << i));
+ assert(head->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD);
+
+ rtl_arena_segment_destructor (head);
+ }
+
+ assert(arena->m_hash_table == arena->m_hash_table_0);
+ assert(arena->m_hash_size == RTL_ARENA_HASH_SIZE);
+ assert(arena->m_hash_shift == highbit(arena->m_hash_size) - 1);
+}
+
+rtl_arena_type * rtl_arena_activate(
+ rtl_arena_type * arena,
+ const char * name,
+ sal_Size quantum,
+ rtl_arena_type * source_arena,
+ void * (SAL_CALL * source_alloc)(rtl_arena_type *, sal_Size *),
+ void (SAL_CALL * source_free) (rtl_arena_type *, void *, sal_Size)
+)
+{
+ assert(arena);
+ if (arena)
+ {
+ (void) snprintf (arena->m_name, sizeof(arena->m_name), "%s", name);
+
+ if (!RTL_MEMORY_ISP2(quantum))
+ {
+ /* roundup to next power of 2 */
+ quantum = ((sal_Size(1)) << highbit(quantum));
+ }
+
+ arena->m_quantum = quantum;
+ arena->m_quantum_shift = highbit(arena->m_quantum) - 1;
+
+ arena->m_source_arena = source_arena;
+ arena->m_source_alloc = source_alloc;
+ arena->m_source_free = source_free;
+
+ /* insert into arena list */
+ RTL_MEMORY_LOCK_ACQUIRE(&(g_arena_list.m_lock));
+ QUEUE_INSERT_TAIL_NAMED(&(g_arena_list.m_arena_head), arena, arena_);
+ RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock));
+ }
+ return arena;
+}
+
+void rtl_arena_deactivate(rtl_arena_type * arena)
+{
+ rtl_arena_segment_type * head, * segment;
+
+ /* remove from arena list */
+ RTL_MEMORY_LOCK_ACQUIRE(&(g_arena_list.m_lock));
+ QUEUE_REMOVE_NAMED(arena, arena_);
+ RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock));
+
+ /* check for leaked segments */
+ if (arena->m_stats.m_alloc > arena->m_stats.m_free)
+ {
+ sal_Size i, n;
+
+ /* cleanup still used segment(s) */
+ for (i = 0, n = arena->m_hash_size; i < n; i++)
+ {
+ while ((segment = arena->m_hash_table[i]))
+ {
+ /* pop from hash table */
+ arena->m_hash_table[i] = segment->m_fnext;
+ segment->m_fnext = segment->m_fprev = segment;
+
+ /* coalesce w/ adjacent free segment(s) */
+ rtl_arena_segment_coalesce (arena, segment);
+
+ /* insert onto freelist */
+ rtl_arena_freelist_insert (arena, segment);
+ }
+ }
+ }
+
+ /* cleanup hash table */
+ if (arena->m_hash_table != arena->m_hash_table_0)
+ {
+ rtl_arena_free(
+ gp_arena_arena,
+ arena->m_hash_table,
+ arena->m_hash_size * sizeof(rtl_arena_segment_type*));
+
+ arena->m_hash_table = arena->m_hash_table_0;
+ arena->m_hash_size = RTL_ARENA_HASH_SIZE;
+ arena->m_hash_shift = highbit(arena->m_hash_size) - 1;
+ }
+
+ /* cleanup segment list */
+ head = &(arena->m_segment_head);
+ for (segment = head->m_snext; segment != head; segment = head->m_snext)
+ {
+ if (segment->m_type == RTL_ARENA_SEGMENT_TYPE_FREE)
+ {
+ /* remove from freelist */
+ rtl_arena_freelist_remove (arena, segment);
+ }
+ else
+ {
+ /* can have only free and span segments here */
+ assert(segment->m_type == RTL_ARENA_SEGMENT_TYPE_SPAN);
+ }
+
+ /* remove from segment list */
+ QUEUE_REMOVE_NAMED(segment, s);
+
+ /* release segment descriptor */
+ rtl_arena_segment_put (arena, &segment);
+ }
+
+ /* cleanup segment reserve list */
+ head = &(arena->m_segment_reserve_head);
+ for (segment = head->m_snext; segment != head; segment = head->m_snext)
+ {
+ /* remove from segment list */
+ QUEUE_REMOVE_NAMED(segment, s);
+ }
+
+ /* cleanup segment reserve span(s) */
+ head = &(arena->m_segment_reserve_span_head);
+ for (segment = head->m_snext; segment != head; segment = head->m_snext)
+ {
+ /* can have only span segments here */
+ assert(segment->m_type == RTL_ARENA_SEGMENT_TYPE_SPAN);
+
+ /* remove from segment list */
+ QUEUE_REMOVE_NAMED(segment, s);
+
+ /* return span to g_machdep_arena */
+ rtl_machdep_free (gp_machdep_arena, reinterpret_cast<void*>(segment->m_addr), segment->m_size);
+ }
+}
+
+} // namespace
+
+rtl_arena_type * SAL_CALL rtl_arena_create(
+ const char * name,
+ sal_Size quantum,
+ sal_Size,
+ rtl_arena_type * source_arena,
+ void * (SAL_CALL * source_alloc)(rtl_arena_type *, sal_Size *),
+ void (SAL_CALL * source_free) (rtl_arena_type *, void *, sal_Size),
+ SAL_UNUSED_PARAMETER int
+) SAL_THROW_EXTERN_C()
+{
+ rtl_arena_type * result = nullptr;
+ sal_Size size = sizeof(rtl_arena_type);
+
+try_alloc:
+ result = static_cast<rtl_arena_type*>(rtl_arena_alloc (gp_arena_arena, &size));
+ if (result)
+ {
+ rtl_arena_type * arena = result;
+ rtl_arena_constructor (arena);
+
+ if (!source_arena)
+ {
+ assert(gp_default_arena);
+ source_arena = gp_default_arena;
+ }
+
+ result = rtl_arena_activate (
+ arena,
+ name,
+ quantum,
+ source_arena,
+ source_alloc,
+ source_free
+ );
+
+ if (!result)
+ {
+ rtl_arena_deactivate (arena);
+ rtl_arena_destructor (arena);
+ rtl_arena_free (gp_arena_arena, arena, size);
+ }
+ }
+ else if (!gp_arena_arena)
+ {
+ ensureArenaSingleton();
+ if (gp_arena_arena)
+ {
+ /* try again */
+ goto try_alloc;
+ }
+ }
+ return result;
+}
+
+void SAL_CALL rtl_arena_destroy(rtl_arena_type * arena) SAL_THROW_EXTERN_C()
+{
+ if (arena)
+ {
+ rtl_arena_deactivate (arena);
+ rtl_arena_destructor (arena);
+ rtl_arena_free (gp_arena_arena, arena, sizeof(rtl_arena_type));
+ }
+}
+
+void * SAL_CALL rtl_arena_alloc(
+ rtl_arena_type * arena,
+ sal_Size * pSize
+) SAL_THROW_EXTERN_C()
+{
+ void * addr = nullptr;
+
+ if (arena && pSize)
+ {
+ sal_Size size;
+
+ size = RTL_MEMORY_ALIGN(*pSize, arena->m_quantum);
+ if (size > 0)
+ {
+ /* allocate from segment list */
+ rtl_arena_segment_type *segment = nullptr;
+
+ RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock));
+ if (rtl_arena_segment_alloc (arena, size, &segment) ||
+ rtl_arena_segment_create(arena, size, &segment) )
+ {
+ /* shrink to fit */
+ sal_Size oversize;
+
+ /* mark segment used */
+ assert(segment->m_type == RTL_ARENA_SEGMENT_TYPE_FREE);
+ segment->m_type = RTL_ARENA_SEGMENT_TYPE_USED;
+
+ /* resize */
+ assert(segment->m_size >= size);
+ oversize = segment->m_size - size;
+ if (oversize >= arena->m_quantum)
+ {
+ rtl_arena_segment_type * remainder = nullptr;
+ rtl_arena_segment_get (arena, &remainder);
+ if (remainder)
+ {
+ segment->m_size = size;
+
+ remainder->m_addr = segment->m_addr + segment->m_size;
+ remainder->m_size = oversize;
+ remainder->m_type = RTL_ARENA_SEGMENT_TYPE_FREE;
+ QUEUE_INSERT_HEAD_NAMED(segment, remainder, s);
+
+ rtl_arena_freelist_insert (arena, remainder);
+ }
+ }
+
+ rtl_arena_hash_insert (arena, segment);
+
+ (*pSize) = segment->m_size;
+ addr = reinterpret_cast<void*>(segment->m_addr);
+ }
+ RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock));
+ }
+ }
+ return addr;
+}
+
+void SAL_CALL rtl_arena_free (
+ rtl_arena_type * arena,
+ void * addr,
+ sal_Size size
+) SAL_THROW_EXTERN_C()
+{
+ if (arena)
+ {
+ size = RTL_MEMORY_ALIGN(size, arena->m_quantum);
+ if (size > 0)
+ {
+ /* free to segment list */
+ rtl_arena_segment_type * segment;
+
+ RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock));
+
+ segment = rtl_arena_hash_remove (arena, reinterpret_cast<sal_uIntPtr>(addr), size);
+ if (segment)
+ {
+ rtl_arena_segment_type *next, *prev;
+
+ /* coalesce w/ adjacent free segment(s) */
+ rtl_arena_segment_coalesce (arena, segment);
+
+ /* determine (new) next and prev segment */
+ next = segment->m_snext;
+ prev = segment->m_sprev;
+
+ /* entire span free when prev is a span, and next is either a span or a list head */
+ if (prev->m_type == RTL_ARENA_SEGMENT_TYPE_SPAN &&
+ ((next->m_type == RTL_ARENA_SEGMENT_TYPE_SPAN) ||
+ (next->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD)))
+ {
+ assert(
+ prev->m_addr == segment->m_addr
+ && prev->m_size == segment->m_size);
+
+ if (arena->m_source_free)
+ {
+ addr = reinterpret_cast<void*>(prev->m_addr);
+ size = prev->m_size;
+
+ /* remove from segment list */
+ QUEUE_REMOVE_NAMED(segment, s);
+
+ /* release segment descriptor */
+ rtl_arena_segment_put (arena, &segment);
+
+ /* remove from segment list */
+ QUEUE_REMOVE_NAMED(prev, s);
+
+ /* release (span) segment descriptor */
+ rtl_arena_segment_put (arena, &prev);
+
+ /* update stats, return span to source arena */
+ arena->m_stats.m_mem_total -= size;
+ RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock));
+
+ (arena->m_source_free)(arena->m_source_arena, addr, size);
+ return;
+ }
+ }
+
+ /* insert onto freelist */
+ rtl_arena_freelist_insert (arena, segment);
+ }
+
+ RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock));
+ }
+ }
+}
+
+void rtl_arena_foreach (rtl_arena_type *arena, ArenaForeachFn foreachFn)
+{
+ /* used segments */
+ for (int i = 0, n = arena->m_hash_size; i < n; i++)
+ {
+ for (rtl_arena_segment_type *segment = arena->m_hash_table[i];
+ segment != nullptr; segment = segment->m_fnext)
+ {
+ foreachFn(reinterpret_cast<void *>(segment->m_addr),
+ segment->m_size);
+ }
+ }
+}
+
+#if defined(SAL_UNX)
+#include <sys/mman.h>
+#elif defined(_WIN32)
+#define MAP_FAILED nullptr
+#endif /* SAL_UNX || _WIN32 */
+
+namespace
+{
+
+void * rtl_machdep_alloc(
+ rtl_arena_type * pArena,
+ sal_Size * pSize
+)
+{
+ void * addr;
+ sal_Size size = *pSize;
+
+ assert(pArena == gp_machdep_arena);
+
+#if defined(__sun) && defined(SPARC)
+ /* see @ mmap(2) man pages */
+ size += (pArena->m_quantum + pArena->m_quantum); /* "red-zone" pages */
+ if (size > (4 << 20))
+ size = RTL_MEMORY_P2ROUNDUP(size, (4 << 20));
+ else if (size > (512 << 10))
+ size = RTL_MEMORY_P2ROUNDUP(size, (512 << 10));
+ else
+ size = RTL_MEMORY_P2ROUNDUP(size, (64 << 10));
+ size -= (pArena->m_quantum + pArena->m_quantum); /* "red-zone" pages */
+#else
+ /* default allocation granularity */
+ if (pArena->m_quantum < (64 << 10))
+ {
+ size = RTL_MEMORY_P2ROUNDUP(size, (64 << 10));
+ }
+ else
+ {
+ size = RTL_MEMORY_P2ROUNDUP(size, pArena->m_quantum);
+ }
+#endif
+
+#if defined(SAL_UNX)
+ addr = mmap (nullptr, static_cast<size_t>(size), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
+#elif defined(_WIN32)
+ addr = VirtualAlloc (nullptr, static_cast<SIZE_T>(size), MEM_COMMIT, PAGE_READWRITE);
+#endif /* (SAL_UNX || _WIN32) */
+
+ if (addr != MAP_FAILED)
+ {
+ pArena->m_stats.m_alloc += 1;
+ pArena->m_stats.m_mem_total += size;
+ pArena->m_stats.m_mem_alloc += size;
+
+ (*pSize) = size;
+ return addr;
+ }
+ return nullptr;
+}
+
+void rtl_machdep_free(
+ rtl_arena_type * pArena,
+ void * pAddr,
+ sal_Size nSize
+)
+{
+ assert(pArena == gp_machdep_arena);
+
+ pArena->m_stats.m_free += 1;
+ pArena->m_stats.m_mem_total -= nSize;
+ pArena->m_stats.m_mem_alloc -= nSize;
+
+#if defined(SAL_UNX)
+ (void) munmap(pAddr, nSize);
+#elif defined(_WIN32)
+ (void) VirtualFree (pAddr, SIZE_T(0), MEM_RELEASE);
+#endif /* (SAL_UNX || _WIN32) */
+}
+
+sal_Size rtl_machdep_pagesize()
+{
+#if defined(SAL_UNX)
+#if defined(FREEBSD) || defined(NETBSD) || defined(DRAGONFLY)
+ return (sal_Size)getpagesize();
+#else /* POSIX */
+ return static_cast<sal_Size>(sysconf(_SC_PAGESIZE));
+#endif /* xBSD || POSIX */
+#elif defined(_WIN32)
+ SYSTEM_INFO info;
+ GetSystemInfo (&info);
+ return static_cast<sal_Size>(info.dwPageSize);
+#endif /* (SAL_UNX || _WIN32) */
+}
+
+} //namespace
+
+void rtl_arena_init()
+{
+ {
+ /* list of arenas */
+ RTL_MEMORY_LOCK_INIT(&(g_arena_list.m_lock));
+ rtl_arena_constructor (&(g_arena_list.m_arena_head));
+ }
+ {
+ /* machdep (pseudo) arena */
+ static rtl_arena_type g_machdep_arena;
+
+ assert(!gp_machdep_arena);
+ rtl_arena_constructor (&g_machdep_arena);
+
+ gp_machdep_arena = rtl_arena_activate (
+ &g_machdep_arena,
+ "rtl_machdep_arena",
+ rtl_machdep_pagesize(),
+ nullptr, nullptr, nullptr /* no source */
+ );
+ assert(gp_machdep_arena);
+ }
+ {
+ /* default arena */
+ static rtl_arena_type g_default_arena;
+
+ assert(!gp_default_arena);
+ rtl_arena_constructor (&g_default_arena);
+
+ gp_default_arena = rtl_arena_activate (
+ &g_default_arena,
+ "rtl_default_arena",
+ rtl_machdep_pagesize(),
+ gp_machdep_arena, /* source */
+ rtl_machdep_alloc,
+ rtl_machdep_free
+ );
+ assert(gp_default_arena);
+ }
+ {
+ /* arena internal arena */
+ static rtl_arena_type g_arena_arena;
+
+ assert(!gp_arena_arena);
+ rtl_arena_constructor (&g_arena_arena);
+
+ gp_arena_arena = rtl_arena_activate(
+ &g_arena_arena,
+ "rtl_arena_internal_arena",
+ 64, /* quantum */
+ gp_default_arena, /* source */
+ rtl_arena_alloc,
+ rtl_arena_free
+ );
+ assert(gp_arena_arena);
+ }
+}
+
+void rtl_arena_fini()
+{
+ if (gp_arena_arena)
+ {
+ rtl_arena_type * arena, * head;
+
+ RTL_MEMORY_LOCK_ACQUIRE(&(g_arena_list.m_lock));
+ head = &(g_arena_list.m_arena_head);
+
+ for (arena = head->m_arena_next; arena != head; arena = arena->m_arena_next)
+ {
+ // noop
+ }
+ RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock));
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/alloc_arena.hxx b/sal/rtl/alloc_arena.hxx
new file mode 100644
index 000000000..7226ef3f1
--- /dev/null
+++ b/sal/rtl/alloc_arena.hxx
@@ -0,0 +1,118 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_RTL_ALLOC_ARENA_HXX
+#define INCLUDED_SAL_RTL_ALLOC_ARENA_HXX
+
+#include <sal/types.h>
+#include <rtl/alloc.h>
+#include "alloc_impl.hxx"
+
+/** rtl_arena_stat_type
+ * @internal
+ */
+struct rtl_arena_stat_type
+{
+ sal_uInt64 m_alloc;
+ sal_uInt64 m_free;
+
+ sal_Size m_mem_total;
+ sal_Size m_mem_alloc;
+};
+
+/** rtl_arena_segment_type
+ * @internal
+ */
+constexpr sal_Size RTL_ARENA_SEGMENT_TYPE_HEAD = 0x01;
+constexpr sal_Size RTL_ARENA_SEGMENT_TYPE_SPAN = 0x02;
+constexpr sal_Size RTL_ARENA_SEGMENT_TYPE_FREE = 0x04;
+constexpr sal_Size RTL_ARENA_SEGMENT_TYPE_USED = 0x08;
+
+struct rtl_arena_segment_type
+{
+ /* segment list linkage */
+ rtl_arena_segment_type * m_snext;
+ rtl_arena_segment_type * m_sprev;
+
+ /* free/used list linkage */
+ rtl_arena_segment_type * m_fnext;
+ rtl_arena_segment_type * m_fprev;
+
+ /* segment description */
+ sal_uIntPtr m_addr;
+ sal_Size m_size;
+ sal_Size m_type;
+};
+
+/** rtl_arena_type
+ * @internal
+ */
+constexpr auto RTL_ARENA_FREELIST_SIZE = sizeof(void*) * 8;
+constexpr auto RTL_ARENA_HASH_SIZE = 64;
+
+constexpr auto RTL_ARENA_FLAG_RESCALE = 1; /* within hash rescale operation */
+
+struct rtl_arena_st
+{
+ /* linkage */
+ rtl_arena_type * m_arena_next;
+ rtl_arena_type * m_arena_prev;
+
+ /* properties */
+ char m_name[RTL_ARENA_NAME_LENGTH + 1];
+ long m_flags;
+
+ rtl_memory_lock_type m_lock;
+ rtl_arena_stat_type m_stats;
+
+ rtl_arena_type * m_source_arena;
+ void * (SAL_CALL * m_source_alloc)(rtl_arena_type *, sal_Size *);
+ void (SAL_CALL * m_source_free) (rtl_arena_type *, void *, sal_Size);
+
+ sal_Size m_quantum;
+ sal_Size m_quantum_shift; /* log2(m_quantum) */
+
+ rtl_arena_segment_type m_segment_reserve_span_head;
+ rtl_arena_segment_type m_segment_reserve_head;
+
+ rtl_arena_segment_type m_segment_head;
+
+ rtl_arena_segment_type m_freelist_head[RTL_ARENA_FREELIST_SIZE];
+ sal_Size m_freelist_bitmap;
+
+ rtl_arena_segment_type ** m_hash_table;
+ rtl_arena_segment_type * m_hash_table_0[RTL_ARENA_HASH_SIZE];
+ sal_Size m_hash_size; /* m_hash_mask + 1 */
+ sal_Size m_hash_shift; /* log2(m_hash_size) */
+};
+
+/** gp_default_arena
+ * default arena with pagesize quantum
+ *
+ * @internal
+ */
+extern rtl_arena_type * gp_default_arena;
+
+typedef void (*ArenaForeachFn)(void *addr, sal_Size size);
+
+void rtl_arena_foreach(rtl_arena_type *arena, ArenaForeachFn fn);
+
+#endif // INCLUDED_SAL_RTL_ALLOC_ARENA_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/alloc_cache.cxx b/sal/rtl/alloc_cache.cxx
new file mode 100644
index 000000000..1f165cca1
--- /dev/null
+++ b/sal/rtl/alloc_cache.cxx
@@ -0,0 +1,225 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "alloc_cache.hxx"
+#include "alloc_impl.hxx"
+#include "alloc_arena.hxx"
+#include <rtllifecycle.h>
+
+#include <cassert>
+#include <cstdlib>
+#include <string.h>
+#include <stdio.h>
+
+/**
+ provided for cache_type allocations, and hash_table resizing.
+
+ @internal
+*/
+static rtl_arena_type * gp_cache_arena = nullptr;
+
+namespace
+{
+
+rtl_cache_type * rtl_cache_activate(
+ rtl_cache_type * cache,
+ const char * name,
+ size_t objsize,
+ size_t objalign,
+ int (SAL_CALL * constructor)(void * obj, void * userarg),
+ void (SAL_CALL * destructor) (void * obj, void * userarg),
+ void * userarg
+)
+{
+ assert(cache);
+
+ snprintf (cache->m_name, sizeof(cache->m_name), "%s", name);
+
+ if (objalign == 0)
+ {
+ /* determine default alignment */
+ if (objsize >= RTL_MEMORY_ALIGNMENT_8)
+ objalign = RTL_MEMORY_ALIGNMENT_8;
+ else
+ objalign = RTL_MEMORY_ALIGNMENT_4;
+ }
+ else
+ {
+ /* ensure minimum alignment */
+ if(objalign < RTL_MEMORY_ALIGNMENT_4)
+ {
+ objalign = RTL_MEMORY_ALIGNMENT_4;
+ }
+ }
+ assert(RTL_MEMORY_ISP2(objalign));
+
+ cache->m_type_size = RTL_MEMORY_P2ROUNDUP(objsize, objalign);
+
+ cache->m_constructor = constructor;
+ cache->m_destructor = destructor;
+ cache->m_userarg = userarg;
+
+ return cache;
+}
+
+} //namespace
+
+rtl_cache_type * SAL_CALL rtl_cache_create(
+ const char * name,
+ sal_Size objsize,
+ sal_Size objalign,
+ int (SAL_CALL * constructor)(void * obj, void * userarg),
+ void (SAL_CALL * destructor) (void * obj, void * userarg),
+ void (SAL_CALL * /*reclaim*/) (void * userarg),
+ void * userarg,
+ rtl_arena_type *,
+ int
+) SAL_THROW_EXTERN_C()
+{
+ rtl_cache_type * result = nullptr;
+ sal_Size size = sizeof(rtl_cache_type);
+
+try_alloc:
+ result = static_cast<rtl_cache_type*>(rtl_arena_alloc (gp_cache_arena, &size));
+ if (result)
+ {
+ rtl_cache_type * cache = result;
+ memset (cache, 0, sizeof(rtl_cache_type));
+
+ result = rtl_cache_activate (
+ cache,
+ name,
+ objsize,
+ objalign,
+ constructor,
+ destructor,
+ userarg
+ );
+
+ if (!result)
+ {
+ /* activation failed */
+ rtl_arena_free (gp_cache_arena, cache, size);
+ }
+ }
+ else if (!gp_cache_arena)
+ {
+ ensureCacheSingleton();
+ if (gp_cache_arena)
+ {
+ /* try again */
+ goto try_alloc;
+ }
+ }
+ return result;
+}
+
+void SAL_CALL rtl_cache_destroy(rtl_cache_type * cache) SAL_THROW_EXTERN_C()
+{
+ if (cache)
+ {
+ rtl_arena_free (gp_cache_arena, cache, sizeof(rtl_cache_type));
+ }
+}
+
+void * SAL_CALL rtl_cache_alloc(rtl_cache_type * cache) SAL_THROW_EXTERN_C()
+{
+ void * obj = nullptr;
+
+ if (!cache)
+ return nullptr;
+
+ obj = std::malloc(cache->m_type_size);
+ if (obj && cache->m_constructor)
+ {
+ if (!(cache->m_constructor)(obj, cache->m_userarg))
+ {
+ /* construction failure */
+ std::free(obj);
+ obj = nullptr;
+ }
+ }
+ return obj;
+}
+
+void SAL_CALL rtl_cache_free(
+ rtl_cache_type * cache,
+ void * obj
+) SAL_THROW_EXTERN_C()
+{
+ if (obj && cache)
+ {
+ if (cache->m_destructor)
+ {
+ /* destruct object */
+ (cache->m_destructor)(obj, cache->m_userarg);
+ }
+ std::free(obj);
+ }
+}
+
+#if defined(SAL_UNX)
+
+void SAL_CALL rtl_secureZeroMemory(void *Ptr, sal_Size Bytes) SAL_THROW_EXTERN_C()
+{
+ //currently glibc doesn't implement memset_s
+ volatile char *p = static_cast<volatile char*>(Ptr);
+ while (Bytes--)
+ *p++ = 0;
+}
+
+#elif defined(_WIN32)
+
+void SAL_CALL rtl_secureZeroMemory(void *Ptr, sal_Size Bytes) SAL_THROW_EXTERN_C()
+{
+ RtlSecureZeroMemory(Ptr, Bytes);
+}
+
+#endif /* SAL_UNX || _WIN32 */
+
+void rtl_cache_init()
+{
+ /* cache: internal arena */
+ assert(!gp_cache_arena);
+
+ gp_cache_arena = rtl_arena_create (
+ "rtl_cache_internal_arena",
+ 64, /* quantum */
+ 0, /* no quantum caching */
+ nullptr, /* default source */
+ rtl_arena_alloc,
+ rtl_arena_free,
+ 0 /* flags */
+ );
+ assert(gp_cache_arena);
+
+ /* check 'gp_default_arena' initialization */
+ assert(gp_default_arena);
+}
+
+void rtl_cache_fini()
+{
+ if (gp_cache_arena)
+ {
+ rtl_arena_destroy (gp_cache_arena);
+ gp_cache_arena = nullptr;
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/alloc_cache.hxx b/sal/rtl/alloc_cache.hxx
new file mode 100644
index 000000000..501d5770b
--- /dev/null
+++ b/sal/rtl/alloc_cache.hxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_RTL_ALLOC_CACHE_HXX
+#define INCLUDED_SAL_RTL_ALLOC_CACHE_HXX
+
+#include <sal/types.h>
+#include <rtl/alloc.h>
+
+struct rtl_cache_st
+{
+ /* properties */
+ char m_name[RTL_CACHE_NAME_LENGTH + 1];
+
+ sal_Size m_type_size; /* const */
+
+ int (SAL_CALL * m_constructor)(void * obj, void * userarg); /* const */
+ void (SAL_CALL * m_destructor) (void * obj, void * userarg); /* const */
+ void * m_userarg;
+};
+
+#endif // INCLUDED_SAL_RTL_ALLOC_CACHE_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/alloc_fini.cxx b/sal/rtl/alloc_fini.cxx
new file mode 100644
index 000000000..ba798452d
--- /dev/null
+++ b/sal/rtl/alloc_fini.cxx
@@ -0,0 +1,97 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <rtllifecycle.h>
+
+namespace
+{
+ struct rtlCacheSingleton
+ {
+ rtlCacheSingleton()
+ {
+ rtl_cache_init();
+ }
+ ~rtlCacheSingleton()
+ {
+ rtl_cache_fini();
+ }
+ };
+ rtlCacheSingleton& theCacheSingleton()
+ {
+ static rtlCacheSingleton SINGLETON;
+ return SINGLETON;
+ }
+}
+
+void ensureCacheSingleton()
+{
+ theCacheSingleton();
+}
+
+namespace
+{
+ struct rtlArenaSingleton
+ {
+ rtlArenaSingleton()
+ {
+ rtl_arena_init();
+ }
+ ~rtlArenaSingleton()
+ {
+ rtl_arena_fini();
+ }
+ };
+ rtlArenaSingleton& theArenaSingleton()
+ {
+ static rtlArenaSingleton SINGLETON;
+ return SINGLETON;
+ }
+}
+
+void ensureArenaSingleton()
+{
+ theArenaSingleton();
+}
+
+namespace
+{
+ struct rtlLocaleSingleton
+ {
+ rtlLocaleSingleton()
+ {
+ rtl_locale_init();
+ }
+ ~rtlLocaleSingleton()
+ {
+ rtl_locale_fini();
+ }
+ };
+ rtlLocaleSingleton& theLocaleSingleton()
+ {
+ static rtlLocaleSingleton SINGLETON;
+ return SINGLETON;
+ }
+}
+
+void ensureLocaleSingleton()
+{
+ theLocaleSingleton();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/alloc_global.cxx b/sal/rtl/alloc_global.cxx
new file mode 100644
index 000000000..4b7ec6037
--- /dev/null
+++ b/sal/rtl/alloc_global.cxx
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "alloc_impl.hxx"
+#include <rtl/alloc.h>
+#include <sal/log.hxx>
+#include <sal/macros.h>
+
+#include <algorithm>
+#include <cassert>
+#include <string.h>
+#include <stdio.h>
+
+#include <rtllifecycle.h>
+#include <oslmemory.h>
+
+void* SAL_CALL rtl_allocateMemory(sal_Size n) SAL_THROW_EXTERN_C()
+{
+ SAL_WARN_IF(
+ n >= SAL_MAX_INT32, "sal.rtl",
+ "suspicious massive alloc " << n);
+ return malloc (n);
+}
+
+void* SAL_CALL rtl_reallocateMemory(void * p, sal_Size n) SAL_THROW_EXTERN_C()
+{
+ SAL_WARN_IF(
+ n >= SAL_MAX_INT32, "sal.rtl",
+ "suspicious massive alloc " << n);
+ return realloc (p, n);
+}
+
+void SAL_CALL rtl_freeMemory(void * p) SAL_THROW_EXTERN_C()
+{
+ free (p);
+}
+
+void * SAL_CALL rtl_allocateZeroMemory(sal_Size n) SAL_THROW_EXTERN_C()
+{
+ SAL_WARN_IF( n >= SAL_MAX_INT32, "sal.rtl", "suspicious massive alloc " << n);
+ return calloc(n, 1);
+}
+
+void SAL_CALL rtl_freeZeroMemory(void * p, sal_Size n) SAL_THROW_EXTERN_C()
+{
+ if (p)
+ {
+ rtl_secureZeroMemory (p, n);
+ rtl_freeMemory (p);
+ }
+}
+
+void* SAL_CALL rtl_allocateAlignedMemory(sal_Size Alignment, sal_Size Bytes) SAL_THROW_EXTERN_C()
+{
+ return osl_aligned_alloc(Alignment, Bytes);
+}
+
+void SAL_CALL rtl_freeAlignedMemory(void* Ptr) SAL_THROW_EXTERN_C()
+{
+ osl_aligned_free(Ptr);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/alloc_impl.hxx b/sal/rtl/alloc_impl.hxx
new file mode 100644
index 000000000..29c24cc99
--- /dev/null
+++ b/sal/rtl/alloc_impl.hxx
@@ -0,0 +1,219 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_RTL_ALLOC_IMPL_HXX
+#define INCLUDED_SAL_RTL_ALLOC_IMPL_HXX
+
+#include <sal/types.h>
+
+/** Alignment macros
+ */
+#if SAL_TYPES_ALIGNMENT4 > 1
+#define RTL_MEMORY_ALIGNMENT_4 SAL_TYPES_ALIGNMENT4
+#else
+#define RTL_MEMORY_ALIGNMENT_4 sizeof(int)
+#endif /* SAL_TYPES_ALIGNMENT4 */
+
+#if SAL_TYPES_ALIGNMENT8 > 1
+#define RTL_MEMORY_ALIGNMENT_8 SAL_TYPES_ALIGNMENT8
+#else
+#define RTL_MEMORY_ALIGNMENT_8 sizeof(void*)
+#endif /* SAL_TYPES_ALIGNMENT8 */
+
+#if 0 /* @@@ */
+#define RTL_MEMORY_ALIGNMENT_1 8
+#define RTL_MEMORY_ALIGNMENT_2 (sizeof(void*) * 2)
+#endif /* @@@ */
+
+#define RTL_MEMORY_ALIGN(value, align) (((value) + ((align) - 1)) & ~((align) - 1))
+
+#define RTL_MEMORY_ISP2(value) (((value) & ((value) - 1)) == 0)
+#define RTL_MEMORY_P2ALIGN(value, align) ((value) & -static_cast<sal_IntPtr>(align))
+
+#define RTL_MEMORY_P2ROUNDUP(value, align) \
+ (-(-static_cast<sal_IntPtr>(value) & -static_cast<sal_IntPtr>(align)))
+#define RTL_MEMORY_P2END(value, align) \
+ (-(~static_cast<sal_IntPtr>(value) & -static_cast<sal_IntPtr>(align)))
+
+/** highbit(): log2() + 1
+ (complexity O(1))
+*/
+static inline unsigned int highbit(sal_Size n)
+{
+ unsigned int k = 1;
+
+ if (n == 0)
+ return 0;
+ if constexpr (sizeof(n) >= 8)
+ {
+ if (n & 0xffffffff00000000)
+ {
+ k |= 32;
+ n >>= 32;
+ }
+ }
+ if (n & 0xffff0000)
+ {
+ k |= 16;
+ n >>= 16;
+ }
+ if (n & 0xff00)
+ {
+ k |= 8;
+ n >>= 8;
+ }
+ if (n & 0xf0)
+ {
+ k |= 4;
+ n >>= 4;
+ }
+ if (n & 0x0c)
+ {
+ k |= 2;
+ n >>= 2;
+ }
+ if (n & 0x02)
+ k++;
+
+ return k;
+}
+
+/** find first bit set
+ (complexity O(1))
+*/
+static inline unsigned int lowbit(sal_Size n)
+{
+ unsigned int k = 1;
+
+ if (n == 0)
+ return 0;
+
+ if constexpr (sizeof(n) >= 8)
+ {
+ if (!(n & 0xffffffff))
+ {
+ k |= 32;
+ n >>= 32;
+ }
+ }
+
+ if (!(n & 0xffff))
+ {
+ k |= 16;
+ n >>= 16;
+ }
+
+ if (!(n & 0xff))
+ {
+ k |= 8;
+ n >>= 8;
+ }
+
+ if (!(n & 0xf))
+ {
+ k |= 4;
+ n >>= 4;
+ }
+
+ if (!(n & 0x3))
+ {
+ k |= 2;
+ n >>= 2;
+ }
+
+ if (!(n & 0x1))
+ k++;
+
+ return k;
+}
+
+/** Queue manipulation macros
+ (doubly linked circular list)
+ (complexity O(1))
+*/
+#define QUEUE_STARTED_NAMED(entry, name) \
+ (((entry)->m_##name##next == (entry)) && ((entry)->m_##name##prev == (entry)))
+
+#define QUEUE_START_NAMED(entry, name) \
+{ \
+ (entry)->m_##name##next = (entry); \
+ (entry)->m_##name##prev = (entry); \
+}
+
+#define QUEUE_REMOVE_NAMED(entry, name) \
+{ \
+ (entry)->m_##name##prev->m_##name##next = (entry)->m_##name##next; \
+ (entry)->m_##name##next->m_##name##prev = (entry)->m_##name##prev; \
+ QUEUE_START_NAMED(entry, name); \
+}
+
+#define QUEUE_INSERT_HEAD_NAMED(head, entry, name) \
+{ \
+ (entry)->m_##name##prev = (head); \
+ (entry)->m_##name##next = (head)->m_##name##next; \
+ (head)->m_##name##next = (entry); \
+ (entry)->m_##name##next->m_##name##prev = (entry); \
+}
+
+#define QUEUE_INSERT_TAIL_NAMED(head, entry, name) \
+{ \
+ (entry)->m_##name##next = (head); \
+ (entry)->m_##name##prev = (head)->m_##name##prev; \
+ (head)->m_##name##prev = (entry); \
+ (entry)->m_##name##prev->m_##name##next = (entry); \
+}
+
+#if defined(SAL_UNX)
+
+#include <unistd.h>
+#include <pthread.h>
+
+typedef pthread_mutex_t rtl_memory_lock_type;
+
+#define RTL_MEMORY_LOCK_INIT(lock) pthread_mutex_init((lock), nullptr)
+#define RTL_MEMORY_LOCK_DESTROY(lock) pthread_mutex_destroy((lock))
+
+#define RTL_MEMORY_LOCK_ACQUIRE(lock) pthread_mutex_lock((lock))
+#define RTL_MEMORY_LOCK_RELEASE(lock) pthread_mutex_unlock((lock))
+
+#elif defined(_WIN32)
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+typedef CRITICAL_SECTION rtl_memory_lock_type;
+
+#define RTL_MEMORY_LOCK_INIT(lock) InitializeCriticalSection((lock))
+#define RTL_MEMORY_LOCK_DESTROY(lock) DeleteCriticalSection((lock))
+
+#define RTL_MEMORY_LOCK_ACQUIRE(lock) EnterCriticalSection((lock))
+#define RTL_MEMORY_LOCK_RELEASE(lock) LeaveCriticalSection((lock))
+
+#else
+#error Unknown platform
+#endif /* SAL_UNX | _WIN32 */
+
+/** Cache creation flags.
+ @internal
+*/
+#define RTL_CACHE_FLAG_NOMAGAZINE (1 << 13) /* w/o magazine layer */
+
+#endif // INCLUDED_SAL_RTL_ALLOC_IMPL_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/bootstrap.cxx b/sal/rtl/bootstrap.cxx
new file mode 100644
index 000000000..12558d319
--- /dev/null
+++ b/sal/rtl/bootstrap.cxx
@@ -0,0 +1,992 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#include <config_features.h>
+#include <config_folders.h>
+
+#include <rtl/bootstrap.h>
+#include <rtl/bootstrap.hxx>
+#include <osl/diagnose.h>
+#include <osl/module.h>
+#include <osl/process.h>
+#include <osl/file.hxx>
+#include <osl/mutex.hxx>
+#include <osl/profile.hxx>
+#include <osl/security.hxx>
+#include <rtl/alloc.h>
+#include <rtl/string.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/byteseq.hxx>
+#include <rtl/malformeduriexception.hxx>
+#include <rtl/uri.hxx>
+#include <sal/log.hxx>
+#include <o3tl/lru_map.hxx>
+#include <o3tl/string_view.hxx>
+
+#include <utility>
+#include <vector>
+#include <algorithm>
+#include <cstddef>
+#include <string_view>
+#include <unordered_map>
+
+#ifdef ANDROID
+#include <osl/detail/android-bootstrap.h>
+#endif
+
+#ifdef IOS
+#include <premac.h>
+#import <Foundation/Foundation.h>
+#include <postmac.h>
+#endif
+
+using osl::DirectoryItem;
+using osl::FileStatus;
+
+namespace
+{
+
+struct Bootstrap_Impl;
+
+constexpr std::u16string_view VND_SUN_STAR_PATHNAME = u"vnd.sun.star.pathname:";
+
+bool isPathnameUrl(std::u16string_view url)
+{
+ return o3tl::matchIgnoreAsciiCase(url, VND_SUN_STAR_PATHNAME);
+}
+
+bool resolvePathnameUrl(OUString * url)
+{
+ OSL_ASSERT(url);
+ if (!isPathnameUrl(*url) ||
+ (osl::FileBase::getFileURLFromSystemPath(
+ url->copy(VND_SUN_STAR_PATHNAME.size()), *url) ==
+ osl::FileBase::E_None))
+ {
+ return true;
+ }
+ *url = OUString();
+ return false;
+}
+
+enum LookupMode {
+ LOOKUP_MODE_NORMAL, LOOKUP_MODE_URE_BOOTSTRAP,
+ LOOKUP_MODE_URE_BOOTSTRAP_EXPANSION };
+
+struct ExpandRequestLink {
+ ExpandRequestLink const * next;
+ Bootstrap_Impl const * file;
+ OUString key;
+};
+
+OUString expandMacros(
+ Bootstrap_Impl const * file, std::u16string_view text, LookupMode mode,
+ ExpandRequestLink const * requestStack);
+
+OUString recursivelyExpandMacros(
+ Bootstrap_Impl const * file, std::u16string_view text, LookupMode mode,
+ Bootstrap_Impl const * requestFile, OUString const & requestKey,
+ ExpandRequestLink const * requestStack)
+{
+ for (; requestStack; requestStack = requestStack->next) {
+ if (requestStack->file == requestFile &&
+ requestStack->key == requestKey)
+ {
+ return "***RECURSION DETECTED***";
+ }
+ }
+ ExpandRequestLink link = { requestStack, requestFile, requestKey };
+ return expandMacros(file, text, mode, &link);
+}
+
+struct rtl_bootstrap_NameValue
+{
+ OUString sName;
+ OUString sValue;
+
+ rtl_bootstrap_NameValue()
+ {}
+ rtl_bootstrap_NameValue(OUString name, OUString value )
+ : sName(std::move( name )),
+ sValue(std::move( value ))
+ {}
+};
+
+} // end namespace
+
+typedef std::vector<rtl_bootstrap_NameValue> NameValueVector;
+
+static bool find(
+ NameValueVector const & vector, OUString const & key,
+ OUString * value)
+{
+ OSL_ASSERT(value);
+ auto i = std::find_if(vector.begin(), vector.end(),
+ [&key](const rtl_bootstrap_NameValue& rNameValue) { return rNameValue.sName == key; });
+ if (i != vector.end())
+ {
+ *value = i->sValue;
+ return true;
+ }
+ return false;
+}
+
+namespace
+{
+ NameValueVector rtl_bootstrap_set_vector;
+}
+
+static bool getFromCommandLineArgs(
+ OUString const & key, OUString * value )
+{
+ OSL_ASSERT(value);
+
+ static NameValueVector nameValueVector = []()
+ {
+ NameValueVector tmp;
+
+ sal_Int32 nArgCount = osl_getCommandArgCount();
+ for(sal_Int32 i = 0; i < nArgCount; ++ i)
+ {
+ OUString pArg;
+ osl_getCommandArg( i, &pArg.pData );
+ if( (pArg.startsWith("-") || pArg.startsWith("/") ) &&
+ pArg.match("env:", 1) )
+ {
+ sal_Int32 nIndex = pArg.indexOf( '=' );
+
+ if( nIndex >= 0 )
+ {
+ rtl_bootstrap_NameValue nameValue;
+ nameValue.sName = pArg.copy( 5, nIndex - 5 );
+ nameValue.sValue = pArg.copy( nIndex+1 );
+
+ if( i == nArgCount-1 &&
+ nameValue.sValue.getLength() &&
+ nameValue.sValue[nameValue.sValue.getLength()-1] == 13 )
+ {
+ // avoid the 13 linefeed for the last argument,
+ // when the executable is started from a script,
+ // that was edited on windows
+ nameValue.sValue = nameValue.sValue.copy(0,nameValue.sValue.getLength()-1);
+ }
+
+ tmp.push_back( nameValue );
+ }
+ }
+ };
+ return tmp;
+ }();
+
+ return find(nameValueVector, key, value);
+}
+
+static void getExecutableDirectory_Impl(rtl_uString ** ppDirURL)
+{
+ OUString fileName;
+ osl_getExecutableFile(&(fileName.pData));
+
+ sal_Int32 nDirEnd = fileName.lastIndexOf('/');
+ OSL_ENSURE(nDirEnd >= 0, "Cannot locate executable directory");
+
+ rtl_uString_newFromStr_WithLength(ppDirURL,fileName.getStr(),nDirEnd);
+}
+
+static OUString & getIniFileName_Impl()
+{
+ static OUString aStaticName = []() {
+ OUString fileName;
+
+#if defined IOS
+ // On iOS hardcode the inifile as "rc" in the .app
+ // directory. Apps are self-contained anyway, there is no
+ // possibility to have several "applications" in the same
+ // installation location with different inifiles.
+ const char *inifile = [[@"vnd.sun.star.pathname:" stringByAppendingString: [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: @"rc"]] UTF8String];
+ fileName = OUString(inifile, strlen(inifile), RTL_TEXTENCODING_UTF8);
+ resolvePathnameUrl(&fileName);
+#elif defined ANDROID
+ // Apps are self-contained on Android, too, can as well hardcode
+ // it as "rc" in the "/assets" directory, i.e. inside the app's
+ // .apk (zip) archive as the /assets/rc file.
+ fileName = OUString("vnd.sun.star.pathname:/assets/rc");
+ resolvePathnameUrl(&fileName);
+#elif defined(EMSCRIPTEN)
+ fileName = OUString("vnd.sun.star.pathname:/instdir/program/sofficerc");
+ resolvePathnameUrl(&fileName);
+#else
+ if (getFromCommandLineArgs("INIFILENAME", &fileName))
+ {
+ resolvePathnameUrl(&fileName);
+ }
+ else
+ {
+ osl_getExecutableFile(&(fileName.pData));
+
+ // get rid of a potential executable extension
+ OUString progExt = ".bin";
+ if (fileName.getLength() > progExt.getLength()
+ && o3tl::equalsIgnoreAsciiCase(fileName.subView(fileName.getLength() - progExt.getLength()), progExt))
+ {
+ fileName = fileName.copy(0, fileName.getLength() - progExt.getLength());
+ }
+
+ progExt = ".exe";
+ if (fileName.getLength() > progExt.getLength()
+ && o3tl::equalsIgnoreAsciiCase(fileName.subView(fileName.getLength() - progExt.getLength()), progExt))
+ {
+ fileName = fileName.copy(0, fileName.getLength() - progExt.getLength());
+ }
+
+ // append config file suffix
+ fileName += SAL_CONFIGFILE("");
+
+#ifdef MACOSX
+ // We keep only executables in the MacOS folder, and all
+ // rc files in LIBO_ETC_FOLDER (typically "Resources").
+ sal_Int32 off = fileName.lastIndexOf( "/MacOS/" );
+ if (off != -1)
+ fileName = fileName.replaceAt(off + 1, strlen("MacOS"), u"" LIBO_ETC_FOLDER);
+#endif
+ }
+#endif
+
+ return fileName;
+ }();
+
+ return aStaticName;
+}
+
+// ensure the given file url has no final slash
+
+static void EnsureNoFinalSlash (OUString & url)
+{
+ sal_Int32 i = url.getLength();
+
+ if (i > 0 && url[i - 1] == '/')
+ url = url.copy(0, i - 1);
+}
+
+namespace {
+
+struct Bootstrap_Impl
+{
+ sal_Int32 _nRefCount;
+ Bootstrap_Impl * _base_ini;
+
+ NameValueVector _nameValueVector;
+ OUString _iniName;
+
+ explicit Bootstrap_Impl (OUString const & rIniName);
+ ~Bootstrap_Impl();
+
+ static void * operator new (std::size_t n)
+ { return malloc (sal_uInt32(n)); }
+ static void operator delete (void * p , std::size_t)
+ { free (p); }
+
+ bool getValue(
+ OUString const & key, rtl_uString ** value,
+ rtl_uString * defaultValue, LookupMode mode, bool override,
+ ExpandRequestLink const * requestStack) const;
+ bool getDirectValue(
+ OUString const & key, rtl_uString ** value, LookupMode mode,
+ ExpandRequestLink const * requestStack) const;
+ bool getAmbienceValue(
+ OUString const & key, rtl_uString ** value, LookupMode mode,
+ ExpandRequestLink const * requestStack) const;
+ void expandValue(
+ rtl_uString ** value, OUString const & text, LookupMode mode,
+ Bootstrap_Impl const * requestFile, OUString const & requestKey,
+ ExpandRequestLink const * requestStack) const;
+};
+
+}
+
+Bootstrap_Impl::Bootstrap_Impl( OUString const & rIniName )
+ : _nRefCount( 0 ),
+ _base_ini( nullptr ),
+ _iniName (rIniName)
+{
+ OUString base_ini(getIniFileName_Impl());
+ // normalize path
+ FileStatus status( osl_FileStatus_Mask_FileURL );
+ DirectoryItem dirItem;
+ if (DirectoryItem::get(base_ini, dirItem) == DirectoryItem::E_None &&
+ dirItem.getFileStatus(status) == DirectoryItem::E_None)
+ {
+ base_ini = status.getFileURL();
+ if (rIniName != base_ini)
+ {
+ _base_ini = static_cast< Bootstrap_Impl * >(
+ rtl_bootstrap_args_open(base_ini.pData));
+ }
+ }
+ SAL_INFO("sal.bootstrap", "Bootstrap_Impl(): sFile=" << _iniName);
+ oslFileHandle handle;
+ if (!_iniName.isEmpty() &&
+ osl_openFile(_iniName.pData, &handle, osl_File_OpenFlag_Read) == osl_File_E_None)
+ {
+ rtl::ByteSequence seq;
+
+ while (osl_readLine(handle , reinterpret_cast<sal_Sequence **>(&seq)) == osl_File_E_None)
+ {
+ OString line(reinterpret_cast<const char *>(seq.getConstArray()), seq.getLength());
+ sal_Int32 nIndex = line.indexOf('=');
+ if (nIndex >= 1)
+ {
+ struct rtl_bootstrap_NameValue nameValue;
+ nameValue.sName = OStringToOUString(o3tl::trim(line.subView(0,nIndex)), RTL_TEXTENCODING_ASCII_US);
+ nameValue.sValue = OStringToOUString(o3tl::trim(line.subView(nIndex+1)), RTL_TEXTENCODING_UTF8);
+
+ SAL_INFO("sal.bootstrap", "pushing: name=" << nameValue.sName << " value=" << nameValue.sValue);
+
+ _nameValueVector.push_back(nameValue);
+ }
+ }
+ osl_closeFile(handle);
+ }
+ else
+ {
+ SAL_INFO( "sal.bootstrap", "couldn't open file: " << _iniName );
+ }
+}
+
+Bootstrap_Impl::~Bootstrap_Impl()
+{
+ if (_base_ini)
+ rtl_bootstrap_args_close( _base_ini );
+}
+
+namespace {
+
+Bootstrap_Impl * get_static_bootstrap_handle()
+{
+ static Bootstrap_Impl* s_handle = []() {
+ OUString iniName(getIniFileName_Impl());
+ Bootstrap_Impl* that = static_cast<Bootstrap_Impl*>(rtl_bootstrap_args_open(iniName.pData));
+ if (!that)
+ {
+ that = new Bootstrap_Impl(iniName);
+ ++that->_nRefCount;
+ }
+ return that;
+ }();
+
+ return s_handle;
+}
+
+struct FundamentalIniData
+{
+ rtlBootstrapHandle ini;
+
+ FundamentalIniData()
+ {
+ OUString uri;
+ ini =
+ (get_static_bootstrap_handle()->getValue(
+ "URE_BOOTSTRAP", &uri.pData, nullptr, LOOKUP_MODE_NORMAL, false,
+ nullptr)
+ && resolvePathnameUrl(&uri))
+ ? rtl_bootstrap_args_open(uri.pData) : nullptr;
+ }
+
+ ~FundamentalIniData() { rtl_bootstrap_args_close(ini); }
+
+ FundamentalIniData(const FundamentalIniData&) = delete;
+ FundamentalIniData& operator=(const FundamentalIniData&) = delete;
+};
+
+FundamentalIniData& FundamentalIni()
+{
+ static FundamentalIniData SINGLETON;
+ return SINGLETON;
+}
+
+}
+
+bool Bootstrap_Impl::getValue(
+ OUString const & key, rtl_uString ** value, rtl_uString * defaultValue,
+ LookupMode mode, bool override, ExpandRequestLink const * requestStack)
+ const
+{
+ if (mode == LOOKUP_MODE_NORMAL && key == "URE_BOOTSTRAP")
+ mode = LOOKUP_MODE_URE_BOOTSTRAP;
+
+ if (override && getDirectValue(key, value, mode, requestStack))
+ return true;
+
+ if (key == "_OS")
+ {
+ rtl_uString_assign(
+ value, OUString(RTL_OS).pData);
+ return true;
+ }
+
+ if (key == "_ARCH")
+ {
+ rtl_uString_assign(
+ value, OUString(RTL_ARCH).pData);
+ return true;
+ }
+
+ if (key == "_CPPU_ENV")
+ {
+ rtl_uString_assign(
+ value,
+ (OUString(
+ SAL_STRINGIFY(CPPU_ENV)).
+ pData));
+ return true;
+ }
+
+#ifdef ANDROID
+ if (key == "APP_DATA_DIR")
+ {
+ const char *app_data_dir = lo_get_app_data_dir();
+ rtl_uString_assign(
+ value, OUString(app_data_dir, strlen(app_data_dir), RTL_TEXTENCODING_UTF8).pData);
+ return true;
+ }
+#endif
+
+#ifdef IOS
+ if (key == "APP_DATA_DIR")
+ {
+ const char *app_data_dir = [[[[NSBundle mainBundle] bundlePath] stringByAddingPercentEncodingWithAllowedCharacters: [NSCharacterSet URLPathAllowedCharacterSet]] UTF8String];
+ rtl_uString_assign(
+ value, OUString(app_data_dir, strlen(app_data_dir), RTL_TEXTENCODING_UTF8).pData);
+ return true;
+ }
+#endif
+
+ if (key == "ORIGIN")
+ {
+ rtl_uString_assign(
+ value,
+ _iniName.copy(
+ 0, std::max<sal_Int32>(0, _iniName.lastIndexOf('/'))).pData);
+ return true;
+ }
+
+ if (getAmbienceValue(key, value, mode, requestStack))
+ return true;
+
+ if (key == "SYSUSERCONFIG")
+ {
+ OUString v;
+ bool b = osl::Security().getConfigDir(v);
+ EnsureNoFinalSlash(v);
+ rtl_uString_assign(value, v.pData);
+ return b;
+ }
+
+ if (key == "SYSUSERHOME")
+ {
+ OUString v;
+ bool b = osl::Security().getHomeDir(v);
+ EnsureNoFinalSlash(v);
+ rtl_uString_assign(value, v.pData);
+ return b;
+ }
+
+ if (key == "SYSBINDIR")
+ {
+ getExecutableDirectory_Impl(value);
+ return true;
+ }
+
+ if (_base_ini != nullptr && _base_ini->getDirectValue(key, value, mode, requestStack))
+ return true;
+
+ if (!override && getDirectValue(key, value, mode, requestStack))
+ return true;
+
+ if (mode == LOOKUP_MODE_NORMAL)
+ {
+ FundamentalIniData const & d = FundamentalIni();
+ Bootstrap_Impl const * b = static_cast<Bootstrap_Impl const *>(d.ini);
+ if (b != nullptr && b != this && b->getDirectValue(key, value, mode, requestStack))
+ return true;
+ }
+
+ if (defaultValue != nullptr)
+ {
+ rtl_uString_assign(value, defaultValue);
+ return true;
+ }
+
+ rtl_uString_new(value);
+ return false;
+}
+
+bool Bootstrap_Impl::getDirectValue(
+ OUString const & key, rtl_uString ** value, LookupMode mode,
+ ExpandRequestLink const * requestStack) const
+{
+ OUString v;
+ if (find(_nameValueVector, key, &v))
+ {
+ expandValue(value, v, mode, this, key, requestStack);
+ return true;
+ }
+
+ return false;
+}
+
+bool Bootstrap_Impl::getAmbienceValue(
+ OUString const & key, rtl_uString ** value, LookupMode mode,
+ ExpandRequestLink const * requestStack) const
+{
+ OUString v;
+ bool f;
+
+ {
+ osl::MutexGuard g(osl::Mutex::getGlobalMutex());
+ f = find(rtl_bootstrap_set_vector, key, &v);
+ }
+
+ if (f || getFromCommandLineArgs(key, &v) ||
+ osl_getEnvironment(key.pData, &v.pData) == osl_Process_E_None)
+ {
+ expandValue(value, v, mode, nullptr, key, requestStack);
+ return true;
+ }
+
+ return false;
+}
+
+void Bootstrap_Impl::expandValue(
+ rtl_uString ** value, OUString const & text, LookupMode mode,
+ Bootstrap_Impl const * requestFile, OUString const & requestKey,
+ ExpandRequestLink const * requestStack) const
+{
+ rtl_uString_assign(
+ value,
+ (mode == LOOKUP_MODE_URE_BOOTSTRAP && isPathnameUrl(text) ?
+ text :
+ recursivelyExpandMacros(
+ this, text,
+ (mode == LOOKUP_MODE_URE_BOOTSTRAP ?
+ LOOKUP_MODE_URE_BOOTSTRAP_EXPANSION : mode),
+ requestFile, requestKey, requestStack)).pData);
+}
+
+namespace {
+
+typedef std::unordered_map< OUString, Bootstrap_Impl * > bootstrap_map_t;
+bootstrap_map_t bootstrap_map;
+
+}
+
+rtlBootstrapHandle SAL_CALL rtl_bootstrap_args_open(rtl_uString * pIniName)
+{
+ static o3tl::lru_map<OUString,OUString> fileUrlLookupCache(16);
+
+ OUString originalIniName( pIniName );
+ OUString iniName;
+
+ osl::ResettableMutexGuard guard(osl::Mutex::getGlobalMutex());
+ auto cacheIt = fileUrlLookupCache.find(originalIniName);
+ bool foundInCache = cacheIt != fileUrlLookupCache.end();
+ if (foundInCache)
+ iniName = cacheIt->second;
+ guard.clear();
+
+ // normalize path
+ if (!foundInCache)
+ {
+ FileStatus status(osl_FileStatus_Mask_FileURL);
+ DirectoryItem dirItem;
+ if (DirectoryItem::get(originalIniName, dirItem) != DirectoryItem::E_None ||
+ dirItem.getFileStatus(status) != DirectoryItem::E_None)
+ {
+ return nullptr;
+ }
+ iniName = status.getFileURL();
+ }
+
+ guard.reset();
+ if (!foundInCache)
+ fileUrlLookupCache.insert({originalIniName, iniName});
+ Bootstrap_Impl * that;
+ auto iFind(bootstrap_map.find(iniName));
+ if (iFind == bootstrap_map.end())
+ {
+ guard.clear();
+ that = new Bootstrap_Impl(iniName);
+ guard.reset();
+ iFind = bootstrap_map.find(iniName);
+ if (iFind == bootstrap_map.end())
+ {
+ ++that->_nRefCount;
+ ::std::pair< bootstrap_map_t::iterator, bool > insertion(
+ bootstrap_map.emplace(iniName, that));
+ OSL_ASSERT(insertion.second);
+ }
+ else
+ {
+ Bootstrap_Impl * obsolete = that;
+ that = iFind->second;
+ ++that->_nRefCount;
+ guard.clear();
+ delete obsolete;
+ }
+ }
+ else
+ {
+ that = iFind->second;
+ ++that->_nRefCount;
+ }
+ return static_cast< rtlBootstrapHandle >( that );
+}
+
+void SAL_CALL rtl_bootstrap_args_close(rtlBootstrapHandle handle) SAL_THROW_EXTERN_C()
+{
+ if (!handle)
+ return;
+
+ Bootstrap_Impl * that = static_cast< Bootstrap_Impl * >( handle );
+
+ osl::MutexGuard guard(osl::Mutex::getGlobalMutex());
+ OSL_ASSERT(bootstrap_map.find(that->_iniName)->second == that);
+ --that->_nRefCount;
+
+ if (that->_nRefCount != 0)
+ return;
+
+ std::size_t const nLeaking = 8; // only hold up to 8 files statically
+ if (bootstrap_map.size() > nLeaking)
+ {
+ ::std::size_t erased = bootstrap_map.erase( that->_iniName );
+ if (erased != 1) {
+ OSL_ASSERT( false );
+ }
+ delete that;
+ }
+}
+
+sal_Bool SAL_CALL rtl_bootstrap_get_from_handle(
+ rtlBootstrapHandle handle,
+ rtl_uString * pName,
+ rtl_uString ** ppValue,
+ rtl_uString * pDefault
+)
+{
+ osl::MutexGuard guard(osl::Mutex::getGlobalMutex());
+
+ bool found = false;
+ if(ppValue && pName)
+ {
+ if (!handle)
+ handle = get_static_bootstrap_handle();
+
+ found = static_cast< Bootstrap_Impl * >(handle)->getValue(
+ pName, ppValue, pDefault, LOOKUP_MODE_NORMAL, false, nullptr );
+ }
+
+ return found;
+}
+
+void SAL_CALL rtl_bootstrap_get_iniName_from_handle (
+ rtlBootstrapHandle handle,
+ rtl_uString ** ppIniName
+)
+{
+ if(!ppIniName)
+ return;
+
+ if(handle)
+ {
+ Bootstrap_Impl * pImpl = static_cast<Bootstrap_Impl*>(handle);
+ rtl_uString_assign(ppIniName, pImpl->_iniName.pData);
+ }
+ else
+ {
+ const OUString & iniName = getIniFileName_Impl();
+ rtl_uString_assign(ppIniName, iniName.pData);
+ }
+}
+
+void SAL_CALL rtl_bootstrap_setIniFileName (
+ rtl_uString * pName
+)
+{
+ osl::MutexGuard guard(osl::Mutex::getGlobalMutex());
+ OUString & file = getIniFileName_Impl();
+ file = pName;
+}
+
+sal_Bool SAL_CALL rtl_bootstrap_get (
+ rtl_uString * pName,
+ rtl_uString ** ppValue,
+ rtl_uString * pDefault
+)
+{
+ return rtl_bootstrap_get_from_handle(nullptr, pName, ppValue, pDefault);
+}
+
+void SAL_CALL rtl_bootstrap_set (
+ rtl_uString * pName,
+ rtl_uString * pValue
+)
+{
+ const OUString name(pName);
+ const OUString value(pValue);
+
+ osl::MutexGuard guard(osl::Mutex::getGlobalMutex());
+
+ for (auto & item : rtl_bootstrap_set_vector)
+ {
+ if (item.sName == name)
+ {
+ item.sValue = value;
+ return;
+ }
+ }
+
+ SAL_INFO("sal.bootstrap", "explicitly getting: name=" << name << " value=" <<value);
+
+ rtl_bootstrap_set_vector.emplace_back(name, value);
+}
+
+void SAL_CALL rtl_bootstrap_expandMacros_from_handle(
+ rtlBootstrapHandle handle,
+ rtl_uString ** macro)
+{
+ if (!handle)
+ handle = get_static_bootstrap_handle();
+
+ OUString expanded(expandMacros(static_cast< Bootstrap_Impl * >(handle),
+ OUString::unacquired(macro),
+ LOOKUP_MODE_NORMAL, nullptr));
+ rtl_uString_assign(macro, expanded.pData);
+}
+
+void SAL_CALL rtl_bootstrap_expandMacros(rtl_uString ** macro)
+{
+ rtl_bootstrap_expandMacros_from_handle(nullptr, macro);
+}
+
+void rtl_bootstrap_encode(rtl_uString const * value, rtl_uString ** encoded)
+{
+ OSL_ASSERT(value);
+ OUStringBuffer b(value->length+5);
+ for (sal_Int32 i = 0; i < value->length; ++i)
+ {
+ sal_Unicode c = value->buffer[i];
+ if (c == '$' || c == '\\')
+ b.append('\\');
+
+ b.append(c);
+ }
+
+ rtl_uString_assign(encoded, b.makeStringAndClear().pData);
+}
+
+namespace {
+
+int hex(sal_Unicode c)
+{
+ return
+ c >= '0' && c <= '9' ? c - '0' :
+ c >= 'A' && c <= 'F' ? c - 'A' + 10 :
+ c >= 'a' && c <= 'f' ? c - 'a' + 10 : -1;
+}
+
+sal_Unicode read(std::u16string_view text, std::size_t * pos, bool * escaped)
+{
+ OSL_ASSERT(pos && *pos < text.length() && escaped);
+ sal_Unicode c = text[(*pos)++];
+ if (c == '\\')
+ {
+ int n1, n2, n3, n4;
+ if (*pos < text.length() - 4 && text[*pos] == 'u' &&
+ ((n1 = hex(text[*pos + 1])) >= 0) &&
+ ((n2 = hex(text[*pos + 2])) >= 0) &&
+ ((n3 = hex(text[*pos + 3])) >= 0) &&
+ ((n4 = hex(text[*pos + 4])) >= 0))
+ {
+ *pos += 5;
+ *escaped = true;
+ return static_cast< sal_Unicode >(
+ (n1 << 12) | (n2 << 8) | (n3 << 4) | n4);
+ }
+
+ if (*pos < text.length())
+ {
+ *escaped = true;
+ return text[(*pos)++];
+ }
+ }
+
+ *escaped = false;
+ return c;
+}
+
+OUString lookup(
+ Bootstrap_Impl const * file, LookupMode mode, bool override,
+ OUString const & key, ExpandRequestLink const * requestStack)
+{
+ OUString v;
+ (file == nullptr ? get_static_bootstrap_handle() : file)->getValue(
+ key, &v.pData, nullptr, mode, override, requestStack);
+ return v;
+}
+
+OUString expandMacros(
+ Bootstrap_Impl const * file, std::u16string_view text, LookupMode mode,
+ ExpandRequestLink const * requestStack)
+{
+ SAL_INFO("sal.bootstrap", "expandMacros called with: " << OUString(text));
+ OUStringBuffer buf(2048);
+
+ for (std::size_t i = 0; i < text.length();)
+ {
+ bool escaped;
+ sal_Unicode c = read(text, &i, &escaped);
+ if (escaped || c != '$')
+ {
+ buf.append(c);
+ }
+ else
+ {
+ if (i < text.length() && text[i] == '{')
+ {
+ ++i;
+ std::size_t p = i;
+ sal_Int32 nesting = 0;
+ OUString seg[3];
+ int n = 0;
+
+ while (i < text.length())
+ {
+ std::size_t j = i;
+ c = read(text, &i, &escaped);
+
+ if (!escaped)
+ {
+ switch (c)
+ {
+ case '{':
+ ++nesting;
+ break;
+ case '}':
+ if (nesting == 0)
+ {
+ seg[n++] = text.substr(p, j - p);
+ goto done;
+ }
+ else
+ {
+ --nesting;
+ }
+ break;
+ case ':':
+ if (nesting == 0 && n < 2)
+ {
+ seg[n++] = text.substr(p, j - p);
+ p = i;
+ }
+ break;
+ }
+ }
+ }
+ done:
+ for (int j = 0; j < n; ++j)
+ {
+ seg[j] = expandMacros(file, seg[j], mode, requestStack);
+ }
+
+ if (n == 3 && seg[0] != ".override" && seg[1].isEmpty())
+ {
+ // For backward compatibility, treat ${file::key} the
+ // same as just ${file:key}:
+ seg[1] = seg[2];
+ n = 2;
+ }
+
+ if (n == 1)
+ {
+ buf.append(lookup(file, mode, false, seg[0], requestStack));
+ }
+ else if (n == 2)
+ {
+ rtl::Bootstrap b(seg[0]);
+ Bootstrap_Impl * f = static_cast< Bootstrap_Impl * >(b.getHandle());
+ buf.append(lookup(f, mode, false, seg[1], requestStack));
+ }
+ else if (n == 3 && seg[0] == ".override")
+ {
+ rtl::Bootstrap b(seg[1]);
+ Bootstrap_Impl * f = static_cast< Bootstrap_Impl * >(b.getHandle());
+ buf.append(lookup(f, mode, f != nullptr, seg[2], requestStack));
+ }
+ else
+ {
+ // Going through osl::Profile, this code erroneously
+ // does not recursively expand macros in the resulting
+ // replacement text (and if it did, it would fail to
+ // detect cycles that pass through here):
+ buf.append(
+ OStringToOUString(
+ osl::Profile(seg[0]).readString(
+ OUStringToOString(
+ seg[1], RTL_TEXTENCODING_UTF8),
+ OUStringToOString(
+ seg[2], RTL_TEXTENCODING_UTF8),
+ OString()),
+ RTL_TEXTENCODING_UTF8));
+ }
+ }
+ else
+ {
+ OUStringBuffer kbuf(sal_Int32(text.length()));
+ for (; i < text.length();)
+ {
+ std::size_t j = i;
+ c = read(text, &j, &escaped);
+ if (!escaped &&
+ (c == ' ' || c == '$' || c == '-' || c == '/' ||
+ c == ';' || c == '\\'))
+ {
+ break;
+ }
+
+ kbuf.append(c);
+ i = j;
+ }
+
+ buf.append(
+ lookup(
+ file, mode, false, kbuf.makeStringAndClear(),
+ requestStack));
+ }
+ }
+ }
+
+ OUString result(buf.makeStringAndClear());
+ SAL_INFO("sal.bootstrap", "expandMacros result: " << result);
+
+ return result;
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/byteseq.cxx b/sal/rtl/byteseq.cxx
new file mode 100644
index 000000000..3c4967d54
--- /dev/null
+++ b/sal/rtl/byteseq.cxx
@@ -0,0 +1,246 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <assert.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <osl/diagnose.h>
+#include <osl/interlck.h>
+
+#include <rtl/byteseq.h>
+
+/* static data to be referenced by all empty strings
+ * the refCount is predefined to 1 and must never become 0 !
+ */
+static sal_Sequence aEmpty_rtl_ByteSeq =
+{
+ 1, /* sal_Int32 refCount; */
+ 0, /* sal_Int32 length; */
+ { 0 } /* sal_Unicode buffer[1]; */
+};
+
+void SAL_CALL rtl_byte_sequence_reference2One(
+ sal_Sequence ** ppSequence ) SAL_THROW_EXTERN_C()
+{
+ sal_Sequence * pSequence;
+
+ OSL_ENSURE( ppSequence, "### null ptr!" );
+ pSequence = *ppSequence;
+
+ if (pSequence->nRefCount > 1)
+ {
+ sal_Sequence *pNew;
+ sal_Int32 nElements = pSequence->nElements;
+ if (nElements)
+ {
+ pNew = static_cast<sal_Sequence *>(malloc( SAL_SEQUENCE_HEADER_SIZE + nElements ));
+
+ if ( pNew != nullptr )
+ memcpy( pNew->elements, pSequence->elements, nElements );
+
+ if (! osl_atomic_decrement( &pSequence->nRefCount ))
+ free( pSequence );
+ }
+ else
+ {
+ pNew = static_cast<sal_Sequence *>(malloc( SAL_SEQUENCE_HEADER_SIZE ));
+ }
+
+ if ( pNew != nullptr )
+ {
+ pNew->nRefCount = 1;
+ pNew->nElements = nElements;
+ }
+
+ *ppSequence = pNew;
+ }
+}
+
+void SAL_CALL rtl_byte_sequence_realloc(
+ sal_Sequence ** ppSequence, sal_Int32 nSize ) SAL_THROW_EXTERN_C()
+{
+ sal_Sequence * pSequence;
+ sal_Int32 nElements;
+
+ assert(ppSequence && "### null ptr!");
+ pSequence = *ppSequence;
+ nElements = pSequence->nElements;
+
+ if (nElements == nSize)
+ return;
+
+ if (pSequence->nRefCount > 1) // split
+ {
+ sal_Sequence *pNew = static_cast<sal_Sequence *>(malloc( SAL_SEQUENCE_HEADER_SIZE + nSize ));
+
+ if ( pNew != nullptr )
+ {
+ if (nSize > nElements)
+ {
+ memcpy( pNew->elements, pSequence->elements, nElements );
+ memset( pNew->elements + nElements, 0, nSize - nElements );
+ }
+ else
+ {
+ memcpy( pNew->elements, pSequence->elements, nSize );
+ }
+ }
+
+ if (! osl_atomic_decrement( &pSequence->nRefCount ))
+ free( pSequence );
+ pSequence = pNew;
+ }
+ else
+ {
+ pSequence = static_cast<sal_Sequence *>(realloc(
+ pSequence, SAL_SEQUENCE_HEADER_SIZE + nSize ));
+ }
+
+ if ( pSequence != nullptr )
+ {
+ pSequence->nRefCount = 1;
+ pSequence->nElements = nSize;
+ }
+
+ *ppSequence = pSequence;
+}
+
+void SAL_CALL rtl_byte_sequence_acquire( sal_Sequence *pSequence )
+ SAL_THROW_EXTERN_C()
+{
+ OSL_ASSERT( pSequence );
+ osl_atomic_increment( &(pSequence->nRefCount) );
+}
+
+void SAL_CALL rtl_byte_sequence_release( sal_Sequence *pSequence )
+ SAL_THROW_EXTERN_C()
+{
+ if ( pSequence != nullptr )
+ {
+ if (! osl_atomic_decrement( &(pSequence->nRefCount )) )
+ {
+ free( pSequence );
+ }
+ }
+}
+
+void SAL_CALL rtl_byte_sequence_construct( sal_Sequence **ppSequence , sal_Int32 nLength )
+ SAL_THROW_EXTERN_C()
+{
+ OSL_ASSERT( ppSequence );
+ if( *ppSequence )
+ {
+ rtl_byte_sequence_release( *ppSequence );
+ *ppSequence = nullptr;
+ }
+
+ if( nLength )
+ {
+ *ppSequence = static_cast<sal_Sequence *>(rtl_allocateZeroMemory( SAL_SEQUENCE_HEADER_SIZE + nLength ));
+
+ if ( *ppSequence != nullptr )
+ {
+ (*ppSequence)->nRefCount = 1;
+ (*ppSequence)->nElements = nLength;
+ }
+ }
+ else
+ {
+ *ppSequence = &aEmpty_rtl_ByteSeq;
+ rtl_byte_sequence_acquire( *ppSequence );
+ }
+}
+
+void SAL_CALL rtl_byte_sequence_constructNoDefault( sal_Sequence **ppSequence , sal_Int32 nLength )
+ SAL_THROW_EXTERN_C()
+{
+ OSL_ASSERT( ppSequence );
+ if( *ppSequence )
+ {
+ rtl_byte_sequence_release( *ppSequence );
+ *ppSequence = nullptr;
+ }
+
+ *ppSequence = static_cast<sal_Sequence *>(malloc( SAL_SEQUENCE_HEADER_SIZE + nLength ));
+
+ if ( *ppSequence != nullptr )
+ {
+ (*ppSequence)->nRefCount = 1;
+ (*ppSequence)->nElements = nLength;
+ }
+}
+
+void SAL_CALL rtl_byte_sequence_constructFromArray(
+ sal_Sequence **ppSequence, const sal_Int8 *pData , sal_Int32 nLength )
+ SAL_THROW_EXTERN_C()
+{
+ rtl_byte_sequence_constructNoDefault( ppSequence , nLength );
+ if ( *ppSequence != nullptr && nLength != 0 )
+ memcpy( (*ppSequence)->elements, pData, nLength );
+}
+
+void SAL_CALL rtl_byte_sequence_assign( sal_Sequence **ppSequence , sal_Sequence *pSequence )
+ SAL_THROW_EXTERN_C()
+{
+ if ( *ppSequence != pSequence)
+ {
+ if( *ppSequence )
+ {
+ rtl_byte_sequence_release( *ppSequence );
+ }
+ *ppSequence = pSequence;
+ rtl_byte_sequence_acquire( *ppSequence );
+ }
+// else
+// nothing to do
+
+}
+
+sal_Bool SAL_CALL rtl_byte_sequence_equals( sal_Sequence *pSequence1 , sal_Sequence *pSequence2 )
+ SAL_THROW_EXTERN_C()
+{
+ assert(pSequence1 && pSequence2);
+ if (pSequence1 == pSequence2)
+ {
+ return true;
+ }
+ if (pSequence1->nElements != pSequence2->nElements)
+ {
+ return false;
+ }
+ return
+ memcmp(
+ pSequence1->elements, pSequence2->elements, pSequence1->nElements )
+ == 0;
+}
+
+const sal_Int8 *SAL_CALL rtl_byte_sequence_getConstArray( sal_Sequence *pSequence )
+ SAL_THROW_EXTERN_C()
+{
+ return reinterpret_cast<sal_Int8*>(pSequence->elements);
+}
+
+sal_Int32 SAL_CALL rtl_byte_sequence_getLength( sal_Sequence *pSequence )
+ SAL_THROW_EXTERN_C()
+{
+ return pSequence->nElements;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/cipher.cxx b/sal/rtl/cipher.cxx
new file mode 100644
index 000000000..bb0884b7a
--- /dev/null
+++ b/sal/rtl/cipher.cxx
@@ -0,0 +1,1433 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <string.h>
+
+#include <o3tl/safeint.hxx>
+#include <sal/types.h>
+#include <rtl/alloc.h>
+#include <rtl/cipher.h>
+#include <algorithm>
+#include <cassert>
+#include <cstring>
+#include <limits>
+
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+#include <openssl/evp.h>
+#endif
+
+#if !defined LIBO_CIPHER_OPENSSL_BACKEND
+#define RTL_CIPHER_NTOHL(c, l) \
+ ((l) = (static_cast<sal_uInt32>(*((c)++))) << 24, \
+ (l) |= (static_cast<sal_uInt32>(*((c)++))) << 16, \
+ (l) |= (static_cast<sal_uInt32>(*((c)++))) << 8, \
+ (l) |= (static_cast<sal_uInt32>(*((c)++))))
+
+#define RTL_CIPHER_HTONL(l, c) \
+ (*((c)++) = static_cast<sal_uInt8>(((l) >> 24) & 0xff), \
+ *((c)++) = static_cast<sal_uInt8>(((l) >> 16) & 0xff), \
+ *((c)++) = static_cast<sal_uInt8>(((l) >> 8) & 0xff), \
+ *((c)++) = static_cast<sal_uInt8>(((l) ) & 0xff))
+
+#define RTL_CIPHER_NTOHL64(c, xl, xr, n) \
+{ \
+ (xl) = (xr) = 0; \
+ (c) += (n); \
+ switch ((n)) \
+ { \
+ case 8: (xr) = (static_cast<sal_uInt32>(*(--(c)))); \
+ [[fallthrough]]; \
+ case 7: (xr) |= (static_cast<sal_uInt32>(*(--(c)))) << 8; \
+ [[fallthrough]]; \
+ case 6: (xr) |= (static_cast<sal_uInt32>(*(--(c)))) << 16; \
+ [[fallthrough]]; \
+ case 5: (xr) |= (static_cast<sal_uInt32>(*(--(c)))) << 24; \
+ [[fallthrough]]; \
+ case 4: (xl) = (static_cast<sal_uInt32>(*(--(c)))); \
+ [[fallthrough]]; \
+ case 3: (xl) |= (static_cast<sal_uInt32>(*(--(c)))) << 8; \
+ [[fallthrough]]; \
+ case 2: (xl) |= (static_cast<sal_uInt32>(*(--(c)))) << 16; \
+ [[fallthrough]]; \
+ case 1: (xl) |= (static_cast<sal_uInt32>(*(--(c)))) << 24; \
+ } \
+}
+
+#define RTL_CIPHER_HTONL64(xl, xr, c, n) \
+{ \
+ (c) += (n); \
+ switch ((n)) \
+ { \
+ case 8: *(--(c)) = static_cast<sal_uInt8>(((xr) ) & 0xff); \
+ [[fallthrough]]; \
+ case 7: *(--(c)) = static_cast<sal_uInt8>(((xr) >> 8) & 0xff); \
+ [[fallthrough]]; \
+ case 6: *(--(c)) = static_cast<sal_uInt8>(((xr) >> 16) & 0xff); \
+ [[fallthrough]]; \
+ case 5: *(--(c)) = static_cast<sal_uInt8>(((xr) >> 24) & 0xff); \
+ [[fallthrough]]; \
+ case 4: *(--(c)) = static_cast<sal_uInt8>(((xl) ) & 0xff); \
+ [[fallthrough]]; \
+ case 3: *(--(c)) = static_cast<sal_uInt8>(((xl) >> 8) & 0xff); \
+ [[fallthrough]]; \
+ case 2: *(--(c)) = static_cast<sal_uInt8>(((xl) >> 16) & 0xff); \
+ [[fallthrough]]; \
+ case 1: *(--(c)) = static_cast<sal_uInt8>(((xl) >> 24) & 0xff); \
+ } \
+}
+#endif
+
+typedef rtlCipherError(cipher_init_t) (
+ rtlCipher Cipher,
+ rtlCipherDirection Direction,
+ const sal_uInt8 *pKeyData, sal_Size nKeyLen,
+ const sal_uInt8 *pArgData, sal_Size nArgLen);
+
+typedef rtlCipherError(cipher_update_t) (
+ rtlCipher Cipher,
+ const void *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen);
+
+typedef void (cipher_delete_t) (rtlCipher Cipher);
+
+namespace {
+
+struct Cipher_Impl
+{
+ rtlCipherAlgorithm m_algorithm;
+ rtlCipherDirection m_direction;
+ rtlCipherMode m_mode;
+
+ cipher_init_t *m_init;
+ cipher_update_t *m_encode;
+ cipher_update_t *m_decode;
+ cipher_delete_t *m_delete;
+};
+
+}
+
+rtlCipher SAL_CALL rtl_cipher_create(
+ rtlCipherAlgorithm Algorithm,
+ rtlCipherMode Mode) SAL_THROW_EXTERN_C()
+{
+ rtlCipher Cipher = nullptr;
+ switch (Algorithm)
+ {
+ case rtl_Cipher_AlgorithmBF:
+ Cipher = rtl_cipher_createBF (Mode);
+ break;
+
+ case rtl_Cipher_AlgorithmARCFOUR:
+ Cipher = rtl_cipher_createARCFOUR (Mode);
+ break;
+
+ default: /* rtl_Cipher_AlgorithmInvalid */
+ break;
+ }
+ return Cipher;
+}
+
+rtlCipherError SAL_CALL rtl_cipher_init(
+ rtlCipher Cipher,
+ rtlCipherDirection Direction,
+ const sal_uInt8 *pKeyData, sal_Size nKeyLen,
+ const sal_uInt8 *pArgData, sal_Size nArgLen) SAL_THROW_EXTERN_C()
+{
+ Cipher_Impl *pImpl = static_cast<Cipher_Impl*>(Cipher);
+ if (!pImpl)
+ return rtl_Cipher_E_Argument;
+
+ if (!pImpl->m_init)
+ return rtl_Cipher_E_Unknown;
+
+ return (pImpl->m_init)(
+ Cipher, Direction, pKeyData, nKeyLen, pArgData, nArgLen);
+}
+
+rtlCipherError SAL_CALL rtl_cipher_encode(
+ rtlCipher Cipher,
+ const void *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C()
+{
+ Cipher_Impl *pImpl = static_cast<Cipher_Impl*>(Cipher);
+ if (!pImpl)
+ return rtl_Cipher_E_Argument;
+
+ if (!pImpl->m_encode)
+ return rtl_Cipher_E_Unknown;
+
+ return (pImpl->m_encode)(Cipher, pData, nDatLen, pBuffer, nBufLen);
+}
+
+rtlCipherError SAL_CALL rtl_cipher_decode(
+ rtlCipher Cipher,
+ const void *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C()
+{
+ Cipher_Impl *pImpl = static_cast<Cipher_Impl*>(Cipher);
+ if (!pImpl)
+ return rtl_Cipher_E_Argument;
+
+ if (!pImpl->m_decode)
+ return rtl_Cipher_E_Unknown;
+
+ return (pImpl->m_decode)(Cipher, pData, nDatLen, pBuffer, nBufLen);
+}
+
+void SAL_CALL rtl_cipher_destroy(rtlCipher Cipher) SAL_THROW_EXTERN_C()
+{
+ Cipher_Impl *pImpl = static_cast<Cipher_Impl*>(Cipher);
+ if (pImpl && pImpl->m_delete)
+ pImpl->m_delete(Cipher);
+}
+
+namespace {
+
+#if !defined LIBO_CIPHER_OPENSSL_BACKEND
+#define CIPHER_ROUNDS_BF 16
+
+struct CipherKeyBF
+{
+ sal_uInt32 m_S[4][256];
+ sal_uInt32 m_P[CIPHER_ROUNDS_BF + 2];
+};
+#endif
+
+struct CipherContextBF
+{
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ EVP_CIPHER_CTX * m_context;
+#else
+ CipherKeyBF m_key;
+ union
+ {
+ sal_uInt32 m_long[2];
+ sal_uInt8 m_byte[8];
+ } m_iv;
+ sal_uInt32 m_offset;
+#endif
+};
+
+struct CipherBF_Impl
+{
+ Cipher_Impl m_cipher;
+ CipherContextBF m_context;
+};
+
+}
+
+#if !defined LIBO_CIPHER_OPENSSL_BACKEND
+static rtlCipherError BF_init(
+ CipherContextBF *ctx,
+ rtlCipherMode eMode,
+ const sal_uInt8 *pKeyData, sal_Size nKeyLen,
+ const sal_uInt8 *pArgData, sal_Size nArgLen);
+#endif
+
+static rtlCipherError BF_update(
+ CipherContextBF *ctx,
+ rtlCipherMode eMode,
+ rtlCipherDirection eDirection,
+ const sal_uInt8 *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen);
+
+#if !defined LIBO_CIPHER_OPENSSL_BACKEND
+static void BF_updateECB(
+ CipherContextBF *ctx,
+ rtlCipherDirection direction,
+ const sal_uInt8 *pData,
+ sal_uInt8 *pBuffer,
+ sal_Size nLength);
+
+static void BF_updateCBC(
+ CipherContextBF *ctx,
+ rtlCipherDirection direction,
+ const sal_uInt8 *pData,
+ sal_uInt8 *pBuffer,
+ sal_Size nLength);
+
+static void BF_updateCFB(
+ CipherContextBF *ctx,
+ rtlCipherDirection direction,
+ const sal_uInt8 *pData,
+ sal_uInt8 *pBuffer);
+
+static void BF_encode(CipherKeyBF *key, sal_uInt32 *xl, sal_uInt32 *xr);
+
+static void BF_decode(CipherKeyBF *key, sal_uInt32 *xl, sal_uInt32 *xr);
+
+static sal_uInt32 BF(CipherKeyBF *key, sal_uInt32 x);
+
+const CipherKeyBF BF_key =
+{
+ /* S */
+ {
+ /* S[0] */
+ {
+ /* 0 */
+ 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L,
+ 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L,
+ 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L,
+ 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL,
+
+ /* 1 */
+ 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL,
+ 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L,
+ 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL,
+ 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL,
+
+ /* 2 */
+ 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L,
+ 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L,
+ 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL,
+ 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL,
+
+ /* 3 */
+ 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL,
+ 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L,
+ 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L,
+ 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L,
+
+ /* 4 */
+ 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L,
+ 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L,
+ 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL,
+ 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L,
+
+ /* 5 */
+ 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L,
+ 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L,
+ 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L,
+ 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL,
+
+ /* 6 */
+ 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L,
+ 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL,
+ 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL,
+ 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L,
+
+ /* 7 */
+ 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL,
+ 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L,
+ 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL,
+ 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L,
+
+ /* 8 */
+ 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L,
+ 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL,
+ 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L,
+ 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L,
+
+ /* 9 */
+ 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL,
+ 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L,
+ 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL,
+ 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L,
+
+ /* A */
+ 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L,
+ 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL,
+ 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L,
+ 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L,
+
+ /* B */
+ 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L,
+ 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L,
+ 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L,
+ 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL,
+
+ /* C */
+ 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL,
+ 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L,
+ 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L,
+ 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L,
+
+ /* D */
+ 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L,
+ 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL,
+ 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L,
+ 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL,
+
+ /* E */
+ 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL,
+ 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L,
+ 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L,
+ 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L,
+
+ /* F */
+ 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L,
+ 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L,
+ 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L,
+ 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL
+ },
+
+ /* S[1] */
+ {
+ 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L,
+ 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L,
+ 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L,
+ 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL,
+
+ 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L,
+ 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L,
+ 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL,
+ 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L,
+
+ 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L,
+ 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L,
+ 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL,
+ 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL,
+
+ 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L,
+ 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L,
+ 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L,
+ 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L,
+
+ 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL,
+ 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL,
+ 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL,
+ 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L,
+
+ 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL,
+ 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L,
+ 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L,
+ 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL,
+
+ 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL,
+ 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L,
+ 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL,
+ 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L,
+
+ 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL,
+ 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL,
+ 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L,
+ 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L,
+
+ 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L,
+ 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L,
+ 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L,
+ 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L,
+
+ 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L,
+ 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL,
+ 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L,
+ 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL,
+
+ 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L,
+ 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L,
+ 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L,
+ 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L,
+
+ 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L,
+ 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L,
+ 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L,
+ 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L,
+
+ 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L,
+ 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L,
+ 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L,
+ 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L,
+
+ 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L,
+ 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L,
+ 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L,
+ 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L,
+
+ 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL,
+ 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL,
+ 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L,
+ 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL,
+
+ 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L,
+ 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L,
+ 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L,
+ 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L
+ },
+
+ /* S[2] */
+ {
+ 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L,
+ 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L,
+ 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL,
+ 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L,
+
+ 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L,
+ 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L,
+ 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL,
+ 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL,
+
+ 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL,
+ 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L,
+ 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L,
+ 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL,
+
+ 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L,
+ 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL,
+ 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L,
+ 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL,
+
+ 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L,
+ 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL,
+ 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L,
+ 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL,
+
+ 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L,
+ 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L,
+ 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL,
+ 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L,
+
+ 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L,
+ 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L,
+ 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L,
+ 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL,
+
+ 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L,
+ 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL,
+ 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L,
+ 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL,
+
+ 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L,
+ 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL,
+ 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL,
+ 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL,
+
+ 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L,
+ 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L,
+ 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL,
+ 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL,
+
+ 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL,
+ 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL,
+ 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL,
+ 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L,
+
+ 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L,
+ 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L,
+ 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L,
+ 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL,
+
+ 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL,
+ 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L,
+ 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L,
+ 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L,
+
+ 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L,
+ 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L,
+ 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L,
+ 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L,
+
+ 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L,
+ 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L,
+ 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L,
+ 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL,
+
+ 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L,
+ 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL,
+ 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L,
+ 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L
+ },
+
+ /* S[3] */
+ {
+ 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL,
+ 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL,
+ 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL,
+ 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L,
+
+ 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L,
+ 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L,
+ 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L,
+ 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L,
+
+ 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L,
+ 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L,
+ 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L,
+ 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L,
+
+ 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L,
+ 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L,
+ 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L,
+ 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL,
+
+ 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL,
+ 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L,
+ 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL,
+ 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL,
+
+ 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL,
+ 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L,
+ 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL,
+ 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL,
+
+ 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L,
+ 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L,
+ 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L,
+ 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L,
+
+ 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL,
+ 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL,
+ 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L,
+ 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L,
+
+ 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L,
+ 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL,
+ 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L,
+ 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L,
+
+ 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L,
+ 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL,
+ 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L,
+ 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L,
+
+ 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L,
+ 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL,
+ 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL,
+ 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L,
+
+ 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L,
+ 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L,
+ 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L,
+ 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL,
+
+ 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L,
+ 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL,
+ 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL,
+ 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L,
+
+ 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L,
+ 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL,
+ 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L,
+ 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL,
+
+ 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L,
+ 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL,
+ 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L,
+ 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L,
+
+ 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL,
+ 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L,
+ 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL,
+ 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L
+ }
+ },
+
+ /* P */
+ {
+ 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L,
+ 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L,
+ 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL,
+ 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L,
+ 0x9216D5D9L, 0x8979FB1BL
+ }
+};
+#endif
+
+#if !defined LIBO_CIPHER_OPENSSL_BACKEND
+static rtlCipherError BF_init(
+ CipherContextBF *ctx,
+ rtlCipherMode eMode,
+ const sal_uInt8 *pKeyData, sal_Size nKeyLen,
+ const sal_uInt8 *pArgData, sal_Size nArgLen)
+{
+ CipherKeyBF *key;
+ sal_uInt32 D, DL, DR;
+ sal_uInt16 i, j, k;
+
+ key = &(ctx->m_key);
+
+ memcpy(key, &BF_key, sizeof (CipherKeyBF));
+ memset(&(ctx->m_iv), 0, sizeof(ctx->m_iv));
+ ctx->m_offset = 0;
+
+ for (i = 0, k = 0; i < CIPHER_ROUNDS_BF + 2; ++i)
+ {
+ D = 0;
+ for (j = 0; j < 4; ++j)
+ {
+ D = ((D << 8) | pKeyData[k]);
+ k++;
+ if (k >= nKeyLen)
+ k = 0;
+ }
+ key->m_P[i] ^= D;
+ }
+
+ rtl_secureZeroMemory(&DL, sizeof(DL));
+ rtl_secureZeroMemory(&DR, sizeof(DR));
+
+ for (i = 0; i < CIPHER_ROUNDS_BF + 2; i += 2)
+ {
+ BF_encode(key, &DL, &DR);
+ key->m_P[i ] = DL;
+ key->m_P[i + 1] = DR;
+ }
+
+ for (i = 0; i < 4; ++i)
+ {
+ for (k = 0; k < 256; k += 2)
+ {
+ BF_encode(key, &DL, &DR);
+ key->m_S[i][k ] = DL;
+ key->m_S[i][k + 1] = DR;
+ }
+ }
+
+ if (pArgData && nArgLen)
+ {
+ nArgLen = std::min<sal_Size>(nArgLen, 8);
+ if (eMode == rtl_Cipher_ModeStream)
+ {
+ memcpy(ctx->m_iv.m_byte, pArgData, nArgLen);
+ }
+ else
+ {
+ RTL_CIPHER_NTOHL64 (pArgData, DL, DR, nArgLen);
+ ctx->m_iv.m_long[0] = DL;
+ ctx->m_iv.m_long[1] = DR;
+ }
+ }
+
+ return rtl_Cipher_E_None;
+}
+#endif
+
+static rtlCipherError BF_update(
+ CipherContextBF *ctx,
+ rtlCipherMode eMode,
+ rtlCipherDirection eDirection,
+ const sal_uInt8 *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen)
+{
+ /* Check arguments. */
+ if (!pData || !pBuffer)
+ return rtl_Cipher_E_Argument;
+
+ if ((nDatLen <= 0) || (nDatLen > nBufLen))
+ return rtl_Cipher_E_BufferSize;
+
+ /* Update. */
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ assert(eMode == rtl_Cipher_ModeStream);
+ (void) eMode;
+ (void) eDirection;
+ while (nDatLen > o3tl::make_unsigned(std::numeric_limits<int>::max())) {
+ int outl;
+ if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, std::numeric_limits<int>::max())
+ == 0)
+ {
+ return rtl_Cipher_E_Unknown;
+ }
+ assert(outl == std::numeric_limits<int>::max());
+ pData += std::numeric_limits<int>::max();
+ nDatLen -= std::numeric_limits<int>::max();
+ pBuffer += std::numeric_limits<int>::max();
+ }
+ int outl;
+ if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, static_cast<int>(nDatLen)) == 0)
+ {
+ return rtl_Cipher_E_Unknown;
+ }
+ assert(outl == static_cast<int>(nDatLen));
+ // A final call to EVP_CipherFinal_ex is intentionally missing; it wouldn't fit the rtl/cipher.h
+ // interface, and is hopefully not needed, as each individual Blowfish CFB update step doesn't
+ // hold back any data that would need to be finally flushed.
+#else
+ if (eMode == rtl_Cipher_ModeECB)
+ {
+ /* Block mode. */
+ while (nDatLen > 8)
+ {
+ BF_updateECB(ctx, eDirection, pData, pBuffer, 8);
+ nDatLen -= 8;
+ pData += 8;
+ pBuffer += 8;
+ }
+ BF_updateECB(ctx, eDirection, pData, pBuffer, nDatLen);
+ }
+ else if (eMode == rtl_Cipher_ModeCBC)
+ {
+ /* Block mode. */
+ while (nDatLen > 8)
+ {
+ BF_updateCBC (ctx, eDirection, pData, pBuffer, 8);
+ nDatLen -= 8;
+ pData += 8;
+ pBuffer += 8;
+ }
+ BF_updateCBC (ctx, eDirection, pData, pBuffer, nDatLen);
+ }
+ else
+ {
+ /* Stream mode. */
+ while (nDatLen > 0)
+ {
+ BF_updateCFB (ctx, eDirection, pData, pBuffer);
+ nDatLen -= 1;
+ pData += 1;
+ pBuffer += 1;
+ }
+ }
+#endif
+ return rtl_Cipher_E_None;
+}
+
+#if !defined LIBO_CIPHER_OPENSSL_BACKEND
+static void BF_updateECB(
+ CipherContextBF *ctx,
+ rtlCipherDirection direction,
+ const sal_uInt8 *pData,
+ sal_uInt8 *pBuffer,
+ sal_Size nLength)
+{
+ CipherKeyBF *key;
+ sal_uInt32 DL, DR;
+
+ key = &(ctx->m_key);
+ if (direction == rtl_Cipher_DirectionEncode)
+ {
+ RTL_CIPHER_NTOHL64(pData, DL, DR, nLength);
+
+ BF_encode(key, &DL, &DR);
+
+ RTL_CIPHER_HTONL(DL, pBuffer);
+ RTL_CIPHER_HTONL(DR, pBuffer);
+ }
+ else
+ {
+ RTL_CIPHER_NTOHL(pData, DL);
+ RTL_CIPHER_NTOHL(pData, DR);
+
+ BF_decode(key, &DL, &DR);
+
+ RTL_CIPHER_HTONL64(DL, DR, pBuffer, nLength);
+ }
+ rtl_secureZeroMemory(&DL, sizeof(DL));
+ rtl_secureZeroMemory(&DR, sizeof(DR));
+}
+
+static void BF_updateCBC(
+ CipherContextBF *ctx,
+ rtlCipherDirection direction,
+ const sal_uInt8 *pData,
+ sal_uInt8 *pBuffer,
+ sal_Size nLength)
+{
+ CipherKeyBF *key;
+ sal_uInt32 DL, DR;
+
+ key = &(ctx->m_key);
+ if (direction == rtl_Cipher_DirectionEncode)
+ {
+ RTL_CIPHER_NTOHL64(pData, DL, DR, nLength);
+
+ DL ^= ctx->m_iv.m_long[0];
+ DR ^= ctx->m_iv.m_long[1];
+
+ BF_encode(key, &DL, &DR);
+
+ ctx->m_iv.m_long[0] = DL;
+ ctx->m_iv.m_long[1] = DR;
+
+ RTL_CIPHER_HTONL(DL, pBuffer);
+ RTL_CIPHER_HTONL(DR, pBuffer);
+ }
+ else
+ {
+ sal_uInt32 IVL, IVR;
+
+ RTL_CIPHER_NTOHL(pData, DL);
+ RTL_CIPHER_NTOHL(pData, DR);
+
+ IVL = DL;
+ IVR = DR;
+
+ BF_decode(key, &DL, &DR);
+
+ DL ^= ctx->m_iv.m_long[0];
+ DR ^= ctx->m_iv.m_long[1];
+
+ ctx->m_iv.m_long[0] = IVL;
+ ctx->m_iv.m_long[1] = IVR;
+
+ RTL_CIPHER_HTONL64(DL, DR, pBuffer, nLength);
+ }
+ rtl_secureZeroMemory(&DL, sizeof(DL));
+ rtl_secureZeroMemory(&DR, sizeof(DR));
+}
+
+static void BF_updateCFB(
+ CipherContextBF *ctx,
+ rtlCipherDirection direction,
+ const sal_uInt8 *pData,
+ sal_uInt8 *pBuffer)
+{
+ sal_uInt8 *iv;
+ sal_uInt32 k;
+
+ iv = ctx->m_iv.m_byte;
+ k = ctx->m_offset;
+
+ if (k == 0)
+ {
+ sal_uInt32 IVL, IVR;
+
+ RTL_CIPHER_NTOHL64(iv, IVL, IVR, 8);
+ BF_encode(&(ctx->m_key), &IVL, &IVR);
+ RTL_CIPHER_HTONL64(IVL, IVR, iv, 8);
+
+ rtl_secureZeroMemory(&IVL, sizeof(IVL));
+ rtl_secureZeroMemory(&IVR, sizeof(IVR));
+ }
+
+ if (direction == rtl_Cipher_DirectionEncode)
+ {
+ iv[k] ^= *pData;
+ *pBuffer = iv[k];
+ }
+ else
+ {
+ sal_uInt8 c = iv[k];
+ iv[k] = *pData;
+ *pBuffer = *pData ^ c;
+ }
+
+ ctx->m_offset = ((k + 1) & 0x07);
+ iv = nullptr;
+}
+
+static void BF_encode(
+ CipherKeyBF *key, sal_uInt32 *xl, sal_uInt32 *xr)
+{
+ sal_uInt32 t, XL, XR;
+ sal_uInt16 i;
+
+ XL = *xl;
+ XR = *xr;
+
+ for (i = 0; i < CIPHER_ROUNDS_BF; ++i)
+ {
+ XL ^= key->m_P[i];
+ XR ^= BF (key, XL);
+
+ t = XL;
+ XL = XR;
+ XR = t;
+ }
+
+ t = XL;
+ XL = XR;
+ XR = t;
+
+ XR ^= key->m_P[CIPHER_ROUNDS_BF ];
+ XL ^= key->m_P[CIPHER_ROUNDS_BF + 1];
+
+ *xl = XL;
+ *xr = XR;
+
+}
+
+static void BF_decode(
+ CipherKeyBF *key, sal_uInt32 *xl, sal_uInt32 *xr)
+{
+ sal_uInt32 t, XL, XR;
+ sal_uInt16 i;
+
+ XL = *xl;
+ XR = *xr;
+
+ for (i = CIPHER_ROUNDS_BF + 1; i > 1; --i)
+ {
+ XL ^= key->m_P[i];
+ XR ^= BF (key, XL);
+
+ t = XL;
+ XL = XR;
+ XR = t;
+ }
+
+ t = XL;
+ XL = XR;
+ XR = t;
+
+ XR ^= key->m_P[1];
+ XL ^= key->m_P[0];
+
+ *xl = XL;
+ *xr = XR;
+
+}
+
+static sal_uInt32 BF(CipherKeyBF *key, sal_uInt32 x)
+{
+ sal_uInt16 a, b, c, d;
+ sal_uInt32 y;
+
+ d = static_cast<sal_uInt16>(x & 0x00ff);
+ x >>= 8;
+ c = static_cast<sal_uInt16>(x & 0x00ff);
+ x >>= 8;
+ b = static_cast<sal_uInt16>(x & 0x00ff);
+ x >>= 8;
+ a = static_cast<sal_uInt16>(x & 0x00ff);
+
+ y = key->m_S[0][a];
+ y += key->m_S[1][b];
+ y ^= key->m_S[2][c];
+ y += key->m_S[3][d];
+
+ return y;
+}
+#endif
+
+/**
+ rtl_cipherBF (Blowfish) implementation.
+
+ Reference: Bruce Schneier: Applied Cryptography, 2nd edition, ch. 14.3
+*/
+rtlCipher SAL_CALL rtl_cipher_createBF(rtlCipherMode Mode) SAL_THROW_EXTERN_C()
+{
+ CipherBF_Impl *pImpl = nullptr;
+
+ if (Mode == rtl_Cipher_ModeInvalid)
+ return nullptr;
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ if (Mode != rtl_Cipher_ModeStream) {
+ // Cannot easily support ModeECB and ModeCBC, and they aren't used in the LO code at least:
+ return nullptr;
+ }
+#endif
+
+ pImpl = static_cast<CipherBF_Impl*>(rtl_allocateZeroMemory(sizeof (CipherBF_Impl)));
+ if (pImpl)
+ {
+ pImpl->m_cipher.m_algorithm = rtl_Cipher_AlgorithmBF;
+ pImpl->m_cipher.m_direction = rtl_Cipher_DirectionInvalid;
+ pImpl->m_cipher.m_mode = Mode;
+
+ pImpl->m_cipher.m_init = rtl_cipher_initBF;
+ pImpl->m_cipher.m_encode = rtl_cipher_encodeBF;
+ pImpl->m_cipher.m_decode = rtl_cipher_decodeBF;
+ pImpl->m_cipher.m_delete = rtl_cipher_destroyBF;
+ }
+ return static_cast<rtlCipher>(pImpl);
+}
+
+rtlCipherError SAL_CALL rtl_cipher_initBF(
+ rtlCipher Cipher,
+ rtlCipherDirection Direction,
+ const sal_uInt8 *pKeyData, sal_Size nKeyLen,
+ const sal_uInt8 *pArgData, sal_Size nArgLen) SAL_THROW_EXTERN_C()
+{
+ CipherBF_Impl *pImpl = static_cast<CipherBF_Impl*>(Cipher);
+
+ if (!pImpl || !pKeyData)
+ return rtl_Cipher_E_Argument;
+
+ if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmBF)
+ return rtl_Cipher_E_Algorithm;
+
+ if (Direction != rtl_Cipher_DirectionInvalid)
+ pImpl->m_cipher.m_direction = Direction;
+ else
+ return rtl_Cipher_E_Direction;
+
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionBoth) {
+ // Cannot easily support DirectionBoth, and it isn't used in the LO code at least:
+ return rtl_Cipher_E_Direction;
+ }
+ if (nKeyLen > o3tl::make_unsigned(std::numeric_limits<int>::max())) {
+ return rtl_Cipher_E_BufferSize;
+ }
+ if (pImpl->m_context.m_context != nullptr) {
+ EVP_CIPHER_CTX_free(pImpl->m_context.m_context);
+ }
+ pImpl->m_context.m_context = EVP_CIPHER_CTX_new();
+ if (pImpl->m_context.m_context == nullptr) {
+ return rtl_Cipher_E_Memory;
+ }
+ unsigned char iv[8];
+ auto const n = std::min(nArgLen, sal_Size(8));
+ std::memcpy(iv, pArgData, n);
+ std::memset(iv + n, 0, 8 - n);
+ if (EVP_CipherInit_ex(
+ pImpl->m_context.m_context, EVP_bf_cfb(), nullptr, nullptr, iv,
+ pImpl->m_cipher.m_direction == rtl_Cipher_DirectionDecode ? 0 : 1)
+ == 0)
+ {
+ return rtl_Cipher_E_Unknown;
+ }
+ if (EVP_CIPHER_CTX_set_key_length(pImpl->m_context.m_context, static_cast<int>(nKeyLen)) == 0) {
+ return rtl_Cipher_E_Unknown;
+ }
+ if (EVP_CipherInit_ex(pImpl->m_context.m_context, nullptr, nullptr, pKeyData, nullptr, -1) == 0)
+ {
+ return rtl_Cipher_E_Unknown;
+ }
+ return rtl_Cipher_E_None;
+#else
+ return BF_init(
+ &(pImpl->m_context), pImpl->m_cipher.m_mode,
+ pKeyData, nKeyLen, pArgData, nArgLen);
+#endif
+}
+
+rtlCipherError SAL_CALL rtl_cipher_encodeBF(
+ rtlCipher Cipher,
+ const void *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C()
+{
+ CipherBF_Impl *pImpl = static_cast<CipherBF_Impl*>(Cipher);
+ if (!pImpl)
+ return rtl_Cipher_E_Argument;
+
+ if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmBF)
+ return rtl_Cipher_E_Algorithm;
+
+ if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionInvalid)
+ return rtl_Cipher_E_Direction;
+
+ if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionDecode)
+ return rtl_Cipher_E_Direction;
+
+ return BF_update(
+ &(pImpl->m_context), pImpl->m_cipher.m_mode,
+ rtl_Cipher_DirectionEncode,
+ static_cast<const sal_uInt8*>(pData), nDatLen, pBuffer, nBufLen);
+}
+
+rtlCipherError SAL_CALL rtl_cipher_decodeBF(
+ rtlCipher Cipher,
+ const void *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C()
+{
+ CipherBF_Impl *pImpl = static_cast<CipherBF_Impl*>(Cipher);
+ if (!pImpl)
+ return rtl_Cipher_E_Argument;
+
+ if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmBF)
+ return rtl_Cipher_E_Algorithm;
+
+ if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionInvalid)
+ return rtl_Cipher_E_Direction;
+
+ if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionEncode)
+ return rtl_Cipher_E_Direction;
+
+ return BF_update(
+ &(pImpl->m_context), pImpl->m_cipher.m_mode,
+ rtl_Cipher_DirectionDecode,
+ static_cast<const sal_uInt8*>(pData), nDatLen, pBuffer, nBufLen);
+}
+
+void SAL_CALL rtl_cipher_destroyBF(rtlCipher Cipher) SAL_THROW_EXTERN_C()
+{
+ CipherBF_Impl *pImpl = static_cast<CipherBF_Impl*>(Cipher);
+ if (!pImpl)
+ return;
+
+ if (pImpl->m_cipher.m_algorithm == rtl_Cipher_AlgorithmBF)
+ {
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ if (pImpl->m_context.m_context != nullptr) {
+ EVP_CIPHER_CTX_free(pImpl->m_context.m_context);
+ }
+#endif
+ rtl_freeZeroMemory(pImpl, sizeof(CipherBF_Impl));
+ }
+ else
+ free(pImpl);
+}
+
+#if !defined LIBO_CIPHER_OPENSSL_BACKEND
+#define CIPHER_CBLOCK_ARCFOUR 256
+#endif
+
+namespace {
+
+struct ContextARCFOUR_Impl
+{
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ EVP_CIPHER_CTX * m_context;
+#else
+ unsigned int m_S[CIPHER_CBLOCK_ARCFOUR];
+ unsigned int m_X, m_Y;
+#endif
+};
+
+struct CipherARCFOUR_Impl
+{
+ Cipher_Impl m_cipher;
+ ContextARCFOUR_Impl m_context;
+};
+
+}
+
+static rtlCipherError rtl_cipherARCFOUR_update_Impl(
+ ContextARCFOUR_Impl *ctx,
+ const sal_uInt8 *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen);
+
+static rtlCipherError rtl_cipherARCFOUR_init_Impl(
+ ContextARCFOUR_Impl *ctx,
+ const sal_uInt8 *pKeyData, sal_Size nKeyLen)
+{
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ if (nKeyLen > o3tl::make_unsigned(std::numeric_limits<int>::max())) {
+ return rtl_Cipher_E_BufferSize;
+ }
+ if (ctx->m_context != nullptr) {
+ EVP_CIPHER_CTX_free(ctx->m_context);
+ }
+ ctx->m_context = EVP_CIPHER_CTX_new();
+ if (ctx->m_context == nullptr) {
+ return rtl_Cipher_E_Memory;
+ }
+ if (EVP_CipherInit_ex(ctx->m_context, EVP_rc4(), nullptr, nullptr, nullptr, 0) == 0) {
+ // RC4 en- and decryption is identical, so we can use 0=decrypt regardless of direction,
+ // and thus also support rtl_Cipher_DirectionBoth
+ return rtl_Cipher_E_Unknown;
+ }
+ if (EVP_CIPHER_CTX_set_key_length(ctx->m_context, static_cast<int>(nKeyLen)) == 0) {
+ return rtl_Cipher_E_Unknown;
+ }
+ if (EVP_CipherInit_ex(ctx->m_context, nullptr, nullptr, pKeyData, nullptr, -1) == 0) {
+ return rtl_Cipher_E_Unknown;
+ }
+#else
+ unsigned int K[CIPHER_CBLOCK_ARCFOUR];
+ unsigned int *L, *S;
+ unsigned int x, y;
+ sal_Size n, k;
+
+ S = &(ctx->m_S[0]);
+
+ /* Initialize S linearly. */
+ for (x = 0; x < CIPHER_CBLOCK_ARCFOUR; x++)
+ S[x] = x;
+
+ /* Initialize K with key, repeat key as necessary. */
+ for (L = K, n = CIPHER_CBLOCK_ARCFOUR; n > nKeyLen; n -= nKeyLen)
+ {
+ for (k = 0; k < nKeyLen; k++)
+ {
+ L[k] = pKeyData[k];
+ }
+
+ L += nKeyLen;
+ }
+
+ for (k = 0; k < n; k++)
+ {
+ L[k] = pKeyData[k];
+ }
+
+ /* Initialize S with K. */
+ for (x = 0, y = 0; x < CIPHER_CBLOCK_ARCFOUR; x++)
+ {
+ y = (y + S[x] + K[x]) % CIPHER_CBLOCK_ARCFOUR;
+ /* swap S[x] and S[y] */
+ unsigned int t = S[x];
+ S[x] = S[y];
+ S[y] = t;
+ }
+
+ /* Initialize counters X and Y. */
+ ctx->m_X = 0;
+ ctx->m_Y = 0;
+#endif
+
+ return rtl_Cipher_E_None;
+}
+
+static rtlCipherError rtl_cipherARCFOUR_update_Impl(
+ ContextARCFOUR_Impl *ctx,
+ const sal_uInt8 *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen)
+{
+ /* Check arguments. */
+ if (!pData || !pBuffer)
+ return rtl_Cipher_E_Argument;
+
+ if ((0 >= nDatLen) || (nDatLen > nBufLen))
+ return rtl_Cipher_E_BufferSize;
+
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ while (nDatLen > o3tl::make_unsigned(std::numeric_limits<int>::max())) {
+ int outl;
+ if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, std::numeric_limits<int>::max())
+ == 0)
+ {
+ return rtl_Cipher_E_Unknown;
+ }
+ assert(outl == std::numeric_limits<int>::max());
+ pData += std::numeric_limits<int>::max();
+ nDatLen -= std::numeric_limits<int>::max();
+ pBuffer += std::numeric_limits<int>::max();
+ }
+ int outl;
+ if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, static_cast<int>(nDatLen)) == 0) {
+ return rtl_Cipher_E_Unknown;
+ }
+ assert(outl == static_cast<int>(nDatLen));
+ // A final call to EVP_CipherFinal_ex is intentionally missing; it wouldn't fit the rtl/cipher.h
+ // interface, and is hopefully not needed, as each individual RC4 update step doesn't hold back
+ // any data that would need to be finally flushed.
+#else
+ unsigned int *S;
+ sal_Size k;
+
+ /* Update. */
+ S = &(ctx->m_S[0]);
+ for (k = 0; k < nDatLen; k++)
+ {
+ /* Update counters X and Y. */
+ unsigned int x = ctx->m_X;
+ unsigned int y = ctx->m_Y;
+ x = (x + 1 ) % CIPHER_CBLOCK_ARCFOUR;
+ y = (y + S[x]) % CIPHER_CBLOCK_ARCFOUR;
+ ctx->m_X = x;
+ ctx->m_Y = y;
+
+ /* Swap S[x] and S[y]. */
+ unsigned int t = S[x];
+ S[x] = S[y];
+ S[y] = t;
+
+ /* Evaluate next key byte S[t]. */
+ t = (S[x] + S[y]) % CIPHER_CBLOCK_ARCFOUR;
+ pBuffer[k] = pData[k] ^ static_cast<sal_uInt8>(S[t] & 0xff);
+ }
+#endif
+
+ return rtl_Cipher_E_None;
+}
+
+/**
+ rtl_cipher_ARCFOUR (RC4) implementation.
+
+ Reference: Bruce Schneier: Applied Cryptography, 2nd edition, ch. 17.1
+*/
+rtlCipher SAL_CALL rtl_cipher_createARCFOUR(rtlCipherMode Mode)
+ SAL_THROW_EXTERN_C()
+{
+ CipherARCFOUR_Impl *pImpl = nullptr;
+
+ if (Mode != rtl_Cipher_ModeStream)
+ return nullptr;
+
+ pImpl = static_cast<CipherARCFOUR_Impl*>(rtl_allocateZeroMemory(sizeof(CipherARCFOUR_Impl)));
+ if (pImpl)
+ {
+ pImpl->m_cipher.m_algorithm = rtl_Cipher_AlgorithmARCFOUR;
+ pImpl->m_cipher.m_direction = rtl_Cipher_DirectionInvalid;
+ pImpl->m_cipher.m_mode = rtl_Cipher_ModeStream;
+
+ pImpl->m_cipher.m_init = rtl_cipher_initARCFOUR;
+ pImpl->m_cipher.m_encode = rtl_cipher_encodeARCFOUR;
+ pImpl->m_cipher.m_decode = rtl_cipher_decodeARCFOUR;
+ pImpl->m_cipher.m_delete = rtl_cipher_destroyARCFOUR;
+ }
+
+ return static_cast<rtlCipher>(pImpl);
+}
+
+rtlCipherError SAL_CALL rtl_cipher_initARCFOUR(
+ rtlCipher Cipher,
+ rtlCipherDirection Direction,
+ const sal_uInt8 *pKeyData, sal_Size nKeyLen,
+ SAL_UNUSED_PARAMETER const sal_uInt8 *, SAL_UNUSED_PARAMETER sal_Size)
+ SAL_THROW_EXTERN_C()
+{
+ CipherARCFOUR_Impl *pImpl = static_cast<CipherARCFOUR_Impl*>(Cipher);
+
+ if (!pImpl || !pKeyData)
+ return rtl_Cipher_E_Argument;
+
+ if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmARCFOUR)
+ return rtl_Cipher_E_Algorithm;
+
+ if (Direction != rtl_Cipher_DirectionInvalid)
+ pImpl->m_cipher.m_direction = Direction;
+ else
+ return rtl_Cipher_E_Direction;
+
+ return rtl_cipherARCFOUR_init_Impl(&(pImpl->m_context), pKeyData, nKeyLen);
+}
+
+rtlCipherError SAL_CALL rtl_cipher_encodeARCFOUR(
+ rtlCipher Cipher,
+ const void *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C()
+{
+ CipherARCFOUR_Impl *pImpl = static_cast<CipherARCFOUR_Impl*>(Cipher);
+ if (!pImpl)
+ return rtl_Cipher_E_Argument;
+
+ if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmARCFOUR)
+ return rtl_Cipher_E_Algorithm;
+
+ if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionInvalid)
+ return rtl_Cipher_E_Direction;
+
+ return rtl_cipherARCFOUR_update_Impl(
+ &(pImpl->m_context),
+ static_cast<const sal_uInt8*>(pData), nDatLen, pBuffer, nBufLen);
+}
+
+rtlCipherError SAL_CALL rtl_cipher_decodeARCFOUR(
+ rtlCipher Cipher,
+ const void *pData, sal_Size nDatLen,
+ sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C()
+{
+ CipherARCFOUR_Impl *pImpl = static_cast<CipherARCFOUR_Impl*>(Cipher);
+ if (!pImpl)
+ return rtl_Cipher_E_Argument;
+
+ if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmARCFOUR)
+ return rtl_Cipher_E_Algorithm;
+
+ if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionInvalid)
+ return rtl_Cipher_E_Direction;
+
+ return rtl_cipherARCFOUR_update_Impl(
+ &(pImpl->m_context),
+ static_cast<const sal_uInt8*>(pData), nDatLen, pBuffer, nBufLen);
+}
+
+void SAL_CALL rtl_cipher_destroyARCFOUR(rtlCipher Cipher) SAL_THROW_EXTERN_C()
+{
+ CipherARCFOUR_Impl *pImpl = static_cast<CipherARCFOUR_Impl*>(Cipher);
+ if (!pImpl)
+ return;
+
+ if (pImpl->m_cipher.m_algorithm == rtl_Cipher_AlgorithmARCFOUR)
+ {
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ if (pImpl->m_context.m_context != nullptr) {
+ EVP_CIPHER_CTX_free(pImpl->m_context.m_context);
+ }
+#endif
+ rtl_freeZeroMemory(pImpl, sizeof(CipherARCFOUR_Impl));
+ }
+ else
+ free(pImpl);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/cmdargs.cxx b/sal/rtl/cmdargs.cxx
new file mode 100644
index 000000000..bad833077
--- /dev/null
+++ b/sal/rtl/cmdargs.cxx
@@ -0,0 +1,103 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <osl/mutex.hxx>
+#include <rtl/alloc.h>
+#include <rtl/process.h>
+#include <rtl/ustring.hxx>
+
+namespace {
+
+rtl_uString ** g_ppCommandArgs = nullptr;
+sal_uInt32 g_nCommandArgCount = 0;
+
+struct ArgHolder
+{
+ ~ArgHolder();
+};
+
+ArgHolder::~ArgHolder()
+{
+ while (g_nCommandArgCount > 0)
+ rtl_uString_release (g_ppCommandArgs[--g_nCommandArgCount]);
+
+ free (g_ppCommandArgs);
+ g_ppCommandArgs = nullptr;
+}
+
+// The destructor of this static ArgHolder is "activated" by the assignments to
+// g_ppCommandArgs and g_nCommandArgCount in init():
+ArgHolder argHolder;
+
+void init()
+{
+ osl::MutexGuard guard( osl::Mutex::getGlobalMutex() );
+ if (g_ppCommandArgs)
+ return;
+
+ sal_Int32 i, n = osl_getCommandArgCount();
+
+ g_ppCommandArgs =
+ static_cast<rtl_uString**>(rtl_allocateZeroMemory (n * sizeof(rtl_uString*)));
+ for (i = 0; i < n; i++)
+ {
+ rtl_uString * pArg = nullptr;
+ osl_getCommandArg (i, &pArg);
+ bool env;
+ {
+ auto const & arg = OUString::unacquired(&pArg);
+ env = (arg.startsWith("-") || arg.startsWith("/")) &&
+ arg.match("env:", 1) &&
+ arg.indexOf ('=') >= 0;
+ }
+ if (env )
+ {
+ // ignore.
+ rtl_uString_release (pArg);
+ }
+ else
+ {
+ // assign.
+ g_ppCommandArgs[g_nCommandArgCount++] = pArg;
+ }
+ }
+}
+
+}
+
+oslProcessError SAL_CALL rtl_getAppCommandArg (
+ sal_uInt32 nArg, rtl_uString **ppCommandArg)
+{
+ init();
+ oslProcessError result = osl_Process_E_NotFound;
+ if( nArg < g_nCommandArgCount )
+ {
+ rtl_uString_assign( ppCommandArg, g_ppCommandArgs[nArg] );
+ result = osl_Process_E_None;
+ }
+ return result;
+}
+
+sal_uInt32 SAL_CALL rtl_getAppCommandArgCount()
+{
+ init();
+ return g_nCommandArgCount;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/crc.cxx b/sal/rtl/crc.cxx
new file mode 100644
index 000000000..7912b15d0
--- /dev/null
+++ b/sal/rtl/crc.cxx
@@ -0,0 +1,45 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <rtl/crc.h>
+#include <cassert>
+
+#include <zlib.h>
+
+// Zlib's crc32() is very fast, so simply use that one instead
+// of implementing this ourselves.
+
+sal_uInt32 SAL_CALL rtl_crc32 (
+ sal_uInt32 Crc,
+ const void *Data, sal_uInt32 DatLen) SAL_THROW_EXTERN_C()
+{
+ // Check that our types map to zlib correctly.
+ static_assert(sizeof(uLong) >= sizeof(sal_uInt32));
+ static_assert(sizeof(uInt) >= sizeof(sal_uInt32));
+ // Our API says that Crc should be initialized to 0, while
+ // zlib says it should be initialized with 'crc32(0,Z_NULL,0)',
+ // which however simply returns 0. Ensure this.
+ assert(crc32(0, Z_NULL, 0) == 0);
+ if (Data)
+ Crc = crc32( Crc, static_cast<const Bytef*>(Data), DatLen);
+ return Crc;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/digest.cxx b/sal/rtl/digest.cxx
new file mode 100644
index 000000000..de52ecae5
--- /dev/null
+++ b/sal/rtl/digest.cxx
@@ -0,0 +1,1897 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <sal/types.h>
+#include <osl/endian.h>
+#include <rtl/alloc.h>
+#include <rtl/digest.h>
+
+#define RTL_DIGEST_CREATE(T) (static_cast<T*>(rtl_allocateZeroMemory(sizeof(T))))
+
+#define RTL_DIGEST_ROTL(a,n) (((a) << (n)) | ((a) >> (32 - (n))))
+
+#define RTL_DIGEST_HTONL(l,c) \
+ (*((c)++) = static_cast<sal_uInt8>(((l) >> 24) & 0xff), \
+ *((c)++) = static_cast<sal_uInt8>(((l) >> 16) & 0xff), \
+ *((c)++) = static_cast<sal_uInt8>(((l) >> 8) & 0xff), \
+ *((c)++) = static_cast<sal_uInt8>(((l) ) & 0xff))
+
+#define RTL_DIGEST_LTOC(l,c) \
+ *((c)++) = static_cast<sal_uInt8>(((l) ) & 0xff); \
+ *((c)++) = static_cast<sal_uInt8>(((l) >> 8) & 0xff); \
+ *((c)++) = static_cast<sal_uInt8>(((l) >> 16) & 0xff); \
+ *((c)++) = static_cast<sal_uInt8>(((l) >> 24) & 0xff);
+
+typedef rtlDigestError (Digest_init_t) (
+ void *ctx, const sal_uInt8 *Data, sal_uInt32 DatLen);
+
+typedef void (Digest_delete_t) (void *ctx);
+
+typedef rtlDigestError (Digest_update_t) (
+ void *ctx, const void *Data, sal_uInt32 DatLen);
+
+typedef rtlDigestError (Digest_get_t) (
+ void *ctx, sal_uInt8 *Buffer, sal_uInt32 BufLen);
+
+namespace {
+
+struct Digest_Impl
+{
+ rtlDigestAlgorithm m_algorithm;
+ sal_uInt32 m_length;
+
+ Digest_init_t *m_init;
+ Digest_delete_t *m_delete;
+ Digest_update_t *m_update;
+ Digest_get_t *m_get;
+};
+
+}
+
+static void swapLong(sal_uInt32 *pData, sal_uInt32 nDatLen)
+{
+ sal_uInt32 *X;
+ int i, n;
+
+ X = pData;
+ n = nDatLen;
+
+ for (i = 0; i < n; i++)
+ {
+ X[i] = OSL_SWAPDWORD(X[i]);
+ }
+}
+
+rtlDigest SAL_CALL rtl_digest_create(rtlDigestAlgorithm Algorithm)
+ SAL_THROW_EXTERN_C()
+{
+ rtlDigest Digest = nullptr;
+ switch (Algorithm)
+ {
+ case rtl_Digest_AlgorithmMD2:
+ Digest = rtl_digest_createMD2();
+ break;
+
+ case rtl_Digest_AlgorithmMD5:
+ Digest = rtl_digest_createMD5();
+ break;
+
+ case rtl_Digest_AlgorithmSHA:
+ Digest = rtl_digest_createSHA();
+ break;
+
+ case rtl_Digest_AlgorithmSHA1:
+ Digest = rtl_digest_createSHA1();
+ break;
+
+ case rtl_Digest_AlgorithmHMAC_MD5:
+ Digest = rtl_digest_createHMAC_MD5();
+ break;
+
+ case rtl_Digest_AlgorithmHMAC_SHA1:
+ Digest = rtl_digest_createHMAC_SHA1();
+ break;
+
+ default: /* rtl_Digest_AlgorithmInvalid */
+ break;
+ }
+ return Digest;
+}
+
+rtlDigestAlgorithm SAL_CALL rtl_digest_queryAlgorithm(rtlDigest Digest)
+ SAL_THROW_EXTERN_C()
+{
+ Digest_Impl *pImpl = static_cast<Digest_Impl *>(Digest);
+ if (pImpl)
+ return pImpl->m_algorithm;
+ return rtl_Digest_AlgorithmInvalid;
+}
+
+sal_uInt32 SAL_CALL rtl_digest_queryLength(rtlDigest Digest)
+ SAL_THROW_EXTERN_C()
+{
+ Digest_Impl *pImpl = static_cast<Digest_Impl *>(Digest);
+ if (pImpl)
+ return pImpl->m_length;
+ return 0;
+}
+
+rtlDigestError SAL_CALL rtl_digest_init(
+ rtlDigest Digest, const sal_uInt8 *pData, sal_uInt32 nDatLen)
+ SAL_THROW_EXTERN_C()
+{
+ Digest_Impl *pImpl = static_cast<Digest_Impl *>(Digest);
+ if (pImpl)
+ {
+ if (pImpl->m_init)
+ return pImpl->m_init (Digest, pData, nDatLen);
+ return rtl_Digest_E_None;
+ }
+ return rtl_Digest_E_Argument;
+}
+
+rtlDigestError SAL_CALL rtl_digest_update(
+ rtlDigest Digest, const void *pData, sal_uInt32 nDatLen)
+ SAL_THROW_EXTERN_C()
+{
+ Digest_Impl *pImpl = static_cast<Digest_Impl *>(Digest);
+ if (pImpl && pImpl->m_update)
+ return pImpl->m_update(Digest, pData, nDatLen);
+ return rtl_Digest_E_Argument;
+}
+
+rtlDigestError SAL_CALL rtl_digest_get(
+ rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen)
+ SAL_THROW_EXTERN_C()
+{
+ Digest_Impl *pImpl = static_cast<Digest_Impl *>(Digest);
+ if (pImpl && pImpl->m_get)
+ return pImpl->m_get(Digest, pBuffer, nBufLen);
+ return rtl_Digest_E_Argument;
+}
+
+void SAL_CALL rtl_digest_destroy(rtlDigest Digest) SAL_THROW_EXTERN_C()
+{
+ Digest_Impl *pImpl = static_cast<Digest_Impl *>(Digest);
+ if (pImpl && pImpl->m_delete)
+ pImpl->m_delete(Digest);
+}
+
+constexpr auto DIGEST_CBLOCK_MD2 = 16;
+constexpr auto DIGEST_LBLOCK_MD2 = 16;
+
+namespace {
+
+struct DigestContextMD2
+{
+ sal_uInt32 m_nDatLen;
+ sal_uInt8 m_pData[DIGEST_CBLOCK_MD2];
+ sal_uInt32 m_state[DIGEST_LBLOCK_MD2];
+ sal_uInt32 m_chksum[DIGEST_LBLOCK_MD2];
+};
+
+struct DigestMD2_Impl
+{
+ Digest_Impl m_digest;
+ DigestContextMD2 m_context;
+};
+
+}
+
+static void initMD2 (DigestContextMD2 *ctx);
+static void updateMD2 (DigestContextMD2 *ctx);
+static void endMD2 (DigestContextMD2 *ctx);
+
+const sal_uInt32 S[256] =
+{
+ 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01,
+ 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13,
+ 0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C,
+ 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA,
+ 0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16,
+ 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12,
+ 0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49,
+ 0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A,
+ 0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, 0x07, 0x3F,
+ 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21,
+ 0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27,
+ 0x35, 0x3E, 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03,
+ 0xFF, 0x19, 0x30, 0xB3, 0x48, 0xA5, 0xB5, 0xD1,
+ 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, 0xAA, 0xC6,
+ 0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6,
+ 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1,
+ 0x45, 0x9D, 0x70, 0x59, 0x64, 0x71, 0x87, 0x20,
+ 0x86, 0x5B, 0xCF, 0x65, 0xE6, 0x2D, 0xA8, 0x02,
+ 0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, 0xB9, 0xF6,
+ 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F,
+ 0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A,
+ 0xC3, 0x5C, 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26,
+ 0x2C, 0x53, 0x0D, 0x6E, 0x85, 0x28, 0x84, 0x09,
+ 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, 0x4D, 0x52,
+ 0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA,
+ 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A,
+ 0x78, 0x88, 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D,
+ 0xE9, 0xCB, 0xD5, 0xFE, 0x3B, 0x00, 0x1D, 0x39,
+ 0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, 0xD0, 0xE4,
+ 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A,
+ 0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A,
+ 0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14,
+};
+
+const Digest_Impl MD2 =
+{
+ rtl_Digest_AlgorithmMD2,
+ RTL_DIGEST_LENGTH_MD2,
+ nullptr,
+ rtl_digest_destroyMD2,
+ rtl_digest_updateMD2,
+ rtl_digest_getMD2
+};
+
+static void initMD2(DigestContextMD2 *ctx)
+{
+ memset(ctx, 0, sizeof(DigestContextMD2));
+}
+
+static void updateMD2(DigestContextMD2 *ctx)
+{
+ sal_uInt8 *X;
+ sal_uInt32 *sp1, *sp2;
+ sal_uInt32 i, k, t;
+
+ sal_uInt32 state[48];
+
+ X = ctx->m_pData;
+ sp1 = ctx->m_state;
+ sp2 = ctx->m_chksum;
+
+ k = sp2[DIGEST_LBLOCK_MD2 - 1];
+ for (i = 0; i < 16; i++)
+ {
+ state[i + 0] = sp1[i];
+ state[i + 16] = t = X[i];
+ state[i + 32] = t ^ sp1[i];
+ k = sp2[i] ^= S[t^k];
+ }
+
+ t = 0;
+ for (i = 0; i < 18; i++)
+ {
+ for (k = 0; k < 48; k += 8)
+ {
+ t = state[k + 0] ^= S[t];
+ t = state[k + 1] ^= S[t];
+ t = state[k + 2] ^= S[t];
+ t = state[k + 3] ^= S[t];
+ t = state[k + 4] ^= S[t];
+ t = state[k + 5] ^= S[t];
+ t = state[k + 6] ^= S[t];
+ t = state[k + 7] ^= S[t];
+ }
+ t = ((t + i) & 0xff);
+ }
+
+ memcpy(sp1, state, 16 * sizeof(sal_uInt32));
+ rtl_secureZeroMemory(state, 48 * sizeof(sal_uInt32));
+}
+
+static void endMD2(DigestContextMD2 *ctx)
+{
+ sal_uInt8 *X;
+ sal_uInt32 *C;
+ sal_uInt32 i, n;
+
+ X = ctx->m_pData;
+ C = ctx->m_chksum;
+ n = DIGEST_CBLOCK_MD2 - ctx->m_nDatLen;
+
+ for (i = ctx->m_nDatLen; i < DIGEST_CBLOCK_MD2; i++)
+ X[i] = static_cast<sal_uInt8>(n & 0xff);
+
+ updateMD2(ctx);
+
+ for (i = 0; i < DIGEST_CBLOCK_MD2; i++)
+ X[i] = static_cast<sal_uInt8>(C[i] & 0xff);
+ updateMD2(ctx);
+}
+
+rtlDigestError SAL_CALL rtl_digest_MD2(
+ const void *pData, sal_uInt32 nDatLen,
+ sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C()
+{
+ DigestMD2_Impl digest;
+ rtlDigestError result;
+
+ digest.m_digest = MD2;
+ initMD2(&(digest.m_context));
+
+ result = rtl_digest_updateMD2(&digest, pData, nDatLen);
+ if (result == rtl_Digest_E_None)
+ result = rtl_digest_getMD2(&digest, pBuffer, nBufLen);
+
+ rtl_secureZeroMemory(&digest, sizeof(digest));
+ return result;
+}
+
+rtlDigest SAL_CALL rtl_digest_createMD2() SAL_THROW_EXTERN_C()
+{
+ DigestMD2_Impl *pImpl = RTL_DIGEST_CREATE(DigestMD2_Impl);
+ if (pImpl)
+ {
+ pImpl->m_digest = MD2;
+ initMD2(&(pImpl->m_context));
+ }
+ return static_cast<rtlDigest>(pImpl);
+}
+
+rtlDigestError SAL_CALL rtl_digest_updateMD2(
+ rtlDigest Digest, const void *pData, sal_uInt32 nDatLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestMD2_Impl *pImpl = static_cast<DigestMD2_Impl *>(Digest);
+ const sal_uInt8 *d = static_cast<const sal_uInt8 *>(pData);
+
+ DigestContextMD2 *ctx;
+
+ if (!pImpl || !pData)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD2)
+ return rtl_Digest_E_Algorithm;
+
+ if (nDatLen == 0)
+ return rtl_Digest_E_None;
+
+ ctx = &(pImpl->m_context);
+
+ if (ctx->m_nDatLen)
+ {
+ sal_uInt8 *p = ctx->m_pData + ctx->m_nDatLen;
+ sal_uInt32 n = DIGEST_CBLOCK_MD2 - ctx->m_nDatLen;
+
+ if (nDatLen < n)
+ {
+ memcpy(p, d, nDatLen);
+ ctx->m_nDatLen += nDatLen;
+
+ return rtl_Digest_E_None;
+ }
+
+ memcpy(p, d, n);
+ d += n;
+ nDatLen -= n;
+
+ updateMD2(ctx);
+ ctx->m_nDatLen = 0;
+ }
+
+ while (nDatLen >= DIGEST_CBLOCK_MD2)
+ {
+ memcpy(ctx->m_pData, d, DIGEST_CBLOCK_MD2);
+ d += DIGEST_CBLOCK_MD2;
+ nDatLen -= DIGEST_CBLOCK_MD2;
+
+ updateMD2(ctx);
+ }
+
+ memcpy(ctx->m_pData, d, nDatLen);
+ ctx->m_nDatLen = nDatLen;
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_getMD2(
+ rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestMD2_Impl *pImpl = static_cast<DigestMD2_Impl *>(Digest);
+ sal_uInt32 i;
+
+ DigestContextMD2 *ctx;
+
+ if (!pImpl || !pBuffer)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD2)
+ return rtl_Digest_E_Algorithm;
+
+ if (pImpl->m_digest.m_length > nBufLen)
+ return rtl_Digest_E_BufferSize;
+
+ ctx = &(pImpl->m_context);
+
+ endMD2(ctx);
+ for (i = 0; i < DIGEST_CBLOCK_MD2; i++)
+ {
+ pBuffer[i] = static_cast<sal_uInt8>(ctx->m_state[i] & 0xff);
+ }
+
+ initMD2(ctx);
+
+ return rtl_Digest_E_None;
+}
+
+void SAL_CALL rtl_digest_destroyMD2(rtlDigest Digest) SAL_THROW_EXTERN_C()
+{
+ DigestMD2_Impl *pImpl = static_cast<DigestMD2_Impl *>(Digest);
+ if (pImpl)
+ {
+ if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmMD2)
+ rtl_freeZeroMemory(pImpl, sizeof(DigestMD2_Impl));
+ else
+ free(pImpl);
+ }
+}
+
+#define DIGEST_CBLOCK_MD5 64
+#define DIGEST_LBLOCK_MD5 16
+
+namespace {
+
+struct DigestContextMD5
+{
+ sal_uInt32 m_nDatLen;
+ sal_uInt32 m_pData[DIGEST_LBLOCK_MD5];
+ sal_uInt32 m_nA, m_nB, m_nC, m_nD;
+ sal_uInt32 m_nL, m_nH;
+};
+
+struct DigestMD5_Impl
+{
+ Digest_Impl m_digest;
+ DigestContextMD5 m_context;
+};
+
+}
+
+static void initMD5 (DigestContextMD5 *ctx);
+static void updateMD5 (DigestContextMD5 *ctx);
+static void endMD5 (DigestContextMD5 *ctx);
+
+#define F(x,y,z) ((((y) ^ (z)) & (x)) ^ (z))
+#define G(x,y,z) ((((x) ^ (y)) & (z)) ^ (y))
+#define H(x,y,z) ((x) ^ (y) ^ (z))
+#define I(x,y,z) (((x) | (~(z))) ^ (y))
+
+#define R0(a,b,c,d,k,s,t) { \
+ a += ((k) + (t) + F((b), (c), (d))); \
+ a = RTL_DIGEST_ROTL(a, s); \
+ a += b; }
+
+#define R1(a,b,c,d,k,s,t) { \
+ a += ((k) + (t) + G((b), (c), (d))); \
+ a = RTL_DIGEST_ROTL(a, s); \
+ a += b; }
+
+#define R2(a,b,c,d,k,s,t) { \
+ a += ((k) + (t) + H((b), (c), (d))); \
+ a = RTL_DIGEST_ROTL(a, s); \
+ a += b; }
+
+#define R3(a,b,c,d,k,s,t) { \
+ a += ((k) + (t) + I((b), (c), (d))); \
+ a = RTL_DIGEST_ROTL(a, s); \
+ a += b; }
+
+const Digest_Impl MD5 =
+{
+ rtl_Digest_AlgorithmMD5,
+ RTL_DIGEST_LENGTH_MD5,
+ nullptr,
+ rtl_digest_destroyMD5,
+ rtl_digest_updateMD5,
+ rtl_digest_getMD5
+};
+
+static void initMD5(DigestContextMD5 *ctx)
+{
+ memset(ctx, 0, sizeof(DigestContextMD5));
+
+ ctx->m_nA = sal_uInt32(0x67452301L);
+ ctx->m_nB = sal_uInt32(0xefcdab89L);
+ ctx->m_nC = sal_uInt32(0x98badcfeL);
+ ctx->m_nD = sal_uInt32(0x10325476L);
+}
+
+static void updateMD5(DigestContextMD5 *ctx)
+{
+ sal_uInt32 A, B, C, D;
+ sal_uInt32 *X;
+
+ A = ctx->m_nA;
+ B = ctx->m_nB;
+ C = ctx->m_nC;
+ D = ctx->m_nD;
+ X = ctx->m_pData;
+
+ R0 (A, B, C, D, X[ 0], 7, 0xd76aa478L);
+ R0 (D, A, B, C, X[ 1], 12, 0xe8c7b756L);
+ R0 (C, D, A, B, X[ 2], 17, 0x242070dbL);
+ R0 (B, C, D, A, X[ 3], 22, 0xc1bdceeeL);
+ R0 (A, B, C, D, X[ 4], 7, 0xf57c0fafL);
+ R0 (D, A, B, C, X[ 5], 12, 0x4787c62aL);
+ R0 (C, D, A, B, X[ 6], 17, 0xa8304613L);
+ R0 (B, C, D, A, X[ 7], 22, 0xfd469501L);
+ R0 (A, B, C, D, X[ 8], 7, 0x698098d8L);
+ R0 (D, A, B, C, X[ 9], 12, 0x8b44f7afL);
+ R0 (C, D, A, B, X[10], 17, 0xffff5bb1L);
+ R0 (B, C, D, A, X[11], 22, 0x895cd7beL);
+ R0 (A, B, C, D, X[12], 7, 0x6b901122L);
+ R0 (D, A, B, C, X[13], 12, 0xfd987193L);
+ R0 (C, D, A, B, X[14], 17, 0xa679438eL);
+ R0 (B, C, D, A, X[15], 22, 0x49b40821L);
+
+ R1 (A, B, C, D, X[ 1], 5, 0xf61e2562L);
+ R1 (D, A, B, C, X[ 6], 9, 0xc040b340L);
+ R1 (C, D, A, B, X[11], 14, 0x265e5a51L);
+ R1 (B, C, D, A, X[ 0], 20, 0xe9b6c7aaL);
+ R1 (A, B, C, D, X[ 5], 5, 0xd62f105dL);
+ R1 (D, A, B, C, X[10], 9, 0x02441453L);
+ R1 (C, D, A, B, X[15], 14, 0xd8a1e681L);
+ R1 (B, C, D, A, X[ 4], 20, 0xe7d3fbc8L);
+ R1 (A, B, C, D, X[ 9], 5, 0x21e1cde6L);
+ R1 (D, A, B, C, X[14], 9, 0xc33707d6L);
+ R1 (C, D, A, B, X[ 3], 14, 0xf4d50d87L);
+ R1 (B, C, D, A, X[ 8], 20, 0x455a14edL);
+ R1 (A, B, C, D, X[13], 5, 0xa9e3e905L);
+ R1 (D, A, B, C, X[ 2], 9, 0xfcefa3f8L);
+ R1 (C, D, A, B, X[ 7], 14, 0x676f02d9L);
+ R1 (B, C, D, A, X[12], 20, 0x8d2a4c8aL);
+
+ R2 (A, B, C, D, X[ 5], 4, 0xfffa3942L);
+ R2 (D, A, B, C, X[ 8], 11, 0x8771f681L);
+ R2 (C, D, A, B, X[11], 16, 0x6d9d6122L);
+ R2 (B, C, D, A, X[14], 23, 0xfde5380cL);
+ R2 (A, B, C, D, X[ 1], 4, 0xa4beea44L);
+ R2 (D, A, B, C, X[ 4], 11, 0x4bdecfa9L);
+ R2 (C, D, A, B, X[ 7], 16, 0xf6bb4b60L);
+ R2 (B, C, D, A, X[10], 23, 0xbebfbc70L);
+ R2 (A, B, C, D, X[13], 4, 0x289b7ec6L);
+ R2 (D, A, B, C, X[ 0], 11, 0xeaa127faL);
+ R2 (C, D, A, B, X[ 3], 16, 0xd4ef3085L);
+ R2 (B, C, D, A, X[ 6], 23, 0x04881d05L);
+ R2 (A, B, C, D, X[ 9], 4, 0xd9d4d039L);
+ R2 (D, A, B, C, X[12], 11, 0xe6db99e5L);
+ R2 (C, D, A, B, X[15], 16, 0x1fa27cf8L);
+ R2 (B, C, D, A, X[ 2], 23, 0xc4ac5665L);
+
+ R3 (A, B, C, D, X[ 0], 6, 0xf4292244L);
+ R3 (D, A, B, C, X[ 7], 10, 0x432aff97L);
+ R3 (C, D, A, B, X[14], 15, 0xab9423a7L);
+ R3 (B, C, D, A, X[ 5], 21, 0xfc93a039L);
+ R3 (A, B, C, D, X[12], 6, 0x655b59c3L);
+ R3 (D, A, B, C, X[ 3], 10, 0x8f0ccc92L);
+ R3 (C, D, A, B, X[10], 15, 0xffeff47dL);
+ R3 (B, C, D, A, X[ 1], 21, 0x85845dd1L);
+ R3 (A, B, C, D, X[ 8], 6, 0x6fa87e4fL);
+ R3 (D, A, B, C, X[15], 10, 0xfe2ce6e0L);
+ R3 (C, D, A, B, X[ 6], 15, 0xa3014314L);
+ R3 (B, C, D, A, X[13], 21, 0x4e0811a1L);
+ R3 (A, B, C, D, X[ 4], 6, 0xf7537e82L);
+ R3 (D, A, B, C, X[11], 10, 0xbd3af235L);
+ R3 (C, D, A, B, X[ 2], 15, 0x2ad7d2bbL);
+ R3 (B, C, D, A, X[ 9], 21, 0xeb86d391L);
+
+ ctx->m_nA += A;
+ ctx->m_nB += B;
+ ctx->m_nC += C;
+ ctx->m_nD += D;
+}
+
+static void endMD5(DigestContextMD5 *ctx)
+{
+ static const sal_uInt8 end[4] =
+ {
+ 0x80, 0x00, 0x00, 0x00
+ };
+ const sal_uInt8 *p = end;
+
+ sal_uInt32 *X;
+ int i;
+
+ X = ctx->m_pData;
+ i = (ctx->m_nDatLen >> 2);
+
+#ifdef OSL_BIGENDIAN
+ swapLong(X, i + 1);
+#endif /* OSL_BIGENDIAN */
+
+ switch (ctx->m_nDatLen & 0x03)
+ {
+ case 1: X[i] &= 0x000000ff; break;
+ case 2: X[i] &= 0x0000ffff; break;
+ case 3: X[i] &= 0x00ffffff; break;
+ }
+
+ switch (ctx->m_nDatLen & 0x03)
+ {
+ case 0: X[i] = static_cast<sal_uInt32>(*(p++)) << 0;
+ [[fallthrough]];
+ case 1: X[i] |= static_cast<sal_uInt32>(*(p++)) << 8;
+ [[fallthrough]];
+ case 2: X[i] |= static_cast<sal_uInt32>(*(p++)) << 16;
+ [[fallthrough]];
+ case 3: X[i] |= static_cast<sal_uInt32>(*p) << 24;
+ }
+
+ i += 1;
+
+ if (i > (DIGEST_LBLOCK_MD5 - 2))
+ {
+ for (; i < DIGEST_LBLOCK_MD5; i++)
+ {
+ X[i] = 0;
+ }
+
+ updateMD5(ctx);
+ i = 0;
+ }
+
+ for (; i < (DIGEST_LBLOCK_MD5 - 2); i++)
+ X[i] = 0;
+
+ X[DIGEST_LBLOCK_MD5 - 2] = ctx->m_nL;
+ X[DIGEST_LBLOCK_MD5 - 1] = ctx->m_nH;
+
+ updateMD5(ctx);
+}
+
+rtlDigestError SAL_CALL rtl_digest_MD5(
+ const void *pData, sal_uInt32 nDatLen,
+ sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C()
+{
+ DigestMD5_Impl digest;
+ rtlDigestError result;
+
+ digest.m_digest = MD5;
+ initMD5(&(digest.m_context));
+
+ result = rtl_digest_update(&digest, pData, nDatLen);
+ if (result == rtl_Digest_E_None)
+ result = rtl_digest_getMD5(&digest, pBuffer, nBufLen);
+
+ rtl_secureZeroMemory(&digest, sizeof(digest));
+ return result;
+}
+
+rtlDigest SAL_CALL rtl_digest_createMD5() SAL_THROW_EXTERN_C()
+{
+ DigestMD5_Impl *pImpl = RTL_DIGEST_CREATE(DigestMD5_Impl);
+ if (pImpl)
+ {
+ pImpl->m_digest = MD5;
+ initMD5(&(pImpl->m_context));
+ }
+ return static_cast<rtlDigest>(pImpl);
+}
+
+rtlDigestError SAL_CALL rtl_digest_updateMD5(
+ rtlDigest Digest, const void *pData, sal_uInt32 nDatLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestMD5_Impl *pImpl = static_cast<DigestMD5_Impl *>(Digest);
+ const sal_uInt8 *d = static_cast<const sal_uInt8 *>(pData);
+
+ DigestContextMD5 *ctx;
+ sal_uInt32 len;
+
+ if (!pImpl || !pData)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD5)
+ return rtl_Digest_E_Algorithm;
+
+ if (nDatLen == 0)
+ return rtl_Digest_E_None;
+
+ ctx = &(pImpl->m_context);
+
+ len = ctx->m_nL + (nDatLen << 3);
+ if (len < ctx->m_nL)
+ ctx->m_nH += 1;
+
+ ctx->m_nH += (nDatLen >> 29);
+ ctx->m_nL = len;
+
+ if (ctx->m_nDatLen)
+ {
+ sal_uInt8 *p = reinterpret_cast<sal_uInt8 *>(ctx->m_pData) + ctx->m_nDatLen;
+ sal_uInt32 n = DIGEST_CBLOCK_MD5 - ctx->m_nDatLen;
+
+ if (nDatLen < n)
+ {
+ memcpy(p, d, nDatLen);
+ ctx->m_nDatLen += nDatLen;
+
+ return rtl_Digest_E_None;
+ }
+
+ memcpy(p, d, n);
+ d += n;
+ nDatLen -= n;
+
+#ifdef OSL_BIGENDIAN
+ swapLong(ctx->m_pData, DIGEST_LBLOCK_MD5);
+#endif /* OSL_BIGENDIAN */
+
+ updateMD5(ctx);
+ ctx->m_nDatLen = 0;
+ }
+
+ while (nDatLen >= DIGEST_CBLOCK_MD5)
+ {
+ memcpy(ctx->m_pData, d, DIGEST_CBLOCK_MD5);
+ d += DIGEST_CBLOCK_MD5;
+ nDatLen -= DIGEST_CBLOCK_MD5;
+
+#ifdef OSL_BIGENDIAN
+ swapLong(ctx->m_pData, DIGEST_LBLOCK_MD5);
+#endif /* OSL_BIGENDIAN */
+
+ updateMD5(ctx);
+ }
+
+ memcpy(ctx->m_pData, d, nDatLen);
+ ctx->m_nDatLen = nDatLen;
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_getMD5(
+ rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestMD5_Impl *pImpl = static_cast<DigestMD5_Impl *>(Digest);
+ sal_uInt8 *p = pBuffer;
+
+ DigestContextMD5 *ctx;
+
+ if (!pImpl || !pBuffer)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD5)
+ return rtl_Digest_E_Algorithm;
+
+ if (pImpl->m_digest.m_length > nBufLen)
+ return rtl_Digest_E_BufferSize;
+
+ ctx = &(pImpl->m_context);
+
+ endMD5(ctx);
+ RTL_DIGEST_LTOC(ctx->m_nA, p);
+ RTL_DIGEST_LTOC(ctx->m_nB, p);
+ RTL_DIGEST_LTOC(ctx->m_nC, p);
+ RTL_DIGEST_LTOC(ctx->m_nD, p);
+ initMD5(ctx);
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_rawMD5(
+ rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestMD5_Impl *pImpl = static_cast<DigestMD5_Impl *>(Digest);
+ sal_uInt8 *p = pBuffer;
+
+ DigestContextMD5 *ctx;
+
+ if (!pImpl || !pBuffer)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD5)
+ return rtl_Digest_E_Algorithm;
+
+ if (pImpl->m_digest.m_length > nBufLen)
+ return rtl_Digest_E_BufferSize;
+
+ ctx = &(pImpl->m_context);
+
+ /* not finalized */
+ RTL_DIGEST_LTOC(ctx->m_nA, p);
+ RTL_DIGEST_LTOC(ctx->m_nB, p);
+ RTL_DIGEST_LTOC(ctx->m_nC, p);
+ RTL_DIGEST_LTOC(ctx->m_nD, p);
+ initMD5(ctx);
+
+ return rtl_Digest_E_None;
+}
+
+void SAL_CALL rtl_digest_destroyMD5(rtlDigest Digest) SAL_THROW_EXTERN_C()
+{
+ DigestMD5_Impl *pImpl = static_cast<DigestMD5_Impl *>(Digest);
+ if (pImpl)
+ {
+ if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmMD5)
+ rtl_freeZeroMemory(pImpl, sizeof(DigestMD5_Impl));
+ else
+ free(pImpl);
+ }
+}
+
+#define DIGEST_CBLOCK_SHA 64
+#define DIGEST_LBLOCK_SHA 16
+
+typedef sal_uInt32 DigestSHA_update_t(sal_uInt32 x);
+
+static sal_uInt32 updateSHA_0(sal_uInt32 x);
+static sal_uInt32 updateSHA_1(sal_uInt32 x);
+
+namespace {
+
+struct DigestContextSHA
+{
+ DigestSHA_update_t *m_update;
+ sal_uInt32 m_nDatLen;
+ sal_uInt32 m_pData[DIGEST_LBLOCK_SHA];
+ sal_uInt32 m_nA, m_nB, m_nC, m_nD, m_nE;
+ sal_uInt32 m_nL, m_nH;
+};
+
+struct DigestSHA_Impl
+{
+ Digest_Impl m_digest;
+ DigestContextSHA m_context;
+};
+
+}
+
+static void initSHA(
+ DigestContextSHA *ctx, DigestSHA_update_t *fct);
+
+static void updateSHA(DigestContextSHA *ctx);
+static void endSHA(DigestContextSHA *ctx);
+
+#define K_00_19 sal_uInt32(0x5a827999L)
+#define K_20_39 sal_uInt32(0x6ed9eba1L)
+#define K_40_59 sal_uInt32(0x8f1bbcdcL)
+#define K_60_79 sal_uInt32(0xca62c1d6L)
+
+#define F_00_19(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
+#define F_20_39(b,c,d) ((b) ^ (c) ^ (d))
+#define F_40_59(b,c,d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
+#define F_60_79(b,c,d) F_20_39(b,c,d)
+
+#define BODY_X(i) \
+ (X[(i)&0x0f] ^ X[((i)+2)&0x0f] ^ X[((i)+8)&0x0f] ^ X[((i)+13)&0x0f])
+
+#define BODY_00_15(u,i,a,b,c,d,e,f) \
+ (f) = X[i]; \
+ (f) += (e) + K_00_19 + RTL_DIGEST_ROTL((a), 5) + F_00_19((b), (c), (d)); \
+ (b) = RTL_DIGEST_ROTL((b), 30);
+
+#define BODY_16_19(u,i,a,b,c,d,e,f) \
+ (f) = BODY_X((i)); \
+ (f) = X[(i)&0x0f] = (u)((f)); \
+ (f) += (e) + K_00_19 + RTL_DIGEST_ROTL((a), 5) + F_00_19((b), (c), (d)); \
+ (b) = RTL_DIGEST_ROTL((b), 30);
+
+#define BODY_20_39(u,i,a,b,c,d,e,f) \
+ (f) = BODY_X((i)); \
+ (f) = X[(i)&0x0f] = (u)((f)); \
+ (f) += (e) + K_20_39 + RTL_DIGEST_ROTL((a), 5) + F_20_39((b), (c), (d)); \
+ (b) = RTL_DIGEST_ROTL((b), 30);
+
+#define BODY_40_59(u,i,a,b,c,d,e,f) \
+ (f) = BODY_X((i)); \
+ (f) = X[(i)&0x0f] = (u)((f)); \
+ (f) += (e) + K_40_59 + RTL_DIGEST_ROTL((a), 5) + F_40_59((b), (c), (d)); \
+ (b) = RTL_DIGEST_ROTL((b), 30);
+
+#define BODY_60_79(u,i,a,b,c,d,e,f) \
+ (f) = BODY_X((i)); \
+ (f) = X[(i)&0x0f] = (u)((f)); \
+ (f) += (e) + K_60_79 + RTL_DIGEST_ROTL((a), 5) + F_60_79((b), (c), (d)); \
+ (b) = RTL_DIGEST_ROTL((b), 30);
+
+static void initSHA(
+ DigestContextSHA *ctx, DigestSHA_update_t *fct)
+{
+ memset(ctx, 0, sizeof(DigestContextSHA));
+ ctx->m_update = fct;
+
+ ctx->m_nA = sal_uInt32(0x67452301L);
+ ctx->m_nB = sal_uInt32(0xefcdab89L);
+ ctx->m_nC = sal_uInt32(0x98badcfeL);
+ ctx->m_nD = sal_uInt32(0x10325476L);
+ ctx->m_nE = sal_uInt32(0xc3d2e1f0L);
+}
+
+static void updateSHA(DigestContextSHA *ctx)
+{
+ sal_uInt32 A, B, C, D, E, T;
+ sal_uInt32 *X;
+
+ DigestSHA_update_t *U;
+ U = ctx->m_update;
+
+ A = ctx->m_nA;
+ B = ctx->m_nB;
+ C = ctx->m_nC;
+ D = ctx->m_nD;
+ E = ctx->m_nE;
+ X = ctx->m_pData;
+
+ BODY_00_15 (U, 0, A, B, C, D, E, T);
+ BODY_00_15 (U, 1, T, A, B, C, D, E);
+ BODY_00_15 (U, 2, E, T, A, B, C, D);
+ BODY_00_15 (U, 3, D, E, T, A, B, C);
+ BODY_00_15 (U, 4, C, D, E, T, A, B);
+ BODY_00_15 (U, 5, B, C, D, E, T, A);
+ BODY_00_15 (U, 6, A, B, C, D, E, T);
+ BODY_00_15 (U, 7, T, A, B, C, D, E);
+ BODY_00_15 (U, 8, E, T, A, B, C, D);
+ BODY_00_15 (U, 9, D, E, T, A, B, C);
+ BODY_00_15 (U, 10, C, D, E, T, A, B);
+ BODY_00_15 (U, 11, B, C, D, E, T, A);
+ BODY_00_15 (U, 12, A, B, C, D, E, T);
+ BODY_00_15 (U, 13, T, A, B, C, D, E);
+ BODY_00_15 (U, 14, E, T, A, B, C, D);
+ BODY_00_15 (U, 15, D, E, T, A, B, C);
+ BODY_16_19 (U, 16, C, D, E, T, A, B);
+ BODY_16_19 (U, 17, B, C, D, E, T, A);
+ BODY_16_19 (U, 18, A, B, C, D, E, T);
+ BODY_16_19 (U, 19, T, A, B, C, D, E);
+
+ BODY_20_39 (U, 20, E, T, A, B, C, D);
+ BODY_20_39 (U, 21, D, E, T, A, B, C);
+ BODY_20_39 (U, 22, C, D, E, T, A, B);
+ BODY_20_39 (U, 23, B, C, D, E, T, A);
+ BODY_20_39 (U, 24, A, B, C, D, E, T);
+ BODY_20_39 (U, 25, T, A, B, C, D, E);
+ BODY_20_39 (U, 26, E, T, A, B, C, D);
+ BODY_20_39 (U, 27, D, E, T, A, B, C);
+ BODY_20_39 (U, 28, C, D, E, T, A, B);
+ BODY_20_39 (U, 29, B, C, D, E, T, A);
+ BODY_20_39 (U, 30, A, B, C, D, E, T);
+ BODY_20_39 (U, 31, T, A, B, C, D, E);
+ BODY_20_39 (U, 32, E, T, A, B, C, D);
+ BODY_20_39 (U, 33, D, E, T, A, B, C);
+ BODY_20_39 (U, 34, C, D, E, T, A, B);
+ BODY_20_39 (U, 35, B, C, D, E, T, A);
+ BODY_20_39 (U, 36, A, B, C, D, E, T);
+ BODY_20_39 (U, 37, T, A, B, C, D, E);
+ BODY_20_39 (U, 38, E, T, A, B, C, D);
+ BODY_20_39 (U, 39, D, E, T, A, B, C);
+
+ BODY_40_59 (U, 40, C, D, E, T, A, B);
+ BODY_40_59 (U, 41, B, C, D, E, T, A);
+ BODY_40_59 (U, 42, A, B, C, D, E, T);
+ BODY_40_59 (U, 43, T, A, B, C, D, E);
+ BODY_40_59 (U, 44, E, T, A, B, C, D);
+ BODY_40_59 (U, 45, D, E, T, A, B, C);
+ BODY_40_59 (U, 46, C, D, E, T, A, B);
+ BODY_40_59 (U, 47, B, C, D, E, T, A);
+ BODY_40_59 (U, 48, A, B, C, D, E, T);
+ BODY_40_59 (U, 49, T, A, B, C, D, E);
+ BODY_40_59 (U, 50, E, T, A, B, C, D);
+ BODY_40_59 (U, 51, D, E, T, A, B, C);
+ BODY_40_59 (U, 52, C, D, E, T, A, B);
+ BODY_40_59 (U, 53, B, C, D, E, T, A);
+ BODY_40_59 (U, 54, A, B, C, D, E, T);
+ BODY_40_59 (U, 55, T, A, B, C, D, E);
+ BODY_40_59 (U, 56, E, T, A, B, C, D);
+ BODY_40_59 (U, 57, D, E, T, A, B, C);
+ BODY_40_59 (U, 58, C, D, E, T, A, B);
+ BODY_40_59 (U, 59, B, C, D, E, T, A);
+
+ BODY_60_79 (U, 60, A, B, C, D, E, T);
+ BODY_60_79 (U, 61, T, A, B, C, D, E);
+ BODY_60_79 (U, 62, E, T, A, B, C, D);
+ BODY_60_79 (U, 63, D, E, T, A, B, C);
+ BODY_60_79 (U, 64, C, D, E, T, A, B);
+ BODY_60_79 (U, 65, B, C, D, E, T, A);
+ BODY_60_79 (U, 66, A, B, C, D, E, T);
+ BODY_60_79 (U, 67, T, A, B, C, D, E);
+ BODY_60_79 (U, 68, E, T, A, B, C, D);
+ BODY_60_79 (U, 69, D, E, T, A, B, C);
+ BODY_60_79 (U, 70, C, D, E, T, A, B);
+ BODY_60_79 (U, 71, B, C, D, E, T, A);
+ BODY_60_79 (U, 72, A, B, C, D, E, T);
+ BODY_60_79 (U, 73, T, A, B, C, D, E);
+ BODY_60_79 (U, 74, E, T, A, B, C, D);
+ BODY_60_79 (U, 75, D, E, T, A, B, C);
+ BODY_60_79 (U, 76, C, D, E, T, A, B);
+ BODY_60_79 (U, 77, B, C, D, E, T, A);
+ BODY_60_79 (U, 78, A, B, C, D, E, T);
+ BODY_60_79 (U, 79, T, A, B, C, D, E);
+
+ ctx->m_nA += E;
+ ctx->m_nB += T;
+ ctx->m_nC += A;
+ ctx->m_nD += B;
+ ctx->m_nE += C;
+}
+
+static void endSHA(DigestContextSHA *ctx)
+{
+ static const sal_uInt8 end[4] =
+ {
+ 0x80, 0x00, 0x00, 0x00
+ };
+ const sal_uInt8 *p = end;
+
+ sal_uInt32 *X;
+ int i;
+
+ X = ctx->m_pData;
+ i = (ctx->m_nDatLen >> 2);
+
+#ifdef OSL_BIGENDIAN
+ swapLong(X, i + 1);
+#endif /* OSL_BIGENDIAN */
+
+ switch (ctx->m_nDatLen & 0x03)
+ {
+ case 1: X[i] &= 0x000000ff; break;
+ case 2: X[i] &= 0x0000ffff; break;
+ case 3: X[i] &= 0x00ffffff; break;
+ }
+
+ switch (ctx->m_nDatLen & 0x03)
+ {
+ case 0: X[i] = static_cast<sal_uInt32>(*(p++)) << 0;
+ [[fallthrough]];
+ case 1: X[i] |= static_cast<sal_uInt32>(*(p++)) << 8;
+ [[fallthrough]];
+ case 2: X[i] |= static_cast<sal_uInt32>(*(p++)) << 16;
+ [[fallthrough]];
+ case 3: X[i] |= static_cast<sal_uInt32>(*(p++)) << 24;
+ }
+
+ swapLong(X, i + 1);
+
+ i += 1;
+
+ // tdf#114939 NB: this is WRONG and should be ">" not ">=" but is not
+ // fixed as this buggy SHA1 implementation is needed for compatibility
+ if (i >= (DIGEST_LBLOCK_SHA - 2))
+ {
+ for (; i < DIGEST_LBLOCK_SHA; i++)
+ {
+ X[i] = 0;
+ }
+
+ updateSHA(ctx);
+ i = 0;
+ }
+
+ for (; i < (DIGEST_LBLOCK_SHA - 2); i++)
+ {
+ X[i] = 0;
+ }
+
+ X[DIGEST_LBLOCK_SHA - 2] = ctx->m_nH;
+ X[DIGEST_LBLOCK_SHA - 1] = ctx->m_nL;
+
+ updateSHA(ctx);
+}
+
+const Digest_Impl SHA_0 =
+{
+ rtl_Digest_AlgorithmSHA,
+ RTL_DIGEST_LENGTH_SHA,
+ nullptr,
+ rtl_digest_destroySHA,
+ rtl_digest_updateSHA,
+ rtl_digest_getSHA
+};
+
+static sal_uInt32 updateSHA_0(sal_uInt32 x)
+{
+ return x;
+}
+
+rtlDigestError SAL_CALL rtl_digest_SHA(
+ const void *pData, sal_uInt32 nDatLen,
+ sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl digest;
+ rtlDigestError result;
+
+ digest.m_digest = SHA_0;
+ initSHA(&(digest.m_context), updateSHA_0);
+
+ result = rtl_digest_updateSHA(&digest, pData, nDatLen);
+ if (result == rtl_Digest_E_None)
+ result = rtl_digest_getSHA(&digest, pBuffer, nBufLen);
+
+ rtl_secureZeroMemory(&digest, sizeof(digest));
+ return result;
+}
+
+rtlDigest SAL_CALL rtl_digest_createSHA() SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl *pImpl = RTL_DIGEST_CREATE(DigestSHA_Impl);
+ if (pImpl)
+ {
+ pImpl->m_digest = SHA_0;
+ initSHA(&(pImpl->m_context), updateSHA_0);
+ }
+ return static_cast<rtlDigest>(pImpl);
+}
+
+rtlDigestError SAL_CALL rtl_digest_updateSHA(
+ rtlDigest Digest, const void *pData, sal_uInt32 nDatLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl *pImpl = static_cast<DigestSHA_Impl *>(Digest);
+ const sal_uInt8 *d = static_cast<const sal_uInt8 *>(pData);
+
+ DigestContextSHA *ctx;
+ sal_uInt32 len;
+
+ if (!pImpl || !pData)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmSHA)
+ return rtl_Digest_E_Algorithm;
+
+ if (nDatLen == 0)
+ return rtl_Digest_E_None;
+
+ ctx = &(pImpl->m_context);
+
+ len = ctx->m_nL + (nDatLen << 3);
+ if (len < ctx->m_nL)
+ ctx->m_nH += 1;
+
+ ctx->m_nH += (nDatLen >> 29);
+ ctx->m_nL = len;
+
+ if (ctx->m_nDatLen)
+ {
+ sal_uInt8 *p = reinterpret_cast<sal_uInt8 *>(ctx->m_pData) + ctx->m_nDatLen;
+ sal_uInt32 n = DIGEST_CBLOCK_SHA - ctx->m_nDatLen;
+
+ if (nDatLen < n)
+ {
+ memcpy(p, d, nDatLen);
+ ctx->m_nDatLen += nDatLen;
+
+ return rtl_Digest_E_None;
+ }
+
+ memcpy(p, d, n);
+ d += n;
+ nDatLen -= n;
+
+#ifndef OSL_BIGENDIAN
+ swapLong(ctx->m_pData, DIGEST_LBLOCK_SHA);
+#endif /* OSL_BIGENDIAN */
+
+ updateSHA(ctx);
+ ctx->m_nDatLen = 0;
+ }
+
+ while (nDatLen >= DIGEST_CBLOCK_SHA)
+ {
+ memcpy(ctx->m_pData, d, DIGEST_CBLOCK_SHA);
+ d += DIGEST_CBLOCK_SHA;
+ nDatLen -= DIGEST_CBLOCK_SHA;
+
+#ifndef OSL_BIGENDIAN
+ swapLong(ctx->m_pData, DIGEST_LBLOCK_SHA);
+#endif /* OSL_BIGENDIAN */
+
+ updateSHA(ctx);
+ }
+
+ memcpy(ctx->m_pData, d, nDatLen);
+ ctx->m_nDatLen = nDatLen;
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_getSHA(
+ rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl *pImpl = static_cast<DigestSHA_Impl *>(Digest);
+ sal_uInt8 *p = pBuffer;
+
+ DigestContextSHA *ctx;
+
+ if (!pImpl || !pBuffer)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmSHA)
+ return rtl_Digest_E_Algorithm;
+
+ if (pImpl->m_digest.m_length > nBufLen)
+ return rtl_Digest_E_BufferSize;
+
+ ctx = &(pImpl->m_context);
+
+ endSHA(ctx);
+ RTL_DIGEST_HTONL(ctx->m_nA, p);
+ RTL_DIGEST_HTONL(ctx->m_nB, p);
+ RTL_DIGEST_HTONL(ctx->m_nC, p);
+ RTL_DIGEST_HTONL(ctx->m_nD, p);
+ RTL_DIGEST_HTONL(ctx->m_nE, p);
+ initSHA(ctx, updateSHA_0);
+
+ return rtl_Digest_E_None;
+}
+
+void SAL_CALL rtl_digest_destroySHA(rtlDigest Digest) SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl *pImpl = static_cast< DigestSHA_Impl * >(Digest);
+ if (pImpl)
+ {
+ if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmSHA)
+ rtl_freeZeroMemory(pImpl, sizeof(DigestSHA_Impl));
+ else
+ free(pImpl);
+ }
+}
+
+const Digest_Impl SHA_1 =
+{
+ rtl_Digest_AlgorithmSHA1,
+ RTL_DIGEST_LENGTH_SHA1,
+ nullptr,
+ rtl_digest_destroySHA1,
+ rtl_digest_updateSHA1,
+ rtl_digest_getSHA1
+};
+
+static sal_uInt32 updateSHA_1(sal_uInt32 x)
+{
+ return RTL_DIGEST_ROTL(x, 1);
+}
+
+rtlDigestError SAL_CALL rtl_digest_SHA1(
+ const void *pData, sal_uInt32 nDatLen,
+ sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl digest;
+ rtlDigestError result;
+
+ digest.m_digest = SHA_1;
+ initSHA(&(digest.m_context), updateSHA_1);
+
+ result = rtl_digest_updateSHA1(&digest, pData, nDatLen);
+ if (result == rtl_Digest_E_None)
+ result = rtl_digest_getSHA1(&digest, pBuffer, nBufLen);
+
+ rtl_secureZeroMemory(&digest, sizeof(digest));
+ return result;
+}
+
+rtlDigest SAL_CALL rtl_digest_createSHA1() SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl *pImpl = RTL_DIGEST_CREATE(DigestSHA_Impl);
+ if (pImpl)
+ {
+ pImpl->m_digest = SHA_1;
+ initSHA(&(pImpl->m_context), updateSHA_1);
+ }
+ return static_cast<rtlDigest>(pImpl);
+}
+
+rtlDigestError SAL_CALL rtl_digest_updateSHA1(
+ rtlDigest Digest, const void *pData, sal_uInt32 nDatLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl *pImpl = static_cast< DigestSHA_Impl * >(Digest);
+ const sal_uInt8 *d = static_cast< const sal_uInt8 * >(pData);
+
+ DigestContextSHA *ctx;
+ sal_uInt32 len;
+
+ if (!pImpl || !pData)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmSHA1)
+ return rtl_Digest_E_Algorithm;
+
+ if (nDatLen == 0)
+ return rtl_Digest_E_None;
+
+ ctx = &(pImpl->m_context);
+
+ len = ctx->m_nL + (nDatLen << 3);
+ if (len < ctx->m_nL)
+ ctx->m_nH += 1;
+
+ ctx->m_nH += (nDatLen >> 29);
+ ctx->m_nL = len;
+
+ if (ctx->m_nDatLen)
+ {
+ sal_uInt8 *p = reinterpret_cast<sal_uInt8 *>(ctx->m_pData) + ctx->m_nDatLen;
+ sal_uInt32 n = DIGEST_CBLOCK_SHA - ctx->m_nDatLen;
+
+ if (nDatLen < n)
+ {
+ memcpy(p, d, nDatLen);
+ ctx->m_nDatLen += nDatLen;
+
+ return rtl_Digest_E_None;
+ }
+
+ memcpy(p, d, n);
+ d += n;
+ nDatLen -= n;
+
+#ifndef OSL_BIGENDIAN
+ swapLong(ctx->m_pData, DIGEST_LBLOCK_SHA);
+#endif /* OSL_BIGENDIAN */
+
+ updateSHA(ctx);
+ ctx->m_nDatLen = 0;
+ }
+
+ while (nDatLen >= DIGEST_CBLOCK_SHA)
+ {
+ memcpy(ctx->m_pData, d, DIGEST_CBLOCK_SHA);
+ d += DIGEST_CBLOCK_SHA;
+ nDatLen -= DIGEST_CBLOCK_SHA;
+
+#ifndef OSL_BIGENDIAN
+ swapLong(ctx->m_pData, DIGEST_LBLOCK_SHA);
+#endif /* OSL_BIGENDIAN */
+
+ updateSHA(ctx);
+ }
+
+ memcpy(ctx->m_pData, d, nDatLen);
+ ctx->m_nDatLen = nDatLen;
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_getSHA1 (
+ rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl *pImpl = static_cast<DigestSHA_Impl *>(Digest);
+ sal_uInt8 *p = pBuffer;
+
+ DigestContextSHA *ctx;
+
+ if (!pImpl || !pBuffer)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmSHA1)
+ return rtl_Digest_E_Algorithm;
+
+ if (pImpl->m_digest.m_length > nBufLen)
+ return rtl_Digest_E_BufferSize;
+
+ ctx = &(pImpl->m_context);
+
+ endSHA(ctx);
+ RTL_DIGEST_HTONL(ctx->m_nA, p);
+ RTL_DIGEST_HTONL(ctx->m_nB, p);
+ RTL_DIGEST_HTONL(ctx->m_nC, p);
+ RTL_DIGEST_HTONL(ctx->m_nD, p);
+ RTL_DIGEST_HTONL(ctx->m_nE, p);
+ initSHA(ctx, updateSHA_1);
+
+ return rtl_Digest_E_None;
+}
+
+void SAL_CALL rtl_digest_destroySHA1(rtlDigest Digest) SAL_THROW_EXTERN_C()
+{
+ DigestSHA_Impl *pImpl = static_cast< DigestSHA_Impl * >(Digest);
+ if (pImpl)
+ {
+ if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmSHA1)
+ rtl_freeZeroMemory(pImpl, sizeof(DigestSHA_Impl));
+ else
+ free(pImpl);
+ }
+}
+
+#define DIGEST_CBLOCK_HMAC_MD5 64
+
+namespace {
+
+struct ContextHMAC_MD5
+{
+ DigestMD5_Impl m_hash;
+ sal_uInt8 m_opad[DIGEST_CBLOCK_HMAC_MD5];
+};
+
+struct DigestHMAC_MD5_Impl
+{
+ Digest_Impl m_digest;
+ ContextHMAC_MD5 m_context;
+};
+
+}
+
+static void initHMAC_MD5(ContextHMAC_MD5 * ctx);
+static void ipadHMAC_MD5(ContextHMAC_MD5 * ctx);
+static void opadHMAC_MD5(ContextHMAC_MD5 * ctx);
+
+const Digest_Impl HMAC_MD5 =
+{
+ rtl_Digest_AlgorithmHMAC_MD5,
+ RTL_DIGEST_LENGTH_MD5,
+
+ rtl_digest_initHMAC_MD5,
+ rtl_digest_destroyHMAC_MD5,
+ rtl_digest_updateHMAC_MD5,
+ rtl_digest_getHMAC_MD5
+};
+
+static void initHMAC_MD5(ContextHMAC_MD5 * ctx)
+{
+ DigestMD5_Impl *pImpl = &(ctx->m_hash);
+
+ pImpl->m_digest = MD5;
+ initMD5(&(pImpl->m_context));
+
+ memset(ctx->m_opad, 0, DIGEST_CBLOCK_HMAC_MD5);
+}
+
+static void ipadHMAC_MD5(ContextHMAC_MD5 * ctx)
+{
+ sal_uInt32 i;
+
+ for (i = 0; i < DIGEST_CBLOCK_HMAC_MD5; i++)
+ {
+ ctx->m_opad[i] ^= 0x36;
+ }
+
+ rtl_digest_updateMD5(&(ctx->m_hash), ctx->m_opad, DIGEST_CBLOCK_HMAC_MD5);
+
+ for (i = 0; i < DIGEST_CBLOCK_HMAC_MD5; i++)
+ {
+ ctx->m_opad[i] ^= 0x36;
+ }
+}
+
+static void opadHMAC_MD5(ContextHMAC_MD5 * ctx)
+{
+ sal_uInt32 i;
+
+ for (i = 0; i < DIGEST_CBLOCK_HMAC_MD5; i++)
+ {
+ ctx->m_opad[i] ^= 0x5c;
+ }
+}
+
+rtlDigestError SAL_CALL rtl_digest_HMAC_MD5(
+ const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen,
+ const void *pData, sal_uInt32 nDatLen,
+ sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_MD5_Impl digest;
+ rtlDigestError result;
+
+ digest.m_digest = HMAC_MD5;
+
+ result = rtl_digest_initHMAC_MD5(&digest, pKeyData, nKeyLen);
+ if (result == rtl_Digest_E_None)
+ {
+ result = rtl_digest_updateHMAC_MD5(&digest, pData, nDatLen);
+ if (result == rtl_Digest_E_None)
+ result = rtl_digest_getHMAC_MD5(&digest, pBuffer, nBufLen);
+ }
+
+ rtl_secureZeroMemory(&digest, sizeof(digest));
+ return result;
+}
+
+rtlDigest SAL_CALL rtl_digest_createHMAC_MD5() SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_MD5_Impl *pImpl = RTL_DIGEST_CREATE(DigestHMAC_MD5_Impl);
+ if (pImpl)
+ {
+ pImpl->m_digest = HMAC_MD5;
+ initHMAC_MD5(&(pImpl->m_context));
+ }
+ return static_cast< rtlDigest >(pImpl);
+}
+
+rtlDigestError SAL_CALL rtl_digest_initHMAC_MD5(
+ rtlDigest Digest, const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_MD5_Impl *pImpl = static_cast< DigestHMAC_MD5_Impl* >(Digest);
+ ContextHMAC_MD5 *ctx;
+
+ if (!pImpl || !pKeyData)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_MD5)
+ return rtl_Digest_E_Algorithm;
+
+ ctx = &(pImpl->m_context);
+ initHMAC_MD5(ctx);
+
+ if (nKeyLen > DIGEST_CBLOCK_HMAC_MD5)
+ {
+ /* Initialize 'opad' with hashed 'KeyData' */
+ rtl_digest_updateMD5(&(ctx->m_hash), pKeyData, nKeyLen);
+ rtl_digest_getMD5(&(ctx->m_hash), ctx->m_opad, RTL_DIGEST_LENGTH_MD5);
+ }
+ else
+ {
+ /* Initialize 'opad' with plain 'KeyData' */
+ memcpy(ctx->m_opad, pKeyData, nKeyLen);
+ }
+
+ ipadHMAC_MD5(ctx);
+ opadHMAC_MD5(ctx);
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_updateHMAC_MD5(
+ rtlDigest Digest, const void *pData, sal_uInt32 nDatLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_MD5_Impl *pImpl = static_cast< DigestHMAC_MD5_Impl* >(Digest);
+ ContextHMAC_MD5 *ctx;
+
+ if (!pImpl || !pData)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_MD5)
+ return rtl_Digest_E_Algorithm;
+
+ ctx = &(pImpl->m_context);
+ rtl_digest_updateMD5(&(ctx->m_hash), pData, nDatLen);
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_getHMAC_MD5(
+ rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_MD5_Impl *pImpl = static_cast<DigestHMAC_MD5_Impl*>(Digest);
+ ContextHMAC_MD5 *ctx;
+
+ if (!pImpl || !pBuffer)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_MD5)
+ return rtl_Digest_E_Algorithm;
+
+ if (pImpl->m_digest.m_length > nBufLen)
+ return rtl_Digest_E_BufferSize;
+
+ nBufLen = pImpl->m_digest.m_length;
+
+ ctx = &(pImpl->m_context);
+ rtl_digest_getMD5(&(ctx->m_hash), pBuffer, nBufLen);
+
+ rtl_digest_updateMD5(&(ctx->m_hash), ctx->m_opad, 64);
+ rtl_digest_updateMD5(&(ctx->m_hash), pBuffer, nBufLen);
+ rtl_digest_getMD5(&(ctx->m_hash), pBuffer, nBufLen);
+
+ opadHMAC_MD5(ctx);
+ ipadHMAC_MD5(ctx);
+ opadHMAC_MD5(ctx);
+
+ return rtl_Digest_E_None;
+}
+
+void SAL_CALL rtl_digest_destroyHMAC_MD5(rtlDigest Digest) SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_MD5_Impl *pImpl = static_cast< DigestHMAC_MD5_Impl* >(Digest);
+ if (pImpl)
+ {
+ if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmHMAC_MD5)
+ rtl_freeZeroMemory(pImpl, sizeof(DigestHMAC_MD5_Impl));
+ else
+ free(pImpl);
+ }
+}
+
+#define DIGEST_CBLOCK_HMAC_SHA1 64
+
+namespace {
+
+struct ContextHMAC_SHA1
+{
+ DigestSHA_Impl m_hash;
+ sal_uInt8 m_opad[DIGEST_CBLOCK_HMAC_SHA1];
+};
+
+struct DigestHMAC_SHA1_Impl
+{
+ Digest_Impl m_digest;
+ ContextHMAC_SHA1 m_context;
+};
+
+}
+
+static void initHMAC_SHA1(ContextHMAC_SHA1 * ctx);
+static void ipadHMAC_SHA1(ContextHMAC_SHA1 * ctx);
+static void opadHMAC_SHA1(ContextHMAC_SHA1 * ctx);
+
+const Digest_Impl HMAC_SHA1 =
+{
+ rtl_Digest_AlgorithmHMAC_SHA1,
+ RTL_DIGEST_LENGTH_SHA1,
+ rtl_digest_initHMAC_SHA1,
+ rtl_digest_destroyHMAC_SHA1,
+ rtl_digest_updateHMAC_SHA1,
+ rtl_digest_getHMAC_SHA1
+};
+
+static void initHMAC_SHA1(ContextHMAC_SHA1 * ctx)
+{
+ DigestSHA_Impl *pImpl = &(ctx->m_hash);
+
+ pImpl->m_digest = SHA_1;
+ initSHA(&(pImpl->m_context), updateSHA_1);
+
+ memset(ctx->m_opad, 0, DIGEST_CBLOCK_HMAC_SHA1);
+}
+
+static void ipadHMAC_SHA1(ContextHMAC_SHA1 * ctx)
+{
+ sal_uInt32 i;
+
+ for (i = 0; i < DIGEST_CBLOCK_HMAC_SHA1; i++)
+ {
+ ctx->m_opad[i] ^= 0x36;
+ }
+
+ rtl_digest_updateSHA1(&(ctx->m_hash), ctx->m_opad, DIGEST_CBLOCK_HMAC_SHA1);
+
+ for (i = 0; i < DIGEST_CBLOCK_HMAC_SHA1; i++)
+ {
+ ctx->m_opad[i] ^= 0x36;
+ }
+}
+
+static void opadHMAC_SHA1(ContextHMAC_SHA1 * ctx)
+{
+ sal_uInt32 i;
+
+ for (i = 0; i < DIGEST_CBLOCK_HMAC_SHA1; i++)
+ {
+ ctx->m_opad[i] ^= 0x5c;
+ }
+}
+
+rtlDigestError SAL_CALL rtl_digest_HMAC_SHA1(
+ const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen,
+ const void *pData, sal_uInt32 nDatLen,
+ sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_SHA1_Impl digest;
+ rtlDigestError result;
+
+ digest.m_digest = HMAC_SHA1;
+
+ result = rtl_digest_initHMAC_SHA1(&digest, pKeyData, nKeyLen);
+ if (result == rtl_Digest_E_None)
+ {
+ result = rtl_digest_updateHMAC_SHA1(&digest, pData, nDatLen);
+ if (result == rtl_Digest_E_None)
+ result = rtl_digest_getHMAC_SHA1(&digest, pBuffer, nBufLen);
+ }
+
+ rtl_secureZeroMemory(&digest, sizeof(digest));
+ return result;
+}
+
+rtlDigest SAL_CALL rtl_digest_createHMAC_SHA1() SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_SHA1_Impl *pImpl = RTL_DIGEST_CREATE(DigestHMAC_SHA1_Impl);
+ if (pImpl)
+ {
+ pImpl->m_digest = HMAC_SHA1;
+ initHMAC_SHA1(&(pImpl->m_context));
+ }
+ return static_cast<rtlDigest>(pImpl);
+}
+
+rtlDigestError SAL_CALL rtl_digest_initHMAC_SHA1(
+ rtlDigest Digest, const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_SHA1_Impl *pImpl = static_cast<DigestHMAC_SHA1_Impl*>(Digest);
+ ContextHMAC_SHA1 *ctx;
+
+ if (!pImpl || !pKeyData)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_SHA1)
+ return rtl_Digest_E_Algorithm;
+
+ ctx = &(pImpl->m_context);
+ initHMAC_SHA1(ctx);
+
+ if (nKeyLen > DIGEST_CBLOCK_HMAC_SHA1)
+ {
+ /* Initialize 'opad' with hashed 'KeyData' */
+ rtl_digest_updateSHA1(&(ctx->m_hash), pKeyData, nKeyLen);
+ rtl_digest_getSHA1(&(ctx->m_hash), ctx->m_opad, RTL_DIGEST_LENGTH_SHA1);
+ }
+ else
+ {
+ /* Initialize 'opad' with plain 'KeyData' */
+ memcpy(ctx->m_opad, pKeyData, nKeyLen);
+ }
+
+ ipadHMAC_SHA1(ctx);
+ opadHMAC_SHA1(ctx);
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_updateHMAC_SHA1(
+ rtlDigest Digest, const void *pData, sal_uInt32 nDatLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_SHA1_Impl *pImpl = static_cast<DigestHMAC_SHA1_Impl*>(Digest);
+ ContextHMAC_SHA1 *ctx;
+
+ if (!pImpl || !pData)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_SHA1)
+ return rtl_Digest_E_Algorithm;
+
+ ctx = &(pImpl->m_context);
+ rtl_digest_updateSHA1(&(ctx->m_hash), pData, nDatLen);
+
+ return rtl_Digest_E_None;
+}
+
+rtlDigestError SAL_CALL rtl_digest_getHMAC_SHA1(
+ rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen)
+ SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_SHA1_Impl *pImpl = static_cast<DigestHMAC_SHA1_Impl*>(Digest);
+ ContextHMAC_SHA1 *ctx;
+
+ if (!pImpl || !pBuffer)
+ return rtl_Digest_E_Argument;
+
+ if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_SHA1)
+ return rtl_Digest_E_Algorithm;
+
+ if (pImpl->m_digest.m_length > nBufLen)
+ return rtl_Digest_E_BufferSize;
+
+ nBufLen = pImpl->m_digest.m_length;
+
+ ctx = &(pImpl->m_context);
+ rtl_digest_getSHA1(&(ctx->m_hash), pBuffer, nBufLen);
+
+ rtl_digest_updateSHA1(&(ctx->m_hash), ctx->m_opad, sizeof(ctx->m_opad));
+ rtl_digest_updateSHA1(&(ctx->m_hash), pBuffer, nBufLen);
+ rtl_digest_getSHA1(&(ctx->m_hash), pBuffer, nBufLen);
+
+ opadHMAC_SHA1(ctx);
+ ipadHMAC_SHA1(ctx);
+ opadHMAC_SHA1(ctx);
+
+ return rtl_Digest_E_None;
+}
+
+void SAL_CALL rtl_digest_destroyHMAC_SHA1(rtlDigest Digest)
+ SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_SHA1_Impl *pImpl = static_cast<DigestHMAC_SHA1_Impl*>(Digest);
+ if (pImpl)
+ {
+ if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmHMAC_SHA1)
+ rtl_freeZeroMemory(pImpl, sizeof(DigestHMAC_SHA1_Impl));
+ else
+ free(pImpl);
+ }
+}
+
+#define DIGEST_CBLOCK_PBKDF2 RTL_DIGEST_LENGTH_HMAC_SHA1
+
+static void updatePBKDF2(
+ rtlDigest hDigest,
+ sal_uInt8 T[DIGEST_CBLOCK_PBKDF2],
+ const sal_uInt8 *pSaltData, sal_uInt32 nSaltLen,
+ sal_uInt32 nCount, sal_uInt32 nIndex)
+{
+ /* T_i = F (P, S, c, i) */
+ sal_uInt8 U[DIGEST_CBLOCK_PBKDF2];
+ sal_uInt32 i, k;
+
+ /* U_(1) = PRF (P, S || INDEX) */
+ rtl_digest_updateHMAC_SHA1(hDigest, pSaltData, nSaltLen);
+ rtl_digest_updateHMAC_SHA1(hDigest, &nIndex, sizeof(nIndex));
+ rtl_digest_getHMAC_SHA1(hDigest, U, DIGEST_CBLOCK_PBKDF2);
+
+ /* T = U_(1) */
+ for (k = 0; k < DIGEST_CBLOCK_PBKDF2; k++)
+ {
+ T[k] = U[k];
+ }
+
+ /* T ^= U_(2) ^ ... ^ U_(c) */
+ for (i = 1; i < nCount; i++)
+ {
+ /* U_(i) = PRF (P, U_(i-1)) */
+ rtl_digest_updateHMAC_SHA1(hDigest, U, DIGEST_CBLOCK_PBKDF2);
+ rtl_digest_getHMAC_SHA1(hDigest, U, DIGEST_CBLOCK_PBKDF2);
+
+ /* T ^= U_(i) */
+ for (k = 0; k < DIGEST_CBLOCK_PBKDF2; k++)
+ {
+ T[k] ^= U[k];
+ }
+ }
+
+ rtl_secureZeroMemory(U, DIGEST_CBLOCK_PBKDF2);
+}
+
+rtlDigestError SAL_CALL rtl_digest_PBKDF2(
+ sal_uInt8 *pKeyData , sal_uInt32 nKeyLen,
+ const sal_uInt8 *pPassData, sal_uInt32 nPassLen,
+ const sal_uInt8 *pSaltData, sal_uInt32 nSaltLen,
+ sal_uInt32 nCount) SAL_THROW_EXTERN_C()
+{
+ DigestHMAC_SHA1_Impl digest;
+ sal_uInt32 i = 1;
+
+ if (!pKeyData || !pPassData || !pSaltData)
+ return rtl_Digest_E_Argument;
+
+ digest.m_digest = HMAC_SHA1;
+ rtl_digest_initHMAC_SHA1(&digest, pPassData, nPassLen);
+
+ /* DK = T_(1) || T_(2) || ... || T_(l) */
+ while (nKeyLen >= DIGEST_CBLOCK_PBKDF2)
+ {
+ /* T_(i) = F (P, S, c, i); DK ||= T_(i) */
+ updatePBKDF2(
+ &digest, pKeyData,
+ pSaltData, nSaltLen,
+ nCount, OSL_NETDWORD(i));
+
+ /* Next 'KeyData' block */
+ pKeyData += DIGEST_CBLOCK_PBKDF2;
+ nKeyLen -= DIGEST_CBLOCK_PBKDF2;
+ i += 1;
+ }
+
+ if (nKeyLen > 0)
+ {
+ /* Last 'KeyData' block */
+ sal_uInt8 T[DIGEST_CBLOCK_PBKDF2];
+
+ /* T_i = F (P, S, c, i) */
+ updatePBKDF2(
+ &digest, T,
+ pSaltData, nSaltLen,
+ nCount, OSL_NETDWORD(i));
+
+ /* DK ||= T_(i) */
+ memcpy(pKeyData, T, nKeyLen);
+ rtl_secureZeroMemory(T, DIGEST_CBLOCK_PBKDF2);
+ }
+
+ rtl_secureZeroMemory(&digest, sizeof(digest));
+ return rtl_Digest_E_None;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/hash.cxx b/sal/rtl/hash.cxx
new file mode 100644
index 000000000..4fed60889
--- /dev/null
+++ b/sal/rtl/hash.cxx
@@ -0,0 +1,241 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <stdlib.h>
+
+#include "hash.hxx"
+#include "strimp.hxx"
+#include <osl/diagnose.h>
+#include <sal/macros.h>
+
+namespace {
+
+struct StringHashTableImpl {
+ sal_uInt32 nEntries;
+ sal_uInt32 nSize;
+ rtl_uString **pData;
+};
+
+}
+
+typedef StringHashTableImpl StringHashTable;
+
+// Only for use in the implementation
+static StringHashTable *rtl_str_hash_new(sal_uInt32 nSize);
+static void rtl_str_hash_free(StringHashTable *pHash);
+
+static StringHashTable * getHashTable()
+{
+ static StringHashTable* pInternPool = rtl_str_hash_new(1024);
+ return pInternPool;
+}
+
+// Better / smaller / faster hash set...
+
+// TODO: add bottom bit-set list terminator to string list
+
+static sal_uInt32 getNextSize(sal_uInt32 nSize)
+{
+ // Sedgewick - Algorithms in C P577.
+ static const sal_uInt32 nPrimes[] = { 1021, 2039, 4093, 8191, 16381, 32749,
+ 65521, 131071,262139, 524287, 1048573,
+ 2097143, 4194301, 8388593, 16777213,
+ 33554393, 67108859, 134217689 };
+
+ for (sal_uInt32 nPrime : nPrimes)
+ {
+ if (nPrime > nSize)
+ return nPrime;
+ }
+ return nSize * 2;
+}
+
+static sal_uInt32 hashString(rtl_uString *pString)
+{
+ return static_cast<sal_uInt32>(rtl_ustr_hashCode_WithLength(pString->buffer,
+ pString->length));
+}
+
+static StringHashTable * rtl_str_hash_new(sal_uInt32 nSize)
+{
+ StringHashTable *pHash = static_cast<StringHashTable *>(malloc(sizeof(StringHashTable)));
+
+ pHash->nEntries = 0;
+ pHash->nSize = getNextSize (nSize);
+ pHash->pData = static_cast< rtl_uString ** >(calloc(sizeof(rtl_uString *), pHash->nSize));
+
+ return pHash;
+}
+
+static void rtl_str_hash_free(StringHashTable *pHash)
+{
+ if (!pHash)
+ return;
+
+ if (pHash->pData)
+ free(pHash->pData);
+
+ free(pHash);
+}
+
+static void
+rtl_str_hash_insert_nonequal(StringHashTable *pHash,
+ rtl_uString *pString)
+{
+ sal_uInt32 nHash = hashString(pString);
+ sal_uInt32 n;
+
+ n = nHash % pHash->nSize;
+ while (pHash->pData[n])
+ {
+ n++;
+ if (n >= pHash->nSize)
+ n = 0;
+ }
+ pHash->pData[n] = pString;
+}
+
+static void rtl_str_hash_resize(sal_uInt32 nNewSize)
+{
+ sal_uInt32 i;
+ StringHashTable *pNewHash;
+ StringHashTable *pHash = getHashTable();
+
+ OSL_ASSERT(nNewSize > pHash->nEntries);
+
+ pNewHash = rtl_str_hash_new(nNewSize);
+
+ for (i = 0; i < pHash->nSize; i++)
+ {
+ if (pHash->pData[i])
+ rtl_str_hash_insert_nonequal(pNewHash, pHash->pData[i]);
+ }
+
+ pNewHash->nEntries = pHash->nEntries;
+ free(pHash->pData);
+ *pHash = *pNewHash;
+ pNewHash->pData = nullptr;
+ rtl_str_hash_free(pNewHash);
+}
+
+static bool compareEqual(rtl_uString *pStringA, rtl_uString *pStringB)
+{
+ if (pStringA == pStringB)
+ return true;
+
+ if (pStringA->length != pStringB->length)
+ return false;
+
+ return !rtl_ustr_compare_WithLength( pStringA->buffer, pStringA->length,
+ pStringB->buffer, pStringB->length);
+}
+
+rtl_uString * rtl_str_hash_intern (
+ rtl_uString *pString,
+ int can_return)
+{
+ sal_uInt32 nHash = hashString(pString);
+ sal_uInt32 n;
+ rtl_uString *pHashStr;
+
+ StringHashTable *pHash = getHashTable();
+
+ // Should we resize ?
+ if (pHash->nEntries >= pHash->nSize/2)
+ rtl_str_hash_resize(getNextSize(pHash->nSize));
+
+ n = nHash % pHash->nSize;
+ while ((pHashStr = pHash->pData[n]))
+ {
+ if (compareEqual(pHashStr, pString))
+ {
+ rtl_uString_acquire(pHashStr);
+ return pHashStr;
+ }
+
+ n++;
+ if (n >= pHash->nSize)
+ n = 0;
+ }
+
+ if (!can_return)
+ {
+ rtl_uString *pCopy = nullptr;
+ rtl_uString_newFromString( &pCopy, pString );
+ pString = pCopy;
+
+ if (!pString)
+ return nullptr;
+ }
+
+ if (!SAL_STRING_IS_STATIC(pString))
+ pString->refCount |= SAL_STRING_INTERN_FLAG;
+
+ pHash->pData[n] = pString;
+ pHash->nEntries++;
+
+ return pString;
+}
+
+void rtl_str_hash_remove(rtl_uString *pString)
+{
+ sal_uInt32 n;
+ sal_uInt32 nHash = hashString(pString);
+ rtl_uString *pHashStr;
+
+ StringHashTable *pHash = getHashTable();
+
+ n = nHash % pHash->nSize;
+ while ((pHashStr = pHash->pData[n]))
+ {
+ if (compareEqual(pHashStr, pString))
+ break;
+
+ n++;
+
+ if (n >= pHash->nSize)
+ n = 0;
+ }
+
+ OSL_ASSERT(pHash->pData[n]);
+ if (!pHash->pData[n])
+ return;
+
+ pHash->pData[n++] = nullptr;
+ pHash->nEntries--;
+
+ if (n >= pHash->nSize)
+ n = 0;
+
+ while ((pHashStr = pHash->pData[n]))
+ {
+ pHash->pData[n] = nullptr;
+ // FIXME: rather unsophisticated and N^2 in chain-length, but robust.
+ rtl_str_hash_insert_nonequal(pHash, pHashStr);
+ n++;
+
+ if (n >= pHash->nSize)
+ n = 0;
+ }
+ // FIXME: Should we down-size ?
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/hash.hxx b/sal/rtl/hash.hxx
new file mode 100644
index 000000000..9f80448e7
--- /dev/null
+++ b/sal/rtl/hash.hxx
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_RTL_HASH_HXX
+#define INCLUDED_SAL_RTL_HASH_HXX
+
+#include <rtl/ustring.h>
+
+/* These functions are not multi-thread safe: */
+
+rtl_uString *rtl_str_hash_intern (rtl_uString *pString,
+ int can_return);
+void rtl_str_hash_remove (rtl_uString *pString);
+
+#endif // INCLUDED_SAL_RTL_HASH_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/locale.cxx b/sal/rtl/locale.cxx
new file mode 100644
index 000000000..742041ac1
--- /dev/null
+++ b/sal/rtl/locale.cxx
@@ -0,0 +1,136 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdlib.h>
+#include <rtl/locale.h>
+
+#include <osl/diagnose.h>
+
+#include <rtllifecycle.h>
+#include <memory>
+#include <unordered_map>
+
+namespace {
+
+struct locale_deleter
+{
+ void operator() (rtl_Locale* p) noexcept
+ {
+ rtl_uString_release(p->Language);
+ rtl_uString_release(p->Country);
+ rtl_uString_release(p->Variant);
+ delete p;
+ }
+};
+
+}
+
+using locale_unique_ptr = std::unique_ptr<rtl_Locale, locale_deleter>;
+
+static std::unordered_map<sal_Int32, locale_unique_ptr> g_aLocaleTable;
+
+static rtl_Locale* g_pDefaultLocale = nullptr;
+
+void rtl_locale_init()
+{
+}
+
+void rtl_locale_fini()
+{
+ g_aLocaleTable.clear();
+ g_pDefaultLocale = nullptr;
+}
+
+rtl_Locale * SAL_CALL rtl_locale_register(const sal_Unicode * language, const sal_Unicode * country, const sal_Unicode * variant)
+{
+ sal_Unicode c = 0;
+ rtl_uString* sLanguage = nullptr;
+ rtl_uString* sCountry = nullptr;
+ rtl_uString* sVariant = nullptr;
+ sal_Int32 hashCode = -1;
+
+ if (!country)
+ country = &c;
+
+ if (!variant)
+ variant = &c;
+
+ ensureLocaleSingleton();
+
+ hashCode = rtl_ustr_hashCode(language) ^ rtl_ustr_hashCode(country) ^ rtl_ustr_hashCode(variant);
+
+ auto it = g_aLocaleTable.find(hashCode);
+ if (it != g_aLocaleTable.end())
+ return it->second.get();
+
+ rtl_uString_newFromStr(&sLanguage, language);
+ rtl_uString_newFromStr(&sCountry, country);
+ rtl_uString_newFromStr(&sVariant, variant);
+
+ locale_unique_ptr newLocale(new rtl_Locale);
+
+ newLocale->Language = sLanguage;
+ newLocale->Country = sCountry;
+ newLocale->Variant = sVariant;
+ newLocale->HashCode = hashCode;
+
+ auto ret = newLocale.get();
+ g_aLocaleTable.insert(it, std::pair<sal_Int32, locale_unique_ptr>( hashCode, std::move(newLocale) ) );
+ return ret;
+}
+
+rtl_Locale * SAL_CALL rtl_locale_getDefault()
+{
+ return g_pDefaultLocale;
+}
+
+void SAL_CALL rtl_locale_setDefault(const sal_Unicode * language, const sal_Unicode * country, const sal_Unicode * variant)
+{
+ g_pDefaultLocale = rtl_locale_register(language, country, variant);
+}
+
+rtl_uString * SAL_CALL rtl_locale_getLanguage(rtl_Locale * This)
+{
+ rtl_uString_acquire(This->Language);
+ return This->Language;
+}
+
+rtl_uString * SAL_CALL rtl_locale_getCountry(rtl_Locale * This)
+{
+ rtl_uString_acquire(This->Country);
+ return This->Country;
+}
+
+rtl_uString * SAL_CALL rtl_locale_getVariant(rtl_Locale * This)
+{
+ rtl_uString_acquire(This->Variant);
+ return This->Variant;
+}
+
+sal_Int32 SAL_CALL rtl_locale_hashCode(rtl_Locale * This)
+{
+ return This->HashCode;
+}
+
+sal_Int32 SAL_CALL rtl_locale_equals(rtl_Locale * This, rtl_Locale * obj)
+{
+ return This == obj;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx
new file mode 100644
index 000000000..0d70e9718
--- /dev/null
+++ b/sal/rtl/math.cxx
@@ -0,0 +1,828 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <rtl/math.h>
+
+#include <o3tl/safeint.hxx>
+#include <osl/diagnose.h>
+#include <rtl/character.hxx>
+#include <rtl/math.hxx>
+
+#include <algorithm>
+#include <cassert>
+#include <cfenv>
+#include <cmath>
+#include <float.h>
+#include <limits>
+#include <limits.h>
+#include <math.h>
+#include <memory>
+#include <stdlib.h>
+
+#include "strtmpl.hxx"
+
+#include <dtoa.h>
+
+constexpr int minExp = -323, maxExp = 308;
+constexpr double n10s[] = {
+ 1e-323, 1e-322, 1e-321, 1e-320, 1e-319, 1e-318, 1e-317, 1e-316, 1e-315, 1e-314, 1e-313, 1e-312,
+ 1e-311, 1e-310, 1e-309, 1e-308, 1e-307, 1e-306, 1e-305, 1e-304, 1e-303, 1e-302, 1e-301, 1e-300,
+ 1e-299, 1e-298, 1e-297, 1e-296, 1e-295, 1e-294, 1e-293, 1e-292, 1e-291, 1e-290, 1e-289, 1e-288,
+ 1e-287, 1e-286, 1e-285, 1e-284, 1e-283, 1e-282, 1e-281, 1e-280, 1e-279, 1e-278, 1e-277, 1e-276,
+ 1e-275, 1e-274, 1e-273, 1e-272, 1e-271, 1e-270, 1e-269, 1e-268, 1e-267, 1e-266, 1e-265, 1e-264,
+ 1e-263, 1e-262, 1e-261, 1e-260, 1e-259, 1e-258, 1e-257, 1e-256, 1e-255, 1e-254, 1e-253, 1e-252,
+ 1e-251, 1e-250, 1e-249, 1e-248, 1e-247, 1e-246, 1e-245, 1e-244, 1e-243, 1e-242, 1e-241, 1e-240,
+ 1e-239, 1e-238, 1e-237, 1e-236, 1e-235, 1e-234, 1e-233, 1e-232, 1e-231, 1e-230, 1e-229, 1e-228,
+ 1e-227, 1e-226, 1e-225, 1e-224, 1e-223, 1e-222, 1e-221, 1e-220, 1e-219, 1e-218, 1e-217, 1e-216,
+ 1e-215, 1e-214, 1e-213, 1e-212, 1e-211, 1e-210, 1e-209, 1e-208, 1e-207, 1e-206, 1e-205, 1e-204,
+ 1e-203, 1e-202, 1e-201, 1e-200, 1e-199, 1e-198, 1e-197, 1e-196, 1e-195, 1e-194, 1e-193, 1e-192,
+ 1e-191, 1e-190, 1e-189, 1e-188, 1e-187, 1e-186, 1e-185, 1e-184, 1e-183, 1e-182, 1e-181, 1e-180,
+ 1e-179, 1e-178, 1e-177, 1e-176, 1e-175, 1e-174, 1e-173, 1e-172, 1e-171, 1e-170, 1e-169, 1e-168,
+ 1e-167, 1e-166, 1e-165, 1e-164, 1e-163, 1e-162, 1e-161, 1e-160, 1e-159, 1e-158, 1e-157, 1e-156,
+ 1e-155, 1e-154, 1e-153, 1e-152, 1e-151, 1e-150, 1e-149, 1e-148, 1e-147, 1e-146, 1e-145, 1e-144,
+ 1e-143, 1e-142, 1e-141, 1e-140, 1e-139, 1e-138, 1e-137, 1e-136, 1e-135, 1e-134, 1e-133, 1e-132,
+ 1e-131, 1e-130, 1e-129, 1e-128, 1e-127, 1e-126, 1e-125, 1e-124, 1e-123, 1e-122, 1e-121, 1e-120,
+ 1e-119, 1e-118, 1e-117, 1e-116, 1e-115, 1e-114, 1e-113, 1e-112, 1e-111, 1e-110, 1e-109, 1e-108,
+ 1e-107, 1e-106, 1e-105, 1e-104, 1e-103, 1e-102, 1e-101, 1e-100, 1e-99, 1e-98, 1e-97, 1e-96,
+ 1e-95, 1e-94, 1e-93, 1e-92, 1e-91, 1e-90, 1e-89, 1e-88, 1e-87, 1e-86, 1e-85, 1e-84,
+ 1e-83, 1e-82, 1e-81, 1e-80, 1e-79, 1e-78, 1e-77, 1e-76, 1e-75, 1e-74, 1e-73, 1e-72,
+ 1e-71, 1e-70, 1e-69, 1e-68, 1e-67, 1e-66, 1e-65, 1e-64, 1e-63, 1e-62, 1e-61, 1e-60,
+ 1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52, 1e-51, 1e-50, 1e-49, 1e-48,
+ 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, 1e-39, 1e-38, 1e-37, 1e-36,
+ 1e-35, 1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24,
+ 1e-23, 1e-22, 1e-21, 1e-20, 1e-19, 1e-18, 1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12,
+ 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0,
+ 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12,
+ 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23, 1e24,
+ 1e25, 1e26, 1e27, 1e28, 1e29, 1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36,
+ 1e37, 1e38, 1e39, 1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48,
+ 1e49, 1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59, 1e60,
+ 1e61, 1e62, 1e63, 1e64, 1e65, 1e66, 1e67, 1e68, 1e69, 1e70, 1e71, 1e72,
+ 1e73, 1e74, 1e75, 1e76, 1e77, 1e78, 1e79, 1e80, 1e81, 1e82, 1e83, 1e84,
+ 1e85, 1e86, 1e87, 1e88, 1e89, 1e90, 1e91, 1e92, 1e93, 1e94, 1e95, 1e96,
+ 1e97, 1e98, 1e99, 1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108,
+ 1e109, 1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119, 1e120,
+ 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129, 1e130, 1e131, 1e132,
+ 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139, 1e140, 1e141, 1e142, 1e143, 1e144,
+ 1e145, 1e146, 1e147, 1e148, 1e149, 1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156,
+ 1e157, 1e158, 1e159, 1e160, 1e161, 1e162, 1e163, 1e164, 1e165, 1e166, 1e167, 1e168,
+ 1e169, 1e170, 1e171, 1e172, 1e173, 1e174, 1e175, 1e176, 1e177, 1e178, 1e179, 1e180,
+ 1e181, 1e182, 1e183, 1e184, 1e185, 1e186, 1e187, 1e188, 1e189, 1e190, 1e191, 1e192,
+ 1e193, 1e194, 1e195, 1e196, 1e197, 1e198, 1e199, 1e200, 1e201, 1e202, 1e203, 1e204,
+ 1e205, 1e206, 1e207, 1e208, 1e209, 1e210, 1e211, 1e212, 1e213, 1e214, 1e215, 1e216,
+ 1e217, 1e218, 1e219, 1e220, 1e221, 1e222, 1e223, 1e224, 1e225, 1e226, 1e227, 1e228,
+ 1e229, 1e230, 1e231, 1e232, 1e233, 1e234, 1e235, 1e236, 1e237, 1e238, 1e239, 1e240,
+ 1e241, 1e242, 1e243, 1e244, 1e245, 1e246, 1e247, 1e248, 1e249, 1e250, 1e251, 1e252,
+ 1e253, 1e254, 1e255, 1e256, 1e257, 1e258, 1e259, 1e260, 1e261, 1e262, 1e263, 1e264,
+ 1e265, 1e266, 1e267, 1e268, 1e269, 1e270, 1e271, 1e272, 1e273, 1e274, 1e275, 1e276,
+ 1e277, 1e278, 1e279, 1e280, 1e281, 1e282, 1e283, 1e284, 1e285, 1e286, 1e287, 1e288,
+ 1e289, 1e290, 1e291, 1e292, 1e293, 1e294, 1e295, 1e296, 1e297, 1e298, 1e299, 1e300,
+ 1e301, 1e302, 1e303, 1e304, 1e305, 1e306, 1e307, 1e308,
+};
+static_assert(SAL_N_ELEMENTS(n10s) == maxExp - minExp + 1);
+
+// return pow(10.0,nExp) optimized for exponents in the interval [-323,308] (i.e., incl. denormals)
+static double getN10Exp(int nExp)
+{
+ if (nExp < minExp || nExp > maxExp)
+ return pow(10.0, static_cast<double>(nExp)); // will return 0 or INF with IEEE 754
+ return n10s[nExp - minExp];
+}
+
+namespace {
+
+/** If value (passed as absolute value) is an integer representable as double,
+ which we handle explicitly at some places.
+ */
+bool isRepresentableInteger(double fAbsValue)
+{
+ assert(fAbsValue >= 0.0);
+ const sal_Int64 kMaxInt = (static_cast< sal_Int64 >(1) << 53) - 1;
+ if (fAbsValue <= static_cast< double >(kMaxInt))
+ {
+ sal_Int64 nInt = static_cast< sal_Int64 >(fAbsValue);
+ // Check the integer range again because double comparison may yield
+ // true within the precision range.
+ // XXX loplugin:fpcomparison complains about floating-point comparison
+ // for static_cast<double>(nInt) == fAbsValue, though we actually want
+ // this here.
+ if (nInt > kMaxInt)
+ return false;
+ double fInt = static_cast< double >(nInt);
+ return !(fInt < fAbsValue) && !(fInt > fAbsValue);
+ }
+ return false;
+}
+
+// Returns 1-based index of least significant bit in a number, or zero if number is zero
+int findFirstSetBit(unsigned n)
+{
+#if defined _WIN32
+ unsigned long pos;
+ unsigned char bNonZero = _BitScanForward(&pos, n);
+ return (bNonZero == 0) ? 0 : pos + 1;
+#else
+ return __builtin_ffs(n);
+#endif
+}
+
+/** Returns number of binary bits for fractional part of the number
+ Expects a proper non-negative double value, not +-INF, not NAN
+ */
+int getBitsInFracPart(double fAbsValue)
+{
+ assert(std::isfinite(fAbsValue) && fAbsValue >= 0.0);
+ if (fAbsValue == 0.0)
+ return 0;
+ auto pValParts = reinterpret_cast< const sal_math_Double * >(&fAbsValue);
+ int nExponent = pValParts->inf_parts.exponent - 1023;
+ if (nExponent >= 52)
+ return 0; // All bits in fraction are in integer part of the number
+ int nLeastSignificant = findFirstSetBit(pValParts->inf_parts.fraction_lo);
+ if (nLeastSignificant == 0)
+ {
+ nLeastSignificant = findFirstSetBit(pValParts->inf_parts.fraction_hi);
+ if (nLeastSignificant == 0)
+ nLeastSignificant = 53; // the implied leading 1 is the least significant
+ else
+ nLeastSignificant += 32;
+ }
+ int nFracSignificant = 53 - nLeastSignificant;
+ int nBitsInFracPart = nFracSignificant - nExponent;
+
+ return std::max(nBitsInFracPart, 0);
+}
+
+}
+
+void SAL_CALL rtl_math_doubleToString(rtl_String ** pResult,
+ sal_Int32 * pResultCapacity,
+ sal_Int32 nResultOffset, double fValue,
+ rtl_math_StringFormat eFormat,
+ sal_Int32 nDecPlaces,
+ char cDecSeparator,
+ sal_Int32 const * pGroups,
+ char cGroupSeparator,
+ sal_Bool bEraseTrailingDecZeros)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::doubleToString(
+ pResult, pResultCapacity, nResultOffset, fValue, eFormat, nDecPlaces,
+ cDecSeparator, pGroups, cGroupSeparator, bEraseTrailingDecZeros);
+}
+
+void SAL_CALL rtl_math_doubleToUString(rtl_uString ** pResult,
+ sal_Int32 * pResultCapacity,
+ sal_Int32 nResultOffset, double fValue,
+ rtl_math_StringFormat eFormat,
+ sal_Int32 nDecPlaces,
+ sal_Unicode cDecSeparator,
+ sal_Int32 const * pGroups,
+ sal_Unicode cGroupSeparator,
+ sal_Bool bEraseTrailingDecZeros)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::doubleToString(
+ pResult, pResultCapacity, nResultOffset, fValue, eFormat, nDecPlaces,
+ cDecSeparator, pGroups, cGroupSeparator, bEraseTrailingDecZeros);
+}
+
+namespace {
+
+template< typename CharT >
+double stringToDouble(CharT const * pBegin, CharT const * pEnd,
+ CharT cDecSeparator, CharT cGroupSeparator,
+ rtl_math_ConversionStatus * pStatus,
+ CharT const ** pParsedEnd)
+{
+ double fVal = 0.0;
+ rtl_math_ConversionStatus eStatus = rtl_math_ConversionStatus_Ok;
+
+ CharT const * p0 = pBegin;
+ while (p0 != pEnd && (*p0 == CharT(' ') || *p0 == CharT('\t')))
+ {
+ ++p0;
+ }
+
+ bool bSign;
+ bool explicitSign = false;
+ if (p0 != pEnd && *p0 == CharT('-'))
+ {
+ bSign = true;
+ explicitSign = true;
+ ++p0;
+ }
+ else
+ {
+ bSign = false;
+ if (p0 != pEnd && *p0 == CharT('+'))
+ {
+ explicitSign = true;
+ ++p0;
+ }
+ }
+
+ CharT const * p = p0;
+ bool bDone = false;
+
+ // #i112652# XMLSchema-2
+ if ((pEnd - p) >= 3)
+ {
+ if (!explicitSign && (CharT('N') == p[0]) && (CharT('a') == p[1])
+ && (CharT('N') == p[2]))
+ {
+ p += 3;
+ fVal = std::numeric_limits<double>::quiet_NaN();
+ bDone = true;
+ }
+ else if ((CharT('I') == p[0]) && (CharT('N') == p[1])
+ && (CharT('F') == p[2]))
+ {
+ p += 3;
+ fVal = HUGE_VAL;
+ eStatus = rtl_math_ConversionStatus_OutOfRange;
+ bDone = true;
+ }
+ }
+
+ if (!bDone) // do not recognize e.g. NaN1.23
+ {
+ std::unique_ptr<char[]> bufInHeap;
+ std::unique_ptr<const CharT * []> bufInHeapMap;
+ constexpr int bufOnStackSize = 256;
+ char bufOnStack[bufOnStackSize];
+ const CharT* bufOnStackMap[bufOnStackSize];
+ char* buf = bufOnStack;
+ const CharT** bufmap = bufOnStackMap;
+ int bufpos = 0;
+ const size_t bufsize = pEnd - p + (bSign ? 2 : 1);
+ if (bufsize > bufOnStackSize)
+ {
+ bufInHeap = std::make_unique<char[]>(bufsize);
+ bufInHeapMap = std::make_unique<const CharT*[]>(bufsize);
+ buf = bufInHeap.get();
+ bufmap = bufInHeapMap.get();
+ }
+
+ if (bSign)
+ {
+ buf[0] = '-';
+ bufmap[0] = p; // yes, this may be the same pointer as for the next mapping
+ bufpos = 1;
+ }
+ // Put first zero to buffer for strings like "-0"
+ if (p != pEnd && *p == CharT('0'))
+ {
+ buf[bufpos] = '0';
+ bufmap[bufpos] = p;
+ ++bufpos;
+ ++p;
+ }
+ // Leading zeros and group separators between digits may be safely
+ // ignored. p0 < p implies that there was a leading 0 already,
+ // consecutive group separators may not happen as *(p+1) is checked for
+ // digit.
+ while (p != pEnd && (*p == CharT('0') || (*p == cGroupSeparator
+ && p0 < p && p+1 < pEnd && rtl::isAsciiDigit(*(p+1)))))
+ {
+ ++p;
+ }
+
+ // integer part of mantissa
+ for (; p != pEnd; ++p)
+ {
+ CharT c = *p;
+ if (rtl::isAsciiDigit(c))
+ {
+ buf[bufpos] = static_cast<char>(c);
+ bufmap[bufpos] = p;
+ ++bufpos;
+ }
+ else if (c != cGroupSeparator)
+ {
+ break;
+ }
+ else if (p == p0 || (p+1 == pEnd) || !rtl::isAsciiDigit(*(p+1)))
+ {
+ // A leading or trailing (not followed by a digit) group
+ // separator character is not a group separator.
+ break;
+ }
+ }
+
+ // fraction part of mantissa
+ if (p != pEnd && *p == cDecSeparator)
+ {
+ buf[bufpos] = '.';
+ bufmap[bufpos] = p;
+ ++bufpos;
+ ++p;
+
+ for (; p != pEnd; ++p)
+ {
+ CharT c = *p;
+ if (!rtl::isAsciiDigit(c))
+ {
+ break;
+ }
+ buf[bufpos] = static_cast<char>(c);
+ bufmap[bufpos] = p;
+ ++bufpos;
+ }
+ }
+
+ // Exponent
+ if (p != p0 && p != pEnd && (*p == CharT('E') || *p == CharT('e')))
+ {
+ buf[bufpos] = 'E';
+ bufmap[bufpos] = p;
+ ++bufpos;
+ ++p;
+ if (p != pEnd && *p == CharT('-'))
+ {
+ buf[bufpos] = '-';
+ bufmap[bufpos] = p;
+ ++bufpos;
+ ++p;
+ }
+ else if (p != pEnd && *p == CharT('+'))
+ ++p;
+
+ for (; p != pEnd; ++p)
+ {
+ CharT c = *p;
+ if (!rtl::isAsciiDigit(c))
+ break;
+
+ buf[bufpos] = static_cast<char>(c);
+ bufmap[bufpos] = p;
+ ++bufpos;
+ }
+ }
+ else if (p - p0 == 2 && p != pEnd && p[0] == CharT('#')
+ && p[-1] == cDecSeparator && p[-2] == CharT('1'))
+ {
+ if (pEnd - p >= 4 && p[1] == CharT('I') && p[2] == CharT('N')
+ && p[3] == CharT('F'))
+ {
+ // "1.#INF", "+1.#INF", "-1.#INF"
+ p += 4;
+ fVal = HUGE_VAL;
+ eStatus = rtl_math_ConversionStatus_OutOfRange;
+ // Eat any further digits:
+ while (p != pEnd && rtl::isAsciiDigit(*p))
+ ++p;
+ bDone = true;
+ }
+ else if (pEnd - p >= 4 && p[1] == CharT('N') && p[2] == CharT('A')
+ && p[3] == CharT('N'))
+ {
+ // "1.#NAN", "+1.#NAN", "-1.#NAN"
+ p += 4;
+ fVal = std::copysign(std::numeric_limits<double>::quiet_NaN(), bSign ? -1.0 : 1.0);
+ bSign = false; // don't negate again
+
+ // Eat any further digits:
+ while (p != pEnd && rtl::isAsciiDigit(*p))
+ {
+ ++p;
+ }
+ bDone = true;
+ }
+ }
+
+ if (!bDone)
+ {
+ buf[bufpos] = '\0';
+ bufmap[bufpos] = p;
+ char* pCharParseEnd;
+ errno = 0;
+ fVal = strtod_nolocale(buf, &pCharParseEnd);
+ if (errno == ERANGE)
+ {
+ // Check for the dreaded rounded to 15 digits max value
+ // 1.79769313486232e+308 for 1.7976931348623157e+308 we wrote
+ // everywhere, accept with or without plus sign in exponent.
+ const char* b = buf;
+ if (b[0] == '-')
+ ++b;
+ if (((pCharParseEnd - b == 21) || (pCharParseEnd - b == 20))
+ && !strncmp( b, "1.79769313486232", 16)
+ && (b[16] == 'e' || b[16] == 'E')
+ && (((pCharParseEnd - b == 21) && !strncmp( b+17, "+308", 4))
+ || ((pCharParseEnd - b == 20) && !strncmp( b+17, "308", 3))))
+ {
+ fVal = (buf < b) ? -DBL_MAX : DBL_MAX;
+ }
+ else
+ {
+ eStatus = rtl_math_ConversionStatus_OutOfRange;
+ }
+ }
+ p = bufmap[pCharParseEnd - buf];
+ bSign = false;
+ }
+ }
+
+ // overflow also if more than DBL_MAX_10_EXP digits without decimal
+ // separator, or 0. and more than DBL_MIN_10_EXP digits, ...
+ bool bHuge = fVal == HUGE_VAL; // g++ 3.0.1 requires it this way...
+ if (bHuge)
+ eStatus = rtl_math_ConversionStatus_OutOfRange;
+
+ if (bSign)
+ fVal = -fVal;
+
+ if (pStatus)
+ *pStatus = eStatus;
+
+ if (pParsedEnd)
+ *pParsedEnd = p == p0 ? pBegin : p;
+
+ return fVal;
+}
+
+}
+
+double SAL_CALL rtl_math_stringToDouble(char const * pBegin,
+ char const * pEnd,
+ char cDecSeparator,
+ char cGroupSeparator,
+ rtl_math_ConversionStatus * pStatus,
+ char const ** pParsedEnd)
+ SAL_THROW_EXTERN_C()
+{
+ return stringToDouble(
+ reinterpret_cast<unsigned char const *>(pBegin),
+ reinterpret_cast<unsigned char const *>(pEnd),
+ static_cast<unsigned char>(cDecSeparator),
+ static_cast<unsigned char>(cGroupSeparator), pStatus,
+ reinterpret_cast<unsigned char const **>(pParsedEnd));
+}
+
+double SAL_CALL rtl_math_uStringToDouble(sal_Unicode const * pBegin,
+ sal_Unicode const * pEnd,
+ sal_Unicode cDecSeparator,
+ sal_Unicode cGroupSeparator,
+ rtl_math_ConversionStatus * pStatus,
+ sal_Unicode const ** pParsedEnd)
+ SAL_THROW_EXTERN_C()
+{
+ return stringToDouble(pBegin, pEnd, cDecSeparator, cGroupSeparator, pStatus,
+ pParsedEnd);
+}
+
+double SAL_CALL rtl_math_round(double fValue, int nDecPlaces,
+ enum rtl_math_RoundingMode eMode)
+ SAL_THROW_EXTERN_C()
+{
+ if (!std::isfinite(fValue))
+ return fValue;
+
+ if (fValue == 0.0)
+ return fValue;
+
+ if (nDecPlaces == 0)
+ {
+ switch (eMode)
+ {
+ case rtl_math_RoundingMode_Corrected:
+ return std::round(fValue);
+ case rtl_math_RoundingMode_HalfEven:
+ if (const int oldMode = std::fegetround(); std::fesetround(FE_TONEAREST) == 0)
+ {
+ fValue = std::nearbyint(fValue);
+ std::fesetround(oldMode);
+ return fValue;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ const double fOrigValue = fValue;
+
+ // sign adjustment
+ bool bSign = std::signbit( fValue );
+ if (bSign)
+ fValue = -fValue;
+
+ // Rounding to decimals between integer distance precision (gaps) does not
+ // make sense, do not even try to multiply/divide and introduce inaccuracy.
+ // For same reasons, do not attempt to round integers to decimals.
+ if (nDecPlaces >= 0
+ && (fValue >= 0x1p52
+ || isRepresentableInteger(fValue)))
+ return fOrigValue;
+
+ double fFac = 0;
+ if (nDecPlaces != 0)
+ {
+ if (nDecPlaces > 0)
+ {
+ // Determine how many decimals are representable in the precision.
+ // Anything greater 2^52 and 0.0 was already ruled out above.
+ // Theoretically 0.5, 0.25, 0.125, 0.0625, 0.03125, ...
+ const sal_math_Double* pd = reinterpret_cast<const sal_math_Double*>(&fValue);
+ const sal_Int32 nDec = 52 - (pd->parts.exponent - 1023);
+
+ if (nDec <= 0)
+ {
+ assert(!"Shouldn't this had been caught already as large number?");
+ return fOrigValue;
+ }
+
+ if (nDec < nDecPlaces)
+ nDecPlaces = nDec;
+ }
+
+ // Avoid 1e-5 (1.0000000000000001e-05) and such inaccurate fractional
+ // factors that later when dividing back spoil things. For negative
+ // decimals divide first with the inverse, then multiply the rounded
+ // value back.
+ fFac = getN10Exp(abs(nDecPlaces));
+
+ if (fFac == 0.0 || (nDecPlaces < 0 && !std::isfinite(fFac)))
+ // Underflow, rounding to that many integer positions would be 0.
+ return 0.0;
+
+ if (!std::isfinite(fFac))
+ // Overflow with very small values and high number of decimals.
+ return fOrigValue;
+
+ if (nDecPlaces < 0)
+ fValue /= fFac;
+ else
+ fValue *= fFac;
+
+ if (!std::isfinite(fValue))
+ return fOrigValue;
+ }
+
+ // Round only if not already in distance precision gaps of integers, where
+ // for [2^52,2^53) adding 0.5 would even yield the next representable
+ // integer.
+ if (fValue < 0x1p52)
+ {
+ switch ( eMode )
+ {
+ case rtl_math_RoundingMode_Corrected :
+ fValue = rtl::math::approxFloor(fValue + 0.5);
+ break;
+ case rtl_math_RoundingMode_Down:
+ fValue = rtl::math::approxFloor(fValue);
+ break;
+ case rtl_math_RoundingMode_Up:
+ fValue = rtl::math::approxCeil(fValue);
+ break;
+ case rtl_math_RoundingMode_Floor:
+ fValue = bSign ? rtl::math::approxCeil(fValue)
+ : rtl::math::approxFloor( fValue );
+ break;
+ case rtl_math_RoundingMode_Ceiling:
+ fValue = bSign ? rtl::math::approxFloor(fValue)
+ : rtl::math::approxCeil(fValue);
+ break;
+ case rtl_math_RoundingMode_HalfDown :
+ {
+ double f = floor(fValue);
+ fValue = ((fValue - f) <= 0.5) ? f : ceil(fValue);
+ }
+ break;
+ case rtl_math_RoundingMode_HalfUp:
+ {
+ double f = floor(fValue);
+ fValue = ((fValue - f) < 0.5) ? f : ceil(fValue);
+ }
+ break;
+ case rtl_math_RoundingMode_HalfEven:
+#if defined FLT_ROUNDS
+ /*
+ Use fast version. FLT_ROUNDS may be defined to a function by some compilers!
+
+ DBL_EPSILON is the smallest fractional number which can be represented,
+ its reciprocal is therefore the smallest number that cannot have a
+ fractional part. Once you add this reciprocal to `x', its fractional part
+ is stripped off. Simply subtracting the reciprocal back out returns `x'
+ without its fractional component.
+ Simple, clever, and elegant - thanks to Ross Cottrell, the original author,
+ who placed it into public domain.
+
+ volatile: prevent compiler from being too smart
+ */
+ if (FLT_ROUNDS == 1)
+ {
+ volatile double x = fValue + 1.0 / DBL_EPSILON;
+ fValue = x - 1.0 / DBL_EPSILON;
+ }
+ else
+#endif // FLT_ROUNDS
+ {
+ double f = floor(fValue);
+ if ((fValue - f) != 0.5)
+ {
+ fValue = floor( fValue + 0.5 );
+ }
+ else
+ {
+ double g = f / 2.0;
+ fValue = (g == floor( g )) ? f : (f + 1.0);
+ }
+ }
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ }
+
+ if (nDecPlaces != 0)
+ {
+ if (nDecPlaces < 0)
+ fValue *= fFac;
+ else
+ fValue /= fFac;
+ }
+
+ if (!std::isfinite(fValue))
+ return fOrigValue;
+
+ return bSign ? -fValue : fValue;
+}
+
+double SAL_CALL rtl_math_pow10Exp(double fValue, int nExp) SAL_THROW_EXTERN_C()
+{
+ return fValue * getN10Exp(nExp);
+}
+
+double SAL_CALL rtl_math_approxValue( double fValue ) SAL_THROW_EXTERN_C()
+{
+ const double fBigInt = 0x1p41; // 2^41 -> only 11 bits left for fractional part, fine as decimal
+ if (fValue == 0.0 || fValue == HUGE_VAL || !std::isfinite( fValue) || fValue > fBigInt)
+ {
+ // We don't handle these conditions. Bail out.
+ return fValue;
+ }
+
+ double fOrigValue = fValue;
+
+ bool bSign = std::signbit(fValue);
+ if (bSign)
+ fValue = -fValue;
+
+ // If the value is either integer representable as double,
+ // or only has small number of bits in fraction part, then we need not do any approximation
+ if (isRepresentableInteger(fValue) || getBitsInFracPart(fValue) <= 11)
+ return fOrigValue;
+
+ int nExp = static_cast< int >(floor(log10(fValue)));
+ nExp = 14 - nExp;
+ double fExpValue = getN10Exp(abs(nExp));
+
+ if (nExp < 0)
+ fValue /= fExpValue;
+ else
+ fValue *= fExpValue;
+
+ // If the original value was near DBL_MIN we got an overflow. Restore and
+ // bail out.
+ if (!std::isfinite(fValue))
+ return fOrigValue;
+
+ fValue = std::round(fValue);
+
+ if (nExp < 0)
+ fValue *= fExpValue;
+ else
+ fValue /= fExpValue;
+
+ // If the original value was near DBL_MAX we got an overflow. Restore and
+ // bail out.
+ if (!std::isfinite(fValue))
+ return fOrigValue;
+
+ return bSign ? -fValue : fValue;
+}
+
+bool SAL_CALL rtl_math_approxEqual(double a, double b) SAL_THROW_EXTERN_C()
+{
+ static const double e48 = 0x1p-48;
+ static const double e44 = 0x1p-44;
+
+ if (a == b)
+ return true;
+
+ if (a == 0.0 || b == 0.0)
+ return false;
+
+ const double d = fabs(a - b);
+ if (!std::isfinite(d))
+ return false; // Nan or Inf involved
+
+ a = fabs(a);
+ if (d > (a * e44))
+ return false;
+ b = fabs(b);
+ if (d > (b * e44))
+ return false;
+
+ if (isRepresentableInteger(d) && isRepresentableInteger(a) && isRepresentableInteger(b))
+ return false; // special case for representable integers.
+
+ return (d < a * e48 && d < b * e48);
+}
+
+double SAL_CALL rtl_math_expm1(double fValue) SAL_THROW_EXTERN_C()
+{
+ return expm1(fValue);
+}
+
+double SAL_CALL rtl_math_log1p(double fValue) SAL_THROW_EXTERN_C()
+{
+#ifdef __APPLE__
+ if (fValue == -0.0)
+ return fValue; // macOS 10.8 libc returns 0.0 for -0.0
+#endif
+
+ return log1p(fValue);
+}
+
+double SAL_CALL rtl_math_atanh(double fValue) SAL_THROW_EXTERN_C()
+{
+ return ::atanh(fValue);
+}
+
+/** Parent error function (erf) */
+double SAL_CALL rtl_math_erf(double x) SAL_THROW_EXTERN_C()
+{
+ return erf(x);
+}
+
+/** Parent complementary error function (erfc) */
+double SAL_CALL rtl_math_erfc(double x) SAL_THROW_EXTERN_C()
+{
+ return erfc(x);
+}
+
+/** improved accuracy of asinh for |x| large and for x near zero
+ @see #i97605#
+ */
+double SAL_CALL rtl_math_asinh(double fX) SAL_THROW_EXTERN_C()
+{
+ if ( fX == 0.0 )
+ return 0.0;
+
+ double fSign = 1.0;
+ if ( fX < 0.0 )
+ {
+ fX = - fX;
+ fSign = -1.0;
+ }
+
+ if ( fX < 0.125 )
+ return fSign * rtl_math_log1p( fX + fX*fX / (1.0 + sqrt( 1.0 + fX*fX)));
+
+ if ( fX < 1.25e7 )
+ return fSign * log( fX + sqrt( 1.0 + fX*fX));
+
+ return fSign * log( 2.0*fX);
+}
+
+/** improved accuracy of acosh for x large and for x near 1
+ @see #i97605#
+ */
+double SAL_CALL rtl_math_acosh(double fX) SAL_THROW_EXTERN_C()
+{
+ volatile double fZ = fX - 1.0;
+ if (fX < 1.0)
+ return std::numeric_limits<double>::quiet_NaN();
+ if ( fX == 1.0 )
+ return 0.0;
+
+ if ( fX < 1.1 )
+ return rtl_math_log1p( fZ + sqrt( fZ*fZ + 2.0*fZ));
+
+ if ( fX < 1.25e7 )
+ return log( fX + sqrt( fX*fX - 1.0));
+
+ return log( 2.0*fX);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/random.cxx b/sal/rtl/random.cxx
new file mode 100644
index 000000000..418358b22
--- /dev/null
+++ b/sal/rtl/random.cxx
@@ -0,0 +1,310 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cmath>
+
+#include <sal/types.h>
+#include <o3tl/temporary.hxx>
+#include <osl/thread.h>
+#include <osl/thread.hxx>
+#include <osl/time.h>
+#include <rtl/alloc.h>
+#include <rtl/digest.h>
+#include <rtl/random.h>
+#include <oslrandom.h>
+
+#define RTL_RANDOM_RNG_1(a) ((a) * 16807L)
+#define RTL_RANDOM_RNG_2(a) ((a) * 65539L)
+
+#define RTL_RANDOM_RNG(x, y, z) \
+{ \
+ (x) = 170 * ((x) % 178) - 63 * ((x) / 178); \
+ if ((x) < 0) (x) += 30328; \
+ \
+ (y) = 171 * ((y) % 177) - 2 * ((y) / 177); \
+ if ((y) < 0) (y) += 30269; \
+ \
+ (z) = 172 * ((z) % 176) - 35 * ((z) / 176); \
+ if ((z) < 0) (z) += 30307; \
+}
+
+namespace {
+
+struct RandomData_Impl
+{
+ sal_Int16 m_nX;
+ sal_Int16 m_nY;
+ sal_Int16 m_nZ;
+};
+
+}
+
+static double data (RandomData_Impl *pImpl);
+
+#define RTL_RANDOM_DIGEST rtl_Digest_AlgorithmMD5
+#define RTL_RANDOM_SIZE_DIGEST RTL_DIGEST_LENGTH_MD5
+#define RTL_RANDOM_SIZE_POOL 1023
+
+namespace {
+
+struct RandomPool_Impl
+{
+ rtlDigest m_hDigest;
+ sal_uInt8 m_pDigest[RTL_RANDOM_SIZE_DIGEST];
+ sal_uInt8 m_pData[RTL_RANDOM_SIZE_POOL + 1];
+ sal_uInt32 m_nData;
+ sal_uInt32 m_nIndex;
+ sal_uInt32 m_nCount;
+};
+
+}
+
+static bool initPool(RandomPool_Impl *pImpl);
+
+static void seedPool(
+ RandomPool_Impl *pImpl, const sal_uInt8 *pBuffer, sal_Size nBufLen);
+
+static void readPool(
+ RandomPool_Impl *pImpl, sal_uInt8 *pBuffer, sal_Size nBufLen);
+
+static double data(RandomData_Impl *pImpl)
+{
+ double random;
+
+ RTL_RANDOM_RNG (pImpl->m_nX, pImpl->m_nY, pImpl->m_nZ);
+ random = ((static_cast<double>(pImpl->m_nX) / 30328.0) +
+ (static_cast<double>(pImpl->m_nY) / 30269.0) +
+ (static_cast<double>(pImpl->m_nZ) / 30307.0) );
+
+ return std::modf(random, &o3tl::temporary(double()));
+}
+
+static bool initPool(RandomPool_Impl *pImpl)
+{
+ pImpl->m_hDigest = rtl_digest_create(RTL_RANDOM_DIGEST);
+ if (pImpl->m_hDigest)
+ {
+ oslThreadIdentifier tid;
+ TimeValue tv;
+ RandomData_Impl rd;
+ double seed;
+
+ /* The use of uninitialized stack variables as a way to
+ * enhance the entropy of the random pool triggers
+ * memory checkers like purify and valgrind.
+ */
+
+ /*
+ seedPool (pImpl, (sal_uInt8*)&tid, sizeof(tid));
+ seedPool (pImpl, (sal_uInt8*)&tv, sizeof(tv));
+ seedPool (pImpl, (sal_uInt8*)&rd, sizeof(rd));
+ */
+
+ tid = osl::Thread::getCurrentIdentifier();
+ tid = RTL_RANDOM_RNG_2(RTL_RANDOM_RNG_1(tid));
+ seedPool (pImpl, reinterpret_cast< sal_uInt8* >(&tid), sizeof(tid));
+
+ osl_getSystemTime (&tv);
+ tv.Seconds = RTL_RANDOM_RNG_2(tv.Seconds);
+ tv.Nanosec = RTL_RANDOM_RNG_2(tv.Nanosec);
+ seedPool (pImpl, reinterpret_cast< sal_uInt8* >(&tv), sizeof(tv));
+
+ rd.m_nX = static_cast<sal_Int16>(((tid >> 1) << 1) + 1);
+ rd.m_nY = static_cast<sal_Int16>(((tv.Seconds >> 1) << 1) + 1);
+ rd.m_nZ = static_cast<sal_Int16>(((tv.Nanosec >> 1) << 1) + 1);
+ seedPool (pImpl, reinterpret_cast< sal_uInt8* >(&rd), sizeof(rd));
+
+ while (pImpl->m_nData < RTL_RANDOM_SIZE_POOL)
+ {
+ seed = data (&rd);
+ seedPool (pImpl, reinterpret_cast< sal_uInt8* >(&seed), sizeof(seed));
+ }
+ return true;
+ }
+ return false;
+}
+
+static void seedPool(
+ RandomPool_Impl *pImpl, const sal_uInt8 *pBuffer, sal_Size nBufLen)
+{
+ sal_Size i;
+ sal_sSize j, k;
+
+ for (i = 0; i < nBufLen; i += RTL_RANDOM_SIZE_DIGEST)
+ {
+ j = nBufLen - i;
+ if (j > RTL_RANDOM_SIZE_DIGEST)
+ j = RTL_RANDOM_SIZE_DIGEST;
+
+ rtl_digest_update(
+ pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST);
+
+ k = (pImpl->m_nIndex + j) - RTL_RANDOM_SIZE_POOL;
+ if (k > 0)
+ {
+ rtl_digest_update(
+ pImpl->m_hDigest, &(pImpl->m_pData[pImpl->m_nIndex]), j - k);
+ rtl_digest_update(
+ pImpl->m_hDigest, &(pImpl->m_pData[0]), k);
+ }
+ else
+ {
+ rtl_digest_update(
+ pImpl->m_hDigest, &(pImpl->m_pData[pImpl->m_nIndex]), j);
+ }
+
+ rtl_digest_update(pImpl->m_hDigest, pBuffer, j);
+ pBuffer += j;
+
+ rtl_digest_get(
+ pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST);
+ for (k = 0; k < j; k++)
+ {
+ pImpl->m_pData[pImpl->m_nIndex++] ^= pImpl->m_pDigest[k];
+ if (pImpl->m_nIndex >= RTL_RANDOM_SIZE_POOL)
+ {
+ pImpl->m_nData = RTL_RANDOM_SIZE_POOL;
+ pImpl->m_nIndex = 0;
+ }
+ }
+ }
+
+ if (pImpl->m_nIndex > pImpl->m_nData)
+ pImpl->m_nData = pImpl->m_nIndex;
+}
+
+static void readPool (
+ RandomPool_Impl *pImpl, sal_uInt8 *pBuffer, sal_Size nBufLen)
+{
+ sal_Int32 j, k;
+
+ while (nBufLen > 0)
+ {
+ j = nBufLen;
+ if (j > RTL_RANDOM_SIZE_DIGEST/2)
+ j = RTL_RANDOM_SIZE_DIGEST/2;
+ nBufLen -= j;
+
+ rtl_digest_update(
+ pImpl->m_hDigest,
+ &(pImpl->m_pDigest[RTL_RANDOM_SIZE_DIGEST/2]),
+ RTL_RANDOM_SIZE_DIGEST/2);
+
+ k = (pImpl->m_nIndex + j) - pImpl->m_nData;
+ if (k > 0)
+ {
+ rtl_digest_update(
+ pImpl->m_hDigest, &(pImpl->m_pData[pImpl->m_nIndex]), j - k);
+ rtl_digest_update(
+ pImpl->m_hDigest, &(pImpl->m_pData[0]), k);
+ }
+ else
+ {
+ rtl_digest_update(
+ pImpl->m_hDigest, &(pImpl->m_pData[pImpl->m_nIndex]), j);
+ }
+
+ rtl_digest_get(
+ pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST);
+ for (k = 0; k < j; k++)
+ {
+ if (pImpl->m_nIndex >= pImpl->m_nData)
+ pImpl->m_nIndex = 0;
+
+ pImpl->m_pData[pImpl->m_nIndex++] ^= pImpl->m_pDigest[k];
+ *pBuffer++ = pImpl->m_pDigest[k + RTL_RANDOM_SIZE_DIGEST/2];
+ }
+ }
+
+ pImpl->m_nCount++;
+ rtl_digest_update(
+ pImpl->m_hDigest, &(pImpl->m_nCount), sizeof(pImpl->m_nCount));
+ rtl_digest_update(
+ pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST);
+ rtl_digest_get(
+ pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST);
+}
+
+rtlRandomPool SAL_CALL rtl_random_createPool() SAL_THROW_EXTERN_C()
+{
+ /* try to get system random number, if it fail fall back on own pool */
+ RandomPool_Impl *pImpl = static_cast< RandomPool_Impl* >(rtl_allocateZeroMemory(sizeof(RandomPool_Impl)));
+ if (pImpl)
+ {
+ char sanity[4];
+ if (!osl_get_system_random_data(sanity, 4))
+ {
+ if (!initPool(pImpl))
+ {
+ rtl_freeZeroMemory(pImpl, sizeof(RandomPool_Impl));
+ pImpl = nullptr;
+ }
+ }
+ }
+ return static_cast< rtlRandomPool >(pImpl);
+}
+
+void SAL_CALL rtl_random_destroyPool(rtlRandomPool Pool) SAL_THROW_EXTERN_C()
+{
+ RandomPool_Impl *pImpl = static_cast< RandomPool_Impl* >(Pool);
+ if (pImpl)
+ {
+ if (pImpl->m_hDigest)
+ rtl_digest_destroy(pImpl->m_hDigest);
+
+ rtl_freeZeroMemory (pImpl, sizeof(RandomPool_Impl));
+ }
+}
+
+rtlRandomError SAL_CALL rtl_random_addBytes(
+ rtlRandomPool Pool, const void *Buffer, sal_Size Bytes) SAL_THROW_EXTERN_C()
+{
+ RandomPool_Impl *pImpl = static_cast< RandomPool_Impl* >(Pool);
+ const sal_uInt8 *pBuffer = static_cast< const sal_uInt8* >(Buffer);
+
+ if (!pImpl || !pBuffer)
+ return rtl_Random_E_Argument;
+
+ if (pImpl->m_hDigest)
+ seedPool (pImpl, pBuffer, Bytes);
+
+ return rtl_Random_E_None;
+}
+
+rtlRandomError SAL_CALL rtl_random_getBytes (
+ rtlRandomPool Pool, void *Buffer, sal_Size Bytes) SAL_THROW_EXTERN_C()
+{
+ RandomPool_Impl *pImpl = static_cast< RandomPool_Impl* >(Pool);
+ sal_uInt8 *pBuffer = static_cast< sal_uInt8* >(Buffer);
+
+ if (!pImpl || !pBuffer)
+ return rtl_Random_E_Argument;
+
+ if (pImpl->m_hDigest || !osl_get_system_random_data(static_cast< char* >(Buffer), Bytes))
+ {
+ if (!pImpl->m_hDigest && !initPool(pImpl))
+ return rtl_Random_E_Unknown;
+ readPool(pImpl, pBuffer, Bytes);
+ }
+ return rtl_Random_E_None;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/rtl_process.cxx b/sal/rtl/rtl_process.cxx
new file mode 100644
index 000000000..76963dc13
--- /dev/null
+++ b/sal/rtl/rtl_process.cxx
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cstring>
+
+#include <rtl/process.h>
+#include <rtl/uuid.h>
+#include <sal/types.h>
+
+namespace
+{
+
+class Id
+{
+public:
+ Id() { rtl_createUuid(uuid_, nullptr, false); }
+
+ Id(const Id&) = delete;
+ Id& operator=(const Id&) = delete;
+
+ void copy(sal_uInt8 * target) const
+ { std::memcpy(target, uuid_, UUID_SIZE); }
+
+private:
+ enum { UUID_SIZE = 16 };
+
+ sal_uInt8 uuid_[UUID_SIZE];
+};
+
+} // end namespace
+
+void rtl_getGlobalProcessId(sal_uInt8 * pTargetUUID)
+{
+ static Id theId;
+ theId.copy(pTargetUUID);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/strbuf.cxx b/sal/rtl/strbuf.cxx
new file mode 100644
index 000000000..7ba25ff4a
--- /dev/null
+++ b/sal/rtl/strbuf.cxx
@@ -0,0 +1,83 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <string.h>
+
+#include <osl/interlck.h>
+#include <rtl/strbuf.hxx>
+#include "strimp.hxx"
+
+#if USE_SDT_PROBES
+#define RTL_LOG_STRING_BITS 8
+#endif
+
+#include "strtmpl.hxx"
+
+/*************************************************************************
+ * rtl_stringbuffer_newFromStr_WithLength
+ */
+void SAL_CALL rtl_stringbuffer_newFromStr_WithLength( rtl_String ** newStr,
+ const char * value,
+ sal_Int32 count )
+{
+ rtl::str::stringbuffer_newFromStr_WithLength(newStr, value, count);
+}
+
+/*************************************************************************
+ * rtl_stringbuffer_newFromStringBuffer
+ */
+sal_Int32 SAL_CALL rtl_stringbuffer_newFromStringBuffer( rtl_String ** newStr,
+ sal_Int32 capacity,
+ rtl_String * oldStr )
+{
+ return rtl::str::stringbuffer_newFromStringBuffer(newStr, capacity, oldStr);
+}
+
+/*************************************************************************
+ * rtl_stringbuffer_ensureCapacity
+ */
+void SAL_CALL rtl_stringbuffer_ensureCapacity
+ (rtl_String ** This, sal_Int32* capacity, sal_Int32 minimumCapacity)
+{
+ rtl::str::stringbuffer_ensureCapacity(This, capacity, minimumCapacity);
+}
+
+/*************************************************************************
+ * rtl_stringbuffer_insert
+ */
+void SAL_CALL rtl_stringbuffer_insert( rtl_String ** This,
+ sal_Int32 * capacity,
+ sal_Int32 offset,
+ const char * str,
+ sal_Int32 len )
+{
+ rtl::str::stringbuffer_insert(This, capacity, offset, str, len);
+}
+
+/*************************************************************************
+ * rtl_stringbuffer_remove
+ */
+void SAL_CALL rtl_stringbuffer_remove( rtl_String ** This,
+ sal_Int32 start,
+ sal_Int32 len )
+{
+ rtl::str::stringbuffer_remove(This, start, len);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/strimp.cxx b/sal/rtl/strimp.cxx
new file mode 100644
index 000000000..44b56023d
--- /dev/null
+++ b/sal/rtl/strimp.cxx
@@ -0,0 +1,90 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#include <sal/config.h>
+
+#include <assert.h>
+#include <rtl/alloc.h>
+#include <rtl/ustring.h>
+#include <rtllifecycle.h>
+
+#include "strimp.hxx"
+#include "alloc_impl.hxx"
+#include "alloc_arena.hxx"
+
+/*
+ * TODO: add a slower, more awful, but more space efficient
+ * custom allocator for the pre-init phase. Existing slab
+ * allocator's minimum alloc size is 24bytes, and by default
+ * is 32 bytes.
+ */
+static rtl_arena_type *pre_arena = nullptr;
+
+rtl_allocateStringFn rtl_allocateString = malloc;
+rtl_freeStringFn rtl_freeString = free;
+
+extern "C" {
+static void *pre_allocateStringFn(size_t n)
+{
+ sal_Size size = RTL_MEMORY_ALIGN(n + 4, 4);
+ char *addr = static_cast<char*>(rtl_arena_alloc(pre_arena, &size));
+ assert(size>= 12);
+ reinterpret_cast<sal_uInt32*>(addr)[0] = size - 12;
+ return addr + 4;
+}
+
+static void pre_freeStringFn(void *data)
+{
+ char *addr = static_cast<char*>(data) - 4;
+ sal_uInt32 size = reinterpret_cast<sal_uInt32*>(addr)[0] + 12;
+
+ rtl_arena_free(pre_arena, addr, size);
+}
+} // extern "C"
+
+static void mark_static(void *addr, sal_Size /* size */)
+{
+ char *inner = static_cast<char*>(addr) + 4;
+ rtl_uString *str = reinterpret_cast<rtl_uString *>(inner);
+ str->refCount |= SAL_STRING_STATIC_FLAG;
+}
+
+void SAL_CALL rtl_alloc_preInit (sal_Bool start) SAL_THROW_EXTERN_C()
+{
+ if (start)
+ {
+ rtl_allocateString = pre_allocateStringFn;
+ rtl_freeString = pre_freeStringFn;
+ pre_arena = rtl_arena_create("pre-init strings", 4, 0,
+ nullptr, rtl_arena_alloc,
+ rtl_arena_free, 0);
+
+ // To be consistent (and to ensure the rtl_cache threads are started).
+ ensureCacheSingleton();
+ }
+ else
+ {
+ rtl_arena_foreach(pre_arena, mark_static);
+ rtl_allocateString = malloc;
+ rtl_freeString = free;
+
+ // TODO: also re-initialize main allocator as well.
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/strimp.hxx b/sal/rtl/strimp.hxx
new file mode 100644
index 000000000..69404e0aa
--- /dev/null
+++ b/sal/rtl/strimp.hxx
@@ -0,0 +1,92 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_RTL_STRIMP_HXX
+#define INCLUDED_SAL_RTL_STRIMP_HXX
+
+#include <config_probes.h>
+#if USE_SDT_PROBES
+#include <sys/sdt.h>
+#endif
+
+#include <sal/types.h>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+
+/* ======================================================================= */
+/* Help functions for String and UString */
+/* ======================================================================= */
+
+/*
+ * refCount is opaque and includes 2 bit-fields;
+ * MSB: 'interned' - is stored in the intern hash
+ * MSB-1: 'static' - is a const / static string,
+ * do no ref counting
+ */
+#define SAL_STRING_INTERN_FLAG 0x80000000
+#define SAL_STRING_STATIC_FLAG 0x40000000
+#define SAL_STRING_REFCOUNT(a) ((a) & 0x3fffffff)
+
+#define SAL_STRING_IS_INTERN(a) ((a)->refCount & SAL_STRING_INTERN_FLAG)
+#define SAL_STRING_IS_STATIC(a) ((a)->refCount & SAL_STRING_STATIC_FLAG)
+
+rtl_uString* rtl_uString_ImplAlloc( sal_Int32 nLen );
+
+rtl_String* rtl_string_ImplAlloc( sal_Int32 nLen );
+
+extern "C" {
+
+typedef void *(SAL_CALL * rtl_allocateStringFn)(size_t size);
+typedef void (*rtl_freeStringFn)(void *);
+
+}
+
+extern rtl_allocateStringFn rtl_allocateString;
+extern rtl_freeStringFn rtl_freeString;
+
+// string lifetime instrumentation / diagnostics
+#if USE_SDT_PROBES
+# define PROBE_SNAME(n,b) n ## _ ## b
+# define PROBE_NAME(n,b) PROBE_SNAME(n,b)
+# define PROBE_NEW PROBE_NAME (new_string,RTL_LOG_STRING_BITS)
+# define PROBE_DEL PROBE_NAME (delete_string,RTL_LOG_STRING_BITS)
+# define PROBE_INTERN_NEW PROBE_NAME (new_string_intern,RTL_LOG_STRING_BITS)
+# define PROBE_INTERN_DEL PROBE_NAME (delete_string_intern,RTL_LOG_STRING_BITS)
+# define RTL_LOG_STRING_NEW(s) \
+ DTRACE_PROBE4(libreoffice, PROBE_NEW, s, \
+ (s)->refCount, (s)->length, (s)->buffer)
+# define RTL_LOG_STRING_DELETE(s) \
+ DTRACE_PROBE4(libreoffice, PROBE_DEL, s, \
+ (s)->refCount, (s)->length, (s)->buffer)
+# define RTL_LOG_STRING_INTERN_NEW(s,o) \
+ DTRACE_PROBE5(libreoffice, PROBE_INTERN_NEW, s, \
+ (s)->refCount, (s)->length, (s)->buffer, o)
+# define RTL_LOG_STRING_INTERN_DELETE(s) \
+ DTRACE_PROBE4(libreoffice, PROBE_INTERN_DEL, s, \
+ (s)->refCount, (s)->length, (s)->buffer)
+#else
+# define RTL_LOG_STRING_NEW(s)
+# define RTL_LOG_STRING_DELETE(s)
+# define RTL_LOG_STRING_INTERN_NEW(s,o)
+# define RTL_LOG_STRING_INTERN_DELETE(s)
+#endif /* USE_SDT_PROBES */
+
+#endif // INCLUDED_SAL_RTL_STRIMP_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/string.cxx b/sal/rtl/string.cxx
new file mode 100644
index 000000000..23196e528
--- /dev/null
+++ b/sal/rtl/string.cxx
@@ -0,0 +1,667 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstdlib>
+
+#include <osl/interlck.h>
+#include <osl/diagnose.h>
+#include <rtl/tencinfo.h>
+
+#include "strimp.hxx"
+#include <rtl/character.hxx>
+#include <rtl/string.h>
+
+#include <rtl/math.h>
+
+#if defined _WIN32
+// Temporary check to verify that the #pragma pack around rtl_String is indeed cargo cult and can
+// safely be removed:
+static_assert(alignof (rtl_String) == 4);
+static_assert(sizeof (rtl_String) == 12);
+#endif
+
+/* ======================================================================= */
+
+#if USE_SDT_PROBES
+#define RTL_LOG_STRING_BITS 8
+#endif
+
+#include "strtmpl.hxx"
+
+/* ======================================================================= */
+
+sal_Int32 SAL_CALL rtl_str_valueOfFloat(char * pStr, float f)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfFP<RTL_STR_MAX_VALUEOFFLOAT>(pStr, f);
+}
+
+sal_Int32 SAL_CALL rtl_str_valueOfDouble(char * pStr, double d)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfFP<RTL_STR_MAX_VALUEOFDOUBLE>(pStr, d);
+}
+
+float SAL_CALL rtl_str_toFloat(char const * pStr) SAL_THROW_EXTERN_C()
+{
+ assert(pStr);
+ return static_cast<float>(rtl_math_stringToDouble(pStr, pStr + rtl_str_getLength(pStr),
+ '.', 0, nullptr, nullptr));
+}
+
+double SAL_CALL rtl_str_toDouble(char const * pStr) SAL_THROW_EXTERN_C()
+{
+ assert(pStr);
+ return rtl_math_stringToDouble(pStr, pStr + rtl_str_getLength(pStr), '.', 0,
+ nullptr, nullptr);
+}
+
+/* ======================================================================= */
+
+static int rtl_ImplGetFastUTF8ByteLen( const sal_Unicode* pStr, sal_Int32 nLen )
+{
+ int n;
+ sal_Unicode c;
+ sal_uInt32 nUCS4Char;
+ const sal_Unicode* pEndStr;
+
+ n = 0;
+ pEndStr = pStr+nLen;
+ while ( pStr < pEndStr )
+ {
+ c = *pStr;
+
+ if ( c < 0x80 )
+ n++;
+ else if ( c < 0x800 )
+ n += 2;
+ else
+ {
+ if ( !rtl::isHighSurrogate(c) )
+ n += 3;
+ else
+ {
+ nUCS4Char = c;
+
+ if ( pStr+1 < pEndStr )
+ {
+ c = *(pStr+1);
+ if ( rtl::isLowSurrogate(c) )
+ {
+ nUCS4Char = rtl::combineSurrogates(nUCS4Char, c);
+ pStr++;
+ }
+ }
+
+ if ( nUCS4Char < 0x10000 )
+ n += 3;
+ else if ( nUCS4Char < 0x200000 )
+ n += 4;
+ else if ( nUCS4Char < 0x4000000 )
+ n += 5;
+ else
+ n += 6;
+ }
+ }
+
+ pStr++;
+ }
+
+ return n;
+}
+
+/* ----------------------------------------------------------------------- */
+
+static bool rtl_impl_convertUStringToString(rtl_String ** pTarget,
+ sal_Unicode const * pSource,
+ sal_Int32 nLength,
+ rtl_TextEncoding nEncoding,
+ sal_uInt32 nFlags,
+ bool bCheckErrors)
+{
+ assert(pTarget != nullptr);
+ assert(pSource != nullptr || nLength == 0);
+ assert(nLength >= 0);
+ OSL_ASSERT(nLength == 0 || rtl_isOctetTextEncoding(nEncoding));
+
+ if ( !nLength )
+ rtl_string_new( pTarget );
+ else
+ {
+ rtl_String* pTemp;
+ rtl_UnicodeToTextConverter hConverter;
+ sal_uInt32 nInfo;
+ sal_Size nSrcChars;
+ sal_Size nDestBytes;
+ sal_Size nNewLen;
+ sal_Size nNotConvertedChars;
+ sal_Size nMaxCharLen;
+
+ /* Optimization for UTF-8 - we try to calculate the exact length */
+ /* For all other encoding we try a good estimation */
+ if ( nEncoding == RTL_TEXTENCODING_UTF8 )
+ {
+ nNewLen = rtl_ImplGetFastUTF8ByteLen( pSource, nLength );
+ /* Includes the string only ASCII, then we could copy
+ the buffer faster */
+ if ( nNewLen == static_cast<sal_Size>(nLength) )
+ {
+ char* pBuffer;
+ if ( *pTarget )
+ rtl_string_release( *pTarget );
+ *pTarget = rtl_string_ImplAlloc( nLength );
+ OSL_ASSERT(*pTarget != nullptr);
+ pBuffer = (*pTarget)->buffer;
+ do
+ {
+ /* Check ASCII range */
+ OSL_ENSURE( *pSource <= 127,
+ "rtl_uString2String() - UTF8 test is encoding is wrong" );
+
+ *pBuffer = static_cast<char>(static_cast<unsigned char>(*pSource));
+ pBuffer++;
+ pSource++;
+ nLength--;
+ }
+ while ( nLength );
+ return true;
+ }
+
+ nMaxCharLen = 4;
+ }
+ else
+ {
+ rtl_TextEncodingInfo aTextEncInfo;
+ aTextEncInfo.StructSize = sizeof( aTextEncInfo );
+ if ( !rtl_getTextEncodingInfo( nEncoding, &aTextEncInfo ) )
+ {
+ aTextEncInfo.AverageCharSize = 1;
+ aTextEncInfo.MaximumCharSize = 8;
+ }
+
+ nNewLen = nLength * static_cast<sal_Size>(aTextEncInfo.AverageCharSize);
+ nMaxCharLen = aTextEncInfo.MaximumCharSize;
+ }
+
+ nFlags |= RTL_UNICODETOTEXT_FLAGS_FLUSH;
+ hConverter = rtl_createUnicodeToTextConverter( nEncoding );
+
+ for (;;)
+ {
+ pTemp = rtl_string_ImplAlloc( nNewLen );
+ OSL_ASSERT(pTemp != nullptr);
+ nDestBytes = rtl_convertUnicodeToText( hConverter, nullptr,
+ pSource, nLength,
+ pTemp->buffer, nNewLen,
+ nFlags,
+ &nInfo, &nSrcChars );
+ if (bCheckErrors && (nInfo & RTL_UNICODETOTEXT_INFO_ERROR) != 0)
+ {
+ rtl_freeString(pTemp);
+ rtl_destroyUnicodeToTextConverter(hConverter);
+ return false;
+ }
+
+ if ((nInfo & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0)
+ break;
+
+ /* Buffer not big enough, try again with enough space */
+ rtl_freeString( pTemp );
+
+ /* Try with the max. count of characters with
+ additional overhead for replacing functionality */
+ nNotConvertedChars = nLength-nSrcChars;
+ nNewLen = nDestBytes+(nNotConvertedChars*nMaxCharLen)+nNotConvertedChars+4;
+ }
+
+ /* Set the buffer to the correct size or is there to
+ much overhead, reallocate to the correct size */
+ if ( nNewLen > nDestBytes+8 )
+ {
+ rtl_String* pTemp2 = rtl_string_ImplAlloc( nDestBytes );
+ OSL_ASSERT(pTemp2 != nullptr);
+ rtl::str::Copy(pTemp2->buffer, pTemp->buffer, nDestBytes);
+ rtl_freeString( pTemp );
+ pTemp = pTemp2;
+ }
+ else
+ {
+ pTemp->length = nDestBytes;
+ pTemp->buffer[nDestBytes] = 0;
+ }
+
+ rtl_destroyUnicodeToTextConverter( hConverter );
+ if ( *pTarget )
+ rtl_string_release( *pTarget );
+ *pTarget = pTemp;
+
+ /* Results the conversion in an empty buffer -
+ create an empty string */
+ if ( pTemp && !nDestBytes )
+ rtl_string_new( pTarget );
+ }
+ return true;
+}
+
+void SAL_CALL rtl_uString2String( rtl_String** ppThis,
+ const sal_Unicode* pUStr,
+ sal_Int32 nULen,
+ rtl_TextEncoding eTextEncoding,
+ sal_uInt32 nCvtFlags )
+ SAL_THROW_EXTERN_C()
+{
+ rtl_impl_convertUStringToString(ppThis, pUStr, nULen, eTextEncoding,
+ nCvtFlags, false);
+}
+
+sal_Bool SAL_CALL rtl_convertUStringToString(rtl_String ** pTarget,
+ sal_Unicode const * pSource,
+ sal_Int32 nLength,
+ rtl_TextEncoding nEncoding,
+ sal_uInt32 nFlags)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl_impl_convertUStringToString(pTarget, pSource, nLength, nEncoding,
+ nFlags, true);
+}
+
+void rtl_string_newReplaceFirst(
+ rtl_String ** newStr, rtl_String * str, char const * from,
+ sal_Int32 fromLength, char const * to, sal_Int32 toLength,
+ sal_Int32 * index) SAL_THROW_EXTERN_C()
+{
+ assert(str != nullptr);
+ assert(index != nullptr);
+ assert(*index >= 0 && *index <= str->length);
+ assert(fromLength >= 0);
+ assert(toLength >= 0);
+ sal_Int32 i = rtl_str_indexOfStr_WithLength(
+ str->buffer + *index, str->length - *index, from, fromLength);
+ if (i == -1) {
+ rtl_string_assign(newStr, str);
+ } else {
+ assert(i <= str->length - *index);
+ i += *index;
+ assert(fromLength <= str->length);
+ if (str->length - fromLength > SAL_MAX_INT32 - toLength) {
+ std::abort();
+ }
+ rtl::str::newReplaceStrAt(newStr, str, i, fromLength, to, toLength);
+ }
+ *index = i;
+}
+
+void rtl_string_newReplaceAll(
+ rtl_String ** newStr, rtl_String * str, char const * from,
+ sal_Int32 fromLength, char const * to, sal_Int32 toLength)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, 0);
+}
+
+sal_Int32 SAL_CALL rtl_str_getLength(const char* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::getLength(pStr);
+}
+
+sal_Int32 SAL_CALL rtl_str_compare(const char* pStr1, const char* pStr2) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2),
+ rtl::str::CompareNormal(), rtl::str::noShortening);
+}
+
+sal_Int32 SAL_CALL rtl_str_compare_WithLength(const char* pStr1, sal_Int32 nStr1Len,
+ const char* pStr2, sal_Int32 nStr2Len)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::with_length(pStr2, nStr2Len),
+ rtl::str::CompareNormal(), rtl::str::noShortening);
+}
+
+sal_Int32 SAL_CALL rtl_str_shortenedCompare_WithLength(const char* pStr1, sal_Int32 nStr1Len,
+ const char* pStr2, sal_Int32 nStr2Len,
+ sal_Int32 nShortenedLength)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::with_length(pStr2, nStr2Len),
+ rtl::str::CompareNormal(), nShortenedLength);
+}
+
+sal_Int32 SAL_CALL rtl_str_reverseCompare_WithLength(const char* pStr1, sal_Int32 nStr1Len,
+ const char* pStr2, sal_Int32 nStr2Len)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::reverseCompare_WithLengths(pStr1, nStr1Len, pStr2, nStr2Len,
+ rtl::str::CompareNormal());
+}
+
+sal_Int32 SAL_CALL rtl_str_compareIgnoreAsciiCase(const char* pStr1, const char* pStr2)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2),
+ rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening);
+}
+
+sal_Int32 SAL_CALL rtl_str_compareIgnoreAsciiCase_WithLength(const char* pStr1, sal_Int32 nStr1Len,
+ const char* pStr2, sal_Int32 nStr2Len)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::with_length(pStr2, nStr2Len),
+ rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening);
+}
+
+sal_Int32 SAL_CALL rtl_str_shortenedCompareIgnoreAsciiCase_WithLength(
+ const char* pStr1, sal_Int32 nStr1Len, const char* pStr2, sal_Int32 nStr2Len,
+ sal_Int32 nShortenedLength) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::with_length(pStr2, nStr2Len),
+ rtl::str::CompareIgnoreAsciiCase(), nShortenedLength);
+}
+
+sal_Int32 SAL_CALL rtl_str_hashCode(const char* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::hashCode(pStr);
+}
+
+sal_Int32 SAL_CALL rtl_str_hashCode_WithLength(const char* pStr, sal_Int32 nLen)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::hashCode_WithLength(pStr, nLen);
+}
+
+sal_Int32 SAL_CALL rtl_str_indexOfChar(const char* pStr, char c) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfChar(pStr, c);
+}
+
+sal_Int32 SAL_CALL rtl_str_indexOfChar_WithLength(const char* pStr, sal_Int32 nLen, char c)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfChar_WithLength(pStr, nLen, c);
+}
+
+sal_Int32 SAL_CALL rtl_str_lastIndexOfChar(const char* pStr, char c) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::lastIndexOfChar(pStr, c);
+}
+
+sal_Int32 SAL_CALL rtl_str_lastIndexOfChar_WithLength(const char* pStr, sal_Int32 nLen, char c)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::lastIndexOfChar_WithLength(pStr, nLen, c);
+}
+
+sal_Int32 SAL_CALL rtl_str_indexOfStr(const char* pStr, const char* pSubStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfStr(pStr, pSubStr);
+}
+
+sal_Int32 SAL_CALL rtl_str_indexOfStr_WithLength(const char* pStr, sal_Int32 nStrLen,
+ const char* pSubStr, sal_Int32 nSubLen)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfStr_WithLength(pStr, nStrLen, pSubStr, nSubLen);
+}
+
+sal_Int32 SAL_CALL rtl_str_lastIndexOfStr(const char* pStr, const char* pSubStr)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::lastIndexOfStr(pStr, pSubStr);
+}
+
+sal_Int32 SAL_CALL rtl_str_lastIndexOfStr_WithLength(const char* pStr, sal_Int32 nStrLen,
+ const char* pSubStr, sal_Int32 nSubLen)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::lastIndexOfStr_WithLength(pStr, nStrLen, pSubStr, nSubLen);
+}
+
+void SAL_CALL rtl_str_replaceChar(char* pStr, char cOld, char cNew) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::FromTo(cOld, cNew));
+}
+
+void SAL_CALL rtl_str_replaceChar_WithLength(char* pStr, sal_Int32 nLen, char cOld, char cNew)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::FromTo(cOld, cNew));
+}
+
+void SAL_CALL rtl_str_toAsciiLowerCase(char* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::toAsciiLower);
+}
+
+void SAL_CALL rtl_str_toAsciiLowerCase_WithLength(char* pStr, sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::toAsciiLower);
+}
+
+void SAL_CALL rtl_str_toAsciiUpperCase(char* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::toAsciiUpper);
+}
+
+void SAL_CALL rtl_str_toAsciiUpperCase_WithLength(char* pStr, sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::toAsciiUpper);
+}
+
+sal_Int32 SAL_CALL rtl_str_trim(char* pStr) SAL_THROW_EXTERN_C() { return rtl::str::trim(pStr); }
+
+sal_Int32 SAL_CALL rtl_str_trim_WithLength(char* pStr, sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::trim_WithLength(pStr, nLen);
+}
+
+sal_Int32 SAL_CALL rtl_str_valueOfBoolean(char* pStr, sal_Bool b) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfBoolean(pStr, b);
+}
+
+sal_Int32 SAL_CALL rtl_str_valueOfChar(char* pStr, char c) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfChar(pStr, c);
+}
+
+sal_Int32 SAL_CALL rtl_str_valueOfInt32(char* pStr, sal_Int32 n, sal_Int16 nRadix)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfInt<RTL_STR_MAX_VALUEOFINT32>(pStr, n, nRadix);
+}
+
+sal_Int32 SAL_CALL rtl_str_valueOfInt64(char* pStr, sal_Int64 n, sal_Int16 nRadix)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfInt<RTL_STR_MAX_VALUEOFINT64>(pStr, n, nRadix);
+}
+
+sal_Int32 SAL_CALL rtl_str_valueOfUInt64(char* pStr, sal_uInt64 n, sal_Int16 nRadix)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfInt<RTL_STR_MAX_VALUEOFUINT64>(pStr, n, nRadix);
+}
+
+sal_Bool SAL_CALL rtl_str_toBoolean(const char* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toBoolean(pStr);
+}
+
+sal_Int32 SAL_CALL rtl_str_toInt32(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_Int32>(rtl::str::null_terminated(pStr), nRadix);
+}
+
+sal_Int64 SAL_CALL rtl_str_toInt64(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_Int64>(rtl::str::null_terminated(pStr), nRadix);
+}
+
+sal_Int64 SAL_CALL rtl_str_toInt64_WithLength(const char* pStr, sal_Int16 nRadix,
+ sal_Int32 nStrLength) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_Int64>(rtl::str::with_length(pStr, nStrLength), nRadix);
+}
+
+sal_uInt32 SAL_CALL rtl_str_toUInt32(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_uInt32>(rtl::str::null_terminated(pStr), nRadix);
+}
+
+sal_uInt64 SAL_CALL rtl_str_toUInt64(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_uInt64>(rtl::str::null_terminated(pStr), nRadix);
+}
+
+rtl_String* rtl_string_ImplAlloc(sal_Int32 nLen) { return rtl::str::Alloc<rtl_String>(nLen); }
+
+void SAL_CALL rtl_string_acquire(rtl_String* pThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::acquire(pThis);
+}
+
+void SAL_CALL rtl_string_release(rtl_String* pThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::release(pThis);
+}
+
+void SAL_CALL rtl_string_new(rtl_String** ppThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::new_(ppThis);
+}
+
+rtl_String* SAL_CALL rtl_string_alloc(sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ assert(nLen >= 0);
+ return rtl::str::Alloc<rtl_String>(nLen);
+}
+
+void SAL_CALL rtl_string_new_WithLength(rtl_String** ppThis, sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ rtl::str::new_WithLength(ppThis, nLen);
+}
+
+void SAL_CALL rtl_string_newFromString(rtl_String** ppThis, const rtl_String* pStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromString(ppThis, pStr);
+}
+
+void SAL_CALL rtl_string_newFromStr(rtl_String** ppThis, const char* pCharStr) SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromStr(ppThis, pCharStr);
+}
+
+void SAL_CALL rtl_string_newFromStr_WithLength(rtl_String** ppThis, const char* pCharStr,
+ sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromStr_WithLength(ppThis, pCharStr, nLen);
+}
+
+void SAL_CALL rtl_string_newFromSubString(rtl_String** ppThis, const rtl_String* pFrom,
+ sal_Int32 beginIndex, sal_Int32 count)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromSubString(ppThis, pFrom, beginIndex, count);
+}
+
+// Used when creating from string literals.
+void SAL_CALL rtl_string_newFromLiteral(rtl_String** ppThis, const char* pCharStr, sal_Int32 nLen,
+ sal_Int32 allocExtra) SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromStr_WithLength(ppThis, pCharStr, nLen, allocExtra);
+}
+
+void SAL_CALL rtl_string_assign(rtl_String** ppThis, rtl_String* pStr) SAL_THROW_EXTERN_C()
+{
+ rtl::str::assign(ppThis, pStr);
+}
+
+sal_Int32 SAL_CALL rtl_string_getLength(const rtl_String* pThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::getLength(pThis);
+}
+
+char* SAL_CALL rtl_string_getStr(rtl_String* pThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::getStr(pThis);
+}
+
+void SAL_CALL rtl_string_newConcat(rtl_String** ppThis, rtl_String* pLeft, rtl_String* pRight)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newConcat(ppThis, pLeft, pRight);
+}
+
+void SAL_CALL rtl_string_ensureCapacity(rtl_String** ppThis, sal_Int32 size) SAL_THROW_EXTERN_C()
+{
+ rtl::str::ensureCapacity(ppThis, size);
+}
+
+void SAL_CALL rtl_string_newReplaceStrAt(rtl_String** ppThis, rtl_String* pStr, sal_Int32 nIndex,
+ sal_Int32 nCount, rtl_String* pNewSubStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceStrAt(ppThis, pStr, nIndex, nCount, pNewSubStr);
+}
+
+void SAL_CALL rtl_string_newReplaceStrAt_WithLength(rtl_String** ppThis, rtl_String* pStr, sal_Int32 nIndex,
+ sal_Int32 nCount, char const * subStr, sal_Int32 substrLen)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceStrAt(ppThis, pStr, nIndex, nCount, subStr, substrLen);
+}
+
+void SAL_CALL rtl_string_newReplace(rtl_String** ppThis, rtl_String* pStr, char cOld, char cNew)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplace(ppThis, pStr, cOld, cNew);
+}
+
+void SAL_CALL rtl_string_newToAsciiLowerCase(rtl_String** ppThis, rtl_String* pStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceChars<rtl::str::ToAsciiLower>(ppThis, pStr);
+}
+
+void SAL_CALL rtl_string_newToAsciiUpperCase(rtl_String** ppThis, rtl_String* pStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceChars<rtl::str::ToAsciiUpper>(ppThis, pStr);
+}
+
+void SAL_CALL rtl_string_newTrim(rtl_String** ppThis, rtl_String* pStr) SAL_THROW_EXTERN_C()
+{
+ rtl::str::newTrim(ppThis, pStr);
+}
+
+sal_Int32 SAL_CALL rtl_string_getToken(rtl_String** ppThis, rtl_String* pStr, sal_Int32 nToken,
+ char cTok, sal_Int32 nIndex) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::getToken(ppThis, pStr, nToken, cTok, nIndex);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/strtmpl.hxx b/sal/rtl/strtmpl.hxx
new file mode 100644
index 000000000..e1389ce6a
--- /dev/null
+++ b/sal/rtl/strtmpl.hxx
@@ -0,0 +1,1904 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <algorithm>
+#include <cassert>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
+#include <cwchar>
+#include <limits>
+#include <string_view>
+#include <type_traits>
+#include <utility>
+
+#include "strimp.hxx"
+
+#include <o3tl/safeint.hxx>
+#include <osl/diagnose.h>
+#include <sal/log.hxx>
+#include <rtl/character.hxx>
+#include <rtl/math.h>
+#include <rtl/string.h>
+#include <rtl/ustring.h>
+
+#include <dragonbox/dragonbox.h>
+
+void internRelease(rtl_uString*);
+
+namespace rtl::str
+{
+template <typename C> auto IMPL_RTL_USTRCODE(C c) { return std::make_unsigned_t<C>(c); }
+
+// Wrappers around null-terminated/known-length strings, that allow to generalize algorithms
+// without overhead (e.g., without need to get length of null-terminated strings).
+
+template <typename C> struct null_terminated
+{
+ C* p;
+ null_terminated(C* pStr)
+ : p(pStr)
+ {
+ assert(pStr);
+ }
+ auto begin() const { return p; }
+ struct EndDetector
+ {
+ friend bool operator==(EndDetector, C* iter) { return *iter == 0; }
+ friend bool operator==(C* iter, EndDetector) { return *iter == 0; }
+ friend bool operator!=(EndDetector, C* iter) { return *iter != 0; }
+ friend bool operator!=(C* iter, EndDetector) { return *iter != 0; }
+ };
+ static auto end() { return EndDetector{}; }
+};
+
+template <typename C> struct with_length
+{
+ C* p;
+ sal_Int32 len;
+ with_length(C* pStr, sal_Int32 nLength)
+ : p(pStr)
+ , len(nLength)
+ {
+ assert(len >= 0);
+ }
+ auto begin() const { return p; }
+ auto end() const { return p + len; }
+};
+
+struct ToAsciiLower
+{
+ template <typename C> static bool Applicable(C c)
+ {
+ return rtl::isAsciiUpperCase(IMPL_RTL_USTRCODE(c));
+ }
+ template <typename C> static C Replace(C c)
+ {
+ return rtl::toAsciiLowerCase(IMPL_RTL_USTRCODE(c));
+ }
+} constexpr toAsciiLower;
+
+struct ToAsciiUpper
+{
+ template <typename C> static bool Applicable(C c)
+ {
+ return rtl::isAsciiLowerCase(IMPL_RTL_USTRCODE(c));
+ }
+ template <typename C> static C Replace(C c)
+ {
+ return rtl::toAsciiUpperCase(IMPL_RTL_USTRCODE(c));
+ }
+} constexpr toAsciiUpper;
+
+template <typename C> struct FromTo
+{
+ C from;
+ C to;
+ FromTo(C cFrom, C cTo) : from(cFrom), to(cTo) {}
+ C Replace(C c) const { return c == from ? to : c; }
+};
+
+template <typename C> void Copy(C* _pDest, const C* _pSrc, sal_Int32 _nCount)
+{
+ // take advantage of builtin optimisations
+ std::copy(_pSrc, _pSrc + _nCount, _pDest);
+}
+
+template <typename C> void CopyBackward(C* _pDest, const C* _pSrc, sal_Int32 _nCount)
+{
+ // take advantage of builtin optimisations
+ std::copy_backward(_pSrc, _pSrc + _nCount, _pDest + _nCount);
+}
+
+inline void Copy(sal_Unicode* _pDest, const char* _pSrc, sal_Int32 _nCount)
+{
+ std::transform(_pSrc, _pSrc + _nCount, _pDest,
+ [](char c)
+ {
+ assert(rtl::isAscii(static_cast<unsigned char>(c)));
+ SAL_WARN_IF(c == '\0', "rtl.string", "Found embedded \\0 ASCII character");
+ return static_cast<unsigned char>(c);
+ });
+}
+
+inline sal_Int16 implGetDigit(sal_Unicode ch, sal_Int16 nRadix)
+{
+ sal_Int16 n = -1;
+ if ((ch >= '0') && (ch <= '9'))
+ n = ch - '0';
+ else if ((ch >= 'a') && (ch <= 'z'))
+ n = ch - 'a' + 10;
+ else if ((ch >= 'A') && (ch <= 'Z'))
+ n = ch - 'A' + 10;
+ return (n < nRadix) ? n : -1;
+}
+
+inline bool implIsWhitespace(sal_Unicode c)
+{
+ /* Space or Control character? */
+ if ((c <= 32) && c)
+ return true;
+
+ /* Only in the General Punctuation area Space or Control characters are included? */
+ if ((c < 0x2000) || (c > 0x206F))
+ return false;
+
+ if (((c >= 0x2000) && (c <= 0x200B)) || /* All Spaces */
+ (c == 0x2028) || /* LINE SEPARATOR */
+ (c == 0x2029)) /* PARAGRAPH SEPARATOR */
+ return true;
+
+ return false;
+}
+
+/* ======================================================================= */
+/* C-String functions which could be used without the String-Class */
+/* ======================================================================= */
+
+template <typename T> sal_Int32 getLength( const T* pStr )
+{
+ assert(pStr);
+ if constexpr (std::is_class_v<T>)
+ {
+ return pStr->length;
+ }
+ else
+ {
+ // take advantage of builtin optimisations
+ return std::char_traits<T>::length(pStr);
+ }
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename C> void warnIfCharAndNotAscii(C c)
+{
+ if constexpr (sizeof(c) == sizeof(char))
+ SAL_WARN_IF(!rtl::isAscii(static_cast<unsigned char>(c)), "rtl.string",
+ "Found non-ASCII char");
+}
+
+template <typename C1, typename C2> void warnIfOneIsCharAndNotAscii(C1 c1, C2 c2)
+{
+ if constexpr (sizeof(c1) != sizeof(c2))
+ {
+ warnIfCharAndNotAscii(c1);
+ warnIfCharAndNotAscii(c2);
+ }
+}
+
+struct CompareNormal
+{
+ template <typename C1, typename C2> static sal_Int32 compare(C1 c1, C2 c2)
+ {
+ warnIfOneIsCharAndNotAscii(c1, c2);
+ return static_cast<sal_Int32>(IMPL_RTL_USTRCODE(c1))
+ - static_cast<sal_Int32>(IMPL_RTL_USTRCODE(c2));
+ }
+};
+
+struct CompareIgnoreAsciiCase
+{
+ template <typename C1, typename C2> static sal_Int32 compare(C1 c1, C2 c2)
+ {
+ warnIfOneIsCharAndNotAscii(c1, c2);
+ return rtl::compareIgnoreAsciiCase(IMPL_RTL_USTRCODE(c1), IMPL_RTL_USTRCODE(c2));
+ }
+};
+
+/* ----------------------------------------------------------------------- */
+
+struct NoShortening
+{
+ constexpr bool operator>=(int) { return true; } // for assert
+ constexpr bool operator==(int) { return false; } // for loop break check
+ constexpr void operator--() {} // for decrement in loop
+} constexpr noShortening;
+
+template <class S1, class S2, class Compare, typename Shorten_t>
+sal_Int32 compare(S1 s1, S2 s2, Compare, Shorten_t shortenedLength)
+{
+ static_assert(std::is_same_v<Shorten_t, NoShortening> || std::is_same_v<Shorten_t, sal_Int32>);
+ assert(shortenedLength >= 0);
+ auto pStr1 = s1.begin();
+ const auto end1 = s1.end();
+ auto pStr2 = s2.begin();
+ const auto end2 = s2.end();
+ for (;;)
+ {
+ if (shortenedLength == 0)
+ return 0;
+ if (pStr2 == end2)
+ return pStr1 == end1 ? 0 : 1;
+ if (pStr1 == end1)
+ return -1;
+ if (const sal_Int32 nRet = Compare::compare(*pStr1, *pStr2))
+ return nRet;
+ --shortenedLength;
+ ++pStr1;
+ ++pStr2;
+ }
+}
+
+// take advantage of builtin optimisations
+template <typename C, std::enable_if_t<sizeof(C) == sizeof(wchar_t), int> = 0>
+sal_Int32 compare(null_terminated<C> s1, null_terminated<C> s2, CompareNormal, NoShortening)
+{
+ return wcscmp(reinterpret_cast<wchar_t const*>(s1.p), reinterpret_cast<wchar_t const*>(s2.p));
+}
+template <typename C, std::enable_if_t<sizeof(C) == sizeof(char), int> = 0>
+sal_Int32 compare(null_terminated<C> s1, null_terminated<C> s2, CompareNormal, NoShortening)
+{
+ return strcmp(reinterpret_cast<char const*>(s1.p), reinterpret_cast<char const*>(s2.p));
+}
+template <typename C>
+sal_Int32 compare(with_length<C> s1, with_length<C> s2, CompareNormal, NoShortening)
+{
+ std::basic_string_view sv1(s1.p, s1.len);
+ return sv1.compare(std::basic_string_view(s2.p, s2.len));
+}
+template <typename C1, typename C2, class Compare>
+sal_Int32 compare(with_length<C1> s1, with_length<C2> s2, Compare cf, sal_Int32 nShortenedLength)
+{
+ assert(nShortenedLength >= 0);
+ s1.len = std::min(s1.len, nShortenedLength);
+ s2.len = std::min(s2.len, nShortenedLength);
+ return compare(s1, s2, cf, noShortening);
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename C1, typename C2, class Compare>
+sal_Int32 reverseCompare_WithLengths(const C1* pStr1, sal_Int32 nStr1Len,
+ const C2* pStr2, sal_Int32 nStr2Len, Compare)
+{
+ assert(pStr1 || nStr1Len == 0);
+ assert(nStr1Len >= 0);
+ assert(pStr2 || nStr2Len == 0);
+ assert(nStr2Len >= 0);
+ const C1* pStr1Run = pStr1+nStr1Len;
+ const C2* pStr2Run = pStr2+nStr2Len;
+ while ((pStr1 < pStr1Run) && (pStr2 < pStr2Run))
+ {
+ pStr1Run--;
+ pStr2Run--;
+ if (const sal_Int32 nRet = Compare::compare(*pStr1Run, *pStr2Run))
+ return nRet;
+ }
+
+ return nStr1Len - nStr2Len;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 hashCode_WithLength(const IMPL_RTL_STRCODE*, sal_Int32);
+
+template <typename IMPL_RTL_STRCODE> sal_Int32 hashCode( const IMPL_RTL_STRCODE* pStr )
+{
+ return hashCode_WithLength( pStr, getLength( pStr ) );
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 hashCode_WithLength ( const IMPL_RTL_STRCODE* pStr,
+ sal_Int32 nLen )
+{
+ assert(nLen >= 0);
+ sal_uInt32 h = static_cast<sal_uInt32>(nLen);
+ while ( nLen > 0 )
+ {
+ h = (h*37U) + IMPL_RTL_USTRCODE( *pStr );
+ pStr++;
+ nLen--;
+ }
+ return static_cast<sal_Int32>(h);
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 indexOfChar ( const IMPL_RTL_STRCODE* pStr,
+ IMPL_RTL_STRCODE c )
+{
+ assert(pStr);
+ if (!c)
+ return -1; // Unifies behavior of strchr/wcschr and unoptimized algorithm wrt '\0'
+
+ if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(char))
+ {
+ // take advantage of builtin optimisations
+ const IMPL_RTL_STRCODE* p = strchr(pStr, c);
+ return p ? p - pStr : -1;
+ }
+ else if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(wchar_t))
+ {
+ // take advantage of builtin optimisations
+ wchar_t const * p = wcschr(reinterpret_cast<wchar_t const *>(pStr), static_cast<wchar_t>(c));
+ return p ? p - reinterpret_cast<wchar_t const *>(pStr) : -1;
+ }
+ else
+ {
+ const IMPL_RTL_STRCODE* pTempStr = pStr;
+ while ( *pTempStr )
+ {
+ if ( *pTempStr == c )
+ return pTempStr-pStr;
+
+ pTempStr++;
+ }
+
+ return -1;
+ }
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 indexOfChar_WithLength ( const IMPL_RTL_STRCODE* pStr,
+ sal_Int32 nLen,
+ IMPL_RTL_STRCODE c )
+{
+// assert(nLen >= 0);
+ if (nLen <= 0)
+ return -1;
+ // take advantage of builtin optimisations
+ using my_string_view = std::basic_string_view<IMPL_RTL_STRCODE>;
+ my_string_view v(pStr, nLen);
+ typename my_string_view::size_type idx = v.find(c);
+ return idx == my_string_view::npos ? -1 : idx;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 lastIndexOfChar_WithLength(const IMPL_RTL_STRCODE*, sal_Int32, IMPL_RTL_STRCODE);
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 lastIndexOfChar ( const IMPL_RTL_STRCODE* pStr,
+ IMPL_RTL_STRCODE c )
+{
+ assert(pStr);
+ if (!c)
+ return -1; // Unifies behavior of strrchr/wcsrchr and lastIndexOfChar_WithLength wrt '\0'
+
+ if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(char))
+ {
+ // take advantage of builtin optimisations
+ const IMPL_RTL_STRCODE* p = strrchr(pStr, c);
+ return p ? p - pStr : -1;
+ }
+ else if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(wchar_t))
+ {
+ // take advantage of builtin optimisations
+ wchar_t const * p = wcsrchr(reinterpret_cast<wchar_t const *>(pStr), static_cast<wchar_t>(c));
+ return p ? p - reinterpret_cast<wchar_t const *>(pStr) : -1;
+ }
+ else
+ {
+ return lastIndexOfChar_WithLength( pStr, getLength( pStr ), c );
+ }
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 lastIndexOfChar_WithLength ( const IMPL_RTL_STRCODE* pStr,
+ sal_Int32 nLen,
+ IMPL_RTL_STRCODE c )
+{
+ assert(nLen >= 0);
+ // take advantage of builtin optimisations
+ using my_string_view = std::basic_string_view<IMPL_RTL_STRCODE>;
+ my_string_view v(pStr, nLen);
+ typename my_string_view::size_type idx = v.rfind(c);
+ return idx == my_string_view::npos ? -1 : idx;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 indexOfStr_WithLength(const IMPL_RTL_STRCODE*, sal_Int32, const IMPL_RTL_STRCODE*,
+ sal_Int32);
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 indexOfStr ( const IMPL_RTL_STRCODE* pStr,
+ const IMPL_RTL_STRCODE* pSubStr )
+{
+ assert(pStr);
+ assert(pSubStr);
+ /* an empty SubString is always not findable */
+ if (*pSubStr == 0)
+ return -1;
+ if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(char))
+ {
+ // take advantage of builtin optimisations
+ const IMPL_RTL_STRCODE* p = strstr(pStr, pSubStr);
+ return p ? p - pStr : -1;
+ }
+ else if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(wchar_t))
+ {
+ // take advantage of builtin optimisations
+ wchar_t const * p = wcsstr(reinterpret_cast<wchar_t const *>(pStr), reinterpret_cast<wchar_t const *>(pSubStr));
+ return p ? p - reinterpret_cast<wchar_t const *>(pStr) : -1;
+ }
+ else
+ {
+ return indexOfStr_WithLength( pStr, getLength( pStr ),
+ pSubStr, getLength( pSubStr ) );
+ }
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 indexOfStr_WithLength ( const IMPL_RTL_STRCODE* pStr,
+ sal_Int32 nStrLen,
+ const IMPL_RTL_STRCODE* pSubStr,
+ sal_Int32 nSubLen )
+{
+ assert(nStrLen >= 0);
+ assert(nSubLen >= 0);
+ /* an empty SubString is always not findable */
+ if ( nSubLen == 0 )
+ return -1;
+ // take advantage of builtin optimisations
+ using my_string_view = std::basic_string_view<IMPL_RTL_STRCODE>;
+ my_string_view v(pStr, nStrLen);
+ auto idx = nSubLen == 1 ? v.find(*pSubStr) : v.find(pSubStr, 0, nSubLen);
+ return idx == my_string_view::npos ? -1 : idx;
+}
+
+inline sal_Int32 indexOfStr_WithLength(const sal_Unicode* pStr, sal_Int32 nStrLen,
+ const char* pSubStr, sal_Int32 nSubLen)
+{
+ assert(nStrLen >= 0);
+ assert(nSubLen >= 0);
+ if (nSubLen > 0 && nSubLen <= nStrLen)
+ {
+ sal_Unicode const* end = pStr + nStrLen;
+ sal_Unicode const* cursor = pStr;
+
+ while (cursor < end)
+ {
+ cursor = std::char_traits<sal_Unicode>::find(cursor, end - cursor, *pSubStr);
+ if (!cursor || (end - cursor < nSubLen))
+ {
+ /* no enough left to actually have a match */
+ break;
+ }
+ /* now it is worth trying a full match */
+ if (nSubLen == 1 || rtl_ustr_asciil_reverseEquals_WithLength(cursor, pSubStr, nSubLen))
+ {
+ return cursor - pStr;
+ }
+ cursor += 1;
+ }
+ }
+ return -1;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 lastIndexOfStr_WithLength(const IMPL_RTL_STRCODE*, sal_Int32, const IMPL_RTL_STRCODE*,
+ sal_Int32);
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 lastIndexOfStr ( const IMPL_RTL_STRCODE* pStr,
+ const IMPL_RTL_STRCODE* pSubStr )
+{
+ return lastIndexOfStr_WithLength( pStr, getLength( pStr ),
+ pSubStr, getLength( pSubStr ) );
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 lastIndexOfStr_WithLength ( const IMPL_RTL_STRCODE* pStr,
+ sal_Int32 nStrLen,
+ const IMPL_RTL_STRCODE* pSubStr,
+ sal_Int32 nSubLen )
+{
+ assert(nStrLen >= 0);
+ assert(nSubLen >= 0);
+ /* an empty SubString is always not findable */
+ if ( nSubLen == 0 )
+ return -1;
+ // take advantage of builtin optimisations
+ using my_string_view = std::basic_string_view<IMPL_RTL_STRCODE>;
+ my_string_view v(pStr, nStrLen);
+ my_string_view needle(pSubStr, nSubLen);
+ typename my_string_view::size_type idx = v.rfind(needle);
+ return idx == my_string_view::npos ? -1 : idx;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <class S, class Replacer> void replaceChars(S str, Replacer replacer)
+{
+ for (auto& rChar : str)
+ rChar = replacer.Replace(rChar);
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE> sal_Int32 trim_WithLength(IMPL_RTL_STRCODE*, sal_Int32);
+
+template <typename IMPL_RTL_STRCODE> sal_Int32 trim( IMPL_RTL_STRCODE* pStr )
+{
+ return trim_WithLength( pStr, getLength( pStr ) );
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+std::basic_string_view<IMPL_RTL_STRCODE> trimView( IMPL_RTL_STRCODE* pStr, sal_Int32 nLen )
+{
+ assert(nLen >= 0);
+ sal_Int32 nPreSpaces = 0;
+ sal_Int32 nPostSpaces = 0;
+ sal_Int32 nIndex = nLen-1;
+
+ while ( (nPreSpaces < nLen) && implIsWhitespace( IMPL_RTL_USTRCODE(*(pStr+nPreSpaces)) ) )
+ nPreSpaces++;
+
+ while ( (nIndex > nPreSpaces) && implIsWhitespace( IMPL_RTL_USTRCODE(*(pStr+nIndex)) ) )
+ {
+ nPostSpaces++;
+ nIndex--;
+ }
+
+ return { pStr + nPreSpaces, static_cast<size_t>(nLen - nPostSpaces - nPreSpaces) };
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 trim_WithLength( IMPL_RTL_STRCODE* pStr, sal_Int32 nLen )
+{
+ const auto view = trimView(pStr, nLen);
+
+ if (static_cast<sal_Int32>(view.size()) != nLen)
+ {
+ nLen = static_cast<sal_Int32>(view.size());
+ if (view.data() != pStr)
+ Copy(pStr, view.data(), nLen);
+ *(pStr+nLen) = 0;
+ }
+
+ return nLen;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE> sal_Int32 valueOfBoolean( IMPL_RTL_STRCODE* pStr, sal_Bool b )
+{
+ assert(pStr);
+ if ( b )
+ {
+ *pStr = 't';
+ pStr++;
+ *pStr = 'r';
+ pStr++;
+ *pStr = 'u';
+ pStr++;
+ *pStr = 'e';
+ pStr++;
+ *pStr = 0;
+ return 4;
+ }
+ else
+ {
+ *pStr = 'f';
+ pStr++;
+ *pStr = 'a';
+ pStr++;
+ *pStr = 'l';
+ pStr++;
+ *pStr = 's';
+ pStr++;
+ *pStr = 'e';
+ pStr++;
+ *pStr = 0;
+ return 5;
+ }
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE>
+sal_Int32 valueOfChar ( IMPL_RTL_STRCODE* pStr,
+ IMPL_RTL_STRCODE c )
+{
+ assert(pStr);
+ *pStr++ = c;
+ *pStr = 0;
+ return 1;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <sal_Int32 maxLen, typename IMPL_RTL_STRCODE, typename T>
+sal_Int32 valueOfInt ( IMPL_RTL_STRCODE* pStr,
+ T n,
+ sal_Int16 nRadix )
+{
+ assert(pStr);
+ assert( nRadix >= RTL_STR_MIN_RADIX && nRadix <= RTL_STR_MAX_RADIX );
+ char aBuf[maxLen];
+ char* pBuf = aBuf;
+ sal_Int32 nLen = 0;
+ using uT = std::make_unsigned_t<T>;
+ uT nValue;
+
+ /* Radix must be valid */
+ if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) )
+ nRadix = 10;
+
+ if constexpr (std::is_signed_v<T>)
+ {
+ /* is value negative */
+ if ( n < 0 )
+ {
+ *pStr = '-';
+ pStr++;
+ nLen++;
+ nValue = n == std::numeric_limits<T>::min() ? static_cast<uT>(n) : -n;
+ }
+ else
+ nValue = n;
+ }
+ else
+ nValue = n;
+
+ /* create a recursive buffer with all values, except the last one */
+ do
+ {
+ char nDigit = static_cast<char>(nValue % nRadix);
+ nValue /= nRadix;
+ if ( nDigit > 9 )
+ *pBuf = (nDigit-10) + 'a';
+ else
+ *pBuf = (nDigit + '0' );
+ pBuf++;
+ }
+ while ( nValue > 0 );
+
+ /* copy the values in the right direction into the destination buffer */
+ do
+ {
+ pBuf--;
+ *pStr = *pBuf;
+ pStr++;
+ nLen++;
+ }
+ while ( pBuf != aBuf );
+ *pStr = 0;
+
+ return nLen;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRCODE> sal_Bool toBoolean( const IMPL_RTL_STRCODE* pStr )
+{
+ assert(pStr);
+ if ( *pStr == '1' )
+ return true;
+
+ if ( (*pStr == 'T') || (*pStr == 't') )
+ {
+ pStr++;
+ if ( (*pStr == 'R') || (*pStr == 'r') )
+ {
+ pStr++;
+ if ( (*pStr == 'U') || (*pStr == 'u') )
+ {
+ pStr++;
+ if ( (*pStr == 'E') || (*pStr == 'e') )
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename T, class Iter> inline bool HandleSignChar(Iter& iter)
+{
+ if constexpr (std::numeric_limits<T>::is_signed)
+ {
+ if (*iter == '-')
+ {
+ ++iter;
+ return true;
+ }
+ }
+ if (*iter == '+')
+ ++iter;
+ return false;
+}
+
+template <typename T> std::pair<T, sal_Int16> DivMod(sal_Int16 nRadix, [[maybe_unused]] bool bNeg)
+{
+ if constexpr (std::numeric_limits<T>::is_signed)
+ if (bNeg)
+ return { -(std::numeric_limits<T>::min() / nRadix),
+ -(std::numeric_limits<T>::min() % nRadix) };
+ return { std::numeric_limits<T>::max() / nRadix, std::numeric_limits<T>::max() % nRadix };
+}
+
+template <typename T, class S> T toInt(S str, sal_Int16 nRadix)
+{
+ assert( nRadix >= RTL_STR_MIN_RADIX && nRadix <= RTL_STR_MAX_RADIX );
+
+ if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) )
+ nRadix = 10;
+
+ auto pStr = str.begin();
+ const auto end = str.end();
+
+ /* Skip whitespaces */
+ while (pStr != end && implIsWhitespace(IMPL_RTL_USTRCODE(*pStr)))
+ pStr++;
+ if (pStr == end)
+ return 0;
+
+ const bool bNeg = HandleSignChar<T>(pStr);
+ const auto& [nDiv, nMod] = DivMod<T>(nRadix, bNeg);
+ assert(nDiv > 0);
+
+ std::make_unsigned_t<T> n = 0;
+ while (pStr != end)
+ {
+ sal_Int16 nDigit = implGetDigit(IMPL_RTL_USTRCODE(*pStr), nRadix);
+ if ( nDigit < 0 )
+ break;
+ if (static_cast<std::make_unsigned_t<T>>(nMod < nDigit ? nDiv - 1 : nDiv) < n)
+ return 0;
+
+ n *= nRadix;
+ n += nDigit;
+
+ pStr++;
+ }
+
+ if constexpr (std::numeric_limits<T>::is_signed)
+ if (bNeg)
+ return n == static_cast<std::make_unsigned_t<T>>(std::numeric_limits<T>::min())
+ ? std::numeric_limits<T>::min()
+ : -static_cast<T>(n);
+ return static_cast<T>(n);
+}
+
+/* ======================================================================= */
+/* Internal String-Class help functions */
+/* ======================================================================= */
+
+template <class STRINGDATA> using STRCODE = std::remove_extent_t<decltype(STRINGDATA::buffer)>;
+template <typename C> struct STRINGDATA_;
+template <> struct STRINGDATA_<char>
+{
+ using T = rtl_String;
+};
+template <> struct STRINGDATA_<sal_Unicode>
+{
+ using T = rtl_uString;
+};
+template <typename C> using STRINGDATA = typename STRINGDATA_<C>::T;
+
+template <typename IMPL_RTL_STRINGDATA> IMPL_RTL_STRINGDATA* Alloc( sal_Int32 nLen )
+{
+ IMPL_RTL_STRINGDATA * pData
+ = (sal::static_int_cast< sal_uInt32 >(nLen)
+ <= ((SAL_MAX_UINT32 - sizeof (IMPL_RTL_STRINGDATA))
+ / sizeof (STRCODE<IMPL_RTL_STRINGDATA>)))
+ ? static_cast<IMPL_RTL_STRINGDATA *>(rtl_allocateString(
+ sizeof (IMPL_RTL_STRINGDATA) + nLen * sizeof (STRCODE<IMPL_RTL_STRINGDATA>)))
+ : nullptr;
+ if (pData != nullptr) {
+ pData->refCount = 1;
+ pData->length = nLen;
+ pData->buffer[nLen] = 0;
+ }
+ return pData;
+}
+
+/* ======================================================================= */
+/* String-Class functions */
+/* ======================================================================= */
+
+template <typename IMPL_RTL_STRINGDATA> void acquire(IMPL_RTL_STRINGDATA * pThis)
+{
+ if (!SAL_STRING_IS_STATIC (pThis))
+ osl_atomic_increment( &((pThis)->refCount) );
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA> void release( IMPL_RTL_STRINGDATA* pThis )
+{
+ if (SAL_UNLIKELY(SAL_STRING_IS_STATIC (pThis)))
+ return;
+
+ /* OString doesn't have an 'intern' */
+ if constexpr (sizeof(STRCODE<IMPL_RTL_STRINGDATA>) == sizeof(sal_Unicode))
+ {
+ if (SAL_STRING_IS_INTERN (pThis))
+ {
+ internRelease (pThis);
+ return;
+ }
+ }
+
+ if ( !osl_atomic_decrement( &(pThis->refCount) ) )
+ {
+ RTL_LOG_STRING_DELETE( pThis );
+ rtl_freeString( pThis );
+ }
+}
+
+/* ----------------------------------------------------------------------- */
+
+/* static data to be referenced by all empty strings
+ * the refCount is predefined to 1 and must never become 0 !
+ */
+template <typename IMPL_RTL_STRINGDATA> struct EmptyStringImpl
+{
+ static IMPL_RTL_STRINGDATA data;
+};
+
+template <>
+inline rtl_uString EmptyStringImpl<rtl_uString>::data = {
+ sal_Int32(SAL_STRING_INTERN_FLAG | SAL_STRING_STATIC_FLAG | 1), /* sal_Int32 refCount; */
+ 0, /* sal_Int32 length; */
+ { 0 } /* sal_Unicode buffer[1]; */
+};
+
+template <>
+inline rtl_String EmptyStringImpl<rtl_String>::data = {
+ SAL_STRING_STATIC_FLAG | 1, /* sal_Int32 refCount; */
+ 0, /* sal_Int32 length; */
+ { 0 } /* char buffer[1]; */
+};
+
+template <typename IMPL_RTL_STRINGDATA> void new_( IMPL_RTL_STRINGDATA** ppThis )
+{
+ assert(ppThis);
+ if ( *ppThis)
+ release( *ppThis );
+
+ *ppThis = &EmptyStringImpl<IMPL_RTL_STRINGDATA>::data;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA>
+void new_WithLength( IMPL_RTL_STRINGDATA** ppThis, sal_Int32 nLen )
+{
+ assert(ppThis);
+ assert(nLen >= 0);
+ if ( nLen <= 0 )
+ new_( ppThis );
+ else
+ {
+ if ( *ppThis)
+ release( *ppThis );
+
+ *ppThis = Alloc<IMPL_RTL_STRINGDATA>( nLen );
+ assert(*ppThis != nullptr);
+ (*ppThis)->length = 0;
+ (*ppThis)->buffer[0] = 0;
+ }
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA, typename C>
+void newFromStr_WithLength(IMPL_RTL_STRINGDATA** ppThis, const C* pCharStr, sal_Int32 nLen,
+ sal_Int32 allocExtra = 0)
+{
+ assert(ppThis);
+ assert(nLen >= 0);
+ assert(pCharStr || nLen == 0);
+ assert(allocExtra >= 0);
+
+ if (nLen + allocExtra == 0)
+ return new_(ppThis);
+
+ IMPL_RTL_STRINGDATA* pOrg = *ppThis;
+ *ppThis = Alloc<IMPL_RTL_STRINGDATA>(nLen + allocExtra);
+ assert(*ppThis != nullptr);
+ if (nLen > 0)
+ Copy((*ppThis)->buffer, pCharStr, nLen);
+ if (allocExtra > 0)
+ {
+ (*ppThis)->length = nLen;
+ (*ppThis)->buffer[nLen] = 0;
+ }
+
+ RTL_LOG_STRING_NEW(*ppThis);
+
+ /* must be done last, if pCharStr belongs to *ppThis */
+ if (pOrg)
+ release(pOrg);
+}
+
+template <typename IMPL_RTL_STRINGDATA>
+void newFromString ( IMPL_RTL_STRINGDATA** ppThis,
+ const IMPL_RTL_STRINGDATA* pStr )
+{
+ assert(pStr);
+
+ newFromStr_WithLength(ppThis, pStr->buffer, pStr->length);
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA>
+void newFromStr ( IMPL_RTL_STRINGDATA** ppThis,
+ const STRCODE<IMPL_RTL_STRINGDATA>* pCharStr )
+{
+#if OSL_DEBUG_LEVEL > 0
+ //TODO: For now, only abort in non-production debug builds; once all places that rely on the
+ // undocumented newFromStr behavior of treating a null pCharStr like an empty string have been
+ // found and fixed, drop support for that behavior and turn this into a general assert:
+ if (pCharStr == nullptr) {
+ std::abort();
+ }
+#endif
+
+ newFromStr_WithLength(ppThis, pCharStr, pCharStr ? getLength(pCharStr) : 0);
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA> void assign(IMPL_RTL_STRINGDATA**, IMPL_RTL_STRINGDATA*);
+
+template <typename IMPL_RTL_STRINGDATA>
+void newFromSubString ( IMPL_RTL_STRINGDATA** ppThis,
+ const IMPL_RTL_STRINGDATA* pFrom,
+ sal_Int32 beginIndex,
+ sal_Int32 count )
+{
+ assert(ppThis);
+ if ( beginIndex == 0 && count == pFrom->length )
+ return assign(ppThis, const_cast<IMPL_RTL_STRINGDATA*>(pFrom));
+ if ( count < 0 || beginIndex < 0 || beginIndex + count > pFrom->length )
+ {
+ assert(false); // fail fast at least in debug builds
+ return newFromStr_WithLength(ppThis, "!!br0ken!!", 10);
+ }
+
+ newFromStr_WithLength( ppThis, pFrom->buffer + beginIndex, count );
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA>
+void assign ( IMPL_RTL_STRINGDATA** ppThis,
+ IMPL_RTL_STRINGDATA* pStr )
+{
+ assert(ppThis);
+ /* must be done at first, if pStr == *ppThis */
+ acquire( pStr );
+
+ if ( *ppThis )
+ release( *ppThis );
+
+ *ppThis = pStr;
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA> auto* getStr( IMPL_RTL_STRINGDATA* pThis )
+{
+ assert(pThis);
+ return pThis->buffer;
+}
+
+/* ----------------------------------------------------------------------- */
+
+enum ThrowPolicy { NoThrow, Throw };
+
+template <ThrowPolicy throwPolicy, typename IMPL_RTL_STRINGDATA, typename C1, typename C2>
+void newConcat(IMPL_RTL_STRINGDATA** ppThis, const C1* pLeft, sal_Int32 nLeftLength,
+ const C2* pRight, sal_Int32 nRightLength)
+{
+ assert(ppThis);
+ assert(nLeftLength >= 0);
+ assert(pLeft || nLeftLength == 0);
+ assert(nRightLength >= 0);
+ assert(pRight || nRightLength == 0);
+ IMPL_RTL_STRINGDATA* pOrg = *ppThis;
+
+ if (nLeftLength > std::numeric_limits<sal_Int32>::max() - nRightLength)
+ {
+ if constexpr (throwPolicy == NoThrow)
+ *ppThis = nullptr;
+ else
+ {
+#if !defined(__COVERITY__)
+ throw std::length_error("newConcat");
+#else
+ //coverity doesn't report std::bad_alloc as an unhandled exception when
+ //potentially thrown from destructors but does report std::length_error
+ throw std::bad_alloc();
+#endif
+ }
+ }
+ else
+ {
+ auto* pTempStr = Alloc<IMPL_RTL_STRINGDATA>(nLeftLength + nRightLength);
+ OSL_ASSERT(pTempStr != nullptr);
+ *ppThis = pTempStr;
+ if (*ppThis != nullptr) {
+ if (nLeftLength)
+ Copy( pTempStr->buffer, pLeft, nLeftLength );
+ if (nRightLength)
+ Copy( pTempStr->buffer+nLeftLength, pRight, nRightLength );
+
+ RTL_LOG_STRING_NEW( *ppThis );
+ }
+ }
+
+ /* must be done last, if left or right == *ppThis */
+ if ( pOrg )
+ release( pOrg );
+}
+
+template<typename IMPL_RTL_STRINGDATA, typename IMPL_RTL_STRCODE>
+void newConcat(IMPL_RTL_STRINGDATA** ppThis, IMPL_RTL_STRINGDATA* pLeft,
+ const IMPL_RTL_STRCODE* pRight, sal_Int32 nRightLength)
+{
+ assert(pLeft != nullptr);
+ if (nRightLength == 0)
+ assign(ppThis, pLeft);
+ else
+ newConcat<Throw>(ppThis, pLeft->buffer, pLeft->length, pRight, nRightLength);
+}
+
+template <typename IMPL_RTL_STRINGDATA>
+void newConcat ( IMPL_RTL_STRINGDATA** ppThis,
+ IMPL_RTL_STRINGDATA* pLeft,
+ IMPL_RTL_STRINGDATA* pRight )
+{
+ /* Test for 0-Pointer - if not, change newReplaceStrAt! */
+ if ( !pRight || !pRight->length )
+ {
+ assert(pLeft != nullptr);
+ assign(ppThis, pLeft);
+ }
+ else if ( !pLeft || !pLeft->length )
+ assign(ppThis, pRight);
+ else
+ newConcat<NoThrow>(ppThis, pLeft->buffer, pLeft->length, pRight->buffer, pRight->length);
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA>
+void ensureCapacity ( IMPL_RTL_STRINGDATA** ppThis,
+ sal_Int32 size )
+{
+ assert(ppThis);
+ IMPL_RTL_STRINGDATA* const pOrg = *ppThis;
+ if ( pOrg->refCount == 1 && pOrg->length >= size )
+ return;
+ assert( pOrg->length <= size ); // do not truncate
+ auto* pTempStr = Alloc<IMPL_RTL_STRINGDATA>( size );
+ Copy( pTempStr->buffer, pOrg->buffer, pOrg->length );
+ // right now the length is still the same as of the original
+ pTempStr->length = pOrg->length;
+ pTempStr->buffer[ pOrg->length ] = '\0';
+ *ppThis = pTempStr;
+ RTL_LOG_STRING_NEW( *ppThis );
+
+ release( pOrg );
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA, typename IMPL_RTL_STRCODE>
+void newReplaceStrAt ( IMPL_RTL_STRINGDATA** ppThis,
+ IMPL_RTL_STRINGDATA* pStr,
+ sal_Int32 nIndex,
+ sal_Int32 nCount,
+ const IMPL_RTL_STRCODE* pNewSubStr,
+ sal_Int32 nNewSubStrLen )
+{
+ assert(ppThis);
+ assert(nIndex >= 0 && nIndex <= pStr->length);
+ assert(nCount >= 0);
+ assert(nCount <= pStr->length - nIndex);
+ assert(pNewSubStr != nullptr || nNewSubStrLen == 0);
+ assert(nNewSubStrLen >= 0);
+ /* Append? */
+ if ( nIndex >= pStr->length )
+ return newConcat(ppThis, pStr, pNewSubStr, nNewSubStrLen);
+
+ /* not more than the String length could be deleted */
+ if ( nCount >= pStr->length-nIndex )
+ {
+ /* Assign of NewSubStr? */
+ if (nIndex == 0)
+ return newFromStr_WithLength( ppThis, pNewSubStr, nNewSubStrLen );
+
+ nCount = pStr->length - nIndex;
+ }
+
+ /* Assign of Str? */
+ if ( !nCount && !nNewSubStrLen )
+ return assign(ppThis, pStr);
+
+ IMPL_RTL_STRINGDATA* pOrg = *ppThis;
+
+ /* Alloc New Buffer */
+ *ppThis = Alloc<IMPL_RTL_STRINGDATA>(pStr->length - nCount + nNewSubStrLen);
+ assert(*ppThis != nullptr);
+ auto* pBuffer = (*ppThis)->buffer;
+ if ( nIndex )
+ {
+ Copy( pBuffer, pStr->buffer, nIndex );
+ pBuffer += nIndex;
+ }
+ if ( nNewSubStrLen )
+ {
+ Copy( pBuffer, pNewSubStr, nNewSubStrLen );
+ pBuffer += nNewSubStrLen;
+ }
+ Copy( pBuffer, pStr->buffer+nIndex+nCount, pStr->length-nIndex-nCount );
+
+ RTL_LOG_STRING_NEW( *ppThis );
+ /* must be done last, if pStr or pNewSubStr == *ppThis */
+ if ( pOrg )
+ release( pOrg );
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA>
+void newReplaceStrAt ( IMPL_RTL_STRINGDATA** ppThis,
+ IMPL_RTL_STRINGDATA* pStr,
+ sal_Int32 nIndex,
+ sal_Int32 nCount,
+ IMPL_RTL_STRINGDATA* pNewSubStr )
+{
+ assert(ppThis);
+ assert(nIndex >= 0 && nIndex <= pStr->length);
+ assert(nCount >= 0);
+ assert(nCount <= pStr->length - nIndex);
+ /* Append? */
+ if (nIndex >= pStr->length)
+ {
+ /* newConcat test, if pNewSubStr is 0 */
+ newConcat(ppThis, pStr, pNewSubStr);
+ return;
+ }
+
+ /* not more than the String length could be deleted */
+ if (nCount >= pStr->length-nIndex)
+ {
+ /* Assign of NewSubStr? */
+ if (nIndex == 0)
+ {
+ if (!pNewSubStr)
+ return new_(ppThis);
+ else
+ return assign(ppThis, pNewSubStr);
+ }
+ nCount = pStr->length - nIndex;
+ }
+
+ /* Assign of Str? */
+ if (!nCount && (!pNewSubStr || !pNewSubStr->length))
+ {
+ assign(ppThis, pStr);
+ return;
+ }
+
+ const auto* pNewSubStrBuf = pNewSubStr ? pNewSubStr->buffer : nullptr;
+ const sal_Int32 nNewSubStrLength = pNewSubStr ? pNewSubStr->length : 0;
+ newReplaceStrAt(ppThis, pStr, nIndex, nCount, pNewSubStrBuf, nNewSubStrLength);
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <class Traits, typename IMPL_RTL_STRINGDATA>
+void newReplaceChars(IMPL_RTL_STRINGDATA** ppThis, IMPL_RTL_STRINGDATA* pStr)
+{
+ assert(ppThis);
+ assert(pStr);
+
+ const auto pEnd = pStr->buffer + pStr->length;
+ auto pCharStr = std::find_if(pStr->buffer, pEnd, [](auto c) { return Traits::Applicable(c); });
+ if (pCharStr != pEnd)
+ {
+ IMPL_RTL_STRINGDATA* pOrg = *ppThis;
+ *ppThis = Alloc<IMPL_RTL_STRINGDATA>(pStr->length);
+ assert(*ppThis != nullptr);
+ auto* pNewCharStr = (*ppThis)->buffer;
+ /* Copy String */
+ const sal_Int32 nCount = pCharStr - pStr->buffer;
+ Copy(pNewCharStr, pStr->buffer, nCount);
+ pNewCharStr += nCount;
+ /* replace/copy rest of the string */
+ do
+ {
+ *pNewCharStr = Traits::Replace(*pCharStr);
+ pNewCharStr++;
+ pCharStr++;
+ } while (pCharStr != pEnd);
+
+ RTL_LOG_STRING_NEW(*ppThis);
+ /* must be done last, if pStr == *ppThis */
+ if (pOrg)
+ release(pOrg);
+ }
+ else
+ assign(ppThis, pStr);
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA>
+void newTrim ( IMPL_RTL_STRINGDATA** ppThis,
+ IMPL_RTL_STRINGDATA* pStr )
+{
+ assert(pStr);
+ const auto view = trimView(pStr->buffer, pStr->length);
+
+ if (static_cast<sal_Int32>(view.size()) == pStr->length)
+ assign(ppThis, pStr);
+ else
+ newFromStr_WithLength(ppThis, view.data(), view.size());
+}
+
+/* ----------------------------------------------------------------------- */
+
+template <typename IMPL_RTL_STRINGDATA>
+sal_Int32 getToken ( IMPL_RTL_STRINGDATA** ppThis,
+ IMPL_RTL_STRINGDATA* pStr,
+ sal_Int32 nToken,
+ STRCODE<IMPL_RTL_STRINGDATA> cTok,
+ sal_Int32 nIndex )
+{
+ assert(ppThis);
+ assert(pStr);
+ assert(nIndex <= pStr->length);
+
+ // Set ppThis to an empty string and return -1 if either nToken or nIndex is
+ // negative:
+ if (nIndex >= 0 && nToken >= 0)
+ {
+ const auto* pOrgCharStr = pStr->buffer;
+ const auto* pCharStr = pOrgCharStr + nIndex;
+ sal_Int32 nLen = pStr->length - nIndex;
+ sal_Int32 nTokCount = 0;
+ const auto* pCharStrStart = pCharStr;
+ while (nLen > 0)
+ {
+ if (*pCharStr == cTok)
+ {
+ nTokCount++;
+
+ if (nTokCount > nToken)
+ break;
+ if (nTokCount == nToken)
+ pCharStrStart = pCharStr + 1;
+ }
+
+ pCharStr++;
+ nLen--;
+ }
+ if (nTokCount >= nToken)
+ {
+ newFromStr_WithLength(ppThis, pCharStrStart, pCharStr - pCharStrStart);
+ if (nLen > 0)
+ return pCharStr - pOrgCharStr + 1;
+ else
+ return -1;
+ }
+ }
+
+ new_(ppThis);
+ return -1;
+}
+
+/* ======================================================================= */
+/* String buffer help functions */
+/* ======================================================================= */
+
+template <class IMPL_RTL_STRINGDATA>
+void stringbuffer_newFromStr_WithLength(IMPL_RTL_STRINGDATA** ppThis,
+ const STRCODE<IMPL_RTL_STRINGDATA>* pStr, sal_Int32 count)
+{
+ assert(ppThis);
+ assert(count >= 0);
+ if (!pStr)
+ count = 0; // Because old code didn't care about count when !pStr
+
+ newFromStr_WithLength(ppThis, pStr, count, 16);
+}
+
+template <class IMPL_RTL_STRINGDATA>
+sal_Int32 stringbuffer_newFromStringBuffer(IMPL_RTL_STRINGDATA** ppThis, sal_Int32 capacity,
+ IMPL_RTL_STRINGDATA* pStr)
+{
+ assert(capacity >= 0);
+ assert(pStr);
+
+ if (capacity < pStr->length)
+ capacity = pStr->length;
+
+ newFromStr_WithLength(ppThis, pStr->buffer, pStr->length, capacity - pStr->length);
+ return capacity;
+}
+
+template <class IMPL_RTL_STRINGDATA>
+void stringbuffer_ensureCapacity(IMPL_RTL_STRINGDATA** ppThis, sal_Int32* capacity,
+ sal_Int32 minimumCapacity)
+{
+ assert(ppThis);
+ assert(capacity && *capacity >= 0);
+ // assert(minimumCapacity >= 0); // It was commented out in rtl_stringbuffer_ensureCapacity
+ if (minimumCapacity <= *capacity)
+ return;
+
+ const auto nLength = (*ppThis)->length;
+ *capacity = (nLength + 1) * 2;
+ if (minimumCapacity > *capacity)
+ *capacity = minimumCapacity;
+
+ newFromStr_WithLength(ppThis, (*ppThis)->buffer, nLength, *capacity - nLength);
+}
+
+template <class IMPL_RTL_STRINGDATA, typename C>
+void stringbuffer_insert(IMPL_RTL_STRINGDATA** ppThis, sal_Int32* capacity, sal_Int32 offset,
+ const C* pStr, sal_Int32 len)
+{
+ assert(ppThis);
+ assert(capacity && *capacity >= 0);
+ assert(offset >= 0 && offset <= (*ppThis)->length);
+ assert(len >= 0);
+ if (len == 0)
+ return;
+
+ stringbuffer_ensureCapacity(ppThis, capacity, (*ppThis)->length + len);
+
+ sal_Int32 nOldLen = (*ppThis)->length;
+ auto* pBuf = (*ppThis)->buffer;
+
+ /* copy the tail */
+ const sal_Int32 n = nOldLen - offset;
+ if (n > 0)
+ CopyBackward(pBuf + offset + len, pBuf + offset, n);
+
+ /* insert the new characters */
+ if (pStr != nullptr)
+ Copy(pBuf + offset, pStr, len);
+
+ (*ppThis)->length = nOldLen + len;
+ pBuf[nOldLen + len] = 0;
+}
+
+template <class IMPL_RTL_STRINGDATA>
+void stringbuffer_remove(IMPL_RTL_STRINGDATA** ppThis, sal_Int32 start, sal_Int32 len)
+{
+ assert(ppThis);
+ assert(start >= 0 && start <= (*ppThis)->length);
+ assert(len >= 0);
+
+ if (len > (*ppThis)->length - start)
+ len = (*ppThis)->length - start;
+
+ //remove nothing
+ if (!len)
+ return;
+
+ auto* pBuf = (*ppThis)->buffer;
+ const sal_Int32 nTailLen = (*ppThis)->length - (start + len);
+
+ if (nTailLen)
+ {
+ /* move the tail */
+ Copy(pBuf + start, pBuf + start + len, nTailLen);
+ }
+
+ (*ppThis)->length -= len;
+ pBuf[(*ppThis)->length] = 0;
+}
+
+template <class S, typename CharTypeFrom, typename CharTypeTo>
+void newReplaceAllFromIndex(S** s, S* s1, CharTypeFrom const* from, sal_Int32 fromLength,
+ CharTypeTo const* to, sal_Int32 toLength, sal_Int32 fromIndex)
+{
+ assert(s != nullptr);
+ assert(s1 != nullptr);
+ assert(fromLength >= 0);
+ assert(from != nullptr || fromLength == 0);
+ assert(toLength >= 0);
+ assert(to != nullptr || toLength == 0);
+ assert(fromIndex >= 0 && fromIndex <= s1->length);
+ sal_Int32 i = indexOfStr_WithLength(s1->buffer + fromIndex, s1->length - fromIndex,
+ from, fromLength);
+ if (i >= 0)
+ {
+ if (s1->length - fromLength > SAL_MAX_INT32 - toLength)
+ std::abort();
+ i += fromIndex;
+ sal_Int32 nCapacity = s1->length + (toLength - fromLength);
+ if (fromLength < toLength)
+ {
+ // Pre-allocate up to 16 replacements more
+ const sal_Int32 nMaxMoreFinds = (s1->length - i - fromLength) / fromLength;
+ const sal_Int32 nIncrease = toLength - fromLength;
+ const sal_Int32 nMoreReplacements = std::min(
+ { nMaxMoreFinds, (SAL_MAX_INT32 - nCapacity) / nIncrease, sal_Int32(16) });
+ nCapacity += nMoreReplacements * nIncrease;
+ }
+ const auto pOld = *s;
+ *s = Alloc<S>(nCapacity);
+ (*s)->length = 0;
+ fromIndex = 0;
+ do
+ {
+ stringbuffer_insert(s, &nCapacity, (*s)->length, s1->buffer + fromIndex, i);
+ stringbuffer_insert(s, &nCapacity, (*s)->length, to, toLength);
+ fromIndex += i + fromLength;
+ i = indexOfStr_WithLength(s1->buffer + fromIndex, s1->length - fromIndex,
+ from, fromLength);
+ } while (i >= 0);
+ // the rest
+ stringbuffer_insert(s, &nCapacity, (*s)->length,
+ s1->buffer + fromIndex, s1->length - fromIndex);
+ if (pOld)
+ release(pOld); // Must be last in case *s == s1
+ }
+ else
+ assign(s, s1);
+
+ RTL_LOG_STRING_NEW(*s);
+}
+
+template <typename IMPL_RTL_STRINGDATA>
+void newReplace(IMPL_RTL_STRINGDATA** ppThis, IMPL_RTL_STRINGDATA* pStr,
+ STRCODE<IMPL_RTL_STRINGDATA> cOld, STRCODE<IMPL_RTL_STRINGDATA> cNew)
+{
+ return newReplaceAllFromIndex(ppThis, pStr, &cOld, 1, &cNew, 1, 0);
+}
+
+template <class S, typename CharTypeFrom, typename CharTypeTo>
+void newReplaceFirst(S** s, S* s1, CharTypeFrom const* from, sal_Int32 fromLength,
+ CharTypeTo const* to, sal_Int32 toLength, sal_Int32& fromIndex)
+{
+ assert(s != nullptr);
+ assert(s1 != nullptr);
+ assert(fromLength >= 0);
+ assert(from != nullptr || fromLength == 0);
+ assert(toLength >= 0);
+ assert(to != nullptr || toLength == 0);
+ assert(fromIndex >= 0 && fromIndex <= s1->length);
+ sal_Int32 i = indexOfStr_WithLength(s1->buffer + fromIndex, s1->length - fromIndex,
+ from, fromLength);
+ if (i >= 0)
+ {
+ if (s1->length - fromLength > SAL_MAX_INT32 - toLength)
+ std::abort();
+ i += fromIndex;
+ newReplaceStrAt(s, s1, i, fromLength, to, toLength);
+ }
+ else
+ assign(s, s1);
+
+ fromIndex = i;
+}
+
+// doubleToString implementation
+
+static inline constexpr sal_uInt64 eX[] = { 10ull,
+ 100ull,
+ 1000ull,
+ 10000ull,
+ 100000ull,
+ 1000000ull,
+ 10000000ull,
+ 100000000ull,
+ 1000000000ull,
+ 10000000000ull,
+ 100000000000ull,
+ 1000000000000ull,
+ 10000000000000ull,
+ 100000000000000ull,
+ 1000000000000000ull,
+ 10000000000000000ull,
+ 100000000000000000ull,
+ 1000000000000000000ull,
+ 10000000000000000000ull };
+
+template <typename S>
+void doubleToString(S** pResult, sal_Int32* pResultCapacity, sal_Int32 nResultOffset, double fValue,
+ rtl_math_StringFormat eFormat, sal_Int32 nDecPlaces, STRCODE<S> cDecSeparator,
+ sal_Int32 const* pGroups, STRCODE<S> cGroupSeparator,
+ bool bEraseTrailingDecZeros)
+{
+ auto decimalDigits = [](sal_uInt64 n) {
+ return std::distance(std::begin(eX), std::upper_bound(std::begin(eX), std::end(eX), n)) + 1;
+ };
+
+ auto roundToPow10 = [](sal_uInt64 n, int e) {
+ assert(e > 0 && o3tl::make_unsigned(e) <= std::size(eX));
+ const sal_uInt64 d = eX[e - 1];
+ return (n + d / 2) / d * d;
+ };
+
+ auto append = [](S** s, sal_Int32* pCapacity, sal_Int32& rOffset, auto sv)
+ {
+ stringbuffer_insert(s, pCapacity, rOffset, sv.data(), sv.size());
+ rOffset += sv.size();
+ };
+
+ if (std::isnan(fValue))
+ {
+ // #i112652# XMLSchema-2
+ constexpr std::string_view nan{ "NaN" };
+ if (!pResultCapacity)
+ return newFromStr_WithLength(pResult, nan.data(), nan.size());
+ else
+ return append(pResult, pResultCapacity, nResultOffset, nan);
+ }
+
+ // sign adjustment, instead of testing for fValue<0.0 this will also fetch -0.0
+ bool bSign = std::signbit(fValue);
+
+ if (std::isinf(fValue))
+ {
+ // #i112652# XMLSchema-2
+ std::string_view inf = bSign ? std::string_view("-INF") : std::string_view("INF");
+ if (!pResultCapacity)
+ return newFromStr_WithLength(pResult, inf.data(), inf.size());
+ else
+ return append(pResult, pResultCapacity, nResultOffset, inf);
+ }
+
+ if (bSign)
+ fValue = -fValue;
+
+ decltype(jkj::dragonbox::to_decimal(fValue, jkj::dragonbox::policy::sign::ignore,
+ jkj::dragonbox::policy::trailing_zero::ignore)) aParts{};
+ if (fValue) // to_decimal is documented to only handle non-zero finite numbers
+ aParts = jkj::dragonbox::to_decimal(fValue, jkj::dragonbox::policy::sign::ignore,
+ jkj::dragonbox::policy::trailing_zero::ignore);
+
+ int nOrigDigits = decimalDigits(aParts.significand);
+ int nExp = nOrigDigits + aParts.exponent - 1;
+ int nRoundDigits = 15;
+
+ // Unfortunately the old rounding below writes 1.79769313486232e+308 for
+ // DBL_MAX and 4 subsequent nextafter(...,0).
+ static const double fB1 = std::nextafter(std::numeric_limits<double>::max(), 0);
+ static const double fB2 = std::nextafter(fB1, 0);
+ static const double fB3 = std::nextafter(fB2, 0);
+ static const double fB4 = std::nextafter(fB3, 0);
+ if ((fValue >= fB4) && eFormat != rtl_math_StringFormat_F)
+ {
+ // 1.7976931348623157e+308 instead of rounded 1.79769313486232e+308
+ // that can't be converted back as out of range. For rounded values if
+ // they exceed range they should not be written to exchange strings or
+ // file formats.
+
+ eFormat = rtl_math_StringFormat_E;
+ nDecPlaces = std::clamp<sal_Int32>(nDecPlaces, 0, 16);
+ nRoundDigits = 17;
+ }
+
+ // Use integer representation for integer values that fit into the
+ // mantissa (1.((2^53)-1)) with a precision of 1 for highest accuracy.
+ if ((eFormat == rtl_math_StringFormat_Automatic || eFormat == rtl_math_StringFormat_F)
+ && aParts.exponent >= 0 && fValue < 0x1p53)
+ {
+ eFormat = rtl_math_StringFormat_F;
+ if (nDecPlaces == rtl_math_DecimalPlaces_Max)
+ nDecPlaces = 0;
+ else
+ nDecPlaces = std::clamp<sal_Int32>(nDecPlaces, -15, 15);
+
+ if (bEraseTrailingDecZeros && nDecPlaces > 0)
+ nDecPlaces = 0;
+
+ nRoundDigits = nOrigDigits; // no rounding
+ }
+
+ switch (eFormat)
+ {
+ case rtl_math_StringFormat_Automatic:
+ // E or F depending on exponent magnitude
+ if (nExp <= -15 || nExp >= 15)
+ {
+ if (nDecPlaces == rtl_math_DecimalPlaces_Max)
+ nDecPlaces = 14;
+ eFormat = rtl_math_StringFormat_E;
+ }
+ else
+ {
+ if (nDecPlaces == rtl_math_DecimalPlaces_Max)
+ nDecPlaces = (nExp < 14) ? 15 - nExp - 1 : 15;
+ eFormat = rtl_math_StringFormat_F;
+ }
+ break;
+
+ case rtl_math_StringFormat_G:
+ case rtl_math_StringFormat_G1:
+ case rtl_math_StringFormat_G2:
+ // G-Point, similar to sprintf %G
+ if (nDecPlaces == rtl_math_DecimalPlaces_DefaultSignificance)
+ nDecPlaces = 6;
+
+ if (nExp < -4 || nExp >= nDecPlaces)
+ {
+ nDecPlaces = std::max<sal_Int32>(1, nDecPlaces - 1);
+
+ if (eFormat == rtl_math_StringFormat_G)
+ eFormat = rtl_math_StringFormat_E;
+ else if (eFormat == rtl_math_StringFormat_G2)
+ eFormat = rtl_math_StringFormat_E2;
+ else if (eFormat == rtl_math_StringFormat_G1)
+ eFormat = rtl_math_StringFormat_E1;
+ }
+ else
+ {
+ nDecPlaces = std::max<sal_Int32>(0, nDecPlaces - nExp - 1);
+ eFormat = rtl_math_StringFormat_F;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ // Too large values for nDecPlaces make no sense; it might also be
+ // rtl_math_DecimalPlaces_Max was passed with rtl_math_StringFormat_F or
+ // others, but we don't want to allocate/deallocate 2GB just to fill it
+ // with trailing '0' characters..
+ nDecPlaces = std::clamp<sal_Int32>(nDecPlaces, -20, 20);
+
+ sal_Int32 nDigits = nDecPlaces + 1;
+
+ if (eFormat == rtl_math_StringFormat_F)
+ nDigits += nExp;
+
+ // Round the number
+ nRoundDigits = std::min<int>(nDigits, nRoundDigits);
+ if (nDigits >= 0 && nOrigDigits > nRoundDigits)
+ {
+ aParts.significand = roundToPow10(aParts.significand, nOrigDigits - nRoundDigits);
+ assert(aParts.significand <= eX[nOrigDigits - 1]);
+ if (aParts.significand == eX[nOrigDigits - 1]) // up-rounding to the next decade
+ {
+ nOrigDigits++;
+ nExp++;
+
+ if (eFormat == rtl_math_StringFormat_F)
+ nDigits++;
+ }
+ }
+
+ sal_Int32 nBuf
+ = (nDigits <= 0 ? std::max<sal_Int32>(nDecPlaces, std::abs(nExp)) : nDigits + nDecPlaces)
+ + 10 + (pGroups ? std::abs(nDigits) * 2 : 0);
+ // max(nDigits) = max(nDecPlaces) + 1 + max(nExp) + 1 = 20 + 1 + 308 + 1 = 330
+ // max(nBuf) = max(nDigits) + max(nDecPlaces) + 10 + max(nDigits) * 2 = 330 * 3 + 20 + 10 = 1020
+ assert(nBuf <= 1024);
+ STRCODE<S>* const pBuf = static_cast<STRCODE<S>*>(alloca(nBuf * sizeof(STRCODE<S>)));
+ STRCODE<S>* p = pBuf;
+ if (bSign)
+ *p++ = '-';
+
+ bool bHasDec = false;
+
+ int nDecPos;
+ // Check for F format and number < 1
+ if (eFormat == rtl_math_StringFormat_F)
+ {
+ if (nExp < 0)
+ {
+ *p++ = '0';
+ if (nDecPlaces > 0)
+ {
+ *p++ = cDecSeparator;
+ bHasDec = true;
+ }
+
+ sal_Int32 i = (nDigits <= 0 ? nDecPlaces : -nExp - 1);
+
+ while ((i--) > 0)
+ *p++ = '0';
+
+ nDecPos = 0;
+ }
+ else
+ nDecPos = nExp + 1;
+ }
+ else
+ nDecPos = 1;
+
+ int nGrouping = 0, nGroupSelector = 0, nGroupExceed = 0;
+ if (nDecPos > 1 && pGroups && pGroups[0] && cGroupSeparator)
+ {
+ while (nGrouping + pGroups[nGroupSelector] < nDecPos)
+ {
+ nGrouping += pGroups[nGroupSelector];
+ if (pGroups[nGroupSelector + 1])
+ {
+ if (nGrouping + pGroups[nGroupSelector + 1] >= nDecPos)
+ break; // while
+
+ ++nGroupSelector;
+ }
+ else if (!nGroupExceed)
+ nGroupExceed = nGrouping;
+ }
+ }
+
+ // print the number
+ if (nDigits > 0)
+ {
+ for (int nCurExp = nOrigDigits - 1;;)
+ {
+ int nDigit;
+ if (aParts.significand > 0 && nCurExp > 0)
+ {
+ --nCurExp;
+ nDigit = aParts.significand / eX[nCurExp];
+ aParts.significand %= eX[nCurExp];
+ }
+ else
+ {
+ nDigit = aParts.significand;
+ aParts.significand = 0;
+ }
+ assert(nDigit >= 0 && nDigit < 10);
+ *p++ = nDigit + '0';
+
+ if (!--nDigits)
+ break; // for
+
+ if (nDecPos)
+ {
+ if (!--nDecPos)
+ {
+ *p++ = cDecSeparator;
+ bHasDec = true;
+ }
+ else if (nDecPos == nGrouping)
+ {
+ *p++ = cGroupSeparator;
+ nGrouping -= pGroups[nGroupSelector];
+
+ if (nGroupSelector && nGrouping < nGroupExceed)
+ --nGroupSelector;
+ }
+ }
+ }
+ }
+
+ if (!bHasDec && eFormat == rtl_math_StringFormat_F)
+ { // nDecPlaces < 0 did round the value
+ while (--nDecPos > 0)
+ { // fill before decimal point
+ if (nDecPos == nGrouping)
+ {
+ *p++ = cGroupSeparator;
+ nGrouping -= pGroups[nGroupSelector];
+
+ if (nGroupSelector && nGrouping < nGroupExceed)
+ --nGroupSelector;
+ }
+
+ *p++ = '0';
+ }
+ }
+
+ if (bEraseTrailingDecZeros && bHasDec)
+ {
+ while (*(p - 1) == '0')
+ p--;
+
+ if (*(p - 1) == cDecSeparator)
+ p--;
+ }
+
+ // Print the exponent ('E', followed by '+' or '-', followed by exactly
+ // three digits for rtl_math_StringFormat_E). The code in
+ // rtl_[u]str_valueOf{Float|Double} relies on this format.
+ if (eFormat == rtl_math_StringFormat_E || eFormat == rtl_math_StringFormat_E2
+ || eFormat == rtl_math_StringFormat_E1)
+ {
+ if (p == pBuf)
+ *p++ = '1';
+ // maybe no nDigits if nDecPlaces < 0
+
+ *p++ = 'E';
+ if (nExp < 0)
+ {
+ nExp = -nExp;
+ *p++ = '-';
+ }
+ else
+ *p++ = '+';
+
+ if (eFormat == rtl_math_StringFormat_E || nExp >= 100)
+ *p++ = nExp / 100 + '0';
+
+ nExp %= 100;
+
+ if (eFormat == rtl_math_StringFormat_E || eFormat == rtl_math_StringFormat_E2 || nExp >= 10)
+ *p++ = nExp / 10 + '0';
+
+ *p++ = nExp % 10 + '0';
+ }
+
+ if (!pResultCapacity)
+ newFromStr_WithLength(pResult, pBuf, p - pBuf);
+ else
+ append(pResult, pResultCapacity, nResultOffset, std::basic_string_view(pBuf, p - pBuf));
+}
+
+template <sal_Int32 maxLen, typename C, typename T> sal_Int32 SAL_CALL valueOfFP(C* pStr, T f)
+{
+ assert(pStr);
+ STRINGDATA<C>* pResult = nullptr;
+ doubleToString(&pResult, nullptr, 0, f, rtl_math_StringFormat_G,
+ maxLen - std::size("-x.E-xxx") + 1, '.', nullptr, 0, true);
+ const sal_Int32 nLen = pResult->length;
+ assert(nLen < maxLen);
+ Copy(pStr, pResult->buffer, nLen + 1);
+ release(pResult);
+ return nLen;
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/unload.cxx b/sal/rtl/unload.cxx
new file mode 100644
index 000000000..beac56ffa
--- /dev/null
+++ b/sal/rtl/unload.cxx
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <osl/time.h>
+#include <rtl/unload.h>
+
+extern "C" void rtl_moduleCount_acquire(rtl_ModuleCount*) {}
+
+extern "C" void rtl_moduleCount_release(rtl_ModuleCount*) {}
+
+extern "C" sal_Bool rtl_moduleCount_canUnload(rtl_StandardModuleCount*, TimeValue*)
+{
+ return false;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/uri.cxx b/sal/rtl/uri.cxx
new file mode 100644
index 000000000..341455261
--- /dev/null
+++ b/sal/rtl/uri.cxx
@@ -0,0 +1,759 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <rtl/character.hxx>
+#include <rtl/strbuf.hxx>
+#include <rtl/textenc.h>
+#include <rtl/textcvt.h>
+#include <rtl/uri.h>
+#include <rtl/uri.hxx>
+#include <rtl/ustrbuf.h>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+#include <sal/macros.h>
+
+#include <uri_internal.hxx>
+
+#include <algorithm>
+#include <cstddef>
+
+namespace {
+
+sal_Unicode const cEscapePrefix = 0x25; // '%'
+
+int getHexWeight(sal_uInt32 nUtf32)
+{
+ return nUtf32 >= 0x30 && nUtf32 <= 0x39 ? // '0'--'9'
+ static_cast< int >(nUtf32 - 0x30) :
+ nUtf32 >= 0x41 && nUtf32 <= 0x46 ? // 'A'--'F'
+ static_cast< int >(nUtf32 - 0x41 + 10) :
+ nUtf32 >= 0x61 && nUtf32 <= 0x66 ? // 'a'--'f'
+ static_cast< int >(nUtf32 - 0x61 + 10) :
+ -1; // not a hex digit
+}
+
+bool isValid(sal_Bool const * pCharClass, sal_uInt32 nUtf32)
+{
+ return nUtf32 < rtl::UriCharClassSize && pCharClass[nUtf32];
+}
+
+void writeUnicode(rtl_uString ** pBuffer, sal_Int32 * pCapacity,
+ sal_Unicode cChar)
+{
+ rtl_uStringbuffer_insert(pBuffer, pCapacity, (*pBuffer)->length, &cChar, 1);
+}
+
+}
+
+namespace rtl::uri::detail {
+
+/** Read any of the following:
+
+ @li sequence of escape sequences representing character from eCharset,
+ translated to single UCS4 character; or
+ @li pair of UTF-16 surrogates, translated to single UCS4 character; or
+ @li single UTF-16 character, extended to UCS4 character.
+ */
+sal_uInt32 readUcs4(sal_Unicode const ** pBegin, sal_Unicode const * pEnd,
+ bool bEncoded, rtl_TextEncoding eCharset,
+ EscapeType * pType)
+{
+ sal_uInt32 nChar = *(*pBegin)++;
+ int nWeight1;
+ int nWeight2;
+ if (nChar == cEscapePrefix && bEncoded && pEnd - *pBegin >= 2
+ && (nWeight1 = getHexWeight((*pBegin)[0])) >= 0
+ && (nWeight2 = getHexWeight((*pBegin)[1])) >= 0)
+ {
+ *pBegin += 2;
+ nChar = static_cast< sal_uInt32 >(nWeight1 << 4 | nWeight2);
+ if (nChar <= 0x7F)
+ {
+ *pType = EscapeChar;
+ }
+ else if (eCharset == RTL_TEXTENCODING_UTF8)
+ {
+ if (nChar >= 0xC0 && nChar <= 0xF4)
+ {
+ sal_uInt32 nEncoded;
+ int nShift;
+ sal_uInt32 nMin;
+ if (nChar <= 0xDF)
+ {
+ nEncoded = (nChar & 0x1F) << 6;
+ nShift = 0;
+ nMin = 0x80;
+ }
+ else if (nChar <= 0xEF)
+ {
+ nEncoded = (nChar & 0x0F) << 12;
+ nShift = 6;
+ nMin = 0x800;
+ }
+ else
+ {
+ nEncoded = (nChar & 0x07) << 18;
+ nShift = 12;
+ nMin = 0x10000;
+ }
+
+ sal_Unicode const * p = *pBegin;
+ bool bUTF8 = true;
+
+ for (; nShift >= 0; nShift -= 6)
+ {
+ if (pEnd - p < 3 || p[0] != cEscapePrefix
+ || (nWeight1 = getHexWeight(p[1])) < 8
+ || nWeight1 > 11
+ || (nWeight2 = getHexWeight(p[2])) < 0)
+ {
+ bUTF8 = false;
+ break;
+ }
+ p += 3;
+ nEncoded |= ((nWeight1 & 3) << 4 | nWeight2) << nShift;
+ }
+ if (bUTF8 && rtl::isUnicodeScalarValue(nEncoded)
+ && nEncoded >= nMin)
+ {
+ *pBegin = p;
+ *pType = EscapeChar;
+ return nEncoded;
+ }
+ }
+ *pType = EscapeOctet;
+ }
+ else
+ {
+ OStringBuffer aBuf;
+ aBuf.append(static_cast< char >(nChar));
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(eCharset);
+ sal_Unicode const * p = *pBegin;
+
+ for (;;)
+ {
+ sal_Unicode aDst[2];
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ sal_Size nDstSize = rtl_convertTextToUnicode(
+ aConverter, nullptr, aBuf.getStr(), aBuf.getLength(), aDst,
+ SAL_N_ELEMENTS( aDst ),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+
+ if (nInfo == 0)
+ {
+ assert( nConverted
+ == sal::static_int_cast< sal_uInt32 >(
+ aBuf.getLength()));
+
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ *pBegin = p;
+ *pType = EscapeChar;
+
+ assert( nDstSize == 1
+ || (nDstSize == 2 && rtl::isHighSurrogate(aDst[0])
+ && rtl::isLowSurrogate(aDst[1])));
+
+ return nDstSize == 1
+ ? aDst[0] : rtl::combineSurrogates(aDst[0], aDst[1]);
+ }
+ if (nInfo == RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL
+ && pEnd - p >= 3 && p[0] == cEscapePrefix
+ && (nWeight1 = getHexWeight(p[1])) >= 0
+ && (nWeight2 = getHexWeight(p[2])) >= 0)
+ {
+ p += 3;
+ aBuf.append(static_cast< char >(nWeight1 << 4 | nWeight2));
+ }
+ else if (nInfo == RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL
+ && p != pEnd && *p <= 0x7F)
+ {
+ aBuf.append(static_cast< char >(*p++));
+ }
+ else
+ {
+ assert(
+ (nInfo & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)
+ == 0);
+ break;
+ }
+ }
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ *pType = EscapeOctet;
+ }
+ return nChar;
+ }
+
+ *pType = EscapeNo;
+ return rtl::isHighSurrogate(nChar) && *pBegin < pEnd
+ && rtl::isLowSurrogate(**pBegin) ?
+ rtl::combineSurrogates(nChar, *(*pBegin)++) : nChar;
+}
+
+}
+
+namespace {
+
+void writeUcs4(rtl_uString ** pBuffer, sal_Int32 * pCapacity, sal_uInt32 nUtf32)
+{
+ rtl_uStringbuffer_insertUtf32(pBuffer, pCapacity, (*pBuffer)->length, nUtf32);
+}
+
+void writeEscapeOctet(rtl_uString ** pBuffer, sal_Int32 * pCapacity,
+ sal_uInt32 nOctet)
+{
+ assert(nOctet <= 0xFF); // bad octet
+
+ static sal_Unicode const aHex[16]
+ = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }; /* '0'--'9', 'A'--'F' */
+
+ writeUnicode(pBuffer, pCapacity, cEscapePrefix);
+ writeUnicode(pBuffer, pCapacity, aHex[nOctet >> 4]);
+ writeUnicode(pBuffer, pCapacity, aHex[nOctet & 15]);
+}
+
+bool writeEscapeChar(rtl_uString ** pBuffer, sal_Int32 * pCapacity,
+ sal_uInt32 nUtf32, rtl_TextEncoding eCharset, bool bStrict)
+{
+ assert(rtl::isUnicodeCodePoint(nUtf32));
+ if (eCharset == RTL_TEXTENCODING_UTF8)
+ {
+ if (nUtf32 < 0x80)
+ {
+ writeEscapeOctet(pBuffer, pCapacity, nUtf32);
+ }
+ else if (nUtf32 < 0x800)
+ {
+ writeEscapeOctet(pBuffer, pCapacity, nUtf32 >> 6 | 0xC0);
+ writeEscapeOctet(pBuffer, pCapacity, (nUtf32 & 0x3F) | 0x80);
+ }
+ else if (nUtf32 < 0x10000)
+ {
+ writeEscapeOctet(pBuffer, pCapacity, nUtf32 >> 12 | 0xE0);
+ writeEscapeOctet(pBuffer, pCapacity, (nUtf32 >> 6 & 0x3F) | 0x80);
+ writeEscapeOctet(pBuffer, pCapacity, (nUtf32 & 0x3F) | 0x80);
+ }
+ else
+ {
+ writeEscapeOctet(pBuffer, pCapacity, nUtf32 >> 18 | 0xF0);
+ writeEscapeOctet(pBuffer, pCapacity, (nUtf32 >> 12 & 0x3F) | 0x80);
+ writeEscapeOctet(pBuffer, pCapacity, (nUtf32 >> 6 & 0x3F) | 0x80);
+ writeEscapeOctet(pBuffer, pCapacity, (nUtf32 & 0x3F) | 0x80);
+ }
+ }
+ else
+ {
+ rtl_UnicodeToTextConverter aConverter
+ = rtl_createUnicodeToTextConverter(eCharset);
+ sal_Unicode aSrc[2];
+ sal_Size nSrcSize = rtl::splitSurrogates(nUtf32, aSrc);
+
+ char aDst[32]; // FIXME random value
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ sal_Size nDstSize = rtl_convertUnicodeToText(
+ aConverter, nullptr, aSrc, nSrcSize, aDst, sizeof aDst,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_FLUSH,
+ &nInfo, &nConverted);
+ assert((nInfo & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0);
+ rtl_destroyUnicodeToTextConverter(aConverter);
+
+ if (nInfo == 0)
+ {
+ assert(nConverted == nSrcSize); // bad rtl_convertUnicodeToText
+
+ for (sal_Size i = 0; i < nDstSize; ++i)
+ {
+ writeEscapeOctet(pBuffer, pCapacity,
+ static_cast< unsigned char >(aDst[i]));
+ // FIXME all octets are escaped, even if there is no need
+ }
+ }
+ else
+ {
+ if (bStrict)
+ return false;
+
+ writeUcs4(pBuffer, pCapacity, nUtf32);
+ }
+ }
+ return true;
+}
+
+struct Component
+{
+ sal_Unicode const * pBegin;
+ sal_Unicode const * pEnd;
+
+ Component(): pBegin(nullptr), pEnd(nullptr) {}
+
+ bool isPresent() const { return pBegin != nullptr; }
+
+ sal_Int32 getLength() const;
+};
+
+sal_Int32 Component::getLength() const
+{
+ assert(isPresent()); // taking length of non-present component
+ return static_cast< sal_Int32 >(pEnd - pBegin);
+}
+
+struct Components
+{
+ Component aScheme;
+ Component aAuthority;
+ Component aPath;
+ Component aQuery;
+ Component aFragment;
+};
+
+void parseUriRef(rtl_uString const * pUriRef, Components * pComponents)
+{
+ // This algorithm is liberal and accepts various forms of illegal input.
+
+ sal_Unicode const * pBegin = pUriRef->buffer;
+ sal_Unicode const * pEnd = pBegin + pUriRef->length;
+ sal_Unicode const * pPos = pBegin;
+
+ if (pPos != pEnd && rtl::isAsciiAlpha(*pPos))
+ {
+ for (sal_Unicode const * p = pPos + 1; p != pEnd; ++p)
+ {
+ if (*p == ':')
+ {
+ pComponents->aScheme.pBegin = pBegin;
+ pComponents->aScheme.pEnd = ++p;
+ pPos = p;
+ break;
+ }
+
+ if (!rtl::isAsciiAlphanumeric(*p) && *p != '+' && *p != '-'
+ && *p != '.')
+ {
+ break;
+ }
+ }
+ }
+
+ if (pEnd - pPos >= 2 && pPos[0] == '/' && pPos[1] == '/')
+ {
+ pComponents->aAuthority.pBegin = pPos;
+ pPos += 2;
+ while (pPos != pEnd && *pPos != '/' && *pPos != '?' && *pPos != '#')
+ {
+ ++pPos;
+ }
+
+ pComponents->aAuthority.pEnd = pPos;
+ }
+
+ pComponents->aPath.pBegin = pPos;
+ while (pPos != pEnd && *pPos != '?' && * pPos != '#')
+ {
+ ++pPos;
+ }
+
+ pComponents->aPath.pEnd = pPos;
+
+ if (pPos != pEnd && *pPos == '?')
+ {
+ pComponents->aQuery.pBegin = pPos++;
+ while (pPos != pEnd && * pPos != '#')
+ {
+ ++pPos;
+ }
+
+ pComponents->aQuery.pEnd = pPos;
+ }
+
+ if (pPos != pEnd)
+ {
+ assert(*pPos == '#');
+ pComponents->aFragment.pBegin = pPos;
+ pComponents->aFragment.pEnd = pEnd;
+ }
+}
+
+void appendPath(
+ OUStringBuffer & buffer, sal_Int32 bufferStart, bool precedingSlash,
+ sal_Unicode const * pathBegin, sal_Unicode const * pathEnd)
+{
+ while (precedingSlash || pathBegin != pathEnd)
+ {
+ sal_Unicode const * p = pathBegin;
+ while (p != pathEnd && *p != '/')
+ {
+ ++p;
+ }
+
+ std::size_t n = p - pathBegin;
+ if (n == 1 && pathBegin[0] == '.')
+ {
+ // input begins with "." -> remove from input (and done):
+ // i.e., !precedingSlash -> !precedingSlash
+ // input begins with "./" -> remove from input:
+ // i.e., !precedingSlash -> !precedingSlash
+ // input begins with "/." -> replace with "/" in input (and not yet
+ // done):
+ // i.e., precedingSlash -> precedingSlash
+ // input begins with "/./" -> replace with "/" in input:
+ // i.e., precedingSlash -> precedingSlash
+ }
+ else if (n == 2 && pathBegin[0] == '.' && pathBegin[1] == '.')
+ {
+ // input begins with ".." -> remove from input (and done):
+ // i.e., !precedingSlash -> !precedingSlash
+ // input begins with "../" -> remove from input
+ // i.e., !precedingSlash -> !precedingSlash
+ // input begins with "/.." -> replace with "/" in input, and shrink
+ // output (not yet done):
+ // i.e., precedingSlash -> precedingSlash
+ // input begins with "/../" -> replace with "/" in input, and shrink
+ // output:
+ // i.e., precedingSlash -> precedingSlash
+ if (precedingSlash)
+ {
+ buffer.truncate(
+ bufferStart
+ + std::max<sal_Int32>(
+ rtl_ustr_lastIndexOfChar_WithLength(
+ buffer.getStr() + bufferStart,
+ buffer.getLength() - bufferStart, '/'),
+ 0));
+ }
+ }
+ else
+ {
+ if (precedingSlash)
+ buffer.append('/');
+
+ buffer.append(pathBegin, n);
+ precedingSlash = p != pathEnd;
+ }
+ pathBegin = p + (p == pathEnd ? 0 : 1);
+ }
+}
+
+}
+
+sal_Bool const * SAL_CALL rtl_getUriCharClass(rtl_UriCharClass eCharClass)
+ SAL_THROW_EXTERN_C()
+{
+ static constexpr std::array<sal_Bool, rtl::UriCharClassSize> aCharClass[] = {
+ rtl::createUriCharClass(u8""), // None
+ rtl::createUriCharClass(
+ u8"!$&'()*+,-./:;=?@[]_~"
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // Uric
+ rtl::createUriCharClass(
+ u8"!$&'()*+,-.:;=?@_~"
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // UricNoSlash
+ rtl::createUriCharClass(
+ u8"!$&'()*+,-.;=@_~"
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // RelSegment
+ rtl::createUriCharClass(
+ u8"!$&'()*+,-.:;=@_~"
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // RegName
+ rtl::createUriCharClass(
+ u8"!$&'()*+,-.:;=_~"
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // Userinfo
+ rtl::createUriCharClass(
+ u8"!$&'()*+,-.:=@_~"
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // Pchar
+ rtl::createUriCharClass(
+ u8"!$&'()*+-./:?@_~"
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")}; // UnoParamValue
+
+ assert(
+ (eCharClass >= 0
+ && (sal::static_int_cast< std::size_t >(eCharClass)
+ < SAL_N_ELEMENTS(aCharClass)))); // bad eCharClass
+ return aCharClass[eCharClass].data();
+}
+
+void SAL_CALL rtl_uriEncode(rtl_uString * pText, sal_Bool const * pCharClass,
+ rtl_UriEncodeMechanism eMechanism,
+ rtl_TextEncoding eCharset, rtl_uString ** pResult)
+ SAL_THROW_EXTERN_C()
+{
+ assert(!pCharClass[0x25]); // make sure the percent sign is encoded...
+
+ sal_Unicode const * p = pText->buffer;
+ sal_Unicode const * pEnd = p + pText->length;
+ sal_Int32 nCapacity = 256;
+ rtl_uString_new_WithLength(pResult, nCapacity);
+
+ while (p < pEnd)
+ {
+ rtl::uri::detail::EscapeType eType;
+ sal_uInt32 nUtf32 = rtl::uri::detail::readUcs4(
+ &p, pEnd,
+ (eMechanism == rtl_UriEncodeKeepEscapes
+ || eMechanism == rtl_UriEncodeCheckEscapes
+ || eMechanism == rtl_UriEncodeStrictKeepEscapes),
+ eCharset, &eType);
+
+ switch (eType)
+ {
+ case rtl::uri::detail::EscapeNo:
+ if (isValid(pCharClass, nUtf32)) // implies nUtf32 <= 0x7F
+ {
+ writeUnicode(pResult, &nCapacity,
+ static_cast< sal_Unicode >(nUtf32));
+ }
+ else if (!writeEscapeChar(
+ pResult, &nCapacity, nUtf32, eCharset,
+ (eMechanism == rtl_UriEncodeStrict
+ || eMechanism == rtl_UriEncodeStrictKeepEscapes)))
+ {
+ rtl_uString_new(pResult);
+ return;
+ }
+ break;
+
+ case rtl::uri::detail::EscapeChar:
+ if (eMechanism == rtl_UriEncodeCheckEscapes
+ && isValid(pCharClass, nUtf32)) // implies nUtf32 <= 0x7F
+ {
+ writeUnicode(pResult, &nCapacity,
+ static_cast< sal_Unicode >(nUtf32));
+ }
+ else if (!writeEscapeChar(
+ pResult, &nCapacity, nUtf32, eCharset,
+ (eMechanism == rtl_UriEncodeStrict
+ || eMechanism == rtl_UriEncodeStrictKeepEscapes)))
+ {
+ rtl_uString_new(pResult);
+ return;
+ }
+ break;
+
+ case rtl::uri::detail::EscapeOctet:
+ writeEscapeOctet(pResult, &nCapacity, nUtf32);
+ break;
+ }
+ }
+ *pResult = rtl_uStringBuffer_makeStringAndClear(pResult, &nCapacity);
+}
+
+void SAL_CALL rtl_uriDecode(rtl_uString * pText,
+ rtl_UriDecodeMechanism eMechanism,
+ rtl_TextEncoding eCharset, rtl_uString ** pResult)
+ SAL_THROW_EXTERN_C()
+{
+ switch (eMechanism)
+ {
+ case rtl_UriDecodeNone:
+ rtl_uString_assign(pResult, pText);
+ break;
+
+ case rtl_UriDecodeToIuri:
+ eCharset = RTL_TEXTENCODING_UTF8;
+ [[fallthrough]];
+ default: // rtl_UriDecodeWithCharset, rtl_UriDecodeStrict
+ {
+ sal_Unicode const * p = pText->buffer;
+ sal_Unicode const * pEnd = p + pText->length;
+ sal_Int32 nCapacity = pText->length;
+ rtl_uString_new_WithLength(pResult, nCapacity);
+
+ while (p < pEnd)
+ {
+ rtl::uri::detail::EscapeType eType;
+ sal_uInt32 nUtf32 = rtl::uri::detail::readUcs4(&p, pEnd, true, eCharset, &eType);
+ switch (eType)
+ {
+ case rtl::uri::detail::EscapeChar:
+ if (nUtf32 <= 0x7F && eMechanism == rtl_UriDecodeToIuri)
+ {
+ writeEscapeOctet(pResult, &nCapacity, nUtf32);
+ break;
+ }
+ [[fallthrough]];
+
+ case rtl::uri::detail::EscapeNo:
+ writeUcs4(pResult, &nCapacity, nUtf32);
+ break;
+
+ case rtl::uri::detail::EscapeOctet:
+ if (eMechanism == rtl_UriDecodeStrict)
+ {
+ rtl_uString_new(pResult);
+ return;
+ }
+ writeEscapeOctet(pResult, &nCapacity, nUtf32);
+ break;
+ }
+ }
+
+ *pResult = rtl_uStringBuffer_makeStringAndClear( pResult, &nCapacity );
+ }
+ break;
+ }
+}
+
+sal_Bool SAL_CALL rtl_uriConvertRelToAbs(rtl_uString * pBaseUriRef,
+ rtl_uString * pRelUriRef,
+ rtl_uString ** pResult,
+ rtl_uString ** pException)
+ SAL_THROW_EXTERN_C()
+{
+ // Use the strict parser algorithm from RFC 3986, section 5.2, to turn the
+ // relative URI into an absolute one:
+ Components aRelComponents;
+ parseUriRef(pRelUriRef, &aRelComponents);
+ OUStringBuffer aBuffer(256);
+
+ if (aRelComponents.aScheme.isPresent())
+ {
+ aBuffer.append(aRelComponents.aScheme.pBegin,
+ aRelComponents.aScheme.getLength());
+
+ if (aRelComponents.aAuthority.isPresent())
+ {
+ aBuffer.append(aRelComponents.aAuthority.pBegin,
+ aRelComponents.aAuthority.getLength());
+ }
+
+ appendPath(
+ aBuffer, aBuffer.getLength(), false, aRelComponents.aPath.pBegin,
+ aRelComponents.aPath.pEnd);
+
+ if (aRelComponents.aQuery.isPresent())
+ {
+ aBuffer.append(aRelComponents.aQuery.pBegin,
+ aRelComponents.aQuery.getLength());
+ }
+ }
+ else
+ {
+ Components aBaseComponents;
+ parseUriRef(pBaseUriRef, &aBaseComponents);
+ if (!aBaseComponents.aScheme.isPresent())
+ {
+ rtl_uString_assign(
+ pException,
+ (OUString(
+ "<" + OUString::unacquired(&pBaseUriRef)
+ + "> does not start with a scheme component")
+ .pData));
+ return false;
+ }
+
+ aBuffer.append(aBaseComponents.aScheme.pBegin,
+ aBaseComponents.aScheme.getLength());
+ if (aRelComponents.aAuthority.isPresent())
+ {
+ aBuffer.append(aRelComponents.aAuthority.pBegin,
+ aRelComponents.aAuthority.getLength());
+ appendPath(
+ aBuffer, aBuffer.getLength(), false,
+ aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd);
+
+ if (aRelComponents.aQuery.isPresent())
+ {
+ aBuffer.append(aRelComponents.aQuery.pBegin,
+ aRelComponents.aQuery.getLength());
+ }
+ }
+ else
+ {
+ if (aBaseComponents.aAuthority.isPresent())
+ {
+ aBuffer.append(aBaseComponents.aAuthority.pBegin,
+ aBaseComponents.aAuthority.getLength());
+ }
+
+ if (aRelComponents.aPath.pBegin == aRelComponents.aPath.pEnd)
+ {
+ aBuffer.append(aBaseComponents.aPath.pBegin,
+ aBaseComponents.aPath.getLength());
+ if (aRelComponents.aQuery.isPresent())
+ {
+ aBuffer.append(aRelComponents.aQuery.pBegin,
+ aRelComponents.aQuery.getLength());
+ }
+ else if (aBaseComponents.aQuery.isPresent())
+ {
+ aBuffer.append(aBaseComponents.aQuery.pBegin,
+ aBaseComponents.aQuery.getLength());
+ }
+ }
+ else
+ {
+ if (*aRelComponents.aPath.pBegin == '/')
+ {
+ appendPath(
+ aBuffer, aBuffer.getLength(), false,
+ aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd);
+ }
+ else if (aBaseComponents.aAuthority.isPresent()
+ && aBaseComponents.aPath.pBegin
+ == aBaseComponents.aPath.pEnd)
+ {
+ appendPath(
+ aBuffer, aBuffer.getLength(), true,
+ aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd);
+ }
+ else
+ {
+ sal_Int32 n = aBuffer.getLength();
+ sal_Int32 i = rtl_ustr_lastIndexOfChar_WithLength(
+ aBaseComponents.aPath.pBegin,
+ aBaseComponents.aPath.getLength(), '/');
+
+ if (i >= 0)
+ {
+ appendPath(
+ aBuffer, n, false, aBaseComponents.aPath.pBegin,
+ aBaseComponents.aPath.pBegin + i);
+ }
+
+ appendPath(
+ aBuffer, n, i >= 0, aRelComponents.aPath.pBegin,
+ aRelComponents.aPath.pEnd);
+ }
+
+ if (aRelComponents.aQuery.isPresent())
+ {
+ aBuffer.append(aRelComponents.aQuery.pBegin,
+ aRelComponents.aQuery.getLength());
+ }
+ }
+ }
+ }
+ if (aRelComponents.aFragment.isPresent())
+ {
+ aBuffer.append(aRelComponents.aFragment.pBegin,
+ aRelComponents.aFragment.getLength());
+ }
+
+ rtl_uString_assign(pResult, aBuffer.makeStringAndClear().pData);
+ return true;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/ustrbuf.cxx b/sal/rtl/ustrbuf.cxx
new file mode 100644
index 000000000..c91834cfa
--- /dev/null
+++ b/sal/rtl/ustrbuf.cxx
@@ -0,0 +1,115 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <string.h>
+
+#include <osl/interlck.h>
+#include <osl/diagnose.h>
+#include <rtl/character.hxx>
+#include <rtl/ustrbuf.hxx>
+#include "strimp.hxx"
+
+#if USE_SDT_PROBES
+#define RTL_LOG_STRING_BITS 16
+#endif
+
+#include "strtmpl.hxx"
+
+void SAL_CALL rtl_uStringbuffer_newFromStr_WithLength( rtl_uString ** newStr,
+ const sal_Unicode * value,
+ sal_Int32 count)
+{
+ rtl::str::stringbuffer_newFromStr_WithLength(newStr, value, count);
+}
+
+rtl_uString * SAL_CALL rtl_uStringBuffer_refReturn( rtl_uString * pThis )
+{
+ RTL_LOG_STRING_NEW( pThis );
+ rtl::str::acquire( pThis );
+ return pThis;
+}
+
+rtl_uString * SAL_CALL rtl_uStringBuffer_makeStringAndClear( rtl_uString ** ppThis,
+ sal_Int32 *nCapacity )
+{
+ assert(ppThis);
+ assert(nCapacity);
+ // avoid an un-necessary atomic ref/unref pair
+ rtl_uString *pStr = *ppThis;
+ *ppThis = nullptr;
+
+ rtl::str::new_(ppThis);
+ *nCapacity = 0;
+
+ RTL_LOG_STRING_NEW( pStr );
+
+ return pStr;
+}
+
+sal_Int32 SAL_CALL rtl_uStringbuffer_newFromStringBuffer( rtl_uString ** newStr,
+ sal_Int32 capacity,
+ rtl_uString * oldStr )
+{
+ return rtl::str::stringbuffer_newFromStringBuffer(newStr, capacity, oldStr);
+}
+
+void SAL_CALL rtl_uStringbuffer_ensureCapacity
+ (rtl_uString ** This, sal_Int32* capacity, sal_Int32 minimumCapacity)
+{
+ rtl::str::stringbuffer_ensureCapacity(This, capacity, minimumCapacity);
+}
+
+void SAL_CALL rtl_uStringbuffer_insert( rtl_uString ** This,
+ sal_Int32 * capacity,
+ sal_Int32 offset,
+ const sal_Unicode * str,
+ sal_Int32 len)
+{
+ rtl::str::stringbuffer_insert(This, capacity, offset, str, len);
+}
+
+void rtl_uStringbuffer_insertUtf32(
+ rtl_uString ** pThis, sal_Int32 * capacity, sal_Int32 offset, sal_uInt32 c)
+ SAL_THROW_EXTERN_C()
+{
+ sal_Unicode buf[2];
+ sal_Int32 len = rtl::splitSurrogates(c, buf);
+ rtl::str::stringbuffer_insert(pThis, capacity, offset, buf, len);
+}
+
+void SAL_CALL rtl_uStringbuffer_insert_ascii( /*inout*/rtl_uString ** This,
+ /*inout*/sal_Int32 * capacity,
+ sal_Int32 offset,
+ const char * str,
+ sal_Int32 len)
+{
+ rtl::str::stringbuffer_insert(This, capacity, offset, str, len);
+}
+
+/*************************************************************************
+ * rtl_uStringbuffer_remove
+ */
+void SAL_CALL rtl_uStringbuffer_remove( rtl_uString ** This,
+ sal_Int32 start,
+ sal_Int32 len )
+{
+ rtl::str::stringbuffer_remove(This, start, len);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/ustring.cxx b/sal/rtl/ustring.cxx
new file mode 100644
index 000000000..6fc0e8707
--- /dev/null
+++ b/sal/rtl/ustring.cxx
@@ -0,0 +1,1324 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstdlib>
+#include <limits>
+#include <stdexcept>
+#include <string>
+
+#include <config_options.h>
+#include <osl/diagnose.h>
+#include <osl/interlck.h>
+#include <osl/mutex.h>
+#include <rtl/tencinfo.h>
+
+#include <string.h>
+#include <sal/alloca.h>
+#include <sal/log.hxx>
+
+#include "hash.hxx"
+#include "strimp.hxx"
+#include <rtl/character.hxx>
+#include <rtl/ustring.h>
+
+#include <rtl/math.h>
+
+#if defined _WIN32
+// Temporary check to verify that the #pragma pack around rtl_uString is indeed cargo cult and can
+// safely be removed:
+static_assert(alignof (rtl_uString) == 4);
+static_assert(sizeof (rtl_uString) == 12);
+#endif
+
+/* ======================================================================= */
+
+#if USE_SDT_PROBES
+#define RTL_LOG_STRING_BITS 16
+#endif
+
+#include "strtmpl.hxx"
+
+/* ======================================================================= */
+
+sal_Int32 rtl_ustr_indexOfAscii_WithLength(
+ sal_Unicode const * str, sal_Int32 len,
+ char const * subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfStr_WithLength(str, len, subStr, subLen);
+}
+
+sal_Int32 rtl_ustr_lastIndexOfAscii_WithLength(
+ sal_Unicode const * str, sal_Int32 len,
+ char const * subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C()
+{
+ assert(len >= 0);
+ assert(subLen >= 0);
+ if (subLen > 0 && subLen <= len) {
+ sal_Int32 i;
+ for (i = len - subLen; i >= 0; --i) {
+ if (rtl_ustr_asciil_reverseEquals_WithLength(
+ str + i, subStr, subLen))
+ {
+ return i;
+ }
+ }
+ }
+ return -1;
+}
+
+sal_Int32 SAL_CALL rtl_ustr_valueOfFloat(sal_Unicode * pStr, float f)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfFP<RTL_USTR_MAX_VALUEOFFLOAT>(pStr, f);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_valueOfDouble(sal_Unicode * pStr, double d)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfFP<RTL_USTR_MAX_VALUEOFDOUBLE>(pStr, d);
+}
+
+namespace {
+
+// Avoid -fsanitize=undefined warning e.g. "runtime error: value 1e+99 is
+// outside the range of representable values of type 'float'" with Clang prior to
+// <https://github.com/llvm/llvm-project/commit/9e52c43090f8cd980167bbd2719878ae36bcf6b5> "Treat the
+// range of representable values of floating-point types as [-inf, +inf] not as [-max, +max]"
+// (ENABLE_RUNTIME_OPTIMIZATIONS is an approximation for checking whether building is done without
+// -fsanitize=undefined):
+float doubleToFloat(double x) {
+#if !defined __clang__ || __clang_major__ >= 9 || ENABLE_RUNTIME_OPTIMIZATIONS
+ return static_cast<float>(x);
+#else
+ return
+ x < -std::numeric_limits<float>::max()
+ ? -std::numeric_limits<float>::infinity()
+ : x > std::numeric_limits<float>::max()
+ ? std::numeric_limits<float>::infinity()
+ : static_cast<float>(x);
+#endif
+}
+
+}
+
+float SAL_CALL rtl_ustr_toFloat(sal_Unicode const * pStr) SAL_THROW_EXTERN_C()
+{
+ assert(pStr);
+ return doubleToFloat(rtl_math_uStringToDouble(pStr,
+ pStr + rtl_ustr_getLength(pStr),
+ '.', 0, nullptr, nullptr));
+}
+
+double SAL_CALL rtl_ustr_toDouble(sal_Unicode const * pStr) SAL_THROW_EXTERN_C()
+{
+ assert(pStr);
+ return rtl_math_uStringToDouble(pStr, pStr + rtl_ustr_getLength(pStr), '.',
+ 0, nullptr, nullptr);
+}
+
+/* ======================================================================= */
+
+sal_Int32 SAL_CALL rtl_ustr_ascii_compare( const sal_Unicode* pStr1,
+ const char* pStr2 )
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2),
+ rtl::str::CompareNormal(), rtl::str::noShortening);
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Int32 SAL_CALL rtl_ustr_ascii_compare_WithLength( const sal_Unicode* pStr1,
+ sal_Int32 nStr1Len,
+ const char* pStr2 )
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::null_terminated(pStr2),
+ rtl::str::CompareNormal(), rtl::str::noShortening);
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Int32 SAL_CALL rtl_ustr_ascii_shortenedCompare_WithLength( const sal_Unicode* pStr1,
+ sal_Int32 nStr1Len,
+ const char* pStr2,
+ sal_Int32 nShortenedLength )
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::null_terminated(pStr2),
+ rtl::str::CompareNormal(), nShortenedLength);
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Int32 SAL_CALL rtl_ustr_asciil_reverseCompare_WithLength( const sal_Unicode* pStr1,
+ sal_Int32 nStr1Len,
+ const char* pStr2,
+ sal_Int32 nStr2Len )
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::reverseCompare_WithLengths(pStr1, nStr1Len, pStr2, nStr2Len,
+ rtl::str::CompareNormal());
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Bool SAL_CALL rtl_ustr_asciil_reverseEquals_WithLength( const sal_Unicode* pStr1,
+ const char* pStr2,
+ sal_Int32 nStrLen )
+ SAL_THROW_EXTERN_C()
+{
+ assert(nStrLen >= 0);
+ const sal_Unicode* pStr1Run = pStr1+nStrLen;
+ const char* pStr2Run = pStr2+nStrLen;
+ while ( pStr1 < pStr1Run )
+ {
+ SAL_WARN_IF( !rtl::isAscii(static_cast<unsigned char>(*pStr2)), "rtl.string",
+ "rtl_ustr_asciil_reverseEquals_WithLength - Found char > 127" );
+ pStr1Run--;
+ pStr2Run--;
+ if( *pStr1Run != static_cast<sal_Unicode>(*pStr2Run) )
+ return false;
+ }
+
+ return true;
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Int32 SAL_CALL rtl_ustr_ascii_compareIgnoreAsciiCase( const sal_Unicode* pStr1,
+ const char* pStr2 )
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2),
+ rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening);
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Int32 SAL_CALL rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( const sal_Unicode* pStr1,
+ sal_Int32 nStr1Len,
+ const char* pStr2 )
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::null_terminated(pStr2),
+ rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening);
+}
+
+sal_Int32 rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths(
+ sal_Unicode const * first, sal_Int32 firstLen,
+ char const * second, sal_Int32 secondLen) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(first, firstLen),
+ rtl::str::with_length(second, secondLen),
+ rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening);
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Int32 SAL_CALL rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( const sal_Unicode* pStr1,
+ sal_Int32 nStr1Len,
+ const char* pStr2,
+ sal_Int32 nShortenedLength )
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::null_terminated(pStr2),
+ rtl::str::CompareIgnoreAsciiCase(), nShortenedLength);
+}
+
+/* ----------------------------------------------------------------------- */
+
+void SAL_CALL rtl_uString_newFromAscii( rtl_uString** ppThis,
+ const char* pCharStr )
+ SAL_THROW_EXTERN_C()
+{
+ assert(ppThis);
+ sal_Int32 nLen = pCharStr ? rtl::str::getLength(pCharStr) : 0;
+
+ if ( !nLen )
+ {
+ rtl_uString_new( ppThis );
+ return;
+ }
+
+ if ( *ppThis )
+ rtl_uString_release( *ppThis );
+
+ *ppThis = rtl_uString_ImplAlloc( nLen );
+ OSL_ASSERT(*ppThis != nullptr);
+ if ( !(*ppThis) )
+ return;
+
+ sal_Unicode* pBuffer = (*ppThis)->buffer;
+ do
+ {
+ assert(static_cast<unsigned char>(*pCharStr) < 0x80); // ASCII range
+ *pBuffer = *pCharStr;
+ pBuffer++;
+ pCharStr++;
+ }
+ while ( *pCharStr );
+
+ RTL_LOG_STRING_NEW( *ppThis );
+}
+
+void SAL_CALL rtl_uString_newFromCodePoints(
+ rtl_uString ** newString, sal_uInt32 const * codePoints,
+ sal_Int32 codePointCount) SAL_THROW_EXTERN_C()
+{
+ sal_Int32 n;
+ sal_Int32 i;
+ sal_Unicode * p;
+ assert(newString != nullptr);
+ assert((codePoints != nullptr || codePointCount == 0) && codePointCount >= 0);
+ if (codePointCount == 0) {
+ rtl_uString_new(newString);
+ return;
+ }
+ if (*newString != nullptr) {
+ rtl_uString_release(*newString);
+ }
+ n = codePointCount;
+ for (i = 0; i < codePointCount; ++i) {
+ OSL_ASSERT(rtl::isUnicodeCodePoint(codePoints[i]));
+ if (codePoints[i] >= 0x10000) {
+ ++n;
+ }
+ }
+ /* Builds on the assumption that sal_Int32 uses 32 bit two's complement
+ representation with wrap around (the necessary number of UTF-16 code
+ units will be no larger than 2 * SAL_MAX_INT32, represented as
+ sal_Int32 -2): */
+ if (n < 0) {
+ // coverity[dead_error_begin] - assumes wrap around
+ *newString = nullptr;
+ return;
+ }
+ *newString = rtl_uString_ImplAlloc(n);
+ if (*newString == nullptr) {
+ return;
+ }
+ p = (*newString)->buffer;
+ for (i = 0; i < codePointCount; ++i) {
+ p += rtl::splitSurrogates(codePoints[i], p);
+ }
+ RTL_LOG_STRING_NEW( *newString );
+}
+
+void rtl_uString_newConcatAsciiL(
+ rtl_uString ** newString, rtl_uString * left, char const * right,
+ sal_Int32 rightLength)
+{
+ rtl::str::newConcat(newString, left, right, rightLength);
+}
+
+void rtl_uString_newConcatUtf16L(
+ rtl_uString ** newString, rtl_uString * left, sal_Unicode const * right,
+ sal_Int32 rightLength)
+{
+ rtl::str::newConcat(newString, left, right, rightLength);
+}
+
+/* ======================================================================= */
+
+static int rtl_ImplGetFastUTF8UnicodeLen( const char* pStr, sal_Int32 nLen, bool * ascii )
+{
+ int n;
+ const char* pEndStr;
+
+ *ascii = true;
+ n = 0;
+ pEndStr = pStr+nLen;
+ while ( pStr < pEndStr )
+ {
+ unsigned char c = static_cast<unsigned char>(*pStr);
+
+ if ( !(c & 0x80) )
+ pStr++;
+ else
+ {
+ if ( (c & 0xE0) == 0xC0 )
+ pStr += 2;
+ else if ( (c & 0xF0) == 0xE0 )
+ pStr += 3;
+ else if ( (c & 0xF8) == 0xF0 )
+ pStr += 4;
+ else if ( (c & 0xFC) == 0xF8 )
+ pStr += 5;
+ else if ( (c & 0xFE) == 0xFC )
+ pStr += 6;
+ else
+ pStr++;
+ *ascii = false;
+ }
+
+ n++;
+ }
+
+ return n;
+}
+
+/* ----------------------------------------------------------------------- */
+
+static void rtl_string2UString_status( rtl_uString** ppThis,
+ const char* pStr,
+ sal_Int32 nLen,
+ rtl_TextEncoding eTextEncoding,
+ sal_uInt32 nCvtFlags,
+ sal_uInt32 *pInfo )
+{
+ OSL_ENSURE(nLen == 0 || rtl_isOctetTextEncoding(eTextEncoding),
+ "rtl_string2UString_status() - Wrong TextEncoding" );
+
+ if ( !nLen )
+ {
+ rtl_uString_new( ppThis );
+ if (pInfo != nullptr) {
+ *pInfo = 0;
+ }
+ }
+ else
+ {
+ if ( *ppThis )
+ rtl_uString_release( *ppThis );
+
+ /* Optimization for US-ASCII */
+ if ( eTextEncoding == RTL_TEXTENCODING_ASCII_US )
+ {
+ sal_Unicode* pBuffer;
+ *ppThis = rtl_uString_ImplAlloc( nLen );
+ if (*ppThis == nullptr) {
+ if (pInfo != nullptr) {
+ *pInfo = RTL_TEXTTOUNICODE_INFO_ERROR |
+ RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ }
+ return;
+ }
+ pBuffer = (*ppThis)->buffer;
+ sal_Int32 nLenCopy(nLen);
+ const char *pStrCopy(pStr);
+ do
+ {
+ /* Check ASCII range */
+ if (static_cast<unsigned char>(*pStrCopy) > 127)
+ {
+ rtl_uString_release(*ppThis);
+ goto retry; // cancel loop - try again with the converter
+ }
+
+ *pBuffer = *pStrCopy;
+ pBuffer++;
+ pStrCopy++;
+ nLenCopy--;
+ }
+ while (nLenCopy);
+ if (pInfo != nullptr) {
+ *pInfo = 0;
+ }
+ RTL_LOG_STRING_NEW( *ppThis );
+ return;
+ }
+retry:
+ {
+ rtl_uString* pTemp;
+ rtl_uString* pTemp2 = nullptr;
+ rtl_TextToUnicodeConverter hConverter;
+ sal_uInt32 nInfo;
+ sal_Size nSrcBytes;
+ sal_Size nDestChars;
+ sal_Size nNewLen;
+
+ /* Optimization for UTF-8 - we try to calculate the exact length */
+ /* For all other encoding we try the maximum - and reallocate
+ the buffer if needed */
+ if ( eTextEncoding == RTL_TEXTENCODING_UTF8 )
+ {
+ bool ascii;
+ nNewLen = rtl_ImplGetFastUTF8UnicodeLen( pStr, nLen, &ascii );
+ /* Includes the string only ASCII, then we could copy
+ the buffer faster */
+ if ( ascii )
+ {
+ sal_Unicode* pBuffer;
+ *ppThis = rtl_uString_ImplAlloc( nLen );
+ if (*ppThis == nullptr)
+ {
+ if (pInfo != nullptr) {
+ *pInfo = RTL_TEXTTOUNICODE_INFO_ERROR |
+ RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ }
+ return;
+ }
+ pBuffer = (*ppThis)->buffer;
+ do
+ {
+ assert((static_cast<unsigned char>(*pStr)) <= 127);
+ *pBuffer = *pStr;
+ pBuffer++;
+ pStr++;
+ nLen--;
+ }
+ while ( nLen );
+ if (pInfo != nullptr) {
+ *pInfo = 0;
+ }
+ RTL_LOG_STRING_NEW( *ppThis );
+ return;
+ }
+ }
+ else
+ nNewLen = nLen;
+
+ nCvtFlags |= RTL_TEXTTOUNICODE_FLAGS_FLUSH;
+ hConverter = rtl_createTextToUnicodeConverter( eTextEncoding );
+
+ pTemp = rtl_uString_ImplAlloc( nNewLen );
+ if (pTemp == nullptr) {
+ if (pInfo != nullptr) {
+ *pInfo = RTL_TEXTTOUNICODE_INFO_ERROR |
+ RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ }
+ return;
+ }
+ nDestChars = rtl_convertTextToUnicode( hConverter, nullptr,
+ pStr, nLen,
+ pTemp->buffer, nNewLen,
+ nCvtFlags,
+ &nInfo, &nSrcBytes );
+
+ /* Buffer not big enough, try again with enough space */
+ /* Shouldn't be the case, but if we get textencoding which
+ could results in more unicode characters we have this
+ code here. Could be the case for apple encodings */
+ while ( nInfo & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL )
+ {
+ rtl_freeString( pTemp );
+ nNewLen += 8;
+ pTemp = rtl_uString_ImplAlloc( nNewLen );
+ if (pTemp == nullptr) {
+ if (pInfo != nullptr) {
+ *pInfo = RTL_TEXTTOUNICODE_INFO_ERROR |
+ RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ }
+ return;
+ }
+ nDestChars = rtl_convertTextToUnicode( hConverter, nullptr,
+ pStr, nLen,
+ pTemp->buffer, nNewLen,
+ nCvtFlags,
+ &nInfo, &nSrcBytes );
+ }
+
+ if (pInfo)
+ *pInfo = nInfo;
+
+ /* Set the buffer to the correct size or if there is too
+ much overhead, reallocate to the correct size */
+ if ( nNewLen > nDestChars+8 )
+ {
+ pTemp2 = rtl_uString_ImplAlloc( nDestChars );
+ }
+ if (pTemp2 != nullptr)
+ {
+ rtl::str::Copy(pTemp2->buffer, pTemp->buffer, nDestChars);
+ rtl_freeString(pTemp);
+ pTemp = pTemp2;
+ }
+ else
+ {
+ pTemp->length = nDestChars;
+ pTemp->buffer[nDestChars] = 0;
+ }
+
+ rtl_destroyTextToUnicodeConverter( hConverter );
+ *ppThis = pTemp;
+
+ /* Results the conversion in an empty buffer -
+ create an empty string */
+ if ( pTemp && !nDestChars )
+ rtl_uString_new( ppThis );
+ }
+ }
+ RTL_LOG_STRING_NEW( *ppThis );
+}
+
+void SAL_CALL rtl_string2UString( rtl_uString** ppThis,
+ const char* pStr,
+ sal_Int32 nLen,
+ rtl_TextEncoding eTextEncoding,
+ sal_uInt32 nCvtFlags ) SAL_THROW_EXTERN_C()
+{
+ assert(ppThis);
+ assert(nLen >= 0);
+ rtl_string2UString_status( ppThis, pStr, nLen, eTextEncoding,
+ nCvtFlags, nullptr );
+}
+
+/* ----------------------------------------------------------------------- */
+
+namespace {
+
+enum StrLifecycle {
+ CANNOT_RETURN,
+ CAN_RETURN = 1
+};
+
+}
+
+static oslMutex
+getInternMutex()
+{
+ static oslMutex pPoolGuard = osl_createMutex();
+
+ return pPoolGuard;
+}
+
+/* returns true if we found a dup in the pool */
+static void rtl_ustring_intern_internal( rtl_uString ** newStr,
+ rtl_uString * str,
+ StrLifecycle can_return )
+{
+ oslMutex pPoolMutex;
+
+ pPoolMutex = getInternMutex();
+
+ osl_acquireMutex( pPoolMutex );
+
+ *newStr = rtl_str_hash_intern (str, can_return);
+
+ osl_releaseMutex( pPoolMutex );
+
+ RTL_LOG_STRING_INTERN_NEW(*newStr, str);
+
+ if( can_return && *newStr != str )
+ { /* we dupped, then found a match */
+ rtl_freeString( str );
+ }
+}
+
+void SAL_CALL rtl_uString_intern( rtl_uString ** newStr,
+ rtl_uString * str) SAL_THROW_EXTERN_C()
+{
+ assert(newStr);
+ assert(str);
+ if (SAL_STRING_IS_INTERN(str))
+ {
+ rtl::str::acquire(str);
+ *newStr = str;
+ }
+ else
+ {
+ rtl_uString *pOrg = *newStr;
+ *newStr = nullptr;
+ rtl_ustring_intern_internal( newStr, str, CANNOT_RETURN );
+ if (pOrg)
+ rtl_uString_release (pOrg);
+ }
+}
+
+static int rtl_canGuessUOutputLength( int len, rtl_TextEncoding eTextEncoding )
+{
+ // FIXME: Maybe we should use a bit flag in the higher bits of the
+ // eTextEncoding value itself to determine the encoding type. But if we
+ // do, be sure to mask the value in certain places that expect the values
+ // to be numbered serially from 0 and up. One such place is
+ // Impl_getTextEncodingData().
+
+ switch ( eTextEncoding )
+ {
+ // 1 to 1 (with no zero elements)
+ case RTL_TEXTENCODING_IBM_437:
+ case RTL_TEXTENCODING_IBM_850:
+ case RTL_TEXTENCODING_IBM_860:
+ case RTL_TEXTENCODING_IBM_861:
+ case RTL_TEXTENCODING_IBM_863:
+ case RTL_TEXTENCODING_IBM_865:
+ return len;
+ }
+ return 0;
+}
+
+void SAL_CALL rtl_uString_internConvert( rtl_uString ** newStr,
+ const char * str,
+ sal_Int32 len,
+ rtl_TextEncoding eTextEncoding,
+ sal_uInt32 convertFlags,
+ sal_uInt32 * pInfo )
+ SAL_THROW_EXTERN_C()
+{
+ assert(newStr);
+ assert(len >= 0);
+ rtl_uString *scratch;
+
+ if (*newStr)
+ {
+ rtl_uString_release (*newStr);
+ *newStr = nullptr;
+ }
+
+ if ( len < 256 )
+ { // try various optimisations
+ sal_Int32 ulen;
+ if ( eTextEncoding == RTL_TEXTENCODING_ASCII_US )
+ {
+ int i;
+ rtl_uString *pScratch;
+ pScratch = static_cast< rtl_uString * >(
+ alloca(sizeof (rtl_uString) + len * sizeof (sal_Unicode)));
+ for (i = 0; i < len; i++)
+ {
+ /* Check ASCII range */
+ SAL_WARN_IF( !rtl::isAscii(static_cast<unsigned char>(str[i])), "rtl.string",
+ "rtl_ustring_internConvert() - Found char > 127 and RTL_TEXTENCODING_ASCII_US is specified" );
+ pScratch->buffer[i] = str[i];
+ }
+ pScratch->length = len;
+ rtl_ustring_intern_internal( newStr, pScratch, CANNOT_RETURN );
+ return;
+ }
+ if ( (ulen = rtl_canGuessUOutputLength(len, eTextEncoding)) != 0 )
+ {
+ rtl_uString *pScratch;
+ rtl_TextToUnicodeConverter hConverter;
+ sal_Size nSrcBytes;
+ sal_uInt32 nInfo;
+
+ pScratch = static_cast< rtl_uString * >(
+ alloca(
+ sizeof (rtl_uString) + ulen * sizeof (sal_Unicode)));
+
+ hConverter = rtl_createTextToUnicodeConverter( eTextEncoding );
+ rtl_convertTextToUnicode(
+ hConverter, nullptr, str, len, pScratch->buffer, ulen, convertFlags, &nInfo, &nSrcBytes );
+ rtl_destroyTextToUnicodeConverter( hConverter );
+
+ if (pInfo)
+ *pInfo = nInfo;
+
+ pScratch->length = ulen;
+ rtl_ustring_intern_internal( newStr, pScratch, CANNOT_RETURN );
+ return;
+ }
+
+ /* FIXME: we want a nice UTF-8 / alloca shortcut here */
+ }
+
+ scratch = nullptr;
+ rtl_string2UString_status( &scratch, str, len, eTextEncoding, convertFlags,
+ pInfo );
+ if (!scratch) {
+ return;
+ }
+ rtl_ustring_intern_internal( newStr, scratch, CAN_RETURN );
+}
+
+void internRelease (rtl_uString *pThis)
+{
+ rtl_uString *pFree = nullptr;
+ if ( SAL_STRING_REFCOUNT(
+ osl_atomic_decrement( &(pThis->refCount) ) ) == 0)
+ {
+ RTL_LOG_STRING_INTERN_DELETE(pThis);
+ oslMutex pPoolMutex = getInternMutex();
+ osl_acquireMutex( pPoolMutex );
+
+ rtl_str_hash_remove (pThis);
+
+ /* May have been separately acquired */
+ if ( SAL_STRING_REFCOUNT(
+ osl_atomic_increment( &(pThis->refCount) ) ) == 1 )
+ {
+ /* we got the last ref */
+ pFree = pThis;
+ }
+ else /* very unusual */
+ {
+ internRelease (pThis);
+ }
+
+ osl_releaseMutex( pPoolMutex );
+ }
+ if (pFree)
+ rtl_freeString (pFree);
+}
+
+sal_uInt32 SAL_CALL rtl_uString_iterateCodePoints(
+ rtl_uString const * string, sal_Int32 * indexUtf16,
+ sal_Int32 incrementCodePoints)
+{
+ sal_Int32 n;
+ sal_Unicode cu;
+ sal_uInt32 cp;
+ assert(string != nullptr && indexUtf16 != nullptr);
+ n = *indexUtf16;
+ assert(n >= 0 && n <= string->length);
+ while (incrementCodePoints < 0) {
+ assert(n > 0);
+ cu = string->buffer[--n];
+ if (rtl::isLowSurrogate(cu) && n != 0 &&
+ rtl::isHighSurrogate(string->buffer[n - 1]))
+ {
+ --n;
+ }
+ ++incrementCodePoints;
+ }
+ assert(n >= 0 && n < string->length);
+ cu = string->buffer[n];
+ if (rtl::isHighSurrogate(cu) && string->length - n >= 2 &&
+ rtl::isLowSurrogate(string->buffer[n + 1]))
+ {
+ cp = rtl::combineSurrogates(cu, string->buffer[n + 1]);
+ } else {
+ cp = cu;
+ }
+ while (incrementCodePoints > 0) {
+ assert(n < string->length);
+ cu = string->buffer[n++];
+ if (rtl::isHighSurrogate(cu) && n != string->length &&
+ rtl::isLowSurrogate(string->buffer[n]))
+ {
+ ++n;
+ }
+ --incrementCodePoints;
+ }
+ assert(n >= 0 && n <= string->length);
+ *indexUtf16 = n;
+ return cp;
+}
+
+sal_Bool rtl_convertStringToUString(
+ rtl_uString ** target, char const * source, sal_Int32 length,
+ rtl_TextEncoding encoding, sal_uInt32 flags) SAL_THROW_EXTERN_C()
+{
+ assert(target);
+ assert(length >= 0);
+ sal_uInt32 info;
+ rtl_string2UString_status(target, source, length, encoding, flags, &info);
+ return (info & RTL_TEXTTOUNICODE_INFO_ERROR) == 0;
+}
+
+void rtl_uString_newReplaceFirst(
+ rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
+ rtl_uString const * to, sal_Int32 * index) SAL_THROW_EXTERN_C()
+{
+ assert(from != nullptr);
+ assert(to != nullptr);
+ rtl_uString_newReplaceFirstUtf16LUtf16L(newStr, str, from->buffer, from->length, to->buffer,
+ to->length, index);
+}
+
+void rtl_uString_newReplaceFirstAsciiL(
+ rtl_uString ** newStr, rtl_uString * str, char const * from,
+ sal_Int32 fromLength, rtl_uString const * to, sal_Int32 * index)
+ SAL_THROW_EXTERN_C()
+{
+ assert(to != nullptr);
+ rtl_uString_newReplaceFirstAsciiLUtf16L(newStr, str, from, fromLength, to->buffer, to->length,
+ index);
+}
+
+void rtl_uString_newReplaceFirstToAsciiL(
+ rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
+ char const * to, sal_Int32 toLength, sal_Int32 * index)
+ SAL_THROW_EXTERN_C()
+{
+ assert(from != nullptr);
+ rtl_uString_newReplaceFirstUtf16LAsciiL(newStr, str, from->buffer, from->length, to, toLength,
+ index);
+}
+
+void rtl_uString_newReplaceFirstAsciiLAsciiL(
+ rtl_uString ** newStr, rtl_uString * str, char const * from,
+ sal_Int32 fromLength, char const * to, sal_Int32 toLength,
+ sal_Int32 * index) SAL_THROW_EXTERN_C()
+{
+ assert(index != nullptr);
+ rtl::str::newReplaceFirst(newStr, str, from, fromLength, to, toLength, *index);
+}
+
+void rtl_uString_newReplaceFirstAsciiLUtf16L(
+ rtl_uString ** newStr, rtl_uString * str, char const * from,
+ sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength,
+ sal_Int32 * index) SAL_THROW_EXTERN_C()
+{
+ assert(index != nullptr);
+ rtl::str::newReplaceFirst(newStr, str, from, fromLength, to, toLength, *index);
+}
+
+void rtl_uString_newReplaceFirstUtf16LAsciiL(
+ rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
+ sal_Int32 fromLength, char const * to, sal_Int32 toLength,
+ sal_Int32 * index) SAL_THROW_EXTERN_C()
+{
+ assert(index != nullptr);
+ rtl::str::newReplaceFirst(newStr, str, from, fromLength, to, toLength, *index);
+}
+
+void rtl_uString_newReplaceFirstUtf16LUtf16L(
+ rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
+ sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength,
+ sal_Int32 * index) SAL_THROW_EXTERN_C()
+{
+ assert(index != nullptr);
+ rtl::str::newReplaceFirst(newStr, str, from, fromLength, to, toLength, *index);
+}
+
+void rtl_uString_newReplaceAll(
+ rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
+ rtl_uString const * to) SAL_THROW_EXTERN_C()
+{
+ rtl_uString_newReplaceAllFromIndex( newStr, str, from, to, 0 );
+}
+
+void rtl_uString_newReplaceAllFromIndex(
+ rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
+ rtl_uString const * to, sal_Int32 fromIndex) SAL_THROW_EXTERN_C()
+{
+ assert(to != nullptr);
+ assert(fromIndex >= 0 && fromIndex <= str->length);
+ rtl_uString_newReplaceAllFromIndexUtf16LUtf16L(newStr, str, from->buffer, from->length,
+ to->buffer, to->length, fromIndex);
+}
+
+void rtl_uString_newReplaceAllAsciiL(
+ rtl_uString ** newStr, rtl_uString * str, char const * from,
+ sal_Int32 fromLength, rtl_uString const * to) SAL_THROW_EXTERN_C()
+{
+ assert(to != nullptr);
+ rtl_uString_newReplaceAllAsciiLUtf16L(newStr, str, from, fromLength, to->buffer, to->length);
+}
+
+void rtl_uString_newReplaceAllToAsciiL(
+ rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
+ char const * to, sal_Int32 toLength) SAL_THROW_EXTERN_C()
+{
+ assert(from != nullptr);
+ rtl_uString_newReplaceAllUtf16LAsciiL(newStr, str, from->buffer, from->length, to, toLength);
+}
+
+void rtl_uString_newReplaceAllAsciiLAsciiL(
+ rtl_uString ** newStr, rtl_uString * str, char const * from,
+ sal_Int32 fromLength, char const * to, sal_Int32 toLength)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, 0);
+}
+
+void rtl_uString_newReplaceAllAsciiLUtf16L(
+ rtl_uString ** newStr, rtl_uString * str, char const * from,
+ sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, 0);
+}
+
+void rtl_uString_newReplaceAllUtf16LAsciiL(
+ rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
+ sal_Int32 fromLength, char const * to, sal_Int32 toLength)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, 0);
+}
+
+void rtl_uString_newReplaceAllUtf16LUtf16L(
+ rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
+ sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength)
+ SAL_THROW_EXTERN_C()
+{
+ rtl_uString_newReplaceAllFromIndexUtf16LUtf16L(newStr, str, from, fromLength, to, toLength, 0);
+}
+
+void rtl_uString_newReplaceAllFromIndexUtf16LUtf16L(
+ rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
+ sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength, sal_Int32 fromIndex)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, fromIndex);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_getLength(const sal_Unicode* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::getLength(pStr);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_compare(const sal_Unicode* pStr1, const sal_Unicode* pStr2)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2),
+ rtl::str::CompareNormal(), rtl::str::noShortening);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_compare_WithLength(const sal_Unicode* pStr1, sal_Int32 nStr1Len,
+ const sal_Unicode* pStr2, sal_Int32 nStr2Len)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::with_length(pStr2, nStr2Len), rtl::str::CompareNormal(),
+ rtl::str::noShortening);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_shortenedCompare_WithLength(
+ const sal_Unicode* pStr1, sal_Int32 nStr1Len, const sal_Unicode* pStr2, sal_Int32 nStr2Len,
+ sal_Int32 nShortenedLength) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::with_length(pStr2, nStr2Len), rtl::str::CompareNormal(),
+ nShortenedLength);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_reverseCompare_WithLength(const sal_Unicode* pStr1, sal_Int32 nStr1Len,
+ const sal_Unicode* pStr2, sal_Int32 nStr2Len)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::reverseCompare_WithLengths(pStr1, nStr1Len, pStr2, nStr2Len,
+ rtl::str::CompareNormal());
+}
+
+sal_Int32 SAL_CALL rtl_ustr_compareIgnoreAsciiCase(const sal_Unicode* pStr1,
+ const sal_Unicode* pStr2) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2),
+ rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_compareIgnoreAsciiCase_WithLength(const sal_Unicode* pStr1,
+ sal_Int32 nStr1Len,
+ const sal_Unicode* pStr2,
+ sal_Int32 nStr2Len)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::with_length(pStr2, nStr2Len),
+ rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength(
+ const sal_Unicode* pStr1, sal_Int32 nStr1Len, const sal_Unicode* pStr2, sal_Int32 nStr2Len,
+ sal_Int32 nShortenedLength) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len),
+ rtl::str::with_length(pStr2, nStr2Len),
+ rtl::str::CompareIgnoreAsciiCase(), nShortenedLength);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_hashCode(const sal_Unicode* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::hashCode(pStr);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_hashCode_WithLength(const sal_Unicode* pStr, sal_Int32 nLen)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::hashCode_WithLength(pStr, nLen);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_indexOfChar(const sal_Unicode* pStr, sal_Unicode c) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfChar(pStr, c);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_indexOfChar_WithLength(const sal_Unicode* pStr, sal_Int32 nLen,
+ sal_Unicode c) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfChar_WithLength(pStr, nLen, c);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_lastIndexOfChar(const sal_Unicode* pStr, sal_Unicode c)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::lastIndexOfChar(pStr, c);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_lastIndexOfChar_WithLength(const sal_Unicode* pStr, sal_Int32 nLen,
+ sal_Unicode c) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::lastIndexOfChar_WithLength(pStr, nLen, c);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_indexOfStr(const sal_Unicode* pStr, const sal_Unicode* pSubStr)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfStr(pStr, pSubStr);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_indexOfStr_WithLength(const sal_Unicode* pStr, sal_Int32 nStrLen,
+ const sal_Unicode* pSubStr, sal_Int32 nSubLen)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::indexOfStr_WithLength(pStr, nStrLen, pSubStr, nSubLen);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_lastIndexOfStr(const sal_Unicode* pStr, const sal_Unicode* pSubStr)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::lastIndexOfStr(pStr, pSubStr);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_lastIndexOfStr_WithLength(const sal_Unicode* pStr, sal_Int32 nStrLen,
+ const sal_Unicode* pSubStr, sal_Int32 nSubLen)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::lastIndexOfStr_WithLength(pStr, nStrLen, pSubStr, nSubLen);
+}
+
+void SAL_CALL rtl_ustr_replaceChar(sal_Unicode* pStr, sal_Unicode cOld, sal_Unicode cNew)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::FromTo(cOld, cNew));
+}
+
+void SAL_CALL rtl_ustr_replaceChar_WithLength(sal_Unicode* pStr, sal_Int32 nLen, sal_Unicode cOld,
+ sal_Unicode cNew) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::FromTo(cOld, cNew));
+}
+
+void SAL_CALL rtl_ustr_toAsciiLowerCase(sal_Unicode* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::toAsciiLower);
+}
+
+void SAL_CALL rtl_ustr_toAsciiLowerCase_WithLength(sal_Unicode* pStr, sal_Int32 nLen)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::toAsciiLower);
+}
+
+void SAL_CALL rtl_ustr_toAsciiUpperCase(sal_Unicode* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::toAsciiUpper);
+}
+
+void SAL_CALL rtl_ustr_toAsciiUpperCase_WithLength(sal_Unicode* pStr, sal_Int32 nLen)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::toAsciiUpper);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_trim(sal_Unicode* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::trim(pStr);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_trim_WithLength(sal_Unicode* pStr, sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::trim_WithLength(pStr, nLen);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_valueOfBoolean(sal_Unicode* pStr, sal_Bool b) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfBoolean(pStr, b);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_valueOfChar(sal_Unicode* pStr, sal_Unicode c) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfChar(pStr, c);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_valueOfInt32(sal_Unicode* pStr, sal_Int32 n, sal_Int16 nRadix)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfInt<RTL_USTR_MAX_VALUEOFINT32>(pStr, n, nRadix);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_valueOfInt64(sal_Unicode* pStr, sal_Int64 n, sal_Int16 nRadix)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfInt<RTL_USTR_MAX_VALUEOFINT64>(pStr, n, nRadix);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_valueOfUInt64(sal_Unicode* pStr, sal_uInt64 n, sal_Int16 nRadix)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::valueOfInt<RTL_USTR_MAX_VALUEOFUINT64>(pStr, n, nRadix);
+}
+
+sal_Bool SAL_CALL rtl_ustr_toBoolean(const sal_Unicode* pStr) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toBoolean(pStr);
+}
+
+sal_Int32 SAL_CALL rtl_ustr_toInt32(const sal_Unicode* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_Int32>(rtl::str::null_terminated(pStr), nRadix);
+}
+
+sal_Int64 SAL_CALL rtl_ustr_toInt64(const sal_Unicode* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_Int64>(rtl::str::null_terminated(pStr), nRadix);
+}
+
+sal_Int64 SAL_CALL rtl_ustr_toInt64_WithLength(const sal_Unicode* pStr, sal_Int16 nRadix,
+ sal_Int32 nStrLength) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_Int64>(rtl::str::with_length(pStr, nStrLength), nRadix);
+}
+
+sal_uInt32 SAL_CALL rtl_ustr_toUInt32(const sal_Unicode* pStr, sal_Int16 nRadix)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_uInt32>(rtl::str::null_terminated(pStr), nRadix);
+}
+
+sal_uInt64 SAL_CALL rtl_ustr_toUInt64(const sal_Unicode* pStr, sal_Int16 nRadix)
+ SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt<sal_uInt64>(rtl::str::null_terminated(pStr), nRadix);
+}
+
+rtl_uString* rtl_uString_ImplAlloc(sal_Int32 nLen)
+{
+ return rtl::str::Alloc<rtl_uString>(nLen);
+}
+
+void SAL_CALL rtl_uString_acquire(rtl_uString* pThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::acquire(pThis);
+}
+
+void SAL_CALL rtl_uString_release(rtl_uString* pThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::release(pThis);
+}
+
+void SAL_CALL rtl_uString_new(rtl_uString** ppThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::new_(ppThis);
+}
+
+rtl_uString* SAL_CALL rtl_uString_alloc(sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ assert(nLen >= 0);
+ return rtl::str::Alloc<rtl_uString>(nLen);
+}
+
+void SAL_CALL rtl_uString_new_WithLength(rtl_uString** ppThis, sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ rtl::str::new_WithLength(ppThis, nLen);
+}
+
+void SAL_CALL rtl_uString_newFromString(rtl_uString** ppThis, const rtl_uString* pStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromString(ppThis, pStr);
+}
+
+void SAL_CALL rtl_uString_newFromStr(rtl_uString** ppThis, const sal_Unicode* pCharStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromStr(ppThis, pCharStr);
+}
+
+void SAL_CALL rtl_uString_newFromStr_WithLength(rtl_uString** ppThis, const sal_Unicode* pCharStr,
+ sal_Int32 nLen) SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromStr_WithLength(ppThis, pCharStr, nLen);
+}
+
+void SAL_CALL rtl_uString_newFromSubString(rtl_uString** ppThis, const rtl_uString* pFrom,
+ sal_Int32 beginIndex, sal_Int32 count)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromSubString(ppThis, pFrom, beginIndex, count);
+}
+
+// Used when creating from string literals.
+void SAL_CALL rtl_uString_newFromLiteral(rtl_uString** ppThis, const char* pCharStr, sal_Int32 nLen,
+ sal_Int32 allocExtra) SAL_THROW_EXTERN_C()
+{
+ rtl::str::newFromStr_WithLength(ppThis, pCharStr, nLen, allocExtra);
+}
+
+void SAL_CALL rtl_uString_assign(rtl_uString** ppThis, rtl_uString* pStr) SAL_THROW_EXTERN_C()
+{
+ rtl::str::assign(ppThis, pStr);
+}
+
+sal_Int32 SAL_CALL rtl_uString_getLength(const rtl_uString* pThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::getLength(pThis);
+}
+
+sal_Unicode* SAL_CALL rtl_uString_getStr(rtl_uString* pThis) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::getStr(pThis);
+}
+
+void SAL_CALL rtl_uString_newConcat(rtl_uString** ppThis, rtl_uString* pLeft, rtl_uString* pRight)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newConcat(ppThis, pLeft, pRight);
+}
+
+void SAL_CALL rtl_uString_ensureCapacity(rtl_uString** ppThis, sal_Int32 size) SAL_THROW_EXTERN_C()
+{
+ rtl::str::ensureCapacity(ppThis, size);
+}
+
+void SAL_CALL rtl_uString_newReplaceStrAt(rtl_uString** ppThis, rtl_uString* pStr, sal_Int32 nIndex,
+ sal_Int32 nCount, rtl_uString* pNewSubStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceStrAt(ppThis, pStr, nIndex, nCount, pNewSubStr);
+}
+
+void SAL_CALL rtl_uString_newReplaceStrAtUtf16L(rtl_uString** ppThis, rtl_uString* pStr, sal_Int32 nIndex,
+ sal_Int32 nCount, sal_Unicode const * subStr, sal_Int32 substrLen)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceStrAt(ppThis, pStr, nIndex, nCount, subStr, substrLen);
+}
+
+void SAL_CALL rtl_uString_newReplace(rtl_uString** ppThis, rtl_uString* pStr, sal_Unicode cOld,
+ sal_Unicode cNew) SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplace(ppThis, pStr, cOld, cNew);
+}
+
+void SAL_CALL rtl_uString_newToAsciiLowerCase(rtl_uString** ppThis, rtl_uString* pStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceChars<rtl::str::ToAsciiLower>(ppThis, pStr);
+}
+
+void SAL_CALL rtl_uString_newToAsciiUpperCase(rtl_uString** ppThis, rtl_uString* pStr)
+ SAL_THROW_EXTERN_C()
+{
+ rtl::str::newReplaceChars<rtl::str::ToAsciiUpper>(ppThis, pStr);
+}
+
+void SAL_CALL rtl_uString_newTrim(rtl_uString** ppThis, rtl_uString* pStr) SAL_THROW_EXTERN_C()
+{
+ rtl::str::newTrim(ppThis, pStr);
+}
+
+sal_Int32 SAL_CALL rtl_uString_getToken(rtl_uString** ppThis, rtl_uString* pStr, sal_Int32 nToken,
+ sal_Unicode cTok, sal_Int32 nIndex) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::getToken(ppThis, pStr, nToken, cTok, nIndex);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/rtl/uuid.cxx b/sal/rtl/uuid.cxx
new file mode 100644
index 000000000..130be1245
--- /dev/null
+++ b/sal/rtl/uuid.cxx
@@ -0,0 +1,173 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <osl/mutex.hxx>
+#include <rtl/random.h>
+#include <rtl/uuid.h>
+#include <rtl/digest.h>
+
+#define SWAP_INT32_TO_NETWORK(x)\
+ { sal_uInt32 y = x;\
+ sal_uInt8 *p = reinterpret_cast<sal_uInt8 *>(&(x)); \
+ p[0] = static_cast<sal_uInt8>( ( y >> 24 ) & 0xff );\
+ p[1] = static_cast<sal_uInt8>( ( y >> 16 ) & 0xff );\
+ p[2] = static_cast<sal_uInt8>( ( y >> 8 ) & 0xff );\
+ p[3] = static_cast<sal_uInt8>( ( y ) & 0xff);\
+ }
+#define SWAP_INT16_TO_NETWORK(x)\
+ { sal_uInt16 y = x;\
+ sal_uInt8 *p = reinterpret_cast<sal_uInt8 *>(&(x)); \
+ p[0] = static_cast<sal_uInt8>( ( y >> 8 ) & 0xff );\
+ p[1] = static_cast<sal_uInt8>( ( y ) & 0xff);\
+ }
+
+#define SWAP_NETWORK_TO_INT16(x)\
+ { sal_uInt16 y = x;\
+ sal_uInt8 *p = reinterpret_cast<sal_uInt8 *>(&(y));\
+ x = ( ( (static_cast<sal_uInt16>(p[0])) & 0xff) << 8 ) |\
+ ( ( static_cast<sal_uInt16>(p[1])) & 0xff);\
+ }
+#define SWAP_NETWORK_TO_INT32(x)\
+ { sal_uInt32 y = x;\
+ sal_uInt8 *p = reinterpret_cast<sal_uInt8 *>(&(y)); \
+ x = ( ( (static_cast<sal_uInt32>(p[0])) & 0xff) << 24 ) |\
+ ( ( (static_cast<sal_uInt32>(p[1])) & 0xff) << 16 ) |\
+ ( ( (static_cast<sal_uInt32>(p[2])) & 0xff) << 8 ) |\
+ ( ( static_cast<sal_uInt32>(p[3])) & 0xff);\
+ }
+
+namespace {
+
+struct UUID
+{
+ sal_uInt32 time_low;
+ sal_uInt16 time_mid;
+ sal_uInt16 time_hi_and_version;
+ sal_uInt8 clock_seq_hi_and_reserved;
+ sal_uInt8 clock_seq_low;
+ sal_uInt8 node[6];
+};
+
+}
+
+static void write_v3( sal_uInt8 *pUuid )
+{
+ UUID uuid;
+ // copy to avoid alignment problems
+ memcpy(&uuid, pUuid, 16);
+
+ SWAP_NETWORK_TO_INT32(uuid.time_low);
+ SWAP_NETWORK_TO_INT16(uuid.time_mid);
+ SWAP_NETWORK_TO_INT16(uuid.time_hi_and_version);
+
+ /* put in the variant and version bits */
+ uuid.time_hi_and_version &= 0x0FFF;
+ uuid.time_hi_and_version |= (3 << 12);
+ uuid.clock_seq_hi_and_reserved &= 0x3F;
+ uuid.clock_seq_hi_and_reserved |= 0x80;
+
+ SWAP_INT32_TO_NETWORK(uuid.time_low);
+ SWAP_INT16_TO_NETWORK(uuid.time_mid);
+ SWAP_INT16_TO_NETWORK(uuid.time_hi_and_version);
+
+ memcpy(pUuid, &uuid, 16);
+}
+
+extern "C" void SAL_CALL rtl_createUuid(sal_uInt8 *pTargetUUID ,
+ SAL_UNUSED_PARAMETER const sal_uInt8 *,
+ SAL_UNUSED_PARAMETER sal_Bool)
+{
+ {
+ static rtlRandomPool pool = []() {
+ rtlRandomPool aPool = rtl_random_createPool();
+ if (!aPool)
+ {
+ abort();
+ // only possible way to signal failure here (rtl_createUuid
+ // being part of a fixed C API)
+ }
+ return aPool;
+ }();
+
+ osl::MutexGuard g(osl::Mutex::getGlobalMutex());
+ if (rtl_random_getBytes(pool, pTargetUUID, 16) != rtl_Random_E_None)
+ {
+ abort();
+ // only possible way to signal failure here (rtl_createUuid
+ // being part of a fixed C API)
+ }
+ }
+ // See ITU-T Recommendation X.667:
+ pTargetUUID[6] &= 0x0F;
+ pTargetUUID[6] |= 0x40;
+ pTargetUUID[8] &= 0x3F;
+ pTargetUUID[8] |= 0x80;
+}
+
+extern "C" void SAL_CALL rtl_createNamedUuid(sal_uInt8 *pTargetUUID,
+ const sal_uInt8 *pNameSpaceUUID,
+ const rtl_String *pName )
+{
+ rtlDigest digest = rtl_digest_createMD5();
+
+ rtl_digest_updateMD5(digest, pNameSpaceUUID, 16);
+ rtl_digest_updateMD5(digest, pName->buffer, pName->length);
+
+ rtl_digest_getMD5(digest, pTargetUUID, 16);
+ rtl_digest_destroyMD5(digest);
+
+ write_v3(pTargetUUID);
+}
+
+extern "C" sal_Int32 SAL_CALL rtl_compareUuid(const sal_uInt8 *pUUID1, const sal_uInt8 *pUUID2)
+{
+ int i;
+ UUID u1;
+ UUID u2;
+ memcpy(&u1, pUUID1, 16 );
+ memcpy(&u2, pUUID2, 16 );
+
+ SWAP_NETWORK_TO_INT32(u1.time_low);
+ SWAP_NETWORK_TO_INT16(u1.time_mid);
+ SWAP_NETWORK_TO_INT16(u1.time_hi_and_version);
+
+ SWAP_NETWORK_TO_INT32(u2.time_low);
+ SWAP_NETWORK_TO_INT16(u2.time_mid);
+ SWAP_NETWORK_TO_INT16(u2.time_hi_and_version);
+
+#define CHECK(f1, f2) if (f1 != f2) return f1 < f2 ? -1 : 1;
+ CHECK(u1.time_low, u2.time_low);
+ CHECK(u1.time_mid, u2.time_mid);
+ CHECK(u1.time_hi_and_version, u2.time_hi_and_version);
+ CHECK(u1.clock_seq_hi_and_reserved, u2.clock_seq_hi_and_reserved);
+ CHECK(u1.clock_seq_low, u2.clock_seq_low);
+ for (i = 0; i < 6; i++)
+ {
+ if (u1.node[i] < u2.node[i])
+ return -1;
+ if (u1.node[i] > u2.node[i])
+ return 1;
+ }
+ return 0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/test/bootstrap b/sal/test/bootstrap
new file mode 100644
index 000000000..c12ef1922
--- /dev/null
+++ b/sal/test/bootstrap
@@ -0,0 +1,82 @@
+#/bin/tcsh
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+setenv MYBOOTSTRAPTESTVALUE 0
+echo 1
+./testbootstrap 1 -env:MYBOOTSTRAPTESTVALUE=1
+
+echo 2
+./testbootstrap.bin file
+
+echo 3
+./testbootstrap.Bin file
+
+echo 4
+./testbootstrap.exe file
+
+echo 5
+./testbootstrap.Exe file
+
+echo 6
+./testbootstrap 0 -env:INIFILENAME=
+
+unsetenv MYBOOTSTRAPTESTVALUE
+echo 7
+./testbootstrap default -env:INIFILENAME=
+
+echo 8
+./testbootstrap default -env:MYBOOTSTRAPTESTVALUE2=1 -env:INIFILENAME=
+
+echo
+echo "macro tests"
+echo
+
+# simple macro expansion
+echo 9
+./testbootstrap _first_second_third_ -env:FIRST=first -env:SECOND=second -env:THIRD=third -env:MYBOOTSTRAPTESTVALUE='_${FIRST}_${SECOND}_${THIRD}_'
+
+# simple quoting
+echo 10
+./testbootstrap '_${FIRST}_${SECOND}_${THIRD}_' -env:FIRST=first -env:SECOND=second -env:THIRD=third -env:MYBOOTSTRAPTESTVALUE='_\$\{FIRST\}_\$\{SECOND\}_\$\{THIRD\}_'
+
+# simple ini access
+echo 11
+./testbootstrap TheKeysValue -env:'MYBOOTSTRAPTESTVALUE=${./bootstraptest.ini:TheSection:TheKey}'
+
+# ini access with simple macro expansion
+echo 12
+./testbootstrap TheKeysValue -env:ININAME=./bootstraptest.ini -env:SECTIONNAME=TheSection -env:KEYNAME=TheKey \
+ -env:'MYBOOTSTRAPTESTVALUE=${$ININAME:$SECTIONNAME:$KEYNAME}'
+
+# ini access with complex macro expansion
+echo 13
+./testbootstrap TheKeysValue -env:ININAME=./bootstraptest.ini \
+ -env:'MYBOOTSTRAPTESTVALUE=${$ININAME:${$ININAME:SecondSection:IndirectSection}:${$ININAME:SecondSection:IndirectKey}}'
+
+# test no infinite recursion
+echo 14
+./testbootstrap "***RECURSION DETECTED***" -env:'MYBOOTSTRAPTESTVALUE=$MYBOOTSTRAPTESTVALUE'
+
+# test unicode
+echo 15
+./testbootstrap AAABBBCCC000 -env:'MYBOOTSTRAPTESTVALUE=\u0041\u0041\u0041\u0042\u0042\u0042\u0043\u0043\u0043\u0030\u0030\u0030'
+
+echo
+echo "bootstrap test finished"
+echo
diff --git a/sal/test/bootstrap.bat b/sal/test/bootstrap.bat
new file mode 100755
index 000000000..f94696ba9
--- /dev/null
+++ b/sal/test/bootstrap.bat
@@ -0,0 +1,79 @@
+rem
+rem This file is part of the LibreOffice project.
+rem
+rem This Source Code Form is subject to the terms of the Mozilla Public
+rem License, v. 2.0. If a copy of the MPL was not distributed with this
+rem file, You can obtain one at http://mozilla.org/MPL/2.0/.
+rem
+rem This file incorporates work covered by the following license notice:
+rem
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed
+rem with this work for additional information regarding copyright
+rem ownership. The ASF licenses this file to you under the Apache
+rem License, Version 2.0 (the "License"); you may not use this file
+rem except in compliance with the License. You may obtain a copy of
+rem the License at http://www.apache.org/licenses/LICENSE-2.0 .
+rem
+@echo off
+set MYBOOTSTRAPTESTVALUE=0
+echo 1
+.\testbootstrap 1 -env:MYBOOTSTRAPTESTVALUE=1
+
+echo 2
+.\testbootstrap.exe file
+
+echo 3
+.\testbootstrap.Exe file
+
+echo 4
+.\testbootstrap.bin file
+
+echo 5
+.\testbootstrap.Bin file
+
+echo 6
+.\testbootstrap 0 -env:INIFILENAME=
+
+echo 7
+set MYBOOTSTRAPTESTVALUE=
+rem simply ignore the file...
+.\testbootstrap default -env:INIFILENAME=
+
+echo 8
+.\testbootstrap default -env:MYBOOTSTRAPTESTVALUE2=1 -env:INIFILENAME=
+
+echo
+echo "macro tests"
+echo
+
+rem simple macro expansion
+echo 9
+.\testbootstrap _first_second_third_ -env:FIRST=first -env:SECOND=second -env:THIRD=third -env:MYBOOTSTRAPTESTVALUE=_${FIRST}_${SECOND}_${THIRD}_
+
+rem simple quoting
+echo 10
+.\testbootstrap _${FIRST}_${SECOND}_${THIRD}_ -env:FIRST=first -env:SECOND=second -env:THIRD=third -env:MYBOOTSTRAPTESTVALUE=_\$\{FIRST\}_\$\{SECOND\}_\$\{THIRD\}_
+
+rem simple ini access
+echo 11
+.\testbootstrap TheKeysValue -env:MYBOOTSTRAPTESTVALUE=${./bootstraptest.ini:TheSection:TheKey}
+
+rem ini access with simple macro expansion
+echo 12
+.\testbootstrap TheKeysValue -env:ININAME=./bootstraptest.ini -env:SECTIONNAME=TheSection -env:KEYNAME=TheKey -env:MYBOOTSTRAPTESTVALUE=${$ININAME:$SECTIONNAME:$KEYNAME}
+
+rem ini access with complex macro expansion
+echo 13
+.\testbootstrap TheKeysValue -env:ININAME=./bootstraptest.ini -env:MYBOOTSTRAPTESTVALUE=${$ININAME:${$ININAME:SecondSection:IndirectSection}:${$ININAME:SecondSection:IndirectKey}}
+
+rem test no infinite recursion
+echo 14
+.\testbootstrap "***RECURSION DETECTED***" -env:MYBOOTSTRAPTESTVALUE=$MYBOOTSTRAPTESTVALUE
+
+rem test unicode
+echo 15
+.\testbootstrap AAABBBCCC000 -env:MYBOOTSTRAPTESTVALUE=\u0041\u0041\u0041\u0042\u0042\u0042\u0043\u0043\u0043\u0030\u0030\u0030
+
+
+@echo bootstrap test finished
diff --git a/sal/test/bootstrap.pl b/sal/test/bootstrap.pl
new file mode 100644
index 000000000..5dde94f80
--- /dev/null
+++ b/sal/test/bootstrap.pl
@@ -0,0 +1,251 @@
+:
+eval 'exec perl -wS $0 ${1+"$@"}'
+ if 0;
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+
+my $rc;
+my $state = 1;
+my $comment = "";
+
+$ENV{MYBOOTSTRAPTESTVALUE}=0;
+
+$rc = system "./testbootstrap", 1, "-env:MYBOOTSTRAPTESTVALUE=1";
+if (!$rc) {
+ $comment = $comment . "commandline over environment test not passed\n";
+ $state = 0;
+}
+
+$rc = system "./testbootstrap", "0", "-env:INIFILENAME=";
+if (!$rc) {
+ $comment = $comment . "exe custom ini test not passed\n";
+ $state = 0;
+}
+
+delete $ENV{MYBOOTSTRAPTESTVALUE};
+
+$rc = system "./testbootstrap.bin", "file";
+if (!$rc) {
+ $comment = $comment . "extensions cut test not passed with .bin\n";
+ $state = 0;
+}
+
+$rc = system "./testbootstrap.Bin", "file";
+if (!$rc) {
+ $comment = $comment . "extensions cut test not passed with .Bin\n";
+ $state = 0;
+}
+
+$rc = system "./testbootstrap.exe", "file";
+if (!$rc) {
+ $comment = $comment . "extensions cut test not passed with .exe\n";
+ $state = 0;
+}
+
+$rc = system "./testbootstrap.Exe", "file";
+if (!$rc) {
+ $comment = $comment . "extensions cut test not passed with .Exe\n";
+ $state = 0;
+}
+
+if ($ENV{OS} eq "WNT") {
+ $rc = system "./testbootstrap", "auxaux", "-env:iniName=ini.ini", '-env:MYBOOTSTRAPTESTVALUE=$CUSTOMINIVALUE';
+}
+else {
+ $rc = system "./testbootstrap", "auxaux", "-env:iniName=inirc", '-env:MYBOOTSTRAPTESTVALUE=$CUSTOMINIVALUE';
+}
+if (!$rc) {
+ $comment = $comment . "custom ini test not passed\n";
+ $state = 0;
+}
+
+if ($ENV{OS} eq "WNT") {
+ $comment = $comment . '$SYSUSERHOME not testable under windows' . "\n";
+}
+else {
+ $rc = system "./testbootstrap", "file://$ENV{HOME}", '-env:MYBOOTSTRAPTESTVALUE=$SYSUSERHOME';
+ if (!$rc) {
+ $comment = $comment . '$SYSUSERHOME test not passed' . "\n";
+ $state = 0;
+ }
+}
+
+if ($ENV{OS} eq "WNT") {
+ $comment = $comment . '$SYSUSERCONFIG' . " not testable under windows\n";
+}
+else {
+ $rc = system "./testbootstrap", "file://$ENV{HOME}", '-env:MYBOOTSTRAPTESTVALUE=$SYSUSERCONFIG';
+ if (!$rc) {
+ $comment = $comment . '$SYSUSERCONFIG test not passed' . "\n";
+ $state = 0;
+ }
+}
+
+if ($ENV{OS} eq "WNT") {
+ $comment = $comment . '$SYSBINDIR' . " not testable under windows\n";
+}
+else {
+ $rc = system "./testbootstrap", "file://$ENV{PWD}", '-env:MYBOOTSTRAPTESTVALUE=$SYSBINDIR';
+ if (!$rc) {
+ $comment = $comment . '$SYSBINDIR test not passed' . "\n";
+ $state = 0;
+ }
+}
+
+if ($ENV{OS} eq "WNT") {
+ $rc = system "./testbootstrap", "inherited_value", '-env:MYBOOTSTRAPTESTVALUE=$INHERITED_VALUE', "-env:iniName=ini.ini";
+}
+else {
+ $rc = system "./testbootstrap", "inherited_value", '-env:MYBOOTSTRAPTESTVALUE=$INHERITED_VALUE', "-env:iniName=inirc";
+}
+if (!$rc) {
+ $comment = $comment . "inherited value not passed\n";
+ $state = 0;
+}
+
+if ($ENV{OS} eq "WNT") {
+ $rc = system "./testbootstrap", "not_overwritten", '-env:MYBOOTSTRAPTESTVALUE=$INHERITED_OVERWRITTEN_VALUE', "-env:iniName=ini.ini";
+}
+else {
+ $rc = system "./testbootstrap", "not_overwritten", '-env:MYBOOTSTRAPTESTVALUE=$INHERITED_OVERWRITTEN_VALUE', "-env:iniName=inirc";
+}
+if (!$rc) {
+ $comment = $comment . "inherited overwritten value not passed\n";
+ $state = 0;
+}
+
+
+$rc = system "./testbootstrap", "defaultvalue", "-env:INIFILENAME=", "-env:Default=defaultvalue", "-env:USEDEFAULT=1";
+if (!$rc) {
+ $comment = $comment . "default test from parameter not passed\n";
+ $state = 0;
+}
+
+if ($ENV{OS} eq "WNT") {
+ $rc = system "./testbootstrap", "defaultValue", "-env:iniName=default.ini", "-env:INIFILENAME=", "-env:USEDEFAULT=1";
+}
+else {
+ $rc = system "./testbootstrap", "defaultValue", "-env:iniName=defaultrc", "-env:INIFILENAME=", "-env:USEDEFAULT=1";
+}
+if (!$rc) {
+ $comment = $comment . "default test from custom ini not passed\n";
+ $state = 0;
+}
+
+# simple macro expansion
+$rc = system "./testbootstrap",
+ "_first_second_third_",
+ "-env:FIRST=first",
+ "-env:SECOND=second",
+ "-env:THIRD=third",
+ '-env:MYBOOTSTRAPTESTVALUE=_${FIRST}_${SECOND}_${THIRD}_';
+if (!$rc) {
+ $comment = $comment . "simple macro expansion test not passed\n";
+ $state = 0;
+}
+
+# simple quoting
+$rc = system "./testbootstrap",
+ '_${FIRST}_${SECOND}_${THIRD}_',
+ "-env:FIRST=first",
+ "-env:SECOND=second",
+ "-env:THIRD=third",
+ '-env:MYBOOTSTRAPTESTVALUE=_\$\{FIRST\}_\$\{SECOND\}_\$\{THIRD\}_';
+if (!$rc) {
+ $comment = $comment . "simple macro quoting test not passed\n";
+ $state = 0;
+}
+
+# simple ini access
+$rc = system "./testbootstrap",
+ "TheIniKeysValue",
+ '-env:MYBOOTSTRAPTESTVALUE=${./bootstraptest.ini:TheIniKey}';
+if (!$rc) {
+ $comment = $comment . "simple macro ini access test not passed\n";
+ $state = 0;
+}
+
+# simple profile access
+$rc = system "./testbootstrap",
+ "TheKeysValue",
+ '-env:MYBOOTSTRAPTESTVALUE=${./bootstraptest.ini:TheSection:TheKey}';
+if (!$rc) {
+ $comment = $comment . "simple macro profile access test not passed\n";
+ $state = 0;
+}
+
+# profile access with simple macro expansion
+$rc = system "./testbootstrap",
+ "TheKeysValue",
+ "-env:ININAME=./bootstraptest.ini",
+ "-env:SECTIONNAME=TheSection",
+ "-env:KEYNAME=TheKey",
+ '-env:MYBOOTSTRAPTESTVALUE=${$ININAME:$SECTIONNAME:$KEYNAME}';
+if (!$rc) {
+ $comment = $comment . "profile access with simple macro expansion test not passed\n";
+ $state = 0;
+}
+
+# profile access with complex macro expansion
+$rc = system "./testbootstrap",
+ "TheKeysValue",
+ "-env:ININAME=./bootstraptest.ini",
+ '-env:MYBOOTSTRAPTESTVALUE=${$ININAME:${$ININAME:SecondSection:IndirectSection}:${$ININAME:SecondSection:IndirectKey}}';
+if (!$rc) {
+ $comment = $comment . "profile access with complex macro expansion test not passed\n";
+ $state = 0;
+}
+
+# test no infinite recursion
+if ($ENV{OS} eq "WNT") {
+ $rc = system "./testbootstrap",
+ '"***RECURSION DETECTED***"',
+ '-env:MYBOOTSTRAPTESTVALUE=$MYBOOTSTRAPTESTVALUE';
+}
+else {
+ $rc = system "./testbootstrap",
+ '***RECURSION DETECTED***',
+ '-env:MYBOOTSTRAPTESTVALUE=$MYBOOTSTRAPTESTVALUE';
+}
+if (!$rc) {
+ $comment = $comment . "no infinite recursion test not passed\n";
+ $state = 0;
+}
+
+# test unicode
+$rc = system "./testbootstrap",
+ "AAABBBCCC000",
+ '-env:MYBOOTSTRAPTESTVALUE=\u0041\u0041\u0041\u0042\u0042\u0042\u0043\u0043\u0043\u0030\u0030\u0030';
+if (!$rc) {
+ $comment = $comment . "unicode not passed\n";
+ $state = 0;
+}
+
+print "**************************\n";
+if($state) {
+ print "****** tests passed ******\n";
+}
+else {
+ print "**** tests NOT passed ****\n";
+ print "Comment:\n", $comment, "\n";
+}
+print "**************************\n";
+
+
+
diff --git a/sal/test/bootstraptest.ini b/sal/test/bootstraptest.ini
new file mode 100644
index 000000000..6be9615e2
--- /dev/null
+++ b/sal/test/bootstraptest.ini
@@ -0,0 +1,28 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+TheIniKey=TheIniKeysValue
+
+[TheSection]
+TheKey=TheKeysValue
+
+[SecondSection]
+IndirectSection=TheSection
+IndirectKey=TheKey
+
+
diff --git a/sal/test/makefile.mk b/sal/test/makefile.mk
new file mode 100644
index 000000000..25aa5dd5f
--- /dev/null
+++ b/sal/test/makefile.mk
@@ -0,0 +1,145 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+PRJ=..
+
+PRJNAME=sal
+TARGET=saltest
+TARGETTYPE=CUI
+LIBTARGET=NO
+USE_LDUMP2=TRUE
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+CFLAGS+= $(LFS_CFLAGS)
+CXXFLAGS+= $(LFS_CFLAGS)
+
+# ------------------------------------------------------------------
+
+.IF "$(OS)"=="WNT"
+BOOTSTRAPSCRIPT=bootstrap.bat
+BOOTSTRAPINI=testbootstrap.ini
+MY_SCRIPTCAT=cat
+.ELSE
+BOOTSTRAPSCRIPT=bootstrap
+BOOTSTRAPINI=testbootstraprc
+MY_SCRIPTCAT=tr -d "\015" <
+.ENDIF
+
+APP2OBJS = $(OBJ)$/testbootstrap.obj
+
+OBJFILES= \
+ $(APP2OBJS)
+
+APP2TARGET = testbootstrap
+APP2STDLIBS = $(SALLIB)
+
+APP3OBJS = $(OBJ)$/test_salmain.obj
+APP3TARGET = test_salmain
+APP3STDLIBS = $(SALLIB)
+
+APP4OBJS = $(OBJ)$/test_salmainwithargs.obj
+APP4TARGET = test_salmainwithargs
+APP4STDLIBS = $(SALLIB)
+
+
+# --- Targets ------------------------------------------------------
+
+.IF "$(depend)" == ""
+ALL : ALLTAR \
+ $(BIN)$/$(BOOTSTRAPSCRIPT) \
+ $(BIN)$/$(BOOTSTRAPINI) \
+ $(BIN)$/bootstraptest.ini \
+ $(BIN)$/$(APP2TARGET).bin \
+ $(BIN)$/$(APP2TARGET).Bin \
+ $(BIN)$/$(APP2TARGET).Exe \
+ $(BIN)$/bootstrap.pl
+
+
+.IF "$(OS)"!="WNT"
+ALL: $(BIN)$/$(APP2TARGET).exe \
+ $(BIN)$/inirc \
+ $(BIN)$/defaultrc
+
+$(BIN)$/$(APP2TARGET).exe : $(APP2TARGETN)
+ cp $(APP2TARGETN) $@
+
+$(BIN)$/inirc:
+ echo "CUSTOMINIVALUE=auxaux" > $@
+ echo "INHERITED_OVERWRITTEN_VALUE=inherited_overwritten_value" >> $@
+
+$(BIN)$/defaultrc:
+ echo "Default=defaultValue" > $@
+
+.ELSE
+
+ALL: $(BIN)$/ini.ini \
+ $(BIN)$/default.ini
+
+$(BIN)$/ini.ini:
+ echo CUSTOMINIVALUE=auxaux > $@
+ echo INHERITED_OVERWRITTEN_VALUE=inherited_overwritten_value >> $@
+
+
+$(BIN)$/default.ini:
+ echo Default=defaultValue > $@
+
+.ENDIF
+
+$(BIN)$/bootstrap.pl:
+ cp bootstrap.pl $@
+
+$(BIN)$/$(APP2TARGET).bin : $(APP2TARGETN)
+ cp $(APP2TARGETN) $@
+
+$(BIN)$/$(APP2TARGET).Bin : $(APP2TARGETN)
+ cp $(APP2TARGETN) $@
+
+$(BIN)$/$(APP2TARGET).Exe : $(APP2TARGETN)
+ cp $(APP2TARGETN) $@
+
+.ELSE
+ALL: ALLDEP
+.ENDIF
+
+.INCLUDE : target.mk
+
+
+$(BIN)$/$(BOOTSTRAPSCRIPT) : $(BOOTSTRAPSCRIPT)
+ $(MY_SCRIPTCAT) $(BOOTSTRAPSCRIPT) > $@
+.IF "$(OS)"!="WNT"
+ chmod ug+x $@
+.ENDIF
+
+$(BIN)$/$(BOOTSTRAPINI) : $(APP2TARGET).ini
+ $(MY_SCRIPTCAT) $(APP2TARGET).ini > $@
+
+$(BIN)$/bootstraptest.ini : bootstraptest.ini
+ $(MY_SCRIPTCAT) bootstraptest.ini > $@
+
+
+# --- SO2-Filter-Datei ---
+
+$(MISC)$/tsl$(DLLPOSTFIX).flt:
+ @echo ------------------------------
+ @echo Making: $@
+ @echo WEP>$@
+ @echo LIBMAIN>>$@
+ @echo LibMain>>$@
diff --git a/sal/test/test_salmain.cxx b/sal/test/test_salmain.cxx
new file mode 100644
index 000000000..93984e582
--- /dev/null
+++ b/sal/test/test_salmain.cxx
@@ -0,0 +1,31 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "sal/main.h"
+
+#include <stdio.h>
+
+SAL_IMPLEMENT_MAIN()
+{
+ fprintf(stderr, "success!\n");
+
+ return 0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/test/test_salmainwithargs.cxx b/sal/test/test_salmainwithargs.cxx
new file mode 100644
index 000000000..405cd91c2
--- /dev/null
+++ b/sal/test/test_salmainwithargs.cxx
@@ -0,0 +1,31 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "sal/main.h"
+
+#include <stdio.h>
+
+SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
+{
+ fprintf(stderr, "argc: %i argv: %p - success!\n", argc, argv);
+
+ return 0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/test/testbootstrap.cxx b/sal/test/testbootstrap.cxx
new file mode 100644
index 000000000..9ae34f78c
--- /dev/null
+++ b/sal/test/testbootstrap.cxx
@@ -0,0 +1,116 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdio.h>
+
+#include <rtl/process.h>
+#include <rtl/bootstrap.hxx>
+#include <rtl/string.hxx>
+#include <rtl/byteseq.hxx>
+
+#include <osl/process.h>
+#include <sal/log.hxx>
+
+int main( int argc, char *argv[] )
+{
+ osl_setCommandArgs (argc, argv);
+
+ sal_Int32 nCount = rtl_getAppCommandArgCount();
+
+#if OSL_DEBUG_LEVEL > 0
+ OUStringBuffer debugBuff;
+ debugBuff.append("rtl-commandargs (").append(nCount).append(")real args: ").append(argc);
+ for( sal_Int32 i = 0 ; i < nCount ; i ++ )
+ {
+ OUString data;
+ rtl_getAppCommandArg( i , &(data.pData) );
+ OString o = OUStringToOString( data, RTL_TEXTENCODING_ASCII_US );
+ debugBuff.append(" ").append(o);
+ }
+ SAL_INFO("sal.test", debugBuff.toString());
+#endif
+
+ if( nCount == 0 )
+ {
+ printf( "usage : testbootstrap <checkedValueOfMyBootstrapValue>\n" );
+ exit( 1 );
+ }
+
+ OUString iniName;
+ Bootstrap::get(OUString("iniName"), iniName, OUString());
+
+ SAL_INFO_IF(!iniName.isEmpty(), "sal.test", "using ini: " << iniName);
+
+ Bootstrap bootstrap(iniName);
+
+ OUString name( "MYBOOTSTRAPTESTVALUE" );
+ OUString myDefault("$Default");
+
+ OUString value;
+ sal_Bool useDefault;
+
+ OUString aDummy;
+ useDefault = bootstrap.getFrom(OUString("USEDEFAULT"), aDummy);
+
+ sal_Bool result = sal_False;
+ sal_Bool found = sal_True;
+
+ if(useDefault)
+ bootstrap.getFrom(name, value, myDefault);
+
+ else
+ found = bootstrap.getFrom(name, value);
+
+ if(found)
+ {
+ OUString para(OUString::createFromAscii( argv[1] ));
+
+ result = para == value;
+
+ if(!result)
+ {
+ OString para_tmp = OUStringToOString(para, RTL_TEXTENCODING_ASCII_US);
+ OString value_tmp = OUStringToOString(value, RTL_TEXTENCODING_ASCII_US);
+
+ fprintf(stderr, "para(%s) != value(%s)\n", para_tmp.getStr(), value_tmp.getStr());
+ }
+ }
+ else
+ fprintf(stderr, "bootstrap parameter couldn't be found\n");
+
+ // test the default case
+ name = "no_one_has_set_this_name";
+ OSL_ASSERT( ! bootstrap.getFrom( name, value ) );
+ result = result && !bootstrap.getFrom( name, value );
+
+ myDefault = "1";
+ OUString myDefault2 = "2";
+
+ bootstrap.getFrom( name, value, myDefault );
+ OSL_ASSERT( value == myDefault );
+ result = result && (value == myDefault);
+
+ bootstrap.getFrom( name, value, myDefault2 );
+ OSL_ASSERT( value == myDefault2 );
+ result = result && (value == myDefault2);
+
+ return result;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/test/testbootstrap.ini b/sal/test/testbootstrap.ini
new file mode 100644
index 000000000..2cf7b667c
--- /dev/null
+++ b/sal/test/testbootstrap.ini
@@ -0,0 +1,4 @@
+MYBOOTSTRAPTESTVALUE=file
+INHERITED_VALUE=inherited_value
+INHERITED_OVERWRITTEN_VALUE=not_overwritten
+
diff --git a/sal/textenc/context.cxx b/sal/textenc/context.cxx
new file mode 100644
index 000000000..7d7e75d3b
--- /dev/null
+++ b/sal/textenc/context.cxx
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "context.hxx"
+
+void* ImplCreateUnicodeToTextContext()
+{
+ ImplUnicodeToTextContext* pContext = new ImplUnicodeToTextContext;
+ pContext->m_nHighSurrogate = 0;
+ return pContext;
+}
+
+void ImplResetUnicodeToTextContext(void* pContext)
+{
+ if (pContext)
+ static_cast<ImplUnicodeToTextContext*>(pContext)->m_nHighSurrogate = 0;
+}
+
+void ImplDestroyUnicodeToTextContext(void* pContext)
+{
+ delete static_cast<ImplUnicodeToTextContext*>(pContext);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/context.hxx b/sal/textenc/context.hxx
new file mode 100644
index 000000000..11684cf49
--- /dev/null
+++ b/sal/textenc/context.hxx
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <sal/types.h>
+
+struct ImplUnicodeToTextContext
+{
+ sal_Unicode m_nHighSurrogate;
+};
+
+void* ImplCreateUnicodeToTextContext();
+
+void ImplResetUnicodeToTextContext(void* pContext);
+
+void ImplDestroyUnicodeToTextContext(void* pContext);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertadobe.tab b/sal/textenc/convertadobe.tab
new file mode 100644
index 000000000..5ae3c2d63
--- /dev/null
+++ b/sal/textenc/convertadobe.tab
@@ -0,0 +1,320 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <sal/macros.h>
+
+#include "context.hxx"
+#include "convertsinglebytetobmpunicode.hxx"
+#include "tenchelp.hxx"
+
+namespace {
+
+// RTL_TEXTENCODING_ADOBE_STANDARD is based on
+// <http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/stdenc.txt> revision
+// "v0.2, 30 March 1999".
+
+rtl::textenc::BmpUnicodeToSingleByteRange const unicodeToAdobeStandardEncoding[]
+= { { 0x0020, 0x0026 - 0x0020, 0x20 }, { 0x0027, 0x0027 - 0x0027, 0xA9 },
+ { 0x0028, 0x005F - 0x0028, 0x28 }, { 0x0060, 0x0060 - 0x0060, 0xC1 },
+ { 0x0061, 0x007E - 0x0061, 0x61 }, { 0x00A0, 0x00A0 - 0x00A0, 0x20 },
+ { 0x00A1, 0x00A3 - 0x00A1, 0xA1 }, { 0x00A4, 0x00A4 - 0x00A4, 0xA8 },
+ { 0x00A5, 0x00A5 - 0x00A5, 0xA5 }, { 0x00A7, 0x00A7 - 0x00A7, 0xA7 },
+ { 0x00A8, 0x00A8 - 0x00A8, 0xC8 }, { 0x00AA, 0x00AA - 0x00AA, 0xE3 },
+ { 0x00AB, 0x00AB - 0x00AB, 0xAB }, { 0x00AD, 0x00AD - 0x00AD, 0x2D },
+ { 0x00AF, 0x00AF - 0x00AF, 0xC5 }, { 0x00B4, 0x00B4 - 0x00B4, 0xC2 },
+ { 0x00B6, 0x00B6 - 0x00B6, 0xB6 }, { 0x00B7, 0x00B7 - 0x00B7, 0xB4 },
+ { 0x00B8, 0x00B8 - 0x00B8, 0xCB }, { 0x00BA, 0x00BA - 0x00BA, 0xEB },
+ { 0x00BB, 0x00BB - 0x00BB, 0xBB }, { 0x00BF, 0x00BF - 0x00BF, 0xBF },
+ { 0x00C6, 0x00C6 - 0x00C6, 0xE1 }, { 0x00D8, 0x00D8 - 0x00D8, 0xE9 },
+ { 0x00DF, 0x00DF - 0x00DF, 0xFB }, { 0x00E6, 0x00E6 - 0x00E6, 0xF1 },
+ { 0x00F8, 0x00F8 - 0x00F8, 0xF9 }, { 0x0131, 0x0131 - 0x0131, 0xF5 },
+ { 0x0141, 0x0141 - 0x0141, 0xE8 }, { 0x0142, 0x0142 - 0x0142, 0xF8 },
+ { 0x0152, 0x0152 - 0x0152, 0xEA }, { 0x0153, 0x0153 - 0x0153, 0xFA },
+ { 0x0192, 0x0192 - 0x0192, 0xA6 }, { 0x02C6, 0x02C6 - 0x02C6, 0xC3 },
+ { 0x02C7, 0x02C7 - 0x02C7, 0xCF }, { 0x02C9, 0x02C9 - 0x02C9, 0xC5 },
+ { 0x02D8, 0x02D9 - 0x02D8, 0xC6 }, { 0x02DA, 0x02DA - 0x02DA, 0xCA },
+ { 0x02DB, 0x02DB - 0x02DB, 0xCE }, { 0x02DC, 0x02DC - 0x02DC, 0xC4 },
+ { 0x02DD, 0x02DD - 0x02DD, 0xCD }, { 0x2013, 0x2013 - 0x2013, 0xB1 },
+ { 0x2014, 0x2014 - 0x2014, 0xD0 }, { 0x2018, 0x2018 - 0x2018, 0x60 },
+ { 0x2019, 0x2019 - 0x2019, 0x27 }, { 0x201A, 0x201A - 0x201A, 0xB8 },
+ { 0x201C, 0x201C - 0x201C, 0xAA }, { 0x201D, 0x201D - 0x201D, 0xBA },
+ { 0x201E, 0x201E - 0x201E, 0xB9 }, { 0x2020, 0x2020 - 0x2020, 0xB2 },
+ { 0x2021, 0x2021 - 0x2021, 0xB3 }, { 0x2022, 0x2022 - 0x2022, 0xB7 },
+ { 0x2026, 0x2026 - 0x2026, 0xBC }, { 0x2030, 0x2030 - 0x2030, 0xBD },
+ { 0x2039, 0x2039 - 0x2039, 0xAC }, { 0x203A, 0x203A - 0x203A, 0xAD },
+ { 0x2044, 0x2044 - 0x2044, 0xA4 }, { 0x2215, 0x2215 - 0x2215, 0xA4 },
+ { 0x2219, 0x2219 - 0x2219, 0xB4 }, { 0xFB01, 0xFB02 - 0xFB01, 0xAE } };
+
+rtl::textenc::BmpUnicodeToSingleByteConverterData const
+adobeStandardEncodingConverterData = {
+ { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x00
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x10
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x2019, // 0x20
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // 0x30
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, // 0x40
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, // 0x50
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x2018, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, // 0x60
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, // x070
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x80
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x90
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0x00A1, 0x00A2, 0x00A3, 0x2215, 0x00A5, 0x0192, 0x00A7, // 0xA0
+ 0x00A4, 0x0027, 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02,
+ 0xffff, 0x2013, 0x2020, 0x2021, 0x00B7, 0xffff, 0x00B6, 0x2022, // 0xB0
+ 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0xffff, 0x00BF,
+ 0xffff, 0x0060, 0x00B4, 0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9, // 0xC0
+ 0x00A8, 0xffff, 0x02DA, 0x00B8, 0xffff, 0x02DD, 0x02DB, 0x02C7,
+ 0x2014, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0xD0
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0x00C6, 0xffff, 0x00AA, 0xffff, 0xffff, 0xffff, 0xffff, // 0xE0
+ 0x0141, 0x00D8, 0x0152, 0x00BA, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0x00E6, 0xffff, 0xffff, 0xffff, 0x0131, 0xffff, 0xffff, // 0xF0
+ 0x0142, 0x00F8, 0x0153, 0x00DF, 0xffff, 0xffff, 0xffff, 0xffff },
+ SAL_N_ELEMENTS(unicodeToAdobeStandardEncoding),
+ unicodeToAdobeStandardEncoding };
+
+// RTL_TEXTENCODING_ADOBE_SYMBOL is based on
+// <http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt> revision
+// "v0.2, 30 March 1999," with the modification that some mappings go to code
+// points newly assigned in Unicode 3.2/4.0, instead of to PUA:
+// 0xBD -> U+23AF (was U+F8E6)
+// 0xBE -> U+23D0 (was U+F8E7)
+// 0xE6--E8 -> U+239B--239D (was U+F8EB--F8ED)
+// 0xE9--EB -> U+23A1--23A3 (was U+F8EE--F8F0)
+// 0xEC--EF -> U+23A7--23AA (was U+F8F1--F8F4)
+// 0xF4 -> U+23AE (was U+F8F5)
+// 0xF6--F8 -> U+239E--23A0 (was U+F8F6--F8F8)
+// 0xF9--FB -> U+23A4--23A6 (was U+F8F9--F8FB)
+// 0xFC--FE -> U+23AB--23AD (was U+F8FC--F8FE)
+
+//TODO: Contains Unicode PUA mappings
+rtl::textenc::BmpUnicodeToSingleByteRange const unicodeToAdobeSymbolEncoding[]
+= { { 0x0020, 0x0021 - 0x0020, 0x20 }, { 0x0023, 0x0023 - 0x0023, 0x23 },
+ { 0x0025, 0x0026 - 0x0025, 0x25 }, { 0x0028, 0x0029 - 0x0028, 0x28 },
+ { 0x002B, 0x002C - 0x002B, 0x2B }, { 0x002E, 0x003F - 0x002E, 0x2E },
+ { 0x005B, 0x005B - 0x005B, 0x5B }, { 0x005D, 0x005D - 0x005D, 0x5D },
+ { 0x005F, 0x005F - 0x005F, 0x5F }, { 0x007B, 0x007D - 0x007B, 0x7B },
+ { 0x00A0, 0x00A0 - 0x00A0, 0x20 }, { 0x00AC, 0x00AC - 0x00AC, 0xD8 },
+ { 0x00B0, 0x00B1 - 0x00B0, 0xB0 }, { 0x00B5, 0x00B5 - 0x00B5, 0x6D },
+ { 0x00D7, 0x00D7 - 0x00D7, 0xB4 }, { 0x00F7, 0x00F7 - 0x00F7, 0xB8 },
+ { 0x0192, 0x0192 - 0x0192, 0xA6 }, { 0x0391, 0x0392 - 0x0391, 0x41 },
+ { 0x0393, 0x0393 - 0x0393, 0x47 }, { 0x0394, 0x0395 - 0x0394, 0x44 },
+ { 0x0396, 0x0396 - 0x0396, 0x5A }, { 0x0397, 0x0397 - 0x0397, 0x48 },
+ { 0x0398, 0x0398 - 0x0398, 0x51 }, { 0x0399, 0x0399 - 0x0399, 0x49 },
+ { 0x039A, 0x039D - 0x039A, 0x4B }, { 0x039E, 0x039E - 0x039E, 0x58 },
+ { 0x039F, 0x03A0 - 0x039F, 0x4F }, { 0x03A1, 0x03A1 - 0x03A1, 0x52 },
+ { 0x03A3, 0x03A5 - 0x03A3, 0x53 }, { 0x03A6, 0x03A6 - 0x03A6, 0x46 },
+ { 0x03A7, 0x03A7 - 0x03A7, 0x43 }, { 0x03A8, 0x03A8 - 0x03A8, 0x59 },
+ { 0x03A9, 0x03A9 - 0x03A9, 0x57 }, { 0x03B1, 0x03B2 - 0x03B1, 0x61 },
+ { 0x03B3, 0x03B3 - 0x03B3, 0x67 }, { 0x03B4, 0x03B5 - 0x03B4, 0x64 },
+ { 0x03B6, 0x03B6 - 0x03B6, 0x7A }, { 0x03B7, 0x03B7 - 0x03B7, 0x68 },
+ { 0x03B8, 0x03B8 - 0x03B8, 0x71 }, { 0x03B9, 0x03B9 - 0x03B9, 0x69 },
+ { 0x03BA, 0x03BD - 0x03BA, 0x6B }, { 0x03BE, 0x03BE - 0x03BE, 0x78 },
+ { 0x03BF, 0x03C0 - 0x03BF, 0x6F }, { 0x03C1, 0x03C1 - 0x03C1, 0x72 },
+ { 0x03C2, 0x03C2 - 0x03C2, 0x56 }, { 0x03C3, 0x03C5 - 0x03C3, 0x73 },
+ { 0x03C6, 0x03C6 - 0x03C6, 0x66 }, { 0x03C7, 0x03C7 - 0x03C7, 0x63 },
+ { 0x03C8, 0x03C8 - 0x03C8, 0x79 }, { 0x03C9, 0x03C9 - 0x03C9, 0x77 },
+ { 0x03D1, 0x03D1 - 0x03D1, 0x4A }, { 0x03D2, 0x03D2 - 0x03D2, 0xA1 },
+ { 0x03D5, 0x03D5 - 0x03D5, 0x6A }, { 0x03D6, 0x03D6 - 0x03D6, 0x76 },
+ { 0x2022, 0x2022 - 0x2022, 0xB7 }, { 0x2026, 0x2026 - 0x2026, 0xBC },
+ { 0x2032, 0x2032 - 0x2032, 0xA2 }, { 0x2033, 0x2033 - 0x2033, 0xB2 },
+ { 0x2044, 0x2044 - 0x2044, 0xA4 }, { 0x20AC, 0x20AC - 0x20AC, 0xA0 },
+ { 0x2111, 0x2111 - 0x2111, 0xC1 }, { 0x2118, 0x2118 - 0x2118, 0xC3 },
+ { 0x211C, 0x211C - 0x211C, 0xC2 }, { 0x2126, 0x2126 - 0x2126, 0x57 },
+ { 0x2135, 0x2135 - 0x2135, 0xC0 }, { 0x2190, 0x2193 - 0x2190, 0xAC },
+ { 0x2194, 0x2194 - 0x2194, 0xAB }, { 0x21B5, 0x21B5 - 0x21B5, 0xBF },
+ { 0x21D0, 0x21D3 - 0x21D0, 0xDC }, { 0x21D4, 0x21D4 - 0x21D4, 0xDB },
+ { 0x2200, 0x2200 - 0x2200, 0x22 }, { 0x2202, 0x2202 - 0x2202, 0xB6 },
+ { 0x2203, 0x2203 - 0x2203, 0x24 }, { 0x2205, 0x2205 - 0x2205, 0xC6 },
+ { 0x2206, 0x2206 - 0x2206, 0x44 }, { 0x2207, 0x2207 - 0x2207, 0xD1 },
+ { 0x2208, 0x2209 - 0x2208, 0xCE }, { 0x220B, 0x220B - 0x220B, 0x27 },
+ { 0x220F, 0x220F - 0x220F, 0xD5 }, { 0x2211, 0x2211 - 0x2211, 0xE5 },
+ { 0x2212, 0x2212 - 0x2212, 0x2D }, { 0x2215, 0x2215 - 0x2215, 0xA4 },
+ { 0x2217, 0x2217 - 0x2217, 0x2A }, { 0x221A, 0x221A - 0x221A, 0xD6 },
+ { 0x221D, 0x221D - 0x221D, 0xB5 }, { 0x221E, 0x221E - 0x221E, 0xA5 },
+ { 0x2220, 0x2220 - 0x2220, 0xD0 }, { 0x2227, 0x2228 - 0x2227, 0xD9 },
+ { 0x2229, 0x222A - 0x2229, 0xC7 }, { 0x222B, 0x222B - 0x222B, 0xF2 },
+ { 0x2234, 0x2234 - 0x2234, 0x5C }, { 0x223C, 0x223C - 0x223C, 0x7E },
+ { 0x2245, 0x2245 - 0x2245, 0x40 }, { 0x2248, 0x2248 - 0x2248, 0xBB },
+ { 0x2260, 0x2261 - 0x2260, 0xB9 }, { 0x2264, 0x2264 - 0x2264, 0xA3 },
+ { 0x2265, 0x2265 - 0x2265, 0xB3 }, { 0x2282, 0x2282 - 0x2282, 0xCC },
+ { 0x2283, 0x2283 - 0x2283, 0xC9 }, { 0x2284, 0x2284 - 0x2284, 0xCB },
+ { 0x2286, 0x2286 - 0x2286, 0xCD }, { 0x2287, 0x2287 - 0x2287, 0xCA },
+ { 0x2295, 0x2295 - 0x2295, 0xC5 }, { 0x2297, 0x2297 - 0x2297, 0xC4 },
+ { 0x22A5, 0x22A5 - 0x22A5, 0x5E }, { 0x22C5, 0x22C5 - 0x22C5, 0xD7 },
+ { 0x2320, 0x2320 - 0x2320, 0xF3 }, { 0x2321, 0x2321 - 0x2321, 0xF5 },
+ { 0x2329, 0x2329 - 0x2329, 0xE1 }, { 0x232A, 0x232A - 0x232A, 0xF1 },
+ { 0x239B, 0x239D - 0x239B, 0xE6 }, { 0x239E, 0x23A0 - 0x239E, 0xF6 },
+ { 0x23A1, 0x23A3 - 0x23A1, 0xE9 }, { 0x23A4, 0x23A6 - 0x23A4, 0xF9 },
+ { 0x23A7, 0x23AA - 0x23A7, 0xEC }, { 0x23AB, 0x23AD - 0x23AB, 0xFC },
+ { 0x23AE, 0x23AE - 0x23AE, 0xF4 }, { 0x23AF, 0x23AF - 0x23AF, 0xBD },
+ { 0x23D0, 0x23D0 - 0x23D0, 0xBE }, { 0x25CA, 0x25CA - 0x25CA, 0xE0 },
+ { 0x2660, 0x2660 - 0x2660, 0xAA }, { 0x2663, 0x2663 - 0x2663, 0xA7 },
+ { 0x2665, 0x2665 - 0x2665, 0xA9 }, { 0x2666, 0x2666 - 0x2666, 0xA8 },
+ { 0xF000, 0xF0FF - 0xF000, 0x00 }, // symbol aliasing U+F0XX->S+00XX
+ { 0xF6D9, 0xF6D9 - 0xF6D9, 0xD3 }, { 0xF6DA, 0xF6DA - 0xF6DA, 0xD2 },
+ { 0xF6DB, 0xF6DB - 0xF6DB, 0xD4 }, { 0xF8E5, 0xF8E5 - 0xF8E5, 0x60 },
+ { 0xF8E8, 0xF8EA - 0xF8E8, 0xE2 } };
+
+//TODO: Contains Unicode PUA mappings
+rtl::textenc::BmpUnicodeToSingleByteConverterData const
+adobeSymbolEncodingConverterData = {
+ { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x00
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x10
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x0020, 0x0021, 0x2200, 0x0023, 0x2203, 0x0025, 0x0026, 0x220B, // 0x20
+ 0x0028, 0x0029, 0x2217, 0x002B, 0x002C, 0x2212, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // 0x30
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x2245, 0x0391, 0x0392, 0x03A7, 0x0394, 0x0395, 0x03A6, 0x0393, // 0x40
+ 0x0397, 0x0399, 0x03D1, 0x039A, 0x039B, 0x039C, 0x039D, 0x039F,
+ 0x03A0, 0x0398, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03C2, 0x03A9, // 0x50
+ 0x039E, 0x03A8, 0x0396, 0x005B, 0x2234, 0x005D, 0x22A5, 0x005F,
+ 0xF8E5, 0x03B1, 0x03B2, 0x03C7, 0x03B4, 0x03B5, 0x03C6, 0x03B3, // 0x60
+ 0x03B7, 0x03B9, 0x03D5, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BF,
+ 0x03C0, 0x03B8, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03D6, 0x03C9, // 0x70
+ 0x03BE, 0x03C8, 0x03B6, 0x007B, 0x007C, 0x007D, 0x223C, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x80
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x90
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x20AC, 0x03D2, 0x2032, 0x2264, 0x2215, 0x221E, 0x0192, 0x2663, // 0xA0
+ 0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193,
+ 0x00B0, 0x00B1, 0x2033, 0x2265, 0x00D7, 0x221D, 0x2202, 0x2022, // 0xB0
+ 0x00F7, 0x2260, 0x2261, 0x2248, 0x2026, 0x23AF, 0x23D0, 0x21B5,
+ 0x2135, 0x2111, 0x211C, 0x2118, 0x2297, 0x2295, 0x2205, 0x2229, // 0xC0
+ 0x222A, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208, 0x2209,
+ 0x2220, 0x2207, 0xF6DA, 0xF6D9, 0xF6DB, 0x220F, 0x221A, 0x22C5, // 0xD0
+ 0x00AC, 0x2227, 0x2228, 0x21D4, 0x21D0, 0x21D1, 0x21D2, 0x21D3,
+ 0x25CA, 0x2329, 0xF8E8, 0xF8E9, 0xF8EA, 0x2211, 0x239B, 0x239C, // 0xE0
+ 0x239D, 0x23A1, 0x23A2, 0x23A3, 0x23A7, 0x23A8, 0x23A9, 0x23AA,
+ 0xffff, 0x232A, 0x222B, 0x2320, 0x23AE, 0x2321, 0x239E, 0x239F, // 0xF0
+ 0x23A0, 0x23A4, 0x23A5, 0x23A6, 0x23AB, 0x23AC, 0x23AD, 0xffff },
+ SAL_N_ELEMENTS( unicodeToAdobeSymbolEncoding ),
+ unicodeToAdobeSymbolEncoding };
+
+// RTL_TEXTENCODING_ADOBE_DINGBATS is based on
+// <http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/zdingbat.txt> revision
+// "v0.2, 30 March 1999"
+
+//TODO: Contains Unicode PUA mappings
+rtl::textenc::BmpUnicodeToSingleByteRange const unicodeToAdobeDingbatsEncoding[]
+= { { 0x0020, 0x0020 - 0x0020, 0x20 }, { 0x00A0, 0x00A0 - 0x00A0, 0x20 },
+ { 0x2192, 0x2192 - 0x2192, 0xD5 }, { 0x2194, 0x2195 - 0x2194, 0xD6 },
+ { 0x2460, 0x2469 - 0x2460, 0xAC },
+ { 0x25A0, 0x25A0 - 0x25A0, 0x6E },
+ { 0x25B2, 0x25B2 - 0x25B2, 0x73 }, { 0x25BC, 0x25BC - 0x25BC, 0x74 },
+ { 0x25C6, 0x25C6 - 0x25C6, 0x75 }, { 0x25CF, 0x25CF - 0x25CF, 0x6C },
+ { 0x25D7, 0x25D7 - 0x25D7, 0x77 },
+ { 0x2605, 0x2605 - 0x2605, 0x48 }, { 0x260E, 0x260E - 0x260E, 0x25 },
+ { 0x261B, 0x261B - 0x261B, 0x2A }, { 0x261E, 0x261E - 0x261E, 0x2B },
+ { 0x2660, 0x2660 - 0x2660, 0xAB }, { 0x2663, 0x2663 - 0x2663, 0xA8 },
+ { 0x2665, 0x2665 - 0x2665, 0xAA }, { 0x2666, 0x2666 - 0x2666, 0xA9 },
+ { 0x2701, 0x2704 - 0x2701, 0x21 }, { 0x2706, 0x2709 - 0x2706, 0x26 },
+ { 0x270C, 0x2727 - 0x270C, 0x2C }, { 0x2729, 0x274B - 0x2729, 0x49 },
+ { 0x274D, 0x274D - 0x274D, 0x6D }, { 0x274F, 0x2752 - 0x274F, 0x6F },
+ { 0x2756, 0x2756 - 0x2756, 0x76 }, { 0x2758, 0x275E - 0x2758, 0x78 },
+ { 0x2761, 0x2767 - 0x2761, 0xA1 }, { 0x2776, 0x27AF - 0x2776, 0xB6 },
+ { 0x27B1, 0x27BE - 0x27B1, 0xF1 },
+ { 0xF000, 0xF0FF - 0xF000, 0x00 }, // symbol aliasing U+F0XX->S+00XX
+ { 0xF8D7, 0xF8E4 - 0xF8D7, 0x80 }};
+
+rtl::textenc::BmpUnicodeToSingleByteConverterData const
+adobeDingbatsEncodingConverterData = {
+ { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00
+ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x10
+ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+ 0x0020, 0x2701, 0x2702, 0x2703, 0x2704, 0x260E, 0x2706, 0x2707, // 0x20
+ 0x2708, 0x2709, 0x261B, 0x261E, 0x270C, 0x270D, 0x270E, 0x270F,
+ 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, // 0x30
+ 0x2718, 0x2719, 0x271A, 0x271B, 0x271C, 0x271D, 0x271E, 0x271F,
+ 0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727, // 0x40
+ 0x2605, 0x2729, 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F,
+ 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, // 0x50
+ 0x2738, 0x2739, 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F,
+ 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, // 0x60
+ 0x2748, 0x2749, 0x274A, 0x274B, 0x25CF, 0x274D, 0x25A0, 0x274F,
+ 0x2750, 0x2751, 0x2752, 0x25B2, 0x25BC, 0x25C6, 0x2756, 0x25D7, // 0x70
+ 0x2758, 0x2759, 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0xFFFF,
+ 0xF8D7, 0xF8D8, 0xF8D9, 0xF8DA, 0xF8DB, 0xF8DC, 0xF8DD, 0xF8DE, // 0x80
+ 0xF8DF, 0xF8E0, 0xF8E1, 0xF8E2, 0xF8E3, 0xF8E4, 0xFFFF, 0xFFFF,
+ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x90
+ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+ 0xFFFF, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, // 0xA0
+ 0x2663, 0x2666, 0x2665, 0x2660, 0x2460, 0x2461, 0x2462, 0x2463,
+ 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2776, 0x2777, // 0xB0
+ 0x2778, 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x277F,
+ 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, // 0xC0
+ 0x2788, 0x2789, 0x278A, 0x278B, 0x278C, 0x278D, 0x278E, 0x278F,
+ 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2795, 0x2796, 0x2797, // 0xD0
+ 0x2798, 0x2799, 0x279A, 0x279B, 0x279C, 0x279D, 0x279E, 0x279F,
+ 0x27A0, 0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x27A6, 0x27A7, // 0xE0
+ 0x27A8, 0x27A9, 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF,
+ 0xFFFF, 0x27B1, 0x27B2, 0x27B3, 0x27B4, 0x27B5, 0x27B6, 0x27B7, // 0xF0
+ 0x27B8, 0x27B9, 0x27BA, 0x27BB, 0x27BC, 0x27BD, 0x27BE, 0xFFFF },
+ SAL_N_ELEMENTS(unicodeToAdobeDingbatsEncoding),
+ unicodeToAdobeDingbatsEncoding };
+
+ImplTextEncodingData const adobeStandardEncodingData
+= { { &adobeStandardEncodingConverterData,
+ &rtl_textenc_convertSingleByteToBmpUnicode,
+ &rtl_textenc_convertBmpUnicodeToSingleByte,
+ nullptr, nullptr, nullptr,
+ ImplCreateUnicodeToTextContext, ImplDestroyUnicodeToTextContext,
+ ImplResetUnicodeToTextContext },
+ nullptr, "Adobe-Standard-Encoding",
+ 1, 1, 1, 0,
+ RTL_TEXTENCODING_INFO_MIME };
+
+ImplTextEncodingData const adobeSymbolEncodingData
+= { { &adobeSymbolEncodingConverterData,
+ &rtl_textenc_convertSingleByteToBmpUnicode,
+ &rtl_textenc_convertBmpUnicodeToSingleByte,
+ nullptr, nullptr, nullptr,
+ ImplCreateUnicodeToTextContext, ImplDestroyUnicodeToTextContext,
+ ImplResetUnicodeToTextContext },
+ nullptr, "Adobe-Symbol-Encoding",
+ 1, 1, 1, 0,
+ RTL_TEXTENCODING_INFO_SYMBOL | RTL_TEXTENCODING_INFO_MIME };
+
+ImplTextEncodingData const adobeDingbatsEncodingData
+= { { &adobeDingbatsEncodingConverterData,
+ &rtl_textenc_convertSingleByteToBmpUnicode,
+ &rtl_textenc_convertBmpUnicodeToSingleByte,
+ nullptr, nullptr, nullptr,
+ ImplCreateUnicodeToTextContext, ImplDestroyUnicodeToTextContext,
+ ImplResetUnicodeToTextContext },
+ nullptr, "Adobe-ZapfDingbats-Encoding",
+ 1, 1, 1, 0,
+ 0 }; // TODO: RTL_TEXTENCODING_INFO_DINGBATS
+
+}
diff --git a/sal/textenc/convertbig5hkscs.cxx b/sal/textenc/convertbig5hkscs.cxx
new file mode 100644
index 000000000..bf3a2e2cf
--- /dev/null
+++ b/sal/textenc/convertbig5hkscs.cxx
@@ -0,0 +1,501 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "context.hxx"
+#include "convertbig5hkscs.hxx"
+#include "converter.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+namespace {
+
+struct ImplBig5HkscsToUnicodeContext
+{
+ sal_Int32 m_nRow; // 0--255; 0 means none
+};
+
+}
+
+void * ImplCreateBig5HkscsToUnicodeContext()
+{
+ ImplBig5HkscsToUnicodeContext * pContext =
+ new ImplBig5HkscsToUnicodeContext;
+ pContext->m_nRow = 0;
+ return pContext;
+}
+
+void ImplResetBig5HkscsToUnicodeContext(void * pContext)
+{
+ if (pContext)
+ static_cast< ImplBig5HkscsToUnicodeContext * >(pContext)->m_nRow = 0;
+}
+
+void ImplDestroyBig5HkscsToUnicodeContext(void * pContext)
+{
+ delete static_cast< ImplBig5HkscsToUnicodeContext * >(pContext);
+}
+
+sal_Size ImplConvertBig5HkscsToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes)
+{
+ sal_uInt16 const * pBig5Hkscs2001Data
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pBig5Hkscs2001ToUnicodeData;
+ sal_Int32 const * pBig5Hkscs2001RowOffsets
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pBig5Hkscs2001ToUnicodeRowOffsets;
+ ImplDBCSToUniLeadTab const * pBig5Data
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pBig5ToUnicodeData;
+ sal_Int32 nRow = 0;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ sal_Unicode * pDestBufPtr = pDestBuf;
+ sal_Unicode * pDestBufEnd = pDestBuf + nDestChars;
+ sal_Size startOfCurrentChar = 0;
+
+ if (pContext)
+ nRow = static_cast< ImplBig5HkscsToUnicodeContext * >(pContext)->m_nRow;
+
+ for (; nConverted < nSrcBytes; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *reinterpret_cast<unsigned char const *>(pSrcBuf++);
+ if (nRow == 0)
+ if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nChar);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ else if (nChar >= 0x81 && nChar <= 0xFE)
+ nRow = nChar;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ else
+ if ((nChar >= 0x40 && nChar <= 0x7E)
+ || (nChar >= 0xA1 && nChar <= 0xFE))
+ {
+ sal_uInt32 nUnicode = 0xFFFF;
+ sal_Int32 nOffset = pBig5Hkscs2001RowOffsets[nRow];
+ sal_uInt32 nFirst=0;
+ sal_uInt32 nLast=0;
+ if (nOffset != -1)
+ {
+ sal_uInt32 nFirstLast = pBig5Hkscs2001Data[nOffset++];
+ nFirst = nFirstLast & 0xFF;
+ nLast = nFirstLast >> 8;
+ if (nChar >= nFirst && nChar <= nLast)
+ nUnicode
+ = pBig5Hkscs2001Data[nOffset + (nChar - nFirst)];
+ }
+ if (nUnicode == 0xFFFF)
+ {
+ sal_uInt32 n = pBig5Data[nRow].mnTrailStart;
+ if (nChar >= n && nChar <= pBig5Data[nRow].mnTrailEnd)
+ {
+ nUnicode = pBig5Data[nRow].mpToUniTrailTab[nChar - n];
+ if (nUnicode == 0)
+ nUnicode = 0xFFFF;
+ assert(!rtl::isHighSurrogate(nUnicode));
+ }
+ }
+ if (nUnicode == 0xFFFF)
+ {
+ ImplDBCSEUDCData const * p
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pEudcData;
+ sal_uInt32 nCount
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_nEudcCount;
+ sal_uInt32 i;
+ for (i = 0; i < nCount; ++i)
+ {
+ if (nRow >= p->mnLeadStart && nRow <= p->mnLeadEnd)
+ {
+ if (nChar < p->mnTrail1Start)
+ break;
+ if (nChar <= p->mnTrail1End)
+ {
+ nUnicode
+ = p->mnUniStart
+ + (nRow - p->mnLeadStart)
+ * p->mnTrailRangeCount
+ + (nChar - p->mnTrail1Start);
+ break;
+ }
+ if (p->mnTrailCount < 2
+ || nChar < p->mnTrail2Start)
+ break;
+ if (nChar <= p->mnTrail2End)
+ {
+ nUnicode
+ = p->mnUniStart
+ + (nRow - p->mnLeadStart)
+ * p->mnTrailRangeCount
+ + (nChar - p->mnTrail2Start)
+ + (p->mnTrail1End - p->mnTrail1Start
+ + 1);
+ break;
+ }
+ if (p->mnTrailCount < 3
+ || nChar < p->mnTrail3Start)
+ break;
+ if (nChar <= p->mnTrail3End)
+ {
+ nUnicode
+ = p->mnUniStart
+ + (nRow - p->mnLeadStart)
+ * p->mnTrailRangeCount
+ + (nChar - p->mnTrail3Start)
+ + (p->mnTrail1End - p->mnTrail1Start
+ + 1)
+ + (p->mnTrail2End - p->mnTrail2Start
+ + 1);
+ break;
+ }
+ break;
+ }
+ ++p;
+ }
+ assert(!rtl::isHighSurrogate(nUnicode));
+ }
+ if (nUnicode == 0xFFFF)
+ goto bad_input;
+ if (rtl::isHighSurrogate(nUnicode))
+ if (pDestBufEnd - pDestBufPtr >= 2)
+ {
+ nOffset += nLast - nFirst + 1;
+ nFirst = pBig5Hkscs2001Data[nOffset++];
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ *pDestBufPtr++
+ = static_cast<sal_Unicode>(pBig5Hkscs2001Data[
+ nOffset + (nChar - nFirst)]);
+ startOfCurrentChar = nConverted + 1;
+ }
+ else
+ goto no_output;
+ else
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ nRow = 0;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nRow = 0;
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++nConverted;
+ } else {
+ nConverted = startOfCurrentChar;
+ }
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nRow = 0;
+ startOfCurrentChar = nConverted + 1;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ if (nRow != 0
+ && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR
+ | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0)
+ nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) {
+ nConverted = startOfCurrentChar;
+ }
+ [[fallthrough]];
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nRow = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ static_cast< ImplBig5HkscsToUnicodeContext * >(pContext)->m_nRow = nRow;
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtBytes)
+ *pSrcCvtBytes = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+sal_Size ImplConvertUnicodeToBig5Hkscs(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars)
+{
+ sal_uInt16 const * pBig5Hkscs2001Data
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pUnicodeToBig5Hkscs2001Data;
+ sal_Int32 const * pBig5Hkscs2001PageOffsets
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pUnicodeToBig5Hkscs2001PageOffsets;
+ sal_Int32 const * pBig5Hkscs2001PlaneOffsets
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pUnicodeToBig5Hkscs2001PlaneOffsets;
+ ImplUniToDBCSHighTab const * pBig5Data
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pUnicodeToBig5Data;
+ sal_Unicode nHighSurrogate = 0;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ char * pDestBufPtr = pDestBuf;
+ char * pDestBufEnd = pDestBuf + nDestBytes;
+
+ if (pContext)
+ nHighSurrogate
+ = static_cast<ImplUnicodeToTextContext *>(pContext)->m_nHighSurrogate;
+
+ for (; nConverted < nSrcChars; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *pSrcBuf++;
+ if (nHighSurrogate == 0)
+ {
+ if (rtl::isHighSurrogate(nChar))
+ {
+ nHighSurrogate = static_cast<sal_Unicode>(nChar);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ nChar = rtl::combineSurrogates(nHighSurrogate, nChar);
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+
+ assert(rtl::isUnicodeScalarValue(nChar));
+
+ if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ else
+ {
+ sal_uInt32 nBytes = 0;
+ sal_Int32 nOffset = pBig5Hkscs2001PlaneOffsets[nChar >> 16];
+ if (nOffset != -1)
+ {
+ nOffset
+ = pBig5Hkscs2001PageOffsets[nOffset + ((nChar & 0xFF00)
+ >> 8)];
+ if (nOffset != -1)
+ {
+ sal_uInt32 nFirstLast = pBig5Hkscs2001Data[nOffset++];
+ sal_uInt32 nFirst = nFirstLast & 0xFF;
+ sal_uInt32 nLast = nFirstLast >> 8;
+ sal_uInt32 nIndex = nChar & 0xFF;
+ if (nIndex >= nFirst && nIndex <= nLast)
+ {
+ nBytes
+ = pBig5Hkscs2001Data[nOffset + (nIndex - nFirst)];
+ }
+ }
+ }
+ if (nBytes == 0)
+ {
+ sal_uInt32 nIndex1 = nChar >> 8;
+ if (nIndex1 < 0x100)
+ {
+ sal_uInt32 nIndex2 = nChar & 0xFF;
+ sal_uInt32 nFirst = pBig5Data[nIndex1].mnLowStart;
+ if (nIndex2 >= nFirst
+ && nIndex2 <= pBig5Data[nIndex1].mnLowEnd)
+ nBytes = pBig5Data[nIndex1].
+ mpToUniTrailTab[nIndex2 - nFirst];
+ }
+ }
+ if (nBytes == 0)
+ {
+ ImplDBCSEUDCData const * p
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_pEudcData;
+ sal_uInt32 nCount
+ = static_cast< ImplBig5HkscsConverterData const * >(pData)->
+ m_nEudcCount;
+ sal_uInt32 i;
+ for (i = 0; i < nCount; ++i) {
+ if (nChar >= p->mnUniStart && nChar <= p->mnUniEnd)
+ {
+ sal_uInt32 nIndex = nChar - p->mnUniStart;
+ sal_uInt32 nLeadOff = nIndex / p->mnTrailRangeCount;
+ sal_uInt32 nTrailOff = nIndex % p->mnTrailRangeCount;
+ sal_uInt32 nSize;
+ nBytes = (p->mnLeadStart + nLeadOff) << 8;
+ nSize = p->mnTrail1End - p->mnTrail1Start + 1;
+ if (nTrailOff < nSize)
+ {
+ nBytes |= p->mnTrail1Start + nTrailOff;
+ break;
+ }
+ nTrailOff -= nSize;
+ nSize = p->mnTrail2End - p->mnTrail2Start + 1;
+ if (nTrailOff < nSize)
+ {
+ nBytes |= p->mnTrail2Start + nTrailOff;
+ break;
+ }
+ nTrailOff -= nSize;
+ nBytes |= p->mnTrail3Start + nTrailOff;
+ break;
+ }
+ ++p;
+ }
+ }
+ if (nBytes == 0)
+ goto bad_input;
+ if (pDestBufEnd - pDestBufPtr >= 2)
+ {
+ *pDestBufPtr++ = static_cast< char >(nBytes >> 8);
+ *pDestBufPtr++ = static_cast< char >(nBytes & 0xFF);
+ }
+ else
+ goto no_output;
+ }
+ nHighSurrogate = 0;
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo, nullptr, 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nHighSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ if (nHighSurrogate != 0
+ && (nInfo & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo,
+ nullptr, 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ static_cast<ImplUnicodeToTextContext *>(pContext)->m_nHighSurrogate
+ = nHighSurrogate;
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtChars)
+ *pSrcCvtChars = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertbig5hkscs.hxx b/sal/textenc/convertbig5hkscs.hxx
new file mode 100644
index 000000000..089ac5845
--- /dev/null
+++ b/sal/textenc/convertbig5hkscs.hxx
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTBIG5HKSCS_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTBIG5HKSCS_HXX
+
+#include <sal/types.h>
+
+#include "tenchelp.hxx"
+
+struct ImplBig5HkscsConverterData
+{
+ sal_uInt16 const * m_pBig5Hkscs2001ToUnicodeData;
+ sal_Int32 const * m_pBig5Hkscs2001ToUnicodeRowOffsets;
+ ImplDBCSToUniLeadTab const * m_pBig5ToUnicodeData;
+ sal_uInt16 const * m_pUnicodeToBig5Hkscs2001Data;
+ sal_Int32 const * m_pUnicodeToBig5Hkscs2001PageOffsets;
+ sal_Int32 const * m_pUnicodeToBig5Hkscs2001PlaneOffsets;
+ ImplUniToDBCSHighTab const * m_pUnicodeToBig5Data;
+ ImplDBCSEUDCData const * m_pEudcData;
+ int m_nEudcCount;
+};
+
+void * ImplCreateBig5HkscsToUnicodeContext();
+
+void ImplResetBig5HkscsToUnicodeContext(void * pContext);
+
+void ImplDestroyBig5HkscsToUnicodeContext(void * pContext);
+
+sal_Size ImplConvertBig5HkscsToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes);
+
+sal_Size ImplConvertUnicodeToBig5Hkscs(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertbig5hkscs.tab b/sal/textenc/convertbig5hkscs.tab
new file mode 100644
index 000000000..04d56b824
--- /dev/null
+++ b/sal/textenc/convertbig5hkscs.tab
@@ -0,0 +1,57 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textenc.h>
+
+#include "context.hxx"
+#include "convertbig5hkscs.hxx"
+#include "generate/big5hkscs2001.tab"
+#include "tenchelp.hxx"
+
+ImplBig5HkscsConverterData const aImplBig5HkscsConvertData
+ = { aImplBig5Hkscs2001ToUnicodeData,
+ aImplBig5Hkscs2001ToUnicodeRowOffsets,
+ aBIG5UniLeadTab, /* from tcvttcn6.tab */
+ aImplUnicodeToBig5Hkscs2001Data,
+ aImplUnicodeToBig5Hkscs2001PageOffsets,
+ aImplUnicodeToBig5Hkscs2001PlaneOffsets,
+ aBIG5DBCSHighTab, /* from tcvttcn6.tab */
+ aImplMS950DBCSEUDCTab, /* from tcvttcn6.tab */
+ DBCS_EUDC_MS950_COUNT }; /* from tcvttcn6.tab */
+
+ImplTextEncodingData const aImplBig5HkscsTextEncodingData
+ = { { &aImplBig5HkscsConvertData,
+ &ImplConvertBig5HkscsToUnicode,
+ &ImplConvertUnicodeToBig5Hkscs,
+ &ImplCreateBig5HkscsToUnicodeContext,
+ &ImplDestroyBig5HkscsToUnicodeContext,
+ &ImplResetBig5HkscsToUnicodeContext,
+ &ImplCreateUnicodeToTextContext,
+ &ImplDestroyUnicodeToTextContext,
+ &ImplResetUnicodeToTextContext },
+ "euc-tw",
+ "Big5-HKSCS",
+ 1,
+ 2,
+ 2,
+ 136,
+ RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CHINESE_TRADITIONAL */
diff --git a/sal/textenc/converter.cxx b/sal/textenc/converter.cxx
new file mode 100644
index 000000000..60e6a3383
--- /dev/null
+++ b/sal/textenc/converter.cxx
@@ -0,0 +1,157 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <o3tl/safeint.hxx>
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "converter.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+sal::detail::textenc::BadInputConversionAction
+sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ bool bUndefined, bool bMultiByte, char cByte, sal_uInt32 nFlags,
+ sal_Unicode ** pDestBufPtr, const sal_Unicode * pDestBufEnd, sal_uInt32 * pInfo)
+{
+ *pInfo |= bUndefined
+ ? (bMultiByte
+ ? RTL_TEXTTOUNICODE_INFO_MBUNDEFINED
+ : RTL_TEXTTOUNICODE_INFO_UNDEFINED)
+ : RTL_TEXTTOUNICODE_INFO_INVALID;
+ switch (nFlags
+ & (bUndefined
+ ? (bMultiByte
+ ? RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK
+ : RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK)
+ : RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK))
+ {
+ case RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR:
+ case RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR:
+ case RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR:
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ return BAD_INPUT_STOP;
+
+ case RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_IGNORE:
+ case RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_IGNORE:
+ case RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE:
+ return BAD_INPUT_CONTINUE;
+
+ case RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE:
+ if (*pDestBufPtr != pDestBufEnd)
+ {
+ *(*pDestBufPtr)++ = RTL_TEXTCVT_BYTE_PRIVATE_START
+ | static_cast<unsigned char>(cByte);
+ return BAD_INPUT_CONTINUE;
+ }
+ else
+ return BAD_INPUT_NO_OUTPUT;
+
+ default: // RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_DEFAULT,
+ // RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT,
+ // RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ if (*pDestBufPtr != pDestBufEnd)
+ {
+ *(*pDestBufPtr)++ = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+ return BAD_INPUT_CONTINUE;
+ }
+ else
+ return BAD_INPUT_NO_OUTPUT;
+ }
+}
+
+sal::detail::textenc::BadInputConversionAction
+sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ bool bUndefined, sal_uInt32 nUtf32, sal_uInt32 nFlags, char ** pDestBufPtr,
+ const char * pDestBufEnd, sal_uInt32 * pInfo, char const * pPrefix,
+ sal_Size nPrefixLen, bool * pPrefixWritten)
+{
+ // TODO! RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE
+ // RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR
+
+ char cReplace;
+
+ if (bUndefined)
+ {
+ if (ImplIsControlOrFormat(nUtf32))
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE) != 0)
+ nFlags = RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE;
+ }
+ else if (ImplIsPrivateUse(nUtf32))
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_IGNORE) != 0)
+ nFlags = RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE;
+ else if ((nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0) != 0)
+ nFlags = RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0;
+ }
+ else if (ImplIsZeroWidth(nUtf32))
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE) != 0)
+ nFlags = RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE;
+ }
+ }
+ *pInfo |= bUndefined ? RTL_UNICODETOTEXT_INFO_UNDEFINED :
+ RTL_UNICODETOTEXT_INFO_INVALID;
+ switch (nFlags & (bUndefined ? RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK :
+ RTL_UNICODETOTEXT_FLAGS_INVALID_MASK))
+ {
+ case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR:
+ case RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR:
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR;
+ return BAD_INPUT_STOP;
+
+ case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE:
+ case RTL_UNICODETOTEXT_FLAGS_INVALID_IGNORE:
+ if (pPrefixWritten)
+ *pPrefixWritten = false;
+ return BAD_INPUT_CONTINUE;
+
+ case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0:
+ case RTL_UNICODETOTEXT_FLAGS_INVALID_0:
+ cReplace = 0;
+ break;
+
+ case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK:
+ case RTL_UNICODETOTEXT_FLAGS_INVALID_QUESTIONMARK:
+ default: // RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT,
+ // RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT
+ cReplace = '?';
+ break;
+
+ case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_UNDERLINE:
+ case RTL_UNICODETOTEXT_FLAGS_INVALID_UNDERLINE:
+ cReplace = '_';
+ break;
+ }
+ if (o3tl::make_unsigned(pDestBufEnd - *pDestBufPtr) > nPrefixLen)
+ {
+ while (nPrefixLen-- > 0)
+ *(*pDestBufPtr)++ = *pPrefix++;
+ *(*pDestBufPtr)++ = cReplace;
+ if (pPrefixWritten)
+ *pPrefixWritten = true;
+ return BAD_INPUT_CONTINUE;
+ }
+ return BAD_INPUT_NO_OUTPUT;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/converter.hxx b/sal/textenc/converter.hxx
new file mode 100644
index 000000000..189f2048a
--- /dev/null
+++ b/sal/textenc/converter.hxx
@@ -0,0 +1,53 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTER_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTER_HXX
+
+#include <sal/config.h>
+#include <sal/saldllapi.h>
+#include <sal/types.h>
+
+// Internal, non-stable ABI
+
+namespace sal::detail::textenc {
+
+enum BadInputConversionAction
+{
+ BAD_INPUT_STOP,
+ BAD_INPUT_CONTINUE,
+ BAD_INPUT_NO_OUTPUT
+};
+
+BadInputConversionAction SAL_DLLPUBLIC
+handleBadInputTextToUnicodeConversion(
+ bool bUndefined, bool bMultiByte, char cByte, sal_uInt32 nFlags,
+ sal_Unicode ** pDestBufPtr, const sal_Unicode * pDestBufEnd, sal_uInt32 * pInfo);
+
+BadInputConversionAction SAL_DLLPUBLIC
+handleBadInputUnicodeToTextConversion(
+ bool bUndefined, sal_uInt32 nUtf32, sal_uInt32 nFlags, char ** pDestBufPtr,
+ const char * pDestBufEnd, sal_uInt32 * pInfo, char const * pPrefix,
+ sal_Size nPrefixLen, bool * pPrefixWritten);
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/converteuctw.cxx b/sal/textenc/converteuctw.cxx
new file mode 100644
index 000000000..8684b643c
--- /dev/null
+++ b/sal/textenc/converteuctw.cxx
@@ -0,0 +1,461 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "context.hxx"
+#include "converter.hxx"
+#include "converteuctw.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+namespace {
+
+enum ImplEucTwToUnicodeState
+{
+ IMPL_EUC_TW_TO_UNICODE_STATE_0,
+ IMPL_EUC_TW_TO_UNICODE_STATE_1,
+ IMPL_EUC_TW_TO_UNICODE_STATE_2_1,
+ IMPL_EUC_TW_TO_UNICODE_STATE_2_2,
+ IMPL_EUC_TW_TO_UNICODE_STATE_2_3
+};
+
+struct ImplEucTwToUnicodeContext
+{
+ ImplEucTwToUnicodeState m_eState;
+ sal_Int32 m_nPlane; // 0--15
+ sal_Int32 m_nRow; // 0--93
+};
+
+}
+
+void * ImplCreateEucTwToUnicodeContext()
+{
+ ImplEucTwToUnicodeContext * pContext = new ImplEucTwToUnicodeContext;
+ pContext->m_eState = IMPL_EUC_TW_TO_UNICODE_STATE_0;
+ return pContext;
+}
+
+void ImplResetEucTwToUnicodeContext(void * pContext)
+{
+ if (pContext)
+ static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_eState
+ = IMPL_EUC_TW_TO_UNICODE_STATE_0;
+}
+
+void ImplDestroyEucTwToUnicodeContext(void * pContext)
+{
+ delete static_cast< ImplEucTwToUnicodeContext * >(pContext);
+}
+
+sal_Size ImplConvertEucTwToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes)
+{
+ sal_uInt16 const * pCns116431992Data
+ = static_cast< ImplEucTwConverterData const * >(pData)->
+ m_pCns116431992ToUnicodeData;
+ sal_Int32 const * pCns116431992RowOffsets
+ = static_cast< ImplEucTwConverterData const * >(pData)->
+ m_pCns116431992ToUnicodeRowOffsets;
+ sal_Int32 const * pCns116431992PlaneOffsets
+ = static_cast< ImplEucTwConverterData const * >(pData)->
+ m_pCns116431992ToUnicodePlaneOffsets;
+ ImplEucTwToUnicodeState eState = IMPL_EUC_TW_TO_UNICODE_STATE_0;
+ sal_Int32 nPlane = 0;
+ sal_Int32 nRow = 0;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ sal_Unicode * pDestBufPtr = pDestBuf;
+ sal_Unicode * pDestBufEnd = pDestBuf + nDestChars;
+ sal_Size startOfCurrentChar = 0;
+
+ if (pContext)
+ {
+ eState = static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_eState;
+ nPlane = static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_nPlane;
+ nRow = static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_nRow;
+ }
+
+ for (; nConverted < nSrcBytes; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *reinterpret_cast<unsigned char const *>(pSrcBuf++);
+ switch (eState)
+ {
+ case IMPL_EUC_TW_TO_UNICODE_STATE_0:
+ if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nChar);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ else if (nChar >= 0xA1 && nChar <= 0xFE)
+ {
+ nRow = nChar - 0xA1;
+ eState = IMPL_EUC_TW_TO_UNICODE_STATE_1;
+ }
+ else if (nChar == 0x8E)
+ eState = IMPL_EUC_TW_TO_UNICODE_STATE_2_1;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_EUC_TW_TO_UNICODE_STATE_1:
+ if (nChar >= 0xA1 && nChar <= 0xFE)
+ {
+ nPlane = 0;
+ goto transform;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_EUC_TW_TO_UNICODE_STATE_2_1:
+ if (nChar >= 0xA1 && nChar <= 0xB0)
+ {
+ nPlane = nChar - 0xA1;
+ eState = IMPL_EUC_TW_TO_UNICODE_STATE_2_2;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_EUC_TW_TO_UNICODE_STATE_2_2:
+ if (nChar >= 0xA1 && nChar <= 0xFE)
+ {
+ nRow = nChar - 0xA1;
+ eState = IMPL_EUC_TW_TO_UNICODE_STATE_2_3;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_EUC_TW_TO_UNICODE_STATE_2_3:
+ if (nChar >= 0xA1 && nChar <= 0xFE)
+ goto transform;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+ }
+ continue;
+
+ transform:
+ {
+ sal_Int32 nPlaneOffset = pCns116431992PlaneOffsets[nPlane];
+ if (nPlaneOffset == -1)
+ goto bad_input;
+ else
+ {
+ sal_Int32 nOffset
+ = pCns116431992RowOffsets[nPlaneOffset + nRow];
+ if (nOffset == -1)
+ goto bad_input;
+ else
+ {
+ sal_uInt32 nFirstLast = pCns116431992Data[nOffset++];
+ sal_uInt32 nFirst = nFirstLast & 0xFF;
+ sal_uInt32 nLast = nFirstLast >> 8;
+ nChar -= 0xA0;
+ if (nChar >= nFirst && nChar <= nLast)
+ {
+ sal_uInt32 nUnicode
+ = pCns116431992Data[nOffset + (nChar - nFirst)];
+ if (nUnicode == 0xFFFF)
+ goto bad_input;
+ else if (rtl::isHighSurrogate(nUnicode))
+ if (pDestBufEnd - pDestBufPtr >= 2)
+ {
+ nOffset += nLast - nFirst + 1;
+ nFirst = pCns116431992Data[nOffset++];
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ *pDestBufPtr++
+ = static_cast<sal_Unicode>(pCns116431992Data[
+ nOffset + (nChar - nFirst)]);
+ startOfCurrentChar = nConverted + 1;
+ }
+ else
+ goto no_output;
+ else
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ }
+ else
+ goto bad_input;
+ eState = IMPL_EUC_TW_TO_UNICODE_STATE_0;
+ }
+ }
+ continue;
+ }
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ eState = IMPL_EUC_TW_TO_UNICODE_STATE_0;
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++nConverted;
+ } else {
+ nConverted = startOfCurrentChar;
+ }
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_EUC_TW_TO_UNICODE_STATE_0;
+ startOfCurrentChar = nConverted + 1;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ if (eState != IMPL_EUC_TW_TO_UNICODE_STATE_0
+ && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR
+ | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0)
+ nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) {
+ nConverted = startOfCurrentChar;
+ }
+ [[fallthrough]];
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_EUC_TW_TO_UNICODE_STATE_0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ {
+ static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_eState = eState;
+ static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_nPlane = nPlane;
+ static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_nRow = nRow;
+ }
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtBytes)
+ *pSrcCvtBytes = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+sal_Size ImplConvertUnicodeToEucTw(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars)
+{
+ sal_uInt8 const * pCns116431992Data
+ = static_cast< ImplEucTwConverterData const * >(pData)->
+ m_pUnicodeToCns116431992Data;
+ sal_Int32 const * pCns116431992PageOffsets
+ = static_cast< ImplEucTwConverterData const * >(pData)->
+ m_pUnicodeToCns116431992PageOffsets;
+ sal_Int32 const * pCns116431992PlaneOffsets
+ = static_cast< ImplEucTwConverterData const * >(pData)->
+ m_pUnicodeToCns116431992PlaneOffsets;
+ sal_Unicode nHighSurrogate = 0;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ char * pDestBufPtr = pDestBuf;
+ char * pDestBufEnd = pDestBuf + nDestBytes;
+
+ if (pContext)
+ nHighSurrogate
+ = static_cast<ImplUnicodeToTextContext *>(pContext)->m_nHighSurrogate;
+
+ for (; nConverted < nSrcChars; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *pSrcBuf++;
+ if (nHighSurrogate == 0)
+ {
+ if (rtl::isHighSurrogate(nChar))
+ {
+ nHighSurrogate = static_cast<sal_Unicode>(nChar);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ nChar = rtl::combineSurrogates(nHighSurrogate, nChar);
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+
+ assert(rtl::isUnicodeScalarValue(nChar));
+
+ if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ else
+ {
+ sal_Int32 nOffset = pCns116431992PlaneOffsets[nChar >> 16];
+ sal_uInt32 nFirst;
+ sal_uInt32 nLast;
+ sal_uInt32 nPlane;
+ if (nOffset == -1)
+ goto bad_input;
+ nOffset
+ = pCns116431992PageOffsets[nOffset + ((nChar & 0xFF00) >> 8)];
+ if (nOffset == -1)
+ goto bad_input;
+ nFirst = pCns116431992Data[nOffset++];
+ nLast = pCns116431992Data[nOffset++];
+ nChar &= 0xFF;
+ if (nChar < nFirst || nChar > nLast)
+ goto bad_input;
+ nOffset += 3 * (nChar - nFirst);
+ nPlane = pCns116431992Data[nOffset++];
+ if (nPlane == 0)
+ goto bad_input;
+ if (pDestBufEnd - pDestBufPtr < (nPlane == 1 ? 2 : 4))
+ goto no_output;
+ if (nPlane != 1)
+ {
+ *pDestBufPtr++ = static_cast< char >(static_cast< unsigned char >(0x8E));
+ *pDestBufPtr++ = static_cast< char >(0xA0 + nPlane);
+ }
+ *pDestBufPtr++ = static_cast< char >(0xA0 + pCns116431992Data[nOffset++]);
+ *pDestBufPtr++ = static_cast< char >(0xA0 + pCns116431992Data[nOffset]);
+ }
+ nHighSurrogate = 0;
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo, nullptr, 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nHighSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ if (nHighSurrogate != 0
+ && (nInfo & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo,
+ nullptr, 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ static_cast<ImplUnicodeToTextContext *>(pContext)->m_nHighSurrogate
+ = nHighSurrogate;
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtChars)
+ *pSrcCvtChars = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/converteuctw.hxx b/sal/textenc/converteuctw.hxx
new file mode 100644
index 000000000..7d2d7294f
--- /dev/null
+++ b/sal/textenc/converteuctw.hxx
@@ -0,0 +1,65 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTEUCTW_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTEUCTW_HXX
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+
+struct ImplEucTwConverterData
+{
+ sal_uInt16 const * m_pCns116431992ToUnicodeData;
+ sal_Int32 const * m_pCns116431992ToUnicodeRowOffsets;
+ sal_Int32 const * m_pCns116431992ToUnicodePlaneOffsets;
+ sal_uInt8 const * m_pUnicodeToCns116431992Data;
+ sal_Int32 const * m_pUnicodeToCns116431992PageOffsets;
+ sal_Int32 const * m_pUnicodeToCns116431992PlaneOffsets;
+};
+
+void * ImplCreateEucTwToUnicodeContext();
+
+void ImplResetEucTwToUnicodeContext(void * pContext);
+
+void ImplDestroyEucTwToUnicodeContext(void * pContext);
+
+sal_Size ImplConvertEucTwToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes);
+
+sal_Size ImplConvertUnicodeToEucTw(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/converteuctw.tab b/sal/textenc/converteuctw.tab
new file mode 100644
index 000000000..e1b553fb0
--- /dev/null
+++ b/sal/textenc/converteuctw.tab
@@ -0,0 +1,54 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textenc.h>
+
+#include "context.hxx"
+#include "converteuctw.hxx"
+
+#include "generate/cns116431992.tab"
+
+ImplEucTwConverterData const aImplEucTwConvertData
+ = { aImplCns116431992ToUnicodeData,
+ aImplCns116431992ToUnicodeRowOffsets,
+ aImplCns116431992ToUnicodePlaneOffsets,
+ aImplUnicodeToCns116431992Data,
+ aImplUnicodeToCns116431992PageOffsets,
+ aImplUnicodeToCns116431992PlaneOffsets };
+
+ImplTextEncodingData const aImplEucTwTextEncodingData
+ = { { &aImplEucTwConvertData,
+ &ImplConvertEucTwToUnicode,
+ &ImplConvertUnicodeToEucTw,
+ &ImplCreateEucTwToUnicodeContext,
+ &ImplDestroyEucTwToUnicodeContext,
+ &ImplResetEucTwToUnicodeContext,
+ &ImplCreateUnicodeToTextContext,
+ &ImplDestroyUnicodeToTextContext,
+ &ImplResetUnicodeToTextContext },
+ "cns11643-1",
+ "Big5",
+ 1,
+ 4,
+ 2,
+ 136,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* SCRIPT_CHINESE_TRADITIONAL */
diff --git a/sal/textenc/convertgb18030.cxx b/sal/textenc/convertgb18030.cxx
new file mode 100644
index 000000000..d7963762f
--- /dev/null
+++ b/sal/textenc/convertgb18030.cxx
@@ -0,0 +1,475 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "context.hxx"
+#include "converter.hxx"
+#include "convertgb18030.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+namespace {
+
+enum ImplGb18030ToUnicodeState
+{
+ IMPL_GB_18030_TO_UNICODE_STATE_0,
+ IMPL_GB_18030_TO_UNICODE_STATE_1,
+ IMPL_GB_18030_TO_UNICODE_STATE_2,
+ IMPL_GB_18030_TO_UNICODE_STATE_3
+};
+
+struct ImplGb18030ToUnicodeContext
+{
+ ImplGb18030ToUnicodeState m_eState;
+ sal_uInt32 m_nCode;
+};
+
+}
+
+void * ImplCreateGb18030ToUnicodeContext()
+{
+ ImplGb18030ToUnicodeContext * pContext = new ImplGb18030ToUnicodeContext;
+ pContext->m_eState = IMPL_GB_18030_TO_UNICODE_STATE_0;
+ return pContext;
+}
+
+void ImplResetGb18030ToUnicodeContext(void * pContext)
+{
+ if (pContext)
+ static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_eState
+ = IMPL_GB_18030_TO_UNICODE_STATE_0;
+}
+
+void ImplDestroyGb18030ToUnicodeContext(void * pContext)
+{
+ delete static_cast< ImplGb18030ToUnicodeContext * >(pContext);
+}
+
+sal_Size ImplConvertGb18030ToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes)
+{
+ sal_Unicode const * pGb18030Data
+ = static_cast< ImplGb18030ConverterData const * >(pData)->m_pGb18030ToUnicodeData;
+ ImplGb180302000ToUnicodeRange const * pGb18030Ranges
+ = static_cast< ImplGb18030ConverterData const * >(pData)->
+ m_pGb18030ToUnicodeRanges;
+ ImplGb18030ToUnicodeState eState = IMPL_GB_18030_TO_UNICODE_STATE_0;
+ sal_uInt32 nCode = 0;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ sal_Unicode * pDestBufPtr = pDestBuf;
+ sal_Unicode * pDestBufEnd = pDestBuf + nDestChars;
+ sal_Size startOfCurrentChar = 0;
+
+ if (pContext)
+ {
+ eState = static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_eState;
+ nCode = static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_nCode;
+ }
+
+ for (; nConverted < nSrcBytes; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *reinterpret_cast<unsigned char const *>(pSrcBuf++);
+ switch (eState)
+ {
+ case IMPL_GB_18030_TO_UNICODE_STATE_0:
+ if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nChar);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ else if (nChar == 0x80)
+ goto bad_input;
+ else if (nChar <= 0xFE)
+ {
+ nCode = nChar - 0x81;
+ eState = IMPL_GB_18030_TO_UNICODE_STATE_1;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_GB_18030_TO_UNICODE_STATE_1:
+ if (nChar >= 0x30 && nChar <= 0x39)
+ {
+ nCode = nCode * 10 + (nChar - 0x30);
+ eState = IMPL_GB_18030_TO_UNICODE_STATE_2;
+ }
+ else if ((nChar >= 0x40 && nChar <= 0x7E)
+ || (nChar >= 0x80 && nChar <= 0xFE))
+ {
+ nCode = nCode * 190 + (nChar <= 0x7E ? nChar - 0x40 :
+ nChar - 0x80 + 63);
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = pGb18030Data[nCode];
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ eState = IMPL_GB_18030_TO_UNICODE_STATE_0;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_GB_18030_TO_UNICODE_STATE_2:
+ if (nChar >= 0x81 && nChar <= 0xFE)
+ {
+ nCode = nCode * 126 + (nChar - 0x81);
+ eState = IMPL_GB_18030_TO_UNICODE_STATE_3;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_GB_18030_TO_UNICODE_STATE_3:
+ if (nChar >= 0x30 && nChar <= 0x39)
+ {
+ nCode = nCode * 10 + (nChar - 0x30);
+
+ // 90 30 81 30 to E3 32 9A 35 maps to U+10000 to U+10FFFF:
+ if (nCode >= 189000 && nCode <= 1237575)
+ if (pDestBufEnd - pDestBufPtr >= 2)
+ {
+ nCode -= 189000 - 0x10000;
+ pDestBufPtr += rtl::splitSurrogates(nCode, pDestBufPtr);
+ startOfCurrentChar = nConverted + 1;
+ }
+ else
+ goto no_output;
+ else
+ {
+ ImplGb180302000ToUnicodeRange const * pRange
+ = pGb18030Ranges;
+ sal_uInt32 nFirstNonRange = 0;
+ for (;;)
+ {
+ if (pRange->m_nNonRangeDataIndex == -1)
+ goto bad_input;
+ else if (nCode < pRange->m_nFirstLinear)
+ {
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++
+ = pGb18030Data[
+ pRange->m_nNonRangeDataIndex
+ + (nCode - nFirstNonRange)];
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ break;
+ }
+ else if (nCode < pRange->m_nPastLinear)
+ {
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++
+ = static_cast<sal_Unicode>(pRange->m_nFirstUnicode
+ + (nCode
+ - pRange->
+ m_nFirstLinear));
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ break;
+ }
+ nFirstNonRange = (pRange++)->m_nPastLinear;
+ }
+ }
+ eState = IMPL_GB_18030_TO_UNICODE_STATE_0;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+ }
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ eState = IMPL_GB_18030_TO_UNICODE_STATE_0;
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++nConverted;
+ } else {
+ nConverted = startOfCurrentChar;
+ }
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_GB_18030_TO_UNICODE_STATE_0;
+ startOfCurrentChar = nConverted + 1;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ if (eState != IMPL_GB_18030_TO_UNICODE_STATE_0
+ && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR
+ | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0)
+ nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) {
+ nConverted = startOfCurrentChar;
+ }
+ [[fallthrough]];
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_GB_18030_TO_UNICODE_STATE_0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ {
+ static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_eState = eState;
+ static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_nCode = nCode;
+ }
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtBytes)
+ *pSrcCvtBytes = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+sal_Size ImplConvertUnicodeToGb18030(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars)
+{
+ sal_uInt32 const * pGb18030Data
+ = static_cast< ImplGb18030ConverterData const * >(pData)->
+ m_pUnicodeToGb18030Data;
+ ImplUnicodeToGb180302000Range const * pGb18030Ranges
+ = static_cast< ImplGb18030ConverterData const * >(pData)->
+ m_pUnicodeToGb18030Ranges;
+ sal_Unicode nHighSurrogate = 0;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ char * pDestBufPtr = pDestBuf;
+ char * pDestBufEnd = pDestBuf + nDestBytes;
+
+ if (pContext)
+ nHighSurrogate
+ = static_cast<ImplUnicodeToTextContext *>(pContext)->m_nHighSurrogate;
+
+ for (; nConverted < nSrcChars; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *pSrcBuf++;
+ if (nHighSurrogate == 0)
+ {
+ if (rtl::isHighSurrogate(nChar))
+ {
+ nHighSurrogate = static_cast<sal_Unicode>(nChar);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ nChar = rtl::combineSurrogates(nHighSurrogate, nChar);
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+
+ assert(rtl::isUnicodeScalarValue(nChar));
+
+ if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ else if (nChar < 0x10000)
+ {
+ ImplUnicodeToGb180302000Range const * pRange = pGb18030Ranges;
+ sal_Unicode nFirstNonRange = 0x80;
+ for (;;)
+ {
+ if (nChar < pRange->m_nFirstUnicode)
+ {
+ sal_uInt32 nCode
+ = pGb18030Data[pRange->m_nNonRangeDataIndex
+ + (nChar - nFirstNonRange)];
+ if (pDestBufEnd - pDestBufPtr
+ >= (nCode <= 0xFFFF ? 2 : 4))
+ {
+ if (nCode > 0xFFFF)
+ {
+ *pDestBufPtr++ = static_cast< char >(nCode >> 24);
+ *pDestBufPtr++ = static_cast< char >(nCode >> 16 & 0xFF);
+ }
+ *pDestBufPtr++ = static_cast< char >(nCode >> 8 & 0xFF);
+ *pDestBufPtr++ = static_cast< char >(nCode & 0xFF);
+ }
+ else
+ goto no_output;
+ break;
+ }
+ if (nChar <= pRange->m_nLastUnicode)
+ {
+ if (pDestBufEnd - pDestBufPtr >= 4)
+ {
+ sal_uInt32 nCode
+ = pRange->m_nFirstLinear
+ + (nChar - pRange->m_nFirstUnicode);
+ *pDestBufPtr++ = static_cast< char >(nCode / 12600 + 0x81);
+ *pDestBufPtr++
+ = static_cast< char >(nCode / 1260 % 10 + 0x30);
+ *pDestBufPtr++ = static_cast< char >(nCode / 10 % 126 + 0x81);
+ *pDestBufPtr++ = static_cast< char >(nCode % 10 + 0x30);
+ }
+ else
+ goto no_output;
+ break;
+ }
+ nFirstNonRange
+ = static_cast<sal_Unicode>((pRange++)->m_nLastUnicode + 1);
+ }
+ }
+ else
+ if (pDestBufEnd - pDestBufPtr >= 4)
+ {
+ sal_uInt32 nCode = nChar - 0x10000;
+ *pDestBufPtr++ = static_cast< char >(nCode / 12600 + 0x90);
+ *pDestBufPtr++ = static_cast< char >(nCode / 1260 % 10 + 0x30);
+ *pDestBufPtr++ = static_cast< char >(nCode / 10 % 126 + 0x81);
+ *pDestBufPtr++ = static_cast< char >(nCode % 10 + 0x30);
+ }
+ else
+ goto no_output;
+ nHighSurrogate = 0;
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo, nullptr, 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nHighSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ if (nHighSurrogate != 0
+ && (nInfo & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo,
+ nullptr, 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ static_cast<ImplUnicodeToTextContext *>(pContext)->m_nHighSurrogate
+ = nHighSurrogate;
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtChars)
+ *pSrcCvtChars = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertgb18030.hxx b/sal/textenc/convertgb18030.hxx
new file mode 100644
index 000000000..680384794
--- /dev/null
+++ b/sal/textenc/convertgb18030.hxx
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTGB18030_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTGB18030_HXX
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+
+struct ImplGb180302000ToUnicodeRange
+{
+ sal_Int32 m_nNonRangeDataIndex;
+ sal_uInt32 m_nFirstLinear;
+ sal_uInt32 m_nPastLinear;
+ sal_Unicode m_nFirstUnicode;
+};
+
+struct ImplUnicodeToGb180302000Range
+{
+ sal_Int32 m_nNonRangeDataIndex;
+ sal_Unicode m_nFirstUnicode;
+ sal_Unicode m_nLastUnicode;
+ sal_uInt32 m_nFirstLinear;
+};
+
+struct ImplGb18030ConverterData
+{
+ sal_Unicode const * m_pGb18030ToUnicodeData;
+ ImplGb180302000ToUnicodeRange const * m_pGb18030ToUnicodeRanges;
+ sal_uInt32 const * m_pUnicodeToGb18030Data;
+ ImplUnicodeToGb180302000Range const * m_pUnicodeToGb18030Ranges;
+};
+
+void * ImplCreateGb18030ToUnicodeContext();
+
+void ImplResetGb18030ToUnicodeContext(void * pContext);
+
+void ImplDestroyGb18030ToUnicodeContext(void * pContext);
+
+sal_Size ImplConvertGb18030ToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes);
+
+sal_Size ImplConvertUnicodeToGb18030(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertgb18030.tab b/sal/textenc/convertgb18030.tab
new file mode 100644
index 000000000..04064d64d
--- /dev/null
+++ b/sal/textenc/convertgb18030.tab
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textenc.h>
+
+#include "context.hxx"
+#include "convertgb18030.hxx"
+#include "generate/gb180302000.tab"
+
+ImplGb18030ConverterData const aImplGb18030ConvertData
+ = { aImplGb180302000ToUnicodeData,
+ aImplGb180302000ToUnicodeRanges,
+ aImplUnicodeToGb180302000Data,
+ aImplUnicodeToGb180302000Ranges };
+
+ImplTextEncodingData const aImplGb18030TextEncodingData
+ = { { &aImplGb18030ConvertData,
+ &ImplConvertGb18030ToUnicode,
+ &ImplConvertUnicodeToGb18030,
+ &ImplCreateGb18030ToUnicodeContext,
+ &ImplDestroyGb18030ToUnicodeContext,
+ &ImplResetGb18030ToUnicodeContext,
+ &ImplCreateUnicodeToTextContext,
+ &ImplDestroyUnicodeToTextContext,
+ &ImplResetUnicodeToTextContext },
+ "gbk-0",
+ "GB18030",
+ 1,
+ 4,
+ 2,
+ 134,
+ RTL_TEXTENCODING_INFO_UNICODE
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CHINESE_SIMPLIFIED */
diff --git a/sal/textenc/convertisciidevangari.cxx b/sal/textenc/convertisciidevangari.cxx
new file mode 100644
index 000000000..75fcadcf7
--- /dev/null
+++ b/sal/textenc/convertisciidevangari.cxx
@@ -0,0 +1,515 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include "converter.hxx"
+#include "unichars.hxx"
+#include "convertisciidevangari.hxx"
+#include "convertsinglebytetobmpunicode.hxx"
+
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+
+using namespace sal::detail::textenc;
+using namespace rtl::textenc;
+
+namespace {
+
+struct IsciiDevanagariToUnicode
+{
+ sal_uInt8 m_cPrevChar;
+ IsciiDevanagariToUnicode()
+ : m_cPrevChar(0)
+ {
+ }
+ void reset()
+ {
+ m_cPrevChar = 0;
+ }
+ sal_Size convert(char const* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars, sal_uInt32 nFlags,
+ sal_uInt32* pInfo, sal_Size* pSrcCvtBytes);
+};
+
+struct UnicodeToIsciiDevanagari
+{
+ sal_Unicode m_cPrevChar;
+ sal_Unicode m_cHighSurrogate;
+ UnicodeToIsciiDevanagari()
+ : m_cPrevChar(0)
+ , m_cHighSurrogate(0)
+ {
+ }
+ void reset()
+ {
+ m_cPrevChar = 0;
+ m_cHighSurrogate = 0;
+ }
+ sal_Size convert(sal_Unicode const* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size * pSrcCvtChars);
+};
+
+}
+
+const sal_Unicode IsciiDevanagariMap[256] =
+{
+ 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,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x0901,0x0902,0x0903,0x0905,0x0906,0x0907,0x0908,
+ 0x0909,0x090A,0x090B,0x090E,0x090F,0x0910,0x090D,0x0912,
+ 0x0913,0x0914,0x0911,0x0915,0x0916,0x0917,0x0918,0x0919,
+ 0x091A,0x091B,0x091C,0x091D,0x091E,0x091F,0x0920,0x0921,
+ 0x0922,0x0923,0x0924,0x0925,0x0926,0x0927,0x0928,0x0929,
+ 0x092A,0x092B,0x092C,0x092D,0x092E,0x092F,0x095F,0x0930,
+ 0x0931,0x0932,0x0933,0x0934,0x0935,0x0936,0x0937,0x0938,
+ 0x0939,0xFFFF,0x093E,0x093F,0x0940,0x0941,0x0942,0x0943,
+ 0x0946,0x0947,0x0948,0x0945,0x094A,0x094B,0x094C,0x0949,
+ 0x094D,0x093C,0x0964,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x0966,0x0967,0x0968,0x0969,0x096A,0x096B,0x096C,
+ 0x096D,0x096E,0x096F,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
+};
+
+sal_Size IsciiDevanagariToUnicode::convert(
+ char const* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars, sal_uInt32 nFlags,
+ sal_uInt32* pInfo, sal_Size* pSrcCvtBytes)
+{
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ sal_Unicode* pDestBufPtr = pDestBuf;
+ sal_Unicode* pDestBufEnd = pDestBuf + nDestChars;
+ sal_Size startOfCurrentChar = 0;
+
+ while (nConverted < nSrcBytes)
+ {
+ if (pDestBufPtr == pDestBufEnd)
+ {
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ sal_Unicode cChar = sal_Unicode();
+ sal_uInt8 nIn = static_cast<sal_uInt8>(pSrcBuf[nConverted]);
+ sal_uInt8 nNext = nConverted < nSrcBytes + 1 ? static_cast<sal_uInt8>(pSrcBuf[nConverted+1]) : 0;
+ bool bNormal = true;
+ bool bDouble = false;
+ //halant + halant E8 E8 -> halant + ZWNJ 094D 200C
+ //halant + nukta E8 E9 halant + ZWJ 094D 200D
+ if (m_cPrevChar == 0xE8 && nIn == 0xE8)
+ {
+ cChar = 0x200C;
+ bNormal = false;
+ }
+ else if (m_cPrevChar == 0xE8 && nIn == 0xE9)
+ {
+ cChar = 0x200D;
+ bNormal = false;
+ }
+ else if (nNext == 0xE9)
+ {
+ bNormal = false;
+ bDouble = true;
+ switch(nIn)
+ {
+ case 0xA1:
+ cChar = 0x0950;
+ break;
+ case 0xA6:
+ cChar = 0x090C;
+ break;
+ case 0xA7:
+ cChar = 0x0961;
+ break;
+ case 0xAA:
+ cChar = 0x0960;
+ break;
+ case 0xB3:
+ cChar = 0x0958;
+ break;
+ case 0xB4:
+ cChar = 0x0959;
+ break;
+ case 0xB5:
+ cChar = 0x095A;
+ break;
+ case 0xBA:
+ cChar = 0x095B;
+ break;
+ case 0xBF:
+ cChar = 0x095C;
+ break;
+ case 0xC0:
+ cChar = 0x095D;
+ break;
+ case 0xC9:
+ cChar = 0x095E;
+ break;
+ case 0xDB:
+ cChar = 0x0962;
+ break;
+ case 0xDC:
+ cChar = 0x0963;
+ break;
+ case 0xDF:
+ cChar = 0x0944;
+ break;
+ case 0xEA:
+ cChar = 0x093D;
+ break;
+ default:
+ bNormal = true;
+ bDouble = false;
+ break;
+ }
+ }
+
+ ++nConverted;
+ if (bDouble)
+ ++nConverted;
+
+ if (bNormal)
+ cChar = IsciiDevanagariMap[nIn];
+
+ bool bUndefined = cChar == 0xffff;
+
+ if (bUndefined)
+ {
+ BadInputConversionAction eAction = handleBadInputTextToUnicodeConversion(
+ bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo);
+ if (eAction == BAD_INPUT_CONTINUE) {
+ startOfCurrentChar = nConverted;
+ continue;
+ }
+ if (eAction == BAD_INPUT_STOP) {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) {
+ nConverted = startOfCurrentChar;
+ }
+ break;
+ }
+ assert(eAction == BAD_INPUT_NO_OUTPUT);
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ *pDestBufPtr++ = cChar;
+ m_cPrevChar = bNormal ? nIn : 0;
+ startOfCurrentChar = nConverted;
+ }
+
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtBytes)
+ *pSrcCvtBytes = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+BmpUnicodeToSingleByteRange const unicodeToISCIIEncoding[] =
+{
+ { 0x0000, 0x007F - 0x0000, 0x00 }, { 0x0901, 0x0903 - 0x0901, 0xA1 },
+ { 0x0905, 0x090B - 0x0905, 0xA4 }, { 0x090D, 0x090D - 0x090D, 0xAE },
+ { 0x090E, 0x0910 - 0x090E, 0xAB }, { 0x0911, 0x0911 - 0x0911, 0xB2 },
+ { 0x0912, 0x0914 - 0x0912, 0xAF }, { 0x0915, 0x092F - 0x0915, 0xB3 },
+ { 0x0930, 0x0939 - 0x0930, 0xCF }, { 0x093C, 0x093C - 0x093C, 0xE9 },
+ { 0x093E, 0x0943 - 0x093E, 0xDA }, { 0x0945, 0x0945 - 0x0945, 0xE3 },
+ { 0x0946, 0x0948 - 0x0946, 0xE0 }, { 0x0949, 0x0949 - 0x0949, 0xE7 },
+ { 0x094A, 0x094C - 0x094A, 0xE4 }, { 0x094D, 0x094D - 0x094D, 0xE8 },
+ { 0x095F, 0x095F - 0x095F, 0xCE }, { 0x0964, 0x0964 - 0x0964, 0xEA },
+ { 0x0966, 0x096F - 0x0966, 0xF1 }
+};
+
+sal_Size UnicodeToIsciiDevanagari::convert(sal_Unicode const* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size* pSrcCvtChars)
+{
+ size_t const entries = SAL_N_ELEMENTS(unicodeToISCIIEncoding);
+ BmpUnicodeToSingleByteRange const * ranges = unicodeToISCIIEncoding;
+
+ sal_Unicode cHighSurrogate = m_cHighSurrogate;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ char* pDestBufPtr = pDestBuf;
+ char* pDestBufEnd = pDestBuf + nDestBytes;
+ for (; nConverted < nSrcChars; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 c = *pSrcBuf++;
+ char cSpecialChar = 0;
+ if (cHighSurrogate == 0)
+ {
+ if (rtl::isHighSurrogate(c))
+ {
+ cHighSurrogate = static_cast< sal_Unicode >(c);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(c))
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ }
+ else if (rtl::isLowSurrogate(c))
+ {
+ c = rtl::combineSurrogates(cHighSurrogate, c);
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ assert(rtl::isUnicodeScalarValue(c));
+
+ //halant + halant E8 E8 -> halant + ZWNJ 094D 200C
+ //halant + nukta E8 E9 halant + ZWJ 094D 200D
+ if (m_cPrevChar == 0x094D && c == 0x200C)
+ cSpecialChar = '\xE8';
+ else if (m_cPrevChar == 0x094D && c == 0x200D)
+ cSpecialChar = '\xE9';
+ if (cSpecialChar)
+ {
+ if (pDestBufEnd - pDestBufPtr < 1)
+ {
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ *pDestBufPtr++ = cSpecialChar;
+ m_cPrevChar = 0;
+ goto done;
+ }
+ switch (c)
+ {
+ case 0x0950:
+ cSpecialChar = '\xA1';
+ break;
+ case 0x090C:
+ cSpecialChar = '\xA6';
+ break;
+ case 0x0961:
+ cSpecialChar = '\xA7';
+ break;
+ case 0x0960:
+ cSpecialChar = '\xAA';
+ break;
+ case 0x0958:
+ cSpecialChar = '\xB3';
+ break;
+ case 0x0959:
+ cSpecialChar = '\xB4';
+ break;
+ case 0x095A:
+ cSpecialChar = '\xB5';
+ break;
+ case 0x095B:
+ cSpecialChar = '\xBA';
+ break;
+ case 0x095C:
+ cSpecialChar = '\xBF';
+ break;
+ case 0x095D:
+ cSpecialChar = '\xC0';
+ break;
+ case 0x095E:
+ cSpecialChar = '\xC9';
+ break;
+ case 0x0962:
+ cSpecialChar = '\xDB';
+ break;
+ case 0x0963:
+ cSpecialChar = '\xDC';
+ break;
+ case 0x0944:
+ cSpecialChar = '\xDF';
+ break;
+ case 0x093D:
+ cSpecialChar = '\xEA';
+ break;
+ default:
+ break;
+ }
+ if (cSpecialChar)
+ {
+ if (pDestBufEnd - pDestBufPtr < 2)
+ {
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ *pDestBufPtr++ = cSpecialChar;
+ *pDestBufPtr++ = '\xE9';
+ m_cPrevChar = 0;
+ goto done;
+ }
+
+ // Linearly searching through the ranges if probably fastest, assuming
+ // that most converted characters belong to the ASCII subset:
+ for (size_t i = 0; i < entries; ++i)
+ {
+ if (c < ranges[i].unicode)
+ {
+ break;
+ }
+ if (c <= sal::static_int_cast< sal_uInt32 >(
+ ranges[i].unicode + ranges[i].range))
+ {
+ if (pDestBufEnd - pDestBufPtr < 1)
+ {
+ goto no_output;
+ }
+ *pDestBufPtr++ = static_cast< char >(
+ ranges[i].byte + (c - ranges[i].unicode));
+ m_cPrevChar = c;
+ goto done;
+ }
+ }
+ goto bad_input;
+ done:
+ cHighSurrogate = 0;
+ continue;
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ bUndefined, c, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, nullptr,
+ 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ cHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ cHighSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ if (cHighSurrogate != 0
+ && ((nInfo
+ & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0))
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ {
+ nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ }
+ else
+ {
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, nullptr,
+ 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ cHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+ }
+ m_cHighSurrogate = cHighSurrogate;
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtChars)
+ *pSrcCvtChars = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+sal_Size ImplConvertIsciiDevanagariToUnicode(void const*,
+ void* pContext, char const* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars, sal_uInt32 nFlags,
+ sal_uInt32* pInfo, sal_Size* pSrcCvtBytes)
+{
+ IsciiDevanagariToUnicode *pCtx =
+ static_cast<IsciiDevanagariToUnicode*>(pContext);
+ return pCtx->convert(pSrcBuf, nSrcBytes, pDestBuf, nDestChars, nFlags,
+ pInfo, pSrcCvtBytes);
+}
+
+sal_Size ImplConvertUnicodeToIsciiDevanagari(void const*,
+ void * pContext, sal_Unicode const * pSrcBuf, sal_Size nSrcChars,
+ char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size * pSrcCvtChars)
+{
+ UnicodeToIsciiDevanagari *pCtx =
+ static_cast<UnicodeToIsciiDevanagari*>(pContext);
+ return pCtx->convert(pSrcBuf, nSrcChars,
+ pDestBuf, nDestBytes, nFlags, pInfo, pSrcCvtChars);
+}
+
+void *ImplCreateIsciiDevanagariToUnicodeContext()
+{
+ return new IsciiDevanagariToUnicode;
+}
+
+void ImplDestroyIsciiDevanagariToUnicodeContext(void * pContext)
+{
+ IsciiDevanagariToUnicode *pCtx =
+ static_cast<IsciiDevanagariToUnicode*>(pContext);
+ delete pCtx;
+}
+
+void ImplResetIsciiDevanagariToUnicodeContext(void * pContext)
+{
+ IsciiDevanagariToUnicode *pCtx =
+ static_cast<IsciiDevanagariToUnicode*>(pContext);
+ pCtx->reset();
+}
+
+void *ImplCreateUnicodeToIsciiDevanagariContext()
+{
+ return new UnicodeToIsciiDevanagari;
+}
+
+void ImplResetUnicodeToIsciiDevanagariContext(void * pContext)
+{
+ UnicodeToIsciiDevanagari *pCtx =
+ static_cast<UnicodeToIsciiDevanagari*>(pContext);
+ pCtx->reset();
+}
+
+void ImplDestroyUnicodeToIsciiDevanagariContext(void * pContext)
+{
+ UnicodeToIsciiDevanagari *pCtx =
+ static_cast<UnicodeToIsciiDevanagari*>(pContext);
+ delete pCtx;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertisciidevangari.hxx b/sal/textenc/convertisciidevangari.hxx
new file mode 100644
index 000000000..89aeeaef7
--- /dev/null
+++ b/sal/textenc/convertisciidevangari.hxx
@@ -0,0 +1,39 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTISCIIDEVANGARI_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTISCIIDEVANGARI_HXX
+
+#include <sal/types.h>
+
+sal_Size ImplConvertIsciiDevanagariToUnicode(void const * pData,
+ void * pContext, char const * pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf, sal_Size nDestChars, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes);
+
+sal_Size ImplConvertUnicodeToIsciiDevanagari(void const * pData,
+ void * pContext, sal_Unicode const * pSrcBuf, sal_Size nSrcChars,
+ char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size * pSrcCvtChars);
+
+void *ImplCreateIsciiDevanagariToUnicodeContext();
+
+void ImplDestroyIsciiDevanagariToUnicodeContext(void * pContext);
+
+void ImplResetIsciiDevanagariToUnicodeContext(void * pContext);
+
+void *ImplCreateUnicodeToIsciiDevanagariContext();
+
+void ImplResetUnicodeToIsciiDevanagariContext(void * pContext);
+
+void ImplDestroyUnicodeToIsciiDevanagariContext(void * pContext);
+
+#endif // INCLUDED_SAL_TEXTENC_CONVERTISCIIDEVANGARI_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertisciidevangari.tab b/sal/textenc/convertisciidevangari.tab
new file mode 100644
index 000000000..c65dc333e
--- /dev/null
+++ b/sal/textenc/convertisciidevangari.tab
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textenc.h>
+
+#include "convertisciidevangari.hxx"
+
+ImplTextEncodingData const aImplIsciiDevanagariTextEncodingData
+ = { { nullptr,
+ &ImplConvertIsciiDevanagariToUnicode,
+ &ImplConvertUnicodeToIsciiDevanagari,
+ &ImplCreateIsciiDevanagariToUnicodeContext,
+ &ImplDestroyIsciiDevanagariToUnicodeContext,
+ &ImplResetIsciiDevanagariToUnicodeContext,
+ &ImplCreateUnicodeToIsciiDevanagariContext,
+ &ImplDestroyUnicodeToIsciiDevanagariContext,
+ &ImplResetUnicodeToIsciiDevanagariContext },
+ nullptr,
+ "x-iscii-de ",
+ 1,
+ 2,
+ 2,
+ 1,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE };
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertiso2022cn.cxx b/sal/textenc/convertiso2022cn.cxx
new file mode 100644
index 000000000..60c2b5743
--- /dev/null
+++ b/sal/textenc/convertiso2022cn.cxx
@@ -0,0 +1,873 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "converter.hxx"
+#include "convertiso2022cn.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+namespace {
+
+enum ImplIso2022CnToUnicodeState // order is important:
+{
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII,
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO,
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO_2,
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432,
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432_2,
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC,
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR,
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN,
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_ASTERISK
+};
+
+struct ImplIso2022CnToUnicodeContext
+{
+ ImplIso2022CnToUnicodeState m_eState;
+ sal_uInt32 m_nRow;
+ bool m_bSo;
+ bool m_b116431;
+};
+
+enum ImplUnicodeToIso2022CnDesignator
+{
+ IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE,
+ IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312,
+ IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_116431
+};
+
+struct ImplUnicodeToIso2022CnContext
+{
+ sal_Unicode m_nHighSurrogate;
+ ImplUnicodeToIso2022CnDesignator m_eSoDesignator;
+ bool m_b116432Designator;
+ bool m_bSo;
+};
+
+}
+
+void * ImplCreateIso2022CnToUnicodeContext()
+{
+ ImplIso2022CnToUnicodeContext * pContext =
+ new ImplIso2022CnToUnicodeContext;
+ pContext->m_eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ pContext->m_bSo = false;
+ pContext->m_b116431 = false;
+ return pContext;
+}
+
+void ImplResetIso2022CnToUnicodeContext(void * pContext)
+{
+ if (pContext)
+ {
+ static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_eState
+ = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_bSo = false;
+ static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_b116431 = false;
+ }
+}
+
+void ImplDestroyIso2022CnToUnicodeContext(void * pContext)
+{
+ delete static_cast< ImplIso2022CnToUnicodeContext * >(pContext);
+}
+
+sal_Size ImplConvertIso2022CnToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes)
+{
+ ImplDBCSToUniLeadTab const * pGb2312Data
+ = static_cast< ImplIso2022CnConverterData const * >(pData)->
+ m_pGb2312ToUnicodeData;
+ sal_uInt16 const * pCns116431992Data
+ = static_cast< ImplIso2022CnConverterData const * >(pData)->
+ m_pCns116431992ToUnicodeData;
+ sal_Int32 const * pCns116431992RowOffsets
+ = static_cast< ImplIso2022CnConverterData const * >(pData)->
+ m_pCns116431992ToUnicodeRowOffsets;
+ sal_Int32 const * pCns116431992PlaneOffsets
+ = static_cast< ImplIso2022CnConverterData const * >(pData)->
+ m_pCns116431992ToUnicodePlaneOffsets;
+ ImplIso2022CnToUnicodeState eState
+ = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ sal_uInt32 nRow = 0;
+ bool bSo = false;
+ bool b116431 = false;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ sal_Unicode * pDestBufPtr = pDestBuf;
+ sal_Unicode * pDestBufEnd = pDestBuf + nDestChars;
+ sal_Size startOfCurrentChar = 0;
+
+ if (pContext)
+ {
+ eState = static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_eState;
+ nRow = static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_nRow;
+ bSo = static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_bSo;
+ b116431 = static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_b116431;
+ }
+
+ for (; nConverted < nSrcBytes; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *reinterpret_cast<unsigned char const *>(pSrcBuf++);
+ sal_uInt32 nPlane;
+ switch (eState)
+ {
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII:
+ if (nChar == 0x0E) // SO
+ {
+ bSo = true;
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO;
+ }
+ else if (nChar == 0x1B) // ESC
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC;
+ else if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nChar);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO:
+ if (nChar == 0x0F) // SI
+ {
+ bSo = false;
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ }
+ else if (nChar == 0x1B) // ESC
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC;
+ else if (nChar >= 0x21 && nChar <= 0x7E)
+ {
+ nRow = nChar;
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO_2;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO_2:
+ if (nChar >= 0x21 && nChar <= 0x7E)
+ if (b116431)
+ {
+ nPlane = 0;
+ goto transform;
+ }
+ else
+ {
+ sal_uInt16 nUnicode = 0;
+ sal_uInt32 nFirst;
+ nRow += 0x80;
+ nChar += 0x80;
+ nFirst = pGb2312Data[nRow].mnTrailStart;
+ if (nChar >= nFirst
+ && nChar <= pGb2312Data[nRow].mnTrailEnd)
+ nUnicode = pGb2312Data[nRow].
+ mpToUniTrailTab[nChar - nFirst];
+ if (nUnicode != 0)
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO;
+ startOfCurrentChar = nConverted + 1;
+ }
+ else
+ goto no_output;
+ else
+ goto bad_input;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432:
+ if (nChar >= 0x21 && nChar <= 0x7E)
+ {
+ nRow = nChar;
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432_2;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432_2:
+ if (nChar >= 0x21 && nChar <= 0x7E)
+ {
+ nPlane = 1;
+ goto transform;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC:
+ if (nChar == 0x24) // $
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR;
+ else if (nChar == 0x4E) // N
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR:
+ if (nChar == 0x29) // )
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN;
+ else if (nChar == 0x2A) // *
+ eState
+ = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_ASTERISK;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN:
+ if (nChar == 0x41) // A
+ {
+ b116431 = false;
+ eState = bSo ? IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO :
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ }
+ else if (nChar == 0x47) // G
+ {
+ b116431 = true;
+ eState = bSo ? IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO :
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_ASTERISK:
+ if (nChar == 0x48) // H
+ eState = bSo ? IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO :
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+ }
+ continue;
+
+ transform:
+ {
+ sal_Int32 nPlaneOffset = pCns116431992PlaneOffsets[nPlane];
+ if (nPlaneOffset == -1)
+ goto bad_input;
+ else
+ {
+ sal_Int32 nOffset
+ = pCns116431992RowOffsets[nPlaneOffset + (nRow - 0x21)];
+ if (nOffset == -1)
+ goto bad_input;
+ else
+ {
+ sal_uInt32 nFirstLast = pCns116431992Data[nOffset++];
+ sal_uInt32 nFirst = nFirstLast & 0xFF;
+ sal_uInt32 nLast = nFirstLast >> 8;
+ nChar -= 0x20;
+ if (nChar >= nFirst && nChar <= nLast)
+ {
+ sal_uInt32 nUnicode
+ = pCns116431992Data[nOffset + (nChar - nFirst)];
+ if (nUnicode == 0xFFFF)
+ goto bad_input;
+ else if (rtl::isHighSurrogate(nUnicode))
+ if (pDestBufEnd - pDestBufPtr >= 2)
+ {
+ nOffset += nLast - nFirst + 1;
+ nFirst = pCns116431992Data[nOffset++];
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ *pDestBufPtr++
+ = static_cast<sal_Unicode>(pCns116431992Data[
+ nOffset + (nChar - nFirst)]);
+ startOfCurrentChar = nConverted + 1;
+ }
+ else
+ goto no_output;
+ else
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ }
+ else
+ goto bad_input;
+ eState = bSo ? IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO :
+ IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ }
+ }
+ continue;
+ }
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ b116431 = false;
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++nConverted;
+ } else {
+ nConverted = startOfCurrentChar;
+ }
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ b116431 = false;
+ startOfCurrentChar = nConverted + 1;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ if (eState > IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO
+ && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR
+ | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0)
+ nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) {
+ nConverted = startOfCurrentChar;
+ }
+ [[fallthrough]];
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII;
+ b116431 = false;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ {
+ static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_eState = eState;
+ static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_nRow = nRow;
+ static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_bSo = bSo;
+ static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_b116431 = b116431;
+ }
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtBytes)
+ *pSrcCvtBytes = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+void * ImplCreateUnicodeToIso2022CnContext()
+{
+ ImplUnicodeToIso2022CnContext * pContext =
+ new ImplUnicodeToIso2022CnContext;
+ pContext->m_nHighSurrogate = 0;
+ pContext->m_eSoDesignator = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE;
+ pContext->m_b116432Designator = false;
+ pContext->m_bSo = false;
+ return pContext;
+}
+
+void ImplResetUnicodeToIso2022CnContext(void * pContext)
+{
+ if (pContext)
+ {
+ static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_nHighSurrogate = 0;
+ static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_eSoDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE;
+ static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_b116432Designator
+ = false;
+ static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_bSo = false;
+ }
+}
+
+void ImplDestroyUnicodeToIso2022CnContext(void * pContext)
+{
+ delete static_cast< ImplUnicodeToIso2022CnContext * >(pContext);
+}
+
+static sal_uInt32 ImplIso2022CnTranslateTo2312(ImplUniToDBCSHighTab const *
+ pGb2312Data,
+ sal_uInt32 nChar)
+{
+ sal_uInt32 nIndex1 = nChar >> 8;
+ if (nIndex1 < 0x100)
+ {
+ sal_uInt32 nIndex2 = nChar & 0xFF;
+ sal_uInt32 nFirst = pGb2312Data[nIndex1].mnLowStart;
+ if (nIndex2 >= nFirst && nIndex2 <= pGb2312Data[nIndex1].mnLowEnd)
+ return pGb2312Data[nIndex1].mpToUniTrailTab[nIndex2 - nFirst]
+ & 0x7F7F;
+ }
+ return 0;
+}
+
+static sal_uInt32
+ImplIso2022CnTranslateTo116431(sal_uInt8 const * pCns116431992Data,
+ sal_Int32 const * pCns116431992PageOffsets,
+ sal_Int32 const * pCns116431992PlaneOffsets,
+ sal_uInt32 nChar)
+{
+ sal_Int32 nOffset = pCns116431992PlaneOffsets[nChar >> 16];
+ sal_uInt32 nFirst;
+ sal_uInt32 nLast;
+ sal_uInt32 nPlane;
+ if (nOffset == -1)
+ return 0;
+ nOffset = pCns116431992PageOffsets[nOffset + ((nChar & 0xFF00) >> 8)];
+ if (nOffset == -1)
+ return 0;
+ nFirst = pCns116431992Data[nOffset++];
+ nLast = pCns116431992Data[nOffset++];
+ nChar &= 0xFF;
+ if (nChar < nFirst || nChar > nLast)
+ return 0;
+ nOffset += 3 * (nChar - nFirst);
+ nPlane = pCns116431992Data[nOffset++];
+ if (nPlane != 1)
+ return 0;
+ return (0x20 + pCns116431992Data[nOffset]) << 8
+ | (0x20 + pCns116431992Data[nOffset + 1]);
+}
+
+sal_Size ImplConvertUnicodeToIso2022Cn(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars)
+{
+ ImplUniToDBCSHighTab const * pGb2312Data
+ = static_cast< ImplIso2022CnConverterData const * >(pData)->
+ m_pUnicodeToGb2312Data;
+ sal_uInt8 const * pCns116431992Data
+ = static_cast< ImplIso2022CnConverterData const * >(pData)->
+ m_pUnicodeToCns116431992Data;
+ sal_Int32 const * pCns116431992PageOffsets
+ = static_cast< ImplIso2022CnConverterData const * >(pData)->
+ m_pUnicodeToCns116431992PageOffsets;
+ sal_Int32 const * pCns116431992PlaneOffsets
+ = static_cast< ImplIso2022CnConverterData const * >(pData)->
+ m_pUnicodeToCns116431992PlaneOffsets;
+ sal_Unicode nHighSurrogate = 0;
+ ImplUnicodeToIso2022CnDesignator eSoDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE;
+ bool b116432Designator = false;
+ bool bSo = false;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ char * pDestBufPtr = pDestBuf;
+ char * pDestBufEnd = pDestBuf + nDestBytes;
+ bool bWritten;
+
+ if (pContext)
+ {
+ nHighSurrogate
+ = static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_nHighSurrogate;
+ eSoDesignator
+ = static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_eSoDesignator;
+ b116432Designator = static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->
+ m_b116432Designator;
+ bSo = static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_bSo;
+ }
+
+ for (; nConverted < nSrcChars; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *pSrcBuf++;
+ if (nHighSurrogate == 0)
+ {
+ if (rtl::isHighSurrogate(nChar))
+ {
+ nHighSurrogate = static_cast<sal_Unicode>(nChar);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ nChar = rtl::combineSurrogates(nHighSurrogate, nChar);
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+
+ assert(rtl::isUnicodeScalarValue(nChar));
+
+ if (nChar == 0x0A || nChar == 0x0D) // LF, CR
+ {
+ if (bSo)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0F; // SI
+ bSo = false;
+ eSoDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE;
+ b116432Designator = false;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ }
+ else if (nChar == 0x0E || nChar == 0x0F || nChar == 0x1B)
+ goto bad_input;
+ else if (nChar < 0x80)
+ {
+ if (bSo)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0F; // SI
+ bSo = false;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ }
+ else
+ {
+ sal_uInt32 nBytes = 0;
+ ImplUnicodeToIso2022CnDesignator eNewDesignator =
+ IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE;
+ switch (eSoDesignator)
+ {
+ case IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE:
+ nBytes = ImplIso2022CnTranslateTo2312(pGb2312Data, nChar);
+ if (nBytes != 0)
+ {
+ eNewDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312;
+ break;
+ }
+ nBytes = ImplIso2022CnTranslateTo116431(
+ pCns116431992Data,
+ pCns116431992PageOffsets,
+ pCns116431992PlaneOffsets,
+ nChar);
+ if (nBytes != 0)
+ {
+ eNewDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_116431;
+ break;
+ }
+ break;
+
+ case IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312:
+ nBytes = ImplIso2022CnTranslateTo2312(pGb2312Data, nChar);
+ if (nBytes != 0)
+ {
+ eNewDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE;
+ break;
+ }
+ nBytes = ImplIso2022CnTranslateTo116431(
+ pCns116431992Data,
+ pCns116431992PageOffsets,
+ pCns116431992PlaneOffsets,
+ nChar);
+ if (nBytes != 0)
+ {
+ eNewDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_116431;
+ break;
+ }
+ break;
+
+ case IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_116431:
+ nBytes = ImplIso2022CnTranslateTo116431(
+ pCns116431992Data,
+ pCns116431992PageOffsets,
+ pCns116431992PlaneOffsets,
+ nChar);
+ if (nBytes != 0)
+ {
+ eNewDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE;
+ break;
+ }
+ nBytes = ImplIso2022CnTranslateTo2312(pGb2312Data, nChar);
+ if (nBytes != 0)
+ {
+ eNewDesignator
+ = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312;
+ break;
+ }
+ break;
+ }
+ if (nBytes != 0)
+ {
+ if (eNewDesignator
+ != IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE)
+ {
+ if (bSo)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0F; // SI
+ bSo = false;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufEnd - pDestBufPtr >= 4)
+ {
+ *pDestBufPtr++ = 0x1B; // ESC
+ *pDestBufPtr++ = 0x24; // $
+ *pDestBufPtr++ = 0x29; // )
+ *pDestBufPtr++
+ = eNewDesignator
+ == IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312 ?
+ 0x41 : 0x47; // A, G
+ eSoDesignator = eNewDesignator;
+ }
+ else
+ goto no_output;
+ }
+ if (!bSo)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0E; // SO
+ bSo = true;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufEnd - pDestBufPtr >= 4)
+ {
+ *pDestBufPtr++ = static_cast< char >(nBytes >> 8);
+ *pDestBufPtr++ = static_cast< char >(nBytes & 0xFF);
+ }
+ else
+ goto no_output;
+ }
+ else
+ {
+ sal_Int32 nOffset = pCns116431992PlaneOffsets[nChar >> 16];
+ sal_uInt32 nFirst;
+ sal_uInt32 nLast;
+ sal_uInt32 nPlane;
+ if (nOffset == -1)
+ goto bad_input;
+ nOffset
+ = pCns116431992PageOffsets[nOffset
+ + ((nChar & 0xFF00) >> 8)];
+ if (nOffset == -1)
+ goto bad_input;
+ nFirst = pCns116431992Data[nOffset++];
+ nLast = pCns116431992Data[nOffset++];
+ nChar &= 0xFF;
+ if (nChar < nFirst || nChar > nLast)
+ goto bad_input;
+ nOffset += 3 * (nChar - nFirst);
+ nPlane = pCns116431992Data[nOffset++];
+ if (nPlane != 2)
+ goto bad_input;
+ if (!b116432Designator)
+ {
+ if (pDestBufEnd - pDestBufPtr >= 4)
+ {
+ *pDestBufPtr++ = 0x1B; // ESC
+ *pDestBufPtr++ = 0x24; // $
+ *pDestBufPtr++ = 0x2A; // *
+ *pDestBufPtr++ = 0x48; // H
+ b116432Designator = true;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufEnd - pDestBufPtr >= 4)
+ {
+ *pDestBufPtr++ = 0x1B; // ESC
+ *pDestBufPtr++ = 0x4E; // N
+ *pDestBufPtr++
+ = static_cast< char >(0x20 + pCns116431992Data[nOffset++]);
+ *pDestBufPtr++
+ = static_cast< char >(0x20 + pCns116431992Data[nOffset]);
+ }
+ else
+ goto no_output;
+ }
+ }
+ nHighSurrogate = 0;
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo, "\x0F" /* SI */, bSo ? 1 : 0, &bWritten))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ if (bWritten)
+ bSo = false;
+ nHighSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ if ((nInfo & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0)
+ {
+ bool bFlush = true;
+ if (nHighSurrogate != 0)
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo,
+ "\x0F" /* SI */, bSo ? 1 : 0, &bWritten))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ bFlush = false;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ if (bWritten)
+ bSo = false;
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+ if (bFlush && bSo && (nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0F; // SI
+ bSo = false;
+ }
+ else
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ }
+ }
+
+ if (pContext)
+ {
+ static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_nHighSurrogate
+ = nHighSurrogate;
+ static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_eSoDesignator
+ = eSoDesignator;
+ static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_b116432Designator
+ = b116432Designator;
+ static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_bSo = bSo;
+ }
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtChars)
+ *pSrcCvtChars = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertiso2022cn.hxx b/sal/textenc/convertiso2022cn.hxx
new file mode 100644
index 000000000..e858b9f87
--- /dev/null
+++ b/sal/textenc/convertiso2022cn.hxx
@@ -0,0 +1,73 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTISO2022CN_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTISO2022CN_HXX
+
+#include <sal/config.h>
+#include <sal/types.h>
+#include "tenchelp.hxx"
+
+struct ImplIso2022CnConverterData
+{
+ ImplDBCSToUniLeadTab const * m_pGb2312ToUnicodeData;
+ sal_uInt16 const * m_pCns116431992ToUnicodeData;
+ sal_Int32 const * m_pCns116431992ToUnicodeRowOffsets;
+ sal_Int32 const * m_pCns116431992ToUnicodePlaneOffsets;
+ ImplUniToDBCSHighTab const * m_pUnicodeToGb2312Data;
+ sal_uInt8 const * m_pUnicodeToCns116431992Data;
+ sal_Int32 const * m_pUnicodeToCns116431992PageOffsets;
+ sal_Int32 const * m_pUnicodeToCns116431992PlaneOffsets;
+};
+
+void * ImplCreateIso2022CnToUnicodeContext();
+
+void ImplResetIso2022CnToUnicodeContext(void * pContext);
+
+void ImplDestroyIso2022CnToUnicodeContext(void * pContext);
+
+sal_Size ImplConvertIso2022CnToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes);
+
+void * ImplCreateUnicodeToIso2022CnContext();
+
+void ImplResetUnicodeToIso2022CnContext(void * pContext);
+
+void ImplDestroyUnicodeToIso2022CnContext(void * pContext);
+
+sal_Size ImplConvertUnicodeToIso2022Cn(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertiso2022cn.tab b/sal/textenc/convertiso2022cn.tab
new file mode 100644
index 000000000..14522a658
--- /dev/null
+++ b/sal/textenc/convertiso2022cn.tab
@@ -0,0 +1,59 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textenc.h>
+
+#include "convertiso2022cn.hxx"
+#include "tenchelp.hxx"
+
+ImplIso2022CnConverterData const aImplIso2022CnConvertData
+ = { aGB2312UniLeadTab, /* from tcvtscn6.tab */
+ aImplCns116431992ToUnicodeData, /* from generate/cns116431992.tab */
+ aImplCns116431992ToUnicodeRowOffsets,
+ /* from generate/cns116431992.tab */
+ aImplCns116431992ToUnicodePlaneOffsets,
+ /* from generate/cns116431992.tab */
+ aGB2312DBCSHighTab, /* from tcvtscn6.tab */
+ aImplUnicodeToCns116431992Data, /* from generate/cns116431992.tab */
+ aImplUnicodeToCns116431992PageOffsets,
+ /* from generate/cns116431992.tab */
+ aImplUnicodeToCns116431992PlaneOffsets };
+ /* from generate/cns116431992.tab */
+
+ImplTextEncodingData const aImplIso2022CnTextEncodingData
+ = { { &aImplIso2022CnConvertData,
+ &ImplConvertIso2022CnToUnicode,
+ &ImplConvertUnicodeToIso2022Cn,
+ &ImplCreateIso2022CnToUnicodeContext,
+ &ImplDestroyIso2022CnToUnicodeContext,
+ &ImplResetIso2022CnToUnicodeContext,
+ &ImplCreateUnicodeToIso2022CnContext,
+ &ImplDestroyUnicodeToIso2022CnContext,
+ &ImplResetUnicodeToIso2022CnContext },
+ "euc-cn",
+ "ISO-2022-CN",
+ 1,
+ 8,
+ 2,
+ 134,
+ RTL_TEXTENCODING_INFO_CONTEXT
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
diff --git a/sal/textenc/convertiso2022jp.cxx b/sal/textenc/convertiso2022jp.cxx
new file mode 100644
index 000000000..935bc8515
--- /dev/null
+++ b/sal/textenc/convertiso2022jp.cxx
@@ -0,0 +1,581 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "converter.hxx"
+#include "convertiso2022jp.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+namespace {
+
+enum ImplIso2022JpToUnicodeState // order is important:
+{
+ IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII,
+ IMPL_ISO_2022_JP_TO_UNICODE_STATE_JIS_ROMAN,
+ IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208,
+ IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208_2,
+ IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC,
+ IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_LPAREN,
+ IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_DOLLAR
+};
+
+struct ImplIso2022JpToUnicodeContext
+{
+ ImplIso2022JpToUnicodeState m_eState;
+ sal_uInt32 m_nRow;
+};
+
+struct ImplUnicodeToIso2022JpContext
+{
+ sal_Unicode m_nHighSurrogate;
+ bool m_b0208;
+};
+
+}
+
+void * ImplCreateIso2022JpToUnicodeContext()
+{
+ ImplIso2022JpToUnicodeContext * pContext =
+ new ImplIso2022JpToUnicodeContext;
+ pContext->m_eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII;
+ return pContext;
+}
+
+void ImplResetIso2022JpToUnicodeContext(void * pContext)
+{
+ if (pContext)
+ static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_eState
+ = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII;
+}
+
+void ImplDestroyIso2022JpToUnicodeContext(void * pContext)
+{
+ delete static_cast< ImplIso2022JpToUnicodeContext * >(pContext);
+}
+
+sal_Size ImplConvertIso2022JpToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes)
+{
+ ImplDBCSToUniLeadTab const * pJisX0208Data
+ = static_cast< ImplIso2022JpConverterData const * >(pData)->
+ m_pJisX0208ToUnicodeData;
+ ImplIso2022JpToUnicodeState eState
+ = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII;
+ sal_uInt32 nRow = 0;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ sal_Unicode * pDestBufPtr = pDestBuf;
+ sal_Unicode * pDestBufEnd = pDestBuf + nDestChars;
+ sal_Size startOfCurrentChar = 0;
+
+ if (pContext)
+ {
+ eState = static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_eState;
+ nRow = static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_nRow;
+ }
+
+ for (; nConverted < nSrcBytes; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *reinterpret_cast<unsigned char const *>(pSrcBuf++);
+ switch (eState)
+ {
+ case IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII:
+ if (nChar == 0x1B) // ESC
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC;
+ else if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nChar);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_JP_TO_UNICODE_STATE_JIS_ROMAN:
+ if (nChar == 0x1B) // ESC
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC;
+ else if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ switch (nChar)
+ {
+ case 0x5C: // REVERSE SOLIDUS (\)
+ nChar = 0xA5; // YEN SIGN
+ break;
+
+ case 0x7E: // ~
+ nChar = 0xAF; // MACRON
+ break;
+ }
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nChar);
+ startOfCurrentChar = nConverted + 1;
+ }
+ else
+ goto no_output;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208:
+ if (nChar == 0x1B) // ESC
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC;
+ else if (nChar >= 0x21 && nChar <= 0x7E)
+ {
+ nRow = nChar;
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208_2;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208_2:
+ if (nChar >= 0x21 && nChar <= 0x7E)
+ {
+ sal_uInt16 nUnicode = 0;
+ sal_uInt32 nFirst = pJisX0208Data[nRow].mnTrailStart;
+ if (nChar >= nFirst
+ && nChar <= pJisX0208Data[nRow].mnTrailEnd)
+ nUnicode = pJisX0208Data[nRow].
+ mpToUniTrailTab[nChar - nFirst];
+ if (nUnicode != 0)
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208;
+ startOfCurrentChar = nConverted + 1;
+ }
+ else
+ goto no_output;
+ else
+ goto bad_input;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC:
+ switch (nChar)
+ {
+ case 0x24: // $
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_DOLLAR;
+ break;
+
+ case 0x28: // (
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_LPAREN;
+ break;
+
+ default:
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_LPAREN:
+ switch (nChar)
+ {
+ case 0x42: // B
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII;
+ break;
+
+ case 0x4A: // J
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_JIS_ROMAN;
+ break;
+
+ default:
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_DOLLAR:
+ switch (nChar)
+ {
+ case 0x40: // @
+ case 0x42: // B
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208;
+ break;
+
+ default:
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+ }
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII;
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++nConverted;
+ } else {
+ nConverted = startOfCurrentChar;
+ }
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII;
+ startOfCurrentChar = nConverted + 1;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ if (eState > IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208
+ && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR
+ | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0)
+ nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) {
+ nConverted = startOfCurrentChar;
+ }
+ [[fallthrough]];
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ {
+ static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_eState = eState;
+ static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_nRow = nRow;
+ }
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtBytes)
+ *pSrcCvtBytes = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+void * ImplCreateUnicodeToIso2022JpContext()
+{
+ ImplUnicodeToIso2022JpContext * pContext =
+ new ImplUnicodeToIso2022JpContext;
+ pContext->m_nHighSurrogate = 0;
+ pContext->m_b0208 = false;
+ return pContext;
+}
+
+void ImplResetUnicodeToIso2022JpContext(void * pContext)
+{
+ if (pContext)
+ {
+ static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_nHighSurrogate = 0;
+ static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_b0208 = false;
+ }
+}
+
+void ImplDestroyUnicodeToIso2022JpContext(void * pContext)
+{
+ delete static_cast< ImplUnicodeToIso2022JpContext * >(pContext);
+}
+
+sal_Size ImplConvertUnicodeToIso2022Jp(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars)
+{
+ ImplUniToDBCSHighTab const * pJisX0208Data
+ = static_cast< ImplIso2022JpConverterData const * >(pData)->
+ m_pUnicodeToJisX0208Data;
+ sal_Unicode nHighSurrogate = 0;
+ bool b0208 = false;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ char * pDestBufPtr = pDestBuf;
+ char * pDestBufEnd = pDestBuf + nDestBytes;
+ bool bWritten;
+
+ if (pContext)
+ {
+ nHighSurrogate
+ = static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_nHighSurrogate;
+ b0208 = static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_b0208;
+ }
+
+ for (; nConverted < nSrcChars; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *pSrcBuf++;
+ if (nHighSurrogate == 0)
+ {
+ if (rtl::isHighSurrogate(nChar))
+ {
+ nHighSurrogate = static_cast<sal_Unicode>(nChar);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ nChar = rtl::combineSurrogates(nHighSurrogate, nChar);
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+
+ assert(rtl::isUnicodeScalarValue(nChar));
+
+ if (nChar == 0x0A || nChar == 0x0D) // LF, CR
+ {
+ if (b0208)
+ {
+ if (pDestBufEnd - pDestBufPtr >= 3)
+ {
+ *pDestBufPtr++ = 0x1B; // ESC
+ *pDestBufPtr++ = 0x28; // (
+ *pDestBufPtr++ = 0x42; // B
+ b0208 = false;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ }
+ else if (nChar == 0x1B)
+ goto bad_input;
+ else if (nChar < 0x80)
+ {
+ if (b0208)
+ {
+ if (pDestBufEnd - pDestBufPtr >= 3)
+ {
+ *pDestBufPtr++ = 0x1B; // ESC
+ *pDestBufPtr++ = 0x28; // (
+ *pDestBufPtr++ = 0x42; // B
+ b0208 = false;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ }
+ else
+ {
+ sal_uInt16 nBytes = 0;
+ sal_uInt32 nIndex1 = nChar >> 8;
+ if (nIndex1 < 0x100)
+ {
+ sal_uInt32 nIndex2 = nChar & 0xFF;
+ sal_uInt32 nFirst = pJisX0208Data[nIndex1].mnLowStart;
+ if (nIndex2 >= nFirst
+ && nIndex2 <= pJisX0208Data[nIndex1].mnLowEnd)
+ {
+ nBytes = pJisX0208Data[nIndex1].
+ mpToUniTrailTab[nIndex2 - nFirst];
+ if (nBytes == 0)
+ // For some reason, the tables in tcvtjp4.tab do not
+ // include these two conversions:
+ switch (nChar)
+ {
+ case 0xA5: // YEN SIGN
+ nBytes = 0x216F;
+ break;
+
+ case 0xAF: // MACRON
+ nBytes = 0x2131;
+ break;
+ }
+ }
+ }
+ if (nBytes != 0)
+ {
+ if (!b0208)
+ {
+ if (pDestBufEnd - pDestBufPtr >= 3)
+ {
+ *pDestBufPtr++ = 0x1B; // ESC
+ *pDestBufPtr++ = 0x24; // $
+ *pDestBufPtr++ = 0x42; // B
+ b0208 = true;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufEnd - pDestBufPtr >= 2)
+ {
+ *pDestBufPtr++ = static_cast< char >(nBytes >> 8);
+ *pDestBufPtr++ = static_cast< char >(nBytes & 0xFF);
+ }
+ else
+ goto no_output;
+ }
+ else
+ goto bad_input;
+ }
+ nHighSurrogate = 0;
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo, "\x1B(B", b0208 ? 3 : 0, &bWritten))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ if (bWritten)
+ b0208 = false;
+ nHighSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ if ((nInfo & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0)
+ {
+ bool bFlush = true;
+ if (nHighSurrogate != 0)
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo,
+ "\x1B(B", b0208 ? 3 : 0, &bWritten))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ bFlush = false;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ if (bWritten)
+ b0208 = false;
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+ if (bFlush
+ && b0208
+ && (nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ {
+ if (pDestBufEnd - pDestBufPtr >= 3)
+ {
+ *pDestBufPtr++ = 0x1B; // ESC
+ *pDestBufPtr++ = 0x28; // (
+ *pDestBufPtr++ = 0x42; // B
+ b0208 = false;
+ }
+ else
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ }
+ }
+
+ if (pContext)
+ {
+ static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_nHighSurrogate
+ = nHighSurrogate;
+ static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_b0208 = b0208;
+ }
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtChars)
+ *pSrcCvtChars = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertiso2022jp.hxx b/sal/textenc/convertiso2022jp.hxx
new file mode 100644
index 000000000..fea57bc96
--- /dev/null
+++ b/sal/textenc/convertiso2022jp.hxx
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTISO2022JP_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTISO2022JP_HXX
+
+#include <sal/config.h>
+#include <sal/types.h>
+#include "tenchelp.hxx"
+
+struct ImplIso2022JpConverterData
+{
+ ImplDBCSToUniLeadTab const * m_pJisX0208ToUnicodeData;
+ ImplUniToDBCSHighTab const * m_pUnicodeToJisX0208Data;
+};
+
+void * ImplCreateIso2022JpToUnicodeContext();
+
+void ImplResetIso2022JpToUnicodeContext(void * pContext);
+
+void ImplDestroyIso2022JpToUnicodeContext(void * pContext);
+
+sal_Size ImplConvertIso2022JpToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes);
+
+void * ImplCreateUnicodeToIso2022JpContext();
+
+void ImplResetUnicodeToIso2022JpContext(void * pContext);
+
+void ImplDestroyUnicodeToIso2022JpContext(void * pContext);
+
+sal_Size ImplConvertUnicodeToIso2022Jp(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertiso2022jp.tab b/sal/textenc/convertiso2022jp.tab
new file mode 100644
index 000000000..c455492b8
--- /dev/null
+++ b/sal/textenc/convertiso2022jp.tab
@@ -0,0 +1,50 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textenc.h>
+
+#include "convertiso2022jp.hxx"
+#include "tenchelp.hxx"
+
+ImplIso2022JpConverterData const aImplIso2022JpConvertData
+ = { aJIS0208UniLeadTab, /* from tcvtjp6.tab */
+ aJIS0208DBCSHighTab }; /* from tcvtjp6.tab */
+
+ImplTextEncodingData const aImplIso2022JpTextEncodingData
+ = { { &aImplIso2022JpConvertData,
+ &ImplConvertIso2022JpToUnicode,
+ &ImplConvertUnicodeToIso2022Jp,
+ &ImplCreateIso2022JpToUnicodeContext,
+ &ImplDestroyIso2022JpToUnicodeContext,
+ &ImplResetIso2022JpToUnicodeContext,
+ &ImplCreateUnicodeToIso2022JpContext,
+ &ImplDestroyUnicodeToIso2022JpContext,
+ &ImplResetUnicodeToIso2022JpContext },
+ "euc-jp",
+ "ISO-2022-JP",
+ 1,
+ 8,
+ 2,
+ 128,
+ RTL_TEXTENCODING_INFO_CONTEXT
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_JAPANESE */
diff --git a/sal/textenc/convertiso2022kr.cxx b/sal/textenc/convertiso2022kr.cxx
new file mode 100644
index 000000000..5aea5c66c
--- /dev/null
+++ b/sal/textenc/convertiso2022kr.cxx
@@ -0,0 +1,541 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "converter.hxx"
+#include "convertiso2022kr.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+namespace {
+
+enum ImplIso2022KrToUnicodeState // order is important:
+{
+ IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII,
+ IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001,
+ IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001_2,
+ IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC,
+ IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR,
+ IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN
+};
+
+struct ImplIso2022KrToUnicodeContext
+{
+ ImplIso2022KrToUnicodeState m_eState;
+ sal_uInt32 m_nRow;
+};
+
+enum ImplUnicodeToIso2022KrSet
+{
+ IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE,
+ IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII,
+ IMPL_UNICODE_TO_ISO_2022_KR_SET_1001
+};
+
+struct ImplUnicodeToIso2022KrContext
+{
+ sal_Unicode m_nHighSurrogate;
+ ImplUnicodeToIso2022KrSet m_eSet;
+};
+
+}
+
+void * ImplCreateIso2022KrToUnicodeContext()
+{
+ ImplIso2022KrToUnicodeContext * pContext =
+ new ImplIso2022KrToUnicodeContext;
+ pContext->m_eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII;
+ return pContext;
+}
+
+void ImplResetIso2022KrToUnicodeContext(void * pContext)
+{
+ if (pContext)
+ static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_eState
+ = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII;
+}
+
+void ImplDestroyIso2022KrToUnicodeContext(void * pContext)
+{
+ delete static_cast< ImplIso2022KrToUnicodeContext * >(pContext);
+}
+
+sal_Size ImplConvertIso2022KrToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes)
+{
+ ImplDBCSToUniLeadTab const * pKsX1001Data
+ = static_cast< ImplIso2022KrConverterData const * >(pData)->
+ m_pKsX1001ToUnicodeData;
+ ImplIso2022KrToUnicodeState eState
+ = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII;
+ sal_uInt32 nRow = 0;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ sal_Unicode * pDestBufPtr = pDestBuf;
+ sal_Unicode * pDestBufEnd = pDestBuf + nDestChars;
+ sal_Size startOfCurrentChar = 0;
+
+ if (pContext)
+ {
+ eState = static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_eState;
+ nRow = static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_nRow;
+ }
+
+ for (; nConverted < nSrcBytes; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *reinterpret_cast<unsigned char const *>(pSrcBuf++);
+ switch (eState)
+ {
+ case IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII:
+ if (nChar == 0x0E) // SO
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001;
+ else if (nChar == 0x1B) // ESC
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC;
+ else if (nChar < 0x80)
+ if (pDestBufPtr != pDestBufEnd) {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nChar);
+ startOfCurrentChar = nConverted + 1;
+ } else
+ goto no_output;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001:
+ if (nChar == 0x0F) // SI
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII;
+ else if (nChar >= 0x21 && nChar <= 0x7E)
+ {
+ nRow = nChar + 0x80;
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001_2;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001_2:
+ if (nChar >= 0x21 && nChar <= 0x7E)
+ {
+ sal_uInt16 nUnicode = 0;
+ sal_uInt32 nFirst = pKsX1001Data[nRow].mnTrailStart;
+ nChar += 0x80;
+ if (nChar >= nFirst && nChar <= pKsX1001Data[nRow].mnTrailEnd)
+ nUnicode = pKsX1001Data[nRow].
+ mpToUniTrailTab[nChar - nFirst];
+ if (nUnicode != 0)
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUnicode);
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001;
+ startOfCurrentChar = nConverted + 1;
+ }
+ else
+ goto no_output;
+ else
+ goto bad_input;
+ }
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC:
+ if (nChar == 0x24) // $
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR:
+ if (nChar == 0x29) // )
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+
+ case IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN:
+ if (nChar == 0x43) // C
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII;
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ break;
+ }
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII;
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++nConverted;
+ } else {
+ nConverted = startOfCurrentChar;
+ }
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII;
+ startOfCurrentChar = nConverted + 1;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ if (eState > IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001
+ && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR
+ | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0)
+ nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) {
+ nConverted = startOfCurrentChar;
+ }
+ [[fallthrough]];
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ }
+
+ if (pContext)
+ {
+ static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_eState = eState;
+ static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_nRow = nRow;
+ }
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtBytes)
+ *pSrcCvtBytes = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+void * ImplCreateUnicodeToIso2022KrContext()
+{
+ ImplUnicodeToIso2022KrContext * pContext =
+ new ImplUnicodeToIso2022KrContext;
+ pContext->m_nHighSurrogate = 0;
+ pContext->m_eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE;
+ return pContext;
+}
+
+void ImplResetUnicodeToIso2022KrContext(void * pContext)
+{
+ if (pContext)
+ {
+ static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_nHighSurrogate = 0;
+ static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_eSet
+ = IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE;
+ }
+}
+
+void ImplDestroyUnicodeToIso2022KrContext(void * pContext)
+{
+ delete static_cast< ImplUnicodeToIso2022KrContext * >(pContext);
+}
+
+sal_Size ImplConvertUnicodeToIso2022Kr(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars)
+{
+ ImplUniToDBCSHighTab const * pKsX1001Data
+ = static_cast< ImplIso2022KrConverterData const * >(pData)->
+ m_pUnicodeToKsX1001Data;
+ sal_Unicode nHighSurrogate = 0;
+ ImplUnicodeToIso2022KrSet eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE;
+ sal_uInt32 nInfo = 0;
+ sal_Size nConverted = 0;
+ char * pDestBufPtr = pDestBuf;
+ char * pDestBufEnd = pDestBuf + nDestBytes;
+ bool bWritten;
+
+ if (pContext)
+ {
+ nHighSurrogate
+ = static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_nHighSurrogate;
+ eSet = static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_eSet;
+ }
+
+ if (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE)
+ {
+ if (pDestBufEnd - pDestBufPtr >= 4)
+ {
+ *pDestBufPtr++ = 0x1B; // ESC
+ *pDestBufPtr++ = 0x24; // $
+ *pDestBufPtr++ = 0x29; // )
+ *pDestBufPtr++ = 0x43; // C
+ eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII;
+ }
+ else
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ }
+
+ if ((nInfo & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0)
+ for (; nConverted < nSrcChars; ++nConverted)
+ {
+ bool bUndefined = true;
+ sal_uInt32 nChar = *pSrcBuf++;
+ if (nHighSurrogate == 0)
+ {
+ if (rtl::isHighSurrogate(nChar))
+ {
+ nHighSurrogate = static_cast<sal_Unicode>(nChar);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+ }
+ else if (rtl::isLowSurrogate(nChar))
+ nChar = rtl::combineSurrogates(nHighSurrogate, nChar);
+ else
+ {
+ bUndefined = false;
+ goto bad_input;
+ }
+
+ assert(rtl::isUnicodeScalarValue(nChar));
+
+ if (nChar == 0x0A || nChar == 0x0D) // LF, CR
+ {
+ if (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_1001)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0F; // SI
+ eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ }
+ else if (nChar == 0x0E || nChar == 0x0F || nChar == 0x1B)
+ goto bad_input;
+ else if (nChar < 0x80)
+ {
+ if (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_1001)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0F; // SI
+ eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ }
+ else
+ {
+ sal_uInt16 nBytes = 0;
+ sal_uInt32 nIndex1 = nChar >> 8;
+ if (nIndex1 < 0x100)
+ {
+ sal_uInt32 nIndex2 = nChar & 0xFF;
+ sal_uInt32 nFirst = pKsX1001Data[nIndex1].mnLowStart;
+ if (nIndex2 >= nFirst
+ && nIndex2 <= pKsX1001Data[nIndex1].mnLowEnd)
+ nBytes = pKsX1001Data[nIndex1].
+ mpToUniTrailTab[nIndex2 - nFirst];
+ }
+ if (nBytes != 0)
+ {
+ if (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0E; // SO
+ eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_1001;
+ }
+ else
+ goto no_output;
+ }
+ if (pDestBufEnd - pDestBufPtr >= 2)
+ {
+ *pDestBufPtr++ = static_cast< char >((nBytes >> 8) & 0x7F);
+ *pDestBufPtr++ = static_cast< char >(nBytes & 0x7F);
+ }
+ else
+ goto no_output;
+ }
+ else
+ goto bad_input;
+ }
+ nHighSurrogate = 0;
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo, "\x0F" /* SI */,
+ eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII ? 0 : 1,
+ &bWritten))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ if (bWritten)
+ eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII;
+ nHighSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBuf;
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ if ((nInfo & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0)
+ {
+ bool bFlush = true;
+ if (nHighSurrogate != 0)
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo,
+ "\x0F" /* SI */,
+ (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII
+ ? 0 : 1),
+ &bWritten))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ bFlush = false;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ if (bWritten)
+ eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII;
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+ if (bFlush
+ && eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_1001
+ && (nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ {
+ if (pDestBufPtr != pDestBufEnd)
+ {
+ *pDestBufPtr++ = 0x0F; // SI
+ eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII;
+ }
+ else
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ }
+ }
+
+ if (pContext)
+ {
+ static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_nHighSurrogate
+ = nHighSurrogate;
+ static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_eSet = eSet;
+ }
+ if (pInfo)
+ *pInfo = nInfo;
+ if (pSrcCvtChars)
+ *pSrcCvtChars = nConverted;
+
+ return pDestBufPtr - pDestBuf;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertiso2022kr.hxx b/sal/textenc/convertiso2022kr.hxx
new file mode 100644
index 000000000..3e153d5b8
--- /dev/null
+++ b/sal/textenc/convertiso2022kr.hxx
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTISO2022KR_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTISO2022KR_HXX
+
+#include <sal/config.h>
+#include <sal/types.h>
+#include "tenchelp.hxx"
+
+struct ImplIso2022KrConverterData
+{
+ ImplDBCSToUniLeadTab const * m_pKsX1001ToUnicodeData;
+ ImplUniToDBCSHighTab const * m_pUnicodeToKsX1001Data;
+};
+
+void * ImplCreateIso2022KrToUnicodeContext();
+
+void ImplResetIso2022KrToUnicodeContext(void * pContext);
+
+void ImplDestroyIso2022KrToUnicodeContext(void * pContext);
+
+sal_Size ImplConvertIso2022KrToUnicode(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes);
+
+void * ImplCreateUnicodeToIso2022KrContext();
+
+void ImplResetUnicodeToIso2022KrContext(void * pContext);
+
+void ImplDestroyUnicodeToIso2022KrContext(void * pContext);
+
+sal_Size ImplConvertUnicodeToIso2022Kr(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertiso2022kr.tab b/sal/textenc/convertiso2022kr.tab
new file mode 100644
index 000000000..8b139f6e8
--- /dev/null
+++ b/sal/textenc/convertiso2022kr.tab
@@ -0,0 +1,50 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textenc.h>
+
+#include "convertiso2022kr.hxx"
+#include "tenchelp.hxx"
+
+ImplIso2022KrConverterData const aImplIso2022KrConvertData
+ = { aKSC5601UniLeadTab, /* from tcvtkr6.tab */
+ aKSC5601DBCSHighTab }; /* from tcvtkr6.tab */
+
+ImplTextEncodingData const aImplIso2022KrTextEncodingData
+ = { { &aImplIso2022KrConvertData,
+ &ImplConvertIso2022KrToUnicode,
+ &ImplConvertUnicodeToIso2022Kr,
+ &ImplCreateIso2022KrToUnicodeContext,
+ &ImplDestroyIso2022KrToUnicodeContext,
+ &ImplResetIso2022KrToUnicodeContext,
+ &ImplCreateUnicodeToIso2022KrContext,
+ &ImplDestroyUnicodeToIso2022KrContext,
+ &ImplResetUnicodeToIso2022KrContext },
+ "euc-kr",
+ "ISO-2022-KR",
+ 1,
+ 8,
+ 2,
+ 130,
+ RTL_TEXTENCODING_INFO_CONTEXT
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_KOREAN */
diff --git a/sal/textenc/convertsimple.cxx b/sal/textenc/convertsimple.cxx
new file mode 100644
index 000000000..2738acc13
--- /dev/null
+++ b/sal/textenc/convertsimple.cxx
@@ -0,0 +1,665 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "convertsimple.hxx"
+#include "handleundefinedunicodetotextchar.hxx"
+#include "tenchelp.hxx"
+
+#define IMPL_MAX_REPLACECHAR 5
+
+namespace {
+
+struct ImplReplaceCharData
+{
+ sal_uInt16 mnUniChar;
+ sal_uInt16 mnReplaceChar;
+};
+
+ImplReplaceCharData const aImplRepCharTab[] =
+{
+ { 0x00A0, 0x0020 }, /* NO-BREAK-SPACE */
+ { 0x00A1, 0x0021 }, /* INVERTED EXCLAMATION MARK */
+ { 0x00B7, 0x0045 }, /* MIDDLE DOT */
+ { 0x00BF, 0x003F }, /* INVERTED QUESTION MARK */
+ { 0x00D7, 0x002A }, /* MULTIPLICATION SIGN */
+ { 0x00F7, 0x002F }, /* DIVISION SIGN */
+ { 0x2000, 0x0020 }, /* EN QUAD */
+ { 0x2001, 0x0020 }, /* EM QUAD */
+ { 0x2002, 0x0020 }, /* EN SPACE */
+ { 0x2003, 0x0020 }, /* EM SPACE */
+ { 0x2004, 0x0020 }, /* THREE-PER-EM SPACE */
+ { 0x2005, 0x0020 }, /* FOUR-PER-EM SPACE */
+ { 0x2006, 0x0020 }, /* SIX-PER-EM SPACE */
+ { 0x2007, 0x0020 }, /* FIGURE SPACE */
+ { 0x2008, 0x0020 }, /* PUNCTUATION SPACE */
+ { 0x2009, 0x0020 }, /* THIN SPACE */
+ { 0x200A, 0x0020 }, /* HAIR SPACE */
+ { 0x2010, 0x002D }, /* HYPHEN */
+ { 0x2011, 0x002D }, /* NON-BREAKING HYPHEN */
+ { 0x2012, 0x002D }, /* FIGURE DASH */
+ { 0x2013, 0x002D }, /* EN DASH */
+ { 0x2014, 0x002D }, /* EM DASH */
+ { 0x2015, 0x002D }, /* HORIZONTAL BAR */
+ { 0x2018, 0x0027 }, /* LEFT SINGLE QUOTATION MARK */
+ { 0x2019, 0x0027 }, /* RIGHT SINGLE QUOTATION MARK */
+ { 0x201A, 0x002C }, /* SINGLE LOW-9 QUOTATION MARK */
+ { 0x201B, 0x0027 }, /* SINGLE HIGH-RESERVED-9 QUOTATION MARK */
+ { 0x201C, 0x0022 }, /* LEFT DOUBLE QUOTATION MARK */
+ { 0x201D, 0x0022 }, /* RIGHT DOUBLE QUOTATION MARK */
+ { 0x201E, 0x0022 }, /* DOUBLE LOW-9 QUOTATION MARK */
+ { 0x201F, 0x0022 }, /* DOUBLE HIGH-RESERVED-9 QUOTATION MARK */
+ { 0x2022, 0x002D }, /* BULLET */
+ { 0x2023, 0x002D }, /* TRIANGULAR BULLET */
+ { 0x2024, 0x002D }, /* ONE DOT LEADER */
+ { 0x2027, 0x002D }, /* HYPHENATION POINT */
+ { 0x2028, 0x000A }, /* LINE SEPARATOR */
+ { 0x2029, 0x000D }, /* PARAGRAPH SEPARATOR */
+ { 0x2032, 0x0027 }, /* PRIME */
+ { 0x2033, 0x0022 }, /* DOUBLE PRIME */
+ { 0x2035, 0x0027 }, /* RESERVED PRIME */
+ { 0x2036, 0x0022 }, /* RESERVED DOUBLE PRIME */
+ { 0x2039, 0x003C }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
+ { 0x203A, 0x003E }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
+ { 0x2043, 0x002D }, /* HYPHEN BULLET */
+ { 0x2044, 0x002F }, /* FRACTION SLASH */
+ { 0x2160, 0x0049 }, /* ROMAN NUMERAL ONE */
+ { 0x2164, 0x0056 }, /* ROMAN NUMERAL FIVE */
+ { 0x2169, 0x0058 }, /* ROMAN NUMERAL TEN */
+ { 0x216C, 0x004C }, /* ROMAN NUMERAL FIFTY */
+ { 0x216D, 0x0043 }, /* ROMAN NUMERAL ONE HUNDRED */
+ { 0x216E, 0x0044 }, /* ROMAN NUMERAL FIVE HUNDRED */
+ { 0x216F, 0x004D }, /* ROMAN NUMERAL ONE THOUSAND */
+ { 0x2170, 0x0069 }, /* SMALL ROMAN NUMERAL ONE */
+ { 0x2174, 0x0076 }, /* SMALL ROMAN NUMERAL FIVE */
+ { 0x2179, 0x0078 }, /* SMALL ROMAN NUMERAL TEN */
+ { 0x217C, 0x006C }, /* SMALL ROMAN NUMERAL FIFTY */
+ { 0x217D, 0x0063 }, /* SMALL ROMAN NUMERAL ONE HUNDRED */
+ { 0x217E, 0x0064 }, /* SMALL ROMAN NUMERAL FIVE HUNDRED */
+ { 0x217F, 0x006D }, /* SMALL ROMAN NUMERAL ONE THOUSAND */
+ { 0x2215, 0x002F }, /* DIVISION SLASH */
+ { 0x2217, 0x002A }, /* ASTERISK OPERATOR */
+ { 0xFF00, 0x0020 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF01, 0x0021 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF02, 0x0022 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF03, 0x0023 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF04, 0x0024 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF05, 0x0025 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF06, 0x0026 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF07, 0x0027 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF08, 0x0028 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF09, 0x0029 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF0A, 0x002A }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF0B, 0x002B }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF0C, 0x002C }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF0D, 0x002D }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF0E, 0x002E }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF0F, 0x002F }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF10, 0x0030 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF11, 0x0031 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF12, 0x0032 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF13, 0x0033 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF14, 0x0034 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF15, 0x0035 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF16, 0x0036 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF17, 0x0037 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF18, 0x0038 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF19, 0x0039 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF1A, 0x003A }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF1B, 0x003B }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF1C, 0x003C }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF1D, 0x003D }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF1E, 0x003E }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF1F, 0x003F }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF20, 0x0040 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF21, 0x0041 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF22, 0x0042 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF23, 0x0043 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF24, 0x0044 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF25, 0x0045 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF26, 0x0046 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF27, 0x0047 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF28, 0x0048 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF29, 0x0049 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF2A, 0x004A }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF2B, 0x004B }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF2C, 0x004C }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF2D, 0x004D }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF2E, 0x004E }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF2F, 0x004F }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF30, 0x0050 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF31, 0x0051 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF32, 0x0052 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF33, 0x0053 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF34, 0x0054 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF35, 0x0055 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF36, 0x0056 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF37, 0x0057 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF38, 0x0058 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF39, 0x0059 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF3A, 0x005A }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF3B, 0x005B }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF3C, 0x005C }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF3D, 0x005D }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF3E, 0x005E }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF3F, 0x005F }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF40, 0x0060 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF41, 0x0061 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF42, 0x0062 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF43, 0x0063 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF44, 0x0064 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF45, 0x0065 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF46, 0x0066 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF47, 0x0067 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF48, 0x0068 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF49, 0x0069 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF4A, 0x006A }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF4B, 0x006B }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF4C, 0x006C }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF4D, 0x006D }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF4E, 0x006E }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF4F, 0x006F }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF50, 0x0070 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF51, 0x0071 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF52, 0x0072 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF53, 0x0073 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF54, 0x0074 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF55, 0x0075 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF56, 0x0076 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF57, 0x0077 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF58, 0x0078 }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF59, 0x0079 }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF5A, 0x007A }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF5B, 0x007B }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF5C, 0x007C }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF5D, 0x007D }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF5E, 0x007E }, /* FULLWIDTH ASCII FORMS*/
+ { 0xFF5F, 0x007F }, /* FULLWIDTH ASCII FORMS */
+ { 0xFF61, 0x3002 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF62, 0x300C }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF63, 0x300D }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF64, 0x3001 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF65, 0x30FB }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF66, 0x30F2 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF67, 0x30A1 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF68, 0x30A3 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF69, 0x30A5 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF6A, 0x30A7 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF6B, 0x30A9 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF6C, 0x30E3 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF6D, 0x30E5 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF6E, 0x30E7 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF6F, 0x30C3 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF70, 0x30FC }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF71, 0x30A2 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF72, 0x30A4 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF73, 0x30A6 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF74, 0x30A8 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF75, 0x30AA }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF76, 0x30AB }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF77, 0x30AD }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF78, 0x30AF }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF79, 0x30B1 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF7A, 0x30B3 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF7B, 0x30B5 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF7C, 0x30B7 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF7D, 0x30B9 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF7E, 0x30BB }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF7F, 0x30BD }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF80, 0x30BF }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF81, 0x30C1 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF82, 0x30C4 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF83, 0x30C6 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF84, 0x30C8 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF85, 0x30CA }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF86, 0x30CB }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF87, 0x30CC }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF88, 0x30CD }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF89, 0x30CE }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF8A, 0x30CF }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF8B, 0x30D2 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF8C, 0x30D5 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF8D, 0x30D8 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF8E, 0x30DB }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF8F, 0x30DE }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF90, 0x30DF }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF91, 0x30E0 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF92, 0x30E1 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF93, 0x30E2 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF94, 0x30E4 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF95, 0x30E6 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF96, 0x30E8 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF97, 0x30E9 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF98, 0x30EA }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF99, 0x30EB }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF9A, 0x30EC }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF9B, 0x30ED }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF9C, 0x30EF }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF9D, 0x30F3 }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF9E, 0x309B }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFF9F, 0x309C }, /* HALFWIDTH KATAKANA FORMS */
+ { 0xFFA0, 0x3164 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA1, 0x3131 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA2, 0x3132 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA3, 0x3133 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA4, 0x3134 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA5, 0x3135 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA6, 0x3136 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA7, 0x3137 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA8, 0x3138 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFA9, 0x3139 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFAA, 0x313A }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFAB, 0x313B }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFAC, 0x313C }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFAD, 0x313D }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFAE, 0x313E }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFAF, 0x313F }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB0, 0x3140 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB1, 0x3141 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB2, 0x3142 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB3, 0x3143 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB4, 0x3144 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB5, 0x3145 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB6, 0x3146 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB7, 0x3147 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB8, 0x3148 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFB9, 0x3149 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFBA, 0x314A }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFBB, 0x314B }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFBC, 0x314C }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFBD, 0x314D }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFBE, 0x314E }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFC2, 0x314F }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFC3, 0x3150 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFC4, 0x3151 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFC5, 0x3152 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFC6, 0x3153 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFC7, 0x3154 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFCA, 0x3155 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFCB, 0x3156 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFCC, 0x3157 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFCD, 0x3158 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFCE, 0x3159 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFCF, 0x315A }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFD2, 0x315B }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFD3, 0x315C }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFD4, 0x315D }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFD5, 0x315E }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFD6, 0x315F }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFD7, 0x3160 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFDA, 0x3161 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFDB, 0x3162 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFDC, 0x3163 }, /* HALFWIDTH HANGUL FORMS */
+ { 0xFFE0, 0x00A2 }, /* FULLWIDTH CENT SIGN */
+ { 0xFFE1, 0x00A3 }, /* FULLWIDTH POUND SIGN */
+ { 0xFFE2, 0x00AC }, /* FULLWIDTH NOT SIGN */
+ { 0xFFE3, 0x00AF }, /* FULLWIDTH MACRON */
+ { 0xFFE4, 0x00A6 }, /* FULLWIDTH BROKEN BAR */
+ { 0xFFE5, 0x00A5 }, /* FULLWIDTH YEN SIGN */
+ { 0xFFE6, 0x20A9 }, /* FULLWIDTH WON SIGN */
+ { 0xFFE8, 0x2502 }, /* HALFWIDTH FORMS LIGHT VERTICAL */
+ { 0xFFE9, 0x2190 }, /* HALFWIDTH LEFTWARDS ARROW */
+ { 0xFFEA, 0x2191 }, /* HALFWIDTH UPWARDS ARROW */
+ { 0xFFEB, 0x2192 }, /* HALFWIDTH RIGHTWARDS ARROW */
+ { 0xFFEC, 0x2193 }, /* HALFWIDTH DOWNWARDS ARROW */
+ { 0xFFED, 0x25A0 }, /* HALFWIDTH BLACK SQUARE */
+ { 0xFFEE, 0x25CB }, /* HALFWIDTH WHITE CIRCLE */
+ { 0xFFFD, 0x003F } /* REPLACEMENT CHARACTER */
+};
+
+sal_uInt16 ImplGetReplaceChar( sal_Unicode c )
+{
+ sal_uInt16 nLow;
+ sal_uInt16 nHigh;
+ sal_uInt16 nMid;
+ sal_uInt16 nCompareChar;
+ const ImplReplaceCharData* pCharData;
+
+ nLow = 0;
+ nHigh = SAL_N_ELEMENTS( aImplRepCharTab ) - 1;
+ do
+ {
+ nMid = (nLow+nHigh)/2;
+ pCharData = aImplRepCharTab+nMid;
+ nCompareChar = pCharData->mnUniChar;
+ if ( c < nCompareChar )
+ {
+ if ( !nMid )
+ break;
+ nHigh = nMid-1;
+ }
+ else
+ {
+ if ( c > nCompareChar )
+ nLow = nMid+1;
+ else
+ return pCharData->mnReplaceChar;
+ }
+ }
+ while ( nLow <= nHigh );
+
+ return 0;
+}
+
+struct ImplReplaceCharStrData
+{
+ sal_uInt16 mnUniChar;
+ sal_uInt16 maReplaceChars[IMPL_MAX_REPLACECHAR];
+};
+
+ImplReplaceCharStrData const aImplRepCharStrTab[] =
+{
+ { 0x00A9, { 0x0028, 0x0063, 0x0029, 0x0000, 0x0000 } }, /* COPYRIGHT SIGN */
+ { 0x00AB, { 0x003C, 0x003C, 0x0000, 0x0000, 0x0000 } }, /* LEFT-POINTING-DOUBLE ANGLE QUOTATION MARK */
+ { 0x0AE0, { 0x0028, 0x0072, 0x0029, 0x0000, 0x0000 } }, /* REGISTERED SIGN */
+ { 0x00BB, { 0x003E, 0x003E, 0x0000, 0x0000, 0x0000 } }, /* RIGHT-POINTING-DOUBLE ANGLE QUOTATION MARK */
+ { 0x00BC, { 0x0031, 0x002F, 0x0034, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE QUARTER */
+ { 0x00BD, { 0x0031, 0x002F, 0x0032, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE HALF */
+ { 0x00BE, { 0x0033, 0x002F, 0x0034, 0x0000, 0x0000 } }, /* VULGAR FRACTION THREE QUARTERS */
+ { 0x00C6, { 0x0041, 0x0045, 0x0000, 0x0000, 0x0000 } }, /* LATIN CAPITAL LETTER AE */
+ { 0x00E6, { 0x0061, 0x0065, 0x0000, 0x0000, 0x0000 } }, /* LATIN SMALL LETTER AE */
+ { 0x0152, { 0x004F, 0x0045, 0x0000, 0x0000, 0x0000 } }, /* LATIN CAPITAL LIGATURE OE */
+ { 0x0153, { 0x006F, 0x0065, 0x0000, 0x0000, 0x0000 } }, /* LATIN SMALL LIGATURE OE */
+ { 0x2025, { 0x002E, 0x002E, 0x0000, 0x0000, 0x0000 } }, /* TWO DOT LEADER */
+ { 0x2026, { 0x002E, 0x002E, 0x002E, 0x0000, 0x0000 } }, /* HORIZONTAL ELLIPSES */
+ { 0x2034, { 0x0027, 0x0027, 0x0027, 0x0000, 0x0000 } }, /* TRIPLE PRIME */
+ { 0x2037, { 0x0027, 0x0027, 0x0027, 0x0000, 0x0000 } }, /* REVERSED TRIPLE PRIME */
+ { 0x20AC, { 0x0045, 0x0055, 0x0052, 0x0000, 0x0000 } }, /* EURO SIGN */
+ { 0x2122, { 0x0028, 0x0074, 0x006D, 0x0029, 0x0000 } }, /* TRADE MARK SIGN */
+ { 0x2153, { 0x0031, 0x002F, 0x0033, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE THIRD */
+ { 0x2154, { 0x0032, 0x002F, 0x0033, 0x0000, 0x0000 } }, /* VULGAR FRACTION TWO THIRD */
+ { 0x2155, { 0x0031, 0x002F, 0x0035, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE FIFTH */
+ { 0x2156, { 0x0032, 0x002F, 0x0035, 0x0000, 0x0000 } }, /* VULGAR FRACTION TWO FIFTH */
+ { 0x2157, { 0x0033, 0x002F, 0x0035, 0x0000, 0x0000 } }, /* VULGAR FRACTION THREE FIFTH */
+ { 0x2158, { 0x0034, 0x002F, 0x0035, 0x0000, 0x0000 } }, /* VULGAR FRACTION FOUR FIFTH */
+ { 0x2159, { 0x0031, 0x002F, 0x0036, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE SIXTH */
+ { 0x215A, { 0x0035, 0x002F, 0x0036, 0x0000, 0x0000 } }, /* VULGAR FRACTION FIVE SIXTH */
+ { 0x215B, { 0x0031, 0x002F, 0x0038, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE EIGHTH */
+ { 0x215C, { 0x0033, 0x002F, 0x0038, 0x0000, 0x0000 } }, /* VULGAR FRACTION THREE EIGHTH */
+ { 0x215D, { 0x0035, 0x002F, 0x0038, 0x0000, 0x0000 } }, /* VULGAR FRACTION FIVE EIGHTH */
+ { 0x215E, { 0x0037, 0x002F, 0x0038, 0x0000, 0x0000 } }, /* VULGAR FRACTION SEVEN EIGHTH */
+ { 0x215F, { 0x0031, 0x002F, 0x0000, 0x0000, 0x0000 } }, /* FRACTION NUMERATOR ONE */
+ { 0x2161, { 0x0049, 0x0049, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL TWO */
+ { 0x2162, { 0x0049, 0x0049, 0x0049, 0x0000, 0x0000 } }, /* ROMAN NUMERAL THREE */
+ { 0x2163, { 0x0049, 0x0056, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL FOUR */
+ { 0x2165, { 0x0056, 0x0049, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL SIX */
+ { 0x2166, { 0x0056, 0x0049, 0x0049, 0x0000, 0x0000 } }, /* ROMAN NUMERAL SEVEN */
+ { 0x2168, { 0x0056, 0x0049, 0x0049, 0x0049, 0x0000 } }, /* ROMAN NUMERAL EIGHT */
+ { 0x2169, { 0x0049, 0x0058, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL NINE */
+ { 0x216A, { 0x0058, 0x0049, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL ELEVEN */
+ { 0x216B, { 0x0058, 0x0049, 0x0049, 0x0000, 0x0000 } }, /* ROMAN NUMERAL TWELVE */
+ { 0x2171, { 0x0069, 0x0069, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL TWO */
+ { 0x2172, { 0x0069, 0x0069, 0x0069, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL THREE */
+ { 0x2173, { 0x0069, 0x0076, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL FOUR */
+ { 0x2175, { 0x0076, 0x0069, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL SIX */
+ { 0x2176, { 0x0076, 0x0069, 0x0069, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL SEVEN */
+ { 0x2178, { 0x0076, 0x0069, 0x0069, 0x0069, 0x0000 } }, /* SMALL ROMAN NUMERAL EIGHT */
+ { 0x2179, { 0x0069, 0x0078, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL NINE */
+ { 0x217A, { 0x0078, 0x0069, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL ELEVEN */
+ { 0x217B, { 0x0058, 0x0069, 0x0069, 0x0000, 0x0000 } } /* SMALL ROMAN NUMERAL TWELVE */
+};
+
+const sal_uInt16* ImplGetReplaceString( sal_Unicode c )
+{
+ sal_uInt16 nLow;
+ sal_uInt16 nHigh;
+ sal_uInt16 nMid;
+ sal_uInt16 nCompareChar;
+ const ImplReplaceCharStrData* pCharData;
+
+ nLow = 0;
+ nHigh = SAL_N_ELEMENTS( aImplRepCharStrTab ) - 1;
+ do
+ {
+ nMid = (nLow+nHigh)/2;
+ pCharData = aImplRepCharStrTab+nMid;
+ nCompareChar = pCharData->mnUniChar;
+ if ( c < nCompareChar )
+ {
+ if ( !nMid )
+ break;
+ nHigh = nMid-1;
+ }
+ else
+ {
+ if ( c > nCompareChar )
+ nLow = nMid+1;
+ else
+ return pCharData->maReplaceChars;
+ }
+ }
+ while ( nLow <= nHigh );
+
+ return nullptr;
+}
+
+// Writes 0--2 characters to dest:
+int ImplConvertUnicodeCharToChar(
+ const ImplByteConvertData* pConvertData, sal_Unicode c, char * dest )
+{
+ const ImplUniCharTabData* pToCharExTab;
+
+ if ( c < 0x80 )
+ {
+ dest[0] = static_cast< char >(c);
+ return 1;
+ }
+ if ( (c >= pConvertData->mnToCharStart1) && (c <= pConvertData->mnToCharEnd1) )
+ {
+ dest[0] = static_cast< char >(pConvertData->mpToCharTab1[c-pConvertData->mnToCharStart1]);
+ if ( dest[0] != 0 )
+ return 1;
+ }
+ else if ( (c >= pConvertData->mnToCharStart2) && (c <= pConvertData->mnToCharEnd2) )
+ {
+ dest[0] = static_cast< char >(pConvertData->mpToCharTab2[c-pConvertData->mnToCharStart2]);
+ if ( dest[0] != 0 )
+ return 1;
+ }
+ pToCharExTab = pConvertData->mpToCharExTab;
+ if ( pToCharExTab )
+ {
+ sal_uInt16 nLow;
+ sal_uInt16 nHigh;
+ sal_uInt16 nMid;
+ sal_uInt16 nCompareChar;
+ const ImplUniCharTabData* pCharExData;
+
+ nLow = 0;
+ nHigh = pConvertData->mnToCharExCount-1;
+ do
+ {
+ nMid = (nLow+nHigh)/2;
+ pCharExData = pToCharExTab+nMid;
+ nCompareChar = pCharExData->mnUniChar;
+ if ( c < nCompareChar )
+ {
+ if ( !nMid )
+ break;
+ nHigh = nMid-1;
+ }
+ else
+ {
+ if ( c > nCompareChar )
+ nLow = nMid+1;
+ else
+ {
+ dest[0] = static_cast< char >(pCharExData->mnChar);
+ if ( pCharExData->mnChar2 == 0 )
+ return 1;
+ dest[1] = static_cast< char >(pCharExData->mnChar2);
+ return 2;
+ }
+ }
+ }
+ while ( nLow <= nHigh );
+ }
+ return 0;
+}
+
+}
+
+sal_Size sal::detail::textenc::convertCharToUnicode(
+ void const * pData, SAL_UNUSED_PARAMETER void *, char const * pSrcBuf,
+ sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes)
+{
+ sal_Unicode cConv;
+ const ImplByteConvertData* pConvertData = static_cast<const ImplByteConvertData*>(pData);
+ sal_Unicode* pEndDestBuf;
+ const char* pEndSrcBuf;
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestChars;
+ pEndSrcBuf = pSrcBuf+nSrcBytes;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ unsigned char c = static_cast<unsigned char>(*pSrcBuf);
+ if ( c < 0x80 )
+ cConv = c;
+ else
+ {
+ if ( (c >= pConvertData->mnToUniStart1) && (c <= pConvertData->mnToUniEnd1) )
+ cConv = pConvertData->mpToUniTab1[c-pConvertData->mnToUniStart1];
+ else if ( (c >= pConvertData->mnToUniStart2) && (c <= pConvertData->mnToUniEnd2) )
+ cConv = pConvertData->mpToUniTab2[c-pConvertData->mnToUniStart2];
+ else
+ cConv = 0;
+ if ( !cConv )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_UNDEFINED;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR )
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++pSrcBuf;
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_IGNORE )
+ {
+ pSrcBuf++;
+ continue;
+ }
+ cConv = ImplGetUndefinedUnicodeChar(c, nFlags);
+ }
+ }
+
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ *pDestBuf = cConv;
+ pDestBuf++;
+ pSrcBuf++;
+ }
+
+ *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf);
+ return (nDestChars - (pEndDestBuf-pDestBuf));
+}
+
+sal_Size sal::detail::textenc::convertUnicodeToChar(
+ void const * pData, SAL_UNUSED_PARAMETER void *,
+ sal_Unicode const * pSrcBuf, sal_Size nSrcChars, char * pDestBuf,
+ sal_Size nDestBytes, sal_uInt32 nFlags, sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars)
+{
+ sal_Unicode c;
+ const ImplByteConvertData* pConvertData = static_cast<const ImplByteConvertData*>(pData);
+ char* pEndDestBuf;
+ const sal_Unicode* pEndSrcBuf;
+ int i;
+ int n;
+ sal_uInt16 cTemp;
+ char aTempBuf[IMPL_MAX_REPLACECHAR+2];
+ const sal_uInt16* pReplace;
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestBytes;
+ pEndSrcBuf = pSrcBuf+nSrcChars;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ c = *pSrcBuf;
+ if ( c < 0x80 )
+ {
+ aTempBuf[0] = static_cast< char >(c);
+ n = 1;
+ }
+ else
+ {
+ n = ImplConvertUnicodeCharToChar( pConvertData, c, aTempBuf );
+
+ if ( n == 0 )
+ {
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE )
+ {
+ cTemp = ImplGetReplaceChar( c );
+ if ( cTemp )
+ n = ImplConvertUnicodeCharToChar(
+ pConvertData, cTemp, aTempBuf );
+ }
+
+ if ( n == 0 )
+ {
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR )
+ {
+ pReplace = ImplGetReplaceString( c );
+ if ( pReplace )
+ {
+ while ( *pReplace && (n < IMPL_MAX_REPLACECHAR) )
+ {
+ i = ImplConvertUnicodeCharToChar(
+ pConvertData, *pReplace, aTempBuf + n );
+ if ( i == 0 )
+ {
+ n = 0;
+ break;
+ }
+ pReplace++;
+ n += i;
+ }
+ }
+ }
+
+ /* Handle undefined and surrogates characters */
+ /* (all surrogates characters are undefined) */
+ if ( n == 0 )
+ {
+ if (sal::detail::textenc::handleUndefinedUnicodeToTextChar(
+ &pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf,
+ nFlags, pInfo))
+ continue;
+ break;
+ }
+ }
+ }
+ }
+
+ if ( pEndDestBuf - pDestBuf < n )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ for ( i = 0; i < n; ++i )
+ *pDestBuf++ = aTempBuf[i];
+ pSrcBuf++;
+ }
+
+ *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf);
+ return (nDestBytes - (pEndDestBuf-pDestBuf));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertsimple.hxx b/sal/textenc/convertsimple.hxx
new file mode 100644
index 000000000..f7154989a
--- /dev/null
+++ b/sal/textenc/convertsimple.hxx
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTSIMPLE_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTSIMPLE_HXX
+
+#include <sal/config.h>
+
+#include <sal/saldllapi.h>
+#include <sal/types.h>
+
+// Internal, non-stable ABI
+
+namespace sal::detail::textenc {
+
+sal_Size SAL_DLLPUBLIC convertCharToUnicode(
+ void const * pData, void * pContext, char const * pSrcBuf,
+ sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes);
+
+sal_Size SAL_DLLPUBLIC convertUnicodeToChar(
+ void const * pData, void * pContext, sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars, char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size * pSrcCvtChars);
+
+}
+
+#endif
diff --git a/sal/textenc/convertsinglebytetobmpunicode.cxx b/sal/textenc/convertsinglebytetobmpunicode.cxx
new file mode 100644
index 000000000..43c2b9cf3
--- /dev/null
+++ b/sal/textenc/convertsinglebytetobmpunicode.cxx
@@ -0,0 +1,210 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstddef>
+
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "context.hxx"
+#include "converter.hxx"
+#include "convertsinglebytetobmpunicode.hxx"
+#include "unichars.hxx"
+
+sal_Size rtl_textenc_convertSingleByteToBmpUnicode(
+ void const * data, SAL_UNUSED_PARAMETER void *, char const * srcBuf,
+ sal_Size srcBytes, sal_Unicode * destBuf, sal_Size destChars,
+ sal_uInt32 flags, sal_uInt32 * info, sal_Size * srcCvtBytes)
+{
+ sal_Unicode const * map = static_cast<
+ rtl::textenc::BmpUnicodeToSingleByteConverterData const * >(
+ data)->byteToUnicode;
+ sal_uInt32 infoFlags = 0;
+ sal_Size converted = 0;
+ sal_Unicode * destBufPtr = destBuf;
+ sal_Unicode * destBufEnd = destBuf + destChars;
+ for (; converted < srcBytes; ++converted) {
+ char b = *srcBuf++;
+ sal_Unicode c = map[static_cast< sal_uInt8 >(b)];
+ if (c == 0xFFFF) {
+ goto bad_input;
+ }
+ if (destBufEnd - destBufPtr < 1) {
+ goto no_output;
+ }
+ *destBufPtr++ = c;
+ continue;
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ true/*undefined*/, false, b, flags, &destBufPtr, destBufEnd,
+ &infoFlags))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ if ((flags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++converted;
+ }
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+ no_output:
+ --srcBuf;
+ infoFlags |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ if (info != nullptr) {
+ *info = infoFlags;
+ }
+ if (srcCvtBytes != nullptr) {
+ *srcCvtBytes = converted;
+ }
+ return destBufPtr - destBuf;
+}
+
+sal_Size rtl_textenc_convertBmpUnicodeToSingleByte(
+ void const * data, void * context,
+ sal_Unicode const * srcBuf, sal_Size srcChars, char * destBuf,
+ sal_Size destBytes, sal_uInt32 flags, sal_uInt32 * info,
+ sal_Size * srcCvtChars)
+{
+ std::size_t entries = static_cast<
+ rtl::textenc::BmpUnicodeToSingleByteConverterData const * >(
+ data)->unicodeToByteEntries;
+ rtl::textenc::BmpUnicodeToSingleByteRange const * ranges = static_cast<
+ rtl::textenc::BmpUnicodeToSingleByteConverterData const * >(
+ data)->unicodeToByte;
+ sal_Unicode highSurrogate = 0;
+ sal_uInt32 infoFlags = 0;
+ sal_Size converted = 0;
+ char * destBufPtr = destBuf;
+ char * destBufEnd = destBuf + destBytes;
+ if (context != nullptr) {
+ highSurrogate = static_cast< ImplUnicodeToTextContext * >(context)->
+ m_nHighSurrogate;
+ }
+ for (; converted < srcChars; ++converted) {
+ bool undefined = true;
+ sal_uInt32 c = *srcBuf++;
+ if (highSurrogate == 0) {
+ if (rtl::isHighSurrogate(c)) {
+ highSurrogate = static_cast< sal_Unicode >(c);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(c))
+ {
+ undefined = false;
+ goto bad_input;
+ }
+ } else if (rtl::isLowSurrogate(c)) {
+ c = rtl::combineSurrogates(highSurrogate, c);
+ } else {
+ undefined = false;
+ goto bad_input;
+ }
+ assert(rtl::isUnicodeScalarValue(c));
+ // Linearly searching through the ranges if probably fastest, assuming
+ // that most converted characters belong to the ASCII subset:
+ for (std::size_t i = 0; i < entries; ++i) {
+ if (c < ranges[i].unicode) {
+ break;
+ }
+ if (c <= sal::static_int_cast< sal_uInt32 >(
+ ranges[i].unicode + ranges[i].range))
+ {
+ if (destBufEnd - destBufPtr < 1) {
+ goto no_output;
+ }
+ *destBufPtr++ = static_cast< char >(
+ ranges[i].byte + (c - ranges[i].unicode));
+ goto done;
+ }
+ }
+ goto bad_input;
+ done:
+ highSurrogate = 0;
+ continue;
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ undefined, c, flags, &destBufPtr, destBufEnd, &infoFlags, nullptr,
+ 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ highSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ highSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+ no_output:
+ --srcBuf;
+ infoFlags |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ if (highSurrogate != 0
+ && ((infoFlags
+ & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0))
+ {
+ if ((flags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) {
+ infoFlags |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ } else {
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, flags, &destBufPtr, destBufEnd, &infoFlags, nullptr,
+ 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ highSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ infoFlags |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+ }
+ if (context != nullptr) {
+ static_cast< ImplUnicodeToTextContext * >(context)->m_nHighSurrogate
+ = highSurrogate;
+ }
+ if (info != nullptr) {
+ *info = infoFlags;
+ }
+ if (srcCvtChars != nullptr) {
+ *srcCvtChars = converted;
+ }
+ return destBufPtr - destBuf;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/convertsinglebytetobmpunicode.hxx b/sal/textenc/convertsinglebytetobmpunicode.hxx
new file mode 100644
index 000000000..bd657bbca
--- /dev/null
+++ b/sal/textenc/convertsinglebytetobmpunicode.hxx
@@ -0,0 +1,121 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_CONVERTSINGLEBYTETOBMPUNICODE_HXX
+#define INCLUDED_SAL_TEXTENC_CONVERTSINGLEBYTETOBMPUNICODE_HXX
+
+#include <sal/config.h>
+
+#include <cstddef>
+
+#include <sal/types.h>
+
+
+/// @HTML
+
+namespace rtl::textenc {
+
+/**
+ Maps a range of BMP Unicode code points to individual bytes.
+
+ @see rtl::textenc::BmpUnicodeToSingleByteConverterData
+ */
+struct BmpUnicodeToSingleByteRange {
+ /**
+ The start of the range of BMP Unicode code points.
+ */
+ sal_Unicode unicode;
+
+ /**
+ The extend of the range of BMP Unicode code points.
+
+ <p>The range covers <code>unicode</code> to <code>unicode + range</code>,
+ inclusive. It is an error if <code>unicode + range</code> is greater
+ than <code>0xFFFF</code>.</p>
+ */
+ sal_uInt8 range;
+
+ /**
+ The start of the corresponding range of individual bytes.
+
+ <p>It is an error if <code>byte + range</code> is greater than
+ <code>0xFF</code>.</p>
+ */
+ sal_uInt8 byte;
+};
+
+/**
+ Data to convert between BMP Unicode and a single-byte character set.
+
+ <p>Only supports conversions where each legal unit from the single-byte
+ character set has one or more mappings to individual BMP Unicode code points
+ that are neither noncharacters nor surrogates.</p>
+
+ @see rtl_textenc_convertSingleByteToBmpUnicode
+ @see rtl_textenc_convertBmpUnicodeToSingleByte
+ */
+struct BmpUnicodeToSingleByteConverterData {
+ /**
+ Mapping from the single-byte character set to BMP Unicode code points.
+
+ <p>Illegal units from the single-byte character set are mapped to
+ <code>0xFFFF</code>.</p>
+ */
+ sal_Unicode byteToUnicode[256];
+
+ /**
+ The number of Unicode-to-byte conversion ranges.
+ */
+ std::size_t unicodeToByteEntries;
+
+ /**
+ The array of Unicode-to-byte conversion ranges, sorted by increasing
+ <code>unicode</code> values.
+
+ <p>The ranges may not overlap.</p>
+ */
+ BmpUnicodeToSingleByteRange const * unicodeToByte;
+};
+
+}
+
+/**
+ Function to convert from a single-byte character set to BMP Unicode.
+
+ @see ImplConvertToUnicodeProc
+ */
+sal_Size rtl_textenc_convertSingleByteToBmpUnicode(
+ void const * data, void * context, char const * srcBuf,
+ sal_Size srcBytes, sal_Unicode * destBuf, sal_Size destChars,
+ sal_uInt32 flags, sal_uInt32 * info, sal_Size * srcCvtBytes);
+
+/**
+ Function to convert from BMP Unicode to a single-byte character set.
+
+ @see ImplConvertToTextProc
+ */
+sal_Size rtl_textenc_convertBmpUnicodeToSingleByte(
+ void const * data, void * context,
+ sal_Unicode const * srcBuf, sal_Size srcChars, char * destBuf,
+ sal_Size destBytes, sal_uInt32 flags, sal_uInt32 * info,
+ sal_Size * srcCvtChars);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/generate/big5hkscs2001.pl b/sal/textenc/generate/big5hkscs2001.pl
new file mode 100644
index 000000000..4245cbdd6
--- /dev/null
+++ b/sal/textenc/generate/big5hkscs2001.pl
@@ -0,0 +1,795 @@
+#!/usr/bin/env perl
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+# The following files must be available in a ./input subdir:
+
+# <http://www.info.gov.hk/digital21/eng/hkscs/download/big5-iso.txt>
+
+# <http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT>:
+# "Unicode version: 1.1 Table version: 0.0d3 Date: 11 February 1994"
+# Only used to track Unicode characters that are mapped from both Big5 and
+# HKSCS.
+
+# <http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT>:
+# "Unicode version: 2.0 Table version: 2.01 Date: 1/7/2000"
+# Only used to track Unicode characters that are mapped from both CP950 and
+# HKSCS.
+
+$surrogates = 0; # set to 1 to allow mappings to Unicode beyond Plane 0
+
+$id = "Big5Hkscs2001";
+
+sub isValidUtf32
+{
+ my $utf32 = $_[0];
+ return $utf32 >= 0 && $utf32 <= 0x10FFFF
+ && !($utf32 >= 0xD800 && $utf32 <= 0xDFFF)
+ && !($utf32 >= 0xFDD0 && $utf32 <= 0xFDEF)
+ && ($utf32 & 0xFFFF) < 0xFFFE;
+}
+
+sub printUtf32
+{
+ my $utf32 = $_[0];
+ return sprintf("U+%04X", $utf32);
+}
+
+sub isValidBig5
+{
+ my $big5 = $_[0];
+ my $big5_row = $big5 >> 8;
+ my $big5_column = $big5 & 0xFF;
+ return $big5_row >= 0x81 && $big5_row <= 0xFE
+ && ($big5_column >= 0x40 && $big5_column <= 0x7E
+ || $big5_column >= 0xA1 && $big5_column <= 0xFE);
+}
+
+sub printBig5
+{
+ my $big5 = $_[0];
+ return sprintf("%04X", $big5);
+}
+
+sub printStats
+{
+ my $used = $_[0];
+ my $space = $_[1];
+ return sprintf("%d/%d bytes (%.1f%%)",
+ $used,
+ $space,
+ $used * 100 / $space);
+}
+
+sub printSpaces
+{
+ my $column_width = $_[0];
+ my $columns_per_line = $_[1];
+ my $end = $_[2];
+ $output = "";
+ for ($i = int($end / $columns_per_line) * $columns_per_line;
+ $i < $end;
+ ++$i)
+ {
+ for ($j = 0; $j < $column_width; ++$j)
+ {
+ $output = $output . " ";
+ }
+ }
+ return $output;
+}
+
+sub addMapping
+{
+ my $utf32 = $_[0];
+ my $big5 = $_[1];
+ my $comp = $_[2];
+
+ $uni_plane = $utf32 >> 16;
+ $uni_page = ($utf32 >> 8) & 0xFF;
+ $uni_index = $utf32 & 0xFF;
+
+ if (!defined($uni_plane_used[$uni_plane])
+ || !defined($uni_page_used[$uni_plane][$uni_page])
+ || !defined($uni_map[$uni_plane][$uni_page][$uni_index]))
+ {
+ $uni_map[$uni_plane][$uni_page][$uni_index] = $big5;
+ $uni_plane_used[$uni_plane] = 1;
+ $uni_page_used[$uni_plane][$uni_page] = 1;
+ if ($comp != -1)
+ {
+ ++$compat[$comp];
+ }
+ }
+ else
+ {
+ $big5_1 = $uni_map[$uni_plane][$uni_page][$uni_index];
+ print "WARNING! Mapping ", printUtf32($utf32), " to ",
+ printBig5($big5_1), ", NOT ", ($comp ? "compat " : ""),
+ printBig5($big5), "\n";
+ }
+}
+
+# Build mappings to track Unicode characters that are mapped from both Big5/
+# CP950 and HKSCS:
+{
+ $filename = "BIG5.TXT";
+ open IN, ("input/" . $filename) or die "Cannot read " . $filename;
+ while (<IN>)
+ {
+ if (/(0x[0-9A-F][0-9A-F][0-9A-F][0-9A-F])[ \t]+(0x[0-9A-F]+)[ \t]+\#.*$/)
+ {
+ $big5 = oct($1);
+ $utf32 = oct($2);
+ isValidBig5($big5)
+ or die "Bad Big5 char " . printBig5($big5);
+ isValidUtf32($utf32)
+ or die "Bad UTF32 char " . printUtf32($utf32);
+ if ($utf32 != 0xFFFD)
+ {
+ if (defined($underlying_big5[$utf32]))
+ {
+ print "WARNING! In ", $filename, ", both ",
+ printBig5($underlying_big5[$utf32]), " and ",
+ printBig5($big5), " map to ", printUtf32($utf32),
+ "\n";
+ }
+ else
+ {
+ $underlying_big5[$utf32] = $big5;
+ }
+ }
+ }
+ }
+ close IN;
+
+ $filename = "CP950.TXT";
+ open IN, ("input/" . $filename) or die "Cannot read " . $filename;
+ while (<IN>)
+ {
+ if (/(0x[0-9A-F][0-9A-F][0-9A-F][0-9A-F])[ \t]+(0x[0-9A-F]+)[ \t]+\#.*$/)
+ {
+ $big5 = oct($1);
+ $utf32 = oct($2);
+ isValidBig5($big5)
+ or die "Bad Big5 char " . printBig5($big5);
+ isValidUtf32($utf32)
+ or die "Bad UTF32 char " . printUtf32($utf32);
+ if (defined($underlying_cp950[$utf32]))
+ {
+ print "WARNING! In ", $filename, ", both ",
+ printBig5($underlying_cp950[$utf32]), " and ",
+ printBig5($big5), " map to ", printUtf32($utf32), "\n";
+ }
+ else
+ {
+ $underlying_cp950[$utf32] = $big5;
+ }
+ }
+ }
+ close IN;
+}
+
+# The following are mapped by the underlying RTL_TEXTENCODING_BIG5 to some
+# nonstandard Unicode points, so they are explicitly mentioned here to map
+# to the standard Unicode PUA points. (In the other direction, the unofficial
+# mappings from Unicode to RTL_TEXTENCODING_BIG5 C6A1--C7FE are harmless,
+# since all Unicode characters involved are already covered by the official
+# Big5-HKSCS mappings.)
+$big5_map[0xC6][0xCF] = 0xF6E0; addMapping(0xF6E0, 0xC6CF, -1);
+$big5_map[0xC6][0xD3] = 0xF6E4; addMapping(0xF6E4, 0xC6D3, -1);
+$big5_map[0xC6][0xD5] = 0xF6E6; addMapping(0xF6E6, 0xC6D5, -1);
+$big5_map[0xC6][0xD7] = 0xF6E8; addMapping(0xF6E8, 0xC6D7, -1);
+$big5_map[0xC6][0xDE] = 0xF6EF; addMapping(0xF6EF, 0xC6DE, -1);
+$big5_map[0xC6][0xDF] = 0xF6F0; addMapping(0xF6F0, 0xC6DF, -1);
+
+# The following implements the mapping of Big5-HKSCS compatibility points
+# (GCCS characters unified with other HKSCS characters) to Unicode. In the
+# other direction, characters from Unicode's PUA will map to these Big5-HKSCS
+# compatibility points. (See the first list in <http://www.info.gov.hk/
+# digital21/eng/hkscs/download/big5cmp.txt>.)
+$big5_map[0x8E][0x69] = 0x7BB8;
+$big5_map[0x8E][0x6F] = 0x7C06;
+$big5_map[0x8E][0x7E] = 0x7CCE;
+$big5_map[0x8E][0xAB] = 0x7DD2;
+$big5_map[0x8E][0xB4] = 0x7E1D;
+$big5_map[0x8E][0xCD] = 0x8005;
+$big5_map[0x8E][0xD0] = 0x8028;
+$big5_map[0x8F][0x57] = 0x83C1;
+$big5_map[0x8F][0x69] = 0x84A8;
+$big5_map[0x8F][0x6E] = 0x840F;
+$big5_map[0x8F][0xCB] = 0x89A6;
+$big5_map[0x8F][0xCC] = 0x89A9;
+$big5_map[0x8F][0xFE] = 0x8D77;
+$big5_map[0x90][0x6D] = 0x90FD;
+$big5_map[0x90][0x7A] = 0x92B9;
+$big5_map[0x90][0xDC] = 0x975C;
+$big5_map[0x90][0xF1] = 0x97FF;
+$big5_map[0x91][0xBF] = 0x9F16;
+$big5_map[0x92][0x44] = 0x8503;
+$big5_map[0x92][0xAF] = 0x5159;
+$big5_map[0x92][0xB0] = 0x515B;
+$big5_map[0x92][0xB1] = 0x515D;
+$big5_map[0x92][0xB2] = 0x515E;
+$big5_map[0x92][0xC8] = 0x936E;
+$big5_map[0x92][0xD1] = 0x7479;
+$big5_map[0x94][0x47] = 0x6D67;
+$big5_map[0x94][0xCA] = 0x799B;
+$big5_map[0x95][0xD9] = 0x9097;
+$big5_map[0x96][0x44] = 0x975D;
+$big5_map[0x96][0xED] = 0x701E;
+$big5_map[0x96][0xFC] = 0x5B28;
+$big5_map[0x9B][0x76] = 0x7201;
+$big5_map[0x9B][0x78] = 0x77D7;
+$big5_map[0x9B][0x7B] = 0x7E87;
+$big5_map[0x9B][0xC6] = 0x99D6;
+$big5_map[0x9B][0xDE] = 0x91D4;
+$big5_map[0x9B][0xEC] = 0x60DE;
+$big5_map[0x9B][0xF6] = 0x6FB6;
+$big5_map[0x9C][0x42] = 0x8F36;
+$big5_map[0x9C][0x53] = 0x4FBB;
+$big5_map[0x9C][0x62] = 0x71DF;
+$big5_map[0x9C][0x68] = 0x9104;
+$big5_map[0x9C][0x6B] = 0x9DF0;
+$big5_map[0x9C][0x77] = 0x83CF;
+$big5_map[0x9C][0xBC] = 0x5C10;
+$big5_map[0x9C][0xBD] = 0x79E3;
+$big5_map[0x9C][0xD0] = 0x5A67;
+$big5_map[0x9D][0x57] = 0x8F0B;
+$big5_map[0x9D][0x5A] = 0x7B51;
+$big5_map[0x9D][0xC4] = 0x62D0;
+$big5_map[0x9E][0xA9] = 0x6062;
+$big5_map[0x9E][0xEF] = 0x75F9;
+$big5_map[0x9E][0xFD] = 0x6C4A;
+$big5_map[0x9F][0x60] = 0x9B2E;
+$big5_map[0x9F][0x66] = 0x9F17;
+$big5_map[0x9F][0xCB] = 0x50ED;
+$big5_map[0x9F][0xD8] = 0x5F0C;
+$big5_map[0xA0][0x63] = 0x880F;
+$big5_map[0xA0][0x77] = 0x62CE;
+$big5_map[0xA0][0xD5] = 0x7468;
+$big5_map[0xA0][0xDF] = 0x7162;
+$big5_map[0xA0][0xE4] = 0x7250;
+$big5_map[0xFA][0x5F] = 0x5029;
+$big5_map[0xFA][0x66] = 0x507D;
+$big5_map[0xFA][0xBD] = 0x5305;
+$big5_map[0xFA][0xC5] = 0x5344;
+$big5_map[0xFA][0xD5] = 0x537F;
+$big5_map[0xFB][0x48] = 0x5605;
+$big5_map[0xFB][0xB8] = 0x5A77;
+$big5_map[0xFB][0xF3] = 0x5E75;
+$big5_map[0xFB][0xF9] = 0x5ED0;
+$big5_map[0xFC][0x4F] = 0x5F58;
+$big5_map[0xFC][0x6C] = 0x60A4;
+$big5_map[0xFC][0xB9] = 0x6490;
+$big5_map[0xFC][0xE2] = 0x6674;
+$big5_map[0xFC][0xF1] = 0x675E;
+$big5_map[0xFD][0xB7] = 0x6C9C;
+$big5_map[0xFD][0xB8] = 0x6E1D;
+$big5_map[0xFD][0xBB] = 0x6E2F;
+$big5_map[0xFD][0xF1] = 0x716E;
+$big5_map[0xFE][0x52] = 0x732A;
+$big5_map[0xFE][0x6F] = 0x745C;
+$big5_map[0xFE][0xAA] = 0x74E9;
+$big5_map[0xFE][0xDD] = 0x7809;
+
+$pua = 0;
+$compat[0] = 0; # 1993
+$compat[1] = 0; # 2000
+$compat[2] = 0; # 2001
+
+$filename = "big5-iso.txt";
+open IN, ("input/" . $filename) or die "Cannot read " . $filename;
+while (<IN>)
+{
+ if (/^([0-9A-F]+) +([0-9A-F]+) +([0-9A-F]+) +([0-9A-F]+)$/)
+ {
+ $big5 = oct("0x" . $1);
+ $utf32_1993 = oct("0x" . $2);
+ $utf32_2000 = oct("0x" . $3);
+ $utf32_2001 = oct("0x" . $4);
+ isValidBig5($big5)
+ or die "Bad Big5 char " . printBig5($big5);
+ isValidUtf32($utf32_1993)
+ or die "Bad UTF32 char " . printUtf32($utf32_1993);
+ isValidUtf32($utf32_2000)
+ or die "Bad UTF32 char " . printUtf32($utf32_2000);
+ isValidUtf32($utf32_2001)
+ or die "Bad UTF32 char " . printUtf32($utf32_2001);
+
+ $utf32 = $surrogates ? $utf32_2001 : $utf32_2000;
+
+ if (defined($underlying_big5[$utf32])
+ || defined($underlying_cp950[$utf32]))
+ {
+ if (defined($underlying_big5[$utf32])
+ && defined($underlying_cp950[$utf32])
+ && $underlying_big5[$utf32] == $underlying_cp950[$utf32]
+ && $underlying_big5[$utf32] == $big5
+ ||
+ defined($underlying_big5[$utf32])
+ && !defined($underlying_cp950[$utf32])
+ && $underlying_big5[$utf32] == $big5
+ ||
+ !defined($underlying_big5[$utf32])
+ && defined($underlying_cp950[$utf32])
+ && $underlying_cp950[$utf32] == $big5)
+ {
+ # ignore
+
+ # Depending on real underlying mapping (cf.
+ # ../convertbig5hkscs.tab), it would be possible to save some
+ # table space by dropping those HKSCS code points that are
+ # already covered by the underlying mapping.
+ }
+ else
+ {
+ print "XXX mapping underlying";
+ if (defined($underlying_big5[$utf32])
+ && defined($underlying_cp950[$utf32])
+ && $underlying_big5[$utf32] == $underlying_cp950[$utf32])
+ {
+ print " Big5/CP950 ", printBig5($underlying_big5[$utf32]);
+ }
+ else
+ {
+ if (defined($underlying_big5[$utf32]))
+ {
+ print " Big5 ", printBig5($underlying_big5[$utf32]);
+ }
+ if (defined($underlying_cp950[$utf32]))
+ {
+ print " CP950 ", printBig5($underlying_cp950[$utf32]);
+ }
+ }
+ print " and HKSCS ", printBig5($big5), " to ",
+ printUtf32($utf32), "\n";
+ }
+ }
+
+ if ($utf32 >= 0xE000 && $utf32 <= 0xF8FF)
+ {
+ ++$pua;
+ }
+
+ $big5_row = $big5 >> 8;
+ $big5_column = $big5 & 0xFF;
+ if (defined($big5_map[$big5_row][$big5_column]))
+ {
+ die "Bad Big5 mapping " . printBig5($big5);
+ }
+ $big5_map[$big5_row][$big5_column] = $utf32;
+
+ addMapping($utf32, $big5, -1);
+
+ if ($utf32_2001 != $utf32)
+ {
+ addMapping($utf32_2001, $big5, 2);
+ }
+ if ($utf32_2000 != $utf32 && $utf32_2000 != $utf32_2001)
+ {
+ addMapping($utf32_2000, $big5, 1);
+ }
+ if ($utf32_1993 != $utf32 && $utf32_1993 != $utf32_2000
+ && $utf32_1993 != $utf32_2001)
+ {
+ addMapping($utf32_1993, $big5, 0);
+ }
+ }
+}
+close IN;
+
+print $pua, " mappings to PUA\n";
+print $compat[0], " 1993 compatibility mappings\n" if ($compat[0] != 0);
+print $compat[1], " 2000 compatibility mappings\n" if ($compat[1] != 0);
+print $compat[2], " 2001 compatibility mappings\n" if ($compat[2] != 0);
+
+if (defined($uni_plane_used[0]) && defined($uni_page_used[0][0]))
+{
+ for ($utf32 = 0; $utf32 <= 0x7F; ++$utf32)
+ {
+ if (defined($uni_map[0][0][$uni_index]))
+ {
+ $big5 = $uni_map[0][0][$utf32];
+ die "Mapping " . printUtf32($utf32) . " to " . printBig5($big5);
+ }
+ }
+}
+
+$filename = lc($id) . ".tab";
+open OUT, ("> " . $filename) or die "Cannot write " . $filename;
+
+{
+ $filename = lc($id). ".pl";
+ open IN, $filename or die "Cannot read ". $filename;
+ $first = 1;
+ while (<IN>)
+ {
+ if (/^\#!.*$/)
+ {
+ }
+ elsif (/^\#(\*.*)$/)
+ {
+ if ($first == 1)
+ {
+ print OUT "/", $1, "\n";
+ $first = 0;
+ }
+ else
+ {
+ print OUT " ", substr($1, 0, length($1) - 1), "/\n";
+ }
+ }
+ elsif (/^\# (.*)$/)
+ {
+ print OUT " *", $1, "\n";
+ }
+ elsif (/^\#(.*)$/)
+ {
+ print OUT " *", $1, "\n";
+ }
+ else
+ {
+ goto done;
+ }
+ }
+ done:
+}
+
+print OUT "\n",
+ "#include \"sal/types.h\"\n",
+ "\n";
+
+print OUT "static sal_uInt16 const aImpl", $id, "ToUnicodeData[] = {\n";
+$big5_data_index = 0;
+$big5_rows = 0;
+$big5_chars = 0;
+for ($big5_row = 0; $big5_row <= 255; ++$big5_row)
+{
+ $big5_row_first = -1;
+ for ($big5_column = 0; $big5_column <= 255; ++$big5_column)
+ {
+ if (defined($big5_map[$big5_row][$big5_column]))
+ {
+ if ($big5_row_first == -1)
+ {
+ $big5_row_first = $big5_column;
+ }
+ $big5_row_last = $big5_column;
+ }
+ }
+ if ($big5_row_first != -1)
+ {
+ $big5_data_offsets[$big5_row] = $big5_data_index;
+ ++$big5_rows;
+ print OUT " /* row ", $big5_row, " */\n";
+
+ $big5_row_surrogates_first = -1;
+ $big5_row_chars = 0;
+ $big5_row_surrogates = 0;
+
+ print OUT " ", $big5_row_first, " | (", $big5_row_last,
+ " << 8), /* first, last */\n";
+ ++$big5_data_index;
+
+ print OUT " ", printSpaces(7, 10, $big5_row_first);
+ $bol = 0;
+ for ($big5_column = $big5_row_first;
+ $big5_column <= $big5_row_last;
+ ++$big5_column)
+ {
+ if ($bol == 1)
+ {
+ print OUT " ";
+ $bol = 0;
+ }
+ if (defined($big5_map[$big5_row][$big5_column]))
+ {
+ $utf32 = $big5_map[$big5_row][$big5_column];
+ ++$big5_row_chars;
+ if ($utf32 <= 0xFFFF)
+ {
+ printf OUT "0x%04X,", $utf32;
+ }
+ else
+ {
+ ++$big5_row_surrogates;
+ printf OUT "0x%04X,",
+ (0xD800 | (($utf32 - 0x10000) >> 10));
+ if ($big5_row_surrogates_first == -1)
+ {
+ $big5_row_surrogates_first = $big5_column;
+ }
+ $big5_row_surrogates_last = $big5_column;
+ }
+ }
+ else
+ {
+ printf OUT "0xffff,";
+ }
+ ++$big5_data_index;
+ if ($big5_column % 10 == 9)
+ {
+ print OUT "\n";
+ $bol = 1;
+ }
+ }
+ if ($bol == 0)
+ {
+ print OUT "\n";
+ }
+
+ if ($big5_row_surrogates_first != -1)
+ {
+ print OUT " ", $big5_row_surrogates_first,
+ ", /* first low-surrogate */\n";
+ ++$big5_data_index;
+
+ print OUT " ", printSpaces(7, 10, $big5_row_surrogates_first);
+ $bol = 0;
+ for ($big5_column = $big5_row_surrogates_first;
+ $big5_column <= $big5_row_surrogates_last;
+ ++$big5_column)
+ {
+ if ($bol == 1)
+ {
+ print OUT " ";
+ $bol = 0;
+ }
+ $utf32 = 0;
+ if (defined($big5_map[$big5_row][$big5_column]))
+ {
+ $utf32 = $big5_map[$big5_row][$big5_column];
+ }
+ if ($utf32 <= 0xFFFF)
+ {
+ printf OUT " 0,";
+ }
+ else
+ {
+ printf OUT "0x%04X,",
+ (0xDC00 | (($utf32 - 0x10000) & 0x3FF));
+ }
+ ++$big5_data_index;
+ if ($big5_column % 10 == 9)
+ {
+ print OUT "\n";
+ $bol = 1;
+ }
+ }
+ if ($bol == 0)
+ {
+ print OUT "\n";
+ }
+ }
+
+ $big5_chars += $big5_row_chars;
+ $big5_data_space[$big5_row]
+ = ($big5_data_index - $big5_data_offsets[$big5_row]) * 2;
+ $big5_data_used[$big5_row]
+ = (1 + $big5_row_chars + ($big5_row_surrogates == 0 ?
+ 0 : 1 + $big5_row_surrogates))
+ * 2;
+ }
+ else
+ {
+ print OUT " /* row ", $big5_row, ": --- */\n";
+ $big5_data_offsets[$big5_row] = -1;
+ }
+}
+print OUT "};\n\n";
+print "big5 rows = ", $big5_rows, ", chars = ", $big5_chars, "\n";
+
+print OUT "static sal_Int32 const aImpl", $id, "ToUnicodeRowOffsets[] = {\n";
+$big5_rowoffsets_used = 0;
+for ($big5_row = 0; $big5_row <= 255; ++$big5_row)
+{
+ if ($big5_data_offsets[$big5_row] == -1)
+ {
+ print OUT " -1, /* row ", $big5_row, " */\n";
+ }
+ else
+ {
+ print OUT " ",
+ $big5_data_offsets[$big5_row],
+ ", /* row ",
+ $big5_row,
+ "; ",
+ printStats($big5_data_used[$big5_row],
+ $big5_data_space[$big5_row]),
+ " */\n";
+ $big5_rowoffsets_used += 4;
+ }
+}
+print OUT "};\n\n";
+
+print OUT "static sal_uInt16 const aImplUnicodeTo", $id, "Data[] = {\n";
+$uni_data_index = 0;
+for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane)
+{
+ if (defined($uni_plane_used[$uni_plane]))
+ {
+ for ($uni_page = 0; $uni_page <= 255; ++$uni_page)
+ {
+ if (defined($uni_page_used[$uni_plane][$uni_page]))
+ {
+ $uni_data_offsets[$uni_plane][$uni_page] = $uni_data_index;
+ print OUT " /* plane ", $uni_plane, ", page ", $uni_page,
+ " */\n";
+
+ $uni_page_first = -1;
+ for ($uni_index = 0; $uni_index <= 255; ++$uni_index)
+ {
+ if (defined($uni_map[$uni_plane][$uni_page][$uni_index]))
+ {
+ if ($uni_page_first == -1)
+ {
+ $uni_page_first = $uni_index;
+ }
+ $uni_page_last = $uni_index;
+ }
+ }
+
+ $uni_data_used[$uni_plane][$uni_page] = 0;
+
+ print OUT " ", $uni_page_first, " | (", $uni_page_last,
+ " << 8), /* first, last */\n";
+ ++$uni_data_index;
+ $uni_data_used[$uni_plane][$uni_page] += 2;
+
+ print OUT " ", printSpaces(7, 10, $uni_page_first);
+ $bol = 0;
+ for ($uni_index = $uni_page_first;
+ $uni_index <= $uni_page_last;
+ ++$uni_index)
+ {
+ if ($bol == 1)
+ {
+ print OUT " ";
+ $bol = 0;
+ }
+ if (defined($uni_map[$uni_plane][$uni_page][$uni_index]))
+ {
+ $big5 = $uni_map[$uni_plane][$uni_page][$uni_index];
+ printf OUT "0x%04X,", $big5;
+ $uni_data_used[$uni_plane][$uni_page] += 2;
+ }
+ else
+ {
+ print OUT " 0,";
+ }
+ ++$uni_data_index;
+ if ($uni_index % 10 == 9)
+ {
+ print OUT "\n";
+ $bol = 1;
+ }
+ }
+ if ($bol == 0)
+ {
+ print OUT "\n";
+ }
+
+ $uni_data_space[$uni_plane][$uni_page]
+ = ($uni_data_index
+ - $uni_data_offsets[$uni_plane][$uni_page]) * 2;
+ }
+ else
+ {
+ $uni_data_offsets[$uni_plane][$uni_page] = -1;
+ print OUT " /* plane ", $uni_plane, ", page ", $uni_page,
+ ": --- */\n";
+ }
+ }
+ }
+ else
+ {
+ print OUT " /* plane ", $uni_plane, ": --- */\n";
+ }
+}
+print OUT "};\n\n";
+
+print OUT "static sal_Int32 const aImplUnicodeTo", $id, "PageOffsets[] = {\n";
+for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane)
+{
+ if (defined($uni_plane_used[$uni_plane]))
+ {
+ $uni_pageoffsets_used[$uni_plane] = 0;
+ $uni_data_used_sum[$uni_plane] = 0;
+ $uni_data_space_sum[$uni_plane] = 0;
+ for ($uni_page = 0; $uni_page <= 255; ++$uni_page)
+ {
+ $offset = $uni_data_offsets[$uni_plane][$uni_page];
+ if ($offset == -1)
+ {
+ print OUT " -1, /* plane ",
+ $uni_plane,
+ ", page ",
+ $uni_page,
+ " */\n";
+ }
+ else
+ {
+ print OUT " ",
+ $offset,
+ ", /* plane ",
+ $uni_plane,
+ ", page ",
+ $uni_page,
+ "; ",
+ printStats($uni_data_used[$uni_plane][$uni_page],
+ $uni_data_space[$uni_plane][$uni_page]),
+ " */\n";
+ $uni_pageoffsets_used[$uni_plane] += 4;
+ $uni_data_used_sum[$uni_plane]
+ += $uni_data_used[$uni_plane][$uni_page];
+ $uni_data_space_sum[$uni_plane]
+ += $uni_data_space[$uni_plane][$uni_page];
+ }
+ }
+ }
+ else
+ {
+ print OUT " /* plane ", $uni_plane, ": --- */\n";
+ }
+}
+print OUT "};\n\n";
+
+print OUT "static sal_Int32 const aImplUnicodeTo",
+ $id,
+ "PlaneOffsets[] = {\n";
+$uni_page_offset = 0;
+$uni_planeoffsets_used = 0;
+$uni_pageoffsets_used_sum = 0;
+$uni_pageoffsets_space_sum = 0;
+$uni_data_used_sum2 = 0;
+$uni_data_space_sum2 = 0;
+for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane)
+{
+ if (defined ($uni_plane_used[$uni_plane]))
+ {
+ print OUT " ",
+ $uni_page_offset++,
+ " * 256, /* plane ",
+ $uni_plane,
+ "; ",
+ printStats($uni_pageoffsets_used[$uni_plane], 256 * 4),
+ ", ",
+ printStats($uni_data_used_sum[$uni_plane],
+ $uni_data_space_sum[$uni_plane]),
+ " */\n";
+ $uni_planeoffsets_used += 4;
+ $uni_pageoffsets_used_sum += $uni_pageoffsets_used[$uni_plane];
+ $uni_pageoffsets_space_sum += 256 * 4;
+ $uni_data_used_sum2 += $uni_data_used_sum[$uni_plane];
+ $uni_data_space_sum2 += $uni_data_space_sum[$uni_plane];
+ }
+ else
+ {
+ print OUT " -1, /* plane ", $uni_plane, " */\n";
+ }
+}
+print OUT " /* ",
+ printStats($uni_planeoffsets_used, 17 * 4),
+ ", ",
+ printStats($uni_pageoffsets_used_sum, $uni_pageoffsets_space_sum),
+ ", ",
+ printStats($uni_data_used_sum2, $uni_data_space_sum2),
+ " */\n};\n";
+
+close OUT;
diff --git a/sal/textenc/generate/big5hkscs2001.tab b/sal/textenc/generate/big5hkscs2001.tab
new file mode 100644
index 000000000..b8609633f
--- /dev/null
+++ b/sal/textenc/generate/big5hkscs2001.tab
@@ -0,0 +1,8813 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+
+sal_uInt16 const aImplBig5Hkscs2001ToUnicodeData[] = {
+ /* row 0: --- */
+ /* row 1: --- */
+ /* row 2: --- */
+ /* row 3: --- */
+ /* row 4: --- */
+ /* row 5: --- */
+ /* row 6: --- */
+ /* row 7: --- */
+ /* row 8: --- */
+ /* row 9: --- */
+ /* row 10: --- */
+ /* row 11: --- */
+ /* row 12: --- */
+ /* row 13: --- */
+ /* row 14: --- */
+ /* row 15: --- */
+ /* row 16: --- */
+ /* row 17: --- */
+ /* row 18: --- */
+ /* row 19: --- */
+ /* row 20: --- */
+ /* row 21: --- */
+ /* row 22: --- */
+ /* row 23: --- */
+ /* row 24: --- */
+ /* row 25: --- */
+ /* row 26: --- */
+ /* row 27: --- */
+ /* row 28: --- */
+ /* row 29: --- */
+ /* row 30: --- */
+ /* row 31: --- */
+ /* row 32: --- */
+ /* row 33: --- */
+ /* row 34: --- */
+ /* row 35: --- */
+ /* row 36: --- */
+ /* row 37: --- */
+ /* row 38: --- */
+ /* row 39: --- */
+ /* row 40: --- */
+ /* row 41: --- */
+ /* row 42: --- */
+ /* row 43: --- */
+ /* row 44: --- */
+ /* row 45: --- */
+ /* row 46: --- */
+ /* row 47: --- */
+ /* row 48: --- */
+ /* row 49: --- */
+ /* row 50: --- */
+ /* row 51: --- */
+ /* row 52: --- */
+ /* row 53: --- */
+ /* row 54: --- */
+ /* row 55: --- */
+ /* row 56: --- */
+ /* row 57: --- */
+ /* row 58: --- */
+ /* row 59: --- */
+ /* row 60: --- */
+ /* row 61: --- */
+ /* row 62: --- */
+ /* row 63: --- */
+ /* row 64: --- */
+ /* row 65: --- */
+ /* row 66: --- */
+ /* row 67: --- */
+ /* row 68: --- */
+ /* row 69: --- */
+ /* row 70: --- */
+ /* row 71: --- */
+ /* row 72: --- */
+ /* row 73: --- */
+ /* row 74: --- */
+ /* row 75: --- */
+ /* row 76: --- */
+ /* row 77: --- */
+ /* row 78: --- */
+ /* row 79: --- */
+ /* row 80: --- */
+ /* row 81: --- */
+ /* row 82: --- */
+ /* row 83: --- */
+ /* row 84: --- */
+ /* row 85: --- */
+ /* row 86: --- */
+ /* row 87: --- */
+ /* row 88: --- */
+ /* row 89: --- */
+ /* row 90: --- */
+ /* row 91: --- */
+ /* row 92: --- */
+ /* row 93: --- */
+ /* row 94: --- */
+ /* row 95: --- */
+ /* row 96: --- */
+ /* row 97: --- */
+ /* row 98: --- */
+ /* row 99: --- */
+ /* row 100: --- */
+ /* row 101: --- */
+ /* row 102: --- */
+ /* row 103: --- */
+ /* row 104: --- */
+ /* row 105: --- */
+ /* row 106: --- */
+ /* row 107: --- */
+ /* row 108: --- */
+ /* row 109: --- */
+ /* row 110: --- */
+ /* row 111: --- */
+ /* row 112: --- */
+ /* row 113: --- */
+ /* row 114: --- */
+ /* row 115: --- */
+ /* row 116: --- */
+ /* row 117: --- */
+ /* row 118: --- */
+ /* row 119: --- */
+ /* row 120: --- */
+ /* row 121: --- */
+ /* row 122: --- */
+ /* row 123: --- */
+ /* row 124: --- */
+ /* row 125: --- */
+ /* row 126: --- */
+ /* row 127: --- */
+ /* row 128: --- */
+ /* row 129: --- */
+ /* row 130: --- */
+ /* row 131: --- */
+ /* row 132: --- */
+ /* row 133: --- */
+ /* row 134: --- */
+ /* row 135: --- */
+ /* row 136 */
+ 64 | (170 << 8), /* first, last */
+ 0xF303,0xF304,0xF305,0xF306,0xF307,0xF308,
+ 0xF309,0xF30A,0xF30B,0xF30C,0xF30D,0xF30E,0xF30F,0xF310,0xF311,0xF312,
+ 0xF313,0xF314,0xF315,0xF316,0xF317,0xF318,0x0100,0x00C1,0x01CD,0x00C0,
+ 0x0112,0x00C9,0x011A,0x00C8,0x014C,0x00D3,0x01D1,0x00D2,0xF325,0x1EBE,
+ 0xF327,0x1EC0,0x00CA,0x0101,0x00E1,0x01CE,0x00E0,0x0251,0x0113,0x00E9,
+ 0x011B,0x00E8,0x012B,0x00ED,0x01D0,0x00EC,0x014D,0x00F3,0x01D2,0x00F2,
+ 0x016B,0x00FA,0x01D4,0x00F9,0x01D6,0x01D8,0x01DA,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x01DC,0x00FC,0xF344,0x1EBF,0xF346,0x1EC1,0x00EA,0x0261,0xF34A,
+ 0xF34B,
+ /* row 137 */
+ 64 | (254 << 8), /* first, last */
+ 0xF3A0,0xF3A1,0xffff,0x650A,0xffff,0xffff,
+ 0x4E3D,0x6EDD,0x9D4E,0x91DF,0xffff,0xffff,0xF3AC,0x6491,0x4F1A,0x4F28,
+ 0x4FA8,0x5156,0x5174,0x519C,0x51E4,0x52A1,0x52A8,0x533B,0x534E,0x53D1,
+ 0x53D8,0x56E2,0x58F0,0x5904,0x5907,0x5932,0x5934,0x5B66,0x5B9E,0x5B9F,
+ 0x5C9A,0x5E86,0x603B,0x6589,0x67FE,0x6804,0x6865,0x6D4E,0x70BC,0x7535,
+ 0x7EA4,0x7EAC,0x7EBA,0x7EC7,0x7ECF,0x7EDF,0x7F06,0x7F37,0x827A,0x82CF,
+ 0x836F,0x89C6,0x8BBE,0x8BE2,0x8F66,0x8F67,0x8F6E,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x7411,0x7CFC,0x7DCD,0x6946,0x7AC9,0x5227,0xffff,0xffff,0xffff,
+ 0xffff,0x918C,0x78B8,0x915E,0x80BC,0xffff,0x8D0B,0x80F6,0xF3F0,0xffff,
+ 0xffff,0x809F,0x9EC7,0x4CCD,0x9DC9,0x9E0C,0x4C3E,0xF3F9,0xF3FA,0x9E0A,
+ 0xF3FC,0x35C1,0xffff,0x6E9A,0x823E,0x7519,0xffff,0x4911,0x9A6C,0x9A8F,
+ 0x9F99,0x7987,0xF408,0xF409,0xF40A,0xF40B,0x4E24,0x4E81,0x4E80,0x4E87,
+ 0x4EBF,0x4EEB,0x4F37,0x344C,0x4FBD,0x3E48,0x5003,0x5088,0x347D,0x3493,
+ 0x34A5,0x5186,0x5905,0x51DB,0x51FC,0x5205,0x4E89,0x5279,0x5290,0x5327,
+ 0x35C7,0x53A9,0x3551,0x53B0,0x3553,0x53C2,0x5423,0x356D,0x3572,0x3681,
+ 0x5493,0x54A3,0x54B4,0x54B9,0x54D0,0x54EF,0x5518,0x5523,0x5528,0x3598,
+ 0x553F,0x35A5,0x35BF,0x55D7,0x35C5,
+ /* row 138 */
+ 64 | (254 << 8), /* first, last */
+ 0xF43D,0x5525,0xffff,0xF440,0xF441,0xF442,
+ 0x5590,0xF444,0x39EC,0xF446,0x8E46,0xF448,0xF449,0x4053,0xF44B,0x777A,
+ 0xF44D,0x3A34,0x47D5,0xF450,0xF451,0xF452,0x64DD,0xF454,0xF455,0xF456,
+ 0xF457,0x648D,0x8E7E,0xF45A,0xF45B,0xF45C,0xF45D,0xF45E,0xF45F,0xffff,
+ 0xF461,0xF462,0xF463,0x47F4,0xF465,0xF466,0x9AB2,0x3A67,0xF469,0x3FED,
+ 0x3506,0xF46C,0xF46D,0xF46E,0xF46F,0x9D6E,0x9815,0xffff,0x43D9,0xF474,
+ 0x64B4,0x54E3,0xF477,0xF478,0xF479,0x39FB,0xF47B,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xF47C,0xF47D,0xF47E,0x64EA,0xF480,0xF481,0x8E68,0xF483,0xF484,
+ 0xF485,0xffff,0x480B,0xF488,0x3FFA,0x5873,0xF48B,0xffff,0xF48D,0xF48E,
+ 0xF48F,0xF490,0xF491,0x5579,0x40BB,0x43BA,0xffff,0x4AB4,0xF497,0xF498,
+ 0x81AA,0x98F5,0xF49B,0x6379,0x39FE,0xF49E,0x8DC0,0x56A1,0x647C,0x3E43,
+ 0xffff,0xF4A4,0xF4A5,0xF4A6,0xF4A7,0xffff,0xF4A9,0xF4AA,0x3992,0x3A06,
+ 0xF4AD,0x3578,0xF4AF,0xF4B0,0x5652,0xF4B2,0xF4B3,0xF4B4,0x34BC,0x6C3D,
+ 0xF4B7,0xffff,0xffff,0xF4BA,0xF4BB,0xF4BC,0xF4BD,0xF4BE,0xF4BF,0xF4C0,
+ 0xF4C1,0x7F93,0xF4C3,0xF4C4,0xF4C5,0x35FB,0xF4C7,0xF4C8,0xF4C9,0xF4CA,
+ 0x3F93,0xF4CC,0xF4CD,0xF4CE,0xF4CF,0xffff,0xF4D1,0xF4D2,0xF4D3,0xF4D4,
+ 0xF4D5,0x3FF9,0xF4D7,0x6432,0xF4D9,
+ /* row 139 */
+ 64 | (253 << 8), /* first, last */
+ 0xF4DA,0xF4DB,0xF4DC,0xF4DD,0xF4DE,0xF4DF,
+ 0xF4E0,0x3A18,0xF4E2,0xF4E3,0xF4E4,0xF4E5,0xF4E6,0xF4E7,0xF4E8,0xF4E9,
+ 0x95AA,0x54CC,0x82C4,0x55B9,0xffff,0xF4EF,0x9C26,0x9AB6,0xF4F2,0xF4F3,
+ 0x7140,0x816D,0x80EC,0x5C1C,0xF4F8,0x8134,0x3797,0x535F,0xF4FC,0x91B6,
+ 0xF4FE,0xF4FF,0xF500,0xF501,0x35DD,0xF503,0x3609,0xF505,0x56AF,0xF507,
+ 0xF508,0xF509,0xF50A,0xF50B,0xF50C,0xF50D,0xF50E,0xF50F,0xF510,0xF511,
+ 0x5A54,0xF513,0xF514,0xF515,0xF516,0x579C,0xF518,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xF519,0xF51A,0xF51B,0xF51C,0xF51D,0x3703,0xF51F,0xF520,0xF521,
+ 0xF522,0xF523,0xF524,0xF525,0xF526,0x5899,0x5268,0x361A,0xF52A,0x7BB2,
+ 0x5B68,0x4800,0x4B2C,0x9F27,0x49E7,0x9C1F,0x9B8D,0xF533,0xF534,0x55FB,
+ 0x35F2,0x5689,0x4E28,0x5902,0xF53A,0xF53B,0x9751,0xF53D,0x4E5B,0x4EBB,
+ 0x353E,0x5C23,0x5F51,0x5FC4,0x38FA,0x624C,0x6535,0x6B7A,0x6C35,0x6C3A,
+ 0x706C,0x722B,0x4E2C,0x72AD,0xF54E,0x7F52,0x793B,0x7CF9,0x7F53,0xF553,
+ 0x34C1,0xffff,0xF556,0x8002,0x8080,0xF559,0xF55A,0x535D,0x8864,0x89C1,
+ 0xF55E,0x8BA0,0x8D1D,0x9485,0x9578,0x957F,0x95E8,0xF565,0x97E6,0x9875,
+ 0x98CE,0x98DE,0x9963,0xF56B,0x9C7C,0x9E1F,0x9EC4,0x6B6F,0xF907,0x4E37,
+ 0xF572,0x961D,0x6237,0x94A2,
+ /* row 140 */
+ 64 | (220 << 8), /* first, last */
+ 0x503B,0x6DFE,0xF579,0xF57A,0x3DC9,0x888F,
+ 0xF57D,0x7077,0x5CF5,0x4B20,0xF581,0x3559,0xF583,0x6122,0xF585,0x8FA7,
+ 0x91F6,0x7191,0x6719,0x73BA,0xF58B,0xF58C,0x3C8B,0xF58E,0x4B10,0x78E4,
+ 0x7402,0x51AE,0xF593,0x4009,0x6A63,0xF596,0x4223,0x860F,0xffff,0x7A2A,
+ 0xF59B,0xF59C,0x9755,0x704D,0x5324,0xF5A0,0x93F4,0x76D9,0xF5A3,0xF5A4,
+ 0x77DD,0x4EA3,0x4FF0,0x50BC,0x4E2F,0x4F17,0xF5AB,0x5434,0x7D8B,0x5892,
+ 0x58D0,0xF5B0,0x5E92,0x5E99,0x5FC2,0xF5B4,0x658B,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xF5B6,0x6919,0x6A43,0xF5B9,0x6CFF,0xffff,0x7200,0xF5BD,0x738C,
+ 0x3EDB,0xF5C0,0x5B15,0x74B9,0x8B83,0xF5C4,0xF5C5,0x7A93,0x7BEC,0x7CC3,
+ 0x7E6C,0x82F8,0x8597,0xF5CC,0x8890,0xF5CE,0x8EB9,0xF5D0,0x8FCF,0x855F,
+ 0x99E0,0x9221,0xF5D5,0xF5D6,0xF5D7,0x4071,0x42A2,0x5A1A,0xffff,0xffff,
+ 0xffff,0x9868,0x676B,0x4276,0x573D,0xffff,0x85D6,0xF5E4,0x82BF,0xF5E6,
+ 0x4C81,0xF5E8,0x5D7B,0xF5EA,0xF5EB,0xF5EC,0xF5ED,0x5B96,0xF5EF,0xffff,
+ 0x7E5B,
+ /* row 141 */
+ 96 | (254 << 8), /* first, last */
+ 0x5D3E,0x5D48,0x5D56,0x3DFC,
+ 0x380F,0x5DA4,0x5DB9,0x3820,0x3838,0x5E42,0x5EBD,0x5F25,0x5F83,0x3908,
+ 0x3914,0x393F,0x394D,0x60D7,0x613D,0x5CE5,0x3989,0x61B7,0x61B9,0x61CF,
+ 0x39B8,0x622C,0x6290,0x62E5,0x6318,0x39F8,0x56B1,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x3A03,0x63E2,0x63FB,0x6407,0x645A,0x3A4B,0x64C0,0x5D15,0x5621,
+ 0x9F9F,0x3A97,0x6586,0x3ABD,0x65FF,0x6653,0x3AF2,0x6692,0x3B22,0x6716,
+ 0x3B42,0x67A4,0x6800,0x3B58,0x684A,0x6884,0x3B72,0x3B71,0x3B7B,0x6909,
+ 0x6943,0x725C,0x6964,0x699F,0x6985,0x3BBC,0x69D6,0x3BDD,0x6A65,0x6A74,
+ 0x6A71,0x6A82,0x3BEC,0x6A99,0x3BF2,0x6AAB,0x6AB5,0x6AD4,0x6AF6,0x6B81,
+ 0x6BC1,0x6BEA,0x6C75,0x6CAA,0x3CCB,0x6D02,0x6D06,0x6D26,0x6D81,0x3CEF,
+ 0x6DA4,0x6DB1,0x6E15,0x6E18,0x6E29,0x6E86,0xF694,0x6EBB,0x6EE2,0x6EDA,
+ 0x9F7F,0x6EE8,0x6EE9,0x6F24,0x6F34,0x3D46,0xF69E,0x6F81,0x6FBE,0x3D6A,
+ 0x3D75,0x71B7,0x5C99,0x3D8A,0x702C,0x3D91,0x7050,0x7054,0x706F,0x707F,
+ 0x7089,0xF6AD,0x43C1,0x35F1,0xF6B0,
+ /* row 142 */
+ 64 | (254 << 8), /* first, last */
+ 0xE311,0x57BE,0xE313,0x713E,0xE315,0x364E,
+ 0x69A2,0xE318,0x5B74,0x7A49,0xE31B,0xE31C,0x7A65,0x7A7D,0xE31F,0x7ABB,
+ 0x7AB0,0x7AC2,0x7AC3,0x71D1,0xE325,0x41CA,0x7ADA,0x7ADD,0x7AEA,0x41EF,
+ 0x54B2,0xE32C,0x7B0B,0x7B55,0x7B29,0xE330,0xE331,0x7BA2,0x7B6F,0x839C,
+ 0xE335,0xE336,0x7BD0,0x8421,0x7B92,0x7BB8,0xE33B,0x3DAD,0xE33D,0x8492,
+ 0x7BFA,0x7C06,0x7C35,0xE342,0x7C44,0x7C83,0xE345,0x7CA6,0x667D,0xE348,
+ 0x7CC9,0x7CC7,0x7CE6,0x7C74,0x7CF3,0x7CF5,0x7CCE,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x7E67,0x451D,0xE352,0x7D5D,0xE354,0x748D,0x7D89,0x7DAB,0x7135,
+ 0x7DB3,0x7DD2,0xE35B,0xE35C,0x7DE4,0x3D13,0x7DF5,0xE360,0x7DE5,0xE362,
+ 0x7E1D,0xE364,0xE365,0x7E6E,0x7E92,0x432B,0x946C,0x7E27,0x7F40,0x7F41,
+ 0x7F47,0x7936,0xE36F,0x99E1,0x7F97,0xE372,0x7FA3,0xE374,0xE375,0x455C,
+ 0xE377,0x4503,0xE379,0x7FFA,0xE37B,0x8005,0x8008,0x801D,0x8028,0x802F,
+ 0xE381,0xE382,0x803B,0x803C,0x8061,0xE386,0x4989,0xE388,0xE389,0xE38A,
+ 0x6725,0x80A7,0xE38D,0x8107,0x811A,0x58B0,0xE391,0x6C7F,0xE393,0xE394,
+ 0x64E7,0xE396,0x8218,0xE398,0x6A53,0xE39A,0xE39B,0x447A,0x8229,0xE39E,
+ 0xE39F,0xE3A0,0x4FF9,0xE3A2,0x84E2,0x8362,0xE3A5,0xE3A6,0xE3A7,0xE3A8,
+ 0xE3A9,0x82AA,0x691B,0xE3AC,0x41DB,
+ /* row 143 */
+ 64 | (254 << 8), /* first, last */
+ 0x854B,0x82D0,0x831A,0xE3B1,0xE3B2,0x36C1,
+ 0xE3B4,0xE3B5,0x827B,0x82E2,0x8318,0xE3B9,0xE3BA,0xE3BB,0xE3BC,0xE3BD,
+ 0x3DBF,0x831D,0x55EC,0x8385,0x450B,0xE3C3,0x83AC,0x83C1,0x83D3,0x347E,
+ 0xE3C8,0x6A57,0x855A,0x3496,0xE3CC,0xE3CD,0x8458,0xE3CF,0x8471,0x3DD3,
+ 0x44E4,0x6AA7,0x844A,0xE3D5,0x7958,0x84A8,0xE3D8,0xE3D9,0xE3DA,0x84DE,
+ 0x840F,0x8391,0x44A0,0x8493,0x84E4,0xE3E1,0x4240,0xE3E3,0x4543,0x8534,
+ 0x5AF2,0xE3E7,0x4527,0x8573,0x4516,0x67BF,0x8616,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xE3ED,0xE3EE,0x85C1,0xE3F0,0x8602,0xE3F2,0xE3F3,0xE3F4,0x456A,
+ 0x8628,0x3648,0xE3F8,0x53F7,0xE3FA,0x867E,0x8771,0xE3FD,0x87EE,0xE3FF,
+ 0x87B1,0x87DA,0x880F,0x5661,0x866C,0x6856,0x460F,0x8845,0x8846,0xE409,
+ 0xE40A,0xE40B,0x885E,0x889C,0x465B,0x88B4,0x88B5,0x63C1,0x88C5,0x7777,
+ 0xE414,0x8987,0x898A,0x89A6,0x89A9,0x89A7,0x89BC,0xE41B,0x89E7,0xE41D,
+ 0xE41E,0x8A9C,0x7793,0x91FE,0x8A90,0xE423,0x7AE9,0xE425,0xE426,0x4713,
+ 0xE428,0x717C,0x8B0C,0x8B1F,0xE42C,0xE42D,0x8B3F,0x8B4C,0x8B4D,0x8AA9,
+ 0xE432,0x8B90,0x8B9B,0x8AAF,0xE436,0x4615,0x884F,0x8C9B,0xE43A,0xE43B,
+ 0xE43C,0x3725,0xE43E,0x8CD6,0xE440,0xE441,0x8D12,0x8D03,0xE444,0x8CDB,
+ 0x705C,0x8D11,0xE448,0x3ED0,0x8D77,
+ /* row 144 */
+ 64 | (254 << 8), /* first, last */
+ 0x8DA9,0xE44C,0xE44D,0xE44E,0x3B7C,0xE450,
+ 0xE451,0x7AE7,0x8EAD,0x8EB6,0x8EC3,0x92D4,0x8F19,0x8F2D,0xE459,0xE45A,
+ 0x8FA5,0x9303,0xE45D,0xE45E,0x8FB3,0x492A,0xE461,0xE462,0xE463,0x5EF8,
+ 0xE465,0x8FF9,0xE467,0xE468,0xE469,0xE46A,0x3980,0xE46C,0x9037,0xE46E,
+ 0xE46F,0x9061,0xE471,0xE472,0x90A8,0xE474,0x90C4,0xE476,0x90AE,0x90FD,
+ 0x9167,0x3AF0,0x91A9,0x91C4,0x7CAC,0xE47E,0xE47F,0x920E,0x6C9F,0x9241,
+ 0x9262,0xE484,0x92B9,0xE486,0xE487,0xE488,0xE489,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xE48A,0x932C,0x936B,0xE48D,0xE48E,0x708F,0x5AC3,0xE491,0xE492,
+ 0x4965,0x9244,0xE495,0xE496,0xE497,0x9373,0x945B,0x8EBC,0x9585,0x95A6,
+ 0x9426,0x95A0,0x6FF6,0x42B9,0xE4A1,0xE4A2,0xE4A3,0xE4A4,0x49DF,0x6C1C,
+ 0x967B,0x9696,0x416C,0x96A3,0xE4AB,0x61DA,0x96B6,0x78F5,0xE4AF,0x96BD,
+ 0x53CC,0x49A1,0xE4B3,0xE4B4,0xE4B5,0xE4B6,0xE4B7,0xE4B8,0xE4B9,0xE4BA,
+ 0x9731,0x8642,0x9736,0x4A0F,0x453D,0x4585,0xE4C1,0x7075,0x5B41,0x971B,
+ 0x975C,0xE4C6,0x9757,0x5B4A,0xE4C9,0x975F,0x9425,0x50D0,0xE4CD,0xE4CE,
+ 0x9789,0x979F,0x97B1,0x97BE,0x97C0,0x97D2,0x97E0,0xE4D6,0x97EE,0x741C,
+ 0xE4D9,0x97FF,0x97F5,0xE4DC,0xE4DD,0x4AD1,0x9834,0x9833,0x984B,0x9866,
+ 0x3B0E,0xE4E4,0x3D51,0xE4E6,0xE4E7,
+ /* row 145 */
+ 64 | (254 << 8), /* first, last */
+ 0xE4E8,0x98CA,0x98B7,0x98C8,0x98C7,0x4AFF,
+ 0xE4EE,0xE4EF,0x55B0,0x98E1,0x98E6,0x98EC,0x9378,0x9939,0xE4F6,0x4B72,
+ 0xE4F8,0xE4F9,0x99F5,0x9A0C,0x9A3B,0x9A10,0x9A58,0xE4FF,0x36C4,0xE501,
+ 0xE502,0x9AE0,0x9AE2,0xE505,0x9AF4,0x4C0E,0x9B14,0x9B2D,0xE50A,0x5034,
+ 0x9B34,0xE50D,0x38C3,0xE50F,0x9B50,0x9B40,0xE512,0x5A45,0xE514,0x9B8E,
+ 0xE516,0x9C02,0x9BFF,0x9C0C,0xE51A,0x9DD4,0xE51C,0xE51D,0xE51E,0xE51F,
+ 0xE520,0xE521,0x9D7E,0x9D83,0xE524,0x9E0E,0x6888,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x9DC4,0xE528,0xE529,0xE52A,0xE52B,0xE52C,0x9D39,0xE52E,0xE52F,
+ 0x9E90,0x9E95,0x9E9E,0x9EA2,0x4D34,0x9EAA,0x9EAF,0xE537,0x9EC1,0x3B60,
+ 0x39E5,0x3D1D,0x4F32,0x37BE,0xE53E,0x9F02,0x9F08,0x4B96,0x9424,0xE543,
+ 0x9F17,0x9F16,0x9F39,0x569F,0x568A,0x9F45,0x99B8,0xE54B,0x97F2,0x847F,
+ 0x9F62,0x9F69,0x7ADC,0x9F8E,0x7216,0x4BBE,0xE554,0xE555,0x7177,0xE557,
+ 0xE558,0xE559,0x739E,0xE55B,0xE55C,0x799F,0xE55E,0xE55F,0x9369,0x93F3,
+ 0xE562,0x92EC,0x9381,0x93CB,0xE566,0xE567,0x7217,0x3EEB,0x7772,0x7A43,
+ 0x70D0,0xE56D,0xE56E,0x717E,0xE570,0x70A3,0xE572,0xE573,0x3EC7,0xE575,
+ 0xE576,0xE577,0x3722,0xE579,0xE57A,0x36E1,0xE57C,0xE57D,0xE57E,0x3723,
+ 0xE580,0x575B,0xE582,0xE583,0xE584,
+ /* row 146 */
+ 64 | (254 << 8), /* first, last */
+ 0xE585,0xE586,0x8503,0xE588,0x8503,0x8455,
+ 0xE58B,0xE58C,0xE58D,0xE58E,0xE58F,0xE590,0x44F4,0xE592,0xE593,0xE594,
+ 0x67F9,0x3733,0x3C15,0x3DE7,0x586C,0xE59A,0x6810,0x4057,0xE59D,0xE59E,
+ 0xE59F,0xE5A0,0xE5A1,0x54CB,0x569E,0xE5A4,0x5692,0xE5A6,0xE5A7,0xE5A8,
+ 0x93C6,0xE5AA,0x939C,0x4EF8,0x512B,0x3819,0xE5AF,0x4EBC,0xE5B1,0xE5B2,
+ 0x4F4B,0x4F8A,0xE5B5,0x5A68,0xE5B7,0xE5B8,0x3999,0xE5BA,0xE5BB,0x3435,
+ 0x4F29,0xE5BE,0xE5BF,0xE5C0,0x8ADA,0xE5C2,0x4E98,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x50CD,0x510D,0x4FA2,0x4F03,0xE5C8,0xE5C9,0x4F42,0x502E,0x506C,
+ 0x5081,0x4FCC,0x4FE5,0x5058,0x50FC,0x5159,0x515B,0x515D,0x515E,0x6E76,
+ 0xE5D7,0xE5D8,0xE5D9,0x6D72,0xE5DB,0xE5DC,0x51A8,0x51C3,0xE5DF,0x44DD,
+ 0xE5E1,0xE5E2,0xE5E3,0x8D7A,0xE5E5,0xE5E6,0x5259,0x52A4,0xE5E9,0x52E1,
+ 0x936E,0x467A,0x718C,0xE5EE,0xE5EF,0xE5F0,0xE5F1,0x69D1,0xE5F3,0x7479,
+ 0x3EDE,0x7499,0x7414,0x7456,0x7398,0x4B8E,0xE5FB,0xE5FC,0x53D0,0x3584,
+ 0x720F,0xE600,0x55B4,0xE602,0x54CD,0xE604,0x571D,0x925D,0x96F4,0x9366,
+ 0x57DD,0x578D,0x577F,0x363E,0x58CB,0x5A99,0xE60F,0xE610,0xE611,0xE612,
+ 0x5A2C,0x59B8,0x928F,0x5A7E,0x5ACF,0x5A12,0xE619,0xE61A,0xE61B,0xE61C,
+ 0x36F5,0x6D05,0x7443,0x5A21,0xE621,
+ /* row 147 */
+ 64 | (254 << 8), /* first, last */
+ 0x5A81,0xE623,0xE624,0x93E0,0x748C,0xE627,
+ 0x7105,0x4972,0x9408,0xE62B,0x93BD,0x37A0,0x5C1E,0x5C9E,0x5E5E,0x5E48,
+ 0xE632,0xE633,0xE634,0x5ECD,0x5B4F,0xE637,0xE638,0x3701,0xE63A,0x36DD,
+ 0xE63C,0x36D3,0x812A,0xE63F,0xE640,0xE641,0xE642,0x5F0C,0x5F0E,0xE645,
+ 0xE646,0x5A6B,0xE648,0x5B44,0x8614,0xE64B,0x8860,0x607E,0xE64E,0xE64F,
+ 0x5FDB,0x3EB8,0xE652,0xE653,0xE654,0xE655,0x61C0,0xE657,0xE658,0xE659,
+ 0x6199,0x6198,0x6075,0xE65D,0xE65E,0xE65F,0xE660,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x6471,0xE662,0xE663,0x3A29,0xE665,0xE666,0xE667,0xE668,0x6337,
+ 0xE66A,0x64B6,0x6331,0x63D1,0xE66E,0xE66F,0x62A4,0xE671,0x643B,0x656B,
+ 0x6972,0x3BF4,0xE676,0xE677,0xE678,0xE679,0x550D,0xE67B,0xE67C,0xE67D,
+ 0x66CE,0xE67F,0xE680,0x3AE0,0x4190,0xE683,0xE684,0xE685,0xE686,0xE687,
+ 0xE688,0x78EE,0xE68A,0xE68B,0xE68C,0x3464,0xE68E,0xE68F,0xE690,0x668E,
+ 0xE692,0x666B,0x4B93,0x6630,0xE696,0xE697,0x6663,0xE699,0xE69A,0x661E,
+ 0xE69C,0x38D1,0xE69E,0xE69F,0x3B99,0xE6A1,0xE6A2,0x74D0,0x3B96,0x678F,
+ 0xE6A6,0x68B6,0x681E,0x3BC4,0x6ABE,0x3863,0xE6AC,0xE6AD,0x6A33,0x6A52,
+ 0x6AC9,0x6B05,0xE6B2,0x6511,0x6898,0x6A4C,0x3BD7,0x6A7A,0x6B57,0xE6B9,
+ 0xE6BA,0x93A0,0x92F2,0xE6BD,0xE6BE,
+ /* row 148 */
+ 64 | (254 << 8), /* first, last */
+ 0x9289,0xE6C0,0xE6C1,0x9467,0x6DA5,0x6F0B,
+ 0xE6C5,0x6D67,0xE6C7,0x3D8F,0x6E04,0xE6CA,0x5A3D,0x6E0A,0x5847,0x6D24,
+ 0x7842,0x713B,0xE6D1,0xE6D2,0x70F1,0x7250,0x7287,0x7294,0xE6D7,0xE6D8,
+ 0x5179,0xE6DA,0xE6DB,0x747A,0xE6DD,0xE6DE,0xE6DF,0xE6E0,0xE6E1,0x3F06,
+ 0x3EB1,0xE6E4,0xE6E5,0xE6E6,0x60A7,0x3EF3,0x74CC,0x743C,0x9387,0x7437,
+ 0x449F,0xE6EE,0x4551,0x7583,0x3F63,0xE6F2,0xE6F3,0x3F58,0x7555,0x7673,
+ 0xE6F7,0x3B19,0x7468,0xE6FA,0xE6FB,0xE6FC,0x3AFB,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x3DCD,0xE6FF,0x3EFF,0xE701,0xE702,0x91FA,0x5732,0x9342,0xE706,
+ 0xE707,0x50DF,0xE709,0xE70A,0x7778,0xE70C,0x770E,0x770F,0x777B,0xE710,
+ 0xE711,0x3A5E,0xE713,0x7438,0x749B,0x3EBF,0xE717,0xE718,0x40C8,0xE71A,
+ 0xE71B,0x9307,0xE71D,0x781E,0x788D,0x7888,0x78D2,0x73D0,0x7959,0xE724,
+ 0xE725,0x410E,0x799B,0x8496,0x79A5,0x6A2D,0xE72B,0x7A3A,0x79F4,0x416E,
+ 0xE72F,0x4132,0x9235,0x79F1,0xE733,0xE734,0xE735,0xE736,0xE737,0x3597,
+ 0x556B,0x3570,0x36AA,0xE73C,0xE73D,0x7AE2,0x5A59,0xE740,0xE741,0xE742,
+ 0x5A0D,0xE744,0x78F0,0x5A2A,0xE747,0x7AFE,0x41F9,0x7C5D,0x7C6D,0x4211,
+ 0xE74D,0xE74E,0xE74F,0x7CCD,0xE751,0xE752,0x7C8E,0x7C7C,0x7CAE,0x6AB2,
+ 0x7DDC,0x7E07,0x7DD3,0x7F4E,0xE75B,
+ /* row 149 */
+ 64 | (254 << 8), /* first, last */
+ 0xE75C,0xE75D,0x7D97,0xE75F,0x426A,0xE761,
+ 0xE762,0x67D6,0xE764,0xE765,0x57C4,0xE767,0xE768,0xE769,0x7FDD,0x7B27,
+ 0xE76C,0xE76D,0xE76E,0x7B0C,0xE770,0x99E6,0x8645,0x9A63,0x6A1C,0xE775,
+ 0x39E2,0xE777,0xE778,0x9A1F,0xE77A,0x8480,0xE77C,0xE77D,0x44EA,0x8137,
+ 0x4402,0x80C6,0x8109,0x8142,0xE784,0x98C3,0xE786,0x8262,0x8265,0xE789,
+ 0x8453,0xE78B,0x8610,0xE78D,0x5A86,0x417F,0xE790,0x5B2B,0xE792,0x5AE4,
+ 0xE794,0x86A0,0xE796,0xE797,0x882D,0xE799,0x5A02,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x886E,0x4F45,0x8887,0x88BF,0x88E6,0x8965,0x894D,0xE7A2,0x8954,
+ 0xE7A4,0xE7A5,0xE7A6,0xE7A7,0xE7A8,0xE7A9,0x3EAD,0x84A3,0x46F5,0x46CF,
+ 0x37F2,0x8A3D,0x8A1C,0xE7B1,0x5F4D,0x922B,0xE7B4,0x65D4,0x7129,0x70C4,
+ 0xE7B8,0x9D6D,0x8C9F,0x8CE9,0xE7BC,0x599A,0x77C3,0x59F0,0x436E,0x36D4,
+ 0x8E2A,0x8EA7,0xE7C4,0x8F30,0x8F4A,0x42F4,0x6C58,0x6FBB,0xE7CA,0x489B,
+ 0x6F79,0x6E8B,0xE7CE,0x9BE9,0x36B5,0xE7D1,0x90BB,0x9097,0x5571,0x4906,
+ 0x91BB,0x9404,0xE7D8,0x4062,0xE7DA,0x9427,0xE7DC,0xE7DD,0x84E5,0x8A2B,
+ 0x9599,0x95A7,0x9597,0x9596,0xE7E4,0x7445,0x3EC2,0xE7E7,0xE7E8,0xE7E9,
+ 0x3EE7,0xE7EB,0x968F,0xE7ED,0xE7EE,0xE7EF,0x3ECC,0xE7F1,0xE7F2,0xE7F3,
+ 0x7412,0x746B,0x3EFC,0x9741,0xE7F8,
+ /* row 150 */
+ 64 | (254 << 8), /* first, last */
+ 0x6847,0x4A1D,0xE7FB,0xE7FC,0x975D,0x9368,
+ 0xE7FF,0xE800,0xE801,0xE802,0x92BA,0x5B11,0x8B69,0x493C,0x73F9,0xE808,
+ 0x979B,0x9771,0x9938,0xE80C,0x5DC1,0xE80E,0xE80F,0x981F,0xE811,0x92F6,
+ 0xE813,0x91E5,0x44C0,0xE816,0xE817,0xE818,0x98DC,0xE81A,0x3F00,0x922A,
+ 0x4925,0x8414,0x993B,0x994D,0xE821,0x3DFD,0x999B,0x4B6F,0x99AA,0x9A5C,
+ 0xE827,0xE828,0x6A8F,0x9A21,0x5AFE,0x9A2F,0xE82D,0x4B90,0xE82F,0x99BC,
+ 0x4BBD,0x4B97,0x937D,0x5872,0xE835,0x5822,0xE837,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xE838,0x7844,0xE83A,0xE83B,0x68C5,0x3D7D,0x9458,0x3927,0x6150,
+ 0xE841,0xE842,0x6107,0x9C4F,0x9C53,0x9C7B,0x9C35,0x9C10,0x9B7F,0x9BCF,
+ 0xE84B,0x9B9F,0xE84D,0xE84E,0x9D21,0x4CAE,0xE851,0x9E18,0x4CB0,0x9D0C,
+ 0xE855,0xE856,0xE857,0xE858,0x9DA5,0x84BD,0xE85B,0xE85C,0xE85D,0x85FC,
+ 0x4533,0xE860,0xE861,0xE862,0x8420,0x85EE,0xE865,0xE866,0xE867,0x79E2,
+ 0xE869,0xE86A,0x492D,0xE86C,0x3D62,0x93DB,0x92BE,0x9348,0xE871,0x78B9,
+ 0x9277,0x944D,0x4FE4,0x3440,0x9064,0xE878,0x783D,0x7854,0x78B6,0x784B,
+ 0xE87D,0xE87E,0xE87F,0x369A,0x4F72,0x6FDA,0x6FD9,0x701E,0x701E,0x5414,
+ 0xE887,0x57BB,0x58F3,0x578A,0x9D16,0x57D7,0x7134,0x34AF,0xE88F,0x71EB,
+ 0xE891,0xE892,0x5B28,0xE894,0xE895,
+ /* row 151 */
+ 64 | (254 << 8), /* first, last */
+ 0x610C,0x5ACE,0x5A0B,0x42BC,0xE89A,0x372C,
+ 0x4B7B,0xE89D,0x93BB,0x93B8,0xE8A0,0xE8A1,0x8472,0xE8A3,0xE8A4,0xE8A5,
+ 0xE8A6,0xE8A7,0x5994,0xE8A9,0xE8AA,0x7DA8,0xE8AC,0xE8AD,0xE8AE,0xE8AF,
+ 0xE8B0,0x92E5,0x73E2,0x3EE9,0x74B4,0xE8B5,0xE8B6,0x3EE1,0xE8B8,0x6AD8,
+ 0x73F3,0x73FB,0x3ED6,0xE8BD,0xE8BE,0xE8BF,0xE8C0,0xE8C1,0xE8C2,0xE8C3,
+ 0x7448,0xE8C5,0x70A5,0xE8C7,0x9284,0x73E6,0x935F,0xE8CB,0x9331,0xE8CD,
+ 0xE8CE,0x9386,0xE8D0,0xE8D1,0x4935,0xE8D3,0x716B,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xE8D5,0xE8D6,0x56A4,0xE8D8,0xE8D9,0xE8DA,0x5502,0x79C4,0xE8DD,
+ 0x7DFE,0xE8DF,0xE8E0,0xE8E1,0x452E,0x9401,0x370A,0xE8E5,0xE8E6,0x59B0,
+ 0xE8E8,0xE8E9,0xE8EA,0x5AA1,0x36E2,0xE8ED,0x36B0,0x925F,0x5A79,0xE8F1,
+ 0xE8F2,0x9374,0x3CCD,0xE8F5,0x4A96,0x398A,0x50F4,0x3D69,0x3D4C,0xE8FB,
+ 0x7175,0x42FB,0xE8FE,0x6E0F,0xE900,0x44EB,0x6D57,0xE903,0x7067,0x6CAF,
+ 0x3CD6,0xE907,0xE908,0x6E02,0x6F0C,0x3D6F,0xE90C,0x7551,0x36BC,0x34C8,
+ 0x4680,0x3EDA,0x4871,0x59C4,0x926E,0x493E,0x8F41,0xE917,0xE918,0x5812,
+ 0x57C8,0x36D6,0xE91C,0x70FE,0xE91E,0xE91F,0xE920,0xE921,0xE922,0x68B9,
+ 0x6967,0xE925,0xE926,0xE927,0xE928,0xE929,0xE92A,0xE92B,0xE92C,0x6A1A,
+ 0xE92E,0xE92F,0x843E,0x44DF,0x44CE,
+ /* row 152 */
+ 64 | (254 << 8), /* first, last */
+ 0xE933,0xE934,0xE935,0xE936,0x6F17,0xE938,
+ 0x833D,0xE93A,0x83ED,0xE93C,0xE93D,0xE93E,0x5989,0x5A82,0xE941,0x5A61,
+ 0x5A71,0xE944,0xE945,0x372D,0x59EF,0xE948,0x36C7,0x718E,0x9390,0x669A,
+ 0xE94D,0x5A6E,0x5A2B,0xE950,0x6A2B,0xE952,0xE953,0xE954,0xE955,0x711D,
+ 0xE957,0xE958,0x4FB0,0xE95A,0x5CC2,0xE95C,0xE95D,0xE95E,0x6A0C,0xE960,
+ 0xE961,0x70A6,0x7133,0xE964,0x3DA5,0x6CDF,0xE967,0xE968,0x7E65,0x59EB,
+ 0x5D2F,0x3DF3,0x5F5C,0xE96E,0xE96F,0x7DA4,0x8426,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x5485,0xE973,0xE974,0xE975,0x577E,0xE977,0xE978,0x3FE5,0xE97A,
+ 0xE97B,0x7003,0xE97D,0x5D70,0x738F,0x7CD3,0xE981,0xE982,0x4FC8,0x7FE7,
+ 0x72CD,0x7310,0xE987,0x7338,0x7339,0xE98A,0x7341,0x7348,0x3EA9,0xE98E,
+ 0x906C,0x71F5,0xE991,0x73E1,0x81F6,0x3ECA,0x770C,0x3ED1,0x6CA2,0x56FD,
+ 0x7419,0x741E,0x741F,0x3EE2,0x3EF0,0x3EF4,0x3EFA,0x74D3,0x3F0E,0x3F53,
+ 0x7542,0x756D,0x7572,0x758D,0x3F7C,0x75C8,0x75DC,0x3FC0,0x764D,0x3FD7,
+ 0x7674,0x3FDC,0x767A,0xE9B0,0x7188,0x5623,0x8980,0x5869,0x401D,0x7743,
+ 0x4039,0x6761,0x4045,0x35DB,0x7798,0x406A,0x406F,0x5C5E,0x77BE,0x77CB,
+ 0x58F2,0x7818,0x70B9,0x781C,0x40A8,0x7839,0x7847,0x7851,0x7866,0x8448,
+ 0xE9CB,0x7933,0x6803,0x7932,0x4103,
+ /* row 153 */
+ 64 | (254 << 8), /* first, last */
+ 0x4109,0x7991,0x7999,0x8FBB,0x7A06,0x8FBC,
+ 0x4167,0x7A91,0x41B2,0x7ABC,0x8279,0x41C4,0x7ACF,0x7ADB,0x41CF,0x4E21,
+ 0x7B62,0x7B6C,0x7B7B,0x7C12,0x7C1B,0x4260,0x427A,0x7C7B,0x7C9C,0x428C,
+ 0x7CB8,0x4294,0x7CED,0x8F93,0x70C0,0xE9EF,0x7DCF,0x7DD4,0x7DD0,0x7DFD,
+ 0x7FAE,0x7FB4,0x729F,0x4397,0x8020,0x8025,0x7B39,0x802E,0x8031,0x8054,
+ 0x3DCC,0x57B4,0x70A0,0x80B7,0x80E9,0x43ED,0x810C,0x732A,0x810E,0x8112,
+ 0x7560,0x8114,0x4401,0x3B39,0x8156,0x8159,0x815A,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x4413,0x583A,0x817C,0x8184,0x4425,0x8193,0x442D,0x81A5,0x57EF,
+ 0x81C1,0x81E4,0x8254,0x448F,0x82A6,0x8276,0x82CA,0x82D8,0x82FF,0x44B0,
+ 0x8357,0x9669,0x698A,0x8405,0x70F5,0x8464,0x60E3,0x8488,0x4504,0x84BE,
+ 0x84E1,0x84F8,0x8510,0x8538,0x8552,0x453B,0x856F,0x8570,0x85E0,0x4577,
+ 0x8672,0x8692,0x86B2,0x86EF,0x9645,0x878B,0x4606,0x4617,0x88AE,0x88FF,
+ 0x8924,0x8947,0x8991,0xEA43,0x8A29,0x8A38,0x8A94,0x8AB4,0x8C51,0x8CD4,
+ 0x8CF2,0x8D1C,0x4798,0x585F,0x8DC3,0x47ED,0x4EEE,0x8E3A,0x55D8,0x5754,
+ 0x8E71,0x55F5,0x8EB0,0x4837,0x8ECE,0x8EE2,0x8EE4,0x8EED,0x8EF2,0x8FB7,
+ 0x8FC1,0x8FCA,0x8FCC,0x9033,0x99C4,0x48AD,0x98E0,0x9213,0x491E,0x9228,
+ 0x9258,0x926B,0x92B1,0x92AE,0x92BF,
+ /* row 154 */
+ 64 | (254 << 8), /* first, last */
+ 0x92E3,0x92EB,0x92F3,0x92F4,0x92FD,0x9343,
+ 0x9384,0x93AD,0x4945,0x4951,0x9EBF,0x9417,0x5301,0x941D,0x942D,0x943E,
+ 0x496A,0x9454,0x9479,0x952D,0x95A2,0x49A7,0x95F4,0x9633,0x49E5,0x67A0,
+ 0x4A24,0x9740,0x4A35,0x97B2,0x97C2,0x5654,0x4AE4,0x60E8,0x98B9,0x4B19,
+ 0x98F1,0x5844,0x990E,0x9919,0x51B4,0x991C,0x9937,0x9942,0x995D,0x9962,
+ 0x4B70,0x99C5,0x4B9D,0x9A3C,0x9B0F,0x7A83,0x9B69,0x9B81,0x9BDD,0x9BF1,
+ 0x9BF4,0x4C6D,0x9C20,0x376F,0xEAA9,0x9D49,0x9C3A,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x9EFE,0x5650,0x9D93,0x9DBD,0x9DC0,0x9DFC,0x94F6,0x8FB6,0x9E7B,
+ 0x9EAC,0x9EB1,0x9EBD,0x9EC6,0x94DC,0x9EE2,0x9EF1,0x9EF8,0x7AC8,0x9F44,
+ 0xEABF,0xEAC0,0xEAC1,0x691A,0x94C3,0x59AC,0xEAC5,0x5840,0x94C1,0x37B9,
+ 0xEAC9,0xEACA,0xEACB,0xEACC,0x5757,0x7173,0xEACF,0xEAD0,0xEAD1,0x546A,
+ 0xEAD3,0xEAD4,0x549E,0xEAD6,0xEAD7,0xEAD8,0xEAD9,0xEADA,0x60E7,0xEADC,
+ 0x567A,0xEADE,0xEADF,0xEAE0,0xEAE1,0xEAE2,0xEAE3,0x6955,0x9C2F,0x87A5,
+ 0xEAE7,0xEAE8,0xEAE9,0xEAEA,0xEAEB,0xEAEC,0x5C20,0xEAEE,0x5E0B,0xEAF0,
+ 0xEAF1,0xEAF2,0x671E,0xEAF4,0xEAF5,0xEAF6,0x3647,0xEAF8,0xEAF9,0xEAFA,
+ 0xEAFB,0x5364,0x84AD,0xEAFE,0xEAFF,0xEB00,0x8B81,0xEB02,0xEB03,0xEB04,
+ 0xEB05,0x4E78,0x70BB,0xEB08,0xEB09,
+ /* row 155 */
+ 64 | (254 << 8), /* first, last */
+ 0xEB0A,0xEB0B,0xEB0C,0xEB0D,0xEB0E,0xEB0F,
+ 0x62C3,0xEB11,0xEB12,0x7198,0x6855,0xEB15,0x69E9,0x36C8,0xEB18,0xEB19,
+ 0xEB1A,0xEB1B,0xEB1C,0xEB1D,0x82FD,0xEB1F,0xEB20,0xEB21,0x89A5,0xEB23,
+ 0x8FA0,0xEB25,0x97B8,0xEB27,0x9847,0x9ABD,0xEB2A,0xffff,0xEB2C,0xEB2D,
+ 0xEB2E,0xEB2F,0xEB30,0xEB31,0xEB32,0xEB33,0xEB34,0xEB35,0xEB36,0xEB37,
+ 0xEB38,0xEB39,0x5FB1,0x6648,0x66BF,0xEB3D,0xEB3E,0xEB3F,0x7201,0xEB41,
+ 0x77D7,0xEB43,0xEB44,0x7E87,0xEB46,0x58B5,0x670E,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x6918,0xEB4A,0xEB4B,0xEB4C,0xEB4D,0xEB4E,0xEB4F,0xEB50,0x48D0,
+ 0x4AB8,0xEB53,0xEB54,0xEB55,0xEB56,0xEB57,0xEB58,0xEB59,0xEB5A,0xEB5B,
+ 0x51D2,0xEB5D,0x599F,0xEB5F,0x3BBE,0xEB61,0xEB62,0xEB63,0x5788,0xEB65,
+ 0x399B,0xEB67,0xEB68,0xEB69,0x3762,0xEB6B,0x8B5E,0xEB6D,0x99D6,0xEB6F,
+ 0xEB70,0xEB71,0x7209,0xEB73,0xEB74,0x5965,0xEB76,0xEB77,0xEB78,0x8EDA,
+ 0xEB7A,0x528F,0x573F,0x7171,0xEB7E,0xEB7F,0xEB80,0xEB81,0x55BC,0xEB83,
+ 0xEB84,0xEB85,0x91D4,0x3473,0xEB88,0xEB89,0xEB8A,0x4718,0xEB8C,0xEB8D,
+ 0xEB8E,0xEB8F,0xEB90,0x5066,0x34FB,0xEB93,0x60DE,0xEB95,0x477C,0xEB97,
+ 0xEB98,0xEB99,0xEB9A,0xEB9B,0x57A1,0x7151,0x6FB6,0xEB9F,0xEBA0,0x9056,
+ 0xEBA2,0xEBA3,0x8B62,0xEBA5,0xEBA6,
+ /* row 156 */
+ 64 | (254 << 8), /* first, last */
+ 0x5D5B,0xEBA8,0x8F36,0xEBAA,0xEBAB,0x8AEA,
+ 0xEBAD,0xEBAE,0xEBAF,0xEBB0,0x4BC0,0xEBB2,0xEBB3,0xEBB4,0x9465,0xEBB6,
+ 0x6195,0x5A27,0xEBB9,0x4FBB,0x56B9,0xEBBC,0xEBBD,0x4E6A,0xEBBF,0x9656,
+ 0x6D8F,0xEBC2,0x3618,0x8977,0xEBC5,0xEBC6,0xEBC7,0xEBC8,0x71DF,0xEBCA,
+ 0x7B42,0xEBCC,0xEBCD,0xEBCE,0x9104,0xEBD0,0x7A45,0x9DF0,0xEBD3,0x9A26,
+ 0xEBD5,0x365F,0xEBD7,0xEBD8,0x7983,0xEBDA,0xEBDB,0x5D2C,0xEBDD,0x83CF,
+ 0xEBDF,0x46D0,0xEBE1,0x753B,0x8865,0xEBE4,0x58B6,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x371C,0xEBE7,0xEBE8,0xEBE9,0x3C54,0xEBEB,0xEBEC,0x9281,0xEBEE,
+ 0xEBEF,0x9330,0xEBF1,0xEBF2,0x6C39,0x949F,0xEBF5,0xEBF6,0x8827,0x88F5,
+ 0xEBF9,0xEBFA,0xEBFB,0x6EB8,0xEBFD,0xEBFE,0x39A4,0x36B9,0x5C10,0x79E3,
+ 0x453F,0x66B6,0xEC05,0xEC06,0x8943,0xEC08,0xEC09,0x56D6,0x40DF,0xEC0C,
+ 0x39A1,0xEC0E,0xEC0F,0xEC10,0x71AD,0x8366,0xEC13,0xEC14,0x5A67,0x4CB7,
+ 0xEC17,0xEC18,0xEC19,0xEC1A,0xEC1B,0xEC1C,0xEC1D,0x7B43,0x797E,0xEC20,
+ 0x6FB5,0xEC22,0x6A03,0xEC24,0x53A2,0xEC26,0x93BF,0x6836,0x975D,0xEC2A,
+ 0xEC2B,0xEC2C,0xEC2D,0xEC2E,0xEC2F,0x5D85,0xEC31,0xEC32,0x5715,0x9823,
+ 0xEC35,0x5DAB,0xEC37,0x65BE,0x69D5,0x53D2,0xEC3B,0xEC3C,0x3C11,0x6736,
+ 0xEC3F,0xEC40,0xEC41,0xEC42,0xEC43,
+ /* row 157 */
+ 64 | (254 << 8), /* first, last */
+ 0xEC44,0xEC45,0xEC46,0xEC47,0xEC48,0xEC49,
+ 0x35CA,0xEC4B,0xEC4C,0x48FA,0x63E6,0xEC4F,0x7808,0x9255,0xEC52,0x43F2,
+ 0xEC54,0x43DF,0xEC56,0xEC57,0xEC58,0x59F8,0xEC5A,0x8F0B,0xEC5C,0xEC5D,
+ 0x7B51,0xEC5F,0xEC60,0x3DF7,0xEC62,0xEC63,0x8FD0,0x728F,0x568B,0xEC67,
+ 0xEC68,0xEC69,0xEC6A,0xEC6B,0xEC6C,0xEC6D,0xEC6E,0xEC6F,0xEC70,0xEC71,
+ 0xEC72,0xEC73,0x7E9F,0xEC75,0xEC76,0x4CA4,0x9547,0xEC79,0x71A2,0xEC7B,
+ 0x4D91,0x9012,0xEC7E,0x4D9C,0xEC80,0x8FBE,0x55C1,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x8FBA,0xEC84,0x8FB9,0xEC86,0x4509,0x7E7F,0x6F56,0x6AB1,0x4EEA,
+ 0x34E4,0xEC8D,0xEC8E,0x373A,0x8E80,0xEC91,0xEC92,0xEC93,0xEC94,0xEC95,
+ 0xEC96,0x3DEB,0xEC98,0xEC99,0xEC9A,0xEC9B,0x4E9A,0xEC9D,0xEC9E,0x56BF,
+ 0xECA0,0x8E0E,0x5B6D,0xECA3,0xECA4,0x63DE,0x62D0,0xECA7,0xECA8,0x6530,
+ 0x562D,0xECAB,0x541A,0xECAD,0x3DC6,0xECAF,0x4C7D,0x5622,0x561E,0x7F49,
+ 0xECB4,0x5975,0xECB6,0x8770,0x4E1C,0xECB9,0xECBA,0xECBB,0x8117,0x9D5E,
+ 0x8D18,0x763B,0x9C45,0x764E,0x77B9,0x9345,0x5432,0x8148,0x82F7,0x5625,
+ 0x8132,0x8418,0x80BD,0x55EA,0x7962,0x5643,0x5416,0xECCF,0x35CE,0x5605,
+ 0x55F1,0x66F1,0xECD4,0x362D,0x7534,0x55F0,0x55BA,0x5497,0x5572,0xECDB,
+ 0xECDC,0x5ED0,0xECDE,0xECDF,0xECE0,
+ /* row 158 */
+ 64 | (254 << 8), /* first, last */
+ 0xECE1,0x9EAB,0x7D5A,0x55DE,0xECE5,0x629D,
+ 0x976D,0x5494,0x8CCD,0x71F6,0x9176,0x63FC,0x63B9,0x63FE,0x5569,0xECF0,
+ 0x9C72,0xECF2,0x519A,0x34DF,0xECF5,0x51A7,0x544D,0x551E,0x5513,0x7666,
+ 0x8E2D,0xECFC,0x75B1,0x80B6,0x8804,0x8786,0x88C7,0x81B6,0x841C,0xED04,
+ 0x44EC,0x7304,0xED07,0x5B90,0x830B,0xED0A,0x567B,0xED0C,0xED0D,0xED0E,
+ 0xED0F,0xED10,0xED11,0x9170,0xED13,0x9208,0xED15,0xED16,0xED17,0xED18,
+ 0x7266,0xED1A,0x474E,0xED1C,0xED1D,0xED1E,0x40FA,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x9C5D,0x651F,0xED22,0x48F3,0xED24,0xED25,0xED26,0xED27,0x6062,
+ 0xED29,0xED2A,0xffff,0xED2C,0xED2D,0x71A3,0x7E8E,0x9D50,0x4E1A,0x4E04,
+ 0x3577,0x5B0D,0x6CB2,0x5367,0x36AC,0x39DC,0x537D,0x36A5,0xED3B,0x589A,
+ 0xED3D,0x822D,0x544B,0x57AA,0xED41,0xED42,0xffff,0x3A52,0xED45,0x7374,
+ 0xED47,0x4D09,0x9BED,0xED4A,0xED4B,0x4C5B,0xED4D,0xED4E,0xED4F,0x845C,
+ 0xED51,0xED52,0xED53,0xED54,0x632E,0x7D25,0xED57,0xED58,0x3A2A,0x9008,
+ 0x52CC,0x3E74,0x367A,0x45E9,0xED5F,0x7640,0x5AF0,0xED62,0x787A,0x47B6,
+ 0x58A7,0x40BF,0x567C,0x9B8B,0x5D74,0x7654,0xED6B,0x9E85,0x4CE1,0x75F9,
+ 0x37FB,0x6119,0xED71,0xED72,0xffff,0x565D,0xED75,0x57A7,0xED77,0xED78,
+ 0x5234,0xED7A,0x35AD,0x6C4A,0x9D7C,
+ /* row 159 */
+ 64 | (254 << 8), /* first, last */
+ 0x7C56,0x9B39,0x57DE,0xED81,0x5C53,0x64D3,
+ 0xED84,0xED85,0xED86,0x86AD,0xED88,0xED89,0xED8A,0xED8B,0xffff,0x51FE,
+ 0xED8E,0x5D8E,0x9703,0xED91,0x9E81,0x904C,0x7B1F,0x9B02,0x5CD1,0x7BA3,
+ 0x6268,0x6335,0x9AFF,0x7BCF,0x9B2A,0x7C7E,0x9B2E,0x7C42,0x7C86,0x9C15,
+ 0x7BFC,0x9B09,0x9F17,0x9C1B,0xEDA6,0x9F5A,0x5573,0x5BC3,0x4FFD,0x9E98,
+ 0x4FF2,0x5260,0x3E06,0x52D1,0x5767,0x5056,0x59B7,0x5E12,0x97C8,0x9DAB,
+ 0x8F5C,0x5469,0x97B4,0x9940,0x97BA,0x532C,0x6130,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x692C,0x53DA,0x9C0A,0x9D02,0x4C3B,0x9641,0x6980,0x50A6,0x7546,
+ 0xEDC6,0x99DA,0x5273,0xffff,0x9159,0x9681,0x915C,0xffff,0x9151,0xEDCF,
+ 0x637F,0xEDD1,0x6ACA,0x5611,0x918E,0x757A,0x6285,0xEDD7,0x734F,0x7C70,
+ 0xEDDA,0xEDDB,0xffff,0xEDDD,0x76D6,0x9B9D,0x4E2A,0xEDE1,0x83BE,0x8842,
+ 0xffff,0x5C4A,0x69C0,0x50ED,0x577A,0x521F,0x5DF5,0x4ECE,0x6C31,0xEDED,
+ 0x4F39,0x549C,0x54DA,0x529A,0x8D82,0x35FE,0x5F0C,0x35F3,0xffff,0x6B52,
+ 0x917C,0x9FA5,0x9B97,0x982E,0x98B4,0x9ABA,0x9EA8,0x9E84,0x717A,0x7B14,
+ 0xffff,0x6BFA,0x8818,0x7F78,0xffff,0x5620,0xEE08,0x8E77,0x9F53,0xffff,
+ 0x8DD4,0x8E4F,0x9E1C,0x8E01,0x6282,0xEE11,0x8E28,0x8E75,0x7AD3,0xEE15,
+ 0x7A3E,0x78D8,0x6CEA,0x8A67,0x7607,
+ /* row 160 */
+ 64 | (254 << 8), /* first, last */
+ 0xEE1B,0x9F26,0x6CCE,0x87D6,0x75C3,0xEE20,
+ 0x7853,0xEE22,0x8D0C,0x72E2,0x7371,0x8B2D,0x7302,0x74F1,0x8CEB,0xEE2A,
+ 0x862F,0x5FBA,0x88A0,0x44B7,0xffff,0xEE30,0xEE31,0xffff,0x8A7E,0xEE34,
+ 0xffff,0x60FD,0x7667,0x9AD7,0x9D44,0x936E,0x9B8F,0x87F5,0xffff,0x880F,
+ 0x8CF7,0x732C,0x9721,0x9BB0,0x35D6,0x72B2,0x4C07,0x7C51,0x994A,0xEE48,
+ 0x6159,0x4C04,0x9E96,0x617D,0xffff,0x575F,0x616F,0x62A6,0x6239,0x62CE,
+ 0x3A5C,0x61E2,0x53AA,0xEE56,0x6364,0x6802,0x35D2,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x5D57,0xEE5B,0x8FDA,0xEE5D,0xffff,0x50D9,0xEE60,0x7906,0x5332,
+ 0x9638,0xEE64,0x4065,0xffff,0x77FE,0xffff,0x7CC2,0xEE6A,0x7CDA,0x7A2D,
+ 0x8066,0x8063,0x7D4D,0x7505,0x74F2,0x8994,0x821A,0x670C,0x8062,0xEE76,
+ 0x805B,0x74F0,0x8103,0x7724,0x8989,0xEE7C,0x7553,0xEE7E,0x87A9,0x87CE,
+ 0x81C8,0x878C,0x8A49,0x8CAD,0x8B43,0x772B,0x74F8,0x84DA,0x3635,0x69B2,
+ 0x8DA6,0xffff,0x89A9,0x7468,0x6DB9,0x87C1,0xEE91,0x74E7,0x3DDB,0x7176,
+ 0x60A4,0x619C,0x3CD1,0x7162,0x6077,0xffff,0x7F71,0xEE9C,0x7250,0x60E9,
+ 0x4B7E,0x5220,0x3C18,0xEEA2,0xEEA3,0xEEA4,0xEEA5,0xEEA6,0xEEA7,0xEEA8,
+ 0xEEA9,0xEEAA,0x5CC1,0xEEAC,0xEEAD,0xEEAE,0xEEAF,0xEEB0,0xEEB1,0x4562,
+ 0x5B1F,0xEEB4,0x9F50,0x9EA6,0xEEB7,
+ /* row 161: --- */
+ /* row 162: --- */
+ /* row 163: --- */
+ /* row 164: --- */
+ /* row 165: --- */
+ /* row 166: --- */
+ /* row 167: --- */
+ /* row 168: --- */
+ /* row 169: --- */
+ /* row 170: --- */
+ /* row 171: --- */
+ /* row 172: --- */
+ /* row 173: --- */
+ /* row 174: --- */
+ /* row 175: --- */
+ /* row 176: --- */
+ /* row 177: --- */
+ /* row 178: --- */
+ /* row 179: --- */
+ /* row 180: --- */
+ /* row 181: --- */
+ /* row 182: --- */
+ /* row 183: --- */
+ /* row 184: --- */
+ /* row 185: --- */
+ /* row 186: --- */
+ /* row 187: --- */
+ /* row 188: --- */
+ /* row 189: --- */
+ /* row 190: --- */
+ /* row 191: --- */
+ /* row 192: --- */
+ /* row 193: --- */
+ /* row 194: --- */
+ /* row 195: --- */
+ /* row 196: --- */
+ /* row 197: --- */
+ /* row 198 */
+ 161 | (254 << 8), /* first, last */
+ 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,0x4E36,0x4E3F,0x4E85,0x4EA0,0x5182,0x5196,0x51AB,0x52F9,0x5338,
+ 0x5369,0x53B6,0x590A,0x5B80,0x5DDB,0x2F33,0x5E7F,0xF6E0,0x5F50,0x5F61,
+ 0x6534,0xF6E4,0x7592,0xF6E6,0x8FB5,0xF6E8,0x00A8,0x02C6,0x30FD,0x30FE,
+ 0x309D,0x309E,0xF6EF,0xF6F0,0x3005,0x3006,0x3007,0x30FC,0xFF3B,0xFF3D,
+ 0x273D,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,0x3049,
+ 0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050,0x3051,0x3052,0x3053,
+ 0x3054,0x3055,0x3056,0x3057,0x3058,
+ /* row 199 */
+ 64 | (254 << 8), /* first, last */
+ 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,0x30A1,0x30A2,0x30A3,0x30A4,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,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,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,
+ 0x0416,0x0417,0x0418,0x0419,0x041A,
+ /* row 200 */
+ 64 | (254 << 8), /* first, last */
+ 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,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,0x21E7,0x21B8,
+ 0x21B9,0xF7E5,0xF7E6,0x4E5A,0xF7E8,0x5202,0xF7EA,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xF7EB,0x5188,0xF7ED,0xF7EE,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xFFE2,0xFFE4,0xFF07,0xFF02,0x3231,
+ 0x2116,0x2121,0x309B,0x309C,0x2E80,0x2E84,0x2E86,0x2E87,0x2E88,0x2E8A,
+ 0x2E8C,0x2E8D,0x2E95,0x2E9C,0x2E9D,0x2EA5,0x2EA7,0x2EAA,0x2EAC,0x2EAE,
+ 0x2EB6,0x2EBC,0x2EBE,0x2EC6,0x2ECA,0x2ECC,0x2ECD,0x2ECF,0x2ED6,0x2ED7,
+ 0x2EDE,0x2EE3,0xffff,0xffff,0xffff,0x0283,0x0250,0x025B,0x0254,0x0275,
+ 0x0153,0x00F8,0x014B,0x028A,0x026A,
+ /* row 201: --- */
+ /* row 202: --- */
+ /* row 203: --- */
+ /* row 204: --- */
+ /* row 205: --- */
+ /* row 206: --- */
+ /* row 207: --- */
+ /* row 208: --- */
+ /* row 209: --- */
+ /* row 210: --- */
+ /* row 211: --- */
+ /* row 212: --- */
+ /* row 213: --- */
+ /* row 214: --- */
+ /* row 215: --- */
+ /* row 216: --- */
+ /* row 217: --- */
+ /* row 218: --- */
+ /* row 219: --- */
+ /* row 220: --- */
+ /* row 221: --- */
+ /* row 222: --- */
+ /* row 223: --- */
+ /* row 224: --- */
+ /* row 225: --- */
+ /* row 226: --- */
+ /* row 227: --- */
+ /* row 228: --- */
+ /* row 229: --- */
+ /* row 230: --- */
+ /* row 231: --- */
+ /* row 232: --- */
+ /* row 233: --- */
+ /* row 234: --- */
+ /* row 235: --- */
+ /* row 236: --- */
+ /* row 237: --- */
+ /* row 238: --- */
+ /* row 239: --- */
+ /* row 240: --- */
+ /* row 241: --- */
+ /* row 242: --- */
+ /* row 243: --- */
+ /* row 244: --- */
+ /* row 245: --- */
+ /* row 246: --- */
+ /* row 247: --- */
+ /* row 248: --- */
+ /* row 249 */
+ 214 | (254 << 8), /* first, last */
+ 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,0xFFED,
+ /* row 250 */
+ 64 | (254 << 8), /* first, last */
+ 0xE000,0x92DB,0xE002,0xE003,0x854C,0x42B5,
+ 0x73EF,0x51B5,0x3649,0xE009,0xE00A,0x9344,0xE00C,0x82EE,0xE00E,0x783C,
+ 0x6744,0x62DF,0xE012,0xE013,0xE014,0xE015,0xE016,0x4FAB,0xE018,0x5008,
+ 0xE01A,0xE01B,0xE01C,0xE01D,0xE01E,0x5029,0xE020,0x5FA4,0xE022,0xE023,
+ 0x6EDB,0xE025,0x507D,0x5101,0x347A,0x510E,0x986C,0x3743,0x8416,0xE02D,
+ 0xE02E,0x5160,0xE030,0x516A,0xE032,0xE033,0xE034,0xE035,0xE036,0xE037,
+ 0xE038,0x5B82,0x877D,0xE03B,0xE03C,0x51B2,0x51B8,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x9D34,0x51C9,0x51CF,0x51D1,0x3CDC,0x51D3,0xE045,0x51B3,0x51E2,
+ 0x5342,0x51ED,0x83CD,0x693E,0xE04C,0x5F7B,0x520B,0x5226,0x523C,0x52B5,
+ 0x5257,0x5294,0x52B9,0x52C5,0x7C15,0x8542,0x52E0,0x860D,0xE05A,0x5305,
+ 0xE05C,0x5549,0x6ED9,0xE05F,0xE060,0xE061,0x5333,0x5344,0xE064,0x6CCB,
+ 0xE066,0x681B,0x73D5,0x604A,0x3EAA,0x38CC,0xE06C,0x71DD,0x44A2,0x536D,
+ 0x5374,0xE071,0x537E,0x537F,0xE074,0xE075,0x77E6,0x5393,0xE078,0x53A0,
+ 0x53AB,0x53AE,0x73A7,0xE07D,0x3F59,0x739C,0x53C1,0x53C5,0x6C49,0x4E49,
+ 0x57FE,0x53D9,0x3AAB,0xE087,0x53E0,0xE089,0xE08A,0x53F6,0xE08C,0x5413,
+ 0x7079,0x552B,0x6657,0x6D5B,0x546D,0xE093,0xE094,0x555D,0x548F,0x54A4,
+ 0x47A6,0xE099,0xE09A,0x3DB4,0xE09C,
+ /* row 251 */
+ 64 | (254 << 8), /* first, last */
+ 0xE09D,0xE09E,0x5547,0x4CED,0x542F,0x7417,
+ 0x5586,0x55A9,0x5605,0xE0A6,0xE0A7,0x4552,0xE0A9,0x66B3,0xE0AB,0x5637,
+ 0x66CD,0xE0AE,0x66A4,0x66AD,0x564D,0x564F,0x78F1,0x56F1,0x9787,0x53FE,
+ 0x5700,0x56EF,0x56ED,0xE0BA,0x3623,0xE0BC,0x5746,0xE0BE,0x6C6E,0x708B,
+ 0x5742,0x36B1,0xE0C3,0x57E6,0xE0C5,0x5803,0xE0C7,0xE0C8,0x5826,0xE0CA,
+ 0x585C,0x58AA,0x3561,0x58E0,0x58DC,0xE0D0,0x58FB,0x5BFF,0x5743,0xE0D4,
+ 0xE0D5,0x93D3,0x35A1,0x591F,0x68A6,0x36C3,0x6E59,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xE0DC,0x5A24,0x5553,0xE0DF,0x8505,0x59C9,0xE0E2,0xE0E3,0xE0E4,
+ 0xE0E5,0x59D9,0xE0E7,0xE0E8,0xE0E9,0x6D71,0xE0EB,0xE0EC,0x59F9,0xE0EE,
+ 0x5AAB,0x5A63,0x36E6,0xE0F2,0x5A77,0x3708,0x5A96,0x7465,0x5AD3,0xE0F8,
+ 0xE0F9,0x3D85,0xE0FB,0x3732,0xE0FD,0x5E83,0x52D0,0x5B76,0x6588,0x5B7C,
+ 0xE103,0x4004,0x485D,0xE106,0x5BD5,0x6160,0xE109,0xE10A,0xE10B,0x5BF3,
+ 0x5B9D,0x4D10,0x5C05,0xE110,0x5C13,0x73CE,0x5C14,0xE114,0xE115,0x5C49,
+ 0x48DD,0x5C85,0x5CE9,0x5CEF,0x5D8B,0xE11C,0xE11D,0x5D10,0x5D18,0x5D46,
+ 0xE121,0x5CBA,0x5DD7,0x82FC,0x382D,0xE126,0xE127,0xE128,0x8287,0x3836,
+ 0x3BC2,0x5E2E,0x6A8A,0x5E75,0x5E7A,0xE130,0xE131,0x53A6,0x4EB7,0x5ED0,
+ 0x53A8,0xE136,0x5E09,0x5EF4,0xE139,
+ /* row 252 */
+ 64 | (254 << 8), /* first, last */
+ 0x5EF9,0x5EFB,0x38A0,0x5EFC,0x683E,0x941B,
+ 0x5F0D,0xE141,0xE142,0x3ADE,0x48AE,0xE145,0x5F3A,0xE147,0xE148,0x5F58,
+ 0xE14A,0x5F63,0x97BD,0xE14D,0x5F72,0x9340,0xE150,0x5FA7,0x5DB6,0x3D5F,
+ 0xE154,0xE155,0xE156,0xE157,0x91D6,0xE159,0xE15A,0x6031,0x6685,0xE15D,
+ 0x3963,0x3DC7,0x3639,0x5790,0xE162,0x7971,0x3E40,0x609E,0x60A4,0x60B3,
+ 0xE168,0xE169,0xE16A,0x74A4,0x50E1,0x5AA0,0x6164,0x8424,0x6142,0xE171,
+ 0xE172,0x6181,0x51F4,0xE175,0x6187,0x5BAA,0xE178,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xE179,0x61D3,0xE17B,0xE17C,0x61D0,0x3932,0xE17F,0xE180,0x6023,
+ 0x615C,0x651E,0x638B,0xE185,0x62C5,0xE187,0x62D5,0xE189,0x636C,0xE18B,
+ 0x3A17,0x6438,0x63F8,0xE18F,0xE190,0x6490,0x6F8A,0xE193,0x9814,0xE195,
+ 0xE196,0x64E1,0x64E5,0x947B,0x3A66,0x643A,0x3A57,0x654D,0x6F16,0xE19F,
+ 0xE1A0,0x6585,0x656D,0x655F,0xE1A4,0x65B5,0xE1A6,0x4B37,0x65D1,0x40D8,
+ 0xE1AA,0x65E0,0x65E3,0x5FDF,0xE1AE,0x6618,0xE1B0,0xE1B1,0x6644,0xE1B3,
+ 0xE1B4,0x664B,0xE1B6,0x6667,0xE1B8,0x6673,0x6674,0xE1BB,0xE1BC,0xE1BD,
+ 0xE1BE,0xE1BF,0x77C5,0xE1C1,0x99A4,0x6702,0xE1C4,0xE1C5,0x3B2B,0x69FA,
+ 0xE1C8,0x675E,0x6767,0x6762,0xE1CC,0xE1CD,0x67D7,0x44E9,0x6822,0x6E50,
+ 0x923C,0x6801,0xE1D4,0xE1D5,0x685D,
+ /* row 253 */
+ 64 | (254 << 8), /* first, last */
+ 0xE1D7,0x69E1,0x6A0B,0xE1DA,0x6973,0x68C3,
+ 0xE1DD,0x6901,0x6900,0x3D32,0x3A01,0xE1E2,0x3B80,0x67AC,0x6961,0xE1E6,
+ 0x42FC,0x6936,0x6998,0x3BA1,0xE1EB,0x8363,0x5090,0x69F9,0xE1EF,0xE1F0,
+ 0x6A45,0xE1F2,0x6A9D,0x3BF3,0x67B1,0x6AC8,0xE1F7,0x3C0D,0x6B1D,0xE1FA,
+ 0x60DE,0x6B35,0x6B74,0xE1FE,0x6EB5,0xE200,0xE201,0xE202,0x3740,0x5421,
+ 0xE205,0x6BE1,0xE207,0x6BDC,0x6C37,0xE20A,0xE20B,0xE20C,0x6C5A,0x8226,
+ 0x6C79,0xE210,0x44C5,0xE212,0xE213,0xE214,0xE215,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xE216,0x36E5,0x3CEB,0xE219,0x9B83,0xE21B,0xE21C,0x7F8F,0x6837,
+ 0xE21F,0xE220,0xE221,0x6D96,0x6D5C,0x6E7C,0x6F04,0xE226,0xE227,0xE228,
+ 0x8533,0xE22A,0x51C7,0x6C9C,0x6E1D,0x842E,0xE22F,0x6E2F,0xE231,0x7453,
+ 0xE233,0x79CC,0x6E4F,0x5A91,0xE237,0x6FF8,0x370D,0x6F9D,0xE23B,0x6EFA,
+ 0xE23D,0xE23E,0x4555,0x93F0,0x6F44,0x6F5C,0x3D4E,0x6F74,0xE245,0x3D3B,
+ 0x6F9F,0xE248,0x6FD3,0xE24A,0xE24B,0xE24C,0xE24D,0xE24E,0xE24F,0x51DF,
+ 0xE251,0xE252,0xE253,0xE254,0x704B,0x707E,0x70A7,0x7081,0x70CC,0x70D5,
+ 0x70D6,0x70DF,0x4104,0x3DE8,0x71B4,0x7196,0xE261,0x712B,0x7145,0x5A88,
+ 0x714A,0x716E,0x5C9C,0xE268,0x714F,0x9362,0xE26B,0x712C,0xE26D,0xE26E,
+ 0xE26F,0x71BA,0xE271,0x70BD,0x720E,
+ /* row 254 */
+ 64 | (254 << 8), /* first, last */
+ 0x9442,0x7215,0x5911,0x9443,0x7224,0x9341,
+ 0xE27A,0x722E,0x7240,0xE27D,0x68BD,0x7255,0x7257,0x3E55,0xE282,0x680D,
+ 0x6F3D,0x7282,0x732A,0x732B,0xE288,0xE289,0x48ED,0xE28B,0x7328,0x732E,
+ 0x73CF,0x73AA,0xE290,0xE291,0x73C9,0x7449,0xE294,0xE295,0xE296,0x6623,
+ 0x36C5,0xE299,0xE29A,0xE29B,0x73F7,0x7415,0x6903,0xE29F,0x7439,0xE2A1,
+ 0x3ED7,0x745C,0xE2A4,0x7460,0xE2A6,0x7447,0x73E4,0x7476,0x83B9,0x746C,
+ 0x3730,0x7474,0x93F1,0x6A2C,0x7482,0x4953,0xE2B2,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xE2B3,0xE2B4,0xE2B5,0x5B46,0xE2B7,0xE2B8,0x74C8,0xE2BA,0x750E,
+ 0x74E9,0x751E,0xE2BE,0xE2BF,0x5BD7,0xE2C1,0x9385,0x754D,0x754A,0x7567,
+ 0x756E,0xE2C7,0x3F04,0xE2C9,0x758E,0x745D,0x759E,0x75B4,0x7602,0x762C,
+ 0x7651,0x764F,0x766F,0x7676,0xE2D4,0x7690,0x81EF,0x37F8,0xE2D8,0xE2D9,
+ 0x76A1,0x76A5,0x76B7,0x76CC,0xE2DE,0x8462,0xE2E0,0xE2E1,0xE2E2,0x771E,
+ 0x7726,0x7740,0x64AF,0xE2E7,0x7758,0xE2E9,0x77AF,0xE2EB,0xE2EC,0xE2ED,
+ 0x77F4,0x7809,0xE2F0,0xE2F1,0x68CA,0x78AF,0x78C7,0x78D3,0x96A5,0x792E,
+ 0xE2F8,0x78D7,0x7934,0x78B1,0xE2FC,0x8FB8,0x8884,0xE2FF,0xE300,0xE301,
+ 0x7986,0x8900,0x6902,0x7980,0xE306,0x799D,0xE308,0x793C,0x79A9,0x6E2A,
+ 0xE30C,0x3EA8,0x79C6,0xE30F,0x79D4,
+ /* row 255: --- */
+};
+
+sal_Int32 const aImplBig5Hkscs2001ToUnicodeRowOffsets[] = {
+ -1, /* row 0 */
+ -1, /* row 1 */
+ -1, /* row 2 */
+ -1, /* row 3 */
+ -1, /* row 4 */
+ -1, /* row 5 */
+ -1, /* row 6 */
+ -1, /* row 7 */
+ -1, /* row 8 */
+ -1, /* row 9 */
+ -1, /* row 10 */
+ -1, /* row 11 */
+ -1, /* row 12 */
+ -1, /* row 13 */
+ -1, /* row 14 */
+ -1, /* row 15 */
+ -1, /* row 16 */
+ -1, /* row 17 */
+ -1, /* row 18 */
+ -1, /* row 19 */
+ -1, /* row 20 */
+ -1, /* row 21 */
+ -1, /* row 22 */
+ -1, /* row 23 */
+ -1, /* row 24 */
+ -1, /* row 25 */
+ -1, /* row 26 */
+ -1, /* row 27 */
+ -1, /* row 28 */
+ -1, /* row 29 */
+ -1, /* row 30 */
+ -1, /* row 31 */
+ -1, /* row 32 */
+ -1, /* row 33 */
+ -1, /* row 34 */
+ -1, /* row 35 */
+ -1, /* row 36 */
+ -1, /* row 37 */
+ -1, /* row 38 */
+ -1, /* row 39 */
+ -1, /* row 40 */
+ -1, /* row 41 */
+ -1, /* row 42 */
+ -1, /* row 43 */
+ -1, /* row 44 */
+ -1, /* row 45 */
+ -1, /* row 46 */
+ -1, /* row 47 */
+ -1, /* row 48 */
+ -1, /* row 49 */
+ -1, /* row 50 */
+ -1, /* row 51 */
+ -1, /* row 52 */
+ -1, /* row 53 */
+ -1, /* row 54 */
+ -1, /* row 55 */
+ -1, /* row 56 */
+ -1, /* row 57 */
+ -1, /* row 58 */
+ -1, /* row 59 */
+ -1, /* row 60 */
+ -1, /* row 61 */
+ -1, /* row 62 */
+ -1, /* row 63 */
+ -1, /* row 64 */
+ -1, /* row 65 */
+ -1, /* row 66 */
+ -1, /* row 67 */
+ -1, /* row 68 */
+ -1, /* row 69 */
+ -1, /* row 70 */
+ -1, /* row 71 */
+ -1, /* row 72 */
+ -1, /* row 73 */
+ -1, /* row 74 */
+ -1, /* row 75 */
+ -1, /* row 76 */
+ -1, /* row 77 */
+ -1, /* row 78 */
+ -1, /* row 79 */
+ -1, /* row 80 */
+ -1, /* row 81 */
+ -1, /* row 82 */
+ -1, /* row 83 */
+ -1, /* row 84 */
+ -1, /* row 85 */
+ -1, /* row 86 */
+ -1, /* row 87 */
+ -1, /* row 88 */
+ -1, /* row 89 */
+ -1, /* row 90 */
+ -1, /* row 91 */
+ -1, /* row 92 */
+ -1, /* row 93 */
+ -1, /* row 94 */
+ -1, /* row 95 */
+ -1, /* row 96 */
+ -1, /* row 97 */
+ -1, /* row 98 */
+ -1, /* row 99 */
+ -1, /* row 100 */
+ -1, /* row 101 */
+ -1, /* row 102 */
+ -1, /* row 103 */
+ -1, /* row 104 */
+ -1, /* row 105 */
+ -1, /* row 106 */
+ -1, /* row 107 */
+ -1, /* row 108 */
+ -1, /* row 109 */
+ -1, /* row 110 */
+ -1, /* row 111 */
+ -1, /* row 112 */
+ -1, /* row 113 */
+ -1, /* row 114 */
+ -1, /* row 115 */
+ -1, /* row 116 */
+ -1, /* row 117 */
+ -1, /* row 118 */
+ -1, /* row 119 */
+ -1, /* row 120 */
+ -1, /* row 121 */
+ -1, /* row 122 */
+ -1, /* row 123 */
+ -1, /* row 124 */
+ -1, /* row 125 */
+ -1, /* row 126 */
+ -1, /* row 127 */
+ -1, /* row 128 */
+ -1, /* row 129 */
+ -1, /* row 130 */
+ -1, /* row 131 */
+ -1, /* row 132 */
+ -1, /* row 133 */
+ -1, /* row 134 */
+ -1, /* row 135 */
+ 0, /* row 136; 148/216 bytes (68.5%) */
+ 108, /* row 137; 288/384 bytes (75.0%) */
+ 300, /* row 138; 294/384 bytes (76.6%) */
+ 492, /* row 139; 310/382 bytes (81.2%) */
+ 683, /* row 140; 234/316 bytes (74.1%) */
+ 841, /* row 141; 252/320 bytes (78.8%) */
+ 1001, /* row 142; 316/384 bytes (82.3%) */
+ 1193, /* row 143; 316/384 bytes (82.3%) */
+ 1385, /* row 144; 316/384 bytes (82.3%) */
+ 1577, /* row 145; 316/384 bytes (82.3%) */
+ 1769, /* row 146; 316/384 bytes (82.3%) */
+ 1961, /* row 147; 316/384 bytes (82.3%) */
+ 2153, /* row 148; 316/384 bytes (82.3%) */
+ 2345, /* row 149; 316/384 bytes (82.3%) */
+ 2537, /* row 150; 316/384 bytes (82.3%) */
+ 2729, /* row 151; 316/384 bytes (82.3%) */
+ 2921, /* row 152; 316/384 bytes (82.3%) */
+ 3113, /* row 153; 316/384 bytes (82.3%) */
+ 3305, /* row 154; 316/384 bytes (82.3%) */
+ 3497, /* row 155; 314/384 bytes (81.8%) */
+ 3689, /* row 156; 316/384 bytes (82.3%) */
+ 3881, /* row 157; 316/384 bytes (82.3%) */
+ 4073, /* row 158; 310/384 bytes (80.7%) */
+ 4265, /* row 159; 298/384 bytes (77.6%) */
+ 4457, /* row 160; 296/384 bytes (77.1%) */
+ -1, /* row 161 */
+ -1, /* row 162 */
+ -1, /* row 163 */
+ -1, /* row 164 */
+ -1, /* row 165 */
+ -1, /* row 166 */
+ -1, /* row 167 */
+ -1, /* row 168 */
+ -1, /* row 169 */
+ -1, /* row 170 */
+ -1, /* row 171 */
+ -1, /* row 172 */
+ -1, /* row 173 */
+ -1, /* row 174 */
+ -1, /* row 175 */
+ -1, /* row 176 */
+ -1, /* row 177 */
+ -1, /* row 178 */
+ -1, /* row 179 */
+ -1, /* row 180 */
+ -1, /* row 181 */
+ -1, /* row 182 */
+ -1, /* row 183 */
+ -1, /* row 184 */
+ -1, /* row 185 */
+ -1, /* row 186 */
+ -1, /* row 187 */
+ -1, /* row 188 */
+ -1, /* row 189 */
+ -1, /* row 190 */
+ -1, /* row 191 */
+ -1, /* row 192 */
+ -1, /* row 193 */
+ -1, /* row 194 */
+ -1, /* row 195 */
+ -1, /* row 196 */
+ -1, /* row 197 */
+ 4649, /* row 198; 190/190 bytes (100.0%) */
+ 4744, /* row 199; 316/384 bytes (82.3%) */
+ 4936, /* row 200; 230/384 bytes (59.9%) */
+ -1, /* row 201 */
+ -1, /* row 202 */
+ -1, /* row 203 */
+ -1, /* row 204 */
+ -1, /* row 205 */
+ -1, /* row 206 */
+ -1, /* row 207 */
+ -1, /* row 208 */
+ -1, /* row 209 */
+ -1, /* row 210 */
+ -1, /* row 211 */
+ -1, /* row 212 */
+ -1, /* row 213 */
+ -1, /* row 214 */
+ -1, /* row 215 */
+ -1, /* row 216 */
+ -1, /* row 217 */
+ -1, /* row 218 */
+ -1, /* row 219 */
+ -1, /* row 220 */
+ -1, /* row 221 */
+ -1, /* row 222 */
+ -1, /* row 223 */
+ -1, /* row 224 */
+ -1, /* row 225 */
+ -1, /* row 226 */
+ -1, /* row 227 */
+ -1, /* row 228 */
+ -1, /* row 229 */
+ -1, /* row 230 */
+ -1, /* row 231 */
+ -1, /* row 232 */
+ -1, /* row 233 */
+ -1, /* row 234 */
+ -1, /* row 235 */
+ -1, /* row 236 */
+ -1, /* row 237 */
+ -1, /* row 238 */
+ -1, /* row 239 */
+ -1, /* row 240 */
+ -1, /* row 241 */
+ -1, /* row 242 */
+ -1, /* row 243 */
+ -1, /* row 244 */
+ -1, /* row 245 */
+ -1, /* row 246 */
+ -1, /* row 247 */
+ -1, /* row 248 */
+ 5128, /* row 249; 84/84 bytes (100.0%) */
+ 5170, /* row 250; 316/384 bytes (82.3%) */
+ 5362, /* row 251; 316/384 bytes (82.3%) */
+ 5554, /* row 252; 316/384 bytes (82.3%) */
+ 5746, /* row 253; 316/384 bytes (82.3%) */
+ 5938, /* row 254; 316/384 bytes (82.3%) */
+ -1, /* row 255 */
+};
+
+sal_uInt16 const aImplUnicodeToBig5Hkscs2001Data[] = {
+ /* plane 0, page 0 */
+ 168 | (252 << 8), /* first, last */
+ 0xC6D8, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8859,0x8857, 0, 0, 0, 0, 0, 0,
+ 0x885D,0x885B,0x8866, 0, 0, 0, 0, 0, 0, 0,
+ 0x8861,0x885F, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x886A,0x8868, 0, 0, 0, 0,
+ 0, 0,0x886F,0x886D,0x88A7, 0,0x8873,0x8871, 0, 0,
+ 0, 0,0x8877,0x8875, 0, 0, 0, 0,0xC8FB,0x887B,
+ 0x8879, 0,0x88A2,
+ /* plane 0, page 1 */
+ 0 | (220 << 8), /* first, last */
+ 0x8856,0x8867, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x885A,0x886C,
+ 0, 0, 0, 0, 0, 0,0x885C,0x886E, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8870, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xC8FC,0x885E,0x8874, 0, 0,
+ 0, 0, 0,0xC8FA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8878, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8858,0x8869, 0,0x8872,0x8860,
+ 0x8876, 0,0x887A, 0,0x887C, 0,0x887D, 0,0x887E, 0,
+ 0x88A1,
+ /* plane 0, page 2 */
+ 80 | (198 << 8), /* first, last */
+ 0xC8F6,0x886B, 0, 0,0xC8F8, 0, 0, 0, 0, 0,
+ 0,0xC8F7, 0, 0, 0, 0, 0,0x88A8, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xC8FE, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xC8F9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xC8F5, 0, 0, 0, 0, 0, 0,0xC8FD, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xC6D9,
+ /* plane 0, page 3: --- */
+ /* plane 0, page 4 */
+ 1 | (81 << 8), /* first, last */
+ 0xC7F9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xC7F3,0xC7F4,0xC7F5,0xC7F6,
+ 0xC7F7,0xC7F8,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,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,
+ 0,0xC85B,
+ /* plane 0, page 5: --- */
+ /* plane 0, page 6: --- */
+ /* plane 0, page 7: --- */
+ /* plane 0, page 8: --- */
+ /* plane 0, page 9: --- */
+ /* plane 0, page 10: --- */
+ /* plane 0, page 11: --- */
+ /* plane 0, page 12: --- */
+ /* plane 0, page 13: --- */
+ /* plane 0, page 14: --- */
+ /* plane 0, page 15: --- */
+ /* plane 0, page 16: --- */
+ /* plane 0, page 17: --- */
+ /* plane 0, page 18: --- */
+ /* plane 0, page 19: --- */
+ /* plane 0, page 20: --- */
+ /* plane 0, page 21: --- */
+ /* plane 0, page 22: --- */
+ /* plane 0, page 23: --- */
+ /* plane 0, page 24: --- */
+ /* plane 0, page 25: --- */
+ /* plane 0, page 26: --- */
+ /* plane 0, page 27: --- */
+ /* plane 0, page 28: --- */
+ /* plane 0, page 29: --- */
+ /* plane 0, page 30 */
+ 190 | (193 << 8), /* first, last */
+ 0x8863,0x88A4,0x8865,0x88A6,
+ /* plane 0, page 31: --- */
+ /* plane 0, page 32: --- */
+ /* plane 0, page 33 */
+ 22 | (231 << 8), /* first, last */
+ 0xC8D2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xC8D3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xC6B5,0xC6B6,0xC6B7,0xC6B8,0xC6B9,0xC6BA,0xC6BB,0xC6BC,
+ 0xC6BD,0xC6BE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xC877,0xC878, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xC876,
+ /* plane 0, page 34: --- */
+ /* plane 0, page 35: --- */
+ /* plane 0, page 36 */
+ 96 | (125 << 8), /* first, last */
+ 0xC6A1,0xC6A2,0xC6A3,0xC6A4,
+ 0xC6A5,0xC6A6,0xC6A7,0xC6A8,0xC6A9,0xC6AA, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xC6AB,0xC6AC,0xC6AD,0xC6AE,
+ 0xC6AF,0xC6B0,0xC6B1,0xC6B2,0xC6B3,0xC6B4,
+ /* plane 0, page 37 */
+ 80 | (112 << 8), /* first, last */
+ 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,
+ /* plane 0, page 38: --- */
+ /* plane 0, page 39 */
+ 61 | (61 << 8), /* first, last */
+ 0xC6E6,
+ /* plane 0, page 40: --- */
+ /* plane 0, page 41: --- */
+ /* plane 0, page 42: --- */
+ /* plane 0, page 43: --- */
+ /* plane 0, page 44: --- */
+ /* plane 0, page 45: --- */
+ /* plane 0, page 46 */
+ 128 | (227 << 8), /* first, last */
+ 0xC8D6, 0,
+ 0, 0,0xC8D7, 0,0xC8D8,0xC8D9,0xC8DA, 0,0xC8DB, 0,
+ 0xC8DC,0xC8DD, 0, 0, 0, 0, 0, 0, 0,0xC8DE,
+ 0, 0, 0, 0, 0, 0,0xC8DF,0xC8E0, 0, 0,
+ 0, 0, 0, 0, 0,0xC8E1, 0,0xC8E2, 0, 0,
+ 0xC8E3, 0,0xC8E4, 0,0xC8E5, 0, 0, 0, 0, 0,
+ 0, 0,0xC8E6, 0, 0, 0, 0, 0,0xC8E7, 0,
+ 0xC8E8, 0, 0, 0, 0, 0, 0, 0,0xC8E9, 0,
+ 0, 0,0xC8EA, 0,0xC8EB,0xC8EC, 0,0xC8ED, 0, 0,
+ 0, 0, 0, 0,0xC8EE,0xC8EF, 0, 0, 0, 0,
+ 0, 0,0xC8F0, 0, 0, 0, 0,0xC8F1,
+ /* plane 0, page 47 */
+ 51 | (51 << 8), /* first, last */
+ 0xC6CD,
+ /* plane 0, page 48 */
+ 5 | (254 << 8), /* first, last */
+ 0xC6E0,0xC6E1,0xC6E2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,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, 0, 0,
+ 0, 0, 0, 0, 0,0xC8D4,0xC8D5,0xC6DC,0xC6DD, 0,
+ 0,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, 0, 0, 0,
+ 0, 0,0xC6E3,0xC6DA,0xC6DB,
+ /* plane 0, page 49: --- */
+ /* plane 0, page 50 */
+ 49 | (49 << 8), /* first, last */
+ 0xC8D1,
+ /* plane 0, page 51: --- */
+ /* plane 0, page 52 */
+ 53 | (251 << 8), /* first, last */
+ 0x9277, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x96DF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x89D5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x93CD, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9BDF, 0, 0, 0, 0,
+ 0, 0,0xFA68, 0, 0,0x89DA,0x8F59, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x89DB, 0, 0,
+ 0x8F5D, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x89DC, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x96F7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8ADA, 0,
+ 0, 0, 0,0x8BDC, 0, 0, 0, 0, 0, 0,
+ 0x97DB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9E53, 0, 0, 0, 0,0x9DAA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9BEA,
+ /* plane 0, page 53 */
+ 6 | (254 << 8), /* first, last */
+ 0x8A6E, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8BC8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x89E8, 0,0x89EA, 0, 0, 0, 0, 0,0x8C4B,
+ 0, 0, 0, 0, 0, 0, 0,0xFB70, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x89ED,
+ 0, 0,0x94DD, 0,0x89EE, 0, 0, 0, 0,0x9EB4,
+ 0x8AD3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x92DB, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x94DB,0x89F9, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFB7A, 0, 0, 0,0x89FB, 0, 0, 0, 0,
+ 0, 0, 0,0x9EFC, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x89FC, 0,0x89BF, 0, 0, 0,0x89FE, 0,0x89E6,
+ 0, 0,0x9D46, 0, 0, 0,0x9DEE, 0, 0, 0,
+ 0xA07E, 0, 0, 0,0xA068, 0, 0, 0, 0,0x98E9,
+ 0,0x8B68, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8DFD,0x8BBE,0x9FD9, 0, 0, 0, 0, 0, 0,
+ 0,0x8AEB, 0, 0,0x9FD7,
+ /* plane 0, page 54 */
+ 9 | (245 << 8), /* first, last */
+ 0x8B6A,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9C5C, 0,0x8BB1, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFB5E, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9DF3, 0, 0, 0, 0,
+ 0, 0, 0,0xA0D0, 0, 0, 0,0xFC66, 0, 0,
+ 0, 0,0x92E9, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9AEC,0x8FAB,0xFA48, 0, 0, 0, 0,0x8E45, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9C6F, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9EDE, 0, 0, 0, 0, 0, 0,0x89EF,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x96E9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9EBB, 0, 0, 0, 0,
+ 0x94DE, 0,0x9EB8, 0, 0, 0,0x97BA,0xFB65, 0, 0,
+ 0,0x95D6, 0, 0, 0,0x9CBB, 0, 0,0x97DA, 0,
+ 0, 0, 0,0x8F45, 0,0xFB7D,0x9158,0xFE64, 0,0x9856,
+ 0x9B4D, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x935B,0x95C7, 0,0x97E7, 0, 0, 0, 0, 0,
+ 0,0x9359, 0, 0, 0,0x91F5,0x97B8, 0, 0,0xFDA2,
+ 0xFBB6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x92FA,
+ /* plane 0, page 55 */
+ 1 | (251 << 8), /* first, last */
+ 0x9357, 0,0x8BA6, 0, 0, 0, 0,0xFBB9, 0,
+ 0x97B0, 0, 0,0xFDC4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9CA1, 0,
+ 0, 0, 0, 0,0x91F2,0x91F9, 0,0x8FF1, 0, 0,
+ 0, 0, 0, 0,0x9745,0x9853, 0, 0,0xFE78, 0,
+ 0xFBC1,0x9251, 0, 0, 0, 0, 0, 0,0x9DAD, 0,
+ 0, 0, 0, 0,0xFD6C, 0, 0,0xFA6B, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9BC2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9A7B, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8B60, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x934B, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9ABD, 0, 0, 0, 0,
+ 0x91B7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x95B4, 0, 0, 0, 0, 0,0xFEC5, 0,
+ 0,0x9EF0,
+ /* plane 0, page 56 */
+ 15 | (250 << 8), /* first, last */
+ 0x8D64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9269, 0, 0, 0, 0,
+ 0, 0,0x8D67, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFBEA, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFBEF, 0,0x8D68, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x93EB,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFC42, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9166, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFACD, 0, 0, 0, 0,0x93DD,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8BCC,
+ /* plane 0, page 57 */
+ 8 | (254 << 8), /* first, last */
+ 0x8D6D, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8D6E, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x96A8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFCA6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8D6F, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8D70, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFC64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9060, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8D74,0x97C3, 0,
+ 0, 0, 0, 0, 0, 0,0x8AD0, 0, 0, 0,
+ 0, 0, 0,0x9274, 0,0x9BBE, 0, 0, 0, 0,
+ 0,0x9CC8, 0, 0,0x9CBA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8D78, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9EB9, 0, 0, 0, 0, 0,0x955A, 0, 0,0x91B4,
+ 0, 0, 0, 0, 0, 0,0x8A48, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8D7D, 0,
+ 0,0x8A7D, 0, 0,0x8AC2,
+ /* plane 0, page 58 */
+ 1 | (251 << 8), /* first, last */
+ 0xFD4A, 0,0x8DA1, 0, 0,0x8AD1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFCB4,0x8B47, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x93A4,0x9EDA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8A51, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8DA6, 0, 0, 0, 0,
+ 0, 0,0x9EC5, 0, 0, 0, 0,0xFCC4, 0, 0,
+ 0, 0,0xA078, 0,0x94B5, 0, 0, 0, 0, 0,
+ 0, 0,0xFCC2,0x8A6B, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8DAB, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFAE8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8DAD,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFC49, 0,0x93C1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x906F, 0,0x8DB0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x947E,
+ /* plane 0, page 59 */
+ 14 | (244 << 8), /* first, last */
+ 0x90FA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9479, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8DB2, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFCEE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x997B, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8DB4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8DB7, 0,
+ 0, 0, 0, 0, 0, 0,0x91B3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8DBB,0x8DBA, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8DBC,0x9044, 0, 0, 0,0xFD4C, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x93E4, 0, 0,0x93E0, 0, 0, 0, 0, 0, 0,
+ 0,0xFD53, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8DC3, 0,
+ 0x9BB8, 0, 0, 0,0xFBF0, 0,0x93E9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x93F6, 0, 0, 0, 0,
+ 0,0x8DC5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8DCA, 0, 0, 0,
+ 0, 0,0x8DCC,0xFD5D,0x93B5,
+ /* plane 0, page 60 */
+ 13 | (239 << 8), /* first, last */
+ 0xFD61, 0, 0, 0,0x9CF8, 0, 0,
+ 0,0x9252, 0, 0,0xA0E8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CA5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8C56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8DD6, 0,0x97C0, 0, 0, 0,0xA0DE,
+ 0, 0, 0, 0,0x97D2, 0, 0, 0, 0, 0,
+ 0xFAA5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFDA3, 0, 0, 0,0x8DDB,
+ /* plane 0, page 61 */
+ 19 | (253 << 8), /* first, last */
+ 0x8EAF,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x91B5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFD49, 0, 0, 0, 0, 0, 0, 0, 0,0xFDD1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8DEB, 0, 0, 0, 0, 0,0x97C6, 0,0xFDCE, 0,
+ 0,0x90FC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFC59, 0, 0,0x96D6, 0,
+ 0, 0, 0, 0, 0,0x97C5,0x8DEF, 0, 0, 0,
+ 0,0x97D7, 0, 0, 0, 0, 0,0x8DF0, 0, 0,
+ 0, 0, 0, 0, 0,0x96A6, 0, 0, 0, 0,
+ 0, 0, 0,0xFBBF, 0, 0, 0, 0,0x8DF3, 0,
+ 0, 0, 0,0x9449, 0,0x8DF5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9872, 0, 0, 0, 0,
+ 0, 0, 0,0x8E6B, 0, 0, 0, 0, 0, 0,
+ 0xFAFD, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8F50, 0, 0, 0, 0, 0, 0,0x9DCC,0xFC65,
+ 0,0x8C44, 0, 0,0x996E,0x94A1, 0, 0, 0, 0,
+ 0,0x8F63, 0, 0, 0, 0, 0, 0, 0,0xA0DA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9253,0xFDE9, 0, 0,0x9DB5, 0, 0, 0, 0,
+ 0, 0, 0,0x9879, 0, 0, 0,0x9D5D, 0, 0,
+ 0, 0,0x8D63,0x9669,
+ /* plane 0, page 62 */
+ 6 | (255 << 8), /* first, last */
+ 0x9F70, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFC6A, 0, 0,0x8AC7, 0, 0,
+ 0, 0,0x89D7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFE4D, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9EDD, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFEFB,0x98BC,
+ 0xFACC, 0, 0,0x95B0, 0, 0, 0,0x9464, 0, 0,
+ 0, 0, 0, 0,0x936F, 0, 0, 0, 0, 0,
+ 0,0x94B9, 0, 0,0x95EC, 0, 0, 0, 0,0x91EE,
+ 0, 0,0x98C3, 0,0x95F6, 0, 0, 0,0x8FFD,0x98C5,
+ 0, 0, 0, 0,0x9766,0xFE6E, 0, 0,0x97DD,0x8CAA,
+ 0, 0,0x92D2, 0, 0,0x9761,0x98CB, 0, 0, 0,
+ 0,0x95F0, 0,0x975D, 0,0x91E3, 0, 0, 0, 0,
+ 0x98CC, 0, 0,0x9469,0x98CD, 0, 0, 0, 0, 0,
+ 0x98CE, 0,0x95FC, 0, 0,0x94A3,
+ /* plane 0, page 63 */
+ 0 | (250 << 8), /* first, last */
+ 0x9662, 0, 0, 0,0xFEB6, 0,0x9463, 0, 0, 0,
+ 0, 0, 0, 0,0x98D0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x98D1, 0, 0, 0, 0,0x9475,0xFAE0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9472,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x98D6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8AF0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x98D9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x98DB, 0, 0, 0, 0,
+ 0x98DD, 0, 0, 0, 0, 0, 0, 0, 0,0x98A8,
+ 0, 0, 0, 0, 0, 0, 0,0x8A6D, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AFB,
+ 0x8AAE,
+ /* plane 0, page 64 */
+ 4 | (250 << 8), /* first, last */
+ 0xFBC9, 0, 0, 0, 0,0x8C5D,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x98E4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x98E6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x98E8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8A4D, 0, 0, 0,0x9257, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x95DF, 0,
+ 0,0xA0AC, 0, 0, 0, 0,0x98EB, 0, 0, 0,
+ 0,0x98EC, 0,0x8CC3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x98F4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8AB8, 0, 0,
+ 0,0x9EE7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x94BC, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFCD1, 0, 0, 0,
+ 0, 0, 0,0x9CC6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9E7E,
+ /* plane 0, page 65 */
+ 3 | (249 << 8), /* first, last */
+ 0x98FE,0xFDE8, 0, 0, 0, 0,0x9940,
+ 0, 0, 0, 0,0x94C9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x94D3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9946, 0, 0, 0, 0,0x90C0, 0,
+ 0x94D1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9573, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x93C2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9948, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x994B, 0, 0, 0,
+ 0, 0,0x8E55, 0, 0, 0, 0,0x994E, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8EFE,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8E59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94EC,
+ /* plane 0, page 66 */
+ 17 | (252 << 8), /* first, last */
+ 0x94EF, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8C60, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8F74, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9955, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9544, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8CCB, 0,
+ 0, 0,0x9956, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9959, 0, 0, 0, 0, 0, 0, 0,0x995B, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8CC4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFA45, 0, 0, 0,0x90B7, 0, 0,0x9743, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x95CD, 0, 0, 0, 0, 0,
+ 0,0x97C9,0xFD50,
+ /* plane 0, page 67 */
+ 43 | (242 << 8), /* first, last */
+ 0x8EB9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x95C6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9967, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8AB9, 0, 0, 0,
+ 0, 0, 0,0x8DFC, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8A76, 0, 0,
+ 0, 0, 0,0x9D51, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9973, 0, 0,
+ 0, 0,0x9D4F,
+ /* plane 0, page 68 */
+ 1 | (244 << 8), /* first, last */
+ 0x997A,0x9564, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x99A1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x99A5, 0, 0,
+ 0, 0, 0, 0, 0,0x99A7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8EED, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x99AD, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x946E,
+ 0x8F70, 0,0xFAD0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x99B3, 0, 0, 0,
+ 0, 0, 0,0xA053, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x965C, 0, 0, 0, 0,0xFD7A, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x97FE, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x92BD, 0,0x97FD, 0, 0, 0, 0,0x8F64, 0,
+ 0, 0, 0,0xFCF7,0x9562,0x97CD,0x9E64, 0, 0, 0,
+ 0, 0, 0, 0,0x924C,
+ /* plane 0, page 69 */
+ 3 | (233 << 8), /* first, last */
+ 0x8EC9,0x99BC, 0, 0, 0, 0,0x9DA5,
+ 0,0x8F54, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8F7C, 0, 0, 0, 0, 0, 0,0x8EA2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8F7A,
+ 0, 0, 0, 0, 0, 0,0x97AE, 0, 0, 0,
+ 0,0x96C8, 0, 0, 0, 0, 0, 0, 0,0x99C3,
+ 0,0x90D6, 0,0x9CBE, 0, 0, 0,0x8F76, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9470,0xFB4B, 0, 0,0xFDCA, 0, 0, 0, 0,
+ 0, 0,0x8EC7, 0, 0, 0, 0, 0,0xA0F9, 0,
+ 0, 0, 0, 0, 0, 0,0x8FA9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x99C7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x90D7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9EDF,
+ /* plane 0, page 70 */
+ 6 | (245 << 8), /* first, last */
+ 0x99CE, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8FBA, 0, 0, 0, 0,
+ 0,0x8FEB, 0,0x99CF, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8FC2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x92C9, 0, 0, 0, 0, 0,0x97DC, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x95B3,0x9C79, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x95B2,
+ /* plane 0, page 71 */
+ 19 | (244 << 8), /* first, last */
+ 0x8FDB,
+ 0, 0, 0, 0,0x9BE3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9E7A, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BEE, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x99DE, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFAFA, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9EE5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8A52, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x99E1, 0, 0,
+ 0, 0, 0, 0,0x8A67,
+ /* plane 0, page 72 */
+ 0 | (250 << 8), /* first, last */
+ 0x8BB5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8AAC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x99E9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFBCA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x97DE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x95D1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x99F5,0xFC4A, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9BA9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFBDC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFE56, 0, 0,
+ 0, 0, 0,0x9EA4, 0, 0, 0, 0, 0, 0,
+ 0x9D49,
+ /* plane 0, page 73 */
+ 6 | (231 << 8), /* first, last */
+ 0x95DB, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x89C5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x99F8, 0, 0, 0, 0, 0, 0,0x9664, 0, 0,
+ 0, 0,0x9055, 0, 0,0x96D4, 0, 0, 0, 0,
+ 0, 0, 0,0x977C, 0, 0, 0, 0, 0, 0,
+ 0x964D, 0,0x97E1, 0, 0, 0, 0, 0, 0,0x9A48,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9A49, 0,0xFE7D, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x90AA, 0, 0, 0, 0,0x9A50, 0, 0, 0,
+ 0, 0, 0, 0,0x9347, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8ED8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x90C9, 0, 0, 0, 0, 0,0x9A55, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x90BC, 0, 0, 0, 0, 0,0x9A58,
+ 0,0x8BB8,
+ /* plane 0, page 74 */
+ 15 | (255 << 8), /* first, last */
+ 0x90D5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9641,
+ 0, 0, 0, 0, 0, 0,0x9A5A, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9A5C, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x97C2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8ABB, 0, 0, 0,0x9BAA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x90F5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9A60, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9145,
+ /* plane 0, page 75 */
+ 16 | (192 << 8), /* first, last */
+ 0x8C58, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9A63, 0, 0, 0, 0,
+ 0, 0,0x8C49, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8BB6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFCCF, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x966B,0x9A6E, 0,0x914F, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9746, 0, 0,0xA0E6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x92D7, 0,0x9675, 0, 0,0x93D4, 0, 0,
+ 0x91BB,0x9679, 0, 0, 0, 0, 0,0x9A70, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9678,
+ 0x91CD, 0,0x9C4A,
+ /* plane 0, page 76 */
+ 4 | (237 << 8), /* first, last */
+ 0xA06F, 0, 0,0xA06A, 0, 0,
+ 0, 0, 0, 0,0x915F, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9FA5,
+ 0, 0,0x89BA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9ECD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9A79,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9DCE, 0, 0, 0,0x8CD2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9D73, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x96B9, 0,0x96BC, 0, 0, 0,
+ 0, 0, 0,0x9CD1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x89B7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9EEE, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFB43,
+ /* plane 0, page 77 */
+ 9 | (156 << 8), /* first, last */
+ 0x9EC9,
+ 0, 0, 0, 0, 0, 0,0xFBD3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x91AE, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9D78, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9D7B,
+ /* plane 0, page 78 */
+ 4 | (248 << 8), /* first, last */
+ 0x9EB3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9EB2, 0,0x9DD6, 0,
+ 0, 0, 0,0x994F, 0, 0,0x89CE, 0, 0, 0,
+ 0x8BC0, 0,0x9FC4, 0,0x8BD4, 0, 0,0x8C72, 0, 0,
+ 0, 0, 0, 0,0xC6BF,0x8BF9, 0, 0, 0, 0,
+ 0,0x8946, 0,0xC6C0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFAE5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xC87B,0x8BC6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9C57, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9AFB, 0, 0, 0, 0, 0, 0, 0,0x89D0,0x89CF,
+ 0, 0, 0,0xC6C1, 0,0x89D1, 0,0x89E2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x927E, 0,0x9DBA, 0, 0, 0, 0, 0,
+ 0xC6C2, 0, 0,0x8C6F, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFBF8, 0, 0, 0,0x8BC7,0x926B, 0,
+ 0,0x89D2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9FCF, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9DA9,0x89D3, 0, 0,0x99E2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9267,
+ /* plane 0, page 79 */
+ 3 | (253 << 8), /* first, last */
+ 0x92A4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8C73, 0, 0,0x894E, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x894F,0x9278, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x91B6, 0, 0, 0, 0,0x89D4, 0,0x9FD2, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x92A7, 0, 0,0x95A2,
+ 0, 0, 0, 0, 0,0x926E, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x96EA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x926F, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x92A3, 0, 0, 0, 0, 0,0x8950, 0,
+ 0,0xFA57, 0, 0, 0, 0,0x9866, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x89D6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x98B2, 0, 0, 0,0x92AB, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x96DE,0x92AC,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8C70, 0,0x9F6E, 0, 0, 0, 0, 0, 0,0x8EF2,
+ 0, 0, 0,0x9F6C,
+ /* plane 0, page 80 */
+ 3 | (252 << 8), /* first, last */
+ 0x89D8, 0, 0, 0, 0,0xFA59, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x92A8, 0, 0, 0,
+ 0, 0,0x9163, 0, 0, 0, 0, 0, 0,0x8C40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9F73, 0,0x92AD, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9BE9, 0, 0, 0, 0, 0,0x92A9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x92AA,
+ 0, 0, 0, 0, 0, 0,0x89D9, 0, 0, 0,
+ 0, 0, 0, 0,0xFD56, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9FA8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8C71, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x92A1, 0, 0,0x90E3, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xA0A6, 0, 0,
+ 0, 0, 0,0x94AB, 0,0xFC72, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x97C4, 0, 0, 0, 0, 0,
+ 0, 0,0x92AE,
+ /* plane 0, page 81 */
+ 1 | (254 << 8), /* first, last */
+ 0xFA67, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x92A2,0xFA69, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9268, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8951, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFA6F, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFA71, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8952, 0, 0, 0,
+ 0,0x945A, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xC6C3, 0, 0, 0,0x89DD, 0,0xC8A2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xC6C4, 0, 0, 0,0x9E52, 0,0x8953, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9E55,0x92BA, 0,
+ 0,0xC6C5, 0, 0,0x8C5B, 0, 0, 0,0xFA7D,0xFAA8,
+ 0x9A68,0xFA47, 0, 0,0xFA7E, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x92BB, 0, 0, 0,0xFDB6,
+ 0,0xFAA2, 0, 0, 0, 0, 0,0xFAA3, 0,0xFAA4,
+ 0x9BB4,0xFAA6, 0, 0, 0, 0, 0, 0, 0,0x89DF,
+ 0, 0, 0,0xFDDB, 0, 0,0xFAA9, 0,0x8954, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFAAB, 0, 0,
+ 0, 0, 0, 0,0xFC7A, 0, 0, 0, 0, 0,
+ 0, 0,0x89E0, 0,0x9F4F,
+ /* plane 0, page 82 */
+ 2 | (249 << 8), /* first, last */
+ 0xC87D, 0, 0,0x89E1, 0, 0, 0, 0,
+ 0,0xFAB0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9FCD,0xA0E7, 0, 0, 0, 0, 0,0xFAB1,0x89A6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9EFA, 0, 0, 0, 0, 0, 0, 0,
+ 0xFAB2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFAB4, 0,0x92C4,
+ 0, 0, 0, 0, 0, 0,0x9F6F, 0, 0, 0,
+ 0, 0, 0, 0,0x8BB0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9FAC, 0, 0, 0, 0,
+ 0,0x89E3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9BD3,0x89E4, 0, 0, 0,0xFAB5, 0,
+ 0, 0, 0, 0,0x9FD5, 0, 0, 0, 0, 0,
+ 0,0x8955, 0, 0,0x92C5, 0, 0, 0,0x8956, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFAB3, 0, 0, 0,0xFAB6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFAB7, 0, 0,
+ 0, 0, 0, 0,0x9EDC, 0, 0, 0,0xFBC4,0x9F71,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFABA,0x92C7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xC6C6,
+ /* plane 0, page 83 */
+ 1 | (254 << 8), /* first, last */
+ 0x9A4C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8C68, 0, 0,0x89E5,
+ 0, 0, 0, 0,0x9F7D, 0, 0, 0, 0, 0,
+ 0xA0A9,0xFAC4, 0, 0, 0, 0,0xC6C7, 0, 0,0x8957,
+ 0, 0, 0, 0, 0, 0,0xFAAA, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8958, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8BE3, 0,0x8B61, 0, 0, 0, 0,
+ 0x9AF1, 0, 0,0x9EB7, 0,0xC6C8, 0, 0, 0,0xFAD1,
+ 0, 0, 0, 0, 0, 0,0xFAD2, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9EBA,0xFAD4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFAD9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFADB, 0,0x9CE0, 0, 0, 0,0xFBF7, 0,0xFBFA,0x89E7,
+ 0xA07A,0xFADC, 0, 0,0xFADD, 0,0x89E9, 0, 0, 0,
+ 0, 0,0xC6C9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFAE2,0x89EB, 0, 0,0xFAE3, 0, 0,
+ 0, 0, 0, 0,0x90C8, 0, 0, 0,0x92DA,0x8959,
+ 0x9CF5, 0, 0, 0, 0, 0,0x895A,0xFAE7,0x9FA2, 0,
+ 0, 0, 0, 0,0xFAEA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFAED,0x8FAD, 0, 0,
+ 0, 0, 0, 0,0xFB59,
+ /* plane 0, page 84 */
+ 19 | (239 << 8), /* first, last */
+ 0xFAEF,
+ 0x96EF, 0,0x9DEC, 0, 0, 0,0x9DCA, 0, 0, 0,
+ 0, 0, 0,0xFD6D, 0,0x89EC, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFB44, 0, 0,
+ 0x9DE2, 0,0x8C75, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9EC0, 0,0x9E56, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9F79,0x9AC7, 0, 0,0xFAF4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x98A1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFAF8, 0, 0, 0,0x89F0,0x9E47, 0,
+ 0,0x9DF7, 0, 0, 0, 0,0x9FD3, 0,0x9ACA, 0,
+ 0, 0, 0,0x89F1,0xFAF9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8E5A, 0,
+ 0x89F2, 0, 0, 0, 0,0x89F3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x925D,0x8B51,0x92E0, 0, 0,0x89F4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9FD4, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8A79, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x89F5,
+ /* plane 0, page 85 */
+ 2 | (251 << 8), /* first, last */
+ 0x97A7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x93BA, 0, 0, 0, 0, 0,0x9E58,
+ 0, 0, 0, 0,0x89F6, 0, 0, 0, 0, 0,
+ 0x9E57, 0, 0, 0, 0,0x89F7, 0,0x8A41, 0, 0,
+ 0x89F8, 0, 0,0xFAF1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x89FA, 0, 0, 0, 0, 0, 0,
+ 0,0xFB42, 0,0xFABF, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFBA3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFAF7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9E4E, 0,0x94DC, 0, 0,
+ 0, 0, 0,0x95DA,0x9DF8,0x9F6A, 0, 0, 0, 0,
+ 0,0x8AB7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFB46, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8A46, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFB47,
+ 0, 0, 0, 0, 0, 0,0x9148, 0, 0, 0,
+ 0x92DE, 0, 0, 0, 0,0x8B53,0x9DF6, 0,0x9BDA, 0,
+ 0, 0, 0,0x9D7E, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x89FD,0x99E4, 0, 0, 0,
+ 0, 0,0x9E43, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9DE9, 0,0x8F52, 0, 0, 0,
+ 0x9DF5,0x9DF0, 0, 0, 0,0x99E7, 0, 0, 0, 0,
+ 0,0x8BBD,
+ /* plane 0, page 86 */
+ 5 | (253 << 8), /* first, last */
+ 0x9DEF, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9FB7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9DD0, 0,0x9FEB,0x8DA9,0x9DCF,0x98E1, 0,0x9DE5, 0, 0,
+ 0, 0, 0, 0, 0,0x9DC8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFB4F, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9DEB, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFB54, 0,0xFB55,
+ 0x9AA2, 0,0x8AD6, 0,0x9A5F, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9EF5, 0, 0, 0,0x8FB7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9AD2,0x9E6A,0x9EE8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8BBF,0x91C2,0x9D62,
+ 0, 0, 0, 0, 0, 0,0x9260, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x925E,0x91C1,
+ 0,0x8AC5, 0, 0,0x97A3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8B6C, 0,0x8D7E, 0, 0,
+ 0, 0, 0, 0, 0,0x9C54, 0, 0, 0, 0,
+ 0,0x9DBD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CC5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x895B, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFB5C, 0,0xFB5B,
+ 0,0xFB57, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x98C7,
+ /* plane 0, page 87 */
+ 0 | (254 << 8), /* first, last */
+ 0xFB5A, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9CEE, 0, 0, 0, 0, 0, 0, 0,0x92E2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x94A7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8CCC, 0,0x9BD4, 0, 0,0xFB64,0xFB76, 0, 0,
+ 0xFB60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x99E5, 0, 0,0x9AC2, 0, 0,
+ 0,0x91FB, 0, 0, 0,0xA073, 0, 0, 0, 0,
+ 0, 0, 0,0x9F72, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9FCC, 0, 0, 0,0x98A5,0x92E8, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9BBC, 0,0x96F3, 0,
+ 0,0x92E7, 0, 0,0xFC67, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8B7D, 0, 0, 0,
+ 0,0x9BF4, 0, 0, 0, 0, 0,0x9EF7, 0, 0,
+ 0x9EC1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x996F, 0, 0, 0, 0, 0, 0,0x96F1, 0, 0,
+ 0x8E41, 0, 0, 0, 0, 0,0x954A, 0, 0, 0,
+ 0x97E6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x96F5, 0, 0, 0, 0,
+ 0,0x92E6,0x9F42, 0, 0, 0, 0, 0, 0, 0,
+ 0xFB67, 0, 0, 0, 0, 0, 0, 0, 0,0x99A9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFAE6,
+ /* plane 0, page 88 */
+ 3 | (251 << 8), /* first, last */
+ 0xFB69, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x97E5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x967D, 0, 0, 0,0xFB6C, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x99A2, 0,
+ 0, 0, 0, 0,0x9ABB, 0, 0, 0,0x9A65, 0,
+ 0,0x944E, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFB6E, 0, 0,0x99DF, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x98E3, 0, 0,0x9254, 0,
+ 0, 0, 0, 0,0x967B,0x8AAF, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8C77, 0, 0, 0,
+ 0, 0, 0,0x8BAF,0x9EBD, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9EE6, 0, 0,
+ 0xFB6F, 0, 0, 0, 0, 0,0x8EE1, 0, 0, 0,
+ 0,0x9B7D,0x9C7E, 0, 0, 0, 0,0xF9D9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x92EA, 0, 0, 0, 0,0x8C78, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFB72, 0, 0, 0,0xFB71, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x895C, 0,0x98F0,0x96F2, 0, 0, 0, 0, 0, 0,
+ 0,0xFB74,
+ /* plane 0, page 89 */
+ 2 | (249 << 8), /* first, last */
+ 0x8BC1, 0,0x895D,0x89DE, 0,0x895E, 0, 0,
+ 0xC6CA, 0, 0, 0, 0, 0, 0,0xFE42, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFB7B, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x895F, 0,0x8960, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9BCD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9DD3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x984C, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9752, 0,
+ 0, 0, 0, 0,0x95C3, 0, 0, 0, 0,0x9BB6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9AB9, 0, 0, 0,0x97B3, 0, 0, 0,
+ 0, 0, 0,0x9F74,0x92F1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x97DF, 0, 0, 0,
+ 0,0xFBA6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFBAB, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9877, 0, 0, 0,0x9854,
+ 0x95C5, 0, 0, 0, 0, 0, 0, 0,0x9D55,0xFBB2,
+ /* plane 0, page 90 */
+ 2 | (254 << 8), /* first, last */
+ 0x957E, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9742, 0,0x94E6, 0, 0, 0, 0,0x92F5, 0,
+ 0, 0, 0, 0, 0, 0,0x8CC5, 0, 0, 0,
+ 0, 0, 0,0x92FD, 0, 0,0xFBA2, 0, 0,0x9C51,
+ 0, 0,0x94E9,0x985C,0x92F0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x944C, 0, 0, 0, 0, 0, 0, 0,0x916B,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8B78, 0, 0, 0, 0,0x94E2,
+ 0, 0, 0, 0, 0, 0, 0,0x984F, 0,0xFBB5,
+ 0, 0, 0, 0,0x9271, 0, 0,0x9365, 0, 0,
+ 0x985B, 0, 0,0x9850, 0, 0, 0, 0, 0, 0,
+ 0,0x97BC, 0, 0, 0, 0,0x92F3, 0, 0,0x9340,
+ 0x984D, 0, 0, 0,0x9572, 0,0xFDEF, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFDC1, 0, 0, 0, 0,
+ 0xFBBA, 0, 0,0x92EB, 0, 0, 0, 0, 0, 0,
+ 0xFC73,0x97B7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFBB4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x90A7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9741,0x92F4, 0, 0,
+ 0,0xFBBC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9577, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9EE2, 0,0x8F78, 0, 0, 0, 0, 0, 0, 0,
+ 0xF9DC, 0, 0, 0,0x9672,
+ /* plane 0, page 91 */
+ 13 | (255 << 8), /* first, last */
+ 0x9EB5, 0, 0, 0,0x964B, 0, 0,
+ 0,0x8CAC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xA0FA, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9575, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x90DA, 0, 0,0x9367, 0,
+ 0xFEA4, 0, 0, 0,0x90DF, 0, 0, 0, 0,0x9354,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8961, 0,0x8BB4, 0, 0, 0, 0,0x9DC0,
+ 0, 0, 0, 0, 0, 0,0x8E48, 0,0xFBC5, 0,
+ 0, 0, 0, 0,0xFBC7, 0, 0, 0,0xC6CB, 0,
+ 0xFA79, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9E67, 0, 0, 0, 0, 0,
+ 0x8CD9, 0, 0, 0, 0, 0, 0,0xFBD2,0x8962,0x8963,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFC7D, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9F6B, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFBCC, 0,0xFEAE, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFBD1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFB75,
+ /* plane 0, page 92 */
+ 5 | (245 << 8), /* first, last */
+ 0xFBD4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFBD6,
+ 0xFBD8, 0, 0, 0, 0, 0, 0, 0,0x8B5D, 0,
+ 0x934C, 0,0x9AE2, 0, 0,0x8BC9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFBDB,0x9FC9, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9F44, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x98ED, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFBDD, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8DF2,0x8964, 0,0xFDF2, 0,0x934D, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFBE7, 0, 0, 0,
+ 0, 0, 0,0xA0F2,0x9868, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9F58,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8D73,
+ 0, 0, 0,0xFBDE, 0, 0, 0, 0, 0,0xFBDF,
+ 0, 0, 0, 0, 0,0x8C48,
+ /* plane 0, page 93 */
+ 16 | (245 << 8), /* first, last */
+ 0xFBE3, 0, 0, 0,
+ 0,0x8DA8, 0, 0,0xFBE4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9C75, 0, 0,0x9878, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8D60, 0, 0, 0, 0, 0, 0, 0,
+ 0xFBE5, 0,0x8D61, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8D62,0xA0A1, 0, 0,
+ 0,0x9C40, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x98AD, 0, 0, 0,0x9EEA, 0, 0, 0,
+ 0, 0, 0,0x8CD4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9CEB, 0, 0, 0, 0, 0,0xFBE0,
+ 0, 0,0x9F51, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8D65, 0, 0, 0, 0, 0,
+ 0,0x9CF1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFC58, 0, 0,0x8D66, 0, 0, 0, 0,
+ 0, 0, 0,0x9654, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFBE8, 0, 0, 0,0xC6CC,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9FCE,
+ /* plane 0, page 94 */
+ 9 | (252 << 8), /* first, last */
+ 0xFBFC,
+ 0,0x9AE4, 0, 0, 0, 0, 0, 0,0x9F75, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFBF1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8D69, 0, 0, 0,
+ 0, 0,0x934F, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x934E, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFBF4, 0, 0, 0, 0,0xC6CE, 0, 0,
+ 0,0xFBC3, 0, 0,0x8965, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8C7A, 0, 0, 0,
+ 0, 0, 0,0x8C7B, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8D6A,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9353, 0, 0,0x9DFB, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFBFD, 0, 0, 0,0x9059,0xFC40,
+ 0,0xFC41,0xFC43,
+ /* plane 0, page 95 */
+ 12 | (223 << 8), /* first, last */
+ 0x9361,0xFC46,0x9362, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8D6B, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFC4C, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x95B8, 0, 0,
+ 0xC6D0,0x8BCA, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x987A, 0, 0, 0, 0,0xC6D1, 0,0xFC51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFC54, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFAAF, 0, 0, 0, 0, 0, 0,
+ 0,0x8D6C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFA61, 0, 0,0xFC57, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9B70, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xA051, 0, 0, 0,
+ 0, 0, 0, 0,0x8C7C, 0,0x8BCB, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x936E,
+ 0, 0, 0,0xFCD5,
+ /* plane 0, page 96 */
+ 35 | (253 << 8), /* first, last */
+ 0xFCA9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFC61,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8966,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFACB, 0, 0, 0, 0, 0,
+ 0, 0,0xF9DA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x937A, 0,0xA0E0,
+ 0, 0, 0, 0, 0, 0,0x936B, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFC6B, 0,
+ 0, 0, 0, 0,0xA0DC, 0, 0,0x9468, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFC6D,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8D71, 0, 0, 0, 0,
+ 0, 0,0xFD64, 0, 0, 0, 0,0x99BA, 0, 0,
+ 0,0x9AD0,0x9A61,0xA0E5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA05B,
+ /* plane 0, page 97 */
+ 7 | (226 << 8), /* first, last */
+ 0x96AC, 0, 0,
+ 0, 0,0x9740, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9EF1, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8C4D, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9F7E, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8D72, 0, 0, 0, 0,0xFC76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x96A9, 0, 0, 0, 0, 0, 0, 0, 0,0xA06E,
+ 0, 0,0xFCAA, 0, 0, 0,0xFBCD, 0, 0, 0,
+ 0xFC74, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xA074, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xA071, 0, 0, 0,0xFC79,
+ 0, 0, 0, 0, 0,0xFC7C, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9C50,
+ 0, 0,0x9379,0x9378, 0, 0,0xA0DD, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8D75, 0,0x8D76, 0, 0, 0, 0,
+ 0, 0,0x9374, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8D77,0xFCA5, 0,
+ 0,0xFCA2, 0, 0, 0, 0, 0, 0,0x90C3, 0,
+ 0, 0, 0, 0, 0, 0,0xA079,
+ /* plane 0, page 98 */
+ 44 | (229 << 8), /* first, last */
+ 0x8D79, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8BFC, 0,0xA076, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8BCD, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9F5A, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9FF4, 0, 0,0x9FBA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8D7A, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9E45, 0, 0,
+ 0, 0, 0, 0,0x93B0, 0,0xA075, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9B46, 0,0xFCAE, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFCB0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFA51, 0, 0, 0, 0, 0,0x8D7B,
+ /* plane 0, page 99 */
+ 24 | (254 << 8), /* first, last */
+ 0x8D7C, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9ED6, 0, 0,0x93AC,
+ 0, 0, 0,0x9F5B, 0,0x93A9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xA07C, 0, 0, 0, 0, 0, 0, 0,0xFCB2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8AC1, 0, 0, 0, 0, 0,0x9FB4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFCAC,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9E4C, 0, 0, 0, 0,
+ 0, 0, 0,0x8FC5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x93AD,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9DC3, 0, 0, 0,0x8DA2, 0, 0, 0,
+ 0x9D4A, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFCB6, 0,
+ 0,0x8DA3,0x9E4B, 0,0x9E4D,
+ /* plane 0, page 100 */
+ 7 | (234 << 8), /* first, last */
+ 0x8DA4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8AFD, 0, 0, 0, 0, 0,0xFCB5, 0,0xFCC3,0x93B2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8DA5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x93A1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8AC6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8A5B, 0, 0, 0,0x894D, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFED4, 0, 0, 0, 0,
+ 0x8A78, 0,0x93AB, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8DA7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9F45, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8A56, 0, 0, 0,0xFCBF, 0, 0, 0,0xFCC0,
+ 0,0x8EE6, 0, 0,0x8AA4,
+ /* plane 0, page 101 */
+ 10 | (255 << 8), /* first, last */
+ 0x8943, 0, 0, 0, 0, 0, 0,0x93F3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFCAB,0x9EA2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9DC7, 0,
+ 0, 0,0xC6D2,0x8BCE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFCC5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFCCB, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x93B3, 0,0xFCCA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFCC9,0x8DAC, 0,0xFBC6,0x8967, 0,0x8C7E,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFCCD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9CF3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFCD0,
+ 0, 0,0x95BB, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFCD3, 0, 0,0xFCD4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8DAE,
+ /* plane 0, page 102 */
+ 24 | (241 << 8), /* first, last */
+ 0xFCD7, 0, 0, 0, 0, 0,
+ 0x93DB, 0, 0, 0, 0,0xFE63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x93D5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFCDA, 0,
+ 0, 0,0x9B71, 0, 0,0xFCDD, 0, 0, 0, 0,
+ 0, 0, 0,0x8DAF, 0, 0, 0,0xFAF2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x93D8,
+ 0, 0, 0,0xFCDF, 0, 0, 0,0x93D3, 0, 0,
+ 0, 0, 0, 0, 0,0xFCE1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8E76, 0, 0, 0, 0,
+ 0, 0, 0,0xFC62, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x93D1, 0, 0, 0,0x8DB1, 0, 0, 0,
+ 0, 0, 0, 0,0x9859, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFB52, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFB53, 0, 0, 0, 0, 0,0xFB4D,
+ 0, 0,0x9CBF, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9B72, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFB50,0x93BE, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9DF1,
+ /* plane 0, page 103 */
+ 2 | (254 << 8), /* first, last */
+ 0xFCEB, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xA0BB, 0,0x9B7E, 0, 0, 0, 0, 0,
+ 0, 0,0x8DB3, 0, 0,0x8C52, 0, 0, 0, 0,
+ 0x9AE8, 0, 0, 0, 0, 0, 0,0x8EDC, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CF9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFA50, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x98E7,0xFCF3, 0,
+ 0, 0, 0,0xFCF2, 0, 0, 0,0x8CCA, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x93E5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9A59, 0, 0, 0,0x8DB5, 0, 0, 0, 0, 0,
+ 0, 0,0xFD4D, 0, 0, 0, 0,0xFD5E, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8F7D, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9547,0xFCF6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9250,
+ 0, 0, 0, 0,0x8968,
+ /* plane 0, page 104 */
+ 0 | (202 << 8), /* first, last */
+ 0x8DB6,0xFCFB,0xA07D,0x98FC,0x8969, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFE4F, 0, 0,0x9256, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFAC9, 0, 0,
+ 0x93E8, 0, 0, 0,0xFCF8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CE3,0xFDA9, 0, 0, 0, 0,
+ 0, 0,0xFC44, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9640, 0, 0,0x8DB8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9B4A,0x8FB9, 0, 0, 0,
+ 0, 0, 0,0xFCFE, 0, 0, 0, 0, 0, 0,
+ 0,0x896A, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8DB9, 0, 0, 0,0x917E, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x93F4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFB7C, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x93E7, 0, 0,0x97EF, 0, 0, 0,0xFE4A,
+ 0, 0, 0, 0, 0,0xFD45, 0,0x96A5, 0, 0,
+ 0, 0,0xFEE0,
+ /* plane 0, page 105 */
+ 0 | (250 << 8), /* first, last */
+ 0xFD48,0xFD47,0xFEF2,0xFE6A, 0, 0, 0, 0, 0,0x8DBD,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BA1,0x8CA2,0x9AB7,0x8EFC, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9FA1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFD51, 0, 0, 0, 0, 0,
+ 0, 0,0xFAAD, 0, 0, 0, 0,0x8DBE, 0, 0,
+ 0x89A4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9AD9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFD4E, 0, 0,
+ 0x8DC0, 0, 0,0x97F0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x93B4,0xFD44, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9FA7, 0,
+ 0, 0, 0,0x8DC2, 0, 0, 0, 0,0x99B6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFD52, 0, 0, 0, 0, 0, 0,0x8DC1,
+ 0, 0,0x8E46, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA0D1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9FCA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x92CF,
+ 0, 0, 0,0x9CF4,0x8DC4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFD41, 0, 0, 0, 0,
+ 0, 0, 0,0x9B4C, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD57,
+ 0xFCEF,
+ /* plane 0, page 106 */
+ 3 | (246 << 8), /* first, last */
+ 0x9CDE, 0, 0, 0, 0, 0, 0,
+ 0,0xFD42,0x986C, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x97F9, 0,0x9558, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x985E,0xFE7B,0x94CD, 0, 0, 0, 0,
+ 0,0x93EE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8CA3, 0,0xFD5A,
+ 0, 0, 0, 0, 0, 0,0x93F5, 0, 0, 0,
+ 0, 0,0x93EF,0x8EEA, 0, 0, 0,0x8F5B, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8C5E,
+ 0,0x8DC6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8DC8, 0, 0,0x8DC7, 0, 0, 0,
+ 0, 0,0x93F7, 0, 0, 0, 0, 0, 0, 0,
+ 0x8DC9, 0, 0, 0, 0, 0, 0, 0,0xFBF2, 0,
+ 0, 0, 0,0x9670, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8DCB, 0, 0, 0,0xFD5C, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8F65, 0, 0,
+ 0,0x8DCD, 0, 0, 0, 0, 0,0x9DA8,0x94F9, 0,
+ 0,0x8DCE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x93EA, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFD5F,0x93F0,0x9FB6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8DCF, 0, 0, 0,0x9763, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8DD0,
+ /* plane 0, page 107 */
+ 5 | (250 << 8), /* first, last */
+ 0x93F1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFD65, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9FDB, 0, 0, 0, 0,0x93F8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8BF7, 0, 0, 0, 0,0xFD66, 0, 0, 0,
+ 0, 0,0x8BCF, 0, 0, 0, 0, 0, 0,0x8DD1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8DD2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFD71, 0, 0, 0, 0,0xFD6F, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8DD3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9FE7,
+ /* plane 0, page 108 */
+ 28 | (255 << 8), /* first, last */
+ 0x90BD, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9FD0,
+ 0, 0, 0,0x8BD0, 0,0xFD72, 0,0x9CAE,0x8BD1, 0,
+ 0,0x8ADB, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFAE4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x95CE, 0,
+ 0xFD76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFB62, 0, 0, 0, 0, 0, 0,0x8DD4, 0, 0,
+ 0,0xFD78, 0, 0, 0, 0, 0,0x8EE3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9076,
+ 0, 0,0x98C6, 0, 0, 0, 0, 0, 0, 0,
+ 0x8DD5, 0, 0, 0, 0,0x97D1, 0, 0,0x9EB6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFAC7, 0, 0,0xA042, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9873, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9FFC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8CA5,
+ /* plane 0, page 109 */
+ 2 | (254 << 8), /* first, last */
+ 0x8DD7, 0, 0,0x92FB,0x8DD8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x944F, 0,0x8DD9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x896B, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x97CE, 0, 0,
+ 0,0xFAF3,0xFDAE, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFBAF,0x92B7, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8DDA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9C5A, 0, 0, 0, 0, 0, 0,
+ 0xFDAD, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8DDC,0x9444, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8DDD, 0, 0,
+ 0, 0, 0, 0, 0,0xA0D6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8C41,
+ /* plane 0, page 110 */
+ 2 | (250 << 8), /* first, last */
+ 0x97D5, 0,0x944A, 0, 0, 0, 0, 0,
+ 0x944D, 0, 0, 0, 0,0x97CB, 0, 0, 0, 0,
+ 0,0x8DDE, 0, 0,0x8DDF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8DE0,0xFEF9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFDC0,
+ 0xFCF9, 0, 0, 0, 0, 0, 0, 0, 0,0xFB7E,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x92B3, 0,
+ 0, 0, 0, 0,0xFDAF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8DE1, 0, 0, 0, 0,0x95D3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x89C1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFD68, 0, 0,0x9CB7, 0, 0,0x8DE3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFAC0,0x8DE5,0xFA64,
+ 0,0x8947, 0, 0, 0, 0,0x8DE4, 0, 0, 0,
+ 0, 0,0x8DE7,0x8DE8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFDC7,
+ /* plane 0, page 111 */
+ 4 | (248 << 8), /* first, last */
+ 0xFDB0, 0, 0, 0, 0, 0,
+ 0,0x9445,0x97D6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFCC6,0x9844, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8DE9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8DEA, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFE50, 0, 0, 0, 0, 0, 0,0xFDCC, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9DA7, 0, 0, 0,
+ 0, 0,0xFDCD, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFDCF, 0, 0, 0,
+ 0,0x95D2, 0, 0, 0, 0, 0, 0, 0,0x8DED,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFCBA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFDC5, 0,0xFDD2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9CDC, 0, 0, 0, 0, 0,0x95CF, 0, 0,
+ 0x8DEE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFDD4, 0, 0, 0, 0, 0,0x96EC,0x96EB, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x90B6, 0,0xFDC3,
+ /* plane 0, page 112 */
+ 3 | (254 << 8), /* first, last */
+ 0x98AB, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x96EE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8DF4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFDE0, 0,0x8C67, 0, 0,
+ 0x8DF6, 0, 0, 0,0x8DF7, 0, 0, 0, 0, 0,
+ 0, 0,0x8FFA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x97D0, 0, 0, 0, 0,0x8BD2, 0,
+ 0,0x8DF8, 0, 0, 0, 0, 0,0x90D9, 0,0x8C47,
+ 0,0xFAF0, 0, 0, 0, 0,0xFDE1,0x8DF9, 0,0xFDE3,
+ 0, 0, 0, 0, 0, 0, 0,0x8DFA, 0,0xFB63,
+ 0, 0, 0,0x90A6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9970, 0, 0,0x91EB, 0,0x9770,0x986F,0xFDE2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x98F2, 0,0x9AFC,0x896C,0xFDFD,
+ 0, 0,0x995E, 0, 0, 0,0x95BD, 0, 0, 0,
+ 0, 0, 0, 0,0xFDE4, 0, 0, 0,0x91E6, 0,
+ 0, 0, 0,0xFDE5,0xFDE6, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFDE7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9454, 0, 0, 0,0x99B8, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x97E9,
+ /* plane 0, page 113 */
+ 5 | (246 << 8), /* first, last */
+ 0x9346, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9863,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x95BC, 0,0xFDED,0xFDF7, 0, 0, 0, 0, 0,
+ 0,0x9870,0x96F6,0x8EA9, 0, 0, 0, 0, 0,0x9451,
+ 0, 0,0x8E43, 0,0x8B5A, 0, 0, 0, 0,0xFDEE,
+ 0, 0, 0, 0,0xFDF0, 0, 0, 0, 0,0xFDF4,
+ 0,0x9BF5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x977E, 0, 0,
+ 0, 0, 0,0x9BD5, 0,0x9AC3, 0,0x97C8,0xA0DB,0x91D0,
+ 0, 0,0x9FE4, 0,0x8FDD, 0,0x91E9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x98E0, 0, 0, 0,
+ 0x92CA, 0,0x9857, 0, 0,0x8C51, 0, 0, 0, 0,
+ 0xFDEB, 0,0x9B49, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9D76,0x9EAF, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9CCC, 0, 0, 0, 0, 0, 0,
+ 0xFDEA, 0, 0,0x8DF1, 0, 0,0xFDFB, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8E53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFACF, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x96F9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x98BF,0x9E49,
+ /* plane 0, page 114 */
+ 0 | (226 << 8), /* first, last */
+ 0x8CA7, 0, 0, 0, 0, 0, 0, 0, 0,0x9BCA,
+ 0, 0, 0, 0,0xFDFE,0x92DC, 0, 0, 0, 0,
+ 0,0xFE41,0x91CC,0x91E2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFE44, 0, 0, 0,
+ 0, 0, 0,0x8BD3, 0, 0,0xFE47, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFE48, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9455, 0, 0, 0, 0,0xFE4B, 0,0xFE4C, 0, 0,
+ 0, 0,0x8DBF, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9E78, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFE51, 0, 0, 0, 0,0x9456, 0, 0, 0, 0,
+ 0, 0, 0,0x9D61, 0, 0, 0, 0,0x9457, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9966,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8BD5, 0, 0, 0, 0,0xA069, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x98B4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xA049,
+ /* plane 0, page 115 */
+ 2 | (251 << 8), /* first, last */
+ 0xA04C, 0,0x9E65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x98B5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFE58, 0,0x9975,0xFE53,0xA065, 0,0xFE59, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x98B7,0x98B8, 0, 0,
+ 0, 0, 0, 0, 0,0x98BA, 0, 0, 0, 0,
+ 0, 0,0x98BB, 0, 0, 0, 0, 0, 0,0x9FBC,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA04A, 0, 0,0x9EC7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8CA9, 0, 0,0x98AE, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x92D6, 0, 0, 0,0xFAE1, 0,0x91D4, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFADE, 0, 0,
+ 0xFE5B, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8C53, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFE5E, 0, 0, 0, 0,0xFBD7,0xFE5A,0x94C5, 0,
+ 0, 0, 0,0xFACA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x98C1,0x975C, 0,0xFE74, 0,
+ 0x9773, 0, 0, 0, 0, 0, 0, 0, 0,0xFA46,
+ 0, 0, 0,0x9764, 0, 0, 0,0xFE68, 0,0x964E,
+ 0,0x9765,
+ /* plane 0, page 116 */
+ 2 | (248 << 8), /* first, last */
+ 0x8C5A, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x89A1,0x95FA, 0,
+ 0x92D4,0xFE69, 0,0xFB45, 0,0x98C8, 0, 0,0x90EF, 0,
+ 0x98C9,0x98CA, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x946D,0x94B7,0xFE6C, 0, 0,
+ 0x946B, 0, 0, 0, 0, 0, 0,0x92FC, 0,0x95EB,
+ 0,0xFE73,0x976E,0xFE5F, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFDBD, 0, 0,0x92D5, 0, 0, 0,
+ 0, 0, 0,0xFEB9, 0, 0,0xFE71, 0, 0, 0,
+ 0,0xFBBB, 0, 0,0x947A, 0, 0,0x95FB,0xFE77, 0,
+ 0, 0, 0, 0, 0, 0,0xFE79, 0,0xFE75, 0,
+ 0, 0,0x945D, 0, 0, 0, 0, 0, 0, 0,
+ 0xFE7C, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9344,0x8EA6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x92D3, 0,0x94B8, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFC71, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x975E, 0, 0, 0, 0,0x8CAD, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFEA7, 0, 0, 0,0x946A, 0, 0, 0,0x93E3, 0,
+ 0,0x98CF, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xA0D9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xA0BF,0xA04D,0xA0B8, 0, 0, 0, 0, 0,0xA0CE,
+ /* plane 0, page 117 */
+ 5 | (220 << 8), /* first, last */
+ 0xA0B7, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFEA9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x89C3, 0, 0, 0, 0,
+ 0xFEAB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9DF4,0x896D, 0, 0, 0, 0, 0,0x9C7B,
+ 0, 0, 0, 0, 0, 0,0x98D2, 0, 0, 0,
+ 0x9FA9, 0, 0, 0,0xFEB2, 0, 0,0xFEB1, 0, 0,
+ 0,0x97D9, 0,0xA0C4, 0,0x9476, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9978, 0, 0, 0,
+ 0, 0, 0,0xFEB3, 0, 0, 0, 0, 0,0x98D3,
+ 0xFEB4, 0, 0, 0,0x98D4, 0, 0, 0, 0, 0,
+ 0, 0,0x9FB9, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9471, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x98D5,0xFEB8, 0, 0, 0,0xC6D4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFEBA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9E5C, 0, 0,
+ 0xFEBB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xA044, 0, 0, 0, 0,
+ 0x98D7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x98D8,
+ /* plane 0, page 118 */
+ 2 | (217 << 8), /* first, last */
+ 0xFEBC, 0, 0, 0, 0,0x9FFE, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFEBD, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9DDD,
+ 0, 0, 0, 0,0x9EE1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x98DA,0x9DDF,0xFEBF,
+ 0,0xFEBE, 0, 0,0x9EEB, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9E59,0xA05C, 0, 0, 0, 0, 0, 0,
+ 0,0xFEC0, 0, 0, 0,0x9477,0x98DC, 0,0xFEC1, 0,
+ 0, 0,0x98DE, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFEC3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFEC8, 0, 0, 0,0xFEC9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFECA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFECB, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9FC2, 0, 0,0x8C6B,
+ /* plane 0, page 119 */
+ 12 | (254 << 8), /* first, last */
+ 0x98C4, 0,0x94B0,0x94B1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFED1, 0, 0, 0, 0, 0,0xA0C1, 0,0xFED2, 0,
+ 0, 0, 0,0xA0CD, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFED3, 0, 0,0x98E5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFED6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x91E4, 0, 0, 0, 0,0x8FC7,
+ 0x94AE, 0,0x8A4F,0x94B2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8FD4, 0, 0,
+ 0, 0,0x98EA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFED8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9DE0, 0, 0, 0, 0,
+ 0x98EE, 0, 0, 0, 0,0x95C4, 0,0xFCE8, 0, 0,
+ 0, 0, 0,0x98EF, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8C6E, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFAD8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFEDC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xA0AE,
+ /* plane 0, page 120 */
+ 8 | (245 << 8), /* first, last */
+ 0x9D4C, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x98F1, 0, 0, 0,0x98F3, 0,
+ 0x94C1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x98F5, 0, 0,
+ 0xFA4F,0x96E2, 0, 0, 0, 0,0x9450, 0,0x96A2, 0,
+ 0,0x98F6, 0, 0, 0,0x96E5, 0, 0, 0, 0,
+ 0,0x98F7, 0,0xA046,0x96E3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x98F8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9EE4, 0, 0, 0, 0, 0, 0,0xF9D6,
+ 0, 0, 0, 0, 0, 0,0x94C3, 0, 0, 0,
+ 0,0x94C2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFEE1, 0,0xFEE9, 0, 0,
+ 0, 0,0x96E4, 0,0x89AC,0x96DB, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFEE2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x94C4,0xFEE3, 0, 0, 0,0xFEE7,0x9FFB, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8C59, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x93C9, 0,
+ 0x94E8,0xFB56, 0, 0, 0,0x90C5,
+ /* plane 0, page 121 */
+ 6 | (244 << 8), /* first, last */
+ 0xA0A8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFEE5, 0, 0, 0,
+ 0x98FD,0x98FB,0xFEE8, 0,0x8EBF, 0, 0, 0, 0,0x8BD8,
+ 0xFEF7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8F68,0x94C6,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9DEA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFC69, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9CDA, 0,0xFEF3, 0,
+ 0,0x9C72, 0, 0,0xFEF0,0x89C9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9941, 0, 0, 0, 0,
+ 0, 0, 0,0x9942, 0, 0, 0,0xFEF5, 0,0x91D7,
+ 0, 0, 0, 0, 0,0x94CC, 0, 0, 0,0xFEF8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x97A8, 0,0xFEFC, 0,
+ 0, 0, 0, 0,0xFDBF, 0, 0, 0, 0, 0,
+ 0, 0,0xFEFE, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x96D1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x94D5, 0, 0,0x94D0,
+ /* plane 0, page 122 */
+ 6 | (254 << 8), /* first, last */
+ 0x9944, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8C63, 0, 0,0xA0B3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x94CF, 0,
+ 0, 0,0x9FFA, 0, 0, 0, 0,0x91E5, 0,0x9C6A,
+ 0, 0, 0,0x8E49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8E4C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8E4D, 0, 0, 0, 0,
+ 0,0x9A73, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9947, 0,0x8CB1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8E50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8E4F,0x9949, 0,
+ 0, 0, 0, 0,0x8E51,0x8E52, 0, 0, 0, 0,
+ 0x9AB2,0x89A5, 0, 0, 0, 0, 0,0x994C, 0, 0,
+ 0,0x9FF8, 0, 0, 0, 0, 0, 0,0x8E56,0x994D,
+ 0x91CA,0x8E57, 0, 0, 0, 0,0x94E1, 0, 0, 0,
+ 0,0x9047, 0,0x8FD8,0x8E58, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x94EB,
+ /* plane 0, page 123 */
+ 11 | (252 << 8), /* first, last */
+ 0x8E5C,0x9553, 0, 0, 0, 0, 0, 0, 0,
+ 0x9FE5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9F56, 0, 0, 0, 0, 0, 0, 0,0x954F,
+ 0,0x8E5E, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x996A, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9C64,0x9CD9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8E5D, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9950, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9951, 0,
+ 0,0x8E62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9952, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8E68, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8E61,0x9F59, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8BB3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9F5D,0x8E66, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8CB2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8E6E, 0,0x9F64,
+ /* plane 0, page 124 */
+ 18 | (252 << 8), /* first, last */
+ 0x9953, 0,
+ 0,0xFAB8, 0, 0, 0, 0, 0,0x9954, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8E70, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9F61, 0,0x8E72, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xA06B, 0, 0, 0, 0,0x9F40, 0, 0, 0,
+ 0, 0, 0,0x94ED, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94EE,
+ 0, 0,0x9FBD, 0, 0, 0,0x8E7B, 0, 0, 0,
+ 0, 0, 0,0x9957,0x94F7, 0,0x9F5F, 0, 0, 0,
+ 0,0x8E73, 0, 0,0x9F62, 0, 0, 0, 0, 0,
+ 0, 0,0x94F6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9958, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8E75,0xF9DB, 0, 0,
+ 0, 0,0x9072, 0,0x94F8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x995A, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xA0B0,0x8CB3, 0, 0, 0,0x8E79,
+ 0,0x8E78, 0, 0, 0,0x94F3, 0, 0, 0, 0,
+ 0,0x98AF, 0, 0, 0, 0, 0, 0,0xA0B2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8E7A, 0, 0, 0, 0, 0, 0,0x995C, 0, 0,
+ 0, 0, 0,0x8E7C, 0,0x8E7D, 0, 0, 0,0x8BD9,
+ 0, 0,0x89A2,
+ /* plane 0, page 125 */
+ 37 | (254 << 8), /* first, last */
+ 0x9ED7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xA0B6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9E42, 0, 0,0x8EA4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8EA7, 0,0x8C76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9542, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x987D, 0, 0, 0,0x9755, 0,
+ 0,0x8EA8, 0, 0, 0, 0, 0, 0, 0,0x8EAA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x89A3, 0,0x9960,0x9962, 0,
+ 0,0x94FC,0x9961, 0, 0, 0, 0, 0, 0, 0,
+ 0x94FA, 0, 0, 0, 0, 0, 0, 0,0x8EAE,0x8EB2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8EB0, 0, 0, 0, 0,
+ 0, 0, 0,0x9963,0x97AA,
+ /* plane 0, page 126 */
+ 7 | (223 << 8), /* first, last */
+ 0x94FB, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8EBB,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8CDC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9876, 0,0x8EA1, 0, 0, 0, 0,0x8CB4, 0,
+ 0x8EB7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9DA6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9EB0, 0, 0, 0,0x8EB8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9D70,
+ 0, 0, 0, 0,0x896E, 0, 0, 0, 0, 0,
+ 0, 0,0x896F, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8970, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8971,
+ 0, 0, 0, 0, 0, 0, 0,0x8972, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8973,
+ /* plane 0, page 127 */
+ 6 | (250 << 8), /* first, last */
+ 0x8974, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8975, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8EBC,0x8EBD, 0, 0, 0, 0,
+ 0,0x8EBE, 0,0x9DD1, 0, 0, 0, 0,0x94FD, 0,
+ 0, 0,0x8BD7,0x8BDA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA0E2, 0, 0, 0, 0, 0, 0,
+ 0x9FE9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFDA8, 0, 0, 0,0x8AE7, 0, 0,
+ 0,0x8EC2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8EC4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9964, 0, 0, 0, 0, 0,
+ 0x9965, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x954E, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x98B3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8ECB,
+ /* plane 0, page 128 */
+ 2 | (246 << 8), /* first, last */
+ 0x8BDF, 0, 0, 0, 0, 0,0x8ECE, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8ECF,
+ 0, 0,0x9968, 0, 0, 0, 0,0x9969, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x996B,0x8ED1, 0,0x996C,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8ED4,
+ 0x8ED5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x996D, 0, 0, 0, 0, 0,
+ 0,0xA0BE, 0, 0, 0, 0, 0,0x8ED6,0xA0BC,0xA0B5,
+ 0, 0,0xA0B4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8BE0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x89B5,
+ 0, 0, 0, 0, 0, 0, 0,0x8EDD, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9E5D,0x9971, 0, 0, 0, 0,0x89AE,0x9DE8,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9565, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9972, 0, 0,0x8B5C, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x89B1,
+ /* plane 0, page 129 */
+ 3 | (246 << 8), /* first, last */
+ 0xA0C0, 0, 0, 0,0x8EDF, 0,0x9566,
+ 0, 0,0x9974, 0,0x9976, 0, 0, 0,0x9977, 0,
+ 0x9979, 0, 0,0x9DDA, 0, 0,0x8EE0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x935C, 0, 0, 0, 0, 0, 0, 0,
+ 0x9DE6, 0,0x8B5F, 0, 0,0x9563, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9567, 0, 0, 0,
+ 0, 0,0x9DE3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x997C, 0, 0,0x997D,
+ 0x997E, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8B5B,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x99A3, 0, 0, 0, 0, 0,
+ 0, 0,0x99A4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x99A6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x99A8, 0, 0, 0, 0,
+ 0x8ABE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9E61, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x99AA, 0, 0, 0, 0, 0, 0,
+ 0xA0C8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x99AB, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFEC4,
+ 0, 0, 0, 0, 0, 0,0x98C2,
+ /* plane 0, page 130 */
+ 24 | (255 << 8), /* first, last */
+ 0x8EE8, 0,0xA0BA, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFD77, 0,
+ 0,0x8EEE, 0, 0, 0,0x9EBF, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x89C2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x99AC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x956B, 0,
+ 0,0x956C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x99AF, 0,
+ 0,0x994A,0x8976,0x8F48, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFBEE, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x99AE, 0, 0, 0,
+ 0x8EFB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8CD0, 0, 0, 0, 0,0x8B52, 0, 0, 0,
+ 0, 0,0x99B0, 0, 0, 0, 0,0x8977,0x8F41, 0,
+ 0, 0, 0, 0, 0, 0,0x99B1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8F49, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFA4D, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9DE4,0x8CB5, 0,
+ 0, 0,0xFBE9,0x9B54, 0,0x99B2,
+ /* plane 0, page 131 */
+ 11 | (237 << 8), /* first, last */
+ 0x9E68, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8F4A, 0,0x8F42, 0, 0,0x8F51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9846, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x99B4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8EF5,0xFD55,
+ 0, 0,0x9CCD, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8978, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8F53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8F6F, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8E63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8F56, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFE76, 0, 0, 0, 0,
+ 0x9FC6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFAAC, 0, 0, 0, 0,
+ 0,0x8F58, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9848,
+ /* plane 0, page 132 */
+ 5 | (248 << 8), /* first, last */
+ 0x99B7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9665, 0,0xFA6C, 0,0x9DE7, 0, 0, 0,0x9E62, 0,
+ 0, 0,0x96CC,0x8E67, 0, 0,0xFC75, 0,0x987E, 0,
+ 0, 0, 0, 0, 0, 0,0xFDB9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x97FC, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x98F9, 0,0x8F66, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x956E, 0,0x9245, 0, 0,0x8F60, 0,
+ 0, 0,0x9ED1, 0, 0, 0, 0, 0,0xFECD, 0,
+ 0x99B9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8F62,0x974C, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x91C7,0x955F, 0,
+ 0, 0, 0, 0, 0, 0,0x99BB, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8E6D,0x8F71, 0, 0,
+ 0x94CB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x95B1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9AF2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x96C3,
+ 0x99BD, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA0CF, 0,
+ 0, 0,0x8F6D, 0, 0,0x99BE,0x8EF4, 0,0x8F72,0x95E4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x99BF,
+ /* plane 0, page 133 */
+ 3 | (252 << 8), /* first, last */
+ 0x9242, 0,0xFBA5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x99C0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFDB4,0x8F77, 0, 0, 0,0x99C1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFAB9, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8F40,0xFA44, 0, 0, 0,
+ 0, 0,0x99C2, 0, 0, 0, 0, 0, 0, 0,
+ 0x8F5C, 0, 0, 0, 0,0x8CBD, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x99C4,0x99C5, 0, 0,0x8F7B, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8CB6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8FA3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8CCE, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x99C6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x96CD, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x96C7,
+ /* plane 0, page 134 */
+ 2 | (239 << 8), /* first, last */
+ 0x8FA5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFABB, 0,0x8C61,0x9570, 0, 0, 0,
+ 0x9368, 0,0x8F7E, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8FAA, 0, 0, 0, 0, 0, 0,0xA050, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x90D3, 0, 0,0x9556,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8FB8, 0,
+ 0, 0, 0, 0,0x99C8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8FAF, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x99C9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9579, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9F49, 0, 0, 0, 0,0x99CA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x99CB,
+ /* plane 0, page 135 */
+ 112 | (245 << 8), /* first, last */
+ 0x9DD5,0x8FB0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFA7A, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9E5F, 0, 0, 0, 0,0x99CD,
+ 0xA0C9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9ADB, 0, 0, 0,0xA0C6,
+ 0, 0, 0, 0, 0, 0, 0,0x8FB4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA0D7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xA0C7, 0, 0, 0,
+ 0, 0, 0, 0,0xA043, 0, 0, 0,0x8FB5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8FB2, 0,
+ 0, 0, 0, 0, 0,0xA061,
+ /* plane 0, page 136 */
+ 4 | (255 << 8), /* first, last */
+ 0x9E5E, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8FB6, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9FE8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9CB2,
+ 0, 0, 0, 0, 0,0x957C, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9FC7, 0, 0,0x8FBB,
+ 0x8FBC, 0, 0, 0, 0, 0, 0, 0, 0,0x8FEC,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8FC0, 0,0x936A, 0, 0, 0,
+ 0x8BE4,0x9C7C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x95A1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFEEC, 0, 0,0x95A3, 0, 0, 0, 0,
+ 0, 0, 0,0x8C45,0x8CB8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8FC1, 0, 0, 0,
+ 0xA052, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x99D0, 0, 0, 0, 0, 0,
+ 0x8FC3,0x8FC4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x95A4, 0, 0, 0, 0, 0,0x8FC6, 0,0x9E60,
+ 0, 0, 0, 0, 0, 0, 0,0xF9D8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x95A5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9CB3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x99D1,
+ /* plane 0, page 137 */
+ 0 | (231 << 8), /* first, last */
+ 0xFEF1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x99D2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9CC2, 0, 0,
+ 0,0x99D3, 0, 0, 0, 0, 0,0x95A7, 0, 0,
+ 0, 0, 0, 0,0x95A9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x95A6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9C5D,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x98E2, 0,
+ 0, 0, 0, 0, 0,0x8FC9, 0,0xA0C2,0x8FCA, 0,
+ 0, 0, 0, 0, 0,0x99D4, 0, 0,0xA0B9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9B58, 0,0x8FCD, 0,0xA0D4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8FCE, 0,
+ 0, 0, 0,0x8BE5, 0, 0, 0, 0,0x8979, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8FD0,
+ /* plane 0, page 138 */
+ 28 | (234 << 8), /* first, last */
+ 0x95B6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x99D6, 0,0x95E5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x99D7, 0, 0, 0,
+ 0,0x95B5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA0CA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9FFD, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xA058, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8FD6, 0, 0, 0,0x99D8, 0,
+ 0, 0, 0, 0, 0, 0,0x8FD3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8FE5,
+ 0, 0, 0, 0, 0,0x8FE9, 0, 0, 0, 0,
+ 0x99D9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x927C, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9C45,
+ /* plane 0, page 139 */
+ 12 | (226 << 8), /* first, last */
+ 0x8FDE, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8FDF, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xA04B, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8FE2, 0, 0, 0,0xA0CC, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8FE3,0x8FE4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BC4, 0, 0, 0,0x9BFC, 0,
+ 0, 0, 0, 0, 0,0x964C, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AF6,
+ 0,0x8CAE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8FE7, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8FE8, 0, 0, 0, 0,
+ 0x8BE7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x897A, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x897B,
+ /* plane 0, page 140 */
+ 81 | (247 << 8), /* first, last */
+ 0x99DA, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8FED, 0, 0, 0,0x95C0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA0CB, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9E48, 0, 0, 0, 0,
+ 0, 0,0x99DB, 0,0x8FF3, 0, 0, 0, 0,0x8FF9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x95C1, 0,0xA04E, 0, 0, 0, 0,
+ 0, 0,0x99DC, 0, 0, 0, 0,0xA064,
+ /* plane 0, page 141 */
+ 3 | (212 << 8), /* first, last */
+ 0x8FF7, 0, 0, 0, 0, 0, 0,
+ 0,0x89B0,0xA048, 0, 0, 0, 0,0x8FFB,0x8FF6, 0,
+ 0, 0, 0, 0,0x9DDC, 0, 0, 0,0x99DD,0x8BE8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x92C1, 0, 0, 0, 0, 0, 0, 0,
+ 0x9FD6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xA0D2, 0, 0,0x9040,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8AC4, 0, 0,0x99E0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9FF0,
+ /* plane 0, page 142 */
+ 1 | (242 << 8), /* first, last */
+ 0x9FF3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9DBF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9FF6, 0,0x95C8, 0, 0,0x9E5A, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x99E3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8A4A, 0, 0, 0, 0, 0, 0, 0, 0,0x9FF1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8AA7, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x99E6, 0, 0, 0,0x9FF7, 0,0x9FED,
+ 0, 0, 0, 0, 0, 0,0x8A5C, 0,0x9DAE, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x95C9, 0, 0,
+ 0, 0, 0,0x9048, 0, 0,0x99E8, 0, 0, 0,
+ 0, 0,0x9049, 0, 0,0x8CBA, 0, 0,0x90B1, 0,
+ 0, 0, 0, 0, 0,0x904A, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x99EA, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9BD1, 0,
+ 0, 0, 0, 0, 0, 0,0x99EB, 0,0x99EC, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x99ED, 0, 0,
+ 0, 0,0x99EE,
+ /* plane 0, page 143 */
+ 25 | (249 << 8), /* first, last */
+ 0x904C, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x904D, 0, 0,0x95CB, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x97E2, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x95CC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9F78, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x897C,0x897D, 0, 0, 0, 0, 0, 0,
+ 0x897E, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x995D, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9B5A, 0, 0, 0, 0,0x9050, 0,0x8C4F, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9054,
+ 0,0xC6D6,0x9AA8,0x99EF,0xFEEB,0x9DA3,0x9DA1,0x9943,0x9945, 0,
+ 0x9D7D, 0, 0,0x99F0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x99F1, 0,0x99F2, 0, 0,0x8CBC,0x9D60, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA0A3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x905B,
+ /* plane 0, page 144 */
+ 8 | (196 << 8), /* first, last */
+ 0x9EDB, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9D79, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x99F3, 0, 0, 0,0x9062, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9F55, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9BF9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9065, 0, 0,
+ 0x96E0, 0, 0, 0, 0, 0, 0, 0,0x98BE, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9068, 0,
+ 0, 0, 0, 0,0x906C, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x95D8, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x906A,
+ /* plane 0, page 145 */
+ 81 | (254 << 8), /* first, last */
+ 0x9FB2, 0, 0, 0, 0, 0, 0, 0,0x9FAE,
+ 0, 0,0x9FB0, 0,0x89AD, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x906E, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9E71, 0, 0, 0, 0, 0,0x9E4A, 0,
+ 0, 0, 0, 0,0x9FDC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x89AB, 0,0x9FB8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9070,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8B63, 0, 0, 0, 0,0x95DC, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9071, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFC5E, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8949, 0, 0, 0, 0, 0,0x965B,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8C50, 0, 0, 0,
+ 0x94A6, 0, 0, 0,0x8FD5,
+ /* plane 0, page 146 */
+ 8 | (253 << 8), /* first, last */
+ 0x9E73, 0,
+ 0, 0, 0, 0,0x9075, 0, 0, 0, 0,0x99F7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8CBF, 0, 0, 0, 0, 0, 0,
+ 0x99F9, 0,0x9663,0x95B9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x94D4, 0, 0, 0, 0, 0, 0,
+ 0xFCFA, 0, 0, 0, 0,0x9077, 0, 0,0x90AB, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9D4D, 0, 0,0x99FA, 0,
+ 0, 0, 0,0x92E3, 0,0x97BB, 0, 0,0x9078, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x99FB, 0, 0,
+ 0x97E0, 0, 0, 0, 0, 0, 0, 0, 0,0x96DC,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9CA8,
+ 0, 0,0x9772, 0, 0, 0, 0,0x9440, 0, 0,
+ 0, 0, 0,0x92F2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x99FD, 0, 0,0x99FC, 0, 0,
+ 0, 0, 0, 0, 0,0xF9D7,0x964A, 0, 0, 0,
+ 0x96D8,0x99FE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x904B, 0, 0, 0, 0, 0, 0,0xFA41,
+ 0, 0, 0, 0, 0, 0, 0,0x9A40, 0,0x975B,
+ 0, 0, 0, 0, 0,0x9A41,0x91DD, 0, 0, 0,
+ 0, 0,0x93FC,0x9A42,0x9A43, 0,0x9659, 0, 0, 0,
+ 0, 0, 0,0x9A44,
+ /* plane 0, page 147 */
+ 3 | (244 << 8), /* first, last */
+ 0x9051, 0, 0, 0,0x94BF, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x90A2, 0, 0, 0,0x9CAB,0x9776,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFC55,0xFE45,0x94A8,0x9A45,0xFA4B,0x9DE1,
+ 0, 0,0x96D9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9774, 0, 0,0xFDF5, 0,
+ 0, 0,0x92E5, 0,0x9645,0x91DA, 0,0x90A3, 0, 0,
+ 0xA05F, 0, 0, 0, 0,0x90AF,0x97BF, 0, 0, 0,
+ 0x914C, 0, 0, 0, 0,0x967A, 0, 0, 0,0x91DE,
+ 0, 0,0x9A46,0xFEB0,0x9779,0x946C, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9858, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9266, 0, 0, 0,
+ 0x93FB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9A47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9749, 0, 0,0x9748, 0,0x934A,
+ 0,0x9CE2, 0, 0, 0, 0, 0, 0,0x9264, 0,
+ 0, 0, 0,0x91DF, 0, 0, 0, 0, 0, 0,
+ 0,0xFB79, 0, 0, 0, 0, 0, 0, 0,0x96D7,
+ 0, 0, 0, 0,0x9343, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFDCB,0xFE7A, 0,0x91DB,0x8C6A,
+ /* plane 0, page 148 */
+ 1 | (246 << 8), /* first, last */
+ 0x97AF, 0, 0,0x95DD, 0, 0, 0,0x9348, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9A4B, 0, 0, 0,0xFC45, 0,0x9A4D,
+ 0, 0, 0, 0, 0, 0,0x91BC,0x90E2,0x90B4,0x95E1,
+ 0, 0, 0, 0, 0,0x9A4E, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9A4F, 0, 0, 0,0xFE40,0xFE43, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x96DD, 0, 0,
+ 0, 0, 0, 0,0x9A51, 0, 0, 0,0x96A7, 0,
+ 0,0x90B0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9C4E, 0,0x9443, 0, 0, 0, 0,0x8EBA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9A52, 0,0xFCC1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8BE9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9CAF,
+ 0, 0,0x8BFD, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9ABC, 0,0x9AB8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9AAE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9AA7,
+ /* plane 0, page 149 */
+ 45 | (244 << 8), /* first, last */
+ 0x9A53, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9D74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8BEA, 0, 0, 0, 0, 0, 0,0x8BEB, 0, 0,
+ 0, 0, 0,0x90B2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x95E9,0x95E8, 0,0x95E6, 0, 0, 0, 0, 0, 0,
+ 0x90B5, 0,0x9A54, 0, 0, 0,0x90B3,0x95E7, 0, 0,
+ 0x8B50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8BEC, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9A56,
+ /* plane 0, page 150 */
+ 29 | (244 << 8), /* first, last */
+ 0x8BFB,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9A57, 0, 0, 0, 0,0xA0AA, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9FA6, 0, 0, 0,0x99CC,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9C59, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x99B5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x90BE, 0, 0, 0, 0, 0,0x9FAF,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x95F2, 0, 0, 0, 0, 0, 0,
+ 0x90BF, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x90C1, 0,0xFEE4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x90C4, 0, 0, 0, 0, 0, 0,0x90C7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x92E4,
+ /* plane 0, page 151 */
+ 3 | (245 << 8), /* first, last */
+ 0x9F52, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x90DB, 0, 0,
+ 0, 0, 0,0xA066, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x90D2,
+ 0, 0, 0, 0,0x90D4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9A5B,0x95FD, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8BC4, 0, 0, 0,0x8C66, 0,0x90DE, 0, 0,
+ 0, 0, 0,0x9CE4, 0,0x90E1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9E46,
+ 0, 0, 0,0x9651, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFB58, 0,0x90E6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9650, 0, 0, 0,0x90E7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x90E8,0x9A5D, 0,
+ 0x9F7A, 0, 0, 0,0x9B5C, 0,0x9F7C, 0, 0,0xFC52,
+ 0x90E9, 0,0x90EA, 0,0x9A5E, 0, 0, 0, 0, 0,
+ 0x9F76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x90EB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x90EC, 0, 0, 0, 0, 0,
+ 0x8BEE, 0, 0, 0, 0, 0, 0, 0,0x90EE, 0,
+ 0, 0,0x91C6, 0, 0,0x90F2,
+ /* plane 0, page 152 */
+ 20 | (245 << 8), /* first, last */
+ 0xFCBC,0x8A74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9657, 0, 0, 0,0x9CEF, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9FDF, 0, 0, 0,
+ 0,0x90F7,0x90F6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9B5E, 0, 0, 0,0x90F8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x90F9, 0,0x8CC9, 0, 0, 0,0xFA6A, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8BEF, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9FE0, 0, 0,0x9142, 0,0x9A62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9569, 0, 0, 0,0x9144,
+ 0x9143, 0,0x9141, 0, 0, 0,0x8BF0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9660, 0,0x8BF1, 0,0x99F6,0x9149, 0, 0, 0, 0,
+ 0x914A, 0, 0, 0, 0, 0,0x914B, 0, 0, 0,
+ 0,0x9A64, 0, 0, 0,0x8ABF,
+ /* plane 0, page 153 */
+ 14 | (245 << 8), /* first, last */
+ 0x9A66, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9A67, 0, 0,0x9A69, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9A6A,0x9652,0x914D, 0,0x9666,
+ 0, 0, 0, 0,0x9F7B, 0,0x9A6B, 0, 0, 0,
+ 0, 0, 0, 0,0xA06C, 0, 0,0x9667, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9A6C, 0, 0, 0, 0,0x9A6D,0x8BF2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x966A, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFCEA, 0, 0, 0, 0, 0,
+ 0x966C, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x91C4, 0, 0, 0,0x9677, 0,
+ 0, 0, 0, 0, 0, 0,0x99F4,0x9A6F, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9FAB, 0,
+ 0, 0, 0, 0,0x8CBE,0x8EC1, 0, 0, 0, 0,
+ 0x9555, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9152,
+ /* plane 0, page 154 */
+ 12 | (255 << 8), /* first, last */
+ 0x9153, 0, 0, 0,0x9155, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x955D, 0,0x9671, 0, 0, 0, 0,0x9C6D, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9673, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9154,
+ 0x9A71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9156, 0,
+ 0, 0,0x966D, 0, 0, 0, 0, 0, 0,0x9557,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x89C6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x89C7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8A6A, 0,
+ 0, 0,0x8B57, 0, 0, 0,0x9FE1, 0, 0,0x9B5F,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xA05D, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x915B, 0,0x915C, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x915E, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9F5C,
+ /* plane 0, page 155 */
+ 2 | (255 << 8), /* first, last */
+ 0x9F57, 0, 0, 0, 0, 0, 0,0x9F65,
+ 0, 0, 0, 0, 0,0x9A72, 0, 0, 0, 0,
+ 0x9160, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9F5E, 0, 0,0x9161, 0, 0, 0, 0,
+ 0, 0,0x9164, 0, 0, 0, 0,0x9F41, 0, 0,
+ 0, 0, 0, 0,0x9169, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9168, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9A74, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x96B2, 0,0x9A75,
+ 0,0xFDA5, 0, 0, 0, 0, 0, 0, 0,0x9EE9,
+ 0,0x8BBA,0x916D,0xA060, 0, 0, 0, 0, 0, 0,
+ 0,0x9FDE, 0, 0, 0, 0, 0,0x9FC3, 0,0x96B5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xA067, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x96B3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9A76, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x95D5, 0, 0, 0,0x9ECA, 0, 0,
+ 0,0x9A77, 0, 0,0x9A78, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9170,
+ /* plane 0, page 156 */
+ 2 | (124 << 8), /* first, last */
+ 0x916F, 0, 0, 0, 0, 0, 0, 0,
+ 0x9FA3, 0,0x9171, 0, 0, 0,0x96B1, 0, 0, 0,
+ 0,0x9F63, 0, 0, 0, 0, 0,0x9F67, 0, 0,
+ 0,0x8BB9,0x9A7A, 0, 0, 0, 0, 0,0x8B56, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9ADA, 0, 0,
+ 0, 0, 0,0x96B0, 0, 0, 0, 0,0x9A7E, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9DDE,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x96AD,
+ 0, 0, 0,0x96AE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9EA1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9E50, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x96AF,0x8BF4,
+ /* plane 0, page 157 */
+ 2 | (252 << 8), /* first, last */
+ 0x9FA4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x96BD, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x96F4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x96B8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFAA1, 0, 0, 0, 0,0x91A7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA05E, 0,
+ 0, 0, 0,0x9A7D, 0, 0, 0, 0,0x8948, 0,
+ 0x9EB1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9DDB, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x95BF,
+ 0x8A73, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9EFE, 0,0x917A, 0, 0, 0,
+ 0,0x917B, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9AA3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x96C2, 0, 0, 0, 0,
+ 0,0x9F77, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AA4,
+ 0, 0,0x9AA5, 0, 0, 0,0x91A1, 0, 0, 0,
+ 0,0x89B8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9173, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9AA6,
+ /* plane 0, page 158 */
+ 10 | (254 << 8), /* first, last */
+ 0x89BD, 0,0x89B9, 0,0x917D, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x96BB, 0, 0, 0,0x9FF2, 0,
+ 0,0x8BF5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9AA9, 0, 0, 0, 0, 0,0x9F54,
+ 0, 0,0x9FE3,0x9EED, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x91AA, 0, 0, 0, 0,0x91AB,
+ 0xA070, 0,0x9F6D, 0, 0, 0, 0, 0,0x91AC, 0,
+ 0, 0,0x91AD, 0, 0, 0,0xA0FD, 0,0x9FE2, 0,
+ 0x91AF,0x9E41,0x9AAA, 0, 0,0x91B0, 0,0x9AAB, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AAC,
+ 0,0x9A4A, 0,0x91B2, 0, 0,0x8BF6, 0,0x9AAD,0x89B6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9AAF, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9AB0, 0, 0, 0, 0, 0, 0,0x9AB1, 0,
+ 0, 0, 0, 0,0x9AA1,
+ /* plane 0, page 159 */
+ 2 | (165 << 8), /* first, last */
+ 0x91B9, 0, 0, 0, 0, 0,0x91BA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x91BE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA041,0x8BB7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x91C0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9AB3,0x91C3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xA0FC, 0, 0,0x9FEE, 0, 0, 0, 0, 0, 0,
+ 0x9F69, 0, 0, 0, 0, 0, 0, 0,0x91C8, 0,
+ 0, 0, 0, 0, 0,0x91C9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8DE6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x91CB, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x89C8, 0, 0, 0, 0, 0,0x8DAA,
+ 0, 0, 0, 0, 0,0x9FDD,
+ /* plane 0, page 160: --- */
+ /* plane 0, page 161: --- */
+ /* plane 0, page 162: --- */
+ /* plane 0, page 163: --- */
+ /* plane 0, page 164: --- */
+ /* plane 0, page 165: --- */
+ /* plane 0, page 166: --- */
+ /* plane 0, page 167: --- */
+ /* plane 0, page 168: --- */
+ /* plane 0, page 169: --- */
+ /* plane 0, page 170: --- */
+ /* plane 0, page 171: --- */
+ /* plane 0, page 172: --- */
+ /* plane 0, page 173: --- */
+ /* plane 0, page 174: --- */
+ /* plane 0, page 175: --- */
+ /* plane 0, page 176: --- */
+ /* plane 0, page 177: --- */
+ /* plane 0, page 178: --- */
+ /* plane 0, page 179: --- */
+ /* plane 0, page 180: --- */
+ /* plane 0, page 181: --- */
+ /* plane 0, page 182: --- */
+ /* plane 0, page 183: --- */
+ /* plane 0, page 184: --- */
+ /* plane 0, page 185: --- */
+ /* plane 0, page 186: --- */
+ /* plane 0, page 187: --- */
+ /* plane 0, page 188: --- */
+ /* plane 0, page 189: --- */
+ /* plane 0, page 190: --- */
+ /* plane 0, page 191: --- */
+ /* plane 0, page 192: --- */
+ /* plane 0, page 193: --- */
+ /* plane 0, page 194: --- */
+ /* plane 0, page 195: --- */
+ /* plane 0, page 196: --- */
+ /* plane 0, page 197: --- */
+ /* plane 0, page 198: --- */
+ /* plane 0, page 199: --- */
+ /* plane 0, page 200: --- */
+ /* plane 0, page 201: --- */
+ /* plane 0, page 202: --- */
+ /* plane 0, page 203: --- */
+ /* plane 0, page 204: --- */
+ /* plane 0, page 205: --- */
+ /* plane 0, page 206: --- */
+ /* plane 0, page 207: --- */
+ /* plane 0, page 208: --- */
+ /* plane 0, page 209: --- */
+ /* plane 0, page 210: --- */
+ /* plane 0, page 211: --- */
+ /* plane 0, page 212: --- */
+ /* plane 0, page 213: --- */
+ /* plane 0, page 214: --- */
+ /* plane 0, page 215: --- */
+ /* plane 0, page 216: --- */
+ /* plane 0, page 217: --- */
+ /* plane 0, page 218: --- */
+ /* plane 0, page 219: --- */
+ /* plane 0, page 220: --- */
+ /* plane 0, page 221: --- */
+ /* plane 0, page 222: --- */
+ /* plane 0, page 223: --- */
+ /* plane 0, page 224 */
+ 0 | (253 << 8), /* first, last */
+ 0xFA40, 0,0xFA42,0xFA43, 0,0xFA45, 0, 0,0xFA48,0xFA49,
+ 0xFA4A, 0,0xFA4C, 0,0xFA4E, 0, 0, 0,0xFA52,0xFA53,
+ 0xFA54,0xFA55,0xFA56, 0,0xFA58, 0,0xFA5A,0xFA5B,0xFA5C,0xFA5D,
+ 0xFA5E, 0,0xFA60, 0,0xFA62,0xFA63, 0,0xFA65, 0, 0,
+ 0xFA68, 0, 0,0xFA6B, 0,0xFA6D,0xFA6E, 0,0xFA70, 0,
+ 0xFA72,0xFA73,0xFA74,0xFA75,0xFA76,0xFA77,0xFA78, 0, 0,0xFA7B,
+ 0xFA7C, 0, 0, 0, 0, 0, 0,0xFAA5, 0,0xFAA7,
+ 0, 0, 0, 0, 0, 0,0xFAAE, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFABC, 0,0xFABE, 0, 0,0xFAC1,0xFAC2,0xFAC3, 0, 0,
+ 0xFAC6, 0,0xFAC8, 0, 0, 0,0xFACC,0xFACD,0xFACE, 0,
+ 0xFAD0, 0, 0,0xFAD3, 0, 0,0xFAD6,0xFAD7, 0, 0,
+ 0xFADA, 0, 0, 0, 0,0xFADF,0xFAE0, 0, 0, 0,
+ 0, 0, 0, 0,0xFAE8,0xFAE9, 0,0xFAEB,0xFAEC, 0,
+ 0xFAEE, 0, 0, 0, 0, 0, 0,0xFAF5,0xFAF6, 0,
+ 0, 0,0xFAFA,0xFAFB,0xFAFC,0xFAFD,0xFAFE,0xFB40,0xFB41, 0,
+ 0xFB43, 0, 0, 0, 0, 0,0xFB49,0xFB4A,0xFB4B,0xFB4C,
+ 0,0xFB4E, 0, 0,0xFB51, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFB5D,0xFB5E,0xFB5F, 0,
+ 0xFB61, 0, 0, 0,0xFB65,0xFB66, 0,0xFB68, 0,0xFB6A,
+ 0xFB6B, 0,0xFB6D, 0, 0,0xFB70, 0, 0,0xFB73, 0,
+ 0, 0,0xFB77,0xFB78, 0,0xFB7A, 0, 0,0xFB7D, 0,
+ 0xFBA1, 0, 0,0xFBA4, 0, 0,0xFBA7,0xFBA8,0xFBA9,0xFBAA,
+ 0,0xFBAC,0xFBAD,0xFBAE, 0,0xFBB0,0xFBB1, 0,0xFBB3, 0,
+ 0,0xFBB6,0xFBB7, 0,0xFBB9, 0, 0, 0,0xFBBD,0xFBBE,
+ 0xFBBF,0xFBC0,0xFBC1,0xFBC2,
+ /* plane 0, page 225 */
+ 3 | (254 << 8), /* first, last */
+ 0xFBC8,0xFBC9,0xFBCA,0xFBCB, 0, 0,0xFBCE,
+ 0xFBCF,0xFBD0, 0, 0,0xFBD3, 0,0xFBD5, 0, 0, 0,
+ 0xFBD9,0xFBDA, 0,0xFBDC, 0, 0, 0, 0,0xFBE1,0xFBE2,
+ 0, 0, 0,0xFBE6, 0, 0, 0,0xFBEA,0xFBEB,0xFBEC,
+ 0xFBED, 0,0xFBEF,0xFBF0, 0, 0, 0, 0,0xFBF5,0xFBF6,
+ 0, 0, 0, 0,0xFBFB, 0, 0,0xFBFE, 0, 0,
+ 0xFC42, 0, 0, 0, 0,0xFC47,0xFC48,0xFC49,0xFC4A,0xFC4B,
+ 0,0xFC4D,0xFC4E, 0,0xFC50, 0, 0,0xFC53, 0, 0,
+ 0xFC56, 0, 0,0xFC59,0xFC5A,0xFC5B,0xFC5C,0xFC5D, 0,0xFC5F,
+ 0xFC60, 0, 0,0xFC63,0xFC64,0xFC65,0xFC66, 0,0xFC68, 0,
+ 0xFC6A, 0, 0, 0,0xFC6E,0xFC6F,0xFC70, 0, 0, 0,
+ 0, 0, 0,0xFC77,0xFC78, 0, 0,0xFC7B, 0, 0,
+ 0xFC7E,0xFCA1, 0,0xFCA3,0xFCA4, 0,0xFCA6,0xFCA7,0xFCA8, 0,
+ 0, 0, 0,0xFCAD, 0,0xFCAF, 0,0xFCB1, 0,0xFCB3,
+ 0xFCB4, 0, 0,0xFCB7,0xFCB8, 0, 0,0xFCBB, 0,0xFCBD,
+ 0xFCBE, 0, 0, 0,0xFCC2, 0,0xFCC4, 0, 0,0xFCC7,
+ 0xFCC8, 0, 0, 0,0xFCCC, 0,0xFCCE,0xFCCF, 0,0xFCD1,
+ 0xFCD2, 0, 0, 0,0xFCD6, 0,0xFCD8,0xFCD9, 0,0xFCDB,
+ 0xFCDC, 0,0xFCDE, 0,0xFCE0, 0, 0,0xFCE3,0xFCE4,0xFCE5,
+ 0xFCE6,0xFCE7, 0,0xFCE9, 0, 0,0xFCEC,0xFCED,0xFCEE, 0,
+ 0xFCF0, 0, 0, 0,0xFCF4,0xFCF5, 0,0xFCF7, 0, 0,
+ 0, 0,0xFCFC,0xFCFD, 0,0xFD40, 0, 0,0xFD43, 0,
+ 0,0xFD46, 0, 0,0xFD49,0xFD4A,0xFD4B,0xFD4C, 0, 0,
+ 0xFD4F,0xFD50, 0, 0,0xFD53,0xFD54, 0, 0, 0,0xFD58,
+ 0xFD59, 0,0xFD5B, 0,0xFD5D, 0, 0,0xFD60,0xFD61, 0,
+ 0xFD63, 0, 0, 0,0xFD67,
+ /* plane 0, page 226 */
+ 0 | (255 << 8), /* first, last */
+ 0xFD69,0xFD6A,0xFD6B,0xFD6C, 0,0xFD6E, 0,0xFD70, 0, 0,
+ 0xFD73,0xFD74,0xFD75, 0, 0, 0,0xFD79,0xFD7A,0xFD7B,0xFD7C,
+ 0xFD7D,0xFD7E,0xFDA1,0xFDA2,0xFDA3,0xFDA4, 0,0xFDA6,0xFDA7, 0,
+ 0,0xFDAA,0xFDAB,0xFDAC, 0, 0, 0, 0,0xFDB1,0xFDB2,
+ 0xFDB3, 0,0xFDB5, 0, 0, 0, 0,0xFDBA, 0,0xFDBC,
+ 0,0xFDBE, 0, 0, 0,0xFDC2, 0,0xFDC4, 0,0xFDC6,
+ 0,0xFDC8,0xFDC9,0xFDCA, 0, 0, 0,0xFDCE, 0,0xFDD0,
+ 0xFDD1, 0,0xFDD3, 0,0xFDD5,0xFDD6,0xFDD7,0xFDD8,0xFDD9,0xFDDA,
+ 0,0xFDDC,0xFDDD,0xFDDE,0xFDDF, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFDE8,0xFDE9, 0, 0,0xFDEC, 0, 0,
+ 0, 0, 0, 0,0xFDF3, 0, 0,0xFDF6, 0,0xFDF8,
+ 0xFDF9,0xFDFA, 0,0xFDFC, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFE46, 0, 0,0xFE49, 0, 0, 0,0xFE4D,
+ 0xFE4E, 0, 0, 0, 0, 0,0xFE54,0xFE55,0xFE56,0xFE57,
+ 0, 0, 0, 0,0xFE5C,0xFE5D, 0, 0,0xFE60,0xFE61,
+ 0xFE62, 0,0xFE64,0xFE65,0xFE66,0xFE67, 0, 0, 0,0xFE6B,
+ 0,0xFE6D,0xFE6E, 0,0xFE70, 0,0xFE72, 0, 0, 0,
+ 0, 0,0xFE78, 0, 0, 0, 0,0xFE7D,0xFE7E,0xFEA1,
+ 0xFEA2,0xFEA3, 0,0xFEA5,0xFEA6, 0,0xFEA8, 0, 0, 0,
+ 0xFEAC,0xFEAD, 0,0xFEAF, 0, 0, 0, 0, 0,0xFEB5,
+ 0xFEB6,0xFEB7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFEC2, 0, 0,0xFEC5,0xFEC6,0xFEC7, 0, 0,
+ 0, 0,0xFECC, 0,0xFECE,0xFECF,0xFED0, 0, 0, 0,
+ 0,0xFED5, 0,0xFED7, 0,0xFED9,0xFEDA,0xFEDB, 0, 0,
+ 0xFEDE,0xFEDF, 0, 0, 0, 0, 0, 0,0xFEE6, 0,
+ 0, 0,0xFEEA, 0, 0,0xFEED,
+ /* plane 0, page 227 */
+ 0 | (255 << 8), /* first, last */
+ 0xFEEE,0xFEEF, 0, 0, 0, 0,0xFEF4, 0,0xFEF6, 0,
+ 0, 0,0xFEFA,0xFEFB, 0,0xFEFD, 0,0x8E40, 0,0x8E42,
+ 0,0x8E44,0x8E45, 0,0x8E47, 0, 0,0x8E4A,0x8E4B, 0,
+ 0,0x8E4E, 0, 0, 0, 0, 0,0x8E54,0x8E55, 0,
+ 0, 0,0x8E59, 0,0x8E5B, 0, 0, 0,0x8E5F,0x8E60,
+ 0, 0, 0,0x8E64,0x8E65, 0, 0, 0, 0,0x8E6A,
+ 0x8E6B,0x8E6C, 0, 0, 0, 0,0x8E71, 0, 0,0x8E74,
+ 0, 0,0x8E77, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8EA2,0x8EA3, 0,0x8EA5, 0, 0, 0, 0, 0,
+ 0,0x8EAC,0x8EAD, 0,0x8EAF, 0,0x8EB1, 0,0x8EB3, 0,
+ 0x8EB5,0x8EB6, 0, 0,0x8EB9, 0, 0, 0, 0, 0,
+ 0,0x8EC0, 0, 0,0x8EC3, 0,0x8EC5,0x8EC6,0x8EC7,0x8EC8,
+ 0x8EC9,0x8ECA, 0,0x8ECC, 0, 0, 0, 0, 0,0x8ED2,
+ 0x8ED3, 0, 0, 0,0x8ED7,0x8ED8,0x8ED9,0x8EDA,0x8EDB, 0,
+ 0,0x8EDE, 0, 0, 0,0x8EE2, 0,0x8EE4,0x8EE5, 0,
+ 0x8EE7, 0,0x8EE9, 0,0x8EEB,0x8EEC,0x8EED, 0,0x8EEF,0x8EF0,
+ 0x8EF1, 0,0x8EF3, 0, 0,0x8EF6,0x8EF7,0x8EF8,0x8EF9,0x8EFA,
+ 0, 0,0x8EFD,0x8EFE, 0, 0, 0,0x8F43,0x8F44,0x8F45,
+ 0x8F46,0x8F47, 0, 0, 0,0x8F4B,0x8F4C,0x8F4D,0x8F4E,0x8F4F,
+ 0x8F50, 0, 0, 0,0x8F54,0x8F55, 0, 0, 0,0x8F59,
+ 0x8F5A, 0, 0,0x8F5D,0x8F5E,0x8F5F, 0,0x8F61, 0,0x8F63,
+ 0x8F64, 0, 0,0x8F67, 0, 0,0x8F6A,0x8F6B,0x8F6C, 0,
+ 0, 0,0x8F70, 0, 0,0x8F73,0x8F74,0x8F75,0x8F76, 0,
+ 0,0x8F79,0x8F7A, 0,0x8F7C, 0, 0,0x8FA1,0x8FA2, 0,
+ 0x8FA4, 0,0x8FA6,0x8FA7,0x8FA8,0x8FA9, 0,0x8FAB,0x8FAC, 0,
+ 0x8FAE, 0, 0,0x8FB1, 0,0x8FB3,
+ /* plane 0, page 228 */
+ 6 | (255 << 8), /* first, last */
+ 0x8FBA, 0, 0,0x8FBD,
+ 0x8FBE,0x8FBF, 0, 0,0x8FC2, 0, 0, 0, 0, 0,
+ 0x8FC8, 0, 0, 0, 0, 0, 0,0x8FCF, 0,0x8FD1,
+ 0x8FD2, 0, 0, 0, 0,0x8FD7, 0,0x8FD9,0x8FDA,0x8FDB,
+ 0x8FDC, 0, 0, 0,0x8FE0,0x8FE1, 0, 0, 0, 0,
+ 0x8FE6, 0, 0, 0,0x8FEA,0x8FEB, 0, 0,0x8FEE,0x8FEF,
+ 0x8FF0,0x8FF1,0x8FF2, 0,0x8FF4,0x8FF5, 0, 0,0x8FF8, 0,
+ 0, 0,0x8FFC,0x8FFD, 0, 0,0x9041,0x9042,0x9043,0x9044,
+ 0x9045,0x9046, 0, 0, 0, 0, 0, 0, 0,0x904E,
+ 0x904F, 0, 0,0x9052,0x9053, 0,0x9055,0x9056,0x9057,0x9058,
+ 0,0x905A, 0,0x905C,0x905D,0x905E,0x905F,0x9060,0x9061, 0,
+ 0x9063,0x9064, 0,0x9066,0x9067, 0,0x9069, 0,0x906B, 0,
+ 0, 0,0x906F, 0, 0, 0,0x9073,0x9074, 0, 0,
+ 0, 0,0x9079, 0,0x907B,0x907C,0x907D,0x907E,0x90A1, 0,
+ 0,0x90A4,0x90A5, 0, 0,0x90A8,0x90A9,0x90AA, 0,0x90AC,
+ 0x90AD,0x90AE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x90B7,0x90B8,0x90B9,0x90BA,0x90BB,0x90BC, 0, 0, 0,0x90C0,
+ 0,0x90C2, 0, 0, 0,0x90C6, 0, 0,0x90C9,0x90CA,
+ 0x90CB,0x90CC,0x90CD,0x90CE,0x90CF,0x90D0,0x90D1, 0, 0, 0,
+ 0x90D5,0x90D6,0x90D7,0x90D8, 0, 0, 0, 0,0x90DD, 0,
+ 0,0x90E0, 0, 0, 0,0x90E4,0x90E5, 0, 0, 0,
+ 0, 0, 0, 0,0x90ED, 0, 0,0x90F0, 0, 0,
+ 0x90F3,0x90F4,0x90F5, 0, 0, 0, 0,0x90FA,0x90FB,0x90FC,
+ 0x90FD,0x90FE,0x9140, 0, 0, 0, 0,0x9145,0x9146,0x9147,
+ 0, 0, 0, 0, 0, 0,0x914E,0x914F,0x9150,0x9151,
+ 0, 0, 0, 0, 0,0x9157,
+ /* plane 0, page 229 */
+ 0 | (254 << 8), /* first, last */
+ 0x9158,0x9159,0x915A, 0, 0,0x915D, 0,0x915F, 0, 0,
+ 0x9162, 0, 0,0x9165,0x9166,0x9167, 0, 0,0x916A, 0,
+ 0x916C, 0,0x916E, 0, 0, 0,0x9172, 0,0x9174,0x9175,
+ 0x9176,0x9177,0x9178,0x9179, 0, 0,0x917C, 0, 0, 0,
+ 0x91A2,0x91A3,0x91A4,0x91A5,0x91A6, 0,0x91A8,0x91A9, 0, 0,
+ 0, 0,0x91AE, 0, 0,0x91B1, 0,0x91B3,0x91B4,0x91B5,
+ 0,0x91B7,0x91B8, 0, 0,0x91BB, 0,0x91BD, 0, 0,
+ 0, 0, 0, 0, 0,0x91C5, 0, 0, 0, 0,
+ 0, 0, 0,0x91CD,0x91CE,0x91CF, 0,0x91D1,0x91D2,0x91D3,
+ 0,0x91D5,0x91D6, 0,0x91D8,0x91D9, 0, 0,0x91DC, 0,
+ 0, 0,0x91E0,0x91E1, 0,0x91E3, 0, 0, 0,0x91E7,
+ 0x91E8, 0,0x91EA, 0,0x91EC,0x91ED,0x91EE,0x91EF,0x91F0,0x91F1,
+ 0x91F2,0x91F3,0x91F4,0x91F5,0x91F6,0x91F7,0x91F8,0x91F9,0x91FA, 0,
+ 0x91FC,0x91FD,0x91FE,0x9240,0x9241, 0,0x9243, 0, 0,0x9246,
+ 0x9247,0x9248,0x9249,0x924A,0x924B,0x924C,0x924D,0x924E,0x924F, 0,
+ 0x9251,0x9252,0x9253, 0,0x9255, 0,0x9257,0x9258,0x9259,0x925A,
+ 0x925B,0x925C, 0, 0,0x925F, 0,0x9261,0x9262,0x9263, 0,
+ 0x9265, 0, 0, 0,0x9269,0x926A, 0,0x926C,0x926D, 0,
+ 0,0x9270, 0,0x9272,0x9273,0x9274,0x9275,0x9276,0x9277, 0,
+ 0x9279,0x927A,0x927B, 0,0x927D, 0, 0, 0, 0, 0,
+ 0x92A5,0x92A6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x92B4,0x92B5,0x92B6, 0,0x92B8,
+ 0x92B9, 0, 0,0x92BC,0x92BD,0x92BE,0x92BF,0x92C0, 0,0x92C2,
+ 0x92C3, 0, 0,0x92C6, 0, 0,0x92C9, 0,0x92CB,0x92CC,
+ 0x92CD,0x92CE, 0,0x92D0, 0,0x92D2, 0, 0, 0, 0,
+ 0x92D7,0x92D8,0x92D9, 0,0x92DB,
+ /* plane 0, page 230 */
+ 0 | (255 << 8), /* first, last */
+ 0x92DD, 0,0x92DF, 0,0x92E1, 0, 0, 0, 0, 0,
+ 0, 0,0x92E9, 0, 0,0x92EC,0x92ED,0x92EE,0x92EF, 0,
+ 0, 0, 0, 0, 0,0x92F6,0x92F7,0x92F8,0x92F9,0x92FA,
+ 0, 0, 0,0x92FE, 0,0x9341,0x9342, 0, 0,0x9345,
+ 0,0x9347, 0,0x9349, 0,0x934B, 0, 0, 0, 0,
+ 0x9350,0x9351,0x9352, 0, 0,0x9355,0x9356,0x9357,0x9358,0x9359,
+ 0x935A,0x935B, 0,0x935D,0x935E,0x935F,0x9360, 0, 0,0x9363,
+ 0x9364, 0,0x9366, 0, 0,0x9369, 0, 0,0x936C,0x936D,
+ 0,0x936F,0x9370,0x9371,0x9372,0x9373, 0,0x9375,0x9376,0x9377,
+ 0, 0, 0,0x937B,0x937C,0x937D,0x937E, 0,0x93A2,0x93A3,
+ 0x93A4,0x93A5,0x93A6,0x93A7,0x93A8, 0,0x93AA, 0, 0, 0,
+ 0x93AE,0x93AF, 0,0x93B1, 0, 0, 0,0x93B5,0x93B6,0x93B7,
+ 0x93B8,0x93B9, 0,0x93BB,0x93BC,0x93BD, 0,0x93BF,0x93C0,0x93C1,
+ 0x93C2,0x93C3,0x93C4,0x93C5,0x93C6,0x93C7,0x93C8, 0,0x93CA,0x93CB,
+ 0x93CC,0x93CD,0x93CE,0x93CF,0x93D0, 0,0x93D2, 0,0x93D4, 0,
+ 0x93D6,0x93D7, 0,0x93D9,0x93DA, 0,0x93DC,0x93DD,0x93DE,0x93DF,
+ 0x93E0,0x93E1,0x93E2, 0,0x93E4, 0,0x93E6, 0, 0,0x93E9,
+ 0,0x93EB,0x93EC,0x93ED, 0, 0, 0, 0,0x93F2, 0,
+ 0, 0,0x93F6, 0, 0,0x93F9,0x93FA, 0, 0,0x93FD,
+ 0x93FE, 0,0x9441,0x9442, 0, 0, 0,0x9446, 0,0x9448,
+ 0x9449, 0,0x944B, 0, 0, 0, 0, 0, 0,0x9452,
+ 0x9453, 0, 0, 0, 0,0x9458,0x9459, 0,0x945B,0x945C,
+ 0,0x945E,0x945F,0x9460,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,
+ 0x9467, 0,0x9469, 0, 0, 0, 0,0x946E,0x946F,0x9470,
+ 0,0x9472,0x9473,0x9474,0x9475, 0, 0,0x9478,0x9479, 0,
+ 0x947B,0x947C,0x947D,0x947E,0x94A1,0x94A2,
+ /* plane 0, page 231 */
+ 0 | (255 << 8), /* first, last */
+ 0x94A3,0x94A4,0x94A5, 0, 0, 0,0x94A9,0x94AA, 0,0x94AC,
+ 0x94AD, 0,0x94AF, 0, 0, 0,0x94B3,0x94B4,0x94B5,0x94B6,
+ 0, 0,0x94B9,0x94BA,0x94BB,0x94BC,0x94BD,0x94BE, 0,0x94C0,
+ 0, 0, 0, 0, 0, 0,0x94C7,0x94C8,0x94C9, 0,
+ 0, 0, 0,0x94CE, 0, 0,0x94D1,0x94D2,0x94D3, 0,
+ 0,0x94D6,0x94D7,0x94D8,0x94D9,0x94DA,0x94DB, 0,0x94DD,0x94DE,
+ 0x94DF,0x94E0, 0, 0,0x94E3,0x94E4,0x94E5, 0,0x94E7, 0,
+ 0,0x94EA, 0,0x94EC, 0, 0,0x94EF,0x94F0,0x94F1,0x94F2,
+ 0,0x94F4,0x94F5, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x94FE,0x9540,0x9541, 0,0x9543,0x9544,0x9545,0x9546, 0,
+ 0x9548,0x9549, 0,0x954B,0x954C,0x954D, 0, 0,0x9550,0x9551,
+ 0x9552, 0,0x9554, 0, 0, 0, 0,0x9559,0x955A,0x955B,
+ 0x955C, 0,0x955E, 0,0x9560,0x9561,0x9562, 0,0x9564, 0,
+ 0, 0,0x9568, 0,0x956A, 0, 0,0x956D, 0,0x956F,
+ 0,0x9571, 0,0x9573,0x9574, 0,0x9576, 0,0x9578, 0,
+ 0x957A,0x957B, 0,0x957D, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x95A8, 0,0x95AA,0x95AB,0x95AC,0x95AD,0x95AE,0x95AF,
+ 0x95B0, 0,0x95B2,0x95B3,0x95B4, 0, 0,0x95B7, 0, 0,
+ 0x95BA, 0, 0, 0,0x95BE, 0, 0, 0,0x95C2, 0,
+ 0, 0,0x95C6,0x95C7, 0, 0,0x95CA, 0, 0,0x95CD,
+ 0, 0,0x95D0,0x95D1, 0, 0,0x95D4, 0,0x95D6,0x95D7,
+ 0, 0, 0,0x95DB, 0, 0,0x95DE,0x95DF,0x95E0, 0,
+ 0x95E2,0x95E3, 0, 0, 0, 0, 0, 0,0x95EA, 0,
+ 0x95EC,0x95ED,0x95EE,0x95EF,0x95F0,0x95F1, 0,0x95F3,0x95F4,0x95F5,
+ 0x95F6,0x95F7,0x95F8,0x95F9, 0, 0,0x95FC, 0,0x95FE, 0,
+ 0x9641,0x9642,0x9643, 0, 0,0x9646,
+ /* plane 0, page 232 */
+ 0 | (254 << 8), /* first, last */
+ 0x9647,0x9648,0x9649, 0, 0, 0,0x964D, 0,0x964F, 0,
+ 0, 0,0x9653, 0,0x9655,0x9656, 0,0x9658, 0,0x965A,
+ 0,0x965C,0x965D,0x965E,0x965F, 0,0x9661,0x9662, 0,0x9664,
+ 0, 0, 0,0x9668,0x9669, 0,0x966B, 0, 0,0x966E,
+ 0x966F, 0, 0, 0, 0,0x9674,0x9675,0x9676, 0,0x9678,
+ 0x9679, 0, 0,0x967C, 0,0x967E,0x96A1, 0,0x96A3,0x96A4,
+ 0,0x96A6, 0,0x96A8, 0,0x96AA,0x96AB, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x96B4, 0,0x96B6,0x96B7, 0,
+ 0x96B9,0x96BA, 0,0x96BC, 0,0x96BE,0x96BF,0x96C0,0x96C1, 0,
+ 0,0x96C4,0x96C5,0x96C6, 0,0x96C8,0x96C9,0x96CA,0x96CB, 0,
+ 0,0x96CE,0x96CF,0x96D0, 0,0x96D2,0x96D3,0x96D4,0x96D5,0x96D6,
+ 0, 0, 0,0x96DA, 0, 0, 0, 0,0x96DF, 0,
+ 0x96E1, 0, 0, 0, 0,0x96E6,0x96E7,0x96E8,0x96E9, 0,
+ 0, 0, 0, 0, 0,0x96F0, 0, 0, 0, 0,
+ 0, 0,0x96F7,0x96F8, 0,0x96FA,0x96FB, 0,0x96FD,0x96FE,
+ 0, 0, 0,0x9743,0x9744,0x9745,0x9746,0x9747, 0, 0,
+ 0x974A,0x974B, 0,0x974D,0x974E,0x974F,0x9750,0x9751, 0,0x9753,
+ 0x9754, 0,0x9756,0x9757,0x9758,0x9759,0x975A, 0, 0,0x975D,
+ 0,0x975F,0x9760,0x9761,0x9762, 0, 0, 0,0x9766,0x9767,
+ 0x9768,0x9769,0x976A,0x976B,0x976C,0x976D, 0,0x976F, 0,0x9771,
+ 0, 0, 0,0x9775, 0,0x9777,0x9778, 0,0x977A,0x977B,
+ 0x977C,0x977D, 0,0x97A1,0x97A2, 0,0x97A4,0x97A5,0x97A6, 0,
+ 0,0x97A9, 0,0x97AB,0x97AC,0x97AD,0x97AE, 0,0x97B0,0x97B1,
+ 0x97B2, 0,0x97B4,0x97B5,0x97B6, 0,0x97B8,0x97B9,0x97BA, 0,
+ 0,0x97BD,0x97BE, 0,0x97C0,0x97C1,0x97C2,0x97C3, 0,0x97C5,
+ 0x97C6,0x97C7, 0,0x97C9,0x97CA,
+ /* plane 0, page 233 */
+ 0 | (254 << 8), /* first, last */
+ 0x97CC,0x97CD, 0,0x97CF, 0, 0,0x97D2,0x97D3,0x97D4, 0,
+ 0,0x97D7,0x97D8, 0,0x97DA,0x97DB,0x97DC,0x97DD,0x97DE, 0,
+ 0,0x97E1, 0,0x97E3,0x97E4, 0, 0,0x97E7,0x97E8, 0,
+ 0x97EA,0x97EB,0x97EC,0x97ED,0x97EE, 0, 0,0x97F1,0x97F2,0x97F3,
+ 0x97F4,0x97F5,0x97F6,0x97F7,0x97F8, 0,0x97FA,0x97FB, 0,0x97FD,
+ 0x97FE,0x9840,0x9841,0x9842,0x9843, 0,0x9845, 0,0x9847, 0,
+ 0x9849,0x984A,0x984B, 0, 0,0x984E, 0, 0,0x9851,0x9852,
+ 0x9853, 0,0x9855,0x9856, 0, 0, 0,0x985A, 0, 0,
+ 0x985D, 0,0x985F,0x9860,0x9861,0x9862, 0,0x9864,0x9865, 0,
+ 0x9867, 0,0x9869,0x986A,0x986B, 0,0x986D,0x986E, 0, 0,
+ 0x9871,0x9872, 0,0x9874,0x9875, 0, 0, 0,0x9879, 0,
+ 0x987B,0x987C, 0, 0, 0,0x98A2,0x98A3,0x98A4, 0,0x98A6,
+ 0x98A7,0x98A8,0x98A9,0x98AA, 0,0x98AC, 0, 0, 0,0x98B0,
+ 0x98B1, 0, 0, 0, 0,0x98B6, 0, 0,0x98B9, 0,
+ 0,0x98BC,0x98BD, 0, 0,0x98C0, 0, 0,0x98C3, 0,
+ 0x98C5, 0, 0, 0, 0, 0,0x98CB,0x98CC,0x98CD,0x98CE,
+ 0,0x98D0,0x98D1, 0, 0, 0, 0,0x98D6, 0, 0,
+ 0x98D9, 0,0x98DB, 0,0x98DD, 0,0x98DF, 0, 0, 0,
+ 0,0x98E4, 0,0x98E6, 0,0x98E8,0x98E9, 0,0x98EB,0x98EC,
+ 0, 0, 0, 0, 0, 0, 0,0x98F4, 0, 0,
+ 0, 0, 0,0x98FA, 0, 0, 0,0x98FE,0x9940, 0,
+ 0, 0, 0, 0,0x9946, 0,0x9948, 0, 0,0x994B,
+ 0, 0,0x994E, 0, 0, 0, 0, 0, 0,0x9955,
+ 0x9956, 0, 0,0x9959, 0,0x995B, 0, 0, 0,0x995F,
+ 0, 0, 0, 0, 0, 0, 0,0x9967, 0, 0,
+ 0, 0, 0, 0,0x996E,
+ /* plane 0, page 234 */
+ 3 | (255 << 8), /* first, last */
+ 0x9973, 0, 0, 0, 0, 0, 0,
+ 0x997A,0x997B, 0, 0, 0,0x99A1, 0, 0, 0,0x99A5,
+ 0,0x99A7, 0, 0, 0, 0, 0,0x99AD, 0, 0,
+ 0, 0, 0,0x99B3, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x99BC, 0, 0, 0, 0, 0, 0,0x99C3,
+ 0, 0, 0,0x99C7, 0, 0, 0, 0, 0, 0,
+ 0x99CE,0x99CF, 0, 0, 0, 0, 0,0x99D5, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x99DE, 0, 0,0x99E1,
+ 0, 0, 0, 0, 0, 0, 0,0x99E9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x99F5,
+ 0, 0,0x99F8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9A48,0x9A49, 0,
+ 0, 0, 0, 0, 0,0x9A50, 0, 0, 0, 0,
+ 0x9A55, 0, 0,0x9A58, 0,0x9A5A, 0,0x9A5C, 0, 0,
+ 0,0x9A60, 0, 0,0x9A63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9A6E, 0,0x9A70, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9A79, 0,0x9A7B,0x9A7C,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9AB4,0x9AB5,0x9AB6, 0, 0, 0,0x9ABA, 0, 0,
+ 0x9ABD,0x9ABE,0x9ABF,0x9AC0,0x9AC1, 0, 0,0x9AC4,0x9AC5,0x9AC6,
+ 0,0x9AC8,0x9AC9, 0,0x9ACB,0x9ACC,0x9ACD,0x9ACE,0x9ACF, 0,
+ 0x9AD1, 0,0x9AD3,0x9AD4,0x9AD5,0x9AD6,0x9AD7,0x9AD8, 0, 0,
+ 0,0x9ADC,0x9ADD,0x9ADE,0x9ADF,0x9AE0,0x9AE1, 0,0x9AE3, 0,
+ 0x9AE5,0x9AE6,0x9AE7, 0,0x9AE9,0x9AEA,0x9AEB,0x9AEC,0x9AED,0x9AEE,
+ 0x9AEF,0x9AF0, 0, 0,0x9AF3,0x9AF4,
+ /* plane 0, page 235 */
+ 0 | (255 << 8), /* first, last */
+ 0x9AF5, 0,0x9AF7,0x9AF8,0x9AF9,0x9AFA, 0, 0,0x9AFD,0x9AFE,
+ 0x9B40,0x9B41,0x9B42,0x9B43,0x9B44,0x9B45, 0,0x9B47,0x9B48, 0,
+ 0,0x9B4B, 0,0x9B4D,0x9B4E,0x9B4F,0x9B50,0x9B51,0x9B52,0x9B53,
+ 0,0x9B55,0x9B56,0x9B57, 0,0x9B59, 0,0x9B5B, 0,0x9B5D,
+ 0, 0,0x9B60, 0,0x9B62,0x9B63,0x9B64,0x9B65,0x9B66,0x9B67,
+ 0x9B68,0x9B69,0x9B6A,0x9B6B,0x9B6C,0x9B6D,0x9B6E,0x9B6F, 0, 0,
+ 0,0x9B73,0x9B74,0x9B75, 0,0x9B77, 0,0x9B79,0x9B7A, 0,
+ 0x9B7C, 0, 0, 0,0x9BA2,0x9BA3,0x9BA4,0x9BA5,0x9BA6,0x9BA7,
+ 0x9BA8,0x9BA9,0x9BAA,0x9BAB,0x9BAC,0x9BAD,0x9BAE,0x9BAF,0x9BB0,0x9BB1,
+ 0x9BB2,0x9BB3, 0,0x9BB5, 0,0x9BB7,0x9BB8,0x9BB9,0x9BBA,0x9BBB,
+ 0,0x9BBD,0x9BBE,0x9BBF,0x9BC0,0x9BC1,0x9BC2,0x9BC3, 0,0x9BC5,
+ 0,0x9BC7,0x9BC8,0x9BC9, 0,0x9BCB,0x9BCC, 0,0x9BCE,0x9BCF,
+ 0x9BD0, 0,0x9BD2, 0, 0, 0,0x9BD6,0x9BD7,0x9BD8,0x9BD9,
+ 0,0x9BDB,0x9BDC,0x9BDD, 0,0x9BDF,0x9BE0,0x9BE1,0x9BE2,0x9BE3,
+ 0x9BE4,0x9BE5,0x9BE6,0x9BE7,0x9BE8, 0,0x9BEA,0x9BEB, 0,0x9BED,
+ 0x9BEE,0x9BEF,0x9BF0,0x9BF1,0x9BF2,0x9BF3, 0, 0, 0,0x9BF7,
+ 0x9BF8, 0,0x9BFA,0x9BFB, 0,0x9BFD,0x9BFE, 0,0x9C41, 0,
+ 0x9C43,0x9C44, 0,0x9C46,0x9C47,0x9C48,0x9C49,0x9C4A,0x9C4B,0x9C4C,
+ 0x9C4D, 0,0x9C4F, 0, 0,0x9C52, 0, 0,0x9C55,0x9C56,
+ 0,0x9C58, 0, 0,0x9C5B,0x9C5C, 0,0x9C5E,0x9C5F,0x9C60,
+ 0x9C61, 0,0x9C63, 0,0x9C65,0x9C66,0x9C67, 0,0x9C69, 0,
+ 0,0x9C6C, 0,0x9C6E,0x9C6F,0x9C70,0x9C71, 0,0x9C73,0x9C74,
+ 0,0x9C76, 0,0x9C78,0x9C79,0x9C7A, 0, 0,0x9C7D, 0,
+ 0x9CA1,0x9CA2,0x9CA3,0x9CA4,0x9CA5,0x9CA6,0x9CA7, 0,0x9CA9,0x9CAA,
+ 0,0x9CAC,0x9CAD, 0, 0,0x9CB0,0x9CB1, 0, 0,0x9CB4,
+ 0x9CB5,0x9CB6, 0,0x9CB8,0x9CB9,0x9CBA,
+ /* plane 0, page 236 */
+ 0 | (252 << 8), /* first, last */
+ 0x9CBB, 0, 0,0x9CBE, 0,0x9CC0,0x9CC1, 0,0x9CC3,0x9CC4,
+ 0,0x9CC6,0x9CC7,0x9CC8,0x9CC9,0x9CCA,0x9CCB, 0, 0,0x9CCE,
+ 0x9CCF, 0,0x9CD1,0x9CD2,0x9CD3,0x9CD4,0x9CD5,0x9CD6,0x9CD7,0x9CD8,
+ 0, 0,0x9CDB, 0,0x9CDD, 0,0x9CDF, 0,0x9CE1, 0,
+ 0, 0,0x9CE5,0x9CE6,0x9CE7,0x9CE8,0x9CE9,0x9CEA, 0,0x9CEC,
+ 0x9CED, 0, 0,0x9CF0, 0,0x9CF2, 0, 0, 0,0x9CF6,
+ 0x9CF7,0x9CF8, 0,0x9CFA,0x9CFB,0x9CFC,0x9CFD,0x9CFE,0x9D40,0x9D41,
+ 0x9D42,0x9D43,0x9D44,0x9D45,0x9D46,0x9D47,0x9D48,0x9D49, 0,0x9D4B,
+ 0, 0,0x9D4E,0x9D4F,0x9D50,0x9D51,0x9D52,0x9D53,0x9D54, 0,
+ 0x9D56, 0,0x9D58,0x9D59, 0,0x9D5B,0x9D5C,0x9D5D,0x9D5E,0x9D5F,
+ 0, 0, 0,0x9D63,0x9D64,0x9D65,0x9D66,0x9D67,0x9D68,0x9D69,
+ 0x9D6A,0x9D6B,0x9D6C,0x9D6D,0x9D6E,0x9D6F, 0,0x9D71,0x9D72,0x9D73,
+ 0,0x9D75, 0,0x9D77,0x9D78, 0,0x9D7A,0x9D7B,0x9D7C, 0,
+ 0, 0,0x9DA2, 0,0x9DA4,0x9DA5, 0, 0, 0, 0,
+ 0x9DAA,0x9DAB,0x9DAC,0x9DAD, 0,0x9DAF,0x9DB0,0x9DB1,0x9DB2,0x9DB3,
+ 0x9DB4,0x9DB5,0x9DB6,0x9DB7,0x9DB8,0x9DB9, 0,0x9DBB,0x9DBC, 0,
+ 0x9DBE, 0, 0,0x9DC1,0x9DC2, 0, 0,0x9DC5,0x9DC6, 0,
+ 0,0x9DC9, 0,0x9DCB,0x9DCC,0x9DCD,0x9DCE, 0, 0, 0,
+ 0x9DD2, 0,0x9DD4, 0, 0,0x9DD7,0x9DD8,0x9DD9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9DED,0x9DEE, 0,
+ 0, 0,0x9DF2,0x9DF3, 0, 0, 0, 0, 0,0x9DF9,
+ 0x9DFA, 0,0x9DFC,0x9DFD,0x9DFE,0x9E40, 0, 0, 0,0x9E44,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9E4F, 0,0x9E51, 0,0x9E53,0x9E54, 0, 0, 0, 0,
+ 0, 0,0x9E5B,
+ /* plane 0, page 237 */
+ 4 | (245 << 8), /* first, last */
+ 0x9E63,0x9E64, 0,0x9E66, 0, 0,
+ 0x9E69, 0,0x9E6B,0x9E6C,0x9E6D,0x9E6E,0x9E6F,0x9E70, 0,0x9E72,
+ 0,0x9E74,0x9E75,0x9E76,0x9E77, 0,0x9E79,0x9E7A,0x9E7B,0x9E7C,
+ 0x9E7D,0x9E7E, 0, 0,0x9EA3,0x9EA4,0x9EA5,0x9EA6,0x9EA7,0x9EA8,
+ 0,0x9EAA,0x9EAB, 0,0x9EAD,0x9EAE, 0, 0, 0, 0,
+ 0,0x9EB4, 0, 0, 0,0x9EB8,0x9EB9, 0,0x9EBB,0x9EBC,
+ 0,0x9EBE, 0, 0, 0,0x9EC2,0x9EC3, 0,0x9EC5,0x9EC6,
+ 0,0x9EC8,0x9EC9, 0,0x9ECB,0x9ECC,0x9ECD,0x9ECE,0x9ECF,0x9ED0,
+ 0,0x9ED2,0x9ED3,0x9ED4,0x9ED5, 0, 0,0x9ED8,0x9ED9,0x9EDA,
+ 0, 0,0x9EDD,0x9EDE,0x9EDF,0x9EE0, 0, 0,0x9EE3, 0,
+ 0x9EE5, 0,0x9EE7, 0, 0, 0, 0,0x9EEC, 0,0x9EEE,
+ 0,0x9EF0, 0,0x9EF2,0x9EF3, 0, 0,0x9EF6, 0,0x9EF8,
+ 0x9EF9, 0,0x9EFB,0x9EFC, 0, 0, 0, 0, 0,0x9F43,
+ 0, 0,0x9F46,0x9F47,0x9F48, 0,0x9F4A,0x9F4B,0x9F4C,0x9F4D,
+ 0, 0,0x9F50, 0, 0,0x9F53, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9F68, 0, 0, 0,
+ 0, 0, 0, 0,0x9F70, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9FA5, 0, 0, 0, 0,0x9FAA, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9FB3, 0,0x9FB5,
+ 0, 0, 0, 0, 0,0x9FBB, 0, 0,0x9FBE,0x9FBF,
+ 0,0x9FC1, 0, 0, 0,0x9FC5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9FD1, 0, 0,
+ 0, 0, 0,0x9FD7, 0,0x9FD9,
+ /* plane 0, page 238 */
+ 8 | (183 << 8), /* first, last */
+ 0x9FEC, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9FF5, 0, 0,
+ 0,0x9FF9, 0, 0, 0, 0, 0,0xA040, 0, 0,
+ 0, 0,0xA045, 0,0xA047, 0, 0, 0, 0, 0,
+ 0, 0,0xA04F, 0, 0, 0,0xA053, 0,0xA055,0xA056,
+ 0, 0,0xA059, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xA068, 0,0xA06A,
+ 0, 0,0xA06D, 0,0xA06F, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA078, 0, 0,0xA07B, 0, 0,0xA07E,
+ 0,0xA0A2, 0,0xA0A4, 0, 0,0xA0A7, 0, 0, 0,
+ 0xA0AB,0xA0AC, 0, 0, 0, 0,0xA0B1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA0BD, 0,
+ 0, 0, 0, 0,0xA0C3, 0,0xA0C5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xA0D0, 0, 0,
+ 0, 0, 0, 0, 0,0xA0D8, 0,0xA0DA, 0, 0,
+ 0,0xA0DE, 0, 0, 0, 0,0xA0E3, 0, 0,0xA0E6,
+ 0,0xA0E8,0xA0E9,0xA0EA,0xA0EB,0xA0EC,0xA0ED,0xA0EE,0xA0EF,0xA0F0,
+ 0xA0F1, 0,0xA0F3,0xA0F4,0xA0F5,0xA0F6,0xA0F7,0xA0F8,0xA0F9, 0,
+ 0xA0FB, 0, 0,0xA0FE,
+ /* plane 0, page 239: --- */
+ /* plane 0, page 240: --- */
+ /* plane 0, page 241: --- */
+ /* plane 0, page 242: --- */
+ /* plane 0, page 243 */
+ 3 | (253 << 8), /* first, last */
+ 0x8840,0x8841,0x8842,0x8843,0x8844,0x8845,0x8846,
+ 0x8847,0x8848,0x8849,0x884A,0x884B,0x884C,0x884D,0x884E,0x884F,0x8850,
+ 0x8851,0x8852,0x8853,0x8854,0x8855, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8862, 0,0x8864,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x88A3, 0,
+ 0x88A5, 0, 0, 0,0x88A9,0x88AA, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8940,0x8941, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x894C, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x89B2, 0, 0, 0, 0,0x89B7, 0, 0,0x89BA,0x89BB,
+ 0x89BC, 0,0x89BE,0x89BF,
+ /* plane 0, page 244 */
+ 3 | (255 << 8), /* first, last */
+ 0x89C5, 0, 0, 0, 0,0x89CA,0x89CB,
+ 0x89CC,0x89CD, 0, 0, 0, 0, 0, 0, 0,0x89D5,
+ 0,0x89D7, 0, 0,0x89DA,0x89DB,0x89DC, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x89E6, 0,0x89E8, 0,
+ 0x89EA, 0, 0,0x89ED,0x89EE,0x89EF, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x89F9, 0,0x89FB,0x89FC, 0,
+ 0x89FE,0x8A40, 0, 0,0x8A43,0x8A44,0x8A45, 0,0x8A47,0x8A48,
+ 0x8A49, 0,0x8A4B,0x8A4C,0x8A4D,0x8A4E, 0,0x8A50,0x8A51,0x8A52,
+ 0x8A53,0x8A54,0x8A55, 0,0x8A57,0x8A58,0x8A59,0x8A5A, 0, 0,
+ 0x8A5D,0x8A5E,0x8A5F,0x8A60,0x8A61,0x8A62, 0,0x8A64,0x8A65,0x8A66,
+ 0x8A67,0x8A68,0x8A69, 0,0x8A6B,0x8A6C,0x8A6D,0x8A6E,0x8A6F,0x8A70,
+ 0x8A71,0x8A72, 0, 0, 0,0x8A76,0x8A77, 0, 0,0x8A7A,
+ 0x8A7B,0x8A7C,0x8A7D,0x8A7E,0x8AA1,0x8AA2,0x8AA3, 0,0x8AA5,0x8AA6,
+ 0,0x8AA8,0x8AA9,0x8AAA, 0,0x8AAC,0x8AAD,0x8AAE, 0,0x8AB0,
+ 0,0x8AB2,0x8AB3,0x8AB4,0x8AB5,0x8AB6, 0,0x8AB8,0x8AB9, 0,
+ 0x8ABB,0x8ABC,0x8ABD, 0, 0,0x8AC0, 0,0x8AC2,0x8AC3, 0,
+ 0, 0,0x8AC7, 0,0x8AC9,0x8ACA,0x8ACB,0x8ACC, 0,0x8ACE,
+ 0x8ACF,0x8AD0,0x8AD1,0x8AD2,0x8AD3,0x8AD4,0x8AD5, 0,0x8AD7,0x8AD8,
+ 0x8AD9,0x8ADA, 0,0x8ADC, 0, 0,0x8ADF,0x8AE0,0x8AE1,0x8AE2,
+ 0x8AE3,0x8AE4,0x8AE5,0x8AE6, 0,0x8AE8,0x8AE9,0x8AEA,0x8AEB,0x8AEC,
+ 0x8AED,0x8AEE,0x8AEF,0x8AF0,0x8AF1,0x8AF2,0x8AF3,0x8AF4, 0,0x8AF6,
+ 0x8AF7,0x8AF8,0x8AF9,0x8AFA,0x8AFB,0x8AFC, 0,0x8AFE,0x8B40,0x8B41,
+ 0x8B42,0x8B43,0x8B44,0x8B45,0x8B46,0x8B47,0x8B48,0x8B49,0x8B4A,0x8B4B,
+ 0x8B4C,0x8B4D,0x8B4E,0x8B4F, 0, 0, 0, 0, 0,0x8B55,
+ 0, 0,0x8B58,0x8B59, 0, 0, 0, 0,0x8B5E, 0,
+ 0x8B60, 0,0x8B62, 0,0x8B64,0x8B65,
+ /* plane 0, page 245 */
+ 0 | (239 << 8), /* first, last */
+ 0x8B66,0x8B67,0x8B68,0x8B69,0x8B6A,0x8B6B, 0,0x8B6D,0x8B6E,0x8B6F,
+ 0x8B70,0x8B71,0x8B72,0x8B73,0x8B74,0x8B75,0x8B76,0x8B77, 0,0x8B79,
+ 0x8B7A,0x8B7B,0x8B7C, 0,0x8B7E,0x8BA1,0x8BA2,0x8BA3,0x8BA4,0x8BA5,
+ 0x8BA6,0x8BA7,0x8BA8,0x8BA9,0x8BAA,0x8BAB,0x8BAC,0x8BAD,0x8BAE, 0,
+ 0,0x8BB1,0x8BB2, 0, 0,0x8BB5,0x8BB6, 0,0x8BB8, 0,
+ 0,0x8BBB,0x8BBC, 0,0x8BBE, 0, 0, 0,0x8BC2,0x8BC3,
+ 0,0x8BC5, 0, 0,0x8BC8, 0, 0, 0,0x8BCC, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8BD6, 0,
+ 0, 0, 0,0x8BDB,0x8BDC, 0,0x8BDE, 0, 0,0x8BE1,
+ 0x8BE2, 0, 0, 0,0x8BE6, 0, 0, 0, 0, 0,
+ 0,0x8BED, 0, 0, 0, 0, 0,0x8BF3, 0, 0,
+ 0, 0, 0, 0,0x8BFA, 0, 0, 0, 0, 0,
+ 0,0x8C42,0x8C43,0x8C44, 0,0x8C46, 0, 0,0x8C49,0x8C4A,
+ 0x8C4B,0x8C4C, 0,0x8C4E, 0, 0, 0, 0, 0,0x8C54,
+ 0x8C55,0x8C56,0x8C57,0x8C58, 0, 0, 0,0x8C5C,0x8C5D, 0,
+ 0x8C5F,0x8C60, 0, 0, 0,0x8C64,0x8C65, 0, 0, 0,
+ 0x8C69, 0, 0,0x8C6C,0x8C6D, 0, 0, 0, 0, 0,
+ 0,0x8C74, 0, 0, 0, 0,0x8C79, 0, 0, 0,
+ 0x8C7D, 0,0x8CA1, 0, 0,0x8CA4, 0, 0, 0,0x8CA8,
+ 0,0x8CAA,0x8CAB, 0, 0, 0,0x8CAF,0x8CB0, 0, 0,
+ 0, 0, 0, 0,0x8CB7, 0,0x8CB9, 0,0x8CBB, 0,
+ 0, 0, 0,0x8CC0,0x8CC1,0x8CC2,0x8CC3,0x8CC4, 0, 0,
+ 0, 0, 0, 0,0x8CCB, 0, 0, 0,0x8CCF, 0,
+ 0x8CD1,0x8CD2,0x8CD3, 0,0x8CD5,0x8CD6,0x8CD7,0x8CD8, 0,0x8CDA,
+ /* plane 0, page 246 */
+ 55 | (240 << 8), /* first, last */
+ 0x8D63,0x8D64, 0, 0,0x8D67,
+ 0x8D68, 0, 0, 0, 0,0x8D6D,0x8D6E,0x8D6F,0x8D70, 0,
+ 0, 0,0x8D74, 0, 0, 0,0x8D78, 0, 0, 0,
+ 0,0x8D7D, 0,0x8DA1, 0, 0, 0, 0,0x8DA6, 0,
+ 0, 0, 0,0x8DAB, 0,0x8DAD, 0, 0,0x8DB0, 0,
+ 0x8DB2, 0,0x8DB4, 0, 0,0x8DB7, 0, 0,0x8DBA,0x8DBB,
+ 0x8DBC, 0, 0, 0, 0, 0, 0,0x8DC3, 0,0x8DC5,
+ 0, 0, 0, 0,0x8DCA, 0,0x8DCC, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8DD6, 0, 0, 0,
+ 0,0x8DDB, 0, 0, 0, 0, 0, 0,0x8DE2, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8DEB,0x8DEC, 0,
+ 0,0x8DEF,0x8DF0, 0, 0,0x8DF3, 0,0x8DF5, 0, 0,
+ 0, 0, 0,0x8DFB,0x8DFC,0x8DFD,0x8DFE, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xC6CD, 0, 0,0xC6CF, 0, 0, 0,0xC6D3, 0,
+ 0xC6D5, 0,0xC6D7, 0, 0, 0, 0, 0, 0,0xC6DE,
+ 0xC6DF,
+ /* plane 0, page 247 */
+ 229 | (238 << 8), /* first, last */
+ 0xC879,
+ 0xC87A, 0,0xC87C, 0,0xC87E,0xC8A1, 0,0xC8A3,0xC8A4,
+ /* plane 0, page 248 */
+ 32 | (59 << 8), /* first, last */
+ 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,
+ /* plane 0, page 249 */
+ 7 | (7 << 8), /* first, last */
+ 0x8BF8,
+ /* plane 0, page 250: --- */
+ /* plane 0, page 251: --- */
+ /* plane 0, page 252: --- */
+ /* plane 0, page 253: --- */
+ /* plane 0, page 254: --- */
+ /* plane 0, page 255 */
+ 2 | (237 << 8), /* first, last */
+ 0xC8D0, 0, 0, 0, 0,0xC8CF, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xC6E4,
+ 0,0xC6E5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xC8CD, 0,0xC8CE, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xF9FE,
+ /* plane 1: --- */
+ /* plane 2, page 0 */
+ 33 | (238 << 8), /* first, last */
+ 0x9C71, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9375, 0, 0, 0, 0, 0, 0, 0,
+ 0x9376, 0, 0, 0, 0, 0, 0, 0,0x9548, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8EC6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8BC5,0x8BFA, 0, 0,0xC87C, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9AB4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x884E,0x884B,0xC87A,0x8848, 0, 0, 0,0x8847,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA0F6,
+ /* plane 2, page 1 */
+ 12 | (242 << 8), /* first, last */
+ 0x8845, 0,0x8853, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFCAD, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AAD,
+ 0,0x9272, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFC47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x94DF, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9FD1,
+ /* plane 2, page 2 */
+ 4 | (229 << 8), /* first, last */
+ 0xFBCB, 0, 0, 0, 0, 0,
+ 0, 0,0x927D, 0, 0, 0, 0, 0, 0, 0,
+ 0x98A4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x94E7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x90CB,0x927B, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x94D8, 0, 0, 0, 0,0xFC5F, 0,
+ 0xFA54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9AB5, 0, 0, 0, 0, 0, 0,
+ 0,0x96DA,0x9279, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFA74,
+ /* plane 2, page 3 */
+ 10 | (252 << 8), /* first, last */
+ 0x9275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8DFB, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8A49, 0, 0, 0,0x92DF,
+ 0x9B7C,0xFA63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFA60,0x926D,0xFA62, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9AB6, 0, 0, 0, 0, 0, 0,0x976B, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFD6A, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFD54, 0,0x9273, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x97D8, 0, 0, 0, 0,
+ 0, 0,0x9FBB,
+ /* plane 2, page 4 */
+ 19 | (254 << 8), /* first, last */
+ 0x9342,
+ 0x9276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFA65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x926C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFA6E, 0, 0, 0, 0,
+ 0, 0,0x9EE0, 0, 0,0x92C0,0x92BF, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x92BE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9ABA, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8AB3, 0,0x9775,
+ /* plane 2, page 5 */
+ 71 | (235 << 8), /* first, last */
+ 0xFA40, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFA76, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFBD0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFA7B,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFE6D, 0, 0, 0, 0,
+ 0, 0,0x9BB3, 0, 0, 0, 0, 0,0x89CC, 0,
+ 0, 0, 0,0x9ABE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFA42,0x92BC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x945C,
+ /* plane 2, page 6 */
+ 17 | (118 << 8), /* first, last */
+ 0x9BB5, 0, 0,
+ 0,0x9ABF, 0, 0, 0,0x98A7,0x97A4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x90FD, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFC7B, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9AC0,
+ /* plane 2, page 7 */
+ 14 | (121 << 8), /* first, last */
+ 0x92C3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AAA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9BD0,
+ /* plane 2, page 8 */
+ 44 | (213 << 8), /* first, last */
+ 0x9550, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x92C6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x98A6,
+ /* plane 2, page 9 */
+ 22 | (231 << 8), /* first, last */
+ 0x9546, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFD63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFAC2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9EC3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x89B2,
+ /* plane 2, page 10 */
+ 17 | (205 << 8), /* first, last */
+ 0x9C66, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9053, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x97C1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9AC4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9AC5,
+ /* plane 2, page 11 */
+ 13 | (255 << 8), /* first, last */
+ 0x8EEF, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFAE9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9262,0x8AF7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9AC6, 0, 0, 0, 0, 0, 0,0x92E1, 0,
+ 0, 0, 0,0x9AC9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFAC6, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x97A5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9ACB, 0, 0, 0,0xFA72,
+ /* plane 2, page 12 */
+ 11 | (255 << 8), /* first, last */
+ 0x8A5E, 0,0x94E0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x92CC, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8AE5, 0, 0, 0, 0, 0,0xFE5C,0x9ACC,
+ 0, 0, 0, 0, 0,0x9DF9,0x8A43,0x8AA6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9ACD, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9ACE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFAEE,
+ 0x9BCC, 0, 0, 0,0x9ACF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9AD1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9DFA, 0, 0, 0, 0, 0,0x9D7C, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9AD3, 0, 0,0x97A6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x995F, 0, 0,
+ 0,0xFBF6,0x9FC5,0x8A59,0x8B6B, 0, 0, 0, 0, 0,
+ 0,0x9AD4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9AD5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x97A2,
+ /* plane 2, page 13 */
+ 21 | (200 << 8), /* first, last */
+ 0x8A44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9F4A, 0, 0, 0, 0, 0, 0, 0, 0,0x90A1,
+ 0xFDA4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8A64,0x8AF2,0x8AF8,0x9DD8, 0, 0,0x94D6,0xFAFE,0xFBA7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9AD6, 0,0x9F4D, 0, 0,0xFAF6, 0, 0, 0,
+ 0, 0, 0, 0,0x8A57, 0,0x8B43,0x8B44, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8AB6, 0, 0, 0, 0, 0,0x8AC0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9E54, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9AD7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9AD8,
+ /* plane 2, page 14 */
+ 4 | (251 << 8), /* first, last */
+ 0x9ADC, 0, 0, 0, 0,0x8ACA,
+ 0x9EA8, 0, 0,0x9263,0x9ADD,0x8B65,0x8B6F,0x8B7E, 0, 0,
+ 0, 0,0x8F43, 0, 0, 0, 0, 0, 0,0x92D0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8AF4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9DBE,
+ 0, 0, 0, 0, 0,0x9AE1, 0,0xFCDE,0x9DFD,0x8B66,
+ 0x8B70,0x8B75,0x8AE4,0x8BA4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8AED, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8A5D, 0,0x8B48, 0, 0, 0, 0,0x9DED, 0, 0,
+ 0, 0,0x9E40, 0, 0, 0, 0, 0, 0, 0,
+ 0x8AEF,0x8AF6,0x9E76, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9EE3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9ADE,0x8DFE, 0, 0, 0,
+ 0,0xFAFC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9CB1,0x9E77,
+ 0x8B64,0x8B67,
+ /* plane 2, page 15 */
+ 29 | (237 << 8), /* first, last */
+ 0x974B,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9653, 0,
+ 0, 0, 0, 0, 0,0x9AE0,0x8B4A, 0,0x8AF1,0x8AD7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xA0AB,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8AB5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8A5F, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8AEE, 0, 0,0x9ADF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8AFE, 0, 0, 0, 0, 0, 0,
+ 0x8A58,0x8BA3,0x8BA7, 0, 0, 0, 0, 0,0x9AE3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9261, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9DD7,0x9E7D,0x9EA7,0x9EAB,
+ /* plane 2, page 16 */
+ 20 | (246 << 8), /* first, last */
+ 0x9042, 0, 0, 0, 0, 0, 0, 0, 0,0x8B79,
+ 0x8B7A, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AE6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9AE5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8A7E, 0, 0, 0, 0, 0,0x9E44,0x9AE7,0x8A7C,
+ 0x8B71, 0, 0,0x9AE9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9AEA, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9AEB, 0, 0, 0, 0, 0, 0,0x8ABD, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFB4E, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9AED,0x8AF9,0x9E63, 0, 0, 0, 0, 0,0x8B49,
+ 0x8ACE,0x8B6E, 0, 0, 0, 0, 0,0x8AE8, 0, 0,
+ 0,0x9AEE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x92CE, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8A5A,0x8B7B,0x8B7C,
+ /* plane 2, page 17 */
+ 47 | (217 << 8), /* first, last */
+ 0x9AEF, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AF0,
+ 0,0x8AFA, 0, 0, 0, 0, 0, 0, 0,0x8941,
+ 0, 0,0x8B72, 0, 0, 0, 0, 0, 0,0x8AF3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8BA8, 0,
+ 0, 0, 0, 0, 0,0x9EAE, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9E72,
+ /* plane 2, page 18 */
+ 60 | (254 << 8), /* first, last */
+ 0xFB73, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFB5F,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x90BA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x91FE,0x9EF6,
+ 0, 0, 0, 0, 0, 0,0x97ED, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9AF3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xA0EE,
+ /* plane 2, page 19 */
+ 2 | (254 << 8), /* first, last */
+ 0x967C,0x9345,0x986E,0xFA56, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9AF5, 0, 0, 0,0xFC4B, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9AF4,0xFEDE, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFCB7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x97F1, 0, 0, 0,0x97C7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9CCB,0x9240, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9CE8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x91FD,
+ /* plane 2, page 20 */
+ 19 | (253 << 8), /* first, last */
+ 0x974E,
+ 0, 0,0xFB68, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x976C, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8CC2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x97E8, 0,0xFB6A,0x8B74, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8EE7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFDC8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9241, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x96A1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8EF3,
+ /* plane 2, page 21 */
+ 119 | (150 << 8), /* first, last */
+ 0x9AF7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8FA6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFAD6,
+ /* plane 2, page 22 */
+ 10 | (254 << 8), /* first, last */
+ 0x9CC7, 0, 0, 0, 0, 0, 0, 0, 0,0xFAD7,
+ 0, 0, 0, 0, 0,0x9AF8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFBA1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8EC5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFBA4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFBC2, 0,0x9AC1, 0, 0, 0,
+ 0, 0,0x91FA,0xFEDB,0x97AB, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9147, 0,0xFBB1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8FEA, 0, 0, 0, 0, 0, 0,
+ 0x94D2,0xFE61,0xFACE, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x92ED,0x91F3,0x93C6, 0,0x935A,
+ /* plane 2, page 23 */
+ 13 | (252 << 8), /* first, last */
+ 0xFAFB, 0, 0,0x92EF, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFAC8, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9847,0x9366,
+ 0x9855, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x96E6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9F43,0x9FAA,
+ 0x94DA,0x92EE,0xFCAF,0xFBFB, 0,0x8EF9,0x91F6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9364, 0, 0, 0, 0,0x94F5,0x9CB6,0xFBAD,0x984E,
+ 0x8F44,0x96FD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9AF9, 0, 0, 0,0x9AFA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9769,0x95D4,0x984B,
+ 0xFBAA, 0, 0,0x987C, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x91EA,
+ 0, 0, 0, 0, 0,0x9DAF,0x9DC5, 0,0x91F1,0x8EB1,
+ 0x97A9,0xFBAC,0xFCB8,
+ /* plane 2, page 24 */
+ 32 | (250 << 8), /* first, last */
+ 0x9CB9, 0, 0, 0, 0, 0, 0, 0,
+ 0xFBB0,0xFCD2,0x93CB, 0, 0,0x9AFD, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x91F4,0x8BAC,0xA055,
+ 0, 0, 0, 0,0x9574, 0, 0, 0, 0,0x95BE,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x97AD, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8EE9, 0, 0,0x92F8,0x97BE,0x916C,
+ 0x94AA, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFC63,
+ 0, 0, 0,0x9DC6, 0, 0, 0, 0, 0, 0,
+ 0,0x97B5,0x92B8,0x91EF, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFEA6,0x9760,
+ 0x9358,0x9576,0x8FAC, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x91EC,0x97B4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x91F7,
+ 0, 0, 0, 0,0x974A,0xFB49,0x9578,0x93BC, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x91D6,
+ /* plane 2, page 25 */
+ 3 | (243 << 8), /* first, last */
+ 0x9355,0x9356,0x9851, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8FF8,0xFBC0,0x93F2, 0,
+ 0,0x90D0, 0, 0, 0, 0, 0, 0,0x9C44, 0,
+ 0, 0, 0, 0,0x9255, 0, 0, 0, 0,0x9363,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x91A5,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA0ED, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFD6B, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9AFE, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9351, 0, 0, 0,0x8C57, 0,
+ 0,0xFA78, 0, 0, 0, 0,0xFEA8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9350, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFA4C,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x92F7,
+ /* plane 2, page 26 */
+ 45 | (75 << 8), /* first, last */
+ 0x9B40, 0, 0, 0, 0,
+ 0, 0,0xFBCE, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9B41,
+ 0, 0, 0, 0, 0,0xFEAD,
+ /* plane 2, page 27 */
+ 68 | (194 << 8), /* first, last */
+ 0xFBD5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8BC2,0x9A7C,
+ /* plane 2, page 28 */
+ 42 | (172 << 8), /* first, last */
+ 0x9B42, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9B43, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9E79, 0, 0,0xFBD9, 0, 0, 0, 0,
+ 0, 0,0x9B44,
+ /* plane 2, page 29 */
+ 70 | (249 << 8), /* first, last */
+ 0xA0A7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BF3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8C79, 0, 0, 0,0x935E, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x89CB, 0, 0, 0, 0, 0, 0,0x9F53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x93D7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFBE1,
+ /* plane 2, page 30 */
+ 28 | (213 << 8), /* first, last */
+ 0xFED0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFBE2, 0, 0, 0, 0,
+ 0,0xFCE3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9074, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFBE6, 0, 0, 0,0x9BB7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9B45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9B47,
+ /* plane 2, page 31 */
+ 15 | (232 << 8), /* first, last */
+ 0x9F50, 0, 0, 0, 0,
+ 0,0x9B48, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFC5B, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x98A9, 0,
+ 0,0x9CFD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x884C,
+ /* plane 2, page 32 */
+ 69 | (252 << 8), /* first, last */
+ 0x9B4B,
+ 0, 0, 0,0xFBEC, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8C69, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BA8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AD5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFA73,
+ /* plane 2, page 33 */
+ 42 | (195 << 8), /* first, last */
+ 0xFD59, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x91A2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFBED, 0, 0, 0, 0,
+ 0, 0,0x9CA9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8AA8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9BC3,
+ /* plane 2, page 34 */
+ 8 | (124 << 8), /* first, last */
+ 0x8AE1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9B4E,
+ /* plane 2, page 35 */
+ 33 | (250 << 8), /* first, last */
+ 0x95D0, 0, 0, 0,0x905F, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x97EE,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFC4E, 0,
+ 0, 0, 0, 0, 0,0x9B4F, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9B50,
+ /* plane 2, page 36 */
+ 101 | (237 << 8), /* first, last */
+ 0x9EC6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFC50, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD73,
+ 0, 0, 0, 0, 0,0xFDA7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9DA2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFA58,
+ /* plane 2, page 37 */
+ 19 | (190 << 8), /* first, last */
+ 0xFA5E,
+ 0, 0, 0, 0, 0, 0, 0,0xA059, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFA75, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFBBE, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9CA2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9370, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9371,
+ /* plane 2, page 38 */
+ 27 | (246 << 8), /* first, last */
+ 0x9377,0xFEEF, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x936D, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFC5D, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x90B8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8AFC, 0,0xFB41, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9E6B,0x94E3,0x8EE2,
+ /* plane 2, page 39 */
+ 18 | (205 << 8), /* first, last */
+ 0x8C7D, 0,
+ 0x8ED7, 0, 0, 0, 0, 0, 0,0x9C4D, 0, 0,
+ 0,0x96A3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9B51, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8AC3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x96AA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFC68,0x8B6D, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFD67,
+ /* plane 2, page 40 */
+ 3 | (247 << 8), /* first, last */
+ 0x8AE9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFCA1,0x936C, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9B52, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFE70, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFCA8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFCE9,
+ /* plane 2, page 41 */
+ 38 | (147 << 8), /* first, last */
+ 0x9CB4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8AEA, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9B53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9B55, 0, 0, 0,0x96AB, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFCA7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9B56,
+ /* plane 2, page 42 */
+ 102 | (232 << 8), /* first, last */
+ 0x8ABC, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8ACB, 0, 0,
+ 0, 0, 0,0x9B57, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x89CD, 0,0x9B59,
+ /* plane 2, page 43 */
+ 14 | (206 << 8), /* first, last */
+ 0x9B5B, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x93A5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9B5D, 0, 0, 0,0x9E4F, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x93A3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8A7B, 0, 0, 0,0x8B42,
+ /* plane 2, page 44 */
+ 38 | (201 << 8), /* first, last */
+ 0x9750,0x8FB3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8A50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9B60, 0, 0, 0,
+ 0,0x8B45, 0, 0, 0,0x8B46, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9DFE, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9B62, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x937B, 0, 0, 0, 0,
+ 0,0x93B1, 0, 0, 0, 0, 0, 0, 0,0x8A60,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8AD8, 0,
+ 0, 0, 0,0x9B63, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8A69, 0, 0, 0,0x8A47, 0,
+ 0,0x8ACC,
+ /* plane 2, page 45 */
+ 7 | (238 << 8), /* first, last */
+ 0x937C,0x9B65, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9B66, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8A72, 0,
+ 0, 0, 0, 0, 0, 0,0x8A7A, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x93AF, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8AB0, 0, 0, 0, 0, 0, 0, 0,0x9B68,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9EA3, 0, 0,0xFAEC,0x8B77, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9B67, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8B59,
+ /* plane 2, page 46 */
+ 13 | (239 << 8), /* first, last */
+ 0xFCB1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFCBB, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9B69, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x93A8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AE0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9E51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8F5F,
+ /* plane 2, page 47 */
+ 116 | (227 << 8), /* first, last */
+ 0x9B6A, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9B6B, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x97EC,
+ /* plane 2, page 48 */
+ 51 | (218 << 8), /* first, last */
+ 0x9B6C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFE4E, 0,
+ 0, 0, 0, 0, 0,0xFDC2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9B6D, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9167,0xFCCC, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x93B6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x90E4, 0, 0, 0, 0,0x90E5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9EF2,
+ /* plane 2, page 49 */
+ 3 | (249 << 8), /* first, last */
+ 0x93CA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8BBC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8F46, 0, 0, 0, 0,
+ 0x93CF, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFCDB,0xFCDC, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x93C0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFCE6,0x96E7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFCD8,0xFCD9,0xFDA6,
+ /* plane 2, page 50 */
+ 15 | (225 << 8), /* first, last */
+ 0x93CE, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x95F1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9CE9, 0,0xFCE4,
+ 0x94AF,0xFA77,0x93CC, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x905A, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8C54,
+ 0, 0, 0, 0, 0, 0, 0,0x93BF,0xFB51, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x93B9,0xFED7,0x93B7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x93D9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x93BB,0x93DA,
+ /* plane 2, page 51 */
+ 0 | (254 << 8), /* first, last */
+ 0x98A3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x90D1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9B6E, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFA70, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BEB, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9B6F, 0, 0, 0, 0, 0, 0, 0,
+ 0xFCFC, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8B40,0xA07B, 0, 0, 0,0x8CA1,
+ 0x97F7, 0, 0, 0,0x93E2,
+ /* plane 2, page 52 */
+ 0 | (229 << 8), /* first, last */
+ 0xFCD6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9559, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x93A6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFD40, 0, 0,0x935F, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x97F2,
+ /* plane 2, page 53 */
+ 25 | (243 << 8), /* first, last */
+ 0x9C76, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8EF8, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8F47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9B74, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x92B4,
+ 0, 0, 0,0x91ED, 0, 0,0x96D2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFD46,0x8F4F,0x9549, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9B75,
+ /* plane 2, page 54 */
+ 0 | (238 << 8), /* first, last */
+ 0xFA5C, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9B79, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFD4B, 0, 0, 0,0x96D3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD58,
+ 0, 0, 0, 0, 0,0x945F, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xA0F5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9243, 0, 0, 0,
+ 0, 0, 0,0x97FA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9DD9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x97F4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x924D,
+ /* plane 2, page 55 */
+ 3 | (215 << 8), /* first, last */
+ 0xFD5B, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9B7A, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9ED5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFAAE, 0,0x9CC9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9258, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8EC8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94B4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x93E1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x93DF, 0,
+ 0, 0, 0, 0,0xFCF0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x93EC,0x97F6,0x96CF,
+ /* plane 2, page 56 */
+ 58 | (58 << 8), /* first, last */
+ 0x93DE,
+ /* plane 2, page 57 */
+ 194 | (194 << 8), /* first, last */
+ 0x8ACF,
+ /* plane 2, page 58 */
+ 167 | (250 << 8), /* first, last */
+ 0x9BA2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD69,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9352, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x98A2,
+ /* plane 2, page 59 */
+ 90 | (90 << 8), /* first, last */
+ 0xFD6E,
+ /* plane 2, page 60 */
+ 99 | (255 << 8), /* first, last */
+ 0x8CA4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFA7C,0x93FA,0x907C, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8F67, 0,0x9DB7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xA0E9,
+ 0xFA4E,0xFDA1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9E74,0x9FBF,0x9ECB,0x9BB9,
+ /* plane 2, page 61 */
+ 64 | (248 << 8), /* first, last */
+ 0x9DD4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x97B9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8EF1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x957B, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9ED2,0x9753,0x96A4,0x8FBE,0x94D9,0x9058,0xFD79,0xFD7B,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8EDA, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8EFA,
+ /* plane 2, page 62 */
+ 17 | (252 << 8), /* first, last */
+ 0x9BA5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9ED9,0x97D4,0x90BB,0xFDBC,0xFDC6,0x9248,
+ 0, 0, 0, 0, 0, 0, 0,0x92B5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9DC1,0x92B9,0x92A6,0x8F4B,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9BA6, 0, 0, 0, 0,
+ 0,0x92B6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8E40, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9ED8,0x945E,0x985F,
+ 0x94CE,0x924A,0xFD70,
+ /* plane 2, page 63 */
+ 53 | (240 << 8), /* first, last */
+ 0x9467, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8DEC, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BD8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9448,0xFAC1,0x9CF7,
+ 0xFDBE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8FDA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFDD9, 0, 0,0xFC7E, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x93F9, 0, 0, 0, 0,0xFA43, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFAEB,0xFAC3,0x97D3,0x95F9,0x9C48,
+ 0xFDD8,
+ /* plane 2, page 64 */
+ 17 | (225 << 8), /* first, last */
+ 0xA0D8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFDD7,0xFB4A,0x9BAF,
+ 0x944B,0xFDC9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8EAC, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFDB2, 0, 0, 0, 0, 0,0x925A,
+ 0xFCBD,0x92D9, 0, 0, 0,0xFDD5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x92DD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9259,
+ /* plane 2, page 65 */
+ 4 | (252 << 8), /* first, last */
+ 0x96BA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x925B, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9BAB, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFDDA,0xFDDE, 0, 0, 0,0xFDD3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8C46, 0,
+ 0, 0, 0, 0, 0,0xFDD6,0xFDDC,0xFDDD, 0, 0,
+ 0, 0,0x90FE, 0, 0,0xFEA1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8BAD,
+ 0, 0,0x9CD8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9E6D,0xFD7C,0xFB61, 0, 0, 0, 0,
+ 0, 0,0x96F8, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x96F0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFCF4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFE60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9852,
+ /* plane 2, page 66 */
+ 27 | (250 << 8), /* first, last */
+ 0x964F, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x916E, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x986D, 0, 0,0x9864,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9453,0xFDEC,
+ 0xFB78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x95BA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x985D, 0,0x92F9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x985A, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFDF6, 0, 0, 0, 0, 0, 0,
+ 0,0x93D0,0x9862, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9BAD, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x974F,
+ /* plane 2, page 67 */
+ 13 | (248 << 8), /* first, last */
+ 0x9BAE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9452, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9BB0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x91D2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x97EA,0xFB6B,
+ 0x91B1,0xFDF3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x92CB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9BB1, 0, 0, 0, 0, 0,0xFCEC, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x986B,
+ 0, 0, 0,0x9751, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9871,0x95EF, 0, 0, 0, 0, 0,
+ 0, 0,0x9EF3, 0, 0, 0, 0, 0,0x91E8,
+ /* plane 2, page 68 */
+ 4 | (214 << 8), /* first, last */
+ 0x9BBA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFB4C,0x926A, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFDF8,0x9861, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x91E7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x93ED,0x9744, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x91E1, 0, 0,0xFBF5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9869, 0, 0, 0,
+ 0,0x8A62, 0, 0,0x9BBB,
+ /* plane 2, page 69 */
+ 5 | (200 << 8), /* first, last */
+ 0x8CA8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9C55, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8E77, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8AB2,
+ /* plane 2, page 70 */
+ 24 | (212 << 8), /* first, last */
+ 0x9EBC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x93E6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x93A2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9BBD, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x94B3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x937D,
+ /* plane 2, page 71 */
+ 6 | (224 << 8), /* first, last */
+ 0x9E66, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9459, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9BBF, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9458, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9EA5,
+ /* plane 2, page 72 */
+ 18 | (255 << 8), /* first, last */
+ 0x9BC7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFE54, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8E74, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8BD6, 0, 0, 0, 0, 0, 0,
+ 0x94B6,0xFD74,0x98C0,0x94A5, 0, 0, 0, 0, 0, 0,
+ 0,0x9BC8, 0, 0, 0,0x95ED,
+ /* plane 2, page 73 */
+ 0 | (251 << 8), /* first, last */
+ 0xFD7E,0xFBEB, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFD7D, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x976F,0x9461, 0,0x9FC1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x95D7, 0, 0,
+ 0,0xFA52,0x9C58, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9F68,0x9BE7,0xFCCE,0x96E8,0xFA49,0x97A1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x954D,0x9EF8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFE49,0x91CE,0x9771, 0,
+ 0, 0, 0,0x8CCF, 0, 0, 0,0xFDB1, 0, 0,
+ 0xFC6E, 0, 0, 0, 0, 0,0x9CF2,0x93B8,0x9043,0x9759,
+ 0x94D7,0xFE66,0x947D,0xFC6F, 0, 0, 0, 0,0x9246, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFA6D, 0, 0,0x8EF7, 0,0xFBB7,
+ 0,0x947C,0x92CD,0x97B2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFE65,0x967E,0x9758,0x9B77,0x91CF, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x94A4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9CAD, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8BAB, 0,
+ 0, 0,0x96D5,0xFCB3, 0, 0, 0,0x93AE, 0,0x976D,
+ 0, 0, 0, 0, 0, 0,0x9446,0x95F7, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9C46,0x955B,0x91D1,0x94F4,
+ 0,0xFE67,
+ /* plane 2, page 74 */
+ 14 | (233 << 8), /* first, last */
+ 0x92A5, 0, 0, 0,0xFEDF,0x8CAB,
+ 0,0x9BC9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFCED,0xFDFA,0xFCC8,0xFE62,0x91FC,0xFE6B,0xFDF9,
+ 0xFCC7,0x914E,0x9CB8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9767, 0, 0, 0,0x95EE, 0, 0,0x9BB2,
+ 0, 0, 0, 0,0x9460, 0, 0, 0,0x94A2,0x9875,
+ 0x97AC,0x91D3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x987B, 0, 0, 0, 0, 0, 0,
+ 0,0x8EEB,0x976A,0x965E, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x97EB, 0, 0, 0, 0, 0,0x9FF9,
+ 0x95F8,0xFEA2,0x8FE6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFE7E, 0, 0, 0, 0, 0, 0,0x9DA4,0x9768,0x8EEC,
+ 0x94BD, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x945B,0x9CF6,0xFAA7,0x9BD9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFA5D,0x9656,0x9762,
+ 0, 0, 0, 0, 0, 0,0x94BA,0xA04F,0x92D8, 0,
+ 0, 0,0x9BCB, 0, 0, 0, 0, 0, 0,0x94BB,
+ 0, 0,0x9D5F, 0, 0, 0, 0, 0, 0,0x90CF,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9465, 0, 0,0x9F4C, 0, 0, 0,
+ 0, 0, 0,0x90D8,
+ /* plane 2, page 75 */
+ 110 | (245 << 8), /* first, last */
+ 0x9EBE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFB6D,
+ /* plane 2, page 76 */
+ 9 | (217 << 8), /* first, last */
+ 0x95CA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9DC2,0x97F8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8FFC, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9473,
+ /* plane 2, page 77 */
+ 6 | (235 << 8), /* first, last */
+ 0x9474, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFEB7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8A4B, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8A55,0x8B69,
+ /* plane 2, page 78 */
+ 59 | (167 << 8), /* first, last */
+ 0x8ADC,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8B76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9BCE, 0,0x8A68,
+ /* plane 2, page 79 */
+ 14 | (194 << 8), /* first, last */
+ 0xA0F8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x98DF, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFEB5, 0, 0, 0,0x9BCF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x96FB, 0, 0,0x9BFB, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9ECE,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8EE5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9E7B,
+ /* plane 2, page 80 */
+ 44 | (157 << 8), /* first, last */
+ 0x9BD2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8AA5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFECE,
+ /* plane 2, page 81 */
+ 43 | (231 << 8), /* first, last */
+ 0x8A45, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9DFC, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFECF,0x8BA5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8C4A, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8AEC, 0, 0,
+ 0xFCE0,0x94AD,
+ /* plane 2, page 82 */
+ 32 | (216 << 8), /* first, last */
+ 0xFED5,0x94AC, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFC5A, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9BD6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8A6F,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8BA9,
+ /* plane 2, page 83 */
+ 14 | (19 << 8), /* first, last */
+ 0x8E5F, 0, 0,0x9DCB, 0,0xFCE7,
+ /* plane 2, page 84 */
+ 25 | (110 << 8), /* first, last */
+ 0x9BD7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x93C8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x91F0,0x8FE0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9BDB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x90ED, 0,
+ 0x9BDC,
+ /* plane 2, page 85 */
+ 49 | (224 << 8), /* first, last */
+ 0xA0EC,
+ 0, 0, 0,0x98FA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9BE0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x93C7,0x9249,0x96E1,0x9BE2, 0, 0, 0,0x9BE4, 0,
+ 0,0x8FE1,0x9BE5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94C0,
+ 0, 0,0x93C3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x93C5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9079, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x977B, 0, 0, 0, 0, 0,0x907E,
+ 0, 0, 0, 0,0xFEE6,
+ /* plane 2, page 86 */
+ 5 | (246 << 8), /* first, last */
+ 0xFE46, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9DB8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9270, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x95A8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8CB0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x94C8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x98B9,
+ /* plane 2, page 87 */
+ 6 | (225 << 8), /* first, last */
+ 0x9140, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFCBE,
+ 0, 0, 0, 0, 0, 0, 0,0x9157, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8BB2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFADF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9BE6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9643,0x8E44,0x9C4F,
+ /* plane 2, page 88 */
+ 87 | (225 << 8), /* first, last */
+ 0xFEF4, 0, 0,
+ 0, 0, 0,0x9BE8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x93DC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x966F, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8E4A,
+ /* plane 2, page 89 */
+ 3 | (204 << 8), /* first, last */
+ 0x9BED, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x92F6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9DB9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8E4E, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFBCF,
+ /* plane 2, page 90 */
+ 149 | (233 << 8), /* first, last */
+ 0x9EC2,
+ 0, 0, 0, 0, 0, 0,0x94E5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BF0,0x94E4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9551,
+ /* plane 2, page 91 */
+ 116 | (232 << 8), /* first, last */
+ 0x8BBB, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9BF1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94F0,
+ 0x8E64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x94EA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8F61, 0,
+ 0, 0,0x9B64,
+ /* plane 2, page 92 */
+ 1 | (254 << 8), /* first, last */
+ 0x8E5B, 0, 0, 0, 0,0x9BF2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9FBE, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9DC9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8E6C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8F73, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8CAF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8F75,0x8E71, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8E60,
+ /* plane 2, page 93 */
+ 32 | (67 << 8), /* first, last */
+ 0x8E6A, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8C4C, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9552,
+ /* plane 2, page 94 */
+ 14 | (216 << 8), /* first, last */
+ 0x9554, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8AD4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9DBB,
+ 0x9543,0x92FE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x94F2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x94F1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xA0EA,0x9DD2,
+ /* plane 2, page 95 */
+ 26 | (226 << 8), /* first, last */
+ 0xA0B1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x91F8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9462,0x9BA4,
+ /* plane 2, page 96 */
+ 41 | (165 << 8), /* first, last */
+ 0x8EAD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9EAD, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x96D0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFEEE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8AB4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9757,0x8A77,
+ /* plane 2, page 97 */
+ 2 | (221 << 8), /* first, last */
+ 0x9BF7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8EB5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xA06D,
+ 0x8EB6,0x9756,0x9540, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA0F3,0x94BE, 0, 0, 0,0x9BFA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xFDDF,
+ /* plane 2, page 98 */
+ 88 | (208 << 8), /* first, last */
+ 0x9DBC, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x94FE, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8BDB,0xA0FE, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8EC0,
+ /* plane 2, page 99 */
+ 53 | (248 << 8), /* first, last */
+ 0x9F47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8BDE,0xA0FB, 0, 0, 0,
+ 0,0x8EC3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9649, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xFEC2, 0, 0,0x954C,
+ /* plane 2, page 100 */
+ 2 | (152 << 8), /* first, last */
+ 0x9BFD, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x90CC,0x9C60,0x954B, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BFE, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9C70, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9C43, 0, 0, 0,0x9C47,0x8ECC, 0, 0,
+ 0,0x8E54, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8EE4,
+ /* plane 2, page 101 */
+ 18 | (191 << 8), /* first, last */
+ 0x9C49, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8B5E, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x955E, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x955C, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9C4B,
+ /* plane 2, page 102 */
+ 18 | (252 << 8), /* first, last */
+ 0x8BE1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8ED9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9DB4, 0,0x925F, 0, 0,
+ 0,0x9C4C, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8AA1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8EDB, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9C56,
+ /* plane 2, page 103 */
+ 22 | (204 << 8), /* first, last */
+ 0x8AA2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9754, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9C5E, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9ED4,
+ 0x9568, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xA0C3,
+ /* plane 2, page 104 */
+ 28 | (199 << 8), /* first, last */
+ 0x8AE6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xA0F7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9C61, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9C5F, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFC4D, 0,0x9E5B, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9E69, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9C63,
+ /* plane 2, page 105 */
+ 14 | (250 << 8), /* first, last */
+ 0xFEC7, 0, 0,0xFEC6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9C67, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9C69, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8BE2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9165, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9CE7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8A54, 0, 0, 0, 0, 0, 0, 0,
+ 0x9C6C,
+ /* plane 2, page 106 */
+ 45 | (82 << 8), /* first, last */
+ 0x9C6E,0xFE5D, 0, 0, 0,
+ 0, 0,0x9C73, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x956A, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x956D,0x8EF0,
+ /* plane 2, page 107 */
+ 5 | (247 << 8), /* first, last */
+ 0x8F4D, 0, 0, 0, 0,
+ 0x8EF6, 0, 0, 0, 0, 0, 0, 0, 0,0xFABC,
+ 0,0x8CD5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFBDA, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8B4C,0xFD75,0x9BDD,0xFAF5, 0, 0, 0, 0, 0, 0,
+ 0,0x9C74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9545, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x96C6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8F6A,0x8F4E, 0, 0, 0, 0, 0,0x9C78, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFA55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x97E4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9C41,
+ /* plane 2, page 108 */
+ 33 | (209 << 8), /* first, last */
+ 0x925C, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x96FA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFB66,0x8E65,0x9849,0xFBA8,
+ 0x9842, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9C7A, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x97FB,0x90CA, 0, 0, 0, 0,0x9C5B,
+ 0, 0,0x974D, 0, 0,0x8ED3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9561,
+ /* plane 2, page 109 */
+ 34 | (240 << 8), /* first, last */
+ 0x9F4B,0x9FB5,0x93D2,0xFDAA,0x9840,0x9146,
+ 0x9867,0xFA5A,0xFBA9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9841, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8CD3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFCFD,0xFDAB,0x91BD,0x8F4C,0x96C9,0x8F55,0xFBAE,0x956F, 0, 0,
+ 0, 0, 0, 0,0x9C7D, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xA0F0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x946F,0xFDAC, 0, 0, 0, 0,
+ 0x96CB,
+ /* plane 2, page 110 */
+ 0 | (215 << 8), /* first, last */
+ 0x96CE, 0, 0, 0, 0,0xA056, 0,0x9CE1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x96C4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8F5E,0x8F6C,0x8EA3,0xFBB3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFC53, 0, 0, 0,0xFDB3, 0, 0, 0, 0,0x8F6B,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x96CA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8F79, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9E6F,0xA0C5,
+ 0xFC78,0x8E42,0x8F5A,0x90C2,0x8EA5,0x9061,
+ /* plane 2, page 111 */
+ 38 | (223 << 8), /* first, last */
+ 0x924F, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9373,0xFDB5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFECC,
+ 0,0xFBBD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8CD6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9843,0x96C5,
+ /* plane 2, page 112 */
+ 14 | (248 << 8), /* first, last */
+ 0x89BC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9CA3, 0, 0, 0, 0,
+ 0, 0,0x924B,0x984A, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8FA4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xA0F1,0x9EFB,0x9CD2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8FA7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFC5C,
+ /* plane 2, page 113 */
+ 9 | (205 << 8), /* first, last */
+ 0x9845,
+ 0, 0,0x9046,0x8CD1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFEFA,0x9560,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9F48,0x9247, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x90FB, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9CA4,
+ /* plane 2, page 114 */
+ 27 | (230 << 8), /* first, last */
+ 0x9571, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9CA6, 0,
+ 0, 0, 0,0x9CA7, 0, 0, 0, 0, 0,0x9CAA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9ED3, 0,
+ 0, 0,0x9E70, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9CAC,
+ /* plane 2, page 115 */
+ 154 | (154 << 8), /* first, last */
+ 0x8FAE,
+ /* plane 2, page 116 */
+ 34 | (134 << 8), /* first, last */
+ 0x957D, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9CB0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x97B6, 0,0xA0BD,
+ /* plane 2, page 117 */
+ 116 | (254 << 8), /* first, last */
+ 0x8ADF, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9EAA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8FBD, 0, 0, 0,0x8FBF, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9369,0x9BA7,
+ /* plane 2, page 118 */
+ 7 | (148 << 8), /* first, last */
+ 0xC8A4, 0, 0,
+ 0, 0,0xFEEA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9BE1, 0, 0, 0, 0, 0, 0,0x8B41, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9DB6,0xA0EB,0x9BA3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8BA1,
+ /* plane 2, page 119 */
+ 15 | (204 << 8), /* first, last */
+ 0x8FC8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x894C,0x9860, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x94C7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8B58, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x95AB,0x95AA, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CC3,
+ /* plane 2, page 120 */
+ 88 | (200 << 8), /* first, last */
+ 0x9CC4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x93D6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9DAC, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8BE6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8A71,
+ /* plane 2, page 121 */
+ 36 | (253 << 8), /* first, last */
+ 0x8FD1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x99D5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x90F4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8AA3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9CCE, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9CD4,
+ /* plane 2, page 122 */
+ 10 | (244 << 8), /* first, last */
+ 0x9CD5, 0, 0, 0,0xFBC8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9DB3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFC70, 0, 0, 0, 0, 0,0x8FD7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9B73, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFA5B, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8FD2,
+ 0x9064, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x98B6,
+ /* plane 2, page 123 */
+ 6 | (244 << 8), /* first, last */
+ 0x9668, 0, 0, 0,
+ 0,0x9CD6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x98BD, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8FDC,0xFEF6,0x8FD9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9541, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x97F3,
+ /* plane 2, page 124 */
+ 18 | (18 << 8), /* first, last */
+ 0x9BF8,
+ /* plane 2, page 125 */
+ 47 | (220 << 8), /* first, last */
+ 0x9E6C, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8FF2,0x8FEE, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9CD7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9E6E, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8A40, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8FEF, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8FF4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8FF5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x95C2,
+ /* plane 2, page 126 */
+ 77 | (79 << 8), /* first, last */
+ 0x986A, 0,0x97CF,
+ /* plane 2, page 127 */
+ 249 | (249 << 8), /* first, last */
+ 0x9E7C,
+ /* plane 2, page 128 */
+ 2 | (244 << 8), /* first, last */
+ 0x9041, 0, 0, 0, 0, 0, 0,0x9CDB,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9441, 0, 0, 0, 0,0x9CE6,0x9DB0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9CEA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9CED, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CFA, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8B62,
+ 0x8A4E, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9CCA,0x8A66, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CFB,
+ /* plane 2, page 129 */
+ 46 | (188 << 8), /* first, last */
+ 0x9CFC, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9CFE,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8A53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9CE5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9D40, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9D41, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9045,
+ /* plane 2, page 130 */
+ 7 | (226 << 8), /* first, last */
+ 0x8B73, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x97CA, 0,0x9D42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x8A61, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8BAE, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8AD2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8BA2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9DF2,
+ /* plane 2, page 131 */
+ 6 | (138 << 8), /* first, last */
+ 0x9D43, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CDF, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9D44, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8ECA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x904E, 0, 0, 0, 0, 0, 0, 0,0x8EB3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9FF5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9D45,
+ /* plane 2, page 132 */
+ 18 | (130 << 8), /* first, last */
+ 0x904F, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9D47, 0, 0, 0,0x89CA, 0,
+ 0, 0, 0, 0, 0,0x9CB5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFBFE,
+ /* plane 2, page 133 */
+ 1 | (244 << 8), /* first, last */
+ 0x905E, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9063,0x9057, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9066, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9BC0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xFCE5,
+ /* plane 2, page 134 */
+ 0 | (230 << 8), /* first, last */
+ 0x9162, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9067, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8FA1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8FA2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9D48,0xFAD3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x905D, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x90B9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x906B,
+ /* plane 2, page 135 */
+ 15 | (19 << 8), /* first, last */
+ 0x8C5C, 0, 0, 0,0x9069,
+ /* plane 2, page 136 */
+ 4 | (43 << 8), /* first, last */
+ 0xFE57, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFE55,
+ /* plane 2, page 137 */
+ 51 | (252 << 8), /* first, last */
+ 0x9073, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9BEF,0x9CF0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9D4B, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFED9, 0, 0, 0,0xFEDA, 0, 0, 0,0x91E0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x91D8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9646, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9360, 0,
+ 0xFA53,0x9CD3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9D4E, 0, 0, 0,0xFB40, 0,
+ 0, 0,0x8DE2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9442, 0,0x9056, 0, 0,0x9865, 0,0x8C6C,0xFA4A, 0,
+ 0,0x9D50,0x9D52, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x95AF,
+ 0x975A,0x9349,0x9747,
+ /* plane 2, page 138 */
+ 15 | (252 << 8), /* first, last */
+ 0xA0F4, 0, 0, 0, 0,
+ 0, 0,0x9778, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8FCF, 0, 0,
+ 0,0xFC60, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8C4E, 0, 0, 0,0xFC56, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x91DC,0x9661,
+ 0x92EC,0x935D,0x8EDE,0x96FE,0xFD4F,0x95DE, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x98B0,
+ 0xA040, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x97BD,
+ 0x977D,0x97F5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9BAC,0xFADA,0x92C2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x97B1, 0, 0, 0, 0, 0,0x907B, 0,
+ 0, 0, 0,0x93FE,0x947B, 0,0x9777, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFABE,0xFD43,0x90C6,0x90A4,0x90A8,0x94A9, 0,0x90A9,
+ 0, 0, 0, 0,0x8C65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x95E0,
+ /* plane 2, page 139 */
+ 12 | (255 << 8), /* first, last */
+ 0x907D, 0, 0, 0, 0, 0, 0,0x9265,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFDBA,0x93C4, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFEED,0x9DAB,0xA0E3, 0,0x9648, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9D53, 0, 0, 0, 0, 0,0x8AA9, 0,0x9BC5, 0,
+ 0x965D, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x975F,
+ 0x965F,0x966E,0xFB5D, 0, 0, 0, 0, 0,0x9DB1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFEA3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9DB2, 0, 0,0x95AE,0xFCA3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xA0A2, 0, 0,0x9655, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9D54, 0, 0,0x9341, 0,0x95AD,0x91D5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x977A,0xFDFC,0x8E47,0x93FD,0x90A5,0x90AC, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x95AC, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x90AE,
+ /* plane 2, page 140 */
+ 3 | (210 << 8), /* first, last */
+ 0xFEA5, 0, 0, 0, 0, 0,0x9D56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x97E3,0x95E2,
+ 0, 0, 0, 0, 0,0x9466, 0, 0,0x9647, 0,
+ 0, 0, 0,0x91B8, 0, 0, 0, 0,0x9CEC, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x90AD, 0,0x95E3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8B4F, 0, 0,0x8AE3, 0, 0, 0, 0,
+ 0x8B4D,
+ /* plane 2, page 141 */
+ 52 | (185 << 8), /* first, last */
+ 0x95EA, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x8B4E, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8CC1,
+ /* plane 2, page 142 */
+ 15 | (231 << 8), /* first, last */
+ 0x8BED, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x91D9, 0, 0,0xA0A4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x95F5,0x95F4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9FB3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFEAF, 0, 0, 0, 0, 0,0xFE72,0x927A,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xFEAC, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x95F3,
+ /* plane 2, page 143 */
+ 197 | (197 << 8), /* first, last */
+ 0x9D58,
+ /* plane 2, page 144 */
+ 136 | (237 << 8), /* first, last */
+ 0x9372, 0, 0,0x91C5,
+ 0, 0, 0, 0, 0, 0, 0,0x9642, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x90CD,0x95FE,0x9159, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9C65, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x97CC,0x90CE,
+ 0, 0, 0, 0, 0, 0,0x9D59,0xFCF5,
+ /* plane 2, page 145 */
+ 13 | (235 << 8), /* first, last */
+ 0xFEFD, 0, 0,0x9D5B, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9D5C, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x937E, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x98AC, 0, 0,0x9D5E, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xFDD0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFD60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9CCF, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x90DD, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x90E0,
+ /* plane 2, page 146: --- */
+ /* plane 2, page 147: --- */
+ /* plane 2, page 148 */
+ 29 | (231 << 8), /* first, last */
+ 0x90F3,
+ 0, 0,0x98B1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x90F0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x93BD, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x95B7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9F46, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8E4B,0x9658, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8A4C,
+ 0,0x9D63,
+ /* plane 2, page 149 */
+ 158 | (244 << 8), /* first, last */
+ 0x9ECF, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9D65, 0, 0, 0,
+ 0, 0, 0, 0,0x9D66, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x965A, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9D64, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x8A6C,
+ /* plane 2, page 150: --- */
+ /* plane 2, page 151 */
+ 32 | (212 << 8), /* first, last */
+ 0x8AD9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9D67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8A70,
+ /* plane 2, page 152 */
+ 16 | (241 << 8), /* first, last */
+ 0x8BF3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9150, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9CC1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9D68,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x93A7, 0, 0, 0, 0, 0,
+ 0,0x9674,
+ /* plane 2, page 153 */
+ 3 | (201 << 8), /* first, last */
+ 0xA0EF, 0,0x9151, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x96C1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8C64,0x9676,0x9D69, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xFCA4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9D6A, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x924E, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9D6B, 0, 0, 0, 0,
+ 0,0x9BC1,
+ /* plane 2, page 154 */
+ 40 | (77 << 8), /* first, last */
+ 0x9D6C, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x8A65,
+ /* plane 2, page 155 */
+ 5 | (213 << 8), /* first, last */
+ 0x915D, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9D6D, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x915A,
+ /* plane 2, page 156 */
+ 115 | (173 << 8), /* first, last */
+ 0x8C42, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9CC0,
+ /* plane 2, page 157 */
+ 62 | (246 << 8), /* first, last */
+ 0x916A, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x9D6E, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9EA6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9DCD, 0, 0,0x9D6F, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x89BB,
+ /* plane 2, page 158 */
+ 6 | (248 << 8), /* first, last */
+ 0x9EF9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x96B4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9172, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9EC8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8B55, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9D71,
+ /* plane 2, page 159 */
+ 35 | (222 << 8), /* first, last */
+ 0x9D72, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x9ECC, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9174, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x9ED0,
+ /* plane 2, page 160 */
+ 20 | (254 << 8), /* first, last */
+ 0x905C, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x8ED2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x91A8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9177, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x96BF, 0, 0,
+ 0, 0, 0,0x96C0, 0, 0, 0, 0,0x8FB1, 0,
+ 0, 0, 0, 0,0x96B7,
+ /* plane 2, page 161 */
+ 7 | (245 << 8), /* first, last */
+ 0x8C55, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9178, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x89BE,0x917C, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xFB77, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0x9175,0x91A3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x9176, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x96BE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9179, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x96B6,
+ /* plane 2, page 162 */
+ 32 | (255 << 8), /* first, last */
+ 0x91A4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x91A6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0x9D75, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9052,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xA045, 0,
+ 0x91A9, 0,0x98AA, 0, 0, 0,0x8C5F, 0, 0,0x8BAA,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0x9CDD, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9D77,
+ /* plane 2, page 163 */
+ 169 | (169 << 8), /* first, last */
+ 0x8940,
+ /* plane 2, page 164 */
+ 52 | (91 << 8), /* first, last */
+ 0x9EEC, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x93AA,
+ /* plane 2, page 165 */
+ 198 | (203 << 8), /* first, last */
+ 0x9478, 0,
+ 0, 0, 0,0x9D7A,
+ /* plane 2, page 166 */
+ 1 | (169 << 8), /* first, last */
+ 0x8AC9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8B4B, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0x9FEC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0x8AE2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9E75,
+ /* plane 2, page 167: --- */
+ /* plane 2, page 168: --- */
+ /* plane 2, page 169: --- */
+ /* plane 2, page 170: --- */
+ /* plane 2, page 171: --- */
+ /* plane 2, page 172: --- */
+ /* plane 2, page 173: --- */
+ /* plane 2, page 174: --- */
+ /* plane 2, page 175: --- */
+ /* plane 2, page 176: --- */
+ /* plane 2, page 177: --- */
+ /* plane 2, page 178: --- */
+ /* plane 2, page 179: --- */
+ /* plane 2, page 180: --- */
+ /* plane 2, page 181: --- */
+ /* plane 2, page 182: --- */
+ /* plane 2, page 183: --- */
+ /* plane 2, page 184: --- */
+ /* plane 2, page 185: --- */
+ /* plane 2, page 186: --- */
+ /* plane 2, page 187: --- */
+ /* plane 2, page 188: --- */
+ /* plane 2, page 189: --- */
+ /* plane 2, page 190: --- */
+ /* plane 2, page 191: --- */
+ /* plane 2, page 192: --- */
+ /* plane 2, page 193: --- */
+ /* plane 2, page 194: --- */
+ /* plane 2, page 195: --- */
+ /* plane 2, page 196: --- */
+ /* plane 2, page 197: --- */
+ /* plane 2, page 198: --- */
+ /* plane 2, page 199: --- */
+ /* plane 2, page 200: --- */
+ /* plane 2, page 201: --- */
+ /* plane 2, page 202: --- */
+ /* plane 2, page 203: --- */
+ /* plane 2, page 204: --- */
+ /* plane 2, page 205: --- */
+ /* plane 2, page 206: --- */
+ /* plane 2, page 207: --- */
+ /* plane 2, page 208: --- */
+ /* plane 2, page 209: --- */
+ /* plane 2, page 210: --- */
+ /* plane 2, page 211: --- */
+ /* plane 2, page 212: --- */
+ /* plane 2, page 213: --- */
+ /* plane 2, page 214: --- */
+ /* plane 2, page 215: --- */
+ /* plane 2, page 216: --- */
+ /* plane 2, page 217: --- */
+ /* plane 2, page 218: --- */
+ /* plane 2, page 219: --- */
+ /* plane 2, page 220: --- */
+ /* plane 2, page 221: --- */
+ /* plane 2, page 222: --- */
+ /* plane 2, page 223: --- */
+ /* plane 2, page 224: --- */
+ /* plane 2, page 225: --- */
+ /* plane 2, page 226: --- */
+ /* plane 2, page 227: --- */
+ /* plane 2, page 228: --- */
+ /* plane 2, page 229: --- */
+ /* plane 2, page 230: --- */
+ /* plane 2, page 231: --- */
+ /* plane 2, page 232: --- */
+ /* plane 2, page 233: --- */
+ /* plane 2, page 234: --- */
+ /* plane 2, page 235: --- */
+ /* plane 2, page 236: --- */
+ /* plane 2, page 237: --- */
+ /* plane 2, page 238: --- */
+ /* plane 2, page 239: --- */
+ /* plane 2, page 240: --- */
+ /* plane 2, page 241: --- */
+ /* plane 2, page 242: --- */
+ /* plane 2, page 243: --- */
+ /* plane 2, page 244: --- */
+ /* plane 2, page 245: --- */
+ /* plane 2, page 246: --- */
+ /* plane 2, page 247: --- */
+ /* plane 2, page 248 */
+ 37 | (205 << 8), /* first, last */
+ 0x9874, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AC8,
+ 0, 0, 0, 0,0xA047, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x8BC3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xFC48, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xFC77, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0x9C52,
+ /* plane 2, page 249 */
+ 148 | (212 << 8), /* first, last */
+ 0x8EFD, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x8FA8, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0x957A, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0x8FF0,
+ /* plane 2, page 250: --- */
+ /* plane 2, page 251: --- */
+ /* plane 2, page 252: --- */
+ /* plane 2, page 253: --- */
+ /* plane 2, page 254: --- */
+ /* plane 2, page 255: --- */
+ /* plane 3: --- */
+ /* plane 4: --- */
+ /* plane 5: --- */
+ /* plane 6: --- */
+ /* plane 7: --- */
+ /* plane 8: --- */
+ /* plane 9: --- */
+ /* plane 10: --- */
+ /* plane 11: --- */
+ /* plane 12: --- */
+ /* plane 13: --- */
+ /* plane 14: --- */
+ /* plane 15: --- */
+ /* plane 16: --- */
+};
+
+sal_Int32 const aImplUnicodeToBig5Hkscs2001PageOffsets[] = {
+ 0, /* plane 0, page 0; 44/172 bytes (25.6%) */
+ 86, /* plane 0, page 1; 46/444 bytes (10.4%) */
+ 308, /* plane 0, page 2; 22/240 bytes (9.2%) */
+ -1, /* plane 0, page 3 */
+ 428, /* plane 0, page 4; 134/164 bytes (81.7%) */
+ -1, /* plane 0, page 5 */
+ -1, /* plane 0, page 6 */
+ -1, /* plane 0, page 7 */
+ -1, /* plane 0, page 8 */
+ -1, /* plane 0, page 9 */
+ -1, /* plane 0, page 10 */
+ -1, /* plane 0, page 11 */
+ -1, /* plane 0, page 12 */
+ -1, /* plane 0, page 13 */
+ -1, /* plane 0, page 14 */
+ -1, /* plane 0, page 15 */
+ -1, /* plane 0, page 16 */
+ -1, /* plane 0, page 17 */
+ -1, /* plane 0, page 18 */
+ -1, /* plane 0, page 19 */
+ -1, /* plane 0, page 20 */
+ -1, /* plane 0, page 21 */
+ -1, /* plane 0, page 22 */
+ -1, /* plane 0, page 23 */
+ -1, /* plane 0, page 24 */
+ -1, /* plane 0, page 25 */
+ -1, /* plane 0, page 26 */
+ -1, /* plane 0, page 27 */
+ -1, /* plane 0, page 28 */
+ -1, /* plane 0, page 29 */
+ 510, /* plane 0, page 30; 10/10 bytes (100.0%) */
+ -1, /* plane 0, page 31 */
+ -1, /* plane 0, page 32 */
+ 515, /* plane 0, page 33; 32/422 bytes (7.6%) */
+ -1, /* plane 0, page 34 */
+ -1, /* plane 0, page 35 */
+ 726, /* plane 0, page 36; 42/62 bytes (67.7%) */
+ 757, /* plane 0, page 37; 68/68 bytes (100.0%) */
+ -1, /* plane 0, page 38 */
+ 791, /* plane 0, page 39; 4/4 bytes (100.0%) */
+ -1, /* plane 0, page 40 */
+ -1, /* plane 0, page 41 */
+ -1, /* plane 0, page 42 */
+ -1, /* plane 0, page 43 */
+ -1, /* plane 0, page 44 */
+ -1, /* plane 0, page 45 */
+ 793, /* plane 0, page 46; 58/202 bytes (28.7%) */
+ 894, /* plane 0, page 47; 4/4 bytes (100.0%) */
+ 896, /* plane 0, page 48; 360/502 bytes (71.7%) */
+ -1, /* plane 0, page 49 */
+ 1147, /* plane 0, page 50; 4/4 bytes (100.0%) */
+ -1, /* plane 0, page 51 */
+ 1149, /* plane 0, page 52; 38/400 bytes (9.5%) */
+ 1349, /* plane 0, page 53; 66/500 bytes (13.2%) */
+ 1599, /* plane 0, page 54; 80/476 bytes (16.8%) */
+ 1837, /* plane 0, page 55; 54/504 bytes (10.7%) */
+ 2089, /* plane 0, page 56; 26/474 bytes (5.5%) */
+ 2326, /* plane 0, page 57; 48/496 bytes (9.7%) */
+ 2574, /* plane 0, page 58; 48/504 bytes (9.5%) */
+ 2826, /* plane 0, page 59; 54/464 bytes (11.6%) */
+ 3058, /* plane 0, page 60; 28/456 bytes (6.1%) */
+ 3286, /* plane 0, page 61; 76/472 bytes (16.1%) */
+ 3522, /* plane 0, page 62; 72/502 bytes (14.3%) */
+ 3773, /* plane 0, page 63; 36/504 bytes (7.1%) */
+ 4025, /* plane 0, page 64; 40/496 bytes (8.1%) */
+ 4273, /* plane 0, page 65; 36/496 bytes (7.3%) */
+ 4521, /* plane 0, page 66; 34/474 bytes (7.2%) */
+ 4758, /* plane 0, page 67; 20/402 bytes (5.0%) */
+ 4959, /* plane 0, page 68; 48/490 bytes (9.8%) */
+ 5204, /* plane 0, page 69; 46/464 bytes (9.9%) */
+ 5436, /* plane 0, page 70; 22/482 bytes (4.6%) */
+ 5677, /* plane 0, page 71; 22/454 bytes (4.8%) */
+ 5904, /* plane 0, page 72; 28/504 bytes (5.6%) */
+ 6156, /* plane 0, page 73; 44/454 bytes (9.7%) */
+ 6383, /* plane 0, page 74; 22/484 bytes (4.5%) */
+ 6625, /* plane 0, page 75; 40/356 bytes (11.2%) */
+ 6803, /* plane 0, page 76; 34/470 bytes (7.2%) */
+ 7038, /* plane 0, page 77; 12/298 bytes (4.0%) */
+ 7187, /* plane 0, page 78; 74/492 bytes (15.0%) */
+ 7433, /* plane 0, page 79; 54/504 bytes (10.7%) */
+ 7685, /* plane 0, page 80; 44/502 bytes (8.8%) */
+ 7936, /* plane 0, page 81; 80/510 bytes (15.7%) */
+ 8191, /* plane 0, page 82; 64/498 bytes (12.9%) */
+ 8440, /* plane 0, page 83; 90/510 bytes (17.6%) */
+ 8695, /* plane 0, page 84; 68/444 bytes (15.3%) */
+ 8917, /* plane 0, page 85; 78/502 bytes (15.5%) */
+ 9168, /* plane 0, page 86; 80/500 bytes (16.0%) */
+ 9418, /* plane 0, page 87; 74/512 bytes (14.5%) */
+ 9674, /* plane 0, page 88; 64/500 bytes (12.8%) */
+ 9924, /* plane 0, page 89; 56/498 bytes (11.2%) */
+ 10173, /* plane 0, page 90; 86/508 bytes (16.9%) */
+ 10427, /* plane 0, page 91; 60/488 bytes (12.3%) */
+ 10671, /* plane 0, page 92; 50/484 bytes (10.3%) */
+ 10913, /* plane 0, page 93; 52/462 bytes (11.3%) */
+ 11144, /* plane 0, page 94; 44/490 bytes (9.0%) */
+ 11389, /* plane 0, page 95; 46/426 bytes (10.8%) */
+ 11602, /* plane 0, page 96; 40/440 bytes (9.1%) */
+ 11822, /* plane 0, page 97; 58/442 bytes (13.1%) */
+ 12043, /* plane 0, page 98; 34/374 bytes (9.1%) */
+ 12230, /* plane 0, page 99; 42/464 bytes (9.1%) */
+ 12462, /* plane 0, page 100; 42/458 bytes (9.2%) */
+ 12691, /* plane 0, page 101; 48/494 bytes (9.7%) */
+ 12938, /* plane 0, page 102; 54/438 bytes (12.3%) */
+ 13157, /* plane 0, page 103; 48/508 bytes (9.4%) */
+ 13411, /* plane 0, page 104; 60/408 bytes (14.7%) */
+ 13615, /* plane 0, page 105; 72/504 bytes (14.3%) */
+ 13867, /* plane 0, page 106; 76/490 bytes (15.5%) */
+ 14112, /* plane 0, page 107; 30/494 bytes (6.1%) */
+ 14359, /* plane 0, page 108; 50/458 bytes (10.9%) */
+ 14588, /* plane 0, page 109; 40/508 bytes (7.9%) */
+ 14842, /* plane 0, page 110; 56/500 bytes (11.2%) */
+ 15092, /* plane 0, page 111; 52/492 bytes (10.6%) */
+ 15338, /* plane 0, page 112; 80/506 bytes (15.8%) */
+ 15591, /* plane 0, page 113; 84/486 bytes (17.3%) */
+ 15834, /* plane 0, page 114; 52/456 bytes (11.4%) */
+ 16062, /* plane 0, page 115; 76/502 bytes (15.1%) */
+ 16313, /* plane 0, page 116; 96/496 bytes (19.4%) */
+ 16561, /* plane 0, page 117; 62/434 bytes (14.3%) */
+ 16778, /* plane 0, page 118; 50/434 bytes (11.5%) */
+ 16995, /* plane 0, page 119; 56/488 bytes (11.5%) */
+ 17239, /* plane 0, page 120; 70/478 bytes (14.6%) */
+ 17478, /* plane 0, page 121; 62/480 bytes (12.9%) */
+ 17718, /* plane 0, page 122; 64/500 bytes (12.8%) */
+ 17968, /* plane 0, page 123; 48/486 bytes (9.9%) */
+ 18211, /* plane 0, page 124; 76/472 bytes (16.1%) */
+ 18447, /* plane 0, page 125; 46/438 bytes (10.5%) */
+ 18666, /* plane 0, page 126; 36/436 bytes (8.3%) */
+ 18884, /* plane 0, page 127; 42/492 bytes (8.5%) */
+ 19130, /* plane 0, page 128; 56/492 bytes (11.4%) */
+ 19376, /* plane 0, page 129; 62/490 bytes (12.7%) */
+ 19621, /* plane 0, page 130; 60/466 bytes (12.9%) */
+ 19854, /* plane 0, page 131; 40/456 bytes (8.8%) */
+ 20082, /* plane 0, page 132; 78/490 bytes (15.9%) */
+ 20327, /* plane 0, page 133; 44/502 bytes (8.8%) */
+ 20578, /* plane 0, page 134; 38/478 bytes (7.9%) */
+ 20817, /* plane 0, page 135; 32/270 bytes (11.9%) */
+ 20952, /* plane 0, page 136; 62/506 bytes (12.3%) */
+ 21205, /* plane 0, page 137; 44/466 bytes (9.4%) */
+ 21438, /* plane 0, page 138; 34/416 bytes (8.2%) */
+ 21646, /* plane 0, page 139; 36/432 bytes (8.3%) */
+ 21862, /* plane 0, page 140; 26/336 bytes (7.7%) */
+ 22030, /* plane 0, page 141; 32/422 bytes (7.6%) */
+ 22241, /* plane 0, page 142; 56/486 bytes (11.5%) */
+ 22484, /* plane 0, page 143; 62/452 bytes (13.7%) */
+ 22710, /* plane 0, page 144; 28/380 bytes (7.4%) */
+ 22900, /* plane 0, page 145; 42/350 bytes (12.0%) */
+ 23075, /* plane 0, page 146; 82/494 bytes (16.6%) */
+ 23322, /* plane 0, page 147; 92/486 bytes (18.9%) */
+ 23565, /* plane 0, page 148; 62/494 bytes (12.6%) */
+ 23812, /* plane 0, page 149; 32/402 bytes (8.0%) */
+ 24013, /* plane 0, page 150; 34/434 bytes (7.8%) */
+ 24230, /* plane 0, page 151; 70/488 bytes (14.3%) */
+ 24474, /* plane 0, page 152; 60/454 bytes (13.2%) */
+ 24701, /* plane 0, page 153; 54/466 bytes (11.6%) */
+ 24934, /* plane 0, page 154; 46/490 bytes (9.4%) */
+ 25179, /* plane 0, page 155; 60/510 bytes (11.8%) */
+ 25434, /* plane 0, page 156; 40/248 bytes (16.1%) */
+ 25558, /* plane 0, page 157; 52/504 bytes (10.3%) */
+ 25810, /* plane 0, page 158; 68/492 bytes (13.8%) */
+ 26056, /* plane 0, page 159; 38/330 bytes (11.5%) */
+ -1, /* plane 0, page 160 */
+ -1, /* plane 0, page 161 */
+ -1, /* plane 0, page 162 */
+ -1, /* plane 0, page 163 */
+ -1, /* plane 0, page 164 */
+ -1, /* plane 0, page 165 */
+ -1, /* plane 0, page 166 */
+ -1, /* plane 0, page 167 */
+ -1, /* plane 0, page 168 */
+ -1, /* plane 0, page 169 */
+ -1, /* plane 0, page 170 */
+ -1, /* plane 0, page 171 */
+ -1, /* plane 0, page 172 */
+ -1, /* plane 0, page 173 */
+ -1, /* plane 0, page 174 */
+ -1, /* plane 0, page 175 */
+ -1, /* plane 0, page 176 */
+ -1, /* plane 0, page 177 */
+ -1, /* plane 0, page 178 */
+ -1, /* plane 0, page 179 */
+ -1, /* plane 0, page 180 */
+ -1, /* plane 0, page 181 */
+ -1, /* plane 0, page 182 */
+ -1, /* plane 0, page 183 */
+ -1, /* plane 0, page 184 */
+ -1, /* plane 0, page 185 */
+ -1, /* plane 0, page 186 */
+ -1, /* plane 0, page 187 */
+ -1, /* plane 0, page 188 */
+ -1, /* plane 0, page 189 */
+ -1, /* plane 0, page 190 */
+ -1, /* plane 0, page 191 */
+ -1, /* plane 0, page 192 */
+ -1, /* plane 0, page 193 */
+ -1, /* plane 0, page 194 */
+ -1, /* plane 0, page 195 */
+ -1, /* plane 0, page 196 */
+ -1, /* plane 0, page 197 */
+ -1, /* plane 0, page 198 */
+ -1, /* plane 0, page 199 */
+ -1, /* plane 0, page 200 */
+ -1, /* plane 0, page 201 */
+ -1, /* plane 0, page 202 */
+ -1, /* plane 0, page 203 */
+ -1, /* plane 0, page 204 */
+ -1, /* plane 0, page 205 */
+ -1, /* plane 0, page 206 */
+ -1, /* plane 0, page 207 */
+ -1, /* plane 0, page 208 */
+ -1, /* plane 0, page 209 */
+ -1, /* plane 0, page 210 */
+ -1, /* plane 0, page 211 */
+ -1, /* plane 0, page 212 */
+ -1, /* plane 0, page 213 */
+ -1, /* plane 0, page 214 */
+ -1, /* plane 0, page 215 */
+ -1, /* plane 0, page 216 */
+ -1, /* plane 0, page 217 */
+ -1, /* plane 0, page 218 */
+ -1, /* plane 0, page 219 */
+ -1, /* plane 0, page 220 */
+ -1, /* plane 0, page 221 */
+ -1, /* plane 0, page 222 */
+ -1, /* plane 0, page 223 */
+ 26221, /* plane 0, page 224; 234/510 bytes (45.9%) */
+ 26476, /* plane 0, page 225; 246/506 bytes (48.6%) */
+ 26729, /* plane 0, page 226; 232/514 bytes (45.1%) */
+ 26986, /* plane 0, page 227; 244/514 bytes (47.5%) */
+ 27243, /* plane 0, page 228; 238/502 bytes (47.4%) */
+ 27494, /* plane 0, page 229; 284/512 bytes (55.5%) */
+ 27750, /* plane 0, page 230; 304/514 bytes (59.1%) */
+ 28007, /* plane 0, page 231; 272/514 bytes (52.9%) */
+ 28264, /* plane 0, page 232; 294/512 bytes (57.4%) */
+ 28520, /* plane 0, page 233; 244/512 bytes (47.7%) */
+ 28776, /* plane 0, page 234; 160/508 bytes (31.5%) */
+ 29030, /* plane 0, page 235; 366/514 bytes (71.2%) */
+ 29287, /* plane 0, page 236; 288/508 bytes (56.7%) */
+ 29541, /* plane 0, page 237; 196/486 bytes (40.3%) */
+ 29784, /* plane 0, page 238; 106/354 bytes (29.9%) */
+ -1, /* plane 0, page 239 */
+ -1, /* plane 0, page 240 */
+ -1, /* plane 0, page 241 */
+ -1, /* plane 0, page 242 */
+ 29961, /* plane 0, page 243; 78/504 bytes (15.5%) */
+ 30213, /* plane 0, page 244; 330/508 bytes (65.0%) */
+ 30467, /* plane 0, page 245; 222/482 bytes (46.1%) */
+ 30708, /* plane 0, page 246; 94/374 bytes (25.1%) */
+ 30895, /* plane 0, page 247; 16/22 bytes (72.7%) */
+ 30906, /* plane 0, page 248; 58/58 bytes (100.0%) */
+ 30935, /* plane 0, page 249; 4/4 bytes (100.0%) */
+ -1, /* plane 0, page 250 */
+ -1, /* plane 0, page 251 */
+ -1, /* plane 0, page 252 */
+ -1, /* plane 0, page 253 */
+ -1, /* plane 0, page 254 */
+ 30937, /* plane 0, page 255; 16/474 bytes (3.4%) */
+ /* plane 1: --- */
+ 31174, /* plane 2, page 0; 32/414 bytes (7.7%) */
+ 31381, /* plane 2, page 1; 18/464 bytes (3.9%) */
+ 31613, /* plane 2, page 2; 28/454 bytes (6.2%) */
+ 31840, /* plane 2, page 3; 34/488 bytes (7.0%) */
+ 32084, /* plane 2, page 4; 26/474 bytes (5.5%) */
+ 32321, /* plane 2, page 5; 24/332 bytes (7.2%) */
+ 32487, /* plane 2, page 6; 16/206 bytes (7.8%) */
+ 32590, /* plane 2, page 7; 8/218 bytes (3.7%) */
+ 32699, /* plane 2, page 8; 8/342 bytes (2.3%) */
+ 32870, /* plane 2, page 9; 12/422 bytes (2.8%) */
+ 33081, /* plane 2, page 10; 12/380 bytes (3.2%) */
+ 33271, /* plane 2, page 11; 24/488 bytes (4.9%) */
+ 33515, /* plane 2, page 12; 56/492 bytes (11.4%) */
+ 33761, /* plane 2, page 13; 46/362 bytes (12.7%) */
+ 33942, /* plane 2, page 14; 74/498 bytes (14.9%) */
+ 34191, /* plane 2, page 15; 44/420 bytes (10.5%) */
+ 34401, /* plane 2, page 16; 56/456 bytes (12.3%) */
+ 34629, /* plane 2, page 17; 20/344 bytes (5.8%) */
+ 34801, /* plane 2, page 18; 18/392 bytes (4.6%) */
+ 34997, /* plane 2, page 19; 32/508 bytes (6.3%) */
+ 35251, /* plane 2, page 20; 26/472 bytes (5.5%) */
+ 35487, /* plane 2, page 21; 8/66 bytes (12.1%) */
+ 35520, /* plane 2, page 22; 44/492 bytes (8.9%) */
+ 35766, /* plane 2, page 23; 76/482 bytes (15.8%) */
+ 36007, /* plane 2, page 24; 70/440 bytes (15.9%) */
+ 36227, /* plane 2, page 25; 44/484 bytes (9.1%) */
+ 36469, /* plane 2, page 26; 10/64 bytes (15.6%) */
+ 36501, /* plane 2, page 27; 8/256 bytes (3.1%) */
+ 36629, /* plane 2, page 28; 12/264 bytes (4.5%) */
+ 36761, /* plane 2, page 29; 18/362 bytes (5.0%) */
+ 36942, /* plane 2, page 30; 18/374 bytes (4.8%) */
+ 37129, /* plane 2, page 31; 14/438 bytes (3.2%) */
+ 37348, /* plane 2, page 32; 14/370 bytes (3.8%) */
+ 37533, /* plane 2, page 33; 14/310 bytes (4.5%) */
+ 37688, /* plane 2, page 34; 6/236 bytes (2.5%) */
+ 37806, /* plane 2, page 35; 14/438 bytes (3.2%) */
+ 38025, /* plane 2, page 36; 14/276 bytes (5.1%) */
+ 38163, /* plane 2, page 37; 16/346 bytes (4.6%) */
+ 38336, /* plane 2, page 38; 22/442 bytes (5.0%) */
+ 38557, /* plane 2, page 39; 22/378 bytes (5.8%) */
+ 38746, /* plane 2, page 40; 16/492 bytes (3.3%) */
+ 38992, /* plane 2, page 41; 16/222 bytes (7.2%) */
+ 39103, /* plane 2, page 42; 12/264 bytes (4.5%) */
+ 39235, /* plane 2, page 43; 16/388 bytes (4.1%) */
+ 39429, /* plane 2, page 44; 34/330 bytes (10.3%) */
+ 39594, /* plane 2, page 45; 28/466 bytes (6.0%) */
+ 39827, /* plane 2, page 46; 16/456 bytes (3.5%) */
+ 40055, /* plane 2, page 47; 8/226 bytes (3.5%) */
+ 40168, /* plane 2, page 48; 22/338 bytes (6.5%) */
+ 40337, /* plane 2, page 49; 26/496 bytes (5.2%) */
+ 40585, /* plane 2, page 50; 36/424 bytes (8.5%) */
+ 40797, /* plane 2, page 51; 26/512 bytes (5.1%) */
+ 41053, /* plane 2, page 52; 14/462 bytes (3.0%) */
+ 41284, /* plane 2, page 53; 24/440 bytes (5.5%) */
+ 41504, /* plane 2, page 54; 26/480 bytes (5.4%) */
+ 41744, /* plane 2, page 55; 30/428 bytes (7.0%) */
+ 41958, /* plane 2, page 56; 4/4 bytes (100.0%) */
+ 41960, /* plane 2, page 57; 4/4 bytes (100.0%) */
+ 41962, /* plane 2, page 58; 10/170 bytes (5.9%) */
+ 42047, /* plane 2, page 59; 4/4 bytes (100.0%) */
+ 42049, /* plane 2, page 60; 28/316 bytes (8.9%) */
+ 42207, /* plane 2, page 61; 30/372 bytes (8.1%) */
+ 42393, /* plane 2, page 62; 44/474 bytes (9.3%) */
+ 42630, /* plane 2, page 63; 38/378 bytes (10.1%) */
+ 42819, /* plane 2, page 64; 30/420 bytes (7.1%) */
+ 43029, /* plane 2, page 65; 46/500 bytes (9.2%) */
+ 43279, /* plane 2, page 66; 34/450 bytes (7.6%) */
+ 43504, /* plane 2, page 67; 36/474 bytes (7.6%) */
+ 43741, /* plane 2, page 68; 28/424 bytes (6.6%) */
+ 43953, /* plane 2, page 69; 10/394 bytes (2.5%) */
+ 44150, /* plane 2, page 70; 14/380 bytes (3.7%) */
+ 44340, /* plane 2, page 71; 12/440 bytes (2.7%) */
+ 44560, /* plane 2, page 72; 22/478 bytes (4.6%) */
+ 44799, /* plane 2, page 73; 116/506 bytes (22.9%) */
+ 45052, /* plane 2, page 74; 108/442 bytes (24.4%) */
+ 45273, /* plane 2, page 75; 6/274 bytes (2.2%) */
+ 45410, /* plane 2, page 76; 12/420 bytes (2.9%) */
+ 45620, /* plane 2, page 77; 12/462 bytes (2.6%) */
+ 45851, /* plane 2, page 78; 10/220 bytes (4.5%) */
+ 45961, /* plane 2, page 79; 20/364 bytes (5.5%) */
+ 46143, /* plane 2, page 80; 8/230 bytes (3.5%) */
+ 46258, /* plane 2, page 81; 18/380 bytes (4.7%) */
+ 46448, /* plane 2, page 82; 14/372 bytes (3.8%) */
+ 46634, /* plane 2, page 83; 8/14 bytes (57.1%) */
+ 46641, /* plane 2, page 84; 16/174 bytes (9.2%) */
+ 46728, /* plane 2, page 85; 36/354 bytes (10.2%) */
+ 46905, /* plane 2, page 86; 16/486 bytes (3.3%) */
+ 47148, /* plane 2, page 87; 20/442 bytes (4.5%) */
+ 47369, /* plane 2, page 88; 12/280 bytes (4.3%) */
+ 47509, /* plane 2, page 89; 12/406 bytes (3.0%) */
+ 47712, /* plane 2, page 90; 12/172 bytes (7.0%) */
+ 47798, /* plane 2, page 91; 16/236 bytes (6.8%) */
+ 47916, /* plane 2, page 92; 22/510 bytes (4.3%) */
+ 48171, /* plane 2, page 93; 8/74 bytes (10.8%) */
+ 48208, /* plane 2, page 94; 20/408 bytes (4.9%) */
+ 48412, /* plane 2, page 95; 10/404 bytes (2.5%) */
+ 48614, /* plane 2, page 96; 16/252 bytes (6.3%) */
+ 48740, /* plane 2, page 97; 22/442 bytes (5.0%) */
+ 48961, /* plane 2, page 98; 12/244 bytes (4.9%) */
+ 49083, /* plane 2, page 99; 16/394 bytes (4.1%) */
+ 49280, /* plane 2, page 100; 24/304 bytes (7.9%) */
+ 49432, /* plane 2, page 101; 12/350 bytes (3.4%) */
+ 49607, /* plane 2, page 102; 18/472 bytes (3.8%) */
+ 49843, /* plane 2, page 103; 14/368 bytes (3.8%) */
+ 50027, /* plane 2, page 104; 18/346 bytes (5.2%) */
+ 50200, /* plane 2, page 105; 20/476 bytes (4.2%) */
+ 50438, /* plane 2, page 106; 14/78 bytes (17.9%) */
+ 50477, /* plane 2, page 107; 38/488 bytes (7.8%) */
+ 50721, /* plane 2, page 108; 30/356 bytes (8.4%) */
+ 50899, /* plane 2, page 109; 50/416 bytes (12.0%) */
+ 51107, /* plane 2, page 110; 44/434 bytes (10.1%) */
+ 51324, /* plane 2, page 111; 18/374 bytes (4.8%) */
+ 51511, /* plane 2, page 112; 22/472 bytes (4.7%) */
+ 51747, /* plane 2, page 113; 20/396 bytes (5.1%) */
+ 51945, /* plane 2, page 114; 16/410 bytes (3.9%) */
+ 52150, /* plane 2, page 115; 4/4 bytes (100.0%) */
+ 52152, /* plane 2, page 116; 10/204 bytes (4.9%) */
+ 52254, /* plane 2, page 117; 14/280 bytes (5.0%) */
+ 52394, /* plane 2, page 118; 18/286 bytes (6.3%) */
+ 52537, /* plane 2, page 119; 18/382 bytes (4.7%) */
+ 52728, /* plane 2, page 120; 12/228 bytes (5.3%) */
+ 52842, /* plane 2, page 121; 14/438 bytes (3.2%) */
+ 53061, /* plane 2, page 122; 22/472 bytes (4.7%) */
+ 53297, /* plane 2, page 123; 18/480 bytes (3.8%) */
+ 53537, /* plane 2, page 124; 4/4 bytes (100.0%) */
+ 53539, /* plane 2, page 125; 22/350 bytes (6.3%) */
+ 53714, /* plane 2, page 126; 6/8 bytes (75.0%) */
+ 53718, /* plane 2, page 127; 4/4 bytes (100.0%) */
+ 53720, /* plane 2, page 128; 28/488 bytes (5.7%) */
+ 53964, /* plane 2, page 129; 16/288 bytes (5.6%) */
+ 54108, /* plane 2, page 130; 18/442 bytes (4.1%) */
+ 54329, /* plane 2, page 131; 18/268 bytes (6.7%) */
+ 54463, /* plane 2, page 132; 12/228 bytes (5.3%) */
+ 54577, /* plane 2, page 133; 14/490 bytes (2.9%) */
+ 54822, /* plane 2, page 134; 20/464 bytes (4.3%) */
+ 55054, /* plane 2, page 135; 6/12 bytes (50.0%) */
+ 55060, /* plane 2, page 136; 6/82 bytes (7.3%) */
+ 55101, /* plane 2, page 137; 54/406 bytes (13.3%) */
+ 55304, /* plane 2, page 138; 74/478 bytes (15.5%) */
+ 55543, /* plane 2, page 139; 72/490 bytes (14.7%) */
+ 55788, /* plane 2, page 140; 28/418 bytes (6.7%) */
+ 55997, /* plane 2, page 141; 8/270 bytes (3.0%) */
+ 56132, /* plane 2, page 142; 24/436 bytes (5.5%) */
+ 56350, /* plane 2, page 143; 4/4 bytes (100.0%) */
+ 56352, /* plane 2, page 144; 24/206 bytes (11.7%) */
+ 56455, /* plane 2, page 145; 24/448 bytes (5.4%) */
+ -1, /* plane 2, page 146 */
+ -1, /* plane 2, page 147 */
+ 56679, /* plane 2, page 148; 22/408 bytes (5.4%) */
+ 56883, /* plane 2, page 149; 14/176 bytes (8.0%) */
+ -1, /* plane 2, page 150 */
+ 56971, /* plane 2, page 151; 8/364 bytes (2.2%) */
+ 57153, /* plane 2, page 152; 14/454 bytes (3.1%) */
+ 57380, /* plane 2, page 153; 24/400 bytes (6.0%) */
+ 57580, /* plane 2, page 154; 6/78 bytes (7.7%) */
+ 57619, /* plane 2, page 155; 8/420 bytes (1.9%) */
+ 57829, /* plane 2, page 156; 6/120 bytes (5.0%) */
+ 57889, /* plane 2, page 157; 14/372 bytes (3.8%) */
+ 58075, /* plane 2, page 158; 14/488 bytes (2.9%) */
+ 58319, /* plane 2, page 159; 10/378 bytes (2.6%) */
+ 58508, /* plane 2, page 160; 18/472 bytes (3.8%) */
+ 58744, /* plane 2, page 161; 24/480 bytes (5.0%) */
+ 58984, /* plane 2, page 162; 24/450 bytes (5.3%) */
+ 59209, /* plane 2, page 163; 4/4 bytes (100.0%) */
+ 59211, /* plane 2, page 164; 6/82 bytes (7.3%) */
+ 59252, /* plane 2, page 165; 6/14 bytes (42.9%) */
+ 59259, /* plane 2, page 166; 12/340 bytes (3.5%) */
+ -1, /* plane 2, page 167 */
+ -1, /* plane 2, page 168 */
+ -1, /* plane 2, page 169 */
+ -1, /* plane 2, page 170 */
+ -1, /* plane 2, page 171 */
+ -1, /* plane 2, page 172 */
+ -1, /* plane 2, page 173 */
+ -1, /* plane 2, page 174 */
+ -1, /* plane 2, page 175 */
+ -1, /* plane 2, page 176 */
+ -1, /* plane 2, page 177 */
+ -1, /* plane 2, page 178 */
+ -1, /* plane 2, page 179 */
+ -1, /* plane 2, page 180 */
+ -1, /* plane 2, page 181 */
+ -1, /* plane 2, page 182 */
+ -1, /* plane 2, page 183 */
+ -1, /* plane 2, page 184 */
+ -1, /* plane 2, page 185 */
+ -1, /* plane 2, page 186 */
+ -1, /* plane 2, page 187 */
+ -1, /* plane 2, page 188 */
+ -1, /* plane 2, page 189 */
+ -1, /* plane 2, page 190 */
+ -1, /* plane 2, page 191 */
+ -1, /* plane 2, page 192 */
+ -1, /* plane 2, page 193 */
+ -1, /* plane 2, page 194 */
+ -1, /* plane 2, page 195 */
+ -1, /* plane 2, page 196 */
+ -1, /* plane 2, page 197 */
+ -1, /* plane 2, page 198 */
+ -1, /* plane 2, page 199 */
+ -1, /* plane 2, page 200 */
+ -1, /* plane 2, page 201 */
+ -1, /* plane 2, page 202 */
+ -1, /* plane 2, page 203 */
+ -1, /* plane 2, page 204 */
+ -1, /* plane 2, page 205 */
+ -1, /* plane 2, page 206 */
+ -1, /* plane 2, page 207 */
+ -1, /* plane 2, page 208 */
+ -1, /* plane 2, page 209 */
+ -1, /* plane 2, page 210 */
+ -1, /* plane 2, page 211 */
+ -1, /* plane 2, page 212 */
+ -1, /* plane 2, page 213 */
+ -1, /* plane 2, page 214 */
+ -1, /* plane 2, page 215 */
+ -1, /* plane 2, page 216 */
+ -1, /* plane 2, page 217 */
+ -1, /* plane 2, page 218 */
+ -1, /* plane 2, page 219 */
+ -1, /* plane 2, page 220 */
+ -1, /* plane 2, page 221 */
+ -1, /* plane 2, page 222 */
+ -1, /* plane 2, page 223 */
+ -1, /* plane 2, page 224 */
+ -1, /* plane 2, page 225 */
+ -1, /* plane 2, page 226 */
+ -1, /* plane 2, page 227 */
+ -1, /* plane 2, page 228 */
+ -1, /* plane 2, page 229 */
+ -1, /* plane 2, page 230 */
+ -1, /* plane 2, page 231 */
+ -1, /* plane 2, page 232 */
+ -1, /* plane 2, page 233 */
+ -1, /* plane 2, page 234 */
+ -1, /* plane 2, page 235 */
+ -1, /* plane 2, page 236 */
+ -1, /* plane 2, page 237 */
+ -1, /* plane 2, page 238 */
+ -1, /* plane 2, page 239 */
+ -1, /* plane 2, page 240 */
+ -1, /* plane 2, page 241 */
+ -1, /* plane 2, page 242 */
+ -1, /* plane 2, page 243 */
+ -1, /* plane 2, page 244 */
+ -1, /* plane 2, page 245 */
+ -1, /* plane 2, page 246 */
+ -1, /* plane 2, page 247 */
+ 59429, /* plane 2, page 248; 16/340 bytes (4.7%) */
+ 59599, /* plane 2, page 249; 10/132 bytes (7.6%) */
+ -1, /* plane 2, page 250 */
+ -1, /* plane 2, page 251 */
+ -1, /* plane 2, page 252 */
+ -1, /* plane 2, page 253 */
+ -1, /* plane 2, page 254 */
+ -1, /* plane 2, page 255 */
+ /* plane 3: --- */
+ /* plane 4: --- */
+ /* plane 5: --- */
+ /* plane 6: --- */
+ /* plane 7: --- */
+ /* plane 8: --- */
+ /* plane 9: --- */
+ /* plane 10: --- */
+ /* plane 11: --- */
+ /* plane 12: --- */
+ /* plane 13: --- */
+ /* plane 14: --- */
+ /* plane 15: --- */
+ /* plane 16: --- */
+};
+
+sal_Int32 const aImplUnicodeToBig5Hkscs2001PlaneOffsets[] = {
+ 0 * 256, /* plane 0; 576/1024 bytes (56.3%), 11016/62348 bytes (17.7%) */
+ -1, /* plane 1 */
+ 1 * 256, /* plane 2; 664/1024 bytes (64.8%), 3634/56982 bytes (6.4%) */
+ -1, /* plane 3 */
+ -1, /* plane 4 */
+ -1, /* plane 5 */
+ -1, /* plane 6 */
+ -1, /* plane 7 */
+ -1, /* plane 8 */
+ -1, /* plane 9 */
+ -1, /* plane 10 */
+ -1, /* plane 11 */
+ -1, /* plane 12 */
+ -1, /* plane 13 */
+ -1, /* plane 14 */
+ -1, /* plane 15 */
+ -1, /* plane 16 */
+ /* 8/68 bytes (11.8%), 1240/2048 bytes (60.5%), 14650/119330 bytes (12.3%) */
+};
diff --git a/sal/textenc/generate/cns116431992.pl b/sal/textenc/generate/cns116431992.pl
new file mode 100644
index 000000000..29bbefabf
--- /dev/null
+++ b/sal/textenc/generate/cns116431992.pl
@@ -0,0 +1,845 @@
+#!/usr/bin/env perl
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+# The following files must be available in a ./input subdir:
+
+# <http://www.unicode.org/Public/UNIDATA/Unihan.txt>:
+# "Unicode version: 3.1.1 Table version: 1.1 Date: 28 June 2001"
+# contains descriptions for:
+# U+3400..4DFF CJK Unified Ideographs Extension A
+# U+4E00..9FFF CJK Unified Ideographs
+# U+F900..FAFF CJK Compatibility Ideographs
+# U+20000..2F7FF CJK Unified Ideographs Extension B
+# U+2F800..2FFFF CJK Compatibility Ideographs Supplement
+
+# <http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/CNS11643.TXT>:
+# "Unicode version: 1.1 Table version: 0.0d1 Date: 21 October 1994"
+# contains mappings for CNS 11643-1986
+
+# <http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/ftp/CJKtable/Uni2CNS.Z>:
+# "Unicode version: 1.1 Table version: 0.49 Date: 26 March 1998"
+# contains mappings for CNS 11643-1992 that are incompatible with
+# CNS11643.TXT
+
+$id = "Cns116431992";
+
+sub isValidUtf32
+{
+ my $utf32 = $_[0];
+ return $utf32 >= 0 && $utf32 <= 0x10FFFF
+ && !($utf32 >= 0xD800 && $utf32 <= 0xDFFF)
+ && !($utf32 >= 0xFDD0 && $utf32 <= 0xFDEF)
+ && ($utf32 & 0xFFFF) < 0xFFFE;
+}
+
+sub printUtf32
+{
+ my $utf32 = $_[0];
+ return sprintf("U+%04X", $utf32);
+}
+
+sub isValidCns116431992
+{
+ my $plane = $_[0];
+ my $row = $_[1];
+ my $column = $_[2];
+ return $plane >= 1 && $plane <= 16
+ && $row >= 1 && $row <= 94
+ && $column >= 1 && $column <= 94;
+}
+
+sub printCns116431992
+{
+ my $plane = $_[0];
+ my $row = $_[1];
+ my $column = $_[2];
+ return sprintf("%d-%02d/%02d", $plane, $row, $column);
+}
+
+sub printStats
+{
+ my $used = $_[0];
+ my $space = $_[1];
+ return sprintf("%d/%d bytes (%.1f%%)",
+ $used,
+ $space,
+ $used * 100 / $space);
+}
+
+sub printSpaces
+{
+ my $column_width = $_[0];
+ my $columns_per_line = $_[1];
+ my $end = $_[2];
+ $output = "";
+ for ($i = int($end / $columns_per_line) * $columns_per_line;
+ $i < $end;
+ ++$i)
+ {
+ for ($j = 0; $j < $column_width; ++$j)
+ {
+ $output = $output . " ";
+ }
+ }
+ return $output;
+}
+
+$count_Unihan_txt = 0;
+$count_CNS11643_TXT = 0;
+$count_Uni2CNS = 0;
+
+if (1)
+{
+ $filename = "Unihan.txt";
+ open IN, ("input/" . $filename) or die "Cannot read " . $filename;
+ while (<IN>)
+ {
+ if (/^U\+([0-9A-F]+)\tkCNS1992\t([0-9A-F])-([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])$/)
+ {
+ $utf32 = oct("0x" . $1);
+ $cns_plane = oct("0x" . $2);
+ $cns_row = oct("0x" . $3) - 0x20;
+ $cns_column = oct("0x" . $4) - 0x20;
+ isValidUtf32($utf32)
+ or die "Bad UTF32 char U+" . printUtf32($utf32);
+ isValidCns116431992($cns_plane, $cns_row, $cns_column)
+ or die "Bad CNS11643-1992 char "
+ . printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column);
+ if (!defined($cns_map[$cns_plane][$cns_row][$cns_column]))
+ {
+ $cns_map[$cns_plane][$cns_row][$cns_column] = $utf32;
+ $cns_plane_used[$cns_plane] = 1;
+ ++$count_Unihan_txt;
+ }
+ else
+ {
+ ($cns_map[$cns_plane][$cns_row][$cns_column] == $utf32)
+ or die "Mapping "
+ . printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column)
+ . " to "
+ . printUtf32($cns_map[$cns_plane]
+ [$cns_row]
+ [$cns_column])
+ . ", NOT "
+ . printUtf32($utf32);
+ }
+ }
+ elsif (/^U\+([0-9A-F]+)\tkIRG_TSource\t([0-9A-F])-([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])$/)
+ {
+ $utf32 = oct("0x" . $1);
+ $cns_plane = oct("0x" . $2);
+ $cns_row = oct("0x" . $3) - 0x20;
+ $cns_column = oct("0x" . $4) - 0x20;
+ isValidUtf32($utf32)
+ or die "Bad UTF32 char U+" . printUtf32($utf32);
+ isValidCns116431992($cns_plane, $cns_row, $cns_column)
+ or die "Bad CNS11643-1992 char "
+ . printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column);
+ if (!defined($cns_map[$cns_plane][$cns_row][$cns_column]))
+ {
+ $cns_map[$cns_plane][$cns_row][$cns_column] = $utf32;
+ $cns_plane_used[$cns_plane] = 1;
+ ++$count_Unihan_txt;
+ }
+ else
+ {
+ ($cns_map[$cns_plane][$cns_row][$cns_column] == $utf32)
+ or print "WARNING! Mapping ",
+ printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column),
+ " to ",
+ printUtf32($cns_map[$cns_plane]
+ [$cns_row]
+ [$cns_column]),
+ ", NOT ",
+ printUtf32($utf32),
+ "\n";
+ }
+ }
+ elsif (/^U\+([0-9A-F]+)\tkCNS1992\t.*$/)
+ {
+ die "Bad format";
+ }
+ }
+ close IN;
+}
+
+if (1)
+{
+ $filename = "CNS11643.TXT";
+ open IN, ("input/" . $filename) or die "Cannot read " . $filename;
+ while (<IN>)
+ {
+ if (/0x([0-9A-F])([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])\t0x([0-9A-F]+)\t\#.*$/)
+ {
+ $utf32 = oct("0x" . $4);
+ $cns_plane = oct("0x" . $1);
+ $cns_row = oct("0x" . $2) - 0x20;
+ $cns_column = oct("0x" . $3) - 0x20;
+ isValidUtf32($utf32)
+ or die "Bad UTF32 char U+" . printUtf32($utf32);
+ isValidCns116431992($cns_plane, $cns_row, $cns_column)
+ or die "Bad CNS11643-1992 char "
+ . printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column);
+ if ($cns_plane <= 2)
+ {
+ if (!defined($cns_map[$cns_plane][$cns_row][$cns_column]))
+ {
+ $cns_map[$cns_plane][$cns_row][$cns_column] = $utf32;
+ $cns_plane_used[$cns_plane] = 1;
+ ++$count_CNS11643_TXT;
+ }
+ else
+ {
+ ($cns_map[$cns_plane][$cns_row][$cns_column] == $utf32)
+ or die "Mapping "
+ . printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column)
+ . " to "
+ . printUtf32($cns_map[$cns_plane]
+ [$cns_row]
+ [$cns_column])
+ . ", NOT "
+ . printUtf32($utf32);
+ }
+ }
+ }
+ }
+ close IN;
+}
+
+if (0)
+{
+ $filename = "Uni2CNS";
+ open IN, ("input/" . $filename) or die "Cannot read " . $filename;
+ while (<IN>)
+ {
+ if (/([0-9A-F]+)\t([0-9A-F])-([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])\t.*$/)
+ {
+ $utf32 = oct("0x" . $1);
+ $cns_plane = oct("0x" . $2);
+ $cns_row = oct("0x" . $3) - 0x20;
+ $cns_column = oct("0x" . $4) - 0x20;
+ isValidUtf32($utf32)
+ or die "Bad UTF32 char U+" . printUtf32($utf32);
+ isValidCns116431992($cns_plane, $cns_row, $cns_column)
+ or die "Bad CNS11643-1992 char "
+ . printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column);
+ if (!defined($cns_map[$cns_plane][$cns_row][$cns_column]))
+ {
+ $cns_map[$cns_plane][$cns_row][$cns_column] = $utf32;
+ $cns_plane_used[$cns_plane] = 1;
+ ++$count_Uni2CNS;
+ }
+ else
+ {
+# ($cns_map[$cns_plane][$cns_row][$cns_column] == $utf32)
+# or die "Mapping "
+# . printCns116431992($cns_plane,
+# $cns_row,
+# $cns_column)
+# . " to "
+# . printUtf32($cns_map[$cns_plane]
+# [$cns_row]
+# [$cns_column])
+# . ", NOT "
+# . printUtf32($utf32);
+ }
+ if ($cns_plane == 1)
+ {
+ print printCns116431992($cns_plane, $cns_row, $cns_column),
+ "\n";
+ }
+ }
+ }
+ close IN;
+}
+
+for ($cns_plane = 1; $cns_plane <= 16; ++$cns_plane)
+{
+ if (defined($cns_plane_used[$cns_plane]))
+ {
+ for ($cns_row = 1; $cns_row <= 94; ++$cns_row)
+ {
+ for ($cns_column = 1; $cns_column <= 94; ++$cns_column)
+ {
+ if (defined($cns_map[$cns_plane][$cns_row][$cns_column]))
+ {
+ $utf32 = $cns_map[$cns_plane][$cns_row][$cns_column];
+ $uni_plane = $utf32 >> 16;
+ $uni_page = ($utf32 >> 8) & 0xFF;
+ $uni_index = $utf32 & 0xFF;
+ if (!defined($uni_plane_used[$uni_plane])
+ || !defined($uni_page_used[$uni_plane][$uni_page])
+ || !defined($uni_map[$uni_plane]
+ [$uni_page]
+ [$uni_index]))
+ {
+ $uni_map[$uni_plane][$uni_page][$uni_index]
+ = ($cns_plane << 16)
+ | ($cns_row << 8)
+ | $cns_column;
+ $uni_plane_used[$uni_plane] = 1;
+ $uni_page_used[$uni_plane][$uni_page] = 1;
+ }
+ else
+ {
+ $cns1 = $uni_map[$uni_plane][$uni_page][$uni_index];
+ $cns1_plane = $cns1 >> 16;
+ $cns1_row = ($cns1 >> 8) & 0xFF;
+ $cns1_column = $cns1 & 0xFF;
+
+ # Do not map from Unicode to Fictitious Character Set
+ # Extensions (Lunde, p. 131), if possible:
+ if ($cns_plane == 3
+ && ($cns_row == 66 && $cns_column > 38
+ || $cns_row > 66))
+ {
+ print " (",
+ printUtf32($utf32),
+ " to fictitious ",
+ printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column),
+ " ignored, favouring ",
+ printCns116431992($cns1_plane,
+ $cns1_row,
+ $cns1_column),
+ ")\n";
+ }
+ elsif ($cns1_plane == 3
+ && ($cns1_row == 66 && $cns1_column > 38
+ || $cns1_row > 66))
+ {
+ $uni_map[$uni_plane][$uni_page][$uni_index]
+ = ($cns_plane << 16)
+ | ($cns_row << 8)
+ | $cns_column;
+ print " (",
+ printUtf32($utf32),
+ " to fictitious ",
+ printCns116431992($cns1_plane,
+ $cns1_row,
+ $cns1_column),
+ " ignored, favouring ",
+ printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column),
+ ")\n";
+ }
+ else
+ {
+ print "WARNING! Mapping ",
+ printUtf32($utf32),
+ " to ",
+ printCns116431992($cns1_plane,
+ $cns1_row,
+ $cns1_column),
+ ", NOT ",
+ printCns116431992($cns_plane,
+ $cns_row,
+ $cns_column),
+ "\n";
+ }
+ }
+ }
+ }
+ }
+ }
+}
+if (defined($uni_plane_used[0]) && defined($uni_page_used[0][0]))
+{
+ for ($utf32 = 0; $utf32 <= 0x7F; ++$utf32)
+ {
+ if (defined($uni_map[0][0][$uni_index]))
+ {
+ $cns = $uni_map[0][0][$utf32];
+ die "Mapping "
+ . printUtf32($utf32)
+ . " to "
+ . printCns116431992($cns >> 16,
+ ($cns >> 8) & 0xFF,
+ $cns & 0xFF);
+ }
+ }
+}
+
+$filename = lc($id) . ".tab";
+open OUT, ("> " . $filename) or die "Cannot write " . $filename;
+
+{
+ $filename = lc($id). ".pl";
+ open IN, $filename or die "Cannot read ". $filename;
+ $first = 1;
+ while (<IN>)
+ {
+ if (/^\#!.*$/)
+ {
+ }
+ elsif (/^\#(\*.*)$/)
+ {
+ if ($first == 1)
+ {
+ print OUT "/", $1, "\n";
+ $first = 0;
+ }
+ else
+ {
+ print OUT " ", substr($1, 0, length($1) - 1), "/\n";
+ }
+ }
+ elsif (/^\# (.*)$/)
+ {
+ print OUT " *", $1, "\n";
+ }
+ elsif (/^\#(.*)$/)
+ {
+ print OUT " *", $1, "\n";
+ }
+ else
+ {
+ goto done;
+ }
+ }
+ done:
+}
+
+print OUT "\n",
+ "#include \"sal/types.h\"\n",
+ "\n";
+
+print OUT "static sal_uInt16 const aImpl", $id, "ToUnicodeData[] = {\n";
+$cns_data_index = 0;
+for ($cns_plane = 1; $cns_plane <= 16; ++$cns_plane)
+{
+ if (defined($cns_plane_used[$cns_plane]))
+ {
+ $cns_rows = 0;
+ $cns_chars = 0;
+ for ($cns_row = 1; $cns_row <= 94; ++$cns_row)
+ {
+ $cns_row_first = -1;
+ for ($cns_column = 1; $cns_column <= 94; ++$cns_column)
+ {
+ if (defined($cns_map[$cns_plane][$cns_row][$cns_column]))
+ {
+ if ($cns_row_first == -1)
+ {
+ $cns_row_first = $cns_column;
+ }
+ $cns_row_last = $cns_column;
+ }
+ }
+ if ($cns_row_first != -1)
+ {
+ $cns_data_offsets[$cns_plane][$cns_row] = $cns_data_index;
+ ++$cns_rows;
+ print OUT " /* plane ", $cns_plane, ", row ", $cns_row,
+ " */\n";
+
+ $cns_row_surrogates_first = -1;
+ $cns_row_chars = 0;
+ $cns_row_surrogates = 0;
+
+ print OUT " ", $cns_row_first, " | (", $cns_row_last,
+ " << 8), /* first, last */\n";
+ ++$cns_data_index;
+
+ print OUT " ", printSpaces(7, 10, $cns_row_first);
+ $bol = 0;
+ for ($cns_column = $cns_row_first;
+ $cns_column <= $cns_row_last;
+ ++$cns_column)
+ {
+ if ($bol == 1)
+ {
+ print OUT " ";
+ $bol = 0;
+ }
+ if (defined($cns_map[$cns_plane][$cns_row][$cns_column]))
+ {
+ $utf32 = $cns_map[$cns_plane][$cns_row][$cns_column];
+ ++$cns_row_chars;
+ if ($utf32 <= 0xFFFF)
+ {
+ printf OUT "0x%04X,", $utf32;
+ }
+ else
+ {
+ ++$cns_row_surrogates;
+ printf OUT "0x%04X,",
+ (0xD800 | (($utf32 - 0x10000) >> 10));
+ if ($cns_row_surrogates_first == -1)
+ {
+ $cns_row_surrogates_first = $cns_column;
+ }
+ $cns_row_surrogates_last = $cns_column;
+ }
+ }
+ else
+ {
+ printf OUT "0xffff,";
+ }
+ ++$cns_data_index;
+ if ($cns_column % 10 == 9)
+ {
+ print OUT "\n";
+ $bol = 1;
+ }
+ }
+ if ($bol == 0)
+ {
+ print OUT "\n";
+ }
+
+ if ($cns_row_surrogates_first != -1)
+ {
+ print OUT " ", $cns_row_surrogates_first,
+ ", /* first low-surrogate */\n";
+ ++$cns_data_index;
+
+ print OUT " ",
+ printSpaces(7, 10, $cns_row_surrogates_first);
+ $bol = 0;
+ for ($cns_column = $cns_row_surrogates_first;
+ $cns_column <= $cns_row_surrogates_last;
+ ++$cns_column)
+ {
+ if ($bol == 1)
+ {
+ print OUT " ";
+ $bol = 0;
+ }
+ $utf32 = 0;
+ if (defined($cns_map[$cns_plane]
+ [$cns_row]
+ [$cns_column]))
+ {
+ $utf32
+ = $cns_map[$cns_plane][$cns_row][$cns_column];
+ }
+ if ($utf32 <= 0xFFFF)
+ {
+ printf OUT " 0,";
+ }
+ else
+ {
+ printf OUT "0x%04X,",
+ (0xDC00
+ | (($utf32 - 0x10000) & 0x3FF));
+ }
+ ++$cns_data_index;
+ if ($cns_column % 10 == 9)
+ {
+ print OUT "\n";
+ $bol = 1;
+ }
+ }
+ if ($bol == 0)
+ {
+ print OUT "\n";
+ }
+ }
+
+ $cns_chars += $cns_row_chars;
+ $cns_data_space[$cns_plane][$cns_row]
+ = ($cns_data_index
+ - $cns_data_offsets[$cns_plane][$cns_row]) * 2;
+ $cns_data_used[$cns_plane][$cns_row]
+ = (1 + $cns_row_chars
+ + ($cns_row_surrogates == 0 ?
+ 0 : 1 + $cns_row_surrogates)) * 2;
+ }
+ else
+ {
+ print OUT " /* plane ", $cns_plane, ", row ", $cns_row,
+ ": --- */\n";
+ $cns_data_offsets[$cns_plane][$cns_row] = -1;
+ }
+ }
+ print "cns plane ",
+ $cns_plane,
+ ": rows = ",
+ $cns_rows,
+ ", chars = ",
+ $cns_chars,
+ "\n";
+ }
+}
+print OUT "};\n\n";
+
+print OUT "static sal_Int32 const aImpl", $id, "ToUnicodeRowOffsets[] = {\n";
+for ($cns_plane = 1; $cns_plane <= 16; ++$cns_plane)
+{
+ if (defined ($cns_plane_used[$cns_plane]))
+ {
+ $cns_rowoffsets_used[$cns_plane] = 0;
+ for ($cns_row = 1; $cns_row <= 94; ++$cns_row)
+ {
+ if ($cns_data_offsets[$cns_plane][$cns_row] == -1)
+ {
+ print OUT " -1, /* plane ",
+ $cns_plane,
+ ", row ",
+ $cns_row,
+ " */\n";
+ }
+ else
+ {
+ print OUT " ",
+ $cns_data_offsets[$cns_plane][$cns_row],
+ ", /* plane ",
+ $cns_plane,
+ ", row ",
+ $cns_row,
+ "; ",
+ printStats($cns_data_used[$cns_plane][$cns_row],
+ $cns_data_space[$cns_plane][$cns_row]),
+ " */\n";
+ $cns_rowoffsets_used[$cns_plane] += 4;
+ }
+ }
+ }
+ else
+ {
+ print OUT " /* plane ", $cns_plane, ": --- */\n";
+ }
+}
+print OUT "};\n\n";
+
+print OUT "static sal_Int32 const aImpl",
+ $id,
+ "ToUnicodePlaneOffsets[] = {\n";
+$cns_row_offset = 0;
+for ($cns_plane = 1; $cns_plane <= 16; ++$cns_plane)
+{
+ if (defined ($cns_plane_used[$cns_plane]))
+ {
+ print OUT " ",
+ $cns_row_offset++,
+ " * 94, /* plane ",
+ $cns_plane,
+ "; ",
+ printStats($cns_rowoffsets_used[$cns_plane], 94 * 4),
+ " */\n";
+ }
+ else
+ {
+ print OUT " -1, /* plane ", $cns_plane, " */\n";
+ }
+}
+print OUT "};\n\n";
+
+print OUT "static sal_uInt8 const aImplUnicodeTo", $id, "Data[] = {\n";
+$uni_data_index = 0;
+for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane)
+{
+ if (defined($uni_plane_used[$uni_plane]))
+ {
+ for ($uni_page = 0; $uni_page <= 255; ++$uni_page)
+ {
+ if (defined($uni_page_used[$uni_plane][$uni_page]))
+ {
+ $uni_data_offsets[$uni_plane][$uni_page] = $uni_data_index;
+ print OUT " /* plane ", $uni_plane, ", page ", $uni_page,
+ " */\n";
+
+ $uni_page_first = -1;
+ for ($uni_index = 0; $uni_index <= 255; ++$uni_index)
+ {
+ if (defined($uni_map[$uni_plane][$uni_page][$uni_index]))
+ {
+ if ($uni_page_first == -1)
+ {
+ $uni_page_first = $uni_index;
+ }
+ $uni_page_last = $uni_index;
+ }
+ }
+
+ $uni_data_used[$uni_plane][$uni_page] = 0;
+
+ print OUT " ", $uni_page_first, ", ", $uni_page_last,
+ ", /* first, last */\n";
+ $uni_data_index += 2;
+ $uni_data_used[$uni_plane][$uni_page] += 2;
+
+ print OUT " ", printSpaces(9, 8, $uni_page_first);
+ $bol = 0;
+ for ($uni_index = $uni_page_first;
+ $uni_index <= $uni_page_last;
+ ++$uni_index)
+ {
+ if ($bol == 1)
+ {
+ print OUT " ";
+ $bol = 0;
+ }
+ if (defined($uni_map[$uni_plane][$uni_page][$uni_index]))
+ {
+ $cns = $uni_map[$uni_plane][$uni_page][$uni_index];
+ printf OUT "%2d,%2d,%2d,",
+ $cns >> 16,
+ $cns >> 8 & 0xFF,
+ $cns & 0xFF;
+ $uni_data_used[$uni_plane][$uni_page] += 3;
+ }
+ else
+ {
+ print OUT " 0, 0, 0,";
+ }
+ $uni_data_index += 3;
+ if ($uni_index % 8 == 7)
+ {
+ print OUT "\n";
+ $bol = 1;
+ }
+ }
+ if ($bol == 0)
+ {
+ print OUT "\n";
+ }
+
+ $uni_data_space[$uni_plane][$uni_page]
+ = $uni_data_index
+ - $uni_data_offsets[$uni_plane][$uni_page];
+ }
+ else
+ {
+ $uni_data_offsets[$uni_plane][$uni_page] = -1;
+ print OUT " /* plane ", $uni_plane, ", page ", $uni_page,
+ ": --- */\n";
+ }
+ }
+ }
+ else
+ {
+ print OUT " /* plane ", $uni_plane, ": --- */\n";
+ }
+}
+print OUT "};\n\n";
+
+print OUT "static sal_Int32 const aImplUnicodeTo", $id, "PageOffsets[] = {\n";
+for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane)
+{
+ if (defined($uni_plane_used[$uni_plane]))
+ {
+ $uni_pageoffsets_used[$uni_plane] = 0;
+ $uni_data_used_sum[$uni_plane] = 0;
+ $uni_data_space_sum[$uni_plane] = 0;
+ for ($uni_page = 0; $uni_page <= 255; ++$uni_page)
+ {
+ $offset = $uni_data_offsets[$uni_plane][$uni_page];
+ if ($offset == -1)
+ {
+ print OUT " -1, /* plane ",
+ $uni_plane,
+ ", page ",
+ $uni_page,
+ " */\n";
+ }
+ else
+ {
+ print OUT " ",
+ $offset,
+ ", /* plane ",
+ $uni_plane,
+ ", page ",
+ $uni_page,
+ "; ",
+ printStats($uni_data_used[$uni_plane][$uni_page],
+ $uni_data_space[$uni_plane][$uni_page]),
+ " */\n";
+ $uni_pageoffsets_used[$uni_plane] += 4;
+ $uni_data_used_sum[$uni_plane]
+ += $uni_data_used[$uni_plane][$uni_page];
+ $uni_data_space_sum[$uni_plane]
+ += $uni_data_space[$uni_plane][$uni_page];
+ }
+ }
+ }
+ else
+ {
+ print OUT " /* plane ", $uni_plane, ": --- */\n";
+ }
+}
+print OUT "};\n\n";
+
+print OUT "static sal_Int32 const aImplUnicodeTo",
+ $id,
+ "PlaneOffsets[] = {\n";
+$uni_page_offset = 0;
+$uni_planeoffsets_used = 0;
+$uni_pageoffsets_used_sum = 0;
+$uni_pageoffsets_space_sum = 0;
+$uni_data_used_sum2 = 0;
+$uni_data_space_sum2 = 0;
+for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane)
+{
+ if (defined ($uni_plane_used[$uni_plane]))
+ {
+ print OUT " ",
+ $uni_page_offset++,
+ " * 256, /* plane ",
+ $uni_plane,
+ "; ",
+ printStats($uni_pageoffsets_used[$uni_plane], 256 * 4),
+ ", ",
+ printStats($uni_data_used_sum[$uni_plane],
+ $uni_data_space_sum[$uni_plane]),
+ " */\n";
+ $uni_planeoffsets_used += 4;
+ $uni_pageoffsets_used_sum += $uni_pageoffsets_used[$uni_plane];
+ $uni_pageoffsets_space_sum += 256 * 4;
+ $uni_data_used_sum2 += $uni_data_used_sum[$uni_plane];
+ $uni_data_space_sum2 += $uni_data_space_sum[$uni_plane];
+ }
+ else
+ {
+ print OUT " -1, /* plane ", $uni_plane, " */\n";
+ }
+}
+print OUT " /* ",
+ printStats($uni_planeoffsets_used, 17 * 4),
+ ", ",
+ printStats($uni_pageoffsets_used_sum, $uni_pageoffsets_space_sum),
+ ", ",
+ printStats($uni_data_used_sum2, $uni_data_space_sum2),
+ " */\n};\n";
+
+close OUT;
+
+print "Unihan.txt = ", $count_Unihan_txt,
+ ", CNS11643.TXT = ", $count_CNS11643_TXT,
+ ", Uni2CNS = ", $count_Uni2CNS,
+ ", total = ",
+ ($count_Unihan_txt + $count_CNS11643_TXT + $count_Uni2CNS),
+ "\n";
diff --git a/sal/textenc/generate/cns116431992.tab b/sal/textenc/generate/cns116431992.tab
new file mode 100644
index 000000000..b1d72705a
--- /dev/null
+++ b/sal/textenc/generate/cns116431992.tab
@@ -0,0 +1,22858 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+
+sal_uInt16 const aImplCns116431992ToUnicodeData[] = {
+ /* plane 1, row 1 */
+ 1 | (94 << 8), /* first, last */
+ 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,0xffff,0xffff,0xffff,0xffff,
+ 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,
+ /* plane 1, row 2 */
+ 1 | (94 << 8), /* first, last */
+ 0x32A3,0x2105,0x203E,0xffff,0xFF3F,0xffff,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,
+ /* plane 1, row 3 */
+ 1 | (46 << 8), /* first, last */
+ 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,
+ /* plane 1, row 4 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ 0xffff,0x5344,0xffff,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,
+ /* plane 1, row 5 */
+ 1 | (80 << 8), /* first, last */
+ 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,
+ /* plane 1, row 6 */
+ 1 | (30 << 8), /* first, last */
+ 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,
+ /* plane 1, row 7 */
+ 8 | (20 << 8), /* first, last */
+ 0x4EA0,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0x51AB,0xffff,0xffff,0xffff,0xffff,
+ 0x52F9,
+ /* plane 1, row 8: --- */
+ /* plane 1, row 9: --- */
+ /* plane 1, row 10: --- */
+ /* plane 1, row 11: --- */
+ /* plane 1, row 12: --- */
+ /* plane 1, row 13: --- */
+ /* plane 1, row 14: --- */
+ /* plane 1, row 15: --- */
+ /* plane 1, row 16: --- */
+ /* plane 1, row 17: --- */
+ /* plane 1, row 18: --- */
+ /* plane 1, row 19: --- */
+ /* plane 1, row 20: --- */
+ /* plane 1, row 21: --- */
+ /* plane 1, row 22: --- */
+ /* plane 1, row 23: --- */
+ /* plane 1, row 24: --- */
+ /* plane 1, row 25: --- */
+ /* plane 1, row 26: --- */
+ /* plane 1, row 27: --- */
+ /* plane 1, row 28: --- */
+ /* plane 1, row 29: --- */
+ /* plane 1, row 30: --- */
+ /* plane 1, row 31: --- */
+ /* plane 1, row 32: --- */
+ /* plane 1, row 33: --- */
+ /* plane 1, row 34 */
+ 1 | (33 << 8), /* first, last */
+ 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,
+ /* plane 1, row 35: --- */
+ /* plane 1, row 36 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 37 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 38 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 39 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 40 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 41 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 42 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 43 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 44 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 45 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 46 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 47 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 48 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 49 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 50 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 51 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 52 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 53 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 54 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 55 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 56 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 57 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 58 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 59 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 60 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 61 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 62 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 63 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 64 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 65 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 66 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 67 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 68 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 69 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 70 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 71 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 72 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 73 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 74 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 75 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 76 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 77 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 78 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 79 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 80 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 81 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 82 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 83 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 84 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 85 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 86 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 87 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 88 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 89 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 90 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 91 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 92 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 1, row 93 */
+ 1 | (43 << 8), /* first, last */
+ 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,
+ /* plane 1, row 94: --- */
+ /* plane 2, row 1 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 2 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 3 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 4 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 5 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 6 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 7 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 8 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 9 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 10 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 11 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 12 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 13 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 14 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 15 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 16 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 17 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 18 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 19 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 20 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 21 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 22 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 23 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 24 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 25 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 26 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 27 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 28 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 29 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 30 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 31 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 32 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 33 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 34 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 35 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 36 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 37 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 38 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 39 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 40 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 41 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 42 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 43 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 44 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 45 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 46 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 47 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 48 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 49 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 50 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 51 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 52 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 53 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 54 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 55 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 56 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 57 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 58 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 59 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 60 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 61 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 62 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 63 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 64 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 65 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 66 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 67 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 68 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 69 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 70 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 71 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 72 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 73 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 74 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 75 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 76 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 77 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 78 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 79 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 80 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 81 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 2, row 82 */
+ 1 | (36 << 8), /* first, last */
+ 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,
+ /* plane 2, row 83: --- */
+ /* plane 2, row 84: --- */
+ /* plane 2, row 85: --- */
+ /* plane 2, row 86: --- */
+ /* plane 2, row 87: --- */
+ /* plane 2, row 88: --- */
+ /* plane 2, row 89: --- */
+ /* plane 2, row 90: --- */
+ /* plane 2, row 91: --- */
+ /* plane 2, row 92: --- */
+ /* plane 2, row 93: --- */
+ /* plane 2, row 94: --- */
+ /* plane 3, row 1 */
+ 1 | (94 << 8), /* first, last */
+ 0x4E28,0x4E36,0x4E3F,0x4E85,0x4E05,0x4E04,0x5182,0x5196,0x5338,
+ 0x5369,0x53B6,0x4E2A,0x4E87,0x4E49,0x51E2,0x4E46,0x4E8F,0x4EBC,0x4EBE,
+ 0x5166,0x51E3,0x5204,0x529C,0x5344,0x5902,0x590A,0x5B80,0x5DDB,0x5E7A,
+ 0x5E7F,0x5EF4,0x5F50,0x5F51,0x5F61,0x961D,0xD840,0x4E63,0x4E62,0x4EA3,
+ 0x5185,0x4EC5,0x4ECF,0x4ECE,0x4ECC,0x5184,0x5186,0xD87E,0x34C5,0x51E4,
+ 0x5205,0x529E,0x529D,0x52FD,0x5300,0x533A,0x3539,0x5346,0x535D,0x5386,
+ 0x53B7,0x3555,0x53CC,0x355B,0x53CE,0x5721,0x37A2,0x5E00,0x5F0C,0x6237,
+ 0x6238,0x6534,0x6535,0x65E0,0x3E26,0x738D,0x4E97,0x4EE0,0x3432,0xD840,
+ 0x4EE7,0x3433,0x4EE6,0x3434,0x36A2,0x3431,0x34B0,0x56D8,0x518B,0x518C,
+ 0x5199,0x51E5,0xD87E,0x520B,0x34DC,
+ 36, /* first low-surrogate */
+ 0xDC0B, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDC17, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xDDA9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xDC50,
+ /* plane 3, row 2 */
+ 1 | (94 << 8), /* first, last */
+ 0x361E,0x5304,0x5303,0x5307,0xD87E,0x531E,0x535F,0x536D,0x5389,
+ 0x53BA,0x53D0,0x3565,0x53F6,0x53F7,0x53F9,0x3564,0x53F4,0x361D,0x3626,
+ 0x5724,0x5904,0x5918,0x5932,0x5930,0x5934,0x368E,0x5975,0x374A,0x5B82,
+ 0x5BF9,0x5C14,0x378B,0x37A6,0x37A4,0x37A5,0x37A7,0x382F,0x3832,0x5E81,
+ 0x5E83,0x5F0D,0x5F52,0x38D4,0x5FCA,0x5FC7,0x6239,0x39C5,0x624F,0x65E7,
+ 0x672F,0x6B7A,0x6C39,0x3CBA,0x3CB9,0x6C37,0x6C44,0x6C45,0x738C,0x7592,
+ 0x7676,0x9093,0x9092,0x48B3,0x49BA,0x4E21,0x4E20,0x4E22,0x4E68,0x4E89,
+ 0x4E98,0x4EF9,0x4EEF,0x343B,0x343C,0x4EF8,0x4F06,0x4F03,0x4EFC,0x4EEE,
+ 0x4F16,0x3439,0x4F28,0x4F1C,0x4F07,0x4F1A,0x4EFA,0x4F17,0x514A,0x34B2,
+ 0x5172,0xD87E,0x51B4,0x51B3,0x51B2,
+ 5, /* first low-surrogate */
+ 0xDC2A, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xDC15,
+ /* plane 3, row 3 */
+ 1 | (94 << 8), /* first, last */
+ 0x34C7,0x51E8,0x342B,0x5214,0x520F,0x5215,0x5218,0x52A8,0xD87E,
+ 0x534B,0x534F,0x353B,0x5350,0x3544,0x538B,0x3542,0x53BE,0x355C,0x53D2,
+ 0x5416,0x53FF,0x3567,0x5400,0x3566,0x5405,0x5413,0x5415,0xD87E,0x361F,
+ 0x56E3,0x5735,0x5736,0x5731,0x5732,0x58EE,0x5905,0x4E54,0x368F,0x5936,
+ 0x3690,0x36A8,0x36A4,0x597A,0x36A3,0x5986,0x373D,0x374C,0x5B86,0x5F53,
+ 0x5C18,0x378C,0x5C3D,0x5C78,0x37A8,0x37AD,0x37AF,0xD847,0x5C80,0x3829,
+ 0x5E08,0x3836,0x3871,0x3870,0x386F,0x5EF5,0x5F0E,0x38A9,0x38AA,0x38FB,
+ 0x5FD3,0x5FDA,0x38FC,0x5FDB,0x39AE,0x620F,0x625D,0x625F,0x6267,0x6257,
+ 0x9F50,0x3AC3,0x65EB,0x65EA,0x3B30,0x6737,0x3B41,0x6732,0x6736,0x6B22,
+ 0x6BCE,0x3C8C,0x6C58,0x6C51,0x6C77,
+ 9, /* first low-surrogate */
+ 0xDC2C,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xDC3B, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDD46,
+ /* plane 3, row 4 */
+ 1 | (94 << 8), /* first, last */
+ 0x6C3C,0x3CBB,0x6C5A,0xD84F,0x6C53,0x706F,0x7072,0x706E,0xD87E,
+ 0x3DA1,0x7073,0x72B1,0x72B2,0x3EA8,0x738F,0x3EAA,0x3EAB,0x4096,0x793C,
+ 0x41C2,0x808D,0x808E,0x4493,0x827B,0x4494,0x8D71,0x8FB9,0x9096,0x909A,
+ 0x49BB,0x4E24,0x4E71,0xD87E,0x4E9C,0x4F45,0x4F4A,0x4F39,0x4F37,0x3443,
+ 0x4F32,0x4F42,0x3442,0x4F44,0x4F4B,0x3444,0x4F40,0x4F35,0x4F31,0x5151,
+ 0xD87E,0x5150,0x514E,0x34B3,0x34B7,0x519D,0x34C8,0x51B5,0x51B8,0x51EC,
+ 0x5223,0x5227,0x5226,0x521F,0x522B,0x5220,0x52B4,0x52B3,0x3518,0x5325,
+ 0x533B,0x5374,0x3547,0x3546,0x3545,0x356B,0x3569,0x544D,0x3572,0x3571,
+ 0x543A,0x356C,0x356F,0x5444,0x544C,0x5423,0x541A,0x5432,0x544B,0x5421,
+ 0x3573,0x5434,0x5449,0x5450,0x5422,
+ 4, /* first low-surrogate */
+ 0xDC86, 0, 0, 0, 0,0xDC35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xDC1B, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xDC0E,
+ /* plane 3, row 5 */
+ 1 | (94 << 8), /* first, last */
+ 0x543F,0x5451,0x545A,0x542F,0x3576,0x56E9,0x56F2,0x56F3,0x56EF,
+ 0x56ED,0x56EC,0x56E6,0x5748,0x3627,0x5744,0x573F,0x573C,0x5753,0x5756,
+ 0x3630,0x575F,0x5743,0x5758,0x5757,0x3629,0x362A,0x362F,0x5746,0x362C,
+ 0x573D,0x362D,0x5742,0x5754,0x5755,0x58F1,0x58F2,0x58F0,0x590B,0x9EA6,
+ 0x56F1,0x593D,0x3693,0x5994,0x598C,0x36AD,0x599C,0x36AC,0x36AB,0x599F,
+ 0x36A9,0x599B,0x36AE,0x5989,0x599A,0x36AA,0x6588,0x374E,0x5B8D,0x3750,
+ 0x5BFE,0x5BFF,0x5BFD,0x5C2B,0x37B2,0x5C84,0x5C8E,0x5C9C,0x37B5,0x37B6,
+ 0x5C85,0x5DF5,0x5E09,0x3839,0x383B,0x5E0B,0x3872,0x5E92,0x5E90,0x5F03,
+ 0x38AC,0x5F1E,0x5F63,0x3908,0x5FE7,0x5FFE,0x5FE6,0x5FDC,0x5FCE,0x3903,
+ 0x5FFC,0x5FDF,0x5FEC,0x5FF6,0xD849,
+ 94, /* first low-surrogate */
+ 0xDDD7,
+ /* plane 3, row 6 */
+ 1 | (94 << 8), /* first, last */
+ 0x5FF2,0x5FF0,0x5FF9,0x390B,0x6213,0x39AF,0xD87E,0x623B,0x623C,
+ 0x6282,0x39CE,0x39CB,0x39CC,0x6278,0x628B,0x39CD,0x629E,0x62A5,0x629B,
+ 0x629C,0x6299,0x628D,0x6285,0x629D,0x6275,0x3A80,0x3AAF,0x3AD3,0x65F6,
+ 0x3AD5,0x3AD4,0x3AD7,0x66F5,0x675B,0x3B42,0x6754,0x6752,0x3B44,0x6758,
+ 0x6744,0x674A,0x6761,0x3CC6,0x6C7F,0x6C91,0x6C9E,0x3CC0,0x6C6E,0x6C7C,
+ 0x6C9F,0x6C75,0x3CBE,0x6C56,0x6CA2,0x6C79,0x3CCA,0x6CA1,0x3CC4,0x6CAA,
+ 0x6CA0,0x3CC2,0x7079,0x7077,0x707E,0x3DA4,0x7075,0x707B,0x7264,0x3E29,
+ 0x72BB,0x72BC,0x72C7,0x72B9,0x72BE,0x72B6,0x3E60,0x3E5E,0x7398,0x3EAD,
+ 0x3EAE,0x3EAC,0x3F57,0x7593,0x7680,0x3FDD,0x7683,0x76C0,0x76C1,0x400E,
+ 0x4097,0x77F4,0x77F5,0x4127,0x7ACC,
+ 7, /* first low-surrogate */
+ 0xDCB2,
+ /* plane 3, row 7 */
+ 1 | (94 << 8), /* first, last */
+ 0x7ACD,0x7CFA,0x809F,0x8091,0x8097,0x8094,0x4495,0x8286,0x828C,
+ 0xD87E,0x8295,0x4498,0x866C,0x459D,0x8FB5,0x8FBE,0x8FC7,0x488A,0x8FC1,
+ 0x90A9,0x90A4,0x48B5,0x48B6,0x48B7,0x90A8,0x9627,0x9626,0x962B,0x9633,
+ 0x9634,0x9629,0x4E3D,0x3428,0x4E9D,0x4F93,0x4F8A,0x344D,0x3449,0x4F6D,
+ 0x4F8E,0x4FA0,0x4FA2,0x4FA1,0x4F9F,0x4FA3,0xD840,0x4F72,0x3451,0x4F8C,
+ 0x5156,0xD87E,0xD87E,0x5190,0x34CB,0x34CA,0x34CC,0x51ED,0x51FE,0x522F,
+ 0xD841,0x523C,0x5234,0x5239,0x52B9,0x52B5,0x52BF,0x5355,0x353D,0x5376,
+ 0x537A,0x5393,0x3548,0x53C1,0x53C2,0x53D5,0x5485,0x3578,0x545F,0x5493,
+ 0x5489,0x5479,0x9EFE,0x548F,0x5469,0x546D,0x357A,0x5494,0x546A,0x548A,
+ 0x3577,0x56FD,0x56FB,0x56F8,0x3621,
+ 10, /* first low-surrogate */
+ 0xDD8F, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xDE09, 0, 0, 0,
+ 0,0xDC0F,0xDC11, 0, 0, 0, 0, 0, 0, 0,
+ 0xDEEC,
+ /* plane 3, row 8 */
+ 1 | (94 << 8), /* first, last */
+ 0x56FC,0x56F6,0x5765,0x5781,0x5763,0x5767,0x3631,0x576E,0x5778,
+ 0x577F,0x3633,0x3634,0x58F3,0x594B,0x594C,0x36C1,0x36B0,0x36B4,0x59AD,
+ 0x36B8,0x59C4,0x36BC,0x59C2,0x59B0,0x36BF,0x36B5,0x36B1,0x36BD,0x59BF,
+ 0x36BB,0x59C9,0x59B8,0x59AC,0x36B3,0x36B6,0x36BA,0x59B7,0x59D7,0x36B7,
+ 0x5B60,0x3740,0x5B96,0x5B9E,0x5B94,0x5B9F,0x5B9D,0x3752,0x5C00,0x5C19,
+ 0x3790,0x3791,0x5C49,0x5C4A,0x37BE,0x5CBB,0x5CC1,0x37C0,0x37C1,0x37B9,
+ 0x5CB9,0x5C9E,0x5CB4,0x5CBA,0x5DF6,0x5E13,0x5E12,0x5E77,0x3879,0x5E98,
+ 0x387B,0x5E99,0x5E9D,0x5EF8,0x38A0,0x5EF9,0x3429,0x5F06,0x5F21,0x38AE,
+ 0x5F25,0x5F55,0x38CD,0x38CB,0x38D9,0x5F84,0x5F83,0x6030,0x6007,0x390C,
+ 0x6036,0x3901,0x3905,0x3902,0x5FE9,
+ /* plane 3, row 9 */
+ 1 | (94 << 8), /* first, last */
+ 0x603D,0x6008,0x3913,0x3911,0x62BA,0x62B2,0x39E4,0x62B7,0x62E4,
+ 0x62A7,0x39DA,0x39D5,0x39D3,0x62D5,0x62E1,0x62DD,0x62A6,0x62C1,0x62C5,
+ 0x62C0,0x62DF,0x62E0,0x62DE,0x39D6,0x6589,0x3AB4,0x65A6,0x65BA,0x3AD9,
+ 0x65FF,0x3AD8,0x6617,0x6618,0x6601,0x65FE,0x3B33,0x670C,0x3B48,0x676B,
+ 0x6796,0x6782,0x678A,0x3B47,0x67A3,0x3B4B,0x67A2,0x678F,0x3B4A,0x67F9,
+ 0x6780,0x6B26,0x6B27,0x6B68,0x6B69,0x3C5A,0x6B81,0x6BB4,0x6BD1,0x3C8E,
+ 0x3CB4,0x6C1C,0x3CCD,0x3CCC,0x3CCF,0x3CCB,0x3CCE,0x6C97,0x6C6C,0x6CDF,
+ 0x3CD2,0x6CEA,0x3CD1,0x6CE4,0x6CD8,0x6CB2,0x6CCE,0x6CC8,0x3DA6,0x708B,
+ 0x7088,0x7090,0x708F,0x3DAA,0x7087,0x7089,0x708D,0x7081,0x3DA8,0x708C,
+ 0x3E13,0x3E1A,0x7240,0x3E1D,0x3E1E,
+ /* plane 3, row 10 */
+ 1 | (94 << 8), /* first, last */
+ 0x7265,0x7266,0x7268,0x3E65,0x3E66,0x72CD,0x72D3,0x72DB,0x3E64,
+ 0x72CF,0x73A7,0x73A3,0x739E,0x3EB0,0x73AF,0x3EB3,0x3EB5,0x73AA,0x739C,
+ 0x3F19,0x7542,0x7544,0x753B,0x7541,0xD848,0x759B,0x759E,0x3F75,0x79C4,
+ 0x79C3,0x79C6,0x412B,0x412C,0x79C7,0x412D,0x79CA,0xD856,0x41C3,0x7ACF,
+ 0x7C76,0x7C74,0x7CFF,0x7CFC,0x34BA,0x4350,0x7F59,0x80A8,0x43D3,0x43D0,
+ 0x80B0,0x43DC,0x80B3,0x43D2,0x80A4,0x80B6,0x80A7,0x80AC,0x43DB,0x80A6,
+ 0x5367,0x820E,0x82C4,0x833E,0x829C,0x44A5,0x449F,0x449A,0x449C,0x44A2,
+ 0x82AA,0x449B,0x82C9,0x44A3,0x449D,0x82A6,0x82B2,0x4588,0x461A,0x488D,
+ 0x8FCC,0x8FD9,0x8FCA,0x8FD8,0x8FCF,0x90B7,0x48B8,0x90AD,0x90B9,0x9637,
+ 0x49C3,0x9641,0x963E,0x96B6,0x9751,
+ 25, /* first low-surrogate */
+ 0xDF3F, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDD2E,
+ /* plane 3, row 11 */
+ 1 | (94 << 8), /* first, last */
+ 0x9763,0x4E57,0x4E79,0x4EB2,0x4EB0,0x4EAF,0x4EB1,0x4FD2,0x4FD5,
+ 0x345D,0x4FBE,0x4FB8,0x4FB0,0x4FB1,0x4FC8,0x345A,0x3457,0x4FC6,0x4FCC,
+ 0x4FE5,0x4FE3,0x4FB4,0x516A,0x34B8,0x519F,0x34C2,0x51C1,0x34CF,0x51C2,
+ 0x51C3,0x5245,0x5248,0x34E7,0x34E9,0x524F,0x4452,0x34E8,0x52C5,0x52CA,
+ 0x52C4,0x5327,0x5358,0x537D,0x354A,0x53DD,0x53DC,0x53DA,0x53D9,0x54B9,
+ 0x3580,0x54D0,0x54B4,0x54CA,0x3587,0x54A3,0x54DA,0x54A4,0x3584,0x54B2,
+ 0x549E,0x549F,0x54B5,0x3582,0x3581,0x54CD,0x3583,0x54CC,0x3622,0x5700,
+ 0x57AC,0x5791,0x578E,0x578D,0x5792,0x57A1,0x5790,0x57A6,0x57A8,0x363B,
+ 0x579C,0x5796,0x57A7,0x363A,0x3638,0x3639,0x3636,0x58F5,0x3685,0x5909,
+ 0x5908,0x3C54,0x5952,0x369A,0x36C4,
+ /* plane 3, row 12 */
+ 1 | (94 << 8), /* first, last */
+ 0x59DF,0x36C5,0x59EB,0x59EF,0x59F0,0x59D5,0x5A0D,0x5A04,0x59F9,
+ 0x5A02,0x59F8,0x59E2,0x59D9,0x59E7,0x5B6A,0x3754,0x3755,0x5BAB,0x3756,
+ 0x5C1B,0x5C2F,0x3796,0x663C,0x3795,0x3794,0x37C4,0x5CD1,0x5CDC,0x5CE6,
+ 0x5CE1,0x5CCD,0xD87E,0x5CE2,0x5CDD,0x5CE5,0x5DFB,0x5DFA,0x5E1E,0x3844,
+ 0x5EA1,0x387D,0x387E,0x5EFC,0x5EFB,0x5F2F,0x38B2,0x38B6,0x5F66,0xD87E,
+ 0x38DC,0x38DF,0x605C,0x3928,0x604E,0x6051,0x3919,0x3910,0x6023,0x6031,
+ 0x607C,0x6052,0x392C,0x6060,0x604A,0x6061,0x391B,0x6218,0x39C2,0x39EF,
+ 0x39E3,0x39E5,0x39EA,0x39E6,0x39EE,0x631F,0x6317,0x62EA,0x6321,0x6304,
+ 0x6305,0x39E8,0x6531,0x6544,0x6540,0x3A85,0x6542,0x65BE,0x3AE0,0x6629,
+ 0x661B,0x3ADD,0x6623,0x662C,0x661A,
+ 32, /* first low-surrogate */
+ 0xDC7A, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xDC99,
+ /* plane 3, row 13 */
+ 1 | (94 << 8), /* first, last */
+ 0x6630,0x663B,0x661E,0x6637,0x6638,0x3AE1,0x670E,0x3B51,0x3B55,
+ 0x67E8,0x67D6,0x3B52,0x67C7,0x67BC,0x6852,0x67BF,0x67D5,0x67FE,0x8363,
+ 0x67FB,0xD87E,0x67B1,0x6801,0x6805,0x6800,0x67D7,0x409E,0x6B2A,0x6B6B,
+ 0x3C52,0x3C5E,0x3C60,0x3C5F,0x6BE1,0x3C92,0x3CD6,0x6D23,0x6CFF,0x6D14,
+ 0x6D05,0x6D13,0x6D06,0x6D21,0x3CDE,0x6D15,0x6CAF,0x6CF4,0x6D02,0x6D45,
+ 0xD87E,0x6D26,0x3CD9,0x6D44,0x3CDD,0x6D24,0x70A5,0x3DAC,0x70A3,0x3DB0,
+ 0x70A2,0x70BB,0x70A0,0x70AA,0x3DAF,0x3DAE,0x70A8,0x70B6,0x70B2,0x70A7,
+ 0x3DAD,0x3DAB,0x70B9,0x722E,0x3E16,0x723C,0x3E30,0x726D,0x3E33,0x3E31,
+ 0x72E7,0x72ED,0x3E6E,0x72EC,0x72E5,0x72E2,0x3EB1,0x73C4,0x73BD,0x73CF,
+ 0x73C9,0x73C1,0x73D0,0x3EB7,0x73CE,
+ 21, /* first low-surrogate */
+ 0xDCDF, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xDCFE,
+ /* plane 3, row 14 */
+ 1 | (94 << 8), /* first, last */
+ 0x74ED,0x74EB,0x3F1A,0x74EF,0x7549,0x7550,0x7546,0x754A,0x3F59,
+ 0x754D,0x75A6,0x3F7A,0x3F78,0x3F7B,0x75A8,0x3FDE,0x3FEC,0x76C7,0x76FF,
+ 0x401E,0x76FD,0x77E6,0x780A,0x409B,0x7804,0x780B,0x7807,0x409D,0x7815,
+ 0x7808,0x40FD,0x79D3,0x79D4,0x79D0,0x79D7,0x7A7C,0x4194,0x4193,0x7A7D,
+ 0x7A83,0x7A82,0x41C6,0x7AD4,0x7AD5,0x7AD3,0x7AD0,0x7AD2,0x7AFE,0x7AFC,
+ 0x7C77,0x7C7C,0x7C7B,0x42B8,0xD87E,0x42B7,0x42B9,0x4353,0xD854,0x4352,
+ 0x4351,0x7F8F,0x80D3,0x43E3,0x80CB,0x80D2,0x43E2,0x8109,0x80E2,0x80DF,
+ 0x80C6,0x4463,0x8224,0x82F7,0x82D8,0x82DD,0x44AA,0x44A6,0x82F8,0x82FC,
+ 0x44A8,0x44A9,0x82E9,0x44AB,0x82EE,0x44AC,0x82D0,0x830E,0x82E2,0x830B,
+ 0x82FD,0x5179,0x8676,0x459E,0x8678,
+ 54, /* first low-surrogate */
+ 0xDD6A, 0, 0, 0,0xDD33,
+ /* plane 3, row 15 */
+ 1 | (94 << 8), /* first, last */
+ 0x459F,0x45A0,0x8675,0x867D,0x460F,0x8842,0x8866,0x461C,0x898C,
+ 0x8A05,0x46AE,0x8A06,0x46B0,0x8C9F,0x47D4,0x8FF1,0x8FE7,0x8FE9,0x8FEF,
+ 0x90C2,0x90BC,0x48BB,0x90C6,0x90C0,0x48C1,0x48C2,0x90CD,0x90C9,0x48BE,
+ 0x90C4,0x48E5,0x9581,0x49C6,0x9CEC,0x5032,0x4FF9,0x501D,0x4FFF,0x5004,
+ 0x4FF0,0x5003,0x462E,0x5002,0x4FFC,0x4FF2,0x5024,0x5008,0x5036,0x502E,
+ 0x3465,0x5010,0x5038,0x5039,0x4FFD,0x5056,0x4FFB,0x51A3,0x51A6,0x51A1,
+ 0x34D1,0x34D0,0x51C7,0x51C9,0x5260,0x5264,0x5259,0x5265,0x5267,0x5257,
+ 0x5263,0x34EE,0x5253,0x34EF,0x52CF,0x351E,0x52CE,0x52D0,0x52D1,0x52CC,
+ 0x354B,0x354D,0x3556,0x550D,0x54F4,0x3592,0x5513,0x54EF,0x54F5,0x54F9,
+ 0x5502,0x5500,0x3593,0x3590,0x5518,
+ /* plane 3, row 16 */
+ 1 | (94 << 8), /* first, last */
+ 0x54F0,0x54F6,0xD87E,0x3597,0x5519,0x3623,0x5705,0x57C9,0x363F,
+ 0x57B7,0x57CD,0x3643,0x3642,0x3644,0x57BE,0x57BB,0x3645,0x57DB,0x57C8,
+ 0x57C4,0x57C5,0x57D1,0x57CA,0x57C0,0x36D9,0x36DE,0x5A21,0x5A2A,0x36CF,
+ 0x5A1D,0x36CD,0x5A0B,0x36DD,0x36CE,0x36D3,0x36D6,0x5A22,0x36DC,0x36D1,
+ 0x5A24,0x36D0,0x5A14,0x5A31,0x36D5,0x5A2F,0x5A1A,0x5A12,0x36D4,0x36DB,
+ 0x5A26,0xD845,0x3743,0x5BBC,0x5BBB,0x5BB7,0x5C05,0x5C06,0x5C52,0x5C53,
+ 0x37CD,0x37D1,0x5CFA,0x5CEB,0x37CA,0x5CF3,0x5CF5,0x5CE9,0x5CEF,0x37D4,
+ 0x5E2A,0x5E30,0x5E2E,0x5E2C,0x5E2F,0x5EAF,0x5EA9,0x3886,0x5EFD,0x5F32,
+ 0x5F8E,0x5F93,0x5F8F,0x604F,0x6099,0x3933,0x607E,0x3937,0x6074,0x604B,
+ 0x6073,0x6075,0x392A,0x391F,0x6056,
+ 3, /* first low-surrogate */
+ 0xDC41, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xDF2E,
+ /* plane 3, row 17 */
+ 1 | (94 << 8), /* first, last */
+ 0x60A9,0x608B,0x60A6,0x3939,0x6093,0x60AE,0x609E,0x60A7,0x6245,
+ 0x39F2,0x39F8,0x632E,0x39F7,0x6352,0x6330,0x635B,0x39F4,0x6319,0x631B,
+ 0x39F1,0x6331,0x635D,0x6337,0x6335,0x6353,0x39F5,0x635C,0x633F,0x654B,
+ 0x3A87,0x4369,0x658B,0x3AB6,0x659A,0x6650,0x6646,0x664E,0x6640,0x3AE9,
+ 0x664B,0x6648,0x3AEB,0x6660,0x6644,0x664D,0x3B34,0x6837,0x6824,0x3B62,
+ 0x3B5C,0x681B,0x6836,0x3B60,0x682C,0x6819,0x6856,0x6847,0x683E,0x681E,
+ 0xD87E,0x6815,0x6822,0x6827,0x6859,0x6858,0x6855,0x6830,0x6823,0x6B2E,
+ 0x6B2B,0x6B30,0x6B6C,0x3C61,0x6B8B,0x3C7F,0x6BE9,0x6BEA,0x6BE5,0x6D6B,
+ 0x3CE5,0x3CE6,0x6D73,0x6D57,0x3CE9,0x3CF3,0x6D5D,0x6D56,0x6D8F,0x6D5B,
+ 0x6D1C,0x6D9A,0x6D9B,0x6D99,0x3CEE,
+ 60, /* first low-surrogate */
+ 0xDCE1,
+ /* plane 3, row 18 */
+ 1 | (94 << 8), /* first, last */
+ 0x6D81,0x6D71,0x3CED,0x3CEC,0x6D72,0x6D5C,0x6D96,0x70C4,0x70DB,
+ 0x70CC,0x70D0,0x70E3,0x70DF,0x3DB3,0x70D6,0x70EE,0x70D5,0x3DB5,0x3E27,
+ 0x3E35,0x3E36,0x727A,0x3E71,0x72F5,0x7302,0x3EB8,0x3EC2,0x73E2,0x73EC,
+ 0x73D5,0x73F9,0x73DF,0x73E6,0x3EC8,0x3EC0,0x3EC1,0x3EC4,0x73E4,0x73E1,
+ 0x74F3,0x3F1F,0x3F1C,0x3F1D,0x3F4D,0x7556,0x7555,0x7558,0x7557,0x755E,
+ 0x75C3,0x3F87,0x3F82,0x75B4,0x3F7D,0x75B1,0x3FDF,0x4000,0x76CB,0x76CC,
+ 0x772A,0x4020,0x7716,0x770F,0x4022,0x4024,0x773F,0x772B,0x770E,0x7724,
+ 0x4021,0x7721,0x7718,0x77DD,0x40A4,0x40A5,0x7824,0x7836,0x4101,0x7958,
+ 0x7959,0x4103,0x7962,0x79DA,0x79D9,0x4137,0x79E1,0x79E5,0x79E8,0x79DB,
+ 0x4138,0x79E2,0x79F0,0x4199,0x4198,
+ /* plane 3, row 19 */
+ 1 | (94 << 8), /* first, last */
+ 0x4197,0x41C9,0x7ADA,0x7ADD,0x41C7,0x7ADB,0x7ADC,0x41D9,0x41DB,
+ 0x7B0D,0x7B0B,0x7B14,0x7C8E,0x7C86,0x427B,0x7C87,0x7C83,0x7C8B,0x427C,
+ 0x42BD,0x42BC,0x42C3,0x7D24,0x42C1,0x42BF,0x42C4,0x7D25,0x7F62,0x7F93,
+ 0x7F99,0x7F97,0x437E,0x437F,0x7FC4,0x7FC6,0x800A,0x43B4,0x43B3,0x8040,
+ 0x803C,0x803B,0x80F6,0x80FF,0x80EE,0x8104,0x8103,0x8107,0xD87E,0x43E6,
+ 0x80F7,0x4459,0x445A,0x822D,0x4464,0x8227,0x8229,0x831F,0x8357,0x44B4,
+ 0x44B9,0x44B7,0x44B5,0x8321,0x44C1,0x44B1,0x8318,0x8358,0x44B3,0x44BA,
+ 0x458C,0x458B,0x458D,0x8684,0x869F,0x869B,0x8689,0x86A6,0x8692,0x868F,
+ 0x86A0,0x884F,0x8878,0x887A,0x886E,0x887B,0x8884,0x8873,0x4678,0x4677,
+ 0x8A0D,0x8A0B,0x8A19,0x46B2,0x47D6,
+ 48, /* first low-surrogate */
+ 0xDD83,
+ /* plane 3, row 20 */
+ 1 | (94 << 8), /* first, last */
+ 0x8ED0,0x4845,0x4892,0x4895,0x8FF9,0x9009,0x9008,0x48C6,0x90DE,
+ 0x9151,0x48E7,0x48E8,0x91DB,0x91DF,0x91DE,0x91D6,0x91E0,0x9585,0x9660,
+ 0x9659,0x49CB,0x9656,0x49CD,0x49F1,0x96BD,0x4B22,0x3421,0x5042,0x5059,
+ 0x346F,0x5044,0x5066,0x5052,0x5054,0x5071,0x5050,0x507B,0x507C,0x5058,
+ 0x3470,0x3464,0x5079,0x506C,0x5078,0x51A8,0x51D1,0x51CF,0x5268,0x5276,
+ 0x52D4,0x352D,0x53A0,0x53C4,0x3558,0x5558,0x554C,0x5568,0x35A6,0x5549,
+ 0x35A4,0x359F,0x555D,0x5529,0xD843,0x5554,0x5553,0x35A3,0x555A,0x35A0,
+ 0x553A,0x553F,0x552B,0x57EA,0x364A,0x57EF,0x3647,0x3648,0x57DD,0x57FE,
+ 0xD87E,0x57DE,0x57E6,0x3649,0x57E8,0x57FF,0x5803,0x58F7,0x68A6,0x591F,
+ 0x369E,0x595B,0x595D,0x595E,0xD845,
+ 64, /* first low-surrogate */
+ 0xDDAE, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xDC55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xDE37,
+ /* plane 3, row 21 */
+ 1 | (94 << 8), /* first, last */
+ 0x36E8,0x5A2B,0x36EC,0x5A3B,0x36ED,0x36E6,0x5A61,0x5A3A,0x5A6E,
+ 0x5A4B,0x5A6B,0x36EB,0x36E7,0x5A45,0x5A4E,0x5A68,0x5A3D,0x5A71,0x5A3F,
+ 0x5A6F,0x5A75,0x36E9,0x5A73,0x5A2C,0x5A59,0x5A54,0x5A4F,0x5A63,0x375C,
+ 0x375D,0x5BC8,0x3760,0x5BC3,0x375B,0x5C5B,0x5C61,0x3799,0x5D21,0x5D0A,
+ 0x5D09,0x37D8,0x5D2C,0x5D08,0x37DA,0x37DD,0x5D2A,0x5D15,0x37E0,0x5D10,
+ 0x5D13,0x37E5,0x5D2F,0x5D18,0x37D7,0x5DE3,0x5E39,0x5E35,0x5E3A,0x5E32,
+ 0x384E,0x388C,0x3888,0xD87E,0x5EBB,0x5EBA,0x5F34,0x5F39,0x38CE,0xD87E,
+ 0x38E5,0x38E6,0x6098,0x3932,0x60D0,0x3940,0x3947,0x394C,0x60D7,0x60AA,
+ 0x3935,0x60A1,0x60A4,0x3930,0x60EE,0x3943,0x60E7,0x394D,0x60E8,0x60DE,
+ 0x39B7,0x39F3,0x637E,0x638B,0x3A02,
+ 63, /* first low-surrogate */
+ 0xDC8D, 0, 0, 0, 0, 0,0xDC9C,
+ /* plane 3, row 22 */
+ 1 | (94 << 8), /* first, last */
+ 0x3A0B,0x6379,0x6386,0x6393,0x3A04,0x6373,0x636A,0xD87E,0x636C,
+ 0x3A08,0x637F,0x39FC,0x63B2,0x63BA,0x39FF,0x3A00,0x6366,0x6374,0x3A8B,
+ 0x655A,0x3A8D,0x654E,0x654D,0x658D,0x658E,0x65AD,0x3ACA,0x65C7,0x65CA,
+ 0x3ACB,0x65C9,0xD87E,0x65E3,0x6657,0x3AF3,0x6663,0x6667,0x671A,0x6719,
+ 0x6716,0x3B36,0x3B6A,0x689E,0x68B6,0x6898,0x6873,0x3B6B,0x689A,0x688E,
+ 0x68B7,0x68DB,0x68A5,0x686C,0x68C1,0x6884,0x3B71,0x3B68,0x6895,0x687A,
+ 0x6899,0x3B72,0x68B8,0x68B9,0x6870,0x3C2E,0x6B35,0x3C62,0x6B90,0x6BBB,
+ 0x6BED,0x3C98,0x3CB5,0x3CEB,0x6DC1,0x6DC3,0x6DCE,0x3CFB,0x3CF8,0x6DAD,
+ 0x6E04,0x3CF5,0x6DB9,0x3D08,0x6DE7,0xD87E,0x6E08,0x6E06,0x3D0A,0x6E0A,
+ 0x6DB0,0x3D06,0x6DF8,0x6E0C,0x3CFD,
+ 8, /* first low-surrogate */
+ 0xDCBA, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xDCCB, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xDD07,
+ /* plane 3, row 23 */
+ 1 | (94 << 8), /* first, last */
+ 0x6DB1,0x3CFA,0x6E02,0x6E07,0x6E09,0x6E01,0x6E17,0x6DFF,0x6E12,
+ 0x3DBA,0x3DB9,0x7103,0x7107,0x7101,0x70F5,0x70F1,0x7108,0x70F2,0x710F,
+ 0x3DBB,0x70FE,0x3E18,0x3E40,0x3E3D,0x731A,0x7310,0x730E,0x7402,0x73F3,
+ 0x3ECD,0x3EC9,0x73FB,0x3ECB,0x3ECA,0x3ECE,0x751B,0x7523,0x7561,0x7568,
+ 0x3F5E,0x7567,0x75D3,0x3F91,0x3F8C,0x7690,0x3FE1,0x4002,0x76D5,0x76D7,
+ 0x76D6,0x7730,0x402B,0x7726,0x402A,0x7740,0x3E14,0x771E,0x40AD,0x40A3,
+ 0x40AB,0x7847,0x40AF,0x784B,0x7851,0x784F,0x7842,0x7846,0x4104,0x796E,
+ 0x796C,0x79F2,0x4144,0x79F1,0x79F5,0x79F3,0x79F9,0x413D,0x4147,0x419C,
+ 0x7A9A,0x7A93,0x7A91,0x7AE1,0x41E0,0x41E4,0x7B21,0x7B1C,0x7B16,0x7B17,
+ 0x7B36,0x7B1F,0x4280,0x7C93,0x7C99,
+ /* plane 3, row 24 */
+ 1 | (94 << 8), /* first, last */
+ 0x7C9A,0x7C9C,0x42CA,0x7D49,0x42D4,0x7D34,0x7D37,0x42D2,0x7D2D,
+ 0x42CB,0x7D4C,0x42CE,0x42D3,0x7D48,0x4344,0x4348,0x7F3B,0x4345,0x4381,
+ 0x4386,0x4385,0x8008,0x801A,0x43A3,0x801D,0x43B5,0x8049,0x8045,0x8044,
+ 0x7C9B,0x43FA,0x43F9,0x812A,0x812E,0x43FB,0x43F2,0x8131,0x43EF,0x811A,
+ 0x8134,0x8117,0x445B,0x4466,0x44CE,0x831D,0x8371,0x8384,0x8380,0x8372,
+ 0x83A1,0x35B4,0x8379,0x8391,0x44C8,0x839F,0x83AD,0x44D1,0x44C5,0x8323,
+ 0x44D2,0x8385,0x839C,0x83B7,0x8658,0x865A,0x458F,0x8657,0x86B2,0x45A7,
+ 0x86AE,0x45A5,0x45A4,0x4611,0x8845,0x889C,0x8894,0x88A3,0x888F,0x88A5,
+ 0x88A9,0x88A6,0x888A,0x88A0,0x8890,0x8992,0x8991,0x8994,0x46B5,0x8A26,
+ 0x8A32,0x8A28,0x46B4,0x46BD,0x8A1C,
+ /* plane 3, row 25 */
+ 1 | (94 << 8), /* first, last */
+ 0x46BB,0x8A2B,0x8A20,0x46B9,0x8A29,0x46C2,0x46BE,0x46BA,0x8A21,
+ 0x8C3A,0x3AB7,0x8C5B,0x8C58,0x8C7C,0x4758,0x8CA6,0x8CAE,0x8CAD,0x8D65,
+ 0x479B,0x8D7E,0x479C,0x8D7C,0x8D7F,0x8D7A,0x8DBD,0x47DA,0x47DE,0x8DC0,
+ 0x8DBB,0x8EAD,0x8EAF,0x8ED6,0x484D,0x4846,0x4847,0x484B,0x484C,0x8ED9,
+ 0x4848,0x4899,0x9012,0x900E,0x9025,0x489B,0x9013,0x90EE,0x48CE,0x90AB,
+ 0x90F7,0x48EB,0x9159,0x9154,0x91F2,0x91F0,0x91E5,0x91F6,0x491C,0x498C,
+ 0x9587,0x49D1,0x965A,0x49D6,0x49D3,0x966E,0x49D4,0x49D0,0x49D5,0x9679,
+ 0x4A0B,0x98E1,0x98E6,0x4BC6,0x9EC4,0x9ED2,0x4E80,0x3424,0x4E81,0x508F,
+ 0x5097,0x5088,0x5089,0x3474,0x347A,0x5081,0x5160,0xD841,0x34C3,0x5E42,
+ 0x51D3,0x34D4,0x34D5,0x51D2,0x51D6,
+ 87, /* first low-surrogate */
+ 0xDD64,
+ /* plane 3, row 26 */
+ 1 | (94 << 8), /* first, last */
+ 0x5273,0x34FB,0x5270,0x34F7,0x3532,0xD87E,0x53A8,0x53A6,0x53C5,
+ 0x5597,0x55DE,0x35BA,0x35BF,0x5596,0x55B4,0x35C7,0x5585,0x35B7,0x559B,
+ 0x55A0,0x35B9,0x5559,0x35C3,0x5586,0x35BD,0x35D0,0x55AF,0x557A,0x35C1,
+ 0x35BE,0x35CD,0x559E,0x35CB,0x55A9,0x570F,0x570E,0x581A,0x364F,0x581F,
+ 0x3653,0x583C,0x5818,0x583E,0x5826,0x3655,0x583A,0xD844,0x5822,0x3651,
+ 0x58FB,0x5963,0x5964,0x369F,0x5AA8,0x5AA3,0x5A82,0x5A88,0x5AA1,0x5A85,
+ 0x5A98,0x36FE,0x5A99,0x36FB,0x5A89,0x5A81,0x5A96,0x5A80,0x36F1,0x36F5,
+ 0x5A91,0x36EF,0x3704,0x3703,0x36F4,0x5ACF,0x36F3,0x3702,0x36F7,0x36FA,
+ 0x36FD,0x36EE,0x5A87,0x5AA0,0x36F0,0x5A79,0x36F2,0x5A86,0x5AAB,0x5AAA,
+ 0x5AA4,0x5A8D,0x5A7E,0x3744,0x5BD5,
+ 6, /* first low-surrogate */
+ 0xDC33, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDF64,
+ /* plane 3, row 27 */
+ 1 | (94 << 8), /* first, last */
+ 0x3762,0x3777,0x3DC9,0x5C1E,0x5C5F,0x5C5E,0x5D44,0x5D3E,0x37E8,
+ 0x5D48,0x5D1C,0x37EF,0x5D5B,0x5D4D,0x37E6,0x37ED,0x5D57,0x37E7,0x5D53,
+ 0x5D4F,0x37EB,0x5D3B,0x5D46,0x382D,0x3855,0x5E46,0x5E47,0x3853,0x5E48,
+ 0x5EC0,0x5EBD,0x5EBF,0x3890,0x5F11,0x38BE,0x5F3E,0x5F3B,0x38BD,0x5F3A,
+ 0x38CF,0x38D0,0x38EC,0x5FA7,0x394B,0x60EA,0x3948,0x6107,0x6122,0x610C,
+ 0x3955,0x3951,0x60B3,0x60D6,0x60D2,0x394E,0x60E3,0x60E5,0x60E9,0x396B,
+ 0x395E,0x6111,0x60FD,0x3960,0x3967,0x611E,0x6120,0x6121,0x621E,0x39B8,
+ 0x63E2,0x63DE,0x63E6,0x3A14,0x3A0F,0x3A07,0x3A13,0x63F8,0x3A17,0x63FE,
+ 0x63C1,0x63BF,0x63F7,0x63D1,0x655F,0x6560,0x6561,0x3A9A,0x3AB8,0x65D1,
+ 0x3AF7,0x3AF8,0x667D,0x666B,0x667F,
+ /* plane 3, row 28 */
+ 1 | (94 << 8), /* first, last */
+ 0x3AFD,0x3AF5,0x6673,0x6681,0x666D,0x6669,0x3AFA,0x3B38,0x671E,
+ 0x68ED,0x3B87,0x3B80,0x3B88,0x3B79,0x6903,0x3B7C,0x68FE,0x68E5,0x691E,
+ 0x6902,0x3B83,0x3B85,0x6909,0x68CA,0x6900,0xD87E,0x6901,0x6918,0x68E2,
+ 0x68CF,0x3B7B,0x692E,0x68C5,0x68FF,0x3B86,0x691C,0x68C3,0x3C34,0x6B6F,
+ 0x3C55,0x6B6E,0x3C68,0x6BBE,0x3C9C,0x6BF4,0x6C2D,0x3CFC,0x6DB6,0x6E75,
+ 0x6E1E,0x3D1A,0x6E18,0x3D17,0x6E48,0x3D1B,0x6E4F,0x3D13,0x6E42,0x6E6A,
+ 0x6E70,0x6DFE,0x3D05,0x3D07,0x6E6D,0x3D1C,0x6E7B,0x6E7E,0x6E59,0x3D11,
+ 0x6E57,0x3D16,0x6E80,0x6E50,0x3D15,0x6E29,0x6E76,0x6E2A,0x6E4C,0x712A,
+ 0x3DCB,0x7135,0x712C,0x7137,0x711D,0x3DC5,0x3DC2,0x7138,0x3DCD,0x7134,
+ 0x712B,0x7133,0x7127,0x7124,0x3DCA,
+ 26, /* first low-surrogate */
+ 0xDCE5,
+ /* plane 3, row 29 */
+ 1 | (94 << 8), /* first, last */
+ 0x712D,0x7232,0x7283,0x7282,0x7287,0x7306,0x7324,0x7338,0x732A,
+ 0x732C,0x732B,0x3E83,0x732F,0x7328,0x7417,0x3ED6,0x3ED5,0x7419,0x7438,
+ 0x3ED1,0x741F,0x7414,0x743C,0x73F7,0x741C,0x7415,0x7418,0x7439,0x74F9,
+ 0x7524,0xD87E,0x3F52,0x3F5F,0x756E,0x756D,0x7571,0x758E,0x3F95,0x75E5,
+ 0x3F9D,0x3F98,0x3F9E,0x3F96,0x7694,0x76B3,0x4003,0x76D9,0x402F,0x7748,
+ 0x7749,0x7743,0x4031,0x4033,0x7742,0x77DF,0x40B4,0x7863,0x7876,0x40B0,
+ 0x785F,0x7866,0x7966,0x7971,0x4108,0x4107,0x7976,0x7984,0x7975,0x79FF,
+ 0x7A07,0x414E,0x7A0E,0x7A09,0x4150,0x4152,0x41A1,0x41A3,0x41A5,0x41CC,
+ 0x7AE7,0x7AE2,0x7B55,0x41EF,0x41EA,0x7B43,0x7B57,0x7B6C,0x7B42,0x7B53,
+ 0x41ED,0x7B41,0x4285,0x4284,0x7CA7,
+ 31, /* first low-surrogate */
+ 0xDD34,
+ /* plane 3, row 30 */
+ 1 | (94 << 8), /* first, last */
+ 0x7CA0,0x7CA6,0x7CA4,0x7D74,0x42DB,0x7D59,0x42D9,0x7D60,0x7D57,
+ 0x7D6C,0x7D7E,0x7D64,0x42D7,0x7D5A,0x7D5D,0x42DA,0x42DE,0x42D8,0x7D76,
+ 0x7D4D,0x7D75,0x42D5,0x7FD3,0x7FD6,0x439C,0x439D,0x8060,0x804E,0x8145,
+ 0x813B,0x43FE,0x8148,0x8142,0x8149,0x8140,0x8114,0x8141,0x4407,0x81EF,
+ 0x81F6,0x8203,0x446A,0x83ED,0x44E7,0x83DA,0x8418,0x83D2,0x8408,0x44E2,
+ 0x8400,0x44DF,0x44E1,0x44E5,0x8417,0x8346,0x8414,0x83D3,0x8405,0x841F,
+ 0x8402,0x8416,0x83CD,0x83E6,0x4591,0x865D,0x86D5,0x86E1,0x45B4,0x45B0,
+ 0x45B5,0x45AE,0x86EE,0x8847,0x8846,0x462D,0x462C,0x88BB,0x462B,0x88BF,
+ 0x88B4,0x4629,0x88B5,0x467F,0x899A,0x8A43,0x46C9,0x46CB,0x8A5A,0x46C5,
+ 0x46C6,0x46CA,0x8A35,0x8A38,0x8A42,
+ /* plane 3, row 31 */
+ 1 | (94 << 8), /* first, last */
+ 0x8A49,0x8A5D,0x8A4B,0x8A3D,0x46D2,0x46D0,0x472D,0x4735,0x8C60,
+ 0x8C5E,0x8C7F,0x8C7E,0x8C83,0x476C,0x8CB1,0x8D87,0x479D,0x47A0,0x8D88,
+ 0x8D83,0x47A2,0x479F,0x8D86,0x8D8B,0x8D82,0x8DCA,0x8DD2,0x47EB,0x47E2,
+ 0x8DD4,0x8DC9,0x8EB0,0x4836,0x4832,0x4850,0x8EF2,0x8EE4,0x8EF3,0x8EEA,
+ 0x484F,0x8EFD,0x4852,0x8F9D,0x902B,0x902A,0x489E,0x9028,0x9029,0x902C,
+ 0x48A0,0x489C,0x903A,0x9030,0x9037,0x903B,0x48D1,0x910A,0x48EF,0x48F0,
+ 0x48F1,0x91FE,0x9220,0x491D,0x920B,0x491F,0x9218,0x9222,0x491E,0x921B,
+ 0x9208,0x4920,0x920E,0x9213,0x498E,0x4991,0x9595,0xD863,0x4990,0x49D7,
+ 0x968C,0x967B,0x967F,0x9681,0x49D9,0x9682,0x49F4,0x49F6,0x3560,0x49F5,
+ 0x49F3,0x96EE,0x96ED,0x4A0C,0x96EC,
+ 77, /* first low-surrogate */
+ 0xDCDD,
+ /* plane 3, row 32 */
+ 1 | (94 << 8), /* first, last */
+ 0x975F,0x976F,0x4A51,0x976D,0x4AA6,0x4AA7,0x4AA8,0x4B27,0x4B24,
+ 0x4B25,0x98F0,0x4B2A,0x4B74,0x4BC7,0x9AA9,0x4BE7,0x4BED,0x9AE0,0x4EB7,
+ 0x342E,0x347B,0x50CC,0x50BC,0x347C,0x50AA,0x50B9,0x347D,0x50AB,0x50C3,
+ 0x50CD,0x517E,0x527E,0x5279,0x34FD,0xD87E,0x52E1,0x52E0,0x52E7,0x5380,
+ 0x53AB,0x53AA,0x53A9,0x53E0,0x55EA,0x35DA,0x55D7,0x35D6,0x35DB,0x55C1,
+ 0x5715,0x365B,0x586C,0x365C,0x585C,0x5850,0x5861,0x586A,0x5869,0x5856,
+ 0x5860,0x5866,0x585F,0x5923,0x5966,0x5968,0x3706,0x370B,0x5ACE,0x370D,
+ 0x5AC5,0x5AC3,0x370A,0x3713,0x5AD0,0x3710,0x3712,0x3709,0x3708,0x3711,
+ 0x370F,0x5B74,0x5B76,0x5BDC,0x5BD7,0x5BDA,0x5BDB,0x3767,0x5C20,0x5D6D,
+ 0x5D66,0x37F6,0x5D64,0x5D6E,0xD87E,
+ 35, /* first low-surrogate */
+ 0xDC23, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xDC7E,
+ /* plane 3, row 33 */
+ 1 | (94 << 8), /* first, last */
+ 0x5D60,0x5F42,0x5F5A,0x5F6E,0x3964,0x396C,0x6130,0x613A,0x612A,
+ 0x6143,0x6119,0x6131,0x396D,0x613D,0x397A,0x3975,0x3A0D,0x6408,0x6432,
+ 0x6438,0x3A1E,0x6431,0x3A1B,0x6419,0x3A2A,0x6411,0x3A1F,0x3A22,0x6429,
+ 0x641D,0x3A25,0x3A27,0x3A29,0x643C,0x3A24,0x6446,0x6447,0x3A28,0x3A26,
+ 0x643A,0x6407,0x3A23,0x656B,0x3A9F,0x6570,0x656D,0x3AB1,0x65E4,0x6693,
+ 0x3B03,0x3B07,0x3B0C,0x3B06,0x668F,0x3B04,0x3B09,0x6692,0x3B05,0x668E,
+ 0x3B08,0x6946,0x3B96,0x3B9C,0x3B9F,0x3B9B,0x3B98,0x3B99,0x3B94,0x6931,
+ 0x3B8D,0x3BA3,0x693E,0x3B93,0x697C,0x6943,0x3B92,0x6973,0xD87E,0x6955,
+ 0x3B8E,0x3B8C,0x6985,0x694D,0x6950,0x6947,0x6967,0x6936,0x6964,0x6961,
+ 0x3B9A,0x697D,0x6B44,0x6B40,0x6B71,
+ 78, /* first low-surrogate */
+ 0xDCE8,
+ /* plane 3, row 34 */
+ 1 | (94 << 8), /* first, last */
+ 0x6B73,0x6B9C,0x3C6A,0x3C6D,0x3C84,0x6BC1,0x3CA0,0x6BFA,0x6C31,
+ 0x6C32,0x3D1D,0x3D26,0x6EB8,0x6EA8,0x3D33,0x6E91,0x6EBB,0x3D38,0x6E9A,
+ 0x3D30,0x3D28,0x6EA9,0x3D27,0x3D2A,0x6EB5,0x6E6C,0x6EE8,0x3D31,0x6EDD,
+ 0x6EDA,0x6EE6,0x6EAC,0x3D34,0x3D2E,0x3D3B,0x6ED9,0x6EE3,0x6EE9,0x6EDB,
+ 0x3D29,0x716F,0x3DD2,0x3DD8,0x7148,0x3DCF,0x714A,0x716B,0x3DD9,0x714F,
+ 0x7157,0x7174,0x3DCE,0x3DD3,0x3DD0,0x7145,0x7151,0x716D,0x3BA1,0x7251,
+ 0x7250,0x724E,0x3E47,0x7341,0x3E8B,0x732E,0x7346,0x3ED4,0x7427,0x3EDE,
+ 0x7448,0x7453,0x743D,0x3EDF,0x745D,0x7456,0x3ED7,0x741E,0x7447,0x7443,
+ 0x7458,0x7449,0x3EE1,0x744C,0x7445,0x743E,0x3F2F,0x7501,0x751E,0x3F62,
+ 0x3F63,0x757A,0x75EE,0x7602,0x7697,
+ /* plane 3, row 35 */
+ 1 | (94 << 8), /* first, last */
+ 0x7698,0x3FE2,0x4004,0x4043,0x775D,0x7764,0x7753,0x7758,0x7882,
+ 0x7890,0x788A,0x40BE,0x787A,0x787D,0x40BA,0x788B,0x7878,0x40BC,0xD87E,
+ 0x788D,0x7888,0x7892,0x7881,0x797E,0x7983,0x410D,0x410E,0x4111,0x7980,
+ 0x410F,0x4112,0x4155,0x7A0F,0x4159,0x415B,0x7A1D,0x4157,0x7AA1,0x7AA4,
+ 0x41CE,0x7AE9,0x7AEA,0x41FE,0x7B62,0x7B6B,0x41FC,0x7B5E,0x41F5,0x7B79,
+ 0x41F9,0x41FA,0x7B6F,0x7B68,0x4288,0x4289,0x7CAE,0x428A,0x4287,0x428B,
+ 0x7CB0,0x42E6,0x7D90,0x42ED,0x7D8A,0x42E5,0x7D8B,0x7D99,0x7D95,0x42E0,
+ 0x7D87,0x7D78,0x7D97,0x7D89,0x7D98,0x42E1,0x435B,0x435C,0x7FA3,0x438F,
+ 0x438B,0x438D,0x7FDD,0x8057,0x43B9,0x8163,0x816A,0x816C,0x440F,0x4419,
+ 0x4413,0x815D,0x8175,0x4418,0x815F,
+ 19, /* first low-surrogate */
+ 0xDD4E,
+ /* plane 3, row 36 */
+ 1 | (94 << 8), /* first, last */
+ 0x4416,0x817D,0x816D,0x4453,0xD87E,0x8241,0x844F,0x8484,0x44F6,
+ 0x847F,0x44F5,0x8448,0x842A,0x847B,0x8472,0x8464,0x842E,0x845C,0x8453,
+ 0x44F7,0x8441,0x84C8,0x44F0,0x8462,0x8480,0x843E,0x8483,0x8471,0x44F9,
+ 0x844A,0x8455,0x8458,0x4592,0x4595,0x4596,0x86FC,0x86FD,0x8715,0x45B9,
+ 0x8716,0x86FF,0x45BD,0x45B8,0x4612,0x8858,0x88CF,0x88E0,0x4680,0x4681,
+ 0x469A,0x4698,0x89E7,0x8A6A,0x8A80,0x46D4,0x8A6F,0x8A65,0x46DA,0x8A78,
+ 0x8A7D,0x8A88,0x46D6,0x46DB,0x8A64,0x8A7E,0x46DC,0x8A67,0x8C63,0x8C88,
+ 0x4771,0x8CCD,0x4772,0x8CC9,0x47A8,0x8DED,0x47F0,0xD87E,0x47F1,0x47FD,
+ 0x4838,0x4837,0x4839,0x8EB1,0x4855,0x4853,0x8F04,0x8F9E,0x8FA0,0x9043,
+ 0x9046,0x9048,0x9045,0x9040,0x904C,
+ 5, /* first low-surrogate */
+ 0xDD8D, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDDDB,
+ /* plane 3, row 37 */
+ 1 | (94 << 8), /* first, last */
+ 0x48D5,0x48BD,0x910C,0x9113,0x9115,0x48F5,0x916B,0x9167,0x925D,
+ 0x9255,0x9235,0x4921,0x9259,0x922F,0x923C,0x928F,0x925C,0x926A,0x9262,
+ 0x925F,0x926B,0x926E,0x923B,0x9244,0x9241,0x959A,0x4992,0x9599,0x49DE,
+ 0x49DB,0x49DA,0x968F,0x49DF,0x9696,0x49F9,0x49F8,0x49FA,0x96F4,0x96FC,
+ 0x4A0E,0x9755,0x4A43,0x9779,0x4A56,0x4A53,0x4A9E,0x97EE,0x97F5,0x4AA9,
+ 0x980B,0x4AFA,0x98F3,0x4B31,0x4B30,0x98F7,0x98FF,0x98F5,0x4B32,0x98EC,
+ 0x98F1,0x4B29,0x4B2E,0x999A,0x4B76,0x9AE2,0x9B3D,0x9B5D,0x9CE8,0x4CA5,
+ 0x9CEB,0x9CEF,0x9CEE,0x9E81,0x9F14,0x50D0,0x50D9,0x50DC,0x50D8,0x348C,
+ 0x50E1,0x50EB,0x348B,0x3489,0x50F4,0x50E2,0x50DE,0x348D,0x3486,0x34D7,
+ 0x51F4,0x3504,0x3507,0x3503,0x52ED,
+ /* plane 3, row 38 */
+ 1 | (94 << 8), /* first, last */
+ 0x52EA,0x3522,0x5332,0x3551,0x53AE,0x53B0,0x3561,0x55FB,0x5603,
+ 0x560B,0x35E9,0x5607,0x35E5,0x55F8,0x35E4,0x5628,0x561E,0x35E3,0x5618,
+ 0x5611,0x5651,0x5605,0x5717,0x5892,0x3665,0x588C,0x3663,0x5878,0x5884,
+ 0x5873,0x58AD,0x5897,0x5895,0x5877,0x5872,0x5896,0x588D,0x5910,0x368C,
+ 0x596C,0x371A,0x5AE7,0x3715,0x5AE4,0x3720,0x3721,0x5AEF,0x5626,0x371C,
+ 0x371B,0x5AF0,0x5D7B,0x37FE,0x5D83,0x3804,0x3801,0x5D8B,0x5D8C,0x3800,
+ 0x5D78,0x5E52,0x386D,0x3893,0x5ED0,0x5ECF,0x38A1,0x5FB3,0x5FB4,0x3976,
+ 0x3979,0x3972,0x617B,0x3983,0x616F,0x6181,0x613C,0x6142,0x6138,0x6133,
+ 0xD87E,0x6160,0x6169,0x617D,0x6186,0x622C,0x6228,0x3A38,0x644C,0x3A30,
+ 0x6457,0x647C,0x3A34,0x3A3A,0x6455,
+ 80, /* first low-surrogate */
+ 0xDCA6,
+ /* plane 3, row 39 */
+ 1 | (94 << 8), /* first, last */
+ 0x6462,0x6471,0x646A,0x6456,0x643B,0x6481,0x3A35,0x644F,0x647E,
+ 0x6464,0x3A3F,0x3A40,0x3A32,0x3A31,0x3A36,0x6571,0xD84C,0x3B0F,0x66A5,
+ 0x669A,0x669C,0x3B10,0x66A6,0x3B0D,0x66A4,0x698F,0x69C5,0x69C8,0x6992,
+ 0x69B2,0x3BA9,0x3BB4,0x3BAC,0x69E3,0x69C0,0x69D6,0x69D1,0x699F,0x69A2,
+ 0x69D2,0x3BB8,0x3BAE,0xD84D,0x69E1,0x69D5,0x699D,0x3BB3,0x3BBA,0x6998,
+ 0x3C3F,0x6B74,0x6BA1,0x3D3C,0x6EF0,0x6EF3,0x3D42,0x3D40,0x6F1B,0x6F0C,
+ 0x6F1D,0x6F34,0x6F28,0x6F17,0x3D3E,0x6F44,0x6F42,0x6F04,0x6F11,0x6EFA,
+ 0x6F4A,0x7191,0x718E,0x3DE1,0x718B,0x718D,0x717F,0x718C,0x717E,0x717C,
+ 0x7183,0x3DE6,0x7188,0x3DE0,0x3E15,0x7294,0x3E93,0x7355,0x7353,0x734F,
+ 0x7354,0x746C,0x7465,0x7466,0x7461,
+ 17, /* first low-surrogate */
+ 0xDCBA, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xDDF3,
+ /* plane 3, row 40 */
+ 1 | (94 << 8), /* first, last */
+ 0x746B,0x7468,0x7476,0x3EE7,0x7460,0xD852,0x7474,0x7506,0x760E,
+ 0x3FAD,0x7607,0x3FAE,0x3FE3,0x76B9,0x3FF5,0x76B7,0x76E2,0x4006,0x7774,
+ 0x7777,0x7776,0x7775,0x404F,0x7778,0x7771,0x4054,0x777A,0x715B,0x777B,
+ 0x78A6,0x78AE,0x78B8,0x40CB,0x40E3,0x40C9,0x78B1,0x78AF,0x4113,0x7989,
+ 0x7987,0x4115,0x4161,0x7A29,0x4166,0x7A2A,0x4164,0x7A2D,0x7A2C,0x4160,
+ 0x7A32,0x4163,0x7AEC,0x7AF0,0x7B81,0x7B9E,0x7B83,0x420A,0x7B92,0x4204,
+ 0x7BA3,0x7B9F,0x7B93,0x4207,0x7B86,0x7CB8,0x7CB7,0x428D,0x428F,0x4290,
+ 0x4292,0x42EC,0x7DC8,0x7DB6,0xD87E,0x7DD1,0x42E7,0x7DA8,0x7DAB,0x42F2,
+ 0x7DB3,0x7DCD,0x42EE,0x7DCF,0x7DA4,0x42EF,0x434C,0x7F41,0x7F6F,0x7F71,
+ 0x435E,0x435F,0x4376,0x4374,0x4372,
+ 6, /* first low-surrogate */
+ 0xDE0F, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xDD6C,
+ /* plane 3, row 41 */
+ 1 | (94 << 8), /* first, last */
+ 0x4390,0x8023,0x805B,0x43BE,0x8061,0x805F,0x8181,0x4426,0x4425,
+ 0x8184,0x8213,0x4474,0x824A,0x824C,0x44FD,0x4505,0x4501,0x84BD,0x8495,
+ 0x4509,0x8492,0x84C3,0x450C,0x8496,0x84A5,0x84B5,0x84B3,0x84A3,0x84E4,
+ 0x84D8,0x84D5,0x450D,0x84B7,0x84AD,0x84DA,0x8493,0x8736,0x45C0,0x45C5,
+ 0x45C9,0x873D,0x872B,0x8747,0x8739,0x45D5,0x8745,0x871D,0x4641,0x88FF,
+ 0x88EA,0x4633,0x88F5,0x463A,0x8900,0x88ED,0x8903,0x88E9,0x4640,0x4642,
+ 0x89EA,0x46E8,0x8A9B,0x8A8E,0x8AA2,0x46E4,0x8A9C,0x8A94,0x8A90,0x8AA9,
+ 0x8AAC,0x46E7,0x8A9F,0x46E6,0x46E1,0x8A9D,0x4739,0x8C67,0x475C,0x4775,
+ 0x8CD0,0x8CD6,0x8CD4,0x8D98,0x8D9A,0x8D97,0x47AE,0x47B0,0x47FA,0x8E0B,
+ 0x8E08,0x8E01,0x8EB4,0x8EB3,0x485B,
+ /* plane 3, row 42 */
+ 1 | (94 << 8), /* first, last */
+ 0x8FA1,0x8FA2,0x48A5,0x905A,0x48A2,0x9061,0x905F,0x48DB,0x48DA,
+ 0x9125,0x917B,0x9176,0x917C,0x4924,0x9289,0x92F6,0x92B1,0x92AD,0x9292,
+ 0x9281,0x9284,0x4926,0x92AE,0x9290,0x929E,0x4998,0x4996,0x499A,0x95A2,
+ 0x95A7,0x4997,0x49E1,0x49E0,0x49E3,0x49E2,0x96A0,0x969D,0x969F,0x96D0,
+ 0x49FB,0x96D1,0x4A12,0x4A14,0x9759,0x4A45,0x9764,0x4A5C,0x4A5D,0x4AB8,
+ 0x9819,0x4ABA,0x9814,0x9815,0x981A,0x4B03,0x4B35,0x4B36,0x4B39,0x9906,
+ 0x4B2D,0x98F8,0x9901,0x4B7A,0x99BE,0x99BC,0x99B7,0x99B6,0x99C0,0x4B78,
+ 0x99B8,0x4B7B,0x4B7C,0x4B7E,0x99C4,0x4B7D,0x99BF,0x4BC9,0x9ADA,0x9AE4,
+ 0x9AE9,0x9AE8,0x9AEA,0x9AE5,0x4BF3,0x9B26,0x4C1A,0x4C19,0x9B40,0x4C1F,
+ 0x4CA6,0x4CA7,0x4CA8,0x4CAB,0x4CA9,
+ /* plane 3, row 43 */
+ 1 | (94 << 8), /* first, last */
+ 0x4D2E,0x9EBD,0x4D5E,0x3495,0x3493,0x3492,0x510E,0x3496,0x50F7,
+ 0x3497,0x50FC,0x510D,0x5101,0x51DA,0x51D9,0x51DB,0x5286,0x528E,0x52EE,
+ 0x5333,0x53B1,0x35F5,0x5647,0x562D,0x5654,0x35EA,0x564B,0x5652,0x5631,
+ 0x5644,0x5656,0x5650,0x562B,0x35F3,0x564D,0x5637,0x564F,0x58A2,0x58B7,
+ 0x3669,0x58B2,0x366B,0x58AA,0x58B5,0x58B0,0x366C,0x58B4,0x58A4,0x58A7,
+ 0x3668,0x5926,0x5AFE,0x3728,0x5B04,0x3726,0x5AFC,0x3725,0x5B06,0x5B0A,
+ 0x5AFA,0x5B0D,0x5B00,0x5B0E,0x376B,0x380F,0x3808,0x5D91,0x380C,0x5D8F,
+ 0x5D90,0x5D98,0x5DA4,0x5D9B,0x5DA3,0x5D96,0x5DE4,0x5E5A,0x3860,0x3862,
+ 0x5E5E,0x3898,0x5FB8,0x6157,0x615C,0x61A6,0x6195,0x6188,0x398A,0x61A3,
+ 0x618F,0x3984,0x6164,0x397F,0x6159,
+ /* plane 3, row 44 */
+ 1 | (94 << 8), /* first, last */
+ 0x6178,0x3982,0x6185,0x6187,0x619E,0x3996,0x3989,0x6198,0x619C,
+ 0x398D,0x39BC,0x622F,0x6480,0x649B,0x648E,0x648D,0x6494,0x64C6,0x3A44,
+ 0x64A8,0x6483,0x3A3C,0x64B9,0x6486,0x64B4,0x64AF,0x6491,0x3A4E,0x64AA,
+ 0x64A1,0x64A7,0x66B6,0x66B3,0x3B14,0x66BC,0x66AC,0x3B15,0x66AD,0x6A0E,
+ 0x3BCE,0x6A1C,0x6A1A,0x3BE0,0x3BC2,0x6A0B,0x3BBF,0x69EF,0x6A0C,0x69F0,
+ 0x6A22,0x3BC4,0x69D8,0x3BCF,0x6A12,0x69FA,0x3BC8,0x6A2A,0x3BCC,0x6A10,
+ 0x3BCD,0x3BC7,0x6A29,0x69F9,0x69EA,0x6A2C,0x6A24,0x4CB7,0x69E9,0x6B52,
+ 0x6B4F,0x6B53,0x3C43,0x3CB6,0x6F10,0x6F65,0x6F75,0x3D51,0x3D4A,0x3D4D,
+ 0x3D56,0x6FD0,0x3D53,0x6F5C,0x6F3D,0x6F71,0x3D59,0x6F91,0x6F0B,0x6F79,
+ 0x6F81,0x6F8F,0x3D4E,0x6F59,0x6F74,
+ /* plane 3, row 45 */
+ 1 | (94 << 8), /* first, last */
+ 0x3DEE,0x71AE,0x3DEC,0x71A3,0x71AD,0x3DEB,0x3DEF,0x71AB,0x71A6,
+ 0x71A2,0x3DED,0x52F2,0x7257,0x7255,0x7299,0x734B,0x747A,0x3EF2,0x3EEF,
+ 0x3EF1,0x748C,0x7484,0x3EED,0x3EF0,0x7482,0x7493,0x747B,0x3EEE,0x7509,
+ 0x4C1B,0x3F50,0x3F66,0x3684,0x3FB8,0x3FF6,0x778A,0x4057,0x7790,0x405E,
+ 0x78C6,0x78D3,0x78C0,0x78D2,0x78C7,0x78C2,0x4119,0x799F,0x799D,0x799E,
+ 0x4170,0x7A41,0x416E,0x7A38,0x7A3A,0x7A42,0x4172,0x4176,0x7A3E,0x7AB0,
+ 0x7BAE,0x7BB3,0x4212,0x421F,0x7BBF,0x4211,0x4216,0x7BCD,0x4219,0x7BB2,
+ 0x4224,0x4214,0x4225,0x4295,0x4296,0x4293,0x4294,0x7CC4,0x7CCD,0x7CC2,
+ 0x7CC6,0x7CC3,0x7CC9,0x7CC7,0x42A0,0x7DF8,0x42FB,0x7DED,0x7DE2,0x42FC,
+ 0x4300,0x42F8,0x7DDC,0x7E02,0x7E01,
+ /* plane 3, row 46 */
+ 1 | (94 << 8), /* first, last */
+ 0x42F9,0x7DD6,0x4304,0x7DE4,0x7DFE,0x4303,0x7E00,0x7DFC,0x7DFD,
+ 0x42F3,0x7DF5,0x7DFF,0x42FA,0x7DEB,0x7DE5,0x7F78,0x7FAE,0x7FE7,0x43BF,
+ 0x8065,0x806A,0x8066,0x8068,0x806B,0x8194,0x81A1,0x8192,0x8196,0x8193,
+ 0x4479,0x4510,0x8501,0x4514,0x84F8,0x450E,0x84F5,0x451A,0x8504,0x4519,
+ 0x4521,0x4523,0x451F,0x851B,0x8503,0x8533,0x8534,0x84ED,0x4525,0x452B,
+ 0x8535,0x4516,0x8505,0x4522,0x451B,0x45CE,0x45CF,0x877D,0x45CB,0x45D1,
+ 0x45CC,0x8771,0x4617,0x885C,0x88E6,0x890F,0x891B,0x4651,0x89A9,0x89A5,
+ 0x89EE,0x8AB1,0x46ED,0x8ACC,0x8ACE,0x46F4,0x8AB7,0x46F1,0x8AB5,0x8AE9,
+ 0x8AB4,0x46F8,0x8AB3,0x8AC1,0x8AAF,0x8ACA,0x8AD0,0x472F,0x475E,0x475D,
+ 0x8C8E,0x4776,0x4777,0x8CE9,0x8CDB,
+ /* plane 3, row 47 */
+ 1 | (94 << 8), /* first, last */
+ 0x477E,0x8CEB,0x8DA4,0x47B6,0x8DA2,0x8D9D,0x47B3,0x47FC,0x4803,
+ 0x4800,0x8E2A,0x8E28,0x480A,0x4802,0x8EB8,0x8EB6,0x8EB9,0x8EB7,0x8F22,
+ 0x8F2B,0x8F27,0x8F19,0x8FA4,0x4887,0x8FB3,0x48A6,0x9071,0x906A,0x48A9,
+ 0x48DE,0x9188,0x918C,0x92BF,0x92B8,0x92BE,0x92DC,0x92E5,0x492E,0x492D,
+ 0x92D4,0x92D6,0x4930,0x92DA,0x92ED,0x92F3,0x92DB,0x492B,0x92B9,0x92E2,
+ 0x92EB,0x95AF,0x499E,0x95B2,0x95B3,0x499F,0x49E5,0x49E4,0x96A3,0x96A5,
+ 0x49FD,0x49FC,0x4A17,0x4A19,0x970A,0x4A18,0x9787,0x9789,0x978C,0x97EF,
+ 0x982A,0x9822,0x4ABF,0x981F,0x4B3C,0x9919,0x4B6B,0x99CA,0x99DA,0x4B83,
+ 0x4B81,0x4B80,0x99DE,0x99C8,0x99E0,0x4BCA,0x9AB6,0x9AB5,0x4BCE,0x9AF4,
+ 0x4BF6,0x9B6B,0x9B69,0x9B72,0x9B63,
+ /* plane 3, row 48 */
+ 1 | (94 << 8), /* first, last */
+ 0x4C39,0x9D0D,0x4CAE,0x9D01,0x9D0C,0x4CB5,0x9CF8,0x4CB3,0x4CB4,
+ 0x9CFE,0x9D02,0x9E84,0x4D22,0x9EAB,0x9EAA,0x511D,0x5116,0x3499,0x512B,
+ 0x511E,0x511B,0x5290,0x5294,0x5314,0xD842,0x3602,0x5667,0x3601,0x567B,
+ 0x36A1,0x565F,0x5661,0x35FD,0x3673,0x3674,0x3670,0x3676,0x3675,0x3672,
+ 0x58C3,0x58CA,0x58BB,0x58C0,0x58C4,0x5901,0x5B1F,0x5B18,0x5B11,0x5B15,
+ 0x3729,0x5B12,0x5B1C,0x372A,0x5B22,0x5B79,0x5DA6,0x3816,0x5DB3,0x5DAB,
+ 0x5EEA,0x3899,0x5F5B,0x38D3,0x38F5,0x61B7,0x61CE,0x61B9,0x61BD,0x61CF,
+ 0x61C0,0x6199,0x6197,0x3994,0x61BB,0x61D0,0x61C4,0x6231,0x3A56,0x64D3,
+ 0x64C0,0x3A59,0x3A58,0x3A55,0x3A52,0x64DC,0x64D1,0x64C8,0x3A57,0x64D5,
+ 0x66C3,0x3B1B,0x3B1C,0x66BF,0x66C5,
+ 25, /* first low-surrogate */
+ 0xDF89,
+ /* plane 3, row 49 */
+ 1 | (94 << 8), /* first, last */
+ 0x3B19,0x66CD,0x66C1,0x6706,0x3B3F,0x6724,0x6A63,0x6A42,0x6A52,
+ 0x3BDB,0x6A43,0x6A33,0x3BE2,0x6A6C,0x6A57,0x3BD7,0x6A4C,0x6A6E,0x3BDE,
+ 0x3BE5,0x3BE4,0x3BE6,0x3BD6,0x6A37,0x3BDF,0x6A71,0x6A4A,0x6A36,0x3BDC,
+ 0x6A53,0x3BDA,0x6A45,0x6A70,0x3BD3,0x3BD0,0x6A5C,0x6B58,0x6B57,0x3C86,
+ 0x3C87,0x3CAD,0x3CB7,0x3D58,0x3D6A,0x6FBB,0x3D62,0x3D61,0x6FBE,0x3D69,
+ 0x3D6C,0x3D65,0x6FB5,0x6FD3,0x6F9F,0x3D66,0x6FB7,0x6FF5,0x71B7,0x3DF5,
+ 0x71BB,0x3DF4,0x71D1,0x3DF7,0x71BA,0x3DF8,0x71B6,0x71CC,0x3DFB,0x3DFC,
+ 0x71D3,0x749B,0x3EF5,0x3EF8,0x7496,0x74A2,0x749D,0x750A,0x750E,0x3F3C,
+ 0x7581,0x762C,0x7637,0x7636,0x763B,0x3FC5,0x76A1,0x4062,0x4063,0x7798,
+ 0x4067,0x7796,0x4066,0x40D9,0x40DB,
+ /* plane 3, row 50 */
+ 1 | (94 << 8), /* first, last */
+ 0x78D6,0x78EB,0x40D8,0x78DC,0x411B,0x79A5,0x79A9,0x9834,0x7A53,
+ 0x7A45,0x4179,0x7A4F,0x417D,0x7ABD,0x7ABB,0x7AF1,0x422C,0x4237,0x7BEC,
+ 0x7BED,0x4230,0x429A,0x7CD3,0x4A00,0x7CE1,0x4305,0x7E19,0x4307,0x4309,
+ 0x430A,0x7E27,0x7E26,0x4379,0x43C2,0x806E,0x81AF,0x4438,0x4437,0x81AD,
+ 0x4421,0x81AA,0x8218,0x445E,0x453D,0x4537,0x4540,0x856F,0x854C,0x451D,
+ 0x8542,0x4533,0x855C,0x8570,0x855F,0x4535,0x855A,0x854B,0x853F,0x878A,
+ 0x45D8,0x878B,0x87A1,0x878E,0x45DC,0x45DE,0x8799,0x885E,0x885F,0x8924,
+ 0x89A7,0x8AEA,0x8AFD,0x8AF9,0x8AE3,0x8AE5,0x46FA,0x46FB,0x8AEC,0x473D,
+ 0x473B,0x473F,0x475F,0x8CF2,0x477F,0x8CEF,0x4784,0x8DA6,0x47BC,0x4814,
+ 0x480F,0x8E3B,0x8E43,0x480E,0x8E32,
+ /* plane 3, row 51 */
+ 1 | (94 << 8), /* first, last */
+ 0x8F31,0x8F30,0x4860,0x8F2D,0x8F3C,0x8FA7,0x8FA5,0x48AB,0x48AC,
+ 0x48AA,0x9137,0x9195,0x918E,0x4904,0x9196,0x4908,0x9345,0x930A,0x4933,
+ 0x4934,0x92FD,0x9317,0x931C,0x9307,0x9331,0x9332,0x932C,0x9330,0x9303,
+ 0x9305,0x49A2,0x95C2,0x49A4,0x95B8,0x49A5,0x95C1,0x49A7,0x49A6,0x49E7,
+ 0x96AB,0x96B7,0x49FF,0x49FE,0x9715,0x9714,0x4A1D,0x4A1C,0x970C,0x9717,
+ 0x4A67,0x9793,0x4A94,0x97D2,0x4AC5,0x4AC8,0x9836,0x9831,0x9833,0x983C,
+ 0x982E,0x983A,0x4AC9,0x983D,0x4AC7,0x98B5,0x9922,0x9923,0x9920,0x991C,
+ 0x991D,0x4B6C,0x99A0,0x4B8A,0x99EF,0x99E8,0x99EB,0x4B88,0x4B87,0x4B86,
+ 0x99E1,0x99E6,0x4BCF,0x4BD0,0x9AF8,0x9AF5,0x4C1C,0x4C23,0x9B83,0x9B94,
+ 0x9B84,0x4C49,0x9B8B,0x9B8F,0x4C43,
+ /* plane 3, row 52 */
+ 1 | (94 << 8), /* first, last */
+ 0x9B8C,0x4C48,0x9B89,0x4C47,0x9B8E,0x4C46,0x4C3F,0x4C44,0x9D24,
+ 0x9D0F,0x4CBE,0x9D13,0x9D0A,0x4CC2,0x4CBA,0x4CBC,0x4CC6,0x9D2A,0x9D1A,
+ 0x4CC8,0x9D27,0x9D16,0x9D21,0x4D23,0x9E85,0x9EAC,0x9EC6,0x9EC5,0x9ED7,
+ 0x9F53,0x349D,0x5128,0x5127,0x51DF,0x3524,0x5335,0x53B3,0x3607,0x568A,
+ 0x567D,0x5689,0x3679,0x58CD,0x58D0,0x3678,0x5B2B,0x5B33,0x5B29,0x5B35,
+ 0x5B31,0x5B37,0x5C36,0x5DBE,0x3819,0x5DB9,0x381C,0x5DBB,0x3818,0x61E2,
+ 0x61DB,0x61DD,0x61DC,0x61DA,0xD87E,0x61D9,0x39BD,0x3A5D,0x64DF,0x3A5A,
+ 0x3A5E,0x64E1,0x3A5C,0x64EE,0x3A5B,0x65B5,0x66D4,0x66D5,0x3B21,0x66D0,
+ 0x66D1,0x66CE,0x66D7,0x3B20,0x3B32,0x6A7D,0x6A8A,0x3BF2,0x6AA7,0x3BF5,
+ 0x6A99,0x6A82,0x6A88,0x3BEE,0x3BEC,
+ 64, /* first low-surrogate */
+ 0xDCAF,
+ /* plane 3, row 53 */
+ 1 | (94 << 8), /* first, last */
+ 0x6A86,0x3BEA,0x6A98,0x6A9D,0x3BED,0x3BF3,0x6A8F,0x3BF6,0x6AAA,
+ 0x3C48,0x6B5D,0x3C49,0x6C0A,0x3D75,0x6FD7,0x6FD6,0x6FE5,0x3D6F,0x3D7B,
+ 0x3D73,0x6FD9,0x6FDA,0x6FEA,0x3D70,0x6FF6,0xD850,0x3D78,0x71E3,0x3DFE,
+ 0x71E9,0x3E00,0x71EB,0x71EF,0x71F3,0x71EA,0x3E01,0xD87E,0x3E55,0x3E56,
+ 0x3E9D,0x7371,0x3EF9,0x74AE,0x3EFF,0x74B3,0x3EFD,0x74AC,0x3F43,0x3F41,
+ 0x7583,0x7645,0x764E,0x7644,0x76A3,0x76A5,0x77A6,0x77A4,0x406F,0x77A9,
+ 0x77AF,0x408A,0x40E5,0x40E6,0x78F0,0x78F8,0x78F1,0x417F,0x7A49,0x41B5,
+ 0x41B6,0x41BB,0x7AC2,0x7AF2,0x7AF3,0x7BFA,0x4240,0x7BF6,0x7BFC,0x7C18,
+ 0x7C08,0x7C12,0x429D,0x429C,0x7CDB,0x7CDA,0x430F,0x4311,0x430D,0x7E2C,
+ 0x7E4D,0x4314,0x4313,0x7F46,0x7FF6,
+ 26, /* first low-surrogate */
+ 0xDC39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDD21,
+ /* plane 3, row 54 */
+ 1 | (94 << 8), /* first, last */
+ 0x802B,0x8074,0x81B8,0x81C8,0x4482,0x4483,0x454D,0x8592,0x8593,
+ 0x454F,0x857F,0x85AB,0x8597,0x454C,0x4551,0x85AC,0x45EE,0x45E8,0x4CCB,
+ 0x87CE,0x45EB,0x87CD,0x45E2,0x45E6,0x87C1,0x87B1,0x87C7,0x45EC,0x8940,
+ 0x4659,0x893F,0x8939,0x465D,0x8943,0x4657,0x465B,0x4656,0x89AB,0x46FE,
+ 0x8B1F,0x8B09,0x8B0C,0x4700,0x4701,0x8C40,0x4742,0x8C96,0x4760,0x8CF6,
+ 0x8CF7,0x481D,0x8E46,0x8E4F,0x483E,0x4869,0x4865,0x8F3D,0x8F41,0x9366,
+ 0x9378,0x935D,0x9369,0x9374,0x937D,0x936E,0x9372,0x9373,0x9362,0x9348,
+ 0x9353,0x935F,0x9368,0x4938,0x937F,0x936B,0x49AE,0x95C4,0x49AD,0x96AF,
+ 0x96AD,0x96B2,0x4A02,0x4A1F,0x971A,0x971B,0x4A22,0x4A20,0xD87E,0x4A6C,
+ 0x979B,0x979F,0x4A68,0x4A6D,0x4A6E,
+ 88, /* first low-surrogate */
+ 0xDDF5,
+ /* plane 3, row 55 */
+ 1 | (94 << 8), /* first, last */
+ 0x4AA0,0x4ACE,0x4AD0,0x4AD1,0x4ACB,0x9840,0x4AD2,0x9847,0x4AD3,
+ 0x98B7,0x4B20,0x4B4E,0x4B4B,0x4B72,0x4B70,0x99A2,0x4B92,0x4B8F,0x9A00,
+ 0x99F3,0x4B90,0xD866,0x99F5,0x4BD9,0x4BD5,0x9ABD,0x9B00,0x9B02,0x4BFA,
+ 0x9B34,0x9B49,0x9B9F,0x4C4B,0x9BA3,0x9BCD,0x9B99,0x9B9D,0x4CD0,0x4CCE,
+ 0x9D39,0x4CCF,0x9D44,0x4CC4,0x4CCC,0x9D35,0x4CD2,0x4D35,0x9EAF,0x3E03,
+ 0x512F,0x349E,0x34AF,0x9F8E,0x360C,0x569F,0x569B,0x569E,0x5696,0x5694,
+ 0x56A0,0x367C,0x5B3B,0x3730,0x3731,0x5B3A,0x5DC1,0x5F4D,0x5F5D,0x61F3,
+ 0x39A1,0x399E,0x3A68,0x3A61,0x64F6,0x64E5,0x64EA,0x64E7,0x6505,0x3A65,
+ 0x64F9,0x3A66,0x3A6A,0x3AAB,0x6AAB,0x6AED,0x6AB2,0x6AB0,0x6AB5,0x6ABE,
+ 0x6AC1,0x6AC8,0x3BF9,0x6AC0,0x6ABC,
+ 22, /* first low-surrogate */
+ 0xDD37,
+ /* plane 3, row 56 */
+ 1 | (94 << 8), /* first, last */
+ 0x6AB1,0x6AC4,0x6ABF,0x3C58,0x3C8A,0x7008,0x7003,0x6FFD,0x7010,
+ 0x7002,0x7013,0x3E04,0x71FA,0x7200,0x74B9,0x74BC,0x3F02,0x765B,0x7651,
+ 0x764F,0x76EB,0x77B8,0x4079,0x77B9,0x77C1,0x77C0,0x77BE,0x790B,0x40EB,
+ 0x7907,0x790A,0x7908,0x40E9,0x790D,0x7906,0x7915,0x79AF,0x4120,0x4121,
+ 0x4181,0x7AF5,0x424D,0x4259,0x7C2E,0x4258,0x7C1B,0xD857,0x7C1A,0x7C24,
+ 0x42A5,0x42A9,0x7CE6,0x7CE3,0x431A,0x4319,0x7E5D,0x7E4F,0x7E66,0x7E5B,
+ 0x7F47,0x7FB4,0x4396,0x4398,0x4397,0x7FFA,0x802E,0xD859,0x43C8,0x81CE,
+ 0x4443,0x4445,0x8219,0x4552,0x4557,0x85CC,0x85B2,0x4555,0x85BB,0x85C1,
+ 0x4556,0x4558,0x45F2,0x87E9,0x87EE,0x87F0,0x87D6,0x880E,0x87DA,0x8948,
+ 0x894A,0x894E,0x894D,0x89B1,0x89B0,
+ 47, /* first low-surrogate */
+ 0xDCD1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDDDF,
+ /* plane 3, row 57 */
+ 1 | (94 << 8), /* first, last */
+ 0x89B3,0x4707,0x8B38,0x8B32,0x4708,0x8B2D,0x470A,0x8B34,0x431B,
+ 0x8B29,0x8C74,0x4761,0x4762,0x8D03,0x47C2,0x47C6,0x8DA9,0x8E58,0x481E,
+ 0x4825,0x8EBF,0x8EC1,0x8F4A,0x8FAC,0x48B0,0x9089,0x913D,0x913C,0x91A9,
+ 0x93A0,0x493D,0x9390,0x493E,0x9393,0x938B,0x93AD,0x93BB,0x93B8,0x4946,
+ 0x4945,0x939C,0x95D8,0x95D7,0x4A03,0x4A26,0x4A27,0x975D,0x97A9,0x97DA,
+ 0x4A98,0x4AAD,0x4AD5,0x4ADA,0x9854,0x4AD9,0x9855,0x984B,0x4ADD,0x983F,
+ 0x98B9,0x4B15,0x4B16,0x4B17,0x4B21,0x9938,0x9936,0x9940,0x4B4C,0x993B,
+ 0x9939,0x99A4,0x4B96,0x4B98,0x9A08,0x9A0C,0x4B9B,0x9A10,0x4BFF,0x9B07,
+ 0x4C25,0x9BD2,0x4C4F,0x9BC2,0x9BBB,0x9BCC,0x9BCB,0x4C56,0x4C54,0x9D4D,
+ 0x9D63,0x9D4E,0x4CD8,0x9D50,0x9D55,
+ /* plane 3, row 58 */
+ 1 | (94 << 8), /* first, last */
+ 0x4CD7,0x9D5E,0x4D26,0x9E90,0x9EB2,0x9EB1,0x4D38,0x9ECA,0x9F02,
+ 0x9F27,0x9F26,0x4D8A,0x56AF,0x58E0,0x58DC,0x3734,0x5B39,0x3735,0xD87E,
+ 0x5B7C,0x5BF3,0xD87E,0x37A1,0x5C6B,0x5DC4,0x650B,0x6508,0x650A,0x3A6C,
+ 0x3A6D,0x65DC,0x3B29,0x3B2A,0x66E1,0x66DF,0x6ACE,0x6AD4,0x6AE3,0x6AD7,
+ 0x6AE2,0x3C00,0x3C08,0x3C06,0x3C05,0x6AD8,0x6AD5,0x6AD2,0x3CB1,0x3D88,
+ 0x701E,0x702C,0x7025,0x6FF3,0x7204,0x7208,0x7215,0x3E09,0x74C4,0x74C9,
+ 0x74C7,0x74C8,0x76A9,0x77C6,0x77C5,0x7918,0x791A,0x7920,0x4122,0x7A66,
+ 0x7A64,0x7A6A,0x41D5,0x4261,0x425D,0x4262,0x424F,0x4260,0x7C35,0x7C34,
+ 0x42AA,0x4322,0x7E6C,0x4321,0x7E6E,0x7E71,0x4446,0x81D4,0x81D6,0x821A,
+ 0x8262,0x8265,0x8276,0x85DB,0x85D6,
+ 19, /* first low-surrogate */
+ 0xDC6A,
+ 0, 0,0xDC70,
+ /* plane 3, row 59 */
+ 1 | (94 << 8), /* first, last */
+ 0x4562,0x85E7,0x4560,0x4564,0x85F4,0xD87E,0x87FD,0x87D5,0x8807,
+ 0x45F6,0x880F,0x87F8,0xD87E,0x4619,0x8987,0x4691,0x89B5,0x89F5,0x470D,
+ 0x8B3F,0x8B43,0x8B4C,0x4765,0x8D0B,0x8E6B,0x8E68,0x8E70,0x8E75,0x8E77,
+ 0x483F,0x8EC3,0x494B,0x93E9,0x93EA,0x93CB,0x93C5,0x93C6,0x4948,0x93ED,
+ 0x93D3,0x4952,0x93E5,0x494A,0x4951,0x93DB,0x93EB,0x93E0,0x93C1,0x4950,
+ 0x494C,0x95DD,0x49EE,0x4A04,0x4A06,0x4A2D,0x4A2E,0x4A2F,0x4A7B,0x4A78,
+ 0x4A77,0x97B2,0x97B4,0x97B1,0x97B5,0x97F2,0x4AA2,0x4AA1,0x4AE3,0x9856,
+ 0x4B1A,0x4B19,0x4B57,0x9944,0x4B9E,0x9A26,0x9A1F,0x9A18,0x9A21,0x9A17,
+ 0x4BDD,0x9B09,0x4C05,0x4C28,0x9BC5,0x9BDF,0x4C60,0x9BE3,0x4C66,0x9BE9,
+ 0x9BEE,0x4C67,0x4C68,0x9D66,0x9D7A,
+ 6, /* first low-surrogate */
+ 0xDDB6, 0, 0, 0,
+ 0, 0, 0,0xDDC1,
+ /* plane 3, row 60 */
+ 1 | (94 << 8), /* first, last */
+ 0x4CDE,0x9D6E,0x9D91,0x9D83,0x9D76,0x9D7E,0x9D6D,0x4CE1,0x9E95,
+ 0x9EE3,0x4D69,0x4D77,0x9F03,0x9F04,0xD87E,0x9F17,0x34A6,0x5136,0x34A5,
+ 0x5336,0x3614,0x5B42,0x3736,0x3738,0x5B44,0x5B46,0x5B7E,0x5DCA,0x5DC8,
+ 0x5DCC,0x5EF0,0x3A70,0x6585,0x66E5,0x66E7,0x3B2B,0x3C11,0x3C0A,0x6AF4,
+ 0x3C0D,0x6AE9,0x3C16,0x3C10,0x3C09,0x3C0E,0x3C7A,0x703D,0x3D8C,0x7036,
+ 0x3D91,0x7216,0x3E0A,0x7212,0x720F,0x7217,0x7211,0x720B,0x3E08,0x3E0B,
+ 0x74CD,0x74D0,0x74CC,0x74CE,0x74D1,0x3F07,0x7589,0x40F2,0x7A6F,0x7C4B,
+ 0x7C44,0x7C55,0x42AE,0x4324,0x4326,0x4327,0x7E7F,0x8B71,0x4399,0x802F,
+ 0x807A,0x807B,0x807C,0x455F,0x456A,0x4571,0x85FC,0x8610,0x8602,0x456C,
+ 0x456F,0x85EE,0x8603,0x4568,0x860D,
+ 15, /* first low-surrogate */
+ 0xDE19,
+ /* plane 3, row 61 */
+ 1 | (94 << 8), /* first, last */
+ 0x8613,0x8608,0x860F,0x8818,0x8812,0x4601,0x4668,0x8967,0x8965,
+ 0x89BB,0x8B69,0x8B62,0x4713,0x8B6E,0x4716,0x8B61,0x4718,0x8B64,0x8B4D,
+ 0x8C51,0x4789,0x47C8,0x8E83,0x8EC6,0x4884,0x941F,0x4954,0x9404,0x9417,
+ 0x9408,0x9405,0x4956,0x93F3,0x941E,0x9402,0x941A,0x941B,0x9427,0x941C,
+ 0x495A,0x96B5,0x4A05,0x4A07,0x9733,0x4A31,0x9734,0x9731,0x97B8,0x97BA,
+ 0x4AA3,0x97FC,0x4AEB,0x4B1C,0x98C3,0x4B5A,0x994D,0x4B5B,0x9A2F,0x4BA6,
+ 0x4BAA,0x4BA5,0x9AC9,0x4BE1,0x9AC8,0x9AC4,0x9B2A,0x9B38,0x9B50,0x4C2A,
+ 0x9C0A,0x9BFB,0x9C04,0x9BFC,0x9BFE,0x4C72,0x4C6F,0x4C73,0x9C02,0x9BF6,
+ 0x9C1B,0x9BF9,0x9C15,0x9C10,0x9BFF,0x9C00,0x9C0C,0x4C6B,0x4CE6,0x9D95,
+ 0x9DA5,0x4CE9,0x4CEC,0x4CE8,0x4CF0,
+ /* plane 3, row 62 */
+ 1 | (94 << 8), /* first, last */
+ 0x9E98,0x9EC1,0x4D8C,0x9F5A,0x5164,0x56BB,0x3615,0x58E6,0x5B49,
+ 0x5BF7,0x3771,0x3826,0x5DD0,0x38C6,0x5FC2,0x39A8,0x6511,0x3A73,0x6AFF,
+ 0x6AFE,0x6AFD,0x3C15,0x6B01,0x3D98,0x3D97,0x704B,0x704D,0x7047,0x74D3,
+ 0x7668,0x7667,0x3FD7,0x4080,0x77D1,0x7930,0x7932,0x792E,0x4188,0x9F9D,
+ 0x7AC9,0x7AC8,0x4269,0x7C56,0x7C51,0x426B,0x4329,0x4328,0x7E85,0x7E89,
+ 0x7E8E,0x7E84,0x445F,0x826A,0x862B,0x862F,0x8628,0x4574,0x8616,0x8615,
+ 0x861D,0x881A,0x4602,0x466A,0x4694,0x89BC,0x8B75,0x8B7C,0x478A,0x8D11,
+ 0x8D12,0x8F5C,0x91BB,0x4964,0x93F4,0x495E,0x4961,0x942D,0x4965,0x4966,
+ 0x96E4,0x9737,0x9736,0x9767,0x97BE,0x97BD,0x97E2,0x9868,0x9866,0x98C8,
+ 0x98CA,0x98C7,0x98DC,0x4B5F,0x994F,
+ /* plane 3, row 63 */
+ 1 | (94 << 8), /* first, last */
+ 0x99A9,0x9A3C,0x4BAF,0x9A3B,0x9ACE,0x4C0D,0x9B14,0x9B53,0x4C7C,
+ 0x9C2E,0x4C7A,0x9C1F,0x4C76,0x4C79,0x4C7D,0x4C77,0x9DB0,0x9DBD,0x4CF6,
+ 0x4CF1,0x9DAE,0x9DC4,0x9E7B,0x400B,0x4D29,0x9E9E,0x4D6F,0x9F05,0x4D9A,
+ 0x9F69,0x9FA1,0x56C7,0x571D,0x5B4A,0x5DD3,0x3869,0x5F72,0x6202,0x39AB,
+ 0x6235,0x6527,0x651E,0x651F,0x3B2C,0x3B2D,0x6B07,0x6B06,0x3C17,0x3D9A,
+ 0x7054,0x721C,0x7220,0x7AF8,0x426E,0x7C5D,0x7C58,0x432C,0x7E92,0x7F4E,
+ 0x43CA,0x4578,0x4606,0x8827,0x4607,0x8B81,0x8B83,0x4720,0x8C44,0x4753,
+ 0x47CE,0x487A,0x4879,0x9442,0x944D,0x9454,0x944E,0x496B,0x9443,0x4967,
+ 0x496D,0x973C,0x9740,0x97C0,0x4A85,0x4AB0,0x4AF3,0x4B63,0x995A,0x9A51,
+ 0x4BB6,0x9ADD,0x4C82,0x4C7F,0x9C38,
+ /* plane 3, row 64 */
+ 1 | (94 << 8), /* first, last */
+ 0x4C86,0x9C45,0x9C3A,0x4C84,0x9C35,0x4CFC,0x4CFD,0x4CFA,0x9EF1,
+ 0x4D87,0x9F93,0x529A,0x361A,0x3619,0x8641,0x5DD7,0x3A75,0x6528,0x3C1A,
+ 0x3C1B,0x3C19,0x7053,0x7059,0x3D9C,0x7221,0x3E10,0x766F,0x7937,0x79B5,
+ 0x7C62,0x7C5E,0x7CF5,0x457B,0x457C,0x863D,0x4608,0x882D,0x8989,0x8B8D,
+ 0x8B87,0x8B90,0x8D1A,0x8E99,0x4841,0x48E3,0x4972,0x945F,0x4973,0x4968,
+ 0x9456,0x9461,0x945B,0x945A,0x945C,0x9465,0x4A35,0x9741,0x4A88,0x4A9D,
+ 0x986E,0x986C,0x986D,0x4275,0x99AA,0x9A5C,0x9A58,0x9ADE,0x4C8F,0x9C4F,
+ 0x9C51,0x4C8E,0x9C53,0x4D05,0x4D04,0x4CFF,0x9DFC,0x9F39,0x4D9E,0x513E,
+ 0x3554,0x56D2,0x3681,0x5B4F,0x6B14,0x40FA,0x7A72,0x7A73,0x4332,0x4670,
+ 0x466E,0x8B91,0xD87E,0x487C,0x91BF,
+ 92, /* first low-surrogate */
+ 0xDDD6,
+ /* plane 3, row 65 */
+ 1 | (94 << 8), /* first, last */
+ 0x4975,0x946C,0x4974,0x4977,0x96E6,0x9745,0x4A37,0x97C8,0x97E4,
+ 0x995D,0x4BBA,0x9B21,0x4C11,0x9B2C,0x9B57,0x4C92,0x4C99,0x9C5D,0x9C61,
+ 0x9C65,0x9E08,0x4D0A,0x4D2A,0x4D2B,0x4D44,0x4D79,0x9F45,0x34AA,0x3748,
+ 0x6205,0x66EF,0x6B1B,0x6B1D,0x7225,0x7224,0x7C6D,0x42B4,0x8642,0x8649,
+ 0x460D,0x8978,0x898A,0x8B97,0x4754,0x8C9B,0x8D1C,0x4830,0x8EA2,0x4A09,
+ 0x4A38,0x4A36,0x4A8B,0x4AF7,0x4B66,0x4BBD,0x4C1E,0x9C6C,0x4C96,0x9C6F,
+ 0x4D0D,0x9E0E,0x4D73,0x9F08,0x9F1D,0x9FA3,0x373B,0x373C,0x5F60,0x6B1C,
+ 0x3DA0,0x40FB,0xffff,0x7CF3,0x4581,0x8B9B,0x8EA7,0x91C4,0x4978,0x947A,
+ 0x4A8D,0x4B73,0x9A61,0x9A63,0x9AD7,0x9C76,0x4DA6,0x9FA5,0x39AD,0x7067,
+ 0x3E11,0x72AB,0x864A,0x897D,0x8B9D,
+ /* plane 3, row 66 */
+ 1 | (89 << 8), /* first, last */
+ 0x8C53,0x8F65,0x947B,0x4A39,0x98CD,0x98DD,0x4BBF,0x9B30,0x9E16,
+ 0x4D0F,0x4DA7,0x4DB5,0x3FDC,0x4831,0x96E7,0x9E18,0x9EA2,0x4DA8,0x9F7C,
+ 0x4125,0x7E9E,0x9484,0x4BC1,0x9E1C,0x4190,0x7C71,0x97CA,0x4696,0x487F,
+ 0x4D10,0x9EA3,0x4A0A,0x9C7B,0x9F97,0x4D12,0x4A3A,0x9750,0x4A3B,0xffff,
+ 0xffff,0x5727,0x5C13,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5FC8,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0x6765,0xffff,0xffff,0x52BD,0xffff,
+ 0x5B66,0xffff,0x65F9,0x6788,0x6CE6,0x6CCB,0xffff,0x4FBD,0x5F8D,0xffff,
+ 0x6018,0x6048,0xffff,0x6B29,0x70A6,0xffff,0x7706,0xffff,0xffff,0xffff,
+ 0x5A10,0x5CFC,0x5CFE,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x70C9,
+ /* plane 3, row 67 */
+ 3 | (91 << 8), /* first, last */
+ 0x9579,0xffff,0x96BA,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0x7B29,0x8128,0xffff,0x8A2E,0xffff,0xffff,0xffff,
+ 0x9AD9,0xffff,0x582B,0x5845,0xffff,0x63FA,0xffff,0xffff,0xffff,0x6E86,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0x5867,0xffff,0x5BDD,0x656E,0xffff,
+ 0xffff,0xffff,0x8C87,0xffff,0x50D2,0x50DF,0xffff,0xffff,0xffff,0xffff,
+ 0x69BA,0xffff,0x6B9D,0xffff,0x8059,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6F8A,0xffff,0xffff,
+ 0x7BC3,0x7BC2,0xffff,0xffff,0xffff,0xffff,0x90F6,0xffff,0x9823,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0x71CD,0x7499,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0x9842,
+ /* plane 3, row 68 */
+ 2 | (94 << 8), /* first, last */
+ 0x7F84,0xffff,0xffff,0xffff,0xffff,0xffff,0x8D0E,0xffff,
+ 0x9861,0xffff,0xffff,0x8B73,0xffff,0x9C27,0xffff,0x9458,0x77D6,0x9B2D,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+ 0x4F66,0x4F68,0x4FE7,0x503F,0xffff,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,
+ /* plane 3, row 69 */
+ 1 | (94 << 8), /* first, last */
+ 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,
+ /* plane 3, row 70 */
+ 1 | (92 << 8), /* first, last */
+ 0x7BD0,0x7C2F,0x7C32,0x7C42,0x7C4E,0x7C68,0x7CA9,0x7CED,0x7DD0,
+ 0x7E07,0x7DD3,0x7E64,0x7F40,0xffff,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,0xffff,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,0xffff,0x9D49,0x6449,0x5E71,0x5E85,0x61D3,
+ 0x990E,0x8002,0x781E,
+ /* plane 3, row 71 */
+ 1 | (10 << 8), /* first, last */
+ 0x5528,0x5572,0x55BA,0x55F0,0x55EE,0x56B8,0x56B9,0x56C4,0x8053,
+ 0x92B0,
+ /* plane 3, row 72: --- */
+ /* plane 3, row 73: --- */
+ /* plane 3, row 74: --- */
+ /* plane 3, row 75: --- */
+ /* plane 3, row 76: --- */
+ /* plane 3, row 77: --- */
+ /* plane 3, row 78: --- */
+ /* plane 3, row 79: --- */
+ /* plane 3, row 80: --- */
+ /* plane 3, row 81: --- */
+ /* plane 3, row 82: --- */
+ /* plane 3, row 83: --- */
+ /* plane 3, row 84: --- */
+ /* plane 3, row 85: --- */
+ /* plane 3, row 86: --- */
+ /* plane 3, row 87: --- */
+ /* plane 3, row 88: --- */
+ /* plane 3, row 89: --- */
+ /* plane 3, row 90: --- */
+ /* plane 3, row 91: --- */
+ /* plane 3, row 92: --- */
+ /* plane 3, row 93: --- */
+ /* plane 3, row 94: --- */
+ /* plane 4, row 1 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0x4E40,0x4E41,0x4E5A,0xD847,0x4E02,0x4E29,0xD840,0xD841,
+ 0x5202,0x353E,0x5DDC,0xD841,0xD841,0xD87E,0x5342,0x536A,0x5B52,0xD846,
+ 0xD87E,0xD87E,0x5FC4,0x624C,0x72AD,0x4E12,0x4E2F,0x4E96,0x4ED0,0x5142,
+ 0x5183,0xD87E,0xD841,0xD841,0xD842,0xD842,0x5383,0x53B8,0xD842,0xD842,
+ 0xD844,0x5928,0xD846,0x5C23,0x5E01,0x5F00,0xD84C,0x3CB8,0x706C,0x722B,
+ 0x5188,0x8279,0x8FB6,0x4E17,0xD840,0x340C,0xD840,0x3430,0x4EE2,0x4EDB,
+ 0xD841,0xD841,0x51AD,0xD841,0x51F7,0x34DA,0xD841,0xD842,0x3513,0x531B,
+ 0x5388,0x5387,0xD842,0x53CF,0x53FD,0x3563,0x53E7,0x56DC,0xD844,0x56D9,
+ 0x5725,0x5727,0x5933,0x5C13,0xD847,0xD847,0x5C75,0xD848,0xD848,0xD849,
+ 0x39C4,0x39C3,0x66F1,0xD84C,0xD855,
+ 1, /* first low-surrogate */
+ 0xDC86, 0, 0, 0,0xDFE8, 0, 0,0xDD0E,0xDE27,
+ 0, 0, 0,0xDD3C,0xDE75,0xDC28, 0, 0, 0,0xDD3C,
+ 0xDC75,0xDC78, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xDC19,0xDEA5,0xDEAA,0xDD0F,0xDE0E, 0, 0,0xDF9C,0xDF9B,
+ 0xDE3C, 0,0xDFC2, 0, 0, 0,0xDFB4, 0, 0, 0,
+ 0, 0, 0, 0,0xDC65, 0,0xDDB2, 0, 0, 0,
+ 0xDC77,0xDD42, 0,0xDE33, 0, 0,0xDEAF,0xDC36, 0, 0,
+ 0, 0,0xDF22, 0, 0, 0, 0, 0,0xDDA3, 0,
+ 0, 0, 0, 0,0xDC25,0xDC24, 0,0xDC52,0xDD89,0xDCBF,
+ 0, 0, 0,0xDFB5,0xDF4C,
+ /* plane 4, row 2 */
+ 1 | (94 << 8), /* first, last */
+ 0x7F52,0xD863,0xD863,0x3401,0xD840,0xD840,0x4E51,0x4E6A,0xD840,
+ 0x4F0C,0xD840,0xD840,0x4EFE,0x4F1B,0xD840,0xD840,0x343A,0xD841,0x34AB,
+ 0x5173,0xD841,0x518E,0xD841,0xD841,0xD841,0xD841,0xD841,0x34DD,0xD841,
+ 0xD841,0x52A5,0x3515,0x52A7,0x52A4,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0x53BD,0xD842,0xD842,0xD842,0x5402,0xD842,0xD842,0xD842,0xD842,0x572B,
+ 0x591B,0x5935,0xD845,0x36A7,0x36A5,0xD845,0xD845,0x36A6,0xD846,0xffff,
+ 0x5C17,0x377C,0xD847,0x5C70,0x5C7D,0x37A9,0xD847,0x5DE9,0xD848,0x3834,
+ 0x3835,0xD848,0xD848,0xD848,0x38A8,0x5F19,0x5F1C,0x5F75,0xD849,0xD849,
+ 0x38FF,0x5FC8,0xD84A,0x39C7,0x39C6,0x39C8,0xD84A,0xD84B,0x3AD0,0x3AD1,
+ 0xD84C,0xD84C,0x3C59,0xD84E,0xD84E,
+ 2, /* first low-surrogate */
+ 0xDE14,0xDE12, 0,0xDCA3,0xDCA2, 0, 0,0xDDB6,
+ 0,0xDDB5,0xDDB4, 0, 0,0xDDC2,0xDDB8, 0,0xDC79, 0,
+ 0,0xDD08, 0,0xDD7A,0xDDB6,0xDEBD,0xDEB7,0xDEBC, 0,0xDEC4,
+ 0xDEC9, 0, 0, 0, 0,0xDD30,0xDD83,0xDD85,0xDE12,0xDE34,
+ 0,0xDEE4,0xDEDE,0xDF2A, 0,0xDFAF,0xDFB4,0xDFB3,0xDFB1, 0,
+ 0, 0,0xDDDE, 0, 0,0xDEB8,0xDEB0, 0,0xDDC2, 0,
+ 0, 0,0xDC2A, 0, 0, 0,0xDFE9, 0,0xDC57, 0,
+ 0,0xDDB6,0xDDD7,0xDDDE, 0, 0, 0, 0,0xDCC2,0xDDAB,
+ 0, 0,0xDD8F, 0, 0, 0,0xDE6D,0xDEB5, 0, 0,
+ 0xDFC0,0xDFBF, 0,0xDDB9,0xDF1C,
+ /* plane 4, row 3 */
+ 1 | (94 << 8), /* first, last */
+ 0x6C12,0x3CBD,0xD84F,0xD850,0xD850,0x3E28,0x72B3,0xD851,0x3EA9,
+ 0x7390,0x7536,0xD858,0x43CC,0xD85A,0x8281,0x8FB8,0xD861,0x48B4,0xD861,
+ 0xD863,0x4E23,0x3416,0x342C,0xD840,0x4F2E,0xD840,0x514F,0xD841,0x51BA,
+ 0x34DF,0x34E0,0x5222,0xD841,0xD841,0xD841,0x3517,0xD842,0x52AF,0x52B0,
+ 0x52B1,0xD842,0xD842,0x352F,0xD842,0x5364,0xD842,0x53D3,0xD842,0x356A,
+ 0xD842,0x3570,0x356D,0xD842,0xD842,0xD842,0xD842,0x356E,0xD842,0xD87E,
+ 0xD87E,0xD842,0x362B,0x3628,0xD844,0xffff,0x593F,0xD845,0xD845,0x3692,
+ 0xD845,0x598B,0xD845,0x5991,0x5995,0xD845,0xD846,0x373F,0xD846,0x5B8A,
+ 0x374F,0x3774,0xD846,0xD846,0x377D,0xD847,0x37B7,0x37A3,0x37B0,0x37B1,
+ 0x5C87,0x37AB,0xD847,0xD847,0xD847,
+ 3, /* first low-surrogate */
+ 0xDC80,0xDD84,0xDD85, 0, 0,0xDF24, 0,
+ 0, 0,0xDF4C, 0,0xDEF6, 0, 0,0xDE70, 0,0xDE75,
+ 0xDE17, 0, 0, 0,0xDDF1, 0,0xDDDA, 0,0xDDB9, 0,
+ 0, 0, 0,0xDECE,0xDED2,0xDED0, 0,0xDC43, 0, 0,
+ 0,0xDC4D,0xDD34, 0,0xDDD9, 0,0xDE18, 0,0xDF38, 0,
+ 0xDFD7, 0, 0,0xDFDC,0xDFCB,0xDFD6,0xDFD8, 0,0xDFD1,0xDC3E,
+ 0xDC3C,0xDFD2, 0, 0,0xDE59, 0, 0,0xDDE5,0xDDE6, 0,
+ 0xDDE8, 0,0xDEBD, 0, 0,0xDEBE,0xDD49, 0,0xDDCD, 0,
+ 0, 0,0xDF5E,0xDFD0, 0,0xDD06, 0, 0, 0, 0,
+ 0, 0,0xDD7C,0xDD71,0xDFEF,
+ /* plane 4, row 4 */
+ 1 | (94 << 8), /* first, last */
+ 0x383A,0x3837,0x5E0D,0x3838,0x3840,0xD848,0xD848,0x5E8E,0x389F,
+ 0xD848,0xD848,0x5F7A,0xD849,0x3904,0x3909,0x3906,0x38FD,0x390A,0x3907,
+ 0xD84A,0xD84A,0x39CA,0xD84A,0xD84A,0x6290,0x39C9,0xD84A,0x629A,0xD84B,
+ 0x653C,0x653A,0x3A7F,0x6598,0xD84C,0x3AD2,0xD84C,0xD84C,0x6765,0xD87E,
+ 0x3B43,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3CC1,0xD84F,0x3CC5,
+ 0x3DA3,0xD850,0xD850,0x3E2A,0x3E5F,0xD851,0xD851,0x3E5D,0xD851,0xD851,
+ 0xD852,0xD852,0x3F17,0xD853,0xD853,0x3F71,0x3F72,0xD853,0xD854,0x400F,
+ 0xD854,0xD855,0x79C2,0x4191,0xD858,0xD858,0xD858,0x43B2,0x43CF,0x43CE,
+ 0x809E,0xD85A,0xD85A,0x81EB,0xD85A,0x8289,0x4496,0xD85A,0xD85A,0x8296,
+ 0xD85A,0x8287,0xD85A,0x4497,0xD861,
+ 6, /* first low-surrogate */
+ 0xDD8D,0xDDB7, 0, 0,
+ 0xDF33,0xDF7F, 0,0xDDF2, 0, 0, 0, 0, 0, 0,
+ 0xDE2A,0xDE8B, 0,0xDE83,0xDE8A, 0, 0,0xDE8E, 0,0xDEB6,
+ 0, 0, 0, 0,0xDCD8, 0,0xDD56,0xDFD2, 0,0xDCDB,
+ 0,0xDFC2,0xDC87,0xDC81,0xDDC2,0xDDBC,0xDF23, 0,0xDC93, 0,
+ 0,0xDD8D,0xDD8E, 0, 0,0xDF3B,0xDF4D, 0,0xDF34,0xDF31,
+ 0xDCF2,0xDCF0, 0,0xDC15,0xDD28, 0, 0,0xDF25,0xDCE7, 0,
+ 0xDCE9,0xDC17, 0, 0,0xDE6C,0xDE80,0xDF4B, 0, 0, 0,
+ 0,0xDCDE,0xDCFB, 0,0xDD51, 0, 0,0xDF01,0xDF02, 0,
+ 0xDF05, 0,0xDF03, 0,0xDC51,
+ /* plane 4, row 5 */
+ 1 | (94 << 8), /* first, last */
+ 0x8FC0,0x488B,0x8FC3,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0x9578,0xD863,0xD863,0x9625,0xD84F,0x4E75,0x4E74,0xD840,0xD840,
+ 0x342D,0xD840,0x4F99,0xD840,0x3450,0x344B,0xD840,0x344F,0x344C,0xD87E,
+ 0x4F71,0x5153,0x51BF,0xD841,0xD841,0x51C0,0xD841,0x51EE,0xD841,0x34E4,
+ 0x34E3,0xD841,0x34E1,0xD841,0x34E2,0xD841,0x523D,0x3519,0x52BD,0x530C,
+ 0xD842,0xD853,0xD842,0xD842,0x3541,0x7F37,0xD842,0x53C0,0x355E,0xD843,
+ 0xD843,0x3579,0xD843,0x546E,0x5483,0xD843,0xD843,0x545E,0x545D,0x577E,
+ 0x5779,0xD844,0x577A,0x576C,0xD844,0xD844,0xD844,0x3632,0x5787,0xD845,
+ 0x591D,0x3694,0x5946,0x3697,0xD845,0x5943,0xD845,0x3696,0x3698,0xD845,
+ 0xD845,0x36B2,0xD845,0xD845,0xD845,
+ 4, /* first low-surrogate */
+ 0xDC53,0xDE7A,0xDE78,0xDE76,0xDE79,0xDE8F,
+ 0xDE7C, 0,0xDE1B,0xDE1C, 0,0xDD92, 0, 0,0xDD2E,0xDD2C,
+ 0,0xDE0C, 0,0xDE0B, 0, 0,0xDE05, 0, 0,0xDC05,
+ 0, 0, 0,0xDDC2,0xDDC3, 0,0xDE48, 0,0xDE46, 0,
+ 0,0xDEEA, 0,0xDEEB, 0,0xDEEE, 0, 0, 0, 0,
+ 0xDCD8,0xDC1E,0xDDDF,0xDDDE, 0, 0,0xDE4F, 0, 0,0xDC0D,
+ 0xDC08, 0,0xDC09, 0, 0,0xDC12,0xDC65, 0, 0, 0,
+ 0,0xDE89, 0, 0,0xDE84,0xDE9E,0xDE8B, 0, 0,0xDD62,
+ 0, 0, 0, 0,0xDDF9, 0,0xDDF7, 0, 0,0xDE06,
+ 0xDEDD, 0,0xDED9,0xDEDF,0xDEE2,
+ /* plane 4, row 6 */
+ 1 | (94 << 8), /* first, last */
+ 0x36B9,0x5B61,0x5B66,0xD840,0x5B90,0x3775,0x377F,0x377E,0x5C29,
+ 0x378F,0xD847,0xD847,0xD847,0x37BD,0x5CB2,0xD847,0x37BB,0x37BC,0xD847,
+ 0x5CC0,0xD848,0x383D,0x383E,0x3874,0xD848,0x387A,0x3876,0x3878,0x3875,
+ 0xD848,0xD848,0x38AF,0x38B0,0x38C7,0x38CC,0xD849,0xD849,0x3916,0xD849,
+ 0x3912,0x391D,0xD849,0xD849,0x3915,0x390F,0x3914,0x601F,0x5FE2,0xD849,
+ 0xD84A,0xD84A,0x39B0,0x39BF,0x39C0,0xD84A,0x39D2,0x39D9,0xD84B,0x3A7A,
+ 0xD84B,0xD84B,0x3A81,0x3A82,0xD84B,0x6616,0x65F9,0x3ADA,0xD859,0x6788,
+ 0xD84C,0x679B,0xD87E,0x676E,0x679E,0xD84C,0x3C22,0x3C1F,0xD84E,0xD84E,
+ 0x3C21,0x6B24,0xD84E,0xD84E,0xD84E,0x3C5C,0x6B7D,0xD84E,0x3C7D,0x3C8D,
+ 0x3C8F,0x6CE6,0xD84F,0x6CCB,0x3CD0,
+ 4, /* first low-surrogate */
+ 0xDCF1, 0, 0, 0, 0, 0,
+ 0,0xDC3F,0xDC3E,0xDD0B, 0, 0,0xDD83, 0, 0,0xDD86,
+ 0,0xDC7C, 0, 0, 0,0xDDF7, 0, 0, 0, 0,
+ 0xDDFB,0xDF3B, 0, 0, 0, 0,0xDDF9,0xDDCA, 0,0xDDFF,
+ 0, 0,0xDE09,0xDE03, 0, 0, 0, 0, 0,0xDE10,
+ 0xDD9A,0xDD9F, 0, 0, 0,0xDE87, 0, 0,0xDEB7, 0,
+ 0xDF08,0xDEF9, 0, 0,0xDEF4, 0, 0, 0,0xDE57, 0,
+ 0xDFD6, 0,0xDCDE, 0, 0,0xDFD4, 0, 0,0xDC90,0xDC8D,
+ 0, 0,0xDD60,0xDDCE,0xDDCF, 0, 0,0xDDD1, 0, 0,
+ 0, 0,0xDCCA,
+ /* plane 4, row 7 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84F,0x3CD8,0xD84F,0xD84F,0xD84F,0x6CB5,0x3DA7,0xD850,0x7097,
+ 0xD850,0x709B,0x3E12,0xD851,0xD851,0x3E2F,0xD851,0x726B,0x3E2E,0x3E2C,
+ 0x3E5C,0xD851,0x72D5,0xD851,0xD851,0x3E62,0x3E67,0x3EB4,0xD852,0xD852,
+ 0xD852,0xD853,0x7543,0xD848,0xD853,0x759C,0xD853,0xD853,0x3FEA,0xD854,
+ 0x3FFB,0xD854,0x4014,0xD854,0x4013,0x4012,0x4010,0x4011,0xD854,0x4086,
+ 0x77E4,0x4098,0xD855,0xD855,0x412A,0xD855,0xD856,0xD856,0xD856,0x7ACE,
+ 0x42B5,0xD858,0xD858,0xD859,0xD859,0x8013,0x43D6,0x43D8,0x80B7,0x43D9,
+ 0x43D4,0x43D7,0xD87E,0x80B9,0xffff,0xD859,0x81E4,0x81FD,0x820F,0x4460,
+ 0xD85A,0xD85A,0x449E,0x44A1,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0x82BF,0x82CA,0xD85A,0xD85A,0x82C1,
+ 1, /* first low-surrogate */
+ 0xDCB7, 0,0xDCB2,0xDCBB,0xDCB9, 0, 0,0xDD9E, 0,
+ 0xDDB2, 0, 0,0xDD6F,0xDDAC, 0,0xDE23, 0, 0, 0,
+ 0,0xDF6C, 0,0xDF32,0xDF5E, 0, 0, 0,0xDCFB,0xDF29,
+ 0xDFBD,0xDC1F, 0,0xDF41,0xDC1D, 0,0xDD31,0xDD2F, 0,0xDC43,
+ 0,0xDC41, 0,0xDCF5, 0, 0, 0, 0,0xDCF2, 0,
+ 0, 0,0xDC1E,0xDF54, 0,0xDF56,0xDD29,0xDD27,0xDD28, 0,
+ 0,0xDE79,0xDE7E,0xDCB6,0xDCB7, 0, 0, 0, 0, 0,
+ 0, 0,0xDD81, 0, 0,0xDE4D, 0, 0, 0, 0,
+ 0xDE09,0xDE08, 0, 0,0xDF1E,0xDF1A,0xDF23,0xDF15,0xDF19,0xDF16,
+ 0, 0,0xDF14,0xDF18,
+ /* plane 4, row 8 */
+ 1 | (94 << 8), /* first, last */
+ 0x44A0,0xD85C,0xD85D,0xD85D,0xD861,0x8FD0,0xffff,0xD861,0x48B9,
+ 0xD861,0x90AE,0xD861,0xD861,0xD861,0xD861,0xD863,0x49C1,0x49C2,0x9638,
+ 0xD87E,0x341C,0xD840,0x345E,0x4FBC,0x3459,0x345C,0xD840,0x345F,0x4FE9,
+ 0x4FBD,0x4FE2,0x5158,0xD841,0xD841,0x34CE,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0x52C6,0xD842,0x52C8,0xD842,0xD842,0x5328,0xD842,0x5329,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0x355F,0xD843,0x3585,0xD843,0xD843,
+ 0x3586,0xD843,0x57B4,0xD844,0x57A9,0x3687,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0x36CA,0xD845,0x36C3,0xD845,0xD845,0xD845,0x36C2,0x5B68,0xD846,
+ 0x3741,0xD846,0xD846,0xD846,0x3780,0x3781,0xD847,0xD847,0x3793,0x3792,
+ 0xD847,0x37C5,0xD847,0xffff,0xD847,
+ 2, /* first low-surrogate */
+ 0xDE1F,0xDDDD,0xDDDF,0xDC69, 0, 0,0xDC6C, 0,
+ 0xDE93, 0,0xDE95,0xDE94,0xDE91,0xDE97,0xDE30, 0, 0, 0,
+ 0xDE18, 0,0xDE31, 0, 0, 0, 0,0xDE36, 0, 0,
+ 0, 0, 0,0xDDC9,0xDDCA, 0,0xDF18,0xDF12,0xDF19,0xDF10,
+ 0xDF16, 0,0xDC5F, 0,0xDCDF,0xDD17, 0,0xDD3C, 0,0xDDEA,
+ 0xDDE9,0xDE1C,0xDE58,0xDE64,0xDEF3, 0,0xDC97, 0,0xDC5A,0xDC59,
+ 0,0xDC8E, 0,0xDEBC, 0, 0,0xDE0D,0xDDFC,0xDE0C,0xDF07,
+ 0xDF0A, 0,0xDF02, 0,0xDF26,0xDF08,0xDF1D, 0, 0,0xDD4E,
+ 0,0xDDED,0xDDEE,0xDDEF, 0, 0,0xDC50,0xDC4C, 0, 0,
+ 0xDC4F, 0,0xDDD4, 0,0xDDB0,
+ /* plane 4, row 9 */
+ 1 | (94 << 8), /* first, last */
+ 0x3846,0x3841,0x3845,0x3842,0x383F,0xD848,0xD848,0x3882,0x3881,
+ 0x387F,0x38A5,0x5F2B,0x38B3,0x38B5,0xD848,0xD848,0x5F8D,0x38DA,0xD849,
+ 0x38DB,0x390D,0x6018,0x390E,0xD849,0x391E,0x3925,0x3926,0x391C,0x3921,
+ 0x6057,0x6048,0x3927,0x391A,0xD849,0xD849,0xD849,0x6038,0xD849,0xD849,
+ 0x3924,0xD849,0xD87E,0x6071,0xD84A,0x39C1,0x39E1,0xD84A,0xD84A,0x6312,
+ 0x39EB,0xD84A,0x39E2,0x39D7,0x39E9,0xD84A,0xD84A,0x630A,0xD84A,0x6323,
+ 0xD84A,0x3A84,0xD84B,0xD84B,0xD84B,0x3AB5,0x3ABC,0x3ADC,0x3ADE,0x3ADF,
+ 0xD84C,0x662A,0xD84C,0xD84C,0xD84C,0xD84D,0x3B54,0x67E0,0x67BE,0x3B53,
+ 0x3C24,0x3C25,0x6B29,0x3C28,0x3C27,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0x3C8B,0xD84F,0xD84F,0x3CDC,
+ 6, /* first low-surrogate */
+ 0xDCA5,0xDE09, 0, 0,
+ 0, 0, 0, 0, 0,0xDFF3,0xDFD7, 0, 0,0xDCDC,
+ 0, 0, 0, 0,0xDE0B, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xDE3A,0xDE0D,0xDE11, 0,0xDE20,0xDE01,
+ 0,0xDE37,0xDCA3, 0,0xDDAA, 0, 0,0xDEE7,0xDEE8, 0,
+ 0,0xDEF5, 0, 0, 0,0xDF35,0xDEE6, 0,0xDEF8, 0,
+ 0xDEF1, 0,0xDF14,0xDF15,0xDF09, 0, 0, 0, 0, 0,
+ 0xDD7B, 0,0xDD7E,0xDF66,0xDF67,0xDC0A, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xDC9C,0xDD62,0xDDE1,0xDDDE,0xDDDF,
+ 0xDDE9, 0,0xDCE4,0xDCF7,
+ /* plane 4, row 10 */
+ 1 | (94 << 8), /* first, last */
+ 0x6D43,0xD84F,0xD84F,0xD84F,0xD87E,0x70A6,0x3DB2,0x70C0,0xD850,
+ 0x722F,0xD851,0x3E1B,0xD851,0x3E32,0x7271,0xD851,0xD851,0x3E6B,0xD851,
+ 0x3E6C,0x3E6D,0xD852,0x3EB9,0x3EBA,0x3F09,0x3F0A,0xD852,0x74EA,0x3F1B,
+ 0xD852,0xD852,0x7520,0x3F58,0xD853,0x3F5A,0xD87E,0xD853,0x3F77,0xD853,
+ 0xD853,0x3F79,0x75A9,0xD853,0x7685,0xD853,0x3FEB,0xD853,0x3FFD,0x3FFC,
+ 0x7706,0x4015,0x4018,0x76F6,0x4016,0x4017,0x4019,0x7700,0x401B,0xD854,
+ 0xD854,0x7702,0xD854,0x4087,0xD854,0xD854,0x409C,0xD855,0x409A,0xD855,
+ 0x40FF,0x40FE,0xD855,0x4131,0x412E,0x4130,0x4132,0xD855,0xffff,0x412F,
+ 0xD855,0x4195,0x4196,0xD856,0xD856,0xD856,0x41C5,0x427A,0xD858,0x4342,
+ 0xD858,0x4354,0xD858,0xD858,0xD858,
+ 2, /* first low-surrogate */
+ 0xDCEA,0xDCF6,0xDD12,0xDD01, 0, 0, 0,0xDDD9,
+ 0,0xDD5F, 0,0xDD73, 0, 0,0xDE3F,0xDF78, 0,0xDF7D,
+ 0, 0,0xDD12, 0, 0, 0, 0,0xDF2F, 0, 0,
+ 0xDF30,0xDFDB, 0, 0,0xDC29, 0,0xDD36,0xDD40, 0,0xDD3D,
+ 0xDD3E, 0, 0,0xDD38, 0,0xDF48, 0,0xDFD0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xDD0E,
+ 0xDD09, 0,0xDD07, 0,0xDF5F,0xDF60, 0,0xDC2A, 0,0xDC29,
+ 0, 0,0xDE4D, 0, 0, 0, 0,0xDF6C, 0, 0,
+ 0xDF67, 0, 0,0xDD39,0xDD34,0xDE59, 0, 0,0xDE23, 0,
+ 0xDE82, 0,0xDE83,0xDEA8,0xDF55,
+ /* plane 4, row 11 */
+ 1 | (94 << 8), /* first, last */
+ 0xD858,0xD858,0xD858,0xD858,0x8009,0xD87E,0x439F,0x43A0,0x43A2,
+ 0x43E0,0xD859,0x43E1,0xD859,0xD859,0x43DF,0xD859,0xD85A,0x4462,0x4461,
+ 0xD85A,0xD85A,0x44A7,0xD85A,0xD85A,0xD85A,0x82DA,0xD85A,0xD85A,0x830A,
+ 0x4589,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0x461D,0xD85D,
+ 0xD85D,0x472A,0xD85F,0xD85F,0x47D3,0x4842,0x4843,0xD861,0x4891,0xD861,
+ 0xD861,0x4890,0x48BF,0xD861,0x48BC,0xD861,0x48C0,0x49C7,0x49C5,0x9655,
+ 0xD863,0x9652,0x4E35,0xD840,0xD840,0x5034,0x5001,0xD840,0x500A,0x3466,
+ 0xD840,0xD840,0xD840,0x34AD,0xD841,0xD841,0xD841,0xD841,0x5258,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD842,0x351D,0xD842,0x3531,0x532B,0xD842,
+ 0x354C,0xD842,0xD842,0x3595,0x3591,
+ 1, /* first low-surrogate */
+ 0xDFF9,0xDFF8,0xDFFC,0xDFFA, 0,0xDD7A, 0, 0, 0,
+ 0,0xDE74, 0,0xDE6B,0xDE71, 0,0xDE76,0xDE0E, 0, 0,
+ 0xDE10,0xDE0F, 0,0xDF38,0xDF39,0xDF3A, 0,0xDF37,0xDF3E, 0,
+ 0,0xDD9C,0xDE2A,0xDE3A,0xDE2B,0xDE28,0xDDAA,0xDE0F, 0,0xDE10,
+ 0xDFE6, 0,0xDD25,0xDE8E, 0, 0, 0,0xDC8B, 0,0xDC8C,
+ 0xDC9A, 0, 0,0xDEB3, 0,0xDEB2, 0, 0, 0, 0,
+ 0xDE44, 0, 0,0xDD58,0xDEA7, 0, 0,0xDE63, 0, 0,
+ 0xDE6A,0xDE65,0xDE6B, 0,0xDCED,0xDDD9,0xDF3B,0xDF32, 0,0xDF35,
+ 0xDF31,0xDF3E,0xDF43,0xDF36,0xDC6D, 0,0xDCE4, 0, 0,0xDDF4,
+ 0,0xDE69,0xDE6B,
+ /* plane 4, row 12 */
+ 1 | (94 << 8), /* first, last */
+ 0x3594,0xD843,0xD843,0xD843,0x358F,0x54EC,0xD843,0x5515,0x54FE,
+ 0xD843,0xD843,0xD843,0x54E3,0x5516,0x3640,0xD844,0x3641,0xD844,0x57D3,
+ 0xD844,0xD845,0xD845,0xD845,0x5959,0x5A27,0x36D8,0x36D2,0x36DA,0x5A28,
+ 0x5A10,0x36D7,0x5A0E,0x3742,0x3757,0xD846,0xD846,0xD846,0x5BAF,0xD846,
+ 0x5BBA,0x5BB1,0xD846,0xD846,0x3778,0x3782,0x3797,0xD847,0xD847,0x37C9,
+ 0xD847,0x37C8,0x37D6,0x37CC,0xD847,0x37D0,0xD847,0xD847,0x37CE,0x37C7,
+ 0x5CFC,0xD847,0x37CF,0x37CB,0x5CF2,0x5CFE,0xD847,0xD847,0x5DF8,0xD848,
+ 0x3847,0xD848,0x3848,0xD848,0xD848,0x3883,0x3885,0x3884,0xD848,0xD848,
+ 0x5F2C,0x38B8,0x38BC,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,
+ 2, /* first low-surrogate */
+ 0xDCBF,0xDCC3,0xDCAE, 0, 0,0xDCB1, 0, 0,
+ 0xDCBB,0xDCAF,0xDCB0, 0, 0, 0,0xDEEF, 0,0xDEED, 0,
+ 0xDEF0,0xDD93,0xDE34,0xDE2B, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xDE04,0xDE03,0xDE02, 0,0xDE05,
+ 0, 0,0xDE00,0xDF74, 0, 0, 0,0xDC65,0xDC63, 0,
+ 0xDDD7, 0, 0, 0,0xDDE8, 0,0xDDDB,0xDDD8, 0, 0,
+ 0,0xDE09, 0, 0, 0, 0,0xDDE5,0xDDE7, 0,0xDC3F,
+ 0,0xDCC0, 0,0xDCB9,0xDCBA, 0, 0, 0,0xDE20,0xDF4F,
+ 0, 0, 0,0xDC91,0xDC90,0xDCEE,0xDCF3,0xDCEC,0xDCF1,0xDCEB,
+ 0xDCF2,0xDCF4,0xDCED,0xDE41,0xDE48,
+ /* plane 4, row 13 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0x3931,0x3934,0x3936,0x6082,0xD849,0xD849,0x3923,0xD849,
+ 0xD849,0x393A,0x6091,0x608F,0xD849,0x39B4,0x39B5,0x39ED,0x39EC,0x39D8,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x39F6,0x39E7,0xD84A,
+ 0xD84B,0x3A7C,0x3A7B,0xD84B,0x3A88,0x6547,0x654C,0xD84B,0xD87E,0x658A,
+ 0xD84C,0x3ABE,0xD84C,0x3AE7,0x3AE5,0x3AEE,0x67E1,0x684A,0xD84D,0x3B59,
+ 0x3B5E,0xD84D,0x3B5A,0x683F,0x3B61,0x3B58,0x3B5B,0x67BD,0xD84D,0x3B5F,
+ 0xD87E,0x3C2A,0x3C2D,0xD84E,0x3C23,0x3C2B,0x3C2C,0xD84E,0x3C7E,0xD87E,
+ 0x3C93,0x3C99,0xD84E,0xD84E,0x3CB3,0x3CE7,0x3CEA,0xD84F,0xD84F,0xD84F,
+ 0xD87E,0xD84F,0xD84F,0x3DB4,0xD850,0x70C9,0x3E17,0xD851,0xD851,0xD851,
+ 0x3E21,0xD851,0x3E38,0x3E37,0x3E74,
+ 1, /* first low-surrogate */
+ 0xDE45, 0, 0, 0, 0,0xDE7F,0xDE8B, 0,0xDE3B,
+ 0xDE4E, 0, 0, 0,0xDE7C, 0, 0, 0, 0, 0,
+ 0xDEF0,0xDF36,0xDF3F,0xDF43,0xDF31,0xDF34,0xDF46, 0, 0,0xDF2F,
+ 0xDEC3, 0, 0,0xDF36, 0, 0, 0,0xDF21,0xDCC8, 0,
+ 0xDC73, 0,0xDCE6, 0, 0, 0, 0, 0,0xDC3F, 0,
+ 0,0xDC6B, 0, 0, 0, 0, 0, 0,0xDC71, 0,
+ 0xDCE2, 0, 0,0xDCB0, 0, 0, 0,0xDDF3, 0,0xDCF5,
+ 0, 0,0xDF61,0xDF5F, 0, 0, 0,0xDD28,0xDD1E,0xDD29,
+ 0xDD02,0xDCEB,0xDD66, 0,0xDDF6, 0, 0,0xDD60,0xDD77,0xDDBB,
+ 0,0xDDBC,
+ /* plane 4, row 14 */
+ 1 | (94 << 8), /* first, last */
+ 0x3E73,0x3E75,0xD851,0xD851,0xD851,0x3E76,0x3E78,0xD852,0xD852,
+ 0x73BA,0x3F0C,0x3F20,0x3F1E,0xD853,0x3F5B,0xD853,0x3F5C,0xD853,0x3F83,
+ 0x75C6,0x3F80,0x3F81,0x3F7E,0x3F88,0x3F85,0x3F89,0x3F7F,0x3F8E,0xD853,
+ 0xD853,0x3F84,0x75B7,0x768C,0xD853,0x768D,0xD853,0x3FEE,0x3FED,0x3FFE,
+ 0xD854,0x3FFF,0xD854,0xD854,0xD854,0x4023,0xD854,0x7717,0xD854,0x771C,
+ 0x401F,0xD854,0xD854,0x7714,0xD854,0x408F,0x4090,0xD855,0xD855,0xD855,
+ 0x40A0,0xD855,0x40A6,0x409F,0xD855,0x40A7,0x40A1,0xD855,0x4102,0x4136,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x41C8,0xD856,0xD856,
+ 0x41D8,0x7B0C,0x41DD,0x41DC,0xD856,0x41D7,0xD856,0x41DA,0x42BA,0xD857,
+ 0xD857,0xD857,0x42BE,0x42C2,0x42BB,
+ 3, /* first low-surrogate */
+ 0xDFA2,0xDFB2,0xDF9E, 0, 0,0xDD3A,0xDD38,
+ 0, 0, 0, 0,0xDC4D, 0,0xDC5E, 0,0xDD17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,0xDD64,
+ 0xDD67, 0, 0, 0,0xDF59, 0,0xDFDA, 0, 0, 0,
+ 0xDC51, 0,0xDC55,0xDD3B,0xDD34, 0,0xDD37, 0,0xDD31, 0,
+ 0,0xDD3F,0xDD59, 0,0xDF61, 0, 0,0xDC58,0xDC62,0xDC50,
+ 0,0xDC51, 0, 0,0xDC46, 0, 0,0xDE2D, 0, 0,
+ 0xDD48,0xDD51,0xDD4A,0xDD4F,0xDD50,0xDD49,0xDE63, 0,0xDE66,0xDE60,
+ 0, 0, 0, 0,0xDEF1, 0,0xDF07, 0, 0,0xDF9B,
+ 0xDFA3,0xDF9D,
+ /* plane 4, row 15 */
+ 1 | (94 << 8), /* first, last */
+ 0x42C0,0xD857,0xD857,0xD857,0x7D23,0xD857,0xD848,0xD858,0x4343,
+ 0x4355,0xD858,0xD858,0x4357,0x4368,0x7F98,0x7F90,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0x43A1,0xD859,0x803A,0xD859,0xD859,0xD859,
+ 0xD859,0x43EA,0xD859,0x43E7,0xD859,0xD859,0xD859,0xD859,0x43E8,0x43E9,
+ 0xD859,0xD85A,0x4454,0xD85A,0xD85A,0xD85A,0xD85A,0x8226,0x4465,0xD85A,
+ 0xD85A,0x448A,0xD85A,0x44B0,0xD85A,0xD85A,0xD85A,0x44BC,0x832E,0xD85A,
+ 0x8355,0x831A,0x44B8,0x833D,0xD85A,0x44B2,0xD85A,0x8330,0x44BD,0xD85A,
+ 0xD85A,0x458A,0x8651,0x45A1,0xD85C,0x45A2,0xD85C,0x8688,0xD85C,0x4615,
+ 0xD85D,0xD85D,0x4620,0x4673,0xD85D,0x898E,0x898D,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0x8A09,0x8A14,0x46B1,
+ 2, /* first low-surrogate */
+ 0xDFA9,0xDFA7,0xDFA4, 0,0xDFBA,0xDDC1,0xDE26, 0,
+ 0,0xDE94,0xDE93, 0, 0, 0, 0,0xDC07,0xDC0D,0xDC02,
+ 0xDC0C,0xDC09,0xDC08,0xDC13, 0,0xDCD2, 0,0xDD3E,0xDD3C,0xDE67,
+ 0xDE9E, 0,0xDEAD, 0,0xDED9,0xDE42,0xDEA3,0xDEA0, 0, 0,
+ 0xDE7C,0xDD04, 0,0xDD58,0xDD60,0xDDC9,0xDDC8, 0, 0,0xDE1C,
+ 0xDE1A, 0,0xDF74, 0,0xDF6E,0xDF6F,0xDF79, 0, 0,0xDF77,
+ 0, 0, 0, 0,0xDF7C, 0,0xDF70, 0, 0,0xDF7A,
+ 0xDF82, 0, 0, 0,0xDE44, 0,0xDE43, 0,0xDE45, 0,
+ 0xDE25,0xDE1F, 0, 0,0xDFE8, 0, 0,0xDC09,0xDCB7,0xDCB9,
+ 0xDD64,0xDD63,
+ /* plane 4, row 16 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85E,0xD85E,0x472B,0xD85E,0x4745,0xD85F,0x4797,0x4798,0xD85F,
+ 0x47D5,0xD85F,0xD87E,0x4893,0x4896,0x9007,0x4894,0xD861,0xD861,0x48C7,
+ 0x48C5,0xD861,0xD861,0xD861,0x48C4,0xD861,0x9579,0x9584,0x49CE,0x49CA,
+ 0x49CC,0x9657,0x49C9,0x96BA,0xffff,0xD867,0xD840,0x346E,0xD840,0x5067,
+ 0xD840,0xD840,0x3471,0xD840,0x34BB,0x34D3,0xD841,0xD841,0xD841,0xD841,
+ 0x34F3,0x34ED,0x34F5,0xD841,0xD841,0x34F1,0x34F2,0x34F6,0x3520,0xD842,
+ 0x3528,0xD842,0x5318,0x532C,0x5359,0xD842,0xD842,0xD842,0x5368,0x537E,
+ 0xD842,0xD842,0x53A1,0xD843,0x35A1,0x555B,0x35AA,0x35A9,0xD843,0x35B5,
+ 0x35A5,0x35A8,0x5542,0x35A7,0x5547,0xD843,0xD87E,0x553D,0xD843,0xD843,
+ 0x5560,0x57EB,0xD844,0xD844,0xD844,
+ 1, /* first low-surrogate */
+ 0xDD62,0xDD65, 0,0xDFAC, 0,0xDD2A, 0, 0,0xDE96,
+ 0,0xDFC2,0xDDDE, 0, 0, 0, 0,0xDCAA,0xDCB0, 0,
+ 0,0xDED4,0xDECD,0xDED6, 0,0xDFF0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xDD4B,0xDD62, 0,0xDEB7, 0,
+ 0xDEAC,0xDEAB, 0,0xDEC1, 0, 0,0xDDE8,0xDF69,0xDF5D,0xDF5F,
+ 0, 0, 0,0xDF64,0xDF62, 0, 0, 0, 0,0xDCF9,
+ 0,0xDCEE, 0, 0, 0,0xDDAB,0xDDAC,0xDDAA, 0, 0,
+ 0xDE86,0xDE7A, 0,0xDD28, 0, 0, 0, 0,0xDD31, 0,
+ 0, 0, 0, 0, 0,0xDD2D,0xDC43, 0,0xDD2B,0xDD32,
+ 0, 0,0xDF29,0xDF26,0xDF53,
+ /* plane 4, row 17 */
+ 1 | (94 << 8), /* first, last */
+ 0x364D,0xD844,0xD844,0xD845,0x369C,0x595F,0xD845,0x36EA,0x36E5,
+ 0xD845,0xD845,0x5B6F,0xD846,0x375E,0xD846,0xD87E,0xD846,0x3786,0x3784,
+ 0xD846,0x5C5A,0xD847,0x37D9,0xD847,0x37DE,0xD847,0xD847,0xD847,0x37DB,
+ 0xD847,0xD847,0xD847,0xD847,0x3831,0xD848,0xD848,0x384B,0xD848,0x3849,
+ 0x384A,0x384C,0xD848,0xD848,0x388A,0xD848,0x3889,0x388B,0xD848,0x38BB,
+ 0x5FA2,0x5F9D,0x38E4,0xD849,0xD849,0x5FA3,0xD849,0xD849,0x393B,0x392E,
+ 0x393E,0x3946,0x3953,0xD849,0x3944,0xD849,0x393F,0x3942,0x394F,0xD849,
+ 0x3952,0x394A,0x60C2,0xD849,0x395A,0x60A5,0x3949,0xD849,0x621C,0xD84A,
+ 0x621D,0x3A03,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x6395,0x639A,0x3A01,
+ 0x3A06,0x39FB,0x39F9,0xD84A,0x3A05,
+ 2, /* first low-surrogate */
+ 0xDF33,0xDF34,0xDD9D, 0, 0,0xDE41, 0, 0,
+ 0xDF91,0xDF69, 0,0xDE22, 0,0xDE34,0xDC6D,0xDF2E, 0, 0,
+ 0xDFF4, 0,0xDE28, 0,0xDE1C, 0,0xDE11,0xDE24,0xDE15, 0,
+ 0xDE16,0xDE54,0xDE23,0xDFFF, 0,0xDCCF,0xDCD0, 0,0xDCCE, 0,
+ 0, 0,0xDDC7,0xDE5C, 0,0xDE36, 0, 0,0xDE43, 0,
+ 0, 0, 0,0xDD2A,0xDD01, 0,0xDD0B,0xDD0F, 0, 0,
+ 0, 0, 0,0xDEDF, 0,0xDED2, 0, 0, 0,0xDECD,
+ 0, 0, 0,0xDEDB, 0, 0, 0,0xDECF, 0,0xDDC0,
+ 0, 0,0xDF81,0xDF82,0xDF8A,0xDFA8,0xDF8C, 0, 0, 0,
+ 0, 0, 0,0xDF8E,
+ /* plane 4, row 18 */
+ 1 | (94 << 8), /* first, last */
+ 0x39FA,0xD84A,0x63A6,0xD84A,0x39FE,0xD84A,0x3A7D,0x3A8C,0xD84B,
+ 0xD84B,0x6550,0x3A8E,0xD84B,0xD84B,0x6552,0xD84B,0xD84B,0xD84C,0xD84C,
+ 0x65C8,0xD84C,0x3AF0,0x3AF2,0xD84C,0x6658,0x3AF1,0x3AE6,0xD84C,0xD84C,
+ 0xD87E,0x6888,0xD84D,0x3B6F,0x3B6D,0x3B69,0xD84D,0xD84D,0x3B6E,0xD84D,
+ 0x3C2F,0x3C30,0x3C63,0xD84E,0xD84E,0xD84E,0x6BB8,0x3C80,0x6BB9,0x3C9A,
+ 0x3C94,0x3C96,0x3C95,0x3C97,0xD84E,0x3CF4,0x3CFE,0xD84F,0x3D01,0xD84F,
+ 0x3D02,0xD84F,0x3CF9,0xD84F,0xD84F,0xD84F,0xD84F,0x3CF6,0x3CF7,0xD84F,
+ 0xD84F,0xD84F,0x3CFF,0xD84F,0xD84F,0xD84F,0xD84F,0x6E0B,0xD84F,0xD850,
+ 0x3DBF,0x3DBC,0x7105,0xD850,0xD850,0xD850,0x3DBE,0x3DC0,0xD851,0x3E3B,
+ 0x3E39,0xD851,0xD851,0xD851,0x3E3C,
+ 2, /* first low-surrogate */
+ 0xDF8B, 0,0xDF96, 0,0xDFCC, 0, 0,0xDF4F,
+ 0xDF4A, 0, 0,0xDF4B,0xDF3D, 0,0xDF44,0xDF49,0xDC9E,0xDCF3,
+ 0,0xDCF5, 0, 0,0xDDB3, 0, 0, 0,0xDDE5,0xDDB6,
+ 0xDCD8, 0,0xDC86, 0, 0, 0,0xDCB6,0xDC85, 0,0xDCAB,
+ 0, 0, 0,0xDE0D,0xDE8B,0xDE8C, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xDF72, 0, 0,0xDD8F, 0,0xDD79,
+ 0,0xDD77, 0,0xDD90,0xDD88,0xDD80,0xDD9E, 0, 0,0xDD82,
+ 0xDD34,0xDD89, 0,0xDD85,0xDD7E,0xDD7A,0xDDA6, 0,0xDDB5,0xDDF4,
+ 0, 0, 0,0xDE29,0xDE26,0xDE2A, 0, 0,0xDD7E, 0,
+ 0,0xDE5B,0xDE61,0xDE60,
+ /* plane 4, row 19 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0x7314,0x7304,0xD851,0x3E7D,0xD851,0x3E7F,0x3E7A,0x3E7C,
+ 0x7305,0x3E7E,0x7315,0x730D,0x3E80,0x3EBF,0x3EC3,0xD852,0xD852,0x3ECC,
+ 0x3F0E,0x3F0D,0xD852,0x3F26,0x3F24,0x3F25,0x3F23,0x3F21,0x3F29,0xD853,
+ 0xD853,0x3F8F,0x3F8D,0xD853,0x3F8B,0x3F92,0xD853,0x3F90,0xD853,0x3FEF,
+ 0x3FF0,0xD853,0xD854,0x4001,0xD854,0x402E,0x402D,0x772E,0x4028,0x4029,
+ 0x402C,0xD854,0xD854,0xD854,0x7741,0x4088,0xD854,0x4092,0x4091,0x77EA,
+ 0xD854,0x7844,0x40A9,0x40AC,0x40AE,0x40AA,0x4106,0x4105,0x414A,0x413E,
+ 0x413C,0x413B,0xD855,0x4142,0x4141,0x4143,0xD855,0x4145,0xD856,0x419A,
+ 0x419B,0x419F,0x419E,0xD856,0xD856,0xD856,0x41DE,0x41E2,0x41E6,0xD856,
+ 0x7B29,0x41E3,0x7B27,0x41DF,0xD857,
+ 1, /* first low-surrogate */
+ 0xDF9B, 0, 0,0xDFC3, 0,0xDFCD, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDD54,0xDD59, 0,
+ 0, 0,0xDEF5, 0, 0, 0, 0, 0, 0,0xDC69,
+ 0xDC65, 0, 0,0xDD7C, 0, 0,0xDD80, 0,0xDF65, 0,
+ 0,0xDFDF,0xDC60, 0,0xDC5E, 0, 0, 0, 0, 0,
+ 0,0xDD8F,0xDD61,0xDD5A, 0, 0,0xDF67, 0, 0, 0,
+ 0xDFBB, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xDF9B, 0, 0, 0,0xDFA9, 0,0xDD66, 0,
+ 0, 0, 0,0xDE72,0xDE76,0xDF14, 0, 0, 0,0xDF0F,
+ 0, 0, 0, 0,0xDE41,
+ /* plane 4, row 20 */
+ 1 | (94 << 8), /* first, last */
+ 0xD857,0x7C9D,0xD857,0xD857,0x427E,0x42C9,0x42CC,0xD857,0x42D1,
+ 0xD857,0x42D0,0xD857,0x42CF,0x42C8,0xD857,0x42CD,0xD857,0xD857,0x4349,
+ 0x4347,0x4358,0x436B,0x436C,0x436A,0xD858,0x4380,0x4382,0x4384,0x7FC8,
+ 0x4383,0xD859,0xD859,0x43B6,0xD859,0xD859,0xD859,0xD859,0xD859,0x8126,
+ 0x43F1,0xD859,0x43F6,0x43F3,0x43F0,0x811C,0xD859,0xD859,0x8128,0x43F5,
+ 0x43F4,0x43F7,0xD859,0xD859,0xD85A,0xD87E,0x4455,0xD85A,0xD85A,0xD85A,
+ 0x448B,0x44CB,0x44C2,0xD85A,0xD85A,0xD85A,0x44CA,0x44CC,0xD85A,0x44C7,
+ 0x44C9,0x8370,0xD85A,0x44C6,0xD85B,0xD85A,0x44C3,0x8382,0xD85A,0x83AC,
+ 0xD85A,0x44C4,0xD85A,0xD87E,0xD87E,0xD85A,0xD85C,0xD85C,0xD85C,0x45A9,
+ 0x86AD,0x45A8,0x45A6,0xD85C,0xD85C,
+ 1, /* first low-surrogate */
+ 0xDE46, 0,0xDE4B,0xDE43, 0, 0, 0,0xDFC6, 0,
+ 0xDFC7, 0,0xDFCE, 0, 0,0xDFC9, 0,0xDFCB,0xDFC5, 0,
+ 0, 0, 0, 0, 0,0xDF69, 0, 0, 0, 0,
+ 0,0xDC1E,0xDCBA, 0,0xDD52,0xDD51,0xDD53,0xDE9F,0xDEDB, 0,
+ 0,0xDEE3, 0, 0, 0, 0,0xDED7,0xDEE9, 0, 0,
+ 0, 0,0xDEDE,0xDEDC,0xDD3C,0xDD8B, 0,0xDE22,0xDE32,0xDE23,
+ 0, 0, 0,0xDFD4,0xDFC8,0xDFBC, 0, 0,0xDFCD, 0,
+ 0, 0,0xDFBE, 0,0xDC40,0xDFD6, 0, 0,0xDFBD, 0,
+ 0xDFBA, 0,0xDFC0,0xDD9B,0xDD9D,0xDFC1,0xDDA6,0xDDA5,0xDDA8, 0,
+ 0, 0, 0,0xDE5F,0xDE70,
+ /* plane 4, row 21 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x86CA,0x8851,0xD85D,0xD85D,
+ 0x4622,0xD85D,0x4626,0x4624,0x4625,0x889D,0x462A,0x4674,0xD85E,0x4679,
+ 0x8990,0x467A,0xD85E,0xD85E,0x89D8,0x89D7,0x4697,0xD85E,0xD85E,0x8A2E,
+ 0xD85E,0x46BC,0xD85E,0x46B3,0xD85E,0x46BF,0x46B7,0xD87E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0x4734,0x4746,0x4748,0x8C59,0xD85F,0xD85F,0x4756,0x4767,
+ 0xD85F,0xD85F,0x4768,0x4799,0x479A,0xD85F,0xD85F,0x47D8,0xD85F,0x47DB,
+ 0x47DC,0x47DD,0x47D7,0xD85F,0xD860,0x4849,0x484A,0x8EDA,0xD860,0xD860,
+ 0x9033,0xD861,0x9018,0x489A,0xD861,0x48CD,0x48CA,0xD861,0x48CB,0xD861,
+ 0x48CF,0xD861,0xD87E,0x48CC,0x48EA,0x48ED,0xD861,0xD861,0x48E9,0xD862,
+ 0x491A,0x91EF,0x498D,0x49D2,0xD863,
+ 1, /* first low-surrogate */
+ 0xDE6A,0xDE65,0xDE67,0xDE6F,0xDE87, 0, 0,0xDE3D,0xDE43,
+ 0,0xDE40, 0, 0, 0, 0, 0, 0,0xDC18, 0,
+ 0, 0,0xDC19,0xDCC1, 0, 0, 0,0xDCBC,0xDCC8, 0,
+ 0xDD71, 0,0xDD6E, 0,0xDD78, 0, 0,0xDDCD,0xDD7A,0xDFB1,
+ 0xDFAF,0xDFB0, 0, 0, 0, 0,0xDCA8,0xDCA6, 0, 0,
+ 0xDD48,0xDD45, 0, 0, 0,0xDEA0,0xDEA4, 0,0xDFD4, 0,
+ 0, 0, 0,0xDFD2,0xDE22, 0, 0, 0,0xDEB7,0xDECC,
+ 0,0xDCE6, 0, 0,0xDCC8, 0, 0,0xDEF4, 0,0xDEED,
+ 0,0xDE7E,0xDDE3, 0, 0, 0,0xDFF9,0xDFFD, 0,0xDC07,
+ 0, 0, 0, 0,0xDE78,
+ /* plane 4, row 22 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0x49F2,0xD864,0xD864,0xD864,0x4A3D,0xD864,
+ 0x4A3E,0x4AF8,0x4B23,0x9AD9,0x4EB4,0xD840,0x50A0,0x5090,0x3475,0x5086,
+ 0x5084,0xD840,0x508A,0x3476,0x3473,0x509F,0x50A1,0xD840,0x5093,0x34BD,
+ 0xD841,0x51D5,0xD841,0xD841,0x34F9,0xD841,0xD841,0x34FA,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0x3521,0xD87E,0x3529,0xD842,0xD842,0x3538,0x354E,
+ 0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0x35C8,0x35BC,0xD843,0xD843,
+ 0x5590,0xD843,0x35BB,0x35C2,0x35C0,0xD843,0xD843,0x35CA,0xD843,0x35C9,
+ 0xD843,0x35B8,0x5710,0x5817,0xD844,0x364E,0xD844,0x5844,0x3650,0x582B,
+ 0xD844,0x5845,0xD844,0xD844,0xD844,0xD844,0xD87E,0x368A,0xD845,0x5965,
+ 0xD845,0xD845,0xD845,0x36FC,0x36F9,
+ 1, /* first low-surrogate */
+ 0xDE7A,0xDE79,0xDF8A, 0,0xDC7B,0xDDD5,0xDDE9, 0,0xDDEB,
+ 0, 0, 0, 0, 0,0xDD6C, 0, 0, 0, 0,
+ 0,0xDEFA, 0, 0, 0, 0, 0,0xDF18, 0, 0,
+ 0xDDF6, 0,0xDF8A,0xDF89, 0,0xDF7F,0xDF88, 0,0xDF83,0xDF84,
+ 0xDF98,0xDF63,0xDF87, 0,0xDC27, 0,0xDCF5,0xDD50, 0, 0,
+ 0xDE87,0xDE8A,0xDF65,0xDDB7,0xDDC1,0xDDC7, 0, 0,0xDDC5,0xDDCB,
+ 0,0xDDD1, 0, 0, 0,0xDDB8,0xDDCA, 0,0xDDDE, 0,
+ 0xDDCE, 0, 0, 0,0xDF68, 0,0xDF6B, 0, 0, 0,
+ 0xDF6A, 0,0xDF66,0xDF77,0xDF96,0xDF6E,0xDC56, 0,0xDE57, 0,
+ 0xDE56,0xDF9C,0xDF9E,
+ /* plane 4, row 23 */
+ 1 | (94 << 8), /* first, last */
+ 0xD845,0x3763,0xD846,0x5BCF,0xD846,0xD846,0xD846,0x3787,0x3788,
+ 0xD846,0x379A,0xD847,0xD847,0xD847,0x5D56,0xD847,0xD847,0x37E9,0xD847,
+ 0x37EA,0x5D54,0x3850,0xD848,0xD848,0x3856,0x3852,0x384F,0x3854,0x3851,
+ 0xD848,0xD848,0x388E,0x388F,0xD848,0xD848,0xD848,0x5F3D,0xD849,0xD849,
+ 0x38ED,0x38EB,0x5FA4,0xD849,0xD849,0xD849,0x3962,0xD849,0x395D,0xD849,
+ 0xD849,0xD849,0x3961,0x3965,0x395C,0xD849,0xD849,0x395F,0xD849,0xD849,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0x63EC,0x3A16,0x3A0A,0xD84A,0x3A0E,0x3A12,
+ 0xD84A,0xD84A,0x3A11,0xD84A,0xD84A,0x3A10,0xD84B,0xD84A,0x3A09,0x63FA,
+ 0x3A15,0x63D4,0xD84B,0xD84B,0xD84B,0x3A91,0x3A95,0x3A93,0x3A92,0x3A8F,
+ 0xD84B,0xD84B,0xD84C,0xD84C,0x3AF6,
+ 1, /* first low-surrogate */
+ 0xDFA1, 0,0xDE42, 0,0xDE46,0xDE3E,0xDF33, 0, 0,
+ 0xDFFA, 0,0xDC97,0xDC9B,0xDCAA, 0,0xDE73,0xDE7C, 0,0xDE86,
+ 0, 0, 0,0xDCF3,0xDCF0, 0, 0, 0, 0, 0,
+ 0xDCEC,0xDEAF, 0, 0,0xDE64,0xDE68,0xDF5A, 0,0xDD1F,0xDD25,
+ 0, 0, 0,0xDEC6,0xDED6,0xDEC3, 0,0xDF2C, 0,0xDF2E,
+ 0xDF5E,0xDF33, 0, 0, 0,0xDF2D,0xDF46, 0,0xDEC1,0xDF3A,
+ 0xDDCC,0xDF9D,0xDF83,0xDFF6, 0, 0, 0,0xDFF8, 0, 0,
+ 0xDFFE,0xDFF3, 0,0xDFEB,0xDFFA, 0,0xDC07,0xDFFC, 0, 0,
+ 0, 0,0xDF72,0xDF73,0xDF74, 0, 0, 0, 0, 0,
+ 0xDF5F,0xDF60,0xDCAA,0xDD34,
+ /* plane 4, row 24 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84C,0x3AFB,0xD84C,0x6675,0x3AF9,0xD84C,0xD84C,0xD84C,0x671C,
+ 0x3B7D,0xD84D,0x3B7A,0x3B7F,0xD84D,0x3B78,0xD84D,0xD84D,0x68D9,0xD84D,
+ 0x3B70,0x3B82,0xD84D,0x3B84,0xD84D,0x3C33,0xD84E,0x3C32,0x3C36,0xD84E,
+ 0xD84E,0x3C56,0xD84E,0xD84E,0x3C67,0xD84E,0x3C65,0x3C64,0x3C66,0xD84E,
+ 0xD84E,0x3C81,0x3C82,0x3C83,0x3C9E,0xD84E,0x6BF1,0x3C9D,0xD84E,0x3D0F,
+ 0x3D12,0xD84F,0xD84F,0xD84F,0x3D10,0x3D18,0xD84F,0x3D14,0x3D19,0x6E37,
+ 0xffff,0xD84F,0x6E7D,0x6E86,0x3DC8,0x3DC4,0x3DC6,0xD850,0x3DC7,0x3DC3,
+ 0xD850,0xD850,0xD87E,0xD850,0xD851,0x3E19,0x3E1C,0xD851,0xD851,0xD851,
+ 0x3E41,0xD851,0x3E42,0x3E43,0xD851,0xD851,0xD851,0x3E82,0xD851,0x3E81,
+ 0x3E94,0x3E84,0xD852,0x3ED2,0x3F0F,
+ 1, /* first low-surrogate */
+ 0xDDB4, 0,0xDDF0, 0, 0,0xDE0D,0xDDF3,0xDE0F, 0,
+ 0,0xDCC9, 0, 0,0xDCC5, 0,0xDCD7,0xDCCC, 0,0xDCE7,
+ 0, 0,0xDCC1, 0,0xDCE8, 0,0xDCCB, 0, 0,0xDCC8,
+ 0xDD7A, 0,0xDD79,0xDD7E, 0,0xDE1B, 0, 0, 0,0xDE1F,
+ 0xDE19, 0, 0, 0, 0,0xDF89, 0, 0,0xDF8B, 0,
+ 0,0xDE09,0xDDFE,0xDE00, 0, 0,0xDE0B, 0, 0, 0,
+ 0,0xDE4A, 0, 0, 0, 0, 0,0xDE79, 0, 0,
+ 0xDE6C,0xDE99,0xDD1B,0xDE62,0xDD14, 0, 0,0xDDC8,0xDDD7,0xDE0C,
+ 0,0xDE70, 0, 0,0xDE71,0xDFDF,0xDFE4, 0,0xDFE7, 0,
+ 0, 0,0xDD90,
+ /* plane 4, row 25 */
+ 1 | (94 << 8), /* first, last */
+ 0x3F22,0xD852,0x3F27,0x3F2A,0x74FA,0x3F28,0xD852,0x3F60,0xD853,
+ 0xD853,0xD853,0x7572,0xD853,0xD853,0x3F9B,0x3F9C,0xD853,0x3F93,0x3F94,
+ 0x75DC,0x3FA0,0x3F99,0xD853,0x3FA1,0xD853,0x3FF1,0xD853,0xD853,0xD854,
+ 0xD854,0x4036,0xD854,0x4037,0x403F,0x403C,0xD854,0x4034,0x4039,0x403B,
+ 0x4035,0x4030,0x4032,0x4038,0x403E,0x403A,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0x40B6,0x7867,0xD855,0xD855,0xD855,0x40B3,0x4109,0x7977,0xD855,
+ 0xD855,0xD855,0x414C,0xD855,0xD855,0x4153,0x414D,0x4151,0x414F,0x7A9B,
+ 0xD856,0x41A2,0xD856,0xD856,0x41CD,0xD856,0xD856,0x41E7,0xD856,0x41F0,
+ 0xD856,0x41E9,0x41EC,0xD856,0x41E8,0x41EE,0x4202,0xD856,0xD856,0xD856,
+ 0xD857,0x4282,0x4283,0x4286,0xD857,
+ 2, /* first low-surrogate */
+ 0xDF4C, 0, 0, 0, 0,0xDF4F, 0,0xDC7D,
+ 0xDC7E,0xDC7C, 0,0xDC8D,0xDD19, 0, 0,0xDDC0, 0, 0,
+ 0, 0, 0,0xDDB6, 0,0xDDA8, 0,0xDFEB,0xDFE7,0xDC6F,
+ 0xDDC7, 0,0xDD9F, 0, 0, 0,0xDDC4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xDD9B,0xDD97,0xDDC5,0xDF6B,
+ 0xDFCE, 0, 0,0xDCB1,0xDCAE,0xDCB0, 0, 0, 0,0xDF3E,
+ 0xDFB5,0xDFBA, 0,0xDFB2,0xDFB4, 0, 0, 0, 0, 0,
+ 0xDD77, 0,0xDD86,0xDD7B, 0,0xDE7E,0xDF2E, 0,0xDF2F, 0,
+ 0xDF37, 0, 0,0xDF32, 0, 0, 0,0xDF36,0xDF39,0xDF35,
+ 0xDE5C, 0, 0, 0,0xDE7B,
+ /* plane 4, row 26 */
+ 1 | (94 << 8), /* first, last */
+ 0xD857,0xD857,0xD857,0xD857,0xD858,0x7D2A,0x7D65,0x434A,0xD858,
+ 0x435A,0x7F64,0xD858,0x436E,0xD858,0xD858,0x4370,0x436F,0xD859,0x438A,
+ 0x4387,0x4388,0xD859,0xD859,0x8020,0x43B7,0x43FD,0x8120,0xD859,0x4405,
+ 0x813C,0x4408,0x4403,0x4402,0x4404,0x3B39,0x4409,0x43FF,0xD859,0x813F,
+ 0xD859,0x43FC,0x4401,0x440A,0x81F0,0x81F5,0x446B,0x446C,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85B,0xD85B,0x44DE,0xD85B,0xD85B,0x44DB,0xD85B,0x44DD,
+ 0x44E3,0xD85B,0x44E0,0x44D9,0x44D8,0x44E4,0xD85B,0xD85B,0x44DA,0x44EF,
+ 0xD87E,0x8415,0x83BE,0xD85B,0xD85B,0xD85B,0x44D7,0x45B3,0x45BB,0x86E5,
+ 0x45B2,0x86D2,0x45AD,0xD85C,0x45AF,0xD87E,0x86E0,0xD85C,0x4616,0x4628,
+ 0x4623,0x88B3,0xD85D,0xD85D,0xD85D,
+ 1, /* first low-surrogate */
+ 0xDE61,0xDFEE,0xDFEB,0xDFEF,0xDC20, 0, 0, 0,0xDE30,
+ 0, 0,0xDEBE, 0,0xDF67,0xDF7C, 0, 0,0xDC24, 0,
+ 0, 0,0xDC29,0xDCEF, 0, 0, 0, 0,0xDF0D, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xDF64, 0,
+ 0xDF15, 0, 0, 0, 0, 0, 0, 0,0xDE35,0xDE36,
+ 0xDE34,0xDE37,0xDC47,0xDC2B, 0,0xDC41,0xDC43, 0,0xDC42, 0,
+ 0,0xDC32, 0, 0, 0, 0,0xDC44,0xDC4A, 0, 0,
+ 0xDDA0, 0, 0,0xDC54,0xDC6E,0xDC52, 0, 0, 0, 0,
+ 0, 0, 0,0xDE92, 0,0xDDB8, 0,0xDEBF, 0, 0,
+ 0, 0,0xDE41,0xDE69,0xDE65,
+ /* plane 4, row 27 */
+ 1 | (94 << 8), /* first, last */
+ 0x4675,0x467E,0x467C,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46CE,
+ 0x46CD,0x46CF,0x8A53,0xD85E,0xD85E,0x8A37,0x8A47,0x8A5C,0xD85E,0x46C4,
+ 0x46CC,0x46C8,0x46C7,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,
+ 0x475A,0x476A,0xD85F,0x476B,0x476D,0x476F,0xD85F,0x479E,0xD85F,0x47A4,
+ 0x47A3,0x47E4,0x47E8,0x47E9,0x47E0,0x47E3,0xD85F,0x47EA,0x47E1,0x47ED,
+ 0x4834,0x4835,0x4851,0x8EF0,0xD861,0x489D,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0x48D0,0xD861,0x48EE,0xD862,0xD862,0xD862,0x48F2,0xD862,
+ 0x921D,0x4988,0xD863,0xD863,0xD863,0x498F,0xD863,0x49D8,0xD863,0xD863,
+ 0xD863,0xD863,0xD864,0xD864,0x4A3F,0xD864,0x4A52,0x976B,0xD864,0x4A50,
+ 0xD865,0x4AB1,0xD865,0xD865,0x4AF9,
+ 4, /* first low-surrogate */
+ 0xDC22,0xDC1D,0xDCD2,0xDCDA,0xDCDB, 0,
+ 0, 0, 0,0xDDA4,0xDD9E, 0, 0, 0,0xDD9D, 0,
+ 0, 0, 0,0xDDAD,0xDDA6,0xDDA7,0xDFB3,0xDFE0,0xDC35,0xDC37,
+ 0, 0,0xDD4A, 0, 0, 0,0xDE5E, 0,0xDEC0, 0,
+ 0, 0, 0, 0, 0, 0,0xDFF9, 0, 0, 0,
+ 0, 0, 0, 0,0xDCF0, 0,0xDCF3,0xDD1B,0xDCF2,0xDCFB,
+ 0xDF1C,0xDF13, 0,0xDF0F, 0,0xDC16,0xDC11,0xDC12, 0,0xDC0E,
+ 0, 0,0xDC67,0xDCF2,0xDCDA, 0,0xDCDC, 0,0xDF94,0xDF9B,
+ 0xDF92,0xDF9A,0xDC88,0xDC86, 0,0xDDEF, 0, 0,0xDE5E, 0,
+ 0xDC58, 0,0xDC56,0xDC54,
+ /* plane 4, row 28 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD865,0xD865,0x4B26,0x4B28,0xD865,0xD866,0x3480,0x50C0,
+ 0x3481,0xD840,0x347E,0x347F,0xD840,0xD840,0xD87E,0xD841,0x34BE,0xD841,
+ 0x34D6,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0x52E5,0xD842,
+ 0x3534,0xD842,0x53AF,0xD842,0xD842,0xD842,0xD843,0xD843,0x35D5,0x35D8,
+ 0xD843,0xD843,0x35D4,0x55D8,0x35D9,0xD843,0xD843,0xD843,0xD87E,0xD843,
+ 0x5711,0x5867,0xD844,0xD844,0x365D,0x5843,0x365E,0x3659,0xD844,0x365A,
+ 0x36A0,0xD845,0xD845,0x3705,0xD845,0x3707,0xD845,0x370E,0x370C,0xD845,
+ 0xD846,0x3745,0xD846,0xD846,0x3764,0xD846,0x3765,0xD846,0x5BDD,0x3766,
+ 0xD846,0x3789,0x37EC,0x37F1,0x5D70,0x5D6A,0x37F0,0x37F8,0x5D74,0x5D5F,
+ 0xD847,0x5D61,0x5D73,0xD847,0x37F2,
+ 1, /* first low-surrogate */
+ 0xDD9B,0xDE96,0xDEA4, 0, 0,0xDE9A,0xDE12, 0, 0,
+ 0,0xDF6B, 0, 0,0xDF37,0xDF3C,0xDC0A,0xDCF7, 0,0xDD66,
+ 0,0xDFA9,0xDFAE,0xDFAD,0xDFC8,0xDFA5,0xDFB0,0xDC95, 0,0xDD25,
+ 0,0xDE99, 0,0xDF74,0xDF70,0xDF6F,0xDE41,0xDE54, 0, 0,
+ 0xDE40,0xDE38, 0, 0, 0,0xDE52,0xDE3A,0xDE57,0xDC4A,0xDE59,
+ 0, 0,0xDFB4,0xDFC0, 0, 0, 0, 0,0xDF75, 0,
+ 0,0xDE60,0xDE47, 0,0xDFF0, 0,0xDFEF, 0, 0,0xDFEC,
+ 0xDD83, 0,0xDD84,0xDD8F, 0,0xDE61, 0,0xDE69, 0, 0,
+ 0xDE62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xDEAE, 0, 0,0xDEB2,
+ /* plane 4, row 29 */
+ 1 | (94 << 8), /* first, last */
+ 0x37F4,0xD848,0x3858,0xD848,0xD848,0x385A,0x3859,0x3857,0x385B,
+ 0x5E50,0xD848,0xD848,0x38A6,0x38C2,0x38C1,0x5F3F,0xD849,0xD849,0x38EF,
+ 0x5FB0,0xD849,0xD849,0x3968,0x6135,0x612D,0x3973,0x396E,0x3974,0x6102,
+ 0x3966,0xD849,0xD849,0xD84A,0x39B9,0x6226,0xD84A,0x3A0C,0xD84B,0xD84B,
+ 0x3A20,0xD84B,0x3A1D,0xD84B,0x3A1C,0xD84B,0x3A21,0x3A1A,0x3A19,0xD84A,
+ 0xD84B,0xD84B,0x3A7E,0xD84B,0xD84B,0xD84B,0xD84B,0x3A9D,0xD84B,0x3A9E,
+ 0x3A9C,0x656E,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0x65B1,0x65D4,0x3ACD,
+ 0xD84C,0x3B0B,0x3B0A,0x6685,0xD84D,0x3B8F,0x6972,0x3B95,0x3B90,0x3B91,
+ 0xD84D,0x693A,0x3BB9,0xD84D,0xD84D,0x3B97,0x3B9E,0xD84D,0x3B8B,0xD84D,
+ 0xD84D,0x3C3B,0x3C3A,0x3C3C,0x3C3D,
+ 2, /* first low-surrogate */
+ 0xDD0B, 0,0xDD10,0xDD0D, 0, 0, 0, 0,
+ 0,0xDE7F,0xDE81, 0, 0, 0, 0,0xDC0B,0xDD4E, 0,
+ 0,0xDFEA,0xDF45, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xDF28,0xDF5D,0xDDDC, 0, 0,0xDDD4, 0,0xDC64,0xDC68,
+ 0,0xDC62, 0,0xDC61, 0,0xDC66, 0, 0, 0,0xDFF2,
+ 0xDC69,0xDC67, 0,0xDF9A,0xDF9B,0xDF85,0xDF9C, 0,0xDFA4, 0,
+ 0, 0,0xDF99,0xDF86,0xDF90,0xDC81,0xDCAE, 0, 0, 0,
+ 0xDD38, 0, 0, 0,0xDD3B, 0, 0, 0, 0, 0,
+ 0xDD4C, 0, 0,0xDD47,0xDD35, 0, 0,0xDD33, 0,0xDD82,
+ 0xDD40,
+ /* plane 4, row 30 */
+ 1 | (94 << 8), /* first, last */
+ 0x3C39,0x3C3E,0x3C6B,0x3C6C,0xD84E,0xD84E,0x3CA2,0x3CA1,0x3C9F,
+ 0xD84E,0xD84E,0xD84F,0x3D2D,0xD84F,0x3D36,0x3D2B,0xD84F,0x3D37,0xD87E,
+ 0xD84F,0xD84F,0x6EAD,0x3D25,0x3D2F,0x3D2C,0xD84F,0xD84F,0x3D32,0xD84F,
+ 0xD84F,0x6E95,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0x3DD5,0xD850,
+ 0x3DD4,0x3DD6,0xD850,0x3DD1,0x7243,0xD851,0x3E46,0x728F,0xD851,0xD851,
+ 0x3E8C,0x3E8A,0x3E88,0xD852,0xD852,0xD851,0xD852,0x3EDD,0xD852,0xD852,
+ 0xD852,0x3F2D,0xD852,0xD852,0x3F2E,0x3F2C,0x3F2B,0x3F30,0xD852,0x3F4E,
+ 0xD853,0xD853,0x3F64,0x3F61,0xD853,0x7575,0xD87E,0x3F70,0x3FA6,0x3FA4,
+ 0xD853,0xD853,0xD853,0x3FA8,0x3FA2,0xD853,0x3FA7,0x75EC,0x3FA5,0xD853,
+ 0x3FA9,0xD853,0xD853,0xD853,0xD853,
+ 5, /* first low-surrogate */
+ 0xDE36,0xDF0E, 0, 0, 0,
+ 0xDFAD,0xDFAA,0xDE17, 0,0xDE67, 0, 0,0xDE72, 0,0xDD0A,
+ 0xDE61,0xDEB0, 0, 0, 0, 0,0xDE6E,0xDE64, 0,0xDE8C,
+ 0xDE66, 0,0xDE6B,0xDE5F,0xDE74,0xDE65,0xDEBB,0xDEBE, 0,0xDEB9,
+ 0, 0,0xDEEF, 0, 0,0xDDDA, 0, 0,0xDE90,0xDFE9,
+ 0, 0, 0,0xDC11,0xDC0D,0xDFED,0xDC21, 0,0xDD81,0xDDB1,
+ 0xDF01, 0,0xDF5E,0xDF62, 0, 0, 0, 0,0xDF5B, 0,
+ 0xDC96,0xDC93, 0, 0,0xDC92, 0,0xDD39, 0, 0, 0,
+ 0xDDC4,0xDDC7,0xDDC3, 0, 0,0xDDC8, 0, 0, 0,0xDDCA,
+ 0,0xDDC5,0xDDCF,0xDDDC,0xDF7C,
+ /* plane 4, row 31 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0x403D,0xD854,0xD854,0x4044,0x4045,0x4046,0xD854,0x7757,
+ 0xD854,0x4047,0x4048,0x4042,0xD854,0xD854,0x4041,0xD854,0xD854,0x4094,
+ 0xD854,0xD854,0xD854,0xD855,0x40C0,0x40B8,0x40C1,0x40C2,0x40BB,0x40BD,
+ 0x40BF,0x40B9,0x40B7,0xD855,0x40C7,0xD855,0x410C,0x410B,0x797B,0x4110,
+ 0xD855,0x415D,0x7A21,0x415A,0x4158,0x4156,0xD855,0x4154,0x7A16,0xD855,
+ 0x41A8,0x41A7,0x41CF,0x41D0,0xD856,0x7AE8,0xD856,0xD856,0x41D1,0x41EB,
+ 0xD856,0x41FB,0x7B6A,0xD856,0x41FD,0x41F8,0x41F7,0x4200,0xD856,0xD856,
+ 0x41F6,0x7B5F,0xD857,0xD858,0x42DF,0xD858,0xD858,0xD858,0x42E2,0x42E4,
+ 0xD858,0x7D82,0xD858,0x42E3,0xD858,0x4359,0x4371,0x438E,0x438C,0xD859,
+ 0x43A4,0xD859,0x8055,0x4414,0xD859,
+ 1, /* first low-surrogate */
+ 0xDC01, 0,0xDDD3,0xDDDC, 0, 0, 0,0xDDD4, 0,
+ 0xDDCC, 0, 0, 0,0xDDD6,0xDDDB, 0,0xDDD5,0xDFD9, 0,
+ 0xDFDD,0xDFDC,0xDFE0,0xDCCC, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xDCD2, 0,0xDCD3, 0, 0, 0, 0,
+ 0xDE8D, 0, 0, 0, 0, 0,0xDFD8, 0, 0,0xDFBC,
+ 0, 0, 0, 0,0xDE8A, 0,0xDE8B,0xDE8D, 0, 0,
+ 0xDF53, 0, 0,0xDF59, 0, 0, 0, 0,0xDF56,0xDF57,
+ 0, 0,0xDE73,0xDC1B, 0,0xDC21,0xDC16,0xDC18, 0, 0,
+ 0xDC44, 0,0xDC26, 0,0xDE36, 0, 0, 0, 0,0xDC3A,
+ 0,0xDCF4, 0, 0,0xDF62,
+ /* plane 4, row 32 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0x4411,0xD859,0x441B,0x4412,0x440E,0x4415,0x8168,
+ 0x4410,0xD859,0x4417,0x8246,0x8243,0x4470,0x44ED,0xD85B,0x44EE,0xD85B,
+ 0xD85B,0xD85B,0x8481,0xD85B,0xD85B,0xD85B,0x44F4,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0x847C,0xD85B,0xD85B,0x846A,0xD85B,0x8488,0x44F2,
+ 0x44F8,0x44F3,0xD85B,0xD85B,0x44FA,0xD85B,0xD85B,0xD87E,0xD85C,0xD85C,
+ 0x8710,0xD85C,0xD85C,0x871F,0x45B6,0x45B7,0xD85C,0x870F,0xD85C,0x45BA,
+ 0xD85C,0x45BC,0xD85C,0xD85D,0x463B,0x88D3,0x462F,0xD85D,0xD85D,0xD85D,
+ 0x4637,0x4699,0xD85E,0xD85E,0xD85E,0xD85E,0x46D9,0x46D8,0x46D7,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0x4736,0xD85E,0xD85F,0xD85F,0x8C87,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0x8CC6,
+ 1, /* first low-surrogate */
+ 0xDF5B,0xDF6A, 0,0xDF68, 0, 0, 0, 0, 0,
+ 0,0xDF81, 0, 0, 0, 0, 0,0xDCE7, 0,0xDCE6,
+ 0xDCD1,0xDD11, 0,0xDCD0,0xDCD9,0xDD0A, 0,0xDCDA,0xDCDD,0xDCC8,
+ 0xDCE2,0xDCE9,0xDCCB, 0,0xDCCC,0xDCC1, 0,0xDCDE, 0, 0,
+ 0, 0,0xDD51,0xDD12, 0,0xDCE0,0xDD2B,0xDDB4,0xDED8,0xDED1,
+ 0,0xDED2,0xDECD, 0, 0, 0,0xDF3D, 0,0xDECA, 0,
+ 0xDECB, 0,0xDED7,0xDDF4, 0, 0, 0,0xDE87,0xDE8B,0xDE83,
+ 0, 0,0xDDC5,0xDDD2,0xDDC6,0xDDD3, 0, 0, 0,0xDDF0,
+ 0xDDCD,0xDDCC,0xDDDC,0xDDD6, 0,0xDFE6,0xDC41,0xDC3F, 0,0xDCC5,
+ 0xDCC0,0xDCC6,0xDCBE,0xDCBF,
+ /* plane 4, row 33 */
+ 1 | (94 << 8), /* first, last */
+ 0x4770,0xD85F,0xD85F,0xD85F,0xD85F,0x47A5,0x47A6,0x47A9,0x47EE,
+ 0x4854,0xD860,0x4857,0xD860,0xD861,0x48A1,0xD861,0xD861,0xD861,0xD861,
+ 0x48D3,0xD861,0x48D4,0xD861,0x48D7,0x90CC,0x916D,0x9170,0x48F7,0x48F6,
+ 0x48F9,0x48F8,0x9258,0x9242,0x9268,0x9269,0xD862,0xD862,0x9243,0xD862,
+ 0x9247,0x498A,0xD863,0xD863,0xD863,0xD863,0x4994,0xD863,0x4993,0xD863,
+ 0xD863,0x959D,0x49DD,0x49DC,0x49F7,0x96CF,0xD864,0xD864,0x4A42,0xD864,
+ 0xD864,0x4A54,0xD864,0x4A55,0xD864,0x4A8F,0xD864,0x97F4,0x4AB4,0x4AB3,
+ 0xD865,0xD865,0x9809,0xD865,0xD865,0xD865,0xD865,0x4AFB,0x4AFD,0xD865,
+ 0xD865,0x98AB,0x4AFC,0xD865,0x4B2C,0x4B2F,0xD865,0x4B2B,0xD865,0x4B33,
+ 0x4B34,0x98FB,0xD866,0x9AAC,0x9AAE,
+ 2, /* first low-surrogate */
+ 0xDD63,0xDED3,0xDEDA,0xDED5, 0, 0, 0, 0,
+ 0,0xDEEE, 0,0xDEFC,0xDC14, 0,0xDD23,0xDD22,0xDD30,0xDEB5,
+ 0,0xDF38, 0,0xDF3F, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xDD68,0xDD67, 0,0xDD65,
+ 0, 0,0xDC75,0xDCF7,0xDCF3,0xDCF6, 0,0xDD00, 0,0xDCFF,
+ 0xDCF5, 0, 0, 0, 0, 0,0xDC92,0xDE06, 0,0xDE07,
+ 0xDE6B, 0,0xDE6C, 0,0xDF93, 0,0xDF94, 0, 0, 0,
+ 0xDC62,0xDC63, 0,0xDC5F,0xDC64,0xDC5B,0xDC59, 0, 0,0xDDA4,
+ 0xDDAC, 0, 0,0xDEB5, 0, 0,0xDEAE, 0,0xDEC5, 0,
+ 0, 0,0xDC3B,
+ /* plane 4, row 34 */
+ 1 | (94 << 8), /* first, last */
+ 0x9AAA,0x4BE8,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0x9B5C,
+ 0xD867,0xD867,0x4D5D,0x50D2,0x3485,0x3488,0xD840,0xD840,0x348E,0x3484,
+ 0xD840,0x50DF,0xD840,0x3483,0xD840,0xD840,0xD841,0xD841,0x3502,0xD841,
+ 0x3506,0x3505,0xD841,0x34FE,0x3501,0x3500,0xD841,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0x35E7,0x5619,0xD843,0xD843,0xD843,0x35E6,0xD843,0x35ED,
+ 0x35E2,0x35EB,0xD843,0x35E8,0x35EC,0x560A,0x3624,0x589A,0xD845,0x3662,
+ 0xD844,0x3661,0x3660,0x3664,0x368B,0xD845,0xD845,0xD845,0xD845,0xD846,
+ 0x3719,0x3716,0x3718,0x3722,0xD846,0x371D,0x3717,0x371E,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0x3769,0x376A,0xD846,0x376C,0x377A,0x378A,
+ 0xD847,0xD847,0xD847,0x379C,0xD847,
+ 3, /* first low-surrogate */
+ 0xDEBF,0xDC2B,0xDC84,0xDC80,0xDD4D,0xDD4F, 0,
+ 0xDD4C,0xDF92, 0, 0, 0, 0,0xDFAE,0xDF79, 0, 0,
+ 0xDF71, 0,0xDFB3, 0,0xDF2C,0xDF77,0xDD2F,0xDFC3, 0,0xDFCD,
+ 0, 0,0xDFC9, 0, 0, 0,0xDFCE,0xDCA5,0xDCA0,0xDCFE,
+ 0xDD59,0xDE9A, 0, 0,0xDEE4,0xDED7,0xDEDC, 0,0xDEE7, 0,
+ 0, 0,0xDEE5, 0, 0, 0, 0, 0,0xDC14, 0,
+ 0xDFF1, 0, 0, 0, 0,0xDDB6,0xDE6E,0xDE6C,0xDE81,0xDC42,
+ 0, 0, 0, 0,0xDC1A, 0, 0, 0,0xDC27,0xDC25,
+ 0xDC17,0xDC1C,0xDC3D,0xDC20, 0, 0,0xDE81, 0, 0, 0,
+ 0xDC09,0xDCC6,0xDCC4, 0,0xDCC5,
+ /* plane 4, row 35 */
+ 1 | (94 << 8), /* first, last */
+ 0x37FD,0x37F9,0xD847,0x37FF,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0x37FC,0xD847,0x5D85,0x37FB,0x3802,0x385F,0x5E56,0x385E,0x385D,0x385C,
+ 0xD848,0x5E51,0x3892,0xD848,0xD848,0x3894,0x3895,0x38D1,0xD849,0x38F1,
+ 0xD849,0x5FB1,0xD849,0xD849,0x3977,0x396F,0xD849,0xD849,0x3987,0x397D,
+ 0x397C,0x397E,0x3985,0x398B,0x3986,0x3980,0xffff,0xD849,0x3978,0xD87E,
+ 0xD84A,0xD84A,0x39BA,0xD84A,0x3A33,0xD84B,0x3A2D,0xD84B,0xD84B,0xD84B,
+ 0x3A37,0x645A,0x6463,0xD84B,0xD84B,0x3A2E,0xD84B,0xD84B,0x3A3D,0xD84B,
+ 0x3AA0,0xD84B,0xD84B,0x3AA3,0xD84C,0x669B,0xD84C,0x66A3,0x3B0E,0x669E,
+ 0xD84C,0x3BB6,0xD84D,0x3BAB,0x3BAD,0x3BA6,0xD84D,0x69B8,0x3BAA,0x69BA,
+ 0x3BB1,0xD84D,0x3BA8,0x3BAF,0x3BB0,
+ 3, /* first low-surrogate */
+ 0xDEEF, 0,0xDEDF,0xDEDE,0xDEEE,0xDEF5,0xDEEC,
+ 0,0xDEDD, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xDD22, 0, 0,0xDE97,0xDE95, 0, 0, 0,0xDCA9, 0,
+ 0xDD53, 0,0xDD56,0xDD55, 0, 0,0xDFE3,0xDFE2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDFA9, 0,0xDCAB,
+ 0xDC33,0xDC0A, 0,0xDE59, 0,0xDCBC, 0,0xDCC4,0xDCC7,0xDCC6,
+ 0, 0, 0,0xDCB8,0xDCDA, 0,0xDCB7,0xDCC0, 0,0xDCCD,
+ 0,0xDFBC,0xDFAB, 0,0xDC86, 0,0xDE5A, 0, 0, 0,
+ 0xDF43, 0,0xDDAC, 0, 0, 0,0xDDBE, 0, 0, 0,
+ 0,0xDDAB,
+ /* plane 4, row 36 */
+ 1 | (94 << 8), /* first, last */
+ 0x3BA7,0x3BB2,0x3B9D,0x3BA5,0x3BB5,0xD846,0x69C7,0x69D7,0xD84E,
+ 0x3C41,0xD84E,0xD84E,0x6B70,0xD84E,0xD84E,0x3C72,0x6B9D,0x3C6F,0x3C71,
+ 0xD84E,0x3C85,0xD84E,0xD84E,0x3CA4,0x3CA5,0x3CA6,0xD84E,0x3CA8,0xD84E,
+ 0xD84E,0x3CA3,0xD84F,0xD84F,0xD84F,0x6F16,0x6F24,0xD84F,0x3D43,0xD84F,
+ 0xD84F,0x3D3D,0x3D45,0xD84F,0xD84F,0x3D44,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0x6F45,0xD84F,0xD84F,0xD850,0x3DE3,0x7179,0xffff,0x3DDF,0x3DE4,0x717A,
+ 0x3DE5,0xD850,0x7254,0x3E22,0x3E4A,0xD851,0x3E49,0x3E44,0x3E4B,0x3E87,
+ 0x3E89,0x3E92,0x3E91,0x3E90,0x3E8E,0xD852,0xD852,0xD852,0xD87E,0x3F12,
+ 0x3F10,0x3F11,0xD852,0x3F32,0x3F34,0x3F37,0x3F33,0x3F36,0x3F35,0x3F65,
+ 0xD853,0x757C,0x757B,0xD853,0x7612,
+ 6, /* first low-surrogate */
+ 0xDF3E, 0, 0,0xDCF9,
+ 0,0xDCF3,0xDCF7, 0,0xDE45,0xDE48, 0, 0, 0, 0,
+ 0xDE44, 0,0xDEAF,0xDEB1, 0, 0, 0,0xDFCF, 0,0xDFCB,
+ 0xDFCD, 0,0xDC50,0xDEEC,0xDF1A, 0, 0,0xDED8, 0,0xDED0,
+ 0xDED1, 0, 0,0xDE7B,0xDED2, 0,0xDED4,0xDEE7,0xDEDF,0xDEDE,
+ 0,0xDED9,0xDECF,0xDF0D, 0, 0, 0, 0, 0, 0,
+ 0,0xDF38, 0, 0, 0,0xDEA9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xDC3E,0xDC46,0xDDED,0xDD30, 0,
+ 0, 0,0xDF6C, 0, 0, 0, 0, 0, 0, 0,
+ 0xDCAC, 0, 0,0xDDC9,
+ /* plane 4, row 37 */
+ 1 | (94 << 8), /* first, last */
+ 0x3FB0,0xD853,0x3FAF,0x3FAA,0xD853,0xD853,0xD853,0x3FAB,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3FF3,0xD854,0x3FF4,0xD854,
+ 0x76B6,0x76E0,0x4008,0x404E,0x4055,0x404B,0xD854,0xD854,0x404D,0x7773,
+ 0xD854,0x4052,0x7772,0x404C,0x7770,0x4050,0x4053,0xD854,0x4051,0xD854,
+ 0xD854,0xD854,0x4089,0xD854,0x4095,0x40CC,0x40C8,0x40CE,0xD855,0x40CA,
+ 0xD855,0x789D,0xD855,0x40CD,0xD855,0x415C,0x4167,0x4169,0x4165,0x4162,
+ 0xD856,0x7A27,0x7A35,0xD87E,0x41AA,0xD856,0xD856,0x41D2,0x7BA2,0x4203,
+ 0x420C,0xD856,0x4209,0x4206,0x4205,0x7B89,0xD856,0x420B,0x4208,0xD856,
+ 0x7BA5,0xD856,0x428E,0xD857,0x7CB6,0x42E8,0xD858,0xD858,0xD858,0x42EA,
+ 0xD858,0x7DA5,0x7DC3,0xD858,0x42E9,
+ 2, /* first low-surrogate */
+ 0xDE12, 0, 0,0xDDFD,0xDE01,0xDE11, 0,0xDE89,
+ 0xDE05,0xDDFE,0xDE0B,0xDE20,0xDE04,0xDF88, 0,0xDC02, 0,0xDC03,
+ 0, 0, 0, 0, 0, 0,0xDE29,0xDE3B, 0, 0,
+ 0xDE06, 0, 0, 0, 0, 0, 0,0xDE03, 0,0xDF78,
+ 0xDF79,0xDF7D, 0,0xDF7F, 0, 0, 0, 0,0xDD32, 0,
+ 0xDD00, 0,0xDD22, 0,0xDEA9, 0, 0, 0, 0, 0,
+ 0xDC04, 0, 0,0xDD59, 0,0xDDB8,0xDE9B, 0, 0, 0,
+ 0,0xDF92, 0, 0, 0, 0,0xDF8F, 0, 0,0xDF98,
+ 0,0xDFAE, 0,0xDE9D, 0, 0,0xDC49,0xDC50,0xDC46, 0,
+ 0xDC4E, 0, 0,0xDC55,
+ /* plane 4, row 38 */
+ 1 | (94 << 8), /* first, last */
+ 0x42EB,0xD858,0x42F0,0xD858,0x434B,0x7FAB,0x4373,0x4375,0x4392,
+ 0x4391,0x4393,0x8025,0x43A7,0x43A6,0x43A8,0x43AA,0xD859,0x43A9,0x8059,
+ 0x43BB,0x43BC,0x43BA,0x43BD,0x4427,0x8185,0xD859,0x4424,0x441E,0x441F,
+ 0x441D,0x4420,0x4423,0x4429,0x4422,0xD859,0xD859,0x441C,0x818E,0x4428,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0x4471,0x4473,0x4472,
+ 0xD85A,0x4502,0xD85B,0xD85B,0xD85B,0x44FE,0x84BE,0xD85B,0xD85B,0xD85B,
+ 0x4508,0xD85B,0xD85B,0xD85B,0x4507,0x4504,0xD85B,0xD85B,0x4500,0x44FC,
+ 0xD85B,0x4544,0xD85B,0x44F1,0xD85B,0xD85B,0x84A6,0x4506,0xD85C,0xD85C,
+ 0x45C6,0x45C3,0x45C1,0x45C2,0xD85C,0x45C4,0x45C7,0xD85C,0x45BF,0x45D2,
+ 0xD85C,0x45CA,0xD87E,0xD85C,0x872F,
+ 2, /* first low-surrogate */
+ 0xDC64, 0,0xDE38, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,0xDCFE, 0, 0,
+ 0, 0, 0, 0, 0, 0,0xDFA6, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xDF9C,0xDF99, 0, 0, 0,
+ 0xDFB5,0xDFA3,0xDFA0,0xDFA7,0xDF9B,0xDDDF,0xDDE1, 0, 0, 0,
+ 0xDE4D, 0,0xDDF3,0xDD6F,0xDD69, 0, 0,0xDD6B,0xDD78,0xDD87,
+ 0,0xDD85,0xDD82,0xDD90, 0, 0,0xDD80,0xDD67, 0, 0,
+ 0xDD61, 0,0xDD93, 0,0xDDF2,0xDD86, 0, 0,0xDDCD,0xDDC4,
+ 0, 0, 0, 0,0xDF0F, 0, 0,0xDF0D, 0, 0,
+ 0xDF73, 0,0xDDBA,0xDF0A,
+ /* plane 4, row 39 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0x4613,0xD85D,0x4630,0x463E,0x4639,0xD85D,0xD85D,
+ 0x463C,0x463F,0xD85D,0x4634,0x463D,0xD85D,0xD85D,0x4638,0xD85D,0xD85D,
+ 0xD85D,0x89A0,0x4682,0xD85E,0x4683,0xD85E,0x469B,0xD85E,0x46E0,0x46DD,
+ 0xD85E,0xD85E,0x46DE,0xD85E,0x46E3,0x46E5,0xD85E,0x8A97,0x46E2,0xD85E,
+ 0xD85E,0xD85E,0x46DF,0xD85E,0x472E,0xD85E,0x4737,0x4738,0xD85E,0xD85E,
+ 0xD85F,0xD85F,0x8C8B,0xD85F,0x3562,0xD85F,0x4794,0x4793,0x47AB,0x47AD,
+ 0xD85F,0xD85F,0x47F5,0x47F7,0xD860,0x47F6,0x47F8,0xD860,0x47FB,0x47F9,
+ 0x4858,0x485A,0xD860,0x4859,0x8F0F,0x4885,0x48A4,0x48D8,0x48D9,0xD861,
+ 0x48DD,0x48C8,0xD861,0x48FA,0x48FB,0x9275,0x4927,0x929F,0x492A,0x4925,
+ 0xD862,0x4928,0xD863,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDF08,0xDF13, 0,0xDDF8, 0, 0, 0,0xDEAB,0xDEA8,
+ 0, 0,0xDEA5, 0, 0,0xDEC3,0xDEA4, 0,0xDED4,0xDEBA,
+ 0xDFF1, 0, 0,0xDC3F, 0,0xDCEA, 0,0xDDF7, 0, 0,
+ 0xDDFA,0xDDF5, 0,0xDDFE, 0, 0,0xDE00, 0, 0,0xDE02,
+ 0xDDFB,0xDE07, 0,0xDE1A, 0,0xDFB8, 0, 0,0xDFE9,0xDFEB,
+ 0xDC50,0xDC4F, 0,0xDD86, 0,0xDD8E, 0, 0, 0, 0,
+ 0xDEF0,0xDEFB, 0, 0,0xDC42, 0, 0,0xDC85, 0, 0,
+ 0, 0,0xDF05, 0, 0, 0, 0, 0, 0,0xDF4B,
+ 0, 0,0xDF63, 0, 0, 0, 0, 0, 0, 0,
+ 0xDD99, 0,0xDC81,0xDD17,0xDD10,
+ /* plane 4, row 40 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0x95A6,0x4995,0x969A,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD864,0x4A0F,0x4A11,0xD864,0xD864,0x4A10,0xD864,0x4A15,
+ 0x4A13,0x9757,0xD864,0x4A47,0x4A46,0xD864,0x4A59,0x4A5B,0xD864,0x4A5E,
+ 0xD864,0xD864,0x4A5A,0x4A91,0x4A92,0x4A90,0x4A93,0xD865,0x97F7,0x4ABE,
+ 0xD865,0xD865,0xD865,0x4ABC,0x4ABB,0x4AB7,0x4AB9,0xD865,0x4B01,0x4AFE,
+ 0xD865,0xD865,0x4B02,0xD865,0x4AFF,0x98B0,0xD865,0x4B00,0xD865,0x4B37,
+ 0x4B3A,0x4B6F,0x4B77,0x4B79,0x99C6,0xD866,0x4BC8,0xD866,0xD866,0xD866,
+ 0xD866,0x4BF2,0xD866,0x4BF1,0x4BF0,0x9B62,0xD867,0x4C34,0xD867,0xD867,
+ 0xD867,0xD868,0xD868,0x4D2C,0x4D2D,0xD868,0xD868,0xD87E,0xD869,0x50FA,
+ 0xD840,0x3491,0xD840,0x3494,0xD840,
+ 1, /* first low-surrogate */
+ 0xDD12, 0, 0, 0,0xDEFA,0xDEF3,0xDEF2,0xDEF5,0xDEF6,
+ 0xDFBB,0xDFC2,0xDCA7, 0, 0,0xDCA8,0xDCA3, 0,0xDCAA, 0,
+ 0, 0,0xDDDC, 0, 0,0xDE0F, 0, 0,0xDE79, 0,
+ 0xDE7F,0xDE85, 0, 0, 0, 0, 0,0xDC1B, 0, 0,
+ 0xDC77,0xDC76,0xDC98, 0, 0, 0, 0,0xDC7A, 0, 0,
+ 0xDDBC,0xDDBA, 0,0xDDB6, 0, 0,0xDDB4, 0,0xDECF, 0,
+ 0, 0, 0, 0, 0,0xDC7B, 0,0xDE1C,0xDE21,0xDE1D,
+ 0xDEC0, 0,0xDEFF, 0, 0, 0,0xDD56, 0,0xDFA1,0xDFA2,
+ 0xDFA6,0xDE56,0xDE57, 0, 0,0xDF01,0xDFED,0xDE1C,0xDDF2, 0,
+ 0xDFB8, 0,0xDFC0, 0,0xDFB7,
+ /* plane 4, row 41 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0x34C4,0x350A,0xD841,0x5285,0xD842,0x3552,0xD842,0x3559,
+ 0x366F,0xD843,0x35F2,0x35F4,0x5643,0xD843,0x35F1,0x563C,0xD843,0x366A,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0x3724,0xD846,0x3723,0xD846,
+ 0xD846,0xD846,0x3727,0xD846,0xD846,0x376D,0x5BED,0x376E,0x376F,0xD846,
+ 0xD846,0x5C35,0x379F,0x380A,0x3806,0x380E,0xD847,0x380D,0x3805,0xD847,
+ 0xD847,0x380B,0x3810,0x382E,0xD848,0xD848,0xD848,0xD848,0xD848,0x3896,
+ 0x3897,0x38C4,0x5F47,0x38C5,0xD849,0x38D2,0xD849,0xD849,0xD849,0x3981,
+ 0xD84A,0x398E,0x3990,0x398F,0xD84A,0x3991,0x3995,0x3993,0xD849,0x616D,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x3A3B,0x3A48,0xD84B,0xD84B,0x3A46,
+ 0x3A47,0xD84B,0xD84B,0xD84B,0x3A4C,
+ 1, /* first low-surrogate */
+ 0xDFE1, 0, 0,0xDFE8, 0,0xDCB2, 0,0xDEAE, 0,
+ 0,0xDF7E, 0, 0, 0,0xDF76, 0, 0,0xDF96, 0,
+ 0xDC20,0xDC21,0xDC23,0xDC29,0xDE77,0xDC51, 0,0xDC56, 0,0xDC88,
+ 0xDC59,0xDC55, 0,0xDD97,0xDD98, 0, 0, 0, 0,0xDEA1,
+ 0xDEA3, 0, 0, 0, 0, 0,0xDF0A, 0, 0,0xDF3D,
+ 0xDF0C, 0, 0, 0,0xDD3D,0xDD39,0xDEB0,0xDEB2,0xDEAE, 0,
+ 0, 0, 0, 0,0xDC20, 0,0xDD6E,0xDD6D,0xDD6A, 0,
+ 0xDC32, 0, 0, 0,0xDC39, 0, 0, 0,0xDFA3, 0,
+ 0xDC7F,0xDC35,0xDC3D,0xDDF4,0xDDF5, 0, 0,0xDD48,0xDD28, 0,
+ 0,0xDD27,0xDD32,0xDD2C,
+ /* plane 4, row 42 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84B,0x3A4A,0x3A50,0x3A43,0xD84B,0xD84B,0xD87E,0x3A49,0x3AA6,
+ 0x3AA5,0x3AA4,0xD84B,0xD84C,0x3AB9,0xD84C,0x3ACE,0x3ACF,0x3B13,0xD84C,
+ 0xD84C,0xD84D,0x3BC6,0x3BC5,0x3BCA,0x3BD9,0x3BC1,0xD84D,0xD84D,0x69F5,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0x3BCB,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0x6A03,0xD84D,0xD84D,0x6A65,0x3C42,0xD84E,0x6B75,0x3C74,0x3C73,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x6F8A,0x6F56,0x3D52,0xD84F,0xD84F,
+ 0xD84F,0x3D50,0xD84F,0x3D4B,0xD84F,0x3D4C,0x3D6D,0xD84F,0x6F98,0xD84F,
+ 0xD84F,0xD84F,0x3D4F,0x6F68,0x3DF0,0xD850,0x7234,0x7245,0x3E4D,0x3E4C,
+ 0xD851,0x3E4F,0x3E4E,0x3E50,0xD851,0x735C,0x3E96,0x7356,0xD852,0xD852,
+ 0x3E97,0x3E95,0x3E98,0xD852,0xD852,
+ 1, /* first low-surrogate */
+ 0xDD2E, 0, 0, 0,0xDD23,0xDD31,0xDCC5, 0, 0,
+ 0, 0,0xDFC9,0xDC89, 0,0xDCBB, 0, 0, 0,0xDF97,
+ 0xDF93,0xDE28, 0, 0, 0, 0, 0,0xDE18,0xDE3B, 0,
+ 0xDE27,0xDE24,0xDE1B,0xDE31, 0,0xDE26,0xDEA3,0xDE3F,0xDE22,0xDE19,
+ 0,0xDE41,0xDE2B, 0, 0,0xDD0C, 0, 0, 0,0xDE4E,
+ 0xDEB9,0xDEFA,0xDFE9,0xDFE8,0xDFE4, 0, 0, 0,0xDF5F,0xDF5D,
+ 0xDF52, 0,0xDF74, 0,0xDF46, 0, 0,0xDFAA, 0,0xDF4A,
+ 0xDF59,0xDF4B, 0, 0, 0,0xDF50, 0, 0, 0, 0,
+ 0xDED0, 0, 0, 0,0xDECC, 0, 0, 0,0xDC64,0xDC65,
+ 0, 0, 0,0xDC5C,0xDE15,
+ /* plane 4, row 43 */
+ 1 | (94 << 8), /* first, last */
+ 0x3EEC,0x3EEB,0x3F13,0x3F14,0x3F38,0x3F3A,0x3F39,0xD852,0x3F68,
+ 0x3F67,0xD853,0xD853,0xD853,0x3FBE,0x3FBC,0xD853,0xD853,0xD853,0x3FBB,
+ 0xD853,0x3FBA,0xD853,0x3FB9,0x3FB7,0xD853,0xD853,0x3FC1,0xD853,0x3FF7,
+ 0xD854,0x4060,0xD854,0xD854,0x4059,0x405C,0x405A,0x4058,0xD854,0x405B,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0x405D,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0x40D4,0x40D3,0x78BF,0x40D2,0x78BD,0xD855,0x40D7,
+ 0x40D1,0x78E4,0x40D5,0xD855,0xD87E,0x416D,0x416F,0x7A34,0x4175,0x416C,
+ 0x4174,0xD856,0x4173,0xD856,0xD856,0x7A36,0x41AC,0xD856,0xD856,0xD856,
+ 0x4210,0xD856,0xD856,0x7BBA,0x7BBC,0x420F,0x7BC8,0x4223,0x7BC3,0x421D,
+ 0x7BB6,0x420E,0xD856,0xD856,0x4215,
+ 8, /* first low-surrogate */
+ 0xDF79, 0,
+ 0,0xDCC5,0xDCB8,0xDE2C, 0, 0,0xDE37,0xDE35,0xDE31, 0,
+ 0xDE2F, 0,0xDE2B, 0, 0,0xDE2D,0xDE2A, 0,0xDF95, 0,
+ 0xDE3E, 0,0xDE47,0xDE45, 0, 0, 0, 0,0xDE52, 0,
+ 0xDE70,0xDE50,0xDE58,0xDE51,0xDE3D, 0,0xDE41,0xDE0C,0xDE3C,0xDF86,
+ 0xDF83,0xDF89,0xDFF3, 0, 0, 0, 0, 0,0xDD2D, 0,
+ 0, 0, 0,0xDEC5,0xDD55, 0, 0, 0, 0, 0,
+ 0,0xDC43, 0,0xDC37,0xDC45, 0, 0,0xDDE5,0xDEA6,0xDFDB,
+ 0,0xDFDA,0xDFE6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,0xDFF8,0xDFE9,
+ /* plane 4, row 44 */
+ 1 | (94 << 8), /* first, last */
+ 0x7BC2,0x4213,0xD856,0xD856,0x421B,0x7BC5,0x4222,0x4226,0xD856,
+ 0x7BBD,0x7BB0,0x4221,0x421C,0x4217,0xD856,0x421A,0x7BBB,0xD857,0xD857,
+ 0xD857,0x4299,0xD857,0x4297,0xD858,0xD858,0x42FD,0xD858,0x42F6,0x42FE,
+ 0x42F5,0x42FF,0x42F7,0xD858,0xD858,0xD858,0x4301,0x7E04,0xD858,0xD858,
+ 0xD858,0x4377,0xD858,0xD858,0xD859,0xD859,0xD859,0x43AB,0xD859,0xD859,
+ 0x43C0,0xD859,0x4431,0x442E,0xD87E,0xD859,0x442C,0xD859,0xD859,0x4432,
+ 0x442F,0x442B,0x442D,0x4433,0xD85A,0xD85A,0x81F1,0x4457,0x445C,0x447B,
+ 0xD85A,0xD85A,0x447A,0xD85B,0x8522,0x4513,0x451E,0x4517,0x4520,0x452A,
+ 0x4511,0x4515,0x450F,0x4518,0x8538,0xD85B,0xD85B,0x452C,0x8532,0xD87E,
+ 0x8510,0xD85B,0xD85B,0x451C,0xD85B,
+ 3, /* first low-surrogate */
+ 0xDFE8,0xDFF6, 0, 0, 0, 0,0xDFE7,
+ 0, 0, 0, 0, 0,0xDFD5, 0, 0,0xDED3,0xDEC7,
+ 0xDED1, 0,0xDEC3, 0,0xDC80,0xDC98, 0,0xDC84, 0, 0,
+ 0, 0, 0,0xDC97,0xDC83,0xDC81, 0, 0,0xDC8C,0xDE42,
+ 0xDFAB, 0,0xDFA3,0xDFA6,0xDC5C,0xDC69,0xDC67, 0,0xDD8B,0xDDA8,
+ 0,0xDFD8, 0, 0,0xDD89,0xDFDC, 0,0xDFE0,0xDFE5, 0,
+ 0, 0, 0, 0,0xDD18,0xDD19, 0, 0, 0, 0,
+ 0xDE5F,0xDE5E, 0,0xDE02, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,0xDE12,0xDE36, 0, 0,0xDDA8,
+ 0,0xDE23,0xDE03, 0,0xDE00,
+ /* plane 4, row 45 */
+ 1 | (94 << 8), /* first, last */
+ 0x4529,0xD85B,0xD85B,0x4512,0x854F,0x4597,0xD85C,0x8772,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x45D4,0x45D0,0x877C,0xD85C,0xD87E,
+ 0xD85C,0xD85C,0x45D3,0x4614,0xD85D,0x4646,0x4645,0xD85D,0x4643,0xD85D,
+ 0x890D,0x4644,0x4648,0xD85D,0x4647,0xD85D,0xD85D,0xD85D,0x8908,0x4649,
+ 0x4685,0xD85E,0x4684,0xD85E,0x469D,0xD85E,0x469E,0x46A0,0xD85E,0x469C,
+ 0xD85E,0x469F,0xD85E,0x46F7,0x46EA,0xD85E,0x46EF,0x46E9,0x46F3,0x46F0,
+ 0x46EB,0xD85E,0x46EC,0x46F2,0x46F5,0x46EE,0xD85E,0xD85E,0x473A,0x474B,
+ 0xD85F,0x474A,0x474C,0xD85F,0xD85F,0xD85F,0x4779,0x477B,0x4778,0xD85F,
+ 0xD85F,0x47B5,0xD85F,0x47B4,0x47B7,0x8D9E,0x4809,0x47FE,0x4808,0x4807,
+ 0xD860,0xD860,0xD860,0x4806,0x4804,
+ 2, /* first low-surrogate */
+ 0xDE46,0xDE61, 0, 0, 0,0xDF84, 0,0xDF6B,
+ 0xDF62,0xDF56,0xDF6A,0xDF52,0xDF55, 0, 0, 0,0xDF61,0xDDBB,
+ 0xDF58,0xDF77, 0, 0,0xDED7, 0, 0,0xDEDE, 0,0xDEDF,
+ 0, 0, 0,0xDED1, 0,0xDEE2,0xDEE1,0xDEDD, 0, 0,
+ 0,0xDC4B, 0,0xDC4E, 0,0xDCFC, 0, 0,0xDCFA, 0,
+ 0xDCFB, 0,0xDCFE, 0, 0,0xDE31, 0, 0, 0, 0,
+ 0,0xDE38, 0, 0, 0, 0,0xDE3A,0xDFBB, 0, 0,
+ 0xDC59, 0, 0,0xDCDB,0xDCDF,0xDCE2, 0, 0, 0,0xDD9E,
+ 0xDDA1, 0,0xDF10, 0, 0, 0, 0, 0, 0, 0,
+ 0xDC76,0xDC7F,0xDC7D,
+ /* plane 4, row 46 */
+ 1 | (94 << 8), /* first, last */
+ 0x4805,0x47FF,0x480B,0xD860,0xD860,0x483B,0x485D,0x485C,0x485F,
+ 0x485E,0x8F28,0xD860,0x8F21,0x4883,0xD861,0xD861,0x48A7,0x9066,0x906C,
+ 0xD861,0x48A8,0xD861,0xD861,0xD861,0xD861,0xD861,0x90F6,0x48E0,0x48DF,
+ 0x48FE,0x48FC,0x48FF,0x48FD,0xD862,0x492C,0x92EC,0x92BA,0x92E3,0x92BD,
+ 0x499D,0xD863,0x95B4,0xD863,0x4A40,0xD864,0xD864,0x4A5F,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0x97D1,0xD865,0x4AC0,0x9823,0xD865,
+ 0x4AC1,0x4AC6,0xD865,0xD865,0x4B04,0x4B05,0xD865,0x990B,0x4B3E,0x4B3D,
+ 0x4B40,0x4B3F,0xD865,0x4B42,0xD865,0xD865,0xD865,0x4B84,0x4B82,0x4B7F,
+ 0x4B85,0xD866,0xD866,0x4BCC,0x9AB2,0x4BCB,0x4BCD,0xD866,0xD866,0x9ADB,
+ 0xD866,0x4BF5,0xD866,0xD866,0xD866,
+ 4, /* first low-surrogate */
+ 0xDC82,0xDE57, 0, 0, 0, 0,
+ 0, 0,0xDF2E, 0, 0,0xDD8B,0xDD8D, 0, 0, 0,
+ 0xDD90, 0,0xDEEC,0xDF6F,0xDF6B,0xDF71,0xDF78, 0, 0, 0,
+ 0, 0, 0, 0,0xDDAD, 0, 0, 0, 0, 0,
+ 0,0xDD2F, 0,0xDF78, 0,0xDDF8,0xDE19, 0,0xDE9B,0xDE94,
+ 0xDE97,0xDE99,0xDFA6,0xDFA4,0xDFA7, 0,0xDC95, 0, 0,0xDC90,
+ 0, 0,0xDC9B,0xDDC4, 0, 0,0xDDC6, 0, 0, 0,
+ 0, 0,0xDEE3, 0,0xDEDF,0xDEDD,0xDEE7, 0, 0, 0,
+ 0,0xDE2D,0xDE2C, 0, 0, 0, 0,0xDE34,0xDE38, 0,
+ 0xDF1D, 0,0xDF1A,0xDF1B,0xDF14,
+ /* plane 4, row 47 */
+ 1 | (94 << 8), /* first, last */
+ 0x9AF0,0xD866,0xD867,0x4C20,0x4C21,0xD867,0xD867,0x4C37,0x4C3E,
+ 0x9B73,0x4C3D,0x9B6E,0xD867,0xD867,0xD867,0x9B65,0xD867,0x4C3C,0xD867,
+ 0x4C38,0x9B6A,0xD867,0x9B6D,0xD867,0x4C3B,0xD867,0x4CB0,0xD867,0xD867,
+ 0xD867,0x4CAD,0x4CB2,0x4CB8,0x9D0B,0xD867,0x4CAF,0xD867,0xD867,0x4D1A,
+ 0x9E76,0x4D20,0x4D21,0x4D30,0x9EA8,0x4D2F,0xD868,0xD868,0xD868,0xD868,
+ 0x4D5F,0x4D60,0xD869,0xD869,0x9F11,0xD869,0xD840,0x348A,0x5119,0x349C,
+ 0xD840,0x349A,0xD840,0xD840,0xD841,0x350C,0x350B,0x350D,0x5292,0xD842,
+ 0xD843,0x35FE,0xD843,0xD843,0x35FF,0x35FB,0x35FC,0x3609,0xD843,0x3600,
+ 0xD843,0x5675,0xD843,0xD843,0xD843,0xD844,0xD845,0xD845,0x3671,0xD845,
+ 0xD845,0x596F,0xD840,0xD846,0xD846,
+ 2, /* first low-surrogate */
+ 0xDF17,0xDC21, 0, 0,0xDCAA,0xDCA1, 0, 0,
+ 0, 0, 0,0xDD63,0xDD79,0xDD60, 0,0xDD62, 0,0xDD61,
+ 0, 0,0xDD70, 0,0xDD6A, 0,0xDFC8, 0,0xDFC5,0xDFBE,
+ 0xDFC2, 0, 0, 0, 0,0xDFC7, 0,0xDFB0,0xDFCA, 0,
+ 0, 0, 0, 0, 0, 0,0xDF0D,0xDF07,0xDF96,0xDFEF,
+ 0, 0,0xDC1E,0xDC1D, 0,0xDD90,0xDFEB, 0, 0, 0,
+ 0xDFEE, 0,0xDFEF,0xDFEC,0xDFFA, 0, 0, 0, 0,0xDD04,
+ 0xDFD3, 0,0xDFD1,0xDFFA, 0, 0, 0, 0,0xDFC8, 0,
+ 0xDFD5, 0,0xDFCD,0xDFD2,0xDFFB,0xDE2A,0xDC88,0xDC61, 0,0xDC63,
+ 0xDC62, 0,0xDC57,0xDCC8,0xDC98,
+ /* plane 4, row 48 */
+ 1 | (94 << 8), /* first, last */
+ 0x372B,0xD846,0xD847,0xD847,0x3814,0x3811,0x3812,0xD848,0x3863,
+ 0xD848,0x386E,0x389A,0xD848,0x389B,0xD848,0xD849,0x38C8,0xD849,0xD849,
+ 0x38F6,0xD84A,0xD84A,0x61A5,0x398C,0x3997,0x39A2,0x61A0,0xD84A,0xD84A,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0x3A54,0xD84B,0xD84B,
+ 0xD84B,0x3AA8,0xD84B,0xD84B,0x3AA9,0xD84C,0x65B4,0x65D8,0x66C2,0x3B18,
+ 0x3B17,0x3B1D,0xD84C,0xD84C,0x3B31,0xD84D,0xD84D,0x3BD8,0x3BD5,0xD84D,
+ 0xD84D,0xD84D,0x3BE1,0xD84D,0x3BD4,0xD84D,0xD84D,0xD84D,0x3BE3,0xD84D,
+ 0x3C44,0x3C45,0xD84E,0xD84E,0x3C76,0x3C75,0xD84E,0x6BA8,0x3C88,0x3CAA,
+ 0xD84E,0x3CAB,0x3CAC,0xD84E,0x3D57,0x6F83,0x3D60,0x3D5D,0x3D6B,0xD84F,
+ 0x3D63,0x3D67,0xD84F,0x3D5E,0xD84F,
+ 2, /* first low-surrogate */
+ 0xDEC1,0xDF3F,0xDF41, 0, 0, 0,0xDD52, 0,
+ 0xDD5E, 0, 0,0xDEC7, 0,0xDF70,0xDC27, 0,0xDC71,0xDCB0,
+ 0,0xDC42,0xDC43, 0, 0, 0, 0, 0,0xDC57,0xDC9D,
+ 0xDD89,0xDD8D,0xDD8B,0xDD80,0xDD92,0xDD8A,0xDDC8, 0,0xDD8F,0xDD93,
+ 0xDD91, 0,0xDFF2,0xDFDE, 0,0xDCC8, 0, 0, 0, 0,
+ 0, 0,0xDEA7,0xDEA1, 0,0xDE8C,0xDE7F, 0, 0,0xDE7B,
+ 0xDE95,0xDE99, 0,0xDE8E, 0,0xDEDA,0xDE8A,0xDE9C, 0,0xDE7E,
+ 0, 0,0xDD1A,0xDE55, 0, 0,0xDE60, 0, 0, 0,
+ 0xDFFB, 0, 0,0xDFFD, 0, 0, 0, 0, 0,0xDFD0,
+ 0, 0,0xDFC5, 0,0xDFD2,
+ /* plane 4, row 49 */
+ 1 | (94 << 8), /* first, last */
+ 0xD850,0x6FC5,0x71CD,0x3DF9,0x3DF3,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0x3DF6,0xD851,0x729C,0x3E51,0x3E53,0x3E52,0xD852,0x3E9B,0xD852,
+ 0x3E9C,0xD852,0xD852,0x3EF7,0x7499,0x748F,0x7491,0xD852,0xD852,0xD852,
+ 0xD852,0x3F3B,0xD852,0x3F3E,0x3F3D,0xD853,0x3F69,0xD853,0xD853,0xD853,
+ 0x3FC3,0x3FC4,0x3FC7,0xD853,0xD853,0x7639,0x3FC6,0x762E,0x3FC8,0xD853,
+ 0xD853,0xD853,0x769F,0x76A0,0x3FE6,0x3FF8,0xD854,0xD854,0x4007,0xD854,
+ 0x4064,0x4068,0xD854,0x7794,0x4065,0x77AE,0xD854,0xD854,0x4069,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0x40DA,0x40E0,0x78E6,0xD855,
+ 0x40DE,0xD855,0xD855,0xD855,0x411C,0x411D,0x411A,0xD855,0x417B,0x417A,
+ 0x417C,0xD856,0x4178,0x4177,0xD856,
+ 1, /* first low-surrogate */
+ 0xDC11, 0, 0, 0, 0,0xDFAD,0xDFA4,0xDFA9,0xDFB0,
+ 0xDF9D, 0,0xDD98, 0, 0, 0, 0,0xDC92, 0,0xDC8A,
+ 0,0xDC8D,0xDC96, 0, 0, 0, 0,0xDE45,0xDE4B,0xDF0F,
+ 0xDF16, 0,0xDF8A, 0, 0,0xDCC9, 0,0xDCC8,0xDCCA,0xDE64,
+ 0, 0, 0,0xDE5D,0xDE63, 0, 0, 0, 0,0xDE88,
+ 0xDF3A,0xDF39, 0, 0, 0, 0,0xDC17,0xDC93, 0,0xDC95,
+ 0, 0,0xDE76, 0, 0, 0,0xDE80,0xDE7B, 0,0xDE48,
+ 0xDEA8,0xDE88,0xDF8B,0xDF8A,0xDF8C,0xDFFC, 0, 0, 0,0xDD58,
+ 0,0xDD51,0xDD55,0xDD53, 0, 0, 0,0xDEDC, 0, 0,
+ 0,0xDC5C, 0, 0,0xDC65,
+ /* plane 4, row 50 */
+ 1 | (94 << 8), /* first, last */
+ 0xD87E,0x41B1,0xD856,0x41B2,0x41B0,0xD856,0x7ABC,0xD856,0x4236,
+ 0xD857,0x422E,0xD857,0x7BD6,0xD857,0x4234,0xD857,0xD857,0xD857,0xD857,
+ 0x422A,0xD857,0x4233,0x422D,0x422F,0x4231,0x422B,0x4232,0xD857,0x4235,
+ 0xD857,0xD857,0xD856,0xD857,0xD857,0xD857,0x7CCF,0xD858,0xD858,0x4308,
+ 0xD858,0x4306,0xD858,0xD858,0x7E18,0xD858,0x434D,0x4361,0xD858,0xD858,
+ 0xD858,0x4378,0xD858,0x4394,0x4395,0xD859,0xD859,0xD859,0x43C1,0x43C3,
+ 0x806D,0xD85A,0x4439,0xD85A,0xD85A,0x443A,0x443B,0x4435,0x4436,0xD85A,
+ 0x443C,0x8190,0xD85A,0xD85A,0xD85A,0x4458,0x447C,0x447D,0x448D,0x448C,
+ 0xD85B,0xD85B,0x453B,0x453F,0xD85B,0xD85B,0x4532,0x452D,0xD85B,0x452F,
+ 0x4539,0x452E,0x453A,0xD85B,0x4536,
+ 1, /* first low-surrogate */
+ 0xDD5A, 0,0xDDEE, 0, 0,0xDDF0, 0,0xDDF2, 0,
+ 0xDC35, 0,0xDC22, 0,0xDC20, 0,0xDC2D,0xDC28,0xDC26,0xDC3C,
+ 0,0xDC38, 0, 0, 0, 0, 0, 0,0xDC2A, 0,
+ 0xDC1A,0xDC30,0xDFE3,0xDC19,0xDEE9,0xDEE7, 0,0xDCD6,0xDCC4, 0,
+ 0xDC87, 0,0xDCC7,0xDCD9, 0,0xDCDF, 0, 0,0xDF0A,0xDF01,
+ 0xDFB1, 0,0xDFC1, 0, 0,0xDC76,0xDD0D,0xDD0E, 0, 0,
+ 0,0xDC07, 0,0xDC09,0xDC16, 0, 0, 0, 0,0xDC0E,
+ 0, 0,0xDC06,0xDD1E,0xDD4A, 0, 0, 0, 0, 0,
+ 0xDEA6,0xDE91, 0, 0,0xDEB8,0xDE96, 0, 0,0xDEC5, 0,
+ 0, 0, 0,0xDF0A,
+ /* plane 4, row 51 */
+ 1 | (94 << 8), /* first, last */
+ 0x4531,0x453E,0x4538,0x8552,0x4534,0xD85B,0x4541,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0x4530,0xD85B,0xD85B,0xD85B,0xD85B,0x4543,0xD85B,0x8550,
+ 0xD85B,0xD85C,0x4598,0xD85C,0xD85C,0x87A0,0xD85C,0xD85C,0x8786,0x45DA,
+ 0x45D7,0xD85C,0xD85C,0x8795,0xD85C,0xD85C,0x878C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0x4618,0x8860,0xD87E,0xD85D,0xD85D,0x4652,0x8928,0xD85D,
+ 0x464E,0x8920,0xD85D,0x464F,0x4650,0xD85E,0xD85E,0x89A8,0x4686,0x4687,
+ 0x4689,0xD85E,0xD85E,0xD85E,0xD85E,0x46A2,0x46A3,0xD85E,0x46A1,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0x46F9,0x46FD,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0x473E,0x473C,0xD85E,0x474D,0xD85F,0x474E,0xD85F,0x4781,
+ 0x4783,0x4782,0xD85F,0x4780,0x4788,
+ 6, /* first low-surrogate */
+ 0xDEB2, 0,0xDEB7,0xDEB4,
+ 0xDE89,0xDE8D, 0,0xDE87,0xDEC2,0xDE9C,0xDE92, 0,0xDECA, 0,
+ 0xDE8A,0xDDE0, 0,0xDDE6,0xDDE5, 0,0xDFA5,0xDFB3, 0, 0,
+ 0,0xDFB5,0xDFAF, 0,0xDFB0,0xDFCC, 0,0xDFA2,0xDFBE,0xDFC6,
+ 0xDFAC,0xDFAE, 0, 0,0xDDC3,0xDF08,0xDF05, 0, 0,0xDEFE,
+ 0, 0,0xDF00, 0, 0,0xDC64,0xDC68, 0, 0, 0,
+ 0,0xDC6A,0xDC69,0xDD0D,0xDD12, 0, 0,0xDD0F, 0,0xDE67,
+ 0xDE79,0xDE72,0xDE66,0xDE7C, 0, 0,0xDE68,0xDE85,0xDE76,0xDE74,
+ 0xDE71,0xDE64, 0, 0,0xDFF8, 0,0xDC6C, 0,0xDCEB, 0,
+ 0, 0,0xDDB8,
+ /* plane 4, row 52 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47B9,0xD85F,0xD85F,0x8E3A,
+ 0xD860,0xD860,0xD860,0x4811,0x480D,0x4810,0x4813,0xD860,0x483C,0x4862,
+ 0x4863,0xD860,0xD861,0xD87E,0xD861,0xD861,0x4903,0x4906,0x4902,0x4901,
+ 0xD862,0xD862,0x4905,0xD862,0x9194,0x9311,0xD862,0x9337,0x4936,0xD862,
+ 0x4935,0x9343,0xD87E,0x49A1,0x49A3,0xD863,0xD863,0x49A0,0xD863,0x49EA,
+ 0x96A6,0x49E8,0xD863,0xD863,0xD863,0xD864,0x4A21,0x4A1B,0xD864,0xD864,
+ 0x4A49,0x4A48,0xD864,0x9795,0x4A62,0x4A61,0x4A64,0x4A60,0x4A63,0xD864,
+ 0xD864,0x9796,0x4A66,0x4AAC,0x4AAB,0xD865,0xD865,0x4AC3,0xD865,0x4AC4,
+ 0x9825,0xD865,0xD865,0x4B08,0x4B09,0x4B0A,0x4B06,0x4B07,0x4B41,0xD865,
+ 0x4B45,0xD865,0x4B43,0x4B44,0x9926,
+ 1, /* first low-surrogate */
+ 0xDF2D,0xDF2E,0xDF28,0xDF29,0xDF31, 0,0xDF2F,0xDF2A, 0,
+ 0xDCA4,0xDCB7,0xDCBF, 0, 0, 0, 0,0xDE63, 0, 0,
+ 0,0xDF67,0xDDBE,0xDDE0,0xDF95,0xDF9C, 0, 0, 0, 0,
+ 0xDC71,0xDC72, 0,0xDC6F, 0, 0,0xDDF1, 0, 0,0xDDE8,
+ 0, 0,0xDDEA, 0, 0,0xDD49,0xDD64, 0,0xDD48, 0,
+ 0, 0,0xDF2C,0xDFE1,0xDFEF,0xDCC0, 0, 0,0xDCD7,0xDCD4,
+ 0, 0,0xDEAD, 0, 0, 0, 0, 0, 0,0xDEAE,
+ 0xDEAC, 0, 0, 0, 0,0xDC27,0xDCAE, 0,0xDCB0, 0,
+ 0,0xDCC0,0xDCC4, 0, 0, 0, 0, 0, 0,0xDF07,
+ 0,0xDEFD,
+ /* plane 4, row 53 */
+ 1 | (94 << 8), /* first, last */
+ 0x9934,0x4B47,0xD87E,0xD866,0xD866,0x4B71,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0x4B8B,0x4BD4,0x4BD3,0x4BD1,0x9ABA,0x4BD2,0xD866,
+ 0xD866,0x4BF7,0x4BF8,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,
+ 0xD867,0x4C22,0xD867,0x4C45,0x4C41,0x9B81,0x4C40,0x9B8A,0xD867,0x9B7F,
+ 0x4C42,0xD867,0x4CC1,0x4CC5,0xD867,0x4CBB,0x4CB9,0x4CBD,0x4CC9,0xD868,
+ 0x9D11,0xD868,0x4CBF,0x4CC7,0xD867,0x4CC3,0x4D24,0x4D31,0x4D33,0xD868,
+ 0x4D32,0x4D34,0x4D52,0x4D61,0x9ED9,0x4D7A,0x4D82,0x9F3C,0xD869,0x5123,
+ 0xD841,0xD841,0xD841,0x512C,0xD841,0xD842,0x350F,0x5295,0xD842,0x3523,
+ 0x3525,0xD844,0x3606,0x3608,0x5688,0xD844,0xD844,0xD844,0x568B,0xD844,
+ 0xD844,0x367A,0x3677,0xD845,0xD845,
+ 3, /* first low-surrogate */
+ 0xDE04,0xDC1B,0xDC1C, 0,0xDCB2,0xDCB4,0xDCB7,
+ 0xDCB1,0xDCB3,0xDCAE, 0, 0, 0, 0, 0, 0,0xDE3F,
+ 0xDF36, 0, 0,0xDF31,0xDF3B,0xDF35,0xDF3A,0xDF37,0xDC22,0xDC36,
+ 0xDC32, 0,0xDCC0, 0, 0, 0, 0, 0,0xDD85, 0,
+ 0,0xDD89, 0, 0,0xDFE1, 0, 0, 0, 0,0xDC0A,
+ 0,0xDC09, 0, 0,0xDFE8, 0, 0, 0, 0,0xDF18,
+ 0, 0, 0, 0, 0, 0, 0, 0,0xDDC5, 0,
+ 0xDC0D,0xDC0C,0xDC21, 0,0xDE16,0xDC0E, 0, 0,0xDC17, 0,
+ 0,0xDC48, 0, 0, 0,0xDC55,0xDC49,0xDC4C, 0,0xDC4F,
+ 0xDC3D, 0, 0,0xDC8A,0xDCA8,
+ /* plane 4, row 54 */
+ 1 | (94 << 8), /* first, last */
+ 0xD845,0x372E,0xD846,0x372F,0xD846,0xD848,0x381B,0x3813,0xD847,
+ 0xD847,0x3866,0xD848,0x3865,0xD845,0x38F7,0xD849,0xD84A,0x61E1,0x61D7,
+ 0xD84A,0xD84A,0x399C,0xD84B,0xD84B,0x3A53,0xD84B,0xD84B,0xD84C,0xD84C,
+ 0x3ABA,0x65A3,0x3B22,0x66D3,0xD84D,0xD84D,0xD84D,0x6A8B,0xD84D,0xD84D,
+ 0x3BEB,0x3BDD,0xD84D,0x3BEF,0xD84D,0xD84D,0x3C47,0x3C46,0xD84E,0x3C78,
+ 0x6BAC,0x3C89,0xD84F,0xD84F,0x3D68,0x3D76,0x3D74,0x3D79,0xD850,0x3D7A,
+ 0x3D77,0xD87E,0x3D71,0xD850,0x3D72,0xD850,0x3DFF,0xD850,0x3E05,0xD851,
+ 0xD851,0x3E54,0xD851,0xD851,0x3E9E,0x3E9F,0x7374,0xD852,0xD852,0x3EFA,
+ 0xD852,0x3F44,0x3F3F,0x3F40,0xD852,0x3F42,0xD852,0xD852,0x3F51,0xD852,
+ 0xD852,0xD853,0xD853,0xD853,0xD853,
+ 1, /* first low-surrogate */
+ 0xDE8A, 0,0xDCCB, 0,0xDCD5,0xDDD4, 0, 0,0xDF5C,
+ 0xDF75, 0,0xDD61, 0,0xDE96, 0,0xDD8A,0xDCD0, 0, 0,
+ 0xDC49,0xDCCF, 0,0xDDD6,0xDD7F, 0,0xDDD2,0xDDCF,0xDC06,0xDC09,
+ 0, 0, 0, 0,0xDF06,0xDEF1,0xDF04, 0,0xDEFA,0xDEF4,
+ 0, 0,0xDEF9, 0,0xDE8B,0xDF03, 0, 0,0xDDA2, 0,
+ 0, 0,0xDC0C,0xDC0B, 0, 0, 0, 0,0xDC24, 0,
+ 0,0xDD14, 0,0xDC25, 0,0xDFF6, 0,0xDFFB, 0,0xDD32,
+ 0xDDFB, 0,0xDEF2,0xDEF3, 0, 0, 0,0xDC9C,0xDE72, 0,
+ 0xDE74, 0, 0, 0,0xDF86, 0,0xDF8E,0xDF90, 0,0xDFCD,
+ 0xDFF7,0xDCD6,0xDE84,0xDE95,0xDE8A,
+ /* plane 4, row 55 */
+ 1 | (94 << 8), /* first, last */
+ 0x7640,0x3FCA,0xD853,0x7641,0x3FCE,0x3FC9,0xD853,0xD853,0xD854,
+ 0xD854,0xD854,0x4009,0x76E8,0x406C,0x406E,0x4070,0x406D,0x406B,0x4071,
+ 0x4072,0xD854,0xD854,0xD854,0x408C,0x40E4,0xD855,0x40E1,0xD855,0xD855,
+ 0x78F6,0x40E7,0x7900,0x40E2,0x411F,0xD855,0xD855,0x417E,0xD856,0x4180,
+ 0x7A59,0x7A55,0xD856,0x41B9,0x41B7,0x41B8,0xD856,0x41BA,0x7AF4,0xD856,
+ 0x41D3,0x423F,0x7C04,0x4245,0x4241,0x7C15,0x4242,0x4243,0x423B,0x4238,
+ 0xD857,0xD857,0x423A,0x7BF5,0xD857,0xD857,0x423C,0xD857,0xD857,0x423E,
+ 0xD857,0xD857,0xD857,0x429E,0x429F,0x42A1,0xD857,0x429B,0x4312,0xD858,
+ 0xD858,0xD858,0x4318,0x430C,0xD858,0x4362,0xD858,0x437A,0xD858,0xD859,
+ 0x43AE,0x43AF,0xD859,0x43AD,0xD859,
+ 3, /* first low-surrogate */
+ 0xDE97, 0, 0, 0,0xDFA0,0xDFA1,0xDC22,
+ 0xDCA6,0xDCA4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xDEAF,0xDEB0,0xDEBD, 0, 0,0xDD76, 0,0xDD7B,0xDD79,
+ 0, 0, 0, 0, 0,0xDEEE,0xDEF1, 0,0xDC94, 0,
+ 0, 0,0xDC91, 0, 0, 0,0xDE10, 0, 0,0xDEAF,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0xDC7B,0xDC77, 0, 0,0xDC80,0xDCC6, 0,0xDC7C,0xDC90, 0,
+ 0xDCA3,0xDC7D,0xDCBD, 0, 0, 0,0xDF13, 0, 0,0xDD11,
+ 0xDD44,0xDD0D, 0, 0,0xDF14, 0,0xDFB8, 0,0xDFB7,0xDC83,
+ 0, 0,0xDD14, 0,0xDD1C,
+ /* plane 4, row 56 */
+ 1 | (94 << 8), /* first, last */
+ 0x43C4,0x43C7,0x43C6,0x43C5,0xD859,0xD859,0x81C1,0x4440,0xD85A,
+ 0xD85A,0x443F,0x4441,0xD87E,0xD85A,0xD85A,0x447F,0xD85A,0x4486,0x4481,
+ 0x4480,0x448E,0x454A,0xD85B,0x4547,0xD85B,0xD85B,0x454B,0x4546,0x454E,
+ 0x857D,0xD85B,0x85A5,0xD85B,0x4548,0xD85B,0x4545,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0x45DB,0x45E7,0x45E4,0xD85D,0xD85D,
+ 0x45E1,0xD85D,0x45E9,0xD85C,0x45E5,0x45E0,0x45E3,0xD85C,0xD85D,0xD85D,
+ 0xD85C,0xD85D,0xD85D,0x45EA,0xD85C,0xD85D,0x893A,0x4654,0x4658,0x465C,
+ 0xD85D,0x4655,0x468B,0x468C,0x46A6,0x46A5,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0x46FF,0xD85E,0xD85E,0xD85E,0xD85E,0x4730,0x4740,0x4741,0xD85F,0xD85F,
+ 0x4786,0xD85F,0x47BF,0x47BD,0xD85F,
+ 5, /* first low-surrogate */
+ 0xDDD4,0xDDD5, 0, 0,0xDC43,
+ 0xDC42, 0, 0,0xDD8A,0xDC41,0xDD4E, 0,0xDE87, 0, 0,
+ 0, 0, 0,0xDF39, 0,0xDF8F,0xDF2A, 0, 0, 0,
+ 0,0xDF2B, 0,0xDF50, 0,0xDF6E, 0,0xDF3B,0xDF53,0xDF5F,
+ 0xDF2F,0xDF30,0xDF38,0xDF4C,0xDDF1, 0, 0, 0,0xDC07,0xDC16,
+ 0,0xDC14, 0,0xDFFB, 0, 0, 0,0xDFF8,0xDC10,0xDC1D,
+ 0xDFFF,0xDC0B,0xDC04, 0,0xDFFE,0xDDFF, 0, 0, 0, 0,
+ 0xDF23, 0, 0, 0, 0, 0,0xDD2A,0xDEA0,0xDE98,0xDE9C,
+ 0,0xDE9E,0xDEA6,0xDEB5,0xDEB0, 0, 0, 0,0xDCF9,0xDCF5,
+ 0,0xDDD2, 0, 0,0xDF50,
+ /* plane 4, row 57 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85F,0xD85F,0xD85F,0xD85F,0x47BE,0x4819,0xD860,0x481C,0xD860,
+ 0x481B,0x4817,0x4818,0x8E51,0xD860,0xD860,0x483D,0x486A,0x4866,0xD860,
+ 0xD860,0x4867,0xD860,0x4868,0x48AD,0x48AE,0xD861,0xD861,0x48D6,0x4909,
+ 0xD862,0x9198,0xD862,0x490C,0x490A,0xD862,0x493B,0x493A,0x9384,0x9381,
+ 0xD862,0x936F,0xD863,0xD863,0xD863,0x49AF,0x49AA,0x49AB,0xD863,0xD863,
+ 0x49B1,0xD863,0x49AC,0x49EC,0xD863,0xD863,0x4A01,0xD863,0xD864,0xD864,
+ 0xD864,0x4A23,0xD864,0x4A24,0x4A1E,0xD864,0x4A4A,0x4A65,0x4A6A,0xD864,
+ 0xD864,0xD864,0x4A69,0xD864,0xD864,0x4A95,0xD864,0xD865,0xD865,0xD865,
+ 0x9842,0xD865,0xD865,0x4ACC,0xD865,0xD865,0xD87E,0x4ACF,0xD865,0xD865,
+ 0x4B0F,0xD865,0x4B0E,0x4B0B,0x4B10,
+ 1, /* first low-surrogate */
+ 0xDF4E,0xDF4B,0xDF52,0xDF4D, 0, 0,0xDCE4, 0,0xDCDA,
+ 0, 0, 0, 0,0xDCDF,0xDCE8, 0, 0, 0,0xDF70,
+ 0xDF72, 0,0xDF77, 0, 0, 0,0xDDE6,0xDFAA, 0, 0,
+ 0xDC8C, 0,0xDC89, 0, 0,0xDE32, 0, 0, 0, 0,
+ 0xDE7A, 0,0xDC9E,0xDCA0,0xDD70, 0, 0, 0,0xDD6E,0xDD66,
+ 0,0xDD65, 0, 0,0xDF7F,0xDFE0, 0,0xDFFF,0xDCF6,0xDCF7,
+ 0xDCF5, 0,0xDCFC, 0, 0,0xDCF9, 0, 0, 0,0xDECA,
+ 0xDEC3,0xDEC6, 0,0xDFB8,0xDFBD, 0,0xDFBC,0xDC05,0xDCE0,0xDCE9,
+ 0,0xDCDF,0xDCEC, 0,0xDCE5,0xDCDE,0xDE00, 0,0xDCF0,0xDCE3,
+ 0,0xDDEC,
+ /* plane 4, row 58 */
+ 1 | (94 << 8), /* first, last */
+ 0x4B0D,0x4B0C,0xD865,0xD865,0xD865,0xD865,0x4B46,0x4B48,0x9937,
+ 0x4B49,0xD865,0xD866,0x4B91,0x4B8E,0xD866,0x4BD8,0x4BD6,0xD866,0x4BDA,
+ 0xD866,0x4BD7,0xD866,0x9AFF,0x4BF9,0xD866,0xD866,0x4BFC,0xD866,0xD867,
+ 0xD867,0x9BA9,0x4C4A,0x9BA7,0x4C4E,0x9BB3,0x9BAC,0x9BB0,0xD867,0xD867,
+ 0xD867,0x9B9C,0xD867,0xD867,0xD868,0x9D3C,0x9D1C,0x9D3A,0x4CD3,0x4CCD,
+ 0x4CD1,0xD868,0xD868,0x9D32,0x9D34,0xD868,0xD868,0xD87E,0xD868,0xD868,
+ 0xD868,0x9EC7,0xD868,0x4D62,0xD869,0xD869,0xD869,0x4D83,0x9F3F,0xD869,
+ 0x4D92,0x349F,0x34A0,0xD841,0xD841,0xD841,0xD841,0xD841,0x3527,0xD842,
+ 0x360B,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0x368D,0xD845,0xD846,0x3770,0xD847,
+ 3, /* first low-surrogate */
+ 0xDDF2,0xDDEF,0xDDE9,0xDEFB, 0, 0, 0,
+ 0,0xDF37,0xDCDE, 0, 0,0xDCDA, 0, 0,0xDE4B, 0,
+ 0xDE49, 0,0xDED5, 0, 0,0xDF52,0xDF47, 0,0xDF48,0xDCCC,
+ 0xDCD0, 0, 0, 0, 0, 0, 0, 0,0xDD86,0xDDA7,
+ 0xDDA3, 0,0xDDB6,0xDDAD,0xDC13, 0, 0, 0, 0, 0,
+ 0,0xDC17,0xDC22, 0, 0,0xDC49,0xDC26,0xDE0C,0xDC3C,0xDC28,
+ 0xDEA8, 0,0xDFFB, 0,0xDC32,0xDCD6,0xDD48, 0, 0,0xDDC6,
+ 0, 0, 0,0xDC25,0xDC26,0xDC24,0xDC33,0xDD70, 0,0xDF90,
+ 0,0xDC95,0xDCA1,0xDC92,0xDC8F,0xDC9F,0xDC96,0xDC98,0xDC9D,0xDCA0,
+ 0,0xDE97,0xDCEB, 0,0xDF87,
+ /* plane 4, row 59 */
+ 1 | (94 << 8), /* first, last */
+ 0x5EEB,0xD849,0x399A,0x399F,0x399D,0xD84A,0xD84A,0xD84A,0x399B,
+ 0xD84A,0x61D5,0xD87E,0x3A60,0x3A64,0x3A69,0x3A63,0x3A67,0x3A62,0xD84B,
+ 0xD84B,0xD84B,0x6502,0xD84B,0xD84B,0xD84C,0x3AAC,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0x3B26,0x3B23,0x3B25,0xD84D,0xD84D,0x3BF8,0xD84D,0xD84D,0xD84D,
+ 0x3BF7,0x3BFB,0x3BFA,0xD84D,0xD84D,0xD84E,0xD84E,0x3CB0,0x3CAF,0xD84F,
+ 0xD850,0xD850,0x3D7E,0xD850,0x3D7D,0x3D80,0xD850,0xD850,0x3D7F,0x3D86,
+ 0xD850,0xD850,0x7012,0xD850,0x3D81,0xD851,0xD851,0xD851,0x3E24,0x3E58,
+ 0x3E57,0x3EA0,0xD852,0x3EFE,0xD852,0xD852,0x3F15,0xD852,0x3F47,0x3F46,
+ 0xD852,0xD853,0x3F6B,0x3F6C,0x7585,0x7654,0xD853,0x3FCC,0xD853,0x7655,
+ 0xD853,0x3FCB,0x76A7,0x76A8,0x3FF9,
+ 2, /* first low-surrogate */
+ 0xDC32, 0, 0, 0,0xDCD8,0xDCFB,0xDD06, 0,
+ 0xDCD1, 0,0xDCB0, 0, 0, 0, 0, 0, 0,0xDDF6,
+ 0xDE04,0xDDFE, 0,0xDDFF,0xDDF7,0xDC18, 0,0xDC14,0xDCCD,0xDD20,
+ 0xDEDE, 0, 0, 0,0xDF45,0xDF53, 0,0xDF4B,0xDF55,0xDF41,
+ 0, 0, 0,0xDF5C,0xDF54,0xDE71,0xDED0, 0, 0,0xDC53,
+ 0xDC29,0xDC7E, 0,0xDC79, 0, 0,0xDC70,0xDC6A, 0, 0,
+ 0xDC85,0xDC64, 0,0xDC78, 0,0xDC32,0xDC27,0xDC2F, 0, 0,
+ 0, 0,0xDCBA, 0,0xDE71,0xDE8C, 0,0xDF1A, 0, 0,
+ 0xDF98,0xDCE4, 0, 0, 0, 0,0xDEC2, 0,0xDEBA, 0,
+ 0xDEC8,
+ /* plane 4, row 60 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0xD854,0xD854,0xD854,0x4078,0x407A,0x4075,0xD854,0x4076,
+ 0x4077,0xD854,0xD854,0x40EA,0x40EE,0x40ED,0xD855,0x40EC,0x790F,0xD855,
+ 0xD855,0x4184,0x4185,0x4183,0xD856,0x41BC,0x41BD,0x41D4,0xD857,0xD857,
+ 0xD857,0xD857,0x4255,0xD857,0x4250,0x424C,0x4248,0xD857,0x4253,0xD857,
+ 0x4257,0x4254,0x424E,0x424A,0x4251,0xD857,0xD857,0x4249,0x424B,0x4263,
+ 0xD857,0xD857,0x42A7,0x42A6,0x42A4,0xD857,0xD857,0xD87E,0x7CE4,0x7CE5,
+ 0xD858,0xD858,0x7E65,0x7E4E,0x4317,0xD858,0x4316,0xD858,0xD858,0x4363,
+ 0xD858,0xD858,0x7F82,0xD858,0x437B,0x437C,0xD858,0xD858,0xD859,0xD859,
+ 0x43B0,0x802D,0xD859,0xD85A,0x4442,0xD85A,0x4444,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0x4488,0x448F,0x4553,
+ 1, /* first low-surrogate */
+ 0xDCB9,0xDCB8,0xDCA5,0xDEE2, 0, 0, 0,0xDED9, 0,
+ 0,0xDEAC,0xDEDD, 0, 0, 0,0xDD9D, 0, 0,0xDF11,
+ 0xDF03, 0, 0, 0,0xDCEE, 0, 0, 0,0xDCA4,0xDCD8,
+ 0xDCDD,0xDCDE, 0,0xDCE7, 0, 0, 0,0xDCD4, 0,0xDCCE,
+ 0, 0, 0, 0, 0,0xDCF1,0xDCD3, 0, 0, 0,
+ 0xDCCA,0xDCE9, 0, 0, 0,0xDF1A,0xDF41,0xDD68, 0, 0,
+ 0xDD3D,0xDD40, 0, 0, 0,0xDD43, 0,0xDD3F,0xDD3C, 0,
+ 0xDF21,0xDF20, 0,0xDFC6, 0, 0,0xDFD1,0xDFCA,0xDC8E,0xDC91,
+ 0, 0,0xDDE3,0xDC88, 0,0xDC70, 0,0xDD9D,0xDE9D,0xDE91,
+ 0xDE98,0xDE99,
+ /* plane 4, row 61 */
+ 1 | (94 << 8), /* first, last */
+ 0x455B,0xD85B,0x4559,0xD85B,0xD85B,0xD85B,0xD85C,0x85CA,0xD85C,
+ 0xD85B,0x4554,0x85BC,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0x4599,0xD85C,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x45F1,0xD85D,0x45EF,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x4662,0xD85D,0x4663,0xD85D,
+ 0x4660,0x4661,0x465F,0xD85D,0xD85D,0xD85D,0x468D,0xD85E,0x468E,0xD85E,
+ 0xD85E,0xD85E,0x4709,0xD85E,0xD85E,0x4705,0xD85E,0xD85E,0x4703,0x4706,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x4731,0xD85F,0xD85F,0x474F,0xD85F,
+ 0xD85F,0xD85F,0x4766,0x8CFF,0x47C4,0xD85F,0x47C3,0x47C1,0x47C5,0xD860,
+ 0xD860,0xD860,0x4821,0xD860,0x481F,0x4822,0xD860,0x4827,0x4820,0xD860,
+ 0x486D,0x486C,0x486B,0x486F,0x4870,
+ 2, /* first low-surrogate */
+ 0xDFBF, 0,0xDFAE,0xDFB1,0xDFCC,0xDC04, 0,0xDC16,
+ 0xDFCD, 0, 0,0xDFE0,0xDFCB,0xDFD4,0xDFC9,0xDDFF, 0,0xDDFD,
+ 0xDC57,0xDC52,0xDC50,0xDC45,0xDC4D, 0,0xDC53, 0,0xDC82,0xDC44,
+ 0xDDCE,0xDDCF,0xDDD2,0xDE02,0xDF4F,0xDF58, 0,0xDF43, 0,0xDF52,
+ 0, 0, 0,0xDF49,0xDF53,0xDF4D, 0,0xDC84, 0,0xDC83,
+ 0xDD32,0xDEE2, 0,0xDEE4,0xDED3, 0,0xDED5,0xDEDD, 0, 0,
+ 0xDEEC,0xDEE6,0xDED2,0xDEFA,0xDEDA, 0,0xDC06,0xDC04, 0,0xDC7B,
+ 0xDD04,0xDD02, 0, 0, 0,0xDF60, 0, 0, 0,0xDD07,
+ 0xDD05,0xDD0C, 0,0xDD5A, 0, 0,0xDD1A, 0, 0,0xDF8A,
+ /* plane 4, row 62 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD861,0xD862,0x91A6,0xD862,0xD862,0x4942,0xD862,0x93B6,
+ 0xD862,0x4944,0x4940,0xD862,0xD862,0x493F,0xD862,0x93AB,0x498B,0xD863,
+ 0xD863,0x4A25,0x4A28,0xD864,0x9721,0xD864,0xD864,0x4A75,0x4A72,0xD864,
+ 0x4A6F,0xD864,0xD864,0x4A76,0x4A71,0x97A7,0xD864,0x4A97,0xD864,0x4AD7,
+ 0xD865,0x4AD6,0xD865,0x4AD8,0x4ADC,0x4ADB,0x4AD4,0x983E,0x4B13,0x4B11,
+ 0x4B14,0xD865,0xD865,0xD865,0xD865,0x4B51,0x4B50,0x4B53,0x4B54,0x4B52,
+ 0xD865,0xD865,0xD865,0x4B6D,0xD87E,0xD866,0x4B95,0x4B99,0xD866,0x4B9A,
+ 0xD866,0x4B93,0x4B97,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BDC,0xD866,
+ 0x4BFD,0xD866,0xD866,0x4BFE,0x4C00,0x4C02,0x4C01,0x4C03,0xD866,0xD867,
+ 0xD867,0xD867,0x4C27,0x4C26,0x4C24,
+ 1, /* first low-surrogate */
+ 0xDF8C,0xDE09,0xDCA6, 0,0xDCAC,0xDCA9, 0,0xDE8B, 0,
+ 0xDE8C, 0, 0,0xDE88,0xDE89, 0,0xDE93, 0, 0,0xDD83,
+ 0xDF4F, 0, 0,0xDD20, 0,0xDE36,0xDEE2, 0, 0,0xDEEE,
+ 0,0xDEE7,0xDEE9, 0, 0, 0,0xDEDF, 0,0xDFC7, 0,
+ 0xDD09, 0,0xDD01, 0, 0, 0, 0, 0, 0, 0,
+ 0,0xDE05,0xDE0C,0xDF78,0xDF5D, 0, 0, 0, 0, 0,
+ 0xDF5E,0xDF60,0xDF67, 0,0xDE05,0xDCF4, 0, 0,0xDCF1, 0,
+ 0xDCFA, 0, 0,0xDCF8,0xDCF9,0xDD09,0xDCFD,0xDCF7, 0,0xDE59,
+ 0,0xDF60,0xDF68, 0, 0, 0, 0, 0,0xDF6A,0xDC14,
+ 0xDC3E,0xDCE4,
+ /* plane 4, row 63 */
+ 1 | (94 << 8), /* first, last */
+ 0x4C4C,0x9BBC,0x4C50,0x4C55,0x4C53,0x9BB7,0x4C52,0xD867,0x4C57,
+ 0x9BBE,0x4C58,0x4CD6,0xD868,0xD868,0x4CD4,0xD868,0x4CDA,0x4CD9,0xD860,
+ 0x9D62,0x4CD5,0x4CE4,0xD87E,0x4CDC,0x4D1B,0x9E8F,0x4D37,0x4D36,0x4D4B,
+ 0x9ECB,0x4D66,0x4D76,0xD869,0x4D7E,0x4D7D,0x4D7F,0x4D84,0x4D8B,0xD869,
+ 0x4D94,0x34A1,0x3511,0xD842,0x3610,0x56A9,0xD844,0xD844,0xD844,0xD844,
+ 0x5913,0xD846,0x3732,0x5BF4,0xD846,0xD846,0xD847,0xD847,0x3820,0xD847,
+ 0xD848,0xD848,0x389D,0xD849,0x61EC,0x61EF,0xD84A,0xD84A,0x39A5,0xD84A,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0x3C02,0x3BFE,
+ 0x3C01,0x6AD6,0x3C03,0x3BFF,0xD84D,0x3C04,0xD87E,0x3C4A,0xD84E,0x3D87,
+ 0xD850,0x3D84,0xD850,0x3D85,0x7209,
+ 8, /* first low-surrogate */
+ 0xDDD2, 0,
+ 0, 0, 0,0xDC58,0xDC50, 0,0xDC5C, 0, 0,0xDD19,
+ 0, 0, 0,0xDE0E, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,0xDCDF, 0, 0, 0, 0, 0,0xDDD9,
+ 0, 0, 0,0xDD66, 0, 0,0xDCE1,0xDCEF,0xDCE8,0xDE33,
+ 0,0xDCFE, 0, 0,0xDEEF,0xDEEC,0xDCEC,0xDF9C, 0,0xDF99,
+ 0xDD70,0xDD6E, 0,0xDC41, 0, 0,0xDD02,0xDD01, 0,0xDE1B,
+ 0xDE23,0xDE25,0xDE24,0xDE26,0xDE33,0xDE2F,0xDC8F,0xDF56, 0, 0,
+ 0, 0, 0, 0,0xDF99, 0,0xDCED, 0,0xDED9, 0,
+ 0xDCB7, 0,0xDCB6,
+ /* plane 4, row 64 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0xD851,0xD851,0x3E59,0x7379,0xD852,0x74C6,0xD852,0xD852,
+ 0x3F04,0x3F49,0x3F48,0xD853,0x3F6D,0x3FD2,0x3FD3,0xD853,0x3FD1,0xD853,
+ 0xD853,0xD853,0xD853,0x3FE7,0x400A,0x77C3,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0x40F0,0xD855,0xD855,0x791F,0xD856,0xD856,0x7A65,0xD856,0xD856,
+ 0x41BE,0x41BF,0xD856,0x7AC6,0x7C3A,0xD857,0x7C36,0xD857,0xD857,0xD857,
+ 0xD857,0x425E,0xD857,0xD857,0x425B,0xD857,0xD857,0xD857,0x7CEB,0x42AB,
+ 0xD857,0x42AC,0xD857,0xD857,0xD858,0xD858,0x431F,0x431D,0xD858,0xD858,
+ 0x431C,0xD858,0x431E,0xD858,0xD858,0xD858,0xD858,0x4364,0xD858,0x7F84,
+ 0xD859,0xD85A,0xD85A,0x4448,0x4447,0xD85A,0xD85C,0x455E,0x4561,0xD85C,
+ 0x85E0,0x85F3,0xD85C,0xD85C,0xD85C,
+ 1, /* first low-surrogate */
+ 0xDC54,0xDC57,0xDC7A, 0, 0,0xDE8E, 0,0xDE90,0xDEB9,
+ 0, 0, 0,0xDCEF, 0, 0, 0,0xDEE2, 0,0xDED6,
+ 0xDED8,0xDEDA,0xDEDE, 0, 0, 0,0xDF08,0xDF04,0xDF0A,0xDF0B,
+ 0xDF02, 0,0xDDAA,0xDDC1, 0,0xDCD7,0xDCD9, 0,0xDCDE,0xDCDA,
+ 0, 0,0xDE2A, 0, 0,0xDD31, 0,0xDD2B,0xDD2C,0xDD29,
+ 0xDD2E, 0,0xDD27,0xDD28, 0,0xDD5F,0xDD30,0xDD24, 0, 0,
+ 0xDF3A, 0,0xDF39,0xDF40,0xDD80,0xDD84, 0, 0,0xDD75,0xDD76,
+ 0,0xDD7C, 0,0xDD78,0xDD9B,0xDD7E,0xDE5A, 0,0xDF2C, 0,
+ 0xDC9C,0xDC47,0xDC8A, 0, 0,0xDD27,0xDC4A, 0, 0,0xDC27,
+ 0, 0,0xDC2E,0xDC26,0xDE08,
+ /* plane 4, row 65 */
+ 1 | (94 << 8), /* first, last */
+ 0x45F7,0xD85D,0xD85D,0x45F4,0x45F8,0x881E,0xD85D,0xD85D,0xD85D,
+ 0x4664,0xD85D,0x4692,0x468F,0x4690,0x89B4,0x4693,0x46A8,0xD85E,0xD85E,
+ 0x46A9,0xD85E,0xD85E,0x89F9,0xD85E,0xD85E,0x8B44,0x470E,0xD85E,0x470F,
+ 0xD85E,0xD85E,0x470B,0xD85E,0xD85E,0xD85E,0xD85E,0x4710,0x4751,0xD85F,
+ 0x4750,0xD85F,0x4763,0xD85F,0xD85F,0x47C7,0xD85F,0x8E71,0x4824,0x4826,
+ 0x8E6E,0xD860,0x8E79,0xD860,0x8EC4,0x4874,0x4873,0x4872,0xD860,0xD860,
+ 0xD861,0xD861,0x48B1,0x908C,0xD861,0x490E,0x4911,0x4910,0x490F,0x4912,
+ 0x4949,0x93C9,0x494F,0x494D,0xD862,0xD862,0x4955,0xD863,0xD863,0xD864,
+ 0xD864,0xD864,0xD864,0x4A2C,0x4A2B,0xD864,0xD864,0x4A79,0xD864,0xD864,
+ 0xD864,0x4A7A,0x97B0,0x4A99,0x4A9A,
+ 2, /* first low-surrogate */
+ 0xDCBD,0xDC96, 0, 0, 0,0xDCBE,0xDC8E,0xDF74,
+ 0,0xDF80, 0, 0, 0, 0, 0, 0,0xDD3C,0xDD3D,
+ 0,0xDD3A,0xDD42, 0,0xDF24,0xDF06, 0, 0,0xDF15, 0,
+ 0xDF02,0xDF0C, 0,0xDF08,0xDF0A,0xDF05,0xDF1C, 0, 0,0xDC82,
+ 0,0xDC86, 0,0xDE03,0xDF7B, 0,0xDF7A, 0, 0, 0,
+ 0,0xDD80, 0,0xDD58, 0, 0, 0, 0,0xDFAA,0xDFAB,
+ 0xDC36,0xDC4A, 0, 0,0xDFD6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,0xDF03,0xDECF, 0,0xDD9F,0xDDA2,0xDC2A,
+ 0xDC2F,0xDD44,0xDD40, 0, 0,0xDF11,0xDF0F, 0,0xDF0D,0xDF07,
+ 0xDF03,
+ /* plane 4, row 66 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0x4AAE,0x4AAF,0xD865,0x4AE4,0x4AE1,0x4ADE,0x4AE6,0x4ADF,
+ 0xD865,0x4AE7,0x4AE2,0x4AE0,0xD865,0x4AE5,0x985A,0xD865,0x4B18,0xD865,
+ 0xD865,0xD865,0x4B56,0xD865,0x9946,0xD865,0xD865,0xD865,0x4B6E,0xD866,
+ 0xD866,0x4B9D,0x4BA0,0x4B9C,0xD866,0xD866,0x4BA1,0x4BA2,0x4B9F,0x4BDF,
+ 0x4BDE,0x9AC3,0x4BEA,0xD866,0x4C06,0xD866,0x4C04,0x9B0F,0xD866,0xD867,
+ 0xD867,0xD867,0x4C5F,0x9BF4,0x9BFA,0x4C5C,0xD867,0x4C5E,0xD867,0xD867,
+ 0x9BDD,0x4C59,0xD867,0xD867,0x4C64,0x4C5D,0x4C62,0xD867,0x4C65,0xD867,
+ 0x9BED,0x4C5B,0x9BEF,0xD868,0x4CDD,0xD868,0x4CDF,0xD868,0xD87E,0x4CE2,
+ 0xD868,0xD868,0x4D27,0xD868,0xD868,0x9E96,0x4D3A,0x4D3C,0xD868,0x4D39,
+ 0xD868,0xD868,0x4D3D,0x4D3B,0x9EB3,
+ 1, /* first low-surrogate */
+ 0xDC35, 0, 0,0xDD04, 0, 0, 0, 0, 0,
+ 0xDD26, 0, 0, 0,0xDD1E, 0, 0,0xDE0E, 0,0xDE1D,
+ 0xDE1E,0xDE1F, 0,0xDF88, 0,0xDF8D,0xDF91,0xDF80, 0,0xDC54,
+ 0xDC55, 0, 0, 0,0xDD25,0xDD1A, 0, 0, 0, 0,
+ 0, 0, 0,0xDF88, 0,0xDF7A, 0, 0,0xDF80,0xDD1E,
+ 0xDDFC,0xDE25, 0, 0, 0, 0,0xDE0B, 0,0xDE06,0xDE04,
+ 0, 0,0xDDF9,0xDE00, 0, 0, 0,0xDE02, 0,0xDE07,
+ 0, 0, 0,0xDCB5, 0,0xDC87, 0,0xDC93,0xDE0F, 0,
+ 0xDCBE,0xDE66, 0,0xDEC7,0xDECF, 0, 0, 0,0xDF3D, 0,
+ 0xDF3C,0xDF47,
+ /* plane 4, row 67 */
+ 1 | (94 << 8), /* first, last */
+ 0x4D4C,0xD868,0x4D68,0x9EE2,0xD869,0x4D80,0x4D85,0xD869,0x4D95,
+ 0xD869,0x4D96,0xD869,0x9F8F,0xD841,0x34A4,0x3512,0x56B1,0x3625,0xD845,
+ 0x5B41,0x3737,0xD846,0xD847,0xD847,0xffff,0x3868,0x3867,0x389E,0xD849,
+ 0xD849,0xD84A,0x39AA,0xD84A,0x39A9,0x39A4,0xD84A,0xD84A,0x3A71,0x3A6F,
+ 0xD84B,0xD84B,0xD84B,0xD84C,0x3AAD,0xD84C,0x6AF6,0x3C0C,0x6AF2,0x3C0B,
+ 0xD84D,0xD84D,0x3C0F,0x3C79,0xD850,0xD850,0xD850,0xD850,0x3D8D,0x3D8F,
+ 0xD850,0xD850,0x3D8E,0x3E0C,0xD851,0xD851,0xD851,0x3EA6,0xD852,0x3EA3,
+ 0x3EA4,0x3EA5,0x7588,0x3F6E,0xD853,0xD853,0x3FFA,0xD854,0x407C,0x407E,
+ 0x407B,0x407D,0xD854,0xD854,0x408D,0x40F4,0x40F3,0xD855,0xD856,0x4189,
+ 0xD856,0xD856,0x41C0,0xD857,0x4265,
+ 2, /* first low-surrogate */
+ 0xDFC3, 0, 0,0xDD1B, 0, 0,0xDDC9, 0,
+ 0xDDDD, 0,0xDE93, 0,0xDC3D, 0, 0, 0, 0,0xDCE6,
+ 0, 0,0xDEF7,0xDFB0,0xDFAE, 0, 0, 0, 0,0xDD9F,
+ 0xDD9E,0xDD30, 0,0xDD4F, 0, 0,0xDD27,0xDD51, 0, 0,
+ 0xDE51,0xDE54,0xDE56,0xDC27, 0,0xDC24, 0, 0, 0, 0,
+ 0xDFEC,0xDFC4, 0, 0,0xDCF8,0xDCF6,0xDCF7,0xDCED, 0, 0,
+ 0xDCF4,0xDCEF, 0, 0,0xDC7F,0xDCA2,0xDC7E, 0,0xDCC5, 0,
+ 0, 0, 0, 0,0xDEF1,0xDEF2, 0,0xDC2F, 0, 0,
+ 0, 0,0xDF23,0xDF29, 0, 0, 0,0xDF1B,0xDCEB, 0,
+ 0xDCEA,0xDE33, 0,0xDD63,
+ /* plane 4, row 68 */
+ 1 | (94 << 8), /* first, last */
+ 0xD857,0xD857,0x42AD,0x4325,0xD858,0xD87E,0xD858,0x43C9,0xD85A,
+ 0x444A,0xD85A,0x8267,0x4489,0xD85C,0x4566,0x4570,0xD85C,0x456D,0x4569,
+ 0x4567,0xD85C,0x4572,0x860E,0x456E,0xD85C,0x459C,0x45FC,0x45FD,0x4604,
+ 0x45FF,0xD87E,0x45FE,0x4600,0xD85D,0x4666,0x4669,0xD85D,0x46AA,0x46AB,
+ 0x4717,0xD85E,0xD85E,0xD85E,0x4715,0x8B5E,0x4712,0x8D0E,0xD85F,0xD85F,
+ 0xD85F,0x47CA,0xD85F,0x47C9,0x47CB,0xD85F,0xD85F,0xD860,0x4829,0x4828,
+ 0xD860,0xD860,0xD860,0x4840,0x4875,0x4876,0xD860,0x4888,0xD861,0x91B6,
+ 0x4957,0x9401,0xD862,0x495F,0xD862,0x941D,0x4958,0x495B,0xD862,0x942F,
+ 0xD863,0x49B3,0xD863,0x49EF,0xD864,0x4A30,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0x4A41,0x4A4B,0xD864,0x4A7D,
+ 1, /* first low-surrogate */
+ 0xDD92,0xDD65, 0, 0,0xDDA0,0xDD70,0xDE5E, 0,0xDCAA,
+ 0,0xDCA9, 0, 0,0xDC9C, 0, 0,0xDC92, 0, 0,
+ 0,0xDC86, 0, 0, 0,0xDC83, 0, 0, 0, 0,
+ 0,0xDDC2, 0, 0,0xDCCE, 0, 0,0xDF93, 0, 0,
+ 0,0xDF2E,0xDF27,0xDF28, 0, 0, 0, 0,0xDE18,0xDE16,
+ 0xDF8D, 0,0xDF8E, 0, 0,0xDF90,0xDF8F,0xDD81, 0, 0,
+ 0xDD8A,0xDD8C,0xDE8D, 0, 0, 0,0xDFB2, 0,0xDFD9, 0,
+ 0, 0,0xDF0D, 0,0xDF13, 0, 0, 0,0xDF1B, 0,
+ 0xDDAC, 0,0xDDB3, 0,0xDD5E, 0,0xDD60,0xDD68,0xDD63,0xDD69,
+ 0xDD67, 0, 0,0xDF28,
+ /* plane 4, row 69 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0x4A7C,0xD864,0xD864,0xD864,0x97E0,0xD864,0x97DB,
+ 0xD87E,0xD865,0x9861,0xD865,0xD865,0x4AE8,0x4AEA,0x4AE9,0xD865,0xD865,
+ 0xD865,0xD865,0x4B1B,0xD865,0xD865,0x4B55,0x994A,0x4B59,0x4B58,0xD865,
+ 0xD865,0xD865,0x4BA4,0x4BA3,0xD866,0xD866,0xD866,0xD866,0x9A33,0x4BA7,
+ 0xD866,0x4BE0,0xD866,0xD866,0xD866,0x4C08,0x4C0A,0x4C09,0xD866,0xD867,
+ 0xD867,0x4C71,0x9C0F,0x4C6C,0xD867,0x9C11,0xD867,0x9C03,0x9C01,0x4C6E,
+ 0xD867,0x9C16,0xD867,0xffff,0xD867,0x4CE0,0x4CEE,0xD868,0x4CEB,0xD868,
+ 0xD868,0xD868,0xD868,0x9D93,0x4CEA,0x4CEF,0x4CE7,0xD868,0xD868,0xD868,
+ 0xD868,0x4D48,0x4D49,0xD868,0xD868,0xD868,0x4D4D,0xD868,0xD869,0x4D55,
+ 0xD869,0xD869,0x4D6A,0x4D6C,0xD869,
+ 1, /* first low-surrogate */
+ 0xDF2E,0xDF30, 0,0xDF26,0xDF31,0xDF41, 0,0xDFDA, 0,
+ 0xDDFA,0xDC0B, 0,0xDD34,0xDD33, 0, 0, 0,0xDD39,0xDD3B,
+ 0xDD40,0xDE30, 0,0xDE32,0xDE37, 0, 0, 0, 0,0xDF81,
+ 0xDF9F,0xDFA7, 0, 0,0xDD44,0xDD47,0xDD48,0xDD3D, 0, 0,
+ 0xDD49, 0,0xDE80,0xDFA0,0xDF9D, 0, 0, 0,0xDF9C,0xDC47,
+ 0xDD07, 0, 0, 0,0xDE49, 0,0xDE44, 0, 0, 0,
+ 0xDEDF, 0,0xDE4C, 0,0xDE4F, 0, 0,0xDCC1, 0,0xDCB9,
+ 0xDCCB,0xDCCF,0xDCC4, 0, 0, 0, 0,0xDCCA,0xDCC3,0xDED0,
+ 0xDF51, 0, 0,0xDFA8,0xDFC7,0xDFC6, 0,0xDFCA,0xDC02, 0,
+ 0xDC5D,0xDC5A, 0, 0,0xDC59,
+ /* plane 4, row 70 */
+ 1 | (94 << 8), /* first, last */
+ 0x4D6B,0xD869,0xD869,0xD869,0x4D98,0x4D99,0x4D97,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD841,0xD841,0xD841,0x535B,0xD842,0x3616,0xD844,
+ 0x56BF,0xD844,0xD845,0x3739,0xD846,0xD847,0x3825,0x5DCE,0xD848,0xD849,
+ 0xD84A,0xD84B,0x3A74,0xD84B,0xD84B,0x3AAE,0xD84C,0xD84D,0xD84D,0xD84F,
+ 0xD850,0x3D92,0x3D94,0xD850,0x3D95,0xD850,0x3E0D,0xD851,0x3E25,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0x3FD5,0x3FD6,0x76AC,0x3FE8,
+ 0xD854,0x407F,0x77D2,0x40F5,0x40F6,0x40F7,0xD855,0x4124,0x418D,0x418A,
+ 0xD856,0xD856,0x426C,0x4266,0x426A,0xD857,0x4267,0x426D,0x4268,0x7C52,
+ 0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0x4365,0xD859,0x439A,0xD859,
+ 2, /* first low-surrogate */
+ 0xDCCC,0xDD1C,0xDDCC, 0, 0, 0,0xDDE8,0xDDEC,
+ 0xDDEA,0xDEAD,0xDEB0,0xDC5F,0xDC58,0xDC57, 0,0xDF93, 0,0xDD3B,
+ 0,0xDD34,0xDCF2, 0,0xDEFD,0xDC1D, 0, 0,0xDF04,0xDC48,
+ 0xDD58,0xDE4F, 0,0xDE6E,0xDE72, 0,0xDC2E,0xDFFC,0xDFF4,0xDC36,
+ 0xDD0E, 0, 0,0xDD14, 0,0xDD19, 0,0xDCA6, 0,0xDEC9,
+ 0xDEC0,0xDECC,0xDF1B,0xDFAA,0xDFA8,0xDF03, 0, 0, 0, 0,
+ 0xDC35, 0, 0, 0, 0, 0,0xDDD9, 0, 0, 0,
+ 0xDE3F,0xDE3D, 0, 0, 0,0xDD8B, 0, 0, 0, 0,
+ 0xDD68,0xDD8A,0xDF58,0xDF57,0xDDCE,0xDDBC,0xDDC0,0xDDC1,0xDDBF,0xDDAB,
+ 0xDE5F, 0,0xDCA6, 0,0xDD29,
+ /* plane 4, row 71 */
+ 1 | (94 << 8), /* first, last */
+ 0x43B1,0x444B,0x444D,0x444C,0x444E,0xD85A,0x4573,0x4575,0xD85C,
+ 0xD85C,0xD87E,0xD85C,0xD85C,0xD85C,0xD85D,0x4603,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0x471E,0xD85E,0x8B73,0xD85E,0x4719,
+ 0x471C,0x471A,0x471D,0x8B76,0xD85E,0xD85E,0x4743,0x4752,0xD85F,0xD85F,
+ 0x4795,0xD85F,0x47CC,0xD860,0x482B,0xD860,0xD860,0xD860,0x482A,0x8EC7,
+ 0x4877,0xD860,0xD860,0xD861,0xD861,0xD862,0xD862,0xD862,0x4913,0x4914,
+ 0x9434,0xD862,0xD862,0x495D,0xD862,0x4960,0x943E,0x4962,0xD863,0xD863,
+ 0x49B2,0x49F0,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A4C,0xD864,
+ 0x4A82,0x97BC,0x4A81,0x4A9B,0xD864,0x4AA4,0x4AEE,0x4AEC,0xD865,0x4AED,
+ 0xD865,0x4AF0,0x4AEF,0xD865,0x4B1D,
+ 6, /* first low-surrogate */
+ 0xDCB8, 0, 0,0xDCDD,
+ 0xDCD6,0xDDB1,0xDCD5,0xDCE7,0xDCD8,0xDCEC, 0,0xDD00,0xDD07,0xDCFD,
+ 0xDCF1,0xDCFF,0xDFAA,0xDFB0,0xDF48, 0,0xDF53, 0,0xDF4D, 0,
+ 0, 0, 0, 0,0xDF43,0xDF50, 0, 0,0xDC8C,0xDE27,
+ 0,0xDF99, 0,0xDDB1, 0,0xDDB0,0xDDAA,0xDDAC, 0, 0,
+ 0,0xDFC8,0xDFCA,0xDE42,0xDFE0,0xDCE7,0xDCE8,0xDCE6, 0, 0,
+ 0,0xDF5B,0xDF56, 0,0xDF5A, 0, 0, 0,0xDCB8,0xDDC5,
+ 0, 0,0xDC48,0xDD7D,0xDD7C,0xDD81,0xDD82,0xDD62, 0,0xDF45,
+ 0, 0, 0, 0,0xDFE3, 0, 0, 0,0xDD50, 0,
+ 0xDD4F, 0, 0,0xDE39,
+ /* plane 4, row 72 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0x4B60,0x4B5E,0x4B5D,0xD865,0xD866,0xD866,0x4BB1,0x4BAB,
+ 0x4BAC,0x4BAD,0xD866,0x4BAE,0xD866,0xD866,0x4BE2,0xD866,0xD866,0xD866,
+ 0xD866,0xD867,0x9B39,0xD867,0xD867,0x9C2A,0x4C7B,0x9C26,0x4C78,0x4C75,
+ 0x9C27,0xD867,0x4CF2,0x4CF4,0x4CF3,0x9DC0,0x9DC9,0xD868,0xD868,0xD868,
+ 0x4D3F,0x4D3E,0x4D40,0x4D4E,0x4D57,0x4D59,0x4D58,0xD87E,0xD869,0xD869,
+ 0x4D6E,0xD869,0xD869,0xD869,0x9EEC,0xD869,0xD869,0x4D81,0x4D86,0xD869,
+ 0x4D8F,0xD869,0xD869,0xD869,0x9F68,0x4D9B,0x4DB1,0x4DB3,0xD844,0x373A,
+ 0xD846,0xD847,0x3827,0xD847,0xD847,0x386A,0x39AC,0xD84C,0x3C18,0xD84E,
+ 0xD84E,0x3C4C,0xD850,0x3D96,0xD852,0x3F4A,0xD852,0xD853,0x4081,0xD854,
+ 0x4083,0x40F9,0x40F8,0xD855,0x418E,
+ 1, /* first low-surrogate */
+ 0xDE3A, 0, 0, 0,0xDFC1,0xDD4E,0xDD6E, 0, 0,
+ 0, 0,0xDD71, 0,0xDE8C,0xDE89, 0,0xDEE5,0xDFB3,0xDFB6,
+ 0xDFB4,0xDC4D, 0,0xDD13,0xDE78, 0, 0, 0, 0, 0,
+ 0,0xDE72, 0, 0, 0, 0, 0,0xDE75,0xDEDA,0xDED7,
+ 0, 0, 0, 0, 0, 0, 0,0xDE16,0xDC69,0xDC67,
+ 0,0xDC66,0xDC6F,0xDC71, 0,0xDCCF,0xDD23, 0, 0,0xDDA5,
+ 0,0xDDFE,0xDDFB,0xDDFD, 0, 0, 0, 0,0xDD6D, 0,
+ 0xDF05,0xDC20, 0,0xDFC8,0xDFC9, 0, 0,0xDD27, 0,0xDC1E,
+ 0xDD36, 0,0xDD3D, 0,0xDCD7, 0,0xDFAD,0xDD00, 0,0xDF3A,
+ 0, 0, 0,0xDF26,
+ /* plane 4, row 73 */
+ 1 | (94 << 8), /* first, last */
+ 0x418F,0x41C1,0xD857,0xD857,0xD857,0x4270,0xD857,0x4271,0xD858,
+ 0x432A,0x432D,0x437D,0x8032,0x8031,0xD85A,0x444F,0xD85A,0xD85A,0x4490,
+ 0xD85C,0xD85C,0xD85C,0x4579,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,
+ 0x4605,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0x89FD,0xD85E,0xD85E,
+ 0x4721,0xD85E,0xD85E,0xD858,0x4732,0xD85F,0x47CD,0x47CF,0xD860,0xD860,
+ 0x908E,0x4916,0x4915,0x49B5,0x4A08,0xD864,0x4A32,0xD864,0x4A33,0x4A34,
+ 0x4A3C,0xD864,0x97C2,0xD864,0x4A9C,0xD865,0x4AF4,0x4AF2,0xD865,0x4B62,
+ 0xD865,0x4B61,0x4B64,0x4BB5,0x9A4B,0x4BB4,0xD866,0xD866,0x4BE3,0xD866,
+ 0xD866,0x9B1C,0x4C0E,0xD866,0x9B1B,0xD867,0x4C2C,0x4C2B,0xD867,0xD867,
+ 0xD867,0x4C85,0x4C81,0x4C7E,0x4C83,
+ 3, /* first low-surrogate */
+ 0xDDB7,0xDDB6,0xDDC0, 0,0xDD9B, 0,0xDDD8,
+ 0, 0, 0, 0, 0,0xDCC0, 0,0xDCBF,0xDEBF, 0,
+ 0xDD20,0xDCD0,0xDD0E, 0,0xDD1D,0xDD1E,0xDD15,0xDD14,0xDD1E,0xDD2C,
+ 0,0xDFB9,0xDFB8,0xDFB6,0xDC9E,0xDC9C,0xDD4D, 0,0xDF6E,0xDF60,
+ 0,0xDF64,0xDF62,0xDDE5, 0,0xDFA3, 0, 0,0xDFD2,0xDFD5,
+ 0, 0, 0, 0, 0,0xDC55, 0,0xDD93, 0, 0,
+ 0,0xDF56, 0,0xDFE9, 0,0xDC45, 0, 0,0xDE7C, 0,
+ 0xDFD3, 0, 0, 0, 0, 0,0xDD8E,0xDE97, 0,0xDE9B,
+ 0xDE99, 0, 0,0xDFCF, 0,0xDC59, 0, 0,0xDD20,0xDD23,
+ 0xDD2A,
+ /* plane 4, row 74 */
+ 1 | (94 << 8), /* first, last */
+ 0x4C80,0xD867,0x9C42,0xD868,0x9DD4,0x4CFB,0x4CF7,0xD868,0xD868,
+ 0xD868,0xD868,0x4CF8,0xD868,0xD868,0xD868,0xD868,0x4D5A,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0x4D78,0xD869,0xD869,0xD869,0xD869,0x4D9D,0x4D9C,
+ 0xD869,0xD869,0xD841,0x34A9,0x34BF,0x56D0,0x56CF,0xD846,0x5DDA,0xD849,
+ 0x3A77,0x3A76,0xD84C,0x3ABB,0x66EA,0xD84E,0x3D9B,0xD851,0x3E0F,0x3E5B,
+ 0xD852,0x3F4C,0x3F6F,0x3FD9,0xD853,0x4082,0xD854,0xD854,0xD854,0xD855,
+ 0x4274,0x4272,0xD857,0xD857,0xD857,0x4273,0xD857,0xD857,0xD857,0x42B1,
+ 0x432E,0xD858,0xD858,0xD858,0xD858,0x434E,0xD859,0xD859,0xD85A,0xD85A,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0x460B,0xD85D,
+ 0xD85D,0x466C,0x8B89,0xD85E,0xD85E,
+ 2, /* first low-surrogate */
+ 0xDEB0, 0,0xDD2F, 0, 0, 0,0xDD32,0xDD43,
+ 0xDD3F,0xDD39, 0,0xDD30,0xDEDD,0xDFDA,0xDFDB, 0,0xDC84,0xDC7F,
+ 0xDC72,0xDC80,0xDCEE, 0,0xDD2A,0xDD22,0xDD71,0xDDCD, 0, 0,
+ 0xDE0F,0xDE18,0xDC6A, 0, 0, 0, 0,0xDF0C, 0,0xDDA6,
+ 0, 0,0xDC37, 0, 0,0xDEE2, 0,0xDCBC, 0, 0,
+ 0xDED5, 0, 0, 0,0xDF12, 0,0xDF4B,0xDF41,0xDFA1,0xDDEC,
+ 0, 0,0xDDD4,0xDDD8,0xDDD9, 0,0xDDDA,0xDF6C,0xDF6D, 0,
+ 0,0xDDE7,0xDDEB,0xDDEC,0xDE62, 0,0xDD2B,0xDE0D,0xDCCD,0xDEC3,
+ 0xDD3F,0xDD3C,0xDD3E,0xDD3D,0xDD3A,0xDD38,0xDD44,0xDD45, 0,0xDD48,
+ 0xDD50, 0, 0,0xDF78,0xDF79,
+ /* plane 4, row 75 */
+ 1 | (94 << 8), /* first, last */
+ 0x478B,0xD85F,0x47D0,0x482D,0xD861,0x48E4,0x4971,0xD862,0x9458,
+ 0x496F,0xD864,0x4A87,0x4AA5,0xD865,0xD865,0x4B1E,0x4B65,0x4BB9,0x4BB7,
+ 0x4BB8,0x4BE4,0xD866,0xD866,0xD866,0xD866,0xD867,0x4C8C,0x4C89,0x4C8A,
+ 0xD867,0xD867,0x4C8B,0xD868,0xD868,0xD868,0x4D01,0x4CFE,0x9DE7,0x4D03,
+ 0x4D06,0xD868,0x9DEA,0x9DF1,0xD868,0x4D1D,0x4D43,0xD868,0xD868,0xD868,
+ 0x4D4F,0xD869,0xD869,0x4D5B,0x4D70,0xD869,0x4D88,0xD869,0xD869,0x4D89,
+ 0x9F44,0xD869,0xD869,0xD869,0xD869,0x9F6D,0xD869,0xD869,0xD869,0xD842,
+ 0xD844,0xD846,0x5DD9,0xD847,0xD847,0xD84B,0xD84E,0x3D9E,0x3D9F,0x3EA7,
+ 0x3F4B,0x3FDB,0x3FDA,0xD853,0x77D6,0x408E,0x4276,0xD857,0x4330,0x432F,
+ 0xD858,0x4366,0xD858,0x457E,0xD85D,
+ 2, /* first low-surrogate */
+ 0xDE3E, 0, 0,0xDE54, 0, 0,0xDFB9, 0,
+ 0,0xDC5F, 0, 0,0xDD72,0xDD75, 0, 0, 0, 0,
+ 0, 0,0xDEA3,0xDEA5,0xDFDC,0xDFDD,0xDC5A, 0, 0, 0,
+ 0xDEDB,0xDEDC, 0,0xDDAB,0xDD84,0xDD76, 0, 0, 0, 0,
+ 0,0xDD83, 0, 0,0xDE7F, 0, 0,0xDF73,0xDFAD,0xDFB0,
+ 0,0xDC0F,0xDC0C, 0, 0,0xDD79, 0,0xDD77,0xDD7A, 0,
+ 0,0xDE32,0xDE27,0xDE2A,0xDE2C, 0,0xDE28,0xDE29,0xDE38,0xDC2F,
+ 0xDD7B,0xDF0D, 0,0xDFD6,0xDFD5,0xDEA1,0xDC4C, 0, 0, 0,
+ 0, 0, 0,0xDFC0, 0, 0, 0,0xDDF4, 0, 0,
+ 0xDDF0, 0,0xDF3F, 0,0xDD5D,
+ /* plane 4, row 76 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85D,0xD85D,0x883A,0xD85D,0x8975,0x466F,0xD85E,0x47D1,0x482F,
+ 0xD860,0xD860,0x48B2,0x4918,0x4917,0xD862,0x4976,0xD864,0xD864,0x4A4F,
+ 0x4A89,0xD864,0xD865,0xD865,0xD865,0x4AF5,0x4B1F,0xD865,0xD865,0x9A5D,
+ 0x4BE5,0xD866,0xD866,0x4C10,0xD866,0x4C0F,0xD866,0xD867,0xD867,0xD867,
+ 0x4C2F,0x4C30,0x9C64,0xD867,0xD867,0x4C93,0x4C94,0xD867,0x4D07,0x4D09,
+ 0x4D08,0xD868,0x4D0B,0xD868,0x9E0A,0xD868,0xD868,0xD868,0x4D50,0x4D71,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0x4D7B,0x4D7C,0xD869,0x9F73,0xD869,
+ 0x4DA1,0xD869,0xD869,0x4DA0,0x4DA2,0xD842,0x361B,0xD844,0x3682,0xD84C,
+ 0xD84E,0xD850,0xD850,0x3FE9,0xD854,0x4084,0x77E1,0xD856,0xD856,0xD857,
+ 0x42B3,0x4334,0x4333,0x4580,0xD85D,
+ 1, /* first low-surrogate */
+ 0xDD72,0xDD62, 0,0xDD66, 0, 0,0xDF88, 0, 0,
+ 0xDDE8,0xDDE4, 0, 0, 0,0xDCFF, 0,0xDDAF,0xDDAE, 0,
+ 0,0xDFF2,0xDC48,0xDD81,0xDD7E, 0, 0,0xDE52,0xDFEF, 0,
+ 0,0xDEAD,0xDFE6, 0,0xDFED, 0,0xDFE9,0xDC61,0xDC60,0xDD33,
+ 0, 0, 0,0xDF0B,0xDF08, 0, 0,0xDF07, 0, 0,
+ 0,0xDDCA, 0,0xDDC6, 0,0xDE84,0xDEEB,0xDF7D, 0, 0,
+ 0xDC9B,0xDCA2,0xDCA1,0xDCA0,0xDC9C, 0, 0,0xDD80, 0,0xDE40,
+ 0,0xDE39,0xDE3C, 0, 0,0xDCCA, 0,0xDD89, 0,0xDC3C,
+ 0xDD40,0xDD63,0xDD69, 0,0xDF53, 0, 0,0xDD17,0xDD1A,0xDE00,
+ 0, 0, 0, 0,0xDD6F,
+ /* plane 4, row 77 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85E,0x46AD,0xD85E,0x4744,0x4755,0xD85F,0x47D2,0xD860,0xD863,
+ 0xD863,0xD864,0xD864,0x4A8A,0xD865,0xD865,0x4B67,0xD866,0xD866,0x4BE6,
+ 0xD866,0x4C13,0xD866,0x9B2D,0xD867,0x4C97,0x9E0C,0xD868,0xD868,0x4D0C,
+ 0xD868,0xD868,0xD868,0x4D46,0x4D5C,0x4D74,0x4D72,0xD869,0xD869,0xD869,
+ 0x9F1F,0xD869,0xD869,0x4DA4,0x4DA3,0xD869,0xD869,0xD869,0xD869,0x4DB4,
+ 0xD841,0x3536,0xD846,0xD84E,0xD84E,0x3CB2,0xD850,0xD850,0x3F16,0x7C70,
+ 0x4277,0xD857,0x457F,0xD85C,0xD85E,0x487D,0x9479,0xD862,0x974A,0x4A8C,
+ 0xD865,0x4B68,0x4BBE,0x4C15,0xD868,0xD868,0xD868,0xD868,0xD869,0x4D75,
+ 0x4DA5,0xD846,0xD84A,0xD84B,0xD850,0xD855,0x4278,0x4335,0x7E9D,0x4582,
+ 0xD85C,0x4583,0xD85C,0x4671,0xD85E,
+ 1, /* first low-surrogate */
+ 0xDCAB, 0,0xDF91, 0, 0,0xDFB1, 0,0xDDEF,0xDDF1,
+ 0xDDF2,0xDDB7,0xDDB5, 0,0xDD86,0xDE5A, 0,0xDDC6,0xDDCB, 0,
+ 0xDEB2, 0,0xDFF3, 0,0xDF27, 0, 0,0xDDD5,0xDDD8, 0,
+ 0xDDEC,0xDE87,0xDEF2, 0, 0, 0, 0,0xDCAD,0xDCB0,0xDCFD,
+ 0,0xDD87,0xDE4A, 0, 0,0xDE4E,0xDE49,0xDE51,0xDE4D, 0,
+ 0xDC72, 0,0xDF16,0xDC6D,0xDD41, 0,0xDD71,0xDD74, 0, 0,
+ 0,0xDF7C, 0,0xDD8A,0xDD56, 0, 0,0xDFFA, 0, 0,
+ 0xDE5B, 0, 0, 0,0xDDF5,0xDDF0,0xDEF3,0xDF7F,0xDC13, 0,
+ 0,0xDF19,0xDD85,0xDEB0,0xDD77,0xDDFF, 0, 0, 0, 0,
+ 0xDD87, 0,0xDD8B, 0,0xDF9E,
+ /* plane 4, row 78 */
+ 1 | (60 << 8), /* first, last */
+ 0x487E,0x4A8E,0xD865,0x9960,0x4B69,0xD866,0xD866,0xD866,0xD867,
+ 0xD867,0xD867,0x4C9A,0x4C9B,0xD868,0xD869,0xD869,0x4D90,0xD869,0x9F9E,
+ 0xD852,0xD85C,0x4586,0x4585,0xD85C,0x460E,0xD85D,0xD85E,0xD85E,0x4919,
+ 0xD864,0x4BC0,0xD866,0xD867,0xD868,0x9EF8,0x9F3A,0x9F7D,0xD869,0xD869,
+ 0x400D,0x4C16,0xD869,0x4DA9,0x4DAA,0x4085,0xD857,0xD85A,0xD85D,0xD867,
+ 0xD868,0xD869,0xD867,0x9F96,0xD869,0x4BC2,0x4C31,0x4D11,0x4DAB,0x4C9C,
+ 0xD864,
+ 3, /* first low-surrogate */
+ 0xDD8F, 0, 0,0xDC39,0xDDD4,0xDEF1,0xDC02,
+ 0xDC6B,0xDD40, 0, 0,0xDE10,0xDCBE,0xDCB9, 0,0xDE64, 0,
+ 0xDEE9,0xDD90, 0, 0,0xDE1C, 0,0xDD92,0xDCAE,0xDFA3, 0,
+ 0xDDC9, 0,0xDDD8,0xDD44,0xDE24, 0, 0, 0,0xDE70,0xDED3,
+ 0, 0,0xDCC3, 0, 0, 0,0xDE21,0xDECA,0xDD9C,0xDC73,
+ 0xDF86,0xDDC1,0xDC09, 0,0xDED5, 0, 0, 0, 0, 0,
+ 0xDDD4,
+ /* plane 4, row 79: --- */
+ /* plane 4, row 80: --- */
+ /* plane 4, row 81: --- */
+ /* plane 4, row 82: --- */
+ /* plane 4, row 83: --- */
+ /* plane 4, row 84: --- */
+ /* plane 4, row 85: --- */
+ /* plane 4, row 86: --- */
+ /* plane 4, row 87: --- */
+ /* plane 4, row 88: --- */
+ /* plane 4, row 89: --- */
+ /* plane 4, row 90: --- */
+ /* plane 4, row 91: --- */
+ /* plane 4, row 92: --- */
+ /* plane 4, row 93: --- */
+ /* plane 4, row 94: --- */
+ /* plane 5, row 1 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD87E,
+ 0xD848,0xD840,0xD840,0xD840,0xD842,0xD845,0xD847,0xD849,0xD84E,0xD840,
+ 0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0x355A,0xD842,0xD842,0xD844,0xD847,0xD847,0xD848,
+ 0xD84C,0xD84E,0xD84E,0xD851,0xD852,0xD840,0xD840,0xD840,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD845,0xD846,0xD846,0xD846,
+ 0xD847,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD84A,0xD84A,0xD84A,
+ 0xD84E,0xD84E,0xD84E,0xD84F,0x3CBC,0xD851,0xD845,0xD851,0xD851,0xD859,
+ 0xD859,0xD85A,0xD861,0x49B9,0xD863,
+ 1, /* first low-surrogate */
+ 0xDCD1,0xDCCB,0xDCC9,0xDD0C,0xDC00,0xDC87,0xDD0D,0xDD0F,0xDC1D,
+ 0xDF98,0xDCD2,0xDD11,0xDC7E,0xDED3,0xDD52,0xDCFE,0xDDA9,0xDD42,0xDC09,
+ 0xDCD6,0xDCDD,0xDCDC,0xDD02,0xDD73,0xDE76,0xDEA7,0xDEA8,0xDC33,0xDCCC,
+ 0xDE0D,0xDE2C,0xDF1B, 0,0xDF1D,0xDF99,0xDE3E,0xDD2D,0xDD2F,0xDF99,
+ 0xDFB3,0xDDB6,0xDF1B,0xDCEF,0xDCE9,0xDC14,0xDC94,0xDCE1,0xDD06,0xDD4A,
+ 0xDD44,0xDE31,0xDE7A,0xDEAD,0xDEAE,0xDEB1,0xDC38,0xDC37,0xDD7D,0xDD7E,
+ 0xDE2D,0xDE32,0xDF23,0xDF26,0xDC3A,0xDFA0,0xDEA8,0xDD3F,0xDDBC,0xDFC4,
+ 0xDD3B,0xDC19,0xDC18,0xDDB3,0xDFAA,0xDCBE,0xDDAC,0xDE25,0xDE66,0xDE6B,
+ 0xDD43,0xDDB5,0xDEEC,0xDC76, 0,0xDE14,0xDDDC,0xDF1C,0xDF1D,0xDCD0,
+ 0xDE12,0xDEF3,0xDE69, 0,0xDE11,
+ /* plane 5, row 2 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x34DE,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0x3543,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD844,0xD844,0xD845,0xD845,0xD846,0xD846,0xD847,0xD847,0x37AC,0x37AA,
+ 0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0x5E07,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0x5FCB,0x38FE,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84C,0xD84C,0xD84C,0xD84E,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD853,0xD854,0xD855,
+ 1, /* first low-surrogate */
+ 0xDE15,0xDE10,0xDE13,0xDCA4,0xDCA5,0xDDD0,0xDDBA,0xDDCB,0xDD7B,
+ 0xDE86,0xDEBB,0xDEBA,0xDEC3,0xDEB9,0xDEC0, 0,0xDC39,0xDC3B,0xDC41,
+ 0xDCD1,0xDCCF,0xDCD2,0xDD2E,0xDD6E,0xDD8C,0xDD88,0xDE35, 0,0xDE3A,
+ 0xDE3B,0xDE38,0xDE39,0xDF2E,0xDF2C,0xDFC8,0xDFB5,0xDFAD,0xDFB0,0xDFAB,
+ 0xDDB3,0xDDA9,0xDEBB,0xDEB9,0xDF5A,0xDFCD,0xDC2B,0xDD05, 0, 0,
+ 0xDD51,0xDD4B,0xDFEA,0xDFED,0xDC36,0xDC62,0xDC56,0xDC55,0xDC64,0xDC58,
+ 0,0xDDDA,0xDDD8,0xDFAD,0xDFAB,0xDCC0,0xDCC3,0xDDB3,0xDDB7,0xDDBA,
+ 0, 0,0xDDC7,0xDDB5,0xDD8E,0xDE73,0xDE6C,0xDE74,0xDCB4,0xDE72,
+ 0xDE71,0xDE82,0xDE70,0xDD3F,0xDFBA,0xDFB8,0xDDB7,0xDF23,0xDF21,0xDF2B,
+ 0xDF26,0xDF22,0xDD25,0xDCE4,0xDC15,
+ /* plane 5, row 3 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85E,0xD85E,0xD85F,
+ 0xD861,0xD861,0xD861,0xD861,0xD863,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0x3441,0xD841,0xD841,0x34B4,0xD841,0xD841,0xD841,0xD841,0xD842,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,
+ 0xD842,0xD842,0xD842,0xffff,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,0xD842,0xD842,0xD843,0xD842,
+ 0xD842,0xD844,0xD844,0xD844,0xD844,0xD844,0xD87E,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD851,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,
+ 0x37B3,0xD847,0xD847,0xD847,0x37B4,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD848,0xD848,0xD848,
+ 1, /* first low-surrogate */
+ 0xDCE4,0xDE33,0xDE2A,0xDE32,0xDE29,0xDEFB,0xDD5B,0xDD5C,0xDC28,
+ 0xDE6F,0xDE6D,0xDE6B,0xDE6E,0xDE16,0xDC22,0xDD16,0xDD48,0xDDD8,0xDE00,
+ 0,0xDC80,0xDCE4, 0,0xDCE7,0xDD0C,0xDD53,0xDDB7,0xDEE8,0xDED1,
+ 0xDEE5,0xDED8,0xDED6,0xDEDA,0xDED9,0xDED5,0xDEE6,0xDED4,0xDED3,0xDC44,
+ 0xDCD6,0xDCD7,0xDD13, 0,0xDD70,0xDD92,0xDDDB,0xDDDA,0xDE41,0xDE43,
+ 0xDF33,0xDFF6,0xDFD4,0xDFDD,0xDFD0,0xDC04,0xDFD9,0xDFDB,0xDC05,0xDFD3,
+ 0xDFE1,0xDE80,0xDE77,0xDE81,0xDE82,0xDE83,0xDC5C,0xDD61,0xDD60,0xDED8,
+ 0xDED6,0xDED7,0xDE05,0xDD4D,0xDD48,0xDFD6,0xDFCF,0xDFD9,0xDFD8,0xDC3D,
+ 0,0xDD54,0xDD5B,0xDD5C, 0,0xDD59,0xDD58,0xDD5A,0xDD55,0xDD56,
+ 0xDD82,0xDFF0,0xDC1C,0xDC6A,0xDC69,
+ /* plane 5, row 4 */
+ 1 | (94 << 8), /* first, last */
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD87E,0xD849,0xD849,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84E,
+ 0x3C1D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C7C,0xD84E,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0x3F55,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD855,0xD855,0x4126,0xD856,
+ 0xD856,0xD857,0xD859,0xD859,0xD85A,0xD85C,0xD85D,0xD85E,0xD861,0xD861,
+ 0xD861,0x49BC,0xD863,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDC71,0xDC67,0xDC6C,0xDC6E,0xDC79,0xDD8B,0xDDB8,0xDDE7,0xDDE8,
+ 0xDDE4,0xDDE6,0xDDE5,0xDDF0,0xDF83,0xDFB7,0xDFBB,0xDFB9,0xDFC5,0xDC53,
+ 0xDCC4,0xDCC6,0xDCCB,0xDDC8,0xDC9F,0xDDC9,0xDDDB,0xDD94,0xDE95,0xDE88,
+ 0xDE8D,0xDEEC,0xDEEE,0xDEF1,0xDD2E,0xDD49,0xDF5F,0xDFD1,0xDFCB,0xDC85,
+ 0,0xDD4A,0xDD47,0xDD4B,0xDDBB,0xDDC4, 0,0xDF02,0xDC82,0xDC91,
+ 0xDC8F,0xDC92,0xDD8F,0xDD91,0xDDB4,0xDD92,0xDCF4,0xDDAA,0xDF35,0xDF37,
+ 0xDF3D,0xDF3C,0xDF2F,0xDF30,0xDCF8,0xDCEF,0xDF26, 0,0xDD26,0xDD27,
+ 0xDF41,0xDFC6,0xDFC7,0xDCEB,0xDCE8,0xDCEA,0xDC1A,0xDC19, 0,0xDD23,
+ 0xDD24,0xDE25,0xDE35,0xDE34,0xDE07,0xDE1D,0xDFE1,0xDFAB,0xDC60,0xDE77,
+ 0xDE7D, 0,0xDE1E,0xDE1A,0xDE1D,
+ /* plane 5, row 5 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD840,0xD840,0xD840,0x344A,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0x344E,0xD841,0xD841,0x34C9,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0x52B7,0x52B8,0xD842,0x52B6,0x52BA,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0x357B,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0x3620,0xD844,0xD844,0xD844,0xD844,0x3689,0x3695,0xD845,0xD845,
+ 0xD845,0x36BE,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0x37C3,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,
+ 1, /* first low-surrogate */
+ 0xDC6B,0xDD2D,0xDD4C,0xDE2A, 0,0xDE15,0xDE2C,0xDE06,0xDE08,
+ 0xDE0A, 0,0xDD56,0xDD84, 0,0xDDC6,0xDEF5,0xDF09,0xDEF8,0xDEE8,
+ 0xDEFB,0xDEE9,0xDEF6, 0, 0,0xDC52, 0, 0,0xDC54,0xDC51,
+ 0xDD39,0xDD3A,0xDD98,0xDE4E, 0,0xDC36,0xDC0C,0xDC10,0xDC32,0xDC11,
+ 0xDC18,0xDC1C,0xDC1A,0xDC19,0xDC0B,0xDC0F,0xDC1D,0xDC21,0xDC13,0xDC1B,
+ 0xDC15, 0,0xDDD1,0xDDC8,0xDE8D,0xDEB5, 0, 0,0xDDF8,0xDEE0,
+ 0xDEE1, 0,0xDEDE,0xDEFE,0xDEDC,0xDF01,0xDEFD,0xDF00,0xDDD7,0xDDD6,
+ 0xDDD9,0xDF65,0xDFD2,0xDFDC,0xDFE1,0xDFDE,0xDC42,0xDC4B, 0,0xDD8E,
+ 0xDD91,0xDD8B,0xDD90,0xDD88,0xDD89,0xDD84,0xDDAA,0xDC8D,0xDC8F,0xDC7D,
+ 0xDC7F,0xDC7B,0xDC80,0xDC7E,0xDC83,
+ /* plane 5, row 6 */
+ 1 | (94 << 8), /* first, last */
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0x3877,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0x39D4,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84E,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3B4C,
+ 0xD84C,0xD84C,0xD84C,0xD84D,0x3C20,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C5B,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD851,0x3E2D,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,
+ 1, /* first low-surrogate */
+ 0xDC81,0xDC86,0xDC8A,0xDDBD,0xDDBE, 0,0xDDF4,0xDDF3,0xDE02,
+ 0xDDF6,0xDDF5,0xDDF2,0xDE04,0xDF3D,0xDFC6,0xDC89,0xDCD4,0xDCD6,0xDCD2,
+ 0xDDFA,0xDE06,0xDE0C,0xDE0A,0xDE0F,0xDE2F, 0,0xDEB7,0xDEBE,0xDEBC,
+ 0xDEE2,0xDF06,0xDEF7,0xDF07,0xDEF6,0xDF35,0xDD5F,0xDD65,0xDD64,0xDD61,
+ 0xDD5A,0xDD5D,0xDCD7,0xDFD7,0xDFD5,0xDFDE,0xDFE1,0xDFE0,0xDFD9, 0,
+ 0xDFDA,0xDFDF,0xDFF6,0xDC03, 0,0xDC93,0xDC8B,0xDC91,0xDC92,0xDC8A,
+ 0xDC89,0xDC8F,0xDD56,0xDD59,0xDDCA,0xDDCC, 0,0xDDD0,0xDDCD,0xDDD6,
+ 0xDDCB,0xDE83,0xDE82,0xDF06,0xDF2A,0xDF2C,0xDF2B,0xDF29,0xDCBD,0xDCB3,
+ 0xDCBE,0xDCC0,0xDCB5,0xDCB6,0xDD9D,0xDD9F,0xDE20, 0,0xDE1E,0xDE1C,
+ 0xDE32,0xDE1F,0xDE2B,0xDE21,0xDE26,
+ /* plane 5, row 7 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0x3E63,0xD851,0xD852,0xD852,0x3F18,0xD852,
+ 0xD852,0xD853,0xD853,0x3F74,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0x4128,0xD855,
+ 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,
+ 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0x43DA,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0x44A4,0xD85A,0xD85D,
+ 0xD85D,0xD85E,0xD861,0x488E,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,
+ 1, /* first low-surrogate */
+ 0xDE24,0xDE1D,0xDE27,0xDF5B,0xDF59,0xDF80,0xDF55,0xDF50,0xDF5A,
+ 0xDF56,0xDF63,0xDF52,0xDF58, 0,0xDF39,0xDCF9,0xDF28, 0,0xDFBC,
+ 0xDFD6,0xDC05,0xDC20, 0,0xDD33,0xDF46,0xDF42,0xDF43,0xDF47,0xDFCB,
+ 0xDC42,0xDC45,0xDCFD,0xDCF4,0xDCF9,0xDCFA,0xDF5E,0xDC1D, 0,0xDF58,
+ 0xDF55,0xDE57,0xDE58,0xDED9,0xDEDC,0xDEDB,0xDE27,0xDF85,0xDF87,0xDF8A,
+ 0xDE8B,0xDF4F,0xDD30,0xDD2F,0xDE68,0xDE49, 0,0xDE48,0xDE3F,0xDE4B,
+ 0xDE5C,0xDE46,0xDE40,0xDE0D,0xDF1B,0xDF1D,0xDF17, 0,0xDF22,0xDDA7,
+ 0xDE08,0xDC06,0xDC7D, 0,0xDC63,0xDC64,0xDC7F,0xDC6B,0xDC7C,0xDC68,
+ 0xDC65,0xDC6A,0xDE98,0xDE99,0xDEAE,0xDE2B,0xDE2D,0xDE31,0xDE2E,0xDE2F,
+ 0xDC6D,0xDD31,0xDE2D,0xDE39,0xDE38,
+ /* plane 5, row 8 */
+ 1 | (94 << 8), /* first, last */
+ 0x345B,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD84E,0xD842,0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0x3753,0xD846,
+ 0xD846,0xD846,0xD846,0xD87E,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD848,0xD848,0xD848,
+ 2, /* first low-surrogate */
+ 0xDE3A,0xDE35,0xDE62,0xDCEA,0xDCEB,0xDD15,0xDDCC,0xDDC8,
+ 0xDDCD,0xDDDB,0xDDCB,0xDF11,0xDF26,0xDC62,0xDC5E,0xDC61,0xDD41,0xDD3F,
+ 0xDD75,0xDD65,0xDF49,0xDDEB,0xDE1A,0xDE57,0xDC6B,0xDCA9,0xDC54,0xDC62,
+ 0xDCAA,0xDC58,0xDC72,0xDC63,0xDC73,0xDC8B,0xDC8C,0xDC5C,0xDC51,0xDC16,
+ 0xDC60,0xDC61,0xDC5E,0xDC5D,0xDC64,0xDC53,0xDC5F,0xDC5B,0xDC6E,0xDC55,
+ 0xDC52,0xDC68,0xDDD2,0xDDD6,0xDDD3,0xDEB8,0xDEBB,0xDEEB,0xDEE8,0xDEB6,
+ 0xDEEA,0xDEE7,0xDEE9,0xDD91,0xDE10,0xDE0E,0xDE0F,0xDF0B,0xDF03,0xDF2B,
+ 0xDF09,0xDF28,0xDF2C,0xDF25,0xDF27,0xDF0F,0xDDE9,0xDDEC, 0,0xDF27,
+ 0xDF73,0xDFE2,0xDFE6,0xDC76,0xDC61,0xDC51,0xDD12,0xDD0E,0xDDAD,0xDDAF,
+ 0xDDB1,0xDDD3,0xDC94,0xDC92,0xDC90,
+ /* plane 5, row 9 */
+ 1 | (94 << 8), /* first, last */
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0x3880,0xD87E,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD849,0xD849,0x38DD,0xD849,0xD849,0xD849,0x38DE,
+ 0xD849,0x3922,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x6306,0xD84A,0xD84A,
+ 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0x3ADB,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0x6B85,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0x3CDA,0x3CDB,0xD84F,0xD84F,
+ 1, /* first low-surrogate */
+ 0xDC9D,0xDC93,0xDC95,0xDC98,0xDC97, 0,0xDC8A,0xDE07,0xDE0B,
+ 0xDE08,0xDFD9,0xDFD5,0xDCD7,0xDCDF, 0,0xDCDE,0xDCE3,0xDCE2, 0,
+ 0xDE47, 0,0xDE3D,0xDE38,0xDE44,0xDE3A,0xDEB8,0xDF2A,0xDF00,0xDEF3,
+ 0xDEF2,0xDEEB,0xDEFA,0xDEED,0xDEEC,0xDEFF,0xDEFB, 0,0xDF4E,0xDEEF,
+ 0xDEF7,0xDF10,0xDF11,0xDF0C,0xDF0B,0xDCDD,0xDD30, 0,0xDD7A,0xDD77,
+ 0xDF28,0xDF27,0xDF65,0xDC0E,0xDC0B,0xDC41,0xDC13,0xDC0F,0xDC12,0xDC30,
+ 0xDCA0,0xDCA3,0xDC9E,0xDC97,0xDCA1,0xDC9D,0xDC9B,0xDD63,0xDDE3,0xDDE4,
+ 0xDDE6,0xDDE7,0xDDDD, 0,0xDDEC,0xDDE5,0xDDF1,0xDF3B,0xDF39,0xDF3A,
+ 0xDF3C,0xDF3D,0xDF47,0xDF3F,0xDF44,0xDC48,0xDC49,0xDC60,0xDCE3,0xDCE9,
+ 0xDCF0, 0, 0,0xDCF2,0xDCED,
+ /* plane 5, row 10 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84F,0xD84F,0xD84F,0x3CD7,0xD850,0xD850,0xD850,0xD850,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0x401A,0xD854,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,
+ 1, /* first low-surrogate */
+ 0xDCEC,0xDCE6,0xDD16, 0,0xDDBC,0xDDBE,0xDDC0,0xDDE0,0xDD00,
+ 0xDD02,0xDCFE,0xDD5E,0xDDB3,0xDDB7,0xDE3A,0xDE39,0xDE3E,0xDE38,0xDE3D,
+ 0xDE4F,0xDF6E,0xDF5F,0xDF81,0xDF82,0xDF71,0xDF7B,0xDF79,0xDF77,0xDF73,
+ 0xDF6F,0xDF97,0xDF7E,0xDCFC,0xDD11,0xDD32,0xDD31,0xDD10,0xDEEC,0xDEEB,
+ 0xDF2C,0xDF2D,0xDFDA,0xDC2E,0xDC2C,0xDC2A,0xDC33,0xDC4B,0xDD18,0xDD42,
+ 0xDD3B,0xDD3F,0xDD41,0xDD43,0xDD3C,0xDF4C,0xDF4A,0xDF49,0xDF56,0xDFCF,
+ 0xDC47,0xDC48,0xDC46,0xDD1B,0xDD11,0xDD14,0xDD1D,0xDD17,0xDD1E,0xDD0B,
+ 0xDD1C,0xDD12,0xDD16,0xDD0D,0xDD15,0xDD13,0xDD18, 0,0xDFAC,0xDC44,
+ 0xDC2C,0xDC45,0xDF66,0xDF6E,0xDF65,0xDF68,0xDF84,0xDD38,0xDD3B,0xDD3A,
+ 0xDD3F,0xDEDF,0xDEDD,0xDEDE,0xDEE2,
+ /* plane 5, row 11 */
+ 1 | (94 << 8), /* first, last */
+ 0x41D6,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,
+ 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x43DE,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0x43E5,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x4672,
+ 0xD85E,0x46AF,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD863,0xD863,0xD863,0xD863,0x49C4,0xD863,
+ 0xD863,0xD840,0xD840,0xD840,0xD840,0xD840,0x3463,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0x34EC,0xD841,0xD841,
+ 2, /* first low-surrogate */
+ 0xDE2C,0xDE2F,0xDF8F,0xDF90,0xDF8C,0xDF93,0xDE25,0xDE88,
+ 0xDEA7,0xDFF7,0xDCBB,0xDD38,0xDD39,0xDD37,0xDE14,0xDE6E,0xDE7B, 0,
+ 0xDE6C,0xDE7F,0xDE78,0xDE7A,0xDE6F, 0,0xDCFE,0xDF48,0xDF4B,0xDF41,
+ 0xDF49,0xDF3B,0xDE2D,0xDDE3,0xDE1A,0xDE0D,0xDE13,0xDE11,0xDE1C, 0,
+ 0xDCB5, 0,0xDC29,0xDCA1,0xDD24,0xDFBB,0xDEA1,0xDC83,0xDC8D,0xDC87,
+ 0xDC85,0xDC8A,0xDCA3,0xDC89,0xDC84,0xDCA2,0xDEB1,0xDEB0,0xDEAF,0xDEB6,
+ 0xDEC9,0xDECA,0xDEC8,0xDEB4,0xDC59,0xDCC9,0xDE41,0xDE4C, 0,0xDE45,
+ 0xDE5A,0xDCB9,0xDE94,0xDE6E,0xDEA2,0xDE67, 0,0xDEA3,0xDE76,0xDE6C,
+ 0xDE64,0xDEA5,0xDE30,0xDEA6,0xDE69,0xDEA4,0xDC90,0xDD5F,0xDD60,0xDDDA,
+ 0xDDD8,0xDDDD, 0,0xDF59,0xDF5B,
+ /* plane 5, row 12 */
+ 1 | (94 << 8), /* first, last */
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0x3598,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,
+ 0xD840,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,
+ 0xD846,0xD848,0x3758,0xD846,0xD846,
+ 1, /* first low-surrogate */
+ 0xDF5A,0xDF39,0xDF34,0xDF44,0xDF33,0xDF3C,0xDF58,0xDF6A,0xDC6F,
+ 0xDC72,0xDC70,0xDC71,0xDC6E,0xDCF0,0xDCEB,0xDD49,0xDD4C,0xDDF5,0xDE20,
+ 0xDE6A,0xDE72,0xDF4B,0xDF5D,0xDC50,0xDCF9,0xDCFA,0xDCFB,0xDD23,0xDCB7,
+ 0xDD22,0xDCB5,0xDCC4,0xDCB4,0xDCEF, 0,0xDCCD,0xDCF0,0xDCB8,0xDCCB,
+ 0xDCF1,0xDCBA,0xDD03,0xDCF8,0xDCB6,0xDCBC,0xDCB3,0xDD21,0xDCF7,0xDCC2,
+ 0xDCBE,0xDCC9,0xDCBD,0xDCCE,0xDCB9,0xDCC7,0xDCCA,0xDCCC,0xDD26,0xDDE4,
+ 0xDDE0,0xDDF0,0xDEEC,0xDF24,0xDF18,0xDF2F,0xDF25,0xDD28,0xDD22,0xDD6A,
+ 0xDD57,0xDD94,0xDD92,0xDD9C,0xDE22,0xDE30,0xDE1D,0xDE23,0xDF35,0xDF33,
+ 0xDF2F,0xDF4D,0xDF31,0xDF5B,0xDF5A,0xDF32,0xDF5C,0xDF59,0xDF5D,0xDD69,
+ 0xDD6D,0xDE32, 0,0xDE0A,0xDE20,
+ /* plane 5, row 13 */
+ 1 | (94 << 8), /* first, last */
+ 0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0x37D3,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x38E2,
+ 0xD87E,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0x3954,0xD849,0xD849,0x392F,0xD849,
+ 0xD849,0x39B6,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 1, /* first low-surrogate */
+ 0xDE1F,0xDE0D,0xDFE8,0xDFEC,0xDC77,0xDC70,0xDC71,0xDDF8,0xDDD6,
+ 0xDDD9,0xDDDE,0xDDD5,0xDDE1, 0,0xDDE2,0xDDDD,0xDDE0,0xDE0E,0xDE08,
+ 0xDDDC,0xDE0A,0xDE0C,0xDCB4,0xDCB1,0xDCB6,0xDCBC,0xDE1D,0xDE24,0xDE19,
+ 0xDE1B,0xDE22,0xDE1A,0xDE1C,0xDE21,0xDFE6,0xDFE4,0xDFE7,0xDFEA, 0,
+ 0xDC9B,0xDCF0,0xDCF5,0xDCEF,0xDE42,0xDE6E,0xDE3C,0xDE97,0xDE8C,0xDE81,
+ 0xDE71,0xDECE,0xDEBA,0xDE7A,0xDE7E, 0,0xDE72,0xDEBB, 0,0xDE73,
+ 0xDE82, 0,0xDDBA,0xDDB8,0xDE4B,0xDE48,0xDF2B,0xDEF4,0xDF2C,0xDF42,
+ 0xDF48,0xDF44,0xDF45,0xDF3C,0xDF37,0xDF33,0xDF41,0xDF32,0xDF87,0xDF27,
+ 0xDF23,0xDF2D,0xDF1F,0xDF2C,0xDF28,0xDC75,0xDC74,0xDCE7,0xDD32,0xDD31,
+ 0xDD99,0xDD96,0xDD98,0xDD9D,0xDD92,
+ /* plane 5, row 14 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84C,0xD84C,0xD84C,0xD859,0x3B35,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0x3B5D,0xD84D,0xD84E,0x3C29,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,
+ 0xD851,0x3E1F,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0x3E72,0xD851,0xD851,0xD851,0xD851,0xD852,0x3F0B,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD848,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDD94,0xDD95,0xDD97,0xDEB9, 0,0xDC11,0xDC3B,0xDC79,0xDC42,
+ 0xDC43, 0,0xDC78,0xDCAC, 0,0xDCB1,0xDCB4,0xDCB3,0xDCAF,0xDCAA,
+ 0xDCB2,0xDD68,0xDDF2,0xDDFE,0xDDF8,0xDDF9,0xDDFF,0xDDF5,0xDDF7,0xDDFD,
+ 0xDE00,0xDE88,0xDF6E,0xDF5D,0xDF63,0xDF60,0xDC61,0xDD37,0xDD71,0xDD23,
+ 0xDD22,0xDD1F,0xDD25,0xDDFD,0xDE11,0xDE23,0xDDF0,0xDDEF,0xDD0E,0xDD0C,
+ 0xDDBA, 0,0xDE52,0xDE55,0xDE53,0xDE54,0xDE51,0xDE58,0xDFB0,0xDF9F,
+ 0,0xDFA1,0xDF9A,0xDFBE,0xDFA0,0xDD37, 0,0xDEF1,0xDEF2,0xDF34,
+ 0xDF37,0xDF35,0xDF8C,0xDFDF,0xDC4C,0xDC4E,0xDC64,0xDC63,0xDC36,0xDD58,
+ 0xDD68,0xDD5B,0xDD5F,0xDD59,0xDD65,0xDD60,0xDD5E,0xDFD5,0xDFD6,0xDC4E,
+ 0xDC52,0xDD35,0xDD39,0xDD58,0xDD41,
+ /* plane 5, row 15 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD87E,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0x40A2,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,
+ 0xD84B,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x43EC,0xD859,0xD859,
+ 0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDD57,0xDD38,0xDD3D,0xDD32,0xDD44,0xDD44,0xDF63,0xDF62,0xDFB8,
+ 0xDFB0,0xDFB1,0xDC4D,0xDC63,0xDC70,0xDC4B,0xDC4F,0xDC4E,0xDC53,0xDC47,
+ 0,0xDC54,0xDC52,0xDC59,0xDC7E,0xDE2B,0xDE2E,0xDF7F,0xDF7E,0xDF81,
+ 0xDF83,0xDD47,0xDD54,0xDD4D,0xDD4C,0xDD4B,0xDD57,0xDE65,0xDE64,0xDE61,
+ 0xDE62,0xDEF0,0xDEF3,0xDEF9,0xDEF4,0xDEF5,0xDEEF,0xDEF8,0xDEFC,0xDEF7,
+ 0xDEFD,0xDF17,0xDE34,0xDE36,0xDE38,0xDFAF,0xDFAE,0xDFAC,0xDFA2,0xDE28,
+ 0xDEC2,0xDE9C,0xDEB3,0xDE90,0xDC06,0xDC04,0xDC0B,0xDC05,0xDD40,0xDD4F,
+ 0xDEAB,0xDE9D,0xDEB8,0xDEB2,0xDED2,0xDECF,0xDEA2, 0,0xDEA5,0xDEA9,
+ 0xDEA7,0xDED0,0xDD02,0xDDCF,0xDDD0,0xDE16,0xDE19,0xDF75,0xDF71,0xDF91,
+ 0xDF72,0xDF8E,0xDF6D,0xDF88,0xDF73,
+ /* plane 5, row 16 */
+ 1 | (94 << 8), /* first, last */
+ 0x44BB,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0x4621,0xD85D,0xD85D,0xD85D,0x461F,
+ 0xD87E,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0x8C38,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0x4791,0x4796,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,
+ 0xD860,0xD860,0xD860,0x8ECE,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD864,0xD865,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,
+ 2, /* first low-surrogate */
+ 0xDF81,0xDF76,0xDF7B,0xDF7F,0xDF90,0xDF78,0xDE4B,0xDE48,
+ 0xDE5B,0xDE51,0xDE3D,0xDE40,0xDE46,0xDE4D,0xDE3B,0xDE4A,0xDE41,0xDE3E,
+ 0xDE4E,0xDDAC,0xDDE6,0xDDE9,0xDE29, 0,0xDE33,0xDE2E,0xDE1E, 0,
+ 0xDDC5,0xDE22,0xDE27,0xDFE7,0xDC0B,0xDD66,0xDFAD,0xDFAE, 0,0xDC2B,
+ 0xDC2A,0xDD2C,0xDD2D, 0, 0,0xDE8F,0xDE93,0xDFC6,0xDFC5,0xDE15,
+ 0xDE13,0xDEB1,0xDEA9, 0,0xDCA8,0xDCAB,0xDCBE,0xDCAC,0xDCA9,0xDCA6,
+ 0xDCC1,0xDECC,0xDED1,0xDED3,0xDEE4,0xDECB,0xDEE1,0xDED2,0xDEE3,0xDECF,
+ 0xDED0,0xDEE5,0xDF0E,0xDCCC,0xDCCA,0xDCCB,0xDE5C,0xDE61,0xDE5D,0xDE59,
+ 0xDC77,0xDE84,0xDC41,0xDCFD,0xDD1A,0xDD63,0xDEB6,0xDEB2,0xDEE9,0xDEE7,
+ 0xDED6,0xDF30,0xDEEC,0xDEDD,0xDEE8,
+ /* plane 5, row 17 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD840,0xD840,0xD841,0xD841,0x34BC,0xD841,0xD841,0x34D8,
+ 0xD841,0xD841,0x34F4,0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD851,0xD845,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0x3785,0xD846,0x3783,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,
+ 1, /* first low-surrogate */
+ 0xDEB0,0xDEB5,0xDEE1,0xDC98,0xDC99, 0,0xDD93,0xDDE5, 0,
+ 0xDF60,0xDF5E, 0,0xDC7B,0xDCF1,0xDCF3,0xDE7F,0xDC38,0xDF57,0xDF58,
+ 0xDD39,0xDDA7,0xDD35,0xDD60,0xDD51,0xDD62,0xDD42,0xDD3C,0xDD43,0xDDAB,
+ 0xDDA9,0xDDB4,0xDD79,0xDD6A,0xDD3B,0xDDAA,0xDD33,0xDD37,0xDD27,0xDDA8,
+ 0xDD70,0xDD2F,0xDD36,0xDDB5,0xDD30,0xDD3A,0xDD38,0xDDB1,0xDDAC,0xDD2E,
+ 0xDD75,0xDDB0,0xDDF7,0xDE00,0xDDF1,0xDDF3,0xDF60,0xDF61,0xDF32,0xDF2D,
+ 0xDF4A,0xDF2A,0xDD67,0xDDA2,0xDDA3,0xDD9E,0xDDA4,0xDE44,0xDE32,0xDF9B,
+ 0xDF98,0xDF99,0xDF9A,0xDF66,0xDF62,0xDF6B,0xDD62,0xDF67,0xDE3B,0xDE23,
+ 0xDE29,0xDF7E,0xDFF3, 0,0xDFF5, 0,0xDC80,0xDC7E,0xDC7C,0xDC7F,
+ 0xDC7D,0xDC81,0xDE25,0xDE29,0xDE17,
+ /* plane 5, row 18 */
+ 1 | (94 << 8), /* first, last */
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x38BA,0xD848,
+ 0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0x3969,0xD849,0xD849,0x3945,
+ 0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0x3B6C,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD87E,
+ 1, /* first low-surrogate */
+ 0xDE63,0xDE67,0xDE65,0xDE2A,0xDE68,0xDE26,0xDE64,0xDE1B,0xDE62,
+ 0xDE69,0xDFFE,0xDC44,0xDC42,0xDCB7,0xDCD2,0xDCD4,0xDCD7,0xDCDC,0xDCD1,
+ 0xDCD5,0xDCCD,0xDCD8,0xDD9A,0xDE42,0xDE35,0xDE58,0xDE34,0xDE3C,0xDE3B,
+ 0xDE3E,0xDE3D,0xDE5A,0xDE41,0xDE38,0xDE45,0xDE33,0xDF26, 0,0xDFF7,
+ 0xDFEF,0xDFF0,0xDFEE,0xDC9D,0xDD06,0xDD11,0xDD08,0xDD02,0xDD0A,0xDD07,
+ 0xDE91,0xDE8E,0xDE85,0xDEE8,0xDF17,0xDED4, 0,0xDEC4,0xDED5, 0,
+ 0xDED8,0xDE80,0xDEDE,0xDF42,0xDDC7,0xDDBF,0xDF8D,0xDF89,0xDF90,0xDF9A,
+ 0xDFC8,0xDF92,0xDFA1,0xDF84,0xDF57,0xDF47,0xDF77,0xDF3A,0xDF50,0xDF42,
+ 0xDF43,0xDFA3,0xDC77,0xDDB2,0xDDE2,0xDDBD,0xDF74,0xDC82,0xDCB8, 0,
+ 0xDCBA,0xDCB9,0xDCBB,0xDC87,0xDCE4,
+ /* plane 5, row 19 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84D,0xD84D,0xD840,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D04,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0x3E3A,0xD851,0xD851,0xD851,0x3E79,
+ 0xD851,0xD851,0x7309,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0x3F5D,0xD87E,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3F8A,0xD853,0xD853,
+ 0xD853,0xD87E,0xD854,0xD854,0xD854,0xD854,0x4027,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDC83,0xDCB7,0xDC43,0xDCCE,0xDCBA,0xDD73,0xDE09,0xDE0A,0xDE0B,
+ 0xDE07,0xDE05,0xDE0E,0xDE97,0xDF77,0xDF7B,0xDF7A,0xDF74,0xDF79,0xDD86,
+ 0xDDF5,0xDDA5,0xDD9D,0xDDBE,0xDD96,0xDDE1,0xDDA4,0xDDA1,0xDDF6, 0,
+ 0xDD8D,0xDD8B,0xDD78,0xDD98,0xDE0A,0xDE5D,0xDE27,0xDE5F,0xDDC0,0xDDC1,
+ 0xDE6D,0xDE5E,0xDE8A,0xDE62,0xDE64, 0,0xDFC0,0xDFCA,0xDFD1, 0,
+ 0xDFC7,0xDFCE, 0,0xDFC5,0xDD36,0xDD57,0xDD77,0xDEF6,0xDEF7,0xDF55,
+ 0xDF44,0xDF3E,0xDF42,0xDF52,0xDFE1,0xDC08,0xDC68,0xDC67, 0,0xDD37,
+ 0xDD7E,0xDD93,0xDD79,0xDD81,0xDD7D,0xDD7B,0xDD94, 0,0xDF66,0xDFD9,
+ 0xDFE0,0xDD3E,0xDC5F,0xDD5F,0xDD5E,0xDD68, 0,0xDD88,0xDD6A,0xDD6C,
+ 0xDD66,0xDD67,0xDD89,0xDD60,0xDD85,
+ /* plane 5, row 20 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0x4146,0x4140,0xD855,0x413F,0xD855,0xD855,
+ 0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0x419D,0x41CB,0xD856,
+ 0x41E1,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x427F,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0x4346,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD859,0xD859,0xD859,0xD859,0x441A,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDF2A,0xDF68,0xDFB9,0xDFBA,0xDFBE,0xDC6F,0xDC80,0xDC74,0xDC81,
+ 0xDC7A,0xDC9C,0xDC73,0xDC82,0xDC7F,0xDCA7,0xDC79,0xDC78,0xDC7D,0xDCA8,
+ 0xDC7C,0xDE68,0xDE4E,0xDF9E, 0, 0,0xDF98, 0,0xDF85,0xDF9C,
+ 0xDFC5,0xDF9A,0xDD68,0xDD65,0xDD67,0xDD61,0xDD60, 0, 0,0xDE7B,
+ 0,0xDF19,0xDF0E,0xDF31,0xDF12,0xDF10,0xDF15,0xDF3F,0xDF1D,0xDF1E,
+ 0xDE4D,0xDE48,0xDE45,0xDE42,0xDE49,0xDE4A,0xDE47, 0,0xDE4C,0xDFCD,
+ 0xDFD5,0xDFC4,0xDFCA,0xDFC3, 0,0xDE29,0xDEB4,0xDF6D,0xDF66,0xDF6A,
+ 0xDC15,0xDCD3,0xDCEC,0xDD55, 0,0xDED6,0xDED8,0xDF51,0xDEE0,0xDF03,
+ 0xDF04,0xDEDA,0xDEEA,0xDF02,0xDED3,0xDEE4,0xDEE5,0xDD3B,0xDD66,0xDE2C,
+ 0xDE21,0xDE26,0xDED4,0xDED5,0xDED9,
+ /* plane 5, row 21 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD85A,0xD85A,0x44D3,0xD85B,0xD85A,0xD85A,0xD85B,0xD85A,
+ 0x44D0,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85C,0x458E,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0x46C3,0x46B6,0xD85E,0xD85E,0xD85E,0x8A2F,
+ 0xD85E,0x46C0,0x46B8,0xD848,0xD849,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0x47D9,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,
+ 1, /* first low-surrogate */
+ 0xDFD5,0xDFEB,0xDFC5, 0,0xDC27,0xDFF0,0xDFB9,0xDC18,0xDFEE,
+ 0,0xDFB7,0xDFBB,0xDFEF,0xDFB8,0xDFDF,0xDFDA,0xDFE3,0xDFC9,0xDFEC,
+ 0xDDA4, 0,0xDDA3,0xDE5E,0xDE61,0xDE62,0xDE63,0xDE8E,0xDE69,0xDE6B,
+ 0xDE85,0xDE8D,0xDE64,0xDE6D,0xDE4C,0xDE49,0xDE47,0xDE48,0xDE42,0xDE45,
+ 0xDE5B,0xDE5D,0xDE46,0xDC13,0xDC1A,0xDC0E,0xDC0F,0xDC1B,0xDC12,0xDCC3,
+ 0xDCBE,0xDCBD,0xDD79,0xDD7C, 0, 0,0xDD80,0xDD75,0xDD9B, 0,
+ 0xDD74, 0, 0,0xDC41,0xDC94,0xDC30,0xDCA7,0xDCA5,0xDCA4,0xDD3A,
+ 0xDE5B,0xDE9F,0xDEA8,0xDEB3,0xDEA1,0xDEA7,0xDEB2,0xDE9D,0xDEA3,0xDEA2,
+ 0xDFEF,0xDFD9, 0,0xDFD5,0xDFDD,0xDFDA,0xDFEE,0xDFD7,0xDE1A,0xDE19,
+ 0xDE18,0xDEB3,0xDEBF,0xDEBB,0xDEC0,
+ /* plane 5, row 22 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0x48EC,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD866,0xD866,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD840,0xD841,0xD841,
+ 0xD842,0xD842,0xD842,0xD842,0x52DC,0xD842,0xD842,0xD842,0x35CC,0xD843,
+ 0x35A2,0xD843,0xD843,0xD843,0xD843,0xD843,0x35B6,0xD843,0xD843,0x35C5,
+ 0x35C6,0xD843,0xD843,0xD843,0xD843,
+ 1, /* first low-surrogate */
+ 0xDEB9,0xDEB8,0xDED5,0xDC11,0xDC10,0xDCC3,0xDCC2,0xDCE9,0xDCCD,
+ 0xDCE5,0xDCCA,0xDCC7,0xDCE8,0xDEF1,0xDF0C,0xDEEF,0xDEEE,0xDEF3,0xDF0D,
+ 0xDEF6,0xDEF0, 0,0xDFF5,0xDFF4,0xDFF8,0xDFFE,0xDD11,0xDD22,0xDD42,
+ 0xDC5C,0xDC5A,0xDC5D,0xDCD1,0xDCD0,0xDE75,0xDE7B,0xDF89,0xDC4D,0xDE89,
+ 0xDE92,0xDE8C,0xDE88,0xDC67,0xDC68,0xDF21,0xDEF2,0xDF09,0xDEF8,0xDEF0,
+ 0xDEF3,0xDEF5,0xDEFB,0xDEF7,0xDEEF,0xDF0B,0xDCA2,0xDDF5,0xDDF3,0xDDF4,
+ 0xDDF2,0xDE98,0xDF68,0xDF80,0xDF85,0xDF8E,0xDF8F,0xDEF4,0xDF86,0xDFA4,
+ 0xDC86,0xDC89,0xDC87,0xDC85, 0,0xDC88,0xDEFF,0xDF66, 0,0xDDC3,
+ 0,0xDDC4,0xDE3B,0xDDE7,0xDDF8,0xDDFB, 0,0xDDBE,0xDDC6, 0,
+ 0,0xDDFC,0xDDC0,0xDE33,0xDDC9,
+ /* plane 5, row 23 */
+ 1 | (94 << 8), /* first, last */
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0x3683,0x5921,
+ 0xD845,0xD842,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0x36F8,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0x36F6,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,
+ 0x379B,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0x5E3F,0xD848,0xD848,
+ 1, /* first low-surrogate */
+ 0xDDFE,0xDDDA,0xDDCC,0xDDBB,0xDDFD,0xDDDF,0xDDCD,0xDDC2,0xDDC8,
+ 0xDE32,0xDE2D,0xDDD2,0xDE31,0xDDD3,0xDE2E,0xDDCF,0xDDFF,0xDE09,0xDDFC,
+ 0xDF72,0xDFAA,0xDFAB,0xDFA7,0xDF7B,0xDF76,0xDFA8,0xDFAC, 0, 0,
+ 0xDDAA,0xDE03,0xDDAC,0xDDAD,0xDDAB,0xDE50,0xDE58,0xDFDD, 0,0xDFAE,
+ 0xDFA2,0xDFAB,0xDFE3,0xDFAF,0xDFE0,0xDFE4, 0,0xDFA7,0xDFAA,0xDFE2,
+ 0xDFE1,0xDFDF,0xDFAD,0xDFE5,0xDFD1,0xDFAC,0xDFD5,0xDFA3,0xDF9F,0xDD79,
+ 0xDD76,0xDE43,0xDE3D,0xDE47,0xDE44,0xDE3F,0xDE5B,0xDF7F,0xDC9A,0xDC9C,
+ 0,0xDD1E,0xDE88,0xDE6A,0xDE76,0xDE72,0xDE70,0xDE7E,0xDE6C,0xDE6F,
+ 0xDE75,0xDE77,0xDE78,0xDE8A,0xDE79,0xDE94,0xDC01,0xDD05,0xDCF1,0xDCEE,
+ 0xDCEF,0xDD04, 0,0xDCFA,0xDD07,
+ /* plane 5, row 24 */
+ 1 | (94 << 8), /* first, last */
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x388D,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0x3956,0xD849,0xD849,0xD84A,0xD849,0xD849,
+ 0x395B,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,
+ 0xD84A,0xD84B,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84A,0xD84B,0xD84A,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0x3A96,0xD84B,0xD84B,
+ 1, /* first low-surrogate */
+ 0xDCF4,0xDCF5,0xDD9C,0xDE6D,0xDE69,0xDE66,0xDE62,0xDE46, 0,
+ 0xDE65,0xDE5D,0xDE5E,0xDE5F,0xDF8E,0xDC02,0xDC06,0xDC04,0xDC03,0xDC62,
+ 0xDD27,0xDD21,0xDD20,0xDD24,0xDD29,0xDD31,0xDD23,0xDD22,0xDEDC,0xDF4D,
+ 0xDEE5,0xDED3,0xDEEE,0xDEE6, 0,0xDF36,0xDF40,0xDC3F,0xDF3D,0xDF44,
+ 0,0xDF5F,0xDF29,0xDF49,0xDF8A,0xDF2A,0xDF87,0xDF4C,0xDF31,0xDF48,
+ 0xDF2B,0xDF3B,0xDF41,0xDEC9,0xDF34,0xDF53,0xDF35,0xDF47,0xDF38,0xDDD1,
+ 0xDDD2,0xDE51,0xDE55,0xDE52,0xDE53,0xDF8F,0xDFF4,0xDC47,0xDC0D,0xDC1C,
+ 0xDFFB,0xDC19,0xDFF7,0xDFF9,0xDFF5,0xDFE9,0xDC0A,0xDFEE,0xDC0B,0xDFFD,
+ 0xDC06,0xDC02,0xDC16,0xDC18,0xDFF0,0xDED4,0xDF66,0xDF6A,0xDF75,0xDF76,
+ 0xDF80,0xDF6D, 0,0xDF69,0xDF67,
+ /* plane 5, row 25 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3B7E,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3B81,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3C35,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C9B,
+ 0xD84E,0xD84F,0x3D00,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,
+ 1, /* first low-surrogate */
+ 0xDF68,0xDF5D,0xDCA4,0xDCFE,0xDCFD,0xDDEC,0xDDE9,0xDE21,0xDDEB,
+ 0xDDE7,0xDDF2,0xDE20,0xDF7A,0xDD2D,0xDD2E,0xDCCA,0xDD2F,0xDCC8, 0,
+ 0xDCCB,0xDCC3,0xDC84,0xDCD2,0xDCC6, 0,0xDCCF,0xDCD5,0xDCD4,0xDCDD,
+ 0xDD2B,0xDDA3,0xDCDB,0xDD2C,0xDD13, 0,0xDCD1,0xDCCC,0xDCD5,0xDCC9,
+ 0xDCCF,0xDCD2,0xDD7B,0xDD7C,0xDE23,0xDE1D,0xDE1C,0xDE1E,0xDE22,0xDE24,
+ 0xDE20,0xDE18,0xDE21,0xDF88,0xDF8A,0xDF94,0xDF8F,0xDF8E,0xDF90, 0,
+ 0xDFA7,0xDC64, 0,0xDE18,0xDE14,0xDE1D,0xDE05,0xDDFF,0xDE1B,0xDE1A,
+ 0xDE19,0xDE03,0xDE0E,0xDE47,0xDE04,0xDE5A,0xDE07,0xDE20,0xDE6A,0xDE66,
+ 0xDE7A,0xDE65,0xDEAF,0xDDCD,0xDDCF,0xDDD1,0xDDCE,0xDE5F,0xDE77,0xDE74,
+ 0xDE88,0xDE75,0xDE89,0xDE72,0xDFC6,
+ /* plane 5, row 26 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0xD851,0xD852,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,
+ 0xD852,0xD852,0xD852,0x3ED3,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3F9F,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0x40B1,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0x414B,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,
+ 1, /* first low-surrogate */
+ 0xDFEA,0xDFE0,0xDC07,0xDFE6,0xDFE5,0xDFDD,0xDFE3,0xDFDA,0xDDAE,
+ 0xDD7E,0xDD7D,0xDD7F, 0,0xDDD9,0xDEFA,0xDEFB,0xDF4D,0xDF54,0xDF51,
+ 0xDF50,0xDD98,0xDD95,0xDD9D,0xDDC1,0xDD9A,0xDD9B, 0,0xDD9C,0xDDD7,
+ 0xDDA4,0xDD96,0xDDA0,0xDF31,0xDFE9,0xDC6E,0xDD9A,0xDDA5,0xDD94,0xDDA6,
+ 0xDD99,0xDD8B,0xDD98,0xDD91,0xDD8C,0xDDA1,0xDDA3,0xDDC6,0xDF6F,0xDF6D,
+ 0xDF6A,0xDF6C,0xDF71,0xDF6E,0xDFDF,0xDCAC,0xDCAA, 0,0xDCB5,0xDCAD,
+ 0xDCB2,0xDCB3,0xDCAB,0xDCB6,0xDCC7,0xDCC6,0xDE6C,0xDE70,0xDFB3, 0,
+ 0xDD8C,0xDD81,0xDD83,0xDD7D,0xDD85,0xDD90,0xDDA2,0xDD8D,0xDD8F,0xDD7E,
+ 0xDD8A,0xDD7F,0xDD76,0xDD87,0xDD78,0xDE80,0xDE82,0xDE81,0xDE83,0xDF5A,
+ 0xDF34,0xDF2C,0xDF2A,0xDF40,0xDF2D,
+ /* plane 5, row 27 */
+ 1 | (94 << 8), /* first, last */
+ 0xD856,0xD856,0xD856,0x7B3F,0xD856,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0x42D6,0xD857,0xD857,0xD858,0xD857,0xD857,0xD857,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0x4389,0xD859,0xD859,0xD859,
+ 0xD859,0xD85A,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0x4400,0xD859,0xD859,0xD87E,0xD859,
+ 0xD85A,0xD85A,0xD85A,0xD85B,0x44DC,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x83D0,
+ 0x4590,0xD85C,0xD85C,0xD85C,0x45B1,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0x86E7,0xD85C,0xD85C,0xD85C,
+ 1, /* first low-surrogate */
+ 0xDF33,0xDF2B,0xDF4B, 0,0xDF3C,0xDE5A,0xDE77,0xDE60,0xDFFA,
+ 0xDFF9,0xDFFC, 0,0xDFF5,0xDFE8,0xDC09,0xDFE7,0xDFE6,0xDFE9,0xDE32,
+ 0xDE2C,0xDEBD,0xDEBC,0xDF7A,0xDF7E,0xDF79, 0,0xDC23,0xDC30,0xDC28,
+ 0xDCD4,0xDECE,0xDCF1,0xDCF0,0xDD60,0xDD65,0xDEA8,0xDF0A,0xDF1B,0xDF12,
+ 0xDF07,0xDF4F,0xDF0E,0xDF52,0xDF16, 0,0xDF53,0xDF54,0xDD84,0xDF56,
+ 0xDD6D,0xDD72,0xDE2F,0xDC2A, 0,0xDC63,0xDC84,0xDCAF,0xDC45,0xDC70,
+ 0xDC56,0xDC16,0xDC3D,0xDC38,0xDC6F,0xDC77,0xDC2E,0xDC31,0xDC4C,0xDC5F,
+ 0xDC75,0xDC39,0xDC3A,0xDC2C,0xDC2D,0xDC3F,0xDC2F,0xDC30,0xDC3E, 0,
+ 0,0xDDB2,0xDEB7,0xDE8F, 0,0xDE96,0xDE9E,0xDE97,0xDE95,0xDEA5,
+ 0xDE98, 0,0xDEA3,0xDE9A,0xDEAD,
+ /* plane 5, row 28 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x45AA,0xD85C,0xD85C,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0x467D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0x4769,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0x47A1,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0x47E7,0xD85F,0xD860,0x47EC,0xD85F,0xD85F,0xD860,0x47DF,0xD860,0xD860,
+ 0xD860,0x4833,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,
+ 1, /* first low-surrogate */
+ 0xDEA6,0xDEB6,0xDE99,0xDEAF,0xDEAC, 0,0xDE9F,0xDE94,0xDDEB,
+ 0xDE6F,0xDE6D,0xDE7E,0xDE6C,0xDE61,0xDE63,0xDE6B,0xDE5E,0xDE3E,0xDE64,
+ 0xDEAD, 0,0xDC20,0xDCD1,0xDCD5,0xDDAE,0xDDAF,0xDD9F,0xDDA8,0xDDCA,
+ 0xDFE1,0xDC39,0xDC38,0xDC3B,0xDCAD,0xDCB5,0xDCAF,0xDCB1,0xDCAE,0xDCB4,
+ 0xDCB0,0xDD4B,0xDD51,0xDD4C, 0,0xDD60,0xDEBE,0xDEB9,0xDEB7,0xDEB6,
+ 0,0xDEBD,0xDEB8,0xDEC1,0xDFF7,0xDFF3,0xDFF4,0xDFFB,0xDFFD,0xDFF5,
+ 0,0xDFFA,0xDC14, 0,0xDFF2,0xDFFC,0xDC00, 0,0xDE2B,0xDE29,
+ 0xDE2E, 0,0xDED7,0xDEDB,0xDED9,0xDED8,0xDEE6,0xDED6,0xDED1,0xDEE7,
+ 0xDED0,0xDEDC,0xDCED,0xDD1A,0xDD19,0xDD16,0xDCEC,0xDCEF,0xDCEE,0xDCF4,
+ 0xDD2F,0xDF30,0xDF19,0xDF18,0xDF11,
+ /* plane 5, row 29 */
+ 1 | (94 << 8), /* first, last */
+ 0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD87E,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,
+ 0x4BEE,0xD867,0x4C32,0xD84C,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0x34FC,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0x352A,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,
+ 1, /* first low-surrogate */
+ 0xDF16,0xDF12,0xDF10,0xDF14,0xDC0C,0xDC0D,0xDD10,0xDD29,0xDD28,
+ 0xDC65,0xDC66,0xDCDE,0xDCDF,0xDCE0,0xDCD9,0xDCDB,0xDCD8,0xDCE3,0xDCD7,
+ 0xDEA6,0xDEA7,0xDEBF,0xDEA8,0xDE9F,0xDEA1,0xDEA2,0xDEAD,0xDEA3,0xDEA0,
+ 0xDC83,0xDC85,0xDC82,0xDC84,0xDDEE,0xDE5D,0xDF92,0xDC55,0xDC53,0xDDFC,
+ 0xDC51,0xDC52,0xDC50,0xDD9D,0xDE87,0xDE97,0xDE9B,0xDE9D,0xDC69,0xDE11,
+ 0,0xDC7A, 0,0xDE44,0xDCC6,0xDF40,0xDF2E,0xDF68,0xDF2D,0xDF34,
+ 0xDF32,0xDF69,0xDF31,0xDF6A,0xDF3E,0xDF6F,0xDF75,0xDCF6,0xDD20,0xDD28,
+ 0xDD67,0xDDFB,0xDDFE,0xDDFC,0xDDFD,0xDDFF,0xDDFA,0xDFAC,0xDFAF,0xDFB1,
+ 0,0xDFBF,0xDFBE,0xDFA7,0xDFAA,0xDC94,0xDC93,0xDC99, 0,0xDCFA,
+ 0xDD56,0xDE22,0xDE91,0xDE92,0xDF08,
+ /* plane 5, row 30 */
+ 1 | (94 << 8), /* first, last */
+ 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0x35D3,0xD843,0xD843,0xD843,0x35D7,
+ 0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD846,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0x37F3,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,
+ 1, /* first low-surrogate */
+ 0xDF06,0xDDD6,0xDE37,0xDE4B,0xDECE,0xDED0,0xDE39,0xDE64,0xDECF,
+ 0xDE46,0xDE66,0xDE56,0xDE43,0xDE4A,0xDE58,0xDE65,0xDE5A,0xDE5B,0xDE55,
+ 0xDE50,0xDE4C,0xDECD,0xDE51,0xDE47, 0,0xDE53,0xDE62,0xDECC, 0,
+ 0xDE7F,0xDE4D,0xDE0A,0xDE0C,0xDE0F,0xDFBB,0xDFB9,0xDFEB,0xDFAE,0xDFC1,
+ 0xDFEA,0xDFBE,0xDFBF,0xDFBA,0xDFB7,0xDFB3,0xDFE9,0xDD6E,0xDDAF,0xDDB3,
+ 0xDDB2,0xDE68,0xDE69,0xDE6A,0xDFDE,0xDFEB,0xDC11,0xDFED,0xDFE9,0xDFF7,
+ 0xDFF4,0xDFEA,0xDC12,0xDFE8,0xDC13,0xDD8E,0xDD86,0xDE63,0xDE65,0xDF99,
+ 0xDCC2,0xDCAE,0xDCB0,0xDCAD,0xDEB4,0xDED1,0xDEAD, 0,0xDEBD,0xDEB7,
+ 0xDEAB,0xDEAF,0xDEC1,0xDEB5,0xDD0F,0xDD0E,0xDD1C,0xDD13,0xDD0A,0xDD1E,
+ 0xDD14,0xDD1A,0xDDCB,0xDE87,0xDE93,
+ /* plane 5, row 31 */
+ 1 | (94 << 8), /* first, last */
+ 0x3891,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0x38C0,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0x6117,0xD849,0x3963,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0x3970,0xD849,0xD849,0xD849,0xD840,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3B02,0xD84C,0xD84C,0xD84C,
+ 0xD87E,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 2, /* first low-surrogate */
+ 0xDE84,0xDE85,0xDE92,0xDE80,0xDF2B,0xDF63,0xDC0A, 0,
+ 0xDC66,0xDD34,0xDD33,0xDD4D,0xDF89,0xDF57, 0,0xDF4A, 0,0xDF39,
+ 0xDF3F,0xDF90,0xDF8F,0xDFB2,0xDF9F,0xDF95,0xDFA1,0xDF9C,0xDF8E,0xDFA0,
+ 0xDFAE,0xDF96,0xDFCA,0xDFAC, 0,0xDFA6,0xDF97,0xDF93,0xDFB6,0xDDD6,
+ 0xDDE0,0xDDD8,0xDE56,0xDC6E,0xDC7E,0xDC74,0xDC77,0xDC80,0xDC7A,0xDC6B,
+ 0xDC5F,0xDC76,0xDCB0,0xDC63,0xDF92,0xDF82,0xDF9D,0xDF94,0xDF83,0xDF8B,
+ 0xDF84,0xDC57,0xDC84,0xDCB5,0xDD09,0xDDE6, 0,0xDE25,0xDE51,0xDF3E,
+ 0xDCDA,0xDF85,0xDD3F,0xDD42,0xDD38,0xDD3A,0xDD4E,0xDD45,0xDD39,0xDD37,
+ 0xDD44,0xDCE7,0xDDA4,0xDD3D,0xDD41,0xDCDF,0xDCDE,0xDCCA,0xDCE9,0xDCE2,
+ 0xDCE0,0xDD89,0xDD87,0xDE32,0xDE33,
+ /* plane 5, row 32 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0x3D35,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD851,0xD851,0xD851,0xD865,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3EE0,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0x3F9A,0xD853,0xD853,0xD853,0x3FA3,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x4005,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD84E,0xD854,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDEAC,0xDEF9,0xDF0D,0xDFB9,0xDE5E,0xDE6A, 0,0xDE81,0xDE69,
+ 0xDEAC,0xDE80,0xDE75,0xDE71,0xDE76,0xDE6F,0xDEB6,0xDF03,0xDEBF,0xDF01,
+ 0xDEB2,0xDEC4,0xDDDB,0xDDDC,0xDDD8,0xDE72,0xDEB5,0xDEA8,0xDE8F,0xDE9E,
+ 0xDE8E,0xDFDE,0xDFE2,0xDC20,0xDC1D,0xDC1A,0xDC19,0xDC2B,0xDC18,0xDC10,
+ 0xDC0E,0xDC24,0xDC1F,0xDC13,0xDC35,0xDD83, 0,0xDDD7,0xDF02,0xDF03,
+ 0xDF5C,0xDF5F,0xDFC7,0xDC9A,0xDC97,0xDCA3,0xDDF7,0xDDC6,0xDDCC,0xDDD6,
+ 0xDDCD,0xDDF9,0xDDD9,0xDDD8, 0,0xDDD1,0xDDCE,0xDDD5, 0,0xDDD4,
+ 0xDDF8,0xDF7A,0xDF79,0xDF7F,0xDFF3,0xDFF5,0xDFF6,0xDFF4,0xDFF7, 0,
+ 0xDC79,0xDD9C,0xDDDF,0xDDF5,0xDDFF,0xDDD1,0xDDDA,0xDDCF,0xDDCD,0xDDDE,
+ 0xDDD8,0xDEAD,0xDDE0,0xDDFE,0xDD9E,
+ /* plane 5, row 33 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0x415E,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0x41A6,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0x435D,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0x43B8,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,
+ 1, /* first low-surrogate */
+ 0xDF75,0xDF73,0xDF72,0xDFD8,0xDCD0,0xDCD6,0xDCD7,0xDCCA,0xDCCD,
+ 0xDE8A,0xDE89,0xDE8B,0xDFD3,0xDFDA,0xDFCE,0xDFD2, 0,0xDFD4,0xDFD7,
+ 0xDFD5,0xDFFB,0xDFCD,0xDFFA,0xDFD6, 0,0xDD9B,0xDD9E,0xDD9D,0xDDA4,
+ 0xDD9F,0xDDA5,0xDDA8,0xDE8F,0xDE8C,0xDE95,0xDF60,0xDF55,0xDF5C,0xDF6F,
+ 0xDF51,0xDF61,0xDFA7,0xDF5E,0xDF62,0xDF54,0xDF6E,0xDF52,0xDF58,0xDF6D,
+ 0xDF5F,0xDF6C,0xDF50,0xDF5D,0xDF8E,0xDE72,0xDE78,0xDE75,0xDE76,0xDE7C,
+ 0xDE7E,0xDE7D,0xDC15,0xDC14,0xDC1D,0xDC1C,0xDC23,0xDC57,0xDEC8, 0,
+ 0xDEC9,0xDEC5,0xDF87,0xDF8A,0xDF94,0xDC39,0xDC40,0xDC3E,0xDC38,0xDCD6,
+ 0,0xDD77,0xDD78,0xDD7D,0xDEDD,0xDF5E,0xDF77,0xDFD4,0xDF66,0xDF5F,
+ 0xDF73,0xDF72,0xDF97,0xDF5A,0xDF96,
+ /* plane 5, row 34 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x4434,0xD859,
+ 0xD85A,0xD85A,0xD85A,0x446F,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,
+ 0xD85C,0x4594,0x4593,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0x8714,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x88D1,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 1, /* first low-surrogate */
+ 0xDF5D,0xDF65,0xDF70,0xDF75,0xDF74,0xDF5C,0xDF60, 0,0xDF6D,
+ 0xDD41,0xDE3C,0xDE3E, 0,0xDE49,0xDFE4,0xDD0C,0xDD15,0xDD0E,0xDCD4,
+ 0xDCC7,0xDD14,0xDCDB,0xDD5F,0xDCED,0xDD09,0xDCCF,0xDCFF,0xDD1A,0xDCF5,
+ 0xDCEE,0xDCE5,0xDD0D,0xDCDF,0xDCEC,0xDCD7,0xDD2C,0xDCCD,0xDCE3,0xDD00,
+ 0xDCEB,0xDCFD,0xDD0F,0xDD2D,0xDD50,0xDCFE,0xDCC4,0xDCE1,0xDCF9,0xDDBB,
+ 0xDDBC, 0, 0,0xDDBA,0xDED0,0xDED6,0xDECE,0xDEE1,0xDED5,0xDECF,
+ 0xDED3, 0,0xDED4,0xDDB5,0xDE90,0xDEA1,0xDE81,0xDE85,0xDE6E,0xDE88,
+ 0xDE82,0xDE86,0xDE8F,0xDE89,0xDE80,0xDE84, 0,0xDC29,0xDC2B,0xDC2A,
+ 0xDC30,0xDCE2,0xDCE3,0xDCE1,0xDDD5,0xDDC4,0xDDC9,0xDDE0,0xDDDF,0xDDCB,
+ 0xDDDD,0xDDE8,0xDDD4,0xDE1C,0xDFB5,
+ /* plane 5, row 35 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0x8CCB,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0x4792,0xD85F,0xD85F,0xD85F,0x47AA,0xD85F,0xD85F,0xD85F,0x47A7,0xD85F,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0x47EF,0xD860,0xD860,0xD860,0xD860,0x8EED,0xD860,
+ 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0x4922,0xD862,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDFB6,0xDFE5,0xDC45,0xDC49,0xDC40,0xDC46,0xDC44,0xDC4A,0xDCC9,
+ 0xDCC4,0xDCC2,0xDD68, 0,0xDD82,0xDD6B,0xDD67,0xDD6C,0xDD6D,0xDD71,
+ 0,0xDED7,0xDED2,0xDED9, 0,0xDEBC,0xDEDD,0xDED6, 0,0xDED8,
+ 0xDC20,0xDC16,0xDC18,0xDC15,0xDC19,0xDC27,0xDC50,0xDC1D,0xDC2C,0xDC1C,
+ 0xDC29,0xDC2B,0xDC24, 0,0xDC28,0xDE39,0xDEF2,0xDEF0, 0,0xDEED,
+ 0xDEEF,0xDEEA,0xDF01,0xDCBC,0xDD5C,0xDD5B,0xDD5A,0xDD26,0xDF43,0xDF33,
+ 0xDF3A,0xDF37,0xDF36,0xDF3C,0xDF34,0xDF4A,0xDF3B,0xDF35,0xDF3D,0xDF40,
+ 0xDF3E,0xDF17,0xDC26,0xDC24,0xDC10,0xDC36,0xDC25, 0,0xDD66,0xDC7F,
+ 0xDC7A,0xDCFB,0xDCFD,0xDCFC,0xDCFA,0xDED6,0xDED2,0xDEC8,0xDEC2,0xDEC7,
+ 0xDECD,0xDEC1,0xDEC6,0xDECC,0xDFA1,
+ /* plane 5, row 36 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0x4AB5,0xD87E,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD866,0x4B75,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD868,0xD869,0xD840,0xD840,0x3482,0xD840,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x52EC,0xD842,0xD842,
+ 0xD842,0x52E8,0xD842,0xD842,0xD842,0xD842,0x3535,0xD842,0xD842,0xD842,
+ 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD840,
+ 1, /* first low-surrogate */
+ 0xDC95,0xDC94,0xDC97,0xDC96,0xDC93,0xDCA1,0xDE09,0xDE08,0xDE67,
+ 0xDE65,0xDE62,0xDE61,0xDF97,0xDC01,0xDC19,0xDC18,0xDC5C,0xDC67,0xDC6C,
+ 0,0xDDFD,0xDC66,0xDC61,0xDC6E,0xDC5D,0xDC5A,0xDDA2,0xDDA9,0xDDA5,
+ 0xDDA6,0xDDB2,0xDDA3,0xDEAC,0xDEAA,0xDEAF,0xDEAB,0xDEB1,0xDEC6,0xDEAD,
+ 0xDEB9,0xDC70, 0,0xDC0C,0xDC81,0xDC83,0xDC7E,0xDD51,0xDF99,0xDF94,
+ 0xDF95,0xDEFE,0xDC18,0xDD05,0xDF72, 0,0xDF99,0xDCAD,0xDE06,0xDFC2,
+ 0xDFCB,0xDFD5,0xDFD2,0xDFCC,0xDFD7,0xDFC5,0xDFCA, 0,0xDCA2,0xDCA3,
+ 0xDCA1, 0,0xDCA6,0xDCA4,0xDCFF,0xDD00, 0,0xDE06,0xDE25,0xDE9F,
+ 0xDF7F,0xDEEA,0xDEEB,0xDEDE,0xDF18,0xDEE0,0xDEE8,0xDEDF,0xDEF1,0xDEEC,
+ 0xDF1A,0xDEE6,0xDEE1,0xDF5D,0xDC77,
+ /* plane 5, row 37 */
+ 1 | (94 << 8), /* first, last */
+ 0xD843,0x35F0,0xD843,0xD844,0xD845,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD845,0xD845,0xD855,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,
+ 0xD848,0xD85A,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0x38F0,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD849,0xD849,0xD849,0xD849,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 1, /* first low-surrogate */
+ 0xDF1E, 0,0xDF80,0xDE17,0xDC1D,0xDFF7,0xDFEF,0xDFEE,0xDFED,
+ 0xDFF5,0xDC1E,0xDDBD,0xDFFF,0xDDBE,0xDE6D,0xDE76,0xDC4C,0xDC19,0xDC48,
+ 0xDC1E,0xDC4A,0xDC49,0xDC26,0xDD95,0xDE85,0xDE7E,0xDE97,0xDE7D,0xDF42,
+ 0xDF9E,0xDC0C,0xDC0B,0xDC0E,0xDCCF,0xDED8,0xDEE0,0xDEE8,0xDEE9,0xDEE2,
+ 0xDEE1,0xDEDA,0xDEE3,0xDED9,0xDEF0,0xDEE7,0xDEE4,0xDD23,0xDD31,0xDD33,
+ 0xDD0C,0xDDE0,0xDD26,0xDD24,0xDD32,0xDD27,0xDD21,0xDD30,0xDDA2,0xDDCC,
+ 0xDE96,0xDC8F,0xDE98,0xDE9C,0xDE9B,0xDF6B,0xDC12,0xDC14,0xDD5A,0xDD54,
+ 0xDD51,0xDD5E,0xDD58, 0,0xDD59,0xDF9A,0xDFF2,0xDFAD,0xDC20,0xDFF1,
+ 0xDFF0,0xDFF3,0xDFF4,0xDFE9,0xDFFE,0xDC2E,0xDFE8,0xDFE7,0xDFFF,0xDFF5,
+ 0xDDE5,0xDDE7,0xDDE6,0xDDE9,0xDE58,
+ /* plane 5, row 38 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84B,0xD84B,0x3A3E,0xD84B,0x3A39,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD87E,0xD84B,0x3AA2,0xD84B,0x3AA1,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,0xD84C,0x3B3B,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0x3BB7,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0x3C57,0x3C70,0xD84E,0xD84E,0xD84E,0xD866,0xD84E,
+ 0xD84E,0xD84E,0x3CA7,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D54,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,
+ 1, /* first low-surrogate */
+ 0xDC6C,0xDCD9, 0,0xDCCB, 0,0xDCBE,0xDCB5,0xDCD1,0xDCC2,
+ 0xDCB6,0xDCD3,0xDCC2,0xDEDA, 0,0xDFAE, 0,0xDFAC,0xDFA9,0xDFBA,
+ 0xDFA7,0xDFB3,0xDFBD,0xDFB1,0xDD0E,0xDD11,0xDD0F,0xDE52,0xDE6A,0xDE54,
+ 0xDE55,0xDE53,0xDE57,0xDCD0,0xDE5B,0xDE58,0xDE59, 0,0xDDB8,0xDDB5,
+ 0xDDBF,0xDDC1,0xDDBB, 0,0xDDC3,0xDDAD,0xDDA8,0xDDAE,0xDDAA,0xDDD0,
+ 0xDDB1,0xDDBC,0xDDB7,0xDDB0,0xDDFA,0xDDFB,0xDDB9,0xDD07,0xDCFC,0xDCFF,
+ 0xDCF2,0xDCF8,0xDCF4, 0, 0,0xDEAE,0xDF0F,0xDF10,0xDEC1,0xDFC7,
+ 0xDFC6,0xDFCE, 0,0xDFDC,0xDED5,0xDED3,0xDF20,0xDEE2,0xDEF1,0xDEDB,
+ 0xDEEA,0xDEEB,0xDEE1,0xDEFF,0xDED6,0xDEE0,0xDED7,0xDEE5, 0,0xDF1B,
+ 0xDF10,0xDF0F,0xDF0E,0xDF39,0xDF0A,
+ /* plane 5, row 39 */
+ 1 | (94 << 8), /* first, last */
+ 0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0x3F31,0x7527,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD866,0xD853,0xD853,0xD853,0xD853,0x3FBF,0xD853,0x3FE4,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0x404A,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0x40CF,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0x798C,
+ 1, /* first low-surrogate */
+ 0xDF14,0xDF0C,0xDD23,0xDD5A,0xDDE2,0xDE93,0xDEB0,0xDEAB,0xDEBD,
+ 0xDEB1,0xDE8D,0xDEAD,0xDEAA,0xDEAC,0xDEBC,0xDEC9,0xDC47,0xDC62,0xDC40,
+ 0xDC44,0xDC3F,0xDC43,0xDC3D,0xDC60,0xDC5F,0xDC3A,0xDC42,0xDC5E,0xDC5D,
+ 0xDDBC,0xDDE0,0xDDEE,0xDDEB,0xDE0D,0xDF09,0xDF0C,0xDF69,0xDF74,0xDF67,
+ 0, 0,0xDCAD,0xDDFF,0xDE16,0xDE08,0xDE09,0xDE00,0xDDFC,0xDE13,
+ 0xDE14,0xDE0A,0xDC3E,0xDE29,0xDE17,0xDE3B,0xDDFB, 0,0xDE0E, 0,
+ 0xDC08,0xDE1B,0xDE1A,0xDE19,0xDE02, 0,0xDE17,0xDE07,0xDE13,0xDE09,
+ 0xDE0A,0xDE12,0xDEAA,0xDE38,0xDF7B,0xDF7C,0xDF7A,0xDFEA,0xDFEB,0xDFEF,
+ 0xDFF0,0xDD09,0xDD02,0xDD01,0xDD2B,0xDD07, 0,0xDD28,0xDCFB,0xDD2A,
+ 0xDCFE,0xDD04,0xDD29,0xDD0A,
+ /* plane 5, row 40 */
+ 1 | (94 << 8), /* first, last */
+ 0xD855,0x7991,0xD855,0x4114,0xD84B,0xD847,0xD856,0xD855,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0x420D,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x4201,0xD856,
+ 0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0x42F1,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,
+ 1, /* first low-surrogate */
+ 0xDEC2, 0,0xDEA6, 0,0xDFC6,0xDC07,0xDC0A,0xDFFD,0xDC06,
+ 0xDC0D,0xDC09,0xDC0B,0xDC00,0xDC05,0xDC3D,0xDDD5,0xDDBF,0xDDBA,0xDDC7,
+ 0xDE98,0xDE9A, 0,0xDFA4,0xDF9C,0xDF9D,0xDFA2,0xDF96,0xDF95,0xDFA5,
+ 0xDFAA,0xDFAD,0xDF9A,0xDFA3,0xDF97,0xDF90,0xDFAF,0xDF8D, 0,0xDFA8,
+ 0xDFEE,0xDEA3,0xDE99,0xDEA1,0xDE9C,0xDEA4,0xDECB,0xDC56,0xDC48,0xDC59,
+ 0xDC4A,0xDC5C, 0,0xDC4F,0xDC4D,0xDC5D,0xDE3A,0xDEE3,0xDEE1,0xDEDE,
+ 0xDF97,0xDF9A,0xDC48,0xDC4A,0xDC4C,0xDC4E,0xDC4F,0xDC4B,0xDC4D,0xDC47,
+ 0xDC51,0xDCDA,0xDCF9,0xDCFC,0xDCFB,0xDCFD,0xDCF8,0xDCFA,0xDD8A,0xDD8E,
+ 0xDD88,0xDD89,0xDD8D,0xDD90,0xDD7E,0xDF1C,0xDFAB,0xDFA4,0xDFA8,0xDFAD,
+ 0xDF9F,0xDF9A,0xDFB0,0xDFA5,0xDFD5,
+ /* plane 5, row 41 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0x4476,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x450A,0x4503,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x8660,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x4635,0x4636,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,
+ 1, /* first low-surrogate */
+ 0xDFA2,0xDFB2,0xDF9D,0xDFA1,0xDD15,0xDD42,0xDD73,0xDD84,0xDDDD,
+ 0xDE5C,0xDE4C, 0,0xDE4B,0xDC67,0xDDA8,0xDD7F,0xDD8D,0xDD8B,0xDDF7,
+ 0xDDA9,0xDDF4,0xDD9A,0xDD8C,0xDD95,0xDD7E,0xDD77, 0, 0,0xDD71,
+ 0xDDFD,0xDD88,0xDD99,0xDD6D,0xDDD4,0xDD91,0xDD7D,0xDD63,0xDD75,0xDDF9,
+ 0xDD8E,0xDD74,0xDDD9,0xDD66,0xDDFA,0xDDF5, 0,0xDDC1,0xDDC9,0xDF03,
+ 0xDF2C,0xDF34,0xDF17,0xDF09,0xDF04,0xDF06,0xDF1A,0xDF0E,0xDF27,0xDF05,
+ 0xDF07,0xDF19,0xDF14,0xDF0C,0xDF1D,0xDF22,0xDF23,0xDDBB,0xDDBC,0xDDBA,
+ 0xDEA9,0xDEB5,0xDEAC,0xDEAA,0xDEAF,0xDEB7, 0, 0,0xDC3D,0xDC45,
+ 0xDC48,0xDC3C,0xDC3E,0xDCEC,0xDCED,0xDCE9,0xDE0A,0xDE0B,0xDDF8,0xDE04,
+ 0xDDF6,0xDDF9,0xDC53,0xDC52,0xDC60,
+ /* plane 5, row 42 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x4773,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47B1,0xD85F,
+ 0x47AF,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0x47F4,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0x48DC,0xD861,0xD861,0xD861,0xD861,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0x4999,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD864,
+ 1, /* first low-surrogate */
+ 0xDC63,0xDCCE,0xDCCD,0xDCD0,0xDCCC,0xDD87,0xDD8D,0xDD9D, 0,
+ 0xDE63,0xDEF4,0xDEF1,0xDEFF,0xDEF5,0xDEFC,0xDEF2,0xDEF6, 0,0xDEFA,
+ 0,0xDC2E,0xDC45,0xDC43,0xDC51,0xDC4C,0xDC73,0xDC47,0xDC4B,0xDC4F,
+ 0,0xDC44,0xDC4D,0xDC4E,0xDC4A,0xDC41,0xDC52,0xDC9F,0xDC54,0xDC59,
+ 0xDCA2,0xDE4B,0xDE48,0xDF0D,0xDF1F,0xDF08,0xDF0E,0xDF1D,0xDF04,0xDC18,
+ 0xDC1B,0xDD66,0xDD62,0xDD83,0xDD67,0xDF62,0xDF4F,0xDF4E,0xDF67,0xDF53,
+ 0xDF4D,0xDF4C,0xDF68,0xDF51, 0,0xDF58,0xDF5B,0xDF50,0xDF6A,0xDC39,
+ 0xDC38,0xDD82,0xDD84,0xDD86,0xDC80,0xDC86,0xDD25,0xDD11, 0,0xDD0E,
+ 0xDD15,0xDD0F,0xDD18,0xDD0D,0xDD13,0xDD16,0xDD19,0xDF08,0xDEF7,0xDEFB,
+ 0xDEFC,0xDFB4,0xDFBE,0xDFC1,0xDCA6,
+ /* plane 5, row 43 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0x4AB6,0x4ABD,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0x9904,0xD865,0x999B,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BF4,0xD866,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x4C35,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0x4CAA,0xD868,0x4D1F,0xD868,0xD868,
+ 0xD868,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD840,0xD840,0xD840,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,
+ 1, /* first low-surrogate */
+ 0xDCA5,0xDCA2,0xDCA4,0xDE12,0xDE0E,0xDE7A,0xDE78,0xDE7D,0xDE7E,
+ 0xDE81,0xDE83,0xDE80,0xDE82,0xDF9B,0xDF99,0xDF9C,0xDF9A,0xDFA1,0xDC1A,
+ 0xDC1C,0xDC8A,0xDC79,0xDC73,0xDC75,0xDC7C,0xDC78,0xDC60,0xDC83,0xDC70,
+ 0, 0,0xDC87,0xDC84,0xDC7B,0xDC7E,0xDC74,0xDDB9,0xDDB8,0xDDB7,
+ 0xDDB5,0xDECC,0xDECE,0xDED1, 0,0xDECB, 0,0xDC7E,0xDC7A,0xDC77,
+ 0xDC8C,0xDCE1,0xDE20,0xDE1E,0xDEC2,0xDF0F,0xDF00, 0,0xDF10,0xDC0D,
+ 0xDC0E,0xDC8E,0xDC8D,0xDC8A,0xDC8B,0xDC8C,0xDC8F,0xDD57, 0,0xDD55,
+ 0xDD5B,0xDFAC,0xDFA7,0xDFA0,0xDF9E, 0,0xDE8D, 0,0xDF93,0xDF94,
+ 0xDF92,0xDD81,0xDFD6,0xDFC3,0xDFE4,0xDFE2,0xDC09,0xDFBF,0xDFC8,0xDFC7,
+ 0xDCB5,0xDCB2,0xDE0C,0xDE0B,0xDE0A,
+ /* plane 5, row 44 */
+ 1 | (94 << 8), /* first, last */
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0x3550,0xD842,0xD842,
+ 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD840,0xD843,0xD843,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0x377B,0xD847,0xD847,
+ 0xD847,0xD847,0x3809,0xD847,0xD847,0xD847,0x3807,0xD847,0xD847,0xD847,
+ 0xD847,0xD845,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,
+ 1, /* first low-surrogate */
+ 0xDE05,0xDFD3,0xDFE6,0xDFE9,0xDFF0,0xDFEA,0xDFE7,0xDCB1,0xDCB3,
+ 0xDCB4,0xDCB0,0xDD5C,0xDD5D,0xDD5E,0xDDC0,0xDEAF, 0,0xDF86,0xDF83,
+ 0xDF84,0xDF5C,0xDF70,0xDF8C,0xDF7B,0xDF66,0xDF79,0xDF63,0xDFC5,0xDF6B,
+ 0xDF6D,0xDF72,0xDF69,0xDF75,0xDF89,0xDFC6,0xDFA5,0xDFE7,0xDF6A,0xDF97,
+ 0xDC5A,0xDC5C,0xDC59,0xDC24,0xDC25,0xDC30,0xDC58,0xDC31,0xDD76,0xDDC1,
+ 0xDE85,0xDE7D,0xDC65,0xDC87,0xDC52,0xDC54,0xDC8A,0xDC50,0xDC86,0xDC4F,
+ 0xDC68,0xDD9D,0xDEA0,0xDEBA,0xDEBD,0xDEB8,0xDFA6, 0,0xDCDE,0xDCD8,
+ 0xDCD1,0xDF13, 0,0xDF0E,0xDF1B,0xDF3A, 0,0xDF1C,0xDF12,0xDF16,
+ 0xDF1A,0xDC48,0xDD4B,0xDD37,0xDD36,0xDD38,0xDD3A,0xDD49,0xDD3C,0xDD4A,
+ 0xDEB1,0xDEC2,0xDEB5,0xDEC4,0xDEB6,
+ /* plane 5, row 45 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD849,
+ 0x6184,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0x39BB,0xD84B,0xD84B,0x3A4B,0xD84B,0xD84B,0xD84B,
+ 0x3A4D,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84C,0xD84C,0xD84C,0x3AC2,0xD84C,0xD84C,0xD84C,0xD84C,0x3B1A,0xD84C,
+ 0xD84C,0x3B12,0xD84C,0xD84C,0xD84C,0xD84C,0x3B3C,0xD84C,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3BC3,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3BC0,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 1, /* first low-surrogate */
+ 0xDC1E,0xDC1F,0xDCAF,0xDD6B,0xDD6F,0xDF92,0xDFE4,0xDC2C,0xDFEF,
+ 0,0xDC4F,0xDC52,0xDC50,0xDC3A,0xDC37,0xDC47,0xDC64,0xDC40,0xDC3C,
+ 0xDC45,0xDC41,0xDDF3, 0,0xDCC1,0xDCB4, 0,0xDD2A,0xDD22,0xDD29,
+ 0,0xDD3E,0xDD3C,0xDD30,0xDFC7,0xDFD5,0xDFD6,0xDFD3,0xDFCE,0xDFC8,
+ 0xDC5C,0xDC5F,0xDC62, 0,0xDCBD,0xDCBF,0xDE5C,0xDEB6, 0,0xDE9D,
+ 0xDE7F, 0,0xDE94,0xDE81,0xDF47,0xDF46, 0,0xDF94,0xDE75,0xDE1A,
+ 0xDE2A,0xDE32,0xDE17,0xDE23,0xDE74, 0,0xDE76,0xDE2E,0xDE25,0xDE20,
+ 0xDE71,0xDE16,0xDE70,0xDE2C,0xDE2F,0xDE1F,0xDE64, 0,0xDD08,0xDD14,
+ 0xDD0A,0xDD0B,0xDE4F,0xDE59,0xDE54,0xDE51,0xDEB6,0xDFEC,0xDFED,0xDFEA,
+ 0xDEEE,0xDF5A,0xDF73,0xDF65,0xDF61,
+ /* plane 5, row 46 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0x729F,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3FE5,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0x405F,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0x4118,0xD841,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,
+ 1, /* first low-surrogate */
+ 0xDF55,0xDF6B,0xDF64,0xDF5B,0xDF4C,0xDF6F,0xDF84,0xDF70,0xDF5D,
+ 0xDF57,0xDF66,0xDF53,0xDF98,0xDF97,0xDD28,0xDDEB,0xDDEA,0xDDE8,0xDDEC,
+ 0xDDEF,0xDED1,0xDECA, 0,0xDECF,0xDECD,0xDECE,0xDC70,0xDC67,0xDC73,
+ 0xDC6D,0xDC76,0xDC79,0xDC6A,0xDC8B,0xDC72,0xDC71,0xDC6E,0xDC7A,0xDE16,
+ 0xDE39,0xDE3B,0xDF10,0xDF96,0xDF7B,0xDF7C,0xDF7D,0xDCBE,0xDE5C,0xDE38,
+ 0xDE39,0xDE2E,0xDE34,0xDE32,0xDE5B,0xDE33,0xDE3C, 0,0xDC0E,0xDC0F,
+ 0xDC10,0xDC87,0xDE5B,0xDE53, 0,0xDE5C,0xDE3F,0xDE59,0xDE4A,0xDE44,
+ 0xDE4C,0xDE40,0xDE5F,0xDE5E,0xDE4E,0xDE54,0xDE43,0xDE87,0xDF82,0xDF85,
+ 0xDD31,0xDD47,0xDD2E,0xDD2F,0xDD48,0xDD34, 0,0xDD9F,0xDC32,0xDC36,
+ 0xDC33,0xDC31,0xDC40,0xDC41,0xDDDD,
+ /* plane 5, row 47 */
+ 1 | (94 << 8), /* first, last */
+ 0xD856,0xD856,0x41AD,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD856,0x421E,0xD856,
+ 0xD856,0xD856,0x4227,0xD856,0xD856,0xD856,0xD856,0x4218,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x4220,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,
+ 0xD858,0x42F4,0x4302,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,
+ 0xD859,0xD859,0xD859,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDDD2,0xDDD9, 0,0xDDDF,0xDDDB,0xDDD8,0xDDD3,0xDDDE,0xDDE0,
+ 0xDDD4,0xDDD7,0xDDDA,0xDEA7,0xDFFE,0xDFDD,0xDC40,0xDFE2, 0,0xDFD6,
+ 0xDFDE,0xDFEF, 0,0xDFEB,0xDFEA,0xDFE4,0xDFD1, 0,0xDFEC,0xDFFA,
+ 0xDFD9,0xDFF3,0xDFE1,0xDFDC,0xDFE5,0xDFDF,0xDFD4, 0,0xDC05,0xDED6,
+ 0xDED5,0xDED0,0xDEC8,0xDEC4,0xDEC9,0xDECD,0xDED2,0xDECC,0xDECA,0xDCA0,
+ 0xDC92, 0, 0,0xDC8B,0xDCA1,0xDC95,0xDC88,0xDC86,0xDC8D,0xDC85,
+ 0xDC91,0xDC89,0xDCA2,0xDEF0,0xDEF3,0xDEF4,0xDEEF,0xDF06,0xDFA2,0xDC5E,
+ 0xDC63,0xDC60,0xDC5B,0xDC7B,0xDC58,0xDC59,0xDC5D,0xDD05,0xDD06,0xDD02,
+ 0xDD03,0xDD04,0xDDA2,0xDDA7,0xDDA6,0xDDA4,0xDDAC,0xDDA9,0xDFE7,0xDC01,
+ 0xDFDF,0xDFD9,0xDFE3,0xDC0F,0xDD1A,
+ /* plane 5, row 48 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x4524,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0x8770,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 1, /* first low-surrogate */
+ 0xDD45,0xDD48,0xDD7B,0xDD85,0xDD86,0xDDFE,0xDDFF,0xDE64,0xDE71,
+ 0xDE72,0xDE61,0xDE62,0xDE6C,0xDE60,0xDE5D,0xDE63,0xDE67,0xDE01,0xDE2A,
+ 0xDE30,0xDE06,0xDE7D,0xDE22,0xDEB9,0xDE0A,0xDE10,0xDD8F,0xDE80,0xDE13,
+ 0xDE2E,0xDE18,0xDE17,0xDE1A,0xDE14,0xDE47,0xDE63,0xDE38, 0,0xDE7F,
+ 0xDE21,0xDE37,0xDE31,0xDE1B,0xDEA5,0xDF6C,0xDDD3,0xDF88,0xDF6E,0xDF5C,
+ 0xDF74,0xDF54,0xDF83, 0,0xDF65,0xDF60,0xDF70,0xDF6F,0xDF6D,0xDF72,
+ 0xDF6C,0xDF76,0xDF75,0xDF59,0xDFC7,0xDDC1,0xDDF9,0xDEE3,0xDEE7,0xDED6,
+ 0xDECF,0xDEDA,0xDEE9,0xDED2,0xDC55,0xDC4F,0xDC4D,0xDC51,0xDC56,0xDCF9,
+ 0xDCF8,0xDD06,0xDD03,0xDD09,0xDCF7,0xDCF5,0xDE47,0xDE45,0xDE3E,0xDE46,
+ 0xDE29,0xDE34,0xDE3F,0xDE44,0xDE35,
+ /* plane 5, row 49 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x477D,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,
+ 0x8E37,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0x4864,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,
+ 1, /* first low-surrogate */
+ 0xDE5A,0xDE2A,0xDE33,0xDE37,0xDE43,0xDE39,0xDE30,0xDE5D,0xDE32,
+ 0xDE27,0xDFBD,0xDFBA,0xDFBC,0xDFF1,0xDFF0,0xDC61,0xDC5C,0xDC58,0xDC5D,
+ 0xDCDA,0xDCD9,0xDCDD,0xDCDC,0xDCDE, 0,0xDDA0,0xDDA2,0xDF0F,0xDF13,
+ 0xDF12,0xDF11,0xDF14,0xDF19,0xDF0E,0xDF17,0xDF21,0xDF20,0xDF16,0xDC78,
+ 0,0xDC87,0xDC79,0xDC80,0xDC77,0xDC81,0xDC46,0xDC7A,0xDC9C,0xDC83,
+ 0xDC84,0xDCAD,0xDC9D,0xDC9E,0xDE55,0xDF36,0xDF2B,0xDF27,0xDF46,0xDF2C,
+ 0xDF45,0xDF33,0xDF2D,0xDF34,0xDF22, 0,0xDC1F,0xDDB3,0xDD8C,0xDD8F,
+ 0xDDAF,0xDDAD,0xDD8E,0xDDAC,0xDDB0,0xDDB1,0xDDAE,0xDD99,0xDEEB,0xDF74,
+ 0xDF75,0xDF8E,0xDF6D,0xDF70,0xDF8C,0xDC4F,0xDC51,0xDC58,0xDC4C,0xDC4E,
+ 0xDD15,0xDDBE,0xDDDB,0xDDB3,0xDDAE,
+ /* plane 5, row 50 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0x9703,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0x4AC2,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,
+ 1, /* first low-surrogate */
+ 0xDC87,0xDC8A,0xDC88,0xDC8B,0xDC8C,0xDD44,0xDD2D,0xDD2A,0xDD31,
+ 0xDD2C,0xDD45,0xDD30,0xDD29,0xDD46,0xDEF4,0xDF14,0xDF10,0xDF0F,0xDF12,
+ 0xDF0B,0xDF0C,0xDF0A,0xDF13,0xDF0E,0xDFD9,0xDFD0, 0,0xDCC1,0xDCBF,
+ 0xDCBD,0xDCBC,0xDCBA,0xDCBB,0xDCD1,0xDCBE,0xDCD0,0xDCB9,0xDE1A,0xDE1C,
+ 0xDE1B,0xDE91,0xDE96,0xDE9F,0xDE9C,0xDE9A,0xDE9D,0xDFAD,0xDFA5,0xDFAE,
+ 0xDC03,0xDC26,0xDC20,0xDC23,0xDC24,0xDC21,0xDC28,0xDC25,0xDC1E,0xDC94,
+ 0xDC93,0xDC8F,0xDC9A,0xDCAD, 0,0xDDCA,0xDDC5,0xDEBB,0xDEE1,0xDEEA,
+ 0xDEE4,0xDEED,0xDEE6,0xDEE0,0xDEE8,0xDEE5,0xDC1A,0xDC94,0xDC96,0xDC9E,
+ 0xDC95,0xDCA1,0xDC8E,0xDC9B,0xDC92,0xDC97,0xDC99,0xDC93,0xDE32,0xDE2F,
+ 0xDE2E,0xDE33,0xDF1C,0xDF1E,0xDF11,
+ /* plane 5, row 51 */
+ 1 | (94 << 8), /* first, last */
+ 0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0x4CAC,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD87E,
+ 0xD846,0xD840,0xD840,0xD840,0xD840,0xD841,0xD840,0x349B,0xD840,0xD841,
+ 0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0x52F6,0x3526,0xD842,0xD842,
+ 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844,0xD843,0xD843,0xD845,
+ 0xD845,0xD845,0xD845,0xD846,0xD846,
+ 1, /* first low-surrogate */
+ 0xDF20,0xDF1F,0xDF19,0xDF16,0xDCAC,0xDCB9,0xDCB3,0xDCA6,0xDCA2,
+ 0xDCA9,0xDCA7,0xDD6C,0xDD6D,0xDD69,0xDD80,0xDD66,0xDD65,0xDD71,0xDD6B,
+ 0xDFBD,0xDFC1,0xDFD3,0xDFB6, 0,0xDFB9,0xDFD4,0xDFB7,0xDFDB,0xDFB8,
+ 0xDFC0,0xDFBC,0xDFD5,0xDFBF,0xDFC3,0xDFC9,0xDE58,0xDE90,0xDE95,0xDE97,
+ 0xDF09,0xDF08,0xDF06,0xDF05,0xDF10,0xDF97,0xDF95,0xDFEE,0xDC1F,0xDE1A,
+ 0xDF4B,0xDD8E,0xDFE8,0xDFF0,0xDFF4,0xDC06,0xDFED, 0,0xDFE9,0xDC00,
+ 0xDCB8,0xDD6D,0xDC04,0xDC01,0xDC03,0xDC02, 0, 0,0xDD62,0xDEBA,
+ 0xDF13,0xDFDE,0xDFD7,0xDFE4,0xDFCE,0xDFE3,0xDFDD,0xDC3A,0xDFDB,0xDFD6,
+ 0xDFE0,0xDFD4,0xDFCB,0xDFE1,0xDFC9,0xDFDF,0xDC3C,0xDFFC,0xDFCF,0xDC79,
+ 0xDC76,0xDC78,0xDE87,0xDC9C,0xDCB1,
+ /* plane 5, row 52 */
+ 1 | (94 << 8), /* first, last */
+ 0xD846,0xD846,0xD846,0x41AF,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD842,0xD846,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0x3815,0xD847,0xD847,0xD848,0xD850,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0x389C,0xD848,0xD848,0xD848,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0x64CC,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,
+ 1, /* first low-surrogate */
+ 0xDCC1,0xDC9A,0xDC92, 0,0xDCC2,0xDC96,0xDCC0,0xDC91,0xDC95,
+ 0xDDA2,0xDEC3,0xDEC0,0xDEC2,0xDF8A,0xDFB0,0xDC16,0xDF46,0xDF4A,0xDF3E,
+ 0xDF45,0xDF42, 0,0xDF5B,0xDF44,0xDC04,0xDC22,0xDD55,0xDD57,0xDD51,
+ 0xDD4E,0xDD5A,0xDEC6,0xDEC3, 0,0xDEC5,0xDECC,0xDF71,0xDC26,0xDCB2,
+ 0xDD7A,0xDD84,0xDD7B,0xDC74,0xDC8C,0xDC51,0xDC48,0xDC8D,0xDC92,0xDC98,
+ 0xDC93,0xDCB0,0xDC4E,0xDC96,0xDC97,0xDC9C,0xDCCA,0xDD33,0xDD83,0xDD84,
+ 0xDD9A,0xDD8C, 0,0xDD99,0xDEE0,0xDFE4,0xDFF8,0xDFED,0xDFF3,0xDFF4,
+ 0xDFF5,0xDFFD,0xDD19,0xDE9E,0xDEC4,0xDE9F,0xDF9B,0xDF9F,0xDF9A,0xDEAA,
+ 0xDE9D,0xDE92,0xDEA2,0xDEAF,0xDEEB,0xDEA0,0xDEA1,0xDE94,0xDE98,0xDE8F,
+ 0xDE87,0xDE84,0xDEA9,0xDE7C,0xDD18,
+ /* plane 5, row 53 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0x3D64,0x3D6E,0xD850,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0x3D5F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0x3EF6,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0x764A,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDE5F,0xDE62,0xDE61,0xDEC0,0xDF15,0xDFFC,0xDFF9,0xDFC8,0xDFC9,
+ 0xDFDE,0xDFCA,0xDFE2, 0, 0,0xDC04,0xDFCC,0xDFDD,0xDFE4,0xDFD3,
+ 0xDFC7,0xDFC6, 0,0xDC37,0xDFD8,0xDFEE,0xDFB2,0xDFA3,0xDFB3,0xDFED,
+ 0xDFF8,0xDD31,0xDD5B,0xDD66,0xDD69,0xDD96,0xDD9B,0xDDF7,0xDDF3,0xDDF4,
+ 0xDDF5,0xDEE2,0xDEE7,0xDEE5,0xDEE9,0xDEE6,0xDEE3,0xDC74,0xDC7F,0xDC8F,
+ 0xDC90,0xDC97,0xDCA3,0xDC8E,0xDC98,0xDC8C,0xDE42,0xDE44,0xDE69,0xDE43,
+ 0xDE68, 0,0xDF8D,0xDF88,0xDF8B,0xDF89,0xDCCC,0xDD1F,0xDE80,0xDE5E,
+ 0xDE67,0xDE68,0xDE65, 0,0xDE74,0xDE69,0xDE61,0xDE62,0xDE6C,0xDE93,
+ 0xDE86,0xDF9D,0xDF9B,0xDC1B,0xDC16,0xDC19,0xDC14,0xDC18,0xDC15,0xDC99,
+ 0xDC98,0xDE5D,0xDE89,0xDE7A,0xDE7D,
+ /* plane 5, row 54 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0x4073,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0x40DD,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0x7AB9,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0x7BD7,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,
+ 1, /* first low-surrogate */
+ 0xDE4B, 0,0xDE78,0xDE7F,0xDE77,0xDE7E,0xDE79,0xDEAB,0xDE7C,
+ 0xDE74,0xDE75,0xDEA7,0xDF8D,0xDD4E,0xDD66,0xDD61,0xDD4D,0xDD4F, 0,
+ 0xDD54,0xDD7C,0xDEDA,0xDEDE,0xDED8,0xDEDD,0xDEDF,0xDC66,0xDC62,0xDC5F,
+ 0xDC64,0xDC63,0xDC60,0xDC88,0xDC6A,0xDC67,0xDC87,0xDC3F,0xDC6C,0xDC6E,
+ 0xDCAD,0xDDF1,0xDDF4,0xDDF6,0xDDF5,0xDDF8,0xDDFB,0xDDEC,0xDDEF,0xDDED,
+ 0,0xDDF7,0xDDF9,0xDDFD,0xDEB1,0xDC36,0xDC1B,0xDC32,0xDC42,0xDC4D,
+ 0xDC1F,0xDC21,0xDC1C,0xDC31,0xDC2E,0xDC47,0xDC3B,0xDC41,0xDC18,0xDC39,
+ 0xDC1D,0xDC27,0xDC23, 0,0xDEEE,0xDEE8,0xDEE5,0xDEEF,0xDEE4,0xDEEC,
+ 0xDEF0,0xDCD7,0xDCD8,0xDCD4,0xDCCA,0xDCD2,0xDCCB,0xDCD3,0xDCE6,0xDCE2,
+ 0xDE49,0xDE48,0xDEFF,0xDF09,0xDFB0,
+ /* plane 5, row 55 */
+ 1 | (94 << 8), /* first, last */
+ 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 1, /* first low-surrogate */
+ 0xDFAF,0xDC7C,0xDC78,0xDC7A,0xDC72,0xDC79,0xDC7E,0xDD0C,0xDD0B,
+ 0xDDCD,0xDDBE,0xDDBC,0xDDBF,0xDDC0,0xDDBD,0xDC38,0xDC08,0xDC05,0xDC3B,
+ 0xDC10,0xDC0C,0xDC0D,0xDC04,0xDC3A,0xDC13,0xDC37,0xDC39,0xDD1F,0xDD4B,
+ 0xDDEE,0xDE75,0xDE78,0xDE7C,0xDE74,0xDE76,0xDEEA,0xDEEB,0xDDFB,0xDE19,
+ 0xDEA7,0xDE8C,0xDEDC,0xDE98,0xDEBE,0xDE9E,0xDF0F,0xDE9F,0xDEDD,0xDE93,
+ 0xDEBB,0xDEB6,0xDE90,0xDEA1,0xDEBD,0xDEDE,0xDE3A,0xDF22,0xDE97,0xDE94,
+ 0xDEC3,0xDE8E,0xDEA8,0xDE99,0xDEAD,0xDE9B,0xDEA2,0xDF21,0xDEAC,0xDF0E,
+ 0xDF31,0xDDE1,0xDDDE,0xDDDF,0xDDDC,0xDDDD,0xDDEC,0xDDE7,0xDF69,0xDFB8,
+ 0xDFA1,0xDFA8,0xDFBA,0xDFC2,0xDFA6,0xDFA4,0xDFA3,0xDFAB,0xDFBC,0xDFB7,
+ 0xDFBF,0xDFAD,0xDFB1,0xDFCA,0xDFC4,
+ /* plane 5, row 56 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x4688,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD842,
+ 0xD85F,0xD85F,0xD85F,0x47BB,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0x47BA,0xD85F,0xD860,0xD860,0xD860,0xD860,0x4812,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0x4861,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0x48E1,
+ 1, /* first low-surrogate */
+ 0xDFB9,0xDDC8,0xDDC6,0xDDC7,0xDF0A,0xDF0D,0xDEFB,0xDF03,0xDF02,
+ 0xDEFC,0xDEF9,0xDEF8,0xDC6E,0xDC63,0xDC62,0xDC61,0xDC6B, 0,0xDC6F,
+ 0xDC66,0xDC6C,0xDD0E,0xDD15,0xDD16,0xDD10,0xDD17,0xDD11,0xDE6E,0xDE6C,
+ 0xDE87,0xDE83,0xDE63,0xDEDC,0xDFC0,0xDFF7,0xDFFA,0xDC70,0xDC6A,0xDC68,
+ 0xDC69,0xDC84,0xDCEC,0xDCE7,0xDCEE,0xDDBA,0xDDB2,0xDDB5,0xDDCB,0xDC0B,
+ 0xDDD0,0xDE6D,0xDE6C, 0,0xDF45,0xDF46,0xDF34,0xDF2C,0xDF35,0xDF44,
+ 0,0xDF76,0xDCB1,0xDCAA,0xDCA1,0xDCB2, 0,0xDCA6,0xDCB5,0xDCB4,
+ 0xDCB8,0xDCAF,0xDCB0,0xDCA3,0xDE62,0xDE64,0xDF56,0xDF51,0xDF4F,0xDF68,
+ 0xDF4C,0xDF50, 0,0xDF48,0xDF4A,0xDC21,0xDDE3,0xDDB9,0xDDDE,0xDDB7,
+ 0xDDE1,0xDDB6,0xDDB5,0xDDDF,
+ /* plane 5, row 57 */
+ 1 | (94 << 8), /* first, last */
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,
+ 1, /* first low-surrogate */
+ 0xDF97,0xDF9A,0xDF9B,0xDF98,0xDF92,0xDF93,0xDFD7,0xDF73,0xDC6B,
+ 0xDC74,0xDC78,0xDC6D,0xDD18,0xDDE9,0xDDF5,0xDDEA,0xDE2E,0xDDE7,0xDDFE,
+ 0xDDE5,0xDE36,0xDDF0,0xDDE6,0xDE2C,0xDC89,0xDC95,0xDC93,0xDD4D,0xDD4A,
+ 0xDD4F,0xDD50,0xDD4B,0xDF2A,0xDF2B,0xDF2F,0xDF2E,0xDF7C,0xDFED,0xDFE2,
+ 0xDCE0,0xDCDC,0xDCDA,0xDCD6,0xDCF4,0xDCD9,0xDCD5,0xDE22,0xDE21,0xDE24,
+ 0xDE25,0xDE26,0xDE23,0xDEAA,0xDEAF,0xDEB0,0xDEAB,0xDFAF,0xDFB7,0xDFB5,
+ 0xDFB2,0xDFB3,0xDC2B,0xDCD8,0xDCC2,0xDCAF,0xDCBC,0xDCB8,0xDCBE,0xDCB7,
+ 0xDCB4,0xDCBF,0xDCB3,0xDCB1,0xDCBB,0xDCBD,0xDCD6,0xDCDD,0xDDD8,0xDDD3,
+ 0xDDD5,0xDDE3,0xDDE2,0xDDD9,0xDDDE,0xDDDF,0xDDDA,0xDDD4,0xDEF3,0xDEE2,
+ 0xDF0D,0xDF01,0xDF05,0xDF1A,0xDF03,
+ /* plane 5, row 58 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0x999F,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0x4B89,0xD866,0x4B8C,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0x9B8D,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0x9E77,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD864,0xD854,0xD841,0xD841,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,
+ 1, /* first low-surrogate */
+ 0xDF1F,0xDF16,0xDEFA,0xDEFC,0xDF0A, 0,0xDCBC,0xDCCA,0xDCB6,
+ 0xDCC7,0xDCBF, 0,0xDCB9, 0,0xDCB0,0xDCB8,0xDCBD,0xDC91,0xDCBB,
+ 0xDCBE,0xDE3E,0xDE3D,0xDF38,0xDF3D,0xDF39,0xDF33,0xDC33,0xDCBB,0xDCC6,
+ 0xDCC5,0xDCC7,0xDCCB,0xDCA8,0xDCC8,0xDCBE,0xDCC1,0xDCBD,0xDD82,0xDD9E,
+ 0xDD81,0xDD84, 0,0xDD96,0xDD8E,0xDD88,0xDD87,0xDFE0,0xDC0D,0xDFDF,
+ 0xDFE4,0xDFE2,0xDFDD,0xDFEC,0xDFDE,0xDFE7,0xDFEA,0xDFE3,0xDE5C, 0,
+ 0xDE5D,0xDE9C,0xDF1D,0xDF9D,0xDF9E,0xDF9B,0xDFB5,0xDFB9,0xDFB6,0xDFF3,
+ 0xDFF2,0xDFF4,0xDC26,0xDC27,0xDC25,0xDD06,0xDD0B,0xDD3A,0xDD3C,0xDC0A,
+ 0xDC0B,0xDCBF,0xDCFD,0xDE18,0xDDDF,0xDF90,0xDE9E,0xDFFC,0xDC10,0xDC0F,
+ 0xDC0D,0xDCB9,0xDCB7,0xDCBA,0xDD0A,
+ /* plane 5, row 59 */
+ 1 | (94 << 8), /* first, last */
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD843,0xD844,0xD844,
+ 0xD844,0xD844,0xD845,0xD85F,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0x381A,0xD847,
+ 0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,
+ 0xD849,0xD84A,0xD84A,0xD84A,0x3998,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,
+ 0xD84D,0xD84D,0x3BF1,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84E,0x6BA9,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD850,0xD84F,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,
+ 1, /* first low-surrogate */
+ 0xDC41,0xDC8B,0xDC46,0xDC53,0xDCE2,0xDC3F,0xDF7C,0xDC4B,0xDC4E,
+ 0xDC8A,0xDC47,0xDC93,0xDDCE,0xDC8C,0xDCAF,0xDCC9,0xDDC6,0xDDC8,0xDE91,
+ 0xDCCF,0xDCD4,0xDCCE,0xDEDD,0xDED4,0xDF49,0xDF63,0xDF5D, 0,0xDF67,
+ 0xDFBB,0xDF60,0xDF80,0xDD5F,0xDD60,0xDEDA,0xDED2,0xDEDD,0xDD8E,0xDD88,
+ 0xDD6C,0xDC9E,0xDCC9,0xDCA4, 0,0xDCD9,0xDCD2,0xDCDA,0xDCDD,0xDCCE,
+ 0xDCFC,0xDE14,0xDE60,0xDDD7,0xDDCB,0xDDCD,0xDDD5,0xDEE7,0xDC00,0xDC0A,
+ 0xDC0F,0xDC02,0xDC01,0xDD1D,0xDECA,0xDECB,0xDECD,0xDF4F,0xDF9C,0xDE80,
+ 0xDF0D,0xDF02, 0,0xDF07,0xDEF7,0xDEF8,0xDEFD,0xDF24,0xDEFB,0xDF39,
+ 0xDF3A,0xDD22, 0,0xDE6A,0xDE6D,0xDE74,0xDC0E,0xDFDF,0xDC2B,0xDFE3,
+ 0xDC26,0xDC2A,0xDC23,0xDC35,0xDC4A,
+ /* plane 5, row 60 */
+ 1 | (94 << 8), /* first, last */
+ 0xD850,0xD851,0xD851,0xD850,0xD851,0xD851,0xD851,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0x3F6A,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0x764B,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0x76A2,0xD853,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0x4485,0xD854,0xD854,0xD854,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x4239,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0x423D,0x4244,
+ 1, /* first low-surrogate */
+ 0xDFFD,0xDC00,0xDC1E,0xDFFF,0xDD9E,0xDDFA,0xDEF1,0xDC95,0xDCA8,
+ 0xDCA6,0xDE6E,0xDE83,0xDE6D,0xDF8F, 0,0xDCDF,0xDCD5,0xDCE0,0xDCD3,
+ 0xDCD8,0xDE8C, 0,0xDE94,0xDE96,0xDE85,0xDE8F,0xDEA9,0xDE8E,0xDE90,
+ 0xDEB8,0xDEC3,0xDEBB,0xDFA5,0xDFA2, 0,0xDFA3,0xDCB5,0xDCAC,0xDCA8,
+ 0xDEAD,0xDEB8,0xDEB4,0xDEAE,0xDEB6, 0,0xDEC1,0xDEBF,0xDF92,0xDC00,
+ 0xDC01,0xDD75,0xDD72,0xDD78,0xDD70,0xDD7E,0xDD7D,0xDD7F,0xDEEF,0xDC6D,
+ 0xDC8E,0xDC8F,0xDC8A,0xDC8D,0xDC95,0xDC8B,0xDC8C,0xDCB0,0xDC93,0xDDFC,
+ 0xDE15,0xDE0E,0xDE18,0xDE11,0xDE0D,0xDEBB,0xDEB3, 0,0xDCA1,0xDC9A,
+ 0xDC84,0xDCA0,0xDC86,0xDC9D,0xDCAA,0xDC78,0xDC8D,0xDC8A,0xDCA6,0xDC7A,
+ 0xDC97,0xDC88,0xDC8E,
+ /* plane 5, row 61 */
+ 1 | (94 << 8), /* first, last */
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x4246,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD858,0x430E,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0x4310,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x443E,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD856,0xD85A,0xD85A,
+ 0xD85A,0x4484,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x4549,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 1, /* first low-surrogate */
+ 0xDC76,0xDC81,0xDC85,0xDC75,0xDCA8,0xDC8F,0xDC91,0xDCA2,0xDC9C,
+ 0xDC89,0xDC7F,0xDC96,0xDC79,0xDC9F,0xDCA7, 0,0xDC87,0xDC9B,0xDCA5,
+ 0xDC8B,0xDCC9,0xDEFF,0xDF03,0xDF00,0xDF02,0xDF04,0xDF05,0xDEE6,0xDF1F,
+ 0xDD14, 0,0xDD0C,0xDD0F,0xDD19,0xDD0B,0xDD13,0xDCD5, 0,0xDD1C,
+ 0xDE50,0xDE4E,0xDF12,0xDFB9,0xDC85,0xDC88,0xDC90,0xDD13,0xDDD0,0xDDD1,
+ 0xDDD2,0xDDD7,0xDDD6,0xDDE5,0xDC46,0xDC6B,0xDC45,0xDC3F,0xDC3E, 0,
+ 0xDC6A,0xDC68,0xDC4C,0xDD23,0xDD22,0xDD97,0xDD91,0xDEB5,0xDD98,0xDD9C,
+ 0xDE89, 0,0xDE8B,0xDE8A,0xDE8D,0xDE8E,0xDE88,0xDF4E,0xDF44,0xDF37,
+ 0xDF75,0xDF54,0xDF76,0xDF34,0xDF6B,0xDF32,0xDF57,0xDF52,0xDF45, 0,
+ 0xDEB1,0xDF4B,0xDF47,0xDF33,0xDF40,
+ /* plane 5, row 62 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85D,0xD85C,
+ 0xD85D,0xD85D,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x45DF,0xD85D,
+ 0xD85D,0x45F0,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x468A,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0x4702,0xD85E,0xD85E,0xD85E,0xD85F,0xD85E,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47C0,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0x4815,0xD860,0xD860,0xD860,
+ 1, /* first low-surrogate */
+ 0xDF3C,0xDF43,0xDF4F,0xDF55,0xDF41,0xDFB2,0xDFC0,0xDC34,0xDFF9,
+ 0xDC19,0xDC0D,0xDFFA,0xDC1E,0xDC1F,0xDC0E,0xDC40,0xDC08, 0,0xDC13,
+ 0xDC4C, 0,0xDDCC,0xDDCB,0xDF24,0xDF25,0xDF3D,0xDF20,0xDF27,0xDF26,
+ 0xDF1D,0xDF1E,0xDF32,0xDF6C,0xDF59, 0,0xDC7A,0xDC79,0xDD1B,0xDD2E,
+ 0xDD23,0xDD20,0xDD1F,0xDEB6,0xDEB9,0xDEA1,0xDEA3,0xDEA8,0xDEAF,0xDE9A,
+ 0xDE99,0xDEA2,0xDE9D, 0,0xDEAB,0xDFC9,0xDFFE,0xDC00,0xDFFC,0xDC07,
+ 0xDC75,0xDC72,0xDC73,0xDC74,0xDCFA,0xDCFC,0xDCF8,0xDCF6,0xDCFB,0xDDCD,
+ 0xDDD1,0xDDCF,0xDE74,0xDE72,0xDE73,0xDF54,0xDF51, 0,0xDF53,0xDF49,
+ 0xDF4C,0xDF4A,0xDF4F,0xDF56,0xDD00,0xDCD5,0xDCD7,0xDCFF,0xDCD9,0xDCE3,
+ 0xDCD3, 0,0xDCD8,0xDCD4,0xDCDE,
+ /* plane 5, row 63 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0x48E2,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD87E,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,
+ 1, /* first low-surrogate */
+ 0xDE71,0xDF74,0xDF88,0xDF7F,0xDF6B,0xDF87,0xDF79,0xDF78,0xDF89,
+ 0xDF80,0xDF76,0xDC29,0xDC28,0xDC2F,0xDDE5,0xDE04,0xDE03,0xDDF0,0xDDE8,
+ 0xDDEA,0xDDF1,0xDE01,0xDE02,0xDFA9,0xDFAB,0xDFB7,0xDFB6, 0,0xDCA0,
+ 0xDC8E,0xDC86,0xDC87,0xDC85,0xDC8B,0xDC88,0xDC90,0xDD1A,0xDD34,0xDE37,
+ 0xDE2F,0xDE30,0xDE39,0xDE34,0xDE33,0xDE85,0xDE84,0xDE3A,0xDC9F,0xDD69,
+ 0xDD6C,0xDD6A,0xDD67,0xDD6B,0xDF3F,0xDF40,0xDC0B,0xDCD2,0xDCF8,0xDD01,
+ 0xDCFA,0xDD16,0xDDF6,0xDE2C,0xDE2D,0xDE2F,0xDE2E,0xDEC1,0xDEF5,0xDEC4,
+ 0xDEDE,0xDECC,0xDED2,0xDEC2,0xDECD,0xDECF,0xDEDD,0xDEC8,0xDFBA,0xDFBE,
+ 0xDFBF,0xDC2E,0xDC30,0xDCE7,0xDCEE,0xDCE8,0xDCE6,0xDCE2,0xDCE4,0xDCFB,
+ 0xDCFC,0xDCEA,0xDDED,0xDDF6,0xDDF3,
+ /* plane 5, row 64 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0x4B4D,0xD865,0xD865,0xD865,0xD865,0x4B4A,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,
+ 1, /* first low-surrogate */
+ 0xDDF4,0xDDF1,0xDDF7,0xDDF5,0xDDEA,0xDDEB,0xDF00,0xDF2C,0xDF12,
+ 0xDF3D,0xDF33, 0,0xDF30,0xDF40,0xDF31,0xDF57, 0,0xDF35,0xDF32,
+ 0xDF2D,0xDF36,0xDF38,0xDF62,0xDF5F,0xDF8A,0xDCD6,0xDCD8,0xDCDD,0xDCE4,
+ 0xDCE3,0xDE4D,0xDED7,0xDF4A,0xDF4C,0xDF50,0xDF4B,0xDF4E,0xDF4F,0xDC39,
+ 0xDCD2,0xDCCD,0xDCD3,0xDCE1,0xDCCE,0xDCD5,0xDCDD,0xDCD4,0xDCCF,0xDDCB,
+ 0xDDA6,0xDDC2,0xDDA5,0xDDA9,0xDDA2,0xDDA4,0xDDB0,0xDDCC,0xDDAF,0xDDBF,
+ 0xDC24,0xDC1A,0xDC14,0xDC3A,0xDC20,0xDC1B,0xDC21,0xDC25,0xDC1E,0xDC3F,
+ 0xDC40,0xDC18,0xDC2C,0xDC15,0xDC2D,0xDC1F,0xDC29,0xDC4B,0xDEB3,0xDEA5,
+ 0xDEA7,0xDEAB,0xDEA6,0xDEAA,0xDF22,0xDF23,0xDFA1,0xDFA3,0xDFA0,0xDFBD,
+ 0xDFBA,0xDFFA,0xDFF8,0xDFFC,0xDFF6,
+ /* plane 5, row 65 */
+ 1 | (94 << 8), /* first, last */
+ 0xD869,0xD869,0x4D63,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0x4D93,0xD869,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0x350E,0xD842,0xD844,
+ 0xD844,0xD844,0x360A,0xD844,0xD844,0xD844,0xD844,0x360D,0xD844,0xD845,
+ 0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 1, /* first low-surrogate */
+ 0xDC34,0xDC43, 0,0xDCD4,0xDD0D,0xDD43,0xDD41,0xDD3D,0xDD40,
+ 0xDD3E,0xDD3F,0xDD46, 0,0xDDD4,0xDC35,0xDC36,0xDC32,0xDC3A,0xDCC8,
+ 0xDD36,0xDE1E,0xDE1D,0xDE1F,0xDC1C,0xDC1D,0xDC20, 0,0xDCC0,0xDC9A,
+ 0xDC93,0xDCDD, 0,0xDCA3,0xDCA9,0xDC9C,0xDC9B, 0,0xDC97,0xDCB1,
+ 0xDCCA,0xDCB3,0xDCCD,0xDCEA,0xDCEE,0xDCEF,0xDEDF,0xDF50,0xDFBB,0xDF88,
+ 0xDF89,0xDF8C,0xDF85,0xDF5E,0xDF94,0xDF95,0xDD6B,0xDD6A,0xDD69,0xDEE3,
+ 0xDEF1,0xDC37,0xDC33,0xDD91,0xDD8F,0xDD97,0xDCD4,0xDCDE,0xDCD3,0xDCE0,
+ 0xDD43,0xDD0B,0xDCFF,0xDD04,0xDD07,0xDDF9,0xDDFA,0xDDFB,0xDDF8,0xDC12,
+ 0xDC10,0xDD1F,0xDEDF,0xDEE3,0xDF52,0xDFA9,0xDF65,0xDF87,0xDF42,0xDF52,
+ 0xDF4C,0xDE9F,0xDF01,0xDF48,0xDF4F,
+ /* plane 5, row 66 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD854,0x4074,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD856,0xD856,0xD856,
+ 1, /* first low-surrogate */
+ 0xDF7E,0xDF4D,0xDF58,0xDF47,0xDF5E,0xDF49,0xDF4E,0xDF5D,0xDF5A,
+ 0xDF86,0xDF51,0xDD29,0xDDA6,0xDDA7,0xDE70,0xDE6F,0xDED3,0xDED2,0xDC28,
+ 0xDC1B,0xDC1A,0xDC1C,0xDC21,0xDC32,0xDC66,0xDC7D,0xDC73,0xDC7F,0xDC65,
+ 0xDC80,0xDC61,0xDC75,0xDC6E,0xDC67,0xDC71,0xDC6C,0xDC63,0xDC62,0xDC83,
+ 0xDCB2,0xDC81,0xDC6F,0xDC6B,0xDC82,0xDC8A,0xDC29,0xDC30,0xDC31,0xDD97,
+ 0xDE00,0xDDFF,0xDCB6,0xDCB5,0xDCC3,0xDE8D,0xDF18,0xDF9C,0xDF9A,0xDF99,
+ 0xDEB7,0xDEC4,0xDEC6,0xDEC7,0xDEBC,0xDEC0,0xDEC5,0xDECD,0xDEC1,0xDEBE,
+ 0xDFA7,0xDFB8,0xDC23, 0,0xDEE8,0xDEDE,0xDEE3,0xDEEF,0xDEDC,0xDEE4,
+ 0xDEE1,0xDEE5,0xDF95,0xDF94,0xDF93,0xDF8E,0xDD98,0xDD9C,0xDD99,0xDDA0,
+ 0xDD9E,0xDF04,0xDCD3,0xDCB4,0xDCBB,
+ /* plane 5, row 67 */
+ 1 | (94 << 8), /* first, last */
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0x4256,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0x425A,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x42A3,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0x42A8,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,
+ 1, /* first low-surrogate */
+ 0xDCB7,0xDCB8,0xDCBD,0xDCB6,0xDCB9,0xDCB5,0xDE22,0xDE21,0xDEC3,
+ 0xDEBC,0xDCFF,0xDCE5,0xDCF7,0xDCD2,0xDD00,0xDCDB,0xDCF0,0xDCE2,0xDCCD,
+ 0,0xDCE1,0xDCF2,0xDCDC,0xDCCC,0xDCD6,0xDCF3,0xDCFA,0xDCF6,0xDCEC,
+ 0xDCEA,0xDCE3,0xDCD0, 0,0xDC95,0xDCD5,0xDCF4,0xDCCB,0xDCDA,0xDCC8,
+ 0xDCDF,0xDCF5,0xDCCF,0xDCC7,0xDCD7,0xDF24, 0,0xDF1C,0xDF21,0xDF1E,
+ 0xDF18,0xDF1B, 0,0xDD46,0xDD4B,0xDD48,0xDD47,0xDD67,0xDD54,0xDF15,
+ 0xDF22,0xDFC5,0xDF29,0xDFC7,0xDC8D,0xDD1B,0xDD20,0xDDE2,0xDDE7,0xDDE8,
+ 0xDDE1,0xDC72,0xDC7B,0xDC74,0xDC71,0xDC79,0xDC75,0xDC90,0xDC77,0xDC7D,
+ 0xDD4F,0xDD50,0xDDA3,0xDDA2,0xDDF4,0xDE94,0xDE9A,0xDE9B,0xDEA7,0xDE97,
+ 0xDE95,0xDE92,0xDE9C,0xDE96,0xDFB6,
+ /* plane 5, row 68 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85B,0xD85B,0xD85C,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85B,
+ 0xD85C,0xD85B,0xD85B,0x453C,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85C,0xD85B,0xD85C,0xD85B,0xD85B,0x459B,0x459A,0xD85C,0xD85C,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0x87F1,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0x465E,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0x46A7,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 1, /* first low-surrogate */
+ 0xDFB8,0xDFB0,0xDC18,0xDFC5,0xDFB5,0xDFC2,0xDC06,0xDC19,0xDFB9,
+ 0xDC15,0xDFD6,0xDFAC, 0,0xDFC6,0xDFB3,0xDFC3,0xDFCA,0xDFCF,0xDFBD,
+ 0xDFCE,0xDC14,0xDFBA,0xDC1A,0xDFC1,0xDFBB, 0, 0,0xDE01,0xDDFC,
+ 0xDC5A,0xDC54,0xDC61,0xDC5C,0xDC55,0xDC4A,0xDC4B,0xDC51,0xDC69,0xDC6B,
+ 0,0xDC66,0xDC58,0xDC5D,0xDC67,0xDC56,0xDC88,0xDC64,0xDC4E,0xDF57,
+ 0xDF5A,0xDF51,0xDF4A,0xDF4B, 0,0xDF47,0xDF6F,0xDF6A,0xDF6B,0xDF46,
+ 0xDF6D,0xDF54,0xDF6E,0xDF4C,0xDC78,0xDC86,0xDC82, 0,0xDEE1,0xDEE5,
+ 0xDEDB,0xDEDE,0xDED7,0xDC03,0xDC7C,0xDC7E,0xDD05,0xDD07,0xDDE6,0xDDE1,
+ 0xDDFB,0xDDE5,0xDDE7,0xDDDF,0xDDFF,0xDE76,0xDF63,0xDF66,0xDF65,0xDF5E,
+ 0xDF64,0xDF6B,0xDF5F,0xDF67,0xDF68,
+ /* plane 5, row 69 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0x486E,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0x490D,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0x4943,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0x4A73,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0x4A74,0xD864,0xD864,0x4A70,
+ 1, /* first low-surrogate */
+ 0xDD08,0xDD09,0xDD17,0xDD15,0xDD1B,0xDD0B,0xDD28,0xDD0E,0xDD18,
+ 0xDD53,0xDD45,0xDD0D,0xDD0A,0xDD13,0xDD4A,0xDE79,0xDFA1,0xDF8D,0xDFA2,
+ 0xDF90, 0,0xDC31,0xDC30,0xDE1F,0xDE19,0xDE0C,0xDE1E,0xDE1D,0xDE07,
+ 0xDF66,0xDFC5,0xDFBA,0xDFBD,0xDFC2,0xDFC3,0xDFBF, 0,0xDCA1,0xDCA2,
+ 0xDCA8,0xDCA3,0xDCAA,0xDCAF,0xDCB9,0xDD37,0xDE8F, 0,0xDE8E,0xDE87,
+ 0xDE8A,0xDE92,0xDE97,0xDE9F,0xDF05,0xDCA9,0xDCA7,0xDD8A,0xDD82,0xDD85,
+ 0xDD8B,0xDD89,0xDD81,0xDD80,0xDD87,0xDD86,0xDF4D,0xDC1C,0xDC1F,0xDD21,
+ 0xDD1D,0xDD22,0xDCFE,0xDD1B,0xDD3A,0xDD37,0xDD17,0xDD38,0xDD26,0xDD18,
+ 0xDE34,0xDE35,0xDE32, 0,0xDEE1,0xDEFD,0xDEE3,0xDEE8,0xDEF9,0xDEFF,
+ 0xDEFE, 0,0xDEE0,0xDF00,
+ /* plane 5, row 70 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BDB,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0x4C29,0xD867,0xD867,0xD867,0xD867,0xD867,0x4C51,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x9BBA,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,
+ 1, /* first low-surrogate */
+ 0xDEEC,0xDEE4,0xDEEF,0xDEFA,0xDFCA,0xDC31,0xDC32,0xDC34,0xDC41,
+ 0xDD00,0xDD06,0xDD08,0xDD05,0xDD03,0xDD0B,0xDD02,0xDD0A,0xDDF0,0xDE13,
+ 0xDE0A,0xDE0F,0xDE11,0xDE08,0xDE0B,0xDE12,0xDE0D,0xDF5B,0xDF63,0xDF61,
+ 0xDF68,0xDF5A,0xDC4E,0xDC4D,0xDC50,0xDCFC,0xDD12,0xDCF5,0xDD1E,0xDCF0,
+ 0xDCF3,0xDCF2,0xDD01,0xDCEF,0xDCEE,0xDD16,0xDCF6,0xDCFB,0xDD1C, 0,
+ 0xDE5D,0xDE60,0xDE66,0xDE5F,0xDE61,0xDE5B,0xDE62,0xDE57,0xDF69,0xDF6B,
+ 0xDF61,0xDF77,0xDF5F,0xDF63,0xDF62,0xDF65,0xDCEF,0xDCE2,0xDD00,0xDCE8,
+ 0xDCF2,0xDCE7, 0,0xDCE5,0xDDD5,0xDDD0,0xDDDA,0xDDD3, 0,0xDDD9,
+ 0xDDCF,0xDDD6,0xDDD8,0xDDF5,0xDDCE,0xDDD7,0xDDF4,0xDDCD,0xDE01, 0,
+ 0xDC52,0xDC55,0xDC5A,0xDC4D,0xDC54,
+ /* plane 5, row 71 */
+ 1 | (94 << 8), /* first, last */
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0x4CDB,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD868,0xD869,0x4D65,
+ 0xD869,0xD869,0x4D64,0x4D67,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD842,0xD842,0xD844,0xD844,0x3611,0xD844,0xD844,
+ 0xD844,0xD845,0x3733,0xD846,0xD846,0xD846,0xD847,0x3821,0x3822,0xD847,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0x39A6,0xD84A,0xD84A,0xD84A,0xD84A,0x39A3,0xD84B,
+ 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,
+ 1, /* first low-surrogate */
+ 0xDC53,0xDC5E,0xDC67,0xDC65,0xDC4E, 0,0xDC4F,0xDC61,0xDC6E,
+ 0xDC51,0xDC5B,0xDE63,0xDEB7,0xDEB6,0xDEC3,0xDEBB,0xDEB5,0xDF2E,0xDF30,
+ 0xDF33,0xDF31,0xDFA4,0xDFC1,0xDFBB,0xDFBE,0xDC00,0xDFFF,0xDC40, 0,
+ 0xDC3F,0xDC44, 0, 0,0xDCDB,0xDD0F,0xDD11,0xDD4E,0xDD4D,0xDD4B,
+ 0xDD4C,0xDD95,0xDC3B,0xDC45,0xDC44,0xDC3E,0xDC3C,0xDC3F,0xDCCC,0xDCCE,
+ 0xDE22,0xDE23,0xDE9F,0xDCC5,0xDCC4,0xDCE9,0xDC99, 0,0xDCE6,0xDCE7,
+ 0xDCF7,0xDCD2, 0,0xDCFD,0xDD0C,0xDD0B,0xDCED, 0, 0,0xDF9B,
+ 0xDC0A,0xDD6F,0xDD75,0xDEF2,0xDEF8,0xDC3E,0xDD24,0xDD0E,0xDD16,0xDD18,
+ 0xDD10,0xDD31,0xDD44, 0,0xDD29,0xDD2F,0xDD4B,0xDD36, 0,0xDE34,
+ 0xDE00,0xDE2B,0xDC20,0xDC21,0xDC1E,
+ /* plane 5, row 72 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,
+ 0xD84F,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0x3EA1,0xD852,0xD852,
+ 0xD852,0xD852,0xD868,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0x425F,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x425C,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD859,0xD859,
+ 1, /* first low-surrogate */
+ 0xDC1D,0xDEF5,0xDEF2,0xDEF6,0xDF90,0xDF9D,0xDF9C,0xDF92,0xDF94,
+ 0xDFD1,0xDF93,0xDFB7,0xDF97,0xDFB0,0xDF9F,0xDFC9,0xDD2D,0xDD2C,0xDE77,
+ 0xDC2C,0xDCC0,0xDCB9,0xDC53,0xDD40,0xDF02,0xDEFB, 0,0xDE8B,0xDEAE,
+ 0xDEAB,0xDFA1,0xDECD,0xDCEA,0xDEDD,0xDEDC,0xDED9,0xDFAB,0xDFAC,0xDFAD,
+ 0xDFB2,0xDC2C,0xDC2B,0xDCC2,0xDF00,0xDF0D,0xDF06,0xDEFF,0xDF03,0xDF01,
+ 0xDF10,0xDF0F,0xDF05,0xDF98,0xDF97,0xDF96,0xDF99,0xDDAC,0xDDAB,0xDF12,
+ 0xDCD8,0xDCDF,0xDCD6,0xDE2D,0xDE32,0xDD3F,0xDD2F,0xDD26,0xDD3A,0xDD39,
+ 0,0xDD3B,0xDD35,0xDD2A,0xDD21,0xDD38,0xDD37,0xDD34, 0,0xDD22,
+ 0xDD36,0xDD44,0xDF45,0xDF3B,0xDF36,0xDF42,0xDD7A,0xDD86,0xDD8B,0xDD7F,
+ 0xDD81,0xDF2A,0xDFD5,0xDC9F,0xDC9D,
+ /* plane 5, row 73 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85D,0x45F5,0xD85D,0x8804,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x4711,
+ 0x470C,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD841,0xD861,0xD861,
+ 1, /* first low-surrogate */
+ 0xDD26,0xDDF4,0xDDF5,0xDC15,0xDC8E,0xDC8F,0xDD26,0xDDA7,0xDDAF,
+ 0xDEAD,0xDEAC,0xDEAB,0xDEAA,0xDC2F,0xDC21,0xDC23,0xDCA3,0xDC49,0xDC3A,
+ 0xDC48,0xDC2D,0xDC25,0xDC29,0xDC32,0xDC34,0xDC24,0xDC2C,0xDC4B,0xDC3B,
+ 0xDC20,0xDC28,0xDC98, 0,0xDC97, 0,0xDC9D,0xDCA8,0xDDD5,0xDF77,
+ 0xDF78,0xDF72,0xDF73,0xDC02,0xDD3B,0xDEFE,0xDF0B,0xDEFF,0xDF07, 0,
+ 0,0xDF30,0xDFCD,0xDFCF,0xDC10,0xDC0A,0xDC83,0xDD15,0xDD0E,0xDD0C,
+ 0xDE02,0xDDFE,0xDE05,0xDE15,0xDE08,0xDF7F,0xDF77,0xDF7C,0xDF82,0xDF7E,
+ 0xDF78,0xDF7D,0xDF79,0xDF81,0xDD4B,0xDD63,0xDD64,0xDD56,0xDD54,0xDD4E,
+ 0xDD10,0xDD4F,0xDD57,0xDD5E,0xDD51,0xDD6A,0xDD69,0xDFAD,0xDFA4,0xDFAC,
+ 0xDFA9,0xDFAE,0xDC4C,0xDE50,0xDE35,
+ /* plane 5, row 74 */
+ 1 | (94 << 8), /* first, last */
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0x494E,
+ 0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0x4B94,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,
+ 1, /* first low-surrogate */
+ 0xDE32,0xDFD8,0xDFD1,0xDFCF,0xDFBE,0xDCD5,0xDCC1,0xDCC6,0xDCC3,
+ 0xDCC2,0xDCC0,0xDCC5,0xDCC7,0xDCBF,0xDCC4,0xDCD4,0xDE90,0xDED2, 0,
+ 0xDED4,0xDCAF,0xDCAE,0xDCB2,0xDCAD,0xDD9C,0xDDA0,0xDDB6,0xDF3D,0xDF56,
+ 0xDF82,0xDC28,0xDC2B,0xDD3C,0xDD3E,0xDD3F,0xDD42,0xDD3D,0xDD41,0xDD3B,
+ 0xDD49,0xDD43,0xDE39,0xDE38,0xDF22,0xDF08,0xDF0C,0xDF06,0xDF13,0xDF04,
+ 0xDF20,0xDF1D,0xDF05,0xDF0A,0xDFD6,0xDFD7,0xDC36,0xDC37,0xDD23,0xDD22,
+ 0xDD20,0xDD1A,0xDD1D,0xDE1C,0xDE20,0xDE77,0xDF7F,0xDF8B,0xDF7D,0xDF99,
+ 0xDF84,0xDF89,0xDF85,0xDF83,0xDF86,0xDF9E,0xDC53,0xDD17, 0,0xDD19,
+ 0xDD20,0xDD1F,0xDD23,0xDD18,0xDD21,0xDD29,0xDD24,0xDD26,0xDE5E,0xDE6F,
+ 0xDE6E,0xDE74,0xDE72,0xDE73,0xDF7D,
+ /* plane 5, row 75 */
+ 1 | (94 << 8), /* first, last */
+ 0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0x4C63,0xD867,0xD867,0xD867,0xD867,0xD867,0x4C61,0xD867,0x9BD8,
+ 0xD867,0x4C5A,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0x4CE3,0xD868,
+ 0xD868,0x9D7C,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0x4DAF,0xD869,0xD841,0xD841,0xD841,0xD84C,0xD844,
+ 0xD844,0xD844,0xD844,0x3613,0xD844,0xD844,0x3680,0xD845,0xD845,0xD846,
+ 0xD846,0xD846,0xD846,0xD847,0xD847,
+ 1, /* first low-surrogate */
+ 0xDF7E,0xDF85,0xDF7F,0xDF84,0xDC44,0xDCF5,0xDCF8,0xDD03,0xDCF6,
+ 0xDE28, 0,0xDE39,0xDDFB,0xDE0E,0xDDFD,0xDE1F, 0,0xDE03, 0,
+ 0xDE10, 0,0xDE0D,0xDE27,0xDE41,0xDC72,0xDC78,0xDC80, 0,0xDC85,
+ 0xDC7B, 0,0xDC7D,0xDC91,0xDC88,0xDCAA,0xDC8D,0xDC89,0xDC95,0xDC9B,
+ 0xDC8C,0xDC9E,0xDC7C,0xDC86,0xDC84,0xDE68,0xDEC5,0xDEC4,0xDEC9,0xDEC6,
+ 0xDF42,0xDF45,0xDF41,0xDF44,0xDFA6,0xDFC2,0xDC42,0xDC49,0xDC48,0xDC4A,
+ 0xDC4C,0xDC4B,0xDD17,0xDD18,0xDD15,0xDD52,0xDD54,0xDD53,0xDD9A,0xDD9B,
+ 0xDDDC,0xDDE4,0xDE91, 0,0xDEBA,0xDC51,0xDC5B,0xDCCF,0xDF05,0xDD13,
+ 0xDD15,0xDD14,0xDD23, 0,0xDD11,0xDD12, 0,0xDCF0,0xDE9B,0xDD12,
+ 0xDD16,0xDD17,0xDDB5,0xDCF4,0xDFB1,
+ /* plane 5, row 76 */
+ 1 | (94 << 8), /* first, last */
+ 0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0x4DB0,0xD850,0xD864,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD853,0xD853,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x7C46,
+ 0xD857,0xD857,0xD857,0xD87E,0xD857,
+ 1, /* first low-surrogate */
+ 0xDD79,0xDEFF,0xDEFC,0xDEFB,0xDC3F,0xDC44,0xDD9D,0xDD32,0xDD4C,
+ 0xDD2B,0xDD5A,0xDE1F,0xDE01,0xDE2D,0xDE27,0xDE59,0xDE5A,0xDE4D,0xDE58,
+ 0xDC23,0xDC25,0xDC2B,0xDEFF,0xDFAE,0xDFCB,0xDFCA,0xDFD0,0xDFCE,0xDFCC,
+ 0xDFD8,0xDFC6,0xDFD2,0xDFCF,0xDFC8,0xDF17, 0,0xDCC4,0xDE40,0xDCE9,
+ 0xDCF2,0xDCFC,0xDCEA,0xDCEB,0xDCFD,0xDC78,0xDC77,0xDC73,0xDC9E,0xDC79,
+ 0xDDA2,0xDE03,0xDF04,0xDF05,0xDCCE,0xDEBF,0xDEF6,0xDEF7,0xDC31,0xDC30,
+ 0xDCC9,0xDCC7,0xDF1C,0xDF28,0xDF1A,0xDF1E,0xDF1B,0xDF1F,0xDDBF,0xDDBB,
+ 0xDDBC,0xDDC0,0xDF1A,0xDCEF,0xDCEC,0xDCE9,0xDCF0,0xDCFE,0xDE34,0xDD6A,
+ 0xDD95,0xDD6C,0xDD72,0xDD67,0xDD60,0xDD6B,0xDD5E,0xDD6F,0xDD66, 0,
+ 0xDD62,0xDD5D,0xDD5C,0xDD65,0xDF50,
+ /* plane 5, row 77 */
+ 1 | (94 << 8), /* first, last */
+ 0xD858,0x4323,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD85A,0xD85A,0x4449,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD842,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0x45FA,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD869,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,
+ 1, /* first low-surrogate */
+ 0xDD9F, 0,0xDD9E,0xDDA6,0xDF35,0xDF38,0xDF36,0xDF3A,0xDFDC,
+ 0xDC7C,0xDCAB, 0,0xDCA8,0xDCA7,0xDD2B,0xDD2C,0xDD28,0xDD2B,0xDDA9,
+ 0xDDAA,0xDDAB,0xDDF8,0xDEB1,0xDEF0,0xDEEF,0xDCA8,0xDC8B,0xDC94,0xDC9E,
+ 0xDC8F,0xDC88,0xDC7E,0xDC81,0xDC30,0xDC9B,0xDC82,0xDC90,0xDC85,0xDC7F,
+ 0xDCA9,0xDCDE,0xDE0D, 0,0xDCCF,0xDCCB,0xDCD8,0xDCDD,0xDCD3,0xDCD0,
+ 0xDCD5,0xDCD6,0xDDD6,0xDF92,0xDF95,0xDDCB,0xDF8D,0xDF9B,0xDF9D,0xDF8F,
+ 0xDF9E,0xDFA6,0xDC96,0xDC92,0xDF16,0xDF2A,0xDF29,0xDF2C,0xDC15,0xDC12,
+ 0xDC11,0xDC13,0xDC88,0xDC8B,0xDC8A,0xDC87,0xDD17,0xDD16,0xDD1A,0xDE19,
+ 0xDE17,0xDF91,0xDF94,0xDD8B,0xDD90,0xDD8F,0xDD86,0xDD83,0xDD8E,0xDD87,
+ 0xDDA8,0xDD85,0xDDA6,0xDD82,0xDDA7,
+ /* plane 5, row 78 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0x4959,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0x4A7E,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0x4BA8,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BA9,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,
+ 1, /* first low-surrogate */
+ 0xDFB9,0xDFB7,0xDFB4,0xDFB6,0xDFB3,0xDFC6,0xDE3C,0xDE40,0xDE38,
+ 0xDF91,0xDFA6,0xDFDA,0xDCDA,0xDCD8,0xDCD9,0xDCDB,0xDCD7,0xDF16,0xDF12,
+ 0xDF1F, 0,0xDF14,0xDF1A,0xDF10,0xDCB3,0xDDAE,0xDDC1,0xDDB0,0xDDAF,
+ 0xDDB1,0xDDAD,0xDDB2,0xDDC4,0xDC3C,0xDC3F,0xDD61,0xDD66,0xDE3C,0xDE3B,
+ 0xDF2C, 0,0xDF2A,0xDF3E,0xDF2F,0xDF32,0xDF27,0xDF29,0xDF40,0xDFDF,
+ 0xDFDE,0xDC3C,0xDC3B,0xDC3E,0xDD21,0xDD46,0xDD3C,0xDD36,0xDD38,0xDD35,
+ 0xDE31,0xDE36,0xDE2D,0xDE33,0xDE2F,0xDE2E,0xDE35,0xDFAC,0xDFA9,0xDFA6,
+ 0,0xDD4C,0xDD43,0xDD41,0xDD4F,0xDD42,0xDD51, 0,0xDD40,0xDD50,
+ 0xDD45,0xDD4A,0xDD4B,0xDE83,0xDE82,0xDE81,0xDEE0,0xDF98,0xDF9F,0xDF9B,
+ 0xDF9A,0xDF99,0xDF96,0xDFAE,0xDF9E,
+ /* plane 5, row 79 */
+ 1 | (94 << 8), /* first, last */
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,
+ 0x4D54,0xD869,0x4D56,0xD869,0xD869,0xD869,0x4D6D,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0x4D8E,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD841,0xD841,0xD842,0xD842,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD847,0xD847,
+ 0xD847,0xD848,0xD849,0xD849,0xD849,
+ 1, /* first low-surrogate */
+ 0xDD09,0xDD0D,0xDE4E,0xDE4A,0xDE4D,0xDE40,0xDE3E,0xDE48,0xDE42,
+ 0xDE62,0xDE45,0xDE51,0xDCC6,0xDCD0,0xDCC0,0xDCB7,0xDCC2,0xDCBC,0xDCC5,
+ 0xDCDC,0xDCDB,0xDCD2,0xDCC7,0xDCB6,0xDCC9,0xDCCC,0xDCD1,0xDCCD,0xDCDA,
+ 0xDCBA,0xDCD3,0xDCCE,0xDCF6,0xDCBD,0xDCDD,0xDCC8,0xDD0D,0xDD35,0xDE71,
+ 0xDE6E,0xDE6F,0xDED6,0xDF4C,0xDF4F,0xDF54,0xDF53,0xDFC9,0xDFC8,0xDC03,
+ 0,0xDC04, 0,0xDC57,0xDC52,0xDC53, 0,0xDC56,0xDC5C,0xDC55,
+ 0xDD64,0xDD5D,0xDD5E,0xDDA2,0xDDA3, 0,0xDDE7,0xDDE6,0xDE98,0xDEAC,
+ 0xDEAF,0xDEAE,0xDC59,0xDDA9,0xDC2A,0xDCC7,0xDD41,0xDD37,0xDD35,0xDD33,
+ 0xDD39,0xDD32,0xDCFF,0xDD01,0xDCF8,0xDD1B,0xDD19,0xDFBF,0xDFBC,0xDFBE,
+ 0xDFBD,0xDD7D,0xDC46,0xDC47,0xDDA4,
+ /* plane 5, row 80 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84A,0xD84A,0xD84B,0x3A72,0xD84C,0xD84C,0x3C14,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD850,0xD850,0xD850,0xD850,
+ 0x3D93,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD85C,0xD853,0xD853,0xD853,0xD853,
+ 0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD857,0xD857,0xD857,0xD857,0x426F,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0x42B0,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD85A,0x352E,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,
+ 1, /* first low-surrogate */
+ 0xDE21,0xDE62,0xDE86, 0,0xDC2F,0xDC31, 0,0xDFF8,0xDFF5,
+ 0xDFF9,0xDFF2,0xDFFA,0xDFF3,0xDC14,0xDFFD,0xDC0F,0xDC0E,0xDC01,0xDD37,
+ 0xDD35,0xDD34,0xDD31,0xDE7A,0xDE7B,0xDC37,0xDD2B,0xDCFB,0xDD16,0xDD13,
+ 0,0xDD11,0xDD0F,0xDD1B,0xDD38,0xDCA4,0xDF09,0xDF07,0xDF0B,0xDCD3,
+ 0xDCD1,0xDCD8,0xDF1D,0xDFA9,0xDFD0,0xDE15,0xDF02,0xDF05,0xDF01,0xDF00,
+ 0xDF2E,0xDF30,0xDF2F,0xDF31,0xDDD2,0xDDD3,0xDD02,0xDE40,0xDE42,0xDE3B,
+ 0xDECE,0xDD98,0xDD8F,0xDD94,0xDD91, 0,0xDDBA,0xDD90,0xDD86,0xDD9A,
+ 0xDD8C,0xDD93,0xDD87,0xDD88,0xDD97,0xDD8D,0xDD9C,0xDDBD,0xDF3C,0xDF59,
+ 0,0xDDD1,0xDDBB,0xDDBE,0xDE5D,0xDFE2,0xDE05,0xDCBA, 0,0xDCF4,
+ 0xDDB2,0xDDF9,0xDEB7,0xDEB6,0xDC89,
+ /* plane 5, row 81 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,
+ 0xD861,0xD862,0xD862,0x4969,0x957E,0xD863,0xD863,0xD863,0xD863,0x49B4,
+ 0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A4D,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0x4A83,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,
+ 1, /* first low-surrogate */
+ 0xDCF9,0xDCD9,0xDCE8,0xDCD4,0xDCDB,0xDCE2,0xDCDF,0xDCD1,0xDCE9,
+ 0xDCEA,0xDE13,0xDE11,0xDCFA,0xDCF8,0xDCF4,0xDCFB,0xDD0E,0xDD02,0xDD0F,
+ 0xDF90,0xDFAD,0xDFA9,0xDD48,0xDF5A,0xDF4F,0xDF4E,0xDF55,0xDF54,0xDF4A,
+ 0xDFD5,0xDC18,0xDC8D,0xDD1D,0xDD19,0xDE26,0xDE28,0xDE2B,0xDE7D,0xDFA0,
+ 0xDF9A,0xDF9B,0xDDB5,0xDDAD,0xDDB2,0xDE94,0xDFC9,0xDE4E,0xDE4F,0xDE44,
+ 0xDE52,0xDCE9,0xDD39, 0, 0,0xDDC7,0xDDD3,0xDDC6,0xDDC3, 0,
+ 0xDDD2,0xDF66,0xDD7F,0xDD80,0xDD84,0xDD85,0xDDE3, 0,0xDE41,0xDE44,
+ 0xDE43,0xDF4E,0xDF4F, 0,0xDF49,0xDF4A,0xDF4B,0xDF43,0xDFE0,0xDFE5,
+ 0xDFE1,0xDFE6,0xDFE2,0xDC0C,0xDC40,0xDD49,0xDD4A,0xDD54,0xDD4C,0xDD55,
+ 0xDD56,0xDE3B,0xDE3D,0xDFA4,0xDFA8,
+ /* plane 5, row 82 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD866,0x4BB0,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0x4C0C,0xD867,0x4C18,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0x9C20,0xD867,0xD867,0x9C22,0xD867,0xD867,0x9C1E,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x4CF5,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,
+ 1, /* first low-surrogate */
+ 0xDFC3,0xDFBF,0xDFC8,0xDFC2,0xDFCA,0xDFCC,0xDFC9,0xDFBE,0xDFCD,
+ 0xDFC7,0xDFC5,0xDC5D, 0,0xDD6C,0xDD6B,0xDD70,0xDD6D,0xDD6F,0xDD89,
+ 0xDD84,0xDE8D,0xDE8A,0xDE8E,0xDE91,0xDFB5,0xDFB1,0xDFAF,0xDFB9,0xDFB7,
+ 0xDFB0, 0,0xDC17, 0,0xDC4F,0xDD19,0xDD10,0xDD18,0xDD11,0xDD1C,
+ 0xDD12,0xDE76,0xDE71, 0,0xDE7A,0xDE7F, 0,0xDE73,0xDEAB, 0,
+ 0xDE77,0xDE74,0xDE7E,0xDE9B,0xDE84,0xDE7C,0xDD29,0xDD2B,0xDD0E,0xDD00,
+ 0xDD0B,0xDCFE,0xDCFA,0xDD17,0xDCFF,0xDD0C,0xDD0F, 0,0xDD02,0xDD01,
+ 0xDCFC,0xDD49,0xDD06,0xDD12,0xDD13,0xDE78,0xDF5B,0xDF62,0xDF5F,0xDF5D,
+ 0xDFAB,0xDFD5,0xDFD4,0xDFD3,0xDC07,0xDC6C,0xDC70,0xDC6E,0xDC68,0xDC6D,
+ 0xDC77,0xDC6A,0xDCCE,0xDCEC,0xDD69,
+ /* plane 5, row 83 */
+ 1 | (94 << 8), /* first, last */
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD841,0xD841,0xD844,
+ 0xD845,0xD845,0xD846,0xD846,0xD846,0xD84C,0xD847,0xD847,0xD847,0xD848,
+ 0xD848,0xD849,0xD87E,0xD849,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84C,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84F,0xD850,0xD850,0xD851,0x3E0E,0xD851,0xD851,0xD852,0xD853,
+ 0x3FD8,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD859,
+ 1, /* first low-surrogate */
+ 0xDD68,0xDDA6,0xDDA9,0xDDAA,0xDE00,0xDE0D,0xDDF8,0xDDFC,0xDE0A,
+ 0xDDF7,0xDE01,0xDEB6,0xDEBB,0xDEB7,0xDEB9,0xDECA,0xDC69,0xDE25,0xDD59,
+ 0xDD07,0xDD09,0xDD22,0xDF07,0xDF04,0xDF0F,0xDCF8,0xDFC7,0xDFD1,0xDD7E,
+ 0xDF08,0xDC4A,0xDC98,0xDCB9,0xDE88,0xDE91,0xDE84,0xDE73,0xDE89,0xDE85,
+ 0xDC33,0xDF13,0xDC1D,0xDC1F,0xDC1C,0xDC20,0xDC1A,0xDC1B,0xDD39,0xDDAF,
+ 0xDEE5,0xDC3C,0xDD37,0xDD3A,0xDCBB, 0,0xDF10,0xDF0D,0xDFAF,0xDC11,
+ 0,0xDF0D,0xDF0C,0xDF0B,0xDCD4,0xDF3D,0xDF3E,0xDF3B,0xDF43,0xDF40,
+ 0xDF46,0xDC11,0xDDDD,0xDDDF,0xDDEA,0xDF4A,0xDD06,0xDDC1,0xDDB9,0xDDC6,
+ 0xDDB8,0xDDBB,0xDDC8,0xDDC5,0xDDBF,0xDDC7,0xDDC4,0xDF65,0xDF67,0xDDD7,
+ 0xDDDB,0xDDD4,0xDDD6,0xDFE8,0xDE0A,
+ /* plane 5, row 84 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0x8970,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD860,0x482C,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD861,0xD862,0xD862,0x496E,0xD862,0xD862,0xD863,0xD863,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A86,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BB3,0xD866,0xD866,0xD866,
+ 0x4BEB,0xD866,0xD866,0xD866,0xD866,
+ 1, /* first low-surrogate */
+ 0xDEBD,0xDEBE,0xDD1A,0xDD0D,0xDD0F,0xDD1B,0xDD10,0xDD11,0xDD13,
+ 0xDE18,0xDD20,0xDD1F,0xDD23,0xDD1D,0xDD37,0xDD25,0xDD24,0xDD2A,0xDD27,
+ 0xDD33,0xDD28,0xDD34,0xDFBA, 0,0xDC9D,0xDD4C,0xDF5C,0xDF6A,0xDF5D,
+ 0xDF65,0xDF63,0xDF5E,0xDC19,0xDC97,0xDE3F,0xDE33,0xDE32,0xDFA1,0xDFA5,
+ 0xDFA4,0xDFA2,0xDDC1, 0,0xDDC7,0xDDC4,0xDDC6,0xDDC5,0xDDD4,0xDDCA,
+ 0xDE53,0xDCF1,0xDD21, 0,0xDFB7,0xDF92,0xDDD4,0xDF44,0xDD98,0xDD9B,
+ 0xDD91,0xDD95,0xDD9A,0xDD92,0xDF53,0xDF57, 0,0xDF5C,0xDF5D,0xDF64,
+ 0xDFEA,0xDFED,0xDC42,0xDC43,0xDD64,0xDD61,0xDD60,0xDE7D,0xDFD4,0xDFD5,
+ 0xDFD9,0xDD87,0xDD99,0xDD8C,0xDD8A,0xDD8F, 0,0xDD8B,0xDD82,0xDD9B,
+ 0,0xDFC8,0xDFC4,0xDFCC,0xDFC7,
+ /* plane 5, row 85 */
+ 1 | (94 << 8), /* first, last */
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0x9C43,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD87E,0xD87E,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x9DE0,0xD868,0xD868,
+ 0x4D42,0xD868,0xD868,0xD868,0xD868,0x4D41,0xD868,0xD868,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0x4DAC,0xD841,0xD841,0xD842,0xD842,
+ 0xD842,0xD844,0xD845,0xD846,0xD848,0xD84C,0xffff,0x3B2F,0x3B2E,0xD84C,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C4D,0x3C7B,0xD84E,
+ 0xD84E,0xD84E,0xD84F,0xD850,0xD850,
+ 1, /* first low-surrogate */
+ 0xDFC3,0xDFC6,0xDFCB,0xDFCA,0xDFC9,0xDFCD,0xDC53,0xDD21,0xDD29,
+ 0xDD1D,0xDD24,0xDD28, 0,0xDEB1,0xDEB2,0xDEB5,0xDED6,0xDEAF,0xDECA,
+ 0xDEB8,0xDE12,0xDE11,0xDD45,0xDD47,0xDD34,0xDD6E,0xDD42,0xDD31,0xDD2E,
+ 0xDD56,0xDD38,0xDD37,0xDD4B,0xDD2D,0xDD33,0xDD36, 0,0xDD48,0xDEDC,
+ 0,0xDF66,0xDF6D,0xDF63,0xDF64, 0,0xDF67,0xDFD9,0xDC0B,0xDC7E,
+ 0xDC8B,0xDD26,0xDD2C,0xDD29,0xDD6F,0xDD6B,0xDD6D,0xDD6E,0xDE1C,0xDE11,
+ 0xDE10,0xDE24,0xDE12,0xDE15,0xDE17, 0,0xDC6F,0xDDAB,0xDC2E,0xDCC9,
+ 0xDF96,0xDD85,0xDEA0,0xDD2B,0xDF0D,0xDC36, 0, 0, 0,0xDFB1,
+ 0xDC4A,0xDC37,0xDC3C,0xDC38,0xDC3A,0xDC3E,0xDC49, 0, 0,0xDE80,
+ 0xDE7F,0xDEE3,0xDC3F,0xDD52,0xDD4E,
+ /* plane 5, row 86 */
+ 1 | (94 << 8), /* first, last */
+ 0xD850,0xD850,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,
+ 0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0x42B2,0xD858,0xD858,0xD85A,0xD85A,
+ 0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85E,0x4722,0xD85E,0xD85E,0xD85F,0xD85F,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD862,0xD862,
+ 0xD862,0x9459,0xD862,0x4970,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,
+ 1, /* first low-surrogate */
+ 0xDD4A,0xDD4B,0xDCD5,0xDED8,0xDF20,0xDFB3,0xDFB1,0xDFB0,0xDF17,
+ 0xDCD9,0xDF49,0xDC13,0xDDED,0xDDEB,0xDDEE,0xDD0A,0xDD0B,0xDE4A,0xDDD5,
+ 0xDDD7,0xDDDE,0xDDDC,0xDDEE,0xDF70, 0,0xDDD9,0xDFD7,0xDCCB,0xDCC7,
+ 0xDDFC,0xDD3B,0xDD39,0xDD4B,0xDD43,0xDD40,0xDD46,0xDD4D,0xDD43,0xDD47,
+ 0xDD4B,0xDD55,0xDD52,0xDF5F, 0,0xDF7C,0xDF7B,0xDFA8,0xDFA9,0xDDDE,
+ 0xDDD7,0xDDDD,0xDDD6,0xDDD8,0xDE9B,0xDFE0,0xDFE8,0xDFE6,0xDCF8,0xDCFB,
+ 0xDFBB, 0,0xDFB8, 0,0xDCC1,0xDCC0,0xDDA4,0xDDAB,0xDE4D,0xDF65,
+ 0xDF67,0xDF6A,0xDF66,0xDF69,0xDD73,0xDD80,0xDD6F,0xDD71,0xDFE4,0xDFE6,
+ 0xDFE7,0xDDA0,0xDDA4,0xDEA2,0xDEA7,0xDEA4,0xDFDE,0xDFDB,0xDC58,0xDC5C,
+ 0xDD2F,0xDD2E,0xDEDD,0xDEE4,0xDED8,
+ /* plane 5, row 87 */
+ 1 | (94 << 8), /* first, last */
+ 0xD867,0xD867,0xD867,0x4C95,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0x4D00,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0x4D02,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0x4D9F,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD841,0xD842,0xD844,0xD844,0xD845,0xD847,0xD848,0xD84A,0xD84A,
+ 0xD84B,0xD84B,0xD84C,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD850,0xD850,0xD851,0xD851,0xD852,0xD853,0xD854,0xD854,0xD855,0xD855,
+ 0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,
+ 0xD858,0xD858,0xD859,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDEE7,0xDEDA,0xDE75, 0,0xDD79,0xDD80,0xDD7F,0xDD7C,0xDD75,
+ 0xDD7B,0xDD82, 0,0xDD89,0xDD74,0xDD7D,0xDD7A,0xDD86,0xDDA8,0xDD72,
+ 0,0xDD8B,0xDD91,0xDDB3,0xDD81,0xDE82,0xDEE1,0xDEE3,0xDEE2,0xDF76,
+ 0xDF74,0xDF72,0xDF75,0xDC0E,0xDC0D,0xDC94,0xDC92,0xDC93,0xDC91,0xDC8F,
+ 0xDC95,0xDCD0,0xDCF7,0xDD76,0xDDAF, 0,0xDE26,0xDE25,0xDE2D,0xDEA0,
+ 0xDEC3,0xDCD7,0xDECC,0xDD79,0xDD7A,0xDD15,0xDFDB,0xDD85,0xDD70,0xDD7B,
+ 0xDEA5,0xDE9F,0xDF17,0xDFB2,0xDC39,0xDC40,0xDC4E,0xDD3E,0xDEE8,0xDEE7,
+ 0xDD66,0xDD61,0xDCDA,0xDF14,0xDCDF,0xDF18,0xDC39,0xDC3A,0xDF30,0xDF32,
+ 0xDD0E,0xDE4C,0xDDE8,0xDDF1,0xDDEB,0xDDEC,0xDF74,0xDF73,0xDDF1,0xDF42,
+ 0xDF3E,0xDF41,0xDD2C,0xDCD2,0xDDBB,
+ /* plane 5, row 88 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0xD85C,0xD85C,0x457D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,
+ 0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,
+ 0x4AF6,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0x4C12,0xD867,0xD867,0xD867,0x4C91,0xD867,0xD867,0xD867,0xD867,0x4C90,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,
+ 1, /* first low-surrogate */
+ 0xDD58,0xDD57,0xDD56,0xDD5A, 0,0xDD61,0xDD68,0xDD65,0xDD5F,
+ 0xDD64,0xDD5E,0xDD5B,0xDD67,0xDFC3,0xDCA2,0xDD53,0xDF7D,0xDC20,0xDFAE,
+ 0xDFAF,0xDFB0,0xDDE7,0xDDE6,0xDDE9,0xDFF1,0xDFEB,0xDFEA,0xDFE9,0xDE63,
+ 0xDD02,0xDCFE,0xDFDE,0xDCC2,0xDDE6,0xDF5D,0xDDAD,0xDF75,0xDF72,0xDF77,
+ 0,0xDE51,0xDFE8,0xDFED,0xDFEE,0xDDB9,0xDDA1,0xDDB6,0xDEAE,0xDFE8,
+ 0,0xDC1E,0xDD31,0xDD32, 0,0xDF0E,0xDF12,0xDF09,0xDF05, 0,
+ 0xDF03,0xDF1F,0xDF0D,0xDF0C,0xDF04,0xDF0A,0xDDC2,0xDDBF,0xDDC9,0xDDB2,
+ 0xDDC1,0xDDAF,0xDDB4,0xDDB0,0xDDB6,0xDDB7,0xDDBB,0xDDB1,0xDEF0,0xDF78,
+ 0xDF7A,0xDF79,0xDFE4,0xDFE6,0xDC9F,0xDC9D,0xDC98,0xDC99,0xDCF9,0xDD30,
+ 0xDD82,0xDD81,0xDDB3,0xDD7F,0xDE3A,
+ /* plane 5, row 89 */
+ 1 | (94 << 8), /* first, last */
+ 0xD869,0xD869,0xD844,0xD846,0xD846,0xD847,0xD847,0xD849,0xD84A,
+ 0x3A79,0xD84C,0xD84E,0xD84E,0xD84E,0x3C4E,0xD84E,0xD852,0xD855,0xD856,
+ 0xD856,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD859,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD860,
+ 0xD860,0xD860,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,
+ 0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0x4D1E,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,
+ 1, /* first low-surrogate */
+ 0xDE3E,0xDE48,0xDD86,0xDD36,0xDF13,0xDC22,0xDFDD,0xDDA7,0xDD7D,
+ 0,0xDF1C,0xDC65,0xDC60,0xDC67, 0,0xDF1A,0xDEE3,0xDF34,0xDD18,
+ 0xDE52,0xDDFC,0xDF79,0xDF78,0xDF76,0xDDFA,0xDDF8,0xDD2D,0xDCD6,0xDDBD,
+ 0xDDBF,0xDDBE,0xDD44,0xDD70,0xDD62,0xDD6E,0xDD6E,0xDD7C,0xDD74,0xDD78,
+ 0xDD70,0xDD79,0xDD71,0xDFCC,0xDCA7,0xDCA6,0xDF93,0xDC21,0xDC9C,0xDE9D,
+ 0xDFF4,0xDFF3,0xDDF0,0xDDB8,0xDDB6,0xDDBD,0xDF73,0xDF82,0xDD87,0xDE56,
+ 0xDE59,0xDFF6,0xDDC9,0xDDC5,0xDDC7,0xDDCA,0xDDC2,0xDDC4,0xDFF2,0xDFF0,
+ 0xDD3B,0xDD3A,0xDF26,0xDF28,0xDF34,0xDF2D,0xDDD7,0xDDD2,0xDDD6,0xDDDC,
+ 0xDDD3,0xDDD1,0xDE86, 0,0xDEEF,0xDEEE,0xDFE8,0xDCAC,0xDCA9,0xDCAA,
+ 0xDCAB,0xDCFB,0xDD33,0xDD88,0xDDB6,
+ /* plane 5, row 90 */
+ 1 | (94 << 8), /* first, last */
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD846,0xD847,0xD84E,
+ 0xD850,0xD850,0xD852,0xD855,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD858,0xD85C,0xD85C,0xD85D,0xD87E,0xD85E,0xD85F,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,
+ 0xD867,0x9C72,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD846,
+ 0xD847,0xD848,0xD848,0xD850,0xD850,0xD851,0xD852,0xD853,0xD855,0xD85A,
+ 0xD85A,0xD85A,0xD85C,0xD85D,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,
+ 0xD860,0xD862,0xD863,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDDB7,0xDDD0,0xDDCF,0xDE4F,0xDE59,0xDE4C,0xDF18,0xDFE0,0xDC69,
+ 0xDD73,0xDD72,0xDEE8,0xDDFB,0xDD1C,0xDE09,0xDE0A,0xDE08,0xDF7D,0xDF7F,
+ 0xDE67,0xDD7A,0xDD7B,0xDFD1,0xDDCB,0xDF9D,0xDC9D,0xDDFC,0xDDFB,0xDDFD,
+ 0xDFF5,0xDFF6,0xDC0F,0xDC1D,0xDDC7,0xDDC1,0xDDBF,0xDE54,0xDF7F,0xDFF5,
+ 0xDD8A,0xDD8C,0xDE5C,0xDC65,0xDDCF,0xDDD0,0xDEB8,0xDFFA,0xDC66,0xDF40,
+ 0xDF41, 0,0xDDF7,0xDDF3,0xDDEF,0xDDF4,0xDDED,0xDDF2,0xDDF1,0xDDF9,
+ 0xDCB4,0xDCFC,0xDDBC,0xDE5E,0xDE5B,0xDE5F,0xDE5D,0xDECF,0xDECE,0xDD3A,
+ 0xDFE1,0xDF15,0xDF14,0xDD78,0xDD79,0xDCE6,0xDFB8,0xDF22,0xDDFE,0xDCDB,
+ 0xDE06,0xDEC8,0xDD89,0xDD86,0xDCAD,0xDF99,0xDFD8,0xDC23,0xDD23,0xDFB5,
+ 0xDFF9,0xDD07,0xDC1E,0xDDFB,0xDF72,
+ /* plane 5, row 91 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD864,0xD865,0xD865,0xD865,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD847,0x3828,
+ 0xD84A,0xD84C,0xD84E,0xD850,0xD851,0xD854,0xD857,0xD85A,0xD85C,0xD85D,
+ 0xD85D,0xD85F,0xD860,0xD861,0xD864,0xD864,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD845,0xD84A,0xD856,0xD856,0xD856,0xD857,0xD858,
+ 0xD85C,0xD85D,0xD85D,0xD85E,0xD860,0xD861,0xD864,0xD864,0xD866,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,
+ 0x4D91,0xD87E,0xD857,0xD857,0xD85D,
+ 1, /* first low-surrogate */
+ 0xDF73,0xDF87,0xDC49,0xDE5D,0xDFF8,0xDC03,0xDF4E,0xDF4D,0xDF50,
+ 0xDF55,0xDE09,0xDE07,0xDE0C,0xDE03,0xDE06,0xDE0B,0xDE0A,0xDE89,0xDCBB,
+ 0xDCFF,0xDD36,0xDD8B,0xDE66,0xDE69,0xDE67,0xDEC2,0xDED2,0xDFE2, 0,
+ 0xDD88,0xDF5B,0xDC76,0xDD7D,0xDDA6,0xDF5A,0xDE17,0xDCDC,0xDD8F,0xDD94,
+ 0xDD95,0xDFB6,0xDE04,0xDFEE,0xDF8A,0xDFF9,0xDC07,0xDC1F,0xDC2A,0xDD45,
+ 0xDF5C,0xDF5B,0xDF61,0xDF5D,0xDE18,0xDE1F,0xDF83,0xDC16,0xDC14,0xDCBF,
+ 0xDCC0,0xDE73,0xDEC0,0xDD17,0xDD89,0xDD1E,0xDD1F,0xDE54,0xDE18,0xDE05,
+ 0xDD95,0xDD98,0xDD9B,0xDD59,0xDE08,0xDC01,0xDDCE,0xDFFA,0xDEBE,0xDD47,
+ 0xDF6A,0xDF69,0xDF68,0xDF67,0xDE25,0xDE28,0xDCC4,0xDD37,0xDD8D,0xDD8C,
+ 0,0xDD20,0xDE22,0xDF82,0xDFD9,
+ /* plane 5, row 92 */
+ 1 | (49 << 8), /* first, last */
+ 0xD863,0xD864,0xD866,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,
+ 0xD869,0xD857,0xD85A,0xD867,0xD867,0xD868,0xD868,0xD868,0xD869,0xD869,
+ 0xD847,0xD864,0xD867,0xD867,0xD868,0xD868,0xD869,0xD869,0xD850,0xD85C,
+ 0x4587,0xD865,0xD867,0xD868,0xD869,0xD855,0xD85E,0xD869,0xD868,0xD865,
+ 0xD868,0xD85C,0xD869,0xD85D,0xD864,0xD869,0xD869,0xD85C,0xD85A,0xD869,
+ 1, /* first low-surrogate */
+ 0xDC38,0xDFFB,0xDDE1,0xDC72,0xDD48,0xDF6C,0xDF70,0xDE31,0xDE30,
+ 0xDE79,0xDE23,0xDCF8,0xDC74,0xDF73,0xDE34,0xDF87,0xDFB2,0xDDC2,0xDE7D,
+ 0xDFE5,0xDF8C,0xDF77,0xDF75,0xDE38,0xDE3A,0xDE83,0xDE81,0xDD80,0xDD99,
+ 0,0xDC4A,0xDD4A,0xDE3C,0xDEC8,0xDE04,0xDCAF,0xDE89,0xDEFA,0xDE61,
+ 0xDE3F,0xDD93,0xDCC9,0xDFDE,0xDF91,0xDE8E,0xDE8D,0xDD98,0xDDC5,0xDEA5,
+ /* plane 5, row 93: --- */
+ /* plane 5, row 94: --- */
+ /* plane 6, row 1 */
+ 1 | (94 << 8), /* first, last */
+ 0xD87E,0xD840,0x3405,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD842,0xD842,0xD840,0xD840,0xD840,0xD840,0x3404,0xD87E,0xD840,0xD840,
+ 0xD840,0xD840,0xD841,0xD841,0xD87E,0xD841,0xD842,0x353F,0xD842,0xD842,
+ 0xD847,0xD848,0xD848,0xD841,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD87E,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD841,0xD842,0xD842,
+ 0xD841,0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD842,0xD844,
+ 0xD844,0xD845,0xD845,0xD846,0xD846,0xD846,0xD847,0xD847,0x382A,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0x38A7,
+ 0xD848,0xD848,0xD848,0xD849,0x38FA,
+ 1, /* first low-surrogate */
+ 0xDC02,0xDC62, 0,0xDC88,0xDCD0,0xDCCF,0xDD1E,0xDD1F,0xDD20,
+ 0xDD0E,0xDD2C,0xDC61,0xDC04,0xDC05,0xDC03, 0,0xDC01,0xDC7D,0xDC8D,
+ 0xDDA3,0xDDA4,0xDCDB,0xDD00,0xDC1E,0xDEA3,0xDC32, 0,0xDED4,0xDED5,
+ 0xDC23,0xDF2C,0xDF7A,0xDD03,0xDC07,0xDC08,0xDC8F,0xDC9C,0xDCD5,0xDD12,
+ 0xDD13,0xDD14,0xDD21,0xDDA8,0xDDA6,0xDC76,0xDD01,0xDD3D,0xDC14,0xDD3E,
+ 0xDE29,0xDE77,0xDE78,0xDEA6,0xDEA9,0xDEAC,0xDC34,0xDD04,0xDD7B,0xDE10,
+ 0xDE2F,0xDED7,0xDF1C,0xDF1F,0xDF1A,0xDC36,0xDF1E,0xDF9E,0xDF9A,0xDDA0,
+ 0xDDA1,0xDDD2,0xDDD3,0xDDB9,0xDF1D,0xDF55,0xDCFF,0xDFE7, 0,0xDC11,
+ 0xDC13,0xDC12,0xDDAF,0xDDB1,0xDC90,0xDF2D,0xDF7B,0xDF9D,0xDF9A, 0,
+ 0xDF9F,0xDFA0,0xDF9C,0xDCBD,
+ /* plane 6, row 2 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD84C,0xD84C,0xD84F,0xD851,0xD87E,0xD855,0xD858,0xD858,
+ 0xD840,0xD840,0x3400,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,
+ 0xD841,0xD841,0xD841,0x34DB,0xD842,0xD841,0xD841,0xD841,0xD87E,0xD842,
+ 0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,0xD840,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD87E,
+ 0xD842,0xD842,0xD842,0xD840,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,
+ 1, /* first low-surrogate */
+ 0xDDAA,0xDC6C,0xDC91,0xDC74,0xDD6A,0xDD29,0xDE05,0xDE6B,0xDE6A,
+ 0xDCE0,0xDC12, 0,0xDC7F,0xDCA0,0xDC99,0xDC95,0xDC9E,0xDCDF,0xDCDE,
+ 0xDDAF,0xDDAD,0xDDB0,0xDCDF,0xDD43,0xDD41,0xDD48,0xDD75,0xDC1A,0xDE32,
+ 0xDE7B,0xDE79,0xDEB3, 0,0xDFA7,0xDEB2,0xDEB0,0xDEB4,0xDC29,0xDCCD,
+ 0xDCCE,0xDC2B,0xDD10,0xDD80,0xDDD3,0xDE30,0xDC98,0xDE2F,0xDE31,0xDEDA,
+ 0xDED9,0xDF27,0xDF28,0xDF21,0xDF25,0xDFA6,0xDFA2,0xDFA1,0xDFA4,0xDC39,
+ 0xDFAA,0xDFA5,0xDFA3,0xDC64,0xDE3F,0xDE44,0xDD1B,0xDD53,0xDD84,0xDD86,
+ 0xDDD5,0xDC60,0xDD3E,0xDD40,0xDFCA,0xDFC9,0xDC26,0xDD00,0xDD31,0xDD3C,
+ 0xDD30,0xDD33,0xDD32,0xDD38,0xDC34,0xDC53,0xDC54,0xDDB4,0xDDB2,0xDF2F,
+ 0xDFA5,0xDFA7,0xDFA4,0xDFA8,0xDFA9,
+ /* plane 6, row 3 */
+ 1 | (94 << 8), /* first, last */
+ 0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84C,0xD84C,0xD84C,0xD84E,0xD850,0xD851,0xD851,0xD851,0xD852,
+ 0xD852,0xD852,0xD853,0xD856,0xD85A,0xD860,0xD860,0xD841,0xD867,0xD867,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0x3438,0xD840,0xD840,0xD840,
+ 0xD87E,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD85A,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x6530,0xD842,0xD842,0xD842,
+ 0xD842,0x353A,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD847,
+ 1, /* first low-surrogate */
+ 0xDFA2,0xDFA3,0xDFA6,0xDC81,0xDC80,0xDDAD,0xDE24,0xDE65,0xDE68,
+ 0xDE69,0xDD3C,0xDD3B,0xDF5D,0xDD44,0xDD82,0xDCF1,0xDD6B,0xDF1B,0xDCEB,
+ 0xDFBA,0xDFD3,0xDD13,0xDD22,0xDEF4,0xDE0F,0xDE10,0xDD07,0xDC0B,0xDC0A,
+ 0xDC19,0xDC1A,0xDC18,0xDC66,0xDC82,0xDCA8,0xDCE5,0xDCE7,0xDCE4,0xDD15,
+ 0xDD23,0xDD24,0xDD43,0xDDC3,0xDDBC,0xDDBB, 0,0xDDB7,0xDDB9,0xDDCF,
+ 0xDC0D,0xDC7A,0xDC7B,0xDCE1,0xDCE0,0xDD09,0xDD4D,0xDC16,0xDD4B,0xDD79,
+ 0xDDB1,0xDE36,0xDE35,0xDE37,0xDE38,0xDE7F,0xDE80,0xDE81,0xDD53,0xDE7E,
+ 0xDECD,0xDEBF,0xDEBE,0xDEC2,0xDEB8,0xDEC1, 0,0xDD31,0xDD2F,0xDD6F,
+ 0xDD82, 0,0xDD87,0xDD86,0xDD8D,0xDD94,0xDDD7,0xDDD4,0xDDD8,0xDE16,
+ 0xDE14,0xDE2E,0xDE36,0xDE37,0xDFEE,
+ /* plane 6, row 4 */
+ 1 | (94 << 8), /* first, last */
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD844,0xD844,0xD844,0xD844,0xD87E,
+ 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD87E,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,
+ 0xD87E,0xD846,0xD846,0xD87E,0xD846,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD840,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD840,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,
+ 0x38C9,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 1, /* first low-surrogate */
+ 0xDEE0,0xDEE5,0xDEDF,0xDF2B,0xDF29,0xDF2D,0xDF2F,0xDFB7,0xDFC9,
+ 0xDFC1,0xDFCA,0xDFB2,0xDFAC,0xDFAE,0xDDB2,0xDDA8,0xDDB0,0xDDA7,0xDC51,
+ 0xDE52,0xDE4A,0xDD56,0xDD55,0xDD5F,0xDD5E,0xDD88,0xDC5D,0xDDDD,0xDDE2,
+ 0xDDE1,0xDDDF,0xDDE0,0xDEAF,0xDEB1,0xDEBA,0xDD45,0xDD43,0xDDBD,0xDDC8,
+ 0xDC6C,0xDDBE,0xDDBF,0xDC74,0xDF59,0xDC29,0xDC2C,0xDC2F,0xDC2D,0xDC2E,
+ 0xDD04,0xDD02,0xDD01,0xDD40,0xDD4A,0xDD3F,0xDD4F,0xDD41,0xDD4E,0xDFEB,
+ 0xDFEC,0xDCAC,0xDC5B,0xDC63,0xDC5A,0xDC59,0xDDDC,0xDDDB,0xDDD9,0xDDE0,
+ 0xDDDD,0xDC20,0xDFB0,0xDFB1,0xDFB2,0xDFB6,0xDC51,0xDC52,0xDC50,0xDC84,
+ 0,0xDC83,0xDDC3,0xDDB8,0xDDB9,0xDDB2,0xDD90,0xDE26,0xDE29,0xDE6E,
+ 0xDD40,0xDD3E,0xDD41,0xDF5E,0xDFBB,
+ /* plane 6, row 5 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84C,0xD84C,0xD87E,0xD84E,0x3C4F,0xD84E,0xD84E,0xD84E,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD850,0xD850,
+ 0xD850,0xD851,0xD851,0xD851,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,
+ 0xD855,0xD87E,0xD855,0xD855,0xD858,0xD858,0xD858,0xD858,0xD859,0xD841,
+ 0xD859,0x43CD,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x4492,0xD85A,0xD85A,
+ 0xD87E,0xD87E,0xD85F,0xD860,0xD840,0xD861,0xD861,0xD861,0xD861,0xD87E,
+ 0xD861,0xD863,0xD842,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD87E,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0x3445,0xD87E,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0x34B5,0xD841,0x34B6,0xD841,
+ 1, /* first low-surrogate */
+ 0xDFBC,0xDFB9,0xDCEF,0xDC80, 0,0xDD45,0xDDBA,0xDDBD,0xDC56,
+ 0xDC55,0xDC75,0xDC77,0xDC81,0xDCFA,0xDC83,0xDC8B,0xDC84,0xDD86,0xDD83,
+ 0xDD8B,0xDD6D,0xDE16,0xDF28,0xDCEA,0xDFD4,0xDC03,0xDD15,0xDF3D,0xDF3E,
+ 0xDC16,0xDD4C,0xDE06,0xDF4D,0xDE22,0xDE73,0xDE6D,0xDE6E,0xDCB1,0xDD4E,
+ 0xDE2D, 0,0xDCF9,0xDD52,0xDF00,0xDEFC,0xDEFA, 0,0xDEF7,0xDEF8,
+ 0xDD90,0xDDC4,0xDC27,0xDE11,0xDCAE,0xDC50,0xDC4F,0xDC4D,0xDE71,0xDDE2,
+ 0xDE72,0xDE18,0xDE44,0xDC21,0xDC67,0xDCAF,0xDCB0,0xDC29,0xDD17,0xDD22,
+ 0xDC03,0xDC25,0xDD28,0xDDFF,0xDDD9,0xDDDB,0xDDDE,0xDDF2,0xDDFE,0xDDF4,
+ 0xDDDD, 0,0xDC04,0xDE01,0xDDDC,0xDC7D,0xDC81,0xDC7E,0xDC7F,0xDCE5,
+ 0xDD0F, 0,0xDD0A, 0,0xDD0B,
+ /* plane 6, row 6 */
+ 1 | (94 << 8), /* first, last */
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0x3537,0xD842,0x3530,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD854,0xD842,0xD844,0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0x373E,0x374D,
+ 0x3751,0xD846,0xD846,0xD846,0xD846,
+ 1, /* first low-surrogate */
+ 0xDD51,0xDD52,0xDD50,0xDDB8,0xDE3D,0xDE3E,0xDE3C,0xDE87,0xDED7,
+ 0xDEDB,0xDECF,0xDEE0,0xDC4C,0xDC42,0xDCD4,0xDD11,0xDD14,0xDD15,0xDD12,
+ 0xDD33,0xDD35, 0,0xDD71, 0,0xDD91,0xDD93,0xDD95,0xDDDC,0xDE42,
+ 0xDE40,0xDFA6,0xDEE6,0xDE8F,0xDF32,0xDC37,0xDF31,0xDFF5,0xDFCD,0xDFDE,
+ 0xDFD5,0xDFDA,0xDFEE,0xDFEC,0xDFCF,0xDFCE,0xDC3D,0xDFCC,0xDFF3,0xDDC1,
+ 0xDDC4,0xDDC6,0xDDB4,0xDDC3,0xDDB8,0xDDBB,0xDDB7,0xDDBC,0xDDBF,0xDDC7,
+ 0xDDBE,0xDE60,0xDE5D,0xDE76,0xDE6C,0xDE75,0xDE5B,0xDE71,0xDE73,0xDE61,
+ 0xDE5A,0xDE62,0xDE72,0xDE5F,0xDE58,0xDD1E,0xDD58,0xDD8B,0xDD8A,0xDDF4,
+ 0xDDF0,0xDED2,0xDECD,0xDECE,0xDEBC,0xDED0,0xDD46,0xDD47, 0, 0,
+ 0,0xDDCE,0xDDCF,0xDDCC,0xDDCB,
+ /* plane 6, row 7 */
+ 1 | (94 << 8), /* first, last */
+ 0xD87E,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x3873,
+ 0xD848,0xD848,0xD87E,0xD848,0xD85A,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0x39BE,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,
+ 0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,
+ 1, /* first low-surrogate */
+ 0xDC72,0xDF60,0xDF5F,0xDF5D,0xDFD4,0xDC3A,0xDC38,0xDC3C,0xDC36,
+ 0xDD08,0xDD7E,0xDD5E,0xDD6E,0xDD53,0xDD70,0xDD57,0xDD5D,0xDD63,0xDD7A,
+ 0xDD79,0xDD93,0xDC81,0xDC1D,0xDC68,0xDC73,0xDC74,0xDC66,0xDC6F,0xDC75,
+ 0xDC7A,0xDC70,0xDC6D,0xDC65,0xDD8A,0xDDED,0xDDE9,0xDDE3,0xDDEF, 0,
+ 0xDDEA,0xDF31,0xDC91,0xDF38,0xDF20,0xDF35,0xDF3A,0xDF81,0xDF80,0xDFB8,
+ 0xDFC1,0xDFBA,0xDC88,0xDCCF,0xDCCA,0xDCC7,0xDCC5,0xDCC8,0xDCD0,0xDCC9,
+ 0xDDBB,0xDDB6,0xDDBD,0xDC9D,0xDDB4,0xDDC1,0xDDD1,0xDDD2,0xDDCC,0xDDD4,
+ 0xDDCB,0xDDCE,0xDDD5,0xDDD8,0xDD95,0xDD93,0xDD99,0xDD96, 0,0xDE89,
+ 0xDE94,0xDE91,0xDE8F,0xDE84,0xDE97,0xDE86,0xDE85,0xDE8C,0xDEF2,0xDEED,
+ 0xDEEF,0xDCD9,0xDD46,0xDD47,0xDD4B,
+ /* plane 6, row 8 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0xD84E,0x3C1E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0x3CC8,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0x3CC3,0x3CC7,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0x3F56,0xD853,0x3540,0xD853,
+ 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,
+ 0xD855,0xD856,0xD856,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD841,0xD87E,0xD85A,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDD50,0xDD4A,0xDD4E,0xDD4C,0xDD48,0xDF63,0xDF61,0xDF62,0xDF60,
+ 0xDFC3,0xDFC5,0xDFC1,0xDFD0,0xDCDC,0xDC82, 0,0xDC86,0xDC84,0xDD4C,
+ 0xDD48,0xDDB8,0xDDBF,0xDDC1,0xDDC6,0xDDC5,0xDDC7,0xDDC0,0xDDC3,0xDEED,
+ 0xDF03,0xDF22,0xDF21,0xDC9F,0xDC90,0xDC9E, 0,0xDCA0,0xDC94,0xDC95,
+ 0xDCA1, 0, 0,0xDD9A,0xDD90,0xDCF2,0xDCF3,0xDD6E,0xDDAB,0xDDA9,
+ 0xDE1A,0xDE18,0xDE1B,0xDF60,0xDF4C,0xDF42,0xDF33,0xDF3F,0xDF3E,0xDF38,
+ 0xDF43,0xDF46,0xDF36,0xDCEE,0xDCF5,0xDCF4, 0,0xDC1B, 0,0xDD2B,
+ 0xDD29,0xDD2A,0xDD2E,0xDC3F,0xDCE6,0xDFA7,0xDFA8,0xDC18,0xDE08,0xDF50,
+ 0xDF53,0xDE56,0xDE55,0xDE6F,0xDE7F,0xDCB3,0xDE3A,0xDE38,0xDE37,0xDE36,
+ 0xDD54,0xDD80,0xDCDD,0xDCFC,0xDCFA,
+ /* plane 6, row 9 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD87E,0xD87E,0xD85C,
+ 0xD87E,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD863,0x49BD,0xD87E,0xD840,0xD840,0xD845,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD848,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0x351A,
+ 0xD842,0xD842,0x352C,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,
+ 1, /* first low-surrogate */
+ 0xDD33,0xDF04,0xDF07,0xDF08,0xDF06,0xDF09,0xDD91,0xDD93,0xDE1E,
+ 0xDDD2,0xDC0B,0xDC43,0xDC52,0xDC58,0xDC5E,0xDE68,0xDE8D,0xDE82,0xDE7B,
+ 0xDC58, 0,0xDC00,0xDC2C,0xDC2E,0xDE0B,0xDC2D,0xDC69,0xDCB2,0xDCB6,
+ 0xDCA9,0xDCED,0xDD19,0xDD4F,0xDE16,0xDE03,0xDE0E,0xDE04,0xDE07,0xDE10,
+ 0xDE27,0xDE28,0xDE0D,0xDE29,0xDE0F,0xDE22,0xDE11,0xDC85,0xDC84,0xDC83,
+ 0xDC8A,0xDC86,0xDD10,0xDD58,0xDD5A,0xDF0C,0xDDC4,0xDDC5,0xDE47,0xDE49,
+ 0xDE4A,0xDE4B,0xDDBB,0xDE8D,0xDE8B,0xDF07,0xDF06,0xDC20,0xDEEF,0xDEF0,
+ 0xDEED,0xDEF9,0xDF02,0xDEE7,0xDEF4,0xDEF7,0xDEF1,0xDC53,0xDC55, 0,
+ 0xDCDA,0xDCD9, 0,0xDD38,0xDD99,0xDDA2,0xDD9C,0xDD9A,0xDD9B,0xDDE5,
+ 0xDDE3,0xDDE1,0xDDE0,0xDDE2,0xDDE4,
+ /* plane 6, row 10 */
+ 2 | (94 << 8), /* first, last */
+ 0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0x3549,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0x357C,0xD843,0xD843,0xD87E,0xD843,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0x37BF,0xD847,0xD847,0xD847,
+ 0xD847,0x37BA,0xD847,0xD847,0xD848,
+ 2, /* first low-surrogate */
+ 0xDDE8,0xDC2F,0xDE13,0xDE56,0xDE4B,0xDE4A,0xDE4D,0xDE4C,
+ 0,0xDEEA,0xDEE9,0xDEEB,0xDEEC,0xDF3A,0xDF3C,0xDF39,0xDF3B,0xDC14,
+ 0xDC0E,0xDC35,0xDC0A,0xDC3F,0xDC38, 0,0xDC4E,0xDC17,0xDC3F,0xDC1E,
+ 0xDDB6,0xDDCE,0xDDCA,0xDDCB,0xDDCC,0xDDC9,0xDEB4,0xDEAC,0xDE88,0xDE86,
+ 0xDE8C,0xDE93,0xDE8A,0xDEA4,0xDE87,0xDEA5,0xDEA6,0xDE85,0xDEA3,0xDE8E,
+ 0xDD1F,0xDD63,0xDD8D,0xDDFA,0xDDFB,0xDE09,0xDDFE,0xDDFF,0xDE02,0xDE04,
+ 0xDDFD,0xDE05,0xDEF9,0xDEF7,0xDEDB,0xDEDA,0xDD51,0xDD50,0xDD57,0xDDE2,
+ 0xDDD8,0xDDDA,0xDDDC,0xDF20,0xDF1F,0xDF69,0xDFDD,0xDC40,0xDC41,0xDC43,
+ 0xDD0D,0xDD0C,0xDD87,0xDDA9,0xDD92,0xDD85, 0,0xDD8C,0xDDA2,0xDD8F,
+ 0xDD8A, 0,0xDD8D,0xDFF1,0xDC37,
+ /* plane 6, row 11 */
+ 1 | (94 << 8), /* first, last */
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD849,0xD87E,0xD849,0xD849,0xD849,0xD849,
+ 0x38D8,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,
+ 0x39B2,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A,0xD84A,0xD87E,0xD84A,0xD84A,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD851,0xD84B,0xD84C,0xD84C,0xD84C,
+ 0x3AC4,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 1, /* first low-surrogate */
+ 0xDC8B,0xDC87,0xDC82,0xDD8E,0xDDBC,0xDDF8,0xDDFA,0xDDEB,0xDDF9,
+ 0xDDFC,0xDE05,0xDF1B,0xDF1D,0xDF1E,0xDC92,0xDF3C,0xDF3E,0xDF84,0xDFC8,
+ 0xDFC9,0xDFD3,0xDFC7,0xDFD2,0xDC55,0xDC96,0xDC8C,0xDC8A,0xDCD5,0xDCD3,
+ 0,0xDCD8,0xDDD0,0xDDEE,0xDDF1,0xDDFB,0xDDD3,0xDDEC,0xDDCD,0xDE15,
+ 0xDE26,0xDE0E,0xDE27,0xDE2A,0xDE00,0xDE04,0xDE28,0xDE08,0xDE14,0xDD9B,
+ 0,0xDDA1,0xDD9D,0xDDA0,0xDD9E,0xDDA2,0xDD9C,0xDE32,0xDE34,0xDE93,
+ 0xDE96,0xDE90,0xDEB4,0xDEB5,0xDCB6,0xDEB6,0xDEC2,0xDCB5,0xDEBA,0xDE92,
+ 0xDEFB,0xDF05,0xDEF3,0xDEFE,0xDEFD,0xDD5D,0xDEFA,0xDC43,0xDC95,0xDC94,
+ 0,0xDD6F,0xDD73,0xDD5C,0xDD5B,0xDD66,0xDD74,0xDD63,0xDD67,0xDD60,
+ 0xDD62,0xDD71,0xDD72,0xDD5E,0xDF23,
+ /* plane 6, row 12 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84C,0xD84C,0xD87E,0xD84C,0xD84D,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD87E,0xD840,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,
+ 0xD84F,0xD87E,0xD850,0xD850,0xD87E,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0x3E2B,0xD851,0xD851,0xD851,0x3E61,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0x72DD,
+ 1, /* first low-surrogate */
+ 0xDF26,0xDF64,0xDCD6,0xDFF2,0xDC01,0xDFDD,0xDFDC,0xDFDB,0xDFF3,
+ 0xDFFD,0xDFD8,0xDFF8,0xDFFB,0xDC83,0xDC8C,0xDC8E,0xDD49,0xDD54,0xDD52,
+ 0xDD4E,0xDD58,0xDD51,0xDD55,0xDD53,0xDD57,0xDD50,0xDD4F,0xDD4D,0xDDD2,
+ 0xDDD3,0xDDC9,0xDDD4,0xDEEF,0xDCF8,0xDCB1,0xDF05,0xDF04,0xDF2E,0xDF2D,
+ 0xDC45,0xDC5B,0xDC5A,0xDC59,0xDC9D,0xDC8E,0xDCBC,0xDCDD,0xDCBA,0xDCFD,
+ 0xDCD8,0xDCCB,0xDCD9,0xDCDA,0xDCC4,0xDCB8,0xDCBF,0xDCDB,0xDCC1,0xDCFC,
+ 0xDCC5,0xDD19,0xDDB1,0xDDAF,0xDD18,0xDCF7,0xDCF6,0xDCF8,0xDD50,0xDD51,
+ 0xDD71,0xDD70,0xDDB0,0xDDAF,0xDDAE,0xDDAD,0xDE25,0xDE2C,0xDE22,0xDE33,
+ 0xDE34, 0,0xDF3A,0xDF40,0xDF68, 0,0xDF64,0xDF5C,0xDF57,0xDF53,
+ 0xDF4F,0xDF51,0xDF54,0xDF66,
+ /* plane 6, row 13 */
+ 1 | (94 << 8), /* first, last */
+ 0x3EB2,0xD852,0xD852,0xD87E,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD847,0xD840,0xD840,0xD853,0xD853,0xD853,0xD853,0xD849,0xD853,
+ 0xD844,0xD853,0xD853,0xD853,0xD853,0xD853,0xD87E,0xD854,0xD854,0xD87E,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD87E,0xD87E,0xD855,
+ 0xD855,0x4129,0xD855,0xD856,0xD856,0xD856,0x4192,0xD856,0xD856,0xD857,
+ 0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,
+ 0xD84D,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 2, /* first low-surrogate */
+ 0xDD0D,0xDD08,0xDD2B,0xDCFA,0xDEEA,0xDF2A,0xDFBB,0xDFD5,
+ 0xDFD7,0xDDA4,0xDCF0,0xDCB5,0xDC06,0xDC28,0xDC22,0xDC21,0xDC56,0xDC23,
+ 0xDDCD,0xDD30,0xDD34,0xDFC9,0xDFCA,0xDFC8,0xDD3D,0xDC44,0xDCF3,0xDD41,
+ 0xDCF8,0xDCFC,0xDCF6,0xDCFB,0xDCF7,0xDD00,0xDD02,0xDD40,0xDD4D,0xDC24,
+ 0xDE0D, 0,0xDF62,0xDD30,0xDD2B,0xDD2A, 0,0xDD2D,0xDEDA,0xDE28,
+ 0xDF86,0xDE77,0xDE7C,0xDF50,0xDF4E,0xDFF2,0xDCB2,0xDCCE,0xDCCF,0xDCE5,
+ 0xDC07,0xDD35,0xDD31,0xDE13,0xDE2B,0xDE2C,0xDE45,0xDE60,0xDE41,0xDE58,
+ 0xDE47,0xDE5B,0xDE50,0xDD82,0xDE5F,0xDE4A,0xDE56,0xDE43,0xDE44,0xDE51,
+ 0xDCFD,0xDD34,0xDD35,0xDD54,0xDD55,0xDE0C,0xDE0B,0xDE0A,0xDEF9,0xDF35,
+ 0xDF24,0xDF13,0xDF1C,0xDF69,0xDF25,
+ /* plane 6, row 14 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD87E,0xD87E,0xD87E,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD864,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0x3458,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD87E,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,
+ 1, /* first low-surrogate */
+ 0xDF21,0xDD95,0xDD96,0xDD98,0xDE20,0xDDA9,0xDDA8,0xDDDE,0xDE09,
+ 0xDE0A,0xDE0B,0xDFE3,0xDC07,0xDCB2,0xDCB3,0xDD5D,0xDE58,0xDE86,0xDE87,
+ 0xDFB9,0xDFB8,0xDC0C,0xDC44,0xDC66,0xDC80,0xDC75,0xDC6D,0xDC7E,0xDC67,
+ 0xDC81,0xDC77,0xDEA8,0xDEA2,0xDEA5,0xDE9B,0xDC57,0xDE0F,0xDE32,0xDE2C,
+ 0xDE33,0xDDE7,0xDC6E,0xDCB7,0xDCF6,0xDCF2,0xDCF3,0xDD17,0xDD30,0xDD54,
+ 0xDD53,0xDE52,0xDE3D,0xDE3C,0xDE34,0xDE33,0xDE54,0xDE2F, 0,0xDE55,
+ 0xDE3F,0xDE37,0xDE56,0xDE61,0xDE58,0xDC06,0xDE3B,0xDE32,0xDE2E,0xDE3E,
+ 0xDC3B,0xDC8C,0xDC8D,0xDD13,0xDD16,0xDD12,0xDD5B,0xDD8A,0xDDD7,0xDDCE,
+ 0xDE50,0xDE51,0xDE4F,0xDE8E,0xDE8F,0xDEF2,0xDC21,0xDF28,0xDF1A,0xDF25,
+ 0xDF1D,0xDF14,0xDF20,0xDF1F,0xDF1B,
+ /* plane 6, row 15 */
+ 1 | (94 << 8), /* first, last */
+ 0xD841,0xD841,0xD841,0xD841,0xD87E,0xD842,0x351C,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,0xD87E,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0x3637,
+ 0xD844,0xD844,0xD844,0xD852,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,
+ 1, /* first low-surrogate */
+ 0xDF17,0xDF15,0xDF1C,0xDF13,0xDC25,0xDC60, 0,0xDC66,0xDCE3,
+ 0xDCDE,0xDCE0,0xDCE1,0xDD1A,0xDD1B,0xDD18,0xDD1C,0xDD19,0xDD42,0xDD40,
+ 0xDD3E,0xDD44,0xDD74,0xDD43,0xDC2D,0xDDF2,0xDE1B,0xDE19,0xDE1E,0xDC30,
+ 0xDE5E,0xDE66,0xDE5D,0xDE5A,0xDE5F,0xDE60,0xDE5B,0xDE5C,0xDE59,0xDEF0,
+ 0xDEF1,0xDF43,0xDF40,0xDF42,0xDF41,0xDF3F,0xDC57,0xDC69,0xDC6F,0xDCAB,
+ 0xDC71,0xDC93,0xDC56,0xDC90,0xDC6D,0xDC6C,0xDC70,0xDC66,0xDC67,0xDDD7,
+ 0xDDB5,0xDDDB,0xDDD8,0xDDD5,0xDDD4,0xDEBA,0xDEB7,0xDEBE,0xDEB9, 0,
+ 0xDEE0,0xDEDD,0xDEDE,0xDD18,0xDED8,0xDEBD,0xDEDB,0xDD1D,0xDD25,0xDF21,
+ 0xDF0C,0xDF29,0xDF2D,0xDF1B,0xDF0E,0xDF1F,0xDF04,0xDF1C,0xDF05,0xDF06,
+ 0xDF20,0xDF0D,0xDF2A,0xDF23,0xDF11,
+ /* plane 6, row 16 */
+ 1 | (94 << 8), /* first, last */
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD853,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD848,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD87E,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x3843,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0x38B4,0xD841,0xD840,0xD848,0xD848,
+ 1, /* first low-surrogate */
+ 0xDD5C,0xDD66,0xDD5B,0xDD4F,0xDD5E,0xDD5D,0xDDF1,0xDDEA,0xDDF4,
+ 0xDDEB,0xDDF0,0xDDFA,0xDDFB,0xDF28,0xDF2C,0xDF6B,0xDF2A,0xDF6A,0xDF6F,
+ 0xDFDB,0xDFE0,0xDFD1,0xDFE3,0xDFE5,0xDFE7,0xDC4D,0xDC55,0xDC54,0xDC53,
+ 0xDC52,0xDC4E,0xDC60,0xDDC0,0xDD0F,0xDD11,0xDD13,0xDDC6,0xDDB3,0xDDC7,
+ 0xDDD2,0xDDB8,0xDDAC,0xDDAE,0xDDCF,0xDDC5,0xDC7B,0xDDCC,0xDDAB,0xDDC9,
+ 0xDDB9,0xDFFB,0xDFF8,0xDFF7,0xDFF9,0xDC20,0xDC3B,0xDC39,0xDC9E,0xDC9A,
+ 0xDCAA,0xDCAB,0xDCAF,0xDC96,0xDCA9,0xDCA6,0xDC91, 0,0xDCAE,0xDC9F,
+ 0xDCAC,0xDCA0,0xDD92,0xDD91,0xDDBF,0xDE17,0xDE0A,0xDE0C,0xDF4A,0xDF46,
+ 0xDF34,0xDF45,0xDF43,0xDF44,0xDC93,0xDF87,0xDF86,0xDF8A,0xDFDA,0xDFD8,
+ 0,0xDD18,0xDD34,0xDFD6,0xDFD4,
+ /* plane 6, row 17 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD849,0xD849,0xD849,0x38E0,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD855,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0x3AE4,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0x6804,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3C26,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 1, /* first low-surrogate */
+ 0xDC54,0xDC59,0xDC5A,0xDC57, 0,0xDCDD,0xDCE9,0xDCE0,0xDE05,
+ 0xDE12,0xDE13,0xDE07,0xDE16,0xDE23,0xDE02,0xDCA1,0xDE4A,0xDE36,0xDE40,
+ 0xDE56,0xDE43,0xDCA0,0xDE4B,0xDE46,0xDE3E,0xDE49,0xDDA7,0xDDB6,0xDDA6,
+ 0xDDA8,0xDDAC,0xDDA9,0xDDAB,0xDE38,0xDE37,0xDE39,0xDE41,0xDE3E,0xDEC0,
+ 0xDEBB,0xDEBF,0xDEBD,0xDEFE,0xDF1E,0xDEEE,0xDEFC,0xDCB7,0xDEF9,0xDF06,
+ 0xDEE4,0xDEE9,0xDEE5,0xDF03,0xDEFD,0xDF49,0xDEBE,0xDF0A,0xDE26,0xDF18,
+ 0xDF0D,0xDF0F,0xDF0E,0xDF20,0xDC71,0xDC99,0xDCE2,0xDCDF,0xDCDE,0xDD78,
+ 0xDD79, 0,0xDD7C,0xDD7D,0xDD84,0xDD8B,0xDD8A,0xDCD2,0xDD89,0xDF2C,
+ 0xDF29,0xDF6C, 0,0xDC09,0xDC08,0xDC0C,0xDC0D,0xDC10, 0,0xDC9F,
+ 0xDC98,0xDCA2,0xDC9A,0xDDD5,0xDDE2,
+ /* plane 6, row 18 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD847,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD87E,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD87E,0xD851,0xD851,0xD851,
+ 0xD851,0x3E6F,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD842,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD87E,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,
+ 1, /* first low-surrogate */
+ 0xDDF0,0xDDEA,0xDDEB,0xDDED,0xDDE8,0xDDE0,0xDE85,0xDE86,0xDEF0,
+ 0xDE46,0xDF45,0xDF38,0xDF3E,0xDF42,0xDF40,0xDC47,0xDC5C,0xDC5E,0xDCB4,
+ 0xDCC2,0xDD14,0xDCE5,0xDD15,0xDD11,0xDCFF,0xDCEE,0xDCE7,0xDCF5,0xDCF4,
+ 0xDCE8,0xDD01,0xDCEF,0xDCF1,0xDD00,0xDDDB,0xDDBF,0xDDDA,0xDDC7,0xDDDD,
+ 0xDD1A,0xDDEB,0xDDE1,0xDDC1,0xDDBD,0xDD07,0xDCFD,0xDD01,0xDD0A,0xDD03,
+ 0xDD72,0xDD74,0xDD75,0xDDB2,0xDDB1,0xDDB4,0xDE4C,0xDE42,0xDE40,0xDE49,
+ 0xDE3C,0xDE4D,0xDE4A,0xDE3B,0xDF61,0xDF74,0xDD26,0xDF7F,0xDF7A,0xDF88,
+ 0xDF7C, 0,0xDF70,0xDD0F,0xDD28,0xDD13,0xDD2A,0xDEED,0xDEEF,0xDF2E,
+ 0xDFC1,0xDFDD,0xDF47,0xDC2D,0xDC2B,0xDC35,0xDC2F,0xDC31,0xDC34,0xDD35,
+ 0xDC30,0xDD3A,0xDD39,0xDD37,0xDD4B,
+ /* plane 6, row 19 */
+ 1 | (94 << 8), /* first, last */
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD87E,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0x401C,0xD854,0xD854,0xD854,0xD854,0xD87E,
+ 0xD85A,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0x4100,0xD855,0xD87E,0xD855,0xD84F,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0x42B6,0xD857,
+ 0xD87E,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD859,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0x43E4,0xD859,
+ 1, /* first low-surrogate */
+ 0xDD54,0xDD4D,0xDD51,0xDD47,0xDF27,0xDF50,0xDF4D,0xDF4E,0xDF54,
+ 0xDFD2,0xDFCE,0xDC4B,0xDC49,0xDD05,0xDD0F,0xDD19,0xDD43,0xDD06,0xDD0C,
+ 0xDD29,0xDD04,0xDD08,0xDD25, 0,0xDD03,0xDD27,0xDD10,0xDD0A,0xDD42,
+ 0xDF5D,0xDFAA,0xDFAB,0xDFA9,0xDC41,0xDC3A,0xDC3C,0xDC2B,0xDC49,0xDE15,
+ 0,0xDE16,0xDD53,0xDE31,0xDC4A,0xDF3C,0xDF7C,0xDF6D,0xDF6A,0xDF63,
+ 0xDF6B,0xDF7B,0xDF64,0xDF7A,0xDF69,0xDF6F,0xDD37,0xDD35,0xDD3C,0xDD36,
+ 0xDD3D,0xDD3E,0xDEE1,0xDEE0,0xDE2D,0xDE2B,0xDF8D,0xDF92, 0,0xDF8E,
+ 0xDD6B,0xDF91,0xDF96,0xDE7B,0xDE78,0xDE81,0xDE96,0xDEA3,0xDE95,0xDE97,
+ 0xDF54,0xDF52,0xDFF5,0xDC00,0xDFFB,0xDFF4,0xDFF6,0xDCE8,0xDCEA,0xDE3E,
+ 0xDE3D,0xDE3B,0xDE80, 0,0xDE88,
+ /* plane 6, row 20 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD844,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x44AD,0xD85A,0x82FF,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD87E,0xD85A,0xD85A,0xD87E,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD860,0xD87E,0xD860,0xD861,0x8FEC,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0x48C3,0xD862,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD852,
+ 0xD841,0xD865,0xD865,0xD865,0xD865,
+ 1, /* first low-surrogate */
+ 0xDE81,0xDE82,0xDECE,0xDE83,0xDE77,0xDE79,0xDE73,0xDE6D,0xDE70,
+ 0xDE8D,0xDE75,0xDE8C,0xDE6A,0xDE91,0xDE89,0xDE8E,0xDEDC,0xDCFF,0xDD59,
+ 0xDDC7,0xDE12,0xDE14,0xDE13,0xDECB,0xDF42, 0,0xDF3D, 0,0xDF40,
+ 0xDF44,0xDF62,0xDF43,0xDF3F,0xDF45,0xDF3C,0xDD97,0xDF46,0xDF47,0xDDB3,
+ 0xDD9E,0xDD9D,0xDE2C,0xDE29,0xDE2F,0xDE2E,0xDE30,0xDDE1,0xDDE2,0xDE0E,
+ 0xDE19,0xDE12,0xDCB4,0xDFDA,0xDD26,0xDE59,0xDE5A,0xDE88,0xDFC0,0xDFBA,
+ 0xDEA0,0xDDDD,0xDEA2,0xDC86, 0,0xDC9D,0xDC88,0xDC8F,0xDC8E,0xDC9B,
+ 0xDEC1,0xDEC3,0xDEC4,0xDE96,0xDEC7,0xDEC6,0xDEBF, 0,0xDD0F,0xDE55,
+ 0xDE42,0xDE46,0xDE4B,0xDE43,0xDE53,0xDE48,0xDE49,0xDE4A,0xDE4E,0xDFDE,
+ 0xDE91,0xDC4B,0xDE80,0xDE81,0xDE83,
+ /* plane 6, row 21 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD865,0xD848,0xD842,0xD840,0xD840,0xD840,0xD847,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD842,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0x3467,0xD840,0xD840,0xD840,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0x53DE,0xD842,
+ 0xD842,0xD842,0xD842,0x3596,0xD87E,
+ 1, /* first low-surrogate */
+ 0xDE8A,0xDE82,0xDF42,0xDD22,0xDC70,0xDC71,0xDCBC,0xDD18,0xDCBE,
+ 0xDCBA,0xDCF8,0xDD37,0xDD35,0xDEFC,0xDD56,0xDD59,0xDD5E,0xDE6D,0xDE91,
+ 0xDE92,0xDE68,0xDE66,0xDE73, 0,0xDE96,0xDE8B,0xDE8C,0xDC96,0xDCEE,
+ 0xDD1C,0xDD1A,0xDD19,0xDD1B,0xDD5D,0xDD5E,0xDC18,0xDDDC,0xDDE2,0xDE52,
+ 0xDE92,0xDF30,0xDF52,0xDF42,0xDF41,0xDF45,0xDF37,0xDF40,0xDF3F,0xDF3D,
+ 0xDF38,0xDF3A,0xDF49,0xDC6B,0xDC78,0xDC79,0xDC26,0xDC6C,0xDCE9,0xDCE6,
+ 0xDCE5,0xDCEA,0xDCE7,0xDCE8,0xDD1F,0xDD4B,0xDD4A,0xDD53,0xDD76,0xDDA3,
+ 0xDDA4,0xDDF6,0xDDF3,0xDDF9,0xDDF7,0xDDFC,0xDE1D,0xDE6D,0xDE71,0xDE6C,
+ 0xDE6E,0xDE70,0xDE6F,0xDE67,0xDE68,0xDEFA,0xDEF9,0xDF4E, 0,0xDF4D,
+ 0xDF4F,0xDF4A,0xDF4C, 0,0xDC42,
+ /* plane 6, row 22 */
+ 1 | (94 << 8), /* first, last */
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD87E,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD84B,0xD845,0xD845,0xD845,
+ 0xD845,0xD842,0xD845,0xD845,0xD87E,0xD87E,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0x5A30,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0x3759,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0x5BB2,0xD87E,0x3776,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD858,0xD847,0x37D2,0xD847,0xD847,
+ 1, /* first low-surrogate */
+ 0xDCEE,0xDCB2,0xDCC0,0xDCC1,0xDCF4,0xDCC8,0xDCC5,0xDCC6,0xDCAD,
+ 0xDDE2,0xDDEA,0xDDE3,0xDDE1,0xDEF7,0xDF01,0xDF12,0xDEF6,0xDEF1,0xDF1F,
+ 0xDEEE,0xDC52,0xDEF3,0xDF15,0xDF16,0xDF17,0xDEF8,0xDF19,0xDEF2,0xDEF4,
+ 0xDEF5,0xDF13,0xDF06,0xDD26,0xDD24,0xDD5A,0xDEC8,0xDD97,0xDD95,0xDD9A,
+ 0xDE1F,0xDEFB,0xDE29,0xDE20,0xDC62,0xDC63,0xDF4C,0xDF30,0xDF38,0xDF3D,
+ 0xDF51,0xDF4F,0xDF4A,0xDF34,0xDF36, 0,0xDD6A,0xDD68,0xDE1C,0xDE0E,
+ 0xDE1E, 0,0xDE09,0xDE08,0xDE13,0xDE01,0xDE0F,0xDE14,0xDE06,0xDE07,
+ 0,0xDC73, 0,0xDF79,0xDFEA,0xDFED,0xDFE9,0xDFEE,0xDC68,0xDC64,
+ 0xDC67,0xDC72,0xDC62,0xDC74,0xDC79,0xDD19,0xDD17,0xDD15,0xDD16,0xDDE6,
+ 0xDEA4,0xDDEE, 0,0xDDDF,0xDDE4,
+ /* plane 6, row 23 */
+ 1 | (94 << 8), /* first, last */
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD841,0xD848,0xD848,
+ 0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,
+ 0xD84E,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0x3920,0xD849,0xD849,0xD849,0xD849,0xD849,0x3929,0xD849,
+ 0xD849,0xD849,0x3938,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD87E,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 1, /* first low-surrogate */
+ 0xDDDA,0xDDEA,0xDDED,0xDDE3,0xDDE9,0xDFFD,0xDE57,0xDC21,0xDCC6,
+ 0xDCB8,0xDCCB,0xDC85,0xDCBD,0xDCB5,0xDCBB,0xDCBF,0xDCBE,0xDCB2,0xDCC1,
+ 0xDCC2,0xDD99,0xDDC6,0xDE2C,0xDE2D,0xDE25,0xDE1E,0xDE1F,0xDE23,0xDF50,
+ 0xDF4E,0xDF4D,0xDF52,0xDFE9,0xDFEC,0xDFE8,0xDC58,0xDC5C,0xDC5B,0xDC8F,
+ 0xDD72,0xDCF6,0xDD00,0xDCFC,0xDCF8,0xDCEA,0xDCFE,0xDCF7,0xDCFD,0xDE70,
+ 0xDE62,0xDE44, 0,0xDE4D,0xDE4C,0xDE3F,0xDE66,0xDE35, 0,0xDE34,
+ 0xDE8D,0xDE84, 0,0xDE86,0xDE89,0xDE87,0xDE83,0xDE75,0xDE79,0xDEAF,
+ 0xDEB0,0xDDB7,0xDDBB,0xDDB9,0xDE46,0xDE47,0xDE45,0xDEEA,0xDEF6,0xDF68,
+ 0xDF39,0xDCB9,0xDF3D,0xDF3B,0xDF4D,0xDF30,0xDF4A,0xDF3E,0xDF40,0xDF4C,
+ 0xDF47,0xDF38,0xDF52,0xDF3A,0xDF53,
+ /* plane 6, row 24 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0x3A89,0x3AB0,0xD84C,0xD84C,0xD84C,0x3ABF,0xD84C,0xD84C,0xD84C,
+ 0x3AC5,0xD84C,0xD87E,0x3AEA,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD87E,0xD84D,
+ 0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C37,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84F,0xD84F,0x3CE4,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 1, /* first low-surrogate */
+ 0xDEC4,0xDEC1,0xDF1C,0xDF1D,0xDF2A,0xDF1E,0xDF2F,0xDF22,0xDF2E,
+ 0xDF25, 0, 0,0xDC4A,0xDC4B,0xDC76, 0,0xDCE8,0xDCEF,0xDCE9,
+ 0,0xDCEA,0xDCCC, 0,0xDD9B,0xDD9E,0xDD93,0xDDA7,0xDD9C,0xDDA0,
+ 0xDD9A,0xDDAB,0xDDBE,0xDDA9,0xDF2D,0xDF6E,0xDC44,0xDC3D,0xDC3A,0xDC68,
+ 0xDC3C,0xDC6A,0xDCE0,0xDC38,0xDC65,0xDC39,0xDC6D,0xDC36,0xDCE3,0xDC3E,
+ 0xDC7E,0xDC37,0xDC99,0xDCA9,0xDCAD,0xDCA7,0xDCA8,0xDD66,0xDD69,0xDD6D,
+ 0xDD67,0xDD6B,0xDD6A,0xDDEE,0xDE01,0xDE03,0xDDF4,0xDDFB, 0,0xDDF6,
+ 0xDDFC,0xDEF4,0xDF08,0xDF0A,0xDF09,0xDF6D,0xDF62,0xDF41,0xDF5E,0xDF5C,
+ 0xDCF3,0xDD26, 0,0xDD39,0xDD04,0xDD6C,0xDD2B,0xDD2E,0xDD3B,0xDD5E,
+ 0xDDFB,0xDD27,0xDD24,0xDD69,0xDD30,
+ /* plane 6, row 25 */
+ 1 | (94 << 8), /* first, last */
+ 0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3CE8,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,
+ 0xD851,0xD851,0x3E20,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD853,0xD843,0xD853,0xD853,0xD853,0xD853,0xD853,0xD840,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0x3F86,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD854,0xD854,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDD05,0xDD62,0xDD38,0xDD35,0xDD2A,0xDD2C,0xDD68,0xDD31,0xDD2F,
+ 0xDD2D,0xDD3A,0xDD36,0xDD03,0xDD21,0xDD3C,0xDD20,0xDD64,0xDD3E, 0,
+ 0xDDF7,0xDE12,0xDDF1,0xDDF5,0xDE22,0xDDF2,0xDDDF,0xDE15,0xDE16,0xDD7A,
+ 0xDD76,0xDDBE, 0,0xDDBD,0xDE09,0xDE08,0xDE57,0xDFA3,0xDFBF,0xDFB8,
+ 0xDFAF,0xDF9C,0xDFA5,0xDF72,0xDF75,0xDF9D,0xDF99,0xDFB9,0xDD4E,0xDD39,
+ 0xDD3B,0xDD35,0xDD3C,0xDD55,0xDEF0,0xDEF3,0xDEF4,0xDF3B,0xDF3C,0xDF3A,
+ 0xDF36,0xDC07,0xDCEB,0xDC55,0xDC50,0xDC4F,0xDC52,0xDC56,0xDCBD,0xDC32,
+ 0xDD63,0xDD6B,0xDD66,0xDD57,0xDD5D, 0,0xDD6D,0xDD61,0xDD69,0xDD5A,
+ 0xDD5C,0xDD62,0xDF2A,0xDF29,0xDF58,0xDF5A,0xDFD7,0xDFDB,0xDFDC,0xDFDD,
+ 0xDFD8,0xDC54,0xDC5B,0xDC5C,0xDC53,
+ /* plane 6, row 26 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD87E,0xD87E,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD87E,0xD855,0xD855,0xD855,0xD855,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD840,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0x4356,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0x4367,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,
+ 1, /* first low-surrogate */
+ 0xDC4F,0xDC56,0xDC50,0xDC5A,0xDC6B,0xDD36,0xDD53,0xDD3A,0xDD3C,
+ 0xDD3E,0xDD49,0xDD40,0xDD46,0xDD47,0xDF64,0xDF65,0xDFB5,0xDFB6,0xDFB2,
+ 0xDC48,0xDC4A,0xDC72,0xDC69,0xDC5A,0xDC4C,0xDE2C,0xDE30,0xDE4B,0xDE49,
+ 0xDE42,0xDE44,0xDE4A,0xDE4F,0xDF92,0xDD57,0xDF97,0xDF80,0xDF82,0xDF86,
+ 0xDD53,0xDD5E,0xDD52,0xDD5B,0xDD4E,0xDE6D,0xDE6E,0xDEFA,0xDEF6,0xDEFB,
+ 0xDE33,0xDE3D,0xDE37,0xDE3E,0xDE35,0xDF9A,0xDFAB,0xDFA6,0xDFB0,0xDF99,
+ 0xDFA0,0xDF9E,0xDFA8,0xDFA1,0xDFAA,0xDFAD,0xDFBB,0xDF9C,0xDFA5,0xDCB3,
+ 0xDE27,0xDE8D,0xDE8E,0xDE8F,0xDE92, 0,0xDE91,0xDEAD,0xDF57,0xDF58,
+ 0xDF5E,0xDF5D,0xDF5C,0xDF5B, 0,0xDC0A,0xDC03,0xDC0E,0xDCB8,0xDD4D,
+ 0xDD3F,0xDD47,0xDD4B,0xDD4A,0xDD3D,
+ /* plane 6, row 27 */
+ 1 | (94 << 8), /* first, last */
+ 0x8038,0xD859,0xD859,0x8081,0xD859,0xD859,0xD859,0x43D1,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x43EB,0xD859,0xD859,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD847,0xD85A,0xD85A,0xD85A,
+ 0xD87E,0xD85A,0xD85A,0xD85A,0x44B6,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0x45A3,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD87E,0xD85D,0x4610,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 2, /* first low-surrogate */
+ 0xDD41,0xDD4C, 0,0xDE62,0xDE69,0xDE61, 0,0xDEAA,
+ 0xDEA6,0xDEAC,0xDEBD,0xDEBB,0xDEA4,0xDEBA,0xDE9A, 0,0xDEA1,0xDEC1,
+ 0xDCE0,0xDD0A,0xDD03,0xDD06,0xDD39,0xDD3A,0xDD36,0xDD5B,0xDD5F,0xDD5E,
+ 0xDD67,0xDD61,0xDD62,0xDD5D,0xDDCA,0xDDCC,0xDDCE,0xDE18,0xDE1D,0xDE1F,
+ 0xDE20,0xDE17,0xDE15,0xDF1F,0xDF27,0xDF26,0xDE10,0xDF8B,0xDFAE,0xDF8A,
+ 0xDD99,0xDF92,0xDF89,0xDF87, 0,0xDF8F,0xDF84,0xDF83,0xDF8C,0xDF93,
+ 0xDF8D,0xDF98,0xDF7D,0xDF7E,0xDFD2,0xDF80,0xDF99,0xDDAC,0xDE50,0xDE55,
+ 0xDE42,0xDE3F,0xDE3C, 0,0xDE4C,0xDE49,0xDE57,0xDE58,0xDE4F,0xDE5C,
+ 0xDE47,0xDDB7,0xDDAB, 0,0xDDAF,0xDDAD,0xDDE8,0xDDE7,0xDE30,0xDE26,
+ 0xDE2F,0xDE28,0xDE2B,0xDE1D,0xDE2D,
+ /* plane 6, row 28 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85E,0xD85E,0xD87E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD87E,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0x491B,0xD862,0x4987,
+ 0xD863,0xD842,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD864,0xD864,0xD865,0xD865,0xD87E,0xD865,0xD866,
+ 0xD842,0xD840,0xD842,0xD840,0xD840,
+ 1, /* first low-surrogate */
+ 0xDE20,0xDE2A,0xDE2C,0xDE35,0xDE21,0xDE23,0xDE24,0xDE36,0xDE37,
+ 0xDFE9,0xDCBA,0xDCB8,0xDDCC,0xDD6D,0xDD6A,0xDD68,0xDD69,0xDD6B,0xDD61,
+ 0xDFDC,0xDFDB,0xDC2D,0xDC2C,0xDCA2,0xDD2B,0xDD32,0xDDD7,0xDE94,0xDE92,
+ 0xDE90,0xDFC9,0xDFC4,0xDFC1,0xDFC3,0xDFCD,0xDE14,0xDEA7,0xDEAF,0xDEAA,
+ 0xDC0D,0xDC54,0xDC5B,0xDC61,0xDCAE,0xDCB3,0xDCC0,0xDCC4,0xDCBF,0xDCCB,
+ 0xDCAD,0xDCA7,0xDCA4,0xDCBD,0xDCAF,0xDCB2,0xDCA5,0xDEE7,0xDEE0,0xDECE,
+ 0xDEDE,0xDED5,0xDEDF,0xDED9,0xDFF2,0xDD23,0xDD40, 0,0xDD3E, 0,
+ 0xDCCF,0xDF54,0xDE5B,0xDE58,0xDE62,0xDE5F,0xDE67,0xDE63,0xDE5E,0xDE60,
+ 0xDF85,0xDF86,0xDF87,0xDDE8,0xDDE6,0xDE71,0xDE85,0xDE02,0xDE86,0xDC10,
+ 0xDDF8,0xDCBF,0xDF61,0xDCFE,0xDCFC,
+ /* plane 6, row 29 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD87E,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD87E,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD87E,0xD87E,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0x3557,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD87E,0xD843,0xD843,
+ 1, /* first low-surrogate */
+ 0xDD39,0xDD61,0xDD60,0xDEE2,0xDEEA,0xDEE3,0xDEB4,0xDEAE,0xDEBE,
+ 0xDEB8,0xDEA8,0xDEAA,0xDEA9,0xDEB3,0xDED5,0xDEAD,0xDEB9,0xDEBB,0xDEB1,
+ 0xDEC2,0xDC08,0xDEEB,0xDEBA,0xDED2,0xDED4,0xDCF1,0xDD1D,0xDC12,0xDD62,
+ 0xDD8C,0xDDE6,0xDDE7,0xDE5A,0xDE58,0xDE59,0xDE96,0xDE97,0xDF61,0xDF67,
+ 0xDF71,0xDF65,0xDF7D,0xDF7E,0xDC7D,0xDC84,0xDC7C,0xDC7E,0xDC7F,0xDC80,
+ 0xDCEF,0xDCF4,0xDD1E,0xDD4E,0xDDFB,0xDDFA,0xDDFD,0xDC31,0xDC32,0xDE79,
+ 0xDE7C,0xDE7D,0xDE84,0xDE7B,0xDE78, 0,0xDF5E,0xDF5A,0xDF5C,0xDF59,
+ 0xDF55,0xDF63,0xDF56,0xDF5F,0xDF60,0xDF5B,0xDD4A,0xDD65,0xDDB3,0xDD2C,
+ 0xDD77,0xDD3D,0xDD52,0xDD61,0xDD2A,0xDD3E,0xDD34,0xDD29,0xDDB2,0xDDAD,
+ 0xDD40,0xDD53,0xDC44,0xDD3F,0xDD41,
+ /* plane 6, row 30 */
+ 1 | (94 << 8), /* first, last */
+ 0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD87E,0xD87E,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0x369D,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD87E,0xD845,
+ 0xD845,0xD845,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD846,0x375F,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0x3779,0xD840,
+ 0xD846,0xD847,0xD847,0xD847,0xD847,0x3798,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0x37DC,0x5D2B,0xD847,0x37DF,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,
+ 1, /* first low-surrogate */
+ 0xDD72,0xDDF6,0xDDF5,0xDDF4,0xDDF2,0xDDF9,0xDF27,0xDF54,0xDF55,
+ 0xDF2E,0xDC54,0xDC53,0xDF2C,0xDF38,0xDF39,0xDF31,0xDF4F,0xDF73,0xDF30,
+ 0xDF2B,0xDF51,0xDD2C,0xDD5B,0xDD5C,0xDD68,0xDD6C,0xDD6B,0xDD69,0xDD9F,
+ 0xDE38,0xDE3C,0xDE3A,0xDE35, 0,0xDE39,0xDE36,0xDE3B,0xDF60,0xDF61,
+ 0xDF63,0xDF64,0xDF94,0xDF93,0xDF5E,0xDF68,0xDF6A,0xDF65,0xDC66,0xDF90,
+ 0xDF5F,0xDF72,0xDC65,0xDE3C,0xDE27,0xDE24,0xDE26,0xDE25, 0,0xDE28,
+ 0xDE36,0xDF31,0xDF30,0xDF34,0xDF81,0xDF7D,0xDF82,0xDF80, 0,0xDED3,
+ 0xDFF2,0xDC66,0xDC8C,0xDC7B,0xDC83, 0,0xDC8E,0xDC7A,0xDC92,0xDC91,
+ 0xDC82,0xDD1B,0xDD1C,0xDE27,0xDE21, 0, 0,0xDE43, 0,0xDE18,
+ 0xDE7B,0xDE1A,0xDE4B,0xDE4A,0xDE4D,
+ /* plane 6, row 31 */
+ 1 | (94 << 8), /* first, last */
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD87E,0xD87E,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,
+ 1, /* first low-surrogate */
+ 0xDE4F,0xDE19,0xDE35,0xDE13,0xDE52,0xDE14,0xDE1E,0xDE2C,0xDE20,
+ 0xDE22,0xDE12,0xDE1F,0xDC00,0xDC23,0xDC40,0xDC43,0xDCE4,0xDCDB,0xDCEA,
+ 0xDCDD,0xDCCC,0xDCD9,0xDCE8,0xDCF6,0xDCE3,0xDCD3,0xDCDA,0xDCD6,0xDCE7,
+ 0xDE3A,0xDE3F,0xDE40,0xDE48,0xDE59,0xDE37,0xDE44,0xDC8C,0xDC8B,0xDE55,
+ 0xDE39,0xDF54,0xDF55,0xDF56,0xDF57,0xDF58,0xDF59,0xDF8D,0xDFF2,0xDFF8,
+ 0xDFF5,0xDFF6,0xDFFC,0xDFFE,0xDFF1,0xDFFD,0xDC5E,0xDC96,0xDC97,0xDC9C,
+ 0xDC9B,0xDC95,0xDC9A,0xDD1A,0xDD09,0xDD04,0xDD0E,0xDD1C,0xDD18,0xDD0D,
+ 0xDD10,0xDD0C,0xDD03,0xDE7B,0xDEA6,0xDE77,0xDE88,0xDE74,0xDEDA,0xDE76,
+ 0xDE78,0xDE8A,0xDE8F,0xDE7D,0xDE90,0xDEED,0xDED9,0xDED0,0xDF1A,0xDED7,
+ 0xDEE2,0xDEE1,0xDEC5,0xDEE0,0xDECA,
+ /* plane 6, row 32 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD849,0xD87E,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD87E,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x39FD,0xD84A,
+ 0xD84A,0xD84A,0xD87E,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3AF4,0xD84C,0x3AEF,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0xD87E,0xD84C,0xD84C,0xD84C,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0x3C31,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 1, /* first low-surrogate */
+ 0xDF25,0xDECC,0xDCB3,0xDDC6,0xDDC1,0xDE4D,0xDF4B,0xDF64,0xDF95,
+ 0xDF99,0xDCBC,0xDF94,0xDFA2,0xDFAE,0xDF9E,0xDFA7,0xDF86, 0,0xDFA4,
+ 0xDF91,0xDF93,0xDCBB,0xDF88,0xDECD,0xDECA,0xDF3F,0xDF40,0xDF46,0xDF41,
+ 0xDF45,0xDF58,0xDF3B,0xDF48,0xDC4E,0xDC52,0xDC4F,0xDC7B,0xDC7A,0xDCA0,
+ 0xDC9F,0xDCFB,0xDCF7,0xDDB8,0xDDB9,0xDDBB,0xDDB7, 0,0xDDBA, 0,
+ 0xDDDA,0xDDB5,0xDDBF,0xDDBC,0xDDC0,0xDCD3,0xDCD9,0xDF75,0xDF79,0xDF76,
+ 0xDC35,0xDC40,0xDCC0,0xDC81,0xDCAD,0xDCAF,0xDCAC,0xDC8F,0xDCA8,0xDCAA,
+ 0xDCA9,0xDC88,0xDC7F,0xDC80,0xDCBC,0xDCAE,0xDCBB,0xDCBD, 0,0xDD78,
+ 0xDD74,0xDE0C,0xDE11,0xDE08,0xDE06,0xDE10,0xDE8F,0xDE90,0xDE8D,0xDE8E,
+ 0xDE96,0xDE95,0xDF0B,0xDF0C,0xDF7C,
+ /* plane 6, row 33 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0x3D03,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0x3D09,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD87E,0xD851,0xD87E,0xD851,0xD851,
+ 0x3E3E,0xD851,0xD851,0xD851,0xD87E,0xD853,0xD851,0x3E77,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0x3E7B,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD85A,0xD852,
+ 1, /* first low-surrogate */
+ 0xDF73,0xDF75,0xDF76,0xDF7D,0xDF78,0xDF71,0xDC4B,0xDC4E,0xDD33,
+ 0xDD32, 0,0xDD91,0xDDE7,0xDDE9,0xDDA2,0xDD94,0xDD87,0xDDA3,0xDDDD,
+ 0xDD7B,0xDD83,0xDD81,0xDDDF,0xDD7C,0xDDE4,0xDDE2,0xDD93,0xDD7D,0xDDBF,
+ 0xDD9B,0xDD8E,0xDD9F, 0,0xDD8C,0xDD7F,0xDD9C,0xDD84,0xDD42,0xDDE6,
+ 0xDE51,0xDE4A,0xDE64,0xDE25,0xDE2F,0xDE2E,0xDE2B,0xDE28,0xDE32,0xDE2D,
+ 0xDE31,0xDE39,0xDE2C,0xDE61,0xDD11,0xDD10,0xDD12,0xDD53,0xDD55,0xDD7B,
+ 0xDD81,0xDD7D,0xDD7C,0xDDC2,0xDDC5,0xDD22,0xDDC4,0xDD23,0xDE6B,0xDE68,
+ 0,0xDE5C,0xDE5D,0xDE6A,0xDD24,0xDC76,0xDF76, 0,0xDFC4,0xDFCB,
+ 0xDFC8,0xDFD4,0xDFD5,0xDFC9,0xDFD7, 0,0xDD78,0xDD5A,0xDD5B,0xDD5C,
+ 0xDD56,0xDD58,0xDD71,0xDDD4,0xDF40,
+ /* plane 6, row 34 */
+ 1 | (94 << 8), /* first, last */
+ 0xD87E,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD87E,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD87E,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0x413A,0xffff,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0x41A0,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x41E5,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD857,0xD857,
+ 1, /* first low-surrogate */
+ 0xDD33,0xDF3F,0xDF43,0xDF41,0xDFE2,0xDFE0,0xDFE3,0xDC66,0xDC73,
+ 0xDC6C,0xDC71,0xDC6A,0xDC6D,0xDC6E,0xDC6B,0xDD8C,0xDD77,0xDD3A,0xDD7F,
+ 0xDD89,0xDD7A,0xDD85,0xDD78,0xDD8A,0xDD86,0xDF2C,0xDF67,0xDF5B,0xDFE5,
+ 0xDFE1,0xDC61,0xDC69,0xDC6A,0xDD65,0xDD6D,0xDD63,0xDD86,0xDD5C,0xDD62,
+ 0xDD48,0xDD79,0xDD69,0xDD70,0xDD76,0xDD5D,0xDD87,0xDD6E,0xDD71,0xDD7C,
+ 0xDD73,0xDD5B,0xDD6B,0xDFBF,0xDFC1,0xDFBD,0xDFC9,0xDFBC,0xDFC2,0xDFC0,
+ 0xDC92,0xDCA9,0xDC8F,0xDC76,0xDC7B,0xDC75,0xDCA4,0xDE64,0xDF3D,0xDFAF,
+ 0, 0,0xDF9D,0xDF99,0xDFB1,0xDD63,0xDD62,0xDD64,0xDD69, 0,
+ 0xDE75,0xDE73,0xDE71,0xDE74,0xDF0C,0xDF16, 0,0xDF11,0xDF1F,0xDF1A,
+ 0xDF0D,0xDF1B,0xDF13,0xDE4E,0xDE55,
+ /* plane 6, row 35 */
+ 1 | (94 << 8), /* first, last */
+ 0xD857,0x427D,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0x436D,0xD858,
+ 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x43F8,0xD859,0x8158,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD840,0x4450,0xD85A,
+ 0xD85A,0xD846,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0x4468,0x4467,0xD85A,0xD85A,0xD85A,0xD85A,0xD87E,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85B,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDE50, 0,0xDFD2,0xDFD3,0xDFD1,0xDFF1,0xDFDC,0xDFC8,0xDFCC,
+ 0xDFD0,0xDFCF,0xDFDF,0xDE2B,0xDE2E,0xDE2D,0xDE9D,0xDE9E,0xDE9F,0xDEA9,
+ 0xDEA0,0xDE98,0xDEA1,0xDEAB,0xDEAF,0xDF6E,0xDF5F,0xDF5A, 0,0xDF65,
+ 0xDF68,0xDF72,0xDC17,0xDC16,0xDC18,0xDC19,0xDC1A,0xDC22,0xDC1B,0xDC1C,
+ 0xDCBE,0xDCEE,0xDD5A,0xDD50,0xDD58,0xDD54,0xDD57,0xDD56,0xDE15,0xDE9B,
+ 0xDE93,0xDE92,0xDE72,0xDE98,0xDE99,0xDEDF, 0,0xDED5, 0,0xDED4,
+ 0xDEF3,0xDEF4,0xDEE7,0xDEE1,0xDEE6,0xDEEB,0xDEEC,0xDEDB, 0,0xDD0D,
+ 0xDD0C,0xDF2F,0xDD68,0xDD65,0xDD6B,0xDD69,0xDDD1,0xDDD3,0xDE27,0xDE28,
+ 0, 0,0xDE24,0xDED7,0xDFCA,0xDFC7,0xDD9E,0xDFD8,0xDFE1,0xDFC6,
+ 0xDFF8,0xDFC3,0xDFF4,0xDC17,0xDFEA,
+ /* plane 6, row 36 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85A,0xD85A,0x44CF,0xD85A,
+ 0xD85A,0xD87E,0x44CD,0xD85B,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85B,0xD85A,0xD85A,0xD85A,0xD87E,0xD87E,0xD87E,
+ 0xD87E,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0x45AB,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46C1,0xD85E,0xD85E,
+ 0x8A24,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,
+ 1, /* first low-surrogate */
+ 0xDFCB,0xDF86,0xDFC4,0xDFD9,0xDC19,0xDFC2,0xDFE2, 0,0xDFDE,
+ 0xDFED,0xDD9C, 0,0xDC1D,0xDFDD,0xDFDB,0xDFE8,0xDFE9,0xDFBF,0xDFE0,
+ 0xDFD1,0xDFDC,0xDFCE,0xDC1E,0xDFCC,0xDFF2,0xDFF3,0xDD9F,0xDDA2,0xDDA3,
+ 0xDDA1,0xDDAB,0xDDAA,0xDDA7,0xDDA9,0xDE88,0xDE75,0xDE60,0xDE6C,0xDE73,
+ 0,0xDE6E,0xDE74,0xDE76,0xDE68,0xDE77,0xDE86,0xDDEA,0xDE51,0xDE50,
+ 0xDE58,0xDE4D,0xDE4F,0xDE4E,0xDE5C,0xDE52,0xDE44,0xDE4A,0xDE4B,0xDFEA,
+ 0xDC10,0xDC11,0xDCCD,0xDCBF,0xDCC4,0xDCD0,0xDCCE,0xDCC0,0xDCC2,0xDCCF,
+ 0xDCC9,0xDCBB,0xDD97,0xDD92,0xDD6F,0xDD7E,0xDD9A, 0,0xDD86,0xDD73,
+ 0,0xDD77,0xDD8F,0xDD70,0xDD81,0xDD82,0xDD99,0xDD7D,0xDD7F,0xDD7B,
+ 0xDD87,0xDFB2,0xDC2F,0xDC34,0xDC2E,
+ /* plane 6, row 37 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85F,0x4747,0xD85F,0x4757,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0x8DC3,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0x484E,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD861,0xD862,0xD861,0xD862,
+ 0xD861,0xD862,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD840,0xD840,
+ 1, /* first low-surrogate */
+ 0xDC32, 0,0xDCAA, 0,0xDCA9,0xDD38,0xDD36,0xDD37,0xDD47,
+ 0xDD33,0xDD39,0xDD35,0xDD44,0xDEA5,0xDEA6,0xDE9E,0xDFE3,0xDFDF,0xDFD3,
+ 0xDFF1,0xDFE4,0xDFE0,0xDFD6, 0,0xDFE6,0xDFD8,0xDFDE,0xDFDB,0xDFDC,
+ 0xDE1B,0xDE1F,0xDE1D,0xDE1C,0xDE1E,0xDE20,0xDE21, 0,0xDEB6,0xDEBC,
+ 0xDEC6,0xDEC7,0xDEBA,0xDEBE,0xDEBD,0xDEB5,0xDEB4,0xDC0F,0xDC62,0xDCEB,
+ 0xDCD9,0xDCE4,0xDCD7,0xDCD8,0xDCD6,0xDCCE,0xDCDD,0xDCE7,0xDCD2,0xDCC5,
+ 0xDCC9,0xDCDB,0xDE92,0xDE8A,0xDE8B,0xDE89,0xDF08,0xDF03,0xDF06,0xDF05,
+ 0xDEF5,0xDF0B,0xDEFB,0xDFFC,0xDC01,0xDC02,0xDFFA,0xDC08,0xDFF7,0xDC00,
+ 0xDFFF,0xDC06,0xDFF6,0xDFFB,0xDC0A,0xDD25,0xDD43,0xDD44,0xDC64,0xDC62,
+ 0xDC5E,0xDC5B,0xDCD6,0xDC72,0xDCC2,
+ /* plane 6, row 38 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,
+ 0xD864,0xD865,0xD865,0xD840,0xD865,0xD865,0xD865,0xD865,0xD866,0xD848,
+ 0xD87E,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0x3477,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x51F2,
+ 0xD841,0xD87E,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,
+ 1, /* first low-surrogate */
+ 0xDE77,0xDE82,0xDE7C,0xDE7D,0xDE86,0xDE81,0xDE84,0xDE76,0xDE83,
+ 0xDE7F,0xDE7E,0xDF88,0xDF8D,0xDF8B,0xDF91,0xDF8F,0xDC7C,0xDC79,0xDC7A,
+ 0xDDEA,0xDC4C,0xDD99,0xDED1,0xDE8B,0xDE8D,0xDE8A,0xDE8E,0xDC11,0xDE56,
+ 0xDE15,0xDC74,0xDCC3,0xDCC4,0xDD1B,0xDD5F,0xDD6A,0xDD69,0xDD6B,0xDF0C,
+ 0xDEF6,0xDEED,0xDF29,0xDEFE,0xDEF1,0xDF17,0xDEFF,0xDEEE,0xDEFD,0xDF1C,
+ 0xDEFC,0xDF00,0xDF20, 0,0xDEF9,0xDF67,0xDF08,0xDC9E,0xDCF3,0xDD25,
+ 0xDD27,0xDD1F,0xDD65,0xDD63,0xDD94,0xDD97,0xDDF1,0xDE5F,0xDE62, 0,
+ 0xDE60,0xDC22,0xDF8C,0xDF82,0xDF90,0xDF8B,0xDF8D,0xDF81,0xDF9D,0xDC8E,
+ 0xDC8F,0xDC92,0xDD23,0xDD52,0xDC2E,0xDE00,0xDE01,0xDE02,0xDE1F,0xDE8C,
+ 0xDE89,0xDE8B,0xDE88,0xDE8D,0xDE8F,
+ /* plane 6, row 39 */
+ 1 | (94 << 8), /* first, last */
+ 0xD858,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0x55B6,
+ 0xD87E,0xD843,0xD87E,0xD840,0xD843,0xD843,0xD87E,0xD87E,0xD843,0xD87E,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0x35C4,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD844,0xD844,0xD844,0xD851,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0x3652,0xD844,0xD844,0xD844,
+ 0xD845,0xD868,0xD845,0xD845,0xD87E,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD87E,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,
+ 0xD847,0xD87E,0xD847,0xD847,0xD847,
+ 1, /* first low-surrogate */
+ 0xDF85,0xDF00,0xDF05,0xDF01,0xDF68,0xDF6E,0xDF67,0xDF75, 0,
+ 0xDC45,0xDDD7,0xDC46,0xDC48,0xDDD4,0xDDD8,0xDC47,0xDC48,0xDDBA,0xDC49,
+ 0xDDDB,0xDDBF,0xDE35,0xDDBC,0xDDD9, 0,0xDDDD,0xDE00,0xDDD5,0xDE30,
+ 0xDDBD,0xDDDC,0xDDFD,0xDDFE,0xDE07,0xDD17,0xDF6F,0xDF69,0xDF70,0xDF67,
+ 0xDFA9,0xDF95,0xDF90,0xDF6C,0xDF97,0xDF71, 0,0xDF74,0xDF6D,0xDF8E,
+ 0xDD2F,0xDF1B,0xDDA9,0xDE4E,0xDC5F,0xDE5A,0xDE48,0xDE55,0xDE4C,0xDE49,
+ 0xDE4F,0xDE4A,0xDFD6,0xDFA0,0xDFA9,0xDC67,0xDF9D,0xDFD4,0xDFA4,0xDFA8,
+ 0xDFA6,0xDFE6,0xDD7D,0xDD77,0xDD7A,0xDE41,0xDE49,0xDE59,0xDE45,0xDE48,
+ 0xDE40,0xDF8E,0xDF95,0xDF90,0xDFF7,0xDFF8,0xDFF6,0xDFFB,0xDC9E,0xDC9D,
+ 0xDC99,0xDC77,0xDCA3,0xDCA9,0xDC98,
+ /* plane 6, row 40 */
+ 1 | (94 << 8), /* first, last */
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD87E,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD87E,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD87E,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x386B,0x5EC3,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD859,0xD849,0xD849,0xD849,0xD849,0x3941,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0x3950,0xD849,0xD849,0xD87E,0xD849,
+ 0xD849,0xD849,0xD87E,0xD849,0xD849,
+ 1, /* first low-surrogate */
+ 0xDCA0,0xDC96,0xDC94,0xDC95,0xDC9F,0xDCA1,0xDD21,0xDD1D,0xDD1F,
+ 0xDE6D,0xDC7C,0xDE9A,0xDE92,0xDE7A,0xDE7D,0xDEA1,0xDE9D,0xDE99,0xDE6B,
+ 0xDE6E,0xDC7D,0xDC45,0xDC84,0xDCFB,0xDCEB,0xDCF2,0xDCF9,0xDC86,0xDCF8,
+ 0xDCED,0xDD01,0xDCF7,0xDD06,0xDD9B,0xDDCA, 0, 0,0xDE6B,0xDE6C,
+ 0xDE74,0xDE67,0xDE5B,0xDE60,0xDE76,0xDE63,0xDE61,0xDF28,0xDF5B,0xDF5E,
+ 0xDF60,0xDF5D,0xDF5C,0xDFF4,0xDC00,0xDC08,0xDC07,0xDC01,0xDC05,0xDC64,
+ 0xDC63,0xDC9E,0xDCA0,0xDCA1,0xDC9F,0xDD26,0xDD2D,0xDD28,0xDD1D,0xDEEC,
+ 0xDEE3,0xDEEB,0xDF16,0xDEC8,0xDE1B,0xDEE9,0xDEE4,0xDF24,0xDED1, 0,
+ 0xDEDD,0xDEC2,0xDECB,0xDEC7,0xDEE7, 0,0xDEEA,0xDF4B,0xDCA5,0xDF60,
+ 0xDF7D,0xDF3E,0xDCA4,0xDF52,0xDF4E,
+ /* plane 6, row 41 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A,0xD84B,0xD84B,
+ 0xD84A,0xD84B,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84A,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3AC0,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0x3AFC,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0xD84C,
+ 0xD84C,0x3479,0xD84C,0xD84C,0x440B,
+ 1, /* first low-surrogate */
+ 0xDF3C,0xDF32,0xDF30,0xDF23,0xDDCA,0xDDCB,0xDDC9,0xDDC8,0xDDCD,
+ 0xDF98,0xDFA0,0xDF9F,0xDF9C,0xDFA3,0xDF97,0xDCBE,0xDFF1,0xDC09,0xDC03,
+ 0xDFEA,0xDC45,0xDFED,0xDC05,0xDC1A,0xDC15,0xDC01,0xDFEC,0xDC0E,0xDC17,
+ 0xDC42,0xDC12,0xDC10,0xDFEF,0xDFFF,0xDC00,0xDC0C,0xDC0F,0xDC04,0xDC08,
+ 0xDC14,0xDC43,0xDCBD,0xDC1B,0xDC11,0xDC13,0xDECF,0xDECE,0xDF6F,0xDF6E,
+ 0xDF7A,0xDF70,0xDF64,0xDF5E,0xDF6C,0xDCC9,0xDF5B,0xDF61,0xDF65,0xDC7F,
+ 0xDC80,0xDC7C,0xDCA7,0xDCA6,0xDCA1, 0,0xDCA8,0xDCA3,0xDCA2,0xDCAD,
+ 0xDCA5,0xDD01,0xDCFF,0xDCFC,0xDD00,0xDD35,0xDDEE,0xDDEF,0xDDF6,0xDDE8,
+ 0xDDEA,0xDDE3,0xDE1F, 0,0xDDE4,0xDDFA,0xDDF1,0xDDFB,0xDCD4,0xDF3D,
+ 0xDF3C, 0,0xDF78,0xDF77,
+ /* plane 6, row 42 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD861,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD87E,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D1E,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,
+ 1, /* first low-surrogate */
+ 0xDCD1,0xDCC7,0xDCDF,0xDCD0,0xDCE0,0xDCD6,0xDCD8,0xDD16,0xDD0E,
+ 0xDCD9,0xDD0F,0xDD11,0xDCCD,0xDC89,0xDCCE,0xDD14,0xDCDA,0xDD12,0xDCD3,
+ 0xDCC2,0xDCE1,0xDCE9,0xDCEA,0xDCDE,0xDD15,0xDCD9,0xDCD6,0xDCCD,0xDCD0,
+ 0xDCD3,0xDCF0,0xDD82,0xDD85,0xDD7F,0xDD7D,0xDD81,0xDD83,0xDD84,0xDCA0,
+ 0xDE28,0xDE0F,0xDE17,0xDE1A,0xDE25,0xDCF7,0xDE9B,0xDE99,0xDF92,0xDF8C,
+ 0xDF95,0xDF8D,0xDFA3,0xDF93,0xDF91,0xDDDB,0xDD99,0xDD9A,0xDE08,0xDE4C,
+ 0xDE0D,0xDE01,0xDE4E,0xDE02,0xDE4D,0xDE21,0xDDFC,0xDD09,0xDD8A,0xDD08,
+ 0xDD95,0xDE11,0xDE12,0xDE46,0xDE1C,0xDE49,0xDE0C, 0,0xDE13,0xDE16,
+ 0xDDFD,0xDE0F,0xDE1F,0xDE30,0xDE6E,0xDE6B,0xDE9B,0xDE7B,0xDE63,0xDE97,
+ 0xDE6D,0xDE9C,0xDE98,0xDE6F,0xDE67,
+ /* plane 6, row 43 */
+ 1 | (94 << 8), /* first, last */
+ 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD87E,0x3E85,0xD851,0xD851,0xD852,0xD87E,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD853,0xD87E,0xD853,0xD853,0xD853,0x3F97,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD87E,0xD854,0xD854,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDE69,0xDD15,0xDD63,0xDD86,0xDD8A,0xDD87,0xDD88,0xDD85,0xDD89,
+ 0xDDCA,0xDDC7,0xDDCB,0xDDCC,0xDDC9,0xDE0D,0xDE83,0xDE84,0xDE78,0xDE82,
+ 0xDE73,0xDE79,0xDE8C,0xDFD0,0xDFCF,0xDFD2,0xDFD9,0xDFCC,0xDFEB,0xDFFD,
+ 0xDFEC,0xDFE8,0xDFF8,0xDFFA,0xDD27, 0,0xDFE1,0xDFFB,0xDCE7,0xDD2E,
+ 0xDDA5,0xDD91,0xDDA6,0xDD7C,0xDD92,0xDDA2,0xDDA0,0xDEFC,0xDEFE,0xDF57,
+ 0xDF53,0xDF58,0xDFE7,0xDC8E,0xDD38,0xDC83,0xDC8B,0xDC84, 0,0xDDA2,
+ 0xDDB7,0xDDA9,0xDDA5,0xDD9F,0xDDAA,0xDD97,0xDDA1,0xDD9E,0xDDAB,0xDD99,
+ 0xDDA3,0xDF30,0xDF32,0xDF2F,0xDF70,0xDF6C,0xDF6F,0xDFE8,0xDFEE,0xDFEA,
+ 0xDC6D,0xDC76,0xDC70,0xDC71,0xDC6C,0xDDEB,0xDDB5,0xDD96,0xDD90,0xDD8D,
+ 0xDD49,0xDDA2,0xDDB0,0xDD92,0xDDA0,
+ /* plane 6, row 44 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0x4093,0xD854,0xD840,0xD855,0x7861,0xD855,0xD855,0xD855,0x40B2,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD84C,0xD855,0xD855,0xD855,0xD855,0x7A06,0xD855,0xD855,0xD841,0xD855,
+ 0x7A01,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0x41A4,0xD856,0xD856,0x41F2,0xD856,0xD856,0xD856,0xD856,0x41F1,
+ 0xD856,0xD856,0xD857,0xD857,0x4281,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0x42DC,0xD87E,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD85B,0xD858,0xD858,0xD858,
+ 1, /* first low-surrogate */
+ 0xDD93,0xDDC3,0xDD8E,0xDDB6,0xDD9D,0xDD95,0xDDB3,0xDDA4,0xDF70,
+ 0xDFD4, 0,0xDFCF,0xDD70,0xDC94, 0,0xDCC0,0xDCB4,0xDCC1, 0,
+ 0xDCBD,0xDCAF,0xDE77,0xDE78,0xDE6B,0xDE6D,0xDE6E,0xDE72,0xDE6F,0xDE71,
+ 0xDCAB,0xDE8C,0xDF3F,0xDFB6,0xDFB7, 0,0xDFBB,0xDFB8,0xDF9C,0xDFB9,
+ 0,0xDD8B,0xDD7A,0xDD84,0xDD88,0xDD91,0xDD79,0xDD8E,0xDD80,0xDD82,
+ 0xDD7C, 0,0xDE84,0xDE7F, 0,0xDF3B,0xDF71,0xDF3D,0xDF30, 0,
+ 0xDF3E,0xDF38,0xDE5E,0xDE64, 0,0xDE5D,0xDE6D,0xDE4F,0xDE62,0xDE5F,
+ 0xDFEC,0xDFF2,0xDFF4,0xDFF7,0xDFF6,0xDC07,0xDFED,0xDFEA,0xDFF0,0xDFF8,
+ 0xDFF3, 0,0xDD72,0xDE31,0xDE2F,0xDEB6,0xDEAE,0xDEAA,0xDEBF,0xDECC,
+ 0xDEC7,0xDC83,0xDF80,0xDF7B,0xDF7F,
+ /* plane 6, row 45 */
+ 1 | (94 << 8), /* first, last */
+ 0xD858,0xD858,0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0x440C,0xD859,0xD85A,0xD85A,0xD851,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD851,0xD87E,0xD85A,0xD85A,0xD85A,0xD842,0x446D,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85A,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 1, /* first low-surrogate */
+ 0xDF7D,0xDF83,0xDD78,0xDC46,0xDC2D,0xDC25,0xDC26,0xDC2C,0xDC37,
+ 0xDC31,0xDC33,0xDC32,0xDC27,0xDC2A,0xDC2E,0xDC2F,0xDCC0,0xDD71,0xDD61,
+ 0xDD62,0xDD66,0xDE18,0xDEC5,0xDEC3,0xDEC4,0xDEC2,0xDEAE,0xDF10,0xDF08,
+ 0xDF1F,0xDF3A,0xDF3B,0xDF36,0xDF0C,0xDF06,0xDF2A,0xDF57,0xDF50,0xDF20,
+ 0xDD85,0xDF2C,0xDF21,0xDF0B,0xDF19,0xDF35,0xDF18,0xDF0F,0xDF13,0xDF55,
+ 0xDF39,0xDF1A, 0,0xDF17,0xDCE4,0xDCE9,0xDD8B,0xDD10,0xDD12,0xDD3F,
+ 0xDD6E,0xDD18,0xDD8C,0xDDD6,0xDDD5,0xDDD7,0xDF02, 0,0xDE31,0xDE30,
+ 0xDE3A,0xDF85,0xDF6B,0xDC48,0xDC4B,0xDC37,0xDC7B,0xDC6C,0xDC85,0xDC65,
+ 0xDC36,0xDC86,0xDC34,0xDC68,0xDC5A,0xDC58,0xDC72,0xDC6A,0xDFD3,0xDC3C,
+ 0xDC33,0xDC3B,0xDC4D,0xDC4F,0xDC7C,
+ /* plane 6, row 46 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x44E6,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85A,0xD85B,0xD85B,0xD85A,0xD87E,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD87E,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0x8849,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85E,0xD85E,0xD85E,0x8999,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46D1,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0x472C,0xD85E,0xD85F,0xD85F,0xD85F,
+ 1, /* first low-surrogate */
+ 0xDCB0,0xDC5B,0xDC55,0xDC64,0xDC6B,0xDC53, 0,0xDC57,0xDC5E,
+ 0xDC6D,0xDC35,0xDC69,0xDC59,0xDC66,0xDC50,0xDC51,0xDC5C,0xDD5D,0xDC87,
+ 0xDC78,0xDC49,0xDC4E,0xDFF1,0xDC73,0xDC88,0xDFCF,0xDDA4,0xDDB1,0xDDB3,
+ 0xDE9C,0xDEA4,0xDE90,0xDEB8,0xDEA0,0xDE9D,0xDEA8,0xDEA9,0xDDB9,0xDEB1,
+ 0xDE93,0xDE9B,0xDEA2,0xDEA1,0xDEB0,0xDEA7,0xDDB3, 0,0xDDB4,0xDDF1,
+ 0xDDED,0xDDEC,0xDE68,0xDE75,0xDE6A,0xDE62,0xDE67,0xDE60,0xDE77,0xDE5F,
+ 0xDE79,0xDC23,0xDC21,0xDC1C, 0,0xDC1F,0xDC1E,0xDCD6,0xDCD3,0xDCD9,
+ 0xDCD7,0xDCD4,0xDCDC,0xDCD8,0xDDA3, 0,0xDDBE,0xDDA9,0xDDA1,0xDDA0,
+ 0xDDAB,0xDDA2,0xDDBA,0xDDC2,0xDD9C,0xDDBB,0xDDAA,0xDDAC,0xDDA5,0xDDC1,
+ 0,0xDFE2,0xDC36,0xDC3D,0xDC3A,
+ /* plane 6, row 47 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x476E,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0x47E5,0xD860,0xD85F,0xD85F,0xD860,0xD85F,0x47E6,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0x489F,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD844,0xD862,0x921F,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDC61,0xDC48,0xDC3C,0xDCB7,0xDCAC,0xDCB3,0xDCB6,0xDCB2, 0,
+ 0xDD5D,0xDD49,0xDD4E,0xDD4F,0xDD4D,0xDD5C,0xDE5D,0xDEBB,0xDECE,0xDEBF,
+ 0xDEBA,0xDEC3, 0,0xDC06,0xDFF8,0xDFFE,0xDC13,0xDFF6, 0,0xDE34,
+ 0xDE2D,0xDE2A,0xDE35,0xDE2C,0xDED4,0xDEDA,0xDED3,0xDED2,0xDECE,0xDECF,
+ 0,0xDCFD,0xDD0B,0xDCFE,0xDCF8,0xDCF7,0xDD17,0xDCFA,0xDCF9,0xDD00,
+ 0xDCF5,0xDCF1,0xDD03,0xDD05,0xDD1C,0xDEAC,0xDE9A,0xDEAD,0xDEA0,0xDF1B,
+ 0xDF25,0xDF24,0xDF26,0xDF27,0xDF28,0xDF2A,0xDF1A,0xDF2E,0xDF15,0xDC15,
+ 0xDC14,0xDC17,0xDC18,0xDC0F,0xDC13,0xDC0B,0xDC22,0xDF7A,0xDD26, 0,
+ 0xDD51,0xDD4D,0xDD4E,0xDD4A,0xDD4B,0xDD4C,0xDD50,0xDD62,0xDD4F,0xDD52,
+ 0xDC68,0xDC69,0xDCE5,0xDCF0,0xDCE1,
+ /* plane 6, row 48 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD87E,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0x4A0D,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,
+ 0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD868,0xD869,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD87E,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x34F8,0xD841,0xD841,0xD841,
+ 0xD841,0xD842,0xD842,0xD842,0x5313,0xD842,0x3533,0xD842,0xD842,0xD842,
+ 0x353C,0xD842,0xD842,0xD842,0xD842,
+ 1, /* first low-surrogate */
+ 0xDCE2,0xDDF2,0xDEA5,0xDEA9,0xDEA4,0xDEAF,0xDEAC,0xDEAE,0xDEAA,
+ 0xDF95,0xDF99,0xDF93,0xDF9D,0xDF98,0xDF9C,0xDF97, 0,0xDC89,0xDC87,
+ 0xDDD7,0xDDED,0xDDF1,0xDDF0,0xDE05,0xDE03,0xDE04,0xDE5F,0xDC57,0xDD9C,
+ 0xDDA1,0xDD9A,0xDE8F,0xDE93,0xDE9E,0xDEA3,0xDE98,0xDE99,0xDE95,0xDC6E,
+ 0xDC6A,0xDEF4,0xDEF7,0xDC79,0xDF8F,0xDF91,0xDC0B,0xDD02,0xDC84,0xDD04,
+ 0xDD80,0xDF2F,0xDF3F,0xDF3B,0xDF62,0xDF44,0xDF33,0xDF5F,0xDF2B,0xDC09,
+ 0xDF39,0xDF36,0xDF48,0xDF35,0xDF6C,0xDF58,0xDF3A,0xDCA8,0xDCF4,0xDD29,
+ 0xDD9A,0xDE00,0xDFBB,0xDFBD,0xDFB7,0xDFB2, 0,0xDFA8,0xDFAB,0xDFA6,
+ 0xDFBC,0xDC97,0xDC96,0xDCF8, 0,0xDD51, 0,0xDDB5,0xDDB4,0xDDB6,
+ 0,0xDDB7,0xDE05,0xDE23,0xDE95,
+ /* plane 6, row 49 */
+ 1 | (94 << 8), /* first, last */
+ 0xD842,0x354F,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0x35DC,0xD843,
+ 0xD843,0xD843,0xD87E,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0x55E0,0xD843,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD87E,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD87E,0xD845,0xD845,0xD845,0xD842,
+ 0xD845,0xD845,0xD87E,0xD845,0xD845,0xD845,0xD846,0xD845,0xD846,0xD845,
+ 0xD845,0xD845,0xD846,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD847,0xD847,0xD847,0xD847,
+ 1, /* first low-surrogate */
+ 0xDE98, 0,0xDE94,0xDE93,0xDF07,0xDF73,0xDF71,0xDF72,0xDF78,
+ 0xDE5F,0xDE6A,0xDE67,0xDE6B,0xDE69,0xDE8E,0xDE49,0xDE80, 0,0xDE44,
+ 0xDE8F,0xDE45,0xDC4C,0xDE4F,0xDE63,0xDE36,0xDE48,0xDE5C,0xDE93,0xDE61,
+ 0xDE60,0xDE4E,0xDE5E,0xDE3F,0xDEA4, 0,0xDE68,0xDE0B,0xDE11,0xDE0D,
+ 0xDE0E,0xDFC2,0xDC57,0xDFB0,0xDFC3,0xDFC8,0xDF65,0xDFD7,0xDFBD,0xDFB8,
+ 0xDFB6,0xDFC7,0xDFBC,0xDFB1,0xDFAF,0xDC5B,0xDD35,0xDD30,0xDD5D,0xDF76,
+ 0xDD6F,0xDDB0,0xDC5E,0xDDB4,0xDE5C,0xDE5D,0xDC08,0xDFEE,0xDC0B,0xDFF2,
+ 0xDFFD,0xDFF1,0xDC10,0xDC68,0xDC14,0xDD8B,0xDD8C,0xDD85,0xDE7A,0xDE6C,
+ 0xDE60,0xDE67,0xDE66,0xDE6A,0xDE5F,0xDE6D,0xDE68,0xDE64,0xDF3A,0xDF3B,
+ 0xDF39,0xDC02,0xDC04,0xDC03,0xDCB4,
+ /* plane 6, row 50 */
+ 1 | (94 << 8), /* first, last */
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD87E,
+ 0x37F5,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD849,0xD849,0x38C3,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0x6139,0xD849,
+ 0xD87E,0xD849,0xD849,0x3971,0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849,
+ 0xD84A,0xD84A,0xD851,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 1, /* first low-surrogate */
+ 0xDCB3,0xDCBB,0xDCAC,0xDCB6,0xDCB1,0xDCAF,0xDCB5,0xDCBE,0xDCB2,
+ 0xDD24,0xDEB6,0xDEB9,0xDEAC,0xDEB0,0xDED7,0xDEBB,0xDEFE,0xDECB,0xDC7F,
+ 0,0xDEB3,0xDEBE,0xDECD,0xDEBC,0xDEBA,0xDEC7,0xDD16,0xDD1B,0xDD17,
+ 0xDD15,0xDD9F,0xDC8E,0xDE82,0xDE83,0xDE8E,0xDE6A,0xDE89,0xDE94,0xDE86,
+ 0xDE90,0xDF62,0xDF90,0xDC0C,0xDC0F, 0,0xDCA5,0xDCA7,0xDCA6,0xDCA4,
+ 0xDD35,0xDD38,0xDD36,0xDD43,0xDD47,0xDD37,0xDF43,0xDFA2,0xDF51,0xDF72,
+ 0xDF6D,0xDF2F,0xDF54,0xDF6E,0xDF55,0xDF37,0xDF4F,0xDF50, 0,0xDF9E,
+ 0xDCA8,0xDFB3,0xDFA7, 0,0xDFF9,0xDF91,0xDCA7,0xDFB6,0xDFDD,0xDF99,
+ 0xDDDF,0xDDD5,0xDFF5,0xDC28,0xDC40,0xDC71,0xDC98,0xDC95,0xDC65,0xDC78,
+ 0xDC7F,0xDC60,0xDC7C,0xDC96,0xDC6A,
+ /* plane 6, row 51 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD865,
+ 0xD84C,0xD854,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0x3B01,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD87E,0xD84E,0xD84E,
+ 0xD84E,0xD842,0xD84E,0xD84E,0xD84E,
+ 1, /* first low-surrogate */
+ 0xDC79,0xDC73,0xDC72,0xDC7B,0xDC70,0xDED5,0xDED7,0xDF8F,0xDF89,
+ 0xDF9E,0xDF87,0xDFA0,0xDF8D,0xDF88,0xDF7F,0xDF8C,0xDF93,0xDC59,0xDDB0,
+ 0xDCB1,0xDDF4,0xDCAF,0xDCB2,0xDD08,0xDD0A,0xDD36,0xDD37,0xDCCF, 0,
+ 0xDE36,0xDE29,0xDE4A,0xDE26,0xDE28,0xDE24,0xDE2A,0xDE48,0xDF44,0xDF84,
+ 0xDF8C,0xDCC4,0xDCDC,0xDD87,0xDD53,0xDD7F,0xDD31,0xDD51,0xDD4B,0xDD52,
+ 0xDD80,0xDDA5,0xDD81,0xDD43,0xDD34,0xDD36,0xDD32,0xDD48,0xDD49,0xDD3C,
+ 0xDD4D,0xDD4A,0xDCE6,0xDD8A,0xDD46,0xDD3E,0xDD83,0xDD50,0xDDB4,0xDCF0,
+ 0xDCE4,0xDCE3,0xDCE5,0xDCE6,0xDCE7,0xDCE1,0xDCEF,0xDCE8,0xDCDD,0xDD03,
+ 0xDD88,0xDE26,0xDE16,0xDE3B,0xDE2F,0xDE39,0xDE34,0xDCF4,0xDE35,0xDE31,
+ 0xDE38,0xDF81,0xDEAA,0xDEA3,0xDEA4,
+ /* plane 6, row 52 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0x6ED7,0xD87E,0x3D41,0xD850,
+ 0xD850,0xD850,0x3DD7,0xD850,0xD850,0xD850,0xD850,0xD87E,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0x3DE2,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0x3E45,0xD851,
+ 0xD851,0xD851,0x733D,0xD852,0xD852,
+ 1, /* first low-surrogate */
+ 0xDEA0,0xDEA1,0xDEA9,0xDEA5,0xDFAF,0xDFB1,0xDFAB,0xDFAE,0xDFB0,
+ 0xDFB3,0xDFAC,0xDFA9,0xDFB2,0xDFA8,0xDFB4,0xDFC2,0xDC4F,0xDC66,0xDE1E,
+ 0xDE15,0xDE10,0xDE7F,0xDE7E,0xDE60,0xDECC,0xDEB2,0xDE62,0xDE8D,0xDE8E,
+ 0xDE77,0xDE7C,0xDE8F,0xDE5D,0xDE6D,0xDE63,0xDEAF,0xDE90,0xDE7D,0xDE7A,
+ 0xDE06,0xDD0B,0xDE68,0xDEB4,0xDE78,0xDEB1, 0,0xDD0C, 0,0xDEE8,
+ 0xDEE9,0xDEC0, 0,0xDEEA,0xDEB7,0xDEBA,0xDEB5,0xDD1D,0xDEB4,0xDEBC,
+ 0xDEC6,0xDEB8,0xDEBD,0xDEC2,0xDF4D,0xDEF0,0xDEC7,0xDEC1,0xDEC3,0xDEF1,
+ 0xDEEC, 0,0xDD1C,0xDD20,0xDD58,0xDD65,0xDD64,0xDD8C,0xDD8D,0xDDD9,
+ 0xDDE0,0xDE10,0xDE94,0xDE92,0xDE96,0xDE95,0xDEBF,0xDEA0, 0,0xDFF4,
+ 0xDFF6,0xDFDC, 0,0xDC16,0xDC15,
+ /* plane 6, row 53 */
+ 1 | (94 << 8), /* first, last */
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0x3FF2,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD84B,0x4049,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD855,0xD87E,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,
+ 1, /* first low-surrogate */
+ 0xDC1C,0xDC0F,0xDC2C,0xDC14,0xDC25,0xDC17,0xDC12,0xDC1E,0xDD80,
+ 0xDDA8,0xDDAF,0xDDD6,0xDDE2,0xDDB4,0xDDB3,0xDDB0,0xDDB2,0xDDA1,0xDF60,
+ 0xDF66,0xDF61,0xDF4E,0xDF5D,0xDF63,0xDFE6,0xDFEF,0xDFEC,0xDC98,0xDCA7,
+ 0xDC94,0xDC95,0xDC91,0xDC9D,0xDC99,0xDC9B,0xDC9C,0xDD1D,0xDD1C,0xDDD0,
+ 0xDDE0,0xDDCB,0xDDDB,0xDDDA,0xDDC2,0xDDD3,0xDDE5,0xDF7D,0xDF7B,0xDFFF,
+ 0,0xDFF9,0xDC77,0xDC7C,0xDC78,0xDC7B,0xDC7A,0xDDD2,0xDDCB,0xDDC9,
+ 0xDDCE,0xDDE4,0xDDCA,0xDDD0,0xDFA5, 0,0xDDD9,0xDDEE,0xDDDD,0xDE00,
+ 0xDDE1,0xDFDE,0xDFE2,0xDFDA,0xDCCE,0xDD4F,0xDCCF,0xDCDA,0xDCD1,0xDCD4,
+ 0xDCED,0xDCCB,0xDCD5,0xDCF1,0xDE9C,0xDE88,0xDF41,0xDFD0,0xDFF7,0xDFCF,
+ 0xDFD1,0xDFDB,0xDFDE,0xDFF8,0xDFDC,
+ /* plane 6, row 54 */
+ 1 | (94 << 8), /* first, last */
+ 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0x41A9,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD840,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD849,0x43CB,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x440D,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,
+ 1, /* first low-surrogate */
+ 0xDFD9,0xDDA0,0xDDB2,0xDDA1,0xDDAA,0xDDA9, 0,0xDDA6,0xDD9C,
+ 0xDDB5,0xDDA7,0xDE8E,0xDE90,0xDE91,0xDF85,0xDF5B,0xDF70,0xDF64,0xDF67,
+ 0xDF63,0xDF77,0xDF68,0xDF65,0xDF6A,0xDF78,0xDF66,0xDE88,0xDE9E,0xDE74,
+ 0xDE7A,0xDE79,0xDE8B,0xDE7F,0xDC13,0xDC1E,0xDC17,0xDC1A,0xDC22,0xDC43,
+ 0xDC19,0xDC1F,0xDC27,0xDC12,0xDC24,0xDC25,0xDF5E,0xDE35,0xDE34,0xDED1,
+ 0xDEC4,0xDECA,0xDEC6,0xDECB,0xDECD,0xDEE2,0xDF89,0xDF8B,0xDF86,0xDF88,
+ 0xDF8D,0xDC3B,0xDC3C,0xDC3D,0xDCF5,0xDD79,0xDD75,0xDD82,0xDD7F,0xDD85,
+ 0xDD76,0xDD7C,0xDD7E,0xDD7B,0xDD80,0xDD7A,0xDD48, 0,0xDE1D,0xDEF6,
+ 0xDEF7,0xDEF9,0xDF63,0xDF6C,0xDF6E,0xDF14, 0,0xDF67,0xDF6F,0xDF69,
+ 0xDF76,0xDF95,0xDF71,0xDF61,0xDF78,
+ /* plane 6, row 55 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD856,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 1, /* first low-surrogate */
+ 0xDF6B,0xDF85,0xDF84,0xDD14,0xDD76,0xDDB6,0xDD75,0xDD74,0xDDE2,
+ 0xDE3F,0xDE44,0xDE3D,0xDE47,0xDE48,0xDEDB,0xDEDC,0xDEDD,0xDFE5,0xDFE6,
+ 0xDCC2,0xDD2E,0xDD1D,0xDCF8,0xDCF0,0xDCF6,0xDCC5,0xDCC6,0xDCFC,0xDD52,
+ 0xDD2F,0xDD10,0xDCF3,0xDCD2,0xDCEA,0xDCDC,0xDD1B,0xDCFB,0xDCC3,0xDD16,
+ 0xDD07,0xDCC9,0xDCD8,0xDD30,0xDD13,0xDD31,0xDCFA,0xDCF2,0xDDE3,0xDCD5,
+ 0xDD01,0xDCF1,0xDD1C,0xDCD6,0xDD08,0xDD0B,0xDD17,0xDD20,0xDCCA,0xDD32,
+ 0xDD05,0xDCE4,0xDCCE,0xDD33,0xDD02,0xDD19,0xDD1E,0xDCD3,0xDCF7,0xDCE8,
+ 0xDD1F,0xDCF4,0xDDD8,0xDDBF,0xDDBE,0xDDBD,0xDEDC,0xDEDD,0xDEAB,0xDEC9,
+ 0xDEC8,0xDEDF,0xDED9,0xDEDB,0xDECC,0xDEE0,0xDEEF,0xDEF3,0xDEAE,0xDF01,
+ 0xDDB7,0xDDB9,0xDDB6,0xDDB8,0xDDF6,
+ /* plane 6, row 56 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0x4631,0xD87E,0xD85D,0xD87E,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0x46D5,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD87E,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD84E,0xD85F,
+ 0xD87E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD85F,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,
+ 1, /* first low-surrogate */
+ 0xDDF3,0xDDF5,0xDDF2,0xDE91,0xDE9D,0xDE9B,0xDE92,0xDE8D,0xDE9E,
+ 0xDE8C, 0,0xDDC7,0xDE95,0xDDC6,0xDE8A,0xDE8E,0xDE9C,0xDFEF,0xDC2D,
+ 0xDC52,0xDC35,0xDC28,0xDC2E,0xDCE5,0xDDEA,0xDDF1,0xDDEB,0xDDD8,0xDDD0,
+ 0xDDF3,0xDDDB,0xDDCE, 0,0xDDDA,0xDDD7,0xDDE1,0xDDF2,0xDDC8,0xDDD9,
+ 0xDDDE,0xDDD1,0xDDE7,0xDDCF,0xDFB7,0xDC47,0xDC42,0xDC43,0xDDD3,0xDCC3,
+ 0xDCC1,0xDCC7,0xDD64,0xDD6A,0xDD66,0xDD50,0xDD6E,0xDD65,0xDCEC,0xDD7F,
+ 0xDDD5,0xDD9A,0xDD69,0xDD72,0xDD6F,0xDD7D,0xDD70,0xDE60,0xDEC2,0xDEE7,
+ 0xDED1,0xDEEB,0xDED4,0xDEDC,0xDEDB,0xDC37,0xDC25,0xDC1F,0xDC1E,0xDC21,
+ 0xDC1B,0xDC17,0xDC22,0xDC2A,0xDC1A,0xDC2D,0xDC23,0xDC26,0xDC36,0xDFFF,
+ 0xDE3A,0xDE40,0xDE42,0xDE38,0xDE3B,
+ /* plane 6, row 57 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD860,0xD860,0x4856,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD87E,
+ 0xD861,0xD861,0xD87E,0xD861,0x48F4,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD864,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDE3C,0xDE43,0xDEE8, 0,0xDEF9,0xDEEB,0xDEF1,0xDEE9,0xDEEC,
+ 0xDC15,0xDC47,0xDC46,0xDC45,0xDD24,0xDD56,0xDD21,0xDD27,0xDD4D,0xDD31,
+ 0xDD1E,0xDD2C,0xDD4F,0xDD2B,0xDD53,0xDD51,0xDD54,0xDD29,0xDD50,0xDD1F,
+ 0xDD32,0xDD2A,0xDD1D,0xDD28,0xDD2E,0xDD2D,0xDEBC,0xDEBB,0xDEBD,0xDDE4,
+ 0xDF47,0xDF41,0xDDE5,0xDF49, 0,0xDC2E,0xDC27,0xDD6A,0xDD7B,0xDD73,
+ 0xDD75,0xDD69,0xDD79,0xDD72,0xDC76,0xDC77,0xDC74,0xDC73,0xDD02,0xDCFE,
+ 0xDD01,0xDCF9,0xDCF4,0xDED3,0xDED5,0xDED8,0xDEC3,0xDECA,0xDED0,0xDECB,
+ 0xDECE,0xDEC5,0xDEE6,0xDEC4,0xDEC0,0xDED4,0xDEE8,0xDF76,0xDFA2,0xDFAE,
+ 0xDFA8,0xDFA3,0xDFA7,0xDF96,0xDFA9,0xDFA5,0xDFAF,0xDFA4,0xDFAB,0xDFAA,
+ 0xDFA6,0xDFA0,0xDC98,0xDDDB,0xDDF6,
+ /* plane 6, row 58 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0x9775,0xD864,0xD864,0xD864,0x4A58,0xD864,
+ 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD87E,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD87E,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD850,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD868,0xD868,0xD868,0xD87E,0xD84E,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD87E,0x3487,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,
+ 1, /* first low-surrogate */
+ 0xDDF5,0xDE0C,0xDE0A, 0,0xDE68,0xDE63,0xDE66, 0,0xDE64,
+ 0xDE6A,0xDE69,0xDF95,0xDC02,0xDC6A,0xDC5E,0xDC68,0xDC69,0xDC65,0xDDFE,
+ 0xDDA7,0xDDAE,0xDDA8,0xDDB3,0xDE9C,0xDEA9,0xDEB6,0xDEB3,0xDEB2,0xDE03,
+ 0xDEB8,0xDEC0,0xDEBF,0xDEBA,0xDEA8,0xDC3C,0xDC72,0xDC71,0xDC75,0xDC73,
+ 0xDE17,0xDE15,0xDE16,0xDE1B,0xDEFA,0xDEF9,0xDC2C,0xDC85,0xDC82,0xDC7F,
+ 0xDC7D,0xDC88,0xDEF3,0xDD4E,0xDD50,0xDF93,0xDF97,0xDF98,0xDF9B,0xDF9C,
+ 0xDF96,0xDE8B,0xDEFD,0xDEFC,0xDE17,0xDD8B,0xDD08,0xDD07,0xDF73,0xDFA2,
+ 0xDFAF,0xDF82,0xDF7B,0xDF74,0xDFB0,0xDF76,0xDFB9,0xDF9E,0xDFB1,0xDFA1,
+ 0xDFB2,0xDF6E,0xDC0B, 0,0xDF78,0xDF7A,0xDF83,0xDF9A,0xDCF8,0xDD31,
+ 0xDD69,0xDD68,0xDD9C,0xDE04,0xDE99,
+ /* plane 6, row 59 */
+ 1 | (94 << 8), /* first, last */
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD845,0xD844,0xD844,0xD844,0xD844,0xD844,0xD87E,0xD844,0xD87E,
+ 0xD844,0xD845,0xD845,0xD85E,0xD844,0xD844,0xD844,0xD845,0xD844,0xD845,
+ 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD845,0xD846,0xD846,
+ 1, /* first low-surrogate */
+ 0xDFC7,0xDFC6,0xDFDC,0xDFC4,0xDFD8,0xDFD4,0xDFDF,0xDFD1,0xDFD0,
+ 0xDFD6,0xDFCF,0xDCAD,0xDCAF,0xDCA7,0xDCFD,0xDD5B,0xDD5A,0xDE07,0xDE9D,
+ 0xDE9B,0xDEAB,0xDEA4,0xDE9C,0xDE9E,0xDEA5,0xDEAA,0xDEA6,0xDF0E,0xDF7E,
+ 0xDF7C,0xDEEE,0xDED5,0xDEE9,0xDE42,0xDEE2,0xDF23,0xDED9,0xDED4,0xDEE3,
+ 0xDF15,0xDEEF,0xDEF0,0xDED6,0xDEDD,0xDEF6,0xDF1C,0xDED8,0xDEDB,0xDEDA,
+ 0xDEED,0xDC11,0xDE15,0xDE18,0xDE1A,0xDE1F,0xDE16,0xDC4D,0xDE19,0xDC4B,
+ 0xDFF0,0xDC09,0xDC1B,0xDFE7,0xDFF6,0xDFF4,0xDFB5,0xDC10,0xDFF2,0xDC15,
+ 0xDFF3,0xDFF8,0xDD39,0xDD3B,0xDD36,0xDC0E,0xDD72,0xDD74,0xDDB9,0xDDB7,
+ 0xDDB8,0xDE72,0xDE6B,0xDC1D,0xDC37,0xDC22,0xDC43,0xDC4D,0xDC38,0xDC5B,
+ 0xDC79,0xDC1B,0xDFF3,0xDD91,0xDE7B,
+ /* plane 6, row 60 */
+ 1 | (94 << 8), /* first, last */
+ 0xD846,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,0xD846,0xD846,0xD846,0xD846,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD87E,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0x37FA,0xD847,0xD847,0xD847,
+ 0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0x38F2,0xD849,0xD849,0xD849,0xD84A,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD84A,0xD849,0xD849,0xD849,0xD849,
+ 1, /* first low-surrogate */
+ 0xDE94,0xDC6F,0xDE96,0xDE7F,0xDE8F,0xDE84,0xDE7C,0xDE8E,0xDE90,
+ 0xDE98,0xDE83,0xDE80,0xDE93,0xDE82, 0,0xDF3D,0xDF41,0xDFA1,0xDF9F,
+ 0xDC0A,0xDC0D,0xDCC8,0xDCC9,0xDCC7,0xDCCD,0xDD25,0xDEB1,0xDEDC,0xDC80,
+ 0xDEE5,0xDEF4,0xDEBF,0xDEDB,0xDEEA,0xDEF2, 0,0xDEF1,0xDEED,0xDEE6,
+ 0xDC02,0xDC82,0xDD25,0xDD18,0xDD1F,0xDD20,0xDDCF,0xDE9D,0xDE99,0xDEA8,
+ 0xDF68,0xDF66,0xDF67,0xDF91,0xDC13,0xDC15,0xDC1D,0xDC16,0xDC19,0xDC6B,
+ 0xDC68,0xDC6A,0xDC6D,0xDC69,0xDCAA,0xDD57,0xDD52,0xDD50,0xDD5F,0xDD67,
+ 0xDD4F, 0,0xDD5B,0xDD5C,0xDD5D,0xDC1F,0xDF9D,0xDFB1,0xDFB0,0xDF94,
+ 0xDFC3,0xDFAF,0xDFA8,0xDFDC,0xDF98,0xDFC4,0xDFA4,0xDFAB,0xDFAA,0xDFA5,
+ 0xDC21,0xDFEB,0xDFE6,0xDFF7,0xDFF8,
+ /* plane 6, row 61 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD849,0xD849,0xD87E,0xD849,0xD87E,0xD849,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84B,0xD84E,0xD84B,0xD84B,0xD84B,0xD84B,0x3A2F,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3AC1,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,
+ 0xD859,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C40,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 1, /* first low-surrogate */
+ 0xDFFC,0xDFFA,0xDFE0,0xDCAA,0xDFF6,0xDCA9,0xDFE1,0xDDEC,0xDDE2,
+ 0xDDE4,0xDDF9,0xDC6F,0xDE4C,0xDCBB,0xDCE1,0xDD00,0xDCD8, 0,0xDCD6,
+ 0xDCE2,0xDCC3,0xDCB3,0xDCD2,0xDCC1,0xDCCE,0xDCD0,0xDCD5,0xDCB9,0xDCBA,
+ 0xDCCF,0xDCBD,0xDEDB,0xDFAA,0xDFAD,0xDFB8,0xDFB6,0xDFB5,0xDFAF,0xDFB4,
+ 0xDFB7,0xDFA8,0xDFB9,0xDFBE,0xDC82,0xDCBC,0xDCB8,0xDCB6,0xDCB9, 0,
+ 0xDD10,0xDE27,0xDE69,0xDE70,0xDE56,0xDE6B,0xDE7A,0xDE6C,0xDE6D,0xDCD5,
+ 0xDFC1,0xDF8D,0xDF90,0xDDB6,0xDE10,0xDE12,0xDDBA,0xDDBD,0xDE05,0xDDC2,
+ 0xDE07,0xDDF5,0xDCE9,0xDDAF,0xDDF4,0xDDF7,0xDDF8,0xDE11,0xDCF6,0xDCF5,
+ 0xDCFB,0xDD01,0xDD00,0xDD02,0xDCFE,0xDCFA,0xDCFD, 0,0xDE37,0xDE49,
+ 0xDE4B,0xDE46,0xDE47,0xDEB3,0xDEB2,
+ /* plane 6, row 62 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D3F,0xD84F,0xD84F,
+ 0xD87E,0xD84F,0x3D46,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD851,0xD851,0xD851,0xD851,0xD840,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD87E,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3E8F,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,
+ 1, /* first low-surrogate */
+ 0xDEB0,0xDEB7,0xDF11,0xDFCC,0xDFDF,0xDFD3,0xDFD5,0xDFDB,0xDFC5,
+ 0xDFC8,0xDFC9,0xDFE2,0xDFCA,0xDFD1,0xDFD2,0xDFDD,0xDE6C,0xDE73,0xDF21,
+ 0xDEF0,0xDF1F,0xDF3B,0xDF22,0xDF23,0xDEE8,0xDEDD, 0,0xDF1B,0xDEED,
+ 0xDD0E,0xDEF2, 0,0xDEDC,0xDEE9,0xDF1D,0xDEDA,0xDEE6,0xDF13,0xDF15,
+ 0xDF16,0xDF3C,0xDF0B,0xDF1C,0xDF3A,0xDF3D,0xDF9A,0xDF1D,0xDF09,0xDF08,
+ 0xDF3B,0xDD22,0xDD26,0xDD25,0xDD24,0xDF9B,0xDD8F,0xDD90,0xDDE6,0xDDE3,
+ 0xDDE5,0xDE11,0xDD25,0xDEAE,0xDEBE,0xDEB4,0xDEB3,0xDEAF,0xDE91,0xDEC2,
+ 0xDEB6,0xDEB2,0xDC57,0xDC3B,0xDC58,0xDC51,0xDC41,0xDC39, 0,0xDC59,
+ 0xDC45,0xDC61,0xDCE8,0xDDFA,0xDDEA,0xDDEF,0xDDF2,0xDDF0,0xDF08,0xDF70,
+ 0xDF6A,0xDF73,0xDF68,0xDFC8,0xDFF2,
+ /* plane 6, row 63 */
+ 1 | (94 << 8), /* first, last */
+ 0xD842,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0x3FAC,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD856,0xD856,0xD856,0xD855,0xD856,0x4168,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD87E,0xD856,0xD856,0x41AB,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,
+ 1, /* first low-surrogate */
+ 0xDF7B,0xDCAE,0xDCAB,0xDCB5,0xDCAF,0xDCB2,0xDCB6,0xDCB0,0xDD1E,
+ 0xDE03,0xDE06,0xDE1F, 0,0xDE0F,0xDE02,0xDE19,0xDE18,0xDE22,0xDE15,
+ 0xDE07,0xDE0D,0xDE24,0xDE0C,0xDE1E,0xDF89,0xDF8A,0xDC0A,0xDC0B,0xDC07,
+ 0xDC04,0xDC09,0xDC84,0xDC83,0xDE18,0xDE14,0xDE05,0xDE16,0xDE0E,0xDE11,
+ 0xDE08,0xDE0B,0xDE15,0xDC85,0xDE37,0xDE2A,0xDE0D,0xDE0F,0xDF7E,0xDF76,
+ 0xDF77,0xDFEC,0xDCFC,0xDD08,0xDCFF,0xDD03,0xDD10,0xDD05,0xDD06,0xDCFA,
+ 0xDEC7,0xDEC0,0xDEC3,0xDEA7,0xDEA8,0xDEAB,0xDEC1,0xDEAA,0xDEC8,0xDF43,
+ 0xDC02,0xDC0E,0xDC01,0xDFFE,0xDC03, 0,0xDC22,0xDC21,0xDC07,0xDC08,
+ 0xDC0C,0xDDCA,0xDDBC,0xDDBE,0xDDBD,0xDD5C,0xDDBB,0xDDB9, 0,0xDDC5,
+ 0xDE99,0xDF6B,0xDF93,0xDF94,0xDFA9,
+ /* plane 6, row 64 */
+ 1 | (94 << 8), /* first, last */
+ 0xD856,0xD856,0xD87E,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,
+ 0xD857,0xD857,0x4291,0xD857,0xD857,0xD857,0xD857,0xD848,0xD857,0xD857,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0x7FE4,0xD859,0xD859,0xD859,
+ 0xD859,0xD87E,0xD859,0xD859,0x8088,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD85A,0xD859,0xD859,0xD859,0xD859,0xD859,0x4430,
+ 0xD859,0xD859,0xD842,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDFA0,0xDFA6,0xDD61,0xDFAB,0xDF9E,0xDF9B,0xDF91,0xDF99,0xDEB6,
+ 0xDEB8,0xDE9A, 0,0xDE98,0xDE9B,0xDEB3,0xDEA2,0xDEAA,0xDEA0,0xDE9F,
+ 0xDC5B,0xDC70,0xDC54,0xDC71,0xDC65,0xDC51,0xDC9D,0xDC61,0xDC5A,0xDC74,
+ 0xDC4C,0xDC4B,0xDC5E,0xDC58,0xDC53,0xDC52,0xDE3B,0xDE39,0xDED6,0xDEE7,
+ 0xDED7,0xDED8,0xDED9,0xDEDA,0xDEDB,0xDEDC,0xDEE0,0xDEE4,0xDEDD,0xDEF5,
+ 0xDEF1,0xDF98,0xDF9D,0xDF99,0xDC50,0xDC49, 0,0xDC62,0xDCD7,0xDD01,
+ 0xDCF7,0xDD7D,0xDD8C,0xDD9C, 0,0xDE1F,0xDE1E,0xDF3D,0xDF3F,0xDF11,
+ 0xDF59,0xDF3E,0xDF58,0xDC00,0xDF9E,0xDFB6,0xDFAA,0xDFAF,0xDFAC, 0,
+ 0xDFC0,0xDFA9,0xDF10,0xDCEE,0xDD77,0xDD79,0xDD7A,0xDD7D,0xDD7F,0xDD83,
+ 0xDD78,0xDD7E,0xDDE4,0xDDE6,0xDDE5,
+ /* plane 6, row 65 */
+ 1 | (94 << 8), /* first, last */
+ 0x445D,0xD85A,0xD85A,0x4475,0xD87E,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD87E,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x44FF,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x450B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0x45C8,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 2, /* first low-surrogate */
+ 0xDE4E,0xDE59, 0,0xDD8E,0xDE4F,0xDE4A,0xDEE3,0xDEDE,
+ 0xDEE2,0xDC74,0xDCAC,0xDC61,0xDC62,0xDC76,0xDC7A,0xDC79,0xDC60,0xDD64,
+ 0xDE81,0xDDDF,0xDD84,0xDD8A,0xDD92,0xDD79,0xDDDE,0xDD98,0xDD6C,0xDDE1,
+ 0xDDA5,0xDD7C,0xDD72,0xDD81,0xDDE0,0xDD65, 0,0xDD6A,0xDD97,0xDDAA,
+ 0xDDD3,0xDDAB,0xDD6E,0xDDAC,0xDD76,0xDD7B,0xDDAD,0xDDA6,0xDD94,0xDDD7,
+ 0xDD70,0xDDD5,0xDDF1,0xDD7A,0xDD68,0xDD96, 0,0xDD73,0xDDAE,0xDDDD,
+ 0xDDDA,0xDDAF,0xDDB0,0xDDDB,0xDD62,0xDDF8,0xDDC2,0xDDC7,0xDDC8,0xDDC5,
+ 0xDDC3,0xDDC6,0xDEDE, 0,0xDF11,0xDF15,0xDF28,0xDF21,0xDF2D,0xDF51,
+ 0xDF2B,0xDF16,0xDF24,0xDF35,0xDF1F,0xDF12,0xDF10,0xDF80,0xDF3B,0xDF29,
+ 0xDF2A,0xDF1B,0xDF18,0xDF20,0xDF3F,
+ /* plane 6, row 66 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD87E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD846,0xD85F,0xD85F,0x4774,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47AC,0xD85F,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,
+ 1, /* first low-surrogate */
+ 0xDF1C,0xDF26,0xDF0B,0xDDBE,0xDDC4,0xDDBD,0xDDFA,0xDDFB,0xDEB1,
+ 0xDEB2,0xDEB0,0xDEB9,0xDEA6,0xDEBD,0xDEB6,0xDEB8,0xDEB4,0xDEB3,0xDEA7,
+ 0xDEAE,0xDEBC,0xDFF2,0xDFF3,0xDFF4,0xDC3B,0xDC40,0xDC46,0xDCF0,0xDCEE,
+ 0xDCE8,0xDCF1,0xDCEB,0xDCEF,0xDDFC,0xDE20,0xDE09,0xDE06,0xDE03,0xDDCF,
+ 0xDE19,0xDE24,0xDE1B,0xDE1D,0xDDFD,0xDE1E,0xDDF4,0xDE01,0xDE08,0xDE05,
+ 0xDE23,0xDDFF,0xDFEA,0xDC4D,0xDC4E,0xDC56,0xDC57,0xDC51,0xDC55,0xDC54,
+ 0xDCCB,0xDCD4,0xDCD1,0xDCCF,0xDCD2,0xDCCA,0xDCD6,0xDD8B,0xDD88,0xDD85,
+ 0xDD89,0xDE9B,0xDDBB,0xDD8C, 0,0xDD99,0xDD8A,0xDEEC,0xDEEF,0xDEF9,
+ 0xDF09,0xDEF8,0xDEF3,0xDF00,0xDF1D, 0,0xDEFD,0xDC48,0xDC5C,0xDC55,
+ 0xDC5E,0xDC49,0xDC63,0xDC60,0xDC53,
+ /* plane 6, row 67 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD87E,0xD862,0xD862,
+ 0xD862,0xD87E,0xD862,0xD862,0xD863,0xD863,0xD87E,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD87E,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,
+ 0xD864,0x4A16,0xD864,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDC62,0xDC40,0xDE49,0xDE4A,0xDE4C,0xDE4D,0xDF0A,0xDF06,0xDF2F,
+ 0xDF21,0xDF07,0xDF09,0xDF02,0xDF16,0xDF03,0xDF0B,0xDF0F,0xDD60,0xDD68,
+ 0xDD5E,0xDD5D,0xDD63,0xDD5F,0xDD64,0xDD78,0xDD61,0xDD69,0xDD65,0xDEDA,
+ 0xDEE6,0xDEDB,0xDEDC,0xDF39,0xDF57,0xDF55,0xDF65,0xDF61,0xDF54,0xDC45,
+ 0xDC41,0xDC3E,0xDC37,0xDD12,0xDD13,0xDD2C,0xDD96,0xDDE9,0xDD9C,0xDD9D,
+ 0xDD85,0xDDE8,0xDD9F,0xDDA3,0xDC82,0xDC83,0xDDEE,0xDD1D,0xDD14,0xDD1F,
+ 0xDD20,0xDE47,0xDE80,0xDEC9,0xDEF9,0xDF06,0xDEF0,0xDEF8,0xDEEF,0xDEFD,
+ 0xDEF1,0xDEFE,0xDFB8,0xDFC0,0xDFC3,0xDFB5,0xDFB6,0xDFC9,0xDDF3,0xDFBD,
+ 0xDFBA,0xDFBF,0xDFB3,0xDFC6,0xDFB2,0xDFBC,0xDFB7,0xDFB9,0xDFC8,0xDCB5,
+ 0xDCB3, 0,0xDCAC,0xDCA9,0xDCAD,
+ /* plane 6, row 68 */
+ 1 | (90 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD87E,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD87E,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0x4B3B,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD87E,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0x4BEF,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD869,0xD869,0xD869,0xD869,
+ 0xD845,
+ 1, /* first low-surrogate */
+ 0xDE11,0xDE0D,0xDE16,0xDE89,0xDE7C,0xDE8B,0xDE7B,0xDE88,0xDE84,
+ 0xDF9D,0xDF98,0xDC88,0xDC86,0xDC82,0xDC8B,0xDDFF,0xDC71,0xDC72,0xDC81,
+ 0xDC8C,0xDC80,0xDC89,0xDDBB,0xDDC1,0xDDBE,0xDE01,0xDDBD,0xDEC1,0xDEB4,
+ 0xDEB7,0xDEC8, 0,0xDED3,0xDED0,0xDEB0,0xDECA,0xDECD,0xDC15,0xDC19,
+ 0xDC17,0xDC3F,0xDC40,0xDC44,0xDC7C,0xDC78,0xDC79,0xDC88,0xDE06,0xDC89,
+ 0xDC7D,0xDE23,0xDE24,0xDE26,0xDE22,0xDE27,0xDE1F,0xDEC9,0xDEC3,0xDF0A,
+ 0xDF0B,0xDF04, 0,0xDF03,0xDF01,0xDF09,0xDC0F,0xDC2E,0xDC2D,0xDC91,
+ 0xDC99,0xDC9E,0xDC90,0xDC94,0xDC9D,0xDC98,0xDC9B,0xDC9C,0xDC9A,0xDD54,
+ 0xDF9D,0xDF9F,0xDFA3,0xDFA4,0xDFA5,0xDF02,0xDC17,0xDC1B,0xDC19,0xDCD1,
+ 0xDD37,
+ /* plane 6, row 69: --- */
+ /* plane 6, row 70: --- */
+ /* plane 6, row 71: --- */
+ /* plane 6, row 72: --- */
+ /* plane 6, row 73: --- */
+ /* plane 6, row 74: --- */
+ /* plane 6, row 75: --- */
+ /* plane 6, row 76: --- */
+ /* plane 6, row 77: --- */
+ /* plane 6, row 78: --- */
+ /* plane 6, row 79: --- */
+ /* plane 6, row 80: --- */
+ /* plane 6, row 81: --- */
+ /* plane 6, row 82: --- */
+ /* plane 6, row 83: --- */
+ /* plane 6, row 84: --- */
+ /* plane 6, row 85: --- */
+ /* plane 6, row 86: --- */
+ /* plane 6, row 87: --- */
+ /* plane 6, row 88: --- */
+ /* plane 6, row 89: --- */
+ /* plane 6, row 90: --- */
+ /* plane 6, row 91: --- */
+ /* plane 6, row 92: --- */
+ /* plane 6, row 93: --- */
+ /* plane 6, row 94: --- */
+ /* plane 7, row 1 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD840,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0x35F6,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD87E,0xD843,0xD843,0x5655,0xD844,0xD844,
+ 0xD844,0xD845,0xD845,0xD845,0x3667,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD841,0xD845,0xD845,0xD845,0xD845,0xD845,0xD87E,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,
+ 1, /* first low-surrogate */
+ 0xDC55,0xDD82,0xDD89,0xDD87,0xDFBE,0xDFBD,0xDFCA,0xDFD4,0xDFBC,
+ 0xDFC4,0xDFC1,0xDFC2,0xDFD7,0xDF70,0xDFBA,0xDFE3,0xDFBB,0xDCB1,0xDCB6,
+ 0xDCB0,0xDD6C,0xDE0D,0xDE07,0xDFF1,0xDFF5,0xDFED,0xDFEF,0xDFEB,0xDFEC,
+ 0xDFEE,0xDC07,0xDDC4,0xDE08,0xDEB3,0xDEAD,0xDEB0,0xDF11,0xDD8A,0xDF83,
+ 0xDF7A,0xDF82,0xDF68,0xDF71,0xDFB0,0xDFAF, 0,0xDF6C,0xDF6F,0xDF62,
+ 0xDF65,0xDF81,0xDF7F,0xDF64,0xDF73,0xDF6E,0xDF67,0xDF74,0xDF7D,0xDF78,
+ 0xDF85,0xDFAA,0xDF88,0xDFA6,0xDC4E,0xDF8A,0xDF84, 0,0xDE24,0xDE22,
+ 0xDE23,0xDC32,0xDC5B,0xDC4F, 0,0xDC26,0xDC3E,0xDC42,0xDC47,0xDC22,
+ 0xDE9B,0xDC4A,0xDC1F,0xDC49,0xDC2B,0xDC33,0xDC58,0xDC2A,0xDC28,0xDD3D,
+ 0xDD3C,0xDDBF,0xDE79,0xDE80,0xDE7C,
+ /* plane 7, row 2 */
+ 1 | (94 << 8), /* first, last */
+ 0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD841,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD849,0xD849,0xD84F,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0x617F,0xD849,0xD84A,0xD849,0xD849,0xD84A,0xD849,0xD84A,0xD84A,
+ 0xD84A,0xD87E,0x3992,0xD84A,0xD84A,
+ 1, /* first low-surrogate */
+ 0xDE7A,0xDE78,0xDC82,0xDC5C,0xDC5A,0xDC4B,0xDC7C,0xDC7F,0xDC1F,
+ 0xDC89,0xDC8B,0xDC57,0xDC7E,0xDC7D,0xDC53,0xDE9F,0xDEBC,0xDEA5,0xDE86,
+ 0xDEDC,0xDEA4,0xDEB6,0xDEA2,0xDEB4,0xDF48,0xDF46,0xDFA7,0xDC14,0xDC12,
+ 0xDC11,0xDCE1,0xDCD0,0xDD26,0xDD28,0xDD29,0xDF2F,0xDF0D,0xDF25,0xDF14,
+ 0xDF3C,0xDF0B,0xDF11,0xDF30,0xDF18,0xDF19,0xDF36,0xDF17,0xDF10,0xDF15,
+ 0xDC03,0xDC29,0xDC4C,0xDD3F,0xDD3E,0xDD34,0xDD42,0xDD35,0xDFF3,0xDDCD,
+ 0xDDD1,0xDDD2,0xDEAD,0xDEBA,0xDEC1,0xDEBB,0xDEB4,0xDEBC,0xDF6C,0xDF92,
+ 0xDC21,0xDC24,0xDF19,0xDCAD,0xDCAE,0xDCAB,0xDCAC,0xDD70,0xDD76,0xDD71,
+ 0xDD77, 0,0xDFEC,0xDC1C,0xDFFB,0xDFEE,0xDCE2,0xDFFD,0xDC1E,0xDC3B,
+ 0xDC4A,0xDCAE, 0,0xDC7D,0xDC56,
+ /* plane 7, row 3 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84B,0xD87E,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0x3A45,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3BC9,
+ 0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD87E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 1, /* first low-surrogate */
+ 0xDC44,0xDC4B,0xDDFA,0xDDE8,0xDDF8,0xDDFF,0xDDF7,0xDDF6,0xDDFE,
+ 0xDE07,0xDE5D,0xDCD4,0xDCC3,0xDCC8,0xDCC5,0xDCC0,0xDCC9,0xDD4D,0xDD20,
+ 0xDD36,0xDD35,0xDD88,0xDD25,0xDD21,0xDD26, 0,0xDD3F,0xDD3B,0xDD24,
+ 0xDD43,0xDD4E,0xDD4F,0xDD44,0xDD40,0xDD41,0xDD39,0xDD2B,0xDEDD,0xDEDE,
+ 0xDFCD,0xDFCB,0xDFDB,0xDFD8,0xDFD9,0xDFD2,0xDFCA,0xDFD1,0xDFD4,0xDFF9,
+ 0xDFD0,0xDC5E,0xDC5D,0xDC8A,0xDD14,0xDE83,0xDE84,0xDE9B,0xDE82,0xDE7D,
+ 0xDE7C,0xDE99,0xDE7E,0xDE9A,0xDE95,0xDE7B,0xDE86,0xDF48,0xDF92,0xDDB2,
+ 0xDE42,0xDE72,0xDE15,0xDE30,0xDE43,0xDE5B,0xDE1D,0xDE73,0xDE2D, 0,
+ 0xDE21,0xDE1C,0xDCEA,0xDE29,0xDE1E,0xDE33,0xDD10,0xDD0E,0xDCF1,0xDD0D,
+ 0xDD11,0xDD12,0xDD17,0xDD09,0xDD0F,
+ /* plane 7, row 4 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D55,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,
+ 1, /* first low-surrogate */
+ 0xDD98,0xDD94,0xDD96,0xDD99,0xDD95,0xDD97,0xDE50,0xDE52,0xDE4D,
+ 0xDE57,0xDE53,0xDE56,0xDEB8,0xDF12,0xDFF1,0xDFF0,0xDFEE,0xDFEF,0xDFE5,
+ 0xDFEB,0xDFE7,0xDFF2,0xDFE6,0xDFF7,0xDC09,0xDC6B,0xDC6A,0xDE79,0xDECD,
+ 0xDEEF,0xDEE4,0xDEE3,0xDF6C,0xDF67,0xDF62,0xDF58,0xDF69,0xDFAB,0xDF57,
+ 0xDFAD,0xDF54,0xDFAE,0xDF76,0xDF49,0xDF45,0xDF4F,0xDD0F,0xDF50,0xDF7D,
+ 0xDF44,0xDF66,0xDF48,0xDFA3,0xDF51,0xDF53,0xDD10,0xDF60,0xDF47,0xDF5E,
+ 0xDF85,0xDFAC,0xDF6D,0xDF75,0xDFA8, 0,0xDF43,0xDF4E,0xDF5C,0xDF56,
+ 0xDF6E,0xDF63,0xDF6A,0xDF56,0xDF12,0xDF5C,0xDF58,0xDF55,0xDF7E,0xDFA8,
+ 0xDF11,0xDF59,0xDF5A,0xDF67,0xDF54,0xDF5B,0xDFF0,0xDD29,0xDD2C,0xDD2A,
+ 0xDD27,0xDD67,0xDD68,0xDD93,0xDD95,
+ /* plane 7, row 5 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0x3EE8,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD842,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3FB6,0xD853,0xD853,0xD853,
+ 0x3FBD,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD84A,0xD854,0xD858,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD855,0xD87E,0xD855,0xD855,0xD855,
+ 1, /* first low-surrogate */
+ 0xDD9A,0xDDEE,0xDDF1,0xDDED,0xDDE9,0xDECB,0xDEDF,0xDEDB,0xDC3C,
+ 0xDC4E,0xDC6C,0xDC7B,0xDC7C,0xDC83,0xDC6B,0xDC66,0xDC63,0xDCA0,0xDC85,
+ 0xDC68,0xDCA2,0xDDEC, 0,0xDDE7,0xDE10,0xDE18,0xDE3A,0xDE1A,0xDE38,
+ 0xDE41,0xDE1B,0xDE14,0xDE1C,0xDE1D,0xDF12,0xDF0D,0xDF07,0xDF7E,0xDF7F,
+ 0xDEB9,0xDF80,0xDF7A,0xDFF3,0xDCB9,0xDCBB,0xDCBA,0xDCBD,0xDCB7,0xDCBF,
+ 0xDD21,0xDE3A,0xDE3D,0xDE36,0xDE49,0xDE81, 0,0xDE3F,0xDE4D,0xDE3E,
+ 0,0xDE30,0xDE4F,0xDF37,0xDF98,0xDF99,0xDC11,0xDC0D,0xDC88,0xDC8A,
+ 0xDE1C,0xDE55,0xDE56,0xDE62,0xDE57,0xDE42,0xDE10,0xDE4D,0xDE5A,0xDE66,
+ 0xDE46,0xDC7E,0xDE4F,0xDEF9,0xDF87,0xDF84,0xDFF4,0xDFF5,0xDFF2,0xDFF7,
+ 0xDD45,0xDD50,0xDD49,0xDD35,0xDCFD,
+ /* plane 7, row 6 */
+ 1 | (94 << 8), /* first, last */
+ 0xD855,0xD855,0xD855,0x40D6,0xD855,0xD855,0xD87E,0xD855,0xD85C,
+ 0xD855,0xD843,0xD855,0xD840,0xD856,0xD856,0xD856,0xD856,0x4171,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD87E,0xD856,
+ 0xD87E,0xD856,0xD856,0xD857,0xD856,0xD856,0xD856,0xD856,0xD857,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD87E,0xD856,0xD856,0xD856,0xD856,
+ 0xD857,0xD856,0xD857,0xD857,0xD857,0x4298,0xD857,0xD857,0xD857,0xD857,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD87E,0xD87E,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD840,
+ 0xD858,0xD858,0xD858,0xD859,0xD859,
+ 1, /* first low-surrogate */
+ 0xDD30,0xDD43,0xDD46, 0,0xDD33,0xDEC6,0xDD56,0xDED4,0xDDD8,
+ 0xDEE0,0xDFA7,0xDF44,0xDF98,0xDC54,0xDC3E,0xDC35,0xDC3A, 0,0xDC34,
+ 0xDC39,0xDC46,0xDC5A,0xDC5B,0xDC3C,0xDDDC,0xDDD6,0xDDD0,0xDD5E,0xDEAC,
+ 0xDD5D,0xDEA5,0xDFF4,0xDC24,0xDFE0,0xDFFD,0xDFF2,0xDFFC,0xDC02,0xDFF1,
+ 0xDFFF,0xDFD2,0xDFD8,0xDFD3,0xDFF9,0xDD63,0xDFED,0xDFF7,0xDFF0,0xDFD7,
+ 0xDC09,0xDFF5,0xDEC2,0xDEC5,0xDECF, 0,0xDEC1,0xDEC6,0xDED4,0xDECE,
+ 0xDC9B,0xDC99,0xDC8F,0xDCB7,0xDC82,0xDC93,0xDCB4,0xDCC1,0xDC90,0xDC9A,
+ 0xDC94,0xDC9C,0xDCB5,0xDD6F,0xDD6E,0xDC9F,0xDC8E,0xDC9E,0xDE3C,0xDE47,
+ 0xDE41,0xDEEB,0xDEEC,0xDEED,0xDEEE,0xDEDF,0xDEF2,0xDF0D,0xDF0E,0xDD86,
+ 0xDFA9,0xDFA4,0xDFA5,0xDC5F,0xDC5A,
+ /* plane 7, row 7 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD87E,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD856,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 1, /* first low-surrogate */
+ 0xDC66,0xDC68,0xDC6A,0xDC64,0xDC65,0xDCC1,0xDCD8,0xDD7B,0xDCD9,
+ 0xDD09,0xDDAA,0xDDA3,0xDDB9,0xDDE2,0xDDA5,0xDDAB,0xDE20,0xDF89,0xDF8B,
+ 0xDFDB,0xDFE4,0xDFEF,0xDFE2,0xDFE9,0xDFF0,0xDFF3,0xDFDD,0xDC1E,0xDD1D,
+ 0xDD46,0xDD7C,0xDD80,0xDD81,0xDD82,0xDD87,0xDD88,0xDD8A,0xDD8C,0xDDE7,
+ 0xDDEB,0xDDEA,0xDE68,0xDE6B,0xDE69,0xDE66,0xDE6A,0xDE65,0xDEE5,0xDEE4,
+ 0xDEE6,0xDD18,0xDE24,0xDE48,0xDE2F,0xDE7E,0xDD89,0xDE1E,0xDE49,0xDE26,
+ 0xDE09,0xDE34,0xDE2D,0xDE4A,0xDE15,0xDDA9,0xDE33,0xDE28,0xDE27,0xDE20,
+ 0xDE2B,0xDE29,0xDE6A,0xDE0B,0xDE0E,0xDE1C,0xDDFF,0xDDAA,0xDE35,0xDE11,
+ 0xDE4B,0xDE4C,0xDE1F,0xDE0F,0xDE39,0xDE68,0xDE1D,0xDE08,0xDE0C,0xDE0D,
+ 0xDE62,0xDEAF,0xDE32,0xDE2C,0xDE64,
+ /* plane 7, row 8 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD87E,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0x45CD,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46F6,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 1, /* first low-surrogate */
+ 0xDE04,0xDE16,0xDE4D,0xDE07,0xDEAE,0xDDD4,0xDDD1,0xDDD5,0xDDD0,
+ 0xDF71,0xDF5D,0xDF5B,0xDF7A,0xDDBD,0xDF7F,0xDF79,0xDF67,0xDF9E,0xDF94,
+ 0xDF64,0xDF5E,0xDF81,0xDF5A,0xDF57,0xDF7C,0xDF98,0xDF66,0xDF7E,0xDF82,
+ 0xDF68,0xDF5F,0xDF63,0xDF97, 0,0xDF53,0xDF7B,0xDF7D,0xDF78,0xDC06,
+ 0xDDC0,0xDDC2,0xDDC3,0xDEDC,0xDEE6,0xDEEC,0xDEF2,0xDEE8,0xDEEB,0xDEEA,
+ 0xDEE5,0xDEE0,0xDED0,0xDED8,0xDED5,0xDED3,0xDEE4,0xDEF3,0xDEDB,0xDF2F,
+ 0xDFF9,0xDC5D,0xDC5B,0xDC4C,0xDC58,0xDC60,0xDC53,0xDC50,0xDD07,0xDD08,
+ 0xDCF4,0xDCF6,0xDD04,0xDCFD,0xDD05,0xDE28,0xDE56,0xDE42,0xDE5C,0xDE3D,
+ 0xDE2F,0xDE2B,0xDE58,0xDE61,0xDE2C,0xDE51,0xDE50,0xDE3C,0xDE36, 0,
+ 0xDE60,0xDE5B,0xDE2E,0xDE40,0xDE5F,
+ /* plane 7, row 9 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0x477A,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47B8,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD87E,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0x4801,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,
+ 1, /* first low-surrogate */
+ 0xDE26,0xDE2D,0xDE5E,0xDE3B,0xDFEF,0xDFF3,0xDFEE,0xDFED,0xDC5A,
+ 0xDC62,0xDC5B,0xDC5F,0xDC5E,0xDC64,0xDCE0,0xDCE1,0xDCE5,0xDDA5,0xDD9B,
+ 0xDD9F,0xDD9C, 0,0xDDAA,0xDDA4,0xDDA3,0xDE67,0xDF26,0xDF1A, 0,
+ 0xDF1C,0xDF15,0xDF1B,0xDF18,0xDF1E,0xDF25,0xDDDC,0xDC7B,0xDC75,0xDC93,
+ 0xDC8F,0xDC7C,0xDC9B,0xDC88,0xDC91,0xDC7E, 0,0xDC86,0xDE5B,0xDE54,
+ 0xDF35,0xDF40,0xDF37,0xDF29,0xDF26,0xDF23,0xDF30,0xDF20,0xDF28,0xDF32,
+ 0xDF2A,0xDF31,0xDF24,0xDF41,0xDF42,0xDF43,0xDF25,0xDF38,0xDC1C,0xDC1D,
+ 0xDC1E,0xDCF6,0xDDA5,0xDD89,0xDD9D,0xDD8A,0xDD87,0xDDAB,0xDD86,0xDD9E,
+ 0xDD93,0xDDA1,0xDD88,0xDDA3,0xDD9F,0xDDA0,0xDEFF,0xDF00,0xDF02,0xDEF8,
+ 0xDEF7,0xDF01,0xDF87,0xDF89,0xDF76,
+ /* plane 7, row 10 */
+ 1 | (94 << 8), /* first, last */
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0x492F,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0x4931,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0x499C,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0x49E6,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD850,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDF6E,0xDF77,0xDF82,0xDF85,0xDF83,0xDF84,0xDC57,0xDC4B,0xDC56,
+ 0xDC5D,0xDC60,0xDC4D,0xDC55,0xDC54,0xDC53,0xDC50,0xDC63,0xDC62,0xDD17,
+ 0xDD16,0xDD2D,0xDDD9,0xDDBF, 0,0xDDB2,0xDDAC,0xDDB0,0xDDCF,0xDDB8,
+ 0,0xDDD3,0xDDB1,0xDDAF,0xDDCE,0xDDB4,0xDDB7,0xDDD5, 0,0xDD38,
+ 0xDD28,0xDD3F,0xDD40,0xDD41,0xDD33,0xDD2B,0xDD2E,0xDF11,0xDF18,0xDF17,
+ 0xDF19,0xDF16, 0,0xDF0D,0xDF26,0xDF79,0xDFD8,0xDFF3,0xDFD7,0xDFCC,
+ 0xDFCF,0xDFCB,0xDFD1,0xDFCE,0xDFD4,0xDFD5,0xDFD3,0xDFD6,0xDFCD,0xDFDA,
+ 0xDFD2,0xDFDE,0xDCCC,0xDCB8,0xDCB7,0xDCC2,0xDCC3,0xDDFA,0xDDF9,0xDE1F,
+ 0xDE1D,0xDF82,0xDEA6,0xDE90,0xDE9E,0xDE98,0xDE93,0xDE92,0xDEA5,0xDE95,
+ 0xDFA9,0xDFA8,0xDFAA,0xDFAB,0xDFAC,
+ /* plane 7, row 11 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0x4B38,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD87E,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0x4C3A,0xD867,0xD867,0x4CB1,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD868,
+ 1, /* first low-surrogate */
+ 0xDC1F,0xDC22,0xDCAA,0xDC96,0xDC91,0xDCAB,0xDCA2,0xDCA4,0xDC9D,
+ 0xDC97,0xDC7D,0xDC9F,0xDC9C,0xDC99,0xDCA6,0xDC92,0xDCA7,0xDDC9,0xDDC8,
+ 0xDDC7,0xDDCB,0xDE74,0xDEC9, 0,0xDED2,0xDEDB,0xDEEB,0xDEE9,0xDEEF,
+ 0xDEEE,0xDEF9,0xDEDE,0xDC16,0xDC45,0xDC7F,0xDC98,0xDC9F,0xDC86,0xDC90,
+ 0xDC9A,0xDC9D,0xDC8D,0xDC9C,0xDCA0,0xDCA7,0xDC8F,0xDE41,0xDE35,0xDE37,
+ 0xDE30,0xDE3A,0xDE36,0xDE08,0xDECA,0xDF12,0xDF15,0xDF22,0xDF13,0xDF18,
+ 0xDF21,0xDC10,0xDC20,0xDC2F,0xDCA5,0xDCA3,0xDCB6,0xDCAB,0xDD68,0xDD67,
+ 0xDD6F,0xDD77,0xDD64,0xDD78, 0,0xDD76,0xDD6E, 0,0xDFD0,0xDFB3,
+ 0xDFCB,0xDFD6,0xDFB1,0xDFB4,0xDFD7,0xDFC6,0xDFBA,0xDFD1,0xDFD2,0xDFB5,
+ 0xDFC4,0xDFCC,0xDFBB,0xDFB2,0xDE5B,
+ /* plane 7, row 12 */
+ 1 | (94 << 8), /* first, last */
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x4D47,0xD868,0x4D51,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xffff,0xD853,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD864,0xD841,0xD841,0xD841,
+ 0xD842,0xD841,0xD841,0xD842,0xD842,0xD841,0xD841,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD85E,0xD843,0xD843,0xD843,0xD861,0xD843,
+ 0xD843,0xD844,0xD844,0xD843,0xD843,0xD843,0xD844,0xD84A,0xD843,0xD87E,
+ 0xD843,0xD843,0xD843,0xD844,0xD843,0xD843,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD850,0xD845,0xD845,0xD846,
+ 1, /* first low-surrogate */
+ 0xDE5A,0xDE59,0xDE99,0xDE94,0xDE96,0xDE93,0xDE91,0xDE8F,0xDE98,
+ 0xDF0C,0xDF0A,0xDF0E,0xDF12,0xDF11,0xDF0B,0xDF9A, 0,0xDFB4, 0,
+ 0xDC1C,0xDC20,0xDC21,0xDCD3,0xDCD2,0xDD38, 0,0xDCCF,0xDD1D,0xDD92,
+ 0xDD8F,0xDD8C,0xDFEA,0xDCB9,0xDD6E,0xDDA0,0xDDDD,0xDE12,0xDE17,0xDE6D,
+ 0xDC05,0xDFFB,0xDFFD,0xDC06,0xDC00,0xDFFF,0xDFFE,0xDCB6,0xDD05,0xDD07,
+ 0xDEBC,0xDEBB,0xDF8B,0xDF87,0xDFFB,0xDFE7,0xDFE6,0xDFE2,0xDDD3,0xDFD9,
+ 0xDFCA,0xDC12,0xDC10,0xDFDC,0xDFD0,0xDF8B,0xDC13,0xDE10,0xDFDA,0xDC4F,
+ 0xDFFD,0xDFE5,0xDFCC,0xDC39,0xDFC7,0xDFD8,0xDC60,0xDC64,0xDC86,0xDC5E,
+ 0xDC66,0xDC5F,0xDC77,0xDC82,0xDC96,0xDD3E,0xDD79,0xDD7A,0xDE88,0xDE89,
+ 0xDE8C,0xDFE0,0xDE7B,0xDE86,0xDC94,
+ /* plane 7, row 13 */
+ 1 | (94 << 8), /* first, last */
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0x3747,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0x3817,0xD847,0xD849,0xD848,0xD848,0xD848,
+ 0xD848,0xD87E,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0x38A3,
+ 0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD84C,0xD87E,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD87E,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 1, /* first low-surrogate */
+ 0xDC97,0xDCB7,0xDCB5,0xDCB8,0xDC93,0xDCB2,0xDCB4,0xDC99,0xDCC3,
+ 0xDC9D,0xDC9B,0xDCA3, 0,0xDD9F,0xDD9E,0xDDA3,0xDDA0,0xDDA1,0xDEC5,
+ 0xDEC6,0xDEBE,0xDEC4,0xDEBF,0xDF4C,0xDF4A,0xDFB1,0xDC15,0xDC17,0xDC10,
+ 0xDC18,0xDCE0,0xDCDF,0xDD27,0xDF43,0xDF48,0xDF1D,0xDF50,0xDF58,0xDF47,
+ 0xDF54,0xDF53,0xDF40,0xDF55, 0,0xDF5A,0xDC70,0xDD5B,0xDD4D,0xDD56,
+ 0xDD4F,0xDC87,0xDD59,0xDC88,0xDD54,0xDD53,0xDD50,0xDEB3,0xDF6E, 0,
+ 0xDF6F,0xDF93,0xDC29,0xDC25,0xDC28,0xDC6F,0xDEB8,0xDC97,0xDCB3,0xDD79,
+ 0xDD7E,0xDD7C,0xDD83,0xDCAC,0xDC00,0xDC34,0xDC65,0xDC36,0xDCA7,0xDC59,
+ 0xDC58,0xDC31,0xDC62,0xDC38,0xDC73,0xDC3E,0xDC55,0xDC54,0xDC95,0xDCAD,
+ 0xDCA5,0xDC94,0xDC9A,0xDC9B,0xDC99,
+ /* plane 7, row 14 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3B1E,0xD84C,
+ 0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 1, /* first low-surrogate */
+ 0xDC9F,0xDC53,0xDE12,0xDE0A,0xDE09,0xDE0C,0xDE0B,0xDE0E,0xDE0D,
+ 0xDE08,0xDD38,0xDD3A,0xDD37,0xDD3D,0xDD2D,0xDD82,0xDD95,0xDD87,0xDD9D,
+ 0xDDB5,0xDD81,0xDDC7,0xDD9B,0xDD98,0xDD94,0xDD86,0xDD90,0xDD34,0xDD8E,
+ 0xDD85,0xDDA6,0xDD96,0xDFEA,0xDFDF,0xDEBD,0xDFF7,0xDFEB,0xDFE0,0xDFE8,
+ 0xDFE1,0xDFE9,0xDFEE,0xDFE5,0xDFEC,0xDC63,0xDCC6,0xDCC2,0xDCC1,0xDCC0,
+ 0xDCC3,0xDD18,0xDEAE,0xDEA3,0xDEC5,0xDEA0,0xDEB4,0xDEA5, 0,0xDEA4,
+ 0xDEA8,0xDEA6,0xDEA8,0xDE8D,0xDE82,0xDE9E,0xDE89,0xDE83,0xDE91,0xDEA6,
+ 0xDE9A,0xDE90,0xDE85,0xDE7D,0xDCEC,0xDE9B,0xDEA5,0xDEF0,0xDE96,0xDE88,
+ 0xDED6,0xDED8,0xDE86,0xDEA4,0xDE97,0xDD1C,0xDD19,0xDD9E,0xDD9F,0xDD9D,
+ 0xDD9C,0xDE5D,0xDE5E,0xDE73,0xDE63,
+ /* plane 7, row 15 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84F,0xD84E,0xD84F,0xD850,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD850,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD850,0xD84F,0xD84F,0xD87E,0xD84F,0xD850,0xD850,0xD84F,0xD84F,
+ 0xD850,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0x71D7,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD852,0xD852,0x3E9A,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,
+ 1, /* first low-surrogate */
+ 0xDEBE,0xDEC1,0xDEBC,0xDEBF,0xDEBB,0xDEBD,0xDF13,0xDF14,0xDFF8,
+ 0xDFFA,0xDC06,0xDFFE,0xDC51,0xDC0B,0xDFF1,0xDFA9,0xDFD5,0xDFDC,0xDFCB,
+ 0xDFF2,0xDC5F,0xDFDB,0xDFD6,0xDFD9,0xDFD1,0xDFCF,0xDFD8,0xDFE0,0xDFD4,
+ 0xDFF3,0xDC05,0xDFCE,0xDFF4,0xDD12,0xDFDA,0xDC0E,0xDC06,0xDFD7,0xDFCD,
+ 0xDC07,0xDFE1,0xDC08,0xDFBE,0xDFEF,0xDFD9,0xDFDA, 0,0xDFA0,0xDFDF,
+ 0xDF9E,0xDFBF,0xDFAF,0xDFA7,0xDFAA,0xDFF4,0xDFAE,0xDFB5,0xDFB8,0xDFDB,
+ 0xDFC0,0xDFB7,0xDFA2,0xDFDD,0xDFA1,0xDFA5,0xDFB4,0xDFA6,0xDFAB,0xDFAC,
+ 0xDF9F,0xDFB1,0xDFFC,0xDD2E,0xDD30,0xDD99,0xDDF8,0xDDF6,0xDEF4,0xDEEB,
+ 0xDEE1,0xDEE4,0xDC75,0xDC69, 0,0xDC99,0xDC9E,0xDC94,0xDC93,0xDC91,
+ 0xDE19,0xDE17,0xDE49,0xDE47,0xDE48,
+ /* plane 7, row 16 */
+ 1 | (94 << 8), /* first, last */
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD853,0xD847,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0x3FC2,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD87E,0xD854,0xD854,0xD854,0xD854,0xD854,0xD84A,0xD854,
+ 0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0x40DC,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD87E,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x41B3,
+ 0xD856,0xD856,0xD856,0xD87E,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,
+ 1, /* first low-surrogate */
+ 0xDE52,0xDE40,0xDE63,0xDE46,0xDE5F,0xDF0E,0xDF85,0xDF87,0xDFCB,
+ 0xDFCC,0xDFC9,0xDCCB,0xDCE7,0xDD20,0xDE5F,0xDE60,0xDE6A,0xDE76,0xDE73,
+ 0xDE71,0xDE66, 0,0xDE6B,0xDE79,0xDE7B,0xDF3C,0xDF9E,0xDF9C,0xDC1C,
+ 0xDC1E,0xDC21,0xDC96,0xDCA1,0xDCB6,0xDCA0,0xDC94,0xDC97,0xDE81,0xDE86,
+ 0xDEC0,0xDE8A,0xDD4B,0xDE85,0xDE95,0xDE49,0xDE82,0xDE84,0xDC78,0xDE90,
+ 0xDEB1,0xDFFE,0xDFFB,0xDD50,0xDD56,0xDD5A,0xDD4C, 0,0xDD57,0xDEE1,
+ 0xDED9,0xDEDB,0xDEF4,0xDF45,0xDF47,0xDC74,0xDC6B,0xDC68,0xDC69,0xDC79,
+ 0xDD5B,0xDC80,0xDC81,0xDC61,0xDC70,0xDC6F,0xDC73,0xDC5D,0xDDFA, 0,
+ 0xDDF3,0xDE0A,0xDE17,0xDD5F,0xDEB0,0xDC3E,0xDC46,0xDC4F,0xDC44,0xDC69,
+ 0xDC33,0xDC2F,0xDC4E,0xDC3A,0xDC2B,
+ /* plane 7, row 17 */
+ 1 | (94 << 8), /* first, last */
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD87E,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD84A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD850,0xD85A,0xD85A,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDCA9,0xDC50,0xDC45,0xDC37,0xDC25,0xDC2C,0xDC3F,0xDC34,0xDC29,
+ 0xDC1E,0xDC3D,0xDEED,0xDD66,0xDEF3,0xDEEA,0xDEEB,0xDCCC,0xDCCE,0xDCD0,
+ 0xDCE3,0xDCE0,0xDCD1,0xDCDC,0xDCDD,0xDCF0,0xDCDB,0xDCE5,0xDCF1,0xDCC9,
+ 0xDCE8,0xDCE7,0xDCC8,0xDCDE,0xDCCD,0xDCC5,0xDCC6,0xDCE4,0xDCC3,0xDEFB,
+ 0xDEFC,0xDEFE,0xDF03,0xDF00,0xDEFD,0xDF05,0xDF13,0xDFA7,0xDFB4,0xDC70,
+ 0xDC74,0xDC71,0xDC75,0xDC7D,0xDC73,0xDCC4,0xDCC3,0xDCDE,0xDCDD,0xDD11,
+ 0xDD0F,0xDD10,0xDDC3,0xDDC2,0xDDCA,0xDDC1,0xDE23,0xDFB1,0xDC24,0xDC11,
+ 0xDC25,0xDC0A,0xDC1F,0xDC20,0xDC14,0xDC28,0xDC03,0xDC12,0xDC0B,0xDC17,
+ 0xDE11,0xDD49,0xDD89,0xDD90,0xDD8F,0xDD96,0xDD95,0xDD93,0xDDED,0xDDF0,
+ 0xDFDE,0xDE85,0xDE77,0xDE7A,0xDE84,
+ /* plane 7, row 18 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x8666,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0x45D9,0xD85C,0x45DD,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 1, /* first low-surrogate */
+ 0xDE79,0xDE7D,0xDE7B,0xDEED,0xDEEC,0xDDF6,0xDD9B,0xDE9D,0xDF11,
+ 0xDEC4,0xDEC8,0xDEDF,0xDEBF,0xDEB3,0xDEBA,0xDF10,0xDF06,0xDE88,0xDE9A,
+ 0xDEE0,0xDECC,0xDEB5,0xDEE1,0xDEBC,0xDEC6,0xDF0B,0xDEA4,0xDE95,0xDEA3,
+ 0xDEE2,0xDECD,0xDEE3,0xDEAB,0xDECB,0xDE8F,0xDDAB,0xDEA9,0xDF24,0xDEE4,
+ 0xDF12,0xDEE5,0xDF67,0xDEAA,0xDEA0,0xDEE6,0xDEC1,0xDEE7,0xDF0D,0xDE86,
+ 0xDEB0,0xDE8B,0xDEE8,0xDEC9,0xDF19,0xDEC0,0xDF0C,0xDEE9,0xDEEA,0xDDED,
+ 0xDDE3,0xDDE4,0xDDE8,0xDDD2,0xDDE2, 0,0xDFCF,0xDFD1,0xDFC3,0xDFC9,
+ 0xDFEA,0xDFB4,0xDFDC,0xDFBD,0xDFE6,0xDFC8,0xDFEC,0xDFB2,0xDFA9,0xDFD3,
+ 0xDFC0,0xDFE9,0xDFD5, 0,0xDFC5, 0,0xDFCB,0xDFD0,0xDFD2,0xDFE4,
+ 0xDFE8,0xDFCD,0xDFB6,0xDFAA,0xDFD4,
+ /* plane 7, row 19 */
+ 1 | (94 << 8), /* first, last */
+ 0xD861,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46FC,0xD85E,0xD87E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD87E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD87E,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,
+ 1, /* first low-surrogate */
+ 0xDC49,0xDFC1,0xDFDD,0xDFCE,0xDDC9,0xDDCA,0xDEFD,0xDED9,0xDEFF,
+ 0xDF04,0xDEFA,0xDF06,0xDF15,0xDF11,0xDF07,0xDF0B,0xDFFC,0xDFFD,0xDC6D,
+ 0xDC65,0xDD14,0xDD13,0xDD0C,0xDD0B,0xDD18,0xDD22,0xDE7D,0xDE6F,0xDE75,
+ 0xDE7B,0xDE80,0xDE7F,0xDE96,0xDE6D,0xDE6B,0xDE86,0xDE73,0xDE62,0xDE77,
+ 0xDE81,0xDE69,0xDE82,0xDE97,0xDE84, 0,0xDE78,0xDDD0,0xDE7A,0xDE6A,
+ 0xDE65,0xDE7E,0xDE94,0xDFC2,0xDFC1,0xDFF9,0xDC71,0xDC6B,0xDC6D,0xDC6F,
+ 0xDC6E,0xDCF2,0xDCE8,0xDCEF,0xDCE9,0xDCEA,0xDCED,0xDCF3,0xDCE6,0xDDC9,
+ 0xDDB4,0xDDB3,0xDDB9,0xDDCA,0xDDB1,0xDDB6,0xDDC7,0xDDC4,0xDDB7,0xDE6F,
+ 0xDF33,0xDF32,0xDF1F,0xDDD9,0xDF2B,0xDF30,0xDF36,0xDF42,0xDF41,0xDDD8,
+ 0xDCA5,0xDCAB,0xDCA9,0xDCB3,0xDCA7,
+ /* plane 7, row 20 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD87E,0x8F3A,0xD860,
+ 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD862,0x4907,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0x933D,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD845,
+ 0xD863,0xD87E,0xD863,0x49A8,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD87E,0xD863,0xD863,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDCA0,0xDCD2,0xDCA8,0xDCB6,0xDCAC,0xDCAE,0xDCE6,0xDE65,0xDF47,
+ 0xDF63,0xDF4D,0xDF5F,0xDF4B,0xDF60,0xDF49,0xDF53,0xDDDF, 0,0xDF57,
+ 0xDF4E,0xDF52,0xDF54,0xDC20,0xDC22,0xDDC1,0xDDD7,0xDDD5,0xDDC4,0xDDD0,
+ 0xDDBB,0xDDE2,0xDDCB,0xDDB8,0xDDBF,0xDDD8,0xDDC0,0xDDBA,0xDDB4,0xDDBC,
+ 0xDDD4,0xDDED,0xDDC2,0xDDD9,0xDDCC,0xDF2F,0xDF23,0xDF96,0xDF8D,0xDF9E,
+ 0xDF99,0xDC83, 0,0xDC6A,0xDC69,0xDC75,0xDC6C,0xDC80,0xDC6E,0xDC81,
+ 0xDC77,0xDC76,0xDC73,0xDC70,0xDC84,0xDD19,0xDDF2, 0,0xDDEC,0xDDEB,
+ 0xDDF6,0xDDEF,0xDDF4,0xDDEE,0xDDF3,0xDDED,0xDC9B,0xDC98,0xDC94,0xDC7A,
+ 0xDC9A,0xDDF0,0xDD4C, 0,0xDD57,0xDD51,0xDD62,0xDD52,0xDD5C,0xDD53,
+ 0xDDEF,0xDE85,0xDF2D,0xDF3E,0xDF30,
+ /* plane 7, row 21 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD87E,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0x4ACA,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,
+ 1, /* first low-surrogate */
+ 0xDF7D,0xDFE6,0xDFF6,0xDFE4,0xDFE9,0xDFEC,0xDFF2,0xDFE8,0xDFE3,
+ 0xDFEB,0xDFF0,0xDFEA,0xDFE7,0xDFFD,0xDFE5,0xDFEE,0xDFF5,0xDFF9,0xDFF1,
+ 0xDFF4,0xDDF4,0xDC11,0xDCDE,0xDCD8,0xDCDD,0xDCDB,0xDCD3,0xDCE1,0xDDDE,
+ 0xDDFC,0xDE28,0xDEB7,0xDEB8,0xDEC7,0xDEB2,0xDEA9,0xDEB9,0xDEBC,0xDEB3,
+ 0xDED1,0xDFB0,0xDFB1,0xDFB6,0xDC04,0xDC2C,0xDCC1,0xDC9E,0xDCBA, 0,
+ 0xDCD1,0xDCD3,0xDCD4,0xDCD5,0xDCC5,0xDCB6,0xDCB2,0xDCB5,0xDCC3,0xDCB9,
+ 0xDCC6,0xDDD6,0xDDE0,0xDDDB,0xDDD7,0xDDDD,0xDF15,0xDF0C,0xDF0F,0xDF0E,
+ 0xDEFE,0xDF04,0xDF0B,0xDF02,0xDEFF,0xDF08,0xDF10,0xDF17,0xDF13,0xDF06,
+ 0xDF09,0xDC24,0xDC26,0xDC25,0xDC48,0xDCB5,0xDCD2,0xDCD5,0xDCC4,0xDCAF,
+ 0xDCAD,0xDCC1,0xDCC0,0xDCCC,0xDCCD,
+ /* plane 7, row 22 */
+ 1 | (94 << 8), /* first, last */
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4B8D,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,
+ 0xD868,0xD868,0x4CC0,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x4CCA,
+ 0xD867,0xD867,0xD867,0xD868,0xD868,0xD867,0xD867,0xD868,0xD868,0xD868,
+ 0x4D25,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x4D4A,
+ 0xD868,0x4D53,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD854,
+ 0xD87E,0xD841,0xD842,0xD842,0xD842,
+ 1, /* first low-surrogate */
+ 0xDCC3,0xDCC8,0xDCC5,0xDCBA,0xDCD0,0xDCC2,0xDCCE, 0,0xDE43,
+ 0xDE42,0xDE40,0xDE31,0xDECF,0xDECE,0xDF30,0xDF34,0xDF32,0xDF43,0xDF3C,
+ 0xDC11,0xDC35,0xDC34,0xDC37,0xDC31,0xDCBF,0xDCBC,0xDCC2,0xDCC9,0xDD83,
+ 0xDD8B,0xDDA0,0xDD8D,0xDD8C,0xDD9A,0xDD8A,0xDD91,0xDFF1,0xDC0F,0xDC01,
+ 0xDC07,0xDC0C, 0,0xDFDC,0xDFEE,0xDFF7,0xDFF2,0xDFF8,0xDFEB, 0,
+ 0xDFE6,0xDFED,0xDFE9,0xDC08,0xDC00,0xDFE5,0xDFFC,0xDE61,0xDE5E,0xDE5F,
+ 0,0xDE9B,0xDF16,0xDF15,0xDF20,0xDF14,0xDF1A,0xDF17,0xDF9C, 0,
+ 0xDFF1, 0,0xDFF0,0xDC28,0xDC24,0xDC2A,0xDC2B,0xDCD5,0xDD04,0xDD05,
+ 0xDD91,0xDD92,0xDEA6,0xDD09,0xDC22,0xDC1A,0xDC0E,0xDC1B,0xDC08,0xDCB3,
+ 0xDC1C,0xDE9D,0xDC12,0xDC1E,0xDCBB,
+ /* plane 7, row 23 */
+ 1 | (94 << 8), /* first, last */
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD84D,0xD842,0xD842,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0x3605,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDCBF,0xDCBC,0xDD08,0xDD09,0xDD63,0xDDC8,0xDF28,0xDF8E,0xDF8D,
+ 0xDC43,0xDC4D,0xDC6D,0xDC42,0xDC52,0xDC51,0xDC69,0xDC50,0xDC56,0xDC6C,
+ 0xDC44,0xDC45,0xDC6B, 0,0xDC68,0xDC57,0xDE2E,0xDE31,0xDE2D,0xDC8B,
+ 0xDCB2,0xDC8D,0xDCA3,0xDCA4,0xDC90,0xDC89,0xDC8E,0xDC92,0xDD7B,0xDE90,
+ 0xDE8F,0xDCE9,0xDCCD,0xDCC5,0xDCD0,0xDCC9,0xDCD1,0xDCC7,0xDCD2,0xDC5F,
+ 0xDCE1,0xDCCC,0xDCC6,0xDCE4,0xDDA9,0xDED3,0xDEDA,0xDED2,0xDEDB,0xDF4D,
+ 0xDF4E,0xDC1C,0xDCE8,0xDF6C,0xDF5F,0xDF66,0xDF64,0xDF78,0xDF65,0xDF6D,
+ 0xDF61,0xDF7A,0xDC07,0xDD66,0xDD68,0xDD62,0xDED3,0xDED4,0xDED1,0xDEDC,
+ 0xDF73,0xDF72,0xDC2D,0xDC2C,0xDC2F,0xDC72,0xDCB4,0xDD89,0xDCCD,0xDCA6,
+ 0xDCA2,0xDCA0,0xDC46,0xDCA1,0xDC57,
+ /* plane 7, row 24 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0x3BF0,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD851,
+ 1, /* first low-surrogate */
+ 0xDCA3,0xDCB1,0xDCDB,0xDCF6,0xDCDC,0xDCD6,0xDE13,0xDD9C,0xDD97,
+ 0xDDD8,0xDDE4,0xDDD4,0xDDE5,0xDDDB,0xDDD0,0xDDDA,0xDDCC,0xDDDC,0xDDED,
+ 0xDDD3,0xDDD1,0xDDCE,0xDDD9,0xDDDD,0xDCC6,0xDEE6,0xDEE5,0xDEE9,0xDFFF,
+ 0xDFFE,0xDC0E,0xDC8C,0xDCCA,0xDCCB,0xDD1A,0xDED7,0xDECF,0xDED0,0xDEC9,
+ 0xDECC,0xDED3,0xDFA4,0xDFA3,0xDE81,0xDF26,0xDEF3,0xDF27,0xDEF2,0xDEFF,
+ 0xDEF5,0xDEFC,0xDF0E, 0,0xDEF6,0xDF00,0xDF23,0xDF05,0xDF25,0xDF08,
+ 0xDF50,0xDD25,0xDD20,0xDD23,0xDD21,0xDDA1,0xDE69,0xDE6C,0xDE68,0xDE6B,
+ 0xDECC,0xDECD,0xDC10,0xDC0D,0xDC0A,0xDC16,0xDC14,0xDC52,0xDC28,0xDC2E,
+ 0xDC2C,0xDC4D,0xDC49,0xDC31,0xDC30,0xDC33,0xDC2D,0xDC36,0xDC3E,0xDC2F,
+ 0xDC27,0xDC34,0xDC4C,0xDFFE,0xDC12,
+ /* plane 7, row 25 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0xD851,0xD850,0xD851,0xD850,0x3E02,0xD847,0xD850,0xD850,
+ 0xD851,0xD851,0xD851,0x3E23,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD87E,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,
+ 1, /* first low-surrogate */
+ 0xDC1F,0xDC17,0xDFF5,0xDC15,0xDFF7, 0,0xDF7D,0xDFFA,0xDFF9,
+ 0xDC4B,0xDD9C,0xDD9D, 0,0xDEF0,0xDEF6,0xDEEF,0xDC9D,0xDC9A,0xDCA7,
+ 0xDCAF,0xDCAA,0xDE64,0xDE86,0xDE75,0xDE70,0xDE84,0xDE6B,0xDE85,0xDE6C,
+ 0xDF17,0xDF94,0xDF93,0xDCD2,0xDCD7,0xDCD4,0xDEA6,0xDEA7,0xDE9C,0xDE8B,
+ 0xDE8D,0xDE98,0xDEB9,0xDE9B,0xDE9D,0xDE99,0xDEA8,0xDE91,0xDE87,0xDE9A,
+ 0xDFA6,0xDC1F,0xDCA7,0xDCB1,0xDCB2,0xDCB7,0xDED0,0xDEB3,0xDEB5,0xDEC4,
+ 0xDEC3,0xDEBC,0xDEB2,0xDEBA,0xDEBB,0xDEC2,0xDECD,0xDEBE,0xDEB7,0xDF8F,
+ 0xDC03,0xDC04,0xDD71,0xDD77,0xDD74,0xDD8B,0xDD7A,0xDD51,0xDD8C,0xDD73,
+ 0xDEFF,0xDEFB,0xDEFD,0xDEF0,0xDEF3,0xDEFC,0xDEF2,0xDC92,0xDC9E,0xDCAE,
+ 0xDC96,0xDE14,0xDE12,0xDE13,0xDE16,
+ /* plane 7, row 26 */
+ 1 | (94 << 8), /* first, last */
+ 0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD87E,
+ 0xD857,0xD857,0xD858,0xD858,0xD858,0x4315,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD87E,0xD858,
+ 0xD858,0xD87E,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD84F,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 1, /* first low-surrogate */
+ 0xDE0F,0xDEB6,0xDEBD,0xDC8C,0xDCAE,0xDCAC,0xDCAB,0xDC99,0xDC92,
+ 0xDCBB,0xDC9E,0xDC7E,0xDCAF,0xDCBC,0xDC98,0xDF01,0xDF09,0xDF06,0xDD67,
+ 0xDF07,0xDF08,0xDCCF,0xDD0E,0xDD32, 0,0xDD12,0xDD16,0xDD17,0xDD1B,
+ 0xDD15,0xDD31,0xDD18,0xDD1A,0xDD10,0xDD0A,0xDD09,0xDE4F,0xDD73,0xDF0F,
+ 0xDF10,0xDD75,0xDF28,0xDF11,0xDF16,0xDF17,0xDF02,0xDFBB,0xDFBA,0xDFC3,
+ 0xDFBC,0xDC8A,0xDC84,0xDC86,0xDCE0,0xDD17,0xDD18,0xDD1E,0xDD15,0xDDD3,
+ 0xDDDA,0xDDD9,0xDFE6,0xDFF4,0xDFE1,0xDC69,0xDC40,0xDC58,0xDC6C,0xDC4D,
+ 0xDD21,0xDD99,0xDDF1,0xDF68,0xDE86,0xDF5B,0xDF5C,0xDF77,0xDF2C,0xDDAD,
+ 0xDF58,0xDF64,0xDF61,0xDF48,0xDF97,0xDF59,0xDF29,0xDF62,0xDF2E,0xDF68,
+ 0xDF90,0xDF3A,0xDF3D,0xDF5E,0xDF46,
+ /* plane 7, row 27 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x455D,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85C,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD842,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x465A,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD87E,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 1, /* first low-surrogate */
+ 0xDF69,0xDF65,0xDF3E,0xDF49,0xDF56,0xDFE1,0xDF78,0xDF79,0xDF66,
+ 0xDF4A,0xDF35,0xDF7A,0xDF92,0xDF60,0xDF36,0xDF51,0xDF42, 0,0xDF3F,
+ 0xDF7B,0xDF5D,0xDF94,0xDF6A,0xDDB5,0xDDF2,0xDFBB,0xDC1B,0xDC1A,0xDC33,
+ 0xDC17,0xDC0A,0xDC15,0xDC12,0xDC01,0xDC2D,0xDFFD,0xDC23,0xDC05,0xDC11,
+ 0xDC00,0xDC1C,0xDC35,0xDC2E,0xDC36,0xDEBF,0xDC2F,0xDC0C,0xDC09,0xDC31,
+ 0xDFFC,0xDC0F,0xDC18,0xDC02,0xDE00,0xDF1F,0xDF37, 0,0xDF38,0xDF2B,
+ 0xDF2E,0xDF21,0xDF30,0xDF29,0xDF31,0xDDC9,0xDF01,0xDF2C,0xDF22,0xDFFF,
+ 0xDC77,0xDC67,0xDC7F,0xDC7D,0xDC7B,0xDC7E,0xDD1E,0xDD1C,0xDD21,0xDD26,
+ 0xDD27,0xDD29,0xDD2C,0xDD1D,0xDD2B,0xDEBF,0xDEA4,0xDEAA,0xDEAE,0xDE9F,
+ 0xDED0,0xDEB1,0xDEAD,0xDE9B,0xDEB2,
+ /* plane 7, row 28 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85F,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x4785,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD87E,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD87E,0xD862,0xD862,0xD862,0xD862,
+ 0x490B,0xD862,0xD862,0xD862,0xD862,0xD862,0xD853,0x4939,0xD862,0xD862,
+ 0xD862,0x4937,0xD862,0xD862,0xD862,
+ 1, /* first low-surrogate */
+ 0xDEA9,0xDEB3,0xDEB4,0xDEBA,0xDEA5,0xDEB7,0xDEAC,0xDECB,0xDECF,
+ 0xDFC6,0xDC01,0xDFFF,0xDFFD,0xDC77,0xDC78,0xDC76,0xDCF7,0xDDCC, 0,
+ 0xDDD4,0xDDD7,0xDDD5,0xDDD6,0xDDD3,0xDF5D,0xDF55,0xDCE0,0xDD48,0xDCEE,
+ 0xDCDB,0xDCE7,0xDCD6,0xDCE5,0xDCE1,0xDCDD,0xDCE2,0xDE70,0xDE66,0xDE6F,
+ 0xDE6E,0xDF81,0xDF69,0xDF6E,0xDF6D,0xDF6C,0xDF84,0xDF85,0xDF71,0xDF73,
+ 0xDF6A,0xDF6F,0xDF7B,0xDD6A,0xDD7C,0xDD7D,0xDD81,0xDDFA,0xDE05,0xDDEB,
+ 0xDDFB,0xDDE9,0xDDEF,0xDDFC,0xDDE7,0xDDE1,0xDDEE,0xDDFD,0xDF32,0xDFA7,
+ 0xDFB5,0xDFB1,0xDFB9,0xDFA8,0xDFB3,0xDDE6,0xDC8A,0xDC91,0xDC8D,0xDC99,
+ 0,0xDC9A,0xDC9B,0xDC92,0xDC8F,0xDCAB,0xDCDB, 0,0xDE75,0xDE31,
+ 0xDE38, 0,0xDE35,0xDE69,0xDE3B,
+ /* plane 7, row 29 */
+ 1 | (94 << 8), /* first, last */
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD87E,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0x4A6B,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0x4ACD,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,
+ 1, /* first low-surrogate */
+ 0xDE3D,0xDE6C,0xDE79,0xDE3C,0xDE3E,0xDC97,0xDCA5,0xDCA2,0xDC9D,
+ 0xDCA1,0xDD68,0xDD6F,0xDD6D,0xDD72,0xDD75,0xDD77,0xDD79,0xDEB5,0xDEEA,
+ 0xDEAB,0xDF43,0xDF41,0xDF42,0xDC09,0xDC08,0xDC06,0xDC01,0xDC03,0xDC00,
+ 0xDC04,0xDC0A,0xDC0E,0xDC0D,0xDC07,0xDC0F,0xDC14,0xDC02,0xDC15,0xDC0C,
+ 0xDC10,0xDC05,0xDCFD,0xDCFF,0xDD04,0xDD00,0xDD09,0xDE2B,0xDDF7,0xDE31,
+ 0xDEDB,0xDEC5,0xDED3,0xDECE, 0,0xDEC9,0xDEBF,0xDECB,0xDEC0,0xDED0,
+ 0xDED4,0xDFC1,0xDFB9,0xDFBB,0xDFC3,0xDFC9,0xDC07,0xDC2D,0xDCF8,0xDCE1,
+ 0xDCFA,0xDCEF,0xDCFD, 0,0xDCEB,0xDCF1,0xDCED,0xDCFE,0xDDF8,0xDE03,
+ 0xDDEE,0xDDE8,0xDE01,0xDEEC,0xDF22,0xDF14,0xDF34,0xDF2F,0xDF39,0xDF41,
+ 0xDF3C,0xDF49,0xDF58,0xDF3A,0xDF42,
+ /* plane 7, row 30 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD87E,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0x4C4D,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD87E,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD845,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD842,0x3510,0xD842,
+ 1, /* first low-surrogate */
+ 0xDF3F,0xDC22,0xDC23,0xDC4A,0xDCDC,0xDCD9,0xDCDB,0xDCE2,0xDE07,
+ 0xDCDF,0xDCE0,0xDCD7,0xDE4F,0xDE46,0xDE53,0xDE55,0xDE4E,0xDE4A,0xDE4C,
+ 0xDE63,0xDF51,0xDF53,0xDF58,0xDF4D,0xDF5A,0xDF49,0xDF5D,0xDC12,0xDC3C,
+ 0xDCD1,0xDCDF,0xDCD6,0xDCD8,0xDCE0,0xDCD9,0xDDB1,0xDDAC,0xDDAA,0xDDEE,
+ 0xDDBD, 0,0xDDC3,0xDDA8,0xDDAE,0xDDAB,0xDC1D,0xDC27,0xDC38,0xDC12,
+ 0xDC48,0xDC2B,0xDC16,0xDC19,0xDC3D,0xDC23,0xDC2A,0xDE64,0xDEAD,0xDEAC,
+ 0xDE14,0xDEB1,0xDEAF,0xDF2C,0xDF24,0xDF25,0xDF28,0xDFF9,0xDFF7,0xDFFD,
+ 0xDFFE,0xDC39,0xDC33,0xDCD7,0xDCD8,0xDCE4,0xDCA1,0xDD0E,0xDD3B,0xDD44,
+ 0xDD42,0xDD94,0xDD93,0xDDD5,0xDEA7,0xDC31,0xDC23,0xDC28,0xDC27,0xDCC6,
+ 0xDDA3,0xDE21,0xDC1B, 0,0xDCC1,
+ /* plane 7, row 31 */
+ 1 | (94 << 8), /* first, last */
+ 0xD842,0xD842,0xD842,0xD842,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0x367B,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0x381D,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0x64F5,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3B27,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,
+ 1, /* first low-surrogate */
+ 0xDCC3,0xDD2A,0xDD69,0xDE27,0xDCB6,0xDCA7,0xDCA4,0xDCA6,0xDC90,
+ 0xDC9E,0xDC94,0xDCA8,0xDCA5,0xDCA2,0xDC91, 0,0xDCBC,0xDCBD,0xDCB4,
+ 0xDCB0,0xDCE4,0xDD45,0xDD4B,0xDD7E,0xDD7F,0xDD7D,0xDDC3,0xDCFC,0xDCF7,
+ 0xDCF0,0xDCED,0xDCF1,0xDCF8,0xDEE9,0xDCEB, 0,0xDF90,0xDF8D,0xDF86,
+ 0xDF91,0xDF8A,0xDC08,0xDC50,0xDEEA,0xDEE6,0xDEE2,0xDEE7,0xDEED,0xDEE1,
+ 0xDC34,0xDC76,0xDC75,0xDC73,0xDCB5,0xDD90,0xDD92,0xDCE1,0xDCDF,0xDCD5,
+ 0xDCF2,0xDCFE,0xDD13,0xDD2E,0xDE19,0xDE08, 0,0xDE05,0xDE09,0xDE06,
+ 0xDE03,0xDDFD,0xDDFC,0xDE02,0xDE42,0xDC1A,0xDC11,0xDC15,0xDC16,0xDCCC,
+ 0xDCCF,0xDCD0,0xDD22,0xDD1E,0xDD21,0xDEE5, 0,0xDF54,0xDEEF,0xDF53,
+ 0xDF51,0xDFAD,0xDF67,0xDF68,0xDFA4,
+ /* plane 7, row 32 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD87E,0xD852,0xD852,
+ 0xD852,0x3FCF,0xD853,0xD853,0xD853,0x3FCD,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDF77,0xDF89,0xDF44,0xDF8B,0xDF79,0xDF5B,0xDF43,0xDF57,0xDF4A,
+ 0xDF7C,0xDF46,0xDF7B,0xDF56,0xDDA8,0xDE76,0xDE72,0xDED6,0xDED8,0xDED1,
+ 0xDC22,0xDC20,0xDC23,0xDC1E,0xDC6E,0xDCA3,0xDC77,0xDCA6,0xDC6D,0xDCA2,
+ 0xDC7C,0xDC84,0xDC68,0xDC74,0xDC86,0xDCA5,0xDC7B,0xDC7A,0xDC69,0xDC72,
+ 0xDC76,0xDC4A,0xDC37,0xDC2A,0xDC2D,0xDC46,0xDC28,0xDC26,0xDC42,0xDC2C,
+ 0xDC38,0xDC2B,0xDC33,0xDC45,0xDD39,0xDEF9,0xDEFA,0xDCB8,0xDCB7,0xDCBB,
+ 0xDCB9,0xDCB4,0xDE6F,0xDE87,0xDE8F,0xDEA2,0xDEA3,0xDD31,0xDF9B,0xDF9D,
+ 0xDFCE, 0,0xDEBD,0xDEBF,0xDE92, 0,0xDEEF,0xDEC9,0xDFA4,0xDFA8,
+ 0xDFAA,0xDC28,0xDC24,0xDC25,0xDC26,0xDCA9,0xDCBA,0xDCBE,0xDCBC,0xDCC0,
+ 0xDEF0,0xDEDF,0xDEE0,0xDEED,0xDEDB,
+ /* plane 7, row 33 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0x4182,0xD856,0xD856,0xD856,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD87E,0xD857,
+ 0xD857,0x4252,0xD857,0xD857,0xD857,0xD857,0xD87E,0xD857,0xD857,0xD857,
+ 0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xffff,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0x7F80,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDEFB,0xDEB9,0xDEDA,0xDEEB,0xDEEC,0xDD9A,0xDD9F,0xDD9B,0xDD97,
+ 0xDDA1,0xDF0F,0xDF05,0xDF48, 0,0xDCBC,0xDCBA,0xDEBF,0xDD01,0xDCE8,
+ 0xDCEF,0xDCE4,0xDCE6,0xDD02,0xDCEB,0xDCE0,0xDCED,0xDCD9,0xDD64,0xDD14,
+ 0xDCEE, 0,0xDD13,0xDCF9,0xDCF8,0xDF25,0xDD69,0xDF19,0xDF20,0xDF43,
+ 0xDF3F,0xDD45,0xDD4C,0xDD49,0xDD4F,0xDD41,0xDD3E,0xDD4D,0xDD52,0xDD4A,
+ 0xDD4E,0xDD73,0xDD42,0xDD51,0xDD55,0xDD50,0xDD6C, 0,0xDD6A,0xDD53,
+ 0xDD68,0xDE55,0xDE56,0xDF1C,0xDF1D, 0,0xDF1E,0xDF23,0xDF1F,0xDFE1,
+ 0xDFCD,0xDFCB,0xDFCC,0xDFC8,0xDFC9,0xDC9B,0xDC94,0xDC92,0xDC96,0xDC93,
+ 0xDC95,0xDC8F,0xDD1D,0xDD22,0xDD21,0xDDE9,0xDDEF,0xDDE0,0xDDE6,0xDDE4,
+ 0xDC29,0xDC2C,0xDC76,0xDC83,0xDC78,
+ /* plane 7, row 34 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD851,0xD85A,0x4451,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85C,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0x455A,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,
+ 0xD85B,0xD85B,0xD85C,0xD85C,0xD85B,0xD85C,0xD85B,0xD85B,0xD85B,0xD85C,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,
+ 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD87E,0xD87E,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85A,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 1, /* first low-surrogate */
+ 0xDC3C,0xDC43,0xDC7A, 0,0xDCF2,0xDD9E,0xDD9B,0xDD9A,0xDDF6,
+ 0xDDF5,0xDEA5,0xDE93,0xDEA4,0xDE82,0xDEC7,0xDFB7,0xDC1D,0xDFE2,0xDFD7,
+ 0xDFE3,0xDFE4,0xDFBC,0xDFD3, 0,0xDF5A,0xDFD2,0xDF2D,0xDDAF,0xDFC4,
+ 0xDFD0,0xDFE5,0xDC05,0xDC07,0xDFE6,0xDC1B,0xDFE7,0xDFD8,0xDFBE,0xDC17,
+ 0xDFB4,0xDFD9,0xDFE8,0xDFAD,0xDFAF,0xDFC8,0xDFE9,0xDFEA,0xDDFE,0xDDFB,
+ 0xDE00,0xDC72,0xDC70,0xDC46,0xDC59,0xDC5E,0xDC48,0xDC4F,0xDC71,0xDC60,
+ 0xDC5F,0xDC6E,0xDC73,0xDDC0,0xDDBF,0xDC47,0xDC6D,0xDC6F,0xDC81,0xDC6C,
+ 0xDC78,0xDC83,0xDC49,0xDC68,0xDC74,0xDC63,0xDC6A,0xDC85,0xDC65,0xDC62,
+ 0xDCC8,0xDDD0,0xDDD4,0xDDD1,0xDE03,0xDF42,0xDF63,0xDF56,0xDF5B,0xDF55,
+ 0xDF50,0xDF2D,0xDF44,0xDF48,0xDF45,
+ /* plane 7, row 35 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85D,0x4665,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD845,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0x8D01,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0x48AF,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,
+ 1, /* first low-surrogate */
+ 0xDF82, 0,0xDF62,0xDC85,0xDC8D,0xDD36,0xDD2F,0xDD31,0xDD37,
+ 0xDEA7,0xDED9,0xDEF0,0xDEF2,0xDEFD,0xDEE8,0xDEEB,0xDEEE,0xDEE0,0xDEE9,
+ 0xDEED,0xDED6,0xDEF8,0xDED4,0xDEDF,0xDEE7,0xDED8,0xDEE3,0xDEEF,0xDF0F,
+ 0xDFCA,0xDD46,0xDC05,0xDC0C,0xDC0D,0xDC7F,0xDC80,0xDC81,0xDD01,0xDD03,
+ 0xDDF2,0xDDE2,0xDDE3,0xDDDE,0xDDE9,0xDDE8,0xDDE0,0xDE01,0xDDF5,0xDDE4,
+ 0,0xDE77,0xDF74,0xDF6F,0xDF62,0xDF61,0xDF6D,0xDF73,0xDF6A,0xDF69,
+ 0xDD12,0xDD2D,0xDD14,0xDD0F,0xDD29,0xDD16,0xDD03,0xDD46,0xDD5C,0xDD11,
+ 0xDD06,0xDCDC,0xDD2B,0xDD2A,0xDD2C,0xDD27,0xDE7A,0xDF9C,0xDF99,0xDF95,
+ 0xDF8B,0xDF98,0xDF96,0xDC32,0xDDA4,0xDDAA,0xDE1B, 0,0xDE0D,0xDE1C,
+ 0xDE0A,0xDE20,0xDE08,0xDE1A,0xDE13,
+ /* plane 7, row 36 */
+ 1 | (94 << 8), /* first, last */
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0x4941,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A29,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0x4A2A,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A96,0xD864,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0x4B12,
+ 1, /* first low-surrogate */
+ 0xDE11,0xDF5D,0xDF5F,0xDF5E,0xDF60,0xDFBB,0xDFBC,0xDFC1,0xDFC0,
+ 0xDFC8,0xDFCE,0xDCA7,0xDCB2,0xDCB6,0xDCA5,0xDCBA,0xDCB5,0xDCAD,0xDCA4,
+ 0xDCD3,0xDCB0,0xDCB1,0xDD1D,0xDE8D, 0,0xDE91,0xDEB6,0xDEB7,0xDEBD,
+ 0xDEBC,0xDE96,0xDE94,0xDEA0,0xDCA8,0xDCA6,0xDD84,0xDD96,0xDD88,0xDD9A,
+ 0xDED1,0xDECF,0xDF50,0xDF51,0xDF4E,0xDF80,0xDF81,0xDC1B,0xDC17,0xDC20,
+ 0xDC19,0xDC1A,0xDC21,0xDC1E,0xDC18,0xDC1D, 0,0xDD2D,0xDD24,0xDD27,
+ 0xDD2E,0xDD25,0xDD1C,0xDD19, 0,0xDD23,0xDD1F,0xDD1A,0xDD2B,0xDD1E,
+ 0xDDE0,0xDE33,0xDEE6,0xDEFC,0xDEE5,0xDEF8,0xDEF6,0xDEEA,0xDEF2,0xDEED,
+ 0xDEEB,0xDEF0,0xDEF1,0xDFC6,0xDFC8,0xDFCE,0xDFC5, 0,0xDFCB,0xDD13,
+ 0xDD14,0xDD07,0xDD0C,0xDE1A,
+ /* plane 7, row 37 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD87E,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,
+ 1, /* first low-surrogate */
+ 0xDE17,0xDE06,0xDE16,0xDE07,0xDE10,0xDE09,0xDE19,0xDE15,0xDF6E,
+ 0xDF3B,0xDF3E,0xDF6C,0xDF65,0xDF64,0xDF59,0xDF7C,0xDF70,0xDF79,0xDC2C,
+ 0xDC52,0xDC51,0xDC4C,0xDD00,0xDD10,0xDD13,0xDCFF,0xDCFE,0xDCED,0xDE5A,
+ 0xDE58,0xDE5C,0xDEDA,0xDF78,0xDF5E,0xDF67,0xDF64,0xDC13,0xDC23,0xDC41,
+ 0xDC3F,0xDC40,0xDCED,0xDCE3,0xDCEA,0xDCF0,0xDCE6,0xDCE9,0xDCF1,0xDCEE,
+ 0xDDD4,0xDDD1,0xDDDC,0xDDEC,0xDC69,0xDC6D,0xDC57,0xDC66,0xDCF9,0xDC4A,
+ 0xDC60,0xDC56,0xDC59,0xDC4C,0xDC6A,0xDC62,0xDC63,0xDC70,0xDC5F,0xDE0D,
+ 0xDC64,0xDC5D,0xDC68,0xDC9F,0xDEBA,0xDEB8,0xDEBC,0xDEB9,0xDEB4,0xDF3B,
+ 0xDF2D,0xDF38,0xDF2F,0xDF32,0xDC41,0xDCCB,0xDCDE,0xDCDD,0xDCDA,0xDCDC,
+ 0xDD10,0xDD4F,0xDD49,0xDD98,0xDD96,
+ /* plane 7, row 38 */
+ 1 | (94 << 8), /* first, last */
+ 0xD869,0xD869,0xD840,0xD869,0xD869,0xD869,0xD840,0xD840,0xD841,
+ 0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD87E,0xD845,0xD845,0xD845,0xD845,0xD845,0x367E,0x58E1,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD869,0xD846,0xD87E,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD852,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 1, /* first low-surrogate */
+ 0xDD97,0xDDC7,0xDD9C,0xDDDA,0xDDD8,0xDEA8,0xDD0A,0xDD9D,0xDCCB,
+ 0xDD38,0xDD39,0xDDA6,0xDC23,0xDC22,0xDC21,0xDDCE,0xDF92,0xDF91,0xDCEC,
+ 0xDCE0,0xDCED,0xDD08,0xDCE5,0xDCEE,0xDCE4,0xDCEB,0xDCE3,0xDCEA,0xDD0A,
+ 0xDC59,0xDCD1,0xDCE3,0xDCD4,0xDCD0,0xDCD9, 0, 0,0xDCDA,0xDCD3,
+ 0xDD4C,0xDD4D,0xDD7C,0xDD80,0xDDCC,0xDCFF,0xDD08,0xDD08,0xDD01,0xDC6B,
+ 0xDD00,0xDEED,0xDEF3,0xDEEE,0xDEF1,0xDEF0,0xDEDE,0xDF51,0xDF82,0xDFA9,
+ 0xDF98,0xDF9D,0xDF9A,0xDF9E,0xDF9F,0xDFA6,0xDFA7,0xDC09,0xDC2F,0xDD71,
+ 0xDD6D,0xDD72,0xDEEF,0xDEF0,0xDC3B,0xDC39,0xDC3C,0xDC38,0xDFFD,0xDC3A,
+ 0xDC78,0xDC79,0xDC77,0xDD98,0xDD9C,0xDD99,0xDD9A,0xDD11,0xDD0A,0xDCFD,
+ 0xDD0F,0xDD19,0xDD03,0xDD15,0xDD0C,
+ /* plane 7, row 39 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A,
+ 0xD84A,0xD84A,0x39A7,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0x4320,0xD858,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD844,0xD841,
+ 0xD851,0xD851,0xD851,0xD851,0xD852,0xD87E,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD853,0xD853,
+ 1, /* first low-surrogate */
+ 0xDD09,0xDD12,0xDD34,0xDD2A,0xDD08,0xDD2D,0xDD28,0xDCB1,0xDD2C,
+ 0xDD26,0xDD33, 0,0xDE1A,0xDE1E,0xDE07,0xDE2C,0xDE32,0xDE28,0xDE31,
+ 0xDE29,0xDE30,0xDE2A,0xDE44,0xDE2E,0xDCD1,0xDD24,0xDEF7,0xDEF4,0xDEF3,
+ 0xDEF8,0xDFB5,0xDF96,0xDF98,0xDF95,0xDF91,0xDFB2,0xDF9E,0xDF59,0xDFA3,
+ 0xDF9A,0xDF9B, 0,0xDD83,0xDEDA,0xDEDF,0xDF16,0xDC1F,0xDC2D,0xDC2E,
+ 0xDC2B,0xDCB8,0xDCBB,0xDCBF,0xDCBA,0xDCD5,0xDCE3,0xDCC1,0xDCBE,0xDCBD,
+ 0xDCB4,0xDCC2,0xDCA1,0xDC87,0xDCD7,0xDCCA,0xDCB5,0xDCDA,0xDCD9,0xDCB3,
+ 0xDCD8,0xDC67,0xDC71,0xDC62,0xDC5C,0xDC68,0xDC52,0xDC56,0xDD09,0xDC42,
+ 0xDDA0,0xDF00,0xDEFE,0xDEFF,0xDCCB,0xDD28,0xDCCA,0xDCA9,0xDCC8,0xDEB4,
+ 0xDEAC,0xDEAA,0xDEA9,0xDC0E,0xDCE9,
+ /* plane 7, row 40 */
+ 1 | (94 << 8), /* first, last */
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD845,0xD855,0xD855,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0x7CE9,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD87E,0xD858,0xD858,
+ 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,
+ 0xD85A,0xD85A,0x81CB,0xD85A,0xD85A,
+ 1, /* first low-surrogate */
+ 0xDCED,0xDCF2,0xDCEB,0xDCEE,0xDEE8,0xDEDB,0xDED7,0xDEE3,0xDEE5,
+ 0xDEEE,0xDED5,0xDFB3,0xDC2D,0xDCC1,0xDCC3,0xDF0C,0xDF0E,0xDF07,0xDF17,
+ 0xDF09,0xDF16,0xDF9A,0xDF9C,0xDDB4,0xDDB7,0xDDB3,0xDD4E,0xDF13,0xDF14,
+ 0xDCE6,0xDCDC,0xDCE8,0xDCE5,0xDE2E,0xDE2C,0xDE2B,0xDECD,0xDD3D,0xDD32,
+ 0xDD2D,0xDD45,0xDD3E,0xDD50,0xDD25,0xDD53,0xDD23,0xDF37,0xDF38,0xDF47,
+ 0xDF3D,0xDF3E,0xDF49,0xDF4A,0xDF1D, 0,0xDDA5,0xDD8C,0xDD8D,0xDD89,
+ 0xDD96,0xDD85,0xDD8F,0xDD77,0xDD8E,0xDD82,0xDD8A,0xDD88,0xDD7B,0xDD97,
+ 0xDD7D,0xDD79,0xDE59,0xDF24,0xDF2D,0xDF2E,0xDF2B,0xDD76,0xDFDA,0xDFD8,
+ 0xDFD6,0xDC87,0xDCA0,0xDD28,0xDD25,0xDD1F,0xDDF3,0xDDF7,0xDDF6,0xDC2B,
+ 0xDC5B,0xDC48, 0,0xDC5C,0xDC6D,
+ /* plane 7, row 41 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,
+ 0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85B,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0x4565,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,
+ 1, /* first low-surrogate */
+ 0xDC9D,0xDC99,0xDC8C,0xDC91,0xDC9B,0xDC9A,0xDC9C,0xDC95,0xDC8D,
+ 0xDC96,0xDCA5,0xDD2A,0xDDA1,0xDDA4,0xDDAD,0xDEA9,0xDEAE,0xDEB0,0xDC0D,
+ 0xDF63,0xDF71,0xDC51,0xDC54,0xDC2A,0xDC44,0xDC55,0xDC99,0xDC39,0xDC3F,
+ 0xDC3E,0xDC4F,0xDC4D,0xDC35,0xDC40,0xDC31,0xDFD5,0xDC2B,0xDC33,0xDC41,
+ 0xDC56,0xDC4C,0xDC46,0xDC3C,0xDC45,0xDC43,0xDC3D,0xDC70,0xDC57,0xDC38,
+ 0xDC58, 0,0xDC37,0xDE07,0xDE06,0xDE09,0xDCAB,0xDC90,0xDC93,0xDCBC,
+ 0xDCA9,0xDC9E,0xDCBF,0xDCAA,0xDC91,0xDCA4,0xDC9A,0xDCA7,0xDCA1,0xDC9C,
+ 0xDCA2,0xDC9B,0xDC9F,0xDC94,0xDC8F,0xDEF0,0xDC92,0xDC95,0xDCA5,0xDCA6,
+ 0xDE04,0xDF9C,0xDF79,0xDF7A,0xDF7E,0xDF7B,0xDF71,0xDF81,0xDF7F,0xDF7C,
+ 0xDF7D,0xDF75,0xDF76,0xDC8E,0xDC8F,
+ /* plane 7, row 42 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85E,0xD85E,0xD85E,0xD85E,0x4704,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD845,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0x4764,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD860,0xD860,0xD860,0x4823,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD858,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,
+ 1, /* first low-surrogate */
+ 0xDD3E,0xDD3F,0xDD40,0xDD41, 0,0xDF0D,0xDF17,0xDF10,0xDF0E,
+ 0xDEEA,0xDF1D,0xDF03,0xDF22,0xDF04,0xDF00,0xDF20,0xDF21,0xDF23,0xDF13,
+ 0xDF09,0xDF11,0xDFCB,0xDFCE,0xDFD0,0xDFCC,0xDFD4,0xDCDB,0xDC09,0xDC0B,
+ 0xDC85,0xDD06,0xDD0D, 0,0xDD14,0xDD0F,0xDE09,0xDE14,0xDE0B,0xDDFC,
+ 0xDE04,0xDE0A,0xDE00,0xDDFD,0xDE07,0xDE06,0xDE11,0xDE79,0xDE78,0xDF88,
+ 0xDF80,0xDF8B,0xDD59,0xDD61,0xDD75, 0,0xDD55,0xDD5B,0xDD5F,0xDD52,
+ 0xDD62,0xDD72,0xDD5D,0xDD68,0xDD71,0xDD65,0xDD66,0xDD67,0xDD76,0xDD4C,
+ 0xDD60,0xDD74,0xDD50,0xDE8A,0xDE81,0xDE86,0xDE7F,0xDE80,0xDFA5,0xDFA7,
+ 0xDFA8,0xDFA6,0xDFAF,0xDD95,0xDFB1,0xDC35,0xDC39,0xDDC3,0xDE30,0xDE2A,
+ 0xDE2B,0xDE2D,0xDE2E,0xDE2C,0xDE23,
+ /* plane 7, row 43 */
+ 1 | (94 << 8), /* first, last */
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,
+ 0xD863,0xD863,0x95D9,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD854,0xD864,0xD87E,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD842,0xD87E,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,
+ 1, /* first low-surrogate */
+ 0xDE21,0xDE22,0xDF6C,0xDF81,0xDF8F,0xDF80,0xDFD0,0xDFCD,0xDFD5,
+ 0xDFD4,0xDCD1,0xDCBE,0xDCCB,0xDCCE,0xDCBD,0xDCD0,0xDF04,0xDED5,0xDED0,
+ 0xDED3,0xDEFB,0xDED8,0xDED1,0xDEFD,0xDED9,0xDED6,0xDEE6,0xDEF9,0xDDA1,
+ 0xDD9D,0xDD9E, 0,0xDEFF,0xDF5F,0xDF57,0xDF60,0xDF59,0xDC2C,0xDC25,
+ 0xDC27,0xDC30,0xDC24,0xDC26,0xDC2D,0xDC2E,0xDC29,0xDC31,0xDD45,0xDD47,
+ 0xDD52,0xDD4A,0xDD50,0xDD46,0xDD4F,0xDD4E,0xDD53,0xDF21,0xDF09,0xDF1A,
+ 0xDF1B,0xDF15,0xDF10,0xDDF9,0xDF14,0xDF0E,0xDF12,0xDF0B,0xDFCF,0xDFD2,
+ 0xDFD0,0xDFD4,0xDFD3,0xDFD1,0xDF18,0xDDFB,0xDC09,0xDD1C,0xDD27,0xDD25,
+ 0xDD1B,0xDD29,0xDD1F,0xDD30,0xDD24,0xDD28,0xDD19,0xDD2F,0xDE24,0xDE21,
+ 0xDE25,0xDE26,0xDE27,0xDE76,0xDF66,
+ /* plane 7, row 44 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD85C,0xD865,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD869,
+ 1, /* first low-surrogate */
+ 0xDF75,0xDF69,0xDF7E,0xDF8F,0xDF74,0xDE10,0xDFAD,0xDC2B,0xDC2A,
+ 0xDC58,0xDD22,0xDD1D,0xDD2B,0xDD2C,0xDD2D,0xDD33,0xDD1B,0xDD27,0xDD2A,
+ 0xDD28,0xDD3B,0xDE7E,0xDE71,0xDE79,0xDE78,0xDE70,0xDE6D,0xDE7D,0xDE75,
+ 0xDE76,0xDEDE,0xDF66,0xDF83,0xDF87,0xDF7B,0xDF89,0xDF86,0xDF82,0xDF7C,
+ 0xDF81,0xDC43,0xDC45,0xDCF7,0xDCF9,0xDCFA,0xDE05,0xDDFE,0xDE0F,0xDDFF,
+ 0xDDFA,0xDE09,0xDE20,0xDE0C,0xDE3C,0xDE22,0xDDF8,0xDE0A,0xDE08,0xDDF7,
+ 0xDC8E,0xDC77,0xDC8B,0xDCB4,0xDC8A,0xDC9A,0xDC79,0xDC83,0xDC7F,0xDCA1,
+ 0xDC8F,0xDCA3,0xDC81,0xDC94,0xDC7E,0xDC82,0xDC90,0xDCA5,0xDCAD,0xDC9D,
+ 0xDE67,0xDE69,0xDECB,0xDEC8,0xDED1,0xDF40,0xDF4B,0xDF49,0xDF46,0xDF3E,
+ 0xDF43,0xDF3F,0xDFA5,0xDFA7,0xDC4E,
+ /* plane 7, row 45 */
+ 1 | (94 << 8), /* first, last */
+ 0xD869,0xD849,0xD869,0xD869,0xD869,0xD869,0xD869,0xD87E,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD840,0xD841,0xD841,0x34B9,
+ 0xD87E,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD864,0xD846,
+ 0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD841,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84C,0xD866,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,
+ 1, /* first low-surrogate */
+ 0xDC4D,0xDD9B,0xDCE5,0xDCE1,0xDCE2,0xDD16,0xDD14,0xDE1B,0xDD59,
+ 0xDD51,0xDD5F,0xDD4A,0xDD57,0xDD58,0xDDCA,0xDDDB,0xDDDE,0xDDE0,0xDDE1,
+ 0xDDDF,0xDDE2,0xDDE3,0xDE92,0xDEBF,0xDEBE,0xDD0B,0xDC52,0xDC4E, 0,
+ 0xDC13,0xDDA7,0xDC26,0xDC27,0xDCC6,0xDD0B,0xDD6A,0xDD78,0xDD1A,0xDD16,
+ 0xDD19,0xDD17,0xDD1B,0xDD18,0xDD20,0xDE37,0xDCEC,0xDD81,0xDE3D,0xDD0F,
+ 0xDDAD,0xDEFB,0xDF52,0xDFAF,0xDFB7,0xDFB2,0xDD78,0xDDAC,0xDF00,0xDEFE,
+ 0xDF02,0xDEFD,0xDF03,0xDC40,0xDC43,0xDC42,0xDCB7,0xDDA2,0xDD00,0xDD35,
+ 0xDD41,0xDD05,0xDC53,0xDD50,0xDD4E,0xDD53,0xDE53,0xDE50,0xDE57,0xDE5F,
+ 0xDE55,0xDEEA,0xDC26,0xDC30,0xDC2A,0xDC28,0xDC2C,0xDC2D,0xDCD4,0xDF07,
+ 0xDF58,0xDF59,0xDFC5,0xDFCD,0xDFC7,
+ /* plane 7, row 46 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84D,0x3C4B,0xD84E,0xD869,0xD84E,0xD84F,0xD842,0xD87E,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD841,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,
+ 0x40F1,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,
+ 1, /* first low-surrogate */
+ 0xDFE8, 0,0xDD32,0xDE97,0xDEDE,0xDC32,0xDEC8,0xDD15,0xDCF1,
+ 0xDCF0,0xDCEC,0xDD09,0xDCF9,0xDCF5,0xDCFE,0xDC74,0xDC81,0xDC7C,0xDC75,
+ 0xDC89,0xDC82,0xDC97,0xDC86,0xDC7D,0xDC93,0xDC9C,0xDC76,0xDC80,0xDD45,
+ 0xDEA1,0xDF03,0xDCC9,0xDCCD,0xDCD0,0xDEAD,0xDEC5,0xDFA2,0xDCEC,0xDCF6,
+ 0xDCF3,0xDEF3,0xDEFA,0xDEF9,0xDEF5,0xDEF4,0xDEF8,0xDFB6,0xDFB4,0xDC32,
+ 0xDCCD,0xDCC8,0xDCCE,0xDCCA,0xDF2A,0xDF21,0xDF1D,0xDDBD,0xDDBE,0xDDC2,
+ 0,0xDDC9,0xDF1F,0xDCF1,0xDCED,0xDCF2,0xDCE0,0xDCF7,0xDE30,0xDE37,
+ 0xDE31,0xDE36,0xDEC8,0xDD6D,0xDD69,0xDD7D,0xDD61,0xDD70,0xDD71,0xDD73,
+ 0xDD76,0xDD75,0xDD78,0xDD79,0xDD64,0xDD6E,0xDF51,0xDF4F,0xDF22,0xDDAF,
+ 0xDDAA,0xDDA3,0xDD9D,0xDD9C,0xDDA1,
+ /* plane 7, row 47 */
+ 1 | (94 << 8), /* first, last */
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 1, /* first low-surrogate */
+ 0xDDB6,0xDDAC,0xDDA2,0xDDA7,0xDDB0,0xDDA9,0xDDC3,0xDF31,0xDF32,
+ 0xDF33,0xDF34,0xDF37,0xDF3C,0xDFD9,0xDFDD,0xDFDE,0xDFDF,0xDFE0,0xDCA5,
+ 0xDCAA,0xDCA2,0xDCA3,0xDE04,0xDE03,0xDDFE,0xDE28,0xDCAF,0xDCAD,0xDCA6,
+ 0xDDAC,0xDDA5,0xDDB0,0xDDB1,0xDE01,0xDEB2,0xDED2,0xDEF1,0xDFD1,0xDC47,
+ 0xDCC9,0xDCA7,0xDCC8,0xDC95,0xDC8E,0xDC91,0xDC7D,0xDCEE,0xDC8D,0xDC8C,
+ 0xDCB0,0xDC96,0xDC42,0xDC7C,0xDCB1,0xDCB2,0xDC84,0xDC9D,0xDCA1,0xDC98,
+ 0xDCB3,0xDC22,0xDC7B,0xDC8A,0xDCCE,0xDC80,0xDC97,0xDCB4,0xDCB5,0xDC9A,
+ 0xDC9F,0xDC93,0xDE12,0xDE0B,0xDE0E,0xDCA3,0xDCCC,0xDCDC,0xDCE1,0xDCDE,
+ 0xDCD2,0xDCDB,0xDCD9,0xDCD7,0xDCD4,0xDCC9,0xDCEB,0xDCDA,0xDCD1,0xDD04,
+ 0xDCCA,0xDCE2,0xDDD7,0xDF8C,0xDF99,
+ /* plane 7, row 48 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85D,0xD85D,0xD85D,0xD85D,0x4667,0xD85D,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x4714,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD865,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD861,0x4889,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD87E,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD864,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDFA2,0xDF96,0xDF94,0xDF9F, 0,0xDF8E,0xDC03,0xDC94,0xDC93,
+ 0xDD44,0xDF2F,0xDF35,0xDF2B,0xDF32,0xDF2D,0xDF36, 0,0xDF31,0xDF12,
+ 0xDF33,0xDF1F,0xDF34,0xDF40,0xDF3F,0xDF41,0xDFD3,0xDC89,0xDD18,0xDD10,
+ 0xDE1A,0xDE25,0xDE1E,0xDF92,0xDF95,0xDF93,0xDD84,0xDD9A,0xDD89,0xDD8D,
+ 0xDD88,0xDD91,0xDD9B,0xDD9C,0xDD48,0xDE8E,0xDE92,0xDFC5,0xDFC1,0xDFB8,
+ 0xDFBE,0xDFB5,0xDFC7,0xDC3C, 0,0xDDEC,0xDE3F,0xDE39,0xDE37,0xDFA1,
+ 0xDF94,0xDFA0,0xDFDE,0xDFDB,0xDFDF,0xDFDC,0xDCD6,0xDCDC,0xDCDD,0xDCE0,
+ 0xDCE3,0xDCE1,0xDF18,0xDF19,0xDF53,0xDDEC,0xDF44,0xDF0E,0xDF0F,0xDF47,
+ 0xDF17,0xDF1D,0xDF11,0xDCB4,0xDCB6,0xDDB7,0xDDBE,0xDDC2,0xDDB4,0xDF31,
+ 0xDF15,0xDF83,0xDC3B,0xDC36,0xDC42,
+ /* plane 7, row 49 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD863,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4C0B,
+ 0xD87E,0xD866,0xD866,0x4C17,0xD867,
+ 1, /* first low-surrogate */
+ 0xDC50,0xDC40,0xDC34,0xDC38,0xDC3D,0xDC3E,0xDC35,0xDC3A,0xDC46,
+ 0xDC37,0xDC39,0xDC45,0xDD77,0xDD5D,0xDD6A,0xDD76,0xDD6B,0xDD6C,0xDD65,
+ 0xDD64,0xDD71,0xDD5F,0xDD72,0xDDFE,0xDDFF,0xDE3E,0xDF2B,0xDF36,0xDF2D,
+ 0xDF39,0xDF3F,0xDF3B,0xDF33,0xDF42,0xDF3A,0xDFD5,0xDFD8,0xDFD9,0xDC0D,
+ 0xDC0A,0xDC39,0xDC3A,0xDD3D,0xDD45,0xDD3A,0xDD37,0xDD3E,0xDD42,0xDF87,
+ 0xDF8C,0xDF82,0xDF6B,0xDFA0,0xDF9A,0xDF90,0xDF8E,0xDFA1,0xDFBD,0xDFB2,
+ 0xDFB5,0xDFB7,0xDFAA,0xDFA2,0xDFA5,0xDFAE,0xDFAB,0xDFBC,0xDC32,0xDC5A,
+ 0xDD64,0xDD5C,0xDD4D,0xDD3F,0xDD3E,0xDD52,0xDD58,0xDD57,0xDD5E,0xDD53,
+ 0xDD54,0xDD56,0xDF65,0xDE84,0xDE85,0xDE86,0xDF97,0xDFA1,0xDFA2, 0,
+ 0xDE0A,0xDFA3,0xDFA6, 0,0xDC15,
+ /* plane 7, row 50 */
+ 1 | (94 << 8), /* first, last */
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD866,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x4C6D,0xD867,0x4C70,
+ 0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0x4CED,0xD868,0xD868,0xD87E,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0x4D8D,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0x34A7,0xD841,0xD841,0xD842,0xD842,0xD842,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,
+ 1, /* first low-surrogate */
+ 0xDC24,0xDC4A,0xDC49,0xDC48,0xDC4B,0xDD0E,0xDD62,0xDD0B,0xDD0A,
+ 0xDD08,0xDD06,0xDE43,0xDE47,0xDE3F,0xDE46,0xDE50, 0,0xDE4B, 0,
+ 0xDE52,0xDCD7,0xDCBF,0xDCD8,0xDCE0,0xDCE7,0xDCB8,0xDCD5,0xDCEF,0xDCE6,
+ 0xDCE4,0xDCD4,0xDCD6,0xDCEA, 0,0xDCBB,0xDCE9,0xDE10,0xDE6D,0xDE70,
+ 0xDE73,0xDE72,0xDED4,0xDECE,0xDED5,0xDF5A,0xDF58,0xDF52,0xDF50,0xDF55,
+ 0xDF4E,0xDF4D,0xDFCB,0xDFCC,0xDFCD,0xDFD1,0xDC58,0xDC63,0xDC5E,0xDC54,
+ 0xDC5B,0xDCE9,0xDCE7,0xDCE8,0xDD1D,0xDD67,0xDD5A,0xDD5C,0xDD5B,0xDD61,
+ 0xDDA1, 0,0xDDA4,0xDDE9,0xDDEF,0xDDE5,0xDDF5,0xDDEB,0xDDED,0xDE96,
+ 0xDE95,0xDEB3,0xDEB5,0xDEB1, 0,0xDC4D,0xDE24,0xDC2B,0xDDCF,0xDEC9,
+ 0xDD36,0xDD31,0xDD54,0xDD3A,0xDD38,
+ /* plane 7, row 51 */
+ 1 | (94 << 8), /* first, last */
+ 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD848,
+ 0xD848,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0x6707,
+ 0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84D,0xD84D,0xD84E,0xD84E,0xD84F,
+ 0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD87E,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD87E,0xD848,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0x3E5A,0xD851,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD87E,0xD854,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDE39,0xDE38,0xDCF4,0xDCF3,0xDCF6,0xDCFC,0xDCF5,0xDCF1,0xDE9C,
+ 0xDD18,0xDD1A,0xDEFC,0xDEFE,0xDF03,0xDF53,0xDD2B,0xDFC6,0xDFC1,0xDD7B,
+ 0xDF06,0xDC49,0xDCB8,0xDDA3,0xDD52,0xDD4D,0xDD5F,0xDD5E,0xDD61,0xDE23,
+ 0xDE8C,0xDE6F,0xDE75,0xDE74,0xDE71,0xDE70,0xDE6C,0xDD26,0xDF08, 0,
+ 0xDFF0,0xDFEF,0xDFFB,0xDC10,0xDC0C,0xDFF6,0xDFFE,0xDE7C,0xDEE1,0xDC38,
+ 0xDC6F,0xDD18,0xDD15,0xDD1C,0xDD10,0xDD35,0xDD17,0xDD17,0xDD1D,0xDD26,
+ 0xDD28,0xDD29,0xDD2A,0xDD1A,0xDD16,0xDF07,0xDCAB,0xDCAC,0xDCA1,0xDCAE,
+ 0xDCA3,0xDCA7,0xDD48,0xDE04,0xDEFD, 0,0xDF08,0xDCD2,0xDEC6,0xDEBE,
+ 0xDF1C,0xDFA6,0xDFA7,0xDFAB,0xDC00,0xDCFB,0xDCFC,0xDCF9,0xDD01,0xDF06,
+ 0xDF04,0xDD3C,0xDC34,0xDF36,0xDF32,
+ /* plane 7, row 52 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,
+ 0xD869,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x42AF,0xD857,0xD857,0xD857,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD87E,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0x456B,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 1, /* first low-surrogate */
+ 0xDF42,0xDF2D,0xDF35,0xDDD8,0xDF23,0xDF20,0xDD01,0xDD00,0xDD03,
+ 0xDEBC,0xDE3C,0xDE41,0xDE35,0xDEC9,0xDD8E,0xDD9E,0xDD99,0xDDB4,0xDDAA,
+ 0xDD9F,0xDD96,0xDD9D,0xDDC3,0xDD74,0xDDAB, 0,0xDF63,0xDF5B,0xDF5A,
+ 0xDDC5,0xDDC4,0xDDCF,0xDDC8,0xDDA4,0xDDBD,0xDDD3,0xDE60,0xDF3B,0xDFE3,
+ 0xDFE7,0xDCA8,0xDCAC,0xDCA9,0xDD2A,0xDE08,0xDE09,0xDCB9,0xDEC1,0xDEC2,
+ 0xDEB8,0xDCE1,0xDCEB,0xDCE5,0xDCFA,0xDCE4,0xDD0B,0xDCD7,0xDCEF,0xDCE0,
+ 0xDCEC,0xDCFB,0xDDB0,0xDCD3,0xDCE6,0xDCFC,0xDCE3,0xDCCF,0xDCDA,0xDCDC,
+ 0xDCD2,0xDCA4, 0,0xDE17,0xDE16,0xDCF2,0xDCFC,0xDD18,0xDCF6,0xDCFE,
+ 0xDCF3,0xDCF7,0xDD01,0xDCF9,0xDD06,0xDCF5,0xDD10,0xDCDF,0xDD03,0xDD08,
+ 0xDDD8,0xDE05,0xDF97,0xDFB3,0xDFAE,
+ /* plane 7, row 53 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x471B,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85A,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0x4963,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD852,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDFAF,0xDFA7,0xDFB1,0xDFA8,0xDFAC,0xDFAB,0xDC04,0xDC9A,0xDD4A,
+ 0xDF42,0xDF58,0xDF4B,0xDF45,0xDF49,0xDF4C,0xDF59,0xDF56, 0,0xDF46,
+ 0xDF44,0xDF5B,0xDF69,0xDC8E,0xDC8F,0xDD1E,0xDCBC,0xDE2F,0xDF9E,0xDF9D,
+ 0xDF9F,0xDF9C,0xDDB4,0xDDAE,0xDDAB,0xDDB3,0xDDAF,0xDDC2,0xDE93,0xDE95,
+ 0xDE96,0xDE97,0xDFCF,0xDFCE,0xDFCB,0xDC4B,0xDE46,0xDE43,0xDE45,0xDE51,
+ 0xDFAE,0xDFAF,0xDFB0,0xDFB8,0xDFE2,0xDFE3,0xDFE6,0xDCED,0xDCEA,0xDD3A,
+ 0xDF59,0xDF84,0xDF5F,0xDF7C,0xDF5C,0xDF58,0xDF55,0xDF5D,0xDF7E,0xDF80,
+ 0xDF83,0xDF57, 0,0xDF5E,0xDCBA,0xDDD5,0xDF58,0xDF68,0xDF67,0xDC4A,
+ 0xDC4C,0xDC52,0xDC49,0xDC4E,0xDC47,0xDC4D,0xDC4B,0xDC4F,0xDD7E,0xDD87,
+ 0xDD83,0xDD89,0xDECA,0xDD86,0xDD88,
+ /* plane 7, row 54 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD864,0x4A80,0x4A84,0x4A7F,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0x4AF1,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x9A47,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,
+ 1, /* first low-surrogate */
+ 0xDE47,0xDE42,0xDE49,0xDE48, 0, 0, 0,0xDF44,0xDF51,
+ 0xDF46,0xDF47,0xDFE4,0xDC0F,0xDC3F,0xDD4B,0xDD57,0xDD52, 0,0xDD51,
+ 0xDD58,0xDD5E,0xDD53,0xDD5D,0xDD4D,0xDE3C,0xDE3F,0xDE46,0xDE3E,0xDE44,
+ 0xDE45,0xDE41,0xDE38,0xDE42,0xDE43,0xDE7A,0xDFA3,0xDFBA,0xDFC0,0xDFC4,
+ 0xDFC6,0xDFCB,0xDC61,0xDD7A,0xDD73,0xDD72,0xDD74,0xDD80,0xDD81, 0,
+ 0xDE95,0xDE8F,0xDE90,0xDE92,0xDE94,0xDE8B,0xDEE6,0xDFB2,0xDFB8,0xDFBD,
+ 0xDFBE,0xDFCE,0xDFBA,0xDC16,0xDC26,0xDC25,0xDC4C,0xDC50,0xDC4E,0xDC51,
+ 0xDC52,0xDD14,0xDD15,0xDD1B,0xDE82,0xDE99,0xDE9A,0xDE7D,0xDE85,0xDE86,
+ 0xDE9C,0xDE79,0xDE7B,0xDE80,0xDE83,0xDE81,0xDD1E,0xDD1B,0xDD2A,0xDCFB,
+ 0xDD05,0xDD20,0xDD11,0xDD04,0xDCFD,
+ /* plane 7, row 55 */
+ 1 | (94 << 8), /* first, last */
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x4D1C,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0x34A8,0xD841,0xD841,0xD841,0xD842,0xD842,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,
+ 0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,
+ 1, /* first low-surrogate */
+ 0xDD03,0xDD10,0xDD18,0xDD0A,0xDD4E,0xDD09,0xDD07,0xDD1C, 0,
+ 0xDE77,0xDE76,0xDED8,0xDED9,0xDF61,0xDF5C,0xDF5E,0xDF60,0xDFAA,0xDFD6,
+ 0xDFD8,0xDC09,0xDC08,0xDC6B,0xDC65,0xDC73,0xDC74,0xDCED,0xDD24,0xDD25,
+ 0xDD6A,0xDDA7,0xDDA8,0xDE0B,0xDDFA,0xDDF9,0xDDFF,0xDE04,0xDDF6,0xDE05,
+ 0xDE99,0xDEAB,0xDEBD,0xDEB8, 0,0xDC64,0xDC5A,0xDD72,0xDD7A,0xDF95,
+ 0xDD5F,0xDD61,0xDD5E,0xDD5A,0xDD5C,0xDD5D,0xDD6E,0xDD57,0xDD58,0xDD02,
+ 0xDD0B,0xDD08,0xDD51,0xDD25,0xDD28,0xDD23,0xDD21,0xDD24,0xDD29,0xDF06,
+ 0xDF0A,0xDFCA,0xDFCC,0xDFCB,0xDFCF,0xDD7F,0xDD7C,0xDDD6,0xDF09,0xDF0B,
+ 0xDF76,0xDC7D,0xDDA5,0xDD5B,0xDD5C,0xDD5D,0xDD65,0xDE6D,0xDE82,0xDE83,
+ 0xDE87,0xDE95,0xDE8A,0xDCD6,0xDD28,
+ /* plane 7, row 56 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84C,0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,
+ 0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD855,0xD855,0xD855,0xD855,0x418B,0xD856,0xD856,0xD856,0xD856,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x432B,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0x457A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 1, /* first low-surrogate */
+ 0xDF0D,0xDC2E,0xDCEE,0xDC2D,0xDC21,0xDC19,0xDD3B,0xDD3C,0xDD3A,
+ 0xDE7E,0xDC3B,0xDD47,0xDD39,0xDD34,0xDD36,0xDD46,0xDD3B,0xDD41,0xDD45,
+ 0xDCC0,0xDCC4,0xDCBA,0xDCBD,0xDCBE,0xDDA3,0xDF0C,0xDCD9,0xDECD,0xDFAE,
+ 0xDCFF,0xDD24,0xDFBB,0xDFBC,0xDC36,0xDCD5,0xDCD3,0xDCD6,0xDF3C,0xDF3F,
+ 0xDDDE,0xDDE3,0xDF27,0xDF29, 0,0xDD05,0xDD07,0xDD0C,0xDED0,0xDDBE,
+ 0xDDBC,0xDDD0,0xDDC2,0xDDB5,0xDDC9,0xDF66, 0,0xDDD5,0xDDE2,0xDDDC,
+ 0xDDE3,0xDDDA,0xDDC2,0xDDE8,0xDFE9,0xDCAF,0xDCAD,0xDCAE,0xDE0B,0xDCC1,
+ 0xDDB6,0xDDB9,0xDEC0,0xDCA5,0xDD28,0xDD22,0xDD29,0xDD18,0xDD1F,0xDD1C,
+ 0xDD12,0xDD2A, 0,0xDD21,0xDD2B,0xDD17,0xDCF0,0xDD16,0xDD23,0xDD2B,
+ 0xDD26,0xDD3D,0xDD22,0xDD3A,0xDD31,
+ /* plane 7, row 57 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85D,0xD85D,0xD85D,0xD85D,0x4609,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x466D,0xD854,
+ 0xD857,0xD85E,0xD85E,0xD85E,0x471F,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD87E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0x496A,0x496C,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDD32,0xDD54,0xDD21,0xDD35, 0,0xDD2E,0xDD30,0xDD2F,0xDD36,
+ 0xDDDA,0xDDD9,0xDFBB,0xDFBC,0xDFB7,0xDFC2,0xDFBD,0xDFB2, 0,0xDF44,
+ 0xDDD1,0xDF52,0xDF6B,0xDF67, 0,0xDF61,0xDF6C,0xDF51,0xDF74,0xDF77,
+ 0xDF6F,0xDF6D,0xDF68,0xDDD1,0xDF84,0xDC90,0xDC92,0xDC93,0xDD1F,0xDE31,
+ 0xDE38,0xDE39,0xDE37,0xDFAB,0xDDC3,0xDDC8,0xDDCB,0xDDCF,0xDE98,0xDFD4,
+ 0xDFD3,0xDFD8,0xDFD9,0xDFDD,0xDFD1,0xDFD6,0xDC3E,0xDE58,0xDE57,0xDE55,
+ 0xDFC4,0xDFE4,0xDCEE,0xDCEF,0xDCF3,0xDCF2,0xDCF0,0xDFAB,0xDF9A,0xDFAF,
+ 0xDF97, 0, 0,0xDFBF,0xDF94,0xDF93,0xDCBE,0xDCBB,0xDCBC,0xDDD9,
+ 0xDF6C,0xDC53,0xDC54,0xDC5B,0xDC58,0xDC56,0xDC57,0xDD9F,0xDD94,0xDD96,
+ 0xDD97,0xDE4A,0xDE4B,0xDF55,0xDF5A,
+ /* plane 7, row 58 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0x4BB2,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD867,0xD867,0x4C1D,0xD867,0xD867,0xD867,0x4C2D,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD87E,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0x4D45,0xD868,
+ 1, /* first low-surrogate */
+ 0xDF5E,0xDF5F,0xDF59,0xDF5B,0xDF58,0xDF54,0xDFE8,0xDFEB,0xDFEC,
+ 0xDC13,0xDD66,0xDD6B,0xDD62,0xDD69,0xDD63,0xDD5F,0xDD4E,0xDE48,0xDE4A,
+ 0xDFE3,0xDFDB,0xDFD8,0xDFD6,0xDD86,0xDD90,0xDD91,0xDD88,0xDD94,0xDD83,
+ 0,0xDD9C,0xDD8D,0xDD85,0xDE98,0xDE9A,0xDE9C,0xDEE7,0xDFC5,0xDFD0,
+ 0xDFD1,0xDC19,0xDC27, 0,0xDC54,0xDD2D,0xDD22, 0,0xDD1F,0xDEBD,
+ 0xDEAE,0xDEBB,0xDEAD,0xDEBC,0xDEB9,0xDEB4,0xDECB,0xDEB7,0xDEB3,0xDEBA,
+ 0xDEB6,0xDECD,0xDEBE,0xDEC9,0xDE0B,0xDD5F,0xDD3B,0xDD61,0xDD5C,0xDD8A,
+ 0xDD5A,0xDD4D,0xDD46,0xDD44,0xDD3D,0xDD40,0xDD3C,0xDD8C,0xDD41,0xDD4C,
+ 0xDD3E,0xDD4A,0xDE7C,0xDE7A,0xDF65,0xDF6E,0xDF69,0xDF6A,0xDF6F,0xDF6C,
+ 0xDF70,0xDF68,0xDF6B, 0,0xDFAC,
+ /* plane 7, row 59 */
+ 1 | (94 << 8), /* first, last */
+ 0xD868,0xD868,0xD868,0xD851,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD841,0xD842,0xD844,
+ 0xD844,0xD844,0xD844,0xD845,0xD846,0xD848,0xD849,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD868,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD853,0xD853,0xD853,
+ 1, /* first low-surrogate */
+ 0xDFDE,0xDFDD,0xDFDC,0xDCC5,0xDC8C,0xDC83,0xDC82,0xDC88,0xDC85,
+ 0xDC81,0xDCF5,0xDCEF,0xDCF4,0xDCF2,0xDCF6,0xDCF3,0xDCF0,0xDCF1,0xDD2B,
+ 0xDD27,0xDD28,0xDD6C,0xDDAE,0xDE0E,0xDE1B,0xDE16,0xDE1F,0xDE22,0xDE20,
+ 0xDE21,0xDE14,0xDE13,0xDE9D,0xDE9C,0xDE9E,0xDE9F,0xDC6B,0xDCC8,0xDD78,
+ 0xDD76,0xDD70,0xDD71,0xDD0A,0xDD2C,0xDF11,0xDC7E,0xDD57,0xDD66,0xDD69,
+ 0xDD67,0xDD68,0xDD71,0xDD6F,0xDFAE,0xDE8B,0xDE96,0xDC35,0xDC3A,0xDC6B,
+ 0xDF16,0xDC43,0xDC46,0xDC3F,0xDC3B,0xDC3D,0xDDB1,0xDDB2,0xDEE4,0xDC40,
+ 0xDD5D,0xDD51,0xDD4D,0xDD4C,0xDD5B,0xDCD4,0xDCD2,0xDCCA,0xDCC8,0xDCD0,
+ 0xDCC9,0xDD49,0xDDA4,0xDF12,0xDF0F,0xDF11,0xDCDB,0xDCDD,0xDCDC,0xDED4,
+ 0xDF21,0xDFB2,0xDD04,0xDD02,0xDF11,
+ /* plane 7, row 60 */
+ 1 | (94 << 8), /* first, last */
+ 0xD853,0xD853,0xD853,0xD85C,0xD854,0xD854,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD851,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85D,0xD85D,0x460A,0xD85D,0xD85D,0xD85D,0xD85D,0x460C,0xD85D,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD852,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x482E,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,
+ 1, /* first low-surrogate */
+ 0xDF16,0xDF10,0xDFBE,0xDE1A,0xDF4C,0xDF4A,0xDDF2,0xDDF1,0xDF2A,
+ 0xDF2C,0xDF2F,0xDF31,0xDD11,0xDD12,0xDE4B,0xDDDB,0xDDD6,0xDDDD,0xDDE2,
+ 0xDDE4,0xDDE0,0xDDDF,0xDDE3,0xDF6E,0xDF71,0xDDE9,0xDDEA,0xDE63,0xDFEB,
+ 0xDFEA,0xDCBD,0xDCBB,0xDCC6,0xDCCC,0xDCC8,0xDCCF,0xDCC9,0xDCCA,0xDCCF,
+ 0xDCD0,0xDDBA,0xDDFB,0xDE03,0xDEC4,0xDD49,0xDD53,0xDD36,0xDD4A,0xDD41,
+ 0xDD4E,0xDD19,0xDD4D,0xDD45,0xDD4C,0xDD47,0xDD48,0xDD4F,0xDD37,0xDD42,
+ 0xDD4A,0xDD46, 0,0xDD49,0xDD4F,0xDD51,0xDD4C, 0,0xDE06,0xDD51,
+ 0xDF7A,0xDF83,0xDF7E,0xDF7F,0xDF80,0xDFB5,0xDC91,0xDC94,0xDC95,0xDD21,
+ 0xDD20,0xDE3D,0xDE40,0xDE46,0xDE84,0xDFAC,0xDFAD, 0,0xDDDA,0xDDD9,
+ 0xDFE2,0xDFE1,0xDFE3,0xDFE4,0xDFDE,
+ /* plane 7, row 61 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,
+ 0xD865,0xD863,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,
+ 1, /* first low-surrogate */
+ 0xDFDF,0xDE41,0xDE59,0xDE5C,0xDE5A,0xDFE8,0xDCF6,0xDCFC,0xDCF7,
+ 0xDCFA,0xDCF9,0xDFC4,0xDFBE,0xDFD2,0xDFBD,0xDF95,0xDFD4,0xDDE4,0xDC61,
+ 0xDC62,0xDC63,0xDC64,0xDC60,0xDC5C,0xDC5D,0xDC5E,0xDDA5,0xDDA6,0xDE4C,
+ 0xDF68,0xDF6E,0xDF71,0xDF6B,0xDF6F,0xDFEE,0xDFF1,0xDFF0,0xDFEF,0xDC15,
+ 0xDC14,0xDF6E,0xDC47,0xDD7C,0xDD7A,0xDD74,0xDD76,0xDD6E,0xDD78,0xDD6D,
+ 0xDD6C,0xDE4E,0xDFD7,0xDFEA,0xDFE5,0xDC64,0xDDB3,0xDDA3,0xDDA5,0xDDA7,
+ 0xDDA2,0xDD9F,0xDDA6,0xDD9E,0xDDA8,0xDEA9,0xDEA6,0xDEAA,0xDEAB,0xDEA0,
+ 0xDEA1,0xDEA8,0xDEE8,0xDEE9,0xDEEA,0xDFE4,0xDFDF,0xDFE0,0xDC28,0xDC5D,
+ 0xDC5B,0xDC56,0xDC57,0xDC5F,0xDC62,0xDEE1,0xDEE3,0xDEDE,0xDED9,0xDEE8,
+ 0xDEF2,0xDEF6,0xDEE6,0xDEF4,0xDEF5,
+ /* plane 7, row 62 */
+ 1 | (94 << 8), /* first, last */
+ 0xD867,0xD867,0x4C8D,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD87E,0xD869,0xD869,0xD842,0xD842,
+ 0xD842,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD846,0xD846,0xD846,
+ 0xD846,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD84A,
+ 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84E,0xD84E,
+ 0xD84E,0xD856,0xD87E,0xD84E,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,
+ 0xD852,0xD852,0xD853,0xD853,0xD853,
+ 1, /* first low-surrogate */
+ 0xDEE5,0xDEE2, 0,0xDD96,0xDDAA,0xDD97,0xDD70,0xDDA1,0xDD9D,
+ 0xDDA9,0xDD6F,0xDD7E,0xDD94,0xDD9A,0xDD73,0xDD87,0xDD71,0xDD77,0xDD88,
+ 0xDD8D,0xDD85,0xDD78,0xDDAD,0xDE80,0xDE81,0xDEE5,0xDEE7,0xDF7C,0xDFAF,
+ 0xDFE1,0xDC96,0xDCA3,0xDC90,0xDCF8,0xDD2E,0xDD75,0xDD7E,0xDD7D,0xDD7B,
+ 0xDD78,0xDDB0,0xDE34,0xDE36,0xDE30,0xDE1D,0xDE2E,0xDE37,0xDECE,0xDF97,
+ 0xDF98,0xDD7C,0xDD7E,0xDD7D,0xDD7F,0xDD0F,0xDEA4,0xDD31,0xDD2E,0xDD2F,
+ 0xDD32,0xDD2C,0xDFD4,0xDFDC,0xDFD8,0xDC0E,0xDD83,0xDD84,0xDF12,0xDD72,
+ 0xDD7C,0xDD7E,0xDEA6,0xDEA0,0xDE9E,0xDEA2,0xDD2A,0xDF18,0xDC4D,0xDC58,
+ 0xDC5B,0xDD14,0xDCF2,0xDEE6,0xDD64,0xDD68,0xDD60,0xDD62,0xDCD7,0xDD4B,
+ 0xDCE0,0xDF22,0xDD05,0xDF19,0xDF1A,
+ /* plane 7, row 63 */
+ 1 | (94 << 8), /* first, last */
+ 0xD853,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD856,0xD856,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x4331,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD87E,0xD85A,
+ 0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDFC3,0xDCD8,0xDCDC,0xDF4F,0xDDF7,0xDDF4,0xDDF8,0xDD13,0xDE50,
+ 0xDDF0,0xDDE9,0xDDEF,0xDDED,0xDDEA,0xDDF8,0xDE05,0xDDF2,0xDF72, 0,
+ 0xDDF9,0xDDF3,0xDDF6,0xDDF2,0xDDF7,0xDE66,0xDE65,0xDF40,0xDD77,0xDCD1,
+ 0xDCD3,0xDE04,0xDD59,0xDD60,0xDD5B,0xDD5D,0xDD5E,0xDD69,0xDD5C,0xDD61,
+ 0xDD6A,0xDD5F,0xDD4E,0xDD5C,0xDD60,0xDD63,0xDDDB,0xDFCA,0xDFC9,0xDFC8,
+ 0xDCA5,0xDCA3,0xDF8E,0xDF87,0xDF89,0xDF85,0xDF86,0xDF8F,0xDF8A,0xDF90,
+ 0xDC98,0xDC9B,0xDE47,0xDE49,0xDE48,0xDDE5,0xDDEA,0xDDED,0xDFF0,0xDFEF,
+ 0xDFF2,0xDFEC,0xDC40,0xDE60,0xDE5F,0xDFEB,0xDFEC,0xDD00,0xDD01,0xDFE2,
+ 0xDFDF,0xDFE0,0xDFE1,0xDFE3,0xDCC3,0xDDEB,0xDDEA,0xDF61,0xDF71,0xDC6B,
+ 0xDC68,0xDC69,0xDC67,0xDDB0,0xDDB1,
+ /* plane 7, row 64 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD866,0xD866,0x4BBC,0x4BBB,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD849,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD842,0xD842,0xD844,0xD846,0xD87E,0xD87E,0xD849,
+ 0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD850,0xD850,0xD850,
+ 0xD867,0xD851,0xD851,0xD851,0xD851,
+ 1, /* first low-surrogate */
+ 0xDDB2,0xDE51,0xDF74,0xDD7F,0xDD84,0xDE53,0xDE54,0xDFF0,0xDFF4,
+ 0xDFF1,0xDC37,0xDDBF, 0, 0,0xDDBD,0xDDBE,0xDDB7,0xDDC0,0xDDBA,
+ 0xDDB8,0xDDBC,0xDDBB,0xDEEB,0xDFE7,0xDC1D,0xDC1C,0xDC63,0xDC4B,0xDD38,
+ 0xDD36,0xDD34,0xDD37,0xDF06,0xDF1C,0xDF02,0xDF1D,0xDF1E,0xDEE0,0xDF11,
+ 0xDF18,0xDF21,0xDF20,0xDF10,0xDDBD,0xDDAE,0xDDB5,0xDDB8,0xDDB9,0xDDBE,
+ 0xDDC4,0xDDBC,0xDDBA,0xDE83,0xDEEA,0xDEEC,0xDF7E,0xDF7B,0xDFE5,0xDCA7,
+ 0xDC9E,0xDC9A,0xDD2F,0xDD31,0xDD83,0xDDB5,0xDE46,0xDE41,0xDE43,0xDE3D,
+ 0xDE42,0xDE3B,0xDE47,0xDD6B,0xDDD0,0xDD8E,0xDF11,0xDC71,0xDC89,0xDC4C,
+ 0xDD2B,0xDC4F,0xDC5E,0xDC63,0xDC6B,0xDD3F,0xDEE9,0xDD6D,0xDD6B,0xDD6A,
+ 0xDF2A,0xDCE0,0xDCDD,0xDCE1,0xDCDE,
+ /* plane 7, row 65 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD853,0xD855,0xD869,
+ 0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD858,0xD858,0xD858,0xD85A,0xD851,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85D,0xD85D,0xD853,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD861,0xD863,0xD862,0xD862,0xD863,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0x4C14,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,
+ 1, /* first low-surrogate */
+ 0xDCDC,0xDD4D,0xDF16,0xDCE3,0xDEE5,0xDEE4,0xDF1D,0xDF4B,0xDEC1,
+ 0xDE4E,0xDED6,0xDDFD,0xDE07,0xDDFE,0xDE03,0xDE0B,0xDDFF,0xDF7A,0xDF77,
+ 0xDDFB,0xDF43,0xDFED,0xDDBC,0xDCDF,0xDE05,0xDEC6,0xDEC5,0xDD74,0xDD73,
+ 0xDD72,0xDD78,0xDD73,0xDD7A,0xDF1C,0xDD76,0xDD75,0xDD77,0xDFCF,0xDFCE,
+ 0xDFCD,0xDCA8,0xDF98,0xDF92,0xDF94,0xDC9A,0xDFB4,0xDDEB,0xDDF4,0xDDF3,
+ 0xDDEE,0xDDF2,0xDDF0,0xDE64,0xDC05,0xDFFB,0xDFFC,0xDDF3,0xDC6C,0xDDBA,
+ 0xDF79,0xDF7E,0xDF78,0xDFF4,0xDC16,0xDE57,0xDDC8,0xDDC3,0xDDCE,0xDEB3,
+ 0xDEED,0xDEEE,0xDFF1,0xDFF8, 0,0xDC64,0xDC65,0xDF35,0xDF29,0xDF2C,
+ 0xDF31,0xDF2B,0xDF2E,0xDF25,0xDDDA,0xDDE0,0xDDD4,0xDDE1,0xDDDD,0xDFE7,
+ 0xDC12,0xDCAE,0xDCAF,0xDD86,0xDD85,
+ /* plane 7, row 66 */
+ 1 | (94 << 8), /* first, last */
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD842,0xD842,0xD842,0x361C,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0x3772,0xD848,0xD849,0xD84B,0xD850,0xD851,0xD852,0xD852,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,
+ 0xD85C,0xD855,0xD856,0xD857,0xD857,0xD87E,0xD858,0xD858,0xD858,0xD85A,
+ 0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,
+ 0xD85F,0xD860,0xD860,0xD860,0xD861,0xD861,0xD862,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD864,0xD864,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDDD1,0xDE58,0xDE3F,0xDE52,0xDE4B,0xDE53,0xDE50,0xDE56,0xDE57,
+ 0xDECD,0xDECB,0xDC31,0xDC30,0xDDD1, 0,0xDD92,0xDD90,0xDD8F,0xDD93,
+ 0xDD91, 0,0xDF13,0xDC7F,0xDEAC,0xDD70,0xDCE5,0xDF23,0xDF24,0xDD08,
+ 0xDD07,0xDF1F,0xDF20,0xDF21,0xDCE1,0xDF54,0xDF57,0xDF55,0xDDFA,0xDF38,
+ 0xDD86,0xDF37,0xDE53,0xDF7E,0xDF7B,0xDD71,0xDDFD,0xDDFC,0xDF46,0xDD32,
+ 0xDEC7,0xDD71,0xDD83,0xDD6F,0xDD7E,0xDD7D,0xDD81,0xDD7C,0xDD8A,0xDD7E,
+ 0xDD80,0xDD7D,0xDD7F,0xDD82,0xDFD4,0xDFD0,0xDFD2,0xDD55,0xDF9B,0xDF9A,
+ 0xDE4E,0xDDF1,0xDFF8,0xDFFD,0xDE5E,0xDE66,0xDD05,0xDC0A,0xDC0B,0xDC0E,
+ 0xDC0D,0xDC11,0xDC09,0xDC10,0xDC0C,0xDC12,0xDCC4,0xDDF7,0xDDF8,0xDF6A,
+ 0xDF6B,0xDDC0,0xDDC2,0xDF85,0xDF80,
+ /* plane 7, row 67 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,
+ 0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD868,0x4D0E,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD854,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD842,0xD84E,0xD846,0xD846,0xD847,0xD848,0xD848,
+ 0xD848,0xD84B,0xD84E,0xD84E,0xD84E,0xD850,0xD851,0xD852,0xD853,0xD853,
+ 0xD853,0xD855,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD848,0xD860,0xD860,0xD861,0xD862,
+ 0xD862,0xD863,0xD863,0xD863,0xD864,
+ 1, /* first low-surrogate */
+ 0xDF84,0xDF81,0xDDC4,0xDD8B,0xDD8D,0xDD8E,0xDEB7,0xDEB9,0xDEEF,
+ 0xDFFB,0xDFFF,0xDC67,0xDC68,0xDC69,0xDD3F,0xDF3C,0xDF4C,0xDF3D,0xDF3E,
+ 0xDF3F,0xDF3B,0xDDFF, 0,0xDDF6,0xDDEE,0xDDFC,0xDDF8,0xDE01,0xDDFA,
+ 0xDE88,0xDF80,0xDC11,0xDCFE,0xDD00,0xDD35,0xDC3C,0xDDBD,0xDDBB,0xDE5C,
+ 0xDE5A,0xDED1,0xDED0,0xDE0B,0xDC73,0xDD39,0xDF1A,0xDFE3,0xDD87,0xDF77,
+ 0xDF78,0xDEB1,0xDC6A,0xDC74,0xDEEB,0xDD7B,0xDDA5,0xDCE4,0xDD0B,0xDD0E,
+ 0xDD0C,0xDF39,0xDE10,0xDE11,0xDE16,0xDF81,0xDF80,0xDDFE,0xDE01,0xDE00,
+ 0xDF47,0xDFEF,0xDD88,0xDD8B,0xDD8D,0xDD87,0xDD85,0xDD8F,0xDD84,0xDD88,
+ 0xDD8E,0xDD8C,0xDFD7,0xDFD6,0xDF9F,0xDD88,0xDE03,0xDFFE,0xDFEF,0xDD09,
+ 0xDD08,0xDC20,0xDC24,0xDC1F,0xDC70,
+ /* plane 7, row 68 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD866,0xD866,
+ 0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD842,0xD85E,0xD846,0xD849,0xD84C,
+ 0xD84E,0xD84E,0xD84F,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD853,
+ 0x7674,0xD855,0xD857,0xD858,0xD858,0xD85A,0xD85C,0xD85C,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD860,0xD860,0xD862,
+ 0xD862,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD866,0xD866,0xD866,0xD866,0x4BEC,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,
+ 1, /* first low-surrogate */
+ 0xDE56,0xDFF7,0xDFF8,0xDFF6,0xDD90,0xDE5E,0xDFF7,0xDDD6,0xDDD5,
+ 0xDEBB,0xDEF0,0xDC01,0xDC6C,0xDD41,0xDD42,0xDF4F,0xDF53,0xDF58,0xDE12,
+ 0xDE04,0xDE13,0xDE05,0xDE0D,0xDF82,0xDF81,0xDCB5,0xDCBA,0xDDBE,0xDE65,
+ 0xDE63,0xDE6E,0xDE6A,0xDE6C,0xDEC4,0xDD6C,0xDFA5,0xDF12,0xDC4D,0xDF1F,
+ 0xDC77,0xDC78,0xDC44,0xDD7C,0xDCEB,0xDCEA,0xDCEC,0xDDA7,0xDF19,0xDF23,
+ 0,0xDE01,0xDE1C,0xDE03,0xDF48,0xDCDA,0xDD91,0xDD92,0xDD96,0xDD97,
+ 0xDD91,0xDD93,0xDFD8,0xDFD5,0xDD57,0xDD58,0xDFA2,0xDE05,0xDFFA,0xDD0C,
+ 0xDD0A,0xDC2E,0xDC29,0xDC2F,0xDCC5,0xDC72,0xDDC8,0xDE5A,0xDE59,0xDF89,
+ 0xDF88,0xDDDB,0xDDD9,0xDDDA,0xDEBC, 0,0xDC06,0xDC05,0xDC6F,0xDC6D,
+ 0xDC70,0xDF60,0xDF5E,0xDF63,0xDF5A,
+ /* plane 7, row 69 */
+ 1 | (94 << 8), /* first, last */
+ 0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD842,
+ 0xD846,0xD848,0xD848,0xD851,0xD852,0xD853,0xD853,0xD855,0xD858,0xD85A,
+ 0xD85A,0xD85A,0xD85C,0xD85D,0xD85D,0xD85E,0xD85E,0xD85F,0xD85F,0xD861,
+ 0xD863,0xD863,0xD864,0xD864,0xD864,0xD865,0xD866,0xD867,0xD867,0xD868,
+ 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD854,0xD869,0xD845,0xD84E,
+ 0xD850,0x4279,0xD858,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD860,
+ 0xD861,0xD861,0xD861,0xD864,0xD866,0xD867,0xD868,0xD868,0xD869,0xD869,
+ 0xD869,0xD869,0xD869,0xD869,0xD84E,0xD858,0xD85C,0xD85E,0xD862,0xD862,
+ 0xD866,0xD866,0xD866,0xD867,0xD868,
+ 1, /* first low-surrogate */
+ 0xDF5F,0xDE19,0xDE1D,0xDE1B,0xDE22,0xDE1C,0xDE1E,0xDEF7,0xDF84,
+ 0xDC15,0xDCB8,0xDCC1,0xDD01,0xDD0A,0xDDD2,0xDE75,0xDE74,0xDE72,0xDED0,
+ 0xDF1B,0xDC10,0xDF79,0xDCED,0xDFB9,0xDF24,0xDFC5,0xDE03,0xDF4A,0xDCF7,
+ 0xDDC1,0xDDC2,0xDD94,0xDD99,0xDD9A,0xDD5A,0xDFA8,0xDC25,0xDC9E,0xDC41,
+ 0xDC32,0xDC33,0xDDCB,0xDDCA,0xDDCC,0xDD93,0xDDE0,0xDC71,0xDF6B,0xDE2B,
+ 0xDE29,0xDE1A,0xDE26,0xDE27,0xDE2A,0xDEF8,0xDC3D,0xDE76,0xDD18,0xDC7A,
+ 0xDD7F, 0,0xDFF0,0xDD9A,0xDD96,0xDD9E,0xDD9D,0xDDDC,0xDFDA,0xDE0B,
+ 0xDC02,0xDC42,0xDE67,0xDF8B,0xDDE2,0xDF71,0xDE2F,0xDE2E,0xDCC6,0xDD8E,
+ 0xDE7B,0xDE77,0xDE78,0xDE7C,0xDC7C,0xDE07,0xDD97,0xDFD9,0xDD0D,0xDD0E,
+ 0xDDE3,0xDDE4,0xDEF3,0xDC75,0xDE37,
+ /* plane 7, row 70 */
+ 1 | (53 << 8), /* first, last */
+ 0xD868,0xD869,0xD869,0xD869,0xD869,0xD84B,0xD868,0xD863,0xD853,
+ 0xD858,0xD85D,0xD85D,0xD864,0xD864,0xD867,0xD868,0xD869,0xD869,0xD842,
+ 0xD851,0xD853,0xD857,0xD863,0xD864,0xD864,0xD868,0xD842,0xD869,0xD869,
+ 0xD84C,0xD854,0xD864,0xD869,0xD845,0xD85F,0xD866,0xD868,0xD853,0xD868,
+ 0xD869,0xD854,0xD867,0xD867,0xD869,0xD85D,0xD864,0xD845,0xD85E,0xD864,
+ 0xD869,0xD85A,0xD85E,0xD865,
+ 1, /* first low-surrogate */
+ 0xDE35,0xDD8F,0xDE80,0xDE7F,0xDED4,0xDEB4,0xDFEC,0xDF75,0xDD10,
+ 0xDE69,0xDDA4,0xDFDB,0xDDD1,0xDF8D,0xDF76,0xDE39,0xDE84,0xDE82,0xDED2,
+ 0xDCEE,0xDD11,0xDF84,0xDF74,0xDF8F,0xDF8E,0xDE3B,0xDCCB,0xDE88,0xDE86,
+ 0xDF5C,0xDFA4,0xDC75,0xDE8B,0xDD19,0xDC9F,0xDDE5,0xDE40,0xDD12,0xDEFB,
+ 0xDE8C,0xDFA5,0xDC77,0xDC78,0xDED6,0xDFDF,0xDDD2,0xDD1A,0xDFA9,0xDDD3,
+ 0xDCCA,0xDDC4,0xDCB1,0xDE64,
+ /* plane 7, row 71: --- */
+ /* plane 7, row 72: --- */
+ /* plane 7, row 73: --- */
+ /* plane 7, row 74: --- */
+ /* plane 7, row 75: --- */
+ /* plane 7, row 76: --- */
+ /* plane 7, row 77: --- */
+ /* plane 7, row 78: --- */
+ /* plane 7, row 79: --- */
+ /* plane 7, row 80: --- */
+ /* plane 7, row 81: --- */
+ /* plane 7, row 82: --- */
+ /* plane 7, row 83: --- */
+ /* plane 7, row 84: --- */
+ /* plane 7, row 85: --- */
+ /* plane 7, row 86: --- */
+ /* plane 7, row 87: --- */
+ /* plane 7, row 88: --- */
+ /* plane 7, row 89: --- */
+ /* plane 7, row 90: --- */
+ /* plane 7, row 91: --- */
+ /* plane 7, row 92: --- */
+ /* plane 7, row 93: --- */
+ /* plane 7, row 94: --- */
+ /* plane 15, row 1 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x5301,0xD842,0xD842,0xD87E,
+ 0xD842,0xffff,0xD842,0xD844,0xD845,0xD846,0xD846,0xD848,0xffff,0xD851,
+ 0xD840,0xD840,0xD840,0xD840,0xffff,0xD840,0x3436,0xD840,0xD841,0x434F,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD846,0xD842,0xffff,0x53FA,0xD844,
+ 0xD844,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0x9F99,0xD846,0xffff,
+ 0xD847,0xD847,0xD847,0xD87E,0xD858,0xffff,0xD848,0xD848,0xD849,0xD84C,
+ 0x6C49,0xD84F,0xD851,0xD851,0x8FB7,0xD845,0x3406,0xffff,0xD840,0xD840,
+ 0xD840,0x4F29,0x343E,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD841,0xD858,0xD841,0xD841,
+ 1, /* first low-surrogate */
+ 0xDC02,0xDC8C,0xDCD4,0xDDA5,0xDC92,0xDC93,0xDCD8,0xDCD9,0xDDA7,
+ 0xDE2B,0xDE2C,0xDE2D,0xDE30,0xDE2E,0xDEAB, 0,0xDD2D,0xDD6D,0xDC34,
+ 0xDE0F, 0,0xDF9D,0xDDA2,0xDDD4,0xDF56,0xDFC3,0xDC14, 0,0xDF1A,
+ 0xDC0F,0xDC10,0xDC9A,0xDC9B, 0,0xDDAC, 0,0xDC97,0xDD46, 0,
+ 0xDD76,0xDD77,0xDDAE,0xDE3A,0xDE7D,0xDFC5,0xDFA8, 0, 0,0xDE41,
+ 0xDE42,0xDDD8,0xDDD9,0xDEAA,0xDEAB,0xDD42,0xDD41, 0,0xDFC6, 0,
+ 0xDD35,0xDD36,0xDD37,0xDC83,0xDF4D, 0,0xDDB5,0xDF17,0xDC82,0xDFB6,
+ 0,0xDC72,0xDD5C,0xDDA8, 0,0xDDE3, 0, 0,0xDCE6,0xDD44,
+ 0xDD45, 0, 0,0xDDC4,0xDDC5,0xDDC6,0xDDC7,0xDDC8,0xDDC9,0xDDCA,
+ 0xDDD4,0xDD7D,0xDE72,0xDDB2,0xDDB4,
+ /* plane 15, row 2 */
+ 1 | (94 << 8), /* first, last */
+ 0xD841,0xD841,0xD841,0xffff,0xD842,0xD842,0xD842,0xD842,0xD87E,
+ 0xD842,0xD840,0x534E,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD844,0xD844,0xD844,0xffff,0xD845,0xD845,0xD845,0xD845,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xffff,0xD846,0xD847,0xD847,0xD847,0x5C81,
+ 0xD848,0xffff,0xD848,0xD848,0xD848,0xD848,0x5F10,0xD849,0xD84A,0x6268,
+ 0xD84A,0xD84C,0xD84C,0xffff,0xD84C,0x6742,0x6740,0x51EA,0xD84E,0xD84E,
+ 0xD84F,0x6C62,0xD84F,0xD850,0xD850,0xD850,0xD851,0xD851,0xffff,0xffff,
+ 0x7391,0xD854,0xD855,0xD855,0xD855,0xffff,0xD859,0xD859,0xD85A,0xD85A,
+ 0xD85A,0x8FBB,0x8FBC,0xffff,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD841,
+ 1, /* first low-surrogate */
+ 0xDE82,0xDEC7,0xDEC8, 0,0xDC3C,0xDC3D,0xDC3E,0xDC3F,0xDC24,
+ 0xDCD3,0xDD47, 0,0xDE3D,0xDEE2,0xDFB8,0xDFB9,0xDFC2,0xDFBA,0xDFC6,
+ 0xDFBB,0xDDAD,0xDE4C,0xDE4D, 0,0xDEB2,0xDEB3,0xDEB4,0xDEB5,0xDDC3,
+ 0xDDC4,0xDDC5,0xDDC6,0xDDC7, 0,0xDFCE,0xDC30,0xDD47,0xDD48, 0,
+ 0xDC5C, 0,0xDC5F,0xDF18,0xDF19,0xDF7E, 0,0xDDB0,0xDE75, 0,
+ 0xDE76,0xDC41,0xDD42, 0,0xDFBD, 0, 0, 0,0xDF1E,0xDF1F,
+ 0xDC87, 0,0xDC78,0xDD88,0xDD89,0xDD8A,0xDE17,0xDE15, 0, 0,
+ 0,0xDCE5,0xDE09,0xDF3B,0xDF4F, 0,0xDE2E,0xDE2F,0xDEFF,0xDEFD,
+ 0xDEFE, 0, 0, 0,0xDC23,0xDCEA,0xDD2A,0xDD49,0xDD4A,0xDD4B,
+ 0xDDDF,0xDDE0,0xDDE1,0xDDE2,0xDDC1,
+ /* plane 15, row 3 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xD840,0xD840,0xD841,0xD840,0xD840,0xffff,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD87E,0xD842,0xffff,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0x3575,0xD842,0xD842,0xD842,0xffff,0xffff,0xD844,0x56E8,0xD844,
+ 0x575B,0xD844,0xD844,0xffff,0xD844,0xffff,0xD844,0xD844,0xD844,0xD87E,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD846,0xffff,0xD846,0xD846,0xD847,0xffff,0xD847,0xD847,0x5C99,0xD847,
+ 0xD847,0xD847,0x5C97,0xD847,0xD847,
+ 1, /* first low-surrogate */
+ 0xDDE3,0xDDE4,0xDDE5,0xDDC0,0xDDE6,0xDDF7, 0,0xDDE7,0xDDE8,
+ 0xDDE9,0xDDEA,0xDDEB,0xDD0E,0xDD80,0xDD81,0xDDBA,0xDDBB,0xDDBC,0xDDBD,
+ 0xDE3F,0xDE40,0xDE88,0xDC1F,0xDC46, 0,0xDC47,0xDC48,0xDD36,0xDD72,
+ 0xDD96,0xDE47,0xDEE7,0xDF34,0xDF35,0xDF36,0xDF37,0xDFE3,0xDFE4,0xDFE5,
+ 0xDFEB, 0,0xDFE6,0xDFE7,0xDFE8, 0, 0,0xDDB9, 0,0xDDBA,
+ 0,0xDE63,0xDE64, 0,0xDE65, 0,0xDE66,0xDE7C,0xDE67,0xDC5A,
+ 0xDD59,0xDDE9,0xDDEA,0xDDEB,0xDDEC,0xDDED,0xDDEE,0xDDEF,0xDEBF,0xDECB,
+ 0xDEC3,0xDED5,0xDEC4,0xDEC5,0xDED3,0xDEC6,0xDEC7,0xDEC8,0xDEC9,0xDECA,
+ 0xDD4A, 0,0xDDD1,0xDF61,0xDC37, 0,0xDD64,0xDD66, 0,0xDD67,
+ 0xDD68,0xDD69, 0,0xDD73,0xDD6A,
+ /* plane 15, row 4 */
+ 1 | (94 << 8), /* first, last */
+ 0xD847,0x6762,0xffff,0xD848,0x383C,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD87E,
+ 0xD849,0xD849,0xD849,0xD84A,0xD84A,0x62A4,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD84C,0xD84C,
+ 0xD84C,0xffff,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,
+ 0xD84C,0x6766,0xD84C,0xD84E,0xD84E,0xD84E,0xffff,0xD84E,0xD84E,0xffff,
+ 0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0x6CA3,0xD84F,0xffff,0xD850,0xD850,0xD850,0x3DA5,0xffff,
+ 0xD850,0x707F,0xD850,0xD851,0xD851,0xD851,0xffff,0xD851,0xD87E,0xD852,
+ 0xD853,0xD853,0xD853,0xD854,0xD854,
+ 1, /* first low-surrogate */
+ 0xDD6B, 0, 0,0xDC72, 0,0xDDB9,0xDF1C,0xDF36,0xDFBC,
+ 0xDFBE,0xDFBF,0xDFC0,0xDC87,0xDDDC,0xDDDD,0xDDF5,0xDDDE,0xDDDF,0xDC9E,
+ 0xDDE0,0xDDE1,0xDDE2,0xDE2C,0xDE2D, 0,0xDEA9,0xDE9C,0xDE9D,0xDE9E,
+ 0xDE9F,0xDEA0,0xDEA1,0xDEA2, 0,0xDEA3,0xDEA4,0xDEA7,0xDC42,0xDC93,
+ 0xDD51, 0,0xDD52,0xDD44,0xDD53,0xDF22,0xDFC6,0xDFC7,0xDFC9,0xDCDD,
+ 0xDFCA, 0,0xDFC8,0xDF24,0xDF25,0xDF26, 0,0xDF27,0xDF28, 0,
+ 0xDC58,0xDCFB,0xDCA7,0xDC88,0xDC89,0xDCA5,0xDCA8,0xDCA9,0xDCAA,0xDCAB,
+ 0xDCAC,0xDCAD, 0,0xDC79, 0,0xDD94,0xDD95,0xDD96, 0, 0,
+ 0xDD97, 0,0xDD98,0xDD4E,0xDD4F,0xDE19, 0,0xDF41,0xDD2A,0xDCF7,
+ 0xDC04,0xDC19,0xDC17,0xDC40,0xDCEC,
+ /* plane 15, row 5 */
+ 1 | (94 << 8), /* first, last */
+ 0xD855,0xD855,0x77F6,0xD855,0xD855,0xD856,0xD857,0xD858,0xffff,
+ 0xD858,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x8FC8,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xffff,0x95F5,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xD840,0xffff,0xD845,0xD840,0x4FAB,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0x3453,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD841,0xD841,0x5C2D,0xD841,0xD858,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xffff,0xffff,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD843,0x549C,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xffff,0xD843,0xD843,0xD843,
+ 1, /* first low-surrogate */
+ 0xDC1B,0xDC1C, 0,0xDE0E,0xDF52,0xDED8,0xDE26,0xDE74, 0,
+ 0xDE75,0xDDC6,0xDF0B,0xDF0C,0xDF0D,0xDF0E,0xDF0F,0xDF10, 0,0xDC59,
+ 0xDC5A,0xDE83,0xDE84,0xDE85, 0, 0,0xDE20,0xDE21,0xDE22,0xDE23,
+ 0xDE24,0xDE29,0xDCF4, 0,0xDD8F,0xDD51, 0,0xDE17,0xDE18,0xDE5B,
+ 0xDE19,0xDE1A, 0,0xDE1B,0xDE1C,0xDE1D,0xDE1E,0xDE1F,0xDE20,0xDE21,
+ 0xDC8B,0xDC88, 0,0xDD85,0xDE87,0xDDC7,0xDE4C,0xDE4D,0xDEFC,0xDEFD,
+ 0xDEFE,0xDEFF, 0, 0,0xDC56,0xDC57,0xDC58,0xDC59,0xDCDC,0xDCDD,
+ 0xDD73,0xDD9D,0xDDA1,0xDD9E,0xDD9F,0xDDA0,0xDDE6,0xDE51,0xDE52,0xDF3D,
+ 0xDC22, 0,0xDC23,0xDC24,0xDC25,0xDC26,0xDC27,0xDC28,0xDC29,0xDC2A,
+ 0xDC2B, 0,0xDC40,0xDC2C,0xDC2D,
+ /* plane 15, row 6 */
+ 1 | (94 << 8), /* first, last */
+ 0xD843,0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xffff,0xD844,0xD844,0xD844,0xD844,0xD844,0x5788,
+ 0xD845,0xffff,0xD845,0xD845,0xffff,0xffff,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0x34AC,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD87E,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xffff,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xffff,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,
+ 1, /* first low-surrogate */
+ 0xDC2E,0xDC2F,0xDC30,0xDDD0,0xDEA8,0xDE94,0xDE95,0xDE96,0xDE97,
+ 0xDE98,0xDE9C,0xDE9B, 0,0xDEA1,0xDEA0,0xDE99,0xDE9A,0xDEA7, 0,
+ 0xDD64, 0,0xDE00,0xDE01, 0, 0,0xDEE5,0xDEE9,0xDEFB,0xDEFC,
+ 0xDEEA,0xDEEB,0xDEEC,0xDEED,0xDEEE,0xDEEF,0xDEFA,0xDEF0,0xDEF1,0xDEF2,
+ 0xDEF3,0xDEF4,0xDD52,0xDD53,0xDD54,0xDD55,0xDD58,0xDD56, 0,0xDDDD,
+ 0xDDDE,0xDDE3,0xDDDF,0xDDE0,0xDF22,0xDF23,0xDF68,0xDFDF, 0,0xDC44,
+ 0xDD94,0xDD95,0xDD96,0xDD97,0xDD98,0xDD99,0xDC79,0xDD9A,0xDD9B,0xDD9D,
+ 0xDD9E,0xDD9F,0xDDA0,0xDFF3,0xDFF2,0xDC1F,0xDC88,0xDD8F,0xDD90, 0,
+ 0xDDFD,0xDDFE,0xDDFF,0xDE00,0xDE01,0xDE1A, 0,0xDDE3,0xDDE4,0xDDE5,
+ 0xDDE6,0xDDE7,0xDDEB,0xDDE8,0xDDE9,
+ /* plane 15, row 7 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0x39DE,0xD84A,0x62C3,0xD84B,0xD84B,0xD84B,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0x6619,0xD84C,0xD84C,0xffff,0xD84D,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0x3B49,0xD84C,0x67A1,0xD84C,0x67A6,0xD84C,
+ 0xffff,0xD84D,0xD84C,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C91,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0x3CD3,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xD84F,0x3DA9,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,
+ 0xffff,0xD851,0xD851,0xD851,0xD851,
+ 1, /* first low-surrogate */
+ 0xDDEA,0xDE1D,0xDDA4,0xDDA3,0xDED4,0xDEC6,0xDEC7,0xDEC8,0xDEC9,
+ 0xDECA,0xDECB,0xDECC,0xDECD, 0,0xDECE, 0,0xDEB8,0xDEB9,0xDEBA,
+ 0xDC6E,0xDCDB,0xDCDC,0xDD68,0xDD69,0xDD6A,0xDD6B,0xDD6C,0xDD6D,0xDD6E,
+ 0,0xDF24,0xDF25, 0,0xDC00,0xDFE5,0xDFF9,0xDFE7,0xDFE8,0xDFE9,
+ 0xDFFE,0xDFEA,0xDFEB,0xDFEC, 0,0xDFED, 0,0xDFEE, 0,0xDFEF,
+ 0,0xDC17,0xDFF0,0xDFF1,0xDC94,0xDD5B,0xDD5C,0xDD5D,0xDF2F, 0,
+ 0xDF30,0xDF31,0xDF32,0xDF33,0xDCCC,0xDCCD,0xDCCE,0xDCAE,0xDCAF,0xDCB0,
+ 0,0xDCCF,0xDCD0,0xDCD1,0xDCD2,0xDCD3, 0,0xDCD4, 0,0xDDA6,
+ 0xDDA7,0xDDA8,0xDDB0,0xDDA9,0xDDAA,0xDDAB,0xDDAC,0xDDAD,0xDCFB,0xDCFC,
+ 0,0xDE2D,0xDE2E,0xDE50,0xDE2F,
+ /* plane 15, row 8 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xffff,0xD852,0xD853,0xD853,0xD853,0xD853,0xD855,0xD855,0xD855,0xD855,
+ 0x77FE,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD87E,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xffff,0xD857,0xffff,0xD857,
+ 0xD857,0xD858,0x7F57,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0x43D5,0xD859,0xD859,0xffff,0xffff,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD87E,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x82C5,0xD85A,0xD85C,
+ 0xD85C,0xD85C,0xffff,0xD85C,0xD85C,0xD85D,0xD85F,0xD861,0x8FDF,0xD861,
+ 0xD861,0x8FDC,0x488C,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0x4099,0xD861,0xD861,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDE30,0xDF65,0xDCE6,0xDD0C,0xDD02,0xDD03,0xDD04,0xDD05,0xDD06,
+ 0,0xDFC0,0xDC24,0xDC25,0xDD16,0xDD32,0xDC20,0xDC21,0xDC22,0xDC23,
+ 0,0xDC25,0xDE19,0xDE24,0xDE1A,0xDE1B,0xDE1C,0xDE1D,0xDD52,0xDE1E,
+ 0xDF5A,0xDF5B,0xDF5C,0xDF5D,0xDF5E,0xDD31, 0,0xDE29, 0,0xDF88,
+ 0xDF89,0xDE89, 0,0xDF56,0xDCD1,0xDCE6,0xDD32,0xDD33,0xDE52,0xDE53,
+ 0,0xDE54,0xDE55, 0, 0,0xDF29,0xDF2A,0xDF2B,0xDF2C,0xDF2D,
+ 0xDD92,0xDF2E,0xDF2F,0xDF30,0xDF31,0xDF32,0xDF33, 0,0xDF34,0xDD9B,
+ 0xDE23,0xDE24, 0,0xDE25,0xDE27,0xDE16,0xDCA0,0xDC6F, 0,0xDC70,
+ 0xDC71, 0, 0,0xDC72,0xDC73,0xDC74,0xDE9C,0xDEAA,0xDE9D,0xDE9E,
+ 0,0xDEAB,0xDE9F,0xDE35,0xDE38,
+ /* plane 15, row 9 */
+ 1 | (94 << 8), /* first, last */
+ 0xD868,0xD840,0xD840,0xD856,0xD840,0xD869,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0x4FE4,0xD840,0xD840,0xffff,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD858,0xD841,0xffff,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xffff,0xD842,0xD842,0xD842,0xD840,0xD842,
+ 0xD842,0xD843,0x551B,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0x3588,0xffff,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD844,0xD844,0x57AA,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0x57AB,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD845,
+ 1, /* first low-surrogate */
+ 0xDF8D,0xDC35,0xDC36,0xDEEE,0xDCB4,0xDEC9,0xDD32,0xDD55,0xDE44,
+ 0xDE45,0xDE46,0xDE47, 0,0xDE48,0xDE49, 0,0xDE4A,0xDE4B,0xDE4C,
+ 0xDE4D,0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE99,0xDDD1, 0,0xDDD2,0xDDD3,
+ 0xDDD4,0xDDD5,0xDF21,0xDF22,0xDF23,0xDC68,0xDC69,0xDC6A,0xDCE2,0xDD45,
+ 0xDDEC,0xDDED,0xDDEE,0xDDEF, 0,0xDE62,0xDE63,0xDEF4,0xDC6F,0xDF44,
+ 0xDF45,0xDC79, 0,0xDC7A,0xDC7B,0xDC7C,0xDC7D,0xDC7E,0xDC7F,0xDC80,
+ 0, 0,0xDC81,0xDC82,0xDC83,0xDC84,0xDC85,0xDC86,0xDC87,0xDC8F,
+ 0xDC88,0xDC89,0xDEC5,0xDEC6, 0,0xDEC7,0xDEC8,0xDEC9,0xDECA,0xDECB,
+ 0xDECC, 0,0xDECD,0xDECE,0xDEE3,0xDECF,0xDED0,0xDED1,0xDED2,0xDED3,
+ 0xDEC4,0xDED4,0xDED5,0xDED6,0xDD20,
+ /* plane 15, row 10 */
+ 1 | (94 << 8), /* first, last */
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0x36C9,0xD87E,0xffff,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD846,0xD846,0xD846,0xD846,0x5BA9,0xD846,0xD846,0xD846,0xD846,
+ 0x3917,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD85A,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD85A,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD87E,0xD849,0xD849,0xffff,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD87E,0xD849,0xD849,0xffff,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 1, /* first low-surrogate */
+ 0xDD21,0xDE1A,0xDE12,0xDE14,0xDE15,0xDE16,0xDE19,0xDE17,0xDE18,
+ 0,0xDC61, 0,0xDF12,0xDF13,0xDF14,0xDF15,0xDF16,0xDF17,0xDF18,
+ 0xDF19,0xDD61,0xDD62,0xDD63,0xDDF5, 0,0xDDF6,0xDDF7,0xDDF8,0xDF29,
+ 0,0xDC5D,0xDC57,0xDC58,0xDC59,0xDC5A,0xDC5B,0xDDBB,0xDDD1,0xDDBC,
+ 0xDDBD,0xDCDF,0xDDD0,0xDDBE,0xDDBF,0xDDC0,0xDDC1,0xDDC2,0xDDC3,0xDDC4,
+ 0xDF6C,0xDCA1,0xDCA2,0xDCA3,0xDD93,0xDE0D,0xDE0F,0xDE0E,0xDE10,0xDE11,
+ 0xDE12,0xDC95,0xDCE5,0xDE2F, 0,0xDE57,0xDE30,0xDE68,0xDE2B,0xDE31,
+ 0xDE58,0xDCA2,0xDE32,0xDE59, 0,0xDE5A,0xDE33,0xDE5B,0xDE5C,0xDE5D,
+ 0xDE1E,0xDDAE,0xDDAF,0xDE3B,0xDE3C,0xDE3D,0xDF07,0xDF08,0xDF09,0xDF0A,
+ 0xDF0B,0xDF0C,0xDF0D,0xDF0E,0xDF0F,
+ /* plane 15, row 11 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD87E,0xffff,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD843,
+ 0xffff,0xD84C,0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,
+ 0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0x6811,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0x7551,0xD850,0xD850,0xD850,0xD850,
+ 1, /* first low-surrogate */
+ 0xDF10,0xDF22,0xDF11,0xDF12,0xDF13,0xDF14,0xDF15,0xDF16,0xDF17,
+ 0xDF18,0xDCB8, 0,0xDC46,0xDC47,0xDC48,0xDCE1,0xDD81,0xDD83,0xDC75,
+ 0,0xDD85,0xDD86,0xDF2A,0xDCD1,0xDF2B,0xDF6B,0xDC18,0xDC19,0xDC1A,
+ 0,0xDC1B,0xDC1C,0xDC1D,0xDC1E,0xDC1F,0xDC20,0xDC21,0xDC22,0xDC23,
+ 0,0xDC24,0xDC25,0xDC26,0xDC27,0xDC28,0xDC29,0xDC2A,0xDDEF,0xDF49,
+ 0xDF4A,0xDF4B,0xDF4C,0xDF4D,0xDF4E,0xDF4F,0xDF50,0xDF51,0xDF52,0xDF53,
+ 0xDF54,0xDF5A,0xDF55,0xDC5F,0xDD02,0xDD03,0xDD04,0xDD05,0xDCD5,0xDD06,
+ 0xDD07,0xDCD6,0xDD08,0xDD09,0xDD0A,0xDD0B,0xDCD7,0xDD0C,0xDD0D,0xDDC8,
+ 0xDDC9,0xDDCA,0xDDCB,0xDDCC,0xDDCD,0xDDCE,0xDDCF,0xDDD0,0xDDD1,0xDDD2,
+ 0,0xDDD3,0xDDD4,0xDDD5,0xDDD6,
+ /* plane 15, row 12 */
+ 1 | (94 << 8), /* first, last */
+ 0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xffff,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0x3EBD,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD87E,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xffff,0xD852,0xD852,0xD852,0xD853,0xD853,
+ 0xD853,0xD853,0x7553,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD854,0xD854,0xD87E,0xD854,0xD855,0xD855,0xD855,
+ 0x7818,0xD855,0xD855,0xD855,0xD855,0xD855,0xffff,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0x4133,0xD855,0xD855,
+ 0xD855,0xD856,0xD856,0xD856,0xD856,0xffff,0x7AD7,0xD84E,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD857,
+ 1, /* first low-surrogate */
+ 0xDDD7,0xDDE2,0xDDD8,0xDD04,0xDD05,0xDD06, 0,0xDE43,0xDE44,
+ 0xDF84,0xDF8F,0xDF85,0xDF86,0xDD2F,0xDD1A,0xDD1B,0xDD1C, 0,0xDD1D,
+ 0xDD1E,0xDD1F,0xDD20,0xDD21,0xDD22,0xDD2C,0xDD23,0xDD24,0xDD0E,0xDD25,
+ 0xDD2B,0xDD2C,0xDD0B,0xDEEE, 0,0xDFC3,0xDFD8,0xDFD9,0xDC38,0xDC39,
+ 0xDC3A,0xDC3B, 0,0xDC3C,0xDC3D,0xDC3E,0xDC3F,0xDC40,0xDD48,0xDD4C,
+ 0xDF28,0xDF51,0xDF52,0xDC4C,0xDD23,0xDD45,0xDD24,0xDC31,0xDC32,0xDC33,
+ 0,0xDC34,0xDC35,0xDC36,0xDC40,0xDC37, 0,0xDC38,0xDC3D,0xDE38,
+ 0xDE39,0xDE3A,0xDE3B,0xDE3C,0xDE4C,0xDF73,0xDF74, 0,0xDF75,0xDF76,
+ 0xDF79,0xDD41,0xDD42,0xDD43,0xDE5B, 0, 0,0xDCA6,0xDE5C,0xDEE5,
+ 0xDEE6,0xDEE7,0xDEE8,0xDEED,0xDE30,
+ /* plane 15, row 13 */
+ 1 | (94 << 8), /* first, last */
+ 0x7C7E,0xD857,0xD857,0xD858,0xD858,0xD858,0xD859,0xffff,0xD859,
+ 0xD859,0xD859,0xffff,0xD859,0xffff,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,
+ 0x867E,0xD85C,0xffff,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xffff,
+ 0xD85D,0xD85D,0xD85F,0xD85F,0xffff,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD860,0x4844,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD863,
+ 0xD863,0xD863,0xD864,0xffff,0xD840,0xD840,0xD840,0xD840,0xD840,0xffff,
+ 0xD840,0xD840,0xD87E,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD841,0xD841,
+ 2, /* first low-surrogate */
+ 0xDE31,0xDF94,0xDF51,0xDFFD,0xDFFE,0xDCE9, 0,0xDEB3,
+ 0xDE84,0xDE94, 0,0xDE9C, 0,0xDE85,0xDD00,0xDD37,0xDD57,0xDF54,
+ 0xDF68,0xDF55,0xDF5C,0xDF56,0xDF57,0xDF58,0xDF59,0xDF5A,0xDF5B,0xDE34,
+ 0,0xDE35, 0,0xDE39,0xDE36,0xDE37,0xDE38,0xDDE5,0xDE59, 0,
+ 0xDE3A,0xDE3B,0xDD28,0xDE89, 0,0xDE8A,0xDE8B,0xDE8C,0xDE8D,0xDFBC,
+ 0xDEA3, 0,0xDEA4,0xDC93,0xDC94,0xDC95,0xDC96,0xDC97,0xDEB9,0xDE4F,
+ 0xDE50,0xDE51,0xDC76, 0,0xDCFB,0xDC83,0xDD38,0xDD5D,0xDE71, 0,
+ 0xDE77,0xDE78,0xDC07,0xDEC3,0xDE79,0xDE7A,0xDE7B,0xDE7C,0xDE72,0xDE7D,
+ 0xDEA0,0xDE7E,0xDE7F,0xDE80,0xDE81,0xDE82,0xDE83,0xDE9E,0xDE84,0xDE85,
+ 0xDE86,0xDE87,0xDE88,0xDC93,0xDC94,
+ /* plane 15, row 14 */
+ 1 | (94 << 8), /* first, last */
+ 0xD841,0xD841,0xD841,0xffff,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0x5266,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD843,0xD843,0x5520,0xD843,0xD843,0xD843,0xffff,0xffff,
+ 0xD843,0xD843,0x5521,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0x57D7,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xffff,0x36E1,0xD845,0xD87E,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0x36E2,0xD845,
+ 0xD846,0xD846,0xD846,0xD846,0x5BBE,
+ 1, /* first low-surrogate */
+ 0xDC95,0xDCEF,0xDCF0, 0,0xDD8D,0xDD8F,0xDD90,0xDD91,0xDD92,
+ 0xDDDE,0xDDE1,0xDE53, 0,0xDF4A,0xDF4B,0xDF4C,0xDF51,0xDF4D,0xDF48,
+ 0xDC74,0xDC75,0xDD20,0xDD21,0xDDA5,0xDDA6,0xDE73,0xDE74,0xDF50,0xDF51,
+ 0xDF52,0xDF53,0xDCDB,0xDCDC, 0,0xDCDD,0xDCDE,0xDCFF, 0, 0,
+ 0xDCDF,0xDCE0, 0,0xDCE1,0xDCE2,0xDCE3,0xDCE4,0xDCE5,0xDCE6,0xDCE7,
+ 0xDCE8,0xDCE9,0xDCEA,0xDF07,0xDF08,0xDF09,0xDF0A,0xDF0B,0xDF0C,0xDF0D,
+ 0,0xDF1A,0xDF0E,0xDF0F,0xDF10,0xDF1C,0xDD27,0xDD66,0xDD98,0xDD99,
+ 0xDE33,0xDE24,0xDE25,0xDE26, 0, 0,0xDF3E,0xDC64,0xDF3F,0xDF57,
+ 0xDF40,0xDF41,0xDF58,0xDF42,0xDF43,0xDF44,0xDF45,0xDF46, 0,0xDF47,
+ 0xDD6B,0xDD6C,0xDE10,0xDE11,
+ /* plane 15, row 15 */
+ 1 | (94 << 8), /* first, last */
+ 0xD846,0xD846,0xD847,0xD847,0xffff,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD848,0xD848,0xD848,0xD848,0x387C,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0x38E3,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xffff,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD859,0xD859,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3AEC,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 1, /* first low-surrogate */
+ 0xDF75,0xDFEF,0xDC6A,0xDC6B, 0,0xDC6C,0xDC6D,0xDC6E,0xDDEF,
+ 0xDDF0,0xDDF1,0xDDF2,0xDDF3,0xDDF4,0xDDF5,0xDDFF,0xDDF6,0xDE02,0xDDF7,
+ 0xDC22,0xDCC4,0xDCC3,0xDE28, 0,0xDF20,0xDF25,0xDF22,0xDF23,0xDFEB,
+ 0,0xDCF9,0xDCFA,0xDE99,0xDE9A,0xDE9B,0xDE63, 0,0xDE5E,0xDE5F,
+ 0xDE60,0xDE9C,0xDE61,0xDE9D,0xDF54,0xDF55,0xDF56,0xDF57,0xDF58,0xDF59,
+ 0xDF5A,0xDF19,0xDF6A,0xDF5B,0xDF5C,0xDF5D,0xDF66, 0,0xDF5E,0xDF5F,
+ 0xDF1A,0xDF60,0xDF61, 0,0xDF62,0xDF1B,0xDF63,0xDC10,0xDC11,0xDC4C,
+ 0xDC9B,0xDCEB,0xDCEC,0xDCED,0xDCEE,0xDDA3,0xDDA8,0xDDA6, 0,0xDF2F,
+ 0xDF30,0xDF31,0xDF32,0xDF33,0xDC4F,0xDC51,0xDC52,0xDC7D,0xDC53,0xDC54,
+ 0xDC55,0xDC56,0xDC57,0xDC58,0xDC59,
+ /* plane 15, row 16 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84D,0xD84D,0xD84D,0x6857,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xffff,0xD84D,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xffff,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0x3CDF,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,
+ 0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,
+ 1, /* first low-surrogate */
+ 0xDC5A,0xDC5B,0xDC5C, 0,0xDC5D,0xDC5E,0xDC5F,0xDC6F,0xDC60,
+ 0xDC61,0xDC62,0xDC63,0xDC72,0xDC64, 0,0xDC6E,0xDCB5,0xDF65,0xDF66,
+ 0xDF67,0xDF68,0xDF69,0xDF6A,0xDF6B,0xDF6C,0xDD0E,0xDD43, 0,0xDD0F,
+ 0xDD44,0xDD45,0xDD46,0xDD47,0xDD48,0xDD49,0xDD10,0xDD4A,0xDD4B,0xDD4C,
+ 0xDD4D, 0,0xDD4E,0xDD4F,0xDD50,0xDD51,0xDD52,0xDD53,0xDD54,0xDD55,
+ 0xDD56,0xDD57,0xDD58,0xDD59,0xDD5A,0xDD1D,0xDD5B,0xDD5C,0xDD5D,0xDD06,
+ 0,0xDDFE,0xDDFF,0xDE00,0xDE01,0xDE02,0xDE03,0xDE04,0xDE05,0xDE06,
+ 0xDE07,0xDE18,0xDE08,0xDE09,0xDDF3,0xDE0A,0xDE0B,0xDE1B,0xDE0C,0xDE0D,
+ 0xDE0E,0xDE0F,0xDE10,0xDD0F,0xDD61,0xDD79,0xDFC1,0xDFAC,0xDFAD,0xDD43,
+ 0xDD44,0xDD45,0xDD46,0xDD47,0xDD48,
+ /* plane 15, row 17 */
+ 1 | (94 << 8), /* first, last */
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3EC7,0xD87E,0xD852,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xffff,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD855,0xD854,0xD854,0xD855,0xD855,0xD855,0xffff,0xD855,0xD855,0xffff,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xffff,0xD856,0xD856,0xD856,0xffff,
+ 0xD856,0xD856,0xD856,0xD856,0xffff,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xffff,
+ 0xffff,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x7F3C,0xD858,
+ 0xD858,0xD858,0xD859,0xffff,0xD859,
+ 1, /* first low-surrogate */
+ 0xDD49,0xDD64,0xDD4A,0xDD4B,0xDD4C,0xDD4D, 0,0xDD2D,0xDF39,
+ 0xDC57,0xDC58,0xDC59,0xDC5F,0xDC5A,0xDD6A,0xDF2B,0xDF5D,0xDF5E,0xDF5F,
+ 0,0xDF60,0xDF61,0xDC58,0xDC59,0xDD4A,0xDD4B,0xDD4C,0xDD4D,0xDD4E,
+ 0xDC57,0xDFB3,0xDFB4,0xDC6E,0xDC5B,0xDC5C, 0,0xDC5D,0xDC5E, 0,
+ 0xDC6C,0xDE3D,0xDE54,0xDE3E,0xDE55,0xDE56,0xDE3F,0xDE57,0xDE58,0xDE59,
+ 0xDE5A,0xDE5B,0xDE5C,0xDF88,0xDF89, 0,0xDD58,0xDD59,0xDD5A, 0,
+ 0xDE67,0xDE68,0xDE69,0xDE6A, 0,0xDE6B,0xDE6C,0xDEFE,0xDEFF,0xDF00,
+ 0xDF01,0xDF02,0xDF03,0xDF04,0xDF05,0xDE39,0xDE3A,0xDE3B,0xDE3C, 0,
+ 0,0xDFB2,0xDFB3,0xDFB4,0xDFB5,0xDFB6,0xDFB7,0xDFB8, 0,0xDEA2,
+ 0xDF61,0xDF62,0xDC14, 0,0xDCEB,
+ /* plane 15, row 18 */
+ 1 | (94 << 8), /* first, last */
+ 0xD859,0xD859,0xffff,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xffff,0xffff,0xffff,0xD859,0xffff,0xD85A,0xD85A,0xffff,0x8273,0xD85A,
+ 0xffff,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD87E,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xffff,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xffff,0xD85C,0xD85C,0xD85D,0x4627,
+ 0xD85D,0xD85E,0xffff,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0x96BE,
+ 0xD864,0xD866,0xD840,0x66FA,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,
+ 1, /* first low-surrogate */
+ 0xDD42,0xDD48, 0,0xDD43,0xDD4E,0xDD44,0xDD45,0xDEB4,0xDEB5,
+ 0, 0, 0,0xDEB6, 0,0xDCE1,0xDD05, 0, 0,0xDF9A,
+ 0,0xDF9B,0xDF9C,0xDF9D,0xDF9E,0xDF9F,0xDD9A,0xDFA0,0xDFA1,0xDFA2,
+ 0xDFB5,0xDFA3,0xDFA4, 0,0xDFA5,0xDFA6,0xDFA7,0xDFA8,0xDFAF,0xDFA9,
+ 0xDFAA,0xDFAB,0xDFAC,0xDFAD,0xDFB3, 0,0xDDA0,0xDE56,0xDE34, 0,
+ 0xDE3C,0xDC0C, 0,0xDC3E,0xDCA3,0xDD30,0xDD31,0xDE97,0xDE98,0xDE99,
+ 0xDE9A,0xDE9B,0xDEB2,0xDEAB,0xDEAC,0xDEFC,0xDEE8,0xDEE9,0xDEEA,0xDFF1,
+ 0xDD3F,0xDCCE,0xDE6D,0xDE6E,0xDE6F,0xDE70,0xDE71,0xDE72,0xDE73, 0,
+ 0xDC78,0xDC3A,0xDD67, 0,0xDD64,0xDD65,0xDF07,0xDEC4,0xDEC5,0xDEC6,
+ 0xDEC7,0xDEC8,0xDEC9,0xDEE5,0xDECA,
+ /* plane 15, row 19 */
+ 1 | (94 << 8), /* first, last */
+ 0xD840,0xffff,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xffff,0xD841,0xD842,0xD842,0xD842,0xD842,0xD861,0xD842,
+ 0xD842,0xD843,0xD843,0xD843,0xD843,0x35AB,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xffff,0xffff,0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0x364B,0xD844,0xD844,0xD844,0xD844,
+ 0xffff,0xffff,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,
+ 0xD846,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0x5A72,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,
+ 1, /* first low-surrogate */
+ 0xDECB, 0,0xDECC,0xDECD,0xDECE,0xDECF,0xDED0,0xDC97,0xDC9A,
+ 0xDC9B,0xDDEA,0xDDEC,0xDDED,0xDDF7,0xDDEE,0xDDEF,0xDE5B,0xDE5C,0xDE5D,
+ 0xDF6D,0xDF6E, 0,0xDF6F,0xDC81,0xDC82,0xDD4F,0xDDAD,0xDF0A,0xDE7E,
+ 0xDF69,0xDD54,0xDD55,0xDD56,0xDD57, 0,0xDD58,0xDD59,0xDD5A,0xDD5B,
+ 0xDD5C,0xDD5D, 0, 0,0xDD5E,0xDD5F,0xDF3B,0xDF36,0xDF3C,0xDF3D,
+ 0xDF3E,0xDF3F,0xDF40,0xDF41,0xDF42, 0,0xDF43,0xDF44,0xDF45,0xDF37,
+ 0, 0,0xDF46,0xDF47,0xDF48,0xDF49,0xDD2D,0xDDA5,0xDE3D,0xDE3F,
+ 0xDD6E,0xDFE7,0xDF75,0xDF76,0xDF77,0xDF78,0xDF79,0xDF7A,0xDF7B,0xDF7C,
+ 0xDF8E,0xDF7D,0xDF7E, 0,0xDF7F,0xDF80,0xDF81,0xDF82,0xDF83,0xDF84,
+ 0xDF85,0xDF86,0xDF87,0xDF88,0xDF89,
+ /* plane 15, row 20 */
+ 1 | (94 << 8), /* first, last */
+ 0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,
+ 0xffff,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0x37E2,0xD847,0xD847,0xD847,0xD847,0xD847,0xffff,0xD847,0xD847,
+ 0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xffff,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 1, /* first low-surrogate */
+ 0xDF8A,0xDF8B,0xDF8C,0xDD6F,0xDD70,0xDD71,0xDD72,0xDE2A,0xDE2B,
+ 0xDE2C,0xDE2D,0xDE2E,0xDE2F,0xDE30,0xDE31,0xDF83,0xDC84,0xDC85,0xDC93,
+ 0,0xDC86,0xDC87,0xDC88,0xDC89,0xDC8A,0xDC8B,0xDE36,0xDE38,0xDE39,
+ 0xDE3A, 0,0xDE3B,0xDE3C,0xDE3D,0xDE3E,0xDE3F, 0,0xDE40,0xDE41,
+ 0xDE42,0xDCDE,0xDCDF,0xDCE0,0xDCE1,0xDE4A,0xDE4B,0xDE4C,0xDE4D,0xDE4E,
+ 0xDE4F,0xDE50,0xDF27,0xDFF9,0xDFFA,0xDFFB,0xDC98,0xDC99,0xDC9A, 0,
+ 0xDD1E,0xDE9E,0xDEF7,0xDE9F,0xDEA0,0xDEF0,0xDEF8,0xDEF9,0xDEA1,0xDEA2,
+ 0xDEA3,0xDEA4,0xDEA5,0xDEFA,0xDEFB,0xDEFC,0xDEFD,0xDEFE,0xDF1F,0xDEFF,
+ 0xDF00,0xDF8C,0xDF01,0xDDC2,0xDDC3, 0,0xDDD3,0xDE4E,0xDFAF,0xDFB0,
+ 0xDFB1,0xDFB2,0xDFB3,0xDFC6,0xDFB4,
+ /* plane 15, row 21 */
+ 2 | (94 << 8), /* first, last */
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xffff,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x68BD,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xffff,0xD84D,
+ 0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,
+ 2, /* first low-surrogate */
+ 0xDFB5,0xDFB6,0xDFB7,0xDFB8,0xDFB9,0xDFBA,0xDFBB,0xDFBC,
+ 0xDFBD,0xDFBE,0xDFBF,0xDFC1,0xDFC0,0xDFC2,0xDFC3,0xDF51,0xDF52,0xDF53,
+ 0xDF54,0xDF55,0xDC5A,0xDC50,0xDC51,0xDC78,0xDCF8,0xDCF9,0xDDC6,0xDDCB,
+ 0xDDCC,0xDDCD,0xDDCE,0xDDCF,0xDDD0,0xDDD1,0xDDD2,0xDDD3,0xDDD4,0xDDD5,
+ 0,0xDF37,0xDF38,0xDF73,0xDC90,0xDC91,0xDCBF,0xDC92,0xDC93,0xDC94,
+ 0xDC95,0xDC96,0xDC97,0xDC98,0xDC99, 0,0xDC9A,0xDC9B,0xDC9C,0xDC9D,
+ 0xDC9E,0xDC9F,0xDCA0,0xDCA1,0xDCA2,0xDCA3,0xDCA4,0xDCA5, 0,0xDCA6,
+ 0xDCA7,0xDCBF,0xDCC0,0xDCC1,0xDCC2,0xDCC3,0xDCC4,0xDCC5,0xDCC6,0xDD75,
+ 0xDE43,0xDE12,0xDE9F,0xDE91,0xDCF6,0xDE92,0xDE93,0xDE94,0xDF7E,0xDF7F,
+ 0xDF80,0xDF81,0xDF82,0xDC4C,0xDC63,
+ /* plane 15, row 22 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84F,0xD84F,0xD84F,0xD850,0xD84F,0xD84F,0xD84F,0xD84F,0x6E15,
+ 0xD84F,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D0E,
+ 0xffff,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0x3DC1,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD852,0x7413,0xD852,0x3ED9,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0x74F8,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xffff,0xD853,0xD853,
+ 0xD854,0xD854,0xD854,0xD854,0x7B3D,
+ 1, /* first low-surrogate */
+ 0xDDC0,0xDDC1,0xDDC2,0xDE3A,0xDDC3,0xDDC4,0xDDC5,0xDDC6, 0,
+ 0xDDC7, 0,0xDDC8,0xDD73,0xDDC9,0xDDCA,0xDDCB,0xDDCC,0xDDCD, 0,
+ 0, 0,0xDDCE,0xDDCF,0xDDD0,0xDDD1,0xDDD2,0xDDD3,0xDDD4,0xDDD5,
+ 0xDE3B,0xDE3C,0xDE3D,0xDE3E, 0,0xDE3F,0xDE40,0xDE41,0xDE42,0xDE43,
+ 0,0xDE44,0xDE45,0xDE59,0xDE46,0xDE47,0xDE48, 0,0xDE49,0xDD13,
+ 0xDD82,0xDD83,0xDE66,0xDE67,0xDD65, 0,0xDD66, 0,0xDD75,0xDD74,
+ 0xDD67,0xDD6D,0xDD76,0xDD68,0xDD69,0xDD6A,0xDD6B,0xDD4F,0xDD6C,0xDEF8,
+ 0xDF45, 0,0xDF46,0xDFE4,0xDC85,0xDC6F,0xDC70,0xDD82,0xDD83,0xDD84,
+ 0xDD8B,0xDF2D,0xDF68,0xDF69,0xDF77,0xDF64,0xDF6A, 0,0xDFF2,0xDFE2,
+ 0xDC63,0xDC64,0xDC65,0xDC66,
+ /* plane 15, row 23 */
+ 1 | (94 << 8), /* first, last */
+ 0xD854,0xD854,0x76D8,0xffff,0xD854,0xD854,0xD854,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xffff,0xD855,0x4148,0xD855,0xD855,
+ 0xD855,0x79FC,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xffff,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0x7B39,0xD856,0xD856,0xD857,0xD857,
+ 0xD857,0xffff,0x7D4B,0xD857,0xffff,0xffff,0xD857,0xD857,0xD857,0xD857,
+ 0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xffff,0xD859,0xffff,0xD85A,0xD85A,0xffff,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x83B9,0xD85A,
+ 0xD85B,0xD85A,0xD85A,0xD85B,0xD85B,
+ 1, /* first low-surrogate */
+ 0xDC67,0xDC68, 0, 0,0xDD72,0xDD7D,0xDF69,0xDC84,0xDC86,
+ 0xDC87,0xDC88,0xDC9E, 0,0xDC89,0xDC8A,0xDC96,0xDC8B,0xDC8C,0xDC8D,
+ 0xDE79,0xDE83,0xDE7A,0xDE5D,0xDE7B, 0,0xDF9F, 0,0xDFA0,0xDFA1,
+ 0xDFA2, 0,0xDD6A,0xDD6B,0xDD6C,0xDD6D,0xDD6E,0xDE78, 0,0xDE79,
+ 0xDE7C,0xDF21,0xDF22,0xDF23,0xDF24, 0,0xDF25,0xDF26,0xDE51,0xDE52,
+ 0xDE56, 0, 0,0xDFE1, 0, 0,0xDFD6,0xDFD7,0xDFD8,0xDFD9,
+ 0xDEB5,0xDF6C,0xDF6F,0xDF70,0xDCBC,0xDCBD,0xDCED,0xDD5B,0xDD5C,0xDD5D,
+ 0xDD5E,0xDE86,0xDE87,0xDEED, 0,0xDEEE, 0,0xDD0E,0xDD0F, 0,
+ 0xDE2D,0xDE2A,0xDE2E,0xDECC,0xDFF9,0xDFFA,0xDFFB,0xDFFC, 0,0xDFFD,
+ 0xDC1B,0xDFFE,0xDFFF,0xDC00,0xDC01,
+ /* plane 15, row 24 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0x86CF,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85D,0xffff,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,
+ 0xffff,0xD85E,0xD87E,0xD85E,0xffff,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xffff,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0x8EAE,0xD860,0xffff,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xffff,0xD861,0xD861,0xD862,0xD862,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDC02,0xDC03,0xDC21,0xDC04,0xDC05,0xDC06,0xDC07,0xDC08,0xDC09,
+ 0xDC0A,0xDC0B,0xDC0C,0xDC0D,0xDC0E,0xDC0F,0xDC10,0xDC11,0xDC12,0xDC13,
+ 0xDC14,0xDC15,0xDE7B,0xDE7C,0xDE7D,0xDE7E, 0,0xDE7F,0xDE80,0xDE66,
+ 0xDE81,0xDE82,0xDE83,0xDDB2, 0,0xDE7F,0xDE72,0xDE5A,0xDFEB,0xDC15,
+ 0,0xDC16,0xDDCA,0xDC17, 0,0xDCC5,0xDCC6,0xDCC7,0xDD88,0xDD89,
+ 0,0xDD8A,0xDD8B,0xDD8C,0xDD8D,0xDFDF, 0,0xDD3B,0xDD3C,0xDD3D,
+ 0xDD3E,0xDD3F,0xDD40,0xDD41,0xDD42,0xDE5C,0xDEAF,0xDEA9,0xDEAA,0xDEAB,
+ 0xDEAC,0xDEB5,0xDEAD,0xDEAE,0xDFE2,0xDE24, 0,0xDEC4, 0,0xDCEA,
+ 0xDCD3,0xDCD4,0xDCD5,0xDE86, 0,0xDE87,0xDEFD,0xDC05,0xDD49,0xDC5F,
+ 0xDCD3,0xDCD5,0xDE8A,0xDE8B,0xDE8C,
+ /* plane 15, row 25 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,
+ 0x96EB,0xffff,0xffff,0xD864,0xD864,0xD867,0xD867,0xffff,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD84C,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xffff,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0x55B0,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0x5840,0x5842,
+ 1, /* first low-surrogate */
+ 0xDE8D,0xDE8E,0xDE8F,0xDE90,0xDE91,0xDE92,0xDE93,0xDC7D,0xDC7E,
+ 0, 0, 0,0xDDEC,0xDE5B,0xDC87,0xDC86, 0,0xDC46,0xDC47,
+ 0xDD02,0xDD6D,0xDD6E,0xDD6F,0xDF0D,0xDF0E,0xDF0F,0xDF10,0xDF11,0xDF12,
+ 0xDF13,0xDF14,0xDC9F,0xDCA0,0xDCA1,0xDCA3,0xDD21,0xDD22,0xDF7C,0xDD95,
+ 0xDD96,0xDE61,0xDE67,0xDF91,0xDF92,0xDF93,0xDF94,0xDC8A,0xDC8B,0xDCF7,
+ 0xDD24,0xDDB0,0xDDB1,0xDE8E,0xDF04,0xDF6A,0xDF6B,0xDF6C,0xDF6D,0xDDE8,
+ 0xDE0C,0xDDE9,0xDDEA,0xDE0D, 0,0xDDEB,0xDDEC,0xDDED,0xDDEE,0xDDEF,
+ 0xDDF0,0xDDF1,0xDDF2,0xDE16,0xDDF3,0xDE04,0xDE1D,0xDDF4,0xDDF5,0xDDF6,
+ 0xDDF7, 0,0xDE02,0xDE03,0xDE04,0xDF9A,0xDF7C,0xDFC5,0xDF7D,0xDF7E,
+ 0xDF7F,0xDF80,0xDF81,
+ /* plane 15, row 26 */
+ 1 | (94 << 8), /* first, last */
+ 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xffff,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0x3701,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xffff,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD841,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xffff,0xD848,
+ 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xffff,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,
+ 1, /* first low-surrogate */
+ 0xDF82,0xDF83,0xDF84,0xDF85,0xDF86,0xDF87,0xDDAE,0xDE4D,0xDFB0,
+ 0xDFDC,0xDFB6,0xDFB7,0xDFB8,0xDFB9,0xDFBA,0xDFBB,0xDFDB,0xDFBC,0xDFBD,
+ 0xDFBE, 0,0xDFBF,0xDFC0,0xDFC1,0xDFC2,0xDFC3,0xDFCE, 0,0xDFD9,
+ 0xDFC4,0xDFC5,0xDFDA,0xDFC6,0xDFC7,0xDFC8,0xDFC9,0xDFCA,0xDD7E,0xDD7B,
+ 0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE52,0xDE53,0xDE54,0xDE55,0xDF8F,0xDFFC,
+ 0xDCA6,0xDCA7,0xDCA8,0xDD23,0xDE8B, 0,0xDE8C,0xDE8D,0xDE8E,0xDE8F,
+ 0xDEA4,0xDD99,0xDC24,0xDC46,0xDC47,0xDC48,0xDCFD,0xDCFE, 0,0xDE6E,
+ 0xDE7C,0xDE6F,0xDE70,0xDE71,0xDE72,0xDF29,0xDF2A,0xDF5F,0xDCA2,0xDD30,
+ 0xDD2B,0xDF61,0xDF02,0xDF03,0xDF04,0xDF05,0xDF06,0xDF07, 0,0xDF08,
+ 0xDF09,0xDF62,0xDF0A,0xDF0B,0xDF0C,
+ /* plane 15, row 27 */
+ 1 | (94 << 8), /* first, last */
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xffff,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84B,0xD84A,0xD84B,0xffff,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xffff,0xD84B,0xD84B,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xffff,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xffff,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xffff,0xD84C,0xD84C,0xD84C,0xD84C,0xD859,0xD84D,0xD84D,
+ 0xffff,0xD84D,0xD84D,0xD84D,0xffff,0xD84D,0xD84D,0xD84D,0x692B,0xD84D,
+ 0x6916,0xD84D,0xD84D,0xD840,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 1, /* first low-surrogate */
+ 0xDF0D,0xDF0E,0xDF63,0xDF27,0xDF0F, 0,0xDF1B,0xDF64,0xDF10,
+ 0xDF11,0xDF81,0xDF12,0xDF65,0xDF13,0xDDCE,0xDC29,0xDFC4,0xDC2A, 0,
+ 0xDC2B,0xDC2C,0xDC2D,0xDC2E,0xDC2F,0xDC30,0xDC31,0xDC32,0xDC33,0xDC34,
+ 0,0xDC35,0xDC36,0xDFE3,0xDC37,0xDC38,0xDC39,0xDC3A,0xDC3B,0xDC4D,
+ 0xDC3C,0xDC3D,0xDC3E, 0,0xDED0,0xDED1,0xDC55,0xDD02,0xDD04,0xDDFC,
+ 0xDE07,0xDDFD,0xDDFE, 0,0xDDFF,0xDE00,0xDE08,0xDE01,0xDE02,0xDE35,
+ 0xDE03,0xDE04, 0,0xDF3B,0xDF89,0xDF81,0xDF82,0xDF33,0xDCEB,0xDCEC,
+ 0,0xDCED,0xDCEE,0xDCEF, 0,0xDCF0,0xDCF1,0xDCF2, 0,0xDCF3,
+ 0,0xDCF4,0xDCF5,0xDC4B,0xDCF6,0xDCF7,0xDCF8,0xDCF9,0xDCFA,0xDCFB,
+ 0xDCFC,0xDCFD,0xDCFE,0xDCFF,0xDD00,
+ /* plane 15, row 28 */
+ 1 | (94 << 8), /* first, last */
+ 0x691B,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x6927,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x6BF5,0xD84E,
+ 0xffff,0xD84E,0xD84E,0xD84F,0xD84F,0x3D20,0xD84F,0xD84F,0xD84F,0x6E82,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D21,0xD84F,
+ 0xD84F,0x6E7A,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xffff,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xffff,0xffff,0xD850,0xffff,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xffff,0x7129,
+ 2, /* first low-surrogate */
+ 0xDD01,0xDD02,0xDD03,0xDD04,0xDD05,0xDD06,0xDD07, 0,
+ 0xDD08,0xDD09,0xDD0A,0xDD0B,0xDD0C,0xDD0D,0xDCD7,0xDCD8,0xDE29,0xDE9C,
+ 0xDEF8,0xDF98,0xDFA4,0xDF99,0xDF9A,0xDF9B,0xDF97,0xDF9C, 0,0xDF9D,
+ 0,0xDF9E,0xDF9F,0xDC65,0xDDD6, 0,0xDE32,0xDE33,0xDE34, 0,
+ 0xDE35,0xDE36,0xDE37,0xDDD7, 0,0xDDD8,0xDE38,0xDE39,0xDE3A,0xDE3B,
+ 0xDE3C,0xDE3D,0xDE3E,0xDE3F,0xDE40,0xDDD9,0xDE41,0xDE42, 0,0xDE43,
+ 0xDE44, 0,0xDE7C,0xDE7D,0xDE7E,0xDE7F,0xDE80,0xDE81,0xDE82, 0,
+ 0xDE83,0xDE84,0xDE85,0xDE86,0xDEA5,0xDE87,0xDE88,0xDE89,0xDE8A,0xDE8B,
+ 0xDE8C,0xDE8D,0xDE8E, 0, 0,0xDE8F, 0,0xDE90,0xDE91,0xDE92,
+ 0xDE93,0xDE94,0xDE95,
+ /* plane 15, row 29 */
+ 1 | (94 << 8), /* first, last */
+ 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3EDA,0xffff,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xffff,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD87E,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xffff,0xD855,0xffff,0xD856,0xD846,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD857,0xD857,0xffff,0xD857,
+ 1, /* first low-surrogate */
+ 0xDE96,0xDD56,0xDD57,0xDDE1,0xDE0E,0xDE0F,0xDE7A,0xDE7B,0xDE8B,
+ 0xDFF2,0xDFF3,0xDD93,0xDD94,0xDD95,0xDD96,0xDD97,0xDDAD,0xDD98,0xDDAB,
+ 0xDD7B,0xDD99,0xDD9A,0xDD9B,0xDD85,0xDD9C,0xDD9D, 0, 0,0xDDAC,
+ 0xDD79,0xDD9E,0xDDA4,0xDEFD,0xDFEB,0xDFEA,0xDC8F,0xDC90,0xDC86,0xDC87,
+ 0xDC88,0xDDAC,0xDDAD,0xDFEC,0xDC73,0xDC74, 0,0xDDAA,0xDDAB,0xDDAC,
+ 0xDFD1,0xDFD7,0xDCB9,0xDCBA,0xDCBB,0xDCBC,0xDE8E,0xDE8F,0xDE90,0xDE7C,
+ 0xDE91,0xDE92,0xDE93,0xDE94,0xDD54,0xDE9A,0xDE95,0xDE96,0xDE97,0xDFBD,
+ 0xDFC7,0xDFBE, 0,0xDFBF, 0,0xDD93,0xDE5E,0xDE86,0xDE87,0xDE88,
+ 0xDE89,0xDF41,0xDF42,0xDF43,0xDF44,0xDF45,0xDF46,0xDF4A,0xDF47,0xDF48,
+ 0xDF49,0xDE6B,0xDE66, 0,0xDE67,
+ /* plane 15, row 30 */
+ 1 | (94 << 8), /* first, last */
+ 0x7CAB,0xD857,0x7CAC,0xffff,0xD857,0xD857,0xD857,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD87E,0xD858,
+ 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xffff,0xffff,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xffff,0xffff,0xffff,0xD85A,0xD85A,
+ 0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0x83F7,0xffff,0xD85B,0xD85B,0xD85B,0x44EA,0xffff,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 2, /* first low-surrogate */
+ 0xDE68, 0, 0,0xDFFD,0xDFFE,0xDFFF,0xDC00,0xDC01,
+ 0xDC02,0xDC03,0xDC04,0xDC05,0xDC06,0xDE33,0xDEC2,0xDED0,0xDD74,0xDF95,
+ 0xDF96,0xDC35,0xDC36,0xDD67,0xDD68,0xDD69,0xDD6A,0xDD72,0xDD6B,0xDD6C,
+ 0xDD6D,0xDD6E,0xDD6F,0xDF22, 0, 0,0xDF23,0xDF41,0xDF24,0xDF25,
+ 0xDF26,0xDF27,0xDF28,0xDF29,0xDEB7, 0, 0, 0,0xDDDA,0xDECF,
+ 0xDEDA,0xDC89,0xDCB7,0xDC8A,0xDC8B,0xDD5E,0xDC8C, 0,0xDC8D,0xDC8E,
+ 0xDC8F,0xDC90,0xDC91,0xDC92,0xDC93,0xDC94,0xDCB6,0xDC95,0xDC96,0xDC97,
+ 0, 0,0xDC98,0xDC99,0xDC9A, 0, 0,0xDC9B,0xDCBD,0xDC9C,
+ 0xDC9D,0xDC9E,0xDC9F,0xDCC0,0xDCA0,0xDCA1,0xDCA2,0xDCA3,0xDCA4,0xDCA5,
+ 0xDCA6,0xDCA7,0xDCA8,0xDCA9,0xDCAA,
+ /* plane 15, row 31 */
+ 2 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD87E,0xD85E,0xD85E,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xffff,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD860,0xD87E,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xffff,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xffff,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xffff,0xD862,0xD863,0x4989,0xffff,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0x9596,
+ 2, /* first low-surrogate */
+ 0xDDB4,0xDDB5,0xDDB6,0xDEB9,0xDEBA,0xDEBB,0xDE91,0xDEBC,
+ 0xDDEE,0xDDEF,0xDE96,0xDE97,0xDE73,0xDE98,0xDE99,0xDFED,0xDFEE,0xDCDE,
+ 0xDDB0,0xDDB1,0xDDB2,0xDDB3,0xDDB4,0xDDB5,0xDDB6,0xDDCE,0xDDB7,0xDFE3,
+ 0xDCB9,0xDD55,0xDD7E,0xDD56,0xDD57,0xDD58,0xDD59,0xDD5A, 0,0xDEC4,
+ 0xDEC5,0xDEC6,0xDEC7,0xDEC8,0xDEC9,0xDEEE,0xDECF,0xDECA,0xDECB,0xDECC,
+ 0xDC09,0xDDDA,0xDC03,0xDE2F,0xDE30,0xDE31,0xDE32,0xDD0E,0xDD0F,0xDD10,
+ 0xDD11,0xDD12, 0,0xDD13,0xDD14,0xDD15,0xDCFF,0xDF1F,0xDF20,0xDF21,
+ 0xDF2D, 0,0xDC1B,0xDC1C,0xDC1D,0xDC1E,0xDD53,0xDD54,0xDD55,0xDD56,
+ 0xDD64,0xDD59,0xDD57, 0,0xDD58,0xDC6B, 0, 0,0xDCE7,0xDCE8,
+ 0xDCE9,0xDCEA,0xDCEB,0xDCEC,
+ /* plane 15, row 32 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0xffff,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xffff,0xD848,0xD865,0x4AB2,0xD865,0xD865,0xffff,0xD866,0xD84C,0xD867,
+ 0xD869,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD842,0xffff,0xD843,0xffff,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0x55F1,0xD843,0xD843,0xD844,
+ 0xD844,0xD844,0xD844,0xD866,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xD844,0xD845,0xD840,0xD845,0xD846,0xD845,0xD845,
+ 0xD846,0xffff,0xD846,0xD846,0xD846,
+ 1, /* first low-surrogate */
+ 0xDCED,0xDEB1,0xDEB4, 0,0xDC8A,0xDC8D,0xDC8C,0xDDF2,0xDDF3,
+ 0,0xDD08,0xDC17, 0,0xDD9F,0xDEA0, 0,0xDC6D,0xDC7D,0xDF90,
+ 0xDDC4,0xDC4C,0xDD74,0xDD75,0xDD76,0xDF49,0xDF4A,0xDF4B,0xDF4C,0xDF4D,
+ 0xDF4E,0xDF4F,0xDF50,0xDF51,0xDF52,0xDF53,0xDF54,0xDF55,0xDF56,0xDCA4,
+ 0xDCA9,0xDD2A,0xDD2B,0xDFB3,0xDFC1,0xDC98,0xDCFB,0xDCFC,0xDDBC,0xDE96,
+ 0xDF0A, 0,0xDEA2, 0,0xDE81,0xDE82,0xDE83,0xDE84,0xDE85,0xDE86,
+ 0xDE87,0xDE88,0xDE89,0xDE8A,0xDE8B,0xDE8C, 0,0xDE8D,0xDED1,0xDE14,
+ 0xDFC9,0xDFCA,0xDFCB,0xDEFD,0xDFCC,0xDFCD,0xDFCE,0xDFCF,0xDFD0,0xDFD1,
+ 0xDFD2,0xDFD3,0xDFD4,0xDFD5,0xDD71,0xDC4D,0xDE62,0xDC0E,0xDFFE,0xDFFF,
+ 0xDC00, 0,0xDC01,0xDC02,0xDC03,
+ /* plane 15, row 33 */
+ 1 | (94 << 8), /* first, last */
+ 0xD846,0xD846,0xD846,0xffff,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,
+ 0xD856,0x5F41,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,
+ 0xD849,0xD849,0xffff,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xffff,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD84C,0xffff,0xD84C,0xD84C,
+ 1, /* first low-surrogate */
+ 0xDC15,0xDC04,0xDC05, 0,0xDD87,0xDD89,0xDE6E,0xDE6F,0xDE70,
+ 0xDE71,0xDC6E,0xDE72,0xDE73,0xDE74,0xDF9D,0xDCB8,0xDCB9,0xDCBA,0xDEC2,
+ 0xDEC3,0xDED5,0xDEC4,0xDEC0,0xDEC5,0xDEC6,0xDE8A,0xDE8B,0xDE8C,0xDF64,
+ 0xDF8C, 0,0xDC0D,0xDCA8,0xDD3B,0xDD3C,0xDD3D,0xDD3E,0xDD3F,0xDD40,
+ 0xDF66,0xDFCB,0xDFB7,0xDFB8,0xDFB9,0xDFBA,0xDF67,0xDFBB,0xDF68,0xDF69,
+ 0xDF6A,0xDFBC, 0,0xDDDB,0xDC81,0xDC82,0xDC83,0xDC84,0xDC85,0xDC86,
+ 0xDC87,0xDC88,0xDC89,0xDCBF,0xDC8A,0xDC8B, 0,0xDC8C,0xDC8D,0xDC8E,
+ 0xDC8F,0xDC90,0xDCA1,0xDC91,0xDED6,0xDF9F,0xDC58,0xDC85,0xDD0B,0xDD0C,
+ 0xDE37,0xDE38,0xDCCE,0xDE39,0xDE3A,0xDE3B,0xDE3C,0xDE3D,0xDE3E,0xDE40,
+ 0xDE41,0xDE42, 0,0xDE43,0xDF8A,
+ /* plane 15, row 34 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x698A,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x698C,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x6980,
+ 0xD84D,0x697F,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xffff,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xffff,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD850,0xffff,0x3DDA,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,
+ 1, /* first low-surrogate */
+ 0xDF8B,0xDD90,0xDD59,0xDD5B,0xDD5C,0xDD5D,0xDD5E, 0,0xDD5F,
+ 0xDD60,0xDD61,0xDD62,0xDD63,0xDD64,0xDD93,0xDD65,0xDD66,0xDD67,0xDD68,
+ 0xDD69,0xDD6A,0xDD6B,0xDD95,0xDD6C,0xDD6D,0xDD6E,0xDD6F, 0,0xDD70,
+ 0xDD71,0xDD72,0xDD73,0xDD74,0xDD75,0xDD76,0xDD77,0xDD78,0xDD79, 0,
+ 0xDD7A, 0,0xDD7B,0xDDA9,0xDD7C,0xDCF1,0xDCEB,0xDD8A,0xDE3D,0xDEA6,
+ 0xDEA7,0xDFBA, 0,0xDFBB,0xDFBC,0xDFBD,0xDE91,0xDE92,0xDE93,0xDE94,
+ 0xDE95,0xDE96,0xDE97,0xDDDA,0xDE98,0xDE99,0xDE9A, 0, 0,0xDE9B,
+ 0xDE9C,0xDE9D,0xDE9E,0xDE9F,0xDEA0,0xDEBF,0xDEA1,0xDEA2,0xDEA3,0xDEA4,
+ 0xDEA5,0xDEA6,0xDEA7,0xDE5B,0xDD0D,0xDEA8,0xDECB, 0, 0,0xDECC,
+ 0xDF4F,0xDECD,0xDECE,0xDECF,0xDF4E,
+ /* plane 15, row 35 */
+ 1 | (94 << 8), /* first, last */
+ 0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD87E,0xD850,0xffff,0xffff,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0x3DDB,0xD850,
+ 0xD850,0xD851,0xD851,0xD851,0xffff,0xD852,0xffff,0xD852,0xD852,0xD852,
+ 0xD852,0x3EE2,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0x3EE3,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD87E,0xD852,
+ 0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,
+ 0xD854,0xD854,0xD854,0xD854,0xD84D,0xD854,0xffff,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,
+ 1, /* first low-surrogate */
+ 0xDED0,0xDED1,0xDED2, 0,0xDED3,0xDED4,0xDED5,0xDED6,0xDED7,
+ 0xDED8,0xDED9,0xDEFA,0xDEDA,0xDEDB,0xDD1C,0xDEDC, 0, 0,0xDEDD,
+ 0xDEDE,0xDEDF,0xDEE0,0xDEE1,0xDEE2,0xDEE3,0xDEE4,0xDEE5, 0,0xDEE6,
+ 0xDEE7,0xDD8E,0xDE98,0xDE99, 0,0xDC0A, 0,0xDC26,0xDC27,0xDDBD,
+ 0xDDDF, 0,0xDDBE,0xDDDE,0xDDBF,0xDDC0,0xDDC1,0xDDC2,0xDD9F,0xDDC3,
+ 0xDDC4,0xDDC5,0xDDC6,0xDDC7, 0,0xDDC8,0xDDC9,0xDDE3,0xDDCA,0xDDCB,
+ 0xDDCC,0xDDCD,0xDDCE,0xDDCF,0xDDD0,0xDDD1,0xDDD2,0xDDD3,0xDD2F,0xDDD4,
+ 0xDF04,0xDF65,0xDFEE,0xDCA0,0xDCA1,0xDDDD,0xDDDE,0xDF83,0xDFFA,0xDC7F,
+ 0xDC80,0xDDE8,0xDDE9,0xDDEA,0xDDA6,0xDFE1, 0,0xDCDB,0xDCDC,0xDCDD,
+ 0xDCDE,0xDCDF,0xDCE0,0xDCE1,0xDCE2,
+ /* plane 15, row 36 */
+ 1 | (94 << 8), /* first, last */
+ 0xD855,0xD855,0xD855,0xD855,0x789C,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x7B7B,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,
+ 0xD859,0xD859,0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,0xffff,0xD859,
+ 0xD859,0xD859,0xD85A,0xD85B,0x4749,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 1, /* first low-surrogate */
+ 0xDCE3,0xDCE4,0xDCE5,0xDCE6, 0,0xDCE7,0xDEB0,0xDE98,0xDEB1,
+ 0xDE99,0xDEB2,0xDEB3,0xDEB4,0xDEB5,0xDEB6,0xDEB7,0xDEB8,0xDEB9,0xDFE2,
+ 0xDFE3,0xDFE4,0xDFE5,0xDFE6,0xDFE7,0xDFE8,0xDFE9,0xDDAD,0xDDCF,0xDDAE,
+ 0xDDAF,0xDDB0,0xDDB1,0xDE92,0xDE93,0xDE94,0xDF79, 0,0xDF7A,0xDF7B,
+ 0xDF7C,0xDF7D,0xDF7E,0xDF7F,0xDF80,0xDF81,0xDF82,0xDF83,0xDF84,0xDE97,
+ 0xDE84,0xDE85,0xDE89,0xDE86,0xDE87,0xDC2C,0xDC2D,0xDC2E,0xDC2F,0xDC30,
+ 0xDC31,0xDC32,0xDC33,0xDC34,0xDC35,0xDC36,0xDC37,0xDED2,0xDC44,0xDD00,
+ 0xDD83,0xDD84,0xDD86,0xDF7A,0xDF7B,0xDF7C,0xDF7D,0xDF7E, 0,0xDF7F,
+ 0xDF87,0xDF80,0xDE43,0xDD34, 0,0xDD35,0xDD36,0xDD37,0xDD38,0xDD39,
+ 0xDD3A,0xDD3B,0xDD3C,0xDD3D,0xDD3E,
+ /* plane 15, row 37 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xffff,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD87E,
+ 0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,0xD85E,0xD85E,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47F3,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xffff,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0x90D2,0xD861,0xD861,
+ 0xD862,0xD862,0x9274,0xD87E,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD863,0x95A0,0xffff,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDD3F,0xDD40,0xDD41,0xDD42,0xDD43,0xDD44,0xDD45,0xDD46,0xDD47,
+ 0xDD48,0xDD49,0xDD4A, 0,0xDD4B,0xDD4C,0xDD4D,0xDD4E,0xDEE7,0xDEE8,
+ 0xDEE9,0xDEEA,0xDEEB,0xDEEC,0xDEED,0xDEEE,0xDDF7,0xDE9A,0xDECD,0xDDC8,
+ 0xDEA3,0xDECE,0xDC31,0xDC32,0xDC33,0xDDE4, 0,0xDDE5,0xDDE6,0xDCC8,
+ 0xDD74,0xDD75,0xDD76,0xDD77,0xDD78,0xDD79,0xDD7A,0xDE61,0xDEDF,0xDEE0,
+ 0xDEE1,0xDEE2,0xDEE3,0xDEE4,0xDEE5,0xDEE6, 0,0xDC31,0xDE3D,0xDE3E,
+ 0xDE3F,0xDEF4,0xDEF5,0xDEF6, 0,0xDC17,0xDD41,0xDD42,0xDD43,0xDD44,
+ 0xDD45,0xDD46,0xDD47,0xDD48,0xDD49,0xDD4A,0xDD4B, 0,0xDEBA,0xDF44,
+ 0xDD2A,0xDD6D, 0,0xDDE7,0xDD7E,0xDD6E,0xDD6F,0xDD70,0xDD71,0xDD76,
+ 0xDC79, 0, 0,0xDD04,0xDCF8,
+ /* plane 15, row 38 */
+ 1 | (94 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A57,0xD865,
+ 0xD85F,0xffff,0xD865,0xD865,0xffff,0xD84C,0xD866,0xD867,0xD867,0xD868,
+ 0xD868,0xD868,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,
+ 0x51A9,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,0xD842,0xD842,0xD842,
+ 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,
+ 1, /* first low-surrogate */
+ 0xDD05,0xDEDA,0xDEDB,0xDEDC,0xDEDD,0xDEDE,0xDEDF,0xDEE0,0xDEE1,
+ 0xDCC5,0xDC9A,0xDC9B,0xDC9C,0xDDD8,0xDDD9,0xDDDA,0xDE6E, 0,0xDC6B,
+ 0xDD83, 0,0xDED6,0xDEBD, 0,0xDE2E,0xDEFC,0xDD53,0xDDB7,0xDE8C,
+ 0xDF8E,0xDEFF,0xDC76,0xDD06,0xDD7E,0xDF84,0xDF85,0xDF86,0xDF87,0xDF88,
+ 0xDFA7,0xDF89,0xDF8A,0xDF8B,0xDF8C,0xDF8D,0xDF8E,0xDF8F,0xDFA3,0xDF90,
+ 0xDF91,0xDF92,0xDF93,0xDFAC,0xDF94,0xDF95,0xDF96,0xDCAA,0xDCAB,0xDD9E,
+ 0,0xDE08,0xDE09,0xDE68,0xDE69,0xDE6A,0xDE9A,0xDFD9,0xDFDA,0xDFDB,
+ 0xDCA8,0xDD01,0xDD28,0xDD77,0xDDBD,0xDDBE,0xDF60,0xDEA0,0xDEA2,0xDF0F,
+ 0xDF85,0xDEFE,0xDEFF,0xDF00,0xDF01,0xDF16,0xDF02,0xDF03,0xDF04,0xDF05,
+ 0xDF06,0xDF07,0xDF08,0xDF22,0xDF09,
+ /* plane 15, row 39 */
+ 1 | (94 << 8), /* first, last */
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD844,0xD844,0xD844,0xD845,0xD844,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD840,0xffff,0xD846,0xD846,0xD87E,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xffff,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xffff,0xD848,0xD848,
+ 0xffff,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,
+ 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD849,
+ 0xD849,0xffff,0xD84A,0xD849,0xD84A,
+ 1, /* first low-surrogate */
+ 0xDF0A,0xDF0B,0xDF0C,0xDF14,0xDF29,0xDE6E,0xDF0D,0xDF0E,0xDF0F,
+ 0xDF10,0xDF11,0xDF12,0xDF13,0xDE1B,0xDE1C,0xDE1D,0xDC13,0xDFFF,0xDC00,
+ 0xDC01,0xDC02,0xDC03,0xDC04,0xDC0A,0xDC05,0xDC06,0xDC07,0xDC08,0xDD3A,
+ 0xDD73,0xDE6F,0xDE70,0xDE71,0xDC52, 0,0xDE9A,0xDC60,0xDC69,0xDC2B,
+ 0xDC24,0xDC2C,0xDC2D,0xDC2E,0xDC2F,0xDC30,0xDC31,0xDC32,0xDC33,0xDC34,
+ 0xDC35,0xDC45,0xDC36,0xDD92,0xDD93,0xDE88,0xDE89,0xDE8A,0xDE8B,0xDF3F,
+ 0,0xDCCA,0xDEF6,0xDEF7,0xDEF8,0xDEF9,0xDD2B, 0,0xDDA4,0xDDCE,
+ 0,0xDE9E,0xDE9F,0xDEA0,0xDEA1,0xDEA2,0xDEA3,0xDEA4,0xDEA5,0xDEA6,
+ 0xDC18,0xDD60,0xDD61,0xDD62,0xDD63,0xDD64,0xDFBD,0xDFBE,0xDC0B,0xDFBF,
+ 0xDFC0, 0,0xDC0C,0xDF8D,0xDC0D,
+ /* plane 15, row 40 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD849,0xD84A,0xffff,0xD849,0xD84A,
+ 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xffff,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,
+ 0x3BBC,0xD84D,0xD84D,0x3BA4,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xffff,0xD84E,0xD87E,
+ 0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,
+ 1, /* first low-surrogate */
+ 0xDC0E,0xDC5E,0xDC0F,0xDC10,0xDFC1,0xDC11, 0,0xDFC2,0xDDEA,
+ 0xDDEB,0xDCE3,0xDCE4,0xDCE5,0xDCE6,0xDCE7,0xDC92,0xDD4A, 0,0xDCE8,
+ 0xDCE9,0xDCEA,0xDD01,0xDCEB,0xDCEC,0xDCEF,0xDCED,0xDCEE,0xDCF0,0xDCF1,
+ 0xDCF2,0xDCF3,0xDCF4,0xDCF5,0xDCF6,0xDCF7,0xDCF8,0xDCF9,0xDCFE,0xDCFA,
+ 0xDCFB,0xDCFC,0xDE63,0xDE64,0xDE65,0xDE66,0xDE67,0xDE68,0xDE0B,0xDE0D,
+ 0,0xDE0E,0xDE0F, 0,0xDE14,0xDDD4,0xDDD5,0xDDD6,0xDDD7,0xDDD8,
+ 0xDDD9,0xDDDA,0xDDDB,0xDDDC,0xDDDD,0xDDDE,0xDDDF,0xDDE0,0xDDE1,0xDDE2,
+ 0xDDE3,0xDDE4,0xDDE5,0xDDE6,0xDDE7,0xDDE8,0xDDE9,0xDDEA,0xDDEB,0xDDEC,
+ 0xDEEC,0xDDED,0xDDEE,0xDDEF,0xDE00,0xDDF0,0xDD04, 0,0xDD05,0xDCF3,
+ 0xDEB5,0xDCF9,0xDFD6,0xDFD7,0xDFD8,
+ /* plane 15, row 41 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xffff,
+ 0xD84F,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,
+ 0xffff,0xD850,0xD850,0x7195,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0x3DE8,0xffff,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0x7198,0xD850,0xffff,0xD850,0xD850,0xD850,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x7478,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,
+ 1, /* first low-surrogate */
+ 0xDFD9,0xDEA9,0xDF00,0xDF01,0xDF02,0xDF03,0xDF04,0xDF05,0xDF06,
+ 0xDF3F,0xDF07,0xDF08,0xDF09,0xDF0A,0xDEB6,0xDF0B,0xDF0C, 0, 0,
+ 0xDF0D, 0,0xDF0E,0xDF0F,0xDF10,0xDF11,0xDF12,0xDF35,0xDF13,0xDF14,
+ 0xDEAA, 0,0xDFC1,0xDF15,0xDF16,0xDF17,0xDF1E,0xDF1F,0xDF20,0xDF21,
+ 0,0xDF22,0xDF23, 0,0xDF24,0xDF25,0xDF26,0xDF27,0xDF28,0xDF29,
+ 0xDF2A,0xDF2B,0xDF07,0xDF2C,0xDF2D,0xDF2E, 0, 0,0xDF2F,0xDF30,
+ 0xDF48,0xDF31,0xDF32, 0,0xDF33, 0,0xDF34,0xDF35,0xDF36,0xDD59,
+ 0xDD91,0xDDE7,0xDEB8,0xDEB9,0xDEBA,0xDEBB,0xDEC8,0xDC4D,0xDC89,0xDC50,
+ 0xDC28,0xDDFB,0xDDFC,0xDDFD,0xDDFE,0xDDFF, 0,0xDE00,0xDE01,0xDE02,
+ 0xDDE4,0xDDE5,0xDE03,0xDE04,0xDE05,
+ /* plane 15, row 42 */
+ 1 | (94 << 8), /* first, last */
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD853,0xD853,0xD853,0xD87E,0xD853,0xD853,0xD853,0xD853,
+ 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0x78B9,0xD855,0xD855,0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xffff,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xD848,0xD855,0xD855,0xD855,0xD855,0xffff,0xD855,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x7A33,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD87E,0xD857,0xD857,0xD857,
+ 1, /* first low-surrogate */
+ 0xDE06,0xDE07,0xDE13,0xDE08,0xDE09,0xDDE6,0xDE0A,0xDE0B,0xDE0C,
+ 0xDF0B,0xDFF4,0xDC0A,0xDCB1,0xDE1D,0xDD3B,0xDF8B,0xDF8C,0xDF8F,0xDF8D,
+ 0xDF8E,0xDC06,0xDC86,0xDE22,0xDE23,0xDE24,0xDE25,0xDE26,0xDE27,0xDE28,
+ 0xDFF1, 0,0xDD23,0xDD12, 0,0xDD13,0xDD14,0xDD15,0xDD16,0xDD17,
+ 0xDD18,0xDD19,0xDD4B,0xDD1A,0xDD1B,0xDD1C, 0,0xDD1D,0xDD1E,0xDD1F,
+ 0xDD20,0xDECA,0xDEAC,0xDECB,0xDECC,0xDECD,0xDECE, 0,0xDECF,0xDC10,
+ 0xDC11,0xDC12,0xDC13,0xDC14,0xDC0F,0xDC15,0xDC16,0xDC17, 0,0xDC18,
+ 0xDDC6,0xDE9F,0xDEA0,0xDEA4,0xDEA1,0xDFB5,0xDFB6,0xDFB7,0xDFB8,0xDFB9,
+ 0xDFBA,0xDFD0,0xDFC6,0xDFBB,0xDFBC,0xDFBD,0xDFBE,0xDFBF,0xDFC0,0xDFC1,
+ 0xDFC2,0xDD60,0xDEA7,0xDEA8,0xDEA9,
+ /* plane 15, row 43 */
+ 1 | (94 << 8), /* first, last */
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x7CC0,0xD857,0xD857,
+ 0xD857,0x7CC1,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xffff,0xD858,0xD858,0xD858,0xD858,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xffff,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xffff,0xD859,
+ 0xD859,0xD859,0xffff,0xD859,0xD87E,0xD87E,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 1, /* first low-surrogate */
+ 0xDEAA,0xDEAB,0xDEAC,0xDEBC,0xDEAD,0xDEAE, 0,0xDEAF,0xDEB0,
+ 0xDEB1, 0,0xDEB4,0xDEB2,0xDC66,0xDC67,0xDC68,0xDC69,0xDC6A,0xDC6B,
+ 0xDC6C,0xDC6D,0xDC6E,0xDC6F, 0,0xDE3E,0xDE3F,0xDE40,0xDEE8,0xDC52,
+ 0xDC53,0xDC54,0xDC55,0xDD91,0xDD92,0xDD93,0xDD94,0xDD95,0xDD96,0xDD97,
+ 0xDD98, 0,0xDD99,0xDD9A,0xDD9B,0xDFB7,0xDFB8,0xDFB9, 0,0xDFBA,
+ 0xDFBB,0xDFBD, 0,0xDFBC,0xDD88,0xDD87,0xDCEB,0xDCEC,0xDD16,0xDD44,
+ 0xDDE3,0xDE58,0xDE53,0xDE54,0xDEE0,0xDDB1,0xDDB2,0xDDB3,0xDDEA, 0,
+ 0xDDB4,0xDDF0,0xDDB5,0xDDB6,0xDDB7,0xDDB8,0xDDB9,0xDDBA,0xDDBB,0xDDBC,
+ 0xDDBD,0xDDBE,0xDDBF,0xDDC0,0xDDC1,0xDDC2,0xDDC3, 0,0xDDC4,0xDDC5,
+ 0xDDC6,0xDDFC,0xDDC7,0xDDC8,0xDDC9,
+ /* plane 15, row 44 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x8744,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0x8AAD,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,0xffff,
+ 0xD85F,0xD85F,0xffff,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xffff,0xD860,0xffff,0xD861,
+ 0xD861,0x4886,0xD862,0xD861,0xD861,0x9064,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,
+ 1, /* first low-surrogate */
+ 0xDDCA,0xDDCB,0xDDCC,0xDE84,0xDDCD,0xDDCE,0xDDCF,0xDDD0,0xDDD1,
+ 0xDDD2,0xDDCA,0xDDCB,0xDF36,0xDF37,0xDF9F,0xDF38,0xDF39,0xDF3A, 0,
+ 0xDEBE,0xDEF0,0xDEBF,0xDEC0,0xDFF7,0xDFF8,0xDFFA,0xDC43,0xDC44,0xDE0F,
+ 0xDE10,0xDE11,0xDE12, 0,0xDE13,0xDE14,0xDE15,0xDE16, 0, 0,
+ 0xDCD3,0xDCD7, 0,0xDDB0,0xDD98,0xDD90,0xDD91,0xDD92,0xDD97,0xDD93,
+ 0xDE64,0xDF01,0xDF02,0xDF03,0xDF04,0xDF05,0xDF06,0xDF07,0xDC5A,0xDC5B,
+ 0xDE4E,0xDE4F,0xDE50,0xDF19,0xDF1A,0xDF1B, 0,0xDF1C, 0,0xDC19,
+ 0xDC1A, 0,0xDD8A,0xDD6E,0xDD6F, 0,0xDD70,0xDD71,0xDD72,0xDD73,
+ 0xDD74,0xDD75,0xDD76,0xDC3A,0xDC3B,0xDC3C,0xDC5A,0xDC3D,0xDC42,0xDD8B,
+ 0xDDA0,0xDD8C,0xDD8D,0xDD8E,0xDDAB,
+ /* plane 15, row 45 */
+ 1 | (94 << 8), /* first, last */
+ 0xD862,0x9277,0xD862,0xD862,0xD862,0xD862,0x92AF,0xD862,0xD862,
+ 0xD862,0xD862,0xffff,0xffff,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD863,0xffff,0xD864,0xD864,0xffff,0xffff,0xD864,0xD864,0xD864,
+ 0xD865,0xD854,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xffff,0xD867,0xD867,0xD867,
+ 0xD868,0xD868,0xD868,0xD842,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xffff,0xD840,0xD840,0xD840,0xD841,0xD841,0xffff,
+ 0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD840,0xD843,
+ 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,
+ 0xD843,0xD844,0xD845,0xD845,0xD845,
+ 1, /* first low-surrogate */
+ 0xDD8F, 0,0xDD90,0xDD91,0xDD92,0xDDAA, 0,0xDD93,0xDD94,
+ 0xDD9E,0xDDA8, 0, 0,0xDF00,0xDF01,0xDF02,0xDF03,0xDF04,0xDF05,
+ 0xDFC4,0xDFC5, 0,0xDCAE,0xDCB2, 0, 0,0xDDF7,0xDE13,0xDF9E,
+ 0xDC85,0xDF80,0xDCC8,0xDC41,0xDC81,0xDC82,0xDC83,0xDC84,0xDEC4,0xDEC5,
+ 0xDEC6,0xDC95,0xDC96,0xDC97,0xDD58,0xDD59, 0,0xDFA9,0xDFAA,0xDFAB,
+ 0xDE8E,0xDF03,0xDFB3,0xDF82,0xDC53,0xDD83,0xDD84,0xDD85,0xDFCC,0xDFCD,
+ 0xDFCE,0xDFCF,0xDFD0, 0,0xDFD1,0xDFD2,0xDFDA,0xDCB3,0xDCB4, 0,
+ 0xDE13,0xDE0E,0xDE6B,0xDD03,0xDD61,0xDDC1,0xDDC2,0xDEB5,0xDD40,0xDF98,
+ 0xDF99,0xDF9A,0xDF9B,0xDF9C,0xDF9D,0xDF9E,0xDF9F,0xDFEE,0xDFA0,0xDFA1,
+ 0xDF86,0xDE25,0xDC34,0xDC35,0xDC51,
+ /* plane 15, row 46 */
+ 1 | (94 << 8), /* first, last */
+ 0xD845,0xD850,0xD845,0xD845,0x366D,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0x366E,0xD845,0xD84C,0xD845,0xD845,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,0xD846,
+ 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xffff,0xD847,
+ 0xD847,0xD848,0x5E64,0xD848,0xD848,0xffff,0xD848,0xD848,0xD849,0xD849,
+ 0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xffff,
+ 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,
+ 1, /* first low-surrogate */
+ 0xDC2D,0xDF62,0xDC54,0xDC52, 0,0xDC36,0xDC37,0xDC38,0xDC39,
+ 0xDC3A,0xDC3B,0xDC68,0xDC3C, 0,0xDD77,0xDE96,0xDE7E,0xDE7F,0xDC69,
+ 0xDC6A,0xDC6B,0xDC6C,0xDC6D,0xDC6E,0xDC6F,0xDC5D,0xDC70,0xDC85,0xDC71,
+ 0xDC72,0xDC73,0xDC74,0xDC75,0xDC76,0xDC84,0xDC77,0xDC83,0xDD9A,0xDEA7,
+ 0xDEA8,0xDEA9,0xDEAA,0xDEAB,0xDEAC,0xDEB7,0xDEAD,0xDEAE, 0,0xDF45,
+ 0xDCD3,0xDCD4,0xDCD5,0xDCD6,0xDCD7,0xDF26,0xDF27,0xDF28, 0,0xDF29,
+ 0xDF2A,0xDC05, 0,0xDDD0,0xDEB7, 0,0xDEB8,0xDEB9,0xDC22,0xDC23,
+ 0xDD73,0xDD74,0xDC8F,0xDC12,0xDC13,0xDC14,0xDC15,0xDC16,0xDC17,0xDC18,
+ 0xDC61,0xDC66,0xDC67,0xDC19,0xDC68,0xDC1A,0xDC69,0xDE04,0xDE05, 0,
+ 0xDE06,0xDDFD,0xDD50,0xDD51,0xDD52,
+ /* plane 15, row 47 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xffff,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xffff,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0x6A2B,0xD84D,0xD84D,0xffff,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xD850,0xD84F,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x6F46,
+ 0xffff,0xD84F,0xD84F,0x6F9A,0xD84F,
+ 1, /* first low-surrogate */
+ 0xDD53,0xDD54,0xDD55,0xDD63,0xDCC4,0xDD56,0xDD57,0xDD58,0xDD59,
+ 0xDD5A,0xDD5B, 0,0xDD5C,0xDD5D,0xDD5E,0xDD5F,0xDFD7, 0,0xDC60,
+ 0xDC61,0xDD17,0xDD39,0xDE8F,0xDEC8,0xDE90,0xDE91,0xDF98,0xDF99,0xDE44,
+ 0xDE45,0xDE46,0xDE59,0xDEEE, 0,0xDE47,0xDE48, 0,0xDE49,0xDE4A,
+ 0xDE4B,0xDE4C,0xDE4D,0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE52,0xDE53,0xDE54,
+ 0xDE55,0xDE56,0xDD15,0xDD9A,0xDE58,0xDEFC,0xDEFD,0xDF86,0xDF87,0xDF88,
+ 0xDF89,0xDF8A,0xDF8B,0xDF8C, 0,0xDC1F,0xDF8D,0xDF8E,0xDF8F,0xDF90,
+ 0xDF91,0xDF92,0xDF93,0xDD11,0xDF94,0xDF95,0xDECA,0xDF18, 0,0xDF96,
+ 0xDF97,0xDF98,0xDF99,0xDF9A,0xDF9B,0xDF9C,0xDF9D,0xDF9E,0xDF9F, 0,
+ 0,0xDFA0,0xDFA1, 0,0xDFB7,
+ /* plane 15, row 48 */
+ 2 | (94 << 8), /* first, last */
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD87E,
+ 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3F53,0xD853,0xD853,0xD853,
+ 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,
+ 0xD854,0xD854,0xffff,0xD87E,0xffff,0xD854,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xffff,0xD855,0xD855,0xD855,0xD855,0xD856,0xffff,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xffff,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,
+ 2, /* first low-surrogate */
+ 0xDF96,0xDF68,0xDF69,0xDF8C,0xDF6A,0xDF6B,0xDF6C,0xDF6D,
+ 0xDF6E,0xDF6F,0xDF7F,0xDF84,0xDF70,0xDF71,0xDF85,0xDF72,0xDF73,0xDF74,
+ 0xDF75,0xDF76, 0,0xDF77,0xDF78,0xDF79,0xDF7A,0xDF7B,0xDF7C,0xDD1E,
+ 0xDD94,0xDED5,0xDC29,0xDE2B,0xDE2C,0xDE2D,0xDE2E,0xDE2F,0xDE30,0xDE3E,
+ 0xDE31,0xDE32,0xDE33,0xDE34,0xDE35,0xDF11, 0,0xDCC0,0xDE42,0xDE43,
+ 0xDE44,0xDE45,0xDE46,0xDC8C,0xDC8D,0xDC8E,0xDC8F,0xDC90,0xDC91,0xDE63,
+ 0xDE64,0xDE65, 0,0xDD4A, 0,0xDFF6,0xDD36,0xDD37,0xDD2C,0xDD38,
+ 0xDD39, 0,0xDD3A,0xDEE3,0xDEE2,0xDEF5,0xDC47, 0,0xDC48,0xDC49,
+ 0xDC4A,0xDC4B,0xDC4C,0xDEA8,0xDEA9,0xDEAA, 0,0xDC0B,0xDC06,0xDC73,
+ 0xDC0C,0xDC0D,0xDC0E,0xDC0F,0xDC10,
+ /* plane 15, row 49 */
+ 2 | (94 << 8), /* first, last */
+ 0xD857,0xD87E,0xD857,0xD857,0xD857,0xD857,0xffff,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xffff,0xD857,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xffff,0xD87E,0xD858,0xD858,0xD858,0xffff,0xffff,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0x443D,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0x4526,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0x4527,0xffff,0xD85B,0x4528,0xD85B,0xffff,0xD85C,
+ 0xD85C,0xD85C,0xffff,0xD87E,0xD85C,
+ 2, /* first low-surrogate */
+ 0xDC11,0xDD62,0xDC12,0xDC14,0xDC15,0xDC16, 0,0xDC13,
+ 0xDC17,0xDED9,0xDEDA,0xDEDB, 0,0xDEDC,0xDCA6,0xDCA7,0xDCA8,0xDCA9,
+ 0xDCAA,0xDCAB, 0,0xDD6D,0xDCAC,0xDCAD,0xDCAE, 0, 0,0xDCAF,
+ 0xDCB0,0xDCB1,0xDE44,0xDE45,0xDEF7,0xDEF8,0xDC6B,0xDC6C,0xDC61,0xDD12,
+ 0xDDAF,0xDDB0,0xDDB1,0xDDB2,0xDDB3,0xDDB4,0xDDB5,0xDDB6,0xDE22,0xDFEA,
+ 0xDFEB,0xDFEC,0xDFED, 0,0xDCED,0xDD1B,0xDD47,0xDDE8,0xDED0,0xDEE7,
+ 0xDEE8,0xDEE9,0xDE4E,0xDE4F,0xDE50,0xDE72,0xDE51,0xDE52,0xDDA7, 0,
+ 0xDE53,0xDE54,0xDE55,0xDE56,0xDE57,0xDE77,0xDE58,0xDE59,0xDE5A,0xDE5B,
+ 0xDE5C,0xDE6E,0xDE5D, 0, 0,0xDE5E, 0,0xDE5F, 0,0xDDD7,
+ 0xDF89,0xDF8A, 0,0xDDBE,0xDF8B,
+ /* plane 15, row 50 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0xD85C,0xD87E,0xD85C,0xffff,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85D,0xD85D,0xffff,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xffff,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xffff,
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xffff,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0x92F2,0xD862,0xD862,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,
+ 0xD863,0xD864,0xD864,0xD864,0xD864,
+ 1, /* first low-surrogate */
+ 0xDF8C,0xDF8D,0xDF8E,0xDDBC,0xDF8F, 0,0xDF9A,0xDF90,0xDF91,
+ 0xDF92,0xDF93,0xDF12,0xDEF1, 0,0xDFFE,0xDFFB,0xDC57,0xDE49,0xDE4A,
+ 0xDE4B,0xDE4C, 0,0xDE4D,0xDE59,0xDE4E,0xDE4F,0xDFF4,0xDC65,0xDDA6,
+ 0xDDA7,0xDDA8,0xDF22,0xDF23,0xDC8B,0xDC8C,0xDC8D,0xDC8E,0xDE58, 0,
+ 0xDE59,0xDF3B,0xDF3C,0xDF3D,0xDF3E,0xDC48,0xDD94,0xDD95,0xDD96,0xDD97,
+ 0xDD98,0xDF7D,0xDEFE,0xDF7E,0xDF7F, 0,0xDC5B,0xDC5C,0xDDE4,0xDDC1,
+ 0xDDFD,0xDDC2,0xDDD6,0xDDC3,0xDDC4, 0,0xDDDC,0xDDC5,0xDDC6,0xDDC7,
+ 0xDDE1,0xDDC8,0xDDC9,0xDDCA,0xDDCB, 0,0xDDCC,0xDDCD,0xDD35,0xDD36,
+ 0xDD47,0xDD37,0xDF1B,0xDF1C,0xDF1D,0xDF1E,0xDF1F,0xDF20,0xDF7B,0xDF7A,
+ 0xDFFE,0xDCC6,0xDCC7,0xDCC8,0xDCC9,
+ /* plane 15, row 51 */
+ 1 | (94 << 8), /* first, last */
+ 0xD864,0xffff,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD867,0xD867,0xD867,0xD867,0xffff,0xD867,0xD867,0xffff,0xD867,0xD867,
+ 0x9B79,0xffff,0xD867,0xffff,0xD868,0xD841,0xD840,0xD840,0xD840,0xD840,
+ 0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,
+ 0xD843,0x567A,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xffff,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,
+ 0xffff,0xffff,0xffff,0xD844,0xD845,0xffff,0xD845,0xD845,0xD845,0xD845,
+ 0xD845,0xD846,0xD846,0xD846,0xD846,
+ 1, /* first low-surrogate */
+ 0xDCCA, 0,0xDCA0,0xDCA1,0xDDCC,0xDDCD,0xDEF1,0xDED7,0xDC42,
+ 0xDC46,0xDCA3,0xDCA5,0xDCA6,0xDECB,0xDECC,0xDF26,0xDF27,0xDF28,0xDF29,
+ 0xDCAE,0xDCAF,0xDCB0,0xDD73, 0,0xDD7C,0xDD74, 0,0xDF80,0xDD75,
+ 0, 0,0xDFCF, 0,0xDF8F,0xDE70,0xDC85,0xDF97,0xDFF6,0xDFF7,
+ 0xDFF8,0xDFFA,0xDFFB,0xDCBA,0xDCBB,0xDCBC,0xDCBD,0xDD34,0xDD35,0xDDA2,
+ 0xDE14,0xDE11,0xDE6E,0xDE6F,0xDC08,0xDCB8,0xDE09,0xDEBD,0xDEBE,0xDF88,
+ 0xDFFE, 0,0xDFFF,0xDC00,0xDC01,0xDC02,0xDC03,0xDC04,0xDC05,0xDC06,
+ 0,0xDC07,0xDC08,0xDC09,0xDC0A,0xDC0B,0xDC0C,0xDC0D,0xDC0E,0xDC0F,
+ 0, 0, 0,0xDE2C,0xDC6B, 0,0xDC6C,0xDC87,0xDC6D,0xDD78,
+ 0xDE8B,0xDCA4,0xDCA5,0xDCA6,0xDCA7,
+ /* plane 15, row 52 */
+ 1 | (94 << 8), /* first, last */
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,
+ 0x372C,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD85F,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,
+ 0xffff,0xD848,0xD848,0xD848,0xD848,0x5F5C,0xD849,0xD849,0xD841,0xD84A,
+ 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xffff,0xD84A,
+ 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0x65D9,0xD84C,
+ 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xffff,0xD84C,0xD84C,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0x6A72,0xD84D,0xD84D,0xD84D,
+ 1, /* first low-surrogate */
+ 0xDCBE,0xDCA8,0xDCA9,0xDCAA,0xDC8D,0xDCAB,0xDCAC,0xDCBF, 0,
+ 0,0xDCAD,0xDCAE,0xDDA4,0xDDA5,0xDEC7,0xDEC8,0xDEC9,0xDDBC,0xDECA,
+ 0xDECB,0xDECC,0xDECD,0xDECE,0xDC19,0xDCE6,0xDF4C,0xDF4D,0xDF4E,0xDC06,
+ 0,0xDECD,0xDECE,0xDECF,0xDED0, 0,0xDD81,0xDD82,0xDD33,0xDC6A,
+ 0xDC6B,0xDCB2,0xDC6C,0xDC6D,0xDCCC,0xDCAE,0xDCB3,0xDC91, 0,0xDC6E,
+ 0xDCB4,0xDC6F,0xDDC9,0xDDA7,0xDDA8,0xDDA9,0xDDAA,0xDDAB,0xDDAC,0xDDAD,
+ 0xDDAE,0xDDAF,0xDDB0,0xDD60,0xDDB1,0xDEE1,0xDFE3,0xDFF6, 0,0xDEAF,
+ 0xDEB0,0xDEB1,0xDEBA,0xDEB2,0xDEB3,0xDF4C, 0,0xDFA0,0xDFA1,0xDEB0,
+ 0xDEB1,0xDEB2,0xDEB3,0xDEB4,0xDCEB,0xDEB5,0xDEB6,0xDEB7,0xDEB8,0xDEB9,
+ 0xDEBA, 0,0xDEBB,0xDEBC,0xDEBD,
+ /* plane 15, row 53 */
+ 1 | (93 << 8), /* first, last */
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x6A78,
+ 0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x6B5A,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD84F,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD850,0xD87E,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD864,0xD850,
+ 0xD850,0xD850,0xD850,0xD851,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD851,0xD844,0xD852,0xD841,0xD852,0xD852,0xD852,
+ 0x3EFB,0xD852,0xD852,0xD852,
+ 1, /* first low-surrogate */
+ 0xDEBE,0xDEBF,0xDEDF,0xDEC0,0xDEC1,0xDEC2,0xDEC3,0xDEC4, 0,
+ 0,0xDEC5,0xDEC6,0xDEC7,0xDEC8,0xDEC9,0xDECA,0xDF3C,0xDECB,0xDECC,
+ 0xDECD,0xDECE,0xDECF,0xDED0,0xDED1, 0,0xDD1D,0xDD1E,0xDE64,0xDE65,
+ 0xDEC5,0xDEC6,0xDEC7,0xDEFF,0xDFFF,0xDC00,0xDC01,0xDC02,0xDFF5,0xDC5C,
+ 0xDFF6,0xDFF7,0xDFB0,0xDFF8,0xDFF9,0xDC5D,0xDC50,0xDFFA,0xDFFB,0xDFA2,
+ 0xDFFC,0xDFFD,0xDFFE,0xDFFF,0xDD13,0xDC00,0xDD1F,0xDFC1,0xDFC2,0xDFC3,
+ 0xDFC4,0xDFC5,0xDFC6,0xDFC7,0xDFC8,0xDFC9,0xDFCA,0xDFCB,0xDCEF,0xDFD7,
+ 0xDFCC,0xDFCD,0xDFCE,0xDC22,0xDFCF,0xDFD0, 0,0xDFD1,0xDFD2,0xDFE9,
+ 0xDFD3,0xDFD4,0xDFD5,0xDD38,0xDC3B,0xDC7D,0xDD6F,0xDCA1,0xDE53,0xDE54,
+ 0,0xDE55,0xDE3C,0xDE56,
+ /* plane 15, row 54 */
+ 1 | (94 << 8), /* first, last */
+ 0xD852,0x3EFC,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xffff,0xffff,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD868,
+ 0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD87E,0xD854,
+ 0xffff,0xD854,0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD857,0xD857,0xffff,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,
+ 1, /* first low-surrogate */
+ 0xDE66, 0,0xDE57,0xDE58,0xDE59,0xDE5A,0xDE5B,0xDE67,0xDE5C,
+ 0, 0,0xDE6A,0xDE5D,0xDE3D,0xDE5E,0xDE65,0xDCE1,0xDCCD,0xDC11,
+ 0xDE6F,0xDE70,0xDC1A,0xDC9A,0xDC9B,0xDC9C,0xDC9E,0xDC9F,0xDD3F,0xDE8E,
+ 0,0xDFFD, 0,0xDD5E,0xDD5F,0xDD60,0xDD65,0xDD67,0xDD68,0xDD69,
+ 0,0xDD6A,0xDD8F,0xDD6B,0xDD6C,0xDD6D,0xDEF7,0xDEF8,0xDEF9,0xDEE4,
+ 0xDEFA,0xDCB1,0xDC75,0xDC76,0xDDFF,0xDE00,0xDE01,0xDE02,0xDE03,0xDEAE,
+ 0xDEAD,0xDC51,0xDC52, 0,0xDC53,0xDC54,0xDC55,0xDC56,0xDC57,0xDC58,
+ 0xDC59,0xDC5A,0xDC5B,0xDC5C,0xDC5D,0xDC5E,0xDC5F,0xDC60,0xDC61,0xDC62,
+ 0xDC63,0xDC64,0xDC4C,0xDC66,0xDEF1,0xDEF2,0xDCF2,0xDCF3,0xDCF4,0xDCF5,
+ 0xDCF6,0xDCF7,0xDCF8,0xDCF9,0xDCFA,
+ /* plane 15, row 55 */
+ 1 | (94 << 8), /* first, last */
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD87E,0xD87E,0xD859,
+ 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xffff,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0xD87E,
+ 0xffff,0xD85B,0xD85B,0xffff,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xffff,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 1, /* first low-surrogate */
+ 0xDE4C,0xDE4B,0xDF1B,0xDFCE,0xDFB3,0xDC7F,0xDD79,0xDD7C,0xDD1A,
+ 0xDDC4,0xDDC5,0xDDC6,0xDDC7,0xDDC8,0xDDC9, 0,0xDC19,0xDC1C,0xDC1A,
+ 0xDD4C,0xDD8E,0xDE7E,0xDEEB,0xDEEC,0xDEED,0xDEEE,0xDEEF,0xDEF0,0xDEF1,
+ 0xDED8,0xDED9,0xDEDA,0xDEDB,0xDEF2,0xDEF3,0xDEF4,0xDF07, 0,0xDDAC,
+ 0,0xDEF5,0xDF15, 0,0xDEF6,0xDEF7,0xDEF8,0xDEF9,0xDEFA,0xDEFB,
+ 0xDEFC,0xDEFD,0xDEFE,0xDFA7,0xDEFF,0xDF00,0xDF01,0xDF02,0xDF03,0xDF04,
+ 0xDF05,0xDDE9,0xDDEA,0xDDEB,0xDFDE,0xDFDF, 0,0xDFE0,0xDFE1,0xDFE2,
+ 0xDFE3,0xDF3E,0xDF3F,0xDF40,0xDF41,0xDC71,0xDC72,0xDC73,0xDE88,0xDE89,
+ 0xDE8A,0xDE8B,0xDE8C,0xDE8D,0xDE8E,0xDE8F,0xDE90,0xDE91,0xDE92, 0,
+ 0xDCF1,0xDDBE,0xDDBF,0xDDC0,0xDDC1,
+ /* plane 15, row 56 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xffff,0xffff,0xD860,0xD860,0x8EBE,
+ 0xD860,0xffff,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,
+ 0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0x933B,0xD862,0xD862,0xD862,0xFA28,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0x9340,0xD862,0xD862,0xD862,0x933A,0xD862,0xffff,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862,0xD862,0xD863,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,
+ 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD87E,0xD865,
+ 0xD865,0xffff,0xD865,0xD865,0xD865,
+ 1, /* first low-surrogate */
+ 0xDDC2,0xDDC3,0xDE6E,0xDF37,0xDF57,0xDF38,0xDF39,0xDF3A,0xDF3B,
+ 0xDF3C,0xDF3D,0xDF3E,0xDF27,0xDF3F, 0, 0,0xDCC0,0xDCC1, 0,
+ 0xDE67, 0,0xDE68,0xDF58,0xDF65,0xDF59,0xDF5A,0xDC24,0xDDCD,0xDDCE,
+ 0xDDCF,0xDDD2,0xDF9F,0xDF22,0xDC7D,0xDC7E,0xDDFF,0xDE25,0xDE00,0xDE01,
+ 0,0xDE02,0xDE03,0xDE04, 0,0xDE05,0xDE06,0xDE07,0xDE16,0xDE08,
+ 0xDE17,0xDE09,0xDE0A, 0,0xDE0B,0xDE0C,0xDE29, 0,0xDE0D, 0,
+ 0xDE0E,0xDE10,0xDE11,0xDE1D,0xDE12,0xDE13, 0,0xDE14,0xDE15,0xDC8D,
+ 0xDD54,0xDD55,0xDD56,0xDF33,0xDF34,0xDF35,0xDF36,0xDFFA,0xDCE3,0xDCE6,
+ 0xDCED,0xDCE7,0xDCE8,0xDCE9,0xDCEA,0xDCEB,0xDE27,0xDE20,0xDDF8,0xDC2A,
+ 0xDCC9, 0,0xDCCA,0xDCCB,0xDCD9,
+ /* plane 15, row 57 */
+ 1 | (94 << 8), /* first, last */
+ 0xD865,0xD865,0xD865,0xffff,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD87E,0xD866,
+ 0xD867,0xD867,0xD867,0xD867,0x9B96,0xD867,0xD867,0xffff,0xffff,0xD867,
+ 0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD840,
+ 0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD844,0xD844,0xD844,
+ 0xffff,0xffff,0xD844,0xD844,0xD844,0xD844,0xD844,0xffff,0xD845,0xD845,
+ 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,0xD847,
+ 0xD847,0xD847,0xD848,0xffff,0xD848,
+ 1, /* first low-surrogate */
+ 0xDCCC,0xDCCD,0xDCCE, 0,0xDDE1,0xDF1B,0xDF1C,0xDF1D,0xDF1E,
+ 0xDC47,0xDCD1,0xDCC9,0xDED0,0xDED1,0xDF3F,0xDF40,0xDF41,0xDE09,0xDF42,
+ 0xDCC4,0xDD9B,0xDD92,0xDD93, 0,0xDD94,0xDD95, 0, 0,0xDFF3,
+ 0xDFF4,0xDFF5,0xDFF6,0xDE60,0xDE9E,0xDEA0,0xDEA1,0xDF1C,0xDF9F,0xDC56,
+ 0xDC12,0xDC1F,0xDC15,0xDC16,0xDC17,0xDC0C,0xDC18,0xDCC2,0xDCC3,0xDCC4,
+ 0xDDA1,0xDE1B,0xDE1C,0xDE71,0xDC13,0xDF17,0xDF8F,0xDC5F,0xDC60,0xDCAC,
+ 0, 0,0xDC61,0xDC62,0xDC63,0xDC64,0xDC65, 0,0xDC99,0xDC9A,
+ 0xDC9B,0xDC9C,0xDC9D,0xDC9E,0xDC9F,0xDCA0,0xDCDA,0xDCDB,0xDCDC,0xDCDD,
+ 0xDCDE,0xDCDF,0xDED5,0xDED6,0xDED7,0xDED8,0xDEE0,0xDFB4, 0,0xDF6E,
+ 0xDF6F,0xDF70,0xDD63, 0,0xDED5,
+ /* plane 15, row 58 */
+ 1 | (94 << 8), /* first, last */
+ 0xD848,0xD848,0xD848,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0x39A0,
+ 0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD84B,0xD84B,0xD87E,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xD84C,0xD840,0xD84D,0xD84D,0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD858,0xD84E,0xD84F,0xD84F,
+ 0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD851,0xD851,0x71F5,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,
+ 1, /* first low-surrogate */
+ 0xDED6,0xDED7,0xDED8,0xDC30,0xDCB5,0xDCB6,0xDCC1,0xDCF7, 0,
+ 0xDCCB,0xDCE8, 0,0xDCE9,0xDCB7,0xDE15,0xDDE6,0xDDE7,0xDDE8,0xDDE9,
+ 0xDDEA,0xDDEB,0xDCCA,0xDC0B,0xDC0C,0xDC64,0xDED4,0xDED5,0xDED6,0xDED8,
+ 0xDFA5,0xDC5B,0xDF0F,0xDF10, 0,0xDF11,0xDF12,0xDF13,0xDF14,0xDF15,
+ 0xDF16,0xDF17,0xDF18,0xDF19,0xDF1A,0xDF2F,0xDF1B,0xDF1C,0xDF3F,0xDF1D,
+ 0xDF1E,0xDF2C,0xDF1F,0xDD24,0xDDA4,0xDDA5,0xDE51,0xDEFE,0xDC11,0xDC12,
+ 0xDC13,0xDC54,0xDC5E,0xDC21,0xDC3F,0xDC40,0xDC41,0xDC42,0xDC43,0xDC44,
+ 0xDC20,0xDC45, 0,0xDC46,0xDCB0,0xDC47,0xDC57,0xDC01,0xDCB1,0xDC5A,
+ 0xDC48,0xDC04,0xDC05, 0,0xDC4F,0xDC50,0xDC06,0xDC07,0xDC08,0xDC09,
+ 0xDC0A,0xDC0B,0xDC0C,0xDC0D,0xDC0E,
+ /* plane 15, row 59 */
+ 1 | (94 << 8), /* first, last */
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,
+ 0xD852,0xD852,0xD852,0x3F01,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD853,0xD853,0xffff,0xffff,0xD854,0xD854,0xffff,
+ 0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD855,0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,
+ 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x7A50,0xD856,0xD856,
+ 0xD856,0xD857,0xD857,0x7C14,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xffff,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,
+ 1, /* first low-surrogate */
+ 0xDC0F,0xDC10,0xDC11,0xDD33,0xDD34,0xDD35,0xDDFC,0xDDFD,0xDCB0,
+ 0xDCB1,0xDCB2,0xDCB3, 0,0xDE7B,0xDE7C,0xDE7D,0xDE7E,0xDE7F,0xDE80,
+ 0xDE81,0xDE82,0xDFF9,0xDCDA,0xDEA1, 0, 0,0xDCAD,0xDCAE, 0,
+ 0xDEC8,0xDEC9,0xDECA,0xDD82,0xDD83,0xDD84,0xDD85,0xDD86,0xDD87,0xDD88,
+ 0xDD89,0xDD8A, 0,0xDF07,0xDF08,0xDF01,0xDF09,0xDF02,0xDF0A,0xDF0B,
+ 0xDF0C,0xDCA7,0xDC98,0xDC99,0xDC9A,0xDC9B,0xDC9C, 0,0xDC9D,0xDE1A,
+ 0xDEB2,0xDCB0,0xDCB1, 0,0xDCB2,0xDCB3,0xDCB4,0xDCB5,0xDCB6,0xDCC0,
+ 0xDCB7,0xDCB8,0xDCB9,0xDCBA,0xDD1D,0xDF0C,0xDF0D,0xDF0E,0xDF35,0xDF0F,
+ 0xDF10,0xDF11,0xDF12,0xDD22,0xDD23,0xDD24, 0,0xDD25,0xDD26,0xDD27,
+ 0xDD28,0xDD29,0xDD2A,0xDD2B,0xDD2C,
+ /* plane 15, row 60 */
+ 1 | (94 << 8), /* first, last */
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,
+ 0xD859,0xD859,0xD859,0xD87E,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0xD85B,0xD85B,0xD85B,0xD85C,
+ 0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xffff,
+ 0xD85D,0xD85D,0xD85D,0xD849,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xffff,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0x481A,0xD860,
+ 0xD860,0xD860,0xD860,0xD860,0xD861,
+ 1, /* first low-surrogate */
+ 0xDD2D,0xDD2E,0xDE52,0xDE53,0xDF19,0xDFBF,0xDC8B,0xDC8C,0xDD23,
+ 0xDD24,0xDDF1,0xDDD8,0xDD7F,0xDC4E,0xDC4F,0xDC55,0xDC50,0xDC51,0xDC52,
+ 0xDC53,0xDC02,0xDC54,0xDCF1,0xDD24,0xDED1,0xDF7C,0xDF7D,0xDF7E,0xDF7F,
+ 0xDF80,0xDF9F,0xDF81,0xDF82,0xDF83,0xDF84,0xDF85,0xDF86,0xDF87,0xDF88,
+ 0xDF9B,0xDF89,0xDF8A,0xDF8B,0xDF8C, 0,0xDFA1,0xDF8D,0xDF8E,0xDDF3,
+ 0xDDF4,0xDDF5,0xDC24,0xDC25,0xDC26,0xDC27,0xDC28,0xDC29,0xDC2A, 0,
+ 0xDC2B,0xDDCD,0xDE01,0xDD8D,0xDF70,0xDC80,0xDC81,0xDEC0,0xDEC1,0xDEC2,
+ 0xDEC3,0xDEC4,0xDEC5,0xDEC6,0xDEC7,0xDEC8,0xDCFE, 0,0xDDD9,0xDDDC,
+ 0xDDDA,0xDE75,0xDF58,0xDF59,0xDF5A,0xDF5B,0xDF5C,0xDCEC, 0,0xDCF3,
+ 0xDE72,0xDE73,0xDF82,0xDF83,0xDC2A,
+ /* plane 15, row 61 */
+ 1 | (93 << 8), /* first, last */
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xffff,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0x9387,0xD862,0xD862,0xD862,0xD862,
+ 0xffff,0xD862,0xD862,0x9385,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0x493C,0xffff,0xD862,0xD862,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xD864,0xffff,0xD864,0xD864,0xD864,0xD864,0xD864,
+ 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x9BB1,0xD867,0xD867,0xD867,
+ 0xD868,0xD868,0xD868,0xD868,
+ 1, /* first low-surrogate */
+ 0xDC2B,0xDC2C,0xDC2D,0xDDF6,0xDE00,0xDDF7,0xDDF8,0xDDF9, 0,
+ 0xDC94,0xDC95,0xDC96,0xDD1B,0xDE86,0xDE4C,0xDE4D,0xDE83, 0,0xDE82,
+ 0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE81, 0,0xDE52,0xDE53,0xDE54,0xDE55,
+ 0,0xDE56,0xDE57, 0,0xDE58,0xDE5B,0xDE5C,0xDE5D,0xDE5E,0xDE5F,
+ 0xDE60,0xDE61,0xDE7C,0xDE62, 0, 0,0xDE63,0xDE64,0xDD73,0xDF45,
+ 0xDF46,0xDF47,0xDF4C,0xDC12, 0,0xDC13,0xDD39,0xDD03,0xDD0D,0xDE30,
+ 0xDED5,0xDFC0,0xDCF2,0xDCF3,0xDCF4,0xDCF5,0xDCF6,0xDCF7,0xDDFA,0xDDFB,
+ 0xDF45,0xDF46,0xDC49,0xDCE7,0xDCE8,0xDED8,0xDED9,0xDF55,0xDF56,0xDF57,
+ 0xDCDA,0xDCDB,0xDCDC,0xDDB8,0xDDB9,0xDDBA, 0,0xDDBB,0xDF89,0xDDBC,
+ 0xDC30,0xDC31,0xDC32,0xDC33,
+ /* plane 15, row 62 */
+ 1 | (94 << 8), /* first, last */
+ 0xD868,0xD868,0xD868,0x9D47,0xD868,0xD868,0xD868,0xD868,0xD868,
+ 0xD869,0xffff,0xD841,0xffff,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,
+ 0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD844,0xD844,
+ 0xD844,0xD844,0xD844,0xffff,0xffff,0xD844,0xD844,0xD844,0xD844,0xD845,
+ 0xD845,0xD845,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD848,0xD848,
+ 0xD848,0xD849,0xD849,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xD87E,0xD84B,0xD84B,0x3A6B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,
+ 0xffff,0xD84C,0xD84C,0xD84D,0xD84D,
+ 1, /* first low-surrogate */
+ 0xDC34,0xDC35,0xDC36, 0,0xDC37,0xDEB2,0xDF90,0xDF26,0xDFA2,
+ 0xDC38, 0,0xDC2E, 0,0xDC2F,0xDC30,0xDC2A,0xDC2B,0xDCC9,0xDD37,
+ 0xDE20,0xDE72,0xDC1F,0xDD65,0xDDCA,0xDEC0,0xDEC1,0xDEC2,0xDCB7,0xDCB8,
+ 0xDCB9,0xDCBA,0xDCBB, 0, 0,0xDCBC,0xDCBD,0xDCBE,0xDCF2,0xDCB5,
+ 0xDCB7,0xDCB8,0xDCDF,0xDCB9,0xDCD5,0xDCBA,0xDCBB,0xDD4A,0xDCF2,0xDCF3,
+ 0xDCF4,0xDCFA,0xDCF5,0xDD02,0xDEE2,0xDEE3,0xDF8E,0xDF8B,0xDEE4,0xDEEB,
+ 0xDEE5,0xDC35,0xDD93,0xDCEA,0xDCEB, 0,0xDCEC,0xDCED,0xDD17,0xDCEE,
+ 0xDCEF,0xDCF0,0xDE0E,0xDE0F,0xDE10,0xDE19,0xDE18,0xDE11,0xDE12,0xDE13,
+ 0xDCC7,0xDE14,0xDE15, 0,0xDE16,0xDC65,0xDEEA,0xDEEB,0xDEEC,0xDEED,
+ 0,0xDEEE,0xDFAC,0xDFC2,0xDF69,
+ /* plane 15, row 63 */
+ 1 | (94 << 8), /* first, last */
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3BF4,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84F,0xD84F,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,
+ 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD852,0xD852,0xD852,0xffff,0xD852,0xD852,0xD852,0xD852,0xD852,
+ 0xD852,0xD862,0xD852,0xD852,0xD852,0xD853,0xD854,0xD854,0xD854,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,
+ 0xD856,0xD856,0xD856,0xD846,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,
+ 1, /* first low-surrogate */
+ 0xDF81,0xDF6A,0xDF6B,0xDF6C,0xDF6D,0xDF6E,0xDF6F,0xDF70, 0,
+ 0xDF71,0xDF72,0xDF73,0xDF8C,0xDF74,0xDF75,0xDF76,0xDC24,0xDC2A,0xDC8E,
+ 0xDCAF,0xDC8F,0xDC90,0xDC91, 0,0xDC92,0xDC93,0xDC94,0xDC95,0xDC96,
+ 0xDC97,0xDC98,0xDC99,0xDC9A,0xDC9B,0xDC9C,0xDC39,0xDC3B,0xDC3A,0xDC3C,
+ 0xDC3D,0xDC3E,0xDC3F,0xDC70,0xDC40,0xDC41,0xDCC0,0xDCC1,0xDEA4,0xDE97,
+ 0xDEA5,0xDE98,0xDE99,0xDE9A, 0,0xDE9B,0xDEA6,0xDE9C,0xDE9D,0xDE9E,
+ 0xDE9F,0xDECE,0xDEC8,0xDEA0,0xDF19,0xDC0D,0xDCBF,0xDEE9,0xDEEA,0xDDA2,
+ 0xDDA3,0xDDA4,0xDDA5,0xDDA6,0xDF15,0xDF17,0xDCBF,0xDCC0,0xDCC1,0xDCC2,
+ 0xDCC3,0xDCC4,0xDCC5,0xDD0D,0xDE23,0xDEBE,0xDD03,0xDD04,0xDD05,0xDD06,
+ 0xDD07,0xDD08,0xDD09,0xDD0A,0xDD0B,
+ /* plane 15, row 64 */
+ 1 | (94 << 8), /* first, last */
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xffff,0xD857,0xD857,0xD857,
+ 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,
+ 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,
+ 0xffff,0xffff,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0x455C,0xD85B,0xD85B,0xD85B,
+ 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,
+ 0xD85C,0xD87E,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xffff,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,
+ 0xD85E,0xD85E,0xD85E,0xffff,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0x4787,0xD85F,0xD85F,0xD85F,0xD860,
+ 1, /* first low-surrogate */
+ 0xDD0C,0xDD20,0xDD0D,0xDD0E,0xDD0F, 0,0xDF26,0xDF27,0xDF28,
+ 0xDD5D,0xDD5E,0xDD5F,0xDD60,0xDD61,0xDD62,0xDD63,0xDD64,0xDD65,0xDE57,
+ 0xDFCF,0xDFD0,0xDC99,0xDC9A,0xDDEA,0xDDEB,0xDDEC,0xDC7E,0xDC7F,0xDC80,
+ 0, 0,0xDC81,0xDC82,0xDCF3,0xDD25,0xDD9F,0xDDA0,0xDDF3,0xDE00,
+ 0xDFEB,0xDFEC,0xDFED,0xDFEE,0xDFEF, 0, 0,0xDFF0,0xDFF1,0xDFF2,
+ 0xDFF3,0xDFF4,0xDFF5,0xDFF9,0xDFFA,0xDFFB,0xDFFC,0xDFFD,0xDFFE,0xDFFF,
+ 0xDC00,0xDDAE,0xDC01,0xDC02,0xDE03,0xDC86,0xDC79, 0,0xDC7A,0xDC7B,
+ 0xDC7C,0xDC84,0xDC7D,0xDC7E,0xDC7F,0xDF86,0xDF87,0xDC00,0xDC01,0xDC88,
+ 0xDC89,0xDC8A,0xDEF5, 0,0xDF25,0xDEF6,0xDDEB,0xDDEC,0xDDED,0xDDEE,
+ 0,0xDDEF,0xDDF0,0xDF6C,0xDD21,
+ /* plane 15, row 65 */
+ 1 | (94 << 8), /* first, last */
+ 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0x93B9,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862,0xD862,
+ 0xD862,0xffff,0xD862,0xD862,0xD862,0x93BF,0xD862,0xD862,0xD862,0xD863,
+ 0xD863,0xD863,0xD87E,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,
+ 0xffff,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,
+ 0xD866,0xD866,0xD866,0xffff,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,
+ 0xffff,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,
+ 0xD867,0xD867,0x9BCF,0xD867,0xD868,0xD868,0xD851,0x9D64,0xD868,0xD868,
+ 0xD868,0xD868,0x9EBF,0xD869,0xD841,
+ 1, /* first low-surrogate */
+ 0xDD22,0xDD23,0xDD24,0xDD25,0xDD26,0xDE7B,0xDE7C,0xDF91,0xDF92,
+ 0xDF93,0xDE0E,0xDE0F,0xDE10,0xDCB3,0xDD36,0xDEC6,0xDEA1,0xDEA2, 0,
+ 0xDEA3,0xDECC,0xDEA4,0xDEA5,0xDEA6,0xDECB,0xDEA7, 0,0xDEA8,0xDEA9,
+ 0xDEAA, 0,0xDEAB,0xDEAC,0xDEAD, 0,0xDEAE,0xDEAF,0xDEB0,0xDD8C,
+ 0xDD8D,0xDD8E,0xDDF1,0xDD92,0xDD8F,0xDF52,0xDF53,0xDF54,0xDF55,0xDD29,
+ 0,0xDEF3,0xDEF4,0xDD0D,0xDD0E,0xDD0F,0xDD10,0xDE14,0xDF71,0xDF72,
+ 0xDD0F,0xDD04,0xDD06, 0,0xDD07,0xDEDC,0xDEDD,0xDF6D,0xDF79,0xDF6E,
+ 0,0xDCEC,0xDDDD,0xDDDE,0xDDDF,0xDDE0,0xDDE1,0xDDE2,0xDDE3,0xDDE4,
+ 0xDE3A,0xDDE5, 0,0xDDE6,0xDC6B,0xDC6C,0xDC4E, 0,0xDEBD,0xDEBE,
+ 0xDEBF,0xDF34, 0,0xDD12,0xDC40,
+ /* plane 15, row 66 */
+ 1 | (94 << 8), /* first, last */
+ 0xD841,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,
+ 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD848,
+ 0xD848,0xD848,0xD848,0xffff,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,
+ 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,
+ 0xffff,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xffff,0xD84D,0xffff,0xffff,
+ 0xD84D,0x3C07,0xD84D,0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD850,0xD850,
+ 0xD850,0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,
+ 0xD850,0xD850,0xffff,0xffff,0xD851,0xD851,0xD851,0xD851,0x3F05,0xD852,
+ 0xD852,0x3F06,0xD852,0xD852,0xD852,
+ 1, /* first low-surrogate */
+ 0xDC41,0xDD02,0xDD03,0xDD04,0xDD05,0xDD06,0xDCD7,0xDCCC,0xDE98,
+ 0xDD06,0xDD07,0xDDAF,0xDDB0,0xDEEA,0xDEF2,0xDFA2,0xDFA3,0xDFA4,0xDD76,
+ 0xDEF5,0xDEF6,0xDEF7, 0,0xDD3B,0xDD25,0xDD3A,0xDD3C,0xDD3D,0xDD3E,
+ 0xDE37,0xDE38,0xDE39,0xDE3A,0xDE3B,0xDE3C,0xDE3D,0xDE3E,0xDE3F,0xDE4B,
+ 0,0xDE40,0xDC22,0xDC67,0xDCD3,0xDEFA, 0,0xDFBC, 0, 0,
+ 0xDFA5, 0,0xDFB6, 0,0xDFA6,0xDFBB,0xDFA7,0xDFA8,0xDFA9,0xDFAA,
+ 0xDFAB,0xDFAC,0xDFBF,0xDFAD,0xDFAE,0xDFAF,0xDD2E,0xDF00,0xDC9D,0xDC9E,
+ 0xDCCB,0xDCCC,0xDCCD,0xDCCE,0xDCCF, 0,0xDC9F,0xDCD0,0xDCD1,0xDCD2,
+ 0xDCD3,0xDCD4, 0, 0,0xDC5D,0xDC5E,0xDC5F,0xDC60, 0,0xDEBA,
+ 0xDEBC, 0,0xDEB5,0xDEBD,0xDEB6,
+ /* plane 15, row 67 */
+ 1 | (94 << 8), /* first, last */
+ 0xD852,0xD852,0xD852,0xD87E,0xD852,0xD852,0xD853,0xD854,0xD854,
+ 0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD857,0xffff,0xD857,
+ 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xffff,
+ 0xD857,0xD857,0xD858,0xD858,0xffff,0xD858,0xD858,0xD858,0xD858,0xD859,
+ 0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,
+ 0xD85C,0xffff,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85B,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xffff,0xD85D,0xD85D,0xD85D,0x45F9,0xD85D,
+ 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x89B8,0xD85E,0xD85E,
+ 0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,
+ 1, /* first low-surrogate */
+ 0xDEB7,0xDEB8,0xDEA8,0xDD32,0xDFFE,0xDFFC,0xDEE1,0xDCC4,0xDCC5,
+ 0xDF14,0xDDAE,0xDDAF,0xDDB0,0xDDB1,0xDDB9,0xDCE7,0xDD46, 0,0xDD47,
+ 0xDD48,0xDD49,0xDD1E,0xDD1F,0xDD4A,0xDD4B,0xDD4C,0xDD4D,0xDD4E, 0,
+ 0xDF46,0xDF4B,0xDD90,0xDD91, 0,0xDD92,0xDD93,0xDD94,0xDE5B,0xDDF2,
+ 0xDDF8,0xDDF9,0xDC94,0xDCA4,0xDC97,0xDC98,0xDD29,0xDDAE,0xDEAF,0xDC59,
+ 0xDC5A, 0,0xDC5B,0xDC5C,0xDC5D,0xDC5E,0xDC5F,0xDC60,0xDC61,0xDFAA,
+ 0xDC62,0xDC63,0xDC64,0xDC65,0xDC66,0xDC67,0xDC68,0xDC69,0xDC6A,0xDC6B,
+ 0xDC6C,0xDC6D,0xDC6E,0xDC6F, 0,0xDCB2,0xDCB3,0xDCB4, 0,0xDCB5,
+ 0xDCB6,0xDCB7,0xDCB8,0xDCB9,0xDCBA,0xDCBB,0xDF88, 0,0xDF19,0xDF1A,
+ 0xDF1B,0xDC16,0xDE0C,0xDE0D,0xDE0E,
+ /* plane 15, row 68 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85F,0xffff,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xffff,
+ 0xD861,0xD861,0xD861,0xD861,0xD861,0xffff,0xffff,0xD862,0xD862,0xD862,
+ 0x4953,0xD862,0xD862,0xffff,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,
+ 0xD863,0xD863,0xD863,0xffff,0xD863,0xffff,0xD864,0xD864,0xD864,0xffff,
+ 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xffff,0xD866,
+ 0xD866,0xD866,0xffff,0xD866,0xD866,0xD866,0xffff,0xD866,0xD867,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0x9BF3,0xD867,0xffff,0xD867,0xD867,
+ 0xD867,0xD867,0x4C69,0xffff,0xD868,0x4CE5,0xD868,0xD868,0xffff,0xD868,
+ 0xD841,0xD841,0xD842,0xD844,0xD844,
+ 1, /* first low-surrogate */
+ 0xDE0F, 0,0xDF83,0xDF84,0xDF85,0xDE83,0xDE84,0xDFB0, 0,
+ 0xDE26,0xDE27,0xDE36,0xDE28,0xDE29, 0, 0,0xDEE7,0xDEE8,0xDEE9,
+ 0,0xDEEA,0xDEEB, 0,0xDEEC,0xDEED,0xDEEE,0xDEEF,0xDEF0,0xDEF1,
+ 0xDF0C,0xDEF2,0xDEF3,0xDEF4,0xDEF5,0xDEF6,0xDEF7,0xDEF8,0xDDA3,0xDDA4,
+ 0xDDA5,0xDDA6,0xDDA7, 0,0xDF5C, 0,0xDD4B,0xDDE1,0xDF15, 0,
+ 0xDF16,0xDF17,0xDD2C,0xDD2D,0xDE22,0xDE23,0xDF96,0xDF97, 0,0xDD2E,
+ 0xDD30,0xDD31, 0,0xDEDF,0xDF8B,0xDF8C, 0,0xDF8D,0xDCFC,0xDCFD,
+ 0xDCFE,0xDCFF,0xDE17,0xDE2D,0xDE18, 0,0xDE19, 0,0xDE12,0xDE1A,
+ 0xDE1B,0xDE1C, 0, 0,0xDC97, 0,0xDC98,0xDC99, 0,0xDFC4,
+ 0xDC4F,0xDCCD,0xDEC7,0xDD1C,0xDD1D,
+ /* plane 15, row 69 */
+ 1 | (94 << 8), /* first, last */
+ 0xD844,0xD845,0xD845,0xD845,0xD845,0xD846,0xD847,0xD847,0xD847,
+ 0xD849,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84D,
+ 0xD84D,0xD84D,0xD84D,0xD84D,0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,
+ 0x3C12,0xD84D,0xffff,0xD84F,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,
+ 0xD851,0xffff,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xffff,
+ 0xD852,0xD852,0xD852,0xD852,0xD854,0xD854,0xffff,0xffff,0xD855,0xD855,
+ 0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xffff,0xD856,0xD856,0xD856,
+ 0xD856,0x7C4F,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xffff,
+ 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD85A,0xffff,0xD85A,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 1, /* first low-surrogate */
+ 0xDD1E,0xDCE7,0xDCE9,0xDCEA,0xDCEB,0xDD15,0xDCF1,0xDCF2,0xDFB6,
+ 0xDDA0,0xDD4A,0xDE20,0xDE60,0xDE61,0xDE41,0xDE62,0xDF03,0xDF04,0xDFD9,
+ 0xDFDA,0xDFDB,0xDFDC,0xDFDD, 0,0xDFDE,0xDFDF,0xDFE0,0xDFE1,0xDFE2,
+ 0,0xDFE3, 0,0xDC31,0xDD05,0xDD06,0xDD07,0xDC72,0xDC8A,0xDC8B,
+ 0xDC88, 0,0xDC8C,0xDC8D,0xDC8E,0xDC8F,0xDC90,0xDD42,0xDD43, 0,
+ 0xDEC1,0xDEC2,0xDEC3,0xDEC4,0xDCCB,0xDF22, 0, 0,0xDDC3,0xDDC4,
+ 0xDDC5,0xDDC6,0xDF1E,0xDF25,0xDCF3,0xDCF4, 0,0xDCF5,0xDE38,0xDE48,
+ 0xDECA, 0,0xDD7A,0xDD7B,0xDF55,0xDF56,0xDDB1,0xDDB2,0xDDB3, 0,
+ 0xDDB4,0xDDB5,0xDCA4,0xDE00,0xDE01,0xDE02,0xDCAC, 0,0xDDB3,0xDCB6,
+ 0xDCB7,0xDCB8,0xDCB9,0xDCBA,0xDCBB,
+ /* plane 15, row 70 */
+ 1 | (94 << 8), /* first, last */
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xffff,0xD85D,
+ 0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,
+ 0xD860,0xD860,0xD860,0xD861,0xD861,0xffff,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0x9425,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD87E,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,
+ 0xD862,0xD862,0xD862,0xffff,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xffff,0xD864,0xD864,0xD864,
+ 0xD865,0xD865,0xD866,0xD866,0xD866,
+ 1, /* first low-surrogate */
+ 0xDCBC,0xDCBD,0xDCBE,0xDCBF,0xDCC0,0xDCC1,0xDCC2,0xDCC3,0xDCC4,
+ 0xDCC5,0xDCC6,0xDCC7,0xDCE3,0xDCE4,0xDCE5,0xDCE6,0xDCE7, 0,0xDFB5,
+ 0xDFA1,0xDC95,0xDF3B,0xDF3C,0xDF3D,0xDF3E,0xDC14,0xDE20,0xDE21,0xDE22,
+ 0xDE23,0xDE24,0xDF96,0xDF97,0xDF98,0xDD94,0xDD95,0xDD96,0xDD97,0xDD98,
+ 0xDE8F,0xDE90,0xDFBC,0xDC3B,0xDE3D, 0,0xDCDF,0xDD1E,0xDF23,0xDF24,
+ 0xDF49,0xDF25,0xDF26,0xDF27,0xDF28, 0,0xDF29,0xDF2A,0xDF2E,0xDF2F,
+ 0xDF4E,0xDF30,0xDDEB,0xDF31,0xDF32,0xDF33,0xDF34,0xDF35,0xDF36, 0,
+ 0xDF37,0xDF50,0xDF38, 0,0xDF39,0xDF3A,0xDF3B,0xDF3C,0xDF3D,0xDF3E,
+ 0xDDB8,0xDDB9,0xDF62,0xDF63,0xDC41,0xDD6D, 0,0xDF52,0xDF37,0xDFDB,
+ 0xDD3F,0xDE34,0xDC5B,0xDD46,0xDD5A,
+ /* plane 15, row 71 */
+ 1 | (94 << 8), /* first, last */
+ 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,
+ 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xffff,
+ 0xD867,0xffff,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,
+ 0xD869,0xD841,0xD87E,0xD841,0xD841,0xD841,0xD842,0xD842,0xffff,0xD844,
+ 0xD844,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD847,
+ 0xD853,0xffff,0xD849,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84E,
+ 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xffff,0xD84F,0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,
+ 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD853,0xD853,0xD853,
+ 0xD854,0xD854,0xD855,0xD855,0xD841,
+ 1, /* first low-surrogate */
+ 0xDD5B,0xDEE1,0xDEE2,0xDEE3,0xDEE4,0xDFA7,0xDFA8,0xDFA9,0xDD0F,
+ 0xDD2B,0xDE56,0xDE57,0xDE58,0xDE5E,0xDE59,0xDE5A,0xDE5B,0xDE5C, 0,
+ 0xDE68, 0,0xDD2C,0xDCE2,0xDCF3,0xDED2,0xDF56,0xDFCE,0xDC61,0xDE9B,
+ 0xDEB4,0xDC5C,0xDC10,0xDCD2,0xDD71,0xDE73,0xDC2C,0xDF94, 0,0xDD3F,
+ 0xDD40,0xDCF9,0xDCFA,0xDCFD,0xDCFB,0xDD1C,0xDD1D,0xDEFF,0xDF00,0xDCF7,
+ 0xDCFE, 0,0xDCB6,0xDD54,0xDE77,0xDE79,0xDE7A,0xDE7B,0xDC69,0xDC02,
+ 0xDC03,0xDC04,0xDC05,0xDC06,0xDC07,0xDC08,0xDC09,0xDC0A,0xDC0B,0xDC35,
+ 0,0xDC39,0xDD1E,0xDD1F,0xDD20,0xDD21, 0,0xDD22,0xDD23,0xDD24,
+ 0xDD2C,0xDCB3,0xDCB5,0xDCB6,0xDCB7,0xDCB8,0xDED0,0xDCFA,0xDF07,0xDFBD,
+ 0xDCD7,0xDCD2,0xDDDB,0xDDD6,0xDC5D,
+ /* plane 15, row 72 */
+ 1 | (94 << 8), /* first, last */
+ 0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,
+ 0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xffff,0xD85A,
+ 0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0x4577,0xD85C,0xD85C,0xD85C,0xD85C,
+ 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,
+ 0xD85D,0xD85D,0x8977,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xffff,0xD860,
+ 0xD860,0x4878,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD863,0xD863,0x95E6,0xD863,0xD863,0xD863,0xD864,0xffff,0xffff,0xD864,
+ 0xD865,0xD865,0xD865,0xD865,0xD865,
+ 1, /* first low-surrogate */
+ 0xDE43,0xDECF,0xDDA3,0xDDA4,0xDDA5,0xDDA6,0xDDA7,0xDDA8,0xDDA9,
+ 0xDF5D,0xDF5E,0xDDC9,0xDDCA,0xDDCB,0xDDCC,0xDE06,0xDE07, 0,0xDCC5,
+ 0xDCF5,0xDDB4,0xDDB8,0xDDB5,0xDCFD, 0,0xDCFE,0xDCFF,0xDD00,0xDD01,
+ 0xDD02,0xDD03,0xDD09,0xDD04,0xDD05,0xDD06,0xDD07,0xDD11,0xDD12,0xDD13,
+ 0xDD14,0xDD15, 0,0xDC98,0xDC99,0xDE3C,0xDE2D,0xDE2E, 0,0xDDBB,
+ 0xDDBC, 0,0xDC3D,0xDE47,0xDE48,0xDE49,0xDE4A,0xDFE1,0xDFE7,0xDCEB,
+ 0xDD20,0xDD38,0xDF62,0xDF67,0xDF68,0xDF69,0xDF6A,0xDF6B,0xDF6D,0xDF6E,
+ 0xDF6F,0xDF70,0xDF71,0xDF72,0xDF8F,0xDF73,0xDF74,0xDF75,0xDF76,0xDF77,
+ 0xDDC9,0xDDCA, 0,0xDDCB,0xDDCC,0xDDCD,0xDC51, 0, 0,0xDE45,
+ 0xDD59,0xDD5A,0xDD5B,0xDE40,0xDFCF,
+ /* plane 15, row 73 */
+ 1 | (94 << 8), /* first, last */
+ 0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xffff,0xD867,0xD867,
+ 0x9C2F,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,
+ 0xD868,0xD868,0xD869,0xD869,0xD841,0xD841,0xD841,0xD841,0xD844,0xD845,
+ 0xD845,0xD846,0xD846,0xD84A,0xD84A,0xD84B,0xD84B,0xD84C,0xD84C,0xD84E,
+ 0xD84E,0xD84E,0xffff,0xD84E,0x6B0C,0xffff,0xD84E,0xD84E,0xD84E,0xD84E,
+ 0xD84F,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD852,0xD852,0xD855,
+ 0xD855,0xD855,0xD856,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,
+ 0xD858,0xD85A,0xD85C,0xffff,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,
+ 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD860,0xffff,0xD860,0xD862,0xD862,
+ 1, /* first low-surrogate */
+ 0xDC5E,0xDD7B,0xDE93,0xDFBC,0xDD16,0xDD30, 0,0xDE8D,0xDE8E,
+ 0,0xDE8F,0xDE90,0xDE91,0xDE92,0xDE93,0xDE94,0xDE95,0xDE96,0xDD23,
+ 0xDD14,0xDEDB,0xDC0A,0xDDCE,0xDC66,0xDC68,0xDC67,0xDCD3,0xDD63,0xDD04,
+ 0xDE9E,0xDD26,0xDD2A,0xDD6C,0xDD64,0xDE8F,0xDE90,0xDC34,0xDF0E,0xDC25,
+ 0xDC26,0xDC27, 0,0xDC28, 0, 0,0xDC29,0xDC2A,0xDC2B,0xDC2C,
+ 0xDC3E,0xDD42,0xDD43,0xDD33,0xDCC1,0xDCC2,0xDCC3,0xDED6,0xDED7,0xDDE1,
+ 0xDDE2,0xDF2B,0xDED1,0xDDCC,0xDDCD,0xDDCE,0xDDCF,0xDDDE,0xDDDF,0xDDE0,
+ 0xDDE1,0xDCF6,0xDD2C, 0,0xDD54,0xDD2D,0xDD2E,0xDD41,0xDD42,0xDFC7,
+ 0xDCA0,0xDCA1,0xDF70,0xDF71,0xDF72, 0,0xDE34,0xDE35,0xDE36,0xDFA6,
+ 0xDDCC, 0,0xDE99,0xDCF4,0xDF9B,
+ /* plane 15, row 74 */
+ 1 | (94 << 8), /* first, last */
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,
+ 0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD865,
+ 0xD865,0xD865,0xffff,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,
+ 0x9C47,0x4C88,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,
+ 0xD868,0xD868,0xffff,0xD841,0xD841,0xD844,0xD848,0xD848,0xD84A,0xD84A,
+ 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84E,0xD84E,0xD84E,0xD84E,0xD850,
+ 0xD850,0xD850,0xffff,0xD851,0xD851,0xD852,0xD852,0xD852,0xD853,0xD855,
+ 0x7936,0xD855,0xD856,0xD857,0xD857,0xD858,0xD859,0xD85C,0xD85C,0xD85C,
+ 0xD85D,0xD85D,0xD85D,0xffff,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,
+ 0xD862,0xffff,0xD862,0xD862,0xD862,
+ 1, /* first low-surrogate */
+ 0xDF9E,0xDF9F,0xDFA0,0xDFA1,0xDFA2,0xDFA3,0xDFA4,0xDFA5,0xDFA6,
+ 0xDFA7,0xDFA8,0xDDDB,0xDDDC,0xDDDD,0xDDD7,0xDDDE,0xDDDF,0xDC59,0xDC46,
+ 0xDD65,0xDE49, 0,0xDFDD,0xDD95,0xDD96,0xDD97,0xDFD4,0xDFD6,0xDD26,
+ 0, 0,0xDEC8,0xDEC5,0xDEC6,0xDEC7,0xDD51,0xDD52,0xDD53,0xDD54,
+ 0xDD55,0xDEDE, 0,0xDC6D,0xDCD5,0xDD72,0xDDAE,0xDF0F,0xDD6B,0xDD6D,
+ 0xDD6E,0xDD78,0xDE98,0xDE99,0xDE9A,0xDC44,0xDC5C,0xDC45,0xDF01,0xDD58,
+ 0xDD59,0xDD5A, 0,0xDCD9,0xDCD6,0xDEDA,0xDEDF,0xDEDB,0xDD03,0xDDEF,
+ 0,0xDF33,0xDED2,0xDDE1,0xDF6F,0xDE64,0xDE0E,0xDD50,0xDD51,0xDD52,
+ 0xDD56,0xDD57,0xDD58, 0,0xDF81,0xDF82,0xDC1D,0xDC1E,0xDE43,0xDFAA,
+ 0xDCFD, 0,0xDFC6,0xDFC7,0xDFD9,
+ /* plane 15, row 75 */
+ 1 | (94 << 8), /* first, last */
+ 0xD862,0xffff,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862,
+ 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD864,
+ 0xD864,0xD865,0xffff,0xffff,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,
+ 0xD867,0xD867,0xD868,0xD841,0xD841,0xD844,0xD845,0xD846,0xD846,0xD84A,
+ 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84E,0xD84E,0xD84E,0x6B15,
+ 0xD84E,0xD84E,0xD84E,0xD852,0xD852,0xD856,0xD856,0xD856,0xD857,0xD857,
+ 0xD857,0xD858,0xD859,0xD859,0xD85C,0xD85C,0xffff,0xD85C,0xD85E,0xD85E,
+ 0xD85E,0xD860,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,
+ 0xD864,0xD864,0xD865,0xD866,0xffff,0xD867,0xffff,0xffff,0xD867,0xD868,
+ 0xD868,0xD868,0xffff,0xffff,0xD869,
+ 1, /* first low-surrogate */
+ 0xDFD7, 0,0xDFC8,0xDFC9,0xDFCA,0xDFCB,0xDFDA, 0,0xDFCC,
+ 0xDFCD,0xDFCE,0xDFCF,0xDFD0,0xDFD1,0xDFBC,0xDDE1,0xDDE2,0xDDE3,0xDDA9,
+ 0xDE4E,0xDD77, 0, 0,0xDDAC,0xDDAD,0xDEB6,0xDFE5,0xDEF8,0xDEEA,
+ 0xDF8D,0xDEEB,0xDD95,0xDC6E,0xDCD8,0xDD83,0xDEA3,0xDD30,0xDF0F,0xDD79,
+ 0xDD7A,0xDEA7,0xDEA8,0xDEA9,0xDEAA,0xDF19,0xDC50,0xDC51,0xDC52, 0,
+ 0xDC68,0xDC53,0xDC54,0xDCE2,0xDEDC,0xDD15,0xDD16,0xDE4F,0xDDF5,0xDDF6,
+ 0xDDF7,0xDDF4,0xDCCC,0xDE0F,0xDD66,0xDD67, 0,0xDD68,0xDCA4,0xDF8B,
+ 0xDF8C,0xDDFA,0xDFE6,0xDFED,0xDFEE,0xDFEF,0xDFF0,0xDFFE,0xDDE7,0xDDE8,
+ 0xDDB3,0xDDE4,0xDD83,0xDEEC, 0,0xDF16, 0, 0,0xDF17,0xDDC3,
+ 0xDDAC,0xDEED, 0, 0,0xDDB4,
+ /* plane 15, row 76 */
+ 2 | (93 << 8), /* first, last */
+ 0xD844,0xD844,0xD846,0xD846,0xD847,0xD849,0xD84A,0xD84A,
+ 0xD84B,0xD84B,0xD84E,0xD84E,0xffff,0xD850,0xffff,0xD851,0xD852,0xD853,
+ 0xD856,0xffff,0xD859,0xD85A,0xD85C,0xD85C,0xD85E,0xD85E,0xD863,0xD863,
+ 0xD863,0xD87E,0xD863,0xD864,0xD866,0xD866,0xD867,0xD867,0xD867,0xD868,
+ 0xffff,0xD841,0xD846,0xffff,0xD84E,0xD857,0xffff,0xD857,0xD859,0xD85C,
+ 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD867,0xD867,
+ 0xD867,0xD867,0xD868,0xD845,0xD846,0xD84B,0xD84C,0xD84E,0xD851,0xD851,
+ 0xD854,0xD855,0xD857,0xD858,0xD85A,0xD85C,0x4584,0xD85C,0xffff,0xD863,
+ 0xffff,0xffff,0xD867,0xD867,0xD867,0xD867,0xD868,0xD87E,0xffff,0xD844,
+ 0xD844,0xD848,0xD84A,0xD84A,
+ 2, /* first low-surrogate */
+ 0xDD8A,0xDD8B,0xDD34,0xDF14,0xDFDF,0xDCBB,0xDD7F,0xDD81,
+ 0xDEAD,0xDEAE,0xDC62,0xDC6E, 0,0xDD6E, 0,0xDF17,0xDEE6,0xDC10,
+ 0xDD19, 0,0xDE10,0xDEF2,0xDD76,0xDD77,0xDF95,0xDF96,0xDC00,0xDC01,
+ 0xDC31,0xDDED,0xDC1C,0xDC6D,0xDFF4,0xDFF5,0xDD3D,0xDF32,0xDF33,0xDEF4,
+ 0,0xDC73,0xDD37, 0,0xDC71,0xDE0F, 0,0xDE0E,0xDE11,0xDD85,
+ 0xDC14,0xDC15,0xDC16,0xDC17,0xDC18,0xDC19,0xDC1A,0xDDC3,0xDF42,0xDF43,
+ 0xDF44,0xDF48,0xDDFB,0xDEA5,0xDDB8,0xDEB2,0xDC3D,0xDC72,0xDCE7,0xDCE8,
+ 0xDF59,0xDF3A,0xDE14,0xDDFF,0xDDC0,0xDD8D, 0,0xDD8E, 0,0xDC22,
+ 0, 0,0xDC04,0xDC29,0xDF51,0xDF66,0xDE0E,0xDE13, 0,0xDD9B,
+ 0xDD9C,0xDF16,0xDD86,0xDD87,
+ /* plane 15, row 77 */
+ 1 | (25 << 8), /* first, last */
+ 0xD863,0xD863,0xD863,0xD865,0xffff,0xD850,0xD857,0xD860,0xD863,
+ 0xD863,0xD867,0xD867,0xD869,0x53B5,0xD84E,0xD858,0xD85D,0xD868,0xD860,
+ 0xD84A,0xD863,0xffff,0xD868,0xD863,0xD863,
+ 1, /* first low-surrogate */
+ 0xDC2C,0xDC30,0xDC28,0xDE5F, 0,0xDD7E,0xDE19,0xDE0A,0xDC36,
+ 0xDDFC,0xDF6D,0xDF6E,0xDEC6, 0,0xDC7B,0xDE06,0xDD9F,0xDE32,0xDE0D,
+ 0xDD8B,0xDC3B, 0,0xDE3D,0xDC3C,0xDC3D,
+ /* plane 15, row 78: --- */
+ /* plane 15, row 79: --- */
+ /* plane 15, row 80: --- */
+ /* plane 15, row 81: --- */
+ /* plane 15, row 82: --- */
+ /* plane 15, row 83: --- */
+ /* plane 15, row 84: --- */
+ /* plane 15, row 85: --- */
+ /* plane 15, row 86: --- */
+ /* plane 15, row 87: --- */
+ /* plane 15, row 88: --- */
+ /* plane 15, row 89: --- */
+ /* plane 15, row 90: --- */
+ /* plane 15, row 91: --- */
+ /* plane 15, row 92: --- */
+ /* plane 15, row 93: --- */
+ /* plane 15, row 94: --- */
+};
+
+sal_Int32 const aImplCns116431992ToUnicodeRowOffsets[] = {
+ 0, /* plane 1, row 1; 182/190 bytes (95.8%) */
+ 95, /* plane 1, row 2; 186/190 bytes (97.9%) */
+ 190, /* plane 1, row 3; 94/94 bytes (100.0%) */
+ 237, /* plane 1, row 4; 186/190 bytes (97.9%) */
+ 332, /* plane 1, row 5; 162/162 bytes (100.0%) */
+ 413, /* plane 1, row 6; 62/62 bytes (100.0%) */
+ 444, /* plane 1, row 7; 8/28 bytes (28.6%) */
+ -1, /* plane 1, row 8 */
+ -1, /* plane 1, row 9 */
+ -1, /* plane 1, row 10 */
+ -1, /* plane 1, row 11 */
+ -1, /* plane 1, row 12 */
+ -1, /* plane 1, row 13 */
+ -1, /* plane 1, row 14 */
+ -1, /* plane 1, row 15 */
+ -1, /* plane 1, row 16 */
+ -1, /* plane 1, row 17 */
+ -1, /* plane 1, row 18 */
+ -1, /* plane 1, row 19 */
+ -1, /* plane 1, row 20 */
+ -1, /* plane 1, row 21 */
+ -1, /* plane 1, row 22 */
+ -1, /* plane 1, row 23 */
+ -1, /* plane 1, row 24 */
+ -1, /* plane 1, row 25 */
+ -1, /* plane 1, row 26 */
+ -1, /* plane 1, row 27 */
+ -1, /* plane 1, row 28 */
+ -1, /* plane 1, row 29 */
+ -1, /* plane 1, row 30 */
+ -1, /* plane 1, row 31 */
+ -1, /* plane 1, row 32 */
+ -1, /* plane 1, row 33 */
+ 458, /* plane 1, row 34; 68/68 bytes (100.0%) */
+ -1, /* plane 1, row 35 */
+ 492, /* plane 1, row 36; 190/190 bytes (100.0%) */
+ 587, /* plane 1, row 37; 190/190 bytes (100.0%) */
+ 682, /* plane 1, row 38; 190/190 bytes (100.0%) */
+ 777, /* plane 1, row 39; 190/190 bytes (100.0%) */
+ 872, /* plane 1, row 40; 190/190 bytes (100.0%) */
+ 967, /* plane 1, row 41; 190/190 bytes (100.0%) */
+ 1062, /* plane 1, row 42; 190/190 bytes (100.0%) */
+ 1157, /* plane 1, row 43; 190/190 bytes (100.0%) */
+ 1252, /* plane 1, row 44; 190/190 bytes (100.0%) */
+ 1347, /* plane 1, row 45; 190/190 bytes (100.0%) */
+ 1442, /* plane 1, row 46; 190/190 bytes (100.0%) */
+ 1537, /* plane 1, row 47; 190/190 bytes (100.0%) */
+ 1632, /* plane 1, row 48; 190/190 bytes (100.0%) */
+ 1727, /* plane 1, row 49; 190/190 bytes (100.0%) */
+ 1822, /* plane 1, row 50; 190/190 bytes (100.0%) */
+ 1917, /* plane 1, row 51; 190/190 bytes (100.0%) */
+ 2012, /* plane 1, row 52; 190/190 bytes (100.0%) */
+ 2107, /* plane 1, row 53; 190/190 bytes (100.0%) */
+ 2202, /* plane 1, row 54; 190/190 bytes (100.0%) */
+ 2297, /* plane 1, row 55; 190/190 bytes (100.0%) */
+ 2392, /* plane 1, row 56; 190/190 bytes (100.0%) */
+ 2487, /* plane 1, row 57; 190/190 bytes (100.0%) */
+ 2582, /* plane 1, row 58; 190/190 bytes (100.0%) */
+ 2677, /* plane 1, row 59; 190/190 bytes (100.0%) */
+ 2772, /* plane 1, row 60; 190/190 bytes (100.0%) */
+ 2867, /* plane 1, row 61; 190/190 bytes (100.0%) */
+ 2962, /* plane 1, row 62; 190/190 bytes (100.0%) */
+ 3057, /* plane 1, row 63; 190/190 bytes (100.0%) */
+ 3152, /* plane 1, row 64; 190/190 bytes (100.0%) */
+ 3247, /* plane 1, row 65; 190/190 bytes (100.0%) */
+ 3342, /* plane 1, row 66; 190/190 bytes (100.0%) */
+ 3437, /* plane 1, row 67; 190/190 bytes (100.0%) */
+ 3532, /* plane 1, row 68; 190/190 bytes (100.0%) */
+ 3627, /* plane 1, row 69; 190/190 bytes (100.0%) */
+ 3722, /* plane 1, row 70; 190/190 bytes (100.0%) */
+ 3817, /* plane 1, row 71; 190/190 bytes (100.0%) */
+ 3912, /* plane 1, row 72; 190/190 bytes (100.0%) */
+ 4007, /* plane 1, row 73; 190/190 bytes (100.0%) */
+ 4102, /* plane 1, row 74; 190/190 bytes (100.0%) */
+ 4197, /* plane 1, row 75; 190/190 bytes (100.0%) */
+ 4292, /* plane 1, row 76; 190/190 bytes (100.0%) */
+ 4387, /* plane 1, row 77; 190/190 bytes (100.0%) */
+ 4482, /* plane 1, row 78; 190/190 bytes (100.0%) */
+ 4577, /* plane 1, row 79; 190/190 bytes (100.0%) */
+ 4672, /* plane 1, row 80; 190/190 bytes (100.0%) */
+ 4767, /* plane 1, row 81; 190/190 bytes (100.0%) */
+ 4862, /* plane 1, row 82; 190/190 bytes (100.0%) */
+ 4957, /* plane 1, row 83; 190/190 bytes (100.0%) */
+ 5052, /* plane 1, row 84; 190/190 bytes (100.0%) */
+ 5147, /* plane 1, row 85; 190/190 bytes (100.0%) */
+ 5242, /* plane 1, row 86; 190/190 bytes (100.0%) */
+ 5337, /* plane 1, row 87; 190/190 bytes (100.0%) */
+ 5432, /* plane 1, row 88; 190/190 bytes (100.0%) */
+ 5527, /* plane 1, row 89; 190/190 bytes (100.0%) */
+ 5622, /* plane 1, row 90; 190/190 bytes (100.0%) */
+ 5717, /* plane 1, row 91; 190/190 bytes (100.0%) */
+ 5812, /* plane 1, row 92; 190/190 bytes (100.0%) */
+ 5907, /* plane 1, row 93; 88/88 bytes (100.0%) */
+ -1, /* plane 1, row 94 */
+ 5951, /* plane 2, row 1; 190/190 bytes (100.0%) */
+ 6046, /* plane 2, row 2; 190/190 bytes (100.0%) */
+ 6141, /* plane 2, row 3; 190/190 bytes (100.0%) */
+ 6236, /* plane 2, row 4; 190/190 bytes (100.0%) */
+ 6331, /* plane 2, row 5; 190/190 bytes (100.0%) */
+ 6426, /* plane 2, row 6; 190/190 bytes (100.0%) */
+ 6521, /* plane 2, row 7; 190/190 bytes (100.0%) */
+ 6616, /* plane 2, row 8; 190/190 bytes (100.0%) */
+ 6711, /* plane 2, row 9; 190/190 bytes (100.0%) */
+ 6806, /* plane 2, row 10; 190/190 bytes (100.0%) */
+ 6901, /* plane 2, row 11; 190/190 bytes (100.0%) */
+ 6996, /* plane 2, row 12; 190/190 bytes (100.0%) */
+ 7091, /* plane 2, row 13; 190/190 bytes (100.0%) */
+ 7186, /* plane 2, row 14; 190/190 bytes (100.0%) */
+ 7281, /* plane 2, row 15; 190/190 bytes (100.0%) */
+ 7376, /* plane 2, row 16; 190/190 bytes (100.0%) */
+ 7471, /* plane 2, row 17; 190/190 bytes (100.0%) */
+ 7566, /* plane 2, row 18; 190/190 bytes (100.0%) */
+ 7661, /* plane 2, row 19; 190/190 bytes (100.0%) */
+ 7756, /* plane 2, row 20; 190/190 bytes (100.0%) */
+ 7851, /* plane 2, row 21; 190/190 bytes (100.0%) */
+ 7946, /* plane 2, row 22; 190/190 bytes (100.0%) */
+ 8041, /* plane 2, row 23; 190/190 bytes (100.0%) */
+ 8136, /* plane 2, row 24; 190/190 bytes (100.0%) */
+ 8231, /* plane 2, row 25; 190/190 bytes (100.0%) */
+ 8326, /* plane 2, row 26; 190/190 bytes (100.0%) */
+ 8421, /* plane 2, row 27; 190/190 bytes (100.0%) */
+ 8516, /* plane 2, row 28; 190/190 bytes (100.0%) */
+ 8611, /* plane 2, row 29; 190/190 bytes (100.0%) */
+ 8706, /* plane 2, row 30; 190/190 bytes (100.0%) */
+ 8801, /* plane 2, row 31; 190/190 bytes (100.0%) */
+ 8896, /* plane 2, row 32; 190/190 bytes (100.0%) */
+ 8991, /* plane 2, row 33; 190/190 bytes (100.0%) */
+ 9086, /* plane 2, row 34; 190/190 bytes (100.0%) */
+ 9181, /* plane 2, row 35; 190/190 bytes (100.0%) */
+ 9276, /* plane 2, row 36; 190/190 bytes (100.0%) */
+ 9371, /* plane 2, row 37; 190/190 bytes (100.0%) */
+ 9466, /* plane 2, row 38; 190/190 bytes (100.0%) */
+ 9561, /* plane 2, row 39; 190/190 bytes (100.0%) */
+ 9656, /* plane 2, row 40; 190/190 bytes (100.0%) */
+ 9751, /* plane 2, row 41; 190/190 bytes (100.0%) */
+ 9846, /* plane 2, row 42; 190/190 bytes (100.0%) */
+ 9941, /* plane 2, row 43; 190/190 bytes (100.0%) */
+ 10036, /* plane 2, row 44; 190/190 bytes (100.0%) */
+ 10131, /* plane 2, row 45; 190/190 bytes (100.0%) */
+ 10226, /* plane 2, row 46; 190/190 bytes (100.0%) */
+ 10321, /* plane 2, row 47; 190/190 bytes (100.0%) */
+ 10416, /* plane 2, row 48; 190/190 bytes (100.0%) */
+ 10511, /* plane 2, row 49; 190/190 bytes (100.0%) */
+ 10606, /* plane 2, row 50; 190/190 bytes (100.0%) */
+ 10701, /* plane 2, row 51; 190/190 bytes (100.0%) */
+ 10796, /* plane 2, row 52; 190/190 bytes (100.0%) */
+ 10891, /* plane 2, row 53; 190/190 bytes (100.0%) */
+ 10986, /* plane 2, row 54; 190/190 bytes (100.0%) */
+ 11081, /* plane 2, row 55; 190/190 bytes (100.0%) */
+ 11176, /* plane 2, row 56; 190/190 bytes (100.0%) */
+ 11271, /* plane 2, row 57; 190/190 bytes (100.0%) */
+ 11366, /* plane 2, row 58; 190/190 bytes (100.0%) */
+ 11461, /* plane 2, row 59; 190/190 bytes (100.0%) */
+ 11556, /* plane 2, row 60; 190/190 bytes (100.0%) */
+ 11651, /* plane 2, row 61; 190/190 bytes (100.0%) */
+ 11746, /* plane 2, row 62; 190/190 bytes (100.0%) */
+ 11841, /* plane 2, row 63; 190/190 bytes (100.0%) */
+ 11936, /* plane 2, row 64; 190/190 bytes (100.0%) */
+ 12031, /* plane 2, row 65; 190/190 bytes (100.0%) */
+ 12126, /* plane 2, row 66; 190/190 bytes (100.0%) */
+ 12221, /* plane 2, row 67; 190/190 bytes (100.0%) */
+ 12316, /* plane 2, row 68; 190/190 bytes (100.0%) */
+ 12411, /* plane 2, row 69; 190/190 bytes (100.0%) */
+ 12506, /* plane 2, row 70; 190/190 bytes (100.0%) */
+ 12601, /* plane 2, row 71; 190/190 bytes (100.0%) */
+ 12696, /* plane 2, row 72; 190/190 bytes (100.0%) */
+ 12791, /* plane 2, row 73; 190/190 bytes (100.0%) */
+ 12886, /* plane 2, row 74; 190/190 bytes (100.0%) */
+ 12981, /* plane 2, row 75; 190/190 bytes (100.0%) */
+ 13076, /* plane 2, row 76; 190/190 bytes (100.0%) */
+ 13171, /* plane 2, row 77; 190/190 bytes (100.0%) */
+ 13266, /* plane 2, row 78; 190/190 bytes (100.0%) */
+ 13361, /* plane 2, row 79; 190/190 bytes (100.0%) */
+ 13456, /* plane 2, row 80; 190/190 bytes (100.0%) */
+ 13551, /* plane 2, row 81; 190/190 bytes (100.0%) */
+ 13646, /* plane 2, row 82; 74/74 bytes (100.0%) */
+ -1, /* plane 2, row 83 */
+ -1, /* plane 2, row 84 */
+ -1, /* plane 2, row 85 */
+ -1, /* plane 2, row 86 */
+ -1, /* plane 2, row 87 */
+ -1, /* plane 2, row 88 */
+ -1, /* plane 2, row 89 */
+ -1, /* plane 2, row 90 */
+ -1, /* plane 2, row 91 */
+ -1, /* plane 2, row 92 */
+ -1, /* plane 2, row 93 */
+ -1, /* plane 2, row 94 */
+ 13683, /* plane 3, row 1; 200/306 bytes (65.4%) */
+ 13836, /* plane 3, row 2; 196/366 bytes (53.6%) */
+ 14019, /* plane 3, row 3; 198/290 bytes (68.3%) */
+ 14164, /* plane 3, row 4; 200/286 bytes (69.9%) */
+ 14307, /* plane 3, row 5; 194/194 bytes (100.0%) */
+ 14404, /* plane 3, row 6; 194/194 bytes (100.0%) */
+ 14501, /* plane 3, row 7; 202/294 bytes (68.7%) */
+ 14648, /* plane 3, row 8; 190/190 bytes (100.0%) */
+ 14743, /* plane 3, row 9; 190/190 bytes (100.0%) */
+ 14838, /* plane 3, row 10; 196/218 bytes (89.9%) */
+ 14947, /* plane 3, row 11; 190/190 bytes (100.0%) */
+ 15042, /* plane 3, row 12; 196/228 bytes (86.0%) */
+ 15156, /* plane 3, row 13; 196/252 bytes (77.8%) */
+ 15282, /* plane 3, row 14; 196/202 bytes (97.0%) */
+ 15383, /* plane 3, row 15; 190/190 bytes (100.0%) */
+ 15478, /* plane 3, row 16; 196/290 bytes (67.6%) */
+ 15623, /* plane 3, row 17; 194/194 bytes (100.0%) */
+ 15720, /* plane 3, row 18; 190/190 bytes (100.0%) */
+ 15815, /* plane 3, row 19; 194/194 bytes (100.0%) */
+ 15912, /* plane 3, row 20; 198/254 bytes (78.0%) */
+ 16039, /* plane 3, row 21; 196/206 bytes (95.1%) */
+ 16142, /* plane 3, row 22; 198/348 bytes (56.9%) */
+ 16316, /* plane 3, row 23; 190/190 bytes (100.0%) */
+ 16411, /* plane 3, row 24; 190/190 bytes (100.0%) */
+ 16506, /* plane 3, row 25; 194/194 bytes (100.0%) */
+ 16603, /* plane 3, row 26; 196/276 bytes (71.0%) */
+ 16741, /* plane 3, row 27; 190/190 bytes (100.0%) */
+ 16836, /* plane 3, row 28; 194/194 bytes (100.0%) */
+ 16933, /* plane 3, row 29; 194/194 bytes (100.0%) */
+ 17030, /* plane 3, row 30; 190/190 bytes (100.0%) */
+ 17125, /* plane 3, row 31; 194/194 bytes (100.0%) */
+ 17222, /* plane 3, row 32; 196/312 bytes (62.8%) */
+ 17378, /* plane 3, row 33; 194/194 bytes (100.0%) */
+ 17475, /* plane 3, row 34; 190/190 bytes (100.0%) */
+ 17570, /* plane 3, row 35; 194/194 bytes (100.0%) */
+ 17667, /* plane 3, row 36; 196/338 bytes (58.0%) */
+ 17836, /* plane 3, row 37; 190/190 bytes (100.0%) */
+ 17931, /* plane 3, row 38; 194/194 bytes (100.0%) */
+ 18028, /* plane 3, row 39; 196/246 bytes (79.7%) */
+ 18151, /* plane 3, row 40; 196/330 bytes (59.4%) */
+ 18316, /* plane 3, row 41; 190/190 bytes (100.0%) */
+ 18411, /* plane 3, row 42; 190/190 bytes (100.0%) */
+ 18506, /* plane 3, row 43; 190/190 bytes (100.0%) */
+ 18601, /* plane 3, row 44; 190/190 bytes (100.0%) */
+ 18696, /* plane 3, row 45; 190/190 bytes (100.0%) */
+ 18791, /* plane 3, row 46; 190/190 bytes (100.0%) */
+ 18886, /* plane 3, row 47; 190/190 bytes (100.0%) */
+ 18981, /* plane 3, row 48; 194/194 bytes (100.0%) */
+ 19078, /* plane 3, row 49; 190/190 bytes (100.0%) */
+ 19173, /* plane 3, row 50; 190/190 bytes (100.0%) */
+ 19268, /* plane 3, row 51; 190/190 bytes (100.0%) */
+ 19363, /* plane 3, row 52; 194/194 bytes (100.0%) */
+ 19460, /* plane 3, row 53; 196/216 bytes (90.7%) */
+ 19568, /* plane 3, row 54; 194/194 bytes (100.0%) */
+ 19665, /* plane 3, row 55; 194/194 bytes (100.0%) */
+ 19762, /* plane 3, row 56; 196/234 bytes (83.8%) */
+ 19879, /* plane 3, row 57; 190/190 bytes (100.0%) */
+ 19974, /* plane 3, row 58; 196/200 bytes (98.0%) */
+ 20074, /* plane 3, row 59; 196/208 bytes (94.2%) */
+ 20178, /* plane 3, row 60; 194/194 bytes (100.0%) */
+ 20275, /* plane 3, row 61; 190/190 bytes (100.0%) */
+ 20370, /* plane 3, row 62; 190/190 bytes (100.0%) */
+ 20465, /* plane 3, row 63; 190/190 bytes (100.0%) */
+ 20560, /* plane 3, row 64; 194/194 bytes (100.0%) */
+ 20657, /* plane 3, row 65; 188/190 bytes (98.9%) */
+ 20752, /* plane 3, row 66; 120/180 bytes (66.7%) */
+ 20842, /* plane 3, row 67; 56/180 bytes (31.1%) */
+ 20932, /* plane 3, row 68; 126/188 bytes (67.0%) */
+ 21026, /* plane 3, row 69; 190/190 bytes (100.0%) */
+ 21121, /* plane 3, row 70; 180/186 bytes (96.8%) */
+ 21214, /* plane 3, row 71; 22/22 bytes (100.0%) */
+ -1, /* plane 3, row 72 */
+ -1, /* plane 3, row 73 */
+ -1, /* plane 3, row 74 */
+ -1, /* plane 3, row 75 */
+ -1, /* plane 3, row 76 */
+ -1, /* plane 3, row 77 */
+ -1, /* plane 3, row 78 */
+ -1, /* plane 3, row 79 */
+ -1, /* plane 3, row 80 */
+ -1, /* plane 3, row 81 */
+ -1, /* plane 3, row 82 */
+ -1, /* plane 3, row 83 */
+ -1, /* plane 3, row 84 */
+ -1, /* plane 3, row 85 */
+ -1, /* plane 3, row 86 */
+ -1, /* plane 3, row 87 */
+ -1, /* plane 3, row 88 */
+ -1, /* plane 3, row 89 */
+ -1, /* plane 3, row 90 */
+ -1, /* plane 3, row 91 */
+ -1, /* plane 3, row 92 */
+ -1, /* plane 3, row 93 */
+ -1, /* plane 3, row 94 */
+ 21225, /* plane 4, row 1; 264/380 bytes (69.5%) */
+ 21415, /* plane 4, row 2; 288/378 bytes (76.2%) */
+ 21604, /* plane 4, row 3; 278/376 bytes (73.9%) */
+ 21792, /* plane 4, row 4; 286/370 bytes (77.3%) */
+ 21977, /* plane 4, row 5; 282/374 bytes (75.4%) */
+ 22164, /* plane 4, row 6; 260/370 bytes (70.3%) */
+ 22349, /* plane 4, row 7; 282/378 bytes (74.6%) */
+ 22538, /* plane 4, row 8; 296/378 bytes (78.3%) */
+ 22727, /* plane 4, row 9; 266/368 bytes (72.3%) */
+ 22911, /* plane 4, row 10; 270/378 bytes (71.4%) */
+ 23100, /* plane 4, row 11; 300/376 bytes (79.8%) */
+ 23288, /* plane 4, row 12; 284/378 bytes (75.1%) */
+ 23477, /* plane 4, row 13; 272/374 bytes (72.7%) */
+ 23664, /* plane 4, row 14; 274/370 bytes (74.1%) */
+ 23849, /* plane 4, row 15; 298/372 bytes (80.1%) */
+ 24035, /* plane 4, row 16; 272/380 bytes (71.6%) */
+ 24225, /* plane 4, row 17; 278/376 bytes (73.9%) */
+ 24413, /* plane 4, row 18; 286/376 bytes (76.1%) */
+ 24601, /* plane 4, row 19; 246/380 bytes (64.7%) */
+ 24791, /* plane 4, row 20; 282/380 bytes (74.2%) */
+ 24981, /* plane 4, row 21; 276/380 bytes (72.6%) */
+ 25171, /* plane 4, row 22; 288/376 bytes (76.6%) */
+ 25359, /* plane 4, row 23; 292/378 bytes (77.2%) */
+ 25548, /* plane 4, row 24; 274/376 bytes (72.9%) */
+ 25736, /* plane 4, row 25; 276/378 bytes (73.0%) */
+ 25925, /* plane 4, row 26; 266/380 bytes (70.0%) */
+ 26115, /* plane 4, row 27; 284/372 bytes (76.3%) */
+ 26301, /* plane 4, row 28; 288/378 bytes (76.2%) */
+ 26490, /* plane 4, row 29; 270/370 bytes (73.0%) */
+ 26675, /* plane 4, row 30; 288/372 bytes (77.4%) */
+ 26861, /* plane 4, row 31; 264/380 bytes (69.5%) */
+ 27051, /* plane 4, row 32; 300/378 bytes (79.4%) */
+ 27240, /* plane 4, row 33; 276/374 bytes (73.8%) */
+ 27427, /* plane 4, row 34; 288/376 bytes (76.6%) */
+ 27615, /* plane 4, row 35; 266/370 bytes (71.9%) */
+ 27800, /* plane 4, row 36; 262/368 bytes (71.2%) */
+ 27984, /* plane 4, row 37; 270/376 bytes (71.8%) */
+ 28172, /* plane 4, row 38; 264/376 bytes (70.2%) */
+ 28360, /* plane 4, row 39; 272/380 bytes (71.6%) */
+ 28550, /* plane 4, row 40; 284/380 bytes (74.7%) */
+ 28740, /* plane 4, row 41; 284/378 bytes (75.1%) */
+ 28929, /* plane 4, row 42; 284/380 bytes (74.7%) */
+ 29119, /* plane 4, row 43; 274/364 bytes (75.3%) */
+ 29301, /* plane 4, row 44; 272/376 bytes (72.3%) */
+ 29489, /* plane 4, row 45; 272/374 bytes (72.7%) */
+ 29676, /* plane 4, row 46; 272/374 bytes (72.7%) */
+ 29863, /* plane 4, row 47; 286/378 bytes (75.7%) */
+ 30052, /* plane 4, row 48; 286/378 bytes (75.7%) */
+ 30241, /* plane 4, row 49; 282/380 bytes (74.2%) */
+ 30431, /* plane 4, row 50; 282/378 bytes (74.6%) */
+ 30620, /* plane 4, row 51; 296/366 bytes (80.9%) */
+ 30803, /* plane 4, row 52; 274/374 bytes (73.3%) */
+ 30990, /* plane 4, row 53; 276/376 bytes (73.4%) */
+ 31178, /* plane 4, row 54; 292/380 bytes (76.8%) */
+ 31368, /* plane 4, row 55; 266/376 bytes (70.7%) */
+ 31556, /* plane 4, row 56; 286/372 bytes (76.9%) */
+ 31742, /* plane 4, row 57; 288/374 bytes (77.0%) */
+ 31929, /* plane 4, row 58; 296/376 bytes (78.7%) */
+ 32117, /* plane 4, row 59; 284/370 bytes (76.8%) */
+ 32302, /* plane 4, row 60; 282/374 bytes (75.4%) */
+ 32489, /* plane 4, row 61; 306/368 bytes (83.2%) */
+ 32673, /* plane 4, row 62; 282/374 bytes (75.4%) */
+ 32860, /* plane 4, row 63; 268/362 bytes (74.0%) */
+ 33041, /* plane 4, row 64; 304/380 bytes (80.0%) */
+ 33231, /* plane 4, row 65; 280/370 bytes (75.7%) */
+ 33416, /* plane 4, row 66; 272/374 bytes (72.7%) */
+ 33603, /* plane 4, row 67; 276/376 bytes (73.4%) */
+ 33791, /* plane 4, row 68; 274/378 bytes (72.5%) */
+ 33980, /* plane 4, row 69; 294/380 bytes (77.4%) */
+ 34170, /* plane 4, row 70; 304/378 bytes (80.4%) */
+ 34359, /* plane 4, row 71; 292/368 bytes (79.3%) */
+ 34543, /* plane 4, row 72; 280/378 bytes (74.1%) */
+ 34732, /* plane 4, row 73; 286/368 bytes (77.7%) */
+ 34916, /* plane 4, row 74; 310/378 bytes (82.0%) */
+ 35105, /* plane 4, row 75; 282/378 bytes (74.6%) */
+ 35294, /* plane 4, row 76; 292/380 bytes (76.8%) */
+ 35484, /* plane 4, row 77; 298/380 bytes (78.4%) */
+ 35674, /* plane 4, row 78; 190/240 bytes (79.2%) */
+ -1, /* plane 4, row 79 */
+ -1, /* plane 4, row 80 */
+ -1, /* plane 4, row 81 */
+ -1, /* plane 4, row 82 */
+ -1, /* plane 4, row 83 */
+ -1, /* plane 4, row 84 */
+ -1, /* plane 4, row 85 */
+ -1, /* plane 4, row 86 */
+ -1, /* plane 4, row 87 */
+ -1, /* plane 4, row 88 */
+ -1, /* plane 4, row 89 */
+ -1, /* plane 4, row 90 */
+ -1, /* plane 4, row 91 */
+ -1, /* plane 4, row 92 */
+ -1, /* plane 4, row 93 */
+ -1, /* plane 4, row 94 */
+ 35794, /* plane 5, row 1; 374/380 bytes (98.4%) */
+ 35984, /* plane 5, row 2; 366/380 bytes (96.3%) */
+ 36174, /* plane 5, row 3; 368/380 bytes (96.8%) */
+ 36364, /* plane 5, row 4; 370/380 bytes (97.4%) */
+ 36554, /* plane 5, row 5; 354/380 bytes (93.2%) */
+ 36744, /* plane 5, row 6; 368/380 bytes (96.8%) */
+ 36934, /* plane 5, row 7; 366/380 bytes (96.3%) */
+ 37124, /* plane 5, row 8; 376/378 bytes (99.5%) */
+ 37313, /* plane 5, row 9; 362/380 bytes (95.3%) */
+ 37503, /* plane 5, row 10; 376/380 bytes (98.9%) */
+ 37693, /* plane 5, row 11; 364/378 bytes (96.3%) */
+ 37882, /* plane 5, row 12; 376/380 bytes (98.9%) */
+ 38072, /* plane 5, row 13; 370/380 bytes (97.4%) */
+ 38262, /* plane 5, row 14; 368/380 bytes (96.8%) */
+ 38452, /* plane 5, row 15; 376/380 bytes (98.9%) */
+ 38642, /* plane 5, row 16; 366/378 bytes (96.8%) */
+ 38831, /* plane 5, row 17; 370/380 bytes (97.4%) */
+ 39021, /* plane 5, row 18; 372/380 bytes (97.9%) */
+ 39211, /* plane 5, row 19; 366/380 bytes (96.3%) */
+ 39401, /* plane 5, row 20; 362/380 bytes (95.3%) */
+ 39591, /* plane 5, row 21; 362/380 bytes (95.3%) */
+ 39781, /* plane 5, row 22; 366/380 bytes (96.3%) */
+ 39971, /* plane 5, row 23; 368/380 bytes (96.8%) */
+ 40161, /* plane 5, row 24; 372/380 bytes (97.9%) */
+ 40351, /* plane 5, row 25; 370/380 bytes (97.4%) */
+ 40541, /* plane 5, row 26; 372/380 bytes (97.9%) */
+ 40731, /* plane 5, row 27; 362/380 bytes (95.3%) */
+ 40921, /* plane 5, row 28; 364/380 bytes (95.8%) */
+ 41111, /* plane 5, row 29; 372/380 bytes (97.9%) */
+ 41301, /* plane 5, row 30; 374/380 bytes (98.4%) */
+ 41491, /* plane 5, row 31; 368/378 bytes (97.4%) */
+ 41680, /* plane 5, row 32; 370/380 bytes (97.4%) */
+ 41870, /* plane 5, row 33; 372/380 bytes (97.9%) */
+ 42060, /* plane 5, row 34; 368/380 bytes (96.8%) */
+ 42250, /* plane 5, row 35; 366/380 bytes (96.3%) */
+ 42440, /* plane 5, row 36; 368/380 bytes (96.8%) */
+ 42630, /* plane 5, row 37; 376/380 bytes (98.9%) */
+ 42820, /* plane 5, row 38; 360/380 bytes (94.7%) */
+ 43010, /* plane 5, row 39; 366/378 bytes (96.8%) */
+ 43199, /* plane 5, row 40; 370/380 bytes (97.4%) */
+ 43389, /* plane 5, row 41; 368/380 bytes (96.8%) */
+ 43579, /* plane 5, row 42; 368/380 bytes (96.8%) */
+ 43769, /* plane 5, row 43; 364/380 bytes (95.8%) */
+ 43959, /* plane 5, row 44; 372/380 bytes (97.9%) */
+ 44149, /* plane 5, row 45; 360/380 bytes (94.7%) */
+ 44339, /* plane 5, row 46; 372/380 bytes (97.9%) */
+ 44529, /* plane 5, row 47; 366/380 bytes (96.3%) */
+ 44719, /* plane 5, row 48; 376/380 bytes (98.9%) */
+ 44909, /* plane 5, row 49; 374/380 bytes (98.4%) */
+ 45099, /* plane 5, row 50; 376/380 bytes (98.9%) */
+ 45289, /* plane 5, row 51; 372/380 bytes (97.9%) */
+ 45479, /* plane 5, row 52; 372/380 bytes (97.9%) */
+ 45669, /* plane 5, row 53; 370/380 bytes (97.4%) */
+ 45859, /* plane 5, row 54; 372/380 bytes (97.9%) */
+ 46049, /* plane 5, row 55; 380/380 bytes (100.0%) */
+ 46239, /* plane 5, row 56; 368/378 bytes (97.4%) */
+ 46428, /* plane 5, row 57; 380/380 bytes (100.0%) */
+ 46618, /* plane 5, row 58; 370/380 bytes (97.4%) */
+ 46808, /* plane 5, row 59; 372/380 bytes (97.9%) */
+ 46998, /* plane 5, row 60; 366/376 bytes (97.3%) */
+ 47186, /* plane 5, row 61; 368/380 bytes (96.8%) */
+ 47376, /* plane 5, row 62; 368/380 bytes (96.8%) */
+ 47566, /* plane 5, row 63; 378/380 bytes (99.5%) */
+ 47756, /* plane 5, row 64; 376/380 bytes (98.9%) */
+ 47946, /* plane 5, row 65; 370/380 bytes (97.4%) */
+ 48136, /* plane 5, row 66; 378/380 bytes (99.5%) */
+ 48326, /* plane 5, row 67; 372/380 bytes (97.9%) */
+ 48516, /* plane 5, row 68; 368/380 bytes (96.8%) */
+ 48706, /* plane 5, row 69; 368/378 bytes (97.4%) */
+ 48895, /* plane 5, row 70; 372/380 bytes (97.9%) */
+ 49085, /* plane 5, row 71; 360/380 bytes (94.7%) */
+ 49275, /* plane 5, row 72; 374/380 bytes (98.4%) */
+ 49465, /* plane 5, row 73; 372/380 bytes (97.9%) */
+ 49655, /* plane 5, row 74; 376/380 bytes (98.9%) */
+ 49845, /* plane 5, row 75; 362/380 bytes (95.3%) */
+ 50035, /* plane 5, row 76; 376/380 bytes (98.9%) */
+ 50225, /* plane 5, row 77; 374/380 bytes (98.4%) */
+ 50415, /* plane 5, row 78; 372/380 bytes (97.9%) */
+ 50605, /* plane 5, row 79; 372/380 bytes (97.9%) */
+ 50795, /* plane 5, row 80; 368/380 bytes (96.8%) */
+ 50985, /* plane 5, row 81; 370/380 bytes (97.4%) */
+ 51175, /* plane 5, row 82; 366/380 bytes (96.3%) */
+ 51365, /* plane 5, row 83; 376/380 bytes (98.9%) */
+ 51555, /* plane 5, row 84; 368/380 bytes (96.8%) */
+ 51745, /* plane 5, row 85; 358/380 bytes (94.2%) */
+ 51935, /* plane 5, row 86; 372/380 bytes (97.9%) */
+ 52125, /* plane 5, row 87; 372/380 bytes (97.9%) */
+ 52315, /* plane 5, row 88; 370/380 bytes (97.4%) */
+ 52505, /* plane 5, row 89; 374/380 bytes (98.4%) */
+ 52695, /* plane 5, row 90; 378/380 bytes (99.5%) */
+ 52885, /* plane 5, row 91; 376/380 bytes (98.9%) */
+ 53075, /* plane 5, row 92; 198/200 bytes (99.0%) */
+ -1, /* plane 5, row 93 */
+ -1, /* plane 5, row 94 */
+ 53175, /* plane 6, row 1; 368/378 bytes (97.4%) */
+ 53364, /* plane 6, row 2; 376/380 bytes (98.9%) */
+ 53554, /* plane 6, row 3; 374/380 bytes (98.4%) */
+ 53744, /* plane 6, row 4; 378/380 bytes (99.5%) */
+ 53934, /* plane 6, row 5; 368/380 bytes (96.8%) */
+ 54124, /* plane 6, row 6; 370/380 bytes (97.4%) */
+ 54314, /* plane 6, row 7; 376/380 bytes (98.9%) */
+ 54504, /* plane 6, row 8; 368/380 bytes (96.8%) */
+ 54694, /* plane 6, row 9; 374/380 bytes (98.4%) */
+ 54884, /* plane 6, row 10; 368/376 bytes (97.9%) */
+ 55072, /* plane 6, row 11; 374/380 bytes (98.4%) */
+ 55262, /* plane 6, row 12; 374/378 bytes (98.9%) */
+ 55451, /* plane 6, row 13; 374/378 bytes (98.9%) */
+ 55640, /* plane 6, row 14; 378/380 bytes (99.5%) */
+ 55830, /* plane 6, row 15; 376/380 bytes (98.9%) */
+ 56020, /* plane 6, row 16; 376/380 bytes (98.9%) */
+ 56210, /* plane 6, row 17; 372/380 bytes (97.9%) */
+ 56400, /* plane 6, row 18; 378/380 bytes (99.5%) */
+ 56590, /* plane 6, row 19; 372/380 bytes (97.9%) */
+ 56780, /* plane 6, row 20; 372/380 bytes (97.9%) */
+ 56970, /* plane 6, row 21; 374/380 bytes (98.4%) */
+ 57160, /* plane 6, row 22; 370/380 bytes (97.4%) */
+ 57350, /* plane 6, row 23; 374/380 bytes (98.4%) */
+ 57540, /* plane 6, row 24; 366/380 bytes (96.3%) */
+ 57730, /* plane 6, row 25; 374/380 bytes (98.4%) */
+ 57920, /* plane 6, row 26; 376/380 bytes (98.9%) */
+ 58110, /* plane 6, row 27; 366/378 bytes (96.8%) */
+ 58299, /* plane 6, row 28; 376/380 bytes (98.9%) */
+ 58489, /* plane 6, row 29; 378/380 bytes (99.5%) */
+ 58679, /* plane 6, row 30; 366/380 bytes (96.3%) */
+ 58869, /* plane 6, row 31; 380/380 bytes (100.0%) */
+ 59059, /* plane 6, row 32; 372/380 bytes (97.9%) */
+ 59249, /* plane 6, row 33; 370/380 bytes (97.4%) */
+ 59439, /* plane 6, row 34; 370/380 bytes (97.4%) */
+ 59629, /* plane 6, row 35; 366/380 bytes (96.3%) */
+ 59819, /* plane 6, row 36; 370/380 bytes (97.4%) */
+ 60009, /* plane 6, row 37; 372/380 bytes (97.9%) */
+ 60199, /* plane 6, row 38; 376/380 bytes (98.9%) */
+ 60389, /* plane 6, row 39; 374/380 bytes (98.4%) */
+ 60579, /* plane 6, row 40; 372/380 bytes (97.9%) */
+ 60769, /* plane 6, row 41; 372/378 bytes (98.4%) */
+ 60958, /* plane 6, row 42; 378/380 bytes (99.5%) */
+ 61148, /* plane 6, row 43; 376/380 bytes (98.9%) */
+ 61338, /* plane 6, row 44; 360/380 bytes (94.7%) */
+ 61528, /* plane 6, row 45; 376/380 bytes (98.9%) */
+ 61718, /* plane 6, row 46; 370/380 bytes (97.4%) */
+ 61908, /* plane 6, row 47; 370/380 bytes (97.4%) */
+ 62098, /* plane 6, row 48; 370/380 bytes (97.4%) */
+ 62288, /* plane 6, row 49; 374/380 bytes (98.4%) */
+ 62478, /* plane 6, row 50; 372/380 bytes (97.9%) */
+ 62668, /* plane 6, row 51; 378/380 bytes (99.5%) */
+ 62858, /* plane 6, row 52; 368/380 bytes (96.8%) */
+ 63048, /* plane 6, row 53; 376/380 bytes (98.9%) */
+ 63238, /* plane 6, row 54; 374/380 bytes (98.4%) */
+ 63428, /* plane 6, row 55; 380/380 bytes (100.0%) */
+ 63618, /* plane 6, row 56; 376/380 bytes (98.9%) */
+ 63808, /* plane 6, row 57; 376/380 bytes (98.9%) */
+ 63998, /* plane 6, row 58; 374/380 bytes (98.4%) */
+ 64188, /* plane 6, row 59; 380/380 bytes (100.0%) */
+ 64378, /* plane 6, row 60; 372/380 bytes (97.9%) */
+ 64568, /* plane 6, row 61; 374/380 bytes (98.4%) */
+ 64758, /* plane 6, row 62; 374/380 bytes (98.4%) */
+ 64948, /* plane 6, row 63; 374/380 bytes (98.4%) */
+ 65138, /* plane 6, row 64; 372/380 bytes (97.9%) */
+ 65328, /* plane 6, row 65; 370/378 bytes (97.9%) */
+ 65517, /* plane 6, row 66; 376/380 bytes (98.9%) */
+ 65707, /* plane 6, row 67; 378/380 bytes (99.5%) */
+ 65897, /* plane 6, row 68; 360/364 bytes (98.9%) */
+ -1, /* plane 6, row 69 */
+ -1, /* plane 6, row 70 */
+ -1, /* plane 6, row 71 */
+ -1, /* plane 6, row 72 */
+ -1, /* plane 6, row 73 */
+ -1, /* plane 6, row 74 */
+ -1, /* plane 6, row 75 */
+ -1, /* plane 6, row 76 */
+ -1, /* plane 6, row 77 */
+ -1, /* plane 6, row 78 */
+ -1, /* plane 6, row 79 */
+ -1, /* plane 6, row 80 */
+ -1, /* plane 6, row 81 */
+ -1, /* plane 6, row 82 */
+ -1, /* plane 6, row 83 */
+ -1, /* plane 6, row 84 */
+ -1, /* plane 6, row 85 */
+ -1, /* plane 6, row 86 */
+ -1, /* plane 6, row 87 */
+ -1, /* plane 6, row 88 */
+ -1, /* plane 6, row 89 */
+ -1, /* plane 6, row 90 */
+ -1, /* plane 6, row 91 */
+ -1, /* plane 6, row 92 */
+ -1, /* plane 6, row 93 */
+ -1, /* plane 6, row 94 */
+ 66079, /* plane 7, row 1; 374/380 bytes (98.4%) */
+ 66269, /* plane 7, row 2; 376/380 bytes (98.9%) */
+ 66459, /* plane 7, row 3; 376/380 bytes (98.9%) */
+ 66649, /* plane 7, row 4; 378/380 bytes (99.5%) */
+ 66839, /* plane 7, row 5; 374/380 bytes (98.4%) */
+ 67029, /* plane 7, row 6; 374/380 bytes (98.4%) */
+ 67219, /* plane 7, row 7; 380/380 bytes (100.0%) */
+ 67409, /* plane 7, row 8; 376/380 bytes (98.9%) */
+ 67599, /* plane 7, row 9; 374/380 bytes (98.4%) */
+ 67789, /* plane 7, row 10; 372/380 bytes (97.9%) */
+ 67979, /* plane 7, row 11; 374/380 bytes (98.4%) */
+ 68169, /* plane 7, row 12; 372/380 bytes (97.9%) */
+ 68359, /* plane 7, row 13; 374/380 bytes (98.4%) */
+ 68549, /* plane 7, row 14; 378/380 bytes (99.5%) */
+ 68739, /* plane 7, row 15; 376/380 bytes (98.9%) */
+ 68929, /* plane 7, row 16; 374/380 bytes (98.4%) */
+ 69119, /* plane 7, row 17; 380/380 bytes (100.0%) */
+ 69309, /* plane 7, row 18; 374/380 bytes (98.4%) */
+ 69499, /* plane 7, row 19; 378/380 bytes (99.5%) */
+ 69689, /* plane 7, row 20; 372/380 bytes (97.9%) */
+ 69879, /* plane 7, row 21; 378/380 bytes (99.5%) */
+ 70069, /* plane 7, row 22; 368/380 bytes (96.8%) */
+ 70259, /* plane 7, row 23; 378/380 bytes (99.5%) */
+ 70449, /* plane 7, row 24; 378/380 bytes (99.5%) */
+ 70639, /* plane 7, row 25; 376/380 bytes (98.9%) */
+ 70829, /* plane 7, row 26; 378/380 bytes (99.5%) */
+ 71019, /* plane 7, row 27; 376/380 bytes (98.9%) */
+ 71209, /* plane 7, row 28; 372/380 bytes (97.9%) */
+ 71399, /* plane 7, row 29; 376/380 bytes (98.9%) */
+ 71589, /* plane 7, row 30; 376/380 bytes (98.9%) */
+ 71779, /* plane 7, row 31; 372/380 bytes (97.9%) */
+ 71969, /* plane 7, row 32; 376/380 bytes (98.9%) */
+ 72159, /* plane 7, row 33; 370/380 bytes (97.4%) */
+ 72349, /* plane 7, row 34; 376/380 bytes (98.9%) */
+ 72539, /* plane 7, row 35; 374/380 bytes (98.4%) */
+ 72729, /* plane 7, row 36; 370/378 bytes (97.9%) */
+ 72918, /* plane 7, row 37; 380/380 bytes (100.0%) */
+ 73108, /* plane 7, row 38; 376/380 bytes (98.9%) */
+ 73298, /* plane 7, row 39; 376/380 bytes (98.9%) */
+ 73488, /* plane 7, row 40; 376/380 bytes (98.9%) */
+ 73678, /* plane 7, row 41; 378/380 bytes (99.5%) */
+ 73868, /* plane 7, row 42; 374/380 bytes (98.4%) */
+ 74058, /* plane 7, row 43; 378/380 bytes (99.5%) */
+ 74248, /* plane 7, row 44; 380/380 bytes (100.0%) */
+ 74438, /* plane 7, row 45; 378/380 bytes (99.5%) */
+ 74628, /* plane 7, row 46; 376/380 bytes (98.9%) */
+ 74818, /* plane 7, row 47; 380/380 bytes (100.0%) */
+ 75008, /* plane 7, row 48; 374/380 bytes (98.4%) */
+ 75198, /* plane 7, row 49; 376/380 bytes (98.9%) */
+ 75388, /* plane 7, row 50; 370/380 bytes (97.4%) */
+ 75578, /* plane 7, row 51; 376/380 bytes (98.9%) */
+ 75768, /* plane 7, row 52; 376/380 bytes (98.9%) */
+ 75958, /* plane 7, row 53; 376/380 bytes (98.9%) */
+ 76148, /* plane 7, row 54; 370/380 bytes (97.4%) */
+ 76338, /* plane 7, row 55; 376/380 bytes (98.9%) */
+ 76528, /* plane 7, row 56; 374/380 bytes (98.4%) */
+ 76718, /* plane 7, row 57; 370/380 bytes (97.4%) */
+ 76908, /* plane 7, row 58; 372/380 bytes (97.9%) */
+ 77098, /* plane 7, row 59; 380/380 bytes (100.0%) */
+ 77288, /* plane 7, row 60; 374/380 bytes (98.4%) */
+ 77478, /* plane 7, row 61; 380/380 bytes (100.0%) */
+ 77668, /* plane 7, row 62; 378/380 bytes (99.5%) */
+ 77858, /* plane 7, row 63; 378/380 bytes (99.5%) */
+ 78048, /* plane 7, row 64; 376/380 bytes (98.9%) */
+ 78238, /* plane 7, row 65; 378/380 bytes (99.5%) */
+ 78428, /* plane 7, row 66; 376/380 bytes (98.9%) */
+ 78618, /* plane 7, row 67; 378/380 bytes (99.5%) */
+ 78808, /* plane 7, row 68; 376/380 bytes (98.9%) */
+ 78998, /* plane 7, row 69; 378/380 bytes (99.5%) */
+ 79188, /* plane 7, row 70; 216/216 bytes (100.0%) */
+ -1, /* plane 7, row 71 */
+ -1, /* plane 7, row 72 */
+ -1, /* plane 7, row 73 */
+ -1, /* plane 7, row 74 */
+ -1, /* plane 7, row 75 */
+ -1, /* plane 7, row 76 */
+ -1, /* plane 7, row 77 */
+ -1, /* plane 7, row 78 */
+ -1, /* plane 7, row 79 */
+ -1, /* plane 7, row 80 */
+ -1, /* plane 7, row 81 */
+ -1, /* plane 7, row 82 */
+ -1, /* plane 7, row 83 */
+ -1, /* plane 7, row 84 */
+ -1, /* plane 7, row 85 */
+ -1, /* plane 7, row 86 */
+ -1, /* plane 7, row 87 */
+ -1, /* plane 7, row 88 */
+ -1, /* plane 7, row 89 */
+ -1, /* plane 7, row 90 */
+ -1, /* plane 7, row 91 */
+ -1, /* plane 7, row 92 */
+ -1, /* plane 7, row 93 */
+ -1, /* plane 7, row 94 */
+ /* plane 8: --- */
+ /* plane 9: --- */
+ /* plane 10: --- */
+ /* plane 11: --- */
+ /* plane 12: --- */
+ /* plane 13: --- */
+ /* plane 14: --- */
+ 79296, /* plane 15, row 1; 332/380 bytes (87.4%) */
+ 79486, /* plane 15, row 2; 322/380 bytes (84.7%) */
+ 79676, /* plane 15, row 3; 338/380 bytes (88.9%) */
+ 79866, /* plane 15, row 4; 334/380 bytes (87.9%) */
+ 80056, /* plane 15, row 5; 342/380 bytes (90.0%) */
+ 80246, /* plane 15, row 6; 348/380 bytes (91.6%) */
+ 80436, /* plane 15, row 7; 346/380 bytes (91.1%) */
+ 80626, /* plane 15, row 8; 340/380 bytes (89.5%) */
+ 80816, /* plane 15, row 9; 354/380 bytes (93.2%) */
+ 81006, /* plane 15, row 10; 362/380 bytes (95.3%) */
+ 81196, /* plane 15, row 11; 364/380 bytes (95.8%) */
+ 81386, /* plane 15, row 12; 354/380 bytes (93.2%) */
+ 81576, /* plane 15, row 13; 342/378 bytes (90.5%) */
+ 81765, /* plane 15, row 14; 350/378 bytes (92.6%) */
+ 81954, /* plane 15, row 15; 358/380 bytes (94.2%) */
+ 82144, /* plane 15, row 16; 364/380 bytes (95.8%) */
+ 82334, /* plane 15, row 17; 340/380 bytes (89.5%) */
+ 82524, /* plane 15, row 18; 332/380 bytes (87.4%) */
+ 82714, /* plane 15, row 19; 350/380 bytes (92.1%) */
+ 82904, /* plane 15, row 20; 362/380 bytes (95.3%) */
+ 83094, /* plane 15, row 21; 366/376 bytes (97.3%) */
+ 83282, /* plane 15, row 22; 342/378 bytes (90.5%) */
+ 83471, /* plane 15, row 23; 328/380 bytes (86.3%) */
+ 83661, /* plane 15, row 24; 348/380 bytes (91.6%) */
+ 83851, /* plane 15, row 25; 356/376 bytes (94.7%) */
+ 84039, /* plane 15, row 26; 362/380 bytes (95.3%) */
+ 84229, /* plane 15, row 27; 344/380 bytes (90.5%) */
+ 84419, /* plane 15, row 28; 336/374 bytes (89.8%) */
+ 84606, /* plane 15, row 29; 358/380 bytes (94.2%) */
+ 84796, /* plane 15, row 30; 336/378 bytes (88.9%) */
+ 84985, /* plane 15, row 31; 352/374 bytes (94.1%) */
+ 85172, /* plane 15, row 32; 352/380 bytes (92.6%) */
+ 85362, /* plane 15, row 33; 362/380 bytes (95.3%) */
+ 85552, /* plane 15, row 34; 354/380 bytes (93.2%) */
+ 85742, /* plane 15, row 35; 350/380 bytes (92.1%) */
+ 85932, /* plane 15, row 36; 370/380 bytes (97.4%) */
+ 86122, /* plane 15, row 37; 356/380 bytes (93.7%) */
+ 86312, /* plane 15, row 38; 368/380 bytes (96.8%) */
+ 86502, /* plane 15, row 39; 360/380 bytes (94.7%) */
+ 86692, /* plane 15, row 40; 364/380 bytes (95.8%) */
+ 86882, /* plane 15, row 41; 344/380 bytes (90.5%) */
+ 87072, /* plane 15, row 42; 364/380 bytes (95.8%) */
+ 87262, /* plane 15, row 43; 352/380 bytes (92.6%) */
+ 87452, /* plane 15, row 44; 352/380 bytes (92.6%) */
+ 87642, /* plane 15, row 45; 344/380 bytes (90.5%) */
+ 87832, /* plane 15, row 46; 358/380 bytes (94.2%) */
+ 88022, /* plane 15, row 47; 350/380 bytes (92.1%) */
+ 88212, /* plane 15, row 48; 350/376 bytes (93.1%) */
+ 88400, /* plane 15, row 49; 336/376 bytes (89.4%) */
+ 88588, /* plane 15, row 50; 354/380 bytes (93.2%) */
+ 88778, /* plane 15, row 51; 336/380 bytes (88.4%) */
+ 88968, /* plane 15, row 52; 356/380 bytes (93.7%) */
+ 89158, /* plane 15, row 53; 362/376 bytes (96.3%) */
+ 89346, /* plane 15, row 54; 354/380 bytes (93.2%) */
+ 89536, /* plane 15, row 55; 356/380 bytes (93.7%) */
+ 89726, /* plane 15, row 56; 346/380 bytes (91.1%) */
+ 89916, /* plane 15, row 57; 346/380 bytes (91.1%) */
+ 90106, /* plane 15, row 58; 364/380 bytes (95.8%) */
+ 90296, /* plane 15, row 59; 354/380 bytes (93.2%) */
+ 90486, /* plane 15, row 60; 366/380 bytes (96.3%) */
+ 90676, /* plane 15, row 61; 348/376 bytes (92.6%) */
+ 90864, /* plane 15, row 62; 352/380 bytes (92.6%) */
+ 91054, /* plane 15, row 63; 370/380 bytes (97.4%) */
+ 91244, /* plane 15, row 64; 352/380 bytes (92.6%) */
+ 91434, /* plane 15, row 65; 350/380 bytes (92.1%) */
+ 91624, /* plane 15, row 66; 338/380 bytes (88.9%) */
+ 91814, /* plane 15, row 67; 356/380 bytes (93.7%) */
+ 92004, /* plane 15, row 68; 316/380 bytes (83.2%) */
+ 92194, /* plane 15, row 69; 340/380 bytes (89.5%) */
+ 92384, /* plane 15, row 70; 358/380 bytes (94.2%) */
+ 92574, /* plane 15, row 71; 356/380 bytes (93.7%) */
+ 92764, /* plane 15, row 72; 356/380 bytes (93.7%) */
+ 92954, /* plane 15, row 73; 352/380 bytes (92.6%) */
+ 93144, /* plane 15, row 74; 354/380 bytes (93.2%) */
+ 93334, /* plane 15, row 75; 338/380 bytes (88.9%) */
+ 93524, /* plane 15, row 76; 330/372 bytes (88.7%) */
+ 93710, /* plane 15, row 77; 94/104 bytes (90.4%) */
+ -1, /* plane 15, row 78 */
+ -1, /* plane 15, row 79 */
+ -1, /* plane 15, row 80 */
+ -1, /* plane 15, row 81 */
+ -1, /* plane 15, row 82 */
+ -1, /* plane 15, row 83 */
+ -1, /* plane 15, row 84 */
+ -1, /* plane 15, row 85 */
+ -1, /* plane 15, row 86 */
+ -1, /* plane 15, row 87 */
+ -1, /* plane 15, row 88 */
+ -1, /* plane 15, row 89 */
+ -1, /* plane 15, row 90 */
+ -1, /* plane 15, row 91 */
+ -1, /* plane 15, row 92 */
+ -1, /* plane 15, row 93 */
+ -1, /* plane 15, row 94 */
+ /* plane 16: --- */
+};
+
+sal_Int32 const aImplCns116431992ToUnicodePlaneOffsets[] = {
+ 0 * 94, /* plane 1; 264/376 bytes (70.2%) */
+ 1 * 94, /* plane 2; 328/376 bytes (87.2%) */
+ 2 * 94, /* plane 3; 284/376 bytes (75.5%) */
+ 3 * 94, /* plane 4; 312/376 bytes (83.0%) */
+ 4 * 94, /* plane 5; 368/376 bytes (97.9%) */
+ 5 * 94, /* plane 6; 272/376 bytes (72.3%) */
+ 6 * 94, /* plane 7; 280/376 bytes (74.5%) */
+ -1, /* plane 8 */
+ -1, /* plane 9 */
+ -1, /* plane 10 */
+ -1, /* plane 11 */
+ -1, /* plane 12 */
+ -1, /* plane 13 */
+ -1, /* plane 14 */
+ 7 * 94, /* plane 15; 308/376 bytes (81.9%) */
+ -1, /* plane 16 */
+};
+
+sal_uInt8 const aImplUnicodeToCns116431992Data[] = {
+ /* plane 0, page 0 */
+ 167, 247, /* first, last */
+ 1, 1,80,
+ 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, 2,88, 1, 2,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2,18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2,19,
+ /* plane 0, page 1: --- */
+ /* plane 0, page 2 */
+ 199, 217, /* first, last */
+ 1, 5,79,
+ 0, 0, 0, 1, 5,77, 1, 5,78, 1, 5,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 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, 5,76,
+ /* plane 0, page 3 */
+ 145, 201, /* first, last */
+ 1, 4,85, 1, 4,86, 1, 4,87, 1, 4,88, 1, 4,89, 1, 4,90, 1, 4,91,
+ 1, 4,92, 1, 4,93, 1, 4,94, 1, 5, 1, 1, 5, 2, 1, 5, 3, 1, 5, 4, 1, 5, 5,
+ 1, 5, 6, 1, 5, 7, 0, 0, 0, 1, 5, 8, 1, 5, 9, 1, 5,10, 1, 5,11, 1, 5,12,
+ 1, 5,13, 1, 5,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 5,15, 1, 5,16, 1, 5,17, 1, 5,18, 1, 5,19, 1, 5,20, 1, 5,21,
+ 1, 5,22, 1, 5,23, 1, 5,24, 1, 5,25, 1, 5,26, 1, 5,27, 1, 5,28, 1, 5,29,
+ 1, 5,30, 1, 5,31, 0, 0, 0, 1, 5,32, 1, 5,33, 1, 5,34, 1, 5,35, 1, 5,36,
+ 1, 5,37, 1, 5,38,
+ /* plane 0, page 4: --- */
+ /* plane 0, page 5: --- */
+ /* plane 0, page 6: --- */
+ /* plane 0, page 7: --- */
+ /* plane 0, page 8: --- */
+ /* plane 0, page 9: --- */
+ /* plane 0, page 10: --- */
+ /* plane 0, page 11: --- */
+ /* plane 0, page 12: --- */
+ /* plane 0, page 13: --- */
+ /* plane 0, page 14: --- */
+ /* plane 0, page 15: --- */
+ /* plane 0, page 16: --- */
+ /* plane 0, page 17: --- */
+ /* plane 0, page 18: --- */
+ /* plane 0, page 19: --- */
+ /* plane 0, page 20: --- */
+ /* plane 0, page 21: --- */
+ /* plane 0, page 22: --- */
+ /* plane 0, page 23: --- */
+ /* plane 0, page 24: --- */
+ /* plane 0, page 25: --- */
+ /* plane 0, page 26: --- */
+ /* plane 0, page 27: --- */
+ /* plane 0, page 28: --- */
+ /* plane 0, page 29: --- */
+ /* plane 0, page 30: --- */
+ /* plane 0, page 31: --- */
+ /* plane 0, page 32 */
+ 19, 62, /* first, last */
+ 1, 1,25, 1, 1,23, 0, 0, 0, 1, 2,61, 0, 0, 0,
+ 1, 1,68, 1, 1,69, 0, 0, 0, 0, 0, 0, 1, 1,70, 1, 1,71, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,13, 1, 1,12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 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,74, 0, 0, 0, 0, 0, 0, 1, 1,75, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,79, 0, 0, 0, 0, 0, 0, 1, 2, 3,
+ /* plane 0, page 33 */
+ 3, 153, /* first, last */
+ 1, 2,74, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 2,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 4,11, 1, 4,12, 1, 4,13, 1, 4,14, 1, 4,15, 1, 4,16, 1, 4,17, 1, 4,18,
+ 1, 4,19, 1, 4,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 6,21, 1, 6,22, 1, 6,23, 1, 6,24, 1, 6,25, 1, 6,26, 1, 6,27, 1, 6,28,
+ 1, 6,29, 1, 6,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 2,56, 1, 2,53, 1, 2,55, 1, 2,54, 0, 0, 0, 0, 0, 0, 1, 2,57, 1, 2,58,
+ 1, 2,60, 1, 2,59,
+ /* plane 0, page 34 */
+ 21, 191, /* first, last */
+ 1, 2,65, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,28, 1, 2,41,
+ 1, 2,40, 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, 2,37, 1, 2,38, 1, 2,45, 0, 0, 0, 0, 0, 0, 1, 2,46, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,48, 1, 2,47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 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, 2,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 2,27, 1, 2,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,25, 1, 2,26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2,42,
+ /* plane 0, page 35: --- */
+ /* plane 0, page 36 */
+ 0, 125, /* first, last */
+ 1,34, 1, 1,34, 2, 1,34, 3, 1,34, 4, 1,34, 5, 1,34, 6, 1,34, 7, 1,34, 8,
+ 1,34, 9, 1,34,10, 1,34,11, 1,34,12, 1,34,13, 1,34,14, 1,34,15, 1,34,16,
+ 1,34,17, 1,34,18, 1,34,19, 1,34,20, 1,34,21, 1,34,22, 1,34,23, 1,34,24,
+ 1,34,25, 1,34,26, 1,34,27, 1,34,28, 1,34,29, 1,34,30, 1,34,31, 1,34,32,
+ 0, 0, 0, 1,34,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 6, 1, 1, 6, 2, 1, 6, 3, 1, 6, 4, 1, 6, 5, 1, 6, 6, 1, 6, 7, 1, 6, 8,
+ 1, 6, 9, 1, 6,10, 0, 0, 0, 0, 0, 0, 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, 6,11, 1, 6,12, 1, 6,13, 1, 6,14,
+ 1, 6,15, 1, 6,16, 1, 6,17, 1, 6,18, 1, 6,19, 1, 6,20,
+ /* plane 0, page 37 */
+ 0, 229, /* first, last */
+ 1, 3,25, 0, 0, 0, 1, 3,26, 0, 0, 0, 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, 3,28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 3,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,30, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 3,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,21, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,20, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 3,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3,37, 0, 0, 0,
+ 0, 0, 0, 1, 3,39, 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, 3,38, 0, 0, 0, 0, 0, 0, 1, 3,32, 1, 3,33, 1, 3,35,
+ 1, 3,34, 1, 3,44, 1, 3,45, 1, 3,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 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, 3, 4, 1, 3, 5, 1, 3, 6, 1, 3, 7, 1, 3, 8, 1, 3, 9, 1, 3,10,
+ 1, 3,11, 1, 3,18, 1, 3,17, 1, 3,16, 1, 3,15, 1, 3,14, 1, 3,13, 1, 3,12,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,24, 1, 3,27, 0, 0, 0, 0, 0, 0,
+ 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,92, 1, 1,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 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,85, 1, 1,84, 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,94, 1, 1,93, 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,90, 1, 1,89,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,82, 0, 0, 0, 0, 0, 0, 1, 1,86, 1, 1,83,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 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, 3,40, 1, 3,41, 1, 3,43, 1, 3,42,
+ /* plane 0, page 38 */
+ 5, 66, /* first, last */
+ 1, 1,88, 1, 1,87, 0, 0, 0,
+ 0, 0, 0, 1, 2,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 2,49, 1, 2,51, 1, 2,50,
+ /* plane 0, page 39: --- */
+ /* plane 0, page 40: --- */
+ /* plane 0, page 41: --- */
+ /* plane 0, page 42: --- */
+ /* plane 0, page 43: --- */
+ /* plane 0, page 44: --- */
+ /* plane 0, page 45: --- */
+ /* plane 0, page 46: --- */
+ /* plane 0, page 47: --- */
+ /* plane 0, page 48 */
+ 0, 251, /* first, last */
+ 1, 1, 1, 1, 1, 3, 1, 1, 4, 1, 1,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1,50, 1, 1,51, 1, 1,46, 1, 1,47, 1, 1,54, 1, 1,55, 1, 1,58, 1, 1,59,
+ 1, 1,42, 1, 1,43, 1, 2,69, 0, 0, 0, 1, 1,38, 1, 1,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,72, 1, 1,73, 0, 0, 0,
+ 0, 0, 0, 1, 4,21, 1, 4,22, 1, 4,23, 1, 4,24, 1, 4,25, 1, 4,26, 1, 4,27,
+ 1, 4,28, 1, 4,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6,
+ /* plane 0, page 49 */
+ 5, 41, /* first, last */
+ 1, 5,39, 1, 5,40, 1, 5,41,
+ 1, 5,42, 1, 5,43, 1, 5,44, 1, 5,45, 1, 5,46, 1, 5,47, 1, 5,48, 1, 5,49,
+ 1, 5,50, 1, 5,51, 1, 5,52, 1, 5,53, 1, 5,54, 1, 5,55, 1, 5,56, 1, 5,57,
+ 1, 5,58, 1, 5,59, 1, 5,60, 1, 5,61, 1, 5,62, 1, 5,63, 1, 5,64, 1, 5,65,
+ 1, 5,66, 1, 5,67, 1, 5,68, 1, 5,69, 1, 5,70, 1, 5,71, 1, 5,72, 1, 5,73,
+ 1, 5,74, 1, 5,75,
+ /* plane 0, page 50 */
+ 163, 163, /* first, last */
+ 1, 2, 1,
+ /* plane 0, page 51 */
+ 142, 213, /* first, last */
+ 1, 2,85, 1, 2,86,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2,80, 1, 2,81, 1, 2,82, 0, 0, 0,
+ 0, 0, 0, 1, 2,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2,87, 0, 0, 0, 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, 2,83, 0, 0, 0,
+ 0, 0, 0, 1, 2,44, 1, 2,43, 0, 0, 0, 0, 0, 0, 1, 2,79,
+ /* plane 0, page 52 */
+ 0, 254, /* first, last */
+ 6, 2,12, 4, 2, 4, 0, 0, 0, 0, 0, 0, 6, 1,16, 6, 1, 3,15, 1,76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1,55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8,21, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,20,27, 0, 0, 0, 0, 0, 0, 3,25,77, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 7,33, 3, 8,76, 0, 0, 0, 3, 3, 3, 4, 3,23, 4, 5,20, 3,32,20, 0, 0, 0,
+ 4, 1,57, 3, 1,85, 3, 1,78, 3, 1,81, 3, 1,83, 0, 0, 0,15, 1,36, 0, 0, 0,
+ 6, 3,46, 3, 2,81, 4, 2,17, 3, 2,73, 3, 2,74, 0, 0, 0,15, 1,82, 0, 0, 0,
+ 0, 0, 0, 5, 3,20, 3, 4,42, 3, 4,39, 3, 4,45, 6, 5,81, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 7,38, 5, 5, 5, 4, 5,25, 4, 5,28, 3, 7,37, 5, 5,11, 4, 5,27,
+ 4, 5,24, 3, 7,48, 0, 0, 0,15, 5,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,11,17,
+ 6,14,58, 4, 8,25, 3,11,16, 5, 8, 1, 4, 8,26, 3,11,10, 4, 8,23, 4, 8,28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,11,76, 3,20,41, 3,15,50, 4,11,69, 6,21,24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,16,37, 3,20,30,
+ 3,20,40, 4,16,42, 0, 0, 0, 4,22,24, 3,25,83, 4,22,18, 4,22,23, 6,38,53,
+ 0, 0, 0, 6,41,91, 3,25,84, 3,32,21, 3,32,24, 3,32,27, 4,28,12, 4,28,13,
+ 4,28, 8, 4,28,10, 5,36,55, 4,34,23, 4,34,19, 4,34,14, 3,37,88, 6,58,83,
+ 4,34,15, 3,37,83, 4,47,57, 3,37,82, 3,37,79, 3,37,87, 4,34,18, 0, 0, 0,
+ 0, 0, 0, 4,40,91, 3,43, 6, 3,43, 5, 4,40,93, 3,43, 4, 3,43, 8, 3,43,10,
+ 0, 0, 0, 3,48,18, 4,47,61, 5,51,57, 4,47,59, 3,52,31, 3,55,51, 4,58,71,
+ 4,58,72, 4,63,41, 0, 0, 0, 0, 0, 0, 4,67,15, 3,60,19, 3,60,17, 7,50,84,
+ 7,55,44, 4,74,33, 3,65,28, 4, 2,19,15, 6,58, 4,11,73, 0, 0, 0, 3,55,52,
+ 3, 1,86, 0, 0, 0, 3, 2,89, 3, 4,53, 5, 3,23, 6, 5,91, 6, 5,93, 3, 4,54,
+ 3,11,24, 7,45,29, 3,10,44, 4,16,44, 5,17, 6, 4,22,29, 4,28,18, 4,74,34,
+ 0, 0, 0, 0, 0, 0, 3,11,26, 3,25,88, 4,41, 2, 3, 1,48, 0, 0, 0, 3, 3, 1,
+ 3, 4,56, 5, 5,14, 3, 7,55, 3, 7,54, 3, 7,56, 0, 0, 0, 4, 8,35, 3,11,28,
+ 3,15,61, 3,15,60, 0, 0, 0, 4,16,45, 3,25,91, 3,25,92, 4,28,20, 3,37,89,
+ 5,17, 9, 0, 0, 0, 4, 1,65, 6, 2,33, 3, 1,94, 4, 2,28, 5, 2,16, 4, 3,30,
+ 4, 3,31, 4, 5,42, 4, 5,44, 4, 5,40, 4, 5,39, 0, 0, 0, 0, 0, 0, 3,11,33,
+ 3,11,37, 3,11,34, 0, 0, 0, 0, 0, 0, 5,11,92, 4,16,51, 3,15,71, 3,15,73,
+ 0, 0, 0, 4,16,55, 4,16,56, 4,16,50, 5,17,12, 4,16,52, 4,16,57, 3,26, 4,
+ 6,48,76, 4,22,34, 4,22,37, 3,26, 2, 5,29,80, 3,32,34, 4,34,33,
+ /* plane 0, page 53 */
+ 0, 255, /* first, last */
+ 4,34,35, 4,34,34, 4,34,28, 3,37,93, 3,37,91, 4,34,31, 4,34,30, 3,37,92,
+ 0, 0, 0, 0, 0, 0, 4,41, 3, 4,47,66, 4,47,65, 4,47,67, 5,65,27, 4,53,76,
+ 7,30,93, 4,63,42, 4,67,16, 4, 1,68, 0, 0, 0, 4, 2,32, 0, 0, 0, 4, 3,36,
+ 3, 4,68, 4, 5,47, 6, 9,79, 0, 0, 0, 6,15, 7, 4,11,85, 3,15,75, 0, 0, 0,
+ 4,16,58, 4,22,43, 3,38, 2, 4,53,79, 3,52,35, 4,53,80, 5,51,67, 4,58,78,
+ 4,16,60, 4,22,45, 5,29,88, 0, 0, 0, 6, 9,82, 3,20,51, 5,80,88, 4, 3,43,
+ 6, 6,24, 4,11,87, 3,26, 5, 6,48,86, 4,28,30, 5,36,76, 4,77,51, 6, 6,22,
+ 4,22,48, 3, 1,56, 6, 3,81, 3, 3,12, 6,48,90, 3, 7,68, 4, 1,11, 6, 1,27,
+ 6, 8,68, 4, 5,54, 3, 3,16, 5, 2,28, 3, 3,14, 3, 4,74, 3, 4,73, 3, 4,72,
+ 3, 7,72, 6,10,10, 3,11,44, 3,15,80, 4,11,90, 3,15,81, 4,22,49, 6,49, 2,
+ 5,44,17, 3,38, 4, 4,41, 7, 0, 0, 0, 3,64,80, 3, 1,61, 3,15,82, 6,29,65,
+ 3,20,54, 4,41, 9, 5, 1,33, 3, 1,63, 3, 3,18, 0, 0, 0, 4, 5,58, 4, 8,55,
+ 3,31,88, 3,38, 7, 4,39,54, 4, 1,75, 3, 2,16, 3, 2,12, 3, 3,24, 3, 3,22,
+ 0, 0, 0, 3, 4,76, 4, 3,49, 3, 4,75, 3, 4,81, 4, 3,52, 4, 3,57, 3, 4,82,
+ 4, 3,51, 3, 4,79, 3, 4,78, 3, 4,90, 0, 0, 0,15, 3,41, 3, 5, 5, 3, 7,90,
+ 3, 7,77, 4, 5,61, 3, 7,86, 5, 5,34, 6,10,25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3,11,50, 3,11,64, 3,11,63, 3,11,66, 3,11,58, 4, 8,57, 4, 8,60, 3,11,54,
+ 15, 9,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,12, 5,
+ 3,15,93, 4,11,94, 3,15,85, 3,15,92, 4,12, 1, 4,11,93, 6,21,93, 3,16, 4,
+ 5,12,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,20,61,
+ 3,20,69, 4,16,74, 5,22,80, 3,20,67, 3,20,60, 4,16,80, 3,20,58, 4,16,83,
+ 4,16,81, 4,16,77, 4,16,76,15,19,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,24,51, 4,16,79, 5,22,86, 3,26,18,
+ 4,22,71, 3,26,21, 3,26,12, 4,22,62, 4,22,57, 3,26,25, 3,26,30, 3,26,13,
+ 4,22,64, 3,26,29, 4,22,63, 3,26,23, 6,39,25, 5,22,89, 5,22,90, 3,26,16,
+ 4,22,56, 4,22,69, 4,22,67, 3,26,33, 5,22,78, 3,26,31, 0, 0, 0, 0, 0, 0,
+ 3,26,26, 0, 0, 0, 0, 0, 0, 5,30,25, 4,28,42, 4,28,38, 3,32,47, 5,30,29,
+ 4,28,39, 4,28,44, 3,32,45, 3,32,48, 6,49,18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,34,50, 3,38,18, 3,38,15, 3,38,13, 4,34,47, 4,34,42,
+ 4,34,53, 3,38,11, 3,43,26, 4,34,51, 4,34,54, 4,34,49, 0, 0, 0, 0, 0, 0,
+ 5,37, 2, 4,41,16, 4,41,12, 3,43,34, 4,41,13, 3,43,22, 7, 1,46, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,47,75, 4,47,76, 3,48,33, 4,47,71, 4,47,74,
+ /* plane 0, page 54 */
+ 0, 254, /* first, last */
+ 4,47,79, 3,48,28, 3,48,26, 0, 0, 0, 0, 0, 0, 7,23,23, 4,53,82, 3,52,38,
+ 4,53,83, 4,47,77, 5,65,32, 4,58,80, 3,55,54, 5,65,37, 0, 0, 0, 0, 0, 0,
+ 4,63,44, 5,71,57, 0, 0, 0, 5,75,83, 3,60,21, 3,62, 7, 4,70,18, 0, 0, 0,
+ 0, 0, 0, 3,64,14, 3,64,13, 4,76,76, 7,66,15, 3, 2,18, 3, 2, 1, 3, 3,29,
+ 5, 5,51, 3, 7,94, 3,11,68, 3,16, 6, 4,34,56, 4,67,18, 3, 2,19, 3, 5,14,
+ 4, 3,63, 3, 5,25, 3, 5,26, 4, 3,62, 3, 5,29, 3, 5,31, 0, 0, 0, 3, 5,27,
+ 3, 5,20, 3, 8, 7, 4, 5,77, 3, 8,11, 3, 8,12, 0, 0, 0, 3,11,86, 6,15,69,
+ 3,11,84, 3,11,85, 3,11,83, 3,11,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,16, 9,
+ 4,12,15, 4,12,17, 3,16,13, 3,16,12, 3,16,14, 3,16,17, 0, 0, 0, 3,20,76,
+ 3,20,77, 3,20,83, 3,20,74,15,19,55, 0, 0, 0, 4,17, 1, 4,22,75, 3,26,38,
+ 4,22,78, 3,26,49, 6,39,46, 3,26,40, 0, 0, 0, 3,26,45, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,28,57, 4,28,59, 3,32,51, 3,32,53, 4,28,54, 4,28,56, 0, 0, 0,
+ 4,34,62, 4,34,61, 4,34,59, 3,38,27, 4,34,63, 3,38,25, 0, 0, 0, 7, 1,74,
+ 3,43,50, 3,43,40, 4,41,19, 3,43,42, 3,43,46,15,46, 5,15,46,14, 4,41,10,
+ 3,48,36, 4,47,88, 3,48,39, 3,48,34, 3,48,35, 3,48,38, 3,48,37, 4,53,92,
+ 3,52,45, 3,52,42, 4,53,91, 7,31,16, 3,55,61, 0, 0, 0, 7,38,36, 0, 0, 0,
+ 5,75,86, 3,64,82, 4,76,78, 5,23,28, 3,45,33, 3,11,88, 0, 0, 0, 4, 8,65,
+ 0, 0, 0, 5, 5,56, 4,22,87, 4,34,64, 3,38,39, 4,58,90, 3, 2,26, 3, 3,38,
+ 3, 3,40, 0, 0, 0, 4, 3,69, 3, 5,42, 4, 5,81, 5, 5,57, 4, 5,87, 4, 5,83,
+ 4, 5,88, 0, 0, 0, 3,11,93, 0, 0, 0, 4,17, 5, 6,30,34, 3,20,90, 3,26,53,
+ 4,28,60, 3,48,30, 3, 1,84, 3, 3,44, 3, 3,42, 4, 2,54, 4, 2,57, 4, 2,53,
+ 3, 3,41, 3, 5,50, 3, 5,55, 3, 5,48, 3, 5,47, 3, 5,45, 3, 5,52, 0, 0, 0,
+ 3, 8,17, 3, 8,27, 4, 5,91, 3, 8,34, 3, 8,18, 3, 8,26, 3, 8,35, 3, 8,39,
+ 3, 8,20, 4, 6, 1, 3, 8,36, 3, 8,30, 3, 8,22, 3, 8,28, 5, 5,61, 3, 8,25,
+ 0, 0, 0, 3, 8,16, 4, 8,77, 4, 8,73, 3,11,94, 3,12, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,10,10, 4, 8,71, 0, 0, 0, 0, 0, 0, 3,16,31, 3,16,34, 3,16,29,
+ 3,16,41, 3,16,39, 4,12,27, 3,16,35, 3,16,48, 3,16,44, 3,16,36, 4,12,31,
+ 4,12,26, 3,16,25, 4,12,28, 3,16,49, 3,16,38, 3,16,33, 3,16,26, 0, 0, 0,
+ 0, 0, 0,15,14,75,15,14,88, 0, 0, 0, 0, 0, 0, 4,17, 9, 3,21, 6, 3,21,13,
+ 3,21, 1, 3,21,22, 4,17, 8, 3,21,12, 3,21, 3, 3,21, 5, 3,26,81, 3,26,71,
+ 3,26,84, 3,26,68, 3,26,86, 3,26,76, 3,26,74, 3,26,69, 5,23,46, 3,26,78,
+ 5,23,38, 4,22,94, 3,26,79, 3,26,63, 4,22,93, 3,26,80, 3,26,61,
+ /* plane 0, page 55 */
+ 1, 255, /* first, last */
+ 15,26,28, 3,26,77, 3,26,73, 3,26,72, 4,28,63, 3,32,66, 4,28,65,
+ 3,32,78, 3,32,77, 3,32,72, 3,32,67, 4,28,68, 3,32,69, 4,28,67, 3,32,80,
+ 3,32,75, 3,32,79, 3,32,76, 3,32,73, 0, 0, 0, 3,38,43, 4,34,71, 4,34,76,
+ 4,34,72, 4,34,70, 3,38,41, 3,38,50, 3,38,49, 4,34,75, 4,34,77, 0, 0, 0,
+ 3,38,45, 3,38,46, 4,34,73, 4,41,28, 4,41,26, 3,43,57, 3,43,55, 4,41,32,
+ 3,43,53, 3,48,50, 3,48,53, 4,48, 1,15,52,10, 0, 0, 0, 4,54, 2, 4,54, 4,
+ 3,55,63, 3,55,64, 4,63,52, 5,71,62, 3,58,16, 3,58,18, 3,60,23, 4,67,21,
+ 3,60,24, 4,70,23, 4,72,69, 3,65,66, 3,65,67, 3, 3,46, 6, 6,88, 4, 3,77,
+ 3, 8,41, 4, 8,80, 4,12,33, 3,16,52, 3,26,93, 4,28,71, 0, 0, 0, 7,13,13,
+ 3,65,29, 0, 0, 0, 3, 2,28, 0, 0, 0, 3, 3,47, 6, 6,89, 3, 5,57, 4, 3,80,
+ 3, 5,59, 6, 6,90, 3, 8,47, 5, 8,78, 3,12,16, 3,12,17, 3,12,19, 4,12,34,
+ 5,12,92, 6,22,61, 0, 0, 0, 3,21,34, 3,21,29, 3,21,30, 4,17,14, 6,30,58,
+ 3,21,32, 0, 0, 0, 3,27, 1, 4,23, 2, 4,28,74, 4,28,76, 4,28,79, 3,32,87,
+ 0, 0, 0, 4,34,84, 4,34,85, 3,43,64, 4,34,87, 4,41,35, 4,41,37, 4,41,38,
+ 4,58,93, 3,62,11, 7,66,21, 0, 0, 0, 4, 3,81, 4, 6, 6, 6,22,72, 3,27, 2,
+ 4,12,44, 6,30,68, 4,34,88, 5,44,67, 4, 2,61, 4, 3,84, 4, 6, 8, 4, 6, 7,
+ 4, 8,84, 4, 8,85, 4,12,45, 5,17,85, 4,17,19, 5,17,83, 4,17,18, 4,23, 8,
+ 4,23, 9, 4,28,81, 4,34,89, 3, 2,32, 3, 3,51, 0, 0, 0, 0, 0, 0, 4, 6,10,
+ 3, 8,50, 3, 8,51, 4, 8,89, 4, 8,88, 3,12,25, 3,12,24, 3,12,22, 4,12,46,
+ 6,30,75, 3,21,37, 4,23,11, 5,23,70, 4,34,93, 0, 0, 0, 0, 0, 0, 4,41,42,
+ 0, 0, 0, 3,58,23, 3, 1,66, 4, 3,87, 3, 2,34, 3, 2,35, 3, 2,33, 3, 2,36,
+ 3, 3,54, 4, 2,65, 5, 2,49, 4, 3,91, 5, 2,48, 3, 3,55, 0, 0, 0, 3, 3,56,
+ 4, 3,88, 4, 3,89, 3, 5,64, 5, 3,80, 5, 3,84, 3, 5,68, 3, 5,69, 4, 3,86,
+ 0, 0, 0, 3, 8,59, 6,10,91, 4, 6,17, 4, 6,18, 4, 6,14, 3, 8,54, 6,10,86,
+ 3, 8,57, 3, 8,58, 0, 0, 0, 5, 5,78, 3,12,26, 4, 8,91, 0, 0, 0, 4,12,59,
+ 4,12,51, 4,12,49, 3,16,64, 4,12,63, 4,12,53, 3,16,60, 4,12,58, 4,12,62,
+ 4,12,55, 3,16,61, 6,22,92, 5,13,14, 3,16,69, 0, 0, 0, 4,12,52, 3,21,54,
+ 3,21,41, 4,17,23, 3,21,44, 4,17,29, 6,30,85, 3,21,45, 4,17,25, 6,30,88,
+ 3,21,48, 0, 0, 0,15,20,31, 0, 0, 0, 0, 0, 0, 3,21,51, 3,27,15, 3,27,18,
+ 3,27, 9, 4,23,18, 4,23,20, 3,27,21, 4,28,82, 3,27,16, 0, 0, 0, 3,27,12,
+ 4,28,86, 4,28,83, 4,28,94, 5,30,77, 4,29, 1, 6,50,20, 3,32,91, 0, 0, 0,
+ 4,28,87, 4,35, 2, 6,60,36, 4,35,13, 4,35,10, 4,35, 1, 3,38,53, 4,35, 4,
+ /* plane 0, page 56 */
+ 0, 255, /* first, last */
+ 3,38,59, 3,38,56, 4,35,14, 0, 0, 0, 3,38,55, 4,41,48, 4,41,44, 5,44,76,
+ 3,43,66, 5,44,72, 4,41,43, 4,41,51, 3,43,68, 4,41,47, 4,41,45, 3,43,65,
+ 4,41,52, 4,48, 6, 4,48, 7, 4,54, 8, 4,48, 5, 5,52,22, 3,48,57, 7,13,44,
+ 3,52,58, 3,52,54, 5,59,28, 4,54, 7, 3,52,56, 7,31,36, 0, 0, 0, 0, 0, 0,
+ 4,63,58, 5,71,67, 5,71,68, 0, 0, 0, 0, 0, 0, 4,70,26, 3,62,12, 4,72,72,
+ 5,91,29, 3, 3,59, 6, 1,78, 0, 0, 0, 0, 0, 0, 3,27,24, 4,41,53, 3, 2,37,
+ 0, 0, 0, 4,17,34, 3, 2,38, 0, 0, 0, 4, 2,69, 4, 2,70, 3, 3,61, 4, 4, 2,
+ 4, 4, 4, 3, 5,73, 4, 4, 1, 3, 5,74,15, 4, 5, 4, 6,22, 4, 6,23, 4, 9, 5,
+ 4, 4, 5, 4, 9, 2, 4, 9, 4, 6,16,67, 3,12,39, 4, 9, 3, 4, 9, 1, 4,12,70,
+ 4,12,72, 4,17,39, 4,17,40, 4,17,37, 4,17,41, 0, 0, 0, 3,21,60, 4,23,27,
+ 4,23,22, 4,23,29, 4,23,26, 3,27,28, 4,23,28, 3,27,25, 4,23,25, 4,29, 8,
+ 4,29, 3, 4,29, 7, 4,29, 6, 4,29, 9, 4,35,19, 4,35,18, 4,35,17, 4,35,15,
+ 3,43,78, 0, 0, 0, 3,43,79, 4,48, 9, 0, 0, 0, 4,54,13, 4,54,11, 4,67,27,
+ 4,67,26, 3,63,36, 4,72,75, 6,40,36, 0, 0, 0, 3,38,62, 4,48,11, 3, 3,64,
+ 3, 3,63, 3, 3,62, 3, 5,76, 6, 7,39, 4, 6,24, 4, 6,29, 4, 6,27, 5, 6, 6,
+ 4, 6,28, 3, 8,68, 4, 6,26, 3, 8,70,15,15,24, 3,12,41, 3,12,42, 4, 9,10,
+ 5, 9, 6, 4, 9, 9, 4, 9, 8, 4,12,75, 4,12,77, 4,12,76, 3,16,77, 0, 0, 0,
+ 3,21,62, 4,17,46, 4,17,44, 4,17,47, 3,21,61, 5,24, 9, 4,23,32, 4,23,33,
+ 3,27,33, 5,31, 1, 4,35,22, 3,38,63, 4,35,25, 4,35,26, 4,41,59, 4,41,60,
+ 3,43,81, 3,48,61, 4,48,12, 4,48,14, 5,52,34, 4,63,62, 4,67,28, 4, 4, 9,
+ 3, 8,74, 3,38,66, 0, 0, 0, 7,13,59, 0, 0, 0, 4, 9,11, 4,29,13, 6, 1,89,
+ 4, 2,74, 3, 3,67, 3, 3,68, 0, 0, 0, 3, 5,80, 0, 0, 0, 3, 8,79, 4, 6,32,
+ 4, 6,33, 0, 0, 0, 3,12,46, 4, 9,13, 6,16,90, 4, 9,14, 3,12,47, 0, 0, 0,
+ 4,12,81, 0, 0, 0, 5,18,38, 4,17,49, 4,12,82, 3,27,38, 3,27,35, 0, 0, 0,
+ 5,31, 9, 4,29,15, 4,29,14, 6,50,45, 4,41,61, 4,41,63, 3,62,14, 4, 6,34,
+ 4,48,17, 6, 4,80, 0, 0, 0, 3, 8,83, 4, 6,35, 3, 8,82, 3,21,68, 3,27,40,
+ 3,27,41, 4,35,27, 4,41,65, 3,48,63, 3, 2,43, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,11,30, 3, 8,84, 4, 9,18, 4, 9,20, 3,12,50, 5, 9,15, 5, 9,19, 3,12,51,
+ 6,17, 5, 0, 0, 0, 5,13,39,15,15,30, 4,17,52, 3,21,70, 3,21,71, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,23,41, 3,27,42, 4,23,40, 0, 0, 0, 4,29,19,
+ 5,37,73, 4,35,29, 6,60,71, 0, 0, 0, 0, 0, 0, 3,48,64, 4,48,20, 4,54,15,
+ 0, 0, 0, 0, 0, 0, 6, 1,94, 3, 3,69, 3, 3,72, 4, 4,17, 5, 2,71, 4, 2,80,
+ /* plane 0, page 57 */
+ 1, 255, /* first, last */
+ 3, 8,91, 3, 8,93, 3, 5,89, 4, 4,14, 3, 8,92, 4, 4,16, 4, 4,19,
+ 3, 5,83, 4, 4,15, 4, 4,18, 3, 6, 4, 3, 8,89, 4, 9,21, 4, 9,23, 4, 6,45,
+ 3,12,57, 3, 9, 4, 4, 6,40, 3, 9, 3, 4, 6,46, 4, 6,44, 4, 6,38,15,10,30,
+ 0, 0, 0, 3,12,56, 4, 9,33, 3,12,66, 4, 9,28, 4, 6,41, 4, 9,25, 3,16,93,
+ 6,23,52, 4, 9,29, 5, 9,21, 4,13, 8, 4, 9,40, 4, 9,26, 4, 9,27, 4, 9,32,
+ 3,12,53, 6,23,58, 3,16,92, 0, 0, 0, 3,12,62, 0, 0, 0, 4,17,59, 5,13,58,
+ 3,21,83, 4,13, 2, 3,21,73, 3,16,85, 4,13, 3, 3,21,80, 4,13, 4, 3,16,87,
+ 6,23,62, 3,17, 4, 4,13,11, 4,17,58, 0, 0, 0, 0, 0, 0, 4,17,60, 4,17,66,
+ 3,21,75, 6,40,79, 4,17,67, 3,21,85, 4,17,64, 5,18,59, 4,17,61, 3,21,76,
+ 3,27,46, 4,17,76, 4,17,71, 3,27,44, 3,21,77, 3,21,87, 3,27,55, 4,17,68,
+ 6,40,85, 3,27,51, 4,17,70, 4,17,62, 5,13,55, 3,27,50, 5,24,34, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,17,74, 5,24,40, 4,23,54, 4,23,48, 3,27,60, 4,23,57,
+ 3,27,63, 4,23,52, 4,23,46, 5,31,18, 3,33, 5, 4,23,53, 4,29,30, 3,27,64,
+ 4,29,23, 5,18,56, 0, 0, 0, 3,27,59, 3,33, 6, 3,33,13, 4,29,27, 4,35,35,
+ 5,31,34, 6,50,73, 3,38,71, 4,29,26, 4,29,28, 3,33,16, 3,38,69, 4,35,34,
+ 4,35,48, 3,38,70, 3,33,15, 0, 0, 0, 4,35,40, 4,35,39, 4,35,41, 3,43,93,
+ 4,35,45, 4,41,69, 3,44, 2, 3,38,73, 3,43,91, 4,35,42, 4,35,44, 4,35,38,
+ 0, 0, 0, 3,44, 7, 3,43,88, 4,35,43, 4,48,24, 3,44,10, 4,41,71, 4,41,73,
+ 4,41,72, 4,41,75, 7, 2,92, 4,41,77, 3,48,73, 4,41,76, 3,44, 6, 4,48,25,
+ 5,59,44, 0, 0, 0, 4,59, 3, 4,59, 9, 4,54,22, 4,59, 5, 3,55,71, 4,59, 4,
+ 15,58, 9, 3,55,70, 4,48,26, 5,71,88, 4,67,35, 4,63,68, 5,71,83, 7,39,12,
+ 3,62,16, 4,67,34, 4,67,32, 3,63,39, 4,72,76, 3,65,88, 3, 3,74, 3, 6, 6,
+ 4, 6,52, 0, 0, 0, 6,11,50, 0, 0, 0, 4,13,15, 4,13,16, 5,13,61, 3,21,90,
+ 3,27,69, 4,29,34, 4,35,52, 5,45,23, 3,44,11, 3,52,66, 6, 7,78, 4, 6,53,
+ 4, 6,54, 4, 9,45, 3,12,68, 4, 1,91, 4, 1,90, 3, 2,47, 4, 2,84, 4, 2,83,
+ 4, 2,85, 4, 4,26, 4, 4,22, 3, 6,12, 3, 6,13, 3, 6,16, 3, 6,11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 6,56, 3, 9,13, 5, 6,26, 3, 9,12, 3, 9,24, 4, 9,53,
+ 4,13,19, 4, 6,57, 3, 9,11, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7,14, 0, 0, 0,
+ 0, 0, 0, 4, 9,46, 4, 9,52, 3,12,70, 3, 9, 7, 3,12,71, 3,12,73, 4,13,28,
+ 3,12,81, 4, 9,54, 3,12,72, 4, 9,50, 4,13,18, 4,13,17, 3,12,74, 3,12,69,
+ 0, 0, 0, 3,17,20, 3,17,10, 3,21,91, 3,17,17, 3,17,26, 4,13,27, 3,17,13,
+ 3,17,11, 4,17,92, 4,18, 1, 4,17,91, 3,22,12, 6,32,18, 4,18, 5, 3,22,15,
+ /* plane 0, page 58 */
+ 0, 253, /* first, last */
+ 3,22,16, 4,17,89, 3,21,94, 4,17,81, 3,22, 5, 4,17,94, 4,17,90, 3,27,75,
+ 3,22,10, 4,23,78, 4,23,66, 3,22, 1, 4,29,37, 3,33,17, 4,23,68, 3,27,74,
+ 4,23,75, 4,23,72, 4,23,69, 3,27,76, 3,27,73, 4,23,80, 4,23,65, 3,27,78,
+ 0, 0, 0, 4,29,48, 4,29,47, 3,33,23, 4,29,44, 4,29,42, 3,33,21, 3,33,27,
+ 4,29,40, 4,29,46, 3,33,28, 3,33,42, 3,33,35, 3,33,31, 3,33,39, 3,33,32,
+ 3,33,38, 3,33,33, 3,33,25, 0, 0, 0, 0, 0, 0, 4,35,56, 4,35,65, 6,61,18,
+ 3,38,89, 3,39,14, 3,39,13, 4,35,54, 3,38,92, 3,39, 7, 3,39,15, 4,35,60,
+ 3,38,87, 5,38, 5, 3,38,93, 4,41,85, 3,44,22, 4,35,68, 5,38, 3, 3,39,11,
+ 3,39,12, 0, 0, 0, 0, 0, 0, 4,42, 4, 3,44,19, 7, 3,26, 4,41,89, 4,41,90,
+ 4,41,86, 4,42, 8, 4,42, 2, 5,45,26, 4,41,94, 5,45,30, 3,44,28, 0, 0, 0,
+ 4,42, 3, 0, 0, 0, 3,48,84, 4,54,25, 4,48,37, 3,48,83, 3,48,78, 3,48,88,
+ 3,48,82, 3,48,81, 3,52,69, 3,52,74, 3,52,72, 3,52,67, 3,52,70, 0, 0, 0,
+ 4,59,13, 3,55,73, 4,59,18, 4,59,16, 4,59,14, 3,55,79, 3,55,81, 4,59,17,
+ 3,55,72, 4,59,15, 3,55,82,15,62,83, 3,58,29, 3,58,30, 0, 0, 0, 4,67,39,
+ 3,60,32, 4,67,38, 5,80, 4, 3,62,18, 4,70,32, 3,64,17, 4,74,41, 4,74,40,
+ 0, 0, 0, 5,89,10, 4, 6,59, 4,13,32, 4,13,31, 4,18, 7, 4,29,52, 4, 4,32,
+ 3, 6,26, 4, 6,62, 4, 6,63, 0, 0, 0, 4, 9,61, 3,12,85, 0, 0, 0, 3,17,30,
+ 4,13,34, 6,24,11, 0, 0, 0, 3,22,19, 4,18, 8, 3,22,21, 4,18,12, 4,23,89,
+ 0, 0, 0, 4,23,85, 4,23,88, 4,23,87, 0, 0, 0, 4,23,86, 5,24,92, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,27,87, 0, 0, 0, 4,29,60, 4,29,57, 4,29,59, 3,33,44,
+ 4,35,70, 5,38,16, 5,38,14, 4,35,73, 4,42,11, 4,42,10, 4,42, 9, 0, 0, 0,
+ 4,48,41, 4,48,44, 0, 0, 0, 3,55,83, 4,59,26, 4,67,44, 4,70,35, 3, 6,27,
+ 6,24,12, 3,33,47, 0, 0, 0, 0, 0, 0, 3, 9,26, 4, 9,65, 3,17,33, 3,25,11,
+ 3,27,88, 4,42,14, 4,54,30, 4,74,43, 4, 9,66, 0, 0, 0, 4,13,41, 6,24,16,
+ 6,41,65, 6,61,49, 5,45,43, 3, 3,81, 6,11,80, 6,24,20, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,22,27, 3,22,30, 0, 0, 0, 4,29,69, 4,42,16, 4,42,17,
+ 4, 2,88, 4, 2,89, 4, 4,35, 3, 6,28, 3, 6,31, 3, 6,30, 0, 0, 0, 3, 6,32,
+ 3, 9,31, 3, 9,29, 4, 6,67, 5, 9,47, 4, 9,67, 3,12,91, 4, 9,68, 4, 9,69,
+ 3,12,88, 3,13, 6, 0, 0, 0, 0, 0, 0, 6,17,71, 4,13,44, 4,18,27, 4,13,43,
+ 0, 0, 0, 3,17,39, 6,24,23, 3,17,42,15,15,78, 0, 0, 0, 4,13,45, 6,32,49,
+ 4,18,22, 4,18,26, 4,18,23, 3,22,35, 6,32,47, 3,28, 2, 4,23,94, 3,27,90,
+ 3,27,91, 4,24, 5, 3,28, 7, 4,24, 2, 6,41,83, 3,28, 1,
+ /* plane 0, page 59 */
+ 1, 255, /* first, last */
+ 6,51,29, 5,31,66, 3,33,50, 3,33,55, 3,33,58, 3,33,53, 3,33,51,
+ 3,33,60, 3,33,56, 4,29,72, 4,29,71, 3,33,52, 3,39,24, 4,35,78, 3,39,18,
+ 3,39,22, 0, 0, 0, 5,45,51, 4,42,18, 3,44,34, 3,44,37, 0, 0, 0, 4,48,50,
+ 4,48,49, 3,49, 1, 5,45,48, 3,48,91, 3,48,92, 4,48,51, 7,14,58, 0, 0, 0,
+ 3,52,83, 3,52,78, 4,54,32, 4,59,32, 0, 0, 0, 4,59,33, 4,59,31, 7,31,86,
+ 0, 0, 0, 3,58,32, 3,58,33, 3,60,36, 3,63,44, 3,63,45, 5,85,78, 5,85,77,
+ 3, 3,84, 4,48,54, 3,52,84, 3, 9,36, 3,17,46, 5,14, 5, 3,22,41, 0, 0, 0,
+ 3,28, 8, 4,26,35, 0, 0, 0, 5,38,37, 5,45,56, 0, 0, 0, 0, 0, 0, 3,49, 5,
+ 0, 0, 0, 3, 3,86, 3, 6,35, 4, 4,40, 3, 6,38, 0, 0, 0, 0, 0, 0, 3, 9,43,
+ 3, 9,38,15, 7,44, 3, 9,48, 3, 9,45, 5, 6,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,13, 8, 3,13,12, 4, 9,79, 4, 9,76, 3,13, 9, 0, 0, 0, 0, 0, 0,
+ 4,13,55, 4,13,49, 4,13,52, 4,13,56, 3,17,50, 5,14,11, 4,13,50, 4,13,59,
+ 3,17,53, 4,13,54, 3,17,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3,22,57, 4,18,35, 3,22,42, 3,22,47, 5,18,89, 4,18,34, 4,18,38, 4,18,33,
+ 4,24,20, 3,22,56, 3,22,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,24,15, 3,28,14, 4,24,12, 3,28,31, 3,28,16, 4,24,10, 5,25,19, 4,24,13,
+ 3,28,12, 5,25,25, 4,24,21, 3,28,21, 4,24,23, 3,28,22, 3,28,35, 3,28,11,
+ 3,28,13, 0, 0, 0, 0, 0, 0, 4,29,88, 3,33,81, 3,33,70, 3,33,80, 4,29,75,
+ 4,29,78, 4,29,79, 3,33,76, 3,33,73, 3,33,68, 4,29,77, 3,33,62, 4,29,85,
+ 3,33,66, 3,33,67, 3,33,90, 3,33,65, 3,33,63, 4,36, 3, 4,29,86, 3,33,64,
+ 0, 0, 0, 3,34,58, 0, 0, 0, 3,33,71,15,40,53, 4,36, 4, 4,35,85, 4,36, 1,
+ 4,35,92, 3,39,31, 4,35,88, 4,35,83, 3,39,33, 4,35,84, 3,39,42, 4,35,93,
+ 4,35,94, 4,35,90, 4,36, 2, 3,39,47, 3,39,32, 4,36, 5, 4,35,81, 5,38,43,
+ 3,39,41, 4,29,82, 3,39,48, 0, 0, 0,15,40,50, 0, 0, 0, 0, 0, 0, 3,44,46,
+ 5,45,77, 4,42,26, 3,44,44, 5,45,65, 3,44,51, 4,42,23, 4,42,22, 3,44,61,
+ 3,44,56, 7, 3,79, 4,42,24, 4,42,34, 3,44,58, 3,44,60, 3,44,40, 3,44,53,
+ 3,49,35, 0, 0, 0, 0, 0, 0, 3,49,34, 4,48,64, 4,48,58, 3,49,23, 3,49,16,
+ 4,48,57, 4,42,25, 3,49,31, 3,49,10, 3,49,29, 4,54,41, 3,49,19, 3,49,25,
+ 3,44,43, 4,48,62, 3,49,13, 4,48,68, 3,49,21, 3,49,20, 3,49,22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,53, 2, 4,54,40, 3,52,94, 3,53, 5, 3,52,93, 4,54,43,
+ 7,24,53, 5,59,72, 3,52,87, 3,53, 6,15,63, 9, 3,52,89, 3,53, 8, 4,59,40,
+ 4,59,36, 3,55,92, 4,59,42, 4,59,41, 0, 0, 0, 0, 0, 0, 4,63,79, 4,63,83,
+ /* plane 0, page 60 */
+ 0, 255, /* first, last */
+ 3,58,41, 4,63,80, 4,63,78, 4,63,82, 4,63,85, 3,58,44, 3,58,43,15,66,51,
+ 3,58,42, 3,60,44, 3,60,38, 4,67,49, 4,67,47, 3,60,40, 3,60,45, 4,67,52,
+ 3,60,43, 3,60,37,15,69,30, 0, 0, 0, 5,80, 7, 3,62,22, 3,60,42, 3,63,48,
+ 4,72,78, 3,64,21, 3,64,19, 3,64,20, 0, 0, 0, 5, 4,40, 6, 8,16, 4, 6,77,
+ 5, 6,54, 4, 6,80, 4, 6,76, 4,13,64, 4, 9,80, 4, 9,81, 6,17,88, 4, 9,84,
+ 4, 9,83, 5,14,14, 4,13,61, 4,13,65, 4,13,66, 4,13,62, 3,22,65, 4,18,40,
+ 4,18,41, 6,32,78, 4,24,27, 4,24,25, 3,28,38, 5,25,35, 4,24,28, 6,24,68,
+ 0, 0, 0, 4,30, 1, 4,29,92, 4,29,91, 4,29,93, 4,29,94, 4,30, 2, 3,39,50,
+ 6,61,87, 4,36,10, 4,42,44, 3,44,72, 4,48,70, 4,48,71, 4,54,47, 4,54,46,
+ 3,53,10, 3,53,12, 4,63,87, 7,46, 2, 4,72,81, 5,85,87, 5,89,15, 6, 5, 5,
+ 0, 0, 0, 0, 0, 0, 3,13,30, 0, 0, 0, 3,11,91, 3,28,40, 4,24,31, 5,38,63,
+ 3,56, 4, 4, 2,92, 3, 9,55, 5, 6,66, 4, 6,85, 0, 0, 0, 3,13,31, 3,13,33,
+ 3,13,32, 3,17,73, 3,22,67, 4,18,42, 4,24,37, 4,24,36, 4,24,38, 4,24,34,
+ 3,28,42, 0, 0, 0, 3,34, 3, 4,30, 3, 4,30, 4, 3,34, 4, 0, 0, 0, 4,36,18,
+ 5,38,64, 4,36,19, 4,36,16, 4,42,48, 4,42,47, 4,48,75, 4,48,74, 0, 0, 0,
+ 4,54,49, 4,67,53, 3,60,46, 5,85,88, 5, 4,46, 4, 6,88, 4,13,68, 3,17,75,
+ 4,18,47, 4,24,41, 4,24,42, 4,24,43, 3,34, 5, 4,36,21, 3,49,39, 3,49,40,
+ 4,48,78, 4,54,51, 3,56, 5, 4, 9,91, 3, 3,91, 4, 6,89, 3, 9,59, 4, 6,90,
+ 0, 0, 0,15, 7,59, 3,13,35, 4,13,70, 4,18,50, 4,18,52, 4,18,51, 4,18,53,
+ 3,22,71, 4,13,71, 4,18,49, 5,25,59, 3,28,44, 4,24,47, 4,24,44, 4,30, 9,
+ 3,34, 7, 4,30, 8, 4,30, 7, 4,36,31, 4,36,24, 4,36,25, 4,36,26, 5,38,72,
+ 4,36,28, 0, 0, 0, 4,48,79, 4,48,81, 4,48,82, 3,49,41, 0, 0, 0, 4,59,48,
+ 4,59,47, 3,58,48, 4,77,55, 4,13,74, 3, 9,60, 3,22,72, 3,44,73, 3,49,42,
+ 4, 1,47, 3, 2,54, 3, 2,53, 3, 4, 2, 5, 1,84, 4, 3, 2, 3, 6,52, 0, 0, 0,
+ 3, 6,47, 4, 4,47, 3, 6,61, 6, 8,41, 3, 6,58, 4, 4,49, 3, 6,43, 6, 8,42,
+ 6, 8,36, 0, 0, 0, 3, 6,56, 3, 9,65, 3, 9,63, 3, 9,62, 3, 9,66, 3, 9,64,
+ 4, 6,94, 3, 9,72, 3, 9,70,15, 7,70, 0, 0, 0, 0, 0, 0, 3,13,36, 5,10, 4,
+ 4, 7, 2, 3,13,52, 5, 9,91, 5, 9,92, 4, 9,94, 3,13,54, 3,13,44,15,16,41,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,24,82, 3,17,80, 3,17,81, 4,13,75,
+ 6,25,19, 3,17,84, 4,13,76, 3,22,73, 3,18, 4, 3,18, 3, 3,17,94, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,17,85, 4,18,55, 3,22,81, 4,18,67, 4,18,68,
+ 3,22,78, 4,18,62, 3,23, 2, 3,22,77, 3,28,47, 3,22,94, 4,18,56, 4,18,72,
+ /* plane 0, page 61 */
+ 0, 255, /* first, last */
+ 5,25,62, 4,18,58, 4,18,60, 6,33,11, 5,19,29, 3,28,62, 3,22,91, 3,28,63,
+ 3,22,83, 6,33,33, 3,22,88, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,22,19, 4,24,49,
+ 4,24,54, 3,28,69, 4,24,50, 3,28,57, 4,24,57, 3,28,74, 3,28,71, 3,28,53,
+ 4,24,55, 4,24,58, 3,28,51, 3,28,55, 3,28,65, 3,34,11, 6,42,77, 0, 0, 0,
+ 15,28,35,15,28,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,30,23, 3,34,12, 3,34,23,
+ 3,34,21, 3,34,40, 3,34,24, 4,30,16, 4,30,25, 4,30,13, 3,34,34, 4,30,24,
+ 3,34,20, 3,34,28, 4,30,28, 3,34,15, 3,34,33, 5,32, 7, 4,30,15, 4,30,18,
+ 3,34,18, 0, 0, 0, 0, 0, 0, 3,34,35, 3,39,53, 4,36,41, 3,39,64, 6,62,27,
+ 3,39,57, 6,52,48, 3,39,56, 4,36,38, 4,36,45, 4,36,42, 6,62,32, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,44,78, 4,42,63, 4,42,65, 3,44,79, 3,44,92, 4,42,72,
+ 4,42,61, 3,44,77, 4,42,57, 3,44,82, 5,38,88, 7, 4,65, 3,44,80, 4,48,84,
+ 3,49,43, 3,44,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,48,87, 4,48,93, 5,53,22,
+ 4,48,86, 3,49,47, 3,49,46, 4,48,90, 5,53,13, 3,49,51, 3,49,55, 4,48,91,
+ 4,54,54, 3,49,49, 3,49,44, 4,48,88, 3,49,50, 4,42,66, 5,53,14, 3,53,18,
+ 3,53,24, 4,54,62, 4,54,64, 3,53,20, 4,54,56, 3,53,14, 4,54,55, 4,54,60,
+ 3,53,27, 4,54,57, 4,54,59, 3,53,19, 0, 0, 0, 4,59,54, 4,59,52, 4,59,58,
+ 4,59,55, 4,59,64, 0, 0, 0, 0, 0, 0, 4,63,91, 4,63,93, 4,59,59, 4,63,89,
+ 3,58,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,60,48, 4,67,58, 4,67,62, 4,67,59,
+ 0, 0, 0, 3,60,50, 4,70,41, 5,80,30, 4,70,42, 4,70,44, 4,72,83, 3,62,25,
+ 3,62,24, 0, 0, 0, 3,63,49, 4,74,46, 3,64,24, 0, 0, 0, 4,75,77, 4,75,78,
+ 3,65,70, 3, 4,10, 0, 0, 0, 4, 4,50, 3, 6,65,15, 4,78, 3, 9,78, 4, 7, 7,
+ 3, 9,88,15, 7,78, 3, 9,83, 3,13,71, 3,13,57, 3,13,70, 3,13,65, 3,13,64,
+ 3,13,59, 0, 0, 0, 4,10, 7, 3,18,14, 4,13,83, 3,18,18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,23,11, 3,23,10, 3,23,20, 4,18,81, 0, 0, 0, 4,18,86, 4,18,80,
+ 4,18,87,15,22,40, 3,28,86, 4,24,69, 4,24,65, 3,28,85, 4,24,66, 4,24,68,
+ 4,24,64, 3,27, 3, 3,28,94, 3,28,80, 0, 0, 0, 3,28,88, 3,34,52, 3,34,45,
+ 3,34,54, 4,30,43, 3,34,42, 3,34,53, 4,30,40, 4,30,38, 4,30,41, 6,52,52,
+ 3,34,43, 3,34,48,15,34,88,15,35,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,36,57,
+ 3,39,83, 3,39,73, 6,52,71, 4,36,54, 4,36,58, 4,36,60, 3,39,81, 0, 0, 0,
+ 15,41,56, 0, 0, 0, 0, 0, 0, 3,45, 6, 3,45, 3, 3,45,11, 3,45, 1, 3,45, 7,
+ 4,42,74, 0, 0, 0, 0, 0, 0, 4,49, 5, 3,49,61, 3,49,59, 4,49,11, 3,49,63,
+ 3,49,65, 4,49, 4, 0, 0, 0, 3,49,68, 3,49,69, 0, 0, 0, 3,53,29, 4,54,66,
+ /* plane 0, page 62 */
+ 0, 255, /* first, last */
+ 3,53,31, 3,53,36, 7,25, 6, 3,55,49, 3,56,12, 4,54,68, 0, 0, 0, 0, 0, 0,
+ 3,60,58, 3,58,57, 3,60,52, 3,60,59, 4,67,63, 4,70,46, 5,83,55, 4,74,48,
+ 3,64,26, 3,65,90, 4, 7,12, 3, 9,90, 3,23,56, 3,39,84, 3,13,74, 4,13,86,
+ 3,23,22, 4,24,75, 3, 9,91, 4,10,12, 4,24,76, 3, 9,93, 3, 9,94, 5,14,51,
+ 6,25,32, 4,13,90, 4,36,63, 7,25,13, 4,59,68, 4,70,48, 3, 1,74, 3,18,19,
+ 4, 3, 6, 3, 6,69, 4, 4,53, 6,12,81, 4, 7,19, 5, 6,87, 4, 7,18, 4, 7,15,
+ 3,13,76, 3,13,79, 4,10,14, 3,13,78, 0, 0, 0, 3,18,20, 3,18,21, 4,13,93,
+ 4,13,92, 4,18,90, 5,19,45, 4,18,89, 4,18,94, 3,23,24, 6,33,70, 0, 0, 0,
+ 3,23,23, 4,24,80, 4,24,82, 4,24,83, 4,36,67, 6,52,88, 4,30,46, 3,34,62,
+ 0, 0, 0, 4,36,66, 4,36,64, 4,36,68, 4,42,79, 4,42,78, 4,42,82, 4,42,81,
+ 4,42,83, 4,49,14, 4,49,16, 4,49,15, 4,54,71, 3,53,38, 3,53,39, 4,59,70,
+ 4,59,69, 4,64, 4, 7,51,75, 4,74,49, 4, 7,20, 4, 4,57, 3, 6,77, 4, 4,54,
+ 3, 6,76, 6,12,85, 4, 7,25, 5, 7,14, 3,10, 9, 3,10, 4, 3,10, 5, 4, 7,26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,10,18, 4,10,20, 4,10,21, 3,13,82, 6,18,71,
+ 0, 0, 0, 3,18,23, 5,14,60, 4,14, 1, 4,13,94, 4,14, 2, 4,14, 6, 6,33,77,
+ 4,14, 7, 5,19,49, 4,19, 8, 6,33,85, 4,19, 9, 4,19, 5, 4,19,11, 4,19, 7,
+ 4,19,14, 4,24,89, 4,24,87, 3,29,12, 4,24,91, 6,43,35, 0, 0, 0, 4,36,69,
+ 4,30,52, 4,36,70, 4,30,51, 3,34,64, 4,30,50, 0, 0, 0, 4,36,74, 6,62,78,
+ 4,36,73, 4,36,72, 4,36,71, 3,39,86, 4,24,90, 4,42,91, 4,42,86, 4,42,90,
+ 4,42,92, 0, 0, 0, 7,15,84, 4,49,18, 4,49,20, 3,53,40, 4,54,74, 4,54,75,
+ 4,59,71, 5,72,27, 0, 0, 0, 4,67,69, 4,67,70, 4,67,71, 4,67,67, 4,75,79,
+ 3, 4,14, 4, 3, 9, 3, 4,16, 3, 4,17, 3, 6,81, 3, 6,79, 3, 6,80, 0, 0, 0,
+ 3,10,14, 3,13,86, 6,13, 1, 3,10,16, 4, 7,27, 3,10,17, 0, 0, 0, 3,13,93,
+ 3,18,26, 4,10,23, 4,10,24, 0, 0, 0, 0, 0, 0,15,12,18, 0, 0, 0, 4,19,15,
+ 3,18,35, 3,18,36, 3,18,27, 4,19,16, 3,18,37, 0, 0, 0, 0, 0, 0,15,17, 7,
+ 3,18,34, 3,23,31, 3,23,34, 3,23,33, 4,19,19, 3,23,30, 3,23,35, 0, 0, 0,
+ 0, 0, 0, 3,29,20, 4,24,93, 5,26,13, 3,34,67, 3,29,17, 3,29,16, 3,34,76,
+ 0, 0, 0,15,22,57,15,29,27, 0, 0, 0, 0, 0, 0, 4,30,57, 3,34,69, 3,34,73,
+ 5,32,46, 3,34,82,15,35,41,15,35,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,40, 4,
+ 7, 5,23, 0, 0, 0, 0, 0, 0, 4,43, 2, 4,43, 1, 3,45,23, 3,45,28, 3,45,19,
+ 3,45,24, 3,45,20, 3,45,18, 0, 0, 0, 0, 0, 0, 3,49,72, 5,53,61, 4,49,23,
+ 3,49,73, 3,53,42, 4,54,79,15,53,90,15,54, 2, 3,53,46, 4,59,73, 3,53,44,
+ /* plane 0, page 63 */
+ 1, 255, /* first, last */
+ 15,59,13, 3,56,17, 0, 0, 0, 4,64,10,15,66,88,15,66,91, 3,60,65,
+ 0, 0, 0, 4,10,25, 4,10,26, 5,14,66, 4,14,11, 4,19,21, 4,19,20, 4,24,94,
+ 4,36,80, 4,36,81, 4,36,79, 4,43, 3, 4,43, 4, 4,59,76, 4,77,58, 4, 4,62,
+ 5, 7,18, 3,10,20, 3,14, 3, 4,10,29, 3,18,42, 3,18,43, 4,14,13, 3,18,41,
+ 4,14,12, 4,19,27, 4,25, 1, 4,19,26, 4,19,24, 4,19,25, 4,19,23, 4,25, 3,
+ 4,25, 6, 4,19,28, 4,25, 4, 4,30,66, 4,30,65, 4,30,61, 4,30,64, 3,34,86,
+ 4,30,67, 5,39,40, 4,36,83, 4,36,86, 4,36,84, 4,36,88, 4,36,87, 4,36,85,
+ 4,43, 5, 4,43, 7, 4,43, 6, 4,49,31, 3,49,79, 4,49,34, 4,49,33, 4,54,82,
+ 4,54,83, 3,53,49, 4,54,85, 3,53,48, 4,54,81, 0, 0, 0, 4,59,79, 4,59,78,
+ 4,64,12, 4,64,11, 4,72,85, 4,75,80, 4,74,51, 3,18,44, 4,30,69, 0, 0, 0,
+ 3,45,31, 4,54,88, 3,29,32,15,48,46, 0, 0, 0, 5, 4,67, 6, 8,66, 3, 6,82,
+ 4,10,33, 3,14, 9, 4,10,35, 4,14,15, 4,14,17, 5,19,68, 3,23,40, 3,29,33,
+ 4,25, 8, 4,30,73, 3,34,89, 3,34,90, 4,30,72, 4,36,89, 3,45,32, 4,43,10,
+ 4,43, 9, 4,49,36, 5,60,15, 4,59,82, 4,59,83, 4,64,14, 4,67,73, 4,74,52,
+ 4,30,77, 4, 4,65, 4, 4,66, 0, 0, 0, 5, 7,23, 3,10,28, 0, 0, 0, 4,10,38,
+ 3,14,13, 4,10,41, 3,14,12, 3,14,14, 0, 0, 0, 3,18,54, 4,14,23, 4,14,27,
+ 4,14,21, 4,14,22, 3,18,52, 4,14,19, 4,14,31, 4,14,25, 6,25,75, 3,18,51,
+ 4,14,24, 4,14,26, 5,19,77, 4,19,34, 3,23,44, 4,19,32, 4,14,28, 4,19,31,
+ 4,19,37, 3,23,43, 4,19,35, 4,25,18, 4,25,19, 3,29,38, 3,29,43, 6,43,58,
+ 3,29,41, 4,25,22, 5,32,64, 4,25,15, 4,25,16, 3,29,40, 3,29,42, 5,26,27,
+ 4,25,21, 4,25,24, 4,30,84, 5,32,68, 4,30,79, 4,30,88, 4,30,78, 4,30,86,
+ 4,30,83, 4,30,90, 4,37, 4, 4,37, 8, 6,63,13, 3,40,10, 3,40,12, 4,37, 3,
+ 4,37, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5,56, 4,43,24,
+ 3,45,34, 4,43,23, 4,43,21, 4,43,19, 4,43,15, 7, 5,60, 4,43,14, 5,39,57,
+ 0, 0, 0, 4,43,27, 7,16,22, 4,49,40, 4,49,41, 3,49,85, 4,49,46, 4,49,42,
+ 4,49,48, 4,55, 6, 4,55, 2, 4,59,91, 4,59,87, 7,32,75, 4,55, 5, 7,32,71,
+ 0, 0, 0, 4,64,18, 4,64,15, 4,64,16, 0, 0, 0, 4,70,56, 4,70,57, 3,62,32,
+ 5,83,60, 4,74,53, 4,75,82, 4,75,81, 3,66,13, 3, 6,85, 3,14,16, 3,18,56,
+ 0, 0, 0, 3,23,46, 3,35, 2, 3,40,13, 5,39,59, 5,46,57, 4,49,54, 4,64,23,
+ 4,70,59, 4,76,83, 4, 7,38, 4,10,46, 3,14,17, 4,14,38, 4,14,37, 4,19,39,
+ 4,19,40, 4,25,26, 6,53,50, 4,37,16, 4,37,18, 3,40,15, 3,45,35, 4,43,29,
+ 4,49,55, 4,59,94, 4,67,76, 4, 7,40, 4,10,49, 4,10,48, 4,14,39, 4,14,41,
+ /* plane 0, page 64 */
+ 0, 255, /* first, last */
+ 3,18,57, 4,19,43, 3,23,47, 3,29,46, 3,35, 3, 5,32,79, 3,40,18, 4,49,58,
+ 4,37,22, 4,55,12, 4,64,24, 3,63,24, 0, 0, 0, 4,78,40, 3, 6,89, 4, 4,69,
+ 4, 7,46, 4, 7,47, 4, 7,45, 4, 7,44, 4, 7,42, 4,10,51, 4,10,54, 4,10,55,
+ 4,10,52, 4,10,56, 5,10,77, 4,10,58, 6,19,24, 0, 0, 0, 3,14,20, 4,14,50,
+ 3,18,61, 3,18,70, 3,18,64, 4,14,45, 3,18,65, 0, 0, 0, 0, 0, 0, 5,19,86,
+ 4,19,48, 4,19,49, 3,23,54, 3,23,52, 4,19,50, 4,19,46, 4,19,45, 3,29,48,
+ 4,25,41, 3,29,52, 4,25,42, 3,29,53, 4,25,37, 4,25,40, 4,25,31, 4,25,33,
+ 4,25,43, 4,25,38, 4,25,45, 4,25,39, 4,25,35, 4,31, 2, 4,25,44, 4,25,34,
+ 0, 0, 0, 4,31,16, 4,31,13, 3,35, 4, 4,31, 5, 4,31, 6, 4,31, 7, 4,31,11,
+ 4,31,12, 6,53,65, 5,39,65, 4,37,25, 4,37,33, 4,37,28, 4,37,23, 3,40,23,
+ 4,37,35, 4,37,38, 4,37,31, 4,37,36, 3,40,26, 4,37,24, 0, 0, 0, 3,45,37,
+ 4,43,37, 4,43,34, 4,43,36, 4,43,39, 4,43,35, 4,43,45, 3,45,39, 5,46,64,
+ 4,43,31, 0, 0, 0, 3,49,87, 3,49,88, 4,49,60, 4,49,64, 3,49,92, 3,49,90,
+ 4,49,61, 4,49,68, 0, 0, 0, 4,55,18, 4,55,14, 4,55,17, 4,55,15, 3,53,58,
+ 4,55,16, 4,55,19, 4,55,20, 5,54, 2, 5,66,73, 4,60, 7, 4,60, 9, 4,60,10,
+ 4,60, 5, 3,56,23, 4,60, 6, 4,67,80, 4,67,78, 4,67,81, 4,67,79, 4,70,61,
+ 3,62,33, 4,72,88, 4,74,55, 4,72,90, 4,76,85, 4,78,45, 4, 7,49, 4,10,63,
+ 4,19,55, 4,37,42, 3,53,61, 0, 0, 0, 4,55,24, 4,67,84, 4,75,85, 4,14,55,
+ 4,14,56, 4,19,58, 4,19,57, 6,44,11, 4,31,19, 4,37,44, 3, 4,18, 3, 6,90,
+ 4, 7,51,15, 8,90, 4,10,68, 3,14,24, 4,10,66, 3,14,28, 3,13,27, 4,14,63,
+ 4,14,60, 4,14,66, 5,15,20, 3,23,59, 3,18,74, 3,18,75, 4,14,62, 4,14,65,
+ 0, 0, 0, 4,19,62, 4,19,65, 3,23,60, 4,19,63, 3,23,58, 4,19,64, 3,23,62,
+ 3,29,59, 5,26,57, 6,44,19, 4,25,56, 3,29,56, 0, 0, 0, 4,25,51, 4,31,32,
+ 4,31,25, 4,31,31, 3,35,15, 4,31,28, 3,35,18, 4,31,29, 3,35,12, 4,31,30,
+ 4,31,24, 4,31,26, 4,31,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,31,34,
+ 4,37,46, 3,40,35, 4,37,49, 3,40,33, 4,37,45, 4,37,53, 4,37,47, 5,39,86,
+ 0, 0, 0, 4,43,60, 4,43,56, 4,43,54, 4,43,53, 4,43,62, 7, 6, 4, 4,43,59,
+ 3,50, 3, 3,49,93, 4,49,76, 3,49,94, 7,16,57, 5,54,19, 4,49,80, 0, 0, 0,
+ 4,49,77, 4,55,27, 4,55,33, 3,40,34, 4,55,25, 3,53,62, 3,53,63, 4,55,31,
+ 0, 0, 0, 3,56,33, 4,60,13, 3,56,29, 4,60,17, 4,60,15, 4,60,14, 0, 0, 0,
+ 4,64,31, 7,46,60, 3,60,67, 4,67,86, 4,67,85, 4,70,63, 4,70,64, 4,70,65,
+ 4,72,92, 4,72,91, 3,64,85, 3,65,71, 0, 0, 0, 3,14,31, 4,10,71, 4,10,70,
+ /* plane 0, page 65 */
+ 0, 254, /* first, last */
+ 6,19,40, 3,18,78, 4,14,68, 3,18,81, 3,23,68, 4,19,67, 4,19,66, 3,29,65,
+ 3,29,64, 4,25,57, 0, 0, 0, 4,31,37, 4,31,36, 3,35,26, 3,35,27, 3,35,30,
+ 4,31,39, 3,35,28, 3,35,31, 3,40,38, 5,40, 4, 3,40,41, 0, 0, 0, 0, 0, 0,
+ 5,46,86, 3,45,46, 4,49,86, 3,50, 5, 4,49,84, 4,49,85, 0, 0, 0, 4,55,34,
+ 3,56,38, 3,56,39, 3,58,68, 0, 0, 0, 4,70,67, 3,66,20, 5, 4,78, 3, 6,93,
+ 5, 7,38, 6,13,41, 4, 7,54, 3,10,32, 3,10,33, 3,10,35, 4,10,74, 4,10,79,
+ 4,10,75, 4,10,73, 4,10,76,15,12,77, 0, 0, 0, 0, 0, 0, 4,14,69, 3,18,85,
+ 3,18,90, 0, 0, 0, 6,34,70, 4,19,71, 4,19,70, 3,23,77, 4,19,69, 5,20,27,
+ 5,20,25, 4,19,74, 4,19,73, 4,19,75, 3,23,72, 4,19,77, 5,20,24, 3,23,78,
+ 15,23,27, 0, 0, 0, 4,19,68, 5,26,69, 4,25,62, 4,25,66, 3,29,71, 4,25,68,
+ 3,29,74, 4,25,67, 3,29,75, 4,25,65, 4,31,47, 3,35,32, 4,31,45, 3,35,37,
+ 4,31,44, 3,35,34, 4,31,43, 3,35,35, 4,37,55, 4,31,41, 5,33,17, 0, 0, 0,
+ 3,40,49, 3,40,42, 4,37,59, 3,40,51, 3,40,46, 4,37,58, 3,40,44, 4,37,56,
+ 6,63,75, 4,37,57, 0, 0, 0, 0, 0, 0, 4,43,69, 4,43,65, 3,45,52, 4,43,66,
+ 3,45,50, 7, 6,18, 3,45,56, 4,43,72, 4,43,70, 4,43,68, 3,45,57, 4,49,93,
+ 4,49,92, 3,50,11, 4,49,89, 4,49,88, 4,49,90, 3,50,13, 4,55,37, 3,53,67,
+ 4,55,39, 3,56,40, 7,33,14, 4,60,23, 4,60,21, 4,60,22, 0, 0, 0, 0, 0, 0,
+ 3,62,38, 4,67,89, 4,70,69, 7,56,44, 0, 0, 0, 4,70,68, 4,72,94, 4,73, 1,
+ 3,66,25, 4, 4,73, 6,13,46, 3,14,38, 3,14,37, 4,10,81, 4,10,82, 3,19, 1,
+ 3,18,94, 3,18,93, 4,19,79, 4,19,80, 3,23,79, 5,20,37, 4,19,82, 4,19,81,
+ 6,34,79, 3,29,76, 4,25,71, 3,29,77, 6,44,51, 3,29,78, 5,33,25, 4,31,51,
+ 4,31,50, 6,54, 7, 4,37,64, 6,63,88, 4,43,76, 5,47, 3, 0, 0, 0, 5,52, 4,
+ 4,50, 5, 4,50, 2, 4,50, 4, 7,16,79, 0, 0, 0, 3,53,69, 3,53,70, 4,55,44,
+ 4,55,45, 4,55,43, 4,55,47, 3,53,71, 4,60,25, 4,60,26, 4,64,40, 4,64,41,
+ 4,67,92, 4,73, 2, 3, 4,20, 3,10,38, 0, 0, 0, 4,10,86, 3,14,42, 3,19, 5,
+ 4,14,77, 3,19, 2, 0, 0, 0, 5,20,38, 3,29,79, 4,25,74, 3,35,40, 4,31,52,
+ 4,31,53, 4,31,58, 4,37,67, 4,55,50, 4,60,27, 3,58,72, 5,11, 1, 4,14,85,
+ 4,14,80, 3,19, 8, 4,14,87, 3,19, 9, 4,14,83, 4,14,82, 4,19,86, 4,19,93,
+ 3,23,84, 5,20,40, 4,19,87, 4,19,91, 3,23,85, 6,34,86, 4,19,88, 4,25,77,
+ 4,25,84, 4,25,81, 3,29,84, 4,31,59, 4,25,82, 3,29,90, 4,25,85, 3,29,83,
+ 4,25,79, 6,44,59, 6,44,54, 0, 0, 0, 0, 0, 0, 3,35,48, 4,31,70, 4,31,66,
+ 4,31,65, 3,35,50, 3,35,51, 4,31,61, 3,35,46, 4,31,64, 3,35,43,
+ /* plane 0, page 66 */
+ 0, 255, /* first, last */
+ 4,31,67, 5,40,38, 4,25,86, 4,37,69, 3,40,59, 4,37,74, 4,37,73, 3,40,63,
+ 4,37,78, 4,37,72, 3,40,57, 4,37,77, 4,37,70, 5,40,22, 4,43,91, 4,43,85,
+ 4,43,80, 3,45,65, 3,45,62, 4,44, 2, 3,45,71, 4,43,94, 3,45,66, 4,44,14,
+ 5,47,27, 3,45,68, 4,44,16, 4,44, 5, 4,44,13, 4,43,89, 5,47,18, 3,45,63,
+ 5,47,37, 4,44,12, 4,44, 7, 4,43,87, 3,45,70, 3,45,72, 4,44, 8, 5,47,22,
+ 0, 0, 0, 0, 0, 0, 4,50,20, 4,50,26, 3,50,17, 4,50,23, 4,50,11, 4,50,24,
+ 3,50,21, 4,50,25, 4,50,27, 4,50,22, 4,50,15, 4,50,29, 4,50, 9, 3,50,18,
+ 4,55,59, 5,60,77, 4,55,62, 4,55,58, 4,55,66, 5,60,93, 4,55,69, 4,55,51,
+ 3,53,76, 4,55,54, 4,55,56, 4,55,57, 5,60,94, 4,55,53, 5,61,16, 0, 0, 0,
+ 4,60,36, 4,60,47, 4,60,43, 4,60,48, 4,60,35, 3,56,42, 4,60,42, 3,58,76,
+ 4,60,34, 4,60,44, 7,33,31, 4,60,38, 4,60,41, 4,60,32, 5,67,20, 4,60,40,
+ 3,56,45, 3,56,43, 5,67,33, 4,64,54, 5,72,78, 3,58,74, 4,64,51, 5,72,70,
+ 3,58,77, 3,58,73, 3,58,75, 4,60,49, 0, 0, 0, 4,67,94, 4,70,73, 4,70,76,
+ 4,70,78, 3,62,42, 4,70,74, 3,62,45, 4,70,72, 4,70,77, 3,63,54, 5,80,65,
+ 4,73, 6, 4,73, 8, 4,74,61, 4,74,65, 4,74,60, 3,64,63, 4,75,86, 4,77,60,
+ 4,77,86, 7,69,61, 4,10,87, 3,19,15, 3,19,19, 6,35, 2, 4,20, 5, 5,20,57,
+ 3,23,92, 6,44,64, 4,25,91, 4,25,92, 3,29,93, 3,29,92, 4,25,93, 3,35,58,
+ 3,35,54, 3,35,55, 3,35,57, 3,35,59, 0, 0, 0, 3,40,67, 4,37,82, 3,40,68,
+ 3,40,69, 6,64,12, 3,40,70, 3,45,75, 3,45,76, 3,45,73, 3,45,74, 4,44,23,
+ 7, 6,55, 4,44,21, 3,50,22, 4,55,77, 3,53,83, 3,53,82, 4,55,73, 4,55,74,
+ 3,45,84, 4,55,75, 0, 0, 0, 5,67,46, 4,60,54, 3,56,50, 4,60,53, 4,60,52,
+ 5,67,52, 3,56,51, 3,58,80, 4,64,59, 4,64,61, 4,68, 3, 3,60,72, 7,52,26,
+ 5,80,80, 4,74,69, 5,86,25, 4,76,90, 3,65,37, 4, 7,60, 6,19,68, 3,14,55,
+ 3,14,53, 3,14,56, 4,14,88, 4,14,94, 3,19,21, 3,19,20, 4,14,92, 3,19,25,
+ 4,15, 1, 3,19,24, 4,14,93, 3,19,22, 3,19,26, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,20,14, 4,20, 6, 3,24, 3, 3,24,10, 4,20, 7, 4,20,16, 3,24,12, 4,20,13,
+ 4,20,11, 4,20, 9, 3,24, 8, 3,24,13, 3,24, 5, 3,30,22, 5,27,12, 3,30,13,
+ 3,30,18, 3,30, 7, 3,30,16, 3,30, 5, 6,44,81, 0, 0, 0, 3,30,17, 4,31,74,
+ 3,35,69, 3,35,75, 4,31,78, 4,31,83, 4,31,79, 3,35,65, 3,35,61, 3,40,76,
+ 4,37,85, 4,37,94, 4,37,89, 4,38, 1, 3,40,71, 3,35,63, 3,40,82, 3,40,85,
+ 4,38, 3, 5,40,52, 3,40,79, 3,46,10, 5,47,51, 4,44,30, 4,44,28, 4,44,32,
+ 3,45,91, 3,46, 1, 3,46,13, 3,45,86, 3,45,89, 4,44,26, 4,44,29, 4,44,31,
+ /* plane 0, page 67 */
+ 0, 255, /* first, last */
+ 3,45,90, 4,44,36, 5,47,52, 3,46, 6, 3,46, 3, 3,50,26, 4,50,41, 3,50,28,
+ 4,50,39, 3,50,29, 3,50,30, 0, 0, 0, 4,55,83, 3,53,88, 5,61,31, 3,53,86,
+ 5,61,38, 3,53,87, 4,55,78, 3,53,92, 3,53,91, 7,26,25, 4,60,66, 4,60,64,
+ 4,55,82, 3,56,55, 3,56,54, 3,57, 9, 4,64,70, 4,64,67, 4,64,72, 4,64,66,
+ 7,39,42, 3,58,83, 3,58,81, 5,77, 2, 3,60,73, 4,68, 4, 3,60,74, 3,60,75,
+ 3,62,47, 3,62,46, 4,73,10, 7,56,56, 3,63,57, 4,73,11, 4,74,70, 4,75,89,
+ 4,75,88, 7,63,19, 3,64,88, 4,76,92, 4,76,91, 4,77,87, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,10,89, 4,15, 9, 3,24,15, 3,24,18, 5,20,64, 4,20,20,
+ 3,24,16, 4,20,19, 4,26, 8, 4,38, 5, 3,40,86, 4,50,46, 4,74,75,15, 1,39,
+ 3,10,45, 3,14,60, 3,14,59, 3,14,57, 4,10,91, 4,15,10, 6,26,75, 4,15,13,
+ 4,20,21, 4,31,85, 4,26,10, 3,35,76, 3,35,77, 5,33,69, 3,40,90, 3,40,91,
+ 0, 0, 0, 4,50,47, 4,55,85, 4,60,69, 4,64,77, 4,70,91, 4,75,91, 6,26,84,
+ 4,15,14, 3,17,31, 4,20,24, 4,20,22, 4,20,23, 6,35,28, 4,26,13, 4,26,17,
+ 4,26,16, 4,31,86, 3,40,94, 4,38, 7, 3,40,93, 4,38, 8, 3,40,92, 4,44,41,
+ 4,50,51, 3,50,33, 4,55,87, 4,60,74, 4,60,75, 4,73,12, 3,19,32, 3,19,33,
+ 4,20,26, 3,24,19, 4,20,27, 4,20,30, 4,20,28, 3,24,21, 3,24,20, 4,26,20,
+ 4,26,21, 5,27,26, 4,26,19, 3,35,80, 4,31,88, 3,35,81, 4,31,87, 3,35,79,
+ 3,41, 1, 4,38,10, 4,38, 9, 4,38,11, 4,50,53, 4,50,54, 3,56,62, 3,56,64,
+ 3,56,63, 3,60,78, 4,70,93, 0, 0, 0, 3,30,25, 3,30,26, 0, 0, 0, 4,11, 7,
+ 4,11, 8, 4,15,24, 4,11, 9, 3,24,24, 4,31,90, 0, 0, 0, 4,38,14, 4,38,13,
+ 4,38,15, 4,38,18, 4,38,16, 4,44,47, 0, 0, 0, 4,55,93, 4,55,90, 4,55,91,
+ 4,60,80, 4,71, 1, 4, 4,77, 3,19,38, 3,19,37, 3,24,26, 4,20,33, 4,26,25,
+ 5,33,80, 3,35,84, 4,38,22, 4,38,20, 4,38,21, 4,38,23, 3,41, 4, 3,46,19,
+ 4,44,50, 4,50,58, 3,50,34, 4,50,59, 4,56, 1, 4,56, 4, 4,56, 3, 4,56, 2,
+ 3,56,68, 4,68, 8, 3,63,60, 6,54,77, 4, 3,13, 6, 5,41, 4, 4,79, 4, 4,78,
+ 3,10,49, 6,27, 8, 3,10,53, 3,10,48, 4, 7,70,15, 8,50, 4, 7,66, 4, 7,71,
+ 4, 7,67, 4, 7,69, 5, 7,56, 3,10,58, 3,10,51, 0, 0, 0, 5,11,19, 4,11,15,
+ 4,11,10, 4,11,12, 3,14,66, 3,14,63, 6,19,93, 5,11,25, 3,19,49, 4,15,33,
+ 4,15,38, 4,15,39, 4,15,31, 6,27,17, 5,15,77, 0, 0, 0, 0, 0, 0, 3,24,38,
+ 4,20,44, 4,20,40, 3,24,36, 4,20,43, 4,20,50, 4,20,49, 4,20,42, 4,20,51,
+ 6,35,56, 3,24,32, 3,24,31, 3,24,35, 4,26,41, 4,26,26, 3,30,31, 4,26,37,
+ /* plane 0, page 68 */
+ 0, 255, /* first, last */
+ 5,27,45, 4,26,42, 4,26,33, 4,26,32, 4,26,34, 4,26,29, 0, 0, 0, 3,30,38,
+ 4,26,31, 4,26,36, 4,26,43, 6,41,94, 6,45,52, 6,54,86, 4,32, 7, 3,35,88,
+ 4,32,10, 4,32, 3, 4,32, 6, 3,35,90, 4,31,93, 4,32, 8, 3,36, 1, 4,32,12,
+ 3,35,93, 3,35,89, 5,20,74, 4,32, 5, 4,38,37, 4,38,30, 4,38,28, 4,38,29,
+ 4,38,31, 3,50,40, 4,38,34, 4,38,32, 4,38,27, 3,41, 9, 3,41, 8, 4,38,24,
+ 4,38,39, 4,38,33, 0, 0, 0, 4,44,61, 4,44,56, 4,44,62, 4,44,53, 4,44,60,
+ 6,64,79, 4,44,52, 4,44,59, 4,44,63, 5,34, 8, 4,50,67, 4,50,68, 3,50,38,
+ 3,50,37, 4,50,62, 4,50,65, 4,50,66, 4,50,70,15,49,53, 5,61,59, 4,56,11,
+ 4,56, 8, 4,56,12, 4,60,84, 3,56,70, 4,60,86, 3,56,71, 3,58,86, 4,64,84,
+ 4,64,83, 5,77,12, 4,68,10, 4,71, 2, 4,71, 4, 4,71, 3, 4,71, 5, 4,73,16,
+ 6,35,68, 7,34, 4, 3,11,36, 3,36, 4, 4,15,42, 4,20,56, 0, 0, 0, 4,44,67,
+ 4,50,75, 3,19,51, 3,19,52, 3,24,42, 4,44,68, 6,65, 1, 3,50,43, 3,62,52,
+ 4, 7,79, 4,11,19, 4,11,18, 3,14,71, 3,19,54, 4,15,48, 3,24,43, 6,35,81,
+ 6,35,80, 0, 0, 0, 3,30,42, 4,26,46, 4,26,47, 6,45,67, 0, 0, 0, 5,34,13,
+ 4,32,15, 4,38,47, 4,38,49, 4,38,48, 3,41,12, 6,65, 4, 5,41,12, 0, 0, 0,
+ 0, 0, 0, 3,46,30, 4,44,72, 4,44,69, 4,50,76, 4,50,77, 0, 0, 0, 4,56,16,
+ 4,56,20, 4,56,19, 3,54, 5, 3,54, 6, 5,61,71, 5,60,45, 4,56,18, 0, 0, 0,
+ 4,60,92, 4,68,13, 4,15,51, 4,20,60, 4,50,79, 4,50,78, 4,56,21, 4,60,93,
+ 4,73,19, 0, 0, 0, 6, 5,47, 3, 4,23, 3, 4,25, 3, 7, 7, 4, 4,86, 4, 4,93,
+ 3, 7,12, 0, 0, 0, 3,10,67, 3,10,71, 3,10,68, 3,10,74, 4, 7,82, 3,10,66,
+ 4, 8, 1, 4, 7,83, 3,10,69, 3,10,73, 5, 7,67, 3,10,65, 3,14,77, 4,11,22,
+ 3,14,80, 3,14,81, 3,14,76, 3,14,83, 3,14,85, 6,20,26, 0, 0, 0, 0, 0, 0,
+ 4,15,53, 3,19,65, 4,15,65, 3,19,68, 3,19,59, 3,19,62, 6,27,54, 3,19,61,
+ 4,15,62, 3,19,60, 3,19,69, 5,16, 1, 4,15,57, 4,15,68, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,19,64, 4,20,62, 4,20,76, 4,20,81, 3,24,58, 4,20,73, 4,20,69,
+ 3,24,54, 4,20,70, 4,20,66, 4,20,61, 4,20,67, 6,36,12, 3,24,44, 6,36, 8,
+ 5,21,10, 3,24,57, 3,24,60, 5,21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,26,76,
+ 4,26,64, 4,26,63, 4,26,68, 4,26,57, 5,27,54, 4,26,59, 4,26,54, 3,30,51,
+ 4,26,62, 3,30,52, 3,30,49, 4,26,60, 4,26,65, 3,30,53, 6,46, 7, 3,30,44,
+ 0, 0, 0, 0, 0, 0,15,30,75, 0, 0, 0, 0, 0, 0, 4,32,16, 4,32,18, 4,26,69,
+ 3,36,23, 4,38,73, 4,32,39, 4,32,41, 4,32,26, 3,36,11, 3,36, 9, 3,36,20,
+ 4,32,40, 3,36,29, 4,32,44, 0, 0, 0, 4,38,69, 3,41,15, 4,38,55, 6,65,36,
+ /* plane 0, page 69 */
+ 0, 255, /* first, last */
+ 4,38,68, 3,41,17, 4,38,51, 5,41,28, 4,38,65, 3,41,16, 4,38,77, 4,38,64,
+ 4,38,60, 3,41,20, 5,41,27, 6,65,56, 3,41,23, 3,41,32, 3,46,35, 4,44,82,
+ 3,46,31, 4,44,80, 4,45, 4, 4,44,75, 3,46,33, 4,44,81, 3,46,51, 4,44,77,
+ 4,44,83, 3,46,39, 3,46,37, 3,46,54, 4,44,93, 3,50,49, 4,44,76, 3,46,42,
+ 4,44,78, 3,46,40, 3,46,53, 3,46,41, 5,48,38, 3,46,48,15,49,69,15,49,83,
+ 15,49,86, 4,45, 1, 4,44,79, 3,46,49, 4,44,87, 4,50,87, 4,50,91, 4,50,89,
+ 4,51,12, 4,51, 1, 4,50,86, 3,50,51, 4,51, 5, 3,50,55, 4,50,94, 3,50,45,
+ 4,51, 3, 4,50,90, 4,50,92, 4,50,82, 5,68,13, 3,50,44, 4,51, 2, 4,50,83,
+ 3,50,46, 4,51, 7, 0, 0, 0, 4,51,17, 4,38,71, 4,56,36, 4,56,28, 4,56,24,
+ 4,56,34, 5,61,89, 4,56,22, 4,56,27, 3,54,14, 3,54, 7, 4,56,29, 3,54,10,
+ 0, 0, 0, 3,54,15, 3,56,73, 4,60,94, 4,61,11, 3,56,77, 3,56,80, 3,56,74,
+ 3,56,81, 4,61, 3, 7,34,24, 4,61, 1,15,64,46, 7,27,18, 4,64,87, 3,60,83,
+ 3,59, 3, 4,64,88, 3,59, 1, 0, 0, 0, 3,59, 4, 7,41,51, 4,68,15, 4,68,20,
+ 3,60,93, 4,68,19, 3,60,84, 7,52,72, 3,60,89, 4,68,18, 4,68,24, 3,60,90,
+ 4,68,16, 3,60,85, 4,68,22, 4,71, 7, 3,62,57, 4,71, 8, 0, 0, 0,15,72,25,
+ 3,63,61, 4,73,23, 7,56,82, 3,64,33, 3,64,34, 5,88, 5, 4,75,93, 4,77,62,
+ 4,76,93, 3,65,74, 4,77,89, 4,77,91,15,76,76, 4,78,23, 4,78,22, 5,92,30,
+ 3,10,77, 4,11,30, 4,15,71, 3,19,71, 3,19,70, 3,19,72, 5,21,21, 3,24,66,
+ 5,27,80, 3,30,64, 3,36,33, 5,34,52, 5,34,51, 3,36,34, 3,36,35, 4,45, 6,
+ 4,51,22, 4,61,18, 5,68,27, 5,68,26, 4,68,26, 3, 7,14, 3,14,93, 3,15, 1,
+ 3,15, 2, 4,15,73, 4,15,75, 6,27,73, 3,24,72, 3,24,71, 4,20,92, 3,24,69,
+ 4,20,91, 4,20,89, 5,28, 6, 6,36,40, 0, 0, 0, 4,26,82, 3,30,71, 4,26,84,
+ 3,30,69, 5,27,84, 4,26,80, 4,26,77, 3,30,68, 3,30,70, 4,32,54, 4,32,55,
+ 3,36,43, 3,36,39, 4,32,59, 4,26,78, 4,32,61, 3,36,42, 0, 0, 0, 4,38,88,
+ 3,41,38, 4,38,82, 4,38,83, 4,38,81, 4,38,85, 3,41,39, 4,38,80, 4,38,86,
+ 6,65,73, 3,41,40, 4,38,91, 3,46,58, 3,46,60, 7, 8,34, 3,46,55, 3,46,56,
+ 4,45,16, 3,46,59, 4,38,89, 4,45,22, 4,45,15, 3,41,45, 0, 0, 0, 4,51,30,
+ 3,50,60, 7,18,83, 4,51,29, 4,56,45, 3,50,64, 7,18,85, 3,50,65, 5,62,18,
+ 4,56,55, 4,56,50, 3,54,23, 4,56,56, 4,56,47, 4,56,54, 3,54,24, 4,56,46,
+ 3,54,18, 4,56,52, 4,56,63, 3,54,21, 3,54,28, 0, 0, 0, 3,54,17, 4,61,27,
+ 5,62,21, 4,61,25, 3,56,82, 0, 0, 0, 4,65, 4, 5,73,33, 3,59,10, 4,65, 1,
+ 4,65, 5,15,67,78, 5,77,43, 0, 0, 0, 4,68,27, 4,68,28, 4,68,32, 4,68,30,
+ /* plane 0, page 70 */
+ 0, 255, /* first, last */
+ 4,68,33, 3,61, 6, 3,62,62, 4,71,16, 4,68,29, 4,73,30, 3,63,62, 3,63,64,
+ 3,64,36, 7,57, 5, 7,60,62, 4,74,88, 7,60,67, 3,65,40, 4,78,25, 3,15, 5,
+ 6,27,83, 3,24,73, 3,36,44, 4,39, 3, 4,45,23, 4,15,79, 4,26,88, 3,46,62,
+ 4,51,42, 3,59,14, 3,10,78, 0, 0, 0, 3,15, 8, 4,11,38, 0, 0, 0, 5,16,29,
+ 4,15,82, 5,16,25, 4,21,10, 4,26,90, 4,21,13, 4,21,14, 4,21,12,15,18,49,
+ 4,26,89, 3,30,81, 4,21,16, 3,30,78, 3,30,76, 3,30,75, 3,15,42, 4,32,66,
+ 4,39, 5, 6,56,11, 0, 0, 0, 3,41,51, 4,39,13, 5,41,76, 5,41,77, 4,32,70,
+ 4,39,17, 4,39, 7, 3,41,53, 4,32,64, 4,39,10, 4,39,14, 4,39, 6, 4,39,11,
+ 3,41,58, 3,41,48, 3,41,59, 4,45,28, 4,45,31, 4,45,26, 4,45,25, 4,45,34,
+ 4,45,32, 4,45,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,51,50, 4,51,53,
+ 4,51,54, 3,46,67, 4,51,47, 0, 0, 0, 4,56,67, 4,56,71, 3,54,37, 3,54,35,
+ 4,56,68, 3,54,30, 7,27,57, 3,54,36, 4,56,69, 3,54,33, 5,68,54, 4,61,42,
+ 4,61,40, 4,61,41, 4,61,36, 4,61,38, 4,65,10, 7,35, 2, 4,68,35, 7,48, 5,
+ 3,61, 7, 4,68,36, 3,62,63, 0, 0, 0, 4,74,91, 7,57,18, 3,64,90, 4,76, 6,
+ 3,64,89, 4,77,93, 5,11,39, 4,15,83, 4,21,17, 4,27, 1, 0, 0, 0, 3,19,89,
+ 3,19,88, 4,21,19, 4,21,21, 0, 0, 0, 4,27, 3, 5,28,21, 4,27, 2, 3,30,83,
+ 3,36,48, 3,36,49, 4,39,22, 4,39,24, 4,45,42, 4,45,40, 4,51,58, 4,51,59,
+ 5,56,18, 4,51,60, 5,62,35, 4,56,72, 4,56,73, 4,61,46, 4,61,48, 4,65,13,
+ 4,65,14, 3,59,16, 4,65,12, 4,65,16, 3,62,64, 0, 0, 0, 3,66,28, 4,21,26,
+ 3,36,51, 4,32,71, 3,36,50, 4,39,26, 4,45,49, 4,45,44, 4,45,46, 4,45,51,
+ 4,45,47, 4,51,68, 4,51,65, 4,51,66, 0, 0, 0, 4,56,75, 4,56,74, 5,68,67,
+ 4,65,17, 4,65,20, 4,68,38, 4,68,39, 0, 0, 0, 4,77, 2, 3,15,11, 5,11,41,
+ 3,15,13, 4,15,94, 3,19,93, 4,21,33, 3,24,92, 3,24,88, 5,21,55, 4,21,36,
+ 5,21,62, 3,25, 4, 3,25, 8, 3,25, 1, 4,21,31, 3,24,93, 3,25, 7, 4,21,35,
+ 5,21,61, 6,36,77, 3,25, 6, 5,21,54, 4,27,19, 3,30,89, 3,30,90, 4,27,22,
+ 4,27,21, 3,30,86, 3,30,91, 3,30,87, 4,27,20, 4,27,10, 4,27, 9, 4,27,11,
+ 3,31, 6, 6,46,75, 3,31, 5, 0, 0, 0, 3,36,55, 6,56,33, 3,36,62, 4,32,78,
+ 4,32,77, 4,32,76, 3,36,58, 3,36,63, 3,36,66, 4,39,29, 4,39,32, 4,39,42,
+ 4,39,28, 3,41,74, 4,39,38, 4,39,34, 3,41,65, 4,39,35, 3,41,73, 3,41,71,
+ 3,41,61, 4,45,57, 4,45,54, 4,45,60, 4,45,62, 3,46,72, 4,45,65, 4,45,56,
+ 4,45,59, 3,46,77, 4,45,63, 4,45,58, 3,46,75, 4,45,64, 7, 8,89, 4,45,53,
+ 3,46,81, 4,51,74, 3,50,76, 3,50,77, 7,19,45, 4,51,75, 3,54,39, 4,56,80,
+ /* plane 0, page 71 */
+ 0, 255, /* first, last */
+ 3,54,43, 3,54,44, 5,62,53, 4,61,58, 7,42, 5, 4,61,55, 4,61,59, 3,57, 2,
+ 3,57, 5, 4,61,52, 3,57, 7, 4,65,32, 5,73,50, 3,59,19, 4,65,27, 4,65,29,
+ 4,65,37, 5,73,49, 4,68,46, 3,61,13, 7,48,17, 4,68,44, 3,61,15, 4,68,40,
+ 3,61,17, 4,71,29, 4,71,31, 7,53,18, 4,71,30, 4,71,32, 4,71,25, 7,57,24,
+ 3,63,67, 4,73,40, 5,86,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,11,41, 4,16, 3, 6,46,90, 3,31, 7, 4,39,44, 3,46,87,
+ 4,56,85, 4,61,65, 4,73,44, 0, 0, 0, 4,21,42, 3,31, 8, 4,32,84, 4,39,46,
+ 4,39,47, 3,41,76, 4,45,68, 3,50,80, 4,51,83, 3,50,79, 4,51,82, 3,50,81,
+ 4,56,86, 4,56,87, 3,54,46, 4,71,36, 4,77, 4, 4,16, 5, 4,21,43, 6,37, 2,
+ 4,21,44,15,36,84, 4,45,71, 4,45,69, 4,45,72, 4,51,85, 4,51,87, 4,61,68,
+ 4,65,40, 4,65,38, 4,71,37, 3,63,69, 3,65,44, 4,77, 5, 4,21,48, 6,37, 4,
+ 3,25,15, 0, 0, 0, 4,27,30, 0, 0, 0, 3,41,78, 3,46,89, 3,46,88, 3,50,82,
+ 3,54,48, 3,57,12, 3,57,13, 4,65,42, 7,42,33, 3,59,23, 4,61,72, 4,21,49,
+ 4,21,52, 5,28,44, 4,27,31, 4,27,33, 3,31,14, 4,27,34, 6,47, 9, 4,27,35,
+ 4,33, 1, 3,36,70, 3,36,72, 5,42, 9, 6,66,74, 3,41,79, 3,46,91, 3,46,92,
+ 4,45,78, 4,45,76, 7, 9,22, 4,45,77, 0, 0, 0, 5,49,25, 3,47, 1, 3,50,84,
+ 4,51,93, 4,51,89, 4,51,91, 4,51,90, 3,50,86, 7,28,19, 4,56,90,15,64,90,
+ 4,51,94, 3,61,21, 3,62,68, 4,75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,16,43, 5,35,20, 4,39,57, 4,39,56, 4,71,40, 5,16,44, 4,16, 7,
+ 4,16, 8, 4,21,53, 4,21,54, 3,25,20, 3,25,22, 3,31,17, 4,27,37, 3,31,22,
+ 3,31,18, 5,28,50, 3,31,21, 4,27,40, 4,27,39, 4,33, 6, 4,33, 7, 5,35,28,
+ 3,36,74, 4,33, 8, 5,35,24, 4,39,58, 6,66,85, 4,39,59, 3,41,86, 5,42,20,
+ 3,41,87, 5,42,18, 0, 0, 0, 3,47, 7, 4,45,83, 4,45,81, 3,47, 4, 4,45,84,
+ 7, 9,29, 4,52, 6, 5,56,60, 5,56,53, 3,50,88, 4,56,93, 4,57, 5, 4,56,92,
+ 5,62,77, 4,61,77, 3,57,15, 4,61,76, 4,61,74, 4,61,78, 3,57,16, 4,65,45,
+ 3,61,22, 4,68,53, 4,68,51, 4,68,54, 4,71,42, 4,73,46, 3,63,70, 4,73,47,
+ 4,75, 3, 4,76, 8, 4,77, 7, 4,11,44, 3,15,15, 4,16,10, 3,19,94, 4,21,62,
+ 4,21,57, 5,21,82, 3,25,27, 4,21,59, 4,21,60, 4,21,61, 3,25,28, 5,28,67,
+ 4,27,44, 4,27,48, 3,31,29, 4,27,45, 4,27,41, 6,47,22, 6,47,28, 5,28,60,
+ 4,27,42, 4,27,43, 4,27,47, 3,31,28, 5,28,63, 4,27,49, 4,33, 9, 5,35,43,
+ 3,36,76, 3,36,78, 0, 0, 0,15,37,56, 5,42,30, 4,39,62, 4,39,65, 4,39,63,
+ 4,39,66, 4,39,69, 3,41,88, 4,39,68, 3,47, 8, 3,36,79, 4,45,87, 4,46, 2,
+ /* plane 0, page 72 */
+ 0, 255, /* first, last */
+ 3,47,10, 7, 9,46, 3,47,14, 3,47, 9, 4,45,94, 4,46, 1, 4,45,93, 4,45,89,
+ 4,45,88, 4,45,86, 3,47,13, 4,46, 3, 0, 0, 0, 4,52,14, 3,50,93, 3,50,90,
+ 4,52,15, 4,52,13, 5,56,66, 4,52,16, 3,50,89, 5,62,91, 0, 0, 0, 4,57,11,
+ 4,57,12, 4,57, 6,15,60,88, 4,57,10, 4,57, 8, 3,54,51, 3,57,19, 4,61,84,
+ 4,61,88, 4,61,82, 4,61,85, 7,42,55, 4,65,48, 3,57,20, 4,65,49, 4,61,87,
+ 4,68,59, 4,68,58, 4,71,48, 4,71,44, 5,84,43, 4,75, 4, 7,60,87, 4,76, 9,
+ 3,65,47, 3,66,14, 3,31,34, 5,28,71, 4,27,50, 4,27,51, 3,31,33, 3,36,81,
+ 3,36,80, 3,36,82, 0, 0, 0, 4,46, 6, 4,52,18, 4,57,16, 3,54,54, 3,59,30,
+ 4,68,63, 3,64,44, 4,11,45, 4,11,46,15,13,51, 3,20, 2, 3,25,35, 3,25,36,
+ 3,25,40, 4,21,65, 4,21,66, 3,25,37, 3,25,38, 3,25,34, 6,37,37, 3,31,40,
+ 3,31,35, 4,27,52, 3,31,42, 3,36,85, 4,33,10, 3,36,84, 6,57, 4, 4,33,12,
+ 4,39,70, 4,39,73, 4,39,71, 3,41,94, 4,46, 8, 4,46, 7, 4,46,10, 4,46, 9,
+ 3,51, 3, 5,56,82, 4,52,19, 4,52,20, 5,49,65, 3,54,56, 4,57,18, 4,57,21,
+ 4,57,23, 3,54,55, 4,57,17, 4,61,92, 4,61,91, 4,61,90, 5,69,21, 4,61,93,
+ 4,61,94, 0, 0, 0, 4,65,57, 4,65,56, 4,65,55, 4,68,64, 4,68,65, 4,71,50,
+ 15,72,51, 3,63,72, 3,63,71, 0, 0, 0, 3,64,93, 4,77,65, 4,78, 1, 3,66,29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,46,14, 3,61,25, 4,39,75,15,44,71, 3,47,24,
+ 4,68,67, 7,48,54, 3, 7,18, 4, 5, 2,15, 8,82, 3,10,79, 5, 7,73, 0, 0, 0,
+ 4,11,51, 4,11,48, 3,20, 3, 4,16,13, 4,16,16, 3,20, 4, 4,16,14, 0, 0, 0,
+ 0, 0, 0, 3,25,41, 4,21,73, 3,25,45, 3,31,51, 4,27,55, 3,31,46, 6,47,40,
+ 3,31,50, 4,33,15, 3,42, 5, 0, 0, 0, 4,39,76, 3,42, 3, 3,47,26, 4,46,17,
+ 4,46,21, 3,47,29, 3,51,10, 3,51, 8, 3,51, 9, 4,57,24, 4,57,25, 7,35,87,
+ 3,57,25, 4,65,62, 4,76,12, 3, 2,63, 4, 3,18, 3, 7,22, 3, 7,23, 3, 7,24,
+ 3,10,86, 4, 8, 9, 0, 0, 0, 3,15,22, 4,11,54, 3,37, 2, 3,15,29, 4,11,52,
+ 4,11,56, 3,15,25, 3,15,26, 6,20,77, 4,16,24, 4,16,20, 3,20, 8, 4,16,19,
+ 4,39,81, 0, 0, 0, 4,21,76, 4,21,78, 4,21,83, 4,21,75, 3,25,48, 4,21,80,
+ 4,27,62, 3,31,56, 0, 0, 0, 4,33,20, 4,33,22, 3,37, 1, 4,57,28, 4,33,24,
+ 4,39,77, 4,39,78, 3,42, 9, 3,42, 8, 5,42,64, 4,39,80, 3,47,30, 4,46,29,
+ 4,46,28, 5,56,94, 5,63,28, 3,64,45, 4,75, 6, 3,15,31, 0, 0, 0, 3,20,11,
+ 3,20,12, 4,21,88, 4,21,84, 3,25,51, 5,22,22, 4,21,85, 4,27,64, 3,31,58,
+ 3,31,59, 3,31,60, 4,27,68, 0, 0, 0, 6,57,44, 3,37, 6, 4,33,29, 4,33,28,
+ 4,33,31, 4,33,30, 4,39,83, 4,39,84, 4,46,31, 4,46,33, 4,46,30, 4,46,32,
+ /* plane 0, page 73 */
+ 1, 255, /* first, last */
+ 4,52,29, 4,52,28, 4,52,26, 3,51,14, 4,52,32, 4,52,27, 7,20,52,
+ 3,51,16, 4,57,29, 4,57,34, 7,28,80, 4,57,33, 5,69,37, 4,65,65, 4,65,68,
+ 4,65,67, 4,65,66, 4,65,69, 4,71,58, 4,71,59, 4,73,52, 4,73,51, 4,76,14,
+ 4,76,13, 4,78,29, 4,21,90, 6,28,67, 3,25,58, 3,31,63, 3,31,68, 3,31,65,
+ 3,31,71, 3,37,12, 5,35,77, 0, 0, 0, 3,42,14, 4,39,89, 3,42,22, 4,39,86,
+ 4,39,91, 0, 0, 0, 4,39,88, 3,47,47, 4,46,35, 3,47,39, 3,47,38, 7,10,24,
+ 3,47,42, 7,10,30, 0, 0, 0, 3,51,19, 3,51,20, 4,52,40, 4,52,38, 7,28,91,
+ 3,54,73, 7,28,87, 4,57,37, 4,57,36,15,61,44, 3,57,31, 3,57,33, 4,62,15,
+ 4,62,12, 7,36,25, 4,62, 7, 5,69,47, 4,62,11, 3,57,40, 3,57,39, 0, 0, 0,
+ 3,59,38, 4,65,70, 3,59,43, 3,59,32, 3,59,50, 4,65,73, 5,74,19, 4,65,72,
+ 3,59,49, 3,59,44, 3,59,41,15,68,20, 3,61,27, 4,65,76, 3,61,32, 4,68,70,
+ 4,68,76, 5,78,21, 3,61,40, 4,68,77, 0, 0, 0, 4,71,63, 3,62,75, 4,68,73,
+ 4,71,65, 3,62,76, 4,71,67, 7,53,72, 3,62,73, 3,62,78, 3,62,79, 3,63,79,
+ 3,64,49, 5,81,53, 7,57,71, 3,63,77, 7,57,72, 3,63,80, 5,84,53, 4,75,10,
+ 5,86,63, 4,75, 7, 3,64,46, 3,64,48, 3,65, 3, 3,65, 1, 4,76,16, 3,65, 4,
+ 3,65,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,28,69,
+ 4,27,71,15,31,86, 4,33,41, 4,62,18, 3,25,59, 4,21,92, 3,31,74, 4,27,75,
+ 3,31,78, 3,31,75, 3,37,27, 4,33,48, 4,33,46, 4,40, 3, 3,42,27, 3,42,31,
+ 3,42,26, 5,42,78, 3,42,28, 0, 0, 0, 7,10,38, 4,46,40, 3,47,52, 3,47,55,
+ 4,52,47, 4,52,43, 3,51,31, 4,52,44, 3,51,33, 3,51,35, 3,51,38, 3,51,37,
+ 7,20,83, 0, 0, 0, 4,57,46, 4,57,47, 4,57,52, 3,54,78, 3,54,76, 4,57,45,
+ 0, 0, 0, 4,57,50, 4,71,70, 4,68,81, 5,81,59, 4,73,53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 1,93, 3, 2,64, 3, 4,30, 5, 4,91, 6, 9,21, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 8,17, 4, 8,18, 3,10,90, 5,11,68, 4,11,58, 3,15,33, 4,11,57,
+ 0, 0, 0, 4,16,32, 4,16,29, 3,20,21, 4,16,30, 3,20,23, 4,16,28, 0, 0, 0,
+ 3,25,67, 3,25,61, 4,21,93, 3,25,64, 3,25,66, 3,25,68, 3,25,63, 3,31,79,
+ 4,27,77, 3,31,84, 3,37,31, 3,37,30, 4,33,53, 4,33,52, 3,37,29, 3,37,33,
+ 3,42,33, 3,42,32, 3,42,35, 3,42,34, 3,47,57, 3,47,56, 7,10,52, 3,51,39,
+ 4,52,51, 0, 0, 0, 4,52,49, 0, 0, 0, 4,57,53, 0, 0, 0, 3,59,52, 4,68,83,
+ 4,71,71, 3,20,24, 4,22, 4, 3,31,90, 3,31,86, 3,31,89, 3,31,87, 4,33,54,
+ 3,37,36, 3,37,35, 3,37,37, 3,42,40, 3,47,61, 3,47,60, 3,51,43, 3,51,42,
+ /* plane 0, page 74 */
+ 0, 255, /* first, last */
+ 3,50,24, 4,57,56, 3,54,82, 3,57,44, 3,59,53, 3,61,42, 3,59,54, 3,61,43,
+ 4,73,54, 3,65,49, 3,66,32, 3,25,70, 3,31,93, 6,48,17, 3,37,40, 4,40,13,
+ 4,40,17, 4,40,14, 3,42,42, 4,40,20, 3,42,43, 4,40,19, 6,67,91, 3,47,62,
+ 3,47,65, 3,47,63, 0, 0, 0, 4,52,57, 3,51,47, 3,51,46, 4,57,64, 3,54,83,
+ 3,54,87, 4,52,56, 3,54,86, 4,57,61, 4,57,63, 4,62,21, 3,57,45, 3,57,46,
+ 4,62,22, 7,36,56, 7,36,64, 4,65,84, 4,65,83, 3,59,55, 3,59,56, 3,59,57,
+ 4,68,85, 3,61,45, 4,73,56, 4,73,58, 4,73,59, 3,64,56, 3,65,51, 3,65, 7,
+ 3,65,50, 3,66, 4, 3,66,36, 3,66,38, 4,73,60, 4,22, 8, 4,22,10, 4,27,84,
+ 4,46,44, 4,68,91, 4,33,58, 3,37,42, 0, 0, 0, 3,42,45, 4,40,24, 4,40,23,
+ 4,52,61, 4,52,60, 4,57,66, 4,68,92, 4,71,78, 5,81,67, 0, 0, 0, 4,76,19,
+ 4,27,89, 3,32, 3, 4,27,86, 3,37,45, 4,33,61, 4,33,63, 3,37,44,15,38,18,
+ 6,58, 8, 4,40,26, 4,40,32, 4,40,27, 3,42,47, 3,42,48, 4,40,29, 4,46,47,
+ 4,52,67, 4,52,65, 4,52,64, 4,52,68, 4,52,66, 4,57,67, 4,52,72, 3,51,50,
+ 3,54,92, 4,57,72, 4,57,68, 7,29,54, 3,54,89, 3,54,93, 3,54,94, 4,62,30,
+ 5,69,94, 4,62,34, 4,62,28, 5,69,83, 5,69,91, 4,62,27, 4,62,33, 3,59,60,
+ 3,59,59, 4,65,87, 4,65,91, 3,59,58, 4,69, 3, 4,68,94, 5,78,41, 7,54, 7,
+ 7,54, 5, 4,71,82, 4,71,80, 5,81,73, 7,54, 6, 3,63,84, 5,84,66, 4,75,12,
+ 3,64,58, 4,76,20, 4,77,13, 3,65,52, 4,77,69, 3,65,80, 4,78, 2, 4,33,65,
+ 4,40,35, 4,40,33, 4,40,34, 4,40,36, 3,51,52, 4,57,75, 7,36,87, 4,62,37,
+ 3,57,50, 4,65,93, 4,65,94, 4,71,83, 4,73,64, 3,64,59, 3,37,46, 0, 0, 0,
+ 3,55, 1, 3,59,67, 3,59,66, 3,61,50, 4,71,85, 4,75,13, 3,32, 5, 3,32, 6,
+ 3,32, 7, 3,37,49, 0, 0, 0, 4,52,74, 4,52,73, 3,57,51, 4,66, 2, 4,66, 3,
+ 3,63,85, 4,27,91,15,32,13, 4,33,69, 4,33,68, 5,36,20, 5,43,30, 4,40,45,
+ 3,42,49, 4,40,46, 3,42,51, 4,40,44, 4,40,43, 5,43,31, 4,40,39, 3,47,72,
+ 4,46,57, 4,46,60, 5,50,64, 4,52,77, 4,52,79, 3,51,54, 4,46,61, 3,51,64,
+ 3,51,55, 3,51,62, 7,21,49, 3,55, 5, 4,57,83, 7,29,73, 3,55, 2, 4,57,87,
+ 3,55, 3, 3,55, 4, 3,55, 7, 3,55, 9, 4,62,46, 3,57,52, 4,62,41, 4,62,39,
+ 4,62,43, 3,57,55, 3,57,53, 4,62,45, 4,62,44, 3,57,58, 4,66, 7, 4,66, 9,
+ 4,66,13, 4,66, 6, 4,66,12, 3,59,68, 4,66, 5, 4,66,15, 4,66, 8, 4,66,11,
+ 4,69,15, 4,69,17, 4,69,16, 3,61,52, 4,71,87, 4,71,89, 4,71,86, 4,71,92,
+ 4,71,91, 7,54,18, 4,73,67, 3,63,86, 4,73,66, 4,76,25, 5,88,40, 3,65,53,
+ 4,22,11, 4,27,94, 3,37,51, 4,33,77, 4,33,82, 4,33,78, 4,40,49, 4,40,54,
+ /* plane 0, page 75 */
+ 0, 255, /* first, last */
+ 4,40,57, 4,40,48, 4,40,52, 3,42,55, 4,46,64, 4,46,65, 4,52,86, 4,52,87,
+ 4,52,83, 4,52,84, 4,52,85, 4,57,93, 4,58, 2, 4,58, 1, 4,57,92, 4,57,90,
+ 4,57,94, 4,62,49, 7,36,94, 4,62,48, 4,62,50, 3,57,61, 3,57,62, 3,57,63,
+ 4,66,18, 3,59,71, 3,59,70, 4,69,22, 3,61,53, 4,71,94, 4,75,16, 4,76,26,
+ 3,55,11, 3,57,64, 3,20,26, 4,22,12, 3,32, 9, 3,32,10, 4,28, 4, 3,32, 8,
+ 4,28, 5, 3,37,61, 3,32,12, 4,33,87, 4,33,84, 3,42,60, 3,37,62, 4,33,85,
+ 3,37,54, 3,37,53, 3,37,58, 4,33,89, 4,33,90, 3,42,56, 3,42,57, 4,40,59,
+ 7,11,24, 3,42,58, 4,40,60, 6,68,32, 3,47,74, 4,46,69, 4,46,68, 4,46,71,
+ 4,46,70, 4,52,88, 4,46,73, 4,52,92, 4,52,93, 4,52,90, 4,58, 7, 4,53, 2,
+ 4,58, 8, 4,58,10, 5,64,17, 3,55,13, 3,57,68, 5,64,12, 3,55,12, 0, 0, 0,
+ 4,62,56, 4,62,55, 4,62,59, 4,62,57, 4,62,58, 4,69,25, 4,66,22, 3,59,72,
+ 4,69,28, 4,69,27, 3,61,55, 3,61,57, 0, 0, 0, 4,72, 4, 4,72, 3, 3,62,93,
+ 4,72, 2, 4,73,71, 4,73,69, 3,63,87, 4,73,72, 4,75,17, 3,65,54, 4,77,16,
+ 4,77,71, 4,78, 5, 0, 0, 0, 3,47,76, 3,51,71, 4,62,63, 4,66,28, 4,40,61,
+ 3,55,15, 4,53, 6, 3,55,14, 3,65,81, 3,32,13, 5,36,42, 3,37,64, 4,40,62,
+ 3,42,69, 4,40,63, 3,42,63, 3,42,71, 3,42,72, 3,42,75, 3,42,73, 4,46,79,
+ 3,47,81, 3,47,80, 4,46,78, 3,47,79, 4,46,77, 4,46,80, 3,51,79, 3,51,78,
+ 3,51,77, 5,58,12, 3,51,73, 4,53,13, 5,58,14, 7,22, 8, 4,58,14, 3,55,18,
+ 3,55,21, 4,58,13, 3,55,17, 4,62,71, 5,74,78, 4,62,66, 3,57,72, 4,62,72,
+ 3,57,73, 4,62,67, 4,62,69, 3,57,76, 4,66,33, 4,66,31, 3,59,74, 4,66,38,
+ 4,66,32, 4,66,36, 4,66,37, 4,69,33, 4,69,32, 3,61,61, 3,61,59, 4,69,39,
+ 5,78,70, 5,78,77, 3,61,60, 4,72, 9, 4,72,10, 4,72,11, 4,72,13, 3,63, 3,
+ 5,82,13, 4,72, 8, 7,58,30, 5,84,86, 4,73,75, 4,73,73, 3,63,90, 4,75,19,
+ 4,75,20, 4,75,18, 3,65,11, 7,64,14, 7,64,13, 3,65,55, 4,77,72, 3,66, 7,
+ 4,78,31, 3,66,23, 4,78,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,25,73, 3,32,14,
+ 4,40,66, 3,42,77, 3,47,85, 4,46,85, 4,46,83, 4,46,86, 3,47,88, 3,51,82,
+ 3,51,83, 4,53,16, 4,53,18, 4,53,15, 4,53,14, 3,55,25, 4,58,17, 4,58,21,
+ 4,58,16, 3,55,24, 4,58,19, 5,70,49, 4,62,78, 3,59,80, 4,66,40, 4,66,39,
+ 4,69,41, 3,61,63, 4,72,16, 4,73,78, 4,75,21, 4,76,30, 4,77,19, 3,32,16,
+ 4,34, 2, 0, 0, 0, 4,66,42, 5,84,90, 7,68,85, 3,32,17, 5,29,50, 6,68,62,
+ 4,40,74, 4,40,73, 4,40,71, 3,42,84, 5,43,57, 4,46,91, 3,47,90, 4,53,21,
+ 4,53,22, 4,58,24, 3,55,29, 0, 0, 0, 4,58,27, 4,62,80, 4,62,83, 3,57,78,
+ /* plane 0, page 76 */
+ 0, 255, /* first, last */
+ 4,62,84, 4,62,86, 4,62,85, 4,62,87, 4,66,46, 3,59,82, 4,66,44, 0, 0, 0,
+ 4,69,45, 4,69,47, 4,69,46, 7,49,89, 5,82,31, 3,63, 6, 4,73,82, 4,76,35,
+ 4,76,33, 3,65,13, 5,88,50, 4,77,21, 7,65,74, 4,77,73, 4,78,41, 7,49,93,
+ 5,82,33, 3,42,87, 3,42,86, 3,45,30, 3,51,86, 7,58,43, 3,65,56, 3,42,89,
+ 4,47, 4, 4,47, 5, 4,53,31, 3,51,87, 4,62,94, 3,57,80, 4,62,93, 4,62,92,
+ 3,59,83, 5,70,72, 3,61,69, 4,73,87, 4,73,86, 7,58,47, 0, 0, 0, 4,76,40,
+ 4,76,41, 4,78,56, 5,29,52, 0, 0, 0, 4,40,77, 5,43,68, 0, 0, 0, 4,47, 8,
+ 4,47,20, 3,48, 1, 7,11,74, 4,47,25, 4,47,18, 4,47,11, 4,47, 9, 3,52, 7,
+ 4,53,36, 4,53,34, 4,53,40, 3,51,94, 3,52, 8, 4,53,33, 3,52, 6, 3,52, 4,
+ 3,52, 2, 3,51,91, 4,58,32, 3,55,33, 4,63, 1, 7,30,41, 4,58,34, 3,57,82,
+ 4,63, 3, 5,70,78, 4,63, 7, 4,63, 5, 3,57,88, 4,63, 4, 3,57,87, 4,63, 9,
+ 4,63,11, 4,66,61, 5,75,21, 4,66,71, 4,66,55, 4,66,65, 4,66,57, 4,66,52,
+ 3,59,86, 5,75,17, 4,66,66, 5,75,11, 4,66,64, 4,66,68, 3,59,88, 3,59,91,
+ 3,59,92,15,68,82, 0, 0, 0, 3,61,87, 4,69,53, 7,50,17, 4,69,59, 3,61,76,
+ 7,50,19, 4,69,51, 3,61,75, 3,61,77, 0, 0, 0, 4,72,29, 3,63,13, 3,63,16,
+ 4,72,28, 3,63,14, 3,63,11, 4,72,26, 3,63, 9, 3,63,15, 4,73,93, 3,63,93,
+ 4,74, 1, 4,73,92, 3,63,92, 4,73,94, 3,64, 4, 4,73,91, 3,64, 1, 0, 0, 0,
+ 15,74,31, 4,75,28, 4,75,29, 4,75,32, 4,75,27, 7,62, 3, 3,64,71, 3,64,68,
+ 5,88,59, 5,88,54, 3,65,16, 4,76,45, 4,76,46, 5,87, 4, 3,65,58, 4,77,25,
+ 0, 0, 0, 3,65,17, 4,78,12, 4,78,13, 4,78,59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,37,69, 3,42,90, 3,42,91,
+ 3,42,92, 3,42,94, 5,43,75, 3,42,93, 5,51,24, 4,47,31, 3,48, 3, 4,47,36,
+ 4,47,27, 7,11,77, 4,47,32, 3,48, 8, 3,48, 9, 3,48, 6, 0, 0, 0, 3,44,67,
+ 4,47,33, 4,53,46, 3,52,15, 4,53,45, 3,52,16, 4,53,47, 3,52,11, 4,53,52,
+ 7,22,42, 4,53,42, 3,52,14, 4,53,55, 3,55,43, 4,53,43, 3,52,17, 4,53,53,
+ 3,52,20, 4,53,48, 7,22,49, 3,54,19, 3,55,44, 4,58,49, 3,55,39, 3,55,41,
+ 3,55,38, 4,58,50, 3,55,46, 4,58,48, 4,63,15, 4,63,21, 4,63,12, 3,58, 1,
+ 3,57,92, 4,63,18, 4,63,17, 5,71, 6, 4,63,24, 4,66,74, 3,60, 1, 4,66,76,
+ 4,69,65, 3,60, 8, 4,66,79, 5,75,28, 4,63,22,15,68,85, 3,61,88, 4,69,76,
+ 3,61,93, 3,61,91, 4,69,74, 4,69,68, 3,61,92, 7,50,34, 4,69,66, 4,69,75,
+ 3,61,94, 3,63,20, 4,72,32, 4,72,34, 4,72,33, 5,82,67, 3,63,19, 4,74, 7,
+ 4,74,12, 0, 0, 0, 3,64, 8, 4,74, 6, 3,64, 6, 3,64, 7, 4,75,37, 3,64,75,
+ /* plane 0, page 77 */
+ 0, 181, /* first, last */
+ 5,87,12, 4,75,36, 5,87,20, 4,75,39, 3,64,74, 3,64,73, 4,75,40, 4,76,48,
+ 4,76,50, 4,76,49, 3,65,22, 4,76,52, 4,77,29, 3,65,60, 7,67,23, 3,66,10,
+ 3,66,30, 4,78,57, 3,66,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,47,39, 4,63,25, 7,55, 9, 4,75,45, 5,89,83, 5,43,77,
+ 4,47,41, 4,47,42, 3,48,13, 3,52,24, 4,53,56, 7,22,60, 3,58, 3, 4,66,82,
+ 0, 0, 0, 3,63,25, 3,65,23, 3,65,24, 4,40,83, 4,40,84, 3,43, 1, 4,47,45,
+ 4,47,43, 4,53,57, 4,53,60, 4,53,58, 4,53,61, 3,55,47, 4,63,28, 4,63,27,
+ 3,58, 7, 4,66,89, 4,66,86, 4,66,93, 4,66,87, 4,66,92, 4,72,41, 4,72,40,
+ 4,72,42, 5,85,45, 5,85,40, 4,75,46, 3,65,25, 7,58,93, 4,77,33, 7,12,17,
+ 4,69,81, 4,69,82, 7,22,69, 4,63,29, 4,67, 1, 4,69,86, 4,72,43, 4,75,50,
+ 4,76,58, 7,12,19, 4,53,62, 7,22,71, 5,79,50, 4,69,89, 5,79,52, 4,72,44,
+ 4,72,46, 4,72,45, 4,74,17, 4,75,53, 4,77,34, 4,34,12, 3,43, 3, 4,47,50,
+ 4,47,51, 4,53,63, 4,58,63, 5,65, 3, 5,71,32, 5,71,29, 4,63,31, 5,71,33,
+ 4,67, 3, 3,60,11, 4,69,92, 4,70, 1, 4,69,93, 5,79,56, 4,72,50, 3,63,27,
+ 4,75,54, 4,76,59, 4,77,36, 3,65,62, 4,77,35, 4,77,79, 4,63,32, 3,60,12,
+ 4,74,23, 3,65,26, 4,53,65, 4,76,65, 4,76,66, 4,63,35, 4,63,34, 4,63,36,
+ 4,67, 6, 4,72,57, 4,53,66, 4,58,67, 4,63,37, 4,67, 7, 4,72,58, 3,64,10,
+ 4,75,56, 4,75,59, 3,58,12, 4,63,38, 3,62, 3, 7,50,71, 5,79,65, 4,72,60,
+ 4,78,17, 5,91,90, 4,58,70, 5,65,13, 4,63,40, 4,67, 9, 4,67,11, 4,70, 7,
+ 4,70, 5, 4,70, 6, 3,63,29, 4,72,65, 4,74,29, 4,74,28, 3,64,78, 5,87,45,
+ 4,76,73, 4,76,70, 4,76,74, 4,77,44, 4,77,43, 4,77,80, 3,65,86, 3,66,11,
+ 3,66,18, 4,78,43, 4,78,44, 4,78,58, 5,85,65, 0, 0, 0, 0, 0, 0, 5,75,73,
+ 5,76,36, 4,72,66, 0, 0, 0, 4,72,67, 4,77,49, 3,66,12,
+ /* plane 0, page 78 */
+ 0, 255, /* first, last */
+ 1,36, 1, 1,36, 3, 4, 1, 6, 1,36, 4, 3, 1, 6, 3, 1, 5, 0, 0, 0, 2, 1, 6,
+ 1,36,23, 1,36,21, 1,36,24, 1,36,22, 2, 1, 7, 1,36,66, 2, 1,15, 2, 1,13,
+ 1,36,65, 1,36,64, 4, 1,25, 0, 0, 0, 1,37,66, 1,37,65, 1,37,64, 4, 1,53,
+ 1,37,67, 1,37,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,39, 2, 1,39, 3,
+ 3, 2,66, 3, 2,65, 3, 2,67, 4, 3,21, 3, 4,31, 0, 0, 0, 1,43,68, 0, 0, 0,
+ 3, 1, 1, 4, 1, 7, 3, 1,12, 1,36,25, 0, 0, 0, 1,36,67, 2, 1,16, 4, 1,26,
+ 1,36,68, 2, 1,35, 1,40,75, 2, 5,17, 0, 0, 0, 4,11,62, 3, 1, 2, 0, 0, 0,
+ 1,36,26, 1,36,69, 0, 0, 0, 1,37,68, 2, 1,36, 3, 7,32, 0, 0, 0, 3, 1, 3,
+ 4, 1, 2, 4, 1, 3, 2, 1, 1, 1,36, 5, 0, 0, 0, 1,36,28, 3, 1,16, 2, 1, 8,
+ 1,36,29, 3, 1,14, 0, 0, 0, 1,36,70, 0, 0, 0, 1,37,69, 1,37,71, 1,37,70,
+ 0, 0, 0, 4, 2, 7, 1,39, 4, 1,39, 5, 3, 3,37, 0, 0, 0, 1,43,69, 3,11, 2,
+ 1,51,93, 1,36, 2, 4, 1, 4, 0, 0, 0, 2, 1, 2, 1,36, 6, 1,36,31, 1,36,30,
+ 0, 0, 0, 0, 0, 0, 3, 1,38, 3, 1,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 2,68, 1,39, 6, 4, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 4,32, 0, 0, 0, 1,43,70, 4, 5,17, 4, 5,16, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,11, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,56,81, 2,19,46,
+ 3,25,76, 3,25,78, 1,67,10, 2,33,54, 2,33,55, 3, 1, 4, 1,36, 7, 3, 1,13,
+ 1,36,72, 3, 2,69, 0, 0, 0, 1,43,71, 1,36, 8, 2, 1, 9, 1,36,32, 3, 1,17,
+ 0, 0, 0, 1,36,73, 1,36,75, 2, 1,17, 1,36,76, 1,36,74, 4, 1,27, 3, 1,76,
+ 3, 2,70, 1,39, 7, 0, 0, 0, 1,43,72, 3, 4,34, 3, 7,34, 1,43,73, 1,47,71,
+ 1, 7, 8, 1,36,33, 1,36,77, 3, 1,39, 1,39, 8, 1,39,10, 1,39, 9, 0, 0, 0,
+ 1,40,76, 0, 0, 0, 0, 0, 0, 1,43,74, 1,43,75, 1,47,72, 1,47,73, 3,11, 6,
+ 3,11, 5, 3,11, 7, 3,11, 4, 1,51,94, 4,22,14, 0, 0, 0, 2,33,56, 3,32,19,
+ 0, 0, 0, 2,77,36, 1,36, 9, 0, 0, 0, 3, 1,18, 0, 0, 0, 3, 1,19, 0, 0, 0,
+ 1,36,79, 1,36,78, 2, 1,18, 1,36,80, 1,36,86, 3, 1,41, 1,36,81, 1,36,82,
+ 2, 1,20, 2, 1,19, 1,36,84, 1,36,85, 3, 1,44, 1,36,83, 3, 1,43, 3, 1,42,
+ 4, 1,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,37,74, 1,37,75, 1,37,76, 1,37,77,
+ 1,37,73, 1,37,80, 2, 1,42, 4, 1,59, 2, 1,38, 2, 1,41, 1,37,81, 1,38, 3,
+ 3, 1,77, 2, 1,40, 4, 1,58, 1,37,78, 1,37,79, 1,37,72, 3, 1,82, 3, 1,80,
+ 2, 1,37, 2, 1,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2,79, 3, 2,72,
+ 1,39,23, 2, 1,79, 1,39,20, 1,39,24, 2, 1,89, 2, 1,77, 1,39,21, 2, 1,81,
+ 3, 2,75, 3, 2,71, 3, 2,86, 1,39,22, 3, 2,78, 1,39,25, 4, 2,13, 1,39,11,
+ /* plane 0, page 79 */
+ 0, 255, /* first, last */
+ 2, 1,80, 1,39,26, 2, 1,84, 3, 2,77, 2, 1,88, 2, 1,85, 3, 2,76, 3, 2,84,
+ 2, 1,82, 1,39,12, 1,39,14, 1,39,27, 4, 2,10, 1,39,16, 2, 1,74, 1,39,19,
+ 1,39,17, 1,39,18, 2, 1,90, 2, 1,87, 2, 1,78, 1,39,15, 3, 2,80, 3, 2,87,
+ 2, 1,75, 1,39,13, 3, 2,85, 4, 2,14, 3, 2,83, 2, 1,83, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 1,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 2,82,15, 1,81, 0, 0, 0, 0, 0, 0, 2, 1,76, 2, 3, 8, 4, 3,25, 1,41, 4,
+ 1,40,85, 3, 4,48, 3, 4,40, 2, 3, 9, 1,40,82, 3, 4,47, 1,41, 6, 3, 4,38,
+ 1,40,90, 3, 4,37, 1,40,89, 2, 2,91, 1,40,93, 1,40,88, 2, 3, 2, 2, 3,10,
+ 3, 4,46, 2, 3, 6, 3, 4,41, 1,40,91, 3, 4,43, 3, 4,35, 1,40,94, 1,40,79,
+ 1,41, 9, 2, 2,93, 3, 4,36, 3, 4,44, 2, 5,29, 1,40,77, 1,41, 5, 1,40,78,
+ 1,40,86, 1,40,87, 2, 3, 4, 2, 2,94, 1,40,92, 1,40,84, 2, 2,90, 1,40,80,
+ 2, 3, 7, 1,41, 7, 1,41,10, 1,40,83, 1,41, 2, 1,41, 8, 1,40,81, 2, 3, 5,
+ 1,41, 3, 2, 3,11, 2, 2,92, 1,41, 1, 2, 3, 1, 0, 0, 0, 3,68,40, 2, 3, 3,
+ 3,68,41, 1,43,89, 2, 5,31, 2, 5,43, 1,43,81, 3, 7,39, 2, 5,44, 1,43,76,
+ 1,43,86, 4, 5,30, 3, 7,47, 1,43,79, 2, 5,25, 1,43,87, 2, 5,24, 2, 5,28,
+ 2, 5,35, 2, 5,33, 1,44, 1, 1,43,90, 2, 5,19, 2, 5,21, 1,43,92, 1,43,80,
+ 2, 5,22, 2, 5,34, 2, 5,41, 1,43,85, 2, 5,27, 2, 5,20, 1,43,84, 2, 5,23,
+ 1,43,88, 2, 5,26, 3, 7,36, 1,43,83, 3, 7,49, 1,43,78, 3, 7,40, 1,43,93,
+ 2, 5,36, 1,43,94, 2, 5,40, 3, 7,35, 2, 5,38, 2, 5,42, 1,43,91, 2, 5,30,
+ 2, 5,18, 4, 5,22, 2, 5,32, 1,43,82, 2, 5,37, 1,43,77, 2, 5,39, 3, 7,44,
+ 3, 7,41, 3, 7,43, 3, 7,42, 3, 7,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 5,36, 0, 0, 0, 0, 0, 0, 1,47,88, 1,47,76,
+ 3,11,13, 3,11,14, 2, 9, 2, 2, 9,10, 3,11,22, 1,47,75, 1,47,83, 1,48, 1,
+ 3,11,12, 2, 9,16, 2, 9,14, 2, 9, 9, 4, 8,24, 4, 8,30, 3,11,11, 1,47,77,
+ 2, 9,15, 2, 9, 5, 1,47,91, 1,47,82, 1,47,90, 2, 8,94, 3,11,18, 2, 9,12,
+ 3,11,15, 2, 9, 3, 1,47,86, 2, 9, 4, 3,11,19, 2, 8,93, 1,47,93, 1,47,80,
+ 1,47,89, 1,47,79, 3,11, 8, 2, 9, 1, 2, 9, 6, 3,11, 9, 2, 9,13, 1,47,87,
+ 1,47,84, 2, 9, 8, 1,47,92, 2, 9,11, 2, 9, 7, 1,47,81, 1,47,94, 1,47,85,
+ 1,47,78, 1,47,74, 4, 8,31, 3,11,21,15, 9,13, 3,11,20, 0, 0, 0, 3,68,42,
+ 0, 0, 0, 4, 8,29, 0, 0, 0, 0, 0, 0, 2, 9,17, 0, 0, 0, 1,52,26, 1,52, 4,
+ 3,15,40, 1,52,20, 3,15,45, 1,52,25, 2,13,81, 2,13,80, 2,13,85, 2,13,86,
+ 1,52, 7, 3,15,36, 1,52,16, 3,15,56, 3,15,44, 3,15,54, 1,52,29, 3,15,38,
+ /* plane 0, page 80 */
+ 0, 255, /* first, last */
+ 1,52,17, 4,11,66, 3,15,43, 3,15,41, 3,15,39, 2,13,74, 1,52,10, 2,13,75,
+ 3,15,47, 1,52,31, 4,11,68, 1,52,22, 1,52, 1, 1,52, 2, 2,13,94, 1,57, 4,
+ 3,15,51, 1,52,15, 1,52,14, 2,13,76, 1,52,18, 2,19,62, 1,52, 9, 2,13,87,
+ 1,52,24, 1,52,23, 1,52,13, 2,13,79, 2,13,88, 3,15,37, 2,13,73, 1,52,12,
+ 2,13,89, 1,52,21, 2,13,77, 1,52, 3, 3,15,46, 1,52, 6, 1,52, 5, 2,13,90,
+ 1,52,19, 1,52, 8, 1,52,28, 1,52,30, 2,13,84, 1,52,27, 3,15,49, 2,13,92,
+ 2,13,78, 2,13,93, 3,15,35, 2,13,82, 4,11,65, 2,13,91, 3,15,48, 2,13,83,
+ 3,15,52, 3,15,53, 0, 0, 0, 0, 0, 0, 1,52,11, 0, 0, 0, 0, 0, 0, 3,68,43,
+ 2,19,70, 2,19,58, 3,20,28, 1,56,86, 3,20,31, 2,19,63, 2,19,69, 1,56,85,
+ 2,19,56, 1,56,89, 2,19,60, 2,19,53, 1,56,87, 2,19,57, 1,56,92, 1,57, 3,
+ 3,20,36, 2,19,74, 3,20,33, 2,19,52, 3,20,34, 1,56,93, 3,15,55, 2,19,73,
+ 3,20,39, 3,20,29, 1,56,88, 2,19,59, 1,56,84, 2,19,54, 2,19,50, 2,19,64,
+ 2,19,51, 2,19,49, 2,19,61, 2,19,67, 2,19,68, 1,56,90, 3,20,32, 4,16,39,
+ 2,26,31, 2,19,65, 2,19,48, 2,19,66, 3,20,43, 1,57, 6, 2,19,71, 1,57, 5,
+ 2,19,47, 3,20,35, 2,19,55, 2,19,72, 1,57, 1, 1,56,94, 1,56,91, 1,57, 2,
+ 3,20,44, 3,20,42, 1,56,82, 3,20,37, 3,20,38, 1,56,83, 0, 0, 0, 0, 0, 0,
+ 1,62,14, 3,25,85, 2,26,34, 2,26,27, 4,22,20, 1,62,11, 4,22,19, 2,26,35,
+ 3,25,81, 3,25,82, 4,22,22, 2,26,25, 2,26,28, 1,62,10, 2,26,29, 3,25,79,
+ 4,22,17, 1,62,13, 2,26,33, 4,22,28, 2,26,23, 2,26,22, 1,62,15, 3,25,80,
+ 1,62,16, 1,62,12, 1,62,17, 2,26,21, 2,26,32, 2,26,30, 2,26,24, 4,22,25,
+ 4,22,16, 4,22,26, 1,62, 9, 2,26,26, 0, 0, 0, 0, 0, 0, 3,68,45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,32,25, 3,32,28, 1,67,17, 1,67,11, 2,33,60, 1,67,20,
+ 2,33,66, 2,33,69, 1,67,13, 1,67,14, 2,33,63, 1,67,12, 2,33,72, 1,67,18,
+ 2,33,73, 3,32,26, 2,33,68, 1,67,19, 3,32,23, 2,33,57, 1,67,16, 2,33,58,
+ 4,28, 9, 2,33,67, 2,33,65, 3,32,29, 2,33,61, 1,67,15, 2,33,59, 1,67,21,
+ 2,33,64, 2,33,71, 2,33,62, 2,33,70, 3,32,22, 3,32,30, 1,71,92, 1,71,89,
+ 3,37,75, 1,71,90, 4,34,13, 2,41, 1, 2,40,87, 1,71,88, 1,71,85, 2,40,88,
+ 3,37,78, 3,37,76, 1,71,87, 2,40,91, 3,37,77, 2,40,93, 3,37,86, 4,34,21,
+ 2,41, 6, 3,37,80, 3,37,85, 2,41, 5, 2,40,94, 1,71,84, 2,40,86, 1,71,82,
+ 2,40,89, 1,71,93, 2,40,92, 3,37,81, 2,41, 2, 1,71,86, 1,71,83, 2,41, 4,
+ 2,41, 3, 1,71,91, 0, 0, 0, 2,40,90, 3,37,84, 1,76, 3, 2,47,52, 3,43, 9,
+ 2,47,49, 1,76, 4, 4,40,89, 1,76, 2, 3,43,11, 2,47,56, 2,47,53, 2,47,46,
+ /* plane 0, page 81 */
+ 0, 254, /* first, last */
+ 1,76, 1, 3,43,13, 1,76, 5, 2,47,47, 1,75,94, 1,76, 8, 2,47,50, 2,47,51,
+ 1,76, 6, 1,76, 7, 2,47,57, 2,47,54, 2,47,55, 3,43,12, 3,43, 7, 3,68,46,
+ 1,80,19, 2,54,35, 1,80,16, 2,54,32, 1,80,18, 1,80,20, 3,48,17, 2,54,33,
+ 1,80,17, 4,47,58, 2,54,34, 3,48,21, 2,54,31, 3,48,16, 3,48,20, 1,83,33,
+ 2,60,41, 1,83,34, 2,60,39, 4,53,69, 2,60,40, 2,60,38, 2,60,37, 3,52,33,
+ 3,52,32, 2,60,42, 1,83,32, 3,48,19, 4,53,73, 2,65,36, 2,65,37, 3,55,50,
+ 2,47,48, 2,65,35, 1,83,35, 1,88,11, 2,69,23, 2,69,24, 3,60,18, 1,90,66,
+ 1,90,67, 2,75,47, 2,75,46, 1,91,56, 1,91,55, 2,78,93, 3,64,79, 1,36,10,
+ 1,36,34, 1,36,88, 4, 1,29, 1,36,87, 1,37,83, 1,37,82, 1,39,30, 1,39,29,
+ 1,39,31, 1,39,28, 3, 2,88, 1,41,12, 1,41,11, 1,41,13, 3, 4,52, 4, 3,27,
+ 3, 4,51, 3, 4,49, 1,44, 3, 4, 5,31, 1,44, 2, 1,44, 4, 3, 7,50, 1,48, 2,
+ 4, 8,32, 1, 2,89, 2,14, 1, 1, 2,90, 1,57, 7, 1, 2,92, 1, 2,91, 2,26,36,
+ 3,25,86, 1, 2,93, 1,71,94, 1, 2,94, 3,62, 5, 1,36,11, 3, 1,20, 1,36,89,
+ 1,39,32, 1,44, 5, 3,11,23, 1,36,12, 1,36,92, 1,36,90, 1,36,91, 0, 0, 0,
+ 0, 0, 0, 1,39,33, 3, 2,90, 4, 2,20, 0, 0, 0, 1,41,14, 1,44, 7, 1,44, 6,
+ 1,44, 8, 3,14,91, 0, 0, 0, 0, 0, 0, 1,52,32, 0, 0, 0, 3,32,31, 3,68,51,
+ 1,80,21, 0, 0, 0, 3, 1, 7, 4, 1,30, 3, 1,45, 3, 1,40, 3, 1,46, 2, 1,14,
+ 4, 1,50, 1,37,84, 1,37,85, 3, 1,88, 3, 1,89, 1,39,34, 4, 2,22, 2, 3,12,
+ 3, 7,53, 1,48, 4, 1,48, 3, 2,14, 3, 2,14, 2, 1,57, 8, 3, 1, 8, 1,36,93,
+ 2, 1,21, 3, 1,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4,55, 2, 5,45, 3,11,25,
+ 1,48, 5, 3,15,59, 1,52,35, 3,15,57, 1,52,33, 1,52,34, 3,15,58, 0, 0, 0,
+ 3,20,45,15,38,60, 1,80,22, 1, 7,15, 1,37,86, 4, 1,62, 0, 0, 0, 0, 0, 0,
+ 1,39,35, 2, 1,91, 3, 2,94, 3, 2,93, 3, 2,92, 3, 4,57, 1,41,15, 1,41,16,
+ 3, 4,58, 2, 3,13, 4, 3,29, 0, 0, 0, 2, 5,46, 1,44, 9, 2, 5,47, 4, 5,32,
+ 4, 5,35, 3,11,27, 3,11,29, 3,11,30, 2,14, 5, 2,14, 6, 1,52,38, 3,15,62,
+ 2,14, 7, 3,15,63, 2,14, 4, 1,52,39, 1,52,37, 1,52,36, 2,14, 8, 3,20,47,
+ 2,19,75, 3,20,46, 3,25,93, 3,25,90, 2,26,37, 4,22,31, 3,25,94, 2,33,74,
+ 2,41, 7, 3,43,15, 3,43,14, 3,43,16, 1,76, 9, 1,80,23, 2,54,36, 3,52,34,
+ 1,36,13, 1,36,27, 3, 1,15, 3, 1,21, 3, 1,49, 3, 1,91, 0, 0, 0, 0, 0, 0,
+ 3, 3, 2, 0, 0, 0,15, 2,57, 0, 0, 0, 3, 4,59, 3, 7,57, 4, 5,37, 0, 0, 0,
+ 1,57, 9, 1,62,19, 6,38,69, 1,72, 1, 3,37,90, 2, 1, 3, 1,36,94, 4, 1,64,
+ 1,37,89, 1,37,87, 1,37,88, 0, 0, 0, 0, 0, 0, 1,44,10, 3, 7,58,
+ /* plane 0, page 82 */
+ 0, 255, /* first, last */
+ 1,36,14, 1,36,15, 4, 1,10, 1,36,35, 3, 1,22, 3, 1,50, 1,37, 1, 1,37, 2,
+ 1,37, 3, 2, 1,44, 1,37,90, 3, 1,93, 2, 1,43, 0, 0, 0, 1,39,39, 3, 3, 5,
+ 2, 1,93, 1,39,37, 1,39,38, 2, 1,92, 3, 3, 4, 3, 3, 6, 1,39,40, 1,39,36,
+ 3, 3, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,14, 1,47,47, 2, 3,15, 3, 4,63,
+ 3, 4,65, 2, 3,16, 4, 3,32, 3, 4,60, 1,41,18, 1,41,17, 3, 4,62, 3, 4,61,
+ 1,41,21, 1,41,19, 1,41,20, 3, 4,64, 0, 0, 0, 0, 0, 0, 1,44,16, 3, 7,59,
+ 1,44,15, 2, 5,52, 2, 5,49, 2, 5,50, 3, 7,62, 2, 5,48, 1,44,17, 1,44,13,
+ 1,44,12, 3, 7,63, 1,44,14, 1,44,11, 3, 7,61, 4, 5,46, 3,68,47, 0, 0, 0,
+ 0, 0, 0, 1,44,18, 0, 0, 0, 1,48, 7, 2, 9,18, 3,11,31, 2, 5,51, 1,48,12,
+ 3,11,32, 2, 9,19, 1,48, 8, 1,48,11, 1,48,10, 1,48, 9, 1,48, 6, 3,11,35,
+ 0, 0, 0, 0, 0, 0, 2,14,11, 3,15,72, 1,52,42, 2,14,14, 1,52,40, 3,15,69,
+ 4,11,78, 3,15,66, 2,14,10, 1,52,43, 1,52,41, 1,52,44, 2,14,12, 2,14,13,
+ 3,15,64, 2,14, 9, 2,14,15, 3,15,70, 3,15,65, 3,15,67,15,14,13, 3,15,68,
+ 3,20,48, 1,62,23, 1,57,10, 2,19,76, 2,19,78, 2,19,77, 2,19,79, 1,57,11,
+ 3,26, 3, 0, 0, 0, 1,62,20, 3,26, 1, 1,62,21, 1,62,22, 3,20,49, 1,67,23,
+ 2,33,76, 3,32,33, 2,33,75, 2,33,77, 2,33,78, 1,67,24, 3,32,32, 1,67,22,
+ 2,41, 8, 2,41, 9, 1,72, 3, 1,72, 2, 2,44,65, 4,41, 5, 3,43,17, 1,76,10,
+ 1,76,11, 1,76,12, 1,76,14, 2,47,58, 2,47,59, 1,76,13, 3,43,18, 0, 0, 0,
+ 3,48,22, 1,80,24, 4,47,68, 1,80,25, 3,48,23, 4,53,77, 2,69,25, 2,75,49,
+ 2,75,48, 2,78,94, 3,64,12, 1,36,16, 3, 1,23, 3, 1,52, 3, 1,51, 1,37,92,
+ 1,37,91, 0, 0, 0, 0, 0, 0, 1,39,41, 4, 2,34, 4, 2,31, 2, 1,94, 4, 2,33,
+ 3, 3, 8, 1,41,23, 1,41,24, 1,41,22, 1,41,25, 2, 3,17, 2, 3,18, 4, 3,38,
+ 4, 3,39, 4, 3,40, 0, 0, 0, 3, 4,67, 3, 4,66, 3, 7,65, 5, 5,26, 5, 5,23,
+ 5, 5,24, 3, 7,64, 5, 5,27, 1,44,20, 2, 5,53, 4, 5,48, 1,44,19, 3, 7,66,
+ 2, 9,20, 1,48,16, 2, 9,21, 1,48,15, 3,11,40, 3,11,38, 4, 8,41, 1,48,13,
+ 4, 8,43, 1,48,14, 3,11,39, 0, 0, 0, 3,15,79, 2,14,16, 3,15,76, 3,15,74,
+ 3,15,77, 3,15,78, 1,57,12, 2,19,81, 3,20,50, 1,57,15, 2,19,80, 1,59,11,
+ 1,57,14, 1,57,13, 0, 0, 0, 1,62,26, 5,22,74, 1,62,25, 1,62,24, 1,67,25,
+ 3,32,37, 3,32,36, 1,67,28, 1,67,29, 1,67,27, 4,28,28, 1,67,26, 3,32,38,
+ 5,36,71, 2,41,10, 3,38, 1, 2,41,11, 5,36,67, 3,37,94, 3,43,19, 2,47,61,
+ 1,76,15, 2,47,60, 3,45,12, 1,80,26, 2,60,43, 1,83,36, 5,51,66, 2,69,26,
+ 1,89,65, 1, 7,20, 1,36,36, 1,37, 4, 2, 1,22, 3, 1,53, 1,37, 5, 1,37, 6,
+ /* plane 0, page 83 */
+ 0, 255, /* first, last */
+ 3, 1,54,15, 1,16, 0, 0, 0, 3, 2, 3, 3, 2, 2, 1,37,93, 1,37,94, 3, 2, 4,
+ 1,39,42, 2, 3,19, 2, 5,54, 2, 5,55, 4, 5,49, 1,48,17, 2,14,17, 1,57,17,
+ 1,57,16, 2,26,39, 2,26,38, 6,48,84, 3,48,24, 1,36,17, 1,37, 7, 1,38, 1,
+ 4,16,62, 1,57,18, 2, 1, 4, 4, 1,69, 2, 1,45, 1,38, 2, 3, 2, 6, 2, 2, 2,
+ 1,39,44, 1,39,43, 2, 2, 1, 1,41,26, 3,68,48, 3, 4,69, 0, 0, 0, 3,11,41,
+ 4, 8,46, 4, 8,48, 1,52,45, 4,11,88, 4,16,63, 2,19,82, 0, 0, 0, 1,67,30,
+ 2,41,12, 1,72, 4, 3,38, 3, 3,43,20, 2,54,37, 3,52,36, 3,60,20, 2,72,74,
+ 3, 1, 9, 1,37, 8, 3, 1,55, 3, 4,70, 2, 5,56, 2, 9,22, 1,57,21, 1,57,19,
+ 1,57,20, 1,36,18, 4, 1,16, 1,36,37, 1, 4,31, 1,37,11, 3, 1,57, 1,37,10,
+ 1,37, 9, 1,38, 5, 1,38, 4, 3, 3,10, 2, 1,46, 2, 2, 3,15, 2,12, 3, 3,11,
+ 3, 3,13, 1,44,24, 1,44,21, 1,44,23, 1,44,22, 3, 7,67, 0, 0, 0, 1,48,18,
+ 3,11,42, 4,16,64, 1,62,27, 4,70,16, 1,36,19, 3, 1,58, 1,37,12, 3, 2, 7,
+ 1,38, 7, 1,38, 6, 0, 0, 0, 2, 3,20, 4, 3,45, 3,68,49, 1,44,25, 3,10,60,
+ 4,16,68, 3, 1,10, 4, 1,17, 0, 0, 0, 2, 1,23, 3, 2, 8, 1,38, 9, 1,38, 8,
+ 1,39,45, 1,39,46, 2, 3,21, 1,41,27, 3, 4,71, 1,41,28, 3, 7,69, 1,44,26,
+ 1,44,27, 1,44,28, 3, 7,70, 1,48,19, 2, 9,23, 3,11,43, 4,16,69, 1,52,46,
+ 3,32,39, 0, 0, 0, 2, 1, 5, 4, 1,36, 1,37,13, 0, 0, 0, 3, 1,59, 4, 1,71,
+ 4, 1,70, 3, 2, 9, 2, 2, 4, 3, 3,15, 0, 0, 0, 0, 0, 0, 2, 3,22, 2, 3,23,
+ 0, 0, 0, 0, 0, 0, 2, 5,57, 3, 7,71, 2, 5,58, 0, 0, 0, 2, 9,25, 2, 9,24,
+ 2, 9,27, 2, 9,26, 1,48,20, 3,68,50, 2,19,83, 1,52,48, 2,14,18, 1,52,47,
+ 3,20,52, 4,16,72, 0, 0, 0, 0, 0, 0, 2,26,40, 1,62,28, 3,26, 8, 2,26,41,
+ 3,26, 7, 3,32,42, 3,32,41, 3,32,40, 2,41,13, 1,72, 5, 3,38, 5, 4,28,32,
+ 3,38, 6, 3,43,21, 1,76,16, 3,52,37, 2,69,27,15,77,14, 3, 1,11, 3, 1,60,
+ 4, 1,37, 2, 1,24, 3, 2,10, 1,38,10, 0, 0, 0, 4, 2,40, 3, 3,17, 0, 0, 0,
+ 4, 5,57, 3, 7,73, 3, 7,74, 1,57,22, 3,20,53, 3,26, 9, 0, 0, 0, 0, 0, 0,
+ 1,36,20, 1,36,38, 1,37,15, 1,37,14, 3, 1,62, 1,37,16, 3, 1,64, 4, 1,73,
+ 3, 2,11, 0, 0, 0, 3, 3,19, 4, 3,47, 1,44,30, 3, 7,75, 1,44,29, 1,44,31,
+ 0, 0, 0, 3,11,48, 3,11,47, 1,48,21, 3,11,46, 3,11,45, 6,21,88, 1,52,49,
+ 3,32,43, 2,54,38, 1,86,27, 1,36,39, 1,38,12, 1,38,27, 1,38,22, 4, 1,76,
+ 1,38,17, 1,38,16, 1,38,23, 1,38,21, 1,38,14, 1,38,28, 1,38,15, 1,38,11,
+ 1,38,26, 1,38,25, 1,38,24, 1,38,13, 3, 2,17, 1,38,20, 3, 2,13, 3, 2,14,
+ 1,38,19, 3, 2,15,15, 1,48, 1,38,29, 1,38,18, 4, 1,74, 0, 0, 0, 3, 3,21,
+ /* plane 0, page 84 */
+ 0, 255, /* first, last */
+ 3, 3,23, 1,39,52, 4, 2,44, 1,39,58, 1,39,54, 3, 3,25, 1,39,60, 2, 2, 5,
+ 1,39,57, 1,39,47, 1,39,50, 1,39,53, 1,39,49, 1,39,56, 1,39,59, 1,39,48,
+ 1,39,51, 1,39,55, 1,39,61, 3, 3,26, 0, 0, 0, 3, 3,27, 3, 3,20, 0, 0, 0,
+ 2, 3,32, 2, 3,29, 3, 4,86, 1,41,41, 2, 3,30, 1,41,29, 1,41,31, 1,41,55,
+ 1,41,50, 3, 4,89, 3, 4,94, 3, 4,85, 2, 3,37, 2, 3,31, 1,41,33, 1,41,35,
+ 2, 3,36, 1,41,42, 2, 3,26, 1,41,54, 1,41,56, 1,41,30, 1,41,47, 3, 5, 4,
+ 2, 3,24, 1,41,53, 3, 4,87, 1,41,38, 3, 4,91, 1,41,48, 1,41,49, 2, 3,25,
+ 1,41,46, 1,41,44, 3, 4,80, 1,41,45, 1,41,51, 2, 3,33, 1,41,32, 3, 5, 1,
+ 1,41,52, 2, 3,35, 1,41,40, 1,41,37, 3, 4,83, 2, 3,28, 1,41,36, 2, 3,38,
+ 1,41,39, 3, 4,92, 1,41,43, 3, 4,88, 3, 4,84, 3, 4,77, 1,41,34, 2, 3,34,
+ 3, 4,93, 3, 5, 2, 0, 0, 0, 0, 0, 0, 2, 3,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 5, 3, 0, 0, 0, 0, 0, 0, 4, 5,68, 4, 5,67, 3, 7,78,
+ 2, 5,75, 2, 5,74, 1,44,49, 2, 5,77, 2, 5,79, 2, 5,68, 2, 5,71, 2, 5,78,
+ 1,44,50, 3, 7,84, 3, 7,88, 2, 5,65, 2, 5,69, 3, 7,85, 4, 5,63, 2, 5,73,
+ 2, 9,42, 1,44,45, 2, 9,46, 1,44,32, 2, 5,70, 1,44,33, 1,44,46, 1,44,39,
+ 1,44,35, 3, 7,81, 2, 5,66, 1,44,38, 1,44,43, 1,44,52, 2, 5,67, 2, 5,60,
+ 1,44,37, 2, 5,61, 2, 5,63, 4, 5,64, 1,44,40, 3, 7,76, 1,44,42, 2, 5,59,
+ 2, 5,64, 3, 7,80, 3, 7,89, 1,44,51, 1,44,47, 2, 5,72, 1,44,53, 3, 7,83,
+ 1,44,44, 2, 5,62, 1,44,41, 3, 7,79, 3, 7,87, 1,44,36, 1,44,34, 0, 0, 0,
+ 2, 5,76, 0, 0, 0, 1,44,48, 0, 0, 0,15, 5,81, 0, 0, 0, 3,11,60, 3,11,61,
+ 2, 9,41, 2, 9,29, 2, 9,44, 3,11,55, 3,11,57, 2, 9,31, 1,48,28, 1,48,42,
+ 1,48,24, 1,48,41, 1,48,33, 1,48,38, 1,48,22, 2, 9,30, 2, 9,36, 1,48,37,
+ 2, 9,48, 1,48,39, 3,11,59, 1,48,29, 3,11,52, 3,11,62, 2, 9,38, 2, 9,35,
+ 1,48,27, 3,11,49, 2, 9,28, 1,48,40, 2, 9,43, 1,48,32, 2, 9,45, 1,48,43,
+ 1,48,23, 1,48,34, 1,48,31, 2, 9,33, 1,48,35, 2, 9,39, 2, 9,40, 1,48,30,
+ 1,48,36, 1,48,26, 3,11,53, 3,68,52, 3,11,67, 3,11,65, 1,48,25, 2, 9,32,
+ 3,11,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9,37, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,11,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9,47, 0, 0, 0,
+ 2,14,38, 1,52,62, 2,14,20, 4,12,13, 2,14,25, 1,52,55, 1,52,66, 2,14,23,
+ 1,52,50, 1,52,60, 1,52,65, 2,14,30, 4,12, 6, 1,52,61, 1,52,64, 3,15,87,
+ 3,16, 1, 2,14,33, 1,52,56, 2,14,24, 3,15,84, 3,15,88, 3,16, 2, 2,14,36,
+ 2,14,37, 3,15,89, 1,52,58, 2,14,35, 1,52,54, 1,52,69, 4,12, 9, 2,14,27,
+ /* plane 0, page 85 */
+ 0, 255, /* first, last */
+ 3,15,91, 1,52,52, 3,15,90, 2,14,40, 2,14,28, 2,14,32, 1,52,57, 1,52,68,
+ 2,14,29, 1,52,63, 2,14,34, 2,14,41, 2,20, 4, 3,15,83, 2,14,39, 1,52,70,
+ 1,52,51, 2,14,31, 2,14,22, 3,15,86, 1,52,59, 4,12, 8, 4,12,14, 2,14,21,
+ 3,15,94, 3,16, 5, 2,14,26,15, 9,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,14,34,15,14,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,14,19, 1,52,67,
+ 3,71, 1, 3,20,63, 2,19,90, 3,20,72, 1,57,41, 2,20,10, 1,57,39, 1,57,36,
+ 2,20, 1, 1,57,32, 2,20, 5, 1,57,43, 2,19,89, 2,19,94, 2,19,93, 1,52,53,
+ 1,57,38, 2,20, 8, 3,20,70, 2,20,11, 2,19,86, 4,16,87, 1,62,46, 3,20,71,
+ 2,20,12, 1,57,44, 4,16,82, 1,57,30, 1,57,27, 2,20, 3, 1,57,24, 4,16,84,
+ 2,20, 9, 3,20,59, 1,57,31, 2,20,13, 3,20,56, 2,19,87, 2,20, 7, 1,57,34,
+ 2,19,88, 2,19,91, 2,20, 2, 3,20,66, 3,20,65, 1,57,35, 1,57,33, 1,57,45,
+ 3,20,55, 3,26,22, 3,20,68, 4,16,75, 1,57,40, 3,20,62, 1,57,28, 1,58,86,
+ 4,16,90, 1,57,29, 2,19,92, 1,57,42, 1,57,37, 2,20, 6, 1,57,26, 0, 0, 0,
+ 3,20,57, 0, 0, 0, 1,57,25, 3,68,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,68,54, 3,71, 2, 3,68,53, 0, 0, 0, 2,19,84, 2,19,85, 2,26,46,
+ 0, 0, 0, 0, 0, 0, 3,26,28, 1,62,29, 1,62,32, 2,26,57, 1,62,52, 2,26,60,
+ 1,62,30, 2,26,53, 1,62,36, 1,62,42, 1,65,35, 3,26,17, 3,26,24, 1,62,40,
+ 2,26,50, 1,62,53, 1,62,33, 1,62,41, 2,26,58, 2,33,92, 2,26,63, 2,26,51,
+ 4,22,60, 2,26,42, 2,26,55, 2,26,49, 1,62,39, 2,26,61, 3,26,14, 3,26,10,
+ 1,62,35, 1,62,55, 1,62,48, 3,26,19, 1,62,37, 1,62,34, 3,26,32, 1,62,45,
+ 3,26,20, 2,26,62, 2,26,48, 2,26,54, 2,26,56, 2,26,44, 2,26,59, 1,62,31,
+ 2,26,43, 3,26,34, 1,62,38, 1,62,54, 1,62,50, 2,26,45, 1,62,44, 3,26,27,
+ 15,25,81, 1,62,51, 1,62,47, 1,62,43, 3,26,15, 2,26,52, 6,39, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,71, 3, 1,62,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,33,90,
+ 2,33,86, 3,32,49, 2,34, 7, 2,33,79, 2,33,88, 1,67,44, 1,67,45, 1,67,37,
+ 2,34, 3, 1,67,47, 2,33,84, 2,33,83, 2,33,81, 2,34, 5, 1,67,35, 2,33,93,
+ 2,33,82, 1,67,38, 2,33,91, 1,67,33, 2,33,87, 2,33,94, 2,34, 2, 3,32,46,
+ 4,28,43, 2,34, 6, 1,67,42, 2,33,80, 1,67,36, 2,33,85, 3,26,11, 1,67,31,
+ 6,49,35, 1,67,43, 2,34, 1, 1,67,39, 1,67,40, 1,67,46, 1,67,34, 1, 3, 1,
+ 1,67,32, 2,33,89, 3,32,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,71, 5, 1,67,41,
+ 3,71, 4,15,32,66, 2,34, 4, 0, 0, 0, 3,68,56, 0, 0, 0, 1,72,21, 1,72,16,
+ 3,38,14, 2,41,28, 2,41,24, 3,38, 8, 2,41,18, 1,72,10, 1,72, 6, 2,41,27,
+ /* plane 0, page 86 */
+ 0, 255, /* first, last */
+ 1,72, 7, 2,41,21, 2,41,23, 3,38, 9, 2,41,26, 3,38,22, 1,72,12, 3,38,12,
+ 1,72,19, 1,72,13, 4,34,55, 3,38,10, 2,41,16, 1,72,14, 1,72,15, 2,41,19,
+ 1,72,20, 3,38,20, 2,41,17, 2,41,22, 1,72,11, 2,41,15, 1,72,17, 1,72, 9,
+ 3,38,19, 4,34,43, 0, 0, 0, 1,72, 8, 2,41,20, 2,41,25, 3,38,17, 1,72,18,
+ 3,68,58, 0, 0, 0, 3,68,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,38,48, 2,41,14,
+ 3,38,16, 1,76,23, 2,47,78, 3,43,33, 2,47,75, 3,43,24, 1,76,17, 1,76,29,
+ 1,76,30, 3,43,29, 1,76,20, 2,47,73, 1,76,22, 2,47,65, 1,76,28, 3,43,36,
+ 2,47,77, 1,76,19, 2,47,79, 1,76,18, 4,41,17, 2,47,74, 2,47,76, 1,76,21,
+ 2,47,72, 2,47,66, 2,47,63, 4,41,14, 3,43,30, 2,26,47, 2,47,69, 3,43,23,
+ 2,47,62, 2,47,68, 2,47,67, 3,43,27, 2,47,64, 3,43,35, 1,76,25, 3,43,37,
+ 3,43,32, 3,38,21, 3,43,28, 1,76,24, 3,43,25, 7, 1,67, 3,43,31, 1,76,26,
+ 2,47,70, 1,80,27, 2,47,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,54,47, 3,48,31,
+ 2,54,40, 3,48,32, 1,80,39, 2,54,44, 1,80,31, 1,80,35, 2,54,43, 3,48,27,
+ 1,80,34, 1,80,30, 1,80,33, 1,80,28, 1,80,38, 2,54,45, 2,54,41, 1,80,37,
+ 2,54,39, 1,80,36, 2,54,46, 2,54,42, 1,76,27, 4,47,81, 1,80,40, 2,54,48,
+ 1,80,32, 1,80,29,15,51,61, 3,48,29, 0, 0, 0, 3,52,40, 2,60,50, 2,60,52,
+ 1,83,38, 2,60,53, 2,60,51, 2,60,49, 2,60,48, 1,83,40, 2,60,47, 1,83,41,
+ 4,53,84, 3,52,41, 3,52,39, 4,53,88, 2,60,45, 2,60,46, 1,83,37, 1,83,42,
+ 1,83,39, 3,68,61, 3,68,59, 2,60,44, 3,55,59, 1,86,28, 3,55,58, 2,65,40,
+ 2,65,38, 2,65,43, 2,65,41, 3,55,56, 2,65,39, 2,65,42, 3,55,57, 3,55,55,
+ 3,55,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,88,12, 2,69,30, 2,69,31,
+ 1,88,13, 4,63,45, 2,69,32, 2,69,28, 2,69,33, 2,69,29, 1,86,29, 3,58,13,
+ 3,68,62, 4,67,17, 2,72,75, 2,72,77, 1,89,68, 2,72,76, 1,89,67, 1,89,66,
+ 3,71, 6, 3,71, 7, 3,68,60, 3,62, 6, 1,89,69, 2,75,51, 2,75,52, 4,70,20,
+ 1,90,69, 1,90,68, 1,90,70, 2,75,50, 3,71, 8, 2,77,38, 2,77,37, 3,63,32,
+ 1,91,57, 1,91,59, 1,91,58, 2,77,39, 1,92,20, 2,80,20, 0, 0, 0, 4,74,36,
+ 4,74,35, 1,92,61, 3,64,81, 2,80,19, 2,80,92, 0, 0, 0, 0, 0, 0, 2, 1,10,
+ 3, 1,87, 4, 1,79, 1,38,31, 1,38,30, 4, 1,77, 1,39,64, 1,39,63, 2, 2, 7,
+ 1,39,62, 2, 2, 6, 0, 0, 0, 3, 3,30, 1,41,59, 2, 3,41, 3, 5,12, 2, 3,40,
+ 15, 3,48, 3, 5, 6, 1,41,57, 1,41,60, 3, 5,11, 3, 5,10, 2, 3,39, 3, 5, 9,
+ 1,41,58, 3, 5,40, 3, 5, 7, 3, 5, 8, 0, 0, 0, 0, 0, 0, 3, 8, 2, 2, 5,80,
+ 3, 7,93, 2, 5,81, 1,44,54, 3, 7,92, 3, 8, 1, 3, 7,91, 0, 0, 0, 1,48,44,
+ /* plane 0, page 87 */
+ 0, 255, /* first, last */
+ 3,11,69, 2,14,42, 2,14,43, 1,52,71, 1,52,72, 3,16, 7, 0, 0, 0, 2,20,15,
+ 1,57,46, 1,57,48, 2,20,14, 1,57,47, 2,26,64, 1,62,56, 3,26,36, 3,26,35,
+ 4,22,72, 4,28,50, 1,67,48, 1,67,49, 2,34, 8, 3,32,50, 1,72,23, 3,38,23,
+ 1,72,22, 0, 0, 0, 2,47,80, 2,54,50, 2,54,49, 3,63,33, 2,81,58, 1,36,40,
+ 2, 1,25, 3, 1,65, 2, 1,47, 2, 1,48, 3, 2,20, 4, 1,80, 0, 0, 0, 4, 1,81,
+ 1,39,67, 1,39,71, 2, 2, 9, 4, 2,49, 1,39,69, 1,39,68, 2, 2, 8, 1,39,70,
+ 1,39,66, 3, 3,33, 3, 3,34, 1,39,65, 2, 2,10, 3, 3,31, 3, 3,32, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,41,70, 3, 5,17, 3, 5,30, 1,41,67, 3, 5,16,
+ 1,41,63, 2, 3,42, 3, 5,32, 3, 5,22, 3, 5,15, 2, 3,43, 3, 5,28, 1,41,65,
+ 3, 5,13, 2, 3,45, 1,41,61, 2, 3,46, 2, 3,44, 1,41,64, 1,41,66, 1,41,69,
+ 1,41,68, 1,41,62, 2, 3,47, 3, 5,18, 3, 5,33, 3, 5,34, 3, 5,19, 3, 5,24,
+ 3, 5,23, 3,68,63, 0, 0, 0,15, 3,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5,21,
+ 0, 0, 0, 1,44,59, 2, 5,94, 3, 8, 5, 1,44,61, 3, 8, 3, 1,44,60, 3, 8, 6,
+ 2, 6, 1, 1,44,58, 1,44,57, 2, 5,85, 4, 5,73, 2, 5,84, 3, 8, 8, 2, 5,82,
+ 2, 5,87, 2, 5,86, 2, 5,83, 2, 5,92, 2, 5,93, 2, 5,90, 2, 5,88, 1,44,56,
+ 3, 8, 9, 4, 5,70, 4, 5,72, 2, 5,91, 1,44,62, 2, 6, 2, 4, 5,69, 3, 8,10,
+ 2, 5,89, 3, 8, 4, 1,48,45, 1,44,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,78,
+ 15, 6,19, 0, 0, 0, 3,68,64, 1,48,46, 2, 9,53, 3,11,73, 3,11,72, 2, 9,59,
+ 3,11,76, 3,11,71, 3,11,74, 1,48,52, 2, 9,57, 2, 9,63, 3,11,81, 2, 9,54,
+ 2, 9,58, 2, 9,60, 2, 9,62, 2, 9,56, 3,11,80, 2, 9,55, 2, 9,50, 2, 9,51,
+ 1,48,47, 3,11,75, 1,48,49, 1,48,48, 2, 9,52, 2, 9,61, 3,11,77, 3,11,82,
+ 3,11,78, 4, 8,64,15, 9,74,15, 9,81, 3,11,70, 0, 0, 0, 1,48,51, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8,62, 2, 9,49, 2,14,53, 3,16,10,
+ 2,14,52, 2,14,57, 2,14,48, 3,16,16, 2,14,51, 2,14,50, 3,16,15, 2,14,54,
+ 3,16,24, 2,14,58, 1,52,73, 1,52,76, 3,16,20, 3,16,21, 2,14,49, 2,14,55,
+ 3,16,19, 3,16, 8, 3,16,23, 1,52,75, 2,14,44, 3,16,11, 1,48,50, 2,20,29,
+ 2,14,56, 3,16,22, 2,14,47, 4,12,19, 1,52,74, 2,14,46, 0, 0, 0,15,14,60,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,16,18, 2,20,20, 3,20,78, 3,20,81, 1,57,49,
+ 1,57,53, 2,20,36, 2,20,18, 2,20,32, 1,57,54, 2,20,34, 3,20,82, 2,20,40,
+ 3,20,84, 2,20,44, 3,20,73, 4,16,91, 2,20,35, 2,20,23, 2,20,31, 3,20,75,
+ 2,20,45, 2,20,43, 2,20,33, 2,20,28, 2,20,21, 2,26,72, 2,20,19, 1,57,58,
+ 2,20,26, 1,57,59, 1,57,55, 2,20,16, 2,20,38, 2,20,24, 3,20,79, 3,20,85,
+ /* plane 0, page 88 */
+ 0, 255, /* first, last */
+ 2,20,22, 2,20,41, 1,57,56, 3,20,86, 2,20,47, 1,57,50, 1,57,52, 2,20,30,
+ 2,20,25, 1,52,77, 1,57,51, 2,20,27, 2,20,42, 2,20,46, 2,20,37, 3,68,65,
+ 2,20,39, 0, 0, 0, 3,68,66, 3,68,67, 2,20,17, 0, 0, 0, 0, 0, 0, 4,22,73,
+ 3,26,42, 2,26,67, 3,26,37, 2,26,76, 2,26,75, 1,62,64, 2,26,68, 3,26,39,
+ 1,62,65, 1,62,63, 3,26,48, 2,26,70, 1,62,60, 2,26,74, 3,26,44, 2,26,69,
+ 2,26,71, 2,26,65, 1,62,58, 4,22,79, 2,26,84, 2,26,83, 2,26,80, 1,62,57,
+ 1,62,61, 1,62,62, 2,14,45, 2,26,77, 1,62,59, 1,57,57, 2,26,79, 2,26,66,
+ 2,26,82, 2,26,81, 3,26,46, 2,26,85, 3,26,41, 2,34,22, 3,26,43, 2,26,78,
+ 15,25,93, 0, 0, 0,15,25,94, 4,28,55, 4,22,77, 4,22,81, 0, 0, 0, 3,68,68,
+ 2,26,73, 2,34,14, 1,67,59, 1,67,62, 1,67,57, 2,34,13, 2,34,17, 2,34,12,
+ 3,32,55, 1,67,51, 1,67,61, 2,34, 9, 1,67,55, 2,34,16, 3,32,59, 1,67,53,
+ 1,67,52, 2,34,19, 1,67,54, 2,34,21, 3,32,54, 2,34,18, 1,67,50, 3,32,62,
+ 3,32,60, 3,32,56, 1,67,60, 2,34,23, 2,34,11, 2,34,20, 3,32,61, 4,28,51,
+ 2,34,10, 3,32,58, 3,32,57, 1,67,56, 3,32,52, 1,67,58, 0, 0, 0, 2,34,15,
+ 0, 0, 0, 2,34,24, 3,38,35, 3,38,30, 2,41,36, 1,72,24, 2,41,42, 3,38,34,
+ 3,38,28, 1,72,29, 2,41,38, 2,41,45, 2,41,30, 1,72,31, 1,72,25, 2,41,35,
+ 1,76,31, 2,41,34, 2,41,43, 1,72,26, 3,38,29, 1,72,30, 2,41,33, 2,41,39,
+ 2,41,44, 2,41,29, 1,72,28, 2,41,37, 3,38,26, 3,38,37, 2,41,41, 2,41,47,
+ 2,41,31, 2,41,40, 3,38,24, 1,72,27, 2,41,46, 3,38,33, 3,38,36, 3,38,32,
+ 2,41,32, 0, 0, 0, 4,34,57, 3,68,69, 1,76,35, 2,47,82, 1,76,33, 1,76,32,
+ 2,47,84, 2,47,89, 3,43,38, 2,47,85, 3,43,48, 2,47,88, 1,76,38, 3,43,49,
+ 1,80,14, 1,76,37, 3,43,43, 2,47,81, 2,47,87, 3,38,31, 1,76,36, 2,47,86,
+ 3,43,45, 2,47,83, 3,43,41, 1,76,34, 3,43,47, 3,43,44, 0, 0, 0, 3,43,39,
+ 0, 0, 0, 0, 0, 0, 2,54,55, 3,48,42, 2,54,57, 2,54,52, 1,80,42, 2,54,54,
+ 3,48,43, 1,80,41, 2,54,56, 3,48,40, 3,48,44, 1,80,44, 2,54,58, 1,80,43,
+ 2,54,51, 2,54,53, 3,48,41, 0, 0, 0, 0, 0, 0, 3,52,43, 1,83,46, 2,60,56,
+ 3,52,44, 1,83,45, 2,60,57, 1,83,44, 2,60,55, 1,83,43, 2,60,54, 0, 0, 0,
+ 1,86,31, 1,86,30, 2,69,34, 2,69,36, 3,58,15, 2,69,35, 1,88,14, 1,88,15,
+ 3,58,14, 7,38,37, 1,88,16, 2,72,78, 1,89,70, 0, 0, 0, 3,62, 8, 2,79, 2,
+ 2,79, 1, 1,92,62, 0, 0, 0, 1,36,41, 1,37,17, 0, 0, 0, 3, 3,35, 1,41,71,
+ 3, 5,37, 3, 5,35, 3, 5,36, 3, 8,13, 2, 9,64, 3,11,87, 0, 0, 0, 3,20,87,
+ 0, 0, 0, 1,62,66, 1,62,67, 3,26,50, 2,34,25, 1,72,32, 2,41,48, 2,47,90,
+ /* plane 0, page 89 */
+ 0, 255, /* first, last */
+ 3,68,70, 3,48,45, 3, 1,25, 2, 1,26, 3, 2,21, 3, 3,36, 2, 3,48, 0, 0, 0,
+ 3,11,90, 3,11,89, 3, 1,26, 3, 5,38, 2, 6, 3, 2, 9,65, 2,14,59, 1,52,78,
+ 3,38,38, 3,69,64, 2,69,37, 4,63,50, 1,90,71, 1,36,42, 1,38,32, 2, 1,49,
+ 3, 2,22, 1,39,72, 1,39,73, 4, 2,50, 1,44,63, 4, 5,80, 0, 0, 0, 3,20,89,
+ 1,57,60, 5,23,29, 1,72,34, 3,32,63, 1,72,35, 1,72,33, 3,43,51, 1,36,43,
+ 4, 1,41, 1,37,18, 1,37,20, 1,37,19, 2, 1,27, 1,37,21, 1,38,33, 2, 1,50,
+ 3, 2,24, 1,38,34, 3, 2,23, 4, 1,82, 3, 2,25, 4, 2,51, 3, 3,39, 1,39,74,
+ 1,39,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,11, 3, 5,41, 1,41,72, 4, 3,66,
+ 2, 3,49, 0, 0, 0, 0, 0, 0, 4, 5,85, 1,44,67, 2, 6, 4, 4, 5,82, 1,44,65,
+ 1,44,66, 1,44,64, 2,14,60, 3, 8,14, 3, 8,15, 3,68,71, 1,48,56, 1,48,55,
+ 1,48,57, 1,48,54, 3,11,92, 2, 9,66, 1,44,68, 1,48,53, 0, 0, 0, 1,52,79,
+ 1,52,80, 4,12,24, 1,52,81, 3,20,91, 2,20,48, 3,20,92, 3,20,93, 4,17, 6,
+ 1,62,68, 2,26,86, 1,57,61, 3,26,51, 3,26,52, 4,22,89, 3,32,64, 1,67,63,
+ 3,32,65, 1,72,37, 1,72,36, 2,41,49, 3,38,40, 1,76,39, 1,80,45, 4,47,91,
+ 2,65,44, 2,77,40, 2,79, 3, 1,36,44, 1,38,35, 3, 2,27, 1,38,36, 2, 2,17,
+ 1,39,77, 1,39,80, 3, 3,43, 2, 2,15, 2, 2,13, 1,39,79, 2, 2,16, 2, 2,18,
+ 2, 2,12, 1,39,82, 1,39,81, 1,39,78, 1,39,76, 2, 2,14, 3, 3,45, 0, 0, 0,
+ 0, 0, 0, 3, 5,53, 1,41,83, 4, 3,71, 3, 5,44, 1,41,80, 2, 3,54, 2, 3,57,
+ 2, 3,56, 4, 3,73, 1,41,74, 1,41,82, 3, 5,43, 4, 3,74, 1,41,79, 2, 3,53,
+ 2, 3,51, 1,41,78, 3, 5,54, 3, 5,51, 3, 5,46, 1,41,73, 1,41,76, 3, 5,49,
+ 2, 3,52, 2, 3,59, 2, 3,55, 1,41,77, 1,41,81, 1,41,84, 2, 3,50, 2, 3,58,
+ 1,41,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8,33, 3, 8,19, 1,44,73, 1,44,81,
+ 3, 8,24, 2, 6,16, 2, 6, 9, 1,44,82, 2, 6,20, 2, 6, 5, 2, 6,12, 3, 8,37,
+ 3, 8,32, 1,44,72, 2, 6, 6, 1,44,70, 2, 6,13, 2, 6,17, 1,44,69, 3, 8,29,
+ 2, 6,18, 2, 6,11, 3, 8,23, 2, 6,14, 3, 8,21, 1,44,84, 1,44,75, 2, 6,21,
+ 2, 6,19, 3, 8,31, 1,44,80, 1,44,78, 2, 6,10, 1,44,77, 2, 6, 8, 2, 6, 7,
+ 1,44,76, 1,44,74, 1,44,83, 1,44,79, 1,44,71, 3,12, 6, 2, 6,15, 3, 8,38,
+ 1,48,59, 3,12,13, 1,48,66, 2, 9,80, 1,48,58, 2, 9,72, 2, 9,68, 3,12, 1,
+ 2, 9,84, 2, 9,67, 3,12,12, 1,48,61, 2, 9,77, 1,48,64, 1,48,67, 3,12,14,
+ 1,48,62, 2, 9,81, 1,48,65, 3,12, 3, 1,52,88, 2, 9,87, 2, 9,69, 3,12, 4,
+ 3,12, 5, 2, 9,71, 2, 9,78, 2, 9,82, 2, 9,86, 2, 9,83, 2, 9,76, 2, 9,79,
+ 3,12,11, 3,12, 9, 2, 9,73, 1,48,69, 2, 9,75, 2, 9,74, 2, 9,85, 1,48,60,
+ /* plane 0, page 90 */
+ 0, 255, /* first, last */
+ 2, 9,70, 1,48,68, 3,12,10, 1,48,63, 3,12, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1,52,94, 2,14,68, 3,16,32, 1,52,93, 3,12, 7, 4,12,32, 2,14,66,
+ 4,12,30, 1,52,82, 3,16,47, 1,52,87, 3,16,42, 2,14,65, 2,14,62, 2,14,67,
+ 1,52,83, 2,14,61, 3,16,46, 1,52,86, 1,52,84, 3,16,30, 2,14,69, 1,52,85,
+ 1,52,89, 3,16,27, 3,16,37, 1,52,90, 3,16,40, 1,52,92, 3,16,50, 4,12,25,
+ 4,12,29, 1,52,91, 3,16,28, 3,21, 2, 3,21,24, 2,14,63, 2,14,64, 3,16,45,
+ 6,22,55, 3,16,43, 0, 0, 0, 2,14,70, 0, 0, 0, 2,20,55, 1,57,62, 2,27, 6,
+ 2,20,54, 2,20,73, 3,21, 8, 3,21, 4, 1,57,68, 3,21,17, 2,20,71, 3,21,19,
+ 1,57,67, 1,57,63, 2,20,80, 2,20,64, 2,20,67, 3,21,14, 1,57,71, 2,20,77,
+ 2,20,69, 1,57,64, 1,57,72, 3,21,10, 2,20,74, 2,20,72, 3,21,15, 3,21,27,
+ 2,20,57, 2,20,78, 2,20,66, 2,20,61, 3,21,26, 2,20,51, 2,20,79, 2,20,63,
+ 2,20,50, 3,21,25, 1,57,70, 2,20,68, 2,20,81, 2,20,65, 2,20,53, 2,20,58,
+ 2,20,49, 3,21, 7, 1,57,69, 3,21,28, 2,20,62, 2,20,59, 1,57,65, 2,20,52,
+ 3,21,16, 2,20,76, 1,57,66, 3,21,11, 2,20,60, 2,20,56, 3,21, 9, 3,21,20,
+ 2,20,75, 3,21,18,15,19,83, 3,21,23, 0, 0, 0, 3,21,21, 0, 0, 0, 1,62,69,
+ 2,26,93, 3,26,85, 2,26,90, 2,27,13, 2,27, 1, 2,27,14, 3,26,92, 1,62,71,
+ 3,26,67, 3,26,65, 3,26,56, 2,27,10, 2,27, 7, 3,26,59, 3,26,87, 3,26,82,
+ 3,26,57, 3,26,64, 2,27, 8, 2,27,11, 2,27,15, 3,26,91, 2,20,70, 2,27,17,
+ 2,34,45, 3,26,70, 1,62,72, 2,27,18, 2,26,88, 2,27, 4, 3,26,66, 2,27, 9,
+ 3,26,60, 3,26,62, 1,62,70, 1,62,73, 2,27,16, 2,27,19, 2,26,92, 2,26,89,
+ 3,26,83, 3,26,58, 2,26,91, 3,26,55, 3,26,90, 2,27, 2, 2,26,94, 1,62,74,
+ 3,26,54, 2,27,12, 3,26,89, 3,26,88, 2,27, 3, 0, 0, 0, 2,27, 5, 2,26,87,
+ 2,34,33, 2,34,31, 1,67,72, 1,67,70, 2,34,41, 2,34,32, 2,34,42, 2,34,38,
+ 2,34,30, 2,34,44, 2,34,29, 2,34,36, 1,67,69, 1,67,68, 1,67,67, 2,34,34,
+ 2,34,39, 1,67,64, 1,67,71, 3,32,71, 2,34,27, 3,32,70, 2,34,37, 2,34,26,
+ 2,34,35, 1,67,65, 2,34,40, 2,34,28, 1,67,66, 2,34,43, 3,32,68, 3,26,75,
+ 3,32,74, 3,68,72, 0, 0, 0, 3,68,73, 0, 0, 0, 2,41,53, 1,72,42, 1,72,41,
+ 1,72,43, 2,41,65, 2,41,55, 2,41,61, 2,41,50, 2,41,64, 2,41,63, 2,41,67,
+ 2,41,60, 1,72,38, 2,41,59, 1,72,44, 3,38,44, 2,41,52, 1,72,39, 3,38,42,
+ 2,41,66, 1,72,40, 2,41,54, 2,41,57, 2,41,62, 2,41,56, 2,41,51, 3,38,47,
+ 3,38,51, 0, 0, 0, 0, 0, 0, 2,41,58, 2,47,92, 1,76,43, 2,48, 1, 2,47,94,
+ 2,48, 3, 2,48, 5, 3,43,60, 1,76,41, 3,43,56, 2,47,93, 3,43,52, 2,47,91,
+ /* plane 0, page 91 */
+ 0, 255, /* first, last */
+ 3,43,62, 2,48, 6, 2,48, 4, 2,48, 2, 3,43,54, 2,48, 8, 3,43,58, 2,48, 7,
+ 1,76,45, 1,76,40, 3,43,59, 1,76,42, 1,76,44, 3,43,61, 3,43,63, 2,48, 9,
+ 2,54,65, 3,48,48, 3,48,51, 2,54,64, 2,54,63, 3,48,49, 2,54,66, 2,54,59,
+ 3,48,47, 2,54,60, 2,54,68, 2,54,61, 3,48,52, 1,80,46, 2,54,70, 3,48,46,
+ 2,54,69, 2,54,62, 3,48,54, 2,60,61, 1,83,49, 2,60,59, 2,60,64, 2,60,63,
+ 2,54,67, 3,52,48, 1,83,48, 3,52,46, 2,60,62, 2,60,58, 2,60,66, 2,60,65,
+ 1,83,47, 3,52,50, 2,60,60, 3,52,47, 1,80,47, 3,52,49, 0, 0, 0, 3,52,51,
+ 1,86,32, 3,58,17, 3,55,65, 3,55,62, 2,65,45, 2,69,38, 2,69,39, 2,69,40,
+ 1,89,71, 4,67,20, 3,60,22, 1,89,72, 3,60,25, 2,72,79, 3,60,26, 2,75,54,
+ 2,75,53, 3,62, 9, 3,63,34, 2,77,41, 2,77,42, 2,79, 4, 2,80,21, 3,64,83,
+ 1,36,45, 1,36,46, 4, 1,18, 1,36,47, 1,37,22, 1,38,37, 2, 2,19, 1,39,83,
+ 1,39,84, 0, 0, 0, 1,41,87, 1,41,88, 1,41,86, 1,41,85, 0, 0, 0, 1,44,85,
+ 3, 8,40, 4, 6, 2, 2, 6,22, 1,44,87, 1,44,86, 2, 6,23, 4, 6, 3, 3,68,74,
+ 4, 8,78, 1,48,70, 3,12,15, 1,53, 1, 2,14,71, 0, 0, 0, 2,20,83, 4,17,12,
+ 1,57,73, 1,62,76, 2,20,82, 1,62,75, 3,32,81, 1,72,45, 3,32,82, 2,41,68,
+ 1,80,48, 3,48,55, 1,83,50, 2,60,67, 3,58,20, 1,89,73, 3,60,27, 1,91,60,
+ 3, 1,27, 2, 1,51, 3, 2,29, 1,38,38, 2, 1,52, 1,39,87, 3, 3,48, 1,39,85,
+ 1,39,86, 1,39,88, 4, 3,79, 1,41,90, 1,41,89, 3, 5,58, 2, 3,60, 1,41,91,
+ 4, 6, 5, 0, 0, 0, 2, 3,61, 2, 6,24, 3, 8,44, 2, 6,25, 3, 8,42, 1,44,88,
+ 1,44,90, 1,44,92, 1,44,89, 1,44,93, 1,44,91, 3, 8,46, 3, 8,43, 3, 8,45,
+ 0, 0, 0, 0, 0, 0, 1,48,74, 1,48,71, 1,48,73, 1,48,75, 1,48,72, 2,14,72,
+ 2, 9,88,15,10,25, 0, 0, 0, 3,12,18, 2,14,74, 2,14,73, 1,53, 7, 4,12,38,
+ 1,53, 3, 4,12,41, 6,22,70, 1,53, 4, 1,53, 6, 1,53, 8, 1,53, 5, 3,16,55,
+ 1,53,10, 1,53, 9, 4,12,40, 3,16,54, 3,16,53, 0, 0, 0,15,14,94, 1,57,78,
+ 2,20,85, 2,20,84, 1,57,77, 3,21,33, 1,57,76, 1,57,75, 1,57,79, 1,57,74,
+ 3,21,31, 0, 0, 0, 2,27,25, 2,27,22, 1,62,78, 2,27,21, 2,27,26, 4,23, 4,
+ 1,62,80, 2,27,24, 1,62,77, 1,62,79, 2,27,23, 3,26,94, 2,34,46, 3,32,84,
+ 2,34,47, 2,34,48, 3,32,85, 3,32,86, 3,32,83, 4,28,78, 1,72,46, 1,72,54,
+ 2,41,69, 1,72,48, 1,72,52, 2,41,70, 1,72,53, 1,72,49, 1,72,50, 1,72,47,
+ 1,72,51, 1,76,48, 2,27,20, 1,76,49, 1,76,47, 4,41,36, 1,76,46, 2,54,71,
+ 1,80,49, 2,60,68, 2,60,69, 3,58,21, 4,63,53, 1,88,17, 1,89,74, 3,62,10,
+ 1,36,48, 3, 2,30, 1,39,89, 0, 0, 0, 0, 0, 0, 3, 5,62, 3, 5,60, 3, 5,61,
+ /* plane 0, page 92 */
+ 0, 255, /* first, last */
+ 3, 8,48, 1,48,76, 0, 0, 0, 2,14,75, 1,53,11, 3,16,56, 3,16,57, 1,57,82,
+ 1,57,81, 1,57,80, 1,62,81, 1,62,82, 2,27,27, 1,72,55, 1,80,50, 1,36,49,
+ 2, 1,28, 1,37,23, 2, 1,53, 4, 1,83, 3, 2,31, 2, 2,20, 1,39,90, 4, 2,60,
+ 3, 3,50, 3, 8,49, 1,44,94, 3,12,20, 0, 0, 0, 0, 0, 0, 3,27, 4, 2,34,49,
+ 3,32,88, 3,69, 5, 1,36,50, 4, 1,43, 1,37,24, 2, 2,21, 0, 0, 0, 0, 0, 0,
+ 2, 3,62, 4, 6, 9, 2, 3,63, 3, 5,63, 1,41,92,15, 5,52, 0, 0, 0, 3,12,21,
+ 2,27,28, 1,62,83, 0, 0, 0, 2,34,50, 0, 0, 0, 4,41,41, 3,52,52, 1,83,51,
+ 1,36,51, 1,36,71, 1,37,25, 2, 1,54, 1,38,39, 3, 3,52, 1,42, 2, 1,42, 1,
+ 1,41,93, 1,41,94, 0, 0, 0, 0, 0, 0, 2, 6,26, 1,45, 2, 1,45, 3, 2, 6,27,
+ 1,45, 1, 3, 8,52, 3, 8,53, 1,48,80, 2, 9,89, 1,48,79, 1,48,77, 1,48,78,
+ 1,53,14, 1,53,12, 3,16,58, 3,16,59, 2,14,77, 1,53,13, 2,14,76, 3,68,75,
+ 1,53, 2, 2,20,86, 4,17,21, 3,21,35, 1,57,84, 1,57,85, 3,27, 6, 3,27, 5,
+ 1,57,83, 3,21,36, 1,72,56, 2,41,71, 1,76,50, 1,76,51, 0, 0, 0, 2,48,10,
+ 1,83,52, 2,65,46, 2,65,47, 3,58,24, 1,90,72, 2,80,22, 2, 1,11, 1,37,26,
+ 4, 2,63, 1,36,52, 0, 0, 0, 2, 1,56, 2, 1,55, 4, 1,86, 0, 0, 0, 3,68,76,
+ 3, 3,53, 1,39,91, 2, 2,23, 2, 2,24, 2, 2,22, 4, 2,64, 2, 2,25, 0, 0, 0,
+ 3, 3,58,15, 2,39, 0, 0, 0, 0, 0, 0, 3, 5,65, 3, 5,70, 2, 3,71, 4, 3,90,
+ 2, 3,66, 2, 3,68, 2, 3,70, 2, 3,67, 1,42, 6, 2, 3,64, 3, 5,66, 2, 3,65,
+ 1,42, 3, 1,42, 4, 2, 3,69, 2, 3,72, 1,42, 5, 2, 3,73, 0, 0, 0,15, 3,92,
+ 0, 0, 0,15, 3,88, 0, 0, 0, 0, 0, 0, 3, 5,67, 2, 6,41, 3, 8,61, 2, 6,35,
+ 2, 6,30, 1,45, 5, 2, 6,38, 2, 6,36, 2, 6,29, 2, 6,42, 2, 6,45, 2, 6,40,
+ 2, 6,33, 1,45, 7, 2, 6,39, 1,45, 8, 2, 6,34, 2, 6,37, 2, 6,28, 2, 6,32,
+ 2, 6,44, 1,45, 9, 4, 6,15, 1,45,10, 3, 8,62, 2, 6,31, 2, 6,43, 1,45, 4,
+ 1,45, 6, 3, 8,60, 3, 8,63, 3, 8,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6,20, 3, 8,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,10,12, 2,10, 5,
+ 2,10,11, 2,10, 4, 2,10, 6, 2, 9,94, 2, 9,92, 3,12,31, 2,10,13, 2,10,10,
+ 2, 9,90, 3,12,27, 1,48,82, 2,10, 8, 2,10, 9, 3,68,77, 2,10, 7, 2, 9,93,
+ 2, 9,91, 1,48,81, 2,10, 3, 2,10, 1, 3,12,28, 3,12,34, 2,10, 2, 2,10,14,
+ 0, 0, 0, 3,12,30, 3,12,33, 0, 0, 0, 0, 0, 0, 3,12,35, 3,12,29, 0, 0, 0,
+ 1,53,19, 3,16,67, 1,53,18, 3,16,63, 2,14,78, 1,53,15, 2,14,80, 3,16,68,
+ 1,53,20, 2,14,81, 4,12,64, 3,16,65, 1,53,23, 3,16,66, 1,53,21, 2,14,82,
+ 2,10,15, 2,14,84, 3,16,62, 1,53,17, 4,12,60, 1,53,16, 4,12,65, 2,14,79,
+ /* plane 0, page 93 */
+ 0, 255, /* first, last */
+ 2,14,83, 1,53,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,57,87, 1,57,86,
+ 3,21,43, 3,21,40, 3,21,39, 2,20,88, 2,20,92, 2,20,94, 1,57,88, 2,21, 3,
+ 3,21,49, 1,57,92, 2,21, 5, 3,21,50, 1,57,94, 3,21,47, 1,57,90, 1,58, 4,
+ 3,21,53, 1,58, 1, 2,20,90, 1,57,89, 3,27,11, 2,20,89, 2,20,87, 2,21, 7,
+ 2,20,91, 3,21,38, 1,57,91, 2,21, 6, 1,58, 2, 2,21, 2, 2,21, 1, 1,58, 3,
+ 2,20,93, 1,57,93, 3,21,46, 6,30,86, 3,21,42, 0, 0, 0, 2,21, 8, 3,21,52,
+ 2,21, 4, 2,27,43, 2,27,50, 2,27,39, 1,62,86, 2,27,35, 2,27,51, 2,27,29,
+ 2,27,48, 2,27,46, 2,27,40, 3,27,22, 2,27,49, 2,27,42, 3,27, 8, 2,27,34,
+ 2,27,52, 2,27,32, 2,27,45, 2,27,30, 3,27, 7, 2,27,53, 3,27,23, 1,62,87,
+ 3,27,10, 2,27,47, 2,34,53, 2,27,33, 1,62,84, 3,27,14, 2,27,37, 3,27,20,
+ 1,62,85, 2,27,36, 2,27,41, 3,27,19, 4,23,21, 2,27,38, 4,23,15, 3,27,17,
+ 0, 0, 0, 2,27,44, 0, 0, 0, 3,27,13, 0, 0, 0, 0, 0, 0, 2,34,57, 4,28,89,
+ 3,33, 1, 4,28,91, 2,34,60, 2,34,52, 3,32,92, 2,34,54, 3,32,90, 2,34,59,
+ 2,34,58, 1,67,73, 4,28,85, 2,27,31, 2,34,56, 3,32,89, 3,32,93, 1,67,74,
+ 4,28,84, 2,34,51, 2,34,55, 4,28,92, 4,28,88, 3,68,78, 0, 0, 0, 2,41,78,
+ 3,38,60, 2,41,85, 2,41,76, 3,38,52, 2,41,83, 2,41,74, 2,41,82, 2,41,86,
+ 2,41,73, 2,41,77, 2,41,72, 3,38,54, 1,72,57, 4,35,12, 2,41,75, 1,72,58,
+ 2,41,81, 2,41,80, 2,41,79, 3,38,57, 3,38,58, 2,41,84, 3,68,79, 3,43,69,
+ 3,43,70, 3,43,67, 2,48,14, 2,48,16, 1,76,53, 2,48,17, 3,43,75, 2,48,12,
+ 3,43,71, 2,48,11, 2,48,21, 3,43,73, 2,48,19, 1,76,52, 2,48,22, 2,48,13,
+ 2,48,18, 2,48,20, 2,48,15, 3,43,74, 3,43,72, 3,68,80, 3,48,56, 2,54,75,
+ 2,54,80, 2,54,74, 2,54,79, 3,48,59, 2,54,72, 2,54,82, 2,54,78, 2,54,83,
+ 2,54,77, 2,54,73, 2,54,81, 3,48,58, 2,54,84, 2,54,76, 3,68,81, 2,60,70,
+ 1,83,56, 3,52,55, 1,83,54, 3,52,57, 1,83,53, 1,83,55, 3,52,53, 3,68,82,
+ 2,65,48, 3,55,66, 2,68,30, 2,69,41, 3,58,25, 0, 0, 0, 2,72,80, 2,72,81,
+ 3,60,29, 1,89,75, 3,60,28, 2,75,55, 3,60,30, 1,90,73, 4,70,27, 2,75,56,
+ 3,62,13, 2,77,44, 1,91,62, 3,63,35, 1,91,61, 2,77,43, 1,92,21, 3,64,16,
+ 2,79, 5, 4,75,72, 4,74,38, 3, 1,28, 4, 1,12, 1,36,53, 1,39,92, 2, 2,26,
+ 2, 3,74, 1,43,54, 1,58, 5, 3,21,55, 3,43,76, 1,36,54, 1,38,42, 1,38,41,
+ 1,38,40, 4, 2,67, 0, 0, 0, 1,42, 7, 0, 0, 0, 0, 0, 0, 1,53,24, 0, 0, 0,
+ 2,34,61, 1,36,55, 1,36,56, 1,36,57, 1,37,27, 3, 5,71, 3, 8,64, 1,48,83,
+ 4,12,68, 2,10,16, 3,12,37, 3,12,36, 0, 0, 0, 1,62,88, 1,36,58, 2, 1,29,
+ /* plane 0, page 94 */
+ 0, 255, /* first, last */
+ 3, 1,67, 4, 1,44, 1,38,43, 1,38,44, 2, 1,57, 0, 0, 0, 1,39,93, 5, 2,60,
+ 3, 3,60, 3, 5,72, 2, 3,75, 3, 5,75, 1,42, 8, 4, 4, 3, 2, 3,76, 0, 0, 0,
+ 0, 0, 0, 1,45,16, 3, 8,66, 3, 8,65, 2, 6,47, 1,45,14, 1,45,13, 2, 6,46,
+ 1,45,11, 2, 6,48, 1,45,12, 1,45,15, 0, 0, 0, 1,48,84, 3,12,38, 1,48,86,
+ 2,10,20, 2,10,17, 2,10,18, 2,10,19, 2,10,21, 1,48,85, 0, 0, 0, 0, 0, 0,
+ 2,14,86, 2,14,85, 3,16,70, 1,53,26, 3,16,73, 1,53,25, 3,16,72, 3,16,74,
+ 3,16,71, 0, 0, 0, 3,21,59, 1,58, 8, 2,21,10, 3,21,57, 1,58, 7, 1,58, 9,
+ 1,58, 6, 3,21,56, 3,21,58, 0, 0, 0, 0, 0, 0, 1,62,90, 2,21, 9, 5,23,92,
+ 1,62,91, 2,27,55, 3,25,89, 1,62,92, 2,27,54, 1,62,89, 3,27,26, 3,27,27,
+ 3,27,29, 0, 0, 0, 2,34,64, 2,34,66, 1,67,75, 2,34,65, 2,34,63, 2,34,62,
+ 4,29,10, 4,35,21, 3,38,61, 2,41,89, 1,72,63, 1,72,61, 4,35,16, 1,72,62,
+ 2,41,87, 2,41,88, 3,43,77, 1,72,59, 2,48,26, 2,48,24, 3,43,80, 1,76,55,
+ 2,48,25, 1,76,56, 1,76,54, 1,72,60,15,46,62, 3,68,83, 2,54,87, 2,54,85,
+ 2,54,86, 2,48,23, 2,60,72, 1,83,57, 2,60,71, 2,65,49, 2,65,50, 2,54,88,
+ 2,69,42, 3,70,87, 1,36,59, 1,38,45, 1,40, 1, 2, 2,27, 1,39,94, 3, 8,67,
+ 1,45,17, 1,67,76, 3, 1,29, 1,37,28, 1,38,46, 1,48,87, 1,62,93, 3, 1,30,
+ 2, 1,58, 3, 2,39, 2, 1,59, 3, 2,40, 2, 2,28, 3,70,88, 0, 0, 0, 1,42,10,
+ 2, 3,80, 2, 3,78, 1,42,11, 2, 3,77, 2, 3,79, 2, 3,81, 4, 4, 8, 1,42, 9,
+ 3, 5,78, 0, 0, 0, 3, 5,77, 0, 0, 0, 0, 0, 0, 1,45,21, 1,45,22, 1,45,19,
+ 3, 8,69, 3, 8,71, 1,45,18, 2,10,25, 1,45,20, 3, 8,72, 0, 0, 0, 0, 0, 0,
+ 1,48,88, 3,12,40, 2,10,24, 2,10,26, 2,10,23, 2,10,27, 1,48,89, 1,53,29,
+ 2,14,87, 3,16,76, 2,14,89, 1,53,27, 2,14,90, 1,53,28, 2,14,88, 3,16,75,
+ 2,10,22, 2,21,11, 2,21,14, 2,21,15, 2,21,12, 1,58,13, 1,58,12, 1,58,10,
+ 1,58,11, 2,21,13, 3,21,65, 3,21,64, 0, 0, 0, 3,27,31, 1,58,14, 3,27,32,
+ 3,27,30, 1,63, 1, 1,63, 2, 6,40,37, 1,63, 3, 2,34,67, 2,34,69, 2,34,71,
+ 1,67,78, 1,67,77, 1,62,94, 2,34,70, 2,34,68, 3,68,84, 2,41,93, 3,38,65,
+ 3,38,64, 2,41,91, 2,42, 3, 1,72,64, 2,42, 4, 2,42, 1, 1,72,65, 2,41,92,
+ 2,41,90, 2,42, 2, 1,76,58, 2,48,28, 2,41,94, 1,76,60, 2,48,29, 1,76,59,
+ 1,76,62, 2,48,30, 1,76,57, 1,76,61, 0, 0, 0, 2,54,93, 2,54,91, 2,54,90,
+ 2,54,92, 2,54,89, 3,48,60, 4,59, 1, 1,88,19, 3,68,85, 2,72,82, 2,72,83,
+ 3,60,31, 2,75,57, 2,77,45, 1,93, 2, 3, 1,31, 3, 3,65, 1,45,23, 1,42,12,
+ 3, 8,73, 3, 8,75, 1,48,90, 3,12,44, 3,12,43, 3,16,78, 1,36,60, 1,37,29,
+ /* plane 0, page 95 */
+ 0, 255, /* first, last */
+ 4, 1,45, 1,38,47, 2, 2,29, 3, 5,79, 1,42,13, 2, 3,82, 3, 8,77, 2,10,28,
+ 1,48,91, 0, 0, 0, 1,72,66, 1,36,61, 3, 1,68, 3, 2,41, 3, 3,66, 1,40, 2,
+ 15, 2,46, 3,27,34, 1,67,79, 1,36,62, 1,37,30, 1,37,31, 0, 0, 0, 1,38,49,
+ 1,38,48, 4, 2,75, 2, 2,30, 1,40, 3, 4, 2,76, 2, 3,83, 3, 5,81, 1,42,14,
+ 0, 0, 0, 3, 8,78, 2, 6,50, 2, 6,51, 2, 6,52, 3, 8,80, 1,45,24, 1,45,25,
+ 2, 6,49, 1,45,26, 0, 0, 0, 4, 9,12, 4,12,80, 1,48,92, 2,10,29, 3,12,45,
+ 2,14,92, 1,53,30, 3,16,79, 2,14,91, 3,21,66, 1,58,15, 2,21,16, 1,58,16,
+ 2,21,17, 3,21,67, 3,27,39, 3,27,37, 1,63, 4, 4,23,37, 3,27,36, 4,29,16,
+ 2,34,72,15,33,31, 3,33, 2, 2,42, 6, 2,42, 5, 0, 0, 0, 1,72,67, 4,41,62,
+ 1,76,63, 2,48,31, 1,80,51, 2,54,94, 1,83,58, 3,55,67, 1,91,63, 2,79, 7,
+ 3, 1,32, 3, 1,33, 3, 2,42, 3, 3,49, 2, 6,53, 3, 8,81, 2,10,30, 1,58,17,
+ 2,27,56, 1,67,80, 3,33, 3, 3,48,62,15,52,35, 3,55,68, 1,86,33, 0, 0, 0,
+ 3,65,68, 3, 1,34, 1,42,16, 3, 5,82, 1,42,15, 1,48,93, 3,12,48, 2,14,93,
+ 0, 0, 0, 1,58,19, 1,61, 9, 1,58,20, 1,58,18, 1,63, 5, 3,33, 4, 2,42, 7,
+ 1,72,68, 1,76,64, 3,63,37, 2, 1,12, 2, 2,31, 4, 2,77, 2, 3,85, 1,42,17,
+ 2, 3,84, 1,42,18, 4, 4,12, 0, 0, 0, 1,45,30, 2, 6,56, 2, 6,55, 1,45,29,
+ 1,45,27, 1,45,28, 2, 6,54, 3, 8,86, 3, 8,85, 1,49, 1, 2,10,31, 1,49, 4,
+ 1,48,94, 1,49, 6, 1,49, 2, 1,49, 3, 1,49, 5, 4, 9,17, 3,16,80, 3,16,82,
+ 1,53,33, 1,53,32, 1,53,31, 3,16,81, 3,68,86, 0, 0, 0, 2,21,19, 1,58,21,
+ 1,58,24, 1,58,22, 3,68,87, 2,21,18, 1,58,27, 4,17,51, 1,58,23, 2,21,20,
+ 1,58,26, 1,58,25, 4,17,50, 4,17,55, 4,23,42, 2,27,58, 2,27,57, 3,27,43,
+ 1,63, 8, 1,63, 6, 1,63, 7, 2,27,59, 1,67,81, 2,34,74, 1,67,82, 2,34,73,
+ 4,29,20, 4,35,31, 2,48,32, 3,38,67, 3,38,68, 1,76,66, 2,42, 8, 1,76,65,
+ 3,43,82, 1,72,69, 3,68,88, 2,55, 2, 2,55, 1, 1,83,59, 2,60,73, 2,69,43,
+ 2,72,84, 2,72,85, 3,62,15, 1,37,32, 4, 1,22, 1,38,50, 0, 0, 0, 3, 2,45,
+ 4, 2,81, 2, 1,60, 3, 2,44, 5, 2,70, 1,42,20, 1,42,22, 3, 5,88, 2, 2,34,
+ 2, 3,88, 2, 3,87, 2, 3,86, 3, 3,70, 2, 2,33, 2, 2,32, 1,40, 5, 1,42,21,
+ 1,42,19, 1,40, 4, 3, 3,71, 3, 3,73, 3, 5,87, 1,45,31, 2, 6,57, 3, 5,91,
+ 1,45,32, 2, 3,93, 4, 6,48, 2, 4, 1, 2, 3,94, 2, 6,58, 3, 5,86, 3, 5,84,
+ 2, 3,90, 3, 8,94, 1,42,26, 1,42,24, 3, 5,92, 2, 3,89, 2, 3,91, 2, 4, 3,
+ 3, 6, 2, 1,42,23, 3, 6, 1, 2, 3,92, 2, 4, 7, 1,45,34, 3, 5,93, 2, 4, 4,
+ 1,42,25, 3, 6, 3, 2, 4, 2, 2, 4, 5, 3, 5,90, 1,45,33, 3, 5,85, 1,45,35,
+ /* plane 0, page 96 */
+ 0, 255, /* first, last */
+ 2, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8,88,
+ 3, 9, 2, 2, 6,78, 2, 6,65, 2, 6,63, 2, 6,77, 2, 6,72, 1,49,11, 1,45,36,
+ 2, 6,73, 2, 6,76, 1,49, 7, 2, 6,75, 1,45,37, 1,45,42, 1,45,40, 2, 6,66,
+ 4, 9,22, 2, 6,61, 2, 6,68, 1,45,47, 2, 6,79, 1,49, 8, 2, 6,69, 4, 6,47,
+ 1,49, 9, 1,45,43, 2, 6,71, 3,12,58, 2,10,46, 1,49,10, 2, 6,60, 1,45,44,
+ 1,49,12, 1,45,45, 1,45,41, 1,45,46, 2, 6,70, 2, 6,59, 2, 6,74, 1,45,38,
+ 3, 8,87, 3,12,59, 2, 6,62, 2, 6,67, 2, 6,64, 1,45,39, 3, 8,90, 2,10,32,
+ 4, 9,37, 2,10,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 1, 0, 0, 0, 0, 0, 0,
+ 2,10,43, 2,15, 3, 2,10,44, 1,49,18, 2,10,47, 2,10,37, 1,49,17, 2,10,39,
+ 4, 9,31, 2,10,40, 3,12,64, 3,16,89, 2,10,42, 1,49,13, 3,12,54, 3,16,83,
+ 1,53,37, 3,12,55, 3,12,61, 2,10,38, 2,10,34, 1,53,38, 3,16,94, 4, 9,30,
+ 2,10,48, 1,53,34, 2,15, 1, 2,10,41, 3,12,52, 2,14,94, 2,10,36, 2,10,45,
+ 3,12,63, 3,12,65, 1,49,16, 1,53,35, 1,49,22, 1,53,36, 2,10,49, 2,15, 2,
+ 1,49,15, 1,53,40, 1,49,21, 1,49,20, 1,49,19, 1,53,39, 2,10,50, 1,53,41,
+ 1,49,14, 4, 9,43, 2,10,35, 3,16,90, 3,16,88, 3,16,91, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,12,60, 0, 0, 0, 3,16,86, 1,58,28,
+ 2,15, 6, 2,15, 8, 4,13, 5, 2,15,10, 1,53,42, 1,53,48, 2,21,23, 2,15,14,
+ 2,15, 5, 1,58,30, 2,21,21, 3,17, 2, 1,53,47, 1,53,45, 2,15,16, 4,13,13,
+ 2,21,22, 4,13,12, 2,15, 7, 3,17, 5, 1,53,46, 2,15,11, 1,53,49, 2,15,13,
+ 3,21,72, 3,16,84, 1,53,44, 2,15,12, 2,15,15, 2,15, 9, 3,17, 7, 1,53,43,
+ 1,58,31, 3,21,81, 2,15, 4, 1,58,29, 3,21,82, 4,17,75, 3,17, 3, 3,17, 8,
+ 1,58,32, 3,17, 1, 3,21,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,17, 6, 0, 0, 0,
+ 2,21,25, 2,21,34, 1,63,11, 3,27,52, 1,58,34, 1,58,39, 1,63,12, 2,21,36,
+ 1,58,46, 2,27,61, 2,21,26, 1,58,38, 1,58,41, 1,58,36, 2,21,24, 2,21,38,
+ 2,21,41, 2,27,76, 4,17,72, 2,21,39, 2,27,65, 1,58,37, 1,58,44, 1,58,48,
+ 2,21,33, 2,27,60, 2,21,37, 1,58,33, 2,27,62, 2,21,40, 2,27,64, 2,21,29,
+ 3,21,74, 1,63, 9, 3,27,54, 2,21,27, 2,21,28, 1,58,43, 3,27,53, 3,21,78,
+ 1,58,42, 2,21,31, 1,58,47, 2,21,35, 1,58,40, 2,21,32, 3,21,89, 1,58,45,
+ 1,63,13, 1,63,10, 2,27,63, 3,27,56, 2,21,30, 3,27,57, 1,58,35, 3,21,86,
+ 3,21,88, 3,27,58, 3,27,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,21,84, 0, 0, 0,
+ 1,63,18, 1,63,22, 2,27,67, 1,67,87, 1,63,20, 2,27,71, 1,63,24, 2,34,75,
+ 2,27,73, 1,67,89, 1,63,16, 1,63,19, 2,27,74, 3,27,62, 2,27,75, 2,27,81,
+ /* plane 0, page 97 */
+ 0, 255, /* first, last */
+ 1,63,26, 1,67,90, 4,29,29, 2,27,77, 2,27,82, 2,27,70, 1,68, 6, 3,27,47,
+ 1,67,91, 1,63,25, 2,27,68, 2,27,83, 3,27,49, 1,68, 5, 1,63,23, 1,67,84,
+ 2,27,80, 3,27,61, 1,63,27, 2,27,72, 2,27,66, 1,63,17, 2,27,69, 5,31,16,
+ 2,27,78, 3,33,11, 1,67,83, 1,67,88, 1,63,14, 2,27,79, 3,27,65, 1,67,86,
+ 3,27,66, 3,27,67, 3,27,48, 1,63,15, 0, 0, 0, 3,68,89, 0, 0, 0, 1,68, 4,
+ 2,42,10, 2,34,86, 3,33, 9, 2,34,78, 2,42, 9, 4,29,25, 2,34,82, 2,34,84,
+ 3,33, 7, 3,33,12, 2,34,81, 3,38,79, 1,68, 3, 4,29,24, 2,34,80, 1,68, 7,
+ 3,38,78, 6,50,68, 3,33, 8, 2,42,25, 3,38,76, 3,33,14, 1,68, 2, 1,72,71,
+ 2,34,87, 2,42,11, 3,38,77, 3,33,10, 1,67,94, 2,34,79, 2,34,83, 1,72,70,
+ 1,67,85, 2,34,76, 2,34,77, 1,72,72, 1,67,93, 1,68, 1, 1,67,92, 2,34,85,
+ 3,68,90, 0, 0, 0, 2,42,15, 2,42,16, 2,42,21, 1,76,71, 2,42,28, 3,43,83,
+ 1,72,78, 3,43,94, 1,72,77, 2,42,23, 3,43,84, 1,76,70, 2,42,12, 1,72,76,
+ 3,38,81, 2,42,27, 1,72,74, 1,72,75, 3,43,92, 2,42,24, 2,48,49, 1,76,68,
+ 1,63,21, 3,38,82, 2,42,26, 1,76,75, 2,42,18, 4,41,79, 1,76,69, 3,38,74,
+ 1,76,74, 2,42,13, 2,42,17, 2,42,14, 2,42,20, 1,72,79, 1,76,67, 1,72,73,
+ 3,44, 1, 2,48,35, 2,42,22, 3,38,72, 1,76,73, 3,38,83, 1,76,76, 7, 2,81,
+ 2,42,19, 3,38,75, 1,76,72, 2,48,34, 5,45,10, 3,44, 3, 3,38,84, 3,44, 4,
+ 3,43,87, 2,48,39, 1,80,55, 2,48,33, 2,55,14, 2,48,48, 1,76,80, 3,43,90,
+ 1,76,78, 1,80,53, 2,48,45, 2,48,41, 1,76,84, 3,43,86, 2,55, 5, 3,48,72,
+ 3,44, 8, 3,48,71, 1,76,82, 2,48,40, 3,44, 9, 2,55, 3, 3,44, 5, 2,48,44,
+ 4,48,27, 2,48,47, 2,48,38, 3,43,89, 1,76,83, 4,48,23, 3,43,85, 1,76,77,
+ 2,55, 4, 1,80,54, 2,48,46, 1,76,79, 1,76,81, 2,48,43, 1,76,85, 2,48,42,
+ 2,48,37, 2,48,36, 1,80,52, 2,48,50, 2,55, 7, 2,60,75, 1,80,57, 3,48,65,
+ 2,55,13, 3,48,67, 2,55,11, 3,48,74, 2,60,76, 3,48,68, 1,80,58, 2,55,12,
+ 3,48,70, 2,55, 9, 1,83,61, 2,60,74, 3,48,76, 2,55, 6, 2,55, 8, 1,83,62,
+ 1,80,60, 1,83,60, 1,80,59, 1,83,64, 2,55,10, 1,80,56, 3,48,66, 3,48,69,
+ 3,48,75, 0, 0, 0, 0, 0, 0, 3,70,89, 0, 0, 0, 4,59,11, 2,65,59, 4,54,19,
+ 2,65,51, 3,52,65, 3,52,63, 3,52,60, 3,52,62, 3,52,61, 2,60,82, 2,65,52,
+ 2,60,78, 4,54,18, 3,52,59, 1,86,34, 2,60,80, 2,60,79, 1,83,63, 2,60,77,
+ 2,60,81, 2,65,60, 2,65,56, 2,65,58, 4,63,64, 2,65,53, 2,65,54, 4,63,65,
+ 2,65,57, 2,65,55, 1,88,20, 3,55,69, 0, 0, 0, 1,88,23, 1,88,22, 1,88,21,
+ 1,89,76, 2,72,86, 1,89,77, 2,69,44, 1,90,74, 2,75,58, 1,90,75, 1,91,64,
+ /* plane 0, page 98 */
+ 0, 255, /* first, last */
+ 1,92,22, 2,79, 8, 3,63,38, 2,79, 9, 2,79,10, 3,65,30, 0, 0, 0, 2,82,10,
+ 1,37,33, 2, 1,61, 1,38,51, 0, 0, 0, 1,40, 7, 1,40, 8, 1,40, 6, 3, 3,75,
+ 1,40, 9, 1,42,28, 1,42,27, 3, 6, 5, 2, 6,80, 1,45,49, 1,45,48, 0, 0, 0,
+ 3,12,67, 2,15,17, 1,58,49, 1,58,50, 4,17,78, 4,17,80, 3,27,68, 1,63,28,
+ 2,34,88, 1,68, 8, 1,68, 9, 2,34,90, 2,34,92, 2,34,91, 4,29,35, 2,42,30,
+ 3,38,86, 2,42,29, 1,72,80, 2,42,31, 3,38,85, 2,48,51, 1,76,86, 3,44,12,
+ 1,80,61, 3,48,77, 1,83,65, 1,86,35, 1,83,66, 3,63,40, 1,37,34, 3, 1,69,
+ 3, 1,70, 3, 2,46, 2, 4, 8, 3, 6, 8, 3, 6, 9, 2, 6,81, 1,45,51, 1,45,50,
+ 1,45,52, 1,49,23, 2,10,51, 2,10,52, 0, 0, 0, 3,17, 9, 2,15,18, 1,53,50,
+ 1,58,51, 1,63,29, 2,27,84, 1,37,35, 4, 1,23, 1,36,63, 1,37,36, 3, 2,48,
+ 2, 1,62, 1,38,55, 1,38,54, 1,38,52, 1,38,53, 0, 0, 0, 0, 0, 0, 3, 3,79,
+ 1,40,12, 2, 2,41, 2, 2,43, 1,40,11, 2, 2,35, 3, 3,76, 2, 2,36, 3, 3,77,
+ 2, 2,42, 2, 2,38, 2, 2,40, 1,40,10, 2, 2,37, 2, 2,44, 2, 2,39, 3, 3,78,
+ 15, 2,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,42,35, 1,42,44, 1,42,42,
+ 2, 4,18, 2, 4,15, 2, 4,23, 1,42,40, 2, 4,24, 3, 6,25, 1,42,33, 2, 4,21,
+ 3, 6,14, 1,42,39, 2, 4,17, 2, 4,16, 1,42,37, 2, 4,22, 1,42,38, 1,45,53,
+ 1,42,32, 2, 4,19, 3, 6,10, 2, 4, 9, 1,42,29, 3, 6,23, 1,42,48, 2, 4,14,
+ 2, 4,20, 1,42,34, 1,42,36, 3, 6,15, 2, 4,10, 3, 6,22, 2, 4,11, 2, 4,12,
+ 4, 4,25, 1,42,47, 1,42,41, 1,42,46, 2, 4,13, 1,42,45, 1,42,31, 1,42,30,
+ 1,42,43, 3, 6,21, 4, 4,28, 3, 6,19, 3, 6,20, 3, 6,24, 3, 6,17, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,68,91,15, 4,25, 3, 6,18, 3, 9,17, 3, 9,10,
+ 1,45,67, 2, 6,93, 2, 6,86, 1,45,62, 1,45,81, 2, 6,82, 2, 6,89, 2, 6,91,
+ 2, 6,94, 1,45,76, 3, 9, 6, 2, 6,90, 2, 6,83, 1,45,74, 2, 6,87, 3, 9, 8,
+ 2, 7, 1, 1,45,59, 3, 9, 5, 2, 6,92, 1,45,69, 1,45,68, 2, 6,85, 1,45,57,
+ 3, 9,20, 3, 9,18, 1,45,58,15, 7,16, 1,45,56, 3, 9,19, 1,45,80, 1,45,72,
+ 1,45,66, 1,45,54, 2, 6,88, 1,45,65, 1,45,55, 1,45,73, 1,45,82, 2,10,53,
+ 1,45,70, 2, 6,84, 1,45,60, 1,45,63, 1,45,64, 3, 9,14, 1,45,78, 1,45,79,
+ 1,45,77, 1,45,71, 1,45,75, 1,45,61, 1,49,24, 3, 9,16, 3, 9,23, 3, 9,21,
+ 3, 9,22, 3, 9,15, 0, 0, 0, 0, 0, 0, 3, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,12,77, 2,10,59, 1,49,36, 1,49,28, 1,49,30, 1,49,35,
+ 2,10,71, 1,49,33, 2,15,19, 1,53,51, 1,49,38, 2,10,56, 2,10,64, 1,49,34,
+ 2,10,63, 2,10,60, 2,10,68, 2,10,70, 1,49,27, 1,49,31, 1,49,37, 1,53,53,
+ /* plane 0, page 99 */
+ 0, 254, /* first, last */
+ 2,10,65, 1,49,29, 1,49,40, 2,10,58, 3,12,79, 3,12,80, 5, 9,37, 1,49,32,
+ 1,53,52, 1,49,26, 4, 9,57, 2,10,55, 2,10,62, 2,10,54, 2,10,57, 2,10,61,
+ 2,15,20, 1,49,39, 4, 9,49, 2,10,66, 2,10,67, 2,10,69, 1,49,25, 3,12,76,
+ 0, 0, 0, 3,17,18, 0, 0, 0, 3,17,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,12,75,
+ 0, 0, 0, 3,12,78, 0, 0, 0, 4, 9,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1,53,67, 2,15,32, 1,53,65, 1,53,66, 2,15,22, 2,15,38, 3,17,12, 1,53,56,
+ 3,17,15, 3,17,21, 2,21,42, 2,15,40, 2,15,34, 3,17,24, 2,15,25, 3,17,23,
+ 2,15,43, 2,15,28, 1,53,62, 2,21,65, 2,15,31, 1,53,64, 1,53,55, 3,17,28,
+ 2,15,45, 2,15,33, 1,53,58, 2,15,26, 2,15,23, 2,15,24, 1,53,59, 2,15,39,
+ 2,15,46, 1,53,61, 2,15,30, 2,15,29, 1,53,69, 1,53,68, 1,53,54, 1,53,60,
+ 1,53,63, 2,15,42, 3,17,14, 3,17,25, 2,15,36, 1,53,57, 2,15,21, 2,15,44,
+ 2,15,35, 2,15,37, 2,15,41, 3,17,16, 3,17,27, 3,17,22, 0, 0, 0, 0, 0, 0,
+ 3,68,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,68,93, 2,21,43, 3,22,17, 1,58,59,
+ 1,58,79, 1,58,78, 3,22, 7, 1,58,67, 3,22, 9, 2,21,61, 2,21,57, 2,21,54,
+ 2,21,72, 1,58,62, 1,58,54, 3,22, 6, 3,22,18, 2,21,59, 1,63,45, 1,58,58,
+ 2,21,67, 3,22, 2, 1,58,80, 1,58,77, 2,21,63, 2,21,46, 3,21,92, 3,22,11,
+ 1,58,76, 2,21,69, 2,21,45, 1,58,65, 1,58,69, 2,21,68, 3,22, 3, 2,21,55,
+ 1,58,70, 1,58,64, 2,21,44, 3,21,93, 1,63,31, 2,21,71, 2,21,53, 1,58,75,
+ 2,21,56, 2,21,70, 1,58,74, 3,22, 4, 2,27,85, 4,17,87, 1,58,55, 2,21,51,
+ 1,58,60, 1,58,71, 4,17,88, 1,58,66, 2,21,60, 2,21,50, 2,21,48, 2,21,66,
+ 1,58,52, 1,58,72, 1,58,56, 1,63,30, 2,21,64, 1,58,57, 4,18, 3, 1,58,53,
+ 1,58,68, 1,58,63, 1,58,61, 2,21,52, 1,58,73, 2,21,49, 2,21,62, 2,21,58,
+ 2,27,87, 2,27,86, 3,22,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,68,94, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,22,14, 0, 0, 0, 0, 0, 0, 2,21,47, 2,28, 9, 3,27,81,
+ 1,63,33, 3,27,80, 2,28,15, 2,27,92, 2,28,12, 2,34,93, 1,63,36, 2,28,16,
+ 2,28,19, 1,63,35, 2,28, 1, 2,28,18, 2,28,17, 1,63,37, 2,27,88, 1,63,32,
+ 1,63,40, 3,27,83, 1,63,38, 2,28,14, 4,23,81, 2,28, 4, 1,63,42, 2,28,21,
+ 2,28,13, 2,28,22, 1,63,50, 1,63,48, 2,28,11, 2,28,10, 3,27,71, 2,28, 8,
+ 2,28, 2, 1,63,41, 3,27,70, 1,63,39, 2,15,27, 2,27,89, 3,27,72, 2,35,29,
+ 2,27,90, 1,63,34, 1,63,47, 2,35, 1, 4,23,64, 1,63,43, 1,63,44, 2,27,91,
+ 2,28,20, 2,34,94, 2,28, 5, 2,27,94, 1,63,46, 2,28, 6, 2,28, 3, 3,27,82,
+ 3,27,77, 1,63,51, 4,23,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,27,79,
+ /* plane 0, page 100 */
+ 3, 255, /* first, last */
+ 3,69, 1, 0, 0, 0, 0, 0, 0, 1,68,24, 3,33,41,
+ 3,33,18, 2,35, 4, 2,35,23, 2,35,28, 2,35,16, 1,68,20, 2,35,33, 1,68,17,
+ 2,35, 2, 3,33,26, 2,35, 3, 1,68,10, 1,68,19, 2,35,10, 1,68,22, 1,68,23,
+ 2,35,11, 3,33,24, 2,35,24, 2,35,30, 1,68,18, 3,33,30, 1,68,12, 2,35, 9,
+ 2,35, 5, 2,35,32, 2,35,14, 2,35,15, 2,35, 6, 2,35,26, 2,35,17, 2,35,27,
+ 2,35,19, 3,33,29, 1,68,13, 2,42,32, 1,68,16, 1,68,14, 2,35,31, 2,35,22,
+ 2,35,18, 3,33,22, 3,33,19, 2,35, 7, 1,72,90, 2,35,21, 1,68,21, 2,35,13,
+ 3,33,20, 2,35,12, 3,33,40, 3,39, 5, 3,33,34, 1,68,15, 1,68,11, 2,42,53,
+ 2,35,25, 2,35,20, 0, 0, 0, 2,35, 8, 0, 0, 0, 0, 0, 0, 3,33,36, 3,33,37,
+ 0, 0, 0, 3,70,86, 0, 0, 0, 2,42,48, 3,38,88, 2,42,33, 2,42,44, 3,39, 8,
+ 2,42,51, 1,72,88, 1,63,49, 2,42,49, 1,72,83, 3,38,94, 3,39, 4, 3,38,90,
+ 1,72,82, 2,42,56, 4,35,61, 2,42,34, 2,42,47, 2,42,35, 2,42,46, 1,72,86,
+ 2,42,50, 2,28, 7, 3,39, 1, 4,35,62, 3,39,10, 2,42,57, 2,42,42, 1,72,89,
+ 2,48,65, 1,76,87, 3,39, 3, 2,42,55, 2,42,54, 1,72,91, 2,48,52, 1,76,88,
+ 2,48,53, 3,39, 2, 2,42,38, 2,42,39, 2,42,36, 2,42,41, 2,42,37, 2,42,58,
+ 1,72,85, 1,76,89, 1,72,87, 1,72,92, 3,38,91, 2,42,40, 3,39, 9, 2,42,52,
+ 3,44,13, 3,39, 6, 2,42,45, 3,44,21, 0, 0, 0, 2,48,56, 3,44,24, 1,72,81,
+ 1,76,92, 2,55,21, 2,48,61, 2,48,60, 2,48,62, 3,44,16, 3,44,15, 2,48,59,
+ 1,76,93, 3,44,27, 1,77, 5, 1,77, 2, 3,44,17, 1,77, 3, 2,48,54, 2,48,57,
+ 2,48,67, 1,77,11, 1,77, 9, 3,44,14, 2,48,58, 2,27,93, 1,76,90, 2,48,64,
+ 2,48,55, 3,44,30, 1,77,12, 2,48,63, 1,72,84, 1,77, 1, 2,42,43, 3,44,31,
+ 3,44,20, 1,77, 4, 3,44,29, 1,77, 8, 1,77,10, 1,77, 7, 1,77, 6, 3,44,26,
+ 1,76,94, 2,48,66, 1,76,91, 1,77,13, 3,44,25, 0, 0, 0, 3,69, 2, 0, 0, 0,
+ 0, 0, 0, 3,44,23, 0, 0, 0, 1,80,65, 1,80,66, 2,55,20, 1,80,75, 1,80,72,
+ 3,48,80, 1,80,63, 1,80,70, 2,55,22, 1,80,68, 1,80,62, 3,44,18, 1,80,69,
+ 3,48,87, 2,55,19, 1,83,68, 1,80,64, 5,52,62, 1,80,71, 1,83,67, 2,55,18,
+ 2,55,17, 3,48,86, 1,80,73, 3,48,79, 1,80,74, 3,48,89, 2,55,16, 2,55,15,
+ 1,83,69, 2,55,25, 1,80,67, 2,55,23, 3,48,85, 0, 0, 0, 0, 0, 0, 3,52,68,
+ 1,83,70, 3,52,71, 1,83,75, 2,60,85, 2,60,87, 3,55,75, 1,83,72, 3,55,77,
+ 2,60,88, 2,60,84, 3,55,76, 2,60,86, 1,83,73, 1,83,76, 3,52,73, 2,60,83,
+ 1,83,71, 1,83,74, 1,86,37, 2,55,24, 1,86,36, 7,31,66, 3,55,74, 1,86,42,
+ 2,65,64, 3,55,80, 1,86,40, 1,86,41, 2,65,67, 2,65,63, 1,86,38, 2,65,61,
+ /* plane 0, page 101 */
+ 0, 255, /* first, last */
+ 1,88,24, 2,65,65, 4,59,22, 2,65,66, 2,65,62, 3,55,78, 1,86,39, 2,69,45,
+ 3,58,27, 2,69,48, 3,58,28, 3,58,26, 2,69,49, 2,69,47, 2,69,50, 1,88,25,
+ 2,69,46, 3,62,17, 0, 0, 0, 2,72,90, 1,89,79, 2,72,89, 2,72,88, 2,72,87,
+ 1,89,78, 1,89,80, 3,69, 3, 2,75,59, 1,90,77, 1,90,76, 3,63,42, 3,63,43,
+ 2,77,47, 2,77,46, 2,77,49, 1,92,23, 1,91,65, 2,79,12, 2,77,48, 3,63,41,
+ 3,64,18, 2,79,11, 1,92,25, 1,92,24, 1,92,63, 2,80,23, 2,80,93, 1,37,37,
+ 6, 3,76, 3,12,82, 2,28,23, 2,55,26, 3, 1,71, 3, 1,72, 1,40,13, 2, 2,45,
+ 1,42,51, 1,42,49, 4, 4,31, 1,42,50, 4, 4,30, 2, 7, 2, 1,45,83, 1,49,41,
+ 3,12,84, 2,10,72, 3,12,86, 2,10,73, 3,12,83, 1,49,42, 2,15,48, 4,13,35,
+ 1,53,70, 1,53,71, 2,15,47, 3,17,29, 4,13,36, 3,22,23, 3,22,22, 1,58,87,
+ 4,18,11, 1,58,83, 4,18,15, 2,21,73, 1,58,90, 1,58,89, 1,58,82, 1,58,85,
+ 1,58,88, 1,58,84, 3,22,20, 0, 0, 0, 2,28,27, 1,58,81, 1,63,52, 3,27,84,
+ 3,27,85, 3,27,86, 1,63,54, 1,63,55, 2,28,26, 2,28,29, 1,63,53, 2,28,24,
+ 2,28,28, 0, 0, 0, 2,28,25, 3,33,43, 1,68,25, 3,33,46, 4,29,61, 2,35,34,
+ 3,33,45, 3,39,16, 1,72,93, 2,42,59, 1,80,76, 1,77,14, 2,48,68, 1,77,15,
+ 1,77,16, 2,48,70, 2,48,69, 2,48,71, 2,55,28, 0, 0, 0, 0, 0, 0, 2,55,27,
+ 2,60,90, 2,60,89, 1,83,77, 1,83,78, 2,69,51, 3,60,33, 0, 0, 0, 1,37,38,
+ 3, 5,56, 3, 9,25, 4,13,39, 3,17,32, 2,28,30, 3,22,24, 3,22,25, 0, 0, 0,
+ 1,63,57, 1,63,56, 2,35,35, 0, 0, 0, 2,65,68, 1,90,78, 2,79,13, 1,37,39,
+ 4, 4,33, 1,53,72, 3,17,34, 1,58,92, 1,58,91, 2,28,31, 2,28,32, 1,68,26,
+ 2,42,60, 1,72,94, 2,55,29, 4,54,31, 1,37,40, 1,38,56, 3, 9,27, 1,45,84,
+ 2, 7, 3, 0, 0, 0, 2,10,74, 1,49,43, 1,58,93, 3,22,26, 2,28,33, 1,63,58,
+ 1,68,27, 4,29,67, 2,48,72, 2,48,73, 4,48,46, 3,52,75, 2,60,91, 1,86,43,
+ 2,80,94, 1,37,41, 3, 9,28, 2, 7, 4, 1,45,85, 1,49,44, 3,12,87, 2,10,75,
+ 0, 0, 0, 1,53,73, 2,15,52, 2,15,50, 2,15,51, 1,53,74, 2,15,49, 3,22,28,
+ 4,18,20, 3,22,31, 3,22,29, 1,59, 1, 1,59, 2, 2,21,74, 1,59, 3, 1,58,94,
+ 2,28,34, 3,27,89, 2,28,35, 2,35,36, 4,29,68, 0, 0, 0, 1,73, 2, 1,73, 1,
+ 4,48,47,15,52,68, 2,60,92, 2,65,69, 3,58,31, 2,69,53, 2,69,52, 2,72,91,
+ 3, 1,73, 2, 1,30, 1,49,45, 3,22,33, 3,33,48, 1,37,42, 1,38,57, 3, 2,49,
+ 1,40,15, 1,40,14, 3, 3,83, 3, 3,82, 1,40,16, 1,40,17, 2, 2,47, 2, 2,46,
+ 2, 4,25, 1,42,52, 2, 4,28, 2, 4,27, 2, 4,26, 2, 4,29, 3, 6,29, 0, 0, 0,
+ 0, 0, 0, 4, 6,66, 1,45,86, 2, 7,10, 2, 7, 6, 2, 7,15, 3, 9,35, 3, 9,30,
+ /* plane 0, page 102 */
+ 0, 255, /* first, last */
+ 1,45,93, 3, 9,34, 1,45,91, 2, 7,11, 2, 7, 7, 2, 7,14, 1,45,90, 1,46, 3,
+ 2, 7, 9, 2, 7, 5, 1,46, 2, 2, 7,12, 1,45,89, 2, 7,13, 1,45,92, 1,45,94,
+ 2, 7,17, 2, 7,16, 2, 7, 8, 1,45,88, 1,45,87, 1,46, 1, 4, 6,65, 3, 9,32,
+ 3, 9,33,15, 7,30, 3,12,94, 3,12,90, 2,10,80, 2,10,86, 3,13, 3, 1,49,51,
+ 1,49,48, 2,10,77, 2,10,82, 3,12,92, 1,49,54, 1,49,46, 2,10,81, 1,49,49,
+ 1,49,52, 3,12,89, 4, 9,71, 2,10,84, 3,12,93, 1,49,47, 2,10,89, 1,49,50,
+ 3,13, 1, 1,49,53, 2,10,78, 2,10,83, 2,10,87, 2,10,79, 2,10,76, 3,13, 4,
+ 3,13, 5, 2,10,88, 2,10,85, 3,13, 2, 3,12,23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3,17,38, 1,53,82, 1,53,75, 1,53,78, 3,17,44, 1,53,81, 3,17,36, 2,15,55,
+ 3,17,41, 1,53,76, 2,15,53, 3,17,40, 1,53,80, 3,17,45, 3,17,37, 1,53,77,
+ 3,17,35, 2,15,56, 1,53,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,22,34,
+ 4,18,25, 2,21,78, 1,59, 5, 2,21,77, 2,21,79, 1,59, 4, 1,59, 9, 2,15,54,
+ 3,17,43, 2,21,76, 2,21,80, 3,22,36, 1,59, 6, 2,21,75, 1,59, 8, 3,22,37,
+ 1,59, 7, 3,28, 6, 2,28,42, 3,27,93, 2,28,37, 3,28, 5, 1,63,59, 1,63,63,
+ 1,63,60, 2,28,40, 2,28,43, 3,28, 3, 1,63,61, 4,24, 4, 1,63,62, 1,63,67,
+ 2,35,45, 2,28,41, 1,63,65, 2,28,38, 2,28,36, 3,27,92, 1,63,66, 3,27,94,
+ 2,28,39, 3,28, 4, 0, 0, 0, 0, 0, 0, 1,68,33, 4,29,73, 2,35,37, 1,68,30,
+ 1,68,31, 1,68,29, 2,35,42, 2,35,41, 2,35,38, 1,68,35, 3,33,59, 3,33,54,
+ 2,35,40, 1,63,64, 3,33,57, 3,33,49, 2,35,44, 2,35,39, 1,68,32, 1,68,28,
+ 1,68,34, 2,35,43, 3,39,20, 4,35,75, 3,39,21, 1,73, 5, 4,35,79, 2,42,63,
+ 2,42,62, 2,42,61, 1,73, 3, 4,35,77, 3,39,25, 3,39,19, 3,39,23, 0, 0, 0,
+ 1,73, 4, 2,48,76, 2,48,79, 1,77,18, 3,44,36, 3,44,38, 1,77,17, 2,48,80,
+ 2,48,75, 1,77,20, 2,48,77, 3,44,33, 1,77,19, 2,48,74, 3,44,32, 2,48,78,
+ 1,80,82, 1,80,79, 2,55,38, 2,55,37, 3,44,35, 2,55,36, 2,55,31, 3,48,93,
+ 2,55,32, 3,49, 3, 4,48,48, 3,48,90, 1,80,80, 3,48,94, 1,80,77, 1,80,81,
+ 2,55,30, 1,80,78, 2,55,33, 2,55,34, 2,55,39, 3,49, 2, 3,52,81, 2,55,35,
+ 3,52,79, 3,52,80, 2,60,93, 4,54,33, 3,52,76, 3,52,77, 1,83,80, 3,52,82,
+ 2,65,72, 1,83,79, 2,65,70, 2,65,71, 1,86,44, 1,88,27, 2,69,54, 3,58,35,
+ 1,88,26, 3,58,34, 3,69, 6, 2,72,93, 2,72,94, 3,60,34, 1,89,81, 3,60,35,
+ 2,72,92, 1,90,79, 4,74,44, 2,79,14, 1,92,26, 2,80,24, 2,80,25, 3,65,31,
+ 1,37,43, 4, 1,92, 1,40,18, 1,40,19, 1,42,53, 3, 6,33, 2, 7,18, 1,49,55,
+ 1,53,83, 1,59,10,15,18,83, 0, 0, 0, 1,57,23, 0, 0, 0, 1,63,68, 1,63,69,
+ /* plane 0, page 103 */
+ 0, 255, /* first, last */
+ 1,62,18, 2,28,44, 3,69, 7, 1,68,36, 2,42,65, 2,42,64, 3,49, 4, 7,51,39,
+ 1,37,44, 1,40,20, 2, 7,19, 1,46, 5, 3, 9,37, 1,46, 4, 3,13, 7, 2,10,90,
+ 2,10,91, 3,70,18, 2,15,57, 2,15,58, 1,53,84, 1,53,85, 3,22,40, 1,53,86,
+ 2,21,81, 3,22,39, 3,22,38, 1,59,12, 4,24, 9, 1,63,71, 3,28, 9, 1,63,70,
+ 2,35,46, 2,38,33, 2,42,66, 2,55,40, 3,49, 6, 3,70,19, 1,86,45, 1,89,82,
+ 1,37,45, 0, 0, 0, 1,38,60, 1,38,61, 1,38,59, 1,38,62, 1,38,58, 3, 2,50,
+ 0, 0, 0, 1,40,23, 3, 3,87, 2, 2,55, 1,40,22, 1,40,24, 3, 3,88, 3, 3,85,
+ 2, 2,50, 2, 2,49, 2, 2,52, 2, 2,51, 2, 2,54, 1,40,21, 2, 2,48, 2, 2,53,
+ 15, 2,56, 0, 0, 0,15, 2,55, 0, 0, 0, 3, 6,40, 2, 4,30, 1,42,63, 2, 4,31,
+ 2, 4,35, 1,42,62, 3, 6,41, 2, 4,39, 2, 4,34, 2, 4,37, 1,42,55, 1,42,56,
+ 1,42,57, 1,42,58, 3, 6,37, 1,42,65, 3, 6,36, 2, 4,33, 1,42,60, 1,42,66,
+ 3, 6,39, 2, 4,32, 2, 4,38, 3, 6,34, 1,42,59, 2, 4,36, 1,42,61, 1,42,54,
+ 1,42,64, 3, 6,42,15, 4, 2, 0, 0, 0, 0, 0, 0, 4, 4,38,15, 4,51, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1,46,26, 3, 9,39, 2, 7,21, 1,46, 6, 4, 6,73, 1,46,16,
+ 1,46,17, 1,46, 9, 1,46,27, 1,46,11, 2, 7,29, 1,46,22, 2, 7,24, 1,46,12,
+ 2, 7,39, 2, 7,40, 2, 7,32, 2, 7,25, 1,46,25, 2, 7,37, 1,46,20, 1,46,18,
+ 3, 9,50, 2, 7,38, 3, 9,41, 2, 7,36, 2, 7,28, 2, 7,20, 2, 7,27, 1,46,13,
+ 4, 6,69, 1,46,19, 3, 9,42, 1,46, 7, 2, 7,31, 2, 7,30, 2, 7,22, 3, 9,47,
+ 1,46,21, 2, 7,34, 2, 7,23, 1,46,24, 2, 7,41, 1,46, 8, 3, 9,40, 1,46,15,
+ 2, 7,26, 2, 7,35, 1,46,23, 4, 6,71, 1,46,10, 1,46,14, 4, 6,74, 2, 7,33,
+ 0, 0, 0,15, 7,46, 3, 9,46, 3, 9,44, 3,69, 8, 0, 0, 0,15, 7,48, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,69, 9, 0, 0, 0, 2,11,29, 1,49,63,
+ 1,49,76, 3,13,22, 2,11,24, 2,11,14, 1,49,69, 2,11,12, 1,49,62, 2,11, 7,
+ 1,49,72, 2,11,20, 2,11, 1, 2,11, 3, 3,13,14, 4,13,57, 4, 9,78, 3,13,16,
+ 2,11, 6, 2,10,92, 2,11,19, 2,11,35, 1,49,67, 2,11, 8, 2,11,26, 3,13,13,
+ 2,10,94, 2,11,33, 2,11,34, 2,11,37, 2,11,28, 2,11,13, 2,11,21, 1,49,73,
+ 1,49,60, 1,49,68, 1,49,80, 1,49,57, 1,49,59, 3,13,17, 3,13,11, 3,13,26,
+ 2,11, 5, 1,49,77, 1,49,70, 2,11,31, 2,11, 2, 1,49,79, 1,49,74, 2,11,11,
+ 4, 9,77, 4,13,46, 1,49,78, 2,11,18, 2,11,10, 1,49,71, 2,11,30, 2,11,22,
+ 3,13,10, 1,49,65, 2,11,36, 2,11, 9, 1,49,61, 2,11,27, 2,11,17, 1,49,66,
+ 2,11,23, 1,49,58, 2,10,93, 1,49,75, 1,54, 7, 1,49,64, 2,11,16, 2,11,15,
+ 2,11, 4, 3, 9,49, 2,11,32, 3,13,20, 2,11,25, 0, 0, 0, 3,13,18, 1,49,56,
+ /* plane 0, page 104 */
+ 0, 255, /* first, last */
+ 3,13,25, 3,13,23, 0, 0, 0, 0, 0, 0, 6,17,82, 3,13,24, 3,69,11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3,69,10,15,11,40, 2,15,78, 1,54,14, 2,15,79, 3,17,61, 2,15,67, 1,54, 3,
+ 1,54,15, 3,17,55, 2,15,60, 3,17,51, 2,15,69, 2,15,77, 3,17,59, 2,15,59,
+ 2,15,86, 1,53,87, 3,17,62, 3,17,68, 3,17,48, 2,15,85, 2,15,80, 3,17,63,
+ 2,15,81, 1,54, 1, 1,54,12, 2,15,71, 3,17,54, 2,15,72, 2,15,82, 2,15,73,
+ 3,17,67, 2,15,68, 2,15,62, 2,15,63, 2,15,76, 2,15,70, 3,17,52, 3,17,47,
+ 1,53,88, 1,53,92, 2,15,84, 2,15,64, 1,54,10, 1,54, 6, 3,17,58, 4,13,53,
+ 1,54, 9, 1,54,16, 1,53,93, 1,54,11, 2,15,75, 1,54,13, 1,53,90, 3,17,57,
+ 1,53,89, 2,15,61, 4,13,47, 2,15,65, 1,54, 4, 2,15,83, 2,15,74, 2,15,66,
+ 1,54, 8, 1,54, 5, 3,13,15, 1,53,91, 1,53,94, 3,17,66, 3,17,56,15,16, 4,
+ 3,17,65, 3,17,64, 3,69,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,69,12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,22, 8, 3,22,53, 2,21,86, 2,21,87, 2,21,91,
+ 3,22,64, 2,22,12, 2,22, 9, 3,22,46, 2,22, 2, 2,22, 1, 1,59,19, 2,22, 5,
+ 2,22,20, 2,21,82, 3,22,59, 2,22,21, 2,22, 7, 2,22,25, 2,22,13, 1,59,18,
+ 2,22,11, 1,59,13, 1,59,34, 1,59,24, 3,22,55, 1,59,28, 1,59,27, 2,21,83,
+ 4,18,31, 2,22,18, 2,22,24, 2,22,16, 2,22,23, 0, 0, 0, 3,22,49, 2,22, 4,
+ 2,21,84, 2,22,22, 2,22, 6, 1,59,16, 1,59,29, 3,22,58, 2,22,15, 1,59,22,
+ 3,22,45, 3,22,60, 3,22,48, 2,22,14, 2,21,85, 1,59,30, 3,22,43, 1,59,32,
+ 2,22,17, 1,59,33, 1,59,15, 2,21,92, 2,22,19, 3,22,52, 3,20,88, 1,59,21,
+ 1,59,31, 2,21,94, 2,22,10, 2,21,89, 2,21,93, 1,59,26, 2,21,88, 1,59,14,
+ 1,59,23, 1,59,20, 2,22, 3, 1,54, 2, 2,28,67, 1,59,17, 3,22,44, 3,22,50,
+ 3,22,62, 3,22,63, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,55, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,22,54, 0, 0, 0, 3,28,37, 1,59,25, 3,28,33, 2,28,70, 2,28,92,
+ 2,28,81, 1,63,91, 3,28,24, 1,63,86, 2,28,64, 1,63,87, 2,28,80, 3,28,30,
+ 2,28,73, 2,28,86, 1,63,83, 2,28,46, 2,28,88, 1,63,73, 2,28,54, 1,63,76,
+ 1,63,75, 4,24,18, 1,63,92, 3,22,51, 2,28,48, 2,28,82, 2,28,83, 1,63,78,
+ 1,63,74, 2,28,62, 3,28,29, 1,63,85, 2,28,57, 3,28,18, 2,28,84, 1,63,81,
+ 2,28,76, 2,28,89, 2,28,51, 2,28,56, 2,28,50, 3,28,10, 1,63,80, 2,28,69,
+ 2,35,68, 2,28,52, 1,63,84, 2,28,61, 2,28,85, 1,63,79, 2,28,58, 2,28,55,
+ 2,28,72, 1,63,82, 1,63,72, 1,63,94, 2,28,75, 2,28,74, 3,28,17, 3,28,34,
+ /* plane 0, page 105 */
+ 0, 255, /* first, last */
+ 3,28,25, 3,28,27, 3,28,20, 3,28,15, 2,28,47, 1,63,77, 2,28,87, 2,28,63,
+ 2,28,65, 3,28,23, 2,28,78, 2,28,77, 2,28,45, 1,63,88, 1,63,90, 2,28,53,
+ 2,28,60, 2,28,68, 1,63,89, 2,28,59, 2,28,71, 2,28,90,15,27,80, 2,28,79,
+ 3,28,28, 0, 0, 0, 0, 0, 0,15,28, 1, 3,28,36, 0, 0, 0, 3,28,19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,28,91, 0, 0, 0,15,28, 9,
+ 0, 0, 0, 3,69,15, 2,28,49,15,27,78, 3,69,14, 0, 0, 0, 3,28,32, 2,35,88,
+ 1,68,44, 3,33,69, 2,35,86, 2,35,65, 2,35,70, 2,35,63, 3,33,87, 2,35,82,
+ 2,35,49, 2,35,56, 4,29,81, 2,35,80, 2,35,90, 2,35,66, 3,33,72, 2,35,53,
+ 2,35,72, 2,35,77, 2,35,57, 3,33,75, 2,35,74, 2,35,54, 3,33,61, 3,33,85,
+ 2,35,61, 2,35,62, 1,68,46, 2,35,81, 2,35,79, 3,33,83, 2,35,50, 2,35,84,
+ 3,33,84, 2,35,85, 2,35,87, 1,68,50, 1,68,42, 3,33,79, 2,21,90, 2,35,58,
+ 2,35,76, 2,35,59, 1,68,39, 1,68,55, 2,35,83, 1,68,53, 1,68,49, 2,35,48,
+ 1,68,41, 3,33,89, 2,35,51, 1,68,54, 3,33,88, 2,35,67, 2,35,47, 3,33,86,
+ 1,68,47, 2,35,71, 2,35,55, 1,68,48, 2,35,64, 1,68,38, 1,63,93, 2,35,73,
+ 2,28,66, 2,35,52, 4,29,76, 3,33,77, 2,35,78, 1,68,43, 2,35,75, 1,68,40,
+ 2,35,69, 1,68,51, 2,35,60, 2,35,89, 3,33,74, 3,33,91, 0, 0, 0,15,34,41,
+ 15,34,39, 0, 0, 0, 1,68,45, 2,37,12, 0, 0, 0, 3,33,82, 1,68,52, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,34, 8, 0, 0, 0,15,34,28, 2,42,80, 2,42,78, 3,39,26,
+ 2,43, 6, 2,42,76, 3,39,29, 2,42,94, 1,68,37, 1,73, 8, 2,42,72, 2,43, 5,
+ 3,39,49, 2,42,77, 2,42,91, 1,73,13, 1,73, 6, 3,39,46, 2,43, 3, 3,39,38,
+ 2,42,70, 2,43, 2, 3,39,39, 1,73,24, 2,42,87, 2,43, 9, 1,73,22, 2,42,79,
+ 1,73, 7, 2,42,81, 2,43, 1, 1,73,16, 2,42,74, 1,73,20, 1,73,10, 2,42,83,
+ 2,42,73, 2,42,67, 3,39,30, 2,42,93, 1,73,17, 2,43, 8, 2,42,68, 1,73,14,
+ 4,35,87, 2,42,89, 4,35,89, 1,73,15, 2,42,75, 2,42,86, 2,42,82, 2,42,84,
+ 3,39,35, 1,73, 9, 2,43, 7, 1,73,23, 2,42,85, 3,39,27, 2,43,10, 4,36, 7,
+ 3,39,28, 2,42,69, 2,42,90, 1,73,12, 1,73,21, 1,73,19, 2,42,71, 2,42,92,
+ 1,73,18, 3,39,37, 3,39,40, 1,73,11, 2,42,88, 3,39,45, 3,39,36, 4,36, 8,
+ 3,44,52, 2,43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,39,44, 2,48,92, 3,39,34, 2,48,88, 2,48,84, 2,49,10, 2,49, 7,
+ 1,77,23, 3,44,68, 3,44,64, 2,49,14, 2,48,91, 1,77,34, 2,49, 4, 3,44,47,
+ 3,44,49, 2,48,87, 2,49, 3, 1,77,31, 2,49,23, 4,42,29, 2,49,20, 2,49, 6,
+ 2,48,85, 3,44,63, 3,44,55, 2,49,11, 2,49,13, 1,77,27, 2,49, 1, 2,48,90,
+ /* plane 0, page 106 */
+ 0, 255, /* first, last */
+ 2,48,81, 1,77,24, 1,77,32, 4,42,40, 2,49,16, 1,77,33, 2,48,82, 2,49,22,
+ 2,49, 9, 2,49,15, 1,77,30, 3,44,45, 3,44,48, 2,49,12, 3,44,39, 2,49,19,
+ 3,44,59, 1,77,35, 3,44,54, 1,77,29, 2,49, 5, 2,48,86, 2,49,24, 2,48,83,
+ 2,49,17, 1,77,26, 3,44,42, 2,48,93, 3,44,41, 2,48,94, 1,77,25, 1,77,22,
+ 2,48,89, 1,77,28, 3,44,50, 1,77,21, 3,44,66, 2,49,18, 2,49,21, 2,49, 2,
+ 2,55,53, 3,44,62, 3,44,57,15,47,34, 3,44,65, 3,69,16, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2,55,45, 3,49,12, 2,55,41, 1,81, 1, 3,49,28, 3,49,24,
+ 1,80,84, 1,80,89, 1,80,85, 2,55,55, 2,55,66, 1,80,83, 2,55,47, 2,55,56,
+ 2,49, 8, 2,55,57, 3,49, 8, 3,49,11, 1,80,90, 3,49,32, 2,55,72, 1,80,94,
+ 1,81, 3, 2,55,43, 3,49,27, 1,80,93, 3,49,17, 2,55,70, 2,55,71, 2,55,61,
+ 2,55,60, 2,55,52, 3,49, 9, 3,49,30, 2,55,62, 2,55,69, 2,55,68, 3,49,15,
+ 1,80,88, 1,80,86, 2,55,54, 2,55,51, 3,49,36, 2,55,48, 2,55,67, 1,81, 2,
+ 2,55,65, 1,80,92, 1,80,91, 3,49, 7, 2,55,59, 4,42,43, 2,55,42, 2,55,44,
+ 2,55,46, 2,55,64, 2,55,58, 1,80,87, 3,49,14, 2,55,49, 3,49,18, 2,55,63,
+ 3,49,33, 3,49,26,15,52,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,55,50, 3,69,17,
+ 15,53, 9, 0, 0, 0, 3,69,18, 0, 0, 0, 0, 0, 0, 3,52,85, 1,83,88, 2,61,17,
+ 1,83,81, 2,61, 2, 3,52,91, 2,61,13, 1,83,83, 2,61,20, 3,53, 1, 2,61, 9,
+ 3,52,92, 2,61, 4, 3,52,86, 4,54,37, 2,61,21, 2,60,94, 2,61,11, 3,53, 7,
+ 1,83,90, 2,61,16, 2,61,22, 2,61,10, 1,83,82, 2,61,12, 2,61, 1, 1,83,89,
+ 3,53, 3, 3,52,90, 2,61,19, 2,61, 6, 1,83,85, 3,53, 4, 2,61, 8, 2,61, 5,
+ 1,83,91, 2,61, 7, 1,83,84, 1,83,87, 2,61,15, 2,61, 3, 2,61,18, 3,52,88,
+ 2,61,14, 0, 0, 0, 3,53, 9, 3,55,84, 1,86,47, 2,65,83, 1,86,52, 1,86,53,
+ 3,55,87, 3,56, 1, 3,55,86, 1,86,46, 2,65,82, 3,55,88, 2,65,79, 2,65,80,
+ 1,86,50, 2,65,74, 2,65,78, 1,86,49, 3,55,94, 2,65,75, 3,55,89, 3,56, 3,
+ 3,55,93, 3,55,90, 1,86,51, 1,86,48, 3,56, 2, 2,65,73, 2,65,77, 2,65,81,
+ 3,55,91, 0, 0, 0, 3,69,19, 2,69,60, 2,69,57, 2,69,66, 3,58,36, 2,69,65,
+ 2,69,63, 2,69,58, 3,58,47, 1,88,31, 3,58,37, 3,58,46, 4,63,81, 3,58,39,
+ 3,58,45, 2,69,59, 1,88,30, 1,83,86, 2,69,62, 1,88,29, 2,69,67, 2,69,61,
+ 2,69,56, 2,65,76, 3,58,40, 3,58,38, 0, 0, 0, 1,88,28, 3,69,20, 2,69,55,
+ 2,73, 4, 3,60,41, 2,73, 3, 2,69,64, 1,89,83, 3,55,85, 2,73, 7, 2,73, 8,
+ 2,73, 2, 2,73, 6, 4,67,48, 2,73, 1, 3,60,39, 3,69,21, 4,67,46, 0, 0, 0,
+ 2,75,63, 2,73, 5, 1,90,82, 1,90,80, 2,75,61, 3,62,21, 3,62,20, 3,62,19,
+ /* plane 0, page 107 */
+ 0, 255, /* first, last */
+ 2,75,64, 3,62,23, 2,75,60, 2,75,62, 1,90,81, 0, 0, 0, 3,63,47, 3,63,46,
+ 2,77,51, 2,77,52, 1,91,66, 2,77,50,15,73,44, 3,69,22, 3,69,23, 2,79,17,
+ 1,92,27, 2,79,15, 2,79,16, 2,80,26, 3,64,84,15,75,49, 1,93, 3, 2,81, 3,
+ 2,81, 1, 2,81, 2, 2,81, 4, 3,65,32, 3,65,69, 3,65,33, 2,82,11, 0, 0, 0,
+ 1,37,46, 1,40,25, 3, 3,89, 1,46,28, 4, 6,81, 2, 7,42, 3, 9,51, 3, 9,52,
+ 2,11,38, 4, 9,82, 3,13,28, 3,17,70, 2,15,87, 2,15,89, 3,17,69, 2,15,88,
+ 3,17,71, 2,15,90, 1,59,35, 2,22,27, 2,15,91, 3,22,66, 2,22,26, 2,22,28,
+ 2,22,29, 2,28,93, 1,64, 2, 2,28,94, 2,29, 2, 1,64, 3, 1,64, 1, 2,29, 1,
+ 3,33,93, 2,36, 2, 2,35,94, 2,35,93, 3,33,92, 2,35,92, 2,35,91, 1,68,56,
+ 2,36, 1, 1,73,25, 2,43,11, 2,43,13, 1,73,26, 2,43,12, 1,77,37, 3,44,70,
+ 1,77,36, 2,49,25, 3,44,69, 3,44,71, 2,55,74, 2,55,73, 2,55,75, 3,49,38,
+ 3,49,37, 1,81, 4,15,53,25, 2,61,23, 1,83,92, 3,53,11, 2,65,84, 1,86,54,
+ 2,69,68, 1,91,67, 1,37,47, 1,38,63, 1,40,26, 1,42,67, 1,46,29, 1,46,30,
+ 3, 9,53, 3, 9,54, 1,49,81, 3,13,29, 3,17,72, 2,15,92, 3,28,41, 3,28,39,
+ 4,36,13, 3,33,94, 1,68,57, 3,34, 1, 3,39,51, 4,42,46, 2,50,57, 1,81, 5,
+ 1,86,55, 1,37,48, 3, 2,51, 1,40,27, 0, 0, 0, 4, 6,86, 2, 7,44, 1,46,31,
+ 2, 7,43, 3, 9,56, 2,11,39, 1,49,82, 2,11,40, 5, 9,73, 1,49,83, 0, 0, 0,
+ 2,15,94, 1,54,18, 1,54,17, 3,17,74, 2,22,34, 2,22,32, 2,22,33, 2,22,31,
+ 3,22,68, 2,22,30, 0, 0, 0, 0, 0, 0, 2,29, 3, 2,29, 6, 1,64, 5, 2,29, 4,
+ 1,64, 4, 2,29, 5, 0, 0, 0, 2,36, 3, 3,34, 2, 4,36,17, 2,43,14, 2,43,15,
+ 2,43,16, 3,39,52, 2,49,28, 2,49,27, 1,77,38, 2,49,26, 2,49,29, 2,55,76,
+ 4,48,77, 5,59,82, 2,55,77, 2,55,78, 4,54,50, 2,61,24, 1,83,93, 1,86,56,
+ 2,69,69, 0, 0, 0, 1,90,83, 2, 1,31, 3, 9,57, 1,49,84, 2,11,41, 1,54,19,
+ 4,18,46, 4,18,48, 1,59,36, 3,22,69, 1,64, 6, 2,29, 7, 3,28,43, 1,68,59,
+ 1,68,58, 3,34, 6, 0, 0, 0, 2,43,17, 2,43,18, 1,77,39, 1,77,40, 2,55,80,
+ 2,55,79, 2,65,85, 2,79,18, 1,37,49, 2, 1,32, 1,38,64, 3, 3,90, 1,42,68,
+ 2, 4,40, 3, 9,58, 1,49,85, 1,68,60, 1,37,50, 0, 0, 0, 2,11,42, 1,49,86,
+ 2,11,43, 0, 0, 0, 1,83,94, 1,37,51, 3,69,24, 3,69,25, 2, 7,45, 0, 0, 0,
+ 2,11,44, 3,13,34, 2,16, 5, 2,16, 4, 2,16, 2, 3,17,78, 2,16, 1, 2,16, 6,
+ 2,16, 3, 3,17,76, 3,17,77, 1,59,37, 1,59,38, 3,22,70, 0, 0, 0, 1,64, 7,
+ 2,29, 8, 4,24,46, 2,29, 9, 2,29,10, 3,28,45,15,28,28, 3,69,26, 2,36, 7,
+ 2,36, 8, 2,36, 6, 3,34, 8, 2,36, 4, 2,36, 5, 1,68,61, 2,43,19, 2,49,32,
+ /* plane 0, page 108 */
+ 0, 255, /* first, last */
+ 2,49,31, 2,49,30, 2,49,33, 2,55,82, 2,55,81, 1,81, 6, 2,55,83, 0, 0, 0,
+ 1,84, 1, 2,61,25, 3,53,13, 2,65,86, 2,69,70, 2,77,53, 0, 0, 0, 1,37,52,
+ 1,38,66, 1,38,65, 4, 3, 1, 1,46,32, 2, 1,33, 2, 1,63, 1,40,28, 0, 0, 0,
+ 2, 2,56, 2, 4,41, 2, 4,42, 1,46,33, 3, 9,61, 2, 7,46, 3,69,27, 1,49,87,
+ 2,11,45, 2,11,46, 0, 0, 0, 1,54,20, 1,54,24, 2,16, 7, 1,54,23, 1,54,21,
+ 1,54,22, 0, 0, 0, 2,22,35, 1,59,39, 1,64,10, 3,28,46, 1,64, 8, 1,64, 9,
+ 2,29,11, 3,34, 9, 3,34,10, 1,73,27, 1,37,53, 0, 0, 0, 2, 1,64, 3, 2,55,
+ 1,38,67, 3, 2,52, 0, 0, 0, 2, 1,67, 3, 4, 1, 0, 0, 0, 1,38,70, 2, 1,66,
+ 1,38,69, 1,38,68, 1,42,69, 2, 1,65, 3, 2,56, 3, 2,57, 2, 2,57, 0, 0, 0,
+ 0, 0, 0,15, 1,70, 2, 2,61, 2, 2,63, 2, 2,64, 1,40,38, 1,40,39, 2, 2,60,
+ 1,40,34, 3, 3,93, 2, 2,58, 3, 4, 5, 2, 2,62, 1,40,35, 3, 6,53, 1,40,30,
+ 3, 3,92, 1,40,31, 3, 4, 3, 1,40,37, 2, 2,59, 1,40,29, 1,42,70, 1,40,32,
+ 1,40,33, 1,40,36,15, 2,61, 3,69,28, 0, 0, 0, 2, 4,59, 2, 4,57, 2, 4,44,
+ 1,42,82, 2, 4,51, 1,42,77, 2, 4,45, 3, 9,68, 2, 4,53, 3, 6,48, 2, 4,50,
+ 1,42,80, 2, 4,49, 1,42,87, 2, 4,58, 1,42,89, 3, 6,51, 1,42,91, 3, 3,94,
+ 2, 4,43, 3, 6,55, 1,42,78, 2, 4,60, 3, 6,49, 1,42,85, 1,42,88, 3, 6,44,
+ 2, 7,69, 1,42,72, 1,43, 1, 1,42,86, 2, 4,46, 1,42,75, 1,42,90, 2, 4,54,
+ 1,42,73, 1,42,74, 2, 7,67, 2, 4,47, 1,42,81, 1,42,92, 2, 4,61, 2, 4,48,
+ 1,42,79, 3, 6,45, 1,42,84, 2, 7,47, 1,42,93, 2, 4,55, 1,42,83, 3, 9,67,
+ 1,42,94, 1,42,71, 2, 4,52, 1,42,76, 2, 4,56, 2, 7,68, 3, 6,46, 3, 6,50,
+ 3, 6,60, 3, 6,57, 3, 6,54,15, 4,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 6,59, 1,46,45, 1,46,61, 2, 7,54, 1,46,52, 3,13,46,
+ 2, 7,75, 1,46,37, 3, 9,75, 1,46,40, 2, 7,66, 4, 7, 6, 2, 7,52, 2, 7,56,
+ 1,46,48, 1,46,50, 2, 7,59, 1,46,57, 1,46,43, 1,46,41, 1,46,42, 1,46,56,
+ 2, 7,71, 1,46,51, 2, 7,58, 2, 7,60, 1,46,49, 1,46,54, 2, 7,61, 2, 7,74,
+ 3, 9,77, 1,49,88, 1,46,60, 4, 6,93, 1,46,38, 2, 7,73, 3, 9,76, 2, 7,77,
+ 2, 7,57, 2, 7,79, 2, 7,64, 1,46,47, 2, 7,53, 1,46,46, 1,46,64, 1,46,53,
+ 3, 9,74, 2, 7,51, 2,11,55, 1,46,59, 1,46,63, 2, 7,65, 2, 7,70, 3, 9,69,
+ 1,46,65, 1,46,58, 1,46,44, 1,46,34, 3, 9,73, 1,46,39, 4, 6,91, 2, 7,55,
+ 1,46,35, 2, 7,78, 3, 9,71, 2, 7,49, 2, 7,48, 2, 7,62, 2, 7,50, 1,46,62,
+ 1,54,25, 1,46,55, 2, 7,63, 1,46,36, 3,13,47, 1,50, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 7,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,13,38,
+ /* plane 0, page 109 */
+ 0, 255, /* first, last */
+ 2,11,62, 2,11,65, 3,13,48, 2,11,68, 2,11,57, 3,13,40, 3,13,42, 2,11,71,
+ 2,11,74, 2,11,76, 2,11,54, 1,49,89, 1,49,94, 2,16,12, 1,50,16, 2,11,69,
+ 2,11,77, 2,11,61, 2,11,53, 3,13,41, 3,13,39, 3,13,45, 2,16,39, 1,50, 3,
+ 2,11,66, 2,11,58, 2,11,60, 1,50, 8, 3,17,90, 2,11,63, 1,50, 2, 2,11,50,
+ 2,11,72, 3,13,43, 2,11,75, 3,13,37, 3,13,55, 1,49,93, 3,13,51, 1,50,11,
+ 2,11,47, 1,50,13, 1,49,91, 1,50,17, 2,11,73, 2,11,49, 1,50,14, 2,16,33,
+ 2, 7,72, 1,50, 1, 1,49,90, 2,11,56, 2,11,48, 1,50,15, 1,50, 7, 2,11,67,
+ 1,50,12, 1,50,10, 2,11,59, 1,50, 4, 2,11,51, 1,50, 5, 1,50, 6, 2,11,52,
+ 2,11,70, 1,49,92, 2,11,64, 4,10, 1, 3,13,53, 3,13,49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,17,87, 3,17,83,
+ 2,16,15, 1,54,33, 1,54,38, 3,17,89, 3,18, 6, 3,17,86, 2,16,24, 2,16,30,
+ 2,16,26, 2,16,13, 2,16,16, 2,16, 9, 2,16,10, 1,54,45, 1,54,30, 2,16,25,
+ 2,16,34, 1,54,40, 1,54,26, 3,17,79, 1,54,35, 2,16,17, 1,54,37, 2,16,18,
+ 2,16,28, 3,18, 2, 3,18, 5, 3,17,82, 1,54,39, 2,16,43, 2,16,11, 1,54,32,
+ 1,54,31, 1,54,43, 2,16, 8, 2,16,41, 2,16,29, 2,16,42, 2,16,36, 2,16,22,
+ 2,16,37, 3,18, 1, 2,16,31, 2,16,40, 2,16,38, 1,54,44, 2,16,23, 1,54,29,
+ 1,54,28, 1,54,36, 1,54,42, 2,16,35, 1,54,41, 2,16,20, 1,59,40, 3,17,88,
+ 2,16,44, 2,16,19, 2,16,14, 1,54,34, 1,54,46, 1,54,27, 3,18, 7, 2,16,27,
+ 2,16,32, 3,17,93, 3,17,91, 3,17,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,69,29, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1,59,74, 2,22,37, 2,22,41, 3,22,79, 1,59,55, 1,59,53,
+ 3,22,90, 3,23, 1, 1,59,44, 2,22,39, 2,22,38, 1,59,64, 3,28,48, 2,22,44,
+ 1,59,58, 3,22,82, 2,22,62, 2,22,74, 1,59,41, 2,22,59, 2,22,52, 1,59,76,
+ 2,22,36, 3,22,74, 2,22,64, 3,22,75, 1,59,73, 1,59,61, 1,59,72, 1,59,51,
+ 2,22,48, 2,22,66, 2,22,58, 1,59,52, 1,59,46, 2,22,72, 3,22,76, 2,22,65,
+ 2,22,67, 1,59,54, 1,59,62, 2,22,69, 2,22,46, 2,22,63, 2,22,51, 2,22,71,
+ 1,59,67, 1,59,43, 1,59,65, 2,22,56, 2,22,54, 2,22,55, 1,59,56, 2,22,50,
+ 2,22,49, 1,59,45, 2,22,43, 2,22,73, 1,59,47, 2,22,53, 1,59,77, 3,22,84,
+ 1,59,71, 2,22,42, 1,59,68, 1,59,66, 1,59,75, 2,22,60, 1,59,70, 2,16,21,
+ 2,22,61, 1,59,69, 2,22,68, 1,59,42, 2,22,57, 1,59,60, 2,22,45, 1,59,59,
+ 3,22,92, 1,59,57, 1,59,49, 1,59,48, 2,29,12, 2,22,70, 3,28,61, 3,23, 8,
+ /* plane 0, page 110 */
+ 0, 255, /* first, last */
+ 2,22,47, 3,23, 6, 3,23, 3, 2,29,33, 3,22,80, 1,59,50, 3,22,87, 3,23, 4,
+ 3,22,86, 3,23, 5, 3,22,89, 4,18,77, 3,22,93, 0, 0, 0, 0, 0, 0, 3,69,30,
+ 0, 0, 0, 0, 0, 0, 3,23, 9, 0, 0, 0, 0, 0, 0,15,22, 9, 0, 0, 0, 3,23, 7,
+ 3,28,52, 1,64,39, 1,59,63, 1,64,21, 2,29,27, 1,64,35, 3,28,50, 2,29,15,
+ 1,64,18, 1,64,14, 2,29,45, 1,64,20, 1,64,24, 1,64,19, 1,64,28, 2,29,49,
+ 2,29,40, 3,28,75, 3,28,77, 2,29,22, 1,64,33, 1,64,27, 2,29,34, 1,64,11,
+ 2,29,46, 2,29,39, 1,64,15, 2,29,28, 1,64,30, 2,29,57, 2,29,58, 4,24,59,
+ 1,64,12, 2,29,44, 1,64,32, 2,29,32, 2,29,18, 2,29,19, 1,64,36, 2,29,23,
+ 2,29,30, 2,29,24, 3,28,58, 1,64,34, 1,64,42, 2,29,20, 2,29,13, 2,29,14,
+ 3,28,54, 2,29,16, 1,64,17, 2,29,29, 3,28,78, 1,64,31, 1,64,40, 3,28,56,
+ 3,28,73, 2,29,31, 2,29,55, 2,29,47, 1,64,13, 2,29,53, 1,64,25, 3,28,70,
+ 1,64,23, 3,28,68, 2,29,59, 1,64,22, 2,29,37, 2,29,25, 2,29,35, 1,64,45,
+ 2,29,41, 2,29,38, 2,29,21, 1,64,41, 2,29,51, 2,29,48, 2,29,56, 1,64,16,
+ 2,29,36, 1,64,44, 3,28,59, 2,29,43, 3,34,26, 3,28,64, 1,64,26, 1,64,29,
+ 3,28,60, 2,29,42, 1,64,43, 2,29,26, 2,22,40, 3,28,49, 3,28,76, 2,29,52,
+ 2,29,50, 2,29,54,15,28,61, 3,28,66, 3,69,34, 4,24,62, 3,28,67, 0, 0, 0,
+ 3,28,72, 0, 0, 0,15,28,39, 0, 0, 0, 3,69,32, 0, 0, 0, 4,24,63, 0, 0, 0,
+ 2,29,17, 1,64,38, 3,69,31, 3,69,33, 0, 0, 0, 2,36,39, 2,36,38, 2,36,12,
+ 1,68,67, 3,34,16, 2,36,37, 2,36,15, 2,36,16, 4,30,31, 1,68,77, 2,36,46,
+ 1,68,72, 2,36,36, 3,34,19, 2,36, 9, 1,68,78, 1,68,68, 2,36,24, 2,36,14,
+ 2,36,17, 2,36,41, 1,68,62, 2,36,48, 2,36,40, 1,68,71, 2,36,29, 1,68,82,
+ 3,34,14, 3,34,22, 1,68,81, 1,68,75, 3,34,32, 4,30,22, 2,36,47, 1,68,63,
+ 2,36,27, 2,36,18, 2,36,31, 2,36,43, 1,68,83, 3,34,25, 1,68,65, 2,36,26,
+ 3,34,13, 2,36,19, 1,68,74, 3,34,17, 1,68,73, 2,36,22, 2,36,32, 2,36,42,
+ 2,36,13, 2,36,23, 1,68,66, 2,36,33, 1,68,79, 1,68,70, 2,36,20, 1,68,69,
+ 2,36,11, 2,36,25, 2,36,45, 1,64,37, 1,73,55, 2,36,28, 2,43,20, 2,36,30,
+ 2,36,44, 1,68,76, 2,36,21, 1,68,64, 1,68,80, 1,77,58, 2,36,10, 6,52,46,
+ 2,36,35, 3,34,36, 3,34,30, 3,34,39, 2,36,34, 3,34,29, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,34,37, 0, 0, 0, 0, 0, 0, 3,34,31, 0, 0, 0,
+ 3,34,27, 3,34,38, 0, 0, 0, 2,43,48, 1,73,52, 2,43,37, 2,43,42, 1,73,41,
+ 3,39,54, 2,43,22, 1,73,54, 3,39,55, 1,73,32, 2,43,21, 2,43,54, 1,73,56,
+ 2,43,25, 2,43,41, 3,39,69, 2,43,27, 2,43,57, 2,43,53, 1,73,30, 1,73,40,
+ /* plane 0, page 111 */
+ 0, 255, /* first, last */
+ 2,49,59, 1,73,53, 1,73,38, 2,43,23, 3,39,67, 2,43,52, 1,73,42, 2,43,49,
+ 2,43,62, 2,43,29, 2,43,38, 3,44,88, 3,39,59, 2,43,60, 2,43,50, 1,73,37,
+ 3,44,74, 3,39,68, 2,43,36, 1,73,31, 1,73,29, 1,73,47, 4,36,35, 3,39,63,
+ 2,43,34, 2,43,31, 2,43,32, 3,39,58, 2,43,56, 3,39,60, 2,43,61, 2,43,59,
+ 1,73,35, 2,43,63, 1,73,39, 1,73,46, 4,36,36, 2,43,24, 2,49,35, 2,43,33,
+ 3,39,62, 1,73,33, 1,73,51, 1,73,48, 1,73,36, 2,43,43, 2,43,28, 1,73,49,
+ 2,43,45, 1,73,43, 1,73,45, 1,73,28, 3,39,61, 2,43,47, 2,43,39, 2,43,26,
+ 1,73,44, 2,43,55, 2,43,58, 2,43,35, 2,43,46, 3,44,84, 1,73,34, 1,77,41,
+ 2,43,44, 2,49,34, 3,39,66, 2,43,51, 3,39,65, 4,36,50,15,47,89, 0, 0, 0,
+ 3,69,36, 3,69,37, 3,39,70, 0, 0, 0, 3,69,35, 0, 0, 0, 2,43,30, 2,49,44,
+ 2,49,54, 1,77,44, 2,49,53, 2,49,65, 1,77,46, 2,49,51, 4,42,56, 2,49,55,
+ 1,77,57, 3,44,93, 2,49,46, 1,77,49, 3,44,83, 2,49,58, 2,55,91, 1,77,61,
+ 1,77,60, 2,49,60, 2,49,43, 2,49,70, 1,77,55, 3,44,75, 1,77,45, 2,49,63,
+ 4,42,73, 2,49,67, 2,49,72, 2,49,61, 2,49,49, 1,77,48, 1,77,51, 1,77,59,
+ 1,77,54, 3,44,85, 2,49,52, 2,43,40, 3,44,94, 3,44,76, 2,49,48, 2,49,71,
+ 1,77,50, 3,44,89, 1,77,53, 2,49,73, 1,77,42, 2,49,62, 2,49,36, 2,49,68,
+ 1,84,10, 3,44,90, 2,49,50, 4,48,85, 1,77,43, 2,49,45, 1,77,47, 2,49,37,
+ 1,73,50, 2,49,41, 4,42,55, 2,49,66, 2,49,42, 2,49,40, 1,77,52, 3,44,91,
+ 2,49,64, 3,44,87, 2,49,39, 2,49,57, 2,49,56, 2,49,69, 2,49,47, 1,77,56,
+ 4,42,68, 3,69,39,15,47,93, 0, 0, 0, 0, 0, 0, 3,69,38, 2,55,94, 3,49,54,
+ 1,81,19, 1,81, 9, 2,56,12, 2,55,86, 1,81,11, 2,56, 4, 1,81,18, 1,81,13,
+ 2,56, 2, 2,61,27, 2,56, 8, 2,56,14, 2,56, 7, 2,55,84, 2,56, 5, 2,56,16,
+ 2,56,18, 1,81, 8, 2,56,17, 1,81,14, 1,81,20, 3,49,52, 1,81,17, 3,49,56,
+ 2,56,11, 1,81,16, 2,56, 6, 3,49,45, 2,55,88, 2,55,93, 3,49,48, 2,56,10,
+ 1,81,15, 1,81,12, 1,81, 7, 1,81,10, 2,55,92, 4,49, 2, 2,49,38, 2,55,87,
+ 2,55,90, 2,56,13, 2,56, 1, 2,55,85, 2,61,26, 2,56,15, 2,55,89, 2,56, 9,
+ 3,44,81, 0, 0, 0, 0, 0, 0, 3,49,53, 2,61,29, 1,84,14, 3,53,16, 3,53,15,
+ 1,84, 2, 3,53,21, 3,53,22, 1,84, 6, 2,61,31, 2,61,37, 2,61,35, 1,84, 4,
+ 1,84, 5, 1,84,12, 2,61,38, 2,61,30, 1,84, 7, 3,53,17, 2,61,34, 2,61,33,
+ 2,61,39, 1,84,13, 3,53,23, 1,84, 8, 1,84,11, 2,61,32, 1,84,15, 1,84, 9,
+ 1,84,16, 1,84, 3, 2,61,36, 3,58,53, 2,61,28, 3,49,57, 3,53,25, 2,66, 5,
+ 3,69,40, 0, 0, 0, 1,86,61, 2,66, 2, 2,66, 4, 3,56, 8, 1,86,59, 2,65,94,
+ /* plane 0, page 112 */
+ 0, 255, /* first, last */
+ 2,66, 1, 2,65,90, 3,56,10, 3,56, 7, 2,56, 3, 2,65,91, 1,86,60, 2,65,87,
+ 3,56, 6, 1,86,57, 2,66, 6, 1,86,58, 2,65,88, 2,65,89, 2,65,93, 1,86,63,
+ 3,56, 9, 1,86,62, 4,59,62, 3,56,11, 2,65,92, 1,88,37, 2,69,74, 2,69,80,
+ 1,88,38, 2,69,71, 1,88,35, 1,88,32, 2,69,82, 1,88,36, 3,58,50, 1,88,33,
+ 2,69,73, 2,69,76, 2,69,77, 2,69,78, 2,69,81, 3,58,52, 2,66, 3, 2,69,72,
+ 1,88,34, 2,69,79, 2,73,20, 2,69,75, 3,58,51, 3,69,42, 3,69,41, 2,73,11,
+ 1,89,85, 2,73,14, 1,89,86, 2,73,23, 2,73,13, 2,73,10, 3,60,49, 2,73,12,
+ 2,73,16, 2,73,19, 2,73,18, 2,73,22, 2,73, 9, 3,60,47, 1,89,84, 2,73,17,
+ 2,73,21, 2,73,24, 2,73,15, 2,75,65, 2,75,66, 2,75,70, 2,75,71, 3,62,28,
+ 2,75,68, 2,75,69, 2,75,67, 3,62,26, 1,90,84, 3,62,27, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1,91,68, 2,77,57, 3,64,22, 3,63,50, 2,77,54, 2,77,55, 2,77,56,
+ 1,91,69, 3,64,23, 2,79,20, 2,79,19, 3,69,43, 2,80,29, 1,92,64, 2,80,27,
+ 2,80,30, 2,80,28, 2,81, 5, 1,93, 4, 1,93,18, 2,81,81, 2,81,59, 3,65,89,
+ 2,81,80, 2,82,30, 2,82,31, 1,37,54, 4, 1,48, 0, 0, 0, 3, 4, 8, 3, 4, 6,
+ 1,40,40, 2, 2,65, 3, 4, 7, 3, 4,11, 2, 4,62, 3, 6,66, 1,43, 2, 3, 6,63,
+ 1,43, 5, 3, 6,62, 2, 4,63, 3, 6,67, 1,43, 3, 1,43, 4, 3, 6,64,15, 4,81,
+ 0, 0, 0, 3, 9,87, 2, 7,88, 2, 7,90, 2, 7,85, 2, 7,82, 2, 7,84, 3, 9,84,
+ 3, 9,80, 3, 9,85, 1,46,69, 3, 9,79, 3, 9,89, 3, 9,86, 1,46,67, 3, 9,82,
+ 3, 9,81, 2, 7,86, 1,46,68, 2, 7,83, 2, 7,80, 1,46,66, 2, 7,87, 4, 7, 9,
+ 2, 7,81, 1,46,70, 2, 7,89, 4, 7,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,11,79,
+ 3,13,62, 2,11,83, 3,13,60, 3,13,58, 1,50,26, 3,13,56, 4,10, 6, 3,13,69,
+ 3,13,66, 2,11,86, 3,13,63, 1,50,18, 1,50,21, 1,50,23, 1,50,25, 1,50,22,
+ 2,11,82, 2,11,81, 3,13,68, 1,50,20, 2,11,84, 2,11,85, 3,13,67, 2,11,78,
+ 1,50,24, 3,13,72, 1,50,19, 3,13,61, 0, 0, 0, 0, 0, 0, 2,11,80, 3,69,45,
+ 4,10, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,18, 8, 2,16,58, 2,16,59, 2,16,60,
+ 1,54,51, 4,13,85, 1,54,47, 2,16,49, 3,18,10, 2,16,57, 2,16,62, 1,54,52,
+ 3,18,11, 2,16,47, 2,16,53, 2,16,46, 2,16,56, 3,18,17, 3,18,15, 2,16,52,
+ 1,54,48, 1,54,50, 2,16,61, 3,18, 9, 2,16,45, 2,16,48, 2,16,54, 3,18,13,
+ 2,16,55, 2,16,63, 2,16,51, 3,18,12, 1,54,49, 3,69,47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,69,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,18,16, 1,59,82,
+ 2,22,81, 3,23,16, 3,23,18, 2,22,83, 2,22,79, 3,23,15, 2,22,91, 2,22,77,
+ 2,22,90, 1,59,78, 2,22,75, 2,29,63, 2,22,85, 1,59,81, 3,23,21, 2,22,86,
+ /* plane 0, page 113 */
+ 0, 255, /* first, last */
+ 2,22,89, 3,23,14, 2,22,93, 3,23,12, 2,22,82, 4,18,82, 2,22,87, 3,23,13,
+ 3,23,17, 1,59,79, 1,59,80, 2,22,92, 2,22,80, 2,22,76, 2,22,94, 3,23,19,
+ 2,22,84, 3,69,48, 3,69,49, 2,22,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,22,78,
+ 0, 0, 0, 1,64,46, 1,64,47, 2,29,73, 1,64,53, 3,28,84, 2,29,61, 2,29,70,
+ 2,29,60, 1,64,50, 2,29,68, 2,29,66, 3,28,93, 2,29,67, 1,64,48, 3,28,92,
+ 2,29,71,15,28,94, 3,28,79, 3,28,90, 3,28,82, 3,29, 1, 2,29,64, 2,29,62,
+ 1,64,49, 2,29,65, 2,29,69, 3,28,91, 3,28,89, 3,28,81, 1,64,51, 3,28,83,
+ 3,28,87, 3,69,51, 2,29,72, 3,69,52, 0, 0, 0, 3,69,53, 0, 0, 0, 3,69,50,
+ 0, 0, 0, 2,36,54, 2,36,61, 2,36,63, 2,36,69, 3,34,55, 1,69, 2, 2,36,49,
+ 3,34,44, 1,68,88, 3,34,46, 2,36,64, 1,68,93, 2,36,70, 1,68,84, 3,34,49,
+ 2,36,67, 3,34,56, 2,36,51, 2,36,68, 2,36,50, 0, 0, 0, 1,69, 4, 3,34,50,
+ 2,36,62, 1,68,85, 2,36,71, 3,40,28, 1,68,90, 2,36,55, 1,69, 1, 2,36,66,
+ 2,36,53, 2,36,60, 2,36,56, 2,36,52, 1,68,87, 1,68,94, 1,68,92, 1,68,89,
+ 1,69, 3, 1,68,86, 2,36,59, 3,34,47, 1,68,91, 3,34,57, 1,64,52, 3,34,41,
+ 2,36,65, 3,69,57, 2,36,57, 0, 0, 0, 3,34,51, 3,69,55, 3,69,56, 3,69,54,
+ 2,36,58, 4,36,55, 4,36,59, 2,43,71, 3,39,79, 1,73,59, 3,39,78, 3,39,76,
+ 2,43,67, 2,43,73, 2,43,69, 3,39,80, 1,73,61, 2,43,68, 2,43,72, 2,43,64,
+ 3,39,82, 2,43,66, 1,73,60, 3,39,74, 3,39,77, 3,39,75, 3,39,72, 2,43,70,
+ 2,43,65, 3,39,71, 1,73,62, 3,69,59, 1,73,57,15,41,43, 3,69,58, 2,43,74,
+ 15,41,63, 1,73,58, 2,49,79, 2,49,76, 2,49,88, 2,49,82, 2,49,84, 1,77,62,
+ 2,49,78, 2,49,86, 3,45,10, 3,45, 4, 2,49,85, 2,49,83, 3,45, 9, 2,49,89,
+ 1,77,65, 2,49,80, 2,49,87, 3,45, 8, 1,77,63, 3,45, 5, 3,45, 2, 2,49,75,
+ 2,49,77, 1,77,64, 2,49,74, 2,49,90, 3,69,60, 2,49,81, 3,49,66, 3,49,58,
+ 2,56,22, 1,81,27, 3,49,64, 3,49,60, 2,56,33, 2,56,31, 1,81,21, 2,56,21,
+ 2,56,24, 2,56,25, 2,56,20, 1,81,31, 1,81,32, 2,56,19, 2,56,34, 2,56,29,
+ 1,81,25, 1,81,22, 2,56,28, 2,56,26, 3,49,67, 4,49, 3, 1,81,28, 2,56,30,
+ 1,81,23, 3,49,62, 1,81,24, 3,49,70, 2,56,27, 1,81,26, 2,56,23, 7,15,47,
+ 2,56,32, 1,81,29, 2,56,35, 2,56,36, 1,81,30, 3,69,61, 3,69,62, 1,84,18,
+ 1,84,25, 2,61,40, 2,61,46, 3,53,28, 2,61,44, 1,84,21, 1,84,20, 1,84,17,
+ 2,61,42, 3,53,30, 3,53,35, 3,53,32, 1,84,23, 1,84,22, 1,84,19, 3,53,33,
+ 2,61,45, 2,61,41, 2,61,43, 3,53,34, 1,84,24,15,58,83, 0, 0, 0, 0, 0, 0,
+ 1,86,67, 2,66, 9, 3,56,13, 1,86,64, 1,86,65, 2,66,11, 1,86,66, 2,66, 8,
+ /* plane 0, page 114 */
+ 0, 255, /* first, last */
+ 3,56,14, 2,66, 7, 2,69,86, 2,66,10, 3,58,54, 2,69,87, 1,88,39, 2,69,85,
+ 3,58,55, 4,63,94, 2,69,84, 3,60,57, 2,69,83, 1,88,40, 3,69,63, 3,60,54,
+ 1,89,87, 3,60,56, 3,60,53, 2,73,25, 2,73,26, 3,58,56, 3,60,51, 3,60,55,
+ 3,69,65, 2,75,74, 2,75,73, 1,90,85, 3,63,51, 2,75,72, 2,77,58, 2,77,59,
+ 3,63,52, 3,64,25, 2,79,21, 2,80,31, 3,65,35, 3,65,34, 2,81, 6, 2,82,12,
+ 1,93,38, 2,82,32, 1,37,55, 4, 1,49, 1,46,71, 1,46,72, 3,13,73, 4,10,10,
+ 1,50,27, 0, 0, 0, 3,29, 2, 0, 0, 0, 4,42,76, 1,84,26, 1,37,56, 0, 0, 0,
+ 1,46,73, 1,54,53, 1,69, 5, 1,37,57, 3,13,75, 1,59,83, 1,73,63, 2, 1,34,
+ 3, 9,92, 2,11,87, 2,16,64, 4,30,44, 2,43,75, 4,42,77, 1,84,27, 1,37,58,
+ 1,46,74, 2,11,88, 2,11,89, 2,29,74, 1,64,54, 0, 0, 0, 3,34,61, 2,36,72,
+ 3,34,60, 3,34,59, 1,69, 6, 2,43,76, 4,36,62, 3,45,14, 1,77,66, 3,45,13,
+ 1,88,41, 1,37,59, 2,29,75, 1,37,60, 0, 0, 0, 1,40,42, 2, 2,66, 1,40,41,
+ 1,43, 8, 1,43, 7, 1,43, 6, 2, 4,64, 3, 6,68, 3,10, 1, 3,10, 2, 1,46,75,
+ 3,10, 3, 1,46,76, 2, 7,91, 4, 7,17, 2,11,90, 3,13,77, 2,11,93, 1,50,29,
+ 2,11,91, 4,10,15, 1,50,28, 2,11,92, 1,50,30, 0, 0, 0, 2,16,67, 2,16,66,
+ 2,16,65, 1,54,54, 3,18,22, 2,23, 2, 2,23, 3, 1,59,84, 2,23, 1, 2,23, 4,
+ 1,64,56, 1,59,85, 3,29, 4, 3,29, 3, 1,64,55, 2,29,79, 2,29,78, 3,29, 5,
+ 2,29,76, 2,29,77, 0, 0, 0, 2,29,80, 2,36,74, 2,36,73, 2,36,77, 4,30,47,
+ 2,36,76, 2,36,75, 1,73,64, 2,43,79, 3,39,85, 2,43,78, 1,73,65, 2,43,77,
+ 2,49,91, 3,45,15, 2,49,92, 1,77,67, 4,49,13, 2,56,37, 2,56,38, 5,46,23,
+ 0, 0, 0, 2,69,92, 1,88,42, 2,69,91, 2,69,90, 2,69,88, 2,69,89, 1,90,86,
+ 2,73,27, 2,77,60, 2,81, 7, 3,65,91, 1,37,61, 4, 1,24, 2, 1,68, 1,38,71,
+ 2, 1,69, 3, 4,12, 3, 4,13, 4, 3, 7, 2, 2,67, 2, 2,68, 3, 6,75, 0, 0, 0,
+ 0, 0, 0, 3, 6,73, 2, 4,70, 3, 6,70, 3, 6,71, 2, 4,66, 3, 6,74, 2, 4,65,
+ 1,46,77, 2, 4,69, 1,43,10, 2, 4,67, 1,43, 9, 2, 4,71, 2, 4,68, 3, 6,72,
+ 0, 0, 0, 2, 8, 1, 2,11,94, 2, 7,93, 2, 8, 6, 3,10, 6, 1,46,78, 3,10,10,
+ 1,46,81, 2, 8, 7, 2, 8, 3, 3,10, 7, 2, 8, 4, 4, 7,22, 2, 7,92, 1,46,80,
+ 2, 7,94, 1,46,79, 2, 8, 5, 3,10, 8, 2, 8, 2, 6,12,94, 0, 0, 0, 2,12, 4,
+ 1,50,32, 1,50,33, 3,13,85, 2,12, 7, 2,12, 1, 3,13,84, 2,12, 6, 3,13,80,
+ 2,12, 2, 1,50,31, 2,12, 5, 2,12, 3, 3,13,83, 3,13,81, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,16,73, 2,16,70, 3,18,24, 2,16,72, 1,54,59,
+ 1,54,58, 1,54,56, 2,16,69, 2,16,74, 1,54,55, 1,54,57, 2,16,71, 2,23,12,
+ /* plane 0, page 115 */
+ 0, 255, /* first, last */
+ 2,16,68, 2,16,75, 3,18,25, 0, 0, 0, 4,19, 3, 4,19,10, 3,29, 6, 2,23, 7,
+ 2,23,11, 5,19,52, 2,23,10, 2,29,82, 2,29,93, 4,19,13, 3,23,27, 2,23,13,
+ 3,23,26, 2,23, 8, 2,29,81, 1,59,89, 4,19, 2, 4,19,12, 1,59,88, 2,23, 6,
+ 2,23, 9, 1,59,90, 3,23,25, 1,59,87, 1,59,86, 2,23, 5, 2,23,14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2,29,84, 2,29,91, 3,29, 7, 1,64,58, 2,29,90, 2,29,87,
+ 3,29,14, 1,64,60, 3,29, 9, 3,29,11, 3,29,10, 2,29,89, 3,34,65, 3,29,13,
+ 2,29,83, 2,29,85, 2,29,88, 2,29,86, 1,64,59, 2,29,92, 1,64,57, 1,69, 7,
+ 3,29, 8, 0, 0, 0, 2,36,81, 2,36,80, 2,36,78, 6,52,92, 1,69,10, 1,69, 9,
+ 2,36,82, 3,34,63, 2,36,79, 2,43,80, 1,73,66, 1,69, 8, 3,34,66, 3,69,66,
+ 3,69,67, 2,36,84, 2,36,83, 3,45,16, 2,43,83, 2,43,81, 1,77,68, 3,39,89,
+ 1,73,67, 2,43,82, 2,49,94, 3,39,88, 3,39,90, 3,39,87, 4,42,87, 1,77,69,
+ 2,49,93, 2,50, 8, 2,50, 7, 2,50, 5, 4,42,85, 2,50, 4, 2,50, 1, 2,50, 2,
+ 2,50, 3, 2,50, 6, 2,50, 9, 0, 0, 0, 0, 0, 0, 2,56,43, 2,56,40, 2,56,41,
+ 1,81,33, 2,56,39, 2,56,45, 2,56,44, 2,56,42, 0, 0, 0, 2,61,48, 2,61,49,
+ 1,84,28, 3,53,41, 1,84,29, 2,61,47, 4,54,76, 1,86,69, 2,66,12, 1,86,68,
+ 1,88,43, 4,64, 5, 1,88,44, 1,89,88, 2,73,29, 2,73,28, 2,75,75, 2,77,61,
+ 1,91,70, 2,79,23, 2,79,22, 2,79,24, 1,38,72, 2,12, 8, 1,54,60, 1,59,91,
+ 2,23,15, 1,38,73, 2, 1,70, 1,37,62, 3, 2,58, 3, 1,75, 2, 2,69, 3, 4,15,
+ 4, 3,10,15, 2,70, 2, 4,76, 2, 4,74, 2, 4,75, 2, 4,72, 1,43,11, 2, 4,73,
+ 3, 6,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,10,19, 2, 8,15, 3,10,13, 1,46,84,
+ 2, 8,13, 2, 8, 9, 2, 8,12, 3,10,12, 2, 8, 8, 1,46,86, 2, 8,11, 3,10,11,
+ 1,46,83, 1,46,82, 3,10,18, 1,46,85, 2, 8,14, 2, 8,10, 0, 0, 0, 3,10,15,
+ 0, 0, 0, 0, 0, 0, 1,50,37, 1,50,40, 2,12,16, 2,12,15, 2,12,14, 1,50,34,
+ 2,12,23, 2,12,13, 4,14,10, 1,50,36, 2,16,80, 3,13,88, 2,12,20, 2,12,18,
+ 1,50,39, 3,13,91, 2,12,10, 2,12,21, 3,13,87, 2,12,12, 2,12,22, 2,12,19,
+ 2,12,11, 3,13,90, 1,50,35, 2,12,24, 2,12, 9, 1,50,38, 3,13,94, 3,13,89,
+ 3,13,92, 0, 0, 0, 2,16,85, 2,16,76, 2,16,87, 3,18,30, 2,16,79, 2,16,90,
+ 2,16,91, 2,16,77, 2,16,89, 2,16,86, 2,16,84, 2,16,88, 1,54,66, 3,18,32,
+ 1,54,64, 3,18,39, 3,18,28, 2,16,82, 3,18,38, 2,16,78, 3,18,33, 2,16,81,
+ 2,16,92, 2,16,83, 1,54,65, 2,12,17, 3,18,29, 1,54,61, 1,54,63, 3,69,68,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,23,29, 2,23,29, 2,23,18, 2,23,16, 3,29,24,
+ 2,23,17, 3,18,31, 2,23,24, 3,23,32, 2,23,25, 2,23,21, 1,60, 2, 2,23,26,
+ /* plane 0, page 116 */
+ 0, 255, /* first, last */
+ 2,23,23, 2,23,20, 3,23,28, 1,59,94, 2,23,19, 1,59,92, 1,60, 1, 2,23,22,
+ 2,23,30, 1,54,62, 1,59,93, 2,23,28, 2,23,27, 1,60, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,69,69,15,22,55, 3,29,22, 3,29,26, 2,30, 4, 3,29,15,
+ 3,29,27, 3,29,18, 2,30, 5, 1,64,70, 3,29,25, 2,30,11, 3,34,77, 3,29,21,
+ 2,30,13, 2,30, 6, 1,64,64, 2,30,10, 2,30, 9, 1,64,65, 1,64,71, 3,34,68,
+ 1,64,72, 2,30,12, 1,64,62, 2,30, 3, 2,30, 1, 2,30, 7, 2,29,94, 1,64,69,
+ 2,30, 2, 2,30, 8, 2,30,14, 1,64,63, 1,64,68, 1,64,66, 1,64,67, 0, 0, 0,
+ 3,29,19, 3,29,28, 1,64,61, 3,69,70, 3,29,23, 3,34,72, 3,34,85, 1,69,17,
+ 2,36,91, 1,69,16, 2,37, 1, 3,34,79, 2,36,85, 3,34,84, 2,37, 2, 3,34,78,
+ 3,34,70, 3,34,81, 2,36,86, 2,36,87, 3,34,83, 2,37, 3, 2,36,94, 2,36,92,
+ 2,36,93, 2,36,89, 2,36,88, 3,34,71, 2,37, 4, 1,69,13, 3,34,75, 2,36,90,
+ 3,34,80, 1,69,18, 1,69,12, 1,69,19, 1,69,20, 3,34,74, 1,69,15, 1,69,14,
+ 3,40, 5, 3,39,94, 2,43,84, 1,73,69, 1,73,68, 3,39,92, 3,39,93, 2,43,89,
+ 3,40, 2, 1,77,70, 1,73,70, 3,40, 1, 3,39,91, 1,73,72, 2,43,90, 1,69,11,
+ 1,73,71, 2,43,86, 2,43,88, 2,43,85, 3,40, 7, 2,43,87, 3,40, 3, 0, 0, 0,
+ 15,41,86, 2,50,19, 3,45,17, 3,45,27, 2,50,18, 2,50,15, 1,77,73, 2,56,46,
+ 1,77,74, 2,50,14, 3,45,25, 1,77,72, 3,45,22, 2,50,16, 2,50,13, 2,50,10,
+ 2,50,17, 2,50,11, 2,50,12, 1,77,71, 3,45,21, 3,69,72, 0, 0, 0, 4,49,25,
+ 2,61,53, 4,49,26, 2,56,50, 3,45,26, 2,56,49, 2,56,51, 3,49,74, 2,61,50,
+ 1,81,36, 4,49,24, 2,56,47, 3,49,71, 1,81,34, 3,49,76, 1,81,38, 1,81,37,
+ 2,56,48, 2,56,52, 3,49,75, 1,81,35, 3,69,71, 2,61,57, 1,84,32, 1,86,70,
+ 1,84,33, 1,84,30, 2,61,54, 2,61,52, 3,53,47, 2,61,55, 3,53,43, 2,61,58,
+ 1,84,31, 2,61,56, 2,61,51, 3,53,45, 3,69,73, 2,66,15, 2,66,18, 2,70, 1,
+ 2,66,13, 3,56,15, 2,73,30, 2,66,19, 3,56,16, 1,88,45, 2,66,17, 1,86,71,
+ 2,66,14, 2,66,16, 2,66,20, 2,70, 2, 3,58,58, 2,69,94, 4,64, 7, 3,58,60,
+ 3,58,61, 3,58,59, 1,88,46, 2,69,93, 3,60,62, 3,60,60, 3,60,63, 1,89,89,
+ 3,60,61, 3,60,64, 0, 0, 0, 3,62,29, 1,90,88, 2,77,63, 1,90,87, 2,77,65,
+ 2,77,62, 2,77,64, 1,92,28, 2,80,32, 1,38,74, 2, 8,16, 2,16,93, 2,16,94,
+ 1,60, 4, 2,37, 5, 1,81,39, 1,88,47, 1,91,71, 2,80,33, 1,38,75, 0, 0, 0,
+ 2, 8,17, 1, 3, 2, 4,10,28, 3,14, 2, 2,12,25, 3,14, 1, 2,12,26, 3,14, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,18,40, 2,17, 1, 2,17, 2, 1,60, 5, 1,60, 6,
+ 15,22,71, 3,29,29, 4,25, 5, 2,30,15, 0, 0, 0, 2,37, 8, 2,37, 7, 2,37, 6,
+ /* plane 0, page 117 */
+ 0, 255, /* first, last */
+ 2,43,91, 3,34,87, 2,43,92, 2,43,93, 1,73,73, 0, 0, 0, 3,40, 8, 2,50,21,
+ 2,50,20, 3,45,29, 3,49,77, 2,56,53, 1,81,40, 1,81,41, 3,49,78, 2,61,62,
+ 2,61,59, 2,61,60, 2,61,61, 2,66,22, 2,66,21, 1,86,72, 2,70, 3, 2,75,76,
+ 1,38,76, 0, 0, 0, 1,50,41, 3,23,36, 1,60, 7, 2,37, 9, 3,34,88, 1,38,77,
+ 4,10,32, 2,17, 3, 1,60, 8, 3,23,37, 3,29,30, 1,64,73, 1,64,74, 5,39,41,
+ 1,38,78, 1,38,79, 2, 2,70, 1,43,13, 1,43,12, 1,50,42, 2,12,27, 2,30,16,
+ 1,38,80, 1,38,81, 1,38,82, 1,38,83, 0, 0, 0, 0, 0, 0, 4, 3,11, 1,43,14,
+ 1,43,15, 2, 4,78, 2, 4,77, 3,10,23, 0, 0, 0, 1,46,87, 2, 8,20, 2, 8,18,
+ 2, 8,19, 3,10,24, 3,10,21, 4, 7,32, 3,10,22, 0, 0, 0, 3,14, 7, 2,12,28,
+ 2,12,29, 3,14, 5, 3,14, 8, 1,50,46, 1,50,44, 3,14,10, 1,50,45, 1,50,43,
+ 3,14, 6,15,11,90, 0, 0, 0,15,12,42, 1,54,67, 3,18,46, 3,18,45, 3,18,48,
+ 3,18,47, 1,54,71, 1,54,70, 2,17, 4, 1,54,69, 1,54,68, 3,18,49, 2,17, 5,
+ 0, 0, 0, 3,23,38, 1,60,11, 2,23,32, 2,23,31, 1,60, 9, 1,60,10, 3,23,41,
+ 3,23,39, 0, 0, 0, 1,64,76, 1,64,75, 2,30,18, 3,29,35, 3,29,34, 2,30,17,
+ 1,60,12, 3,29,36, 4,25,12, 0, 0, 0, 0, 0, 0, 4,30,75, 1,69,21, 2,37,11,
+ 1,69,22, 2,37,10, 3,34,91, 4,36,92, 4,36,91, 2,43,94, 2,50,22, 1,77,75,
+ 2,56,54, 3,49,80, 0, 0, 0, 3,53,50, 2,61,63, 4,59,84, 1,88,49, 1,88,48,
+ 4,67,72, 3,60,66, 1,91,72, 1,38,84, 2, 8,21, 0, 0, 0, 3,29,37, 1,60,13,
+ 2,44, 1, 1,73,74, 3, 2,59, 3, 6,83, 2, 4,79, 2, 4,80, 0, 0, 0, 0, 0, 0,
+ 2, 8,22, 1,46,89, 1,46,90, 3,10,26, 4, 7,35, 1,46,88, 3,10,27, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1,50,50, 1,50,51, 1,50,48, 1,50,49, 3,14,11, 2,12,30,
+ 3,14,15, 4,10,42, 2,12,31, 1,50,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2,17, 6, 3,18,55, 1,54,75, 1,54,76, 3,18,53, 1,60,16, 2,17,12, 4,14,32,
+ 1,54,81, 1,54,79, 2,17,13, 2,17, 8, 1,54,78, 1,54,77, 1,54,72, 2,17,11,
+ 2,17,10, 2,17, 7, 1,54,80, 3,18,50, 2,17, 9, 1,54,73, 4,14,20, 1,54,74,
+ 0, 0, 0, 0, 0, 0, 1,60,17, 2,23,36, 2,23,37, 1,60,18, 2,23,33, 2,23,35,
+ 2,23,39, 2,23,38, 2,23,34, 3,23,42, 1,60,14, 1,60,15, 0, 0, 0, 2,30,26,
+ 1,64,81, 1,64,80, 2,30,20, 1,64,78, 4,25,20, 2,30,23, 1,64,82, 2,30,24,
+ 1,64,83, 2,30,21, 1,64,77, 1,64,79, 2,30,25, 3,29,39, 2,30,22, 2,30,19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,30,87, 2,37,24, 3,34,92, 2,37,13,
+ 1,69,24, 1,69,27, 1,69,26, 1,69,31, 1,69,30, 2,37,25, 2,37,23, 2,37,16,
+ 2,37,20, 2,37,19, 1,69,28, 2,37,22, 2,37,18, 2,37,26, 2,37,17, 1,69,29,
+ /* plane 0, page 118 */
+ 0, 255, /* first, last */
+ 1,69,23, 1,69,25, 3,34,93, 2,37,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,40,11,
+ 2,44, 3, 1,73,78, 2,44, 7, 1,73,77, 2,44, 4, 1,73,76, 3,40, 9, 2,37,14,
+ 2,37,21, 2,44, 6, 4,36,94, 1,73,79, 2,44, 8, 2,44, 5, 2,44, 2, 0, 0, 0,
+ 0, 0, 0, 2,50,25, 2,50,29, 2,50,31, 2,50,27, 2,50,26, 2,50,24, 1,77,78,
+ 1,77,76, 1,77,81, 1,77,82, 2,50,28, 1,77,79, 2,50,23, 1,77,80, 1,73,75,
+ 2,50,30, 1,77,77, 0, 0, 0, 0, 0, 0, 3,49,81, 2,56,56, 4,49,47, 2,56,55,
+ 2,56,63, 2,56,57, 2,56,62, 2,56,59, 1,81,42, 2,56,61, 3,49,83, 3,49,82,
+ 1,81,43, 4,49,45, 1,81,44, 3,49,84, 2,56,60, 2,56,58, 0, 0, 0, 0, 0, 0,
+ 4,55, 1, 4,55, 4, 1,84,35, 2,61,64, 3,53,53, 3,53,51, 1,84,34, 2,61,67,
+ 2,61,65, 2,61,66, 5,53,73, 5,60,22, 1,84,36, 0, 0, 0, 3,53,52, 3,56,20,
+ 2,66,26, 3,56,19, 1,86,75, 2,66,27, 4,59,85, 4,59,89, 1,86,73, 2,66,28,
+ 1,86,74, 2,66,25, 2,66,29, 3,56,18, 2,66,23, 0, 0, 0, 0, 0, 0, 1,88,50,
+ 2,70, 4, 1,88,51, 1,89,90, 0, 0, 0, 2,66,24, 1,89,91, 0, 0, 0, 3,62,31,
+ 3,62,30, 1,90,89, 2,75,77, 0, 0, 0, 1,91,74, 2,77,66, 1,91,73, 3,64,27,
+ 2,79,25, 1,92,65, 1,92,66, 3,69,74, 7,68,50, 2,82,26, 3, 2,60, 3,69,75,
+ 1,50,52, 2,12,32, 0, 0, 0, 1,64,84, 1,64,85, 1,38,85, 1,40,43, 2, 2,71,
+ 3, 6,84, 2, 4,81, 1,43,16, 3, 6,86, 1,46,91, 4,10,44, 1,50,53, 1,50,54,
+ 1,50,55, 2,23,41, 2,17,14, 1,54,82, 4,14,33, 4,14,35, 1,60,19, 2,23,40,
+ 3,23,45, 0, 0, 0, 2,30,28, 1,64,87, 3,29,44, 2,30,27, 1,64,86, 3,34,94,
+ 3,35, 1, 2,37,27, 1,77,83, 2,50,35, 2,50,32, 2,50,33, 2,50,34, 4,49,52,
+ 4,49,53, 3,49,86, 5,60,35, 3,53,54, 2,61,68, 3,53,55, 2,66,30, 4,59,92,
+ 4,59,93, 3,58,62, 2,73,32, 2,73,31, 4,70,58, 2,77,67, 1,38,86, 2, 8,23,
+ 1,54,83, 0, 0, 0, 0, 0, 0, 3,29,45, 1,64,88, 2,37,28, 4,37,20, 3,40,16,
+ 2,44, 9, 3,40,14, 1,77,84, 2,56,64, 3,69,76, 2,66,31, 2,73,33, 1,38,87,
+ 3, 6,87, 3, 6,88, 1,46,92, 1,50,58, 2,12,33, 1,50,59, 1,50,57, 3,14,18,
+ 1,50,56, 2,17,15, 1,54,84, 3,18,58, 3,18,59, 1,54,85, 1,54,86, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1,60,21, 2,23,42, 1,60,20, 3,23,48, 3,23,50, 3,23,49,
+ 15,23, 3, 3,29,47, 2,30,29, 1,60,22, 1,64,89, 2,37,29, 1,69,32, 1,69,33,
+ 4,37,21, 1,73,80, 3,40,17, 1,73,81, 1,77,85, 1,81,46, 2,56,65, 1,81,45,
+ 4,55,13, 2,61,69, 1,84,37, 3,56,21, 2,66,32, 2,73,34, 1,38,88, 1,43,17,
+ 2, 8,26, 2, 8,25, 1,46,93, 2, 8,24, 1,46,94, 2, 8,27, 4,10,53, 2,12,39,
+ 1,50,62, 1,50,61, 2,12,41, 2,12,40, 1,50,66, 3,14,21, 1,50,65, 3,14,19,
+ /* plane 0, page 119 */
+ 0, 254, /* first, last */
+ 4,10,57, 1,50,60, 4,10,61, 2,12,35, 2,12,36, 2,12,37, 4,10,50, 1,50,67,
+ 2,12,34, 1,50,63, 2,12,38, 1,50,64, 0, 0, 0, 0, 0, 0, 3,18,68, 3,18,63,
+ 2,17,18, 2,17,22, 2,17,20, 2,17,19, 4,14,53, 2,17,23, 3,18,62, 4,14,47,
+ 3,18,72, 2,17,24, 2,17,25, 2,17,17, 4,14,49, 2,17,16, 3,23,57, 1,54,88,
+ 1,54,89, 3,18,71, 2,17,26, 2,17,21, 3,18,69, 2,23,51, 3,23,53, 2,17,27,
+ 1,54,90, 1,54,87, 3,18,60, 3,18,67, 0, 0, 0, 2,23,45, 4,19,47, 2,23,44,
+ 3,23,51, 2,23,46, 2,23,47, 2,23,49, 2,23,48, 2,23,53, 1,60,26, 1,60,23,
+ 1,60,27, 2,23,43, 1,60,28, 2,23,52, 1,60,25, 2,23,50, 1,60,24, 3,18,66,
+ 3,23,55, 4,19,54, 3,29,54, 3,29,51, 2,30,32, 2,30,34, 2,30,30, 2,30,31,
+ 3,29,49, 3,29,50, 2,30,35, 2,30,37, 2,30,38, 2,30,33, 2,30,36, 1,64,90,
+ 0, 0, 0, 0, 0, 0, 2,37,33, 3,35, 7, 2,37,38, 2,37,30, 2,37,34, 4,31, 9,
+ 3,35, 8, 2,37,39, 2,37,35, 1,69,34, 1,69,42, 3,35, 5, 1,69,37, 2,37,31,
+ 2,37,32, 1,73,85, 1,69,45, 1,69,38, 3,35, 6, 1,69,43, 1,69,36, 2,37,37,
+ 1,69,44, 2,37,36, 1,69,40, 1,69,35, 1,69,41, 2,37,40, 2,44,14, 2,44,16,
+ 4,37,34, 3,40,25, 4,37,32, 4,37,29, 3,40,19, 3,40,22, 3,40,21, 3,40,20,
+ 3,40,24, 1,69,39, 3,40,27, 3,40,29, 2,44,11, 1,73,83, 2,44,17, 1,73,84,
+ 2,44,15, 2,44,10, 2,44,13, 2,44,18, 1,73,82, 2,44,12, 0, 0, 0, 1,77,87,
+ 2,50,39, 2,50,38, 3,45,36, 1,77,90, 1,77,88, 2,50,36, 1,77,86, 2,50,37,
+ 3,45,38, 1,77,89, 0, 0, 0, 0, 0, 0, 4,49,63, 2,56,73, 3,49,91, 2,56,75,
+ 3,49,89, 2,56,74, 2,56,66, 2,56,70, 2,56,69, 2,56,67, 1,81,48, 1,81,49,
+ 1,81,47, 2,56,68, 2,56,71, 2,56,72, 3,53,57, 1,81,50, 3,53,56, 1,84,42,
+ 2,61,77, 3,53,59, 1,84,39, 2,61,71, 1,84,41, 1,84,43, 4,49,65, 3,53,60,
+ 1,84,40, 2,61,76, 2,61,72, 1,84,38, 2,61,75, 2,61,70, 2,61,74, 2,61,73,
+ 3,56,22, 3,56,24, 2,66,34, 1,86,78, 1,86,79, 1,86,76, 3,56,27, 1,86,77,
+ 3,56,26, 3,56,25, 2,66,33, 4,64,25, 2,70, 7, 3,58,64, 3,58,63, 1,88,52,
+ 0, 0, 0, 2,70, 5, 2,70, 6, 0, 0, 0, 2,73,35, 2,73,38, 2,73,36, 2,73,37,
+ 2,75,78, 3,62,34, 4,70,62, 1,90,90, 2,79,26, 2,80,34, 4,75,84, 1,92,67,
+ 2,81, 8, 2,81, 9, 1,93,19, 1,38,89, 1,50,68, 3,18,73, 2,30,39, 3,29,55,
+ 2,37,41, 4,76,86, 1,38,90, 1,43,18, 4, 7,50, 1,47, 1, 3,14,22, 2,12,42,
+ 2,12,43, 1,54,91, 4,19,59, 0, 0, 0, 2,30,40, 1,64,91, 1,69,46, 1,84,44,
+ 2,61,78, 2,70, 8, 2,73,39, 1,38,91, 3, 6,91, 3, 6,92,15, 5, 3, 2, 8,33,
+ 2, 8,28, 2, 8,30, 2, 8,32, 2, 8,31, 2, 8,29, 1,47, 2,15, 8,20,
+ /* plane 0, page 120 */
+ 2, 255, /* first, last */
+ 1,50,69, 2,12,52, 3,14,25, 2,12,47, 2,12,44, 3,14,27,
+ 3,14,30, 2,12,51, 3,14,23, 3,14,26, 1,50,71, 1,50,72, 2,12,50, 2,12,49,
+ 2,12,48, 2,12,45, 2,12,46, 2,12,53, 1,50,70, 3,14,29, 0, 0, 0, 0, 0, 0,
+ 15,12,60, 3,69,77, 0, 0, 0, 3,69,78, 0, 0, 0, 1,55, 1, 3,70,92, 1,55, 7,
+ 1,55, 6, 2,17,36, 2,17,30, 2,17,28, 3,18,76, 1,55, 4, 2,23,60, 1,54,93,
+ 2,17,33, 2,17,37, 2,17,39, 2,17,35, 2,17,29, 1,55, 5, 2,17,34, 2,17,32,
+ 1,54,92, 2,17,40, 1,55, 8, 2,17,38, 1,55, 2, 2,17,31, 3,18,77, 1,55, 3,
+ 1,54,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,69,79, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,23,66, 1,60,30, 4,19,61, 2,23,61, 3,23,67, 3,23,61,
+ 2,23,54, 2,23,56, 2,23,58, 3,23,63, 2,23,59, 2,23,57, 1,60,31, 3,23,65,
+ 2,23,62, 3,23,64, 2,23,55, 3,69,80, 3,69,81, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3,69,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,30,44, 1,64,92, 2,30,52, 3,29,60,
+ 2,30,41, 6,44,15, 2,30,53, 3,29,57, 2,30,42, 2,30,43, 3,29,61, 4,25,52,
+ 2,30,51, 2,30,50, 2,30,47, 1,60,29, 1,64,93, 2,30,45, 2,30,48, 1,64,94,
+ 2,30,49, 2,30,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,29,58, 0, 0, 0,
+ 3,35,17, 2,37,52, 3,35,13, 2,37,56, 1,69,53, 3,35,14, 2,44,24, 1,69,56,
+ 2,37,54, 3,35,23, 3,35, 9, 2,37,51, 2,37,46, 2,37,48, 2,37,49, 2,37,42,
+ 3,35,21, 1,69,52, 3,35,11, 3,35,16, 1,69,51, 3,35,20, 1,69,47, 2,37,45,
+ 3,35,10, 1,69,54, 3,35,22, 1,69,55, 2,37,44, 2,37,47, 2,37,55, 1,69,49,
+ 1,69,50, 2,37,53, 2,37,43, 0, 0, 0,15,36, 5, 4,37,51, 2,44,26, 1,73,87,
+ 2,44,28, 2,37,50, 2,44,30, 1,73,91, 2,44,31, 2,44,27, 3,40,30, 1,73,88,
+ 2,44,23, 1,73,90, 2,44,20, 2,44,25, 2,44,29, 2,44,22, 3,40,31, 3,40,37,
+ 1,69,48, 3,40,36, 2,44,19, 1,73,89, 2,44,21, 0, 0, 0, 0, 0, 0, 3,69,83,
+ 3,40,32,15,42,31, 1,77,93, 2,50,41, 1,78, 3, 4,43,57, 1,78, 1, 4,43,55,
+ 3,45,42, 1,73,86, 3,45,45, 2,50,48, 2,50,49, 1,77,92, 3,45,40, 3,45,44,
+ 2,50,47, 2,50,50, 1,77,94, 1,77,91, 2,50,43, 2,50,40, 2,50,45, 2,50,42,
+ 1,78, 4, 2,50,44, 3,45,43, 3,45,41, 2,50,46, 1,78, 2, 3,50, 1, 0, 0, 0,
+ 3,69,84, 0, 0, 0, 1,81,52, 2,56,82, 3,50, 4, 2,56,76, 2,56,80, 2,56,86,
+ 2,56,87, 2,56,83, 2,56,84, 2,56,81, 4,43,61, 2,56,78, 4,49,78, 1,81,54,
+ 1,81,51, 2,56,77, 2,56,79, 3,50, 2, 1,81,53, 2,56,85, 3,69,85, 1,84,48,
+ 3,53,64, 3,53,66, 2,61,85, 2,61,79, 1,84,47, 0, 0, 0, 4,55,30, 1,84,45,
+ 3,53,65, 2,61,87, 1,84,46, 2,61,82, 2,61,83, 2,61,80, 2,61,88, 2,61,84,
+ /* plane 0, page 121 */
+ 0, 255, /* first, last */
+ 4,55,32, 1,84,49, 2,61,81, 0, 0, 0, 2,61,89, 2,61,86, 3,56,35, 3,56,30,
+ 3,56,32, 2,66,38, 3,56,31, 3,56,28, 2,66,35, 3,56,34, 1,86,80, 4,60,18,
+ 2,66,39, 2,66,41, 2,66,40, 2,66,36, 2,66,37, 3,56,36, 0, 0, 0, 2,70,13,
+ 3,58,65, 1,88,53, 3,58,66, 2,70,10, 2,70,12, 2,70, 9, 2,70,14, 4,64,34,
+ 3,58,67, 2,70,11, 3,69,86, 2,73,41, 2,73,44, 2,73,40, 1,89,92, 2,73,42,
+ 2,73,43, 2,73,45, 1,89,93, 1,90, 1, 1,89,94, 2,75,79, 3,62,37, 2,75,81,
+ 3,62,35, 2,75,80, 3,62,36, 0, 0, 0, 0, 0, 0, 2,77,68,15,74,70, 3,64,28,
+ 2,80,35, 2,81,10, 1,38,92, 0, 0, 0, 3, 4,19, 2, 4,82, 1,47, 3, 2, 8,35,
+ 1,47, 4, 1,47, 5, 2, 8,34, 0, 0, 0, 2,12,58, 2,12,57, 1,50,73, 1,50,76,
+ 1,50,75, 1,50,74, 2,12,54, 2,12,56, 2,12,55, 3,69,87, 0, 0, 0, 2,17,43,
+ 1,55,10, 2,17,47, 2,17,46, 2,17,45, 2,17,41, 1,55, 9, 1,55,13, 1,55,16,
+ 3,18,79, 3,18,80, 1,55,17, 2,17,42, 2,17,44, 1,55,15, 1,55,14, 1,55,12,
+ 1,55,11, 2,23,69, 3,18,82, 2,23,67, 2,23,63, 1,60,32, 3,29,62, 2,23,64,
+ 1,60,33, 2,23,65, 2,23,66, 2,23,68, 3,23,70, 1,60,34, 3,23,69, 0, 0, 0,
+ 2,30,57, 3,29,63, 2,30,56, 2,30,55, 2,30,54, 3,29,68, 3,29,66, 4,25,58,
+ 0, 0, 0, 2,37,60, 1,69,57, 4,31,38, 2,37,57, 2,37,59, 3,35,24, 1,69,58,
+ 3,35,29, 1,69,59, 2,37,58, 3,35,25, 3,29,67, 0, 0, 0, 3,69,88, 3,40,40,
+ 2,44,40, 3,40,39, 2,44,33, 2,44,34, 5,39,94, 1,73,94, 1,73,92, 1,73,93,
+ 2,44,42, 5,40, 2, 2,44,41, 2,44,38, 2,44,37, 2,44,36, 2,44,35, 2,44,39,
+ 2,44,32, 3,69,89, 2,50,51, 2,50,56, 2,50,54, 3,45,48, 3,45,49, 3,45,47,
+ 2,50,53, 2,50,52, 2,50,55, 3,69,90, 2,56,88, 3,50, 6, 1,81,55, 1,84,50,
+ 2,61,91, 3,50, 7, 1,84,51, 2,61,90, 2,66,43, 2,66,42, 1,86,81, 3,56,37,
+ 2,70,15, 1,88,54, 2,73,46, 1,91,75, 2,77,69, 3,64,29, 2,80,37, 2,80,36,
+ 2, 1,71, 1,50,77, 1,50,78, 2,23,70, 3,69,91, 1,69,61, 1,38,93, 1,43,21,
+ 1,43,20, 1,43,19, 4, 4,72, 3,10,30, 3,10,29, 2, 8,36, 3,10,31, 3,10,34,
+ 1,47, 7, 1,47, 6, 3,10,36, 1,50,81, 3,69,44, 2,12,60, 2,12,63, 2,12,61,
+ 3,14,34, 1,50,79, 1,50,80, 3,14,32, 3,14,33, 2,12,59, 2,12,62, 3,14,35,
+ 1,55,24, 3,18,84, 3,18,83, 3,18,89, 2,17,54, 2,17,56, 2,17,55, 1,55,21,
+ 2,17,50, 3,18,86, 3,18,91, 1,55,19, 1,55,18, 3,18,87, 1,55,22, 1,55,20,
+ 3,18,88, 1,55,23, 2,17,53, 2,17,48, 2,17,49, 2,17,52, 2,17,51, 0, 0, 0,
+ 3,18,92, 3,23,73, 3,23,71, 3,23,75, 0, 0, 0, 3,23,74, 2,23,73, 2,23,74,
+ 2,23,72, 3,23,76, 2,23,71, 1,60,35,15,23,31, 0, 0, 0, 0, 0, 0, 3,29,69,
+ /* plane 0, page 122 */
+ 0, 255, /* first, last */
+ 1,65, 5, 6,44,40, 2,30,58, 2,30,60, 2,30,62, 1,65, 4, 6,44,35, 3,29,70,
+ 1,65, 2, 3,29,73, 2,30,59, 1,65, 3, 2,30,61, 1,65, 1, 3,29,72, 3,35,33,
+ 2,37,70, 2,37,61, 2,37,64, 2,37,68, 1,69,65, 2,37,66, 4,31,48, 2,37,65,
+ 2,37,62, 2,37,63, 1,69,63, 2,37,69, 1,69,62, 3,35,36, 1,69,67, 1,69,66,
+ 1,69,64, 4,31,42, 2,37,67, 0, 0, 0, 0, 0, 0, 3,69, 4, 2,44,48, 4,37,61,
+ 2,44,47, 3,40,43, 3,40,45, 2,44,43, 3,40,48, 3,40,47, 1,74, 1, 2,44,46,
+ 2,44,45, 1,74, 2, 3,40,50,15,42,68, 4,43,67, 4,37,62, 4,43,75, 1,78, 9,
+ 3,45,53, 2,50,58, 3,45,54, 1,78,10, 1,78, 6, 1,78, 8, 3,45,58, 1,78, 5,
+ 1,78, 7, 3,45,51, 3,45,55, 0, 0, 0, 2,56,89, 3,50,10, 1,81,58, 2,56,91,
+ 2,56,90, 3,53,68, 2,44,44, 1,81,60, 1,81,59, 1,81,56, 1,81,57, 3,50,12,
+ 15,59,57, 0, 0, 0, 0, 0, 0, 3,50, 9, 2,62, 2, 4,55,41, 2,61,94, 1,84,52,
+ 2,62, 1, 4,55,40, 2,62, 3, 2,61,93, 2,61,92, 0, 0, 0, 0, 0, 0, 2,66,44,
+ 1,86,84, 1,86,82, 1,86,83, 0, 0, 0, 3,58,70, 4,64,37, 3,58,69, 2,70,16,
+ 2,70,17, 1,88,56, 3,58,71, 1,88,55, 2,73,48, 2,73,49, 2,73,47, 3,60,68,
+ 2,77,70, 2,77,71, 3,64,86, 3,64,87, 1,38,94, 2, 2,72, 1,43,22, 0, 0, 0,
+ 2, 8,37, 1,47, 9, 1,47, 8, 2, 8,38, 3,14,36, 3,14,39, 2,12,65, 1,50,82,
+ 2,12,64, 1,50,83, 3,14,41, 3,14,40, 1,55,25, 2,17,59, 2,17,57, 2,17,63,
+ 1,55,26, 2,17,58, 2,17,62, 2,17,60, 2,17,61, 0, 0, 0, 0, 0, 0, 2,23,75,
+ 2,23,77, 3,23,82, 1,60,36, 3,23,81, 2,23,76, 1,60,37, 1,65, 8, 1,65, 7,
+ 1,65, 6, 2,30,63, 3,23,80, 4,25,69, 0, 0, 0, 0, 0, 0, 2,37,73, 1,69,68,
+ 1,69,69, 3,35,38, 2,37,72, 2,37,71, 3,35,39, 0, 0, 0, 0, 0, 0, 3,69,92,
+ 2,44,49, 1,74, 4, 1,74, 3, 2,44,50, 2,44,51, 0, 0, 0, 1,78,12, 1,78,11,
+ 3,45,59, 2,57, 1, 2,50,59, 2,50,61, 2,50,60, 2,56,94, 2,56,92, 2,57, 2,
+ 2,56,93, 5,54,50, 1,81,61, 3,50,15, 4,50, 7, 3,50,14, 2,62, 4, 1,84,53,
+ 2,62, 5, 2,62, 6, 3,53,72, 0, 0, 0, 1,86,85, 1,86,86, 4,64,43, 1,90, 2,
+ 3,62,41, 3,62,40, 1,92,29, 1,39, 1, 3, 6,94, 3, 7, 1, 4, 7,59, 3,10,39,
+ 3,14,46, 2,12,66, 3,14,47, 3,14,45, 3,14,43, 3,14,44, 0, 0, 0,15,12,86,
+ 2,17,64, 1,55,27, 3,19, 3, 3,19, 6, 3,19, 7, 3,19, 4, 0, 0, 0, 1,61,94,
+ 1,61,93, 3,23,83, 3,29,81, 1,65,10, 2,30,65, 1,65, 9, 2,30,64, 3,29,80,
+ 4,31,55, 3,35,41, 3,35,42, 2,37,74, 3,40,52, 1,74, 5, 2,44,52, 1,74, 6,
+ 3,40,53, 3,50,16, 3,53,73, 3,53,74, 4,55,48, 3,56,41, 1,90, 3, 2,73,50,
+ 3,63,53, 1,40,44, 1,47,10, 2, 8,39, 3,14,49, 1,50,85, 3,14,48, 1,50,84,
+ /* plane 0, page 123 */
+ 0, 255, /* first, last */
+ 2,12,67, 2,12,68, 0, 0, 0, 0, 0, 0, 2,17,66, 2,17,68, 1,55,28, 0, 0, 0,
+ 2,17,70, 2,17,73, 2,17,71, 3,19,11, 4,14,81, 3,19,10, 2,17,72, 2,17,69,
+ 2,17,65, 1,55,29, 2,17,74, 2,17,67, 3,19,12, 0, 0, 0, 3,23,88, 3,23,89,
+ 2,23,86, 1,60,43, 2,24, 1, 1,60,40, 3,23,87, 2,23,88, 1,60,44, 3,23,91,
+ 1,60,38, 3,23,86, 2,23,83, 2,24, 2, 2,23,84, 2,23,81, 1,60,42, 4,19,92,
+ 1,60,39, 4,19,90, 2,23,87, 2,23,90, 1,60,41, 2,23,91, 1,60,45, 2,23,92,
+ 2,23,82, 2,23,89, 2,23,93, 2,23,85, 2,23,80, 2,23,78, 3,23,90, 3,69,93,
+ 2,23,94,15,23,45, 0, 0, 0, 2,23,79, 0, 0, 0,15,22,94, 0, 0, 0, 5,27, 4,
+ 2,30,72, 3,29,91, 3,29,88, 3,29,85, 2,30,68, 2,30,74, 1,65,13, 2,30,67,
+ 2,30,69, 1,65,11, 2,30,66, 1,65,18, 2,30,70, 1,65,17, 2,30,71, 1,65,19,
+ 1,65,14, 1,65,20, 1,65,15, 3,29,89, 1,65,16, 3,29,82, 1,65,12, 3,29,86,
+ 2,30,73, 3,69,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,35,47, 4,31,71,
+ 1,69,72, 2,37,85, 3,35,44, 2,37,88, 2,37,76, 2,37,81, 2,37,75, 1,69,74,
+ 3,35,53, 2,37,79, 4,31,62, 3,35,45, 3,29,87, 2,37,77, 1,69,73, 3,35,52,
+ 2,37,84, 2,37,83, 2,37,80, 2,37,82, 2,37,78, 1,74,10, 2,37,87, 1,69,70,
+ 2,37,86, 3,35,49, 0, 0, 0,15,36,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,40,54, 2,44,68, 3,40,56, 1,74,17, 2,44,63, 3,40,64, 1,74,16,
+ 2,44,53, 4,37,75, 2,44,55, 1,74, 9, 2,44,60, 2,44,59, 2,44,62, 1,74,14,
+ 2,44,57, 2,44,56, 3,40,58, 3,40,62, 1,74,13, 1,74, 8, 2,44,58, 1,74,11,
+ 2,44,64, 2,44,66, 0, 0, 0, 2,44,61, 2,44,54, 1,74,12, 3,40,55, 3,40,61,
+ 1,78,20, 1,74, 7, 4,37,68, 3,40,60, 2,44,67, 4,37,80, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,50,65, 1,78,13, 3,45,60, 2,50,67,
+ 4,44,11, 1,78,14, 3,45,69, 3,45,61, 1,78,16, 2,50,70, 4,43,90, 2,50,62,
+ 1,74,15, 2,50,68, 4,43,83, 4,44,17, 4,43,84, 4,44,10, 2,50,64, 3,45,64,
+ 1,69,71, 1,78,19, 4,44, 1, 4,43,88, 1,78,15, 4,44, 6, 1,78,17, 1,78,18,
+ 4,43,86, 1,81,64, 2,50,69, 2,50,63, 1,78,21, 3,45,67, 2,50,66, 0, 0, 0,
+ 3,70, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,57,12, 2,57, 7, 4,50,13, 5,54,73,
+ 2,57,17, 1,81,62, 2,57, 9, 1,81,66, 2,57,15, 2,57, 6, 2,57, 3, 2,57,18,
+ 1,84,59, 1,81,67, 2,57,14, 2,57, 4, 1,81,65, 2,57, 8, 1,81,69, 2,57, 5,
+ 2,57,10, 1,81,68, 2,57,13, 2,57,16, 3,50,19, 3,50,20, 0, 0, 0, 0, 0, 0,
+ 2,62,24, 2,62,25, 2,62, 9, 2,62,16, 2,62,14, 4,55,63, 3,53,77, 1,84,57,
+ 2,62,21, 2,57,11, 3,53,75, 2,62,12, 3,53,78, 2,62,22, 1,84,56, 2,62,11,
+ /* plane 0, page 124 */
+ 0, 255, /* first, last */
+ 2,62,10, 2,62,20, 2,62,17, 2,62,19, 4,55,52, 2,62, 7, 2,62,23, 1,84,54,
+ 3,53,80, 2,62,18, 2,62,27, 2,62,15, 1,84,58, 1,84,55, 2,62,13, 2,62, 8,
+ 2,62,26, 1,81,63, 3,53,81, 0, 0, 0,15,59,63, 4,55,55, 0, 0, 0, 0, 0, 0,
+ 3,53,79, 2,66,47, 3,56,48, 3,56,46, 2,66,45, 2,66,51, 1,86,90, 2,66,49,
+ 2,66,48, 1,86,92, 2,66,54, 1,86,91, 3,56,49, 2,66,55, 2,66,52, 1,86,88,
+ 2,66,53, 2,66,46, 1,86,89, 1,86,87, 2,70,21, 2,66,50, 3,56,44, 3,70, 2,
+ 2,66,56, 0, 0, 0, 3,70, 3, 2,70,18, 3,58,79, 3,58,78, 4,64,46, 1,88,61,
+ 1,88,59, 2,70,20, 4,64,44, 2,70,22, 2,70,19, 1,88,60, 1,88,57, 1,88,58,
+ 1,88,62, 0, 0, 0, 3,70, 4, 1,90, 5, 3,60,70, 2,73,55, 5,76,89, 2,73,54,
+ 2,73,52, 2,73,51, 2,73,53, 3,60,69, 1,90, 4, 1,90, 6, 3,70, 5,15,69,71,
+ 1,90,91, 3,62,44, 4,70,79, 2,75,83, 2,75,82, 3,60,71, 3,62,43, 2,77,72,
+ 3,63,56, 2,77,74, 2,77,76, 2,77,75, 2,77,73, 3,63,55, 3,64,31, 1,91,77,
+ 1,91,76, 0, 0, 0, 3,64,30, 1,92,31, 1,92,30, 1,92,32, 2,79,28, 2,79,27,
+ 3,70, 6, 2,81,11, 2,80,38, 2,81,12, 1,93, 5, 3,65,36, 1,93, 6, 2,81,60,
+ 4,77,59, 3,66,26, 1,93,43, 1,40,45, 3,10,41, 2, 8,40, 3,10,40, 3,14,50,
+ 2,12,70, 2,12,71, 2,12,69, 3,14,52, 3,14,51, 1,50,86,15,13, 1, 2,12,72,
+ 2,12,73, 2,12,74, 0, 0, 0, 3,19,17, 2,17,75, 2,17,81, 3,19,14, 3,19,16,
+ 2,17,79, 1,55,30, 2,17,77, 3,19,18, 2,17,78, 2,17,80, 3,19,13, 0, 0, 0,
+ 0, 0, 0, 2,17,76, 1,60,46, 3,23,93, 2,24, 3, 1,60,48, 2,24, 5, 1,60,47,
+ 2,24, 4, 3,23,94, 3,24, 1, 3,24,30, 3,24, 2, 4,20, 2, 2,30,76, 1,65,21,
+ 3,30, 1, 2,30,78, 2,30,75, 2,24, 6, 3,30, 3, 1,65,22, 3,30, 2, 3,29,94,
+ 2,30,77, 3,70, 7, 0, 0, 0,15,30, 1,15,30, 3, 0, 0, 0, 3,35,56, 2,37,91,
+ 3,35,60, 1,69,75, 2,37,89, 1,69,76, 2,37,90, 1,69,77, 4,37,84, 3,40,66,
+ 3,40,65, 1,74,18, 2,44,72, 2,44,69, 2,44,71, 1,74,19, 1,74,20, 2,44,70,
+ 15,43, 7,15,43,11, 3,45,79, 3,45,81, 3,45,77, 2,50,71, 3,45,80, 3,45,83,
+ 2,50,72, 3,45,82, 1,78,22, 2,50,74, 2,50,73, 3,45,78, 1, 3, 3, 4,50,36,
+ 2,57,22, 2,57,23, 2,57,19, 3,50,23, 2,57,20, 1,81,70, 1,81,71, 2,57,21,
+ 0, 0, 0, 1,84,65, 3,53,85, 3,53,84, 1,84,61, 1,84,66, 1,84,62, 1,84,64,
+ 1,84,60, 3,50,25, 1,84,63, 3,56,53, 4,60,58, 4,60,59, 3,56,52, 1,86,93,
+ 2,62,28, 7,40,55, 2,70,24, 4,64,58, 2,70,23, 3,70, 8, 2,73,56, 1,90, 7,
+ 1,90, 8, 2,77,78, 2,75,84, 3,65,73, 2,77,77, 3,64,32, 2,81,13, 2,81,82,
+ 1,40,46, 0, 0, 0, 3, 7, 2, 1,43,23, 3,10,43, 2, 8,41, 1,47,11, 3,10,42,
+ /* plane 0, page 125 */
+ 0, 255, /* first, last */
+ 1,50,89, 2,12,77, 1,50,87, 2,12,75, 1,50,92, 1,50,88, 1,50,93, 1,50,91,
+ 2,12,76, 1,50,90, 1,55,34, 1,55,33, 2,17,92, 1,55,42, 2,17,85, 2,17,91,
+ 1,55,38, 2,17,84, 2,17,90, 2,17,88, 1,55,37, 1,55,39, 2,17,87, 1,55,32,
+ 2,17,86, 1,55,43, 1,55,40, 1,55,44, 1,55,41, 2,17,83, 2,17,82, 2,17,89,
+ 1,55,35, 1,55,31, 1,55,36, 4,15, 5, 3,19,23, 3,19,27, 0, 0, 0, 0, 0, 0,
+ 2,24,21, 2,24,14, 4,26, 6, 1,65,27, 2,24,13, 3,24, 9, 1,60,52, 1,60,59,
+ 1,60,56, 1,60,62, 1,60,61, 1,60,57, 3,24, 6, 2,24, 7, 2,24,10, 3,24, 7,
+ 2,24, 9, 1,60,53, 2,24,11, 2,24,20, 1,60,54, 2,24, 8, 2,24,17, 2,24,18,
+ 1,60,55, 2,24,15, 1,60,60, 1,60,50, 1,60,58, 2,24,12, 1,60,49, 2,24,16,
+ 3,24,14, 3,24, 4, 2,24,19,15,23,52, 3,24,11, 3,30,20, 2,31, 1, 2,30,86,
+ 1,65,24, 2,30,93, 2,30,90, 2,30,82, 2,30,91, 1,65,26, 2,30,83, 3,30, 9,
+ 2,30,79, 3,30, 6, 3,30,14, 1,69,83, 2,30,88, 3,30,15, 1,65,23, 2,30,94,
+ 3,30, 8, 1,65,30, 1,65,32, 2,30,81, 3,30,12, 4,26, 7, 1,65,31, 2,30,84,
+ 1,65,25, 2,30,92, 2,30,85, 2,30,89, 3,30,10, 2,30,87, 1,65,28, 2,30,80,
+ 1,65,33, 1,60,51, 1,65,29, 1,65,34, 3,30, 4, 3,30,21, 3,30,19, 0, 0, 0,
+ 3,35,71, 1,69,79, 2,38, 4, 2,38, 6, 2,38, 8, 2,38,12, 3,30,11, 2,38, 2,
+ 2,37,94, 1,69,81, 4,31,81, 2,38, 7, 2,38,11, 2,38, 3, 2,37,93, 3,35,70,
+ 2,37,92, 3,35,73, 3,35,64, 3,35,66, 2,38, 9, 2,38, 1, 2,38, 5, 1,69,82,
+ 3,35,62, 1,69,80, 2,38,13, 1,69,78, 2,38,10, 3,35,68, 2,44,89, 3,35,72,
+ 3,35,74, 3,35,67, 0, 0, 0, 0, 0, 0, 1,74,23, 2,44,81, 1,78,35, 2,44,91,
+ 1,74,26, 2,45, 1, 1,74,32, 2,44,76, 3,40,84, 4,37,91, 2,44,92, 2,44,73,
+ 3,40,77, 2,44,94, 2,44,77, 3,40,78, 1,74,39, 1,74,36, 2,44,93, 2,44,87,
+ 1,74,22, 1,74,30, 1,74,29, 3,40,80, 1,74,28, 1,74,34, 3,40,73, 2,44,74,
+ 1,74,35, 2,44,88, 1,74,31, 1,74,21, 2,44,90, 1,74,24, 1,74,25, 1,74,33,
+ 2,44,79, 2,44,78, 2,44,75, 4,37,92, 2,44,83, 2,44,80, 2,44,84, 1,74,38,
+ 3,40,72, 2,45, 2, 1,74,27, 2,44,85, 2,44,86, 3,40,81, 2,44,82, 3,40,83,
+ 3,70, 9, 3,40,75, 1,74,37, 3,70,11, 0, 0, 0, 0, 0, 0, 3,46, 2, 2,50,79,
+ 1,78,27, 1,78,36, 1,78,32, 2,50,76, 3,45,92, 1,78,29, 1,78,33, 2,50,88,
+ 1,78,23, 2,50,80, 3,45,88, 1,78,31, 3,46, 4, 3,46,15, 2,50,83, 2,50,78,
+ 1,78,30, 1,78,34, 2,50,77, 3,46,14, 1,78,28, 3,45,87, 2,50,87, 1,78,25,
+ 2,50,86, 2,50,85, 1,78,37, 2,48,27, 1,78,24, 3,46,11, 2,50,84, 2,50,75,
+ 3,45,85, 1,78,38, 2,50,82, 1,78,26, 3,46, 8, 3,46, 9, 3,46, 5, 3,46,12,
+ /* plane 0, page 126 */
+ 0, 158, /* first, last */
+ 3,46, 7, 3,45,94, 3,45,93, 2,50,81, 4,44,37, 0, 0, 0, 0, 0, 0, 3,70,10,
+ 1,81,74, 1,81,79, 1,81,72, 2,57,36, 2,57,27, 2,57,39, 2,57,31, 2,57,37,
+ 1,81,80, 1,81,73, 2,57,24, 2,57,30, 2,57,40, 2,57,33, 2,57,38, 2,57,26,
+ 4,50,44, 3,50,27, 2,57,34, 1,81,75, 2,57,32, 1,81,78, 1,81,77, 2,57,28,
+ 2,57,29, 2,57,25, 2,57,35, 1,81,76, 2,57,42, 2,57,41, 3,50,32, 3,50,31,
+ 0, 0, 0, 2,62,39, 2,62,35, 1,84,73, 3,53,89, 2,62,29, 1,84,67, 1,84,83,
+ 2,62,41, 1,84,75, 1,84,71, 2,62,32, 1,84,78, 1,84,81, 2,62,43, 1,84,70,
+ 2,62,34, 1,84,79, 2,62,45, 2,62,42, 2,62,30, 1,84,74, 1,84,68, 1,84,82,
+ 2,62,37, 1,84,77, 2,62,31, 1,84,72, 2,62,44, 1,84,76, 1,84,69, 2,62,38,
+ 1,84,80, 2,62,36, 0, 0, 0, 0, 0, 0, 2,62,40, 3,53,90, 4,60,63, 3,56,57,
+ 2,66,58, 2,66,64, 1,87, 5, 2,66,67, 1,86,94, 1,87, 1, 2,66,59, 2,66,66,
+ 2,66,61, 1,87, 6, 1,87, 3, 3,56,59, 2,66,57, 3,56,56, 1,87, 2, 2,66,63,
+ 2,66,65, 1,87, 4, 2,66,62, 2,66,60, 3,70,12, 4,60,62, 3,56,58, 0, 0, 0,
+ 2,70,34, 1,88,66, 1,88,67, 1,88,63, 3,58,82, 1,88,64, 3,58,84, 2,70,30,
+ 2,70,28, 3,58,85, 2,70,32, 1,88,68, 2,70,33, 2,70,26, 2,70,25, 2,70,29,
+ 2,70,27, 1,88,65, 2,70,31, 2,73,57, 1,90,11, 1,90,10, 2,73,58, 3,60,76,
+ 2,73,60, 2,73,59, 1,90,12, 0, 0, 0, 3,62,51, 3,62,48, 2,75,89, 2,75,86,
+ 2,75,87, 3,62,49, 2,75,85, 2,75,88, 1,90,93, 2,75,90, 3,62,50, 1,90,92,
+ 0, 0, 0, 2,77,79, 3,63,58, 1,92,33, 1,92,35, 2,79,29, 1,92,34, 2,80,39,
+ 2,81,15, 2,81,17, 2,81,14, 2,81,16, 1,93,25, 4,77,88, 3,66,21,
+ /* plane 0, page 127 */
+ 54, 255, /* first, last */
+ 1,40,47, 4, 5,55,
+ 1,50,94, 2,16,50, 1,55,45, 3,24,17,15,17,88, 1,60,63, 2,31, 2, 2,31, 3,
+ 3,70,13, 3,40,87, 0, 0, 0, 2,57,43, 1,84,84, 2,62,46, 3,53,93, 3,56,60,
+ 1,87, 7, 0, 0, 0, 2,70,36, 2,70,35, 1,90,13, 2,75,91, 3,63,59, 2,77,80,
+ 1,92,68, 2, 2,73, 4, 2, 1, 0, 0, 0, 1,47,12, 1,43,24, 0, 0, 0,15, 8,42,
+ 2,12,78, 3,10,46, 0, 0, 0, 2,18, 4, 2,17,93, 2,18, 3, 2,18, 1, 1,55,46,
+ 2,18, 2, 2,17,94, 3,19,28, 2,24,22, 4,26,11, 2,31, 4, 2,31, 5, 2,38,16,
+ 2,38,17, 1,69,85, 1,69,86, 2,38,15, 2,38,18, 2,38,14, 1,69,84, 3,40,88,
+ 1,74,40, 3,40,89, 1,69,87, 2,45, 3, 0, 0, 0, 1,78,39, 2,50,89, 1,78,40,
+ 3,46,16, 1,81,81, 2,57,46, 2,57,44, 2,57,45, 2,62,49, 2,62,48, 2,62,47,
+ 7,33,65, 0, 0, 0, 4,60,72, 2,70,37, 4,64,79, 1,88,69, 2,70,38, 2,77,81,
+ 1,92,69, 2,80,40, 1,40,48, 1,47,14, 1,47,13, 2,12,80, 1,51, 1, 3,14,61,
+ 4,15,16, 2,12,79, 2,18, 6, 3,19,29, 1,55,47, 2,24,23, 2,18, 5, 3,19,31,
+ 4,15,15, 3,19,30, 1,60,65, 2,24,26, 2,24,24, 2,24,25, 1,60,64, 0, 0, 0,
+ 2,31, 7, 2,31, 8, 2,31, 6, 3,35,78, 1,69,90, 2,38,20, 2,38,19, 2,38,21,
+ 1,69,89, 1,69,88, 0, 0, 0, 4,38, 6, 2,50,90, 2,50,92, 3,46,17, 1,78,41,
+ 2,50,91, 2,57,47, 1,81,82, 2,66,69, 3,56,61, 2,66,68, 1,88,70, 2,70,39,
+ 1,88,72, 1,88,71, 2,73,61, 2,75,92, 1,90,94, 1,40,49, 2,12,81, 1,51, 2,
+ 2,18, 9, 1,55,49, 2,18, 8, 2,18, 7, 3,19,34, 1,55,48, 3,19,35, 2,24,32,
+ 4,20,29, 2,24,34, 2,24,27, 2,24,28, 1,60,66, 2,24,29, 1,60,67, 2,24,33,
+ 2,24,30, 2,24,31, 1,60,68, 3,30,23, 1,65,36, 1,65,37, 3,30,24, 2,31, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,38,22, 2,38,23, 3,35,82, 2,45, 7, 1,74,43,
+ 1,74,41, 1,74,42, 2,45, 4, 2,45, 5, 6,64,56, 2,45, 6, 2,51, 3, 3,46,18,
+ 2,51, 4, 1,78,42, 2,51, 1, 2,50,94, 2,51, 2, 2,50,93, 1,81,85, 2,57,48,
+ 1,81,83, 1,81,84, 2,62,51, 1,84,85, 2,62,50, 2,65,20, 3,53,94, 2,66,70,
+ 2,66,71, 1,87, 8, 3,56,65, 1,87, 9, 1,84,86, 2,70,40, 2,70,41, 2,73,62,
+ /* plane 0, page 128 */
+ 0, 255, /* first, last */
+ 1,90,14, 1,40,50, 3,70,91, 1,40,51, 1,55,51, 1,47,15, 1,55,50, 2,12,82,
+ 3,24,22, 4,11, 5, 3,19,36, 1,65,38, 1,40,52, 1,51, 4, 2,12,83, 2,12,84,
+ 1,51, 3, 1,51, 5, 1,40,53, 4, 7,65, 2,12,85, 1,55,53, 2,18,10, 1,55,55,
+ 1,55,52, 1,55,54, 3,24,23, 2,24,37, 1,60,69, 3,24,25, 2,24,36, 2,24,35,
+ 4,26,24, 2,38,24, 0, 0, 0, 3,41, 2, 2,45, 8, 4,38,12, 1,78,43, 0, 0, 0,
+ 1,81,86, 2,57,50, 2,57,49, 3,54, 1, 2,62,52, 4,60,81, 3,56,66, 3,60,79,
+ 2,75,93, 4,73,14, 4,73,13, 1,40,54, 2, 4,83, 2, 8,42, 1,51, 6, 2,12,86,
+ 6,27, 1, 2,18,12, 4,15,26, 3,19,41, 3,19,40, 1,55,56, 2,18,11, 1,55,57,
+ 3,19,39, 3,70,15, 0, 0, 0, 2,24,39, 3,24,29, 3,24,28, 1,60,71, 2,24,38,
+ 2,24,40, 3,24,27, 1,60,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,30,28, 2,31,11,
+ 2,31,12, 2,31,10, 1,65,39, 3,71, 9, 0, 0, 0, 4,31,92, 1,69,91, 3,35,83,
+ 1,69,92, 4,38,19, 1,74,45, 3,41, 3, 2,45,10, 2,45, 9, 1,74,44, 3,41, 6,
+ 3,30,27, 3,41, 5, 0, 0, 0, 3,70,16, 2,51, 5, 3,46,20, 3,46,22, 2,51, 6,
+ 3,46,23, 0, 0, 0, 3,46,21, 3,46,24, 2,57,51, 4,50,60, 3,50,35, 1,84,90,
+ 1,84,89, 1,84,87, 1,84,88, 1,84,91, 3,54, 2, 2,66,72, 1,87,11, 1,87,10,
+ 2,70,42, 2,73,63, 3,60,80, 3,60,81, 3,60,82, 1,91,79, 1,91,78, 1,40,55,
+ 0, 0, 0, 6,27, 4, 2,15,93, 0, 0, 0, 1,69,94, 1,65,40, 1,69,93, 1,74,46,
+ 6,64,64, 1,40,56, 2, 1,72, 1,40,57, 1,40,58, 3, 4,21, 3, 4,22, 2, 8,43,
+ 2, 4,86, 3, 7, 4, 2, 4,87, 1,43,26, 3, 7, 6, 2, 4,84, 1,43,25, 3, 7, 5,
+ 1,43,28, 2, 4,85, 1,43,30, 1,43,29, 2, 4,88, 1,43,27, 4, 4,80, 3, 7, 3,
+ 0, 0, 0, 1,47,20, 1,47,18, 2, 8,45, 3,10,54, 1,47,17, 3,10,59, 3,10,56,
+ 3,10,47, 1,47,22, 1,47,24, 1,47,21, 3,10,57, 2, 8,48, 2, 8,44, 1,47,25,
+ 3,10,50, 1,47,19, 1,43,31, 3,10,52, 1,47,23, 2, 8,47, 3,10,55, 4, 7,68,
+ 2, 8,46, 4, 7,73, 1,47,16, 3,70,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2,12,92, 1,51,10, 1,51,11, 2,12,94, 3,14,70, 2,12,88,
+ 2,12,91, 2,13, 6, 2,13, 4, 3,14,64, 1,51,12, 2,13,10, 1,51,15, 2,13, 7,
+ 2,12,93, 2,12,90, 3,14,65, 3,14,62, 2,31,14, 2,13, 5, 1,51, 7, 2,13, 8,
+ 2,12,87, 2,13, 2, 1,51, 9, 1,51,14, 2,13, 3, 1,51,18, 1,51,16, 3,14,69,
+ 2,12,89, 1,51,13, 3,14,68, 2,13, 1, 1,51,17, 1,51, 8, 2,13, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,55,62, 3,19,44, 1,55,71,
+ 1,55,60, 1,55,58, 2,18,14, 1,55,66, 1,55,63, 2,18,16, 3,19,42, 3,19,50,
+ 1,55,65, 2,18,15, 2,18,13, 2,18,18, 1,55,70, 1,55,68, 2,31,13, 3,19,43,
+ /* plane 0, page 129 */
+ 0, 255, /* first, last */
+ 2,18,19, 2,18,17, 1,55,59, 3,19,46, 3,19,45, 1,55,61, 1,55,64, 3,19,47,
+ 1,55,67, 3,14,67, 1,55,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,30,36, 2,24,50, 1,60,73, 3,24,41,
+ 2,24,41, 2,24,43, 3,24,39, 2,24,44, 4,20,45, 2,24,52, 2,24,48, 2,24,46,
+ 4,26,27, 2,24,49, 2,24,53, 1,60,74, 1,60,78, 2,24,42, 4,20,39, 2,24,51,
+ 4,20,48, 1,60,76, 3,24,33, 1,60,75, 2,24,47, 2,24,45, 3,24,34, 1,60,72,
+ 1,60,77, 3,24,37, 0, 0, 0, 0, 0, 0, 3,24,40, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1,65,46, 2,31,22, 3,30,30, 4,26,30, 2,31,20, 1,65,48, 4,26,39,
+ 3,30,35, 3,30,37, 3,30,33, 2,31,15, 2,38,38, 3,30,29, 1,65,47, 2,31,19,
+ 3,30,32, 3,30,34, 2,31,16, 1,65,43, 1,65,49, 2,31,21, 1,65,45, 2,31,18,
+ 1,74,47, 1,65,44, 2,31,17, 1,65,50, 1,65,42, 1,65,41, 0, 0, 0, 0, 0, 0,
+ 6,35,58, 0, 0, 0, 0, 0, 0, 2,38,30, 2,38,28, 3,35,91, 2,38,34, 3,35,94,
+ 2,38,26, 2,38,39, 2,38,31, 3,35,85, 2,38,25, 1,70, 4, 1,70,10, 2,38,36,
+ 4,32, 9, 2,38,29, 3,35,86, 1,70, 7, 3,35,87, 3,36, 3, 1,70, 5, 2,38,37,
+ 1,70, 2, 1,70, 1, 2,38,32, 1,70, 6, 1,65,51, 3,35,92, 2,38,35, 2,38,27,
+ 1,70, 3, 1,70, 8, 1,70, 9, 0, 0, 0, 0, 0, 0, 3,36, 2, 0, 0, 0, 1,74,52,
+ 1,74,48, 3,41, 7, 1,74,53, 2,45,13, 3,41,10, 4,38,25, 2,45,12, 2,45,14,
+ 1,74,50, 2,45,11, 1,74,51, 2,45,17, 2,45,16, 2,45,15, 4,38,38, 1,74,49,
+ 4,50,71, 0, 0, 0, 3,46,27, 3,46,29, 3,46,25, 2,51,10, 3,46,28, 2,51,13,
+ 1,78,49, 2,51,12, 1,78,48, 1,78,44, 1,78,45, 1,78,46, 2,51, 9, 2,51, 8,
+ 1,78,47, 3,46,26, 2,51,11, 2,51, 7, 0, 0, 0, 0, 0, 0, 2,57,53, 2,57,63,
+ 1,81,89, 1,81,88, 3,50,41, 2,57,57, 2,57,59, 3,50,39, 2,57,54, 3,50,36,
+ 2,57,58, 2,57,52, 2,57,61, 1,81,87, 2,57,60, 2,57,56, 0, 0, 0, 2,57,62,
+ 3,54, 3, 2,57,55, 1,84,94, 2,62,53, 2,62,59, 1,85, 4, 1,85, 6, 1,85, 3,
+ 1,85, 2, 4,56, 7, 1,85, 1, 1,84,93, 2,62,54, 2,62,57, 1,84,92, 2,62,58,
+ 3,54, 4, 1,85, 5, 2,62,56, 7,40,92, 2,62,55, 1,87,12, 3,56,69, 1,87,13,
+ 2,66,75, 2,66,73, 2,66,74, 0, 0, 0, 3,58,87, 2,70,44, 3,58,88, 2,70,43,
+ 1,88,73, 2,73,65, 1,90,15, 2,73,64, 0, 0, 0, 2,75,94, 2,77,82, 1,91,80,
+ 2,81,18, 2,81,19, 1,92,36, 1,40,59, 4, 7,76, 1,47,26, 2,31,23, 1,74,54,
+ 1,85, 7, 2,62,60, 1,40,60, 4, 4,83, 1,55,73, 1,55,72, 2,31,24, 3,30,39,
+ 4,26,44, 4,44,66, 2,57,64, 1,40,61, 1,51,19, 4,26,45, 3,30,40, 2,31,25,
+ 2,31,26, 2,31,27, 1,74,55, 1,81,90, 1,40,62, 4, 7,77, 1,47,27, 2,13,11,
+ /* plane 0, page 130 */
+ 0, 255, /* first, last */
+ 1,55,74, 2,18,20, 1,60,79, 3,30,41, 2,31,28, 1,70,11, 0, 0, 0, 1,74,56,
+ 1,81,91, 1,85, 8, 1,87,14, 2,70,45, 1,40,63, 1,47,28, 3,10,61, 4, 7,78,
+ 1,55,75, 2,24,54, 1,65,52, 3,41,11, 1,74,57, 2,45,18, 2,51,14, 0, 0, 0,
+ 3,50,42, 3,56,72, 3,58,89, 1,40,64, 1,65,53, 2,38,40, 1,74,58, 1,40,65,
+ 2, 8,49, 2,13,12, 1,51,20, 0, 0, 0, 3,14,72, 2,18,22, 4,15,47, 3,19,55,
+ 1,55,78, 3,19,56, 1,55,76, 1,55,77, 1,55,79, 3,19,53, 0, 0, 0, 2,18,21,
+ 0, 0, 0, 0, 0, 0, 2,24,59, 2,24,56, 2,24,58, 1,60,80, 1,60,82, 1,60,81,
+ 2,24,55, 1,60,83, 2,24,57, 0, 0, 0, 2,31,29, 2,31,30, 0, 0, 0, 2,31,31,
+ 2,38,43, 3,36, 6, 2,38,44, 4,32,14, 2,38,42, 2,38,45, 4,32,13, 1,70,12,
+ 3,70,20, 2,38,41, 3,41,13, 1,74,59, 3,41,14, 0, 0, 0, 2,51,19, 2,51,15,
+ 2,51,18, 2,51,20, 2,51,17, 2,51,16, 0, 0, 0, 2,57,65, 2,57,66, 2,57,67,
+ 1,81,92, 1,81,93, 2,62,62, 2,62,61, 2,62,63, 0, 0, 0, 2,66,77, 2,66,76,
+ 0, 0, 0, 2,70,47, 3,58,90, 2,70,48, 2,70,46, 3,58,91, 1,90,16, 4,68,12,
+ 2,73,66, 2,73,67, 3,62,53, 2,77,83, 2,79,30, 2,80,41, 1,40,66, 1,43,32,
+ 0, 0, 0, 1,85, 9, 1,40,67,15,18,18, 2,24,60, 2,31,32, 3,58,92, 1,92,76,
+ 2, 2,74, 4, 1,51, 0, 0, 0, 3, 4,24, 2, 2,75, 2, 2,77, 1,40,68, 2, 2,78,
+ 2, 2,76, 4, 3,15, 0, 0, 0, 2, 5, 2, 2, 5, 3, 2, 4,91, 3, 7, 8, 4, 4,91,
+ 0, 0, 0, 4, 4,85, 2, 5, 1, 1,43,34, 3, 7, 9, 1,43,35, 2, 4,92, 2, 4,90,
+ 2, 4,89, 2, 4,93, 1,43,33, 2, 4,94, 2,13,13, 3, 7,11, 4, 4,89, 0, 0, 0,
+ 2, 8,54, 1,47,31, 2, 8,53, 2, 8,55, 3,10,64, 1,47,30, 2, 8,60, 1,47,34,
+ 2, 8,50, 2, 8,64, 2, 8,70, 1,47,41, 2, 8,67, 1,47,38, 3,10,75, 2, 8,57,
+ 2, 8,63, 2, 8,65, 3,10,70, 2, 8,52, 1,47,37, 1,47,32, 2, 8,58, 1,47,39,
+ 1,47,42, 1,47,36, 3,10,76, 1,47,29, 2, 8,62, 2, 8,56, 2, 8,69, 1,47,44,
+ 1,47,40, 1,47,35, 2, 8,61, 1,55,80, 2, 8,59, 1,47,33, 1,47,43, 4, 7,90,
+ 2, 8,51, 4, 7,94, 2, 8,66, 2, 8,68, 3,10,62,15, 8,67, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,10,72, 4, 7,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3,14,86, 1,51,37, 1,51,31, 1,51,39, 1,51,36, 2,13,20, 2,13,23, 1,51,32,
+ 3,14,74, 2,13,14, 4,11,26, 1,51,25, 1,51,35, 3,14,75, 1,51,38, 1,51,40,
+ 2,13,35, 2,13,26, 3,14,88, 1,51,24, 2,13,34, 1,51,28, 1,51,26, 1,51,21,
+ 2,13,18, 3,14,82, 2,13,33, 2,13,22, 2,13,25, 2,13,38, 3,14,84, 1,51,41,
+ 2,13,32, 1,51,33, 2,13,27, 2,13,37, 2,13,24, 2,13,28, 2,13,31, 3,14,73,
+ 3,14,78, 2,13,16, 2,13,36, 2,13,30, 3,14,79, 3,14,90, 2,13,15, 6,20,28,
+ /* plane 0, page 131 */
+ 0, 255, /* first, last */
+ 2,13,19, 1,51,34, 1,51,29, 1,51,22, 1,51,27, 1,51,23, 1,51,42, 2,13,17,
+ 2,18,39, 1,51,30, 4,11,29, 3,14,89, 2,13,29, 2, 9,34, 3,14,87, 0, 0, 0,
+ 3,70,21, 0, 0, 0, 3,70,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,18,42, 1,55,94,
+ 3,19,66, 2,18,26, 4,15,61, 2,18,37, 2,18,33, 3,24,45, 2,18,52, 3,19,57,
+ 2,18,44, 3,19,63, 2,18,34, 3,24,59, 2,18,43, 2,18,28, 2,18,32, 2,18,55,
+ 1,56, 3, 2,18,47, 2,18,38, 1,55,81, 2,18,53, 2,18,24, 4,15,58, 2,18,46,
+ 4,15,67, 1,56, 2, 1,55,91, 2,18,23, 1,55,89, 1,55,88, 1,55,93, 2,18,45,
+ 1,55,85, 1,55,92, 2,13,21, 2,31,33, 2,18,40, 4,15,63, 3,10,63, 2,18,30,
+ 1,56, 1, 2,18,31, 2,18,35, 1,56, 4, 2,18,25, 2,18,49, 3,30,55, 2,18,48,
+ 2,18,56, 1,55,87, 1,55,84, 2,18,54, 2,18,50, 2,18,41, 2,18,36, 1,55,90,
+ 1,55,86, 2,18,27, 1,55,82, 2,18,51, 1,55,83, 4,15,60, 2,18,29, 3,19,58,
+ 3,19,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,70,22, 3,13,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,20,71, 3,24,46, 3,24,49, 2,24,66, 2,24,68, 2,24,73, 2,24,93, 1,61, 3,
+ 1,60,87, 3,24,52, 2,24,65, 1,61, 4, 1,61, 5, 2,24,76, 2,24,83, 2,24,89,
+ 3,24,48, 2,24,70, 4,20,77, 2,24,77, 3,24,47, 3,24,61, 1,61, 6, 2,24,91,
+ 2,24,86, 1,61, 1, 1,60,93, 2,24,82, 2,24,78, 2,24,64, 1,60,84, 2,24,69,
+ 2,24,61, 3,24,53, 1,60,92, 1,60,94, 2,24,74, 2,24,71, 1,60,89, 2,24,87,
+ 1,60,86, 2,24,72, 2,31,74, 2,24,80, 3,24,62, 2,24,79, 1,60,85, 3,24,55,
+ 1,61, 2, 3,24,50, 1,60,88, 2,24,62, 2,24,67, 2,24,84, 2,24,90, 1,61, 7,
+ 2,24,63, 2,24,75, 2,24,81, 1,60,91, 4,20,79, 3,24,56, 2,24,92, 2,24,85,
+ 2,24,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,24,63,
+ 0, 0, 0,15,23,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,60,90, 4,26,72, 2,31,49,
+ 2,31,37, 1,65,61, 2,31,66, 2,31,75, 2,31,78, 1,65,59, 2,31,45, 2,31,70,
+ 2,31,46, 2,31,60, 1,65,72, 2,31,56, 1,65,69, 3,30,62, 2,31,57, 2,31,34,
+ 5,27,79, 2,31,71, 3,30,47, 3,30,57, 1,65,78, 2,31,68, 2,31,58, 2,31,80,
+ 2,31,53, 2,38,77, 3,30,45, 2,31,83, 1,65,76, 2,31,51, 2,31,63, 1,65,79,
+ 1,65,58, 2,31,55, 2,31,81, 2,31,48, 2,31,41, 2,31,52, 3,30,63, 2,31,40,
+ 2,31,38, 1,65,54, 2,31,72, 2,31,47, 2,31,76, 3,30,43, 2,31,77, 1,65,62,
+ 1,65,67, 1,65,63, 1,65,71, 2,31,67, 1,65,64, 2,31,59, 2,31,43,15,30,70,
+ 1,65,56, 2,31,35, 2,31,69, 2,31,79, 2,31,42, 1,65,70, 2,31,84, 2,31,54,
+ /* plane 0, page 132 */
+ 0, 255, /* first, last */
+ 3,30,50, 2,31,50, 3,30,60, 1,65,55, 1,65,75, 3,30,58, 2,31,65, 1,65,77,
+ 3,30,48, 2,31,61, 1,65,66, 1,65,60, 1,65,68, 1,65,57, 1,65,74, 2,31,62,
+ 2,31,44, 2,31,64, 2,31,39, 2,31,73, 3,30,56, 4,26,71, 3,30,61, 3,30,54,
+ 3,30,46, 0, 0, 0, 0, 0, 0, 2,31,82, 0, 0, 0, 0, 0, 0, 3,70,25, 3,30,59,
+ 0, 0, 0, 3,70,24, 0, 0, 0, 2,31,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2,38,76, 3,36,13, 2,39, 4, 1,69,60, 2,38,81, 3,36,17, 2,38,79,
+ 2,38,58, 1,70,16, 2,38,74, 2,38,94, 2,38,70, 1,70,24, 2,38,93, 2,38,68,
+ 1,65,73, 2,38,84, 2,38,69, 2,38,91, 1,70,23, 1,70,15, 3,36,26, 2,38,47,
+ 2,38,55, 3,36,21, 2,38,80, 2,38,72, 2,39, 3, 2,38,75, 1,70,29, 2,38,92,
+ 3,36,12, 1,70,20, 3,36,30, 2,38,78, 2,38,86, 2,38,59, 2,38,85, 3,36, 7,
+ 2,39, 8, 2,38,54, 2,38,87, 3,36,19, 2,39, 6, 3,36,31, 2,38,48, 1,65,65,
+ 3,36,32, 2,38,62, 2,38,61, 1,70,22, 3,36,18, 2,38,65, 2,38,67, 2,38,82,
+ 2,39, 5, 1,70,25, 3,36,24, 1,70,26, 3,36,16, 2,38,53, 1,70,18, 2,38,57,
+ 2,39, 1, 1,70,27, 4,32,36, 1,70,19, 1,70,21, 1,70,28, 2,39, 7, 2,38,88,
+ 2,38,83, 3,36,28, 3,36,15, 2,38,64, 2,38,63, 1,70,17, 2,38,49, 1,70,14,
+ 2,38,73, 2,38,50, 2,38,71, 3,36,14, 4,32,33, 2,38,60, 2,39, 2, 3,36,10,
+ 3,36,25, 4,32,22, 1,70,13, 3,36,27, 3,36, 8, 0, 0, 0, 2,38,56, 0, 0, 0,
+ 4,32,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,38,52, 2,38,90, 2,38,51,
+ 1,74,72, 2,45,58, 3,41,21, 3,41,36, 2,45,41, 3,41,19, 3,41,24, 2,45,19,
+ 2,45,49, 1,74,64, 2,45,34, 2,45,44, 1,74,67, 2,45,37, 1,74,65, 2,45,22,
+ 2,45,52, 2,45,21, 2,45,40, 3,41,28, 2,45,20, 3,41,25, 4,38,76, 2,45,38,
+ 2,45,47, 2,45,45, 2,45,33, 2,45,28, 2,45,26, 3,41,34, 2,45,27, 2,45,46,
+ 2,45,57, 2,45,35, 1,74,66, 3,41,27, 2,45,30, 3,41,26, 2,45,50, 3,41,33,
+ 1,74,69, 2,45,29, 2,45,23, 2,45,39, 1,74,73, 3,41,18, 4,38,56, 1,74,61,
+ 1,74,70, 2,45,31, 2,45,25, 3,41,22, 1,74,63, 2,38,89, 1,74,62, 2,45,42,
+ 3,36,22, 1,74,60, 1,74,75, 1,74,68, 2,45,43, 2,45,32, 2,45,24, 2,45,51,
+ 2,45,36, 1,74,74, 2,45,55, 1,74,71, 2,45,54, 3,41,31, 2,45,48, 2,45,53,
+ 3,41,30, 0, 0, 0, 3,41,35, 2,45,56, 0, 0, 0, 0, 0, 0, 3,70,27, 0, 0, 0,
+ 0, 0, 0, 3,70,28, 3,70,26, 0, 0, 0, 3,41,29, 0, 0, 0, 0, 0, 0, 2,51,60,
+ 2,51,61, 2,51,48, 2,51,47, 2,51,43, 1,78,61, 3,46,47, 1,78,53, 2,51,63,
+ 2,51,62, 2,38,46, 2,51,40, 2,51,44, 2,51,38, 3,46,36, 2,51,57, 2,51,42,
+ 3,46,34, 2,51,64, 2,51,35, 2,51,33, 2,51,45, 2,51,55, 2,51,50, 1,78,63,
+ /* plane 0, page 133 */
+ 0, 255, /* first, last */
+ 2,51,24, 3,46,32, 2,51,54, 3,46,44, 3,46,38, 3,46,52, 1,78,64, 2,38,66,
+ 2,51,36, 2,51,27, 2,51,30, 2,51,68, 2,51,37, 2,51,28, 2,51,26, 2,51,23,
+ 4,44,90, 1,78,57, 2,51,46, 1,78,56, 1,78,60, 2,51,41, 2,51,49, 1,78,50,
+ 2,51,65, 2,51,69, 1,78,52, 3,46,43, 2,51,32, 2,51,52, 2,51,56, 2,51,29,
+ 2,51,66, 1,78,59, 4,44,74, 1,78,58, 2,51,21, 1,78,62, 2,51,59, 2,51,31,
+ 2,51,51, 2,51,25, 2,51,39, 2,51,34, 1,78,54, 1,78,55, 2,51,53, 2,51,70,
+ 2,51,67, 2,51,58, 4,44,88, 3,46,45, 3,46,46, 3,46,50, 0, 0, 0, 0, 0, 0,
+ 4,44,84, 0, 0, 0, 0, 0, 0, 2,51,22, 0, 0, 0, 1,78,51, 2,57,84, 3,50,58,
+ 2,57,75, 2,57,78, 3,50,50, 1,82, 5, 2,57,80, 2,57,69, 2,57,76, 2,57,82,
+ 1,82, 2, 1,82, 6, 1,81,94, 3,50,57, 3,50,48, 2,57,71, 2,57,87, 4,45, 5,
+ 4,51,19, 2,57,81, 4,51, 4, 2,57,72, 2,58, 2, 2,57,90, 2,57,68, 2,62,82,
+ 2,57,74, 1,82, 1, 3,50,56, 2,57,85, 3,50,52, 2,58, 1, 1,82, 9, 3,50,54,
+ 2,57,92, 2,57,73, 2,57,79, 2,57,83, 2,57,77, 2,58, 3, 2,57,94, 2,57,91,
+ 1,82, 3, 1,82, 4, 1,82, 8, 2,57,70, 2,58, 4, 1,82, 7, 2,57,88, 3,50,47,
+ 3,50,53, 2,57,86, 0, 0, 0, 3,70,29, 0, 0, 0, 2,57,89, 2,63, 1, 2,62,76,
+ 2,62,81, 2,62,94, 2,62,80, 2,62,72, 2,62,77, 4,56,30, 1,85,12, 3,54,11,
+ 2,62,65, 2,62,89, 2,62,91, 2,62,64, 1,85,11, 2,62,93, 2,62,85, 1,85,18,
+ 2,62,92, 2,62,78, 1,85,20, 2,62,70, 2,57,93, 2,62,86, 2,62,83, 2,62,66,
+ 2,63, 3, 1,85,14, 3,54, 8, 3,54, 9, 1,85,15, 2,62,68, 2,62,84, 3,54,13,
+ 2,63, 2, 2,62,87, 2,62,74, 1,85,17, 1,85,13, 2,62,88, 2,62,75, 2,63, 4,
+ 2,62,69, 2,62,79, 2,62,90, 2,62,71, 2,62,73, 4,56,32, 1,85,21, 2,62,67,
+ 1,85,19, 1,87,16, 1,85,10, 3,54,12, 3,54,16, 0, 0, 0, 0, 0, 0, 1,85,16,
+ 1,87,20, 2,66,93, 3,56,76, 2,66,83, 2,66,78, 2,66,84, 2,66,94, 2,67, 4,
+ 2,67, 3, 1,87,22, 1,87,21, 3,56,78, 4,61,12, 2,66,85, 2,67, 5, 2,66,88,
+ 2,66,80, 3,56,79, 2,66,82, 2,66,81, 2,66,87, 2,66,92, 2,66,79, 2,66,86,
+ 2,66,91, 1,87,19, 4,61, 8, 2,66,89, 3,56,75, 1,87,17, 2,66,90, 1,87,15,
+ 1,87,18, 2,70,64, 2,67, 1, 0, 0, 0, 3,70,30, 1,88,77, 3,58,94, 2,70,56,
+ 2,70,60, 2,70,52, 2,70,55, 3,58,93, 2,70,63, 1,88,75, 2,70,68, 2,70,61,
+ 4,64,90, 2,70,53, 2,70,69, 2,70,62, 1,88,78, 1,88,79, 2,70,66, 3,59, 2,
+ 2,70,54, 1,88,74, 1,88,76, 2,70,49, 2,70,57, 2,70,51, 3,60,91, 2,70,67,
+ 2,70,65, 2,70,50, 2,70,58, 4,64,91, 3,59, 5, 3,70,31, 2,73,74, 1,88,80,
+ 2,70,59, 1,90,18, 1,90,20, 1,90,17, 3,60,86, 2,73,79, 2,73,71, 2,73,69,
+ /* plane 0, page 134 */
+ 0, 255, /* first, last */
+ 2,73,73, 2,73,70, 3,60,88, 3,60,92, 2,73,75, 2,73,77, 1,90,21, 1,90,23,
+ 3,61, 2, 2,73,76, 1,90,24, 1,90,22, 2,73,78, 3,60,94, 4,68,23, 3,61, 3,
+ 3,60,87, 1,90,19, 0, 0, 0, 3,61, 1, 0, 0, 0, 3,62,59, 3,62,58, 1,91, 1,
+ 2,76, 1, 2,76, 7, 1,91, 3, 2,73,72, 2,76, 6, 3,62,60, 2,76,13, 2,76, 4,
+ 2,76,11, 2,76,10, 2,73,68, 2,76, 5, 2,67, 2, 2,76,14, 2,76, 3, 2,76, 8,
+ 3,62,56, 2,76,12, 2,76, 2, 3,62,54, 2,77,87, 1,91, 2, 2,76, 9, 3,62,55,
+ 0, 0, 0, 2,79,35, 2,77,88, 2,77,86, 2,77,84, 2,77,85, 2,77,89, 3,70,32,
+ 1,92,37, 2,79,33, 2,79,31, 2,79,36, 2,79,34, 3,64,35, 2,79,37, 1,92,38,
+ 2,79,32, 3,64,15, 3,65,38, 2,80,42, 0, 0, 0, 3,70,33, 2,81,20, 2,81,21,
+ 2,81,22, 3,65,39, 3,65,92, 2,82,21, 2,82,13, 2, 2,79, 1,47,45, 0, 0, 0,
+ 1,51,43, 4,15,72, 2,18,58, 2,18,57, 1,56, 5, 1,61, 8, 2,25, 1, 3,24,67,
+ 3,24,64, 2,24,94, 3,24,65, 1,65,80, 1,70,31, 3,30,65, 1,70,30, 1,70,32,
+ 5,41,46, 2,45,59, 2,51,71, 2,58, 5, 2,58, 7, 2,58, 6, 7,18,65, 1,85,22,
+ 2,63, 5, 2,67, 6, 2,81,83, 1,40,69, 3, 7,13, 2, 8,73, 2, 8,74, 2, 8,72,
+ 2, 8,71, 1,47,46, 3,70,34, 2,13,42, 2,13,40, 3,15, 3, 3,14,92, 2,13,39,
+ 3,14,94, 1,51,44, 1,51,46, 1,51,45, 2,13,41, 3,15, 4,15,13,30, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,19,73, 2,18,70, 2,18,67, 2,18,65,
+ 4,15,77, 3,19,76, 1,56, 6, 2,18,68, 1,56,11, 2,18,62, 2,18,77, 3,19,79,
+ 2,18,79, 2,18,63, 3,19,78, 1,56, 8, 2,18,80, 2,18,75, 2,18,61, 2,18,66,
+ 2,18,76, 2,18,72, 2,18,69, 3,19,75, 1,56,13, 2,18,78, 2,18,64, 3,19,74,
+ 3,19,80, 2,18,73, 2,18,59, 1,56,12, 1,56, 9, 2,18,71, 3,19,77, 2,18,74,
+ 2,18,60, 1,56,10, 1,56, 7, 0, 0, 0, 0, 0, 0, 4,20,90, 3,24,70, 1,61,18,
+ 2,25, 8, 1,61,17, 3,24,68, 2,25,11, 2,25,14, 1,61,14, 1,61,12, 2,25, 3,
+ 2,25,12, 2,25,10, 2,25, 7, 2,25,15, 2,25,16, 2,25,18, 2,25,19, 2,25, 2,
+ 1,61,11, 2,25, 5, 2,25, 4, 2,25,17, 1,61,13, 2,25, 6, 1,61,15, 1,61,10,
+ 2,25, 9, 1,61,19, 4,21, 6, 1,61,16, 2,25,13, 0, 0, 0, 0, 0, 0,15,24,26,
+ 1,65,87, 2,32, 5, 4,26,81, 2,31,88, 1,65,84, 3,30,66, 2,39,14, 2,32, 3,
+ 2,31,85, 1,65,82, 2,31,90, 1,65,85, 2,31,94, 2,31,92, 1,65,88, 1,65,81,
+ 4,26,86, 3,30,67, 2,31,86, 2,31,89, 1,65,86, 4,26,79, 2,31,87, 5,27,91,
+ 2,32, 4, 2,32, 2, 2,31,91, 2,31,93, 2,32, 1, 1,65,83, 3,30,72, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,39,15, 2,39,21, 2,39,11,
+ 2,39,17, 1,70,33, 2,39,13, 1,70,39, 3,36,36, 3,36,37, 1,70,38, 3,36,41,
+ /* plane 0, page 135 */
+ 0, 255, /* first, last */
+ 1,70,37, 2,39,20, 1,70,40, 1,70,41, 2,39,10, 2,39,23, 1,70,42, 1,70,36,
+ 1,70,35, 2,39,19, 1,70,43, 2,39, 9, 2,39,12, 2,39,22, 2,39,18, 4,32,57,
+ 4,32,50, 2,45,91, 2,45,80, 1,70,34, 5,34,61, 3,36,38, 3,36,40, 0, 0, 0,
+ 1,74,82, 2,45,68, 2,45,89, 2,45,69, 1,74,77, 3,41,47, 2,45,66, 4,32,53,
+ 2,45,75, 2,45,67, 1,74,79, 2,45,61, 2,45,88, 1,74,80, 2,45,85, 2,45,86,
+ 2,45,62, 1,74,85, 2,45,77, 3,41,42, 2,45,71, 2,45,78, 2,45,65, 4,38,94,
+ 2,45,90, 2,45,82, 2,45,76, 2,45,60, 1,74,81, 2,45,83, 3,41,37, 1,74,84,
+ 2,45,87, 3,41,44, 2,45,81, 1,74,78, 2,45,79, 3,41,41, 2,45,73, 1,74,76,
+ 2,45,64, 2,45,72, 2,45,84, 2,45,70,15,44,19, 3,41,46, 2,45,74, 3,41,43,
+ 0, 0, 0, 0, 0, 0, 3,70,35, 0, 0, 0, 1,78,74, 2,39,16, 2,51,89, 2,52, 4,
+ 2,51,88, 2,51,84, 2,51,81, 1,78,75, 2,51,79, 1,74,83, 2,51,72, 1,78,73,
+ 2,51,78, 1,78,72, 2,51,83, 2,51,80, 2,52, 2, 2,51,91, 2,51,85, 2,51,90,
+ 1,78,68, 2,51,82, 2,52, 7, 2,51,73, 2,51,74, 2,52, 3, 1,78,69, 2,52, 8,
+ 1,78,71, 2,52, 9, 2,51,87, 2,45,63, 2,51,93, 2,51,86, 2,52, 1, 2,51,92,
+ 5,48,53, 3,46,61, 4,45, 8, 2,51,77, 1,78,66, 2,52, 6, 1,78,67, 2,51,75,
+ 1,78,70, 2,58,18, 2,51,94, 2,52, 5, 4,45,17, 3,46,57, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2,58,15, 1,78,65, 1,82,10, 2,58,25, 2,58,21, 4,51,28, 2,58,19,
+ 2,58,14, 2,58,29, 3,50,59, 3,50,61, 4,51,36, 1,82,14, 3,50,63, 2,58,10,
+ 2,58,22, 2,58,23, 2,58,13, 2,58,12, 2,58,26, 4,51,33, 2,58,16, 2,58,11,
+ 2,58,17, 3,50,66, 2,58,28, 2,58, 9, 2,58,27, 2,58,24, 1,82,12, 1,82,11,
+ 4,51,25, 3,50,62, 1,82,13, 2,58,20, 2,58, 8, 3,70,37, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3,70,36, 2,63, 7, 1,85,28, 2,63,11, 2,63, 8, 2,63,15, 2,63,21,
+ 2,63,10, 3,54,26, 2,63,30, 1,85,25, 2,63,24, 2,63,13, 2,63,25, 2,63,20,
+ 2,63,27, 2,63,12, 1,85,30, 1,85,29, 2,63,14, 2,63,28, 2,63, 6, 2,63,26,
+ 1,85,23, 3,54,25, 2,63,18, 2,63,17, 2,63,22, 2,63, 9, 1,85,27, 3,54,27,
+ 1,85,31, 2,63,16, 2,63,23, 1,85,32, 2,63,19, 3,54,22, 3,54,20, 0, 0, 0,
+ 0, 0, 0, 1,85,24, 1,85,26, 2,67,19, 2,67,17, 3,59, 8, 3,56,86, 2,67,23,
+ 2,67,21, 2,67,24, 3,56,88, 2,67,10, 2,67,18, 2,67,28, 2,63,29, 2,67,14,
+ 1,87,26, 2,51,76, 2,67, 9, 2,67,22, 2,67,16, 2,67,13, 2,67, 8, 2,67, 7,
+ 2,67,27, 3,56,83, 2,67,12, 2,67,11, 1,87,24, 2,67,20, 3,56,84, 1,87,23,
+ 3,56,85, 5,68,40, 1,87,25, 2,67,15, 2,67,26, 3,70,38, 2,70,73, 2,70,74,
+ 3,59,12, 1,88,84, 2,70,71, 1,88,81, 2,70,79, 3,59, 7, 1,88,85, 2,70,81,
+ /* plane 0, page 136 */
+ 0, 255, /* first, last */
+ 2,70,70, 2,67,25, 2,70,83, 2,70,72, 5,73,35, 1,88,82, 2,70,78, 3,59, 9,
+ 2,70,80, 2,70,75, 2,70,82, 2,70,77, 2,70,76, 1,88,83, 3,56,87, 3,59,11,
+ 2,73,81, 2,73,82, 3,61, 5, 2,73,84, 1,90,25, 1,90,26, 2,73,85, 2,73,83,
+ 3,61, 4, 2,73,80, 3,62,61, 2,76,17, 2,76,20, 2,76,16, 4,65, 6, 1,91, 7,
+ 2,76,18, 1,91, 6, 1,91, 5, 1,91, 4, 2,76,19, 2,77,94, 2,77,92, 3,63,63,
+ 2,77,91, 2,76,15, 2,77,93, 2,76,21, 2,77,90, 3,64,37, 2,79,40, 2,79, 6,
+ 2,79,38, 1,92,39, 2,79,39, 2,79,41, 3,70,39, 2,80,45, 1,92,70, 2,80,44,
+ 2,80,43, 1,92,71, 4,76, 3, 1,93, 7, 2,81,61, 2,81,85, 2,81,84, 2,81,86,
+ 1,40,70, 2,13,43, 3,15, 6, 2,18,81, 2,18,82, 3,24,74, 3,30,74, 3,30,73,
+ 2,32, 6, 6,46,47, 2,76,22, 2,80,46, 1,40,71, 1,51,47, 2,13,44, 3,19,81,
+ 3,70,40, 4,21, 7, 2,25,20, 1,61,20, 0, 0, 0, 2,32, 8, 2,32, 7, 1,65,89,
+ 3,36,45, 1,70,44, 2,52,10, 1,78,76, 3,46,63, 1,78,77, 3,50,67, 3,50,68,
+ 4,51,43, 1,82,15, 1,92,72, 1,40,72, 0, 0, 0, 0, 0, 0, 3,15, 7, 2,13,45,
+ 1,47,48, 2,13,47, 2,13,46, 1,51,48, 0, 0, 0, 2,18,83, 3,19,84, 2,18,90,
+ 1,56,14, 2,18,88, 2,18,86, 3,19,87, 2,18,93, 2,18,84, 2,18,85, 1,56,15,
+ 3,19,82, 1,56,19, 3,19,83, 3,19,85, 2,18,94, 1,56,18, 2,18,92, 2,18,89,
+ 2,18,87, 1,56,16, 1,56,17, 2,18,91, 3,19,86, 0, 0, 0, 0, 0, 0, 3,70,41,
+ 1,61,22, 2,25,21, 3,24,82, 1,61,27, 2,25,37, 1,61,26, 2,25,39, 3,24,78,
+ 3,24,84, 2,25,27, 1,61,24, 2,25,38, 3,24,76, 2,25,22, 1,61,25, 2,25,34,
+ 2,25,30, 2,25,32, 2,25,26, 2,25,33, 3,24,75, 4,21,15, 1,61,21, 2,25,29,
+ 3,24,83, 2,25,28, 2,25,24, 3,24,77, 2,25,35, 3,24,79, 3,24,81, 2,25,31,
+ 2,25,23, 3,24,80, 2,25,25, 1,61,23, 2,25,36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1,65,92, 2,32,19, 4,26,91, 3,30,80, 3,30,82, 2,32,15, 2,32,17,
+ 2,32,12, 2,32,11, 2,32, 9, 3,30,77, 2,32,16, 2,32,18, 2,32,14, 3,30,79,
+ 2,32,13, 1,65,90, 1,65,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2,32,21, 1,70,52, 2,39,25, 2,39,31, 2,39,26, 2,39,27, 3,36,46,
+ 2,39,32, 5,34,76, 1,70,54, 4,32,65, 1,70,46, 1,70,53, 2,39,24, 2,32,10,
+ 1,70,49, 1,70,47, 2,39,30, 2,39,29, 1,70,48, 1,70,50, 2,39,28, 1,70,45,
+ 3,36,47, 1,70,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,46,64, 2,45,93,
+ 1,74,92, 3,41,57, 3,41,50, 2,46,10, 2,46, 9, 3,41,55, 2,46, 4, 1,74,94,
+ 2,46, 8, 2,45,94, 2,46, 1, 1,74,86, 1,74,88, 3,41,52, 2,46, 6, 2,45,92,
+ 1,74,90, 1,74,89, 2,46, 2, 2,46, 7, 2,46, 5, 1,74,91, 2,46, 3, 3,41,49,
+ /* plane 0, page 137 */
+ 0, 255, /* first, last */
+ 3,41,54, 2,32,20, 1,74,87, 3,41,56, 0, 0, 0, 2,52,11, 2,52,18, 1,78,79,
+ 4,45,38, 2,52,22, 1,78,83, 2,52,14, 2,52,12, 4,45,30, 2,52,21, 3,46,65,
+ 1,78,78, 2,52,20, 1,78,80, 1,78,81, 2,52,13, 1,78,82, 2,52,19, 2,52,15,
+ 2,52,16, 2,52,17, 1,74,93, 3,46,66, 0, 0, 0, 0, 0, 0, 2,58,30, 2,58,42,
+ 4,51,51, 1,82,20, 2,58,37, 2,58,39, 3,50,69, 1,82,18, 2,58,31, 2,58,35,
+ 4,51,48, 2,58,38, 1,82,16, 1,82,19, 2,58,41, 2,58,33, 2,58,34, 2,58,40,
+ 2,58,32, 2,58,36, 1,82,17, 2,63,32, 0, 0, 0, 2,63,31, 1,85,34, 2,63,37,
+ 1,85,36, 3,54,32, 4,56,66, 1,85,33, 2,63,33, 1,85,37, 2,63,34, 3,54,31,
+ 3,54,29, 2,63,35, 2,63,38, 3,54,34, 1,85,35, 0, 0, 0, 2,67,33, 0, 0, 0,
+ 3,56,89, 2,67,36, 3,56,90, 2,67,30, 2,67,32, 3,56,92, 3,56,91, 2,67,31,
+ 2,67,34, 2,67,35, 2,63,36, 2,67,29, 3,70,42, 0, 0, 0, 1,88,88, 2,70,87,
+ 2,70,90, 2,70,92, 2,70,85, 2,70,86, 2,70,89, 2,70,91, 1,88,89, 1,88,87,
+ 1,88,86, 2,70,88, 2,70,84, 2,73,86, 1,90,27, 3,61, 9, 2,73,87, 3,61, 8,
+ 0, 0, 0, 2,76,24, 1,91, 8, 2,76,26, 1,91, 9, 2,76,23, 2,76,25, 1,91,82,
+ 5,84,24, 2,78, 1, 1,91,81, 2,79,44, 2,79,43, 4,76, 5, 2,79,42,15,72,42,
+ 3,65,41, 2,81,23, 2,81,24, 2,81,26, 2,81,25, 3,65,93, 2, 2,80, 1,40,73,
+ 0, 0, 0, 1,51,49, 2,25,40, 1,65,93, 3,70,43, 2,39,33, 1,87,27, 3,59,15,
+ 2,70,93, 3,64,38, 3,65,42, 1,43,36, 3,15, 9, 4,15,86, 4,15,85, 1,61,29,
+ 4,21,20, 3,24,86, 3,24,85, 1,61,28, 3,24,87, 2,32,22, 1,65,94, 2,32,24,
+ 2,32,23, 6,46,64, 3,30,84, 2,39,34, 1,70,55, 2,46,11, 2,46,14, 2,46,13,
+ 4,39,21, 2,46,12, 2,52,23, 2,52,25, 2,52,24, 3,46,69, 1,82,22, 3,50,70,
+ 4,51,57, 3,46,68, 1,82,21, 3,54,38, 1,85,38, 2,63,39, 2,63,41, 2,63,40,
+ 3,56,94, 3,56,93, 1,87,28, 3,57, 1, 4,65,15, 3,59,17, 2,71, 1, 2,70,94,
+ 15,67,87, 2,73,88, 1,90,28, 3,61,10, 3,62,65, 1,91,10, 2,78, 3, 2,78, 2,
+ 1,93, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 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,43,37, 2,13,48, 1,51,50, 2,25,43, 2,25,41, 4,21,25,
+ 4,21,24, 2,25,42, 2,32,26, 2,32,27, 2,39,41, 2,32,25, 0, 0, 0, 2,39,35,
+ 2,39,39, 2,39,38, 2,39,40, 1,70,56, 2,39,37, 2,39,36, 2,39,42, 3,36,52,
+ 2,46,17, 2,46,15, 3,41,60, 2,46,16, 2,52,28, 2,52,26, 3,46,70, 0, 0, 0,
+ 2,52,27, 2,58,43, 2,63,42, 2,63,43, 1,87,29, 3,59,18, 2,71, 2, 2,73,89,
+ 1,90,29, 4,65,23, 2,76,27, 2,78, 4, 1,91,83, 4,73,37, 2,79,45, 2,81,27,
+ /* plane 0, page 138 */
+ 0, 255, /* first, last */
+ 1,43,38, 0, 0, 0, 1,51,52, 1,51,53, 2,13,49, 3,15,10, 3,15,12, 2,13,50,
+ 1,51,51, 4,15,92, 1,56,25, 3,19,91, 1,56,23, 3,19,90, 1,56,22, 1,56,29,
+ 1,56,21, 1,56,30, 2,19, 1, 1,56,27, 4,15,93, 1,56,24, 1,56,28, 1,56,26,
+ 1,56,20, 3,19,92, 0, 0, 0, 1,61,37, 3,24,94, 1,61,31, 2,25,47, 1,61,36,
+ 3,25, 3, 3,25, 9, 1,61,38, 1,61,32, 6,36,80, 1,61,33, 3,24,89, 2,25,45,
+ 3,24,91, 3,25, 5, 1,61,30, 3,25, 2, 2,25,46, 1,61,35, 4,21,29, 5,21,59,
+ 2,25,44, 1,61,34, 3,24,90, 0, 0, 0, 1,66,11, 3,30,92, 1,66,13, 4,27,15,
+ 3,30,93, 2,32,30, 1,66,12, 1,66, 1, 1,66, 5, 3,31, 4, 1,70,75, 2,39,47,
+ 2,32,32, 1,66, 6, 3,30,94, 3,30,85, 2,32,35, 2,32,36, 1,66,10, 4,27,16,
+ 2,32,38, 3,31, 1, 2,32,40, 3,31, 3, 2,32,41, 2,32,29, 2,32,28, 2,32,42,
+ 1,66, 9, 2,32,39, 2,32,37, 4,27,12, 1,66, 7, 1,66, 3, 1,66,14, 2,32,33,
+ 2,32,34, 2,32,31, 3,30,88, 1,66, 8, 4,27,17, 3,31, 2, 1,66, 4, 0, 0, 0,
+ 1,66, 2, 2,39,46, 1,70,70, 1,70,65, 3,36,64, 3,36,57, 1,70,60, 3,36,67,
+ 1,70,76, 1,70,61, 3,36,53, 1,70,57, 1,70,72, 1,70,69, 1,70,71, 3,36,56,
+ 1,70,62, 1,70,67, 1,70,58, 1,70,59, 2,39,54, 2,39,51, 2,39,43, 2,39,48,
+ 3,36,59, 1,70,73, 2,39,55, 1,70,74, 1,70,64, 3,36,60, 3,36,65, 2,39,45,
+ 3,36,54, 2,39,53, 2,39,49, 2,39,52, 2,39,50, 1,70,68, 2,39,44, 1,70,63,
+ 3,36,61, 0, 0, 0, 0, 0, 0, 2,46,20, 1,75, 2, 1,75, 5, 3,41,63, 2,46,22,
+ 3,41,68, 1,75,13, 2,46,21, 1,75, 7, 3,41,67, 1,78,88, 2,46,23, 4,39,37,
+ 1,75,12, 2,46,19, 1,75,14, 3,41,62, 3,41,66, 3,41,75, 1,75, 3, 3,41,72,
+ 1,70,66, 1,75, 6, 3,41,64, 1,75, 4, 1,75, 8, 1,75,10, 1,75, 1, 1,75,15,
+ 1,75,11, 3,41,69, 1,75, 9, 2,46,18, 3,41,70,15,44,33, 0, 0, 0, 3,46,84,
+ 1,79, 1, 3,46,71, 1,78,91, 3,46,82, 3,46,80, 3,46,78, 1,79, 4, 3,46,76,
+ 2,52,31, 1,79, 5, 2,52,43, 2,52,36, 1,78,84, 2,52,44, 2,52,38, 1,78,94,
+ 2,52,39, 3,46,83, 1,78,93, 2,52,42, 1,78,87, 2,52,40, 2,52,30, 1,78,86,
+ 2,58,54, 1,78,92, 3,46,85, 1,78,89, 3,46,73, 1,79, 3, 3,46,74, 2,52,29,
+ 3,46,86, 2,52,33, 1,78,85, 2,52,32, 2,52,34, 2,52,35, 1,79, 2, 2,52,37,
+ 2,52,41, 2,52,45, 0, 0, 0, 1,79, 6, 1,82,28, 2,58,49, 2,58,55, 2,58,52,
+ 2,58,44, 2,58,56, 2,58,45, 3,50,74, 2,58,51, 3,50,75, 1,82,23, 1,82,29,
+ 2,58,57, 3,46,79, 3,50,71, 1,82,25, 3,50,78, 1,82,35, 1,82,30, 2,58,59,
+ 2,58,53, 1,82,26, 2,58,46, 1,82,36, 2,58,47, 2,58,48, 1,82,37, 1,82,34,
+ 1,78,90, 3,50,73, 1,82,24, 2,58,60, 1,82,38, 3,50,72, 1,82,31, 2,58,58,
+ /* plane 0, page 139 */
+ 0, 159, /* first, last */
+ 1,82,27, 1,82,32, 1,82,33, 3,70,44, 1,85,46, 2,63,48, 2,63,57, 2,63,54,
+ 2,63,56, 3,54,41, 1,85,43, 2,63,49, 3,54,42, 2,63,55, 1,85,39, 2,63,51,
+ 1,85,47, 2,63,47, 2,63,52, 2,63,59, 2,58,50, 2,63,53, 2,63,46, 1,85,40,
+ 2,63,45, 1,85,41, 2,63,60, 1,85,42, 2,63,58, 1,85,45, 2,63,44, 3,54,40,
+ 1,85,44, 0, 0, 0, 2,63,50, 2,67,39, 2,67,53, 2,67,48, 2,67,50, 2,67,38,
+ 1,87,30, 3,57,10, 2,67,37, 1,87,33, 1,87,32, 3,57, 6, 2,67,52, 2,67,44,
+ 2,67,41, 2,67,47, 3,57, 4, 2,67,40, 3,57, 8, 2,67,42, 2,67,51, 2,67,49,
+ 3,57, 3, 1,87,31, 2,67,56, 2,67,54, 2,67,45, 2,67,55, 2,67,46, 3,59,20,
+ 2,71, 6, 1,88,90, 2,71,13, 3,59,21, 4,65,26, 2,76,30, 1,89, 3, 2,67,43,
+ 2,71, 4, 1,88,93, 2,71, 5, 2,71,10, 3,59,22, 3,61,19, 1,89, 1, 1,89, 2,
+ 2,71, 3, 2,71,12, 2,71,14, 2,71, 7, 2,71, 9, 2,71,11, 2,71, 8, 2,71,15,
+ 1,88,92, 1,89, 4, 1,88,94, 0, 0, 0, 1,88,91, 2,73,92, 4,68,45, 1,90,34,
+ 2,73,90, 3,61,16, 3,61,12, 2,73,94, 3,61,18, 2,74, 1, 1,90,32, 2,74, 2,
+ 2,73,93, 3,61,11, 2,73,91, 1,90,35, 1,90,31, 2,74, 3, 3,61,14, 1,90,33,
+ 1,90,30, 3,60,77, 0, 0, 0, 4,71,27, 1,91,11, 3,62,66, 4,71,33, 1,91,12,
+ 2,76,29, 2,76,28, 2,76,31, 2,76,32, 3,62,67, 1,91,13, 2,78, 5, 2,78,10,
+ 1,91,84, 3,63,65, 2,78, 7, 3,63,66, 2,78, 6, 2,78, 9, 2,78, 8, 3,64,40,
+ 2,79,49, 4,74,92, 1,92,40, 2,79,48, 2,79,46, 3,64,39, 2,79,47, 0, 0, 0,
+ 3,64,41, 3,64,91, 1,92,74, 1,92,73, 2,80,47, 2,80,48, 1,92,75, 3,65,43,
+ 2,81,28, 2,81,29, 1,93,20, 3,65,75, 1,93,26, 3,65,94, 2,81,87, 2,82,22,
+ /* plane 0, page 140 */
+ 55, 255, /* first, last */
+ 1,43,39,
+ 5,16,38, 2,25,48, 3,25,10, 2,25,49, 2,39,56, 2,46,24, 2,52,46, 1,85,49,
+ 3,54,45, 1,85,48, 2,67,57, 2,71,16, 3,63,68, 2,79,50, 1,43,40, 2,19, 2,
+ 1,56,31, 1,61,39, 2,39,58, 2,39,57, 1,79, 7, 2,52,47, 1,79, 8, 2,63,61,
+ 1,87,34, 3,61,20, 3,70,45, 3,66, 1, 1,93,35, 1,43,41, 2, 8,75, 2,19, 3,
+ 3,25,13, 4,21,45, 1,61,40, 3,25,12, 2,25,50, 2,25,51, 3,31,10, 2,32,43,
+ 3,31, 9, 1,66,15, 1,70,77, 3,36,68, 2,39,60, 2,39,59, 2,39,61, 3,41,77,
+ 2,46,25, 2,46,26, 1,75,16, 1,82,39, 1,79, 9, 1,82,40, 0, 0, 0, 2,63,65,
+ 2,63,62, 2,63,64, 2,63,63, 1,85,50, 3,57,11, 2,67,58, 2,71,18, 2,71,17,
+ 2, 5, 4, 1,56,33, 1,56,32, 2,19, 4, 3,25,14, 2,25,52, 3,31,12, 3,31,11,
+ 2,32,45, 2,32,44, 1,66,16, 3,31,13, 2,39,63, 2,39,64, 2,39,62, 4,32,88,
+ 3,36,69, 1,70,79, 1,70,78, 4,39,52, 1,75,18, 1,75,17, 3,46,90, 2,52,48,
+ 2,58,63, 2,58,61, 2,58,62, 1,82,41, 2,63,67, 2,63,66, 3,54,47, 2,67,61,
+ 2,67,60, 2,67,59, 2,71,19, 3,65,45, 2,81,88, 1,43,42, 1,51,54, 3,15,14,
+ 1,51,55, 1,56,34, 1,56,35, 2,19, 6, 2,19, 5, 2,25,53, 3,25,16, 1,61,46,
+ 1,61,44, 1,61,41, 1,61,45, 1,61,43, 1,61,42, 3,25,18, 3,25,17, 1,66,17,
+ 2,32,48, 3,31,15, 1,70,84, 1,66,19, 1,66,24, 2,32,50, 1,66,26, 1,66,25,
+ 1,66,28, 2,32,49, 2,32,46, 1,66,22, 1,66,18, 1,66,20, 2,32,47, 1,66,27,
+ 1,66,23, 1,66,21, 1,70,86, 1,70,85, 1,70,83, 1,70,87, 4,32,94, 1,70,81,
+ 1,70,82, 3,36,73, 1,70,80, 5,35,13, 2,39,65, 3,36,71, 0, 0, 0, 2,46,28,
+ 3,41,80, 1,75,20, 1,75,21, 1,75,19, 3,41,82, 2,46,27, 3,41,81, 2,46,29,
+ 3,70,46, 2,52,51, 2,52,53, 3,46,94, 1,79,18, 2,52,54, 1,79,11, 2,52,50,
+ 1,79,10, 1,79,20, 1,79,16, 1,79,17, 1,79,13, 2,52,49, 1,79,12, 2,52,55,
+ 2,52,52, 3,46,93, 1,79,19, 3,47, 2, 1,79,14, 1,79,15, 2,58,65, 3,50,85,
+ 2,58,67, 2,58,66, 3,50,83, 2,58,68, 1,82,42, 2,58,64, 3,54,49, 3,54,50,
+ 1,85,54, 2,63,68, 1,85,51, 1,85,55, 1,85,53, 1,85,52, 2,67,62, 4,61,73,
+ /* plane 0, page 141 */
+ 0, 255, /* first, last */
+ 2,67,65, 7,35,50, 2,67,64, 3,57,14, 2,67,63, 1,87,35, 2,71,20, 2,71,21,
+ 1,89, 5, 2,71,22, 1,89, 6, 3,59,24, 3,70,47, 1,90,37, 4,68,47, 1,90,36,
+ 2,76,33, 3,62,69, 3,62,70, 1,91,14, 2,76,34, 2,78,11, 1,91,85, 1,91,86,
+ 3,70,48, 2,79,51, 3,64,42, 1,92,77, 3,65,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,43,43, 3,25,19, 1,61,48, 1,61,47,
+ 2,39,66, 2,39,67, 0, 0, 0, 1,75,22, 2,58,69, 1,79,21, 2,58,70, 2,63,69,
+ 1,43,44, 3, 4,26, 2,13,51, 1,51,57, 1,51,56, 0, 0, 0, 2,19, 7, 1,56,36,
+ 2,19, 8, 2,25,56, 3,25,25, 2,25,55, 3,25,23, 2,25,54, 3,25,21, 3,25,24,
+ 2,32,52, 1,66,31, 3,31,25, 3,31,20, 2,32,51, 1,66,30, 3,31,23, 3,31,16,
+ 3,31,19, 2,32,53, 1,66,29, 3,31,24, 2,39,69, 2,39,72, 2,39,70, 2,39,71,
+ 2,39,75, 2,39,68, 2,39,76, 2,39,73, 2,39,74, 1,75,24, 2,46,30, 3,41,85,
+ 3,41,83, 1,75,23, 3,41,84, 2,52,59, 2,52,57, 3,47, 6, 4,45,85, 1,79,22,
+ 2,52,56, 2,52,58, 3,47, 5, 1,79,23, 3,47, 3, 2,58,71, 3,50,87, 2,58,72,
+ 1,85,56, 3,57,17, 2,71,24, 2,71,26, 2,71,23, 2,71,25, 2,74, 4, 2,76,35,
+ 3,70,49, 0, 0, 0, 2,81,62, 1,43,45, 1,51,58, 2,19, 9, 2,19,11, 2,19,10,
+ 0, 0, 0, 2,25,59, 1,61,50, 3,25,30, 2,25,57, 3,25,26, 1,61,49, 2,25,60,
+ 3,25,29, 2,25,61, 2,25,58, 6,37,24, 0, 0, 0, 2,32,65, 1,66,39, 2,32,57,
+ 2,32,63, 3,31,31, 3,31,26, 1,66,34, 1,66,37, 2,32,56, 1,66,32, 2,32,60,
+ 2,39,82, 1,66,36, 3,31,27, 2,32,55, 3,31,30, 2,32,61, 2,32,58, 2,32,64,
+ 2,32,54, 2,32,62, 1,66,35, 1,66,38, 2,32,59, 1,66,33, 0, 0, 0, 1,70,89,
+ 2,39,78, 1,70,88, 2,39,85, 2,39,84, 1,71, 1, 0, 0, 0, 1,71, 2, 2,39,86,
+ 1,70,90, 2,39,83, 1,70,94, 2,39,88, 2,39,79, 3,36,75, 2,39,81, 1,70,91,
+ 2,39,77, 2,39,80, 2,39,87, 1,70,92, 2,39,89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1,70,93, 0, 0, 0, 1,75,25, 2,46,35, 2,46,41, 2,46,33,
+ /* plane 0, page 142 */
+ 0, 255, /* first, last */
+ 2,46,42, 3,41,91, 2,46,32, 2,46,37, 2,46,43, 2,46,40, 2,46,39, 2,46,38,
+ 3,41,90, 2,46,31, 2,46,36, 3,41,89, 0, 0, 0, 2,46,34, 0, 0, 0, 1,79,28,
+ 1,79,25, 2,52,68, 2,52,73, 2,52,75, 2,52,72, 2,52,65, 2,52,67, 2,52,77,
+ 2,52,74, 2,52,69, 2,52,78, 2,52,66, 2,52,76, 1,79,26, 1,79,32, 1,79,30,
+ 2,52,60, 1,79,31, 1,79,27, 2,52,61, 2,52,63, 2,52,62, 2,52,70, 2,52,71,
+ 3,47,12, 1,79,29, 3,47,11, 1,79,24, 0, 0, 0, 0, 0, 0, 2,52,64, 0, 0, 0,
+ 2,58,82, 1,82,44, 3,50,94, 2,58,73, 1,82,45, 1,82,48, 2,58,78, 5,49,40,
+ 2,58,75, 1,82,47, 4,52, 9, 3,50,91, 2,58,79, 2,58,80, 2,58,74, 2,58,83,
+ 2,58,76, 2,58,81, 1,82,46, 3,50,92, 1,82,43, 2,58,77, 3,54,52, 2,63,75,
+ 1,85,59, 1,85,57, 1,85,60, 1,85,58, 2,63,74, 2,63,71, 2,63,70, 3,54,53,
+ 2,63,73, 4,57,13, 0, 0, 0, 2,63,72, 2,67,79, 1,87,41, 2,67,70, 2,67,69,
+ 3,57,18, 1,87,36, 2,67,75, 2,67,74, 2,67,66, 2,67,77, 2,67,71, 1,87,40,
+ 2,67,68, 2,67,76, 2,67,67, 1,87,37, 1,87,39, 2,67,72, 1,87,38, 2,67,73,
+ 3,59,26, 2,67,78, 2,71,30, 3,59,25, 1,89,11, 2,71,27, 4,65,50, 2,71,31,
+ 3,59,27, 4,65,47, 1,89, 8, 2,71,29, 1,89,13, 3,59,28, 1,89,10, 3,59,29,
+ 2,71,28, 4,65,52, 1,89,12, 2,71,32, 1,89, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1,90,39, 1,90,41, 3,61,23, 2,74, 7, 1,90,40, 2,74, 5, 1,89, 9,
+ 2,74, 6, 1,90,38, 1,91,15, 1,91,17, 2,76,37, 1,91,16, 2,76,36, 0, 0, 0,
+ 2,78,16, 1,91,87, 2,78,15, 1,91,88, 2,78,13, 2,78,12, 2,78,17, 2,78,18,
+ 2,79,52, 3,64,43, 2,78,14, 0, 0, 0, 0, 0, 0, 2,80,52, 2,80,49, 2,80,50,
+ 2,80,51, 1,93, 9, 3,65,48, 2,81,32, 2,81,31, 2,81,30, 2,81,63, 3,65,76,
+ 2,82,14, 2,81,89, 1,93,27, 1,43,46, 1,56,37, 3,25,31,15,24,76, 3,25,32,
+ 3,31,32, 3,36,83, 1,71, 3, 3,41,93, 3,41,92, 0, 0, 0, 3,47,16, 3,47,18,
+ 3,47,15, 3,47,17, 1,79,33, 0, 0, 0, 3,70,50, 2,58,84,15,56,19, 3,57,21,
+ 1,87,42, 3,57,22, 2,71,33, 3,59,31, 4,65,54, 0, 0, 0, 3,61,24, 4,71,49,
+ 0, 0, 0, 2,81,90, 1,43,47, 1,47,49, 1,51,60, 1,51,59, 5,16,53, 1,56,40,
+ 3,20, 1, 2,19,12, 1,56,38, 2,19,13, 1,56,39, 3,70,51, 3,25,33, 2,25,66,
+ 2,25,62, 3,25,39, 4,21,67, 1,61,51, 2,25,65, 2,25,64, 2,25,63, 1,61,52,
+ 2,25,67, 2,25,68, 0, 0, 0, 0, 0, 0, 3,31,37, 2,32,72, 2,32,70, 2,32,74,
+ 2,32,75, 2,32,81, 3,31,39, 2,32,77, 2,32,79, 5,35,48, 2,32,71, 2,32,66,
+ 4,27,53, 2,32,78, 3,31,36, 3,31,38, 2,32,80, 2,32,73, 2,32,76, 2,32,67,
+ 1,66,41, 2,32,69, 2,32,68, 1,66,40, 1,66,42, 3,31,41, 1,71, 6, 2,39,91,
+ /* plane 0, page 143 */
+ 0, 255, /* first, last */
+ 2,39,93, 2,39,92, 2,40, 3, 1,71, 4, 3,36,86, 2,39,94, 2,39,90, 2,40, 1,
+ 2,40, 2, 1,71, 5, 1,71, 7, 2,40, 4, 0, 0, 0, 2,46,47, 2,46,46, 4,39,74,
+ 2,46,44, 2,46,45, 1,75,27, 1,75,29, 1,75,26, 1,75,28, 2,52,85, 2,52,86,
+ 2,52,81, 3,47,22, 2,52,82, 1,79,35, 1,79,40, 1,79,34, 1,79,41, 1,79,36,
+ 2,52,83, 4,46,13, 3,47,19, 2,52,84, 2,52,80, 1,79,42, 1,79,38, 3,47,21,
+ 4,46,11, 1,79,37, 1,79,39, 3,47,20, 2,52,79, 3,51, 4, 2,58,86, 1,82,50,
+ 3,51, 2, 3,51, 1, 2,58,88, 1,82,52, 2,58,91, 2,58,87, 2,58,85, 2,58,90,
+ 1,82,51, 2,58,89, 7,20,18, 1,82,49, 3,51, 5, 3,54,57, 1,85,62, 1,85,65,
+ 2,63,77, 3,54,58, 1,85,63, 2,63,76, 1,85,61, 1,85,64, 2,67,80, 2,67,81,
+ 2,67,82, 1,87,43, 3,57,23, 2,67,83, 0, 0, 0, 1,87,44, 1,89,15, 2,71,36,
+ 2,71,37, 2,71,35, 2,71,34, 2,71,38, 1,89,14, 2,74,11, 2,74, 9, 2,74,10,
+ 2,74,12, 2,74, 8, 2,74,13, 2,76,39, 3,62,71, 2,76,40, 2,76,38, 1,91,18,
+ 2,78,19, 1,91,89, 2,78,20, 2,79,54, 2,79,53, 3,66, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,43,48, 1,66,43, 3,31,43, 3,36,87, 1,71, 8,
+ 3,36,88, 3,42, 1, 3,42, 2, 1,75,30, 3,47,23, 3,51, 7, 1,82,54, 3,51, 6,
+ 1,82,53, 0, 0, 0, 3,70,52, 0, 0, 0, 3,57,24, 1,89,16, 1,90, 9, 1,91,19,
+ 1,43,49, 1,56,41, 1,71, 9, 3,47,25, 2,71,39, 3, 7,15, 4, 1,52,15, 1,74,
+ 4, 3,16, 3, 4,27, 0, 0, 0,15, 2,81,15, 2,82, 0, 0, 0, 3, 7,16, 2, 5, 6,
+ 4, 5, 1, 3, 7,19, 1,43,50, 4, 5, 3, 1,43,53, 1,43,52, 1,43,51, 3, 7,17,
+ 15, 5,18, 2, 5, 5, 3,10,82, 2, 8,77, 3,10,80, 2, 8,79, 1,47,50, 3,10,84,
+ 4, 8, 6, 1,47,52, 2, 8,76, 2, 8,78, 1,47,51, 2, 8,81, 2, 8,80, 2, 8,82,
+ 3,10,83, 3,10,81, 0, 0, 0, 0, 0, 0,15, 8,81, 0, 0, 0, 0, 0, 0,15, 8,78,
+ 2,13,55, 2,13,53, 1,51,63, 2,13,52, 1,51,68, 1,51,65, 1,51,62, 3,15,17,
+ 1,51,69, 3,15,18, 1,51,64, 1,51,67, 6,20,64, 1,51,66, 2,13,54, 3,15,19,
+ 1,51,61, 3,15,16, 0, 0, 0, 0, 0, 0, 1,56,47, 2,19,15, 2,19,21, 1,56,44,
+ 1,56,51, 3,20, 5, 1,56,46, 2,19,18, 2,19,20, 1,56,49, 2,19,14, 2,19,17,
+ /* plane 0, page 144 */
+ 0, 255, /* first, last */
+ 1,56,45, 1,56,42, 2,19,16, 1,56,48, 2,19,19, 1,56,50, 1,56,43, 4,16,15,
+ 3,20, 7, 3,20, 6, 0, 0, 0, 2,25,70, 2,25,73, 1,61,54, 3,25,43, 1,61,64,
+ 1,61,60, 2,25,71, 3,25,42, 3,25,46, 1,61,68, 1,61,61, 1,61,66, 1,61,56,
+ 4,21,72, 1,61,53, 1,61,55, 1,61,67, 2,25,72, 1,61,59, 1,61,62, 1,61,58,
+ 1,61,63, 2,25,74, 1,61,65, 1,61,57, 2,25,69, 3,25,44, 0, 0, 0, 0, 0, 0,
+ 3,31,47, 3,31,48, 3,31,45, 3,31,44, 3,31,49, 2,32,82, 1,66,44, 2,32,84,
+ 3,31,53, 1,66,46, 1,66,48, 4,21,70, 2,32,83, 1,66,45, 1,66,49, 3,31,54,
+ 1,66,47, 0, 0, 0, 3,31,52, 3,31,55, 1,71,15, 2,40, 9, 1,71,23, 2,40, 6,
+ 3,36,93, 1,71,24, 1,71,13, 3,36,89, 2,40, 7, 3,36,92, 3,36,90, 1,71,18,
+ 3,36,91, 2,40, 8, 1,71,11, 1,71,10, 3,36,94, 1,71,21, 1,71,20, 1,71,19,
+ 1,71,17, 1,71,22, 2,40, 5, 1,71,12, 1,71,14, 1,71,16, 0, 0, 0, 0, 0, 0,
+ 1,75,32, 1,75,35, 3,42, 4, 1,75,39, 1,75,33, 1,75,38, 1,75,36, 3,42, 7,
+ 1,75,31, 3,42, 6, 1,75,37, 1,75,34,15,44,75, 0, 0, 0, 4,46,18, 2,52,90,
+ 1,79,45, 1,79,43, 3,47,28, 2,52,91, 4,46,19, 1,79,46, 1,79,44, 2,52,89,
+ 2,52,88, 3,47,27, 1,82,58, 2,52,87, 1,82,56, 1,82,55, 2,58,92, 1,79,47,
+ 1,82,57, 2,58,93, 1,82,60, 2,58,94, 1,82,59, 1,85,67, 2,63,79, 1,85,66,
+ 1,85,71, 1,85,69, 1,85,70, 1,87,46, 1,85,68, 2,63,78, 2,59, 1, 1,87,45,
+ 1,87,47, 3,57,26, 1,89,17, 1,89,18, 4,65,63, 2,74,14, 4,73,50, 1,92,42,
+ 1,92,41, 1,43,55, 3, 2,62, 3, 2,61, 2, 2,85, 1,56,52, 3, 4,28, 2, 2,82,
+ 2, 2,83, 2, 2,81, 3, 4,29, 2, 2,84, 3,70,53, 0, 0, 0, 2, 5,10, 2, 5, 7,
+ 2, 5,12, 2, 5, 8, 1,43,56, 1,43,59, 3, 7,21, 2, 5, 9, 1,43,58, 2, 5,11,
+ 3, 7,25, 3, 7,20, 1,43,57, 3,25,49, 0, 0, 0, 3,10,87, 4, 8,11, 2, 8,85,
+ 2, 8,87, 1,47,55, 2, 8,83, 2, 8,86, 2, 8,84, 1,47,53, 1,47,56, 3,10,85,
+ 1,47,54, 3,10,88, 0, 0, 0, 0, 0, 0, 3,15,21, 2,13,57, 2,13,61, 2,13,58,
+ 3,15,24, 1,51,72, 3,15,20, 1,51,73, 3,15,30, 2,13,60, 3,15,23, 2,13,62,
+ 2,13,64, 3,15,28, 1,51,70, 2,13,63, 4,33,25, 3,15,27, 1,51,71, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,37,77, 0, 0, 0, 2,25,81, 2,13,59, 2,19,22, 2,19,31,
+ 2,19,29, 2,19,24, 2,19,25, 2,19,30, 2,19,32, 1,56,54, 3,20, 9, 2,19,27,
+ 2,19,23, 1,56,53, 1,56,55, 2,19,26, 2,19,33, 2,19,28, 0, 0, 0, 0, 0, 0,
+ 1,61,69, 2,25,84, 2,25,76, 2,25,82, 2,25,83, 1,61,70, 3,25,47, 2,25,75,
+ 2,25,77, 2,13,56, 2,25,79, 2,25,80, 2,25,78, 1,66,51, 4,46,27, 3,25,50,
+ 0, 0, 0, 2,32,91, 2,59, 2, 2,32,92, 2,32,89, 1,61,71, 1,66,53, 2,32,88,
+ /* plane 0, page 145 */
+ 0, 255, /* first, last */
+ 2,32,94, 2,32,93, 1,66,50, 2,33, 3, 2,32,87, 2,33, 2, 2,32,85, 2,33, 1,
+ 2,32,90, 1,66,52, 3,31,57, 2,40,16, 3,37, 3, 2,40,11, 2,40,17, 2,40,12,
+ 2,40,10, 2,40,13, 1,71,25, 3,37, 4, 2,40,15, 3,37, 5, 2,40,14, 1,71,26,
+ 1,75,41, 1,75,40, 2,46,54, 2,46,57, 2,46,49, 2,46,53, 1,75,42, 2,46,52,
+ 2,46,50, 2,46,56, 2,46,51, 2,46,48, 2,46,55, 3,42,10, 2,53, 3, 1,79,50,
+ 2,67,84, 2,52,94, 2,53, 1, 2,52,93, 2,32,86, 1,79,49, 2,53, 4, 2,52,92,
+ 1,79,48, 1,79,51, 2,53, 2, 2,59, 3, 1,82,61, 2,59, 4, 2,59, 5, 3,51,11,
+ 2,63,80, 1,85,72, 2,67,85, 2,67,86, 3,57,28, 3,57,27, 2,67,87, 2,71,41,
+ 2,71,40, 2,74,16, 0, 0, 0, 2,74,15, 2,76,42, 2,76,43, 2,76,41, 2,78,21,
+ 1,91,90, 1,43,60, 1,51,75, 1,51,74, 1,56,58, 1,56,57, 2,19,35, 2,19,36,
+ 2,19,34, 3,20,10, 1,56,56, 2,25,88, 3,25,53, 2,25,89, 2,25,85, 1,61,72,
+ 2,25,86, 3,25,52, 2,25,87, 0, 0, 0, 3,70,55, 0, 0, 0, 0, 0, 0, 2,33, 6,
+ 2,33, 8, 2,33, 4, 2,33, 7, 1,66,54, 2,33, 5, 1,66,55, 0, 0, 0, 3,37, 8,
+ 2,34,89, 1,71,29, 1,71,28, 3,37, 7, 1,71,27, 4,33,26, 2,40,18, 2,40,19,
+ 4,33,27, 0, 0, 0, 2,46,59, 2,46,61, 1,75,46, 1,75,43, 3,42,12, 1,75,45,
+ 1,75,44, 2,46,60, 2,46,58, 3,42,11, 3,42,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2,53,11, 2,53, 8, 2,53, 9, 1,79,55, 2,53,10, 2,53, 5, 2,53, 6, 1,79,52,
+ 3,47,31, 1,79,53, 2,53, 7, 1,79,54, 3,47,32, 2,59, 9, 3,51,13, 2,59,10,
+ 2,59, 7, 2,59, 8, 1,82,62, 2,59, 6, 4,52,34, 3,51,12, 3,51,15, 0, 0, 0,
+ 4,57,31, 2,63,84, 2,63,81, 2,63,83, 1,85,75, 2,63,87, 1,85,74, 2,63,85,
+ 2,63,88, 2,63,86, 2,63,82, 1,85,73, 0, 0, 0, 2,67,89, 4,62, 4, 2,67,90,
+ 2,67,88, 3,57,29, 2,67,92, 1,87,48, 1,87,49, 2,71,43, 1,89,20, 2,67,91,
+ 2,71,42, 1,89,19, 2,74,19, 2,74,20, 1,90,42, 2,74,18, 4,68,69, 2,74,17,
+ 0, 0, 0, 2,76,44, 1,91,20, 3,62,72, 2,79,55, 2,80,54, 2,80,53, 3,64,94,
+ 1,92,78, 1,93,10, 2,80,55, 2,81,64, 3,65,77, 1,93,28, 1,43,61, 1,47,57,
+ 0, 0, 0, 1,71,30, 0, 0, 0, 1,90,43, 1,43,62, 1,51,76, 1,61,73, 1,66,56,
+ 1,87,50, 1,47,58, 0, 0, 0, 2,13,66, 2,13,65, 2,19,37, 3,20,16, 1,56,61,
+ 1,56,59, 1,56,63, 2,19,39, 3,20,13, 1,56,62, 1,56,60, 3,20,15, 3,20,14,
+ 3,20,17, 0, 0, 0, 2,19,38, 1,61,76, 2,26, 1, 3,25,56, 1,61,75, 1,61,77,
+ 2,26, 6, 1,61,79, 2,26, 3, 2,26, 4, 2,25,90, 1,61,78, 2,26, 7, 4,21,91,
+ 3,25,55, 2,25,92, 3,25,54, 2,25,93, 2,25,91, 1,61,74, 3,25,57, 2,26, 5,
+ 2,25,94, 2,26, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,33,20, 3,31,61, 2,33,19,
+ /* plane 0, page 146 */
+ 0, 255, /* first, last */
+ 2,33,17, 2,33, 9, 2,33,24, 2,33,12, 2,33,22, 2,33,29, 2,33,21, 1,66,64,
+ 3,31,70, 1,66,60, 2,33,10, 3,31,64, 2,33,16, 1,66,62, 3,31,72, 2,33,15,
+ 1,66,63, 1,66,65, 2,33,18, 3,31,73, 1,66,57, 1,66,58, 2,33,30, 2,33,28,
+ 3,31,66, 2,33,27, 2,33,13, 3,31,69, 2,33,25, 4,27,70, 1,66,61, 6,47,79,
+ 3,31,62, 3,70,57, 3,31,67, 1,66,59, 2,33,26, 2,33,11, 2,33,14, 2,33,23,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,70,56, 0, 0, 0, 2,47, 2, 2,40,29, 3,37,14,
+ 2,40,22, 2,40,41, 2,40,50, 2,40,25, 1,71,41, 3,37,11, 2,40,38, 1,71,31,
+ 1,71,33, 1,71,45, 2,40,23, 3,37,23, 3,37,15, 1,71,34, 1,71,36, 1,71,46,
+ 1,71,35, 3,37,25, 4,33,33, 4,33,38, 3,37,24, 1,71,44, 2,40,31, 4,33,40,
+ 2,40,20, 1,71,42, 2,40,30, 1,71,38, 2,40,48, 1,71,43, 2,40,46, 2,40,34,
+ 2,40,44, 1,71,40, 2,40,21, 2,40,47, 2,40,42, 3,37,10, 2,40,49, 1,71,32,
+ 4,33,32, 3,37,13, 1,71,47, 1,71,37, 3,37,17, 3,37, 9, 2,40,27, 3,37,20,
+ 2,40,35, 2,40,39, 3,37,19, 2,40,43, 1,71,39, 2,40,26, 2,40,24, 2,40,36,
+ 4,33,34, 4,33,35, 3,37,18, 3,37,21, 2,40,33, 2,40,32, 3,37,22, 2,40,37,
+ 2,40,40, 0, 0, 0, 2,40,45, 3,70,58,15,37,82, 4,39,85, 2,46,64,15,45, 2,
+ 1,75,47, 2,46,74, 2,46,66, 1,75,53, 1,75,57, 2,46,83, 2,46,91, 2,46,76,
+ 1,75,49, 3,42,20, 2,46,80, 2,40,28, 3,42,21, 1,75,50, 2,46,87, 2,46,92,
+ 2,46,84, 3,42,15, 2,46,86, 2,47, 1, 2,46,88, 2,46,70, 2,46,79, 3,37,16,
+ 3,42,24, 1,75,58, 3,42,19, 1,75,54, 2,46,68, 2,46,81, 1,75,52, 2,46,75,
+ 1,75,51, 2,46,89, 2,46,72, 2,46,65, 1,75,55, 2,46,94, 3,42,25, 4,39,87,
+ 2,46,67, 2,46,85, 2,46,82, 2,46,77, 2,46,63, 2,46,62, 2,46,71, 2,46,90,
+ 1,75,56, 2,46,93, 2,46,69, 2,46,73, 1,75,48, 3,42,18, 3,42,23,15,45, 7,
+ 3,71,10, 3,42,17, 1,79,67, 1,79,62, 2,53,45, 2,53,41, 2,53,17, 1,79,58,
+ 3,47,34, 3,47,48, 4,46,37, 1,79,57, 1,79,63, 4,46,39, 3,47,35, 3,47,33,
+ 2,53,15, 1,79,61, 2,53,27, 2,53,13, 2,53,14, 1,79,56, 2,53,44, 1,79,65,
+ 2,53,30, 2,53,35, 2,53,29, 2,59,28, 2,53,25, 2,53,33, 2,53,31, 2,53,18,
+ 2,53,12, 2,53,39, 1,79,64, 2,53,40, 3,47,40, 2,53,34, 3,47,41, 2,53,23,
+ 2,53,21, 2,53,16, 3,47,43, 3,47,46, 3,47,36, 2,53,24, 2,53,37, 2,53,20,
+ 2,53,36, 2,53,42, 3,47,49, 4,46,38, 1,79,60, 3,47,37, 2,53,32, 2,53,38,
+ 2,53,28, 2,53,22, 1,79,59, 3,47,50, 4,46,36, 3,47,44, 2,46,78, 2,53,26,
+ 1,79,66, 2,53,19,15,50,75, 3,47,45, 3,70,59, 3,70,60, 3,42,16, 2,59,33,
+ 1,82,65, 2,59,32, 2,59,30, 2,59,48, 1,82,69, 3,51,21, 2,59,45, 2,59,37,
+ /* plane 0, page 147 */
+ 0, 255, /* first, last */
+ 2,59,47, 2,59,23, 2,59,35, 3,51,29, 1,82,71, 3,51,30, 2,59,15, 3,51,24,
+ 2,59,13, 2,59,46, 3,51,18, 2,59,44, 2,59,43, 2,59,27, 2,59,26, 2,59,16,
+ 1,82,73, 4,52,35, 2,59,22, 2,59,31, 2,59,42, 1,82,76, 2,59,49, 3,51,22,
+ 1,85,83, 1,82,78, 1,82,72, 2,59,20, 3,51,23, 2,59,29, 2,59,12, 2,59,14,
+ 1,82,63, 1,82,75, 1,82,68, 2,59,21, 2,59,36, 2,53,43, 1,82,74, 2,59,11,
+ 1,85,78, 2,59,38, 2,59,41, 1,82,70, 3,51,27, 2,59,25, 1,82,77, 1,82,67,
+ 3,51,28, 3,51,25, 3,51,26, 1,82,66, 2,59,34, 2,59,40, 1,82,64, 4,52,37,
+ 2,59,18, 2,59,39,15,56,57,15,56,40, 2,59,19, 7,20,67, 0, 0, 0, 3,70,61,
+ 15,56,53, 0, 0, 0, 3,70,62, 4,52,41, 0, 0, 0, 3,51,17, 2,59,24, 2,63,94,
+ 3,54,69, 2,64, 5, 1,85,80, 1,85,82, 2,64,11, 1,85,76, 2,64,25, 2,64,17,
+ 2,64, 6, 2,64, 7, 2,64,16, 3,54,70, 1,85,89, 2,64,15, 2,63,93, 2,64,14,
+ 2,64, 2, 2,64,26, 1,85,88, 1,85,86, 2,64, 3, 3,54,61, 2,64,22, 3,54,71,
+ 2,64, 8, 2,64,21, 3,54,68, 2,64,23, 2,63,92, 1,85,81, 3,54,59, 2,64,24,
+ 3,54,72, 3,54,62, 2,64,12, 3,54,75, 1,85,85, 2,64, 9, 3,54,65, 4,57,41,
+ 1,85,87, 2,64,18, 3,54,66, 3,54,67, 3,54,63, 1,85,79, 2,64, 4, 2,64,19,
+ 3,54,60, 2,64,13, 2,59,17, 2,64,20, 2,64, 1, 3,54,64, 1,85,84, 3,54,74,
+ 2,68,15, 4,57,39, 1,85,77, 2,63,90, 4,57,38,15,61,33, 3,70,63,15,61,25,
+ 2,68,12, 2,68, 5, 1,87,52, 3,57,35, 2,67,94, 2,68,16, 2,68, 7, 2,64,10,
+ 3,57,32, 2,68,18, 2,68, 1, 3,57,34, 1,87,51, 2,68,11, 1,87,53, 1,87,61,
+ 1,87,59, 2,68,13, 1,87,60, 2,68, 3, 3,57,41, 2,68, 4, 2,68, 9, 2,68,14,
+ 3,57,30, 2,63,89, 1,87,54, 2,68,23, 2,68,20, 2,71,65, 2,68,10, 2,68, 6,
+ 2,68,21, 2,71,54, 2,68, 8, 4,62,17, 1,87,57, 3,57,36, 1,87,56, 2,63,91,
+ 1,87,58, 2,68,17, 2,68,19, 1,87,55, 2,68,22, 2,67,93, 4,62, 9, 2,68, 2,
+ 3,57,38,15,65,19, 0, 0, 0, 3,57,37, 3,70,65, 3,70,66, 3,70,64,15,65,35,
+ 2,71,63, 3,59,48, 2,71,47, 1,89,24, 2,71,61, 3,59,36, 3,59,37, 2,71,45,
+ 1,89,25, 4,65,71, 2,71,56, 3,59,35, 2,71,52, 1,89,30, 2,71,62, 2,71,46,
+ 2,71,49, 1,89,22, 2,71,64, 3,59,40, 2,71,57, 2,71,60, 1,89,28, 1,89,33,
+ 1,89,31, 2,71,53, 2,71,48, 3,59,45, 1,89,26, 1,89,27, 2,71,44, 1,89,23,
+ 3,59,47, 1,89,21, 1,89,29, 2,71,59, 1,89,32, 3,59,42, 2,71,55, 2,71,66,
+ 1,89,34, 3,59,33, 3,59,34, 3,59,46, 2,71,51, 3,59,39, 2,71,58, 3,70,69,
+ 0, 0, 0, 3,70,67, 3,70,68, 3,61,33, 3,62,74, 2,74,33, 2,74,48, 2,74,35,
+ 2,74,42, 2,71,50, 2,74,40, 2,74,23, 2,74,46, 1,90,46, 2,74,27, 2,74,45,
+ /* plane 0, page 148 */
+ 0, 132, /* first, last */
+ 2,74,34, 4,68,71, 3,61,35, 1,90,45, 3,61,28, 3,61,31, 2,74,50, 2,74,36,
+ 3,61,30, 2,74,41, 2,74,44, 2,74,21, 2,74,47, 2,74,32, 2,74,37, 2,74,25,
+ 2,74,29, 2,74,49, 2,74,39, 2,74,22, 2,74,26, 2,74,28, 2,74,38, 3,61,29,
+ 1,90,44, 2,74,31, 3,61,36, 3,61,37, 3,61,39, 4,68,75, 3,61,34, 3,61,26,
+ 2,74,24, 0, 0, 0, 3,70,70, 3,70,71, 3,70,72,15,70,55, 0, 0, 0, 3,61,38,
+ 2,74,30, 2,76,48, 2,76,52, 1,91,27, 2,76,54, 3,62,77, 1,91,21, 4,68,79,
+ 2,76,50, 2,76,56, 1,91,26, 1,91,22, 4,71,60, 1,91,23, 2,76,47, 2,76,53,
+ 1,91,25, 2,76,51, 1,91,24, 2,76,46, 2,74,43, 2,76,49, 4,71,66, 2,76,45,
+ 2,76,55, 0, 0, 0, 3,63,73, 3,63,78, 1,91,91, 2,78,28, 2,78,31, 2,78,27,
+ 2,78,29, 2,78,30, 2,78,24, 2,78,25, 2,78,22, 3,63,74, 3,63,76, 2,78,26,
+ 2,78,23, 1,91,92, 1,91,93, 0, 0, 0, 3,63,75, 2,79,57, 3,64,50, 2,79,59,
+ 4,75, 9, 5,86,61, 3,64,53, 3,64,52, 3,64,54, 2,79,58, 2,79,60, 3,64,47,
+ 1,92,44, 3,64,51, 2,79,56, 1,92,43, 1,92,45, 3,64,55, 3,70,74, 3,70,73,
+ 2,80,57, 2,80,58, 1,92,79, 2,80,56, 3,65, 2, 2,81,34, 2,81,33, 2,81,35,
+ 1,93,12, 2,81,36, 1,93,11, 2,81,37, 2,81,65, 2,81,68, 2,81,67, 1,93,21,
+ 2,81,66, 4,77,66, 3,65,79, 3,66, 3, 1,93,31, 1,93,29, 1,93,30, 1,93,36,
+ 2,82,16, 2,82,17, 2,82,15, 2,82,23, 3,66,22,
+ /* plane 0, page 149 */
+ 119, 245, /* first, last */
+ 1,47,59,
+ 4, 5,11, 4,16,26, 2,26, 8, 2,33,31, 2,53,46, 2,71,67, 5,81,54, 0, 0, 0,
+ 1,47,60, 3,15,32, 1,51,77, 1,56,64, 4,16,27, 3,20,18, 2,26, 9, 3,25,60,
+ 2,26,10, 1,61,80, 0, 0, 0, 1,66,68, 2,33,33, 2,33,32, 1,66,72, 1,66,67,
+ 2,33,34, 1,66,69, 1,66,71, 1,66,70, 1,66,66, 3,31,76,15,31,94, 3,70,75,
+ 1,71,48, 3,37,28, 3,37,26, 2,40,54, 2,40,52, 4,33,51, 2,40,53, 2,40,51,
+ 15,37,91, 1,75,59, 3,42,29, 1,75,62, 1,75,64, 1,75,63, 4,40, 2, 3,42,30,
+ 1,75,60, 1,75,61, 0, 0, 0, 2,53,48, 2,53,47, 1,79,68, 2,53,49, 3,47,51,
+ 2,53,50, 1,79,69, 3,47,53, 3,47,54, 4,46,42, 2,59,57, 2,59,55, 2,64,32,
+ 3,51,34, 2,59,53, 2,59,54, 1,82,79, 2,59,50, 2,59,58, 2,59,52, 2,59,56,
+ 2,64,28, 3,51,36, 3,51,32, 2,64,30, 3,54,77, 2,64,31, 1,85,94, 2,64,27,
+ 1,85,93, 2,64,29, 1,85,90, 1,85,91, 1,85,92, 2,59,51, 3,70,76, 0, 0, 0,
+ 1,87,64, 2,68,26, 2,68,24, 2,68,25, 1,87,62, 1,87,65, 1,87,63, 3,57,43,
+ 3,57,42, 7,43,32, 2,71,68, 2,71,69, 1,89,35, 3,59,51, 2,74,51, 2,74,53,
+ 2,74,52, 1,90,47, 1,91,28, 2,76,59, 2,76,58, 2,76,57,15,72,82, 3,70,77,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 5,25,
+ /* plane 0, page 150 */
+ 28, 255, /* first, last */
+ 1,47,61, 3, 1,35, 2, 1,73, 0, 0, 0,
+ 2, 2,88, 1,40,74, 2, 2,86, 2, 2,89, 2, 2,87, 4, 5,14, 3, 7,27, 3, 7,26,
+ 2, 5,14, 3, 7,31, 1,43,66, 3, 7,28, 1,43,67, 2, 5,16, 1,43,64, 2, 5,15,
+ 2, 5,13, 1,43,65, 1,43,63, 3, 7,29, 3, 7,30, 0, 0, 0, 0, 0, 0, 3,10,89,
+ 4, 8,19, 2, 8,88, 2, 8,91, 1,47,64, 2, 8,90, 2, 8,89, 3,10,92, 1,47,63,
+ 1,47,62, 3,10,91, 1,47,66, 2, 8,92, 1,47,65, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2,13,71, 1,51,79, 1,51,80, 1,51,81, 2,13,72, 2,13,68,
+ 1,51,78, 2,13,69, 4,11,61, 2,13,70, 2,13,67, 4,11,59, 3,20,22, 4,16,31,
+ 1,56,71, 3,20,20, 3,25,62, 1,56,68, 2,19,40, 1,56,69, 1,56,72, 2,19,41,
+ 3,20,19, 1,56,67, 1,56,65, 1,56,66, 1,56,70, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1,61,81, 2,26,13, 1,61,89, 2,26,12, 3,25,65, 2,26,15,
+ 1,61,85, 2,26,14, 1,66,80, 1,61,83, 1,61,86, 1,61,82, 1,61,87, 1,61,88,
+ 1,61,84, 3,25,69, 0, 0, 0, 3,31,81, 2,26,11, 1,66,76, 2,33,36, 3,31,82,
+ 2,33,40, 3,31,83, 3,31,85, 2,33,39, 1,66,81, 1,66,77, 1,66,78, 2,33,35,
+ 2,33,37, 2,33,38, 1,66,73, 1,66,75, 3,31,80, 1,66,79, 1,66,74, 3,37,32,
+ 0, 0, 0, 2,40,57, 2,40,55, 2,40,56, 1,71,50, 1,71,51, 3,37,34, 2,40,58,
+ 1,71,49, 1,75,65, 4,40, 4, 1,75,67, 1,75,66, 3,42,37, 2,47, 3, 3,42,38,
+ 3,42,36, 2,47, 4, 2,53,52, 3,47,58, 2,53,51, 3,47,59, 4,52,50, 1,82,80,
+ 1,82,81, 2,59,59, 1,82,82, 3,51,40, 2,64,35, 3,54,80, 2,64,33, 3,54,79,
+ 2,64,34, 1,86, 1, 3,54,81, 2,68,27, 1,89,36, 3,61,41, 3,10,93, 3,51,41,
+ 1,86, 2, 1,47,67, 4,16,33, 1,56,73, 2,19,42, 3,20,25,15,18,79, 2,26,16,
+ 1,61,90, 1,66,82, 2,33,41, 2,33,43, 1,66,84, 1,66,83, 1,66,85, 1,66,86,
+ 2,33,42, 1,71,54, 1,71,55, 1,71,53, 1,75,68, 1,71,52, 2,40,59, 4,33,55,
+ 3,42,39, 3,42,41, 1,75,69, 2,53,53, 2,59,60, 1,82,83, 1,86, 3, 2,68,28,
+ 2,68,32, 1,87,68, 2,68,29, 1,87,69, 1,87,67, 2,68,33, 1,87,70, 2,68,31,
+ 0, 0, 0, 2,71,70, 1,87,66, 1,89,37, 3,62,80, 2,80,59, 3,65, 5, 3,66,15,
+ 1,47,68, 1,61,92, 1,61,91,15,25,10, 3,31,94, 3,31,92, 3,31,91, 1,66,87,
+ 2,33,45, 2,33,44, 1,66,88, 0, 0, 0, 3,37,38, 2,40,63, 1,71,59, 1,71,56,
+ 2,40,62, 1,71,58, 2,40,60, 1,71,57, 3,37,39, 2,40,61, 0, 0, 0, 2,47, 5,
+ /* plane 0, page 151 */
+ 0, 255, /* first, last */
+ 1,75,70, 0, 0, 0, 2,53,56, 5,50,27, 1,79,70, 2,53,54, 1,79,71, 1,79,72,
+ 2,53,55, 1,79,73, 3,47,64, 2,59,61, 3,51,48, 1,82,87, 1,82,84, 1,82,89,
+ 2,59,63, 1,82,85, 2,59,62, 1,82,88, 3,51,45, 3,51,44, 1,82,86, 3,51,49,
+ 2,64,38, 2,64,40, 3,54,84, 3,54,85, 1,86, 4, 2,64,39, 1,86, 5, 2,64,37,
+ 2,64,36, 4,62,24, 2,68,35, 2,68,34, 1,87,71, 2,68,36, 2,71,75, 1,89,39,
+ 2,71,74, 2,71,71, 1,89,38, 2,71,72, 2,71,73, 0, 0, 0, 2,74,54, 2,74,55,
+ 1,90,48, 3,61,47, 1,91,31, 3,61,44, 3,61,46, 2,76,60, 3,62,82, 3,62,81,
+ 1,91,29, 1,91,30, 2,76,61, 3,70,78, 3,63,81, 1,91,94, 1,92, 1, 2,78,32,
+ 3,63,82, 3,64,57, 1,92,80, 2,80,61, 1,92,82, 3,65, 6, 2,80,60, 2,80,62,
+ 1,92,81, 2,81,38, 4,77,68, 2,81,91, 0, 0, 0, 3,70,79, 0, 0, 0, 0, 0, 0,
+ 3,66,37, 3,10,94, 1,47,69, 0, 0, 0, 0, 0, 0, 3,37,41, 1,71,60, 4,40,21,
+ 2,47, 6, 3,42,44, 2,53,57, 1,82,90, 1,82,91, 3,57,47, 1,47,70, 3,32, 1,
+ 1,79,74, 1,89,40, 1,51,82, 3,11, 1, 3,42,46, 0, 0, 0, 1,82,92, 3,62,83,
+ 1,92,46, 1,51,83, 2,26,17, 4,27,87, 2,33,46, 3,32, 4, 2,33,48, 3,32, 2,
+ 2,33,47, 0, 0, 0, 2,40,67, 2,40,64, 1,71,61, 6,58, 4, 1,71,62, 2,40,65,
+ 2,40,66, 3,37,43, 2,47, 8, 2,47,13, 1,75,71, 2,47, 7, 2,47, 9, 2,47,16,
+ 2,47,11, 2,47,15, 2,47,12, 2,47,10, 2,47,14, 1,75,72, 0, 0, 0, 3,47,66,
+ 2,53,60, 3,47,67, 2,53,58, 1,79,76, 3,47,68, 1,79,75, 2,53,59, 1,79,77,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,51,51, 2,59,66, 4,52,63, 4,52,71, 2,59,65,
+ 1,82,93, 2,59,64, 2,64,41, 3,54,90, 2,64,43, 2,64,45, 2,64,44, 3,54,91,
+ 1,86, 6, 2,64,42, 2,68,43, 1,87,72, 2,68,41, 2,68,44, 1,87,73, 4,62,35,
+ 2,68,39, 3,57,48, 2,68,42, 2,68,40, 2,68,37, 1,87,74, 2,68,38, 0, 0, 0,
+ 4,65,92, 3,59,63, 3,59,61, 2,71,76, 3,59,62, 3,59,64, 2,71,78, 2,71,77,
+ 3,61,48, 2,74,56, 3,61,49, 2,74,57, 4,71,81, 3,62,85, 3,62,84, 2,76,62,
+ 3,63,83, 1,92, 3, 4,73,62, 1,92, 2, 2,79,61, 2,79,62, 1,92,83, 2,80,63,
+ 3,65, 8, 1,93,22, 3,66,27, 1,51,84, 1,66,89, 2,47,18, 2,47,17, 2,53,62,
+ 2,53,61, 4,46,55, 3,51,53, 1,86, 7, 2,64,47, 2,64,46, 2,68,47, 2,68,45,
+ 2,68,48, 2,68,46, 3,57,49, 4,69, 9, 1,89,41, 2,71,79, 2,71,80, 2,71,81,
+ 4,69, 7, 2,76,63, 3,62,86, 2,78,33, 3,65, 9, 2,80,64, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,51,85, 3,37,47, 3,47,69,
+ 2,59,67, 2,64,48, 3,59,65, 1,51,86, 4,33,67, 3,37,48, 1,75,73, 4,40,38,
+ 2,59,68, 1,87,75, 2,68,49, 1,89,42, 3,61,51, 2,74,58, 2,74,59, 1,91,32,
+ /* plane 0, page 152 */
+ 0, 255, /* first, last */
+ 2,79,63, 1,51,87, 1,62, 1, 1,62, 2, 2,26,18, 1,66,90, 1,66,91, 2,33,49,
+ 1,66,92, 4,33,72, 1,71,66, 3,37,50, 1,71,68, 2,40,69, 2,40,70, 2,40,68,
+ 1,71,63, 1,71,64, 1,71,67, 1,71,65, 3,42,52, 3,42,53, 2,47,19, 1,75,74,
+ 1,75,75, 3,42,50, 3,42,54, 2,53,69, 1,79,80, 2,53,64, 2,53,63, 3,47,73,
+ 2,53,68, 1,79,78, 3,47,71, 4,46,58, 1,83, 6, 4,52,80, 2,53,65, 2,53,70,
+ 2,53,67, 2,53,66, 3,47,70, 1,79,79, 0, 0, 0, 1,83, 4, 3,51,60, 2,59,70,
+ 1,82,94, 3,51,57, 2,59,71, 3,51,58, 3,50, 8, 2,59,69, 3,51,56, 1,83, 3,
+ 1,83, 1, 1,83, 5, 3,51,61, 1,83, 2, 3,51,59, 3,51,63, 4,62,47, 3,57,59,
+ 3,55, 6, 2,64,49, 4,57,80, 2,64,54, 2,64,50, 2,64,53, 1,86, 8, 3,55, 8,
+ 2,62,33, 2,64,52, 2,64,51, 3,57,57, 1,87,78, 1,87,76, 1,87,79, 1,87,77,
+ 2,68,50, 2,68,51, 2,68,52, 1,87,80, 3,57,54, 3,57,56, 3,59,69, 2,71,85,
+ 1,89,44, 2,71,83, 4,66,16, 1,89,45, 2,71,82, 2,71,84, 1,89,43, 2,74,63,
+ 2,74,60, 4,69,12, 2,74,61, 2,74,62, 2,76,64, 1,91,34, 3,62,88, 1,91,33,
+ 3,62,87, 2,78,35, 2,78,34, 1,92, 4, 3,64,61, 3,64,62, 3,64,60, 1,92,47,
+ 1,92,84, 1,93,13, 2,81,39, 2,81,92, 2,81,93, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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,51,88, 2,33,50, 0, 0, 0, 4,33,81, 2,40,71, 2,47,20, 2,47,21, 1,75,76,
+ 4,40,55, 1,75,77, 2,53,71, 1,79,81, 0, 0, 0, 3,51,65, 1,86, 9, 3,55,10,
+ 2,68,53, 3,57,60, 1,87,81, 2,71,88, 1,89,46, 2,71,87, 2,71,89, 2,71,86,
+ 2,76,67, 2,74,64, 2,74,65, 3,61,54, 1,90,49, 0, 0, 0, 2,76,66, 3,62,91,
+ 3,62,89, 2,76,65, 3,62,90, 2,78,36, 2,81,94, 3,66, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,51,89, 3,62,92, 3,66, 6, 0, 0, 0, 1,51,90,
+ 0, 0, 0, 3,25,71, 1,56,74, 2,19,43, 3,70,80, 2,26,19, 3,25,72, 1,66,93,
+ 0, 0, 0, 1,67, 2, 1,66,94, 2,33,51, 3,37,59, 1,67, 4, 0, 0, 0, 1,67, 1,
+ 3,32,11, 3,37,60, 1,67, 3, 3,37,52, 1,71,70, 3,37,57, 2,40,72, 3,37,55,
+ 3,42,61, 2,40,73, 2,53,73, 4,33,91, 1,71,69, 1,71,71, 1,71,72, 3,37,56,
+ /* plane 0, page 153 */
+ 0, 255, /* first, last */
+ 2,47,23, 3,42,62, 2,47,22, 1,75,78, 5,43,44, 1,75,79, 3,42,59, 2,47,24,
+ 2,53,72, 1,75,81, 1,79,82, 4,46,67, 1,75,80, 0, 0, 0, 3,70,90, 0, 0, 0,
+ 1,83, 7, 2,53,74, 1,79,84, 1,79,83, 2,53,75, 2,53,78, 2,53,76, 2,53,77,
+ 1,79,85, 3,47,75, 1,83,12, 1,83,10, 3,51,69, 3,51,70, 1,83, 9, 2,59,73,
+ 3,51,68, 1,83,11, 3,51,66, 3,51,67, 2,59,72, 2,64,55, 4,52,94, 2,59,74,
+ 1,83, 8, 2,59,75, 2,64,58, 2,64,56, 2,64,57, 2,64,62, 1,87,85, 2,64,61,
+ 2,64,64, 2,64,63, 2,64,60, 2,64,59, 4,53, 1, 1,86,10, 3,57,66, 4,58, 9,
+ 3,57,65, 3,57,70, 2,68,56, 3,57,69, 2,68,55, 1,87,84, 1,87,82, 1,87,83,
+ 3,57,67, 2,68,54, 3,70,81, 2,71,92, 3,59,73, 1,89,47, 4,66,24, 2,71,91,
+ 2,71,90, 1,89,48, 4,69,26, 2,74,70, 2,74,69, 3,61,56, 2,74,67, 3,62,94,
+ 2,74,66, 1,90,51, 1,90,50, 2,74,71, 2,78,37, 1,92, 5, 2,76,69, 1,91,35,
+ 2,76,68, 2,74,68, 3,63,88, 2,78,38, 1,92,48, 3,65,10, 1,93,14, 2,81,40,
+ 4,78, 4, 2,82, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,51,91, 2,26,20,
+ 2,64,65, 1,51,92, 3,37,63, 5,43,46, 2,47,26, 2,47,25, 2,59,76, 5,58, 6,
+ 3,51,72, 2,64,67, 3,55,16, 2,64,66, 3,57,71, 1,87,86, 2,71,93, 2,71,94,
+ 1,90,52, 3,63, 1, 3,64,64, 2,82, 2, 1,56,75, 1,67, 6, 1,67, 5, 2,40,74,
+ 2,40,76, 1,71,74, 2,40,75, 1,71,73, 1,71,75, 2,40,77, 3,42,67, 3,42,66,
+ 3,42,70, 2,47,28, 2,47,30, 2,47,29, 3,42,65, 2,47,32, 3,42,64, 3,42,76,
+ 3,42,68, 1,75,82, 2,47,31, 2,47,27, 3,42,74, 0, 0, 0, 4,40,64, 2,47,33,
+ 3,47,83, 2,53,85, 3,47,77, 2,53,88, 2,53,90, 2,53,80, 2,53,84, 2,53,81,
+ 1,79,87, 1,79,90, 1,79,92, 2,53,82, 2,53,83, 1,79,91, 2,53,86, 2,53,89,
+ 2,53,87, 1,79,93, 3,47,78, 1,79,89, 2,53,79, 1,79,86, 3,47,82, 1,79,88,
+ 3,47,84, 3,51,80, 1,83,14, 2,59,82, 2,59,80, 2,59,79, 3,51,81, 2,59,85,
+ 3,51,75, 2,59,84, 2,59,83, 3,51,76, 2,59,78, 1,83,13, 2,59,77, 3,51,74,
+ 2,59,81, 1,83,15, 0, 0, 0, 3,55,20, 2,64,70, 3,55,23, 2,64,74, 2,64,71,
+ 2,64,73, 2,64,72, 2,64,69, 2,64,75, 2,64,78, 2,64,76, 2,64,77, 1,86,12,
+ /* plane 0, page 154 */
+ 0, 255, /* first, last */
+ 3,55,19, 1,86,11, 2,64,68, 2,64,79, 2,68,61, 2,68,64, 2,68,66, 2,68,65,
+ 3,57,74, 2,68,59, 2,68,63, 2,68,58, 3,57,75, 2,68,60, 1,87,87, 2,68,57,
+ 3,57,77, 2,68,62, 0, 0, 0, 0, 0, 0, 2,72,13, 2,72, 2, 1,89,49, 3,59,79,
+ 3,59,77, 1,89,50, 2,72, 1, 2,72, 6, 2,72,12, 2,72, 4, 2,72,11, 3,59,76,
+ 2,72, 8, 3,59,78, 2,72, 7, 2,72,10, 2,72, 5, 2,72, 3, 3,59,75, 2,72, 9,
+ 0, 0, 0, 2,74,78, 2,74,76, 1,90,53, 2,74,75, 2,74,81, 2,74,79, 3,61,58,
+ 1,90,54, 2,74,74, 2,74,72, 4,69,38, 2,74,73, 1,90,56, 2,74,77, 1,90,55,
+ 2,74,80, 2,76,70, 2,76,76, 3,63, 4, 3,63, 2, 2,76,71, 1,91,39, 2,76,77,
+ 1,91,38, 2,76,75, 2,76,74, 1,91,37, 2,76,73, 1,91,36, 2,76,72, 7,54,49,
+ 2,78,44, 2,78,46, 2,78,45, 4,73,74, 2,78,42, 1,92, 7, 2,78,39, 2,78,43,
+ 2,78,48, 3,63,89, 2,78,47, 2,78,40, 2,78,41, 1,92, 6, 2,79,64, 1,92,51,
+ 3,64,66, 2,79,65, 1,92,49, 1,92,50, 3,64,65, 4,76,29, 2,80,65, 1,92,85,
+ 2,81,69, 3,65,82, 1,93,23, 3,65,83, 2,82, 3, 1,93,24, 2,82, 4, 2,82, 5,
+ 2,82,19, 2,82,18, 1,93,39, 2,82,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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,56,76, 3,32,15, 4,34, 1, 2,40,79, 4,33,93, 2,40,78, 4,33,94, 1,75,83,
+ 1,75,84, 2,47,34, 4,46,84, 2,53,91, 2,59,88, 3,47,87, 3,47,86, 1,79,94,
+ 1,83,16, 2,59,86, 4,53,17, 2,59,89, 1,83,17, 3,55,26, 2,64,80, 2,59,87,
+ 2,68,67, 1,87,88, 2,72,14, 4,66,41, 3,61,65, 0, 0, 0, 2,74,84, 2,74,82,
+ 3,61,64, 3,61,62, 2,74,83, 0, 0, 0, 0, 0, 0, 2,76,78, 3,63, 5, 1,91,40,
+ 2,78,49, 1,92,54, 1,92, 8, 1,92,52, 1,92,53, 2,80,66, 1,93,15, 3,65,84,
+ 1,56,77, 4,22,13, 3,42,78, 4,46,89, 2,68,68, 3,63,91, 3,64,67, 2,19,44,
+ 3,32,18, 1,71,76, 3,37,65, 2,47,35, 3,42,79, 3,42,83, 1,75,85, 2,47,36,
+ 3,42,81, 3,42,80, 3,42,82, 2,53,93, 2,53,92, 1,83,19, 1,80, 1, 1,80, 2,
+ 4,47, 1, 2,54, 2, 2,54, 1, 2,53,94, 3,47,89, 3,51,85, 2,59,90, 2,59,93,
+ 3,51,84, 2,59,92, 2,59,91, 1,83,18, 2,64,84, 2,64,82, 2,64,81, 4,58,23,
+ /* plane 0, page 155 */
+ 0, 255, /* first, last */
+ 3,55,27, 2,64,83, 3,55,28, 1,87,89, 2,68,70, 2,68,71, 1,87,90, 3,57,79,
+ 2,68,69, 3,59,81, 2,72,16, 2,72,15, 2,72,18, 1,89,51, 2,72,17, 4,66,47,
+ 2,74,85, 2,74,87, 2,74,86, 0, 0, 0, 3,63, 7, 2,76,79, 2,76,82, 2,76,80,
+ 2,76,81, 2,78,50, 1,92, 9, 4,73,84, 4,73,81, 3,70,82, 2,79,66, 2,79,67,
+ 2,79,68, 3,65,12, 1,92,86, 1,93,16, 2,82, 6, 1,56,78, 3,42,85, 1,80, 3,
+ 1,83,20, 2,68,72, 3,61,66, 2,78,51, 3,65,14, 4,77,23, 2,81,70, 2,19,45,
+ 3,66, 8, 1,93,40, 1,56,79, 2,59,94, 3,55,30, 2,68,73, 0, 0, 0, 2,72,19,
+ 3,61,67, 4,72,22, 2,76,83, 2,78,52, 1,56,80, 3,37,66, 2,47,37, 2,47,38,
+ 3,42,88, 1,75,86, 1,75,87, 2,54, 4, 1,80, 5, 1,80, 4, 2,54, 3, 0, 0, 0,
+ 2,64,85, 3,55,31, 2,68,74, 2,68,76, 2,68,75, 1,87,93, 1,87,92, 1,87,91,
+ 3,61,68, 1,91,42, 2,76,84, 3,63, 8, 1,91,41, 2,78,54, 2,78,53, 3,65,15,
+ 1,92,87, 2,80,67, 1,62, 3, 2,40,80, 4,34, 9, 3,37,67, 0, 0, 0, 2,47,41,
+ 2,47,39, 2,47,40, 4,40,75, 3,47,94, 2,54,13, 4,47,16, 2,54, 8, 2,54, 5,
+ 2,54,12, 3,47,92, 4,47,21, 3,47,91, 2,54,14, 4,47,23, 4,47,12, 1,80, 7,
+ 2,54,11, 2,54, 7, 3,47,93, 4,47,10, 2,54, 6, 2,54,10, 2,54, 9, 1,80, 6,
+ 0, 0, 0,15,51,30, 2,60,11, 2,60, 6, 2,60, 4, 2,60,13, 2,60, 5, 4,53,39,
+ 2,60, 1, 4,53,35, 2,60, 7, 3,51,88, 3,51,90, 2,60, 2, 2,64,94, 2,60, 3,
+ 2,60,14, 3,52, 3, 4,53,37, 3,51,92, 3,52, 1, 5,58,42, 3,52, 5, 3,51,93,
+ 2,60,10, 1,83,21, 2,60, 9, 2,60, 8, 3,51,89, 2,60,12,15,57,24, 0, 0, 0,
+ 3,70,83, 3,55,36, 2,64,86, 2,64,89, 4,58,41, 3,55,37, 2,64,88, 3,55,32,
+ 2,65, 2, 2,64,91, 2,65, 1, 3,55,34, 2,64,93, 2,64,92, 2,64,90, 4,58,33,
+ 2,64,87, 4,58,31, 1,86,15, 1,86,14, 4,58,36, 1,86,16, 1,86,13, 2,65, 3,
+ 4,58,37,15,61,86, 0, 0, 0, 4,58,35, 0, 0, 0, 2,68,82, 2,68,85, 4,63, 6,
+ 2,68,83, 2,68,87, 5,70,89, 3,57,84, 4,63, 2, 2,68,88, 4,63,10, 2,68,80,
+ 1,88, 4, 2,68,81, 3,57,83, 2,68,79, 2,68,86, 3,59,84, 2,68,78, 2,68,77,
+ 1,88, 3, 1,88, 1, 1,87,94, 3,57,86, 3,57,85, 3,55,35, 0, 0, 0,15,65,82,
+ 0, 0, 0, 0, 0, 0, 3,57,81, 2,68,84, 2,72,28, 2,72,34, 1,89,54, 2,72,29,
+ 5,75,19, 2,72,32, 2,72,36, 1,89,55, 2,72,31, 4,66,60, 2,72,23, 3,59,85,
+ 2,72,22, 2,72,35, 2,72,26, 3,59,87, 2,72,24, 2,72,33, 2,72,25, 1,89,53,
+ 1,89,52, 3,59,89, 2,72,20, 2,72,21, 2,72,30, 4,66,70, 3,59,90, 4,66,72,
+ 2,72,27, 0, 0, 0, 0, 0, 0,15,68,75, 4,66,53, 0, 0, 0, 3,61,79, 2,74,90,
+ 2,74,93, 3,61,81, 4,66,54, 3,61,71, 3,61,73, 1,88, 2, 3,61,74, 3,61,84,
+ /* plane 0, page 156 */
+ 0, 255, /* first, last */
+ 3,61,85, 4,69,58, 3,61,78, 4,69,57, 3,61,72, 2,74,91, 2,75, 3, 2,75, 1,
+ 2,74,89, 2,75, 6, 3,61,70, 2,74,88, 3,61,86, 1,90,58, 2,75, 2, 4,69,52,
+ 3,61,83, 4,69,55, 2,74,92, 1,90,57, 2,75, 5, 3,61,82, 4,69,61, 2,75, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,61,80, 2,76,87, 2,76,86, 5,82,49, 3,63,12,
+ 5,82,43, 2,76,93, 5,82,46, 2,76,89, 2,76,92, 1,91,44, 4,72,27, 4,72,30,
+ 2,76,90, 2,76,91, 4,72,25, 2,76,85, 2,76,88, 1,91,43, 3,63,10,15,73,10,
+ 0, 0, 0, 1,92,11, 2,78,65, 2,78,60, 2,78,64, 3,64, 5, 2,78,67, 2,78,63,
+ 3,63,94, 2,78,59, 3,64, 3, 1,92,13, 2,78,62, 2,78,66, 1,92,12, 2,78,57,
+ 2,74,94, 2,78,61, 4,74, 3, 5,85,13, 2,78,58, 3,64, 2, 2,78,55,15,74,30,
+ 2,78,56, 1,92,10, 2,79,72, 2,79,74, 2,79,77, 2,79,73, 2,79,78, 3,64,69,
+ 2,79,71, 3,64,70, 2,79,69, 3,64,72, 1,92,55, 2,79,75, 1,92,57, 1,92,56,
+ 2,79,70, 2,79,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,65,18, 2,80,72, 1,92,88,
+ 2,80,73, 3,65,19, 2,80,71, 2,80,68, 4,76,42, 3,65,20, 2,80,70, 2,80,69,
+ 2,81,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,65,57, 2,81,43, 2,81,42, 3,65,59,
+ 0, 0, 0, 2,81,73, 5,90,51, 2,81,72, 2,81,71, 2,81,74, 3,65,85, 1,93,32,
+ 1,93,33, 2,82,24, 2,82,28, 3,66,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,62, 4, 2,33,52, 2,40,83,
+ 3,37,68, 1,71,77, 2,40,81, 3,37,70, 3,15,34, 2,40,82, 3,37,72, 3,37,71,
+ 0, 0, 0, 2,47,42, 2,47,43, 1,75,90, 1,75,88, 2,47,44, 1,75,89, 2,54,19,
+ 3,48, 7, 2,54,22, 2,54,16, 2,54,23, 2,54,15, 2,54,17, 3,48,10, 2,54,18,
+ /* plane 0, page 157 */
+ 0, 255, /* first, last */
+ 2,54,21, 3,48, 4, 3,48,11, 1,80,10, 2,54,26, 2,54,25, 1,80, 8, 2,54,20,
+ 2,54,24, 1,80, 9, 3,52,13, 4,47,34, 3,48, 5, 3,48, 2, 0, 0, 0, 3,52,10,
+ 2,60,24, 4,53,50, 1,83,26, 3,52,12, 2,60,19, 1,83,22, 3,52,22, 2,60,16,
+ 2,60,22, 2,60,25, 3,52,19, 1,83,27, 4,58,46, 2,60,21, 2,60,18, 2,60,26,
+ 2,60,17, 3,52,23, 2,60,23, 1,83,23, 3,52, 9, 2,60,15, 1,83,24, 3,52,21,
+ 1,83,25, 2,60,20, 3,52,18, 0, 0, 0, 0, 0, 0, 2,65,21, 2,65, 8, 2,65, 9,
+ 2,65,12, 2,65,10, 4,58,53, 2,65, 4, 4,58,54, 3,55,45, 2,65, 7, 2,65,17,
+ 2,65,11, 3,55,40, 4,58,47, 1,86,17, 4,58,45, 2,65,19, 2,65,16, 1,86,18,
+ 2,65,18, 2,65, 5, 2,65,14, 2,65,15, 3,55,42, 2,65,13, 0, 0, 0,15,62, 4,
+ 0, 0, 0, 3,70,85, 2,68,92, 2,68,94, 2,69, 3, 3,57,89, 3,57,91, 2,68,91,
+ 3,57,93, 1,88, 5, 2,69, 5, 2,68,90, 2,69, 6, 3,57,94, 2,69, 2, 2,69, 4,
+ 2,69, 8, 2,69, 1, 2,69, 9, 2,68,93, 2,68,89, 1,88, 6, 3,58, 2, 2,69, 7,
+ 1,88, 7, 1,89,57, 4,63,20, 3,57,90,15,65,87, 0, 0, 0, 3,59,93, 2,65, 6,
+ 2,72,62, 2,72,53, 1,89,59, 2,72,49, 1,89,60, 3,60, 7, 3,60, 2, 2,72,58,
+ 2,72,52, 2,72,42, 1,89,58, 2,72,55, 2,72,50, 2,72,51, 3,60, 5, 2,72,37,
+ 2,72,44, 2,72,59, 3,59,94, 2,72,56, 5,75,31, 2,72,48, 3,60, 6, 2,72,60,
+ 2,72,43, 2,72,38, 2,72,57, 3,60, 4, 2,72,40, 2,72,54, 2,72,45, 2,72,61,
+ 2,72,41, 1,89,56, 2,72,39, 2,72,46, 2,72,47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2,75,13, 3,60, 3, 2,75,11, 4,69,73, 2,75,16, 3,61,89, 2,75,28, 2,75,19,
+ 2,75,12, 2,75, 8, 2,75,21, 2,75,14, 2,75,17, 2,75,10, 2,75,24, 2,75, 7,
+ 2,75,15, 2,75,20, 2,75,22, 2,75,25, 2,75, 9, 3,61,90, 2,75,29, 2,75,30,
+ 2,75,23, 2,75,27, 2,75,18, 0, 0, 0, 2,77,15, 2,77,18, 3,63,21, 1,91,45,
+ 3,63,17, 2,77,17, 2,77,22, 2,77,20, 1,91,46, 2,77,11, 2,77, 1, 2,76,94,
+ 1,91,48, 2,77,13, 2,77,14, 2,77,10, 2,77, 2, 3,63,18, 2,77, 7, 2,75,26,
+ 4,72,35, 2,77, 3, 1,91,47, 2,77, 9, 3,63,22, 2,77, 8, 0, 0, 0, 2,77, 4,
+ 2,77,16, 4,72,36, 2,77, 5, 2,78,72, 2,77,19, 2,77,21, 2,77,12, 2,77, 6,
+ 2,78,73, 2,78,75, 2,78,69, 1,92,14, 4,74, 5, 2,78,82, 2,78,80, 1,92,15,
+ 2,78,79, 2,78,78, 2,78,71, 2,78,68, 2,78,74, 2,78,83, 2,78,70, 2,78,76,
+ 5,85,37, 2,79,87, 2,79,92, 2,79,82, 2,79,85, 1,92,58, 2,79,89, 4,75,38,
+ 2,80, 2, 2,78,77, 4,75,42, 2,79,83, 2,79,93, 2,80, 3, 2,79,88, 2,79,81,
+ 2,79,91, 4,75,43, 2,79,90, 2,80, 1, 2,79,94, 2,78,81, 2,79,86, 2,79,80,
+ 2,79,84, 1,92,89, 1,92,90, 2,79,79, 3,64,76, 2,80,84, 2,80,75, 2,80,83,
+ /* plane 0, page 158 */
+ 0, 255, /* first, last */
+ 2,80,80, 2,80,81, 2,80,74, 2,80,77, 2,80,85, 2,80,79, 2,80,78, 2,80,76,
+ 3,65,21, 2,80,82, 4,76,54, 2,81,44, 4,77,26, 2,81,45, 3,65,61, 2,81,47,
+ 2,81,46, 2,81,49, 2,81,48, 2,81,76, 2,81,75, 2,82, 7, 3,66, 9, 2,82, 8,
+ 3,66,16, 2,82,20, 1,93,37, 1,93,41, 3,66,24, 2,82,29, 1,93,42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,62, 5, 4,47,40, 5,58,59,
+ 0, 0, 0, 1,90,59, 2,77,23, 3,63,23, 1,92,91, 1,92,92, 0, 0, 0, 1,62, 6,
+ 2,40,84, 3,37,73, 1,71,78, 2,54,27, 3,48,12, 3,52,25, 2,60,28, 2,60,29,
+ 2,60,27, 2,65,23, 2,65,22, 1,86,19, 2,69,11, 2,65,24, 2,69,10, 4,63,26,
+ 3,58, 4, 2,72,64, 1,89,61, 1,89,63, 2,72,63, 3,60, 9, 4,66,85, 1,89,62,
+ 3,62, 1, 2,75,31, 2,75,33, 2,75,32, 2,77,24, 1,91,49, 3,63,26, 1,92,59,
+ 2,80,86, 2,81,50, 3,66,17, 3,66,31, 2,82,33, 1,62, 7, 3, 5,39, 2,47,45,
+ 4,47,44, 1,80,11, 3,48,15, 3,48,14, 3,52,26, 2,60,31, 2,60,30, 3,55,48,
+ 2,65,25, 3,58, 6, 3,58, 5, 4,66,94, 1,89,64, 1,90,60, 2,78,84, 2,82,25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,62, 8, 1,75,91, 3,43, 2, 1,80,12,15,65,92,
+ 2,72,65, 3,62, 2, 2,80, 4, 1,67, 7, 3,25,74, 3,52,28, 3,52,27, 4,58,61,
+ 2,65,26, 0, 0, 0, 3,58, 8, 4,63,30, 1,93,17, 1,67, 8, 1,80,13, 1,86,20,
+ 2,80, 5, 1,67, 9, 3,25,75, 2,54,28, 1,83,29, 2,60,32, 2,60,33, 3,52,29,
+ 1,83,28, 4,53,64, 2,65,27, 1,86,24, 1,86,22, 1,86,23, 1,86,21, 2,69,12,
+ 1,88, 8, 0, 0, 0, 4,67, 4, 3,60,10, 2,75,35, 2,75,34, 2,75,37, 2,75,36,
+ 1,90,61, 0, 0, 0, 0, 0, 0, 2,77,25, 4,72,54, 2,77,27, 2,77,26, 1,91,50,
+ 2,78,85, 3,64, 9, 2,80, 6, 2,80, 7, 1,92,60, 2,81,51, 2,81,77, 1,93,34,
+ 4,78,35, 2,33,53, 2,60,34, 2,65,28, 2,72,66, 2,40,85, 3, 7,82, 2,65,29,
+ /* plane 0, page 159 */
+ 0, 165, /* first, last */
+ 2,69,14, 2,69,13, 3,58, 9, 3,60,13, 3,60,14, 3,63,28, 2,80, 8, 1,92,93,
+ 3,65,63, 2,81,52, 2,81,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,71,79, 2,54,29,
+ 2,54,30, 4,47,54, 2,60,35, 1,71,80, 3,37,74, 1,88, 9, 2,69,15, 3,60,16,
+ 2,77,29, 1,91,51, 2,77,30, 2,77,28, 2,80, 9, 3,65,64, 2,80,87, 4,77,40,
+ 1,71,81, 0, 0, 0, 2,65,32, 2,65,31, 2,65,30, 2,69,16, 3,58,11, 3,58,10,
+ 2,69,20, 2,69,19, 2,69,18, 2,69,17, 1,88,10, 2,72,67, 2,75,39, 1,90,62,
+ 2,75,38, 2,77,31, 2,78,88, 2,78,87, 1,92,16, 2,78,86, 2,80,12, 2,80,11,
+ 2,80,10, 3,64,77, 4,78,36, 1,75,92, 4,53,67, 2,60,36, 1,86,25, 4,58,68,
+ 2,72,68, 2,72,69, 2,78,89, 2,80,13, 4,75,60, 3,65,27, 2,80,88, 2,81,53,
+ 2,82, 9, 2,82,35, 1,75,93, 1,86,26, 2,69,21, 2,72,70, 2,77,32, 2,80,14,
+ 3, 3,80, 0, 0, 0, 1,80,15, 3,52,30, 2,65,33, 2,69,22, 2,72,71, 2,72,72,
+ 2,72,73, 2,75,44, 3,62, 4, 2,75,40, 1,91,52, 2,75,43, 2,75,42, 1,90,63,
+ 2,75,41, 1,90,65, 0, 0, 0, 1,90,64, 2,77,34, 2,77,33, 1,91,53, 1,91,54,
+ 4,72,64, 3,63,30, 1,92,18, 2,78,90, 1,92,17, 4,75,65, 2,80,17, 2,80,18,
+ 2,80,16, 2,80,15, 1,93, 1, 4,76,68, 2,80,89, 2,80,90, 2,80,91, 1,92,94,
+ 2,81,54, 2,81,57, 2,81,56, 2,81,55, 3,66,19, 4,78,37, 2,82,34, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,83,30, 3,55,53, 4,67,13,
+ 1,88,18, 2,75,45, 2,77,35, 3,64,11, 1,92,19, 2,78,91, 4,78,53, 3,66,34,
+ 2,82,36,15, 1,57, 0, 0, 0, 0, 0, 0, 1,83,31, 3,62,39, 4,78,19, 0, 0, 0,
+ 2,65,34, 3,63,31, 2,78,92, 3,65,65, 2,81,79, 3,65,87,
+ /* plane 0, page 160: --- */
+ /* plane 0, page 161: --- */
+ /* plane 0, page 162: --- */
+ /* plane 0, page 163: --- */
+ /* plane 0, page 164: --- */
+ /* plane 0, page 165: --- */
+ /* plane 0, page 166: --- */
+ /* plane 0, page 167: --- */
+ /* plane 0, page 168: --- */
+ /* plane 0, page 169: --- */
+ /* plane 0, page 170: --- */
+ /* plane 0, page 171: --- */
+ /* plane 0, page 172: --- */
+ /* plane 0, page 173: --- */
+ /* plane 0, page 174: --- */
+ /* plane 0, page 175: --- */
+ /* plane 0, page 176: --- */
+ /* plane 0, page 177: --- */
+ /* plane 0, page 178: --- */
+ /* plane 0, page 179: --- */
+ /* plane 0, page 180: --- */
+ /* plane 0, page 181: --- */
+ /* plane 0, page 182: --- */
+ /* plane 0, page 183: --- */
+ /* plane 0, page 184: --- */
+ /* plane 0, page 185: --- */
+ /* plane 0, page 186: --- */
+ /* plane 0, page 187: --- */
+ /* plane 0, page 188: --- */
+ /* plane 0, page 189: --- */
+ /* plane 0, page 190: --- */
+ /* plane 0, page 191: --- */
+ /* plane 0, page 192: --- */
+ /* plane 0, page 193: --- */
+ /* plane 0, page 194: --- */
+ /* plane 0, page 195: --- */
+ /* plane 0, page 196: --- */
+ /* plane 0, page 197: --- */
+ /* plane 0, page 198: --- */
+ /* plane 0, page 199: --- */
+ /* plane 0, page 200: --- */
+ /* plane 0, page 201: --- */
+ /* plane 0, page 202: --- */
+ /* plane 0, page 203: --- */
+ /* plane 0, page 204: --- */
+ /* plane 0, page 205: --- */
+ /* plane 0, page 206: --- */
+ /* plane 0, page 207: --- */
+ /* plane 0, page 208: --- */
+ /* plane 0, page 209: --- */
+ /* plane 0, page 210: --- */
+ /* plane 0, page 211: --- */
+ /* plane 0, page 212: --- */
+ /* plane 0, page 213: --- */
+ /* plane 0, page 214: --- */
+ /* plane 0, page 215: --- */
+ /* plane 0, page 216: --- */
+ /* plane 0, page 217: --- */
+ /* plane 0, page 218: --- */
+ /* plane 0, page 219: --- */
+ /* plane 0, page 220: --- */
+ /* plane 0, page 221: --- */
+ /* plane 0, page 222: --- */
+ /* plane 0, page 223: --- */
+ /* plane 0, page 224: --- */
+ /* plane 0, page 225: --- */
+ /* plane 0, page 226: --- */
+ /* plane 0, page 227: --- */
+ /* plane 0, page 228: --- */
+ /* plane 0, page 229: --- */
+ /* plane 0, page 230: --- */
+ /* plane 0, page 231: --- */
+ /* plane 0, page 232: --- */
+ /* plane 0, page 233: --- */
+ /* plane 0, page 234: --- */
+ /* plane 0, page 235: --- */
+ /* plane 0, page 236: --- */
+ /* plane 0, page 237: --- */
+ /* plane 0, page 238: --- */
+ /* plane 0, page 239: --- */
+ /* plane 0, page 240: --- */
+ /* plane 0, page 241: --- */
+ /* plane 0, page 242: --- */
+ /* plane 0, page 243: --- */
+ /* plane 0, page 244: --- */
+ /* plane 0, page 245: --- */
+ /* plane 0, page 246: --- */
+ /* plane 0, page 247: --- */
+ /* plane 0, page 248: --- */
+ /* plane 0, page 249: --- */
+ /* plane 0, page 250 */
+ 40, 40, /* first, last */
+ 15,56,44,
+ /* plane 0, page 251: --- */
+ /* plane 0, page 252: --- */
+ /* plane 0, page 253: --- */
+ /* plane 0, page 254 */
+ 48, 107, /* first, last */
+ 1, 1,11, 1, 1,22, 1, 1,24, 0, 0, 0, 0, 0, 0, 1, 1,32, 1, 1,33, 1, 1,36,
+ 1, 1,37, 1, 1,40, 1, 1,41, 1, 1,44, 1, 1,45, 1, 1,48, 1, 1,49, 1, 1,52,
+ 1, 1,53, 1, 1,56, 1, 1,57, 1, 1,60, 1, 1,61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 2, 7, 1, 2, 8, 1, 2,11, 1, 2,12, 1, 2, 9, 1, 2,10, 0, 0, 0,
+ 1, 1,14, 1, 1,15, 1, 1,16, 0, 0, 0, 1, 1,18, 1, 1,19, 1, 1,20, 1, 1,21,
+ 0, 0, 0, 1, 1,62, 1, 1,63, 1, 1,64, 1, 1,65, 1, 1,66, 1, 1,67, 1, 2,13,
+ 1, 2,14, 1, 2,15, 1, 2,31, 1, 2,32, 1, 2,33, 1, 2,35, 1, 2,34, 0, 0, 0,
+ 1, 2,66, 1, 2,76, 1, 2,77, 1, 2,78,
+ /* plane 0, page 255 */
+ 1, 229, /* first, last */
+ 1, 1,10, 0, 0, 0, 1, 1,76, 1, 2,67, 1, 2,72, 1, 1,77, 0, 0, 0,
+ 1, 1,30, 1, 1,31, 1, 1,78, 1, 2,16, 1, 1, 2, 1, 2,17, 1, 1, 5, 1, 2,63,
+ 1, 4, 1, 1, 4, 2, 1, 4, 3, 1, 4, 4, 1, 4, 5, 1, 4, 6, 1, 4, 7, 1, 4, 8,
+ 1, 4, 9, 1, 4,10, 1, 1, 8, 1, 1, 7, 1, 2,22, 1, 2,24, 1, 2,23, 1, 1, 9,
+ 1, 2,73, 1, 4,33, 1, 4,34, 1, 4,35, 1, 4,36, 1, 4,37, 1, 4,38, 1, 4,39,
+ 1, 4,40, 1, 4,41, 1, 4,42, 1, 4,43, 1, 4,44, 1, 4,45, 1, 4,46, 1, 4,47,
+ 1, 4,48, 1, 4,49, 1, 4,50, 1, 4,51, 1, 4,52, 1, 4,53, 1, 4,54, 1, 4,55,
+ 1, 4,56, 1, 4,57, 1, 4,58, 0, 0, 0, 1, 2,64, 0, 0, 0, 0, 0, 0, 1, 2, 5,
+ 0, 0, 0, 1, 4,59, 1, 4,60, 1, 4,61, 1, 4,62, 1, 4,63, 1, 4,64, 1, 4,65,
+ 1, 4,66, 1, 4,67, 1, 4,68, 1, 4,69, 1, 4,70, 1, 4,71, 1, 4,72, 1, 4,73,
+ 1, 4,74, 1, 4,75, 1, 4,76, 1, 4,77, 1, 4,78, 1, 4,79, 1, 4,80, 1, 4,81,
+ 1, 4,82, 1, 4,83, 1, 4,84, 1, 1,34, 1, 2,62, 1, 1,35, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 2,70, 1, 2,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,68,
+ /* plane 1: --- */
+ /* plane 2, page 0 */
+ 0, 254, /* first, last */
+ 5, 1, 5, 0, 0, 0,15, 1, 1, 6, 1,15, 6, 1,13, 6, 1,14, 0, 0, 0, 6, 1,34,
+ 6, 1,35, 5, 1,19, 0, 0, 0, 3, 1,36, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 1,30,
+ 15, 1,31, 0, 0, 0, 6, 2,11, 0, 0, 0, 5, 1,45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 3,32, 6, 3,30, 6, 3,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 4,71, 6, 5,63, 5, 3,15,15, 2,84, 0, 0, 0, 6, 5,71, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 5,67, 0, 0, 0, 0, 0, 0, 6, 9,23, 6, 9,26, 6, 9,24, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 9, 2,15, 9, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,14,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,16,82, 0, 0, 0, 5,19, 3, 0, 0, 0, 0, 0, 0,15,25,18,15,25,19,
+ 6,39,13, 0, 0, 0, 0, 0, 0,15,27,83,15,32,21,15,32,85, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,39,34,15,45,54, 0, 0, 0, 7, 1, 1,15,57,39, 4,47,92,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,58,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 1,12, 6, 1, 2, 0, 0, 0, 6, 2,63, 4, 1,54, 6, 3,33, 6, 5,64,
+ 0, 0, 0, 6, 9,27, 0, 0, 0, 5, 5, 1, 0, 0, 0, 5, 7,90, 6,14,42,15, 9,48,
+ 6,21, 5, 6,21, 6, 6,37,93, 0, 0, 0, 6,38,31, 0, 0, 0,15,38,32, 5,36,94,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1,18, 5, 1,13, 6, 2,13,
+ 0, 0, 0, 0, 0, 0, 6, 3,34,15,13,65, 6,48,48,15,51,36, 4, 1, 1, 5, 1, 6,
+ 6, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 1, 2, 6, 1,19, 0, 0, 0, 6, 1,36,
+ 0, 0, 0, 0, 0, 0,15, 1, 5,15, 1, 6, 5, 1,46, 6, 2,16, 0, 0, 0,15, 1,37,
+ 6, 2,46, 6, 2,15,15, 1,32,15, 1,33, 6, 1,37, 0, 0, 0, 6, 2,17, 0, 0, 0,
+ 6, 2,14, 0, 0, 0, 4, 2, 6, 4, 2, 5, 5, 2, 4, 5, 2, 5, 0, 0, 0, 0, 0, 0,
+ 6, 3,35, 6, 9,30, 0, 0, 0, 0, 0, 0, 6, 4,61, 0, 0, 0, 6, 5,54, 6, 5,65,
+ 6, 5,66, 6,12,35, 6, 9,28, 6,26,69,15, 9, 5, 6,13,13, 6, 9,29, 6,14,43,
+ 0, 0, 0, 5,11,71, 6,21,10, 0, 0, 0, 6,21, 7, 6,25,68, 6,21, 9, 6,28,91,
+ 0, 0, 0, 0, 0, 0, 6,37,94, 6,38,32, 6,38,33, 0, 0, 0, 5,29,54, 0, 0, 0,
+ 0, 0, 0, 5, 1, 3, 0, 0, 0, 5, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 6,
+ 6, 1, 5, 5, 1, 1, 5, 1,11, 0, 0, 0,15, 1, 3, 6, 1,38, 5, 1,20, 0, 0, 0,
+ 15, 1, 7,15, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2,19, 6, 2,18,
+ 6, 2,10, 5, 1,47, 0, 0, 0, 0, 0, 0, 6, 3,38, 6, 3,36,15, 1,78, 6, 3,37,
+ 0, 0, 0, 0, 0, 0,15, 2,85, 0, 0, 0, 0, 0, 0, 6, 9,31, 0, 0, 0, 0, 0, 0,
+ 6,13,12, 4, 6, 4, 6,14,45, 6,14,46,15, 5,32, 0, 0, 0, 6,14,44, 0, 0, 0,
+ 6,21,11, 0, 0, 0, 0, 0, 0,15,13,64, 6,28,94, 5,16,83, 6,28,93,
+ /* plane 2, page 1 */
+ 2, 255, /* first, last */
+ 15,25,20, 0, 0, 0, 6,48,49, 5,36,53,15,38,33, 6,58,67,
+ 6,58,66, 7,22,83, 7,38, 7, 7,45,26, 5, 1, 4, 5, 1, 7, 4, 1, 8, 5, 1, 8,
+ 0, 0, 0, 5, 1,12, 6, 1,39, 6, 1,40, 6, 1,41, 6, 3,39, 5, 3,16, 6, 5,68,
+ 0, 0, 0, 6, 9,32, 5,16,84, 6,38,34, 0, 0, 0, 7,12,28, 6, 1, 7, 6, 1, 8,
+ 6, 1, 9, 6, 1,42, 6, 5,69, 6, 3,40, 6, 3,41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 5,72, 0, 0, 0,15, 2,86, 0, 0, 0, 4, 5,19, 5, 5, 2, 4, 5,18, 0, 0, 0,
+ 6,14,48, 5, 7,91,15, 9, 7, 0, 0, 0, 6,16,92, 6,21,13, 0, 0, 0, 6,21,12,
+ 15,13,66, 6,29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,45,78, 0, 0, 0, 0, 0, 0, 6, 3,42,15, 1,79,15, 1,80, 0, 0, 0,15, 2,11,
+ 5, 3,17,15, 2,87,15, 2,88,15, 2,89, 5, 5, 3, 0, 0, 0, 0, 0, 0, 6, 9,33,
+ 0, 0, 0,15, 5,35, 0, 0, 0, 6,14,50, 6,14,49,15, 9, 8, 6,21,15, 5,12,70,
+ 4,11,63, 6,21,16, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,67, 6,21,17, 6,38,35,
+ 6,29, 3, 6,29, 2, 4,16,36, 5,16,85,15,18,84,15,18,85, 0, 0, 0,15,18,82,
+ 0, 0, 0, 6,38,37, 6,38,36, 6,38,38, 4,22,15,15,25,21,15,25,22,15,25,23,
+ 6,44,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,32,22,15,32,23,15,32,24, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,34, 0, 0, 0,
+ 6,48,50, 5,43,81, 7, 1, 2,15,45,55,15,45,56,15,45,57, 7, 6,89, 7, 1, 4,
+ 0, 0, 0, 7, 1, 3, 7, 1,38, 0, 0, 0, 7,12,31, 0, 0, 0, 5,51,51, 7,12,30,
+ 0, 0, 0, 0, 0, 0, 7,12,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38, 3, 7,38, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1,20, 6, 1,21,15, 1, 4, 6, 1,44,15, 1, 9,
+ 6, 1,43, 3, 1,79, 0, 0, 0, 0, 0, 0,15, 1,35, 6, 2,21, 0, 0, 0, 6, 2,20,
+ 6, 2,22, 0, 0, 0, 4, 1,56, 0, 0, 0, 4, 2,12, 4, 2,11, 4, 2, 9, 6, 3,47,
+ 4, 2,16, 6, 3,48, 5, 2, 7, 6, 3,45, 6, 3,44, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 2,15, 6, 3,43,15, 1,83,15, 1,84,15, 1,85,15, 1,86,
+ 15, 1,87,15, 1,88,15, 1,89, 5, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3,49,
+ 5, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 1,90, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 3,18, 6, 5,74, 4, 3,26, 6, 5,75, 6, 5,84, 6, 5,80, 6, 5,76,15, 2,90,
+ 15, 2,91,15, 2,92,15, 2,93,15, 3, 1,15, 3, 2,15, 3, 3,15, 3, 5,15, 3, 8,
+ 15, 3, 9,15, 3,10,15, 3,11,15, 3,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 3,24, 6, 5,77, 0, 0, 0, 6, 5,79, 0, 0, 0, 0, 0, 0,15, 3, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5,78, 6, 5,73,
+ /* plane 2, page 2 */
+ 0, 255, /* first, last */
+ 5, 3,19, 6, 5,83, 0, 0, 0, 6, 9,35, 6, 9,37, 4, 5,26, 5, 5, 8, 6, 9,38,
+ 5, 5, 9, 3, 7,46, 5, 5,10, 4, 5,23, 4, 5,21, 6, 9,42, 6, 9,36, 6, 9,44,
+ 6, 9,39, 6, 9,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, 6, 9,34,15, 5,37,
+ 15, 5,38,15, 5,40,15, 5,41,15, 5,43,15, 5,44,15, 5,45,15, 5,46,15, 5,47,
+ 15, 5,48,15, 5,49, 6, 9,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9,40,
+ 6, 9,41, 6, 9,43, 5, 5, 4, 0, 0, 0, 5, 5, 7, 5, 7,92, 6,14,68, 6,14,57,
+ 5,11,82, 4, 8,22, 6,14,67, 6,14,55, 6,14,54, 5, 8, 3, 4, 8,27, 6,14,61,
+ 5, 7,94, 5, 7,93, 5, 8, 2, 6,14,66, 6,14,53, 6,14,52, 6,14,69, 6,14,60,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 9, 9,15, 9,10,15, 9,11,15, 9,12,
+ 15, 9,14,15, 9,15,15, 9,17,15, 9,18,15, 9,19,15, 9,20,15, 9,21,15, 9,22,
+ 15, 9,23,15, 9,24, 6,14,51, 0, 0, 0, 6,14,56, 6,14,59, 6,14,62, 0, 0, 0,
+ 6,14,64, 0, 0, 0, 0, 0, 0,15, 5,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,14,63, 5, 8, 4, 4,11,67, 5,11,80, 4,11,71, 6,21,22, 5,11,75,
+ 6,21,21, 5,11,84, 4,11,70, 4,11,72, 5,11,79, 6,21,18, 5,11,73, 0, 0, 0,
+ 0, 0, 0,15,13,68,15,13,78, 6,21,23, 0, 0, 0, 0, 0, 0, 5,11,78,15,13,70,
+ 15,13,71,15,13,74,15,13,75,15,13,76,15,13,77,15,13,79,15,13,81,15,13,82,
+ 15,13,83,15,13,84,15,13,85,15,13,86,15,13,88,15,13,89,15,13,90,15,13,91,
+ 15,13,92, 0, 0, 0, 6,21, 1, 6,21,26, 6,21,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,21,19, 6,21,20, 0, 0, 0, 5,11,72, 0, 0, 0, 6,21,25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,87, 0, 0, 0,
+ 15,13,80, 0, 0, 0, 5,11,74, 5,11,77, 5,11,85, 5,11,81, 5,11,83, 4,11,64,
+ 6,29,11, 6,29,13, 6,29,12, 4,16,41, 4,16,40, 6,29,16, 6,29, 8, 0, 0, 0,
+ 5,17, 1, 6,29,19, 5,16,87, 6,29,14, 6,29, 7, 5,17, 2, 5,16,86, 4,16,38,
+ 6,29,10, 6,29,17, 6,29,23, 6,29,18, 0, 0, 0, 0, 0, 0, 6,29, 9, 0, 0, 0,
+ 0, 0, 0, 4,16,43, 6,29,20,15,13,73,15,18,87,15,18,88,15,18,89,15,18,90,
+ 15,18,91,15,18,92,15,18,94,15,19, 1,15,19, 3,15,19, 4,15,19, 5,15,19, 6,
+ 15,19, 7, 6,38,23, 6,29,24, 6,30,69, 6,29,25, 6,29,15, 5,16,90, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,35,67, 0, 0, 0, 5,16,93, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,17, 3, 6,29, 4, 6,29, 6, 0, 0, 0,15,18,93, 0, 0, 0, 5,16,89,
+ 5,16,94, 5,16,88, 6,29, 5, 6,29,22, 5,16,92, 6,38,41, 6,38,47, 5,22,54,
+ 5,22,49, 6,38,44, 5,22,46, 5,22,50, 5,22,67, 5,22,51, 6,38,40, 5,22,53,
+ 5,22,48, 6,38,54, 4,22,21, 5,22,52, 6,38,50, 6,38,48, 6,38,43, 6,38,46,
+ /* plane 2, page 3 */
+ 0, 251, /* first, last */
+ 6,38,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,18,86,
+ 6,38,56, 5,22,47, 0, 0, 0, 5,22,55, 6,38,39,15,25,24,15,25,25,15,25,26,
+ 15,25,27,15,25,28,15,25,29,15,25,30,15,25,31, 0, 0, 0, 0, 0, 0, 6,38,45,
+ 4,22,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,38,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,38,52, 5,22,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,38,42, 5,20, 1, 6,48,58, 4,34,24, 5,29,58, 5,29,56, 6,48,51,
+ 5,16,91, 5,29,62, 5,29,60, 6,48,56, 5,29,59, 6,48,63, 6,48,61, 4,28,14,
+ 0, 0, 0, 6,48,60, 6,48,66, 6,48,53, 4,28,15, 0, 0, 0, 5,29,64, 6,48,52,
+ 5,29,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,48,55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,48,62,15,32,25,15,32,26,15,32,27,15,32,28,15,32,29,15,32,30,15,32,31,
+ 15,32,32,15,32,33,15,32,34,15,32,35,15,32,36,15,32,37,15,32,38, 0, 0, 0,
+ 6,48,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,54,46, 6,48,57,
+ 0, 0, 0, 0, 0, 0, 6,48,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,38,55,
+ 5,29,57, 5,29,61, 5,29,63, 4,28,11, 6,48,64, 0, 0, 0, 6,58,81, 5,29,65,
+ 7, 1,14, 4,34,20, 5,36,54, 6,58,68, 6,58,73, 5,29,66, 6,58,75, 4,34,25,
+ 6,58,84, 4,34,17, 6,58,85, 6,58,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,58,71, 6,58,86,15,38,35,15,38,36,15,38,37,15,38,38,
+ 15,38,39,15,38,41,15,38,42,15,38,43,15,38,44,15,38,45,15,38,46,15,38,47,
+ 15,38,49,15,38,50,15,38,51,15,38,52,15,38,54,15,38,55,15,38,56,15,51,37,
+ 7, 6,13, 5,36,56, 6,58,87, 6,62,55, 0, 0, 0, 0, 0, 0, 6,58,77, 0, 0, 0,
+ 0, 0, 0, 6,58,79, 6,58,69,15,38,48, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,53, 0, 0, 0, 4,34,16, 6,58,70,
+ 6,58,74, 6,58,78, 6,58,80, 4,34,22, 0, 0, 0, 0, 0, 0, 5,31,38, 4,40,94,
+ 4,40,90, 6,58,76, 7, 1,15, 7, 1,17, 7, 1, 9, 7, 1, 6, 7, 1, 5, 5,43,87,
+ 4,40,92, 7, 1,11, 7, 1,12, 5,43,83, 7, 1,10, 0, 0, 0, 0, 0, 0, 5,43,89,
+ 5,43,88, 0, 0, 0, 7, 1, 7, 0, 0, 0,15,45,58,15,45,59,15,45,60,15,45,61,
+ 15,45,62,15,45,64,15,45,65, 0, 0, 0, 7, 1, 8, 0, 0, 0, 5,43,82, 7, 1,13,
+ 0, 0, 0, 0, 0, 0,15,45,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,41, 1, 5,43,85, 7, 1,16, 5,43,84, 0, 0, 0, 0, 0, 0, 5,44,37,
+ 5,51,52, 5,51,58, 7,12,32, 4,47,56, 4,47,63, 5,51,56, 4,47,60, 4,47,62,
+ 5,51,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,51,54, 0, 0, 0,15,51,38,15,51,39,
+ 15,51,40, 0, 0, 0,15,51,41,15,51,42,
+ /* plane 2, page 4 */
+ 0, 253, /* first, last */
+ 5,51,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,51,55, 0, 0, 0,
+ 7,22,88, 5,43,86, 5,58,79, 5,58,80, 4,53,71, 4,53,70, 7,22,86, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,57,40, 0, 0, 0, 0, 0, 0,15,57,42,15,57,43,15,57,44,
+ 15,57,46, 0, 0, 0, 7,22,85, 7,22,87, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,57,41,
+ 0, 0, 0, 4,53,72, 7,22,84, 7,30,86, 4,58,75, 4,58,73, 4,58,74, 7,30,88,
+ 7,30,87, 0, 0, 0,15,62,16,15,62,17, 0, 0, 0, 0, 0, 0,15,62,12,15,62,14,
+ 15,62,15, 7,30,85, 5,65,17, 4,58,76, 0, 0, 0, 5,65,15, 5,65,16, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,65,18, 5,71,42, 5,71,46, 4,67,14, 5,71,45, 5,71,47,
+ 15,65,94,15,66, 1, 7,39,79, 0, 0, 0, 5,71,44, 5,71,43, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,73,92, 7,50,85, 7,45,28,15,68,90,
+ 0, 0, 0, 5,75,75, 7,45,27, 7,45,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,70,15,
+ 4,70,14, 5,79,72, 7,55,46, 5,75,76,15,71,31,15,71,94, 0, 0, 0, 4,70,13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,55,45, 0, 0, 0,15,73,24,15,73,26,
+ 15,73,25, 5,83,17, 4,74,32, 7,59,37, 0, 0, 0,15,74,43,15,75,33, 5,85,66,
+ 0, 0, 0, 0, 0, 0, 4,77,50,15,76,41, 0, 0, 0, 0, 0, 0, 6, 1,45, 4, 1,60,
+ 0, 0, 0, 4, 2,18, 6, 3,51, 6, 3,52, 0, 0, 0, 6, 5,85, 6, 5,87, 6, 5,88,
+ 5, 3,21, 6, 5,86, 0, 0, 0, 6, 9,49, 6, 9,48, 6, 9,47, 6, 9,51, 0, 0, 0,
+ 15, 5,51, 0, 0, 0, 6, 9,50,15, 5,50, 6,14,71, 6,14,72, 0, 0, 0, 0, 0, 0,
+ 5,11,86, 0, 0, 0, 0, 0, 0,15,13,93,15,13,94,15,14, 1, 6,21,28,15,19, 8,
+ 5,17, 4, 5,17, 5,15,19, 9,15,19,10, 0, 0, 0, 0, 0, 0, 6,38,57,15,25,32,
+ 15,25,33,15,25,34, 5,22,56,15,25,35,15,32,39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,48,67,15,32,40,15,38,57,15,38,58, 0, 0, 0, 5,36,57, 0, 0, 0, 0, 0, 0,
+ 7, 1,20, 7, 1,18, 5,43,91,15,45,67,15,45,68, 5,43,90, 7, 1,19, 0, 0, 0,
+ 5,51,60, 7,12,33,15,51,43,15,51,44,15,51,45,15,51,46, 0, 0, 0, 5,58,81,
+ 0, 0, 0, 0, 0, 0,15,57,47,15,57,48,15,57,49, 0, 0, 0, 7,30,89, 0, 0, 0,
+ 5,65,19,15,62,18, 0, 0, 0, 7,38, 9, 5,71,48,15,68,91, 5,71,49, 5,75,77,
+ 0, 0, 0, 0, 0, 0,15,71,33,15,73,27, 0, 0, 0,15,74,44, 0, 0, 0, 5,87,51,
+ 15,75,34, 0, 0, 0, 0, 0, 0, 6, 1,22, 5, 1,22, 5, 1,21, 0, 0, 0, 6, 2,23,
+ 6, 3,54, 6, 3,53, 0, 0, 0, 0, 0, 0, 5, 3,22, 6, 5,89, 0, 0, 0, 5, 3,24,
+ 0, 0, 0, 0, 0, 0, 5, 8, 5, 5, 8, 6, 0, 0, 0, 4,11,74, 6,21,29,15,14, 2,
+ 15,14, 3, 6,29,26, 0, 0, 0, 6,38,58, 6,48,68, 0, 0, 0, 5,29,67, 4,28,17,
+ 6,58,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,58,82,
+ /* plane 2, page 5 */
+ 0, 255, /* first, last */
+ 6, 1,23, 6, 1,46, 5, 1,23, 6, 1,33, 6, 1,57, 0, 0, 0, 5, 1,48, 6, 3,27,
+ 4, 2,21, 6, 3,55, 6, 5,92, 6, 5,94, 5, 3,25, 0, 0, 0,15, 3,13, 6, 5,90,
+ 6, 9,52, 0, 0, 0, 6,14,75, 6,14,73, 0, 0, 0, 5, 8, 7, 6,14,74, 6,14,47,
+ 6,16,91, 6,21,32, 6,21,31, 6,21,33, 6,21,30, 6,29,27, 0, 0, 0, 6,38,61,
+ 5,29,68,15,25,36,15,25,37, 0, 0, 0, 0, 0, 0, 6,38,59, 0, 0, 0, 6,38,60,
+ 5,29,69, 6,48,69,15,32,41,15,32,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,34,26,
+ 0, 0, 0, 6,58,89, 0, 0, 0,15,52,38,15,51,47,15,51,48, 5,65,20,15,62,19,
+ 7,38,10, 7,38,11, 0, 0, 0, 0, 0, 0, 4, 1,13, 6, 1,47, 6, 1,49, 0, 0, 0,
+ 0, 0, 0, 6, 2,25, 4, 1,61, 6, 2,24, 5, 1,50, 0, 0, 0,15, 1,38, 0, 0, 0,
+ 6, 2,26, 0, 0, 0, 5, 1,49, 6, 3,58, 0, 0, 0, 6, 3,56, 6, 5,39, 0, 0, 0,
+ 6, 6, 3, 6, 6, 1, 6, 6, 2, 5, 3,26, 6, 8,90, 0, 0, 0, 5, 5,12, 0, 0, 0,
+ 6, 9,53, 0, 0, 0, 6, 9,54, 6,14,76, 0, 0, 0, 6,21,34, 6,21,35, 5,11,87,
+ 5,11,88, 0, 0, 0, 6,29,29, 6,38,63, 3,25,87, 6,38,62, 4,28,19, 5,29,70,
+ 6,58,91, 6,58,90, 0, 0, 0, 0, 0, 0, 7, 1,21, 5,51,61, 7,12,34,15,53,86,
+ 4,58,77,15,71,34, 7,55,47, 5, 1,24, 0, 0, 0, 6, 2,27,15, 1,40,15, 1,41,
+ 0, 0, 0, 6, 3,59, 4, 2,23, 5, 2, 9, 0, 0, 0,15, 1,91, 0, 0, 0, 0, 0, 0,
+ 15, 3,14,15, 3,15, 0, 0, 0, 0, 0, 0, 5, 5,13,15, 5,53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,14,77, 0, 0, 0, 6,29,30,15,14, 5, 0, 0, 0,15,14, 6,
+ 15,14, 7,15,14, 8,15,14, 9, 5,17, 7, 6,38,64,15,25,39,15,25,40, 6,38,65,
+ 0, 0, 0,15,26,61, 6,48,70, 0, 0, 0, 6,58,92, 0, 0, 0,15,38,59, 5,46,87,
+ 7,12,35,15,57,50,15,51,49, 7,30,90, 0, 0, 0, 0, 0, 0, 7,38,12, 7,45,31,
+ 0, 0, 0, 5,79,73, 0, 0, 0, 5,85,67, 0, 0, 0, 0, 0, 0,15, 1,42, 0, 0, 0,
+ 0, 0, 0, 6, 3,60,15, 1,93, 0, 0, 0,15, 1,94, 0, 0, 0, 4, 2,24, 5, 3,27,
+ 6, 6, 4, 4, 3,28,15, 3,16,15, 3,17,15, 3,18,15, 3,19, 0, 0, 0, 0, 0, 0,
+ 15, 3, 4,15, 2,94, 4, 5,33, 4, 5,34, 6, 9,56, 6, 9,57, 5, 5,15,15, 5,55,
+ 5, 8, 9, 4, 8,33, 4, 8,34, 5, 8,12, 5, 8, 8, 5, 8,10, 6,14,79, 0, 0, 0,
+ 0, 0, 0,15, 9,26,15, 9,28,15, 9,29,15, 9,30,15, 9,31, 0, 0, 0, 6,14,78,
+ 5,11,90, 4,11,75, 5,11,89, 5, 8,11, 6,21,37, 5,11,91,15,14,10, 0, 0, 0,
+ 0, 0, 0,15,14,11, 6,21,38, 0, 0, 0, 0, 0, 0, 5,17, 8, 6,29,31, 6,29,32,
+ 4,16,46, 0, 0, 0,15,19,11, 0, 0, 0,15,19,12,15,19,13,15,19,15,15,19,16,
+ 0, 0, 0, 6,38,66, 5,22,60, 5,22,58, 5,22,59, 5,22,57, 4,22,30,15,19,14,
+ 0, 0, 0, 0, 0, 0, 5,29,76, 5,29,71, 5,29,73, 5,29,74, 5,29,72, 5,29,75,
+ /* plane 2, page 6 */
+ 0, 255, /* first, last */
+ 6,48,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,58,93, 5,44, 1, 5,36,58, 7, 1,23,
+ 15,38,61,15,38,62, 5,43,94, 5,43,93, 5,43,92, 7, 1,22,15,45,71, 0, 0, 0,
+ 0, 0, 0,15,51,51, 7,12,37,15,45,70,15,51,50, 0, 0, 0, 4,53,74, 7,12,38,
+ 5,58,83, 0, 0, 0, 0, 0, 0,15,57,51,15,57,52, 5,65,22, 5,65,21, 5,65,23,
+ 15,62,20, 7,30,91, 5,71,50, 5,71,51, 7,50,86, 5,83,18, 0, 0, 0, 4, 1, 9,
+ 0, 0, 0, 6, 1,50, 0, 0, 0,15, 1,10,15, 1,11,15, 1,12,15, 1,14, 6, 1,60,
+ 15, 1,13, 5, 1,51, 6, 2,29, 4, 1,63, 0, 0, 0, 6, 3,62, 6, 3,61, 6, 3,63,
+ 6, 3,64, 0, 0, 0,15, 1,43, 0, 0, 0, 6, 6, 7, 6, 6, 5, 6, 6, 6,15, 3,20,
+ 15, 3,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,38, 6, 9,58,
+ 4, 5,36, 6, 9,59, 6, 9,60, 6, 9,61,15, 5,56,15, 5,57, 0, 0, 0, 6,14,82,
+ 6,14,80, 6,14,81, 6,21,39,15,14,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23, 7,
+ 6,29,34, 6,29,35, 6,29,33,15,19,17,15,19,18,15,19,19, 0, 0, 0, 6,38,67,
+ 6,38,70,15,25,41, 6,38,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,42,
+ 15,38,63,15,38,64,15,38,65,15,45,72, 0, 0, 0, 7,12,39,15,51,52,15,51,53,
+ 15,51,35,15,57,53,15,62,21,15,71,35, 0, 0, 0, 4, 1,14, 5, 1,25, 6, 1,51,
+ 6, 1,52, 6, 2,31, 5, 1,52, 6, 2,30, 0, 0, 0,15, 1,44, 6, 3,69, 6, 3,65,
+ 6, 3,66, 6, 3,67,15, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2,10, 6, 6, 8,
+ 15, 3,22, 0, 0, 0, 0, 0, 0, 6, 9,64, 0, 0, 0, 6, 9,63, 6,14,83, 6,14,84,
+ 0, 0, 0, 6,20,90, 6,21,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,29,36, 6,29,37,
+ 5,22,61, 6,58,94,15,38,66, 7, 1,80, 0, 0, 0, 7,22,91, 5,58,86, 5,71,52,
+ 0, 0, 0, 7,46,30, 0, 0, 0, 6, 1,25, 0, 0, 0, 4, 1,32, 6, 1,53, 5, 1,26,
+ 5, 1,27, 6, 1,54, 4, 1,33,15, 1,15, 6, 1,55, 5, 1,53, 5, 1,54, 4, 1,66,
+ 6, 2,36, 5, 1,55, 6, 2,35, 6, 2,32, 6, 2,37, 0, 0, 0, 0, 0, 0, 4, 2,26,
+ 6, 3,74, 5, 2,14, 5, 2,12, 5, 2,11, 4, 2,27, 4, 2,25, 6, 3,72, 6, 3,71,
+ 5, 2,15, 6, 3,75, 6, 3,73, 5, 2,13, 4, 2,29, 0, 0, 0, 0, 0, 0,15, 2, 2,
+ 15, 2, 3, 4, 2,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3,70, 4, 3,33, 6, 6,11,
+ 4, 3,35, 5, 3,29, 4, 3,34, 5, 3,38, 5, 3,37, 5, 3,35, 5, 3,32, 6, 6, 9,
+ 5, 3,31, 5, 3,34, 5, 3,33, 6, 6,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3,30, 5, 3,36, 6, 9,73,
+ 5, 5,19, 5, 5,21, 4, 5,41, 4, 5,43, 3, 7,60, 6, 9,70, 4, 5,45, 6, 9,68,
+ 6, 9,69, 6, 9,76, 6,14,85, 0, 0, 0, 6, 9,74, 5, 5,16, 5, 5,22, 6, 9,75,
+ 5, 5,18, 6, 9,71, 0, 0, 0, 5, 5,20,15, 5,58,15, 5,59,15, 5,60,15, 5,61,
+ /* plane 2, page 7 */
+ 2, 255, /* first, last */
+ 6, 9,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9,66, 6, 9,65,
+ 0, 0, 0, 5, 5,17, 0, 0, 0, 0, 0, 0, 6, 9,55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 8,39, 5, 8,13, 4, 8,37, 6,15, 4, 6,14,91, 6,15, 2, 4, 8,40, 6,15, 1,
+ 4, 8,36, 4, 8,38, 6,14,88, 6,14,94, 6,15, 3, 6,14,90, 0, 0, 0, 6,14,93,
+ 6,14,92,15, 9,32,15, 9,33,15, 9,34, 0, 0, 0, 6,14,89, 5, 8,14, 0, 0, 0,
+ 6,14,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,21,41, 4,11,80, 4,11,77, 5,12, 5, 5,12, 3, 4,11,79, 4,11,83, 6,21,46,
+ 6,21,50, 5,12, 2, 6,21,51, 4,11,76, 5,12, 6, 6,21,49, 4,11,81, 6,21,48,
+ 6,21,47, 6,21,44, 6,21,43, 4,11,82, 5,12, 4, 6,21,45, 0, 0, 0, 0, 0, 0,
+ 15,14,19, 6,21,52,15,14,14,15,14,15,15,14,16,15,14,18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,14,17, 6,21,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,12, 7, 5,11,93, 5,12, 1, 5,11,94, 0, 0, 0, 4,16,48, 5,17,11, 4,16,49,
+ 5,17,10, 6,29,38, 4,16,54, 4,22,41, 4,16,53, 6,29,41, 0, 0, 0, 6,29,39,
+ 5,22,62, 4,16,47, 5,12, 8, 0, 0, 0, 0, 0, 0,15,19,20,15,19,21,15,19,23,
+ 0, 0, 0, 6,29,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,29,42, 6,29,43, 4,22,35,
+ 5,22,63, 6,38,77, 6,38,73, 4,22,38, 4,22,39, 5,22,64, 5,22,68, 4,22,42,
+ 4,22,36, 4,22,33, 4,22,32, 6,38,75, 6,38,72, 6,38,76, 5,22,65, 5,22,66,
+ 6,38,74,15,25,43,15,25,44,15,25,45,15,25,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,22,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,44,38, 6,38,78, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,22,69, 4,28,25, 6,48,79, 5,29,83,
+ 6,48,77, 4,28,21, 5,29,84, 6,48,78, 5,29,77, 4,28,23, 4,28,22, 5,29,78,
+ 4,28,26, 5,29,79, 6,48,75,15,32,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,48,74,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,48,72, 6,48,80, 6,48,73, 5,29,82, 5,29,81,
+ 0, 0, 0,15,32,44, 5,36,59, 4,34,27, 6,59, 4, 5,36,65, 6,59, 2, 6,59, 1,
+ 4,28,24, 4,34,32, 5,36,66, 5,36,60, 5,36,63, 4,34,29, 4,34,36, 6,59,11,
+ 6,59, 9, 6,59, 8, 5,36,62, 5,44, 2, 6,59, 6, 5,36,61, 6,59,10, 5,36,64,
+ 6,59, 5,15,38,67,15,38,68,15,38,69, 6,59, 3, 0, 0, 0, 0, 0, 0, 6,59, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44, 3, 5,44, 7,
+ 4,41, 4, 5,44, 4, 5,44, 6, 7, 1,28, 7, 1,29, 7, 1,26, 7, 1,30, 7, 1,27,
+ 5,44, 5, 7, 1,24, 0, 0, 0, 7, 2,58, 0, 0, 0, 7, 1,25, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,47,64, 7,12,41, 5,58,87, 7,12,42, 7,12,46, 7,12,45,
+ /* plane 2, page 8 */
+ 0, 255, /* first, last */
+ 7,12,44, 5,51,63, 5,51,65, 5,51,64, 5,51,62, 7,12,40, 7,12,43, 7, 1,31,
+ 15,51,54, 0, 0, 0, 0, 0, 0, 5,56,49, 0, 0, 0, 5,58,90, 4,53,75, 5,58,89,
+ 5,58,88, 0, 0, 0, 7,22,92,15,57,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,53,78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,30,92, 5,65,24, 5,65,25, 7,22,93,15,62,22,
+ 5,65,26, 7,38,15, 7,38,14, 7,38,13, 0, 0, 0, 0, 0, 0, 7,45,32, 7,45,33,
+ 0, 0, 0, 0, 0, 0, 5,79,74, 7,50,87,15,71,36, 0, 0, 0, 5,85,68, 4,75,69,
+ 7,66,13, 7,66,12, 6, 1,26, 5, 1,28, 6, 1,56, 0, 0, 0, 4, 1,67, 5, 1,57,
+ 5, 1,56, 5, 2,17, 0, 0, 0, 5, 2,18,15, 2, 5,15, 2, 6,15, 2, 7,15, 2, 8,
+ 0, 0, 0, 5, 2,19, 6, 6,14, 4, 3,37, 5, 3,39, 0, 0, 0,15, 3,24,15, 3,26,
+ 15, 3,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,13, 4, 3,41, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 5,29, 5, 5,25, 6, 9,77, 5, 5,28, 6, 9,78,15, 5,64,15, 5,65,
+ 15, 5,66,15, 5,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8,16, 4, 8,42,
+ 6,15, 6, 5, 8,17, 5, 8,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,15, 8, 0, 0, 0,
+ 15, 9,35,15, 9,36,15, 9,37, 6,21,53, 6,21,57, 4,11,84, 5,12,13, 5,12, 9,
+ 5,12,11, 5,12,12, 5,12,10, 0, 0, 0,15,14,20,15,14,21, 0, 0, 0, 0, 0, 0,
+ 6,21,54, 6,21,55, 0, 0, 0, 5,17,13, 6,29,46, 6,29,44, 6,29,47, 6,29,48,
+ 6,29,49,15,19,24,15,19,25, 0, 0, 0, 6,29,45, 5,22,73, 5,22,70, 5,22,72,
+ 5,22,75, 5,22,71,15,25,47,15,25,48, 0, 0, 0, 0, 0, 0, 6,38,79, 6,38,80,
+ 0, 0, 0, 0, 0, 0, 6,38,81, 5,29,86, 5,29,85, 4,28,27, 6,48,82, 6,48,81,
+ 15,32,45, 5,29,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,34,38, 5,36,70, 5,36,68, 5,36,69, 5,36,73, 4,34,37, 5,36,72, 6,59,14,
+ 15,38,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,12, 0, 0, 0, 6,59,13,
+ 5,44,11, 5,44, 8, 4,41, 6, 5,44, 9, 5,44,10, 0, 0, 0, 7,12,47, 5,58,92,
+ 15,51,55, 5,58,91, 5,58,93, 7,22,94, 7,23, 2, 0, 0, 0, 0, 0, 0, 7,23, 1,
+ 5,65,28, 7,30,94, 0, 0, 0, 7,31, 1, 5,71,54, 5,71,53, 7,45,34, 5,79,75,
+ 7,59,38, 5,85,69, 4,76,75, 7,70,27, 5, 1,29, 6, 2,39, 6, 2,40, 5, 2,21,
+ 0, 0, 0, 5, 2,20, 5, 2,22,15, 2,10, 6, 6,15, 0, 0, 0, 5, 3,40, 5, 3,41,
+ 4, 5,50, 6, 9,81, 6, 9,80, 0, 0, 0,15, 5,68,15, 5,69, 6,15,10, 4, 8,44,
+ 6,15,11, 6,15,12,15, 9,38, 6,15, 9, 4,11,86, 6,21,60, 6,21,59, 6,21,62,
+ 6,21,63, 6,21,58, 6,21,61, 5,12,15, 0, 0, 0, 0, 0, 0, 4,16,61, 6,29,50,
+ 5,12,14, 5,17,14, 0, 0, 0, 5,17,15, 6,29,51, 4,22,46, 0, 0, 0,15,25,49,
+ 6,48,83, 4,16,59, 5,29,89,15,32,46,15,32,47, 6,59,15, 4,34,39, 5,36,74,
+ /* plane 2, page 9 */
+ 0, 253, /* first, last */
+ 5,36,75,15,38,71, 0, 0, 0,15,45,73, 4,47,69, 7,12,48, 0, 0, 0, 7,12,49,
+ 7,23, 3, 7,23, 4, 5,58,94, 7,45,35, 0, 0, 0, 0, 0, 0, 6, 1,10, 4, 1,34,
+ 6, 2,42, 6, 6,16, 6, 6,19, 5, 3,42, 6, 6,17, 6, 6,18, 0, 0, 0, 4, 8,45,
+ 6,15,15, 6,15,17, 6,15,13, 6,15,14, 6,15,16, 0, 0, 0, 6,29,52, 6,21,64,
+ 15,14,22,15,14,23, 6,21, 4, 6,38,82,15,25,50, 4,28,29, 0, 0, 0, 0, 0, 0,
+ 15,38,72, 0, 0, 0, 7,31, 2, 5,77,18, 6, 1,11,15, 1,17, 5, 2,23, 6, 3,78,
+ 4, 2,35, 6, 3,77, 0, 0, 0, 6, 6,20, 4, 3,42, 6, 6,21,15, 3,28, 0, 0, 0,
+ 6, 9,83, 5, 5,30, 5, 5,31, 0, 0, 0, 4, 8,47, 0, 0, 0, 6,15,20, 5, 8,19,
+ 6,15,19, 5, 8,18, 6,15,18, 6,15,23, 6,15,21,15, 9,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,12,16, 6,21,66, 6,21,65, 5,12,17, 0, 0, 0, 6,29,53,15,19,26,
+ 4,22,47, 6,48,85, 6,38,83, 6,21,67, 0, 0, 0, 0, 0, 0, 5,29,90, 0, 0, 0,
+ 0, 0, 0, 4,34,40, 6,59,17, 6,59,16, 5,44,12, 5,44,13, 5,44,14, 0, 0, 0,
+ 0, 0, 0,15,45,74, 5,51,68, 7,23, 5, 0, 0, 0,15,62,23, 4,63,43, 0, 0, 0,
+ 0, 0, 0, 7,31, 3, 7,45,36, 7,64,73, 7,68,35,15, 1,18, 5, 2,24, 6, 3,79,
+ 5, 3,44, 6, 6,23,15, 3,29,15, 5,70, 6,15,22, 5, 8,20, 6,21,68,15,38,73,
+ 7,45,37, 0, 0, 0, 7,55,48, 6, 1,58, 0, 0, 0, 5, 1,58, 5, 1,59, 0, 0, 0,
+ 6, 2,43, 0, 0, 0, 6, 3,80, 4, 2,36, 0, 0, 0, 4, 2,37, 6, 3,83, 6, 3,82,
+ 5, 2,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2,25, 6, 3,84, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 6,25, 5, 3,45, 6, 6,26, 6, 3,85, 6, 6,27,15, 3,30, 0, 0, 0,
+ 5, 5,32, 6, 9,84, 6, 9,87, 6, 9,88, 6, 9,86,15, 5,71,15, 5,73,15, 5,74,
+ 15, 5,75,15, 5,72, 6, 9,85, 6,21,69, 6,21,70,15,14,24,15,14,25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,16,67, 4,16,65, 4,16,66,15,19,27, 0, 0, 0, 0, 0, 0,
+ 15,25,51,15,25,52, 0, 0, 0, 0, 0, 0, 6,48,88, 6,48,87, 6,48,89, 6,48,91,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,32,48,15,38,74,15,38,75, 0, 0, 0,
+ 5,44,15,15,45,75,15,45,76, 0, 0, 0, 7, 1,32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,23, 6, 0, 0, 0,15,62,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38,16, 7,50,88,
+ 7,64,74, 7,66,14, 0, 0, 0, 6, 2,44, 6, 3,87, 0, 0, 0, 0, 0, 0, 6, 3,86,
+ 6, 3,88, 4, 3,44, 5, 3,47, 5, 3,46, 6, 6,28, 0, 0, 0, 4, 5,53, 4, 5,52,
+ 6, 9,92, 6, 9,91, 6, 9,93, 6, 9,90, 6, 9,94, 6, 9,89,15, 5,76, 0, 0, 0,
+ 6,10, 2, 4, 8,50, 4, 8,49, 5, 8,23,15, 9,40,15, 9,41,15, 9,42,15, 9,43,
+ 0, 0, 0, 0, 0, 0, 6,15,25, 6,21,72, 4,11,89, 5,12,18, 6,21,71, 6,21,74,
+ 6,28,90, 6,21,73, 6,29,55, 6,29,54, 6,21,75, 6,29,56,
+ /* plane 2, page 10 */
+ 0, 255, /* first, last */
+ 6,38,85, 6,38,86, 6,38,87, 5,23,31, 0, 0, 0, 6,48,92, 5,36,77, 6,59,18,
+ 7, 1,33,15,51,56, 0, 0, 0, 7,67,43, 0, 0, 0, 5, 1,30, 4, 1,35,15, 1,20,
+ 6, 1,59, 0, 0, 0, 4, 2,38, 6,10, 4, 6, 3,90, 0, 0, 0, 6, 3,89, 0, 0, 0,
+ 4, 3,46, 6,15,27, 5, 8,24, 6,15,26, 4, 8,51, 6,21,76, 6,15,28, 6,38,88,
+ 5,12,19, 0, 0, 0, 5,29,91, 6,48,93, 0, 0, 0, 5,36,78, 0, 0, 0, 7,31, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1,31, 5, 1,60, 6, 3,91, 6, 2,47,
+ 6, 2,45, 6, 2,48, 5, 1,61, 0, 0, 0, 4, 2,39, 5, 2,27, 6, 3,92, 6, 3,93,
+ 5, 2,31, 5, 2,32, 5, 2,29, 5, 2,30, 0, 0, 0,15, 2,13, 0, 0, 0, 0, 0, 0,
+ 6, 6,30, 5, 3,48, 6, 6,29, 5, 3,49, 6, 5,62, 0, 0, 0, 0, 0, 0,15, 3,31,
+ 0, 0, 0, 0, 0, 0, 6,10, 7, 6,10, 6, 6,10, 9, 6,10, 8, 5, 5,33, 4, 5,56,
+ 0, 0, 0,15, 5,77,15, 5,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10, 5, 5, 8,25,
+ 4, 8,52, 6,15,38, 6,15,33, 6,15,36, 6,15,37, 6,15,32, 6,15,30, 6,15,34,
+ 6,15,35, 0, 0, 0,15, 9,45,15, 9,46, 4, 8,53, 0, 0, 0, 6,15,31, 6,21,83,
+ 6,21,84, 4,11,91, 5,12,20, 4,11,92, 6,21,79, 6,21,77, 6,21,80, 6,21,82,
+ 6,21,81, 6,21,78, 5,12,21,15,14,26,15,14,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,29,64, 6,29,59, 4,16,71, 6,29,63, 6,29,60, 6,29,61,15,19,29, 5,17,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,29,62, 0, 0, 0, 4,16,70, 4,22,50,
+ 6,38,92, 6,38,90, 4,22,51, 6,38,91, 6,38,89, 6,38,93,15,25,53, 6,38,94,
+ 0, 0, 0, 5,29,92, 5,29,93, 6,49, 4, 6,49, 3, 6,48,94,15,32,49, 0, 0, 0,
+ 6,49, 1, 4,28,31, 4,34,41, 6,59,20, 6,59,23, 6,59,19, 6,59,24, 5,36,79,
+ 15,38,77, 0, 0, 0,15,38,78, 0, 0, 0, 6,59,22, 6,59,25, 6,59,27, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,59,26, 6,59,21, 0, 0, 0, 7, 1,35, 4,41, 8, 5,44,16,
+ 7, 1,36, 0, 0, 0, 0, 0, 0, 7, 1,34, 0, 0, 0,15,45,77, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 5,40, 5,51,69, 7,12,51, 7,12,50,15,51,57,15,51,58, 7,27,45,
+ 15,62,25,15,62,26,15,62,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,92,
+ 7,46, 7, 7,50,89, 0, 0, 0, 0, 0, 0, 5,87,52, 0, 0, 0, 7,62,48, 0, 0, 0,
+ 7,69,19, 0, 0, 0, 7,70,19, 5, 1,14, 6, 1,28, 6, 1,29, 0, 0, 0, 6, 1,61,
+ 0, 0, 0, 6, 2,50, 6, 2,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,42, 6, 4, 3,
+ 6, 4, 1, 0, 0, 0,15, 2,14, 0, 0, 0, 4, 2,41, 6, 4, 2, 6, 6,32,15, 3,32,
+ 5, 3,28, 6,10,12, 6,10,11, 6,10,13, 6,10,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,15,39, 6,15,40, 0, 0, 0, 4, 8,54,15, 9,47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,21,86, 6,21,85, 6,22,41, 6,21,14, 0, 0, 0, 0, 0, 0, 5,22,76,
+ /* plane 2, page 11 */
+ 0, 246, /* first, last */
+ 6,39, 2, 6,39, 4, 6,45,66, 0, 0, 0,15,25,54, 6,39, 3, 5,30, 1, 6,49, 5,
+ 5,29,94, 0, 0, 0,15,32,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,28,15,38,79,
+ 6,64,82, 7, 1,37, 0, 0, 0, 5,51,70, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,57,55,
+ 7,43,74, 0, 0, 0, 6, 1,64, 5, 1,32, 6, 1,62, 5, 1,34, 6, 1,66, 6, 1,63,
+ 0, 0, 0, 6, 2,53, 4, 1,72, 5, 1,62, 0, 0, 0, 6, 2,54, 5, 1,63, 6, 2,51,
+ 6, 2,52, 6, 4, 5, 4, 2,43, 6, 4, 4, 5, 2,34, 6, 4, 6, 5, 2,33, 6, 4, 7,
+ 0, 0, 0, 6, 6,36, 6, 6,34, 5, 3,50,15, 3,33,15, 3,34,15, 3,35,15, 3,36,
+ 4, 3,48, 6,10,17, 6,10,15, 6,10,18, 6,10,16,15, 5,79, 0, 0, 0, 6,15,45,
+ 6,15,42, 6,15,44, 6,15,43, 6,15,41,15, 9,49,15, 9,50, 0, 0, 0, 6,18,82,
+ 0, 0, 0, 5, 8,22, 6,21,91, 5,12,22, 6,21,92, 6,21,89, 6,21,87, 6,21,90,
+ 15,14,28,15,14,29,15,14,30,15,14,31, 6,28,71, 6,29,70, 6,29,72, 5,17,18,
+ 5,17,19, 6,29,69, 6,29,67, 6,29,75, 6,29,68, 5,12,23, 6,29,66, 6,29,73,
+ 6,29,74, 6,28,92, 0, 0, 0, 6,29,71, 0, 0, 0, 4,22,52, 5,22,77, 6,39, 7,
+ 6,39, 5,15,19,30,15,25,55,15,25,56,15,25,57,15,25,58, 6,39, 6, 4,28,35,
+ 4,28,34, 6,49, 7, 6,49, 8, 6,49, 6, 4,28,33, 6,39, 8, 6,49,59, 0, 0, 0,
+ 6,49, 9, 0, 0, 0, 0, 0, 0, 6,63, 1, 6,59,30, 0, 0, 0, 6,59,29, 5,36,80,
+ 0, 0, 0, 6,51,91,15,45,53, 5,44,19, 5,44,20,15,38,80, 5,44,18, 7,12,53,
+ 15,51,59, 3,48,25, 5,52,14, 7,12,52, 0, 0, 0, 7,23, 9, 7,23, 8,15,57,56,
+ 4,58,79, 7,38,18, 7,38,17, 4,70,17,15,71,37, 7,55,49, 5,85,70, 7,62,49,
+ 7,62,50, 5, 1,35, 6, 1,68, 4, 1,39, 4, 1,38,15, 1,22, 6, 1,67, 0, 0, 0,
+ 5, 1,65, 6, 2,57, 6, 2,56, 6, 2,62, 6, 2,58, 6, 2,61, 6, 2,55, 6, 2,34,
+ 15, 1,46, 0, 0, 0, 6, 2,60, 5, 2,39, 6, 4,13, 5, 2,37, 6, 4,14, 4, 2,45,
+ 5, 2,38, 4, 2,48, 6, 4,12, 4, 2,47, 4, 2,46, 5, 2,36, 0, 0, 0, 6, 4, 8,
+ 15, 2,15,15, 2,16,15, 2,18,15, 2,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 4,10,15, 2,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 2,19, 0, 0, 0,
+ 5, 2,35, 6, 4, 9, 6, 4,11, 4, 3,54, 6, 6,47, 6, 6,38, 6, 6,45, 6, 6,44,
+ 5, 3,54, 4, 3,58, 4, 3,61, 5, 3,59, 5, 3,52, 6, 6,40, 4, 3,55, 4, 3,50,
+ 4, 3,56, 5, 3,56, 6, 6,41, 5, 3,57, 4, 3,53, 5, 3,53, 6, 6,39, 0, 0, 0,
+ 0, 0, 0, 5, 3,60, 0, 0, 0,15, 3,37,15, 3,38,15, 3,39,15, 3,42,15, 3,43,
+ 15, 3,44, 0, 0, 0, 0, 0, 0,15, 3,40, 6, 6,43, 0, 0, 0, 6, 6,42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,48, 0, 0, 0, 6, 6,37, 5, 3,51,
+ /* plane 2, page 12 */
+ 4, 255, /* first, last */
+ 5, 3,55, 5, 3,58, 0, 0, 0, 0, 0, 0,
+ 4, 5,60, 4, 5,62, 6,10,22, 5, 5,44, 5, 5,36, 4, 5,59, 6,10,20, 5, 5,45,
+ 5, 5,37, 5, 5,39, 4, 5,65, 5, 5,48, 6,10,19, 5, 5,50, 5, 8,39, 6,10,27,
+ 5, 5,40, 5, 5,43, 5, 5,42, 5, 5,49, 5, 5,41, 5, 5,46, 6,10,29, 0, 0, 0,
+ 0, 0, 0, 5, 5,47,15, 5,80,15, 5,82,15, 5,83,15, 5,84,15, 5,85,15, 5,86,
+ 15, 5,87,15, 5,88,15, 5,89,15, 5,90,15, 5,93,15, 5,94,15, 6, 1,15, 6, 2,
+ 15, 6, 3, 0, 0, 0, 5, 5,38, 0, 0, 0, 0, 0, 0, 6,10,21, 5, 5,35, 0, 0, 0,
+ 6,10,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,23,
+ 15, 5,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,26, 0, 0, 0,
+ 5,12,24, 5, 8,38, 5, 8,50, 5, 8,45, 5, 8,28, 5, 8,49, 6,15,52, 6,15,46,
+ 5, 8,31, 4, 8,59, 4, 8,58, 5, 8,47, 5, 8,37, 5, 8,43, 5, 8,42, 5, 8,46,
+ 5, 8,40, 5, 8,41, 5, 8,29, 5, 8,33, 5, 8,44, 4, 5,66, 6,15,57, 6,15,58,
+ 5, 8,51, 6,15,47, 0, 0, 0, 5, 8,26, 6,15,55, 6,15,54, 5, 8,48, 6,15,48,
+ 6,15,56, 6,15,50, 5, 8,32, 5, 8,34, 0, 0, 0,15,11,19, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15, 9,51,15, 9,53,15, 9,54,15, 9,55,15, 9,56,15, 9,57,15, 9,58,
+ 15, 9,59,15, 9,62,15, 9,63,15, 9,64,15, 9,65,15, 9,66,15, 9,67,15, 9,68,
+ 15, 9,70,15, 9,71, 0, 0, 0, 5, 8,35, 5, 8,36, 0, 0, 0, 4, 8,61,15, 9,69,
+ 6,15,53, 0, 0, 0, 0, 0, 0, 6,15,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8,56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 8,27, 5, 8,30, 6,15,49, 0, 0, 0, 6,22, 9, 4,12, 4, 4,12,11,
+ 4,12,12, 4,12, 7, 6,22, 2, 5,12,46, 5,12,33, 5,12,31, 5,12,44, 5,12,29,
+ 5,12,38, 5,12,54, 5,12,41, 4,12,10, 5,12,45, 5,12,52, 5,12,50, 4,12, 2,
+ 6,22, 3, 6,22, 4, 5,12,49, 4,12, 3, 5,12,32, 6,22, 7, 6,22, 8, 5,12,55,
+ 6,22, 6, 5,12,51, 5,12,56, 5,12,39, 5,12,57, 5,12,36, 5,12,53, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,14,32,15,14,33,15,14,35,15,14,36,15,14,40,
+ 15,14,41,15,14,43,15,14,44,15,14,45,15,14,46,15,14,47,15,14,48,15,14,49,
+ 15,14,50,15,14,51,15,14,52, 6,25,62, 0, 0, 0, 0, 0, 0, 6,22, 1, 5,12,34,
+ 5,12,37, 5,12,40, 0, 0, 0, 0, 0, 0, 6,22, 5, 0, 0, 0, 0, 0, 0, 5,12,48,
+ 5,12,43, 5,12,25, 5,12,26, 5,12,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,14,37,
+ /* plane 2, page 13 */
+ 3, 254, /* first, last */
+ 5,12,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,12,47, 5,12,30, 5,12,28, 0, 0, 0, 0, 0, 0, 5,12,58, 5,17,38,
+ 4,16,73, 6,29,87, 6,29,84, 4,16,88, 6,29,79, 4,16,85, 5,17,49, 5,17,41,
+ 5,17,44, 4,16,78, 4,16,89, 5,17,36, 6,29,86, 5,17,22, 5,17,42, 5,17,37,
+ 5,17,46, 5,17,20, 5,17,45, 5,17,34, 5,17,27, 6,29,81, 6,29,85, 6,29,93,
+ 6,29,90, 6,29,94, 5,17,26, 5,17,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,29,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,17,24, 6,29,82, 6,29,91,15,19,31,15,19,32,15,19,33,15,19,34,
+ 15,19,36,15,19,37,15,19,38,15,19,39,15,19,40,15,19,41,15,19,44,15,19,45,
+ 5,17,23, 6,29,83, 5,17,25, 0, 0, 0, 0, 0, 0, 6,29,77, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,17,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,17,40, 0, 0, 0, 6,30, 1, 0, 0, 0, 0, 0, 0, 5,17,50, 0, 0, 0, 6,29,80,
+ 0, 0, 0, 5,17,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,17,21,
+ 5,17,39, 5,17,30, 5,17,35, 5,17,29, 5,17,48, 6,29,89, 3,20,64, 0, 0, 0,
+ 5,17,51, 5,17,47, 6,29,88, 6,29,78, 5,17,31, 5,17,43, 0, 0, 0, 4,22,53,
+ 4,22,65, 0, 0, 0, 6,39,18, 5,23, 4, 6,39,23, 6,39,30, 5,22,87, 6,39,21,
+ 5,22,92, 4,22,54, 5,23, 8, 5,22,79, 5,22,81, 4,22,58, 5,22,88, 4,22,55,
+ 5,23, 9, 5,22,94, 4,22,66, 4,22,59, 5,23, 3, 5,23, 7, 4,22,70, 5,23,16,
+ 0, 0, 0, 4,22,61, 5,23,12, 5,23,14, 6,39,14, 6,39,28, 5,30, 2, 6,39,11,
+ 6,39,15, 6,39,24, 5,23, 2, 6,39,20, 6,39,31, 6,39,26, 4,22,68, 5,23, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,22,83,
+ 15,25,59,15,25,61,15,25,62,15,25,65,15,25,66,15,25,67,15,25,68,15,25,69,
+ 15,25,70,15,25,71,15,25,72,15,25,74,15,25,77,15,25,78,15,25,79,15,25,80,
+ 5,22,84, 0, 0, 0, 0, 0, 0, 5,22,85, 5,22,91, 5,23, 5, 5,23, 1,
+ /* plane 2, page 14 */
+ 0, 255, /* first, last */
+ 6,39,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,75, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,60,15,25,63, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,73, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,76, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,23,11, 5,23,15, 0, 0, 0,
+ 6,39,29, 5,23,13, 5,23,10, 5,22,93, 0, 0, 0, 6,39,22, 6,49,25, 5,30, 3,
+ 4,28,41, 5,30, 7, 4,28,46, 5,22,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,49,33,
+ 4,28,40, 4,28,36, 6,59,34, 5,30,13, 6,49,19, 6,49,21, 5,30,10, 5,30,24,
+ 6,49,26, 6,49,16, 5,30,14, 5,30, 4, 5,30,21, 5,30,31, 6,49,31, 6,49,23,
+ 5,30,20, 5,30,23, 4,28,45, 5,30,26, 4,28,37, 5,30,19, 5,30,12, 4,28,47,
+ 5,30,15, 4,28,49, 5,30,17, 5,30,18, 6,49,27, 0, 0, 0, 6,49,32, 6,49,10,
+ 6,49,30, 6,49,29, 5,30,27, 6,49,24, 5,30, 8, 5,30,16, 5,30,11, 6,49,12,
+ 6,49,36, 6,49,14, 6,49,11, 6,49,13, 0, 0, 0, 0, 0, 0,15,39, 6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,30,30,
+ 6,49,17,15,32,54,15,32,55,15,32,56,15,32,57,15,32,58,15,32,59,15,32,60,
+ 15,32,61,15,32,62,15,32,63,15,32,64,15,32,65,15,32,67, 6,49,15, 6,49,20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,49,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,32,52, 0, 0, 0, 6,49,34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,30,28, 5,30,22, 5,30, 5, 5,30, 9,
+ 5,30, 6,15,32,68, 0, 0, 0, 0, 0, 0, 6,59,38, 6,59,32, 6,59,43, 4,34,45,
+ 6,59,47, 6,59,37, 6,59,49, 6,59,48, 4,34,46, 6,59,44, 5,36,83, 5,36,87,
+ 5,36,85, 5,36,92, 6,59,35, 6,59,39, 4,34,44, 4,34,52, 5,36,91, 4,34,48,
+ 5,36,86, 6,59,33, 5,36,81, 5,36,82, 5,36,89, 6,59,50, 6,59,31, 6,59,41,
+ 6,59,42, 5,36,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,81,15,38,82,
+ /* plane 2, page 15 */
+ 0, 255, /* first, last */
+ 15,38,83,15,38,84,15,38,86,15,38,87,15,38,88,15,38,89,15,38,90,15,38,91,
+ 15,38,92,15,38,94,15,39, 1,15,39, 2,15,39, 3,15,39, 7,15,39, 8,15,39, 9,
+ 15,39,10,15,39,11,15,39,12,15,39,13,15,39, 4, 6,59,40,15,38,85, 0, 0, 0,
+ 5,36,84, 0, 0, 0, 5,36,90, 0, 0, 0, 6,59,46, 0, 0, 0, 5,37, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,38,93, 6,59,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,39, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,21, 5,36,93, 0, 0, 0, 0, 0, 0,
+ 15,38,76, 0, 0, 0, 7, 1,49, 5,44,27, 7, 1,53, 7, 1,50, 5,44,25, 7, 1,56,
+ 7, 1,42, 5,44,32, 5,44,38, 5,44,29, 7, 1,47, 5,44,30, 7, 1,55, 7, 1,48,
+ 5,44,22, 7, 1,43, 5,44,31, 7, 1,54, 7, 1,57, 5,44,33, 4,41,15, 0, 0, 0,
+ 7, 1,59, 5,44,26, 7, 1,40, 5,44,24, 5,59, 7, 7, 1,58, 4,41,11, 7, 1,52,
+ 5,37, 3, 7, 1,51, 7, 1,41, 7, 1,39, 7, 1,66, 7, 1,60,15,45,90, 0, 0, 0,
+ 7, 1,62, 5,44,34, 7, 1,65, 7,12,65, 5,44,23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,41,18, 5,44,39,
+ 15,45,79,15,45,80,15,45,81,15,45,82,15,45,83,15,45,84,15,45,85,15,45,86,
+ 15,45,88,15,45,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,36, 7, 1,63, 7, 6,11,
+ 0, 0, 0, 0, 0, 0, 7, 1,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1,45,
+ 7, 1,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,28, 5,44,35, 7,12,74,
+ 4,47,78, 5,51,84, 7,12,60, 5,51,82, 7,12,72, 4,47,82, 5,51,74, 5,51,88,
+ 7,12,64, 4,47,72, 4,47,83, 4,47,70, 5,51,81, 4,47,80, 5,51,79, 5,51,72,
+ 7,12,75, 7,12,59, 7,12,68, 5,51,78, 7,12,63, 5,51,76, 5,51,71, 5,51,85,
+ 5,51,80, 5,51,83, 7,12,57, 5,51,75, 5,51,73, 7,12,71, 7,12,56, 7,12,55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,45,87, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,47,73, 4,47,84, 5,51,87, 7,12,70,15,51,60,15,51,62,
+ /* plane 2, page 16 */
+ 0, 247, /* first, last */
+ 15,51,63,15,51,64,15,51,65,15,51,66,15,51,67,15,51,68,15,51,69,15,51,71,
+ 15,51,72,15,51,73,15,51,74,15,51,75,15,51,76,15,51,77,15,51,78,15,51,79,
+ 7,12,62, 0, 0, 0, 7,12,61, 7,12,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,12,73, 5,51,77,15,53,84, 5,51,86, 4,53,90, 0, 0, 0, 5,59, 6,
+ 0, 0, 0, 5,59, 1, 7,23,13, 7,23,10, 7,23,20, 7,23,21, 5,59, 3, 5,59,11,
+ 4,53,81, 4,53,86, 0, 0, 0, 5,59, 8, 4,53,87, 7,23,11, 5,59, 9, 4,53,89,
+ 7,23,17, 7,23,15, 7,23,14, 5,59, 4, 0, 0, 0, 4,53,85, 7,23,18, 7,23,25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,57,57,
+ 15,57,58,15,57,62,15,57,63,15,57,64,15,57,65,15,57,66, 0, 0, 0, 0, 0, 0,
+ 7,23,24, 7,23,16, 0, 0, 0, 7,23,22, 7,23,19, 7,23,12, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,59,10, 5,59, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,58,84,
+ 7,31, 9, 7,31,15, 4,58,83, 5,65,30, 7,31,11, 4,58,81, 4,58,86, 5,65,38,
+ 4,58,87, 5,71,56, 5,65,29, 5,65,36, 5,65,35, 4,58,88, 7,31,10, 4,58,85,
+ 4,58,89, 4,58,82, 7,31,14, 5,65,33, 7,31, 7, 7,31,13, 7,31, 8, 7,31, 6,
+ 7,31,12, 5,65,34, 0, 0, 0, 0, 0, 0,15,57,59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,31, 5,15,62,28,
+ 15,62,29,15,62,30,15,62,31,15,62,32,15,62,35,15,62,36,15,62,37, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,31, 0, 0, 0,15,62,42,
+ 7,38,20, 4,63,46, 5,59, 5, 7,38,27, 7,38,25, 7,38,23, 5,71,58, 5,71,59,
+ 4,63,48, 5,71,55, 7,38,28, 7,38,26, 7,38,19, 7,38,21, 7,38,24, 4,63,47,
+ 0, 0, 0, 0, 0, 0,15,62,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,71,60,
+ /* plane 2, page 17 */
+ 2, 255, /* first, last */
+ 15,66, 2,15,66, 3,15,66, 4,15,66, 5,15,66, 6, 0, 0, 0,
+ 7,38,22, 7,39,78, 7,38,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,75,84, 5,75,85, 5,75,79, 5,75,81, 5,75,80, 7,45,39, 7,45,41,
+ 7,45,43, 7,45,40, 7,45,38, 7,45,42,15,68,93,15,68,94,15,69, 1, 0, 0, 0,
+ 7,45,44, 0, 0, 0, 0, 0, 0, 5,75,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,50,91, 5,79,81, 5,79,79, 4,70,21, 5,79,78, 7,50,90, 5,79,77,
+ 7,50,94, 5,79,80, 7,50,93, 4,70,19, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,39,
+ 15,71,40, 5,79,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,50,92, 0, 0, 0, 0, 0, 0, 7,55,57,
+ 7,55,58, 5,83,19, 7,55,53, 0, 0, 0, 7,55,54, 7,55,55, 7,55,52, 7,55,50,
+ 0, 0, 0, 7,55,51, 0, 0, 0,15,73,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,72,68, 7,55,56, 0, 0, 0,
+ 7,59,41, 7,59,42,15,74,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,59,40, 0, 0, 0,
+ 7,59,39, 5,87,53, 5,87,54, 4,75,70, 7,62,51, 7,62,53, 7,62,52, 7,62,54,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,35, 0, 0, 0, 5,85,71, 5,89, 3, 0, 0, 0,
+ 0, 0, 0, 4,76,77,15,76, 2,15,76, 3, 0, 0, 0, 0, 0, 0, 7,64,75, 7,66,18,
+ 7,66,17, 7,66,20, 7,66,16, 7,66,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,76,89,15,76,90, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 1,69, 6, 1,70,15, 1,23, 4, 1,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4,18,
+ 6, 4,16, 5, 2,41, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 2,21, 0, 0, 0, 0, 0, 0,
+ 6, 4,17, 0, 0, 0, 6, 4,15, 5, 2,40, 6, 6,52, 6,15,60, 6,10,30, 6, 6,56,
+ 6, 6,54,15, 3,47,15, 3,49, 6, 6,55, 6, 6,57, 0, 0, 0, 6, 6,60, 6, 6,58,
+ 0, 0, 0, 6, 6,49, 0, 0, 0, 6, 6,53, 6, 6,50, 0, 0, 0, 6, 6,51, 6, 6,59,
+ 5, 5,53, 6,10,35, 6,10,32, 6,10,33, 6,10,34, 6,13,20, 6,10,31, 0, 0, 0,
+ 15, 6, 4, 5, 5,52, 5, 8,52, 5, 8,54, 6,15,64, 6,15,63, 5, 8,53, 6,15,59,
+ 6,15,62, 0, 0, 0, 0, 0, 0, 6,15,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,12,60, 6,22,13, 6,22,10, 6,22,12, 5,12,59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,22,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,12,61, 5,17,54, 6,30, 5, 5,17,55, 6,30, 4, 6,30, 3, 6,30, 2, 5,17,52,
+ 0, 0, 0, 6,30, 6, 0, 0, 0, 0, 0, 0, 5,23,19, 6,39,32, 6,39,33, 5,23,17,
+ /* plane 2, page 18 */
+ 0, 248, /* first, last */
+ 5,17,53, 0, 0, 0,15,25,82,15,25,83,15,25,84, 0, 0, 0, 0, 0, 0, 6,39,34,
+ 0, 0, 0, 5,23,18, 5,30,32, 6,49,37, 5,30,33, 6,49,39, 6,49,40, 5,30,34,
+ 0, 0, 0, 6,49,38, 0, 0, 0, 0, 0, 0,15,32,69, 6,59,52, 6,59,56, 5,37, 4,
+ 6,59,53, 6,59,58, 6,59,54,15,39,14,15,39,15,15,39,16, 0, 0, 0, 6,59,55,
+ 0, 0, 0, 0, 0, 0, 7, 1,69, 7, 1,70, 7, 1,68,15,45,91, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,47,85, 0, 0, 0,15,51,83, 7,23,28, 7,23,26, 0, 0, 0,
+ 0, 0, 0, 7,23,27, 0, 0, 0, 4,63,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,45,
+ 7,51, 2, 7,51, 1, 0, 0, 0, 0, 0, 0, 4, 1,40, 0, 0, 0, 5, 1,36, 6, 2,64,
+ 0, 0, 0,15, 1,49,15, 1,50, 0, 0, 0, 6, 2,65, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 4,21, 0, 0, 0,15, 2,22,15, 2,23, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 4,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6,74, 4, 3,64, 6, 6,70, 6, 6,66, 0, 0, 0, 6, 6,62, 0, 0, 0, 6, 6,73,
+ 6, 6,61, 6, 6,69, 6, 6,71,15, 3,51,15, 3,52,15, 3,54,15, 3,56,15, 3,58,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 6,67, 6, 6,72, 6, 6,68, 0, 0, 0, 6, 6,65, 6, 6,63, 5, 3,62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 3,57, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 3,61, 5, 3,63, 5, 3,64, 5, 3,65, 4, 5,74, 6,10,47, 6,10,39, 6,10,44,
+ 6,10,38, 4, 5,71, 6,10,42, 4, 5,76, 6,10,40, 5, 5,54, 6,10,49, 6, 6,33,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,41,15, 6, 6,15, 6, 7,15, 6, 8,15, 6, 9,
+ 15, 6,10,15, 6,16,15, 6,17,15, 6,12,15, 6,11, 0, 0, 0, 4, 5,75, 0, 0, 0,
+ 15, 6,15,15, 6,14, 0, 0, 0, 6,10,48, 6,10,43, 6,10,45, 6,10,46,15, 6,18,
+ 15, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,37, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,36, 5, 5,55, 5, 8,59, 6,15,66,
+ 5, 8,55, 6,15,68, 6,15,65, 5, 8,56, 4, 8,63, 6,15,75, 6,15,67, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 9,90,15, 9,72,15, 9,73,15, 9,75,
+ 15, 9,76,15, 9,77,15, 9,78,15, 9,79,15, 9,80,15, 9,82,15, 9,83,15, 9,85,
+ 15, 9,86,15, 9,87,15, 9,88,15, 9,89,15, 9,91,15, 9,92,15, 9,93, 0, 0, 0,
+ 6,15,74, 0, 0, 0, 0, 0, 0, 6,15,76, 6,20,17, 6,15,71, 6,15,72, 0, 0, 0,
+ 6,15,70, 0, 0, 0, 0, 0, 0,15, 9,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8,61,
+ 5, 8,58, 5, 8,62, 5, 8,60, 5, 8,57, 5,12,62, 4,12,18, 6,22,20, 4,12,16,
+ 4,12,20, 6,22,18, 6,22,28, 6,22,22, 6,22,29, 6,22,30, 6,22,17, 6,22,14,
+ 6,22,26,
+ /* plane 2, page 19 */
+ 1, 255, /* first, last */
+ 6,22,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,22,32,15,14,53,
+ 15,14,54,15,14,55,15,14,56,15,14,57,15,14,58,15,14,59,15,14,62,15,14,63,
+ 15,14,64, 0, 0, 0, 6,22,16, 6,22,31, 0, 0, 0, 6,22,23, 6,22,24, 6,22,25,
+ 5,12,64, 6,22,27,15,14,61, 0, 0, 0,15,14,65, 0, 0, 0, 0, 0, 0, 6,22,19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,12,63, 5,12,66, 4,16,93, 6,30, 7,
+ 0, 0, 0, 4,16,92, 5,17,61, 6,30,20, 6,30,13, 5,17,59, 6,30,10, 5,12,65,
+ 6,30,19, 6,30,16, 5,17,58, 4,17, 2, 4,17, 3, 0, 0, 0,15,19,47,15,19,59,
+ 6,30,14, 6,30,15, 0, 0, 0,15,19,46,15,19,48,15,19,49,15,19,50,15,19,51,
+ 15,19,52,15,19,53,15,19,54,15,19,56,15,19,57,15,19,58,15,19,62,15,19,63,
+ 15,19,64,15,19,65, 5,17,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,30,17,
+ 0, 0, 0, 6,30,21, 0, 0, 0, 4,16,94, 6,30, 8, 6,30, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,17,56, 5,17,57, 0, 0, 0, 0, 0, 0, 3,26,47, 6,49,46, 4,22,82, 6,39,39,
+ 4,22,74, 6,39,37, 4,22,80, 4,22,76, 6,39,43, 6,39,48, 4,22,85, 6,39,36,
+ 6,39,38, 6,39,45, 5,23,20, 6,30,18, 6,39,47, 4,28,58, 5,23,25, 4,22,83,
+ 0, 0, 0, 0, 0, 0, 6,47,77, 5,23,24,15,25,86,15,25,88,15,25,89,15,25,90,
+ 15,25,91,15,25,92,15,26, 1,15,26, 2,15,26, 3,15,26, 4,15,26, 5,15,26, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,49, 0, 0, 0,
+ 6,39,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,41, 4,22,84, 6,39,44,
+ 0, 0, 0, 0, 0, 0,15,25,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,23,23,
+ 5,23,26, 6,39,40, 5,23,21, 5,23,22, 5,23,27, 0, 0, 0, 5,30,38, 6,49,54,
+ 6,49,43, 6,49,53, 0, 0, 0, 5,30,45, 4,28,52, 6,59,66, 6,49,50, 5,30,44,
+ 6,49,49, 5,30,36, 5,30,43, 5,30,35, 6,49,52, 6,49,48, 5,30,41, 5,30,42,
+ 4,28,53, 5,30,39, 6,49,41, 6,49,44, 0, 0, 0,15,25,87, 0, 0, 0, 6,49,51,
+ 6,49,45,15,32,70,15,32,71,15,32,72,15,32,74,15,32,75,15,32,76,15,32,77,
+ 15,32,78,15,32,79,15,32,80,15,32,81,15,32,82,15,32,83, 0, 0, 0, 6,49,47,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,30,46, 5,30,40, 5,30,37, 0, 0, 0, 5,37, 9, 5,37, 8, 5,37, 7,
+ 6,59,60, 4,34,60, 6,59,68, 6,59,70, 6,59,65, 5,37,10, 6,59,64, 5,37, 6,
+ 6,59,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,39,18,
+ /* plane 2, page 20 */
+ 0, 255, /* first, last */
+ 15,39,19,15,39,20,15,39,21,15,39,22,15,39,23,15,39,25,15,39,26,15,39,27,
+ 15,39,28, 6,59,61,15,39,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,75, 0, 0, 0,
+ 6,59,67, 6,59,51, 0, 0, 0,15,39,17, 4,34,58, 6,59,69, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,62, 0, 0, 0, 5,37, 5, 5,37,11, 7, 1,82,
+ 4,41,20, 4,41,21, 7, 1,79, 4,41,22, 5,44,43, 5,44,44, 7, 1,75, 0, 0, 0,
+ 7, 1,88, 4,41,23, 7, 1,87, 7, 1,84, 0, 0, 0,15,46, 1, 0, 0, 0, 0, 0, 0,
+ 5,44,45, 5,44,47, 7, 1,71, 7, 1,85,15,45,92,15,45,93,15,46, 6,15,46, 7,
+ 15,46, 8,15,46, 9,15,46,10,15,46,11,15,46,13, 0, 0, 0, 7, 1,76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7, 1,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1,78,
+ 5,44,81, 7, 1,83, 7, 1,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1,73,
+ 0, 0, 0,15,45,94,15,46, 4, 0, 0, 0,15,46, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,44,46, 5,44,42, 5,44,40, 7, 1,72, 5,44,41, 0, 0, 0, 7,12,79, 7,12,81,
+ 7,12,76, 4,47,87, 4,47,90, 4,47,89, 7,12,77, 0, 0, 0, 7,12,80, 0, 0, 0,
+ 15,46,12, 0, 0, 0, 0, 0, 0,15,51,84,15,51,86,15,51,88, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,51,90, 7,12,82,
+ 5,51,91, 5,51,89, 7,20,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,12,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,12,78,15,51,87,
+ 4,47,86, 7,23,35, 4,53,93, 7,23,29, 5,59,14, 7,23,31, 7,23,36, 0, 0, 0,
+ 7,23,34, 0, 0, 0, 7,23,37, 5,59,12, 0, 0, 0, 0, 0, 0, 7,12,84, 0, 0, 0,
+ 0, 0, 0,15,57,68,15,57,69,15,57,70,15,57,71,15,57,72,15,57,73,15,57,74,
+ 15,57,75, 7,30,76, 0, 0, 0, 7,23,32, 7,23,33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,53,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,59,15,
+ 7,31,20, 5,65,39, 7,23,30, 5,65,41, 7,31,19,15,62,39, 0, 0, 0,15,62,40,
+ 15,62,41,15,62,43,15,62,45,15,62,46, 7,31,17, 7,31,18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,59,16, 5,65,40, 0, 0, 0,15,66, 8, 5,65,42, 0, 0, 0, 0, 0, 0,
+ 7,38,34, 7,38,31, 5,71,61, 7,38,39, 7,38,33,15,62,44, 0, 0, 0,15,66, 7,
+ 0, 0, 0, 7,38,35, 7,38,38, 7,42,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38,32, 7,31,21, 0, 0, 0, 4,67,19,15,69, 2,
+ 0, 0, 0,15,69, 3,15,69, 4,15,69, 5, 7,45,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,75,87, 7,51, 8, 4,70,22, 7,51, 4, 7,51, 3, 7,51, 7, 7,51, 5, 0, 0, 0,
+ 5,79,84,15,71,41,15,71,42,15,71,44, 7,51, 6,15,71,43, 0, 0, 0, 5,79,82,
+ /* plane 2, page 21 */
+ 1, 255, /* first, last */
+ 5,79,83, 7,55,59, 0, 0, 0,15,73,29, 0, 0, 0, 0, 0, 0, 5,83,20,
+ 7,55,61, 5,83,21, 7,59,43, 7,55,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,87,55, 0, 0, 0, 5,91,63,
+ 7,69,58, 7,70,34, 7,70,47, 6, 2,66, 0, 0, 0, 6,15,77, 6, 6,75, 6,10,50,
+ 15, 9,94,15,10, 1, 5,12,68, 0, 0, 0, 6,22,34, 6,15,78, 6,22,33,15,14,66,
+ 5,12,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,30,22,15,19,66, 0, 0, 0, 6,39,50,
+ 6,49,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,49,56, 6,59,74, 6,68,90,
+ 0, 0, 0, 6,59,72,15,39,29, 6,59,73, 7, 1,90, 7, 1,89, 7,12,85, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,31,22, 7,35,31, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,62,47, 7,31,23, 7,38,40, 7,38,41, 7,40,27, 0, 0, 0,
+ 0, 0, 0, 7,55,62, 5, 1,15, 6, 2,67, 0, 0, 0, 6, 4,23, 6, 4,22, 0, 0, 0,
+ 6, 6,76,15, 3,60, 6,22,35, 6,30,23, 6,30,24, 6,49,58, 6, 4,25, 6, 4,24,
+ 5, 3,68, 5, 3,67, 4, 5,79, 6,10,51,15, 6,20, 0, 0, 0,15,14,67, 5,17,62,
+ 6,30,25, 6,30,28, 5,12,69, 6,30,27, 6,30,26, 0, 0, 0, 5,30,47, 6,49,60,
+ 0, 0, 0,15,32,84, 6,59,76,15,39,30, 6,59,77, 0, 0, 0, 5,44,48,15,46,15,
+ 15,51,89, 7,12,86, 7,12,87, 7,23,38, 7,38,42, 7,31,26, 7,31,24, 7,31,25,
+ 7,38,43, 7,45,47, 0, 0, 0, 0, 0, 0, 6, 2,68, 0, 0, 0, 6, 2,69, 0, 0, 0,
+ 6, 4,26, 0, 0, 0, 6, 6,78, 6, 6,77, 0, 0, 0, 6,10,52, 0, 0, 0,15, 5,34,
+ 0, 0, 0, 5, 8,63, 5,12,72, 4,12,21, 5,12,71, 6,22,38, 0, 0, 0, 6,22,37,
+ 15,14,68,15,14,69, 6,22,39, 0, 0, 0, 5,12,73, 4,17, 4, 5,17,65, 6,30,29,
+ 0, 0, 0, 0, 0, 0, 5,17,63, 5,17,64, 5,17,66,15,19,67, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,39,52, 5,23,30, 5,23,34, 5,23,32, 5,23,33,15,26, 7, 5,30,48,
+ 6,49,61, 0, 0, 0, 5,30,50, 5,30,49, 6,49,63, 0, 0, 0, 4,34,65, 6,59,79,
+ 6,59,80, 6,59,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,37,12, 5,37,14, 7, 1,91,
+ 0, 0, 0, 5,44,49, 0, 0, 0, 7,31,27, 0, 0, 0, 0, 0, 0, 5,59,17, 0, 0, 0,
+ 5,59,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38,44, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 1,71, 6, 1,72,15, 1,24, 6, 2,70, 0, 0, 0, 0, 0, 0,
+ 15, 1,51,15, 1,52, 0, 0, 0, 0, 0, 0, 5, 1,86, 6, 4,28, 4, 2,52, 6, 4,31,
+ 6, 4,32, 6, 4,30, 6, 4,29,15, 1,75, 0, 0, 0, 4, 3,67, 4, 3,68, 0, 0, 0,
+ 4, 3,70,15, 3,61,15, 3,62,15, 3,63,15, 3,64,15, 3,65,15, 3,66,15, 3,67,
+ 6, 6,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,79, 0, 0, 0, 0, 0, 0, 4, 5,86,
+ 5, 5,58, 4, 5,84, 6,10,53, 6,10,54, 4, 8,67, 6,10,60, 6,10,56, 6,10,57,
+ /* plane 2, page 22 */
+ 0, 254, /* first, last */
+ 15, 6,22,15, 6,23, 6,10,58, 0, 0, 0, 6,10,59, 6,10,61, 4, 5,89, 0, 0, 0,
+ 0, 0, 0, 6,10,55, 0, 0, 0, 6, 9,25, 4, 8,68, 4, 8,66, 5, 8,65, 5, 8,66,
+ 5, 8,64, 0, 0, 0,15,10, 3, 0, 0, 0,15,10, 4,15,10, 5,15,10, 6,15,10, 8,
+ 15,10, 9,15,10, 7,15,10, 2, 0, 0, 0, 0, 0, 0, 5,12,76, 0, 0, 0, 6,22,40,
+ 6,22,43, 0, 0, 0, 5,12,74, 5,12,77,15,14,71,15,14,72,15,14,73, 0, 0, 0,
+ 0, 0, 0, 6,22,42, 0, 0, 0, 4,12,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,12,75, 0, 0, 0, 5,17,68,15,14,70, 4,12,22, 6,30,33, 6,30,36, 3,20,94,
+ 6,30,30, 6,30,35, 6,30,32, 6,30,37, 6,30,31,15,19,68, 0, 0, 0,15,19,69,
+ 0, 0, 0, 4,17, 7, 0, 0, 0, 0, 0, 0, 5,17,67, 0, 0, 0, 0, 0, 0, 4,28,62,
+ 6,39,56, 6,39,59, 6,39,61, 0, 0, 0, 6,39,58,15,26, 8, 6,39,53, 6,39,60,
+ 5,23,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,57, 4,22,90, 4,22,88,
+ 5,23,36, 0, 0, 0, 6,39,55, 0, 0, 0, 6,49,64, 6,49,65, 0, 0, 0, 0, 0, 0,
+ 4,28,61, 0, 0, 0,15,32,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,30,51, 5,30,52, 5,30,53, 6,59,82, 4,34,67, 5,37,15, 4,34,66,15,39,31,
+ 15,39,32,15,39,33, 6,59,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,37,16, 4,41,24,
+ 7, 2, 2, 7, 1,92, 7, 2, 1, 7,12,92, 7, 1,94, 5,44,51,15,46,17,15,46,18,
+ 7, 1,93, 4,34,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,50, 7,12,93, 5,51,92,
+ 7,12,88, 7,12,89, 4,54, 1,15,51,90, 7,12,90, 0, 0, 0, 0, 0, 0, 7,23,40,
+ 7,23,39, 5,59,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,54,14, 4,58,91,
+ 15,66, 9, 0, 0, 0, 0, 0, 0, 5,75,88, 7,51, 9, 0, 0, 0,15,73,30, 0, 0, 0,
+ 5,85,72, 0, 0, 0, 0, 0, 0,15,75,36, 7,62,56,15,76,63, 0, 0, 0, 0, 0, 0,
+ 5, 1,66, 0, 0, 0,15, 1,53,15, 1,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4,33,
+ 4, 2,56, 6, 4,34,15, 2,25,15, 2,26,15, 2,27,15, 2,28, 0, 0, 0, 0, 0, 0,
+ 4, 2,55, 5, 2,43, 6, 4,35, 5, 2,42, 6, 6,84, 4, 3,72, 4, 3,75,15, 3,68,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 3,70,15, 3,72,15, 3,73,15, 3,75,15, 3,76,
+ 15, 3,77,15, 3,78,15, 3,79,15, 3,69, 0, 0, 0, 6, 6,82, 6, 6,83, 0, 0, 0,
+ 6, 6,85, 0, 0, 0, 6, 6,81,15, 3,74, 0, 0, 0,15, 3,71, 5, 3,70, 5, 3,71,
+ 5, 3,69, 4, 5,92, 6,10,65, 6,10,64, 5, 5,64, 4, 5,90, 5, 5,62, 4, 5,93,
+ 5, 5,59, 5, 5,60, 4, 5,94, 0, 0, 0, 0, 0, 0,15, 6,26, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15, 6,27,15, 6,30,15, 6,31,15, 6,32,15, 6,33,15, 6,34,15, 6,35,
+ 15, 6,37,15, 6,38,15, 6,39,15, 6,40,15, 6,41, 0, 0, 0, 0, 0, 0, 6,10,63,
+ 0, 0, 0, 6,10,62,15, 6,36,15, 6,28,15, 6,29, 5, 5,66, 5, 5,63,
+ /* plane 2, page 23 */
+ 0, 255, /* first, last */
+ 5, 5,67, 5, 5,65, 4, 8,72, 5, 8,68, 6,15,86, 6,15,88, 6,15,89, 4, 8,69,
+ 4, 8,75, 5, 8,70, 4, 8,70, 5, 8,67, 6,15,80, 6,15,91, 6,15,84, 5, 8,75,
+ 0, 0, 0, 6,15,94,15,10,13,15,10,14,15,10,15,15,10,16,15,10,17,15,10,18,
+ 15,10,19,15,10,20, 0, 0, 0, 6,15,83, 6,15,87, 4, 8,76, 0, 0, 0, 6,15,85,
+ 6,15,90, 6,15,79, 0, 0, 0, 6,15,93, 0, 0, 0, 5, 8,73, 4, 8,74, 5, 8,74,
+ 5, 8,71, 6,15,81, 6,15,92, 5, 8,69, 5, 8,72, 6,15,82, 3,16,51, 5,12,80,
+ 6,22,47, 5,12,82, 5,12,85, 5,12,79, 6,22,53, 5,12,78, 6,22,54, 0, 0, 0,
+ 6,22,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,22,49,15,14,76,15,14,78,
+ 15,14,80,15,14,81,15,14,83,15,14,84,15,14,85,15,14,86,15,14,87,15,14,89,
+ 0, 0, 0, 0, 0, 0, 6,22,52, 0, 0, 0, 6,22,46, 5,12,81, 0, 0, 0, 6,22,51,
+ 0, 0, 0, 6,22,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,14,79,
+ 15,14,82, 5,12,87, 5,12,84, 5,12,83, 5,12,86, 5,12,88, 6,30,44, 6,30,50,
+ 6,30,38, 6,30,39, 5,17,74, 6,30,40, 6,30,41, 6,30,47, 5,17,73, 5,17,77,
+ 6,30,45, 4,17,11, 6,30,46, 5,17,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,30,51, 0, 0, 0, 0, 0, 0,15,19,72,15,19,73,15,19,74,
+ 15,19,75,15,19,76,15,19,77,15,19,78,15,19,79,15,19,81,15,19,82,15,19,84,
+ 15,19,85,15,19,86,15,19,87,15,19,88,15,19,89,15,19,90,15,19,91,15,19,92,
+ 15,19,93,15,19,94,15,20, 1,15,20, 2,15,20, 3, 0, 0, 0,15,19,80, 0, 0, 0,
+ 6,30,49, 4,17,10, 0, 0, 0, 6,30,43, 6,30,42, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,17,70, 5,17,71, 5,17,72, 5,17,69, 4,22,91, 6,39,66, 4,22,92, 5,23,58,
+ 6,39,63, 4,23, 1, 5,23,40, 5,23,57, 6,39,68, 0, 0, 0, 6,39,70, 5,23,47,
+ 6,39,69, 6,39,64, 5,23,48, 5,23,41, 5,23,55, 5,23,52, 5,23,39, 5,23,43,
+ 15,26, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,26,11,15,26,12,
+ 15,26,13,15,26,14,15,26,15,15,26,16,15,26,18,15,26,19,15,26,20,15,26,22,
+ 15,26,23,15,26,24,15,26,25,15,26,26,15,26,30,15,26,31,15,26,33,15,26,34,
+ 15,26,35,15,26,36,15,26,37, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,26,27, 0, 0, 0,
+ 0, 0, 0, 5,23,54, 0, 0, 0, 0, 0, 0, 6,39,67, 5,23,56, 6,39,62, 0, 0, 0,
+ 0, 0, 0,15,26,29,15,26,32,15,26,17,15,26,10, 5,23,37, 5,30,54, 5,23,51,
+ 5,23,44, 5,23,50, 5,23,49, 5,23,42, 5,23,45, 5,23,53, 6,39,71,15,19,71,
+ 5,30,63, 5,30,58, 5,30,61, 5,30,55, 4,28,69, 5,30,57, 6,49,67, 4,28,66,
+ 4,28,64, 6,49,71, 6,49,69, 6,59,92, 5,30,60, 0, 0, 0, 0, 0, 0, 5,30,59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,49,70,15,32,88,15,32,89,
+ /* plane 2, page 24 */
+ 0, 255, /* first, last */
+ 15,32,90,15,32,92,15,32,93,15,32,94,15,33, 2,15,33, 3, 0, 0, 0, 0, 0, 0,
+ 6,49,66, 0, 0, 0, 0, 0, 0, 6,49,68, 0, 0, 0, 0, 0, 0,15,32,87, 0, 0, 0,
+ 6,49,72, 5,30,56, 5,30,62, 5,30,64, 6,49,74,15,33, 1, 0, 0, 0, 4,34,80,
+ 0, 0, 0, 5,37,18, 4,34,74, 6,59,91, 4,34,81, 6,59,83, 5,37,20, 7, 2, 9,
+ 4,34,83, 0, 0, 0, 6,59,85, 0, 0, 0,15,39,40, 4,34,79, 5,37,23, 4,34,78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,39,39,15,39,41,15,39,42,15,39,43,15,39,44,
+ 15,39,45,15,39,46,15,39,47,15,39,48,15,39,49,15,39,50,15,39,52, 6,59,84,
+ 6,59,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,34,82, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,34,69, 6,59,86, 0, 0, 0,15,39,51, 0, 0, 0, 0, 0, 0,
+ 5,37,19, 5,37,22, 5,37,21, 7, 2, 6, 5,37,17, 6,59,87, 0, 0, 0, 5,44,59,
+ 5,44,57, 4,41,25, 5,44,54, 7, 2,15, 5,44,55, 4,41,31, 4,41,27, 7, 2,12,
+ 0, 0, 0, 4,41,30, 7, 2, 5, 6,59,89, 7, 2, 4,15,46,26, 0, 0, 0, 7,23,49,
+ 15,39,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,52, 0, 0, 0, 0, 0, 0,
+ 5,44,60,15,46,19,15,46,20,15,46,21,15,46,22,15,46,23,15,46,24,15,46,25,
+ 15,46,27,15,46,29,15,46,30,15,46,31,15,46,32,15,46,33,15,46,34,15,46,36,
+ 0, 0, 0, 6,59,90, 0, 0, 0, 0, 0, 0, 7, 2, 7, 7, 2,14, 7, 2,13, 7, 2, 8,
+ 0, 0, 0, 0, 0, 0, 7, 2, 3,15,46,37,15,46,35,15,46,28, 5,44,58, 5,44,53,
+ 4,41,29, 7, 2,10, 5,44,56, 7, 2,11, 0, 0, 0,15,52, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,52, 8, 5,52, 3, 7,13, 5, 7,12,94, 5,52, 9, 5,52, 6, 7,13, 1,
+ 4,47,94, 7,13, 8, 5,52, 2, 7,13,11, 5,51,93, 7,13,10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,13,12,15,51,91,15,51,92,15,51,93,15,51,94,
+ 15,52, 2,15,52, 3,15,52, 4,15,52, 6,15,52, 7,15,52,11,15,52,12, 0, 0, 0,
+ 0, 0, 0, 5,51,94, 7,13, 6, 0, 0, 0, 7,13, 7, 7,13, 3, 0, 0, 0, 7,13, 2,
+ 7,13, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,52, 1,15,52, 8,
+ 5,52, 7, 5,52, 1, 5,52, 5, 7,13, 9, 0, 0, 0, 7,23,43, 7,23,52, 7,23,47,
+ 4,47,93, 7,23,45, 0, 0, 0, 4,54, 3, 7,23,51, 7,23,42, 5,59,22, 5,59,20,
+ 7,23,44, 7,23,46, 7,23,48, 0, 0, 0, 5,59,21, 4,54, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,57,76,15,57,77,15,57,78,15,57,79,15,57,80,15,57,81,
+ 0, 0, 0, 7,23,50, 0, 0, 0, 0, 0, 0, 7,23,53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,23,41, 5,65,43, 4,58,92, 0, 0, 0, 7,31,31, 5,65,44, 5,65,45,
+ 7,31,30, 7,31,32,15,62,48,15,62,49,15,62,50,15,62,52, 0, 0, 0, 7,31,29,
+ 7,31,33, 0, 0, 0,15,62,51, 0, 0, 0, 7,31,28, 5,71,63, 4,63,51, 7,38,45,
+ /* plane 2, page 25 */
+ 0, 251, /* first, last */
+ 7,38,50, 7,38,48,15,62,53, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,66,10,15,66,11,
+ 7,38,46, 0, 0, 0, 0, 0, 0, 5,71,65, 5,71,64,15,63,83, 0, 0, 0, 7,45,49,
+ 0, 0, 0, 0, 0, 0, 5,75,89, 0, 0, 0, 0, 0, 0,15,69, 6, 5,75,90, 5,75,91,
+ 7,51,10, 5,79,86, 7,51,11, 5,79,85,15,71,45,15,71,46, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,55,66, 5,83,22, 7,55,65, 7,55,67, 7,55,63,15,73,31, 0, 0, 0,
+ 7,55,64, 7,55,68,15,73,32, 5,85,73, 7,59,44, 0, 0, 0, 7,62,58, 7,62,59,
+ 15,75,37, 7,62,57, 7,62,60, 0, 0, 0,15,76, 4, 0, 0, 0, 5,89, 4,15,76,42,
+ 0, 0, 0, 7,67,45, 5,90,69, 0, 0, 0, 4, 1,19, 0, 0, 0, 6, 2,72, 5, 1,67,
+ 6, 2,73,15, 1,56,15, 1,55, 6, 4,37, 0, 0, 0, 6, 4,36, 6, 6,86, 6, 6,87,
+ 5, 3,74, 4, 3,76,15, 3,80, 0, 0, 0, 0, 0, 0, 5, 3,73, 4, 8,79, 6,16, 4,
+ 6,10,67, 6,10,66,15, 6,42,15, 6,43,15, 6,44,15, 6,45,15, 6,47, 6,10,68,
+ 15, 6,46, 0, 0, 0, 0, 0, 0, 6,16, 3, 6,16, 1, 6,16, 6, 6,16, 5, 0, 0, 0,
+ 0, 0, 0,15,10,21,15,10,22,15,10,23, 0, 0, 0, 0, 0, 0, 6,16, 2, 0, 0, 0,
+ 6,22,57, 5,12,89, 6,22,56,15,14,90,15,14,91, 5,12,90,15,19,70,15,20, 4,
+ 15,20, 5,15,20, 6,15,20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,23,60, 6,39,73,
+ 0, 0, 0, 5,23,59, 6,39,74,15,26,39, 0, 0, 0, 6,39,72,15,26,38, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,28,70, 4,28,72, 6,49,77, 5,30,66,15,33, 5,
+ 0, 0, 0,15,33, 6, 0, 0, 0, 6,49,75, 6,49,76, 0, 0, 0, 5,30,65, 4,28,73,
+ 0, 0, 0, 6,59,93,15,39,53,15,39,54, 0, 0, 0, 5,37,24, 0, 0, 0, 4,41,33,
+ 4,41,34, 0, 0, 0,15,46,38, 0, 0, 0, 0, 0, 0, 5,44,61, 7,13,15, 7,13,14,
+ 7,13,17, 7,13,18, 5,52,10, 7,13,16,15,52,13,15,52,14, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,23,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,50, 0, 0, 0,15,66,12,
+ 15,66,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,75,92, 0, 0, 0, 0, 0, 0,
+ 15,76,64, 6, 1,73, 0, 0, 0, 0, 0, 0, 5, 1,68, 6, 4,38, 6, 4,41, 6, 4,42,
+ 0, 0, 0, 0, 0, 0, 4, 2,58,15, 2,29,15, 2,30,15, 2,31,15, 2,32,15, 2,33,
+ 6, 4,39, 0, 0, 0, 0, 0, 0, 6, 6,94, 6, 6,93, 4, 3,78, 6, 6,91, 6, 6,92,
+ 0, 0, 0,15, 3,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,69, 5, 5,68,
+ 6,10,70, 5, 5,70, 6,10,71, 0, 0, 0, 6,10,72,15, 6,49,15, 6,50,15, 6,52,
+ 15, 6,53, 0, 0, 0, 6,10,69,15, 6,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 8,76, 6,16, 8, 6,16,10, 5, 8,77, 4, 8,81, 4, 8,82, 4, 8,83,
+ 6,16,11, 6,16, 7, 0, 0, 0, 0, 0, 0, 6,16, 9,15,10,24,15,10,26,15,10,27,
+ 15,10,28, 0, 0, 0, 6,16,12, 6,16,13,
+ /* plane 2, page 26 */
+ 0, 255, /* first, last */
+ 4,12,42, 6,22,65, 4,12,37, 4,12,36, 4,12,35, 4,12,39, 6,22,68, 6,22,69,
+ 6,22,63, 6,22,62, 5,12,93, 0, 0, 0, 0, 0, 0, 5,13, 2, 6,22,59, 6,22,66,
+ 15,14,92,15,14,93, 0, 0, 0, 6,22,64, 6,22,67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,22,58, 0, 0, 0, 6,22,60, 5,13, 1,
+ 5,12,94, 0, 0, 0, 4,17,13, 5,17,79, 6,30,55, 6,30,57, 6,30,56, 6,30,54,
+ 6,30,59, 5,17,80,15,20, 8,15,20, 9,15,20,10,15,20,11,15,20,12,15,20,13,
+ 15,20,14,15,20,15, 0, 0, 0, 0, 0, 0, 4,17,15, 0, 0, 0, 6,30,60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,17,78, 6,30,53, 5,23,62, 4,23, 6, 5,23,65,
+ 6,39,80, 6,39,75, 4,23, 3, 5,23,61, 5,23,64, 6,39,78, 4,23, 5, 5,23,63,
+ 6,39,79, 6,39,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,26,40,15,26,41,
+ 15,26,42,15,26,43,15,26,44,15,26,45,15,26,46,15,26,47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,39,77, 0, 0, 0, 5,23,66, 0, 0, 0, 0, 0, 0,15,29,76, 6,49,84,
+ 6,49,80, 4,28,75, 4,28,80, 5,30,67, 6,49,87, 5,30,68, 6,49,82, 6,49,81,
+ 6,49,86, 4,28,77, 6,49,83, 0, 0, 0, 6,49,79, 6,49,85,15,33, 7,15,33, 8,
+ 15,33, 9,15,33,10,15,33,12,15,33,13,15,33,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,49,78, 6,59,94, 6,60, 7, 5,37,28, 5,37,26, 6,60, 4,
+ 6,60,12, 4,34,86, 6,60,14, 6,60,11, 6,60, 6, 5,37,25, 7, 2,19, 0, 0, 0,
+ 15,39,55,15,39,56,15,39,57,15,39,58, 0, 0, 0, 0, 0, 0, 6,60, 8, 6,60, 5,
+ 6,60, 9, 0, 0, 0, 0, 0, 0, 6,60,13, 6,60, 1, 0, 0, 0, 6,60, 3, 5,37,27,
+ 6,60,10, 0, 0, 0,15,39,36, 6,66,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,16,
+ 5,44,62, 4,41,39, 7, 2,23, 4,41,40, 7, 2,21, 7, 2,18, 0, 0, 0,15,46,39,
+ 15,46,40,15,46,41,15,46,42,15,46,43,15,46,44,15,46,46,15,46,47, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,24, 0, 0, 0, 7, 2,22,15,46,45,
+ 5,44,65, 0, 0, 0, 5,44,63, 0, 0, 0, 7, 2,17, 5,44,64, 7,13,21, 7,13,23,
+ 5,52,12, 4,48, 2, 5,52,13, 5,52,11, 7,13,22, 7,13,19, 7,13,20,15,52,15,
+ 15,52,16,15,52,17,15,52,19,15,52,20,15,52,21,15,52,22,15,52,23, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,23,57, 7,23,55, 5,59,24,15,57,82,15,57,83,15,57,84,
+ 15,57,85, 0, 0, 0, 7,23,56, 7,23,58, 7, 2,20, 5,59,23, 7,38,56, 5,65,46,
+ 15,57,86, 0, 0, 0,15,62,54,15,62,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,31,34,15,66,14, 0, 0, 0, 4,63,55, 7,38,51, 7,38,53, 4,63,54,
+ 7,38,55, 7,38,54,15,66,15, 7,38,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,67,22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,51, 7,51,12, 4,70,24, 7,51,13,15,71,47,
+ /* plane 2, page 27 */
+ 0, 252, /* first, last */
+ 15,71,48, 0, 0, 0, 0, 0, 0, 7,51,14, 5,83,24, 4,72,70, 7,55,69, 5,83,23,
+ 0, 0, 0, 0, 0, 0, 7,55,70, 0, 0, 0, 4,74,37, 4,75,71, 0, 0, 0,15,75,38,
+ 0, 0, 0, 7,64,76, 7,68,37, 5,89, 5,15,76, 5, 0, 0, 0, 4,77,52, 0, 0, 0,
+ 5,90, 7, 4,77,81, 7,67,46, 7,69,20, 0, 0, 0, 6, 1,74, 0, 0, 0, 6,10,74,
+ 6,10,73, 0, 0, 0,15, 6,54,15, 6,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8,79,
+ 6,16,14,15,10,29, 6,16,17, 0, 0, 0, 6,16,15, 0, 0, 0, 4,17,17, 6,35,71,
+ 6,30,62, 6,30,61, 0, 0, 0, 4,23, 7, 6,30,63, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,49,90, 6,49,88, 6,49,89, 0, 0, 0, 6,60,16, 4,36, 6,15,39,59,
+ 0, 0, 0, 6,60,17, 5,37,29, 0, 0, 0, 0, 0, 0,15,46,49, 7, 2,26, 0, 0, 0,
+ 7, 2,25, 0, 0, 0, 7,13,25, 5,51,50, 7,13,24, 7,23,59, 7,23,60, 0, 0, 0,
+ 5,65,47, 7,38,57, 7,45,52, 7,51,15, 0, 0, 0, 6, 1,75,15, 1,25, 0, 0, 0,
+ 0, 0, 0, 6, 4,44, 5, 2,44, 0, 0, 0, 0, 0, 0, 6, 7, 4, 4, 3,82, 6, 7, 3,
+ 6, 7, 2,15, 3,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,71, 0, 0, 0, 0, 0, 0,
+ 15, 6,56, 6,10,75, 6,16,18, 6,16,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,16,19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8,80, 4,12,43,15,15, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,22,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,30,65, 5,17,81, 5,23,67,
+ 6,30,67, 6,30,64, 6,30,66,15,20,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,81,15,26,48,
+ 6,39,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,82, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,30,69, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,33,15, 5,37,30, 6,60,19,
+ 0, 0, 0, 6,60,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,66, 7, 2,27,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,52,15, 7,13,26, 0, 0, 0, 0, 0, 0,15,57,87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,79,87,
+ 0, 0, 0, 0, 0, 0, 4, 1,42,15, 1,26, 5, 1,69,15, 1,45,15, 1,58, 0, 0, 0,
+ 0, 0, 0, 6, 2,75, 6, 2,74, 0, 0, 0, 0, 0, 0, 5, 2,45,15, 2,35, 5, 3,76,
+ 4, 3,83, 0, 0, 0, 5, 5,72, 0, 0, 0, 6, 7, 5, 0, 0, 0, 5, 3,75, 0, 0, 0,
+ 5, 3,78, 5, 3,77, 0, 0, 0, 6,16,20, 5, 5,73, 6,10,76, 5, 5,75,15, 6,57,
+ 6,16,21, 5, 5,74, 5, 8,81, 6,16,23, 0, 0, 0, 6,16,24, 5, 8,82, 6,16,25,
+ 5,13, 3, 6,22,76, 6,22,74, 0, 0, 0, 5,13, 4, 6,22,75, 6,22,77,15,15, 2,
+ 0, 0, 0, 0, 0, 0, 6,30,70, 5,17,82, 4,17,20, 5,17,84, 6,39,86, 6,39,84,
+ 6,39,85, 0, 0, 0, 4,23,10, 6,39,87,15,26,49,
+ /* plane 2, page 28 */
+ 2, 255, /* first, last */
+ 6,49,91, 6,49,93, 6,49,92, 0, 0, 0, 0, 0, 0, 5,40, 6,
+ 0, 0, 0, 4,34,90, 6,60,20, 5,37,32, 5,37,31, 6,60,21, 5,37,33, 0, 0, 0,
+ 7,13,29, 7, 2,30, 7, 2,29, 0, 0, 0, 7, 2,28, 7,13,27, 5,52,16, 7,13,28,
+ 7,13,30,15,52,24, 0, 0, 0, 0, 0, 0, 7,23,61, 4,70,25, 0, 0, 0, 0, 0, 0,
+ 4,72,71, 0, 0, 0, 5,89, 6, 6, 1,30, 4, 1,85, 4, 1,84, 6, 2,76, 0, 0, 0,
+ 0, 0, 0, 6, 4,45, 4, 2,62, 5, 2,46, 6, 4,46, 6, 4,48, 6, 4,49, 6, 4,47,
+ 15, 2,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 9,15, 3,84,
+ 6, 7, 7, 0, 0, 0, 6, 7, 6, 0, 0, 0, 6, 7, 8, 5, 3,79, 4, 6,12, 4, 6,11,
+ 6,10,77, 6,10,78, 5, 5,76, 6,10,79,15, 6,59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,77, 4, 8,87, 6,16,26, 6,16,31, 4, 8,90,
+ 4, 8,86, 5, 8,85, 6,16,30, 6,16,29, 6,16,28, 6,16,27, 0, 0, 0,15,10,32,
+ 15,10,33,15,10,34,15,10,35,15,10,36, 0, 0, 0,15,10,31, 0, 0, 0, 0, 0, 0,
+ 6,16,32, 5, 8,84, 6,22,82, 4,12,48, 6,22,79, 4,12,47, 6,30,71, 6,22,80,
+ 6,22,78, 0, 0, 0,15,15, 3,15,15, 4,15,15, 6,15,15, 7,15,15, 8, 0, 0, 0,
+ 5,13, 6, 5,13, 7, 6,22,81, 0, 0, 0, 6,22,83, 0, 0, 0, 0, 0, 0, 5,13, 5,
+ 0, 0, 0, 6,22,84, 6,30,77, 6,30,73, 5,17,88, 5,17,90, 5,17,87, 5,17,89,
+ 5,17,86, 5,17,91, 6,30,80, 6,30,74,15,20,17,15,20,18,15,20,21,15,20,22,
+ 15,20,23,15,20,24,15,20,25,15,20,26, 6,30,72, 0, 0, 0, 6,30,76, 0, 0, 0,
+ 0, 0, 0, 6,30,79, 6,30,78,15,20,19, 6,40, 3, 6,40, 4, 6,40, 2, 4,23,12,
+ 6,39,94, 6,39,90, 5,23,68, 4,23,13, 5,23,69, 6,39,89, 6,39,88, 6,40, 5,
+ 6,40, 1, 6,40, 6, 0, 0, 0, 6,39,92, 0, 0, 0, 0, 0, 0,15,26,50,15,26,51,
+ 15,26,52, 6,39,93, 4,23,14, 0, 0, 0, 6,50, 3, 5,30,73, 5,30,71, 6,50, 6,
+ 5,30,72, 6,50, 5, 6,50, 9, 6,50, 1, 6,49,94, 6,50, 7, 6,50, 4, 0, 0, 0,
+ 15,33,16,15,33,17,15,33,18, 6,50, 2, 0, 0, 0, 0, 0, 0, 6,50, 8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,30,70, 0, 0, 0, 4,34,92, 4,34,94, 4,34,91, 6,60,24,
+ 6,60,22, 6,60,23,15,39,61, 0, 0, 0, 0, 0, 0, 6,60,25, 0, 0, 0, 5,37,34,
+ 7, 2,32, 5,44,70, 0, 0, 0,15,46,50,15,46,51,15,46,52,15,46,53,15,46,54,
+ 5,44,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,68, 7,13,32,
+ 7,13,31, 7, 2,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,52,25, 7,16,13,
+ 7,23,62, 0, 0, 0, 0, 0, 0, 7,31,35, 4,63,56, 5,71,66, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,69, 7,15,69, 8, 0, 0, 0, 5,75,93, 0, 0, 0, 0, 0, 0,15,71,49,
+ 5,83,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1,16, 6, 1,76,
+ /* plane 2, page 29 */
+ 0, 255, /* first, last */
+ 6, 2,77, 6, 4,52, 6, 4,51, 0, 0, 0, 6, 4,50, 5, 2,47, 4, 3,85, 0, 0, 0,
+ 6, 7,10, 0, 0, 0, 0, 0, 0, 4, 6,13, 6,10,81, 6,10,80, 5, 8,87, 6,16,34,
+ 0, 0, 0, 6,16,35, 5, 8,86, 6,16,36, 0, 0, 0, 6,22,87, 6,22,88, 6,22,86,
+ 6,21, 8, 6,22,85, 0, 0, 0, 6,30,81, 6,30,82, 6,40, 8, 5,23,71, 6,40, 9,
+ 0, 0, 0, 6,40, 7, 0, 0, 0,15,26,53, 6,50,10, 6,60,26, 7, 2,33, 7,13,33,
+ 7, 2,34, 7, 2,35, 0, 0, 0, 7,51,16, 7,62,61, 5, 1,37, 0, 0, 0, 5, 1,38,
+ 6, 2,80, 6, 2,78, 6, 2,82, 6, 2,81, 0, 0, 0,15, 1,60,15, 1,61,15, 1,62,
+ 6, 2,83, 0, 0, 0, 0, 0, 0, 5, 1,70, 6, 2,79, 0, 0, 0, 0, 0, 0, 6, 4,55,
+ 6, 4,53, 6, 4,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,57,15, 2,37,
+ 15, 2,38, 0, 0, 0, 6, 4,54, 5, 2,51, 0, 0, 0, 0, 0, 0, 6, 4,58, 6, 4,56,
+ 0, 0, 0, 5, 2,50, 0, 0, 0, 6, 7,14, 5, 3,81, 5, 3,88, 5, 3,89, 6, 7,16,
+ 5, 3,86, 5, 3,85, 5, 3,87, 5, 3,82, 5, 3,83, 6, 7,17, 6, 7,12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7,18,15, 3,86, 0, 0, 0,15, 3,87,15, 3,89,
+ 15, 3,90,15, 3,91,15, 3,94,15, 4, 1, 0, 0, 0, 0, 0, 0, 6, 7,13, 0, 0, 0,
+ 6, 7,15, 4, 3,93, 0, 0, 0,15, 3,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 7,20, 6, 7,19, 0, 0, 0, 4, 3,92, 0, 0, 0, 6, 7,11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 3,90, 4, 6,16, 5, 5,85, 6,10,85, 4, 6,19, 6,10,82,
+ 5, 5,83, 5, 5,84, 6,10,90, 5, 5,81, 6,10,87, 6,10,92, 5, 5,79, 6,10,89,
+ 5, 5,82, 5, 5,80, 6,10,84, 6, 7,21,15, 6,60,15, 6,61,15, 6,62,15, 6,63,
+ 15, 6,64,15, 6,65,15, 6,67,15, 6,68, 0, 0, 0,15, 6,69,15, 6,70,15, 6,71,
+ 15, 6,72, 0, 0, 0, 6,10,88, 0, 0, 0, 6,13,11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,10,83, 5, 5,86, 6,16,48, 6,16,42, 5, 8,88, 6,16,43, 5, 8,89,
+ 4, 8,94, 5, 8,90, 0, 0, 0, 6,16,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,16,41, 6,16,50, 0, 0, 0,15,10,37,15,10,39,15,10,40,15,10,43,15,10,44,
+ 15,10,45,15,10,46,15,10,47,15,10,48,15,10,49, 6,16,45, 6,16,37, 6,16,39,
+ 0, 0, 0, 6,16,49, 0, 0, 0, 0, 0, 0, 6,16,47, 0, 0, 0, 0, 0, 0, 6,16,44,
+ 15,10,42,15,10,38, 6,16,40, 5, 8,91, 4, 8,92, 5,13,12, 5,13, 9, 4,12,50,
+ 4,12,57, 5,13,10, 6,23, 1, 4,12,56, 5,13,20, 5,13,16, 5,13,11, 6,22,93,
+ 5,13,17, 5,13,13, 5,13,15, 6,23, 4, 6,22,94, 4,12,66, 6,22,89, 4,12,67,
+ 4,12,54, 6,23, 5, 6,23, 2, 0, 0, 0, 0, 0, 0, 6,23, 3, 6,22,91,15,15, 9,
+ 15,15,10,15,15,11,15,15,12,15,15,13,15,15,14,15,15,15,15,15,17,15,15,19,
+ 5,13, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,15,16,
+ /* plane 2, page 30 */
+ 2, 254, /* first, last */
+ 15,15,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,13,19, 4,12,61, 5,13,21, 0, 0, 0, 5,13,22, 0, 0, 0, 5,13,18, 0, 0, 0,
+ 6,27,46, 4,17,26, 6,31,11, 6,31, 4, 6,31, 6, 4,17,28, 4,17,30, 5,17,94,
+ 6,30,89, 6,31, 2, 6,30,91, 5,18, 8, 4,17,24, 0, 0, 0, 6,31, 7, 6,31,12,
+ 6,31, 9, 6,30,84, 6,31,10, 4,17,32, 4,17,27, 5,17,92, 5,18, 6, 6,30,83,
+ 4,17,22, 5,17,93, 5,18, 4, 0, 0, 0, 6,31, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,31, 3,15,20,27, 0, 0, 0,
+ 15,20,28,15,20,29,15,20,30,15,20,32,15,20,33,15,20,34,15,20,35,15,20,36,
+ 15,20,38,15,20,39,15,20,40, 6,30,87, 0, 0, 0, 0, 0, 0, 6,18,10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,30,93, 6,30,92, 0, 0, 0, 6,30,94, 0, 0, 0, 6,31, 1,
+ 0, 0, 0, 0, 0, 0, 6,31, 5, 0, 0, 0, 4,17,31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,18, 9, 5,18, 1, 5,18, 7, 5,18, 3, 0, 0, 0, 5,18, 2,
+ 5,18, 5, 5,18,10, 5,23,73, 6,40,19, 5,23,78, 6,40,10, 6,40,20, 5,23,79,
+ 5,23,76, 0, 0, 0, 5,23,75, 4,23,16, 0, 0, 0, 5,23,80, 5,23,74, 5,23,81,
+ 5,23,82, 5,23,84, 6,40,14, 6,30,90, 4,23,17, 6,40,15, 5,23,77, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,23,19, 0, 0, 0,
+ 5,23,72, 0, 0, 0, 5,23,83,15,26,54,15,26,56,15,26,57,15,26,58,15,26,59,
+ 0, 0, 0, 0, 0, 0, 6,40,13, 0, 0, 0, 5,23,85, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,40,18, 6,40,12, 0, 0, 0, 0, 0, 0, 6,40,17, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,40,16, 0, 0, 0, 0, 0, 0,15,26,60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,30,80, 6,50,13, 5,30,76, 4,28,90, 5,30,81,
+ 6,50,14, 6,60,27, 4,28,93, 6,50,21, 5,30,74, 5,30,83, 6,50,11, 5,30,79,
+ 0, 0, 0, 6,50,12, 6,50,25, 6,50,16, 6,50,24, 5,30,78, 6,50,22, 6,60,32,
+ 15,33,23, 5,30,82,15,33,19,15,33,20,15,33,22,15,33,24,15,33,25, 6,50,26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,50,18, 0, 0, 0, 6,50,23, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,30,75, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,33,21, 0, 0, 0, 6,50,15,
+ 5,37,35, 5,37,43, 5,37,41, 6,60,33, 6,60,28, 4,35,11, 4,35, 6, 4,35, 5,
+ 5,37,36, 5,37,40, 5,37,39, 5,37,42, 5,37,46, 6,60,30, 6,60,39, 5,37,45,
+ 5,37,37, 5,37,38, 6,60,34, 0, 0, 0, 4,35, 9, 6,60,38, 4,35, 7, 4,35, 3,
+ 5,37,44, 6,60,37, 6,60,35, 0, 0, 0, 6,60,31, 4,35, 8,15,39,62,15,39,63,
+ 15,39,64,15,39,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,50,17,
+ /* plane 2, page 31 */
+ 10, 255, /* first, last */
+ 4,41,46, 7, 2,41, 4,41,50, 7, 2,37, 5,44,73, 0, 0, 0,
+ 7, 2,48, 7, 2,42, 5,44,78, 5,44,71, 7, 2,39, 7, 2,49, 5,44,79, 7, 2,47,
+ 7, 2,44, 7, 2,45, 5,44,80, 5,44,74, 5,44,77, 7,13,36, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,38,15,46,55,15,46,56,
+ 15,46,57,15,46,59,15,46,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,36,
+ 7, 2,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,46, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,44,75, 0, 0, 0, 7, 2,40, 4,41,49, 5,52,19, 4,48, 3,
+ 7,13,42, 4,48, 4, 5,52,21, 7,13,34, 5,52,24, 5,52,20, 5,52,17, 7,13,39,
+ 7,13,35, 5,59,25, 5,52,18, 0, 0, 0,15,52,26,15,52,27,15,52,28, 0, 0, 0,
+ 7,13,37, 0, 0, 0, 0, 0, 0, 7,13,41, 7,13,40, 7,13,43, 0, 0, 0, 0, 0, 0,
+ 7,13,38, 0, 0, 0, 7,13,45, 5,52,23, 4,54, 9, 5,59,27, 5,65,53, 7,23,64,
+ 5,59,31, 7,23,70, 0, 0, 0, 5,59,26, 7,23,66, 7,23,68, 7,23,65, 5,59,29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,23,63, 7,23,69,15,57,89,15,57,90,
+ 15,57,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,54,10, 0, 0, 0, 0, 0, 0,
+ 7,23,67, 0, 0, 0, 7,23,71, 0, 0, 0, 0, 0, 0, 7,25, 7, 0, 0, 0, 0, 0, 0,
+ 5,59,32, 0, 0, 0, 7,38,58, 0, 0, 0, 0, 0, 0, 5,65,52, 7,31,39, 4,58,94,
+ 5,65,49, 5,65,50, 7,31,41,15,62,57, 5,65,51, 7,31,38,15,62,56, 0, 0, 0,
+ 7,31,37, 7,31,40, 0, 0, 0, 0, 0, 0, 5,65,54, 5,65,55, 0, 0, 0, 0, 0, 0,
+ 7,38,60, 4,63,59, 7,38,62, 5,71,69, 4,63,57, 7,38,61, 7,38,63, 7,38,64,
+ 0, 0, 0, 0, 0, 0,15,66,16,15,66,17,15,66,18, 0, 0, 0, 7,38,65, 7,38,66,
+ 0, 0, 0, 7,38,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,67,24, 7,45,53,
+ 4,67,23, 5,75,94, 7,45,55, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,69, 9, 7,45,54,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,59,30, 5,79,88, 5,79,90, 5,79,89, 0, 0, 0,
+ 0, 0, 0, 7,51,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,51,17, 5,83,27,
+ 4,72,73, 4,72,74, 7,55,71, 7,55,73, 7,55,72, 0, 0, 0, 0, 0, 0, 7,55,74,
+ 0, 0, 0, 5,83,28, 0, 0, 0, 0, 0, 0, 7,62,62, 4,75,74, 4,75,73, 0, 0, 0,
+ 7,62,64, 0, 0, 0, 0, 0, 0, 5,87,56, 7,62,63, 5,89, 7, 0, 0, 0,15,76, 6,
+ 5,90, 8, 5,90,70, 5,91,28, 7,67,47, 0, 0, 0, 5,92,20, 0, 0, 0, 6, 1,77,
+ 4, 1, 5, 4, 2,66, 5, 2,52, 6, 4,59, 6, 4,60, 5, 2,53, 6, 3,94, 4, 3,94,
+ 5, 3,91, 6,10,93,15, 6,74,15, 6,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,16,53,
+ 6,16,52, 6,16,54, 0, 0, 0, 6,16,51, 0, 0, 0, 6,23, 6, 5,18,11, 4,17,33,
+ /* plane 2, page 32 */
+ 0, 254, /* first, last */
+ 6,31,13, 5,23,86, 6,60,40, 7, 2,50, 5,52,25,15,46,61,15,52,29, 7,23,72,
+ 7,31,42, 7,38,67, 5,71,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,65, 0, 0, 0,
+ 7,69,21, 6, 1,79, 6, 1,81, 6, 1,80,15, 1,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 1,72, 5, 1,71, 0, 0, 0, 0, 0, 0, 5, 3,92, 6, 7,23, 0, 0, 0,15, 6,75,
+ 6,16,55, 6,23, 8,15,15,20, 6,31,14,15,26,62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 2,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38,68,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2,84, 0, 0, 0, 5, 2,54, 6,10,94,
+ 0, 0, 0, 6,16,57, 0, 0, 0, 6,16,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,12,69,
+ 6,31,15, 5,21,63, 5,18,13, 6,31,16, 5,18,12, 6,40,22,15,26,63,15,26,64,
+ 15,26,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,52, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,31,43, 0, 0, 0, 4, 1,87, 6, 2,85, 6, 2,86, 5, 2,57, 5, 2,56, 4, 2,68,
+ 5, 2,59, 6, 4,65, 6, 4,64, 6, 4,62,15, 2,40, 0, 0, 0, 0, 0, 0,15, 2,42,
+ 0, 0, 0, 0, 0, 0, 5, 2,55, 6, 4,63, 5, 2,58, 6, 7,33, 6, 7,27, 5, 4, 2,
+ 6, 7,24, 5, 3,94, 5, 3,93, 0, 0, 0, 5, 4, 3, 6, 7,32, 5, 4, 4, 6, 7,28,
+ 6, 7,31, 5, 4, 1,15, 4, 4, 6, 7,25, 6, 7,26, 6, 7,29, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 4, 5, 6, 7,30, 5, 5,91, 4, 6,21, 5, 5,89, 5, 5,93, 5, 5,90,
+ 5, 5,92, 5, 6, 1, 6,11, 3, 5, 5,94, 0, 0, 0, 0, 0, 0, 5, 6, 2, 6,11, 2,
+ 15, 6,76, 0, 0, 0, 5, 6, 3, 6,11, 1, 0, 0, 0, 5, 5,87, 0, 0, 0, 5, 5,88,
+ 5, 8,94, 6,16,66, 5, 8,93, 5, 9, 2, 5, 8,92, 5, 9, 3, 6,16,63, 5, 9, 5,
+ 5, 9, 4, 0, 0, 0, 6,16,59, 0, 0, 0, 0, 0, 0, 5, 9, 1, 6,16,58, 6,16,69,
+ 6,16,71,15,10,51,15,10,52,15,10,53, 0, 0, 0, 4, 9, 6, 6,16,65, 0, 0, 0,
+ 0, 0, 0, 6,16,64, 6,16,60, 6,16,61, 6,16,70, 0, 0, 0, 6,16,68, 6,16,62,
+ 0, 0, 0, 5,13,24, 6,23,18, 0, 0, 0, 5,13,23, 6,23,14, 5,13,25, 5,18,14,
+ 6,23,10, 4,12,73, 4,12,74, 6,23,15, 5,13,26, 6,23,13, 6,23,17, 6,23,16,
+ 4,12,71, 6,23,19, 6,23,20,15,15,22,15,15,21, 0, 0, 0, 6,23, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23,11, 6,31,21, 5,18,21, 4,17,38, 4,17,35,
+ 4,17,36, 5,18,19, 5,18,15, 6,31,26, 5,18,16, 5,18,20, 6,31,28, 5,18,17,
+ 5,18,22, 6,31,22, 6,31,27, 6,31,18, 5,18,18, 6,31,20,15,20,41,15,20,42,
+ 15,20,43,15,20,44, 0, 0, 0, 6,31,25, 6,31,17, 0, 0, 0, 0, 0, 0, 6,31,29,
+ 6,31,23, 0, 0, 0, 6,31,19, 6,40,25, 4,23,30, 6,40,30, 5,23,89, 5,23,90,
+ 4,23,24, 5,23,88, 6,40,26, 4,23,23, 5,24, 1, 5,24, 2, 6,31,24, 6,40,32,
+ 6,40,29, 6,40,27, 5,23,93, 6,40,24, 0, 0, 0,15,26,66,15,26,67,
+ /* plane 2, page 33 */
+ 1, 255, /* first, last */
+ 6,40,31, 0, 0, 0, 0, 0, 0, 5,23,91, 5,23,87, 6,40,33, 5,23,94,
+ 15,32,11, 0, 0, 0, 5,30,88, 4,29, 2, 5,37,50, 4,29, 5, 5,30,85, 5,30,84,
+ 4,29, 4, 0, 0, 0, 0, 0, 0, 5,30,87, 5,30,90, 6,50,30, 6,50,27, 6,50,29,
+ 6,60,43, 0, 0, 0, 5,30,91, 6,50,28, 5,30,86, 0, 0, 0, 5,30,89, 6,60,44,
+ 6,60,45, 5,37,56, 4,35,20, 5,37,47, 5,37,53, 6,60,42, 5,37,52, 5,37,55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,39,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,37,57, 5,37,48, 5,37,54, 5,37,49, 7, 2,55, 7, 2,57, 5,44,84, 5,44,83,
+ 5,44,85, 4,41,55, 5,44,86, 0, 0, 0, 5,44,88, 4,41,54, 7, 2,54, 7, 2,53,
+ 0, 0, 0, 0, 0, 0, 7, 2,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,44,87, 5,44,89, 5,44,82, 0, 0, 0, 7,13,48, 5,52,30, 7,13,50,
+ 7,13,56, 5,52,29, 4,48, 8, 7,13,55, 7,13,54, 5,52,27, 7,13,49, 5,52,28,
+ 0, 0, 0, 7,13,52, 5,52,31, 7,13,47, 0, 0, 0, 0, 0, 0, 4,48,10, 5,59,33,
+ 5,59,34, 4,54,12, 7,23,75,15,57,92, 0, 0, 0, 0, 0, 0, 7,23,73, 0, 0, 0,
+ 7,23,74, 5,65,58, 5,65,57, 5,65,56, 0, 0, 0, 7,38,70, 4,63,61, 5,71,71,
+ 4,63,60, 7,38,69, 7,38,71, 0, 0, 0, 0, 0, 0, 5,71,72,15,66,19, 0, 0, 0,
+ 7,45,56, 5,76, 1, 0, 0, 0, 7,51,19, 7,55,76, 5,79,91, 5,83,29, 7,55,75,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,66, 7,62,67, 5,87,57, 0, 0, 0, 7,67,48,
+ 7,67,85, 4, 1,88, 6, 7,34, 5, 4, 6, 0, 0, 0, 4, 4, 6, 6,11, 4,15, 6,77,
+ 15, 6,78, 6,16,73, 6,16,72,15,10,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,23,21, 5,18,23, 6,40,34, 5,24, 3, 0, 0, 0, 0, 0, 0, 6,50,31,
+ 0, 0, 0, 0, 0, 0, 5,37,58, 0, 0, 0,15,39,68, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,57, 0, 0, 0,15,74,46, 6, 1,82,
+ 0, 0, 0, 6, 1,83, 6, 2,88, 5, 1,73, 6, 2,87,15, 1,66, 4, 2,71, 4, 4, 7,
+ 5, 4, 7,15, 4, 6, 0, 0, 0, 6, 9,62, 6,11, 5, 5, 6, 4, 5, 6, 5, 6,16,74,
+ 6,16,33, 4,15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23,22, 4,17,42,
+ 0, 0, 0, 0, 0, 0, 6,40,35, 5,30,92, 5,37,59, 7, 2,59,15,39,69, 6,60,46,
+ 15,46,63, 7, 2,60, 7, 2,61, 0, 0, 0, 4,54, 6, 0, 0, 0, 7,55,77, 4, 2,72,
+ 5, 2,62, 6, 4,68, 5, 2,61, 6, 4,67, 6, 4,66, 6, 4,70, 4, 2,73, 0, 0, 0,
+ 6, 4,69, 0, 0, 0, 0, 0, 0, 6, 7,37, 5, 4,10, 5, 4,12, 5, 4,11, 5, 4, 8,
+ 5, 4, 9, 6, 7,36, 6, 7,40, 6,11, 8, 0, 0, 0, 6, 7,35, 0, 0, 0, 6, 7,38,
+ 5, 4,13, 0, 0, 0, 5, 6,12, 5, 6, 8, 5, 6, 7, 5, 6,11, 5, 6,10, 4, 6,25,
+ 6,11, 6, 6,11, 9, 6,11, 7, 4, 6,30, 6,11,10,15, 6,80,15, 6,81,15, 6,82,
+ /* plane 2, page 34 */
+ 0, 255, /* first, last */
+ 15, 6,83,15, 6,84, 5, 6, 9, 0, 0, 0, 5, 6,13, 6,11,11, 0, 0, 0, 5, 9, 8,
+ 5, 9,10, 4, 9, 7, 6,16,76, 5, 9, 9, 6,16,77,15,10,55,15,10,57,15,10,56,
+ 15,10,58,15,10,59,15,10,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,16,75,
+ 0, 0, 0, 5,13,29, 5,13,32, 5,13,30, 5,13,33, 5,13,27, 6,23,26, 6,23,27,
+ 4,12,78, 5,13,34, 5,13,31, 6,23,28, 5,13,28, 6,23,25, 0, 0, 0, 0, 0, 0,
+ 15,15,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23,23, 6,23,24, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,12,91, 5,18,36, 5,18,27, 5,18,25, 4,17,45, 6,31,35,
+ 5,18,34, 6,31,40, 6,31,30, 5,18,29, 5,18,28, 5,18,31, 5,18,30, 6,31,31,
+ 6,31,32, 5,18,33, 5,18,24, 4,17,48, 6,31,36, 5,18,35, 5,24, 8, 0, 0, 0,
+ 6,31,33, 0, 0, 0,15,20,45,15,20,46,15,20,47,15,20,48,15,20,49,15,20,50,
+ 15,20,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,31,39, 6,38,29, 0, 0, 0,
+ 5,18,26, 6,31,34, 5,18,32, 6,40,42, 4,17,43, 5,24,11, 5,24,12, 5,24,13,
+ 6,40,43, 6,40,46, 5,24, 7, 6,40,45, 4,23,34, 5,24,10, 5,24, 6, 6,40,41,
+ 4,23,35, 5,24, 5, 6,50,36, 6,40,38, 6,40,39, 5,24, 4,15,26,69,15,26,71,
+ 15,26,72,15,26,73,15,26,74, 0, 0, 0, 6,40,40, 0, 0, 0, 6,40,44, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,26,70, 0, 0, 0, 0, 0, 0, 4,29,11,
+ 5,31, 5, 4,29,12, 6,50,33, 6,50,34, 5,31, 2, 5,31, 3, 6,50,39, 5,30,93,
+ 0, 0, 0, 6,50,37,15,33,26,15,33,27,15,33,28, 0, 0, 0, 6,50,35, 0, 0, 0,
+ 6,50,40, 0, 0, 0, 5,31, 4, 5,30,94, 6,50,38, 4,35,24, 5,37,60, 4,35,23,
+ 5,37,62, 6,60,48, 0, 0, 0, 5,37,64, 5,37,63, 6,60,47,15,39,71,15,39,72,
+ 15,39,73,15,39,74,15,39,75,15,39,76,15,39,77,15,39,78,15,39,79, 0, 0, 0,
+ 6,60,49, 0, 0, 0, 6,64,17, 0, 0, 0,15,42,52, 7, 2,62, 4,41,58, 4,23,31,
+ 4,41,56, 5,44,90, 4,41,57, 7,13,57, 7, 2,66, 5,44,92, 5,44,94,15,46,64,
+ 15,46,66,15,46,67, 7, 2,63, 7, 2,65, 7, 2,67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 2,64, 5,44,91, 5,52,33, 5,44,93, 5,52,35, 5,52,32, 4,48,13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,36,15,52,31,15,52,32,15,52,33,
+ 15,52,34, 7,23,78, 5,59,36, 7,23,76, 7,23,77,15,57,94,15,58, 1,15,58, 2,
+ 15,58, 3, 0, 0, 0, 5,59,35, 0, 0, 0, 7,23,79, 5,59,37, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,31,49, 7,31,46, 5,65,59,15,62,58,15,62,60, 7,31,45, 7,31,47,
+ 0, 0, 0, 0, 0, 0, 7,31,44,15,62,59, 0, 0, 0, 7,31,48, 0, 0, 0, 7,38,72,
+ 7,38,73, 5,65,60, 5,71,73, 0, 0, 0, 0, 0, 0,15,66,20,15,66,21,15,66,22,
+ 5,71,74, 0, 0, 0, 0, 0, 0, 5,76, 4, 5,76, 3, 7,45,61, 7,45,59, 5,76, 2,
+ /* plane 2, page 35 */
+ 0, 254, /* first, last */
+ 7,45,58, 0, 0, 0, 7,45,60, 7,45,62, 4,70,28, 0, 0, 0, 7,51,20, 7,51,65,
+ 5,83,30, 7,55,78, 0, 0, 0, 7,55,79, 0, 0, 0, 5,85,74, 0, 0, 0,15,74,47,
+ 0, 0, 0, 7,59,45, 7,62,68, 7,66,22, 5,90,72, 5,90,71,15,76,91,15, 1,67,
+ 15, 2,43,15, 2,44, 0, 0, 0, 6,11,12,15, 4, 7, 6,11,13, 6,11,14, 0, 0, 0,
+ 15,15,25, 0, 0, 0,15,15,27,15,15,28, 0, 0, 0,15,15,26, 5,18,37,15,20,52,
+ 6,40,47,15,26,75,15,26,76, 5,31, 6, 6, 1,31, 6, 1,85, 0, 0, 0, 6, 2,89,
+ 0, 0, 0, 6, 7,41, 0, 0, 0, 4, 4,10, 6,16,80, 6, 7,45,15, 4, 8, 0, 0, 0,
+ 6, 7,43, 0, 0, 0, 6, 7,46, 4, 6,31, 6,11,16, 5, 6,14, 6,11,17, 3,10,25,
+ 0, 0, 0, 4, 7,33, 6,21, 3, 6,16,82, 6,16,83, 6,16,81, 6,16,79, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,16,78, 0, 0, 0, 0, 0, 0, 6,23,31, 6,23,30, 4,12,79,
+ 6,23,29, 0, 0, 0, 6,23,32, 0, 0, 0, 6,31,41, 6,31,42, 6,31,43, 6,31,44,
+ 6,31,45, 6,31,46, 4,23,36, 6,40,48, 6,40,52, 6,40,51, 6,40,49,15,26,77,
+ 6,40,50, 0, 0, 0, 6,50,41, 5,31, 7,15,33,29, 0, 0, 0, 6,60,51, 6,60,52,
+ 6,60,50, 0, 0, 0, 0, 0, 0, 5,37,65, 7, 2,68, 0, 0, 0, 7,13,58, 7,13,60,
+ 4,48,15, 5,52,37, 7,23,81, 7,23,80, 0, 0, 0, 0, 0, 0, 7,55,80, 7,67,49,
+ 7,67,50, 7,69,22, 6, 1,32, 6, 1,86, 0, 0, 0, 0, 0, 0,15, 2,45, 4, 4,11,
+ 6, 7,48, 6, 7,47, 0, 0, 0, 5, 4,14, 6,11,18, 0, 0, 0, 6,16,86, 6,16,85,
+ 0, 0, 0, 0, 0, 0, 6,16,87, 0, 0, 0, 5,14,72, 6,31,47, 5,24,14, 0, 0, 0,
+ 6,50,42, 6,60,53, 7, 2,69, 7,13,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 1,10, 5, 1,39, 6, 1,88, 0, 0, 0, 6, 1,92, 6, 1,87, 0, 0, 0, 6, 1,90,
+ 6, 1,91, 0, 0, 0, 6, 3, 1, 6, 3, 2, 6, 2,92, 6, 2,90, 6, 3, 3, 6, 2,91,
+ 6, 2,93, 6, 2,94, 5, 1,74, 5, 2,64, 0, 0, 0, 5, 2,63, 0, 0, 0, 0, 0, 0,
+ 6, 4,72, 6, 4,73, 6, 4,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4,75, 5, 4,15,
+ 6, 7,49, 5, 4,17, 6, 7,51, 5, 4,16,15, 4, 9, 0, 0, 0,15, 4,10,15, 4,11,
+ 15, 4,12, 6, 7,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4,18, 5, 6,15, 6,11,22,
+ 6,11,19, 6,11,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,11,23, 6,11,21, 6,16,94, 5, 9,12, 6,16,93, 4, 9,16,
+ 6,16,89, 5, 9,11, 6,16,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,13,36, 0, 0, 0, 5,13,35, 5,13,37,
+ 6,23,35, 6,23,33, 5,13,38,15,15,29, 6,23,34, 0, 0, 0, 5,18,42, 5,18,40,
+ 5,18,41, 6,31,54, 6,31,48, 4, 9,15, 6,40,53, 6,31,50, 6,31,51, 5,18,39,
+ 6,31,49,15,20,53,15,20,54,15,20,55, 6,31,52, 6,31,55, 6,31,53,
+ /* plane 2, page 36 */
+ 0, 254, /* first, last */
+ 6,40,54, 6,40,57, 5,24,15, 5,24,18, 5,24,17, 6,40,58, 5,24,16, 6,40,56,
+ 6,40,55, 0, 0, 0, 5,31, 8, 4,29,17, 6,50,43,15,33,32, 0, 0, 0, 6,50,44,
+ 0, 0, 0, 0, 0, 0, 5,37,66, 6,60,54, 5,37,67, 6,60,55, 6,60,57, 0, 0, 0,
+ 15,39,80, 6,60,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,60,56, 5,45, 1, 5,45, 2,
+ 4,41,64, 7, 2,70,15,46,68,15,46,69, 7, 2,71, 7,13,63, 5,52,38, 4,48,16,
+ 7,13,64, 7,13,62, 0, 0, 0, 0, 0, 0, 7,23,83, 7,23,82, 0, 0, 0, 7,23,84,
+ 15,58, 4, 0, 0, 0, 4,59, 2, 5,65,62, 7,31,50,15,62,61, 0, 0, 0, 5,65,61,
+ 7,38,77, 7,38,75, 7,38,79, 7,38,74, 7,38,76, 0, 0, 0, 5,71,75, 5,76, 5,
+ 7,45,63, 4,63,63, 7,45,65, 7,45,64, 5,76, 6, 0, 0, 0, 5,79,92, 5,79,93,
+ 4,70,29, 7,51,21, 5,83,31, 7,64,28, 7,64,79, 7,68,38, 0, 0, 0, 0, 0, 0,
+ 6, 4,78, 6, 4,76, 6, 4,77, 5, 4,19, 6,17, 1, 6,11,24, 6,13,18, 6,17, 4,
+ 6,23,36, 6,17, 2, 6,17, 3, 6,23,38, 6,23,37, 0, 0, 0, 6,31,56, 0, 0, 0,
+ 0, 0, 0, 6,47, 1, 5,24,19, 6,40,60, 6,40,59, 0, 0, 0, 5,31,10, 0, 0, 0,
+ 6,60,60, 6,60,63, 6,60,61, 6,60,59, 0, 0, 0, 6,60,62, 0, 0, 0, 7,13,65,
+ 7,13,46, 4,48,18, 7,23,85, 7,31,53, 0, 0, 0, 7,31,52, 7,31,51, 7,38,82,
+ 7,38,80, 7,38,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,55,81, 7,59,46, 7,66,23,
+ 6, 3, 5, 6, 3, 4,15, 1,68, 6, 4,81, 6, 4,79, 0, 0, 0, 0, 0, 0,15, 4,13,
+ 6, 7,52, 5, 6,16, 6,11,27, 0, 0, 0, 6,11,26, 0, 0, 0, 0, 0, 0, 6,23,39,
+ 4,12,84, 4,12,83, 0, 0, 0, 0, 0, 0, 5,21,64, 6,31,61, 6,31,57, 6,31,58,
+ 15,20,56,15,20,57,15,20,58, 6,31,60, 6,31,59, 5,18,43, 6,40,61, 6,40,64,
+ 6,40,62, 6,40,63,15,26,78, 0, 0, 0, 6,50,49, 6,50,46, 6,50,48, 6,50,47,
+ 15,33,33, 4,35,28, 6,60,64, 7, 2,75, 7, 2,76, 7, 2,73, 7, 2,74, 5,45, 3,
+ 4,48,19, 0, 0, 0, 5,52,39, 7,13,68, 7,23,86, 7,31,54,15,71,52, 7,45,66,
+ 7,51,22, 5,83,33, 0, 0, 0,15,76, 7, 0, 0, 0, 6, 1,93, 5, 1,75, 4, 1,89,
+ 5, 2,65, 0, 0, 0, 4, 2,78, 5, 2,66, 5, 4,20, 6, 7,56, 5, 4,21, 6, 7,55,
+ 6, 7,57, 6, 7,59, 6, 7,54, 5, 4,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7,53,
+ 6, 7,58, 0, 0, 0, 5, 6,19, 6,11,29, 5, 6,17, 6,11,28, 5, 6,18, 5, 9,13,
+ 6,11,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9,19, 6,17, 6, 5, 9,16, 5, 9,14,
+ 6,17, 8, 0, 0, 0, 5, 9,18, 5, 9,17, 0, 0, 0,15,10,62, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,17, 7, 6,23,45, 4,12,89, 4,12,87, 4,12,92, 4,12,85, 5,13,43,
+ 5,13,41, 4,12,88, 4,12,90, 4,12,86, 4,12,91, 5,13,42, 6,23,41, 6,23,47,
+ 6,23,44,15,15,31,15,15,32, 0, 0, 0, 6,23,43, 6,23,48, 6,23,46,
+ /* plane 2, page 37 */
+ 0, 255, /* first, last */
+ 6,23,42, 4,17,54, 5,18,47, 6,31,72, 6,31,65, 0, 0, 0, 5,18,44, 5,18,49,
+ 5,18,46, 6,31,64, 5,18,48, 4,17,56, 6,31,71, 6,31,69, 6,31,66, 4,17,57,
+ 6,31,70, 5,18,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,31,68, 0, 0, 0, 6,31,63, 0, 0, 0, 6,31,67, 6,40,68,15,20,60, 4,23,38,
+ 5,24,22, 5,24,21, 5,24,27, 5,24,26, 5,24,23, 4,23,39, 6,40,65, 5,24,20,
+ 6,40,67, 5,24,24, 4,17,53,15,26,80, 0, 0, 0, 6,40,66, 0, 0, 0, 0, 0, 0,
+ 15,26,79, 5,24,25, 0, 0, 0, 5,31,12, 5,31,11, 6,50,50, 6,50,52, 6,50,55,
+ 6,50,51, 0, 0, 0, 0, 0, 0,15,33,34,15,33,35,15,33,36,15,33,37,15,33,38,
+ 15,33,39, 0, 0, 0, 0, 0, 0, 6,50,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,50,54,
+ 6,54,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,31,13, 4,29,18, 6,60,70,
+ 6,60,67, 5,37,70, 6,60,66, 4,35,30, 5,37,69, 4,35,33, 4,35,32, 6,60,65,
+ 5,37,72, 5,37,74, 5,37,68, 6,60,72, 6,60,73, 6,60,74, 5,37,71, 6,60,68,
+ 15,39,81,15,39,82,15,39,83,15,39,84,15,39,85, 0, 0, 0, 0, 0, 0, 6,60,69,
+ 0, 0, 0, 0, 0, 0, 4,41,68, 5,45, 4, 5,59,40, 4,41,67, 4,41,66, 5,45, 5,
+ 7, 2,77, 7, 2,79, 0, 0, 0,15,46,70,15,46,71, 0, 0, 0, 7, 2,78, 7, 2,80,
+ 0, 0, 0, 7,13,69, 5,52,40, 5,52,42, 7,13,71, 0, 0, 0, 7,13,70, 0, 0, 0,
+ 0, 0, 0,15,52,36,15,52,37, 7,13,72, 5,52,41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,59,39, 7,23,87, 4,54,16, 0, 0, 0, 0, 0, 0,15,60,63, 5,59,38, 5,65,64,
+ 7,31,55, 5,65,63, 7,31,56,15,62,62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,65,
+ 7,38,83, 7,38,85, 7,38,86, 7,45, 2, 7,38,84, 5,76, 7, 4,67,30, 4,67,29,
+ 15,69,10, 0, 0, 0, 7,45,67, 7,51,23, 5,79,94, 7,55,82, 4,74,39, 5,89, 8,
+ 0, 0, 0, 5, 1,17, 6, 2, 1, 4, 2,79, 5, 1,76, 6, 3, 6, 0, 0, 0, 0, 0, 0,
+ 15, 2,47, 0, 0, 0, 6, 4,85, 5, 2,67, 6, 7,64, 5, 2,73, 6, 7,61, 5, 2,68,
+ 6, 4,83, 6, 4,84, 5, 2,69, 6, 7,60, 0, 0, 0, 6, 7,62, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 7,65, 0, 0, 0, 6, 4,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2,72,
+ 5, 4,23, 5, 4,25, 4, 6,37, 6, 7,70, 6, 7,68, 6,11,38, 6, 7,71, 0, 0, 0,
+ 6,11,32, 6, 7,66, 6, 7,67, 6,11,36, 6, 7,69, 6, 7,72, 0, 0, 0, 3, 5,94,
+ 6, 7,73, 0, 0, 0, 0, 0, 0, 5, 4,26,15, 4,14,15, 4,15,15, 4,17,15, 4,18,
+ 15, 4,20,15, 4,21,15, 4,22,15, 6,87,15, 6,88,15, 6,89,15, 6,90,15, 6,91,
+ 15, 6,93,15, 6,94,15, 7, 1,15, 6,92, 6,11,37, 0, 0, 0, 6,11,33, 0, 0, 0,
+ 0, 0, 0, 6,11,34, 4, 4,13, 0, 0, 0, 0, 0, 0,15, 4,16, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 6,36, 5, 6,20, 6,11,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6,39,
+ /* plane 2, page 38 */
+ 0, 255, /* first, last */
+ 6,11,44, 4, 9,39, 6,17,15, 4, 6,43, 6,11,45, 6,17, 9, 5, 6,21, 6,17,12,
+ 6,11,47, 4, 6,42, 5, 6,23, 4, 9,24, 5, 6,22, 4, 9,35, 6,11,41, 5, 6,24,
+ 4, 6,49, 4, 9,36, 6,17,10, 6,17,11, 6,11,48, 6,11,39, 6,17,13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15, 6,85, 0, 0, 0, 0, 0, 0,15, 7, 2,15,10,80, 0, 0, 0,
+ 4, 9,38, 0, 0, 0, 0, 0, 0, 6,17,14, 0, 0, 0, 0, 0, 0, 6,11,40, 6,11,42,
+ 6,11,46, 0, 0, 0, 6,11,43,15,10,68, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,10,63,
+ 15,10,66,15,10,69,15,10,72,15,10,76, 6,23,59, 6,23,57, 6,17,18, 4, 9,41,
+ 5, 9,23, 0, 0, 0, 4, 9,34, 4,13, 9, 5,13,46, 5, 9,22, 6,17,25, 6,23,55,
+ 6,17,19, 4,12,93, 5,13,44, 6,17,21, 6,23,51, 4,13, 1, 6,17,24, 5, 9,20,
+ 4,12,94, 6,17,26, 6,17,17, 6,17,23, 6,23,54, 6,23,53, 4,13,10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,17,20,15,10,65,
+ 15,10,70,15,10,73,15,10,75,15,10,77,15,10,78,15,10,79,15,15,38,15,15,39,
+ 15,15,40,15,15,42, 6,23,50,15,15,36, 0, 0, 0, 0, 0, 0, 6,23,56, 0, 0, 0,
+ 15,10,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,13,45, 0, 0, 0,
+ 6,23,49, 5,13,50, 5,13,56, 5,13,59, 6,31,77, 6,23,67, 6,31,79, 6,31,75,
+ 6,31,80, 6,23,68, 5,13,53, 6,31,73, 4,13,14, 6,31,83, 5,13,54, 4,13, 6,
+ 5,18,61, 5,13,49, 5,13,60, 6,23,66, 6,23,61, 5,18,52, 6,23,63, 6,23,65,
+ 6,31,76, 6,23,64, 6,31,81, 4,13, 7, 5,13,48, 6,23,60, 5,18,51, 6,31,82,
+ 6,31,84, 5,18,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,13,47,
+ 0, 0, 0,15,15,33,15,15,34,15,15,35,15,15,41,15,15,43,15,20,61,15,20,63,
+ 15,20,64,15,20,68,15,20,69,15,20,70,15,20,71,15,20,72, 6,31,74, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23,69,
+ 6,23,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,13,52, 5,13,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,23,58, 6,40,81, 4,23,45, 5,18,57, 6,31,92, 4,23,43, 6,40,83,
+ 6,40,73, 5,24,53, 6,31,94, 6,40,82, 6,32, 2, 4,17,69, 5,13,51, 4,17,77,
+ 6,31,87, 6,40,78, 4,17,65, 5,24,31, 5,18,55, 5,18,58, 4,23,44, 6,31,89,
+ 5,18,60, 6,31,86, 6,31,78, 4,17,73, 5,24,28, 6,40,80, 5,18,62, 4,17,63,
+ 6,31,93, 6,31,91, 6,31,90, 6,40,70, 6,40,76, 5,24,30, 5,24,33, 6,40,84,
+ 5,18,53, 6,40,75, 6,40,86, 6,40,71, 6,40,69, 6,31,85, 5,24,32, 0, 0, 0,
+ 15,20,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,20,62,
+ 15,20,66,15,20,67,15,20,73,15,20,74,15,20,75,15,20,76,15,20,77,15,20,79,
+ /* plane 2, page 39 */
+ 0, 255, /* first, last */
+ 15,20,80,15,20,82,15,26,82,15,26,83,15,26,84,15,26,85,15,26,86,15,26,87,
+ 15,26,89,15,26,90,15,26,92,15,26,93,15,26,94,15,27, 1,15,27, 2,15,27, 5,
+ 15,27, 9,15,27,10,15,27,12,15,27,14, 0, 0, 0, 0, 0, 0, 6,40,72, 5,18,54,
+ 0, 0, 0, 0, 0, 0, 6,31,88,15,27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,20,78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,41, 4, 6,40,77, 6,32, 1, 0, 0, 0,15,27, 4,
+ 4,29,31, 5,24,42, 5,24,45, 5,24,50, 4,23,47, 4,23,55, 4,23,49, 6,50,61,
+ 6,41, 3, 5,24,48, 6,41, 2, 4,23,51, 5,24,54, 5,24,56, 5,24,35, 6,50,65,
+ 5,24,58, 5,31,19, 4,23,59, 5,24,51, 6,41, 1, 5,24,38, 6,40,91, 5,31,20,
+ 5,24,36, 5,24,52, 5,18,63, 6,50,56, 5,24,39, 4,29,22, 4,23,56, 5,24,57,
+ 5,24,49, 5,24,43, 5,31,17, 6,40,87, 5,24,47, 5,24,29, 6,40,94, 6,50,66,
+ 6,50,67, 6,50,58, 6,40,93, 5,24,55, 6,50,62, 6,50,64, 0, 0, 0, 5,31,15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,29,32, 4,23,50, 5,24,41,
+ 6,40,89,15,26,81,15,26,91,15,27, 3,15,27, 8,15,27,13,15,33,40,15,33,46,
+ 15,33,48,15,33,49,15,33,50, 0, 0, 0, 0, 0, 0, 6,50,60, 6,50,63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,50,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,40,90, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,27,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,24,46,
+ 0, 0, 0, 5,31,14, 5,24,44, 0, 0, 0,15,20,81,15,39,93, 5,31,28, 5,31,22,
+ 5,31,21, 6,50,75, 5,45, 6, 5,31,37, 6,60,79, 5,31,25, 5,31,31, 5,31,36,
+ 6,60,84, 6,50,79, 5,37,75, 0, 0, 0, 5,31,27, 6,60,76, 6,50,69, 5,31,24,
+ 5,31,29, 5,31,26, 6,50,57, 4,41,78, 6,60,86, 6,60,89, 5,31,35, 6,50,72,
+ 6,60,82, 4,35,47, 6,60,88, 6,60,87, 5,31,33, 5,37,77, 5,31,30, 6,60,81,
+ 6,60,78, 6,60,77, 5,31,23, 6,50,71, 0, 0, 0, 0, 0, 0, 6,50,77,15,33,42,
+ 15,33,43,15,33,44,15,33,45,15,33,47,15,33,51,15,39,86,15,39,87,15,39,89,
+ 15,39,90,15,40, 5,15,40, 8, 6,60,80, 6,60,85, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,31,32,15,33,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,60,83, 6,50,78, 0, 0, 0, 0, 0, 0,
+ 6,61, 3, 6,61, 7, 4,35,37, 4,35,36, 5,45, 7, 0, 0, 0, 6,60,92, 5,37,87,
+ 5,37,86, 5,37,83, 4,29,21, 6,60,91, 7, 2,82, 0, 0, 0, 7, 2,85, 5,45, 9,
+ 5,37,80, 5,37,79, 5,37,76, 5,37,81, 5,37,82, 5,37,89, 6,61, 5, 6,60,93,
+ 6,60,94, 6,50,74, 6,61, 2, 7, 2,84, 6,61, 1, 7, 2,87, 5,37,84, 5,37,88,
+ /* plane 2, page 40 */
+ 0, 255, /* first, last */
+ 7,13,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,35,51,15,39,88,15,39,92,15,39,94,15,40, 1,15,40, 3,
+ 15,40, 4,15,40, 6,15,46,73,15,46,74,15,46,75,15,46,76,15,46,77,15,46,78,
+ 15,46,79,15,46,83,15,46,85, 0, 0, 0, 7, 2,83, 0, 0, 0, 7, 2,88, 6,60,75,
+ 5,37,78, 6,60,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,45, 8, 0, 0, 0, 5,37,85, 0, 0, 0,
+ 0, 0, 0, 7,13,81, 4,41,70, 4,35,50, 7,13,75, 4,41,81, 7,13,77, 5,45,15,
+ 7,13,83, 4,41,74, 5,45,14, 7, 2,89, 5,45,19, 4,41,82, 7,13,85, 5,24,37,
+ 5,45,18, 5,45,21, 4,48,21, 4,48,22, 7, 3, 1, 5,45,20, 7,23,92, 5,45,16,
+ 5,52,46, 4,54,20, 7, 2,90, 7, 3, 2, 0, 0, 0, 0, 0, 0, 5,52,52, 5,45,11,
+ 5,45,13, 5,52,45, 5,45,12, 7,14, 2, 7,13,87, 7,13,86, 7, 2,94, 4,48,28,
+ 7,13,80, 7,13,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,40, 2, 0, 0, 0,
+ 0, 0, 0,15,46,80, 7,13,82, 0, 0, 0, 5,45,17, 7,13,76,15,46,81,15,46,82,
+ 15,46,84,15,46,86,15,52,39,15,52,40,15,52,42,15,52,43,15,52,49,15,52,51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,13,84, 5,52,43, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,16,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,93, 7, 5,81, 4,41,80,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,44, 5,52,47, 0, 0, 0,15,46,72,
+ 0, 0, 0,15,52,47, 5,52,48, 5,52,50, 7,13,91, 7,13,88, 5,52,53, 5,52,54,
+ 5,52,49, 7,13,94, 7,13,92, 7,13,93, 5,52,55, 4,48,29, 5,59,41, 7,14, 1,
+ 7,23,91, 7,23,93, 7,23,90, 7,24, 1, 5,59,43, 7,13,90, 7,23,89, 7,13,78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,52,45, 0, 0, 0,
+ 5,52,51, 7,24, 2,15,52,41,15,52,46,15,52,50,15,58, 5,15,58, 6,15,58,14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,58, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,59,42, 5,52,56,15,58,10,15,52,44, 7,23,88, 5,59,49, 4,54,21,
+ 4,54,17, 4,59,10, 5,59,46, 5,65,68, 5,65,66, 7,31,59, 7,24, 6, 0, 0, 0,
+ 4,59, 6, 5,59,45, 5,59,47, 7,24, 3, 7,24, 5, 5,59,48, 5,65,67, 7,31,58,
+ 5,65,69, 7,31,57, 7, 2,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,58,11,15,58,13,15,62,63,15,62,64,15,62,66,15,62,67,15,62,69,15,62,70,
+ 15,62,71, 0, 0, 0, 7,31,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24, 4,15,58, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,59, 7, 5,59,50, 7,38,89, 7,31,61, 5,65,72,
+ /* plane 2, page 41 */
+ 0, 255, /* first, last */
+ 7,45,68, 4,63,67, 4,63,66, 7,38,92, 5,65,73, 7,45,71, 4,59, 8, 5,65,74,
+ 7,39, 5, 7,39, 1, 7,38,88, 5,65,71, 7,38,94, 0, 0, 0, 5,71,77, 7,38,90,
+ 5,71,80, 7,38,87, 7,39, 2, 7,31,62, 0, 0, 0, 7,38,93, 5,71,78,15,62,68,
+ 5,71,79, 7,38,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,71,76,15,66,25, 7,39,10, 4,67,36,
+ 7,39, 7, 5,71,84, 7,39, 4, 5,76,10, 7,39, 9, 7,39, 6, 7,31,63, 5,71,85,
+ 4,67,31, 5,71,81, 5,76, 8, 7,39,11, 7,39, 3, 7,45,69, 5,71,87, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,66,26,15,66,24,15,66,27,15,66,28,15,66,29, 0, 0, 0,
+ 0, 0, 0, 7,45,70, 0, 0, 0, 5,65,70, 5,71,82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,69,11, 5,71,86, 5,76, 9, 7,51,25, 7,45,74, 4,67,33,
+ 7,45,73, 4,67,37, 7,51,24, 7,45,75,15,71,53, 0, 0, 0, 0, 0, 0, 7,59,47,
+ 4,70,30, 0, 0, 0, 5,76,11, 7,55,83, 7,55,84, 7,55,85, 7,51,27, 7,51,26,
+ 0, 0, 0, 7,51,28, 0, 0, 0, 0, 0, 0,15,73,34, 7,55,86, 7,59,48, 7,59,50,
+ 7,59,51, 7,59,49, 0, 0, 0,15,74,48,15,73,33,15,74,49,15,74,50, 7,59,53,
+ 5,87,58, 7,59,52, 7,62,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,74,51,15,75,39,15,75,40, 5,87,59, 7,62,70, 5,89, 9, 7,62,71,15,76, 8,
+ 0, 0, 0,15,76, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,77,82,15,76,92,15,76,93,
+ 5,91,30, 5,91,64, 0, 0, 0,15,77,20, 0, 0, 0, 0, 0, 0, 5, 2,74, 4, 2,82,
+ 6, 4,86, 0, 0, 0, 0, 0, 0, 6, 7,75, 5, 4,27, 6, 7,74, 6, 7,77, 0, 0, 0,
+ 0, 0, 0, 6, 7,76, 4, 6,50, 6,11,49, 6,11,56, 6,11,52, 6,11,54, 4, 6,51,
+ 6,11,53, 6,11,51, 6,11,55,15, 7, 4,15, 7, 3, 0, 0, 0, 6,17,29, 6,17,27,
+ 6,17,30, 6,17,32, 4, 9,44, 6,17,33, 6,17,31, 0, 0, 0,15,10,81,15,10,82,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,17,28, 6,23,71,
+ 5,13,63, 6,23,73, 5,13,62, 6,23,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,18,65,
+ 4,17,79, 6,32, 5,15,20,83,15,20,84, 0, 0, 0, 0, 0, 0, 6,32, 4, 5,18,64,
+ 6,41, 8, 6,41, 7, 6,41, 5, 6,41, 6, 4,23,60, 6,41, 9,15,27,15, 0, 0, 0,
+ 0, 0, 0, 5,24,59, 5,24,60,15,20,86, 4,29,36, 6,50,81, 5,31,39, 0, 0, 0,
+ 5,31,41, 0, 0, 0, 0, 0, 0,15,33,53, 4,29,33, 0, 0, 0, 0, 0, 0, 6,50,80,
+ 5,31,40, 0, 0, 0, 6,61, 9, 0, 0, 0, 6,61,10, 5,37,90, 5,37,92, 5,37,91,
+ 7, 3, 4, 5,37,93,15,40, 9,15,40,10, 6,61, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,45,22, 4,41,83, 4,41,84, 7, 3, 8, 7, 3, 7,
+ 7, 3, 5, 6,61,11, 7, 3, 3, 0, 0, 0, 0, 0, 0,15,46,91, 7, 3, 9, 7, 3, 6,
+ /* plane 2, page 42 */
+ 4, 255, /* first, last */
+ 15,46,87,15,46,88,15,46,90, 7, 3,10,
+ 7,14,10, 7,14, 5, 7,14, 4, 7,14, 7, 7,14, 6, 7,14, 9, 7,14, 8, 0, 0, 0,
+ 7,12,67, 7,17,80, 7,14, 3, 7,24, 7, 5,59,51,15,58,15, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,31,64, 7,39,13, 4,63,69, 0, 0, 0, 0, 0, 0, 7,39,14, 5,76,12,
+ 15,69,12, 5,80, 1, 0, 0, 0, 7,51,29, 6, 3, 7, 5, 1,77, 6, 4,87, 0, 0, 0,
+ 0, 0, 0, 6, 4,88, 4, 4,20, 0, 0, 0,15, 4,23,15, 4,24, 0, 0, 0, 5, 6,25,
+ 0, 0, 0, 0, 0, 0, 6,11,57, 0, 0, 0, 6,11,58, 0, 0, 0, 0, 0, 0, 6,17,35,
+ 6,17,34, 6,17,36, 5, 9,25,15,10,83,15,10,84,15,10,85, 6,17,38, 0, 0, 0,
+ 0, 0, 0, 6,17,37, 0, 0, 0, 0, 0, 0, 5, 9,24, 6,23,76, 6,23,74, 6,23,75,
+ 5,13,65, 0, 0, 0, 0, 0, 0, 5,13,64, 0, 0, 0, 6,32, 6,15,20,87, 0, 0, 0,
+ 0, 0, 0, 5,24,61, 5,24,63, 5,24,64, 0, 0, 0, 5,24,62, 5,31,42, 0, 0, 0,
+ 5,37,94, 4,35,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3,11, 0, 0, 0, 0, 0, 0,
+ 5,59,52, 0, 0, 0, 5,80, 2, 0, 0, 0, 0, 0, 0, 6, 3, 8, 5, 1,78, 0, 0, 0,
+ 6, 3, 9, 6, 3,10, 0, 0, 0, 5, 1,79, 5, 2,76, 4, 2,86, 6, 4,89, 0, 0, 0,
+ 5, 2,82, 5, 2,80, 5, 2,79, 5, 2,75, 5, 2,77,15, 2,48,15, 2,50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 2,81, 4, 4,23, 6, 7,83, 6, 7,86, 6, 7,85, 4, 6,55,
+ 5, 4,29, 6, 7,79, 4, 4,24, 4, 4,21, 6, 7,87, 5, 4,30, 4, 4,27, 6, 7,82,
+ 6,11,61, 6, 7,81, 6,11,69, 6,11,59, 6, 7,80, 5, 4,28, 6,11,60, 6, 7,84,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 4,27,15, 4,28,15, 4,29,15, 4,30,
+ 15, 4,31,15, 4,32,15, 4,33,15, 4,35,15, 4,36, 0, 0, 0, 0, 0, 0,15, 4,37,
+ 0, 0, 0,15, 4,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,11,62, 6,11,63, 6,11,65, 5, 6,27,
+ 5, 9,26, 0, 0, 0, 6,11,68, 6,17,40, 5, 6,29, 6,17,42, 5, 6,28, 6,17,41,
+ 6,17,39, 0, 0, 0, 6,11,66, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7, 6,15, 7, 7,
+ 15, 7, 8,15, 7, 9,15, 7,10,15, 7,11,15, 7,12,15, 7,13,15, 7,15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 6,30, 0, 0, 0, 6,17,50, 6,17,52, 4, 9,56, 4, 9,47,
+ 4, 9,48, 6,17,51, 6,23,77, 5, 9,31, 5, 9,34, 5, 9,33, 6,17,45, 5, 9,39,
+ 4,13,20, 4, 9,60, 5, 9,30, 5, 9,29, 5,13,67, 4, 9,51, 6,23,78, 5, 9,40,
+ 4, 9,58, 6,17,48, 5, 9,32, 5, 9,36, 6,17,46, 6,17,54, 6,17,43, 5, 9,35,
+ /* plane 2, page 43 */
+ 0, 255, /* first, last */
+ 5, 9,28, 0, 0, 0, 0, 0, 0, 6,17,53, 0, 0, 0, 0, 0, 0, 6,17,49,15,10,86,
+ 15,10,87,15,10,88,15,10,89,15,10,90,15,10,91,15,10,92,15,10,93,15,10,94,
+ 15,11, 1,15,11, 3,15,11, 4,15,11, 5,15,11, 6,15,11, 7,15,11, 8,15,11, 9,
+ 15,11,10,15,15,51,15,15,60,15,15,65, 0, 0, 0, 0, 0, 0, 6,17,44, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 9,27, 5,13,66, 5,13,68, 0, 0, 0, 0, 0, 0, 4,13,29,
+ 6,23,85, 4,13,24, 5,13,77, 5,13,75, 4,13,25, 4, 9,55, 4,13,21, 5,13,74,
+ 6,23,91, 6,23,80, 6,23,93, 6,23,83, 5,13,73, 6,23,82, 6,23,87, 4,13,22,
+ 6,23,88, 5,13,76, 5,13,69, 4,13,23, 5,13,71, 5,13,72, 4,13,26, 6,23,90,
+ 5,13,70, 6,17,55, 6,23,86, 6,32, 7, 6,23,89, 6,23,84, 5, 9,38, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,23,92, 6,23,94,15,15,44,15,15,45,15,15,46,15,15,47,
+ 15,15,48,15,15,49,15,15,50,15,15,53,15,15,54,15,15,55,15,15,58,15,15,59,
+ 15,15,61,15,15,62,15,15,64,15,15,66, 6,32, 8, 0, 0, 0,15,15,56, 0, 0, 0,
+ 6,23,79, 0, 0, 0,15,15,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,17,82, 4,17,83, 4,23,62, 5,18,73, 0, 0, 0, 6,32,17, 5,13,78,
+ 6,32,23, 5,18,67, 4,17,84, 4,18, 2, 4,17,86, 5,18,66, 4,17,93, 5,24,65,
+ 5,18,68, 6,32,20, 5,18,71, 6,32,21, 6,32,12, 6,32, 9, 4,18, 4, 6,41,15,
+ 6,41,10, 6,32,10, 5,18,69, 0, 0, 0, 6,41,13, 4,23,61, 6,32,15, 6,41,12,
+ 6,41,11, 5,18,72, 6,32,13, 6,41,14, 6,32,19, 0, 0, 0, 0, 0, 0, 6,32,16,
+ 4,17,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,32,14,15,20,88,
+ 15,20,89,15,20,90,15,20,91,15,20,92,15,20,94,15,21, 2,15,21, 3,15,21, 4,
+ 15,21, 5,15,21, 6,15,21, 7,15,21, 8,15,21, 9,15,21,10,15,21,11,15,21,12,
+ 15,21,14,15,21,13,15,21,15,15,21,16,15,27,17, 0, 0, 0,15,20,93, 0, 0, 0,
+ 5,18,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,27,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,24,75, 6,41,20, 4,23,73, 6,41,27, 6,41,22, 5,24,77, 6,41,33,
+ 5,24,84, 6,41,17, 4,29,49, 4,23,71, 5,24,66, 5,24,74, 4,23,63, 5,24,72,
+ 4,23,67, 5,24,73, 4,23,74, 5,24,70, 4,23,77, 5,24,79, 4,23,70, 6,41,34,
+ /* plane 2, page 44 */
+ 0, 254, /* first, last */
+ 6,41,35, 6,41,26, 5,24,81, 6,41,19, 6,41,38, 6,41,23, 5,24,80, 4,23,76,
+ 6,41,39, 6,41,18, 5,24,76, 5,24,78, 6,41,36, 5,24,68, 6,41,28, 6,41,37,
+ 6,41,32, 6,41,44, 6,41,31, 6,41,45, 6,41,40, 6,41,25, 5,24,82, 6,41,29,
+ 5,24,83, 5,24,71, 6,41,24, 6,41,43, 5,24,69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,50,83,15,27,16,15,27,18,15,27,20,15,27,21,15,27,22,15,27,23,15,27,24,
+ 15,27,25,15,27,26,15,27,27,15,27,28,15,27,29,15,27,31,15,27,32,15,27,34,
+ 15,27,35,15,27,36,15,27,37,15,27,38,15,27,40,15,27,41,15,27,42, 0, 0, 0,
+ 6,50,84, 0, 0, 0, 6,41,30, 6,41,41, 0, 0, 0, 6,41,21, 0, 0, 0, 5,24,67,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,27,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,31,50,
+ 6,50,91, 4,29,43, 4,29,41, 5,31,53, 4,29,38, 6,50,88, 4,29,45, 4,29,51,
+ 4,29,39, 4,29,50, 6,50,94, 5,31,49, 5,38, 1, 0, 0, 0, 5,31,43, 6,61,12,
+ 6,51, 5, 6,50,85, 6,51, 3, 6,51, 2, 5,31,45, 0, 0, 0, 5,31,51, 5,31,46,
+ 6,50,89, 6,51, 1, 5,31,48, 6,51, 4, 6,50,92, 0, 0, 0, 5,31,44, 6,50,90,
+ 5,31,47,15,33,54,15,33,55,15,33,56,15,33,57,15,33,58,15,33,59,15,33,60,
+ 15,33,61,15,33,62,15,33,64,15,33,65,15,33,67,15,33,68,15,33,69,15,33,70,
+ 15,33,71,15,33,73,15,40,16, 0, 0, 0, 0, 0, 0, 6,50,87, 6,50,93, 0, 0, 0,
+ 6,50,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,33,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,31,52, 0, 0, 0, 0, 0, 0, 6,61,22, 5,45,25, 5,38, 7, 5,38,10, 4,35,66,
+ 4,35,63, 6,61,28, 6,61,29, 6,61,14, 4,35,55, 6,61,31, 5,38, 6, 0, 0, 0,
+ 4,35,67, 5,45,24, 5,38, 9, 6,61,21, 4,35,57, 7, 3,15, 4,35,59, 4,35,58,
+ 7, 3,14, 7, 3,17, 0, 0, 0, 5,38, 4, 0, 0, 0, 4,35,69, 6,61,25, 6,61,30,
+ 6,61,26, 5,38, 8, 6,61,23, 5,38,11, 7, 3,12, 6,61,27, 6,61,19, 0, 0, 0,
+ 6,61,17, 5,38, 2, 4,35,64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,61,15, 6,61,20,15,40,11,15,40,12,15,40,13,15,40,14,15,40,15,
+ 15,40,19,15,40,20,15,40,21,15,40,23,15,40,24,15,40,26,15,40,27,15,40,25,
+ 15,40,28,15,40,29,15,40,30,15,40,31,15,40,32,15,40,33,15,40,34,15,40,35,
+ 15,40,36,15,40,37,15,40,39,15,40,40,15,40,41, 0, 0, 0,15,40,38,
+ /* plane 2, page 45 */
+ 0, 255, /* first, last */
+ 6,61,16,15,40,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 3,19, 7, 3,24, 5,45,28, 4,42, 5, 7, 3,29, 7, 3,23, 7, 3,25, 4,41,91,
+ 4,41,88, 5,45,29, 5,45,27, 7, 3,37, 4,41,93, 7,14,15, 4,42, 1, 0, 0, 0,
+ 5,45,33, 4,42, 6, 4,41,92, 5,52,57, 7,14,28, 7, 3,21, 7, 3,20, 7,14,13,
+ 7,14,11, 7, 3,36, 7,14,12, 7, 3,28, 5,45,32, 7,14,14, 5,45,31, 7, 3,27,
+ 7, 3,34, 7, 3,35, 0, 0, 0, 7, 3,30, 7, 3,33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,41,87, 0, 0, 0,15,40,17, 0, 0, 0, 0, 0, 0, 7, 3,18, 7, 3,31, 7, 3,32,
+ 15,46,92,15,46,93,15,46,94,15,47, 1,15,47, 2,15,47, 3,15,47, 6,15,47, 7,
+ 15,47, 8,15,47, 9,15,47,10,15,47,11,15,47,13,15,47,14,15,47,15,15,47,16,
+ 15,52,63, 0, 0, 0, 0, 0, 0,15,47, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,54,24,
+ 4,48,33, 7,14,21, 7,14,16, 5,52,58, 5,52,59, 7,14,30, 7,14,26, 7,14,18,
+ 7, 3,22, 4,48,30, 4,48,35, 4,48,32, 5,52,61, 4,48,31, 7,14,29, 4,48,38,
+ 7,14,27, 4,48,40, 4,48,34, 4,48,39, 7,14,25, 7,14,17, 7,14,32, 7,24, 9,
+ 7,14,24, 5,52,63, 5,52,60, 7,14,23, 7,24, 8, 7,14,19, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,31,15,52,53,
+ 15,52,54,15,52,55,15,52,56,15,52,57,15,52,58,15,52,59,15,52,60,15,52,61,
+ 15,52,62,15,52,64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,20, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,22,
+ 4,48,36,15,52,52, 0, 0, 0, 5,59,54, 7,24,17, 5,59,55, 7,24,22, 4,54,27,
+ 7,24,15, 7,24,21, 4,54,26, 7,24,20, 7,24,12, 5,59,56, 4,54,23, 5,59,53,
+ 7,24,10, 7,24,23, 7,24,16, 7,24,14, 7,24,18, 7,24,24, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,11, 7,24,13,15,58,16,15,58,17,
+ 15,58,18,15,58,19,15,58,20,15,58,21, 0, 0, 0, 7,24,19, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,59,19, 4,59,24,
+ 5,65,78, 5,65,75, 5,65,76, 5,65,77, 7,31,72, 7,31,71, 4,59,21, 4,59,23,
+ /* plane 2, page 46 */
+ 0, 254, /* first, last */
+ 5,71,90, 5,76,13, 7,31,73, 7,31,70, 4,59,20, 7,31,67, 7,31,69, 7,39,15,
+ 7,31,65, 7,31,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,62,72,15,62,73,
+ 15,62,74,15,62,77,15,62,78,15,62,79,15,62,81,15,62,82,15,62,84, 0, 0, 0,
+ 15,62,76,15,62,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,63,70, 4,63,72, 4,63,71, 4,63,73, 5,76,15,
+ 7,39,18, 7,39,20, 7,39,22, 5,71,91, 7,39,16, 5,76,14, 7,39,24, 4,63,75,
+ 7,39,21, 7,39,19, 7,39,17, 4,63,74, 5,71,89, 0, 0, 0, 0, 0, 0,15,66,30,
+ 15,66,31,15,66,32,15,66,33,15,66,34,15,66,35,15,66,36,15,66,37,15,66,38,
+ 15,66,41,15,69,15, 7,31,74, 0, 0, 0, 7,39,23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,66,39, 0, 0, 0, 5,76,18, 0, 0, 0, 4,70,31,
+ 7,45,77, 4,67,40, 0, 0, 0, 7,45,76, 4,67,41, 7,45,80, 4,67,42, 7,45,78,
+ 5,76,19, 5,76,16, 5,76,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,79,
+ 15,69,13,15,69,14,15,69,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,51,36, 7,55,87, 4,70,33, 7,51,31,
+ 7,51,35, 7,51,34, 4,70,34, 5,83,37, 7,51,33, 7,51,32, 0, 0, 0,15,71,54,
+ 0, 0, 0,15,71,55,15,71,56,15,71,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,55,88, 7,55,89, 5,83,36, 5,83,39, 5,80, 3, 7,55,90,
+ 5,83,34, 5,83,38, 7,55,92, 7,59,55, 7,51,30, 0, 0, 0, 0, 0, 0,15,73,35,
+ 15,73,36, 5,83,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,55,91, 7,59,56, 0, 0, 0,
+ 15,74,52,15,74,53,15,74,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,74, 5,87,61,
+ 7,62,73, 4,75,75, 7,62,75, 0, 0, 0, 0, 0, 0, 5,87,60, 7,62,72,15,75,41,
+ 15,75,42,15,75,43,15,75,44, 0, 0, 0, 7,66,24,15,76,10,15,76,11, 0, 0, 0,
+ 4,77,83, 7,67,51,15,76,65, 0, 0, 0, 7,70, 6, 4, 2,87, 4, 4,29, 4, 6,58,
+ 15, 7,17,15, 7,18,15, 7,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,17,56, 0, 0, 0,
+ 0, 0, 0, 6,24, 2, 5,15,60, 4,13,30, 6,24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,22,36, 0, 0, 0, 6,32,25, 0, 0, 0, 0, 0, 0, 6,32,24, 6,41,47, 6,41,46,
+ 15,27,44,15,27,45, 0, 0, 0, 0, 0, 0, 5,24,85, 6,51, 6,15,33,74, 6,51, 7,
+ 0, 0, 0, 0, 0, 0, 5,38,13, 6,61,32, 0, 0, 0, 7, 3,38, 7, 3,39, 0, 0, 0,
+ 5,52,64,15,52,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,27, 7,24,26, 5,59,57,
+ 0, 0, 0, 7,24,28, 7,45,81, 0, 0, 0, 5, 4,31, 6, 7,89, 5, 4,32, 6, 7,90,
+ 0, 0, 0, 5, 4,33, 6, 7,88, 6,11,72, 4, 6,64, 0, 0, 0, 5, 6,34, 5, 6,32,
+ 0, 0, 0, 4, 6,61, 6,11,76, 6,11,70, 0, 0, 0, 6,11,74, 6,11,73,
+ /* plane 2, page 47 */
+ 5, 255, /* first, last */
+ 6,11,71, 5, 6,31, 5, 6,33,
+ 4, 6,60, 4, 9,64, 6,17,57, 5, 9,44, 5, 9,43, 6,17,60, 6,17,62, 6,17,61,
+ 5, 9,41, 5, 9,42, 0, 0, 0, 0, 0, 0, 4, 9,62, 4, 9,63, 0, 0, 0, 0, 0, 0,
+ 6,17,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,24, 3, 6,24, 4, 6,24, 6, 5,13,82,
+ 6,17,63, 4,13,37, 6,24, 8, 5,13,80, 0, 0, 0, 6,24,10, 0, 0, 0, 5,13,79,
+ 5,13,84, 0, 0, 0, 6,24, 5, 0, 0, 0, 5,13,83, 5,13,81, 6,24, 9, 6,24, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,13,33, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,18,77, 6,32,32, 0, 0, 0, 4,18,14, 0, 0, 0, 6,32,26,
+ 6,32,27, 6,32,29, 5,18,79, 5,18,80, 4,18,16, 6,32,30, 6,32,28, 5,18,75,
+ 6,32,33, 4,18,17, 4,18,10, 4,18,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18, 9,
+ 5,18,78,15,21,17,15,21,18,15,21,19,15,21,20,15,21,21, 0, 0, 0, 5,18,74,
+ 6,32,31, 0, 0, 0, 0, 0, 0, 6,41,56, 0, 0, 0, 5,25, 2, 6,41,53, 4,23,90,
+ 4,23,91, 6,41,57, 0, 0, 0, 0, 0, 0, 6,41,52, 6,41,58, 5,24,86, 5,24,94,
+ 5,25, 1, 5,24,93, 5,24,87, 0, 0, 0, 6,41,54, 5,24,91, 6,41,49, 6,41,48,
+ 6,41,51, 0, 0, 0, 4,23,82, 4,23,83, 4,23,84, 5,24,88, 5,24,89, 5,18,76,
+ 0, 0, 0, 0, 0, 0, 6,41,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,15,
+ 5,24,90, 0, 0, 0, 5,31,55, 5,31,58, 5,31,60, 4,29,55, 4,29,63, 6,51,11,
+ 6,51,14, 6,51, 9, 0, 0, 0, 5,31,59, 6,51,16, 6,51,13, 0, 0, 0, 6,51, 8,
+ 4,29,64, 0, 0, 0, 5,31,54, 6,51,17, 5,31,57, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,29,62, 4,29,53, 4,29,54, 4,29,56, 5,31,56, 6,51,10,15,33,75,
+ 6,51,12, 0, 0, 0, 0, 0, 0, 5,18,81, 4,29,58, 6,53,64, 0, 0, 0, 5,38,20,
+ 6,61,41, 5,38,18, 6,61,33, 4,35,72, 5,38,17, 6,61,34, 5,38,15, 6,61,38,
+ 0, 0, 0, 5,38,23, 0, 0, 0, 5,38,21, 6,61,39, 6,61,37, 6,61,36, 6,61,40,
+ 6,61,35, 6,61,42, 5,38,19, 0, 0, 0, 4,35,71, 5,38,22, 6,61,43, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,40, 5, 5,45,34,
+ 5,45,39, 4,42,12, 7, 3,46, 7, 3,41, 0, 0, 0, 7, 3,40, 5,45,38, 0, 0, 0,
+ 7, 3,50, 7, 3,47, 7, 3,45, 5,45,37, 7, 3,48, 5,45,35, 5,45,36,15,47,17,
+ 7, 3,43, 7, 3,44, 0, 0, 0, 7, 3,42, 0, 0, 0, 0, 0, 0, 4,48,43, 7,14,34,
+ 7,14,38, 7,14,40, 0, 0, 0,15,52,66, 5,52,65, 7,14,43, 0, 0, 0, 0, 0, 0,
+ 7,14,39, 7,14,41, 7,14,33, 7,14,37, 7,14,44, 5,52,67, 7,14,42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,48,42, 5,52,68, 5,52,69, 5,52,70,15,52,67, 7,14,36,
+ 5,52,66, 7, 3,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,71, 7,24,30, 7,24,29,
+ /* plane 2, page 48 */
+ 0, 255, /* first, last */
+ 5,59,58, 5,59,62, 5,59,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,54,28, 0, 0, 0,
+ 0, 0, 0, 4,54,29, 5,59,59,15,58,23,15,58,24, 0, 0, 0, 7,24,31, 5,59,60,
+ 5,65,80, 7,31,76, 5,65,79, 0, 0, 0, 4,59,27, 7,31,77, 7,31,78, 0, 0, 0,
+ 4,59,25, 0, 0, 0, 7,31,75, 0, 0, 0, 0, 0, 0, 5,72, 1, 5,71,94, 0, 0, 0,
+ 5,71,92, 5,71,93,15,66,42, 5,76,20, 4,67,45, 5,76,21, 7,45,82, 4,67,43,
+ 7,45,85, 0, 0, 0, 7,45,84, 5,76,22, 7,45,86, 7,45,87, 4,70,36, 5,80, 5,
+ 0, 0, 0, 5,80, 6, 0, 0, 0, 5,83,40,15,73,37, 7,59,57, 5,85,75, 4,74,42,
+ 0, 0, 0, 0, 0, 0, 7,59,58, 0, 0, 0, 4,76,79,15,76,66, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15, 2,51,15, 4,38, 6,11,77, 0, 0, 0, 0, 0, 0,15,11,13,15,11,14,
+ 15,11,15, 0, 0, 0, 6,24,13, 6,24,14,15,15,69, 0, 0, 0, 6,32,34, 6,32,36,
+ 15,21,23,15,21,24, 6,32,35, 0, 0, 0, 0, 0, 0,15,27,46, 0, 0, 0, 5,31,61,
+ 15,33,76, 6,51,18,15,21,22, 0, 0, 0, 5,45,40, 7, 3,52, 7, 3,51, 5,45,41,
+ 15,47,19,15,47,20, 5,45,42, 7,14,45,15,58,25,15,62,85, 0, 0, 0,15,66,43,
+ 0, 0, 0,15,71,58, 0, 0, 0, 7,59,59, 6, 2, 2, 0, 0, 0,15, 7,20, 0, 0, 0,
+ 0, 0, 0, 6,17,64, 0, 0, 0, 4,13,40, 5,13,86, 5,13,85, 6,24,15, 5,18,82,
+ 15,21,25, 0, 0, 0, 6,32,38, 6,32,37, 6,41,61,15,32,18, 0, 0, 0, 6,41,59,
+ 6,41,60, 4,29,65, 6,61,44, 0, 0, 0, 5,31,62,15,33,77, 4,35,74, 0, 0, 0,
+ 0, 0, 0, 4,42,13, 7, 3,53, 0, 0, 0, 7,24,32, 0, 0, 0, 0, 0, 0, 4,63,76,
+ 0, 0, 0, 6, 2, 3, 0, 0, 0,15, 4,39, 6,11,79, 6,11,78, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,17,65, 0, 0, 0,15,15,70, 0, 0, 0, 0, 0, 0, 4,18,18, 6,32,40,
+ 6,32,39, 6,41,64, 6,41,68, 6,41,67, 5,25, 3, 6,41,70, 6,41,63, 6,41,62,
+ 6,41,66, 0, 0, 0, 4,23,92, 6,44,30, 0, 0, 0, 6,41,69, 4,29,66, 6,51,22,
+ 0, 0, 0, 6,51,20, 6,51,23, 0, 0, 0, 0, 0, 0, 5,31,63, 6,61,47, 0, 0, 0,
+ 6,61,46, 6,61,48, 3,39,17, 4,42,15, 6,61,45, 5,45,44, 0, 0, 0, 5,45,45,
+ 7,14,49, 7,14,48, 7,14,47, 7,14,50, 0, 0, 0, 0, 0, 0, 7,14,46, 0, 0, 0,
+ 4,48,45, 0, 0, 0, 7,24,33, 7,24,34, 7,31,79, 4,59,28, 0, 0, 0, 7,31,80,
+ 7,31,81, 7,39,25, 0, 0, 0,15,66,44, 7,45,88, 0, 0, 0, 7,55,93, 0, 0, 0,
+ 4, 4,34, 6, 7,91, 0, 0, 0,15, 7,21,15, 7,22, 5, 9,45, 6,17,68, 6,17,67,
+ 0, 0, 0,15,11,16, 6,17,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,13,42, 5,13,87,
+ 6,24,17, 6,24,19, 6,24,21,15,15,71,15,15,72,15,15,73,15,15,74, 6,24,18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18,19, 0, 0, 0, 4,18,21, 0, 0, 0, 6,32,42,
+ 15,21,26,15,21,27, 0, 0, 0, 6,32,41, 6,41,73, 5,25, 5, 5,25, 4, 6,41,72,
+ /* plane 2, page 49 */
+ 0, 255, /* first, last */
+ 6,41,74, 6,41,71,15,27,47, 0, 0, 0,15,27,48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,51,24, 5,31,64, 6,51,25,15,33,78,15,33,79, 0, 0, 0, 5,38,24, 5,38,26,
+ 6,61,50, 5,38,25, 0, 0, 0, 0, 0, 0, 7, 3,54, 0, 0, 0, 0, 0, 0,15,47,21,
+ 7,14,51, 5,52,72, 7,24,35, 0, 0, 0, 0, 0, 0, 5,59,63, 7,31,83, 5,65,81,
+ 4,59,29, 7,31,84, 7,31,82, 0, 0, 0, 7,39,26, 0, 0, 0, 7,51,37, 4,72,77,
+ 7,55,94, 0, 0, 0, 7,62,76, 7,64,80, 0, 0, 0, 0, 0, 0, 5, 4,34, 0, 0, 0,
+ 5, 9,46, 5,13,89, 5,13,88, 0, 0, 0, 4,23,93, 6,41,75, 6,51,26, 6,51,27,
+ 4,29,70,15,47,22, 0, 0, 0, 6, 3,12, 6, 3,11, 0, 0, 0, 6, 4,91, 5, 2,83,
+ 6, 4,90, 6, 4,92,15, 2,52, 0, 0, 0,15, 4,43, 0, 0, 0, 6, 7,92, 6, 7,93,
+ 6, 8, 5, 5, 4,35, 6, 8, 2, 6, 7,94, 6, 8, 4, 0, 0, 0, 6, 8, 3, 0, 0, 0,
+ 6, 8, 1,15, 4,40,15, 4,42,15, 4,44, 0, 0, 0, 0, 0, 0, 4, 4,36, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 6,40, 6,11,84, 6,11,83, 5, 6,41, 6,11,93, 5, 6,36,
+ 6,11,89, 5, 6,39, 6,11,90, 6,11,87, 5, 6,38, 5, 6,37, 6,11,85, 6,11,88,
+ 15, 7,23,15, 7,24,15, 7,25,15, 7,26,15, 7,27,15, 7,28,15, 7,29, 6,11,81,
+ 0, 0, 0, 6,11,91, 6,11,92, 6,11,82, 6,11,86, 0, 0, 0, 0, 0, 0, 5, 9,49,
+ 6,17,69, 6,17,70, 5, 9,48, 4, 9,70, 6,17,72, 6,17,73, 4, 9,72, 0, 0, 0,
+ 0, 0, 0,15,11,17, 0, 0, 0,15,11,18, 6,17,74,15,11,21,15,11,22, 0, 0, 0,
+ 0, 0, 0, 6,17,78, 6,17,76, 6,17,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,13,94, 6,24,26, 5,14, 1, 5,14, 2, 5,13,91, 5,14, 3,
+ 5,13,92, 5,13,90, 6,24,30, 6,24,24, 6,24,28, 5,13,93, 6,24,25, 0, 0, 0,
+ 6,24,29, 0, 0, 0, 0, 0, 0,15,15,75, 0, 0, 0, 0, 0, 0,15,15,77, 6,24,27,
+ 15,15,76, 6,24,33, 0, 0, 0, 6,24,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,18,83, 4,18,24, 4,24, 1, 6,32,51, 4,18,29, 6,32,46,
+ 6,32,43, 6,32,44, 6,32,48, 6,32,45, 6,32,53, 5,18,85, 6,24,32, 6,32,52,
+ 6,32,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,28, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,29,15,21,30,15,21,31,15,21,32,15,21,33,
+ 15,21,34,15,21,35,15,21,36,15,21,37,15,21,38,15,21,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,32,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,18,84, 6,41,81, 6,41,84, 4,18,28, 5,31,65, 5,25,10,
+ 6,41,79, 5,25, 7, 6,41,80, 5,25, 9, 5,25, 6, 0, 0, 0, 6,41,76, 6,41,77,
+ 4,24, 3, 6,41,86, 5,25,11, 4,24, 7, 0, 0, 0, 0, 0, 0, 6,41,78, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,41,85, 6,41,87,15,27,49,15,27,51,15,27,52,15,27,54,
+ /* plane 2, page 50 */
+ 0, 255, /* first, last */
+ 15,27,55,15,27,57,15,27,58,15,27,60,15,27,61, 0, 0, 0, 0, 0, 0,15,27,50,
+ 15,27,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,24, 6, 0, 0, 0, 4,24, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,41,82,
+ 5,25,12, 5,25, 8, 0, 0, 0, 0, 0, 0, 6,51,35, 5,31,67, 6,51,33, 6,61,51,
+ 6,51,34, 6,51,31, 6,51,36, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,27,59, 6,51,30,15,33,80,
+ 15,33,81,15,33,83,15,33,84,15,33,85,15,33,86,15,33,87,15,33,88, 0, 0, 0,
+ 15,33,89,15,33,90,15,33,91,15,33,93, 5,29,53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,51,37, 0, 0, 0, 6,51,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,31,68, 5,38,27, 5,38,31, 5,38,29, 5,38,30, 6,61,54, 5,38,32,
+ 5,38,35, 5,38,36, 4,35,76, 5,38,34, 5,45,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,40,42,15,40,43,15,40,44,15,40,45,15,40,46,
+ 15,40,47, 6,61,52, 5,38,28, 6,61,55, 6,61,57, 6,61,58, 0, 0, 0, 0, 0, 0,
+ 6,61,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,61,56, 7, 3,65, 7, 3,60, 7, 3,59, 7, 3,62, 5,45,50,
+ 0, 0, 0, 5,45,53, 7, 3,58, 7, 3,55, 7, 3,56, 0, 0, 0, 7, 3,66, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,47,23,
+ 15,47,25,15,47,26, 0, 0, 0, 0, 0, 0, 5,45,52, 7, 3,64,15,46,16, 0, 0, 0,
+ 0, 0, 0, 7, 3,61, 7, 3,63, 7, 3,57, 0, 0, 0, 5,45,49, 5,52,73, 5,52,75,
+ 7,14,55, 4,48,53, 0, 0, 0, 7,14,53, 7,14,59, 7,14,57, 7,14,61, 4,48,52,
+ 7,14,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,52,15,52,69,
+ 15,52,70,15,52,71,15,52,73,15,52,74, 7,14,56, 0, 0, 0, 5,45,47, 0, 0, 0,
+ 7,13,66, 0, 0, 0,15,52,72, 0, 0, 0, 0, 0, 0, 7,14,35, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,74, 7,14,54, 0, 0, 0, 0, 0, 0,
+ 15,47,24, 7,24,39, 5,59,64, 5,59,65, 7,24,40, 5,59,66, 0, 0, 0, 7,24,37,
+ 7,24,38, 0, 0, 0, 0, 0, 0, 7,24,41,15,58,26,15,58,27,15,58,28, 7,24,36,
+ 15,58,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,59,30, 5,65,82,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,83, 0, 0, 0, 7,31,85, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,62,86,15,62,87,15,62,88,15,62,89,15,62,91, 7,31,88,
+ 0, 0, 0, 0, 0, 0, 5,72, 3, 7,39,29, 7,39,28, 5,72, 2, 5,72, 4, 7,39,27,
+ 7,39,30, 0, 0, 0,15,66,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,76,23,
+ /* plane 2, page 51 */
+ 3, 254, /* first, last */
+ 15,69,17,15,69,18, 5,75,78, 0, 0, 0, 7,45,89,
+ 7,51,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,56, 1,15,73,38, 5,83,25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,83,41, 0, 0, 0, 0, 0, 0, 7,59,60, 5,87,62,
+ 7,62,77,15,75,45, 0, 0, 0, 0, 0, 0, 5,89,11, 0, 0, 0, 0, 0, 0, 7,68,39,
+ 0, 0, 0, 0, 0, 0,15, 4,45, 6,11,94,15, 7,31,15, 7,32, 6,12, 1, 5, 9,51,
+ 5, 9,50, 6,17,80,15,11,23,15,11,25, 6,17,79, 6,24,34, 0, 0, 0,15,15,79,
+ 15,15,80,15,15,81,15,15,82,15,15,83, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,41,
+ 15,21,42, 0, 0, 0, 0, 0, 0,15,27,63, 6,41,90, 6,41,89, 5,31,69, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,35,80, 6,51,38, 0, 0, 0, 5,45,55, 5,45,54,
+ 7, 3,67, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,52,75, 0, 0, 0, 0, 0, 0, 5,59,67,
+ 0, 0, 0, 7,31,90, 5,65,84, 7,31,89, 7,31,87, 0, 0, 0, 4,63,77, 0, 0, 0,
+ 7,45,90, 7,45,91, 0, 0, 0, 5,91,31, 7,70,30, 6, 3,13, 6, 4,93, 5, 4,36,
+ 6, 8, 9, 6, 8, 7, 6, 8, 8, 6, 8, 6, 6,12, 2, 5, 9,52, 4, 9,73, 4, 9,74,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,11,26, 6,17,81, 0, 0, 0, 6,24,35, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,43, 5,18,86, 6,32,57, 6,32,59, 6,41,93,
+ 6,41,92, 6,32,58, 5,25,13, 0, 0, 0,15,25,38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,27,65,15,27,66, 0, 0, 0, 6,51,39, 5,31,71, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,27,64,15,33,94,15,34, 1, 6,51,40, 6,61,61, 0, 0, 0, 0, 0, 0,
+ 6,61,62, 0, 0, 0, 7, 3,68, 4,42,20, 5,45,57, 0, 0, 0, 0, 0, 0, 4,42,19,
+ 15,47,27,15,47,28, 5,52,78, 5,52,76, 5,59,68, 0, 0, 0, 0, 0, 0, 5,52,77,
+ 15,52,77,15,52,78, 0, 0, 0, 7,24,43, 7,24,42,15,58,30, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,65,85, 0, 0, 0, 0, 0, 0,15,62,92, 7,31,91, 5,76,24, 0, 0, 0,
+ 0, 0, 0, 5,85,79, 5,87,63, 5, 1,40, 4, 1,46, 4, 1,93,15, 1,69, 0, 0, 0,
+ 5, 2,85, 6, 5, 2, 5, 2,84, 6, 4,94, 6, 5, 1,15, 2,54, 0, 0, 0, 4, 2,91,
+ 4, 2,90, 6, 8,12, 4, 4,41, 6, 8,10, 0, 0, 0, 6, 8,11,15, 4,46,15, 4,47,
+ 15, 4,52,15, 4,48,15, 4,50, 5, 4,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 8,13, 5, 4,37, 4, 4,37, 0, 0, 0, 4, 6,75, 5, 6,44, 4, 6,70, 5, 6,43,
+ 6,12,11, 5, 6,48, 5, 6,50, 6,12, 8, 6,12, 7, 6,12, 6, 5, 6,45, 5, 6,51,
+ 5, 6,47, 5, 6,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7,35, 0, 0, 0,15, 7,37,
+ 15, 7,38,15, 7,39,15, 7,41,15, 7,42,15, 7,43,15, 7,45,15, 7,47,15, 7,49,
+ 15, 7,52,15, 7,53, 6,12, 4, 6,12, 9, 0, 0, 0, 0, 0, 0, 5, 6,52, 0, 0, 0,
+ 6,12,12,15, 7,36, 0, 0, 0, 6,12,13, 0, 0, 0, 6,12,10,15, 7,40,
+ /* plane 2, page 52 */
+ 0, 255, /* first, last */
+ 15, 7,34, 6,12, 5, 0, 0, 0, 5, 6,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,13,60,
+ 6,17,84, 6,17,83, 4, 9,75, 5, 9,54, 6,17,85, 6,17,86, 5, 9,53, 5, 9,57,
+ 6,17,87, 5,14, 6, 5, 9,58, 5, 9,56, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7,51,
+ 15,11,27,15,11,28,15,11,29,15,11,31,15,11,32,15,11,33,15,11,34,15,11,35,
+ 15,11,36,15,11,37,15,11,38,15,11,39,15,11,41,15,11,42,15,11,43,15,11,44,
+ 15,11,45,15,11,46,15,11,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 9,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,32,60, 6,24,47, 6,24,51,
+ 6,24,43, 6,24,45, 6,24,38, 5,14, 7, 6,24,40, 6,24,37, 6,24,49, 4,13,48,
+ 6,32,61, 5, 9,55, 5,14, 9, 5,14,10, 6,24,36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,15,84,
+ 0, 0, 0,15,15,85,15,15,86,15,15,88,15,15,89,15,15,90,15,15,91,15,15,92,
+ 15,15,93,15,15,94,15,16, 1,15,16, 2,15,16, 3,15,16, 5,15,16, 6,15,16, 7,
+ 15,16, 9,15,16,10,15,16,11,15,16,12,15,16,14, 6,24,44, 0, 0, 0, 0, 0, 0,
+ 6,24,39, 0, 0, 0, 6,24,41, 4,13,51, 0, 0, 0, 6,24,46,15,16,16,15,16, 8,
+ 0, 0, 0, 4,13,58,15,16,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,14,12, 5,14, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,15,87, 6,24,50, 6,32,72,
+ 6,32,73, 6,32,63, 5,18,87, 5,19, 1, 5,25,22, 4,18,37, 4,18,32, 5,18,93,
+ 6,32,71, 6,42,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,32,67,
+ 15,21,44,15,21,45,15,21,47,15,21,48,15,21,49,15,21,50,15,21,51,15,21,52,
+ 15,21,53,15,21,54,15,21,56,15,21,57,15,21,58,15,21,59,15,21,60,15,21,61,
+ 15,21,62,15,21,63,15,21,64,15,21,65,15,21,66,15,21,67,15,21,69,15,21,70,
+ 6,32,68, 6,32,70, 6,32,69, 4,18,39, 6,32,66, 6,32,64, 0, 0, 0, 6,32,65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18,36, 5,19, 2,
+ 5,18,88, 5,18,91, 5,18,90, 5,18,92, 6,32,74, 0, 0, 0, 0, 0, 0,15,21,46,
+ 6,32,62, 4,24,22, 6,42,20, 5,25,21, 6,51,41, 4,24,14, 5,25,24, 6,42, 2,
+ 5,25,18, 4,24,11, 5,25,16, 5,25,20, 4,24,17, 6,42,13, 6,42,15, 5,25,26,
+ 6,42, 4, 6,42, 1, 5,25,23, 6,42,19, 5,25,28, 5,25,27, 6,42, 6, 4,24,16,
+ 6,42, 7, 6,42,10, 6,42,17, 5,25,32, 6,51,42, 5,25,29, 6,42,24, 6,42, 3,
+ 6,42, 5, 6,42,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,24,19,
+ 4,24,24, 6,42,22, 6,42,23,15,27,68,15,27,69,15,27,71,15,27,72,15,27,73,
+ 15,27,75,15,27,76,15,27,77,15,27,79,15,27,81,15,27,82,15,27,84,15,27,85,
+ 15,27,86,15,27,87,15,27,88,15,27,89,15,27,90,15,27,91,15,27,92,15,27,93,
+ /* plane 2, page 53 */
+ 0, 251, /* first, last */
+ 15,27,94,15,28, 2,15,28, 3,15,28, 4,15,28, 5,15,28, 6,15,28, 7,15,28, 8,
+ 15,28,10,15,28,11,15,28,12,15,28,13,15,28,14,15,28,15, 6,42, 9, 6,42,11,
+ 0, 0, 0, 6,42,12, 6,42,18, 5,25,34, 6,42,16, 6,42,25, 6,42, 8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,25,30, 5,25,33, 5,25,14, 5,25,15, 5,25,17,
+ 0, 0, 0, 6,51,46, 6,51,56, 4,29,87, 6,51,54, 4,29,84, 6,51,55, 5,31,79,
+ 5,31,74, 5,31,78, 5,31,75, 4,29,74, 6,51,59, 5,31,83, 6,51,65, 5,31,72,
+ 4,29,90, 5,31,84, 5,31,73, 6,51,53, 5,31,80, 5,31,77, 6,51,64, 4,29,83,
+ 6,51,57, 6,51,58, 6,51,61, 6,51,48, 4,29,80, 6,51,60, 5,31,76, 0, 0, 0,
+ 6,51,67, 6,51,47, 6,51,49, 6,51,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,34, 3, 0, 0, 0,15,34, 4,15,34, 5,15,34, 6,15,34, 7,15,34, 9,
+ 15,34,10,15,34,11,15,34,12,15,34,13,15,34,14,15,34,16,15,34,17,15,34,18,
+ 15,34,19,15,34,20,15,34,21,15,34,22,15,34,24,15,34,25,15,34,26,15,34,27,
+ 15,34,29,15,34,30,15,34,31,15,34,32,15,34,33,15,34,34,15,34,35,15,34,36,
+ 15,34,37,15,34,38,15,34,40,15,34,42,15,34,44, 0, 0, 0, 0, 0, 0, 6,51,45,
+ 6,51,50, 6,51,52, 4,29,89, 6,51,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,43,
+ 0, 0, 0, 0, 0, 0, 6,51,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,34, 2, 0, 0, 0, 0, 0, 0,15,34,15, 0, 0, 0,15,34,23, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,25,31, 5,31,82, 6,51,51,15,35,84, 0, 0, 0,
+ 5,38,46,15,34,43, 5,38,48, 4,35,91, 4,35,82, 5,38,45, 5,38,47, 6,61,73,
+ 5,38,53, 5,38,50, 7, 3,69, 0, 0, 0, 6,51,68, 5,38,39, 6,61,63, 5,38,52,
+ 5,38,38, 5,38,56, 6,61,66, 5,38,42, 5,38,51, 6,61,67, 4,35,86, 5,38,40,
+ 0, 0, 0, 5,38,41, 6,61,69, 5,38,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,38,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,40,55,15,40,56,15,40,57,15,40,58,
+ 15,40,59,15,40,60,15,40,61,15,40,62,15,40,63,15,40,64,15,40,65,15,40,66,
+ 15,40,67,15,40,68,15,40,69,15,40,70,15,40,71,15,40,72,15,40,73,15,40,74,
+ 15,40,75,15,40,76,15,40,77,15,40,78,15,40,79,15,40,81,15,40,82,15,40,83,
+ 15,40,85, 0, 0, 0, 0, 0, 0, 3,39,43, 6,61,74, 6,61,71, 0, 0, 0, 6,61,75,
+ 6,61,76, 0, 0, 0, 5,38,54, 5,38,55,
+ /* plane 2, page 54 */
+ 0, 255, /* first, last */
+ 15,40,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,61,68, 0, 0, 0, 6,61,70,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,40,48, 0, 0, 0,15,40,49,15,40,51,15,40,52,
+ 6,61,64, 6,61,77, 6,61,65, 0, 0, 0,15,40,54, 7, 3,72, 5,45,71, 5,45,62,
+ 4,42,27, 4,42,39, 5,45,59, 4,42,32, 7, 3,81, 7, 3,76, 7, 3,84, 5,45,75,
+ 5,45,69, 7, 3,80, 4,42,38, 5,45,63, 4,42,31, 5,45,68, 4,42,35, 4,42,30,
+ 4,42,21, 7, 3,83, 5,45,60, 4,42,42, 5,45,73, 7, 3,78, 5,45,67, 5,45,74,
+ 7, 3,73, 4,42,33, 5,45,61, 7, 3,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,42,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,42,37,
+ 0, 0, 0, 4,42,41, 7, 3,70, 7, 3,74,15,47,29,15,47,30,15,47,31,15,47,35,
+ 15,47,36,15,47,38,15,47,39,15,47,40,15,47,41,15,47,42,15,47,43,15,47,44,
+ 15,47,45,15,47,46,15,47,47,15,47,48,15,47,49,15,47,50,15,47,51, 0, 0, 0,
+ 0, 0, 0,15,47,32, 0, 0, 0, 7, 3,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,45,76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,45,72, 5,45,70, 7, 3,71, 7, 3,77, 5,45,64, 5,45,58, 5,45,66, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,48,59, 5,52,93, 7,14,73, 4,48,69, 4,48,56,
+ 5,59,69, 7,24,44, 7,14,64, 7,14,67, 5,52,91, 7,14,72, 7,14,82, 5,52,90,
+ 7,14,79, 7,14,66, 4,48,66, 4,54,44, 4,48,55, 7,14,63, 4,48,63, 5,52,89,
+ 7,14,71, 7,14,68, 5,52,81, 0, 0, 0, 5,52,87, 4,48,60, 7,14,78, 7,14,84,
+ 5,52,88, 4,48,61, 7,14,70, 7,14,75, 4,48,67, 5,52,80, 7,14,65, 5,65,91,
+ 5,52,85, 5,52,86, 5,52,82, 4,42,36, 7,14,83, 7,14,76, 7,14,69, 0, 0, 0,
+ 7,14,62, 5,52,92, 5,52,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,83,
+ 15,52,79,15,52,80,15,52,81,15,52,82,15,52,83,15,52,85,15,52,86,15,52,87,
+ 15,52,88,15,52,89,15,52,90,15,52,92,15,52,93,15,52,94,15,53, 1,15,53, 2,
+ 15,53, 4,15,53, 5,15,53, 6,15,53, 7,15,53, 8,15,53,11,15,53,12,15,53,13,
+ 15,53,14,15,53,15,15,53,16,15,53,18,15,53,19,15,53,20,15,53,21,15,53,22,
+ 15,53,23,15,53,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,80, 0, 0, 0,
+ 7,14,81, 0, 0, 0, 4,48,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,53, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,84,15,40,80, 0, 0, 0,15,47,33, 0, 0, 0,
+ 7,14,77, 4,54,35, 7,24,48, 7,24,46, 4,54,39, 7,24,50, 7,24,54, 5,59,74,
+ 5,59,75, 4,54,42, 4,54,38, 5,59,78, 7,24,51, 5,59,76, 0, 0, 0, 7,24,49,
+ /* plane 2, page 55 */
+ 0, 254, /* first, last */
+ 7,24,55, 5,65,92, 5,59,71, 4,54,45, 4,54,36, 7,24,57, 4,54,34, 5,59,73,
+ 7,24,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,59,70, 7,24,52,15,58,32,
+ 15,58,33,15,58,35,15,58,36,15,58,37,15,58,38,15,58,39,15,58,40,15,58,41,
+ 15,58,42,15,58,43,15,58,44,15,58,46,15,58,47,15,58,49,15,58,50,15,58,52,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,56, 5,59,77, 7,24,58, 7,24,45, 7,24,47,
+ 7,23, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,58,51, 0, 0, 0, 0, 0, 0,15,58,45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,59,79, 5,59,80, 0, 0, 0,15,53,17, 0, 0, 0, 0, 0, 0,15,58,48,
+ 0, 0, 0, 4,59,39, 5,65,88, 7,32, 7, 7,32, 3, 4,59,34, 7,32,11, 5,66, 4,
+ 5,65,93, 5,66, 6, 7,32, 9, 4,59,37, 5,65,90, 5,66, 2, 5,66, 7, 5,65,94,
+ 7,24,60, 5,66,11, 5,65,89, 4,59,35, 4,59,44, 4,59,38, 7,32,13, 7,32, 8,
+ 5,66, 3, 7,39,38, 5,66, 9, 7,32, 6, 4,59,43, 5,66, 8, 5,66, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,86, 0, 0, 0, 7,31,92,
+ 7,31,93,15,62,94,15,63, 2,15,63, 3,15,63, 4,15,63, 5,15,63, 6,15,63, 7,
+ 15,63, 8,15,63,10,15,63,11,15,63,12,15,63,14,15,63,15,15,63,16, 7,32, 1,
+ 0, 0, 0, 7,32, 5, 0, 0, 0, 7,32,12, 7,32,10, 0, 0, 0, 5,66, 1, 0, 0, 0,
+ 0, 0, 0,15,63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,66,10, 5,65,87,
+ 0, 0, 0, 7,32, 2, 0, 0, 0, 7,32, 4,15,63,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,72, 5, 7,39,35, 5,72, 8, 5,72,11, 5,72, 9, 7,39,34, 7,39,32, 5,72,13,
+ 7,39,33, 4,63,84, 7,39,40, 7,39,41, 5,72, 7, 5,72, 6, 7,39,37, 5,72,15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,39, 7,31,94,15,66,50,15,66,54,15,66,56,
+ 15,66,57,15,66,58,15,66,59,15,66,60,15,66,61,15,66,63,15,66,64,15,66,65,
+ 5,72,14, 0, 0, 0, 7,39,36, 0, 0, 0, 0, 0, 0, 7,39,31,15,66,52, 5,72,12,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,66,55,15,66,47, 0, 0, 0, 0, 0, 0,15,66,62,
+ 0, 0, 0, 0, 0, 0,15,62,93, 0, 0, 0, 4,67,51, 7,45,92, 5,76,31, 7,45,94,
+ 5,76,34, 5,72,16, 5,76,26, 5,76,25, 5,76,29, 7,45,93, 5,76,28, 5,76,33,
+ 5,76,27, 5,72,10, 5,76,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,76,30,15,69,19,15,69,20,15,69,21,15,69,22,15,69,23,15,69,25,15,69,26,
+ 15,69,27,15,69,28,15,69,29,15,69,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,67,50, 0, 0, 0, 0, 0, 0, 7,51,41,
+ 7,51,40, 0, 0, 0, 5,80,11, 5,80,13, 4,70,38, 5,80, 9, 7,51,45, 0, 0, 0,
+ 5,80, 8, 5,80,10, 5,80,12, 7,51,42, 4,70,37, 5,80,15, 7,51,46,
+ /* plane 2, page 56 */
+ 1, 255, /* first, last */
+ 5,80,18,15,71,59,15,71,60,15,71,61,15,71,62,15,71,63,15,71,64,
+ 15,71,65,15,71,66,15,71,67,15,71,68, 7,51,44, 0, 0, 0, 5,80,17, 5,80,16,
+ 7,51,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,80,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,56, 6, 5,83,46, 5,83,47, 5,83,44, 5,83,42, 4,72,79, 5,83,43,
+ 5,83,45, 7,56, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,73,39,15,73,40,15,73,41,
+ 15,73,43,15,73,46,15,73,47,15,73,48,15,73,49, 7,56, 4, 7,56, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,69, 0, 0, 0, 5,85,81,
+ 5,85,83, 5,87,64, 5,85,84, 7,59,64, 5,85,82, 7,59,65, 5,85,85, 7,59,63,
+ 5,87,65, 0, 0, 0, 0, 0, 0, 7,59,61,15,74,55,15,74,57, 7,59,62, 0, 0, 0,
+ 0, 0, 0, 5,85,86, 5,85,80, 0, 0, 0, 4,75,76, 7,62,78, 5,87,66, 7,64,81,
+ 15,75,46,15,75,47,15,75,48,15,75,51,15,75,52, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,62,79, 0, 0, 0, 0, 0, 0, 7,62,80,15,74,56, 0, 0, 0, 7,64,82, 0, 0, 0,
+ 5,89,13, 0, 0, 0,15,76,12, 7,64,83, 0, 0, 0, 5,89,12, 0, 0, 0, 5,89,14,
+ 15,75,50, 5,90, 9, 7,67,52, 7,64,84, 0, 0, 0, 4,77,53,15,76,13, 0, 0, 0,
+ 0, 0, 0,15,76,44,15,76,67, 7,67,44, 7,67,53, 0, 0, 0, 5,91,32, 7,68,40,
+ 7,68,41, 0, 0, 0, 7,69,59,15,77,15, 7,69,84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 5, 4, 4, 4,43, 6, 8,15, 6,12,14, 6, 8,18, 5, 4,39, 6, 8,17, 4, 4,42,
+ 0, 0, 0, 5, 6,60, 5, 6,59, 5, 6,56, 6,12,15, 4, 6,79, 6,12,16, 5, 6,61,
+ 4, 6,78, 5, 6,57, 5, 6,58, 5, 6,55,15, 7,54, 0, 0, 0, 0, 0, 0, 5, 9,63,
+ 6,17,90, 6,24,52, 6,17,92, 5, 9,66, 4, 9,85, 5, 9,65, 5, 9,62, 6,17,89,
+ 5, 9,60, 5, 9,64, 6,17,91, 5, 9,61, 0, 0, 0, 0, 0, 0,15,12,87, 6,24,55,
+ 6,24,56, 6,24,53, 5,14,19, 0, 0, 0, 5,14,13, 6,24,54, 6,32,75, 5,14,18,
+ 4,13,63, 5,14,15, 5,14,20, 5,14,17, 5,14,16,15,16,17, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,19, 5, 6,32,76, 0, 0, 0, 6,32,77, 0, 0, 0,15,21,71,
+ 15,21,72,15,21,73,15,21,74,15,21,75,15,21,76,15,21,77,15,21,78, 0, 0, 0,
+ 4,24,29, 5,25,39, 5,31,87, 4,24,26, 5,25,37, 6,42,28, 5,19, 4, 5,25,40,
+ 6,42,29, 5,25,36, 5,25,41, 6,42,30, 0, 0, 0, 5,25,38, 6,42,27,15,28,16,
+ 15,28,17, 6,42,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,78, 5,31,86, 5,31,85,
+ 5,31,90, 6,51,75, 5,31,89, 6,51,71, 6,51,70, 6,51,72, 6,51,73, 6,51,74,
+ 6,51,77, 5,31,88, 0, 0, 0,15,34,46, 6,56,58, 0, 0, 0, 0, 0, 0, 6,51,76,
+ 6,51,69,15,34,45, 5,38,60, 4,36,11, 5,38,62, 6,61,79, 6,61,78, 4,36,12,
+ 5,38,61, 4,36, 9, 6,61,85, 6,61,80, 5,38,58, 6,61,86, 6,61,84, 5,38,59,
+ /* plane 2, page 57 */
+ 0, 255, /* first, last */
+ 6,61,82, 6,61,81, 6,61,83, 6,51,79,15,40,86,15,40,88, 0, 0, 0, 5,38,57,
+ 5,45,78, 7, 3,93, 5,45,80, 5,45,81, 4,42,45, 7, 3,89, 7, 3,87, 7, 3,94,
+ 7, 3,86, 7, 3,90, 7, 3,91, 0, 0, 0, 5,45,79,15,47,52, 0, 0, 0, 7, 3,92,
+ 5,52,94, 7,14,86, 4,48,72, 0, 0, 0, 7,14,85,15,53,26,15,53,27, 0, 0, 0,
+ 7,24,62, 7,24,64, 5,59,81, 7,24,63,15,58,53, 7,24,61, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,66,12, 0, 0, 0, 0, 0, 0, 5,72,18, 5,72,17,15,66,66, 0, 0, 0,
+ 0, 0, 0, 5,80,22, 7,46, 3, 0, 0, 0, 5,80,21, 5,80,20, 4,72,80, 5,80,19,
+ 0, 0, 0, 5,83,48, 7,56, 9, 7,56, 7, 7,56, 8, 0, 0, 0, 5,87,67, 7,64,85,
+ 4,76,80, 4,77,54, 5, 1,18, 5, 1,80, 6, 3,14, 6, 5, 6, 0, 0, 0, 5, 4,42,
+ 6, 8,20, 6,12,17, 5, 4,41, 5, 4,43, 6, 8,19, 6,12,28, 6,12,20, 6,12,27,
+ 6,12,26, 6,12,22, 6,12,19, 6,12,24, 6,12,18, 6,12,23, 5, 6,62, 6,12,25,
+ 6,12,21, 5, 6,63, 0, 0, 0,15, 7,55,15, 7,56,15, 7,57, 0, 0, 0, 0, 0, 0,
+ 4, 6,82, 0, 0, 0, 4, 9,86, 5, 9,67, 0, 0, 0, 5, 8,21, 6,24,57, 6,24,60,
+ 5,14,21, 6,24,58, 6,24,62, 6,24,61, 0, 0, 0, 6,24,59, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,23,40, 5,19, 6, 6,32,80,15,21,79, 0, 0, 0, 0, 0, 0,
+ 6,32,79, 4,24,32, 4,24,30, 5,25,42, 5,25,43, 6,42,35, 4,24,33, 6,42,34,
+ 0, 0, 0, 6,42,36, 6,42,32, 6,42,37, 6,42,38, 6,42,33, 0, 0, 0, 5,31,92,
+ 6,51,80, 5,31,91,15,34,47, 6,58,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 2, 7, 4, 5, 7, 4, 3, 7, 4, 6,
+ 7, 4, 1, 7, 4, 4,15,47,53, 0, 0, 0, 7,14,90, 7,14,89, 7,14,87, 7,14,88,
+ 0, 0, 0, 7,24,65, 4,54,48, 0, 0, 0,15,58,54,15,58,55, 5,66,13, 5,66,14,
+ 7,32,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,83,49,
+ 0, 0, 0, 7,59,66, 7,59,67, 0, 0, 0, 0, 0, 0, 5, 1,81, 5, 1,41, 5, 2,86,
+ 6, 8,21, 4, 2,93, 6, 5, 7, 5, 4,44, 4, 4,45, 6, 5, 8, 0, 0, 0, 6, 8,22,
+ 6, 8,27, 6, 8,23, 4, 4,44, 6, 8,28, 5, 4,45, 6, 8,25, 6, 8,24, 6, 8,26,
+ 0, 0, 0, 6,12,31, 5, 6,64, 5, 6,70, 5, 6,65, 5, 6,68, 4, 6,83, 4, 6,84,
+ 5, 6,67, 4, 6,87, 6,12,29, 6,12,30, 6,12,32, 6,17,93, 5, 6,69, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 9,72, 4, 9,88, 4, 9,89,
+ 6,18, 6, 4, 9,87, 6,17,94, 5, 9,68, 5, 9,69, 5, 9,75, 5, 9,70, 5, 9,71,
+ 6,18, 5, 4, 9,90, 6,18, 2, 6,18, 3, 5, 9,74, 6,18, 4, 6,24,63,15,11,48,
+ 6,18, 1, 5, 9,76, 5,14,22, 4,13,67, 6,24,66, 5,14,27, 6,24,69, 5,14,28,
+ 5,14,24, 5,14,25, 0, 0, 0, 6,24,67, 6,24,70, 5,14,29, 5,14,23, 5,14,26,
+ /* plane 2, page 58 */
+ 0, 255, /* first, last */
+ 5,14,30, 6,24,64, 0, 0, 0, 6,24,65, 0, 0, 0, 5,19,11, 6,32,84, 5,19,10,
+ 6,32,83, 5,19, 7, 5,19, 8, 5,19, 9, 6,32,81, 4,18,43, 5,19,12, 6,42,41,
+ 6,32,85, 6,32,82,15,21,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,82, 6,42,42,
+ 5,25,51, 4,24,40, 6,42,43, 4,24,35, 5,25,46, 5,25,45, 5,25,47, 4,24,39,
+ 5,25,50, 5,25,52, 5,25,48, 5,25,44, 5,25,49, 6,42,44, 6,51,81, 0, 0, 0,
+ 6,42,40,15,28,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,84,
+ 0, 0, 0, 6,51,89, 5,31,93, 5,31,94, 6,51,86, 6,51,88, 4,30, 5, 6,61,88,
+ 6,51,90, 6,51,85, 0, 0, 0, 6,51,83, 0, 0, 0,15,34,48, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,80, 4,36,20, 4,36,14, 6,61,91, 6,61,92,
+ 4,36,15, 6,61,89, 0, 0, 0, 6,61,90, 6,61,13, 7, 4, 9, 4,42,49, 5,45,82,
+ 7, 4, 7, 5,45,85, 7, 4, 8, 7, 4,11, 5,45,84, 4,48,73, 7, 4,12, 7, 4,10,
+ 15,47,54, 5,45,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,91, 7,14,92, 5,53, 1,
+ 4,48,76, 5,53, 3, 5,53, 2, 7,14,94,15,53,28,15,53,29, 0, 0, 0, 0, 0, 0,
+ 7,24,68, 7,24,66, 5,59,83, 7,24,69, 7,24,67, 5,59,84, 0, 0, 0, 5,66,16,
+ 5,66,15, 4,59,45, 7,32,16, 7,14,93, 5,59,85, 0, 0, 0, 7,32,15, 5,72,19,
+ 0, 0, 0, 0, 0, 0, 5,80,23, 5,80,24, 7,51,47, 0, 0, 0, 7,56,10, 5,85,90,
+ 5,85,89, 0, 0, 0, 5, 6,72, 5, 6,71, 0, 0, 0, 6,18, 7, 6,18, 8, 0, 0, 0,
+ 5,14,31, 0, 0, 0, 0, 0, 0, 4,18,44, 4,18,45, 6,32,88, 6,32,89, 6,32,86,
+ 6,32,87,15,21,83,15,21,85,15,21,86,15,21,87, 6,32,91, 6,32,90, 5,19,13,
+ 0, 0, 0, 6,42,47, 0, 0, 0, 6,42,46,15,28,19, 0, 0, 0, 0, 0, 0,15,21,82,
+ 6,52, 1, 6,52, 2, 0, 0, 0, 6,51,93, 6,51,94, 6,52, 4,15,34,49,15,34,50,
+ 0, 0, 0, 6,52, 3, 6,51,92, 0, 0, 0, 5,32, 1, 5,32,91, 5,38,65, 4,36,22,
+ 6,62, 1, 4,36,23, 6,61,94, 6,61,93, 0, 0, 0,15,40,90, 5,45,86, 6,62, 2,
+ 7, 4,13, 4,42,50, 0, 0, 0, 7,15, 5, 7,15, 3, 7,15, 6, 7,15, 1, 7,15, 4,
+ 5,53, 4, 7,15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,53,30,15,53,31,15,53,32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,70, 7,24,71, 0, 0, 0, 0, 0, 0,
+ 4,59,46, 7,32,19, 5,66,18, 5,66,17, 0, 0, 0, 0, 0, 0, 7,32,17, 0, 0, 0,
+ 7,32,18, 4,63,88, 7,39,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46, 5, 7,39,45,
+ 0, 0, 0, 7,51,48, 4,74,45, 5,85,91, 7,59,68, 5,83,50, 7,62,83, 5,87,69,
+ 5,87,68, 7,64,86, 0, 0, 0, 7,67,54, 5, 1,82, 6, 8,29, 0, 0, 0, 6,12,33,
+ 6,18, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,24,71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,28,20, 5,32, 2, 4,42,51, 0, 0, 0,15,47,55,15,47,56,15,58,57,15,53,33,
+ /* plane 2, page 59 */
+ 0, 255, /* first, last */
+ 15,66,67,15,74,58, 5, 4,47, 6, 8,30, 6,12,37, 6,12,36, 5, 6,73, 0, 0, 0,
+ 6,24,72, 6,24,74, 6,24,73, 6,32,92, 6,32,93, 5,32, 3, 4,30, 6, 5,38,66,
+ 5,38,67, 6,62, 3, 7, 4,14, 7,15, 7, 7,15, 8, 5,53, 5, 7,39,46, 5,76,35,
+ 0, 0, 0, 0, 0, 0, 5,89,16, 5, 1,42, 4, 2,94, 0, 0, 0,15, 2,58,15, 2,59,
+ 0, 0, 0, 6, 8,32, 6, 8,31, 4, 4,46,15, 4,53,15, 4,54,15, 4,55,15, 4,57,
+ 15, 4,58, 5, 6,77, 5, 6,74, 5, 6,76, 5, 6,75, 6,12,39, 6,12,38,15, 7,58,
+ 15, 7,60,15, 7,61,15, 7,62,15, 7,63, 0, 0, 0, 5, 6,35, 0, 0, 0, 0, 0, 0,
+ 6,18,12, 5, 9,78, 5, 9,79, 5, 9,77, 5, 9,80, 5, 9,81, 6,18,13, 5, 9,83,
+ 6,18,15, 6,24,77, 6,18,14, 0, 0, 0, 5, 9,84, 6,18,11, 0, 0, 0, 5, 9,82,
+ 0, 0, 0,15,11,49,15,11,50,15,11,51,15,11,52,15,11,53,15,11,54,15,11,55,
+ 15,11,56,15,11,57,15,11,58,15,11,59,15,11,60,15,11,62, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,11,61, 0, 0, 0, 6,24,79, 5,14,33, 6,24,78, 4,13,73,
+ 5,14,35, 4,13,72, 6,24,76, 5,14,34, 0, 0, 0,15,16,18,15,16,19,15,16,20,
+ 15,16,21,15,16,22,15,16,23,15,16,24,15,16,25, 6,24,75, 5,14,32, 0, 0, 0,
+ 0, 0, 0, 6,33, 6, 4,18,54, 6,33, 1, 5,19,17, 6,33, 2, 6,33, 3, 5,19,14,
+ 6,33, 5, 5,19,18, 5,19,16, 5,19,15, 6,32,94, 6,33, 4,15,21,88,15,21,89,
+ 15,21,90,15,21,91,15,21,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,25,53, 4,24,45, 5,25,54, 4,24,48, 6,42,49, 6,42,51, 5,25,57, 5,25,56,
+ 5,25,58, 6,42,54, 6,42,48, 6,42,53, 5,25,55, 6,42,50, 0, 0, 0,15,28,26,
+ 15,28,21,15,28,23,15,28,24,15,28,25,15,28,27,15,28,29,15,28,31,15,28,32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,42,52,15,28,22, 0, 0, 0, 0, 0, 0, 5,25,60,
+ 6,52,14, 6,52,12, 4,30,11, 6,52, 7, 6,52,11, 4,30,10, 6,52, 8, 6,52, 5,
+ 6,52, 9, 6,52, 6, 6,52,13, 6,52,10, 6,52,15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,32, 4,15,34,51,15,34,53,15,34,54,15,34,55, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,52,16, 0, 0, 0, 0, 0, 0, 6,62, 9, 5,38,70, 5,38,69,
+ 6,62,10, 6,62,11, 6,62,13, 4,36,29, 6,62, 4, 4,36,30, 5,38,71, 4,36,27,
+ 0, 0, 0, 6,62,14, 6,62,15, 6,62, 6, 0, 0, 0, 6,62, 7,15,40,92,15,40,93,
+ 15,40,94,15,41, 1, 0, 0, 0, 6,62, 8, 5,38,73, 6,62,16, 0, 0, 0, 6,62, 5,
+ 0, 0, 0, 0, 0, 0, 6,62,12, 0, 0, 0, 4,42,54, 7, 4,19, 7, 4,23, 7, 4,21,
+ 4,42,53, 4,42,52, 5,45,89, 7, 4,20, 5,45,87, 5,45,88, 7, 4,17, 7, 4,18,
+ 7, 4,16, 7, 4,15, 7, 4,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4,24,
+ 7,15, 9, 5,53, 7, 7,15,10, 4,48,80, 5,53, 6, 4,48,83, 7,15,12,15,53,34,
+ /* plane 2, page 60 */
+ 0, 247, /* first, last */
+ 15,53,35,15,53,36,15,53,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,15,11, 0, 0, 0,
+ 0, 0, 0, 7, 4,25, 7,24,74, 4,54,53, 4,54,52, 7,24,73, 5,59,86, 0, 0, 0,
+ 7,24,72,15,58,58,15,58,59,15,58,60, 7,24,76, 0, 0, 0, 7,24,75, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,66,21, 5,66,20, 5,66,22, 0, 0, 0, 7,32,23, 7,39,47,
+ 7,32,21, 5,66,23, 7,32,20, 7,32,22,15,63,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,66,19, 0, 0, 0,15,63,18, 7,39,50, 5,72,20, 7,39,48, 7,39,49, 0, 0, 0,
+ 0, 0, 0,15,69,33, 7,46, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,70,39, 5,80,25,
+ 7,51,49,15,71,71, 0, 0, 0, 7,56,11, 5,83,51, 0, 0, 0,15,73,50, 5,85,92,
+ 7,59,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,68,42, 6,12,40, 0, 0, 0, 6,18,16,
+ 5, 9,85, 5, 9,86, 6,19,44, 6,33, 7,15,21,93, 0, 0, 0, 6,33, 8, 6,52,17,
+ 4,36,32, 7,15,13, 7,24,77, 4,59,49,15,58,61, 6, 5,10, 6, 5, 9, 0, 0, 0,
+ 15, 4,60, 6,12,43, 6,12,42, 6,12,41, 6,18,17, 0, 0, 0, 6,18,18,15,11,63,
+ 5, 9,87, 5,14,36, 0, 0, 0,15,21,94, 5,25,61,15,28,33, 6,52,18, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7, 4,27, 7, 4,26, 0, 0, 0, 0, 0, 0, 7,32,24, 7,51,50,
+ 0, 0, 0, 0, 0, 0,15, 1,71, 0, 0, 0, 6, 2, 4, 6, 5,11, 5, 1,83, 6, 5,12,
+ 15, 2,62,15, 4,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 3, 3, 6, 5,13, 5, 4,48, 6, 5,15, 6, 5,17, 0, 0, 0, 3, 4, 4,15, 2,60,
+ 15, 4,63,15, 4,64, 0, 0, 0, 6, 5,16, 0, 0, 0, 0, 0, 0, 6,12,45, 5, 4,50,
+ 6, 8,34, 5, 4,49, 5, 4,51, 4, 4,48, 6, 8,38, 6, 8,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,12,44, 6, 8,35, 6, 8,33,
+ 6, 8,37, 6, 8,40, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 4,65, 0, 0, 0,15, 4,62,
+ 15, 4,66,15, 4,67,15, 4,68,15, 4,69,15, 4,70,15, 4,71,15, 7,67,15, 7,68,
+ 15, 7,69, 0, 0, 0, 4, 7, 3, 5, 6,79, 6,18,19, 5, 6,82, 5, 6,83, 4, 7, 1,
+ 6,12,55, 4, 7, 5, 6,12,48, 4, 7, 4, 6,12,46, 5, 6,78, 5, 6,80, 6,12,56,
+ 5, 6,81, 6,12,58, 6,18,20, 0, 0, 0, 6,12,54, 6,12,60, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 6,92, 6,12,51,15, 7,64,15, 7,65,15, 7,66,15, 7,71,
+ 15, 7,72,15, 7,73,15, 7,74,15, 7,75,15, 7,77,15,11,68,15,11,71,15,11,76,
+ 6,12,50, 6,12,52, 6,12,53, 6,12,57, 0, 0, 0, 6,12,47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 9,88, 4, 9,92, 6,18,22, 5,10, 2, 6,18,27,
+ 6,18,30, 5, 9,89, 4,10, 2, 4,13,81, 5,10, 1, 5, 9,94, 6,18,26, 6,18,32,
+ 5, 9,90, 6,18,33, 5, 9,93, 6,24,80, 6,18,29, 6,18,28, 4,10, 3, 4, 9,93,
+ /* plane 2, page 61 */
+ 1, 255, /* first, last */
+ 6,18,31,15,11,64,15,11,65,15,11,66,15,11,67,15,11,69,15,11,70,
+ 15,11,72,15,11,73,15,11,74,15,11,75,15,11,77,15,11,78,15,16,26,15,16,29,
+ 15,16,36, 6,18,24, 4,10, 4, 0, 0, 0, 6,18,21, 6,18,23, 5,10, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,16,55, 4,13,78, 5,14,41,
+ 6,25,16, 6,25,14, 5,14,40, 5,14,39, 6,24,92, 5,14,42, 6,24,81, 6,24,91,
+ 4,13,77, 4,13,79, 6,25, 5, 6,24,86, 6,25, 6, 6,25,10, 6,24,87, 6,25, 9,
+ 6,24,94, 6,25, 8, 6,33,10, 6,33, 9, 4,18,70, 6,25, 4, 6,25,12, 5,14,37,
+ 6,25, 3, 6,24,83, 6,25,11, 6,24,88, 6,25,15, 0, 0, 0, 6,25,18, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,33,38,15,16,27,15,16,30,15,16,31,15,16,32,15,16,33,
+ 15,16,34,15,16,35,15,16,37,15,16,38,15,16,39,15,16,40,15,16,42,15,16,43,
+ 15,16,44,15,16,45,15,16,46,15,16,47,15,16,48,15,16,49,15,16,50,15,16,51,
+ 15,16,52,15,16,53,15,16,54,15,16,56,15,16,57,15,16,58, 6,24,89, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,25, 2, 0, 0, 0, 6,25,17, 0, 0, 0, 4,13,82, 0, 0, 0,
+ 6,25, 7, 6,24,93, 0, 0, 0, 0, 0, 0, 6,24,85, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,14,38, 0, 0, 0,15,22,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18,61,
+ 5,19,32, 4,18,59, 4,18,75, 6,33,20, 6,33,24, 6,33,28, 4,18,74, 6,33,35,
+ 4,18,65, 6,33,22, 4,18,69, 6,33,21, 6,33,37, 4,18,73, 5,19,19, 6,33,17,
+ 4,18,64, 4,18,71, 6,42,68, 5,19,31, 6,33,34, 5,19,30, 6,33,31, 4,18,57,
+ 4,18,63, 6,33,12, 4, 5,15, 6,33,27, 6,33,16, 6,42,70, 5,19,24, 0, 0, 0,
+ 5,19,33, 6,42,56, 6,42,57, 6,33,30, 6,33,36, 5,19,22, 4,18,66, 6,33,32,
+ 0, 0, 0, 5,19,27, 6,33,15, 6,33,18, 5,19,26, 5,19,21, 4,18,76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18,78, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,23, 6,33,29,
+ 15,22, 1,15,22, 2,15,22, 3,15,22, 5,15,22, 6,15,22, 7,15,22, 8,15,22,10,
+ 15,22,12,15,22,14,15,22,15,15,22,16,15,22,17,15,22,18,15,22,22,15,22,23,
+ 15,22,24,15,22,25,15,22,26,15,22,27,15,22,28,15,22,29,15,28,34,15,28,43,
+ 15,28,45,15,28,55,15,34,63, 6,42,55, 0, 0, 0, 6,33,19, 0, 0, 0, 6,33,23,
+ 0, 0, 0, 5,19,25, 6,33,26, 0, 0, 0, 6,33,25, 0, 0, 0, 6,33,39, 6,33,13,
+ 0, 0, 0, 6,33,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,20, 5,19,28, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,24,90, 6,42,66, 6,42,80, 4,24,52, 5,25,67,
+ /* plane 2, page 62 */
+ 0, 255, /* first, last */
+ 4,24,53, 6,42,61, 6,42,63, 5,25,71, 5,25,74, 5,25,66, 6,52,40, 5,25,76,
+ 6,42,58, 4,24,51, 5,19,34, 4,24,56, 6,42,76, 6,42,60, 5,25,72, 6,42,81,
+ 6,52,21, 6,42,71, 6,42,72, 6,42,78, 5,25,64, 6,52,20, 6,42,79, 4,30,12,
+ 5,25,63, 5,25,70, 5,25,69, 5,25,68, 6,42,74, 5,25,65, 6,52,19, 6,42,82,
+ 5,25,77, 6,42,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,28,36,15,28,37,15,28,38,15,28,40,15,28,41,15,28,42,
+ 15,28,46,15,28,47,15,28,48,15,28,49,15,28,50,15,28,51,15,28,52,15,28,53,
+ 15,28,54,15,28,56,15,28,57,15,28,59,15,28,60, 0, 0, 0, 6,42,73, 5,25,73,
+ 0, 0, 0, 6,42,75, 4,24,61, 0, 0, 0, 6,42,59, 6,42,64, 6,42,62, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,25,75,15,34,83, 0, 0, 0, 6,52,33, 5,32, 5, 4,30,33,
+ 6,52,24, 4,30,20, 6,52,27, 6,52,35, 4,30,27, 4,30,35, 4,30,30, 4,30,14,
+ 6,52,42, 5,32, 9, 5,32, 6, 4,30,32, 6,62,17, 6,52,34, 4,30,26, 5,32,15,
+ 0, 0, 0, 5,32,13, 4,30,17, 6,62,18, 4,30,34, 5,32,12, 5,32,14, 6,52,30,
+ 6,52,44, 7, 4,28, 6,52,39, 4,36,43, 6,52,31, 6,52,38, 6,52,23, 6,52,22,
+ 5,32,11, 5,32, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,30,29, 6,52,28, 6,52,29, 6,52,32,
+ 6,52,37,15,34,56,15,34,57,15,34,58,15,34,59,15,34,60,15,34,61,15,34,62,
+ 15,34,64,15,34,65,15,34,66,15,34,69,15,34,70,15,34,71,15,34,72,15,34,73,
+ 15,34,74,15,34,76,15,34,77,15,34,78,15,34,79,15,34,80,15,34,81,15,34,82,
+ 15,34,85,15,41, 2,15,41,30, 0, 0, 0, 5,32,10, 0, 0, 0, 0, 0, 0, 6,52,36,
+ 4,30,21, 6,52,45, 6,52,26, 0, 0, 0, 6,52,43, 0, 0, 0,15,41,15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,34,75,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,47,76, 0, 0, 0, 6,52,25, 7, 4,29, 0, 0, 0, 4,36,52,
+ 4,36,39, 4,36,40, 4,36,44, 5,38,75, 4,36,46, 5,38,74, 5,38,84, 5,38,86,
+ 4,36,37, 4,36,51, 6,62,36, 5,38,79, 6,62,33, 6,62,26, 4,36,49, 4,36,48,
+ 5,38,85, 5,38,82, 5,38,77, 7, 4,32, 7, 4,31, 5,38,87, 6,62,37, 4,36,47,
+ 6,62,25, 6,62,34, 5,38,80, 5,38,81, 4,36,33, 6,62,29, 5,45,90, 7, 4,30,
+ 6,62,20, 5,38,78, 6,62,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,38,83,
+ /* plane 2, page 63 */
+ 0, 255, /* first, last */
+ 15,41, 3,15,41, 4,15,41, 5,15,41, 6,15,41, 7,15,41, 8,15,41, 9,15,41,11,
+ 15,41,12,15,41,13,15,41,14,15,41,16,15,41,17,15,41,20,15,41,22,15,41,23,
+ 15,41,24,15,41,25,15,41,26,15,41,28,15,41,29,15,41,33,15,41,34,15,41,35,
+ 15,47,77, 7, 2,72, 4,36,34, 6,62,28, 0, 0, 0, 6,62,35, 0, 0, 0, 6,62,21,
+ 5,38,76, 6,62,19, 6,62,23, 6,62,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,41,27, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,62,22, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,41,10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4,66, 7, 4,50, 7, 4,45, 4,42,64, 7, 4,58,
+ 7, 4,52, 7, 4,44, 4,42,69, 4,42,71, 5,46, 5, 0, 0, 0, 7, 4,67, 7, 4,46,
+ 7, 4,48, 7, 4,54, 4,42,60, 7, 4,55, 7, 4,41, 5,46, 1, 7, 4,69, 7, 4,39,
+ 7, 4,36, 4,42,70, 5,45,91, 5,46, 4, 7, 4,68, 4,42,59, 7, 4,59, 4,42,58,
+ 7, 4,57, 5,45,94, 7, 4,35, 7, 4,71, 5,46, 3, 5,45,93, 7, 4,51, 7, 4,34,
+ 7,26,73, 7, 4,37, 7, 4,72, 5,46, 2, 7, 4,33, 7, 4,62, 7, 4,70, 5,46, 6,
+ 5,46, 8, 0, 0, 0, 0, 0, 0, 5,45,92, 4,42,62, 7, 4,63, 7, 4,43, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4,49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,46, 7, 7, 4,60,15,47,57,15,47,58,
+ 15,47,59,15,47,60,15,47,61,15,47,62,15,47,63,15,47,66,15,47,67,15,47,68,
+ 15,47,69,15,47,70,15,47,71,15,47,72,15,47,74,15,47,75,15,47,79,15,47,80,
+ 15,47,81,15,47,82,15,47,83,15,47,84,15,47,85,15,47,86,15,47,87,15,47,88,
+ 15,47,91,15,47,92,15,53,49, 7, 4,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 4,64, 7,15,16, 4,42,67, 7, 4,38, 7, 4,61, 7, 4,40, 7, 4,42, 0, 0, 0,
+ 15,53,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,47,94,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,41,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,48,92, 5,53,21, 5,53,20,
+ 5,53, 8, 5,53, 9, 5,53,11, 7,15,19, 5,53,16, 7,15,39, 7,15,32, 7,15,26,
+ 4,48,89, 7,15,25, 4,48,94, 5,53,19, 7,15,29, 7,15,17, 7,15,23, 7,15,38,
+ 7,15,27, 7,15,24, 7,15,35, 7,15,22, 7,15,18, 5,53,17, 5,53,10, 5,59,87,
+ 7,15,28, 7,15,41, 5,53,12, 5,59,89, 5,53,18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,15,15, 7,15,20, 7,15,30, 7,15,33,15,53,38,15,53,40,15,53,41,
+ 15,53,43,15,53,44,15,53,47,15,53,48,15,53,50,15,53,51,15,53,52,15,53,53,
+ /* plane 2, page 64 */
+ 0, 254, /* first, last */
+ 15,53,55,15,58,77, 0, 0, 0, 0, 0, 0, 5,53,15, 7,15,31, 7,15,37, 7,15,40,
+ 7,15,42, 0, 0, 0, 0, 0, 0, 7,15,14, 0, 0, 0, 0, 0, 0, 7,15,36, 0, 0, 0,
+ 0, 0, 0, 4,49, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,47,65,
+ 15,58,70,15,58,63, 5,52,26, 5,59,92, 4,54,58, 4,54,63, 5,59,90, 7,24,90,
+ 7,24,78, 4,59,50, 5,59,91, 5,59,88, 7,24,80, 7,24,86, 7,24,79, 7,24,89,
+ 7,24,84, 7,24,83, 5,66,24, 7,24,85, 7,24,91, 5,59,93, 7,24,87, 5,53,23,
+ 0, 0, 0, 3,53,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,88,15,58,64,
+ 15,58,65,15,58,66,15,58,67,15,58,68,15,58,69,15,58,71,15,58,73,15,58,75,
+ 15,58,80, 7,24,82, 5,59,94, 0, 0, 0, 7,24,92, 7,24,81, 0, 0, 0, 0, 0, 0,
+ 15,53,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,58,76,
+ 0, 0, 0, 0, 0, 0,15,58,79, 0, 0, 0,15,53,39,15,53,45,15,58,62, 7,15,21,
+ 0, 0, 0, 5,66,31, 5,66,38, 5,66,37, 4,59,61, 5,66,29, 5,66,25, 5,66,34,
+ 7,32,32, 7,32,38, 4,59,57, 5,66,43, 5,66,36, 7,32,28, 5,66,33, 5,66,42,
+ 4,59,56, 5,66,35, 7,32,39, 5,66,27, 7,32,33, 5,66,32, 7,32,40, 7,32,26,
+ 4,59,63, 4,59,53, 7,32,37, 7,32,36, 7,32,30, 5,66,26, 4,59,51, 5,66,28,
+ 5,66,30, 5,66,41, 5,66,44, 5,66,39, 7,32,31, 4,59,60, 7,32,34, 7,39,63,
+ 0, 0, 0, 0, 0, 0, 5,66,45, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,63,19,15,63,21,
+ 15,63,22,15,63,23,15,63,25,15,63,26,15,63,27,15,63,28,15,63,29,15,63,30,
+ 15,63,31,15,63,32,15,63,33,15,63,34,15,63,35,15,66,68,15,66,69,15,66,76,
+ 0, 0, 0, 7,39,62, 7,32,29, 7,32,25, 0, 0, 0, 7,32,35, 7,32,27, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,63,20,
+ 15,58,74,15,58,78, 5,66,40, 7,39,69, 7,39,60, 7,39,66, 4,63,92, 4,63,90,
+ 7,39,51, 5,72,22, 7,39,54, 7,39,52, 0, 0, 0, 7,39,59, 7,39,58, 7,39,53,
+ 5,72,21, 7,39,57, 7,39,61, 0, 0, 0, 5,76,37, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,39,65,15,66,70,15,66,71,15,66,72,15,66,73,15,66,74,
+ 15,66,77,15,66,78,15,66,79,15,66,80,15,66,81, 7,39,55, 0, 0, 0, 7,39,64,
+ 7,39,70, 7,39,68, 7,39,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,76,39, 5,76,42, 5,76,43, 7,46,11, 4,67,57, 0, 0, 0, 4,67,61,
+ 7,46,10, 7,46, 9, 5,76,40, 0, 0, 0, 4,67,60, 7,46,14, 4,67,55, 4,67,56,
+ 4,67,54, 7,46,13, 0, 0, 0, 5,80,27, 5,76,41, 5,76,44, 7,46,15,
+ /* plane 2, page 65 */
+ 5, 255, /* first, last */
+ 15,69,34,15,69,35,15,69,36,
+ 0, 0, 0, 7,46,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,70,40, 5,80,32,
+ 7,51,54, 5,80,31, 0, 0, 0, 5,80,29, 4,70,43, 7,51,52, 5,80,28, 7,51,57,
+ 7,51,51, 4,70,45, 7,51,63, 5,80,33, 7,51,53, 7,51,58,15,71,72,15,71,73,
+ 15,71,74,15,71,75,15,71,77,15,71,78,15,71,79, 0, 0, 0, 7,51,59, 0, 0, 0,
+ 7,51,60, 7,51,61, 7,51,62, 5,80,26,15,71,80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,73,53, 7,56,14, 7,51,55, 7,56,15, 5,83,52,
+ 5,80,34, 7,56,13, 5,83,53, 7,56,17, 0, 0, 0, 4,72,82, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,56,18,15,73,51,15,73,52, 0, 0, 0, 7,56,19, 7,56,16, 7,56,12,
+ 0, 0, 0, 0, 0, 0, 5,86, 1, 5,86, 2, 7,59,73, 7,59,72, 5,85,94, 0, 0, 0,
+ 0, 0, 0, 7,59,71, 5,85,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,74,59,15,74,60,15,74,61, 7,59,74, 0, 0, 0, 7,59,70, 0, 0, 0, 0, 0, 0,
+ 7,62,86, 5,87,71, 7,62,87, 4,76,81, 7,62,84, 0, 0, 0, 5,87,70, 0, 0, 0,
+ 7,62,85, 4,76,82, 7,64,89, 7,64,88, 0, 0, 0, 7,64,87,15,76,15, 0, 0, 0,
+ 7,66,25, 4,77,56, 5,90,11, 5,90,10, 4,77,57, 0, 0, 0, 0, 0, 0, 4,77,84,
+ 5,90,73, 5,90,74, 0, 0, 0, 7,67,55, 7,68,43, 5,91,33,15,77, 6, 7,69,60,
+ 5,92,28, 0, 0, 0, 6, 3,15, 6, 5,19, 4, 3, 4, 4, 3, 5, 6, 5,18, 0, 0, 0,
+ 15, 2,63,15, 2,64,15, 2,65, 6, 5,20, 0, 0, 0, 4, 4,51, 4, 4,52, 5, 4,52,
+ 6, 8,44, 5, 4,53, 5, 4,55, 0, 0, 0,15, 4,75,15, 4,76,15, 4,77,15, 4,80,
+ 15, 4,82, 0, 0, 0, 6, 8,43, 0, 0, 0, 0, 0, 0, 5, 6,84, 4, 7, 8, 5, 6,85,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7,79,15, 7,80,
+ 15, 7,81,15, 7,83,15, 7,84,15, 7,85,15, 7,86,15, 7,87, 0, 0, 0, 6,12,63,
+ 15, 7,82, 6,12,62, 4, 7,10, 0, 0, 0, 5, 4,54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,10, 5, 6,18,44, 5,10, 6, 6,18,36,
+ 5,10, 7, 6,18,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,18,38,
+ 15,11,79,15,11,80,15,11,81,15,11,82,15,11,83,15,11,84,15,11,85,15,11,86,
+ 15,11,87,15,11,88,15,11,89,15,11,91,15,11,92,15,11,93,15,11,94,15,12, 1,
+ 15,12, 3, 4,10, 9, 6,18,37, 6,18,35, 0, 0, 0, 6,18,39, 0, 0, 0, 6,25,26,
+ 5,10, 8, 6,18,42,15,12, 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, 6,18,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,47,
+ 5,14,46, 6,25,22, 6,25,25,15,16,74, 4,18,79, 6,25,23, 4,13,84, 6,25,20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,43,15,16,61,15,16,62,
+ /* plane 2, page 66 */
+ 0, 250, /* first, last */
+ 15,16,63,15,16,64,15,16,65,15,16,66,15,16,67,15,16,68,15,16,69,15,16,70,
+ 15,16,72,15,16,73,15,16,75,15,16,76,15,16,78,15,16,79,15,16,80,15,16,81,
+ 15,16,82, 5,14,44, 6,25,21, 0, 0, 0, 0, 0, 0, 6,25,27, 6,25,28, 0, 0, 0,
+ 15,16,71, 0, 0, 0, 0, 0, 0,15,16,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,25,24, 5,14,45, 0, 0, 0, 6,33,43, 4,18,84, 5,19,36,
+ 6,33,47, 4,18,83, 4,18,85, 6,33,46, 6,33,52, 6,33,49, 6,33,45, 6,33,44,
+ 6,42,83, 6,33,50, 6,33,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,33,51,15,22, 4,15,22,30,15,22,31,15,22,32,15,22,33,15,22,35,
+ 15,22,36,15,22,37,15,22,38,15,22,39,15,22,41,15,22,42,15,22,44,15,22,45,
+ 15,22,46,15,22,48, 6,33,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,33,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,22,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,35, 0, 0, 0, 5,19,37,
+ 0, 0, 0, 6,33,53, 4,24,73, 6,42,88, 6,33,42, 5,25,81, 5,25,79, 6,42,94,
+ 0, 0, 0, 6,43, 1, 5,25,78, 6,42,85, 4,24,70, 6,42,90, 6,42,84, 6,42,93,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,24,67, 5,25,80, 6,42,87,15,28,62,15,28,63,15,28,64,15,28,65,
+ 15,28,66,15,28,67,15,28,68,15,28,70,15,28,71,15,28,72,15,28,73,15,28,75,
+ 15,28,76,15,28,77,15,28,78,15,28,79,15,28,80,15,28,81,15,28,82,15,28,85,
+ 15,28,87,15,28,88,15,28,89,15,28,90,15,28,91,15,28,92,15,29, 1, 6,42,89,
+ 6,42,92, 4,24,71, 0, 0, 0, 6,42,86, 6,42,91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,28,74, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,25,82,
+ 0, 0, 0, 0, 0, 0, 5,32,20, 0, 0, 0, 6,52,58, 6,52,56, 5,32,16, 6,52,54,
+ 6,52,61, 4,30,39, 6,52,55, 4,30,36, 6,52,59, 6,52,62, 4,30,37, 5,32,18,
+ 6,52,51, 6,52,67, 6,52,63, 6,52,68, 5,32,21, 0, 0, 0, 6,52,60, 6,52,66,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,34,86,15,34,89,15,34,91,15,34,92,15,34,93,
+ 15,35, 1,15,35, 2,15,35, 3,15,35, 5,15,35, 6,15,35, 7,15,35, 8,15,35, 9,
+ 15,35,10,15,35,11,15,35,13,15,35,14,15,35,16,15,35,19,15,35,20,15,35,21,
+ 15,35,22,15,35,23,15,35,24,15,35,25,15,35,26,15,35,27,15,35,29,15,35,30,
+ 6,52,49, 6,52,50, 6,52,53, 0, 0, 0, 6,52,70, 0, 0, 0, 0, 0, 0, 4,30,42,
+ 6,52,65, 6,52,69, 0, 0, 0, 6,58,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,35,12,
+ /* plane 2, page 67 */
+ 1, 255, /* first, last */
+ 5,32,19, 0, 0, 0, 5,32,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,41,52,
+ 6,62,49, 6,62,48, 5,38,94, 6,62,42, 5,39, 2, 4,36,53, 5,38,92, 5,38,91,
+ 5,38,90, 7, 4,80, 7, 4,74, 6,62,38, 5,39, 1, 6,62,39, 6,62,40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,38,89, 6,62,43, 6,62,47,15,41,36,15,41,37,
+ 15,41,38,15,41,39,15,41,41,15,41,42,15,41,44,15,41,45,15,41,46,15,41,47,
+ 15,41,48,15,41,49,15,41,50,15,41,51,15,41,53,15,41,54,15,41,55,15,41,58,
+ 15,41,59,15,41,61,15,41,62,15,41,64,15,41,66,15,41,67,15,41,68, 0, 0, 0,
+ 4,36,61, 5,38,93, 6,62,44, 6,62,50, 6,62,41, 6,62,45, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,41,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,52,64,15,34,94,15,34,90,
+ 4,42,75, 0, 0, 0, 0, 0, 0, 5,46,12, 7, 4,84, 7, 4,77, 7, 4,73, 5,46,10,
+ 7, 4,76, 7, 4,81, 7, 4,82, 7, 4,85, 7, 4,75, 5,46, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,46, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,46,11, 7, 4,83,
+ 15,48, 3,15,48, 4,15,48, 6,15,48, 7,15,48, 8,15,48, 9,15,48,10,15,48,11,
+ 15,48,14,15,48,15,15,48,17,15,48,18,15,48,19,15,48,20,15,48,21,15,48,23,
+ 15,48,24,15,48,25,15,48,26,15,48,27,15,48,28, 0, 0, 0, 7, 4,78,15,48,12,
+ 0, 0, 0, 0, 0, 0, 7,10,81, 0, 0, 0,15,48,13,15,48,16, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48, 2, 5,46,14,
+ 5,46,13, 0, 0, 0, 6,62,46, 0, 0, 0, 0, 0, 0, 4,49,10, 7,15,50, 7,15,70,
+ 7,15,48, 7,15,64, 7,15,62, 5,53,27, 4,49, 7, 7,15,65, 7,15,67, 7,15,53,
+ 7, 4,79, 4,49, 8, 7,15,54, 7,15,68, 7,15,69, 4,49, 6, 7,15,56, 7,15,52,
+ 4,49, 9, 7,15,71, 5,53,26, 5,53,28, 7,15,66, 7,15,57, 0, 0, 0, 7,15,61,
+ 7,15,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,15,43, 7,15,51,
+ 7,15,60,15,53,57,15,53,58,15,53,59,15,53,60,15,53,61,15,53,62,15,53,63,
+ 15,53,64,15,53,65,15,53,66,15,53,67,15,53,70,15,53,71,15,53,72,15,53,74,
+ 15,53,75,15,53,77,15,53,78,15,53,80,15,53,81,15,53,82, 0, 0, 0,15,53,69,
+ 5,53,24, 7,15,45, 7,15,46, 7,15,59, 0, 0, 0, 7,15,63, 7,17,90, 7,15,49,
+ 7,12,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,53,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,53,29, 5,53,25, 7,15,44,
+ 7, 4,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,15,55, 7,25, 3, 4,54,65, 7,25, 5,
+ 5,53,30, 7,25, 9, 7,25, 8, 4,54,67, 7,15,72, 5,60, 1, 7,24,93, 5,60, 4,
+ /* plane 2, page 68 */
+ 0, 254, /* first, last */
+ 5,60, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,58,81,15,58,82,15,58,86,15,58,87,
+ 15,58,88,15,58,89,15,58,90,15,58,91,15,58,92,15,58,93,15,58,94,15,59, 1,
+ 15,59, 2,15,59, 3, 7,24,94, 0, 0, 0, 0, 0, 0, 7,25, 4, 0, 0, 0, 7,25, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,60, 3, 7,25, 1,
+ 0, 0, 0, 0, 0, 0,15,53,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,32,47, 4,59,66,
+ 7,32,46, 5,66,46, 7,32,43, 7,32,51, 7,32,49, 7,32,44, 0, 0, 0, 4,59,67,
+ 5,66,47, 5,66,48, 4,59,65, 7,32,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,32,42,
+ 7,32,50,15,63,36,15,63,38,15,63,37,15,63,39,15,63,40,15,63,41,15,63,42,
+ 15,63,44,15,63,45, 7,32,48, 7,34, 2, 0, 0, 0, 7,32,53, 7,32,45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,32,41, 7,25,10, 0, 0, 0, 0, 0, 0,15,65,86,15,58,84,
+ 15,58,85, 0, 0, 0, 7,39,76, 5,72,23, 4,64, 1, 0, 0, 0, 7,39,77, 4,64, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,74,15,66,84,15,66,85,15,66,86,
+ 15,66,87, 0, 0, 0, 7,39,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,71,
+ 7,39,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,63,43, 7,39,72,15,69,37, 5,76,47, 7,46,16, 7,46,19, 7,46,27, 5,76,46,
+ 5,76,45, 5,76,49, 4,64, 3, 0, 0, 0, 7,46,18, 7,46,24, 4,67,66, 4,67,64,
+ 7,46,28, 7,46,17, 7,46,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46,23, 0, 0, 0,
+ 15,69,40, 7,46,20,15,69,38,15,69,39,15,69,42,15,69,43,15,69,44,15,69,45,
+ 15,69,46, 0, 0, 0, 0, 0, 0, 7,46,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46,22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46,26, 0, 0, 0, 5,76,48, 0, 0, 0,
+ 0, 0, 0, 7,51,68, 4,67,65, 7,51,70, 5,80,35, 0, 0, 0, 4,70,47, 7,51,71,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,51,66, 7,51,67, 0, 0, 0, 7,51,69, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,81, 0, 0, 0,15,71,82,15,71,83,15,71,84,
+ 15,71,85, 0, 0, 0, 7,56,22, 5,83,54, 4,74,47, 7,56,23, 7,56,24, 0, 0, 0,
+ 7,56,20,15,73,54,15,73,55,15,73,56, 7,56,21, 7,59, 4, 0, 0, 0, 0, 0, 0,
+ 7,59,78, 7,59,80, 7,59,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,60,36,
+ 7,59,79, 0, 0, 0, 7,59,76, 0, 0, 0, 7,59,75, 5,86, 3,15,74,64, 7,62,88,
+ 0, 0, 0,15,74,63, 5,87,72, 0, 0, 0, 7,65, 1, 7,64,92, 7,64,94, 7,65,24,
+ 7,64,91, 7,64,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,66,26, 5,90,75,15,76,68,
+ 15,76,69, 0, 0, 0, 7,68,45, 7,68,44, 7,68,46, 7,69,23, 7,70,20, 5, 1,43,
+ 0, 0, 0, 6, 3,16, 6, 8,45, 6, 8,46, 5, 4,56, 0, 0, 0, 6,12,66, 6,12,65,
+ 6,12,67, 0, 0, 0, 0, 0, 0,15, 7,88,15, 7,89, 6,18,46, 5,10,11,
+ /* plane 2, page 69 */
+ 0, 255, /* first, last */
+ 5,10, 9, 6,18,47, 5,10,10, 6,18,49,15,12, 4,15,12, 5,15,12, 6, 6,18,45,
+ 0, 0, 0, 0, 0, 0, 6,18,48, 0, 0, 0, 5,14,49, 0, 0, 0, 5,14,48,15,16,83,
+ 6,33,55, 6,33,54, 6,33,56,15,22,49, 4,24,74, 6,43, 2, 0, 0, 0, 6,39,35,
+ 6,45,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,52,72, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,52,73, 0, 0, 0, 6,62,51, 5,39, 3, 6,62,54, 6,62,53, 6,62,52, 7, 4,90,
+ 5,46,15, 7, 4,87, 7, 4,89, 0, 0, 0, 7, 4,88, 0, 0, 0, 7,15,73, 0, 0, 0,
+ 7,15,74, 5,53,31, 4,54,69,15,59, 4,15,59, 5,15,59, 6, 0, 0, 0, 0, 0, 0,
+ 15,53,83, 7,32,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,72,24, 0, 0, 0,15,69,47,15,69,48, 0, 0, 0, 7,46,29, 0, 0, 0, 0, 0, 0,
+ 7,51,72, 7,59,81, 0, 0, 0, 7,62,89, 0, 0, 0, 7,65, 2,15, 4,83,15, 4,84,
+ 6,12,68, 6,12,69, 0, 0, 0, 6,33,57, 0, 0, 0, 6,33,58,15,29, 2,15,29, 3,
+ 6,52,74,15,41,69, 5,39, 4, 5,53,32,15, 1,72, 6,11,75, 5,10,12, 4,10,11,
+ 4,13,87,15,16,84, 5,17,76, 6,43, 3, 6,52,76, 6,52,75, 5,53,33, 7, 4,91,
+ 7, 4,92, 5,53,34, 6, 2, 5, 6, 3,17, 0, 0, 0, 6, 5,21, 6, 8,47, 4, 7,13,
+ 6,12,71, 6,12,70, 6,18,50, 4,10,13, 6,18,51, 6,18,52, 6,25,30, 4,13,88,
+ 0, 0, 0,15,16,85, 6,25,29, 6,33,59, 6,33,62, 6,33,61, 4,18,88, 0, 0, 0,
+ 0, 0, 0, 6,33,60,15,22,50,15,22,51, 0, 0, 0, 6,43, 8, 6,43, 4, 6,43, 6,
+ 6,43, 7, 6,43, 9, 6,43, 5, 6,45,56, 6,52,77, 6,52,78,15,35,31, 6,62,56,
+ 6,62,57,15,41,70, 0, 0, 0, 7, 4,93,15,48,30, 7, 4,94, 5,53,35, 5,66,49,
+ 4,49,12, 7,15,75, 7, 5, 1, 5,53,36, 7,25,11, 7,25,12, 5,60, 5, 0, 0, 0,
+ 7,39,80, 0, 0, 0, 5,76,50, 7,56,25, 7,59,82, 7,67,56, 5,91,34, 7,68,47,
+ 15, 1,73, 6, 8,49, 5, 4,57, 6, 8,48, 4, 7,14, 6,12,75, 6,12,74, 6,12,73,
+ 6,12,72, 6,18,54, 6,18,53, 5,10,13, 6,18,55, 0, 0, 0, 0, 0, 0, 5,10,14,
+ 0, 0, 0, 0, 0, 0, 5,14,50, 4,13,89, 4,13,91, 6,25,33, 6,25,31, 0, 0, 0,
+ 5,19,38, 5,19,39, 6,33,63, 0, 0, 0, 6,33,66, 6,33,64, 0, 0, 0, 6,43,11,
+ 4,24,77, 6,43,14, 6,43,10, 6,43,12, 6,43,13, 5,25,83, 5,25,86, 5,25,84,
+ 0, 0, 0, 5,25,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,24,78,
+ 5,32,24, 6,52,79, 4,30,45, 5,32,22, 5,32,23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,52,80,15,29, 4, 5,39, 5, 6,62,59, 0, 0, 0, 6,62,60, 6,62,58,15,41,71,
+ 5,46,18, 7, 5, 5, 5,46,17, 5,46,16, 5,46,19, 7, 5, 4, 7, 5, 2, 5,46,20,
+ 0, 0, 0, 7, 5, 3, 0, 0, 0, 5,53,38, 5,53,39, 5,53,40, 7,15,77, 5,53,37,
+ 7,15,76, 0, 0, 0, 5,60, 6, 4,54,70,15,59, 7,15,59, 8, 0, 0, 0, 5,66,51,
+ /* plane 2, page 70 */
+ 0, 255, /* first, last */
+ 5,66,50, 0, 0, 0, 0, 0, 0, 5,76,51, 7,51,73, 5, 3,72, 0, 0, 0, 0, 0, 0,
+ 6,25,35, 6,25,34, 0, 0, 0, 0, 0, 0, 4,24,79, 6,43,15,15,29, 5,15,29, 6,
+ 6,52,81, 6,62,61, 0, 0, 0, 0, 0, 0, 5, 1,85,15, 2,67, 6, 5,22,15, 2,66,
+ 6, 8,51,15, 4,85, 6, 8,50, 6, 8,52, 5, 6,89, 5, 7, 2, 5, 6,88, 5, 6,91,
+ 5, 6,86, 5, 6,93, 6,12,78, 4, 7,16, 5, 7, 1, 6,12,76, 5, 6,94, 5, 7, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,92, 6,12,77,15, 7,91,15, 7,92,15, 7,94,
+ 15, 8, 1, 0, 0, 0, 5, 6,90, 6,12,79, 6,12,80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,10,18, 5,10,16, 5,10,15, 6,18,63, 6,18,60, 5,10,19, 5,10,17, 4,10,16,
+ 6,18,58, 0, 0, 0, 6,18,57,15,12, 8,15,12, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,18,59, 6,18,62, 0, 0, 0, 6,18,56, 6,18,61, 0, 0, 0, 5,10,20,
+ 15, 7,93, 5,14,56, 5,14,52, 5,14,54, 5,14,55, 5,14,53, 0, 0, 0, 6,25,36,
+ 5,14,57, 0, 0, 0, 0, 0, 0, 4,18,91, 6,33,71, 6,33,72, 5,19,41, 5,25,87,
+ 4,18,93, 4,18,92, 5,19,43, 0, 0, 0, 5,19,44, 0, 0, 0,15,22,52,15,22,53,
+ 6,33,69, 0, 0, 0, 6,33,73, 6,33,68, 0, 0, 0, 5,19,40, 0, 0, 0, 0, 0, 0,
+ 4,24,81, 4,24,84, 5,25,93, 6,43,20, 5,25,89, 5,25,91, 0, 0, 0, 5,25,88,
+ 6,43,18, 6,43,21,15,29, 7,15,29, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,43,19, 6,43,16, 6,43,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,25,90, 5,25,92, 5,19,42,15,29, 9, 6,43,22, 5,39,11, 5,32,30, 5,32,28,
+ 4,30,48, 6,62,68, 6,52,83, 5,39, 6, 6,52,82, 6,52,85, 6,52,84, 0, 0, 0,
+ 15,35,32,15,35,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,29, 0, 0, 0,
+ 6,52,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,32,27, 4,36,65, 5,39,13, 5,39, 8, 5,39,14, 5,39,12, 6,62,63, 6,62,67,
+ 5,39, 7, 5,39,10, 6,62,71, 6,62,66, 6,62,65, 5,32,26, 6,62,70, 0, 0, 0,
+ 15,41,72,15,41,73,15,41,74,15,41,75, 5,39,15, 5,39, 9, 6,62,64, 6,52,86,
+ 0, 0, 0, 0, 0, 0, 6,62,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,41,76, 5,39,16, 5,46,22, 7, 5, 6, 4,42,84, 5,46,25, 5,46,26, 5,46,24,
+ 4,42,80, 5,46,21, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48,31, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 7,
+ 0, 0, 0, 7,15,80, 5,53,41, 5,53,46, 7,15,81, 5,53,43, 5,53,45, 5,53,42,
+ 0, 0, 0, 5,53,44, 0, 0, 0, 7,15,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,25,16,
+ 7,25,14, 5,60, 7, 4,54,72, 4,54,73, 7,15,78, 0, 0, 0, 7,25,15, 0, 0, 0,
+ 0, 0, 0, 7,32,55, 7,32,56, 5,72,26, 0, 0, 0, 7,51,74, 7,39,82, 7,39,83,
+ /* plane 2, page 71 */
+ 0, 253, /* first, last */
+ 7,39,81, 0, 0, 0, 5,72,25, 7,46,31, 5,76,52, 5,76,53, 0, 0, 0, 5,80,37,
+ 7,51,76, 5,80,36, 0, 0, 0, 5,80,38, 7,56,26, 5,83,57, 0, 0, 0, 7,59,84,
+ 5,83,56, 7,59,85, 7,59,83, 0, 0, 0, 5,87,73, 0, 0, 0, 7,65, 3,15,76,17,
+ 0, 0, 0, 7,68,48,15, 1,29, 6, 3,18, 5, 1,87, 5, 1,88, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 2,88, 5, 2,91, 5, 2,87, 4, 3, 8, 0, 0, 0, 5, 2,90, 0, 0, 0,
+ 6, 5,23, 0, 0, 0, 0, 0, 0, 5, 2,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4,62,
+ 5, 4,63, 4, 4,59, 4, 7,23, 6, 8,56, 4, 4,58, 5, 4,58, 6, 8,62, 5, 4,59,
+ 6, 8,59, 5, 7,15, 6,12,82, 4, 4,55, 5, 4,61, 5, 4,60, 6, 8,58, 6, 8,57,
+ 6,12,83,15, 4,87, 6, 8,55, 6, 8,60, 0, 0, 0, 0, 0, 0, 6, 8,61, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8,54, 4, 4,56, 0, 0, 0, 6,12,90,
+ 5, 7, 8, 6,12,91, 5, 7,12, 6,12,89, 6,12,92, 5, 7, 7, 5, 7,10, 6,12,88,
+ 5, 7,13, 5, 7, 5, 5, 7, 9, 5, 7, 4, 6,12,87, 0, 0, 0, 4, 7,24, 5,10,22,
+ 6, 8,53, 6,18,64, 0, 0, 0, 5, 7,11, 6,12,86,15, 8, 2, 6,12,93, 0, 0, 0,
+ 6,12,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7,21, 0, 0, 0, 5,10,21, 5,10,30,
+ 6,18,72, 5,10,25, 6,25,43, 5,10,29, 6,18,65, 6,25,44, 6,33,76, 5,10,28,
+ 4,10,17, 5,10,27, 6,18,68, 5,10,26, 6,18,70, 4,10,19, 5,10,32, 6,18,67,
+ 5, 7, 6, 5,10,23, 5,10,24, 0, 0, 0,15,12,10,15,12,12,15,12,13, 0, 0, 0,
+ 6,18,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,12,11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,10,31,
+ 0, 0, 0, 6,25,46, 5,14,62, 4,19, 1, 6,25,41, 6,25,45, 4,14, 5, 5,14,59,
+ 5,14,64, 5,14,61, 4,14, 3, 6,25,37, 0, 0, 0, 6,25,42, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,16,87,15,16,88, 0, 0, 0, 6,25,40,
+ 5,14,58, 0, 0, 0, 4,14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,25,39, 6,25,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,63, 6,25,38,
+ 5,19,46,15,16,86, 0, 0, 0, 4,19, 4, 6,33,78, 5,19,53, 5,25,94, 5,19,50,
+ 6,33,80, 6,33,83, 5,19,47, 6,33,79, 6,43,27, 4,19, 6, 5,19,51, 6,43,24,
+ 6,43,23, 5,19,48, 6,43,25, 0, 0, 0, 6,33,81, 6,33,82, 0, 0, 0, 6,33,84,
+ 0, 0, 0, 6,43,26, 5,26, 8, 0, 0, 0, 6,52,91, 5,26, 6, 5,32,31, 4,24,85,
+ 5,26, 2, 6,43,36, 5,32,32, 5,26, 7, 4,24,86, 5,26, 5, 5,26, 4, 4,24,88,
+ 6,43,31, 4,30,49, 5,26, 1, 6,43,28, 6,43,30, 4,30,55, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,29,10,15,29,11, 6,52,89, 6,50,82, 6,52,90, 0, 0, 0,
+ 6,43,32, 0, 0, 0, 6,43,33, 6,43,37, 0, 0, 0, 6,43,29,
+ /* plane 2, page 72 */
+ 7, 252, /* first, last */
+ 5,26, 3,
+ 0, 0, 0, 0, 0, 0,15,35,35, 0, 0, 0, 0, 0, 0, 4,30,54, 5,32,40, 6,53, 2,
+ 5,32,39, 4,30,53, 6,53, 7, 5,32,43, 6,53, 4, 6,52,94, 6,52,93, 6,53, 6,
+ 5,32,38, 5,32,36, 5,32,35, 0, 0, 0, 6,53, 1, 5,32,34, 6,53, 8, 5,32,42,
+ 5,32,33, 4,30,56, 0, 0, 0, 0, 0, 0, 5,32,41, 6,53, 5,15,35,37,15,35,38,
+ 15,41,80,15,48,32, 0, 0, 0, 5,32,37, 6,53, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,44, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,62,77, 5,39,26, 6,62,73, 7, 5, 9, 5,39,23, 4,36,75, 5,39,21,
+ 5,39,19, 6,62,76, 5,39,27, 5,39,22, 5,39,20, 6,62,80, 4,36,76, 5,39,17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,41,77, 7, 5,10, 0, 0, 0,
+ 15,41,79, 6,62,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,62,72,
+ 6,62,74, 6,62,79, 0, 0, 0, 0, 0, 0, 4,42,93, 5,39,29, 5,39,28, 5,39,25,
+ 5,39,24, 6,62,81, 5,39,18, 7, 5,17, 4,42,88, 4,42,89, 7, 5,16, 5,46,28,
+ 7, 5,20, 7,15,83, 5,46,33, 7, 5,15, 7, 5,11, 5,46,30, 5,46,37, 0, 0, 0,
+ 5,46,27, 5,46,36, 5,46,35, 5,46,29, 5,53,47, 7,15,82, 5,46,31, 0, 0, 0,
+ 0, 0, 0, 5,46,32, 5,46,38, 7, 5,12, 7, 5,13,15,53,85, 0, 0, 0, 5,53,48,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5,14, 0, 0, 0, 7, 5,19, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,41,78, 4,49,19, 5,46,34, 5,53,55, 4,49,21, 5,53,53, 5,53,49,
+ 5,53,50, 7,15,89, 4,49,17, 7,15,88, 7,15,87, 5,60, 8, 4,49,22, 5,53,51,
+ 5,53,54, 7,15,85, 7,25,18, 0, 0, 0, 4,54,77, 7,25,17, 7,15,86, 0, 0, 0,
+ 7, 5,18,15,53,87, 7, 5,21, 5,53,52, 0, 0, 0, 0, 0, 0, 5,60,10, 7,25,19,
+ 5,60, 9, 7,39,87, 7,25,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,25,20,
+ 15,59, 9,15,59,10,15,59,11,15,59,12, 7,32,61, 5,66,53, 5,66,52, 7,32,58,
+ 7,32,57, 7,32,60, 4,59,72, 7,32,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,63,46,15,63,47, 0, 0, 0, 5,66,54, 0, 0, 0, 4,67,68, 0, 0, 0, 0, 0, 0,
+ 7,39,88, 7,46,32, 7,39,86, 7,39,84, 0, 0, 0, 7,46,33, 5,76,54, 0, 0, 0,
+ 7,46,34, 5,80,40, 7,51,77, 5,80,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,72,84,
+ 5,80,41, 7,56,27, 0, 0, 0, 7,59,86, 7,59,88, 7,59,87, 0, 0, 0, 5,87,74,
+ 7,62,90, 0, 0, 0,15,75,53, 7,65, 4, 7,67,57, 0, 0, 0,15, 8, 3, 6,43,38,
+ 6,62,82, 5, 1,44, 6, 5,24, 6, 3,19, 0, 0, 0, 0, 0, 0, 6, 8,63, 5, 4,65,
+ 4, 4,61, 0, 0, 0, 4, 4,60, 0, 0, 0, 6, 8,65, 6, 8,64, 0, 0, 0,15, 4,89,
+ 5, 4,64, 5, 7,16, 6,13, 5, 4, 7,28, 5,10,33,
+ /* plane 2, page 73 */
+ 2, 255, /* first, last */
+ 15, 8, 5,15, 8, 6,15, 8, 7,15, 8, 8,15, 8, 9, 0, 0, 0,
+ 6,13, 3, 0, 0, 0, 0, 0, 0,15,12,32,15, 8, 4, 6,13, 2,15,12,28, 6,18,73,
+ 5,10,37, 5,10,34, 4,10,22, 6,18,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,15,73, 0, 0, 0,15,12,15,15,12,16,15,12,17,15,12,19,15,12,20,15,12,21,
+ 15,12,22,15,12,23,15,12,24,15,12,26,15,12,27,15,12,29, 0, 0, 0, 0, 0, 0,
+ 6,18,74, 0, 0, 0, 6,18,76,15,12,30,15,12,31, 0, 0, 0, 0, 0, 0,15,12,14,
+ 0, 0, 0, 5,10,36, 5,10,35, 0, 0, 0, 0, 0, 0, 6,25,51, 5,19,54, 5,14,65,
+ 4,14, 9, 6,25,49, 4,14, 8, 6,25,50, 6,25,52, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,16,89,15,16,90,15,16,91,15,16,92,15,16,93,
+ 15,16,94,15,17, 1,15,17, 3,15,17, 4,15,17, 5,15,17, 6, 6,25,48,15,22,67,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,19,17, 6,25,53, 6,33,90, 5,19,55,
+ 6,33,91, 4,19,18, 6,33,87, 6,33,88, 6,33,89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,17, 2,15,22,54,15,22,56,15,22,60,
+ 15,22,63,15,22,64,15,22,65,15,22,66,15,22,68,15,22,61, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,33,92, 0, 0, 0, 0, 0, 0,15,22,59,15,22,58,15,22,62, 5,19,56,
+ 6,33,86,15,29,30, 0, 0, 0,15,29,20, 6,43,43, 5,26,11, 5,26,10, 5,26,12,
+ 6,53, 9, 4,30,58, 0, 0, 0, 5,32,45, 0, 0, 0,15,29,24, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,24,92, 6,43,41, 6,43,44,15,29,12,15,29,13,15,29,14,15,29,15,15,29,16,
+ 15,29,18,15,29,21,15,29,22,15,29,23,15,29,25,15,29,26,15,29,31,15,35,48,
+ 6,43,46, 6,53,18, 6,43,45, 0, 0, 0,15,29,32, 6,43,40, 6,43,42, 0, 0, 0,
+ 6,53,10, 0, 0, 0, 0, 0, 0,15,29,19,15,29,29,15,29,17, 5,26, 9, 6,53,11,
+ 6,53,16, 4,30,59, 6,53,17, 6,53,15, 6,53,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,39,30,15,35,39,15,35,42,15,35,44,
+ 15,35,45,15,35,46,15,35,47,15,35,49,15,35,50,15,35,51,15,35,52,15,35,53,
+ 15,35,55,15,35,56,15,35,58,15,35,59,15,35,60,15,35,61,15,35,62,15,35,63,
+ 15,35,64,15,35,65,15,35,66,15,35,67,15,35,69, 0, 0, 0, 6,53,12, 5,32,47,
+ 0, 0, 0, 5,26,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,35,43,15,35,40,
+ 5,39,31, 0, 0, 0, 6,53,13,15,35,57,15,41,90,15,41,91,15,42, 6, 7, 5,24,
+ 0, 0, 0, 0, 0, 0, 6,62,84, 5,39,33, 7, 5,22, 4,36,77, 5,39,32, 6,62,85,
+ 6,62,87, 0, 0, 0, 6,62,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,62,83,15,41,81,15,41,82,15,41,83,15,41,84,15,41,85,
+ /* plane 2, page 74 */
+ 0, 254, /* first, last */
+ 15,41,87,15,41,88,15,41,89,15,41,92,15,41,93,15,41,94,15,42, 1,15,42, 2,
+ 15,42, 4,15,42, 5,15,42, 7,15,42, 8,15,42, 9, 5,39,34, 0, 0, 0, 3,40, 6,
+ 7, 5,25, 0, 0, 0, 0, 0, 0,15,42, 3, 7, 5,32, 4,42,94, 5,46,39, 7,15,91,
+ 7, 5,26, 7,15,90, 7, 5,28, 7, 5,31, 7, 5,33, 7, 5,34, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48,33,15,48,34,15,48,35,15,48,36,15,48,37,
+ 15,48,38,15,48,40,15,48,41,15,48,42,15,48,43,15,48,44, 0, 0, 0, 0, 0, 0,
+ 7, 5,29, 5,46,40, 7, 5,27, 5,46,41,15,53,92,15,54,14,15,48,39, 0, 0, 0,
+ 7,16, 2, 7, 5,30, 5,53,56, 5,53,59, 5,53,57, 4,49,27, 7,16, 4, 7,15,93,
+ 7,15,94, 7,15,92, 0, 0, 0, 4,49,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,16, 1,15,53,88,15,53,89,15,53,91,15,53,93,15,54, 3,
+ 15,54, 4,15,54, 5,15,54, 6,15,54, 7,15,54, 9,15,54,13,15,54,15, 7,16, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,16, 3, 7,25,22,15,54,16,15,54, 1,15,54, 8,
+ 5,53,60, 5,53,58,15,54,12, 7,25,27, 7,25,29, 5,60,13, 5,60,11, 7,32,62,
+ 7,25,25, 4,59,74, 4,54,78, 0, 0, 0, 4,54,80, 7,25,24, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,59,14,15,59,15,15,59,16,15,59,17,15,59,18,
+ 15,59,19,15,59,20,15,59,21, 5,60,12, 7,25,26, 7,25,28, 7,25,23, 7,32,63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,72,28, 4,59,75, 5,66,55, 4,64, 6, 7,32,64,
+ 4,64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,63,49,
+ 15,63,51,15,63,52,15,63,53,15,63,55,15,63,57,15,63,58,15,63,59,15,63,60,
+ 15,63,63, 0, 0, 0, 7,32,65, 7,32,66,15,63,48,15,63,50,15,63,56, 0, 0, 0,
+ 15,67, 3, 7,39,92, 7,39,91, 5,72,30, 7,39,90, 7,46,35, 5,72,29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,89,15,66,92,15,66,94,15,67, 1,
+ 15,67, 2, 4,64, 9,15,66,89, 0, 0, 0,15,66,90,15,66,93, 7,51,79, 5,76,55,
+ 4,70,50,15,69,50,15,69,51,15,69,52,15,69,53, 7,46,36, 7,51,78, 0, 0, 0,
+ 15,63,62, 4,70,49, 7,53,92, 0, 0, 0, 4,70,51, 7,56,28, 0, 0, 0, 0, 0, 0,
+ 15,71,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,59,89, 4,74,50,15,73,57,15,73,58,
+ 5,86, 4, 0, 0, 0,15,74,65,15,74,67,15,75,54, 0, 0, 0, 0, 0, 0,15,74,66,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,89,17, 7,65, 6, 7,65, 5,15,76,18, 0, 0, 0,
+ 5,90,12, 4,78,20, 6,13, 6, 5,10,39, 5,10,38, 6,18,77,15,12,33, 6,18,78,
+ 6,25,54, 5,14,67, 5,14,68, 6,25,55, 6,25,56, 4,19,22, 5,19,57, 5,19,58,
+ 15,22,69, 0, 0, 0, 5,26,15, 5,26,16, 6,43,47,15,29,33, 6,43,48,
+ /* plane 2, page 75 */
+ 1, 254, /* first, last */
+ 4,30,60, 5,32,48, 5,32,49,15,35,70, 0, 0, 0, 0, 0, 0, 7, 5,37,
+ 6,62,88, 5,39,35, 0, 0, 0,15,42,10, 5,39,36, 7, 5,36, 7,16, 6, 4,49,29,
+ 5,46,42,15,48,45, 7, 5,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,49,30, 7,25,30,
+ 5,66,56,15,63,64, 4,59,77, 4,70,52, 7,51,80, 5,80,42, 0, 0, 0, 0, 0, 0,
+ 5,86, 5, 7,59,90, 7,62,91, 7,66,27, 7,66,28, 0, 0, 0, 5, 4,66, 0, 0, 0,
+ 5, 7,17, 4, 7,29, 6,13, 7, 0, 0, 0, 5,10,40, 5,10,41, 6,18,79, 4,10,27,
+ 4,10,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,69, 5,14,71, 6,25,60, 5,14,70,
+ 0, 0, 0,15,17, 9, 6,25,59, 6,25,57, 6,25,58, 0, 0, 0, 5,19,61, 6,34, 2,
+ 6,33,94, 6,34, 4, 5,19,62, 6,34, 3, 5,19,60,15,22,70,15,22,72, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,25, 2, 5,26,17, 6,53,22, 4,25, 7,
+ 5,26,20, 5,26,19, 5,19,63, 6,43,50, 5,26,18, 5,19,59, 0, 0, 0, 6,43,49,
+ 6,43,51, 0, 0, 0, 0, 0, 0, 4,30,68, 5,32,50, 6,53,23, 4,30,62, 5,32,51,
+ 6,53,19, 6,53,21, 4,30,63, 6,53,24, 0, 0, 0,15,35,71, 6,53,20, 5,39,39,
+ 6,62,92, 5,39,37, 6,62,90, 0, 0, 0, 4,36,82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,62,89, 0, 0, 0, 0, 0, 0, 6,62,91, 5,39,38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,43, 8, 7, 5,42, 5,46,44, 5,46,45, 5,46,46, 7, 5,38, 7, 5,39,
+ 7, 5,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,16, 7, 4,54,84, 7,16, 8,
+ 5,53,63, 5,53,65, 4,49,32, 5,53,64, 0, 0, 0, 5,53,62, 4,54,86, 5,60,14,
+ 4,54,87, 0, 0, 0, 0, 0, 0, 7,25,32, 7,25,31, 0, 0, 0, 5,46,43, 0, 0, 0,
+ 4,59,80, 5,66,59, 5,66,58, 7,32,68, 5,66,57, 7,32,69, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,72,31, 7,46,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,51,81, 7,51,82,
+ 4,70,54, 5,80,43, 4,70,53, 7,51,83, 0, 0, 0, 4,72,86, 7,56,29, 5,83,58,
+ 5,86, 8, 5,86, 7, 7,59,91, 5,86, 6, 0, 0, 0, 7,60,75, 0, 0, 0, 0, 0, 0,
+ 5,90,76, 7,69,24, 6, 3,20, 6,13, 8, 5, 7,19, 4, 7,30, 0, 0, 0, 0, 0, 0,
+ 15, 8,11, 6,18,80, 0, 0, 0,15,12,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,52,
+ 6,62,93, 7,16,11, 0, 0, 0, 7,16, 9, 7,16,10, 4,54,89, 7,32,70, 0, 0, 0,
+ 5,80,44, 0, 0, 0, 0, 0, 0, 6, 3,21, 6, 5,25, 6,13, 9, 5, 7,20, 6,13,10,
+ 15,12,36,15,12,37, 5,10,42, 4,10,31, 0, 0, 0, 6,18,81, 6,20,89, 5,14,73,
+ 6,34, 6, 5,19,64, 6,34, 5, 6,34, 7,15,22,73, 0, 0, 0, 6,53,25, 6,43,52,
+ 0, 0, 0, 0, 0, 0,15,29,35,15,29,34, 6,53,27, 0, 0, 0,15,35,72, 6,53,26,
+ 0, 0, 0, 0, 0, 0, 6,62,94, 7, 5,43,15,42,11, 0, 0, 0, 0, 0, 0, 4,54,90,
+ 0, 0, 0,15,59,22, 0, 0, 0, 0, 0, 0,15,67, 6, 7,38,78,15,67, 5,
+ /* plane 2, page 76 */
+ 0, 255, /* first, last */
+ 7,51,84, 0, 0, 0, 0, 0, 0, 6, 5,26,15, 4,90, 5, 7,21, 6,13,14, 6,25,61,
+ 5,19,65, 0, 0, 0,15,42,12, 0, 0, 0, 0, 0, 0,15,63,65, 7,39,93, 0, 0, 0,
+ 15,76,19, 5,83,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,63, 0, 0, 0,15, 4,92,
+ 0, 0, 0,15, 4,91, 0, 0, 0, 6, 8,67, 0, 0, 0, 4, 7,34, 4, 5,51, 4, 7,31,
+ 5, 7,22, 6,13,17, 6,13,16, 6,13,19,15, 8,12,15, 8,13, 0, 0, 0, 0, 0, 0,
+ 6,13,15, 4,10,34, 5,10,45, 6,18,84, 5,10,44, 6,18,83, 5,10,43, 6,18,86,
+ 6,18,90, 6,18,87, 6,25,69, 5,10,46, 6,18,88, 6,18,85, 5,14,78, 0, 0, 0,
+ 15,12,38,15,12,39,15,12,40,15,12,41,15,12,43,15,12,44,15,12,45,15,12,46,
+ 15,12,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,10,47, 5,14,74, 4,14,14, 5,14,75, 6,25,65,
+ 6,25,64, 0, 0, 0, 6,25,66, 0, 0, 0, 0, 0, 0, 6,25,63, 6,25,67,15,17,10,
+ 15,17,11,15,17,12,15,17,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,14,16,15,17,13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,77, 5,14,76, 4,19,30, 6,34, 8, 5,19,67,
+ 5,19,66, 4,19,29, 6,34,12, 6,34,15, 6,34,10, 6,34,13, 6,34,14,15,22,75,
+ 15,22,76, 6,34,11, 0, 0, 0, 6,34, 9, 0, 0, 0, 0, 0, 0, 6,33,75, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,25,11, 4,25, 9, 4,25,10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,43,55, 6,43,57,15,22,74,15,29,38,15,29,39,
+ 15,29,40, 0, 0, 0, 0, 0, 0, 6,43,56, 0, 0, 0, 4,25,13, 6,43,53,15,29,36,
+ 15,29,37, 6,53,32, 4,30,74, 4,30,71, 6,53,30, 6,53,31, 4,30,70, 5,32,54,
+ 6,53,28, 6,53,34, 5,32,53, 6,53,35, 6,53,36, 6,53,33, 0, 0, 0, 0, 0, 0,
+ 15,35,73,15,35,74, 0, 0, 0, 5,32,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,63, 3, 4,36,90, 5,39,42, 6,63, 2, 6,63, 5,
+ 6,63, 8,15,42,13, 6,63, 6, 0, 0, 0, 0, 0, 0, 6,63, 4, 6,63, 7, 7, 5,48,
+ 4,43,12, 7, 5,44, 7, 5,46, 7, 5,45, 0, 0, 0, 7, 5,47, 5,46,47, 7, 5,49,
+ 15,48,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,43,11, 0, 0, 0, 0, 0, 0,
+ 4,49,37, 4,49,35, 4,49,38, 7,16,12, 5,53,66,15,54,18, 0, 0, 0, 7,12,27,
+ 0, 0, 0, 0, 0, 0, 7,25,33, 5,60,19, 7,25,35, 5,60,17, 4,54,91, 7,25,34,
+ 5,60,20, 0, 0, 0,15,59,23, 7,28,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,60,16,
+ 5,60,18,15,54,17, 0, 0, 0, 0, 0, 0, 4,59,81, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,39,94, 5,72,33, 7,40, 3, 7,46,38, 7,40, 1, 7,40, 4, 4,64,13,
+ 0, 0, 0, 0, 0, 0, 7,40, 2, 7,46,40, 0, 0, 0, 0, 0, 0, 7,46,39, 0, 0, 0,
+ 0, 0, 0, 7,51,87,15,71,87, 7,51,85, 7,51,86, 0, 0, 0,15,71,50, 7,56,30,
+ /* plane 2, page 77 */
+ 0, 255, /* first, last */
+ 4,72,87, 7,51,88, 7,59,93,15,74,68, 7,59,92, 7,62,92, 0, 0, 0, 7,66,30,
+ 7,66,29, 0, 0, 0, 0, 0, 0, 7,67,58, 7,67,60, 0, 0, 0, 7,67,59, 0, 0, 0,
+ 7,70, 9, 7,70,21, 7,70,38, 6, 3,22, 0, 0, 0, 6, 5,27,15, 8,14, 4,14,18,
+ 5,10,48, 4,25,14, 0, 0, 0, 0, 0, 0, 6,53,38, 6,53,37, 6,63, 9, 5,53,67,
+ 7,16,14, 7, 5,50, 0, 0, 0, 0, 0, 0, 7,56,31, 5, 2,92, 5, 4,68, 5, 4,69,
+ 4, 4,64, 6, 8,70, 6, 8,71, 6, 8,69, 0, 0, 0, 0, 0, 0, 6, 8,72, 4, 7,37,
+ 6,13,21, 4, 7,36,15, 8,15, 5, 7,24, 6,13,22, 0, 0, 0, 0, 0, 0, 6,18,93,
+ 4,10,43, 6,18,92, 6,18,91, 5,10,50, 5,10,54, 4,10,39, 4,10,40, 5,10,51,
+ 4,10,37, 5,10,52, 5,10,49, 5,10,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,19, 4,
+ 15,12,48, 0, 0, 0, 0, 0, 0, 6,18,94,15,12,49, 6,19, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,19, 3, 0, 0, 0, 0, 0, 0, 6,19, 1, 0, 0, 0, 0, 0, 0, 6,25,73,
+ 5,14,79, 5,14,83, 6,25,79, 5,14,81, 6,25,80, 6,25,74, 5,14,86, 5,14,82,
+ 5,14,85, 6,25,77, 6,25,81, 6,25,70, 4,14,29, 5,14,84, 6,25,72, 4,14,30,
+ 5,14,80, 6,25,78,15,17,15, 6,25,71, 0, 0, 0, 6,25,76, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,17,
+ 6,34,23, 5,19,72, 6,34,21, 5,19,75, 4,19,33, 5,19,74, 5,19,70, 6,34,19,
+ 4,19,36, 5,19,73,15,22,77,15,22,78,15,22,79, 6,34,22, 6,34,25, 0, 0, 0,
+ 0, 0, 0, 6,34,20, 6,34,24,15,22,80, 6,34,16, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,71, 5,19,76, 5,26,22, 5,26,31, 6,43,65,
+ 5,26,21, 6,43,69, 5,26,25, 5,26,26, 5,26,28, 5,26,23, 6,43,67, 6,43,63,
+ 5,26,32, 6,43,66, 6,43,59, 6,43,70, 5,26,30, 6,43,62, 0, 0, 0, 0, 0, 0,
+ 4,25,25, 6,43,61, 6,43,64, 6,43,68,15,29,41,15,29,42, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,25,23, 6,43,60,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,25,17, 5,26,24, 6,53,44, 4,30,82, 4,30,80, 4,30,91, 5,32,57, 4,30,81,
+ 4,30,85, 4,36,93, 4,30,89, 6,53,41, 5,32,58, 5,32,60, 5,32,66, 4,30,92,
+ 6,53,39, 5,32,65, 0, 0, 0, 6,53,45, 5,32,69, 5,32,67, 5,32,59, 5,26,29,
+ 5,32,63, 5,32,62, 6,53,43, 6,53,42, 4,30,93,15,35,75,15,35,76, 0, 0, 0,
+ 6,53,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,46, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,56,
+ 5,32,70, 5,32,61, 0, 0, 0, 5,39,56, 5,39,48, 4,37, 5, 4,37,11, 5,39,43,
+ /* plane 2, page 78 */
+ 0, 250, /* first, last */
+ 5,39,47, 4,37, 6, 6,63,15, 6,63,10, 4,37,14, 4,37,10, 6,63,11, 6,63,20,
+ 5,39,45, 5,39,46, 5,39,51, 4,37,12, 6,63,23, 6,63,21, 5,39,58, 6,63,14,
+ 0, 0, 0, 4,37, 7, 4,37, 2, 5,39,49, 5,39,50, 6,63,19, 5,39,44, 5,39,54,
+ 6,63,17, 6,63,16, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,42,14, 6,63,24, 6,63,12,
+ 4,37,13, 0, 0, 0, 6,63,18, 0, 0, 0, 6,63,22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,39,53, 4,43,26, 4,43,22, 4,43,13, 4,43,25, 5,46,51, 4,43,20,
+ 7, 5,61, 4,43,18, 5,46,53, 5,46,55, 5,46,52, 4,43,17, 7, 5,53, 4,43,16,
+ 5,46,49, 5,46,50, 7, 5,51, 5,39,55, 5,46,56, 7, 5,52, 7, 5,59, 7, 5,57,
+ 0, 0, 0, 0, 0, 0,15,48,48,15,48,49,15,48,50,15,48,51,15,48,52, 0, 0, 0,
+ 0, 0, 0, 7, 5,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5,58, 0, 0, 0, 7, 5,62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,46,54, 5,46,48, 4,49,43, 5,53,69, 7,16,15,
+ 7,16,16, 5,53,76, 5,53,77, 4,49,44, 4,49,39, 5,53,72, 7,16,21, 5,53,70,
+ 5,53,71, 5,53,75, 7,16,17, 7,16,23, 5,53,78, 0, 0, 0, 0, 0, 0,15,54,20,
+ 15,54,21, 7,16,20, 0, 0, 0, 7,16,19, 5,53,74, 0, 0, 0, 7,16,18, 0, 0, 0,
+ 0, 0, 0, 7,16,24, 0, 0, 0, 7,16,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,53,68, 7, 5,55, 0, 0, 0, 0, 0, 0, 4,54,92, 5,60,25, 5,53,80, 7,25,48,
+ 4,49,49, 4,37, 9, 4,54,94, 7,25,39, 5,60,21, 7,25,40, 5,60,28, 5,60,26,
+ 5,60,29, 7,25,47, 7,32,74, 5,53,79, 5,60,23, 4,54,93, 5,60,24, 4,55, 3,
+ 7,25,41, 7,25,45, 7,25,49, 7,25,43, 7,25,38, 7,25,44, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,59,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,25,36, 7,25,37,
+ 7,25,46, 5,60,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,66,60,
+ 5,60,30, 7,25,42, 4,59,88, 5,60,32, 5,66,64, 7,32,72, 5,66,69, 7,32,73,
+ 5,66,65, 5,66,68, 4,59,86, 5,60,31, 5,66,61, 5,66,66, 5,66,62, 5,66,63,
+ 4,59,90, 7,32,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,66,67, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,40,11, 4,64,19, 7,40, 7,
+ 4,64,20, 5,72,36, 4,64,21, 7,40, 6, 5,72,35, 5,72,34, 4,64,22, 0, 0, 0,
+ 0, 0, 0,15,67, 7, 4,64,17, 7,40, 8, 0, 0, 0, 7,40, 9, 0, 0, 0, 0, 0, 0,
+ 7,40, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,40,10, 7,32,76,
+ 0, 0, 0, 4,67,74, 4,67,75, 7,46,41, 7,46,45, 7,46,44, 5,76,56, 5,76,57,
+ 7,46,46, 7,46,43, 7,46,42,
+ /* plane 2, page 79 */
+ 0, 255, /* first, last */
+ 5,80,49, 5,80,48, 5,80,46, 4,70,55, 7,51,90, 5,80,47, 7,51,89,15,71,88,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,83,63, 5,83,62, 5,83,61, 0, 0, 0, 0, 0, 0,
+ 7,60, 2, 7,59,94, 4,74,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,60, 1, 5,86, 9,
+ 5,87,75, 7,62,93, 7,62,94, 0, 0, 0, 7,65,34, 7,65, 7, 0, 0, 0, 7,66,31,
+ 7,66,32, 7,66,33, 5,90,77, 7,68,49, 7,69,25, 4, 4,67, 0, 0, 0, 6,19, 5,
+ 15,12,50, 6,25,83, 6,25,82,15,17,16, 6,34,26,15,22,81, 0, 0, 0, 6,43,73,
+ 6,43,71, 5,26,33, 6,43,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5,63,
+ 0, 0, 0, 4,49,51, 4,49,50, 0, 0, 0, 7,16,26, 6, 5,28, 6, 5,29, 0, 0, 0,
+ 0, 0, 0, 5, 4,70, 5, 7,26, 5, 7,27, 0, 0, 0, 0, 0, 0, 5, 7,25, 5, 7,28,
+ 4,10,45, 5,10,57, 5,10,56, 0, 0, 0, 5,10,55, 6,19, 7, 6,19, 8, 0, 0, 0,
+ 6,19, 6,15,12,51,15,12,52, 0, 0, 0, 6,19, 9, 0, 0, 0, 5,10,58, 0, 0, 0,
+ 6,25,84, 4,14,34, 6,25,85, 6,34,28, 0, 0, 0,15,17,17,15,17,18,15,17,19,
+ 15,17,21,15,17,22, 0, 0, 0, 0, 0, 0,15,22,85, 4,19,38, 5,19,78, 6,34,27,
+ 15,22,82,15,22,83,15,22,86, 0, 0, 0, 6,43,75, 0, 0, 0, 0, 0, 0, 6,43,76,
+ 6,43,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,22,84,
+ 0, 0, 0, 5,32,72, 5,32,71, 6,53,48, 4,30,94, 6,53,47, 0, 0, 0, 5,32,73,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,35,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,37,15, 6,63,25, 6,63,26,15,42,16,15,42,17,15,42,19,15,42,20,15,42,18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,43,28, 0, 0, 0, 0, 0, 0,
+ 7, 5,64, 7, 5,65, 0, 0, 0, 5,53,82, 7,16,28, 5,53,81, 7,16,27, 0, 0, 0,
+ 4,55, 7, 4,55, 8, 5,60,34, 5,60,36, 7,32,78, 5,60,33, 7,25,50, 5,66,70,
+ 7,32,79, 0, 0, 0, 7,32,80, 5,72,37, 5,72,38, 5,72,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,72,40, 7,40,12, 7,46,48, 0, 0, 0, 7,46,47, 0, 0, 0,
+ 5,66,71, 0, 0, 0, 0, 0, 0, 7,56,32, 7,56,33,15,71,89, 7,60, 3, 0, 0, 0,
+ 4,75,83, 0, 0, 0, 0, 0, 0, 7,63, 1, 0, 0, 0, 7,69,26, 5, 4,71, 5, 4,72,
+ 6,13,25, 6,13,23, 6,13,24, 5, 7,29, 0, 0, 0, 0, 0, 0, 6,19,11, 5,10,59,
+ 4,10,47, 6,16,22, 6,19,10, 0, 0, 0, 0, 0, 0, 5,14,87, 5,14,88, 6,25,86,
+ 6,25,90, 5,19,79, 4,14,36, 6,25,87, 6,25,88, 6,25,89, 0, 0, 0, 4,19,41,
+ 5,19,80, 6,34,30,15,22,89, 0, 0, 0, 0, 0, 0, 6,34,29, 0, 0, 0, 4,25,28,
+ 6,43,77, 5,26,34, 6,43,79, 4,25,27,15,29,43, 0, 0, 0, 6,43,78, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,22,88, 5,32,74, 5,32,77, 5,32,75, 5,32,76, 5,32,78,
+ 0, 0, 0, 6,53,51,15,35,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,49,
+ /* plane 2, page 80 */
+ 1, 253, /* first, last */
+ 4,31, 1, 4,37,17, 4,37,19, 6,63,30, 0, 0, 0,15,42,21, 6,63,29,
+ 5,39,60, 6,63,31, 6,63,27, 6,63,28, 0, 0, 0, 7, 5,67, 5,46,58, 5,46,59,
+ 5,46,60, 7, 5,66, 0, 0, 0, 0, 0, 0, 5,53,86, 5,53,88, 5,53,84, 4,49,56,
+ 5,53,87, 5,53,85,15,54,22, 5,53,83, 7,16,29, 0, 0, 0, 7,16,30, 7,25,51,
+ 0, 0, 0, 7,16,31, 4,55, 9, 5,66,72, 7,32,82, 7,32,83, 7,32,84, 0, 0, 0,
+ 7,32,81, 0, 0, 0, 0, 0, 0, 5,72,42, 5,72,41, 7,40,13, 0, 0, 0, 4,67,77,
+ 5,76,59, 5,76,58, 7,46,49, 0, 0, 0, 7,51,92, 4,70,60, 7,56,34, 0, 0, 0,
+ 0, 0, 0, 5,87,76, 5,87,77, 0, 0, 0, 7,67,36, 7,69,56, 0, 0, 0, 6, 8,73,
+ 15, 4,93, 4, 7,41, 5, 7,30, 4, 7,39, 6,13,27, 5, 7,31, 5,10,62, 5,10,60,
+ 5,10,61, 6,19,13, 0, 0, 0, 6,19,12,15,12,53, 0, 0, 0, 5,14,89, 6,26, 1,
+ 6,26, 3, 4,14,40, 5,14,90, 6,25,94, 6,25,91, 4,14,42, 6,26, 2, 0, 0, 0,
+ 15,17,23,15,17,24, 6,26, 4, 6,25,92, 6,25,93, 0, 0, 0, 4,19,44, 5,19,82,
+ 4,19,42, 6,34,31, 0, 0, 0,15,22,90,15,22,91,15,22,92,15,22,93,15,23, 1,
+ 15,23, 2, 6,34,32, 6,34,33, 6,26, 5, 6,43,84, 6,43,80, 5,26,35, 4,25,29,
+ 6,43,82, 6,43,83, 0, 0, 0,15,29,44,15,29,45, 0, 0, 0, 6,43,81, 6,53,52,
+ 6,53,54, 5,32,80, 6,53,56, 6,53,55, 6,53,53, 0, 0, 0, 0, 0, 0,15,35,79,
+ 15,35,80, 0, 0, 0, 0, 0, 0, 6,63,33, 6,63,32, 6,63,43,15,42,22, 5,46,61,
+ 7, 5,68, 0, 0, 0, 7, 5,69, 0, 0, 0,15,48,53,15,48,54,15,48,55,15,48,56,
+ 15,48,57,15,48,58, 0, 0, 0, 4,49,57, 7,16,36, 4,49,59, 7,16,32, 7,16,37,
+ 5,53,90, 5,53,89,15,54,23,15,54,24,15,54,25, 0, 0, 0,15,54,26,15,54,27,
+ 7,16,35, 7,16,33, 0, 0, 0, 0, 0, 0, 4,55,11, 4,60, 3, 4,55,10, 7,25,52,
+ 5,60,39, 7,32,85, 0, 0, 0, 0, 0, 0, 5,60,38,15,59,27,15,59,28, 0, 0, 0,
+ 0, 0, 0, 7,25,53, 7,25,54, 7,22,89, 0, 0, 0, 5,60,37, 7,16,34, 7,25,55,
+ 4,60, 2, 4,60, 1, 7,32,86, 0, 0, 0, 7,32,88, 0, 0, 0, 7,32,87,15,63,66,
+ 7,32,89, 7,40,14, 5,72,43, 7,40,15,15,67, 8,15,67, 9, 0, 0, 0, 5,76,61,
+ 7,46,51, 5,76,60, 7,46,53,15,69,54, 0, 0, 0, 7,46,50, 7,46,52, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,71,91, 7,56,36, 5,83,64, 7,56,35, 7,56,37,15,71,90,
+ 7,63, 2, 5,86,10, 0, 0, 0, 0, 0, 0, 7,63, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,66,34, 0, 0, 0, 0, 0, 0, 5, 2,93,15, 2,71, 6, 8,74, 4, 4,68,
+ 5, 4,74, 4, 4,70, 5, 4,75, 5, 4,73,15, 4,94, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 7,48, 6,13,28, 5, 7,33, 4, 7,43, 6,13,32, 6,13,34,
+ 6,13,30, 5, 7,34, 5, 7,35, 6,13,33, 6,13,31, 5, 7,32,
+ /* plane 2, page 81 */
+ 0, 255, /* first, last */
+ 6,13,35, 0, 0, 0, 6,13,36, 6,19,25, 6,19,21, 6,19,14, 6,19,18, 4,10,62,
+ 6,19,22, 4,10,60, 6,19,28, 5,10,69, 6,19,19, 5,10,73, 4,10,59, 6,19,15,
+ 6,19,27, 5,10,64, 5,10,71, 5,10,75, 5,10,65, 5,10,74, 5,10,72, 5,10,67,
+ 5,10,76, 6,19,16, 0, 0, 0, 5,10,63, 5,10,70, 5,10,66, 5,10,68, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,12,54,15,12,56, 6,19,23, 0, 0, 0, 6,19,26,
+ 0, 0, 0, 6,19,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,14,48, 5,15, 4, 3,14,58, 4,14,44, 5,14,91, 6,26, 6, 4,14,46,
+ 5,15, 2, 5,14,92, 6,26, 8, 4,14,43, 6,26, 9, 5,15, 3, 6,26,10, 4,14,51,
+ 6,26,12, 5,14,94, 0, 0, 0, 0, 0, 0, 5,15, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,26,11,15,17,25,15,17,26,15,17,27,15,17,28,15,17,29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,26, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,15, 1,
+ 5,14,93, 4,14,52, 4,19,53, 6,34,51, 6,34,38, 6,34,45, 5,19,84, 5,19,83,
+ 5,19,93, 4,19,52, 6,34,39, 6,34,36, 0, 0, 0, 6,34,34, 5,19,90, 5,19,91,
+ 5,19,85, 6,34,42, 5,19,88, 6,34,52, 5,19,89, 6,34,35, 6,34,47, 0, 0, 0,
+ 6,34,43, 6,34,48,15,23, 5, 6,34,50, 0, 0, 0, 0, 0, 0, 6,34,44, 0, 0, 0,
+ 0, 0, 0, 6,34,41, 0, 0, 0, 0, 0, 0, 6,34,49,15,23, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,94, 6,34,37, 6,34,46,
+ 5,19,87, 5,19,92, 0, 0, 0, 5,26,41, 5,26,44, 6,43,89, 6,44, 3, 4,19,51,
+ 6,43,88, 5,26,43, 6,43,93, 6,44, 1, 5,26,38, 6,44, 6, 6,43,87, 4,25,47,
+ 5,26,42, 5,26,40, 5,26,36, 4,25,46, 5,32,81, 6,44, 5, 5,32,94, 4,25,32,
+ 6,43,94, 5,26,45, 6,43,91, 5,26,46, 6,44, 8, 5,26,37, 5,26,39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,29,47,15,29,48,15,29,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,43,92, 0, 0, 0, 0, 0, 0, 6,44, 7, 0, 0, 0, 6,43,86, 6,44, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,44, 2, 4,25,36, 4,25,48, 5,26,47, 4,25,30,
+ 0, 0, 0, 6,53,59, 6,53,62, 6,53,58, 4,31,10, 5,32,88, 6,53,60, 5,32,87,
+ 6,53,63, 5,32,85, 6,53,57, 4,31, 3, 4,31, 8, 4,31,17, 4,31,14, 0, 0, 0,
+ 5,32,90, 6,53,66, 5,32,86, 4,31,15, 4,31, 4, 6,53,68, 5,32,89, 5,32,82,
+ 5,32,92, 6,53,70, 0, 0, 0, 0, 0, 0, 6,53,61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,35,81,15,35,82,15,35,83, 6,43,85, 0, 0, 0, 0, 0, 0, 6,53,67, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,21, 5,32,83, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,93, 5,32,84,
+ /* plane 2, page 82 */
+ 0, 255, /* first, last */
+ 6,53,69, 0, 0, 0, 5,39,64, 4,37,37, 0, 0, 0, 6,63,36, 4,37,30, 5,39,67,
+ 6,63,40, 5,39,69, 5,39,70, 6,63,41, 4,43,47, 6,63,46, 6,63,38, 6,63,47,
+ 7, 5,76, 6,63,39, 5,39,71, 5,39,68, 6,63,35, 6,63,42, 6,63,37, 5,39,66,
+ 6,63,34, 5,39,63, 5,39,62, 5,39,61, 7, 5,70, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,42,23,15,42,24,15,42,25,15,42,26,15,42,27,15,42,28,
+ 15,42,29, 4,37,26, 6,63,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,63,44,
+ 5,39,73, 0, 0, 0, 0, 0, 0, 4,37,27, 4,43,48, 4,43,44, 4,43,30, 5,46,66,
+ 5,46,71, 4,43,46, 7, 5,75, 5,46,76, 5,46,69, 4,43,33, 7, 5,80, 4,43,32,
+ 4,49,69, 7,16,45, 5,46,68, 5,54, 1, 5,46,70, 7, 5,77, 5,46,74, 7, 5,82,
+ 4,43,41, 4,43,43, 4,43,38, 5,46,63, 5,46,75, 7, 5,71, 7, 5,72, 7, 5,74,
+ 4,43,42, 5,46,67, 7, 5,78, 5,46,62, 5,46,65, 5,53,91, 5,46,73, 5,46,72,
+ 0, 0, 0, 0, 0, 0, 7, 5,73,15,48,59,15,48,60,15,48,61, 7, 5,79, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,43,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,10, 5,54,11, 4,49,62, 5,54, 5,
+ 5,54, 3, 5,54, 7, 5,53,93, 4,49,67, 5,54, 9, 5,53,94, 5,54, 6, 5,54, 4,
+ 4,49,66, 7,16,38, 7,16,46, 0, 0, 0, 7,16,47, 7,16,43, 7,16,39, 5,46,77,
+ 4,49,71, 5,53,92, 7,16,41, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,54,29, 0, 0, 0,
+ 7,16,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,16,44, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,12,
+ 4,49,70, 0, 0, 0, 5,39,72, 5,54, 8, 4,60,11, 5,60,40, 5,60,43, 4,55,21,
+ 4,55,22, 7,16,50, 7,25,62, 7,25,57, 5,60,42, 7,25,58, 5,60,44, 7,25,68,
+ 5,60,41, 7,33, 2, 7,25,63, 7,25,64, 7,25,61, 4,55,23, 7,25,67, 5,60,47,
+ 7,16,40, 5,60,46, 7,25,65, 7,25,60, 7,25,59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,59,30,15,59,31,15,59,32, 0, 0, 0, 0, 0, 0, 7,25,66, 0, 0, 0, 0, 0, 0,
+ 7,25,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,60, 8, 7,33, 3, 7,32,94, 5,66,78, 4,60,12, 5,66,75, 7,32,91,
+ 7,32,92, 5,66,80, 4,60, 4, 5,66,76, 5,66,79, 5,66,81, 0, 0, 0, 0, 0, 0,
+ 5,66,74,15,63,67,15,63,68, 7,33, 4, 7,33, 5, 7,32,93, 0, 0, 0, 5,66,77,
+ 7,32,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,72,47,
+ /* plane 2, page 83 */
+ 0, 254, /* first, last */
+ 5,72,44, 5,72,49, 4,64,30, 5,72,48, 4,64,27, 5,72,52, 5,72,46, 7,40,18,
+ 4,64,26, 7,40,20, 4,64,28, 4,64,29, 7,40,16, 5,72,45, 7,40,17, 5,72,51,
+ 5,72,50, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,67,10, 7,43,61, 7,40,21, 7,40,19,
+ 0, 0, 0, 0, 0, 0, 5,76,64, 5,76,66, 5,76,62, 7,46,56, 5,76,65, 5,76,67,
+ 0, 0, 0, 7,46,55,15,69,55, 4,67,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,76,63, 4,67,83, 7,46,54, 0, 0, 0, 0, 0, 0, 7,52, 2, 5,80,50, 5,80,52,
+ 5,80,51, 5,80,53, 7,51,94, 0, 0, 0, 0, 0, 0, 7,52, 3, 7,51,93, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,72,89, 5,83,67, 7,56,38, 5,83,65, 5,83,66, 7,56,39,
+ 5,83,69, 4,74,57, 7,52, 1, 5,83,68, 7,57,19, 0, 0, 0, 5,83,70, 0, 0, 0,
+ 0, 0, 0, 5,86,11, 7,60, 6, 4,74,56, 7,60, 5, 0, 0, 0, 0, 0, 0, 7,63, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,76,84, 7,66,35, 7,66,37, 0, 0, 0, 7,66,36,
+ 0, 0, 0,15,76,70, 5,91,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7,36, 4,10,64,
+ 4,10,65, 4,14,54, 5,15, 8, 5,15, 7, 6,26,15, 6,26,16, 0, 0, 0, 4,19,56,
+ 5,20, 2,15,23, 7, 5,26,50, 4,25,49, 5,26,51, 5,26,49, 5,26,53, 5,26,48,
+ 6,44, 9, 5,26,52, 5,33, 3, 5,33, 2, 0, 0, 0, 5,33, 1, 6,63,49, 6,63,50,
+ 4,37,39, 4,37,40, 5,39,76, 5,39,74, 5,39,75, 4,37,41, 6,63,48, 4,37,43,
+ 15,45,31, 0, 0, 0, 5,46,78, 4,43,50, 7, 5,85, 5,46,79, 4,43,49, 7, 5,84,
+ 0, 0, 0, 4,43,51, 4,49,73, 4,49,72, 4,49,74, 5,54,13, 5,66,85, 7,25,69,
+ 5,58,85, 0, 0, 0, 5,60,48, 5,66,84, 5,66,83, 5,66,82, 5,72,55, 5,72,54,
+ 5,72,53, 5,72,56, 7,40,22, 0, 0, 0, 7,40,23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,74,58, 0, 0, 0, 0, 0, 0, 7,70,31, 7,70,41, 6, 6,31, 6, 8,75,
+ 6, 8,76, 6,19,33, 6,19,31, 6,19,32, 5,10,78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,15,10, 5,15,11, 6,26,19,15,17,31,15,17,32, 6,26,17, 6,26,18, 0, 0, 0,
+ 5,15, 9, 5,20, 3, 5,20, 4, 4,19,60, 6,34,57, 6,34,55, 5,20, 5, 6,34,53,
+ 6,34,59, 6,34,54, 6,34,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,34,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,25,50, 6,44,12,
+ 0, 0, 0,15,29,50, 0, 0, 0, 0, 0, 0, 6,44,10, 0, 0, 0, 0, 0, 0,15,29,51,
+ 5,33, 4, 4,31,18, 6,53,73, 0, 0, 0, 4,31,21, 4,31,20, 6,53,71, 5,26,54,
+ 4,31,22,15,35,85, 6,53,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,39,77, 5,39,78, 6,63,51, 0, 0, 0, 0, 0, 0, 5,39,79,
+ 5,39,80,15,42,30, 7, 5,88, 4,43,52, 7, 5,86, 7, 5,87,15,48,65, 7, 5,89,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,16,52, 4,49,75,15,54,31, 7,16,51,
+ /* plane 2, page 84 */
+ 0, 255, /* first, last */
+ 5,60,49, 5,60,50, 0, 0, 0, 7,25,70, 7,25,71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,83,71, 0, 0, 0, 5,86,12, 0, 0, 0, 5, 2,94, 6, 5,30, 4, 4,71,
+ 6, 8,77, 5, 4,77, 5, 4,76,15, 5, 1,15, 5, 2, 5, 7,37, 4, 7,52, 0, 0, 0,
+ 15, 8,16,15, 8,17,15, 8,18,15, 8,19, 6,13,39,15, 8,21, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,10,69, 4,10,67, 6,19,37, 5,10,80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,12,57,15,12,58,15,12,59,15,12,61,15,12,62,15,12,63,15,12,65,
+ 15,12,67, 0, 0, 0, 6,19,35, 0, 0, 0, 6,19,36,15,12,68, 0, 0, 0, 0, 0, 0,
+ 15,12,64, 6,19,34, 0, 0, 0, 0, 0, 0, 5,10,79, 5,10,81, 4,14,64, 5,15,19,
+ 6,26,20, 6,19,38, 6,26,21, 5,15,15, 6,26,25, 5,15,12, 5,15,17, 5,15,16,
+ 4,14,59, 4,14,61, 5,15,22, 5,15,18, 5,15,21, 0, 0, 0, 0, 0, 0,15,17,30,
+ 4,14,57, 5,15,23, 6,26,24,15,17,34,15,17,35,15,17,37,15,17,38, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,14,58, 5,15,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,26,23, 0, 0, 0, 0, 0, 0,15,17,40, 0, 0, 0,15,17,33, 5,20, 6,
+ 5,15,14, 0, 0, 0, 6,26,22, 5,20,12, 5,20, 8, 6,34,65, 6,34,63, 0, 0, 0,
+ 5,20,17, 5,20,16, 5,20,10, 6,34,64, 5,20,20, 5,20,18, 5,15,24, 5,20,14,
+ 5,20, 7, 5,20, 9, 5,20,13, 0, 0, 0,15,23, 8, 0, 0, 0,15,23, 9,15,23,10,
+ 15,23,11,15,23,14,15,23,15,15,23,17,15,23,18,15,23,19, 0, 0, 0, 6,34,62,
+ 0, 0, 0, 0, 0, 0, 6,34,60, 0, 0, 0, 6,44,14, 0, 0, 0,15,23,16, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,20,11, 0, 0, 0,15,23,12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,66, 0, 0, 0, 0, 0, 0, 5,20,15,
+ 5,20,19, 6,34,61, 5,26,56, 5,26,62, 5,26,55, 5,26,59, 4,25,54, 6,44,21,
+ 4,25,55, 4,25,53, 5,26,60, 5,26,61, 6,44,17, 5,26,58, 5,26,63, 0, 0, 0,
+ 0, 0, 0,15,29,52,15,29,53,15,29,54,15,29,55, 6,44,20, 0, 0, 0, 0, 0, 0,
+ 6,44,16, 6,44,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,26,65, 5,26,64,
+ 0, 0, 0, 0, 0, 0, 5,33, 8, 6,53,81, 4,31,23, 5,33, 9, 6,53,74, 6,53,76,
+ 5,33, 5, 6,53,78, 4,31,33, 4,31,35, 6,53,79, 6,53,82, 5,33, 6, 5,33, 7,
+ 0, 0, 0, 0, 0, 0, 6,53,77,15,35,87,15,35,88,15,35,89,15,35,90,15,35,91,
+ 15,35,92,15,35,93,15,35,94,15,36, 1,15,36, 2,15,36, 3,15,36, 4,15,36, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,80, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,53,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,63,59, 5,39,88, 6,63,52, 7, 5,94, 5,39,90, 6,63,54,
+ /* plane 2, page 85 */
+ 0, 255, /* first, last */
+ 4,37,50, 5,39,83, 5,39,82, 6,63,55, 5,39,91, 6,63,57, 6,63,58, 5,39,85,
+ 6,63,53, 5,39,81, 5,39,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,63,56, 0, 0, 0,15,42,33,15,42,35,15,42,36,15,42,37,15,42,38,15,42,39,
+ 15,42,40,15,42,41,15,42,43,15,42,44,15,42,45,15,42,47,15,42,48,15,42,49,
+ 15,42,50, 0, 0, 0, 4,37,52,15,42,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,39,87, 5,39,92, 5,39,89, 5,39,84,15,48,68, 4,43,58, 5,46,82, 5,46,83,
+ 7, 6, 1, 5,46,80, 4,37,48, 7, 6, 5, 5,46,85, 7, 5,93,15,48,66,15,48,67,
+ 15,48,69,15,48,70,15,48,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 2, 0, 0, 0, 7, 5,90, 7, 6, 3, 5,46,81,
+ 5,46,84, 7, 5,92, 0, 0, 0,15,42,42, 7,16,56, 5,54,17, 5,54,14, 5,54,18,
+ 7,16,53, 4,49,81, 0, 0, 0, 4,49,83, 5,54,20, 4,49,82, 7,16,54, 7,16,58,
+ 4,49,79, 0, 0, 0, 7,16,55, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,54,33,15,54,34,
+ 15,54,35, 5,54,16, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,54,36, 5,54,15,15,54,37,
+ 15,54,38,15,54,39,15,54,41,15,54,43,15,54,44,15,54,45, 0, 0, 0, 0, 0, 0,
+ 5,60,54, 7,25,72, 5,60,52, 7,25,79, 7,25,74, 5,60,51, 4,55,26, 7,25,73,
+ 5,60,53, 4,55,29, 7,25,76, 4,55,28, 5,54,21, 5,60,56, 5,60,55, 5,60,57,
+ 0, 0, 0, 0, 0, 0,15,59,33,15,59,34,15,59,35,15,59,36,15,59,37,15,59,38,
+ 15,59,39,15,59,40,15,59,41, 7,25,75, 7,25,78, 0, 0, 0, 0, 0, 0,15,54,42,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,33, 9,
+ 5,66,86, 5,66,88, 7,33, 6, 7,33, 8, 5,66,87, 4,60,16, 5,66,90, 7,33, 7,
+ 5,66,89, 7,33,10,15,63,69,15,63,70,15,63,71,15,63,72,15,63,73, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,64,32, 5,72,58, 5,72,57, 0, 0, 0,15,67,11,15,67,12,
+ 15,67,13,15,67,14, 0, 0, 0, 7,40,26, 7,40,24, 0, 0, 0, 0, 0, 0, 7,40,25,
+ 0, 0, 0,15,67,15, 0, 0, 0, 5,76,69, 5,76,70, 7,46,57, 7,46,58, 5,76,68,
+ 5,76,71, 4,64,33, 7,46,59,15,69,58,15,69,59,15,69,60,15,69,61, 0, 0, 0,
+ 0, 0, 0, 7,46,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,80,54, 5,80,55, 0, 0, 0, 0, 0, 0,15,71,93, 0, 0, 0,
+ 7,52, 4, 4,70,66, 0, 0, 0,15,71,92, 0, 0, 0, 5,83,72, 7,56,40, 5,83,73,
+ 0, 0, 0,15,73,59,15,73,60, 7,56,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,83,74, 5,86,14, 4,74,59, 5,86,13, 5,86,15,15,74,69,
+ 0, 0, 0, 7,60, 8, 7,60, 7, 0, 0, 0, 7,63, 6, 0, 0, 0, 0, 0, 0, 7,63, 5,
+ 7,63, 7, 0, 0, 0, 7,66,38, 5,90,13, 0, 0, 0, 0, 0, 0, 5,90,78, 4,77,85,
+ /* plane 2, page 86 */
+ 1, 255, /* first, last */
+ 7,68,51, 0, 0, 0, 7,69,27, 5,92,35, 6, 2, 7, 6, 5,32, 0, 0, 0,
+ 6, 8,78,15, 2,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,13,40,15, 5, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,19,39, 6,19,41, 0, 0, 0,
+ 0, 0, 0,15, 8,22,15, 8,24,15, 8,25,15, 8,26,15, 8,27,15, 8,29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 8,23, 0, 0, 0, 6,17,58, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,15,25, 6,26,26, 4,14,67, 5,15,26, 0, 0, 0,
+ 6,26,27, 6,19,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,12,69,15,12,70,15,12,71,15,12,72,15,12,73,15,17,41,15,17,43,15,17,46,
+ 0, 0, 0, 0, 0, 0, 6,26,30, 0, 0, 0, 6,26,31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,26,29, 6,26,32, 6,26,28,15,12,74, 4,10,72, 5,20,22, 6,26,33,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,17,42,15,17,44,15,17,45,15,17,47,
+ 15,17,48,15,17,49,15,17,50,15,17,51,15,17,52,15,23,23, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,20,21, 0, 0, 0, 0, 0, 0, 6,44,24, 5,26,66, 6,44,25, 6,44,26, 6,44,28,
+ 5,26,67, 6,44,29, 6,44,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,44,22,
+ 6,44,23,15,23,20,15,23,22,15,23,24,15,29,59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,23,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,53,85, 5,33,11, 5,33,10, 5,33,12, 6,44,31, 4,31,40,15,29,56,15,29,57,
+ 15,29,58,15,29,60,15,29,61,15,29,62,15,29,63,15,29,66,15,29,67,15,29,68,
+ 15,36, 8,15,36,10,15,29,65, 0, 0, 0, 6,53,84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,40, 3, 6,63,63,
+ 6,63,64, 4,37,54, 6,63,67, 6,63,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,36, 7,15,36, 9,15,36,11,15,36,12,15,36,13,15,36,14,15,36,15,15,36,16,
+ 15,36,17,15,36,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,63,61, 6,63,66, 5,40, 1, 6,63,62, 0, 0, 0, 4,43,63, 7, 6, 6, 6,63,60,
+ 6,63,68, 0, 0, 0,15,42,51,15,42,53,15,42,54,15,42,55,15,42,56,15,42,58,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,54,24, 7,16,60, 5,54,22, 7,16,61, 4,49,87, 5,54,25, 5,54,23, 5,54,26,
+ 7, 6,10, 7,16,59,15,48,74,15,48,73,15,54,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,55,35, 5,60,58,
+ 7,25,83, 4,55,36, 7,25,86, 7,25,84, 7,16,62,15,48,75, 0, 0, 0,15,54,46,
+ 15,54,47,15,54,48,15,54,50, 7,25,81, 7,25,85, 7,25,82, 0, 0, 0, 7,25,80,
+ /* plane 2, page 87 */
+ 1, 255, /* first, last */
+ 15,59,45,15,59,47, 4,60,20, 5,66,91, 7,33,12, 0, 0, 0,15,59,43,
+ 15,59,44,15,59,46,15,59,48,15,59,49,15,59,50, 0, 0, 0, 0, 0, 0, 7,33,11,
+ 0, 0, 0, 4,60,19, 5,72,59, 7,40,28, 7,40,29,15,63,74, 0, 0, 0,15,63,75,
+ 0, 0, 0, 0, 0, 0, 5,76,72, 4,67,87, 0, 0, 0, 0, 0, 0,15,69,62, 7,46,62,
+ 7,52, 6, 0, 0, 0, 0, 0, 0, 7,52, 5, 0, 0, 0,15,69,63, 4,72,93, 7,56,42,
+ 0, 0, 0, 7,56,43, 7,60, 9,15,73,61, 7,60,10, 0, 0, 0, 0, 0, 0, 7,60,11,
+ 5,87,78, 7,60,12, 5,87,79,15,74,71, 5,89,18, 0, 0, 0, 0, 0, 0, 7,66,41,
+ 7,66,39, 7,67,61,15,76,71,15, 2,73, 6,19,45, 6,34,68, 4,25,59, 6,44,32,
+ 0, 0, 0, 6,53,86, 0, 0, 0, 6,63,69, 7, 6,12, 7,16,63, 0, 0, 0, 7,16,64,
+ 7,33,13, 0, 0, 0, 5,83,75, 7,65, 8, 4, 1,94, 6, 5,33, 0, 0, 0,15, 2,74,
+ 6, 8,79, 0, 0, 0,15, 5, 5, 6, 8,80, 4, 7,53, 5, 7,40, 4, 7,55, 0, 0, 0,
+ 5, 7,39, 0, 0, 0,15, 8,30,15, 8,31,15, 8,32,15, 8,33,15, 8,34, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,13,42, 6,19,49, 6,19,52, 5,10,84, 5,10,82, 4,10,80,
+ 5,10,85, 6,19,54, 6,19,48, 6,19,50, 4,10,77, 6,19,47, 5,10,83, 6,19,55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,12,75,15,12,76,15,12,78,15,12,79, 0, 0, 0,
+ 0, 0, 0,15,12,80, 6,19,53, 6,19,51, 6,19,46, 0, 0, 0, 5,15,28, 5,15,27,
+ 6,26,37, 5,15,29, 6,26,38, 5,15,30, 5,10,86, 5,20,28, 6,26,39, 0, 0, 0,
+ 15,17,53,15,17,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,26,34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,26,36,
+ 5,20,26, 6,34,73, 5,20,31, 4,19,72, 5,20,29, 6,34,72, 5,20,23,15,23,26,
+ 15,23,28,15,23,29,15,23,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,19,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,69,
+ 0, 0, 0, 6,34,74, 4,25,63, 5,26,68, 4,25,64, 4,25,60, 6,44,33, 6,44,34,
+ 6,44,37, 6,44,39, 4,25,61, 6,44,36, 4,31,49,15,29,69,15,29,71,15,29,73,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,20,30, 0, 0, 0,15,29,70,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,33,22, 5,33,15, 6,53,89,
+ 6,53,87, 6,53,90, 5,33,16, 5,33,13, 5,33,18, 5,33,20, 5,33,24, 5,33,19,
+ 4,31,46, 6,54, 1, 5,33,14, 6,53,91, 6,53,94, 0, 0, 0, 6,53,92, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,36,19,15,36,20,15,36,21,15,36,22,15,36,23,15,36,24,
+ 15,36,25,15,36,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,88,
+ 6,53,93, 0, 0, 0, 5,33,23, 5,33,21, 0, 0, 0, 5,40, 8, 6,63,73, 5,37,13,
+ /* plane 2, page 88 */
+ 0, 254, /* first, last */
+ 5,40,13, 6,63,72, 6,63,70, 6,63,74, 4,37,60, 5,40,14, 5,40, 9, 6,63,78,
+ 6,63,79, 5,40,11, 5,40, 7, 5,40,12, 6,63,80, 5,40,10, 6,63,71,15,42,64,
+ 15,42,59,15,42,60,15,42,61,15,42,62,15,42,63,15,42,65,15,42,66,15,42,67,
+ 15,42,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,63,77, 6,63,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,46,91, 5,46,88, 5,46,90, 7, 6,19, 7, 6,16, 5,46,89, 4,43,73,
+ 0, 0, 0, 7, 6,20, 7, 6,17, 0, 0, 0, 7, 6,24, 5,40,15, 7, 6,15, 5,54,37,
+ 5,46,92, 5,46,93, 0, 0, 0, 4,43,71, 0, 0, 0, 4,43,74, 7, 6,21,15,48,76,
+ 15,48,78,15,48,79,15,48,80,15,48,81,15,48,82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7, 6,22, 7, 6,23, 4,49,91, 7,16,77, 0, 0, 0, 5,54,29,
+ 5,54,32, 7,16,73, 5,54,28, 5,54,31, 5,54,30, 4,49,94, 5,54,27, 5,54,35,
+ 7,16,67, 7,16,68, 5,54,34, 7,16,66, 5,54,38, 5,60,59, 5,54,39, 7,16,75,
+ 7,16,74, 0, 0, 0, 0, 0, 0, 7,16,76, 7,16,65,15,54,52,15,54,53, 0, 0, 0,
+ 0, 0, 0, 7,16,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,16,71, 7,16,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,36,
+ 5,54,33, 0, 0, 0, 5,60,62, 5,60,65, 5,60,66, 5,60,63, 5,60,60, 5,60,61,
+ 0, 0, 0, 4,55,42, 7,25,87, 5,60,68, 4,55,38, 5,60,64, 7,25,90, 0, 0, 0,
+ 15,59,52,15,59,53,15,59,54,15,59,55,15,59,56,15,59,58, 7,25,88, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,59,51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,40, 7,25,89, 0, 0, 0,
+ 5,60,67,15,54,51, 0, 0, 0, 0, 0, 0, 5,66,93, 5,67, 6, 5,67, 4, 5,67, 1,
+ 5,67, 2, 5,67, 5, 7,33,16, 5,66,94, 7,33,15, 5,67, 3, 0, 0, 0,15,63,76,
+ 15,63,77,15,63,78,15,63,79,15,63,80,15,63,81,15,63,82, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,66,92, 0, 0, 0, 0, 0, 0, 5,72,62, 4,64,35,
+ 5,72,60, 4,64,36, 4,64,39, 0, 0, 0, 7,40,31, 0, 0, 0, 4,64,38, 5,72,61,
+ 7,46,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,40,33, 7,40,30,15,67,16,
+ 7,40,32, 5,76,75, 4,67,90, 4,67,88, 5,76,74, 7,46,64, 4,60,24, 5,76,73,
+ 5,76,76, 7,46,63, 7,46,65,15,69,64,15,69,65,15,69,67, 0, 0, 0, 7,46,67,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,76,77,
+ /* plane 2, page 89 */
+ 0, 255, /* first, last */
+ 7,52, 8, 7,52, 7, 5,80,56, 7,52, 9, 0, 0, 0, 7,56,45, 5,83,76, 7,56,46,
+ 0, 0, 0, 0, 0, 0, 5,86,16, 5,86,17, 7,56,47, 0, 0, 0, 5,87,80, 0, 0, 0,
+ 0, 0, 0, 7,60,13, 7,60,14, 7,63, 8, 7,62,81,15,75,55,15,75,56, 4,76,87,
+ 5,89,19,15,76,20, 4,76,88, 0, 0, 0, 5,90,14, 0, 0, 0, 5,91,65, 5,91,66,
+ 0, 0, 0, 0, 0, 0, 6, 3,23, 5, 4,79, 5, 4,80, 0, 0, 0, 0, 0, 0, 4, 7,57,
+ 4, 7,58, 4, 7,56, 6,13,45, 6,13,44, 0, 0, 0, 6,13,47, 3,10,37, 0, 0, 0,
+ 6,13,43,15, 8,35, 0, 0, 0, 0, 0, 0, 4,10,84, 6,19,57, 6,19,59, 6,19,56,
+ 5,10,87, 4,10,83, 5,10,89, 5,10,88, 6,19,58, 6,19,60, 6,19,61, 5,10,90,
+ 0, 0, 0,15,12,81,15,12,82,15,12,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,15,31,
+ 4,14,70, 4,14,75, 4,14,72, 5,15,35, 5,15,34, 5,15,33, 6,26,44, 4,14,73,
+ 4,14,74, 4,14,71, 6,26,42, 6,26,40, 5,15,32, 0, 0, 0, 0, 0, 0, 5,15,36,
+ 15,17,56,15,17,57,15,17,58, 6,26,43, 0, 0, 0, 0, 0, 0, 6,26,41, 0, 0, 0,
+ 5,20,36, 5,20,35, 6,34,76, 6,34,75, 6,34,77, 5,20,33, 4,19,78, 5,20,34,
+ 5,20,32, 6,34,78,15,23,32,15,23,33,15,23,34,15,23,35,15,23,36, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,26,82, 4,25,70,
+ 5,26,84, 6,44,46, 6,44,42, 4,25,73, 6,44,50, 5,26,73, 5,26,79, 5,26,81,
+ 6,44,48, 5,26,71, 6,44,49, 5,26,72, 6,44,43, 5,26,74, 4,25,72, 5,26,83,
+ 6,44,44, 0, 0, 0, 5,26,80, 6,44,41, 5,26,70, 5,26,77, 6,44,47, 5,26,78,
+ 5,26,75, 6,44,45, 0, 0, 0,15,29,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,33,26, 6,54, 9, 5,33,28, 5,33,27, 5,33,30,
+ 6,54, 2, 6,54, 4, 5,26,76, 0, 0, 0, 5,33,29, 5,33,31, 6,54, 8, 6,54,11,
+ 5,33,32, 6,54, 6, 6,54, 5, 0, 0, 0, 0, 0, 0,15,36,27,15,36,29,15,36,30,
+ 15,36,31,15,36,32, 6,54, 3, 0, 0, 0, 0, 0, 0, 6,54,10, 6,55, 6, 0, 0, 0,
+ 4,37,65, 6,63,87, 5,40,18, 6,63,86, 6,63,82, 6,63,84, 6,63,83, 5,40,17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,63,89,15,42,70, 5,40,19,
+ 0, 0, 0, 0, 0, 0, 6,63,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,28,
+ 7, 6,27, 0, 0, 0, 5,47, 1, 5,47, 7, 5,47,10, 5,40,16, 7, 6,26, 5,47,11,
+ 5,47, 6, 5,47, 2, 5,47,12, 5,47, 5, 7, 6,25, 5,46,94, 5,47, 8, 5,47, 4,
+ 5,47, 9, 0, 0, 0, 7, 7,14, 0, 0, 0, 0, 0, 0, 4,43,77, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,47, 5,54,49, 4,50, 3, 5,54,48,
+ 4,50, 6, 5,54,41, 4,50, 8, 7,16,80, 5,54,42, 5,54,44, 5,54,43, 5,54,51,
+ 5,54,45, 5,54,52, 7,16,78, 5,54,46, 5,60,69, 5,54,53, 0, 0, 0,15,54,54,
+ /* plane 2, page 90 */
+ 0, 255, /* first, last */
+ 15,54,55,15,54,56,15,54,57,15,54,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,16,81, 0, 0, 0, 0, 0, 0, 5,60,74, 5,60,71, 7,26, 1,
+ 4,55,46, 5,60,73, 7,25,92, 7,25,93, 7,25,91, 5,60,70, 7,25,94, 7,16,82,
+ 5,60,72, 0, 0, 0,15,59,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,67, 8, 5,67, 7,15,63,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,64,42, 7,40,36, 7,40,35, 5,72,63, 7,40,34, 0, 0, 0,
+ 7,46,68, 7,46,70, 5,72,64, 4,67,91, 5,76,78, 7,52,13, 7,46,71, 7,46,69,
+ 15,69,68, 0, 0, 0, 0, 0, 0, 5,80,59, 7,52,11, 4,70,71, 0, 0, 0, 4,70,70,
+ 5,80,57, 7,52,12, 5,80,58,15,72, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,69,69, 0, 0, 0, 5,86,18, 7,60,15, 5,87,81, 0, 0, 0, 7,65,10,15,75,57,
+ 7,63, 9, 0, 0, 0, 5,89,20, 7,66,42, 5,91,67, 6, 8,82, 6, 8,81, 5, 7,41,
+ 5, 7,42, 4,10,85, 0, 0, 0,15,12,84,15,12,88, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,14,79, 5,15,39, 5,15,40, 4,14,76, 5,15,38, 5,15,37, 4,14,78,15,17,60,
+ 15,17,61,15,17,62,15,17,63,15,17,65,15,17,66, 6,26,45, 6,26,46, 0, 0, 0,
+ 0, 0, 0, 6,34,82, 4,19,83, 6,34,81, 6,34,83, 6,34,80, 4,19,84, 0, 0, 0,
+ 15,23,37,15,23,39, 0, 0, 0, 5,20,39,15,23,40, 0, 0, 0, 4,25,75, 6,44,53,
+ 5,26,85, 5,26,87, 5,26,86, 5,26,88, 6,44,52, 0, 0, 0,15,29,77,15,29,78,
+ 15,29,79,15,29,80, 4,31,54, 4,31,56, 5,33,34, 4,31,57, 6,54,12, 5,33,33,
+ 6,54,13, 6,54,14,15,36,33,15,36,34,15,36,35, 5,33,35, 0, 0, 0, 0, 0, 0,
+ 5,40,20, 6,63,90, 5,40,21, 4,37,66, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,42,71,
+ 15,42,72,15,42,74, 0, 0, 0, 0, 0, 0,15,42,73, 7, 6,31, 4,43,78, 5,47,13,
+ 15,48,83,15,48,84,15,48,85, 0, 0, 0, 7, 6,29,15,54,60,15,54,59, 4,55,49,
+ 7,16,84, 5,54,54,15,59,60, 5,60,76, 0, 0, 0, 5,61,67, 7,26, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,60,75, 5,67,10, 7,26, 3,15,63,85, 7,33,17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,67, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,46,72, 7,52,14,15,69,70, 0, 0, 0, 0, 0, 0, 7,40,37, 5,80,60,15,72, 2,
+ 7,56,48,15,73,62,15,74,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,65,11, 0, 0, 0,
+ 15, 5, 6, 5, 7,43, 6,13,48, 5, 7,45, 5, 7,44, 5,10,92, 5,10,93, 5,10,91,
+ 6,19,63, 6,19,62, 5,10,94, 0, 0, 0, 0, 0, 0,15,12,89,15,12,90,15,12,91,
+ 15,12,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,12,93,15, 9, 4, 5,15,46,
+ 5,15,41, 4,14,84, 0, 0, 0, 5,15,42, 5,15,44, 5,15,45, 6,26,48, 5,15,49,
+ 5,15,47, 5,15,43, 6,26,47, 6,26,49, 5,15,48, 5,15,50,15,17,67,15,17,68,
+ /* plane 2, page 91 */
+ 0, 255, /* first, last */
+ 15,17,69,15,17,70,15,17,71,15,17,72,15,17,73,15,17,74, 0, 0, 0, 4,14,86,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,84, 6,34,90, 5,20,42, 4,19,89,
+ 5,20,45, 6,34,87, 5,20,44, 6,34,92, 4,19,85, 5,20,46, 6,34,85, 5,15,51,
+ 0, 0, 0, 5,20,41, 6,34,89, 6,34,91, 0, 0, 0, 5,20,48, 5,20,49, 6,34,88,
+ 0, 0, 0,15,23,41,15,23,42,15,23,43,15,23,44,15,23,46,15,23,47, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,26,92, 5,27, 2, 5,26,91, 5,26,94, 4,25,76, 4,25,78,
+ 6,44,58, 5,20,43, 4,25,83, 5,27, 1, 5,26,90, 4,25,89, 4,25,87, 4,25,80,
+ 6,44,61, 4,25,88, 0, 0, 0, 6,44,55, 5,27, 5, 6,44,57, 6,44,60, 5,20,47,
+ 5,26,93,15,29,81,15,29,82,15,29,83,15,29,84,15,29,85,15,29,86,15,29,88,
+ 15,29,89,15,29,90,15,29,87, 5,27, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,33,52, 5,33,40, 5,33,47, 4,31,60, 5,33,45, 5,33,37, 4,31,68, 4,31,69,
+ 5,33,48, 4,31,63, 5,26,89, 6,54,16, 5,33,38, 5,33,53, 5,33,43, 5,33,50,
+ 5,33,36, 5,33,41, 5,33,44, 6,54,20, 6,54,18, 6,54,23, 6,54,26, 6,54,19,
+ 6,54,22, 0, 0, 0, 6,54,24, 6,63,91, 5,33,51, 5,33,49, 5,33,46, 5,33,39,
+ 6,54,17, 6,44,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,54,21,
+ 6,54,25,15,36,36,15,36,38,15,36,39,15,36,40,15,36,41,15,36,42,15,36,43,
+ 15,36,44,15,36,45,15,36,46,15,36,47,15,36,48, 6,54,15, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,33,30, 5,40,37, 5,33,54, 4,37,76,
+ 5,40,35, 6,64, 7, 4,37,71, 6,63,92, 6,63,93, 5,40,28, 5,40,27, 5,40,34,
+ 4,37,79, 6,64, 8, 5,40,32, 6,64, 6, 5,40,24, 5,40,25, 6,64, 5, 0, 0, 0,
+ 6,64, 1, 0, 0, 0, 5,40,26, 5,40,33, 5,40,23, 5,40,29, 6,64, 2, 5,33,42,
+ 5,40,39, 6,63,94, 5,40,30, 6,64, 4, 0, 0, 0, 5,40,31, 4,37,81, 5,40,36,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,42,75,15,42,76,15,42,77,
+ 15,42,78,15,42,79,15,42,80,15,42,83,15,42,84,15,42,85,15,42,86,15,42,87,
+ 15,42,88,15,42,89,15,42,90, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,42,82, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,42,81, 5,47,26, 7, 6,41, 7, 6,43, 5,47,36, 4,44,15, 5,47,19, 7, 6,49,
+ 7, 6,42, 5,47,30, 4,43,81, 4,43,79, 5,47,33, 5,47,15, 5,47,20, 5,47,35,
+ 7, 6,34, 5,47,32, 5,47,17, 4,50,32, 5,47,25, 5,47,34, 4,43,82, 4,44, 9,
+ 4,44, 3, 4,43,93, 5,47,24, 5,47,23, 5,47,28, 7, 6,46, 5,40,40, 5,47,21,
+ 7, 6,48, 7, 6,39, 7, 6,36, 5,47,31, 7, 6,32, 7, 6,51, 4,44, 4, 7, 6,47,
+ 4,43,92, 7, 6,44, 5,47,29, 0, 0, 0, 7, 6,37, 7, 6,35, 5,47,14, 7, 6,40,
+ /* plane 2, page 92 */
+ 2, 255, /* first, last */
+ 7, 6,38, 0, 0, 0, 0, 0, 0, 5,47,38,15,48,88, 0, 0, 0,
+ 0, 0, 0, 7, 6,50, 0, 0, 0,15,48,87,15,48,90,15,48,91,15,48,92,15,48,93,
+ 15,48,94,15,49, 2,15,49, 4,15,49, 9,15,49, 5,15,49, 6,15,49, 7,15,49,10,
+ 5,54,68, 4,50,33, 4,50,30, 5,54,56, 5,54,62, 5,54,70, 7,17,10, 5,54,60,
+ 4,50,14, 5,54,61, 4,50,12, 5,54,72, 7, 6,33, 7,17, 5, 4,50,18, 5,54,71,
+ 4,50,17, 7,17, 9, 4,50,28, 7,16,94, 7,17, 6, 4,50,16, 5,54,64, 7,16,91,
+ 4,50,31, 5,54,63, 5,54,57, 7,16,90, 7,17, 8, 4,50,10, 5,54,55, 7,17, 4,
+ 4,50,21, 5,54,69, 7,16,93, 5,54,66, 4,50,19, 7,17,11, 7,16,85, 7,17, 7,
+ 5,47,16, 5,54,67, 5,54,58, 0, 0, 0, 7,16,88, 7,17, 3, 7,16,86, 5,54,65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,54,82, 5,54,59, 7,16,92, 7,16,87,
+ 7,17, 2,15,54,61,15,54,62,15,54,64,15,54,65,15,54,66,15,54,67,15,54,68,
+ 15,54,69,15,54,70,15,54,71,15,54,72,15,54,73,15,54,74,15,54,75,15,54,76,
+ 15,54,77,15,54,78,15,54,79,15,54,80,15,54,81, 0, 0, 0,15,54,83, 0, 0, 0,
+ 0, 0, 0, 7,16,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48,89, 0, 0, 0, 5,61, 4, 5,61, 1, 4,55,61,
+ 5,60,85, 5,61,13, 5,60,89, 4,55,60, 4,55,67, 4,55,71, 7,26,12, 5,61,11,
+ 4,55,64, 5,61, 2, 0, 0, 0, 0, 0, 0, 5,60,80, 5,61, 3, 5,60,82, 5,61,17,
+ 5,60,91, 5,61,10, 5,60,87, 5,61,20, 7,26, 4, 5,60,86, 5,60,92, 5,61, 6,
+ 4,55,68, 5,61, 7, 7,26, 9, 0, 0, 0, 0, 0, 0, 5,67,34, 5,61,12, 5,60,90,
+ 7,26,15, 7,26, 8, 5,60,79, 5,61,18, 5,61, 9, 5,60,83, 7,26,11, 5,61,14,
+ 5,60,81, 5,60,78, 5,61, 8, 4,55,70, 4,60,28, 5,61,19, 5,60,88, 5,61,15,
+ 5,61, 5, 7,17, 1, 5,60,84, 7,26, 7, 7,26, 6, 0, 0, 0, 7,26, 5, 7,26,13,
+ 15,59,61,15,59,62,15,59,64,15,59,65,15,59,66,15,59,67,15,59,68,15,59,70,
+ 15,59,71,15,59,72,15,59,73, 7,26,10, 7,26,14, 4,55,72, 0, 0, 0, 0, 0, 0,
+ 15,59,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,55,65, 5,67,43,
+ 5,67,39, 5,61,21, 4,60,50, 5,67,37, 5,67,24, 5,67,19, 4,60,39, 5,67,42,
+ 5,67,32, 3,56,47, 5,67,14, 4,60,46, 4,60,37, 5,67,35, 5,67,25, 5,67,44,
+ 4,60,29, 7,33,27, 5,67,38, 5,67,16, 5,67,23, 4,60,30, 4,60,31, 5,67,40,
+ 7,33,25, 5,67,21, 5,67,18, 5,67,31, 7,33,21, 5,67,12, 7,33,22, 4,60,33,
+ 7,33,19, 4,60,51, 5,67,30, 7,33,24, 5,67,29, 7,33,26, 7,33,30, 7,33,20,
+ 5,67,17, 4,60,45, 5,67,22, 5,67,26, 5,67,36, 5,67,41, 5,67,28, 5,67,13,
+ 7,33,34, 7,33,33, 5,67,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,67,11,
+ /* plane 2, page 93 */
+ 0, 255, /* first, last */
+ 5,67,15, 7,33,18, 7,33,23,15,63,86,15,63,87,15,63,88,15,63,89,15,63,90,
+ 15,63,91,15,63,92,15,63,93,15,63,94,15,64, 1,15,64, 3,15,64, 4,15,64, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,33,32, 7,33,29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,59,74,15,67,22,15,67,23,
+ 15,64, 2, 5,72,74, 5,72,79, 7,40,46, 4,64,57, 7,40,44, 5,72,67, 4,64,52,
+ 4,64,53, 4,64,49, 5,72,73, 4,64,47, 4,64,48, 7,40,40, 4,64,50, 5,72,66,
+ 4,64,56, 4,64,45, 7,40,39, 0, 0, 0, 5,72,77, 5,72,72, 5,72,80, 5,72,76,
+ 5,72,75, 5,72,69, 5,72,68, 5,72,71, 0, 0, 0, 7,40,38, 7,40,42, 5,72,65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,72,81, 7,40,41,15,67,17,15,67,19,
+ 15,67,20,15,67,21,15,67,24,15,67,25,15,67,26,15,67,27,15,67,28, 0, 0, 0,
+ 7,40,43, 0, 0, 0, 0, 0, 0, 7,40,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,76,92, 5,76,91, 5,76,86, 4,64,55,
+ 5,76,84, 7,46,76, 5,76,90, 4,67,93, 7,46,84, 4,68, 2, 5,76,88, 5,76,83,
+ 4,70,80, 7,46,74, 5,76,79, 5,76,85, 5,76,81, 7,46,73, 7,46,85, 5,76,87,
+ 7,46,77, 7,46,78, 5,76,82, 7,46,79, 7,52,24, 7,46,81, 7,46,80, 0, 0, 0,
+ 7,46,82, 7,46,83,15,69,72,15,69,73, 0, 0, 0, 7,46,75, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,80,68, 5,80,72,
+ 5,80,73, 0, 0, 0, 4,70,81, 4,70,75, 5,80,70, 5,80,75, 7,52,15, 5,80,62,
+ 5,80,67, 5,80,64, 4,68, 1, 5,80,71, 5,80,63, 5,76,80, 7,52,21, 5,80,74,
+ 5,80,61, 7,52,17, 5,80,69, 4,73, 7, 5,80,76, 7,52,22, 7,52,16, 7,52,20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72, 3,15,72, 4,15,72, 5,15,72, 6,15,72, 7,
+ 15,72, 8,15,72, 9, 7,52,19, 7,52,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,52,18, 7,56,53, 4,73, 4, 4,73, 3,
+ 5,83,80, 5,83,78, 5,80,66, 5,83,81, 7,56,50, 5,80,77, 7,56,49, 5,83,84,
+ 4,73, 5, 5,83,77, 7,56,52, 7,52,23, 5,83,86, 5,83,83, 5,83,79, 5,83,85,
+ 5,83,82, 7,56,54, 0, 0, 0, 0, 0, 0,15,73,63,15,73,64,15,73,65,15,73,66,
+ 7,56,51, 7,57,20, 0, 0, 0, 0, 0, 0, 4,74,62, 5,86,19, 7,60,17, 5,86,20,
+ 4,74,63, 4,74,64, 4,74,66, 7,60,16, 5,86,22, 7,60,18, 5,86,21, 7,60,22,
+ 7,60,21,15,74,73, 7,60,19, 7,60,23, 7,60,20, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,87,82, 7,63,11, 7,63,14, 5,87,84, 5,87,85, 7,63,13, 5,86,23, 7,63,12,
+ 7,63,10, 5,87,83, 7,63,17, 0, 0, 0, 4,75,87,15,75,58,15,75,59,15,75,60,
+ 7,63,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,89,21, 7,65,12, 7,65,14, 7,65,17,
+ /* plane 2, page 94 */
+ 0, 255, /* first, last */
+ 4,76,89, 0, 0, 0, 0, 0, 0, 7,65,15, 0, 0, 0, 7,63,16, 0, 0, 0, 7,65,13,
+ 5,90,17, 5,90,15, 5,90,16, 7,65,16, 0, 0, 0, 0, 0, 0,15,76,47,15,76,45,
+ 7,67,62, 7,67,63, 0, 0, 0, 0, 0, 0,15,76,72, 0, 0, 0, 7,67,64, 5,91,36,
+ 5,91,68,15,77, 7, 0, 0, 0, 0, 0, 0, 7,68,52, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,78,46, 5,91,92, 5,92,11, 0, 0, 0, 5, 4,81,15, 5, 7, 5, 7,46,
+ 6,13,49,15, 8,37, 0, 0, 0, 6,19,65, 5,11, 2, 6,19,64, 0, 0, 0, 5,11, 3,
+ 15,12,94,15,13, 2, 0, 0, 0, 6,26,50, 5,15,52, 6,26,54, 5,15,53, 6,26,52,
+ 5,15,54,15,17,75,15,17,76,15,17,77,15,17,78, 6,26,51, 6,26,53, 0, 0, 0,
+ 0, 0, 0, 4,19,94, 5,20,53, 4,20, 4, 0, 0, 0, 5,20,52, 4,20, 1, 5,20,56,
+ 5,20,51, 5,20,54, 5,20,55, 4,20, 3, 5,20,58, 5,20,50, 6,34,93, 6,44,67,
+ 6,35, 1,15,23,48,15,23,49, 0, 0, 0, 0, 0, 0, 6,34,94,15,23,50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,27, 6, 0, 0, 0, 4,25,90, 6,44,65, 6,44,62, 6,44,69,
+ 5,27, 8, 4,26, 1, 6,44,68, 0, 0, 0, 6,44,63, 0, 0, 0,15,29,92,15,29,94,
+ 15,30, 2, 0, 0, 0, 0, 0, 0,15,29,91, 0, 0, 0, 6,44,66, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,33,55, 4,31,72, 6,54,29, 5,33,57, 5,33,58, 5,27, 7,
+ 5,33,56, 6,54,31, 6,54,30, 4,25,94, 5,33,59, 5,33,61, 5,33,60, 6,54,33,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,50,15,36,51,15,36,53,15,36,54,
+ 6,54,27,15,36,52, 0, 0, 0, 6,54,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,49,
+ 6,64,13, 5,40,42, 6,64,11, 6,64,14, 5,40,44, 4,37,83, 6,54,28, 6,64,19,
+ 6,64,18, 5,40,43, 6,64,16, 5,40,41, 5,40,45, 0, 0, 0, 0, 0, 0,15,42,92,
+ 15,42,93,15,42,94,15,43, 1,15,43, 2,15,43, 3,15,43, 5,15,43, 6,15,43, 8,
+ 15,43, 9,15,43,10,15,43,13, 6,64,15,15,43,12, 0, 0, 0, 6,64, 9, 0, 0, 0,
+ 6,64,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 6,56, 7, 6,52, 4,44,22, 5,47,43, 7, 6,53, 7, 6,57, 4,44,19,
+ 5,47,42, 5,47,44, 5,47,48, 5,40,46, 5,47,47, 5,47,45, 7, 6,59, 7, 6,54,
+ 5,47,41, 4,44,20, 5,47,46, 4,44,18, 7, 6,58, 5,47,40, 5,47,39, 0, 0, 0,
+ 0, 0, 0,15,49,11,15,49,12,15,49,13,15,49,15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,78, 5,54,76, 5,61,28, 4,50,35,
+ 5,54,75, 4,50,34, 7,17,15, 7,17,16, 5,54,79, 7,17,12, 5,54,74, 5,54,77,
+ 5,54,80,15,54,84,15,54,85, 7,17,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,61,22,
+ /* plane 2, page 95 */
+ 0, 255, /* first, last */
+ 5,61,24, 7,26,16, 5,61,25, 5,61,23, 5,61,26, 5,61,27, 7,26,18, 7,26,20,
+ 7,26,21, 7,26,17, 0, 0, 0, 0, 0, 0,15,59,75,15,59,76,15,59,77,15,59,79,
+ 15,59,80,15,59,81,15,59,82, 4,55,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,67,50, 7,33,37, 4,60,55, 5,67,51, 5,67,47, 7,40,54, 5,67,49, 5,61,29,
+ 7,33,38, 5,67,48, 7,46,88, 0, 0, 0, 5,67,45, 7,33,35,15,64, 7,15,64, 8,
+ 15,64, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,59,78, 5,72,84, 7,40,47,
+ 7,40,48, 4,64,62, 4,64,60, 5,72,83, 5,80,78, 7,40,50, 7,40,51, 7,33,40,
+ 4,64,63, 4,60,56, 5,72,85, 7,33,39, 0, 0, 0, 5,72,82,15,67,30, 7,40,49,
+ 0, 0, 0, 7,40,52, 7,40,53,15,67,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46,87,
+ 5,76,94, 7,46,86, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,69,74,15,69,75, 4,70,83,
+ 4,70,82, 5,80,79, 7,52,29, 7,52,28, 0, 0, 0,15,72,10,15,72,11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,52,27, 0, 0, 0, 5,83,87, 7,56,55, 5,83,88,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,74,67, 4,74,68, 7,60,24,15,74,74,
+ 5,86,24, 7,60,25, 7,63,18, 5,87,87, 5,87,86, 0, 0, 0, 5,89,24, 7,65,19,
+ 5,89,23, 5,89,22, 7,65,18, 7,66,44, 4,77,61, 5,90,18, 7,66,43, 5,90,19,
+ 7,67,66, 7,67,65, 5,91,93, 0, 0, 0, 7,70,22, 5, 7,47, 6,13,50, 5, 7,48,
+ 15, 8,39,15, 8,40, 5, 7,49, 0, 0, 0, 5,11, 6, 6,19,66, 6,19,69, 5,11, 4,
+ 5,11, 5, 6,19,71, 6,19,67, 5,11, 7,15,13, 3, 0, 0, 0, 6,19,72, 0, 0, 0,
+ 0, 0, 0, 6,26,59, 6,26,55, 4,14,89, 6,26,67, 4,14,91, 6,26,61, 0, 0, 0,
+ 6,26,60, 6,26,63, 5,15,58, 4,14,90, 4,15, 4, 6,26,68, 6,26,57, 4,15, 3,
+ 6,26,62, 4,15, 2, 6,26,64, 6,26,56, 5,15,57, 6,26,65, 5,15,56, 5,15,55,
+ 6,26,58, 0, 0, 0,15,17,81,15,17,82,15,17,83,15,17,84,15,17,85,15,17,86,
+ 15,17,87, 0, 0, 0, 4,15, 6, 6,26,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,20,63, 5,20,61, 4,20,18, 4,20, 8, 4,20,10,
+ 6,35, 8, 4,20,15, 5,20,62, 4,20,17, 6,35, 9, 5,20,59, 4,20,12, 6,35,11,
+ 6,35,10, 6,35, 5, 6,35, 3, 6,35, 4, 0, 0, 0, 5,20,60,15,23,56,15,23,57,
+ 15,23,58,15,23,59, 0, 0, 0, 0, 0, 0, 6,35, 7, 0, 0, 0, 0, 0, 0, 6,35,12,
+ 0, 0, 0,15,23,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,27,17, 5,27,16,
+ 5,27,14, 5,27,18, 6,44,77, 4,26, 3, 6,44,70, 6,44,76, 4,26, 2, 4,26, 4,
+ 6,44,78, 6,35, 6, 6,44,71, 6,44,80, 6,44,72, 5,27,13, 6,44,74, 6,44,73,
+ 6,44,79, 5,27,10, 5,27, 9, 0, 0, 0, 5,27,11,15,30, 5,15,30, 6,15,30, 7,
+ /* plane 2, page 96 */
+ 0, 250, /* first, last */
+ 15,30, 8,15,30, 9,15,30,10,15,30,11,15,30,12,15,30,13,15,30,14, 6,44,75,
+ 0, 0, 0, 5,27,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,54,43, 6,54,34, 5,33,63, 5,33,62, 4,31,76, 6,54,36,
+ 4,31,77, 6,54,40, 6,54,37, 4,31,73, 5,33,65, 5,33,64, 6,54,35, 6,54,41,
+ 4,26, 5, 4,31,75, 6,54,38, 5,33,66, 6,54,44, 6,54,45, 4,31,82, 6,54,42,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,55,15,36,56,15,36,57,15,36,58,
+ 15,36,59,15,36,60,15,36,61,15,36,62,15,36,63,15,36,64,15,36,65,15,36,66,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,54,39, 4,31,80, 0, 0, 0, 4,37,88, 0, 0, 0,
+ 5,40,48, 4,37,86, 5,40,50, 6,64,31, 6,64,30, 5,40,54, 4,37,90, 5,40,53,
+ 4,37,87, 6,64,25, 6,64,35, 6,64,34, 6,64,22, 4,37,93, 5,40,47, 5,33,67,
+ 6,64,33, 5,40,49, 6,64,28, 6,64,20, 5,40,51, 5,40,55, 6,64,32, 0, 0, 0,
+ 0, 0, 0, 6,64,27, 0, 0, 0, 0, 0, 0, 4,38, 2, 6,64,24,15,43,14,15,43,15,
+ 15,43,16,15,43,17,15,43,18,15,43,19,15,43,20,15,43,21,15,43,22,15,43,23,
+ 6,64,21, 6,64,23, 0, 0, 0, 0, 0, 0, 6,64,29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,44,24, 4,44,35, 7, 6,64, 4,44,34, 4,44,27, 5,47,59, 5,47,57, 4,50,40,
+ 5,47,56, 5,47,61, 0, 0, 0, 5,47,53, 4,44,38, 5,47,58, 7, 6,76, 7, 6,62,
+ 7, 6,68, 5,47,60, 5,47,50, 7, 6,65, 7, 6,70, 5,47,55, 0, 0, 0, 4,44,33,
+ 4,44,25, 7, 6,61, 7, 6,69, 7, 6,60, 7, 6,71, 6,64,26, 7, 6,77, 7, 6,75,
+ 5,47,49, 5,47,54, 5,47,62, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,49,16,15,49,17,
+ 15,49,18,15,49,19,15,49,20,15,49,21,15,49,24,15,49,25,15,49,26,15,49,29,
+ 15,49,30,15,49,31, 0, 0, 0, 0, 0, 0, 7, 6,66, 7, 6,72, 0, 0, 0, 7, 6,63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 6,67, 0, 0, 0, 7,17,38, 4,50,38, 7,17,35, 7,17,36, 4,50,42,
+ 7,17,32, 7,17,29, 5,54,84, 5,54,86, 7,17,17, 7,17,34, 7,17,18, 7,26,22,
+ 7,17,19, 7,17,22, 5,54,85, 5,54,87, 5,54,83, 5,61,37, 4,50,37, 5,54,81,
+ 5,54,82, 4,50,43, 0, 0, 0, 7,17,26, 7,17,23, 7,17,24, 7,17,33, 4,50,45,
+ 7,17,21, 0, 0, 0, 5,54,89, 7,17,20, 7,17,37, 7,17,27, 5,54,88, 7,17,31,
+ 7,17,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,17,25, 7,17,28,15,54,86,15,54,87,15,54,88,15,54,89,15,54,90,15,54,91,
+ 15,54,92,15,54,93,15,54,94,
+ /* plane 2, page 97 */
+ 9, 255, /* first, last */
+ 7,26,36, 7,26,35, 5,61,35, 5,61,32, 4,55,81, 7,26,23, 5,61,33,
+ 7,26,34, 4,55,79, 7,26,26, 5,61,36, 5,61,30, 7,26,30, 7,26,27, 7,26,28,
+ 7,26,32, 5,61,34, 7,26,33, 7,26,29, 5,61,39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,59,83,15,59,84,15,59,85,15,59,87,15,59,88,15,59,89,
+ 15,59,90,15,59,91,15,59,92,15,59,93,15,59,94,15,60, 1,15,60, 2, 0, 0, 0,
+ 0, 0, 0, 7,26,31, 7,26,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,60,68, 4,60,60, 7,33,46, 4,60,67,
+ 4,60,61, 7,33,45, 7,33,52, 4,60,65, 4,55,80, 7,33,41, 5,67,53, 5,67,56,
+ 5,67,55, 7,33,43, 7,33,49, 5,67,54, 7,33,42, 7,33,47, 7,33,50, 7,33,44,
+ 7,33,55, 7,33,53, 7,33,48, 7,33,59, 5,67,58, 7,33,54, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,64,10,15,64,11,15,64,12,
+ 15,64,13,15,64,14,15,64,15,15,64,16,15,64,17,15,64,18, 0, 0, 0, 5,67,57,
+ 7,33,60, 0, 0, 0, 7,33,58, 0, 0, 0, 7,33,56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,33,51, 0, 0, 0, 4,64,68, 4,64,69, 7,40,63,
+ 4,64,73, 7,40,71, 5,72,86, 7,40,68, 4,64,71, 7,40,70, 4,64,75, 5,72,89,
+ 4,64,64, 5,72,90, 7,40,65, 7,39,43, 4,64,65, 7,40,61, 5,72,87, 0, 0, 0,
+ 7,40,67, 7,40,59, 7,40,66, 5,72,88, 7,40,57, 7,40,58, 7,40,64, 7,40,62,
+ 15,67,32,15,67,33,15,67,35,15,67,36,15,67,37, 7,42,83, 7,40,60, 7,40,69,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,64,74, 7,46,93, 7,46,92, 5,77, 3, 5,77, 1,
+ 4,68, 5, 7,46,94, 7,47, 3, 7,46,91, 7,52,34, 7,40,56, 5,77, 4, 7,47, 4,
+ 0, 0, 0, 7,47, 6, 7,46,90, 4,70,89, 7,47, 2, 0, 0, 0, 0, 0, 0, 7,46,89,
+ 7,47, 5,15,69,76,15,69,77,15,69,78,15,69,80,15,69,81, 7,47, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,80,82, 4,70,85, 7,52,35, 5,80,83, 4,70,88,
+ 4,70,86, 4,70,87, 7,56,62, 7,47, 7, 7,52,31, 7,52,30, 0, 0, 0, 0, 0, 0,
+ 7,52,33,15,72,12,15,72,13,15,72,14,15,72,15, 0, 0, 0, 4,70,84, 7,52,32,
+ 0, 0, 0, 5,80,81, 0, 0, 0, 7,52,36, 5,83,91, 7,56,57, 5,83,92, 5,83,89,
+ 4,73, 9, 5,86,26, 7,56,61, 5,83,90, 7,56,59, 0, 0, 0,15,73,67,15,73,68,
+ 15,73,69,15,73,70, 7,56,58, 7,56,60, 0, 0, 0, 4,73,43, 0, 0, 0, 4,74,71,
+ 7,56,63, 7,60,26, 7,60,27, 4,74,72, 4,74,73, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,75,90, 5,87,88, 7,63,23, 7,63,21,15,75,61, 0, 0, 0, 7,63,22, 7,63,24,
+ 5,89,26, 7,63,20, 5,89,25, 7,65,20, 7,66,47, 7,66,46, 7,67,67,15,76,73,
+ /* plane 2, page 98 */
+ 0, 255, /* first, last */
+ 7,67,69, 7,67,68, 0, 0, 0, 7,68,53, 0, 0, 0, 5,91,69,15,77,16, 7,69,85,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 5,34, 4,10,88, 0, 0, 0, 5,11, 8, 4,15, 8, 6,26,70,
+ 5,15,59, 5,20,65, 0, 0, 0, 6,35,13, 5,27,20, 6,35,15, 6,35,14, 6,44,84,
+ 4,26, 9, 6,44,83, 5,27,19,15,30,15, 6,54,48, 6,54,47, 4,31,84, 0, 0, 0,
+ 4,38, 4, 6,64,37, 5,40,56, 6,64,36, 7, 6,78, 0, 0, 0,15,43,25,15,43,26,
+ 15,43,27, 7, 6,80, 4,44,39, 0, 0, 0,15,49,32,15,49,33, 0, 0, 0, 7, 6,79,
+ 5,54,91, 5,54,90, 0, 0, 0,15,55, 2,15,55, 1, 0, 0, 0, 5,61,41, 7,26,37,
+ 5,61,40,15,58,56,15,60, 3,15,60, 4, 0, 0, 0, 7,33,61, 7,33,62,15,64,19,
+ 0, 0, 0, 7,40,72, 4,64,76,15,67,38, 0, 0, 0, 5,80,84, 4,68, 7, 4,70,90,
+ 7,52,37, 0, 0, 0, 4,74,74, 7,60,28,15,74,75, 7,63,26, 7,63,25, 5,90,20,
+ 0, 0, 0, 7,70,10, 6, 2, 9, 6, 2, 8, 4, 4,74, 6, 5,36, 6, 5,37, 6, 8,83,
+ 0, 0, 0, 0, 0, 0,15, 1,92, 6, 5,35,15, 5, 8,15, 5,10, 0, 0, 0, 6,13,51,
+ 6,19,74, 4, 7,61, 0, 0, 0, 6,19,73, 6,13,52, 0, 0, 0, 4, 7,62, 6, 8,84,
+ 4, 4,75, 6,19,75, 4,10,90, 4,10,92, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 5,54,
+ 5,11, 9,15, 8,41, 0, 0, 0, 5, 7,50, 0, 0, 0, 6,26,71, 6,26,72, 6,26,73,
+ 5,15,63, 6,26,76, 6,26,74, 4,15,12, 4,15,11, 6,19,78, 6,19,76, 6,19,79,
+ 6,35,21,15, 9,25, 0, 0, 0, 0, 0, 0, 5,15,61, 6,35,16, 6,35,17, 6,35,18,
+ 6,35,20, 6,35,22,15,17,89, 6,19,77, 6,22,90, 0, 0, 0, 0, 0, 0, 5,11,10,
+ 4,10,93, 6,35,19, 6,44,87, 6,35,23, 0, 0, 0, 6,26,77, 6,44,86, 6,35,24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,15,62, 5,20,66,15,23,60, 6,44,85, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,27,22, 5,27,21, 4,26,12, 6,44,88,
+ 0, 0, 0, 0, 0, 0,15,30,16, 0, 0, 0, 6,54,50, 5,33,71, 6,54,52, 6,44,90,
+ 5,33,68, 5,33,70, 6,54,51, 6,54,53, 6,44,89, 6,54,54, 0, 0, 0, 0, 0, 0,
+ 15,30,17, 6,54,49,15,36,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,64,38, 6,64,40,
+ 6,64,41, 6,64,42, 6,64,43, 6,64,44, 6,64,45, 6,64,48, 5,40,59, 7, 6,85,
+ 6,64,46, 5,40,58, 6,54,55, 5,40,57, 6,64,47, 0, 0, 0, 0, 0, 0, 6,64,39,
+ 15,43,28, 0, 0, 0, 0, 0, 0, 7, 6,81, 7, 6,82, 7, 6,83, 7, 6,84, 5,47,66,
+ 5,47,63, 6,64,50, 7, 6,86, 5,47,64, 5,47,65, 6,64,49, 0, 0, 0,15,49,34,
+ 15,49,35, 7, 5,83, 0, 0, 0, 7,17,39, 7,17,40, 7,17,44, 7,17,41, 5,54,92,
+ /* plane 2, page 99 */
+ 0, 254, /* first, last */
+ 7,17,43, 4,50,49, 7,26,46, 7,17,42, 0, 0, 0, 7,17,45, 5,47,67, 0, 0, 0,
+ 0, 0, 0, 5,54,93, 4,50,48, 0, 0, 0, 0, 0, 0, 7, 6,87, 7, 6,88, 7,26,39,
+ 7,26,40, 7,26,43, 5,61,42, 7,17,46, 4,55,84, 5,67,59, 7,26,44, 7,26,45,
+ 0, 0, 0,15,60, 5, 0, 0, 0,15,55, 3, 7,33,63, 7,33,64, 7,33,66, 7,33,68,
+ 4,60,71, 4,60,70, 5,67,60, 7,33,67, 7,40,73, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,26,42, 5,67,62, 5,72,91, 7,40,76, 4,64,78, 7,40,74, 7,40,75, 0, 0, 0,
+ 0, 0, 0, 7,47, 8, 7,47, 9, 7,47,10, 7,47,11, 5,77, 5, 5,77, 7, 7,47,12,
+ 5,77, 6, 0, 0, 0, 5,77, 8, 7,52,38, 7,47,13, 0, 0, 0, 5,87,90, 4,75,92,
+ 7,63,27, 5,87,91, 5,87,89, 7,65,21, 0, 0, 0, 0, 0, 0, 7,66,48, 7,67,70,
+ 7,68,54, 0, 0, 0, 7,69,28, 4, 4,76, 4, 3,12,15, 1,64, 6,13,54, 5, 7,51,
+ 6,13,53,15,13, 4, 6,19,81, 0, 0, 0, 6,19,80, 4,10,94,15, 8,43, 6,26,78,
+ 6,26,79, 0, 0, 0, 6,35,27, 6,26,83, 6,26,82, 6,26,81, 6,26,80, 6,35,26,
+ 0, 0, 0,15,17,90,15,17,91, 0, 0, 0, 0, 0, 0, 6,35,29, 5,20,68, 4,26,14,
+ 6,35,30, 4,20,25, 5,20,69, 0, 0, 0,15,23,61, 5,20,67, 6,35,25,15,23,62,
+ 15,23,63, 0, 0, 0, 6,35,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,27,25, 5,27,23, 6,44,93, 4,26,15, 6,45, 1, 5,27,24, 6,44,94,
+ 6,44,92, 0, 0, 0, 0, 0, 0, 6,45, 2, 0, 0, 0, 6,39, 1, 6,54,58, 5,33,72,
+ 6,54,59, 6,54,56, 5,33,73, 6,54,57, 0, 0, 0, 6,54,60, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,33,74,15,30,19,15,30,20, 5,40,60,
+ 6,64,51, 6,64,53, 5,40,61, 0, 0, 0, 0, 0, 0, 6,64,52, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,47,68, 4,44,42, 7, 6,91, 7, 6,92, 4,44,43, 7,17,47,
+ 0, 0, 0, 7, 6,90, 0, 0, 0, 4,44,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,55, 1,
+ 5,54,94, 4,50,50, 0, 0, 0,15,55, 5, 7,17,48, 0, 0, 0, 0, 0, 0, 4,55,88,
+ 4,55,86, 5,61,43, 7,26,48, 7,26,47, 7,26,50, 0, 0, 0, 0, 0, 0,15,60, 6,
+ 0, 0, 0, 4,50,52, 0, 0, 0, 7,26,49, 0, 0, 0, 5,67,61, 4,60,73, 5,67,63,
+ 7,33,73, 7,33,74, 4,60,77, 7,33,71, 7,33,72, 7,33,70,15,55, 4,15,64,20,
+ 15,64,21, 4,60,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,72,92, 7,40,80, 5,86,27,
+ 7,40,79, 7,47,14, 7,40,78, 0, 0, 0, 5,77, 9, 7,47,15, 7,47,16, 7,47,17,
+ 7,47,18, 7,33,69, 5,80,85, 7,52,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,52,40,
+ 5,83,93, 7,56,64, 7,60,30, 7,60,29, 0, 0, 0, 7,65,22, 0, 0, 0, 7,67,71,
+ 7,69,62, 0, 0, 0, 6,13,55, 0, 0, 0, 6,19,85, 6,19,82, 6,19,86, 5,11,11,
+ 4,11, 2, 4,11, 1, 4,11, 4, 6,19,84, 4,11, 3,15,13, 5,15,13, 6,
+ /* plane 2, page 100 */
+ 0, 254, /* first, last */
+ 6,19,83, 0, 0, 0, 4,15,19, 6,26,86, 5,15,65, 5,15,67, 5,15,64, 4,15,17,
+ 4,15,22, 4,15,21, 6,26,85, 5,15,66, 4,15,20, 4,15,18, 6,26,87, 0, 0, 0,
+ 15,15,67,15,15,68, 0, 0, 0, 4,15,23,15,17,92, 5,20,70, 6,35,33, 6,35,32,
+ 6,35,34, 6,35,35, 6,35,36, 6,35,38, 6,35,39, 0, 0, 0, 4,20,31, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,35,37, 5,27,27, 4,26,18, 6,45, 6, 6,45, 7, 6,45,13,
+ 5,27,29, 4,26,22, 6,45,14, 0, 0, 0, 6,45, 8, 6,45, 5, 6,45,15, 6,45,16,
+ 5,27,28, 6,45,10, 6,45,12, 6,45,11, 0, 0, 0,15,30,21,15,30,22, 6,45, 9,
+ 5,33,78, 5,33,75, 4,31,89, 6,54,61, 6,54,62, 6,54,63, 5,33,77, 0, 0, 0,
+ 5,33,76, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,68, 0, 0, 0, 6,45, 4, 5,40,69,
+ 5,40,62, 6,64,55, 5,40,63, 5,40,67, 5,40,64, 5,40,68, 5,40,65, 5,40,66,
+ 6,64,54, 5,40,70,15,43,29,15,43,30,15,43,31,15,43,32, 0, 0, 0, 0, 0, 0,
+ 5,47,74, 5,47,75, 7, 6,94, 5,47,72, 4,44,44, 5,47,76, 5,47,69, 7, 6,93,
+ 5,47,71,15,49,38, 6,64,57, 5,47,70, 7, 7, 4, 7, 7, 5, 7, 7, 1, 4,44,46,
+ 7, 7, 2, 4,44,45, 7, 7, 3,15,49,36,15,49,37, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,17,49, 7,17,51, 5,55, 5, 7,17,54, 7,17,50, 7,17,52, 4,50,55, 0, 0, 0,
+ 5,55, 3, 5,55, 6, 5,55, 4, 5,47,73, 5,55, 2, 7,17,53, 5,55, 7,15,55, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,55,89, 7,26,52, 5,61,44, 7,26,53, 7,40,81,
+ 5,61,45, 0, 0, 0, 7,26,51,15,60, 7,15,60, 8, 5,67,64, 4,60,78, 7,33,81,
+ 5,61,46, 4,60,79, 7,33,77, 7,33,79, 7,33,76, 7,33,80, 7,33,78, 0, 0, 0,
+ 0, 0, 0,15,64,22,15,64,23, 7,33,75, 4,64,80, 5,72,94, 0, 0, 0, 5,72,93,
+ 7,40,82, 0, 0, 0, 7,47,21, 7,47,22,15,69,82, 7,47,19, 4,70,92, 0, 0, 0,
+ 7,52,41, 7,52,43, 7,47,20, 0, 0, 0, 7,52,42, 7,56,66, 7,56,67, 7,56,65,
+ 0, 0, 0, 6, 5,38, 6,13,56, 6, 8,85, 0, 0, 0, 0, 0, 0, 4, 7,63, 4, 7,64,
+ 6,26,88, 0, 0, 0, 4,20,32, 5,11,12,15,23,64,15,23,65, 6,35,40, 0, 0, 0,
+ 6,45,17, 7, 7, 6, 0, 0, 0, 7,17,56, 7,17,55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,62, 0, 0, 0, 6,13,57, 6,13,58,
+ 5, 1,89,15, 8,44, 4,15,25, 5,20,71, 5,27,30, 0, 0, 0, 5,33,79, 6,64,58,
+ 7, 7, 7, 7, 7, 9, 5,40,71, 0, 0, 0, 0, 0, 0, 7,17,58, 7,17,57, 0, 0, 0,
+ 7,26,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 1, 6,13,59,15, 8,45, 0, 0, 0,
+ 6,19,87,15,13, 7, 6,19,88,15,17,94, 5,20,72,15,23,66, 6,35,41, 4,26,23,
+ 5,27,33, 5,27,32, 0, 0, 0, 0, 0, 0, 4,31,91, 6,54,64, 0, 0, 0, 6,64,60,
+ 5,40,76, 5,40,72, 5,40,77, 5,40,74, 5,40,73, 5,40,75, 4,38,17,
+ /* plane 2, page 101 */
+ 0, 254, /* first, last */
+ 15,36,69, 6,64,59, 5,47,79, 5,47,80, 5,47,81, 5,47,77, 5,47,78, 0, 0, 0,
+ 0, 0, 0, 7, 7,10, 0, 0, 0, 5,55, 9, 5,55, 8, 4,50,56, 4,50,57, 7,17,60,
+ 7,17,61, 7,17,59,15,49,39, 5,61,47, 4,55,92, 7,26,58, 0, 0, 0, 7,26,55,
+ 7,26,56, 0, 0, 0,15,55, 9, 5,67,65, 4,55,94, 7,33,82, 7,26,57, 7,40,85,
+ 5,67,66, 7,33,84, 7,33,83,15,60, 9,15,60,10, 7,40,84, 5,73, 1, 0, 0, 0,
+ 7,40,83, 4,70,94, 7,52,44, 4,74,76, 5,87,92, 5,89,27, 0, 0, 0, 5, 7,53,
+ 5, 7,52, 6,13,62,15, 8,46,15, 8,47, 0, 0, 0, 6,13,61, 0, 0, 0, 5,11,15,
+ 5,11,13, 5,11,14, 0, 0, 0, 0, 0, 0, 4,15,28, 6,26,94, 4,15,27, 6,26,90,
+ 5,15,68, 6,27, 2,15,18, 1,15,18, 4,15,18, 6,15,18, 7, 0, 0, 0, 6,26,91,
+ 15,18, 2, 0, 0, 0, 6,26,93, 6,26,92, 6,27, 3, 6,26,89,15,18, 5, 5,15,69,
+ 6,35,43, 4,20,35, 4,20,34, 4,20,36, 6,35,45, 5,20,73, 6,35,47, 6,35,46,
+ 6,35,44, 0, 0, 0, 6,35,42,15,23,67,15,23,68,15,23,69,15,23,70, 0, 0, 0,
+ 5,27,34, 6,45,19, 6,45,20, 0, 0, 0, 0, 0, 0, 5,27,35, 6,45,21,15,30,23,
+ 15,30,24,15,30,25,15,30,26,15,30,28,15,30,29,15,30,30,15,30,31,15,30,32,
+ 0, 0, 0, 6,45,18,15,30,27, 0, 0, 0, 0, 0, 0, 6,54,66, 6,54,70, 5,33,81,
+ 5,33,82, 6,54,65, 6,54,75, 6,54,73, 6,54,71, 5,33,83, 6,54,72, 6,54,68,
+ 6,54,74, 0, 0, 0, 6,54,67,15,36,70,15,36,71, 6,54,69, 0, 0, 0, 0, 0, 0,
+ 5,40,80, 5,40,81, 5,40,78, 4,44,48, 6,64,62, 5,40,82, 5,40,79, 0, 0, 0,
+ 5,40,83,15,43,33,15,43,34,15,43,35,15,43,36,15,43,37,15,43,38,15,43,39,
+ 15,43,40,15,43,42,15,43,43,15,43,44, 6,64,63, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,47,82, 7, 7,12, 5,47,85, 7, 7,15, 5,47,84, 5,47,83,
+ 4,44,49, 5,47,87, 7, 7,11, 7, 7,16, 5,47,86, 0, 0, 0, 0, 0, 0,15,49,40,
+ 15,49,41,15,49,42,15,49,43,15,49,44,15,49,45,15,49,46,15,49,47, 0, 0, 0,
+ 0, 0, 0, 7, 7,13, 0, 0, 0, 0, 0, 0, 5,55,12, 5,55,15, 5,55,11, 5,55,13,
+ 5,55,14, 7,17,65, 7,17,63, 7,17,62,15,55,10,15,55,11,15,55,12,15,55,13,
+ 15,55,14,15,55,15, 7,17,64, 0, 0, 0, 0, 0, 0, 5,55,10, 0, 0, 0, 0, 0, 0,
+ 5,61,48, 5,61,49, 5,61,50, 7,26,59, 4,56, 5, 4,56, 6, 5,61,52, 5,61,51,
+ 15,60,12, 7,26,61, 7,26,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,56,67,
+ 7,33,87, 5,67,70, 5,67,67, 4,60,82, 7,33,89, 5,61,53, 7,33,88, 5,67,68,
+ 5,67,69, 7,33,85,15,64,24,15,64,25,15,64,26, 0, 0, 0, 0, 0, 0, 7,33,86,
+ 0, 0, 0,15,60,11,15,67,39, 7,40,86, 5,73, 2, 5,73, 3, 7,40,88, 7,40,87,
+ 15,67,40,15,67,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,25,
+ /* plane 2, page 102 */
+ 0, 249, /* first, last */
+ 15,69,83,15,69,84,15,69,85, 7,47,24, 7,47,23, 5,80,86,15,72,16,15,72,17,
+ 7,52,45, 7,52,46, 5,83,94, 7,56,68, 0, 0, 0, 4,74,77,15,74,76,15,75,63,
+ 15,76,22,15,76,48, 5, 1,90, 6,13,63, 5,11,16, 6,35,48, 0, 0, 0, 0, 0, 0,
+ 6,45,22, 0, 0, 0, 0, 0, 0, 6,40,74, 0, 0, 0, 6,54,78, 6,64,66, 6,64,65,
+ 7, 7,17, 0, 0, 0,15,49,48, 7,17,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,47,26, 5, 3, 5, 5, 3, 3, 6,13,64, 6,13,65, 6, 5,40,15, 2,76,15, 2,77,
+ 0, 0, 0, 0, 0, 0, 5, 3, 4, 5, 3, 2, 5, 4,83, 5, 4,82, 6, 8,89, 6, 8,88,
+ 6, 8,87, 0, 0, 0, 6, 8,86, 6,19,91, 0, 0, 0, 6,19,90, 6,19,89, 5, 7,58,
+ 5, 7,62, 6,13,68, 4,15,35, 6,13,77, 6,13,78, 6,13,66, 5, 7,61, 6,13,70,
+ 5, 7,57, 5, 7,55, 6,13,75, 5, 7,59, 0, 0, 0, 4, 7,75, 0, 0, 0, 0, 0, 0,
+ 6,13,72, 6,13,79,15, 8,48,15, 8,49,15, 8,51,15, 8,52, 6,13,76, 4, 6,68,
+ 6,13,69, 0, 0, 0, 0, 0, 0, 6,13,71, 5, 7,60, 0, 0, 0, 0, 0, 0, 6,13,74,
+ 6,13,67, 6,27, 7, 6,27, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,15,29,
+ 5, 7,54, 6,27, 6, 6,20,13, 4,11,13, 5,11,20, 6,20, 8, 5,11,17, 5,11,24,
+ 6,20, 9, 4,11,14, 6,35,52, 6,20, 7, 4,11,11, 6,20,11, 4,11,16, 6,20, 5,
+ 5,11,22, 6,20, 6, 5,11,23, 5,11,18, 4,15,40, 0, 0, 0, 0, 0, 0, 5,11,21,
+ 6,19,92, 6,20, 1, 6,20, 2, 6,20, 4,15,13,10,15,13,15,15,23,71,15,23,72,
+ 6,19,94, 6,20,15, 0, 0, 0, 0, 0, 0, 6,20,12, 6,20,10, 6,20,16, 0, 0, 0,
+ 0, 0, 0, 6,20,14, 6,35,51, 6,35,50,15,13,11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,35,53, 6,35,54, 6,27,16, 6,35,49,15,13,13, 5,15,71, 4,15,30, 4,20,37,
+ 4,15,37, 6,27,18, 5,15,76, 4,15,36, 6,27,14, 5,15,78, 6,27,10, 5,15,80,
+ 5,27,36, 5,15,79, 6,27, 9, 5,15,70, 6,27,11, 4,15,32, 6,45,27, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,15,73,15,13, 9,15,18, 8,15,18, 9,15,18,13,15,30,44,
+ 5,15,72, 5,14, 4, 6,27,15, 6,27,13, 0, 0, 0, 6,27,12, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,27,19, 6,45,26, 6,45,24, 6,45,25, 6,45,23, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,20, 3, 5,15,75,
+ 5,15,81, 0, 0, 0, 5,15,74, 5,20,84, 6,35,59, 6,35,57, 5,20,75, 4,20,46,
+ 5,20,76, 4,15,34, 5,20,81, 4,20,38, 4,20,53, 5,33,84, 4,20,52, 6,35,55,
+ 5,20,78, 6,35,63, 0, 0, 0, 4,20,41, 5,20,85, 5,20,86, 6,35,64, 6,35,62,
+ 0, 0, 0, 4,20,47, 5,20,82, 6,35,65, 6,35,66,15,23,73,15,23,75, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,35,60, 6,35,61, 0, 0, 0, 6,54,79, 6,54,80,
+ 0, 0, 0, 6,54,81,
+ /* plane 2, page 103 */
+ 2, 244, /* first, last */
+ 5,20,83, 5,20,79, 5,20,80, 0, 0, 0, 6,45,35, 5,27,40,
+ 6,45,29, 0, 0, 0, 5,27,37, 6,45,43, 6,45,34, 4,26,28, 5,27,42, 6,45,47,
+ 6,45,28, 6,64,69, 5,27,39, 6,45,48, 6,54,85, 4,26,40, 5,27,44, 6,45,53,
+ 6,45,46, 6,45,44, 6,45,51, 5,27,38, 5,40,85, 0, 0, 0, 0, 0, 0, 6,45,30,
+ 6,45,39, 6,45,42,15,30,33,15,30,36,15,30,38,15,30,39,15,30,40,15,30,41,
+ 15,30,42,15,30,43, 6,45,36, 0, 0, 0, 6,45,41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,27,67, 0, 0, 0, 6,45,45, 6,45,33, 0, 0, 0,
+ 0, 0, 0, 6,45,50, 6,45,31, 6,45,32, 0, 0, 0, 6,64,67, 6,64,71, 6,64,68,
+ 0, 0, 0,15,30,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,27,41,
+ 6,45,38, 5,20,77, 5,27,43, 5,27,46, 5,27,47, 6,45,49, 5,27,49, 6,45,37,
+ 6,64,72, 6,64,70, 5,33,93, 4,32, 1, 5,34, 6, 5,34, 1, 5,33,85, 5,33,89,
+ 5,34, 7, 6,54,93, 4,31,94, 6,54,82, 4,26,38, 5,34, 2, 5,33,88, 6,54,87,
+ 4,32, 4, 6,54,89, 4,32, 2, 6,55, 1, 6,54,83, 5,34, 9, 6,54,84, 6,54,88,
+ 5,34, 3, 6,54,92, 5,33,91, 5,33,90, 5,34, 5, 5,34, 4, 6,54,90, 5,33,86,
+ 6,54,94, 0, 0, 0,15,36,73,15,36,74,15,36,75,15,36,76,15,36,77,15,36,79,
+ 15,36,81, 4,32,11, 0, 0, 0, 0, 0, 0, 6,55, 3, 6,55, 2, 0, 0, 0,15,36,80,
+ 0, 0, 0, 7, 7,18, 0, 0, 0, 7, 7,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,54,91, 5,33,94, 5,33,92,
+ 0, 0, 0, 4,38,36, 5,40,91, 4,38,44, 4,38,35, 5,41, 3, 6,64,74, 5,40,90,
+ 4,38,42, 5,41, 4, 5,41, 1, 4,38,41, 5,40,87, 5,40,93, 4,38,26, 4,38,43,
+ 5,40,88, 6,64,81, 6,64,76, 5,40,86, 6,64,78, 5,40,89, 0, 0, 0, 6,64,77,
+ 5,40,92, 7,17,67, 5,41, 2, 0, 0, 0, 0, 0, 0, 4,38,40, 6,64,75,15,43,45,
+ 15,43,46,15,43,47,15,43,49,15,43,50,15,43,53,15,43,51, 0, 0, 0, 0, 0, 0,
+ 6,64,80, 6,61,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,33,87, 5,40,94, 0, 0, 0, 0, 0, 0,
+ 4,44,51, 5,47,91, 0, 0, 0, 7, 7,20, 4,44,55, 7, 7,27, 0, 0, 0, 5,47,90,
+ 4,44,57, 7,26,64, 7, 7,23, 5,47,92, 7, 7,21, 4,44,58, 7,26,62, 5,47,88,
+ 0, 0, 0, 7, 7,24,15,49,49,15,49,50,15,49,51,15,49,52, 0, 0, 0, 7, 7,22,
+ 7, 7,25, 0, 0, 0, 0, 0, 0, 7, 7,26, 7,26,63,
+ /* plane 2, page 104 */
+ 0, 255, /* first, last */
+ 6,64,73, 5,47,89,15,60,21, 7,17,76, 5,55,23, 5,55,18, 4,50,72, 4,50,61,
+ 5,55,17, 4,50,63, 7,17,71, 7,17,78, 5,55,21, 5,55,22, 4,50,69, 5,47,93,
+ 5,55,20, 7,17,69, 7,17,77, 5,55,25, 7,17,74, 5,73, 4, 4,50,64, 7,17,79,
+ 0, 0, 0,15,55,17,15,55,19, 0, 0, 0,15,55,18, 0, 0, 0, 7, 7,28, 7,17,72,
+ 7,17,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,17,68, 7,17,70, 0, 0, 0, 0, 0, 0,
+ 7,17,75, 7,33,90, 0, 0, 0, 7,40,89, 7,33,91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,55,26,
+ 5,55,16, 5,55,27, 5,55,24, 5,55,19, 7,34, 1, 0, 0, 0, 5,61,58, 5,61,57,
+ 7,26,66, 4,56,14, 4,56,10, 4,56, 9, 0, 0, 0, 5,61,56, 5,61,54, 4,64,81,
+ 7,40,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,61,62, 7,26,69,15,60,14,15,60,15,
+ 15,60,17,15,60,18,15,60,19,15,60,20,15,60,22,15,60,16, 0, 0, 0, 7,23,94,
+ 7,26,67, 0, 0, 0, 0, 0, 0, 7,40,90, 7,40,93, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,61,61, 7,26,65, 5,61,60, 5,61,55, 7,26,68, 7,40,94, 0, 0, 0, 0, 0, 0,
+ 4,60,85, 5,67,74, 5,67,71, 0, 0, 0, 5,67,73, 5,67,76, 7,33,92, 5,67,78,
+ 7,33,94, 5,67,75, 7,34, 3, 5,67,72, 5,77,10, 5,67,79,15,64,27,15,64,28,
+ 15,64,29,15,64,32,15,64,33, 7,33,93, 0, 0, 0, 7,34,77, 0, 0, 0, 0, 0, 0,
+ 4,60,83, 0, 0, 0, 4,64,82, 0, 0, 0, 7,41, 3, 7,41, 9, 5,73, 5, 5,73, 6,
+ 5,67,77, 7,41, 4, 0, 0, 0, 0, 0, 0,15,67,42, 7,41, 8, 7,41,10,15,67,44,
+ 15,67,45, 7,41, 2, 7,41, 6, 7,41, 5, 7,41, 7, 7,41, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,67,43, 7,41,11, 7,47,29, 5,77,14,
+ 5,77,13, 4,68,11, 4,68, 9, 5,77,11,15,69,86, 7,47,28, 0, 0, 0, 7,47,27,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,71, 6, 7,52,47, 5,80,87, 7,60,32, 7,53,26, 7,60,31, 0, 0, 0, 4,73,17,
+ 4,73,15, 7,56,69, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72,19, 7,60,33, 5,86,29,
+ 7,60,35, 7,60,37, 7,60,38, 5,86,28, 7,60,34, 4,74,78, 0, 0, 0, 7,60,39,
+ 7,60,40, 7,63,29, 5,87,93, 7,63,30, 0, 0, 0, 0, 0, 0, 5,89,28, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,68,55, 5,90,79, 5,91,37, 6, 8,92, 4, 4,81,15,10,41,
+ 6,27,20,15,18,15, 0, 0, 0, 0, 0, 0, 6,45,54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,45,55, 0, 0, 0,15,43,56,15,43,57,15,49,54, 6,64,83, 0, 0, 0,
+ 0, 0, 0,15,60,23, 7,34, 5,15,64,34, 5,80,89,15,72,20,15,73,71, 7,69,29,
+ 5,92,12, 6, 5,42, 6, 8,94, 4, 4,82, 6, 8,93, 6,13,80, 5,11,26, 6,20,18,
+ /* plane 2, page 105 */
+ 0, 255, /* first, last */
+ 15,13,16, 0, 0, 0, 5,15,82, 6,27,22, 4,15,41,15,18,16, 6,27,23, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,27,21, 0, 0, 0, 6,35,70, 6,35,69,15,23,77,15,23,78,
+ 6,45,57, 0, 0, 0, 6,45,58, 0, 0, 0, 6,55, 4, 5,41, 5,15,43,58, 0, 0, 0,
+ 4,44,64, 4,44,65, 5,47,94,15,49,55, 0, 0, 0, 7, 7,29, 4,50,73, 5,55,28,
+ 0, 0, 0, 7,26,70, 5,61,64, 5,61,63,15,60,24,15,64,35, 5,73, 7, 4,64,85,
+ 5,77,17,15,67,46, 7,41,12, 5,77,15, 5,77,16, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,66,49, 6, 9, 1, 6,13,81, 6,13,82, 6,27,26,15,13,17,
+ 0, 0, 0, 6,27,24, 6,27,25, 5,20,87, 4,20,54, 0, 0, 0, 0, 0, 0, 6,45,59,
+ 0, 0, 0, 5,34,10, 5,41, 6, 0, 0, 0,15,43,59, 5,48, 1, 7, 7,30,15,49,56,
+ 5,48, 2, 7,17,81, 4,50,74, 5,55,29,15,55,20, 0, 0, 0, 4,56,15, 5,67,80,
+ 5,67,81, 4, 4,84, 6, 5,43, 6, 3,68, 6,13,83, 6,13,84, 0, 0, 0,15,13,18,
+ 4,15,43, 6,20,19, 0, 0, 0, 6,27,27, 0, 0, 0, 6,27,33, 6,27,29, 6,27,28,
+ 4,15,44, 6,27,31, 6,27,32, 0, 0, 0, 0, 0, 0, 6,35,73, 5,20,88, 6,27,30,
+ 6,35,72, 6,35,75, 0, 0, 0, 6,35,74, 0, 0, 0, 5,27,50, 6,45,60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,27,51, 5,41, 7, 6,55, 8, 6,55, 7, 6,55, 5, 6,64,84,
+ 6,64,90, 6,64,85, 6,64,86, 5,48, 3, 7, 7,31, 6,64,87, 6,64,91, 6,64,88,
+ 7, 7,32, 7, 7,33, 7, 7,34, 6,64,89, 5,41, 8, 5,48, 4, 5,48, 5, 7, 7,35,
+ 7, 7,36, 7,17,82, 7, 7,37, 0, 0, 0, 7, 7,38, 0, 0, 0,15,55,21, 7,17,84,
+ 7,17,83, 5,61,66, 0, 0, 0, 7,17,87, 0, 0, 0, 7,17,86, 7,17,85, 5,61,65,
+ 5,61,68, 7,26,71, 7,34, 8, 7,34, 7, 5,61,69, 4,60,87, 7,34, 6,15,64,36,
+ 15,64,37, 7,41,13, 5,67,83, 5,67,82, 7,41,14, 7,47,31, 0, 0, 0, 5,73, 8,
+ 0, 0, 0, 5,77,19, 5,77,20, 5,77,21, 7,47,30, 7,41,15,15,67,47, 5,73, 9,
+ 7,47,32, 7,47,33, 5,80,90,15,69,88,15,72,21,15,72,23, 7,56,70, 0, 0, 0,
+ 15,72,22, 7,56,71, 7,60,41, 5,87,94, 7,65,23, 5,89,29, 5,89,31, 5,89,30,
+ 15,76,74, 7,69,30, 7,69,31, 0, 0, 0, 7,70,51, 5,92,48,15, 5,11, 6,20,20,
+ 4,15,46, 4,15,45, 6,27,34, 0, 0, 0, 6,27,35, 0, 0, 0, 6,27,36, 5,15,83,
+ 5,15,84, 6,35,76, 0, 0, 0, 6,35,77, 6,33,93, 6,45,64, 6,45,63, 6,45,65,
+ 0, 0, 0, 0, 0, 0,15,30,48, 0, 0, 0, 0, 0, 0, 5,41, 9, 0, 0, 0, 4,38,45,
+ 5,37,51, 4,38,46, 6,55, 9,15,43,60, 6,64,92, 6,64,94, 6,64,93, 7, 7,39,
+ 15,49,57, 0, 0, 0, 7, 7,41, 7, 7,40, 0, 0, 0, 7,17,88, 5,55,30, 0, 0, 0,
+ 7,17,89, 7,26,72, 0, 0, 0,15,64,38, 5,67,84, 7,34,10, 7,34, 9, 0, 0, 0,
+ 5,77,22, 5,80,91, 0, 0, 0, 7,60,42, 5,86,30, 0, 0, 0, 5,48, 6, 5,48, 7,
+ /* plane 2, page 106 */
+ 0, 255, /* first, last */
+ 15,64,39, 7,47,34, 0, 0, 0, 7,60,43, 7,63,31, 7,65,25, 5,90,80, 5, 4,84,
+ 4, 7,81, 4, 7,80, 6,13,87, 6,13,86, 6,13,85, 5, 7,63, 4,11,17, 4,11,21,
+ 4,11,20, 0, 0, 0, 6,20,21, 6,20,23, 6,20,22, 6,27,42, 5,15,85, 6,27,41,
+ 6,27,37, 5,15,86, 4,15,50, 0, 0, 0, 4,15,49, 6,27,38, 0, 0, 0, 6,27,39,
+ 6,27,40, 5,20,90, 4,20,57, 4,20,59, 6,35,82, 0, 0, 0, 5,20,91, 6,35,78,
+ 6,35,79, 0, 0, 0,15,23,81, 0, 0, 0, 5,20,89,15,23,80,15,23,82, 5,27,52,
+ 6,45,69, 6,45,68, 4,20,58, 0, 0, 0, 4,26,50, 4,26,48, 4,26,49, 4,26,51,
+ 0, 0, 0, 0, 0, 0, 6,45,70, 0, 0, 0, 5,34,11, 6,55,12, 5,34,12, 6,55,10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,82, 6,55,11, 0, 0, 0, 0, 0, 0, 6,55,13,
+ 6,55,14, 5,34,14, 6,65, 7, 5,41,13, 5,41,11, 4,38,50, 6,65, 2, 6,65, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,43,62,15,43,63, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,43,61, 6,65, 3, 0, 0, 0, 0, 0, 0, 5,41,10, 5,48,15, 4,44,71, 4,44,70,
+ 5,48,14, 5,48,11, 5,48,12, 5,48,16, 5,48, 8, 7, 7,47, 7, 7,45, 5,48,17,
+ 7, 7,42, 7, 7,44, 7, 7,46, 7, 7,43, 5,48,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,48, 9, 5,48,10, 0, 0, 0, 5,55,34, 5,55,31, 5,55,35, 7,17,92,
+ 5,55,32, 7,18, 1, 7,17,93, 7,18, 3, 5,55,33, 7,18, 2,15,55,22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,17,94, 7,17,91, 7,26,74, 4,56,17,
+ 5,61,76, 5,61,70, 5,61,73, 5,61,72, 0, 0, 0, 5,61,74, 5,61,75, 0, 0, 0,
+ 0, 0, 0, 4,60,89, 5,67,91, 7,34,12, 5,67,85, 5,67,90, 5,67,93, 5,67,89,
+ 4,60,90, 4,60,91, 5,67,86, 5,67,87, 5,67,92, 4,60,88, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,34,13, 7,34,11, 0, 0, 0, 5,67,88,
+ 0, 0, 0, 7,41,16, 5,73,13, 5,73,12, 5,73,11, 5,73,10, 7,41,17,15,67,48,
+ 7,41,18, 5,77,23, 7,47,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,80,93, 5,80,92,
+ 7,52,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84, 1, 5,84, 2, 4,73,18,
+ 7,56,72, 7,52,48, 7,52,49, 4,74,79, 7,60,44, 7,65,27, 7,65,26, 7,66,50,
+ 5,90,81, 0, 0, 0, 4,78,47, 6,20,24,15,23,83, 0, 0, 0, 5,27,31,15,30,49,
+ 15,49,58,15,60,25, 7,47,36, 0, 0, 0, 5,20,92, 5,20,93, 0, 0, 0, 6,35,83,
+ 0, 0, 0, 5,20,94,15,30,50, 6,55,15, 6,55,16, 6,55,17, 6,65, 9, 0, 0, 0,
+ 15,43,64, 0, 0, 0, 6,65,10, 6,65, 8, 7, 7,49, 7, 7,48, 7, 7,50,15,49,59,
+ 15,49,60,15,49,61, 5,55,36, 5,55,37, 7,18, 5, 7,18, 4, 0, 0, 0, 5,77,25,
+ 5,77,24, 7,47,37,15,76,23, 5, 1,91, 6, 3,24, 0, 0, 0, 4, 3,14, 6, 5,48,
+ 6, 5,49, 6,13,88, 6, 5,46, 5, 3, 6, 6, 5,45,15, 2,79,15, 2,80,15, 2,78,
+ /* plane 2, page 107 */
+ 0, 255, /* first, last */
+ 6, 5,44, 4, 4,87, 4, 4,88, 4, 4,92, 6, 9, 2, 4, 4,90, 6, 9, 5, 6, 9, 3,
+ 6, 9, 4, 6, 9, 6, 0, 0, 0,15, 5,12,15, 5,13,15, 5,14,15, 5,15,15, 5,16,
+ 15, 5,17, 0, 0, 0, 0, 0, 0, 6,13,91, 4, 7,92, 4, 7,87, 4, 7,89, 5, 7,66,
+ 4, 7,93, 4, 7,88, 4, 7,85, 5, 7,64, 6,13,92, 5, 7,65, 4, 7,84, 6,27,43,
+ 6, 7,44, 6,14, 1, 5, 7,68, 4, 7,86, 6,13,90, 6,13,94, 6,27,45, 6,27,44,
+ 0, 0, 0,15, 8,55,15, 8,56,15, 8,57,15, 8,58,15, 8,59,15, 8,61,15, 8,62,
+ 15, 8,63,15, 8,64,15, 8,65,15, 8,66,15, 8,68, 6,13,89, 0, 0, 0, 4,11,27,
+ 4,11,23, 4,11,24, 4,11,25, 5,11,31, 6,20,35, 6,20,27, 4,11,28, 6,20,33,
+ 6,20,29, 5,11,29, 6,20,25, 6,20,32, 6,20,30, 6,20,34, 6,20,37, 6,20,38,
+ 5,11,27, 5,11,30, 0, 0, 0, 5,11,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,19,15,13,21,15,13,23,15,13,24,
+ 15,13,25,15,13,26,15,13,27,15,13,28,15,13,22, 6,19,30, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,20,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,13,20, 6,13,93, 0, 0, 0, 6,45,72,15,10,50, 5,15,92, 4,15,54, 4,15,55,
+ 4,15,66, 5,15,88, 5,15,90, 5,15,94, 4,15,52, 5,15,87, 5,16, 3, 4,15,59,
+ 5,16, 7, 4,15,56, 4,15,69, 5,16, 4, 4,15,64, 6,27,62, 6,27,63, 5,16, 5,
+ 6,27,65, 5,16, 2, 4,15,70, 6,27,57, 6,27,56, 6,45,71, 6,36, 2, 6,27,53,
+ 5,15,93, 6,27,52, 6,27,49, 6,27,47, 6,27,58, 6,27,60, 5,15,91, 6,27,55,
+ 5,16, 6, 5,15,89, 6,27,51, 6,27,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,27,61, 6,27,66,15,18,19,15,18,21,15,18,22,15,18,23,15,18,24,15,18,25,
+ 15,18,27,15,18,28,15,18,29,15,18,31,15,18,32,15,18,34,15,18,35,15,18,36,
+ 15,18,37,15,18,39,15,18,40,15,18,41,15,18,42,15,18,43, 6,27,48,15,18,38,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,18,44, 0, 0, 0,15,18,30, 0, 0, 0, 5,21,11,
+ 5,21,14, 5,21, 7, 4,20,80, 5,21,12, 4,20,65, 4,20,78, 4,20,72, 6,36,18,
+ 4,20,82, 4,20,85, 6,36, 6, 6,35,91, 6,36, 3, 5,21, 3, 6,35,89, 6,35,85,
+ 4,20,64, 5,21,18, 6,35,84, 6,36, 1, 6,36,24, 4,20,68, 6,36,22, 6,46,26,
+ 0, 0, 0, 6,36,20, 6,27,64, 6,45,88, 4,20,63, 5,21, 1, 4,20,75, 0, 0, 0,
+ 6,35,87, 6,36, 4, 5,21,16, 6,36,15, 6,36,21, 6,36,14, 6,36, 9, 5,21,15,
+ 6,36,19, 6,35,88, 6,36, 7, 5,21,17, 5,34,15, 6,55,18, 6,55,19, 0, 0, 0,
+ 6,36,16, 6,36,17, 6,35,94, 5,21, 2, 5,21,19, 6,36,10, 5,21, 9, 5,21,13,
+ 5,21, 6, 6,46,23, 6,36,25, 6,36,26, 6,35,92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,35,90,15,23,84,15,23,85,15,23,86,15,23,87,15,23,89,15,23,91,15,23,92,
+ /* plane 2, page 108 */
+ 0, 255, /* first, last */
+ 15,23,93,15,23,94,15,24, 1,15,24, 2,15,24, 4,15,24, 5,15,24, 6,15,24, 7,
+ 15,24, 8,15,24, 9,15,24,10,15,24,11,15,24,12,15,24,13,15,24,14,15,24,15,
+ 15,24,16,15,24,17,15,24,18,15,24,19,15,24,20,15,24,21, 5,27,61, 6,35,93,
+ 5,21, 8, 6,36, 5, 0, 0, 0,15,23,90, 0, 0, 0, 6,36,13, 6,36,23, 0, 0, 0,
+ 0, 0, 0,15,24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,21, 5,
+ 0, 0, 0, 0, 0, 0, 5,27,53, 4,26,53, 5,27,73, 5,27,74, 5,27,66, 5,27,76,
+ 5,27,77, 5,27,67, 4,26,61, 6,45,90, 6,45,82, 6,46,11, 6,45,80, 6,45,75,
+ 5,27,63, 5,27,71, 5,27,72, 6,45,91, 6,45,89, 5,27,62, 5,27,78, 5,27,75,
+ 4,20,74, 4,26,55, 4,26,58, 4,26,56, 4,26,66, 5,27,58, 0, 0, 0, 4,26,52,
+ 6,45,73, 6,46,21, 4,26,67, 6,45,74, 5,27,68, 6,45,92, 6,46,22, 6,45,93,
+ 6,46,15, 6,46,16, 4,26,75, 6,46, 6, 4,26,73, 6,46, 3, 5,27,60, 6,46, 8,
+ 6,45,85, 6,46,13, 6,45,84, 6,46, 2, 6,46,17, 0, 0, 0, 6,46, 9, 5,27,69,
+ 6,65,18, 6,65,13, 6,65,14, 5,27,55, 6,46, 4, 6,45,79, 6,46,14, 5,41,14,
+ 6,45,83, 6,46,12, 6,45,87, 6,46, 5, 6,45,77, 6,46,10, 4,26,74, 5,27,64,
+ 5,27,59, 0, 0, 0, 6,45,86, 6,46,24, 6,65,11, 5,27,70, 6,65,15, 5,27,65,
+ 6,46,20, 6,65,17, 6,65,16, 6,45,76, 6,45,94, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,44,91, 5,27,56, 6,45,78, 6,45,81, 6,46,19,
+ 6,46,25,15,30,51,15,30,53,15,30,54,15,30,56,15,30,58,15,30,59,15,30,60,
+ 15,30,61,15,30,62,15,30,63,15,30,64,15,30,65,15,30,67,15,30,68,15,30,69,
+ 15,30,72,15,30,73,15,30,74,15,30,77,15,30,79,15,30,80,15,30,81,15,30,82,
+ 15,30,84,15,30,85,15,30,86,15,30,87,15,30,88,15,30,89,15,30,90,15,30,91,
+ 15,30,92,15,30,93,15,30,94, 0, 0, 0, 6,65,12, 0, 0, 0, 0, 0, 0, 5,27,57,
+ 6,46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,30,66,15,30,52,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,30,78, 0, 0, 0, 0, 0, 0,
+ 15,30,83, 4,32,35, 6,55,20, 6,55,38, 5,34,46, 6,55,26, 6,55,27, 5,34,20,
+ 4,32,29, 6,55,41, 6,55,58, 4,32,32, 4,32,34, 5,34,37, 6,55,62, 5,34,26,
+ 4,32,23, 4,32,20, 6,55,33, 6,55,67, 5,34,19, 6,55,49, 6,55,53, 5,34,35,
+ 6,55,42, 4,32,24, 4,32,27, 5,34,22, 6,55,35, 4,32,28, 4,32,37, 5,34,33,
+ 4,32,45, 5,34,47, 4,32,30, 5,34,38, 6,55,61, 5,34,31, 4,32,19, 4,32,17,
+ 6,55,69, 4,32,31, 6,55,34, 5,34,40, 5,34,34, 5,34,24, 5,34,30, 0, 0, 0,
+ 6,55,24, 6,55,51, 6,55,47, 6,55,32, 6,55,71, 5,34,29, 6,55,25, 6,55,68,
+ 6,55,23, 5,34,48, 6,55,46, 6,55,37, 6,55,28, 5,34,41, 5,34,45, 5,34,27,
+ /* plane 2, page 109 */
+ 0, 255, /* first, last */
+ 5,34,39, 6,55,50, 6,55,64, 0, 0, 0, 0, 0, 0, 6,55,60, 0, 0, 0, 6,55,40,
+ 6,55,54, 5,34,25, 4,32,25, 6,55,55, 5,34,16, 5,34,32, 5,34,18, 5,34,42,
+ 6,55,31, 4,32,21, 4,32,43, 6,55,44, 5,34,21, 5,34,17, 6,55,39, 6,55,56,
+ 7, 7,51, 6,55,65, 5,34,28, 6,55,36, 6,55,52, 6,55,22, 6,55,66, 6,55,70,
+ 6,55,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,32,46, 5,34,36, 5,34,43, 6,55,21, 6,55,30,
+ 6,55,43, 6,55,45, 6,55,59, 6,55,63,15,36,83,15,36,85,15,36,86,15,36,87,
+ 15,36,88,15,36,89,15,36,90,15,36,91,15,36,92,15,36,93,15,36,94,15,37, 1,
+ 15,37, 2,15,37, 3,15,37, 4,15,37, 5,15,37, 6,15,37, 7,15,37, 8,15,37, 9,
+ 15,37,10,15,37,11,15,37,12,15,37,14,15,37,15,15,37,16,15,37,17, 0, 0, 0,
+ 5,34,44, 4,32,42, 6,55,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,46,18,15,30,55, 5,34,23,
+ 0, 0, 0, 4,38,70, 6,65,64, 5,41,37, 6,65,19, 6,65,35, 5,41,43, 4,38,67,
+ 6,65,54, 4,38,54, 6,65,37, 4,38,57, 6,65,28, 5,41,33, 6,65,42, 4,38,53,
+ 6,65,50, 5,41,29, 6,65,32, 6,65,57, 5,41,41, 5,41,38, 6,65,44, 5,41,26,
+ 4,38,58, 6,65,25, 6,65,53, 6,65,45, 6,65,31, 5,41,36, 5,41,25, 5,41,16,
+ 4,38,66, 6,65,33, 4,38,62, 0, 0, 0, 6,65,22, 4,38,61, 4,38,75, 4,38,59,
+ 5,41,31, 7, 7,56, 6,65,23, 5,41,18, 5,41,23, 5,41,17, 5,41,40, 5,48,27,
+ 4,38,63, 5,41,35, 6,65,24, 4,38,72, 6,65,48, 5,41,24, 6,65,55, 6,65,38,
+ 6,65,27, 5,41,32, 5,41,22, 7,18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,41,15, 5,41,20, 6,65,39, 6,65,41, 6,65,43, 6,65,46, 6,65,58, 6,65,61,
+ 6,65,62,15,43,65,15,43,66,15,43,67,15,43,70,15,43,72,15,43,73,15,43,74,
+ 15,43,75,15,43,76,15,43,77,15,43,78,15,43,79,15,43,80,15,43,81,15,43,82,
+ 15,43,83,15,43,84,15,43,85,15,43,86,15,43,88,15,43,89,15,43,90,15,43,92,
+ 15,43,93,15,43,94,15,44, 1,15,44, 2,15,44, 3,15,44, 5,15,44, 6,15,44, 7,
+ 15,44, 8,15,44, 9,15,44,10, 6,65,40, 5,41,34, 6,65,51, 0, 0, 0, 6,65,49,
+ 6,55,72, 5,41,42, 6,65,60, 6,65,63, 0, 0, 0, 6,65,59, 6,65,26, 6,65,21,
+ 6,65,34, 6,65,29, 0, 0, 0, 6,55,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,43,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,43,71, 6,65,52, 4,38,74, 4,38,52, 5,41,21, 5,41,45, 7,18, 6, 5,41,19,
+ 6,65,65, 5,41,39, 5,41,44, 5,55,38,15,43,91, 5,41,30, 0, 0, 0, 7, 7,76,
+ /* plane 2, page 110 */
+ 0, 255, /* first, last */
+ 4,44,94, 5,48,18, 4,44,73, 4,44,92, 7, 8, 1, 0, 0, 0, 5,48,21, 7, 8, 4,
+ 7, 7,87, 7, 7,60, 5,48,25, 7, 7,73, 7, 7,88, 7, 7,89, 7, 7,74, 7, 7,83,
+ 5,48,26, 7, 7,79, 4,44,85, 5,48,29, 5,48,34, 7, 7,64, 7, 8, 2, 5,48,32,
+ 5,48,31, 5,55,39, 5,48,33, 5,48,43, 7, 7,75, 7, 7,86, 7, 7,57, 7, 7,82,
+ 7, 7,69, 5,48,40, 5,48,23, 4,44,91, 7, 7,52, 0, 0, 0, 7, 7,59, 7, 7,68,
+ 7, 7,67, 7, 7,71, 5,48,19, 7, 7,70, 7, 7,93, 7, 7,62, 5,48,30, 7, 7,54,
+ 5,48,20, 5,48,42, 7, 7,92, 7, 7,66, 7, 7,61, 7, 7,78, 4,44,86, 5,48,41,
+ 5,48,37, 7, 7,84, 5,55,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,45, 2, 5,48,35,
+ 7, 7,53, 7, 7,58, 7, 7,63, 7, 7,80, 7, 7,81, 7, 8, 3,15,49,62,15,49,63,
+ 15,49,64,15,49,66,15,49,67,15,49,70,15,49,71,15,49,72,15,49,73,15,49,74,
+ 15,49,76,15,49,77,15,49,78,15,49,79,15,49,80,15,49,82,15,49,85,15,49,87,
+ 0, 0, 0, 4,45, 3, 7, 7,90, 5,48,36, 7, 7,94, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7,85, 0, 0, 0, 7, 7,72, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,49,81, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,49,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,49,75,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,48,22, 7, 7,55, 5,48,39,
+ 5,48,28, 6,65,20, 7,34,14, 0, 0, 0,15,44, 4, 0, 0, 0, 7,18,49, 4,51,13,
+ 7,18,18, 4,51,10, 4,51,20, 7,18,51, 5,55,41, 4,51,11, 5,55,61, 7,18,35,
+ 5,55,52, 4,50,81, 4,51,16, 5,55,49, 5,55,59, 7,18,28, 4,50,85, 5,55,58,
+ 5,55,43, 5,55,63, 7,18,19, 5,55,65, 4,51,15, 7,18, 8, 5,55,45, 5,55,47,
+ 7,18,44, 5,55,53, 5,55,66, 7,18,29, 7,18,27, 5,48,44, 4,50,80, 5,55,40,
+ 5,55,62, 7,18,37, 7,18,43, 7,18,33, 5,55,68, 5,55,64, 7, 8, 5, 7, 7,91,
+ 7,18,50, 5,61,90, 4,51, 6, 7,18,14, 4,51, 9, 7,18,22, 5,55,51, 4,51, 8,
+ 4,50,84, 5,48,24, 7,18,15, 5,55,50, 7,18,24, 5,55,54, 5,55,44, 7,18,13,
+ 7,18,55, 7,18,46, 4,51,14, 5,55,60, 7,18,10, 4,50,88, 7,18,25, 7,34,15,
+ 7,18,11, 7,18,53, 4,51,18, 7,18,34, 7,18,21, 7,18,31, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,55,30,15,55,31,15,55,32,15,55,33, 5,55,42, 5,55,48, 5,55,55, 7,18,12,
+ 7,18,20, 7,18,23, 7,18,30, 7,18,32, 7,18,39, 7,18,41, 7,18,45, 7,18,47,
+ 7,18,52, 7,18,57, 7,18,58,15,55,23,15,55,24,15,55,25,15,55,26,15,55,27,
+ 15,55,28,15,55,29,15,55,34,15,55,35,15,55,36,15,55,41,15,55,44,15,55,45,
+ 15,55,46,15,55,47,15,55,48,15,55,49,15,55,50,15,55,51,15,55,52,15,55,54,
+ /* plane 2, page 111 */
+ 0, 255, /* first, last */
+ 15,55,55,15,55,56,15,55,57,15,55,58,15,55,59,15,55,60, 7,18,17,15,55,37,
+ 0, 0, 0, 0, 0, 0, 4,50,93, 7,18,26, 7,18,56, 7,18,48, 5,55,69, 5,55,46,
+ 7,18,16, 7,18, 9, 7,18,40, 0, 0, 0, 0, 0, 0,15,55,42, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,18,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,55,67, 5,55,57, 0, 0, 0, 7,18,38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,26,86, 4,56,26, 4,56,31, 7,26,78, 7,34,27, 7,26,88, 4,56,40,
+ 4,56,41, 5,55,70, 5,61,85, 5,61,93, 5,61,83, 7,27,11, 7,27,15, 5,61,79,
+ 4,56,42, 4,56,23, 7,26,91, 4,56,37, 5,62, 1, 7,26,92, 7,27, 3, 7,27,19,
+ 5,61,94, 5,62, 5, 7,27,17, 5,62, 2, 5,61,78, 5,61,88, 7,26,94, 5,61,92,
+ 7,26,83, 7,27, 4, 7,27,10, 5,61,91, 4,56,43, 0, 0, 0, 5,61,77, 5,62, 3,
+ 4,56,33, 7,27,16, 5,61,87, 4,56,38, 5,61,81, 5,62, 4, 7,27, 5, 5,61,86,
+ 7,26,80, 7,26,85, 7,34,25, 7,26,75, 7,26,76, 7,27,21, 7,26,93, 4,56,39,
+ 7,27,14, 7,26,82, 7,26,87, 7,41,20, 7,26,81, 7,27, 2, 7,27, 9, 7,18,42,
+ 7,26,89, 7,27, 1, 7,27,23, 5,61,84, 5,48,45, 0, 0, 0, 4,56,35, 0, 0, 0,
+ 0, 0, 0, 7,41,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,61,80, 5,61,82, 7,26,77,
+ 7,27, 7, 7,27, 8, 7,27,12, 7,27,20,15,60,26,15,60,27,15,60,28,15,60,29,
+ 15,60,30,15,60,32,15,60,33,15,60,34,15,60,35,15,60,36,15,60,37,15,60,38,
+ 15,60,39,15,60,41,15,60,42,15,60,43,15,60,44,15,60,47,15,60,48, 4,56,25,
+ 7,26,90, 0, 0, 0, 7,27,13, 0, 0, 0, 7,27,22, 0, 0, 0, 0, 0, 0, 7,26,84,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,60,40, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,60,31,
+ 0, 0, 0,15,60,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,55,53,
+ 0, 0, 0, 0, 0, 0,15,67,59, 0, 0, 0, 5,68,12, 7,34,43, 4,61, 4, 7,34,44,
+ 5,68, 2, 4,61, 5, 5,62, 6, 5,68,15, 7,34,40, 5,68, 5, 5,67,94, 7,34,16,
+ 5,68, 1, 5,68, 9, 5,68,22, 5,68,25, 7,34,22, 5,68,19, 7,34,38, 4,61, 2,
+ 5,62, 7, 5,68,24, 5,68, 6, 5,68,16, 7,34,29, 5,68, 4, 5,68,14, 0, 0, 0,
+ 7,34,45, 4,61,16, 5,68,17, 4,61,14, 4,61, 6, 4,61,10, 5,68,20, 5,68,18,
+ 7,34,30, 7,47,38, 7,34,26, 7,34,23, 4,61,15, 7,41,36, 5,68,11, 7,34,19,
+ 7,34,37, 7,34,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,61,13, 7,27, 6, 7,34,18, 7,34,20, 7,34,21, 7,34,31, 7,34,34, 7,34,36,
+ 7,34,42, 7,34,46, 7,34,47,15,64,40,15,64,41,15,64,42,15,64,43,15,64,44,
+ 15,64,47,15,64,48,15,64,49,15,64,50,15,64,51,15,64,52, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,64,53,15,64,54,15,64,55,15,64,56,15,64,57,15,64,58,15,64,59,
+ /* plane 2, page 112 */
+ 0, 255, /* first, last */
+ 15,64,60,15,64,62,15,64,63, 0, 0, 0, 4,61, 7, 7,34,32, 5,68, 7, 7,34,33,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,41,19, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,68,21, 5,68,10, 4,61, 9, 7,34,39,
+ 5,68, 3, 5,68, 8, 5,68,23, 7,34,35, 0, 0, 0, 7,34,17, 0, 0, 0, 0, 0, 0,
+ 5,73,30, 5,73,15, 7,47,61, 5,73,16, 5,73,26, 5,73,22, 4,64,93, 4,64,89,
+ 5,73,31, 5,73,23, 7,41,24, 7,41,37, 5,73,27, 5,73,21, 4,64,92, 5,73,14,
+ 5,77,34, 7,41,35, 5,73,24, 7,41,38, 5,73,25, 7,41,33, 0, 0, 0, 7,41,52,
+ 7,41,49, 7,41,28, 5,73,19, 5,73,29, 7,41,43, 7,41,46, 7,41,30, 7,41,29,
+ 7,41,34, 7,41,39, 7,47,52, 7,41,45, 7,41,25, 7,41,44, 7,41,42, 7,47,39,
+ 5,73,20, 5,73,18, 4,64,86, 5,73,28, 7,41,41, 7,41,32, 0, 0, 0, 7,41,31,
+ 0, 0, 0, 7,41,22, 0, 0, 0, 0, 0, 0, 7,41,23, 7,41,26, 7,41,40, 7,41,48,
+ 7,41,50,15,67,49,15,67,50,15,67,52,15,67,53,15,67,54,15,67,55,15,67,56,
+ 15,67,57,15,67,58,15,67,60,15,67,61,15,67,62,15,67,63,15,67,64,15,67,65,
+ 15,67,66,15,67,67,15,67,68,15,67,69,15,67,70,15,67,71,15,67,72,15,67,73,
+ 7,41,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,62, 7,47,53, 7,47,46, 5,77,32, 5,77,39,
+ 7,47,65, 5,77,33, 5,77,36, 4,68,25, 7,47,56, 5,77,38, 4,68,21, 0, 0, 0,
+ 5,77,31, 5,80,94, 7,47,63, 5,77,27, 7,47,49, 7,47,48, 7,47,44, 5,77,30,
+ 5,77,37, 7,47,45, 4,68,17, 7,47,71, 5,77,28, 7,47,43, 7,47,51, 7,47,66,
+ 7,47,59, 7,41,27, 7,47,69, 5,77,35, 4,68,14, 7,47,57, 5,77,29, 7,47,70,
+ 0, 0, 0, 7,47,58, 0, 0, 0, 5,73,17, 7,52,71, 7,56,73, 0, 0, 0, 7,47,41,
+ 5,77,26, 5,77,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,47,50, 7,47,54, 7,47,55, 7,47,60, 7,47,67, 7,47,68,15,69,89,15,69,90,
+ 15,69,91,15,69,92,15,69,93,15,69,94,15,70, 1,15,70, 2,15,70, 3,15,70, 4,
+ 15,70, 5,15,70, 6,15,70, 7,15,70, 8,15,70, 9,15,70,10,15,70,11,15,70,12,
+ 7,47,42, 7,47,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,64, 7,52,67,
+ 4,73,21, 5,81, 8, 7,52,70, 7,52,63, 5,81, 4, 4,71,12, 4,71,10, 7,52,57,
+ 4,71,14, 5,81, 2, 7,52,68, 5,81, 5, 7,52,69, 4,71, 9, 5,77,41, 5,81, 7,
+ 7,52,59, 7,52,51, 5,81, 6, 7,52,66, 7,52,55, 7,52,53, 7,52,64, 4,71,13,
+ 5,81, 3, 5,81, 9, 5,81,10, 7,52,52, 7,52,60, 0, 0, 0, 7,47,47, 7,52,58,
+ 7,56,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,81, 1, 7,52,54, 7,52,61, 7,52,65,15,72,24,15,72,26,15,72,27,
+ /* plane 2, page 113 */
+ 0, 255, /* first, last */
+ 15,72,28,15,72,29,15,72,30,15,72,31,15,72,33,15,72,34,15,72,35,15,72,36,
+ 0, 0, 0,15,72,32, 0, 0, 0, 7,52,56, 0, 0, 0, 5,84, 4, 4,73,22, 5,84, 5,
+ 5,84, 7, 5,84, 8, 7,56,80, 5,84, 9, 4,73,27, 4,73,26, 7,56,87, 7,56,85,
+ 7,56,77, 7,60,51, 5,84, 3, 5,84, 6, 7,56,79, 4,73,24, 4,73,25, 7,56,78,
+ 4,73,20, 7,56,83, 7,56,75, 7,56,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,56,74, 7,56,76, 7,56,81, 7,56,84,15,73,72,15,73,75,15,73,76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,60,47, 7,60,58,
+ 4,74,85, 5,86,32, 4,74,84, 5,86,31, 4,74,81, 4,74,83, 4,74,82, 4,74,80,
+ 5,86,35, 7,60,49, 7,60,59, 5,86,34, 5,89,32, 7,60,53, 5,86,36, 7,60,55,
+ 7,60,56, 7,60,45, 7,60,48, 5,86,33, 7,60,54, 7,60,52, 7,60,50, 7,60,57,
+ 15,74,77,15,74,78,15,74,79, 7,60,46,15,73,74, 0, 0, 0, 5,88, 3, 5,88, 2,
+ 5,88, 1, 7,63,32, 5,88, 4, 7,63,34, 7,63,38, 7,63,35, 7,63,36, 7,63,41,
+ 7,63,33, 7,63,39, 5,89,34, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,64,15,75,65,
+ 15,75,67, 7,63,37, 7,63,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,89,35, 7,66,53,
+ 5,89,33, 7,66,51, 7,65,30, 7,65,29, 7,65,28, 0, 0, 0,15,76,24,15,76,25,
+ 7,65,31, 0, 0, 0, 5,90,21, 5,90,22, 7,66,57, 7,66,55, 7,66,54, 0, 0, 0,
+ 0, 0, 0, 7,66,56, 0, 0, 0, 7,66,52, 0, 0, 0,15,76,49, 7,66,40, 4,77,90,
+ 7,67,72, 5,90,82, 4,77,63, 4,77,92, 0, 0, 0,15,76,75,15,76,77, 5,91,38,
+ 4,78,21, 7,68,56, 7,68,57, 5,92,41, 7,69,32, 5,91,70, 7,69,64, 7,69,86,
+ 5,92,47, 5,92,29, 7,69,63,15, 8,69, 4,11,31, 6,20,41, 6,20,40, 0, 0, 0,
+ 15,18,46, 0, 0, 0, 0, 0, 0, 5,21,22, 5,21,20, 4,20,87, 4,20,86, 6,36,33,
+ 4,20,88, 6,36,34, 6,36,32, 6,36,31, 6,27,67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,46,28, 5,27,81, 6,46,29,15,31, 2,15,31, 3,15,31, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,34,53, 5,34,49, 5,34,50, 6,55,75, 6,55,74, 6,55,73,
+ 0, 0, 0, 5,41,47, 6,65,66, 6,65,70, 4,38,79, 6,65,69, 6,65,71, 6,65,67,
+ 6,65,68, 5,41,48,15,44,11,15,44,12, 0, 0, 0, 4,38,78, 0, 0, 0, 0, 0, 0,
+ 7, 8, 9, 7, 8, 7, 7,18,63, 5,48,46, 7, 8, 6, 7, 8, 8, 0, 0, 0,15,49,89,
+ 7, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,55,74, 5,55,75, 5,55,72, 5,55,73,
+ 4,51,21, 5,55,71, 7,18,64, 7,18,60, 7,18,61, 4,51,24, 4,51,23, 5,55,77,
+ 7,18,62,15,55,61,15,55,62,15,55,63, 5,55,76, 7,18,59, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,56,44, 7,27,25,15,60,49,15,60,50,15,60,51, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,34,49, 5,68,29, 4,61,19, 7,34,48, 4,61,17,
+ /* plane 2, page 114 */
+ 0, 243, /* first, last */
+ 7,34,50, 5,68,28, 0, 0, 0,15,64,64, 0, 0, 0, 0, 0, 0, 7,41,54, 7,41,53,
+ 4,64,94, 7,41,55, 0, 0, 0, 7,47,73, 0, 0, 0, 5,77,42, 7,47,74, 0, 0, 0,
+ 7,44, 6, 5,81,12, 7,47,72, 5,81,11, 0, 0, 0, 5,80,45, 7,52,74, 7,52,73,
+ 5,84,10, 0, 0, 0, 7,60, 4, 0, 0, 0, 4,78,24, 5, 4,85, 6, 9, 9, 4, 8, 2,
+ 6,14, 5, 0, 0, 0, 0, 0, 0,15, 8,70,15, 8,71,15, 8,73, 0, 0, 0,15, 8,74,
+ 4,11,35, 6,20,43, 4,11,32, 4,11,34, 6,20,42, 5,11,32, 6,20,45, 6,20,44,
+ 6,20,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,29,15,13,31,15,13,34,15,13,35,
+ 15,13,36,15,13,33, 4,11,33, 5,16,16, 6,27,72, 5,16,12, 5,16,19, 6,27,71,
+ 5,16,13, 5,16,18, 6,27,70, 4,15,76, 4,15,74, 4,15,78, 5,16,14, 6,27,80,
+ 5,16, 9, 6,27,75, 5,16,17, 5,16, 8, 6,27,74, 5,16,15, 5,16,20, 6,27,78,
+ 6,27,68, 5,16,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,27,69,15,18,47, 6,27,76,
+ 6,27,77, 0, 0, 0, 0, 0, 0, 5,16,10, 6,27,79, 0, 0, 0, 5,21,23, 4,20,93,
+ 6,36,37, 5,21,24, 5,21,25, 5,21,26, 5,21,32, 4,21, 2,15,24,29, 4,21, 3,
+ 6,36,44, 5,21,28, 4,21, 1, 5,21,29, 6,36,38, 5,21,33, 6,36,41, 4,21, 4,
+ 4,20,94, 0, 0, 0, 0, 0, 0, 6,36,39, 6,36,42, 6,36,36, 6,36,43, 6,36,45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,24,22,15,24,23,15,24,24,15,24,25,15,24,27,
+ 15,24,28,15,24,30,15,24,31,15,24,32, 0, 0, 0, 5,21,30, 6,36,46, 4,21, 5,
+ 6,36,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,21,31, 5,21,27, 5,27,83,
+ 6,46,32,15,31, 8, 4,26,83, 6,46,40, 5,28, 8, 5,27,88, 5,27,85, 5,27,87,
+ 5,27,90, 5,28, 3, 5,27,93, 6,46,41, 6,46,30, 6,46,35, 5,27,86, 5,28, 7,
+ 6,46,34, 6,46,43, 6,46,42, 5,27,92, 6,46,31, 5,27,89, 5,28, 1, 6,46,45,
+ 6,46,36, 6,46,37, 0, 0, 0, 6,55,78, 5,28, 5, 5,27,94, 6,55,88, 5,28, 4,
+ 6,46,44, 6,46,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,28, 2, 5,27,82,
+ 6,46,33,15,31, 5,15,31, 6,15,31, 7,15,31, 9, 0, 0, 0, 0, 0, 0, 4,26,87,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,55,80, 6,55,79, 4,32,58, 4,32,60, 6,55,84, 4,32,52, 5,34,56, 5,34,59,
+ 5,34,54, 4,32,49, 4,32,51, 5,34,60, 5,34,62, 5,34,58, 5,34,55, 4,32,62,
+ 4,32,48, 6,55,82, 0, 0, 0, 6,55,83, 6,55,76, 6,55,77, 6,65,72, 6,55,81,
+ 6,55,85, 5,34,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,37,18,
+ 15,37,19,15,37,20,15,37,21,15,37,22,15,37,23,15,37,24,15,37,25, 6,55,86,
+ 7,41,75, 0, 0, 0, 0, 0, 0, 6,55,87,
+ /* plane 2, page 115 */
+ 1, 255, /* first, last */
+ 6,55,89, 0, 0, 0, 5,41,49, 5,41,54, 5,41,59, 5,41,55, 5,41,60,
+ 4,39, 1, 5,41,53, 4,38,93, 6,66, 3, 5,41,63, 4,38,87, 5,41,57, 4,38,84,
+ 6,65,86, 6,65,74, 6,65,85, 4,39, 2, 5,41,62, 6,65,75, 6,65,81, 5,41,52,
+ 6,65,92, 5,41,61, 5,41,56, 6,65,91, 6,66, 1, 5,41,64, 0, 0, 0, 6,65,84,
+ 6,65,93, 6,65,77, 5,41,65, 5,41,66, 6,65,82, 0, 0, 0, 6,66, 2, 5,41,58,
+ 6,65,76, 6,65,89, 6,65,90, 6,65,80, 5,41,50, 6,65,78, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,41,51, 6,65,83,15,44,13,15,44,14,
+ 15,44,16,15,44,17,15,44,18, 6,65,88, 0, 0, 0, 4,32,56, 0, 0, 0, 6,65,94,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,65,79, 4,45,13, 7, 8,35, 5,48,51, 4,45,14, 4,45,11, 7, 8,24,
+ 4,45,20, 5,48,63, 7, 8,23, 7, 8,12, 5,48,49, 7, 8,11, 7, 8,21, 7, 8,31,
+ 5,48,55, 4,45,18, 4,45,10, 7, 8,32, 7, 8,20, 5,48,54, 7, 8,27, 7, 8,17,
+ 7, 8,30, 5,55,78, 4,45,12, 4,45, 9, 5,48,60, 5,48,58, 5,48,48, 5,48,57,
+ 5,48,56, 7, 8,10, 5,48,59, 4,38,90, 5,48,50, 5,48,62, 5,48,61, 4,45,21,
+ 7, 8,38, 7, 8,16, 7, 8,13, 7, 8,36, 7, 8,25, 7, 8,37, 7, 8,28, 7, 8,15,
+ 6,65,87, 7, 8,22, 7, 8,29, 5,48,52, 4,45, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,48,47,15,49,90,15,49,91,15,49,94,15,50, 1,15,50, 2,15,50, 3,15,50, 5,
+ 15,50, 8,15,50, 9,15,50,10,15,50,11, 7, 8,19, 0, 0, 0, 0, 0, 0, 7, 8,33,
+ 7, 8,26, 0, 0, 0,15,50, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,18,15,44,15,
+ 0, 0, 0, 5,55,80, 4,51,37, 5,55,86, 5,55,85, 4,51,26, 5,55,84, 0, 0, 0,
+ 5,55,81, 7,18,78, 7,18,93, 5,55,87, 4,51,40, 5,55,91, 4,51,41, 4,51,32,
+ 4,51,34, 5,55,92, 7,18,77, 4,51,27, 7,18,71, 4,51,31, 7,18,92, 5,55,89,
+ 5,55,79, 5,56, 1, 5,55,82, 7,27,26, 5,55,88, 7,18,73, 4,51,38, 5,55,90,
+ 7,18,80, 7,19, 2, 5,55,83, 7,18,68, 5,55,94, 7,18,84, 4,51,39, 5,48,64,
+ 7,18,75, 7,18,69, 5,55,93, 7,18,86, 4,51,35, 7,18,91, 7,19, 4, 7,18,66,
+ 7,18,87, 7,18,67, 7,18,88, 7,18,79, 7,18,94, 7,18,82, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,18,72, 7,19, 3,15,55,64,15,55,65,
+ 15,55,67,15,55,68,15,55,69,15,55,70, 7,18,89, 0, 0, 0, 7,18,74, 0, 0, 0,
+ 7,18,90, 7,18,81, 7,18,70, 0, 0, 0, 7,18,76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,56,57, 5,62, 9, 5,62,12, 4,56,53, 7,27,50, 7,27,36, 4,56,64, 4,56,60,
+ /* plane 2, page 116 */
+ 0, 255, /* first, last */
+ 7,27,40, 7,27,34, 7,27,53, 0, 0, 0, 4,56,62, 7,27,38, 7, 8,39, 4,56,48,
+ 5,62,17, 7,27,48, 7,27,31, 4,56,61, 7,27,47, 5,62,11, 5,62,15, 7,27,51,
+ 4,56,58, 7,27,39, 7,27,33, 5,62,19, 4,56,51, 7,27,32, 4,56,49, 7,27,30,
+ 7,27,52, 5,62,10, 7,27,28, 7,27,27, 7,27,41, 4,56,59, 5,62,13, 5,62,14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,27,37,15,60,52,15,60,53,15,60,54,15,60,55,
+ 15,60,56,15,60,57,15,60,58,15,60,60, 0, 0, 0, 7,27,35, 7,27,43, 7,27,46,
+ 0, 0, 0, 7,27,49, 0, 0, 0, 7,27,29, 5,62, 8, 7,27,42, 7,27,44, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,62,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,61,29, 4,61,23, 7,34,53, 7,34,65,
+ 7,34,56, 7,34,72, 5,68,35, 5,68,36, 5,62,20, 4,61,24, 5,68,48, 7,34,57,
+ 4,61,22, 5,68,37, 4,61,21, 4,61,26, 5,68,31, 5,68,34, 5,68,45, 4,61,20,
+ 5,68,42, 7,34,54, 5,68,30, 0, 0, 0, 5,68,33, 5,68,43, 7,34,55, 7,34,60,
+ 7,34,59, 5,68,32, 7,34,79, 7,34,75, 5,68,47, 7,34,78, 5,68,41, 5,68,44,
+ 7,34,73, 5,68,38, 7,34,76, 5,68,39, 7,34,69, 7,34,66, 7,34,61, 7,34,67,
+ 7,34,52, 7,34,58, 7,34,51, 7,34,62, 7,34,74, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,34,70,15,64,66,15,64,68,15,64,69,15,64,70,15,64,72,15,64,73,15,64,74,
+ 0, 0, 0, 7,34,68, 4,61,28, 7,34,71,15,64,71, 0, 0, 0,15,64,65, 0, 0, 0,
+ 5,68,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,65, 8, 7,41,74,
+ 7,41,57, 7,41,64, 7,41,76, 7,41,58, 7,41,73, 7,41,77, 4,65, 3, 5,73,34,
+ 5,73,32, 0, 0, 0, 7,41,66, 7,41,71, 7,41,69, 5,73,36, 7,41,61, 7,41,72,
+ 0, 0, 0, 7,41,68, 7,41,70, 7,47,75, 7,41,65, 7,41,78, 7,41,79, 7,41,67,
+ 5,73,37, 7,41,60, 7,41,63, 7,41,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,67,75,15,67,76,15,67,77,15,67,79,15,67,80,15,67,81,
+ 15,67,82,15,67,83,15,67,84,15,67,85, 7,41,59, 4,65, 2, 4,65, 7, 7,41,62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,34,80, 7,47,85, 7,47,90, 5,77,45, 7,47,76, 0, 0, 0, 4,68,34, 5,77,44,
+ 5,77,49, 7,47,88, 7,47,80, 5,77,48, 7,47,84, 5,77,50, 5,77,51, 7,47,83,
+ 5,77,46, 7,47,82, 7,47,87, 7,47,81, 7,47,77, 5,77,47, 7,47,79, 7,52,87,
+ 0, 0, 0, 7,47,78, 7,47,91,15,70,13,15,70,14,15,70,15,15,70,16,15,70,17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,86, 4,71,15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4,71,20, 7,52,75, 7,52,80, 5,81,15, 7,52,85, 7,52,78, 7,52,81,
+ 5,81,14, 7,52,83, 5,81,13, 5,81,16, 7,52,76, 4,71,19, 7,52,79, 4,71,21,
+ /* plane 2, page 117 */
+ 0, 255, /* first, last */
+ 4,71,17, 7,52,82, 5,81,18, 7,52,88, 7,47,89, 0, 0, 0, 7,52,84, 4,71,18,
+ 7,52,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,81,17, 5,81,19,
+ 7,52,86,15,72,37,15,72,38,15,72,39,15,72,40,15,72,41, 0, 0, 0, 0, 0, 0,
+ 7,52,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84,14, 4,73,28, 5,84,12,
+ 5,84,11, 7,57, 3, 7,56,92, 5,84,13, 5,84,17, 5,84,16, 7,56,90, 5,84,19,
+ 5,84,21, 0, 0, 0, 5,84,18, 7,56,89, 4,73,29, 0, 0, 0, 7,57, 6, 7,57, 8,
+ 7,57, 7, 7,56,94, 7,57, 1, 5,84,20, 5,84,22, 7,57, 4, 7,57, 9, 5,84,15,
+ 0, 0, 0, 0, 0, 0, 7,56,93, 0, 0, 0, 0, 0, 0, 7,56,91, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,73,77,15,73,78, 5,86,38, 4,74,86, 4,74,87, 7,60,61, 5,86,39,
+ 4,74,89, 7,60,63, 7,60,60, 5,86,40, 7,60,66, 5,86,37, 7,63,42, 7,60,64,
+ 4,74,90, 7,60,65, 5,86,42, 0, 0, 0, 7,57, 2, 5,86,41,15,74,80,15,74,81,
+ 15,74,82, 0, 0, 0, 0, 0, 0, 5,88,12, 7,63,43, 4,75,94, 5,88,11, 5,88, 9,
+ 7,63,44, 5,88, 6, 4,76, 2, 7,63,45, 5,88,10, 5,88, 8, 4,76, 4, 5,88,13,
+ 5,88, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,89,36, 4,76,94,
+ 5,89,40, 5,89,42, 4,76, 1, 7,65,32, 5,89,38, 7,65,36, 7,65,35, 7,65,37,
+ 5,89,39, 5,89,41, 7,65,33, 0, 0, 0, 5,89,37, 7,66,61, 7,66,59, 7,66,62,
+ 7,66,60, 0, 0, 0, 7,66,63, 0, 0, 0, 7,67,78, 7,67,76, 5,90,83, 7,67,75,
+ 7,67,79, 0, 0, 0, 7,66,58, 7,67,73, 7,67,81, 7,67,74, 7,67,80, 7,67,77,
+ 0, 0, 0, 7,68,60, 4,78,26, 7,68,61, 5,91,39, 5,91,40, 7,68,58, 7,68,59,
+ 5,91,71, 7,69,33, 7,69,34, 5,91,72, 4,78,48, 7,69,66, 7,69,65,15,77,17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,70,11, 0, 0, 0, 0, 0, 0, 5, 7,69,
+ 6,14, 7, 6,14, 6, 4,11,36, 6,27,82, 5,16,21, 6,27,85, 0, 0, 0, 6,27,84,
+ 0, 0, 0, 0, 0, 0,15,24,33, 6,46,46, 6,46,48, 5,34,63, 6,55,92, 6,55,90,
+ 6,55,93, 6,55,91, 5,41,69, 5,41,67, 5,41,68, 6,66, 6, 6,66, 4, 0, 0, 0,
+ 7, 8,40, 5,48,65, 7, 8,41, 7, 8,42, 6,66, 5, 0, 0, 0, 5,56, 3, 5,56, 4,
+ 5,56, 2, 7,19, 5, 7,19, 6, 5,62,23, 5,62,22,15,60,61, 4,61,30, 4,61,31,
+ 7,34,81, 7,34,83, 4,61,32, 0, 0, 0, 7,34,82, 5,73,38, 5,77,52, 7,47,92,
+ 7,52,90, 7,57,11, 7,57,10, 7,63,46, 7,69,67, 4, 8, 3, 6,14, 8, 4, 8, 4,
+ 0, 0, 0, 6,20,47, 6,20,48, 5,11,33, 0, 0, 0,15,13,37, 5,16,22, 6,27,87,
+ 6,27,86, 5,16,23, 6,36,47, 5,28, 9, 6,46,51, 6,46,50,15,31,10,15,31,11,
+ 0, 0, 0, 6,46,49, 6,56, 3, 6,56, 1, 4,32,63, 6,56, 2, 6,55,94,15,37,26,
+ 4,39, 4, 5,48,66, 6,66, 7, 6,66, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,56,65,
+ /* plane 2, page 118 */
+ 0, 255, /* first, last */
+ 7,27,54,15,60,62, 4,61,33, 7,34,84, 7,41,80, 7,52,91, 7,60,68, 0, 0, 0,
+ 5, 7,70, 6,14, 9, 6,14,10, 6,14,11, 0, 0, 0, 5,11,35, 6,20,49, 4,11,37,
+ 4,11,39, 5,11,37, 6,20,51, 5,11,36, 0, 0, 0, 0, 0, 0,15, 8,75, 0, 0, 0,
+ 0, 0, 0, 6,20,50, 5,11,34, 0, 0, 0, 5,11,38, 6,27,93, 5,16,28, 4,15,81,
+ 6,28, 1, 6,28, 5, 5,16,31, 6,28, 6, 6,28, 7, 4,15,80, 6,27,89, 5,16,32,
+ 6,27,91, 5,16,24, 6,28, 2, 6,27,92, 6,28, 3, 6,27,94, 5,16,27, 6,27,90,
+ 6,27,88, 0, 0, 0, 0, 0, 0, 5,16,26,15,18,48, 6,28, 4, 6,28, 8, 6,28, 9,
+ 0, 0, 0, 0, 0, 0,15,13,40,15,13,41,15,18,50, 4,21, 8, 5,28,18, 0, 0, 0,
+ 4,21,11, 4,26,92, 5,21,38, 4,21, 9, 6,36,56, 5,21,39, 5,21,42, 5,21,36,
+ 5,21,37, 5,21,35, 6,36,57, 6,36,58, 5,21,34, 6,36,51, 6,36,53, 6,36,52,
+ 6,36,49, 6,36,48, 6,36,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,36,50,15,13,38,15,24,37, 5,21,40, 6,36,54, 5,21,41, 5,28,17, 6,46,59,
+ 6,46,57, 5,28,14, 6,46,55, 5,28,15, 5,28,19, 4,26,94, 0, 0, 0, 6,46,56,
+ 6,46,52, 4,26,93, 6,46,54, 5,28,16, 5,28,13, 5,28,11, 5,34,68, 5,28,10,
+ 0, 0, 0, 0, 0, 0,15,24,36,15,31,14, 0, 0, 0, 6,46,53, 0, 0, 0, 6,46,58,
+ 0, 0, 0, 6,46,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,28,12,15,24,35,
+ 5,34,74, 5,34,66, 5,34,70, 4,32,69, 5,34,75, 5,34,67, 5,34,71, 4,32,67,
+ 5,34,69, 5,34,73, 6,56,15, 4,32,68, 6,56,10, 6,56, 8, 6,56,16, 5,34,72,
+ 5,34,64, 6,56, 4, 6,56, 7, 0, 0, 0, 0, 0, 0, 6,56,13,15,31,12,15,31,13,
+ 15,31,15,15,31,16,15,37,27, 6,56, 6, 6,56,17, 6,56, 5, 6,56, 9, 0, 0, 0,
+ 0, 0, 0, 5,34,65, 0, 0, 0,15,37,30, 4,39,16, 4,39,12, 6,66,13, 6,66,19,
+ 4,39, 9, 5,41,70, 5,41,73, 4,39, 8, 5,41,72, 5,28,20, 6,66,20, 5,41,74,
+ 6,66,11, 6,66, 9, 6,66,10, 6,66,18, 6,66,17, 5,41,71, 6,66,15, 5,41,75,
+ 6,66,16, 6,66,12, 4,39,19, 0, 0, 0, 6,66,21, 6,66,14,15,44,20,15,44,22,
+ 15,44,23, 0, 0, 0, 0, 0, 0, 4,39,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,37,28,15,37,31, 5,48,70,
+ 7, 8,52, 4,45,33, 5,48,73, 7, 8,55, 4,39,18, 7, 8,54, 5,48,69, 4,45,24,
+ 7, 8,53, 7,19, 8, 5,48,71, 7, 8,58, 7, 8,43, 4,45,37, 4,45,27, 4,45,29,
+ 7, 8,51, 4,45,36, 4,45,35, 5,48,67, 7, 8,56, 7, 8,50, 7, 8,44, 5,48,68,
+ 7, 8,47, 5,48,72, 7, 8,49, 7, 8,48, 7, 8,45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,44,21,15,50,13, 7, 8,46, 7, 8,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,56,12, 5,56,11, 7,19,11, 5,56, 7, 5,56,10, 7,19, 7, 4,51,49, 7,19, 9,
+ /* plane 2, page 119 */
+ 0, 255, /* first, last */
+ 4,51,52, 7,27,66, 5,56, 9, 5,56, 8, 7,19,10, 4,51,46, 7,19,12, 7,19,15,
+ 4,51,45, 0, 0, 0, 5,56, 5, 7,19,16, 0, 0, 0, 5,56, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,19,14,15,50,12, 0, 0, 0, 0, 0, 0, 7,19,13, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,62,30, 5,62,31, 7,27,55,
+ 5,62,27, 7,27,61, 7,27,68, 4,56,70, 5,62,24, 5,62,25, 5,62,29, 5,62,28,
+ 0, 0, 0, 7,27,63, 0, 0, 0, 7,27,59, 7,27,67, 7,34,91, 7,27,60, 7, 8,59,
+ 7,27,62, 7,27,64, 5,62,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,27,56,
+ 7,27,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,62,26,15,55,71,15,55,72,
+ 15,55,73,15,55,74, 7,34,85, 4,61,37, 7,34,92, 7,34,94, 5,68,59, 5,68,55,
+ 7,34,93, 4,61,43, 5,68,52, 5,68,53, 5,68,63, 4,61,45, 0, 0, 0, 4,61,34,
+ 7,34,90, 5,68,51, 4,61,39, 4,61,44, 5,68,61, 7,34,89, 7,34,87, 5,68,49,
+ 4,61,35, 5,62,34, 5,68,50, 7,34,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,35, 3, 7,34,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,68,57, 5,68,58, 5,62,33, 5,68,60, 5,68,62, 5,68,56,
+ 15,60,64, 7,41,86, 5,73,41, 5,73,42, 4,65, 9, 7,41,91, 7,41,92, 5,73,39,
+ 5,73,40, 7,41,82, 7,41,83, 7,41,85, 7,41,89, 7,41,90, 7,41,84, 7,41,88,
+ 4,65,11, 7,41,87, 7,35, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,64,75,15,64,76,
+ 15,67,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,93, 5,77,56, 7,48, 6, 5,77,59,
+ 5,81,20, 0, 0, 0, 5,77,53, 4,68,37, 7,48, 3, 5,77,54, 7,48, 2, 7,52,92,
+ 0, 0, 0, 7,47,94, 0, 0, 0, 5,77,57, 7,41,81, 5,77,58, 5,77,60, 7,48, 4,
+ 0, 0, 0,15,70,20, 7,48, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,77,61, 7,53, 2,
+ 7,53, 4, 5,81,22, 4,71,22, 7,53, 6, 7,53, 5, 5,81,21, 7,52,94, 7,53, 1,
+ 4,71,23, 7,53, 3, 7,57,17, 7,52,93, 0, 0, 0,15,70,19, 4,73,33, 7,57,14,
+ 4,73,32, 4,73,31, 5,84,23, 7,57,12, 7,57,13, 7,57,16, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,57,15, 5,88,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,73,79,
+ 7,63,49, 7,63,48, 7,63,47, 0, 0, 0, 5,89,43, 7,65,40, 7,65,39, 7,65,38,
+ 7,66,65, 5,90,23, 7,66,66, 0, 0, 0, 7,66,64, 7,68,63, 7,67,83, 7,67,82,
+ 7,68,62, 5,91,94, 7,69,68, 7,70,12, 0, 0, 0, 0, 0, 0, 5,92,43, 7,70,45,
+ 0, 0, 0, 5, 4,86, 0, 0, 0, 6,14,12, 0, 0, 0, 0, 0, 0, 4,11,40, 5,16,33,
+ 4,15,84, 6,28,10, 6,36,59,15,24,38, 0, 0, 0,15,31,17,15,31,18, 6,56,18,
+ 0, 0, 0, 4,39,20, 6,66,22, 6,66,23, 6,66,24, 0, 0, 0, 0, 0, 0,15,44,24,
+ 15,44,25, 7, 8,60,15,44,26,15,50,16, 7,19,17, 7,19,18,15,50,15, 7,27,69,
+ /* plane 2, page 120 */
+ 0, 254, /* first, last */
+ 15,64,77,15,64,78, 5,73,43, 7,48, 7, 7,53, 7, 0, 0, 0, 5, 7,71, 6,14,13,
+ 0, 0, 0, 4,15,87, 0, 0, 0, 5,16,34,15,18,51, 0, 0, 0, 5,21,45, 5,21,46,
+ 6,36,60, 6,36,61, 5,21,48, 5,21,43, 0, 0, 0,15,24,39,15,24,41,15,24,43,
+ 4,21,18, 4,21,22, 5,21,44, 5,21,47, 6,46,63, 4,27, 5, 6,46,66, 6,46,65,
+ 5,28,22, 6,46,62, 4,27, 4, 6,46,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,56,22, 5,34,77, 5,34,79, 5,34,78, 0, 0, 0, 6,56,19, 6,56,23, 0, 0, 0,
+ 5,34,80,15,37,32,15,37,33,15,37,34, 0, 0, 0, 6,56,21, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,66,25, 5,41,81, 5,41,78, 5,41,82, 4,39,23,
+ 6,66,26, 0, 0, 0, 0, 0, 0,15,44,27,15,44,28, 5,41,79, 6,66,27, 0, 0, 0,
+ 5,41,80, 0, 0, 0, 0, 0, 0, 4,45,41, 7, 8,63, 5,48,76, 4,45,43, 5,48,75,
+ 7, 8,67, 5,48,77, 6,56,20, 7, 8,66, 0, 0, 0, 5,48,74, 5,48,78,15,50,17,
+ 7, 8,64, 0, 0, 0, 0, 0, 0, 7, 8,62, 0, 0, 0, 7, 8,61, 0, 0, 0, 0, 0, 0,
+ 7, 8,65, 5,56,16, 5,56,15, 5,56,14, 4,51,55, 7,19,20, 5,56,20, 7,27,71,
+ 4,51,56, 4,51,62, 4,51,61, 5,56,17, 5,56,21, 7,19,19, 5,56,13, 5,56,19,
+ 0, 0, 0,15,55,75,15,55,76,15,55,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,27,70,
+ 5,68,64, 5,62,37, 5,62,36, 7,27,74, 0, 0, 0, 7,27,73, 7,27,75, 7,27,72,
+ 15,60,65,15,60,66, 5,68,66, 4,61,49, 4,61,47, 7,35, 4, 5,68,65, 0, 0, 0,
+ 15,64,79,15,64,80,15,64,81, 0, 0, 0, 0, 0, 0, 7,35, 5, 7,41,93, 7,41,94,
+ 0, 0, 0, 0, 0, 0, 5,77,63, 7,48, 9, 7,48, 8,15,70,21, 5,77,62, 0, 0, 0,
+ 15,72,43,15,72,44, 7,53, 8, 0, 0, 0, 4,73,35, 5,84,25, 4,73,34, 0, 0, 0,
+ 15,73,80,15,73,81, 5,88,15, 7,63,51,15,75,68, 7,63,50, 5,89,45, 5,89,44,
+ 7,65,41, 0, 0, 0, 0, 0, 0, 4,77, 1, 0, 0, 0, 5,90,84, 4,78,27, 5,92,36,
+ 0, 0, 0, 7,70,52, 6,14,14, 6,14,15, 6,20,52, 5,11,40, 0, 0, 0, 4,15,88,
+ 6,28,12, 4,15,89, 6,28,11, 6,36,71, 4,21,27, 5,21,51, 5,21,50, 6,36,63,
+ 6,36,67, 4,21,23, 6,36,68, 5,21,49, 6,36,64,15,24,45,15,24,46,15,24,47,
+ 4,21,28, 6,36,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,36,62, 6,36,66, 6,36,69,
+ 6,36,65, 5,28,23, 4,27, 6, 6,46,68, 6,46,71, 5,28,24, 6,46,67, 6,46,70,
+ 6,46,73, 6,46,69, 4,27, 7, 4,27, 8, 6,46,72, 0, 0, 0,15,31,19, 0, 0, 0,
+ 0, 0, 0, 5,34,83, 5,34,81, 5,34,82, 0, 0, 0, 6,56,24, 0, 0, 0, 0, 0, 0,
+ 6,66,30, 5,41,85, 4,39,25, 6,66,32, 5,41,83, 5,41,84, 6,66,29, 6,66,33,
+ 6,66,28, 6,66,31, 0, 0, 0, 0, 0, 0, 7, 8,70, 5,48,85, 7, 8,71, 5,48,84,
+ 5,48,80, 5,48,79, 4,45,48, 4,45,50, 4,45,45, 7, 8,73, 4,45,52,
+ /* plane 2, page 121 */
+ 3, 255, /* first, last */
+ 5,48,82, 7, 8,72, 7, 8,74, 5,48,81, 7, 8,68,
+ 7, 8,69, 5,48,83, 0, 0, 0, 7,19,24, 7,19,23, 4,51,63, 5,56,22, 4,51,67,
+ 5,56,25, 5,56,27, 4,51,64, 7,19,22, 7,19,21, 5,56,23, 5,56,24, 5,56,26,
+ 7,19,25, 0, 0, 0, 0, 0, 0, 5,62,38, 7,27,77, 7,27,83, 7,27,76, 5,62,42,
+ 5,62,41, 7,27,78, 7,19,26, 5,62,40, 0, 0, 0, 0, 0, 0, 7,27,79, 7,27,80,
+ 0, 0, 0, 7,27,81, 4,56,76, 7,27,84, 7,27,82, 0, 0, 0, 5,62,39, 7,35, 7,
+ 0, 0, 0, 7,35, 8, 4,61,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,35, 6, 7,35, 9,
+ 0, 0, 0, 0, 0, 0, 4,65,21, 5,73,44, 4,65,18, 4,65,19, 7,42, 1, 7,42, 2,
+ 7,42, 3, 7,42, 4, 4,65,22, 0, 0, 0, 7,48,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,81,23, 0, 0, 0, 7,53, 9, 0, 0, 0, 5,84,26, 4,73,36, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,60,69, 0, 0, 0, 5,88,16, 0, 0, 0, 7,66,67, 4,77,64, 7,68,64,
+ 7,68,65, 5,91,73, 7,69,35, 5, 3, 7, 5, 3, 8, 6,14,16, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,28,19, 4,16, 1, 4,15,91, 4,15,90, 4,16, 2, 5,16,35, 0, 0, 0,
+ 6,28,16, 6,28,17, 6,28,15, 6,28,18, 0, 0, 0, 6,28,14, 4,21,32, 6,36,74,
+ 6,36,83, 4,21,30, 0, 0, 0, 6,36,79, 5,21,60, 5,21,57, 0, 0, 0, 6,36,81,
+ 4,21,34, 5,21,52, 4,21,38, 6,36,89, 5,21,53, 6,36,87, 6,36,75, 6,36,88,
+ 5,21,56, 6,36,84, 6,36,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,36,78, 6,36,90,
+ 15,24,48,15,24,49,15,24,51,15,24,52,15,24,53,15,24,54, 0, 0, 0, 6,36,82,
+ 0, 0, 0, 0, 0, 0, 6,36,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,36,72,
+ 0, 0, 0, 6,36,86, 6,36,76, 5,21,58, 6,46,84, 4,27,18, 4,27,14, 5,28,27,
+ 6,46,79, 6,46,78, 6,46,81, 6,46,74, 4,27,13, 6,46,88, 4,27,24, 4,27,25,
+ 5,28,28, 6,46,77, 6,46,86, 6,46,80, 6,46,87, 4,27,23, 5,28,25, 5,28,26,
+ 15,31,20,15,31,21,15,31,22,15,31,23,15,31,24,15,31,25,15,31,26,15,31,28,
+ 0, 0, 0, 0, 0, 0, 6,46,82, 6,46,85, 0, 0, 0, 0, 0, 0, 6,46,76, 0, 0, 0,
+ 0, 0, 0, 6,46,89, 6,46,83, 0, 0, 0, 5,34,85, 4,32,72, 4,32,74, 0, 0, 0,
+ 6,56,38, 5,34,86, 5,28,29, 5,34,89, 4,32,81, 4,32,80, 6,56,32, 6,56,43,
+ 6,56,29, 6,56,41, 4,32,73, 4,32,75, 5,34,92, 5,34,84, 4,32,83, 6,56,35,
+ 6,56,28, 6,56,39, 6,56,34, 6,56,31, 4,32,82, 5,34,90, 6,56,40, 5,34,88,
+ 5,34,87, 6,56,36, 0, 0, 0, 0, 0, 0,15,37,35,15,37,37,15,37,38, 6,56,42,
+ 5,34,91, 0, 0, 0, 6,56,25, 6,56,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,32,79, 6,56,26, 6,56,37, 6,56,30, 6,66,46, 4,39,31, 5,41,90, 4,39,27,
+ 5,41,88, 5,41,91, 4,39,30, 4,39,40, 6,66,34, 6,66,44, 4,39,33, 6,66,51,
+ /* plane 2, page 122 */
+ 0, 255, /* first, last */
+ 4,39,36, 6,66,47, 4,39,39, 6,66,38, 5,41,89, 6,66,49, 6,66,37, 4,39,41,
+ 6,66,48, 6,66,36, 5,41,86, 5,41,87, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,44,29,
+ 15,44,30,15,44,31,15,44,32,15,44,34,15,44,35,15,44,36,15,44,37, 0, 0, 0,
+ 0, 0, 0, 6,66,40, 4,39,43, 6,66,42, 5,34,93, 6,66,43, 6,66,45, 0, 0, 0,
+ 6,66,35, 0, 0, 0, 0, 0, 0, 6,66,50, 6,66,41, 0, 0, 0, 7, 9, 1, 5,49,10,
+ 7, 8,75, 5,48,90, 5,49, 2, 7, 8,81, 7, 8,84, 7, 9, 2, 7, 8,92, 7, 8,80,
+ 5,49, 7, 4,45,55, 5,49, 9, 5,49, 3, 5,48,91, 5,48,94, 7, 8,88, 5,49, 4,
+ 4,45,61, 5,49, 6, 4,45,66, 7, 9, 4, 7, 8,87, 7, 8,79, 5,48,88, 5,48,92,
+ 7, 8,93, 0, 0, 0, 7, 8,77, 5,49, 5, 5,48,93, 5,48,87, 5,48,89, 5,48,86,
+ 0, 0, 0,15,50,18,15,50,19,15,50,20,15,50,21,15,50,23,15,50,25,15,50,26,
+ 7, 8,86, 7, 8,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,76, 0, 0, 0,
+ 7, 8,82,15,50,24, 5,49, 1, 7, 8,91, 7, 8,78, 5,49, 8, 7, 9, 3, 7, 8,94,
+ 7, 8,90, 7, 8,83, 7,19,38, 5,56,32, 4,51,81, 7,19,50, 4,51,72, 4,51,69,
+ 4,51,76, 7,19,41, 7,19,49, 7,19,35, 5,56,29, 7,19,34, 5,56,28, 7,19,28,
+ 0, 0, 0, 4,51,80, 4,51,71, 7,19,37, 4,51,79, 7,19,29, 4,51,78, 7,19,39,
+ 7,19,46, 4,51,70, 7,19,48, 7,19,30, 4,51,73, 7,19,27, 7,19,51, 7,19,32,
+ 7,19,31, 7,19,40, 7,19,42, 5,56,31, 7,19,44, 4,51,77, 7,19,36, 5,56,30,
+ 15,55,78,15,55,79,15,55,80,15,55,81,15,55,82,15,55,83,15,55,84,15,55,85,
+ 15,55,86,15,55,87,15,55,88, 0, 0, 0, 7,19,52, 0, 0, 0, 7,19,33, 7,19,43,
+ 4,56,78, 5,62,50, 5,62,49, 7,27,93, 4,56,79, 5,62,52, 4,56,81, 7,27,89,
+ 4,56,77, 5,62,45, 5,62,51, 5,62,46, 7,27,86, 7,28, 5, 4,56,82, 7,35,10,
+ 5,62,47, 7,28, 1, 7,27,87, 5,62,54, 7,28, 7, 7,27,92, 7,27,88, 5,62,48,
+ 4,56,84, 7,27,91, 7,27,94, 7,28, 2, 7,28, 3, 4,56,83, 5,62,43, 7,28, 6,
+ 0, 0, 0, 5,62,44, 7,28, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,27,85,
+ 15,60,67,15,60,68,15,60,69,15,60,70,15,60,71,15,60,72,15,60,73,15,60,74,
+ 15,60,75, 0, 0, 0, 0, 0, 0, 7,28, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28, 9,
+ 7,27,90, 0, 0, 0, 4,61,62, 4,61,54, 7,35,23, 4,61,56, 7,35,21, 5,68,72,
+ 7,35,26, 7,35,11, 4,61,64, 5,68,70, 5,56,33, 4,61,57, 5,68,71, 7,35,24,
+ 7,35,18, 5,68,68, 4,61,51, 7,35,27, 4,61,53, 5,68,69, 4,61,61, 7,35,25,
+ 7,35,15, 7,35,19, 7,42,10, 7,35,16, 4,61,60, 7,35,20, 7,35,17, 7,35,28,
+ 7,35,12, 0, 0, 0, 7,35,13, 0, 0, 0, 0, 0, 0,15,64,82,15,64,85, 0, 0, 0,
+ 7,35,22, 0, 0, 0, 4,61,63, 0, 0, 0, 0, 0, 0, 7,35,14, 5,73,45, 5,73,47,
+ /* plane 2, page 123 */
+ 0, 255, /* first, last */
+ 7,42,15, 0, 0, 0, 4,65,30, 7,42,12, 7,42,14, 4,65,35, 4,65,25, 5,73,48,
+ 4,65,33, 7,42,20, 4,65,34, 5,73,46, 4,65,31, 7,42, 6, 7,42, 9, 7,35,29,
+ 7,42, 8, 7,42,21, 7,48,19, 7,42,19, 0, 0, 0, 4,65,28, 5,77,64, 7,42, 7,
+ 0, 0, 0,15,67,88,15,67,89,15,67,90, 4,65,36, 7,42,11, 0, 0, 0, 7,48,21,
+ 7,42,16, 7,42,17, 7,42,13, 7,42,18, 4,65,24,15,64,84, 0, 0, 0, 4,68,42,
+ 4,68,43, 5,77,66, 5,77,65, 7,48,13, 5,77,67, 7,48,15, 4,68,41, 7,48,11,
+ 5,73,51, 7,48,18, 7,48,14, 7,48,20, 7,48,22, 7,48,12, 7,48,16, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,70,22,15,70,23,15,70,24,15,70,25, 7,48,24,
+ 7,48,23, 7,48,25, 7,53,10, 4,71,34, 7,53,20, 7,53,13, 7,53,19, 0, 0, 0,
+ 4,71,24, 7,53,14, 5,81,29, 7,53,12, 7,53,15, 4,71,28, 5,81,26, 5,81,25,
+ 4,71,35, 7,57,27, 7,57,21, 4,71,26, 5,81,28, 5,81,27, 7,53,17, 0, 0, 0,
+ 7,53,11, 7,53,16, 5,81,24, 7,53,21, 5,84,27, 5,84,29, 5,84,32, 5,86,43,
+ 4,73,39, 7,57,25, 4,73,42, 5,84,31, 4,73,41, 5,84,30, 0, 0, 0, 7,57,23,
+ 7,57,32, 7,53,22, 5,84,28, 7,57,22, 7,57,26, 7,57,31, 4,73,38, 7,57,30,
+ 15,73,82,15,73,83,15,73,84, 0, 0, 0, 7,57,28, 0, 0, 0, 0, 0, 0, 7,57,29,
+ 4,74,93, 4,74,94, 7,60,70, 5,86,46, 5,86,45, 5,88,17, 7,60,72, 7,60,73,
+ 7,60,74,15,74,84,15,74,85, 7,60,71, 7,57,34, 7,63,55, 7,63,56, 7,63,53,
+ 4,76, 7, 7,63,54, 7,63,58,15,75,69,15,75,70, 0, 0, 0, 7,63,52, 7,63,57,
+ 7,63,59, 4,77, 3, 7,65,43, 5,89,46, 7,65,44,15,76,26,15,76,27, 0, 0, 0,
+ 7,65,42, 5,90,85, 7,66,69, 7,66,68, 0, 0, 0, 5,90,25, 4,77,94, 7,67,84,
+ 0, 0, 0, 0, 0, 0, 7,68,66, 4,78,28, 0, 0, 0, 7,68,36, 0, 0, 0, 0, 0, 0,
+ 7,69,36, 7,70,48, 0, 0, 0, 5, 4,87, 4,16, 4, 5,16,36, 5,16,37, 4,21,40,
+ 4,21,41, 4,21,39, 6,36,91, 4,27,26, 0, 0, 0, 5,34,94, 5,35, 1, 6,56,44,
+ 4,39,45, 0, 0, 0, 5,49,12, 4,45,67, 5,49,13, 5,49,11, 0, 0, 0, 0, 0, 0,
+ 5,56,34, 7,19,54, 7,19,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28,10, 0, 0, 0,
+ 0, 0, 0, 5,62,55, 7,35,30, 7,42,22, 7,42,25, 5,73,52, 7,42,23, 5,73,53,
+ 7,42,24, 0, 0, 0, 0, 0, 0, 7,48,26, 7,42,26, 5,81,30, 0, 0, 0, 0, 0, 0,
+ 5,90,86, 7,69,87, 6,20,53, 6,28,21, 6,28,20, 0, 0, 0, 0, 0, 0,15,24,55,
+ 4,27,27, 5,28,30, 6,46,91,15,31,29, 0, 0, 0, 5,35, 2, 4,32,85, 6,59,63,
+ 0, 0, 0, 4,39,48, 6,66,52, 4,39,49, 0, 0, 0, 7, 9, 8, 7, 9, 7, 7, 9, 5,
+ 5,49,15, 5,49,14, 0, 0, 0, 7, 9, 6,15,50,27, 0, 0, 0, 0, 0, 0, 5,56,35,
+ 4,51,84, 7,19,55, 5,56,36, 7,12,54, 5,62,58, 7,28,13, 5,62,56, 7,28,12,
+ /* plane 2, page 124 */
+ 0, 254, /* first, last */
+ 5,62,57, 7,28,11, 0, 0, 0, 5,68,73, 4,61,67, 7,35,32, 4,61,66, 5,62,59,
+ 0, 0, 0, 7,42,28, 5,73,55, 7,42,29, 7,35,33, 7,35,34, 0, 0, 0, 0, 0, 0,
+ 5,73,54, 5,77,70, 5,77,69, 5,77,71,15,70,26, 5,77,68,15,67,91, 0, 0, 0,
+ 5,81,31, 5,84,33, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,74,86,15,74,87, 0, 0, 0,
+ 5,88,18, 5,89,47, 0, 0, 0, 5,90,87, 0, 0, 0, 7,69,37, 0, 0, 0, 6, 5,52,
+ 5, 3, 9, 5,11,42, 5,16,40, 5,16,39, 6,28,23, 6,28,22, 6,36,94, 6,36,92,
+ 5,21,65, 0, 0, 0, 6,37, 1, 0, 0, 0, 6,36,93, 4,27,28, 6,46,92, 4,27,29,
+ 5,28,32, 5,28,31, 6,46,94, 5,28,33, 6,47, 3, 6,46,93,15,18,53, 4,32,87,
+ 5,35, 5, 4,32,86, 6,56,46, 6,56,47, 5,35, 7, 5,35, 3, 5,35, 6, 6,56,45,
+ 6,47, 2, 5,35, 4, 5,35, 8, 0, 0, 0, 0, 0, 0, 6,66,53, 6,66,54, 4,39,51,
+ 4,39,50, 6,66,57, 5,41,93, 5,41,92, 6,66,59, 6,66,58, 6,66,55, 6,66,56,
+ 5,49,18, 4,45,70, 7, 9, 9, 7, 9,11, 5,49,17, 5,49,19, 7, 9,13, 7, 9,12,
+ 5,41,94, 5,49,16, 7, 9,10, 5,42, 1, 7, 9,14,15,50,28, 0, 0, 0, 0, 0, 0,
+ 5,56,39, 5,56,40, 5,56,38, 7,19,57, 4,51,86, 7,19,58, 7,19,60, 7,19,59,
+ 5,56,37, 7,19,56, 5,62,61, 5,62,62, 5,62,63, 5,62,60, 7,28,16, 7,28,14,
+ 7,28,15, 0, 0, 0, 0, 0, 0, 4,61,69, 5,68,74, 0, 0, 0, 5,68,75, 7,35,35,
+ 7,35,36, 7,35,37, 4,65,39, 5,73,56, 5,56,41, 7,42,30, 4,65,41, 5,77,75,
+ 5,77,72, 7,48,27, 5,77,74, 5,77,73, 4,71,38, 5,81,32, 7,53,23, 7,53,24,
+ 7,57,35, 7,60,76, 7,57,36, 7,57,37, 7,60,77, 7,60,78, 0, 0, 0, 5,84,34,
+ 7,63,60, 0, 0, 0, 7,65,45, 7,63,61, 5,89,48, 5,90,26, 7,69,38, 7,70,35,
+ 15, 8,76, 5,11,43, 6,28,24,15,18,54, 5,21,68, 5,21,67, 4,21,47, 5,21,66,
+ 4,21,46, 6,37, 5, 6,37, 3, 0, 0, 0, 6,47, 5, 5,28,34, 5,28,38, 5,28,36,
+ 5,28,40, 5,28,37, 6,47, 8, 6,47, 6, 5,28,39, 5,28,35, 6,47, 7, 6,47, 4,
+ 0, 0, 0,15,31,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,32,92, 4,32,93,
+ 4,32,90, 6,56,50, 5,35,11, 6,56,49, 5,35,10, 4,32,89, 4,32,91, 6,56,51,
+ 15,37,39, 5,35, 9, 6,66,65, 6,66,60, 5,42, 5, 5,42, 3, 5,42, 2, 6,66,63,
+ 5,42, 4, 6,66,62, 6,66,64,15,44,40, 6,66,61, 0, 0, 0, 6,66,66,15,44,41,
+ 0, 0, 0, 5,49,21, 5,49,20, 4,45,73, 5,49,23, 5,49,22, 5,49,24, 4,45,74,
+ 7, 9,15, 7, 9,16, 4,45,75, 0, 0, 0, 0, 0, 0, 7, 9,17, 7,19,68, 5,56,43,
+ 7,19,62, 7,19,64, 7,19,65, 4,51,88, 5,56,42, 7,19,66, 5,56,44, 7,19,63,
+ 0, 0, 0,15,55,90, 7,19,61, 7,19,67, 0, 0, 0, 4,56,89, 5,62,67, 7,28,17,
+ 5,62,66, 4,56,88, 5,62,64, 5,62,68, 5,62,65, 0, 0, 0,15,60,76,
+ /* plane 2, page 125 */
+ 1, 255, /* first, last */
+ 7,35,38, 4,61,71, 7,35,39, 4,61,70, 5,68,76, 7,42,31, 5,68,77,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,73,59, 7,42,32, 5,73,58, 7,42,35,
+ 7,48,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,42,34, 5,73,57, 5,77,77, 5,77,76,
+ 7,48,28, 5,81,34, 5,77,78, 0, 0, 0, 0, 0, 0, 5,81,33, 7,53,25, 7,57,38,
+ 7,60,80, 7,60,79, 0, 0, 0, 5,90,88, 5,11,44, 4,11,42, 6,20,54, 0, 0, 0,
+ 15,13,42, 0, 0, 0, 4,16, 6, 6,28,25, 5,16,41, 5,16,42, 0, 0, 0, 0, 0, 0,
+ 15,18,55,15,18,56, 6,28,26, 6,37,10, 0, 0, 0, 6,37,12, 6,37, 7, 6,37, 8,
+ 6,37, 6, 6,37,11, 5,21,69,15,24,57,15,24,58,15,24,59,15,24,60,15,24,61,
+ 15,24,62,15,24,63,15,24,64, 0, 0, 0, 6,37,13, 4,21,51, 0, 0, 0, 6,37, 9,
+ 4,21,50, 6,47,11, 4,27,32, 5,28,41, 5,28,43, 6,47,14, 6,47,12, 6,47,13,
+ 6,56,55, 5,28,42, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,31,31,15,31,33,15,31,34,
+ 15,31,35,15,31,36,15,31,37, 0, 0, 0, 6,47,15, 6,47,10, 0, 0, 0, 0, 0, 0,
+ 5,28,45, 0, 0, 0, 0, 0, 0, 4,33, 2, 6,56,52, 6,56,57, 6,56,54, 5,35,16,
+ 5,35,12, 6,56,62, 6,56,53, 5,35,15, 5,35,17, 5,35,18, 6,56,56, 6,56,64,
+ 6,56,66, 5,35,19, 6,56,63, 0, 0, 0,15,37,40,15,37,41,15,37,42,15,37,43,
+ 15,37,44,15,37,45,15,37,46, 0, 0, 0, 0, 0, 0, 6,56,65,15,31,32, 6,56,59,
+ 0, 0, 0, 0, 0, 0, 5,35,14,15,38,20, 0, 0, 0, 6,66,69, 4,39,53, 5,42, 6,
+ 6,66,68, 6,66,70, 6,66,76, 6,66,67, 6,66,73, 5,42, 7, 4,39,55, 0, 0, 0,
+ 15,44,45,15,44,46,15,44,47,15,44,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,44,48,
+ 15,44,44, 6,66,75, 6,56,61, 7, 9,19, 7, 9,21, 5,42, 8, 4,45,79, 7, 9,20,
+ 5,49,26, 4,45,80, 5,49,27, 7, 9,25, 7, 9,24, 7, 9,18,15,50,29,15,50,30,
+ 15,50,31, 0, 0, 0, 7, 9,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,44,43, 7,19,74, 5,56,46, 7,19,71, 7,19,70, 5,56,47, 7,19,75, 7,19,78,
+ 4,51,92, 7,19,72, 5,56,45, 6,66,72,15,52,18, 0, 0, 0,15,55,91,15,55,92,
+ 15,55,93,15,55,94,15,56, 1,15,56, 2, 7,19,77, 0, 0, 0, 0, 0, 0, 7,19,76,
+ 0, 0, 0, 7,19,69, 7,19,73, 5,56,48, 7,28,18, 5,62,69, 5,59,13, 5,62,71,
+ 5,56,50, 5,62,70, 4,56,91, 7,28,24, 7,28,20, 7,28,22, 7,28,23, 7,28,21,
+ 0, 0, 0,15,60,78,15,60,80, 0, 0, 0,15,60,79, 0, 0, 0, 7,35,43, 5,68,83,
+ 7,35,46, 5,68,79, 7,35,41, 7,35,42, 7,35,49, 5,68,81, 5,68,78, 5,68,82,
+ 7,35,45, 7,35,44, 0, 0, 0,15,64,86,15,64,87,15,64,88,15,64,89,15,64,91,
+ 15,64,92, 0, 0, 0, 7,35,40, 0, 0, 0, 0, 0, 0, 7,35,48, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,68,80, 7,42,39, 7,42,43, 5,73,61, 5,68,84,
+ /* plane 2, page 126 */
+ 0, 255, /* first, last */
+ 7,42,42, 7,35,47, 5,73,60, 4,65,43, 7,42,40, 5,73,62, 7,42,45, 7,42,44,
+ 5,73,64, 7,42,36, 7,42,41, 7,42,38,15,67,92,15,67,93,15,67,94,15,68, 1,
+ 0, 0, 0, 7,42,46, 0, 0, 0, 0, 0, 0, 7,42,37, 5,73,63, 4,68,49, 5,77,80,
+ 4,68,48, 5,77,79, 7,48,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,48,32, 0, 0, 0,
+ 15,70,27,15,70,28,15,70,29,15,70,30,15,70,31, 7,48,31, 5,81,35, 4,71,39,
+ 5,81,36, 0, 0, 0, 0, 0, 0, 5,81,37, 0, 0, 0,15,72,46,15,72,47, 7,53,27,
+ 0, 0, 0, 7,57,39, 5,84,37, 5,84,36,15,73,86,15,73,87,15,73,88, 7,57,42,
+ 7,57,40, 7,57,41, 0, 0, 0, 0, 0, 0,15,72,45, 7,60,81, 4,75, 2, 5,84,35,
+ 7,60,82, 0, 0, 0, 0, 0, 0,15,74,88, 0, 0, 0, 0, 0, 0, 7,60,83, 7,63,62,
+ 7,63,64, 7,63,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,66,70, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,14,17, 6,20,55, 6,20,56, 5,21,70,15,24,65, 6,47,16, 4,27,36, 0, 0, 0,
+ 6,56,67,15,37,47, 0, 0, 0, 5,42,10,15,44,50, 0, 0, 0, 0, 0, 0, 7, 9,26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,56,52, 5,56,51,15,56, 3, 7,19,79,
+ 0, 0, 0, 0, 0, 0, 5,62,73, 5,62,74, 5,62,72,15,60,81, 5,68,85, 7,35,51,
+ 7,42,48, 7,42,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,81,38, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,60,84, 0, 0, 0, 6,14,18, 6,14,19,
+ 6,20,57,15,13,43,15,13,45,15,13,46,15,13,47,15,13,48, 4,11,43, 5,16,45,
+ 6,28,30, 0, 0, 0, 6,28,29, 5,16,46, 6,28,28, 0, 0, 0, 4,16, 9,15,18,57,
+ 15,18,58,15,18,59,15,18,60,15,18,61, 0, 0, 0, 5,21,77, 6,37,16, 5,21,71,
+ 4,21,55, 5,21,74, 5,21,79, 5,21,78, 4,21,56, 6,37,14, 6,37,15, 5,21,75,
+ 5,21,72,15,24,67,15,24,68,15,24,69,15,24,70,15,24,72,15,24,73,15,24,66,
+ 0, 0, 0, 0, 0, 0, 5,21,76, 5,21,73, 0, 0, 0,15,24,71, 5,28,49, 5,28,48,
+ 5,28,52, 5,28,47, 6,47,20, 6,47,17, 5,35,25, 5,28,51, 5,28,46, 6,47,19,
+ 4,27,38, 5,28,53, 6,56,68, 6,47,21,15,31,39,15,31,40,15,31,41,15,31,42,
+ 15,31,43,15,31,44,15,31,47,15,31,48,15,31,49, 0, 0, 0, 6,47,18,15,31,46,
+ 0, 0, 0, 6,56,70, 5,35,22, 4,33, 3, 6,56,72, 4,33, 5, 5,35,27, 5,35,21,
+ 5,35,29, 5,35,23, 4,33, 4, 6,56,74, 6,56,73, 5,35,26, 0, 0, 0,15,37,48,
+ 15,37,49,15,37,50,15,37,51,15,37,52,15,37,53,15,37,54,15,37,55, 6,56,69,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,56,71, 6,66,77, 0, 0, 0,15,31,45, 6,66,78,
+ 4,39,60, 5,42,12, 5,42,16, 6,66,82, 5,42,11, 5,42,14, 5,42,17, 0, 0, 0,
+ 6,66,81, 6,66,79, 5,42,19, 4,39,61, 5,42,15, 6,66,86, 0, 0, 0, 5,42,13,
+ /* plane 2, page 127 */
+ 0, 255, /* first, last */
+ 6,66,83,15,44,51,15,44,52,15,44,53,15,44,54,15,44,55,15,44,56,15,44,57,
+ 0, 0, 0, 6,66,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,49,34, 5,49,28,
+ 4,45,82, 5,49,31, 5,49,30, 5,49,29, 5,49,32, 7, 9,31, 5,49,38, 5,49,35,
+ 7, 9,33, 5,49,33, 7, 9,28, 7, 9,32, 7, 9,30, 6,66,84, 7, 9,34, 7,19,82,
+ 5,49,37, 5,49,36,15,50,32,15,50,33, 0, 0, 0, 7, 9,35, 7, 9,27,15,56,13,
+ 4,52, 3, 4,52, 4, 4,52, 8, 7,19,84, 5,56,57, 4,52, 1, 4,52, 2, 4,52, 7,
+ 7,19,85, 4,52, 5, 7,19,81, 7,19,80, 5,56,56, 5,56,58, 7,19,86,15,56, 4,
+ 15,56, 6,15,56, 7,15,56, 8,15,56, 9,15,56,10,15,56,11,15,56,12,15,56,14,
+ 0, 0, 0, 7,19,88, 7,19,87, 0, 0, 0, 5,56,59, 5,56,54, 5,56,55, 0, 0, 0,
+ 0, 0, 0, 5,62,79, 5,62,81, 4,57, 2, 5,62,80, 4,57, 4, 4,57, 1, 5,62,82,
+ 4,56,94, 5,62,76, 4,57, 3, 5,62,78, 5,62,75, 7,28,26, 5,62,83,15,56, 5,
+ 15,60,82,15,60,83,15,60,84,15,60,85,15,60,86, 7,28,25, 5,68,89, 5,68,92,
+ 4,61,75, 7,35,55, 7,35,54, 5,68,86, 5,68,90, 5,68,88, 5,68,87, 5,68,93,
+ 5,68,94, 7,35,59, 7,35,58, 5,68,91,15,64,93, 7,35,56, 0, 0, 0, 7,35,53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,35,57, 7,35,52, 0, 0, 0, 5,56,61, 5,73,66,
+ 5,73,70, 5,73,72, 4,65,46, 4,65,44, 5,73,67, 5,73,71, 5,73,69, 5,73,65,
+ 7,42,50, 5,73,73, 5,73,68,15,68, 3,15,68, 4,15,68, 5, 0, 0, 0, 0, 0, 0,
+ 7,42,49, 0, 0, 0, 0, 0, 0, 7,42,51, 0, 0, 0, 4,68,50, 4,68,52, 4,68,56,
+ 4,68,55, 5,77,81, 7,48,33, 7,48,35, 5,77,82, 7,48,34,15,70,32,15,70,33,
+ 15,70,34, 4,71,41, 5,81,40, 5,81,41, 7,53,31, 7,53,29, 7,53,28, 7,53,30,
+ 5,81,39, 5,84,38, 5,84,41, 4,73,45, 5,84,40, 5,84,39,15,73,89, 0, 0, 0,
+ 5,86,47, 5,86,48,15,74,89, 7,57,43, 7,60,85, 7,60,86, 5,88,19, 5,88,20,
+ 5,88,21, 4,77, 6, 0, 0, 0, 0, 0, 0, 7,65,46, 5,90,89, 5,91,41, 0, 0, 0,
+ 6,14,21, 6,14,20, 6,20,59, 5,11,45,15,13,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,20,58, 6,28,33, 4,16,11, 6,28,34, 6,28,32, 5,16,48, 5,16,47, 0, 0, 0,
+ 0, 0, 0, 6,28,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,28,35, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,21,63, 6,37,19, 4,21,58, 5,21,83, 6,37,23, 5,21,87,
+ 6,37,26, 5,21,81, 5,21,85, 6,37,28, 6,37,29, 5,21,84, 6,37,27, 6,37,18,
+ 6,37,22, 0, 0, 0,15,24,74, 6,37,17, 6,37,21, 0, 0, 0, 6,37,25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,21,86, 5,21,80,
+ 0, 0, 0, 6,37,20, 5,28,64, 5,28,55, 5,28,56, 5,28,59, 6,47,27, 5,28,54,
+ 6,47,24, 4,27,46, 5,28,61, 5,28,57, 5,28,65, 5,28,58, 6,47,25, 6,56,89,
+ /* plane 2, page 128 */
+ 0, 255, /* first, last */
+ 5,28,66, 0, 0, 0, 0, 0, 0,15,31,52, 0, 0, 0, 0, 0, 0, 6,47,23, 0, 0, 0,
+ 0, 0, 0,15,31,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,47,26, 5,28,62, 5,35,33, 5,35,31, 6,56,81,
+ 5,35,32, 5,35,34, 6,56,84, 6,56,80, 5,35,39, 5,35,37, 6,56,78, 6,56,77,
+ 5,35,30, 6,56,79, 6,56,82, 6,56,86, 5,35,42, 6,56,76, 6,56,87, 5,35,35,
+ 5,35,44, 5,35,40, 6,56,83, 5,35,41, 5,35,38, 6,56,85, 5,42,21, 0, 0, 0,
+ 0, 0, 0,15,37,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,56,88, 6,56,75,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,67, 2, 5,42,35, 4,39,64, 5,42,23, 5,42,31, 5,42,22, 5,49,46, 5,42,27,
+ 6,66,87, 6,66,91, 5,42,34, 5,42,28, 5,42,25, 5,42,32, 5,42,33, 5,42,29,
+ 5,35,36, 5,42,24, 5,42,36, 6,66,94, 5,42,38, 6,66,89, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,42,39,15,44,58,15,44,59, 6,66,88, 0, 0, 0, 6,66,90, 0, 0, 0,
+ 6,66,93, 0, 0, 0, 6,67, 1, 6,66,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,42,26, 0, 0, 0, 7, 9,38, 4,45,90, 5,49,44,
+ 5,49,39, 5,49,42, 5,49,47, 7, 9,37, 7, 9,41, 4,45,92, 7, 9,45, 4,45,91,
+ 5,49,43, 5,49,45, 4,46, 4, 5,49,49, 5,49,50, 4,39,67, 7, 9,47, 5,49,41,
+ 7, 9,43, 0, 0, 0, 0, 0, 0,15,50,34,15,50,35,15,50,36,15,50,37, 7, 9,40,
+ 0, 0, 0, 7, 9,44, 0, 0, 0, 7, 9,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,42, 5,49,48, 5,49,52, 5,49,53, 5,42,37,
+ 7,20, 1, 5,56,64, 5,42,40, 5,56,73, 4,52,10, 7,19,90, 5,56,67, 7,19,94,
+ 7,20, 3, 7,19,92, 5,56,63, 7,19,91, 7,20, 5, 5,49,51, 7,20, 6, 5,56,71,
+ 5,56,72, 5,56,62, 5,56,65, 7,19,93, 5,56,69, 5,56,68, 7,20, 4, 4,52,11,
+ 5,56,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,52,12,
+ 15,56,17,15,56,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,20, 2, 5,62,90, 5,62,93, 5,62,85, 7,28,32, 5,62,86,
+ 5,62,92, 5,62,88, 4,57, 9, 7,28,30, 7,35,71, 7,28,35, 5,62,94, 4,57,14,
+ 7,28,27, 7,28,34, 7,28,36, 5,62,89, 4,57, 7, 7,28,33, 7,20, 7, 7,28,31,
+ 4,57,15, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,60,87, 0, 0, 0, 7,28,29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,60,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,62,87,
+ /* plane 2, page 129 */
+ 0, 253, /* first, last */
+ 5,62,84, 0, 0, 0, 0, 0, 0, 7,35,66, 0, 0, 0, 4,61,80, 7,35,70, 4,61,79,
+ 5,69, 1, 5,69, 2, 5,69,13, 5,69, 6, 4,61,81, 5,69,12, 5,69, 8, 7,35,63,
+ 5,73,80, 7,35,69, 7,35,60, 5,69,14, 7,35,62, 5,69, 4, 7,35,65, 5,69, 3,
+ 5,69, 9, 4,63,19, 4,61,86, 5,69, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,64,94,15,65, 1,15,65, 2,15,65, 3,15,65, 4,15,65, 5, 7,35,75,
+ 5,69, 7, 7,35,64, 7,35,73, 7,35,72, 7,35,74, 7,35,61, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,69,11, 7,35,67, 0, 0, 0,
+ 7,28,28, 0, 0, 0, 5,69,15, 5,73,74, 7,42,69, 0, 0, 0, 5,73,79, 5,73,81,
+ 7,42,72, 5,73,84, 7,42,59, 5,69,10, 5,73,78, 7,42,56, 5,73,77, 5,73,82,
+ 4,65,53, 7,42,52, 4,61,83, 7,42,57, 7,35,68, 7,42,62, 5,73,83, 7,42,58,
+ 7,42,70, 7,42,53, 7,42,60, 5,73,75, 5,73,76, 7,42,65, 7,42,66, 7,42,67,
+ 7,42,63, 5,73,86, 5,73,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,42,64, 7,42,61, 0, 0, 0, 7,42,71, 7,42,54, 7,42,68, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,65,51, 4,68,57, 5,77,93, 5,77,87, 7,48,36, 5,77,91, 5,77,86, 5,77,89,
+ 7,48,40, 7,48,38, 4,68,60, 5,77,83, 4,68,61, 7,48,39, 5,77,88, 5,77,85,
+ 5,77,84, 7,48,41, 0, 0, 0, 0, 0, 0,15,70,35,15,70,36,15,70,37,15,70,38,
+ 15,70,39, 0, 0, 0, 7,48,37, 7,48,42, 7,48,43, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,77,92, 5,77,94,
+ 5,77,90, 0, 0, 0, 4,71,46, 7,53,34, 4,71,47, 5,81,43, 7,53,33, 7,53,36,
+ 4,71,45, 4,71,43, 5,81,44, 7,53,35, 7,53,32, 5,81,42, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72,49,15,72,50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,84,42, 7,53,37, 7,57,44, 5,84,45, 5,84,47, 5,84,46, 5,84,44,
+ 7,57,45, 0, 0, 0, 5,84,49, 7,57,46,15,73,90, 0, 0, 0, 0, 0, 0, 7,57,47,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84,48, 0, 0, 0, 5,86,52, 5,86,50,
+ 5,86,53, 7,60,89, 7,60,88, 0, 0, 0, 0, 0, 0, 5,86,51, 5,86,49, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,76,11, 7,63,65, 5,88,23, 5,88,22,
+ 4,76,10, 5,88,24, 7,63,66, 7,65,47, 0, 0, 0, 7,63,67, 7,65,50, 4,77, 8,
+ 7,65,52, 7,66,71, 7,65,51, 7,65,49, 7,65,48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,75,71, 5,90,28, 5,90,27, 5,90,29,
+ /* plane 2, page 130 */
+ 3, 252, /* first, last */
+ 7,67,86, 5,91,42, 7,68,67, 0, 0, 0, 0, 0, 0,
+ 5,91,74, 0, 0, 0,15,77, 8, 7,69,69, 0, 0, 0,15,77,19, 0, 0, 0, 6, 3,25,
+ 6, 3,26, 6, 5,53, 0, 0, 0, 5,16,50, 6,28,36, 5,16,49, 0, 0, 0, 0, 0, 0,
+ 5,21,90, 5,21,89, 5,21,88, 6,37,30, 6,37,33, 6,37,32, 6,37,34, 6,37,31,
+ 6,37,35, 6,37,36, 4,21,64, 0, 0, 0,15,24,75, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,28,69, 6,47,31, 5,28,68, 6,47,33, 6,47,30, 5,28,70,15,31,53,
+ 15,31,54,15,31,55,15,31,56, 0, 0, 0, 6,47,29, 6,47,32, 0, 0, 0, 0, 0, 0,
+ 6,56,93, 5,35,45, 6,56,90, 6,56,94, 6,57, 1,15,37,58,15,37,59,15,37,60,
+ 6,56,91, 0, 0, 0, 6,56,92, 6,57, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,42,42, 6,67, 3, 6,67, 4, 5,42,41, 6,67, 5, 6,67, 6,15,44,60,15,44,61,
+ 15,44,62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,49, 5,49,54, 0, 0, 0, 4,46, 5,
+ 15,50,38,15,50,40, 0, 0, 0, 7, 9,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,56,74, 4,52,17, 5,56,75, 7,20, 8, 7,28,38,15,56,20,
+ 15,56,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28,40, 7,28,39,
+ 7,28,37, 5,63, 1,15,60,90,15,60,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,69,16, 7,35,76,15,65, 6,15,65, 7, 0, 0, 0, 0, 0, 0, 7,42,76,
+ 7,42,77, 7,42,74, 0, 0, 0,15,68, 6,15,68, 7, 0, 0, 0, 7,42,75, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,42,73, 0, 0, 0, 0, 0, 0, 4,68,62, 7,48,45,15,70,40,
+ 15,70,41, 0, 0, 0, 7,48,46, 7,53,38, 5,81,45, 7,53,39, 7,53,40, 7,53,41,
+ 7,57,48,15,73,92, 0, 0, 0, 5,86,54, 0, 0, 0, 5,89,49, 0, 0, 0, 0, 0, 0,
+ 6,20,60, 5,11,46, 6,20,62,15,13,50,15,13,52, 0, 0, 0, 0, 0, 0, 6,28,37,
+ 0, 0, 0, 5,16,52, 6,28,39,15,18,63,15,18,64, 0, 0, 0, 0, 0, 0, 6,28,38,
+ 0, 0, 0, 5,16,51,15,18,62, 5,21,91, 6,37,46, 6,37,45, 6,37,38, 4,21,68,
+ 5,22, 2, 5,22, 1, 6,37,42, 5,21,93, 6,37,39, 6,37,44, 6,37,43, 5,21,92,
+ 5,21,94, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,24,77, 0, 0, 0, 6,37,40, 6,37,41,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,21,69, 0, 0, 0, 6,47,38, 6,47,39,
+ 5,28,80, 5,28,78, 6,47,37, 6,47,36, 6,47,34, 5,22, 3, 5,28,77, 5,28,72,
+ 5,28,75, 5,28,74, 6,47,35, 5,28,73, 5,28,81, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,28,76, 5,28,79,
+ 6,57, 3, 6,57, 8, 5,35,51, 6,57, 6, 6,57, 9, 5,35,49, 4,33,11, 5,35,50,
+ 5,35,47, 6,57, 7, 5,35,46, 0, 0, 0,15,37,61,15,37,62,15,37,63, 0, 0, 0,
+ 0, 0, 0, 6,57, 5, 0, 0, 0, 0, 0, 0, 4,33,13,
+ /* plane 2, page 131 */
+ 1, 254, /* first, last */
+ 5,35,52, 6,67,13, 6,67,15, 5,42,48, 4,39,72, 6,67, 8, 6,67,11,
+ 5,42,45, 6,67,12, 6,67, 7, 6,67,16, 0, 0, 0, 5,42,43, 5,42,46, 6,67,17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,67,14, 0, 0, 0,
+ 0, 0, 0,15,44,63,15,44,64,15,44,65,15,44,67, 5,42,47, 0, 0, 0, 5,42,44,
+ 7, 9,57, 6,67,10, 5,49,64, 7, 9,55, 7, 9,62, 7, 9,66, 7, 9,54, 5,49,57,
+ 7, 9,58, 7, 9,53, 7, 9,60, 5,49,56, 5,49,59, 5,49,62, 4,46,12, 6,67, 9,
+ 7, 9,56, 7, 9,61, 7, 9,59, 5,49,61, 5,49,63, 7, 9,50, 5,49,55, 7, 9,52,
+ 7, 9,67, 0, 0, 0, 0, 0, 0,15,50,41,15,50,42,15,50,43,15,50,44, 0, 0, 0,
+ 7, 9,51, 7, 9,63, 7, 9,64, 7, 9,65, 0, 0, 0, 5,49,60, 5,49,58, 7,20, 9,
+ 5,56,83, 7,20,15, 5,56,84, 7,20,13, 5,56,80, 7,20,11, 7,20,20, 5,56,78,
+ 5,56,81, 5,56,77, 7,20,21, 7,20,16, 7,20,22, 0, 0, 0, 5,56,76, 7,20,19,
+ 15,56,23,15,56,25,15,56,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,20,12,
+ 7,20,14, 0, 0, 0, 0, 0, 0, 7,20,10, 0, 0, 0,15,56,24, 0, 0, 0, 4,52,21,
+ 5,56,79, 7,28,42, 7,28,50, 5,63, 5, 7,28,45, 7,28,44, 7,28,43, 7,28,51,
+ 4,57,19, 7,28,48, 4,57,20, 7,28,49, 5,63, 2, 0, 0, 0, 5,63,11, 4,57,22,
+ 5,63, 8, 5,63, 7, 0, 0, 0, 7,28,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,63, 4,
+ 5,63,10, 7,28,41,15,60,92,15,60,93, 7,28,46, 7,28,47, 0, 0, 0, 5,63, 6,
+ 5,63, 3, 5,63, 9, 4,61,89, 7,35,80, 4,62, 1, 5,69,18, 0, 0, 0, 0, 0, 0,
+ 5,69,20,15,65, 8,15,65, 9,15,65,10, 0, 0, 0, 7,35,79, 7,35,82, 0, 0, 0,
+ 7,35,81, 7,35,78, 0, 0, 0, 0, 0, 0, 7,35,77, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,69,17, 5,69,19, 0, 0, 0, 5,73,88, 7,42,78, 7,42,81, 7,42,79,
+ 7,42,80, 5,73,90, 4,65,58, 4,65,59, 5,73,89, 5,73,87, 5,73,91, 7,42,82,
+ 15,68, 8, 7,42,84, 4,68,66, 5,78, 5, 5,78, 3, 7,48,51, 5,78, 4, 5,78, 2,
+ 7,48,49, 5,78, 1, 0, 0, 0, 0, 0, 0,15,70,42, 0, 0, 0, 7,48,50, 0, 0, 0,
+ 0, 0, 0, 7,48,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,48,47, 5,78, 6, 7,48,52,
+ 4,71,51, 5,81,46, 4,71,52, 7,53,44, 0, 0, 0, 0, 0, 0, 7,53,43, 7,53,42,
+ 0, 0, 0, 7,57,54, 4,73,48, 7,57,50, 7,57,49, 4,73,49, 7,57,55, 0, 0, 0,
+ 7,57,51, 7,57,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,57,53, 7,60,94, 7,61, 1,
+ 5,86,55, 7,60,91, 7,60,90, 7,60,92, 7,60,93, 0, 0, 0, 5,86,57, 0, 0, 0,
+ 5,86,56, 5,88,28, 5,88,27, 5,88,26, 7,63,71, 0, 0, 0, 0, 0, 0, 7,63,69,
+ 7,63,68, 5,88,25, 7,63,70, 5,89,51, 5,89,50, 5,90,30, 5,90,31, 0, 0, 0,
+ 7,66,72, 5,90,90, 7,68,68, 0, 0, 0, 0, 0, 0, 7,66,73, 7,67,87,
+ /* plane 2, page 132 */
+ 1, 255, /* first, last */
+ 5,91,75, 7,69,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9,11, 6,14,22, 6,28,40, 0, 0, 0, 6,37,47,
+ 5,22, 5, 5,22, 4, 0, 0, 0, 0, 0, 0, 4,33,14, 6,57,10, 0, 0, 0,15,37,65,
+ 5,42,49,15,44,69,15,44,70, 5,42,50, 7, 9,68, 7, 9,69, 7, 9,70, 5,49,66,
+ 7,20,23, 5,56,85, 7,20,24, 0, 0, 0,15,56,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,63,13, 5,63,12,15,60,94,15,61, 1,15,61, 2,15,61, 3, 0, 0, 0, 5,63,14,
+ 5,69,23, 5,69,22, 7,35,83, 0, 0, 0, 0, 0, 0, 7,42,85, 4,65,60, 0, 0, 0,
+ 0, 0, 0, 7,42,86, 0, 0, 0,15,70,43, 7,48,53,15,72,52, 7,57,56, 0, 0, 0,
+ 7,63,72, 7,69,39, 7,69,71, 6, 9,12, 6,14,23, 6,57,13, 6,57,12, 6,57,11,
+ 15,50,45, 7,19, 1, 4,65,61, 7,53,45, 0, 0, 0, 6, 5,57, 0, 0, 0, 6, 5,56,
+ 6, 5,55, 4, 4,94, 6, 9,13, 4, 5, 4, 6,28,41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 9,14,15, 5,19,15, 5,20, 6,28,42, 0, 0, 0, 0, 0, 0, 6, 9,15, 0, 0, 0,
+ 5, 4,88, 6,28,43, 6,37,48, 5, 7,74, 5, 7,75, 5, 7,80, 6,14,24, 6,14,29,
+ 5, 7,79, 4, 8, 5, 5, 7,81, 5, 7,77, 4, 8, 8, 6,14,27, 0, 0, 0,15, 8,77,
+ 15, 8,79,15, 8,80,15, 8,83,15, 8,84,15, 8,85, 6,14,26, 0, 0, 0, 6,14,31,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7,78, 5, 7,72, 6,14,28, 5, 7,76,
+ 6,14,25, 6,14,30, 0, 0, 0, 5,11,47, 5,11,54, 5,11,50, 6,20,63, 5,11,49,
+ 6,20,66, 5,11,53, 5,11,51, 4,11,47, 4,11,49, 5,11,48, 6,20,68, 6,20,67,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,53,15,13,54,15,13,55,15,13,56,15,13,57,
+ 0, 0, 0, 0, 0, 0, 4,11,50, 6,20,69, 0, 0, 0, 6,20,65, 0, 0, 0, 0, 0, 0,
+ 6,42,39, 0, 0, 0, 5,11,55, 5,11,52, 6,28,52, 6,28,56, 5,16,59, 6,28,51,
+ 5,16,54, 5,16,58, 4,16,17, 5,16,55, 5,16,57, 6,28,50, 6,28,44, 6,28,54,
+ 4,16,18, 0, 0, 0, 6,28,55, 6,28,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,35,53, 6,28,53, 5,16,56, 6,28,48,
+ 6,28,46, 5,16,60, 5,22, 7, 5,22, 6, 6,28,47, 6,37,59, 0, 0, 0, 5,22,12,
+ 4,21,74, 6,37,60, 5,22,11, 6,28,49, 0, 0, 0, 5,22, 9, 6,37,55, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,37,58,15,24,80,15,24,81,15,24,82, 6,37,54, 6,37,52,
+ 6,37,53, 6,37,50, 0, 0, 0, 6,37,61, 0, 0, 0, 6,37,56, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,37,51, 5,22,10, 4,21,71, 6,37,57,
+ 5,22,13, 5,22, 8,15,24,79, 6,37,49, 5,28,86, 5,28,82, 5,28,88, 5,28,87,
+ 4,27,54, 6,47,51, 4,27,58, 4,27,56, 5,28,89, 6,47,50, 7, 9,71, 6,47,45,
+ 6,47,44, 6,47,48, 6,47,47, 4,27,59, 0, 0, 0, 6,47,41, 6,47,43,15,31,66,
+ /* plane 2, page 133 */
+ 0, 253, /* first, last */
+ 6,47,49, 0, 0, 0, 0, 0, 0, 6,47,52, 0, 0, 0, 6,47,53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,47,42, 0, 0, 0, 0, 0, 0,15,31,57,15,31,58,
+ 15,31,59,15,31,60,15,31,61,15,31,63,15,31,64,15,31,65, 5,28,85, 6,47,46,
+ 0, 0, 0, 5,28,84, 5,28,83, 4,27,57, 6,47,54, 6,57,32, 6,57,20, 6,57,29,
+ 0, 0, 0, 6,57,16, 4,33,17, 4,33,16, 6,57,14, 0, 0, 0, 5,35,57, 6,57,17,
+ 6,57,33, 6,57,27, 6,57,31, 6,57,23, 6,57,21, 6,57,35, 6,57,34, 5,28,90,
+ 4,33,18, 6,57,19, 6,57,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,37,66,15,37,67,15,37,68,15,37,69,15,37,70,15,37,71,15,37,72,
+ 15,37,73,15,37,74,15,37,75,15,37,76, 0, 0, 0, 6,57,18, 0, 0, 0, 6,57,22,
+ 6,57,28, 6,57,25, 0, 0, 0, 6,57,24, 6,57,26, 0, 0, 0, 6,57,15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,35,56, 5,35,55, 5,35,54, 6,67,21, 6,67,20, 6,67,23,
+ 6,67,18, 6,67,26, 5,42,52, 6,67,22, 6,67,24, 6,67,28, 5,42,51, 5,42,54,
+ 6,67,19, 6,67,27, 7,28,53, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,44,73,15,44,74,
+ 15,44,76,15,44,77,15,44,78,15,44,79,15,44,80,15,44,81,15,44,82, 0, 0, 0,
+ 6,67,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28,54, 7,28,55, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,28,56, 0, 0, 0, 5,42,53, 0, 0, 0, 0, 0, 0, 7, 9,78, 7, 9,76,
+ 7, 9,82, 7, 9,73, 7, 9,75, 4,46,15, 5,49,68, 4,46,16, 5,49,72, 5,49,69,
+ 4,46,20, 0, 0, 0, 0, 0, 0, 7, 9,80,15,50,46,15,50,47,15,50,48,15,50,49,
+ 15,50,50, 5,49,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,74, 7, 9,79, 7, 9,84,
+ 7, 9,85, 7, 9,81, 0, 0, 0, 7, 9,83, 7,35,84, 7, 9,72, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,35,85, 7, 9,77, 5,49,73, 5,49,71, 5,49,76, 5,49,70,
+ 5,49,74, 5,49,75, 0, 0, 0, 5,49,67, 7,20,38, 5,56,92, 5,56,91, 5,56,89,
+ 7,20,33, 5,56,87, 7,20,37, 7,20,30, 7,20,39, 0, 0, 0, 4,52,22, 7,20,34,
+ 7,20,36, 7,20,25, 7,20,42, 7,42,87, 7,20,28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,20,32, 7,20,44,15,56,28,15,56,29,15,56,30,
+ 7,20,29, 0, 0, 0,15,56,31, 7,12,58, 7,20,40, 7,20,27, 0, 0, 0, 7,20,26,
+ 7,20,35, 7,20,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,56,88, 5,56,93,
+ 0, 0, 0, 5,56,90, 7,20,31, 5,56,86, 0, 0, 0, 5,63,15, 4,57,26, 7,28,64,
+ 5,63,19, 7,28,61, 5,63,20, 7,28,59, 7,48,55, 7,20,41, 7,28,66, 7,28,62,
+ 5,63,18, 5,63,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,61, 4,15,61, 6,
+ 15,61, 7,15,61, 8, 7,28,57, 7,28,60, 7,28,63, 7,28,67,
+ /* plane 2, page 134 */
+ 0, 255, /* first, last */
+ 15,61, 5, 5,63,22, 5,63,23, 5,63,17, 5,63,16, 7,28,58, 0, 0, 0, 5,69,29,
+ 7,35,92, 4,62, 2, 7,35,90, 0, 0, 0, 5,69,26, 7,35,88,15,65,11,15,65,12,
+ 15,65,13, 7,36, 1, 0, 0, 0, 7,35,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,69,25, 7,35,93, 7,35,86, 7,35,89, 5,69,28, 5,69,27, 5,69,24,
+ 7,35,91, 7,43, 1, 7,43, 2, 7,42,94, 0, 0, 0, 0, 0, 0,15,68,10,15,68,11,
+ 15,68,13,15,68,14, 7,42,89, 7,42,90, 7,42,93, 7,42,91, 7,42,92, 0, 0, 0,
+ 7,42,88, 0, 0, 0, 5,74, 1, 0, 0, 0, 0, 0, 0, 5,73,94,15,68,12, 7,48,58,
+ 5,78, 9, 7,48,57, 0, 0, 0, 0, 0, 0, 5,78, 7,15,70,44, 0, 0, 0, 7,48,56,
+ 5,78, 8, 7,61, 2, 4,71,53, 7,53,47, 5,81,49, 7,53,48, 7,53,46,15,72,53,
+ 15,72,54,15,72,55,15,72,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,81,47, 5,81,48,
+ 5,73,93, 7,53,49, 5,81,50, 5,84,50, 4,75, 5, 7,57,59, 0, 0, 0, 7,57,58,
+ 7,57,57, 7,61, 3, 7,61, 5, 0, 0, 0, 7,61, 4, 0, 0, 0, 7,66,74, 7,63,74,
+ 7,63,73, 0, 0, 0, 0, 0, 0, 5,88,29, 7,65,53, 0, 0, 0, 7,66,75, 7,69,72,
+ 6, 9,16, 5, 1,92, 0, 0, 0, 5, 3,12, 0, 0, 0, 5, 3,11, 5, 3,13, 5, 3,10,
+ 4, 3,17, 6, 5,58, 6, 5,60, 0, 0, 0, 0, 0, 0, 4, 3,19, 4, 5, 7, 5, 4,89,
+ 4, 5, 6, 4, 5, 8, 4, 5, 5, 6, 9,19, 4, 5,10, 5, 4,90, 4,21,81, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 9,18,15, 5,21,15, 5,22,15, 5,23,15,24,83,15,24,85,
+ 0, 0, 0, 6,37,65, 6,37,63, 6,37,64, 0, 0, 0, 6, 9,17, 0, 0, 0, 4, 5, 9,
+ 0, 0, 0, 4, 8,14, 6,37,62, 4, 8,10, 4, 8,13, 4, 8,12, 6,20,73, 4, 8,15,
+ 5, 7,82, 5, 7,83, 6,47,56, 6,14,35,15, 8,86,15, 8,88,15, 8,89,15, 8,92,
+ 6,47,58, 0, 0, 0, 6,14,33, 0, 0, 0, 0, 0, 0, 6,14,34, 0, 0, 0, 0, 0, 0,
+ 6,14,32, 0, 0, 0,15, 8,87,15, 8,91, 6,47,55, 6,47,57, 5, 7,84, 5,11,58,
+ 5,11,57, 5,11,56, 4,11,55, 4,11,53, 5,11,63, 4,33,19, 5,11,59, 0, 0, 0,
+ 0, 0, 0,15,13,58,15,37,78, 6,57,37, 6,57,36, 6,57,38, 0, 0, 0, 6,20,76,
+ 0, 0, 0, 6,20,70, 0, 0, 0, 6,20,71, 6,20,72, 0, 0, 0, 6,20,75, 6,20,74,
+ 5,11,62, 5,11,60, 5,11,61, 5,16,65, 5,16,61, 4,16,22, 6,28,59, 5,16,69,
+ 5,16,70, 5,16,62, 5,16,67, 5,16,63, 4,16,21, 6,28,61, 4,16,23, 0, 0, 0,
+ 0, 0, 0, 6,28,63, 6,67,29, 6,67,31, 6,67,32, 0, 0, 0, 6,28,60, 6,28,62,
+ 6,28,58, 5,16,66, 0, 0, 0, 5,16,68, 5,16,64, 5,16,71, 6,67,30, 6,28,57,
+ 15,18,66,15,18,67,15,18,68, 5,49,78, 4,46,22, 4,21,79, 5,22,17, 5,22,16,
+ 5,22,21, 5,22,14, 0, 0, 0, 5,22,18, 4,21,77, 6,37,70, 5,22,20, 7, 9,90,
+ 7, 9,89, 0, 0, 0, 0, 0, 0, 6,37,72,15,18,65,15,24,86,15,50,52, 7, 9,86,
+ /* plane 2, page 135 */
+ 0, 255, /* first, last */
+ 7, 9,87, 7, 9,91, 7, 9,88, 6,37,67, 0, 0, 0, 6,37,69, 6,37,68, 0, 0, 0,
+ 6,37,66, 0, 0, 0,15,19,28, 6,37,71, 5,22,15, 5,22,19, 5,16,72, 4,27,63,
+ 5,29, 3, 5,28,94, 5,29, 2, 4,27,61, 5,29, 4, 6,47,68, 5,29, 1, 5,35,71,
+ 5,28,93, 5,28,92, 6,47,66, 6,47,59, 4,27,60, 0, 0, 0, 0, 0, 0,15,31,67,
+ 15,31,68,15,31,69,15,56,33, 7,20,46, 6,47,61, 6,47,60, 6,47,62, 6,47,63,
+ 6,47,64, 0, 0, 0, 6,47,65, 0, 0, 0, 0, 0, 0,15,31,70, 6,47,67, 7,20,45,
+ 5,28,91, 0, 0, 0, 7,28,68, 5,35,59, 5,35,64, 5,35,67, 5,35,62, 5,35,61,
+ 4,33,21, 6,67,33, 5,35,60, 5,35,66, 5,35,63, 5,35,68, 5,35,70, 4,33,23,
+ 5,35,69, 6,57,41, 0, 0, 0, 5,35,58,15,37,79, 0, 0, 0, 0, 0, 0, 6,57,40,
+ 0, 0, 0, 6,57,43, 5,35,65, 4,39,79, 5,42,61, 5,42,60, 5,42,57, 5,42,56,
+ 5,42,67, 5,42,63, 0, 0, 0, 5,42,59, 6,67,38, 6,67,35, 0, 0, 0, 6,67,34,
+ 5,42,65, 0, 0, 0, 0, 0, 0, 5,42,66, 0, 0, 0, 7,36, 2, 7,36, 4, 7,36, 3,
+ 7,36, 5, 6,67,37, 5,42,55, 4,39,82, 0, 0, 0, 6,67,36, 5,69,30, 5,42,58,
+ 5,42,62, 0, 0, 0, 5,42,68, 4,46,24, 7,43, 3, 5,49,82, 7,10, 1, 4,46,23,
+ 5,49,83, 4,46,25, 0, 0, 0, 5,57, 8, 5,49,79, 5,49,80, 7, 9,94, 7,10, 2,
+ 4,46,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,50,51,15,50,53,15,50,54,
+ 7,43, 6, 7,43, 4, 7,10, 3, 7,10, 5, 7,10, 6, 7,10, 4, 0, 0, 0, 7, 9,92,
+ 0, 0, 0, 7, 9,93, 0, 0, 0, 0, 0, 0, 5,49,84, 7,20,48, 5,49,81, 7,43, 5,
+ 0, 0, 0, 5,78,10, 5,57, 5, 5,57, 6, 7,48,60, 4,52,24, 7,20,47, 5,57, 1,
+ 5,57, 4, 7,20,50, 5,57, 2, 5,57, 3, 4,52,25, 0, 0, 0, 7,20,49,15,56,32,
+ 7,48,61, 7,48,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,78,11, 7,28,69,
+ 7,28,73, 5,63,24, 4,57,27, 5,63,25, 0, 0, 0, 0, 0, 0, 7,53,50, 7,53,51,
+ 7,53,52, 7,28,71, 0, 0, 0, 7,28,74, 0, 0, 0, 7,28,70, 5,63,27, 5,63,26,
+ 7,53,53, 7,28,72, 5,69,32, 7,36, 6, 7,36, 7, 5,69,33, 5,74, 5, 5,69,36,
+ 7,36, 9, 7,36, 8, 5,69,34, 5,69,35, 7,57,60, 5,69,31, 0, 0, 0, 0, 0, 0,
+ 7,36,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,43, 8, 7,36,11, 5,74, 4,
+ 7,43, 7, 5,74, 3, 0, 0, 0, 0, 0, 0, 7,43,10, 7,43, 9, 4,65,64, 5,57, 7,
+ 5,74, 2, 4,68,68, 5,78,12, 7,48,63, 7,48,65, 0, 0, 0, 7,48,62, 7,48,64,
+ 4,71,54,15,72,57, 7,53,54, 7,53,55, 7,57,61, 0, 0, 0, 7,53,56,15,72,58,
+ 7,61, 6, 0, 0, 0, 0, 0, 0, 7,63,75, 7,63,76, 0, 0, 0, 5,91,43, 7,67,88,
+ 4,16,25,15,18,69, 6,28,64, 0, 0, 0, 5,22,24, 5,22,23, 6,37,82, 6,37,78,
+ 5,22,25, 4,21,86, 6,37,76, 6,37,83, 6,37,73, 4,21,87, 5,22,26, 6,37,80,
+ /* plane 2, page 136 */
+ 0, 255, /* first, last */
+ 6,37,79, 6,37,74, 6,37,75, 0, 0, 0, 0, 0, 0,15,24,87, 6,37,81, 4,21,89,
+ 6,37,77, 0, 0, 0, 6,37,84, 6,47,75, 5,29, 5, 5,29, 6, 4,27,69, 6,47,73,
+ 5,35,74, 4,27,66, 4,27,67, 6,47,74, 6,47,70, 6,47,69, 4,27,65, 6,47,71,
+ 6,47,72, 0, 0, 0, 0, 0, 0,15,31,72,15,31,73,15,31,74,15,31,75, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,47,76, 0, 0, 0, 5,35,73, 5,35,76, 5,35,72, 6,57,46,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,57,45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,35,75, 6,67,42,
+ 5,42,70, 5,42,69,15,44,83,15,44,84,15,44,85,15,44,87, 6,67,41, 0, 0, 0,
+ 0, 0, 0, 6,67,40,15,44,88, 0, 0, 0, 0, 0, 0, 6,67,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10, 8, 5,49,88, 7,10,12, 5,49,89, 5,49,85,
+ 7,10,16, 5,49,86, 0, 0, 0, 7,10,15, 7,10,14, 7,10,13, 7,10, 9, 7,10, 7,
+ 5,49,87, 0, 0, 0,15,44,86,15,50,56,15,50,57, 7,10,10, 0, 0, 0, 0, 0, 0,
+ 7,10,11, 0, 0, 0, 7,10,18, 7,10,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,20,54, 7,20,53, 5,57, 9, 7,20,56, 5,57,12, 7,20,58, 4,52,33,
+ 7,20,63, 4,52,30, 4,52,31, 7,20,62, 5,57,10, 7,20,55, 7,20,61, 7,20,60,
+ 5,57,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,56,34,15,56,35, 0, 0, 0,
+ 7,20,57, 7,20,59, 0, 0, 0, 7,20,51, 7,20,64, 5,63,33, 5,63,31, 5,63,32,
+ 5,63,35, 4,57,32, 7,28,76, 5,63,34, 4,57,30, 7,28,78, 5,63,30, 7,28,84,
+ 5,63,36, 7,28,77, 7,28,83, 0, 0, 0,15,61,10,15,61,11,15,61,12, 0, 0, 0,
+ 0, 0, 0, 7,28,79, 7,28,81, 7,28,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,63,29, 5,69,38, 5,69,39, 5,69,41, 7,36,19, 7,36,15, 4,62, 3, 7,36,12,
+ 5,69,40, 4,62, 6, 5,69,42, 7,28,85, 4,62, 5, 7,36,18, 0, 0, 0, 5,69,43,
+ 7,36,21, 7,36,22, 7,36,13,15,65,14, 0, 0, 0, 7,36,17, 7,36,14, 0, 0, 0,
+ 0, 0, 0, 5,69,44, 7,36,16, 0, 0, 0, 0, 0, 0, 7,43,15, 7,43,12, 5,74,14,
+ 5,74,11, 5,74, 7, 5,74,10, 5,74, 9, 5,74,15, 5,74,12, 5,74, 8, 5,74,13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,43,13, 0, 0, 0, 0, 0, 0, 7,43,14, 0, 0, 0,
+ 7,43,16, 7,43,11, 0, 0, 0, 7,36,20, 5,74,16, 5,74, 6, 7,48,66, 5,78,17,
+ 5,78,14, 5,78,15, 5,78,13, 5,78,16, 7,48,67, 7,48,68, 0, 0, 0,15,70,46,
+ 7,48,69, 7,48,71, 0, 0, 0, 7,48,70, 0, 0, 0, 0, 0, 0, 4,71,57, 4,71,55,
+ 4,71,56, 5,81,51, 7,53,58,15,72,59, 0, 0, 0, 7,53,57, 7,57,62, 7,57,63,
+ 7,57,66, 5,84,51, 7,57,65, 7,57,64,15,73,93, 0, 0, 0, 7,61, 7, 7,61, 9,
+ 5,86,58, 7,61,11, 7,61,10, 5,86,59, 7,61, 8,15,74,90, 5,88,31, 4,76,15,
+ /* plane 2, page 137 */
+ 0, 255, /* first, last */
+ 7,63,77, 7,63,78, 5,88,30, 0, 0, 0, 0, 0, 0, 7,66,76, 0, 0, 0, 5,90,91,
+ 7,67,90, 7,67,89, 7,68,70, 0, 0, 0, 7,68,69, 7,69,88, 7,69,89, 6,20,78,
+ 5,29, 7, 5,22,27, 6,67,43, 6,67,44, 0, 0, 0, 5,49,90, 7,10,20, 7,10,19,
+ 5,57,13, 7,20,65, 5,63,37,15,61,13, 0, 0, 0, 7,36,23,15,70,47, 0, 0, 0,
+ 15,72,60, 5,84,52, 5,22,28, 6,28,65, 0, 0, 0, 6,37,85, 6,47,78, 0, 0, 0,
+ 5,29, 9, 5,29, 8,15,37,80, 0, 0, 0, 6,67,45, 7,10,21, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,63,38, 0, 0, 0,15,65,15, 5,69,45,
+ 15,72,61, 5,81,52, 7,53,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,28,68,15,18,70,
+ 6,28,66, 0, 0, 0, 5,22,29, 6,37,86, 6,37,87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,24,88, 6,47,83, 6,47,84, 6,47,85, 6,47,81, 6,47,82, 6,47,88,
+ 6,47,86, 6,47,80, 6,47,89,15,31,76,15,31,77,15,31,78,15,31,79,15,31,82,
+ 15,31,84,15,31,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6,47,87, 0, 0, 0,15,31,80, 4,33,39, 5,35,78, 4,33,37,
+ 4,33,36, 6,57,51, 6,57,47, 0, 0, 0, 0, 0, 0,15,37,81,15,37,85,15,37,86,
+ 15,37,87,15,37,88, 6,57,53, 6,57,49, 0, 0, 0, 6,57,50,15,37,89, 0, 0, 0,
+ 0, 0, 0, 6,57,52, 0, 0, 0, 6,57,48, 0, 0, 0, 0, 0, 0,15,37,84, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,42,71, 0, 0, 0, 5,42,72, 6,67,50, 5,42,73, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,44,72,15,44,89,15,44,91,15,44,92,15,44,93,15,45, 1,
+ 15,45, 3,15,45, 4,15,45, 5,15,45, 8,15,45, 9, 0, 0, 0, 6,67,46, 0, 0, 0,
+ 0, 0, 0, 4,39,90, 0, 0, 0, 0, 0, 0, 6,67,48, 6,67,49,15,45,10, 6,67,52,
+ 15,44,90, 0, 0, 0, 0, 0, 0, 6,67,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,45,11, 0, 0, 0,15,45, 6,15,44,94, 7,10,26, 4,46,34, 5,49,94, 7,10,33,
+ 7,10,27, 7,10,32, 7,10,25, 5,49,93, 7,10,35, 0, 0, 0, 0, 0, 0, 7,10,36,
+ 7,10,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,49,91, 7,10,23,
+ 0, 0, 0,15,50,59,15,50,61,15,50,63,15,50,64,15,50,67,15,50,68,15,50,69,
+ 15,50,71,15,50,72,15,50,73,15,50,74,15,50,76,15,50,77, 7,10,34, 7,10,28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,31, 0, 0, 0, 7,10,37,15,50,62, 0, 0, 0,
+ 0, 0, 0, 7,10,22, 0, 0, 0, 5,49,92,15,50,66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,50,70, 0, 0, 0, 0, 0, 0,15,50,58, 5,57,20, 5,57,23, 5,57,18,
+ 4,52,39, 5,57,14, 5,57,16, 7,20,69, 7,20,68, 7,20,75, 7,20,73, 7,20,71,
+ 5,57,22, 4,52,36, 7,20,66, 7,20,74, 7,20,72, 5,57,15, 7,20,70, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,50,60, 5,57,19,15,56,36,
+ /* plane 2, page 138 */
+ 0, 253, /* first, last */
+ 15,56,38,15,56,39,15,56,41,15,56,42,15,56,43,15,56,45,15,56,46,15,56,47,
+ 15,56,49,15,56,51,15,56,52,15,56,54,15,56,55,15,56,58,15,56,60, 0, 0, 0,
+ 15,56,61,15,56,62,15,56,64,15,56,65,15,56,67,15,56,68,15,56,48,15,56,50,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,56,63, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,56,37, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,56,56, 0, 0, 0, 0, 0, 0, 5,57,24, 0, 0, 0, 5,57,17, 5,63,40,
+ 5,63,41, 7,28,89, 4,57,35, 5,63,44, 5,63,43, 7,28,92, 5,57,21, 5,63,39,
+ 7,28,90, 5,63,42, 5,63,47, 7,28,94, 7,29, 4, 7,29, 1, 7,29, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,61,15,15,61,16,15,61,20,15,61,21,
+ 15,61,22,15,61,23,15,61,26,15,61,27,15,61,28,15,61,29,15,61,31,15,61,32,
+ 15,61,34, 0, 0, 0, 0, 0, 0,15,61,35,15,61,36,15,61,37,15,61,38,15,61,39,
+ 15,61,40,15,61,41,15,61,43,15,61,46,15,61,47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,28,93, 0, 0, 0, 0, 0, 0, 7,29, 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, 7,28,88, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,29, 3, 4,57,40, 0, 0, 0,15,61,42, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,61,24,15,61,19,15,61,17, 5,63,46, 5,63,45,15,61,14, 5,69,49,
+ 4,62,13, 4,62,14, 5,69,50, 4,62, 8, 4,62,10, 7,36,24, 5,69,48, 5,69,46,
+ 5,74,17, 7,36,26, 5,69,51, 4,62,16, 7,36,32, 0, 0, 0, 7,36,31, 5,69,52,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,69,53,
+ 7,36,33,15,65,17,15,65,18,15,65,20,15,65,22,15,65,23,15,65,24,15,65,26,
+ 15,65,28,15,65,29,15,65,30,15,65,32,15,65,33,15,65,34,15,65,36,15,65,37,
+ 15,65,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,36,27, 7,36,28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,36,30, 7,36,29, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,65,16, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,65,25,15,65,21, 0, 0, 0,15,63,61, 4,65,75,
+ 7,43,19, 7,43,23, 5,74,18, 7,43,20, 5,74,20, 7,43,18, 7,43,26, 0, 0, 0,
+ 7,43,22, 7,43,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,43,27,15,68,17,
+ 15,68,18,15,68,19,15,68,21,15,68,22,15,68,24,15,68,25,15,68,26,15,68,27,
+ 15,68,28,15,68,29,15,68,31,15,68,32,15,68,33,15,68,34,15,68,35,15,68,36,
+ 15,68,37, 7,43,28, 0, 0, 0, 7,43,21, 0, 0, 0, 7,43,24,
+ /* plane 2, page 139 */
+ 3, 254, /* first, last */
+ 4,65,74, 7,43,17, 5,69,54, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,30, 4,68,72, 7,48,77, 7,48,78,
+ 5,78,24, 7,48,82, 5,78,19, 4,68,74, 5,78,22, 0, 0, 0, 5,78,18, 7,48,80,
+ 7,48,72, 7,48,73, 5,78,23, 4,68,78, 0, 0, 0, 7,48,81, 0, 0, 0, 5,78,20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,70,48,15,70,49,15,70,51,15,70,52,15,70,53,
+ 15,70,54,15,70,56,15,70,57, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,70,58,15,70,59,
+ 15,70,61,15,70,63,15,70,64,15,70,65,15,70,66,15,70,67,15,70,68,15,70,70,
+ 15,70,72,15,70,74,15,70,75,15,70,76,15,70,77,15,70,78,15,70,79, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,48,76, 0, 0, 0, 0, 0, 0, 7,48,79,
+ 0, 0, 0,15,70,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,70,60, 0, 0, 0,
+ 15,70,71, 0, 0, 0, 0, 0, 0, 7,48,74, 0, 0, 0, 7,53,66, 4,71,62, 7,53,71,
+ 7,53,65, 7,53,60, 4,71,64, 4,71,61, 7,53,64, 7,53,67, 7,53,73, 7,53,62,
+ 0, 0, 0, 0, 0, 0,15,72,62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72,63,
+ 15,72,64,15,72,65,15,72,66,15,72,67, 0, 0, 0,15,72,68,15,72,69,15,72,70,
+ 15,72,71,15,72,72,15,72,73,15,72,75,15,72,76,15,72,77,15,72,78,15,72,79,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,53,63, 0, 0, 0, 7,53,68, 0, 0, 0,
+ 7,53,69, 0, 0, 0, 0, 0, 0, 7,53,70, 7,53,61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72,74,
+ 0, 0, 0, 0, 0, 0, 5,84,55, 7,57,75, 7,57,74, 7,61,16, 0, 0, 0, 7,57,70,
+ 0, 0, 0, 0, 0, 0, 7,57,68,15,73,94, 0, 0, 0, 0, 0, 0,15,74, 1,15,74, 2,
+ 15,74, 3,15,74, 4,15,74, 5,15,74, 6,15,74, 7,15,74, 8,15,74, 9,15,74,10,
+ 15,74,11, 0, 0, 0, 0, 0, 0, 7,57,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,57,69,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84,54,
+ 5,86,62, 4,75, 8, 0, 0, 0, 5,86,60,15,75,15, 7,61,15, 7,61,13, 7,57,73,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,61,12, 0, 0, 0,15,74,92,15,74,93,
+ 15,75, 3,15,75, 4,15,75, 5,15,75, 6,15,75, 9,15,75,10,15,75,11,15,75,12,
+ 15,75,13,15,75,14, 7,61,14, 0, 0, 0, 7,61,17, 0, 0, 0, 0, 0, 0,15,75, 1,
+ 0, 0, 0,15,74,94,15,75, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,88,32, 7,63,80,
+ 7,63,81, 7,63,82, 7,63,79, 7,63,83, 0, 0, 0, 0, 0, 0,15,75,72, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,73,15,75,74,15,75,75,
+ 15,75,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,77,67, 7,65,55, 7,65,56, 0, 0, 0,15,75,77,
+ /* plane 2, page 140 */
+ 0, 255, /* first, last */
+ 15,76,28,15,76,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,65,54, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,66,82, 7,66,77, 7,66,78, 7,66,84, 7,66,80, 7,66,79, 5,90,32,
+ 7,66,83, 7,66,81, 7,66,85, 0, 0, 0,15,76,50,15,76,51,15,76,52,15,76,53,
+ 15,76,54,15,76,55,15,76,56, 0, 0, 0,15,76,32, 5,90,33, 5,90,92, 7,67,93,
+ 7,67,91, 0, 0, 0,15,76,79, 0, 0, 0, 7,67,92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,77, 3, 7,68,72, 0, 0, 0, 0, 0, 0,15,77, 1, 0, 0, 0, 7,68,71, 7,68,73,
+ 15,77, 2,15,76,30, 7,69,40, 7,69,41, 0, 0, 0, 0, 0, 0,15,77, 9, 0, 0, 0,
+ 5,92, 1, 0, 0, 0, 0, 0, 0,15,77,21,15,77,24,15,77,25, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,14,36,
+ 6, 9,20, 5,11,64, 5,22,31, 6,37,91, 5,22,30, 5,22,32, 6,37,90,15,24,89,
+ 0, 0, 0, 0, 0, 0, 6,37,89, 0, 0, 0, 6,37,88, 5,29,10, 5,29,11, 4,27,72,
+ 6,47,90, 6,47,91, 0, 0, 0,15,31,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,57,57, 6,57,56, 4,33,42, 6,57,54, 6,57,55,
+ 0, 0, 0,15,37,90, 5,35,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,35,79,
+ 5,42,74, 4,39,92, 6,67,54, 6,67,55, 0, 0, 0, 0, 0, 0, 5,42,75, 5,50, 1,
+ 5,50, 3, 5,57,25, 5,50, 2, 5,50, 4, 5,50, 5,15,56,69, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,57,27, 7,20,78, 5,57,26, 0, 0, 0, 7,29, 6,
+ 7,20,77, 0, 0, 0, 7,20,80, 7,20,76, 0, 0, 0, 7,29, 9, 4,57,42, 5,63,48,
+ 4,57,43, 7,29,10, 7,29, 8, 0, 0, 0, 0, 0, 0, 7,29, 7, 7,36,35, 5,69,56,
+ 7,36,34, 5,69,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,74,24, 5,74,22, 5,74,21,
+ 0, 0, 0, 0, 0, 0, 5,74,23, 5,78,25, 7,48,83, 0, 0, 0, 7,48,84, 0, 0, 0,
+ 4,71,68, 0, 0, 0, 7,53,74, 7,57,77, 7,57,78, 0, 0, 0, 7,57,76, 0, 0, 0,
+ 5,86,65, 5,86,64, 5,88,33, 7,63,84, 7,66,86, 7,68,74, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,11,65, 5,16,74, 5,16,75, 5,16,73, 0, 0, 0,15,18,71, 6,28,70,
+ 5,22,34, 5,22,33, 0, 0, 0,15,24,90, 0, 0, 0,15,24,91, 6,37,92, 5,29,19,
+ 5,29,17, 5,29,15, 4,27,74, 5,29,16, 4,27,76, 3,31,77, 5,29,12, 5,29,13,
+ 5,29,14, 6,47,94, 6,48, 1, 5,29,18, 0, 0, 0, 6,47,92, 0, 0, 0,15,31,88,
+ 15,31,89,15,31,90,15,31,91,15,31,92,15,31,93,15,32, 1, 0, 0, 0, 0, 0, 0,
+ 6,47,93, 0, 0, 0, 4,27,73, 4,33,44, 6,57,62, 4,33,50, 4,33,45, 4,33,43,
+ 15,37,94, 6,57,61, 5,35,84, 5,35,81, 5,35,83, 5,35,82, 6,57,59, 4,33,49,
+ /* plane 2, page 141 */
+ 0, 252, /* first, last */
+ 4,33,47, 6,57,60, 6,57,58, 0, 0, 0,15,37,93,15,38, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,42,83, 5,42,79, 5,42,81,
+ 4,39,94, 5,42,77, 4,40, 1, 5,42,84, 6,67,58, 5,42,80, 5,42,85, 4,39,93,
+ 5,42,82, 5,42,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,67,57, 0, 0, 0, 6,67,59,
+ 6,67,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,42,76, 0, 0, 0, 0, 0, 0,
+ 7,10,40, 5,50,13, 5,50, 8, 7,10,45, 5,50,10, 5,50, 7, 7,10,46, 4,46,41,
+ 5,50,12, 5,50, 9, 0, 0, 0, 7,10,44, 0, 0, 0,15,50,78,15,50,79,15,50,81,
+ 7,10,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,41,
+ 7,10,42, 7,10,43, 0, 0, 0, 0, 0, 0, 5,50, 6, 5,50,11, 5,50,14,15,50,80,
+ 4,52,48, 4,52,45, 5,57,29, 5,57,32, 7,20,82, 5,57,28, 0, 0, 0, 5,57,30,
+ 5,57,31, 7,20,85, 7,20,87, 7,20,89,15,56,70,15,56,71,15,56,72, 7,20,84,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,20,88, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,20,86, 0, 0, 0, 4,52,46, 4,57,51, 4,57,49, 5,63,52,
+ 7,29,11, 5,63,49, 5,63,51, 5,63,53, 5,63,50, 7,29,13, 4,57,48, 7,29,12,
+ 4,57,44, 0, 0, 0, 7,29,14,15,61,48, 0, 0, 0, 7,29,15, 0, 0, 0, 7,29,16,
+ 0, 0, 0, 7,29,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,69,63, 5,69,62, 5,69,58, 4,62,19, 7,36,36, 5,69,59, 5,69,65, 5,69,64,
+ 7,36,38, 5,69,61, 5,69,57, 5,69,60,15,65,39,15,65,40,15,65,41,15,65,44,
+ 0, 0, 0, 0, 0, 0,15,65,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,36,37, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,36,39, 0, 0, 0, 5,74,25, 7,43,30, 7,43,31, 4,65,77,
+ 5,74,26, 7,43,29, 4,65,78,15,68,38,15,68,39,15,68,40,15,68,41,15,68,42,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,68,80, 5,78,31, 5,78,26, 5,78,29,
+ 5,78,28, 5,78,30, 5,78,32, 4,68,82, 7,48,88, 0, 0, 0, 5,74,27, 7,48,85,
+ 15,70,80,15,70,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,48,86, 0, 0, 0,
+ 0, 0, 0, 5,78,27, 7,48,87, 5,81,58, 5,78,33, 4,71,69, 5,81,57, 5,81,55,
+ 0, 0, 0,15,72,80,15,72,81,15,72,83,15,72,84,15,72,85, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,81,60, 5,81,56, 5,84,56, 7,53,75, 0, 0, 0,15,74,15,
+ 0, 0, 0, 7,57,79, 0, 0, 0,15,74,12,15,74,13,15,74,14,15,74,16,15,74,17,
+ 0, 0, 0,15,75,16,15,75,17,15,75,18, 7,61,18, 0, 0, 0, 5,88,34,15,75,78,
+ 15,75,79, 0, 0, 0, 7,63,86, 7,63,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,89,52, 4,77, 9, 4,77,10, 7,65,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,66,87,
+ 7,66,88, 0, 0, 0, 0, 0, 0, 5,90,93,15,77,10,
+ /* plane 2, page 142 */
+ 15, 255, /* first, last */
+ 6,14,37,
+ 5, 2, 2, 5, 1,94, 4, 2, 3, 5, 2, 3, 4, 2, 2, 5, 2, 1, 5, 3,14, 4, 3,20,
+ 6, 5,61, 0, 0, 0, 5, 4,93, 4, 5,12, 4, 5,13, 5, 4,94, 5, 4,92, 0, 0, 0,
+ 15, 5,26,15, 5,27,15, 5,28,15, 5,29,15, 5,30, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15, 5,31, 0, 0, 0, 5, 7,85, 6,14,39, 5, 7,86, 5, 7,88, 5, 7,89,
+ 4, 8,16, 5, 7,87, 6,14,38, 6,14,40, 0, 0, 0,15, 8,93, 0, 0, 0, 0, 0, 0,
+ 15, 8,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,11,66, 6,20,80, 6,20,83, 4,11,60, 5,11,69, 6,20,81, 6,67,61,
+ 6,20,85, 6,20,86, 6,20,87, 6,20,82, 5,11,67, 0, 0, 0, 6,20,88,15,13,59,
+ 15,13,60,15,13,61, 0, 0, 0, 6,20,84, 0, 0, 0, 6,20,79, 0, 0, 0, 0, 0, 0,
+ 6,28,73, 5,16,79, 5,11,70, 6,28,72, 5,16,76, 5,16,78, 6,28,78, 6,28,75,
+ 6,28,79, 5,16,77, 6,28,74, 6,28,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,28,76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,18,72,15,18,73,15,18,74,
+ 15,18,75,15,18,76,15,18,77,15,18,78, 0, 0, 0, 5,22,35, 6,38, 8, 6,38, 1,
+ 4,21,94, 4,22, 2, 4,22, 1, 5,22,36, 6,38, 3, 6,38, 4, 6,38,11, 6,38,10,
+ 6,67,62, 6,38, 6, 6,38, 2, 6,38, 9, 6,38, 7, 7,20,91, 6,38, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,24,92,15,24,93,15,24,94,15,25, 1,15,25, 2,15,25, 3,
+ 15,25, 4,15,25, 5,15,25, 6,15,25, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,29,24,
+ 5,29,29, 5,29,25, 5,29,26, 5,29,28, 6,48, 5, 6,48, 3, 5,29,20, 5,29,21,
+ 5,29,23, 6,48, 4, 6,48, 9, 7,29,20, 6,48, 7, 5,29,27, 6,48, 8, 6,48, 6,
+ 0, 0, 0,15,32, 2, 0, 0, 0, 0, 0, 0,15,32, 3, 7,29,18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,29,22,
+ 6,57,74, 5,35,91, 5,35,88, 6,57,66, 6,57,73, 6,57,71, 5,35,92, 5,35,89,
+ 5,35,87, 6,67,63, 6,57,67, 6,57,69, 5,35,93, 5,35,90, 6,57,70, 7,36,41,
+ 6,57,68, 7,36,40, 5,35,86, 6,57,63, 6,57,75, 6,57,64, 5,35,85, 0, 0, 0,
+ 6,57,65, 0, 0, 0,15,38, 2,15,38, 3,15,38, 4,15,38, 5,15,38, 6,15,38, 7,
+ 15,38, 8,15,38, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,57,72, 0, 0, 0,
+ 6,57,76, 0, 0, 0, 7,29,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,67,68,
+ 6,67,66, 6,67,70, 4,40, 7, 4,40, 6, 5,50,15, 4,40, 8, 4,40, 9, 5,42,88,
+ 6,67,67, 6,67,64, 4,40, 5, 5,42,89, 5,42,90, 6,67,69, 6,67,71, 7,43,33,
+ /* plane 2, page 143 */
+ 0, 255, /* first, last */
+ 15,45,14,15,45,15,15,45,16,15,45,17,15,45,18,15,45,19, 6,67,65, 0, 0, 0,
+ 5,42,87, 0, 0, 0, 5,50,22, 5,50,20, 5,50,21, 7,10,53, 5,50,24, 5,50,18,
+ 5,50,17, 7,10,47, 5,50,19, 5,50,23, 5,50,16, 7,48,90, 7,10,51, 7,10,49,
+ 7,10,48, 7,10,50, 0, 0, 0,15,50,82,15,50,83,15,50,84,15,50,85,15,50,86,
+ 15,50,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,54, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,57,33, 5,57,34, 4,52,52, 7,20,92, 5,57,36, 5,57,35,
+ 7,20,94, 7,48,89, 0, 0, 0,15,56,73,15,56,74,15,56,75,15,56,76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,74,28, 7,20,93, 5,63,54,
+ 5,63,55, 7,29,22, 7,29,23, 7,29,21, 5,84,57,15,61,49,15,61,50,15,61,51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,61,52, 5,69,66, 7,36,44, 4,62,20,
+ 7,36,42, 7,36,43,15,65,45,15,65,46,15,65,47,15,65,48, 5,74,29, 7,43,35,
+ 7,53,76, 7,43,37, 0, 0, 0, 0, 0, 0,15,68,44, 5,88,35, 0, 0, 0, 7,43,34,
+ 7,43,36, 7,63,87,15,70,82,15,70,83, 0, 0, 0, 7,49,82, 5,81,61, 7,53,78,
+ 7,53,77, 0, 0, 0, 7,66,89, 7,66,90, 7,57,80, 0, 0, 0, 7,61,41, 0, 0, 0,
+ 0, 0, 0, 7,63,88, 5,90,94, 5,91, 1, 7,70,23, 7,70, 8, 6,57,77, 0, 0, 0,
+ 4,46,43, 7,10,55,15,50,89,15,50,88, 5,57,37, 7,21, 1, 0, 0, 0, 4,57,54,
+ 7,36,45, 7,36,46, 5,74,30, 7,48,91, 0, 0, 0, 6,28,80, 6,28,81, 6,28,82,
+ 6,38,12, 5,22,37, 4,22, 3, 6,38,14, 0, 0, 0, 6,38,13, 0, 0, 0, 6,38,16,
+ 0, 0, 0, 6,38,15, 4,27,80, 6,48,12, 4,27,78, 6,48,10, 6,57,83, 6,48,16,
+ 6,48,14, 6,48,11, 4,27,81, 4,27,79, 6,48,15, 6,48,13, 0, 0, 0, 0, 0, 0,
+ 6,57,91, 5,35,94, 6,57,78, 6,57,81, 6,57,87, 6,57,85, 6,57,90, 6,57,82,
+ 6,57,80, 6,57,84, 6,57,89, 6,57,88, 0, 0, 0, 0, 0, 0, 6,57,79, 6,57,86,
+ 0, 0, 0, 0, 0, 0, 6,67,84, 6,67,82, 5,42,91, 6,67,75, 6,67,76, 6,67,86,
+ 6,67,72, 6,67,87, 6,67,80, 4,40,10, 6,67,85, 6,67,79, 5,42,92, 6,67,81,
+ 6,67,73, 5,42,93, 4,40,11, 6,67,74,15,45,20,15,45,21, 6,67,83, 0, 0, 0,
+ 6,67,88, 6,67,77, 0, 0, 0, 7,10,61, 7,10,59, 7,10,68, 7,10,63, 7,10,60,
+ 5,50,26, 7,10,62, 7,10,70, 7,10,66, 7,10,64, 7,10,65, 7,10,67, 7,10,58,
+ 7,10,56, 5,50,25, 7,10,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,71, 0, 0, 0,
+ 4,57,55, 4,52,53, 5,57,39, 7,21, 9, 7,21, 4, 7,21,15, 7,21, 2, 7,21,13,
+ 7,21, 8, 7,21, 5, 7,21,12, 7,21,10, 7,21, 6, 5,57,38, 7,21,16, 4,52,54,
+ 7,21,11, 7,21,19, 7,21, 7, 7,10,57, 7,21,20, 7,21,17, 7,21, 3, 0, 0, 0,
+ 0, 0, 0, 7,21,18,15,56,77, 0, 0, 0, 0, 0, 0, 7,21,14,15,50,90, 4,57,57,
+ /* plane 2, page 144 */
+ 0, 255, /* first, last */
+ 7,29,29, 7,29,27, 7,29,37, 7,29,28, 7,29,30, 7,29,41, 7,29,26, 7,29,34,
+ 7,29,25, 7,29,24, 7,29,31, 5,63,56, 7,29,39, 7,29,33, 7,29,32, 7,29,35,
+ 7,29,40, 7,21,22,15,61,53,15,61,55, 7,29,36, 7,29,38, 0, 0, 0, 7,36,48,
+ 7,36,54, 7,36,50, 7,36,51, 7,36,47, 5,69,67, 7,36,55, 7,36,53, 5,69,68,
+ 7,36,49, 7,36,52, 0, 0, 0, 0, 0, 0, 7,43,42, 7,43,39, 7,43,43, 7,43,40,
+ 5,74,31, 7,43,46, 4,65,79, 5,74,32, 7,43,38, 7,43,44, 7,43,45, 4,65,80,
+ 7,43,41, 7,43,47, 0, 0, 0, 0, 0, 0, 7,49, 3, 7,49, 7, 7,48,93, 7,49,10,
+ 7,49, 4, 7,49,11, 7,49, 8, 7,48,92, 5,78,34, 7,49, 5, 7,49, 6, 5,78,35,
+ 7,49, 2,15,70,84, 7,48,94, 0, 0, 0, 0, 0, 0, 7,49,12, 7,49, 9, 7,53,84,
+ 4,71,72, 7,53,82, 7,53,79, 7,53,86, 7,53,80, 7,53,85, 7,53,83, 7,53,87,
+ 7,49, 1,15,72,86, 7,53,81, 7,57,81, 7,57,82, 4,73,55, 7,57,85, 7,57,86,
+ 7,57,84,15,74,18, 0, 0, 0, 7,57,83, 7,61,24, 7,61,25, 7,61,26, 4,75,11,
+ 7,61,23, 7,61,19, 7,61,20, 7,61,21, 7,61,22, 0, 0, 0, 0, 0, 0, 7,63,92,
+ 7,63,90, 7,63,91, 0, 0, 0, 7,63,89, 7,65,58,15,76,33, 0, 0, 0, 0, 0, 0,
+ 7,67,94, 0, 0, 0, 7,68,75, 0, 0, 0, 0, 0, 0, 7,70,32,15,13,62, 5,16,80,
+ 15,18,80, 6,38,18, 6,38,19, 4,22, 5, 6,38,17,15,25, 8,15,25, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,29,32, 5,29,30, 5,29,33, 5,29,31, 4,27,83, 6,48,19,
+ 4,27,82, 6,48,18,15,32, 5, 0, 0, 0,15,32, 7,15,32, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,33,56, 5,36, 5, 5,36, 2, 5,36, 1, 5,36, 4, 5,36, 3,
+ 6,57,92, 0, 0, 0,15,38,11,15,38,12,15,38,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,36, 6, 5,43, 2, 4,40,16, 5,43, 3, 5,43, 1, 5,42,94, 4,40,12,
+ 4,40,15, 6,67,93, 4,40,18, 0, 0, 0, 6,67,92, 6,67,94,15,45,23, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,15,45,24, 6,67,90, 0, 0, 0, 6,67,89, 0, 0, 0, 7,10,74,
+ 7,10,73, 5,50,37, 5,50,32, 5,50,33, 5,50,31, 5,50,30, 5,50,35, 5,50,29,
+ 4,52,55, 5,50,28, 7,10,75, 7,10,76, 0, 0, 0,15,38,10,15,50,91,15,50,92,
+ 15,50,93,15,50,94,15,51, 1, 0, 0, 0, 7,10,72, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,50,36, 5,50,34, 5,63,57, 7,21,27, 4,52,59, 5,57,46, 5,57,43, 4,52,58,
+ 7,21,24, 5,57,45, 5,57,42, 7,21,26, 5,57,41, 7,21,25, 7,21,23, 0, 0, 0,
+ 5,57,40, 7,21,28, 0, 0, 0,15,56,78, 0, 0, 0, 0, 0, 0,15,56,79,15,56,81,
+ 15,56,82,15,56,83,15,56,84,15,56,85, 0, 0, 0,15,56,80, 0, 0, 0,15,53,68,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,57,44, 4,57,60, 4,57,58, 4,57,59,
+ 5,63,58, 4,57,65, 5,63,60, 0, 0, 0, 4,57,62, 7,29,42, 5,69,72, 7,29,43,
+ /* plane 2, page 145 */
+ 0, 255, /* first, last */
+ 7,29,45, 5,63,59, 0, 0, 0,15,61,57, 7,29,44, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,29,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,61,58, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,63,61, 5,69,76,
+ 5,69,79, 7,36,63, 7,36,67, 5,69,73, 7,36,62, 5,69,70, 7,36,69, 7,36,66,
+ 4,62,23, 5,69,69, 5,69,71, 7,36,65, 7,36,58, 7,36,61, 5,69,78, 7,36,59,
+ 0, 0, 0,15,65,49, 0, 0, 0, 7,36,68, 0, 0, 0, 7,36,57, 7,36,60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,69,75,
+ 5,69,77,15,61,56, 5,69,74, 5,74,39, 5,74,33, 5,74,37, 5,74,34, 5,74,35,
+ 4,65,82, 5,74,38, 5,74,36, 5,74,41, 4,65,81, 7,43,48, 7,43,53, 7,43,49,
+ 0, 0, 0, 5,74,40, 7,43,51,15,68,46, 0, 0, 0, 0, 0, 0, 7,43,55, 7,43,54,
+ 7,43,52, 0, 0, 0, 7,43,50, 7,43,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,49,14, 4,68,84, 7,49,22,
+ 4,68,86, 5,78,36, 4,71,77, 4,68,88, 7,49,20, 7,49,19, 5,78,37, 4,68,90,
+ 4,68,87, 4,68,89, 7,49,15, 7,49,17, 7,49,18,15,70,85, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,49,21, 7,49,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,49,16, 7,49,13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,71,74, 4,71,73, 7,53,88, 5,81,62,
+ 5,81,63, 4,71,75, 4,71,76, 7,53,90, 5,81,64, 5,81,65, 7,53,93, 7,53,89,
+ 7,53,94, 7,53,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,84,60, 5,84,63, 4,73,57, 7,57,88, 5,84,61, 7,57,89, 7,57,90,
+ 5,84,58, 0, 0, 0, 5,84,62, 5,84,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,57,87,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,86,66, 7,61,27, 7,61,28, 0, 0, 0,
+ 0, 0, 0,15,75,19, 0, 0, 0, 5,86,67, 0, 0, 0, 5,88,36, 4,76,18, 4,76,17,
+ 7,63,93, 7,63,94, 7,64, 1,15,75,80, 0, 0, 0, 4,77,12, 5,89,54, 4,77,11,
+ 5,89,53, 0, 0, 0, 7,65,59, 0, 0, 0, 0, 0, 0, 5,89,55, 0, 0, 0, 5,90,36,
+ 7,66,91, 5,90,35, 7,66,92,15,76,57, 7,67, 3, 0, 0, 0, 0, 0, 0, 5,90,34,
+ 7,68,76, 4,78,30, 7,69,43, 7,69,42, 7,69,44, 0, 0, 0, 5,91,76, 0, 0, 0,
+ 0, 0, 0, 7,70,13, 7,70,46, 7,70,49, 4,78,60, 4,22, 6, 0, 0, 0, 6,48,20,
+ 15,38,14,15,38,15,15,38,16, 6,57,93, 4,40,22, 7,12,36, 7,21,29, 5,58,84,
+ 7,36,70,15,68,47, 0, 0, 0, 5,81,66,15,75,81, 0, 0, 0, 6,28,84, 6,14,41,
+ 6,28,83, 4,22, 7, 6,38,20, 4,22, 9,15,25,13, 6,48,21, 5,29,34, 4,27,85,
+ 6,48,23, 6,48,22,15,32, 8,15,32, 9, 0, 0, 0, 6,58, 1, 6,57,94,15,45,27,
+ 4,46,45, 7,10,78, 7,10,77, 0, 0, 0, 7,21,30, 0, 0, 0, 7,49,24, 7,49,25,
+ /* plane 2, page 146 */
+ 3, 255, /* first, last */
+ 6,48,25, 6,48,26, 6,48,24, 4,33,57, 4,33,59,
+ 5,36, 8, 5,36, 7, 6,58, 3, 0, 0, 0, 6,58, 2, 6,68, 2, 5,43, 5, 4,40,25,
+ 0, 0, 0, 6,68, 1, 5,43, 4,15,45,28, 0, 0, 0, 0, 0, 0, 6,68, 3, 0, 0, 0,
+ 0, 0, 0, 4,46,46, 5,50,38, 5,50,40, 5,50,39, 7,10,80, 0, 0, 0, 7,10,79,
+ 15,56,87, 5,57,48, 5,57,47, 5,57,52, 5,57,49, 5,57,50, 5,57,51,15,56,86,
+ 7,21,31, 0, 0, 0, 0, 0, 0, 7,29,47, 5,63,63, 5,63,64, 5,63,66, 5,63,65,
+ 15,61,59, 7,29,49, 5,69,82, 7,36,71, 5,69,80, 5,69,81, 4,62,25, 0, 0, 0,
+ 5,74,43, 5,74,42, 0, 0, 0, 5,78,39, 5,78,38, 7,45,48, 7,49,26, 0, 0, 0,
+ 5,76,38, 5,81,68, 7,54, 2, 5,81,70, 5,81,69,15,72,89, 0, 0, 0, 7,54, 1,
+ 7,54, 4, 7,54, 3, 7,57,91, 7,57,92, 7,61,29, 5,86,68,15,75,20, 0, 0, 0,
+ 0, 0, 0, 7,64, 2, 0, 0, 0, 0, 0, 0, 5,90,37, 0, 0, 0, 7,68, 1, 0, 0, 0,
+ 0, 0, 0, 7,68,78, 7,68,77,15,25,14, 0, 0, 0, 5,29,35, 4,27,88, 6,48,27,
+ 0, 0, 0, 5,36,12, 5,36,11, 6,58, 6, 6,58, 9, 5,36,10, 6,58, 7, 5,36, 9,
+ 6,58, 5, 6,58,11, 6,58,10, 4,33,60, 4,33,62, 0, 0, 0,15,38,17, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,43, 7, 4,40,28, 5,43, 6, 6,68, 7, 6,68, 5, 5,43, 8, 5,43, 9, 4,40,30,
+ 5,43,12, 5,43,10, 5,43,13, 5,43,11, 6,68, 9, 4,40,31, 0, 0, 0, 0, 0, 0,
+ 6,68, 8, 6,68, 4, 0, 0, 0, 6,68, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,10,83, 5,50,41, 7,10,87, 7,10,86, 4,46,49, 7,10,89, 5,50,42, 4,46,50,
+ 7,10,85, 4,46,51, 5,50,45, 4,46,48, 5,50,44, 5,50,46, 7,10,84, 5,50,43,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,88, 7,10,82, 0, 0, 0,
+ 0, 0, 0, 7,21,36, 5,57,53, 5,57,56, 4,52,70, 4,52,62, 4,52,69, 5,57,54,
+ 5,57,55, 0, 0, 0, 7,21,35, 7,21,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,21,32,
+ 7,21,33, 7,21,37, 0, 0, 0, 0, 0, 0, 7,21,38, 0, 0, 0, 0, 0, 0, 7,29,56,
+ 7,29,58, 5,63,67, 5,63,73, 4,57,70, 5,63,69, 7,29,51, 4,57,71, 7,21,34,
+ 5,63,77, 7,29,55, 4,57,69, 7,29,57, 5,63,71, 5,63,74, 7,29,53, 5,63,75,
+ 7,29,59, 7,21,40, 5,63,72, 7,29,52, 7,29,60,15,61,60, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,29,50, 0, 0, 0, 5,63,76, 5,63,70, 4,62,36,
+ 5,69,92, 5,69,84, 4,62,26, 5,69,86, 5,70, 2, 7,36,74, 7,36,72, 4,62,31,
+ 5,69,87, 4,62,32, 7,36,77, 7,36,80, 5,70, 1, 7,36,79, 4,62,29, 5,70, 3,
+ 7,36,81, 7,36,82, 7,36,78,15,65,51,15,65,52, 5,63,68, 7,36,76, 0, 0, 0,
+ 7,36,75, 5,69,88, 5,70, 4, 0, 0, 0, 7,36,73, 5,69,85, 5,69,90, 5,69,89,
+ /* plane 2, page 147 */
+ 0, 251, /* first, last */
+ 5,69,93, 0, 0, 0, 0, 0, 0, 4,65,90, 5,74,49, 5,74,52, 5,74,47, 4,65,89,
+ 5,74,45, 7,43,58, 5,74,53, 7,43,67, 5,74,46, 4,65,88, 7,43,65, 4,65,86,
+ 7,43,62, 4,65,85, 7,43,66, 5,74,48, 7,43,64,15,68,48,15,68,50,15,68,51,
+ 0, 0, 0, 0, 0, 0, 7,43,59, 7,43,60, 0, 0, 0, 5,74,51, 0, 0, 0, 0, 0, 0,
+ 5,74,50, 7,43,57, 5,74,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,69, 4, 5,78,46,
+ 4,68,93, 5,78,47, 5,78,42, 7,49,27, 5,78,40, 7,49,29, 4,69, 1, 5,78,44,
+ 4,69, 2, 4,69, 5, 5,78,45, 7,49,33, 0, 0, 0, 0, 0, 0, 7,49,28,15,70,88,
+ 0, 0, 0, 7,49,30, 7,49,35, 7,49,32, 0, 0, 0, 0, 0, 0, 5,78,43, 7,49,31,
+ 5,78,48, 4,69, 6, 7,49,34, 5,81,77, 7,54, 8, 4,71,79, 7,54,10, 7,54,11,
+ 0, 0, 0, 5,81,74, 5,81,75, 5,81,76, 0, 0, 0, 0, 0, 0, 5,81,71, 5,81,72,
+ 0, 0, 0, 7,54, 9,15,70,87, 5,84,64, 7,58, 6, 7,57,93, 4,73,61, 5,84,65,
+ 7,58, 5, 7,58, 3, 7,57,94, 7,58, 4, 5,84,67, 5,84,68, 7,58, 1, 7,58, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84,69, 5,86,69, 5,86,72, 5,86,70,
+ 7,61,30, 5,86,73, 5,86,71, 7,61,33, 0, 0, 0, 0, 0, 0, 7,61,31, 7,61,34,
+ 0, 0, 0, 7,61,32, 5,88,38, 5,89,56, 7,64, 3, 5,88,37, 0, 0, 0, 5,88,39,
+ 7,65,62, 7,65,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,65,61, 5,90,38,
+ 7,66,94, 7,67, 2, 5,89,57, 0, 0, 0, 7,67, 1, 7,66,93, 0, 0, 0, 5,91, 2,
+ 7,68,80, 7,68,79, 5,91,44, 7,69,73, 5,92,21, 7,70,14, 7,70,25, 7,70,24,
+ 0, 0, 0, 5,92,44, 5,29,36, 4,33,64, 4,33,66, 6,58,12, 0, 0, 0, 5,36,13,
+ 6,68,11, 5,43,15, 5,43,17, 5,43,14, 5,43,16, 6,68,10,15,45,29, 0, 0, 0,
+ 0, 0, 0, 5,43,18, 0, 0, 0, 0, 0, 0, 4,46,53, 5,50,48, 4,46,52, 4,46,54,
+ 7,10,91, 7,10,90, 7,10,92, 7,10,93, 7,10,94, 5,50,47, 5,50,49, 5,57,57,
+ 7,21,41, 7,21,42, 5,57,60, 5,57,61, 0, 0, 0, 5,57,59, 7,21,43, 5,57,58,
+ 4,57,73, 7,29,62, 5,63,78, 7,29,63, 4,57,76, 4,57,74, 5,63,79, 5,63,80,
+ 15,61,61, 7,29,61, 0, 0, 0, 7,29,64, 0, 0, 0, 7,36,86, 7,36,83, 4,62,38,
+ 7,36,84, 7,29,65, 5,70, 5, 7,36,88, 0, 0, 0, 0, 0, 0, 7,36,85, 7,43,68,
+ 7,43,70, 7,43,73, 7,43,69, 7,43,72, 7,43,71, 7,49,36, 5,74,54, 5,74,55,
+ 7,49,37, 7,49,38, 4,69, 8,15,70,89, 0, 0, 0, 0, 0, 0, 5,78,50, 5,78,49,
+ 5,81,78, 5,81,80, 5,81,82, 4,71,84, 7,54,12, 5,81,79, 5,81,81, 0, 0, 0,
+ 7,58, 7, 4,73,63, 5,84,70, 7,58, 8, 7,58, 9, 5,84,71, 7,61,35, 7,61,38,
+ 7,61,37, 7,61,36, 4,76,21, 0, 0, 0, 7,65,63, 5,90,39, 7,68, 4, 7,68, 2,
+ 7,68, 3, 5,91,45, 5,91,77, 5,92, 2,
+ /* plane 2, page 148 */
+ 1, 254, /* first, last */
+ 5,36,14, 6,58,13, 5,50,50, 7,21,44, 4,57,77, 0, 0, 0, 7,29,66,
+ 0, 0, 0, 7,43,76, 7,49,40, 4,69,11, 5,81,83, 7,49,39, 0, 0, 0, 7,54,13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,58,10, 7,61,40, 7,61,39, 7,65,64,15,32,12,
+ 5,36,16, 5,36,15, 5,43,19, 4,40,37, 5,43,20, 0, 0, 0, 5,50,58, 7,11, 1,
+ 5,50,52, 5,50,55, 7,11, 2, 5,50,53, 5,50,54, 5,50,57, 5,50,51, 4,52,75,
+ 5,50,56, 0, 0, 0,15,56,89, 5,57,62, 7,21,45, 7,29,67, 5,63,81, 0, 0, 0,
+ 5,63,82, 5,70, 6, 5,70, 7, 0, 0, 0, 5,70, 8, 4,66, 1, 5,74,56, 5,74,57,
+ 0, 0, 0, 7,49,41, 7,49,42, 5,78,52, 5,78,51, 0, 0, 0, 5,78,53, 7,54,14,
+ 5,81,84, 5,70, 9, 5,84,72, 5,84,73, 0, 0, 0, 4,73,65,15,74,19, 7,61,42,
+ 4,76,22, 5,91, 3, 5,92,31, 6,20,91, 6,38,21, 5,22,38, 0, 0, 0, 0, 0, 0,
+ 5,29,42, 5,29,40, 5,29,41, 5,29,38, 4,27,93, 5,29,37, 4,27,92, 6,48,28,
+ 4,27,90, 4,33,76, 5,36,26, 4,33,75, 5,36,17, 5,36,25, 6,58,15, 4,33,73,
+ 5,43,27, 5,36,23, 4,33,70, 4,33,71, 4,33,74, 6,58,18, 5,36,22, 5,36,18,
+ 6,58,16, 6,58,17, 6,58,14,15,38,19, 5,36,19, 0, 0, 0, 5,36,24, 0, 0, 0,
+ 5,43,29, 6,68,17, 6,68,18, 5,43,23, 5,43,36, 5,43,24, 4,40,41, 4,40,40,
+ 5,43,26, 5,43,22, 4,40,47, 5,43,34, 5,43,25, 7,11,11, 5,43,35, 0, 0, 0,
+ 6,68,21, 6,68,19, 6,68,14, 5,43,28, 5,43,33,15,45,30, 6,68,13, 5,43,32,
+ 6,68,12, 6,68,22, 5,43,21, 6,68,15, 6,68,20, 0, 0, 0, 0, 0, 0, 5,50,61,
+ 4,46,59, 7,11, 5, 7,11,16, 5,50,60, 5,50,59, 4,46,56, 7,11, 4, 7,11,10,
+ 4,40,42, 7,11,14, 5,50,62, 4,46,62, 7,11,13, 7,11, 9, 7,21,47, 7,11,12,
+ 15,51, 3,15,51, 4, 7,11, 7, 0, 0, 0, 7,11, 8, 0, 0, 0, 7,11,15, 7,11,17,
+ 0, 0, 0, 0, 0, 0, 7,11, 3, 7,11, 6, 0, 0, 0, 5,50,63, 4,52,76, 5,57,65,
+ 4,52,78, 5,57,73, 7,21,56, 5,57,72, 5,57,70, 7,21,57, 7,21,55, 5,57,69,
+ 5,57,67, 7,21,59, 7,21,48, 5,57,74, 5,57,66, 5,57,75, 5,57,68, 5,57,71,
+ 4,52,81, 7,21,46, 5,57,64, 7,21,58, 4,52,82, 7,21,54, 7,21,60, 0, 0, 0,
+ 15,45,32,15,56,90,15,56,92,15,56,93,15,57, 1,15,57, 2,15,57, 3, 0, 0, 0,
+ 0, 0, 0, 7,21,50, 0, 0, 0, 7,21,51, 7,21,52, 7,21,53, 5,57,76, 0, 0, 0,
+ 5,57,63,15,56,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,57,77, 4,57,85, 4,57,81,
+ 4,57,78, 7,29,69, 5,63,87, 4,57,89, 5,63,88, 4,57,84, 5,63,86, 5,63,83,
+ 5,63,85, 4,57,79, 5,63,91, 7,29,74, 4,57,82, 7,29,76, 5,63,84, 7,29,71,
+ 4,57,88, 7,29,75,15,61,62,15,61,63,15,61,64,15,61,65,15,61,66,15,61,67,
+ 7,29,68, 0, 0, 0, 7,29,70, 5,63,89, 5,63,90, 7,29,72, 7,29,77,
+ /* plane 2, page 149 */
+ 0, 251, /* first, last */
+ 5,70,10, 4,62,42, 5,70,16, 5,70,14, 4,66, 4, 5,70,13, 5,70,11, 7,36,91,
+ 5,70,12, 4,62,40, 5,70,17, 5,70,15, 7,36,92,15,65,53,15,65,54,15,65,55,
+ 15,65,56, 0, 0, 0, 0, 0, 0, 7,36,89, 7,36,90, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,43,86, 5,74,61, 7,43,80, 7,43,77, 5,74,62, 4,66,14, 7,43,82,
+ 5,74,60, 5,78,54, 5,74,59, 5,74,58, 7,43,84, 7,43,79, 4,66,10, 7,43,78,
+ 7,43,85, 7,43,81, 0, 0, 0, 0, 0, 0,15,68,52,15,68,53, 0, 0, 0, 7,43,87,
+ 7,43,83, 0, 0, 0, 0, 0, 0, 4,69,14, 4,69,13, 5,78,59, 5,78,57, 7,49,46,
+ 5,78,58, 4,69,18, 7,49,45, 4,69,19, 5,78,56, 7,49,43, 7,49,47,15,70,90,
+ 4,69,20, 0, 0, 0, 7,49,48, 0, 0, 0, 0, 0, 0, 7,49,44, 5,78,55, 0, 0, 0,
+ 7,48,44, 5,81,85, 5,81,86, 7,54,15, 5,81,88, 7,54,24, 7,58,17, 4,71,90,
+ 4,71,88, 7,54,19, 7,54,17, 7,54,22, 5,81,87, 5,81,89, 5,81,90, 7,54,16,
+ 7,54,20,15,72,90,15,72,91,15,72,92, 0, 0, 0, 7,54,23, 7,54,21, 7,58,16,
+ 5,84,76, 5,84,75, 7,58,13, 7,58,15, 5,84,74,15,74,20, 7,58,11, 0, 0, 0,
+ 0, 0, 0, 7,58,14, 0, 0, 0, 7,58,12, 7,61,50, 7,61,49, 7,61,47, 5,86,76,
+ 0, 0, 0, 5,86,77, 4,75,14, 5,86,74, 7,61,45, 4,75,15, 7,61,46,15,75,21,
+ 7,61,48, 0, 0, 0, 7,61,44, 0, 0, 0, 7,61,43, 0, 0, 0, 4,76,24, 7,64, 4,
+ 5,86,75, 4,76,23, 0, 0, 0,15,75,82, 7,64, 5, 0, 0, 0, 4,77,14, 5,89,58,
+ 0, 0, 0, 0, 0, 0, 5,90,40, 7,67, 4, 5,90,41, 7,67, 5, 7,67, 6, 4,78, 3,
+ 7,68, 5, 0, 0, 0, 0, 0, 0, 7,69,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,38,22, 6,48,31, 4,28, 1, 6,48,29, 5,29,43, 0, 0, 0,15,32,14,
+ 0, 0, 0, 6,48,30, 5,36,27, 5,36,32, 4,33,79, 5,36,29, 5,36,30, 6,58,20,
+ 6,58,22, 5,36,28, 0, 0, 0, 0, 0, 0, 4,33,80, 0, 0, 0, 6,58,21, 0, 0, 0,
+ 6,51,19, 0, 0, 0, 5,36,31, 6,58,23, 4,40,56, 5,43,40, 4,40,53, 5,43,39,
+ 5,43,38, 5,43,37, 4,40,51, 6,68,23, 4,40,50, 6,68,27, 6,68,25, 0, 0, 0,
+ 0, 0, 0, 6,68,24, 0, 0, 0, 0, 0, 0, 4,46,63, 5,50,66, 4,46,66, 7,11,20,
+ 7,11,19, 7,11,18, 5,50,65, 7,11,21,15,51, 5,15,51, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,57,79, 5,57,87, 5,57,80, 7,21,61, 7,21,64,
+ 5,57,78, 5,57,83, 5,57,86, 7,21,63, 0, 0, 0, 7,21,65, 5,57,84, 5,57,85,
+ 7,21,62,15,57, 5, 5,57,82, 5,57,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,29,81, 4,58, 5, 5,64, 5, 5,64, 6, 4,57,91, 5,63,92, 7,29,80, 4,58, 4,
+ 5,70,18, 5,64, 2, 4,58, 3, 5,63,94, 5,64, 1, 5,64, 4, 5,63,93, 5,64, 3,
+ 7,29,78, 0, 0, 0,15,61,68,15,61,69,
+ /* plane 2, page 150 */
+ 1, 255, /* first, last */
+ 7,29,82, 0, 0, 0, 7,29,79, 0, 0, 0, 4,62,51, 7,37, 2, 7,37, 4,
+ 5,70,23, 7,37, 6, 5,70,20, 5,70,24, 4,62,52, 5,70,26, 4,66,17, 5,70,21,
+ 7,37, 5, 5,70,22, 5,70,25, 5,70,19,15,65,57, 7,37, 8, 7,37, 3, 7,37, 1,
+ 0, 0, 0, 7,37, 7, 7,36,93, 0, 0, 0, 5,74,63, 4,66,19, 4,66,20, 4,66,21,
+ 5,74,64, 7,43,89,15,68,54,15,68,55, 7,43,88, 7,43,90, 7,43,91, 7,43,92,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,78,62, 5,78,65, 5,78,64,
+ 4,69,21, 5,78,60, 4,69,23, 5,78,63,15,70,91, 5,78,66, 5,78,61, 4,69,24,
+ 7,54,32, 4,71,93, 4,72, 1, 5,81,91, 7,54,25, 5,81,92, 7,54,28, 7,54,26,
+ 15,72,93, 7,54,31, 7,54,33, 7,54,34, 7,54,29, 7,54,30, 7,54,27, 0, 0, 0,
+ 7,58,18,15,74,21, 7,58,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,61,51, 0, 0, 0,
+ 0, 0, 0, 5,88,41, 4,76,27, 7,64, 6, 7,64, 7, 0, 0, 0, 5,89,59, 7,65,65,
+ 0, 0, 0, 5,89,60, 4,77,15, 4,77,70, 5,90,42, 5,91, 4, 7,68, 6,15,77, 4,
+ 0, 0, 0, 5,92,39, 0, 0, 0, 0, 0, 0, 7,70,53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,28,85, 5,32,25, 0, 0, 0, 7,11,22, 0, 0, 0, 7,43,93, 5,74,65,
+ 0, 0, 0, 0, 0, 0, 7,54,35, 0, 0, 0, 4,73,68, 5,84,77, 0, 0, 0, 0, 0, 0,
+ 6,20,92, 6,20,93, 6,21, 2, 6,20,94, 5,16,81, 6,28,86, 6,28,88, 5,29,44,
+ 5,22,42, 5,22,39, 6,38,26, 6,38,24, 5,22,41, 6,38,25, 6,38,27, 6,48,32,
+ 0, 0, 0, 0, 0, 0, 5,22,40, 6,48,33, 0, 0, 0, 6,48,38, 4,28, 2, 5,29,45,
+ 6,48,36, 6,48,37, 4,28, 6, 5,29,46, 6,58,24, 5,29,47, 6,48,34, 0, 0, 0,
+ 15,32,15, 0, 0, 0, 0, 0, 0, 6,48,35, 4,28, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6,58,34, 6,58,25, 5,36,34, 5,36,36, 5,36,33, 5,36,39, 4,33,86, 5,36,35,
+ 6,68,35, 5,36,37, 6,58,28, 6,58,27, 6,68,29, 4,33,83, 6,58,26, 6,68,30,
+ 6,58,30, 5,36,40, 6,58,33, 5,50,67, 0, 0, 0,15,38,23, 0, 0, 0, 6,58,32,
+ 6,58,31, 6,68,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,33,88, 5,36,38, 0, 0, 0,
+ 6,68,31, 7,11,23, 6,68,36, 5,43,45, 5,43,41, 6,68,37, 5,43,42, 4,40,58,
+ 6,68,34, 5,43,43, 7,11,25, 6,68,33, 0, 0, 0, 0, 0, 0,15,38,22,15,51, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,11,26, 0, 0, 0, 4,46,75, 7,11,32, 4,46,74,
+ 5,50,73, 5,50,68, 5,57,89, 4,46,72, 5,50,70, 5,50,75, 5,50,72, 4,46,76,
+ 5,50,74, 7,11,28, 5,50,69, 7,11,27, 7,29,83, 5,50,71, 7,11,30, 7,11,29,
+ 0, 0, 0,15,51, 7, 0, 0, 0, 5,57,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,11,31, 5,58, 3, 4,58, 6, 5,58, 4, 4,52,91, 7,21,70, 7,21,74,
+ /* plane 2, page 151 */
+ 0, 248, /* first, last */
+ 5,64, 7, 5,57,91, 7,21,73, 5,57,94, 7,21,71, 5,57,92, 7,21,79, 4,52,89,
+ 7,21,75, 7,21,80, 5,58, 5, 7,21,72, 7,21,67, 5,57,90, 7,21,69, 7,21,68,
+ 7,21,76, 0, 0, 0, 5,64, 9, 7,21,78, 7,29,85, 7,21,66, 5,58, 2, 7,21,77,
+ 0, 0, 0, 0, 0, 0, 5,57,93,15,57, 6,15,57, 7,15,57, 8,15,57, 9, 5,58, 1,
+ 0, 0, 0, 0, 0, 0, 7,29,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,64, 8, 5,64,20, 0, 0, 0, 7,29,87,
+ 5,64,13, 5,64,15, 5,64,19, 5,64,11, 7,29,86, 5,64,18, 5,64,21, 4,58,11,
+ 5,64,22, 7,29,88, 7,29,93, 7,37,10, 7,29,90, 5,64,10, 7,37,11, 7,30, 1,
+ 5,64,14, 7,29,89, 7,29,94, 0, 0, 0, 0, 0, 0,15,61,70,15,61,71, 0, 0, 0,
+ 0, 0, 0, 7,29,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,64,16,
+ 7,29,92, 7,37,15, 5,70,31, 5,70,27, 0, 0, 0, 4,62,54, 4,62,60, 5,64,24,
+ 4,62,61, 5,70,29, 5,64,23, 5,70,28, 7,37,14, 7,37,13, 7,43,94, 4,62,62,
+ 5,70,30, 7,44, 2, 0, 0, 0, 7,49,52, 7,37,12, 0, 0, 0, 7,37, 9, 0, 0, 0,
+ 7,37,17,15,65,58,15,65,59, 0, 0, 0, 7,44, 5, 7,44, 1, 0, 0, 0, 0, 0, 0,
+ 4,62,53, 7,37,18, 0, 0, 0, 0, 0, 0, 7,37,16, 5,74,68, 7,44, 3, 5,74,66,
+ 4,66,27, 4,69,29, 7,49,51, 5,74,73, 5,74,70, 5,74,72, 5,74,74, 7,49,49,
+ 4,66,23, 5,74,71, 5,64,25, 5,74,67, 7,49,50, 4,66,25, 7,49,56, 7,44, 4,
+ 7,49,55, 4,66,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,56,15,68,57,
+ 0, 0, 0, 5,74,69, 7,49,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,74,75, 4,69,30,
+ 7,49,53, 7,49,57, 7,49,63, 7,54,36, 5,81,93, 7,49,64, 5,78,69, 4,69,31,
+ 5,81,94, 5,78,68, 7,49,62, 7,49,66, 5,78,67, 7,44, 7, 7,49,65, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,49,59, 0, 0, 0, 0, 0, 0, 7,49,60, 0, 0, 0, 7,49,61,
+ 0, 0, 0, 0, 0, 0, 7,54,37, 0, 0, 0, 7,49,67, 7,49,58, 5,82, 8, 5,82, 2,
+ 7,54,38, 4,72, 5, 5,82, 4, 5,82, 1, 7,54,39, 5,82,11, 7,54,40, 5,82,10,
+ 5,82, 3, 5,82, 7, 5,82, 5, 7,54,41, 5,82, 6, 5,82, 9, 0, 0, 0,15,72,94,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,73,70, 5,84,78, 5,84,79, 7,58,23, 7,61,52,
+ 7,58,22, 5,84,80, 0, 0, 0, 7,58,21, 0, 0, 0,15,74,23, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,58,20, 5,86,78, 7,61,54, 5,86,79, 5,86,80,
+ 5,88,42, 0, 0, 0, 7,61,53, 0, 0, 0, 0, 0, 0, 5,88,43, 5,88,44, 4,76,28,
+ 7,64, 8, 7,64,10, 0, 0, 0, 0, 0, 0, 7,64, 9, 0, 0, 0, 5,89,61, 7,68, 7,
+ 5,91, 5,
+ /* plane 2, page 152 */
+ 16, 255, /* first, last */
+ 6,28,89, 6,38,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,68,38, 7,11,33, 6,68,40,
+ 0, 0, 0, 6,68,39, 5,50,76, 4,53, 4, 4,53, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,30, 2, 7,30, 3, 7,21,81, 7,21,83, 7,21,82, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,44, 9, 7,44, 8, 7,37,19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,45,83, 0, 0, 0, 7,49,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,64,11,
+ 0, 0, 0, 4,78, 6,15,18,81, 4,33,92, 6,58,35, 0, 0, 0, 5,39,52, 6,68,41,
+ 6,68,42,15,45,33,15,51, 9, 0, 0, 0, 6,68,43, 7,11,34,15,51,10,15,57,10,
+ 7,21,84,15,61,72, 7,30, 4, 0, 0, 0, 7,37,22, 5,70,33, 5,70,32, 0, 0, 0,
+ 5,70,34, 7,37,21, 7,37,20, 5,74,76, 4,66,29, 4,66,30, 0, 0, 0, 0, 0, 0,
+ 7,44,10, 0, 0, 0, 7,49,69,15,70,92, 0, 0, 0, 5,82,12,15,73, 1, 0, 0, 0,
+ 0, 0, 0, 7,54,42, 0, 0, 0, 0, 0, 0, 7,61,55, 5,90,43, 0, 0, 0, 5,22,43,
+ 5,22,44, 5,29,48, 6,48,40, 0, 0, 0, 0, 0, 0,15,32,17, 6,48,39, 0, 0, 0,
+ 5,36,41, 6,58,37, 6,58,36, 6,58,39, 0, 0, 0, 6,58,38, 0, 0, 0, 5,43,49,
+ 6,68,45, 6,68,46, 5,43,48, 4,40,65, 6,68,44, 6,68,50, 5,43,47, 7,11,35,
+ 0, 0, 0,15,45,34,15,45,35,15,45,36,15,45,37, 0, 0, 0, 7,11,38, 0, 0, 0,
+ 6,68,47, 6,68,49, 0, 0, 0, 0, 0, 0, 5,43,50, 7,11,42, 5,50,82, 7,11,46,
+ 7,11,39, 5,58,18, 5,50,84, 5,50,87, 5,50,77, 5,50,80, 5,50,78, 5,50,85,
+ 7,11,36, 5,50,86, 7,11,40, 5,50,83, 7,11,43, 7,11,41, 5,50,79, 7,11,37,
+ 7,11,44, 5,50,81, 0, 0, 0,15,51,11, 0, 0, 0,15,51,12,15,51,13, 7,11,45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,21,90, 4,53,12, 7,21,89,
+ 5,58,15, 4,53,10, 4,53, 7, 4,53,11, 4,53, 8, 7,21,85, 5,58, 9, 4,53, 9,
+ 5,58,16, 5,58,13, 7,22, 4, 5,58,19, 5,58, 7, 5,58,17, 5,58,20, 5,58,11,
+ 7,21,92, 7,21,91, 7,22, 6, 7,22, 1, 7,21,88, 7,22, 3, 0, 0, 0, 5,58,10,
+ 7,22, 2,15,57,12, 5,58, 8, 0, 0, 0, 7,21,93, 7,21,94, 7,22, 7, 0, 0, 0,
+ 7,22, 5,15,57,11, 7,21,86, 0, 0, 0, 0, 0, 0, 7,21,87, 5,64,26, 7,30,12,
+ 5,64,27, 7,30, 6, 4,58,15, 7,30, 7, 7,30, 5, 5,64,28, 4,58,12, 7,30,10,
+ 7,30,11, 5,43,51, 7,30, 8, 5,64,30, 5,64,29, 0, 0, 0, 0, 0, 0,15,61,73,
+ 15,61,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,37,28, 5,70,44, 5,70,43,
+ 5,70,39, 4,62,68, 5,70,41, 5,70,40, 4,62,65, 5,70,37, 5,70,46, 4,62,77,
+ 4,62,73, 4,62,74, 4,62,70, 5,70,47, 5,70,35, 4,62,76, 7,37,27, 7,37,26,
+ /* plane 2, page 153 */
+ 0, 229, /* first, last */
+ 7,37,23, 5,70,42, 0, 0, 0, 0, 0, 0,15,65,61, 0, 0, 0,15,65,62,15,65,64,
+ 0, 0, 0, 4,62,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,65,60,
+ 7,37,24, 0, 0, 0, 5,70,36, 7,37,25, 0, 0, 0, 0, 0, 0, 5,70,45, 5,74,77,
+ 5,74,83, 5,74,79, 4,66,35, 7,44,17, 5,70,48, 7,44,12, 5,70,38, 5,74,81,
+ 5,74,80, 5,74,84, 7,44,11, 5,74,82, 5,74,86, 4,66,34, 5,74,87, 7,44,18,
+ 7,44,20, 5,74,85, 7,44,19, 7,44,13, 7,44,14, 7,44,15,15,68,59, 0, 0, 0,
+ 15,68,60,15,68,61, 0, 0, 0, 7,44,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,55,22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,21, 0, 0, 0, 4,69,37, 7,49,74, 7,49,73,
+ 5,78,78, 5,78,73, 5,78,75, 5,78,72, 4,69,34, 5,78,80,15,70,93, 4,69,35,
+ 4,69,36, 4,69,40, 5,78,81, 5,78,82, 5,78,71, 7,49,72, 4,72, 6, 5,78,74,
+ 5,78,79, 5,78,76, 7,49,75, 7,49,79, 7,49,80, 0, 0, 0, 7,49,81, 7,49,77,
+ 7,49,76, 0, 0, 0,15,70,94,15,71, 1, 7,49,71, 0, 0, 0, 7,49,78, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,50, 7, 0, 0, 0, 7,49,70, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,82,15, 5,82,14, 5,82,17, 4,72, 7, 5,82,18,
+ 5,82,16, 4,72,12, 7,54,45, 7,54,44, 7,54,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,54,43,15,73, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,54,47, 7,54,48, 5,84,88, 7,58,29, 5,82,20, 7,58,33, 7,58,24, 5,84,81,
+ 7,58,27, 5,82,19, 5,84,84, 5,84,87, 5,84,83, 7,58,32, 4,73,76, 5,84,85,
+ 7,58,25, 7,58,26, 0, 0, 0, 0, 0, 0, 7,58,28,15,74,24,15,74,25,15,74,26,
+ 0, 0, 0, 5,84,82, 0, 0, 0, 5,84,89, 7,58,31, 0, 0, 0, 7,61,63, 7,61,61,
+ 5,86,81, 5,88,46, 7,61,60, 7,61,57, 5,86,82, 7,61,58, 7,61,62, 7,61,59,
+ 7,61,64, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,24,15,75,25, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,61,56, 0, 0, 0, 0, 0, 0, 5,88,47, 7,64,17,
+ 7,64,20, 5,88,45, 7,64,19, 7,64,22, 7,64,21, 7,64,15, 7,64,16, 7,64,12,
+ 7,64,18, 0, 0, 0, 5,89,66, 7,65,67, 5,89,67, 5,89,63, 4,77,17, 5,89,64,
+ 7,65,66, 5,89,62, 5,89,65, 4,77,18, 0, 0, 0, 0, 0, 0, 7,65,68, 5,90,44,
+ 5,90,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,78, 7, 7,68, 9, 7,68, 8, 0, 0, 0,
+ 4,78,32, 7,68,82, 7,68,83, 7,68,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,69,46, 5,92, 3, 7,69,74, 7,69,90, 7,69,91, 7,70,36,
+ /* plane 2, page 154 */
+ 17, 255, /* first, last */
+ 5,29,49, 4,28, 7, 0, 0, 0, 0, 0, 0, 6,58,41, 6,58,42, 6,58,40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,58,43, 4,40,67, 4,40,69, 5,43,53, 6,68,56,
+ 5,43,52, 4,40,68, 6,68,54, 6,68,51, 6,68,52, 0, 0, 0, 6,68,53, 6,68,55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,46,82, 4,46,81, 5,50,90, 5,50,89,
+ 7,11,50, 7,22,12, 5,50,88, 5,50,91, 4,46,87, 7,11,48, 7,11,52, 7,11,49,
+ 4,46,88, 0, 0, 0, 7,11,51, 0, 0, 0, 0, 0, 0, 5,58,22, 5,58,21, 4,53,19,
+ 7,22,11, 7,11,47, 7,22,10, 7,22, 9, 0, 0, 0, 0, 0, 0, 7,30,14, 0, 0, 0,
+ 0, 0, 0, 4,58,20, 7,30,18, 4,58,18, 7,30,19, 5,64,31, 7,30,17, 7,30,13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,30,15, 0, 0, 0, 7,30,16, 0, 0, 0, 5,70,57,
+ 7,37,30, 4,62,79, 7,37,29, 5,70,55, 7,37,31, 5,70,50, 5,74,88, 5,70,53,
+ 5,70,51, 5,70,54, 5,70,56, 7,30,20, 0, 0, 0, 0, 0, 0, 5,70,52, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,27, 5,74,90, 5,74,89,
+ 7,44,26, 7,44,23, 5,74,92, 5,74,93, 5,74,91, 7,44,29, 7,44,30, 0, 0, 0,
+ 7,44,25, 7,44,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,28, 7,44,22, 0, 0, 0,
+ 4,69,42, 5,78,85, 5,78,84, 5,78,83, 7,49,83, 7,49,84, 7,49,85, 0, 0, 0,
+ 0, 0, 0, 4,72,15, 5,82,22, 7,54,55, 4,72,14, 5,82,21, 5,82,23, 7,54,51,
+ 7,54,52, 5,82,24, 7,54,53,15,73, 3, 7,54,54, 7,54,50, 0, 0, 0, 4,73,77,
+ 7,58,34, 4,73,80, 7,58,35, 4,73,79, 7,58,36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,61,69, 7,61,70, 5,86,83, 4,75,22, 5,86,85, 4,75,23, 7,61,66, 5,86,84,
+ 7,61,71, 7,61,65, 7,61,67, 7,61,68, 0, 0, 0, 4,76,31, 5,88,48, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,77,20, 7,65,69, 0, 0, 0, 0, 0, 0,15,75,26, 7,67, 7,
+ 5,90,46, 7,67, 8, 0, 0, 0, 7,68,10, 7,68,84, 0, 0, 0, 5,91,78, 4,34, 3,
+ 4,40,70, 5,38,68, 5,43,54, 6,68,58,15,45,38,15,45,39,15,45,40, 0, 0, 0,
+ 0, 0, 0, 6,68,57, 7,11,54,15,51,14,15,51,15, 0, 0, 0, 7,22,14, 7,22,13,
+ 15,57,13,15,57,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,58,22, 0, 0, 0, 5,64,32,
+ 15,61,75,15,61,76, 7,37,32, 0, 0, 0,15,65,65,15,65,66, 7,44,31,15,68,63,
+ 5,78,86,15,71, 2,15,71, 3,15,71, 4,15,71, 5, 4,72,17, 7,54,56, 7,58,37,
+ 7,61,72, 7,61,73, 7,61,74, 7,64,23,15,75,83, 7,65,70, 7,65,71, 7,67, 9,
+ 7,68,11, 4,78, 8, 0, 0, 0, 7,69,92, 6,48,41, 0, 0, 0, 0, 0, 0, 6,48,42,
+ 0, 0, 0, 6,58,45, 6,58,44, 0, 0, 0,15,38,26,15,32,73, 0, 0, 0, 4,40,72,
+ /* plane 2, page 155 */
+ 0, 255, /* first, last */
+ 5,43,56, 6,68,64, 0, 0, 0, 6,68,63, 6,68,61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6,68,65, 6,68,59, 6,68,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,43,55,
+ 5,43,58, 5,50,94, 7,11,55, 7,11,58, 4,46,94, 7,11,56, 5,51, 4, 4,47, 2,
+ 7,11,59, 5,51, 3, 4,46,92, 4,46,93, 5,50,92, 4,46,90, 5,50,93, 5,51, 2,
+ 5,51, 1, 7,11,60, 7,11,57, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,51,16,15,51,17,
+ 15,51,18,15,51,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,22,15, 4,53,23, 7,22,17, 5,58,26, 7,22,16, 4,53,25, 4,53,20, 4,53,27,
+ 5,58,23, 5,58,25, 4,53,26, 4,53,24, 7,22,19, 5,58,24, 0, 0, 0,15,57,15,
+ 15,57,16,15,57,17,15,57,19, 7,22,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,58,26,
+ 4,58,28, 7,30,26, 5,64,33, 5,64,36, 5,64,34, 7,30,24, 5,64,37, 5,64,38,
+ 5,64,35, 7,30,21, 4,58,25, 7,30,22, 0, 0, 0,15,61,77,15,61,78,15,61,79,
+ 7,30,23, 0, 0, 0, 7,30,25, 0, 0, 0, 0, 0, 0, 7,30,27, 7,37,34, 5,70,62,
+ 4,62,81, 5,70,60, 5,70,64, 5,70,63, 7,37,36, 5,70,65, 7,44,32, 7,37,35,
+ 4,62,82, 5,70,58, 4,62,88, 5,70,59, 0, 0, 0,15,65,67,15,65,69, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,70,61,
+ 7,37,33,15,65,68, 4,66,45, 7,44,35, 7,44,39, 5,74,94, 5,75, 1, 5,75, 3,
+ 4,66,48, 7,44,40, 7,44,38, 7,44,33, 5,75, 4, 5,75, 2, 7,44,37, 7,44,34,
+ 4,66,43, 7,44,36, 0, 0, 0,15,68,64,15,68,65,15,68,67, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,78,92, 7,49,86,
+ 5,78,87, 5,78,91, 5,78,90, 5,78,89, 4,69,48, 4,69,44, 5,78,94, 5,78,88,
+ 4,69,43, 7,49,87, 7,49,88, 7,49,91, 0, 0, 0, 0, 0, 0, 7,49,92,15,71, 6,
+ 15,71, 7,15,71, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,78,93, 5,82,27,
+ 5,82,30, 5,82,26, 7,54,57, 4,72,18, 4,72,20, 5,82,25, 4,72,19, 5,82,29,
+ 7,54,58, 5,82,28, 7,54,62, 0, 0, 0,15,73, 4, 7,54,59, 7,54,60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,85, 1, 5,84,92, 7,58,38, 5,85, 2, 5,84,94,
+ 5,84,91, 5,85, 5, 5,85, 4, 5,85, 3, 5,84,93, 5,85, 6, 7,54,61, 4,73,83,
+ 7,58,39, 7,58,40, 0, 0, 0, 0, 0, 0,15,74,27, 0, 0, 0,15,74,28, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,86,87, 4,75,24, 4,75,25, 5,86,86, 7,61,76,
+ 7,61,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,61,75,15,75,27, 4,76,32, 7,64,24,
+ 5,88,49, 4,76,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,76,34, 0, 0, 0, 0, 0, 0,
+ 5,89,69, 7,65,72, 5,89,68, 4,77,22,15,76,34,15,76,35, 0, 0, 0, 0, 0, 0,
+ 7,65,73, 0, 0, 0, 5,90,47, 7,67,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,67,11,
+ /* plane 2, page 156 */
+ 1, 255, /* first, last */
+ 7,68,12, 4,78, 9, 5,91, 6,15,76,82, 7,68,87, 7,68,86, 5,91,46,
+ 0, 0, 0, 4,78,52, 6, 3,29, 6, 3,28, 5,36,43, 5,43,59, 5,43,60, 6,68,66,
+ 7,11,61, 7,22,20, 7,30,28, 7,37,37, 4,62,89, 7,49,94, 7,54,63, 5,82,32,
+ 0, 0, 0, 7,58,41, 0, 0, 0, 0, 0, 0, 7,64,26, 7,64,25, 5,88,51, 5,91,47,
+ 7,11,62, 4,47, 3, 4,53,28, 7,37,38, 7,50, 1, 7,54,65, 7,54,64, 7,58,42,
+ 7,61,78,15,76,83, 5,91,48, 4,34, 4, 6,58,46, 6,68,68, 6,68,67, 7,11,63,
+ 0, 0, 0, 7,22,24, 4,53,30, 5,58,27, 7,22,22, 7,22,21, 4,53,29, 7,22,23,
+ 0, 0, 0, 5,64,39, 0, 0, 0, 0, 0, 0, 7,30,29, 0, 0, 0, 4,62,90, 7,37,40,
+ 7,37,41, 7,37,39, 0, 0, 0, 7,44,41, 5,75, 5, 7,44,42, 0, 0, 0, 4,69,49,
+ 7,50, 4, 7,50, 3, 7,50, 2, 7,50, 5, 7,54,66, 4,72,21, 7,54,68, 5,82,34,
+ 7,54,67, 7,54,69, 7,54,70, 5,85, 7, 7,58,44, 0, 0, 0, 7,61,81, 7,61,82,
+ 5,86,88, 4,73,85, 4,75,26, 7,61,80, 5,86,89, 7,61,79, 0, 0, 0, 7,61,83,
+ 4,76,38, 4,76,37, 7,61,84, 7,64,27, 7,65,75, 7,65,76, 5,90,48, 7,67,12,
+ 7,67,13, 7,67,14, 0, 0, 0, 4,78,10, 7,68,13, 7,68,89, 0, 0, 0, 7,68,88,
+ 7,68,90, 7,69,47, 5,92, 4, 4,78,49, 5,92,13, 7,69,93, 0, 0, 0, 7,70,42,
+ 7,70,43, 6,48,43, 5,29,51, 0, 0, 0, 0, 0, 0, 6,58,50, 5,36,46, 6,58,49,
+ 4,34, 6, 5,36,44, 6,58,48, 5,36,45, 4,34, 5, 6,58,47,15,25,16,15,25,15,
+ 6,58,51, 0, 0, 0, 5,43,63, 5,43,64, 5,43,65, 5,43,62, 5,43,61, 5,43,66,
+ 6,68,72, 6,68,69, 0, 0, 0, 0, 0, 0, 6,68,73,15,45,41,15,45,42,15,45,43,
+ 6,68,75, 6,68,70, 6,68,78, 6,68,76, 6,68,77, 6,68,74, 6,68,71, 0, 0, 0,
+ 0, 0, 0, 4,47, 7, 5,51, 9, 7,11,65, 0, 0, 0, 7,11,64, 5,51, 8, 5,51,11,
+ 5,58,33, 5,51,10, 4,47, 6, 7,11,67, 5,51, 5, 0, 0, 0,15,51,20,15,51,21,
+ 15,51,22, 0, 0, 0, 0, 0, 0, 5,51, 7, 0, 0, 0, 0, 0, 0, 7,11,66, 0, 0, 0,
+ 0, 0, 0, 5,51, 6, 0, 0, 0, 5,58,28, 7,22,26, 5,58,37, 5,58,35, 7,22,25,
+ 4,53,32, 5,58,36, 7,22,27, 0, 0, 0,15,57,20, 5,58,30, 5,58,29, 5,58,31,
+ 5,58,34, 7,22,28, 0, 0, 0, 5,58,32, 4,58,29, 5,64,41, 5,64,44, 5,64,48,
+ 4,58,30, 7,30,30, 5,64,40, 5,64,42, 5,64,47, 5,64,45, 7,30,32, 0, 0, 0,
+ 7,30,33, 7,30,35,15,61,80,15,61,81,15,61,82, 5,64,46, 0, 0, 0, 7,30,31,
+ 7,30,34, 5,64,43, 5,70,67, 7,37,43, 4,62,91, 5,70,73, 7,37,46, 5,70,71,
+ 5,70,69, 7,37,47, 7,37,44, 0, 0, 0,15,65,71, 7,37,42, 7,37,49, 5,70,66,
+ 7,37,45, 7,37,48, 5,70,70, 0, 0, 0, 0, 0, 0, 5,75, 6, 5,75, 9, 7,44,43,
+ 5,75, 7, 7,44,44, 7,44,45, 0, 0, 0,15,68,68,15,68,69,15,68,70,15,68,71,
+ /* plane 2, page 157 */
+ 0, 255, /* first, last */
+ 5,70,68, 0, 0, 0, 0, 0, 0, 5,75, 8, 0, 0, 0, 0, 0, 0, 7,50,11, 4,69,50,
+ 7,50,10, 5,79, 1, 7,50, 9, 7,50, 8, 0, 0, 0, 5,79, 2, 7,50, 6,15,71, 9,
+ 5,82,36, 5,82,38, 5,82,40, 4,72,23, 7,54,71, 7,54,72,15,73, 5, 0, 0, 0,
+ 5,82,37, 5,82,35, 0, 0, 0, 7,54,73, 5,82,39, 5,85,10, 4,66,49, 7,58,48,
+ 4,73,88, 5,85, 8, 7,58,46, 4,73,89, 5,85,11, 0, 0, 0,15,74,29, 0, 0, 0,
+ 5,85,12, 5,85, 9, 4,73,90,15,71,10, 0, 0, 0, 7,58,45, 5,86,91, 5,86,90,
+ 15,73, 6, 5,88,52, 5,88,53, 4,76,39, 7,64,31, 0, 0, 0, 7,64,30, 7,64,32,
+ 7,64,29, 0, 0, 0, 5,89,71, 5,89,70, 0, 0, 0,15,76,36, 0, 0, 0, 7,67,15,
+ 4,78,11, 7,68,14, 7,68,15, 0, 0, 0, 4,78,33, 5,91,49, 0, 0, 0, 5,91,79,
+ 5,92, 5, 0, 0, 0, 5,92,32, 4,16,35, 4,34,10, 4,34, 7, 6,58,53, 4,34, 8,
+ 6,58,54, 5,36,47, 0, 0, 0,15,38,27, 6,68,79, 5,43,69, 4,40,76, 5,43,67,
+ 15,45,44,15,45,45, 0, 0, 0, 5,43,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,47,15, 4,47,19, 4,47,17, 4,47,13, 7,11,72, 5,51,17, 5,51,16, 7,11,69,
+ 7,11,68, 5,51,14, 4,47,24, 5,51,19, 5,51,12, 5,51,13, 7,11,76, 7,11,70,
+ 4,47,22, 5,51,18, 0, 0, 0,15,51,23,15,51,26,15,51,29, 7,11,75, 7,11,71,
+ 7,11,73, 4,47,14, 0, 0, 0, 0, 0, 0,15,51,25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,51,15, 5,58,40, 5,58,38, 7,22,29, 5,58,41, 4,53,38, 4,58,38, 5,58,46,
+ 5,58,45, 4,53,41, 7,22,35, 7,22,30, 7,22,33, 7,22,32, 5,58,44, 0, 0, 0,
+ 0, 0, 0, 7,22,36,15,57,22,15,57,23,15,57,25,15,57,26, 5,58,43, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,22,34,15,57,21, 0, 0, 0, 0, 0, 0, 5,58,39, 0, 0, 0,
+ 7,22,31, 0, 0, 0, 5,64,54, 4,58,40, 5,64,55, 5,64,52, 5,64,50, 4,58,39,
+ 7,30,43, 5,64,53, 7,30,38, 7,30,45, 7,30,37, 4,58,43, 7,30,44, 5,64,58,
+ 5,64,56, 7,30,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,58,42,15,38,28,
+ 15,61,83,15,61,84,15,61,85,15,61,87,15,61,89, 7,30,40, 0, 0, 0, 5,64,59,
+ 0, 0, 0, 0, 0, 0, 5,64,51, 7,30,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,64,49, 5,64,57, 5,70,87, 5,70,84, 5,70,80,
+ 5,70,75, 7,37,51, 4,63, 8, 5,70,77, 7,37,50, 5,70,74, 5,70,81, 5,70,85,
+ 5,70,82, 5,70,79, 5,70,76, 0, 0, 0, 7,37,52,15,65,72,15,65,73,15,65,74,
+ 15,65,75,15,65,76,15,65,77,15,65,78,15,65,79,15,65,81,15,65,83, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,37,53, 0, 0, 0, 7,30,39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,70,86, 5,70,83, 0, 0, 0, 7,44,59,
+ 7,44,56, 4,66,62, 7,44,50, 5,75,13, 4,66,50, 5,75,15, 7,44,47, 7,44,49,
+ /* plane 2, page 158 */
+ 0, 248, /* first, last */
+ 4,66,63, 5,70,88, 4,66,67, 5,75,18, 4,66,59, 7,44,46, 4,66,58, 4,66,69,
+ 7,44,58, 7,44,51, 7,44,57, 4,66,56, 7,44,53, 5,75,22, 5,75,14, 7,44,48,
+ 5,75,20, 0, 0, 0,15,68,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,72,
+ 15,68,74,15,68,76,15,68,79,15,68,80,15,68,81, 0, 0, 0, 0, 0, 0, 5,75,16,
+ 7,44,52, 0, 0, 0, 7,44,55, 0, 0, 0, 0, 0, 0, 4,66,51, 0, 0, 0, 5,75,23,
+ 5,75,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,73, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,75,12,15,65,80, 0, 0, 0, 7,44,54, 0, 0, 0, 5,79, 7, 7,50,14,
+ 5,79, 6, 5,75,24, 5,79, 9, 7,50,12, 4,69,56, 5,79,11, 7,50,15, 7,50,13,
+ 5,79, 8, 4,69,54, 5,79, 4, 7,50,18, 4,69,62, 5,79, 5, 5,79, 3, 4,69,64,
+ 7,50,16, 5,79,12, 7,50,20, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,11,15,71,12,
+ 15,71,13,15,71,15,15,71,16,15,71,17,15,71,18, 0, 0, 0,15,71,14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,79,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,71,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,82,42, 4,72,31, 5,82,47, 5,82,51, 5,87, 3, 5,82,41, 5,82,50,
+ 4,72,24, 7,54,81, 5,82,44, 7,54,82, 5,82,55, 7,54,77, 5,82,52, 5,82,45,
+ 7,54,83, 7,54,85, 7,54,74, 7,54,84, 5,82,54, 7,54,78, 7,54,79, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,73, 8,15,73, 9,15,73,11,
+ 15,73,12,15,73,13,15,73,14,15,73,15,15,73,16,15,73,17,15,73,18, 0, 0, 0,
+ 0, 0, 0, 7,54,75, 7,54,76, 5,82,53, 7,54,80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,82,48, 0, 0, 0, 7,58,52, 7,58,50, 5,85,18,
+ 4,74, 2, 5,85,14, 5,85,15, 7,58,58, 7,58,55, 5,85,16, 7,58,60, 7,58,57,
+ 5,85,20, 7,58,54, 7,58,59, 7,58,51, 7,58,53, 7,58,49, 7,58,62, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,74,33,15,74,34,15,74,35,
+ 15,74,32, 7,58,63, 5,85,19, 7,58,56, 0, 0, 0, 7,58,61, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,85,17, 0, 0, 0,
+ 5,86,94, 7,61,88, 5,87, 2, 4,75,30, 4,75,31, 5,86,92, 7,61,87, 4,69,60,
+ 7,64,38, 7,61,85, 7,62, 2, 7,61,86, 5,86,93, 7,62, 1, 7,61,92, 5,87, 1,
+ 7,61,89, 0, 0, 0,15,75,29,15,75,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,61,90, 0, 0, 0, 7,61,93, 7,61,94, 7,61,91, 0, 0, 0,
+ 15,75,28,
+ /* plane 2, page 159 */
+ 2, 252, /* first, last */
+ 7,64,35, 5,88,60, 5,88,64, 5,88,58, 7,64,33, 4,76,47,
+ 4,76,44, 5,88,57, 5,88,65, 4,76,43, 5,88,63, 5,88,62, 5,88,55, 0, 0, 0,
+ 7,64,43, 7,64,39, 5,88,56, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,85,15,75,88,
+ 7,64,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,64,34, 7,64,36, 7,64,37, 5,88,61,
+ 7,64,42, 7,64,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,65,83, 5,89,72, 4,77,24,
+ 5,89,73, 7,65,78, 7,64,90, 7,65,81, 7,65,79, 5,89,75, 7,65,82, 0, 0, 0,
+ 0, 0, 0, 7,65,80,15,76,37,15,76,38, 5,89,74, 7,65,77, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,67,21, 7,67,16, 7,67,18, 7,67,19, 7,67,20,
+ 5,90,49, 5,90,50,15,76,58,15,76,59,15,76,60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,76,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,67,17, 5,91, 8, 5,91, 7, 7,68,16,
+ 5,91, 9,15,76,84, 0, 0, 0, 7,68,17, 0, 0, 0, 5,91,10, 0, 0, 0, 0, 0, 0,
+ 7,68,18, 0, 0, 0, 7,68,94, 5,91,51, 5,91,50, 5,91,53, 7,68,92, 7,69, 1,
+ 7,68,91, 5,91,52, 0, 0, 0, 7,68,93, 0, 0, 0, 0, 0, 0,15,76,85, 5,91,83,
+ 5,91,82, 5,91,81, 5,91,80, 7,69,48, 5,92, 6,15,77,11,15,77,12, 0, 0, 0,
+ 5,92, 7, 7,69,75, 0, 0, 0, 5,92,14, 0, 0, 0, 5,92,23, 7,70,15, 5,92,22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,51,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,15,61,88, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,30, 0, 0, 0, 6,48,44,
+ 15,32,19, 6,48,45, 4,34,11, 6,58,55, 5,36,49, 5,36,50, 6,58,60, 6,58,56,
+ 6,58,57, 5,36,48, 0, 0, 0, 6,58,58, 6,58,59, 6,68,80, 5,43,74, 6,68,81,
+ 5,43,73, 4,40,78, 4,40,79, 6,68,82, 6,68,83, 6,68,84, 4,40,80, 5,43,72,
+ 0, 0, 0,15,45,47,15,45,48,15,45,49, 5,43,71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4,47,37, 7,11,82, 7,11,93, 7,11,79, 7,11,83, 7,11,89, 5,51,23, 5,51,27,
+ 5,51,29, 5,51,25, 7,11,86, 7,11,92, 5,51,31, 5,51,20, 4,47,29, 5,51,33,
+ 5,51,30, 5,51,21, 4,47,30, 5,51,34, 7,11,90, 4,47,28, 7,11,85, 4,47,35,
+ 4,47,26, 5,51,35, 4,47,38, 7,11,80, 7,11,91, 0, 0, 0, 0, 0, 0,15,51,32,
+ 7,11,78, 7,11,87, 7,11,88, 5,51,22, 5,51,26, 5,51,32, 7,11,81, 7,11,84,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,51,28, 7,22,43, 5,58,52, 5,58,54, 5,58,49,
+ 5,58,47, 4,53,44, 5,58,51, 5,58,57, 5,58,50, 7,22,55, 7,22,50, 5,58,55,
+ 4,53,54, 7,22,52, 5,58,56, 7,22,48, 5,58,53, 7,22,51, 7,22,44, 0, 0, 0,
+ 0, 0, 0, 7,22,37, 7,22,46,15,57,29,15,57,30,15,57,31,15,57,32, 7,22,45,
+ 7,22,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,22,56,
+ /* plane 2, page 160 */
+ 0, 255, /* first, last */
+ 7,22,54, 7,22,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,22,40,
+ 7,22,53, 4,53,51, 4,53,49, 6,48,46, 7,22,41, 5,58,48, 0, 0, 0, 7,22,38,
+ 0, 0, 0,15,54,19, 7,30,49, 4,58,44, 5,64,62, 5,64,73, 7,30,52, 4,58,51,
+ 5,64,71, 7,30,53, 5,64,61, 5,64,65, 0, 0, 0, 7,30,46, 5,64,68, 5,64,75,
+ 5,64,64, 5,64,66, 4,58,52, 7,30,55, 5,64,60, 5,64,67, 4,58,56, 7,30,47,
+ 4,58,59, 5,64,76, 7,30,56, 7,30,51, 5,64,72, 5,64,74, 0, 0, 0, 0, 0, 0,
+ 15,61,90,15,61,91,15,61,92,15,61,93,15,62, 1,15,62, 2,15,62, 3,15,62, 5,
+ 7,30,48, 0, 0, 0, 5,64,63, 0, 0, 0, 4,58,58, 7,30,54, 0, 0, 0, 5,64,69,
+ 5,64,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,30,50, 4,58,55, 7,37,59, 5,64,77, 7,37,63, 5,70,93, 5,71, 5, 5,71, 7,
+ 4,63,14, 5,71,10, 5,70,90, 5,71, 1, 5,70,94, 5,70,91, 7,37,61, 7,37,56,
+ 4,63,13, 7,37,62, 5,70,92, 5,71,11, 4,63,16, 7,37,71, 5,71, 2, 7,37,68,
+ 7,37,60, 5,71, 8, 7,37,65, 7,37,66, 7,37,70, 5,71, 4, 7,37,57, 5,71, 3,
+ 7,37,72, 7,37,54, 7,37,64,15,65,84,15,65,85, 7,37,55, 5,71, 9, 0, 0, 0,
+ 7,37,67, 0, 0, 0, 5,75,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,61,
+ 5,75,26, 7,44,66, 0, 0, 0, 5,75,30, 5,75,42, 5,75,32, 7,44,74, 7,44,68,
+ 5,75,27, 7,44,72, 7,44,75, 7,44,67, 5,75,44, 5,75,29, 5,75,43, 4,66,75,
+ 5,75,34, 5,75,37, 7,44,64, 7,44,62, 5,75,40, 5,75,36, 7,44,60, 7,44,70,
+ 7,44,76, 5,75,33, 0, 0, 0, 4,66,77, 7,44,73, 5,75,38, 0, 0, 0,15,68,84,
+ 15,68,86,15,68,87, 7,44,65, 5,75,39, 0, 0, 0, 7,44,79, 5,75,41, 7,37,73,
+ 0, 0, 0, 7,44,69, 0, 0, 0, 7,44,71, 0, 0, 0, 7,44,77, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,75,35, 0, 0, 0, 0, 0, 0, 7,44,78, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,63, 4,66,73, 5,79,24, 5,79,16,
+ 7,50,26, 4,69,69, 5,79,30, 7,50,35, 5,79,18, 5,79,34, 4,66,80, 7,50,22,
+ 5,79,15, 4,69,67, 5,79,17, 4,69,78, 4,69,72, 5,79,19, 5,79,13, 5,79,23,
+ 5,79,36, 5,79,25, 4,69,77, 4,69,70, 5,79,26, 5,79,28, 5,79,32, 4,69,71,
+ 5,79,14, 5,79,27, 5,79,22, 5,79,31, 7,50,31, 7,50,27, 7,50,32, 7,50,21,
+ 7,50,23, 0, 0, 0, 5,79,29, 5,79,21, 5,79,20, 5,79,35, 0, 0, 0, 0, 0, 0,
+ 7,50,24, 0, 0, 0,15,71,23, 0, 0, 0, 7,50,30, 0, 0, 0, 7,50,29, 7,50,25,
+ 0, 0, 0, 7,50,36, 7,50,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,50,28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,24, 0, 0, 0, 0, 0, 0, 5,79,33, 0, 0, 0,
+ 0, 0, 0, 7,37,58, 5,82,62, 7,54,89, 5,82,70, 7,54,94, 5,82,61, 5,82,64,
+ /* plane 2, page 161 */
+ 0, 255, /* first, last */
+ 5,82,59, 5,82,69, 5,82,68, 7,55, 1, 7,54,93, 7,54,90, 5,82,72, 7,55, 7,
+ 0, 0, 0, 7,55, 6, 7,55, 4, 5,82,60, 5,82,65, 5,79,37, 5,82,58, 5,82,66,
+ 7,55, 2, 7,54,92, 5,82,73, 5,82,74,15,73,20, 0, 0, 0, 0, 0, 0, 5,82,63,
+ 7,55, 3, 0, 0, 0, 0, 0, 0, 7,54,87, 7,55, 8, 0, 0, 0, 7,54,86, 0, 0, 0,
+ 7,54,91, 0, 0, 0, 0, 0, 0,15,73,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,82,56, 7,54,88, 5,82,57,15,71,22, 5,85,34, 5,85,29, 4,74, 4,
+ 4,74,13, 5,85,28, 4,74, 8, 5,85,35, 5,85,25, 5,79,38, 5,85,36, 5,85,32,
+ 5,85,31, 4,74,11, 0, 0, 0, 7,58,66, 7,58,76, 7,58,74, 7,58,80, 4,74,10,
+ 7,58,75, 7,58,78, 5,85,27, 4,74, 9, 7,58,73, 5,85,23, 7,58,72, 5,85,24,
+ 5,85,38, 5,82,71, 7,58,81, 5,85,33, 7,58,79, 7,58,71, 7,55, 5, 0, 0, 0,
+ 0, 0, 0,15,74,36,15,74,37,15,74,38,15,74,39,15,74,40, 5,85,30, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7,58,70, 0, 0, 0, 7,58,68, 0, 0, 0, 0, 0, 0, 7,58,65,
+ 0, 0, 0, 7,58,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,85,26, 7,62,11,
+ 7,62, 7, 7,62,17, 5,87,19, 7,62,15, 5,87,14, 5,87, 9, 4,75,35, 7,62,18,
+ 7,62,22, 5,87, 5, 5,87,16, 5,87,10, 5,87, 8, 5,87,15, 7,62,12, 5,87, 7,
+ 5,87, 6, 5,87,24, 5,87,11, 4,75,41, 4,75,34, 7,62,21, 5,87,17, 7,62,16,
+ 7,62,19, 5,87,13, 7,58,69, 5,87,21, 7,58,77, 7,62,20, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,87,22, 0, 0, 0, 0, 0, 0, 7,62,13,15,75,32, 7,62, 4, 7,62, 6,
+ 0, 0, 0, 0, 0, 0, 7,62,14, 0, 0, 0, 0, 0, 0, 7,62, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,62, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,87,18, 7,62,10, 7,62, 5, 4,75,33,15,75,90, 7,62,23, 7,64,45, 5,88,71,
+ 5,88,73, 5,88,77, 5,88,69, 5,87,23, 5,88,72, 7,64,46, 5,88,74, 5,88,75,
+ 7,64,47, 7,64,48, 7,64,52, 5,88,76, 7,64,51, 7,64,44, 7,64,49, 5,88,67,
+ 0, 0, 0, 5,88,70, 5,88,66,15,75,89, 7,64,50, 0, 0, 0, 4,76,53, 0, 0, 0,
+ 0, 0, 0, 5,88,68, 4,76,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5,89,81, 5,89,77, 5,89,80, 7,65,86, 4,77,27, 5,89,78, 5,89,76,
+ 4,77,28, 0, 0, 0, 7,65,84, 0, 0, 0, 5,89,79, 7,65,88, 0, 0, 0, 0, 0, 0,
+ 7,65,85, 7,65,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,77,30, 5,90,56, 7,67,25, 5,90,54,
+ 4,77,75, 5,90,58, 5,90,57, 5,90,53, 5,90,55, 4,77,74, 7,67,24, 5,90,52,
+ 7,67,27, 5,90,59, 7,67,29,15,76,62, 7,67,26, 0, 0, 0, 0, 0, 0, 7,67,22,
+ /* plane 2, page 162 */
+ 1, 255, /* first, last */
+ 7,67,28, 0, 0, 0, 5,91,14, 7,68,20, 7,68,22, 5,91,15, 5,91,12,
+ 0, 0, 0, 5,91,11, 5,91,17, 5,91,16, 5,91,13, 7,68,23,15,76,86, 0, 0, 0,
+ 4,78,14, 0, 0, 0, 7,68,19, 7,68,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,91,54, 7,69, 2, 7,69,51, 7,69, 4, 7,69, 6, 7,69, 3, 7,69, 7, 5,91,55,
+ 0, 0, 0, 0, 0, 0, 7,69, 5, 0, 0, 0, 4,78,34, 5,91,84, 7,69,52, 7,69,53,
+ 5,91,85, 7,69,50, 7,69,54, 7,69,49, 0, 0, 0, 0, 0, 0, 7,69,77, 7,69,76,
+ 5,92, 9, 5,92, 8,15,77,18, 0, 0, 0, 5,92,15, 7,70, 1, 0, 0, 0, 7,69,94,
+ 5,92,24, 7,70,16, 5,92,25, 7,70,26, 5,92,33,15,77,23, 0, 0, 0, 5,92,40,
+ 7,70,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,40,81, 4,40,82,
+ 5,51,36, 7,12, 2, 7,12, 1, 7,11,94, 5,58,58, 5,58,60, 7,22,58, 7,22,59,
+ 15,57,33, 7,22,57, 0, 0, 0, 5,71,12, 7,30,57, 0, 0, 0, 4,66,81, 7,44,80,
+ 5,75,45, 7,44,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,50,38, 5,79,40, 5,79,41,
+ 7,50,39, 5,79,39, 7,50,41, 7,50,40, 0, 0, 0, 4,72,37, 7,55,11, 7,55,10,
+ 5,82,75, 0, 0, 0, 7,58,83, 0, 0, 0, 7,58,82, 0, 0, 0, 0, 0, 0, 4,75,44,
+ 7,62,24, 7,62,25, 5,87,25, 7,64,53, 4,76,55, 0, 0, 0, 5,89,82, 4,77,31,
+ 7,67,30, 5,91,18, 0, 0, 0, 6,58,61,15,38,29, 5,43,76,15,45,50, 7,12, 8,
+ 5,51,37, 7,12, 7, 0, 0, 0, 7,12, 6, 7,12, 4, 5,51,38, 7,12, 5, 5,51,39,
+ 7,12, 9, 7,12, 3, 0, 0, 0, 7,22,61, 5,58,61, 0, 0, 0,15,57,34, 0, 0, 0,
+ 15,57,35,15,57,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,64,79, 5,64,82, 5,64,80,
+ 4,58,60, 0, 0, 0, 5,64,83, 5,64,81, 7,30,59, 7,30,58, 0, 0, 0, 7,30,62,
+ 0, 0, 0, 7,30,61,15,62, 6, 5,64,78, 7,37,78, 5,71,17, 5,71,14, 5,71,13,
+ 7,37,75, 7,37,77, 7,37,74, 5,71,16, 7,37,76,15,65,88,15,65,89,15,65,90,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,71,15, 5,75,47, 5,75,46, 5,75,49, 4,66,83,
+ 7,44,83, 5,75,48, 0, 0, 0, 7,44,82, 0, 0, 0, 5,72,32, 7,50,43, 4,66,84,
+ 4,69,79, 7,44,84,15,71,25, 0, 0, 0, 7,50,42, 7,50,44, 5,79,42, 4,72,39,
+ 7,55,12, 7,55,13, 4,72,38,15,73,21, 5,85,39, 4,74,14,15,74,41, 0, 0, 0,
+ 0, 0, 0, 5,87,26, 5,87,28, 5,87,27, 0, 0, 0, 7,62,26, 0, 0, 0, 7,62,27,
+ 0, 0, 0, 0, 0, 0, 7,64,54, 4,76,56, 7,64,55,15,75,91, 5,89,85, 5,89,84,
+ 5,88,78, 0, 0, 0, 4,77,32, 4,77,76,15,76,39, 0, 0, 0, 0, 0, 0, 7,69, 8,
+ 7,69,55, 0, 0, 0, 5,92,38, 7,70,39, 6,58,63, 6,58,62, 5,36,51,15,38,31,
+ /* plane 2, page 163 */
+ 1, 255, /* first, last */
+ 4,40,85, 6,68,85,15,45,51, 0, 0, 0, 5,51,43, 5,51,42, 4,47,47,
+ 5,51,41, 5,51,40, 7,12,11, 7,12,15, 7,12,10, 4,47,46, 7,12,12, 0, 0, 0,
+ 5,51,44, 7,12,14, 7,12,13, 0, 0, 0, 7,22,65, 7,22,63, 7,22,62, 7,22,67,
+ 4,53,59, 0, 0, 0, 7,22,66, 6,39,51,15,57,37, 5,58,62, 0, 0, 0, 0, 0, 0,
+ 7,22,64, 0, 0, 0, 5,64,84, 5,64,85, 7,30,64, 7,30,65,15,62, 8, 0, 0, 0,
+ 7,30,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,30,63, 7,37,80, 5,71,18, 7,37,82,
+ 5,71,19, 5,71,21, 7,37,83, 5,71,20,15,65,91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,37,81, 0, 0, 0, 0, 0, 0, 7,37,79, 4,66,90, 4,66,88, 7,44,89, 7,44,91,
+ 7,44,85, 5,75,52, 5,75,50, 7,44,90, 5,75,53, 5,75,51, 7,44,88, 4,66,91,
+ 0, 0, 0, 7,44,87, 0, 0, 0, 7,44,86, 5,79,43, 7,50,51, 7,50,50, 5,79,44,
+ 7,50,48, 4,69,80, 7,50,47, 5,79,46, 5,79,45, 7,50,49,15,71,26, 0, 0, 0,
+ 7,50,46, 0, 0, 0, 7,50,45, 5,82,76, 7,55,15, 5,82,79, 7,55,16, 5,82,78,
+ 7,55,17, 7,55,14, 5,82,77, 5,85,43, 5,85,44, 7,58,84, 5,85,41, 5,85,46,
+ 7,58,91, 7,58,86, 7,58,87, 7,58,92, 7,58,89, 5,85,42, 7,58,85, 7,58,88,
+ 7,58,90, 0, 0, 0, 5,87,31, 4,75,47, 5,87,30, 5,87,32, 5,87,29, 0, 0, 0,
+ 5,88,79, 5,88,81, 5,88,80, 7,64,57, 7,62,28, 4,76,57, 7,64,56, 4,77,77,
+ 7,67,31, 7,68,25, 7,68,24, 5,91,56, 7,69, 9, 0, 0, 0, 4,78,50, 5,92,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 9, 1,15,38,30,15,51,34,
+ 15,62, 7, 0, 0, 0, 5,43,80, 5,43,78, 5,43,79, 5,51,46, 4,47,48, 5,51,45,
+ 0, 0, 0, 0, 0, 0, 7,12,16, 5,58,65, 7,22,68, 5,58,63, 5,58,64,15,57,38,
+ 5,64,88, 5,64,86,15,62, 9, 5,64,87, 5,71,22, 7,44,92, 5,75,54, 7,44,93,
+ 4,69,83, 0, 0, 0, 7,55,18, 5,82,80, 7,58,94, 4,75,48, 7,59,54, 7,62,29,
+ 4,75,49, 0, 0, 0, 5,92,17,15,45,52, 7,12,18, 5,58,66, 5,58,68, 0, 0, 0,
+ 0, 0, 0, 5,58,67, 5,64,90, 5,71,24, 0, 0, 0, 5,64,89, 5,71,25, 0, 0, 0,
+ 0, 0, 0, 5,71,23, 5,75,55, 4,67, 2,15,68,89, 0, 0, 0, 4,69,85, 4,69,84,
+ 5,79,48, 5,79,47, 4,69,87, 7,50,52, 7,50,53, 7,50,54,15,71,27, 0, 0, 0,
+ 0, 0, 0, 7,50,55, 0, 0, 0, 5,82,83, 5,82,82, 5,82,81, 7,55,19, 0, 0, 0,
+ 7,55,20, 5,85,47, 4,74,15, 4,74,16, 7,59, 3, 7,59, 2, 7,59, 1, 0, 0, 0,
+ 0, 0, 0, 7,62,30, 0, 0, 0, 0, 0, 0, 5,88,82, 7,64,58, 5,88,83, 7,65,89,
+ 5,89,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,70, 7, 4,40,86, 5,51,47, 4,47,49,
+ 7,22,72, 7,22,70, 5,58,70, 5,58,69, 5,58,71, 0, 0, 0, 5,64,94, 7,30,68,
+ 5,64,92, 7,30,67, 5,64,91, 4,58,62, 5,64,93, 7,30,69, 7,30,70, 5,71,27,
+ /* plane 2, page 164 */
+ 0, 255, /* first, last */
+ 5,71,26, 0, 0, 0, 4,69,88, 5,79,49, 5,79,51, 0, 0, 0, 0, 0, 0, 5,82,84,
+ 7,55,22, 7,55,21,15,73,22, 5,85,48, 4,75,52, 5,87,34, 5,87,33, 4,75,51,
+ 0, 0, 0, 7,67,32, 7,65,90, 4,77,78, 5,91,58, 7,69,10, 5,91,57, 6,68,86,
+ 5,36,52, 6,68,88, 0, 0, 0, 6,68,87, 7,12,20, 4,47,53, 4,47,52, 5,51,48,
+ 7,12,21, 7,12,22, 0, 0, 0, 0, 0, 0, 7,22,74, 5,58,74, 5,58,72, 5,58,73,
+ 7,22,73, 0, 0, 0, 7,22,75, 7,22,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,58,64, 7,30,72, 5,65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15,62,10, 7,30,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,71,30,
+ 5,71,28, 7,37,84, 5,75,56, 5,65, 2, 5,71,31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5,75,58, 5,75,57, 5,75,59, 5,75,61, 5,75,60, 7,45, 1, 7,44,94, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,79,54, 5,79,55, 7,50,59, 5,79,59, 5,79,57, 5,79,53,
+ 7,50,56, 4,69,94, 4,69,91, 7,50,60, 5,79,58, 4,69,90, 7,50,58, 0, 0, 0,
+ 0, 0, 0,15,71,28, 0, 0, 0, 7,50,57, 0, 0, 0, 7,55,24, 4,72,51, 4,72,49,
+ 5,82,88, 4,72,48, 5,82,91, 7,55,23, 5,82,85, 5,82,89, 5,82,87, 4,72,52,
+ 5,82,86, 4,72,53, 4,74,20, 7,55,25, 7,55,26, 0, 0, 0, 0, 0, 0, 5,82,90,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,85,49, 4,74,19,
+ 4,74,21, 7,59,10, 7,59, 7, 7,59, 6, 4,74,18, 7,59, 9, 0, 0, 0, 0, 0, 0,
+ 7,59, 8, 0, 0, 0, 0, 0, 0, 5,85,50, 7,59, 5, 0, 0, 0, 0, 0, 0, 5,87,39,
+ 7,62,33, 5,87,38, 5,87,36, 5,87,37, 5,87,35, 5,87,40, 7,62,31, 0, 0, 0,
+ 5,88,86, 5,88,87, 7,64,61, 4,76,60, 4,76,64, 5,88,85, 7,64,60, 5,88,84,
+ 4,76,63, 4,76,62, 4,76,61, 7,62,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,64,59,
+ 0, 0, 0, 5,89,88, 5,89,89, 5,89,90, 5,89,87, 4,77,37, 7,65,91, 7,65,92,
+ 4,77,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,90,60, 7,68,26, 0, 0, 0, 0, 0, 0,
+ 7,69,11, 4,78,16, 7,68,27, 5,91,19, 0, 0, 0, 0, 0, 0, 4,78,15, 5,91,59,
+ 5,91,60, 7,69,12, 0, 0, 0, 4,78,42, 5,91,86, 0, 0, 0, 7,69,78, 0, 0, 0,
+ 0, 0, 0, 5,92,42, 7,70,50, 7,37,85, 4,70, 2, 0, 0, 0, 5,82,92, 4,72,55,
+ 5,87,41, 6,68,89, 7,12,24, 7,12,23, 5,65, 4, 7,22,77, 4,58,65, 7,30,73,
+ 7,30,74, 0, 0, 0, 7,37,88, 5,71,34, 7,37,89, 7,37,87, 7,37,86, 4,63,33,
+ 0, 0, 0, 7,45, 4, 7,45, 5, 0, 0, 0, 7,30,75, 7,45, 3, 0, 0, 0, 7,50,62,
+ 7,50,63, 7,50,61, 0, 0, 0, 0, 0, 0, 5,82,93, 7,55,27, 4,74,22, 7,59,12,
+ 7,59,17, 7,59,18, 7,59,14, 7,59,16, 7,59,13, 7,59,11, 7,59,15, 5,87,42,
+ 7,62,34, 5,88,88, 0, 0, 0, 5,89,91, 5,90,61, 4,77,39, 7,67,33, 5,91,20,
+ /* plane 2, page 165 */
+ 0, 255, /* first, last */
+ 7,67,34, 7,69,13, 6,48,47, 0, 0, 0, 7,22,78, 7,22,79, 5,58,75, 0, 0, 0,
+ 7,38,47, 0, 0, 0, 7,69,14, 5,58,76, 0, 0, 0, 5,65, 5, 7,30,77, 5,71,35,
+ 7,37,90, 5,71,36,15,65,93, 0, 0, 0, 7,45, 7, 5,75,64, 7,45, 6, 5,75,62,
+ 5,75,63, 0, 0, 0, 0, 0, 0, 4,67, 5, 4,70, 3, 7,50,64, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4,74,25, 4,72,56, 7,55,28, 7,55,29, 5,85,51, 7,59,20,
+ 7,59,21, 5,85,53, 4,74,24, 7,59,19, 5,85,52, 0, 0, 0, 7,62,35, 7,64,62,
+ 5,88,89, 7,64,63, 0, 0, 0, 5,89,92, 0, 0, 0, 7,67,35, 5,91,21, 5,91,87,
+ 7,12,25, 0, 0, 0, 5,58,77, 7,30,78, 5,58,78, 5,65, 8, 5,65,10, 5,65,11,
+ 5,65, 9, 5,65, 7, 7,30,80, 5,65, 6, 7,30,79, 0, 0, 0, 5,65,12, 0, 0, 0,
+ 4,58,66, 7,37,92, 7,45,12, 5,71,39, 5,71,40, 5,71,38, 5,71,37, 7,37,91,
+ 0, 0, 0, 7,45,10, 5,75,65, 5,75,67, 5,75,66, 0, 0, 0, 0, 0, 0, 7,45,13,
+ 7,45,14, 7,45, 9, 7,50,66, 7,50,68, 7,50,67, 5,79,61, 5,79,62, 7,45,11,
+ 0, 0, 0, 7,50,69, 0, 0, 0, 0, 0, 0, 5,79,60, 0, 0, 0, 0, 0, 0, 7,50,65,
+ 5,83, 1, 5,82,94, 7,55,30, 5,85,55, 7,59,22, 5,85,56, 5,85,57, 5,85,54,
+ 0, 0, 0, 4,74,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,36, 5,87,43, 4,75,57,
+ 7,62,40, 4,75,55, 4,75,58, 7,62,39, 0, 0, 0, 7,62,38, 7,62,37, 5,88,93,
+ 4,76,67, 5,88,91, 5,88,90, 7,64,64, 0, 0, 0, 7,65,94, 7,65,93, 4,77,41,
+ 5,89,93, 0, 0, 0, 0, 0, 0, 5,91,22, 5,91,89, 5,91,88, 7,69,79, 7,70, 2,
+ 4,47,55, 7,22,80, 7,22,81, 7,30,82, 7,30,81, 5,71,41, 7,37,94, 7,38, 1,
+ 7,37,93, 0, 0, 0, 5,75,68, 5,75,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7,50,70, 5,79,63, 5,79,64, 7,50,72, 4,72,59, 5,83, 2, 7,55,31,
+ 7,55,32, 5,83, 3, 5,83, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,59,23, 5,87,44,
+ 7,62,41, 0, 0, 0, 0, 0, 0, 5,88,92,15,75,94, 7,64,65, 5,89,94, 5,90, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,67,38, 5,90,62, 7,67,37, 7,68,28, 0, 0, 0,
+ 0, 0, 0, 4,78,51, 5,92,18, 0, 0, 0,15,32,20, 4,53,68, 4,58,69, 7,38, 2,
+ 0, 0, 0, 4,67, 8, 7,45,15, 5,77,55, 4,70, 4, 4,74,27,15,73,23, 5,90, 3,
+ 5,90, 2, 7,66, 1, 7,69,15, 0, 0, 0, 5,65,14, 7,30,83, 0, 0, 0, 0, 0, 0,
+ 7,38, 5, 4,63,39, 7,38, 4, 7,45,16, 5,75,70, 4,67,10, 7,45,17, 7,45,20,
+ 7,45,18, 7,45,19, 7,45,21, 7,45,22, 5,75,71, 7,50,75, 5,79,67, 5,79,66,
+ 4,70, 8, 7,50,73, 4,70,10, 7,50,77, 4,70, 9, 7,50,78, 0, 0, 0, 7,50,74,
+ 0, 0, 0, 0, 0, 0, 4,40,88, 0, 0, 0, 0, 0, 0, 7,50,76, 7,55,38, 5,83,10,
+ 5,83, 7, 7,55,35, 7,55,34, 4,72,62, 5,83, 8, 4,72,63, 4,72,61, 7,55,36,
+ /* plane 2, page 166 */
+ 0, 214, /* first, last */
+ 5,83, 5, 5,83,11, 0, 0, 0, 0, 0, 0, 7,55,37, 7,55,39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5,83, 9, 7,55,33, 0, 0, 0, 5,83, 6, 7,59,24, 4,74,30,
+ 5,85,60, 5,85,59, 5,85,62, 7,59,32, 7,59,31, 5,85,63, 7,59,26, 5,85,64,
+ 4,74,31, 0, 0, 0, 0, 0, 0, 7,59,25, 5,85,58, 0, 0, 0, 0, 0, 0, 7,59,27,
+ 7,59,29, 7,59,30, 7,59,28, 0, 0, 0, 5,85,61, 5,87,47, 5,87,46, 4,75,62,
+ 4,75,66, 4,75,67, 4,75,63, 0, 0, 0, 4,75,64, 5,87,48, 7,62,46, 0, 0, 0,
+ 7,62,44, 0, 0, 0, 4,75,61, 0, 0, 0, 7,62,42, 0, 0, 0, 7,62,43, 7,62,47,
+ 4,75,68, 4,76,71, 5,88,94, 7,64,71, 4,76,72, 7,64,69, 5,89, 1, 7,66, 3,
+ 4,76,69, 7,64,67, 7,64,70, 7,64,68, 0, 0, 0, 0, 0, 0, 7,64,66, 7,64,72,
+ 5,89, 2, 4,77,46, 4,77,42, 7,66, 5, 5,90, 6, 4,77,48, 4,77,45, 5,90, 4,
+ 7,66, 7, 4,77,47, 7,66, 4, 7,66, 6, 0, 0, 0, 0, 0, 0, 7,66, 8, 7,66, 9,
+ 7,66, 2, 5,90, 5, 7,67,40, 5,90,64, 7,67,39, 5,90,66, 5,90,63, 5,90,65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,68,30, 4,78,18, 7,68,29, 5,91,23, 5,91,25,
+ 0, 0, 0, 5,91,24, 7,68,32, 0, 0, 0, 7,68,33, 0, 0, 0, 7,68,31, 0, 0, 0,
+ 4,78,38, 0, 0, 0, 7,69,18, 5,91,61, 7,69,17, 7,69,16, 7,69,57, 7,69,81,
+ 7,69,82, 5,92,10, 0, 0, 0, 7,69,80, 7,69,83, 5,92,19, 0, 0, 0, 7,70, 4,
+ 7,70, 3, 5,92,27, 7,70,18, 5,92,26, 7,70,17, 0, 0, 0, 7,70,29, 0, 0, 0,
+ 7,70,28, 5,92,37, 0, 0, 0, 7,70,33, 7,70,40, 5,92,46, 5,92,45, 0, 0, 0,
+ 0, 0, 0, 5,75,72, 7,45,23, 4,67,12, 0, 0, 0, 7,50,80, 7,50,79, 7,46, 4,
+ 5,79,68, 7,55,40, 0, 0, 0,15,71,29, 7,59,34, 7,59,33, 7,59,35, 7,59,36,
+ 5,87,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,92,49, 7,22,82, 7,30,84,
+ 7,38, 6, 0, 0, 0, 0, 0, 0, 7,55,41, 5,79,69, 4,70,11, 5,79,71, 5,79,70,
+ 4,70,12, 7,50,83, 0, 0, 0, 7,50,81,15,71,30, 7,50,82, 5,83,12, 5,83,14,
+ 7,55,43, 5,83,15, 5,75,74, 5,83,13, 7,52,10, 7,55,42, 7,45,25, 7,45,24,
+ 5,91,62, 7,65, 9, 5,91,26, 5,87,50, 7,68,34, 0, 0, 0,15,77,13, 0, 0, 0,
+ 5,92,34,15, 9, 6, 5,83,16, 7,66,11, 0, 0, 0, 7,66,10, 5,90,68, 5,90,67,
+ 7,67,42, 7,67,41, 5,91,27, 4,78,39, 7,70, 5, 4,78,54, 7,70,44,
+ /* plane 2, page 167: --- */
+ /* plane 2, page 168: --- */
+ /* plane 2, page 169: --- */
+ /* plane 2, page 170: --- */
+ /* plane 2, page 171: --- */
+ /* plane 2, page 172: --- */
+ /* plane 2, page 173: --- */
+ /* plane 2, page 174: --- */
+ /* plane 2, page 175: --- */
+ /* plane 2, page 176: --- */
+ /* plane 2, page 177: --- */
+ /* plane 2, page 178: --- */
+ /* plane 2, page 179: --- */
+ /* plane 2, page 180: --- */
+ /* plane 2, page 181: --- */
+ /* plane 2, page 182: --- */
+ /* plane 2, page 183: --- */
+ /* plane 2, page 184: --- */
+ /* plane 2, page 185: --- */
+ /* plane 2, page 186: --- */
+ /* plane 2, page 187: --- */
+ /* plane 2, page 188: --- */
+ /* plane 2, page 189: --- */
+ /* plane 2, page 190: --- */
+ /* plane 2, page 191: --- */
+ /* plane 2, page 192: --- */
+ /* plane 2, page 193: --- */
+ /* plane 2, page 194: --- */
+ /* plane 2, page 195: --- */
+ /* plane 2, page 196: --- */
+ /* plane 2, page 197: --- */
+ /* plane 2, page 198: --- */
+ /* plane 2, page 199: --- */
+ /* plane 2, page 200: --- */
+ /* plane 2, page 201: --- */
+ /* plane 2, page 202: --- */
+ /* plane 2, page 203: --- */
+ /* plane 2, page 204: --- */
+ /* plane 2, page 205: --- */
+ /* plane 2, page 206: --- */
+ /* plane 2, page 207: --- */
+ /* plane 2, page 208: --- */
+ /* plane 2, page 209: --- */
+ /* plane 2, page 210: --- */
+ /* plane 2, page 211: --- */
+ /* plane 2, page 212: --- */
+ /* plane 2, page 213: --- */
+ /* plane 2, page 214: --- */
+ /* plane 2, page 215: --- */
+ /* plane 2, page 216: --- */
+ /* plane 2, page 217: --- */
+ /* plane 2, page 218: --- */
+ /* plane 2, page 219: --- */
+ /* plane 2, page 220: --- */
+ /* plane 2, page 221: --- */
+ /* plane 2, page 222: --- */
+ /* plane 2, page 223: --- */
+ /* plane 2, page 224: --- */
+ /* plane 2, page 225: --- */
+ /* plane 2, page 226: --- */
+ /* plane 2, page 227: --- */
+ /* plane 2, page 228: --- */
+ /* plane 2, page 229: --- */
+ /* plane 2, page 230: --- */
+ /* plane 2, page 231: --- */
+ /* plane 2, page 232: --- */
+ /* plane 2, page 233: --- */
+ /* plane 2, page 234: --- */
+ /* plane 2, page 235: --- */
+ /* plane 2, page 236: --- */
+ /* plane 2, page 237: --- */
+ /* plane 2, page 238: --- */
+ /* plane 2, page 239: --- */
+ /* plane 2, page 240: --- */
+ /* plane 2, page 241: --- */
+ /* plane 2, page 242: --- */
+ /* plane 2, page 243: --- */
+ /* plane 2, page 244: --- */
+ /* plane 2, page 245: --- */
+ /* plane 2, page 246: --- */
+ /* plane 2, page 247: --- */
+ /* plane 2, page 248 */
+ 0, 255, /* first, last */
+ 6, 9,22, 6, 1,17, 6, 1, 1, 6, 5,70, 6, 5,82, 4, 5,29, 6,14,65,15,13,72,
+ 6,29,21, 6,48,59, 4,28,16, 6,58,82,15,57,45, 6, 3,50, 3, 4,50, 3, 7,51,
+ 15,71,32, 3, 7,52, 6,29,28, 7,45,30, 6, 1,48, 3, 2,91, 6, 3,57, 3, 1,47,
+ 6,21,36, 4, 1,31, 6, 2,28, 3, 4,33, 7,22,90, 5, 1, 9, 6, 1,24,15, 3,23,
+ 6, 9,67, 6,14,86, 6,38,71, 3,32,35,15, 2, 9, 6,15, 5, 6,21,56, 4,22,44,
+ 4, 1,15, 6, 2,38, 3, 2, 5, 6, 2,41, 3, 3, 9, 6,15,24, 6,38,84, 6,10, 3,
+ 6,15,29, 6,29,57, 6,29,58, 3,26, 6,15, 1,19, 3, 4, 9, 6, 1,65, 6, 6,35,
+ 5,17,17, 6, 2,59, 5, 1,64, 3, 3,28, 4, 3,60, 6, 6,46, 4, 3,59, 6,10,28,
+ 0, 0, 0, 3,16, 3, 6,21,94, 4,16,86, 6,29,92, 6,39,10, 6,39,12, 6,39,16,
+ 6,39,17, 6,39,19, 4,28,48, 6,59,59, 6,49,22, 6,59,57, 7, 1,64, 7,12,69,
+ 3, 1,92, 6, 4,19, 6,22,21, 6,30,12, 6,30,11, 3,20,80, 4,22,86, 6,49,42,
+ 7, 1,86, 7,38,30,15, 3,59, 6,49,55, 5, 3,66, 6, 4,27, 6,49,62, 6,39,54,
+ 6, 2,71,15,10,11, 6,22,44, 6,22,45,15,14,77, 6,30,52, 6,30,48, 6,39,65,
+ 6,49,73,15,39,38, 3,58,19, 7,38,49, 6, 4,40, 4,17,16,15,33,11, 6,60, 2,
+ 3,58,22, 7,64,77, 6, 7, 1, 6,22,71, 6, 4,43, 4, 1,20, 5, 8,83, 6,39,91,
+ 4, 1,21,15, 6,66, 3,12,32, 6,16,46, 6,40,11, 6,40,21, 3,32,94, 6,50,19,
+ 6,60,29, 6, 7,22, 6,60,41,15, 1,63, 6,40,23, 6,23,12, 6,40,28, 7,13,51,
+ 7,13,53, 7,64,78, 5, 9, 7, 6,31,38, 6,31,37, 3,21,63, 6,50,32, 5,37,61,
+ 6, 1,84, 6, 7,42, 6,11,15, 6,16,84, 0, 0, 0,15,10,61, 6,11,25, 7,13,67,
+ 5,83,32, 3,12,49, 6,31,62, 5,13,40, 3,21,69, 6, 7,63,15, 4,19, 5, 4,24,
+ 6,17,22, 6,17,16,15,10,71, 4, 9,42, 6,40,92, 6,40,88, 3,38,80, 6,50,76,
+ 6,50,70, 6,61, 6, 6,61, 4, 4,35,49, 7,13,73, 7,13,89, 7, 2,91, 3,52,64,
+ 4,59,12, 7,39, 8, 3, 6, 7, 6,32, 3, 5, 2,78, 6,11,67, 6,11,64, 6,17,47,
+ 15,11,11, 6,23,81, 3,22, 8, 6,32,22, 6,32,11, 6,41,42, 6,41,16,15,33,63,
+ 7, 3,16, 6,61,24, 5,38,12, 7, 3,13,15,47, 5, 4,42, 7, 7,24,25,15,62,80,
+ 4,13,38, 6,41,55,15,58,22, 3,22,32, 6,24,22, 0, 0, 0,15,33,82, 6,51,28,
+ 5,38,33,15,11,24, 6,17,77, 6,32,55, 6,41,88, 6,61,59, 6,12, 3, 5, 6,42,
+ 4,18,30, 6,32,56, 5,31,70, 4, 4,39, 6, 8,14,15, 4,49, 4, 6,72, 3,13,21,
+ 6,24,42, 3,17,60, 4,13,60, 6,24,48, 5,18,94, 3,28,26, 6,51,62, 5,31,81,
+ 3,33,78, 6,61,72, 7, 3,82,15,52,84, 7,14,74, 4,63,86, 7,56, 3, 6, 5, 3,
+ 6,42,31, 7, 3,88, 7,62,82,15,40,89, 6,51,87, 4,13,69,15,21,84, 6,42,45,
+ 6,12,34,15,40,91, 6, 5,14,15, 4,61, 6,12,59, 6,12,49, 3,13,50, 6,18,25,
+ /* plane 2, page 249 */
+ 0, 255, /* first, last */
+ 6,18,34, 4,10, 5, 4,13,80, 6,25,13, 6,24,84, 6,25, 1,15,16,59, 3,22,85,
+ 6,42,69, 6,42,67, 4,30,19, 6,52,41, 6,52,47,15,34,84, 6,62,30, 7, 4,47,
+ 7, 4,56,15,47,73, 7,15,34,15,53,54, 4,54,61, 7,46, 8, 7,51,64, 7,51,56,
+ 6,12,64, 6,12,61, 6,18,40, 4,24,72,15,35,15, 6,52,57,15,48,29,15,53,56,
+ 5,91,91, 3,53,37, 6,33,65, 6,33,67, 6,33,74, 6,62,62, 6,18,66, 6,43,34,
+ 7,39,85, 6, 2, 6,15, 4,88, 6,13, 4,15,12,25,15,17, 8, 6,43,39,15,35,68,
+ 4,36,78, 7,32,67,15,67, 4, 6,34, 1, 3,29,31, 6,18,89, 4,10,36, 5,19,69,
+ 6,43,54, 4,30,76, 6,34,18,15,42,15, 7,51,91, 6,13,26, 5,19,81,15,54,28,
+ 6,13,37, 6,13,29, 6,19,29, 6,19,17, 5,15, 6,15,12,55, 6,26,13, 6,26,14,
+ 6,34,40, 6,43,90,15,48,63, 7,16,42, 6, 5,31, 6,13,38, 3,35,19, 6,53,75,
+ 7, 5,91, 7,25,77,15, 8,28, 6,19,42,15,29,64, 4,43,64, 7, 6, 7, 6,26,35,
+ 0, 0, 0, 4,37,63, 4,50, 1, 7,16,70, 6,63,85, 7, 6,30, 7, 6,28, 7,16,83,
+ 15,42,91, 6,64, 3,15,49, 3, 7, 6,45, 7,33,28, 5,76,93, 7,17,13, 7,26,19,
+ 4,60,57, 7,33,36, 3,14,54, 6,19,70, 3,40,74,15,49,23, 7, 6,74, 7, 6,73,
+ 4,68, 6, 7,66,45, 6,44,82, 7,26,38,15,30,18, 7,26,41, 7,40,77, 7,63,28,
+ 6,45, 3,15,55, 7, 4,11, 6, 7, 7, 8,15,55, 8, 6,64,61, 5,40,84,15,60,13,
+ 6, 8,91, 4, 7,72, 6,13,73, 3,19,48, 5,27,48, 6,45,40,15,36,72,15,43,55,
+ 15,43,54, 4,44,54, 4,56,13, 4,20,55, 6,45,62, 3,36, 5, 6,65, 5, 3, 7,10,
+ 6, 5,50, 6, 9, 7,15, 8,60, 6, 9, 8, 0, 0, 0, 6,14, 2, 6,14, 3, 6,20,36,
+ 6,14, 4, 6,27,50,15,18,26, 4,20,83, 6,36,11, 4,20,84, 6,35,86, 6,36,27,
+ 4,26,70, 6,36,30, 6,36,28, 6,36,29, 6,46,27, 6,65,30, 6,65,47,15,49,68,
+ 4,44,89, 7, 7,65, 7, 7,77, 7,18,36,15,55,39, 7,26,79,15,64,61, 7,34,28,
+ 7,52,62, 4,71,11, 0, 0, 0, 6,20,39, 4,32,47, 7,27,24, 3,59, 6, 6,27,81,
+ 4,26,85, 6,46,38, 4,38,92, 4,45,19,15,50, 4, 7, 8,14,15,49,93, 7,34,64,
+ 7,34,63, 3,59,13, 4,68,31, 4,51,44, 6, 5,51, 5,16,30, 6,56,14, 6,56,12,
+ 15,37,29, 7,27,65,15,24,42, 5,90,24, 6,28,13, 4,21,37,15,31,27, 6,66,39,
+ 7,19,47, 7,57,33, 6, 9,10, 6,56,48, 0, 0, 0, 6,56,60, 3,64,92, 6,28,27,
+ 7,19,89, 7,19,83,15,31,51, 3,36,77, 7, 9,36, 6,20,61, 4,16,12, 7,20,17,
+ 4,52,23, 7,28,65, 6, 5,59, 4,21,82, 6,57,39, 6,57,42, 7,28,75,15,37,83,
+ 6,67,51, 6,67,47, 4,52,42,15,70,62, 7,48,75,15,76,31, 6,67,56, 7,20,90,
+ 7,20,81,15,65,42, 6,48, 2, 6,67,78, 7,21,21, 3,54,88, 5,63,62, 7,29,48,
+ 15,56,88, 7,43,63, 4,69,10, 7,43,75, 5,29,39, 5,36,21, 6,58,19, 6,68,16,
+ /* plane 2, page 250 */
+ 0, 29, /* first, last */
+ 4,57,86, 6,68,26, 6,28,87, 6,58,29, 4,53, 3, 4,62,64, 6,68,48, 7,30, 9,
+ 7,11,53,15,57,18, 7,49,90, 7,58,64, 4,58,57, 7,37,69, 4,63,23, 4,66,78,
+ 7,50,37, 5,85,22, 5,85,21,15,76,87, 7,30,60, 6,38,30, 4,72,47, 6,58,64,
+ 4, 8,20, 3,60,15, 5,51,49, 7,45, 8, 4,40,87, 7,62,45,
+ /* plane 2, page 251: --- */
+ /* plane 2, page 252: --- */
+ /* plane 2, page 253: --- */
+ /* plane 2, page 254: --- */
+ /* plane 2, page 255: --- */
+ /* plane 3: --- */
+ /* plane 4: --- */
+ /* plane 5: --- */
+ /* plane 6: --- */
+ /* plane 7: --- */
+ /* plane 8: --- */
+ /* plane 9: --- */
+ /* plane 10: --- */
+ /* plane 11: --- */
+ /* plane 12: --- */
+ /* plane 13: --- */
+ /* plane 14: --- */
+ /* plane 15: --- */
+ /* plane 16: --- */
+};
+
+sal_Int32 const aImplUnicodeToCns116431992PageOffsets[] = {
+ 0, /* plane 0, page 0; 20/245 bytes (8.2%) */
+ -1, /* plane 0, page 1 */
+ 245, /* plane 0, page 2; 17/59 bytes (28.8%) */
+ 304, /* plane 0, page 3; 146/173 bytes (84.4%) */
+ -1, /* plane 0, page 4 */
+ -1, /* plane 0, page 5 */
+ -1, /* plane 0, page 6 */
+ -1, /* plane 0, page 7 */
+ -1, /* plane 0, page 8 */
+ -1, /* plane 0, page 9 */
+ -1, /* plane 0, page 10 */
+ -1, /* plane 0, page 11 */
+ -1, /* plane 0, page 12 */
+ -1, /* plane 0, page 13 */
+ -1, /* plane 0, page 14 */
+ -1, /* plane 0, page 15 */
+ -1, /* plane 0, page 16 */
+ -1, /* plane 0, page 17 */
+ -1, /* plane 0, page 18 */
+ -1, /* plane 0, page 19 */
+ -1, /* plane 0, page 20 */
+ -1, /* plane 0, page 21 */
+ -1, /* plane 0, page 22 */
+ -1, /* plane 0, page 23 */
+ -1, /* plane 0, page 24 */
+ -1, /* plane 0, page 25 */
+ -1, /* plane 0, page 26 */
+ -1, /* plane 0, page 27 */
+ -1, /* plane 0, page 28 */
+ -1, /* plane 0, page 29 */
+ -1, /* plane 0, page 30 */
+ -1, /* plane 0, page 31 */
+ 477, /* plane 0, page 32; 41/134 bytes (30.6%) */
+ 611, /* plane 0, page 33; 95/455 bytes (20.9%) */
+ 1066, /* plane 0, page 34; 59/515 bytes (11.5%) */
+ -1, /* plane 0, page 35 */
+ 1581, /* plane 0, page 36; 161/380 bytes (42.4%) */
+ 1961, /* plane 0, page 37; 164/692 bytes (23.7%) */
+ 2653, /* plane 0, page 38; 20/188 bytes (10.6%) */
+ -1, /* plane 0, page 39 */
+ -1, /* plane 0, page 40 */
+ -1, /* plane 0, page 41 */
+ -1, /* plane 0, page 42 */
+ -1, /* plane 0, page 43 */
+ -1, /* plane 0, page 44 */
+ -1, /* plane 0, page 45 */
+ -1, /* plane 0, page 46 */
+ -1, /* plane 0, page 47 */
+ 2841, /* plane 0, page 48; 89/758 bytes (11.7%) */
+ 3599, /* plane 0, page 49; 113/113 bytes (100.0%) */
+ 3712, /* plane 0, page 50; 5/5 bytes (100.0%) */
+ 3717, /* plane 0, page 51; 35/218 bytes (16.1%) */
+ 3935, /* plane 0, page 52; 548/767 bytes (71.4%) */
+ 4702, /* plane 0, page 53; 623/770 bytes (80.9%) */
+ 5472, /* plane 0, page 54; 653/767 bytes (85.1%) */
+ 6239, /* plane 0, page 55; 692/767 bytes (90.2%) */
+ 7006, /* plane 0, page 56; 662/770 bytes (86.0%) */
+ 7776, /* plane 0, page 57; 698/767 bytes (91.0%) */
+ 8543, /* plane 0, page 58; 662/764 bytes (86.6%) */
+ 9307, /* plane 0, page 59; 641/767 bytes (83.6%) */
+ 10074, /* plane 0, page 60; 695/770 bytes (90.3%) */
+ 10844, /* plane 0, page 61; 647/770 bytes (84.0%) */
+ 11614, /* plane 0, page 62; 674/770 bytes (87.5%) */
+ 12384, /* plane 0, page 63; 716/767 bytes (93.4%) */
+ 13151, /* plane 0, page 64; 710/770 bytes (92.2%) */
+ 13921, /* plane 0, page 65; 704/767 bytes (91.8%) */
+ 14688, /* plane 0, page 66; 740/770 bytes (96.1%) */
+ 15458, /* plane 0, page 67; 707/770 bytes (91.8%) */
+ 16228, /* plane 0, page 68; 698/770 bytes (90.6%) */
+ 16998, /* plane 0, page 69; 740/770 bytes (96.1%) */
+ 17768, /* plane 0, page 70; 725/770 bytes (94.2%) */
+ 18538, /* plane 0, page 71; 716/770 bytes (93.0%) */
+ 19308, /* plane 0, page 72; 719/770 bytes (93.4%) */
+ 20078, /* plane 0, page 73; 668/767 bytes (87.1%) */
+ 20845, /* plane 0, page 74; 755/770 bytes (98.1%) */
+ 21615, /* plane 0, page 75; 746/770 bytes (96.9%) */
+ 22385, /* plane 0, page 76; 716/770 bytes (93.0%) */
+ 23155, /* plane 0, page 77; 515/548 bytes (94.0%) */
+ 23703, /* plane 0, page 78; 599/770 bytes (77.8%) */
+ 24473, /* plane 0, page 79; 692/770 bytes (89.9%) */
+ 25243, /* plane 0, page 80; 734/770 bytes (95.3%) */
+ 26013, /* plane 0, page 81; 704/767 bytes (91.8%) */
+ 26780, /* plane 0, page 82; 716/770 bytes (93.0%) */
+ 27550, /* plane 0, page 83; 704/770 bytes (91.4%) */
+ 28320, /* plane 0, page 84; 689/770 bytes (89.5%) */
+ 29090, /* plane 0, page 85; 683/770 bytes (88.7%) */
+ 29860, /* plane 0, page 86; 710/770 bytes (92.2%) */
+ 30630, /* plane 0, page 87; 692/770 bytes (89.9%) */
+ 31400, /* plane 0, page 88; 713/770 bytes (92.6%) */
+ 32170, /* plane 0, page 89; 731/770 bytes (94.9%) */
+ 32940, /* plane 0, page 90; 731/770 bytes (94.9%) */
+ 33710, /* plane 0, page 91; 734/770 bytes (95.3%) */
+ 34480, /* plane 0, page 92; 674/770 bytes (87.5%) */
+ 35250, /* plane 0, page 93; 722/770 bytes (93.8%) */
+ 36020, /* plane 0, page 94; 716/770 bytes (93.0%) */
+ 36790, /* plane 0, page 95; 740/770 bytes (96.1%) */
+ 37560, /* plane 0, page 96; 692/770 bytes (89.9%) */
+ 38330, /* plane 0, page 97; 749/770 bytes (97.3%) */
+ 39100, /* plane 0, page 98; 707/770 bytes (91.8%) */
+ 39870, /* plane 0, page 99; 686/767 bytes (89.4%) */
+ 40637, /* plane 0, page 100; 719/761 bytes (94.5%) */
+ 41398, /* plane 0, page 101; 731/770 bytes (94.9%) */
+ 42168, /* plane 0, page 102; 734/770 bytes (95.3%) */
+ 42938, /* plane 0, page 103; 716/770 bytes (93.0%) */
+ 43708, /* plane 0, page 104; 668/770 bytes (86.8%) */
+ 44478, /* plane 0, page 105; 692/770 bytes (89.9%) */
+ 45248, /* plane 0, page 106; 728/770 bytes (94.5%) */
+ 46018, /* plane 0, page 107; 731/770 bytes (94.9%) */
+ 46788, /* plane 0, page 108; 695/770 bytes (90.3%) */
+ 47558, /* plane 0, page 109; 683/770 bytes (88.7%) */
+ 48328, /* plane 0, page 110; 704/770 bytes (91.4%) */
+ 49098, /* plane 0, page 111; 746/770 bytes (96.9%) */
+ 49868, /* plane 0, page 112; 710/770 bytes (92.2%) */
+ 50638, /* plane 0, page 113; 737/770 bytes (95.7%) */
+ 51408, /* plane 0, page 114; 719/770 bytes (93.4%) */
+ 52178, /* plane 0, page 115; 716/770 bytes (93.0%) */
+ 52948, /* plane 0, page 116; 731/770 bytes (94.9%) */
+ 53718, /* plane 0, page 117; 683/770 bytes (88.7%) */
+ 54488, /* plane 0, page 118; 704/770 bytes (91.4%) */
+ 55258, /* plane 0, page 119; 734/767 bytes (95.7%) */
+ 56025, /* plane 0, page 120; 677/764 bytes (88.6%) */
+ 56789, /* plane 0, page 121; 728/770 bytes (94.5%) */
+ 57559, /* plane 0, page 122; 713/770 bytes (92.6%) */
+ 58329, /* plane 0, page 123; 680/770 bytes (88.3%) */
+ 59099, /* plane 0, page 124; 731/770 bytes (94.9%) */
+ 59869, /* plane 0, page 125; 749/770 bytes (97.3%) */
+ 60639, /* plane 0, page 126; 455/479 bytes (95.0%) */
+ 61118, /* plane 0, page 127; 572/608 bytes (94.1%) */
+ 61726, /* plane 0, page 128; 698/770 bytes (90.6%) */
+ 62496, /* plane 0, page 129; 686/770 bytes (89.1%) */
+ 63266, /* plane 0, page 130; 695/770 bytes (90.3%) */
+ 64036, /* plane 0, page 131; 662/770 bytes (86.0%) */
+ 64806, /* plane 0, page 132; 695/770 bytes (90.3%) */
+ 65576, /* plane 0, page 133; 740/770 bytes (96.1%) */
+ 66346, /* plane 0, page 134; 710/770 bytes (92.2%) */
+ 67116, /* plane 0, page 135; 734/770 bytes (95.3%) */
+ 67886, /* plane 0, page 136; 710/770 bytes (92.2%) */
+ 68656, /* plane 0, page 137; 686/770 bytes (89.1%) */
+ 69426, /* plane 0, page 138; 746/770 bytes (96.9%) */
+ 70196, /* plane 0, page 139; 470/482 bytes (97.5%) */
+ 70678, /* plane 0, page 140; 599/605 bytes (99.0%) */
+ 71283, /* plane 0, page 141; 518/770 bytes (67.3%) */
+ 72053, /* plane 0, page 142; 713/770 bytes (92.6%) */
+ 72823, /* plane 0, page 143; 575/770 bytes (74.7%) */
+ 73593, /* plane 0, page 144; 716/770 bytes (93.0%) */
+ 74363, /* plane 0, page 145; 713/770 bytes (92.6%) */
+ 75133, /* plane 0, page 146; 755/770 bytes (98.1%) */
+ 75903, /* plane 0, page 147; 755/770 bytes (98.1%) */
+ 76673, /* plane 0, page 148; 389/401 bytes (97.0%) */
+ 77074, /* plane 0, page 149; 332/383 bytes (86.7%) */
+ 77457, /* plane 0, page 150; 632/686 bytes (92.1%) */
+ 78143, /* plane 0, page 151; 707/770 bytes (91.8%) */
+ 78913, /* plane 0, page 152; 554/770 bytes (71.9%) */
+ 79683, /* plane 0, page 153; 602/770 bytes (78.2%) */
+ 80453, /* plane 0, page 154; 572/770 bytes (74.3%) */
+ 81223, /* plane 0, page 155; 728/770 bytes (94.5%) */
+ 81993, /* plane 0, page 156; 419/770 bytes (54.4%) */
+ 82763, /* plane 0, page 157; 737/770 bytes (95.7%) */
+ 83533, /* plane 0, page 158; 485/770 bytes (63.0%) */
+ 84303, /* plane 0, page 159; 431/500 bytes (86.2%) */
+ -1, /* plane 0, page 160 */
+ -1, /* plane 0, page 161 */
+ -1, /* plane 0, page 162 */
+ -1, /* plane 0, page 163 */
+ -1, /* plane 0, page 164 */
+ -1, /* plane 0, page 165 */
+ -1, /* plane 0, page 166 */
+ -1, /* plane 0, page 167 */
+ -1, /* plane 0, page 168 */
+ -1, /* plane 0, page 169 */
+ -1, /* plane 0, page 170 */
+ -1, /* plane 0, page 171 */
+ -1, /* plane 0, page 172 */
+ -1, /* plane 0, page 173 */
+ -1, /* plane 0, page 174 */
+ -1, /* plane 0, page 175 */
+ -1, /* plane 0, page 176 */
+ -1, /* plane 0, page 177 */
+ -1, /* plane 0, page 178 */
+ -1, /* plane 0, page 179 */
+ -1, /* plane 0, page 180 */
+ -1, /* plane 0, page 181 */
+ -1, /* plane 0, page 182 */
+ -1, /* plane 0, page 183 */
+ -1, /* plane 0, page 184 */
+ -1, /* plane 0, page 185 */
+ -1, /* plane 0, page 186 */
+ -1, /* plane 0, page 187 */
+ -1, /* plane 0, page 188 */
+ -1, /* plane 0, page 189 */
+ -1, /* plane 0, page 190 */
+ -1, /* plane 0, page 191 */
+ -1, /* plane 0, page 192 */
+ -1, /* plane 0, page 193 */
+ -1, /* plane 0, page 194 */
+ -1, /* plane 0, page 195 */
+ -1, /* plane 0, page 196 */
+ -1, /* plane 0, page 197 */
+ -1, /* plane 0, page 198 */
+ -1, /* plane 0, page 199 */
+ -1, /* plane 0, page 200 */
+ -1, /* plane 0, page 201 */
+ -1, /* plane 0, page 202 */
+ -1, /* plane 0, page 203 */
+ -1, /* plane 0, page 204 */
+ -1, /* plane 0, page 205 */
+ -1, /* plane 0, page 206 */
+ -1, /* plane 0, page 207 */
+ -1, /* plane 0, page 208 */
+ -1, /* plane 0, page 209 */
+ -1, /* plane 0, page 210 */
+ -1, /* plane 0, page 211 */
+ -1, /* plane 0, page 212 */
+ -1, /* plane 0, page 213 */
+ -1, /* plane 0, page 214 */
+ -1, /* plane 0, page 215 */
+ -1, /* plane 0, page 216 */
+ -1, /* plane 0, page 217 */
+ -1, /* plane 0, page 218 */
+ -1, /* plane 0, page 219 */
+ -1, /* plane 0, page 220 */
+ -1, /* plane 0, page 221 */
+ -1, /* plane 0, page 222 */
+ -1, /* plane 0, page 223 */
+ -1, /* plane 0, page 224 */
+ -1, /* plane 0, page 225 */
+ -1, /* plane 0, page 226 */
+ -1, /* plane 0, page 227 */
+ -1, /* plane 0, page 228 */
+ -1, /* plane 0, page 229 */
+ -1, /* plane 0, page 230 */
+ -1, /* plane 0, page 231 */
+ -1, /* plane 0, page 232 */
+ -1, /* plane 0, page 233 */
+ -1, /* plane 0, page 234 */
+ -1, /* plane 0, page 235 */
+ -1, /* plane 0, page 236 */
+ -1, /* plane 0, page 237 */
+ -1, /* plane 0, page 238 */
+ -1, /* plane 0, page 239 */
+ -1, /* plane 0, page 240 */
+ -1, /* plane 0, page 241 */
+ -1, /* plane 0, page 242 */
+ -1, /* plane 0, page 243 */
+ -1, /* plane 0, page 244 */
+ -1, /* plane 0, page 245 */
+ -1, /* plane 0, page 246 */
+ -1, /* plane 0, page 247 */
+ -1, /* plane 0, page 248 */
+ -1, /* plane 0, page 249 */
+ 84803, /* plane 0, page 250; 5/5 bytes (100.0%) */
+ -1, /* plane 0, page 251 */
+ -1, /* plane 0, page 252 */
+ -1, /* plane 0, page 253 */
+ 84808, /* plane 0, page 254; 152/182 bytes (83.5%) */
+ 84990, /* plane 0, page 255; 272/689 bytes (39.5%) */
+ /* plane 1: --- */
+ 85679, /* plane 2, page 0; 431/767 bytes (56.2%) */
+ 86446, /* plane 2, page 1; 485/764 bytes (63.5%) */
+ 87210, /* plane 2, page 2; 599/770 bytes (77.8%) */
+ 87980, /* plane 2, page 3; 506/758 bytes (66.8%) */
+ 88738, /* plane 2, page 4; 500/764 bytes (65.4%) */
+ 89502, /* plane 2, page 5; 563/770 bytes (73.1%) */
+ 90272, /* plane 2, page 6; 584/770 bytes (75.8%) */
+ 91042, /* plane 2, page 7; 530/764 bytes (69.4%) */
+ 91806, /* plane 2, page 8; 578/770 bytes (75.1%) */
+ 92576, /* plane 2, page 9; 569/764 bytes (74.5%) */
+ 93340, /* plane 2, page 10; 545/770 bytes (70.8%) */
+ 94110, /* plane 2, page 11; 602/743 bytes (81.0%) */
+ 94853, /* plane 2, page 12; 521/758 bytes (68.7%) */
+ 95611, /* plane 2, page 13; 407/758 bytes (53.7%) */
+ 96369, /* plane 2, page 14; 371/770 bytes (48.2%) */
+ 97139, /* plane 2, page 15; 404/770 bytes (52.5%) */
+ 97909, /* plane 2, page 16; 353/746 bytes (47.3%) */
+ 98655, /* plane 2, page 17; 422/764 bytes (55.2%) */
+ 99419, /* plane 2, page 18; 482/749 bytes (64.4%) */
+ 100168, /* plane 2, page 19; 497/767 bytes (64.8%) */
+ 100935, /* plane 2, page 20; 464/770 bytes (60.3%) */
+ 101705, /* plane 2, page 21; 515/767 bytes (67.1%) */
+ 102472, /* plane 2, page 22; 527/767 bytes (68.7%) */
+ 103239, /* plane 2, page 23; 602/770 bytes (78.2%) */
+ 104009, /* plane 2, page 24; 545/770 bytes (70.8%) */
+ 104779, /* plane 2, page 25; 512/758 bytes (67.5%) */
+ 105537, /* plane 2, page 26; 557/770 bytes (72.3%) */
+ 106307, /* plane 2, page 27; 428/761 bytes (56.2%) */
+ 107068, /* plane 2, page 28; 539/764 bytes (70.5%) */
+ 107832, /* plane 2, page 29; 560/770 bytes (72.7%) */
+ 108602, /* plane 2, page 30; 485/761 bytes (63.7%) */
+ 109363, /* plane 2, page 31; 476/740 bytes (64.3%) */
+ 110103, /* plane 2, page 32; 563/767 bytes (73.4%) */
+ 110870, /* plane 2, page 33; 545/767 bytes (71.1%) */
+ 111637, /* plane 2, page 34; 587/770 bytes (76.2%) */
+ 112407, /* plane 2, page 35; 545/767 bytes (71.1%) */
+ 113174, /* plane 2, page 36; 608/767 bytes (79.3%) */
+ 113941, /* plane 2, page 37; 560/770 bytes (72.7%) */
+ 114711, /* plane 2, page 38; 572/770 bytes (74.3%) */
+ 115481, /* plane 2, page 39; 560/770 bytes (72.7%) */
+ 116251, /* plane 2, page 40; 491/770 bytes (63.8%) */
+ 117021, /* plane 2, page 41; 542/770 bytes (70.4%) */
+ 117791, /* plane 2, page 42; 488/758 bytes (64.4%) */
+ 118549, /* plane 2, page 43; 509/770 bytes (66.1%) */
+ 119319, /* plane 2, page 44; 533/767 bytes (69.5%) */
+ 120086, /* plane 2, page 45; 437/770 bytes (56.8%) */
+ 120856, /* plane 2, page 46; 506/767 bytes (66.0%) */
+ 121623, /* plane 2, page 47; 533/755 bytes (70.6%) */
+ 122378, /* plane 2, page 48; 536/770 bytes (69.6%) */
+ 123148, /* plane 2, page 49; 527/770 bytes (68.4%) */
+ 123918, /* plane 2, page 50; 416/770 bytes (54.0%) */
+ 124688, /* plane 2, page 51; 503/758 bytes (66.4%) */
+ 125446, /* plane 2, page 52; 593/770 bytes (77.0%) */
+ 126216, /* plane 2, page 53; 521/758 bytes (68.7%) */
+ 126974, /* plane 2, page 54; 539/770 bytes (70.0%) */
+ 127744, /* plane 2, page 55; 539/767 bytes (70.3%) */
+ 128511, /* plane 2, page 56; 584/767 bytes (76.1%) */
+ 129278, /* plane 2, page 57; 593/770 bytes (77.0%) */
+ 130048, /* plane 2, page 58; 563/770 bytes (73.1%) */
+ 130818, /* plane 2, page 59; 617/770 bytes (80.1%) */
+ 131588, /* plane 2, page 60; 533/746 bytes (71.4%) */
+ 132334, /* plane 2, page 61; 551/767 bytes (71.8%) */
+ 133101, /* plane 2, page 62; 533/770 bytes (69.2%) */
+ 133871, /* plane 2, page 63; 530/770 bytes (68.8%) */
+ 134641, /* plane 2, page 64; 533/767 bytes (69.5%) */
+ 135408, /* plane 2, page 65; 506/755 bytes (67.0%) */
+ 136163, /* plane 2, page 66; 512/755 bytes (67.8%) */
+ 136918, /* plane 2, page 67; 539/767 bytes (70.3%) */
+ 137685, /* plane 2, page 68; 491/767 bytes (64.0%) */
+ 138452, /* plane 2, page 69; 590/770 bytes (76.6%) */
+ 139222, /* plane 2, page 70; 521/770 bytes (67.7%) */
+ 139992, /* plane 2, page 71; 530/764 bytes (69.4%) */
+ 140756, /* plane 2, page 72; 521/740 bytes (70.4%) */
+ 141496, /* plane 2, page 73; 527/764 bytes (69.0%) */
+ 142260, /* plane 2, page 74; 566/767 bytes (73.8%) */
+ 143027, /* plane 2, page 75; 536/764 bytes (70.2%) */
+ 143791, /* plane 2, page 76; 506/770 bytes (65.7%) */
+ 144561, /* plane 2, page 77; 512/770 bytes (66.5%) */
+ 145331, /* plane 2, page 78; 506/755 bytes (67.0%) */
+ 146086, /* plane 2, page 79; 509/770 bytes (66.1%) */
+ 146856, /* plane 2, page 80; 590/761 bytes (77.5%) */
+ 147617, /* plane 2, page 81; 509/770 bytes (66.1%) */
+ 148387, /* plane 2, page 82; 491/770 bytes (63.8%) */
+ 149157, /* plane 2, page 83; 545/767 bytes (71.1%) */
+ 149924, /* plane 2, page 84; 494/770 bytes (64.2%) */
+ 150694, /* plane 2, page 85; 530/770 bytes (68.8%) */
+ 151464, /* plane 2, page 86; 449/767 bytes (58.5%) */
+ 152231, /* plane 2, page 87; 500/767 bytes (65.2%) */
+ 152998, /* plane 2, page 88; 461/767 bytes (60.1%) */
+ 153765, /* plane 2, page 89; 563/770 bytes (73.1%) */
+ 154535, /* plane 2, page 90; 545/770 bytes (70.8%) */
+ 155305, /* plane 2, page 91; 623/770 bytes (80.9%) */
+ 156075, /* plane 2, page 92; 647/764 bytes (84.7%) */
+ 156839, /* plane 2, page 93; 587/770 bytes (76.2%) */
+ 157609, /* plane 2, page 94; 518/770 bytes (67.3%) */
+ 158379, /* plane 2, page 95; 578/770 bytes (75.1%) */
+ 159149, /* plane 2, page 96; 545/755 bytes (72.2%) */
+ 159904, /* plane 2, page 97; 575/743 bytes (77.4%) */
+ 160647, /* plane 2, page 98; 536/770 bytes (69.6%) */
+ 161417, /* plane 2, page 99; 557/767 bytes (72.6%) */
+ 162184, /* plane 2, page 100; 602/767 bytes (78.5%) */
+ 162951, /* plane 2, page 101; 617/767 bytes (80.4%) */
+ 163718, /* plane 2, page 102; 575/752 bytes (76.5%) */
+ 164470, /* plane 2, page 103; 503/731 bytes (68.8%) */
+ 165201, /* plane 2, page 104; 524/770 bytes (68.1%) */
+ 165971, /* plane 2, page 105; 608/770 bytes (79.0%) */
+ 166741, /* plane 2, page 106; 587/770 bytes (76.2%) */
+ 167511, /* plane 2, page 107; 653/770 bytes (84.8%) */
+ 168281, /* plane 2, page 108; 662/770 bytes (86.0%) */
+ 169051, /* plane 2, page 109; 611/770 bytes (79.4%) */
+ 169821, /* plane 2, page 110; 635/770 bytes (82.5%) */
+ 170591, /* plane 2, page 111; 605/770 bytes (78.6%) */
+ 171361, /* plane 2, page 112; 611/770 bytes (79.4%) */
+ 172131, /* plane 2, page 113; 608/770 bytes (79.0%) */
+ 172901, /* plane 2, page 114; 572/734 bytes (77.9%) */
+ 173635, /* plane 2, page 115; 590/767 bytes (76.9%) */
+ 174402, /* plane 2, page 116; 602/770 bytes (78.2%) */
+ 175172, /* plane 2, page 117; 614/770 bytes (79.7%) */
+ 175942, /* plane 2, page 118; 617/770 bytes (80.1%) */
+ 176712, /* plane 2, page 119; 560/770 bytes (72.7%) */
+ 177482, /* plane 2, page 120; 596/767 bytes (77.7%) */
+ 178249, /* plane 2, page 121; 590/761 bytes (77.5%) */
+ 179010, /* plane 2, page 122; 659/770 bytes (85.6%) */
+ 179780, /* plane 2, page 123; 635/770 bytes (82.5%) */
+ 180550, /* plane 2, page 124; 659/767 bytes (85.9%) */
+ 181317, /* plane 2, page 125; 596/767 bytes (77.7%) */
+ 182084, /* plane 2, page 126; 575/770 bytes (74.7%) */
+ 182854, /* plane 2, page 127; 632/770 bytes (82.1%) */
+ 183624, /* plane 2, page 128; 461/770 bytes (59.9%) */
+ 184394, /* plane 2, page 129; 485/764 bytes (63.5%) */
+ 185158, /* plane 2, page 130; 497/752 bytes (66.1%) */
+ 185910, /* plane 2, page 131; 578/764 bytes (75.7%) */
+ 186674, /* plane 2, page 132; 557/767 bytes (72.6%) */
+ 187441, /* plane 2, page 133; 533/764 bytes (69.8%) */
+ 188205, /* plane 2, page 134; 602/770 bytes (78.2%) */
+ 188975, /* plane 2, page 135; 611/770 bytes (79.4%) */
+ 189745, /* plane 2, page 136; 551/770 bytes (71.6%) */
+ 190515, /* plane 2, page 137; 506/770 bytes (65.7%) */
+ 191285, /* plane 2, page 138; 461/764 bytes (60.3%) */
+ 192049, /* plane 2, page 139; 440/758 bytes (58.0%) */
+ 192807, /* plane 2, page 140; 485/770 bytes (63.0%) */
+ 193577, /* plane 2, page 141; 494/761 bytes (64.9%) */
+ 194338, /* plane 2, page 142; 515/725 bytes (71.0%) */
+ 195063, /* plane 2, page 143; 614/770 bytes (79.7%) */
+ 195833, /* plane 2, page 144; 617/770 bytes (80.1%) */
+ 196603, /* plane 2, page 145; 515/770 bytes (66.9%) */
+ 197373, /* plane 2, page 146; 575/761 bytes (75.6%) */
+ 198134, /* plane 2, page 147; 614/758 bytes (81.0%) */
+ 198892, /* plane 2, page 148; 662/764 bytes (86.6%) */
+ 199656, /* plane 2, page 149; 590/758 bytes (77.8%) */
+ 200414, /* plane 2, page 150; 566/767 bytes (73.8%) */
+ 201181, /* plane 2, page 151; 524/749 bytes (70.0%) */
+ 201930, /* plane 2, page 152; 536/722 bytes (74.2%) */
+ 202652, /* plane 2, page 153; 485/692 bytes (70.1%) */
+ 203344, /* plane 2, page 154; 530/719 bytes (73.7%) */
+ 204063, /* plane 2, page 155; 545/770 bytes (70.8%) */
+ 204833, /* plane 2, page 156; 647/767 bytes (84.4%) */
+ 205600, /* plane 2, page 157; 575/770 bytes (74.7%) */
+ 206370, /* plane 2, page 158; 461/749 bytes (61.5%) */
+ 207119, /* plane 2, page 159; 548/755 bytes (72.6%) */
+ 207874, /* plane 2, page 160; 581/770 bytes (75.5%) */
+ 208644, /* plane 2, page 161; 530/770 bytes (68.8%) */
+ 209414, /* plane 2, page 162; 542/767 bytes (70.7%) */
+ 210181, /* plane 2, page 163; 614/767 bytes (80.1%) */
+ 210948, /* plane 2, page 164; 560/770 bytes (72.7%) */
+ 211718, /* plane 2, page 165; 593/770 bytes (77.0%) */
+ 212488, /* plane 2, page 166; 503/647 bytes (77.7%) */
+ -1, /* plane 2, page 167 */
+ -1, /* plane 2, page 168 */
+ -1, /* plane 2, page 169 */
+ -1, /* plane 2, page 170 */
+ -1, /* plane 2, page 171 */
+ -1, /* plane 2, page 172 */
+ -1, /* plane 2, page 173 */
+ -1, /* plane 2, page 174 */
+ -1, /* plane 2, page 175 */
+ -1, /* plane 2, page 176 */
+ -1, /* plane 2, page 177 */
+ -1, /* plane 2, page 178 */
+ -1, /* plane 2, page 179 */
+ -1, /* plane 2, page 180 */
+ -1, /* plane 2, page 181 */
+ -1, /* plane 2, page 182 */
+ -1, /* plane 2, page 183 */
+ -1, /* plane 2, page 184 */
+ -1, /* plane 2, page 185 */
+ -1, /* plane 2, page 186 */
+ -1, /* plane 2, page 187 */
+ -1, /* plane 2, page 188 */
+ -1, /* plane 2, page 189 */
+ -1, /* plane 2, page 190 */
+ -1, /* plane 2, page 191 */
+ -1, /* plane 2, page 192 */
+ -1, /* plane 2, page 193 */
+ -1, /* plane 2, page 194 */
+ -1, /* plane 2, page 195 */
+ -1, /* plane 2, page 196 */
+ -1, /* plane 2, page 197 */
+ -1, /* plane 2, page 198 */
+ -1, /* plane 2, page 199 */
+ -1, /* plane 2, page 200 */
+ -1, /* plane 2, page 201 */
+ -1, /* plane 2, page 202 */
+ -1, /* plane 2, page 203 */
+ -1, /* plane 2, page 204 */
+ -1, /* plane 2, page 205 */
+ -1, /* plane 2, page 206 */
+ -1, /* plane 2, page 207 */
+ -1, /* plane 2, page 208 */
+ -1, /* plane 2, page 209 */
+ -1, /* plane 2, page 210 */
+ -1, /* plane 2, page 211 */
+ -1, /* plane 2, page 212 */
+ -1, /* plane 2, page 213 */
+ -1, /* plane 2, page 214 */
+ -1, /* plane 2, page 215 */
+ -1, /* plane 2, page 216 */
+ -1, /* plane 2, page 217 */
+ -1, /* plane 2, page 218 */
+ -1, /* plane 2, page 219 */
+ -1, /* plane 2, page 220 */
+ -1, /* plane 2, page 221 */
+ -1, /* plane 2, page 222 */
+ -1, /* plane 2, page 223 */
+ -1, /* plane 2, page 224 */
+ -1, /* plane 2, page 225 */
+ -1, /* plane 2, page 226 */
+ -1, /* plane 2, page 227 */
+ -1, /* plane 2, page 228 */
+ -1, /* plane 2, page 229 */
+ -1, /* plane 2, page 230 */
+ -1, /* plane 2, page 231 */
+ -1, /* plane 2, page 232 */
+ -1, /* plane 2, page 233 */
+ -1, /* plane 2, page 234 */
+ -1, /* plane 2, page 235 */
+ -1, /* plane 2, page 236 */
+ -1, /* plane 2, page 237 */
+ -1, /* plane 2, page 238 */
+ -1, /* plane 2, page 239 */
+ -1, /* plane 2, page 240 */
+ -1, /* plane 2, page 241 */
+ -1, /* plane 2, page 242 */
+ -1, /* plane 2, page 243 */
+ -1, /* plane 2, page 244 */
+ -1, /* plane 2, page 245 */
+ -1, /* plane 2, page 246 */
+ -1, /* plane 2, page 247 */
+ 213135, /* plane 2, page 248; 761/770 bytes (98.8%) */
+ 213905, /* plane 2, page 249; 758/770 bytes (98.4%) */
+ 214675, /* plane 2, page 250; 92/92 bytes (100.0%) */
+ -1, /* plane 2, page 251 */
+ -1, /* plane 2, page 252 */
+ -1, /* plane 2, page 253 */
+ -1, /* plane 2, page 254 */
+ -1, /* plane 2, page 255 */
+ /* plane 3: --- */
+ /* plane 4: --- */
+ /* plane 5: --- */
+ /* plane 6: --- */
+ /* plane 7: --- */
+ /* plane 8: --- */
+ /* plane 9: --- */
+ /* plane 10: --- */
+ /* plane 11: --- */
+ /* plane 12: --- */
+ /* plane 13: --- */
+ /* plane 14: --- */
+ /* plane 15: --- */
+ /* plane 16: --- */
+};
+
+sal_Int32 const aImplUnicodeToCns116431992PlaneOffsets[] = {
+ 0 * 256, /* plane 0; 496/1024 bytes (48.4%), 74432/85679 bytes (86.9%) */
+ -1, /* plane 1 */
+ 1 * 256, /* plane 2; 680/1024 bytes (66.4%), 92476/129088 bytes (71.6%) */
+ -1, /* plane 3 */
+ -1, /* plane 4 */
+ -1, /* plane 5 */
+ -1, /* plane 6 */
+ -1, /* plane 7 */
+ -1, /* plane 8 */
+ -1, /* plane 9 */
+ -1, /* plane 10 */
+ -1, /* plane 11 */
+ -1, /* plane 12 */
+ -1, /* plane 13 */
+ -1, /* plane 14 */
+ -1, /* plane 15 */
+ -1, /* plane 16 */
+ /* 8/68 bytes (11.8%), 1176/2048 bytes (57.4%), 166908/214767 bytes (77.7%) */
+};
diff --git a/sal/textenc/generate/gb180302000.pl b/sal/textenc/generate/gb180302000.pl
new file mode 100644
index 000000000..7543e7a69
--- /dev/null
+++ b/sal/textenc/generate/gb180302000.pl
@@ -0,0 +1,296 @@
+#!/usr/bin/env perl
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+# The following files must be available in a ./input subdir:
+
+# <http://oss.software.ibm.com/cvs/icu/~checkout~/charset/data/xml/
+# gb-18030-2000.xml?rev=1.4&content-type=text/plain>:
+# "modified version="3" date="2001-02-21""
+
+$id = "Gb180302000";
+
+sub printUtf32
+{
+ my $utf32 = $_[0];
+ return sprintf("U+%04X", $utf32);
+}
+
+sub printGb
+{
+ if (defined($_[2]))
+ {
+ return sprintf("%02X%02X%02X%02X", $_[0], $_[1], $_[2], $_[3]);
+ }
+ elsif (defined($_[1]))
+ {
+ return sprintf("%02X%02X", $_[0], $_[1]);
+ }
+ else
+ {
+ return sprintf("%02X", $_[0]);
+ }
+}
+
+$gb_map_2_count = 0;
+$gb_map_4_count = 0;
+$gb_map_4_ranges = 0;
+$gb_map_4_max = 0;
+$uni_map_count = 0;
+
+$range_count = 0;
+
+if (1)
+{
+ $filename = "gb-18030-2000.xml";
+ open IN, ("input/" . $filename) or die "Cannot read " . $filename;
+ while (<IN>)
+ {
+ if (/^[ \t]*<a +u=\"([0-9A-F]+)\" +b=\"([0-7][0-9A-F])\"\/>$/)
+ {
+ $utf32 = oct("0x" . $1);
+ $gb1 = oct("0x" . $2);
+ ($utf32 == $gb1)
+ or die "Bad " . printUtf32($utf32) . " to " . printGb($gb1);
+ }
+ elsif (/^[ \t]*<a +u=\"([0-9A-F]+)\" +b=\"([89A-F][0-9A-F]) ([4-789A-F][0-9A-F])\"\/>$/)
+ {
+ $utf32 = oct("0x" . $1);
+ $gb1 = oct("0x" . $2);
+ $gb2 = oct("0x" . $3);
+ $gb_code = ($gb1 - 0x81) * 190
+ + ($gb2 <= 0x7E ? $gb2 - 0x40 : $gb2 - 0x80 + 63);
+ !defined($gb_map_2[$gb_code])
+ or die "Redefined " . printGb($gb1, $gb2);
+ $gb_map_2[$gb_code] = $utf32;
+ ++$gb_map_2_count;
+
+ !defined($uni_map[$utf32]) or die "Double Unicode mapping";
+ $uni_map[$utf32] = $gb1 << 8 | $gb2;
+ ++$uni_map_count;
+ }
+ elsif (/^[ \t]*<a +u=\"([0-9A-F]+)\" +b=\"([89A-F][0-9A-F]) (3[0-9]) ([89A-F][0-9A-F]) (3[0-9])\"\/>$/)
+ {
+ $utf32 = oct("0x" . $1);
+ $gb1 = oct("0x" . $2);
+ $gb2 = oct("0x" . $3);
+ $gb3 = oct("0x" . $4);
+ $gb4 = oct("0x" . $5);
+ $gb_code = ($gb1 - 0x81) * 12600
+ + ($gb2 - 0x30) * 1260
+ + ($gb3 - 0x81) * 10
+ + ($gb4 - 0x30);
+ !defined($gb_map_4[$gb_code])
+ or die "Redefined " . printGb($gb1, $gb2, $gb3, $gb4);
+ $gb_map_4[$gb_code] = $utf32;
+ ++$gb_map_4_count;
+ $gb_map_4_max = $gb_code if ($gb_code > $gb_map_4_max);
+
+ !defined($uni_map[$utf32]) or die "Double Unicode mapping";
+ $uni_map[$utf32] = $gb1 << 24 | $gb2 << 16 | $gb3 << 8 | $gb4;
+ ++$uni_map_count;
+ }
+ elsif (/<a /)
+ {
+ die "Bad format";
+ }
+ elsif (/^[ \t]*<range +uFirst=\"([0-9A-F]+)\" +uLast=\"([0-9A-F]+)\" +bFirst=\"([89A-F][0-9A-F]) (3[0-9]) ([89A-F][0-9A-F]) (3[0-9])\" +bLast=\"([89A-F][0-9A-F]) (3[0-9]) ([89A-F][0-9A-F]) (3[0-9])\" +bMin=\"81 30 81 30\" +bMax=\"FE 39 FE 39\"\/>$/)
+ {
+ $utf32_first = oct("0x" . $1);
+ $utf32_last = oct("0x" . $2);
+ $gb1_first = oct("0x" . $3);
+ $gb2_first = oct("0x" . $4);
+ $gb3_first = oct("0x" . $5);
+ $gb4_first = oct("0x" . $6);
+ $gb1_last = oct("0x" . $7);
+ $gb2_last = oct("0x" . $8);
+ $gb3_last = oct("0x" . $9);
+ $gb4_last = oct("0x" . $10);
+ $linear_first
+ = ($gb1_first - 0x81) * 12600
+ + ($gb2_first - 0x30) * 1260
+ + ($gb3_first - 0x81) * 10
+ + ($gb4_first - 0x30);
+ $linear_last
+ = ($gb1_last - 0x81) * 12600
+ + ($gb2_last - 0x30) * 1260
+ + ($gb3_last - 0x81) * 10
+ + ($gb4_last - 0x30);
+ ($utf32_last - $utf32_first == $linear_last - $linear_first)
+ or die "Bad range";
+ if ($linear_first != 189000 || $linear_last != 1237575)
+ {
+ $range_uni_first[$range_count] = $utf32_first;
+ $range_uni_last[$range_count]
+ = ($utf32_last == 0xD7FF ? 0xDFFF : $utf32_last);
+ $range_linear_first[$range_count] = $linear_first;
+ $range_linear_last[$range_count] = $linear_last;
+ ++$range_count;
+ $gb_map_4_ranges += $linear_last - $linear_first + 1;
+ $gb_map_4_max = $linear_last
+ if ($linear_last > $gb_map_4_max);
+ }
+ }
+ elsif (/<range /)
+ {
+ die "Bad format";
+ }
+ }
+ close IN;
+}
+
+print "gb_map_2_count = ", $gb_map_2_count,
+ ", gb_map_4_count = ", $gb_map_4_count,
+ ", gb_map_4_ranges = ", $gb_map_4_ranges,
+ ", gb_map_4_max = ", $gb_map_4_max,
+ ", uni_map_count = ", $uni_map_count, "\n";
+($gb_map_2_count == 23940) or die "Bad gb_map_2_count != 23940";
+($gb_map_4_max == $gb_map_4_count + $gb_map_4_ranges - 1)
+ or die "Bad gb_map_4_max != gb_map_4_count + gb_map_4_ranges";
+($uni_map_count + $gb_map_4_ranges == 0x10000 - (0xE000 - 0xD800) - 0x80)
+ or die "Bad uni_map_count";
+
+$range_index = 0;
+$gb_nonrangedataindex[$range_index] = $gb_map_2_count;
+for ($gb_code = 0; $gb_code < $gb_map_4_max; ++$gb_code)
+{
+ if (defined($gb_map_4[$gb_code]))
+ {
+ $gb_map_2[$gb_map_2_count++] = $gb_map_4[$gb_code];
+ }
+ else
+ {
+ ($gb_code == $range_linear_first[$range_index]) or die "Bad input";
+ $gb_code = $range_linear_last[$range_index];
+ ++$range_index;
+ $gb_nonrangedataindex[$range_index] = $gb_map_2_count;
+ }
+}
+($range_index == $range_count) or die "Bad input";
+
+$filename = lc($id) . ".tab";
+open OUT, ("> " . $filename) or die "Cannot write " . $filename;
+
+{
+ $filename = lc($id). ".pl";
+ open IN, $filename or die "Cannot read ". $filename;
+ $first = 1;
+ while (<IN>)
+ {
+ if (/^\#!.*$/)
+ {
+ }
+ elsif (/^\#(\*.*)$/)
+ {
+ if ($first == 1)
+ {
+ print OUT "/", $1, "\n";
+ $first = 0;
+ }
+ else
+ {
+ print OUT " ", substr($1, 0, length($1) - 1), "/\n";
+ }
+ }
+ elsif (/^\# (.*)$/)
+ {
+ print OUT " *", $1, "\n";
+ }
+ elsif (/^\#(.*)$/)
+ {
+ print OUT " *", $1, "\n";
+ }
+ else
+ {
+ goto done;
+ }
+ }
+ done:
+}
+
+print OUT "\n",
+ "#include \"convertgb18030.h\"\n",
+ "\n",
+ "#include \"sal/types.h\"\n",
+ "\n";
+
+print OUT "static sal_Unicode const aImpl", $id, "ToUnicodeData[] = {\n ";
+for ($gb_code = 0; $gb_code < $gb_map_2_count; ++$gb_code)
+{
+ printf OUT "0x%04X,", $gb_map_2[$gb_code];
+ if ($gb_code % 8 == 7 && $gb_code != $gb_map_2_count - 1)
+ {
+ print OUT "\n ";
+ }
+}
+print OUT "\n};\n\n";
+
+print OUT "static ImplGb180302000ToUnicodeRange const\n aImpl",
+ $id,
+ "ToUnicodeRanges[] = {\n";
+for ($range_index = 0; $range_index < $range_count; ++$range_index)
+{
+ printf OUT " { %d, %d, %d, 0x%04X },\n",
+ $gb_nonrangedataindex[$range_index],
+ $range_linear_first[$range_index],
+ $range_linear_last[$range_index] + 1,
+ $range_uni_first[$range_index];
+}
+print OUT " { -1, 0, 0, 0 }\n};\n\n";
+
+print OUT "static sal_uInt32 const aImplUnicodeTo", $id, "Data[] = {\n ";
+$index = 0;
+$range_index = 0;
+$uni_nonrangedataindex[$range_index] = $index;
+for ($utf32 = 0x80; $utf32 <= 0xFFFF; ++$utf32)
+{
+ if (defined($uni_map[$utf32]))
+ {
+ if ($index > 0 && ($index - 1) % 6 == 5)
+ {
+ print OUT "\n ";
+ }
+ $bytes = $uni_map[$utf32];
+ printf OUT ($bytes <= 0xFFFF ? " 0x%04X," : "0x%08X,"), $bytes;
+ ++$index;
+ }
+ else
+ {
+ ($utf32 == $range_uni_first[$range_index]) or die "Bad input";
+ $utf32 = $range_uni_last[$range_index];
+ ++$range_index;
+ $uni_nonrangedataindex[$range_index] = $index;
+ }
+}
+($range_index == $range_count) or die "Bad input";
+print OUT "\n};\n\n";
+
+print OUT "static ImplUnicodeToGb180302000Range const\n aImplUnicodeTo",
+ $id,
+ "Ranges[] = {\n";
+for ($range_index = 0; $range_index < $range_count; ++$range_index)
+{
+ printf OUT " { %d, 0x%04X, 0x%04X, %d },\n",
+ $uni_nonrangedataindex[$range_index],
+ $range_uni_first[$range_index],
+ $range_uni_last[$range_index],
+ $range_linear_first[$range_index];
+}
+print OUT "};\n";
+
+close OUT;
diff --git a/sal/textenc/generate/gb180302000.tab b/sal/textenc/generate/gb180302000.tab
new file mode 100644
index 000000000..5c0d469ad
--- /dev/null
+++ b/sal/textenc/generate/gb180302000.tab
@@ -0,0 +1,9027 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+
+#include "../convertgb18030.hxx"
+
+sal_Unicode const aImplGb180302000ToUnicodeData[] = {
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 0xE4C6,0xE4C7,0xE4C8,0xE4C9,0xE4CA,0xE4CB,0xE4CC,0xE4CD,
+ 0xE4CE,0xE4CF,0xE4D0,0xE4D1,0xE4D2,0xE4D3,0xE4D4,0xE4D5,
+ 0xE4D6,0xE4D7,0xE4D8,0xE4D9,0xE4DA,0xE4DB,0xE4DC,0xE4DD,
+ 0xE4DE,0xE4DF,0xE4E0,0xE4E1,0xE4E2,0xE4E3,0xE4E4,0xE4E5,
+ 0xE4E6,0xE4E7,0xE4E8,0xE4E9,0xE4EA,0xE4EB,0xE4EC,0xE4ED,
+ 0xE4EE,0xE4EF,0xE4F0,0xE4F1,0xE4F2,0xE4F3,0xE4F4,0xE4F5,
+ 0xE4F6,0xE4F7,0xE4F8,0xE4F9,0xE4FA,0xE4FB,0xE4FC,0xE4FD,
+ 0xE4FE,0xE4FF,0xE500,0xE501,0xE502,0xE503,0xE504,0xE505,
+ 0xE506,0xE507,0xE508,0xE509,0xE50A,0xE50B,0xE50C,0xE50D,
+ 0xE50E,0xE50F,0xE510,0xE511,0xE512,0xE513,0xE514,0xE515,
+ 0xE516,0xE517,0xE518,0xE519,0xE51A,0xE51B,0xE51C,0xE51D,
+ 0xE51E,0xE51F,0xE520,0xE521,0xE522,0xE523,0xE524,0xE525,
+ 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,0xE526,0xE527,
+ 0xE528,0xE529,0xE52A,0xE52B,0xE52C,0xE52D,0xE52E,0xE52F,
+ 0xE530,0xE531,0xE532,0xE533,0xE534,0xE535,0xE536,0xE537,
+ 0xE538,0xE539,0xE53A,0xE53B,0xE53C,0xE53D,0xE53E,0xE53F,
+ 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,0xE574,0xE575,0xE576,0xE577,
+ 0xE578,0xE579,0xE57A,0xE57B,0xE57C,0xE57D,0xE57E,0xE57F,
+ 0xE580,0xE581,0xE582,0xE583,0xE584,0xE585,0x2170,0x2171,
+ 0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,
+ 0xE766,0xE767,0xE768,0xE769,0xE76A,0xE76B,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,0xE76D,0x3220,0x3221,0x3222,0x3223,0x3224,0x3225,
+ 0x3226,0x3227,0x3228,0x3229,0xE76E,0xE76F,0x2160,0x2161,
+ 0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,
+ 0x216A,0x216B,0xE770,0xE771,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,0xE5A0,0xE5A1,
+ 0xE5A2,0xE5A3,0xE5A4,0xE5A5,0xE5A6,0xE5A7,0xE5A8,0xE5A9,
+ 0xE5AA,0xE5AB,0xE5AC,0xE5AD,0xE5AE,0xE5AF,0xE5B0,0xE5B1,
+ 0xE5B2,0xE5B3,0xE5B4,0xE5B5,0xE5B6,0xE5B7,0xE5B8,0xE5B9,
+ 0xE5BA,0xE5BB,0xE5BC,0xE5BD,0xE5BE,0xE5BF,0xE5C0,0xE5C1,
+ 0xE5C2,0xE5C3,0xE5C4,0xE5C5,0xE5C6,0xE5C7,0xE5C8,0xE5C9,
+ 0xE5CA,0xE5CB,0xE5CC,0xE5CD,0xE5CE,0xE5CF,0xE5D0,0xE5D1,
+ 0xE5D2,0xE5D3,0xE5D4,0xE5D5,0xE5D6,0xE5D7,0xE5D8,0xE5D9,
+ 0xE5DA,0xE5DB,0xE5DC,0xE5DD,0xE5DE,0xE5DF,0xE5E0,0xE5E1,
+ 0xE5E2,0xE5E3,0xE5E4,0xE5E5,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,0xE5E6,0xE5E7,0xE5E8,0xE5E9,0xE5EA,0xE5EB,
+ 0xE5EC,0xE5ED,0xE5EE,0xE5EF,0xE5F0,0xE5F1,0xE5F2,0xE5F3,
+ 0xE5F4,0xE5F5,0xE5F6,0xE5F7,0xE5F8,0xE5F9,0xE5FA,0xE5FB,
+ 0xE5FC,0xE5FD,0xE5FE,0xE5FF,0xE600,0xE601,0xE602,0xE603,
+ 0xE604,0xE605,0xE606,0xE607,0xE608,0xE609,0xE60A,0xE60B,
+ 0xE60C,0xE60D,0xE60E,0xE60F,0xE610,0xE611,0xE612,0xE613,
+ 0xE614,0xE615,0xE616,0xE617,0xE618,0xE619,0xE61A,0xE61B,
+ 0xE61C,0xE61D,0xE61E,0xE61F,0xE620,0xE621,0xE622,0xE623,
+ 0xE624,0xE625,0xE626,0xE627,0xE628,0xE629,0xE62A,0xE62B,
+ 0xE62C,0xE62D,0xE62E,0xE62F,0xE630,0xE631,0xE632,0xE633,
+ 0xE634,0xE635,0xE636,0xE637,0xE638,0xE639,0xE63A,0xE63B,
+ 0xE63C,0xE63D,0xE63E,0xE63F,0xE640,0xE641,0xE642,0xE643,
+ 0xE644,0xE645,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,0xE772,0xE773,0xE774,
+ 0xE775,0xE776,0xE777,0xE778,0xE779,0xE77A,0xE77B,0xE77C,
+ 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,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,0xE67F,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,
+ 0xE69E,0xE69F,0xE6A0,0xE6A1,0xE6A2,0xE6A3,0xE6A4,0xE6A5,
+ 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,0xE77D,0xE77E,
+ 0xE77F,0xE780,0xE781,0xE782,0xE783,0xE784,0xE6A6,0xE6A7,
+ 0xE6A8,0xE6A9,0xE6AA,0xE6AB,0xE6AC,0xE6AD,0xE6AE,0xE6AF,
+ 0xE6B0,0xE6B1,0xE6B2,0xE6B3,0xE6B4,0xE6B5,0xE6B6,0xE6B7,
+ 0xE6B8,0xE6B9,0xE6BA,0xE6BB,0xE6BC,0xE6BD,0xE6BE,0xE6BF,
+ 0xE6C0,0xE6C1,0xE6C2,0xE6C3,0xE6C4,0xE6C5,0xE6C6,0xE6C7,
+ 0xE6C8,0xE6C9,0xE6CA,0xE6CB,0xE6CC,0xE6CD,0xE6CE,0xE6CF,
+ 0xE6D0,0xE6D1,0xE6D2,0xE6D3,0xE6D4,0xE6D5,0xE6D6,0xE6D7,
+ 0xE6D8,0xE6D9,0xE6DA,0xE6DB,0xE6DC,0xE6DD,0xE6DE,0xE6DF,
+ 0xE6E0,0xE6E1,0xE6E2,0xE6E3,0xE6E4,0xE6E5,0xE6E6,0xE6E7,
+ 0xE6E8,0xE6E9,0xE6EA,0xE6EB,0xE6EC,0xE6ED,0xE6EE,0xE6EF,
+ 0xE6F0,0xE6F1,0xE6F2,0xE6F3,0xE6F4,0xE6F5,0xE6F6,0xE6F7,
+ 0xE6F8,0xE6F9,0xE6FA,0xE6FB,0xE6FC,0xE6FD,0xE6FE,0xE6FF,
+ 0xE700,0xE701,0xE702,0xE703,0xE704,0xE705,0x0391,0x0392,
+ 0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039A,
+ 0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0,0x03A1,0x03A3,
+ 0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,0xE785,0xE786,
+ 0xE787,0xE788,0xE789,0xE78A,0xE78B,0xE78C,0x03B1,0x03B2,
+ 0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,
+ 0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0,0x03C1,0x03C3,
+ 0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,0xE78D,0xE78E,
+ 0xE78F,0xE790,0xE791,0xE792,0xE793,0xFE35,0xFE36,0xFE39,
+ 0xFE3A,0xFE3F,0xFE40,0xFE3D,0xFE3E,0xFE41,0xFE42,0xFE43,
+ 0xFE44,0xE794,0xE795,0xFE3B,0xFE3C,0xFE37,0xFE38,0xFE31,
+ 0xE796,0xFE33,0xFE34,0xE797,0xE798,0xE799,0xE79A,0xE79B,
+ 0xE79C,0xE79D,0xE79E,0xE79F,0xE706,0xE707,0xE708,0xE709,
+ 0xE70A,0xE70B,0xE70C,0xE70D,0xE70E,0xE70F,0xE710,0xE711,
+ 0xE712,0xE713,0xE714,0xE715,0xE716,0xE717,0xE718,0xE719,
+ 0xE71A,0xE71B,0xE71C,0xE71D,0xE71E,0xE71F,0xE720,0xE721,
+ 0xE722,0xE723,0xE724,0xE725,0xE726,0xE727,0xE728,0xE729,
+ 0xE72A,0xE72B,0xE72C,0xE72D,0xE72E,0xE72F,0xE730,0xE731,
+ 0xE732,0xE733,0xE734,0xE735,0xE736,0xE737,0xE738,0xE739,
+ 0xE73A,0xE73B,0xE73C,0xE73D,0xE73E,0xE73F,0xE740,0xE741,
+ 0xE742,0xE743,0xE744,0xE745,0xE746,0xE747,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,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,0xE7A0,0xE7A1,0xE7A2,
+ 0xE7A3,0xE7A4,0xE7A5,0xE7A6,0xE7A7,0xE7A8,0xE7A9,0xE7AA,
+ 0xE7AB,0xE7AC,0xE7AD,0xE7AE,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,0xE7AF,0xE7B0,0xE7B1,
+ 0xE7B2,0xE7B3,0xE7B4,0xE7B5,0xE7B6,0xE7B7,0xE7B8,0xE7B9,
+ 0xE7BA,0xE7BB,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,0x2588,0x2589,0x258A,0x258B,0x258C,0x258D,0x258E,
+ 0x258F,0x2593,0x2594,0x2595,0x25BC,0x25BD,0x25E2,0x25E3,
+ 0x25E4,0x25E5,0x2609,0x2295,0x3012,0x301D,0x301E,0xE7BC,
+ 0xE7BD,0xE7BE,0xE7BF,0xE7C0,0xE7C1,0xE7C2,0xE7C3,0xE7C4,
+ 0xE7C5,0xE7C6,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,0xE7C7,0x0144,0x0148,
+ 0x01F9,0x0261,0xE7C9,0xE7CA,0xE7CB,0xE7CC,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,0xE7CD,0xE7CE,0xE7CF,0xE7D0,0xE7D1,
+ 0xE7D2,0xE7D3,0xE7D4,0xE7D5,0xE7D6,0xE7D7,0xE7D8,0xE7D9,
+ 0xE7DA,0xE7DB,0xE7DC,0xE7DD,0xE7DE,0xE7DF,0xE7E0,0xE7E1,
+ 0x3021,0x3022,0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,
+ 0x3029,0x32A3,0x338E,0x338F,0x339C,0x339D,0x339E,0x33A1,
+ 0x33C4,0x33CE,0x33D1,0x33D2,0x33D5,0xFE30,0xFFE2,0xFFE4,
+ 0xE7E2,0x2121,0x3231,0xE7E3,0x2010,0xE7E4,0xE7E5,0xE7E6,
+ 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,0xFE62,
+ 0xFE63,0xFE64,0xFE65,0xFE66,0xFE68,0xFE69,0xFE6A,0xFE6B,
+ 0x303E,0x2FF0,0x2FF1,0x2FF2,0x2FF3,0x2FF4,0x2FF5,0x2FF6,
+ 0x2FF7,0x2FF8,0x2FF9,0x2FFA,0x2FFB,0x3007,0xE7F4,0xE7F5,
+ 0xE7F6,0xE7F7,0xE7F8,0xE7F9,0xE7FA,0xE7FB,0xE7FC,0xE7FD,
+ 0xE7FE,0xE7FF,0xE800,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,0xE801,
+ 0xE802,0xE803,0xE804,0xE805,0xE806,0xE807,0xE808,0xE809,
+ 0xE80A,0xE80B,0xE80C,0xE80D,0xE80E,0xE80F,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,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,0xE000,0xE001,
+ 0xE002,0xE003,0xE004,0xE005,0xE006,0xE007,0xE008,0xE009,
+ 0xE00A,0xE00B,0xE00C,0xE00D,0xE00E,0xE00F,0xE010,0xE011,
+ 0xE012,0xE013,0xE014,0xE015,0xE016,0xE017,0xE018,0xE019,
+ 0xE01A,0xE01B,0xE01C,0xE01D,0xE01E,0xE01F,0xE020,0xE021,
+ 0xE022,0xE023,0xE024,0xE025,0xE026,0xE027,0xE028,0xE029,
+ 0xE02A,0xE02B,0xE02C,0xE02D,0xE02E,0xE02F,0xE030,0xE031,
+ 0xE032,0xE033,0xE034,0xE035,0xE036,0xE037,0xE038,0xE039,
+ 0xE03A,0xE03B,0xE03C,0xE03D,0xE03E,0xE03F,0xE040,0xE041,
+ 0xE042,0xE043,0xE044,0xE045,0xE046,0xE047,0xE048,0xE049,
+ 0xE04A,0xE04B,0xE04C,0xE04D,0xE04E,0xE04F,0xE050,0xE051,
+ 0xE052,0xE053,0xE054,0xE055,0xE056,0xE057,0xE058,0xE059,
+ 0xE05A,0xE05B,0xE05C,0xE05D,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,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,0xE05E,0xE05F,0xE060,0xE061,
+ 0xE062,0xE063,0xE064,0xE065,0xE066,0xE067,0xE068,0xE069,
+ 0xE06A,0xE06B,0xE06C,0xE06D,0xE06E,0xE06F,0xE070,0xE071,
+ 0xE072,0xE073,0xE074,0xE075,0xE076,0xE077,0xE078,0xE079,
+ 0xE07A,0xE07B,0xE07C,0xE07D,0xE07E,0xE07F,0xE080,0xE081,
+ 0xE082,0xE083,0xE084,0xE085,0xE086,0xE087,0xE088,0xE089,
+ 0xE08A,0xE08B,0xE08C,0xE08D,0xE08E,0xE08F,0xE090,0xE091,
+ 0xE092,0xE093,0xE094,0xE095,0xE096,0xE097,0xE098,0xE099,
+ 0xE09A,0xE09B,0xE09C,0xE09D,0xE09E,0xE09F,0xE0A0,0xE0A1,
+ 0xE0A2,0xE0A3,0xE0A4,0xE0A5,0xE0A6,0xE0A7,0xE0A8,0xE0A9,
+ 0xE0AA,0xE0AB,0xE0AC,0xE0AD,0xE0AE,0xE0AF,0xE0B0,0xE0B1,
+ 0xE0B2,0xE0B3,0xE0B4,0xE0B5,0xE0B6,0xE0B7,0xE0B8,0xE0B9,
+ 0xE0BA,0xE0BB,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,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,0xE0BC,0xE0BD,0xE0BE,0xE0BF,0xE0C0,0xE0C1,
+ 0xE0C2,0xE0C3,0xE0C4,0xE0C5,0xE0C6,0xE0C7,0xE0C8,0xE0C9,
+ 0xE0CA,0xE0CB,0xE0CC,0xE0CD,0xE0CE,0xE0CF,0xE0D0,0xE0D1,
+ 0xE0D2,0xE0D3,0xE0D4,0xE0D5,0xE0D6,0xE0D7,0xE0D8,0xE0D9,
+ 0xE0DA,0xE0DB,0xE0DC,0xE0DD,0xE0DE,0xE0DF,0xE0E0,0xE0E1,
+ 0xE0E2,0xE0E3,0xE0E4,0xE0E5,0xE0E6,0xE0E7,0xE0E8,0xE0E9,
+ 0xE0EA,0xE0EB,0xE0EC,0xE0ED,0xE0EE,0xE0EF,0xE0F0,0xE0F1,
+ 0xE0F2,0xE0F3,0xE0F4,0xE0F5,0xE0F6,0xE0F7,0xE0F8,0xE0F9,
+ 0xE0FA,0xE0FB,0xE0FC,0xE0FD,0xE0FE,0xE0FF,0xE100,0xE101,
+ 0xE102,0xE103,0xE104,0xE105,0xE106,0xE107,0xE108,0xE109,
+ 0xE10A,0xE10B,0xE10C,0xE10D,0xE10E,0xE10F,0xE110,0xE111,
+ 0xE112,0xE113,0xE114,0xE115,0xE116,0xE117,0xE118,0xE119,
+ 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,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,
+ 0xE11A,0xE11B,0xE11C,0xE11D,0xE11E,0xE11F,0xE120,0xE121,
+ 0xE122,0xE123,0xE124,0xE125,0xE126,0xE127,0xE128,0xE129,
+ 0xE12A,0xE12B,0xE12C,0xE12D,0xE12E,0xE12F,0xE130,0xE131,
+ 0xE132,0xE133,0xE134,0xE135,0xE136,0xE137,0xE138,0xE139,
+ 0xE13A,0xE13B,0xE13C,0xE13D,0xE13E,0xE13F,0xE140,0xE141,
+ 0xE142,0xE143,0xE144,0xE145,0xE146,0xE147,0xE148,0xE149,
+ 0xE14A,0xE14B,0xE14C,0xE14D,0xE14E,0xE14F,0xE150,0xE151,
+ 0xE152,0xE153,0xE154,0xE155,0xE156,0xE157,0xE158,0xE159,
+ 0xE15A,0xE15B,0xE15C,0xE15D,0xE15E,0xE15F,0xE160,0xE161,
+ 0xE162,0xE163,0xE164,0xE165,0xE166,0xE167,0xE168,0xE169,
+ 0xE16A,0xE16B,0xE16C,0xE16D,0xE16E,0xE16F,0xE170,0xE171,
+ 0xE172,0xE173,0xE174,0xE175,0xE176,0xE177,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,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,0xE178,0xE179,
+ 0xE17A,0xE17B,0xE17C,0xE17D,0xE17E,0xE17F,0xE180,0xE181,
+ 0xE182,0xE183,0xE184,0xE185,0xE186,0xE187,0xE188,0xE189,
+ 0xE18A,0xE18B,0xE18C,0xE18D,0xE18E,0xE18F,0xE190,0xE191,
+ 0xE192,0xE193,0xE194,0xE195,0xE196,0xE197,0xE198,0xE199,
+ 0xE19A,0xE19B,0xE19C,0xE19D,0xE19E,0xE19F,0xE1A0,0xE1A1,
+ 0xE1A2,0xE1A3,0xE1A4,0xE1A5,0xE1A6,0xE1A7,0xE1A8,0xE1A9,
+ 0xE1AA,0xE1AB,0xE1AC,0xE1AD,0xE1AE,0xE1AF,0xE1B0,0xE1B1,
+ 0xE1B2,0xE1B3,0xE1B4,0xE1B5,0xE1B6,0xE1B7,0xE1B8,0xE1B9,
+ 0xE1BA,0xE1BB,0xE1BC,0xE1BD,0xE1BE,0xE1BF,0xE1C0,0xE1C1,
+ 0xE1C2,0xE1C3,0xE1C4,0xE1C5,0xE1C6,0xE1C7,0xE1C8,0xE1C9,
+ 0xE1CA,0xE1CB,0xE1CC,0xE1CD,0xE1CE,0xE1CF,0xE1D0,0xE1D1,
+ 0xE1D2,0xE1D3,0xE1D4,0xE1D5,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,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,0xE1D6,0xE1D7,0xE1D8,0xE1D9,
+ 0xE1DA,0xE1DB,0xE1DC,0xE1DD,0xE1DE,0xE1DF,0xE1E0,0xE1E1,
+ 0xE1E2,0xE1E3,0xE1E4,0xE1E5,0xE1E6,0xE1E7,0xE1E8,0xE1E9,
+ 0xE1EA,0xE1EB,0xE1EC,0xE1ED,0xE1EE,0xE1EF,0xE1F0,0xE1F1,
+ 0xE1F2,0xE1F3,0xE1F4,0xE1F5,0xE1F6,0xE1F7,0xE1F8,0xE1F9,
+ 0xE1FA,0xE1FB,0xE1FC,0xE1FD,0xE1FE,0xE1FF,0xE200,0xE201,
+ 0xE202,0xE203,0xE204,0xE205,0xE206,0xE207,0xE208,0xE209,
+ 0xE20A,0xE20B,0xE20C,0xE20D,0xE20E,0xE20F,0xE210,0xE211,
+ 0xE212,0xE213,0xE214,0xE215,0xE216,0xE217,0xE218,0xE219,
+ 0xE21A,0xE21B,0xE21C,0xE21D,0xE21E,0xE21F,0xE220,0xE221,
+ 0xE222,0xE223,0xE224,0xE225,0xE226,0xE227,0xE228,0xE229,
+ 0xE22A,0xE22B,0xE22C,0xE22D,0xE22E,0xE22F,0xE230,0xE231,
+ 0xE232,0xE233,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,0xE810,0xE811,0xE812,
+ 0xE813,0xE814,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,
+ 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,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,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,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,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,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,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,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,0xE234,0xE235,0xE236,0xE237,0xE238,0xE239,
+ 0xE23A,0xE23B,0xE23C,0xE23D,0xE23E,0xE23F,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,0xE27F,0xE280,0xE281,
+ 0xE282,0xE283,0xE284,0xE285,0xE286,0xE287,0xE288,0xE289,
+ 0xE28A,0xE28B,0xE28C,0xE28D,0xE28E,0xE28F,0xE290,0xE291,
+ 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,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,
+ 0xE292,0xE293,0xE294,0xE295,0xE296,0xE297,0xE298,0xE299,
+ 0xE29A,0xE29B,0xE29C,0xE29D,0xE29E,0xE29F,0xE2A0,0xE2A1,
+ 0xE2A2,0xE2A3,0xE2A4,0xE2A5,0xE2A6,0xE2A7,0xE2A8,0xE2A9,
+ 0xE2AA,0xE2AB,0xE2AC,0xE2AD,0xE2AE,0xE2AF,0xE2B0,0xE2B1,
+ 0xE2B2,0xE2B3,0xE2B4,0xE2B5,0xE2B6,0xE2B7,0xE2B8,0xE2B9,
+ 0xE2BA,0xE2BB,0xE2BC,0xE2BD,0xE2BE,0xE2BF,0xE2C0,0xE2C1,
+ 0xE2C2,0xE2C3,0xE2C4,0xE2C5,0xE2C6,0xE2C7,0xE2C8,0xE2C9,
+ 0xE2CA,0xE2CB,0xE2CC,0xE2CD,0xE2CE,0xE2CF,0xE2D0,0xE2D1,
+ 0xE2D2,0xE2D3,0xE2D4,0xE2D5,0xE2D6,0xE2D7,0xE2D8,0xE2D9,
+ 0xE2DA,0xE2DB,0xE2DC,0xE2DD,0xE2DE,0xE2DF,0xE2E0,0xE2E1,
+ 0xE2E2,0xE2E3,0xE2E4,0xE2E5,0xE2E6,0xE2E7,0xE2E8,0xE2E9,
+ 0xE2EA,0xE2EB,0xE2EC,0xE2ED,0xE2EE,0xE2EF,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,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,0xE2F0,0xE2F1,
+ 0xE2F2,0xE2F3,0xE2F4,0xE2F5,0xE2F6,0xE2F7,0xE2F8,0xE2F9,
+ 0xE2FA,0xE2FB,0xE2FC,0xE2FD,0xE2FE,0xE2FF,0xE300,0xE301,
+ 0xE302,0xE303,0xE304,0xE305,0xE306,0xE307,0xE308,0xE309,
+ 0xE30A,0xE30B,0xE30C,0xE30D,0xE30E,0xE30F,0xE310,0xE311,
+ 0xE312,0xE313,0xE314,0xE315,0xE316,0xE317,0xE318,0xE319,
+ 0xE31A,0xE31B,0xE31C,0xE31D,0xE31E,0xE31F,0xE320,0xE321,
+ 0xE322,0xE323,0xE324,0xE325,0xE326,0xE327,0xE328,0xE329,
+ 0xE32A,0xE32B,0xE32C,0xE32D,0xE32E,0xE32F,0xE330,0xE331,
+ 0xE332,0xE333,0xE334,0xE335,0xE336,0xE337,0xE338,0xE339,
+ 0xE33A,0xE33B,0xE33C,0xE33D,0xE33E,0xE33F,0xE340,0xE341,
+ 0xE342,0xE343,0xE344,0xE345,0xE346,0xE347,0xE348,0xE349,
+ 0xE34A,0xE34B,0xE34C,0xE34D,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,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,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,0xE36E,0xE36F,0xE370,0xE371,
+ 0xE372,0xE373,0xE374,0xE375,0xE376,0xE377,0xE378,0xE379,
+ 0xE37A,0xE37B,0xE37C,0xE37D,0xE37E,0xE37F,0xE380,0xE381,
+ 0xE382,0xE383,0xE384,0xE385,0xE386,0xE387,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,0xE3A1,
+ 0xE3A2,0xE3A3,0xE3A4,0xE3A5,0xE3A6,0xE3A7,0xE3A8,0xE3A9,
+ 0xE3AA,0xE3AB,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,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,0xE3AC,0xE3AD,0xE3AE,0xE3AF,0xE3B0,0xE3B1,
+ 0xE3B2,0xE3B3,0xE3B4,0xE3B5,0xE3B6,0xE3B7,0xE3B8,0xE3B9,
+ 0xE3BA,0xE3BB,0xE3BC,0xE3BD,0xE3BE,0xE3BF,0xE3C0,0xE3C1,
+ 0xE3C2,0xE3C3,0xE3C4,0xE3C5,0xE3C6,0xE3C7,0xE3C8,0xE3C9,
+ 0xE3CA,0xE3CB,0xE3CC,0xE3CD,0xE3CE,0xE3CF,0xE3D0,0xE3D1,
+ 0xE3D2,0xE3D3,0xE3D4,0xE3D5,0xE3D6,0xE3D7,0xE3D8,0xE3D9,
+ 0xE3DA,0xE3DB,0xE3DC,0xE3DD,0xE3DE,0xE3DF,0xE3E0,0xE3E1,
+ 0xE3E2,0xE3E3,0xE3E4,0xE3E5,0xE3E6,0xE3E7,0xE3E8,0xE3E9,
+ 0xE3EA,0xE3EB,0xE3EC,0xE3ED,0xE3EE,0xE3EF,0xE3F0,0xE3F1,
+ 0xE3F2,0xE3F3,0xE3F4,0xE3F5,0xE3F6,0xE3F7,0xE3F8,0xE3F9,
+ 0xE3FA,0xE3FB,0xE3FC,0xE3FD,0xE3FE,0xE3FF,0xE400,0xE401,
+ 0xE402,0xE403,0xE404,0xE405,0xE406,0xE407,0xE408,0xE409,
+ 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,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,
+ 0xE40A,0xE40B,0xE40C,0xE40D,0xE40E,0xE40F,0xE410,0xE411,
+ 0xE412,0xE413,0xE414,0xE415,0xE416,0xE417,0xE418,0xE419,
+ 0xE41A,0xE41B,0xE41C,0xE41D,0xE41E,0xE41F,0xE420,0xE421,
+ 0xE422,0xE423,0xE424,0xE425,0xE426,0xE427,0xE428,0xE429,
+ 0xE42A,0xE42B,0xE42C,0xE42D,0xE42E,0xE42F,0xE430,0xE431,
+ 0xE432,0xE433,0xE434,0xE435,0xE436,0xE437,0xE438,0xE439,
+ 0xE43A,0xE43B,0xE43C,0xE43D,0xE43E,0xE43F,0xE440,0xE441,
+ 0xE442,0xE443,0xE444,0xE445,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,0xE45F,0xE460,0xE461,
+ 0xE462,0xE463,0xE464,0xE465,0xE466,0xE467,0xFA0C,0xFA0D,
+ 0xFA0E,0xFA0F,0xFA11,0xFA13,0xFA14,0xFA18,0xFA1F,0xFA20,
+ 0xFA21,0xFA23,0xFA24,0xFA27,0xFA28,0xFA29,0x2E81,0xE816,
+ 0xE817,0xE818,0x2E84,0x3473,0x3447,0x2E88,0x2E8B,0xE81E,
+ 0x359E,0x361A,0x360E,0x2E8C,0x2E97,0x396E,0x3918,0xE826,
+ 0x39CF,0x39DF,0x3A73,0x39D0,0xE82B,0xE82C,0x3B4E,0x3C6E,
+ 0x3CE0,0x2EA7,0xE831,0xE832,0x2EAA,0x4056,0x415F,0x2EAE,
+ 0x4337,0x2EB3,0x2EB6,0x2EB7,0xE83B,0x43B1,0x43AC,0x2EBB,
+ 0x43DD,0x44D6,0x4661,0x464C,0xE843,0x4723,0x4729,0x477C,
+ 0x478D,0x2ECA,0x4947,0x497A,0x497D,0x4982,0x4983,0x4985,
+ 0x4986,0x499F,0x499B,0x49B7,0x49B6,0xE854,0xE855,0x4CA3,
+ 0x4C9F,0x4CA0,0x4CA1,0x4C77,0x4CA2,0x4D13,0x4D14,0x4D15,
+ 0x4D16,0x4D17,0x4D18,0x4D19,0x4DAE,0xE864,0xE468,0xE469,
+ 0xE46A,0xE46B,0xE46C,0xE46D,0xE46E,0xE46F,0xE470,0xE471,
+ 0xE472,0xE473,0xE474,0xE475,0xE476,0xE477,0xE478,0xE479,
+ 0xE47A,0xE47B,0xE47C,0xE47D,0xE47E,0xE47F,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,0xE4A1,
+ 0xE4A2,0xE4A3,0xE4A4,0xE4A5,0xE4A6,0xE4A7,0xE4A8,0xE4A9,
+ 0xE4AA,0xE4AB,0xE4AC,0xE4AD,0xE4AE,0xE4AF,0xE4B0,0xE4B1,
+ 0xE4B2,0xE4B3,0xE4B4,0xE4B5,0xE4B6,0xE4B7,0xE4B8,0xE4B9,
+ 0xE4BA,0xE4BB,0xE4BC,0xE4BD,0xE4BE,0xE4BF,0xE4C0,0xE4C1,
+ 0xE4C2,0xE4C3,0xE4C4,0xE4C5,0x0080,0x0081,0x0082,0x0083,
+ 0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,
+ 0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,0x0092,0x0093,
+ 0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,
+ 0x009C,0x009D,0x009E,0x009F,0x00A0,0x00A1,0x00A2,0x00A3,
+ 0x00A5,0x00A6,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,
+ 0x00AF,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,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,0x00E2,0x00E3,0x00E4,
+ 0x00E5,0x00E6,0x00E7,0x00EB,0x00EE,0x00EF,0x00F0,0x00F1,
+ 0x00F4,0x00F5,0x00F6,0x00F8,0x00FB,0x00FD,0x00FE,0x00FF,
+ 0x0100,0x0102,0x0103,0x0104,0x0105,0x0106,0x0107,0x0108,
+ 0x0109,0x010A,0x010B,0x010C,0x010D,0x010E,0x010F,0x0110,
+ 0x0111,0x0112,0x0114,0x0115,0x0116,0x0117,0x0118,0x0119,
+ 0x011A,0x011C,0x011D,0x011E,0x011F,0x0120,0x0121,0x0122,
+ 0x0123,0x0124,0x0125,0x0126,0x0127,0x0128,0x0129,0x012A,
+ 0x012C,0x012D,0x012E,0x012F,0x0130,0x0131,0x0132,0x0133,
+ 0x0134,0x0135,0x0136,0x0137,0x0138,0x0139,0x013A,0x013B,
+ 0x013C,0x013D,0x013E,0x013F,0x0140,0x0141,0x0142,0x0143,
+ 0x0145,0x0146,0x0147,0x0149,0x014A,0x014B,0x014C,0x014E,
+ 0x014F,0x0150,0x0151,0x0152,0x0153,0x0154,0x0155,0x0156,
+ 0x0157,0x0158,0x0159,0x015A,0x015B,0x015C,0x015D,0x015E,
+ 0x015F,0x0160,0x0161,0x0162,0x0163,0x0164,0x0165,0x0166,
+ 0x0167,0x0168,0x0169,0x016A,0x016C,0x016D,0x016E,0x016F,
+ 0x0170,0x0171,0x0172,0x0173,0x0174,0x0175,0x0176,0x0177,
+ 0x0178,0x0179,0x017A,0x017B,0x017C,0x017D,0x017E,0x017F,
+ 0x0180,0x0181,0x0182,0x0183,0x0184,0x0185,0x0186,0x0187,
+ 0x0188,0x0189,0x018A,0x018B,0x018C,0x018D,0x018E,0x018F,
+ 0x0190,0x0191,0x0192,0x0193,0x0194,0x0195,0x0196,0x0197,
+ 0x0198,0x0199,0x019A,0x019B,0x019C,0x019D,0x019E,0x019F,
+ 0x01A0,0x01A1,0x01A2,0x01A3,0x01A4,0x01A5,0x01A6,0x01A7,
+ 0x01A8,0x01A9,0x01AA,0x01AB,0x01AC,0x01AD,0x01AE,0x01AF,
+ 0x01B0,0x01B1,0x01B2,0x01B3,0x01B4,0x01B5,0x01B6,0x01B7,
+ 0x01B8,0x01B9,0x01BA,0x01BB,0x01BC,0x01BD,0x01BE,0x01BF,
+ 0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C5,0x01C6,0x01C7,
+ 0x01C8,0x01C9,0x01CA,0x01CB,0x01CC,0x01CD,0x01CF,0x01D1,
+ 0x01D3,0x01D5,0x01D7,0x01D9,0x01DB,0x01DD,0x01DE,0x01DF,
+ 0x01E0,0x01E1,0x01E2,0x01E3,0x01E4,0x01E5,0x01E6,0x01E7,
+ 0x01E8,0x01E9,0x01EA,0x01EB,0x01EC,0x01ED,0x01EE,0x01EF,
+ 0x01F0,0x01F1,0x01F2,0x01F3,0x01F4,0x01F5,0x01F6,0x01F7,
+ 0x01F8,0x01FA,0x01FB,0x01FC,0x01FD,0x01FE,0x01FF,0x0200,
+ 0x0201,0x0202,0x0203,0x0204,0x0205,0x0206,0x0207,0x0208,
+ 0x0209,0x020A,0x020B,0x020C,0x020D,0x020E,0x020F,0x0210,
+ 0x0211,0x0212,0x0213,0x0214,0x0215,0x0216,0x0217,0x0218,
+ 0x0219,0x021A,0x021B,0x021C,0x021D,0x021E,0x021F,0x0220,
+ 0x0221,0x0222,0x0223,0x0224,0x0225,0x0226,0x0227,0x0228,
+ 0x0229,0x022A,0x022B,0x022C,0x022D,0x022E,0x022F,0x0230,
+ 0x0231,0x0232,0x0233,0x0234,0x0235,0x0236,0x0237,0x0238,
+ 0x0239,0x023A,0x023B,0x023C,0x023D,0x023E,0x023F,0x0240,
+ 0x0241,0x0242,0x0243,0x0244,0x0245,0x0246,0x0247,0x0248,
+ 0x0249,0x024A,0x024B,0x024C,0x024D,0x024E,0x024F,0x0250,
+ 0x0252,0x0253,0x0254,0x0255,0x0256,0x0257,0x0258,0x0259,
+ 0x025A,0x025B,0x025C,0x025D,0x025E,0x025F,0x0260,0x0262,
+ 0x0263,0x0264,0x0265,0x0266,0x0267,0x0268,0x0269,0x026A,
+ 0x026B,0x026C,0x026D,0x026E,0x026F,0x0270,0x0271,0x0272,
+ 0x0273,0x0274,0x0275,0x0276,0x0277,0x0278,0x0279,0x027A,
+ 0x027B,0x027C,0x027D,0x027E,0x027F,0x0280,0x0281,0x0282,
+ 0x0283,0x0284,0x0285,0x0286,0x0287,0x0288,0x0289,0x028A,
+ 0x028B,0x028C,0x028D,0x028E,0x028F,0x0290,0x0291,0x0292,
+ 0x0293,0x0294,0x0295,0x0296,0x0297,0x0298,0x0299,0x029A,
+ 0x029B,0x029C,0x029D,0x029E,0x029F,0x02A0,0x02A1,0x02A2,
+ 0x02A3,0x02A4,0x02A5,0x02A6,0x02A7,0x02A8,0x02A9,0x02AA,
+ 0x02AB,0x02AC,0x02AD,0x02AE,0x02AF,0x02B0,0x02B1,0x02B2,
+ 0x02B3,0x02B4,0x02B5,0x02B6,0x02B7,0x02B8,0x02B9,0x02BA,
+ 0x02BB,0x02BC,0x02BD,0x02BE,0x02BF,0x02C0,0x02C1,0x02C2,
+ 0x02C3,0x02C4,0x02C5,0x02C6,0x02C8,0x02CC,0x02CD,0x02CE,
+ 0x02CF,0x02D0,0x02D1,0x02D2,0x02D3,0x02D4,0x02D5,0x02D6,
+ 0x02D7,0x02D8,0x02DA,0x02DB,0x02DC,0x02DD,0x02DE,0x02DF,
+ 0x02E0,0x02E1,0x02E2,0x02E3,0x02E4,0x02E5,0x02E6,0x02E7,
+ 0x02E8,0x02E9,0x02EA,0x02EB,0x02EC,0x02ED,0x02EE,0x02EF,
+ 0x02F0,0x02F1,0x02F2,0x02F3,0x02F4,0x02F5,0x02F6,0x02F7,
+ 0x02F8,0x02F9,0x02FA,0x02FB,0x02FC,0x02FD,0x02FE,0x02FF,
+ 0x0300,0x0301,0x0302,0x0303,0x0304,0x0305,0x0306,0x0307,
+ 0x0308,0x0309,0x030A,0x030B,0x030C,0x030D,0x030E,0x030F,
+ 0x0310,0x0311,0x0312,0x0313,0x0314,0x0315,0x0316,0x0317,
+ 0x0318,0x0319,0x031A,0x031B,0x031C,0x031D,0x031E,0x031F,
+ 0x0320,0x0321,0x0322,0x0323,0x0324,0x0325,0x0326,0x0327,
+ 0x0328,0x0329,0x032A,0x032B,0x032C,0x032D,0x032E,0x032F,
+ 0x0330,0x0331,0x0332,0x0333,0x0334,0x0335,0x0336,0x0337,
+ 0x0338,0x0339,0x033A,0x033B,0x033C,0x033D,0x033E,0x033F,
+ 0x0340,0x0341,0x0342,0x0343,0x0344,0x0345,0x0346,0x0347,
+ 0x0348,0x0349,0x034A,0x034B,0x034C,0x034D,0x034E,0x034F,
+ 0x0350,0x0351,0x0352,0x0353,0x0354,0x0355,0x0356,0x0357,
+ 0x0358,0x0359,0x035A,0x035B,0x035C,0x035D,0x035E,0x035F,
+ 0x0360,0x0361,0x0362,0x0363,0x0364,0x0365,0x0366,0x0367,
+ 0x0368,0x0369,0x036A,0x036B,0x036C,0x036D,0x036E,0x036F,
+ 0x0370,0x0371,0x0372,0x0373,0x0374,0x0375,0x0376,0x0377,
+ 0x0378,0x0379,0x037A,0x037B,0x037C,0x037D,0x037E,0x037F,
+ 0x0380,0x0381,0x0382,0x0383,0x0384,0x0385,0x0386,0x0387,
+ 0x0388,0x0389,0x038A,0x038B,0x038C,0x038D,0x038E,0x038F,
+ 0x0390,0x03A2,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF,
+ 0x03B0,0x03C2,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x03CF,
+ 0x03D0,0x03D1,0x03D2,0x03D3,0x03D4,0x03D5,0x03D6,0x03D7,
+ 0x03D8,0x03D9,0x03DA,0x03DB,0x03DC,0x03DD,0x03DE,0x03DF,
+ 0x03E0,0x03E1,0x03E2,0x03E3,0x03E4,0x03E5,0x03E6,0x03E7,
+ 0x03E8,0x03E9,0x03EA,0x03EB,0x03EC,0x03ED,0x03EE,0x03EF,
+ 0x03F0,0x03F1,0x03F2,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7,
+ 0x03F8,0x03F9,0x03FA,0x03FB,0x03FC,0x03FD,0x03FE,0x03FF,
+ 0x0400,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,0x0408,
+ 0x0409,0x040A,0x040B,0x040C,0x040D,0x040E,0x040F,0x0450,
+ 0x2011,0x2012,0x2017,0x201A,0x201B,0x201E,0x201F,0x2020,
+ 0x2021,0x2022,0x2023,0x2024,0x2027,0x2028,0x2029,0x202A,
+ 0x202B,0x202C,0x202D,0x202E,0x202F,0x2031,0x2034,0x2036,
+ 0x2037,0x2038,0x2039,0x203A,0x203C,0x203D,0x203E,0x203F,
+ 0x2040,0x2041,0x2042,0x2043,0x2044,0x2045,0x2046,0x2047,
+ 0x2048,0x2049,0x204A,0x204B,0x204C,0x204D,0x204E,0x204F,
+ 0x2050,0x2051,0x2052,0x2053,0x2054,0x2055,0x2056,0x2057,
+ 0x2058,0x2059,0x205A,0x205B,0x205C,0x205D,0x205E,0x205F,
+ 0x2060,0x2061,0x2062,0x2063,0x2064,0x2065,0x2066,0x2067,
+ 0x2068,0x2069,0x206A,0x206B,0x206C,0x206D,0x206E,0x206F,
+ 0x2070,0x2071,0x2072,0x2073,0x2074,0x2075,0x2076,0x2077,
+ 0x2078,0x2079,0x207A,0x207B,0x207C,0x207D,0x207E,0x207F,
+ 0x2080,0x2081,0x2082,0x2083,0x2084,0x2085,0x2086,0x2087,
+ 0x2088,0x2089,0x208A,0x208B,0x208C,0x208D,0x208E,0x208F,
+ 0x2090,0x2091,0x2092,0x2093,0x2094,0x2095,0x2096,0x2097,
+ 0x2098,0x2099,0x209A,0x209B,0x209C,0x209D,0x209E,0x209F,
+ 0x20A0,0x20A1,0x20A2,0x20A3,0x20A4,0x20A5,0x20A6,0x20A7,
+ 0x20A8,0x20A9,0x20AA,0x20AB,0x20AD,0x20AE,0x20AF,0x20B0,
+ 0x20B1,0x20B2,0x20B3,0x20B4,0x20B5,0x20B6,0x20B7,0x20B8,
+ 0x20B9,0x20BA,0x20BB,0x20BC,0x20BD,0x20BE,0x20BF,0x20C0,
+ 0x20C1,0x20C2,0x20C3,0x20C4,0x20C5,0x20C6,0x20C7,0x20C8,
+ 0x20C9,0x20CA,0x20CB,0x20CC,0x20CD,0x20CE,0x20CF,0x20D0,
+ 0x20D1,0x20D2,0x20D3,0x20D4,0x20D5,0x20D6,0x20D7,0x20D8,
+ 0x20D9,0x20DA,0x20DB,0x20DC,0x20DD,0x20DE,0x20DF,0x20E0,
+ 0x20E1,0x20E2,0x20E3,0x20E4,0x20E5,0x20E6,0x20E7,0x20E8,
+ 0x20E9,0x20EA,0x20EB,0x20EC,0x20ED,0x20EE,0x20EF,0x20F0,
+ 0x20F1,0x20F2,0x20F3,0x20F4,0x20F5,0x20F6,0x20F7,0x20F8,
+ 0x20F9,0x20FA,0x20FB,0x20FC,0x20FD,0x20FE,0x20FF,0x2100,
+ 0x2101,0x2102,0x2104,0x2106,0x2107,0x2108,0x210A,0x210B,
+ 0x210C,0x210D,0x210E,0x210F,0x2110,0x2111,0x2112,0x2113,
+ 0x2114,0x2115,0x2117,0x2118,0x2119,0x211A,0x211B,0x211C,
+ 0x211D,0x211E,0x211F,0x2120,0x2122,0x2123,0x2124,0x2125,
+ 0x2126,0x2127,0x2128,0x2129,0x212A,0x212B,0x212C,0x212D,
+ 0x212E,0x212F,0x2130,0x2131,0x2132,0x2133,0x2134,0x2135,
+ 0x2136,0x2137,0x2138,0x2139,0x213A,0x213B,0x213C,0x213D,
+ 0x213E,0x213F,0x2140,0x2141,0x2142,0x2143,0x2144,0x2145,
+ 0x2146,0x2147,0x2148,0x2149,0x214A,0x214B,0x214C,0x214D,
+ 0x214E,0x214F,0x2150,0x2151,0x2152,0x2153,0x2154,0x2155,
+ 0x2156,0x2157,0x2158,0x2159,0x215A,0x215B,0x215C,0x215D,
+ 0x215E,0x215F,0x216C,0x216D,0x216E,0x216F,0x217A,0x217B,
+ 0x217C,0x217D,0x217E,0x217F,0x2180,0x2181,0x2182,0x2183,
+ 0x2184,0x2185,0x2186,0x2187,0x2188,0x2189,0x218A,0x218B,
+ 0x218C,0x218D,0x218E,0x218F,0x2194,0x2195,0x219A,0x219B,
+ 0x219C,0x219D,0x219E,0x219F,0x21A0,0x21A1,0x21A2,0x21A3,
+ 0x21A4,0x21A5,0x21A6,0x21A7,0x21A8,0x21A9,0x21AA,0x21AB,
+ 0x21AC,0x21AD,0x21AE,0x21AF,0x21B0,0x21B1,0x21B2,0x21B3,
+ 0x21B4,0x21B5,0x21B6,0x21B7,0x21B8,0x21B9,0x21BA,0x21BB,
+ 0x21BC,0x21BD,0x21BE,0x21BF,0x21C0,0x21C1,0x21C2,0x21C3,
+ 0x21C4,0x21C5,0x21C6,0x21C7,0x21C8,0x21C9,0x21CA,0x21CB,
+ 0x21CC,0x21CD,0x21CE,0x21CF,0x21D0,0x21D1,0x21D2,0x21D3,
+ 0x21D4,0x21D5,0x21D6,0x21D7,0x21D8,0x21D9,0x21DA,0x21DB,
+ 0x21DC,0x21DD,0x21DE,0x21DF,0x21E0,0x21E1,0x21E2,0x21E3,
+ 0x21E4,0x21E5,0x21E6,0x21E7,0x21E8,0x21E9,0x21EA,0x21EB,
+ 0x21EC,0x21ED,0x21EE,0x21EF,0x21F0,0x21F1,0x21F2,0x21F3,
+ 0x21F4,0x21F5,0x21F6,0x21F7,0x21F8,0x21F9,0x21FA,0x21FB,
+ 0x21FC,0x21FD,0x21FE,0x21FF,0x2200,0x2201,0x2202,0x2203,
+ 0x2204,0x2205,0x2206,0x2207,0x2209,0x220A,0x220B,0x220C,
+ 0x220D,0x220E,0x2210,0x2212,0x2213,0x2214,0x2216,0x2217,
+ 0x2218,0x2219,0x221B,0x221C,0x2221,0x2222,0x2224,0x2226,
+ 0x222C,0x222D,0x222F,0x2230,0x2231,0x2232,0x2233,0x2238,
+ 0x2239,0x223A,0x223B,0x223C,0x223E,0x223F,0x2240,0x2241,
+ 0x2242,0x2243,0x2244,0x2245,0x2246,0x2247,0x2249,0x224A,
+ 0x224B,0x224D,0x224E,0x224F,0x2250,0x2251,0x2253,0x2254,
+ 0x2255,0x2256,0x2257,0x2258,0x2259,0x225A,0x225B,0x225C,
+ 0x225D,0x225E,0x225F,0x2262,0x2263,0x2268,0x2269,0x226A,
+ 0x226B,0x226C,0x226D,0x2270,0x2271,0x2272,0x2273,0x2274,
+ 0x2275,0x2276,0x2277,0x2278,0x2279,0x227A,0x227B,0x227C,
+ 0x227D,0x227E,0x227F,0x2280,0x2281,0x2282,0x2283,0x2284,
+ 0x2285,0x2286,0x2287,0x2288,0x2289,0x228A,0x228B,0x228C,
+ 0x228D,0x228E,0x228F,0x2290,0x2291,0x2292,0x2293,0x2294,
+ 0x2296,0x2297,0x2298,0x229A,0x229B,0x229C,0x229D,0x229E,
+ 0x229F,0x22A0,0x22A1,0x22A2,0x22A3,0x22A4,0x22A6,0x22A7,
+ 0x22A8,0x22A9,0x22AA,0x22AB,0x22AC,0x22AD,0x22AE,0x22AF,
+ 0x22B0,0x22B1,0x22B2,0x22B3,0x22B4,0x22B5,0x22B6,0x22B7,
+ 0x22B8,0x22B9,0x22BA,0x22BB,0x22BC,0x22BD,0x22BE,0x22C0,
+ 0x22C1,0x22C2,0x22C3,0x22C4,0x22C5,0x22C6,0x22C7,0x22C8,
+ 0x22C9,0x22CA,0x22CB,0x22CC,0x22CD,0x22CE,0x22CF,0x22D0,
+ 0x22D1,0x22D2,0x22D3,0x22D4,0x22D5,0x22D6,0x22D7,0x22D8,
+ 0x22D9,0x22DA,0x22DB,0x22DC,0x22DD,0x22DE,0x22DF,0x22E0,
+ 0x22E1,0x22E2,0x22E3,0x22E4,0x22E5,0x22E6,0x22E7,0x22E8,
+ 0x22E9,0x22EA,0x22EB,0x22EC,0x22ED,0x22EE,0x22EF,0x22F0,
+ 0x22F1,0x22F2,0x22F3,0x22F4,0x22F5,0x22F6,0x22F7,0x22F8,
+ 0x22F9,0x22FA,0x22FB,0x22FC,0x22FD,0x22FE,0x22FF,0x2300,
+ 0x2301,0x2302,0x2303,0x2304,0x2305,0x2306,0x2307,0x2308,
+ 0x2309,0x230A,0x230B,0x230C,0x230D,0x230E,0x230F,0x2310,
+ 0x2311,0x2313,0x2314,0x2315,0x2316,0x2317,0x2318,0x2319,
+ 0x231A,0x231B,0x231C,0x231D,0x231E,0x231F,0x2320,0x2321,
+ 0x2322,0x2323,0x2324,0x2325,0x2326,0x2327,0x2328,0x2329,
+ 0x232A,0x232B,0x232C,0x232D,0x232E,0x232F,0x2330,0x2331,
+ 0x2332,0x2333,0x2334,0x2335,0x2336,0x2337,0x2338,0x2339,
+ 0x233A,0x233B,0x233C,0x233D,0x233E,0x233F,0x2340,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,0x235B,0x235C,0x235D,0x235E,0x235F,0x2360,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,0x237B,0x237C,0x237D,0x237E,0x237F,0x2380,0x2381,
+ 0x2382,0x2383,0x2384,0x2385,0x2386,0x2387,0x2388,0x2389,
+ 0x238A,0x238B,0x238C,0x238D,0x238E,0x238F,0x2390,0x2391,
+ 0x2392,0x2393,0x2394,0x2395,0x2396,0x2397,0x2398,0x2399,
+ 0x239A,0x239B,0x239C,0x239D,0x239E,0x239F,0x23A0,0x23A1,
+ 0x23A2,0x23A3,0x23A4,0x23A5,0x23A6,0x23A7,0x23A8,0x23A9,
+ 0x23AA,0x23AB,0x23AC,0x23AD,0x23AE,0x23AF,0x23B0,0x23B1,
+ 0x23B2,0x23B3,0x23B4,0x23B5,0x23B6,0x23B7,0x23B8,0x23B9,
+ 0x23BA,0x23BB,0x23BC,0x23BD,0x23BE,0x23BF,0x23C0,0x23C1,
+ 0x23C2,0x23C3,0x23C4,0x23C5,0x23C6,0x23C7,0x23C8,0x23C9,
+ 0x23CA,0x23CB,0x23CC,0x23CD,0x23CE,0x23CF,0x23D0,0x23D1,
+ 0x23D2,0x23D3,0x23D4,0x23D5,0x23D6,0x23D7,0x23D8,0x23D9,
+ 0x23DA,0x23DB,0x23DC,0x23DD,0x23DE,0x23DF,0x23E0,0x23E1,
+ 0x23E2,0x23E3,0x23E4,0x23E5,0x23E6,0x23E7,0x23E8,0x23E9,
+ 0x23EA,0x23EB,0x23EC,0x23ED,0x23EE,0x23EF,0x23F0,0x23F1,
+ 0x23F2,0x23F3,0x23F4,0x23F5,0x23F6,0x23F7,0x23F8,0x23F9,
+ 0x23FA,0x23FB,0x23FC,0x23FD,0x23FE,0x23FF,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,0x2420,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,0x246A,0x246B,
+ 0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,0x2472,0x2473,
+ 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,0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,
+ 0x24BC,0x24BD,0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,
+ 0x24C4,0x24C5,0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,
+ 0x24CC,0x24CD,0x24CE,0x24CF,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,0x24EA,0x24EB,
+ 0x24EC,0x24ED,0x24EE,0x24EF,0x24F0,0x24F1,0x24F2,0x24F3,
+ 0x24F4,0x24F5,0x24F6,0x24F7,0x24F8,0x24F9,0x24FA,0x24FB,
+ 0x24FC,0x24FD,0x24FE,0x24FF,0x254C,0x254D,0x254E,0x254F,
+ 0x2574,0x2575,0x2576,0x2577,0x2578,0x2579,0x257A,0x257B,
+ 0x257C,0x257D,0x257E,0x257F,0x2580,0x2590,0x2591,0x2592,
+ 0x2596,0x2597,0x2598,0x2599,0x259A,0x259B,0x259C,0x259D,
+ 0x259E,0x259F,0x25A2,0x25A3,0x25A4,0x25A5,0x25A6,0x25A7,
+ 0x25A8,0x25A9,0x25AA,0x25AB,0x25AC,0x25AD,0x25AE,0x25AF,
+ 0x25B0,0x25B1,0x25B4,0x25B5,0x25B6,0x25B7,0x25B8,0x25B9,
+ 0x25BA,0x25BB,0x25BE,0x25BF,0x25C0,0x25C1,0x25C2,0x25C3,
+ 0x25C4,0x25C5,0x25C8,0x25C9,0x25CA,0x25CC,0x25CD,0x25D0,
+ 0x25D1,0x25D2,0x25D3,0x25D4,0x25D5,0x25D6,0x25D7,0x25D8,
+ 0x25D9,0x25DA,0x25DB,0x25DC,0x25DD,0x25DE,0x25DF,0x25E0,
+ 0x25E1,0x25E6,0x25E7,0x25E8,0x25E9,0x25EA,0x25EB,0x25EC,
+ 0x25ED,0x25EE,0x25EF,0x25F0,0x25F1,0x25F2,0x25F3,0x25F4,
+ 0x25F5,0x25F6,0x25F7,0x25F8,0x25F9,0x25FA,0x25FB,0x25FC,
+ 0x25FD,0x25FE,0x25FF,0x2600,0x2601,0x2602,0x2603,0x2604,
+ 0x2607,0x2608,0x260A,0x260B,0x260C,0x260D,0x260E,0x260F,
+ 0x2610,0x2611,0x2612,0x2613,0x2614,0x2615,0x2616,0x2617,
+ 0x2618,0x2619,0x261A,0x261B,0x261C,0x261D,0x261E,0x261F,
+ 0x2620,0x2621,0x2622,0x2623,0x2624,0x2625,0x2626,0x2627,
+ 0x2628,0x2629,0x262A,0x262B,0x262C,0x262D,0x262E,0x262F,
+ 0x2630,0x2631,0x2632,0x2633,0x2634,0x2635,0x2636,0x2637,
+ 0x2638,0x2639,0x263A,0x263B,0x263C,0x263D,0x263E,0x263F,
+ 0x2641,0x2E82,0x2E83,0x2E85,0x2E86,0x2E87,0x2E89,0x2E8A,
+ 0x2E8D,0x2E8E,0x2E8F,0x2E90,0x2E91,0x2E92,0x2E93,0x2E94,
+ 0x2E95,0x2E96,0x2E98,0x2E99,0x2E9A,0x2E9B,0x2E9C,0x2E9D,
+ 0x2E9E,0x2E9F,0x2EA0,0x2EA1,0x2EA2,0x2EA3,0x2EA4,0x2EA5,
+ 0x2EA6,0x2EA8,0x2EA9,0x2EAB,0x2EAC,0x2EAD,0x2EAF,0x2EB0,
+ 0x2EB1,0x2EB2,0x2EB4,0x2EB5,0x2EB8,0x2EB9,0x2EBA,0x2EBC,
+ 0x2EBD,0x2EBE,0x2EBF,0x2EC0,0x2EC1,0x2EC2,0x2EC3,0x2EC4,
+ 0x2EC5,0x2EC6,0x2EC7,0x2EC8,0x2EC9,0x2ECB,0x2ECC,0x2ECD,
+ 0x2ECE,0x2ECF,0x2ED0,0x2ED1,0x2ED2,0x2ED3,0x2ED4,0x2ED5,
+ 0x2ED6,0x2ED7,0x2ED8,0x2ED9,0x2EDA,0x2EDB,0x2EDC,0x2EDD,
+ 0x2EDE,0x2EDF,0x2EE0,0x2EE1,0x2EE2,0x2EE3,0x2EE4,0x2EE5,
+ 0x2EE6,0x2EE7,0x2EE8,0x2EE9,0x2EEA,0x2EEB,0x2EEC,0x2EED,
+ 0x2EEE,0x2EEF,0x2EF0,0x2EF1,0x2EF2,0x2EF3,0x2EF4,0x2EF5,
+ 0x2EF6,0x2EF7,0x2EF8,0x2EF9,0x2EFA,0x2EFB,0x2EFC,0x2EFD,
+ 0x2EFE,0x2EFF,0x2F00,0x2F01,0x2F02,0x2F03,0x2F04,0x2F05,
+ 0x2F06,0x2F07,0x2F08,0x2F09,0x2F0A,0x2F0B,0x2F0C,0x2F0D,
+ 0x2F0E,0x2F0F,0x2F10,0x2F11,0x2F12,0x2F13,0x2F14,0x2F15,
+ 0x2F16,0x2F17,0x2F18,0x2F19,0x2F1A,0x2F1B,0x2F1C,0x2F1D,
+ 0x2F1E,0x2F1F,0x2F20,0x2F21,0x2F22,0x2F23,0x2F24,0x2F25,
+ 0x2F26,0x2F27,0x2F28,0x2F29,0x2F2A,0x2F2B,0x2F2C,0x2F2D,
+ 0x2F2E,0x2F2F,0x2F30,0x2F31,0x2F32,0x2F33,0x2F34,0x2F35,
+ 0x2F36,0x2F37,0x2F38,0x2F39,0x2F3A,0x2F3B,0x2F3C,0x2F3D,
+ 0x2F3E,0x2F3F,0x2F40,0x2F41,0x2F42,0x2F43,0x2F44,0x2F45,
+ 0x2F46,0x2F47,0x2F48,0x2F49,0x2F4A,0x2F4B,0x2F4C,0x2F4D,
+ 0x2F4E,0x2F4F,0x2F50,0x2F51,0x2F52,0x2F53,0x2F54,0x2F55,
+ 0x2F56,0x2F57,0x2F58,0x2F59,0x2F5A,0x2F5B,0x2F5C,0x2F5D,
+ 0x2F5E,0x2F5F,0x2F60,0x2F61,0x2F62,0x2F63,0x2F64,0x2F65,
+ 0x2F66,0x2F67,0x2F68,0x2F69,0x2F6A,0x2F6B,0x2F6C,0x2F6D,
+ 0x2F6E,0x2F6F,0x2F70,0x2F71,0x2F72,0x2F73,0x2F74,0x2F75,
+ 0x2F76,0x2F77,0x2F78,0x2F79,0x2F7A,0x2F7B,0x2F7C,0x2F7D,
+ 0x2F7E,0x2F7F,0x2F80,0x2F81,0x2F82,0x2F83,0x2F84,0x2F85,
+ 0x2F86,0x2F87,0x2F88,0x2F89,0x2F8A,0x2F8B,0x2F8C,0x2F8D,
+ 0x2F8E,0x2F8F,0x2F90,0x2F91,0x2F92,0x2F93,0x2F94,0x2F95,
+ 0x2F96,0x2F97,0x2F98,0x2F99,0x2F9A,0x2F9B,0x2F9C,0x2F9D,
+ 0x2F9E,0x2F9F,0x2FA0,0x2FA1,0x2FA2,0x2FA3,0x2FA4,0x2FA5,
+ 0x2FA6,0x2FA7,0x2FA8,0x2FA9,0x2FAA,0x2FAB,0x2FAC,0x2FAD,
+ 0x2FAE,0x2FAF,0x2FB0,0x2FB1,0x2FB2,0x2FB3,0x2FB4,0x2FB5,
+ 0x2FB6,0x2FB7,0x2FB8,0x2FB9,0x2FBA,0x2FBB,0x2FBC,0x2FBD,
+ 0x2FBE,0x2FBF,0x2FC0,0x2FC1,0x2FC2,0x2FC3,0x2FC4,0x2FC5,
+ 0x2FC6,0x2FC7,0x2FC8,0x2FC9,0x2FCA,0x2FCB,0x2FCC,0x2FCD,
+ 0x2FCE,0x2FCF,0x2FD0,0x2FD1,0x2FD2,0x2FD3,0x2FD4,0x2FD5,
+ 0x2FD6,0x2FD7,0x2FD8,0x2FD9,0x2FDA,0x2FDB,0x2FDC,0x2FDD,
+ 0x2FDE,0x2FDF,0x2FE0,0x2FE1,0x2FE2,0x2FE3,0x2FE4,0x2FE5,
+ 0x2FE6,0x2FE7,0x2FE8,0x2FE9,0x2FEA,0x2FEB,0x2FEC,0x2FED,
+ 0x2FEE,0x2FEF,0x2FFC,0x2FFD,0x2FFE,0x2FFF,0x3004,0x3018,
+ 0x3019,0x301A,0x301B,0x301C,0x301F,0x3020,0x302A,0x302B,
+ 0x302C,0x302D,0x302E,0x302F,0x3030,0x3031,0x3032,0x3033,
+ 0x3034,0x3035,0x3036,0x3037,0x3038,0x3039,0x303A,0x303B,
+ 0x303C,0x303D,0x303F,0x3040,0x3094,0x3095,0x3096,0x3097,
+ 0x3098,0x3099,0x309A,0x309F,0x30A0,0x30F7,0x30F8,0x30F9,
+ 0x30FA,0x30FB,0x30FF,0x3100,0x3101,0x3102,0x3103,0x3104,
+ 0x312A,0x312B,0x312C,0x312D,0x312E,0x312F,0x3130,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,0x318F,0x3190,0x3191,
+ 0x3192,0x3193,0x3194,0x3195,0x3196,0x3197,0x3198,0x3199,
+ 0x319A,0x319B,0x319C,0x319D,0x319E,0x319F,0x31A0,0x31A1,
+ 0x31A2,0x31A3,0x31A4,0x31A5,0x31A6,0x31A7,0x31A8,0x31A9,
+ 0x31AA,0x31AB,0x31AC,0x31AD,0x31AE,0x31AF,0x31B0,0x31B1,
+ 0x31B2,0x31B3,0x31B4,0x31B5,0x31B6,0x31B7,0x31B8,0x31B9,
+ 0x31BA,0x31BB,0x31BC,0x31BD,0x31BE,0x31BF,0x31C0,0x31C1,
+ 0x31C2,0x31C3,0x31C4,0x31C5,0x31C6,0x31C7,0x31C8,0x31C9,
+ 0x31CA,0x31CB,0x31CC,0x31CD,0x31CE,0x31CF,0x31D0,0x31D1,
+ 0x31D2,0x31D3,0x31D4,0x31D5,0x31D6,0x31D7,0x31D8,0x31D9,
+ 0x31DA,0x31DB,0x31DC,0x31DD,0x31DE,0x31DF,0x31E0,0x31E1,
+ 0x31E2,0x31E3,0x31E4,0x31E5,0x31E6,0x31E7,0x31E8,0x31E9,
+ 0x31EA,0x31EB,0x31EC,0x31ED,0x31EE,0x31EF,0x31F0,0x31F1,
+ 0x31F2,0x31F3,0x31F4,0x31F5,0x31F6,0x31F7,0x31F8,0x31F9,
+ 0x31FA,0x31FB,0x31FC,0x31FD,0x31FE,0x31FF,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,0x321C,0x321D,0x321E,0x321F,0x322A,0x322B,
+ 0x322C,0x322D,0x322E,0x322F,0x3230,0x3232,0x3233,0x3234,
+ 0x3235,0x3236,0x3237,0x3238,0x3239,0x323A,0x323B,0x323C,
+ 0x323D,0x323E,0x323F,0x3240,0x3241,0x3242,0x3243,0x3244,
+ 0x3245,0x3246,0x3247,0x3248,0x3249,0x324A,0x324B,0x324C,
+ 0x324D,0x324E,0x324F,0x3250,0x3251,0x3252,0x3253,0x3254,
+ 0x3255,0x3256,0x3257,0x3258,0x3259,0x325A,0x325B,0x325C,
+ 0x325D,0x325E,0x325F,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,0x327C,
+ 0x327D,0x327E,0x327F,0x3280,0x3281,0x3282,0x3283,0x3284,
+ 0x3285,0x3286,0x3287,0x3288,0x3289,0x328A,0x328B,0x328C,
+ 0x328D,0x328E,0x328F,0x3290,0x3291,0x3292,0x3293,0x3294,
+ 0x3295,0x3296,0x3297,0x3298,0x3299,0x329A,0x329B,0x329C,
+ 0x329D,0x329E,0x329F,0x32A0,0x32A1,0x32A2,0x32A4,0x32A5,
+ 0x32A6,0x32A7,0x32A8,0x32A9,0x32AA,0x32AB,0x32AC,0x32AD,
+ 0x32AE,0x32AF,0x32B0,0x32B1,0x32B2,0x32B3,0x32B4,0x32B5,
+ 0x32B6,0x32B7,0x32B8,0x32B9,0x32BA,0x32BB,0x32BC,0x32BD,
+ 0x32BE,0x32BF,0x32C0,0x32C1,0x32C2,0x32C3,0x32C4,0x32C5,
+ 0x32C6,0x32C7,0x32C8,0x32C9,0x32CA,0x32CB,0x32CC,0x32CD,
+ 0x32CE,0x32CF,0x32D0,0x32D1,0x32D2,0x32D3,0x32D4,0x32D5,
+ 0x32D6,0x32D7,0x32D8,0x32D9,0x32DA,0x32DB,0x32DC,0x32DD,
+ 0x32DE,0x32DF,0x32E0,0x32E1,0x32E2,0x32E3,0x32E4,0x32E5,
+ 0x32E6,0x32E7,0x32E8,0x32E9,0x32EA,0x32EB,0x32EC,0x32ED,
+ 0x32EE,0x32EF,0x32F0,0x32F1,0x32F2,0x32F3,0x32F4,0x32F5,
+ 0x32F6,0x32F7,0x32F8,0x32F9,0x32FA,0x32FB,0x32FC,0x32FD,
+ 0x32FE,0x32FF,0x3300,0x3301,0x3302,0x3303,0x3304,0x3305,
+ 0x3306,0x3307,0x3308,0x3309,0x330A,0x330B,0x330C,0x330D,
+ 0x330E,0x330F,0x3310,0x3311,0x3312,0x3313,0x3314,0x3315,
+ 0x3316,0x3317,0x3318,0x3319,0x331A,0x331B,0x331C,0x331D,
+ 0x331E,0x331F,0x3320,0x3321,0x3322,0x3323,0x3324,0x3325,
+ 0x3326,0x3327,0x3328,0x3329,0x332A,0x332B,0x332C,0x332D,
+ 0x332E,0x332F,0x3330,0x3331,0x3332,0x3333,0x3334,0x3335,
+ 0x3336,0x3337,0x3338,0x3339,0x333A,0x333B,0x333C,0x333D,
+ 0x333E,0x333F,0x3340,0x3341,0x3342,0x3343,0x3344,0x3345,
+ 0x3346,0x3347,0x3348,0x3349,0x334A,0x334B,0x334C,0x334D,
+ 0x334E,0x334F,0x3350,0x3351,0x3352,0x3353,0x3354,0x3355,
+ 0x3356,0x3357,0x3358,0x3359,0x335A,0x335B,0x335C,0x335D,
+ 0x335E,0x335F,0x3360,0x3361,0x3362,0x3363,0x3364,0x3365,
+ 0x3366,0x3367,0x3368,0x3369,0x336A,0x336B,0x336C,0x336D,
+ 0x336E,0x336F,0x3370,0x3371,0x3372,0x3373,0x3374,0x3375,
+ 0x3376,0x3377,0x3378,0x3379,0x337A,0x337B,0x337C,0x337D,
+ 0x337E,0x337F,0x3380,0x3381,0x3382,0x3383,0x3384,0x3385,
+ 0x3386,0x3387,0x3388,0x3389,0x338A,0x338B,0x338C,0x338D,
+ 0x3390,0x3391,0x3392,0x3393,0x3394,0x3395,0x3396,0x3397,
+ 0x3398,0x3399,0x339A,0x339B,0x339F,0x33A0,0x33A2,0x33A3,
+ 0x33A4,0x33A5,0x33A6,0x33A7,0x33A8,0x33A9,0x33AA,0x33AB,
+ 0x33AC,0x33AD,0x33AE,0x33AF,0x33B0,0x33B1,0x33B2,0x33B3,
+ 0x33B4,0x33B5,0x33B6,0x33B7,0x33B8,0x33B9,0x33BA,0x33BB,
+ 0x33BC,0x33BD,0x33BE,0x33BF,0x33C0,0x33C1,0x33C2,0x33C3,
+ 0x33C5,0x33C6,0x33C7,0x33C8,0x33C9,0x33CA,0x33CB,0x33CC,
+ 0x33CD,0x33CF,0x33D0,0x33D3,0x33D4,0x33D6,0x33D7,0x33D8,
+ 0x33D9,0x33DA,0x33DB,0x33DC,0x33DD,0x33DE,0x33DF,0x33E0,
+ 0x33E1,0x33E2,0x33E3,0x33E4,0x33E5,0x33E6,0x33E7,0x33E8,
+ 0x33E9,0x33EA,0x33EB,0x33EC,0x33ED,0x33EE,0x33EF,0x33F0,
+ 0x33F1,0x33F2,0x33F3,0x33F4,0x33F5,0x33F6,0x33F7,0x33F8,
+ 0x33F9,0x33FA,0x33FB,0x33FC,0x33FD,0x33FE,0x33FF,0x3400,
+ 0x3401,0x3402,0x3403,0x3404,0x3405,0x3406,0x3407,0x3408,
+ 0x3409,0x340A,0x340B,0x340C,0x340D,0x340E,0x340F,0x3410,
+ 0x3411,0x3412,0x3413,0x3414,0x3415,0x3416,0x3417,0x3418,
+ 0x3419,0x341A,0x341B,0x341C,0x341D,0x341E,0x341F,0x3420,
+ 0x3421,0x3422,0x3423,0x3424,0x3425,0x3426,0x3427,0x3428,
+ 0x3429,0x342A,0x342B,0x342C,0x342D,0x342E,0x342F,0x3430,
+ 0x3431,0x3432,0x3433,0x3434,0x3435,0x3436,0x3437,0x3438,
+ 0x3439,0x343A,0x343B,0x343C,0x343D,0x343E,0x343F,0x3440,
+ 0x3441,0x3442,0x3443,0x3444,0x3445,0x3446,0x3448,0x3449,
+ 0x344A,0x344B,0x344C,0x344D,0x344E,0x344F,0x3450,0x3451,
+ 0x3452,0x3453,0x3454,0x3455,0x3456,0x3457,0x3458,0x3459,
+ 0x345A,0x345B,0x345C,0x345D,0x345E,0x345F,0x3460,0x3461,
+ 0x3462,0x3463,0x3464,0x3465,0x3466,0x3467,0x3468,0x3469,
+ 0x346A,0x346B,0x346C,0x346D,0x346E,0x346F,0x3470,0x3471,
+ 0x3472,0x3474,0x3475,0x3476,0x3477,0x3478,0x3479,0x347A,
+ 0x347B,0x347C,0x347D,0x347E,0x347F,0x3480,0x3481,0x3482,
+ 0x3483,0x3484,0x3485,0x3486,0x3487,0x3488,0x3489,0x348A,
+ 0x348B,0x348C,0x348D,0x348E,0x348F,0x3490,0x3491,0x3492,
+ 0x3493,0x3494,0x3495,0x3496,0x3497,0x3498,0x3499,0x349A,
+ 0x349B,0x349C,0x349D,0x349E,0x349F,0x34A0,0x34A1,0x34A2,
+ 0x34A3,0x34A4,0x34A5,0x34A6,0x34A7,0x34A8,0x34A9,0x34AA,
+ 0x34AB,0x34AC,0x34AD,0x34AE,0x34AF,0x34B0,0x34B1,0x34B2,
+ 0x34B3,0x34B4,0x34B5,0x34B6,0x34B7,0x34B8,0x34B9,0x34BA,
+ 0x34BB,0x34BC,0x34BD,0x34BE,0x34BF,0x34C0,0x34C1,0x34C2,
+ 0x34C3,0x34C4,0x34C5,0x34C6,0x34C7,0x34C8,0x34C9,0x34CA,
+ 0x34CB,0x34CC,0x34CD,0x34CE,0x34CF,0x34D0,0x34D1,0x34D2,
+ 0x34D3,0x34D4,0x34D5,0x34D6,0x34D7,0x34D8,0x34D9,0x34DA,
+ 0x34DB,0x34DC,0x34DD,0x34DE,0x34DF,0x34E0,0x34E1,0x34E2,
+ 0x34E3,0x34E4,0x34E5,0x34E6,0x34E7,0x34E8,0x34E9,0x34EA,
+ 0x34EB,0x34EC,0x34ED,0x34EE,0x34EF,0x34F0,0x34F1,0x34F2,
+ 0x34F3,0x34F4,0x34F5,0x34F6,0x34F7,0x34F8,0x34F9,0x34FA,
+ 0x34FB,0x34FC,0x34FD,0x34FE,0x34FF,0x3500,0x3501,0x3502,
+ 0x3503,0x3504,0x3505,0x3506,0x3507,0x3508,0x3509,0x350A,
+ 0x350B,0x350C,0x350D,0x350E,0x350F,0x3510,0x3511,0x3512,
+ 0x3513,0x3514,0x3515,0x3516,0x3517,0x3518,0x3519,0x351A,
+ 0x351B,0x351C,0x351D,0x351E,0x351F,0x3520,0x3521,0x3522,
+ 0x3523,0x3524,0x3525,0x3526,0x3527,0x3528,0x3529,0x352A,
+ 0x352B,0x352C,0x352D,0x352E,0x352F,0x3530,0x3531,0x3532,
+ 0x3533,0x3534,0x3535,0x3536,0x3537,0x3538,0x3539,0x353A,
+ 0x353B,0x353C,0x353D,0x353E,0x353F,0x3540,0x3541,0x3542,
+ 0x3543,0x3544,0x3545,0x3546,0x3547,0x3548,0x3549,0x354A,
+ 0x354B,0x354C,0x354D,0x354E,0x354F,0x3550,0x3551,0x3552,
+ 0x3553,0x3554,0x3555,0x3556,0x3557,0x3558,0x3559,0x355A,
+ 0x355B,0x355C,0x355D,0x355E,0x355F,0x3560,0x3561,0x3562,
+ 0x3563,0x3564,0x3565,0x3566,0x3567,0x3568,0x3569,0x356A,
+ 0x356B,0x356C,0x356D,0x356E,0x356F,0x3570,0x3571,0x3572,
+ 0x3573,0x3574,0x3575,0x3576,0x3577,0x3578,0x3579,0x357A,
+ 0x357B,0x357C,0x357D,0x357E,0x357F,0x3580,0x3581,0x3582,
+ 0x3583,0x3584,0x3585,0x3586,0x3587,0x3588,0x3589,0x358A,
+ 0x358B,0x358C,0x358D,0x358E,0x358F,0x3590,0x3591,0x3592,
+ 0x3593,0x3594,0x3595,0x3596,0x3597,0x3598,0x3599,0x359A,
+ 0x359B,0x359C,0x359D,0x359F,0x35A0,0x35A1,0x35A2,0x35A3,
+ 0x35A4,0x35A5,0x35A6,0x35A7,0x35A8,0x35A9,0x35AA,0x35AB,
+ 0x35AC,0x35AD,0x35AE,0x35AF,0x35B0,0x35B1,0x35B2,0x35B3,
+ 0x35B4,0x35B5,0x35B6,0x35B7,0x35B8,0x35B9,0x35BA,0x35BB,
+ 0x35BC,0x35BD,0x35BE,0x35BF,0x35C0,0x35C1,0x35C2,0x35C3,
+ 0x35C4,0x35C5,0x35C6,0x35C7,0x35C8,0x35C9,0x35CA,0x35CB,
+ 0x35CC,0x35CD,0x35CE,0x35CF,0x35D0,0x35D1,0x35D2,0x35D3,
+ 0x35D4,0x35D5,0x35D6,0x35D7,0x35D8,0x35D9,0x35DA,0x35DB,
+ 0x35DC,0x35DD,0x35DE,0x35DF,0x35E0,0x35E1,0x35E2,0x35E3,
+ 0x35E4,0x35E5,0x35E6,0x35E7,0x35E8,0x35E9,0x35EA,0x35EB,
+ 0x35EC,0x35ED,0x35EE,0x35EF,0x35F0,0x35F1,0x35F2,0x35F3,
+ 0x35F4,0x35F5,0x35F6,0x35F7,0x35F8,0x35F9,0x35FA,0x35FB,
+ 0x35FC,0x35FD,0x35FE,0x35FF,0x3600,0x3601,0x3602,0x3603,
+ 0x3604,0x3605,0x3606,0x3607,0x3608,0x3609,0x360A,0x360B,
+ 0x360C,0x360D,0x360F,0x3610,0x3611,0x3612,0x3613,0x3614,
+ 0x3615,0x3616,0x3617,0x3618,0x3619,0x3919,0x391A,0x391B,
+ 0x391C,0x391D,0x391E,0x391F,0x3920,0x3921,0x3922,0x3923,
+ 0x3924,0x3925,0x3926,0x3927,0x3928,0x3929,0x392A,0x392B,
+ 0x392C,0x392D,0x392E,0x392F,0x3930,0x3931,0x3932,0x3933,
+ 0x3934,0x3935,0x3936,0x3937,0x3938,0x3939,0x393A,0x393B,
+ 0x393C,0x393D,0x393E,0x393F,0x3940,0x3941,0x3942,0x3943,
+ 0x3944,0x3945,0x3946,0x3947,0x3948,0x3949,0x394A,0x394B,
+ 0x394C,0x394D,0x394E,0x394F,0x3950,0x3951,0x3952,0x3953,
+ 0x3954,0x3955,0x3956,0x3957,0x3958,0x3959,0x395A,0x395B,
+ 0x395C,0x395D,0x395E,0x395F,0x3960,0x3961,0x3962,0x3963,
+ 0x3964,0x3965,0x3966,0x3967,0x3968,0x3969,0x396A,0x396B,
+ 0x396C,0x396D,0x396F,0x3970,0x3971,0x3972,0x3973,0x3974,
+ 0x3975,0x3976,0x3977,0x3978,0x3979,0x397A,0x397B,0x397C,
+ 0x397D,0x397E,0x397F,0x3980,0x3981,0x3982,0x3983,0x3984,
+ 0x3985,0x3986,0x3987,0x3988,0x3989,0x398A,0x398B,0x398C,
+ 0x398D,0x398E,0x398F,0x3990,0x3991,0x3992,0x3993,0x3994,
+ 0x3995,0x3996,0x3997,0x3998,0x3999,0x399A,0x399B,0x399C,
+ 0x399D,0x399E,0x399F,0x39A0,0x39A1,0x39A2,0x39A3,0x39A4,
+ 0x39A5,0x39A6,0x39A7,0x39A8,0x39A9,0x39AA,0x39AB,0x39AC,
+ 0x39AD,0x39AE,0x39AF,0x39B0,0x39B1,0x39B2,0x39B3,0x39B4,
+ 0x39B5,0x39B6,0x39B7,0x39B8,0x39B9,0x39BA,0x39BB,0x39BC,
+ 0x39BD,0x39BE,0x39BF,0x39C0,0x39C1,0x39C2,0x39C3,0x39C4,
+ 0x39C5,0x39C6,0x39C7,0x39C8,0x39C9,0x39CA,0x39CB,0x39CC,
+ 0x39CD,0x39CE,0x39D1,0x39D2,0x39D3,0x39D4,0x39D5,0x39D6,
+ 0x39D7,0x39D8,0x39D9,0x39DA,0x39DB,0x39DC,0x39DD,0x39DE,
+ 0x39E0,0x39E1,0x39E2,0x39E3,0x39E4,0x39E5,0x39E6,0x39E7,
+ 0x39E8,0x39E9,0x39EA,0x39EB,0x39EC,0x39ED,0x39EE,0x39EF,
+ 0x39F0,0x39F1,0x39F2,0x39F3,0x39F4,0x39F5,0x39F6,0x39F7,
+ 0x39F8,0x39F9,0x39FA,0x39FB,0x39FC,0x39FD,0x39FE,0x39FF,
+ 0x3A00,0x3A01,0x3A02,0x3A03,0x3A04,0x3A05,0x3A06,0x3A07,
+ 0x3A08,0x3A09,0x3A0A,0x3A0B,0x3A0C,0x3A0D,0x3A0E,0x3A0F,
+ 0x3A10,0x3A11,0x3A12,0x3A13,0x3A14,0x3A15,0x3A16,0x3A17,
+ 0x3A18,0x3A19,0x3A1A,0x3A1B,0x3A1C,0x3A1D,0x3A1E,0x3A1F,
+ 0x3A20,0x3A21,0x3A22,0x3A23,0x3A24,0x3A25,0x3A26,0x3A27,
+ 0x3A28,0x3A29,0x3A2A,0x3A2B,0x3A2C,0x3A2D,0x3A2E,0x3A2F,
+ 0x3A30,0x3A31,0x3A32,0x3A33,0x3A34,0x3A35,0x3A36,0x3A37,
+ 0x3A38,0x3A39,0x3A3A,0x3A3B,0x3A3C,0x3A3D,0x3A3E,0x3A3F,
+ 0x3A40,0x3A41,0x3A42,0x3A43,0x3A44,0x3A45,0x3A46,0x3A47,
+ 0x3A48,0x3A49,0x3A4A,0x3A4B,0x3A4C,0x3A4D,0x3A4E,0x3A4F,
+ 0x3A50,0x3A51,0x3A52,0x3A53,0x3A54,0x3A55,0x3A56,0x3A57,
+ 0x3A58,0x3A59,0x3A5A,0x3A5B,0x3A5C,0x3A5D,0x3A5E,0x3A5F,
+ 0x3A60,0x3A61,0x3A62,0x3A63,0x3A64,0x3A65,0x3A66,0x3A67,
+ 0x3A68,0x3A69,0x3A6A,0x3A6B,0x3A6C,0x3A6D,0x3A6E,0x3A6F,
+ 0x3A70,0x3A71,0x3A72,0x3A74,0x3A75,0x3A76,0x3A77,0x3A78,
+ 0x3A79,0x3A7A,0x3A7B,0x3A7C,0x3A7D,0x3A7E,0x3A7F,0x3A80,
+ 0x3A81,0x3A82,0x3A83,0x3A84,0x3A85,0x3A86,0x3A87,0x3A88,
+ 0x3A89,0x3A8A,0x3A8B,0x3A8C,0x3A8D,0x3A8E,0x3A8F,0x3A90,
+ 0x3A91,0x3A92,0x3A93,0x3A94,0x3A95,0x3A96,0x3A97,0x3A98,
+ 0x3A99,0x3A9A,0x3A9B,0x3A9C,0x3A9D,0x3A9E,0x3A9F,0x3AA0,
+ 0x3AA1,0x3AA2,0x3AA3,0x3AA4,0x3AA5,0x3AA6,0x3AA7,0x3AA8,
+ 0x3AA9,0x3AAA,0x3AAB,0x3AAC,0x3AAD,0x3AAE,0x3AAF,0x3AB0,
+ 0x3AB1,0x3AB2,0x3AB3,0x3AB4,0x3AB5,0x3AB6,0x3AB7,0x3AB8,
+ 0x3AB9,0x3ABA,0x3ABB,0x3ABC,0x3ABD,0x3ABE,0x3ABF,0x3AC0,
+ 0x3AC1,0x3AC2,0x3AC3,0x3AC4,0x3AC5,0x3AC6,0x3AC7,0x3AC8,
+ 0x3AC9,0x3ACA,0x3ACB,0x3ACC,0x3ACD,0x3ACE,0x3ACF,0x3AD0,
+ 0x3AD1,0x3AD2,0x3AD3,0x3AD4,0x3AD5,0x3AD6,0x3AD7,0x3AD8,
+ 0x3AD9,0x3ADA,0x3ADB,0x3ADC,0x3ADD,0x3ADE,0x3ADF,0x3AE0,
+ 0x3AE1,0x3AE2,0x3AE3,0x3AE4,0x3AE5,0x3AE6,0x3AE7,0x3AE8,
+ 0x3AE9,0x3AEA,0x3AEB,0x3AEC,0x3AED,0x3AEE,0x3AEF,0x3AF0,
+ 0x3AF1,0x3AF2,0x3AF3,0x3AF4,0x3AF5,0x3AF6,0x3AF7,0x3AF8,
+ 0x3AF9,0x3AFA,0x3AFB,0x3AFC,0x3AFD,0x3AFE,0x3AFF,0x3B00,
+ 0x3B01,0x3B02,0x3B03,0x3B04,0x3B05,0x3B06,0x3B07,0x3B08,
+ 0x3B09,0x3B0A,0x3B0B,0x3B0C,0x3B0D,0x3B0E,0x3B0F,0x3B10,
+ 0x3B11,0x3B12,0x3B13,0x3B14,0x3B15,0x3B16,0x3B17,0x3B18,
+ 0x3B19,0x3B1A,0x3B1B,0x3B1C,0x3B1D,0x3B1E,0x3B1F,0x3B20,
+ 0x3B21,0x3B22,0x3B23,0x3B24,0x3B25,0x3B26,0x3B27,0x3B28,
+ 0x3B29,0x3B2A,0x3B2B,0x3B2C,0x3B2D,0x3B2E,0x3B2F,0x3B30,
+ 0x3B31,0x3B32,0x3B33,0x3B34,0x3B35,0x3B36,0x3B37,0x3B38,
+ 0x3B39,0x3B3A,0x3B3B,0x3B3C,0x3B3D,0x3B3E,0x3B3F,0x3B40,
+ 0x3B41,0x3B42,0x3B43,0x3B44,0x3B45,0x3B46,0x3B47,0x3B48,
+ 0x3B49,0x3B4A,0x3B4B,0x3B4C,0x3B4D,0x3B4F,0x3B50,0x3B51,
+ 0x3B52,0x3B53,0x3B54,0x3B55,0x3B56,0x3B57,0x3B58,0x3B59,
+ 0x3B5A,0x3B5B,0x3B5C,0x3B5D,0x3B5E,0x3B5F,0x3B60,0x3B61,
+ 0x3B62,0x3B63,0x3B64,0x3B65,0x3B66,0x3B67,0x3B68,0x3B69,
+ 0x3B6A,0x3B6B,0x3B6C,0x3B6D,0x3B6E,0x3B6F,0x3B70,0x3B71,
+ 0x3B72,0x3B73,0x3B74,0x3B75,0x3B76,0x3B77,0x3B78,0x3B79,
+ 0x3B7A,0x3B7B,0x3B7C,0x3B7D,0x3B7E,0x3B7F,0x3B80,0x3B81,
+ 0x3B82,0x3B83,0x3B84,0x3B85,0x3B86,0x3B87,0x3B88,0x3B89,
+ 0x3B8A,0x3B8B,0x3B8C,0x3B8D,0x3B8E,0x3B8F,0x3B90,0x3B91,
+ 0x3B92,0x3B93,0x3B94,0x3B95,0x3B96,0x3B97,0x3B98,0x3B99,
+ 0x3B9A,0x3B9B,0x3B9C,0x3B9D,0x3B9E,0x3B9F,0x3BA0,0x3BA1,
+ 0x3BA2,0x3BA3,0x3BA4,0x3BA5,0x3BA6,0x3BA7,0x3BA8,0x3BA9,
+ 0x3BAA,0x3BAB,0x3BAC,0x3BAD,0x3BAE,0x3BAF,0x3BB0,0x3BB1,
+ 0x3BB2,0x3BB3,0x3BB4,0x3BB5,0x3BB6,0x3BB7,0x3BB8,0x3BB9,
+ 0x3BBA,0x3BBB,0x3BBC,0x3BBD,0x3BBE,0x3BBF,0x3BC0,0x3BC1,
+ 0x3BC2,0x3BC3,0x3BC4,0x3BC5,0x3BC6,0x3BC7,0x3BC8,0x3BC9,
+ 0x3BCA,0x3BCB,0x3BCC,0x3BCD,0x3BCE,0x3BCF,0x3BD0,0x3BD1,
+ 0x3BD2,0x3BD3,0x3BD4,0x3BD5,0x3BD6,0x3BD7,0x3BD8,0x3BD9,
+ 0x3BDA,0x3BDB,0x3BDC,0x3BDD,0x3BDE,0x3BDF,0x3BE0,0x3BE1,
+ 0x3BE2,0x3BE3,0x3BE4,0x3BE5,0x3BE6,0x3BE7,0x3BE8,0x3BE9,
+ 0x3BEA,0x3BEB,0x3BEC,0x3BED,0x3BEE,0x3BEF,0x3BF0,0x3BF1,
+ 0x3BF2,0x3BF3,0x3BF4,0x3BF5,0x3BF6,0x3BF7,0x3BF8,0x3BF9,
+ 0x3BFA,0x3BFB,0x3BFC,0x3BFD,0x3BFE,0x3BFF,0x3C00,0x3C01,
+ 0x3C02,0x3C03,0x3C04,0x3C05,0x3C06,0x3C07,0x3C08,0x3C09,
+ 0x3C0A,0x3C0B,0x3C0C,0x3C0D,0x3C0E,0x3C0F,0x3C10,0x3C11,
+ 0x3C12,0x3C13,0x3C14,0x3C15,0x3C16,0x3C17,0x3C18,0x3C19,
+ 0x3C1A,0x3C1B,0x3C1C,0x3C1D,0x3C1E,0x3C1F,0x3C20,0x3C21,
+ 0x3C22,0x3C23,0x3C24,0x3C25,0x3C26,0x3C27,0x3C28,0x3C29,
+ 0x3C2A,0x3C2B,0x3C2C,0x3C2D,0x3C2E,0x3C2F,0x3C30,0x3C31,
+ 0x3C32,0x3C33,0x3C34,0x3C35,0x3C36,0x3C37,0x3C38,0x3C39,
+ 0x3C3A,0x3C3B,0x3C3C,0x3C3D,0x3C3E,0x3C3F,0x3C40,0x3C41,
+ 0x3C42,0x3C43,0x3C44,0x3C45,0x3C46,0x3C47,0x3C48,0x3C49,
+ 0x3C4A,0x3C4B,0x3C4C,0x3C4D,0x3C4E,0x3C4F,0x3C50,0x3C51,
+ 0x3C52,0x3C53,0x3C54,0x3C55,0x3C56,0x3C57,0x3C58,0x3C59,
+ 0x3C5A,0x3C5B,0x3C5C,0x3C5D,0x3C5E,0x3C5F,0x3C60,0x3C61,
+ 0x3C62,0x3C63,0x3C64,0x3C65,0x3C66,0x3C67,0x3C68,0x3C69,
+ 0x3C6A,0x3C6B,0x3C6C,0x3C6D,0x3C6F,0x3C70,0x3C71,0x3C72,
+ 0x3C73,0x3C74,0x3C75,0x3C76,0x3C77,0x3C78,0x3C79,0x3C7A,
+ 0x3C7B,0x3C7C,0x3C7D,0x3C7E,0x3C7F,0x3C80,0x3C81,0x3C82,
+ 0x3C83,0x3C84,0x3C85,0x3C86,0x3C87,0x3C88,0x3C89,0x3C8A,
+ 0x3C8B,0x3C8C,0x3C8D,0x3C8E,0x3C8F,0x3C90,0x3C91,0x3C92,
+ 0x3C93,0x3C94,0x3C95,0x3C96,0x3C97,0x3C98,0x3C99,0x3C9A,
+ 0x3C9B,0x3C9C,0x3C9D,0x3C9E,0x3C9F,0x3CA0,0x3CA1,0x3CA2,
+ 0x3CA3,0x3CA4,0x3CA5,0x3CA6,0x3CA7,0x3CA8,0x3CA9,0x3CAA,
+ 0x3CAB,0x3CAC,0x3CAD,0x3CAE,0x3CAF,0x3CB0,0x3CB1,0x3CB2,
+ 0x3CB3,0x3CB4,0x3CB5,0x3CB6,0x3CB7,0x3CB8,0x3CB9,0x3CBA,
+ 0x3CBB,0x3CBC,0x3CBD,0x3CBE,0x3CBF,0x3CC0,0x3CC1,0x3CC2,
+ 0x3CC3,0x3CC4,0x3CC5,0x3CC6,0x3CC7,0x3CC8,0x3CC9,0x3CCA,
+ 0x3CCB,0x3CCC,0x3CCD,0x3CCE,0x3CCF,0x3CD0,0x3CD1,0x3CD2,
+ 0x3CD3,0x3CD4,0x3CD5,0x3CD6,0x3CD7,0x3CD8,0x3CD9,0x3CDA,
+ 0x3CDB,0x3CDC,0x3CDD,0x3CDE,0x3CDF,0x4057,0x4058,0x4059,
+ 0x405A,0x405B,0x405C,0x405D,0x405E,0x405F,0x4060,0x4061,
+ 0x4062,0x4063,0x4064,0x4065,0x4066,0x4067,0x4068,0x4069,
+ 0x406A,0x406B,0x406C,0x406D,0x406E,0x406F,0x4070,0x4071,
+ 0x4072,0x4073,0x4074,0x4075,0x4076,0x4077,0x4078,0x4079,
+ 0x407A,0x407B,0x407C,0x407D,0x407E,0x407F,0x4080,0x4081,
+ 0x4082,0x4083,0x4084,0x4085,0x4086,0x4087,0x4088,0x4089,
+ 0x408A,0x408B,0x408C,0x408D,0x408E,0x408F,0x4090,0x4091,
+ 0x4092,0x4093,0x4094,0x4095,0x4096,0x4097,0x4098,0x4099,
+ 0x409A,0x409B,0x409C,0x409D,0x409E,0x409F,0x40A0,0x40A1,
+ 0x40A2,0x40A3,0x40A4,0x40A5,0x40A6,0x40A7,0x40A8,0x40A9,
+ 0x40AA,0x40AB,0x40AC,0x40AD,0x40AE,0x40AF,0x40B0,0x40B1,
+ 0x40B2,0x40B3,0x40B4,0x40B5,0x40B6,0x40B7,0x40B8,0x40B9,
+ 0x40BA,0x40BB,0x40BC,0x40BD,0x40BE,0x40BF,0x40C0,0x40C1,
+ 0x40C2,0x40C3,0x40C4,0x40C5,0x40C6,0x40C7,0x40C8,0x40C9,
+ 0x40CA,0x40CB,0x40CC,0x40CD,0x40CE,0x40CF,0x40D0,0x40D1,
+ 0x40D2,0x40D3,0x40D4,0x40D5,0x40D6,0x40D7,0x40D8,0x40D9,
+ 0x40DA,0x40DB,0x40DC,0x40DD,0x40DE,0x40DF,0x40E0,0x40E1,
+ 0x40E2,0x40E3,0x40E4,0x40E5,0x40E6,0x40E7,0x40E8,0x40E9,
+ 0x40EA,0x40EB,0x40EC,0x40ED,0x40EE,0x40EF,0x40F0,0x40F1,
+ 0x40F2,0x40F3,0x40F4,0x40F5,0x40F6,0x40F7,0x40F8,0x40F9,
+ 0x40FA,0x40FB,0x40FC,0x40FD,0x40FE,0x40FF,0x4100,0x4101,
+ 0x4102,0x4103,0x4104,0x4105,0x4106,0x4107,0x4108,0x4109,
+ 0x410A,0x410B,0x410C,0x410D,0x410E,0x410F,0x4110,0x4111,
+ 0x4112,0x4113,0x4114,0x4115,0x4116,0x4117,0x4118,0x4119,
+ 0x411A,0x411B,0x411C,0x411D,0x411E,0x411F,0x4120,0x4121,
+ 0x4122,0x4123,0x4124,0x4125,0x4126,0x4127,0x4128,0x4129,
+ 0x412A,0x412B,0x412C,0x412D,0x412E,0x412F,0x4130,0x4131,
+ 0x4132,0x4133,0x4134,0x4135,0x4136,0x4137,0x4138,0x4139,
+ 0x413A,0x413B,0x413C,0x413D,0x413E,0x413F,0x4140,0x4141,
+ 0x4142,0x4143,0x4144,0x4145,0x4146,0x4147,0x4148,0x4149,
+ 0x414A,0x414B,0x414C,0x414D,0x414E,0x414F,0x4150,0x4151,
+ 0x4152,0x4153,0x4154,0x4155,0x4156,0x4157,0x4158,0x4159,
+ 0x415A,0x415B,0x415C,0x415D,0x415E,0x4338,0x4339,0x433A,
+ 0x433B,0x433C,0x433D,0x433E,0x433F,0x4340,0x4341,0x4342,
+ 0x4343,0x4344,0x4345,0x4346,0x4347,0x4348,0x4349,0x434A,
+ 0x434B,0x434C,0x434D,0x434E,0x434F,0x4350,0x4351,0x4352,
+ 0x4353,0x4354,0x4355,0x4356,0x4357,0x4358,0x4359,0x435A,
+ 0x435B,0x435C,0x435D,0x435E,0x435F,0x4360,0x4361,0x4362,
+ 0x4363,0x4364,0x4365,0x4366,0x4367,0x4368,0x4369,0x436A,
+ 0x436B,0x436C,0x436D,0x436E,0x436F,0x4370,0x4371,0x4372,
+ 0x4373,0x4374,0x4375,0x4376,0x4377,0x4378,0x4379,0x437A,
+ 0x437B,0x437C,0x437D,0x437E,0x437F,0x4380,0x4381,0x4382,
+ 0x4383,0x4384,0x4385,0x4386,0x4387,0x4388,0x4389,0x438A,
+ 0x438B,0x438C,0x438D,0x438E,0x438F,0x4390,0x4391,0x4392,
+ 0x4393,0x4394,0x4395,0x4396,0x4397,0x4398,0x4399,0x439A,
+ 0x439B,0x439C,0x439D,0x439E,0x439F,0x43A0,0x43A1,0x43A2,
+ 0x43A3,0x43A4,0x43A5,0x43A6,0x43A7,0x43A8,0x43A9,0x43AA,
+ 0x43AB,0x43AD,0x43AE,0x43AF,0x43B0,0x43B2,0x43B3,0x43B4,
+ 0x43B5,0x43B6,0x43B7,0x43B8,0x43B9,0x43BA,0x43BB,0x43BC,
+ 0x43BD,0x43BE,0x43BF,0x43C0,0x43C1,0x43C2,0x43C3,0x43C4,
+ 0x43C5,0x43C6,0x43C7,0x43C8,0x43C9,0x43CA,0x43CB,0x43CC,
+ 0x43CD,0x43CE,0x43CF,0x43D0,0x43D1,0x43D2,0x43D3,0x43D4,
+ 0x43D5,0x43D6,0x43D7,0x43D8,0x43D9,0x43DA,0x43DB,0x43DC,
+ 0x43DE,0x43DF,0x43E0,0x43E1,0x43E2,0x43E3,0x43E4,0x43E5,
+ 0x43E6,0x43E7,0x43E8,0x43E9,0x43EA,0x43EB,0x43EC,0x43ED,
+ 0x43EE,0x43EF,0x43F0,0x43F1,0x43F2,0x43F3,0x43F4,0x43F5,
+ 0x43F6,0x43F7,0x43F8,0x43F9,0x43FA,0x43FB,0x43FC,0x43FD,
+ 0x43FE,0x43FF,0x4400,0x4401,0x4402,0x4403,0x4404,0x4405,
+ 0x4406,0x4407,0x4408,0x4409,0x440A,0x440B,0x440C,0x440D,
+ 0x440E,0x440F,0x4410,0x4411,0x4412,0x4413,0x4414,0x4415,
+ 0x4416,0x4417,0x4418,0x4419,0x441A,0x441B,0x441C,0x441D,
+ 0x441E,0x441F,0x4420,0x4421,0x4422,0x4423,0x4424,0x4425,
+ 0x4426,0x4427,0x4428,0x4429,0x442A,0x442B,0x442C,0x442D,
+ 0x442E,0x442F,0x4430,0x4431,0x4432,0x4433,0x4434,0x4435,
+ 0x4436,0x4437,0x4438,0x4439,0x443A,0x443B,0x443C,0x443D,
+ 0x443E,0x443F,0x4440,0x4441,0x4442,0x4443,0x4444,0x4445,
+ 0x4446,0x4447,0x4448,0x4449,0x444A,0x444B,0x444C,0x444D,
+ 0x444E,0x444F,0x4450,0x4451,0x4452,0x4453,0x4454,0x4455,
+ 0x4456,0x4457,0x4458,0x4459,0x445A,0x445B,0x445C,0x445D,
+ 0x445E,0x445F,0x4460,0x4461,0x4462,0x4463,0x4464,0x4465,
+ 0x4466,0x4467,0x4468,0x4469,0x446A,0x446B,0x446C,0x446D,
+ 0x446E,0x446F,0x4470,0x4471,0x4472,0x4473,0x4474,0x4475,
+ 0x4476,0x4477,0x4478,0x4479,0x447A,0x447B,0x447C,0x447D,
+ 0x447E,0x447F,0x4480,0x4481,0x4482,0x4483,0x4484,0x4485,
+ 0x4486,0x4487,0x4488,0x4489,0x448A,0x448B,0x448C,0x448D,
+ 0x448E,0x448F,0x4490,0x4491,0x4492,0x4493,0x4494,0x4495,
+ 0x4496,0x4497,0x4498,0x4499,0x449A,0x449B,0x449C,0x449D,
+ 0x449E,0x449F,0x44A0,0x44A1,0x44A2,0x44A3,0x44A4,0x44A5,
+ 0x44A6,0x44A7,0x44A8,0x44A9,0x44AA,0x44AB,0x44AC,0x44AD,
+ 0x44AE,0x44AF,0x44B0,0x44B1,0x44B2,0x44B3,0x44B4,0x44B5,
+ 0x44B6,0x44B7,0x44B8,0x44B9,0x44BA,0x44BB,0x44BC,0x44BD,
+ 0x44BE,0x44BF,0x44C0,0x44C1,0x44C2,0x44C3,0x44C4,0x44C5,
+ 0x44C6,0x44C7,0x44C8,0x44C9,0x44CA,0x44CB,0x44CC,0x44CD,
+ 0x44CE,0x44CF,0x44D0,0x44D1,0x44D2,0x44D3,0x44D4,0x44D5,
+ 0x464D,0x464E,0x464F,0x4650,0x4651,0x4652,0x4653,0x4654,
+ 0x4655,0x4656,0x4657,0x4658,0x4659,0x465A,0x465B,0x465C,
+ 0x465D,0x465E,0x465F,0x4660,0x4662,0x4663,0x4664,0x4665,
+ 0x4666,0x4667,0x4668,0x4669,0x466A,0x466B,0x466C,0x466D,
+ 0x466E,0x466F,0x4670,0x4671,0x4672,0x4673,0x4674,0x4675,
+ 0x4676,0x4677,0x4678,0x4679,0x467A,0x467B,0x467C,0x467D,
+ 0x467E,0x467F,0x4680,0x4681,0x4682,0x4683,0x4684,0x4685,
+ 0x4686,0x4687,0x4688,0x4689,0x468A,0x468B,0x468C,0x468D,
+ 0x468E,0x468F,0x4690,0x4691,0x4692,0x4693,0x4694,0x4695,
+ 0x4696,0x4697,0x4698,0x4699,0x469A,0x469B,0x469C,0x469D,
+ 0x469E,0x469F,0x46A0,0x46A1,0x46A2,0x46A3,0x46A4,0x46A5,
+ 0x46A6,0x46A7,0x46A8,0x46A9,0x46AA,0x46AB,0x46AC,0x46AD,
+ 0x46AE,0x46AF,0x46B0,0x46B1,0x46B2,0x46B3,0x46B4,0x46B5,
+ 0x46B6,0x46B7,0x46B8,0x46B9,0x46BA,0x46BB,0x46BC,0x46BD,
+ 0x46BE,0x46BF,0x46C0,0x46C1,0x46C2,0x46C3,0x46C4,0x46C5,
+ 0x46C6,0x46C7,0x46C8,0x46C9,0x46CA,0x46CB,0x46CC,0x46CD,
+ 0x46CE,0x46CF,0x46D0,0x46D1,0x46D2,0x46D3,0x46D4,0x46D5,
+ 0x46D6,0x46D7,0x46D8,0x46D9,0x46DA,0x46DB,0x46DC,0x46DD,
+ 0x46DE,0x46DF,0x46E0,0x46E1,0x46E2,0x46E3,0x46E4,0x46E5,
+ 0x46E6,0x46E7,0x46E8,0x46E9,0x46EA,0x46EB,0x46EC,0x46ED,
+ 0x46EE,0x46EF,0x46F0,0x46F1,0x46F2,0x46F3,0x46F4,0x46F5,
+ 0x46F6,0x46F7,0x46F8,0x46F9,0x46FA,0x46FB,0x46FC,0x46FD,
+ 0x46FE,0x46FF,0x4700,0x4701,0x4702,0x4703,0x4704,0x4705,
+ 0x4706,0x4707,0x4708,0x4709,0x470A,0x470B,0x470C,0x470D,
+ 0x470E,0x470F,0x4710,0x4711,0x4712,0x4713,0x4714,0x4715,
+ 0x4716,0x4717,0x4718,0x4719,0x471A,0x471B,0x471C,0x471D,
+ 0x471E,0x471F,0x4720,0x4721,0x4722,0x4724,0x4725,0x4726,
+ 0x4727,0x4728,0x472A,0x472B,0x472C,0x472D,0x472E,0x472F,
+ 0x4730,0x4731,0x4732,0x4733,0x4734,0x4735,0x4736,0x4737,
+ 0x4738,0x4739,0x473A,0x473B,0x473C,0x473D,0x473E,0x473F,
+ 0x4740,0x4741,0x4742,0x4743,0x4744,0x4745,0x4746,0x4747,
+ 0x4748,0x4749,0x474A,0x474B,0x474C,0x474D,0x474E,0x474F,
+ 0x4750,0x4751,0x4752,0x4753,0x4754,0x4755,0x4756,0x4757,
+ 0x4758,0x4759,0x475A,0x475B,0x475C,0x475D,0x475E,0x475F,
+ 0x4760,0x4761,0x4762,0x4763,0x4764,0x4765,0x4766,0x4767,
+ 0x4768,0x4769,0x476A,0x476B,0x476C,0x476D,0x476E,0x476F,
+ 0x4770,0x4771,0x4772,0x4773,0x4774,0x4775,0x4776,0x4777,
+ 0x4778,0x4779,0x477A,0x477B,0x477D,0x477E,0x477F,0x4780,
+ 0x4781,0x4782,0x4783,0x4784,0x4785,0x4786,0x4787,0x4788,
+ 0x4789,0x478A,0x478B,0x478C,0x4948,0x4949,0x494A,0x494B,
+ 0x494C,0x494D,0x494E,0x494F,0x4950,0x4951,0x4952,0x4953,
+ 0x4954,0x4955,0x4956,0x4957,0x4958,0x4959,0x495A,0x495B,
+ 0x495C,0x495D,0x495E,0x495F,0x4960,0x4961,0x4962,0x4963,
+ 0x4964,0x4965,0x4966,0x4967,0x4968,0x4969,0x496A,0x496B,
+ 0x496C,0x496D,0x496E,0x496F,0x4970,0x4971,0x4972,0x4973,
+ 0x4974,0x4975,0x4976,0x4977,0x4978,0x4979,0x497B,0x497C,
+ 0x497E,0x497F,0x4980,0x4981,0x4984,0x4987,0x4988,0x4989,
+ 0x498A,0x498B,0x498C,0x498D,0x498E,0x498F,0x4990,0x4991,
+ 0x4992,0x4993,0x4994,0x4995,0x4996,0x4997,0x4998,0x4999,
+ 0x499A,0x499C,0x499D,0x499E,0x49A0,0x49A1,0x49A2,0x49A3,
+ 0x49A4,0x49A5,0x49A6,0x49A7,0x49A8,0x49A9,0x49AA,0x49AB,
+ 0x49AC,0x49AD,0x49AE,0x49AF,0x49B0,0x49B1,0x49B2,0x49B3,
+ 0x49B4,0x49B5,0x4C78,0x4C79,0x4C7A,0x4C7B,0x4C7C,0x4C7D,
+ 0x4C7E,0x4C7F,0x4C80,0x4C81,0x4C82,0x4C83,0x4C84,0x4C85,
+ 0x4C86,0x4C87,0x4C88,0x4C89,0x4C8A,0x4C8B,0x4C8C,0x4C8D,
+ 0x4C8E,0x4C8F,0x4C90,0x4C91,0x4C92,0x4C93,0x4C94,0x4C95,
+ 0x4C96,0x4C97,0x4C98,0x4C99,0x4C9A,0x4C9B,0x4C9C,0x4C9D,
+ 0x4C9E,0x4CA4,0x4CA5,0x4CA6,0x4CA7,0x4CA8,0x4CA9,0x4CAA,
+ 0x4CAB,0x4CAC,0x4CAD,0x4CAE,0x4CAF,0x4CB0,0x4CB1,0x4CB2,
+ 0x4CB3,0x4CB4,0x4CB5,0x4CB6,0x4CB7,0x4CB8,0x4CB9,0x4CBA,
+ 0x4CBB,0x4CBC,0x4CBD,0x4CBE,0x4CBF,0x4CC0,0x4CC1,0x4CC2,
+ 0x4CC3,0x4CC4,0x4CC5,0x4CC6,0x4CC7,0x4CC8,0x4CC9,0x4CCA,
+ 0x4CCB,0x4CCC,0x4CCD,0x4CCE,0x4CCF,0x4CD0,0x4CD1,0x4CD2,
+ 0x4CD3,0x4CD4,0x4CD5,0x4CD6,0x4CD7,0x4CD8,0x4CD9,0x4CDA,
+ 0x4CDB,0x4CDC,0x4CDD,0x4CDE,0x4CDF,0x4CE0,0x4CE1,0x4CE2,
+ 0x4CE3,0x4CE4,0x4CE5,0x4CE6,0x4CE7,0x4CE8,0x4CE9,0x4CEA,
+ 0x4CEB,0x4CEC,0x4CED,0x4CEE,0x4CEF,0x4CF0,0x4CF1,0x4CF2,
+ 0x4CF3,0x4CF4,0x4CF5,0x4CF6,0x4CF7,0x4CF8,0x4CF9,0x4CFA,
+ 0x4CFB,0x4CFC,0x4CFD,0x4CFE,0x4CFF,0x4D00,0x4D01,0x4D02,
+ 0x4D03,0x4D04,0x4D05,0x4D06,0x4D07,0x4D08,0x4D09,0x4D0A,
+ 0x4D0B,0x4D0C,0x4D0D,0x4D0E,0x4D0F,0x4D10,0x4D11,0x4D12,
+ 0x4D1A,0x4D1B,0x4D1C,0x4D1D,0x4D1E,0x4D1F,0x4D20,0x4D21,
+ 0x4D22,0x4D23,0x4D24,0x4D25,0x4D26,0x4D27,0x4D28,0x4D29,
+ 0x4D2A,0x4D2B,0x4D2C,0x4D2D,0x4D2E,0x4D2F,0x4D30,0x4D31,
+ 0x4D32,0x4D33,0x4D34,0x4D35,0x4D36,0x4D37,0x4D38,0x4D39,
+ 0x4D3A,0x4D3B,0x4D3C,0x4D3D,0x4D3E,0x4D3F,0x4D40,0x4D41,
+ 0x4D42,0x4D43,0x4D44,0x4D45,0x4D46,0x4D47,0x4D48,0x4D49,
+ 0x4D4A,0x4D4B,0x4D4C,0x4D4D,0x4D4E,0x4D4F,0x4D50,0x4D51,
+ 0x4D52,0x4D53,0x4D54,0x4D55,0x4D56,0x4D57,0x4D58,0x4D59,
+ 0x4D5A,0x4D5B,0x4D5C,0x4D5D,0x4D5E,0x4D5F,0x4D60,0x4D61,
+ 0x4D62,0x4D63,0x4D64,0x4D65,0x4D66,0x4D67,0x4D68,0x4D69,
+ 0x4D6A,0x4D6B,0x4D6C,0x4D6D,0x4D6E,0x4D6F,0x4D70,0x4D71,
+ 0x4D72,0x4D73,0x4D74,0x4D75,0x4D76,0x4D77,0x4D78,0x4D79,
+ 0x4D7A,0x4D7B,0x4D7C,0x4D7D,0x4D7E,0x4D7F,0x4D80,0x4D81,
+ 0x4D82,0x4D83,0x4D84,0x4D85,0x4D86,0x4D87,0x4D88,0x4D89,
+ 0x4D8A,0x4D8B,0x4D8C,0x4D8D,0x4D8E,0x4D8F,0x4D90,0x4D91,
+ 0x4D92,0x4D93,0x4D94,0x4D95,0x4D96,0x4D97,0x4D98,0x4D99,
+ 0x4D9A,0x4D9B,0x4D9C,0x4D9D,0x4D9E,0x4D9F,0x4DA0,0x4DA1,
+ 0x4DA2,0x4DA3,0x4DA4,0x4DA5,0x4DA6,0x4DA7,0x4DA8,0x4DA9,
+ 0x4DAA,0x4DAB,0x4DAC,0x4DAD,0x4DAF,0x4DB0,0x4DB1,0x4DB2,
+ 0x4DB3,0x4DB4,0x4DB5,0x4DB6,0x4DB7,0x4DB8,0x4DB9,0x4DBA,
+ 0x4DBB,0x4DBC,0x4DBD,0x4DBE,0x4DBF,0x4DC0,0x4DC1,0x4DC2,
+ 0x4DC3,0x4DC4,0x4DC5,0x4DC6,0x4DC7,0x4DC8,0x4DC9,0x4DCA,
+ 0x4DCB,0x4DCC,0x4DCD,0x4DCE,0x4DCF,0x4DD0,0x4DD1,0x4DD2,
+ 0x4DD3,0x4DD4,0x4DD5,0x4DD6,0x4DD7,0x4DD8,0x4DD9,0x4DDA,
+ 0x4DDB,0x4DDC,0x4DDD,0x4DDE,0x4DDF,0x4DE0,0x4DE1,0x4DE2,
+ 0x4DE3,0x4DE4,0x4DE5,0x4DE6,0x4DE7,0x4DE8,0x4DE9,0x4DEA,
+ 0x4DEB,0x4DEC,0x4DED,0x4DEE,0x4DEF,0x4DF0,0x4DF1,0x4DF2,
+ 0x4DF3,0x4DF4,0x4DF5,0x4DF6,0x4DF7,0x4DF8,0x4DF9,0x4DFA,
+ 0x4DFB,0x4DFC,0x4DFD,0x4DFE,0x4DFF,0xE76C,0xE7C8,0xE7E7,
+ 0xE7E8,0xE7E9,0xE7EA,0xE7EB,0xE7EC,0xE7ED,0xE7EE,0xE7EF,
+ 0xE7F0,0xE7F1,0xE7F2,0xE7F3,0xE815,0xE819,0xE81A,0xE81B,
+ 0xE81C,0xE81D,0xE81F,0xE820,0xE821,0xE822,0xE823,0xE824,
+ 0xE825,0xE827,0xE828,0xE829,0xE82A,0xE82D,0xE82E,0xE82F,
+ 0xE830,0xE833,0xE834,0xE835,0xE836,0xE837,0xE838,0xE839,
+ 0xE83A,0xE83C,0xE83D,0xE83E,0xE83F,0xE840,0xE841,0xE842,
+ 0xE844,0xE845,0xE846,0xE847,0xE848,0xE849,0xE84A,0xE84B,
+ 0xE84C,0xE84D,0xE84E,0xE84F,0xE850,0xE851,0xE852,0xE853,
+ 0xE856,0xE857,0xE858,0xE859,0xE85A,0xE85B,0xE85C,0xE85D,
+ 0xE85E,0xE85F,0xE860,0xE861,0xE862,0xE863,0xF92D,0xF92E,
+ 0xF92F,0xF930,0xF931,0xF932,0xF933,0xF934,0xF935,0xF936,
+ 0xF937,0xF938,0xF939,0xF93A,0xF93B,0xF93C,0xF93D,0xF93E,
+ 0xF93F,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,0xF97A,0xF97B,0xF97C,0xF97D,0xF97E,0xF97F,
+ 0xF980,0xF981,0xF982,0xF983,0xF984,0xF985,0xF986,0xF987,
+ 0xF988,0xF989,0xF98A,0xF98B,0xF98C,0xF98D,0xF98E,0xF98F,
+ 0xF990,0xF991,0xF992,0xF993,0xF994,0xF996,0xF997,0xF998,
+ 0xF999,0xF99A,0xF99B,0xF99C,0xF99D,0xF99E,0xF99F,0xF9A0,
+ 0xF9A1,0xF9A2,0xF9A3,0xF9A4,0xF9A5,0xF9A6,0xF9A7,0xF9A8,
+ 0xF9A9,0xF9AA,0xF9AB,0xF9AC,0xF9AD,0xF9AE,0xF9AF,0xF9B0,
+ 0xF9B1,0xF9B2,0xF9B3,0xF9B4,0xF9B5,0xF9B6,0xF9B7,0xF9B8,
+ 0xF9B9,0xF9BA,0xF9BB,0xF9BC,0xF9BD,0xF9BE,0xF9BF,0xF9C0,
+ 0xF9C1,0xF9C2,0xF9C3,0xF9C4,0xF9C5,0xF9C6,0xF9C7,0xF9C8,
+ 0xF9C9,0xF9CA,0xF9CB,0xF9CC,0xF9CD,0xF9CE,0xF9CF,0xF9D0,
+ 0xF9D1,0xF9D2,0xF9D3,0xF9D4,0xF9D5,0xF9D6,0xF9D7,0xF9D8,
+ 0xF9D9,0xF9DA,0xF9DB,0xF9DC,0xF9DD,0xF9DE,0xF9DF,0xF9E0,
+ 0xF9E1,0xF9E2,0xF9E3,0xF9E4,0xF9E5,0xF9E6,0xF9E8,0xF9E9,
+ 0xF9EA,0xF9EB,0xF9EC,0xF9ED,0xF9EE,0xF9EF,0xF9F0,0xF9F2,
+ 0xF9F3,0xF9F4,0xF9F5,0xF9F6,0xF9F7,0xF9F8,0xF9F9,0xF9FA,
+ 0xF9FB,0xF9FC,0xF9FD,0xF9FE,0xF9FF,0xFA00,0xFA01,0xFA02,
+ 0xFA03,0xFA04,0xFA05,0xFA06,0xFA07,0xFA08,0xFA09,0xFA0A,
+ 0xFA0B,0xFA10,0xFA12,0xFA15,0xFA16,0xFA17,0xFA19,0xFA1A,
+ 0xFA1B,0xFA1C,0xFA1D,0xFA1E,0xFA22,0xFA25,0xFA26,0xFE32,
+ 0xFE45,0xFE46,0xFE47,0xFE48,0xFE53,0xFE58,0xFE67,0xFE6C,
+ 0xFE6D,0xFE6E,0xFE6F,0xFE70,0xFE71,0xFE72,0xFE73,0xFE74,
+ 0xFE75,0xFE76,0xFE77,0xFE78,0xFE79,0xFE7A,0xFE7B,0xFE7C,
+ 0xFE7D,0xFE7E,0xFE7F,0xFE80,0xFE81,0xFE82,0xFE83,0xFE84,
+ 0xFE85,0xFE86,0xFE87,0xFE88,0xFE89,0xFE8A,0xFE8B,0xFE8C,
+ 0xFE8D,0xFE8E,0xFE8F,0xFE90,0xFE91,0xFE92,0xFE93,0xFE94,
+ 0xFE95,0xFE96,0xFE97,0xFE98,0xFE99,0xFE9A,0xFE9B,0xFE9C,
+ 0xFE9D,0xFE9E,0xFE9F,0xFEA0,0xFEA1,0xFEA2,0xFEA3,0xFEA4,
+ 0xFEA5,0xFEA6,0xFEA7,0xFEA8,0xFEA9,0xFEAA,0xFEAB,0xFEAC,
+ 0xFEAD,0xFEAE,0xFEAF,0xFEB0,0xFEB1,0xFEB2,0xFEB3,0xFEB4,
+ 0xFEB5,0xFEB6,0xFEB7,0xFEB8,0xFEB9,0xFEBA,0xFEBB,0xFEBC,
+ 0xFEBD,0xFEBE,0xFEBF,0xFEC0,0xFEC1,0xFEC2,0xFEC3,0xFEC4,
+ 0xFEC5,0xFEC6,0xFEC7,0xFEC8,0xFEC9,0xFECA,0xFECB,0xFECC,
+ 0xFECD,0xFECE,0xFECF,0xFED0,0xFED1,0xFED2,0xFED3,0xFED4,
+ 0xFED5,0xFED6,0xFED7,0xFED8,0xFED9,0xFEDA,0xFEDB,0xFEDC,
+ 0xFEDD,0xFEDE,0xFEDF,0xFEE0,0xFEE1,0xFEE2,0xFEE3,0xFEE4,
+ 0xFEE5,0xFEE6,0xFEE7,0xFEE8,0xFEE9,0xFEEA,0xFEEB,0xFEEC,
+ 0xFEED,0xFEEE,0xFEEF,0xFEF0,0xFEF1,0xFEF2,0xFEF3,0xFEF4,
+ 0xFEF5,0xFEF6,0xFEF7,0xFEF8,0xFEF9,0xFEFA,0xFEFB,0xFEFC,
+ 0xFEFD,0xFEFE,0xFEFF,0xFF00,0xFF5F,0xFF60,0xFF61,0xFF62,
+ 0xFF63,0xFF64,0xFF65,0xFF66,0xFF67,0xFF68,0xFF69,0xFF6A,
+ 0xFF6B,0xFF6C,0xFF6D,0xFF6E,0xFF6F,0xFF70,0xFF71,0xFF72,
+ 0xFF73,0xFF74,0xFF75,0xFF76,0xFF77,0xFF78,0xFF79,0xFF7A,
+ 0xFF7B,0xFF7C,0xFF7D,0xFF7E,0xFF7F,0xFF80,0xFF81,0xFF82,
+ 0xFF83,0xFF84,0xFF85,0xFF86,0xFF87,0xFF88,0xFF89,0xFF8A,
+ 0xFF8B,0xFF8C,0xFF8D,0xFF8E,0xFF8F,0xFF90,0xFF91,0xFF92,
+ 0xFF93,0xFF94,0xFF95,0xFF96,0xFF97,0xFF98,0xFF99,0xFF9A,
+ 0xFF9B,0xFF9C,0xFF9D,0xFF9E,0xFF9F,0xFFA0,0xFFA1,0xFFA2,
+ 0xFFA3,0xFFA4,0xFFA5,0xFFA6,0xFFA7,0xFFA8,0xFFA9,0xFFAA,
+ 0xFFAB,0xFFAC,0xFFAD,0xFFAE,0xFFAF,0xFFB0,0xFFB1,0xFFB2,
+ 0xFFB3,0xFFB4,0xFFB5,0xFFB6,0xFFB7,0xFFB8,0xFFB9,0xFFBA,
+ 0xFFBB,0xFFBC,0xFFBD,0xFFBE,0xFFBF,0xFFC0,0xFFC1,0xFFC2,
+ 0xFFC3,0xFFC4,0xFFC5,0xFFC6,0xFFC7,0xFFC8,0xFFC9,0xFFCA,
+ 0xFFCB,0xFFCC,0xFFCD,0xFFCE,0xFFCF,0xFFD0,0xFFD1,0xFFD2,
+ 0xFFD3,0xFFD4,0xFFD5,0xFFD6,0xFFD7,0xFFD8,0xFFD9,0xFFDA,
+ 0xFFDB,0xFFDC,0xFFDD,0xFFDE,0xFFDF,
+};
+
+ImplGb180302000ToUnicodeRange const
+ aImplGb180302000ToUnicodeRanges[] = {
+ { 23940, 820, 7922, 0x0452 },
+ { 24760, 9219, 11329, 0x2643 },
+ { 26057, 12973, 13738, 0x361B },
+ { 27701, 14698, 15583, 0x3CE1 },
+ { 28661, 15847, 16318, 0x4160 },
+ { 28925, 16729, 17102, 0x44D7 },
+ { 29336, 17418, 17859, 0x478E },
+ { 29652, 17961, 18664, 0x49B8 },
+ { 29754, 19043, 33469, 0x9FA6 },
+ { 30133, 33550, 37845, 0xE865 },
+ { 30214, 38078, 39108, 0xFA2A },
+ { 30447, 39394, 39420, 0xFFE6 },
+ { -1, 0, 0, 0 }
+};
+
+sal_uInt32 const aImplUnicodeToGb180302000Data[] = {
+ 0x81308130,0x81308131,0x81308132,0x81308133,0x81308134,0x81308135,
+ 0x81308136,0x81308137,0x81308138,0x81308139,0x81308230,0x81308231,
+ 0x81308232,0x81308233,0x81308234,0x81308235,0x81308236,0x81308237,
+ 0x81308238,0x81308239,0x81308330,0x81308331,0x81308332,0x81308333,
+ 0x81308334,0x81308335,0x81308336,0x81308337,0x81308338,0x81308339,
+ 0x81308430,0x81308431,0x81308432,0x81308433,0x81308434,0x81308435,
+ 0xA1E8,0x81308436,0x81308437, 0xA1EC, 0xA1A7,0x81308438,
+ 0x81308439,0x81308530,0x81308531,0x81308532,0x81308533,0x81308534,
+ 0xA1E3, 0xA1C0,0x81308535,0x81308536,0x81308537,0x81308538,
+ 0x81308539, 0xA1A4,0x81308630,0x81308631,0x81308632,0x81308633,
+ 0x81308634,0x81308635,0x81308636,0x81308637,0x81308638,0x81308639,
+ 0x81308730,0x81308731,0x81308732,0x81308733,0x81308734,0x81308735,
+ 0x81308736,0x81308737,0x81308738,0x81308739,0x81308830,0x81308831,
+ 0x81308832,0x81308833,0x81308834,0x81308835,0x81308836,0x81308837,
+ 0x81308838,0x81308839,0x81308930, 0xA1C1,0x81308931,0x81308932,
+ 0x81308933,0x81308934,0x81308935,0x81308936,0x81308937,0x81308938,
+ 0xA8A4, 0xA8A2,0x81308939,0x81308A30,0x81308A31,0x81308A32,
+ 0x81308A33,0x81308A34, 0xA8A8, 0xA8A6, 0xA8BA,0x81308A35,
+ 0xA8AC, 0xA8AA,0x81308A36,0x81308A37,0x81308A38,0x81308A39,
+ 0xA8B0, 0xA8AE,0x81308B30,0x81308B31,0x81308B32, 0xA1C2,
+ 0x81308B33, 0xA8B4, 0xA8B2,0x81308B34, 0xA8B9,0x81308B35,
+ 0x81308B36,0x81308B37,0x81308B38, 0xA8A1,0x81308B39,0x81308C30,
+ 0x81308C31,0x81308C32,0x81308C33,0x81308C34,0x81308C35,0x81308C36,
+ 0x81308C37,0x81308C38,0x81308C39,0x81308D30,0x81308D31,0x81308D32,
+ 0x81308D33,0x81308D34,0x81308D35, 0xA8A5,0x81308D36,0x81308D37,
+ 0x81308D38,0x81308D39,0x81308E30,0x81308E31,0x81308E32, 0xA8A7,
+ 0x81308E33,0x81308E34,0x81308E35,0x81308E36,0x81308E37,0x81308E38,
+ 0x81308E39,0x81308F30,0x81308F31,0x81308F32,0x81308F33,0x81308F34,
+ 0x81308F35,0x81308F36,0x81308F37, 0xA8A9,0x81308F38,0x81308F39,
+ 0x81309030,0x81309031,0x81309032,0x81309033,0x81309034,0x81309035,
+ 0x81309036,0x81309037,0x81309038,0x81309039,0x81309130,0x81309131,
+ 0x81309132,0x81309133,0x81309134,0x81309135,0x81309136,0x81309137,
+ 0x81309138,0x81309139,0x81309230,0x81309231, 0xA8BD,0x81309232,
+ 0x81309233,0x81309234, 0xA8BE,0x81309235,0x81309236,0x81309237,
+ 0x81309238, 0xA8AD,0x81309239,0x81309330,0x81309331,0x81309332,
+ 0x81309333,0x81309334,0x81309335,0x81309336,0x81309337,0x81309338,
+ 0x81309339,0x81309430,0x81309431,0x81309432,0x81309433,0x81309434,
+ 0x81309435,0x81309436,0x81309437,0x81309438,0x81309439,0x81309530,
+ 0x81309531,0x81309532,0x81309533,0x81309534,0x81309535,0x81309536,
+ 0x81309537, 0xA8B1,0x81309538,0x81309539,0x81309630,0x81309631,
+ 0x81309632,0x81309633,0x81309634,0x81309635,0x81309636,0x81309637,
+ 0x81309638,0x81309639,0x81309730,0x81309731,0x81309732,0x81309733,
+ 0x81309734,0x81309735,0x81309736,0x81309737,0x81309738,0x81309739,
+ 0x81309830,0x81309831,0x81309832,0x81309833,0x81309834,0x81309835,
+ 0x81309836,0x81309837,0x81309838,0x81309839,0x81309930,0x81309931,
+ 0x81309932,0x81309933,0x81309934,0x81309935,0x81309936,0x81309937,
+ 0x81309938,0x81309939,0x81309A30,0x81309A31,0x81309A32,0x81309A33,
+ 0x81309A34,0x81309A35,0x81309A36,0x81309A37,0x81309A38,0x81309A39,
+ 0x81309B30,0x81309B31,0x81309B32,0x81309B33,0x81309B34,0x81309B35,
+ 0x81309B36,0x81309B37,0x81309B38,0x81309B39,0x81309C30,0x81309C31,
+ 0x81309C32,0x81309C33,0x81309C34,0x81309C35,0x81309C36,0x81309C37,
+ 0x81309C38,0x81309C39,0x81309D30,0x81309D31,0x81309D32,0x81309D33,
+ 0x81309D34,0x81309D35,0x81309D36,0x81309D37,0x81309D38,0x81309D39,
+ 0x81309E30,0x81309E31,0x81309E32,0x81309E33,0x81309E34,0x81309E35,
+ 0x81309E36,0x81309E37,0x81309E38,0x81309E39,0x81309F30,0x81309F31,
+ 0x81309F32,0x81309F33,0x81309F34,0x81309F35, 0xA8A3,0x81309F36,
+ 0xA8AB,0x81309F37, 0xA8AF,0x81309F38, 0xA8B3,0x81309F39,
+ 0xA8B5,0x8130A030, 0xA8B6,0x8130A031, 0xA8B7,0x8130A032,
+ 0xA8B8,0x8130A033,0x8130A034,0x8130A035,0x8130A036,0x8130A037,
+ 0x8130A038,0x8130A039,0x8130A130,0x8130A131,0x8130A132,0x8130A133,
+ 0x8130A134,0x8130A135,0x8130A136,0x8130A137,0x8130A138,0x8130A139,
+ 0x8130A230,0x8130A231,0x8130A232,0x8130A233,0x8130A234,0x8130A235,
+ 0x8130A236,0x8130A237,0x8130A238,0x8130A239,0x8130A330, 0xA8BF,
+ 0x8130A331,0x8130A332,0x8130A333,0x8130A334,0x8130A335,0x8130A336,
+ 0x8130A337,0x8130A338,0x8130A339,0x8130A430,0x8130A431,0x8130A432,
+ 0x8130A433,0x8130A434,0x8130A435,0x8130A436,0x8130A437,0x8130A438,
+ 0x8130A439,0x8130A530,0x8130A531,0x8130A532,0x8130A533,0x8130A534,
+ 0x8130A535,0x8130A536,0x8130A537,0x8130A538,0x8130A539,0x8130A630,
+ 0x8130A631,0x8130A632,0x8130A633,0x8130A634,0x8130A635,0x8130A636,
+ 0x8130A637,0x8130A638,0x8130A639,0x8130A730,0x8130A731,0x8130A732,
+ 0x8130A733,0x8130A734,0x8130A735,0x8130A736,0x8130A737,0x8130A738,
+ 0x8130A739,0x8130A830,0x8130A831,0x8130A832,0x8130A833,0x8130A834,
+ 0x8130A835,0x8130A836,0x8130A837,0x8130A838,0x8130A839,0x8130A930,
+ 0x8130A931,0x8130A932,0x8130A933,0x8130A934,0x8130A935,0x8130A936,
+ 0x8130A937,0x8130A938,0x8130A939,0x8130AA30,0x8130AA31,0x8130AA32,
+ 0x8130AA33,0x8130AA34,0x8130AA35,0x8130AA36,0x8130AA37,0x8130AA38,
+ 0x8130AA39,0x8130AB30,0x8130AB31,0x8130AB32,0x8130AB33,0x8130AB34,
+ 0x8130AB35,0x8130AB36,0x8130AB37, 0xA8BB,0x8130AB38,0x8130AB39,
+ 0x8130AC30,0x8130AC31,0x8130AC32,0x8130AC33,0x8130AC34,0x8130AC35,
+ 0x8130AC36,0x8130AC37,0x8130AC38,0x8130AC39,0x8130AD30,0x8130AD31,
+ 0x8130AD32, 0xA8C0,0x8130AD33,0x8130AD34,0x8130AD35,0x8130AD36,
+ 0x8130AD37,0x8130AD38,0x8130AD39,0x8130AE30,0x8130AE31,0x8130AE32,
+ 0x8130AE33,0x8130AE34,0x8130AE35,0x8130AE36,0x8130AE37,0x8130AE38,
+ 0x8130AE39,0x8130AF30,0x8130AF31,0x8130AF32,0x8130AF33,0x8130AF34,
+ 0x8130AF35,0x8130AF36,0x8130AF37,0x8130AF38,0x8130AF39,0x8130B030,
+ 0x8130B031,0x8130B032,0x8130B033,0x8130B034,0x8130B035,0x8130B036,
+ 0x8130B037,0x8130B038,0x8130B039,0x8130B130,0x8130B131,0x8130B132,
+ 0x8130B133,0x8130B134,0x8130B135,0x8130B136,0x8130B137,0x8130B138,
+ 0x8130B139,0x8130B230,0x8130B231,0x8130B232,0x8130B233,0x8130B234,
+ 0x8130B235,0x8130B236,0x8130B237,0x8130B238,0x8130B239,0x8130B330,
+ 0x8130B331,0x8130B332,0x8130B333,0x8130B334,0x8130B335,0x8130B336,
+ 0x8130B337,0x8130B338,0x8130B339,0x8130B430,0x8130B431,0x8130B432,
+ 0x8130B433,0x8130B434,0x8130B435,0x8130B436,0x8130B437,0x8130B438,
+ 0x8130B439,0x8130B530,0x8130B531,0x8130B532,0x8130B533,0x8130B534,
+ 0x8130B535,0x8130B536,0x8130B537,0x8130B538,0x8130B539,0x8130B630,
+ 0x8130B631,0x8130B632,0x8130B633,0x8130B634,0x8130B635,0x8130B636,
+ 0x8130B637,0x8130B638,0x8130B639,0x8130B730,0x8130B731,0x8130B732,
+ 0x8130B733, 0xA1A6,0x8130B734, 0xA1A5, 0xA840, 0xA841,
+ 0x8130B735,0x8130B736,0x8130B737,0x8130B738,0x8130B739,0x8130B830,
+ 0x8130B831,0x8130B832,0x8130B833,0x8130B834,0x8130B835,0x8130B836,
+ 0x8130B837, 0xA842,0x8130B838,0x8130B839,0x8130B930,0x8130B931,
+ 0x8130B932,0x8130B933,0x8130B934,0x8130B935,0x8130B936,0x8130B937,
+ 0x8130B938,0x8130B939,0x8130BA30,0x8130BA31,0x8130BA32,0x8130BA33,
+ 0x8130BA34,0x8130BA35,0x8130BA36,0x8130BA37,0x8130BA38,0x8130BA39,
+ 0x8130BB30,0x8130BB31,0x8130BB32,0x8130BB33,0x8130BB34,0x8130BB35,
+ 0x8130BB36,0x8130BB37,0x8130BB38,0x8130BB39,0x8130BC30,0x8130BC31,
+ 0x8130BC32,0x8130BC33,0x8130BC34,0x8130BC35,0x8130BC36,0x8130BC37,
+ 0x8130BC38,0x8130BC39,0x8130BD30,0x8130BD31,0x8130BD32,0x8130BD33,
+ 0x8130BD34,0x8130BD35,0x8130BD36,0x8130BD37,0x8130BD38,0x8130BD39,
+ 0x8130BE30,0x8130BE31,0x8130BE32,0x8130BE33,0x8130BE34,0x8130BE35,
+ 0x8130BE36,0x8130BE37,0x8130BE38,0x8130BE39,0x8130BF30,0x8130BF31,
+ 0x8130BF32,0x8130BF33,0x8130BF34,0x8130BF35,0x8130BF36,0x8130BF37,
+ 0x8130BF38,0x8130BF39,0x8130C030,0x8130C031,0x8130C032,0x8130C033,
+ 0x8130C034,0x8130C035,0x8130C036,0x8130C037,0x8130C038,0x8130C039,
+ 0x8130C130,0x8130C131,0x8130C132,0x8130C133,0x8130C134,0x8130C135,
+ 0x8130C136,0x8130C137,0x8130C138,0x8130C139,0x8130C230,0x8130C231,
+ 0x8130C232,0x8130C233,0x8130C234,0x8130C235,0x8130C236,0x8130C237,
+ 0x8130C238,0x8130C239,0x8130C330,0x8130C331,0x8130C332,0x8130C333,
+ 0x8130C334,0x8130C335,0x8130C336,0x8130C337,0x8130C338,0x8130C339,
+ 0x8130C430,0x8130C431,0x8130C432,0x8130C433,0x8130C434,0x8130C435,
+ 0x8130C436,0x8130C437,0x8130C438,0x8130C439,0x8130C530,0x8130C531,
+ 0x8130C532,0x8130C533,0x8130C534,0x8130C535,0x8130C536,0x8130C537,
+ 0x8130C538,0x8130C539,0x8130C630,0x8130C631,0x8130C632,0x8130C633,
+ 0x8130C634,0x8130C635,0x8130C636,0x8130C637,0x8130C638,0x8130C639,
+ 0x8130C730,0x8130C731,0x8130C732,0x8130C733,0x8130C734,0x8130C735,
+ 0x8130C736,0x8130C737,0x8130C738,0x8130C739,0x8130C830,0x8130C831,
+ 0x8130C832,0x8130C833,0x8130C834,0x8130C835,0x8130C836,0x8130C837,
+ 0x8130C838,0x8130C839,0x8130C930,0x8130C931,0x8130C932,0x8130C933,
+ 0x8130C934,0x8130C935,0x8130C936,0x8130C937,0x8130C938,0x8130C939,
+ 0x8130CA30,0x8130CA31,0x8130CA32,0x8130CA33,0x8130CA34,0x8130CA35,
+ 0x8130CA36,0x8130CA37,0x8130CA38,0x8130CA39,0x8130CB30, 0xA6A1,
+ 0xA6A2, 0xA6A3, 0xA6A4, 0xA6A5, 0xA6A6, 0xA6A7,
+ 0xA6A8, 0xA6A9, 0xA6AA, 0xA6AB, 0xA6AC, 0xA6AD,
+ 0xA6AE, 0xA6AF, 0xA6B0, 0xA6B1,0x8130CB31, 0xA6B2,
+ 0xA6B3, 0xA6B4, 0xA6B5, 0xA6B6, 0xA6B7, 0xA6B8,
+ 0x8130CB32,0x8130CB33,0x8130CB34,0x8130CB35,0x8130CB36,0x8130CB37,
+ 0x8130CB38, 0xA6C1, 0xA6C2, 0xA6C3, 0xA6C4, 0xA6C5,
+ 0xA6C6, 0xA6C7, 0xA6C8, 0xA6C9, 0xA6CA, 0xA6CB,
+ 0xA6CC, 0xA6CD, 0xA6CE, 0xA6CF, 0xA6D0, 0xA6D1,
+ 0x8130CB39, 0xA6D2, 0xA6D3, 0xA6D4, 0xA6D5, 0xA6D6,
+ 0xA6D7, 0xA6D8,0x8130CC30,0x8130CC31,0x8130CC32,0x8130CC33,
+ 0x8130CC34,0x8130CC35,0x8130CC36,0x8130CC37,0x8130CC38,0x8130CC39,
+ 0x8130CD30,0x8130CD31,0x8130CD32,0x8130CD33,0x8130CD34,0x8130CD35,
+ 0x8130CD36,0x8130CD37,0x8130CD38,0x8130CD39,0x8130CE30,0x8130CE31,
+ 0x8130CE32,0x8130CE33,0x8130CE34,0x8130CE35,0x8130CE36,0x8130CE37,
+ 0x8130CE38,0x8130CE39,0x8130CF30,0x8130CF31,0x8130CF32,0x8130CF33,
+ 0x8130CF34,0x8130CF35,0x8130CF36,0x8130CF37,0x8130CF38,0x8130CF39,
+ 0x8130D030,0x8130D031,0x8130D032,0x8130D033,0x8130D034,0x8130D035,
+ 0x8130D036,0x8130D037,0x8130D038,0x8130D039,0x8130D130,0x8130D131,
+ 0x8130D132,0x8130D133,0x8130D134, 0xA7A7,0x8130D135,0x8130D136,
+ 0x8130D137,0x8130D138,0x8130D139,0x8130D230,0x8130D231,0x8130D232,
+ 0x8130D233,0x8130D234,0x8130D235,0x8130D236,0x8130D237,0x8130D238,
+ 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,0x8130D239, 0xA7D7,
+ 0xA95C,0x8136A532,0x8136A533, 0xA843, 0xA1AA, 0xA844,
+ 0xA1AC,0x8136A534, 0xA1AE, 0xA1AF,0x8136A535,0x8136A536,
+ 0xA1B0, 0xA1B1,0x8136A537,0x8136A538,0x8136A539,0x8136A630,
+ 0x8136A631,0x8136A632,0x8136A633, 0xA845, 0xA1AD,0x8136A634,
+ 0x8136A635,0x8136A636,0x8136A637,0x8136A638,0x8136A639,0x8136A730,
+ 0x8136A731,0x8136A732, 0xA1EB,0x8136A733, 0xA1E4, 0xA1E5,
+ 0x8136A734, 0xA846,0x8136A735,0x8136A736,0x8136A737,0x8136A738,
+ 0x8136A739, 0xA1F9,0x8136A830,0x8136A831,0x8136A832,0x8136A833,
+ 0x8136A834,0x8136A835,0x8136A836,0x8136A837,0x8136A838,0x8136A839,
+ 0x8136A930,0x8136A931,0x8136A932,0x8136A933,0x8136A934,0x8136A935,
+ 0x8136A936,0x8136A937,0x8136A938,0x8136A939,0x8136AA30,0x8136AA31,
+ 0x8136AA32,0x8136AA33,0x8136AA34,0x8136AA35,0x8136AA36,0x8136AA37,
+ 0x8136AA38,0x8136AA39,0x8136AB30,0x8136AB31,0x8136AB32,0x8136AB33,
+ 0x8136AB34,0x8136AB35,0x8136AB36,0x8136AB37,0x8136AB38,0x8136AB39,
+ 0x8136AC30,0x8136AC31,0x8136AC32,0x8136AC33,0x8136AC34,0x8136AC35,
+ 0x8136AC36,0x8136AC37,0x8136AC38,0x8136AC39,0x8136AD30,0x8136AD31,
+ 0x8136AD32,0x8136AD33,0x8136AD34,0x8136AD35,0x8136AD36,0x8136AD37,
+ 0x8136AD38,0x8136AD39,0x8136AE30,0x8136AE31,0x8136AE32,0x8136AE33,
+ 0x8136AE34,0x8136AE35,0x8136AE36,0x8136AE37,0x8136AE38,0x8136AE39,
+ 0x8136AF30,0x8136AF31,0x8136AF32,0x8136AF33,0x8136AF34,0x8136AF35,
+ 0x8136AF36,0x8136AF37,0x8136AF38,0x8136AF39,0x8136B030,0x8136B031,
+ 0x8136B032,0x8136B033,0x8136B034,0x8136B035,0x8136B036,0x8136B037,
+ 0x8136B038,0x8136B039,0x8136B130,0x8136B131,0x8136B132,0x8136B133,
+ 0x8136B134,0x8136B135,0x8136B136,0x8136B137,0x8136B138,0x8136B139,
+ 0x8136B230,0x8136B231,0x8136B232,0x8136B233,0x8136B234,0x8136B235,
+ 0x8136B236,0x8136B237,0x8136B238,0x8136B239,0x8136B330,0x8136B331,
+ 0xA2E3,0x8136B332,0x8136B333,0x8136B334,0x8136B335,0x8136B336,
+ 0x8136B337,0x8136B338,0x8136B339,0x8136B430,0x8136B431,0x8136B432,
+ 0x8136B433,0x8136B434,0x8136B435,0x8136B436,0x8136B437,0x8136B438,
+ 0x8136B439,0x8136B530,0x8136B531,0x8136B532,0x8136B533,0x8136B534,
+ 0x8136B535,0x8136B536,0x8136B537,0x8136B538,0x8136B539,0x8136B630,
+ 0x8136B631,0x8136B632,0x8136B633,0x8136B634,0x8136B635,0x8136B636,
+ 0x8136B637,0x8136B638,0x8136B639,0x8136B730,0x8136B731,0x8136B732,
+ 0x8136B733,0x8136B734,0x8136B735,0x8136B736,0x8136B737,0x8136B738,
+ 0x8136B739,0x8136B830,0x8136B831,0x8136B832,0x8136B833,0x8136B834,
+ 0x8136B835,0x8136B836,0x8136B837,0x8136B838,0x8136B839,0x8136B930,
+ 0x8136B931,0x8136B932,0x8136B933,0x8136B934,0x8136B935,0x8136B936,
+ 0x8136B937,0x8136B938,0x8136B939,0x8136BA30,0x8136BA31,0x8136BA32,
+ 0x8136BA33,0x8136BA34,0x8136BA35,0x8136BA36,0x8136BA37,0x8136BA38,
+ 0x8136BA39,0x8136BB30,0x8136BB31,0x8136BB32,0x8136BB33,0x8136BB34,
+ 0x8136BB35,0x8136BB36,0x8136BB37, 0xA1E6,0x8136BB38, 0xA847,
+ 0x8136BB39,0x8136BC30,0x8136BC31, 0xA848,0x8136BC32,0x8136BC33,
+ 0x8136BC34,0x8136BC35,0x8136BC36,0x8136BC37,0x8136BC38,0x8136BC39,
+ 0x8136BD30,0x8136BD31,0x8136BD32,0x8136BD33, 0xA1ED,0x8136BD34,
+ 0x8136BD35,0x8136BD36,0x8136BD37,0x8136BD38,0x8136BD39,0x8136BE30,
+ 0x8136BE31,0x8136BE32,0x8136BE33, 0xA959,0x8136BE34,0x8136BE35,
+ 0x8136BE36,0x8136BE37,0x8136BE38,0x8136BE39,0x8136BF30,0x8136BF31,
+ 0x8136BF32,0x8136BF33,0x8136BF34,0x8136BF35,0x8136BF36,0x8136BF37,
+ 0x8136BF38,0x8136BF39,0x8136C030,0x8136C031,0x8136C032,0x8136C033,
+ 0x8136C034,0x8136C035,0x8136C036,0x8136C037,0x8136C038,0x8136C039,
+ 0x8136C130,0x8136C131,0x8136C132,0x8136C133,0x8136C134,0x8136C135,
+ 0x8136C136,0x8136C137,0x8136C138,0x8136C139,0x8136C230,0x8136C231,
+ 0x8136C232,0x8136C233,0x8136C234,0x8136C235,0x8136C236,0x8136C237,
+ 0x8136C238,0x8136C239,0x8136C330,0x8136C331,0x8136C332,0x8136C333,
+ 0x8136C334,0x8136C335,0x8136C336,0x8136C337,0x8136C338,0x8136C339,
+ 0x8136C430,0x8136C431,0x8136C432,0x8136C433,0x8136C434,0x8136C435,
+ 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6,
+ 0xA2F7, 0xA2F8, 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC,
+ 0x8136C436,0x8136C437,0x8136C438,0x8136C439, 0xA2A1, 0xA2A2,
+ 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8,
+ 0xA2A9, 0xA2AA,0x8136C530,0x8136C531,0x8136C532,0x8136C533,
+ 0x8136C534,0x8136C535,0x8136C536,0x8136C537,0x8136C538,0x8136C539,
+ 0x8136C630,0x8136C631,0x8136C632,0x8136C633,0x8136C634,0x8136C635,
+ 0x8136C636,0x8136C637,0x8136C638,0x8136C639,0x8136C730,0x8136C731,
+ 0xA1FB, 0xA1FC, 0xA1FA, 0xA1FD,0x8136C732,0x8136C733,
+ 0xA849, 0xA84A, 0xA84B, 0xA84C,0x8136C734,0x8136C735,
+ 0x8136C736,0x8136C737,0x8136C738,0x8136C739,0x8136C830,0x8136C831,
+ 0x8136C832,0x8136C833,0x8136C834,0x8136C835,0x8136C836,0x8136C837,
+ 0x8136C838,0x8136C839,0x8136C930,0x8136C931,0x8136C932,0x8136C933,
+ 0x8136C934,0x8136C935,0x8136C936,0x8136C937,0x8136C938,0x8136C939,
+ 0x8136CA30,0x8136CA31,0x8136CA32,0x8136CA33,0x8136CA34,0x8136CA35,
+ 0x8136CA36,0x8136CA37,0x8136CA38,0x8136CA39,0x8136CB30,0x8136CB31,
+ 0x8136CB32,0x8136CB33,0x8136CB34,0x8136CB35,0x8136CB36,0x8136CB37,
+ 0x8136CB38,0x8136CB39,0x8136CC30,0x8136CC31,0x8136CC32,0x8136CC33,
+ 0x8136CC34,0x8136CC35,0x8136CC36,0x8136CC37,0x8136CC38,0x8136CC39,
+ 0x8136CD30,0x8136CD31,0x8136CD32,0x8136CD33,0x8136CD34,0x8136CD35,
+ 0x8136CD36,0x8136CD37,0x8136CD38,0x8136CD39,0x8136CE30,0x8136CE31,
+ 0x8136CE32,0x8136CE33,0x8136CE34,0x8136CE35,0x8136CE36,0x8136CE37,
+ 0x8136CE38,0x8136CE39,0x8136CF30,0x8136CF31,0x8136CF32,0x8136CF33,
+ 0x8136CF34,0x8136CF35,0x8136CF36,0x8136CF37,0x8136CF38,0x8136CF39,
+ 0x8136D030,0x8136D031,0x8136D032,0x8136D033,0x8136D034,0x8136D035,
+ 0x8136D036,0x8136D037,0x8136D038,0x8136D039,0x8136D130,0x8136D131,
+ 0x8136D132,0x8136D133,0x8136D134,0x8136D135,0x8136D136,0x8136D137,
+ 0x8136D138,0x8136D139,0x8136D230,0x8136D231,0x8136D232,0x8136D233,
+ 0xA1CA,0x8136D234,0x8136D235,0x8136D236,0x8136D237,0x8136D238,
+ 0x8136D239, 0xA1C7,0x8136D330, 0xA1C6,0x8136D331,0x8136D332,
+ 0x8136D333, 0xA84D,0x8136D334,0x8136D335,0x8136D336,0x8136D337,
+ 0xA1CC,0x8136D338,0x8136D339, 0xA1D8, 0xA1DE, 0xA84E,
+ 0xA1CF,0x8136D430,0x8136D431, 0xA84F,0x8136D432, 0xA1CE,
+ 0x8136D433, 0xA1C4, 0xA1C5, 0xA1C9, 0xA1C8, 0xA1D2,
+ 0x8136D434,0x8136D435, 0xA1D3,0x8136D436,0x8136D437,0x8136D438,
+ 0x8136D439,0x8136D530, 0xA1E0, 0xA1DF, 0xA1C3, 0xA1CB,
+ 0x8136D531,0x8136D532,0x8136D533,0x8136D534,0x8136D535, 0xA1D7,
+ 0x8136D536,0x8136D537,0x8136D538,0x8136D539,0x8136D630,0x8136D631,
+ 0x8136D632,0x8136D633,0x8136D634,0x8136D635, 0xA1D6,0x8136D636,
+ 0x8136D637,0x8136D638, 0xA1D5,0x8136D639,0x8136D730,0x8136D731,
+ 0x8136D732,0x8136D733, 0xA850,0x8136D734,0x8136D735,0x8136D736,
+ 0x8136D737,0x8136D738,0x8136D739,0x8136D830,0x8136D831,0x8136D832,
+ 0x8136D833,0x8136D834,0x8136D835,0x8136D836, 0xA1D9, 0xA1D4,
+ 0x8136D837,0x8136D838, 0xA1DC, 0xA1DD, 0xA851, 0xA852,
+ 0x8136D839,0x8136D930,0x8136D931,0x8136D932,0x8136D933,0x8136D934,
+ 0xA1DA, 0xA1DB,0x8136D935,0x8136D936,0x8136D937,0x8136D938,
+ 0x8136D939,0x8136DA30,0x8136DA31,0x8136DA32,0x8136DA33,0x8136DA34,
+ 0x8136DA35,0x8136DA36,0x8136DA37,0x8136DA38,0x8136DA39,0x8136DB30,
+ 0x8136DB31,0x8136DB32,0x8136DB33,0x8136DB34,0x8136DB35,0x8136DB36,
+ 0x8136DB37,0x8136DB38,0x8136DB39,0x8136DC30,0x8136DC31,0x8136DC32,
+ 0x8136DC33,0x8136DC34,0x8136DC35,0x8136DC36,0x8136DC37,0x8136DC38,
+ 0x8136DC39,0x8136DD30,0x8136DD31, 0xA892,0x8136DD32,0x8136DD33,
+ 0x8136DD34, 0xA1D1,0x8136DD35,0x8136DD36,0x8136DD37,0x8136DD38,
+ 0x8136DD39,0x8136DE30,0x8136DE31,0x8136DE32,0x8136DE33,0x8136DE34,
+ 0x8136DE35, 0xA1CD,0x8136DE36,0x8136DE37,0x8136DE38,0x8136DE39,
+ 0x8136DF30,0x8136DF31,0x8136DF32,0x8136DF33,0x8136DF34,0x8136DF35,
+ 0x8136DF36,0x8136DF37,0x8136DF38,0x8136DF39,0x8136E030,0x8136E031,
+ 0x8136E032,0x8136E033,0x8136E034,0x8136E035,0x8136E036,0x8136E037,
+ 0x8136E038,0x8136E039,0x8136E130, 0xA853,0x8136E131,0x8136E132,
+ 0x8136E133,0x8136E134,0x8136E135,0x8136E136,0x8136E137,0x8136E138,
+ 0x8136E139,0x8136E230,0x8136E231,0x8136E232,0x8136E233,0x8136E234,
+ 0x8136E235,0x8136E236,0x8136E237,0x8136E238,0x8136E239,0x8136E330,
+ 0x8136E331,0x8136E332,0x8136E333,0x8136E334,0x8136E335,0x8136E336,
+ 0x8136E337,0x8136E338,0x8136E339,0x8136E430,0x8136E431,0x8136E432,
+ 0x8136E433,0x8136E434,0x8136E435,0x8136E436,0x8136E437,0x8136E438,
+ 0x8136E439,0x8136E530,0x8136E531,0x8136E532,0x8136E533,0x8136E534,
+ 0x8136E535,0x8136E536,0x8136E537,0x8136E538,0x8136E539,0x8136E630,
+ 0x8136E631,0x8136E632,0x8136E633,0x8136E634,0x8136E635,0x8136E636,
+ 0x8136E637,0x8136E638,0x8136E639,0x8136E730,0x8136E731,0x8136E732,
+ 0x8136E733,0x8136E734,0x8136E735,0x8136E736,0x8136E737,0x8136E738,
+ 0x8136E739,0x8136E830,0x8136E831,0x8136E832,0x8136E833,0x8136E834,
+ 0x8136E835,0x8136E836,0x8136E837,0x8136E838,0x8136E839,0x8136E930,
+ 0x8136E931,0x8136E932, 0xA1D0,0x8136E933,0x8136E934,0x8136E935,
+ 0x8136E936,0x8136E937,0x8136E938,0x8136E939,0x8136EA30,0x8136EA31,
+ 0x8136EA32,0x8136EA33,0x8136EA34,0x8136EA35,0x8136EA36,0x8136EA37,
+ 0x8136EA38,0x8136EA39,0x8136EB30,0x8136EB31,0x8136EB32,0x8136EB33,
+ 0x8136EB34,0x8136EB35,0x8136EB36,0x8136EB37,0x8136EB38,0x8136EB39,
+ 0x8136EC30,0x8136EC31,0x8136EC32,0x8136EC33,0x8136EC34,0x8136EC35,
+ 0x8136EC36,0x8136EC37,0x8136EC38,0x8136EC39,0x8136ED30,0x8136ED31,
+ 0x8136ED32,0x8136ED33,0x8136ED34,0x8136ED35,0x8136ED36,0x8136ED37,
+ 0x8136ED38,0x8136ED39,0x8136EE30,0x8136EE31,0x8136EE32,0x8136EE33,
+ 0x8136EE34,0x8136EE35,0x8136EE36,0x8136EE37,0x8136EE38,0x8136EE39,
+ 0x8136EF30,0x8136EF31,0x8136EF32,0x8136EF33,0x8136EF34,0x8136EF35,
+ 0x8136EF36,0x8136EF37,0x8136EF38,0x8136EF39,0x8136F030,0x8136F031,
+ 0x8136F032,0x8136F033,0x8136F034,0x8136F035,0x8136F036,0x8136F037,
+ 0x8136F038,0x8136F039,0x8136F130,0x8136F131,0x8136F132,0x8136F133,
+ 0x8136F134,0x8136F135,0x8136F136,0x8136F137,0x8136F138,0x8136F139,
+ 0x8136F230,0x8136F231,0x8136F232,0x8136F233,0x8136F234,0x8136F235,
+ 0x8136F236,0x8136F237,0x8136F238,0x8136F239,0x8136F330,0x8136F331,
+ 0x8136F332,0x8136F333,0x8136F334,0x8136F335,0x8136F336,0x8136F337,
+ 0x8136F338,0x8136F339,0x8136F430,0x8136F431,0x8136F432,0x8136F433,
+ 0x8136F434,0x8136F435,0x8136F436,0x8136F437,0x8136F438,0x8136F439,
+ 0x8136F530,0x8136F531,0x8136F532,0x8136F533,0x8136F534,0x8136F535,
+ 0x8136F536,0x8136F537,0x8136F538,0x8136F539,0x8136F630,0x8136F631,
+ 0x8136F632,0x8136F633,0x8136F634,0x8136F635,0x8136F636,0x8136F637,
+ 0x8136F638,0x8136F639,0x8136F730,0x8136F731,0x8136F732,0x8136F733,
+ 0x8136F734,0x8136F735,0x8136F736,0x8136F737,0x8136F738,0x8136F739,
+ 0x8136F830,0x8136F831,0x8136F832,0x8136F833,0x8136F834,0x8136F835,
+ 0x8136F836,0x8136F837,0x8136F838,0x8136F839,0x8136F930,0x8136F931,
+ 0x8136F932,0x8136F933,0x8136F934,0x8136F935,0x8136F936,0x8136F937,
+ 0x8136F938,0x8136F939,0x8136FA30,0x8136FA31,0x8136FA32,0x8136FA33,
+ 0x8136FA34,0x8136FA35,0x8136FA36,0x8136FA37,0x8136FA38,0x8136FA39,
+ 0x8136FB30,0x8136FB31,0x8136FB32,0x8136FB33,0x8136FB34,0x8136FB35,
+ 0x8136FB36,0x8136FB37,0x8136FB38,0x8136FB39,0x8136FC30,0x8136FC31,
+ 0x8136FC32,0x8136FC33,0x8136FC34,0x8136FC35,0x8136FC36,0x8136FC37,
+ 0x8136FC38,0x8136FC39,0x8136FD30,0x8136FD31,0x8136FD32,0x8136FD33,
+ 0x8136FD34,0x8136FD35,0x8136FD36,0x8136FD37,0x8136FD38,0x8136FD39,
+ 0x8136FE30,0x8136FE31,0x8136FE32,0x8136FE33,0x8136FE34,0x8136FE35,
+ 0x8136FE36,0x8136FE37,0x8136FE38,0x8136FE39,0x81378130,0x81378131,
+ 0x81378132,0x81378133,0x81378134,0x81378135,0x81378136,0x81378137,
+ 0x81378138,0x81378139,0x81378230,0x81378231,0x81378232,0x81378233,
+ 0x81378234,0x81378235,0x81378236,0x81378237,0x81378238,0x81378239,
+ 0x81378330,0x81378331,0x81378332,0x81378333,0x81378334,0x81378335,
+ 0x81378336,0x81378337,0x81378338,0x81378339,0x81378430,0x81378431,
+ 0x81378432,0x81378433,0x81378434,0x81378435,0x81378436,0x81378437,
+ 0x81378438,0x81378439,0x81378530,0x81378531,0x81378532,0x81378533,
+ 0x81378534,0x81378535,0x81378536,0x81378537,0x81378538,0x81378539,
+ 0x81378630,0x81378631,0x81378632,0x81378633,0x81378634,0x81378635,
+ 0x81378636,0x81378637,0x81378638,0x81378639,0x81378730,0x81378731,
+ 0x81378732,0x81378733,0x81378734,0x81378735,0x81378736,0x81378737,
+ 0x81378738,0x81378739,0x81378830,0x81378831,0x81378832,0x81378833,
+ 0x81378834,0x81378835,0x81378836,0x81378837,0x81378838,0x81378839,
+ 0x81378930,0x81378931,0x81378932,0x81378933,0x81378934,0x81378935,
+ 0x81378936,0x81378937,0x81378938,0x81378939,0x81378A30,0x81378A31,
+ 0x81378A32,0x81378A33,0x81378A34,0x81378A35,0x81378A36,0x81378A37,
+ 0x81378A38,0x81378A39,0x81378B30,0x81378B31,0x81378B32,0x81378B33,
+ 0x81378B34,0x81378B35,0x81378B36,0x81378B37,0x81378B38,0x81378B39,
+ 0x81378C30,0x81378C31,0x81378C32,0x81378C33,0x81378C34,0x81378C35,
+ 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, 0xA2DE,
+ 0xA2DF, 0xA2E0, 0xA2E1, 0xA2E2,0x81378C36,0x81378C37,
+ 0x81378C38,0x81378C39,0x81378D30,0x81378D31,0x81378D32,0x81378D33,
+ 0x81378D34,0x81378D35, 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,
+ 0x81378D36,0x81378D37,0x81378D38,0x81378D39,0x81378E30,0x81378E31,
+ 0x81378E32,0x81378E33,0x81378E34,0x81378E35,0x81378E36,0x81378E37,
+ 0x81378E38,0x81378E39,0x81378F30,0x81378F31,0x81378F32,0x81378F33,
+ 0x81378F34,0x81378F35,0x81378F36,0x81378F37,0x81378F38,0x81378F39,
+ 0x81379030,0x81379031,0x81379032,0x81379033,0x81379034,0x81379035,
+ 0x81379036,0x81379037,0x81379038,0x81379039,0x81379130,0x81379131,
+ 0x81379132,0x81379133,0x81379134,0x81379135,0x81379136,0x81379137,
+ 0x81379138,0x81379139,0x81379230,0x81379231,0x81379232,0x81379233,
+ 0x81379234,0x81379235,0x81379236,0x81379237,0x81379238,0x81379239,
+ 0x81379330,0x81379331,0x81379332,0x81379333,0x81379334,0x81379335,
+ 0x81379336,0x81379337,0x81379338,0x81379339,0x81379430,0x81379431,
+ 0x81379432,0x81379433,0x81379434,0x81379435,0x81379436,0x81379437,
+ 0x81379438,0x81379439,0x81379530,0x81379531,0x81379532,0x81379533,
+ 0x81379534,0x81379535,0x81379536,0x81379537,0x81379538,0x81379539,
+ 0x81379630,0x81379631,0x81379632,0x81379633,0x81379634,0x81379635,
+ 0x81379636,0x81379637,0x81379638,0x81379639,0x81379730,0x81379731,
+ 0x81379732,0x81379733,0x81379734,0x81379735, 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,0x81379736,0x81379737,0x81379738,0x81379739,
+ 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,
+ 0x81379830,0x81379831,0x81379832,0x81379833,0x81379834,0x81379835,
+ 0x81379836,0x81379837,0x81379838,0x81379839,0x81379930,0x81379931,
+ 0x81379932, 0xA878, 0xA879, 0xA87A, 0xA87B, 0xA87C,
+ 0xA87D, 0xA87E, 0xA880, 0xA881, 0xA882, 0xA883,
+ 0xA884, 0xA885, 0xA886, 0xA887,0x81379933,0x81379934,
+ 0x81379935, 0xA888, 0xA889, 0xA88A,0x81379936,0x81379937,
+ 0x81379938,0x81379939,0x81379A30,0x81379A31,0x81379A32,0x81379A33,
+ 0x81379A34,0x81379A35, 0xA1F6, 0xA1F5,0x81379A36,0x81379A37,
+ 0x81379A38,0x81379A39,0x81379B30,0x81379B31,0x81379B32,0x81379B33,
+ 0x81379B34,0x81379B35,0x81379B36,0x81379B37,0x81379B38,0x81379B39,
+ 0x81379C30,0x81379C31, 0xA1F8, 0xA1F7,0x81379C32,0x81379C33,
+ 0x81379C34,0x81379C35,0x81379C36,0x81379C37,0x81379C38,0x81379C39,
+ 0xA88B, 0xA88C,0x81379D30,0x81379D31,0x81379D32,0x81379D33,
+ 0x81379D34,0x81379D35,0x81379D36,0x81379D37, 0xA1F4, 0xA1F3,
+ 0x81379D38,0x81379D39,0x81379E30, 0xA1F0,0x81379E31,0x81379E32,
+ 0xA1F2, 0xA1F1,0x81379E33,0x81379E34,0x81379E35,0x81379E36,
+ 0x81379E37,0x81379E38,0x81379E39,0x81379F30,0x81379F31,0x81379F32,
+ 0x81379F33,0x81379F34,0x81379F35,0x81379F36,0x81379F37,0x81379F38,
+ 0x81379F39,0x8137A030, 0xA88D, 0xA88E, 0xA88F, 0xA890,
+ 0x8137A031,0x8137A032,0x8137A033,0x8137A034,0x8137A035,0x8137A036,
+ 0x8137A037,0x8137A038,0x8137A039,0x8137A130,0x8137A131,0x8137A132,
+ 0x8137A133,0x8137A134,0x8137A135,0x8137A136,0x8137A137,0x8137A138,
+ 0x8137A139,0x8137A230,0x8137A231,0x8137A232,0x8137A233,0x8137A234,
+ 0x8137A235,0x8137A236,0x8137A237,0x8137A238,0x8137A239,0x8137A330,
+ 0x8137A331, 0xA1EF, 0xA1EE,0x8137A332,0x8137A333, 0xA891,
+ 0x8137A334,0x8137A335,0x8137A336,0x8137A337,0x8137A338,0x8137A339,
+ 0x8137A430,0x8137A431,0x8137A432,0x8137A433,0x8137A434,0x8137A435,
+ 0x8137A436,0x8137A437,0x8137A438,0x8137A439,0x8137A530,0x8137A531,
+ 0x8137A532,0x8137A533,0x8137A534,0x8137A535,0x8137A536,0x8137A537,
+ 0x8137A538,0x8137A539,0x8137A630,0x8137A631,0x8137A632,0x8137A633,
+ 0x8137A634,0x8137A635,0x8137A636,0x8137A637,0x8137A638,0x8137A639,
+ 0x8137A730,0x8137A731,0x8137A732,0x8137A733,0x8137A734,0x8137A735,
+ 0x8137A736,0x8137A737,0x8137A738,0x8137A739,0x8137A830,0x8137A831,
+ 0x8137A832,0x8137A833,0x8137A834,0x8137A835,0x8137A836,0x8137A837,
+ 0xA1E2,0x8137A838, 0xA1E1, 0xFE50,0x8138FD39,0x8138FE30,
+ 0xFE54,0x8138FE31,0x8138FE32,0x8138FE33, 0xFE57,0x8138FE34,
+ 0x8138FE35, 0xFE58, 0xFE5D,0x8138FE36,0x8138FE37,0x8138FE38,
+ 0x8138FE39,0x81398130,0x81398131,0x81398132,0x81398133,0x81398134,
+ 0x81398135, 0xFE5E,0x81398136,0x81398137,0x81398138,0x81398139,
+ 0x81398230,0x81398231,0x81398232,0x81398233,0x81398234,0x81398235,
+ 0x81398236,0x81398237,0x81398238,0x81398239,0x81398330, 0xFE6B,
+ 0x81398331,0x81398332, 0xFE6E,0x81398333,0x81398334,0x81398335,
+ 0xFE71,0x81398336,0x81398337,0x81398338,0x81398339, 0xFE73,
+ 0x81398430,0x81398431, 0xFE74, 0xFE75,0x81398432,0x81398433,
+ 0x81398434, 0xFE79,0x81398435,0x81398436,0x81398437,0x81398438,
+ 0x81398439,0x81398530,0x81398531,0x81398532,0x81398533,0x81398534,
+ 0x81398535,0x81398536,0x81398537,0x81398538, 0xFE84,0x81398539,
+ 0x81398630,0x81398631,0x81398632,0x81398633,0x81398634,0x81398635,
+ 0x81398636,0x81398637,0x81398638,0x81398639,0x81398730,0x81398731,
+ 0x81398732,0x81398733,0x81398734,0x81398735,0x81398736,0x81398737,
+ 0x81398738,0x81398739,0x81398830,0x81398831,0x81398832,0x81398833,
+ 0x81398834,0x81398835,0x81398836,0x81398837,0x81398838,0x81398839,
+ 0x81398930,0x81398931,0x81398932,0x81398933,0x81398934,0x81398935,
+ 0x81398936,0x81398937,0x81398938,0x81398939,0x81398A30,0x81398A31,
+ 0x81398A32,0x81398A33,0x81398A34,0x81398A35,0x81398A36,0x81398A37,
+ 0x81398A38,0x81398A39,0x81398B30,0x81398B31,0x81398B32,0x81398B33,
+ 0x81398B34,0x81398B35,0x81398B36,0x81398B37,0x81398B38,0x81398B39,
+ 0x81398C30,0x81398C31,0x81398C32,0x81398C33,0x81398C34,0x81398C35,
+ 0x81398C36,0x81398C37,0x81398C38,0x81398C39,0x81398D30,0x81398D31,
+ 0x81398D32,0x81398D33,0x81398D34,0x81398D35,0x81398D36,0x81398D37,
+ 0x81398D38,0x81398D39,0x81398E30,0x81398E31,0x81398E32,0x81398E33,
+ 0x81398E34,0x81398E35,0x81398E36,0x81398E37,0x81398E38,0x81398E39,
+ 0x81398F30,0x81398F31,0x81398F32,0x81398F33,0x81398F34,0x81398F35,
+ 0x81398F36,0x81398F37,0x81398F38,0x81398F39,0x81399030,0x81399031,
+ 0x81399032,0x81399033,0x81399034,0x81399035,0x81399036,0x81399037,
+ 0x81399038,0x81399039,0x81399130,0x81399131,0x81399132,0x81399133,
+ 0x81399134,0x81399135,0x81399136,0x81399137,0x81399138,0x81399139,
+ 0x81399230,0x81399231,0x81399232,0x81399233,0x81399234,0x81399235,
+ 0x81399236,0x81399237,0x81399238,0x81399239,0x81399330,0x81399331,
+ 0x81399332,0x81399333,0x81399334,0x81399335,0x81399336,0x81399337,
+ 0x81399338,0x81399339,0x81399430,0x81399431,0x81399432,0x81399433,
+ 0x81399434,0x81399435,0x81399436,0x81399437,0x81399438,0x81399439,
+ 0x81399530,0x81399531,0x81399532,0x81399533,0x81399534,0x81399535,
+ 0x81399536,0x81399537,0x81399538,0x81399539,0x81399630,0x81399631,
+ 0x81399632,0x81399633,0x81399634,0x81399635,0x81399636,0x81399637,
+ 0x81399638,0x81399639,0x81399730,0x81399731,0x81399732,0x81399733,
+ 0x81399734,0x81399735,0x81399736,0x81399737,0x81399738,0x81399739,
+ 0x81399830,0x81399831,0x81399832,0x81399833,0x81399834,0x81399835,
+ 0x81399836,0x81399837,0x81399838,0x81399839,0x81399930,0x81399931,
+ 0x81399932,0x81399933,0x81399934,0x81399935,0x81399936,0x81399937,
+ 0x81399938,0x81399939,0x81399A30,0x81399A31,0x81399A32,0x81399A33,
+ 0x81399A34,0x81399A35,0x81399A36,0x81399A37,0x81399A38,0x81399A39,
+ 0x81399B30,0x81399B31,0x81399B32,0x81399B33,0x81399B34,0x81399B35,
+ 0x81399B36,0x81399B37,0x81399B38,0x81399B39,0x81399C30,0x81399C31,
+ 0x81399C32,0x81399C33,0x81399C34,0x81399C35,0x81399C36,0x81399C37,
+ 0x81399C38,0x81399C39,0x81399D30,0x81399D31,0x81399D32,0x81399D33,
+ 0x81399D34,0x81399D35,0x81399D36,0x81399D37,0x81399D38,0x81399D39,
+ 0x81399E30,0x81399E31,0x81399E32,0x81399E33,0x81399E34,0x81399E35,
+ 0x81399E36,0x81399E37,0x81399E38,0x81399E39,0x81399F30,0x81399F31,
+ 0x81399F32,0x81399F33,0x81399F34,0x81399F35,0x81399F36,0x81399F37,
+ 0x81399F38,0x81399F39,0x8139A030,0x8139A031,0x8139A032,0x8139A033,
+ 0x8139A034,0x8139A035,0x8139A036,0x8139A037,0x8139A038,0x8139A039,
+ 0x8139A130,0x8139A131,0x8139A132,0x8139A133,0x8139A134,0x8139A135,
+ 0x8139A136,0x8139A137,0x8139A138,0x8139A139,0x8139A230,0x8139A231,
+ 0x8139A232,0x8139A233,0x8139A234,0x8139A235,0x8139A236,0x8139A237,
+ 0x8139A238,0x8139A239,0x8139A330,0x8139A331, 0xA98A, 0xA98B,
+ 0xA98C, 0xA98D, 0xA98E, 0xA98F, 0xA990, 0xA991,
+ 0xA992, 0xA993, 0xA994, 0xA995,0x8139A332,0x8139A333,
+ 0x8139A334,0x8139A335, 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A8,
+ 0x8139A336, 0xA1A9, 0xA965, 0xA996, 0xA1B4, 0xA1B5,
+ 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB,
+ 0xA1BE, 0xA1BF, 0xA893, 0xA1FE, 0xA1B2, 0xA1B3,
+ 0xA1BC, 0xA1BD,0x8139A337,0x8139A338,0x8139A339,0x8139A430,
+ 0x8139A431, 0xA894, 0xA895,0x8139A432,0x8139A433, 0xA940,
+ 0xA941, 0xA942, 0xA943, 0xA944, 0xA945, 0xA946,
+ 0xA947, 0xA948,0x8139A434,0x8139A435,0x8139A436,0x8139A437,
+ 0x8139A438,0x8139A439,0x8139A530,0x8139A531,0x8139A532,0x8139A533,
+ 0x8139A534,0x8139A535,0x8139A536,0x8139A537,0x8139A538,0x8139A539,
+ 0x8139A630,0x8139A631,0x8139A632,0x8139A633, 0xA989,0x8139A634,
+ 0x8139A635, 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,
+ 0x8139A636,0x8139A637,0x8139A638,0x8139A639,0x8139A730,0x8139A731,
+ 0x8139A732, 0xA961, 0xA962, 0xA966, 0xA967,0x8139A733,
+ 0x8139A734, 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,0x8139A735,0x8139A736,0x8139A737,
+ 0x8139A738,0x8139A739, 0xA960, 0xA963, 0xA964,0x8139A830,
+ 0x8139A831,0x8139A832,0x8139A833,0x8139A834,0x8139A835, 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,
+ 0x8139A836,0x8139A837,0x8139A838,0x8139A839,0x8139A930,0x8139A931,
+ 0x8139A932,0x8139A933,0x8139A934,0x8139A935,0x8139A936,0x8139A937,
+ 0x8139A938,0x8139A939,0x8139AA30,0x8139AA31,0x8139AA32,0x8139AA33,
+ 0x8139AA34,0x8139AA35,0x8139AA36,0x8139AA37,0x8139AA38,0x8139AA39,
+ 0x8139AB30,0x8139AB31,0x8139AB32,0x8139AB33,0x8139AB34,0x8139AB35,
+ 0x8139AB36,0x8139AB37,0x8139AB38,0x8139AB39,0x8139AC30,0x8139AC31,
+ 0x8139AC32,0x8139AC33,0x8139AC34,0x8139AC35,0x8139AC36,0x8139AC37,
+ 0x8139AC38,0x8139AC39,0x8139AD30,0x8139AD31,0x8139AD32,0x8139AD33,
+ 0x8139AD34,0x8139AD35,0x8139AD36,0x8139AD37,0x8139AD38,0x8139AD39,
+ 0x8139AE30,0x8139AE31,0x8139AE32,0x8139AE33,0x8139AE34,0x8139AE35,
+ 0x8139AE36,0x8139AE37,0x8139AE38,0x8139AE39,0x8139AF30,0x8139AF31,
+ 0x8139AF32,0x8139AF33,0x8139AF34,0x8139AF35,0x8139AF36,0x8139AF37,
+ 0x8139AF38,0x8139AF39,0x8139B030,0x8139B031,0x8139B032,0x8139B033,
+ 0x8139B034,0x8139B035,0x8139B036,0x8139B037,0x8139B038,0x8139B039,
+ 0x8139B130,0x8139B131,0x8139B132,0x8139B133,0x8139B134,0x8139B135,
+ 0x8139B136,0x8139B137,0x8139B138,0x8139B139,0x8139B230,0x8139B231,
+ 0x8139B232,0x8139B233,0x8139B234,0x8139B235,0x8139B236,0x8139B237,
+ 0x8139B238,0x8139B239,0x8139B330,0x8139B331,0x8139B332,0x8139B333,
+ 0x8139B334,0x8139B335,0x8139B336,0x8139B337,0x8139B338,0x8139B339,
+ 0x8139B430,0x8139B431,0x8139B432,0x8139B433,0x8139B434,0x8139B435,
+ 0x8139B436,0x8139B437,0x8139B438,0x8139B439,0x8139B530,0x8139B531,
+ 0x8139B532,0x8139B533,0x8139B534,0x8139B535,0x8139B536,0x8139B537,
+ 0x8139B538,0x8139B539,0x8139B630,0x8139B631,0x8139B632,0x8139B633,
+ 0x8139B634,0x8139B635,0x8139B636,0x8139B637,0x8139B638,0x8139B639,
+ 0x8139B730,0x8139B731,0x8139B732,0x8139B733,0x8139B734,0x8139B735,
+ 0x8139B736,0x8139B737,0x8139B738,0x8139B739,0x8139B830,0x8139B831,
+ 0x8139B832,0x8139B833,0x8139B834,0x8139B835,0x8139B836,0x8139B837,
+ 0x8139B838,0x8139B839,0x8139B930,0x8139B931,0x8139B932,0x8139B933,
+ 0x8139B934,0x8139B935,0x8139B936,0x8139B937,0x8139B938,0x8139B939,
+ 0x8139BA30,0x8139BA31,0x8139BA32,0x8139BA33,0x8139BA34,0x8139BA35,
+ 0x8139BA36,0x8139BA37,0x8139BA38,0x8139BA39,0x8139BB30,0x8139BB31,
+ 0x8139BB32,0x8139BB33,0x8139BB34,0x8139BB35,0x8139BB36,0x8139BB37,
+ 0x8139BB38,0x8139BB39,0x8139BC30,0x8139BC31,0x8139BC32,0x8139BC33,
+ 0x8139BC34,0x8139BC35,0x8139BC36,0x8139BC37,0x8139BC38,0x8139BC39,
+ 0x8139BD30,0x8139BD31,0x8139BD32,0x8139BD33,0x8139BD34,0x8139BD35,
+ 0x8139BD36,0x8139BD37,0x8139BD38,0x8139BD39,0x8139BE30,0x8139BE31,
+ 0x8139BE32,0x8139BE33,0x8139BE34,0x8139BE35,0x8139BE36,0x8139BE37,
+ 0x8139BE38,0x8139BE39,0x8139BF30,0x8139BF31,0x8139BF32,0x8139BF33,
+ 0x8139BF34,0x8139BF35,0x8139BF36,0x8139BF37,0x8139BF38,0x8139BF39,
+ 0x8139C030,0x8139C031,0x8139C032,0x8139C033,0x8139C034,0x8139C035,
+ 0x8139C036,0x8139C037,0x8139C038,0x8139C039,0x8139C130,0x8139C131,
+ 0xA2E5, 0xA2E6, 0xA2E7, 0xA2E8, 0xA2E9, 0xA2EA,
+ 0xA2EB, 0xA2EC, 0xA2ED, 0xA2EE,0x8139C132,0x8139C133,
+ 0x8139C134,0x8139C135,0x8139C136,0x8139C137,0x8139C138, 0xA95A,
+ 0x8139C139,0x8139C230,0x8139C231,0x8139C232,0x8139C233,0x8139C234,
+ 0x8139C235,0x8139C236,0x8139C237,0x8139C238,0x8139C239,0x8139C330,
+ 0x8139C331,0x8139C332,0x8139C333,0x8139C334,0x8139C335,0x8139C336,
+ 0x8139C337,0x8139C338,0x8139C339,0x8139C430,0x8139C431,0x8139C432,
+ 0x8139C433,0x8139C434,0x8139C435,0x8139C436,0x8139C437,0x8139C438,
+ 0x8139C439,0x8139C530,0x8139C531,0x8139C532,0x8139C533,0x8139C534,
+ 0x8139C535,0x8139C536,0x8139C537,0x8139C538,0x8139C539,0x8139C630,
+ 0x8139C631,0x8139C632,0x8139C633,0x8139C634,0x8139C635,0x8139C636,
+ 0x8139C637,0x8139C638,0x8139C639,0x8139C730,0x8139C731,0x8139C732,
+ 0x8139C733,0x8139C734,0x8139C735,0x8139C736,0x8139C737,0x8139C738,
+ 0x8139C739,0x8139C830,0x8139C831,0x8139C832,0x8139C833,0x8139C834,
+ 0x8139C835,0x8139C836,0x8139C837,0x8139C838,0x8139C839,0x8139C930,
+ 0x8139C931,0x8139C932,0x8139C933,0x8139C934,0x8139C935,0x8139C936,
+ 0x8139C937,0x8139C938,0x8139C939,0x8139CA30,0x8139CA31,0x8139CA32,
+ 0x8139CA33,0x8139CA34,0x8139CA35,0x8139CA36,0x8139CA37,0x8139CA38,
+ 0x8139CA39,0x8139CB30,0x8139CB31,0x8139CB32,0x8139CB33,0x8139CB34,
+ 0x8139CB35,0x8139CB36,0x8139CB37,0x8139CB38,0x8139CB39,0x8139CC30,
+ 0x8139CC31,0x8139CC32,0x8139CC33,0x8139CC34,0x8139CC35,0x8139CC36,
+ 0x8139CC37,0x8139CC38,0x8139CC39,0x8139CD30,0x8139CD31, 0xA949,
+ 0x8139CD32,0x8139CD33,0x8139CD34,0x8139CD35,0x8139CD36,0x8139CD37,
+ 0x8139CD38,0x8139CD39,0x8139CE30,0x8139CE31,0x8139CE32,0x8139CE33,
+ 0x8139CE34,0x8139CE35,0x8139CE36,0x8139CE37,0x8139CE38,0x8139CE39,
+ 0x8139CF30,0x8139CF31,0x8139CF32,0x8139CF33,0x8139CF34,0x8139CF35,
+ 0x8139CF36,0x8139CF37,0x8139CF38,0x8139CF39,0x8139D030,0x8139D031,
+ 0x8139D032,0x8139D033,0x8139D034,0x8139D035,0x8139D036,0x8139D037,
+ 0x8139D038,0x8139D039,0x8139D130,0x8139D131,0x8139D132,0x8139D133,
+ 0x8139D134,0x8139D135,0x8139D136,0x8139D137,0x8139D138,0x8139D139,
+ 0x8139D230,0x8139D231,0x8139D232,0x8139D233,0x8139D234,0x8139D235,
+ 0x8139D236,0x8139D237,0x8139D238,0x8139D239,0x8139D330,0x8139D331,
+ 0x8139D332,0x8139D333,0x8139D334,0x8139D335,0x8139D336,0x8139D337,
+ 0x8139D338,0x8139D339,0x8139D430,0x8139D431,0x8139D432,0x8139D433,
+ 0x8139D434,0x8139D435,0x8139D436,0x8139D437,0x8139D438,0x8139D439,
+ 0x8139D530,0x8139D531,0x8139D532,0x8139D533,0x8139D534,0x8139D535,
+ 0x8139D536,0x8139D537,0x8139D538,0x8139D539,0x8139D630,0x8139D631,
+ 0x8139D632,0x8139D633,0x8139D634,0x8139D635,0x8139D636,0x8139D637,
+ 0x8139D638,0x8139D639,0x8139D730,0x8139D731,0x8139D732,0x8139D733,
+ 0x8139D734,0x8139D735,0x8139D736,0x8139D737,0x8139D738,0x8139D739,
+ 0x8139D830,0x8139D831,0x8139D832,0x8139D833,0x8139D834,0x8139D835,
+ 0x8139D836,0x8139D837,0x8139D838,0x8139D839,0x8139D930,0x8139D931,
+ 0x8139D932,0x8139D933,0x8139D934,0x8139D935,0x8139D936,0x8139D937,
+ 0x8139D938,0x8139D939,0x8139DA30,0x8139DA31,0x8139DA32,0x8139DA33,
+ 0x8139DA34,0x8139DA35,0x8139DA36,0x8139DA37,0x8139DA38,0x8139DA39,
+ 0x8139DB30,0x8139DB31,0x8139DB32,0x8139DB33,0x8139DB34,0x8139DB35,
+ 0x8139DB36,0x8139DB37,0x8139DB38,0x8139DB39,0x8139DC30,0x8139DC31,
+ 0x8139DC32,0x8139DC33,0x8139DC34,0x8139DC35,0x8139DC36,0x8139DC37,
+ 0x8139DC38,0x8139DC39,0x8139DD30,0x8139DD31,0x8139DD32,0x8139DD33,
+ 0x8139DD34,0x8139DD35,0x8139DD36,0x8139DD37,0x8139DD38,0x8139DD39,
+ 0x8139DE30,0x8139DE31,0x8139DE32,0x8139DE33,0x8139DE34,0x8139DE35,
+ 0x8139DE36,0x8139DE37,0x8139DE38,0x8139DE39,0x8139DF30,0x8139DF31,
+ 0x8139DF32,0x8139DF33,0x8139DF34,0x8139DF35,0x8139DF36,0x8139DF37,
+ 0x8139DF38,0x8139DF39,0x8139E030,0x8139E031,0x8139E032,0x8139E033,
+ 0x8139E034,0x8139E035,0x8139E036,0x8139E037,0x8139E038,0x8139E039,
+ 0x8139E130,0x8139E131,0x8139E132,0x8139E133,0x8139E134,0x8139E135,
+ 0x8139E136,0x8139E137,0x8139E138,0x8139E139,0x8139E230,0x8139E231,
+ 0x8139E232,0x8139E233,0x8139E234,0x8139E235,0x8139E236,0x8139E237,
+ 0x8139E238,0x8139E239,0x8139E330,0x8139E331,0x8139E332,0x8139E333,
+ 0x8139E334,0x8139E335,0x8139E336,0x8139E337,0x8139E338,0x8139E339,
+ 0x8139E430,0x8139E431,0x8139E432,0x8139E433,0x8139E434,0x8139E435,
+ 0xA94A, 0xA94B,0x8139E436,0x8139E437,0x8139E438,0x8139E439,
+ 0x8139E530,0x8139E531,0x8139E532,0x8139E533,0x8139E534,0x8139E535,
+ 0x8139E536,0x8139E537, 0xA94C, 0xA94D, 0xA94E,0x8139E538,
+ 0x8139E539, 0xA94F,0x8139E630,0x8139E631,0x8139E632,0x8139E633,
+ 0x8139E634,0x8139E635,0x8139E636,0x8139E637,0x8139E638,0x8139E639,
+ 0x8139E730,0x8139E731,0x8139E732,0x8139E733,0x8139E734,0x8139E735,
+ 0x8139E736,0x8139E737,0x8139E738,0x8139E739,0x8139E830,0x8139E831,
+ 0x8139E832,0x8139E833,0x8139E834,0x8139E835,0x8139E836,0x8139E837,
+ 0x8139E838,0x8139E839,0x8139E930,0x8139E931,0x8139E932,0x8139E933,
+ 0xA950,0x8139E934,0x8139E935,0x8139E936,0x8139E937,0x8139E938,
+ 0x8139E939,0x8139EA30,0x8139EA31,0x8139EA32, 0xA951,0x8139EA33,
+ 0x8139EA34, 0xA952, 0xA953,0x8139EA35,0x8139EA36, 0xA954,
+ 0x8139EA37,0x8139EA38,0x8139EA39,0x8139EB30,0x8139EB31,0x8139EB32,
+ 0x8139EB33,0x8139EB34,0x8139EB35,0x8139EB36,0x8139EB37,0x8139EB38,
+ 0x8139EB39,0x8139EC30,0x8139EC31,0x8139EC32,0x8139EC33,0x8139EC34,
+ 0x8139EC35,0x8139EC36,0x8139EC37,0x8139EC38,0x8139EC39,0x8139ED30,
+ 0x8139ED31,0x8139ED32,0x8139ED33,0x8139ED34,0x8139ED35,0x8139ED36,
+ 0x8139ED37,0x8139ED38,0x8139ED39,0x8139EE30,0x8139EE31,0x8139EE32,
+ 0x8139EE33,0x8139EE34,0x8139EE35,0x8139EE36,0x8139EE37,0x8139EE38,
+ 0x8139EE39,0x8139EF30,0x8139EF31,0x8139EF32,0x8139EF33,0x8139EF34,
+ 0x8139EF35,0x8139EF36,0x8139EF37,0x8139EF38,0x8139EF39,0x8139F030,
+ 0x8139F031,0x8139F032,0x8139F033,0x8139F034,0x8139F035,0x8139F036,
+ 0x8139F037,0x8139F038,0x8139F039,0x8139F130,0x8139F131,0x8139F132,
+ 0x8139F133,0x8139F134,0x8139F135,0x8139F136,0x8139F137,0x8139F138,
+ 0x8139F139,0x8139F230,0x8139F231,0x8139F232,0x8139F233,0x8139F234,
+ 0x8139F235,0x8139F236,0x8139F237,0x8139F238,0x8139F239,0x8139F330,
+ 0x8139F331,0x8139F332,0x8139F333,0x8139F334,0x8139F335,0x8139F336,
+ 0x8139F337,0x8139F338,0x8139F339,0x8139F430,0x8139F431,0x8139F432,
+ 0x8139F433,0x8139F434,0x8139F435,0x8139F436,0x8139F437,0x8139F438,
+ 0x8139F439,0x8139F530,0x8139F531,0x8139F532,0x8139F533,0x8139F534,
+ 0x8139F535,0x8139F536,0x8139F537,0x8139F538,0x8139F539, 0xFE56,
+ 0x8139F630,0x8139F631,0x8139F632,0x8139F633,0x8139F634,0x8139F635,
+ 0x8139F636,0x8139F637,0x8139F638,0x8139F639,0x8139F730,0x8139F731,
+ 0x8139F732,0x8139F733,0x8139F734,0x8139F735,0x8139F736,0x8139F737,
+ 0x8139F738,0x8139F739,0x8139F830,0x8139F831,0x8139F832,0x8139F833,
+ 0x8139F834,0x8139F835,0x8139F836,0x8139F837,0x8139F838,0x8139F839,
+ 0x8139F930,0x8139F931,0x8139F932,0x8139F933,0x8139F934,0x8139F935,
+ 0x8139F936,0x8139F937,0x8139F938,0x8139F939,0x8139FA30,0x8139FA31,
+ 0x8139FA32, 0xFE55,0x8139FA33,0x8139FA34,0x8139FA35,0x8139FA36,
+ 0x8139FA37,0x8139FA38,0x8139FA39,0x8139FB30,0x8139FB31,0x8139FB32,
+ 0x8139FB33,0x8139FB34,0x8139FB35,0x8139FB36,0x8139FB37,0x8139FB38,
+ 0x8139FB39,0x8139FC30,0x8139FC31,0x8139FC32,0x8139FC33,0x8139FC34,
+ 0x8139FC35,0x8139FC36,0x8139FC37,0x8139FC38,0x8139FC39,0x8139FD30,
+ 0x8139FD31,0x8139FD32,0x8139FD33,0x8139FD34,0x8139FD35,0x8139FD36,
+ 0x8139FD37,0x8139FD38,0x8139FD39,0x8139FE30,0x8139FE31,0x8139FE32,
+ 0x8139FE33,0x8139FE34,0x8139FE35,0x8139FE36,0x8139FE37,0x8139FE38,
+ 0x8139FE39,0x82308130,0x82308131,0x82308132,0x82308133,0x82308134,
+ 0x82308135,0x82308136,0x82308137,0x82308138,0x82308139,0x82308230,
+ 0x82308231,0x82308232,0x82308233,0x82308234,0x82308235,0x82308236,
+ 0x82308237,0x82308238,0x82308239,0x82308330,0x82308331,0x82308332,
+ 0x82308333,0x82308334,0x82308335,0x82308336,0x82308337,0x82308338,
+ 0x82308339,0x82308430,0x82308431,0x82308432,0x82308433,0x82308434,
+ 0x82308435,0x82308436,0x82308437,0x82308438,0x82308439,0x82308530,
+ 0x82308531,0x82308532,0x82308533,0x82308534,0x82308535,0x82308536,
+ 0x82308537,0x82308538,0x82308539,0x82308630,0x82308631,0x82308632,
+ 0x82308633,0x82308634,0x82308635,0x82308636,0x82308637,0x82308638,
+ 0x82308639,0x82308730,0x82308731,0x82308732,0x82308733,0x82308734,
+ 0x82308735,0x82308736,0x82308737,0x82308738,0x82308739,0x82308830,
+ 0x82308831,0x82308832,0x82308833,0x82308834,0x82308835,0x82308836,
+ 0x82308837,0x82308838,0x82308839,0x82308930,0x82308931,0x82308932,
+ 0x82308933,0x82308934,0x82308935,0x82308936,0x82308937,0x82308938,
+ 0x82308939,0x82308A30,0x82308A31,0x82308A32,0x82308A33,0x82308A34,
+ 0x82308A35,0x82308A36,0x82308A37,0x82308A38,0x82308A39,0x82308B30,
+ 0x82308B31,0x82308B32,0x82308B33,0x82308B34,0x82308B35,0x82308B36,
+ 0x82308B37,0x82308B38,0x82308B39,0x82308C30,0x82308C31,0x82308C32,
+ 0x82308C33,0x82308C34,0x82308C35,0x82308C36,0x82308C37,0x82308C38,
+ 0x82308C39,0x82308D30,0x82308D31,0x82308D32,0x82308D33,0x82308D34,
+ 0x82308D35,0x82308D36,0x82308D37,0x82308D38,0x82308D39,0x82308E30,
+ 0x82308E31,0x82308E32,0x82308E33,0x82308E34,0x82308E35,0x82308E36,
+ 0x82308E37,0x82308E38,0x82308E39,0x82308F30,0x82308F31,0x82308F32,
+ 0x82308F33,0x82308F34,0x82308F35,0x82308F36,0x82308F37,0x82308F38,
+ 0x82308F39,0x82309030,0x82309031,0x82309032,0x82309033,0x82309034,
+ 0x82309035,0x82309036,0x82309037,0x82309038,0x82309039,0x82309130,
+ 0x82309131,0x82309132,0x82309133,0x82309134,0x82309135,0x82309136,
+ 0x82309137,0x82309138,0x82309139,0x82309230,0x82309231,0x82309232,
+ 0x82309233,0x82309234,0x82309235,0x82309236,0x82309237,0x82309238,
+ 0x82309239,0x82309330,0x82309331,0x82309332,0x82309333,0x82309334,
+ 0x82309335,0x82309336,0x82309337,0x82309338,0x82309339,0x82309430,
+ 0x82309431,0x82309432,0x82309433,0x82309434,0x82309435,0x82309436,
+ 0x82309437,0x82309438,0x82309439,0x82309530,0x82309531,0x82309532,
+ 0x82309533,0x82309534,0x82309535,0x82309536,0x82309537,0x82309538,
+ 0x82309539,0x82309630,0x82309631,0x82309632,0x82309633,0x82309634,
+ 0x82309635,0x82309636,0x82309637,0x82309638,0x82309639,0x82309730,
+ 0x82309731,0x82309732,0x82309733,0x82309734,0x82309735,0x82309736,
+ 0x82309737,0x82309738,0x82309739,0x82309830,0x82309831,0x82309832,
+ 0x82309833,0x82309834,0x82309835,0x82309836,0x82309837,0x82309838,
+ 0x82309839,0x82309930,0x82309931,0x82309932,0x82309933,0x82309934,
+ 0x82309935,0x82309936,0x82309937,0x82309938,0x82309939,0x82309A30,
+ 0xFE5A,0x82309A31,0x82309A32,0x82309A33,0x82309A34,0x82309A35,
+ 0x82309A36,0x82309A37,0x82309A38,0x82309A39,0x82309B30,0x82309B31,
+ 0x82309B32,0x82309B33,0x82309B34,0x82309B35,0x82309B36,0x82309B37,
+ 0x82309B38,0x82309B39,0x82309C30,0x82309C31,0x82309C32,0x82309C33,
+ 0x82309C34,0x82309C35,0x82309C36,0x82309C37,0x82309C38,0x82309C39,
+ 0x82309D30,0x82309D31,0x82309D32,0x82309D33,0x82309D34,0x82309D35,
+ 0x82309D36,0x82309D37,0x82309D38,0x82309D39,0x82309E30,0x82309E31,
+ 0x82309E32,0x82309E33,0x82309E34,0x82309E35,0x82309E36,0x82309E37,
+ 0x82309E38,0x82309E39,0x82309F30,0x82309F31,0x82309F32,0x82309F33,
+ 0x82309F34,0x82309F35,0x82309F36,0x82309F37,0x82309F38,0x82309F39,
+ 0x8230A030,0x8230A031,0x8230A032,0x8230A033,0x8230A034,0x8230A035,
+ 0x8230A036,0x8230A037,0x8230A038,0x8230A039,0x8230A130,0x8230A131,
+ 0x8230A132,0x8230A133,0x8230A134,0x8230A135,0x8230A136,0x8230A137,
+ 0x8230A138,0x8230A139,0x8230A230,0x8230A231,0x8230A232,0x8230A233,
+ 0x8230A234,0x8230A235,0x8230A236,0x8230A237,0x8230A238,0x8230A239,
+ 0x8230A330,0x8230A331,0x8230A332,0x8230A333,0x8230A334,0x8230A335,
+ 0x8230A336,0x8230A337,0x8230A338,0x8230A339,0x8230A430,0x8230A431,
+ 0x8230A432,0x8230A433,0x8230A434,0x8230A435,0x8230A436,0x8230A437,
+ 0x8230A438,0x8230A439,0x8230A530,0x8230A531, 0xFE5C,0x8230A532,
+ 0x8230A533,0x8230A534,0x8230A535,0x8230A536,0x8230A537,0x8230A538,
+ 0x8230A539,0x8230A630,0x8230A631,0x8230A632, 0xFE5B, 0xFE60,
+ 0x8230F238,0x8230F239,0x8230F330,0x8230F331,0x8230F332,0x8230F333,
+ 0x8230F334,0x8230F335,0x8230F336,0x8230F337,0x8230F338,0x8230F339,
+ 0x8230F430,0x8230F431,0x8230F432,0x8230F433,0x8230F434,0x8230F435,
+ 0x8230F436,0x8230F437,0x8230F438,0x8230F439,0x8230F530,0x8230F531,
+ 0x8230F532,0x8230F533,0x8230F534,0x8230F535,0x8230F536,0x8230F537,
+ 0x8230F538,0x8230F539,0x8230F630,0x8230F631,0x8230F632,0x8230F633,
+ 0x8230F634,0x8230F635,0x8230F636,0x8230F637,0x8230F638,0x8230F639,
+ 0x8230F730,0x8230F731,0x8230F732,0x8230F733,0x8230F734,0x8230F735,
+ 0x8230F736,0x8230F737,0x8230F738,0x8230F739,0x8230F830,0x8230F831,
+ 0x8230F832,0x8230F833,0x8230F834,0x8230F835,0x8230F836,0x8230F837,
+ 0x8230F838,0x8230F839,0x8230F930,0x8230F931,0x8230F932,0x8230F933,
+ 0x8230F934,0x8230F935,0x8230F936,0x8230F937,0x8230F938,0x8230F939,
+ 0x8230FA30,0x8230FA31,0x8230FA32,0x8230FA33,0x8230FA34,0x8230FA35,
+ 0x8230FA36,0x8230FA37,0x8230FA38,0x8230FA39,0x8230FB30,0x8230FB31,
+ 0x8230FB32, 0xFE5F,0x8230FB33,0x8230FB34,0x8230FB35,0x8230FB36,
+ 0x8230FB37,0x8230FB38,0x8230FB39,0x8230FC30,0x8230FC31,0x8230FC32,
+ 0x8230FC33,0x8230FC34,0x8230FC35,0x8230FC36,0x8230FC37,0x8230FC38,
+ 0x8230FC39,0x8230FD30,0x8230FD31,0x8230FD32,0x8230FD33,0x8230FD34,
+ 0x8230FD35,0x8230FD36,0x8230FD37,0x8230FD38,0x8230FD39,0x8230FE30,
+ 0x8230FE31,0x8230FE32,0x8230FE33,0x8230FE34,0x8230FE35,0x8230FE36,
+ 0x8230FE37,0x8230FE38,0x8230FE39,0x82318130,0x82318131,0x82318132,
+ 0x82318133,0x82318134,0x82318135,0x82318136,0x82318137,0x82318138,
+ 0x82318139,0x82318230,0x82318231,0x82318232,0x82318233,0x82318234,
+ 0x82318235,0x82318236,0x82318237,0x82318238,0x82318239,0x82318330,
+ 0x82318331,0x82318332,0x82318333,0x82318334,0x82318335,0x82318336,
+ 0x82318337,0x82318338,0x82318339,0x82318430,0x82318431,0x82318432,
+ 0x82318433,0x82318434,0x82318435,0x82318436,0x82318437,0x82318438,
+ 0x82318439,0x82318530,0x82318531,0x82318532,0x82318533,0x82318534,
+ 0x82318535,0x82318536,0x82318537,0x82318538,0x82318539,0x82318630,
+ 0x82318631,0x82318632,0x82318633,0x82318634,0x82318635,0x82318636,
+ 0x82318637,0x82318638, 0xFE62, 0xFE65,0x82318639,0x82318730,
+ 0x82318731,0x82318732,0x82318733,0x82318734,0x82318735,0x82318736,
+ 0x82318737,0x82318738,0x82318739,0x82318830,0x82318831,0x82318832,
+ 0xFE63,0x82318833,0x82318834,0x82318835,0x82318836,0x82318837,
+ 0x82318838,0x82318839,0x82318930,0x82318931,0x82318932,0x82318933,
+ 0x82318934,0x82318935,0x82318936,0x82318937,0x82318938,0x82318939,
+ 0x82318A30,0x82318A31,0x82318A32,0x82318A33,0x82318A34,0x82318A35,
+ 0x82318A36,0x82318A37,0x82318A38,0x82318A39,0x82318B30,0x82318B31,
+ 0x82318B32,0x82318B33,0x82318B34,0x82318B35,0x82318B36,0x82318B37,
+ 0x82318B38,0x82318B39,0x82318C30,0x82318C31,0x82318C32,0x82318C33,
+ 0x82318C34,0x82318C35,0x82318C36,0x82318C37,0x82318C38,0x82318C39,
+ 0x82318D30,0x82318D31,0x82318D32,0x82318D33,0x82318D34,0x82318D35,
+ 0x82318D36,0x82318D37,0x82318D38,0x82318D39,0x82318E30,0x82318E31,
+ 0x82318E32,0x82318E33,0x82318E34,0x82318E35,0x82318E36,0x82318E37,
+ 0x82318E38,0x82318E39,0x82318F30,0x82318F31,0x82318F32,0x82318F33,
+ 0x82318F34,0x82318F35,0x82318F36,0x82318F37,0x82318F38,0x82318F39,
+ 0x82319030,0x82319031,0x82319032,0x82319033,0x82319034,0x82319035,
+ 0x82319036,0x82319037,0x82319038,0x82319039,0x82319130,0x82319131,
+ 0x82319132,0x82319133,0x82319134,0x82319135,0x82319136,0x82319137,
+ 0x82319138,0x82319139,0x82319230,0x82319231,0x82319232,0x82319233,
+ 0x82319234,0x82319235,0x82319236,0x82319237,0x82319238,0x82319239,
+ 0x82319330,0x82319331,0x82319332,0x82319333,0x82319334,0x82319335,
+ 0x82319336,0x82319337,0x82319338,0x82319339,0x82319430,0x82319431,
+ 0x82319432,0x82319433,0x82319434,0x82319435,0x82319436,0x82319437,
+ 0x82319438,0x82319439,0x82319530,0x82319531,0x82319532,0x82319533,
+ 0x82319534,0x82319535,0x82319536,0x82319537,0x82319538,0x82319539,
+ 0x82319630,0x82319631,0x82319632,0x82319633,0x82319634,0x82319635,
+ 0x82319636,0x82319637,0x82319638,0x82319639, 0xFE64,0x82319730,
+ 0x82319731,0x82319732,0x82319733,0x82319734,0x82319735,0x82319736,
+ 0x82319737,0x82319738,0x82319739,0x82319830,0x82319831,0x82319832,
+ 0x82319833,0x82319834,0x82319835,0x82319836,0x82319837,0x82319838,
+ 0x82319839,0x82319930,0x82319931,0x82319932,0x82319933,0x82319934,
+ 0x82319935,0x82319936,0x82319937,0x82319938,0x82319939,0x82319A30,
+ 0x82319A31,0x82319A32,0x82319A33,0x82319A34,0x82319A35,0x82319A36,
+ 0x82319A37,0x82319A38,0x82319A39,0x82319B30,0x82319B31,0x82319B32,
+ 0x82319B33,0x82319B34,0x82319B35,0x82319B36,0x82319B37,0x82319B38,
+ 0x82319B39,0x82319C30,0x82319C31,0x82319C32,0x82319C33,0x82319C34,
+ 0x82319C35,0x82319C36,0x82319C37,0x82319C38,0x82319C39,0x82319D30,
+ 0x82319D31,0x82319D32,0x82319D33,0x82319D34,0x82319D35,0x82319D36,
+ 0x82319D37,0x82319D38,0x82319D39,0x82319E30,0x82319E31,0x82319E32,
+ 0x82319E33,0x82319E34,0x82319E35,0x82319E36,0x82319E37,0x82319E38,
+ 0x82319E39,0x82319F30,0x82319F31,0x82319F32,0x82319F33,0x82319F34,
+ 0x82319F35,0x82319F36,0x82319F37,0x82319F38,0x82319F39,0x8231A030,
+ 0x8231A031,0x8231A032,0x8231A033,0x8231A034,0x8231A035,0x8231A036,
+ 0x8231A037,0x8231A038,0x8231A039,0x8231A130,0x8231A131,0x8231A132,
+ 0x8231A133,0x8231A134,0x8231A135,0x8231A136,0x8231A137,0x8231A138,
+ 0x8231A139,0x8231A230,0x8231A231,0x8231A232,0x8231A233,0x8231A234,
+ 0x8231A235,0x8231A236,0x8231A237,0x8231A238,0x8231A239,0x8231A330,
+ 0x8231A331,0x8231A332,0x8231A333,0x8231A334,0x8231A335,0x8231A336,
+ 0x8231A337,0x8231A338,0x8231A339,0x8231A430,0x8231A431,0x8231A432,
+ 0x8231A433,0x8231A434,0x8231A435,0x8231A436,0x8231A437,0x8231A438,
+ 0x8231A439,0x8231A530,0x8231A531,0x8231A532,0x8231A533,0x8231A534,
+ 0x8231A535,0x8231A536,0x8231A537,0x8231A538,0x8231A539,0x8231A630,
+ 0x8231A631,0x8231A632,0x8231A633,0x8231A634,0x8231A635,0x8231A636,
+ 0x8231A637,0x8231A638,0x8231A639,0x8231A730,0x8231A731,0x8231A732,
+ 0x8231A733,0x8231A734,0x8231A735,0x8231A736,0x8231A737,0x8231A738,
+ 0x8231A739,0x8231A830,0x8231A831,0x8231A832,0x8231A833,0x8231A834,
+ 0x8231A835,0x8231A836,0x8231A837,0x8231A838,0x8231A839,0x8231A930,
+ 0x8231A931,0x8231A932,0x8231A933,0x8231A934,0x8231A935,0x8231A936,
+ 0x8231A937,0x8231A938,0x8231A939,0x8231AA30,0x8231AA31,0x8231AA32,
+ 0x8231AA33,0x8231AA34,0x8231AA35,0x8231AA36,0x8231AA37,0x8231AA38,
+ 0x8231AA39,0x8231AB30,0x8231AB31,0x8231AB32,0x8231AB33,0x8231AB34,
+ 0x8231AB35,0x8231AB36,0x8231AB37,0x8231AB38,0x8231AB39,0x8231AC30,
+ 0x8231AC31,0x8231AC32,0x8231AC33,0x8231AC34,0x8231AC35,0x8231AC36,
+ 0x8231AC37, 0xFE68,0x8231AC38,0x8231AC39,0x8231AD30,0x8231AD31,
+ 0x8231AD32,0x8231AD33,0x8231AD34,0x8231AD35,0x8231AD36,0x8231AD37,
+ 0x8231AD38,0x8231AD39,0x8231AE30,0x8231AE31,0x8231AE32,0x8231AE33,
+ 0x8231AE34,0x8231AE35,0x8231AE36,0x8231AE37,0x8231AE38,0x8231AE39,
+ 0x8231AF30,0x8231AF31,0x8231AF32,0x8231AF33,0x8231AF34,0x8231AF35,
+ 0x8231AF36,0x8231AF37,0x8231AF38,0x8231AF39,0x8231B030,0x8231B031,
+ 0x8231B032,0x8231B033,0x8231B034,0x8231B035,0x8231B036,0x8231B037,
+ 0x8231B038,0x8231B039,0x8231B130,0x8231B131,0x8231B132,0x8231B133,
+ 0x8231B134,0x8231B135,0x8231B136,0x8231B137,0x8231B138,0x8231B139,
+ 0x8231B230,0x8231B231,0x8231B232,0x8231B233,0x8231B234,0x8231B235,
+ 0x8231B236,0x8231B237,0x8231B238,0x8231B239,0x8231B330,0x8231B331,
+ 0x8231B332,0x8231B333,0x8231B334,0x8231B335,0x8231B336,0x8231B337,
+ 0x8231B338,0x8231B339,0x8231B430,0x8231B431,0x8231B432,0x8231B433,
+ 0x8231B434,0x8231B435,0x8231B436,0x8231B437,0x8231B438,0x8231B439,
+ 0x8231B530,0x8231B531,0x8231B532,0x8231B533,0x8231B534,0x8231B535,
+ 0x8231B536,0x8231B537,0x8231B538,0x8231B539,0x8231B630,0x8231B631,
+ 0x8231B632,0x8231B633,0x8231B634,0x8231B635,0x8231B636,0x8231B637,
+ 0x8231B638,0x8231B639,0x8231B730,0x8231B731,0x8231B732,0x8231B733,
+ 0x8231B734,0x8231B735,0x8231B736,0x8231B737,0x8231B738,0x8231B739,
+ 0x8231B830,0x8231B831,0x8231B832,0x8231B833,0x8231B834,0x8231B835,
+ 0x8231B836,0x8231B837,0x8231B838,0x8231B839,0x8231B930,0x8231B931,
+ 0x8231B932,0x8231B933,0x8231B934,0x8231B935,0x8231B936,0x8231B937,
+ 0x8231B938,0x8231B939,0x8231BA30,0x8231BA31,0x8231BA32,0x8231BA33,
+ 0x8231BA34,0x8231BA35,0x8231BA36,0x8231BA37,0x8231BA38,0x8231BA39,
+ 0x8231BB30,0x8231BB31,0x8231BB32,0x8231BB33,0x8231BB34,0x8231BB35,
+ 0x8231BB36,0x8231BB37,0x8231BB38,0x8231BB39,0x8231BC30,0x8231BC31,
+ 0x8231BC32,0x8231BC33,0x8231BC34,0x8231BC35,0x8231BC36,0x8231BC37,
+ 0x8231BC38,0x8231BC39,0x8231BD30,0x8231BD31,0x8231BD32,0x8231BD33,
+ 0x8231BD34,0x8231BD35,0x8231BD36,0x8231BD37,0x8231BD38,0x8231BD39,
+ 0x8231BE30,0x8231BE31,0x8231BE32,0x8231BE33,0x8231BE34,0x8231BE35,
+ 0x8231BE36,0x8231BE37,0x8231BE38,0x8231BE39,0x8231BF30,0x8231BF31,
+ 0x8231BF32,0x8231BF33,0x8231BF34,0x8231BF35,0x8231BF36,0x8231BF37,
+ 0x8231BF38,0x8231BF39,0x8231C030,0x8231C031,0x8231C032,0x8231C033,
+ 0x8231C034,0x8231C035,0x8231C036,0x8231C037,0x8231C038,0x8231C039,
+ 0x8231C130,0x8231C131,0x8231C132,0x8231C133,0x8231C134,0x8231C135,
+ 0x8231C136,0x8231C137,0x8231C138,0x8231C139,0x8231C230,0x8231C231,
+ 0x8231C232,0x8231C233,0x8231C234,0x8231C235,0x8231C236,0x8231C237,
+ 0x8231C238,0x8231C239,0x8231C330,0x8231C331,0x8231C332,0x8231C333,
+ 0x8231C334,0x8231C335,0x8231C336,0x8231C337,0x8231C338,0x8231C339,
+ 0x8231C430,0x8231C431,0x8231C432,0x8231C433,0x8231C434,0x8231C435,
+ 0x8231C436,0x8231C437,0x8231C438,0x8231C439,0x8231C530,0x8231C531,
+ 0x8231C532,0x8231C533,0x8231C534,0x8231C535,0x8231C536,0x8231C537,
+ 0x8231C538,0x8231C539,0x8231C630,0x8231C631,0x8231C632,0x8231C633,
+ 0x8231C634,0x8231C635,0x8231C636,0x8231C637,0x8231C638,0x8231C639,
+ 0x8231C730,0x8231C731,0x8231C732,0x8231C733,0x8231C734,0x8231C735,
+ 0x8231C736,0x8231C737,0x8231C738,0x8231C739,0x8231C830,0x8231C831,
+ 0x8231C832,0x8231C833,0x8231C834,0x8231C835,0x8231C836,0x8231C837,
+ 0x8231C838,0x8231C839,0x8231C930,0x8231C931,0x8231C932,0x8231C933,
+ 0x8231C934, 0xFE69,0x8231C935,0x8231C936,0x8231C937,0x8231C938,
+ 0x8231C939,0x8231CA30,0x8231CA31,0x8231CA32,0x8231CA33,0x8231CA34,
+ 0x8231CA35,0x8231CA36,0x8231CA37,0x8231CA38,0x8231CA39,0x8231CB30,
+ 0x8231CB31,0x8231CB32,0x8231CB33,0x8231CB34,0x8231CB35,0x8231CB36,
+ 0x8231CB37,0x8231CB38,0x8231CB39,0x8231CC30,0x8231CC31,0x8231CC32,
+ 0x8231CC33,0x8231CC34,0x8231CC35,0x8231CC36,0x8231CC37,0x8231CC38,
+ 0x8231CC39,0x8231CD30,0x8231CD31,0x8231CD32,0x8231CD33,0x8231CD34,
+ 0x8231CD35,0x8231CD36,0x8231CD37,0x8231CD38,0x8231CD39,0x8231CE30,
+ 0x8231CE31,0x8231CE32,0x8231CE33,0x8231CE34,0x8231CE35,0x8231CE36,
+ 0x8231CE37,0x8231CE38,0x8231CE39,0x8231CF30,0x8231CF31,0x8231CF32,
+ 0x8231CF33,0x8231CF34,0x8231CF35,0x8231CF36,0x8231CF37,0x8231CF38,
+ 0x8231CF39,0x8231D030,0x8231D031,0x8231D032,0x8231D033,0x8231D034,
+ 0x8231D035,0x8231D036,0x8231D037,0x8231D038,0x8231D039,0x8231D130,
+ 0x8231D131,0x8231D132,0x8231D133,0x8231D134,0x8231D135,0x8231D136,
+ 0x8231D137,0x8231D138,0x8231D139,0x8231D230,0x8231D231,0x8231D232,
+ 0x8231D233,0x8231D234,0x8231D235,0x8231D236,0x8231D237,0x8231D238,
+ 0x8231D239,0x8231D330,0x8231D331,0x8231D332,0x8231D333,0x8231D334,
+ 0x8231D335,0x8231D336,0x8231D337,0x8231D338,0x8231D339,0x8231D430,
+ 0x8231D431,0x8231D432,0x8231D433,0x8231D434,0x8231D435,0x8231D436,
+ 0x8231D437, 0xFE6A, 0xFE6F,0x8232AF33,0x8232AF34,0x8232AF35,
+ 0x8232AF36,0x8232AF37,0x8232AF38,0x8232AF39,0x8232B030,0x8232B031,
+ 0x8232B032,0x8232B033,0x8232B034,0x8232B035,0x8232B036,0x8232B037,
+ 0x8232B038,0x8232B039,0x8232B130,0x8232B131,0x8232B132,0x8232B133,
+ 0x8232B134,0x8232B135,0x8232B136,0x8232B137,0x8232B138,0x8232B139,
+ 0x8232B230,0x8232B231,0x8232B232,0x8232B233,0x8232B234,0x8232B235,
+ 0x8232B236,0x8232B237,0x8232B238,0x8232B239,0x8232B330,0x8232B331,
+ 0x8232B332,0x8232B333,0x8232B334,0x8232B335,0x8232B336,0x8232B337,
+ 0x8232B338,0x8232B339,0x8232B430,0x8232B431,0x8232B432,0x8232B433,
+ 0x8232B434,0x8232B435,0x8232B436,0x8232B437,0x8232B438,0x8232B439,
+ 0x8232B530,0x8232B531,0x8232B532,0x8232B533,0x8232B534,0x8232B535,
+ 0x8232B536,0x8232B537,0x8232B538,0x8232B539,0x8232B630,0x8232B631,
+ 0x8232B632,0x8232B633,0x8232B634,0x8232B635,0x8232B636,0x8232B637,
+ 0x8232B638,0x8232B639,0x8232B730,0x8232B731,0x8232B732,0x8232B733,
+ 0x8232B734,0x8232B735,0x8232B736,0x8232B737,0x8232B738,0x8232B739,
+ 0x8232B830,0x8232B831,0x8232B832,0x8232B833,0x8232B834,0x8232B835,
+ 0x8232B836,0x8232B837,0x8232B838,0x8232B839,0x8232B930,0x8232B931,
+ 0x8232B932,0x8232B933,0x8232B934,0x8232B935,0x8232B936,0x8232B937,
+ 0x8232B938,0x8232B939,0x8232BA30,0x8232BA31,0x8232BA32,0x8232BA33,
+ 0x8232BA34,0x8232BA35,0x8232BA36,0x8232BA37,0x8232BA38,0x8232BA39,
+ 0x8232BB30,0x8232BB31,0x8232BB32,0x8232BB33,0x8232BB34,0x8232BB35,
+ 0x8232BB36,0x8232BB37,0x8232BB38,0x8232BB39,0x8232BC30,0x8232BC31,
+ 0x8232BC32,0x8232BC33,0x8232BC34,0x8232BC35,0x8232BC36,0x8232BC37,
+ 0x8232BC38,0x8232BC39,0x8232BD30,0x8232BD31,0x8232BD32,0x8232BD33,
+ 0x8232BD34,0x8232BD35,0x8232BD36,0x8232BD37,0x8232BD38,0x8232BD39,
+ 0x8232BE30,0x8232BE31,0x8232BE32,0x8232BE33,0x8232BE34,0x8232BE35,
+ 0x8232BE36,0x8232BE37,0x8232BE38,0x8232BE39,0x8232BF30,0x8232BF31,
+ 0x8232BF32,0x8232BF33,0x8232BF34,0x8232BF35,0x8232BF36,0x8232BF37,
+ 0x8232BF38,0x8232BF39,0x8232C030,0x8232C031,0x8232C032,0x8232C033,
+ 0x8232C034,0x8232C035,0x8232C036,0x8232C037,0x8232C038,0x8232C039,
+ 0x8232C130,0x8232C131,0x8232C132,0x8232C133,0x8232C134,0x8232C135,
+ 0x8232C136,0x8232C137,0x8232C138,0x8232C139,0x8232C230,0x8232C231,
+ 0x8232C232,0x8232C233,0x8232C234,0x8232C235,0x8232C236,0x8232C237,
+ 0x8232C238,0x8232C239,0x8232C330,0x8232C331,0x8232C332,0x8232C333,
+ 0x8232C334,0x8232C335,0x8232C336,0x8232C337,0x8232C338,0x8232C339,
+ 0x8232C430,0x8232C431,0x8232C432,0x8232C433,0x8232C434,0x8232C435,
+ 0x8232C436,0x8232C437,0x8232C438,0x8232C439,0x8232C530,0x8232C531,
+ 0x8232C532,0x8232C533,0x8232C534,0x8232C535,0x8232C536,0x8232C537,
+ 0x8232C538,0x8232C539,0x8232C630,0x8232C631,0x8232C632,0x8232C633,
+ 0x8232C634,0x8232C635,0x8232C636,0x8232C637,0x8232C638,0x8232C639,
+ 0x8232C730,0x8232C731,0x8232C732,0x8232C733,0x8232C734,0x8232C735,
+ 0x8232C736,0x8232C737,0x8232C738,0x8232C739,0x8232C830,0x8232C831,
+ 0x8232C832,0x8232C833,0x8232C834,0x8232C835,0x8232C836,0x8232C837,
+ 0x8232C838,0x8232C839,0x8232C930,0x8232C931,0x8232C932,0x8232C933,
+ 0x8232C934,0x8232C935,0x8232C936, 0xFE70, 0xFE72,0x8232F838,
+ 0x8232F839,0x8232F930,0x8232F931,0x8232F932,0x8232F933,0x8232F934,
+ 0x8232F935,0x8232F936,0x8232F937,0x8232F938,0x8232F939,0x8232FA30,
+ 0x8232FA31,0x8232FA32,0x8232FA33,0x8232FA34,0x8232FA35,0x8232FA36,
+ 0x8232FA37,0x8232FA38,0x8232FA39,0x8232FB30,0x8232FB31,0x8232FB32,
+ 0x8232FB33,0x8232FB34,0x8232FB35,0x8232FB36,0x8232FB37,0x8232FB38,
+ 0x8232FB39,0x8232FC30,0x8232FC31,0x8232FC32,0x8232FC33,0x8232FC34,
+ 0x8232FC35,0x8232FC36,0x8232FC37,0x8232FC38,0x8232FC39,0x8232FD30,
+ 0x8232FD31,0x8232FD32,0x8232FD33,0x8232FD34,0x8232FD35,0x8232FD36,
+ 0x8232FD37,0x8232FD38,0x8232FD39,0x8232FE30,0x8232FE31,0x8232FE32,
+ 0x8232FE33,0x8232FE34,0x8232FE35,0x8232FE36,0x8232FE37,0x8232FE38,
+ 0x8232FE39,0x82338130,0x82338131,0x82338132,0x82338133,0x82338134,
+ 0x82338135,0x82338136,0x82338137,0x82338138,0x82338139,0x82338230,
+ 0x82338231,0x82338232,0x82338233,0x82338234,0x82338235,0x82338236,
+ 0x82338237,0x82338238,0x82338239,0x82338330,0x82338331,0x82338332,
+ 0x82338333,0x82338334,0x82338335,0x82338336,0x82338337,0x82338338,
+ 0x82338339,0x82338430,0x82338431,0x82338432,0x82338433,0x82338434,
+ 0x82338435,0x82338436,0x82338437,0x82338438,0x82338439,0x82338530,
+ 0x82338531,0x82338532,0x82338533,0x82338534,0x82338535,0x82338536,
+ 0x82338537,0x82338538,0x82338539,0x82338630,0x82338631,0x82338632,
+ 0x82338633, 0xFE78,0x82338634,0x82338635,0x82338636,0x82338637,
+ 0xFE77,0x82338638,0x82338639,0x82338730,0x82338731,0x82338732,
+ 0x82338733,0x82338734,0x82338735,0x82338736,0x82338737,0x82338738,
+ 0x82338739,0x82338830,0x82338831,0x82338832,0x82338833,0x82338834,
+ 0x82338835,0x82338836,0x82338837,0x82338838,0x82338839,0x82338930,
+ 0x82338931,0x82338932,0x82338933,0x82338934,0x82338935,0x82338936,
+ 0x82338937,0x82338938,0x82338939,0x82338A30,0x82338A31,0x82338A32,
+ 0x82338A33,0x82338A34,0x82338A35,0x82338A36,0x82338A37,0x82338A38,
+ 0x82338A39,0x82338B30, 0xFE7A,0x82338B31,0x82338B32,0x82338B33,
+ 0x82338B34,0x82338B35,0x82338B36,0x82338B37,0x82338B38,0x82338B39,
+ 0x82338C30,0x82338C31,0x82338C32,0x82338C33,0x82338C34,0x82338C35,
+ 0x82338C36,0x82338C37,0x82338C38,0x82338C39,0x82338D30,0x82338D31,
+ 0x82338D32,0x82338D33,0x82338D34,0x82338D35,0x82338D36,0x82338D37,
+ 0x82338D38,0x82338D39,0x82338E30,0x82338E31,0x82338E32,0x82338E33,
+ 0x82338E34,0x82338E35,0x82338E36,0x82338E37,0x82338E38,0x82338E39,
+ 0x82338F30,0x82338F31,0x82338F32,0x82338F33,0x82338F34,0x82338F35,
+ 0x82338F36,0x82338F37,0x82338F38,0x82338F39,0x82339030,0x82339031,
+ 0x82339032,0x82339033,0x82339034,0x82339035,0x82339036,0x82339037,
+ 0x82339038,0x82339039,0x82339130,0x82339131,0x82339132,0x82339133,
+ 0x82339134,0x82339135,0x82339136,0x82339137,0x82339138,0x82339139,
+ 0x82339230,0x82339231,0x82339232,0x82339233,0x82339234,0x82339235,
+ 0x82339236,0x82339237,0x82339238,0x82339239,0x82339330,0x82339331,
+ 0x82339332,0x82339333,0x82339334,0x82339335,0x82339336,0x82339337,
+ 0x82339338,0x82339339,0x82339430,0x82339431,0x82339432,0x82339433,
+ 0x82339434,0x82339435,0x82339436,0x82339437,0x82339438,0x82339439,
+ 0x82339530,0x82339531,0x82339532,0x82339533,0x82339534,0x82339535,
+ 0x82339536,0x82339537,0x82339538,0x82339539,0x82339630,0x82339631,
+ 0x82339632,0x82339633,0x82339634,0x82339635,0x82339636,0x82339637,
+ 0x82339638,0x82339639,0x82339730,0x82339731,0x82339732,0x82339733,
+ 0x82339734,0x82339735,0x82339736,0x82339737,0x82339738,0x82339739,
+ 0x82339830,0x82339831,0x82339832,0x82339833,0x82339834,0x82339835,
+ 0x82339836,0x82339837,0x82339838,0x82339839,0x82339930,0x82339931,
+ 0x82339932,0x82339933,0x82339934,0x82339935,0x82339936,0x82339937,
+ 0x82339938,0x82339939,0x82339A30,0x82339A31,0x82339A32,0x82339A33,
+ 0x82339A34,0x82339A35,0x82339A36,0x82339A37,0x82339A38,0x82339A39,
+ 0x82339B30,0x82339B31,0x82339B32,0x82339B33,0x82339B34,0x82339B35,
+ 0x82339B36,0x82339B37,0x82339B38,0x82339B39,0x82339C30,0x82339C31,
+ 0x82339C32,0x82339C33,0x82339C34,0x82339C35,0x82339C36,0x82339C37,
+ 0x82339C38,0x82339C39,0x82339D30,0x82339D31,0x82339D32,0x82339D33,
+ 0x82339D34,0x82339D35,0x82339D36,0x82339D37,0x82339D38,0x82339D39,
+ 0x82339E30,0x82339E31,0x82339E32,0x82339E33,0x82339E34,0x82339E35,
+ 0x82339E36,0x82339E37,0x82339E38,0x82339E39,0x82339F30,0x82339F31,
+ 0x82339F32,0x82339F33,0x82339F34,0x82339F35,0x82339F36,0x82339F37,
+ 0x82339F38,0x82339F39,0x8233A030,0x8233A031,0x8233A032,0x8233A033,
+ 0x8233A034,0x8233A035,0x8233A036,0x8233A037,0x8233A038,0x8233A039,
+ 0x8233A130,0x8233A131,0x8233A132,0x8233A133,0x8233A134,0x8233A135,
+ 0x8233A136,0x8233A137,0x8233A138,0x8233A139,0x8233A230,0x8233A231,
+ 0x8233A232,0x8233A233,0x8233A234,0x8233A235,0x8233A236,0x8233A237,
+ 0x8233A238,0x8233A239,0x8233A330,0x8233A331,0x8233A332,0x8233A333,
+ 0x8233A334,0x8233A335,0x8233A336,0x8233A337,0x8233A338, 0xFE7B,
+ 0xFE7D,0x8233C932,0x8233C933,0x8233C934,0x8233C935,0x8233C936,
+ 0x8233C937,0x8233C938,0x8233C939,0x8233CA30,0x8233CA31,0x8233CA32,
+ 0x8233CA33,0x8233CA34,0x8233CA35,0x8233CA36,0x8233CA37,0x8233CA38,
+ 0x8233CA39,0x8233CB30,0x8233CB31, 0xFE7C,0x8233CB32,0x8233CB33,
+ 0x8233CB34,0x8233CB35,0x8233CB36,0x8233CB37,0x8233CB38,0x8233CB39,
+ 0x8233CC30,0x8233CC31,0x8233CC32,0x8233CC33,0x8233CC34,0x8233CC35,
+ 0x8233CC36,0x8233CC37,0x8233CC38,0x8233CC39,0x8233CD30,0x8233CD31,
+ 0x8233CD32,0x8233CD33,0x8233CD34,0x8233CD35,0x8233CD36,0x8233CD37,
+ 0x8233CD38,0x8233CD39,0x8233CE30,0x8233CE31,0x8233CE32,0x8233CE33,
+ 0x8233CE34,0x8233CE35,0x8233CE36,0x8233CE37,0x8233CE38,0x8233CE39,
+ 0x8233CF30,0x8233CF31,0x8233CF32,0x8233CF33,0x8233CF34,0x8233CF35,
+ 0x8233CF36,0x8233CF37,0x8233CF38,0x8233CF39,0x8233D030,0x8233D031,
+ 0x8233D032,0x8233D033,0x8233D034,0x8233D035,0x8233D036,0x8233D037,
+ 0x8233D038,0x8233D039,0x8233D130,0x8233D131,0x8233D132,0x8233D133,
+ 0x8233D134,0x8233D135,0x8233D136,0x8233D137,0x8233D138,0x8233D139,
+ 0x8233D230,0x8233D231,0x8233D232,0x8233D233,0x8233D234,0x8233D235,
+ 0x8233D236,0x8233D237,0x8233D238,0x8233D239,0x8233D330,0x8233D331,
+ 0x8233D332,0x8233D333,0x8233D334,0x8233D335,0x8233D336,0x8233D337,
+ 0x8233D338,0x8233D339,0x8233D430,0x8233D431,0x8233D432,0x8233D433,
+ 0x8233D434,0x8233D435,0x8233D436,0x8233D437,0x8233D438,0x8233D439,
+ 0x8233D530,0x8233D531,0x8233D532,0x8233D533,0x8233D534,0x8233D535,
+ 0x8233D536,0x8233D537,0x8233D538,0x8233D539,0x8233D630,0x8233D631,
+ 0x8233D632,0x8233D633,0x8233D634,0x8233D635,0x8233D636,0x8233D637,
+ 0x8233D638,0x8233D639,0x8233D730,0x8233D731,0x8233D732,0x8233D733,
+ 0x8233D734,0x8233D735,0x8233D736,0x8233D737,0x8233D738,0x8233D739,
+ 0x8233D830,0x8233D831,0x8233D832,0x8233D833,0x8233D834,0x8233D835,
+ 0x8233D836,0x8233D837,0x8233D838,0x8233D839,0x8233D930,0x8233D931,
+ 0x8233D932,0x8233D933,0x8233D934,0x8233D935,0x8233D936,0x8233D937,
+ 0x8233D938,0x8233D939,0x8233DA30,0x8233DA31,0x8233DA32,0x8233DA33,
+ 0x8233DA34,0x8233DA35,0x8233DA36,0x8233DA37,0x8233DA38,0x8233DA39,
+ 0x8233DB30,0x8233DB31,0x8233DB32,0x8233DB33,0x8233DB34,0x8233DB35,
+ 0x8233DB36,0x8233DB37,0x8233DB38,0x8233DB39,0x8233DC30,0x8233DC31,
+ 0x8233DC32,0x8233DC33,0x8233DC34,0x8233DC35,0x8233DC36,0x8233DC37,
+ 0x8233DC38,0x8233DC39,0x8233DD30,0x8233DD31,0x8233DD32,0x8233DD33,
+ 0x8233DD34,0x8233DD35,0x8233DD36,0x8233DD37,0x8233DD38,0x8233DD39,
+ 0x8233DE30,0x8233DE31,0x8233DE32,0x8233DE33,0x8233DE34, 0xFE80,
+ 0x8233DE35,0x8233DE36,0x8233DE37,0x8233DE38,0x8233DE39, 0xFE81,
+ 0x8233DF30,0x8233DF31,0x8233DF32,0x8233DF33,0x8233DF34,0x8233DF35,
+ 0x8233DF36,0x8233DF37,0x8233DF38,0x8233DF39,0x8233E030,0x8233E031,
+ 0x8233E032,0x8233E033,0x8233E034,0x8233E035,0x8233E036,0x8233E037,
+ 0x8233E038,0x8233E039,0x8233E130,0x8233E131,0x8233E132,0x8233E133,
+ 0x8233E134,0x8233E135,0x8233E136,0x8233E137,0x8233E138,0x8233E139,
+ 0x8233E230,0x8233E231,0x8233E232,0x8233E233,0x8233E234,0x8233E235,
+ 0x8233E236,0x8233E237,0x8233E238,0x8233E239,0x8233E330,0x8233E331,
+ 0x8233E332,0x8233E333,0x8233E334,0x8233E335,0x8233E336,0x8233E337,
+ 0x8233E338,0x8233E339,0x8233E430,0x8233E431,0x8233E432,0x8233E433,
+ 0x8233E434,0x8233E435,0x8233E436,0x8233E437,0x8233E438,0x8233E439,
+ 0x8233E530,0x8233E531,0x8233E532,0x8233E533,0x8233E534,0x8233E535,
+ 0x8233E536,0x8233E537,0x8233E538,0x8233E539,0x8233E630,0x8233E631,
+ 0x8233E632,0x8233E633,0x8233E634,0x8233E635,0x8233E636,0x8233E637,
+ 0x8233E638,0x8233E639,0x8233E730,0x8233E731, 0xFE82,0x8233E732,
+ 0x8233E733,0x8233E734,0x8233E735,0x8233E736,0x8233E737,0x8233E738,
+ 0x8233E739,0x8233E830,0x8233E831,0x8233E832,0x8233E833,0x8233E834,
+ 0x8233E835,0x8233E836,0x8233E837, 0xFE83, 0xFE85,0x82349639,
+ 0x82349730,0x82349731,0x82349732,0x82349733,0x82349734,0x82349735,
+ 0x82349736,0x82349737,0x82349738,0x82349739,0x82349830,0x82349831,
+ 0x82349832,0x82349833,0x82349834,0x82349835,0x82349836,0x82349837,
+ 0x82349838,0x82349839,0x82349930,0x82349931,0x82349932,0x82349933,
+ 0x82349934,0x82349935,0x82349936,0x82349937,0x82349938,0x82349939,
+ 0x82349A30,0x82349A31,0x82349A32,0x82349A33,0x82349A34,0x82349A35,
+ 0x82349A36,0x82349A37,0x82349A38,0x82349A39,0x82349B30,0x82349B31,
+ 0x82349B32,0x82349B33,0x82349B34,0x82349B35,0x82349B36,0x82349B37,
+ 0x82349B38, 0xFE86,0x82349B39,0x82349C30, 0xFE87,0x82349C31,
+ 0x82349C32,0x82349C33,0x82349C34, 0xFE88, 0xFE89,0x82349C35,
+ 0xFE8A, 0xFE8B,0x82349C36,0x82349C37,0x82349C38,0x82349C39,
+ 0x82349D30,0x82349D31,0x82349D32,0x82349D33,0x82349D34,0x82349D35,
+ 0x82349D36,0x82349D37,0x82349D38,0x82349D39,0x82349E30,0x82349E31,
+ 0x82349E32,0x82349E33,0x82349E34,0x82349E35, 0xFE8D,0x82349E36,
+ 0x82349E37,0x82349E38, 0xFE8C,0x82349E39,0x82349F30,0x82349F31,
+ 0x82349F32,0x82349F33,0x82349F34,0x82349F35,0x82349F36,0x82349F37,
+ 0x82349F38,0x82349F39,0x8234A030,0x8234A031,0x8234A032,0x8234A033,
+ 0x8234A034,0x8234A035,0x8234A036,0x8234A037,0x8234A038,0x8234A039,
+ 0x8234A130, 0xFE8F, 0xFE8E, 0xFE96,0x8234E734,0x8234E735,
+ 0x8234E736,0x8234E737,0x8234E738,0x8234E739,0x8234E830,0x8234E831,
+ 0x8234E832,0x8234E833,0x8234E834,0x8234E835,0x8234E836,0x8234E837,
+ 0x8234E838,0x8234E839,0x8234E930,0x8234E931,0x8234E932,0x8234E933,
+ 0x8234E934,0x8234E935,0x8234E936,0x8234E937,0x8234E938,0x8234E939,
+ 0x8234EA30,0x8234EA31,0x8234EA32,0x8234EA33,0x8234EA34,0x8234EA35,
+ 0x8234EA36,0x8234EA37,0x8234EA38,0x8234EA39,0x8234EB30,0x8234EB31,
+ 0x8234EB32, 0xFE93, 0xFE94, 0xFE95, 0xFE97, 0xFE92,
+ 0x8234EB33,0x8234EB34,0x8234EB35,0x8234EB36,0x8234EB37,0x8234EB38,
+ 0x8234EB39,0x8234EC30,0x8234EC31,0x8234EC32,0x8234EC33,0x8234EC34,
+ 0x8234EC35,0x8234EC36,0x8234EC37,0x8234EC38,0x8234EC39,0x8234ED30,
+ 0x8234ED31,0x8234ED32,0x8234ED33,0x8234ED34,0x8234ED35,0x8234ED36,
+ 0x8234ED37,0x8234ED38,0x8234ED39,0x8234EE30,0x8234EE31,0x8234EE32,
+ 0x8234EE33,0x8234EE34,0x8234EE35,0x8234EE36,0x8234EE37,0x8234EE38,
+ 0x8234EE39,0x8234EF30,0x8234EF31,0x8234EF32,0x8234EF33,0x8234EF34,
+ 0x8234EF35,0x8234EF36,0x8234EF37,0x8234EF38,0x8234EF39,0x8234F030,
+ 0x8234F031,0x8234F032,0x8234F033,0x8234F034,0x8234F035,0x8234F036,
+ 0x8234F037,0x8234F038,0x8234F039,0x8234F130,0x8234F131,0x8234F132,
+ 0x8234F133,0x8234F134,0x8234F135,0x8234F136,0x8234F137,0x8234F138,
+ 0x8234F139,0x8234F230,0x8234F231,0x8234F232,0x8234F233,0x8234F234,
+ 0x8234F235,0x8234F236,0x8234F237,0x8234F238,0x8234F239,0x8234F330,
+ 0x8234F331,0x8234F332,0x8234F333,0x8234F334,0x8234F335,0x8234F336,
+ 0x8234F337,0x8234F338,0x8234F339,0x8234F430,0x8234F431,0x8234F432,
+ 0x8234F433,0x8234F434,0x8234F435,0x8234F436,0x8234F437,0x8234F438,
+ 0x8234F439,0x8234F530,0x8234F531,0x8234F532,0x8234F533,0x8234F534,
+ 0x8234F535,0x8234F536,0x8234F537,0x8234F538,0x8234F539,0x8234F630,
+ 0x8234F631,0x8234F632,0x8234F633, 0xFE98, 0xFE99, 0xFE9A,
+ 0xFE9B, 0xFE9C, 0xFE9D, 0xFE9E,0x8234F634,0x8234F635,
+ 0x8234F636,0x8234F637,0x8234F638,0x8234F639,0x8234F730,0x8234F731,
+ 0x8234F732,0x8234F733,0x8234F734,0x8234F735,0x8234F736,0x8234F737,
+ 0x8234F738,0x8234F739,0x8234F830,0x8234F831,0x8234F832,0x8234F833,
+ 0x8234F834,0x8234F835,0x8234F836,0x8234F837,0x8234F838,0x8234F839,
+ 0x8234F930,0x8234F931,0x8234F932,0x8234F933,0x8234F934,0x8234F935,
+ 0x8234F936,0x8234F937,0x8234F938,0x8234F939,0x8234FA30,0x8234FA31,
+ 0x8234FA32,0x8234FA33,0x8234FA34,0x8234FA35,0x8234FA36,0x8234FA37,
+ 0x8234FA38,0x8234FA39,0x8234FB30,0x8234FB31,0x8234FB32,0x8234FB33,
+ 0x8234FB34,0x8234FB35,0x8234FB36,0x8234FB37,0x8234FB38,0x8234FB39,
+ 0x8234FC30,0x8234FC31,0x8234FC32,0x8234FC33,0x8234FC34,0x8234FC35,
+ 0x8234FC36,0x8234FC37,0x8234FC38,0x8234FC39,0x8234FD30,0x8234FD31,
+ 0x8234FD32,0x8234FD33,0x8234FD34,0x8234FD35,0x8234FD36,0x8234FD37,
+ 0x8234FD38,0x8234FD39,0x8234FE30,0x8234FE31,0x8234FE32,0x8234FE33,
+ 0x8234FE34,0x8234FE35,0x8234FE36,0x8234FE37,0x8234FE38,0x8234FE39,
+ 0x82358130,0x82358131,0x82358132,0x82358133,0x82358134,0x82358135,
+ 0x82358136,0x82358137,0x82358138,0x82358139,0x82358230,0x82358231,
+ 0x82358232,0x82358233,0x82358234,0x82358235,0x82358236,0x82358237,
+ 0x82358238,0x82358239,0x82358330,0x82358331,0x82358332,0x82358333,
+ 0x82358334,0x82358335,0x82358336,0x82358337,0x82358338,0x82358339,
+ 0x82358430,0x82358431,0x82358432,0x82358433,0x82358434,0x82358435,
+ 0x82358436,0x82358437,0x82358438,0x82358439,0x82358530,0x82358531,
+ 0x82358532,0x82358533,0x82358534,0x82358535,0x82358536,0x82358537,
+ 0x82358538,0x82358539,0x82358630,0x82358631,0x82358632,0x82358633,
+ 0x82358634,0x82358635,0x82358636,0x82358637,0x82358638,0x82358639,
+ 0x82358730,0x82358731, 0xFE9F,0x82358732,0x82358733,0x82358734,
+ 0x82358735,0x82358736,0x82358737,0x82358738,0x82358739,0x82358830,
+ 0x82358831,0x82358832,0x82358833,0x82358834,0x82358835,0x82358836,
+ 0x82358837,0x82358838,0x82358839,0x82358930,0x82358931,0x82358932,
+ 0x82358933,0x82358934,0x82358935,0x82358936,0x82358937,0x82358938,
+ 0x82358939,0x82358A30,0x82358A31,0x82358A32,0x82358A33,0x82358A34,
+ 0x82358A35,0x82358A36,0x82358A37,0x82358A38,0x82358A39,0x82358B30,
+ 0x82358B31,0x82358B32,0x82358B33,0x82358B34,0x82358B35,0x82358B36,
+ 0x82358B37,0x82358B38,0x82358B39,0x82358C30,0x82358C31,0x82358C32,
+ 0x82358C33,0x82358C34,0x82358C35,0x82358C36,0x82358C37,0x82358C38,
+ 0x82358C39,0x82358D30,0x82358D31,0x82358D32,0x82358D33,0x82358D34,
+ 0x82358D35,0x82358D36,0x82358D37,0x82358D38,0x82358D39,0x82358E30,
+ 0x82358E31,0x82358E32,0x82358E33,0x82358E34,0x82358E35,0x82358E36,
+ 0x82358E37,0x82358E38,0x82358E39,0x82358F30,0x82358F31,0x82358F32,
+ 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, 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, 0xAAF4, 0xAAF5, 0xAAF6,
+ 0xAAF7, 0xAAF8, 0xAAF9, 0xAAFA, 0xAAFB, 0xAAFC,
+ 0xAAFD, 0xAAFE, 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, 0xABF7, 0xABF8,
+ 0xABF9, 0xABFA, 0xABFB, 0xABFC, 0xABFD, 0xABFE,
+ 0xACA1, 0xACA2, 0xACA3, 0xACA4, 0xACA5, 0xACA6,
+ 0xACA7, 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, 0xACC2, 0xACC3, 0xACC4,
+ 0xACC5, 0xACC6, 0xACC7, 0xACC8, 0xACC9, 0xACCA,
+ 0xACCB, 0xACCC, 0xACCD, 0xACCE, 0xACCF, 0xACD0,
+ 0xACD1, 0xACD2, 0xACD3, 0xACD4, 0xACD5, 0xACD6,
+ 0xACD7, 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, 0xACF2, 0xACF3, 0xACF4,
+ 0xACF5, 0xACF6, 0xACF7, 0xACF8, 0xACF9, 0xACFA,
+ 0xACFB, 0xACFC, 0xACFD, 0xACFE, 0xADA1, 0xADA2,
+ 0xADA3, 0xADA4, 0xADA5, 0xADA6, 0xADA7, 0xADA8,
+ 0xADA9, 0xADAA, 0xADAB, 0xADAC, 0xADAD, 0xADAE,
+ 0xADAF, 0xADB0, 0xADB1, 0xADB2, 0xADB3, 0xADB4,
+ 0xADB5, 0xADB6, 0xADB7, 0xADB8, 0xADB9, 0xADBA,
+ 0xADBB, 0xADBC, 0xADBD, 0xADBE, 0xADBF, 0xADC0,
+ 0xADC1, 0xADC2, 0xADC3, 0xADC4, 0xADC5, 0xADC6,
+ 0xADC7, 0xADC8, 0xADC9, 0xADCA, 0xADCB, 0xADCC,
+ 0xADCD, 0xADCE, 0xADCF, 0xADD0, 0xADD1, 0xADD2,
+ 0xADD3, 0xADD4, 0xADD5, 0xADD6, 0xADD7, 0xADD8,
+ 0xADD9, 0xADDA, 0xADDB, 0xADDC, 0xADDD, 0xADDE,
+ 0xADDF, 0xADE0, 0xADE1, 0xADE2, 0xADE3, 0xADE4,
+ 0xADE5, 0xADE6, 0xADE7, 0xADE8, 0xADE9, 0xADEA,
+ 0xADEB, 0xADEC, 0xADED, 0xADEE, 0xADEF, 0xADF0,
+ 0xADF1, 0xADF2, 0xADF3, 0xADF4, 0xADF5, 0xADF6,
+ 0xADF7, 0xADF8, 0xADF9, 0xADFA, 0xADFB, 0xADFC,
+ 0xADFD, 0xADFE, 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, 0xAEBC,
+ 0xAEBD, 0xAEBE, 0xAEBF, 0xAEC0, 0xAEC1, 0xAEC2,
+ 0xAEC3, 0xAEC4, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8,
+ 0xAEC9, 0xAECA, 0xAECB, 0xAECC, 0xAECD, 0xAECE,
+ 0xAECF, 0xAED0, 0xAED1, 0xAED2, 0xAED3, 0xAED4,
+ 0xAED5, 0xAED6, 0xAED7, 0xAED8, 0xAED9, 0xAEDA,
+ 0xAEDB, 0xAEDC, 0xAEDD, 0xAEDE, 0xAEDF, 0xAEE0,
+ 0xAEE1, 0xAEE2, 0xAEE3, 0xAEE4, 0xAEE5, 0xAEE6,
+ 0xAEE7, 0xAEE8, 0xAEE9, 0xAEEA, 0xAEEB, 0xAEEC,
+ 0xAEED, 0xAEEE, 0xAEEF, 0xAEF0, 0xAEF1, 0xAEF2,
+ 0xAEF3, 0xAEF4, 0xAEF5, 0xAEF6, 0xAEF7, 0xAEF8,
+ 0xAEF9, 0xAEFA, 0xAEFB, 0xAEFC, 0xAEFD, 0xAEFE,
+ 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, 0xAFA5, 0xAFA6,
+ 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC,
+ 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1, 0xAFB2,
+ 0xAFB3, 0xAFB4, 0xAFB5, 0xAFB6, 0xAFB7, 0xAFB8,
+ 0xAFB9, 0xAFBA, 0xAFBB, 0xAFBC, 0xAFBD, 0xAFBE,
+ 0xAFBF, 0xAFC0, 0xAFC1, 0xAFC2, 0xAFC3, 0xAFC4,
+ 0xAFC5, 0xAFC6, 0xAFC7, 0xAFC8, 0xAFC9, 0xAFCA,
+ 0xAFCB, 0xAFCC, 0xAFCD, 0xAFCE, 0xAFCF, 0xAFD0,
+ 0xAFD1, 0xAFD2, 0xAFD3, 0xAFD4, 0xAFD5, 0xAFD6,
+ 0xAFD7, 0xAFD8, 0xAFD9, 0xAFDA, 0xAFDB, 0xAFDC,
+ 0xAFDD, 0xAFDE, 0xAFDF, 0xAFE0, 0xAFE1, 0xAFE2,
+ 0xAFE3, 0xAFE4, 0xAFE5, 0xAFE6, 0xAFE7, 0xAFE8,
+ 0xAFE9, 0xAFEA, 0xAFEB, 0xAFEC, 0xAFED, 0xAFEE,
+ 0xAFEF, 0xAFF0, 0xAFF1, 0xAFF2, 0xAFF3, 0xAFF4,
+ 0xAFF5, 0xAFF6, 0xAFF7, 0xAFF8, 0xAFF9, 0xAFFA,
+ 0xAFFB, 0xAFFC, 0xAFFD, 0xAFFE, 0xF8A1, 0xF8A2,
+ 0xF8A3, 0xF8A4, 0xF8A5, 0xF8A6, 0xF8A7, 0xF8A8,
+ 0xF8A9, 0xF8AA, 0xF8AB, 0xF8AC, 0xF8AD, 0xF8AE,
+ 0xF8AF, 0xF8B0, 0xF8B1, 0xF8B2, 0xF8B3, 0xF8B4,
+ 0xF8B5, 0xF8B6, 0xF8B7, 0xF8B8, 0xF8B9, 0xF8BA,
+ 0xF8BB, 0xF8BC, 0xF8BD, 0xF8BE, 0xF8BF, 0xF8C0,
+ 0xF8C1, 0xF8C2, 0xF8C3, 0xF8C4, 0xF8C5, 0xF8C6,
+ 0xF8C7, 0xF8C8, 0xF8C9, 0xF8CA, 0xF8CB, 0xF8CC,
+ 0xF8CD, 0xF8CE, 0xF8CF, 0xF8D0, 0xF8D1, 0xF8D2,
+ 0xF8D3, 0xF8D4, 0xF8D5, 0xF8D6, 0xF8D7, 0xF8D8,
+ 0xF8D9, 0xF8DA, 0xF8DB, 0xF8DC, 0xF8DD, 0xF8DE,
+ 0xF8DF, 0xF8E0, 0xF8E1, 0xF8E2, 0xF8E3, 0xF8E4,
+ 0xF8E5, 0xF8E6, 0xF8E7, 0xF8E8, 0xF8E9, 0xF8EA,
+ 0xF8EB, 0xF8EC, 0xF8ED, 0xF8EE, 0xF8EF, 0xF8F0,
+ 0xF8F1, 0xF8F2, 0xF8F3, 0xF8F4, 0xF8F5, 0xF8F6,
+ 0xF8F7, 0xF8F8, 0xF8F9, 0xF8FA, 0xF8FB, 0xF8FC,
+ 0xF8FD, 0xF8FE, 0xF9A1, 0xF9A2, 0xF9A3, 0xF9A4,
+ 0xF9A5, 0xF9A6, 0xF9A7, 0xF9A8, 0xF9A9, 0xF9AA,
+ 0xF9AB, 0xF9AC, 0xF9AD, 0xF9AE, 0xF9AF, 0xF9B0,
+ 0xF9B1, 0xF9B2, 0xF9B3, 0xF9B4, 0xF9B5, 0xF9B6,
+ 0xF9B7, 0xF9B8, 0xF9B9, 0xF9BA, 0xF9BB, 0xF9BC,
+ 0xF9BD, 0xF9BE, 0xF9BF, 0xF9C0, 0xF9C1, 0xF9C2,
+ 0xF9C3, 0xF9C4, 0xF9C5, 0xF9C6, 0xF9C7, 0xF9C8,
+ 0xF9C9, 0xF9CA, 0xF9CB, 0xF9CC, 0xF9CD, 0xF9CE,
+ 0xF9CF, 0xF9D0, 0xF9D1, 0xF9D2, 0xF9D3, 0xF9D4,
+ 0xF9D5, 0xF9D6, 0xF9D7, 0xF9D8, 0xF9D9, 0xF9DA,
+ 0xF9DB, 0xF9DC, 0xF9DD, 0xF9DE, 0xF9DF, 0xF9E0,
+ 0xF9E1, 0xF9E2, 0xF9E3, 0xF9E4, 0xF9E5, 0xF9E6,
+ 0xF9E7, 0xF9E8, 0xF9E9, 0xF9EA, 0xF9EB, 0xF9EC,
+ 0xF9ED, 0xF9EE, 0xF9EF, 0xF9F0, 0xF9F1, 0xF9F2,
+ 0xF9F3, 0xF9F4, 0xF9F5, 0xF9F6, 0xF9F7, 0xF9F8,
+ 0xF9F9, 0xF9FA, 0xF9FB, 0xF9FC, 0xF9FD, 0xF9FE,
+ 0xFAA1, 0xFAA2, 0xFAA3, 0xFAA4, 0xFAA5, 0xFAA6,
+ 0xFAA7, 0xFAA8, 0xFAA9, 0xFAAA, 0xFAAB, 0xFAAC,
+ 0xFAAD, 0xFAAE, 0xFAAF, 0xFAB0, 0xFAB1, 0xFAB2,
+ 0xFAB3, 0xFAB4, 0xFAB5, 0xFAB6, 0xFAB7, 0xFAB8,
+ 0xFAB9, 0xFABA, 0xFABB, 0xFABC, 0xFABD, 0xFABE,
+ 0xFABF, 0xFAC0, 0xFAC1, 0xFAC2, 0xFAC3, 0xFAC4,
+ 0xFAC5, 0xFAC6, 0xFAC7, 0xFAC8, 0xFAC9, 0xFACA,
+ 0xFACB, 0xFACC, 0xFACD, 0xFACE, 0xFACF, 0xFAD0,
+ 0xFAD1, 0xFAD2, 0xFAD3, 0xFAD4, 0xFAD5, 0xFAD6,
+ 0xFAD7, 0xFAD8, 0xFAD9, 0xFADA, 0xFADB, 0xFADC,
+ 0xFADD, 0xFADE, 0xFADF, 0xFAE0, 0xFAE1, 0xFAE2,
+ 0xFAE3, 0xFAE4, 0xFAE5, 0xFAE6, 0xFAE7, 0xFAE8,
+ 0xFAE9, 0xFAEA, 0xFAEB, 0xFAEC, 0xFAED, 0xFAEE,
+ 0xFAEF, 0xFAF0, 0xFAF1, 0xFAF2, 0xFAF3, 0xFAF4,
+ 0xFAF5, 0xFAF6, 0xFAF7, 0xFAF8, 0xFAF9, 0xFAFA,
+ 0xFAFB, 0xFAFC, 0xFAFD, 0xFAFE, 0xFBA1, 0xFBA2,
+ 0xFBA3, 0xFBA4, 0xFBA5, 0xFBA6, 0xFBA7, 0xFBA8,
+ 0xFBA9, 0xFBAA, 0xFBAB, 0xFBAC, 0xFBAD, 0xFBAE,
+ 0xFBAF, 0xFBB0, 0xFBB1, 0xFBB2, 0xFBB3, 0xFBB4,
+ 0xFBB5, 0xFBB6, 0xFBB7, 0xFBB8, 0xFBB9, 0xFBBA,
+ 0xFBBB, 0xFBBC, 0xFBBD, 0xFBBE, 0xFBBF, 0xFBC0,
+ 0xFBC1, 0xFBC2, 0xFBC3, 0xFBC4, 0xFBC5, 0xFBC6,
+ 0xFBC7, 0xFBC8, 0xFBC9, 0xFBCA, 0xFBCB, 0xFBCC,
+ 0xFBCD, 0xFBCE, 0xFBCF, 0xFBD0, 0xFBD1, 0xFBD2,
+ 0xFBD3, 0xFBD4, 0xFBD5, 0xFBD6, 0xFBD7, 0xFBD8,
+ 0xFBD9, 0xFBDA, 0xFBDB, 0xFBDC, 0xFBDD, 0xFBDE,
+ 0xFBDF, 0xFBE0, 0xFBE1, 0xFBE2, 0xFBE3, 0xFBE4,
+ 0xFBE5, 0xFBE6, 0xFBE7, 0xFBE8, 0xFBE9, 0xFBEA,
+ 0xFBEB, 0xFBEC, 0xFBED, 0xFBEE, 0xFBEF, 0xFBF0,
+ 0xFBF1, 0xFBF2, 0xFBF3, 0xFBF4, 0xFBF5, 0xFBF6,
+ 0xFBF7, 0xFBF8, 0xFBF9, 0xFBFA, 0xFBFB, 0xFBFC,
+ 0xFBFD, 0xFBFE, 0xFCA1, 0xFCA2, 0xFCA3, 0xFCA4,
+ 0xFCA5, 0xFCA6, 0xFCA7, 0xFCA8, 0xFCA9, 0xFCAA,
+ 0xFCAB, 0xFCAC, 0xFCAD, 0xFCAE, 0xFCAF, 0xFCB0,
+ 0xFCB1, 0xFCB2, 0xFCB3, 0xFCB4, 0xFCB5, 0xFCB6,
+ 0xFCB7, 0xFCB8, 0xFCB9, 0xFCBA, 0xFCBB, 0xFCBC,
+ 0xFCBD, 0xFCBE, 0xFCBF, 0xFCC0, 0xFCC1, 0xFCC2,
+ 0xFCC3, 0xFCC4, 0xFCC5, 0xFCC6, 0xFCC7, 0xFCC8,
+ 0xFCC9, 0xFCCA, 0xFCCB, 0xFCCC, 0xFCCD, 0xFCCE,
+ 0xFCCF, 0xFCD0, 0xFCD1, 0xFCD2, 0xFCD3, 0xFCD4,
+ 0xFCD5, 0xFCD6, 0xFCD7, 0xFCD8, 0xFCD9, 0xFCDA,
+ 0xFCDB, 0xFCDC, 0xFCDD, 0xFCDE, 0xFCDF, 0xFCE0,
+ 0xFCE1, 0xFCE2, 0xFCE3, 0xFCE4, 0xFCE5, 0xFCE6,
+ 0xFCE7, 0xFCE8, 0xFCE9, 0xFCEA, 0xFCEB, 0xFCEC,
+ 0xFCED, 0xFCEE, 0xFCEF, 0xFCF0, 0xFCF1, 0xFCF2,
+ 0xFCF3, 0xFCF4, 0xFCF5, 0xFCF6, 0xFCF7, 0xFCF8,
+ 0xFCF9, 0xFCFA, 0xFCFB, 0xFCFC, 0xFCFD, 0xFCFE,
+ 0xFDA1, 0xFDA2, 0xFDA3, 0xFDA4, 0xFDA5, 0xFDA6,
+ 0xFDA7, 0xFDA8, 0xFDA9, 0xFDAA, 0xFDAB, 0xFDAC,
+ 0xFDAD, 0xFDAE, 0xFDAF, 0xFDB0, 0xFDB1, 0xFDB2,
+ 0xFDB3, 0xFDB4, 0xFDB5, 0xFDB6, 0xFDB7, 0xFDB8,
+ 0xFDB9, 0xFDBA, 0xFDBB, 0xFDBC, 0xFDBD, 0xFDBE,
+ 0xFDBF, 0xFDC0, 0xFDC1, 0xFDC2, 0xFDC3, 0xFDC4,
+ 0xFDC5, 0xFDC6, 0xFDC7, 0xFDC8, 0xFDC9, 0xFDCA,
+ 0xFDCB, 0xFDCC, 0xFDCD, 0xFDCE, 0xFDCF, 0xFDD0,
+ 0xFDD1, 0xFDD2, 0xFDD3, 0xFDD4, 0xFDD5, 0xFDD6,
+ 0xFDD7, 0xFDD8, 0xFDD9, 0xFDDA, 0xFDDB, 0xFDDC,
+ 0xFDDD, 0xFDDE, 0xFDDF, 0xFDE0, 0xFDE1, 0xFDE2,
+ 0xFDE3, 0xFDE4, 0xFDE5, 0xFDE6, 0xFDE7, 0xFDE8,
+ 0xFDE9, 0xFDEA, 0xFDEB, 0xFDEC, 0xFDED, 0xFDEE,
+ 0xFDEF, 0xFDF0, 0xFDF1, 0xFDF2, 0xFDF3, 0xFDF4,
+ 0xFDF5, 0xFDF6, 0xFDF7, 0xFDF8, 0xFDF9, 0xFDFA,
+ 0xFDFB, 0xFDFC, 0xFDFD, 0xFDFE, 0xFEA1, 0xFEA2,
+ 0xFEA3, 0xFEA4, 0xFEA5, 0xFEA6, 0xFEA7, 0xFEA8,
+ 0xFEA9, 0xFEAA, 0xFEAB, 0xFEAC, 0xFEAD, 0xFEAE,
+ 0xFEAF, 0xFEB0, 0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4,
+ 0xFEB5, 0xFEB6, 0xFEB7, 0xFEB8, 0xFEB9, 0xFEBA,
+ 0xFEBB, 0xFEBC, 0xFEBD, 0xFEBE, 0xFEBF, 0xFEC0,
+ 0xFEC1, 0xFEC2, 0xFEC3, 0xFEC4, 0xFEC5, 0xFEC6,
+ 0xFEC7, 0xFEC8, 0xFEC9, 0xFECA, 0xFECB, 0xFECC,
+ 0xFECD, 0xFECE, 0xFECF, 0xFED0, 0xFED1, 0xFED2,
+ 0xFED3, 0xFED4, 0xFED5, 0xFED6, 0xFED7, 0xFED8,
+ 0xFED9, 0xFEDA, 0xFEDB, 0xFEDC, 0xFEDD, 0xFEDE,
+ 0xFEDF, 0xFEE0, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4,
+ 0xFEE5, 0xFEE6, 0xFEE7, 0xFEE8, 0xFEE9, 0xFEEA,
+ 0xFEEB, 0xFEEC, 0xFEED, 0xFEEE, 0xFEEF, 0xFEF0,
+ 0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4, 0xFEF5, 0xFEF6,
+ 0xFEF7, 0xFEF8, 0xFEF9, 0xFEFA, 0xFEFB, 0xFEFC,
+ 0xFEFD, 0xFEFE, 0xA140, 0xA141, 0xA142, 0xA143,
+ 0xA144, 0xA145, 0xA146, 0xA147, 0xA148, 0xA149,
+ 0xA14A, 0xA14B, 0xA14C, 0xA14D, 0xA14E, 0xA14F,
+ 0xA150, 0xA151, 0xA152, 0xA153, 0xA154, 0xA155,
+ 0xA156, 0xA157, 0xA158, 0xA159, 0xA15A, 0xA15B,
+ 0xA15C, 0xA15D, 0xA15E, 0xA15F, 0xA160, 0xA161,
+ 0xA162, 0xA163, 0xA164, 0xA165, 0xA166, 0xA167,
+ 0xA168, 0xA169, 0xA16A, 0xA16B, 0xA16C, 0xA16D,
+ 0xA16E, 0xA16F, 0xA170, 0xA171, 0xA172, 0xA173,
+ 0xA174, 0xA175, 0xA176, 0xA177, 0xA178, 0xA179,
+ 0xA17A, 0xA17B, 0xA17C, 0xA17D, 0xA17E, 0xA180,
+ 0xA181, 0xA182, 0xA183, 0xA184, 0xA185, 0xA186,
+ 0xA187, 0xA188, 0xA189, 0xA18A, 0xA18B, 0xA18C,
+ 0xA18D, 0xA18E, 0xA18F, 0xA190, 0xA191, 0xA192,
+ 0xA193, 0xA194, 0xA195, 0xA196, 0xA197, 0xA198,
+ 0xA199, 0xA19A, 0xA19B, 0xA19C, 0xA19D, 0xA19E,
+ 0xA19F, 0xA1A0, 0xA240, 0xA241, 0xA242, 0xA243,
+ 0xA244, 0xA245, 0xA246, 0xA247, 0xA248, 0xA249,
+ 0xA24A, 0xA24B, 0xA24C, 0xA24D, 0xA24E, 0xA24F,
+ 0xA250, 0xA251, 0xA252, 0xA253, 0xA254, 0xA255,
+ 0xA256, 0xA257, 0xA258, 0xA259, 0xA25A, 0xA25B,
+ 0xA25C, 0xA25D, 0xA25E, 0xA25F, 0xA260, 0xA261,
+ 0xA262, 0xA263, 0xA264, 0xA265, 0xA266, 0xA267,
+ 0xA268, 0xA269, 0xA26A, 0xA26B, 0xA26C, 0xA26D,
+ 0xA26E, 0xA26F, 0xA270, 0xA271, 0xA272, 0xA273,
+ 0xA274, 0xA275, 0xA276, 0xA277, 0xA278, 0xA279,
+ 0xA27A, 0xA27B, 0xA27C, 0xA27D, 0xA27E, 0xA280,
+ 0xA281, 0xA282, 0xA283, 0xA284, 0xA285, 0xA286,
+ 0xA287, 0xA288, 0xA289, 0xA28A, 0xA28B, 0xA28C,
+ 0xA28D, 0xA28E, 0xA28F, 0xA290, 0xA291, 0xA292,
+ 0xA293, 0xA294, 0xA295, 0xA296, 0xA297, 0xA298,
+ 0xA299, 0xA29A, 0xA29B, 0xA29C, 0xA29D, 0xA29E,
+ 0xA29F, 0xA2A0, 0xA340, 0xA341, 0xA342, 0xA343,
+ 0xA344, 0xA345, 0xA346, 0xA347, 0xA348, 0xA349,
+ 0xA34A, 0xA34B, 0xA34C, 0xA34D, 0xA34E, 0xA34F,
+ 0xA350, 0xA351, 0xA352, 0xA353, 0xA354, 0xA355,
+ 0xA356, 0xA357, 0xA358, 0xA359, 0xA35A, 0xA35B,
+ 0xA35C, 0xA35D, 0xA35E, 0xA35F, 0xA360, 0xA361,
+ 0xA362, 0xA363, 0xA364, 0xA365, 0xA366, 0xA367,
+ 0xA368, 0xA369, 0xA36A, 0xA36B, 0xA36C, 0xA36D,
+ 0xA36E, 0xA36F, 0xA370, 0xA371, 0xA372, 0xA373,
+ 0xA374, 0xA375, 0xA376, 0xA377, 0xA378, 0xA379,
+ 0xA37A, 0xA37B, 0xA37C, 0xA37D, 0xA37E, 0xA380,
+ 0xA381, 0xA382, 0xA383, 0xA384, 0xA385, 0xA386,
+ 0xA387, 0xA388, 0xA389, 0xA38A, 0xA38B, 0xA38C,
+ 0xA38D, 0xA38E, 0xA38F, 0xA390, 0xA391, 0xA392,
+ 0xA393, 0xA394, 0xA395, 0xA396, 0xA397, 0xA398,
+ 0xA399, 0xA39A, 0xA39B, 0xA39C, 0xA39D, 0xA39E,
+ 0xA39F, 0xA3A0, 0xA440, 0xA441, 0xA442, 0xA443,
+ 0xA444, 0xA445, 0xA446, 0xA447, 0xA448, 0xA449,
+ 0xA44A, 0xA44B, 0xA44C, 0xA44D, 0xA44E, 0xA44F,
+ 0xA450, 0xA451, 0xA452, 0xA453, 0xA454, 0xA455,
+ 0xA456, 0xA457, 0xA458, 0xA459, 0xA45A, 0xA45B,
+ 0xA45C, 0xA45D, 0xA45E, 0xA45F, 0xA460, 0xA461,
+ 0xA462, 0xA463, 0xA464, 0xA465, 0xA466, 0xA467,
+ 0xA468, 0xA469, 0xA46A, 0xA46B, 0xA46C, 0xA46D,
+ 0xA46E, 0xA46F, 0xA470, 0xA471, 0xA472, 0xA473,
+ 0xA474, 0xA475, 0xA476, 0xA477, 0xA478, 0xA479,
+ 0xA47A, 0xA47B, 0xA47C, 0xA47D, 0xA47E, 0xA480,
+ 0xA481, 0xA482, 0xA483, 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, 0xA540, 0xA541, 0xA542, 0xA543,
+ 0xA544, 0xA545, 0xA546, 0xA547, 0xA548, 0xA549,
+ 0xA54A, 0xA54B, 0xA54C, 0xA54D, 0xA54E, 0xA54F,
+ 0xA550, 0xA551, 0xA552, 0xA553, 0xA554, 0xA555,
+ 0xA556, 0xA557, 0xA558, 0xA559, 0xA55A, 0xA55B,
+ 0xA55C, 0xA55D, 0xA55E, 0xA55F, 0xA560, 0xA561,
+ 0xA562, 0xA563, 0xA564, 0xA565, 0xA566, 0xA567,
+ 0xA568, 0xA569, 0xA56A, 0xA56B, 0xA56C, 0xA56D,
+ 0xA56E, 0xA56F, 0xA570, 0xA571, 0xA572, 0xA573,
+ 0xA574, 0xA575, 0xA576, 0xA577, 0xA578, 0xA579,
+ 0xA57A, 0xA57B, 0xA57C, 0xA57D, 0xA57E, 0xA580,
+ 0xA581, 0xA582, 0xA583, 0xA584, 0xA585, 0xA586,
+ 0xA587, 0xA588, 0xA589, 0xA58A, 0xA58B, 0xA58C,
+ 0xA58D, 0xA58E, 0xA58F, 0xA590, 0xA591, 0xA592,
+ 0xA593, 0xA594, 0xA595, 0xA596, 0xA597, 0xA598,
+ 0xA599, 0xA59A, 0xA59B, 0xA59C, 0xA59D, 0xA59E,
+ 0xA59F, 0xA5A0, 0xA640, 0xA641, 0xA642, 0xA643,
+ 0xA644, 0xA645, 0xA646, 0xA647, 0xA648, 0xA649,
+ 0xA64A, 0xA64B, 0xA64C, 0xA64D, 0xA64E, 0xA64F,
+ 0xA650, 0xA651, 0xA652, 0xA653, 0xA654, 0xA655,
+ 0xA656, 0xA657, 0xA658, 0xA659, 0xA65A, 0xA65B,
+ 0xA65C, 0xA65D, 0xA65E, 0xA65F, 0xA660, 0xA661,
+ 0xA662, 0xA663, 0xA664, 0xA665, 0xA666, 0xA667,
+ 0xA668, 0xA669, 0xA66A, 0xA66B, 0xA66C, 0xA66D,
+ 0xA66E, 0xA66F, 0xA670, 0xA671, 0xA672, 0xA673,
+ 0xA674, 0xA675, 0xA676, 0xA677, 0xA678, 0xA679,
+ 0xA67A, 0xA67B, 0xA67C, 0xA67D, 0xA67E, 0xA680,
+ 0xA681, 0xA682, 0xA683, 0xA684, 0xA685, 0xA686,
+ 0xA687, 0xA688, 0xA689, 0xA68A, 0xA68B, 0xA68C,
+ 0xA68D, 0xA68E, 0xA68F, 0xA690, 0xA691, 0xA692,
+ 0xA693, 0xA694, 0xA695, 0xA696, 0xA697, 0xA698,
+ 0xA699, 0xA69A, 0xA69B, 0xA69C, 0xA69D, 0xA69E,
+ 0xA69F, 0xA6A0, 0xA740, 0xA741, 0xA742, 0xA743,
+ 0xA744, 0xA745, 0xA746, 0xA747, 0xA748, 0xA749,
+ 0xA74A, 0xA74B, 0xA74C, 0xA74D, 0xA74E, 0xA74F,
+ 0xA750, 0xA751, 0xA752, 0xA753, 0xA754, 0xA755,
+ 0xA756, 0xA757, 0xA758, 0xA759, 0xA75A, 0xA75B,
+ 0xA75C, 0xA75D, 0xA75E, 0xA75F, 0xA760, 0xA761,
+ 0xA762, 0xA763, 0xA764, 0xA765, 0xA766, 0xA767,
+ 0xA768, 0xA769, 0xA76A, 0xA76B, 0xA76C, 0xA76D,
+ 0xA76E, 0xA76F, 0xA770, 0xA771, 0xA772, 0xA773,
+ 0xA774, 0xA775, 0xA776, 0xA777, 0xA778, 0xA779,
+ 0xA77A, 0xA77B, 0xA77C, 0xA77D, 0xA77E, 0xA780,
+ 0xA781, 0xA782, 0xA783, 0xA784, 0xA785, 0xA786,
+ 0xA787, 0xA788, 0xA789, 0xA78A, 0xA78B, 0xA78C,
+ 0xA78D, 0xA78E, 0xA78F, 0xA790, 0xA791, 0xA792,
+ 0xA793, 0xA794, 0xA795, 0xA796, 0xA797, 0xA798,
+ 0xA799, 0xA79A, 0xA79B, 0xA79C, 0xA79D, 0xA79E,
+ 0xA79F, 0xA7A0, 0xA2AB, 0xA2AC, 0xA2AD, 0xA2AE,
+ 0xA2AF, 0xA2B0,0x8336C739, 0xA2E4, 0xA2EF, 0xA2F0,
+ 0xA2FD, 0xA2FE, 0xA4F4, 0xA4F5, 0xA4F6, 0xA4F7,
+ 0xA4F8, 0xA4F9, 0xA4FA, 0xA4FB, 0xA4FC, 0xA4FD,
+ 0xA4FE, 0xA5F7, 0xA5F8, 0xA5F9, 0xA5FA, 0xA5FB,
+ 0xA5FC, 0xA5FD, 0xA5FE, 0xA6B9, 0xA6BA, 0xA6BB,
+ 0xA6BC, 0xA6BD, 0xA6BE, 0xA6BF, 0xA6C0, 0xA6D9,
+ 0xA6DA, 0xA6DB, 0xA6DC, 0xA6DD, 0xA6DE, 0xA6DF,
+ 0xA6EC, 0xA6ED, 0xA6F3, 0xA6F6, 0xA6F7, 0xA6F8,
+ 0xA6F9, 0xA6FA, 0xA6FB, 0xA6FC, 0xA6FD, 0xA6FE,
+ 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C5, 0xA7C6, 0xA7C7,
+ 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, 0xA7CC, 0xA7CD,
+ 0xA7CE, 0xA7CF, 0xA7D0, 0xA7F2, 0xA7F3, 0xA7F4,
+ 0xA7F5, 0xA7F6, 0xA7F7, 0xA7F8, 0xA7F9, 0xA7FA,
+ 0xA7FB, 0xA7FC, 0xA7FD, 0xA7FE, 0xA896, 0xA897,
+ 0xA898, 0xA899, 0xA89A, 0xA89B, 0xA89C, 0xA89D,
+ 0xA89E, 0xA89F, 0xA8A0, 0xA8BC,0x8336C830, 0xA8C1,
+ 0xA8C2, 0xA8C3, 0xA8C4, 0xA8EA, 0xA8EB, 0xA8EC,
+ 0xA8ED, 0xA8EE, 0xA8EF, 0xA8F0, 0xA8F1, 0xA8F2,
+ 0xA8F3, 0xA8F4, 0xA8F5, 0xA8F6, 0xA8F7, 0xA8F8,
+ 0xA8F9, 0xA8FA, 0xA8FB, 0xA8FC, 0xA8FD, 0xA8FE,
+ 0xA958, 0xA95B, 0xA95D, 0xA95E, 0xA95F,0x8336C831,
+ 0x8336C832,0x8336C833,0x8336C834,0x8336C835,0x8336C836,0x8336C837,
+ 0x8336C838,0x8336C839,0x8336C930,0x8336C931,0x8336C932,0x8336C933,
+ 0xA997, 0xA998, 0xA999, 0xA99A, 0xA99B, 0xA99C,
+ 0xA99D, 0xA99E, 0xA99F, 0xA9A0, 0xA9A1, 0xA9A2,
+ 0xA9A3, 0xA9F0, 0xA9F1, 0xA9F2, 0xA9F3, 0xA9F4,
+ 0xA9F5, 0xA9F6, 0xA9F7, 0xA9F8, 0xA9F9, 0xA9FA,
+ 0xA9FB, 0xA9FC, 0xA9FD, 0xA9FE, 0xD7FA, 0xD7FB,
+ 0xD7FC, 0xD7FD, 0xD7FE,0x8336C934, 0xFE51, 0xFE52,
+ 0xFE53,0x8336C935,0x8336C936,0x8336C937,0x8336C938,0x8336C939,
+ 0xFE59,0x8336CA30,0x8336CA31,0x8336CA32,0x8336CA33,0x8336CA34,
+ 0x8336CA35,0x8336CA36, 0xFE61,0x8336CA37,0x8336CA38,0x8336CA39,
+ 0x8336CB30, 0xFE66, 0xFE67,0x8336CB31,0x8336CB32,0x8336CB33,
+ 0x8336CB34, 0xFE6C, 0xFE6D,0x8336CB35,0x8336CB36,0x8336CB37,
+ 0x8336CB38,0x8336CB39,0x8336CC30,0x8336CC31,0x8336CC32, 0xFE76,
+ 0x8336CC33,0x8336CC34,0x8336CC35,0x8336CC36,0x8336CC37,0x8336CC38,
+ 0x8336CC39, 0xFE7E,0x8336CD30,0x8336CD31,0x8336CD32,0x8336CD33,
+ 0x8336CD34,0x8336CD35,0x8336CD36,0x8336CD37,0x8336CD38,0x8336CD39,
+ 0x8336CE30,0x8336CE31,0x8336CE32,0x8336CE33,0x8336CE34,0x8336CE35,
+ 0xFE90, 0xFE91,0x8336CE36,0x8336CE37,0x8336CE38,0x8336CE39,
+ 0x8336CF30,0x8336CF31,0x8336CF32,0x8336CF33,0x8336CF34,0x8336CF35,
+ 0x8336CF36,0x8336CF37,0x8336CF38,0x8336CF39, 0xFEA0, 0xFD9C,
+ 0x84308535,0x84308536,0x84308537,0x84308538,0x84308539,0x84308630,
+ 0x84308631,0x84308632,0x84308633,0x84308634,0x84308635,0x84308636,
+ 0x84308637,0x84308638,0x84308639,0x84308730,0x84308731,0x84308732,
+ 0x84308733,0x84308734,0x84308735,0x84308736,0x84308737,0x84308738,
+ 0x84308739,0x84308830,0x84308831,0x84308832,0x84308833,0x84308834,
+ 0x84308835,0x84308836,0x84308837,0x84308838,0x84308839,0x84308930,
+ 0x84308931,0x84308932,0x84308933,0x84308934,0x84308935,0x84308936,
+ 0x84308937,0x84308938,0x84308939,0x84308A30,0x84308A31,0x84308A32,
+ 0x84308A33,0x84308A34,0x84308A35,0x84308A36,0x84308A37,0x84308A38,
+ 0x84308A39,0x84308B30,0x84308B31,0x84308B32,0x84308B33,0x84308B34,
+ 0x84308B35,0x84308B36,0x84308B37,0x84308B38,0x84308B39,0x84308C30,
+ 0x84308C31,0x84308C32,0x84308C33,0x84308C34,0x84308C35,0x84308C36,
+ 0x84308C37,0x84308C38,0x84308C39,0x84308D30, 0xFD9D,0x84308D31,
+ 0x84308D32,0x84308D33,0x84308D34,0x84308D35,0x84308D36,0x84308D37,
+ 0x84308D38,0x84308D39,0x84308E30,0x84308E31,0x84308E32,0x84308E33,
+ 0x84308E34,0x84308E35,0x84308E36,0x84308E37,0x84308E38,0x84308E39,
+ 0x84308F30,0x84308F31,0x84308F32,0x84308F33,0x84308F34,0x84308F35,
+ 0x84308F36,0x84308F37, 0xFD9E,0x84308F38,0x84308F39,0x84309030,
+ 0x84309031,0x84309032,0x84309033,0x84309034,0x84309035,0x84309036,
+ 0x84309037,0x84309038,0x84309039,0x84309130,0x84309131,0x84309132,
+ 0x84309133,0x84309134,0x84309135,0x84309136,0x84309137,0x84309138,
+ 0x84309139,0x84309230,0x84309231,0x84309232,0x84309233,0x84309234,
+ 0x84309235,0x84309236,0x84309237,0x84309238,0x84309239,0x84309330,
+ 0x84309331,0x84309332,0x84309333,0x84309334,0x84309335,0x84309336,
+ 0x84309337,0x84309338,0x84309339,0x84309430,0x84309431,0x84309432,
+ 0x84309433,0x84309434,0x84309435,0x84309436,0x84309437,0x84309438,
+ 0x84309439,0x84309530,0x84309531,0x84309532,0x84309533,0x84309534,
+ 0x84309535,0x84309536,0x84309537,0x84309538,0x84309539,0x84309630,
+ 0x84309631,0x84309632,0x84309633,0x84309634,0x84309635,0x84309636,
+ 0x84309637,0x84309638,0x84309639,0x84309730,0x84309731,0x84309732,
+ 0x84309733,0x84309734,0x84309735,0x84309736,0x84309737,0x84309738,
+ 0xFD9F,0x84309739,0x84309830,0x84309831,0x84309832,0x84309833,
+ 0x84309834,0x84309835,0x84309836,0x84309837, 0xFDA0,0x84309838,
+ 0x84309839,0x84309930,0x84309931,0x84309932,0x84309933,0x84309934,
+ 0x84309935,0x84309936,0x84309937,0x84309938,0x84309939,0x84309A30,
+ 0x84309A31,0x84309A32,0x84309A33,0x84309A34,0x84309A35,0x84309A36,
+ 0x84309A37,0x84309A38,0x84309A39,0x84309B30,0x84309B31,0x84309B32,
+ 0x84309B33, 0xFE40, 0xFE41, 0xFE42, 0xFE43,0x84309B34,
+ 0xFE44,0x84309B35, 0xFE45, 0xFE46,0x84309B36,0x84309B37,
+ 0x84309B38, 0xFE47,0x84309B39,0x84309C30,0x84309C31,0x84309C32,
+ 0x84309C33,0x84309C34, 0xFE48, 0xFE49, 0xFE4A,0x84309C35,
+ 0xFE4B, 0xFE4C,0x84309C36,0x84309C37, 0xFE4D, 0xFE4E,
+ 0xFE4F, 0xA955, 0xA6F2,0x84318538, 0xA6F4, 0xA6F5,
+ 0xA6E0, 0xA6E1, 0xA6F0, 0xA6F1, 0xA6E2, 0xA6E3,
+ 0xA6EE, 0xA6EF, 0xA6E6, 0xA6E7, 0xA6E4, 0xA6E5,
+ 0xA6E8, 0xA6E9, 0xA6EA, 0xA6EB,0x84318539,0x84318630,
+ 0x84318631,0x84318632, 0xA968, 0xA969, 0xA96A, 0xA96B,
+ 0xA96C, 0xA96D, 0xA96E, 0xA96F, 0xA970, 0xA971,
+ 0x84318633, 0xA972, 0xA973, 0xA974, 0xA975,0x84318634,
+ 0xA976, 0xA977, 0xA978, 0xA979, 0xA97A, 0xA97B,
+ 0xA97C, 0xA97D, 0xA97E, 0xA980, 0xA981, 0xA982,
+ 0xA983, 0xA984,0x84318635, 0xA985, 0xA986, 0xA987,
+ 0xA988,0x84318636,0x84318637,0x84318638,0x84318639,0x84318730,
+ 0x84318731,0x84318732,0x84318733,0x84318734,0x84318735,0x84318736,
+ 0x84318737,0x84318738,0x84318739,0x84318830,0x84318831,0x84318832,
+ 0x84318833,0x84318834,0x84318835,0x84318836,0x84318837,0x84318838,
+ 0x84318839,0x84318930,0x84318931,0x84318932,0x84318933,0x84318934,
+ 0x84318935,0x84318936,0x84318937,0x84318938,0x84318939,0x84318A30,
+ 0x84318A31,0x84318A32,0x84318A33,0x84318A34,0x84318A35,0x84318A36,
+ 0x84318A37,0x84318A38,0x84318A39,0x84318B30,0x84318B31,0x84318B32,
+ 0x84318B33,0x84318B34,0x84318B35,0x84318B36,0x84318B37,0x84318B38,
+ 0x84318B39,0x84318C30,0x84318C31,0x84318C32,0x84318C33,0x84318C34,
+ 0x84318C35,0x84318C36,0x84318C37,0x84318C38,0x84318C39,0x84318D30,
+ 0x84318D31,0x84318D32,0x84318D33,0x84318D34,0x84318D35,0x84318D36,
+ 0x84318D37,0x84318D38,0x84318D39,0x84318E30,0x84318E31,0x84318E32,
+ 0x84318E33,0x84318E34,0x84318E35,0x84318E36,0x84318E37,0x84318E38,
+ 0x84318E39,0x84318F30,0x84318F31,0x84318F32,0x84318F33,0x84318F34,
+ 0x84318F35,0x84318F36,0x84318F37,0x84318F38,0x84318F39,0x84319030,
+ 0x84319031,0x84319032,0x84319033,0x84319034,0x84319035,0x84319036,
+ 0x84319037,0x84319038,0x84319039,0x84319130,0x84319131,0x84319132,
+ 0x84319133,0x84319134,0x84319135,0x84319136,0x84319137,0x84319138,
+ 0x84319139,0x84319230,0x84319231,0x84319232,0x84319233,0x84319234,
+ 0x84319235,0x84319236,0x84319237,0x84319238,0x84319239,0x84319330,
+ 0x84319331,0x84319332,0x84319333,0x84319334,0x84319335,0x84319336,
+ 0x84319337,0x84319338,0x84319339,0x84319430,0x84319431,0x84319432,
+ 0x84319433,0x84319434,0x84319435,0x84319436,0x84319437,0x84319438,
+ 0x84319439,0x84319530,0x84319531,0x84319532,0x84319533,0x84319534,
+ 0xA3A1, 0xA3A2, 0xA3A3, 0xA1E7, 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, 0xA3DC,
+ 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, 0xA1AB,0x84319535,0x84319536,
+ 0x84319537,0x84319538,0x84319539,0x84319630,0x84319631,0x84319632,
+ 0x84319633,0x84319634,0x84319635,0x84319636,0x84319637,0x84319638,
+ 0x84319639,0x84319730,0x84319731,0x84319732,0x84319733,0x84319734,
+ 0x84319735,0x84319736,0x84319737,0x84319738,0x84319739,0x84319830,
+ 0x84319831,0x84319832,0x84319833,0x84319834,0x84319835,0x84319836,
+ 0x84319837,0x84319838,0x84319839,0x84319930,0x84319931,0x84319932,
+ 0x84319933,0x84319934,0x84319935,0x84319936,0x84319937,0x84319938,
+ 0x84319939,0x84319A30,0x84319A31,0x84319A32,0x84319A33,0x84319A34,
+ 0x84319A35,0x84319A36,0x84319A37,0x84319A38,0x84319A39,0x84319B30,
+ 0x84319B31,0x84319B32,0x84319B33,0x84319B34,0x84319B35,0x84319B36,
+ 0x84319B37,0x84319B38,0x84319B39,0x84319C30,0x84319C31,0x84319C32,
+ 0x84319C33,0x84319C34,0x84319C35,0x84319C36,0x84319C37,0x84319C38,
+ 0x84319C39,0x84319D30,0x84319D31,0x84319D32,0x84319D33,0x84319D34,
+ 0x84319D35,0x84319D36,0x84319D37,0x84319D38,0x84319D39,0x84319E30,
+ 0x84319E31,0x84319E32,0x84319E33,0x84319E34,0x84319E35,0x84319E36,
+ 0x84319E37,0x84319E38,0x84319E39,0x84319F30,0x84319F31,0x84319F32,
+ 0x84319F33,0x84319F34,0x84319F35,0x84319F36,0x84319F37,0x84319F38,
+ 0x84319F39,0x8431A030,0x8431A031,0x8431A032,0x8431A033,0x8431A034,
+ 0x8431A035,0x8431A036,0x8431A037,0x8431A038,0x8431A039,0x8431A130,
+ 0x8431A131,0x8431A132,0x8431A133,0x8431A134,0x8431A135,0x8431A136,
+ 0x8431A137,0x8431A138,0x8431A139,0x8431A230,0x8431A231,0x8431A232,
+ 0x8431A233, 0xA1E9, 0xA1EA, 0xA956, 0xA3FE, 0xA957,
+ 0xA3A4,
+};
+
+ImplUnicodeToGb180302000Range const
+ aImplUnicodeToGb180302000Ranges[] = {
+ { 0, 0x0452, 0x200F, 820 },
+ { 978, 0x2643, 0x2E80, 9219 },
+ { 2565, 0x361B, 0x3917, 12973 },
+ { 4511, 0x3CE1, 0x4055, 14698 },
+ { 5480, 0x4160, 0x4336, 15847 },
+ { 5746, 0x44D7, 0x464B, 16729 },
+ { 6162, 0x478E, 0x4946, 17418 },
+ { 6484, 0x49B8, 0x4C76, 17961 },
+ { 6597, 0x9FA6, 0xDFFF, 19043 },
+ { 27892, 0xE865, 0xF92B, 33550 },
+ { 30041, 0xFA2A, 0xFE2F, 38078 },
+ { 30295, 0xFFE6, 0xFFFF, 39394 },
+};
diff --git a/sal/textenc/gettextencodingdata.hxx b/sal/textenc/gettextencodingdata.hxx
new file mode 100644
index 000000000..8dbab7c08
--- /dev/null
+++ b/sal/textenc/gettextencodingdata.hxx
@@ -0,0 +1,30 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <sal/config.h>
+
+#include <rtl/textenc.h>
+
+#include "tenchelp.hxx"
+
+ImplTextEncodingData const* Impl_getTextEncodingData(rtl_TextEncoding nEncoding);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/handleundefinedunicodetotextchar.cxx b/sal/textenc/handleundefinedunicodetotextchar.cxx
new file mode 100644
index 000000000..76aed03e1
--- /dev/null
+++ b/sal/textenc/handleundefinedunicodetotextchar.cxx
@@ -0,0 +1,171 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <rtl/textcvt.h>
+#include <sal/types.h>
+
+#include "handleundefinedunicodetotextchar.hxx"
+#include "tenchelp.hxx"
+
+namespace {
+
+bool ImplIsUnicodeIgnoreChar(sal_Unicode c, sal_uInt32 nFlags)
+{
+ return
+ ((nFlags & RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE) != 0
+ && ImplIsZeroWidth(c))
+ || ((nFlags & RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE) != 0
+ && ImplIsControlOrFormat(c))
+ || ((nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_IGNORE) != 0
+ && ImplIsPrivateUse(c));
+}
+
+bool ImplGetUndefinedAsciiMultiByte(sal_uInt32 nFlags,
+ char * pBuf,
+ sal_Size nMaxLen)
+{
+ if (nMaxLen == 0)
+ return false;
+ switch (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK)
+ {
+ case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0:
+ *pBuf = 0x00;
+ break;
+
+ case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK:
+ default: /* RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT */
+ *pBuf = 0x3F;
+ break;
+
+ case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_UNDERLINE:
+ *pBuf = 0x5F;
+ break;
+ }
+ return true;
+}
+
+bool ImplGetInvalidAsciiMultiByte(sal_uInt32 nFlags,
+ char * pBuf,
+ sal_Size nMaxLen)
+{
+ if (nMaxLen == 0)
+ return false;
+ switch (nFlags & RTL_UNICODETOTEXT_FLAGS_INVALID_MASK)
+ {
+ case RTL_UNICODETOTEXT_FLAGS_INVALID_0:
+ *pBuf = 0x00;
+ break;
+
+ case RTL_UNICODETOTEXT_FLAGS_INVALID_QUESTIONMARK:
+ default: /* RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT */
+ *pBuf = 0x3F;
+ break;
+
+ case RTL_UNICODETOTEXT_FLAGS_INVALID_UNDERLINE:
+ *pBuf = 0x5F;
+ break;
+ }
+ return true;
+}
+
+}
+
+bool sal::detail::textenc::handleUndefinedUnicodeToTextChar(
+ sal_Unicode const ** ppSrcBuf, sal_Unicode const * pEndSrcBuf,
+ char ** ppDestBuf, char const * pEndDestBuf, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo)
+{
+ sal_Unicode c = **ppSrcBuf;
+
+ /* Should the private character map to one byte */
+ if ( (c >= RTL_TEXTCVT_BYTE_PRIVATE_START) && (c <= RTL_TEXTCVT_BYTE_PRIVATE_END) )
+ {
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0 )
+ {
+ **ppDestBuf = static_cast<char>(static_cast<unsigned char>(c-RTL_TEXTCVT_BYTE_PRIVATE_START));
+ (*ppDestBuf)++;
+ (*ppSrcBuf)++;
+ return true;
+ }
+ }
+
+ /* Should this character ignored (Private, Non Spacing, Control) */
+ if ( ImplIsUnicodeIgnoreChar( c, nFlags ) )
+ {
+ (*ppSrcBuf)++;
+ return true;
+ }
+
+ /* Surrogates Characters should result in */
+ /* one replacement character */
+ if (rtl::isHighSurrogate(c))
+ {
+ if ( ((*ppSrcBuf) + 1) == pEndSrcBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ return false;
+ }
+
+ c = *((*ppSrcBuf)+1);
+ if (rtl::isLowSurrogate(c))
+ (*ppSrcBuf)++;
+ else
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_INVALID;
+ if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_INVALID_MASK) == RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR;
+ return false;
+ }
+ if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_INVALID_MASK) == RTL_UNICODETOTEXT_FLAGS_INVALID_IGNORE )
+ {
+ (*ppSrcBuf)++;
+ return true;
+ }
+ if (ImplGetInvalidAsciiMultiByte(nFlags,
+ *ppDestBuf,
+ pEndDestBuf - *ppDestBuf))
+ {
+ ++*ppSrcBuf;
+ ++*ppDestBuf;
+ return true;
+ }
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ return false;
+ }
+ }
+
+ *pInfo |= RTL_UNICODETOTEXT_INFO_UNDEFINED;
+ if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK) == RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR;
+ return false;
+ }
+ if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK) == RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE )
+ (*ppSrcBuf)++;
+ else if (ImplGetUndefinedAsciiMultiByte(nFlags,
+ *ppDestBuf,
+ pEndDestBuf - *ppDestBuf))
+ {
+ ++*ppSrcBuf;
+ ++*ppDestBuf;
+ }
+ else
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ return false;
+ }
+
+ return true;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/handleundefinedunicodetotextchar.hxx b/sal/textenc/handleundefinedunicodetotextchar.hxx
new file mode 100644
index 000000000..106ad8a43
--- /dev/null
+++ b/sal/textenc/handleundefinedunicodetotextchar.hxx
@@ -0,0 +1,30 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_HANDLEUNDEFINEDUNICODETOTEXTCHAR_HXX
+#define INCLUDED_SAL_TEXTENC_HANDLEUNDEFINEDUNICODETOTEXTCHAR_HXX
+
+#include <sal/config.h>
+
+#include <sal/saldllapi.h>
+#include <sal/types.h>
+
+// Internal, non-stable ABI
+
+namespace sal::detail::textenc {
+
+// True means "continue," false means "break:"
+bool SAL_DLLPUBLIC handleUndefinedUnicodeToTextChar(
+ sal_Unicode const ** ppSrcBuf, sal_Unicode const * pEndSrcBuf,
+ char ** ppDestBuf, char const * pEndDestBuf, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo);
+
+}
+
+#endif
diff --git a/sal/textenc/tables.cxx b/sal/textenc/tables.cxx
new file mode 100644
index 000000000..075f1d56f
--- /dev/null
+++ b/sal/textenc/tables.cxx
@@ -0,0 +1,270 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_locales.h>
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstddef>
+
+#include <rtl/textenc.h>
+#include <sal/types.h>
+
+#define NOTABUNI_START 0xFF
+#define NOTABUNI_END 0x00
+
+#define NOTABCHAR_START 0xFFFF
+#define NOTABCHAR_END 0x0000
+
+#define SAME8090UNI_START 0x80
+#define SAME8090UNI_END 0x9F
+sal_uInt16 const aImpl8090SameToUniTab[SAME8090UNI_END
+ - SAME8090UNI_START
+ + 1]
+= { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, /* 0x80 */
+ 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, /* 0x90 */
+ 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F };
+
+#define SAME8090CHAR_START 0x0080
+#define SAME8090CHAR_END 0x009F
+unsigned char const aImpl8090SameToCharTab[SAME8090CHAR_END
+ - SAME8090CHAR_START
+ + 1]
+ = { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0080 */
+ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0090 */
+ 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F };
+
+sal_uInt16 const aImplDoubleByteIdentifierTab[1] = { 0 };
+
+#include "tcvtarb1.tab"
+#include "tcvteas1.tab"
+#include "tcvtest1.tab"
+#include "tcvtjp1.tab"
+#include "tcvtjp2.tab"
+#include "tcvtjp3.tab"
+#include "tcvtjp4.tab"
+#include "tcvtjp5.tab"
+#include "tcvtjp6.tab"
+#include "tcvtkr1.tab"
+#include "tcvtkr2.tab"
+#include "tcvtkr4.tab"
+#include "tcvtkr5.tab"
+#include "tcvtkr6.tab"
+#include "tcvtlat1.tab"
+#include "tcvtscn1.tab"
+#include "tcvtscn2.tab"
+#include "tcvtscn3.tab"
+#include "tcvtscn4.tab"
+#include "tcvtscn5.tab"
+#include "tcvtscn6.tab"
+#include "tcvtsym1.tab"
+#include "tcvttcn1.tab"
+#include "tcvttcn2.tab"
+#include "tcvttcn6.tab"
+#include "tcvtuni1.tab"
+
+#include "convertadobe.tab"
+#include "convertbig5hkscs.tab"
+#include "converteuctw.tab"
+#include "convertgb18030.tab"
+#include "convertisciidevangari.tab"
+#include "convertiso2022cn.tab"
+#include "convertiso2022jp.tab"
+#include "convertiso2022kr.tab"
+
+extern "C" SAL_DLLPUBLIC_EXPORT ImplTextEncodingData const *
+ sal_getFullTextEncodingData( rtl_TextEncoding nEncoding )
+{
+ assert(
+ nEncoding != RTL_TEXTENCODING_ASCII_US &&
+ nEncoding != RTL_TEXTENCODING_ISO_8859_1 &&
+ nEncoding != RTL_TEXTENCODING_JAVA_UTF8 &&
+ nEncoding != RTL_TEXTENCODING_MS_1252 &&
+ nEncoding != RTL_TEXTENCODING_UTF8);
+ // handled by Impl_getTextEncodingData
+ static ImplTextEncodingData const * const aData[]
+ = { nullptr, /* DONTKNOW */
+ nullptr, /* MS_1252, see above */
+ &aImplAPPLEROMANTextEncodingData, /* APPLE_ROMAN */
+ &aImplIBM437TextEncodingData, /* IBM_437 */
+ &aImplIBM850TextEncodingData, /* IBM_850 */
+ &aImplIBM860TextEncodingData, /* IBM_860 */
+ &aImplIBM861TextEncodingData, /* IBM_861 */
+ &aImplIBM863TextEncodingData, /* IBM_863 */
+ &aImplIBM865TextEncodingData, /* IBM_865 */
+ nullptr, /* reserved (SYSTEM) */
+ &aImplSYMBOLTextEncodingData, /* SYMBOL */
+ nullptr, /* ASCII_US, see above */
+ nullptr, /* ISO_8859_1, see above */
+ &aImplISO88592TextEncodingData, /* ISO_8859_2 */
+ &aImplISO88593TextEncodingData, /* ISO_8859_3 */
+ &aImplISO88594TextEncodingData, /* ISO_8859_4 */
+ &aImplISO88595TextEncodingData, /* ISO_8859_5 */
+ &aImplISO88596TextEncodingData, /* ISO_8859_6 */
+ &aImplISO88597TextEncodingData, /* ISO_8859_7 */
+ &aImplISO88598TextEncodingData, /* ISO_8859_8 */
+ &aImplISO88599TextEncodingData, /* ISO_8859_9 */
+ &aImplISO885914TextEncodingData, /* ISO_8859_14 */
+ &aImplISO885915TextEncodingData, /* ISO_8859_15 */
+ &aImplIBM737TextEncodingData, /* IBM_737 */
+ &aImplIBM775TextEncodingData, /* IBM_775 */
+ &aImplIBM852TextEncodingData, /* IBM_852 */
+ &aImplIBM855TextEncodingData, /* IBM_855 */
+ &aImplIBM857TextEncodingData, /* IBM_857 */
+ &aImplIBM862TextEncodingData, /* IBM_862 */
+ &aImplIBM864TextEncodingData, /* IBM_864 */
+ &aImplIBM866TextEncodingData, /* IBM_866 */
+ &aImplIBM869TextEncodingData, /* IBM_869 */
+ &aImplMS874TextEncodingData, /* MS_874 */
+ &aImplMS1250TextEncodingData, /* MS_1250 */
+ &aImplMS1251TextEncodingData, /* MS_1251 */
+ &aImplMS1253TextEncodingData, /* MS_1253 */
+ &aImplMS1254TextEncodingData, /* MS_1254 */
+ &aImplMS1255TextEncodingData, /* MS_1255 */
+ &aImplMS1256TextEncodingData, /* MS_1256 */
+ &aImplMS1257TextEncodingData, /* MS_1257 */
+ &aImplMS1258TextEncodingData, /* MS_1258 */
+ nullptr, /* TODO! APPLE_ARABIC */
+ &aImplAPPLECENTEUROTextEncodingData, /* APPLE_CENTEURO */
+ &aImplAPPLECROATIANTextEncodingData, /* APPLE_CROATIAN */
+ &aImplAPPLECYRILLICTextEncodingData, /* APPLE_CYRILLIC */
+ nullptr, /* TODO! APPLE_DEVANAGARI */
+ nullptr, /* TODO! APPLE_FARSI */
+ &aImplAPPLEGREEKTextEncodingData, /* APPLE_GREEK */
+ nullptr, /* TODO! APPLE_GUJARATI */
+ nullptr, /* TODO! APPLE_GURMUKHI */
+ nullptr, /* TODO! APPLE_HEBREW */
+ &aImplAPPLEICELANDTextEncodingData, /* APPLE_ICELAND */
+ &aImplAPPLEROMANIANTextEncodingData, /* APPLE_ROMANIAN */
+ nullptr, /* TODO! APPLE_THAI */
+ &aImplAPPLETURKISHTextEncodingData, /* APPLE_TURKISH */
+ &aImplAPPLEUKRAINIANTextEncodingData, /* APPLE_UKRAINIAN */
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ &aImplAPPLECHINSIMPTextEncodingData, /* APPLE_CHINSIMP */
+ &aImplAPPLECHINTRADTextEncodingData, /* APPLE_CHINTRAD */
+#else
+ NULL,
+ NULL,
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ &aImplAPPLEJAPANESETextEncodingData, /* APPLE_JAPANESE */
+#else
+ NULL,
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ &aImplAPPLEKOREANTextEncodingData, /* APPLE_KOREAN */
+#else
+ NULL,
+#endif
+ &aImplMS932TextEncodingData, /* MS_932 */
+ &aImplMS936TextEncodingData, /* MS_936 */
+ &aImplMS949TextEncodingData, /* MS_949 */
+ &aImplMS950TextEncodingData, /* MS_950 */
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ &aImplSJISTextEncodingData, /* SHIFT_JIS */
+#else
+ NULL,
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ &aImplGB2312TextEncodingData, /* GB_2312 */
+ &aImplGBT12345TextEncodingData, /* GBT_12345 */
+ &aImplGBKTextEncodingData, /* GBK */
+ &aImplBIG5TextEncodingData, /* BIG5 */
+#else
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ &aImplEUCJPTextEncodingData, /* EUC_JP */
+#else
+ NULL,
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ &aImplEUCCNTextEncodingData, /* EUC_CN */
+ &aImplEucTwTextEncodingData, /* EUC_TW */
+#else
+ NULL,
+ NULL,
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ &aImplIso2022JpTextEncodingData, /* ISO_2022_JP */
+#else
+ NULL,
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ &aImplIso2022CnTextEncodingData, /* ISO_2022_CN */
+#else
+ NULL,
+#endif
+ &aImplKOI8RTextEncodingData, /* KOI8_R */
+ &aImplUTF7TextEncodingData, /* UTF7 */
+ nullptr, /* UTF8, see above */
+ &aImplISO885910TextEncodingData, /* ISO_8859_10 */
+ &aImplISO885913TextEncodingData, /* ISO_8859_13 */
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ &aImplEUCKRTextEncodingData, /* EUC_KR */
+ &aImplIso2022KrTextEncodingData, /* ISO_2022_KR */
+#else
+ NULL,
+ NULL,
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ &aImplJISX0201TextEncodingData, /* JIS_X_0201 */
+ &aImplJISX0208TextEncodingData, /* JIS_X_0208 */
+ &aImplJISX0212TextEncodingData, /* JIS_X_0212 */
+#else
+ NULL,
+ NULL,
+ NULL,
+#endif
+ &aImplMS1361TextEncodingData, /* MS_1361 */
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ &aImplGb18030TextEncodingData, /* GB_18030 */
+ &aImplBig5HkscsTextEncodingData, /* BIG5_HKSCS */
+#else
+ NULL,
+ NULL,
+#endif
+ &aImplTis620TextEncodingData, /* TIS_620 */
+ &aImplKoi8UTextEncodingData, /* KOI8_U */
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ &aImplIsciiDevanagariTextEncodingData, /* ISCII_DEVANAGARI */
+#else
+ NULL,
+#endif
+ nullptr, /* JAVA_UTF8, see above */
+ &adobeStandardEncodingData, /* ADOBE_STANDARD */
+ &adobeSymbolEncodingData, /* ADOBE_SYMBOL */
+ &aImplPT154TextEncodingData, /* PT154 */
+ &adobeDingbatsEncodingData }; /* ADOBE_DINGBATS */
+
+ static_assert(
+ SAL_N_ELEMENTS(aData) == RTL_TEXTENCODING_ADOBE_DINGBATS + 1,
+ "update table above if a new encoding is added");
+
+ return
+ nEncoding < SAL_N_ELEMENTS(aData) ? aData[nEncoding] : nullptr;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/tcvtarb1.tab b/sal/textenc/tcvtarb1.tab
new file mode 100644
index 000000000..17edab61e
--- /dev/null
+++ b/sal/textenc/tcvtarb1.tab
@@ -0,0 +1,932 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "convertsimple.hxx"
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+/* This file contain the tables for all 1 byte charsets, for the */
+/* following scripts: arabic, hebrew and other scripts in the arabic region */
+
+/* ======================================================================= */
+
+/* IBM-862 */
+/* Dos Standard CharSet for Hebrew */
+/* 1-Byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp862.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM862UNI_START 0x80
+#define IBM862UNI_END 0xFF
+sal_uInt16 const aImplIBM862ToUniTab[IBM862UNI_END - IBM862UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, /* 0x80 */
+ 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, /* 0x80 */
+ 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, /* 0x90 */
+ 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, /* 0x90 */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */
+ 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */
+ 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */
+ 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM862CHAR_START 0x05D0
+#define IBM862CHAR_END 0x05EA
+unsigned char const aImplIBM862ToCharTab[IBM862CHAR_END - IBM862CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x05D0 */
+ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, /* 0x05D0 */
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x05E0 */
+ 0x98, 0x99, 0x9A /* 0x05E0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM862TOCHARTABEX_COUNT 101
+ImplUniCharTabData const aImplIBM862ToCharTabEx[IBM862TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xFF, 0 },
+ { 0x00A1, 0xAD, 0 },
+ { 0x00A2, 0x9B, 0 },
+ { 0x00A3, 0x9C, 0 },
+ { 0x00A5, 0x9D, 0 },
+ { 0x00AA, 0xA6, 0 },
+ { 0x00AB, 0xAE, 0 },
+ { 0x00AC, 0xAA, 0 },
+ { 0x00B0, 0xF8, 0 },
+ { 0x00B1, 0xF1, 0 },
+ { 0x00B2, 0xFD, 0 },
+ { 0x00B5, 0xE6, 0 },
+ { 0x00B7, 0xFA, 0 },
+ { 0x00BA, 0xA7, 0 },
+ { 0x00BB, 0xAF, 0 },
+ { 0x00BC, 0xAC, 0 },
+ { 0x00BD, 0xAB, 0 },
+ { 0x00BF, 0xA8, 0 },
+ { 0x00D1, 0xA5, 0 },
+ { 0x00DF, 0xE1, 0 },
+ { 0x00E1, 0xA0, 0 },
+ { 0x00ED, 0xA1, 0 },
+ { 0x00F1, 0xA4, 0 },
+ { 0x00F3, 0xA2, 0 },
+ { 0x00F7, 0xF6, 0 },
+ { 0x00FA, 0xA3, 0 },
+ { 0x0192, 0x9F, 0 },
+ { 0x0393, 0xE2, 0 },
+ { 0x0398, 0xE9, 0 },
+ { 0x03A3, 0xE4, 0 },
+ { 0x03A6, 0xE8, 0 },
+ { 0x03A9, 0xEA, 0 },
+ { 0x03B1, 0xE0, 0 },
+ { 0x03B4, 0xEB, 0 },
+ { 0x03B5, 0xEE, 0 },
+ { 0x03C0, 0xE3, 0 },
+ { 0x03C3, 0xE5, 0 },
+ { 0x03C4, 0xE7, 0 },
+ { 0x03C6, 0xED, 0 },
+ { 0x207F, 0xFC, 0 },
+ { 0x20A7, 0x9E, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x221A, 0xFB, 0 },
+ { 0x221E, 0xEC, 0 },
+ { 0x2229, 0xEF, 0 },
+ { 0x2248, 0xF7, 0 },
+ { 0x2261, 0xF0, 0 },
+ { 0x2264, 0xF3, 0 },
+ { 0x2265, 0xF2, 0 },
+ { 0x2310, 0xA9, 0 },
+ { 0x2320, 0xF4, 0 },
+ { 0x2321, 0xF5, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2552, 0xD5, 0 },
+ { 0x2553, 0xD6, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2555, 0xB8, 0 },
+ { 0x2556, 0xB7, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x2558, 0xD4, 0 },
+ { 0x2559, 0xD3, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255B, 0xBE, 0 },
+ { 0x255C, 0xBD, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x255E, 0xC6, 0 },
+ { 0x255F, 0xC7, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2561, 0xB5, 0 },
+ { 0x2562, 0xB6, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2564, 0xD1, 0 },
+ { 0x2565, 0xD2, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2567, 0xCF, 0 },
+ { 0x2568, 0xD0, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256A, 0xD8, 0 },
+ { 0x256B, 0xD7, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM862ByteCvtData =
+{
+ aImplIBM862ToUniTab,
+ nullptr,
+ aImplIBM862ToCharTab,
+ nullptr,
+ aImplIBM862ToCharTabEx,
+ IBM862UNI_START, IBM862UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM862CHAR_START, IBM862CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM862TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM862TextEncodingData
+ = { { &aImplIBM862ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-8",
+ "IBM862",
+ 1,
+ 1,
+ 1,
+ 177,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_MIME
+ | RTL_TEXTENCODING_INFO_R2L };
+ /* DOS/OS2, SCRIPT_HEBREW, pc code page 862, mac encoding 5 */
+
+/* ======================================================================= */
+
+/* IBM-864 */
+/* Dos Standard CharSet for Arabic */
+/* 1-Byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp864.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM864UNI_START 0x80
+#define IBM864UNI_END 0xFE
+sal_uInt16 const aImplIBM864ToUniTab[IBM864UNI_END - IBM864UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, /* 0x80 */
+ 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518, /* 0x80 */
+ 0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, /* 0x90 */
+ 0x00BB, 0xFEF7, 0xFEF8, 0, 0, 0xFEFB, 0xFEFC, 0, /* 0x90 */
+ 0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0, 0, /* 0xA0 */
+ 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5, /* 0xA0 */
+ 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, /* 0xB0 */
+ 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F, /* 0xB0 */
+ 0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, /* 0xC0 */
+ 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9, /* 0xC0 */
+ 0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, /* 0xD0 */
+ 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9, /* 0xD0 */
+ 0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, /* 0xE0 */
+ 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1, /* 0xE0 */
+ 0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, /* 0xF0 */
+ 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM864CHAR_START 0xFE7D
+#define IBM864CHAR_END 0xFEFC
+unsigned char const aImplIBM864ToCharTab[IBM864CHAR_END - IBM864CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0, 0, 0, /* 0xFE70 */
+ 0xC1, 0xC2, 0xA2, 0xC3, 0xA5, 0xC4, 0, 0, /* 0xFE80 */
+ 0, 0, 0, 0xC6, 0, 0xC7, 0xA8, 0xA9, /* 0xFE80 */
+ 0, 0xC8, 0, 0xC9, 0, 0xAA, 0, 0xCA, /* 0xFE90 */
+ 0, 0xAB, 0, 0xCB, 0, 0xAD, 0, 0xCC, /* 0xFE90 */
+ 0, 0xAE, 0, 0xCD, 0, 0xAF, 0, 0xCE, /* 0xFEA0 */
+ 0, 0xCF, 0, 0xD0, 0, 0xD1, 0, 0xD2, /* 0xFEA0 */
+ 0, 0xBC, 0, 0xD3, 0, 0xBD, 0, 0xD4, /* 0xFEB0 */
+ 0, 0xBE, 0, 0xD5, 0, 0xEB, 0, 0xD6, /* 0xFEB0 */
+ 0, 0xD7, 0, 0, 0, 0xD8, 0, 0, /* 0xFEC0 */
+ 0, 0xDF, 0xC5, 0xD9, 0xEC, 0xEE, 0xED, 0xDA, /* 0xFEC0 */
+ 0xF7, 0xBA, 0, 0xE1, 0, 0xF8, 0, 0xE2, /* 0xFED0 */
+ 0, 0xFC, 0, 0xE3, 0, 0xFB, 0, 0xE4, /* 0xFED0 */
+ 0, 0xEF, 0, 0xE5, 0, 0xF2, 0, 0xE6, /* 0xFEE0 */
+ 0, 0xF3, 0, 0xE7, 0xF4, 0xE8, 0, 0xE9, /* 0xFEE0 */
+ 0xF5, 0xFD, 0xF6, 0xEA, 0, 0xF9, 0xFA, 0x99, /* 0xFEF0 */
+ 0x9A, 0, 0, 0x9D, 0x9E /* 0xFEF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM864TOCHARTABEX_COUNT 51
+ImplUniCharTabData const aImplIBM864ToCharTabEx[IBM864TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A2, 0xC0, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A6, 0xDB, 0 },
+ { 0x00AB, 0x97, 0 },
+ { 0x00AC, 0xDC, 0 },
+ { 0x00AD, 0xA1, 0 },
+ { 0x00B0, 0x80, 0 },
+ { 0x00B1, 0x93, 0 },
+ { 0x00B7, 0x81, 0 },
+ { 0x00BB, 0x98, 0 },
+ { 0x00BC, 0x95, 0 },
+ { 0x00BD, 0x94, 0 },
+ { 0x00D7, 0xDE, 0 },
+ { 0x00F7, 0xDD, 0 },
+ { 0x03B2, 0x90, 0 },
+ { 0x03C6, 0x92, 0 },
+ { 0x060C, 0xAC, 0 },
+ { 0x061B, 0xBB, 0 },
+ { 0x061F, 0xBF, 0 },
+ { 0x0640, 0xE0, 0 },
+ { 0x0651, 0xF1, 0 },
+ { 0x0660, 0xB0, 0 },
+ { 0x0661, 0xB1, 0 },
+ { 0x0662, 0xB2, 0 },
+ { 0x0663, 0xB3, 0 },
+ { 0x0664, 0xB4, 0 },
+ { 0x0665, 0xB5, 0 },
+ { 0x0666, 0xB6, 0 },
+ { 0x0667, 0xB7, 0 },
+ { 0x0668, 0xB8, 0 },
+ { 0x0669, 0xB9, 0 },
+ { 0x066A, 0x25, 0 },
+ { 0x2219, 0x82, 0 },
+ { 0x221A, 0x83, 0 },
+ { 0x221E, 0x91, 0 },
+ { 0x2248, 0x96, 0 },
+ { 0x2500, 0x85, 0 },
+ { 0x2502, 0x86, 0 },
+ { 0x250C, 0x8D, 0 },
+ { 0x2510, 0x8C, 0 },
+ { 0x2514, 0x8E, 0 },
+ { 0x2518, 0x8F, 0 },
+ { 0x251C, 0x8A, 0 },
+ { 0x2524, 0x88, 0 },
+ { 0x252C, 0x89, 0 },
+ { 0x2534, 0x8B, 0 },
+ { 0x253C, 0x87, 0 },
+ { 0x2592, 0x84, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM864ByteCvtData =
+{
+ aImplIBM864ToUniTab,
+ nullptr,
+ aImplIBM864ToCharTab,
+ nullptr,
+ aImplIBM864ToCharTabEx,
+ IBM864UNI_START, IBM864UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM864CHAR_START, IBM864CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM864TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM864TextEncodingData
+ = { { &aImplIBM864ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-6",
+ "IBM864",
+ 1,
+ 1,
+ 1,
+ 178,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_MIME
+ | RTL_TEXTENCODING_INFO_R2L };
+ /* DOS/OS2, SCRIPT_ARABIC, pc code page 864, mac encoding 4 */
+
+/* ======================================================================= */
+
+/* MS-1255 */
+/* Windows Standard CharSet for Hebrew */
+/* 1-Byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1255.txt from 04/15/98 Version 2.01 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1255UNI_START 0x80
+#define MS1255UNI_END 0xFF
+sal_uInt16 const aImplMS1255ToUniTab[MS1255UNI_END - MS1255UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0x02C6, 0x2030, 0, 0x2039, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0x02DC, 0x2122, 0, 0x203A, 0, 0, 0, 0, /* 0x90 */
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */
+ 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, /* 0xC0 */
+ 0x05B8, 0x05B9, 0, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, /* 0xC0 */
+ 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, /* 0xD0 */
+ 0x05F4, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, /* 0xE0 */
+ 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, /* 0xE0 */
+ 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, /* 0xF0 */
+ 0x05E8, 0x05E9, 0x05EA, 0, 0, 0x200E, 0x200F, 0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1255CHAR_START 0x05B0
+#define MS1255CHAR_END 0x05F4
+unsigned char const aImplMS1255ToCharTab[MS1255CHAR_END - MS1255CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x05B0 */
+ 0xC8, 0xC9, 0, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x05B0 */
+ 0xD0, 0xD1, 0xD2, 0xD3, 0, 0, 0, 0, /* 0x05C0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x05C0 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x05D0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x05D0 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x05E0 */
+ 0xF8, 0xF9, 0xFA, 0, 0, 0, 0, 0, /* 0x05E0 */
+ 0xD4, 0xD5, 0xD6, 0xD7, 0xD8 /* 0x05F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1255TOCHARTABEX_COUNT 54
+ImplUniCharTabData const aImplMS1255ToCharTabEx[MS1255TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A1, 0xA1, 0 },
+ { 0x00A2, 0xA2, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A5, 0xA5, 0 },
+ { 0x00A6, 0xA6, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xAB, 0 },
+ { 0x00AC, 0xAC, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AE, 0xAE, 0 },
+ { 0x00AF, 0xAF, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B2, 0xB2, 0 },
+ { 0x00B3, 0xB3, 0 },
+ { 0x00B4, 0xB4, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xB6, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00B8, 0xB8, 0 },
+ { 0x00B9, 0xB9, 0 },
+ { 0x00BB, 0xBB, 0 },
+ { 0x00BC, 0xBC, 0 },
+ { 0x00BD, 0xBD, 0 },
+ { 0x00BE, 0xBE, 0 },
+ { 0x00BF, 0xBF, 0 },
+ { 0x00D7, 0xAA, 0 },
+ { 0x00F7, 0xBA, 0 },
+ { 0x0192, 0x83, 0 },
+ { 0x02C6, 0x88, 0 },
+ { 0x02DC, 0x98, 0 },
+ { 0x200E, 0xFD, 0 },
+ { 0x200F, 0xFE, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AA, 0xA4, 0 },
+ { 0x20AC, 0x80, 0 },
+ { 0x2122, 0x99, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1255ByteCvtData =
+{
+ aImplMS1255ToUniTab,
+ nullptr,
+ aImplMS1255ToCharTab,
+ nullptr,
+ aImplMS1255ToCharTabEx,
+ MS1255UNI_START, MS1255UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ MS1255CHAR_START, MS1255CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1255TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1255TextEncodingData
+ = { { &aImplMS1255ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-8",
+ "windows-1255",
+ 1,
+ 1,
+ 1,
+ 177,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_MIME
+ | RTL_TEXTENCODING_INFO_R2L };
+ /* WIN, SCRIPT_HEBREW, pc code page 862, mac encoding 5 */
+
+/* ======================================================================= */
+
+/* MS-1256 */
+/* Windows Standard CharSet for Arabic */
+/* 1-Byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1256.txt from 01/5/99 Version 2.01 */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1256UNI_START 0x80
+#define MS1256UNI_END 0xFF
+sal_uInt16 const aImplMS1256ToUniTab[MS1256UNI_END - MS1256UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, /* 0x80 */
+ 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA, /* 0x90 */
+ 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F, /* 0xB0 */
+ 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, /* 0xC0 */
+ 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, /* 0xC0 */
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7, /* 0xD0 */
+ 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643, /* 0xD0 */
+ 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7, /* 0xF0 */
+ 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1256CHAR_START 0x061B
+#define MS1256CHAR_END 0x0652
+unsigned char const aImplMS1256ToCharTab[MS1256CHAR_END - MS1256CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBA, 0, 0, 0, 0xBF, /* 0x0610 */
+ 0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0620 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0620 */
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD8, /* 0x0630 */
+ 0xD9, 0xDA, 0xDB, 0, 0, 0, 0, 0, /* 0x0630 */
+ 0xDC, 0xDD, 0xDE, 0xDF, 0xE1, 0xE3, 0xE4, 0xE5, /* 0x0640 */
+ 0xE6, 0xEC, 0xED, 0xF0, 0xF1, 0xF2, 0xF3, 0xF5, /* 0x0640 */
+ 0xF6, 0xF8, 0xFA /* 0x0650 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1256TOCHARTABEX_COUNT 81
+ImplUniCharTabData const aImplMS1256ToCharTabEx[MS1256TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A2, 0xA2, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A5, 0xA5, 0 },
+ { 0x00A6, 0xA6, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xAB, 0 },
+ { 0x00AC, 0xAC, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AE, 0xAE, 0 },
+ { 0x00AF, 0xAF, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B2, 0xB2, 0 },
+ { 0x00B3, 0xB3, 0 },
+ { 0x00B4, 0xB4, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xB6, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00B8, 0xB8, 0 },
+ { 0x00B9, 0xB9, 0 },
+ { 0x00BB, 0xBB, 0 },
+ { 0x00BC, 0xBC, 0 },
+ { 0x00BD, 0xBD, 0 },
+ { 0x00BE, 0xBE, 0 },
+ { 0x00D7, 0xD7, 0 },
+ { 0x00E0, 0xE0, 0 },
+ { 0x00E2, 0xE2, 0 },
+ { 0x00E7, 0xE7, 0 },
+ { 0x00E8, 0xE8, 0 },
+ { 0x00E9, 0xE9, 0 },
+ { 0x00EA, 0xEA, 0 },
+ { 0x00EB, 0xEB, 0 },
+ { 0x00EE, 0xEE, 0 },
+ { 0x00EF, 0xEF, 0 },
+ { 0x00F4, 0xF4, 0 },
+ { 0x00F7, 0xF7, 0 },
+ { 0x00F9, 0xF9, 0 },
+ { 0x00FB, 0xFB, 0 },
+ { 0x00FC, 0xFC, 0 },
+ { 0x0152, 0x8C, 0 },
+ { 0x0153, 0x9C, 0 },
+ { 0x0192, 0x83, 0 },
+ { 0x02C6, 0x88, 0 },
+ { 0x060C, 0xA1, 0 },
+ { 0x0679, 0x8A, 0 },
+ { 0x067E, 0x81, 0 },
+ { 0x0686, 0x8D, 0 },
+ { 0x0688, 0x8F, 0 },
+ { 0x0691, 0x9A, 0 },
+ { 0x0698, 0x8E, 0 },
+ { 0x06A9, 0x98, 0 },
+ { 0x06AF, 0x90, 0 },
+ { 0x06BA, 0x9F, 0 },
+ { 0x06BE, 0xAA, 0 },
+ { 0x06C1, 0xC0, 0 },
+ { 0x06D2, 0xFF, 0 },
+ { 0x200C, 0x9D, 0 },
+ { 0x200D, 0x9E, 0 },
+ { 0x200E, 0xFD, 0 },
+ { 0x200F, 0xFE, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AC, 0x80, 0 },
+ { 0x2122, 0x99, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1256ByteCvtData =
+{
+ aImplMS1256ToUniTab,
+ nullptr,
+ aImplMS1256ToCharTab,
+ nullptr,
+ aImplMS1256ToCharTabEx,
+ MS1256UNI_START, MS1256UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ MS1256CHAR_START, MS1256CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1256TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1256TextEncodingData
+ = { { &aImplMS1256ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-6",
+ "windows-1256",
+ 1,
+ 1,
+ 1,
+ 178,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_MIME
+ | RTL_TEXTENCODING_INFO_R2L };
+ /* WIN, SCRIPT_ARABIC, pc code page 864, mac encoding 4 */
+
+/* ======================================================================= */
+
+/* ISO-8859-6 */
+/* Unix Standard for Arabic */
+/* 1-Byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-6.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+/* !!! 0x30-0x39 are Arabic numbers and should normally be mapped to 0x0660-0x0669 !!! */
+
+#define ISO88596UNI_START 0xA0
+#define ISO88596UNI_END 0xF2
+sal_uInt16 const aImplISO88596ToUniTab[ISO88596UNI_END - ISO88596UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0, 0, 0, 0x00A4, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x060C, 0x00AD, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x061B, 0, 0, 0, 0x061F, /* 0xB0 */
+ 0, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, /* 0xC0 */
+ 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, /* 0xC0 */
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, /* 0xD0 */
+ 0x0638, 0x0639, 0x063A, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, /* 0xE0 */
+ 0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, /* 0xE0 */
+ 0x0650, 0x0651, 0x0652 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88596CHAR_START 0x061B
+#define ISO88596CHAR_END 0x0669
+unsigned char const aImplISO88596ToCharTab[ISO88596CHAR_END - ISO88596CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBB, 0, 0, 0, 0xBF, /* 0x0610 */
+ 0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0620 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0620 */
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0630 */
+ 0xD8, 0xD9, 0xDA, 0, 0, 0, 0, 0, /* 0x0630 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0640 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0640 */
+ 0xF0, 0xF1, 0xF2, 0, 0, 0, 0, 0, /* 0x0650 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0650 */
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x0660 */
+ 0x38, 0x39 /* 0x0660 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88596TOCHARTABEX_COUNT 4
+ImplUniCharTabData const aImplISO88596ToCharTabEx[ISO88596TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x060C, 0xAC, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88596ByteCvtData =
+{
+ aImplISO88596ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplISO88596ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplISO88596ToCharTabEx,
+ ISO88596UNI_START, ISO88596UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ ISO88596CHAR_START, ISO88596CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ ISO88596TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88596TextEncodingData
+ = { { &aImplISO88596ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-6",
+ "ISO-8859-6",
+ 1,
+ 1,
+ 1,
+ 178,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_R2L
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_ARABIC, pc code page 864, mac encoding 4 */
+
+
+/* ======================================================================= */
+
+/* ISO-8859-8 */
+/* Unix Standard for Hebrew */
+/* 1-Byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-8.txt from 2000-Jan-03 Version 1.1 (based on Unicode 3.0) */
+
+#define ISO88598UNI_START 0xA0
+#define ISO88598UNI_END 0xFE
+sal_uInt16 const aImplISO88598ToUniTab[ISO88598UNI_END - ISO88598UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x2017, /* 0xD0 */
+ 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, /* 0xE0 */
+ 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, /* 0xE0 */
+ 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, /* 0xF0 */
+ 0x05E8, 0x05E9, 0x05EA, 0, 0, 0x200E, 0x200F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88598CHAR_START 0x05D0
+#define ISO88598CHAR_END 0x05EA
+unsigned char const aImplISO88598ToCharTab[ISO88598CHAR_END - ISO88598CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x05D0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x05D0 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x05E0 */
+ 0xF8, 0xF9, 0xFA /* 0x05E0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88598TOCHARTABEX_COUNT 33
+ImplUniCharTabData const aImplISO88598ToCharTabEx[ISO88598TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A2, 0xA2, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A5, 0xA5, 0 },
+ { 0x00A6, 0xA6, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xAB, 0 },
+ { 0x00AC, 0xAC, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AE, 0xAE, 0 },
+ { 0x00AF, 0xAF, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B2, 0xB2, 0 },
+ { 0x00B3, 0xB3, 0 },
+ { 0x00B4, 0xB4, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xB6, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00B8, 0xB8, 0 },
+ { 0x00B9, 0xB9, 0 },
+ { 0x00BB, 0xBB, 0 },
+ { 0x00BC, 0xBC, 0 },
+ { 0x00BD, 0xBD, 0 },
+ { 0x00BE, 0xBE, 0 },
+ { 0x00D7, 0xAA, 0 },
+ { 0x00F7, 0xBA, 0 },
+ { 0x200E, 0xFD, 0 },
+ { 0x200F, 0xFE, 0 },
+ { 0x2017, 0xDF, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88598ByteCvtData =
+{
+ aImplISO88598ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplISO88598ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplISO88598ToCharTabEx,
+ ISO88598UNI_START, ISO88598UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ ISO88598CHAR_START, ISO88598CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ ISO88598TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88598TextEncodingData
+ = { { &aImplISO88598ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-8",
+ "ISO-8859-8",
+ 1,
+ 1,
+ 1,
+ 177,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_R2L
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_HEBREW, pc code page 862, mac encoding 5 */
diff --git a/sal/textenc/tcvtbyte.cxx b/sal/textenc/tcvtbyte.cxx
new file mode 100644
index 000000000..ee727d9f9
--- /dev/null
+++ b/sal/textenc/tcvtbyte.cxx
@@ -0,0 +1,161 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/textcvt.h>
+
+#include "handleundefinedunicodetotextchar.hxx"
+#include "tcvtbyte.hxx"
+#include "tenchelp.hxx"
+
+sal_Size ImplSymbolToUnicode( SAL_UNUSED_PARAMETER const void*,
+ SAL_UNUSED_PARAMETER void*,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ SAL_UNUSED_PARAMETER sal_uInt32,
+ sal_uInt32* pInfo, sal_Size* pSrcCvtBytes )
+{
+ sal_Unicode* pEndDestBuf;
+ const char* pEndSrcBuf;
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestChars;
+ pEndSrcBuf = pSrcBuf+nSrcBytes;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ /* 0-31 (all Control-Character get the same Unicode value) */
+ unsigned char c = static_cast<unsigned char>(*pSrcBuf);
+ if ( c <= 0x1F )
+ *pDestBuf = static_cast<sal_Unicode>(c);
+ else
+ *pDestBuf = static_cast<sal_Unicode>(c)+0xF000;
+ pDestBuf++;
+ pSrcBuf++;
+ }
+
+ *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf);
+ return (nDestChars - (pEndDestBuf-pDestBuf));
+}
+
+sal_Size ImplUnicodeToSymbol( SAL_UNUSED_PARAMETER const void*,
+ SAL_UNUSED_PARAMETER void*,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars )
+{
+ sal_Unicode c;
+ char* pEndDestBuf;
+ const sal_Unicode* pEndSrcBuf;
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestBytes;
+ pEndSrcBuf = pSrcBuf+nSrcChars;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ c = *pSrcBuf;
+ if ( (c >= 0xF000) && (c <= 0xF0FF) )
+ {
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >(c-0xF000));
+ pDestBuf++;
+ pSrcBuf++;
+ }
+ // Normally 0x001F, but in many cases also symbol characters
+ // are stored in the first 256 bytes, so that we don't change
+ // these values
+ else if ( c <= 0x00FF )
+ {
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >(c));
+ pDestBuf++;
+ pSrcBuf++;
+ }
+ else
+ {
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE )
+ {
+ /* !!! */
+ /* Only ascii characters < 0x1F */
+ }
+
+ /* Handle undefined and surrogates characters */
+ /* (all surrogates characters are undefined) */
+ if (!sal::detail::textenc::handleUndefinedUnicodeToTextChar(
+ &pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf, nFlags,
+ pInfo))
+ break;
+ }
+ }
+
+ *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf);
+ return (nDestBytes - (pEndDestBuf-pDestBuf));
+}
+
+sal_Size ImplUpperCharToUnicode( const void* pData,
+ SAL_UNUSED_PARAMETER void*,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ SAL_UNUSED_PARAMETER sal_uInt32, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes )
+{
+ sal_Unicode cConv;
+ const ImplByteConvertData* pConvertData = static_cast<const ImplByteConvertData*>(pData);
+ sal_Unicode* pEndDestBuf;
+ const char* pEndSrcBuf;
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestChars;
+ pEndSrcBuf = pSrcBuf+nSrcBytes;
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ *pSrcCvtBytes = 0;
+ return 0;
+ }
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ unsigned char c = static_cast<unsigned char>(*pSrcBuf);
+ if (c < 0x80)
+ cConv = c;
+ else
+ // c <= 0xFF is implied.
+ cConv = pConvertData->mpToUniTab1[c - 0x80];
+
+ *pDestBuf = cConv;
+ pDestBuf++;
+ pSrcBuf++;
+ }
+
+ *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf);
+ return (nDestChars - (pEndDestBuf-pDestBuf));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/tcvtbyte.hxx b/sal/textenc/tcvtbyte.hxx
new file mode 100644
index 000000000..04df860cd
--- /dev/null
+++ b/sal/textenc/tcvtbyte.hxx
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_TCVTBYTE_HXX
+#define INCLUDED_SAL_TEXTENC_TCVTBYTE_HXX
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+
+sal_Size ImplSymbolToUnicode(
+ void const * pData, void * pContext, char const * pSrcBuf,
+ sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes);
+
+sal_Size ImplUnicodeToSymbol(
+ void const * pData, void * pContext, sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars, char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size * pSrcCvtChars);
+
+/** For those encodings only with unicode range of 0x80 to 0xFF. */
+sal_Size ImplUpperCharToUnicode(
+ void const * pData, void * pContext, char const * pSrcBuf,
+ sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/tcvteas1.tab b/sal/textenc/tcvteas1.tab
new file mode 100644
index 000000000..636852991
--- /dev/null
+++ b/sal/textenc/tcvteas1.tab
@@ -0,0 +1,432 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "convertsimple.hxx"
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+/* This file contain the tables for all 1 byte charsets, for the */
+/* following scripts: asia (Thai, Vietnamese) and other exotic scripts */
+
+/* ======================================================================= */
+
+/* MS-874 */
+/* Windows/Dos Standard CharSet for Thai */
+/* 1-Byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp874.txt from 04/15/98 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS874UNI_START 0x80
+#define MS874UNI_END 0xFB
+sal_uInt16 const aImplMS874ToUniTab[MS874UNI_END - MS874UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0, 0, 0, 0, 0x2026, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, /* 0xA0 */
+ 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, /* 0xA0 */
+ 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, /* 0xB0 */
+ 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F, /* 0xB0 */
+ 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, /* 0xC0 */
+ 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F, /* 0xC0 */
+ 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, /* 0xD0 */
+ 0x0E38, 0x0E39, 0x0E3A, 0, 0, 0, 0, 0x0E3F, /* 0xD0 */
+ 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, /* 0xE0 */
+ 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F, /* 0xE0 */
+ 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, /* 0xF0 */
+ 0x0E58, 0x0E59, 0x0E5A, 0x0E5B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS874CHAR_START 0x0E01
+#define MS874CHAR_END 0x0E5B
+unsigned char const aImplMS874ToCharTab[MS874CHAR_END - MS874CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x0E00 */
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x0E00 */
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x0E10 */
+ 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x0E10 */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0E20 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0E20 */
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0E30 */
+ 0xD8, 0xD9, 0xDA, 0, 0, 0, 0, 0xDF, /* 0x0E30 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0E40 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0E40 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0E50 */
+ 0xF8, 0xF9, 0xFA, 0xFB /* 0x0E50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS874TOCHARTABEX_COUNT 10
+ImplUniCharTabData const aImplMS874ToCharTabEx[MS874TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x20AC, 0x80, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS874ByteCvtData =
+{
+ aImplMS874ToUniTab,
+ nullptr,
+ aImplMS874ToCharTab,
+ nullptr,
+ aImplMS874ToCharTabEx,
+ MS874UNI_START, MS874UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ MS874CHAR_START, MS874CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS874TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS874TextEncodingData
+ = { { &aImplMS874ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1", /* TODO! correct? */
+ "windows-874",
+ 1,
+ 1,
+ 1,
+ 222,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* WIN/DOS/OS2, SCRIPT_THAI, pc code page 874, mac encoding 21 */
+
+/* ======================================================================= */
+
+/* TIS 620-2533
+ *
+ * A good source of information is <http://www.inet.co.th/cyberclub/trin/
+ * thairef/index.html> as of 18 Mar 2002.
+ *
+ * Single byte encoding, from which MS874 is derived (although it is the other
+ * way around in this implementation):
+ *
+ * 0x00--9F map to U+0000--009F
+ * 0xA0 is questionable (unassigned or U+00A0 NO BREAK SPACE), to ease
+ * implementation, it maps to U+00A0
+ * 0xA1--DA map to U+0E01--0E3A (TIS 620, same for MS874)
+ * 0xDB--DE are unassigned (TIS 620, same for MS874)
+ * 0xDF--FB map to U+0E3F--0E5B (TIS 620, same for MS874)
+ * 0xFC--FF are unassigned (TIS 620, same for MS874)
+ */
+
+ImplByteConvertData const aImplTis620ByteCvtData =
+{
+ aImplMS874ToUniTab + (0xA0 - MS874UNI_START),
+ aImpl8090SameToUniTab,
+ aImplMS874ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplMS874ToCharTabEx,
+ 0xA0, MS874UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ MS874CHAR_START, MS874CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ 1
+};
+
+ImplTextEncodingData const aImplTis620TextEncodingData
+ = { { &aImplTis620ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1", /* TODO! correct? */
+ "TIS-620",
+ 1,
+ 1,
+ 1,
+ 222,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+
+/* ======================================================================= */
+
+/* MS-1258 */
+/* Windows Standard CharSet for Vietnamease */
+/* 1-Byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1258.txt from 04/15/98 Version 2.01 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1258UNI_START 0x80
+#define MS1258UNI_END 0xFF
+sal_uInt16 const aImplMS1258ToUniTab[MS1258UNI_END - MS1258UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0x02C6, 0x2030, 0, 0x2039, 0x0152, 0, 0, 0, /* 0x80 */
+ 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0x02DC, 0x2122, 0, 0x203A, 0x0153, 0, 0, 0x0178, /* 0x90 */
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */
+ 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF, /* 0xD0 */
+ 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1258CHAR_START 0x00A0
+#define MS1258CHAR_END 0x00FF
+unsigned char const aImplMS1258ToCharTab[MS1258CHAR_END - MS1258CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */
+ 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x00B0 */
+ 0xC0, 0xC1, 0xC2, 0, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0, 0xCD, 0xCE, 0xCF, /* 0x00C0 */
+ 0, 0xD1, 0, 0xD3, 0xD4, 0, 0xD6, 0xD7, /* 0x00D0 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0, 0, 0xDF, /* 0x00D0 */
+ 0xE0, 0xE1, 0xE2, 0, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0, 0xED, 0xEE, 0xEF, /* 0x00E0 */
+ 0, 0xF1, 0, 0xF3, 0xF4, 0, 0xF6, 0xF7, /* 0x00F0 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0, 0xFF /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* The list of Vietnamese-relevant precomposed Unicode characters that map to
+ MS1258 base + combining modifier are derived from the information present at
+ <http://vietunicode.sourceforge.net/charset/>: */
+#define MS1258TOCHARTABEX_COUNT 141
+ImplUniCharTabData const aImplMS1258ToCharTabEx[MS1258TOCHARTABEX_COUNT] =
+{
+ { 0x00C3, 0x41, 0xDE },
+ { 0x00CC, 0x49, 0xCC },
+ { 0x00D2, 0x4F, 0xCC },
+ { 0x00D5, 0x4F, 0xDE },
+ { 0x00DD, 0x59, 0xEC },
+ { 0x00E3, 0x61, 0xDE },
+ { 0x00EC, 0x69, 0xCC },
+ { 0x00F2, 0x6F, 0xCC },
+ { 0x00F5, 0x6F, 0xDE },
+ { 0x00FD, 0x79, 0xCC },
+ { 0x0102, 0xC3, 0 },
+ { 0x0103, 0xE3, 0 },
+ { 0x0110, 0xD0, 0 },
+ { 0x0111, 0xF0, 0 },
+ { 0x0128, 0x49, 0xDE },
+ { 0x0129, 0x69, 0xDE },
+ { 0x0152, 0x8C, 0 },
+ { 0x0153, 0x9C, 0 },
+ { 0x0168, 0x55, 0xDE },
+ { 0x0169, 0x75, 0xDE },
+ { 0x0178, 0x9F, 0 },
+ { 0x0192, 0x83, 0 },
+ { 0x01A0, 0xD5, 0 },
+ { 0x01A1, 0xF5, 0 },
+ { 0x01AF, 0xDD, 0 },
+ { 0x01B0, 0xFD, 0 },
+ { 0x02C6, 0x88, 0 },
+ { 0x02DC, 0x98, 0 },
+ { 0x0300, 0xCC, 0 },
+ { 0x0301, 0xEC, 0 },
+ { 0x0303, 0xDE, 0 },
+ { 0x0309, 0xD2, 0 },
+ { 0x0323, 0xF2, 0 },
+ { 0x1EA0, 0x41, 0xF2 },
+ { 0x1EA1, 0x61, 0xF2 },
+ { 0x1EA2, 0x41, 0xD2 },
+ { 0x1EA3, 0x61, 0xD2 },
+ { 0x1EA4, 0xC2, 0xEC },
+ { 0x1EA5, 0xE2, 0xEC },
+ { 0x1EA6, 0xC2, 0xCC },
+ { 0x1EA7, 0xE2, 0xCC },
+ { 0x1EA8, 0xC2, 0xD2 },
+ { 0x1EA9, 0xE2, 0xD2 },
+ { 0x1EAA, 0xC2, 0xDE },
+ { 0x1EAB, 0xE2, 0xDE },
+ { 0x1EAC, 0xC2, 0xF2 },
+ { 0x1EAD, 0xE2, 0xF2 },
+ { 0x1EAE, 0xC3, 0xEC },
+ { 0x1EAF, 0xE3, 0xEC },
+ { 0x1EB0, 0xC3, 0xCC },
+ { 0x1EB1, 0xE3, 0xCC },
+ { 0x1EB2, 0xC3, 0xD2 },
+ { 0x1EB3, 0xE3, 0xD2 },
+ { 0x1EB4, 0xC3, 0xDE },
+ { 0x1EB5, 0xE3, 0xDE },
+ { 0x1EB6, 0xC3, 0xF2 },
+ { 0x1EB7, 0xE3, 0xF2 },
+ { 0x1EB8, 0x45, 0xF2 },
+ { 0x1EB9, 0x65, 0xF2 },
+ { 0x1EBA, 0x45, 0xD2 },
+ { 0x1EBB, 0x65, 0xD2 },
+ { 0x1EBC, 0x45, 0xDE },
+ { 0x1EBD, 0x65, 0xDE },
+ { 0x1EBE, 0xCA, 0xEC },
+ { 0x1EBF, 0xEA, 0xEC },
+ { 0x1EC0, 0xCA, 0xCC },
+ { 0x1EC1, 0xEA, 0xCC },
+ { 0x1EC2, 0xCA, 0xD2 },
+ { 0x1EC3, 0xEA, 0xD2 },
+ { 0x1EC4, 0xCA, 0xDE },
+ { 0x1EC5, 0xEA, 0xDE },
+ { 0x1EC6, 0xCA, 0xF2 },
+ { 0x1EC7, 0xEA, 0xF2 },
+ { 0x1EC8, 0x49, 0xD2 },
+ { 0x1EC9, 0x69, 0xD2 },
+ { 0x1ECA, 0x49, 0xF2 },
+ { 0x1ECB, 0x69, 0xF2 },
+ { 0x1ECC, 0x4F, 0xF2 },
+ { 0x1ECD, 0x6F, 0xF2 },
+ { 0x1ECE, 0x4F, 0xD2 },
+ { 0x1ECF, 0x6F, 0xD2 },
+ { 0x1ED0, 0xD4, 0xEC },
+ { 0x1ED1, 0xF4, 0xEC },
+ { 0x1ED2, 0xD4, 0xCC },
+ { 0x1ED3, 0xF4, 0xCC },
+ { 0x1ED4, 0xD4, 0xD2 },
+ { 0x1ED5, 0xF4, 0xD2 },
+ { 0x1ED6, 0xD4, 0xDE },
+ { 0x1ED7, 0xF4, 0xDE },
+ { 0x1ED8, 0xD4, 0xF2 },
+ { 0x1ED9, 0xF4, 0xF2 },
+ { 0x1EDA, 0xD5, 0xEC },
+ { 0x1EDB, 0xF5, 0xEC },
+ { 0x1EDC, 0xD5, 0xCC },
+ { 0x1EDD, 0xF5, 0xCC },
+ { 0x1EDE, 0xD5, 0xD2 },
+ { 0x1EDF, 0xF5, 0xD2 },
+ { 0x1EE0, 0xD5, 0xDE },
+ { 0x1EE1, 0xF5, 0xDE },
+ { 0x1EE2, 0xD5, 0xF2 },
+ { 0x1EE3, 0xF5, 0xF2 },
+ { 0x1EE4, 0x55, 0xF2 },
+ { 0x1EE5, 0x75, 0xF2 },
+ { 0x1EE6, 0x55, 0xD2 },
+ { 0x1EE7, 0x75, 0xD2 },
+ { 0x1EE8, 0xDD, 0xEC },
+ { 0x1EE9, 0xFD, 0xEC },
+ { 0x1EEA, 0xDD, 0xCC },
+ { 0x1EEB, 0xFD, 0xCC },
+ { 0x1EEC, 0xDD, 0xD2 },
+ { 0x1EED, 0xFD, 0xD2 },
+ { 0x1EEE, 0xDD, 0xDE },
+ { 0x1EEF, 0xFD, 0xDE },
+ { 0x1EF0, 0xDD, 0xF2 },
+ { 0x1EF1, 0xFD, 0xF2 },
+ { 0x1EF2, 0x59, 0xCC },
+ { 0x1EF3, 0x79, 0xCC },
+ { 0x1EF4, 0x59, 0xF2 },
+ { 0x1EF5, 0x79, 0xF2 },
+ { 0x1EF6, 0x59, 0xD2 },
+ { 0x1EF7, 0x79, 0xD2 },
+ { 0x1EF8, 0x59, 0xDE },
+ { 0x1EF9, 0x79, 0xDE },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AB, 0xFE, 0 },
+ { 0x20AC, 0x80, 0 },
+ { 0x2122, 0x99, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1258ByteCvtData =
+{
+ aImplMS1258ToUniTab,
+ nullptr,
+ aImplMS1258ToCharTab,
+ nullptr,
+ aImplMS1258ToCharTabEx,
+ MS1258UNI_START, MS1258UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ MS1258CHAR_START, MS1258CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1258TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1258TextEncodingData
+ = { { &aImplMS1258ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1", /* TODO! correct? */
+ "windows-1258",
+ 1,
+ 2,
+ 1,
+ 163,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* WIN, SCRIPT_VIETNAMESE, mac encoding 30 */
diff --git a/sal/textenc/tcvtest1.tab b/sal/textenc/tcvtest1.tab
new file mode 100644
index 000000000..b8661ab9c
--- /dev/null
+++ b/sal/textenc/tcvtest1.tab
@@ -0,0 +1,4580 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "convertsimple.hxx"
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+/* This file contain the tables for all 1 byte charsets, for the */
+/* following scripts: easteurope, cyrillic, greek, turkish */
+
+/* ======================================================================= */
+
+/* IBM-737 */
+/* Dos Standard CharSet for Greek */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp737.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM737UNI_START 0x80
+#define IBM737UNI_END 0xFF
+sal_uInt16 const aImplIBM737ToUniTab[IBM737UNI_END - IBM737UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, /* 0x80 */
+ 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, /* 0x80 */
+ 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, /* 0x90 */
+ 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, /* 0x90 */
+ 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, /* 0xA0 */
+ 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, /* 0xE0 */
+ 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E, /* 0xE0 */
+ 0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM737CHAR_START 0x0386
+#define IBM737CHAR_END 0x03CE
+unsigned char const aImplIBM737ToCharTab[IBM737CHAR_END - IBM737CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEA, 0, /* 0x0380 */
+ 0xEB, 0xEC, 0xED, 0, 0xEE, 0, 0xEF, 0xF0, /* 0x0380 */
+ 0, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, /* 0x0390 */
+ 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, /* 0x0390 */
+ 0x8F, 0x90, 0, 0x91, 0x92, 0x93, 0x94, 0x95, /* 0x03A0 */
+ 0x96, 0x97, 0xF4, 0xF5, 0xE1, 0xE2, 0xE3, 0xE5, /* 0x03A0 */
+ 0, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, /* 0x03B0 */
+ 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 0x03B0 */
+ 0xA7, 0xA8, 0xAA, 0xA9, 0xAB, 0xAC, 0xAD, 0xAE, /* 0x03C0 */
+ 0xAF, 0xE0, 0xE4, 0xE8, 0xE6, 0xE7, 0xE9 /* 0x03C0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM737TOCHARTABEX_COUNT 61
+ImplUniCharTabData const aImplIBM737ToCharTabEx[IBM737TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xFF, 0 },
+ { 0x00B0, 0xF8, 0 },
+ { 0x00B1, 0xF1, 0 },
+ { 0x00B2, 0xFD, 0 },
+ { 0x00B7, 0xFA, 0 },
+ { 0x00F7, 0xF6, 0 },
+ { 0x207F, 0xFC, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x221A, 0xFB, 0 },
+ { 0x2248, 0xF7, 0 },
+ { 0x2264, 0xF3, 0 },
+ { 0x2265, 0xF2, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2552, 0xD5, 0 },
+ { 0x2553, 0xD6, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2555, 0xB8, 0 },
+ { 0x2556, 0xB7, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x2558, 0xD4, 0 },
+ { 0x2559, 0xD3, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255B, 0xBE, 0 },
+ { 0x255C, 0xBD, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x255E, 0xC6, 0 },
+ { 0x255F, 0xC7, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2561, 0xB5, 0 },
+ { 0x2562, 0xB6, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2564, 0xD1, 0 },
+ { 0x2565, 0xD2, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2567, 0xCF, 0 },
+ { 0x2568, 0xD0, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256A, 0xD8, 0 },
+ { 0x256B, 0xD7, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM737ByteCvtData =
+{
+ aImplIBM737ToUniTab,
+ nullptr,
+ aImplIBM737ToCharTab,
+ nullptr,
+ aImplIBM737ToCharTabEx,
+ IBM737UNI_START, IBM737UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM737CHAR_START, IBM737CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM737TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM737TextEncodingData
+ = { { &aImplIBM737ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-7",
+ "iso-8859-7",
+ 1,
+ 1,
+ 1,
+ 161,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* DOS/OS2, SCRIPT_GREEK, pc code page 737, mac encoding 6 */
+
+/* ======================================================================= */
+
+/* IBM-775 */
+/* Dos Standard CharSet for BalticRim */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp775.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM775UNI_START 0x80
+#define IBM775UNI_END 0xFF
+sal_uInt16 const aImplIBM775ToUniTab[IBM775UNI_END - IBM775UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, /* 0x80 */
+ 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5, /* 0x80 */
+ 0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, /* 0x90 */
+ 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4, /* 0x90 */
+ 0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, /* 0xA0 */
+ 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, /* 0xB0 */
+ 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D, /* 0xC0 */
+ 0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, /* 0xD0 */
+ 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, /* 0xE0 */
+ 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019, /* 0xE0 */
+ 0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM775TOCHARTABEX_COUNT 128
+ImplUniCharTabData const aImplIBM775ToCharTabEx[IBM775TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xFF, 0 },
+ { 0x00A2, 0x96, 0 },
+ { 0x00A3, 0x9C, 0 },
+ { 0x00A4, 0x9F, 0 },
+ { 0x00A6, 0xA7, 0 },
+ { 0x00A7, 0xF5, 0 },
+ { 0x00A9, 0xA8, 0 },
+ { 0x00AB, 0xAE, 0 },
+ { 0x00AC, 0xAA, 0 },
+ { 0x00AD, 0xF0, 0 },
+ { 0x00AE, 0xA9, 0 },
+ { 0x00B0, 0xF8, 0 },
+ { 0x00B1, 0xF1, 0 },
+ { 0x00B2, 0xFD, 0 },
+ { 0x00B3, 0xFC, 0 },
+ { 0x00B5, 0xE6, 0 },
+ { 0x00B6, 0xF4, 0 },
+ { 0x00B7, 0xFA, 0 },
+ { 0x00B9, 0xFB, 0 },
+ { 0x00BB, 0xAF, 0 },
+ { 0x00BC, 0xAC, 0 },
+ { 0x00BD, 0xAB, 0 },
+ { 0x00BE, 0xF3, 0 },
+ { 0x00C4, 0x8E, 0 },
+ { 0x00C5, 0x8F, 0 },
+ { 0x00C6, 0x92, 0 },
+ { 0x00C9, 0x90, 0 },
+ { 0x00D3, 0xE0, 0 },
+ { 0x00D5, 0xE5, 0 },
+ { 0x00D6, 0x99, 0 },
+ { 0x00D7, 0x9E, 0 },
+ { 0x00D8, 0x9D, 0 },
+ { 0x00DC, 0x9A, 0 },
+ { 0x00DF, 0xE1, 0 },
+ { 0x00E4, 0x84, 0 },
+ { 0x00E5, 0x86, 0 },
+ { 0x00E6, 0x91, 0 },
+ { 0x00E9, 0x82, 0 },
+ { 0x00F3, 0xA2, 0 },
+ { 0x00F5, 0xE4, 0 },
+ { 0x00F6, 0x94, 0 },
+ { 0x00F7, 0xF6, 0 },
+ { 0x00F8, 0x9B, 0 },
+ { 0x00FC, 0x81, 0 },
+ { 0x0100, 0xA0, 0 },
+ { 0x0101, 0x83, 0 },
+ { 0x0104, 0xB5, 0 },
+ { 0x0105, 0xD0, 0 },
+ { 0x0106, 0x80, 0 },
+ { 0x0107, 0x87, 0 },
+ { 0x010C, 0xB6, 0 },
+ { 0x010D, 0xD1, 0 },
+ { 0x0112, 0xED, 0 },
+ { 0x0113, 0x89, 0 },
+ { 0x0116, 0xB8, 0 },
+ { 0x0117, 0xD3, 0 },
+ { 0x0118, 0xB7, 0 },
+ { 0x0119, 0xD2, 0 },
+ { 0x0122, 0x95, 0 },
+ { 0x0123, 0x85, 0 },
+ { 0x012A, 0xA1, 0 },
+ { 0x012B, 0x8C, 0 },
+ { 0x012E, 0xBD, 0 },
+ { 0x012F, 0xD4, 0 },
+ { 0x0136, 0xE8, 0 },
+ { 0x0137, 0xE9, 0 },
+ { 0x013B, 0xEA, 0 },
+ { 0x013C, 0xEB, 0 },
+ { 0x0141, 0xAD, 0 },
+ { 0x0142, 0x88, 0 },
+ { 0x0143, 0xE3, 0 },
+ { 0x0144, 0xE7, 0 },
+ { 0x0145, 0xEE, 0 },
+ { 0x0146, 0xEC, 0 },
+ { 0x014C, 0xE2, 0 },
+ { 0x014D, 0x93, 0 },
+ { 0x0156, 0x8A, 0 },
+ { 0x0157, 0x8B, 0 },
+ { 0x015A, 0x97, 0 },
+ { 0x015B, 0x98, 0 },
+ { 0x0160, 0xBE, 0 },
+ { 0x0161, 0xD5, 0 },
+ { 0x016A, 0xC7, 0 },
+ { 0x016B, 0xD7, 0 },
+ { 0x0172, 0xC6, 0 },
+ { 0x0173, 0xD6, 0 },
+ { 0x0179, 0x8D, 0 },
+ { 0x017A, 0xA5, 0 },
+ { 0x017B, 0xA3, 0 },
+ { 0x017C, 0xA4, 0 },
+ { 0x017D, 0xCF, 0 },
+ { 0x017E, 0xD8, 0 },
+ { 0x2019, 0xEF, 0 },
+ { 0x201C, 0xF2, 0 },
+ { 0x201D, 0xA6, 0 },
+ { 0x201E, 0xF7, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM775ByteCvtData =
+{
+ aImplIBM775ToUniTab,
+ nullptr,
+ nullptr,
+ nullptr,
+ aImplIBM775ToCharTabEx,
+ IBM775UNI_START, IBM775UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM775TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM775TextEncodingData
+ = { { &aImplIBM775ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-4",
+ "iso-8859-4",
+ 1,
+ 1,
+ 1,
+ 186,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* DOS/OS2, SCRIPT_BALTIC, pc code page 775, mac encoding 29 (?) */
+
+/* ======================================================================= */
+
+/* IBM-852 */
+/* Dos Standard CharSet for Central Europa (Jug., Pol., Tsch., Ung., ...) */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp852.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM852UNI_START 0x80
+#define IBM852UNI_END 0xFF
+sal_uInt16 const aImplIBM852ToUniTab[IBM852UNI_END - IBM852UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, /* 0x80 */
+ 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106, /* 0x80 */
+ 0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, /* 0x90 */
+ 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D, /* 0x90 */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, /* 0xA0 */
+ 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, /* 0xB0 */
+ 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, /* 0xC0 */
+ 0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, /* 0xD0 */
+ 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580, /* 0xD0 */
+ 0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, /* 0xE0 */
+ 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4, /* 0xE0 */
+ 0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, /* 0xF0 */
+ 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM852TOCHARTABEX_COUNT 128
+ImplUniCharTabData const aImplIBM852ToCharTabEx[IBM852TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xFF, 0 },
+ { 0x00A4, 0xCF, 0 },
+ { 0x00A7, 0xF5, 0 },
+ { 0x00A8, 0xF9, 0 },
+ { 0x00AB, 0xAE, 0 },
+ { 0x00AC, 0xAA, 0 },
+ { 0x00AD, 0xF0, 0 },
+ { 0x00B0, 0xF8, 0 },
+ { 0x00B4, 0xEF, 0 },
+ { 0x00B8, 0xF7, 0 },
+ { 0x00BB, 0xAF, 0 },
+ { 0x00C1, 0xB5, 0 },
+ { 0x00C2, 0xB6, 0 },
+ { 0x00C4, 0x8E, 0 },
+ { 0x00C7, 0x80, 0 },
+ { 0x00C9, 0x90, 0 },
+ { 0x00CB, 0xD3, 0 },
+ { 0x00CD, 0xD6, 0 },
+ { 0x00CE, 0xD7, 0 },
+ { 0x00D3, 0xE0, 0 },
+ { 0x00D4, 0xE2, 0 },
+ { 0x00D6, 0x99, 0 },
+ { 0x00D7, 0x9E, 0 },
+ { 0x00DA, 0xE9, 0 },
+ { 0x00DC, 0x9A, 0 },
+ { 0x00DD, 0xED, 0 },
+ { 0x00DF, 0xE1, 0 },
+ { 0x00E1, 0xA0, 0 },
+ { 0x00E2, 0x83, 0 },
+ { 0x00E4, 0x84, 0 },
+ { 0x00E7, 0x87, 0 },
+ { 0x00E9, 0x82, 0 },
+ { 0x00EB, 0x89, 0 },
+ { 0x00ED, 0xA1, 0 },
+ { 0x00EE, 0x8C, 0 },
+ { 0x00F3, 0xA2, 0 },
+ { 0x00F4, 0x93, 0 },
+ { 0x00F6, 0x94, 0 },
+ { 0x00F7, 0xF6, 0 },
+ { 0x00FA, 0xA3, 0 },
+ { 0x00FC, 0x81, 0 },
+ { 0x00FD, 0xEC, 0 },
+ { 0x0102, 0xC6, 0 },
+ { 0x0103, 0xC7, 0 },
+ { 0x0104, 0xA4, 0 },
+ { 0x0105, 0xA5, 0 },
+ { 0x0106, 0x8F, 0 },
+ { 0x0107, 0x86, 0 },
+ { 0x010C, 0xAC, 0 },
+ { 0x010D, 0x9F, 0 },
+ { 0x010E, 0xD2, 0 },
+ { 0x010F, 0xD4, 0 },
+ { 0x0110, 0xD1, 0 },
+ { 0x0111, 0xD0, 0 },
+ { 0x0118, 0xA8, 0 },
+ { 0x0119, 0xA9, 0 },
+ { 0x011A, 0xB7, 0 },
+ { 0x011B, 0xD8, 0 },
+ { 0x0139, 0x91, 0 },
+ { 0x013A, 0x92, 0 },
+ { 0x013D, 0x95, 0 },
+ { 0x013E, 0x96, 0 },
+ { 0x0141, 0x9D, 0 },
+ { 0x0142, 0x88, 0 },
+ { 0x0143, 0xE3, 0 },
+ { 0x0144, 0xE4, 0 },
+ { 0x0147, 0xD5, 0 },
+ { 0x0148, 0xE5, 0 },
+ { 0x0150, 0x8A, 0 },
+ { 0x0151, 0x8B, 0 },
+ { 0x0154, 0xE8, 0 },
+ { 0x0155, 0xEA, 0 },
+ { 0x0158, 0xFC, 0 },
+ { 0x0159, 0xFD, 0 },
+ { 0x015A, 0x97, 0 },
+ { 0x015B, 0x98, 0 },
+ { 0x015E, 0xB8, 0 },
+ { 0x015F, 0xAD, 0 },
+ { 0x0160, 0xE6, 0 },
+ { 0x0161, 0xE7, 0 },
+ { 0x0162, 0xDD, 0 },
+ { 0x0163, 0xEE, 0 },
+ { 0x0164, 0x9B, 0 },
+ { 0x0165, 0x9C, 0 },
+ { 0x016E, 0xDE, 0 },
+ { 0x016F, 0x85, 0 },
+ { 0x0170, 0xEB, 0 },
+ { 0x0171, 0xFB, 0 },
+ { 0x0179, 0x8D, 0 },
+ { 0x017A, 0xAB, 0 },
+ { 0x017B, 0xBD, 0 },
+ { 0x017C, 0xBE, 0 },
+ { 0x017D, 0xA6, 0 },
+ { 0x017E, 0xA7, 0 },
+ { 0x02C7, 0xF3, 0 },
+ { 0x02D8, 0xF4, 0 },
+ { 0x02D9, 0xFA, 0 },
+ { 0x02DB, 0xF2, 0 },
+ { 0x02DD, 0xF1, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM852ByteCvtData =
+{
+ aImplIBM852ToUniTab,
+ nullptr,
+ nullptr,
+ nullptr,
+ aImplIBM852ToCharTabEx,
+ IBM852UNI_START, IBM852UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM852TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM852TextEncodingData
+ = { { &aImplIBM852ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-2",
+ "ibm852",
+ 1,
+ 1,
+ 1,
+ 238,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* DOS/OS2, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */
+
+/* ======================================================================= */
+
+/* IBM-855 */
+/* Dos Standard CharSet for Cyrillic */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp855.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM855UNI_START 0x80
+#define IBM855UNI_END 0xFF
+sal_uInt16 const aImplIBM855ToUniTab[IBM855UNI_END - IBM855UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, /* 0x80 */
+ 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408, /* 0x80 */
+ 0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, /* 0x90 */
+ 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A, /* 0x90 */
+ 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, /* 0xA0 */
+ 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, /* 0xB0 */
+ 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, /* 0xC0 */
+ 0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, /* 0xD0 */
+ 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580, /* 0xD0 */
+ 0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, /* 0xE0 */
+ 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116, /* 0xE0 */
+ 0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, /* 0xF0 */
+ 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM855CHAR_START 0x0401
+#define IBM855CHAR_END 0x045F
+unsigned char const aImplIBM855ToCharTab[IBM855CHAR_END - IBM855CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x85, 0x81, 0x83, 0x87, 0x89, 0x8B, 0x8D, /* 0x0400 */
+ 0x8F, 0x91, 0x93, 0x95, 0x97, 0, 0x99, 0x9B, /* 0x0400 */
+ 0xA1, 0xA3, 0xEC, 0xAD, 0xA7, 0xA9, 0xEA, 0xF4, /* 0x0410 */
+ 0xB8, 0xBE, 0xC7, 0xD1, 0xD3, 0xD5, 0xD7, 0xDD, /* 0x0410 */
+ 0xE2, 0xE4, 0xE6, 0xE8, 0xAB, 0xB6, 0xA5, 0xFC, /* 0x0420 */
+ 0xF6, 0xFA, 0x9F, 0xF2, 0xEE, 0xF8, 0x9D, 0xE0, /* 0x0420 */
+ 0xA0, 0xA2, 0xEB, 0xAC, 0xA6, 0xA8, 0xE9, 0xF3, /* 0x0430 */
+ 0xB7, 0xBD, 0xC6, 0xD0, 0xD2, 0xD4, 0xD6, 0xD8, /* 0x0430 */
+ 0xE1, 0xE3, 0xE5, 0xE7, 0xAA, 0xB5, 0xA4, 0xFB, /* 0x0440 */
+ 0xF5, 0xF9, 0x9E, 0xF1, 0xED, 0xF7, 0x9C, 0xDE, /* 0x0440 */
+ 0, 0x84, 0x80, 0x82, 0x86, 0x88, 0x8A, 0x8C, /* 0x0450 */
+ 0x8E, 0x90, 0x92, 0x94, 0x96, 0, 0x98, 0x9A, /* 0x0450 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM855TOCHARTABEX_COUNT 36
+ImplUniCharTabData const aImplIBM855ToCharTabEx[IBM855TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xFF, 0 },
+ { 0x00A4, 0xCF, 0 },
+ { 0x00A7, 0xFD, 0 },
+ { 0x00AB, 0xAE, 0 },
+ { 0x00AD, 0xF0, 0 },
+ { 0x00BB, 0xAF, 0 },
+ { 0x2116, 0xEF, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM855ByteCvtData =
+{
+ aImplIBM855ToUniTab,
+ nullptr,
+ aImplIBM855ToCharTab,
+ nullptr,
+ aImplIBM855ToCharTabEx,
+ IBM855UNI_START, IBM855UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM855CHAR_START, IBM855CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM855TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM855TextEncodingData
+ = { { &aImplIBM855ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-5",
+ "iso-8859-5",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* DOS/OS2, SCRIPT_CYRILLIC, pc code page 855, mac encoding 7 */
+
+/* ======================================================================= */
+
+/* IBM-857 */
+/* Dos Standard CharSet for Turkish */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp857.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM857UNI_START 0x80
+#define IBM857UNI_END 0xFF
+sal_uInt16 const aImplIBM857ToUniTab[IBM857UNI_END - IBM857UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5, /* 0x80 */
+ 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, /* 0x90 */
+ 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F, /* 0x90 */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, /* 0xA0 */
+ 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, /* 0xB0 */
+ 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, /* 0xC0 */
+ 0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0, 0x00CD, 0x00CE, /* 0xD0 */
+ 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, /* 0xD0 */
+ 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0, /* 0xE0 */
+ 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4, /* 0xE0 */
+ 0x00AD, 0x00B1, 0, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, /* 0xF0 */
+ 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM857CHAR_START 0x00A0
+#define IBM857CHAR_END 0x00FF
+unsigned char const aImplIBM857ToCharTab[IBM857CHAR_END - IBM857CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5, /* 0x00A0 */
+ 0xF9, 0xB8, 0xD1, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE, /* 0x00A0 */
+ 0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA, /* 0x00B0 */
+ 0xF7, 0xFB, 0xD0, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, /* 0x00B0 */
+ 0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */
+ 0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8, /* 0x00C0 */
+ 0, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0xE8, /* 0x00D0 */
+ 0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0, 0, 0xE1, /* 0x00D0 */
+ 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */
+ 0x8A, 0x82, 0x88, 0x89, 0xEC, 0xA1, 0x8C, 0x8B, /* 0x00E0 */
+ 0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* 0x00F0 */
+ 0x9B, 0x97, 0xA3, 0x96, 0x81, 0, 0, 0xED /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM857TOCHARTABEX_COUNT 35
+ImplUniCharTabData const aImplIBM857ToCharTabEx[IBM857TOCHARTABEX_COUNT] =
+{
+ { 0x011E, 0xA6, 0 },
+ { 0x011F, 0xA7, 0 },
+ { 0x0130, 0x98, 0 },
+ { 0x0131, 0x8D, 0 },
+ { 0x015E, 0x9E, 0 },
+ { 0x015F, 0x9F, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM857ByteCvtData =
+{
+ aImplIBM857ToUniTab,
+ nullptr,
+ aImplIBM857ToCharTab,
+ nullptr,
+ aImplIBM857ToCharTabEx,
+ IBM857UNI_START, IBM857UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM857CHAR_START, IBM857CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM857TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM857TextEncodingData
+ = { { &aImplIBM857ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-9",
+ "iso-8859-9",
+ 1,
+ 1,
+ 1,
+ 162,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* DOS/OS2, SCRIPT_TURKISH, pc code page 857, mac encoding 35 */
+
+/* ======================================================================= */
+
+/* IBM-866 */
+/* Dos Standard CharSet for CyrillicRussian */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp866.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM866UNI_START 0x80
+#define IBM866UNI_END 0xFF
+sal_uInt16 const aImplIBM866ToUniTab[IBM866UNI_END - IBM866UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0x80 */
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0x80 */
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0x90 */
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0x90 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xA0 */
+ 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xE0 */
+ 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, /* 0xE0 */
+ 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM866CHAR_START 0x0401
+#define IBM866CHAR_END 0x045E
+unsigned char const aImplIBM866ToCharTab[IBM866CHAR_END - IBM866CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0, 0, 0, 0xF2, 0, 0, 0xF4, /* 0x0400 */
+ 0, 0, 0, 0, 0, 0, 0xF6, 0, /* 0x0400 */
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0410 */
+ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, /* 0x0410 */
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0420 */
+ 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, /* 0x0420 */
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x0430 */
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x0430 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0440 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0440 */
+ 0, 0xF1, 0, 0, 0xF3, 0, 0, 0xF5, /* 0x0450 */
+ 0, 0, 0, 0, 0, 0, 0xF7 /* 0x0450 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM866TOCHARTABEX_COUNT 56
+ImplUniCharTabData const aImplIBM866ToCharTabEx[IBM866TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xFF, 0 },
+ { 0x00A4, 0xFD, 0 },
+ { 0x00B0, 0xF8, 0 },
+ { 0x00B7, 0xFA, 0 },
+ { 0x2116, 0xFC, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x221A, 0xFB, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2552, 0xD5, 0 },
+ { 0x2553, 0xD6, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2555, 0xB8, 0 },
+ { 0x2556, 0xB7, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x2558, 0xD4, 0 },
+ { 0x2559, 0xD3, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255B, 0xBE, 0 },
+ { 0x255C, 0xBD, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x255E, 0xC6, 0 },
+ { 0x255F, 0xC7, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2561, 0xB5, 0 },
+ { 0x2562, 0xB6, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2564, 0xD1, 0 },
+ { 0x2565, 0xD2, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2567, 0xCF, 0 },
+ { 0x2568, 0xD0, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256A, 0xD8, 0 },
+ { 0x256B, 0xD7, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM866ByteCvtData =
+{
+ aImplIBM866ToUniTab,
+ nullptr,
+ aImplIBM866ToCharTab,
+ nullptr,
+ aImplIBM866ToCharTabEx,
+ IBM866UNI_START, IBM866UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM866CHAR_START, IBM866CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM866TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM866TextEncodingData
+ = { { &aImplIBM866ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-5",
+ "cp866",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* DOS/OS2, SCRIPT_LATIN, pc code page 866, mac encoding 7 */
+
+/* ======================================================================= */
+
+/* IBM-869 */
+/* Dos Standard CharSet for Greek2 */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp869.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM869UNI_START 0x86
+#define IBM869UNI_END 0xFF
+sal_uInt16 const aImplIBM869ToUniTab[IBM869UNI_END - IBM869UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0386, 0, /* 0x80 */
+ 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389, /* 0x80 */
+ 0x038A, 0x03AA, 0x038C, 0, 0, 0x038E, 0x03AB, 0x00A9, /* 0x90 */
+ 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF, /* 0x90 */
+ 0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, /* 0xA0 */
+ 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, /* 0xB0 */
+ 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x03A0, 0x03A1, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3, /* 0xC0 */
+ 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, /* 0xD0 */
+ 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580, /* 0xD0 */
+ 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, /* 0xE0 */
+ 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384, /* 0xE0 */
+ 0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, /* 0xF0 */
+ 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM869CHAR_START 0x0384
+#define IBM869CHAR_END 0x03CE
+unsigned char const aImplIBM869ToCharTab[IBM869CHAR_END - IBM869CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEF, 0xF7, 0x86, 0, /* 0x0380 */
+ 0x8D, 0x8F, 0x90, 0, 0x92, 0, 0x95, 0x98, /* 0x0380 */
+ 0xA1, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, /* 0x0390 */
+ 0xAC, 0xAD, 0xB5, 0xB6, 0xB7, 0xB8, 0xBD, 0xBE, /* 0x0390 */
+ 0xC6, 0xC7, 0, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, /* 0x03A0 */
+ 0xD4, 0xD5, 0x91, 0x96, 0x9B, 0x9D, 0x9E, 0x9F, /* 0x03A0 */
+ 0xFC, 0xD6, 0xD7, 0xD8, 0xDD, 0xDE, 0xE0, 0xE1, /* 0x03B0 */
+ 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, /* 0x03B0 */
+ 0xEA, 0xEB, 0xED, 0xEC, 0xEE, 0xF2, 0xF3, 0xF4, /* 0x03C0 */
+ 0xF6, 0xFA, 0xA0, 0xFB, 0xA2, 0xA3, 0xFD /* 0x03C0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM869TOCHARTABEX_COUNT 48
+ImplUniCharTabData const aImplIBM869ToCharTabEx[IBM869TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xFF, 0 },
+ { 0x00A3, 0x9C, 0 },
+ { 0x00A6, 0x8A, 0 },
+ { 0x00A7, 0xF5, 0 },
+ { 0x00A8, 0xF9, 0 },
+ { 0x00A9, 0x97, 0 },
+ { 0x00AB, 0xAE, 0 },
+ { 0x00AC, 0x89, 0 },
+ { 0x00AD, 0xF0, 0 },
+ { 0x00B0, 0xF8, 0 },
+ { 0x00B1, 0xF1, 0 },
+ { 0x00B2, 0x99, 0 },
+ { 0x00B3, 0x9A, 0 },
+ { 0x00B7, 0x88, 0 },
+ { 0x00BB, 0xAF, 0 },
+ { 0x00BD, 0xAB, 0 },
+ { 0x2015, 0x8E, 0 },
+ { 0x2018, 0x8B, 0 },
+ { 0x2019, 0x8C, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM869ByteCvtData =
+{
+ aImplIBM869ToUniTab,
+ nullptr,
+ aImplIBM869ToCharTab,
+ nullptr,
+ aImplIBM869ToCharTabEx,
+ IBM869UNI_START, IBM869UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM869CHAR_START, IBM869CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM869TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM869TextEncodingData
+ = { { &aImplIBM869ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-7",
+ "iso-8859-7",
+ 1,
+ 1,
+ 1,
+ 161,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* DOS/OS2, SCRIPT_LATIN, pc code page 869, mac encoding 6 */
+
+/* ======================================================================= */
+
+/* MS-1250 */
+/* Windows CodePage for Eastern European (WinLatin2) */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1250.txt from 04/15/98 Version 2.01 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1250UNI_START 0x80
+#define MS1250UNI_END 0xFF
+sal_uInt16 const aImplMS1250ToUniTab[MS1250UNI_END - MS1250UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0, 0x201A, 0, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179, /* 0x80 */
+ 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A, /* 0x90 */
+ 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C, /* 0xB0 */
+ 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, /* 0xC0 */
+ 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, /* 0xC0 */
+ 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, /* 0xD0 */
+ 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, /* 0xE0 */
+ 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, /* 0xE0 */
+ 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1250TOCHARTABEX_COUNT 123
+ImplUniCharTabData const aImplMS1250ToCharTabEx[MS1250TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A6, 0xA6, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xAB, 0 },
+ { 0x00AC, 0xAC, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AE, 0xAE, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B4, 0xB4, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xB6, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00B8, 0xB8, 0 },
+ { 0x00BB, 0xBB, 0 },
+ { 0x00C1, 0xC1, 0 },
+ { 0x00C2, 0xC2, 0 },
+ { 0x00C4, 0xC4, 0 },
+ { 0x00C7, 0xC7, 0 },
+ { 0x00C9, 0xC9, 0 },
+ { 0x00CB, 0xCB, 0 },
+ { 0x00CD, 0xCD, 0 },
+ { 0x00CE, 0xCE, 0 },
+ { 0x00D3, 0xD3, 0 },
+ { 0x00D4, 0xD4, 0 },
+ { 0x00D6, 0xD6, 0 },
+ { 0x00D7, 0xD7, 0 },
+ { 0x00DA, 0xDA, 0 },
+ { 0x00DC, 0xDC, 0 },
+ { 0x00DD, 0xDD, 0 },
+ { 0x00DF, 0xDF, 0 },
+ { 0x00E1, 0xE1, 0 },
+ { 0x00E2, 0xE2, 0 },
+ { 0x00E4, 0xE4, 0 },
+ { 0x00E7, 0xE7, 0 },
+ { 0x00E9, 0xE9, 0 },
+ { 0x00EB, 0xEB, 0 },
+ { 0x00ED, 0xED, 0 },
+ { 0x00EE, 0xEE, 0 },
+ { 0x00F3, 0xF3, 0 },
+ { 0x00F4, 0xF4, 0 },
+ { 0x00F6, 0xF6, 0 },
+ { 0x00F7, 0xF7, 0 },
+ { 0x00FA, 0xFA, 0 },
+ { 0x00FC, 0xFC, 0 },
+ { 0x00FD, 0xFD, 0 },
+ { 0x0102, 0xC3, 0 },
+ { 0x0103, 0xE3, 0 },
+ { 0x0104, 0xA5, 0 },
+ { 0x0105, 0xB9, 0 },
+ { 0x0106, 0xC6, 0 },
+ { 0x0107, 0xE6, 0 },
+ { 0x010C, 0xC8, 0 },
+ { 0x010D, 0xE8, 0 },
+ { 0x010E, 0xCF, 0 },
+ { 0x010F, 0xEF, 0 },
+ { 0x0110, 0xD0, 0 },
+ { 0x0111, 0xF0, 0 },
+ { 0x0118, 0xCA, 0 },
+ { 0x0119, 0xEA, 0 },
+ { 0x011A, 0xCC, 0 },
+ { 0x011B, 0xEC, 0 },
+ { 0x0139, 0xC5, 0 },
+ { 0x013A, 0xE5, 0 },
+ { 0x013D, 0xBC, 0 },
+ { 0x013E, 0xBE, 0 },
+ { 0x0141, 0xA3, 0 },
+ { 0x0142, 0xB3, 0 },
+ { 0x0143, 0xD1, 0 },
+ { 0x0144, 0xF1, 0 },
+ { 0x0147, 0xD2, 0 },
+ { 0x0148, 0xF2, 0 },
+ { 0x0150, 0xD5, 0 },
+ { 0x0151, 0xF5, 0 },
+ { 0x0154, 0xC0, 0 },
+ { 0x0155, 0xE0, 0 },
+ { 0x0158, 0xD8, 0 },
+ { 0x0159, 0xF8, 0 },
+ { 0x015A, 0x8C, 0 },
+ { 0x015B, 0x9C, 0 },
+ { 0x015E, 0xAA, 0 },
+ { 0x015F, 0xBA, 0 },
+ { 0x0160, 0x8A, 0 },
+ { 0x0161, 0x9A, 0 },
+ { 0x0162, 0xDE, 0 },
+ { 0x0163, 0xFE, 0 },
+ { 0x0164, 0x8D, 0 },
+ { 0x0165, 0x9D, 0 },
+ { 0x016E, 0xD9, 0 },
+ { 0x016F, 0xF9, 0 },
+ { 0x0170, 0xDB, 0 },
+ { 0x0171, 0xFB, 0 },
+ { 0x0179, 0x8F, 0 },
+ { 0x017A, 0x9F, 0 },
+ { 0x017B, 0xAF, 0 },
+ { 0x017C, 0xBF, 0 },
+ { 0x017D, 0x8E, 0 },
+ { 0x017E, 0x9E, 0 },
+ { 0x02C7, 0xA1, 0 },
+ { 0x02D8, 0xA2, 0 },
+ { 0x02D9, 0xFF, 0 },
+ { 0x02DB, 0xB2, 0 },
+ { 0x02DD, 0xBD, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AC, 0x80, 0 },
+ { 0x2122, 0x99, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1250ByteCvtData =
+{
+ aImplMS1250ToUniTab,
+ nullptr,
+ nullptr,
+ nullptr,
+ aImplMS1250ToCharTabEx,
+ MS1250UNI_START, MS1250UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1250TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1250TextEncodingData
+ = { { &aImplMS1250ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-2",
+ "windows-1250",
+ 1,
+ 1,
+ 1,
+ 238,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* WIN, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */
+
+/* ======================================================================= */
+
+/* MS-1251 */
+/* Windows CodePage for Cyrillic */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1251.txt from 04/15/98 Version 2.01 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1251UNI_START 0x80
+#define MS1251UNI_END 0xFF
+sal_uInt16 const aImplMS1251ToUniTab[MS1251UNI_END - MS1251UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, /* 0x80 */
+ 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, /* 0x90 */
+ 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, /* 0xB0 */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0xC0 */
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0xC0 */
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0xD0 */
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0xD0 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xE0 */
+ 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xE0 */
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xF0 */
+ 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1251CHAR_START 0x0401
+#define MS1251CHAR_END 0x045F
+unsigned char const aImplMS1251ToCharTab[MS1251CHAR_END - MS1251CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA8, 0x80, 0x81, 0xAA, 0xBD, 0xB2, 0xAF, /* 0x0400 */
+ 0xA3, 0x8A, 0x8C, 0x8E, 0x8D, 0, 0xA1, 0x8F, /* 0x0400 */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0410 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0410 */
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0420 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x0420 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0430 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0430 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0440 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, /* 0x0440 */
+ 0, 0xB8, 0x90, 0x83, 0xBA, 0xBE, 0xB3, 0xBF, /* 0x0450 */
+ 0xBC, 0x9A, 0x9C, 0x9E, 0x9D, 0, 0xA2, 0x9F /* 0x0450 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1251TOCHARTABEX_COUNT 35
+ImplUniCharTabData const aImplMS1251ToCharTabEx[MS1251TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A6, 0xA6, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xAB, 0 },
+ { 0x00AC, 0xAC, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AE, 0xAE, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xB6, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00BB, 0xBB, 0 },
+ { 0x0490, 0xA5, 0 },
+ { 0x0491, 0xB4, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AC, 0x88, 0 },
+ { 0x2116, 0xB9, 0 },
+ { 0x2122, 0x99, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1251ByteCvtData =
+{
+ aImplMS1251ToUniTab,
+ nullptr,
+ aImplMS1251ToCharTab,
+ nullptr,
+ aImplMS1251ToCharTabEx,
+ MS1251UNI_START, MS1251UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ MS1251CHAR_START, MS1251CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1251TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1251TextEncodingData
+ = { { &aImplMS1251ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-5",
+ "windows-1251",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* WIN, SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 7 */
+
+/* ======================================================================= */
+
+/* MS-1253 */
+/* Windows Standard CharSet for Greek */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1253.txt from 04/15/98 Version 2.01 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1253UNI_START 0x80
+#define MS1253UNI_END 0xFF
+sal_uInt16 const aImplMS1253ToUniTab[MS1253UNI_END - MS1253UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0, 0x2030, 0, 0x2039, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0, 0x2122, 0, 0x203A, 0, 0, 0, 0, /* 0x90 */
+ 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, /* 0xB0 */
+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0xC0 */
+ 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0xC0 */
+ 0x03A0, 0x03A1, 0, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, /* 0xD0 */
+ 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, /* 0xD0 */
+ 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0xE0 */
+ 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0xE0 */
+ 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, /* 0xF0 */
+ 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1253CHAR_START 0x0384
+#define MS1253CHAR_END 0x03CE
+unsigned char const aImplMS1253ToCharTab[MS1253CHAR_END - MS1253CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB4, 0xA1, 0xA2, 0, /* 0x0380 */
+ 0xB8, 0xB9, 0xBA, 0, 0xBC, 0, 0xBE, 0xBF, /* 0x0380 */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0390 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0390 */
+ 0xD0, 0xD1, 0, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x03A0 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x03A0 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x03B0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x03B0 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x03C0 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE /* 0x03C0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1253TOCHARTABEX_COUNT 40
+ImplUniCharTabData const aImplMS1253ToCharTabEx[MS1253TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A5, 0xA5, 0 },
+ { 0x00A6, 0xA6, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xAB, 0 },
+ { 0x00AC, 0xAC, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AE, 0xAE, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B2, 0xB2, 0 },
+ { 0x00B3, 0xB3, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xB6, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00BB, 0xBB, 0 },
+ { 0x00BD, 0xBD, 0 },
+ { 0x0192, 0x83, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2015, 0xAF, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AC, 0x80, 0 },
+ { 0x2122, 0x99, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1253ByteCvtData =
+{
+ aImplMS1253ToUniTab,
+ nullptr,
+ aImplMS1253ToCharTab,
+ nullptr,
+ aImplMS1253ToCharTabEx,
+ MS1253UNI_START, MS1253UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ MS1253CHAR_START, MS1253CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1253TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1253TextEncodingData
+ = { { &aImplMS1253ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-7",
+ "windows-1253",
+ 1,
+ 1,
+ 1,
+ 161,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* WIN, SCRIPT_GREEK, pc code page 869, mac encoding 6 */
+
+/* ======================================================================= */
+
+/* MS-1254 */
+/* Windows Standard CharSet for Turkish */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1254.txt from 04/15/98 Version 2.01 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1254UNI_START 0x80
+#define MS1254UNI_END 0xFF
+sal_uInt16 const aImplMS1254ToUniTab[MS1254UNI_END - MS1254UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0, 0, 0, /* 0x80 */
+ 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0, 0, 0x0178, /* 0x90 */
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, /* 0xD0 */
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1254CHAR_START 0x00A0
+#define MS1254CHAR_END 0x00FF
+unsigned char const aImplMS1254ToCharTab[MS1254CHAR_END - MS1254CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */
+ 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x00B0 */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x00C0 */
+ 0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x00D0 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0, 0, 0xDF, /* 0x00D0 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x00E0 */
+ 0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x00F0 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0, 0xFF /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1254TOCHARTABEX_COUNT 31
+ImplUniCharTabData const aImplMS1254ToCharTabEx[MS1254TOCHARTABEX_COUNT] =
+{
+ { 0x011E, 0xD0, 0 },
+ { 0x011F, 0xF0, 0 },
+ { 0x0130, 0xDD, 0 },
+ { 0x0131, 0xFD, 0 },
+ { 0x0152, 0x8C, 0 },
+ { 0x0153, 0x9C, 0 },
+ { 0x015E, 0xDE, 0 },
+ { 0x015F, 0xFE, 0 },
+ { 0x0160, 0x8A, 0 },
+ { 0x0161, 0x9A, 0 },
+ { 0x0178, 0x9F, 0 },
+ { 0x0192, 0x83, 0 },
+ { 0x02C6, 0x88, 0 },
+ { 0x02DC, 0x98, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AC, 0x80, 0 },
+ { 0x2122, 0x99, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1254ByteCvtData =
+{
+ aImplMS1254ToUniTab,
+ nullptr,
+ aImplMS1254ToCharTab,
+ nullptr,
+ aImplMS1254ToCharTabEx,
+ MS1254UNI_START, MS1254UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ MS1254CHAR_START, MS1254CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1254TOCHARTABEX_COUNT,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1254TextEncodingData
+ = { { &aImplMS1254ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-9",
+ "windows-1254",
+ 1,
+ 1,
+ 1,
+ 162,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* WIN, SCRIPT_TURKISH, pc code page 857, mac encoding 35 */
+
+/* ======================================================================= */
+
+/* MS-1257 */
+/* Windows Standard CharSet for Baltic */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1257.txt from 04/15/98 Version 2.01 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1257UNI_START 0x80
+#define MS1257UNI_END 0xFF
+sal_uInt16 const aImplMS1257ToUniTab[MS1257UNI_END - MS1257UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0, 0x201A, 0, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0, 0x2030, 0, 0x2039, 0, 0x00A8, 0x02C7, 0x00B8, /* 0x80 */
+ 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0, 0x2122, 0, 0x203A, 0, 0x00AF, 0x02DB, 0, /* 0x90 */
+ 0x00A0, 0, 0x00A2, 0x00A3, 0x00A4, 0, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, /* 0xB0 */
+ 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, /* 0xC0 */
+ 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, /* 0xC0 */
+ 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, /* 0xD0 */
+ 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, /* 0xE0 */
+ 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, /* 0xE0 */
+ 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1257CHAR_START 0x00A0
+#define MS1257CHAR_END 0x017E
+unsigned char const aImplMS1257ToCharTab[MS1257CHAR_END - MS1257CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA0, 0, 0xA2, 0xA3, 0xA4, 0, 0xA6, 0xA7, /* 0x00A0 */
+ 0x8D, 0xA9, 0, 0xAB, 0xAC, 0xAD, 0xAE, 0x9D, /* 0x00A0 */
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */
+ 0x8F, 0xB9, 0, 0xBB, 0xBC, 0xBD, 0xBE, 0, /* 0x00B0 */
+ 0, 0, 0, 0, 0xC4, 0xC5, 0xAF, 0, /* 0x00C0 */
+ 0, 0xC9, 0, 0, 0, 0, 0, 0, /* 0x00C0 */
+ 0, 0, 0, 0xD3, 0, 0xD5, 0xD6, 0xD7, /* 0x00D0 */
+ 0xA8, 0, 0, 0, 0xDC, 0, 0, 0xDF, /* 0x00D0 */
+ 0, 0, 0, 0, 0xE4, 0xE5, 0xBF, 0, /* 0x00E0 */
+ 0, 0xE9, 0, 0, 0, 0, 0, 0, /* 0x00E0 */
+ 0, 0, 0, 0xF3, 0, 0xF5, 0xF6, 0xF7, /* 0x00F0 */
+ 0xB8, 0, 0, 0, 0xFC, 0, 0, 0, /* 0x00F0 */
+ 0xC2, 0xE2, 0, 0, 0xC0, 0xE0, 0xC3, 0xE3, /* 0x0100 */
+ 0, 0, 0, 0, 0xC8, 0xE8, 0, 0, /* 0x0100 */
+ 0, 0, 0xC7, 0xE7, 0, 0, 0xCB, 0xEB, /* 0x0110 */
+ 0xC6, 0xE6, 0, 0, 0, 0, 0, 0, /* 0x0110 */
+ 0, 0, 0xCC, 0xEC, 0, 0, 0, 0, /* 0x0120 */
+ 0, 0, 0xCE, 0xEE, 0, 0, 0xC1, 0xE1, /* 0x0120 */
+ 0, 0, 0, 0, 0, 0, 0xCD, 0xED, /* 0x0130 */
+ 0, 0, 0, 0xCF, 0xEF, 0, 0, 0, /* 0x0130 */
+ 0, 0xD9, 0xF9, 0xD1, 0xF1, 0xD2, 0xF2, 0, /* 0x0140 */
+ 0, 0, 0, 0, 0xD4, 0xF4, 0, 0, /* 0x0140 */
+ 0, 0, 0, 0, 0, 0, 0xAA, 0xBA, /* 0x0150 */
+ 0, 0, 0xDA, 0xFA, 0, 0, 0, 0, /* 0x0150 */
+ 0xD0, 0xF0, 0, 0, 0, 0, 0, 0, /* 0x0160 */
+ 0, 0, 0xDB, 0xFB, 0, 0, 0, 0, /* 0x0160 */
+ 0, 0, 0xD8, 0xF8, 0, 0, 0, 0, /* 0x0170 */
+ 0, 0xCA, 0xEA, 0xDD, 0xFD, 0xDE, 0xFE /* 0x0170 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1257TOCHARTABEX_COUNT 20
+ImplUniCharTabData const aImplMS1257ToCharTabEx[MS1257TOCHARTABEX_COUNT] =
+{
+ { 0x02C7, 0x8E, 0 },
+ { 0x02D9, 0xFF, 0 },
+ { 0x02DB, 0x9E, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AC, 0x80, 0 },
+ { 0x2122, 0x99, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1257ByteCvtData =
+{
+ aImplMS1257ToUniTab,
+ nullptr,
+ aImplMS1257ToCharTab,
+ nullptr,
+ aImplMS1257ToCharTabEx,
+ MS1257UNI_START, MS1257UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ MS1257CHAR_START, MS1257CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1257TOCHARTABEX_COUNT,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1257TextEncodingData
+ = { { &aImplMS1257ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-4",
+ "windows-1257",
+ 1,
+ 1,
+ 1,
+ 186,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* WIN, SCRIPT_BALTIC, pc code page 775, mac encoding 29 */
+
+/* ======================================================================= */
+
+/* ISO-8859-2 */
+/* Unix Standard for Eastern European (Latin2) */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-2.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO88592UNI_START 0xA0
+#define ISO88592UNI_END 0xFF
+sal_uInt16 const aImplISO88592ToUniTab[ISO88592UNI_END - ISO88592UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, /* 0xA0 */
+ 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, /* 0xB0 */
+ 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, /* 0xB0 */
+ 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, /* 0xC0 */
+ 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, /* 0xC0 */
+ 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, /* 0xD0 */
+ 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, /* 0xE0 */
+ 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, /* 0xE0 */
+ 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88592TOCHARTABEX_COUNT 96
+ImplUniCharTabData const aImplISO88592ToCharTabEx[ISO88592TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B4, 0xB4, 0 },
+ { 0x00B8, 0xB8, 0 },
+ { 0x00C1, 0xC1, 0 },
+ { 0x00C2, 0xC2, 0 },
+ { 0x00C4, 0xC4, 0 },
+ { 0x00C7, 0xC7, 0 },
+ { 0x00C9, 0xC9, 0 },
+ { 0x00CB, 0xCB, 0 },
+ { 0x00CD, 0xCD, 0 },
+ { 0x00CE, 0xCE, 0 },
+ { 0x00D3, 0xD3, 0 },
+ { 0x00D4, 0xD4, 0 },
+ { 0x00D6, 0xD6, 0 },
+ { 0x00D7, 0xD7, 0 },
+ { 0x00DA, 0xDA, 0 },
+ { 0x00DC, 0xDC, 0 },
+ { 0x00DD, 0xDD, 0 },
+ { 0x00DF, 0xDF, 0 },
+ { 0x00E1, 0xE1, 0 },
+ { 0x00E2, 0xE2, 0 },
+ { 0x00E4, 0xE4, 0 },
+ { 0x00E7, 0xE7, 0 },
+ { 0x00E9, 0xE9, 0 },
+ { 0x00EB, 0xEB, 0 },
+ { 0x00ED, 0xED, 0 },
+ { 0x00EE, 0xEE, 0 },
+ { 0x00F3, 0xF3, 0 },
+ { 0x00F4, 0xF4, 0 },
+ { 0x00F6, 0xF6, 0 },
+ { 0x00F7, 0xF7, 0 },
+ { 0x00FA, 0xFA, 0 },
+ { 0x00FC, 0xFC, 0 },
+ { 0x00FD, 0xFD, 0 },
+ { 0x0102, 0xC3, 0 },
+ { 0x0103, 0xE3, 0 },
+ { 0x0104, 0xA1, 0 },
+ { 0x0105, 0xB1, 0 },
+ { 0x0106, 0xC6, 0 },
+ { 0x0107, 0xE6, 0 },
+ { 0x010C, 0xC8, 0 },
+ { 0x010D, 0xE8, 0 },
+ { 0x010E, 0xCF, 0 },
+ { 0x010F, 0xEF, 0 },
+ { 0x0110, 0xD0, 0 },
+ { 0x0111, 0xF0, 0 },
+ { 0x0118, 0xCA, 0 },
+ { 0x0119, 0xEA, 0 },
+ { 0x011A, 0xCC, 0 },
+ { 0x011B, 0xEC, 0 },
+ { 0x0139, 0xC5, 0 },
+ { 0x013A, 0xE5, 0 },
+ { 0x013D, 0xA5, 0 },
+ { 0x013E, 0xB5, 0 },
+ { 0x0141, 0xA3, 0 },
+ { 0x0142, 0xB3, 0 },
+ { 0x0143, 0xD1, 0 },
+ { 0x0144, 0xF1, 0 },
+ { 0x0147, 0xD2, 0 },
+ { 0x0148, 0xF2, 0 },
+ { 0x0150, 0xD5, 0 },
+ { 0x0151, 0xF5, 0 },
+ { 0x0154, 0xC0, 0 },
+ { 0x0155, 0xE0, 0 },
+ { 0x0158, 0xD8, 0 },
+ { 0x0159, 0xF8, 0 },
+ { 0x015A, 0xA6, 0 },
+ { 0x015B, 0xB6, 0 },
+ { 0x015E, 0xAA, 0 },
+ { 0x015F, 0xBA, 0 },
+ { 0x0160, 0xA9, 0 },
+ { 0x0161, 0xB9, 0 },
+ { 0x0162, 0xDE, 0 },
+ { 0x0163, 0xFE, 0 },
+ { 0x0164, 0xAB, 0 },
+ { 0x0165, 0xBB, 0 },
+ { 0x016E, 0xD9, 0 },
+ { 0x016F, 0xF9, 0 },
+ { 0x0170, 0xDB, 0 },
+ { 0x0171, 0xFB, 0 },
+ { 0x0179, 0xAC, 0 },
+ { 0x017A, 0xBC, 0 },
+ { 0x017B, 0xAF, 0 },
+ { 0x017C, 0xBF, 0 },
+ { 0x017D, 0xAE, 0 },
+ { 0x017E, 0xBE, 0 },
+ { 0x02C7, 0xB7, 0 },
+ { 0x02D8, 0xA2, 0 },
+ { 0x02D9, 0xFF, 0 },
+ { 0x02DB, 0xB2, 0 },
+ { 0x02DD, 0xBD, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88592ByteCvtData =
+{
+ aImplISO88592ToUniTab,
+ aImpl8090SameToUniTab,
+ aImpl8090SameToCharTab,
+ nullptr,
+ aImplISO88592ToCharTabEx,
+ ISO88592UNI_START, ISO88592UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ ISO88592TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88592TextEncodingData
+ = { { &aImplISO88592ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-2",
+ "iso-8859-2",
+ 1,
+ 1,
+ 1,
+ 238,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */
+
+/* ======================================================================= */
+
+/* ISO-8859-3 */
+/* Latin3 (Esperanto, Maltese, Turkish) */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-3.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO88593UNI_START 0xA0
+#define ISO88593UNI_END 0xFF
+sal_uInt16 const aImplISO88593ToUniTab[ISO88593UNI_END - ISO88593UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0, 0x0124, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0, 0x017B, /* 0xA0 */
+ 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0, 0x017C, /* 0xB0 */
+ 0x00C0, 0x00C1, 0x00C2, 0, 0x00C4, 0x010A, 0x0108, 0x00C7, /* 0xC0 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF, /* 0xD0 */
+ 0x00E0, 0x00E1, 0x00E2, 0, 0x00E4, 0x010B, 0x0109, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88593TOCHARTABEX_COUNT 89
+ImplUniCharTabData const aImplISO88593ToCharTabEx[ISO88593TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B2, 0xB2, 0 },
+ { 0x00B3, 0xB3, 0 },
+ { 0x00B4, 0xB4, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00B8, 0xB8, 0 },
+ { 0x00BD, 0xBD, 0 },
+ { 0x00C0, 0xC0, 0 },
+ { 0x00C1, 0xC1, 0 },
+ { 0x00C2, 0xC2, 0 },
+ { 0x00C4, 0xC4, 0 },
+ { 0x00C7, 0xC7, 0 },
+ { 0x00C8, 0xC8, 0 },
+ { 0x00C9, 0xC9, 0 },
+ { 0x00CA, 0xCA, 0 },
+ { 0x00CB, 0xCB, 0 },
+ { 0x00CC, 0xCC, 0 },
+ { 0x00CD, 0xCD, 0 },
+ { 0x00CE, 0xCE, 0 },
+ { 0x00CF, 0xCF, 0 },
+ { 0x00D1, 0xD1, 0 },
+ { 0x00D2, 0xD2, 0 },
+ { 0x00D3, 0xD3, 0 },
+ { 0x00D4, 0xD4, 0 },
+ { 0x00D6, 0xD6, 0 },
+ { 0x00D7, 0xD7, 0 },
+ { 0x00D9, 0xD9, 0 },
+ { 0x00DA, 0xDA, 0 },
+ { 0x00DB, 0xDB, 0 },
+ { 0x00DC, 0xDC, 0 },
+ { 0x00DF, 0xDF, 0 },
+ { 0x00E0, 0xE0, 0 },
+ { 0x00E1, 0xE1, 0 },
+ { 0x00E2, 0xE2, 0 },
+ { 0x00E4, 0xE4, 0 },
+ { 0x00E7, 0xE7, 0 },
+ { 0x00E8, 0xE8, 0 },
+ { 0x00E9, 0xE9, 0 },
+ { 0x00EA, 0xEA, 0 },
+ { 0x00EB, 0xEB, 0 },
+ { 0x00EC, 0xEC, 0 },
+ { 0x00ED, 0xED, 0 },
+ { 0x00EE, 0xEE, 0 },
+ { 0x00EF, 0xEF, 0 },
+ { 0x00F1, 0xF1, 0 },
+ { 0x00F2, 0xF2, 0 },
+ { 0x00F3, 0xF3, 0 },
+ { 0x00F4, 0xF4, 0 },
+ { 0x00F6, 0xF6, 0 },
+ { 0x00F7, 0xF7, 0 },
+ { 0x00F9, 0xF9, 0 },
+ { 0x00FA, 0xFA, 0 },
+ { 0x00FB, 0xFB, 0 },
+ { 0x00FC, 0xFC, 0 },
+ { 0x0108, 0xC6, 0 },
+ { 0x0109, 0xE6, 0 },
+ { 0x010A, 0xC5, 0 },
+ { 0x010B, 0xE5, 0 },
+ { 0x011C, 0xD8, 0 },
+ { 0x011D, 0xF8, 0 },
+ { 0x011E, 0xAB, 0 },
+ { 0x011F, 0xBB, 0 },
+ { 0x0120, 0xD5, 0 },
+ { 0x0121, 0xF5, 0 },
+ { 0x0124, 0xA6, 0 },
+ { 0x0125, 0xB6, 0 },
+ { 0x0126, 0xA1, 0 },
+ { 0x0127, 0xB1, 0 },
+ { 0x0130, 0xA9, 0 },
+ { 0x0131, 0xB9, 0 },
+ { 0x0134, 0xAC, 0 },
+ { 0x0135, 0xBC, 0 },
+ { 0x015C, 0xDE, 0 },
+ { 0x015D, 0xFE, 0 },
+ { 0x015E, 0xAA, 0 },
+ { 0x015F, 0xBA, 0 },
+ { 0x016C, 0xDD, 0 },
+ { 0x016D, 0xFD, 0 },
+ { 0x017B, 0xAF, 0 },
+ { 0x017C, 0xBF, 0 },
+ { 0x02D8, 0xA2, 0 },
+ { 0x02D9, 0xFF, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88593ByteCvtData =
+{
+ aImplISO88593ToUniTab,
+ aImpl8090SameToUniTab,
+ aImpl8090SameToCharTab,
+ nullptr,
+ aImplISO88593ToCharTabEx,
+ ISO88593UNI_START, ISO88593UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ ISO88593TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88593TextEncodingData
+ = { { &aImplISO88593ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-3",
+ "iso-8859-3",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_LATIN, pc code page 850 */
+
+/* ======================================================================= */
+
+/* ISO-8859-4 */
+/* Latin4 (Estonian, Latvian, Lithuanian) */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-4.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO88594UNI_START 0xA0
+#define ISO88594UNI_END 0xFF
+sal_uInt16 const aImplISO88594ToUniTab[ISO88594UNI_END - ISO88594UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, /* 0xB0 */
+ 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B, /* 0xB0 */
+ 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, /* 0xC0 */
+ 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A, /* 0xC0 */
+ 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF, /* 0xD0 */
+ 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, /* 0xE0 */
+ 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B, /* 0xE0 */
+ 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88594TOCHARTABEX_COUNT 96
+ImplUniCharTabData const aImplISO88594ToCharTabEx[ISO88594TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AF, 0xAF, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B4, 0xB4, 0 },
+ { 0x00B8, 0xB8, 0 },
+ { 0x00C1, 0xC1, 0 },
+ { 0x00C2, 0xC2, 0 },
+ { 0x00C3, 0xC3, 0 },
+ { 0x00C4, 0xC4, 0 },
+ { 0x00C5, 0xC5, 0 },
+ { 0x00C6, 0xC6, 0 },
+ { 0x00C9, 0xC9, 0 },
+ { 0x00CB, 0xCB, 0 },
+ { 0x00CD, 0xCD, 0 },
+ { 0x00CE, 0xCE, 0 },
+ { 0x00D4, 0xD4, 0 },
+ { 0x00D5, 0xD5, 0 },
+ { 0x00D6, 0xD6, 0 },
+ { 0x00D7, 0xD7, 0 },
+ { 0x00D8, 0xD8, 0 },
+ { 0x00DA, 0xDA, 0 },
+ { 0x00DB, 0xDB, 0 },
+ { 0x00DC, 0xDC, 0 },
+ { 0x00DF, 0xDF, 0 },
+ { 0x00E1, 0xE1, 0 },
+ { 0x00E2, 0xE2, 0 },
+ { 0x00E3, 0xE3, 0 },
+ { 0x00E4, 0xE4, 0 },
+ { 0x00E5, 0xE5, 0 },
+ { 0x00E6, 0xE6, 0 },
+ { 0x00E9, 0xE9, 0 },
+ { 0x00EB, 0xEB, 0 },
+ { 0x00ED, 0xED, 0 },
+ { 0x00EE, 0xEE, 0 },
+ { 0x00F4, 0xF4, 0 },
+ { 0x00F5, 0xF5, 0 },
+ { 0x00F6, 0xF6, 0 },
+ { 0x00F7, 0xF7, 0 },
+ { 0x00F8, 0xF8, 0 },
+ { 0x00FA, 0xFA, 0 },
+ { 0x00FB, 0xFB, 0 },
+ { 0x00FC, 0xFC, 0 },
+ { 0x0100, 0xC0, 0 },
+ { 0x0101, 0xE0, 0 },
+ { 0x0104, 0xA1, 0 },
+ { 0x0105, 0xB1, 0 },
+ { 0x010C, 0xC8, 0 },
+ { 0x010D, 0xE8, 0 },
+ { 0x0110, 0xD0, 0 },
+ { 0x0111, 0xF0, 0 },
+ { 0x0112, 0xAA, 0 },
+ { 0x0113, 0xBA, 0 },
+ { 0x0116, 0xCC, 0 },
+ { 0x0117, 0xEC, 0 },
+ { 0x0118, 0xCA, 0 },
+ { 0x0119, 0xEA, 0 },
+ { 0x0122, 0xAB, 0 },
+ { 0x0123, 0xBB, 0 },
+ { 0x0128, 0xA5, 0 },
+ { 0x0129, 0xB5, 0 },
+ { 0x012A, 0xCF, 0 },
+ { 0x012B, 0xEF, 0 },
+ { 0x012E, 0xC7, 0 },
+ { 0x012F, 0xE7, 0 },
+ { 0x0136, 0xD3, 0 },
+ { 0x0137, 0xF3, 0 },
+ { 0x0138, 0xA2, 0 },
+ { 0x013B, 0xA6, 0 },
+ { 0x013C, 0xB6, 0 },
+ { 0x0145, 0xD1, 0 },
+ { 0x0146, 0xF1, 0 },
+ { 0x014A, 0xBD, 0 },
+ { 0x014B, 0xBF, 0 },
+ { 0x014C, 0xD2, 0 },
+ { 0x014D, 0xF2, 0 },
+ { 0x0156, 0xA3, 0 },
+ { 0x0157, 0xB3, 0 },
+ { 0x0160, 0xA9, 0 },
+ { 0x0161, 0xB9, 0 },
+ { 0x0166, 0xAC, 0 },
+ { 0x0167, 0xBC, 0 },
+ { 0x0168, 0xDD, 0 },
+ { 0x0169, 0xFD, 0 },
+ { 0x016A, 0xDE, 0 },
+ { 0x016B, 0xFE, 0 },
+ { 0x0172, 0xD9, 0 },
+ { 0x0173, 0xF9, 0 },
+ { 0x017D, 0xAE, 0 },
+ { 0x017E, 0xBE, 0 },
+ { 0x02C7, 0xB7, 0 },
+ { 0x02D9, 0xFF, 0 },
+ { 0x02DB, 0xB2, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88594ByteCvtData =
+{
+ aImplISO88594ToUniTab,
+ aImpl8090SameToUniTab,
+ aImpl8090SameToCharTab,
+ nullptr,
+ aImplISO88594ToCharTabEx,
+ ISO88594UNI_START, ISO88594UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ ISO88594TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88594TextEncodingData
+ = { { &aImplISO88594ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-4",
+ "iso-8859-4",
+ 1,
+ 1,
+ 1,
+ 186,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_BALTIC, pc code page 775, mac encoding 29 (?) */
+
+/* ======================================================================= */
+
+/* ISO-8859-5 */
+/* Unix Standard for Cyrillic */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-5.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO88595UNI_START 0xA0
+#define ISO88595UNI_END 0xFF
+sal_uInt16 const aImplISO88595ToUniTab[ISO88595UNI_END - ISO88595UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, /* 0xA0 */
+ 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, /* 0xA0 */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0xB0 */
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0xB0 */
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0xC0 */
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0xC0 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xD0 */
+ 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xD0 */
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xE0 */
+ 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, /* 0xE0 */
+ 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, /* 0xF0 */
+ 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88595CHAR_START 0x0401
+#define ISO88595CHAR_END 0x045F
+unsigned char const aImplISO88595ToCharTab[ISO88595CHAR_END - ISO88595CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x0400 */
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0, 0xAE, 0xAF, /* 0x0400 */
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x0410 */
+ 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x0410 */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0420 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0420 */
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0430 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x0430 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0440 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0440 */
+ 0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0450 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0xFE, 0xFF, /* 0x0450 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88595TOCHARTABEX_COUNT 4
+ImplUniCharTabData const aImplISO88595ToCharTabEx[ISO88595TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A7, 0xFD, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x2116, 0xF0, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88595ByteCvtData =
+{
+ aImplISO88595ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplISO88595ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplISO88595ToCharTabEx,
+ ISO88595UNI_START, ISO88595UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ ISO88595CHAR_START, ISO88595CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ ISO88595TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88595TextEncodingData
+ = { { &aImplISO88595ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-5",
+ "iso-8859-5",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 7 */
+
+/* ======================================================================= */
+
+/* ISO-8859-7 */
+/* Unix Standard for Greek */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-7.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO88597UNI_START 0xA0
+#define ISO88597UNI_END 0xFF
+sal_uInt16 const aImplISO88597ToUniTab[ISO88597UNI_END - ISO88597UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x2018, 0x2019, 0x00A3, 0, 0, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0, 0x00AB, 0x00AC, 0x00AD, 0, 0x2015, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7, /* 0xB0 */
+ 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, /* 0xB0 */
+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0xC0 */
+ 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0xC0 */
+ 0x03A0, 0x03A1, 0, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, /* 0xD0 */
+ 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, /* 0xD0 */
+ 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0xE0 */
+ 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0xE0 */
+ 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, /* 0xF0 */
+ 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88597CHAR_START 0x0384
+#define ISO88597CHAR_END 0x03CE
+unsigned char const aImplISO88597ToCharTab[ISO88597CHAR_END - ISO88597CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB4, 0xB5, 0xB6, 0, /* 0x0380 */
+ 0xB8, 0xB9, 0xBA, 0, 0xBC, 0, 0xBE, 0xBF, /* 0x0380 */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0390 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0390 */
+ 0xD0, 0xD1, 0, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x03A0 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x03A0 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x03B0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x03B0 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x03C0 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE /* 0x03C0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88597TOCHARTABEX_COUNT 19
+ImplUniCharTabData const aImplISO88597ToCharTabEx[ISO88597TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A6, 0xA6, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A8, 0xA8, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xAB, 0 },
+ { 0x00AC, 0xAC, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B2, 0xB2, 0 },
+ { 0x00B3, 0xB3, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00BB, 0xBB, 0 },
+ { 0x00BD, 0xBD, 0 },
+ { 0x2015, 0xAF, 0 },
+ { 0x2018, 0xA1, 0 },
+ { 0x2019, 0xA2, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88597ByteCvtData =
+{
+ aImplISO88597ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplISO88597ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplISO88597ToCharTabEx,
+ ISO88597UNI_START, ISO88597UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ ISO88597CHAR_START, ISO88597CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ ISO88597TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88597TextEncodingData
+ = { { &aImplISO88597ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-7",
+ "iso-8859-7",
+ 1,
+ 1,
+ 1,
+ 161,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_GREEK, pc code page 869, mac encoding 6 */
+
+/* ======================================================================= */
+
+/* ISO-8859-9 */
+/* Latin5 (Turkish) */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-9.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO88599UNI_START 0xA0
+#define ISO88599UNI_END 0xFF
+sal_uInt16 const aImplISO88599ToUniTab[ISO88599UNI_END - ISO88599UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, /* 0xD0 */
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88599CHAR_START 0x00A0
+#define ISO88599CHAR_END 0x00FF
+unsigned char const aImplISO88599ToCharTab[ISO88599CHAR_END - ISO88599CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */
+ 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x00B0 */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x00C0 */
+ 0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x00D0 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0, 0, 0xDF, /* 0x00D0 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x00E0 */
+ 0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x00F0 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0, 0xFF /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO88599TOCHARTABEX_COUNT 6
+ImplUniCharTabData const aImplISO88599ToCharTabEx[ISO88599TOCHARTABEX_COUNT] =
+{
+ { 0x011E, 0xD0, 0 },
+ { 0x011F, 0xF0, 0 },
+ { 0x0130, 0xDD, 0 },
+ { 0x0131, 0xFD, 0 },
+ { 0x015E, 0xDE, 0 },
+ { 0x015F, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88599ByteCvtData =
+{
+ aImplISO88599ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplISO88599ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplISO88599ToCharTabEx,
+ ISO88599UNI_START, ISO88599UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ ISO88599CHAR_START, ISO88599CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ ISO88599TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88599TextEncodingData
+ = { { &aImplISO88599ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-9",
+ "iso-8859-9",
+ 1,
+ 1,
+ 1,
+ 162,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_TURKISH, pc code page 857, mac encoding 35 */
+
+/* ======================================================================= */
+
+/* ISO-8859-10 */
+/* East European */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-10.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO885910UNI_START 0xA0
+#define ISO885910UNI_END 0xFF
+sal_uInt16 const aImplISO885910ToUniTab[ISO885910UNI_END - ISO885910UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7, /* 0xA0 */
+ 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A, /* 0xA0 */
+ 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7, /* 0xB0 */
+ 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B, /* 0xB0 */
+ 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, /* 0xC0 */
+ 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168, /* 0xD0 */
+ 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0xD0 */
+ 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, /* 0xE0 */
+ 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169, /* 0xF0 */
+ 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO885910CHAR_START 0x00C1
+#define ISO885910CHAR_END 0x00FE
+unsigned char const aImplISO885910ToCharTab[ISO885910CHAR_END - ISO885910CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0, /* 0x00C0 */
+ 0, 0xC9, 0, 0xCB, 0, 0xCD, 0xCE, 0xCF, /* 0x00C0 */
+ 0xD0, 0, 0, 0xD3, 0xD4, 0xD5, 0xD6, 0, /* 0x00D0 */
+ 0xD8, 0, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x00D0 */
+ 0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0, /* 0x00E0 */
+ 0, 0xE9, 0, 0xEB, 0, 0xED, 0xEE, 0xEF, /* 0x00E0 */
+ 0xF0, 0, 0, 0xF3, 0xF4, 0xF5, 0xF6, 0, /* 0x00F0 */
+ 0xF8, 0, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO885910TOCHARTABEX_COUNT 51
+ImplUniCharTabData const aImplISO885910ToCharTabEx[ISO885910TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x0100, 0xC0, 0 },
+ { 0x0101, 0xE0, 0 },
+ { 0x0104, 0xA1, 0 },
+ { 0x0105, 0xB1, 0 },
+ { 0x010C, 0xC8, 0 },
+ { 0x010D, 0xE8, 0 },
+ { 0x0110, 0xA9, 0 },
+ { 0x0111, 0xB9, 0 },
+ { 0x0112, 0xA2, 0 },
+ { 0x0113, 0xB2, 0 },
+ { 0x0116, 0xCC, 0 },
+ { 0x0117, 0xEC, 0 },
+ { 0x0118, 0xCA, 0 },
+ { 0x0119, 0xEA, 0 },
+ { 0x0122, 0xA3, 0 },
+ { 0x0123, 0xB3, 0 },
+ { 0x0128, 0xA5, 0 },
+ { 0x0129, 0xB5, 0 },
+ { 0x012A, 0xA4, 0 },
+ { 0x012B, 0xB4, 0 },
+ { 0x012E, 0xC7, 0 },
+ { 0x012F, 0xE7, 0 },
+ { 0x0136, 0xA6, 0 },
+ { 0x0137, 0xB6, 0 },
+ { 0x0138, 0xFF, 0 },
+ { 0x013B, 0xA8, 0 },
+ { 0x013C, 0xB8, 0 },
+ { 0x0145, 0xD1, 0 },
+ { 0x0146, 0xF1, 0 },
+ { 0x014A, 0xAF, 0 },
+ { 0x014B, 0xBF, 0 },
+ { 0x014C, 0xD2, 0 },
+ { 0x014D, 0xF2, 0 },
+ { 0x0160, 0xAA, 0 },
+ { 0x0161, 0xBA, 0 },
+ { 0x0166, 0xAB, 0 },
+ { 0x0167, 0xBB, 0 },
+ { 0x0168, 0xD7, 0 },
+ { 0x0169, 0xF7, 0 },
+ { 0x016A, 0xAE, 0 },
+ { 0x016B, 0xBE, 0 },
+ { 0x0172, 0xD9, 0 },
+ { 0x0173, 0xF9, 0 },
+ { 0x017D, 0xAC, 0 },
+ { 0x017E, 0xBC, 0 },
+ { 0x2015, 0xBD, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO885910ByteCvtData =
+{
+ aImplISO885910ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplISO885910ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplISO885910ToCharTabEx,
+ ISO885910UNI_START, ISO885910UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ ISO885910CHAR_START, ISO885910CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ ISO885910TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO885910TextEncodingData
+ = { { &aImplISO885910ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-10",
+ "iso-8859-10",
+ 1,
+ 1,
+ 1,
+ 238,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */
+
+/* ======================================================================= */
+
+/* ISO-8859-13 */
+/* East European */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-13.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO885913UNI_START 0xA0
+#define ISO885913UNI_END 0xFF
+sal_uInt16 const aImplISO885913ToUniTab[ISO885913UNI_END - ISO885913UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, /* 0xB0 */
+ 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, /* 0xC0 */
+ 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, /* 0xC0 */
+ 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, /* 0xD0 */
+ 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, /* 0xE0 */
+ 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, /* 0xE0 */
+ 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO885913TOCHARTABEX_COUNT 96
+ImplUniCharTabData const aImplISO885913ToCharTabEx[ISO885913TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A2, 0xA2, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A4, 0xA4, 0 },
+ { 0x00A6, 0xA6, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xAB, 0 },
+ { 0x00AC, 0xAC, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AE, 0xAE, 0 },
+ { 0x00B0, 0xB0, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B2, 0xB2, 0 },
+ { 0x00B3, 0xB3, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xB6, 0 },
+ { 0x00B7, 0xB7, 0 },
+ { 0x00B9, 0xB9, 0 },
+ { 0x00BB, 0xBB, 0 },
+ { 0x00BC, 0xBC, 0 },
+ { 0x00BD, 0xBD, 0 },
+ { 0x00BE, 0xBE, 0 },
+ { 0x00C4, 0xC4, 0 },
+ { 0x00C5, 0xC5, 0 },
+ { 0x00C6, 0xAF, 0 },
+ { 0x00C9, 0xC9, 0 },
+ { 0x00D3, 0xD3, 0 },
+ { 0x00D5, 0xD5, 0 },
+ { 0x00D6, 0xD6, 0 },
+ { 0x00D7, 0xD7, 0 },
+ { 0x00D8, 0xA8, 0 },
+ { 0x00DC, 0xDC, 0 },
+ { 0x00DF, 0xDF, 0 },
+ { 0x00E4, 0xE4, 0 },
+ { 0x00E5, 0xE5, 0 },
+ { 0x00E6, 0xBF, 0 },
+ { 0x00E9, 0xE9, 0 },
+ { 0x00F3, 0xF3, 0 },
+ { 0x00F5, 0xF5, 0 },
+ { 0x00F6, 0xF6, 0 },
+ { 0x00F7, 0xF7, 0 },
+ { 0x00F8, 0xB8, 0 },
+ { 0x00FC, 0xFC, 0 },
+ { 0x0100, 0xC2, 0 },
+ { 0x0101, 0xE2, 0 },
+ { 0x0104, 0xC0, 0 },
+ { 0x0105, 0xE0, 0 },
+ { 0x0106, 0xC3, 0 },
+ { 0x0107, 0xE3, 0 },
+ { 0x010C, 0xC8, 0 },
+ { 0x010D, 0xE8, 0 },
+ { 0x0112, 0xC7, 0 },
+ { 0x0113, 0xE7, 0 },
+ { 0x0116, 0xCB, 0 },
+ { 0x0117, 0xEB, 0 },
+ { 0x0118, 0xC6, 0 },
+ { 0x0119, 0xE6, 0 },
+ { 0x0122, 0xCC, 0 },
+ { 0x0123, 0xEC, 0 },
+ { 0x012A, 0xCE, 0 },
+ { 0x012B, 0xEE, 0 },
+ { 0x012E, 0xC1, 0 },
+ { 0x012F, 0xE1, 0 },
+ { 0x0136, 0xCD, 0 },
+ { 0x0137, 0xED, 0 },
+ { 0x013B, 0xCF, 0 },
+ { 0x013C, 0xEF, 0 },
+ { 0x0141, 0xD9, 0 },
+ { 0x0142, 0xF9, 0 },
+ { 0x0143, 0xD1, 0 },
+ { 0x0144, 0xF1, 0 },
+ { 0x0145, 0xD2, 0 },
+ { 0x0146, 0xF2, 0 },
+ { 0x014C, 0xD4, 0 },
+ { 0x014D, 0xF4, 0 },
+ { 0x0156, 0xAA, 0 },
+ { 0x0157, 0xBA, 0 },
+ { 0x015A, 0xDA, 0 },
+ { 0x015B, 0xFA, 0 },
+ { 0x0160, 0xD0, 0 },
+ { 0x0161, 0xF0, 0 },
+ { 0x016A, 0xDB, 0 },
+ { 0x016B, 0xFB, 0 },
+ { 0x0172, 0xD8, 0 },
+ { 0x0173, 0xF8, 0 },
+ { 0x0179, 0xCA, 0 },
+ { 0x017A, 0xEA, 0 },
+ { 0x017B, 0xDD, 0 },
+ { 0x017C, 0xFD, 0 },
+ { 0x017D, 0xDE, 0 },
+ { 0x017E, 0xFE, 0 },
+ { 0x2019, 0xFF, 0 },
+ { 0x201C, 0xB4, 0 },
+ { 0x201D, 0xA1, 0 },
+ { 0x201E, 0xA5, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO885913ByteCvtData =
+{
+ aImplISO885913ToUniTab,
+ aImpl8090SameToUniTab,
+ aImpl8090SameToCharTab,
+ nullptr,
+ aImplISO885913ToCharTabEx,
+ ISO885913UNI_START, ISO885913UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ ISO885913TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO885913TextEncodingData
+ = { { &aImplISO885913ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-13",
+ "iso-8859-13",
+ 1,
+ 1,
+ 1,
+ 238,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */
+
+/* ======================================================================= */
+
+/* APPLE-CentEuro */
+/* Apple CharSet for Eastern Europa (Polish, Czech, Slovak, Hungarian, Estonian, Latvian, Lithuanian) */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/centeuro.txt from 02/05/98 */
+/* Last-Changes from us: */
+
+#define APPLECENTEUROUNI_START 0x80
+#define APPLECENTEUROUNI_END 0xFF
+sal_uInt16 const aImplAPPLECENTEUROToUniTab[APPLECENTEUROUNI_END - APPLECENTEUROUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C4, 0x0100, 0x0101, 0x00C9, 0x0104, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */
+ 0x0105, 0x010C, 0x00E4, 0x010D, 0x0106, 0x0107, 0x00E9, 0x0179, /* 0x80 */
+ 0x017A, 0x010E, 0x00ED, 0x010F, 0x0112, 0x0113, 0x0116, 0x00F3, /* 0x90 */
+ 0x0117, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x011A, 0x011B, 0x00FC, /* 0x90 */
+ 0x2020, 0x00B0, 0x0118, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */
+ 0x00AE, 0x00A9, 0x2122, 0x0119, 0x00A8, 0x2260, 0x0123, 0x012E, /* 0xA0 */
+ 0x012F, 0x012A, 0x2264, 0x2265, 0x012B, 0x0136, 0x2202, 0x2211, /* 0xB0 */
+ 0x0142, 0x013B, 0x013C, 0x013D, 0x013E, 0x0139, 0x013A, 0x0145, /* 0xB0 */
+ 0x0146, 0x0143, 0x00AC, 0x221A, 0x0144, 0x0147, 0x2206, 0x00AB, /* 0xC0 */
+ 0x00BB, 0x2026, 0x00A0, 0x0148, 0x0150, 0x00D5, 0x0151, 0x014C, /* 0xC0 */
+ 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */
+ 0x014D, 0x0154, 0x0155, 0x0158, 0x2039, 0x203A, 0x0159, 0x0156, /* 0xD0 */
+ 0x0157, 0x0160, 0x201A, 0x201E, 0x0161, 0x015A, 0x015B, 0x00C1, /* 0xE0 */
+ 0x0164, 0x0165, 0x00CD, 0x017D, 0x017E, 0x016A, 0x00D3, 0x00D4, /* 0xE0 */
+ 0x016B, 0x016E, 0x00DA, 0x016F, 0x0170, 0x0171, 0x0172, 0x0173, /* 0xF0 */
+ 0x00DD, 0x00FD, 0x0137, 0x017B, 0x0141, 0x017C, 0x0122, 0x02C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLECENTEUROTOCHARTABEX_COUNT 128
+ImplUniCharTabData const aImplAPPLECENTEUROToCharTabEx[APPLECENTEUROTOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xCA, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A7, 0xA4, 0 },
+ { 0x00A8, 0xAC, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xC7, 0 },
+ { 0x00AC, 0xC2, 0 },
+ { 0x00AE, 0xA8, 0 },
+ { 0x00B0, 0xA1, 0 },
+ { 0x00B6, 0xA6, 0 },
+ { 0x00BB, 0xC8, 0 },
+ { 0x00C1, 0xE7, 0 },
+ { 0x00C4, 0x80, 0 },
+ { 0x00C9, 0x83, 0 },
+ { 0x00CD, 0xEA, 0 },
+ { 0x00D3, 0xEE, 0 },
+ { 0x00D4, 0xEF, 0 },
+ { 0x00D5, 0xCD, 0 },
+ { 0x00D6, 0x85, 0 },
+ { 0x00DA, 0xF2, 0 },
+ { 0x00DC, 0x86, 0 },
+ { 0x00DD, 0xF8, 0 },
+ { 0x00DF, 0xA7, 0 },
+ { 0x00E1, 0x87, 0 },
+ { 0x00E4, 0x8A, 0 },
+ { 0x00E9, 0x8E, 0 },
+ { 0x00ED, 0x92, 0 },
+ { 0x00F3, 0x97, 0 },
+ { 0x00F4, 0x99, 0 },
+ { 0x00F5, 0x9B, 0 },
+ { 0x00F6, 0x9A, 0 },
+ { 0x00F7, 0xD6, 0 },
+ { 0x00FA, 0x9C, 0 },
+ { 0x00FC, 0x9F, 0 },
+ { 0x00FD, 0xF9, 0 },
+ { 0x0100, 0x81, 0 },
+ { 0x0101, 0x82, 0 },
+ { 0x0104, 0x84, 0 },
+ { 0x0105, 0x88, 0 },
+ { 0x0106, 0x8C, 0 },
+ { 0x0107, 0x8D, 0 },
+ { 0x010C, 0x89, 0 },
+ { 0x010D, 0x8B, 0 },
+ { 0x010E, 0x91, 0 },
+ { 0x010F, 0x93, 0 },
+ { 0x0112, 0x94, 0 },
+ { 0x0113, 0x95, 0 },
+ { 0x0116, 0x96, 0 },
+ { 0x0117, 0x98, 0 },
+ { 0x0118, 0xA2, 0 },
+ { 0x0119, 0xAB, 0 },
+ { 0x011A, 0x9D, 0 },
+ { 0x011B, 0x9E, 0 },
+ { 0x0122, 0xFE, 0 },
+ { 0x0123, 0xAE, 0 },
+ { 0x012A, 0xB1, 0 },
+ { 0x012B, 0xB4, 0 },
+ { 0x012E, 0xAF, 0 },
+ { 0x012F, 0xB0, 0 },
+ { 0x0136, 0xB5, 0 },
+ { 0x0137, 0xFA, 0 },
+ { 0x0139, 0xBD, 0 },
+ { 0x013A, 0xBE, 0 },
+ { 0x013B, 0xB9, 0 },
+ { 0x013C, 0xBA, 0 },
+ { 0x013D, 0xBB, 0 },
+ { 0x013E, 0xBC, 0 },
+ { 0x0141, 0xFC, 0 },
+ { 0x0142, 0xB8, 0 },
+ { 0x0143, 0xC1, 0 },
+ { 0x0144, 0xC4, 0 },
+ { 0x0145, 0xBF, 0 },
+ { 0x0146, 0xC0, 0 },
+ { 0x0147, 0xC5, 0 },
+ { 0x0148, 0xCB, 0 },
+ { 0x014C, 0xCF, 0 },
+ { 0x014D, 0xD8, 0 },
+ { 0x0150, 0xCC, 0 },
+ { 0x0151, 0xCE, 0 },
+ { 0x0154, 0xD9, 0 },
+ { 0x0155, 0xDA, 0 },
+ { 0x0156, 0xDF, 0 },
+ { 0x0157, 0xE0, 0 },
+ { 0x0158, 0xDB, 0 },
+ { 0x0159, 0xDE, 0 },
+ { 0x015A, 0xE5, 0 },
+ { 0x015B, 0xE6, 0 },
+ { 0x0160, 0xE1, 0 },
+ { 0x0161, 0xE4, 0 },
+ { 0x0164, 0xE8, 0 },
+ { 0x0165, 0xE9, 0 },
+ { 0x016A, 0xED, 0 },
+ { 0x016B, 0xF0, 0 },
+ { 0x016E, 0xF1, 0 },
+ { 0x016F, 0xF3, 0 },
+ { 0x0170, 0xF4, 0 },
+ { 0x0171, 0xF5, 0 },
+ { 0x0172, 0xF6, 0 },
+ { 0x0173, 0xF7, 0 },
+ { 0x0179, 0x8F, 0 },
+ { 0x017A, 0x90, 0 },
+ { 0x017B, 0xFB, 0 },
+ { 0x017C, 0xFD, 0 },
+ { 0x017D, 0xEB, 0 },
+ { 0x017E, 0xEC, 0 },
+ { 0x02C7, 0xFF, 0 },
+ { 0x2013, 0xD0, 0 },
+ { 0x2014, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201A, 0xE2, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x201E, 0xE3, 0 },
+ { 0x2020, 0xA0, 0 },
+ { 0x2022, 0xA5, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2039, 0xDC, 0 },
+ { 0x203A, 0xDD, 0 },
+ { 0x2122, 0xAA, 0 },
+ { 0x2202, 0xB6, 0 },
+ { 0x2206, 0xC6, 0 },
+ { 0x2211, 0xB7, 0 },
+ { 0x221A, 0xC3, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 },
+ { 0x25CA, 0xD7, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLECENTEUROByteCvtData =
+{
+ aImplAPPLECENTEUROToUniTab,
+ nullptr,
+ nullptr,
+ nullptr,
+ aImplAPPLECENTEUROToCharTabEx,
+ APPLECENTEUROUNI_START, APPLECENTEUROUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLECENTEUROTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLECENTEUROTextEncodingData
+ = { { &aImplAPPLECENTEUROByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-2",
+ "iso-8859-2",
+ 1,
+ 1,
+ 1,
+ 238,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* MAC, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */
+
+/* ======================================================================= */
+
+/* APPLE-Croatian */
+/* Standard Apple CharSet for Croatian */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/croatien.txt from 02/05/98 */
+/* Last-Changes from us: */
+
+#define APPLECROATIANUNI_START 0x80
+#define APPLECROATIANUNI_END 0xFF
+sal_uInt16 const aImplAPPLECROATIANToUniTab[APPLECROATIANUNI_END - APPLECROATIANUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */
+ 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */
+ 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */
+ 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */
+ 0x00AE, 0x0160, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x017D, 0x00D8, /* 0xA0 */
+ 0x221E, 0x00B1, 0x2264, 0x2265, 0x2206, 0x00B5, 0x2202, 0x2211, /* 0xB0 */
+ 0x220F, 0x0161, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x017E, 0x00F8, /* 0xB0 */
+ 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x0106, 0x00AB, /* 0xC0 */
+ 0x010C, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */
+ 0x0110, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */
+ 0xF8FF, 0x00A9, 0x2044, 0x00A4, 0x2039, 0x203A, 0x00C6, 0x00BB, /* 0xD0 */
+ 0x2013, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x0107, 0x00C1, /* 0xE0 */
+ 0x010D, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */
+ 0x0111, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, /* 0xF0 */
+ 0x00AF, 0x03C0, 0x00CB, 0x02DA, 0x00B8, 0x00CA, 0x00E6, 0x02C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLECROATIANCHAR_START 0x00A0
+#define APPLECROATIANCHAR_END 0x00FC
+unsigned char const aImplAPPLECROATIANToCharTab[APPLECROATIANCHAR_END - APPLECROATIANCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCA, 0xC1, 0xA2, 0xA3, 0xDB, 0, 0, 0xA4, /* 0x00A0 */
+ 0xAC, 0xD9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */
+ 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */
+ 0xFC, 0, 0xBC, 0xDF, 0, 0, 0, 0xC0, /* 0x00B0 */
+ 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xDE, 0x82, /* 0x00C0 */
+ 0xE9, 0x83, 0xFD, 0xFA, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */
+ 0, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */
+ 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0, 0, 0xA7, /* 0x00D0 */
+ 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xFE, 0x8D, /* 0x00E0 */
+ 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */
+ 0, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */
+ 0xBF, 0x9D, 0x9C, 0x9E, 0x9F /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLECROATIANTOCHARTABEX_COUNT 49
+ImplUniCharTabData const aImplAPPLECROATIANToCharTabEx[APPLECROATIANTOCHARTABEX_COUNT] =
+{
+ { 0x0106, 0xC6, 0 },
+ { 0x0107, 0xE6, 0 },
+ { 0x010C, 0xC8, 0 },
+ { 0x010D, 0xE8, 0 },
+ { 0x0110, 0xD0, 0 },
+ { 0x0111, 0xF0, 0 },
+ { 0x0131, 0xF5, 0 },
+ { 0x0152, 0xCE, 0 },
+ { 0x0153, 0xCF, 0 },
+ { 0x0160, 0xA9, 0 },
+ { 0x0161, 0xB9, 0 },
+ { 0x017D, 0xAE, 0 },
+ { 0x017E, 0xBE, 0 },
+ { 0x0192, 0xC4, 0 },
+ { 0x02C6, 0xF6, 0 },
+ { 0x02C7, 0xFF, 0 },
+ { 0x02DA, 0xFB, 0 },
+ { 0x02DC, 0xF7, 0 },
+ { 0x03A9, 0xBD, 0 },
+ { 0x03C0, 0xF9, 0 },
+ { 0x2013, 0xE0, 0 },
+ { 0x2014, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201A, 0xE2, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x201E, 0xE3, 0 },
+ { 0x2020, 0xA0, 0 },
+ { 0x2022, 0xA5, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2030, 0xE4, 0 },
+ { 0x2039, 0xDC, 0 },
+ { 0x203A, 0xDD, 0 },
+ { 0x2044, 0xDA, 0 },
+ { 0x2122, 0xAA, 0 },
+ { 0x2202, 0xB6, 0 },
+ { 0x2206, 0xB4, 0 },
+ { 0x220F, 0xB8, 0 },
+ { 0x2211, 0xB7, 0 },
+ { 0x221A, 0xC3, 0 },
+ { 0x221E, 0xB0, 0 },
+ { 0x222B, 0xBA, 0 },
+ { 0x2248, 0xC5, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 },
+ { 0x25CA, 0xD7, 0 },
+ { 0xF8FF, 0xD8, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLECROATIANByteCvtData =
+{
+ aImplAPPLECROATIANToUniTab,
+ nullptr,
+ aImplAPPLECROATIANToCharTab,
+ nullptr,
+ aImplAPPLECROATIANToCharTabEx,
+ APPLECROATIANUNI_START, APPLECROATIANUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ APPLECROATIANCHAR_START, APPLECROATIANCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLECROATIANTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLECROATIANTextEncodingData
+ = { { &aImplAPPLECROATIANByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-2",
+ "iso-8859-2",
+ 1,
+ 1,
+ 1,
+ 238,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* MAC, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 36 */
+
+/* ======================================================================= */
+
+/* APPLE-Cyrillic */
+/* Apple CharSet for Cyrillic */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/cyrillic.txt from 02/15/98 */
+/* Last-Changes from us: */
+
+#define APPLECYRILLICUNI_START 0x80
+#define APPLECYRILLICUNI_END 0xFF
+sal_uInt16 const aImplAPPLECYRILLICToUniTab[APPLECYRILLICUNI_END - APPLECYRILLICUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0x80 */
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0x80 */
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0x90 */
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0x90 */
+ 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x0406, /* 0xA0 */
+ 0x00AE, 0x00A9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, /* 0xA0 */
+ 0x221E, 0x00B1, 0x2264, 0x2265, 0x0456, 0x00B5, 0x2202, 0x0408, /* 0xB0 */
+ 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040A, 0x045A, /* 0xB0 */
+ 0x0458, 0x0405, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */
+ 0x00BB, 0x2026, 0x00A0, 0x040B, 0x045B, 0x040C, 0x045C, 0x0455, /* 0xC0 */
+ 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x201E, /* 0xD0 */
+ 0x040E, 0x045E, 0x040F, 0x045F, 0x2116, 0x0401, 0x0451, 0x044F, /* 0xD0 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xE0 */
+ 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xE0 */
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xF0 */
+ 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x00A4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLECYRILLICCHAR_START 0x0401
+#define APPLECYRILLICCHAR_END 0x045F
+unsigned char const aImplAPPLECYRILLICToCharTab[APPLECYRILLICCHAR_END - APPLECYRILLICCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDD, 0xAB, 0xAE, 0xB8, 0xC1, 0xA7, 0xBA, /* 0x0400 */
+ 0xB7, 0xBC, 0xBE, 0xCB, 0xCD, 0, 0xD8, 0xDA, /* 0x0400 */
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0410 */
+ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, /* 0x0410 */
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0420 */
+ 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, /* 0x0420 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0430 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0430 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0440 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, /* 0x0440 */
+ 0, 0xDE, 0xAC, 0xAF, 0xB9, 0xCF, 0xB4, 0xBB, /* 0x0450 */
+ 0xC0, 0xBD, 0xBF, 0xCC, 0xCE, 0, 0xD9, 0xDB, /* 0x0450 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLECYRILLICTOCHARTABEX_COUNT 36
+ImplUniCharTabData const aImplAPPLECYRILLICToCharTabEx[APPLECYRILLICTOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xCA, 0 },
+ { 0x00A2, 0xA2, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A4, 0xFF, 0 },
+ { 0x00A7, 0xA4, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xC7, 0 },
+ { 0x00AC, 0xC2, 0 },
+ { 0x00AE, 0xA8, 0 },
+ { 0x00B0, 0xA1, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xA6, 0 },
+ { 0x00BB, 0xC8, 0 },
+ { 0x00F7, 0xD6, 0 },
+ { 0x0192, 0xC4, 0 },
+ { 0x2013, 0xD0, 0 },
+ { 0x2014, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x201E, 0xD7, 0 },
+ { 0x2020, 0xA0, 0 },
+ { 0x2022, 0xA5, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2116, 0xDC, 0 },
+ { 0x2122, 0xAA, 0 },
+ { 0x2202, 0xB6, 0 },
+ { 0x2206, 0xC6, 0 },
+ { 0x221A, 0xC3, 0 },
+ { 0x221E, 0xB0, 0 },
+ { 0x2248, 0xC5, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLECYRILLICByteCvtData =
+{
+ aImplAPPLECYRILLICToUniTab,
+ nullptr,
+ aImplAPPLECYRILLICToCharTab,
+ nullptr,
+ aImplAPPLECYRILLICToCharTabEx,
+ APPLECYRILLICUNI_START, APPLECYRILLICUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ APPLECYRILLICCHAR_START, APPLECYRILLICCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLECYRILLICTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLECYRILLICTextEncodingData
+ = { { &aImplAPPLECYRILLICByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-5",
+ "iso-8859-5",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* MAC, SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 7 */
+
+/* ======================================================================= */
+
+/* APPLE-Greek */
+/* Apple CharSet for Greek */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/roman.txt from 08/18/98 */
+/* Last-Changes from us: */
+
+#define APPLEGREEKUNI_START 0x80
+#define APPLEGREEKUNI_END 0xFF
+sal_uInt16 const aImplAPPLEGREEKToUniTab[APPLEGREEKUNI_END - APPLEGREEKUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C4, 0x00B9, 0x00B2, 0x00C9, 0x00B3, 0x00D6, 0x00DC, 0x0385, /* 0x80 */
+ 0x00E0, 0x00E2, 0x00E4, 0x0384, 0x00A8, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00A3, 0x2122, 0x00EE, 0x00EF, 0x2022, 0x00BD, /* 0x90 */
+ 0x2030, 0x00F4, 0x00F6, 0x00A6, 0x00AD, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */
+ 0x2020, 0x0393, 0x0394, 0x0398, 0x039B, 0x039E, 0x03A0, 0x00DF, /* 0xA0 */
+ 0x00AE, 0x00A9, 0x03A3, 0x03AA, 0x00A7, 0x2260, 0x00B0, 0x00B7, /* 0xA0 */
+ 0x0391, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x0392, 0x0395, 0x0396, /* 0xB0 */
+ 0x0397, 0x0399, 0x039A, 0x039C, 0x03A6, 0x03AB, 0x03A8, 0x03A9, /* 0xB0 */
+ 0x03AC, 0x039D, 0x00AC, 0x039F, 0x03A1, 0x2248, 0x03A4, 0x00AB, /* 0xC0 */
+ 0x00BB, 0x2026, 0x00A0, 0x03A5, 0x03A7, 0x0386, 0x0388, 0x0153, /* 0xC0 */
+ 0x2013, 0x2015, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x0389, /* 0xD0 */
+ 0x038A, 0x038C, 0x038E, 0x03AD, 0x03AE, 0x03AF, 0x03CC, 0x038F, /* 0xD0 */
+ 0x03CD, 0x03B1, 0x03B2, 0x03C8, 0x03B4, 0x03B5, 0x03C6, 0x03B3, /* 0xE0 */
+ 0x03B7, 0x03B9, 0x03BE, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BF, /* 0xE0 */
+ 0x03C0, 0x03CE, 0x03C1, 0x03C3, 0x03C4, 0x03B8, 0x03C9, 0x03C2, /* 0xF0 */
+ 0x03C7, 0x03C5, 0x03B6, 0x03CA, 0x03CB, 0x0390, 0x03B0, 0xF8A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEGREEKCHAR_START 0x0384
+#define APPLEGREEKCHAR_END 0x03CE
+unsigned char const aImplAPPLEGREEKToCharTab[APPLEGREEKCHAR_END - APPLEGREEKCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B, 0x87, 0xCD, 0, /* 0x0380 */
+ 0xCE, 0xD7, 0xD8, 0, 0xD9, 0, 0xDA, 0xDF, /* 0x0380 */
+ 0xFD, 0xB0, 0xB5, 0xA1, 0xA2, 0xB6, 0xB7, 0xB8, /* 0x0390 */
+ 0xA3, 0xB9, 0xBA, 0xA4, 0xBB, 0xC1, 0xA5, 0xC3, /* 0x0390 */
+ 0xA6, 0xC4, 0, 0xAA, 0xC6, 0xCB, 0xBC, 0xCC, /* 0x03A0 */
+ 0xBE, 0xBF, 0xAB, 0xBD, 0xC0, 0xDB, 0xDC, 0xDD, /* 0x03A0 */
+ 0xFE, 0xE1, 0xE2, 0xE7, 0xE4, 0xE5, 0xFA, 0xE8, /* 0x03B0 */
+ 0xF5, 0xE9, 0xEB, 0xEC, 0xED, 0xEE, 0xEA, 0xEF, /* 0x03B0 */
+ 0xF0, 0xF2, 0xF7, 0xF3, 0xF4, 0xF9, 0xE6, 0xF8, /* 0x03C0 */
+ 0xE3, 0xF6, 0xFB, 0xFC, 0xDE, 0xE0, 0xF1 /* 0x03C0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEGREEKTOCHARTABEX_COUNT 57
+ImplUniCharTabData const aImplAPPLEGREEKToCharTabEx[APPLEGREEKTOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xCA, 0 },
+ { 0x00A3, 0x92, 0 },
+ { 0x00A5, 0xB4, 0 },
+ { 0x00A6, 0x9B, 0 },
+ { 0x00A7, 0xAC, 0 },
+ { 0x00A8, 0x8C, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xC7, 0 },
+ { 0x00AC, 0xC2, 0 },
+ { 0x00AD, 0x9C, 0 },
+ { 0x00AE, 0xA8, 0 },
+ { 0x00B0, 0xAE, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B2, 0x82, 0 },
+ { 0x00B3, 0x84, 0 },
+ { 0x00B7, 0xAF, 0 },
+ { 0x00B9, 0x81, 0 },
+ { 0x00BB, 0xC8, 0 },
+ { 0x00BD, 0x97, 0 },
+ { 0x00C4, 0x80, 0 },
+ { 0x00C9, 0x83, 0 },
+ { 0x00D6, 0x85, 0 },
+ { 0x00DC, 0x86, 0 },
+ { 0x00DF, 0xA7, 0 },
+ { 0x00E0, 0x88, 0 },
+ { 0x00E2, 0x89, 0 },
+ { 0x00E4, 0x8A, 0 },
+ { 0x00E7, 0x8D, 0 },
+ { 0x00E8, 0x8F, 0 },
+ { 0x00E9, 0x8E, 0 },
+ { 0x00EA, 0x90, 0 },
+ { 0x00EB, 0x91, 0 },
+ { 0x00EE, 0x94, 0 },
+ { 0x00EF, 0x95, 0 },
+ { 0x00F4, 0x99, 0 },
+ { 0x00F6, 0x9A, 0 },
+ { 0x00F7, 0xD6, 0 },
+ { 0x00F9, 0x9D, 0 },
+ { 0x00FB, 0x9E, 0 },
+ { 0x00FC, 0x9F, 0 },
+ { 0x0153, 0xCF, 0 },
+ { 0x2013, 0xD0, 0 },
+ { 0x2015, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x2020, 0xA0, 0 },
+ { 0x2022, 0x96, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2030, 0x98, 0 },
+ { 0x2122, 0x93, 0 },
+ { 0x2248, 0xC5, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 },
+ { 0xF8A0, 0xFF, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLEGREEKByteCvtData =
+{
+ aImplAPPLEGREEKToUniTab,
+ nullptr,
+ aImplAPPLEGREEKToCharTab,
+ nullptr,
+ aImplAPPLEGREEKToCharTabEx,
+ APPLEGREEKUNI_START, APPLEGREEKUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ APPLEGREEKCHAR_START, APPLEGREEKCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLEGREEKTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLEGREEKTextEncodingData
+ = { { &aImplAPPLEGREEKByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-7",
+ "iso-8859-7",
+ 1,
+ 1,
+ 1,
+ 161,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* MAC, SCRIPT_GREEK, pc code page 869, mac encoding 6 */
+
+/* ======================================================================= */
+
+/* APPLE-Romanian */
+/* Standard Apple CharSet for Romanian */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/romanian.txt from 02/05/98 */
+/* Last-Changes from us: */
+/* 0xAF --> 0x015E (like Java), Apple Definition: 0x0053+0x0326 # LATIN CAPITAL LETTER S + COMBINING COMMA BELOW */
+/* 0xBF --> 0x015F (like Java), Apple Definition: 0x0073+0x0326 # LATIN SMALL LETTER S + COMBINING COMMA BELOW */
+/* 0xDE --> 0x0162 (like Java), Apple Definition: 0x0054+0x0326 # LATIN CAPITAL LETTER T + COMBINING COMMA BELOW */
+/* 0xDF --> 0x0163 (like Java), Apple Definition: 0x0074+0x0326 # LATIN SMALL LETTER T + COMBINING COMMA BELOW */
+
+#define APPLEROMANIANUNI_START 0x80
+#define APPLEROMANIANUNI_END 0xFF
+sal_uInt16 const aImplAPPLEROMANIANToUniTab[APPLEROMANIANUNI_END - APPLEROMANIANUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */
+ 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */
+ 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */
+ 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */
+ 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x0102, 0x015E, /* 0xA0 */
+ 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, /* 0xB0 */
+ 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x0103, 0x015F, /* 0xB0 */
+ 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */
+ 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */
+ 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */
+ 0x00FF, 0x0178, 0x2044, 0x00A4, 0x2039, 0x203A, 0x0162, 0x0163, /* 0xD0 */
+ 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, /* 0xE0 */
+ 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */
+ 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, /* 0xF0 */
+ 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEROMANIANCHAR_START 0x00A0
+#define APPLEROMANIANCHAR_END 0x00FF
+unsigned char const aImplAPPLEROMANIANToCharTab[APPLEROMANIANCHAR_END - APPLEROMANIANCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCA, 0xC1, 0xA2, 0xA3, 0xDB, 0xB4, 0, 0xA4, /* 0x00A0 */
+ 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */
+ 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */
+ 0xFC, 0, 0xBC, 0xC8, 0, 0, 0, 0xC0, /* 0x00B0 */
+ 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0, 0x82, /* 0x00C0 */
+ 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */
+ 0, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */
+ 0, 0xF4, 0xF2, 0xF3, 0x86, 0, 0, 0xA7, /* 0x00D0 */
+ 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0, 0x8D, /* 0x00E0 */
+ 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */
+ 0, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */
+ 0, 0x9D, 0x9C, 0x9E, 0x9F, 0, 0, 0xD8 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEROMANIANTOCHARTABEX_COUNT 51
+ImplUniCharTabData const aImplAPPLEROMANIANToCharTabEx[APPLEROMANIANTOCHARTABEX_COUNT] =
+{
+ { 0x0102, 0xAE, 0 },
+ { 0x0103, 0xBE, 0 },
+ { 0x0131, 0xF5, 0 },
+ { 0x0152, 0xCE, 0 },
+ { 0x0153, 0xCF, 0 },
+ { 0x015E, 0xAF, 0 },
+ { 0x015F, 0xBF, 0 },
+ { 0x0162, 0xDE, 0 },
+ { 0x0163, 0xDF, 0 },
+ { 0x0178, 0xD9, 0 },
+ { 0x0192, 0xC4, 0 },
+ { 0x02C6, 0xF6, 0 },
+ { 0x02C7, 0xFF, 0 },
+ { 0x02D8, 0xF9, 0 },
+ { 0x02D9, 0xFA, 0 },
+ { 0x02DA, 0xFB, 0 },
+ { 0x02DB, 0xFE, 0 },
+ { 0x02DC, 0xF7, 0 },
+ { 0x02DD, 0xFD, 0 },
+ { 0x03A9, 0xBD, 0 },
+ { 0x03C0, 0xB9, 0 },
+ { 0x2013, 0xD0, 0 },
+ { 0x2014, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201A, 0xE2, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x201E, 0xE3, 0 },
+ { 0x2020, 0xA0, 0 },
+ { 0x2021, 0xE0, 0 },
+ { 0x2022, 0xA5, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2030, 0xE4, 0 },
+ { 0x2039, 0xDC, 0 },
+ { 0x203A, 0xDD, 0 },
+ { 0x2044, 0xDA, 0 },
+ { 0x2122, 0xAA, 0 },
+ { 0x2202, 0xB6, 0 },
+ { 0x2206, 0xC6, 0 },
+ { 0x220F, 0xB8, 0 },
+ { 0x2211, 0xB7, 0 },
+ { 0x221A, 0xC3, 0 },
+ { 0x221E, 0xB0, 0 },
+ { 0x222B, 0xBA, 0 },
+ { 0x2248, 0xC5, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 },
+ { 0x25CA, 0xD7, 0 },
+ { 0xF8FF, 0xF0, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLEROMANIANByteCvtData =
+{
+ aImplAPPLEROMANIANToUniTab,
+ nullptr,
+ aImplAPPLEROMANIANToCharTab,
+ nullptr,
+ aImplAPPLEROMANIANToCharTabEx,
+ APPLEROMANIANUNI_START, APPLEROMANIANUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ APPLEROMANIANCHAR_START, APPLEROMANIANCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLEROMANIANTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLEROMANIANTextEncodingData
+ = { { &aImplAPPLEROMANIANByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-2",
+ "iso-8859-2",
+ 1,
+ 1,
+ 1,
+ 238,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* MAC, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 38 */
+
+/* ======================================================================= */
+
+/* APPLE-Turkish */
+/* Apple CharSet for Turkish */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/turkish.txt from 02/05/98 */
+/* Last-Changes from us: */
+
+#define APPLETURKISHUNI_START 0x80
+#define APPLETURKISHUNI_END 0xFF
+sal_uInt16 const aImplAPPLETURKISHToUniTab[APPLETURKISHUNI_END - APPLETURKISHUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */
+ 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */
+ 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */
+ 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */
+ 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, /* 0xA0 */
+ 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, /* 0xB0 */
+ 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, /* 0xB0 */
+ 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */
+ 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */
+ 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */
+ 0x00FF, 0x0178, 0x011E, 0x011F, 0x0130, 0x0131, 0x015E, 0x015F, /* 0xD0 */
+ 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, /* 0xE0 */
+ 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */
+ 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0xF8A0, 0x02C6, 0x02DC, /* 0xF0 */
+ 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLETURKISHCHAR_START 0x00A0
+#define APPLETURKISHCHAR_END 0x00FF
+unsigned char const aImplAPPLETURKISHToCharTab[APPLETURKISHCHAR_END - APPLETURKISHCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCA, 0xC1, 0xA2, 0xA3, 0, 0xB4, 0, 0xA4, /* 0x00A0 */
+ 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */
+ 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */
+ 0xFC, 0, 0xBC, 0xC8, 0, 0, 0, 0xC0, /* 0x00B0 */
+ 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xAE, 0x82, /* 0x00C0 */
+ 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */
+ 0, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */
+ 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0, 0, 0xA7, /* 0x00D0 */
+ 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xBE, 0x8D, /* 0x00E0 */
+ 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */
+ 0, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */
+ 0xBF, 0x9D, 0x9C, 0x9E, 0x9F, 0, 0, 0xD8 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLETURKISHTOCHARTABEX_COUNT 48
+ImplUniCharTabData const aImplAPPLETURKISHToCharTabEx[APPLETURKISHTOCHARTABEX_COUNT] =
+{
+ { 0x011E, 0xDA, 0 },
+ { 0x011F, 0xDB, 0 },
+ { 0x0130, 0xDC, 0 },
+ { 0x0131, 0xDD, 0 },
+ { 0x0152, 0xCE, 0 },
+ { 0x0153, 0xCF, 0 },
+ { 0x015E, 0xDE, 0 },
+ { 0x015F, 0xDF, 0 },
+ { 0x0178, 0xD9, 0 },
+ { 0x0192, 0xC4, 0 },
+ { 0x02C6, 0xF6, 0 },
+ { 0x02C7, 0xFF, 0 },
+ { 0x02D8, 0xF9, 0 },
+ { 0x02D9, 0xFA, 0 },
+ { 0x02DA, 0xFB, 0 },
+ { 0x02DB, 0xFE, 0 },
+ { 0x02DC, 0xF7, 0 },
+ { 0x02DD, 0xFD, 0 },
+ { 0x03A9, 0xBD, 0 },
+ { 0x03C0, 0xB9, 0 },
+ { 0x2013, 0xD0, 0 },
+ { 0x2014, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201A, 0xE2, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x201E, 0xE3, 0 },
+ { 0x2020, 0xA0, 0 },
+ { 0x2021, 0xE0, 0 },
+ { 0x2022, 0xA5, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2030, 0xE4, 0 },
+ { 0x2122, 0xAA, 0 },
+ { 0x2202, 0xB6, 0 },
+ { 0x2206, 0xC6, 0 },
+ { 0x220F, 0xB8, 0 },
+ { 0x2211, 0xB7, 0 },
+ { 0x221A, 0xC3, 0 },
+ { 0x221E, 0xB0, 0 },
+ { 0x222B, 0xBA, 0 },
+ { 0x2248, 0xC5, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 },
+ { 0x25CA, 0xD7, 0 },
+ { 0xF8A0, 0xF5, 0 },
+ { 0xF8FF, 0xF0, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLETURKISHByteCvtData =
+{
+ aImplAPPLETURKISHToUniTab,
+ nullptr,
+ aImplAPPLETURKISHToCharTab,
+ nullptr,
+ aImplAPPLETURKISHToCharTabEx,
+ APPLETURKISHUNI_START, APPLETURKISHUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ APPLETURKISHCHAR_START, APPLETURKISHCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLETURKISHTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLETURKISHTextEncodingData
+ = { { &aImplAPPLETURKISHByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-9",
+ "iso-8859-9",
+ 1,
+ 1,
+ 1,
+ 162,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* MAC, SCRIPT_TURKISH, pc code page 857, mac encoding 35 */
+
+/* ======================================================================= */
+
+/* APPLE-Ukrainian */
+/* Apple CharSet for Ukrainian */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/ukraine.txt from 02/05/98 */
+/* Last-Changes from us: */
+
+#define APPLEUKRAINIANUNI_START 0x80
+#define APPLEUKRAINIANUNI_END 0xFF
+sal_uInt16 const aImplAPPLEUKRAINIANToUniTab[APPLEUKRAINIANUNI_END - APPLEUKRAINIANUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0x80 */
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0x80 */
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0x90 */
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0x90 */
+ 0x2020, 0x00B0, 0x0490, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x0406, /* 0xA0 */
+ 0x00AE, 0x00A9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, /* 0xA0 */
+ 0x221E, 0x00B1, 0x2264, 0x2265, 0x0456, 0x00B5, 0x0491, 0x0408, /* 0xB0 */
+ 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040A, 0x045A, /* 0xB0 */
+ 0x0458, 0x0405, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */
+ 0x00BB, 0x2026, 0x00A0, 0x040B, 0x045B, 0x040C, 0x045C, 0x0455, /* 0xC0 */
+ 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x201E, /* 0xD0 */
+ 0x040E, 0x045E, 0x040F, 0x045F, 0x2116, 0x0401, 0x0451, 0x044F, /* 0xD0 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xE0 */
+ 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xE0 */
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xF0 */
+ 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x00A4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEUKRAINIANCHAR_START 0x0401
+#define APPLEUKRAINIANCHAR_END 0x045F
+unsigned char const aImplAPPLEUKRAINIANToCharTab[APPLEUKRAINIANCHAR_END - APPLEUKRAINIANCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDD, 0xAB, 0xAE, 0xB8, 0xC1, 0xA7, 0xBA, /* 0x0400 */
+ 0xB7, 0xBC, 0xBE, 0xCB, 0xCD, 0, 0xD8, 0xDA, /* 0x0400 */
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0410 */
+ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, /* 0x0410 */
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0420 */
+ 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, /* 0x0420 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0430 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0430 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0440 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, /* 0x0440 */
+ 0, 0xDE, 0xAC, 0xAF, 0xB9, 0xCF, 0xB4, 0xBB, /* 0x0450 */
+ 0xC0, 0xBD, 0xBF, 0xCC, 0xCE, 0, 0xD9, 0xDB, /* 0x0450 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEUKRAINIANTOCHARTABEX_COUNT 36
+ImplUniCharTabData const aImplAPPLEUKRAINIANToCharTabEx[APPLEUKRAINIANTOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xCA, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A4, 0xFF, 0 },
+ { 0x00A7, 0xA4, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AB, 0xC7, 0 },
+ { 0x00AC, 0xC2, 0 },
+ { 0x00AE, 0xA8, 0 },
+ { 0x00B0, 0xA1, 0 },
+ { 0x00B1, 0xB1, 0 },
+ { 0x00B5, 0xB5, 0 },
+ { 0x00B6, 0xA6, 0 },
+ { 0x00BB, 0xC8, 0 },
+ { 0x00F7, 0xD6, 0 },
+ { 0x0192, 0xC4, 0 },
+ { 0x0490, 0xA2, 0 },
+ { 0x0491, 0xB6, 0 },
+ { 0x2013, 0xD0, 0 },
+ { 0x2014, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x201E, 0xD7, 0 },
+ { 0x2020, 0xA0, 0 },
+ { 0x2022, 0xA5, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2116, 0xDC, 0 },
+ { 0x2122, 0xAA, 0 },
+ { 0x2206, 0xC6, 0 },
+ { 0x221A, 0xC3, 0 },
+ { 0x221E, 0xB0, 0 },
+ { 0x2248, 0xC5, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLEUKRAINIANByteCvtData =
+{
+ aImplAPPLEUKRAINIANToUniTab,
+ nullptr,
+ aImplAPPLEUKRAINIANToCharTab,
+ nullptr,
+ aImplAPPLEUKRAINIANToCharTabEx,
+ APPLEUKRAINIANUNI_START, APPLEUKRAINIANUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ APPLEUKRAINIANCHAR_START, APPLEUKRAINIANCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLEUKRAINIANTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLEUKRAINIANTextEncodingData
+ = { { &aImplAPPLEUKRAINIANByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-5",
+ "iso-8859-5",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* MAC, SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 0x98
+ (MAC 8.5 and above) */
+
+/* ======================================================================= */
+
+/* KOI8_R */
+/* Standard Charset for Cyrillic */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: typed per hand */
+/* Last-Changes from us: */
+
+#define KOI8RUNI_START 0x80
+#define KOI8RUNI_END 0xFF
+sal_uInt16 const aImplKOI8RToUniTab[KOI8RUNI_END - KOI8RUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, /* 0x80 */
+ 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, /* 0x80 */
+ 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, /* 0x90 */
+ 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, /* 0x90 */
+ 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, /* 0xA0 */
+ 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, /* 0xA0 */
+ 0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, /* 0xB0 */
+ 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9, /* 0xB0 */
+ 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, /* 0xC0 */
+ 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, /* 0xC0 */
+ 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, /* 0xD0 */
+ 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, /* 0xD0 */
+ 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, /* 0xE0 */
+ 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, /* 0xE0 */
+ 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, /* 0xF0 */
+ 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define KOI8RCHAR_START 0x0410
+#define KOI8RCHAR_END 0x044F
+unsigned char const aImplKOI8RToCharTab[KOI8RCHAR_END - KOI8RCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA, /* 0x0410 */
+ 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, /* 0x0410 */
+ 0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE, /* 0x0420 */
+ 0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1, /* 0x0420 */
+ 0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA, /* 0x0430 */
+ 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, /* 0x0430 */
+ 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE, /* 0x0440 */
+ 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1 /* 0x0440 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define KOI8RTOCHARTABEX_COUNT 64
+ImplUniCharTabData const aImplKOI8RToCharTabEx[KOI8RTOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0x9A, 0 },
+ { 0x00A9, 0xBF, 0 },
+ { 0x00B0, 0x9C, 0 },
+ { 0x00B2, 0x9D, 0 },
+ { 0x00B7, 0x9E, 0 },
+ { 0x00F7, 0x9F, 0 },
+ { 0x0401, 0xB3, 0 },
+ { 0x0451, 0xA3, 0 },
+ { 0x2219, 0x95, 0 },
+ { 0x221A, 0x96, 0 },
+ { 0x2248, 0x97, 0 },
+ { 0x2264, 0x98, 0 },
+ { 0x2265, 0x99, 0 },
+ { 0x2320, 0x93, 0 },
+ { 0x2321, 0x9B, 0 },
+ { 0x2500, 0x80, 0 },
+ { 0x2502, 0x81, 0 },
+ { 0x250C, 0x82, 0 },
+ { 0x2510, 0x83, 0 },
+ { 0x2514, 0x84, 0 },
+ { 0x2518, 0x85, 0 },
+ { 0x251C, 0x86, 0 },
+ { 0x2524, 0x87, 0 },
+ { 0x252C, 0x88, 0 },
+ { 0x2534, 0x89, 0 },
+ { 0x253C, 0x8A, 0 },
+ { 0x2550, 0xA0, 0 },
+ { 0x2551, 0xA1, 0 },
+ { 0x2552, 0xA2, 0 },
+ { 0x2553, 0xA4, 0 },
+ { 0x2554, 0xA5, 0 },
+ { 0x2555, 0xA6, 0 },
+ { 0x2556, 0xA7, 0 },
+ { 0x2557, 0xA8, 0 },
+ { 0x2558, 0xA9, 0 },
+ { 0x2559, 0xAA, 0 },
+ { 0x255A, 0xAB, 0 },
+ { 0x255B, 0xAC, 0 },
+ { 0x255C, 0xAD, 0 },
+ { 0x255D, 0xAE, 0 },
+ { 0x255E, 0xAF, 0 },
+ { 0x255F, 0xB0, 0 },
+ { 0x2560, 0xB1, 0 },
+ { 0x2561, 0xB2, 0 },
+ { 0x2562, 0xB4, 0 },
+ { 0x2563, 0xB5, 0 },
+ { 0x2564, 0xB6, 0 },
+ { 0x2565, 0xB7, 0 },
+ { 0x2566, 0xB8, 0 },
+ { 0x2567, 0xB9, 0 },
+ { 0x2568, 0xBA, 0 },
+ { 0x2569, 0xBB, 0 },
+ { 0x256A, 0xBC, 0 },
+ { 0x256B, 0xBD, 0 },
+ { 0x256C, 0xBE, 0 },
+ { 0x2580, 0x8B, 0 },
+ { 0x2584, 0x8C, 0 },
+ { 0x2588, 0x8D, 0 },
+ { 0x258C, 0x8E, 0 },
+ { 0x2590, 0x8F, 0 },
+ { 0x2591, 0x90, 0 },
+ { 0x2592, 0x91, 0 },
+ { 0x2593, 0x92, 0 },
+ { 0x25A0, 0x94, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplKOI8RByteCvtData =
+{
+ aImplKOI8RToUniTab,
+ nullptr,
+ aImplKOI8RToCharTab,
+ nullptr,
+ aImplKOI8RToCharTabEx,
+ KOI8RUNI_START, KOI8RUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ KOI8RCHAR_START, KOI8RCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ KOI8RTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplKOI8RTextEncodingData
+ = { { &aImplKOI8RByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "koi8-r",
+ "koi8-r",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 7 */
+
+/* ======================================================================= */
+
+/* KOI8_U */
+/* Standard Charset for Ukrainian Cyrillic */
+/* Single Byte, 0x00-0x7F equals ASCII */
+/* Conversion Tables: hand made */
+
+#define KOI8UUNI_START 0x80
+#define KOI8UUNI_END 0xFF
+sal_uInt16 const aImplKOI8UToUniTab[KOI8UUNI_END - KOI8UUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, /* 0x80 */
+ 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, /* 0x80 */
+ 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, /* 0x90 */
+ 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, /* 0x90 */
+ 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, /* 0xA0 */
+ 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x0491, 0x255D, 0x255E, /* 0xA0 */
+ 0x255F, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, /* 0xB0 */
+ 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x0490, 0x256C, 0x00A9, /* 0xB0 */
+ 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, /* 0xC0 */
+ 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, /* 0xC0 */
+ 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, /* 0xD0 */
+ 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, /* 0xD0 */
+ 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, /* 0xE0 */
+ 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, /* 0xE0 */
+ 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, /* 0xF0 */
+ 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A /* 0xF0 */
+};
+
+#define KOI8UCHAR_START 0x0410
+#define KOI8UCHAR_END 0x044F
+unsigned char const
+aImplKOI8UToCharTab[KOI8UCHAR_END - KOI8UCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA, /* 0x0410 */
+ 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, /* 0x0410 */
+ 0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE, /* 0x0420 */
+ 0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1, /* 0x0420 */
+ 0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA, /* 0x0430 */
+ 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, /* 0x0430 */
+ 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE, /* 0x0440 */
+ 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1 /* 0x0440 */
+};
+
+#define KOI8UTOCHARTABEX_COUNT 72
+ImplUniCharTabData const aImplKOI8UToCharTabEx[KOI8UTOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0x9A, 0 },
+ { 0x00A9, 0xBF, 0 },
+ { 0x00B0, 0x9C, 0 },
+ { 0x00B2, 0x9D, 0 },
+ { 0x00B7, 0x9E, 0 },
+ { 0x00F7, 0x9F, 0 },
+ { 0x0401, 0xB3, 0 },
+ { 0x0404, 0xB4, 0 },
+ { 0x0406, 0xB6, 0 },
+ { 0x0407, 0xB7, 0 },
+ { 0x0451, 0xA3, 0 },
+ { 0x0454, 0xA4, 0 },
+ { 0x0456, 0xA6, 0 },
+ { 0x0457, 0xA7, 0 },
+ { 0x0490, 0xBD, 0 },
+ { 0x0491, 0xAD, 0 },
+ { 0x2219, 0x95, 0 },
+ { 0x221A, 0x96, 0 },
+ { 0x2248, 0x97, 0 },
+ { 0x2264, 0x98, 0 },
+ { 0x2265, 0x99, 0 },
+ { 0x2320, 0x93, 0 },
+ { 0x2321, 0x9B, 0 },
+ { 0x2500, 0x80, 0 },
+ { 0x2502, 0x81, 0 },
+ { 0x250C, 0x82, 0 },
+ { 0x2510, 0x83, 0 },
+ { 0x2514, 0x84, 0 },
+ { 0x2518, 0x85, 0 },
+ { 0x251C, 0x86, 0 },
+ { 0x2524, 0x87, 0 },
+ { 0x252C, 0x88, 0 },
+ { 0x2534, 0x89, 0 },
+ { 0x253C, 0x8A, 0 },
+ { 0x2550, 0xA0, 0 },
+ { 0x2551, 0xA1, 0 },
+ { 0x2552, 0xA2, 0 },
+ { 0x2553, 0xA4, 0 },
+ { 0x2554, 0xA5, 0 },
+ { 0x2555, 0xA6, 0 },
+ { 0x2556, 0xA7, 0 },
+ { 0x2557, 0xA8, 0 },
+ { 0x2558, 0xA9, 0 },
+ { 0x2559, 0xAA, 0 },
+ { 0x255A, 0xAB, 0 },
+ { 0x255B, 0xAC, 0 },
+ { 0x255C, 0xAD, 0 },
+ { 0x255D, 0xAE, 0 },
+ { 0x255E, 0xAF, 0 },
+ { 0x255F, 0xB0, 0 },
+ { 0x2560, 0xB1, 0 },
+ { 0x2561, 0xB2, 0 },
+ { 0x2562, 0xB4, 0 },
+ { 0x2563, 0xB5, 0 },
+ { 0x2564, 0xB6, 0 },
+ { 0x2565, 0xB7, 0 },
+ { 0x2566, 0xB8, 0 },
+ { 0x2567, 0xB9, 0 },
+ { 0x2568, 0xBA, 0 },
+ { 0x2569, 0xBB, 0 },
+ { 0x256A, 0xBC, 0 },
+ { 0x256B, 0xBD, 0 },
+ { 0x256C, 0xBE, 0 },
+ { 0x2580, 0x8B, 0 },
+ { 0x2584, 0x8C, 0 },
+ { 0x2588, 0x8D, 0 },
+ { 0x258C, 0x8E, 0 },
+ { 0x2590, 0x8F, 0 },
+ { 0x2591, 0x90, 0 },
+ { 0x2592, 0x91, 0 },
+ { 0x2593, 0x92, 0 },
+ { 0x25A0, 0x94, 0 }
+};
+
+ImplByteConvertData const aImplKOI8UByteCvtData =
+{
+ aImplKOI8UToUniTab,
+ nullptr,
+ aImplKOI8UToCharTab,
+ nullptr,
+ aImplKOI8UToCharTabEx,
+ KOI8UUNI_START, KOI8UUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ KOI8UCHAR_START, KOI8UCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ KOI8UTOCHARTABEX_COUNT
+};
+
+ImplTextEncodingData const aImplKoi8UTextEncodingData
+ = { { &aImplKOI8UByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "koi8-u",
+ "KOI8-U",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CYRILLIC */
+
+/* ======================================================================= */
+
+/* PT154 */
+/* Asian Cyrillic */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: typed per hand */
+/* Last-Changes from us: */
+
+#define PT154UNI_START 0x80
+#define PT154UNI_END 0xFF
+sal_uInt16 const aImplPT154ToUniTab[PT154UNI_END - PT154UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0496, 0x0492, 0x04EE, 0x0493, 0x201E, 0x2026, 0x04B6, 0x04AE, /* 0x80 */
+ 0x04B2, 0x04AF, 0x04A0, 0x04E2, 0x04A2, 0x049A, 0x04BA, 0x04B8, /* 0x80 */
+ 0x0497, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0x04B3, 0x04B7, 0x04A1, 0x04E3, 0x04A3, 0x049B, 0x04BB, 0x04B9, /* 0x90 */
+ 0x00A0, 0x040E, 0x045E, 0x0408, 0x04E8, 0x0498, 0x04B0, 0x00A7, /* 0xA0 */
+ 0x0401, 0x00A9, 0x04D8, 0x00AB, 0x00AC, 0x04EF, 0x00AE, 0x049C, /* 0xA0 */
+ 0x00B0, 0x04B1, 0x0406, 0x0456, 0x0499, 0x04E9, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x0451, 0x2116, 0x04D9, 0x00BB, 0x0458, 0x04AA, 0x04AB, 0x049D, /* 0xB0 */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0xC0 */
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0xC0 */
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0xD0 */
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0xD0 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xE0 */
+ 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xE0 */
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xF0 */
+ 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define PT154CHAR_START 0x0410
+#define PT154CHAR_END 0x044F
+unsigned char const aImplPT154ToCharTab[PT154CHAR_END - PT154CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x0410 */
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x0410 */
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x0420 */
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x0420 */
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x0430 */
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x0430 */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x0440 */
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff /* 0x0440 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define PT154TOCHARTABEX_COUNT 64
+ImplUniCharTabData const aImplPT154ToCharTabEx[PT154TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xa0, 0 },
+ { 0x00A7, 0xa7, 0 },
+ { 0x00A9, 0xa9, 0 },
+ { 0x00AB, 0xab, 0 },
+ { 0x00AC, 0xac, 0 },
+ { 0x00AE, 0xae, 0 },
+ { 0x00B0, 0xb0, 0 },
+ { 0x00B6, 0xb6, 0 },
+ { 0x00B7, 0xb7, 0 },
+ { 0x00BB, 0xbb, 0 },
+ { 0x0401, 0xa8, 0 },
+ { 0x0406, 0xb2, 0 },
+ { 0x0408, 0xa3, 0 },
+ { 0x040E, 0xa1, 0 },
+ { 0x0451, 0xb8, 0 },
+ { 0x0456, 0xb3, 0 },
+ { 0x0458, 0xbc, 0 },
+ { 0x045E, 0xa2, 0 },
+ { 0x0492, 0x81, 0 },
+ { 0x0493, 0x83, 0 },
+ { 0x0496, 0x80, 0 },
+ { 0x0497, 0x90, 0 },
+ { 0x0498, 0xa5, 0 },
+ { 0x0499, 0xb4, 0 },
+ { 0x049A, 0x8d, 0 },
+ { 0x049B, 0x9d, 0 },
+ { 0x049C, 0xaf, 0 },
+ { 0x049D, 0xbf, 0 },
+ { 0x04A0, 0x8a, 0 },
+ { 0x04A1, 0x9a, 0 },
+ { 0x04A2, 0x8c, 0 },
+ { 0x04A3, 0x9c, 0 },
+ { 0x04AA, 0xbd, 0 },
+ { 0x04AB, 0xbe, 0 },
+ { 0x04AE, 0x87, 0 },
+ { 0x04AF, 0x89, 0 },
+ { 0x04B0, 0xa6, 0 },
+ { 0x04B1, 0xb1, 0 },
+ { 0x04B2, 0x88, 0 },
+ { 0x04B3, 0x98, 0 },
+ { 0x04B6, 0x86, 0 },
+ { 0x04B7, 0x99, 0 },
+ { 0x04B8, 0x8f, 0 },
+ { 0x04B9, 0x9f, 0 },
+ { 0x04BA, 0x8e, 0 },
+ { 0x04BB, 0x9e, 0 },
+ { 0x04D8, 0xaa, 0 },
+ { 0x04D9, 0xba, 0 },
+ { 0x04E2, 0x8b, 0 },
+ { 0x04E3, 0x9b, 0 },
+ { 0x04E8, 0xa4, 0 },
+ { 0x04E9, 0xb5, 0 },
+ { 0x04EE, 0x82, 0 },
+ { 0x04EF, 0xad, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2116, 0xb9, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplPT154ByteCvtData =
+{
+ aImplPT154ToUniTab,
+ nullptr,
+ aImplPT154ToCharTab,
+ nullptr,
+ aImplPT154ToCharTabEx,
+ PT154UNI_START, PT154UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ PT154CHAR_START, PT154CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ PT154TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplPT154TextEncodingData
+ = { { &aImplPT154ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-5",
+ "PTCP154",
+ 1,
+ 1,
+ 1,
+ 204,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CYRILLIC */
diff --git a/sal/textenc/tcvtjp1.tab b/sal/textenc/tcvtjp1.tab
new file mode 100644
index 000000000..bedae368c
--- /dev/null
+++ b/sal/textenc/tcvtjp1.tab
@@ -0,0 +1,1547 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the DBCS to UniCode tables for the following */
+/* japanese charsets: SJIS, MS932, APPLE_JAPANESE */
+
+/* ======================================================================= */
+
+/* Changes: */
+/* 81_50: SJIS == 0xFFE3, MS932 == 0xFFE3, APPLE_JAPANESE == 0x0203 - we use in all systems 0xFFE3 for better MS compatibility */
+/* 81_5C: SJIS == 0x2015, MS932 == 0x2015, APPLE_JAPANESE == 0x2014 - we use in all systems 0x2015 for better MS compatibility */
+/* 81_5F: SJIS == 0x005C, MS932 == 0xFF3C, APPLE_JAPANESE == 0xFF3C - we use in all systems 0xFF3C for better MS compatibility */
+/* 81_60: SJIS == 0x301C, MS932 == 0xFF5E, APPLE_JAPANESE == 0x301C - we use in all systems 0xFF5E for better MS compatibility */
+/* 81_61: SJIS == 0x2016, MS932 == 0x2225, APPLE_JAPANESE == 0x2016 - we use in all systems 0x2225 for better MS compatibility */
+/* 81_63: SJIS == 0x2026, MS932 == 0x2026, APPLE_JAPANESE == 0x22EF - we use in all systems 0x2026 for better MS compatibility */
+/* 81_7C: SJIS == 0x2212, MS932 == 0xFF0D, APPLE_JAPANESE == 0x2212 - we use in all systems 0xFF0D for better MS compatibility */
+/* 81_91: SJIS == 0x00A2, MS932 == 0xFFE0, APPLE_JAPANESE == 0x00A2 - we use in all systems 0xFFE0 for better MS compatibility */
+/* 81_92: SJIS == 0x00A3, MS932 == 0xFFE1, APPLE_JAPANESE == 0x00A3 - we use in all systems 0xFFE1 for better MS compatibility */
+/* 81_CA: SJIS == 0x00AC, MS932 == 0xFFE2, APPLE_JAPANESE == 0x00AC - we use in all systems 0xFFE1 for better MS compatibility */
+
+sal_uInt16 const aImplDBCSToUniTab_MS932_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B, /* 0x40 */
+ 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, 0xFF3E, /* 0x40 */
+ 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD, /* 0x50 */
+ 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, 0xFF3C, /* 0x50 */
+ 0xFF5E, 0x2225, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, 0x201C, /* 0x60 */
+ 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, /* 0x60 */
+ 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, /* 0x70 */
+ 0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7, 0, /* 0x70 */
+ 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, /* 0x80 */
+ 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, /* 0x80 */
+ 0xFF04, 0xFFE0, 0xFFE1, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, /* 0x90 */
+ 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, /* 0x90 */
+ 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, 0x3012, /* 0xA0 */
+ 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, 0x2229, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, /* 0xD0 */
+ 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, 0x222B, /* 0xE0 */
+ 0x222C, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, 0x00B6, /* 0xF0 */
+ 0, 0, 0, 0, 0x25EF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x40 */
+ 0xFF10, /* 0x40 */
+ 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, /* 0x50 */
+ 0xFF19, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, /* 0x60 */
+ 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, /* 0x60 */
+ 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, /* 0x70 */
+ 0xFF39, 0xFF3A, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0x80 */
+ 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0x80 */
+ 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, /* 0x90 */
+ 0xFF58, 0xFF59, 0xFF5A, 0, 0, 0, 0, 0x3041, /* 0x90 */
+ 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, /* 0xA0 */
+ 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, /* 0xA0 */
+ 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, /* 0xB0 */
+ 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, /* 0xB0 */
+ 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, /* 0xC0 */
+ 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, /* 0xC0 */
+ 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, /* 0xD0 */
+ 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, /* 0xD0 */
+ 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, /* 0xE0 */
+ 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, /* 0xE0 */
+ 0x3092, 0x3093 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, /* 0x40 */
+ 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, /* 0x40 */
+ 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, /* 0x50 */
+ 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, /* 0x50 */
+ 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8, /* 0x60 */
+ 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0, /* 0x60 */
+ 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8, /* 0x70 */
+ 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0, /* 0x70 */
+ 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0x80 */
+ 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, /* 0x80 */
+ 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x0391, /* 0x90 */
+ 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, /* 0xA0 */
+ 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, /* 0xA0 */
+ 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x03B1, /* 0xB0 */
+ 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, /* 0xC0 */
+ 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, /* 0xC0 */
+ 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9 /* 0xD0 */
+ /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, /* 0x40 */
+ 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, /* 0x40 */
+ 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, /* 0x50 */
+ 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, /* 0x50 */
+ 0x042F, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, /* 0x70 */
+ 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0, /* 0x70 */
+ 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0x80 */
+ 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0x80 */
+ 0x044E, 0x044F, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x2500, /* 0x90 */
+ 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524, /* 0xA0 */
+ 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, 0x2517, /* 0xA0 */
+ 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F, 0x2528, /* 0xB0 */
+ 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, /* 0x40 */
+ 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, /* 0x40 */
+ 0x2470, 0x2471, 0x2472, 0x2473, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x2474, 0x2475, /* 0x50 */
+ 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, /* 0x60 */
+ 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, /* 0x60 */
+ 0x2486, 0x2487, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x2776, 0x2777, 0x2778, 0, /* 0x70 */
+ 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x2488, 0x2489, 0x248A, 0x248B, 0x248C, 0x248D, /* 0x90 */
+ 0x248E, 0x248F, 0x2490, 0, 0, 0, 0, 0x2160, /* 0x90 */
+ 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, /* 0xA0 */
+ 0x2169, 0x216A, 0x216B, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, /* 0xB0 */
+ 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x249C, 0x249D, 0x249E, 0x249F, 0x24A0, /* 0xD0 */
+ 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, 0x24A7, 0x24A8, /* 0xE0 */
+ 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, 0x24AF, 0x24B0, /* 0xE0 */
+ 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x339C, 0x339F, 0x339D, 0x33A0, 0x33A4, 0, 0x33A1, 0x33A5, /* 0x40 */
+ 0x339E, 0x33A2, 0x338E, 0, 0x338F, 0x33C4, 0x3396, 0x3397, /* 0x40 */
+ 0x2113, 0x3398, 0x33B3, 0x33B2, 0x33B1, 0x33B0, 0x2109, 0x33D4, /* 0x50 */
+ 0x33CB, 0x3390, 0x3385, 0x3386, 0x3387, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x2116, 0x33CD, 0x2121, 0, 0x2664, /* 0x90 */
+ 0x2667, 0x2661, 0x2662, 0x2660, 0x2663, 0x2665, 0x2666, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x3020, 0x260E, 0x3004, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x261E, /* 0xC0 */
+ 0x261C, 0x261D, 0x261F, 0x21C6, 0x21C4, 0x21C5, 0, 0x21E8, /* 0xC0 */
+ 0x21E6, 0x21E7, 0x21E9 /* 0xD0 */
+ /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_MS932_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, /* 0x40 */
+ 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, /* 0x40 */
+ 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162, 0x2163, /* 0x50 */
+ 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0, 0x3349, /* 0x50 */
+ 0x3314, 0x3322, 0x334D, 0x3318, 0x3327, 0x3303, 0x3336, 0x3351, /* 0x60 */
+ 0x3357, 0x330D, 0x3326, 0x3323, 0x332B, 0x334A, 0x333B, 0x339C, /* 0x60 */
+ 0x339D, 0x339E, 0x338E, 0x338F, 0x33C4, 0x33A1, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x337B, 0, /* 0x70 */
+ 0x301D, 0x301F, 0x2116, 0x33CD, 0x2121, 0x32A4, 0x32A5, 0x32A6, /* 0x80 */
+ 0x32A7, 0x32A8, 0x3231, 0x3232, 0x3239, 0x337E, 0x337D, 0x337C, /* 0x80 */
+ 0x2252, 0x2261, 0x222B, 0x222E, 0x2211, 0x221A, 0x22A5, 0x2220, /* 0x90 */
+ 0x221F, 0x22BF, 0x2235, 0x2229, 0x222A /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3230, 0x322A, 0x322B, 0x322C, 0x322D, 0x322E, 0x322F, 0x3240, /* 0x40 */
+ 0x3237, 0x3242, 0x3243, 0x3239, 0x323A, 0x3231, 0x323E, 0x3234, /* 0x40 */
+ 0x3232, 0x323B, 0x3236, 0x3233, 0x3235, 0x323C, 0x323D, 0x323F, /* 0x50 */
+ 0x3238, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x32A4, 0x32A5, 0x32A6, 0x32A7, 0x32A8, /* 0x90 */
+ 0x32A9, 0x3296, 0x329D, 0x3298, 0x329E, 0, 0x3299, 0x3349, /* 0x90 */
+ 0x3322, 0x334D, 0x3314, 0x3316, 0x3305, 0x3333, 0x334E, 0x3303, /* 0xA0 */
+ 0x3336, 0x3318, 0x3315, 0x3327, 0x3351, 0x334A, 0x3339, 0x3357, /* 0xA0 */
+ 0x330D, 0x3342, 0x3323, 0x3326, 0x333B, 0x332B, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x3300, 0x331E, 0x332A, /* 0xB0 */
+ 0x3331, 0x3347, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x337E, 0x337D, 0x337C, /* 0xE0 */
+ 0x337B, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x337F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x90 */
+ 0x4E9C, /* 0x90 */
+ 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, /* 0xA0 */
+ 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, /* 0xA0 */
+ 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, /* 0xB0 */
+ 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, 0x88B7, /* 0xB0 */
+ 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, /* 0xC0 */
+ 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, 0x59D4, /* 0xC0 */
+ 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, 0x70BA, /* 0xD0 */
+ 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, 0x8863, /* 0xD0 */
+ 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, 0x80B2, /* 0xE0 */
+ 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, /* 0xE0 */
+ 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, /* 0xF0 */
+ 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x222E, 0x221F, 0x22BF, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x301D, 0x301F, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x3094, 0, 0x30F7, 0x30F8, 0x30F9, 0x30FA, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4E9C, /* 0x90 */
+ 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, /* 0xA0 */
+ 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, /* 0xA0 */
+ 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, /* 0xB0 */
+ 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, 0x88B7, /* 0xB0 */
+ 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, /* 0xC0 */
+ 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, 0x59D4, /* 0xC0 */
+ 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, 0x70BA, /* 0xD0 */
+ 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, 0x8863, /* 0xD0 */
+ 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, 0x80B2, /* 0xE0 */
+ 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, /* 0xE0 */
+ 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, /* 0xF0 */
+ 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF, /* 0x40 */
+ 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893, /* 0x40 */
+ 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5, /* 0x50 */
+ 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2, /* 0x50 */
+ 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3, /* 0x60 */
+ 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834, /* 0x60 */
+ 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5, /* 0x70 */
+ 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0, /* 0x70 */
+ 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, /* 0x80 */
+ 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, /* 0x80 */
+ 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, /* 0x90 */
+ 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC, 0x62BC, /* 0x90 */
+ 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956, 0x9D2C, /* 0xA0 */
+ 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x61B6, /* 0xA0 */
+ 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069, 0x6E29, /* 0xB0 */
+ 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D, 0x4FA1, /* 0xB0 */
+ 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6, 0x5BE1, /* 0xC0 */
+ 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B, 0x73C2, /* 0xC0 */
+ 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304, 0x8377, /* 0xD0 */
+ 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6, 0x904E, /* 0xD0 */
+ 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B, 0x81E5, /* 0xE0 */
+ 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB, 0x4F1A, /* 0xE0 */
+ 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A, 0x6094, /* 0xF0 */
+ 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75, /* 0x40 */
+ 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916, /* 0x40 */
+ 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB, /* 0x50 */
+ 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, /* 0x50 */
+ 0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1, /* 0x60 */
+ 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A, /* 0x60 */
+ 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66, /* 0x70 */
+ 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0, /* 0x70 */
+ 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, /* 0x80 */
+ 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, /* 0x80 */
+ 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, /* 0x90 */
+ 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431, 0x7CA5, /* 0x90 */
+ 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, 0x520A, /* 0xA0 */
+ 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, 0x5B98, /* 0xA0 */
+ 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE, 0x63DB, /* 0xB0 */
+ 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57, 0x6F22, /* 0xB0 */
+ 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF, 0x7BA1, /* 0xC0 */
+ 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E, 0x89B3, /* 0xC0 */
+ 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2, 0x9665, /* 0xD0 */
+ 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC, 0x73A9, /* 0xD0 */
+ 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, 0x9854, /* 0xE0 */
+ 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, 0x5947, /* 0xE0 */
+ 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, 0x673A, /* 0xF0 */
+ 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63, /* 0x40 */
+ 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC, /* 0x40 */
+ 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993, /* 0x50 */
+ 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947, /* 0x50 */
+ 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409, /* 0x60 */
+ 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD, /* 0x60 */
+ 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7, /* 0x70 */
+ 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0, /* 0x70 */
+ 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, /* 0x80 */
+ 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, /* 0x80 */
+ 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, /* 0x90 */
+ 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC, 0x4F9B, /* 0x90 */
+ 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354, 0x5321, /* 0xA0 */
+ 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A, 0x602F, /* 0xA0 */
+ 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2, 0x72ED, /* 0xB0 */
+ 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1, 0x97FF, /* 0xB0 */
+ 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D, 0x5C40, /* 0xC0 */
+ 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4, 0x5747, /* 0xC0 */
+ 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981, 0x79BD, /* 0xD0 */
+ 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39, 0x8FD1, /* 0xD0 */
+ 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A, 0x72D7, /* 0xE0 */
+ 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2, 0x5177, /* 0xE0 */
+ 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047, 0x9685, /* 0xF0 */
+ 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688, /* 0x40 */
+ 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, /* 0x40 */
+ 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, /* 0x50 */
+ 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, /* 0x50 */
+ 0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A, /* 0x60 */
+ 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, /* 0x60 */
+ 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63, /* 0x70 */
+ 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0, /* 0x70 */
+ 0x5287, 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, /* 0x80 */
+ 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, /* 0x80 */
+ 0x5039, 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, /* 0x90 */
+ 0x5805, 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372, 0x691C, /* 0x90 */
+ 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79, 0x770C, /* 0xA0 */
+ 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375, 0x967A, /* 0xA0 */
+ 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B, 0x5F26, /* 0xB0 */
+ 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00, 0x8AFA, /* 0xB0 */
+ 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1, 0x5B64, /* 0xC0 */
+ 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56, 0x72D0, /* 0xC0 */
+ 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87, 0x8DE8, /* 0xD0 */
+ 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D, 0x5348, /* 0xD0 */
+ 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, 0x6A8E, /* 0xE0 */
+ 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E, 0x9BC9, /* 0xE0 */
+ 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C, 0x529F, /* 0xF0 */
+ 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F, /* 0x40 */
+ 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, /* 0x40 */
+ 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643, /* 0x50 */
+ 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, /* 0x50 */
+ 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05, /* 0x60 */
+ 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154, /* 0x60 */
+ 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC, /* 0x70 */
+ 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0, /* 0x70 */
+ 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, /* 0x80 */
+ 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, /* 0x80 */
+ 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, /* 0x90 */
+ 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC, 0x6B64, /* 0x90 */
+ 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068, 0x61C7, /* 0xA0 */
+ 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A, 0x826E, /* 0xA0 */
+ 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6, 0x5DEE, /* 0xB0 */
+ 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF, 0x5750, /* 0xB0 */
+ 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9, 0x585E, /* 0xC0 */
+ 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73, 0x6E08, /* 0xC0 */
+ 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E, 0x7D30, /* 0xD0 */
+ 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750, 0x7F6A, /* 0xD0 */
+ 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4, 0x54B2, /* 0xE0 */
+ 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B, 0x643E, /* 0xE0 */
+ 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F, 0x685C, /* 0xF0 */
+ 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, /* 0x40 */
+ 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, /* 0x40 */
+ 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, /* 0x50 */
+ 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178, /* 0x50 */
+ 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, /* 0x60 */
+ 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9, /* 0x60 */
+ 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307, /* 0x70 */
+ 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0, /* 0x70 */
+ 0x6B7B, 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, /* 0x80 */
+ 0x80A2, 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, /* 0x80 */
+ 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, /* 0x90 */
+ 0x4F8D, 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642, 0x6B21, /* 0x90 */
+ 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A, 0x800C, /* 0xA0 */
+ 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F, 0x8B58, /* 0xA0 */
+ 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1, 0x57F7, /* 0xB0 */
+ 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, 0x8CEA, /* 0xB0 */
+ 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61, 0x854A, /* 0xC0 */
+ 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C, 0x716E, /* 0xC0 */
+ 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7, 0x90AA, /* 0xD0 */
+ 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C, 0x91C8, /* 0xD0 */
+ 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6, 0x5B88, /* 0xE0 */
+ 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B, 0x8DA3, /* 0xE0 */
+ 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388, 0x6A39, /* 0xF0 */
+ 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0, /* 0x40 */
+ 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846, /* 0x40 */
+ 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6, /* 0x50 */
+ 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4, /* 0x50 */
+ 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919, /* 0x60 */
+ 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA, /* 0x60 */
+ 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C, /* 0x70 */
+ 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0, /* 0x70 */
+ 0x6E96, 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, /* 0x80 */
+ 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, /* 0x80 */
+ 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, /* 0x90 */
+ 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F, 0x52DD, /* 0x90 */
+ 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617, 0x5968, /* 0xA0 */
+ 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A, 0x5E84, /* 0xA0 */
+ 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C, 0x6377, /* 0xB0 */
+ 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F, 0x6A35, /* 0xB0 */
+ 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167, 0x75C7, /* 0xC0 */
+ 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11, 0x7CA7, /* 0xC0 */
+ 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3, 0x8A1F, /* 0xD0 */
+ 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266, 0x937E, /* 0xD0 */
+ 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57, 0x5197, /* 0xE0 */
+ 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5, 0x64FE, /* 0xE0 */
+ 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8, 0x8B72, /* 0xF0 */
+ 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, /* 0x40 */
+ 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507, /* 0x40 */
+ 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B, /* 0x50 */
+ 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E, /* 0x50 */
+ 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, /* 0x60 */
+ 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875, /* 0x60 */
+ 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663, /* 0x70 */
+ 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0, /* 0x70 */
+ 0x9017, 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, /* 0x80 */
+ 0x7C8B, 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, /* 0x80 */
+ 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, /* 0x90 */
+ 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE, 0x6F84, /* 0x90 */
+ 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4, 0x5236, /* 0xA0 */
+ 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, 0x661F, /* 0xA0 */
+ 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, 0x76DB, /* 0xB0 */
+ 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, 0x8ACB, /* 0xB0 */
+ 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106, 0x96BB, /* 0xC0 */
+ 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3, 0x7A4D, /* 0xC0 */
+ 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F, 0x78A9, /* 0xD0 */
+ 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83, 0x7BC0, /* 0xD0 */
+ 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148, 0x5343, /* 0xE0 */
+ 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247, 0x64B0, /* 0xE0 */
+ 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, 0x714E, /* 0xF0 */
+ 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE, /* 0x40 */
+ 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D, /* 0x40 */
+ 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE, /* 0x50 */
+ 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9, /* 0x50 */
+ 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44, /* 0x60 */
+ 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC, /* 0x60 */
+ 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64, /* 0x70 */
+ 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0, /* 0x70 */
+ 0x64CD, 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, /* 0x80 */
+ 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, /* 0x80 */
+ 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, /* 0x90 */
+ 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E, 0x81D3, /* 0x90 */
+ 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373, 0x606F, /* 0xA0 */
+ 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E, 0x8CCA, /* 0xA0 */
+ 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58, 0x5B6B, /* 0xB0 */
+ 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A, 0x6C70, /* 0xB0 */
+ 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1, 0x8235, /* 0xC0 */
+ 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE, 0x8010, /* 0xC0 */
+ 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF, 0x6CF0, /* 0xD0 */
+ 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000, 0x902E, /* 0xD0 */
+ 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C, 0x918D, /* 0xE0 */
+ 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85, 0x6258, /* 0xE0 */
+ 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438, 0x6FC1, /* 0xF0 */
+ 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA, /* 0x40 */
+ 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, /* 0x40 */
+ 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, /* 0x50 */
+ 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6, /* 0x50 */
+ 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696, /* 0x60 */
+ 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B, /* 0x60 */
+ 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718, /* 0x70 */
+ 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0, /* 0x70 */
+ 0x9010, 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, /* 0x80 */
+ 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, /* 0x80 */
+ 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, /* 0x90 */
+ 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5, 0x5E16, /* 0x90 */
+ 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, 0x6311, /* 0xA0 */
+ 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, 0x8139, /* 0xA0 */
+ 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, 0x9577, /* 0xB0 */
+ 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88, 0x73CD, /* 0xB0 */
+ 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC, 0x8FFD, /* 0xC0 */
+ 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB, 0x4F43, /* 0xC0 */
+ 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F, 0x6F70, /* 0xD0 */
+ 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3, 0x9DB4, /* 0xD0 */
+ 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, 0x5824, /* 0xE0 */
+ 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, 0x62B5, /* 0xE0 */
+ 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, 0x7DE0, /* 0xF0 */
+ 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575, /* 0x40 */
+ 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9, /* 0x40 */
+ 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55, /* 0x50 */
+ 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9, /* 0x50 */
+ 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835, /* 0x60 */
+ 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B, /* 0x60 */
+ 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA, /* 0x70 */
+ 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0, /* 0x70 */
+ 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, /* 0x80 */
+ 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, /* 0x80 */
+ 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, /* 0x90 */
+ 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230, 0x8463, /* 0x90 */
+ 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003, 0x900F, /* 0xA0 */
+ 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5, 0x540C, /* 0xA0 */
+ 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5, 0x80F4, /* 0xB0 */
+ 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97, 0x5FB3, /* 0xB0 */
+ 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC, 0x8AAD, /* 0xC0 */
+ 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6, 0x82EB, /* 0xC0 */
+ 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566, 0x6C8C, /* 0xD0 */
+ 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948, 0x90A3, /* 0xD0 */
+ 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A, 0x934B, /* 0xE0 */
+ 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF, 0x96E3, /* 0xE0 */
+ 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1, 0x8089, /* 0xF0 */
+ 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, /* 0x40 */
+ 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5, /* 0x40 */
+ 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, /* 0x50 */
+ 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, /* 0x50 */
+ 0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2, /* 0x60 */
+ 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3, /* 0x60 */
+ 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC, /* 0x70 */
+ 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0, /* 0x70 */
+ 0x6973, 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, /* 0x80 */
+ 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, /* 0x80 */
+ 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, /* 0x90 */
+ 0x66DD, 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6, 0x51FD, /* 0x90 */
+ 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, 0x808C, /* 0xA0 */
+ 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197, 0x9AEA, /* 0xA0 */
+ 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A, 0x5859, /* 0xB0 */
+ 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB, 0x5E06, /* 0xB0 */
+ 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF, 0x73ED, /* 0xC0 */
+ 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6, 0x7169, /* 0xC0 */
+ 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0, 0x8543, /* 0xD0 */
+ 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C, 0x60B2, /* 0xD0 */
+ 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, 0x76AE, /* 0xE0 */
+ 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, /* 0xE0 */
+ 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E, 0x5FAE, /* 0xF0 */
+ 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D, /* 0x40 */
+ 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867, /* 0x40 */
+ 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, /* 0x50 */
+ 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF, /* 0x50 */
+ 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED, /* 0x60 */
+ 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3, /* 0x60 */
+ 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66, /* 0x70 */
+ 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0, /* 0x70 */
+ 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, /* 0x80 */
+ 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, /* 0x80 */
+ 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, /* 0x90 */
+ 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D, 0x798F, /* 0x90 */
+ 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8, 0x4ECF, /* 0xA0 */
+ 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4, 0x626E, /* 0xA0 */
+ 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587, 0x805E, /* 0xB0 */
+ 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A, 0x67C4, /* 0xB0 */
+ 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB, 0x58C1, /* 0xC0 */
+ 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F, 0x5909, /* 0xC0 */
+ 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF, 0x52C9, /* 0xD0 */
+ 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703, 0x6355, /* 0xD0 */
+ 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893, 0x6155, /* 0xE0 */
+ 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8, 0x5305, /* 0xE0 */
+ 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29, 0x5E96, /* 0xF0 */
+ 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, /* 0x40 */
+ 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, /* 0x40 */
+ 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, /* 0x50 */
+ 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, /* 0x50 */
+ 0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E, /* 0x60 */
+ 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2, /* 0x60 */
+ 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86, /* 0x70 */
+ 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0, /* 0x70 */
+ 0x6469, 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, /* 0x80 */
+ 0x6BCE, 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, /* 0x80 */
+ 0x9C52, 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, /* 0x90 */
+ 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80, 0x6F2B, /* 0x90 */
+ 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, /* 0xA0 */
+ 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D, 0x6C11, /* 0xA0 */
+ 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727, 0x9D61, /* 0xB0 */
+ 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E, 0x76DF, /* 0xB0 */
+ 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D, 0x68C9, /* 0xC0 */
+ 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302, 0x5984, /* 0xC0 */
+ 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499, 0x5132, /* 0xD0 */
+ 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24, 0x623B, /* 0xD0 */
+ 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301, 0x4E5F, /* 0xE0 */
+ 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2, 0x5384, /* 0xE0 */
+ 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3, 0x85AE, /* 0xF0 */
+ 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5, /* 0x40 */
+ 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C, /* 0x40 */
+ 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091, /* 0x50 */
+ 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89, /* 0x50 */
+ 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA, /* 0x60 */
+ 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194, /* 0x60 */
+ 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21, /* 0x70 */
+ 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0, /* 0x70 */
+ 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, /* 0x80 */
+ 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, /* 0x80 */
+ 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, /* 0x90 */
+ 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483, 0x75E2, /* 0x90 */
+ 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387, 0x7ACB, /* 0xA0 */
+ 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409, 0x7559, /* 0xA0 */
+ 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E, 0x65C5, /* 0xB0 */
+ 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE, 0x6599, /* 0xB0 */
+ 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7, 0x826F, /* 0xC0 */
+ 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1, 0x502B, /* 0xC0 */
+ 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A, 0x96A3, /* 0xD0 */
+ 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E, 0x4EE4, /* 0xD0 */
+ 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2, 0x793C, /* 0xE0 */
+ 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62, 0x66A6, /* 0xE0 */
+ 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B, 0x6190, /* 0xF0 */
+ 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, /* 0x40 */
+ 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, /* 0x40 */
+ 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E, /* 0x50 */
+ 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6, /* 0x50 */
+ 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0, /* 0x60 */
+ 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900, /* 0x60 */
+ 0x6E7E, 0x7897, 0x8155, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5F0C, /* 0x90 */
+ 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F, 0x4E42, /* 0xA0 */
+ 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212, 0x5F0D, /* 0xA0 */
+ 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3, 0x4EB6, /* 0xB0 */
+ 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE, 0x4EED, /* 0xB0 */
+ 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D, 0x4F57, /* 0xC0 */
+ 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69, 0x4F70, /* 0xC0 */
+ 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF, 0x4FCE, /* 0xD0 */
+ 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5, 0x501A, /* 0xD0 */
+ 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6, 0x5021, /* 0xE0 */
+ 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043, 0x5047, /* 0xE0 */
+ 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C, 0x5078, /* 0xF0 */
+ 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED, /* 0x40 */
+ 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116, /* 0x40 */
+ 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B, /* 0x50 */
+ 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169, /* 0x50 */
+ 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F, /* 0x60 */
+ 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9, /* 0x60 */
+ 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD, /* 0x70 */
+ 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0, /* 0x70 */
+ 0x51F0, 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, /* 0x80 */
+ 0x522A, 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, /* 0x80 */
+ 0x525E, 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, /* 0x90 */
+ 0x528D, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8, 0x8FA7, /* 0x90 */
+ 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7, 0x52DE, /* 0xA0 */
+ 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8, 0x52F9, /* 0xA0 */
+ 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315, 0x531A, /* 0xB0 */
+ 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, /* 0xB0 */
+ 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E, 0x5918, /* 0xC0 */
+ 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5, 0x53AE, /* 0xC0 */
+ 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC, 0x71EE, /* 0xD0 */
+ 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440, 0x542C, /* 0xD0 */
+ 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E, 0x548F, /* 0xE0 */
+ 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492, 0x547B, /* 0xE0 */
+ 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2, 0x54B8, /* 0xF0 */
+ 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6, /* 0x40 */
+ 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539, /* 0x40 */
+ 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557, /* 0x50 */
+ 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F, /* 0x50 */
+ 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9, /* 0x60 */
+ 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4, /* 0x60 */
+ 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9, /* 0x70 */
+ 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0, /* 0x70 */
+ 0x566B, 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, /* 0x80 */
+ 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, /* 0x80 */
+ 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, /* 0x90 */
+ 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709, 0x5708, /* 0x90 */
+ 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C, 0x5726, /* 0xA0 */
+ 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769, 0x57C0, /* 0xA0 */
+ 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3, 0x57A4, /* 0xB0 */
+ 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3, 0x580A, /* 0xB0 */
+ 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821, 0x5862, /* 0xC0 */
+ 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885, 0x58B9, /* 0xC0 */
+ 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE, 0x58C5, /* 0xD0 */
+ 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC, 0x58E4, /* 0xD0 */
+ 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD, 0x5902, /* 0xE0 */
+ 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D, 0x5932, /* 0xE0 */
+ 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A, 0x5958, /* 0xF0 */
+ 0x5962, 0x5960, 0x5967, 0x596C, 0x5969 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6, /* 0x40 */
+ 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11, /* 0x40 */
+ 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36, /* 0x50 */
+ 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD, /* 0x50 */
+ 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C, /* 0x60 */
+ 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43, /* 0x60 */
+ 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69, /* 0x70 */
+ 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0, /* 0x70 */
+ 0x5B83, 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, /* 0x80 */
+ 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, /* 0x80 */
+ 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, /* 0x90 */
+ 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53, 0x5C50, /* 0x90 */
+ 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79, 0x5C8C, /* 0xA0 */
+ 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7, /* 0xA0 */
+ 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, /* 0xB0 */
+ 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, 0x5D1B, /* 0xB0 */
+ 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, 0x5D52, /* 0xC0 */
+ 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84, 0x5D82, /* 0xC0 */
+ 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7, 0x5DBC, /* 0xD0 */
+ 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB, 0x5DF2, /* 0xD0 */
+ 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36, 0x5E37, /* 0xE0 */
+ 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F, 0x5E62, /* 0xE0 */
+ 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0, /* 0xF0 */
+ 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, /* 0x40 */
+ 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, /* 0x40 */
+ 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29, /* 0x50 */
+ 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, /* 0x50 */
+ 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83, /* 0x60 */
+ 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99, /* 0x60 */
+ 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, /* 0x70 */
+ 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0, /* 0x70 */
+ 0x6019, 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, /* 0x80 */
+ 0x6026, 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, /* 0x80 */
+ 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, /* 0x90 */
+ 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A, 0x6084, /* 0x90 */
+ 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1, 0x60B8, /* 0xA0 */
+ 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5, 0x60D8, /* 0xA0 */
+ 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4, 0x60FA, /* 0xB0 */
+ 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147, 0x613E, /* 0xB0 */
+ 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134, 0x613D, /* 0xC0 */
+ 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A, 0x616B, /* 0xC0 */
+ 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153, 0x6175, /* 0xD0 */
+ 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A, 0x6191, /* 0xD0 */
+ 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8, 0x61C3, /* 0xE0 */
+ 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3, 0x61F6, /* 0xE0 */
+ 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200, 0x6208, /* 0xF0 */
+ 0x6209, 0x620D, 0x620C, 0x6214, 0x621B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241, /* 0x40 */
+ 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282, /* 0x40 */
+ 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294, /* 0x50 */
+ 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8, /* 0x50 */
+ 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C, /* 0x60 */
+ 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350, /* 0x60 */
+ 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB, /* 0x70 */
+ 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0, /* 0x70 */
+ 0x6369, 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, /* 0x80 */
+ 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, /* 0x80 */
+ 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, /* 0x90 */
+ 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC, 0x64DA, /* 0x90 */
+ 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, 0x64E7, /* 0xA0 */
+ 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, 0x64F6, /* 0xA0 */
+ 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, 0x6505, /* 0xB0 */
+ 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, /* 0xB0 */
+ 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E, 0x655D, /* 0xC0 */
+ 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F, 0x65AB, /* 0xC0 */
+ 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2, 0x65DB, /* 0xD0 */
+ 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603, 0x65FB, /* 0xD0 */
+ 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, 0x6649, /* 0xE0 */
+ 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, 0x6662, /* 0xE0 */
+ 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, 0x669D, /* 0xF0 */
+ 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9, /* 0x40 */
+ 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727, /* 0x40 */
+ 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, /* 0x50 */
+ 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9, /* 0x50 */
+ 0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7, /* 0x60 */
+ 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE, /* 0x60 */
+ 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C, /* 0x70 */
+ 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0, /* 0x70 */
+ 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, /* 0x80 */
+ 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, /* 0x80 */
+ 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, /* 0x90 */
+ 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD, 0x68D4, /* 0x90 */
+ 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3, 0x6925, /* 0xA0 */
+ 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923, 0x6921, /* 0xA0 */
+ 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954, 0x697E, /* 0xB0 */
+ 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961, 0x695E, /* 0xB0 */
+ 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF, 0x69C1, /* 0xC0 */
+ 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB, 0x69C3, /* 0xC0 */
+ 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4, 0x69DE, /* 0xD0 */
+ 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2, 0x69E7, /* 0xD0 */
+ 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A, 0x6A12, /* 0xE0 */
+ 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36, 0x6A78, /* 0xE0 */
+ 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22, 0x6A90, /* 0xF0 */
+ 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC, /* 0x40 */
+ 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05, /* 0x40 */
+ 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37, /* 0x50 */
+ 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59, /* 0x50 */
+ 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80, /* 0x60 */
+ 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA, /* 0x60 */
+ 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6, /* 0x70 */
+ 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0, /* 0x70 */
+ 0x9EBE, 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, /* 0x80 */
+ 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, /* 0x80 */
+ 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, /* 0x90 */
+ 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE, 0x6CBA, /* 0x90 */
+ 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, 0x6D2B, /* 0xA0 */
+ 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C, 0x6D63, /* 0xA0 */
+ 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, /* 0xB0 */
+ 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6, 0x6DB8, /* 0xB0 */
+ 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5, 0x6DFA, /* 0xC0 */
+ 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E, 0x6E2E, /* 0xC0 */
+ 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B, 0x6E76, /* 0xD0 */
+ 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF, 0x6E1D, /* 0xD0 */
+ 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, 0x6EBD, /* 0xE0 */
+ 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, /* 0xE0 */
+ 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, /* 0xF0 */
+ 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80, /* 0x40 */
+ 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, /* 0x40 */
+ 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, /* 0x50 */
+ 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, /* 0x50 */
+ 0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F, /* 0x60 */
+ 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030, /* 0x60 */
+ 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1, /* 0x70 */
+ 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0, /* 0x70 */
+ 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, /* 0x80 */
+ 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, /* 0x80 */
+ 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, /* 0x90 */
+ 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC, 0x71F9, /* 0x90 */
+ 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C, 0x7230, /* 0xA0 */
+ 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B, 0x7258, /* 0xA0 */
+ 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72A2, /* 0xB0 */
+ 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE, 0x72D2, /* 0xB0 */
+ 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317, 0x730A, /* 0xC0 */
+ 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325, 0x733E, /* 0xC0 */
+ 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370, 0x7378, /* 0xD0 */
+ 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB, 0x73C0, /* 0xD0 */
+ 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425, 0x73F8, /* 0xE0 */
+ 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441, 0x745C, /* 0xE0 */
+ 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B, 0x749E, /* 0xF0 */
+ 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1, /* 0x40 */
+ 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D, /* 0x40 */
+ 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D, /* 0x50 */
+ 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567, /* 0x50 */
+ 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A, /* 0x60 */
+ 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2, /* 0x60 */
+ 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD, /* 0x70 */
+ 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0, /* 0x70 */
+ 0x75FC, 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, /* 0x80 */
+ 0x7609, 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, /* 0x80 */
+ 0x7630, 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, /* 0x90 */
+ 0x7662, 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670, 0x7672, /* 0x90 */
+ 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B, 0x768E, /* 0xA0 */
+ 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8, 0x76B9, /* 0xA0 */
+ 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1, 0x76E5, /* 0xB0 */
+ 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704, 0x7729, /* 0xB0 */
+ 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738, 0x7747, /* 0xC0 */
+ 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E, 0x7779, /* 0xC0 */
+ 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6, 0x77B9, /* 0xD0 */
+ 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7, 0x77DA, /* 0xD0 */
+ 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926, 0x7820, /* 0xE0 */
+ 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A, 0x788C, /* 0xE0 */
+ 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB, 0x78D4, /* 0xF0 */
+ 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919, /* 0x40 */
+ 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955, /* 0x40 */
+ 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA, /* 0x50 */
+ 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC, /* 0x50 */
+ 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F, /* 0x60 */
+ 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49, /* 0x60 */
+ 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88, /* 0x70 */
+ 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0, /* 0x70 */
+ 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, /* 0x80 */
+ 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, /* 0x80 */
+ 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, /* 0x90 */
+ 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50, 0x7B7A, /* 0x90 */
+ 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65, 0x7B74, /* 0xA0 */
+ 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98, 0x7B9F, /* 0xA0 */
+ 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D, 0x7B99, /* 0xB0 */
+ 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD, 0x7BE9, /* 0xB0 */
+ 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07, 0x7C13, /* 0xC0 */
+ 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27, 0x7C2A, /* 0xC0 */
+ 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54, 0x7C4F, /* 0xD0 */
+ 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65, 0x7C6C, /* 0xD0 */
+ 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB, 0x7CA1, /* 0xE0 */
+ 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD, 0x7CC0, /* 0xE0 */
+ 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B, 0x7CEF, /* 0xF0 */
+ 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, /* 0x40 */
+ 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68, /* 0x40 */
+ 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, /* 0x50 */
+ 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB, /* 0x50 */
+ 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8, /* 0x60 */
+ 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A, /* 0x60 */
+ 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22, /* 0x70 */
+ 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0, /* 0x70 */
+ 0x7E32, 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, /* 0x80 */
+ 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, /* 0x80 */
+ 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, /* 0x90 */
+ 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A, 0x7F45, /* 0x90 */
+ 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54, 0x7F58, /* 0xA0 */
+ 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82, 0x7F86, /* 0xA0 */
+ 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A, /* 0xB0 */
+ 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, 0x8B71, /* 0xB0 */
+ 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, /* 0xC0 */
+ 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012, 0x8018, /* 0xC0 */
+ 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A, 0x8046, /* 0xD0 */
+ 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073, 0x8072, /* 0xD0 */
+ 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086, 0x8085, /* 0xE0 */
+ 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB, 0x80E5, /* 0xE0 */
+ 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF, 0x80F1, /* 0xF0 */
+ 0x811B, 0x8129, 0x8123, 0x812F, 0x814B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E, /* 0x40 */
+ 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182, /* 0x40 */
+ 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0, /* 0x50 */
+ 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9, /* 0x50 */
+ 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0, /* 0x60 */
+ 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207, /* 0x60 */
+ 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233, /* 0x70 */
+ 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0, /* 0x70 */
+ 0x8262, 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, /* 0x80 */
+ 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, /* 0x80 */
+ 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, /* 0x90 */
+ 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9, 0x8335, /* 0x90 */
+ 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, /* 0xA0 */
+ 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA, 0x839F, /* 0xA0 */
+ 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C, 0x83B5, /* 0xB0 */
+ 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413, 0x83EB, /* 0xB0 */
+ 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7, 0x8407, /* 0xC0 */
+ 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438, 0x8506, /* 0xC0 */
+ 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477, 0x846B, /* 0xD0 */
+ 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F, 0x8479, /* 0xD0 */
+ 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9, 0x84CD, /* 0xE0 */
+ 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1, 0x8521, /* 0xE0 */
+ 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515, 0x8514, /* 0xF0 */
+ 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591, /* 0x40 */
+ 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C, /* 0x40 */
+ 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0, /* 0x50 */
+ 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B, /* 0x50 */
+ 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D, /* 0x60 */
+ 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9, /* 0x60 */
+ 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0, /* 0x70 */
+ 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0, /* 0x70 */
+ 0x86DF, 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, /* 0x80 */
+ 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, /* 0x80 */
+ 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, /* 0x90 */
+ 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759, 0x8753, /* 0x90 */
+ 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, 0x87CB, /* 0xA0 */
+ 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, 0x87C7, /* 0xA0 */
+ 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, 0x87FE, /* 0xB0 */
+ 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, 0x8822, /* 0xB0 */
+ 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844, 0x8842, /* 0xC0 */
+ 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E, 0x889E, /* 0xC0 */
+ 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88AE, /* 0xD0 */
+ 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1, 0x88C3, /* 0xD0 */
+ 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902, 0x88FC, /* 0xE0 */
+ 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, 0x8943, /* 0xE0 */
+ 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, 0x8936, /* 0xF0 */
+ 0x8938, 0x894C, 0x891D, 0x8960, 0x895E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E, /* 0x40 */
+ 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6, /* 0x40 */
+ 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA, /* 0x50 */
+ 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10, /* 0x50 */
+ 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52, /* 0x60 */
+ 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82, /* 0x60 */
+ 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, /* 0x70 */
+ 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0, /* 0x70 */
+ 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, /* 0x80 */
+ 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, /* 0x80 */
+ 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, /* 0x90 */
+ 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B, 0x8B5F, /* 0x90 */
+ 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E, 0x8B92, /* 0xA0 */
+ 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F, 0x8C48, /* 0xA0 */
+ 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78, 0x8C7A, /* 0xB0 */
+ 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94, 0x8C7C, /* 0xB0 */
+ 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3, 0x8CAE, /* 0xC0 */
+ 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD, 0x8CFA, /* 0xC0 */
+ 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D, 0x8D10, /* 0xD0 */
+ 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D, 0x8D71, /* 0xD0 */
+ 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF, 0x8DDA, /* 0xE0 */
+ 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF, 0x8DE3, /* 0xE0 */
+ 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10, 0x8E1F, /* 0xF0 */
+ 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60, /* 0x40 */
+ 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87, /* 0x40 */
+ 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99, /* 0x50 */
+ 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, /* 0x50 */
+ 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, /* 0x60 */
+ 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F, /* 0x60 */
+ 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42, /* 0x70 */
+ 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0, /* 0x70 */
+ 0x8F62, 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, /* 0x80 */
+ 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, /* 0x80 */
+ 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, /* 0x90 */
+ 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8, 0x904F, /* 0x90 */
+ 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, 0x9058, /* 0xA0 */
+ 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, 0x907D, /* 0xA0 */
+ 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF, 0x90B1, /* 0xB0 */
+ 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112, 0x9119, /* 0xB0 */
+ 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, /* 0xC0 */
+ 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB, 0x91AF, /* 0xC0 */
+ 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9, 0x91CB, /* 0xD0 */
+ 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5, 0x91F6, /* 0xD0 */
+ 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, 0x9257, /* 0xE0 */
+ 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, 0x9250, /* 0xE0 */
+ 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, 0x92B7, /* 0xF0 */
+ 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C, /* 0x40 */
+ 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394, /* 0x40 */
+ 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD, /* 0x50 */
+ 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407, /* 0x50 */
+ 0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452, /* 0x60 */
+ 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470, /* 0x60 */
+ 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F, /* 0x70 */
+ 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0, /* 0x70 */
+ 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, /* 0x80 */
+ 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, /* 0x80 */
+ 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, /* 0x90 */
+ 0x9642, 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E, 0x965D, /* 0x90 */
+ 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695, 0x9697, /* 0xA0 */
+ 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6, 0x96B8, /* 0xA0 */
+ 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC, 0x970D, /* 0xB0 */
+ 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E, 0x9711, /* 0xB0 */
+ 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739, 0x973D, /* 0xC0 */
+ 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C, 0x9760, /* 0xC0 */
+ 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779, 0x9785, /* 0xD0 */
+ 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790, 0x979C, /* 0xD0 */
+ 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6, 0x97C8, /* 0xE0 */
+ 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6, 0x97F5, /* 0xE0 */
+ 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D, 0x9846, /* 0xF0 */
+ 0x984F, 0x984B, 0x986B, 0x986F, 0x9870 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_E9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4, /* 0x40 */
+ 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914, /* 0x40 */
+ 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E, /* 0x50 */
+ 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951, /* 0x50 */
+ 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE, /* 0x60 */
+ 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE, /* 0x60 */
+ 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2, /* 0x70 */
+ 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0, /* 0x70 */
+ 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, /* 0x80 */
+ 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, /* 0x80 */
+ 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, /* 0x90 */
+ 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7, 0x9AFB, /* 0x90 */
+ 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25, 0x9B27, /* 0xA0 */
+ 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44, 0x9B43, /* 0xA0 */
+ 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93, 0x9B83, /* 0xB0 */
+ 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4, 0x9BC0, /* 0xB0 */
+ 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3, 0x9BE2, /* 0xC0 */
+ 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15, /* 0xC0 */
+ 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12, 0x9C0A, /* 0xD0 */
+ 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30, 0x9C47, /* 0xD0 */
+ 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, 0x9C78, /* 0xE0 */
+ 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03, 0x9D06, /* 0xE0 */
+ 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15, 0x9D12, /* 0xF0 */
+ 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_SJIS_EA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89, /* 0x40 */
+ 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, /* 0x40 */
+ 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, /* 0x50 */
+ 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, /* 0x50 */
+ 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, /* 0x60 */
+ 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8, /* 0x60 */
+ 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4, /* 0x70 */
+ 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0, /* 0x70 */
+ 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, /* 0x80 */
+ 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, /* 0x80 */
+ 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, /* 0x90 */
+ 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0, 0x582F, /* 0x90 */
+ 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_EB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE33, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xFE31, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xFE30, 0, 0, 0, /* 0x60 */
+ 0, 0xFE35, 0xFE36, 0xFE39, 0xFE3A, 0, 0, 0xFE37, /* 0x60 */
+ 0xFE38, 0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42, 0xFE43, /* 0x70 */
+ 0xFE44, 0xFE3B, 0xFE3C /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_MS932_ED[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631, /* 0x40 */
+ 0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, /* 0x40 */
+ 0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, /* 0x50 */
+ 0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094, /* 0x50 */
+ 0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215, /* 0x60 */
+ 0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372, /* 0x60 */
+ 0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF, /* 0x70 */
+ 0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0, /* 0x70 */
+ 0xFA10, 0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, /* 0x80 */
+ 0x59A4, 0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, /* 0x80 */
+ 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, /* 0x90 */
+ 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7, 0x5FDE, /* 0x90 */
+ 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2, 0x6111, /* 0xA0 */
+ 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460, 0x649D, /* 0xA0 */
+ 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609, 0x662E, 0x661E, /* 0xB0 */
+ 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699, 0x66A0, /* 0xB0 */
+ 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB, 0x6852, /* 0xC0 */
+ 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968, 0xFA14, 0x6998, /* 0xC0 */
+ 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, /* 0xD0 */
+ 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA, 0x6D04, 0x6D87, /* 0xD0 */
+ 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC, 0x6E39, /* 0xE0 */
+ 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5, 0x7005, /* 0xE0 */
+ 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C, 0x7146, /* 0xF0 */
+ 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_MS932_EE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6, 0x73E3, /* 0x40 */
+ 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E, 0x7462, /* 0x40 */
+ 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E, 0x769B, /* 0x50 */
+ 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864, 0x787A, /* 0x50 */
+ 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1, /* 0x60 */
+ 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7, /* 0x60 */
+ 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362, /* 0x70 */
+ 0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0, /* 0x70 */
+ 0x856B, 0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12, /* 0x80 */
+ 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, /* 0x80 */
+ 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24, /* 0x90 */
+ 0xFA25, 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA, 0x91D7, /* 0x90 */
+ 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210, 0x920A, /* 0xA0 */
+ 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239, 0x9267, /* 0xA0 */
+ 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0, 0xFA27, /* 0xB0 */
+ 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28, 0x931E, /* 0xB0 */
+ 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6, 0x93DE, /* 0xC0 */
+ 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29, 0x969D, /* 0xC0 */
+ 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751, 0x9755, /* 0xD0 */
+ 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E, 0x9A4E, /* 0xD0 */
+ 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB, 0x9C00, /* 0xE0 */
+ 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0, 0, 0x2170, /* 0xE0 */
+ 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, /* 0xF0 */
+ 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_MS932_FA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, /* 0x40 */
+ 0x2178, 0x2179, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, /* 0x40 */
+ 0x2166, 0x2167, 0x2168, 0x2169, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02, /* 0x50 */
+ 0x3231, 0x2116, 0x2121, 0x2235, 0x7E8A, 0x891C, 0x9348, 0x9288, /* 0x50 */
+ 0x84DC, 0x4FC9, 0x70BB, 0x6631, 0x68C8, 0x92F9, 0x66FB, 0x5F45, /* 0x60 */
+ 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, 0x4F03, 0x4F39, 0x4F56, 0x4F92, /* 0x60 */
+ 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, 0x5040, 0x5022, 0x4FFF, 0x501E, /* 0x70 */
+ 0x5046, 0x5070, 0x5042, 0x5094, 0x50F4, 0x50D8, 0x514A, 0, /* 0x70 */
+ 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215, 0x529C, 0x52A6, 0x52C0, /* 0x80 */
+ 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372, 0x5393, 0x53B2, 0x53DD, /* 0x80 */
+ 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF, 0x5586, 0x5759, 0x5765, /* 0x90 */
+ 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10, 0x589E, 0x58B2, 0x590B, /* 0x90 */
+ 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4, 0x59BA, 0x5B56, 0x5BC0, /* 0xA0 */
+ 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27, /* 0xA0 */
+ 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, /* 0xB0 */
+ 0x5F34, 0x5F67, 0x5FB7, 0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, /* 0xB0 */
+ 0x60D5, 0x6120, 0x60F2, 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, /* 0xC0 */
+ 0x62A6, 0x63F5, 0x6460, 0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, /* 0xC0 */
+ 0x663B, 0x6609, 0x662E, 0x661E, 0x6624, 0x6665, 0x6657, 0x6659, /* 0xD0 */
+ 0xFA12, 0x6673, 0x6699, 0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, /* 0xD0 */
+ 0xF929, 0x6766, 0x67BB, 0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, /* 0xE0 */
+ 0xFA13, 0x6968, 0xFA14, 0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, /* 0xE0 */
+ 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, /* 0xF0 */
+ 0x6C6F, 0x6CDA, 0x6D04, 0x6D87, 0x6D6F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_MS932_FB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC, 0x6E39, 0x6E5C, /* 0x40 */
+ 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5, 0x7005, 0x7007, /* 0x40 */
+ 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C, 0x7146, 0x7147, /* 0x50 */
+ 0xFA15, 0x71C1, 0x71FE, 0x72B1, 0x72BE, 0x7324, 0xFA16, 0x7377, /* 0x50 */
+ 0x73BD, 0x73C9, 0x73D6, 0x73E3, 0x73D2, 0x7407, 0x73F5, 0x7426, /* 0x60 */
+ 0x742A, 0x7429, 0x742E, 0x7462, 0x7489, 0x749F, 0x7501, 0x756F, /* 0x60 */
+ 0x7682, 0x769C, 0x769E, 0x769B, 0x76A6, 0xFA17, 0x7746, 0x52AF, /* 0x70 */
+ 0x7821, 0x784E, 0x7864, 0x787A, 0x7930, 0xFA18, 0xFA19, 0, /* 0x70 */
+ 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1, 0x7AE7, 0xFA1C, 0x7AEB, /* 0x80 */
+ 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7, 0x7DA0, 0x7DD6, 0x7E52, /* 0x80 */
+ 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362, 0x837F, 0x83C7, 0x83F6, /* 0x90 */
+ 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B, 0xFA1F, 0x85B0, 0xFA20, /* 0x90 */
+ 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, /* 0xA0 */
+ 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, /* 0xA0 */
+ 0x8D76, 0xFA23, 0x8ECF, 0xFA24, 0xFA25, 0x9067, 0x90DE, 0xFA26, /* 0xB0 */
+ 0x9115, 0x9127, 0x91DA, 0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, /* 0xB0 */
+ 0x91E5, 0x9206, 0x9210, 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, /* 0xC0 */
+ 0x9259, 0x9251, 0x9239, 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, /* 0xC0 */
+ 0x92D7, 0x92D9, 0x92D0, 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, /* 0xD0 */
+ 0x9321, 0x92FB, 0xFA28, 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, /* 0xD0 */
+ 0x9357, 0x93A4, 0x93C6, 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, /* 0xE0 */
+ 0x9592, 0xF9DC, 0xFA29, 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, /* 0xE0 */
+ 0x974D, 0x974F, 0x9751, 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, /* 0xF0 */
+ 0x9927, 0xFA2C, 0x999E, 0x9A4E, 0x9AD9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_MS932_FC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB, 0x9C00, 0x9D70, /* 0x40 */
+ 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1 /* 0x40 */
+};
+
diff --git a/sal/textenc/tcvtjp2.tab b/sal/textenc/tcvtjp2.tab
new file mode 100644
index 000000000..093d556b4
--- /dev/null
+++ b/sal/textenc/tcvtjp2.tab
@@ -0,0 +1,3955 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the UniCode to DBCS tables for the following */
+/* japanese charsets: SJIS, MS932, APPLE_JAPANESE */
+
+/* ======================================================================= */
+
+/* 0x00A2 --> 0x8191 - APPLE_JAPANESE, but I think, this extension is better than the replacement char */
+/* 0x00A3 --> 0x8192 - APPLE_JAPANESE, but I think, this extension is better than the replacement char */
+/* 0x00A5 --> 0x005C - APPLE_JAPANESE, but I think, this extension is better than the replacement char */
+/* 0x00AC --> 0x81CA - APPLE_JAPANESE/SJIS, but I think, this extension is better than the replacement char */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x8191, 0x8192, 0, 0x005C, 0, 0x8198, /* 0xA0 */
+ 0x814E, 0, 0, 0, 0x81CA, 0, 0, 0, /* 0xA0 */
+ 0x818B, 0x817D, 0, 0, 0x814C, 0, 0x81F7, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x817E, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x8180 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x00A0, 0, 0x8191, 0x8192, 0, 0x005C, 0, 0x8198, /* 0xA0 */
+ 0x814E, 0x00FD, 0, 0, 0x81CA, 0, 0, 0, /* 0xA0 */
+ 0x818B, 0x817D, 0, 0, 0x814C, 0, 0x81F7, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x817E, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x8180 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_03[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x839F, 0x83A0, 0x83A1, 0x83A2, 0x83A3, 0x83A4, 0x83A5, /* 0x90 */
+ 0x83A6, 0x83A7, 0x83A8, 0x83A9, 0x83AA, 0x83AB, 0x83AC, 0x83AD, /* 0x90 */
+ 0x83AE, 0x83AF, 0, 0x83B0, 0x83B1, 0x83B2, 0x83B3, 0x83B4, /* 0xA0 */
+ 0x83B5, 0x83B6, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x83BF, 0x83C0, 0x83C1, 0x83C2, 0x83C3, 0x83C4, 0x83C5, /* 0xB0 */
+ 0x83C6, 0x83C7, 0x83C8, 0x83C9, 0x83CA, 0x83CB, 0x83CC, 0x83CD, /* 0xB0 */
+ 0x83CE, 0x83CF, 0, 0x83D0, 0x83D1, 0x83D2, 0x83D3, 0x83D4, /* 0xC0 */
+ 0x83D5, 0x83D6 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_04[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8446, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, /* 0x10 */
+ 0x8449, 0x844A, 0x844B, 0x844C, 0x844D, 0x844E, 0x844F, 0x8450, /* 0x10 */
+ 0x8451, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8457, 0x8458, /* 0x20 */
+ 0x8459, 0x845A, 0x845B, 0x845C, 0x845D, 0x845E, 0x845F, 0x8460, /* 0x20 */
+ 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8477, 0x8478, /* 0x30 */
+ 0x8479, 0x847A, 0x847B, 0x847C, 0x847D, 0x847E, 0x8480, 0x8481, /* 0x30 */
+ 0x8482, 0x8483, 0x8484, 0x8485, 0x8486, 0x8487, 0x8488, 0x8489, /* 0x40 */
+ 0x848A, 0x848B, 0x848C, 0x848D, 0x848E, 0x848F, 0x8490, 0x8491, /* 0x40 */
+ 0, 0x8476 /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* 0x2014 --> 0x815C - APPLE_JAPANESE/SJIS, but I think, this extension is better than the replacement char */
+/* 0x2015 --> 0x815C - MS932, but I think, this extension is better than the replacement char */
+/* 0x2016 --> 0x8161 - APPLE_JAPANESE/SJIS, but I think, this extension is better than the replacement char */
+/* 0x2026 --> 0x8163 - APPLE_JAPANESE is normally 0x00FF (HORIZONTAL ELLIPSIS), because in the APPLE import table 0x8183 is this 0x22EF (MIDLINE HORIZONTAL ELLIPSIS) */
+/* but we import this code as 0x2026 */
+/* 0x203E --> 0x8150 - APPLE_JAPANESE, but I think, this extension is better than the replacement char */
+/* in SJIS this is 0x7E, but we import 0x7E as 0x7E, so this would be the better way */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_20[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x815D, 0, 0, 0, 0x815C, 0x815C, 0x8161, 0, /* 0x10 */
+ 0x8165, 0x8166, 0, 0, 0x8167, 0x8168, 0, 0, /* 0x10 */
+ 0x81F5, 0x81F6, 0, 0, 0, 0x8164, 0x8163, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x81F1, 0, 0x818C, 0x818D, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x81A6, 0, 0, 0x8150 /* 0x30 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* In this table we have some MS932 extensions, but we use this table also for SJIS, for better MS compatibility */
+
+sal_uInt16 const aImplUniToDBCSTab_MS932_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x818E, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x8782, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x8784, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x81F0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, 0x875A, 0x875B, /* 0x60 */
+ 0x875C, 0x875D, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xFA40, 0xFA41, 0xFA42, 0xFa43, 0xFA44, 0xFA45, 0xFA46, 0xFA47, /* 0x70 */
+ 0xFA48, 0xFA49, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x81A9, 0x81AA, 0x81A8, 0x81AB, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x81CB, 0, 0x81CC /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x818E, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x8656, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x8650, 0, 0, 0x869B, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x869D, 0x00FE, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x81F0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x859F, 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A4, 0x85A5, 0x85A6, /* 0x60 */
+ 0x85A7, 0x85A8, 0x85A9, 0x85AA, 0, 0, 0, 0, /* 0x60 */
+ 0x85B3, 0x85B4, 0x85B5, 0x85B6, 0x85B7, 0x85B8, 0x85B9, 0x85BA, /* 0x70 */
+ 0x85BB, 0x85BC, 0x85BD, 0x85BE, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x81A9, 0x81AA, 0x81A8, 0x81AB, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x86CC, 0x86CD, 0x86CB, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x81CB, 0, 0x81CC, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0x86D0, 0x86D1, /* 0xE0 */
+ 0x86CF, 0x86D2 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* In this table we have some MS932 extensions, but we use this table also for SJIS, for better MS compatibility */
+/* 0x2210 --> 0x817C - come from SJIS */
+
+sal_uInt16 const aImplUniToDBCSTab_MS932_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x81CD, 0, 0x81DD, 0x81CE, 0, 0, 0, 0x81DE, /* 0x00 */
+ 0x81B8, 0, 0, 0x81B9, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x8794, 0x817C, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x81E3, 0, 0, 0x81E5, 0x8187, 0x8798, /* 0x10 */
+ 0x81DA, 0, 0, 0, 0, 0x8161, 0, 0x81C8, /* 0x20 */
+ 0x81C9, 0x81BF, 0x81BE, 0x81E7, 0x81E8, 0, 0x8793, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x8188, 0x81E6, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x81E4, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x81E0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x8182, 0x81DF, 0, 0, 0, 0, 0x8185, 0x8186, /* 0x60 */
+ 0, 0, 0x81E1, 0x81E2, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x81BC, 0x81BD, 0, 0, 0x81BA, 0x81BB, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x81DB, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x8799 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x81CD, 0, 0x81DD, 0x81CE, 0, 0, 0, 0x81DE, /* 0x00 */
+ 0x81B8, 0, 0, 0x81B9, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x817C, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x81E3, 0, 0, 0x81E5, 0x8187, 0x8841, /* 0x10 */
+ 0x81DA, 0, 0, 0, 0, 0, 0, 0x81C8, /* 0x20 */
+ 0x81C9, 0x81BF, 0x81BE, 0x81E7, 0x81E8, 0, 0x8840, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x8188, 0x81E6, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x81E4, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x81E0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x8182, 0x81DF, 0, 0, 0, 0, 0x8185, 0x8186, /* 0x60 */
+ 0, 0, 0x81E1, 0x81E2, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x81BC, 0x81BD, 0, 0, 0x81BA, 0x81BB, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x81DB, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x8842, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x8163 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_23[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x81DC /* 0x10 */
+ /* 0x10 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_MS932_24[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x8747, /* 0x60 */
+ 0x8748, 0x8749, 0x874A, 0x874B, 0x874C, 0x874D, 0x874E, 0x874F, /* 0x60 */
+ 0x8750, 0x8751, 0x8752, 0x8753 /* 0x70 */
+ /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_24[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8540, 0x8541, 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, /* 0x60 */
+ 0x8548, 0x8549, 0x854A, 0x854B, 0x854C, 0x854D, 0x854E, 0x854F, /* 0x60 */
+ 0x8550, 0x8551, 0x8552, 0x8553, 0x855E, 0x855F, 0x8560, 0x8561, /* 0x70 */
+ 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568, 0x8569, /* 0x70 */
+ 0x856A, 0x856B, 0x856C, 0x856D, 0x856E, 0x856F, 0x8570, 0x8571, /* 0x80 */
+ 0x8592, 0x8593, 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, /* 0x80 */
+ 0x859A, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x85DB, 0x85DC, 0x85DD, 0x85DE, /* 0x90 */
+ 0x85DF, 0x85E0, 0x85E1, 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0x85E6, /* 0xA0 */
+ 0x85E7, 0x85E8, 0x85E9, 0x85EA, 0x85EB, 0x85EC, 0x85ED, 0x85EE, /* 0xA0 */
+ 0x85EF, 0x85F0, 0x85F1, 0x85F2, 0x85F3, 0x85F4 /* 0xB0 */
+ /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_25[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x849F, 0x84AA, 0x84A0, 0x84AB, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x84A1, 0, 0, 0x84AC, /* 0x00 */
+ 0x84A2, 0, 0, 0x84AD, 0x84A4, 0, 0, 0x84AF, /* 0x10 */
+ 0x84A3, 0, 0, 0x84AE, 0x84A5, 0x84BA, 0, 0, /* 0x10 */
+ 0x84B5, 0, 0, 0x84B0, 0x84A7, 0x84BC, 0, 0, /* 0x20 */
+ 0x84B7, 0, 0, 0x84B2, 0x84A6, 0, 0, 0x84B6, /* 0x20 */
+ 0x84BB, 0, 0, 0x84B1, 0x84A8, 0, 0, 0x84B8, /* 0x30 */
+ 0x84BD, 0, 0, 0x84B3, 0x84A9, 0, 0, 0x84B9, /* 0x30 */
+ 0, 0, 0x84BE, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x84B4, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x81A1, 0x81A0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x81A3, 0x81A2, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x81A5, 0x81A4, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x819F, 0x819E, /* 0xC0 */
+ 0, 0, 0, 0x819B, 0, 0, 0x819D, 0x819C, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x81FC /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x819A, 0x8199, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x818A, 0, 0x8189, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x81F4, 0, 0, 0x81F3, 0, 0x81F2 /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x819A, 0x8199, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x86B4, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x86C8, 0x86C9, 0x86C7, 0x86CA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x818A, 0, 0x8189, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x86A3, 0x86A1, 0x86A2, 0x86A4, 0x869F, 0x86A5, 0x86A6, 0x86A0, /* 0x60 */
+ 0, 0, 0x81F4, 0, 0, 0x81F3, 0, 0x81F2 /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_27[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x857C, 0x857D, /* 0x70 */
+ 0x857E, 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0x8585 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* 0x3014 --> 0x8160 - come from SJIS */
+/* 0x301D --> 0x8780 - MS932, but I think, this extension is better than the replacement char */
+/* 0x301F --> 0x8781 - MS932, but I think, this extension is better than the replacement char */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8140, 0x8141, 0x8142, 0x8156, 0, 0x8158, 0x8159, 0x815A, /* 0x00 */
+ 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, /* 0x00 */
+ 0x8179, 0x817A, 0x81A7, 0x81AC, 0x816B, 0x816C, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x8160, 0x8780, 0, 0x8781, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x829F, 0x82A0, 0x82A1, 0x82A2, 0x82A3, 0x82A4, 0x82A5, /* 0x40 */
+ 0x82A6, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AB, 0x82AC, 0x82AD, /* 0x40 */
+ 0x82AE, 0x82AF, 0x82B0, 0x82B1, 0x82B2, 0x82B3, 0x82B4, 0x82B5, /* 0x50 */
+ 0x82B6, 0x82B7, 0x82B8, 0x82B9, 0x82BA, 0x82BB, 0x82BC, 0x82BD, /* 0x50 */
+ 0x82BE, 0x82BF, 0x82C0, 0x82C1, 0x82C2, 0x82C3, 0x82C4, 0x82C5, /* 0x60 */
+ 0x82C6, 0x82C7, 0x82C8, 0x82C9, 0x82CA, 0x82CB, 0x82CC, 0x82CD, /* 0x60 */
+ 0x82CE, 0x82CF, 0x82D0, 0x82D1, 0x82D2, 0x82D3, 0x82D4, 0x82D5, /* 0x70 */
+ 0x82D6, 0x82D7, 0x82D8, 0x82D9, 0x82DA, 0x82DB, 0x82DC, 0x82DD, /* 0x70 */
+ 0x82DE, 0x82DF, 0x82E0, 0x82E1, 0x82E2, 0x82E3, 0x82E4, 0x82E5, /* 0x80 */
+ 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, 0x82EB, 0x82EC, 0x82ED, /* 0x80 */
+ 0x82EE, 0x82EF, 0x82F0, 0x82F1, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x814A, 0x814B, 0x8154, 0x8155, 0, /* 0x90 */
+ 0, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, /* 0xA0 */
+ 0x8347, 0x8348, 0x8349, 0x834A, 0x834B, 0x834C, 0x834D, 0x834E, /* 0xA0 */
+ 0x834F, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, /* 0xB0 */
+ 0x8357, 0x8358, 0x8359, 0x835A, 0x835B, 0x835C, 0x835D, 0x835E, /* 0xB0 */
+ 0x835F, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, /* 0xC0 */
+ 0x8367, 0x8368, 0x8369, 0x836A, 0x836B, 0x836C, 0x836D, 0x836E, /* 0xC0 */
+ 0x836F, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, /* 0xD0 */
+ 0x8377, 0x8378, 0x8379, 0x837A, 0x837B, 0x837C, 0x837D, 0x837E, /* 0xD0 */
+ 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, /* 0xE0 */
+ 0x8388, 0x8389, 0x838A, 0x838B, 0x838C, 0x838D, 0x838E, 0x838F, /* 0xE0 */
+ 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396, 0, /* 0xF0 */
+ 0, 0, 0, 0x8145, 0x815B, 0x8152, 0x8153 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8140, 0x8141, 0x8142, 0x8156, 0x86B5, 0x8158, 0x8159, 0x815A, /* 0x00 */
+ 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, /* 0x00 */
+ 0x8179, 0x817A, 0x81A7, 0x81AC, 0x816B, 0x816C, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x8160, 0x8854, 0, 0x8855, /* 0x10 */
+ 0x86B3, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x829F, 0x82A0, 0x82A1, 0x82A2, 0x82A3, 0x82A4, 0x82A5, /* 0x40 */
+ 0x82A6, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AB, 0x82AC, 0x82AD, /* 0x40 */
+ 0x82AE, 0x82AF, 0x82B0, 0x82B1, 0x82B2, 0x82B3, 0x82B4, 0x82B5, /* 0x50 */
+ 0x82B6, 0x82B7, 0x82B8, 0x82B9, 0x82BA, 0x82BB, 0x82BC, 0x82BD, /* 0x50 */
+ 0x82BE, 0x82BF, 0x82C0, 0x82C1, 0x82C2, 0x82C3, 0x82C4, 0x82C5, /* 0x60 */
+ 0x82C6, 0x82C7, 0x82C8, 0x82C9, 0x82CA, 0x82CB, 0x82CC, 0x82CD, /* 0x60 */
+ 0x82CE, 0x82CF, 0x82D0, 0x82D1, 0x82D2, 0x82D3, 0x82D4, 0x82D5, /* 0x70 */
+ 0x82D6, 0x82D7, 0x82D8, 0x82D9, 0x82DA, 0x82DB, 0x82DC, 0x82DD, /* 0x70 */
+ 0x82DE, 0x82DF, 0x82E0, 0x82E1, 0x82E2, 0x82E3, 0x82E4, 0x82E5, /* 0x80 */
+ 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, 0x82EB, 0x82EC, 0x82ED, /* 0x80 */
+ 0x82EE, 0x82EF, 0x82F0, 0x82F1, 0x8868, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x814A, 0x814B, 0x8154, 0x8155, 0, /* 0x90 */
+ 0, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, /* 0xA0 */
+ 0x8347, 0x8348, 0x8349, 0x834A, 0x834B, 0x834C, 0x834D, 0x834E, /* 0xA0 */
+ 0x834F, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, /* 0xB0 */
+ 0x8357, 0x8358, 0x8359, 0x835A, 0x835B, 0x835C, 0x835D, 0x835E, /* 0xB0 */
+ 0x835F, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, /* 0xC0 */
+ 0x8367, 0x8368, 0x8369, 0x836A, 0x836B, 0x836C, 0x836D, 0x836E, /* 0xC0 */
+ 0x836F, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, /* 0xD0 */
+ 0x8377, 0x8378, 0x8379, 0x837A, 0x837B, 0x837C, 0x837D, 0x837E, /* 0xD0 */
+ 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, /* 0xE0 */
+ 0x8388, 0x8389, 0x838A, 0x838B, 0x838C, 0x838D, 0x838E, 0x838F, /* 0xE0 */
+ 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396, 0x886A, /* 0xF0 */
+ 0x886B, 0x886C, 0x886D, 0x8145, 0x815B, 0x8152, 0x8153 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_MS932_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x878A, 0x878B, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x878C, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x8785, 0x8786, 0x8787, 0x8788, /* 0xA0 */
+ 0x8789 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x20 */
+ 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, /* 0x20 */
+ 0x8740, 0x874D, 0x8750, 0x8753, 0x874F, 0x8754, 0x8752, 0x8748, /* 0x30 */
+ 0x8758, 0x874B, 0x874C, 0x8751, 0x8755, 0x8756, 0x874E, 0x8757, /* 0x30 */
+ 0x8747, 0, 0x8749, 0x874A, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x8799, 0, /* 0x90 */
+ 0x879B, 0x879E, 0, 0, 0, 0x879A, 0x879C, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x8793, 0x8794, 0x8795, 0x8796, /* 0xA0 */
+ 0x8797, 0x8798 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_MS932_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8765, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x8769, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x8760, 0, 0, 0, /* 0x10 */
+ 0x8763, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x8761, 0x876B, 0, 0, 0x876A, 0x8764, /* 0x20 */
+ 0, 0, 0, 0x876C, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x8766, 0, /* 0x30 */
+ 0, 0, 0, 0x876E, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x875F, 0x876D, 0, 0, 0x8762, 0, 0, /* 0x40 */
+ 0, 0x8767, 0, 0, 0, 0, 0, 0x8768, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x877E, 0x878F, 0x878E, 0x878D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x8772, 0x8773, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x876F, 0x8770, 0x8771, 0, /* 0x90 */
+ 0, 0x8775, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x8774, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x8783 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x87BD, 0, 0, 0x87A7, 0, 0x87A4, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x87B0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x87A2, 0x87AA, 0x87A3, 0, /* 0x10 */
+ 0x87A9, 0, 0, 0, 0, 0, 0x87BE, 0, /* 0x10 */
+ 0, 0, 0x87A0, 0x87B2, 0, 0, 0x87B3, 0x87AB, /* 0x20 */
+ 0, 0, 0x87BF, 0x87B5, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x87C0, 0, 0x87A5, 0, 0, 0x87A8, 0, /* 0x30 */
+ 0, 0x87AE, 0, 0x87B4, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x87B1, 0, 0, 0, 0, 0x87C1, /* 0x40 */
+ 0, 0x879F, 0x87AD, 0, 0, 0x87A1, 0x87A6, 0, /* 0x40 */
+ 0, 0x87AC, 0, 0, 0, 0, 0, 0x87AF, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x87E8, 0x87E7, 0x87E6, 0x87E5, 0x87FA, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x865A, 0x865B, 0x865C, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x864A, 0x864C, /* 0x80 */
+ 0x8659, 0, 0, 0, 0, 0, 0x864E, 0x864F, /* 0x90 */
+ 0x8651, 0, 0, 0, 0x8640, 0x8642, 0x8648, 0x8641, /* 0x90 */
+ 0x8643, 0x8646, 0x8649, 0, 0x8644, 0x8647, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x8655, 0x8654, 0x8653, 0x8652, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x864D, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x8658, 0, 0x869C, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x8657 /* 0xD0 */
+ /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* Table _4E to _9F includes the 360 IBM Kanji's we export to all */
+/* formats (SJIS/APPLE_JAPANESE) for better compatibility. These */
+/* characters are also imported from us in all formats. So this */
+/* extension should give better results than the export to the */
+/* replacement character. */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x88EA, 0x929A, 0, 0x8EB5, 0, 0, 0, 0x969C, /* 0x00 */
+ 0x8FE4, 0x8E4F, 0x8FE3, 0x89BA, 0, 0x9573, 0x975E, 0, /* 0x00 */
+ 0x98A0, 0x894E, 0, 0, 0x8A8E, 0x98A1, 0x90A2, 0x99C0, /* 0x10 */
+ 0x8B75, 0x95B8, 0, 0, 0, 0, 0x8FE5, 0, /* 0x10 */
+ 0, 0x97BC, 0, 0, 0, 0, 0x95C0, 0, /* 0x20 */
+ 0xFA68, 0, 0x98A2, 0, 0, 0x9286, 0, 0, /* 0x20 */
+ 0, 0x98A3, 0x8BF8, 0, 0, 0, 0x98A4, 0, /* 0x30 */
+ 0x8ADB, 0x924F, 0, 0x8EE5, 0x98A5, 0, 0, 0x98A6, /* 0x30 */
+ 0, 0, 0x98A7, 0x9454, 0, 0x8B76, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x9456, 0, 0x93E1, 0x8CC1, 0x9652, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE568, 0x98A8, 0x8FE6, /* 0x50 */
+ 0x98A9, 0x89B3, 0, 0, 0, 0x8BE3, 0x8CEE, 0x96E7, /* 0x50 */
+ 0, 0, 0x9BA4, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x9790, 0, 0x93FB, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x8AA3, 0, /* 0x70 */
+ 0x8B54, 0, 0x98AA, 0, 0, 0x98AB, 0x97B9, 0, /* 0x80 */
+ 0x975C, 0x9188, 0x98AD, 0x8E96, 0x93F1, 0, 0x98B0, 0, /* 0x80 */
+ 0, 0x895D, 0x8CDD, 0, 0x8CDC, 0x88E4, 0, 0, /* 0x90 */
+ 0x986A, 0x9869, 0, 0x8DB1, 0x889F, 0, 0x98B1, 0x98B2, /* 0x90 */
+ 0x98B3, 0x9653, 0x98B4, 0, 0x8CF0, 0x88E5, 0x9692, 0, /* 0xA0 */
+ 0x8B9C, 0, 0, 0x8B9D, 0x8B9E, 0x92E0, 0x97BA, 0, /* 0xA0 */
+ 0x98B5, 0, 0, 0x98B6, 0, 0, 0x98B7, 0, /* 0xB0 */
+ 0, 0, 0x906C, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x8F59, 0x906D, 0x98BC, 0, 0x98BA, 0, 0x98BB, 0x8B77, /* 0xC0 */
+ 0, 0, 0x8DA1, 0x89EE, 0, 0x98B9, 0x98B8, 0x95A7, /* 0xC0 */
+ 0, 0, 0, 0, 0x8E65, 0x8E64, 0x91BC, 0x98BD, /* 0xD0 */
+ 0x9574, 0x90E5, 0, 0, 0, 0x8157, 0x98BE, 0x98C0, /* 0xD0 */
+ 0, 0xFA69, 0, 0x91E3, 0x97DF, 0x88C8, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x98BF, 0x89BC, 0, /* 0xE0 */
+ 0x8BC2, 0, 0x9287, 0, 0, 0, 0x8C8F, 0x98C1, /* 0xF0 */
+ 0, 0, 0, 0x9443, 0xFA6A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFA6B, 0x8AE9, 0, 0xFA6C, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x98C2, 0x88C9, 0, 0, 0x8CDE, 0x8AEA, 0x959A, /* 0x00 */
+ 0x94B0, 0x8B78, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x89EF, 0, 0x98E5, 0x9360, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0x948C, /* 0x20 */
+ 0x98C4, 0, 0, 0, 0x94BA, 0, 0x97E0, 0, /* 0x30 */
+ 0x904C, 0xFA6D, 0x8E66, 0, 0x8E97, 0x89BE, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x92CF, 0, 0, 0x9241, 0x98C8, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x88CA, 0x92E1, 0x8F5A, /* 0x40 */
+ 0x8DB2, 0x9743, 0, 0x91CC, 0, 0x89BD, 0xFA6E, 0x98C7, /* 0x50 */
+ 0, 0x975D, 0x98C3, 0x98C5, 0x8DEC, 0x98C6, 0x9B43, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x98CE, 0, 0, 0, 0, 0, 0x98D1, /* 0x60 */
+ 0x98CF, 0, 0, 0x89C0, 0, 0x95B9, 0x98C9, 0, /* 0x70 */
+ 0, 0, 0, 0x98CD, 0x8CF1, 0, 0, 0x8E67, /* 0x70 */
+ 0, 0, 0, 0x8AA4, 0, 0, 0x98D2, 0, /* 0x80 */
+ 0x98CA, 0, 0xFA70, 0x97E1, 0, 0x8E98, 0, 0x98CB, /* 0x80 */
+ 0, 0x98D0, 0xFA6F, 0, 0xFA72, 0, 0x98D3, 0, /* 0x90 */
+ 0x98CC, 0, 0xFA71, 0x8B9F, 0, 0x88CB, 0, 0, /* 0x90 */
+ 0x8BA0, 0x89BF, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x9B44, 0, 0x9699, 0x958E, 0x8CF2, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x904E, 0x97B5, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x95D6, /* 0xB0 */
+ 0, 0, 0x8C57, 0x91A3, 0x89E2, 0, 0, 0, /* 0xC0 */
+ 0, 0xFA61, 0x8F72, 0, 0, 0xFA73, 0x98D7, 0, /* 0xC0 */
+ 0x98DC, 0x98DA, 0, 0, 0x98D5, 0, 0, 0x91AD, /* 0xD0 */
+ 0x98D8, 0, 0x98DB, 0x98D9, 0, 0x95DB, 0, 0x98D6, /* 0xD0 */
+ 0, 0x904D, 0, 0x9693, 0x98DD, 0x98DE, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x8F43, 0x98EB, /* 0xE0 */
+ 0, 0, 0, 0x946F, 0, 0x9555, 0x98E6, 0, /* 0xF0 */
+ 0x95EE, 0, 0x89B4, 0, 0, 0, 0x98EA, 0xFA76 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x98E4, 0x98ED, 0, /* 0x00 */
+ 0, 0x9171, 0, 0x8CC2, 0, 0x947B, 0, 0xE0C5, /* 0x00 */
+ 0, 0x98EC, 0x937C, 0, 0x98E1, 0, 0x8CF4, 0, /* 0x10 */
+ 0, 0x8CF3, 0x98DF, 0, 0, 0, 0xFA77, 0x8ED8, /* 0x10 */
+ 0, 0x98E7, 0xFA75, 0x95ED, 0x926C, 0x98E3, 0x8C91, 0, /* 0x20 */
+ 0x98E0, 0x98E8, 0x98E2, 0x97CF, 0x98E9, 0x9860, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x8BE4, 0, /* 0x30 */
+ 0, 0x8C90, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xFA74, 0, 0xFA7A, 0x98EE, 0, 0, 0xFA78, 0x98EF, /* 0x40 */
+ 0x98F3, 0x88CC, 0, 0, 0, 0, 0, 0x95CE, /* 0x40 */
+ 0x98F2, 0, 0, 0, 0, 0x98F1, 0x98F5, 0, /* 0x50 */
+ 0, 0, 0x98F4, 0, 0x92E2, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x8C92, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x98F6, 0, 0, 0, /* 0x60 */
+ 0xFA79, 0, 0x8EC3, 0, 0x91A4, 0x92E3, 0x8BF4, 0, /* 0x70 */
+ 0x98F7, 0, 0, 0, 0, 0x8B55, 0, 0, /* 0x70 */
+ 0x98F8, 0, 0, 0, 0, 0x98FA, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x9654, 0, 0, /* 0x80 */
+ 0, 0x8C86, 0, 0, 0xFA7B, 0, 0, 0, /* 0x90 */
+ 0x8E50, 0x94F5, 0x98F9, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x8DC3, 0x9762, 0, 0, /* 0xA0 */
+ 0, 0, 0x98FC, 0x9942, 0x98FB, 0x8DC2, 0, 0x8F9D, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x8C58, 0, /* 0xB0 */
+ 0, 0, 0x9943, 0, 0, 0x8BCD, 0, 0, /* 0xC0 */
+ 0, 0x9940, 0x9941, 0, 0, 0x93AD, 0, 0x919C, /* 0xC0 */
+ 0, 0x8BA1, 0, 0, 0, 0x966C, 0x9944, 0, /* 0xD0 */
+ 0xFA7D, 0, 0x97BB, 0, 0, 0, 0x9945, 0, /* 0xD0 */
+ 0, 0, 0, 0x9948, 0, 0x9946, 0, 0x916D, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x9947, 0x9949, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xFA7C, 0x994B, 0, 0, /* 0xF0 */
+ 0, 0x994A, 0, 0x95C6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B56, 0x994D, 0x994E, 0, 0x89AD, 0, 0, 0, /* 0x00 */
+ 0, 0x994C, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x8EF2, 0, 0x9951, 0x9950, 0x994F, 0, /* 0x10 */
+ 0x98D4, 0, 0x9952, 0, 0, 0, 0, 0x8F9E, /* 0x10 */
+ 0, 0x9953, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x9744, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x96D7, 0, 0, 0, 0, 0x9955, /* 0x30 */
+ 0, 0, 0x9954, 0x9957, 0x9956, 0, 0, 0x9958, /* 0x30 */
+ 0x9959, 0x88F2, 0, 0x8CB3, 0x8C5A, 0x8F5B, 0x929B, 0x8BA2, /* 0x40 */
+ 0x90E6, 0x8CF5, 0xFA7E, 0x8D8E, 0x995B, 0x96C6, 0x9365, 0, /* 0x40 */
+ 0x8E99, 0, 0x995A, 0, 0x995C, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x937D, 0, 0x8A95, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x995D, 0, 0xFA80, 0x93FC, 0, 0, /* 0x60 */
+ 0x9153, 0x995F, 0x9960, 0x94AA, 0x8CF6, 0x985A, 0x9961, 0, /* 0x60 */
+ 0, 0x8BA4, 0, 0, 0, 0x95BA, 0x91B4, 0x8BEF, /* 0x70 */
+ 0x9354, 0, 0, 0, 0x8C93, 0, 0, 0, /* 0x70 */
+ 0x9962, 0, 0x9963, 0, 0, 0x93E0, 0x897E, 0, /* 0x80 */
+ 0, 0x9966, 0x8DFB, 0, 0x9965, 0x8DC4, 0, 0x9967, /* 0x80 */
+ 0xE3EC, 0x9968, 0x9660, 0x9969, 0, 0x996A, 0x996B, 0x8FE7, /* 0x90 */
+ 0, 0x8ECA, 0, 0, 0, 0xFA81, 0, 0, /* 0x90 */
+ 0x8AA5, 0, 0x996E, 0, 0x996C, 0x96BB, 0x996D, 0, /* 0xA0 */
+ 0x9579, 0x996F, 0x9970, 0x9971, 0x937E, 0, 0, 0, /* 0xA0 */
+ 0x9975, 0x9973, 0x9974, 0x9972, 0x8DE1, 0x9976, 0x96E8, 0x97E2, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x9977, 0xFA82, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x90A6, 0x9978, 0x8F79, 0, /* 0xC0 */
+ 0, 0x9979, 0, 0x929C, 0x97BD, 0x9380, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x99C3, 0, /* 0xD0 */
+ 0, 0, 0, 0x997A, 0xEAA3, 0x8BC3, 0, 0, /* 0xD0 */
+ 0x997B, 0x967D, 0, 0, 0, 0, 0x8F88, 0x91FA, /* 0xE0 */
+ 0, 0x997D, 0x93E2, 0, 0xFA83, 0x997E, 0, 0, /* 0xE0 */
+ 0x9980, 0x8A4D, 0, 0, 0, 0x9981, 0x8BA5, 0, /* 0xF0 */
+ 0x93CA, 0x899A, 0x8F6F, 0, 0, 0x949F, 0x9982 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9381, 0, 0, 0x906E, 0x9983, 0, 0x95AA, 0x90D8, /* 0x00 */
+ 0x8AA0, 0, 0x8AA7, 0x9984, 0, 0, 0x9986, 0, /* 0x00 */
+ 0, 0x8C59, 0, 0, 0x9985, 0xFA84, 0, 0x97F1, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x8F89, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x94BB, 0x95CA, 0, 0x9987, /* 0x20 */
+ 0, 0x9798, 0x9988, 0, 0, 0, 0x9989, 0, /* 0x20 */
+ 0x939E, 0, 0, 0x998A, 0, 0, 0x90A7, 0x8DFC, /* 0x30 */
+ 0x8C94, 0x998B, 0x8E68, 0x8D8F, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x92E4, 0x998D, 0, 0, 0x91A5, /* 0x40 */
+ 0, 0, 0x8DED, 0x998E, 0x998F, 0x914F, 0, 0x998C, /* 0x40 */
+ 0, 0, 0, 0, 0x9991, 0, 0x9655, 0, /* 0x50 */
+ 0, 0, 0, 0x8D84, 0, 0, 0x9990, 0, /* 0x50 */
+ 0, 0, 0, 0x8C95, 0x8DDC, 0x948D, 0, 0, /* 0x60 */
+ 0, 0x9994, 0x9992, 0, 0, 0, 0, 0x959B, /* 0x60 */
+ 0x8FE8, 0x999B, 0x8A84, 0x9995, 0x9993, 0x916E, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x9997, 0, 0x9996, /* 0x70 */
+ 0, 0, 0, 0x8A63, 0, 0, 0, 0x8C80, /* 0x80 */
+ 0x999C, 0x97AB, 0, 0, 0, 0x9998, 0, 0, /* 0x80 */
+ 0, 0x999D, 0x999A, 0, 0x9999, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x97CD, 0xFA85, 0, 0, 0x8CF7, /* 0x90 */
+ 0x89C1, 0, 0, 0x97F2, 0, 0, 0xFA86, 0, /* 0xA0 */
+ 0, 0x8F95, 0x9377, 0x8D85, 0x99A0, 0x99A1, 0, 0xFB77, /* 0xA0 */
+ 0, 0x97E3, 0, 0, 0x984A, 0x99A3, 0, 0, /* 0xB0 */
+ 0, 0x8CF8, 0, 0, 0x99A2, 0, 0x8A4E, 0, /* 0xB0 */
+ 0xFA87, 0x99A4, 0, 0x9675, 0, 0x92BA, 0, 0x9745, /* 0xC0 */
+ 0, 0x95D7, 0, 0, 0, 0x99A5, 0, 0, /* 0xC0 */
+ 0, 0, 0xE8D3, 0, 0, 0x93AE, 0, 0x99A6, /* 0xD0 */
+ 0x8AA8, 0x96B1, 0, 0xFA88, 0, 0x8F9F, 0x99A7, 0x95E5, /* 0xD0 */
+ 0x99AB, 0, 0x90A8, 0x99A8, 0x8BCE, 0, 0x99A9, 0x8AA9, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x8C4D, 0x99AC, 0, 0x99AD, 0, 0, /* 0xF0 */
+ 0x99AE, 0x99AF, 0x8ED9, 0, 0, 0, 0x8CF9, 0x96DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFA89, 0x96E6, 0x93F5, 0, 0, 0x95EF, 0x99B0, 0xFA8A, /* 0x00 */
+ 0x99B1, 0, 0, 0, 0, 0x99B3, 0, 0x99B5, /* 0x00 */
+ 0x99B4, 0, 0, 0, 0, 0x99B6, 0x89BB, 0x966B, /* 0x10 */
+ 0, 0x8DFA, 0x99B7, 0, 0, 0x9178, 0, 0, /* 0x10 */
+ 0x8FA0, 0x8BA7, 0, 0x99B8, 0xFA8B, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x94D9, 0, 0, 0, 0, 0x99B9, /* 0x20 */
+ 0, 0x99BA, 0, 0x99BB, 0, 0, 0, 0, /* 0x30 */
+ 0x99BC, 0x9543, 0x8BE6, 0x88E3, 0, 0, 0, 0x93BD, /* 0x30 */
+ 0x99BD, 0x8F5C, 0, 0x90E7, 0, 0x99BF, 0x99BE, 0x8FA1, /* 0x40 */
+ 0x8CDF, 0x99C1, 0x94BC, 0, 0, 0x99C2, 0, 0, /* 0x40 */
+ 0, 0x94DA, 0x91B2, 0x91EC, 0x8BA6, 0, 0, 0x93EC, /* 0x50 */
+ 0x9250, 0, 0x948E, 0, 0x966D, 0, 0x99C4, 0, /* 0x50 */
+ 0x90E8, 0, 0, 0, 0, 0, 0x8C54, 0, /* 0x60 */
+ 0, 0x99C5, 0, 0, 0, 0, 0x99C6, 0x894B, /* 0x60 */
+ 0x88F3, 0x8AEB, 0xFA8C, 0x91A6, 0x8B70, 0x9791, 0, 0x99C9, /* 0x70 */
+ 0x89B5, 0, 0, 0x99C8, 0, 0, 0, 0x8BA8, /* 0x70 */
+ 0, 0, 0x99CA, 0, 0x96EF, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xFA8D, 0, 0, 0x99CB, 0, /* 0x90 */
+ 0x97D0, 0, 0x8CFA, 0, 0, 0, 0, 0x8CB4, /* 0x90 */
+ 0x99CC, 0, 0, 0, 0, 0x99CE, 0x99CD, 0, /* 0xA0 */
+ 0x907E, 0x8958, 0, 0, 0, 0x897D, 0x99CF, 0, /* 0xA0 */
+ 0x99D0, 0, 0xFA8E, 0x8CB5, 0, 0, 0x99D1, 0, /* 0xB0 */
+ 0, 0, 0, 0x8B8E, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x8E51, 0x99D2, 0, 0, 0, 0, /* 0xC0 */
+ 0x9694, 0x8DB3, 0x8B79, 0x9746, 0x916F, 0x94BD, 0x8EFB, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x8F66, 0, 0x8EE6, 0x8EF3, /* 0xD0 */
+ 0, 0x8F96, 0, 0x94BE, 0, 0xFA8F, 0, 0x99D5, /* 0xD0 */
+ 0, 0x8962, 0x9170, 0x8CFB, 0x8CC3, 0x8BE5, 0, 0, /* 0xE0 */
+ 0x99D9, 0x9240, 0x91FC, 0x8BA9, 0x8FA2, 0x99DA, 0x99D8, 0x89C2, /* 0xE0 */
+ 0x91E4, 0x8EB6, 0x8E6A, 0x8945, 0, 0, 0x8A90, 0x8D86, /* 0xF0 */
+ 0x8E69, 0, 0x99DB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x99DC, 0, 0x8B68, 0x8A65, 0, 0, 0, /* 0x00 */
+ 0x8D87, 0x8B67, 0x92DD, 0x8944, 0x93AF, 0x96BC, 0x8D40, 0x9799, /* 0x00 */
+ 0x9366, 0x8CFC, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x8C4E, 0, 0x99E5, 0, 0x8BE1, /* 0x10 */
+ 0x9669, 0, 0, 0, 0, 0, 0x94DB, 0, /* 0x20 */
+ 0, 0x99E4, 0, 0x8ADC, 0x99DF, 0x99E0, 0x99E2, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x99E3, 0, /* 0x30 */
+ 0x8B7A, 0x9081, 0, 0x95AB, 0x99E1, 0x99DD, 0x8CE1, 0, /* 0x30 */
+ 0x99DE, 0, 0x9843, 0, 0, 0, 0x95F0, 0, /* 0x40 */
+ 0x92E6, 0x8CE0, 0x8D90, 0, 0, 0, 0x99E6, 0, /* 0x40 */
+ 0, 0x93DB, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x99EA, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x8EFC, 0, 0x8EF4, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x99ED, 0x99EB, 0, 0x96A1, 0, 0x99E8, 0x99F1, 0x99EC, /* 0x70 */
+ 0, 0, 0, 0x99EF, 0x8CC4, 0x96BD, 0, 0, /* 0x70 */
+ 0x99F0, 0, 0, 0, 0x99F2, 0, 0x99F4, 0, /* 0x80 */
+ 0, 0, 0xFA92, 0x8DEE, 0x9861, 0, 0x99E9, 0x99E7, /* 0x80 */
+ 0x99F3, 0, 0x99EE, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xFA91, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x99F6, 0, 0x9A42, 0x99F8, 0, 0, /* 0xA0 */
+ 0x99FC, 0xFA93, 0, 0x9A40, 0x99F9, 0, 0, 0x9A5D, /* 0xA0 */
+ 0, 0, 0x8DE7, 0x8A50, 0, 0, 0, 0, /* 0xB0 */
+ 0x99F7, 0, 0, 0, 0x9A44, 0x88F4, 0x9A43, 0, /* 0xB0 */
+ 0x88A3, 0x9569, 0x9A41, 0, 0x99FA, 0, 0, 0x99F5, /* 0xC0 */
+ 0x99FB, 0x8DC6, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x9A45, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x88F5, 0x9A4E, 0, 0, 0x9A46, 0x9A47, 0, /* 0xE0 */
+ 0x8FA3, 0x9689, 0, 0, 0, 0x9A4C, 0x9A4B, 0, /* 0xE0 */
+ 0, 0, 0x934E, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x9A4D, 0, 0, 0x9A4A, 0, 0xFA94 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8953, 0, 0x8DB4, 0x904F, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9A48, /* 0x00 */
+ 0x9382, 0, 0, 0, 0x9A49, 0, 0x88A0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x9A53, 0x9742, /* 0x20 */
+ 0, 0x8FA5, 0, 0x9A59, 0, 0, 0, 0, /* 0x30 */
+ 0x9A58, 0x9A4F, 0, 0, 0, 0, 0x91C1, 0, /* 0x30 */
+ 0x9A50, 0, 0, 0, 0x91ED, 0x9A55, 0x8FA4, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x9A52, 0, 0, 0x96E2, /* 0x40 */
+ 0, 0, 0, 0x8C5B, 0, 0, 0x9A56, 0x9A57, /* 0x50 */
+ 0, 0, 0, 0, 0x9A54, 0x9A5A, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x9A51, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x9A60, 0x9A65, 0, 0x9A61, 0, /* 0x70 */
+ 0x9A5C, 0, 0, 0x9A66, 0x9150, 0, 0xFA95, 0x9A68, /* 0x80 */
+ 0, 0x8D41, 0x9A5E, 0x929D, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x9A62, 0x9A5B, 0x8AAB, 0, 0x8AEC, 0x8A85, 0x9A63, 0x9A5F, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x8C96, /* 0xA0 */
+ 0x9A69, 0x9A67, 0x9172, 0x8B69, 0x8BAA, 0, 0x9A64, 0, /* 0xA0 */
+ 0x8BF2, 0, 0, 0, 0, 0, 0x8963, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x9A6D, 0x9A6B, 0, 0x9AA5, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x9A70, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x9A6A, 0, 0x9A6E, 0, 0, 0x9A6C, /* 0xD0 */
+ 0, 0, 0, 0x8E6B, 0x9A6F, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9A72, /* 0xF0 */
+ 0, 0x9A77, 0, 0, 0, 0x9A75, 0x9A74 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9251, 0, /* 0x00 */
+ 0, 0x89C3, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x9A71, 0, 0x9A73, 0x8FA6, /* 0x10 */
+ 0x8952, 0, 0, 0x9A76, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x89DC, 0, 0, 0, 0, 0, 0x9A82, /* 0x20 */
+ 0, 0x8FFA, 0x9A7D, 0, 0x9A7B, 0, 0x9A7C, 0, /* 0x30 */
+ 0x9A7E, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x895C, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x9158, 0, 0x9A78, 0, /* 0x40 */
+ 0x9A79, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x8A9A, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x9A81, 0, 0, 0, /* 0x60 */
+ 0x8AED, 0, 0x9A84, 0x9A80, 0x9A83, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x95AC, 0, 0, 0, /* 0x70 */
+ 0x93D3, 0, 0x94B6, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x9A86, 0, 0, 0, 0, 0, 0x9A85, 0x8A64, /* 0x80 */
+ 0, 0, 0x9A87, 0, 0, 0, 0, 0x9A8A, /* 0x80 */
+ 0, 0, 0, 0, 0x9A89, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x9A88, 0, 0x9458, 0, 0, 0x9A8B, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x9A8C, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x9A8E, 0, 0x9A8D, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x9A90, 0, 0, 0, /* 0xB0 */
+ 0x9A93, 0x9A91, 0x9A8F, 0x9A92, 0, 0, 0, 0, /* 0xC0 */
+ 0x9A94, 0, 0, 0, 0, 0, 0x9A95, 0, /* 0xC0 */
+ 0, 0x9A96, 0, 0x9A97, 0, 0, 0, 0x9A98, /* 0xD0 */
+ 0x9964, 0, 0x8EFA, 0x8E6C, 0, 0, 0x89F1, 0, /* 0xD0 */
+ 0x88F6, 0, 0, 0x9263, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x9A99, 0, /* 0xE0 */
+ 0x8DA2, 0, 0x88CD, 0x907D, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x9A9A, 0x8CC5, 0, 0, 0x8D91, 0, 0x9A9C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9A9B, 0, 0, 0x95DE, 0x9A9D, 0, 0, 0, /* 0x00 */
+ 0x9A9F, 0x9A9E, 0, 0x9AA0, 0, 0x9AA1, 0, 0x8C97, /* 0x00 */
+ 0, 0, 0x8980, 0x9AA2, 0, 0, 0x9AA4, 0, /* 0x10 */
+ 0x9AA3, 0, 0, 0, 0x9AA6, 0, 0, 0x9379, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x9AA7, 0x88B3, /* 0x20 */
+ 0x8DDD, 0, 0, 0, 0, 0x8C5C, 0, 0, /* 0x20 */
+ 0x926E, 0, 0, 0, 0, 0, 0, 0x9AA8, /* 0x30 */
+ 0x9AA9, 0, 0, 0x9AAB, 0, 0, 0, 0, /* 0x30 */
+ 0x9AAC, 0, 0x8DE2, 0, 0, 0, 0, 0x8BCF, /* 0x40 */
+ 0, 0, 0x9656, 0, 0, 0, 0x9AAA, 0x9AAD, /* 0x40 */
+ 0x8DBF, 0x8D42, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xFA96, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x9AB1, 0, 0, 0x8DA3, 0xFA97, 0x9252, 0, /* 0x60 */
+ 0, 0x9AAE, 0x92D8, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9AB2, /* 0x70 */
+ 0, 0, 0x9082, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x9AB0, 0x9AB3, 0, 0x8C5E, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x9AB4, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x9AB5, 0, 0x8D43, 0x8A5F, 0x9AB7, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x9AB8, 0, 0xFA98, 0, 0, 0, /* 0xA0 */
+ 0x9AB9, 0, 0, 0x9AB6, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x9AAF, 0, 0, 0x9ABA, 0, 0, 0x9ABB, 0xFA9A, /* 0xC0 */
+ 0xFA99, 0, 0, 0x9684, 0, 0, 0x8FE9, 0, /* 0xC0 */
+ 0, 0, 0x9ABD, 0x9ABE, 0x9ABC, 0, 0x9AC0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x9457, 0, 0, 0x88E6, /* 0xD0 */
+ 0x9575, 0, 0, 0x9AC1, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x8FFB, 0, 0, 0x8EB7, /* 0xF0 */
+ 0, 0x947C, 0x8AEE, 0, 0x8DE9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9678, 0, 0x93B0, 0, 0, 0x8C98, 0x91CD, 0, /* 0x00 */
+ 0, 0, 0x9ABF, 0x9AC2, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x91C2, 0, 0, /* 0x10 */
+ 0, 0x9AC3, 0, 0, 0, 0x9AC4, 0, 0, /* 0x10 */
+ 0, 0x9AC6, 0, 0, 0x92E7, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x8AAC, 0, 0, 0, 0, 0xEA9F, /* 0x20 */
+ 0x8981, 0x95F1, 0, 0, 0x8FEA, 0x9367, 0, 0, /* 0x30 */
+ 0, 0, 0x8DE4, 0, 0, 0x9ACC, 0, 0, /* 0x30 */
+ 0x95BB, 0x97DB, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x89F2, 0x9AC8, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x9159, 0x9ACB, 0, 0x9383, 0, 0, 0x9368, /* 0x50 */
+ 0x9384, 0x94B7, 0x92CB, 0, 0, 0, 0x8DC7, 0, /* 0x50 */
+ 0, 0, 0x9AC7, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x8996, 0, 0x9355, 0, 0, 0, 0, /* 0x60 */
+ 0x9AC9, 0, 0x9AC5, 0, 0, 0x906F, 0, 0, /* 0x70 */
+ 0, 0x9ACD, 0, 0, 0, 0, 0x8F6D, 0, /* 0x70 */
+ 0, 0, 0, 0x8BAB, 0, 0x9ACE, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x95E6, 0, 0, 0, 0x919D, /* 0x90 */
+ 0, 0, 0, 0, 0x92C4, 0, 0xFA9D, 0x9AD0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x966E, 0, 0, 0x9AD1, 0, 0, 0x9AD6, 0, /* 0xA0 */
+ 0, 0, 0xFA9E, 0x95AD, 0, 0, 0, 0, /* 0xB0 */
+ 0x9AD5, 0x9ACF, 0x9AD2, 0x9AD4, 0, 0, 0x8DA4, 0, /* 0xB0 */
+ 0, 0x95C7, 0, 0, 0, 0x9AD7, 0, 0x9264, /* 0xC0 */
+ 0, 0, 0x89F3, 0, 0x8FEB, 0, 0, 0, /* 0xC0 */
+ 0, 0x9AD9, 0, 0x9AD8, 0, 0x8D88, 0, 0x9ADA, /* 0xD0 */
+ 0x9ADC, 0x9ADB, 0, 0, 0x9ADE, 0, 0x9AD3, 0x9AE0, /* 0xD0 */
+ 0, 0, 0, 0, 0x9ADF, 0x9ADD, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x8E6D, 0x9070, 0, 0x9173, 0x9AE1, /* 0xE0 */
+ 0x90BA, 0x88EB, 0x9484, 0, 0, 0, 0, 0x92D9, /* 0xF0 */
+ 0, 0x9AE3, 0x9AE2, 0x9AE4, 0x9AE5, 0x9AE6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9AE7, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x95CF, 0x9AE8, 0xFA9F, 0, 0, 0, 0x89C4, /* 0x00 */
+ 0x9AE9, 0, 0, 0, 0, 0x975B, 0x8A4F, 0, /* 0x10 */
+ 0x99C7, 0x8F67, 0x91BD, 0x9AEA, 0x96E9, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x96B2, 0, 0, 0x9AEC, 0, 0x91E5, /* 0x20 */
+ 0, 0x9356, 0x91BE, 0x9576, 0x9AED, 0x9AEE, 0x899B, 0, /* 0x20 */
+ 0, 0x8EB8, 0x9AEF, 0, 0, 0, 0, 0x88CE, /* 0x30 */
+ 0x9AF0, 0, 0, 0, 0, 0, 0x9AF1, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x8982, 0, 0, 0x8AEF, /* 0x40 */
+ 0x93DE, 0x95F2, 0, 0, 0, 0, 0x9AF5, 0x9174, /* 0x40 */
+ 0x9AF4, 0x8C5F, 0, 0xFAA0, 0x967A, 0x9AF3, 0, 0x9385, /* 0x50 */
+ 0x9AF7, 0, 0x9AF6, 0xFAA1, 0, 0xFAA2, 0, 0, /* 0x50 */
+ 0x9AF9, 0, 0x9AF8, 0xFAA3, 0, 0x899C, 0, 0x9AFA, /* 0x60 */
+ 0x8FA7, 0x9AFC, 0x9244, 0, 0x9AFB, 0, 0x95B1, 0, /* 0x60 */
+ 0, 0, 0, 0x8F97, 0x937A, 0, 0, 0, /* 0x70 */
+ 0x9B40, 0, 0, 0, 0, 0x8D44, 0, 0, /* 0x70 */
+ 0, 0x9B41, 0x9440, 0x94DC, 0x96CF, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x9444, 0, 0, 0x9B4A, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x8B57, 0, 0, 0x9764, 0, /* 0x90 */
+ 0, 0x96AD, 0, 0x9BAA, 0, 0x9B42, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x9B45, 0xFAA4, 0x91C3, 0, 0, /* 0xA0 */
+ 0x9657, 0, 0, 0, 0x9369, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x9B46, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x9685, 0xFAA5, 0x8DC8, 0, 0, 0x8FA8, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x9B47, 0, /* 0xC0 */
+ 0, 0x8E6F, 0, 0x8E6E, 0, 0, 0, 0, /* 0xC0 */
+ 0x88B7, 0x8CC6, 0, 0x90A9, 0x88CF, 0, 0, 0, /* 0xD0 */
+ 0, 0x9B4B, 0x9B4C, 0, 0x9B49, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x8957, 0x8AAD, 0, /* 0xE0 */
+ 0x9B48, 0, 0x96C3, 0x9550, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x88A6, 0, /* 0xF0 */
+ 0, 0, 0, 0x88F7, 0, 0, 0, 0x8E70 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x88D0, 0, 0x88A1, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x9B51, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x9B4F, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x96BA, 0, 0x9B52, 0, 0x9B50, 0, 0, 0x9B4E, /* 0x10 */
+ 0x9050, 0, 0, 0, 0, 0x9B4D, 0, 0, /* 0x20 */
+ 0, 0x95D8, 0, 0, 0, 0, 0, 0x8CE2, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x9B56, 0x9B57, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x8FA9, 0, 0, 0, /* 0x30 */
+ 0x9B53, 0x984B, 0, 0, 0, 0, 0x946B, 0, /* 0x40 */
+ 0, 0x9B55, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x8DA5, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x9B58, 0, 0, 0, 0x9577, 0, /* 0x60 */
+ 0, 0, 0x9B59, 0, 0x9B54, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x96B9, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x947D, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x9B5A, 0x9551, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x9B5B, 0x9B5F, 0x9B5C, 0, /* 0xB0 */
+ 0, 0x89C5, 0x9B5E, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x8EB9, 0, 0x9B5D, 0x8C99, 0, 0, 0, /* 0xC0 */
+ 0x9B6B, 0, 0, 0, 0, 0, 0x9B64, 0x9B61, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x9284, 0, 0x9B60, 0, 0, 0x9B62, 0, /* 0xE0 */
+ 0, 0x9B63, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x9B65, 0x9B66 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x8AF0, 0, 0x9B68, 0x9B67, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x9B69, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x8FEC, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x9B6C, 0, 0x92DA, 0, 0, 0, /* 0x20 */
+ 0x8964, 0, 0x9B6A, 0, 0, 0, 0x9B6D, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x9B6E, 0, /* 0x30 */
+ 0x9B71, 0, 0, 0x9B6F, 0, 0x9B70, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x8E71, 0x9B72, 0, 0, 0x8D45, 0x9B73, 0xFAA6, 0x8E9A, /* 0x50 */
+ 0x91B6, 0, 0x9B74, 0x9B75, 0x8E79, 0x8D46, 0, 0x96D0, /* 0x50 */
+ 0, 0, 0, 0x8B47, 0x8CC7, 0x9B76, 0x8A77, 0, /* 0x60 */
+ 0, 0x9B77, 0, 0x91B7, 0, 0, 0, 0, /* 0x60 */
+ 0x9B78, 0x9BA1, 0, 0x9B79, 0, 0x9B7A, 0, 0, /* 0x70 */
+ 0x9B7B, 0, 0x9B7D, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x9B7E, 0, 0, 0x9B80, 0, 0x91EE, 0, 0x8946, /* 0x80 */
+ 0x8EE7, 0x88C0, 0, 0x9176, 0x8AAE, 0x8EB3, 0, 0x8D47, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x9386, 0, 0x8F40, /* 0x90 */
+ 0x8AAF, 0x9288, 0x92E8, 0x88B6, 0x8B58, 0x95F3, 0, 0x8EC0, /* 0x90 */
+ 0, 0, 0x8B71, 0x90E9, 0x8EBA, 0x9747, 0x9B81, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x8B7B, 0, /* 0xA0 */
+ 0x8DC9, 0, 0, 0x8A51, 0x8983, 0x8FAA, 0x89C6, 0, /* 0xB0 */
+ 0x9B82, 0x9765, 0, 0, 0, 0, 0, 0x8F68, /* 0xB0 */
+ 0xFAA7, 0, 0x8EE2, 0x9B83, 0x8AF1, 0x93D0, 0x96A7, 0x9B84, /* 0xC0 */
+ 0, 0x9B85, 0, 0, 0x9578, 0, 0, 0, /* 0xC0 */
+ 0x9B87, 0, 0x8AA6, 0x8BF5, 0x9B86, 0, 0, 0, /* 0xD0 */
+ 0xFAA9, 0, 0, 0x8AB0, 0, 0x9051, 0x9B8B, 0x8E40, /* 0xD0 */
+ 0, 0x89C7, 0x9B8A, 0, 0x9B88, 0x9B8C, 0x9B89, 0x944A, /* 0xE0 */
+ 0x9ECB, 0x9052, 0, 0x9B8D, 0xFAAA, 0, 0x97BE, 0, /* 0xE0 */
+ 0x9B8E, 0, 0, 0x9B90, 0, 0x929E, 0x9B8F, 0, /* 0xF0 */
+ 0x90A1, 0, 0x8E9B, 0, 0, 0, 0x91CE, 0x8EF5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9595, 0x90EA, 0, 0x8ECB, 0x9B91, 0x8FAB, 0x9B92, /* 0x00 */
+ 0x9B93, 0x88D1, 0x91B8, 0x9071, 0, 0x9B94, 0x93B1, 0x8FAC, /* 0x00 */
+ 0, 0x8FAD, 0, 0x9B95, 0, 0, 0x90EB, 0, /* 0x10 */
+ 0, 0, 0x8FAE, 0, 0, 0, 0xFAAB, 0, /* 0x10 */
+ 0x9B96, 0, 0x9B97, 0, 0x96DE, 0, 0, 0, /* 0x20 */
+ 0x9B98, 0, 0, 0, 0, 0x8BC4, 0, 0, /* 0x20 */
+ 0, 0x8F41, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x9B99, 0x9B9A, 0x8EDA, 0x904B, 0x93F2, 0x9073, 0x94F6, 0x9441, /* 0x30 */
+ 0x8BC7, 0x9B9B, 0, 0, 0, 0x8B8F, 0x9B9C, 0, /* 0x40 */
+ 0x8BFC, 0, 0x93CD, 0x89AE, 0, 0x8E72, 0x9B9D, 0x9BA0, /* 0x40 */
+ 0x9B9F, 0x8BFB, 0, 0x9B9E, 0, 0x9357, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x91AE, 0, /* 0x50 */
+ 0x936A, 0x8EC6, 0, 0, 0x9177, 0x979A, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x9BA2, 0, 0x9BA3, 0x93D4, /* 0x60 */
+ 0, 0x8E52, 0, 0, 0, 0, 0x9BA5, 0, /* 0x70 */
+ 0, 0x9BA6, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x9BA7, 0, 0, 0, /* 0x80 */
+ 0x8AF2, 0x9BA8, 0, 0, 0x9BA9, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x89AA, 0, 0, 0, 0, 0xFAAC, 0, /* 0xA0 */
+ 0x915A, 0x8AE2, 0, 0x9BAB, 0x96A6, 0, 0, 0, /* 0xA0 */
+ 0, 0x91D0, 0, 0x8A78, 0, 0, 0x9BAD, 0x9BAF, /* 0xB0 */
+ 0x8ADD, 0, 0xFAAD, 0x9BAC, 0x9BAE, 0, 0x9BB1, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x9BB0, 0, 0x9BB2, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x9BB3, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x93BB, 0x8BAC, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x89E3, 0x9BB4, 0x9BB9, 0, 0, 0x9BB7, 0, 0x95F5, /* 0xE0 */
+ 0x95F4, 0, 0, 0, 0, 0xFAAE, 0x9387, 0, /* 0xF0 */
+ 0, 0, 0x9BB6, 0x8F73, 0, 0x9BB5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9092, /* 0x00 */
+ 0, 0, 0, 0x9BBA, 0, 0, 0x8DE8, 0, /* 0x00 */
+ 0, 0x9BC0, 0, 0, 0x9BC1, 0x9BBB, 0x8A52, 0x9BBC, /* 0x10 */
+ 0x9BC5, 0x9BC4, 0x9BC3, 0x9BBF, 0, 0, 0, 0x9BBE, /* 0x10 */
+ 0, 0, 0x9BC2, 0, 0, 0, 0, 0xFAAF, /* 0x20 */
+ 0, 0x95F6, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xFAB2, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x9BC9, 0x9BC6, 0, 0x9BC8, 0, /* 0x40 */
+ 0x9792, 0, 0x9BC7, 0xFAB0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x9BBD, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x9093, 0, 0, 0x9BCA, 0xFAB3, 0, 0x8DB5, /* 0x60 */
+ 0, 0, 0, 0x9BCB, 0, 0, 0x9BCC, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x9BCF, 0, 0x9BCE, 0, 0, 0x9BCD, /* 0x80 */
+ 0, 0, 0, 0x9388, 0x9BB8, 0, 0, 0, /* 0x80 */
+ 0x9BD5, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x9BD1, 0, 0, /* 0x90 */
+ 0, 0, 0x9BD0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x9BD2, 0, 0x9BD3, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9BD6, /* 0xB0 */
+ 0xFAB4, 0xFAB5, 0x97E4, 0, 0x9BD7, 0x9BD4, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x9BD8, 0, 0, 0x8ADE, 0x9BD9, 0, 0, /* 0xC0 */
+ 0xFAB6, 0, 0x9BDB, 0x9BDA, 0, 0, 0x9BDC, 0, /* 0xD0 */
+ 0, 0, 0, 0x9BDD, 0, 0x90EC, 0x8F42, 0, /* 0xD0 */
+ 0, 0x8F84, 0, 0x9183, 0, 0x8D48, 0x8DB6, 0x8D49, /* 0xE0 */
+ 0x8B90, 0, 0, 0x9BDE, 0, 0, 0x8DB7, 0, /* 0xE0 */
+ 0, 0x8CC8, 0x9BDF, 0x96A4, 0x9462, 0x9BE0, 0, 0x8D4A, /* 0xF0 */
+ 0, 0, 0, 0x8AAA, 0, 0x9246, 0x8BD0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E73, 0x957A, 0, 0, 0x94BF, 0, /* 0x00 */
+ 0, 0, 0, 0x9BE1, 0x8AF3, 0, 0, 0, /* 0x00 */
+ 0, 0x9BE4, 0, 0, 0, 0, 0x929F, 0, /* 0x10 */
+ 0, 0x9BE3, 0x9BE2, 0x9BE5, 0, 0x92E9, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x9083, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x8E74, 0, 0x90C8, 0, 0x91D1, /* 0x20 */
+ 0x8B41, 0, 0, 0x92A0, 0, 0, 0x9BE6, 0x9BE7, /* 0x30 */
+ 0x8FED, 0, 0, 0, 0, 0x9658, 0, 0, /* 0x30 */
+ 0x9BEA, 0, 0, 0x9BE9, 0x9BE8, 0x959D, 0, 0x9BF1, /* 0x40 */
+ 0, 0, 0, 0, 0x9679, 0, 0x9BEB, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x9BED, 0x968B, 0, 0x9BEC, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9BEE, /* 0x50 */
+ 0, 0x94A6, 0x9BEF, 0x95BC, 0x9BF0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x8AB1, 0x95BD, 0x944E, 0x9BF2, 0x9BF3, 0, /* 0x70 */
+ 0x8D4B, 0x8AB2, 0x9BF4, 0x8CB6, 0x9763, 0x9748, 0x8AF4, 0x9BF6, /* 0x70 */
+ 0, 0x92A1, 0, 0x8D4C, 0x8FAF, 0, 0, 0x94DD, /* 0x80 */
+ 0, 0, 0x8FB0, 0, 0, 0, 0, 0x8F98, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x92EA, 0x95F7, 0x9358, /* 0x90 */
+ 0, 0, 0x8D4D, 0, 0x957B, 0, 0, 0, /* 0x90 */
+ 0x9BF7, 0, 0, 0, 0, 0, 0x9378, 0x8DC0, /* 0xA0 */
+ 0, 0, 0, 0x8CC9, 0, 0x92EB, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x88C1, 0x8F8E, 0x8D4E, /* 0xB0 */
+ 0x9766, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x9BF8, 0x9BF9, 0x9470, 0, 0, 0, 0, /* 0xC0 */
+ 0x9BFA, 0x97F5, 0x984C, 0, 0, 0, 0, 0x9BFC, /* 0xC0 */
+ 0x9BFB, 0, 0, 0x8A66, 0, 0, 0x9C40, 0, /* 0xD0 */
+ 0, 0, 0x9C43, 0x9C44, 0, 0x9C42, 0, 0x955F, /* 0xD0 */
+ 0x8FB1, 0x9C46, 0x9C45, 0x9C41, 0, 0, 0, 0, /* 0xE0 */
+ 0x9C47, 0x9C48, 0, 0, 0x9C49, 0, 0, 0, /* 0xE0 */
+ 0x9C4C, 0x9C4A, 0, 0x9C4B, 0x9C4D, 0, 0x8984, 0x92EC, /* 0xF0 */
+ 0x9C4E, 0, 0x8C9A, 0x89F4, 0x9455, 0, 0x9C4F, 0x93F9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x95D9, 0, 0x9C50, 0x984D, 0, 0, 0, /* 0x00 */
+ 0, 0x9C51, 0x95BE, 0x9C54, 0x989F, 0x98AF, 0, 0x8EAE, /* 0x00 */
+ 0x93F3, 0x9C55, 0, 0x8B7C, 0x92A2, 0x88F8, 0x9C56, 0x95A4, /* 0x10 */
+ 0x8D4F, 0, 0, 0x926F, 0, 0, 0, 0x92ED, /* 0x10 */
+ 0, 0xFAB7, 0, 0, 0, 0x96ED, 0x8CB7, 0x8CCA, /* 0x20 */
+ 0, 0x9C57, 0, 0, 0, 0x9C58, 0, 0x9C5E, /* 0x20 */
+ 0, 0x8EE3, 0, 0, 0xFAB8, 0x92A3, 0, 0x8BAD, /* 0x30 */
+ 0x9C59, 0, 0, 0, 0x954A, 0, 0x9265, 0, /* 0x30 */
+ 0, 0x9C5A, 0, 0, 0, 0xFA67, 0, 0, /* 0x40 */
+ 0x9C5B, 0, 0x8BAE, 0, 0x9C5C, 0, 0x9C5D, 0, /* 0x40 */
+ 0, 0x9C5F, 0, 0x9396, 0, 0, 0x9C60, 0x9C61, /* 0x50 */
+ 0, 0x9C62, 0, 0, 0x9C53, 0x9C52, 0, 0, /* 0x50 */
+ 0, 0x9C63, 0x8C60, 0, 0, 0, 0x9546, 0xFAB9, /* 0x60 */
+ 0, 0x8DCA, 0x9556, 0x92A4, 0x956A, 0x9C64, 0, 0, /* 0x60 */
+ 0x8FB2, 0x8965, 0, 0x9C65, 0, 0, 0, 0x9C66, /* 0x70 */
+ 0, 0x96F0, 0, 0, 0x94DE, 0, 0, 0x9C69, /* 0x70 */
+ 0x899D, 0x90AA, 0x9C68, 0x9C67, 0x8C61, 0x91D2, 0, 0x9C6D, /* 0x80 */
+ 0x9C6B, 0, 0x9C6A, 0x97A5, 0x8CE3, 0, 0, 0, /* 0x80 */
+ 0x8F99, 0x9C6C, 0x936B, 0x8F5D, 0, 0, 0, 0x93BE, /* 0x90 */
+ 0x9C70, 0x9C6F, 0, 0, 0, 0, 0x9C6E, 0, /* 0x90 */
+ 0x9C71, 0x8CE4, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x9C72, 0x959C, 0x8F7A, 0, 0, 0x9C73, 0x94F7, 0, /* 0xA0 */
+ 0, 0, 0, 0x93BF, 0x92A5, 0, 0, 0xFABA, /* 0xB0 */
+ 0, 0x934F, 0, 0, 0x9C74, 0x8B4A, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x9053, 0, 0x954B, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x8AF5, 0x9445, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x9C75, 0x8E75, /* 0xD0 */
+ 0x9659, 0x965A, 0, 0, 0x899E, 0x9C7A, 0xFABB, 0, /* 0xD0 */
+ 0x9289, 0, 0, 0, 0x9C77, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x89F5, 0, 0, 0, 0, /* 0xE0 */
+ 0x9CAB, 0x9C79, 0, 0, 0, 0x944F, 0, 0, /* 0xF0 */
+ 0x9C78, 0, 0, 0x9C76, 0, 0x8D9A, 0, 0x9C7C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x9C83, 0x9C89, /* 0x00 */
+ 0x9C81, 0, 0x937B, 0, 0, 0x9C86, 0x957C, 0, /* 0x10 */
+ 0, 0x9C80, 0, 0x9C85, 0x97E5, 0x8E76, 0, 0, /* 0x10 */
+ 0x91D3, 0x9C7D, 0, 0, 0, 0x8B7D, 0x9C88, 0x90AB, /* 0x20 */
+ 0x8985, 0x9C82, 0x89F6, 0x9C87, 0, 0, 0, 0x8BAF, /* 0x20 */
+ 0, 0x9C84, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x9C8A, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x9C8C, 0x9C96, 0x9C94, 0, 0, 0x9C91, 0, /* 0x40 */
+ 0, 0, 0x9C90, 0x97F6, 0, 0x9C92, 0, 0, /* 0x40 */
+ 0x8BB0, 0, 0x8D50, 0, 0, 0x8F9A, 0, 0, /* 0x50 */
+ 0, 0x9C99, 0x9C8B, 0, 0, 0xFABC, 0, 0x9C8F, /* 0x50 */
+ 0x9C7E, 0, 0x89F8, 0x9C93, 0x9C95, 0x9270, 0, 0, /* 0x60 */
+ 0x8DA6, 0x89B6, 0x9C8D, 0x9C98, 0x9C97, 0x8BB1, 0, 0x91A7, /* 0x60 */
+ 0x8A86, 0, 0, 0, 0, 0x8C62, 0, 0x9C8E, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x9C9A, 0, 0x9C9D, 0x9C9F, 0xFABD, 0, 0, /* 0x80 */
+ 0, 0x8EBB, 0xFABE, 0x9CA5, 0x92EE, 0x9C9B, 0, 0, /* 0x80 */
+ 0, 0, 0x9CA3, 0, 0x89F7, 0, 0x9CA1, 0x9CA2, /* 0x90 */
+ 0, 0, 0x9C9E, 0x9CA0, 0, 0, 0, 0x8CE5, /* 0x90 */
+ 0x9749, 0, 0, 0x8AB3, 0, 0, 0x8978, 0x9CA4, /* 0xA0 */
+ 0, 0x9459, 0x88AB, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x94DF, 0x9C7B, 0x9CAA, 0x9CAE, 0x96E3, 0, /* 0xB0 */
+ 0x9CA7, 0, 0, 0, 0x9389, 0x9CAC, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x8FEE, 0x9CAD, 0x93D5, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x9866, 0, 0x9CA9, 0, 0xFAC0, 0, 0, /* 0xD0 */
+ 0x9CAF, 0, 0x8D9B, 0, 0x90C9, 0, 0xFABF, 0x88D2, /* 0xD0 */
+ 0x9CA8, 0x9CA6, 0, 0x9179, 0, 0, 0, 0x9C9C, /* 0xE0 */
+ 0x8E53, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x91C4, 0x9CBB, 0xFAC2, 0x917A, 0x9CB6, 0, 0x9CB3, 0x9CB4, /* 0xF0 */
+ 0, 0x8EE4, 0x9CB7, 0x9CBA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9CB5, 0x8F44, 0, 0x9CB8, 0, 0, 0x9CB2, 0, /* 0x00 */
+ 0x96FA, 0x96F9, 0, 0, 0, 0x9CBC, 0x9CBD, 0x88D3, /* 0x00 */
+ 0, 0xFAC3, 0, 0, 0, 0x9CB1, 0, 0, /* 0x10 */
+ 0, 0, 0x8BF0, 0x88A4, 0, 0, 0, 0x8AB4, /* 0x10 */
+ 0xFAC1, 0x9CB9, 0, 0, 0, 0, 0, 0x9CC1, /* 0x20 */
+ 0x9CC0, 0, 0, 0, 0x9CC5, 0, 0, 0, /* 0x20 */
+ 0xFAC5, 0, 0, 0, 0x9CC6, 0, 0, 0xFAC4, /* 0x30 */
+ 0, 0, 0, 0, 0x9CC4, 0x9CC7, 0x9CBF, 0x9CC3, /* 0x30 */
+ 0, 0, 0x9CC8, 0, 0x9CC9, 0, 0, 0x9CBE, /* 0x40 */
+ 0x8E9C, 0, 0x9CC2, 0x91D4, 0x8D51, 0x9CB0, 0x9054, 0, /* 0x40 */
+ 0, 0, 0, 0x9CD6, 0, 0x95E7, 0, 0, /* 0x50 */
+ 0x9CCC, 0x9CCD, 0x9CCE, 0, 0, 0x9CD5, 0, 0x9CD4, /* 0x50 */
+ 0, 0, 0x969D, 0x8AB5, 0, 0x9CD2, 0, 0x8C64, /* 0x60 */
+ 0x8A53, 0, 0, 0x9CCF, 0, 0, 0x97B6, 0x9CD1, /* 0x60 */
+ 0x88D4, 0x9CD3, 0, 0x9CCA, 0x9CD0, 0x9CD7, 0x8C63, 0x9CCB, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x977C, 0, /* 0x70 */
+ 0, 0, 0x974A, 0, 0, 0, 0, 0x9CDA, /* 0x80 */
+ 0, 0, 0x9CDE, 0, 0, 0, 0x919E, 0, /* 0x80 */
+ 0x97F7, 0x9CDF, 0, 0, 0x9CDC, 0, 0x9CD9, 0, /* 0x90 */
+ 0xFAC6, 0x9CD8, 0x9CDD, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x95AE, 0, 0, 0x93B2, /* 0xA0 */
+ 0, 0x8C65, 0, 0x9CE0, 0x9CDB, 0, 0x9CE1, 0, /* 0xA0 */
+ 0, 0, 0x8C9B, 0, 0, 0, 0x89AF, 0, /* 0xB0 */
+ 0, 0, 0x9CE9, 0, 0, 0, 0x8AB6, 0, /* 0xB0 */
+ 0, 0, 0, 0x9CE7, 0, 0, 0x9CE8, 0x8DA7, /* 0xC0 */
+ 0x9CE6, 0x9CE4, 0x9CE3, 0x9CEA, 0x9CE2, 0x9CEC, 0, 0, /* 0xC0 */
+ 0x89F9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x9CEE, 0, 0, 0x9CED, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x92A6, 0, 0x9CF1, 0, 0x9CEF, 0x9CE5, /* 0xF0 */
+ 0x8C9C, 0, 0x9CF0, 0, 0x9CF4, 0x9CF3, 0x9CF5, 0x9CF2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9CF6, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x9CF7, 0x9CF8, 0x95E8, 0, 0x9CFA, 0x9CF9, 0x8F5E, 0, /* 0x00 */
+ 0x90AC, 0x89E4, 0x89FA, 0xFAC7, 0x9CFB, 0, 0x88BD, 0, /* 0x10 */
+ 0, 0, 0x90CA, 0x9CFC, 0, 0xE6C1, 0x9D40, 0x8C81, /* 0x10 */
+ 0, 0x9D41, 0, 0, 0, 0, 0x90ED, 0, /* 0x20 */
+ 0, 0, 0x9D42, 0, 0, 0, 0x9D43, 0x8B59, /* 0x20 */
+ 0x9D44, 0, 0x9D45, 0x9D46, 0x91D5, 0, 0, 0, /* 0x30 */
+ 0x8CCB, 0, 0, 0x96DF, 0, 0, 0, 0x965B, /* 0x30 */
+ 0x8F8A, 0x9D47, 0, 0, 0, 0, 0, 0x90EE, /* 0x40 */
+ 0xE7BB, 0x94E0, 0, 0x8EE8, 0, 0x8DCB, 0x9D48, 0, /* 0x40 */
+ 0, 0, 0, 0x91C5, 0, 0x95A5, 0, 0, /* 0x50 */
+ 0x91EF, 0, 0, 0x9D4B, 0, 0, 0x9D49, 0, /* 0x50 */
+ 0x9D4C, 0, 0, 0x9D4A, 0, 0, 0, 0, /* 0x60 */
+ 0x9D4D, 0, 0, 0, 0, 0, 0x95AF, 0, /* 0x60 */
+ 0, 0x88B5, 0, 0, 0, 0, 0x957D, 0, /* 0x70 */
+ 0, 0x94E1, 0, 0, 0x9D4E, 0, 0x9D51, 0x8FB3, /* 0x70 */
+ 0x8B5A, 0, 0x9D4F, 0x9D56, 0x8FB4, 0, 0, 0, /* 0x80 */
+ 0, 0x9D50, 0x9463, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x977D, 0x9D52, 0x9D53, 0x9D57, 0x938A, 0x9D54, 0x8D52, /* 0x90 */
+ 0x90DC, 0, 0, 0x9D65, 0x94B2, 0, 0x91F0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xFAC8, 0, /* 0xA0 */
+ 0, 0, 0, 0x94E2, 0x9DAB, 0, 0, 0, /* 0xA0 */
+ 0, 0x95F8, 0, 0, 0, 0x92EF, 0, 0, /* 0xB0 */
+ 0, 0x9695, 0, 0x9D5A, 0x899F, 0x928A, 0, 0, /* 0xB0 */
+ 0, 0, 0x9D63, 0, 0, 0x9253, 0x9D5D, 0x9D64, /* 0xC0 */
+ 0x9D5F, 0x9D66, 0x9D62, 0, 0x9D61, 0x948F, 0, 0x9D5B, /* 0xC0 */
+ 0x89FB, 0x9D59, 0x8B91, 0x91F1, 0x9D55, 0, 0, 0x9D58, /* 0xD0 */
+ 0x8D53, 0x90D9, 0, 0x8FB5, 0x9D60, 0x9471, 0, 0, /* 0xD0 */
+ 0x8B92, 0x8A67, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x8A87, 0x9040, 0x9D68, 0x9D6D, /* 0xE0 */
+ 0, 0x9D69, 0, 0x8C9D, 0, 0x9D6E, 0x8E41, 0x8D89, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0x8F45, 0x9D5C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E9D, 0x9D6B, 0, 0, 0, 0, 0x8E77, /* 0x00 */
+ 0x9D6C, 0x88C2, 0, 0, 0x9D67, 0, 0, 0, /* 0x00 */
+ 0, 0x92A7, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x8B93, 0, 0, 0, 0, 0, 0x8BB2, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9D6A, /* 0x20 */
+ 0x88A5, 0, 0, 0x8DC1, 0, 0, 0, 0x9055, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x92F0, 0, 0, 0x94D2, 0x9D70, 0x917D, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x91A8, 0, 0, 0x8E4A, 0x9D71, 0, 0x9D73, /* 0x40 */
+ 0x9D6F, 0, 0, 0, 0, 0x95DF, 0, 0x92BB, /* 0x50 */
+ 0, 0, 0, 0, 0x917B, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x95F9, /* 0x60 */
+ 0x8ECC, 0x9D80, 0, 0x9D7E, 0, 0, 0x9098, 0, /* 0x60 */
+ 0, 0, 0x8C9E, 0, 0, 0, 0x9D78, 0x8FB7, /* 0x70 */
+ 0, 0, 0x93E6, 0x9450, 0, 0, 0, 0, /* 0x70 */
+ 0x9D76, 0, 0, 0x917C, 0, 0, 0, 0, /* 0x80 */
+ 0x8EF6, 0x9D7B, 0, 0, 0x8FB6, 0, 0x9D75, 0x9D7A, /* 0x80 */
+ 0, 0, 0x9472, 0, 0, 0, 0x9D74, 0, /* 0x90 */
+ 0x8C40, 0, 0, 0x8A7C, 0, 0, 0, 0x9D7C, /* 0x90 */
+ 0x97A9, 0x8DCC, 0x9254, 0x9D79, 0, 0x90DA, 0, 0x8D54, /* 0xA0 */
+ 0x9084, 0x8986, 0x915B, 0x9D77, 0x8B64, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x8C66, 0, 0x92CD, 0x9D7D, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x917E, 0, 0, 0x9D81, 0, /* 0xB0 */
+ 0x9D83, 0, 0, 0x91B5, 0x9D89, 0, 0x9D84, 0, /* 0xC0 */
+ 0, 0x9D86, 0, 0, 0, 0, 0, 0x9560, /* 0xC0 */
+ 0x92F1, 0, 0x9D87, 0, 0, 0, 0x974B, 0, /* 0xD0 */
+ 0, 0, 0x9767, 0x8AB7, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x88AC, 0, 0x9D85, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x9D82, 0, 0, 0, 0, 0x8AF6, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x8987, 0xFAC9, 0x9D88, 0, /* 0xF0 */
+ 0, 0, 0x9768 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9D8C, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x91B9, 0, 0x9D93, /* 0x00 */
+ 0, 0, 0, 0x9D8D, 0, 0, 0x9D8A, 0x9D91, /* 0x10 */
+ 0, 0, 0, 0, 0x9D72, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x9D8E, 0, /* 0x20 */
+ 0x9D92, 0, 0, 0, 0x94C0, 0x938B, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x9D8B, 0, 0x9D8F, 0, /* 0x30 */
+ 0, 0, 0x8C67, 0, 0, 0, 0x8DEF, 0, /* 0x30 */
+ 0, 0, 0x90DB, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x9D97, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x9345, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xFACA, 0, 0, 0, 0, 0, 0, 0x9D94, /* 0x60 */
+ 0, 0x9680, 0, 0, 0, 0, 0, 0x9D95, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0x9D96, 0, /* 0x70 */
+ 0x96CC, 0, 0x90A0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x8C82, 0, 0, 0, 0, /* 0x80 */
+ 0x9D9D, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x8E54, 0x9D9A, 0, 0x9D99, 0, 0, /* 0x90 */
+ 0, 0, 0x9451, 0, 0, 0xFACB, 0x93B3, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x9350, 0x9D9B, 0, 0, /* 0xA0 */
+ 0, 0x9D9C, 0, 0x958F, 0, 0x9464, 0x8E42, 0, /* 0xA0 */
+ 0x90EF, 0, 0x966F, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x8A68, 0, 0x9DA3, 0x9D9E, 0, 0, 0, /* 0xB0 */
+ 0, 0x9769, 0x9DA5, 0, 0, 0x9DA1, 0, 0x9DA2, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x9180, 0xFACC, 0, /* 0xC0 */
+ 0, 0, 0x9DA0, 0, 0x9D5E, 0, 0, 0, /* 0xD0 */
+ 0x9DA4, 0, 0x9D9F, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x9DA9, 0x9DAA, 0x9346, 0x9DAC, 0, 0, 0x8E43, 0x9DA7, /* 0xE0 */
+ 0, 0, 0, 0, 0x8B5B, 0, 0, 0x9DAD, /* 0xE0 */
+ 0, 0x9DA6, 0x9DB1, 0, 0x9DB0, 0, 0x9DAF, 0, /* 0xF0 */
+ 0, 0, 0x9DB2, 0, 0, 0x9DB4, 0x8FEF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9DB3, 0, 0, 0, 0, 0x9DB7, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x9DB5, 0, 0, 0, 0x9DB6, 0x9D90, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x9DB9, 0x9DB8, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x9D98, 0x9DBA, 0x9DAE, 0, 0, 0x8E78, /* 0x20 */
+ 0, 0, 0, 0, 0x9DBB, 0x9DBC, 0x9DBE, 0x9DBD, /* 0x30 */
+ 0x9DBF, 0x89FC, 0, 0x8D55, 0, 0, 0x95FA, 0x90AD, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x8CCC, 0, 0, /* 0x40 */
+ 0x9DC1, 0, 0, 0, 0, 0x9DC4, 0xFACD, 0x9571, /* 0x40 */
+ 0, 0x8B7E, 0, 0, 0, 0x9DC3, 0x9DC2, 0x9473, /* 0x50 */
+ 0x9DC5, 0x8BB3, 0, 0, 0, 0x9DC7, 0x9DC6, 0, /* 0x50 */
+ 0, 0, 0x8AB8, 0x8E55, 0, 0, 0x93D6, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x8C68, 0, 0, 0, /* 0x60 */
+ 0x9094, 0, 0x9DC8, 0, 0x90AE, 0x9347, 0, 0x957E, /* 0x70 */
+ 0x9DC9, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x9DCA, 0x9DCB, 0, 0, 0, 0x95B6, /* 0x80 */
+ 0x9B7C, 0x90C4, 0, 0, 0x956B, 0, 0x8DD6, 0, /* 0x80 */
+ 0x94E3, 0x94C1, 0, 0, 0, 0, 0, 0x936C, /* 0x90 */
+ 0, 0x97BF, 0, 0x9DCD, 0x8ECE, 0, 0, 0x9DCE, /* 0x90 */
+ 0, 0x88B4, 0, 0, 0x8BD2, 0x90CB, 0, 0x9580, /* 0xA0 */
+ 0, 0, 0, 0x9DCF, 0x8E61, 0x9266, 0, 0x8E7A, /* 0xA0 */
+ 0x9056, 0, 0, 0, 0, 0, 0, 0x9DD0, /* 0xB0 */
+ 0, 0x95FB, 0, 0, 0x8997, 0x8E7B, 0, 0, /* 0xB0 */
+ 0, 0x9DD3, 0, 0x9DD1, 0x9DD4, 0x97B7, 0x9DD2, 0, /* 0xC0 */
+ 0, 0, 0, 0x90F9, 0x9DD5, 0, 0, 0x91B0, /* 0xC0 */
+ 0, 0, 0x9DD6, 0, 0, 0, 0, 0x8AF8, /* 0xD0 */
+ 0, 0x9DD8, 0, 0x9DD7, 0, 0, 0, 0, /* 0xD0 */
+ 0x9DD9, 0x9DDA, 0x8AF9, 0, 0, 0x93FA, 0x9255, 0x8B8C, /* 0xE0 */
+ 0x8E7C, 0x9181, 0, 0, 0x8F7B, 0x88AE, 0, 0, /* 0xE0 */
+ 0, 0x9DDB, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x89A0, 0x9DDF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFACE, 0, 0x8D56, 0x9DDE, 0, 0, 0x8DA9, 0x8FB8, /* 0x00 */
+ 0, 0xFAD1, 0x9DDD, 0, 0x8FB9, 0, 0x96BE, 0x8DA8, /* 0x00 */
+ 0, 0, 0, 0x88D5, 0x90CC, 0xFACF, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x9DE4, 0, 0xFAD3, 0x90AF, /* 0x10 */
+ 0x8966, 0, 0, 0, 0xFAD4, 0x8F74, 0, 0x9686, /* 0x20 */
+ 0x8DF0, 0, 0, 0, 0, 0x8FBA, 0xFAD2, 0x90A5, /* 0x20 */
+ 0, 0xFA63, 0, 0, 0x9DE3, 0x9DE1, 0x9DE2, 0, /* 0x30 */
+ 0, 0, 0, 0xFAD0, 0x928B, 0, 0, 0x9E45, /* 0x30 */
+ 0, 0x9DE8, 0x8E9E, 0x8D57, 0x9DE6, 0, 0, 0, /* 0x40 */
+ 0, 0x9DE7, 0, 0x9057, 0, 0, 0, 0x9DE5, /* 0x40 */
+ 0, 0, 0x8E4E, 0, 0, 0, 0, 0xFAD6, /* 0x50 */
+ 0, 0xFAD7, 0, 0, 0, 0x9DEA, 0x9DE9, 0x9DEE, /* 0x50 */
+ 0, 0, 0x9DEF, 0, 0x9DEB, 0xFAD5, 0x8A41, 0x9DEC, /* 0x60 */
+ 0x9DED, 0x94D3, 0, 0, 0, 0, 0x9581, 0x8C69, /* 0x60 */
+ 0x9DF0, 0, 0, 0xFAD9, 0x90B0, 0, 0x8FBB, 0, /* 0x70 */
+ 0, 0, 0x9271, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x8BC5, 0, 0x9DF1, 0x9DF5, 0, 0, 0x89C9, /* 0x80 */
+ 0x9DF2, 0x9DF4, 0, 0, 0, 0, 0x9DF3, 0, /* 0x80 */
+ 0, 0x8F8B, 0, 0, 0, 0, 0x9267, 0x88C3, /* 0x90 */
+ 0x9DF6, 0xFADA, 0, 0, 0, 0x9DF7, 0, 0, /* 0x90 */
+ 0xFADB, 0, 0x92A8, 0, 0, 0, 0x97EF, 0, /* 0xA0 */
+ 0, 0, 0, 0x8E62, 0, 0, 0x95E9, 0, /* 0xA0 */
+ 0, 0, 0xFADC, 0, 0x965C, 0, 0, 0, /* 0xB0 */
+ 0x9E41, 0x9DF9, 0, 0, 0x9DFC, 0, 0x9DFB, 0xFADD, /* 0xB0 */
+ 0, 0x9DF8, 0, 0, 0x9E40, 0, 0, 0x93DC, /* 0xC0 */
+ 0, 0x9DFA, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x9E42, 0, /* 0xD0 */
+ 0, 0x8F8C, 0x9E43, 0, 0x976A, 0x9498, 0, 0, /* 0xD0 */
+ 0x9E44, 0, 0, 0, 0, 0, 0x9E46, 0, /* 0xE0 */
+ 0, 0x9E47, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x9E48, 0, 0x8BC8, 0x8967, 0x8D58, 0x9E49, 0, 0x9E4A, /* 0xF0 */
+ 0x8F91, 0x9182, 0xFADE, 0xFA66, 0x99D6, 0x915D, 0x915C, 0x91D6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8DC5, 0, 0, 0x98F0, 0, 0, 0, 0, /* 0x00 */
+ 0x8C8E, 0x974C, 0, 0x95FC, 0, 0x959E, 0xFADF, 0x9E4B, /* 0x00 */
+ 0, 0, 0, 0, 0x8DF1, 0x92BD, 0x9E4C, 0x984E, /* 0x10 */
+ 0, 0, 0, 0x965D, 0, 0x92A9, 0x9E4D, 0x8AFA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x9E4E, 0x9E4F, /* 0x20 */
+ 0x96D8, 0, 0x96A2, 0x9696, 0x967B, 0x8E44, 0x9E51, 0, /* 0x20 */
+ 0, 0x8EE9, 0, 0, 0x9670, 0, 0x9E53, 0x9E56, /* 0x30 */
+ 0x9E55, 0, 0x8AF7, 0, 0, 0x8B80, 0, 0x9E52, /* 0x30 */
+ 0, 0x9E54, 0, 0, 0, 0, 0x9E57, 0, /* 0x40 */
+ 0, 0x9099, 0, 0, 0, 0, 0x979B, 0x88C7, /* 0x40 */
+ 0x8DDE, 0x91BA, 0, 0x8EDB, 0, 0, 0x8FF1, 0, /* 0x50 */
+ 0, 0x9E5A, 0, 0, 0x936D, 0, 0x9E58, 0x91A9, /* 0x50 */
+ 0x9E59, 0x8FF0, 0x96DB, 0x9E5B, 0x9E5C, 0x9788, 0xFAE1, 0, /* 0x60 */
+ 0, 0, 0x9E61, 0, 0, 0x8D59, 0, 0x9474, /* 0x60 */
+ 0x9E5E, 0x938C, 0x9DDC, 0x9DE0, 0, 0x8B6E, 0, 0x9466, /* 0x70 */
+ 0, 0, 0, 0, 0x9E60, 0, 0x8FBC, 0x94C2, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x9E66, 0, 0x94F8, /* 0x80 */
+ 0, 0x9E5D, 0, 0x9E63, 0x9E62, 0, 0, 0, /* 0x80 */
+ 0x90CD, 0, 0, 0, 0, 0x968D, 0, 0x97D1, /* 0x90 */
+ 0, 0, 0x9687, 0, 0x89CA, 0x8E7D, 0, 0, /* 0x90 */
+ 0x9867, 0x9E65, 0x9095, 0, 0, 0, 0x9E64, 0, /* 0xA0 */
+ 0, 0x9E5F, 0, 0, 0, 0, 0, 0x8CCD, /* 0xA0 */
+ 0, 0, 0, 0x9E6B, 0x9E69, 0, 0x89CB, 0x9E67, /* 0xB0 */
+ 0x9E6D, 0x9E73, 0, 0xFAE2, 0, 0, 0, 0, /* 0xB0 */
+ 0xFAE4, 0x91C6, 0, 0, 0x95BF, 0, 0x9E75, 0, /* 0xC0 */
+ 0, 0, 0x9541, 0, 0, 0, 0x9E74, 0x9490, /* 0xC0 */
+ 0x965E, 0x8AB9, 0, 0x90F5, 0x8F5F, 0, 0, 0, /* 0xD0 */
+ 0x92D1, 0, 0x974D, 0, 0, 0x9E70, 0x9E6F, 0, /* 0xD0 */
+ 0, 0, 0x9E71, 0, 0x9E6E, 0, 0, 0x9E76, /* 0xE0 */
+ 0, 0x9E6C, 0, 0, 0x9E6A, 0, 0x9E72, 0x9E68, /* 0xE0 */
+ 0, 0x928C, 0, 0x96F6, 0x8EC4, 0x8DF2, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0x8DB8, 0, 0, 0x968F, 0x8A60 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFAE5, 0x92CC, 0x93C8, 0x8968, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x90F0, 0, 0, 0x90B2, 0x8C49, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x9E78, 0, /* 0x10 */
+ 0, 0x8D5A, 0x8A9C, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x9E7A, 0x8A94, 0x9E81, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x9E7D, 0, 0x90F1, 0, 0, 0, /* 0x30 */
+ 0x8A6A, 0x8DAA, 0, 0, 0x8A69, 0x8DCD, 0, 0, /* 0x30 */
+ 0x9E7B, 0x8C85, 0x8C6A, 0x938D, 0xFAE6, 0, 0x9E79, 0, /* 0x40 */
+ 0x88C4, 0, 0, 0, 0, 0x9E7C, 0x9E7E, 0, /* 0x40 */
+ 0x8BCB, 0x8C4B, 0xFAE3, 0x8ABA, 0x8B6A, 0, 0, 0, /* 0x50 */
+ 0, 0x9E82, 0, 0, 0x8DF7, 0x9691, 0, 0x8E56, /* 0x50 */
+ 0, 0, 0, 0x9E83, 0, 0, 0, 0x954F, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x9E8F, 0, 0x89B1, 0x9E84, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x9E95, 0x9E85, /* 0x70 */
+ 0, 0x97C0, 0, 0x9E8C, 0, 0x947E, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x9E94, 0, 0x9E87, /* 0x80 */
+ 0, 0, 0, 0x88B2, 0x9E89, 0, 0, 0x8D5B, /* 0x90 */
+ 0, 0, 0, 0x9E8B, 0, 0x9E8A, 0, 0x9E86, /* 0x90 */
+ 0x9E91, 0, 0x8FBD, 0, 0, 0, 0x9AEB, 0x8CE6, /* 0xA0 */
+ 0x979C, 0, 0, 0, 0, 0x9E88, 0, 0x92F2, /* 0xA0 */
+ 0x8A42, 0x8DAB, 0, 0x9E80, 0, 0x9E90, 0x8A81, 0, /* 0xB0 */
+ 0, 0x9E8E, 0x9E92, 0, 0x938E, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x8AFC, 0, 0x9EB0, 0, /* 0xC0 */
+ 0xFA64, 0x96C7, 0x9E97, 0x8AFB, 0, 0x9E9E, 0, 0xFAE7, /* 0xC0 */
+ 0, 0, 0x965F, 0, 0x9E9F, 0x9EA1, 0, 0x9EA5, /* 0xD0 */
+ 0x9E99, 0, 0x9249, 0, 0, 0, 0, 0x938F, /* 0xD0 */
+ 0x9EA9, 0x9E9C, 0, 0x9EA6, 0, 0, 0, 0x9EA0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x9058, 0x9EAA, /* 0xE0 */
+ 0, 0, 0x90B1, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x9EA8, 0x8ABB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x986F, 0x9E96, 0, 0, 0x9EA4, 0x88D6, 0, 0, /* 0x00 */
+ 0x9E98, 0, 0, 0x96B8, 0x9E9D, 0x9041, 0x92C5, 0x9E93, /* 0x00 */
+ 0, 0, 0x9EA3, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x909A, 0x9EAD, 0x8A91, 0x8C9F, 0, 0, 0, /* 0x10 */
+ 0, 0x9EAF, 0x9E9A, 0x9EAE, 0, 0x9EA7, 0x9E9B, 0, /* 0x20 */
+ 0x9EAB, 0, 0x9EAC, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x9EBD, 0, 0, 0, 0x93CC, 0, 0x9EA2, 0, /* 0x30 */
+ 0, 0x9EB9, 0, 0, 0, 0x9EBB, 0, 0x92D6, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x976B, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x9596, 0x9EB6, 0x91C8, 0, 0, /* 0x50 */
+ 0, 0x9EBC, 0x915E, 0, 0x9EB3, 0x9EC0, 0x9EBF, 0, /* 0x50 */
+ 0x93ED, 0x9EBE, 0x93E8, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xFAE9, 0, 0x9EC2, 0x9EB5, 0, 0x8BC6, 0x9EB8, 0x8F7C, /* 0x60 */
+ 0, 0, 0, 0x9480, 0x9EBA, 0x8BC9, 0, 0x9EB2, /* 0x70 */
+ 0x9EB4, 0x9EB1, 0, 0, 0x984F, 0x8A79, 0x9EB7, 0, /* 0x70 */
+ 0, 0x9EC1, 0x8A54, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x8DE5, 0, 0, 0, 0x897C, 0, /* 0x80 */
+ 0, 0x9ED2, 0, 0, 0x9850, 0x9ED5, 0, 0, /* 0x90 */
+ 0xFAEB, 0, 0, 0x9059, 0x9ED4, 0, 0, 0, /* 0x90 */
+ 0x9ED3, 0, 0, 0, 0, 0, 0, 0x9ED0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x9EC4, 0, /* 0xA0 */
+ 0, 0x9EE1, 0x9EC3, 0, 0x9ED6, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x9ECE, 0, 0, 0x9EC9, 0x9EC6, /* 0xB0 */
+ 0, 0x9EC7, 0, 0x9ECF, 0, 0, 0, 0xEAA0, /* 0xC0 */
+ 0, 0, 0x9ECC, 0x8D5C, 0x92C6, 0x9184, 0x9ECA, 0, /* 0xC0 */
+ 0x9EC5, 0, 0, 0x9EC8, 0, 0, 0, 0, /* 0xD0 */
+ 0x976C, 0x968A, 0, 0, 0, 0x9ECD, 0x9ED7, 0, /* 0xD0 */
+ 0, 0, 0xFAEC, 0, 0, 0, 0, 0x9EDF, /* 0xE0 */
+ 0x9ED8, 0, 0, 0x9EE5, 0, 0x9EE3, 0, 0, /* 0xE0 */
+ 0, 0, 0x9EDE, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x9EDD, 0, 0x92CE, 0, 0x9185, 0, 0x9EDB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9ED9, 0, 0, 0x9EE0, 0, 0, /* 0x00 */
+ 0, 0, 0x9EE6, 0x94F3, 0x9EEC, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x9EE7, 0x9EEA, 0x9EE4, 0, 0, 0x9294, /* 0x10 */
+ 0, 0x9557, 0, 0x9EDA, 0, 0, 0x9EE2, 0x8FBE, /* 0x10 */
+ 0, 0x96CD, 0x9EF6, 0x9EE9, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x8CA0, 0x89A1, 0x8A7E, 0, 0, 0x9ED1, 0, /* 0x20 */
+ 0xFAED, 0, 0, 0, 0, 0x8FBF, 0x9EEE, 0, /* 0x30 */
+ 0x9EF5, 0x8EF7, 0x8A92, 0, 0, 0x924D, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x9EEB, 0, 0xFAEF, 0x9EF0, /* 0x40 */
+ 0x9EF4, 0, 0, 0x8BB4, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x8B6B, 0x9EF2, 0, 0, 0, 0, 0, 0x8B40, /* 0x50 */
+ 0, 0x93C9, 0x9EF1, 0, 0, 0, 0x9EF3, 0, /* 0x60 */
+ 0, 0, 0, 0xFAEE, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x9EED, 0xFAF0, 0, 0, 0, 0, /* 0x70 */
+ 0x9EEF, 0, 0, 0, 0, 0, 0xFAF1, 0x8A80, /* 0x70 */
+ 0x9268, 0, 0, 0, 0x9EFA, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x9EF8, 0x8CE7, 0, /* 0x80 */
+ 0x9EF7, 0, 0, 0, 0, 0, 0, 0x9F40, /* 0x90 */
+ 0, 0, 0, 0, 0x9E77, 0, 0, 0, /* 0x90 */
+ 0x9EF9, 0, 0x9EFB, 0x9EFC, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x9F4B, 0, 0x9F47, 0, 0x9E8D, 0, /* 0xA0 */
+ 0, 0, 0, 0x9F46, 0, 0, 0, 0, /* 0xB0 */
+ 0x9F45, 0, 0, 0x9F42, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x9EE8, 0x9F44, 0x9F43, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x9F49, 0, 0x9845, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x9F4C, 0x8BF9, 0, 0, 0x9F48, 0x9F4A, /* 0xD0 */
+ 0, 0, 0xFAF2, 0, 0xFAF3, 0, 0, 0, /* 0xE0 */
+ 0x94A5, 0, 0x9F4D, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x9F51, 0x9F4E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9793, 0x9F4F, 0, 0, /* 0x00 */
+ 0, 0, 0x9EDC, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x9F52, 0, 0, 0, 0x9F53, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x8954, 0, 0x9F55, /* 0x10 */
+ 0x8C87, 0x8E9F, 0, 0x8BD3, 0, 0, 0, 0x89A2, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x977E, 0, 0, 0, 0, 0x9F57, /* 0x30 */
+ 0x9F56, 0x9F59, 0x8B5C, 0, 0, 0x8BD4, 0x8ABC, 0, /* 0x30 */
+ 0, 0, 0, 0x9F5C, 0, 0, 0, 0x9F5B, /* 0x40 */
+ 0, 0x9F5D, 0, 0, 0x89CC, 0, 0x9256, 0, /* 0x40 */
+ 0x9F5E, 0, 0, 0x8ABD, 0x9F60, 0, 0, 0, /* 0x50 */
+ 0, 0x9F5F, 0, 0x9F61, 0, 0, 0, 0x9F62, /* 0x50 */
+ 0, 0x9F63, 0x8E7E, 0x90B3, 0x8D9F, 0, 0x9590, 0, /* 0x60 */
+ 0, 0x95E0, 0x9863, 0, 0, 0, 0, 0x8E95, /* 0x60 */
+ 0, 0, 0, 0x8DCE, 0x97F0, 0, 0, 0, /* 0x70 */
+ 0x9F64, 0x9F65, 0, 0x8E80, 0, 0, 0, 0x9F66, /* 0x70 */
+ 0x9F67, 0, 0, 0x9F69, 0x9F68, 0, 0x9677, 0, /* 0x80 */
+ 0, 0x8F7D, 0x8EEA, 0x8E63, 0, 0x9F6A, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x9F6C, 0x9042, 0, /* 0x90 */
+ 0x9F6B, 0, 0, 0, 0, 0, 0x9F6D, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x9F6E, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x9F6F, 0x9F70, 0, 0, 0, 0x9F71, /* 0xA0 */
+ 0, 0x9F73, 0x9F72, 0x9F74, 0x89A3, 0x9269, 0, 0x9F75, /* 0xB0 */
+ 0, 0, 0x8E45, 0x8A6B, 0x9F76, 0, 0, 0x9361, /* 0xB0 */
+ 0x9ACA, 0, 0, 0, 0, 0x8B42, 0x9F77, 0, /* 0xC0 */
+ 0, 0, 0, 0x9F78, 0, 0x95EA, 0x9688, 0, /* 0xC0 */
+ 0, 0, 0x93C5, 0x9F79, 0x94E4, 0, 0xFAF4, 0, /* 0xD0 */
+ 0x94F9, 0, 0, 0x96D1, 0, 0, 0, 0x9F7A, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x9F7C, 0x9F7B, 0, 0, 0x9F7E, /* 0xE0 */
+ 0, 0, 0, 0x9F7D /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x9F81, 0, 0, 0, 0, 0, 0, 0x8E81, /* 0x00 */
+ 0, 0x96AF, 0, 0x9F82, 0x9F83, 0, 0, 0x8B43, /* 0x10 */
+ 0, 0, 0, 0x9F84, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x9F86, 0x9F85, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x9085, 0, 0, 0x9558, /* 0x30 */
+ 0x8969, 0, 0, 0, 0, 0, 0x94C3, 0xFAF5, /* 0x30 */
+ 0x92F3, 0x8F60, 0x8B81, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x94C4, 0, /* 0x40 */
+ 0x8EAC, 0, 0, 0, 0, 0x9F88, 0, 0x8ABE, /* 0x50 */
+ 0, 0, 0x8998, 0, 0xFAF6, 0x93F0, 0x9F87, 0x8D5D, /* 0x50 */
+ 0x9272, 0, 0x9F89, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x9F91, 0, 0x9F8A, 0, 0, 0, 0, 0xFAF8, /* 0x60 */
+ 0x91BF, 0, 0x8B82, 0x9F92, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x8C88, 0, 0, 0x8B44, 0x9F90, 0, /* 0x70 */
+ 0, 0x9F8E, 0x9F8B, 0x9780, 0, 0, 0xFAF7, 0, /* 0x80 */
+ 0x92BE, 0, 0, 0, 0x93D7, 0x9F8C, 0, 0, /* 0x80 */
+ 0x9F94, 0, 0x9F93, 0x8C42, 0, 0, 0x89AB, 0, /* 0x90 */
+ 0, 0x8DB9, 0x9F8D, 0x9F8F, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9676, 0x91F2, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x9697, 0, 0, 0x9F9C, 0, /* 0xA0 */
+ 0, 0x9F9D, 0, 0x89CD, 0, 0, 0, 0, /* 0xB0 */
+ 0x95A6, 0x96FB, 0x9F9F, 0x8EA1, 0x8FC0, 0x9F98, 0x9F9E, 0x8988, /* 0xB0 */
+ 0, 0x8BB5, 0, 0, 0x9F95, 0x9F9A, 0, 0, /* 0xC0 */
+ 0, 0x90F2, 0x9491, 0, 0x94E5, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x9F97, 0, 0x9640, 0, 0x9F99, /* 0xD0 */
+ 0, 0x9FA2, 0xFAF9, 0x9FA0, 0, 0x9F9B, 0, 0, /* 0xD0 */
+ 0, 0x9641, 0x9467, 0x8B83, 0, 0x9344, 0, 0, /* 0xE0 */
+ 0x928D, 0, 0x9FA3, 0, 0, 0, 0, 0x9FA1, /* 0xE0 */
+ 0x91D7, 0x9F96, 0, 0x896A /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFAFA, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x976D, 0x9FAE, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x9FAD, 0, 0, 0, 0, 0x90F4, /* 0x10 */
+ 0, 0x9FAA, 0, 0x978C, 0, 0, 0x93B4, 0x9FA4, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x92C3, 0, 0, /* 0x20 */
+ 0, 0x896B, 0x8D5E, 0x9FA7, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x8F46, 0x9FAC, 0, 0x9FAB, 0x9FA6, 0, /* 0x30 */
+ 0x9FA9, 0, 0, 0x8A88, 0, 0x9FA8, 0x9468, 0, /* 0x30 */
+ 0, 0x97AC, 0, 0, 0x8FF2, 0x90F3, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x9FB4, 0x9FB2, 0, 0x956C, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x9FAF, 0x9FB1, 0, 0x8959, 0, /* 0x60 */
+ 0, 0x8D5F, 0x9851, 0, 0x8A5C, 0, 0x9582, 0xFAFC, /* 0x60 */
+ 0, 0, 0, 0, 0x9781, 0, 0, 0x8A43, /* 0x70 */
+ 0x905A, 0x9FB3, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x9FB8, 0, 0xFAFB, /* 0x80 */
+ 0x8FC1, 0, 0, 0, 0x974F, 0, 0x9FB5, 0, /* 0x80 */
+ 0, 0, 0, 0x9FB0, 0, 0x9FB6, 0xFB40, 0, /* 0x90 */
+ 0, 0x97DC, 0, 0x9393, 0x93C0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xFB41, 0, 0, 0x8A55, /* 0xA0 */
+ 0, 0, 0x8974, 0, 0, 0x9FBC, 0, 0, /* 0xB0 */
+ 0x9FBF, 0, 0, 0, 0x97C1, 0, 0, 0, /* 0xB0 */
+ 0x9784, 0, 0, 0, 0, 0x9FC6, 0x9FC0, 0x9FBD, /* 0xC0 */
+ 0, 0, 0, 0x97D2, 0x9FC3, 0, 0, 0xFB42, /* 0xC0 */
+ 0, 0x8F69, 0x9FC5, 0, 0, 0x9FCA, 0, 0, /* 0xD0 */
+ 0x9391, 0x9FC8, 0, 0, 0, 0, 0x9FC2, 0, /* 0xD0 */
+ 0, 0x9257, 0, 0, 0x9FC9, 0, 0x9FBE, 0, /* 0xE0 */
+ 0x9FC4, 0, 0x9FCB, 0x88FA, 0x9FC1, 0, 0x9FCC, 0, /* 0xE0 */
+ 0, 0x905B, 0xFB44, 0x8F7E, 0, 0x95A3, 0, 0x8DAC, /* 0xF0 */
+ 0xFB43, 0x9FB9, 0x9FC7, 0x9359, 0xFB45 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x90B4, 0, 0x8A89, /* 0x00 */
+ 0x8DCF, 0x8FC2, 0x9FBB, 0x8F61, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x8C6B, 0, 0x9FBA, 0, 0, /* 0x10 */
+ 0, 0x9FD0, 0x8F8D, 0x8CB8, 0, 0x9FDF, 0, 0x9FD9, /* 0x10 */
+ 0x8B94, 0x936E, 0, 0x9FD4, 0x9FDD, 0x88AD, 0x8951, 0xFB48, /* 0x20 */
+ 0, 0x89B7, 0, 0x9FD6, 0x91AA, 0x9FCD, 0x9FCF, 0x8D60, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x9FE0, 0xFB46, 0x9FDB, 0, 0xFB49, 0, 0x9FD3, 0, /* 0x30 */
+ 0, 0, 0, 0x9FDA, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x96A9, 0, 0, 0x9FD8, 0x9FDC, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x8CCE, 0, /* 0x50 */
+ 0x8FC3, 0, 0, 0x9258, 0xFB47, 0, 0, 0x9FD2, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x974E, /* 0x60 */
+ 0, 0, 0, 0x9FD5, 0, 0, 0x9FCE, 0x9392, /* 0x60 */
+ 0, 0, 0x9FD1, 0, 0, 0, 0x9FD7, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x9870, 0x8EBC, /* 0x70 */
+ 0x969E, 0, 0x9FE1, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x94AC, 0, 0, 0x9FED, /* 0x80 */
+ 0x8CB9, 0, 0, 0, 0, 0, 0x8F80, 0, /* 0x90 */
+ 0x9FE3, 0, 0, 0, 0x97AD, 0x8D61, 0, 0x9FF0, /* 0x90 */
+ 0, 0, 0x88EC, 0, 0, 0x9FEE, 0, 0, /* 0xA0 */
+ 0, 0, 0x9FE2, 0, 0, 0, 0, 0x9FE8, /* 0xA0 */
+ 0, 0, 0x9FEA, 0, 0, 0, 0x976E, 0x9FE5, /* 0xB0 */
+ 0, 0, 0x934D, 0, 0, 0x9FE7, 0, 0xFB4A, /* 0xB0 */
+ 0, 0, 0x9FEF, 0, 0x9FE9, 0x96C5, 0, 0, /* 0xC0 */
+ 0, 0x9FE4, 0, 0x8EA0, 0x9FFC, 0, 0, 0, /* 0xC0 */
+ 0, 0x8A8A, 0, 0x9FE6, 0x9FEB, 0x9FEC, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x91EA, 0x91D8, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x9FF4, 0, 0, 0x9FFA, /* 0xE0 */
+ 0, 0, 0x9FF8, 0, 0x9348, 0, 0, 0xE042, /* 0xF0 */
+ 0x9FF5, 0, 0, 0, 0, 0, 0x9FF6, 0x9FDE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B99, 0x9559, 0, 0, 0, 0x8EBD, 0, /* 0x00 */
+ 0, 0x8D97, 0, 0, 0, 0, 0, 0x9852, /* 0x00 */
+ 0, 0x9FF2, 0, 0xE041, 0x8989, 0x9186, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x9499, 0, 0x8ABF, 0x97F8, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x969F, 0x92D0, 0, 0, 0, /* 0x20 */
+ 0, 0x9FF9, 0x9FFB, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x9151, 0, 0, 0, 0, 0, 0xE040, 0x9FF7, /* 0x30 */
+ 0, 0x9FF1, 0, 0, 0, 0x8AC1, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x8C89, 0, 0, 0, /* 0x50 */
+ 0xE04E, 0, 0, 0xE049, 0x90F6, 0, 0, 0x8A83, /* 0x50 */
+ 0, 0, 0, 0, 0x8F81, 0, 0xE052, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE04B, 0x92AA, 0xE048, /* 0x60 */
+ 0x92D7, 0, 0, 0, 0xE06B, 0, 0, 0, /* 0x70 */
+ 0xE045, 0, 0xE044, 0, 0xE04D, 0, 0, 0, /* 0x70 */
+ 0xE047, 0xE046, 0xE04C, 0, 0x909F, 0, 0xE043, 0, /* 0x80 */
+ 0xFB4B, 0, 0, 0, 0, 0, 0xE04F, 0, /* 0x80 */
+ 0, 0xE050, 0, 0, 0, 0, 0, 0x8AC0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE055, 0, 0xE054, 0xE056, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE059, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x9362, 0, 0xE053, 0, 0xFB4C, 0, 0, /* 0xB0 */
+ 0, 0xE057, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x8C83, 0x91F7, 0xE051, 0x945A, 0, 0, 0xE058, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE05D, 0xE05B, 0, 0, /* 0xD0 */
+ 0xE05E, 0, 0, 0xE061, 0, 0, 0, 0xE05A, /* 0xD0 */
+ 0x8D8A, 0x9447, 0, 0, 0x9FB7, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x9794, 0xE05C, 0, 0xE060, 0x91F3, /* 0xE0 */
+ 0, 0xE05F, 0, 0xE04A, 0, 0xFB4D, 0xE889, 0, /* 0xF0 */
+ 0, 0, 0xE064, 0, 0, 0, 0xE068 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE066, 0, 0, 0, 0xFB4E, 0, 0xFB4F, /* 0x00 */
+ 0, 0xE062, 0, 0xE063, 0, 0, 0, 0xE067, /* 0x00 */
+ 0, 0xE065, 0, 0, 0, 0x956D, 0, 0, /* 0x10 */
+ 0xE06D, 0, 0xE06A, 0xE069, 0, 0xE06C, 0x93D2, 0xE06E, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x9295, 0x91EB, /* 0x20 */
+ 0xFB50, 0, 0, 0, 0x90A3, 0, 0, 0, /* 0x20 */
+ 0xE06F, 0, 0xE071, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE070, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x9FF3, 0, 0, 0, /* 0x40 */
+ 0, 0xE072, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x93E5, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE073, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x89CE, 0, 0, 0, 0x9394, /* 0x60 */
+ 0x8A44, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x8B84, 0, 0, 0, 0x8EDC, 0x8DD0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xFB51, 0, 0, /* 0x80 */
+ 0, 0x9846, 0x9086, 0, 0, 0, 0x898A, 0, /* 0x80 */
+ 0, 0, 0xE075, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE074, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xFB52, 0xE078, 0x9259, 0xE07B, 0xE076, /* 0xA0 */
+ 0, 0, 0, 0xE07A, 0, 0, 0, 0, /* 0xB0 */
+ 0xE079, 0x935F, 0x88D7, 0xFA62, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x97F3, 0, 0, 0xE07D, 0, 0, 0, 0x8947, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE080, 0, 0, 0, 0xE07E, 0, 0xE07C, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE077, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x9642, 0, 0, 0, 0xE082 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFB54, 0, 0, 0, /* 0x00 */
+ 0, 0xE081, 0, 0, 0, 0, 0, 0xFB53, /* 0x00 */
+ 0, 0, 0, 0, 0x898B, 0, 0, 0, /* 0x10 */
+ 0, 0xE084, 0x95B0, 0, 0xE083, 0, 0, 0, /* 0x10 */
+ 0, 0x96B3, 0, 0, 0, 0, 0x8FC5, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x9152, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x8FC4, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xFB56, 0xFB57, /* 0x40 */
+ 0, 0x97F9, 0, 0, 0xE08A, 0, 0x90F7, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE086, 0xE08B, 0, /* 0x50 */
+ 0, 0x898C, 0, 0, 0xFB55, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE089, 0, 0x9481, 0xE085, 0xE088, 0x8FC6, /* 0x60 */
+ 0, 0x94CF, 0, 0, 0xE08C, 0, 0x8ECF, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x90F8, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xE08F, 0, 0, 0, /* 0x80 */
+ 0xE087, 0, 0x8C46, 0, 0, 0, 0, 0xE08D, /* 0x80 */
+ 0, 0, 0, 0, 0x976F, 0xE090, 0, 0, /* 0x90 */
+ 0, 0xEAA4, 0, 0, 0, 0, 0, 0x8F6E, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE091, 0, 0, 0, 0xE092, 0, 0, 0, /* 0xA0 */
+ 0, 0x944D, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE094, 0, 0, 0, 0, 0xE095, 0, /* 0xB0 */
+ 0, 0xFB59, 0, 0x9452, 0, 0, 0, 0, /* 0xC0 */
+ 0x9395, 0xE097, 0, 0, 0, 0, 0xE099, 0, /* 0xC0 */
+ 0x97D3, 0, 0xE096, 0, 0xE098, 0x898D, 0, 0xE093, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9A7A, /* 0xD0 */
+ 0xE09A, 0, 0, 0, 0, 0x9187, 0x8E57, 0xE09C, /* 0xE0 */
+ 0, 0, 0, 0, 0xE09B, 0x9043, 0x99D7, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE09D, 0, 0, /* 0xF0 */
+ 0, 0xE09F, 0, 0xE08E, 0xE09E, 0, 0xFB5A, 0xE0A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x949A, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE0A1, 0, 0, /* 0x00 */
+ 0xE0A2, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE0A3, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE0A4, 0, 0x92DC, 0, 0xE0A6, 0xE0A5, 0, 0, /* 0x20 */
+ 0xE0A7, 0, 0xE0A8, 0, 0, 0x8EDD, 0x9583, 0, /* 0x30 */
+ 0, 0, 0x96EA, 0xE0A9, 0xE0AA, 0x9175, 0x8EA2, 0xE0AB, /* 0x30 */
+ 0xE0AC, 0, 0, 0, 0, 0, 0xE0AD, 0x95D0, /* 0x40 */
+ 0x94C5, 0, 0, 0xE0AE, 0x9476, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x92AB, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE0AF, 0x89E5, 0, 0x8B8D, 0, 0x96C4, 0, 0x96B4, /* 0x50 */
+ 0, 0x89B2, 0x9853, 0, 0, 0, 0, 0x9671, /* 0x60 */
+ 0, 0x95A8, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x90B5, 0, 0xE0B0, 0, 0, 0, /* 0x70 */
+ 0, 0x93C1, 0, 0, 0, 0x8CA1, 0xE0B1, 0, /* 0x70 */
+ 0x8DD2, 0xE0B3, 0xE0B2, 0, 0, 0, 0, 0xE0B4, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE0B5, 0, 0, 0, 0xE0B6, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x8B5D, 0, 0xE0B7, 0, 0, 0, 0, 0xE0B8, /* 0xA0 */
+ 0, 0, 0, 0, 0x8CA2, 0, 0, 0x94C6, /* 0xA0 */
+ 0, 0xFB5B, 0xE0BA, 0, 0, 0, 0x8FF3, 0, /* 0xB0 */
+ 0, 0xE0B9, 0, 0, 0, 0, 0xFB5C, 0, /* 0xB0 */
+ 0, 0, 0x8BB6, 0xE0BB, 0xE0BD, 0, 0xE0BC, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE0BE, 0, /* 0xC0 */
+ 0x8CCF, 0, 0xE0BF, 0, 0, 0, 0, 0x8BE7, /* 0xD0 */
+ 0, 0x915F, 0, 0x8D9D, 0, 0, 0, 0, /* 0xD0 */
+ 0xE0C1, 0xE0C2, 0xE0C0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x8EEB, 0, 0, 0x93C6, 0x8BB7, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE0C4, /* 0xF0 */
+ 0x924B, 0xE0C3, 0, 0, 0x9854, 0x9482 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xE0C7, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE0C9, 0xE0C6, /* 0x10 */
+ 0, 0, 0, 0x96D2, 0xE0C8, 0xE0CA, 0, 0x97C2, /* 0x10 */
+ 0, 0, 0, 0, 0xFB5D, 0xE0CE, 0, 0, /* 0x20 */
+ 0, 0xE0CD, 0x9296, 0x944C, 0, 0, 0x8CA3, 0xE0CC, /* 0x20 */
+ 0, 0, 0, 0, 0xE0CB, 0, 0x9750, 0x9751, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE0CF, 0x898E, /* 0x30 */
+ 0, 0, 0, 0, 0x8D96, 0x8E82, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xE0D0, 0xE0D1, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE0D3, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x8F62, 0, 0, 0, 0, /* 0x60 */
+ 0xE0D5, 0, 0xE0D4, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xE0D6, 0, 0x8A6C, 0, 0, 0xE0D8, 0, 0xFB5F, /* 0x70 */
+ 0xE0D7, 0, 0xE0DA, 0xE0D9, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x8CBA, 0, 0, 0x97A6, /* 0x80 */
+ 0, 0x8BCA, 0, 0x89A4, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x8BE8, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x8ADF, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x97E6, 0xE0DC, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE0DE, 0, 0xFB60, 0, 0, /* 0xB0 */
+ 0xE0DF, 0, 0x89CF, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xE0DB, 0xFB61, 0x8E58, 0, 0, 0x92BF, 0xE0DD, 0, /* 0xC0 */
+ 0, 0, 0xFB64, 0, 0, 0, 0xFB62, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE0E2, 0, /* 0xD0 */
+ 0x8EEC, 0, 0, 0xFB63, 0, 0xE0E0, 0, 0, /* 0xE0 */
+ 0, 0, 0x8C5D, 0, 0, 0x94C7, 0xE0E1, 0, /* 0xE0 */
+ 0, 0xE0FC, 0, 0, 0, 0xFB66, 0, 0, /* 0xF0 */
+ 0xE0E7, 0, 0, 0, 0, 0, 0x8CBB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B85, 0, 0xE0E4, 0x979D, 0xFB65, /* 0x00 */
+ 0, 0x97AE, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x91F4, 0, 0, 0xE0E6, 0xFB67, 0, /* 0x20 */
+ 0, 0xFB69, 0xFB68, 0, 0, 0, 0xFB6A, 0, /* 0x20 */
+ 0, 0, 0xE0E8, 0x97D4, 0x8BD5, 0x94FA, 0x9469, 0, /* 0x30 */
+ 0, 0, 0xE0E9, 0, 0, 0, 0, 0xE0EB, /* 0x30 */
+ 0, 0xE0EE, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE0EA, 0, 0, /* 0x50 */
+ 0, 0xE0ED, 0x8CE8, 0x896C, 0xE0EF, 0, 0x9090, 0xE0EC, /* 0x50 */
+ 0x97DA, 0, 0xFB6B, 0xE0F2, 0xEAA2, 0, 0, 0, /* 0x60 */
+ 0, 0xE0F0, 0xE0F3, 0, 0, 0, 0, 0xE0E5, /* 0x60 */
+ 0xE0F1, 0, 0, 0x8DBA, 0, 0, 0xE0F4, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE0F5, 0, /* 0x70 */
+ 0, 0, 0, 0x979E, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xFB6C, 0, 0xE0F6, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xE0F7, 0xFB6D, /* 0x90 */
+ 0, 0, 0xE0E3, 0, 0, 0, 0, 0xE0F8, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x8AC2, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x8EA3, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE0F9, 0, 0, 0, 0, 0xE0FA, /* 0xC0 */
+ 0, 0, 0, 0, 0xE0FB, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x895A, 0, 0, 0, /* 0xD0 */
+ 0xE140, 0, 0x955A, 0xE141, 0, 0, 0x8AA2, 0xE142, /* 0xE0 */
+ 0, 0xE143, 0, 0, 0, 0, 0xE144, 0, /* 0xE0 */
+ 0xE146, 0xE147, 0xE145, 0, 0, 0, 0x9572, 0xE149, /* 0xF0 */
+ 0xE148 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFB6E, 0, 0xE14B, 0xE14A, 0xE14C, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xE14D, 0xE14F, 0xE14E, 0, /* 0x00 */
+ 0, 0x8D99, 0, 0xE151, 0, 0xE150, 0, 0, /* 0x10 */
+ 0x8AC3, 0, 0x9072, 0, 0x935B, 0, 0xE152, 0x90B6, /* 0x10 */
+ 0, 0, 0, 0x8E59, 0, 0x8999, 0xE153, 0, /* 0x20 */
+ 0x9770, 0, 0, 0x95E1, 0xE154, 0, 0, 0xFAA8, /* 0x20 */
+ 0x9363, 0x9752, 0x8D62, 0x905C, 0, 0, 0, 0x926A, /* 0x30 */
+ 0x99B2, 0, 0x92AC, 0x89E6, 0xE155, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE156, 0, 0xE15B, 0, /* 0x40 */
+ 0, 0xE159, 0xE158, 0x9DC0, 0x8A45, 0xE157, 0, 0x88D8, /* 0x40 */
+ 0, 0x94A8, 0, 0, 0x94C8, 0, 0, 0, /* 0x50 */
+ 0, 0x97AF, 0xE15C, 0xE15A, 0x927B, 0x90A4, 0, 0, /* 0x50 */
+ 0x94A9, 0, 0x954C, 0, 0xE15E, 0x97AA, 0x8C6C, 0xE15F, /* 0x60 */
+ 0, 0xE15D, 0x94D4, 0xE160, 0, 0xE161, 0, 0xFB6F, /* 0x60 */
+ 0x88D9, 0, 0, 0x8FF4, 0xE166, 0, 0xE163, 0x93EB, /* 0x70 */
+ 0xE162, 0, 0, 0, 0, 0, 0, 0x8B45, /* 0x70 */
+ 0, 0, 0xE169, 0, 0, 0, 0xE164, 0xE165, /* 0x80 */
+ 0, 0xE168, 0xE167, 0x9544, 0, 0, 0x9161, 0x9160, /* 0x80 */
+ 0, 0x8B5E, 0, 0, 0xE16A, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE16B, 0, 0, 0xE16C, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE16E, 0, 0xE16D, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x8975, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE176, 0x94E6, 0xE170, 0, 0xE172, 0, 0, /* 0xB0 */
+ 0xE174, 0x905D, 0, 0, 0xE175, 0xE173, 0x8EBE, 0, /* 0xB0 */
+ 0, 0, 0xE16F, 0xE171, 0, 0x9561, 0, 0x8FC7, /* 0xC0 */
+ 0, 0, 0xE178, 0, 0, 0xE177, 0, 0, /* 0xC0 */
+ 0, 0, 0xE179, 0, 0x8EA4, 0x8DAD, 0, 0, /* 0xD0 */
+ 0x9397, 0xE17A, 0, 0x92C9, 0, 0, 0xE17C, 0, /* 0xD0 */
+ 0, 0, 0x979F, 0xE17B, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x9189, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE182, 0, 0xE184, 0xE185, 0x9273, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xE183, 0, 0xE180, 0, 0xE17D, 0xE17E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE181, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xE188, 0, 0xE186, 0, 0xE187, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE189, /* 0x10 */
+ 0xE18B, 0xE18C, 0xE18D, 0, 0xE18E, 0, 0, 0xE18A, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE190, 0, 0, 0, 0xE18F, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE191, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x97C3, 0, 0, 0, 0xE194, 0xE192, /* 0x40 */
+ 0xE193, 0, 0, 0, 0x8AE0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x96FC, 0, 0, 0, 0x95C8, 0, /* 0x50 */
+ 0xE196, 0, 0, 0, 0xE195, 0, 0, 0, /* 0x50 */
+ 0, 0xE197, 0xE198, 0, 0, 0, 0, 0xE19C, /* 0x60 */
+ 0xE199, 0xE19A, 0xE19B, 0, 0xE19D, 0, 0, 0, /* 0x60 */
+ 0xE19E, 0, 0xE19F, 0, 0, 0, 0xE1A0, 0, /* 0x70 */
+ 0xE1A1, 0, 0x94AD, 0x936F, 0xE1A2, 0x9492, 0x9553, 0, /* 0x70 */
+ 0xE1A3, 0, 0xFB70, 0xE1A4, 0x9349, 0, 0x8A46, 0x8D63, /* 0x80 */
+ 0xE1A5, 0, 0, 0xE1A6, 0, 0, 0xE1A7, 0, /* 0x80 */
+ 0x8E48, 0, 0, 0xE1A9, 0, 0, 0xE1A8, 0, /* 0x90 */
+ 0, 0xE1AA, 0xE1AB, 0xFB73, 0xFB71, 0, 0xFB72, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xFB74, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x94E7, 0, /* 0xA0 */
+ 0xE1AC, 0, 0, 0, 0xE1AD, 0, 0, 0xEA89, /* 0xB0 */
+ 0xE1AE, 0xE1AF, 0xE1B0, 0, 0, 0, 0, 0x8E4D, /* 0xB0 */
+ 0, 0, 0xE1B1, 0x9475, 0, 0, 0x967E, 0, /* 0xC0 */
+ 0x896D, 0, 0x8976, 0, 0, 0xE1B2, 0, 0, /* 0xC0 */
+ 0, 0, 0xE1B4, 0, 0, 0, 0xE1B3, 0x9390, /* 0xD0 */
+ 0, 0, 0, 0x90B7, 0x9F58, 0, 0xE1B5, 0x96BF, /* 0xD0 */
+ 0, 0xE1B6, 0, 0x8AC4, 0x94D5, 0xE1B7, 0, 0xE1B8, /* 0xE0 */
+ 0, 0, 0xE1B9, 0, 0, 0, 0x96DA, 0, /* 0xE0 */
+ 0, 0, 0x96D3, 0, 0x92BC, 0, 0, 0, /* 0xF0 */
+ 0x918A, 0, 0, 0xE1BB, 0, 0, 0x8F82 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8FC8, 0, 0, 0xE1BE, 0, 0, 0xE1BD, /* 0x00 */
+ 0xE1BC, 0x94FB, 0, 0x8AC5, 0x8CA7, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE1C4, 0, 0, 0xE1C1, 0x905E, /* 0x10 */
+ 0x96B0, 0, 0, 0, 0xE1C0, 0xE1C2, 0xE1C3, 0, /* 0x20 */
+ 0, 0xE1BF, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1C5, /* 0x30 */
+ 0xE1C6, 0, 0x92AD, 0, 0x8AE1, 0, 0, 0, /* 0x30 */
+ 0x9285, 0, 0, 0, 0, 0, 0xFB76, 0xE1C7, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE1C8, 0xE1CB, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x9087, 0, 0x93C2, 0, 0xE1CC, 0x9672, 0, /* 0x60 */
+ 0xE1C9, 0, 0, 0xE1CA, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xE1CF, 0, 0, 0, 0, 0xE1CE, 0xE1CD, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xE1D1, 0, 0, 0xE1D0, 0, /* 0x80 */
+ 0, 0xE1D2, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xE1D4, 0, /* 0x90 */
+ 0xE1D3, 0, 0, 0, 0, 0x95CB, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x8F75, 0x97C4, 0, 0, /* 0xA0 */
+ 0xE1D5, 0, 0, 0x93B5, 0, 0, 0xE1D6, 0, /* 0xB0 */
+ 0, 0xE1D7, 0, 0xE1DB, 0xE1D9, 0xE1DA, 0, 0xE1D8, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1DC, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xE1DD, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1DE, /* 0xD0 */
+ 0, 0, 0xE1DF, 0x96B5, 0xE1E0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x96EE, 0xE1E1, 0, 0x926D, 0, 0x948A, /* 0xE0 */
+ 0, 0x8BE9, 0, 0, 0, 0x925A, 0xE1E2, 0x8BB8, /* 0xE0 */
+ 0, 0, 0, 0x90CE, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xE1E3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8DBB, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xE1E4, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE1E5, 0, 0x8CA4, 0x8DD3, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE1E7, 0xFB78, 0, 0, 0, 0x9375, 0x8DD4, 0x8B6D, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x9643, 0, 0x946A, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x9376, 0, 0, 0, 0, 0x8D7B, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE1E9, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xFB79, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x8FC9, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xFB7A, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x97B0, 0x8D64, 0, 0, 0x8CA5, /* 0x60 */
+ 0, 0, 0x94A1, 0, 0xE1EB, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xFB7B, 0, 0xE1ED, 0, 0, 0, /* 0x70 */
+ 0, 0x8CE9, 0, 0, 0, 0, 0xE1EC, 0x92F4, /* 0x80 */
+ 0, 0, 0, 0, 0xE1EF, 0x8A56, 0xE1EA, 0, /* 0x80 */
+ 0, 0x94E8, 0, 0x894F, 0, 0x8DEA, 0, 0x9871, /* 0x90 */
+ 0, 0, 0xE1EE, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE1F0, 0, 0, 0, 0x95C9, /* 0xA0 */
+ 0, 0x90D7, 0xE1F2, 0, 0, 0, 0, 0xE1F3, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xE1F1, 0, 0, /* 0xB0 */
+ 0, 0, 0x8A6D, 0, 0xE1F9, 0, 0xE1F8, 0, /* 0xB0 */
+ 0, 0x8EA5, 0, 0, 0, 0xE1FA, 0xE1F5, 0, /* 0xC0 */
+ 0, 0, 0xE1FB, 0xE1F6, 0, 0, 0, 0, /* 0xC0 */
+ 0x94D6, 0xE1F4, 0, 0, 0xE1F7, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE241, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE240, /* 0xE0 */
+ 0x9681, 0, 0, 0, 0xE1FC, 0, 0, 0x88E9, /* 0xE0 */
+ 0, 0, 0, 0, 0xE243, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xE242 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8FCA, 0, 0, 0, 0, 0, 0xE244, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x9162, 0, /* 0x00 */
+ 0, 0xE246, 0xE245, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE247, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE1E6, 0, /* 0x20 */
+ 0, 0, 0xE1E8, 0xE249, 0xE248, 0, 0, 0, /* 0x20 */
+ 0xFB7C, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x8EA6, 0, 0x97E7, 0, 0x8ED0, 0, /* 0x30 */
+ 0xE24A, 0x8C56, 0, 0, 0, 0, 0, 0x8B5F, /* 0x40 */
+ 0x8B46, 0x8E83, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x9753, 0, 0, 0xE250, 0, 0xE24F, 0x9163, 0xE24C, /* 0x50 */
+ 0, 0, 0xE24E, 0, 0, 0x8F6A, 0x905F, 0xE24D, /* 0x50 */
+ 0xE24B, 0, 0x9449, 0, 0, 0x8FCB, 0, 0, /* 0x60 */
+ 0x955B, 0, 0, 0, 0, 0x8DD5, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9398, /* 0x70 */
+ 0, 0, 0xE251, 0, 0, 0, 0, 0xE252, /* 0x70 */
+ 0xE268, 0x8BD6, 0, 0, 0x985C, 0x9154, 0, 0, /* 0x80 */
+ 0, 0, 0xE253, 0, 0, 0x89D0, 0x92F5, 0x959F, /* 0x80 */
+ 0, 0, 0, 0, 0xFB81, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xFB83, 0, 0xE254, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x8B9A, 0xE255, /* 0xA0 */
+ 0, 0, 0xE257, 0, 0, 0, 0xE258, 0, /* 0xA0 */
+ 0x9448, 0, 0, 0xE259, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE25A, 0xE25B, 0, 0, 0x8BD7, 0x89D1, 0x93C3, /* 0xB0 */
+ 0x8F47, 0x8E84, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE25C, 0, 0x8F48, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x89C8, 0x9562, 0, 0, 0xE25D, 0, 0, /* 0xD0 */
+ 0x94E9, 0, 0, 0, 0, 0, 0, 0x9164, /* 0xD0 */
+ 0, 0xE260, 0, 0xE261, 0x9489, 0, 0x9060, 0xE25E, /* 0xE0 */
+ 0, 0x9281, 0, 0, 0xE25F, 0, 0, 0, /* 0xE0 */
+ 0x8FCC, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0x88DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B48, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xE262, 0, 0, 0x92F6, 0, 0xE263, 0x90C5, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x96AB, 0, 0, 0x9542, /* 0x10 */
+ 0xE264, 0xE265, 0x9274, 0, 0x97C5, 0, 0, 0xE267, /* 0x10 */
+ 0xE266, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x8EED, 0, /* 0x20 */
+ 0, 0xE269, 0x88EE, 0, 0, 0, 0, 0xE26C, /* 0x30 */
+ 0, 0, 0, 0xE26A, 0x89D2, 0x8C6D, 0xE26B, 0x8D65, /* 0x30 */
+ 0x8D92, 0, 0x95E4, 0xE26D, 0, 0, 0x9673, 0, /* 0x40 */
+ 0, 0xE26F, 0, 0, 0, 0x90CF, 0x896E, 0x89B8, /* 0x40 */
+ 0x88AA, 0, 0, 0, 0, 0, 0, 0xE26E, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xE270, 0xE271, 0x8FF5, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE272, 0, 0x8A6E, 0, 0, 0, 0, /* 0x60 */
+ 0xE274, 0, 0, 0, 0x8C8A, 0, 0x8B86, 0, /* 0x70 */
+ 0, 0xE275, 0x8BF3, 0, 0, 0xE276, 0, 0x90FA, /* 0x70 */
+ 0, 0x93CB, 0, 0x90DE, 0x8DF3, 0, 0, 0, /* 0x80 */
+ 0xE277, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x9282, 0x918B, 0, 0xE279, 0xE27B, 0xE278, /* 0x90 */
+ 0xE27A, 0, 0, 0, 0, 0, 0, 0x8C41, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE27C, 0x8C45, 0, 0, 0, 0x8B87, 0x9771, /* 0xA0 */
+ 0xE27E, 0, 0, 0, 0, 0, 0xE280, 0, /* 0xB0 */
+ 0, 0, 0x894D, 0, 0, 0, 0, 0xE283, /* 0xB0 */
+ 0, 0, 0, 0x8A96, 0xE282, 0xE281, 0, 0xE285, /* 0xC0 */
+ 0xE27D, 0, 0xE286, 0x97A7, 0, 0xE287, 0, 0xE288, /* 0xC0 */
+ 0, 0xFB84, 0x9AF2, 0xE28A, 0, 0xE289, 0, 0, /* 0xD0 */
+ 0, 0xE28B, 0xE28C, 0, 0x97B3, 0xE28D, 0, 0xE8ED, /* 0xD0 */
+ 0x8FCD, 0xE28E, 0xE28F, 0x8F76, 0, 0x93B6, 0xE290, 0xFB85, /* 0xE0 */
+ 0, 0, 0x9247, 0xFB87, 0, 0xE291, 0, 0x925B, /* 0xE0 */
+ 0xE292, 0, 0, 0, 0, 0, 0x8BA3, 0, /* 0xF0 */
+ 0x995E, 0x927C, 0x8EB1, 0, 0, 0, 0, 0x8AC6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE293, 0, 0xE2A0, 0, 0xE296, 0, /* 0x00 */
+ 0x8B88, 0, 0xE295, 0xE2A2, 0, 0, 0, 0xE294, /* 0x00 */
+ 0, 0x8FCE, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE298, 0xE299, 0, 0x934A, 0, 0, 0xE29A, 0, /* 0x10 */
+ 0x8A7D, 0, 0, 0, 0, 0x9079, 0x9584, 0, /* 0x20 */
+ 0xE29C, 0, 0, 0, 0x91E6, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE297, 0, 0xE29B, 0xE29D, 0, /* 0x30 */
+ 0, 0x8DF9, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE2A4, 0x954D, 0, /* 0x40 */
+ 0x94A4, 0x9399, 0, 0x8BD8, 0xE2A3, 0xE2A1, 0, 0x94B3, /* 0x40 */
+ 0xE29E, 0x927D, 0x939B, 0, 0x939A, 0, 0x8DF4, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xE2B6, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xE2A6, 0, 0xE2A8, /* 0x60 */
+ 0, 0, 0, 0, 0xE2AB, 0, 0xE2AC, 0, /* 0x60 */
+ 0xE2A9, 0xE2AA, 0, 0, 0xE2A7, 0xE2A5, 0, 0, /* 0x70 */
+ 0, 0, 0xE29F, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x95CD, 0x89D3, /* 0x80 */
+ 0, 0, 0, 0xE2B3, 0, 0xE2B0, 0, 0xE2B5, /* 0x80 */
+ 0, 0, 0xE2B4, 0, 0x9493, 0x96A5, 0, 0x8E5A, /* 0x90 */
+ 0xE2AE, 0xE2B7, 0xE2B2, 0, 0xE2B1, 0xE2AD, 0xFB88, 0xE2AF, /* 0x90 */
+ 0, 0x8AC7, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x925C, 0, 0, 0x90FB, 0, 0, /* 0xA0 */
+ 0, 0x94A0, 0, 0, 0xE2BC, 0, 0, 0, /* 0xB0 */
+ 0x94A2, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x90DF, 0xE2B9, 0, 0, 0x94CD, 0, 0xE2BD, 0x95D1, /* 0xC0 */
+ 0, 0x927A, 0, 0xE2B8, 0xE2BA, 0, 0, 0xE2BB, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xE2BE, 0, 0, /* 0xD0 */
+ 0x8EC2, 0, 0, 0, 0x93C4, 0xE2C3, 0xE2C2, 0, /* 0xE0 */
+ 0, 0xE2BF, 0, 0, 0, 0x9855, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE2C8, 0, 0, 0xE2CC, 0xE2C9, /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2C5, 0, 0, 0, 0, 0, 0, 0xE2C6, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE2CB, 0, 0, /* 0x00 */
+ 0, 0xE2C0, 0x99D3, 0xE2C7, 0xE2C1, 0, 0, 0xE2CA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2D0, /* 0x10 */
+ 0, 0x8AC8, 0, 0xE2CD, 0, 0, 0, 0xE2CE, /* 0x20 */
+ 0, 0, 0xE2CF, 0xE2D2, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2D1, /* 0x30 */
+ 0x94F4, 0, 0, 0, 0, 0xE2D3, 0x97FA, 0x95EB, /* 0x30 */
+ 0xE2D8, 0, 0, 0xE2D5, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE2D4, 0x90D0, 0, 0xE2D7, /* 0x40 */
+ 0xE2D9, 0, 0, 0, 0xE2D6, 0, 0xE2DD, 0, /* 0x50 */
+ 0xE2DA, 0, 0, 0, 0, 0, 0, 0xE2DB, /* 0x50 */
+ 0xE2C4, 0, 0, 0, 0xE2DC, 0xE2DE, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE2DF, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x95C4, 0, 0xE2E0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x96E0, 0, /* 0x70 */
+ 0, 0x8BCC, 0x8C48, 0xE2E1, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x95B2, 0, 0x9088, 0, 0x96AE, 0, 0, /* 0x80 */
+ 0xE2E2, 0, 0x97B1, 0, 0, 0x9494, 0, 0x9165, /* 0x90 */
+ 0x9453, 0, 0, 0x8F6C, 0, 0, 0, 0x88BE, /* 0x90 */
+ 0, 0xE2E7, 0xE2E5, 0, 0xE2E3, 0x8A9F, 0, 0x8FCF, /* 0xA0 */
+ 0xE2E8, 0, 0, 0xE2E6, 0, 0xE2E4, 0xE2EC, 0, /* 0xA0 */
+ 0, 0xE2EB, 0xE2EA, 0xE2E9, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE2ED, 0, 0, 0, 0xE2EE, 0x90B8, 0, /* 0xB0 */
+ 0xE2EF, 0, 0xE2F1, 0, 0, 0xE2F0, 0, 0, /* 0xC0 */
+ 0, 0, 0x8CD0, 0, 0, 0, 0x9157, 0, /* 0xC0 */
+ 0, 0, 0xE2F3, 0, 0, 0, 0x939C, 0, /* 0xD0 */
+ 0xE2F2, 0, 0, 0, 0xE2F4, 0, 0x95B3, 0x918C, /* 0xD0 */
+ 0x8D66, 0, 0xE2F5, 0, 0, 0, 0, 0x97C6, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2F7, /* 0xE0 */
+ 0, 0, 0xE2F8, 0, 0xE2F9, 0, 0xE2FA, 0, /* 0xF0 */
+ 0x8E85, 0, 0xE2FB, 0x8C6E, 0, 0, 0x8B8A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B49, 0, 0xE340, 0, 0x96F1, 0x8D67, 0xE2FC, 0, /* 0x00 */
+ 0, 0, 0xE343, 0x96E4, 0, 0x945B, 0, 0, /* 0x00 */
+ 0x9552, 0, 0, 0, 0x8F83, 0xE342, 0, 0x8ED1, /* 0x10 */
+ 0x8D68, 0x8E86, 0x8B89, 0x95B4, 0xE341, 0, 0, 0, /* 0x10 */
+ 0x9166, 0x9661, 0x8DF5, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x8E87, 0x92DB, 0, 0xE346, 0x97DD, /* 0x20 */
+ 0x8DD7, 0, 0xE347, 0x9061, 0, 0xE349, 0, 0, /* 0x30 */
+ 0, 0x8FD0, 0x8DAE, 0, 0, 0, 0, 0xE348, /* 0x30 */
+ 0, 0, 0x8F49, 0x8CBC, 0x9167, 0xE344, 0xE34A, 0, /* 0x40 */
+ 0xFB8A, 0, 0, 0xE345, 0x8C6F, 0, 0xE34D, 0xE351, /* 0x40 */
+ 0x8C8B, 0, 0, 0, 0, 0, 0xE34C, 0, /* 0x50 */
+ 0, 0, 0, 0xE355, 0xFB8B, 0, 0x8D69, 0, /* 0x50 */
+ 0, 0x978D, 0x88BA, 0xE352, 0, 0, 0x8B8B, 0, /* 0x60 */
+ 0xE34F, 0, 0, 0, 0, 0, 0xE350, 0, /* 0x60 */
+ 0, 0x939D, 0xE34E, 0xE34B, 0, 0x8A47, 0x90E2, 0, /* 0x70 */
+ 0, 0x8CA6, 0, 0, 0, 0xE357, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xE354, 0, 0, 0, 0, 0, 0xE356, /* 0x80 */
+ 0, 0, 0, 0xE353, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8C70, 0x91B1, 0xE358, 0x918E, 0, 0, 0xE365, /* 0x90 */
+ 0xFB8D, 0, 0xE361, 0xE35B, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE35F, 0x8EF8, 0x88DB, 0xE35A, 0xE362, /* 0xA0 */
+ 0xE366, 0x8D6A, 0x96D4, 0, 0x92D4, 0xE35C, 0, 0xFB8C, /* 0xB0 */
+ 0xE364, 0, 0xE359, 0x925D, 0, 0xE35E, 0x88BB, 0x96C8, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE35D, /* 0xC0 */
+ 0, 0, 0x8BD9, 0x94EA, 0, 0, 0, 0x918D, /* 0xC0 */
+ 0, 0x97CE, 0x8F8F, 0, 0, 0xE38E, 0xFB8E, 0, /* 0xD0 */
+ 0xE367, 0, 0x90FC, 0, 0xE363, 0xE368, 0xE36A, 0, /* 0xD0 */
+ 0x92F7, 0xE36D, 0, 0, 0xE369, 0, 0, 0, /* 0xE0 */
+ 0x95D2, 0x8AC9, 0, 0, 0x96C9, 0, 0, 0x88DC, /* 0xE0 */
+ 0, 0, 0xE36C, 0, 0x97FB, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xE36B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x898F, 0, 0, 0x93EA, 0xE36E, 0, 0, /* 0x00 */
+ 0, 0xE375, 0xE36F, 0xE376, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE372, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x949B, 0, 0, 0x8EC8, 0xE374, /* 0x10 */
+ 0, 0xE371, 0xE377, 0xE370, 0, 0, 0x8F63, 0, /* 0x20 */
+ 0, 0, 0, 0x9644, 0, 0, 0x8F6B, 0, /* 0x20 */
+ 0, 0xE373, 0xE380, 0, 0, 0xE37B, 0, 0xE37E, /* 0x30 */
+ 0, 0xE37C, 0xE381, 0xE37A, 0, 0xE360, 0x90D1, 0, /* 0x30 */
+ 0, 0x94C9, 0, 0xE37D, 0, 0, 0xE378, 0, /* 0x40 */
+ 0, 0, 0x9140, 0x8C71, 0, 0x8F4A, 0, 0, /* 0x40 */
+ 0, 0, 0xFB8F, 0, 0x9044, 0x9155, 0xE384, 0, /* 0x50 */
+ 0, 0xE386, 0xE387, 0, 0, 0xE383, 0xE385, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xE379, 0xE382, /* 0x60 */
+ 0, 0xE38A, 0xE389, 0, 0, 0x969A, 0, 0, /* 0x60 */
+ 0x8C4A, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xE388, 0, 0xE38C, 0xE38B, 0xE38F, 0, 0xE391, /* 0x70 */
+ 0, 0, 0x8E5B, 0xE38D, 0, 0, 0, 0, /* 0x80 */
+ 0xE392, 0xE393, 0xFA5C, 0, 0xE394, 0, 0xE39A, 0x935A, /* 0x80 */
+ 0xE396, 0, 0xE395, 0xE397, 0xE398, 0, 0xE399, 0, /* 0x90 */
+ 0, 0, 0, 0xE39B, 0xE39C /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8ACA, 0, /* 0x30 */
+ 0xE39D, 0, 0xE39E, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE39F, 0, 0xFB90, /* 0x40 */
+ 0, 0, 0, 0, 0xE3A0, 0xE3A1, 0xE3A2, 0, /* 0x40 */
+ 0xE3A3, 0xE3A4, 0, 0, 0xE3A6, 0xE3A5, 0, 0, /* 0x50 */
+ 0xE3A7, 0, 0, 0, 0, 0, 0, 0xE3A8, /* 0x50 */
+ 0xE3A9, 0, 0, 0, 0, 0, 0, 0xE3AC, /* 0x60 */
+ 0xE3AA, 0xE3AB, 0x8DDF, 0x8C72, 0, 0, 0x9275, 0, /* 0x60 */
+ 0x94B1, 0, 0x8F90, 0, 0, 0x946C, 0, 0x94EB, /* 0x70 */
+ 0xE3AD, 0x9CEB, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE3AE, 0xE3B0, 0, 0x9785, 0xE3AF, 0xE3B2, /* 0x80 */
+ 0xE3B1, 0, 0x9772, 0, 0xE3B3, 0, 0x94FC, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE3B4, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE3B7, 0, 0, 0xE3B6, 0xE3B5, 0, /* 0x90 */
+ 0, 0xFB91, 0, 0xE3B8, 0x8C51, 0, 0, 0, /* 0xA0 */
+ 0x9141, 0x8B60, 0, 0, 0, 0, 0xE3BC, 0xE3B9, /* 0xA0 */
+ 0, 0, 0xE3BA, 0, 0, 0, 0xE3BD, 0, /* 0xB0 */
+ 0xE3BE, 0xE3BB, 0, 0, 0, 0x8948, 0, 0, /* 0xB0 */
+ 0, 0x89A5, 0, 0, 0, 0xE3C0, 0xE3C1, 0, /* 0xC0 */
+ 0, 0, 0xE3C2, 0, 0x9782, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x8F4B, 0, 0xE3C4, 0xE3C3, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x9089, 0xE3C5, 0, 0, 0, 0, 0xE3C6, 0, /* 0xE0 */
+ 0, 0xE3C7, 0, 0x8AE3, 0, 0, 0, 0, /* 0xE0 */
+ 0x8ACB, 0, 0, 0xE3C8, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xE3C9, 0, 0x967C, 0x9783 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9773, 0x9856, 0, 0x8D6C, 0xE3CC, 0x8ED2, 0xE3CB, 0, /* 0x00 */
+ 0, 0, 0, 0xE3CD, 0x8EA7, 0, 0, 0, /* 0x00 */
+ 0x91CF, 0, 0xE3CE, 0, 0, 0x8D6B, 0, 0x96D5, /* 0x10 */
+ 0xE3CF, 0xE3D0, 0, 0, 0xE3D1, 0, 0, 0, /* 0x10 */
+ 0, 0xE3D2, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE3D3, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x8EA8, 0, 0, 0x96EB, 0, /* 0x30 */
+ 0, 0, 0, 0xE3D5, 0, 0x925E, 0, 0xE3D4, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE3D7, 0, /* 0x40 */
+ 0, 0, 0xE3D6, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xE3D8, 0, 0, 0, 0x90B9, 0, /* 0x50 */
+ 0xE3D9, 0, 0xE3DA, 0, 0, 0, 0x95B7, 0xE3DB, /* 0x50 */
+ 0, 0x918F, 0xE3DC, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xE3DD, 0, 0, 0, 0, 0, 0, 0x97FC, /* 0x60 */
+ 0xE3E0, 0, 0xE3DF, 0xE3DE, 0x92AE, 0, 0xE3E1, 0x9045, /* 0x70 */
+ 0, 0xE3E2, 0, 0, 0, 0xE3E3, 0x9857, 0xE3E4, /* 0x70 */
+ 0, 0, 0, 0, 0xE3E5, 0xE3E7, 0xE3E6, 0x94A3, /* 0x80 */
+ 0, 0x93F7, 0, 0x985D, 0x94A7, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xE3E9, 0, 0, 0x8FD1, 0, /* 0x90 */
+ 0x9549, 0, 0xE3EA, 0xE3E8, 0, 0x8ACC, 0, 0, /* 0x90 */
+ 0, 0x8CD2, 0x8E88, 0, 0, 0x94EC, 0, 0, /* 0xA0 */
+ 0, 0x8CA8, 0x9662, 0, 0xE3ED, 0xE3EB, 0, 0x8D6D, /* 0xA0 */
+ 0, 0x8D6E, 0x88E7, 0, 0x8DE6, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x9478, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x88DD, 0xE3F2, 0, 0x925F, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x9477, 0, 0x91D9, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE3F4, 0, /* 0xD0 */
+ 0, 0xE3F0, 0xE3F3, 0xE3EE, 0, 0xE3F1, 0x9645, 0, /* 0xD0 */
+ 0, 0x8CD3, 0, 0, 0x88FB, 0xE3EF, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE3F6, /* 0xE0 */
+ 0, 0xE3F7, 0, 0, 0x93B7, 0, 0, 0, /* 0xF0 */
+ 0x8BB9, 0, 0, 0, 0xE445, 0x945C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E89, 0, 0, 0x8BBA, 0x90C6, 0x9865, /* 0x00 */
+ 0x96AC, 0xE3F5, 0x90D2, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x8B72, 0xE3F8, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE3FA, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE3F9, 0, 0, 0, 0, 0, 0xE3FB, /* 0x20 */
+ 0, 0x9245, 0, 0x945D, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x92AF, 0, 0, 0, 0, 0xE442, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE441, 0, /* 0x40 */
+ 0, 0, 0, 0xE3FC, 0, 0, 0x9074, 0, /* 0x40 */
+ 0x9585, 0xE444, 0, 0xE443, 0x8D6F, 0x9872, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE454, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xE448, 0xE449, 0, /* 0x60 */
+ 0, 0, 0, 0x8EEE, 0, 0, 0xE447, 0, /* 0x60 */
+ 0x8D98, 0xE446, 0, 0, 0xE44A, 0, 0, 0, /* 0x70 */
+ 0x92B0, 0x95A0, 0x9142, 0, 0, 0, 0, 0x91DA, /* 0x70 */
+ 0xE44E, 0, 0xE44F, 0xE44B, 0, 0, 0, 0, /* 0x80 */
+ 0xE44C, 0, 0xE44D, 0, 0, 0, 0, 0x8D70, /* 0x80 */
+ 0, 0, 0, 0xE455, 0, 0xE451, 0, 0, /* 0x90 */
+ 0, 0, 0x9586, 0, 0x968C, 0x9547, 0, 0, /* 0x90 */
+ 0xE450, 0, 0, 0xE453, 0xE452, 0, 0, 0, /* 0xA0 */
+ 0x9663, 0xE456, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE457, 0, 0, 0x9156, 0, 0xE458, 0, 0, /* 0xB0 */
+ 0xE45A, 0, 0xE45E, 0, 0, 0xE45B, 0xE459, 0x945E, /* 0xB0 */
+ 0xE45C, 0, 0xE45D, 0, 0, 0, 0x89B0, 0, /* 0xC0 */
+ 0xE464, 0xE45F, 0, 0, 0, 0xE460, 0, 0, /* 0xC0 */
+ 0, 0xE461, 0, 0x919F, 0, 0, 0, 0, /* 0xD0 */
+ 0xE463, 0xE462, 0xE465, 0, 0, 0, 0, 0xE466, /* 0xD0 */
+ 0xE467, 0, 0, 0x9062, 0, 0x89E7, 0, 0xE468, /* 0xE0 */
+ 0x97D5, 0, 0x8EA9, 0, 0, 0x8F4C, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x8E8A, 0x9276, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xE469, 0xE46A, 0x8950, 0, 0xE46B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE46C, 0xE46D, 0, 0, 0xE46E, 0, 0xE46F, /* 0x00 */
+ 0x8BBB, 0x9DA8, 0xE470, 0, 0x90E3, 0xE471, 0x8EC9, 0, /* 0x00 */
+ 0xE472, 0, 0x98AE, 0, 0, 0, 0xE473, 0x95DC, /* 0x10 */
+ 0x8ADA, 0, 0, 0x9143, 0x8F77, 0, 0x9591, 0x8F4D, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE474, 0x8D71, 0xE475, 0x94CA, 0, 0xE484, 0, /* 0x20 */
+ 0, 0, 0, 0xE477, 0, 0x91C7, 0x9495, 0x8CBD, /* 0x30 */
+ 0xE476, 0x9144, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE478, 0, 0, 0, 0, 0, 0, 0x92F8, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE47A, 0xE479, 0xE47C, 0, 0, 0xE47B, 0, 0xE47D, /* 0x50 */
+ 0, 0, 0xE480, 0, 0xE47E, 0, 0x8ACD, 0, /* 0x60 */
+ 0xE481, 0, 0xE482, 0xE483, 0, 0, 0x8DAF, 0x97C7, /* 0x60 */
+ 0, 0xE485, 0x9046, 0, 0, 0, 0x8990, 0xE486, /* 0x70 */
+ 0xE487, 0, 0, 0, 0, 0, 0xE488, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x88F0, 0, 0xE489, 0, 0, /* 0x80 */
+ 0, 0, 0xE48A, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9587, 0, 0, 0, 0x8EC5, 0, 0xE48C, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x8A48, 0x88B0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE48B, 0xE48E, 0x946D, 0, 0x9063, /* 0xA0 */
+ 0, 0x89D4, 0, 0x9646, 0, 0, 0, 0, /* 0xB0 */
+ 0x8C7C, 0x8BDA, 0, 0xE48D, 0, 0x89E8, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x8AA1, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x8991, 0xE492, 0x97E8, 0x91DB, 0, 0, 0x9563, /* 0xD0 */
+ 0, 0xE49E, 0, 0x89D5, 0xE49C, 0, 0xE49A, 0xE491, /* 0xD0 */
+ 0, 0xE48F, 0, 0xE490, 0, 0x8EE1, 0x8BEA, 0x9297, /* 0xE0 */
+ 0, 0, 0, 0x93CF, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x8970, 0, 0xE494, 0xE493, 0, 0, 0, /* 0xF0 */
+ 0, 0xE499, 0xE495, 0xE498 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFB93, 0x96CE, 0xE497, 0x89D6, 0x8A9D, 0xE49B, 0, /* 0x00 */
+ 0, 0xE49D, 0, 0, 0, 0, 0x8C73, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE4A1, 0xE4AA, /* 0x10 */
+ 0xE4AB, 0, 0, 0, 0x88A9, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE4B2, 0, 0, 0, 0, /* 0x20 */
+ 0x88EF, 0, 0, 0xE4A9, 0, 0, 0, 0xE4A8, /* 0x20 */
+ 0, 0xE4A3, 0xE4A2, 0, 0xE4A0, 0xE49F, 0x9283, 0, /* 0x30 */
+ 0x91F9, 0xE4A5, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE4A4, 0, 0, 0, 0, 0xE4A7, 0, 0, /* 0x40 */
+ 0, 0x9190, 0x8C74, 0, 0, 0, 0, 0x8960, /* 0x40 */
+ 0xE4A6, 0, 0x8D72, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x9191, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xFB94, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE4B8, 0, 0xE4B9, 0, 0x89D7, /* 0x70 */
+ 0, 0, 0, 0x89AC, 0xE4B6, 0, 0, 0xFB95, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE4AC, 0, 0xE4B4, /* 0x80 */
+ 0, 0xE4BB, 0xE4B5, 0, 0, 0, 0xE4B3, 0, /* 0x80 */
+ 0, 0, 0, 0xE496, 0, 0, 0xE4B1, 0, /* 0x90 */
+ 0, 0, 0xE4AD, 0, 0, 0, 0x8ACE, 0xE4AF, /* 0x90 */
+ 0xE4BA, 0, 0xE4B0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE4BC, 0, 0xE4AE, 0x949C, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x9789, 0, 0, 0, 0xE4B7, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xE4CD, 0, 0, /* 0xB0 */
+ 0, 0xE4C5, 0, 0, 0, 0x909B, 0, 0xFB96, /* 0xC0 */
+ 0, 0, 0x8B65, 0, 0x8BDB, 0, 0xE4C0, 0, /* 0xC0 */
+ 0, 0, 0, 0x89D9, 0, 0, 0x8FD2, 0, /* 0xD0 */
+ 0xE4C3, 0, 0, 0, 0x8DD8, 0, 0, 0x9370, /* 0xD0 */
+ 0xE4C8, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x95EC, 0, 0xE4BF, 0, 0, 0, 0x89D8, /* 0xE0 */
+ 0x8CD4, 0x9548, 0xE4C9, 0, 0xE4BD, 0, 0xFB97, 0xE4C6, /* 0xF0 */
+ 0, 0, 0, 0xE4D0, 0, 0xE4C1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4C2, 0x93B8, 0, 0, 0xE4C7, /* 0x00 */
+ 0, 0, 0, 0xE4C4, 0x9647, 0xE4CA, 0x88DE, 0, /* 0x00 */
+ 0, 0, 0, 0xE4BE, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE4CC, 0, 0xE4CB, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x948B, 0xE4D2, 0, 0xE4DD, 0, 0, 0, /* 0x20 */
+ 0, 0x8A9E, 0, 0, 0, 0xE4E0, 0, 0, /* 0x30 */
+ 0xE4CE, 0, 0, 0, 0xE4D3, 0x978E, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE4DC, 0, /* 0x40 */
+ 0xFB98, 0x9774, 0, 0, 0, 0, 0x97A8, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9298, /* 0x50 */
+ 0, 0, 0, 0x8A8B, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x9592, 0xE4E2, 0x939F, 0, 0, 0x88AF, 0, /* 0x60 */
+ 0, 0xE4DB, 0, 0xE4D7, 0x9192, 0xE4D1, 0xE4D9, 0xE4DE, /* 0x60 */
+ 0, 0x944B, 0, 0, 0, 0x88A8, 0, 0xE4D6, /* 0x70 */
+ 0, 0xE4DF, 0x9598, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE4DA, 0, 0xE4D5, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x8FD3, 0, 0, 0, 0, /* 0x80 */
+ 0x8F4E, 0, 0, 0, 0x8EAA, 0, 0, 0, /* 0x90 */
+ 0, 0x96D6, 0, 0, 0x9566, 0, 0, 0xE4E5, /* 0x90 */
+ 0, 0xE4EE, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xE4D8, 0, 0, /* 0xA0 */
+ 0, 0, 0x8A97, 0, 0xFB99, 0, 0, 0, /* 0xB0 */
+ 0x8FF6, 0xE4E3, 0, 0xE4E8, 0x9193, 0, 0, 0xE4E4, /* 0xB0 */
+ 0, 0xE4EB, 0, 0, 0x927E, 0, 0xE4EC, 0, /* 0xC0 */
+ 0, 0x9775, 0xE4E1, 0x8A57, 0, 0xE4E7, 0, 0, /* 0xC0 */
+ 0xE4EA, 0x96AA, 0, 0, 0, 0, 0xE4ED, 0, /* 0xD0 */
+ 0, 0xE4E6, 0xE4E9, 0, 0xFA60, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x9648, 0, 0x9840, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE4F1, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xE4F8, 0, 0, 0xE4F0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8EC1, 0, 0, 0, 0, 0, 0xE4CF, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x95CC, 0, 0x96A0, 0xE4F7, 0xE4F6, 0, 0xE4F2, /* 0x10 */
+ 0xE4F3, 0, 0x8955, 0, 0, 0, 0, 0xE4F5, /* 0x10 */
+ 0, 0xE4EF, 0, 0, 0, 0, 0x92D3, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE4F4, 0x88FC, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x91A0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x95C1, 0, 0, /* 0x30 */
+ 0xE4F9, 0xE540, 0, 0x94D7, 0, 0, 0, 0, /* 0x40 */
+ 0xE4FC, 0x8FD4, 0x8EC7, 0xE542, 0, 0, 0x8BBC, 0, /* 0x40 */
+ 0, 0, 0, 0xFB9A, 0, 0xE543, 0, 0x9599, /* 0x50 */
+ 0xE4FB, 0xFB9B, 0xE4D4, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE4FA, 0, 0, 0, 0, /* 0x60 */
+ 0x986E, 0x93A0, 0x9593, 0xFB9C, 0, 0xE54A, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE550, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE551, 0, /* 0x70 */
+ 0xE544, 0, 0, 0, 0x9496, 0, 0, 0xE54E, /* 0x80 */
+ 0xE546, 0, 0xE548, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE552, 0xE547, 0, 0, 0xE54B, 0, 0, 0x8992, /* 0x90 */
+ 0, 0x93E3, 0, 0xE54C, 0xE54F, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE545, 0, 0x9145, 0, /* 0xA0 */
+ 0xE549, 0x8E46, 0x9064, 0x8C4F, 0x96F2, 0, 0x96F7, 0x8F92, /* 0xA0 */
+ 0xFB9E, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE556, 0xE554, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x986D, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE553, 0, 0, 0, 0x9795, 0, 0xE555, /* 0xC0 */
+ 0xE557, 0, 0, 0, 0, 0xE558, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE55B, 0xE559, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x93A1, 0xE55A, 0, 0, /* 0xE0 */
+ 0, 0x94CB, 0xE54D, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x8F93, /* 0xF0 */
+ 0, 0xE55C, 0xE561, 0x9194, 0, 0, 0xE560 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE541, 0, 0, 0, 0xE562, 0x9168, /* 0x00 */
+ 0, 0, 0xE55D, 0xE55F, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xE55E, 0, 0, 0x9F50, 0x9F41, /* 0x10 */
+ 0, 0, 0xE564, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xE563, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x9796, 0, 0xE1BA, /* 0x20 */
+ 0xE565, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE566, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE567, 0x8CD5, 0, /* 0x40 */
+ 0x8B73, 0, 0, 0, 0xE569, 0x997C, 0, 0, /* 0x50 */
+ 0, 0, 0x8B95, 0, 0x97B8, 0, 0x8BF1, 0xE56A, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE56B, /* 0x60 */
+ 0, 0, 0, 0x928E, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE56C, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x93F8, 0, 0x88B8, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x89E1, 0xE571, 0xE572, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xE56D, 0, 0x8E5C, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE56E, 0x9461, 0, 0, 0, /* 0xA0 */
+ 0, 0xE56F, 0xE570, 0xE57A, 0, 0, 0, 0xE574, /* 0xA0 */
+ 0xE577, 0, 0, 0, 0, 0, 0xE573, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE575, 0, 0xE576, 0x8ED6, /* 0xC0 */
+ 0, 0xE578, 0, 0x9260, 0, 0x8C75, 0x8A61, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE57B, 0, 0, 0, /* 0xD0 */
+ 0, 0x8A5E, 0, 0xE581, 0, 0, 0xE57C, 0xE580, /* 0xD0 */
+ 0, 0, 0, 0, 0x94B8, 0, 0, 0, /* 0xE0 */
+ 0, 0xE57D, 0, 0, 0xE57E, 0x9567, 0x94D8, 0xE582, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x91FB, 0xE58C, 0, 0xE588, 0, 0, 0x89E9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE586, 0, 0x9649, 0xE587, 0, 0, 0xE584, 0, /* 0x00 */
+ 0xE585, 0xE58A, 0xE58D, 0, 0, 0xE58B, 0, 0, /* 0x00 */
+ 0, 0xE589, 0xE583, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x9277, 0, 0xE594, 0, 0x96A8, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE592, 0, 0, /* 0x20 */
+ 0, 0xE593, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE58E, 0, 0, 0xE590, /* 0x30 */
+ 0, 0, 0, 0xE591, 0, 0, 0, 0xE58F, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x90E4, 0, 0x9858, 0xE598, 0, 0xE599, 0, /* 0x40 */
+ 0, 0, 0, 0xE59F, 0, 0x9049, 0, 0xE59B, /* 0x50 */
+ 0, 0xE59E, 0, 0, 0, 0, 0, 0xE596, /* 0x50 */
+ 0xE595, 0, 0, 0xE5A0, 0, 0, 0x89DA, 0, /* 0x60 */
+ 0xE59C, 0, 0xE5A1, 0, 0, 0, 0xE59D, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE59A, 0, 0x92B1, 0, /* 0x70 */
+ 0xE597, 0, 0, 0, 0, 0, 0, 0x9488, /* 0x70 */
+ 0, 0, 0xE5A5, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x975A, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE5A4, /* 0x90 */
+ 0, 0, 0xE5A3, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE5AC, 0, 0, 0, 0xE5A6, /* 0xA0 */
+ 0, 0, 0, 0xE5AE, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x9786, 0xE5B1, 0, 0xE5A8, 0, 0, /* 0xB0 */
+ 0xE5A9, 0, 0, 0, 0xE5AD, 0, 0xE5B0, 0xE5AF, /* 0xC0 */
+ 0, 0, 0, 0xE5A7, 0, 0, 0, 0, /* 0xC0 */
+ 0xE5AA, 0, 0xE5BB, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xE5B4, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE5B2, /* 0xE0 */
+ 0, 0, 0xE5B3, 0, 0, 0, 0xE5B8, 0xE5B9, /* 0xF0 */
+ 0, 0x8A49, 0, 0x8B61, 0, 0, 0xE5B7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5A2, 0, 0xFBA1, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE5B6, 0xE5BA, 0xE5B5, /* 0x00 */
+ 0, 0xE5BC, 0, 0, 0, 0xE5BE, 0xE5BD, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE5C0, 0xE5BF, 0xE579, 0, 0, 0, 0xE5C4, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE5C1, 0, 0, 0, 0, 0xE5C2, 0, /* 0x30 */
+ 0, 0xE5C3, 0, 0xE5C5, 0, 0, 0, 0, /* 0x30 */
+ 0x8C8C, 0, 0xE5C7, 0, 0xE5C6, 0, 0x8F4F, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x8D73, 0x9FA5, 0, 0, /* 0x40 */
+ 0, 0, 0xE5C8, 0x8F70, 0, 0, 0, 0x8A58, /* 0x50 */
+ 0, 0xE5C9, 0, 0x8971, 0, 0x8FD5, 0xE5CA, 0, /* 0x50 */
+ 0, 0x8D74, 0xE5CB, 0x88DF, 0, 0, 0, 0, /* 0x60 */
+ 0x955C, 0, 0, 0xE5CC, 0, 0, 0, 0, /* 0x60 */
+ 0x908A, 0, 0xE5D3, 0, 0, 0xE5D0, 0, 0x928F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE5D1, 0xE5CE, 0x8BDC, /* 0x70 */
+ 0, 0xE5CD, 0xE5D4, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x8C55, 0, 0, 0x91DC, 0, 0xE5DA, 0, 0, /* 0x80 */
+ 0, 0, 0xE5D6, 0, 0, 0, 0x91B3, 0xE5D5, /* 0x90 */
+ 0, 0xE5D8, 0, 0, 0, 0, 0xE5CF, 0, /* 0x90 */
+ 0, 0, 0xE5D9, 0, 0xE5DB, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x94ED, 0, 0, 0xE5D7, 0, /* 0xA0 */
+ 0xE5DC, 0xE5DE, 0, 0, 0x8CD1, 0xE5D2, 0, 0x88BF, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE5DD, /* 0xB0 */
+ 0, 0x8DD9, 0x97F4, 0xE5DF, 0xE5E0, 0x9195, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x97A0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE5E1, 0x9754, 0, 0, /* 0xD0 */
+ 0xE5E2, 0xE5E3, 0, 0, 0x95E2, 0xE5E4, 0, 0x8DBE, /* 0xD0 */
+ 0, 0x97A1, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE5E9, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xE5EA, 0x8FD6, 0xE5E8, 0xFBA2, 0, 0, /* 0xF0 */
+ 0x9787, 0xE5E5, 0, 0, 0xE5E7, 0x90BB, 0x909E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5E6, 0, 0xE5EB, 0, 0, 0x95A1, /* 0x00 */
+ 0, 0, 0xE5ED, 0, 0xE5EC, 0, 0, 0, /* 0x00 */
+ 0x8A8C, 0, 0x964A, 0xE5EE, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xFA5D, 0xE5FA, 0xE5F0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE5F1, 0, 0, /* 0x20 */
+ 0, 0, 0xE5F2, 0xE5F3, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xE5F7, 0, /* 0x30 */
+ 0xE5F8, 0, 0, 0xE5F6, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xE5F4, 0, 0xE5EF, 0xE5F5, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE5F9, 0xE8B5, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x89A6, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xE5FC, 0x8BDD, /* 0x50 */
+ 0xE5FB, 0, 0, 0, 0xE641, 0, 0xE640, 0, /* 0x60 */
+ 0, 0, 0xE643, 0, 0, 0xE642, 0, 0xE644, /* 0x60 */
+ 0, 0, 0x8F50, 0, 0xE645, 0, 0, 0xE646, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE647, 0x90BC, /* 0x70 */
+ 0, 0x9776, 0, 0xE648, 0, 0, 0x95A2, 0x9465, /* 0x80 */
+ 0xE649, 0, 0xE64A, 0x8CA9, 0, 0, 0, 0x8B4B, /* 0x80 */
+ 0, 0, 0, 0xE64B, 0, 0, 0x8E8B, 0x9460, /* 0x90 */
+ 0xE64C, 0, 0x8A6F, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE64D, 0, 0, 0, 0, 0xE64F, 0x9797, /* 0xA0 */
+ 0, 0xE64E, 0x9065, 0, 0xE650, 0, 0, 0xE651, /* 0xA0 */
+ 0, 0, 0xE652, 0x8ACF, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE653, 0, 0, 0xE654, 0, 0xE655, /* 0xB0 */
+ 0xE656, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x8A70, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE657, 0, 0xE658, 0xE659, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x89F0, 0, 0, 0x9047, 0xE65A, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE65B, 0, 0, 0, /* 0xF0 */
+ 0xE65C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8CBE, 0, 0x92F9, 0xE65D, 0, 0, 0, 0, /* 0x00 */
+ 0x8C76, 0, 0x9075, 0, 0xE660, 0, 0x93A2, 0, /* 0x00 */
+ 0xE65F, 0, 0xFBA3, 0x8C50, 0, 0, 0xE65E, 0x91F5, /* 0x10 */
+ 0x8B4C, 0, 0, 0xE661, 0, 0xE662, 0, 0x8FD7, /* 0x10 */
+ 0, 0, 0, 0x8C8D, 0, 0xE663, 0, 0, /* 0x20 */
+ 0, 0, 0x964B, 0, 0, 0x90DD, 0, 0, /* 0x20 */
+ 0, 0x8B96, 0, 0x96F3, 0x9169, 0, 0xE664, 0xFBA4, /* 0x30 */
+ 0, 0, 0x9066, 0x9290, 0x8FD8, 0, 0, 0, /* 0x30 */
+ 0, 0xE665, 0, 0, 0, 0, 0xE668, 0, /* 0x40 */
+ 0xE669, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x8DBC, 0x91C0, 0xE667, 0, 0x8FD9, 0x955D, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE666, 0, 0, 0x8E8C, 0, /* 0x50 */
+ 0x8972, 0, 0xE66D, 0x8C77, 0, 0, 0x8E8E, 0, /* 0x60 */
+ 0, 0x8E8D, 0, 0x986C, 0xE66C, 0xE66B, 0x9146, 0, /* 0x60 */
+ 0x8B6C, 0x9862, 0x8A59, 0x8FDA, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xFBA5, 0, 0, 0xE66A, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE66F, 0, 0xE670, 0xE66E, 0, 0x8CD6, /* 0x80 */
+ 0, 0x975F, 0, 0, 0x8E8F, 0x9446, 0, 0, /* 0x80 */
+ 0, 0xE673, 0, 0x90BE, 0, 0x9261, 0, 0, /* 0x90 */
+ 0x9755, 0, 0xE676, 0, 0, 0, 0x8CEA, 0, /* 0x90 */
+ 0x90BD, 0xE672, 0, 0xE677, 0x8CEB, 0xE674, 0xE675, 0xFBA6, /* 0xA0 */
+ 0xE671, 0, 0, 0, 0x90E0, 0x93C7, 0, 0, /* 0xA0 */
+ 0x924E, 0, 0x89DB, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x94EE, 0, 0, 0x8B62, 0, 0xFBA7, 0x92B2, /* 0xB0 */
+ 0, 0, 0xE67A, 0, 0xE678, 0, 0, 0x926B, /* 0xC0 */
+ 0, 0, 0, 0x90BF, 0x8AD0, 0xE679, 0, 0x907A, /* 0xC0 */
+ 0, 0, 0x97C8, 0, 0, 0, 0x985F, 0, /* 0xD0 */
+ 0, 0, 0xE67B, 0xE687, 0x92B3, 0, 0xE686, 0xFBA8, /* 0xD0 */
+ 0xE683, 0xE68B, 0xE684, 0, 0xE680, 0, 0x92FA, 0xE67E, /* 0xE0 */
+ 0, 0, 0, 0xE67C, 0, 0x9740, 0x8E90, 0, /* 0xE0 */
+ 0, 0xE681, 0, 0xE67D, 0, 0, 0xFBAA, 0xE685, /* 0xF0 */
+ 0x8F94, 0, 0x8CBF, 0, 0, 0, 0x91F8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9664, 0x8979, 0x88E0, 0, 0x93A3, 0, 0, 0xE689, /* 0x00 */
+ 0, 0, 0, 0, 0xE688, 0, 0x93E4, 0, /* 0x00 */
+ 0xE68D, 0, 0, 0, 0xE682, 0, 0xE68C, 0xE68E, /* 0x10 */
+ 0, 0x8CAA, 0xE68A, 0x8D75, 0, 0x8ED3, 0, 0, /* 0x10 */
+ 0xE68F, 0x9777, 0, 0, 0, 0, 0xE692, 0, /* 0x20 */
+ 0xE695, 0, 0, 0xE693, 0x9554, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE690, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x8BDE, 0, 0, 0, 0, 0xE694, 0, /* 0x30 */
+ 0, 0xE696, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xE69A, 0, 0, 0xE697, 0, 0xE699, 0xE698, /* 0x40 */
+ 0, 0, 0, 0xFBAB, 0, 0, 0xE69B, 0, /* 0x50 */
+ 0x8EAF, 0, 0xE69D, 0xE69C, 0x9588, 0, 0, 0xE69F, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x8C78, 0, /* 0x60 */
+ 0, 0, 0, 0xE69E, 0xE6A0, 0, 0, 0xE6A1, /* 0x60 */
+ 0x8B63, 0xE3BF, 0x8FF7, 0, 0xE6A2, 0, 0, 0x8CEC, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE6A3, 0, 0xFBAC, /* 0x70 */
+ 0xE6A4, 0, 0, 0x8E5D, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x9DCC, 0, 0xE6A5, 0, 0xE6A6, 0, /* 0x80 */
+ 0x8F51, 0, 0xE6A7, 0xE6A8, 0, 0, 0xE6A9, 0, /* 0x90 */
+ 0, 0xE6AA, 0xE6AB /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x924A, /* 0x30 */
+ 0, 0, 0xE6AC, 0, 0, 0, 0, 0xE6AE, /* 0x30 */
+ 0, 0xE6AD, 0, 0, 0, 0, 0x93A4, 0, /* 0x40 */
+ 0xE6AF, 0, 0x964C, 0, 0xE6B0, 0, 0xE6B1, 0, /* 0x40 */
+ 0xE6B2, 0, 0, 0, 0, 0xE6B3, 0, 0, /* 0x50 */
+ 0, 0, 0x93D8, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x8FDB, 0xE6B4, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x8D8B, 0x98AC, 0xE6B5, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE6B6, 0x955E, 0xE6B7, 0, 0xE6BF, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE6B8, 0, 0, 0xE6BA, 0, 0, /* 0x80 */
+ 0, 0xE6B9, 0xE6BB, 0, 0x9665, 0xE6BC, 0xE6BD, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE6BE, 0, 0, 0, /* 0x90 */
+ 0xE6C0, 0, 0, 0, 0, 0x8A4C, 0x92E5, 0, /* 0x90 */
+ 0x9589, 0x8DE0, 0x8D76, 0, 0, 0, 0, 0x956E, /* 0xA0 */
+ 0x89DD, 0x94CC, 0xE6C3, 0x8AD1, 0x90D3, 0xE6C2, 0xE6C7, 0x9299, /* 0xA0 */
+ 0x96E1, 0, 0xE6C5, 0xE6C6, 0x8B4D, 0, 0xE6C8, 0x9483, /* 0xB0 */
+ 0x91DD, 0, 0, 0x94EF, 0x935C, 0xE6C4, 0, 0x9666, /* 0xB0 */
+ 0x89EA, 0xE6CA, 0x9847, 0x92C0, 0x9864, 0, 0, 0x8E91, /* 0xC0 */
+ 0xE6C9, 0, 0x91AF, 0, 0, 0xE6DA, 0x9147, 0, /* 0xC0 */
+ 0, 0x93F6, 0, 0x956F, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE6CD, 0x8E5E, 0x8E92, 0, 0x8FDC, 0, /* 0xD0 */
+ 0x9485, 0, 0x8CAB, 0xE6CC, 0xE6CB, 0, 0x958A, 0, /* 0xE0 */
+ 0, 0, 0x8EBF, 0, 0, 0x9371, 0, 0, /* 0xE0 */
+ 0xFBAD, 0, 0, 0, 0xFBAE, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xE6CF, 0xE6D0, 0x8D77, 0xE6CE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE6D1, 0xE6D2, 0, 0xE6D4, /* 0x00 */
+ 0x91A1, 0, 0xE6D3, 0x8AE4, 0, 0xE6D6, 0, 0xE6D5, /* 0x00 */
+ 0xE6D7, 0, 0xFBAF, 0xE6D9, 0xE6DB, 0, 0xE6DC, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x90D4, 0, 0x8ECD, 0xE6DD, /* 0x60 */
+ 0, 0, 0, 0x8A71, 0, 0xE6DE, 0, 0, /* 0x60 */
+ 0x9196, 0xE6DF, 0, 0xE6E0, 0x958B, 0, 0xFBB0, 0x8B4E, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xE6E1, 0, 0, 0, 0x92B4, 0, 0, /* 0x80 */
+ 0, 0, 0x897A, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE6E2, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x8EEF, 0, 0, 0, 0, /* 0xA0 */
+ 0x9096, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x91AB, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE6E5, 0, 0, 0, 0xE6E4, 0, /* 0xB0 */
+ 0, 0, 0xE6E3, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE6EB, 0xE6E9, 0, 0, 0xE6E6, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE6E8, 0, /* 0xD0 */
+ 0, 0, 0xE6E7, 0xE6EA, 0, 0x8B97, 0, 0xE6EE, /* 0xD0 */
+ 0, 0x90D5, 0, 0xE6EF, 0, 0, 0, 0, /* 0xE0 */
+ 0x8CD7, 0, 0xE6EC, 0xE6ED, 0, 0, 0, 0x9848, /* 0xE0 */
+ 0, 0, 0, 0x92B5, 0, 0x9148, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xE6F0, 0, 0, 0xE6F3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xE6F1, 0xE6F2, 0x9778, 0, 0, 0, 0, 0x93A5, /* 0x00 */
+ 0xE6F6, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE6F4, 0xE6F5, 0xE6F7, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE748, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE6FA, 0, 0, 0, 0xE6FB, 0xE6F9, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xE6F8, 0, 0x92FB, 0, 0, 0xE740, /* 0x40 */
+ 0xE744, 0xE741, 0xE6FC, 0, 0xE742, 0, 0, 0, /* 0x40 */
+ 0xE743, 0, 0, 0, 0, 0xE74A, 0, 0, /* 0x50 */
+ 0, 0xE745, 0, 0, 0, 0, 0, 0x90D6, /* 0x50 */
+ 0xE747, 0, 0, 0xE749, 0xE746, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE74C, 0, 0x8F52, 0, 0xE74B, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xE74D, 0, 0, 0, /* 0x70 */
+ 0, 0xE74E, 0, 0, 0xE751, 0xE750, 0, 0xE74F, /* 0x80 */
+ 0, 0, 0xE753, 0xE752, 0, 0x96F4, 0, 0, /* 0x80 */
+ 0, 0xE755, 0, 0xE754, 0xE756, 0, 0, 0, /* 0x90 */
+ 0, 0xE757, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE759, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE758, 0x9067, 0xE75A, 0, 0, 0x8BEB, /* 0xA0 */
+ 0xE75B, 0xE75D, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xE75E, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xE75F, 0xE75C, 0, /* 0xC0 */
+ 0xE760, 0, 0x8ED4, 0xE761, 0x8B4F, 0x8C52, 0, 0xFBB2, /* 0xC0 */
+ 0, 0, 0x8CAC, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xE762, 0, 0, 0, 0x93EE, /* 0xD0 */
+ 0, 0, 0x935D, 0xE763, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE766, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x8EB2, 0, 0, 0xE765, 0xE764, 0x8C79, 0xE767 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8A72, 0, 0xE769, 0, 0, /* 0x00 */
+ 0, 0x8DDA, 0xE768, 0, 0xE771, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE76B, 0xE76D, 0x95E3, 0xE76A, 0, 0, /* 0x10 */
+ 0, 0xE76C, 0, 0xE770, 0xE76E, 0x8B50, 0, 0xE76F, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE772, 0, /* 0x20 */
+ 0, 0x9479, 0x97D6, 0, 0, 0, 0, 0x8F53, /* 0x20 */
+ 0, 0, 0, 0xE773, 0, 0, 0, 0, /* 0x30 */
+ 0x9741, 0xE775, 0, 0xE774, 0, 0, 0xE778, 0x9760, /* 0x30 */
+ 0, 0, 0xE777, 0, 0x8A8D, 0xE776, 0xE77B, 0, /* 0x40 */
+ 0, 0xE77A, 0, 0, 0xE779, 0x9351, 0xE77C, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE77D, /* 0x50 */
+ 0, 0, 0, 0, 0xE77E, 0, 0, 0x8D8C, /* 0x50 */
+ 0, 0x8C44, 0xE780, 0xE781, 0xE782, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x9068, 0xE783, 0, 0x8EAB, 0xE784, /* 0x90 */
+ 0, 0, 0, 0xE785, 0, 0, 0, 0x999F, /* 0xA0 */
+ 0x999E, 0, 0, 0, 0, 0xE786, 0xE390, 0xE787, /* 0xA0 */
+ 0x9243, 0x904A, 0x945F, 0, 0, 0, 0, 0xE788, /* 0xB0 */
+ 0, 0, 0x95D3, 0x92D2, 0x8D9E, 0, 0, 0x9248, /* 0xB0 */
+ 0, 0, 0x8949, 0, 0x9698, 0x9076, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x8C7D, 0, /* 0xC0 */
+ 0, 0x8BDF, 0, 0, 0x95D4, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE789, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE78B, 0, 0, 0xE78A, 0x89DE, 0, /* 0xE0 */
+ 0, 0x93F4, 0xE78C, 0x9497, 0, 0x9352, 0, 0xE78D, /* 0xE0 */
+ 0x8F71, 0, 0, 0, 0xE78F, 0, 0, 0x96C0, /* 0xF0 */
+ 0xE79E, 0xE791, 0xE792, 0, 0, 0x92C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x91DE, 0x9197, 0, 0x93A6, 0, 0xE790, 0x8B74, 0, /* 0x00 */
+ 0, 0, 0, 0xE799, 0, 0xE796, 0xE7A3, 0x93A7, /* 0x00 */
+ 0x9280, 0xE793, 0, 0x92FC, 0x9372, 0xE794, 0xE798, 0x9080, /* 0x10 */
+ 0, 0x9487, 0x92CA, 0, 0, 0x90C0, 0xE797, 0x91AC, /* 0x10 */
+ 0x91A2, 0xE795, 0x88A7, 0x9841, 0, 0, 0, 0xE79A, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x91DF, 0, /* 0x20 */
+ 0, 0x8F54, 0x9069, 0, 0, 0xE79C, 0xE79B, 0, /* 0x30 */
+ 0x88ED, 0xE79D, 0, 0, 0x954E, 0, 0xE7A5, 0, /* 0x30 */
+ 0, 0x93D9, 0x908B, 0, 0, 0x9278, 0, 0x8BF6, /* 0x40 */
+ 0, 0xE7A4, 0x9756, 0x895E, 0, 0x95D5, 0x89DF, 0xE79F, /* 0x40 */
+ 0xE7A0, 0xE7A1, 0xE7A2, 0x93B9, 0x9242, 0x88E1, 0xE7A6, 0, /* 0x50 */
+ 0xE7A7, 0xEAA1, 0, 0, 0x91BB, 0, 0xE7A8, 0, /* 0x50 */
+ 0x8993, 0x916B, 0, 0x8CAD, 0, 0x9779, 0, 0xFBB5, /* 0x60 */
+ 0xE7A9, 0x934B, 0, 0, 0, 0x9198, 0x8ED5, 0xE7AA, /* 0x60 */
+ 0, 0, 0xE7AD, 0, 0, 0x8F85, 0xE7AB, 0x914A, /* 0x70 */
+ 0x9149, 0, 0x88E2, 0, 0x97C9, 0xE7AF, 0, 0x94F0, /* 0x70 */
+ 0xE7B1, 0xE7B0, 0xE7AE, 0xE284, 0x8AD2, 0, 0, 0xE78E, /* 0x80 */
+ 0, 0xE7B3, 0xE7B2, 0, 0, 0, 0, 0xE7B4, /* 0x80 */
+ 0, 0x9757, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x93DF, 0, 0, 0x964D, 0, /* 0xA0 */
+ 0xE7B5, 0, 0x8ED7, 0, 0, 0, 0, 0xE7B6, /* 0xA0 */
+ 0, 0xE7B7, 0, 0, 0, 0xE7B8, 0, 0, /* 0xB0 */
+ 0x9340, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x88E8, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x8D78, 0, 0, 0, 0x9859, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xE7BC, 0, 0, 0xFBB6, 0, /* 0xD0 */
+ 0, 0x8C53, 0xE7B9, 0, 0xE7BA, 0, 0, 0, /* 0xE0 */
+ 0x9594, 0, 0, 0, 0, 0x8A73, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x9758, 0, 0x8BBD, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0x9373 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE7BD, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE7BE, 0, 0, 0xFBB8, 0, 0, /* 0x10 */
+ 0, 0xE7BF, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFBB9, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x9341, 0, 0, /* 0x20 */
+ 0xE7C1, 0, 0xE7C0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x93D1, 0xE7C2, 0x8F55, 0x8EDE, 0x947A, 0x9291, 0, /* 0x40 */
+ 0, 0, 0x8EF0, 0, 0x908C, 0, 0xE7C3, 0, /* 0x50 */
+ 0xE7C4, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x907C, 0xE7C5, 0, 0xE7C6, 0, 0, /* 0x60 */
+ 0, 0xE7C7, 0x978F, 0, 0x8F56, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE7C9, 0xE7C8, 0, 0x8D79, 0, 0x8D93, /* 0x70 */
+ 0x8E5F, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE7CC, 0, 0, 0, 0, 0x8F86, /* 0x80 */
+ 0, 0xE7CB, 0, 0xE7CA, 0, 0x91E7, 0, 0, /* 0x80 */
+ 0x8CED, 0, 0x90C1, 0, 0, 0, 0, 0x94AE, /* 0x90 */
+ 0, 0, 0, 0, 0x8F58, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE7CD, 0, 0x8FDD, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE7D0, 0xE7CE, 0, 0, 0, 0xE7CF, /* 0xA0 */
+ 0, 0, 0, 0, 0xE7D2, 0xE7D1, 0, 0, /* 0xB0 */
+ 0x8FF8, 0, 0xE7D3, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xE7D4, 0xE7D5, 0, 0, 0, 0, 0x94CE, 0x8DD1, /* 0xC0 */
+ 0x8EDF, 0xE7D6, 0, 0xE7D7, 0x97A2, 0x8F64, 0x96EC, 0x97CA, /* 0xC0 */
+ 0xE7D8, 0x8BE0, 0, 0, 0, 0, 0xE7D9, 0xFBBB, /* 0xD0 */
+ 0x9342, 0, 0xFBBA, 0xE7DC, 0x8A98, 0x906A, 0xFBBC, 0xE7DA, /* 0xD0 */
+ 0, 0xE7DB, 0, 0x92DE, 0xFBBF, 0xFBC0, 0x9674, 0x8BFA, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xFBBD, 0xFBBE, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE7DE, 0xE7DF, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xE7DD, 0, 0, 0xE7E1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFBC1, 0, /* 0x00 */
+ 0, 0, 0xFBC3, 0, 0, 0x93DD, 0x8A62, 0, /* 0x00 */
+ 0xFBC2, 0xE7E5, 0, 0, 0xE7E2, 0xE7E4, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE7E0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE86E, 0, 0, 0xE7E3, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x97E9, 0, 0, 0x8CD8, /* 0x30 */
+ 0, 0xFBCA, 0xFBC4, 0, 0xFBC6, 0, 0, 0xE7ED, /* 0x30 */
+ 0xFBC5, 0, 0, 0, 0x9353, 0xE7E8, 0, 0, /* 0x40 */
+ 0xE7EB, 0xE7E9, 0, 0xE7EE, 0, 0, 0xFBC7, 0, /* 0x40 */
+ 0xE7EF, 0xFBC9, 0, 0, 0, 0, 0, 0xE7E7, /* 0x50 */
+ 0, 0xFBC8, 0xE7F4, 0x8994, 0, 0, 0xE7E6, 0, /* 0x50 */
+ 0, 0, 0x94AB, 0, 0xE7EA, 0, 0x8FDE, 0xFBCB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x8D7A, 0, 0, 0, 0, 0, 0xFBCD, /* 0x70 */
+ 0xFBCE, 0, 0, 0, 0, 0, 0x9667, 0, /* 0x70 */
+ 0x8BE2, 0, 0, 0x8F65, 0, 0x93BA, 0, 0, /* 0x80 */
+ 0xFA5F, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x914C, 0, 0xE7F2, 0, 0xE7EC, 0xE7F1, 0, /* 0x90 */
+ 0x96C1, 0, 0x92B6, 0xE7F3, 0xE7F0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFBCC, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x914B, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7F7, /* 0xB0 */
+ 0, 0xE7F6, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7F5, /* 0xC0 */
+ 0xFBD2, 0, 0x964E, 0xFBD6, 0, 0xFBD4, 0, 0xFBD0, /* 0xD0 */
+ 0, 0xFBD1, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xFBD5, 0, 0, 0, 0x8F9B, 0, 0, 0xFBCF, /* 0xE0 */
+ 0, 0xE7F8, 0x95DD, 0, 0, 0x8973, 0, 0, /* 0xE0 */
+ 0, 0, 0x9565, 0x9292, 0, 0, 0, 0, /* 0xF0 */
+ 0x8B98, 0xFA65, 0xE7FA, 0xFBD9, 0x8D7C, 0, 0, 0xFBDC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFBDE, 0, 0, 0, 0x8E4B, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7F9, /* 0x00 */
+ 0x908D, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x908E, 0xE840, 0xE842, 0, 0, 0xFBDD, 0xFBDB, 0, /* 0x10 */
+ 0x8FF9, 0xFBD8, 0xE841, 0xE843, 0, 0xFBD7, 0x8BD1, 0, /* 0x20 */
+ 0x9564, 0, 0, 0x8EE0, 0x9842, 0, 0xE7FC, 0x8DF6, /* 0x20 */
+ 0, 0, 0x985E, 0, 0, 0xE845, 0, 0, /* 0x30 */
+ 0, 0, 0xE844, 0xE846, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE7FB, 0, 0, 0, /* 0x40 */
+ 0xFA5E, 0, 0, 0x93E7, 0, 0x9374, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x92D5, 0, 0xE84B, 0xFBE0, /* 0x50 */
+ 0, 0, 0, 0x9262, 0xE847, 0, 0, 0, /* 0x50 */
+ 0xE848, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x8C4C, 0, 0xE84A, 0, /* 0x60 */
+ 0xFBDF, 0, 0, 0, 0, 0x8CAE, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xE849, 0, 0x8FDF, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x8A99, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE84F, 0, 0x8DBD, 0x9199, /* 0x90 */
+ 0, 0, 0x92C8, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xFBE1, 0, 0, 0x8A5A, /* 0xA0 */
+ 0, 0, 0, 0, 0xE84D, 0xE84E, 0x92C1, 0, /* 0xA0 */
+ 0xE84C, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE850, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE856, 0, 0, 0xFBE2, 0, /* 0xC0 */
+ 0xE859, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xE858, 0x934C, 0, 0, 0, 0, 0xE851, 0xE852, /* 0xD0 */
+ 0xE855, 0, 0, 0, 0, 0xE857, 0xFBE3, 0, /* 0xD0 */
+ 0, 0x8BBE, 0, 0, 0xE85A, 0xE854, 0, 0, /* 0xE0 */
+ 0xE853, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xFBE4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE85E, 0, 0, 0, 0xE85F, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xE860, 0, 0, 0xE85D, 0xE85C, 0, 0, 0, /* 0x10 */
+ 0x8FE0, 0x93A8, 0xE85B, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE864, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE862, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xFBE5, 0, 0, 0, 0xE863, 0xE861, 0, /* 0x30 */
+ 0x91F6, 0, 0xE865, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xE866, 0, 0, 0xE868, 0xFBE6, 0, 0, /* 0x40 */
+ 0xFBE7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x8AD3, 0xE867, 0x96F8, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE873, 0xE869, 0, 0, 0xE86C, 0, /* 0x50 */
+ 0xE86A, 0, 0xE86B, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE86D, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xE86F, 0, 0, 0, 0, 0xE870, 0, 0xE871, /* 0x70 */
+ 0, 0, 0, 0, 0xE874, 0xE872, 0xE875, 0xE877, /* 0x70 */
+ 0, 0xE876 /* 0x80 */
+ /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x92B7, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x96E5, 0, 0xE878, 0x914D, 0, 0, 0, 0xE879, /* 0x80 */
+ 0, 0x95C2, 0xE87A, 0x8A4A, 0, 0, 0, 0x895B, /* 0x80 */
+ 0, 0x8AD5, 0xFBE8, 0x8AD4, 0xE87B, 0, 0xE87C, 0, /* 0x90 */
+ 0xE87D, 0xE87E, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xE880, 0, 0x8AD6, 0x8A74, 0x8D7D, 0x94B4, 0, 0xE882, /* 0xA0 */
+ 0xE881, 0, 0, 0, 0, 0xE883, 0, 0, /* 0xA0 */
+ 0, 0, 0x897B, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE886, 0, 0xE885, 0xE884, 0, 0xE887, 0, /* 0xB0 */
+ 0, 0, 0, 0xE88A, 0, 0, 0, 0x88C5, /* 0xC0 */
+ 0, 0, 0xE888, 0, 0xE88C, 0xE88B, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE88E, 0xE88D, 0xE88F, 0, /* 0xD0 */
+ 0x93AC, 0, 0, 0, 0xE890, 0, 0, 0, /* 0xD0 */
+ 0, 0xE891, 0xE893, 0, 0, 0xE892 /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0x958C, 0, 0, 0, /* 0x10 */
+ 0, 0xE894, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE895, 0, 0x8DE3, 0, 0, 0, 0xE896, 0xE897, /* 0x20 */
+ 0, 0, 0x9668, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x916A, 0, 0, 0, 0x88A2, /* 0x30 */
+ 0x91C9, 0, 0xE898, 0, 0x958D, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xE89B, 0xE899, 0x8D7E, 0, 0xE89A, /* 0x40 */
+ 0x8CC0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x95C3, 0xE89D, 0xE89F, 0xE89E, 0xE8A0, /* 0x50 */
+ 0, 0, 0x8940, 0x9077, 0x8F9C, 0x8AD7, 0xE8A1, 0, /* 0x60 */
+ 0, 0, 0x9486, 0, 0xE8A3, 0, 0, 0, /* 0x60 */
+ 0x8941, 0, 0xE8A2, 0x92C2, 0, 0x97CB, 0x93A9, 0xE89C, /* 0x70 */
+ 0x97A4, 0, 0x8CAF, 0, 0, 0x977A, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x8BF7, 0x97B2, 0, /* 0x80 */
+ 0x8C47, 0, 0x91E0, 0xE440, 0, 0xE8A4, 0x8A4B, 0x908F, /* 0x80 */
+ 0, 0, 0, 0, 0x8A75, 0xE8A6, 0, 0xE8A7, /* 0x90 */
+ 0xE8A5, 0x8C84, 0, 0x8DDB, 0x8FE1, 0xFBEB, 0, 0, /* 0x90 */
+ 0x8942, 0, 0, 0x97D7, 0, 0, 0, 0xE8A9, /* 0xA0 */
+ 0xE7AC, 0, 0xE8A8, 0, 0, 0, 0, 0xFBEC, /* 0xA0 */
+ 0xE8AC, 0xE8AA, 0xE8AB, 0, 0xE8AD, 0, 0xE8AE, 0x97EA, /* 0xB0 */
+ 0xE8AF, 0xE8B0, 0, 0x90C7, 0x94B9, 0, 0, 0, /* 0xB0 */
+ 0x909D, 0x8AE5, 0, 0, 0x9759, 0x89EB, 0x8F57, 0x8CD9, /* 0xC0 */
+ 0, 0xE8B3, 0, 0xE8B2, 0x8E93, 0xE8B4, 0xE8B1, 0, /* 0xC0 */
+ 0, 0x8E47, 0, 0, 0, 0xE8B8, 0xE5AB, 0, /* 0xD0 */
+ 0, 0x99D4, 0, 0x9097, 0xE8B6, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x97A3, 0x93EF, 0, 0, 0, 0, /* 0xE0 */
+ 0x894A, 0, 0x90E1, 0x8EB4, 0, 0, 0, 0, /* 0xE0 */
+ 0x95B5, 0, 0x895F, 0, 0, 0, 0x97EB, 0x978B, /* 0xF0 */
+ 0, 0xE8B9, 0, 0x9364 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8EF9, 0, 0, 0, 0xE8BA, 0, 0xE8BB, 0x906B, /* 0x00 */
+ 0xE8BC, 0, 0x97EC, 0, 0, 0xE8B7, 0xE8BE, 0xE8C0, /* 0x00 */
+ 0, 0xE8BF, 0, 0xE8BD, 0, 0, 0xE8C1, 0, /* 0x10 */
+ 0, 0xE8C2, 0, 0, 0x919A, 0, 0x89E0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xE8C3, 0, 0, 0x96B6, /* 0x20 */
+ 0, 0, 0xE8C4, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE8C5, 0, 0x9849, 0xFBED, 0, 0, 0, 0, /* 0x30 */
+ 0x9E50, 0xE8C6, 0, 0xFBEE, 0, 0xE8C7, 0xE8C8, 0, /* 0x30 */
+ 0, 0, 0xE8CC, 0xFBEF, 0xE8C9, 0, 0xE8CA, 0, /* 0x40 */
+ 0xE8CB, 0xE8CD, 0, 0, 0, 0xFBF0, 0, 0xFBF1, /* 0x40 */
+ 0, 0xFBF2, 0x90C2, 0, 0, 0xFBF3, 0x96F5, 0, /* 0x50 */
+ 0, 0x90C3, 0, 0, 0xE8CE, 0, 0x94F1, 0, /* 0x50 */
+ 0xE8CF, 0xEA72, 0x96CA, 0, 0xE8D0, 0, 0xE8D1, 0, /* 0x60 */
+ 0xE8D2, 0x8A76, 0, 0xE8D4, 0, 0x9078, 0, 0, /* 0x60 */
+ 0, 0xE8D5, 0, 0, 0x8C43, 0, 0, 0, /* 0x70 */
+ 0, 0xE8D6, 0xE8DA, 0, 0xE8D8, 0, 0, 0, /* 0x70 */
+ 0, 0xE8D9, 0, 0, 0x8A93, 0xE8D7, 0xE8DB, 0, /* 0x80 */
+ 0, 0, 0, 0xE8DC, 0, 0x88C6, 0, 0xE8DD, /* 0x80 */
+ 0xE8DE, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x8FE2, 0, 0, 0, 0xE8DF, 0, 0, 0, /* 0x90 */
+ 0x8B66, 0, 0, 0xE8E2, 0, 0, 0xE8E1, 0, /* 0xA0 */
+ 0xE8E0, 0, 0, 0xE691, 0, 0x95DA, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE8E3, 0xE8E4, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE8E5, 0, 0, 0xE8E6, 0, /* 0xC0 */
+ 0xE8E7, 0, 0, 0xE8E8, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x8AD8, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE8E9, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE8EA, 0x9442, 0, /* 0xE0 */
+ 0, 0, 0xE8EC, 0x89B9, 0, 0xE8EF, 0xE8EE, 0, /* 0xF0 */
+ 0, 0, 0, 0x8943, 0, 0, 0, 0x8BBF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x95C5, 0x92B8, 0x8DA0, 0, 0x8D80, 0x8F87, 0, /* 0x00 */
+ 0x907B, 0, 0, 0, 0xE8F1, 0, 0, 0xE8F0, /* 0x00 */
+ 0x9761, 0x8AE6, 0x94D0, 0x93DA, 0, 0, 0, 0x909C, /* 0x10 */
+ 0x97CC, 0, 0x8C7A, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE8F4, 0, 0, 0xE8F3, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x966A, 0x93AA, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x896F, 0, 0, 0xE8F5, /* 0x30 */
+ 0xE8F2, 0, 0, 0x9570, 0x978A, 0xE8F6, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE8F7, 0, /* 0x40 */
+ 0, 0, 0, 0xE8F9, 0x91E8, 0x8A7A, 0x8A7B, 0xE8F8, /* 0x40 */
+ 0, 0, 0, 0, 0x8AE7, 0x8CB0, 0, 0xFBF4, /* 0x50 */
+ 0x8AE8, 0, 0, 0x935E, 0, 0, 0x97DE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xFBF5, 0, 0x8CDA, /* 0x60 */
+ 0, 0, 0, 0xE8FA, 0, 0, 0, 0xE8FB, /* 0x60 */
+ 0xE8FC, 0xE940, 0, 0xE942, 0xE941, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x9597, 0, 0xE943, 0, 0, 0, 0, 0xE944, /* 0xA0 */
+ 0, 0xE945, 0, 0, 0, 0, 0xE946, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE948, 0xE947, 0, 0xE949, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x94F2, 0xE3CA, 0, 0, 0x9048, /* 0xD0 */
+ 0, 0, 0x8B51, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE94A, 0, 0xE94B, 0, 0x99AA, 0x9F5A, 0x94D1, /* 0xE0 */
+ 0, 0, 0x88F9, 0, 0x88B9, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x8E94, 0x964F, 0x8FFC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE94C, 0, 0x96DD, 0, 0, /* 0x00 */
+ 0, 0xE94D, 0x977B, 0, 0x8961, 0, 0, 0, /* 0x00 */
+ 0x8E60, 0, 0xE94E, 0x89EC, 0xE94F, 0, 0, 0, /* 0x10 */
+ 0xE950, 0, 0, 0, 0, 0xE952, 0xE953, 0, /* 0x10 */
+ 0xE955, 0xE951, 0, 0, 0xE954, 0, 0, 0xFBF8, /* 0x20 */
+ 0x8AD9, 0, 0, 0, 0xE956, 0, 0xE957, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE958, 0xE959, 0, /* 0x30 */
+ 0, 0, 0xE95A, 0, 0, 0xE95C, 0, 0, /* 0x40 */
+ 0, 0xE95B, 0, 0xE95E, 0xE961, 0, 0, 0, /* 0x40 */
+ 0xE95D, 0xE95F, 0xE960, 0, 0, 0xE962, 0, 0x8BC0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x8EF1, 0xE963, /* 0x90 */
+ 0xE964, 0x8D81, 0, 0, 0, 0, 0xFBFA, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xE965, 0, 0, /* 0xA0 */
+ 0x8A5D, 0, 0, 0, 0x946E, 0xE966, 0xE967, 0, /* 0xA0 */
+ 0, 0, 0, 0x9279, 0x93E9, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE968, 0, 0, 0, /* 0xB0 */
+ 0, 0x949D, 0, 0, 0x91CA, 0x8977, 0x8BEC, 0, /* 0xC0 */
+ 0x8BED, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x9293, 0xE96D, 0x8BEE, 0, 0, 0x89ED, 0, 0, /* 0xD0 */
+ 0xE96C, 0, 0, 0xE96A, 0, 0xE96B, 0, 0xE969, /* 0xD0 */
+ 0, 0, 0xE977, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE96E, 0xE96F, 0, /* 0xE0 */
+ 0, 0xE970, 0xE971, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xE973, 0, 0, 0xE972, 0, 0, 0, 0x8F78 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE974, 0, 0, 0, 0xE976, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x8B52, 0xE975, /* 0x00 */
+ 0, 0, 0x919B, 0x8CB1, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE978, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x91CB, 0, 0, 0xE979, 0, 0, 0, 0, /* 0x20 */
+ 0x93AB, 0, 0, 0, 0, 0, 0, 0xE97A, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE980, 0, /* 0x30 */
+ 0xE97D, 0, 0xE97C, 0xE97E, 0, 0xE97B, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE982, 0xFBFB, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE981, 0, 0xE984, /* 0x50 */
+ 0, 0, 0x8BC1, 0xE983, 0, 0, 0, 0xE985, /* 0x50 */
+ 0, 0, 0xE986, 0, 0xE988, 0xE987, 0, 0, /* 0x60 */
+ 0, 0xE989, 0xE98B, 0xE98A, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x8D9C, 0, 0, 0, 0, 0xE98C, 0, 0, /* 0xA0 */
+ 0xE98D, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x8A5B, 0, 0, 0, 0xE98E, 0, 0, 0, /* 0xB0 */
+ 0xE98F, 0, 0, 0, 0x9091, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE990, /* 0xC0 */
+ 0, 0xE991, 0, 0xE992, 0xE993, 0, 0, 0, /* 0xD0 */
+ 0x8D82, 0xFBFC, 0, 0, 0xFC40, 0, 0xE994, 0xE995, /* 0xD0 */
+ 0, 0, 0xE996, 0xE997, 0, 0, 0xE998, 0, /* 0xE0 */
+ 0, 0, 0x94AF, 0xE99A, 0, 0x9545, 0xE99B, 0xE999, /* 0xE0 */
+ 0, 0xE99D, 0, 0, 0xE99C, 0, 0, 0xE99E, /* 0xF0 */
+ 0, 0, 0, 0xE99F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE9A0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE9A1, 0, 0xE9A2, 0, 0, 0, 0, 0xE9A3, /* 0x10 */
+ 0, 0, 0xE9A4, 0xE9A5, 0, 0xE9A6, 0, 0xE9A7, /* 0x20 */
+ 0xE9A8, 0xE9A9, 0xE9AA, 0, 0, 0, 0xE9AB, 0xE9AC, /* 0x20 */
+ 0, 0x9F54, 0xE9AD, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE2F6, 0x8B53, 0, 0, 0, /* 0x30 */
+ 0, 0x8A40, 0x8DB0, 0xE9AF, 0xE9AE, 0x96A3, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE9B1, 0xE9B2, 0xE9B0, /* 0x40 */
+ 0, 0xE9B3, 0, 0, 0x9682, 0, 0, 0, /* 0x50 */
+ 0xE9B4, 0, 0x8B9B, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x9844, /* 0x60 */
+ 0, 0, 0xFC42, 0, 0xE9B5, 0xFC41, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0xE9B7, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x88BC, 0xFC43, /* 0x80 */
+ 0, 0xE9B8, 0x95A9, 0xE9B6, 0, 0, 0xE9B9, 0xE9BA, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE9BB, /* 0x90 */
+ 0xE9BC, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE9BD, 0, 0x968E, 0x8E4C, 0, 0x8DF8, 0x914E, 0, /* 0xA0 */
+ 0, 0xFC44, 0, 0, 0xE9BE, 0, 0, 0, /* 0xB0 */
+ 0, 0xE9C1, 0, 0xFC45, 0, 0, 0, 0, /* 0xB0 */
+ 0xE9BF, 0, 0, 0, 0, 0, 0xE9C2, 0, /* 0xC0 */
+ 0, 0x8CEF, 0xE9C0, 0, 0, 0, 0, 0xE9C3, /* 0xC0 */
+ 0, 0xE9C4, 0xE9C5, 0, 0xE9C9, 0, 0x8E49, 0, /* 0xD0 */
+ 0, 0, 0, 0x91E2, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE9CA, 0xE9C7, 0xE9C6, 0xE9C8, 0, 0, 0, /* 0xE0 */
+ 0x8C7E, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE9CE, 0xE9CD, 0xE9CC, 0, 0, 0x88B1 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFC46, 0, 0, 0, 0xE9D8, 0, 0xE9D4, 0, /* 0x00 */
+ 0xE9D5, 0xE9D1, 0xE9D7, 0, 0xE9D3, 0x8A82, 0, 0, /* 0x00 */
+ 0x986B, 0, 0xE9D6, 0xE9D2, 0xE9D0, 0xE9CF, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE9DA, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE9DD, 0, 0, 0xE9DC, 0xE9DB, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x9568, 0xE9D9, 0x88F1, /* 0x20 */
+ 0xE9DE, 0, 0xE9E0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x8A8F, 0xE9CB, 0x8956, 0, 0, 0xE9E2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE9E1, 0xE9DF, /* 0x40 */
+ 0x924C, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x9690, 0, 0, 0, 0, 0x97D8, /* 0x50 */
+ 0, 0, 0xE9E3, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE9E4, 0, 0, 0, 0, 0, 0, 0xE9E5, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xE9E6, 0, /* 0x70 */
+ 0xE9E7, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x92B9, 0, 0xE9E8, /* 0xE0 */
+ 0, 0x94B5, 0, 0xE9ED, 0xE9E9, 0, 0, 0, /* 0xE0 */
+ 0xE9EA, 0, 0, 0x9650, 0x96C2, 0, 0x93CE /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE9EE, 0, 0, 0xE9EF, 0x93BC, /* 0x00 */
+ 0xE9EC, 0xE9EB, 0, 0, 0, 0, 0x89A8, 0, /* 0x00 */
+ 0, 0, 0xE9F7, 0, 0, 0xE9F6, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x8995, 0, 0, 0, 0xE9F4, /* 0x10 */
+ 0, 0, 0, 0xE9F3, 0, 0, 0xE9F1, 0, /* 0x20 */
+ 0x8A9B, 0, 0xE9F0, 0x8EB0, 0x89A7, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x8D83, 0, 0, 0xE9FA, 0xE9F9, /* 0x30 */
+ 0, 0xE9F8, 0, 0, 0xE9F5, 0, 0xE9FB, 0, /* 0x40 */
+ 0xE9FC, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEA44, 0xEA43, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xEA45, 0, 0, 0x894C, 0xEA40, 0xEA41, 0, /* 0x50 */
+ 0x8D94, 0x96B7, 0, 0, 0xEA42, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xFC48, 0x9651, 0, 0, 0xEA4A, /* 0x60 */
+ 0xFC47, 0, 0xEA46, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xEA4B, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEA48, /* 0x80 */
+ 0, 0xEA47, 0, 0, 0, 0, 0, 0x8C7B, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xEA4C, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xEA4D, 0, 0, 0, /* 0xA0 */
+ 0, 0xEA4E, 0, 0xEA49, 0, 0, 0, 0xE9F2, /* 0xA0 */
+ 0, 0, 0xEA4F, 0, 0x92DF, 0, 0, 0, /* 0xB0 */
+ 0xEA53, 0, 0xEA54, 0xEA52, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xEA51, 0xEA57, 0, 0xEA50, 0, 0xEA55, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEA56, /* 0xC0 */
+ 0, 0, 0, 0xEA59, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xEA58, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xEA5B, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xEA5C, 0, 0xEA5D, /* 0xE0 */
+ 0, 0, 0x9868, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xEA5A, 0x91E9, 0x8DEB, 0, 0, 0xEA5E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0xFC4A, 0xEA5F, 0xEA60, 0, 0, 0xEA61, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xEA62, 0, 0, /* 0x70 */
+ 0x8CB2, 0xEA63, 0, 0, 0, 0xEA64, 0, 0x8EAD, /* 0x70 */
+ 0, 0xEA65, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xEA66, 0, 0, 0xEA67, 0xEA68, 0, 0, 0, /* 0x80 */
+ 0, 0xEA6B, 0xEA69, 0x985B, 0, 0xEA6A, 0, 0x97ED, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xEA6C, 0, 0x97D9, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xEA6D, 0x949E, 0, /* 0xA0 */
+ 0, 0xEA6E, 0xEA70, 0, 0, 0xEA71, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xEA6F, 0x8D8D, 0x96CB, 0x9683, 0x9BF5, 0, 0x9F80, 0x969B, /* 0xB0 */
+ 0, 0, 0, 0, 0x89A9, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xEA73, 0x8B6F, 0xEA74, 0xEA75, /* 0xC0 */
+ 0xEA76, 0xFC4B, 0x8D95, 0, 0xEA77, 0, 0, 0, /* 0xD0 */
+ 0xE0D2, 0x96D9, 0, 0x91E1, 0xEA78, 0xEA7A, 0xEA79, 0, /* 0xD0 */
+ 0xEA7B, 0, 0, 0, 0, 0xEA7C, 0, 0, /* 0xE0 */
+ 0xEA7D, 0, 0, 0, 0, 0, 0, 0xEA7E, /* 0xE0 */
+ 0, 0, 0, 0, 0xEA80, 0, 0xEA81, 0xEA82, /* 0xF0 */
+ 0, 0xEA83, 0, 0xEA84, 0xEA85, 0xEA86 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEA87, /* 0x00 */
+ 0xEA88, 0, 0, 0, 0, 0, 0x9343, 0, /* 0x00 */
+ 0, 0, 0, 0x8CDB, 0, 0xEA8A, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x916C, 0xEA8B, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xEA8C, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x9540, 0, 0, 0xEA8D, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xEA8E, 0xE256, 0, 0, 0xE6D8, 0xE8EB, /* 0x40 */
+ 0, 0, 0xEA8F, 0, 0xEA90, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEA92, /* 0x50 */
+ 0xEA93, 0xEA94, 0x97EE, 0xEA91, 0, 0, 0xEA95, 0xEA96, /* 0x60 */
+ 0, 0, 0xEA98, 0, 0xEA97, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xEA9A, 0, 0, 0, 0xEA9B, 0xEA99, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x97B4, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xEA9C, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xEA9D, 0xE273, 0, 0, /* 0x90 */
+ 0xEA9E /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* this table includes some IBM Kanji's */
+
+sal_uInt16 const aImplUniToDBCSTab_MS932_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x20 */
+ 0xFAE0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xFBE9 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* this table includes some IBM Kanji's */
+
+sal_uInt16 const aImplUniToDBCSTab_MS932_FA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xFA90, 0xFA9B, /* 0x00 */
+ 0xFA9C, 0xFAB1, 0xFAD8, 0xFAE8, 0xFAEA, 0xFB58, 0xFB5E, 0xFB75, /* 0x10 */
+ 0xFB7D, 0xFB7E, 0xFB80, 0xFB82, 0xFB86, 0xFB89, 0xFB92, 0xFB9D, /* 0x10 */
+ 0xFB9F, 0xFBA0, 0xFBA9, 0xFBB1, 0xFBB3, 0xFBB4, 0xFBB7, 0xFBD3, /* 0x20 */
+ 0xFBDA, 0xFBEA, 0xFBF6, 0xFBF7, 0xFBF9, 0xFC49 /* 0x20 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_FE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEB64, 0xEB5C, 0, 0xEB51, 0, 0xEB69, 0xEB6A, 0xEB6F, /* 0x30 */
+ 0xEB70, 0xEB6B, 0xEB6C, 0xEB79, 0xEB7A, 0xEB73, 0xEB74, 0xEB71, /* 0x30 */
+ 0xEB72, 0xEB75, 0xEB76, 0xEB77, 0xEB78 /* 0x40 */
+ /* 0x40 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_SJIS_FF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8149, 0xFA57, 0x8194, 0x8190, 0x8193, 0x8195, 0xFA56, /* 0x00 */
+ 0x8169, 0x816A, 0x8196, 0x817B, 0x8143, 0x817C, 0x8144, 0x815E, /* 0x00 */
+ 0x824F, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, /* 0x10 */
+ 0x8257, 0x8258, 0x8146, 0x8147, 0x8183, 0x8181, 0x8184, 0x8148, /* 0x10 */
+ 0x8197, 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, /* 0x20 */
+ 0x8267, 0x8268, 0x8269, 0x826A, 0x826B, 0x826C, 0x826D, 0x826E, /* 0x20 */
+ 0x826F, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276, /* 0x30 */
+ 0x8277, 0x8278, 0x8279, 0x816D, 0x815F, 0x816E, 0x814F, 0x8151, /* 0x30 */
+ 0x814D, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, /* 0x40 */
+ 0x8288, 0x8289, 0x828A, 0x828B, 0x828C, 0x828D, 0x828E, 0x828F, /* 0x40 */
+ 0x8290, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, /* 0x50 */
+ 0x8298, 0x8299, 0x829A, 0x816F, 0x8162, 0x8170, 0x8160, 0, /* 0x50 */
+ 0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0x60 */
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0x60 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0x70 */
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0x70 */
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0x80 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0x80 */
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0x90 */
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x8191, 0x8192, 0x81CA, 0x8150, 0xFA55, 0x818F /* 0xE0 */
+ /* 0xE0 */
+};
+
diff --git a/sal/textenc/tcvtjp3.tab b/sal/textenc/tcvtjp3.tab
new file mode 100644
index 000000000..d1c53d0c4
--- /dev/null
+++ b/sal/textenc/tcvtjp3.tab
@@ -0,0 +1,2905 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the DBCS to UniCode tables for the following */
+/* japanese charsets: JIS201, JIS208, JIS212 */
+
+/* For compatibility reasons, the Shift-JIS row 8740--879E as defined in
+ http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT
+ ("Table version: 2.01," "Date: 04/15/98") is used as the 13th row (i.e.,
+ ISO-2022-JP 2D21--2D7E) of JIS X 0208 (officially, that 13th row contains no
+ characters).
+ */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, /* 0x20 */
+ 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, /* 0x20 */
+ 0xFF3E, 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, /* 0x30 */
+ 0x4EDD, 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, /* 0x30 */
+ 0x005C, 0x301C, 0x2016, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, /* 0x40 */
+ 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, /* 0x40 */
+ 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, /* 0x50 */
+ 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0x2212, 0x00B1, 0x00D7, /* 0x50 */
+ 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, /* 0x60 */
+ 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, /* 0x60 */
+ 0xFF04, 0x00A2, 0x00A3, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, /* 0x70 */
+ 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, /* 0x20 */
+ 0x203B, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, /* 0x30 */
+ 0x222A, 0x2229, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x2227, 0x2228, 0x00AC, 0x21D2, 0x21D4, 0x2200, /* 0x40 */
+ 0x2203, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x2220, 0x22A5, 0x2312, 0x2202, /* 0x50 */
+ 0x2207, 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, /* 0x60 */
+ 0x2235, 0x222B, 0x222C, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, /* 0x70 */
+ 0x2021, 0x00B6, 0, 0, 0, 0, 0x25EF /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_23[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, /* 0x30 */
+ 0xFF18, 0xFF19, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, /* 0x40 */
+ 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, /* 0x40 */
+ 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, /* 0x50 */
+ 0xFF38, 0xFF39, 0xFF3A, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0x60 */
+ 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0x60 */
+ 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, /* 0x70 */
+ 0xFF58, 0xFF59, 0xFF5A /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_24[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0x20 */
+ 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, /* 0x20 */
+ 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, /* 0x30 */
+ 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, /* 0x30 */
+ 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, /* 0x40 */
+ 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, /* 0x40 */
+ 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, /* 0x50 */
+ 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, /* 0x50 */
+ 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0x60 */
+ 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, /* 0x60 */
+ 0x3090, 0x3091, 0x3092, 0x3093 /* 0x70 */
+ /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_25[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, /* 0x20 */
+ 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0x20 */
+ 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0x30 */
+ 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0x30 */
+ 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0x40 */
+ 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0x40 */
+ 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0x50 */
+ 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0x50 */
+ 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0x60 */
+ 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, /* 0x60 */
+ 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6 /* 0x70 */
+ /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0x20 */
+ 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0x20 */
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, /* 0x30 */
+ 0x03A9, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0x40 */
+ 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0x40 */
+ 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, /* 0x50 */
+ 0x03C9 /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_27[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, /* 0x20 */
+ 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, /* 0x20 */
+ 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, /* 0x30 */
+ 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, /* 0x30 */
+ 0x042E, 0x042F, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, /* 0x50 */
+ 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, /* 0x50 */
+ 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0x60 */
+ 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0x60 */
+ 0x044E, 0x044F /* 0x70 */
+ /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_28[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, /* 0x20 */
+ 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, /* 0x20 */
+ 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, /* 0x30 */
+ 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, /* 0x30 */
+ 0x2542 /* 0x40 */
+ /* 0x40 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_2D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, /* 0x20 */
+ 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, /* 0x20 */
+ 0x246F, 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162, /* 0x30 */
+ 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0, /* 0x30 */
+ 0x3349, 0x3314, 0x3322, 0x334D, 0x3318, 0x3327, 0x3303, 0x3336, /* 0x40 */
+ 0x3351, 0x3357, 0x330D, 0x3326, 0x3323, 0x332B, 0x334A, 0x333B, /* 0x40 */
+ 0x339C, 0x339D, 0x339E, 0x338E, 0x338F, 0x33C4, 0x33A1, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x337B, /* 0x50 */
+ 0x301D, 0x301F, 0x2116, 0x33CD, 0x2121, 0x32A4, 0x32A5, 0x32A6, /* 0x60 */
+ 0x32A7, 0x32A8, 0x3231, 0x3232, 0x3239, 0x337E, 0x337D, 0x337C, /* 0x60 */
+ 0x2252, 0x2261, 0x222B, 0x222E, 0x2211, 0x221A, 0x22A5, 0x2220, /* 0x70 */
+ 0x221F, 0x22BF, 0x2235, 0x2229, 0x222A /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, /* 0x20 */
+ 0x59F6, 0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, /* 0x20 */
+ 0x65ED, 0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, /* 0x30 */
+ 0x5B9B, 0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, /* 0x30 */
+ 0x7C9F, 0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, /* 0x40 */
+ 0x978D, 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, /* 0x40 */
+ 0x5937, 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, /* 0x50 */
+ 0x6905, 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, /* 0x50 */
+ 0x840E, 0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, /* 0x60 */
+ 0x57DF, 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, /* 0x60 */
+ 0x7A32, 0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, /* 0x70 */
+ 0x56E0, 0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_31[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, /* 0x20 */
+ 0x70CF, 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, /* 0x20 */
+ 0x7893, 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, /* 0x30 */
+ 0x59E5, 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, /* 0x30 */
+ 0x96F2, 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, /* 0x40 */
+ 0x66F3, 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, /* 0x40 */
+ 0x9834, 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, /* 0x50 */
+ 0x99C5, 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, /* 0x50 */
+ 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, /* 0x60 */
+ 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, /* 0x60 */
+ 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, /* 0x70 */
+ 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, /* 0x20 */
+ 0x8956, 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, /* 0x20 */
+ 0x5C4B, 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, /* 0x30 */
+ 0x6069, 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, /* 0x30 */
+ 0x4F3D, 0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, /* 0x40 */
+ 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, /* 0x40 */
+ 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, /* 0x50 */
+ 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, /* 0x50 */
+ 0x8FE6, 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, /* 0x60 */
+ 0x753B, 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, /* 0x60 */
+ 0x4ECB, 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, /* 0x70 */
+ 0x602A, 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, /* 0x20 */
+ 0x7D75, 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, /* 0x20 */
+ 0x5916, 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, /* 0x30 */
+ 0x84CB, 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, /* 0x30 */
+ 0x57A3, 0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, /* 0x40 */
+ 0x62E1, 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, /* 0x40 */
+ 0x899A, 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, /* 0x50 */
+ 0x5B66, 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, /* 0x50 */
+ 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, /* 0x60 */
+ 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, /* 0x60 */
+ 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, /* 0x70 */
+ 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_34[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, /* 0x20 */
+ 0x5BD2, 0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, /* 0x20 */
+ 0x5B8C, 0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, /* 0x30 */
+ 0x61BE, 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, /* 0x30 */
+ 0x6C57, 0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, /* 0x40 */
+ 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, /* 0x40 */
+ 0x839E, 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, /* 0x50 */
+ 0x95A2, 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, /* 0x50 */
+ 0x5DCC, 0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, /* 0x60 */
+ 0x9811, 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, /* 0x60 */
+ 0x57FA, 0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, /* 0x70 */
+ 0x63EE, 0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_35[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, /* 0x20 */
+ 0x5B63, 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, /* 0x20 */
+ 0x8ECC, 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, /* 0x30 */
+ 0x5993, 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, /* 0x30 */
+ 0x7947, 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, /* 0x40 */
+ 0x5409, 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, /* 0x40 */
+ 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, /* 0x50 */
+ 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, /* 0x50 */
+ 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, /* 0x60 */
+ 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, /* 0x60 */
+ 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, /* 0x70 */
+ 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_36[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, /* 0x20 */
+ 0x5354, 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, /* 0x20 */
+ 0x5F4A, 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, /* 0x30 */
+ 0x72C2, 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, /* 0x30 */
+ 0x93E1, 0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, /* 0x40 */
+ 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, /* 0x40 */
+ 0x52E4, 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, /* 0x50 */
+ 0x7981, 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, /* 0x50 */
+ 0x8B39, 0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, /* 0x60 */
+ 0x533A, 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, /* 0x60 */
+ 0x99D2, 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, /* 0x70 */
+ 0x9047, 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_37[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, /* 0x20 */
+ 0x9688, 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, /* 0x20 */
+ 0x85AB, 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, /* 0x30 */
+ 0x4FC2, 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, /* 0x30 */
+ 0x5951, 0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, /* 0x40 */
+ 0x643A, 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, /* 0x40 */
+ 0x7D4C, 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, /* 0x50 */
+ 0x8A63, 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, /* 0x50 */
+ 0x5287, 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, /* 0x60 */
+ 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, /* 0x60 */
+ 0x5039, 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, /* 0x70 */
+ 0x5805, 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_38[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, /* 0x20 */
+ 0x7D79, 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, /* 0x20 */
+ 0x9375, 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, /* 0x30 */
+ 0x5E7B, 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, /* 0x30 */
+ 0x8A00, 0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, /* 0x40 */
+ 0x59D1, 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, /* 0x40 */
+ 0x6E56, 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, /* 0x50 */
+ 0x8A87, 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, /* 0x50 */
+ 0x4F0D, 0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, /* 0x60 */
+ 0x68A7, 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, /* 0x60 */
+ 0x4E5E, 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, /* 0x70 */
+ 0x516C, 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_39[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, /* 0x20 */
+ 0x5B8F, 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, /* 0x20 */
+ 0x5F18, 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, /* 0x30 */
+ 0x6643, 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, /* 0x30 */
+ 0x6D69, 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, /* 0x40 */
+ 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, /* 0x40 */
+ 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, /* 0x50 */
+ 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, /* 0x50 */
+ 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, /* 0x60 */
+ 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, /* 0x60 */
+ 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, /* 0x70 */
+ 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_3A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, /* 0x20 */
+ 0x6068, 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, /* 0x20 */
+ 0x7D3A, 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, /* 0x30 */
+ 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, /* 0x30 */
+ 0x88DF, 0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, /* 0x40 */
+ 0x54C9, 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, /* 0x40 */
+ 0x6B73, 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, /* 0x50 */
+ 0x658E, 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, /* 0x50 */
+ 0x6750, 0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, /* 0x60 */
+ 0x80B4, 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, /* 0x60 */
+ 0x548B, 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, /* 0x70 */
+ 0x932F, 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_3B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, /* 0x20 */
+ 0x96D1, 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, /* 0x20 */
+ 0x4E09, 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, /* 0x30 */
+ 0x71E6, 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, /* 0x30 */
+ 0x9178, 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, /* 0x40 */
+ 0x4F7F, 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, /* 0x40 */
+ 0x59C9, 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, /* 0x50 */
+ 0x6307, 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, /* 0x50 */
+ 0x6B7B, 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, /* 0x60 */
+ 0x80A2, 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, /* 0x60 */
+ 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, /* 0x70 */
+ 0x4F8D, 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_3C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, /* 0x20 */
+ 0x793A, 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, /* 0x20 */
+ 0x5F0F, 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, /* 0x30 */
+ 0x53F1, 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, /* 0x30 */
+ 0x75BE, 0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, /* 0x40 */
+ 0x5C61, 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, /* 0x40 */
+ 0x659C, 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, /* 0x50 */
+ 0x86C7, 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, /* 0x50 */
+ 0x914C, 0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, /* 0x60 */
+ 0x53D6, 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, /* 0x60 */
+ 0x816B, 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, /* 0x70 */
+ 0x6388, 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_3D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, /* 0x20 */
+ 0x79C0, 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, /* 0x20 */
+ 0x8846, 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, /* 0x30 */
+ 0x96C6, 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, /* 0x30 */
+ 0x67D4, 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, /* 0x40 */
+ 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, /* 0x40 */
+ 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, /* 0x50 */
+ 0x821C, 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, /* 0x50 */
+ 0x6E96, 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, /* 0x60 */
+ 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, /* 0x60 */
+ 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, /* 0x70 */
+ 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_3E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, /* 0x20 */
+ 0x5617, 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, /* 0x20 */
+ 0x5C1A, 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, /* 0x30 */
+ 0x638C, 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, /* 0x30 */
+ 0x6A1F, 0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, /* 0x40 */
+ 0x7167, 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, /* 0x40 */
+ 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, /* 0x50 */
+ 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, /* 0x50 */
+ 0x9266, 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, /* 0x60 */
+ 0x4E57, 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, /* 0x60 */
+ 0x60C5, 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, /* 0x70 */
+ 0x84B8, 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_3F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, /* 0x20 */
+ 0x89E6, 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, /* 0x20 */
+ 0x5507, 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, /* 0x30 */
+ 0x664B, 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, /* 0x30 */
+ 0x795E, 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, /* 0x40 */
+ 0x8EAB, 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, /* 0x40 */
+ 0x5875, 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, /* 0x50 */
+ 0x9663, 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, /* 0x50 */
+ 0x9017, 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, /* 0x60 */
+ 0x7C8B, 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, /* 0x60 */
+ 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, /* 0x70 */
+ 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_40[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, /* 0x20 */
+ 0x51C4, 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, /* 0x20 */
+ 0x6574, 0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, /* 0x30 */
+ 0x751F, 0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, /* 0x30 */
+ 0x8A93, 0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, /* 0x40 */
+ 0x8106, 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, /* 0x40 */
+ 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, /* 0x50 */
+ 0x8E5F, 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, /* 0x50 */
+ 0x7A83, 0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, /* 0x60 */
+ 0x5148, 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, /* 0x60 */
+ 0x6247, 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, /* 0x70 */
+ 0x6F5C, 0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_41[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, /* 0x20 */
+ 0x8CCE, 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, /* 0x20 */
+ 0x524D, 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, /* 0x30 */
+ 0x7CCE, 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, /* 0x30 */
+ 0x72D9, 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, /* 0x40 */
+ 0x7D44, 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, /* 0x40 */
+ 0x53CC, 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, /* 0x50 */
+ 0x5C64, 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, /* 0x50 */
+ 0x64CD, 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, /* 0x60 */
+ 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, /* 0x60 */
+ 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, /* 0x70 */
+ 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_42[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, /* 0x20 */
+ 0x5373, 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, /* 0x20 */
+ 0x5C5E, 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, /* 0x30 */
+ 0x5B58, 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, /* 0x30 */
+ 0x592A, 0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, /* 0x40 */
+ 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, /* 0x40 */
+ 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, /* 0x50 */
+ 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, /* 0x50 */
+ 0x9000, 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, /* 0x60 */
+ 0x7B2C, 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, /* 0x60 */
+ 0x5B85, 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, /* 0x70 */
+ 0x9438, 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_43[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, /* 0x20 */
+ 0x7AEA, 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, /* 0x20 */
+ 0x4E39, 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, /* 0x30 */
+ 0x6DE1, 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, /* 0x30 */
+ 0x80C6, 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, /* 0x40 */
+ 0x6696, 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, /* 0x40 */
+ 0x5F1B, 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, /* 0x50 */
+ 0x8718, 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, /* 0x50 */
+ 0x9010, 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, /* 0x60 */
+ 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, /* 0x60 */
+ 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, /* 0x70 */
+ 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_44[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, /* 0x20 */
+ 0x61F2, 0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, /* 0x20 */
+ 0x8074, 0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, /* 0x30 */
+ 0x929A, 0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, /* 0x30 */
+ 0x6C88, 0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, /* 0x40 */
+ 0x69CC, 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, /* 0x40 */
+ 0x69FB, 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, /* 0x50 */
+ 0x693F, 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, /* 0x50 */
+ 0x91E3, 0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, /* 0x60 */
+ 0x5448, 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, /* 0x60 */
+ 0x608C, 0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, /* 0x70 */
+ 0x7A0B, 0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_45[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, /* 0x20 */
+ 0x6575, 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, /* 0x20 */
+ 0x5FB9, 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, /* 0x30 */
+ 0x5C55, 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, /* 0x30 */
+ 0x70B9, 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, /* 0x40 */
+ 0x5835, 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, /* 0x40 */
+ 0x767B, 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, /* 0x50 */
+ 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, /* 0x50 */
+ 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, /* 0x60 */
+ 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, /* 0x60 */
+ 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, /* 0x70 */
+ 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_46[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, /* 0x20 */
+ 0x9003, 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, /* 0x20 */
+ 0x52D5, 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, /* 0x30 */
+ 0x7AE5, 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, /* 0x30 */
+ 0x5F97, 0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, /* 0x40 */
+ 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, /* 0x40 */
+ 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, /* 0x50 */
+ 0x6566, 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, /* 0x50 */
+ 0x5948, 0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, /* 0x60 */
+ 0x637A, 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, /* 0x60 */
+ 0x8EDF, 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, /* 0x70 */
+ 0x8CD1, 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_47[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, /* 0x20 */
+ 0x6FE1, 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, /* 0x20 */
+ 0x5FF5, 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, /* 0x30 */
+ 0x57DC, 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, /* 0x30 */
+ 0x8FB2, 0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, /* 0x40 */
+ 0x6CE2, 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, /* 0x40 */
+ 0x4FF3, 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, /* 0x50 */
+ 0x80CC, 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, /* 0x50 */
+ 0x6973, 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, /* 0x60 */
+ 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, /* 0x60 */
+ 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, /* 0x70 */
+ 0x66DD, 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_48[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, /* 0x20 */
+ 0x5E61, 0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, /* 0x20 */
+ 0x9197, 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, /* 0x30 */
+ 0x567A, 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, /* 0x30 */
+ 0x53DB, 0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, /* 0x40 */
+ 0x72AF, 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, /* 0x40 */
+ 0x91C6, 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, /* 0x50 */
+ 0x78D0, 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, /* 0x50 */
+ 0x5F7C, 0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, /* 0x60 */
+ 0x75B2, 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, /* 0x60 */
+ 0x8AB9, 0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, /* 0x70 */
+ 0x5C3E, 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_49[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, /* 0x20 */
+ 0x819D, 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, /* 0x20 */
+ 0x6867, 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, /* 0x30 */
+ 0x6A19, 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, /* 0x30 */
+ 0x5EDF, 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, /* 0x40 */
+ 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, /* 0x40 */
+ 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, /* 0x50 */
+ 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, /* 0x50 */
+ 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, /* 0x60 */
+ 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, /* 0x60 */
+ 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, /* 0x70 */
+ 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_4A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, /* 0x20 */
+ 0x6CB8, 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, /* 0x20 */
+ 0x61A4, 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, /* 0x30 */
+ 0x6587, 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, /* 0x30 */
+ 0x5F0A, 0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, /* 0x40 */
+ 0x50FB, 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, /* 0x40 */
+ 0x504F, 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, /* 0x50 */
+ 0x4FBF, 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, /* 0x50 */
+ 0x5703, 0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, /* 0x60 */
+ 0x5893, 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, /* 0x60 */
+ 0x4FF8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, /* 0x70 */
+ 0x5D29, 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_4B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, /* 0x20 */
+ 0x840C, 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, /* 0x20 */
+ 0x98FD, 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, /* 0x30 */
+ 0x59A8, 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, /* 0x30 */
+ 0x68D2, 0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, /* 0x40 */
+ 0x927E, 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, /* 0x40 */
+ 0x64B2, 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, /* 0x50 */
+ 0x6B86, 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, /* 0x50 */
+ 0x6469, 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, /* 0x60 */
+ 0x6BCE, 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, /* 0x60 */
+ 0x9C52, 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, /* 0x70 */
+ 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_4C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, /* 0x20 */
+ 0x5CAC, 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, /* 0x20 */
+ 0x7C8D, 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, /* 0x30 */
+ 0x9727, 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, /* 0x30 */
+ 0x660E, 0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, /* 0x40 */
+ 0x514D, 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, /* 0x40 */
+ 0x8302, 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, /* 0x50 */
+ 0x8499, 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, /* 0x50 */
+ 0x5C24, 0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, /* 0x60 */
+ 0x5301, 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, /* 0x60 */
+ 0x77E2, 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, /* 0x70 */
+ 0x67F3, 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_4D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, /* 0x20 */
+ 0x5BA5, 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, /* 0x20 */
+ 0x6D8C, 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, /* 0x30 */
+ 0x9091, 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, /* 0x30 */
+ 0x8A89, 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, /* 0x40 */
+ 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, /* 0x40 */
+ 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, /* 0x50 */
+ 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, /* 0x50 */
+ 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, /* 0x60 */
+ 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, /* 0x60 */
+ 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, /* 0x70 */
+ 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, /* 0x20 */
+ 0x7387, 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, /* 0x20 */
+ 0x7409, 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, /* 0x30 */
+ 0x616E, 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, /* 0x30 */
+ 0x5BEE, 0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, /* 0x40 */
+ 0x7CE7, 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, /* 0x40 */
+ 0x7DD1, 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, /* 0x50 */
+ 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, /* 0x50 */
+ 0x985E, 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, /* 0x60 */
+ 0x73B2, 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, /* 0x60 */
+ 0x9F62, 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, /* 0x70 */
+ 0x604B, 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, /* 0x20 */
+ 0x8CC2, 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, /* 0x20 */
+ 0x697C, 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, /* 0x30 */
+ 0x807E, 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, /* 0x30 */
+ 0x8AD6, 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, /* 0x40 */
+ 0x67A0, 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, /* 0x40 */
+ 0x6900, 0x6E7E, 0x7897, 0x8155 /* 0x50 */
+ /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, /* 0x20 */
+ 0x4E3F, 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, /* 0x20 */
+ 0x8212, 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, /* 0x30 */
+ 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, /* 0x30 */
+ 0x4EDE, 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, /* 0x40 */
+ 0x4F5D, 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, /* 0x40 */
+ 0x4F69, 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, /* 0x50 */
+ 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, /* 0x50 */
+ 0x4FE5, 0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, /* 0x60 */
+ 0x4FF6, 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, /* 0x60 */
+ 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, /* 0x70 */
+ 0x506C, 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, /* 0x20 */
+ 0x50ED, 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, /* 0x20 */
+ 0x5116, 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, /* 0x30 */
+ 0x513B, 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, /* 0x30 */
+ 0x5169, 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, /* 0x40 */
+ 0x518F, 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, /* 0x40 */
+ 0x51A9, 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, /* 0x50 */
+ 0x51BD, 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, /* 0x50 */
+ 0x51F0, 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, /* 0x60 */
+ 0x522A, 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, /* 0x60 */
+ 0x525E, 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, /* 0x70 */
+ 0x528D, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, /* 0x20 */
+ 0x52D7, 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, /* 0x20 */
+ 0x52F8, 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, /* 0x30 */
+ 0x5315, 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, /* 0x30 */
+ 0x5346, 0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, /* 0x40 */
+ 0x536E, 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, /* 0x40 */
+ 0x53A5, 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, /* 0x50 */
+ 0x66FC, 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, /* 0x50 */
+ 0x5440, 0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, /* 0x60 */
+ 0x544E, 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, /* 0x60 */
+ 0x5492, 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, /* 0x70 */
+ 0x54A2, 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, /* 0x20 */
+ 0x54E6, 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, /* 0x20 */
+ 0x5539, 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, /* 0x30 */
+ 0x5557, 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, /* 0x30 */
+ 0x559F, 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, /* 0x40 */
+ 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, /* 0x40 */
+ 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, /* 0x50 */
+ 0x55F9, 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, /* 0x50 */
+ 0x566B, 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, /* 0x60 */
+ 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, /* 0x60 */
+ 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, /* 0x70 */
+ 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, /* 0x20 */
+ 0x571C, 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, /* 0x20 */
+ 0x5769, 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, /* 0x30 */
+ 0x57B3, 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, /* 0x30 */
+ 0x57D3, 0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, /* 0x40 */
+ 0x5821, 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, /* 0x40 */
+ 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, /* 0x50 */
+ 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, /* 0x50 */
+ 0x58DC, 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, /* 0x60 */
+ 0x58FD, 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, /* 0x60 */
+ 0x592D, 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, /* 0x70 */
+ 0x595A, 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, /* 0x20 */
+ 0x59C6, 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, /* 0x20 */
+ 0x5A11, 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, /* 0x30 */
+ 0x5A36, 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, /* 0x30 */
+ 0x5ABD, 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, /* 0x40 */
+ 0x5B0C, 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, /* 0x40 */
+ 0x5B43, 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, /* 0x50 */
+ 0x5B69, 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, /* 0x50 */
+ 0x5B83, 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, /* 0x60 */
+ 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, /* 0x60 */
+ 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, /* 0x70 */
+ 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, /* 0x20 */
+ 0x5C79, 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, /* 0x20 */
+ 0x5CBC, 0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, /* 0x30 */
+ 0x5CFA, 0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, /* 0x30 */
+ 0x5D1F, 0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, /* 0x40 */
+ 0x5D4C, 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, /* 0x40 */
+ 0x5D84, 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, /* 0x50 */
+ 0x5DB7, 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, /* 0x50 */
+ 0x5DEB, 0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, /* 0x60 */
+ 0x5E36, 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, /* 0x60 */
+ 0x5E5F, 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, /* 0x70 */
+ 0x5E7F, 0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, /* 0x20 */
+ 0x5EE8, 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, /* 0x20 */
+ 0x5EFE, 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, /* 0x30 */
+ 0x5F29, 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, /* 0x30 */
+ 0x5F51, 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, /* 0x40 */
+ 0x5F83, 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, /* 0x40 */
+ 0x5F99, 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, /* 0x50 */
+ 0x5FE4, 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, /* 0x50 */
+ 0x6019, 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, /* 0x60 */
+ 0x6026, 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, /* 0x60 */
+ 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, /* 0x70 */
+ 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, /* 0x20 */
+ 0x60E1, 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, /* 0x20 */
+ 0x60B5, 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, /* 0x30 */
+ 0x60F4, 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, /* 0x30 */
+ 0x6147, 0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, /* 0x40 */
+ 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, /* 0x40 */
+ 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, /* 0x50 */
+ 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, /* 0x50 */
+ 0x618A, 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, /* 0x60 */
+ 0x61C8, 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, /* 0x60 */
+ 0x61E3, 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, /* 0x70 */
+ 0x6200, 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, /* 0x20 */
+ 0x6241, 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, /* 0x20 */
+ 0x6282, 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, /* 0x30 */
+ 0x6294, 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, /* 0x30 */
+ 0x62C8, 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, /* 0x40 */
+ 0x630C, 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, /* 0x40 */
+ 0x6350, 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, /* 0x50 */
+ 0x63AB, 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, /* 0x50 */
+ 0x6369, 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, /* 0x60 */
+ 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, /* 0x60 */
+ 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, /* 0x70 */
+ 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, /* 0x20 */
+ 0x64F1, 0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, /* 0x20 */
+ 0x652C, 0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, /* 0x30 */
+ 0x651C, 0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, /* 0x30 */
+ 0x6536, 0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, /* 0x40 */
+ 0x655E, 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, /* 0x40 */
+ 0x659F, 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, /* 0x50 */
+ 0x65D2, 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, /* 0x50 */
+ 0x6603, 0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, /* 0x60 */
+ 0x6644, 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, /* 0x60 */
+ 0x665F, 0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, /* 0x70 */
+ 0x6698, 0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, /* 0x20 */
+ 0x66E9, 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, /* 0x20 */
+ 0x6727, 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, /* 0x30 */
+ 0x6746, 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, /* 0x30 */
+ 0x67A9, 0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, /* 0x40 */
+ 0x67B7, 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, /* 0x40 */
+ 0x67DE, 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, /* 0x50 */
+ 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, /* 0x50 */
+ 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, /* 0x60 */
+ 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, /* 0x60 */
+ 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, /* 0x70 */
+ 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, /* 0x20 */
+ 0x68E3, 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, /* 0x20 */
+ 0x6923, 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, /* 0x30 */
+ 0x6954, 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, /* 0x30 */
+ 0x6961, 0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, /* 0x40 */
+ 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, /* 0x40 */
+ 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, /* 0x50 */
+ 0x69B4, 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, /* 0x50 */
+ 0x69F2, 0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, /* 0x60 */
+ 0x6A0A, 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, /* 0x60 */
+ 0x6A36, 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, /* 0x70 */
+ 0x6A22, 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, /* 0x20 */
+ 0x6AAC, 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, /* 0x20 */
+ 0x6B05, 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, /* 0x30 */
+ 0x6B37, 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, /* 0x30 */
+ 0x6B59, 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, /* 0x40 */
+ 0x6B80, 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, /* 0x40 */
+ 0x6BAA, 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, /* 0x50 */
+ 0x6BC6, 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, /* 0x50 */
+ 0x9EBE, 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, /* 0x60 */
+ 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, /* 0x60 */
+ 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, /* 0x70 */
+ 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, /* 0x20 */
+ 0x6D36, 0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, /* 0x20 */
+ 0x6D0C, 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, /* 0x30 */
+ 0x6D95, 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, /* 0x30 */
+ 0x6DE6, 0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, /* 0x40 */
+ 0x6DC5, 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, /* 0x40 */
+ 0x6E6E, 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, /* 0x50 */
+ 0x6E2B, 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, /* 0x50 */
+ 0x6EFF, 0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, /* 0x60 */
+ 0x6ED3, 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, /* 0x60 */
+ 0x6EA5, 0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, /* 0x70 */
+ 0x6EFE, 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, /* 0x20 */
+ 0x6F80, 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, /* 0x20 */
+ 0x6F8E, 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, /* 0x30 */
+ 0x6FB9, 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, /* 0x30 */
+ 0x6FF1, 0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, /* 0x40 */
+ 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, /* 0x40 */
+ 0x7030, 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, /* 0x50 */
+ 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, /* 0x50 */
+ 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, /* 0x60 */
+ 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, /* 0x60 */
+ 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, /* 0x70 */
+ 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, /* 0x20 */
+ 0x722C, 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, /* 0x20 */
+ 0x724B, 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, /* 0x30 */
+ 0x7296, 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, /* 0x30 */
+ 0x72CE, 0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, /* 0x40 */
+ 0x7317, 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, /* 0x40 */
+ 0x7325, 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, /* 0x50 */
+ 0x7370, 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, /* 0x50 */
+ 0x73BB, 0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, /* 0x60 */
+ 0x7425, 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, /* 0x60 */
+ 0x7441, 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, /* 0x70 */
+ 0x748B, 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, /* 0x20 */
+ 0x74F1, 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, /* 0x20 */
+ 0x750D, 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, /* 0x30 */
+ 0x754D, 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, /* 0x30 */
+ 0x7567, 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, /* 0x40 */
+ 0x758A, 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, /* 0x40 */
+ 0x75C2, 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, /* 0x50 */
+ 0x75CD, 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, /* 0x50 */
+ 0x75FC, 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, /* 0x60 */
+ 0x7609, 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, /* 0x60 */
+ 0x7630, 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, /* 0x70 */
+ 0x7662, 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, /* 0x20 */
+ 0x768B, 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, /* 0x20 */
+ 0x76B8, 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, /* 0x30 */
+ 0x76E1, 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, /* 0x30 */
+ 0x7704, 0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, /* 0x40 */
+ 0x7738, 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, /* 0x40 */
+ 0x777E, 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, /* 0x50 */
+ 0x77B6, 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, /* 0x50 */
+ 0x77D7, 0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, /* 0x60 */
+ 0x7926, 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, /* 0x60 */
+ 0x789A, 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, /* 0x70 */
+ 0x78CB, 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, /* 0x20 */
+ 0x7919, 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, /* 0x20 */
+ 0x7955, 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, /* 0x30 */
+ 0x79AA, 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, /* 0x30 */
+ 0x79EC, 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, /* 0x40 */
+ 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, /* 0x40 */
+ 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, /* 0x50 */
+ 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, /* 0x50 */
+ 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, /* 0x60 */
+ 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, /* 0x60 */
+ 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, /* 0x70 */
+ 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, /* 0x20 */
+ 0x7B65, 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, /* 0x20 */
+ 0x7B98, 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, /* 0x30 */
+ 0x7B5D, 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, /* 0x30 */
+ 0x7BDD, 0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, /* 0x40 */
+ 0x7C07, 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, /* 0x40 */
+ 0x7C27, 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, /* 0x50 */
+ 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, /* 0x50 */
+ 0x7C65, 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, /* 0x60 */
+ 0x7CAB, 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, /* 0x60 */
+ 0x7CBD, 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, /* 0x70 */
+ 0x9B3B, 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, /* 0x20 */
+ 0x7D32, 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, /* 0x20 */
+ 0x7D68, 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, /* 0x30 */
+ 0x7D7D, 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, /* 0x30 */
+ 0x7DAB, 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, /* 0x40 */
+ 0x7DD8, 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, /* 0x40 */
+ 0x7E0A, 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, /* 0x50 */
+ 0x7E22, 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, /* 0x50 */
+ 0x7E32, 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, /* 0x60 */
+ 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, /* 0x60 */
+ 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, /* 0x70 */
+ 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, /* 0x20 */
+ 0x7F54, 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, /* 0x20 */
+ 0x7F82, 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, /* 0x30 */
+ 0x7F9D, 0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, /* 0x30 */
+ 0x7FB8, 0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, /* 0x40 */
+ 0x7FE6, 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, /* 0x40 */
+ 0x8012, 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, /* 0x50 */
+ 0x804A, 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, /* 0x50 */
+ 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, /* 0x60 */
+ 0x8086, 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, /* 0x60 */
+ 0x80DB, 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, /* 0x70 */
+ 0x80EF, 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, /* 0x20 */
+ 0x816E, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, /* 0x20 */
+ 0x8182, 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, /* 0x30 */
+ 0x81B0, 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, /* 0x30 */
+ 0x81C9, 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, /* 0x40 */
+ 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, /* 0x40 */
+ 0x8207, 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, /* 0x50 */
+ 0x8233, 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, /* 0x50 */
+ 0x8262, 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, /* 0x60 */
+ 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, /* 0x60 */
+ 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, /* 0x70 */
+ 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, /* 0x20 */
+ 0x8350, 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, /* 0x20 */
+ 0x83AA, 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, /* 0x30 */
+ 0x837C, 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, /* 0x30 */
+ 0x8413, 0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, /* 0x40 */
+ 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, /* 0x40 */
+ 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, /* 0x50 */
+ 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, /* 0x50 */
+ 0x846F, 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, /* 0x60 */
+ 0x84D9, 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, /* 0x60 */
+ 0x84A1, 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, /* 0x70 */
+ 0x8515, 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, /* 0x20 */
+ 0x8591, 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, /* 0x20 */
+ 0x859C, 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, /* 0x30 */
+ 0x85D0, 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, /* 0x30 */
+ 0x860B, 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, /* 0x40 */
+ 0x864D, 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, /* 0x40 */
+ 0x86A9, 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, /* 0x50 */
+ 0x86B0, 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, /* 0x50 */
+ 0x86DF, 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, /* 0x60 */
+ 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, /* 0x60 */
+ 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, /* 0x70 */
+ 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, /* 0x20 */
+ 0x87AF, 0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, /* 0x20 */
+ 0x87B3, 0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, /* 0x30 */
+ 0x880D, 0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, /* 0x30 */
+ 0x8815, 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, /* 0x40 */
+ 0x8844, 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, /* 0x40 */
+ 0x887E, 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, /* 0x50 */
+ 0x8892, 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, /* 0x50 */
+ 0x88B1, 0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, /* 0x60 */
+ 0x8902, 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, /* 0x60 */
+ 0x8913, 0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, /* 0x70 */
+ 0x893B, 0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, /* 0x20 */
+ 0x897E, 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, /* 0x20 */
+ 0x89A6, 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, /* 0x30 */
+ 0x89DA, 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, /* 0x30 */
+ 0x8A10, 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, /* 0x40 */
+ 0x8A52, 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, /* 0x40 */
+ 0x8A82, 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, /* 0x50 */
+ 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, /* 0x50 */
+ 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, /* 0x60 */
+ 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, /* 0x60 */
+ 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, /* 0x70 */
+ 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, /* 0x20 */
+ 0x8B8E, 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, /* 0x20 */
+ 0x8C3F, 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, /* 0x30 */
+ 0x8C78, 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, /* 0x30 */
+ 0x8C94, 0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, /* 0x40 */
+ 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, /* 0x40 */
+ 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, /* 0x50 */
+ 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, /* 0x50 */
+ 0x8D6D, 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, /* 0x60 */
+ 0x8DCF, 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, /* 0x60 */
+ 0x8DDF, 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, /* 0x70 */
+ 0x8E10, 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, /* 0x20 */
+ 0x8E60, 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, /* 0x20 */
+ 0x8E87, 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, /* 0x30 */
+ 0x8E99, 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, /* 0x30 */
+ 0x8EC5, 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, /* 0x40 */
+ 0x8EFE, 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, /* 0x40 */
+ 0x8F1F, 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, /* 0x50 */
+ 0x8F42, 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, /* 0x50 */
+ 0x8F62, 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, /* 0x60 */
+ 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, /* 0x60 */
+ 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, /* 0x70 */
+ 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, /* 0x20 */
+ 0x9056, 0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, /* 0x20 */
+ 0x9082, 0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, /* 0x30 */
+ 0x90AF, 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, /* 0x30 */
+ 0x9112, 0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, /* 0x40 */
+ 0x9165, 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, /* 0x40 */
+ 0x91AB, 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, /* 0x50 */
+ 0x91C9, 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, /* 0x50 */
+ 0x91F5, 0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, /* 0x60 */
+ 0x925E, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, /* 0x60 */
+ 0x924B, 0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, /* 0x70 */
+ 0x92B9, 0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, /* 0x20 */
+ 0x935C, 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, /* 0x20 */
+ 0x9394, 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, /* 0x30 */
+ 0x93DD, 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, /* 0x30 */
+ 0x9407, 0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, /* 0x40 */
+ 0x9452, 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, /* 0x40 */
+ 0x9470, 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, /* 0x50 */
+ 0x947F, 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, /* 0x50 */
+ 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, /* 0x60 */
+ 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, /* 0x60 */
+ 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, /* 0x70 */
+ 0x9642, 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, /* 0x20 */
+ 0x9695, 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, /* 0x20 */
+ 0x96B6, 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, /* 0x30 */
+ 0x96DC, 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, /* 0x30 */
+ 0x970E, 0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, /* 0x40 */
+ 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, /* 0x40 */
+ 0x975C, 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, /* 0x50 */
+ 0x9779, 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, /* 0x50 */
+ 0x9790, 0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, /* 0x60 */
+ 0x97C6, 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, /* 0x60 */
+ 0x97F6, 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, /* 0x70 */
+ 0x983D, 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, /* 0x20 */
+ 0x98C4, 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, /* 0x20 */
+ 0x9914, 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, /* 0x30 */
+ 0x992E, 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, /* 0x30 */
+ 0x9951, 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, /* 0x40 */
+ 0x99AE, 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, /* 0x40 */
+ 0x99EE, 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, /* 0x50 */
+ 0x99E2, 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, /* 0x50 */
+ 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, /* 0x60 */
+ 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, /* 0x60 */
+ 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, /* 0x70 */
+ 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, /* 0x20 */
+ 0x9B25, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, /* 0x20 */
+ 0x9B44, 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, /* 0x30 */
+ 0x9B93, 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, /* 0x30 */
+ 0x9BB4, 0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, /* 0x40 */
+ 0x9BE3, 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, /* 0x40 */
+ 0x9BF0, 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, /* 0x50 */
+ 0x9C12, 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, /* 0x50 */
+ 0x9C30, 0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, /* 0x60 */
+ 0x9C76, 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, /* 0x60 */
+ 0x9D03, 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, /* 0x70 */
+ 0x9D15, 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, /* 0x20 */
+ 0x9D89, 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, /* 0x20 */
+ 0x9DB2, 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, /* 0x30 */
+ 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, /* 0x30 */
+ 0x9E1A, 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, /* 0x40 */
+ 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, /* 0x40 */
+ 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, /* 0x50 */
+ 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, /* 0x50 */
+ 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, /* 0x60 */
+ 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, /* 0x60 */
+ 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, /* 0x70 */
+ 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0208_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199 /* 0x20 */
+ /* 0x20 */
+};
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x20 */
+ 0x02D8, /* 0x20 */
+ 0x02C7, 0x00B8, 0x02D9, 0x02DD, 0x00AF, 0x02DB, 0x02DA, 0x007E, /* 0x30 */
+ 0x0384, 0x0385, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x00A1, 0x00A6, 0x00BF, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x00BA, 0x00AA, 0x00A9, 0x00AE, 0x2122, /* 0x60 */
+ 0x00A4, 0x2116 /* 0x70 */
+ /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0386, 0x0388, 0x0389, 0x038A, 0x03AA, 0, 0x038C, /* 0x60 */
+ 0, 0x038E, 0x03AB, 0, 0x038F, 0, 0, 0, /* 0x60 */
+ 0, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03CA, 0x0390, 0x03CC, /* 0x70 */
+ 0x03C2, 0x03CD, 0x03CB, 0x03B0, 0x03CE /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_27[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, /* 0x40 */
+ 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x040E, 0x040F, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, /* 0x70 */
+ 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x045E, 0x045F /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_29[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C6, 0x0110, 0, 0x0126, 0, 0x0132, 0, /* 0x20 */
+ 0x0141, 0x013F, 0, 0x014A, 0x00D8, 0x0152, 0, 0x0166, /* 0x20 */
+ 0x00DE, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x00E6, 0x0111, 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138, /* 0x40 */
+ 0x0142, 0x0140, 0x0149, 0x014B, 0x00F8, 0x0153, 0x00DF, 0x0167, /* 0x40 */
+ 0x00FE /* 0x50 */
+ /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_2A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C1, 0x00C0, 0x00C4, 0x00C2, 0x0102, 0x01CD, 0x0100, /* 0x20 */
+ 0x0104, 0x00C5, 0x00C3, 0x0106, 0x0108, 0x010C, 0x00C7, 0x010A, /* 0x20 */
+ 0x010E, 0x00C9, 0x00C8, 0x00CB, 0x00CA, 0x011A, 0x0116, 0x0112, /* 0x30 */
+ 0x0118, 0, 0x011C, 0x011E, 0x0122, 0x0120, 0x0124, 0x00CD, /* 0x30 */
+ 0x00CC, 0x00CF, 0x00CE, 0x01CF, 0x0130, 0x012A, 0x012E, 0x0128, /* 0x40 */
+ 0x0134, 0x0136, 0x0139, 0x013D, 0x013B, 0x0143, 0x0147, 0x0145, /* 0x40 */
+ 0x00D1, 0x00D3, 0x00D2, 0x00D6, 0x00D4, 0x01D1, 0x0150, 0x014C, /* 0x50 */
+ 0x00D5, 0x0154, 0x0158, 0x0156, 0x015A, 0x015C, 0x0160, 0x015E, /* 0x50 */
+ 0x0164, 0x0162, 0x00DA, 0x00D9, 0x00DC, 0x00DB, 0x016C, 0x01D3, /* 0x60 */
+ 0x0170, 0x016A, 0x0172, 0x016E, 0x0168, 0x01D7, 0x01DB, 0x01D9, /* 0x60 */
+ 0x01D5, 0x0174, 0x00DD, 0x0178, 0x0176, 0x0179, 0x017D, 0x017B, /* 0x70 */
+ /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_2B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00E1, 0x00E0, 0x00E4, 0x00E2, 0x0103, 0x01CE, 0x0101, /* 0x20 */
+ 0x0105, 0x00E5, 0x00E3, 0x0107, 0x0109, 0x010D, 0x00E7, 0x010B, /* 0x20 */
+ 0x010F, 0x00E9, 0x00E8, 0x00EB, 0x00EA, 0x011B, 0x0117, 0x0113, /* 0x30 */
+ 0x0119, 0x01F5, 0x011D, 0x011F, 0, 0x0121, 0x0125, 0x00ED, /* 0x30 */
+ 0x00EC, 0x00EF, 0x00EE, 0x01D0, 0, 0x012B, 0x012F, 0x0129, /* 0x40 */
+ 0x0135, 0x0137, 0x013A, 0x013E, 0x013C, 0x0144, 0x0148, 0x0146, /* 0x40 */
+ 0x00F1, 0x00F3, 0x00F2, 0x00F6, 0x00F4, 0x01D2, 0x0151, 0x014D, /* 0x50 */
+ 0x00F5, 0x0155, 0x0159, 0x0157, 0x015B, 0x015D, 0x0161, 0x015F, /* 0x50 */
+ 0x0165, 0x0163, 0x00FA, 0x00F9, 0x00FC, 0x00FB, 0x016D, 0x01D4, /* 0x60 */
+ 0x0171, 0x016B, 0x0173, 0x016F, 0x0169, 0x01D8, 0x01DC, 0x01DA, /* 0x60 */
+ 0x01D6, 0x0175, 0x00FD, 0x00FF, 0x0177, 0x017A, 0x017E, 0x017C /* 0x70 */
+ /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E02, 0x4E04, 0x4E05, 0x4E0C, 0x4E12, 0x4E1F, 0x4E23, /* 0x20 */
+ 0x4E24, 0x4E28, 0x4E2B, 0x4E2E, 0x4E2F, 0x4E30, 0x4E35, 0x4E40, /* 0x20 */
+ 0x4E41, 0x4E44, 0x4E47, 0x4E51, 0x4E5A, 0x4E5C, 0x4E63, 0x4E68, /* 0x30 */
+ 0x4E69, 0x4E74, 0x4E75, 0x4E79, 0x4E7F, 0x4E8D, 0x4E96, 0x4E97, /* 0x30 */
+ 0x4E9D, 0x4EAF, 0x4EB9, 0x4EC3, 0x4ED0, 0x4EDA, 0x4EDB, 0x4EE0, /* 0x40 */
+ 0x4EE1, 0x4EE2, 0x4EE8, 0x4EEF, 0x4EF1, 0x4EF3, 0x4EF5, 0x4EFD, /* 0x40 */
+ 0x4EFE, 0x4EFF, 0x4F00, 0x4F02, 0x4F03, 0x4F08, 0x4F0B, 0x4F0C, /* 0x50 */
+ 0x4F12, 0x4F15, 0x4F16, 0x4F17, 0x4F19, 0x4F2E, 0x4F31, 0x4F60, /* 0x50 */
+ 0x4F33, 0x4F35, 0x4F37, 0x4F39, 0x4F3B, 0x4F3E, 0x4F40, 0x4F42, /* 0x60 */
+ 0x4F48, 0x4F49, 0x4F4B, 0x4F4C, 0x4F52, 0x4F54, 0x4F56, 0x4F58, /* 0x60 */
+ 0x4F5F, 0x4F63, 0x4F6A, 0x4F6C, 0x4F6E, 0x4F71, 0x4F77, 0x4F78, /* 0x70 */
+ 0x4F79, 0x4F7A, 0x4F7D, 0x4F7E, 0x4F81, 0x4F82, 0x4F84 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_31[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F85, 0x4F89, 0x4F8A, 0x4F8C, 0x4F8E, 0x4F90, 0x4F92, /* 0x20 */
+ 0x4F93, 0x4F94, 0x4F97, 0x4F99, 0x4F9A, 0x4F9E, 0x4F9F, 0x4FB2, /* 0x20 */
+ 0x4FB7, 0x4FB9, 0x4FBB, 0x4FBC, 0x4FBD, 0x4FBE, 0x4FC0, 0x4FC1, /* 0x30 */
+ 0x4FC5, 0x4FC6, 0x4FC8, 0x4FC9, 0x4FCB, 0x4FCC, 0x4FCD, 0x4FCF, /* 0x30 */
+ 0x4FD2, 0x4FDC, 0x4FE0, 0x4FE2, 0x4FF0, 0x4FF2, 0x4FFC, 0x4FFD, /* 0x40 */
+ 0x4FFF, 0x5000, 0x5001, 0x5004, 0x5007, 0x500A, 0x500C, 0x500E, /* 0x40 */
+ 0x5010, 0x5013, 0x5017, 0x5018, 0x501B, 0x501C, 0x501D, 0x501E, /* 0x50 */
+ 0x5022, 0x5027, 0x502E, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, /* 0x50 */
+ 0x5041, 0x5042, 0x5045, 0x5046, 0x504A, 0x504C, 0x504E, 0x5051, /* 0x60 */
+ 0x5052, 0x5053, 0x5057, 0x5059, 0x505F, 0x5060, 0x5062, 0x5063, /* 0x60 */
+ 0x5066, 0x5067, 0x506A, 0x506D, 0x5070, 0x5071, 0x503B, 0x5081, /* 0x70 */
+ 0x5083, 0x5084, 0x5086, 0x508A, 0x508E, 0x508F, 0x5090 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5092, 0x5093, 0x5094, 0x5096, 0x509B, 0x509C, 0x509E, /* 0x20 */
+ 0x509F, 0x50A0, 0x50A1, 0x50A2, 0x50AA, 0x50AF, 0x50B0, 0x50B9, /* 0x20 */
+ 0x50BA, 0x50BD, 0x50C0, 0x50C3, 0x50C4, 0x50C7, 0x50CC, 0x50CE, /* 0x30 */
+ 0x50D0, 0x50D3, 0x50D4, 0x50D8, 0x50DC, 0x50DD, 0x50DF, 0x50E2, /* 0x30 */
+ 0x50E4, 0x50E6, 0x50E8, 0x50E9, 0x50EF, 0x50F1, 0x50F6, 0x50FA, /* 0x40 */
+ 0x50FE, 0x5103, 0x5106, 0x5107, 0x5108, 0x510B, 0x510C, 0x510D, /* 0x40 */
+ 0x510E, 0x50F2, 0x5110, 0x5117, 0x5119, 0x511B, 0x511C, 0x511D, /* 0x50 */
+ 0x511E, 0x5123, 0x5127, 0x5128, 0x512C, 0x512D, 0x512F, 0x5131, /* 0x50 */
+ 0x5133, 0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514A, 0x514F, /* 0x60 */
+ 0x5153, 0x5155, 0x5157, 0x5158, 0x515F, 0x5164, 0x5166, 0x517E, /* 0x60 */
+ 0x5183, 0x5184, 0x518B, 0x518E, 0x5198, 0x519D, 0x51A1, 0x51A3, /* 0x70 */
+ 0x51AD, 0x51B8, 0x51BA, 0x51BC, 0x51BE, 0x51BF, 0x51C2 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x51C8, 0x51CF, 0x51D1, 0x51D2, 0x51D3, 0x51D5, 0x51D8, /* 0x20 */
+ 0x51DE, 0x51E2, 0x51E5, 0x51EE, 0x51F2, 0x51F3, 0x51F4, 0x51F7, /* 0x20 */
+ 0x5201, 0x5202, 0x5205, 0x5212, 0x5213, 0x5215, 0x5216, 0x5218, /* 0x30 */
+ 0x5222, 0x5228, 0x5231, 0x5232, 0x5235, 0x523C, 0x5245, 0x5249, /* 0x30 */
+ 0x5255, 0x5257, 0x5258, 0x525A, 0x525C, 0x525F, 0x5260, 0x5261, /* 0x40 */
+ 0x5266, 0x526E, 0x5277, 0x5278, 0x5279, 0x5280, 0x5282, 0x5285, /* 0x40 */
+ 0x528A, 0x528C, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, 0x529A, /* 0x50 */
+ 0x529C, 0x52A4, 0x52A5, 0x52A6, 0x52A7, 0x52AF, 0x52B0, 0x52B6, /* 0x50 */
+ 0x52B7, 0x52B8, 0x52BA, 0x52BB, 0x52BD, 0x52C0, 0x52C4, 0x52C6, /* 0x60 */
+ 0x52C8, 0x52CC, 0x52CF, 0x52D1, 0x52D4, 0x52D6, 0x52DB, 0x52DC, /* 0x60 */
+ 0x52E1, 0x52E5, 0x52E8, 0x52E9, 0x52EA, 0x52EC, 0x52F0, 0x52F1, /* 0x70 */
+ 0x52F4, 0x52F6, 0x52F7, 0x5300, 0x5303, 0x530A, 0x530B /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_34[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x530C, 0x5311, 0x5313, 0x5318, 0x531B, 0x531C, 0x531E, /* 0x20 */
+ 0x531F, 0x5325, 0x5327, 0x5328, 0x5329, 0x532B, 0x532C, 0x532D, /* 0x20 */
+ 0x5330, 0x5332, 0x5335, 0x533C, 0x533D, 0x533E, 0x5342, 0x534C, /* 0x30 */
+ 0x534B, 0x5359, 0x535B, 0x5361, 0x5363, 0x5365, 0x536C, 0x536D, /* 0x30 */
+ 0x5372, 0x5379, 0x537E, 0x5383, 0x5387, 0x5388, 0x538E, 0x5393, /* 0x40 */
+ 0x5394, 0x5399, 0x539D, 0x53A1, 0x53A4, 0x53AA, 0x53AB, 0x53AF, /* 0x40 */
+ 0x53B2, 0x53B4, 0x53B5, 0x53B7, 0x53B8, 0x53BA, 0x53BD, 0x53C0, /* 0x50 */
+ 0x53C5, 0x53CF, 0x53D2, 0x53D3, 0x53D5, 0x53DA, 0x53DD, 0x53DE, /* 0x50 */
+ 0x53E0, 0x53E6, 0x53E7, 0x53F5, 0x5402, 0x5413, 0x541A, 0x5421, /* 0x60 */
+ 0x5427, 0x5428, 0x542A, 0x542F, 0x5431, 0x5434, 0x5435, 0x5443, /* 0x60 */
+ 0x5444, 0x5447, 0x544D, 0x544F, 0x545E, 0x5462, 0x5464, 0x5466, /* 0x70 */
+ 0x5467, 0x5469, 0x546B, 0x546D, 0x546E, 0x5474, 0x547F /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_35[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548D, 0x5491, /* 0x20 */
+ 0x5495, 0x5496, 0x549C, 0x549F, 0x54A1, 0x54A6, 0x54A7, 0x54A9, /* 0x20 */
+ 0x54AA, 0x54AD, 0x54AE, 0x54B1, 0x54B7, 0x54B9, 0x54BA, 0x54BB, /* 0x30 */
+ 0x54BF, 0x54C6, 0x54CA, 0x54CD, 0x54CE, 0x54E0, 0x54EA, 0x54EC, /* 0x30 */
+ 0x54EF, 0x54F6, 0x54FC, 0x54FE, 0x54FF, 0x5500, 0x5501, 0x5505, /* 0x40 */
+ 0x5508, 0x5509, 0x550C, 0x550D, 0x550E, 0x5515, 0x552A, 0x552B, /* 0x40 */
+ 0x5532, 0x5535, 0x5536, 0x553B, 0x553C, 0x553D, 0x5541, 0x5547, /* 0x50 */
+ 0x5549, 0x554A, 0x554D, 0x5550, 0x5551, 0x5558, 0x555A, 0x555B, /* 0x50 */
+ 0x555E, 0x5560, 0x5561, 0x5564, 0x5566, 0x557F, 0x5581, 0x5582, /* 0x60 */
+ 0x5586, 0x5588, 0x558E, 0x558F, 0x5591, 0x5592, 0x5593, 0x5594, /* 0x60 */
+ 0x5597, 0x55A3, 0x55A4, 0x55AD, 0x55B2, 0x55BF, 0x55C1, 0x55C3, /* 0x70 */
+ 0x55C6, 0x55C9, 0x55CB, 0x55CC, 0x55CE, 0x55D1, 0x55D2 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_36[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x55D3, 0x55D7, 0x55D8, 0x55DB, 0x55DE, 0x55E2, 0x55E9, /* 0x20 */
+ 0x55F6, 0x55FF, 0x5605, 0x5608, 0x560A, 0x560D, 0x560E, 0x560F, /* 0x20 */
+ 0x5610, 0x5611, 0x5612, 0x5619, 0x562C, 0x5630, 0x5633, 0x5635, /* 0x30 */
+ 0x5637, 0x5639, 0x563B, 0x563C, 0x563D, 0x563F, 0x5640, 0x5641, /* 0x30 */
+ 0x5643, 0x5644, 0x5646, 0x5649, 0x564B, 0x564D, 0x564F, 0x5654, /* 0x40 */
+ 0x565E, 0x5660, 0x5661, 0x5662, 0x5663, 0x5666, 0x5669, 0x566D, /* 0x40 */
+ 0x566F, 0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, 0x568B, /* 0x50 */
+ 0x568C, 0x5695, 0x5699, 0x569A, 0x569D, 0x569E, 0x569F, 0x56A6, /* 0x50 */
+ 0x56A7, 0x56A8, 0x56A9, 0x56AB, 0x56AC, 0x56AD, 0x56B1, 0x56B3, /* 0x60 */
+ 0x56B7, 0x56BE, 0x56C5, 0x56C9, 0x56CA, 0x56CB, 0x56CF, 0x56D0, /* 0x60 */
+ 0x56CC, 0x56CD, 0x56D9, 0x56DC, 0x56DD, 0x56DF, 0x56E1, 0x56E4, /* 0x70 */
+ 0x56E5, 0x56E6, 0x56E7, 0x56E8, 0x56F1, 0x56EB, 0x56ED /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_37[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x56F6, 0x56F7, 0x5701, 0x5702, 0x5707, 0x570A, 0x570C, /* 0x20 */
+ 0x5711, 0x5715, 0x571A, 0x571B, 0x571D, 0x5720, 0x5722, 0x5723, /* 0x20 */
+ 0x5724, 0x5725, 0x5729, 0x572A, 0x572C, 0x572E, 0x572F, 0x5733, /* 0x30 */
+ 0x5734, 0x573D, 0x573E, 0x573F, 0x5745, 0x5746, 0x574C, 0x574D, /* 0x30 */
+ 0x5752, 0x5762, 0x5765, 0x5767, 0x5768, 0x576B, 0x576D, 0x576E, /* 0x40 */
+ 0x576F, 0x5770, 0x5771, 0x5773, 0x5774, 0x5775, 0x5777, 0x5779, /* 0x40 */
+ 0x577A, 0x577B, 0x577C, 0x577E, 0x5781, 0x5783, 0x578C, 0x5794, /* 0x50 */
+ 0x5797, 0x5799, 0x579A, 0x579C, 0x579D, 0x579E, 0x579F, 0x57A1, /* 0x50 */
+ 0x5795, 0x57A7, 0x57A8, 0x57A9, 0x57AC, 0x57B8, 0x57BD, 0x57C7, /* 0x60 */
+ 0x57C8, 0x57CC, 0x57CF, 0x57D5, 0x57DD, 0x57DE, 0x57E4, 0x57E6, /* 0x60 */
+ 0x57E7, 0x57E9, 0x57ED, 0x57F0, 0x57F5, 0x57F6, 0x57F8, 0x57FD, /* 0x70 */
+ 0x57FE, 0x57FF, 0x5803, 0x5804, 0x5808, 0x5809, 0x57E1 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_38[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x580C, 0x580D, 0x581B, 0x581E, 0x581F, 0x5820, 0x5826, /* 0x20 */
+ 0x5827, 0x582D, 0x5832, 0x5839, 0x583F, 0x5849, 0x584C, 0x584D, /* 0x20 */
+ 0x584F, 0x5850, 0x5855, 0x585F, 0x5861, 0x5864, 0x5867, 0x5868, /* 0x30 */
+ 0x5878, 0x587C, 0x587F, 0x5880, 0x5881, 0x5887, 0x5888, 0x5889, /* 0x30 */
+ 0x588A, 0x588C, 0x588D, 0x588F, 0x5890, 0x5894, 0x5896, 0x589D, /* 0x40 */
+ 0x58A0, 0x58A1, 0x58A2, 0x58A6, 0x58A9, 0x58B1, 0x58B2, 0x58C4, /* 0x40 */
+ 0x58BC, 0x58C2, 0x58C8, 0x58CD, 0x58CE, 0x58D0, 0x58D2, 0x58D4, /* 0x50 */
+ 0x58D6, 0x58DA, 0x58DD, 0x58E1, 0x58E2, 0x58E9, 0x58F3, 0x5905, /* 0x50 */
+ 0x5906, 0x590B, 0x590C, 0x5912, 0x5913, 0x5914, 0x8641, 0x591D, /* 0x60 */
+ 0x5921, 0x5923, 0x5924, 0x5928, 0x592F, 0x5930, 0x5933, 0x5935, /* 0x60 */
+ 0x5936, 0x593F, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595B, /* 0x70 */
+ 0x595D, 0x595E, 0x595F, 0x5961, 0x5963, 0x596B, 0x596D /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_39[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x596F, 0x5972, 0x5975, 0x5976, 0x5979, 0x597B, 0x597C, /* 0x20 */
+ 0x598B, 0x598C, 0x598E, 0x5992, 0x5995, 0x5997, 0x599F, 0x59A4, /* 0x20 */
+ 0x59A7, 0x59AD, 0x59AE, 0x59AF, 0x59B0, 0x59B3, 0x59B7, 0x59BA, /* 0x30 */
+ 0x59BC, 0x59C1, 0x59C3, 0x59C4, 0x59C8, 0x59CA, 0x59CD, 0x59D2, /* 0x30 */
+ 0x59DD, 0x59DE, 0x59DF, 0x59E3, 0x59E4, 0x59E7, 0x59EE, 0x59EF, /* 0x40 */
+ 0x59F1, 0x59F2, 0x59F4, 0x59F7, 0x5A00, 0x5A04, 0x5A0C, 0x5A0D, /* 0x40 */
+ 0x5A0E, 0x5A12, 0x5A13, 0x5A1E, 0x5A23, 0x5A24, 0x5A27, 0x5A28, /* 0x50 */
+ 0x5A2A, 0x5A2D, 0x5A30, 0x5A44, 0x5A45, 0x5A47, 0x5A48, 0x5A4C, /* 0x50 */
+ 0x5A50, 0x5A55, 0x5A5E, 0x5A63, 0x5A65, 0x5A67, 0x5A6D, 0x5A77, /* 0x60 */
+ 0x5A7A, 0x5A7B, 0x5A7E, 0x5A8B, 0x5A90, 0x5A93, 0x5A96, 0x5A99, /* 0x60 */
+ 0x5A9C, 0x5A9E, 0x5A9F, 0x5AA0, 0x5AA2, 0x5AA7, 0x5AAC, 0x5AB1, /* 0x70 */
+ 0x5AB2, 0x5AB3, 0x5AB5, 0x5AB8, 0x5ABA, 0x5ABB, 0x5ABF /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_3A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5AC4, 0x5AC6, 0x5AC8, 0x5ACF, 0x5ADA, 0x5ADC, 0x5AE0, /* 0x20 */
+ 0x5AE5, 0x5AEA, 0x5AEE, 0x5AF5, 0x5AF6, 0x5AFD, 0x5B00, 0x5B01, /* 0x20 */
+ 0x5B08, 0x5B17, 0x5B34, 0x5B19, 0x5B1B, 0x5B1D, 0x5B21, 0x5B25, /* 0x30 */
+ 0x5B2D, 0x5B38, 0x5B41, 0x5B4B, 0x5B4C, 0x5B52, 0x5B56, 0x5B5E, /* 0x30 */
+ 0x5B68, 0x5B6E, 0x5B6F, 0x5B7C, 0x5B7D, 0x5B7E, 0x5B7F, 0x5B81, /* 0x40 */
+ 0x5B84, 0x5B86, 0x5B8A, 0x5B8E, 0x5B90, 0x5B91, 0x5B93, 0x5B94, /* 0x40 */
+ 0x5B96, 0x5BA8, 0x5BA9, 0x5BAC, 0x5BAD, 0x5BAF, 0x5BB1, 0x5BB2, /* 0x50 */
+ 0x5BB7, 0x5BBA, 0x5BBC, 0x5BC0, 0x5BC1, 0x5BCD, 0x5BCF, 0x5BD6, /* 0x50 */
+ 0x5BD7, 0x5BD8, 0x5BD9, 0x5BDA, 0x5BE0, 0x5BEF, 0x5BF1, 0x5BF4, /* 0x60 */
+ 0x5BFD, 0x5C0C, 0x5C17, 0x5C1E, 0x5C1F, 0x5C23, 0x5C26, 0x5C29, /* 0x60 */
+ 0x5C2B, 0x5C2C, 0x5C2E, 0x5C30, 0x5C32, 0x5C35, 0x5C36, 0x5C59, /* 0x70 */
+ 0x5C5A, 0x5C5C, 0x5C62, 0x5C63, 0x5C67, 0x5C68, 0x5C69 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_3B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5C6D, 0x5C70, 0x5C74, 0x5C75, 0x5C7A, 0x5C7B, 0x5C7C, /* 0x20 */
+ 0x5C7D, 0x5C87, 0x5C88, 0x5C8A, 0x5C8F, 0x5C92, 0x5C9D, 0x5C9F, /* 0x20 */
+ 0x5CA0, 0x5CA2, 0x5CA3, 0x5CA6, 0x5CAA, 0x5CB2, 0x5CB4, 0x5CB5, /* 0x30 */
+ 0x5CBA, 0x5CC9, 0x5CCB, 0x5CD2, 0x5CDD, 0x5CD7, 0x5CEE, 0x5CF1, /* 0x30 */
+ 0x5CF2, 0x5CF4, 0x5D01, 0x5D06, 0x5D0D, 0x5D12, 0x5D2B, 0x5D23, /* 0x40 */
+ 0x5D24, 0x5D26, 0x5D27, 0x5D31, 0x5D34, 0x5D39, 0x5D3D, 0x5D3F, /* 0x40 */
+ 0x5D42, 0x5D43, 0x5D46, 0x5D48, 0x5D55, 0x5D51, 0x5D59, 0x5D4A, /* 0x50 */
+ 0x5D5F, 0x5D60, 0x5D61, 0x5D62, 0x5D64, 0x5D6A, 0x5D6D, 0x5D70, /* 0x50 */
+ 0x5D79, 0x5D7A, 0x5D7E, 0x5D7F, 0x5D81, 0x5D83, 0x5D88, 0x5D8A, /* 0x60 */
+ 0x5D92, 0x5D93, 0x5D94, 0x5D95, 0x5D99, 0x5D9B, 0x5D9F, 0x5DA0, /* 0x60 */
+ 0x5DA7, 0x5DAB, 0x5DB0, 0x5DB4, 0x5DB8, 0x5DB9, 0x5DC3, 0x5DC7, /* 0x70 */
+ 0x5DCB, 0x5DD0, 0x5DCE, 0x5DD8, 0x5DD9, 0x5DE0, 0x5DE4 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_3C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5DE9, 0x5DF8, 0x5DF9, 0x5E00, 0x5E07, 0x5E0D, 0x5E12, /* 0x20 */
+ 0x5E14, 0x5E15, 0x5E18, 0x5E1F, 0x5E20, 0x5E2E, 0x5E28, 0x5E32, /* 0x20 */
+ 0x5E35, 0x5E3E, 0x5E4B, 0x5E50, 0x5E49, 0x5E51, 0x5E56, 0x5E58, /* 0x30 */
+ 0x5E5B, 0x5E5C, 0x5E5E, 0x5E68, 0x5E6A, 0x5E6B, 0x5E6C, 0x5E6D, /* 0x30 */
+ 0x5E6E, 0x5E70, 0x5E80, 0x5E8B, 0x5E8E, 0x5EA2, 0x5EA4, 0x5EA5, /* 0x40 */
+ 0x5EA8, 0x5EAA, 0x5EAC, 0x5EB1, 0x5EB3, 0x5EBD, 0x5EBE, 0x5EBF, /* 0x40 */
+ 0x5EC6, 0x5ECC, 0x5ECB, 0x5ECE, 0x5ED1, 0x5ED2, 0x5ED4, 0x5ED5, /* 0x50 */
+ 0x5EDC, 0x5EDE, 0x5EE5, 0x5EEB, 0x5F02, 0x5F06, 0x5F07, 0x5F08, /* 0x50 */
+ 0x5F0E, 0x5F19, 0x5F1C, 0x5F1D, 0x5F21, 0x5F22, 0x5F23, 0x5F24, /* 0x60 */
+ 0x5F28, 0x5F2B, 0x5F2C, 0x5F2E, 0x5F30, 0x5F34, 0x5F36, 0x5F3B, /* 0x60 */
+ 0x5F3D, 0x5F3F, 0x5F40, 0x5F44, 0x5F45, 0x5F47, 0x5F4D, 0x5F50, /* 0x70 */
+ 0x5F54, 0x5F58, 0x5F5B, 0x5F60, 0x5F63, 0x5F64, 0x5F67 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_3D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5F6F, 0x5F72, 0x5F74, 0x5F75, 0x5F78, 0x5F7A, 0x5F7D, /* 0x20 */
+ 0x5F7E, 0x5F89, 0x5F8D, 0x5F8F, 0x5F96, 0x5F9C, 0x5F9D, 0x5FA2, /* 0x20 */
+ 0x5FA7, 0x5FAB, 0x5FA4, 0x5FAC, 0x5FAF, 0x5FB0, 0x5FB1, 0x5FB8, /* 0x30 */
+ 0x5FC4, 0x5FC7, 0x5FC8, 0x5FC9, 0x5FCB, 0x5FD0, 0x5FD1, 0x5FD2, /* 0x30 */
+ 0x5FD3, 0x5FD4, 0x5FDE, 0x5FE1, 0x5FE2, 0x5FE8, 0x5FE9, 0x5FEA, /* 0x40 */
+ 0x5FEC, 0x5FED, 0x5FEE, 0x5FEF, 0x5FF2, 0x5FF3, 0x5FF6, 0x5FFA, /* 0x40 */
+ 0x5FFC, 0x6007, 0x600A, 0x600D, 0x6013, 0x6014, 0x6017, 0x6018, /* 0x50 */
+ 0x601A, 0x601F, 0x6024, 0x602D, 0x6033, 0x6035, 0x6040, 0x6047, /* 0x50 */
+ 0x6048, 0x6049, 0x604C, 0x6051, 0x6054, 0x6056, 0x6057, 0x605D, /* 0x60 */
+ 0x6061, 0x6067, 0x6071, 0x607E, 0x607F, 0x6082, 0x6086, 0x6088, /* 0x60 */
+ 0x608A, 0x608E, 0x6091, 0x6093, 0x6095, 0x6098, 0x609D, 0x609E, /* 0x70 */
+ 0x60A2, 0x60A4, 0x60A5, 0x60A8, 0x60B0, 0x60B1, 0x60B7 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_3E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x60BB, 0x60BE, 0x60C2, 0x60C4, 0x60C8, 0x60C9, 0x60CA, /* 0x20 */
+ 0x60CB, 0x60CE, 0x60CF, 0x60D4, 0x60D5, 0x60D9, 0x60DB, 0x60DD, /* 0x20 */
+ 0x60DE, 0x60E2, 0x60E5, 0x60F2, 0x60F5, 0x60F8, 0x60FC, 0x60FD, /* 0x30 */
+ 0x6102, 0x6107, 0x610A, 0x610C, 0x6110, 0x6111, 0x6112, 0x6113, /* 0x30 */
+ 0x6114, 0x6116, 0x6117, 0x6119, 0x611C, 0x611E, 0x6122, 0x612A, /* 0x40 */
+ 0x612B, 0x6130, 0x6131, 0x6135, 0x6136, 0x6137, 0x6139, 0x6141, /* 0x40 */
+ 0x6145, 0x6146, 0x6149, 0x615E, 0x6160, 0x616C, 0x6172, 0x6178, /* 0x50 */
+ 0x617B, 0x617C, 0x617F, 0x6180, 0x6181, 0x6183, 0x6184, 0x618B, /* 0x50 */
+ 0x618D, 0x6192, 0x6193, 0x6197, 0x6198, 0x619C, 0x619D, 0x619F, /* 0x60 */
+ 0x61A0, 0x61A5, 0x61A8, 0x61AA, 0x61AD, 0x61B8, 0x61B9, 0x61BC, /* 0x60 */
+ 0x61C0, 0x61C1, 0x61C2, 0x61CE, 0x61CF, 0x61D5, 0x61DC, 0x61DD, /* 0x70 */
+ 0x61DE, 0x61DF, 0x61E1, 0x61E2, 0x61E7, 0x61E9, 0x61E5 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_3F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x61EC, 0x61ED, 0x61EF, 0x6201, 0x6203, 0x6204, 0x6207, /* 0x20 */
+ 0x6213, 0x6215, 0x621C, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229, /* 0x20 */
+ 0x622B, 0x6239, 0x623D, 0x6242, 0x6243, 0x6244, 0x6246, 0x624C, /* 0x30 */
+ 0x6250, 0x6251, 0x6252, 0x6254, 0x6256, 0x625A, 0x625C, 0x6264, /* 0x30 */
+ 0x626D, 0x626F, 0x6273, 0x627A, 0x627D, 0x628D, 0x628E, 0x628F, /* 0x40 */
+ 0x6290, 0x62A6, 0x62A8, 0x62B3, 0x62B6, 0x62B7, 0x62BA, 0x62BE, /* 0x40 */
+ 0x62BF, 0x62C4, 0x62CE, 0x62D5, 0x62D6, 0x62DA, 0x62EA, 0x62F2, /* 0x50 */
+ 0x62F4, 0x62FC, 0x62FD, 0x6303, 0x6304, 0x630A, 0x630B, 0x630D, /* 0x50 */
+ 0x6310, 0x6313, 0x6316, 0x6318, 0x6329, 0x632A, 0x632D, 0x6335, /* 0x60 */
+ 0x6336, 0x6339, 0x633C, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346, /* 0x60 */
+ 0x634A, 0x634B, 0x634E, 0x6352, 0x6353, 0x6354, 0x6358, 0x635B, /* 0x70 */
+ 0x6365, 0x6366, 0x636C, 0x636D, 0x6371, 0x6374, 0x6375 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_40[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6378, 0x637C, 0x637D, 0x637F, 0x6382, 0x6384, 0x6387, /* 0x20 */
+ 0x638A, 0x6390, 0x6394, 0x6395, 0x6399, 0x639A, 0x639E, 0x63A4, /* 0x20 */
+ 0x63A6, 0x63AD, 0x63AE, 0x63AF, 0x63BD, 0x63C1, 0x63C5, 0x63C8, /* 0x30 */
+ 0x63CE, 0x63D1, 0x63D3, 0x63D4, 0x63D5, 0x63DC, 0x63E0, 0x63E5, /* 0x30 */
+ 0x63EA, 0x63EC, 0x63F2, 0x63F3, 0x63F5, 0x63F8, 0x63F9, 0x6409, /* 0x40 */
+ 0x640A, 0x6410, 0x6412, 0x6414, 0x6418, 0x641E, 0x6420, 0x6422, /* 0x40 */
+ 0x6424, 0x6425, 0x6429, 0x642A, 0x642F, 0x6430, 0x6435, 0x643D, /* 0x50 */
+ 0x643F, 0x644B, 0x644F, 0x6451, 0x6452, 0x6453, 0x6454, 0x645A, /* 0x50 */
+ 0x645B, 0x645C, 0x645D, 0x645F, 0x6460, 0x6461, 0x6463, 0x646D, /* 0x60 */
+ 0x6473, 0x6474, 0x647B, 0x647D, 0x6485, 0x6487, 0x648F, 0x6490, /* 0x60 */
+ 0x6491, 0x6498, 0x6499, 0x649B, 0x649D, 0x649F, 0x64A1, 0x64A3, /* 0x70 */
+ 0x64A6, 0x64A8, 0x64AC, 0x64B3, 0x64BD, 0x64BE, 0x64BF /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_41[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x64C4, 0x64C9, 0x64CA, 0x64CB, 0x64CC, 0x64CE, 0x64D0, /* 0x20 */
+ 0x64D1, 0x64D5, 0x64D7, 0x64E4, 0x64E5, 0x64E9, 0x64EA, 0x64ED, /* 0x20 */
+ 0x64F0, 0x64F5, 0x64F7, 0x64FB, 0x64FF, 0x6501, 0x6504, 0x6508, /* 0x30 */
+ 0x6509, 0x650A, 0x650F, 0x6513, 0x6514, 0x6516, 0x6519, 0x651B, /* 0x30 */
+ 0x651E, 0x651F, 0x6522, 0x6526, 0x6529, 0x652E, 0x6531, 0x653A, /* 0x40 */
+ 0x653C, 0x653D, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554, /* 0x40 */
+ 0x655F, 0x6560, 0x6567, 0x656B, 0x657A, 0x657D, 0x6581, 0x6585, /* 0x50 */
+ 0x658A, 0x6592, 0x6595, 0x6598, 0x659D, 0x65A0, 0x65A3, 0x65A6, /* 0x50 */
+ 0x65AE, 0x65B2, 0x65B3, 0x65B4, 0x65BF, 0x65C2, 0x65C8, 0x65C9, /* 0x60 */
+ 0x65CE, 0x65D0, 0x65D4, 0x65D6, 0x65D8, 0x65DF, 0x65F0, 0x65F2, /* 0x60 */
+ 0x65F4, 0x65F5, 0x65F9, 0x65FE, 0x65FF, 0x6600, 0x6604, 0x6608, /* 0x70 */
+ 0x6609, 0x660D, 0x6611, 0x6612, 0x6615, 0x6616, 0x661D /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_42[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x661E, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, /* 0x20 */
+ 0x662A, 0x662B, 0x662C, 0x662E, 0x6630, 0x6631, 0x6633, 0x6639, /* 0x20 */
+ 0x6637, 0x6640, 0x6645, 0x6646, 0x664A, 0x664C, 0x6651, 0x664E, /* 0x30 */
+ 0x6657, 0x6658, 0x6659, 0x665B, 0x665C, 0x6660, 0x6661, 0x66FB, /* 0x30 */
+ 0x666A, 0x666B, 0x666C, 0x667E, 0x6673, 0x6675, 0x667F, 0x6677, /* 0x40 */
+ 0x6678, 0x6679, 0x667B, 0x6680, 0x667C, 0x668B, 0x668C, 0x668D, /* 0x40 */
+ 0x6690, 0x6692, 0x6699, 0x669A, 0x669B, 0x669C, 0x669F, 0x66A0, /* 0x50 */
+ 0x66A4, 0x66AD, 0x66B1, 0x66B2, 0x66B5, 0x66BB, 0x66BF, 0x66C0, /* 0x50 */
+ 0x66C2, 0x66C3, 0x66C8, 0x66CC, 0x66CE, 0x66CF, 0x66D4, 0x66DB, /* 0x60 */
+ 0x66DF, 0x66E8, 0x66EB, 0x66EC, 0x66EE, 0x66FA, 0x6705, 0x6707, /* 0x60 */
+ 0x670E, 0x6713, 0x6719, 0x671C, 0x6720, 0x6722, 0x6733, 0x673E, /* 0x70 */
+ 0x6745, 0x6747, 0x6748, 0x674C, 0x6754, 0x6755, 0x675D /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_43[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6766, 0x676C, 0x676E, 0x6774, 0x6776, 0x677B, 0x6781, /* 0x20 */
+ 0x6784, 0x678E, 0x678F, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799, /* 0x20 */
+ 0x679B, 0x67B0, 0x67B1, 0x67B2, 0x67B5, 0x67BB, 0x67BC, 0x67BD, /* 0x30 */
+ 0x67F9, 0x67C0, 0x67C2, 0x67C3, 0x67C5, 0x67C8, 0x67C9, 0x67D2, /* 0x30 */
+ 0x67D7, 0x67D9, 0x67DC, 0x67E1, 0x67E6, 0x67F0, 0x67F2, 0x67F6, /* 0x40 */
+ 0x67F7, 0x6852, 0x6814, 0x6819, 0x681D, 0x681F, 0x6828, 0x6827, /* 0x40 */
+ 0x682C, 0x682D, 0x682F, 0x6830, 0x6831, 0x6833, 0x683B, 0x683F, /* 0x50 */
+ 0x6844, 0x6845, 0x684A, 0x684C, 0x6855, 0x6857, 0x6858, 0x685B, /* 0x50 */
+ 0x686B, 0x686E, 0x686F, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879, /* 0x60 */
+ 0x687A, 0x687B, 0x687C, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896, /* 0x60 */
+ 0x6898, 0x689A, 0x689C, 0x68A1, 0x68A3, 0x68A5, 0x68A9, 0x68AA, /* 0x70 */
+ 0x68AE, 0x68B2, 0x68BB, 0x68C5, 0x68C8, 0x68CC, 0x68CF /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_44[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x68D0, 0x68D1, 0x68D3, 0x68D6, 0x68D9, 0x68DC, 0x68DD, /* 0x20 */
+ 0x68E5, 0x68E8, 0x68EA, 0x68EB, 0x68EC, 0x68ED, 0x68F0, 0x68F1, /* 0x20 */
+ 0x68F5, 0x68F6, 0x68FB, 0x68FC, 0x68FD, 0x6906, 0x6909, 0x690A, /* 0x30 */
+ 0x6910, 0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933, 0x6935, /* 0x30 */
+ 0x6938, 0x693B, 0x6942, 0x6945, 0x6949, 0x694E, 0x6957, 0x695B, /* 0x40 */
+ 0x6963, 0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696C, 0x6970, /* 0x40 */
+ 0x6971, 0x6972, 0x697A, 0x697B, 0x697F, 0x6980, 0x698D, 0x6992, /* 0x50 */
+ 0x6996, 0x6998, 0x69A1, 0x69A5, 0x69A6, 0x69A8, 0x69AB, 0x69AD, /* 0x50 */
+ 0x69AF, 0x69B7, 0x69B8, 0x69BA, 0x69BC, 0x69C5, 0x69C8, 0x69D1, /* 0x60 */
+ 0x69D6, 0x69D7, 0x69E2, 0x69E5, 0x69EE, 0x69EF, 0x69F1, 0x69F3, /* 0x60 */
+ 0x69F5, 0x69FE, 0x6A00, 0x6A01, 0x6A03, 0x6A0F, 0x6A11, 0x6A15, /* 0x70 */
+ 0x6A1A, 0x6A1D, 0x6A20, 0x6A24, 0x6A28, 0x6A30, 0x6A32 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_45[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A34, 0x6A37, 0x6A3B, 0x6A3E, 0x6A3F, 0x6A45, 0x6A46, /* 0x20 */
+ 0x6A49, 0x6A4A, 0x6A4E, 0x6A50, 0x6A51, 0x6A52, 0x6A55, 0x6A56, /* 0x20 */
+ 0x6A5B, 0x6A64, 0x6A67, 0x6A6A, 0x6A71, 0x6A73, 0x6A7E, 0x6A81, /* 0x30 */
+ 0x6A83, 0x6A86, 0x6A87, 0x6A89, 0x6A8B, 0x6A91, 0x6A9B, 0x6A9D, /* 0x30 */
+ 0x6A9E, 0x6A9F, 0x6AA5, 0x6AAB, 0x6AAF, 0x6AB0, 0x6AB1, 0x6AB4, /* 0x40 */
+ 0x6ABD, 0x6ABE, 0x6ABF, 0x6AC6, 0x6AC9, 0x6AC8, 0x6ACC, 0x6AD0, /* 0x40 */
+ 0x6AD4, 0x6AD5, 0x6AD6, 0x6ADC, 0x6ADD, 0x6AE4, 0x6AE7, 0x6AEC, /* 0x50 */
+ 0x6AF0, 0x6AF1, 0x6AF2, 0x6AFC, 0x6AFD, 0x6B02, 0x6B03, 0x6B06, /* 0x50 */
+ 0x6B07, 0x6B09, 0x6B0F, 0x6B10, 0x6B11, 0x6B17, 0x6B1B, 0x6B1E, /* 0x60 */
+ 0x6B24, 0x6B28, 0x6B2B, 0x6B2C, 0x6B2F, 0x6B35, 0x6B36, 0x6B3B, /* 0x60 */
+ 0x6B3F, 0x6B46, 0x6B4A, 0x6B4D, 0x6B52, 0x6B56, 0x6B58, 0x6B5D, /* 0x70 */
+ 0x6B60, 0x6B67, 0x6B6B, 0x6B6E, 0x6B70, 0x6B75, 0x6B7D /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_46[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6B7E, 0x6B82, 0x6B85, 0x6B97, 0x6B9B, 0x6B9F, 0x6BA0, /* 0x20 */
+ 0x6BA2, 0x6BA3, 0x6BA8, 0x6BA9, 0x6BAC, 0x6BAD, 0x6BAE, 0x6BB0, /* 0x20 */
+ 0x6BB8, 0x6BB9, 0x6BBD, 0x6BBE, 0x6BC3, 0x6BC4, 0x6BC9, 0x6BCC, /* 0x30 */
+ 0x6BD6, 0x6BDA, 0x6BE1, 0x6BE3, 0x6BE6, 0x6BE7, 0x6BEE, 0x6BF1, /* 0x30 */
+ 0x6BF7, 0x6BF9, 0x6BFF, 0x6C02, 0x6C04, 0x6C05, 0x6C09, 0x6C0D, /* 0x40 */
+ 0x6C0E, 0x6C10, 0x6C12, 0x6C19, 0x6C1F, 0x6C26, 0x6C27, 0x6C28, /* 0x40 */
+ 0x6C2C, 0x6C2E, 0x6C33, 0x6C35, 0x6C36, 0x6C3A, 0x6C3B, 0x6C3F, /* 0x50 */
+ 0x6C4A, 0x6C4B, 0x6C4D, 0x6C4F, 0x6C52, 0x6C54, 0x6C59, 0x6C5B, /* 0x50 */
+ 0x6C5C, 0x6C6B, 0x6C6D, 0x6C6F, 0x6C74, 0x6C76, 0x6C78, 0x6C79, /* 0x60 */
+ 0x6C7B, 0x6C85, 0x6C86, 0x6C87, 0x6C89, 0x6C94, 0x6C95, 0x6C97, /* 0x60 */
+ 0x6C98, 0x6C9C, 0x6C9F, 0x6CB0, 0x6CB2, 0x6CB4, 0x6CC2, 0x6CC6, /* 0x70 */
+ 0x6CCD, 0x6CCF, 0x6CD0, 0x6CD1, 0x6CD2, 0x6CD4, 0x6CD6 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_47[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6CDA, 0x6CDC, 0x6CE0, 0x6CE7, 0x6CE9, 0x6CEB, 0x6CEC, /* 0x20 */
+ 0x6CEE, 0x6CF2, 0x6CF4, 0x6D04, 0x6D07, 0x6D0A, 0x6D0E, 0x6D0F, /* 0x20 */
+ 0x6D11, 0x6D13, 0x6D1A, 0x6D26, 0x6D27, 0x6D28, 0x6C67, 0x6D2E, /* 0x30 */
+ 0x6D2F, 0x6D31, 0x6D39, 0x6D3C, 0x6D3F, 0x6D57, 0x6D5E, 0x6D5F, /* 0x30 */
+ 0x6D61, 0x6D65, 0x6D67, 0x6D6F, 0x6D70, 0x6D7C, 0x6D82, 0x6D87, /* 0x40 */
+ 0x6D91, 0x6D92, 0x6D94, 0x6D96, 0x6D97, 0x6D98, 0x6DAA, 0x6DAC, /* 0x40 */
+ 0x6DB4, 0x6DB7, 0x6DB9, 0x6DBD, 0x6DBF, 0x6DC4, 0x6DC8, 0x6DCA, /* 0x50 */
+ 0x6DCE, 0x6DCF, 0x6DD6, 0x6DDB, 0x6DDD, 0x6DDF, 0x6DE0, 0x6DE2, /* 0x50 */
+ 0x6DE5, 0x6DE9, 0x6DEF, 0x6DF0, 0x6DF4, 0x6DF6, 0x6DFC, 0x6E00, /* 0x60 */
+ 0x6E04, 0x6E1E, 0x6E22, 0x6E27, 0x6E32, 0x6E36, 0x6E39, 0x6E3B, /* 0x60 */
+ 0x6E3C, 0x6E44, 0x6E45, 0x6E48, 0x6E49, 0x6E4B, 0x6E4F, 0x6E51, /* 0x70 */
+ 0x6E52, 0x6E53, 0x6E54, 0x6E57, 0x6E5C, 0x6E5D, 0x6E5E /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_48[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6E62, 0x6E63, 0x6E68, 0x6E73, 0x6E7B, 0x6E7D, 0x6E8D, /* 0x20 */
+ 0x6E93, 0x6E99, 0x6EA0, 0x6EA7, 0x6EAD, 0x6EAE, 0x6EB1, 0x6EB3, /* 0x20 */
+ 0x6EBB, 0x6EBF, 0x6EC0, 0x6EC1, 0x6EC3, 0x6EC7, 0x6EC8, 0x6ECA, /* 0x30 */
+ 0x6ECD, 0x6ECE, 0x6ECF, 0x6EEB, 0x6EED, 0x6EEE, 0x6EF9, 0x6EFB, /* 0x30 */
+ 0x6EFD, 0x6F04, 0x6F08, 0x6F0A, 0x6F0C, 0x6F0D, 0x6F16, 0x6F18, /* 0x40 */
+ 0x6F1A, 0x6F1B, 0x6F26, 0x6F29, 0x6F2A, 0x6F2F, 0x6F30, 0x6F33, /* 0x40 */
+ 0x6F36, 0x6F3B, 0x6F3C, 0x6F2D, 0x6F4F, 0x6F51, 0x6F52, 0x6F53, /* 0x50 */
+ 0x6F57, 0x6F59, 0x6F5A, 0x6F5D, 0x6F5E, 0x6F61, 0x6F62, 0x6F68, /* 0x50 */
+ 0x6F6C, 0x6F7D, 0x6F7E, 0x6F83, 0x6F87, 0x6F88, 0x6F8B, 0x6F8C, /* 0x60 */
+ 0x6F8D, 0x6F90, 0x6F92, 0x6F93, 0x6F94, 0x6F96, 0x6F9A, 0x6F9F, /* 0x60 */
+ 0x6FA0, 0x6FA5, 0x6FA6, 0x6FA7, 0x6FA8, 0x6FAE, 0x6FAF, 0x6FB0, /* 0x70 */
+ 0x6FB5, 0x6FB6, 0x6FBC, 0x6FC5, 0x6FC7, 0x6FC8, 0x6FCA /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_49[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6FDA, 0x6FDE, 0x6FE8, 0x6FE9, 0x6FF0, 0x6FF5, 0x6FF9, /* 0x20 */
+ 0x6FFC, 0x6FFD, 0x7000, 0x7005, 0x7006, 0x7007, 0x700D, 0x7017, /* 0x20 */
+ 0x7020, 0x7023, 0x702F, 0x7034, 0x7037, 0x7039, 0x703C, 0x7043, /* 0x30 */
+ 0x7044, 0x7048, 0x7049, 0x704A, 0x704B, 0x7054, 0x7055, 0x705D, /* 0x30 */
+ 0x705E, 0x704E, 0x7064, 0x7065, 0x706C, 0x706E, 0x7075, 0x7076, /* 0x40 */
+ 0x707E, 0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097, /* 0x40 */
+ 0x7098, 0x709B, 0x70A4, 0x70AB, 0x70B0, 0x70B1, 0x70B4, 0x70B7, /* 0x50 */
+ 0x70CA, 0x70D1, 0x70D3, 0x70D4, 0x70D5, 0x70D6, 0x70D8, 0x70DC, /* 0x50 */
+ 0x70E4, 0x70FA, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710B, /* 0x60 */
+ 0x710C, 0x710F, 0x711E, 0x7120, 0x712B, 0x712D, 0x712F, 0x7130, /* 0x60 */
+ 0x7131, 0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714A, 0x714B, /* 0x70 */
+ 0x7150, 0x7152, 0x7157, 0x715A, 0x715C, 0x715E, 0x7160 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_4A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718C, 0x7192, /* 0x20 */
+ 0x719A, 0x719B, 0x71A0, 0x71A2, 0x71AF, 0x71B0, 0x71B2, 0x71B3, /* 0x20 */
+ 0x71BA, 0x71BF, 0x71C0, 0x71C1, 0x71C4, 0x71CB, 0x71CC, 0x71D3, /* 0x30 */
+ 0x71D6, 0x71D9, 0x71DA, 0x71DC, 0x71F8, 0x71FE, 0x7200, 0x7207, /* 0x30 */
+ 0x7208, 0x7209, 0x7213, 0x7217, 0x721A, 0x721D, 0x721F, 0x7224, /* 0x40 */
+ 0x722B, 0x722F, 0x7234, 0x7238, 0x7239, 0x7241, 0x7242, 0x7243, /* 0x40 */
+ 0x7245, 0x724E, 0x724F, 0x7250, 0x7253, 0x7255, 0x7256, 0x725A, /* 0x50 */
+ 0x725C, 0x725E, 0x7260, 0x7263, 0x7268, 0x726B, 0x726E, 0x726F, /* 0x50 */
+ 0x7271, 0x7277, 0x7278, 0x727B, 0x727C, 0x727F, 0x7284, 0x7289, /* 0x60 */
+ 0x728D, 0x728E, 0x7293, 0x729B, 0x72A8, 0x72AD, 0x72AE, 0x72B1, /* 0x60 */
+ 0x72B4, 0x72BE, 0x72C1, 0x72C7, 0x72C9, 0x72CC, 0x72D5, 0x72D6, /* 0x70 */
+ 0x72D8, 0x72DF, 0x72E5, 0x72F3, 0x72F4, 0x72FA, 0x72FB /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_4B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x72FE, 0x7302, 0x7304, 0x7305, 0x7307, 0x730B, 0x730D, /* 0x20 */
+ 0x7312, 0x7313, 0x7318, 0x7319, 0x731E, 0x7322, 0x7324, 0x7327, /* 0x20 */
+ 0x7328, 0x732C, 0x7331, 0x7332, 0x7335, 0x733A, 0x733B, 0x733D, /* 0x30 */
+ 0x7343, 0x734D, 0x7350, 0x7352, 0x7356, 0x7358, 0x735D, 0x735E, /* 0x30 */
+ 0x735F, 0x7360, 0x7366, 0x7367, 0x7369, 0x736B, 0x736C, 0x736E, /* 0x40 */
+ 0x736F, 0x7371, 0x7377, 0x7379, 0x737C, 0x7380, 0x7381, 0x7383, /* 0x40 */
+ 0x7385, 0x7386, 0x738E, 0x7390, 0x7393, 0x7395, 0x7397, 0x7398, /* 0x50 */
+ 0x739C, 0x739E, 0x739F, 0x73A0, 0x73A2, 0x73A5, 0x73A6, 0x73AA, /* 0x50 */
+ 0x73AB, 0x73AD, 0x73B5, 0x73B7, 0x73B9, 0x73BC, 0x73BD, 0x73BF, /* 0x60 */
+ 0x73C5, 0x73C6, 0x73C9, 0x73CB, 0x73CC, 0x73CF, 0x73D2, 0x73D3, /* 0x60 */
+ 0x73D6, 0x73D9, 0x73DD, 0x73E1, 0x73E3, 0x73E6, 0x73E7, 0x73E9, /* 0x70 */
+ 0x73F4, 0x73F5, 0x73F7, 0x73F9, 0x73FA, 0x73FB, 0x73FD /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_4C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x73FF, 0x7400, 0x7401, 0x7404, 0x7407, 0x740A, 0x7411, /* 0x20 */
+ 0x741A, 0x741B, 0x7424, 0x7426, 0x7428, 0x7429, 0x742A, 0x742B, /* 0x20 */
+ 0x742C, 0x742D, 0x742E, 0x742F, 0x7430, 0x7431, 0x7439, 0x7440, /* 0x30 */
+ 0x7443, 0x7444, 0x7446, 0x7447, 0x744B, 0x744D, 0x7451, 0x7452, /* 0x30 */
+ 0x7457, 0x745D, 0x7462, 0x7466, 0x7467, 0x7468, 0x746B, 0x746D, /* 0x40 */
+ 0x746E, 0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486, 0x7487, /* 0x40 */
+ 0x7489, 0x748F, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, 0x749A, /* 0x50 */
+ 0x749C, 0x749F, 0x74A0, 0x74A1, 0x74A3, 0x74A6, 0x74A8, 0x74A9, /* 0x50 */
+ 0x74AA, 0x74AB, 0x74AE, 0x74AF, 0x74B1, 0x74B2, 0x74B5, 0x74B9, /* 0x60 */
+ 0x74BB, 0x74BF, 0x74C8, 0x74C9, 0x74CC, 0x74D0, 0x74D3, 0x74D8, /* 0x60 */
+ 0x74DA, 0x74DB, 0x74DE, 0x74DF, 0x74E4, 0x74E8, 0x74EA, 0x74EB, /* 0x70 */
+ 0x74EF, 0x74F4, 0x74FA, 0x74FB, 0x74FC, 0x74FF, 0x7506 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_4D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, /* 0x20 */
+ 0x7529, 0x752A, 0x752F, 0x7536, 0x7539, 0x753D, 0x753E, 0x753F, /* 0x20 */
+ 0x7540, 0x7543, 0x7547, 0x7548, 0x754E, 0x7550, 0x7552, 0x7557, /* 0x30 */
+ 0x755E, 0x755F, 0x7561, 0x756F, 0x7571, 0x7579, 0x757A, 0x757B, /* 0x30 */
+ 0x757C, 0x757D, 0x757E, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593, /* 0x40 */
+ 0x7595, 0x7599, 0x759C, 0x75A2, 0x75A4, 0x75B4, 0x75BA, 0x75BF, /* 0x40 */
+ 0x75C0, 0x75C1, 0x75C4, 0x75C6, 0x75CC, 0x75CE, 0x75CF, 0x75D7, /* 0x50 */
+ 0x75DC, 0x75DF, 0x75E0, 0x75E1, 0x75E4, 0x75E7, 0x75EC, 0x75EE, /* 0x50 */
+ 0x75EF, 0x75F1, 0x75F9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, /* 0x60 */
+ 0x7608, 0x760A, 0x760C, 0x760F, 0x7612, 0x7613, 0x7615, 0x7616, /* 0x60 */
+ 0x7619, 0x761B, 0x761C, 0x761D, 0x761E, 0x7623, 0x7625, 0x7626, /* 0x70 */
+ 0x7629, 0x762D, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x763A, 0x763C, 0x764A, 0x7640, 0x7641, 0x7643, 0x7644, /* 0x20 */
+ 0x7645, 0x7649, 0x764B, 0x7655, 0x7659, 0x765F, 0x7664, 0x7665, /* 0x20 */
+ 0x766D, 0x766E, 0x766F, 0x7671, 0x7674, 0x7681, 0x7685, 0x768C, /* 0x30 */
+ 0x768D, 0x7695, 0x769B, 0x769C, 0x769D, 0x769F, 0x76A0, 0x76A2, /* 0x30 */
+ 0x76A3, 0x76A4, 0x76A5, 0x76A6, 0x76A7, 0x76A8, 0x76AA, 0x76AD, /* 0x40 */
+ 0x76BD, 0x76C1, 0x76C5, 0x76C9, 0x76CB, 0x76CC, 0x76CE, 0x76D4, /* 0x40 */
+ 0x76D9, 0x76E0, 0x76E6, 0x76E8, 0x76EC, 0x76F0, 0x76F1, 0x76F6, /* 0x50 */
+ 0x76F9, 0x76FC, 0x7700, 0x7706, 0x770A, 0x770E, 0x7712, 0x7714, /* 0x50 */
+ 0x7715, 0x7717, 0x7719, 0x771A, 0x771C, 0x7722, 0x7728, 0x772D, /* 0x60 */
+ 0x772E, 0x772F, 0x7734, 0x7735, 0x7736, 0x7739, 0x773D, 0x773E, /* 0x60 */
+ 0x7742, 0x7745, 0x7746, 0x774A, 0x774D, 0x774E, 0x774F, 0x7752, /* 0x70 */
+ 0x7756, 0x7757, 0x775C, 0x775E, 0x775F, 0x7760, 0x7762 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7764, 0x7767, 0x776A, 0x776C, 0x7770, 0x7772, 0x7773, /* 0x20 */
+ 0x7774, 0x777A, 0x777D, 0x7780, 0x7784, 0x778C, 0x778D, 0x7794, /* 0x20 */
+ 0x7795, 0x7796, 0x779A, 0x779F, 0x77A2, 0x77A7, 0x77AA, 0x77AE, /* 0x30 */
+ 0x77AF, 0x77B1, 0x77B5, 0x77BE, 0x77C3, 0x77C9, 0x77D1, 0x77D2, /* 0x30 */
+ 0x77D5, 0x77D9, 0x77DE, 0x77DF, 0x77E0, 0x77E4, 0x77E6, 0x77EA, /* 0x40 */
+ 0x77EC, 0x77F0, 0x77F1, 0x77F4, 0x77F8, 0x77FB, 0x7805, 0x7806, /* 0x40 */
+ 0x7809, 0x780D, 0x780E, 0x7811, 0x781D, 0x7821, 0x7822, 0x7823, /* 0x50 */
+ 0x782D, 0x782E, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847, /* 0x50 */
+ 0x7848, 0x784C, 0x784E, 0x7852, 0x785C, 0x785E, 0x7860, 0x7861, /* 0x60 */
+ 0x7863, 0x7864, 0x7868, 0x786A, 0x786E, 0x787A, 0x787E, 0x788A, /* 0x60 */
+ 0x788F, 0x7894, 0x7898, 0x78A1, 0x789D, 0x789E, 0x789F, 0x78A4, /* 0x70 */
+ 0x78A8, 0x78AC, 0x78AD, 0x78B0, 0x78B1, 0x78B2, 0x78B3 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x78BB, 0x78BD, 0x78BF, 0x78C7, 0x78C8, 0x78C9, 0x78CC, /* 0x20 */
+ 0x78CE, 0x78D2, 0x78D3, 0x78D5, 0x78D6, 0x78E4, 0x78DB, 0x78DF, /* 0x20 */
+ 0x78E0, 0x78E1, 0x78E6, 0x78EA, 0x78F2, 0x78F3, 0x7900, 0x78F6, /* 0x30 */
+ 0x78F7, 0x78FA, 0x78FB, 0x78FF, 0x7906, 0x790C, 0x7910, 0x791A, /* 0x30 */
+ 0x791C, 0x791E, 0x791F, 0x7920, 0x7925, 0x7927, 0x7929, 0x792D, /* 0x40 */
+ 0x7931, 0x7934, 0x7935, 0x793B, 0x793D, 0x793F, 0x7944, 0x7945, /* 0x40 */
+ 0x7946, 0x794A, 0x794B, 0x794F, 0x7951, 0x7954, 0x7958, 0x795B, /* 0x50 */
+ 0x795C, 0x7967, 0x7969, 0x796B, 0x7972, 0x7979, 0x797B, 0x797C, /* 0x50 */
+ 0x797E, 0x798B, 0x798C, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996, /* 0x60 */
+ 0x7998, 0x799B, 0x799C, 0x79A1, 0x79A8, 0x79A9, 0x79AB, 0x79AF, /* 0x60 */
+ 0x79B1, 0x79B4, 0x79B8, 0x79BB, 0x79C2, 0x79C4, 0x79C7, 0x79C8, /* 0x70 */
+ 0x79CA, 0x79CF, 0x79D4, 0x79D6, 0x79DA, 0x79DD, 0x79DE /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x79E0, 0x79E2, 0x79E5, 0x79EA, 0x79EB, 0x79ED, 0x79F1, /* 0x20 */
+ 0x79F8, 0x79FC, 0x7A02, 0x7A03, 0x7A07, 0x7A09, 0x7A0A, 0x7A0C, /* 0x20 */
+ 0x7A11, 0x7A15, 0x7A1B, 0x7A1E, 0x7A21, 0x7A27, 0x7A2B, 0x7A2D, /* 0x30 */
+ 0x7A2F, 0x7A30, 0x7A34, 0x7A35, 0x7A38, 0x7A39, 0x7A3A, 0x7A44, /* 0x30 */
+ 0x7A45, 0x7A47, 0x7A48, 0x7A4C, 0x7A55, 0x7A56, 0x7A59, 0x7A5C, /* 0x40 */
+ 0x7A5D, 0x7A5F, 0x7A60, 0x7A65, 0x7A67, 0x7A6A, 0x7A6D, 0x7A75, /* 0x40 */
+ 0x7A78, 0x7A7E, 0x7A80, 0x7A82, 0x7A85, 0x7A86, 0x7A8A, 0x7A8B, /* 0x50 */
+ 0x7A90, 0x7A91, 0x7A94, 0x7A9E, 0x7AA0, 0x7AA3, 0x7AAC, 0x7AB3, /* 0x50 */
+ 0x7AB5, 0x7AB9, 0x7ABB, 0x7ABC, 0x7AC6, 0x7AC9, 0x7ACC, 0x7ACE, /* 0x60 */
+ 0x7AD1, 0x7ADB, 0x7AE8, 0x7AE9, 0x7AEB, 0x7AEC, 0x7AF1, 0x7AF4, /* 0x60 */
+ 0x7AFB, 0x7AFD, 0x7AFE, 0x7B07, 0x7B14, 0x7B1F, 0x7B23, 0x7B27, /* 0x70 */
+ 0x7B29, 0x7B2A, 0x7B2B, 0x7B2D, 0x7B2E, 0x7B2F, 0x7B30 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7B31, 0x7B34, 0x7B3D, 0x7B3F, 0x7B40, 0x7B41, 0x7B47, /* 0x20 */
+ 0x7B4E, 0x7B55, 0x7B60, 0x7B64, 0x7B66, 0x7B69, 0x7B6A, 0x7B6D, /* 0x20 */
+ 0x7B6F, 0x7B72, 0x7B73, 0x7B77, 0x7B84, 0x7B89, 0x7B8E, 0x7B90, /* 0x30 */
+ 0x7B91, 0x7B96, 0x7B9B, 0x7B9E, 0x7BA0, 0x7BA5, 0x7BAC, 0x7BAF, /* 0x30 */
+ 0x7BB0, 0x7BB2, 0x7BB5, 0x7BB6, 0x7BBA, 0x7BBB, 0x7BBC, 0x7BBD, /* 0x40 */
+ 0x7BC2, 0x7BC5, 0x7BC8, 0x7BCA, 0x7BD4, 0x7BD6, 0x7BD7, 0x7BD9, /* 0x40 */
+ 0x7BDA, 0x7BDB, 0x7BE8, 0x7BEA, 0x7BF2, 0x7BF4, 0x7BF5, 0x7BF8, /* 0x50 */
+ 0x7BF9, 0x7BFA, 0x7BFC, 0x7BFE, 0x7C01, 0x7C02, 0x7C03, 0x7C04, /* 0x50 */
+ 0x7C06, 0x7C09, 0x7C0B, 0x7C0C, 0x7C0E, 0x7C0F, 0x7C19, 0x7C1B, /* 0x60 */
+ 0x7C20, 0x7C25, 0x7C26, 0x7C28, 0x7C2C, 0x7C31, 0x7C33, 0x7C34, /* 0x60 */
+ 0x7C36, 0x7C39, 0x7C3A, 0x7C46, 0x7C4A, 0x7C55, 0x7C51, 0x7C52, /* 0x70 */
+ 0x7C53, 0x7C59, 0x7C5A, 0x7C5B, 0x7C5C, 0x7C5D, 0x7C5E /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7C61, 0x7C63, 0x7C67, 0x7C69, 0x7C6D, 0x7C6E, 0x7C70, /* 0x20 */
+ 0x7C72, 0x7C79, 0x7C7C, 0x7C7D, 0x7C86, 0x7C87, 0x7C8F, 0x7C94, /* 0x20 */
+ 0x7C9E, 0x7CA0, 0x7CA6, 0x7CB0, 0x7CB6, 0x7CB7, 0x7CBA, 0x7CBB, /* 0x30 */
+ 0x7CBC, 0x7CBF, 0x7CC4, 0x7CC7, 0x7CC8, 0x7CC9, 0x7CCD, 0x7CCF, /* 0x30 */
+ 0x7CD3, 0x7CD4, 0x7CD5, 0x7CD7, 0x7CD9, 0x7CDA, 0x7CDD, 0x7CE6, /* 0x40 */
+ 0x7CE9, 0x7CEB, 0x7CF5, 0x7D03, 0x7D07, 0x7D08, 0x7D09, 0x7D0F, /* 0x40 */
+ 0x7D11, 0x7D12, 0x7D13, 0x7D16, 0x7D1D, 0x7D1E, 0x7D23, 0x7D26, /* 0x50 */
+ 0x7D2A, 0x7D2D, 0x7D31, 0x7D3C, 0x7D3D, 0x7D3E, 0x7D40, 0x7D41, /* 0x50 */
+ 0x7D47, 0x7D48, 0x7D4D, 0x7D51, 0x7D53, 0x7D57, 0x7D59, 0x7D5A, /* 0x60 */
+ 0x7D5C, 0x7D5D, 0x7D65, 0x7D67, 0x7D6A, 0x7D70, 0x7D78, 0x7D7A, /* 0x60 */
+ 0x7D7B, 0x7D7F, 0x7D81, 0x7D82, 0x7D83, 0x7D85, 0x7D86, 0x7D88, /* 0x70 */
+ 0x7D8B, 0x7D8C, 0x7D8D, 0x7D91, 0x7D96, 0x7D97, 0x7D9D /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7D9E, 0x7DA6, 0x7DA7, 0x7DAA, 0x7DB3, 0x7DB6, 0x7DB7, /* 0x20 */
+ 0x7DB9, 0x7DC2, 0x7DC3, 0x7DC4, 0x7DC5, 0x7DC6, 0x7DCC, 0x7DCD, /* 0x20 */
+ 0x7DCE, 0x7DD7, 0x7DD9, 0x7E00, 0x7DE2, 0x7DE5, 0x7DE6, 0x7DEA, /* 0x30 */
+ 0x7DEB, 0x7DED, 0x7DF1, 0x7DF5, 0x7DF6, 0x7DF9, 0x7DFA, 0x7E08, /* 0x30 */
+ 0x7E10, 0x7E11, 0x7E15, 0x7E17, 0x7E1C, 0x7E1D, 0x7E20, 0x7E27, /* 0x40 */
+ 0x7E28, 0x7E2C, 0x7E2D, 0x7E2F, 0x7E33, 0x7E36, 0x7E3F, 0x7E44, /* 0x40 */
+ 0x7E45, 0x7E47, 0x7E4E, 0x7E50, 0x7E52, 0x7E58, 0x7E5F, 0x7E61, /* 0x50 */
+ 0x7E62, 0x7E65, 0x7E6B, 0x7E6E, 0x7E6F, 0x7E73, 0x7E78, 0x7E7E, /* 0x50 */
+ 0x7E81, 0x7E86, 0x7E87, 0x7E8A, 0x7E8D, 0x7E91, 0x7E95, 0x7E98, /* 0x60 */
+ 0x7E9A, 0x7E9D, 0x7E9E, 0x7F3C, 0x7F3B, 0x7F3D, 0x7F3E, 0x7F3F, /* 0x60 */
+ 0x7F43, 0x7F44, 0x7F47, 0x7F4F, 0x7F52, 0x7F53, 0x7F5B, 0x7F5C, /* 0x70 */
+ 0x7F5D, 0x7F61, 0x7F63, 0x7F64, 0x7F65, 0x7F66, 0x7F6D /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7F71, 0x7F7D, 0x7F7E, 0x7F7F, 0x7F80, 0x7F8B, 0x7F8D, /* 0x20 */
+ 0x7F8F, 0x7F90, 0x7F91, 0x7F96, 0x7F97, 0x7F9C, 0x7FA1, 0x7FA2, /* 0x20 */
+ 0x7FA6, 0x7FAA, 0x7FAD, 0x7FB4, 0x7FBC, 0x7FBF, 0x7FC0, 0x7FC3, /* 0x30 */
+ 0x7FC8, 0x7FCE, 0x7FCF, 0x7FDB, 0x7FDF, 0x7FE3, 0x7FE5, 0x7FE8, /* 0x30 */
+ 0x7FEC, 0x7FEE, 0x7FEF, 0x7FF2, 0x7FFA, 0x7FFD, 0x7FFE, 0x7FFF, /* 0x40 */
+ 0x8007, 0x8008, 0x800A, 0x800D, 0x800E, 0x800F, 0x8011, 0x8013, /* 0x40 */
+ 0x8014, 0x8016, 0x801D, 0x801E, 0x801F, 0x8020, 0x8024, 0x8026, /* 0x50 */
+ 0x802C, 0x802E, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803A, /* 0x50 */
+ 0x803C, 0x803E, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806D, /* 0x60 */
+ 0x8071, 0x8075, 0x8081, 0x8088, 0x808E, 0x809C, 0x809E, 0x80A6, /* 0x60 */
+ 0x80A7, 0x80AB, 0x80B8, 0x80B9, 0x80C8, 0x80CD, 0x80CF, 0x80D2, /* 0x70 */
+ 0x80D4, 0x80D5, 0x80D7, 0x80D8, 0x80E0, 0x80ED, 0x80EE /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x80F0, 0x80F2, 0x80F3, 0x80F6, 0x80F9, 0x80FA, 0x80FE, /* 0x20 */
+ 0x8103, 0x810B, 0x8116, 0x8117, 0x8118, 0x811C, 0x811E, 0x8120, /* 0x20 */
+ 0x8124, 0x8127, 0x812C, 0x8130, 0x8135, 0x813A, 0x813C, 0x8145, /* 0x30 */
+ 0x8147, 0x814A, 0x814C, 0x8152, 0x8157, 0x8160, 0x8161, 0x8167, /* 0x30 */
+ 0x8168, 0x8169, 0x816D, 0x816F, 0x8177, 0x8181, 0x8190, 0x8184, /* 0x40 */
+ 0x8185, 0x8186, 0x818B, 0x818E, 0x8196, 0x8198, 0x819B, 0x819E, /* 0x40 */
+ 0x81A2, 0x81AE, 0x81B2, 0x81B4, 0x81BB, 0x81CB, 0x81C3, 0x81C5, /* 0x50 */
+ 0x81CA, 0x81CE, 0x81CF, 0x81D5, 0x81D7, 0x81DB, 0x81DD, 0x81DE, /* 0x50 */
+ 0x81E1, 0x81E4, 0x81EB, 0x81EC, 0x81F0, 0x81F1, 0x81F2, 0x81F5, /* 0x60 */
+ 0x81F6, 0x81F8, 0x81F9, 0x81FD, 0x81FF, 0x8200, 0x8203, 0x820F, /* 0x60 */
+ 0x8213, 0x8214, 0x8219, 0x821A, 0x821D, 0x8221, 0x8222, 0x8228, /* 0x70 */
+ 0x8232, 0x8234, 0x823A, 0x8243, 0x8244, 0x8245, 0x8246 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x824B, 0x824E, 0x824F, 0x8251, 0x8256, 0x825C, 0x8260, /* 0x20 */
+ 0x8263, 0x8267, 0x826D, 0x8274, 0x827B, 0x827D, 0x827F, 0x8280, /* 0x20 */
+ 0x8281, 0x8283, 0x8284, 0x8287, 0x8289, 0x828A, 0x828E, 0x8291, /* 0x30 */
+ 0x8294, 0x8296, 0x8298, 0x829A, 0x829B, 0x82A0, 0x82A1, 0x82A3, /* 0x30 */
+ 0x82A4, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AE, 0x82B0, 0x82B2, /* 0x40 */
+ 0x82B4, 0x82B7, 0x82BA, 0x82BC, 0x82BE, 0x82BF, 0x82C6, 0x82D0, /* 0x40 */
+ 0x82D5, 0x82DA, 0x82E0, 0x82E2, 0x82E4, 0x82E8, 0x82EA, 0x82ED, /* 0x50 */
+ 0x82EF, 0x82F6, 0x82F7, 0x82FD, 0x82FE, 0x8300, 0x8301, 0x8307, /* 0x50 */
+ 0x8308, 0x830A, 0x830B, 0x8354, 0x831B, 0x831D, 0x831E, 0x831F, /* 0x60 */
+ 0x8321, 0x8322, 0x832C, 0x832D, 0x832E, 0x8330, 0x8333, 0x8337, /* 0x60 */
+ 0x833A, 0x833C, 0x833D, 0x8342, 0x8343, 0x8344, 0x8347, 0x834D, /* 0x70 */
+ 0x834E, 0x8351, 0x8355, 0x8356, 0x8357, 0x8370, 0x8378 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x837D, 0x837F, 0x8380, 0x8382, 0x8384, 0x8386, 0x838D, /* 0x20 */
+ 0x8392, 0x8394, 0x8395, 0x8398, 0x8399, 0x839B, 0x839C, 0x839D, /* 0x20 */
+ 0x83A6, 0x83A7, 0x83A9, 0x83AC, 0x83BE, 0x83BF, 0x83C0, 0x83C7, /* 0x30 */
+ 0x83C9, 0x83CF, 0x83D0, 0x83D1, 0x83D4, 0x83DD, 0x8353, 0x83E8, /* 0x30 */
+ 0x83EA, 0x83F6, 0x83F8, 0x83F9, 0x83FC, 0x8401, 0x8406, 0x840A, /* 0x40 */
+ 0x840F, 0x8411, 0x8415, 0x8419, 0x83AD, 0x842F, 0x8439, 0x8445, /* 0x40 */
+ 0x8447, 0x8448, 0x844A, 0x844D, 0x844F, 0x8451, 0x8452, 0x8456, /* 0x50 */
+ 0x8458, 0x8459, 0x845A, 0x845C, 0x8460, 0x8464, 0x8465, 0x8467, /* 0x50 */
+ 0x846A, 0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847C, 0x847D, /* 0x60 */
+ 0x8481, 0x8485, 0x8492, 0x8493, 0x8495, 0x849E, 0x84A6, 0x84A8, /* 0x60 */
+ 0x84A9, 0x84AA, 0x84AF, 0x84B1, 0x84B4, 0x84BA, 0x84BD, 0x84BE, /* 0x70 */
+ 0x84C0, 0x84C2, 0x84C7, 0x84C8, 0x84CC, 0x84CF, 0x84D3 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x84DC, 0x84E7, 0x84EA, 0x84EF, 0x84F0, 0x84F1, 0x84F2, /* 0x20 */
+ 0x84F7, 0x8532, 0x84FA, 0x84FB, 0x84FD, 0x8502, 0x8503, 0x8507, /* 0x20 */
+ 0x850C, 0x850E, 0x8510, 0x851C, 0x851E, 0x8522, 0x8523, 0x8524, /* 0x30 */
+ 0x8525, 0x8527, 0x852A, 0x852B, 0x852F, 0x8533, 0x8534, 0x8536, /* 0x30 */
+ 0x853F, 0x8546, 0x854F, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556, /* 0x40 */
+ 0x8559, 0x855C, 0x855D, 0x855E, 0x855F, 0x8560, 0x8561, 0x8562, /* 0x40 */
+ 0x8564, 0x856B, 0x856F, 0x8579, 0x857A, 0x857B, 0x857D, 0x857F, /* 0x50 */
+ 0x8581, 0x8585, 0x8586, 0x8589, 0x858B, 0x858C, 0x858F, 0x8593, /* 0x50 */
+ 0x8598, 0x859D, 0x859F, 0x85A0, 0x85A2, 0x85A5, 0x85A7, 0x85B4, /* 0x60 */
+ 0x85B6, 0x85B7, 0x85B8, 0x85BC, 0x85BD, 0x85BE, 0x85BF, 0x85C2, /* 0x60 */
+ 0x85C7, 0x85CA, 0x85CB, 0x85CE, 0x85AD, 0x85D8, 0x85DA, 0x85DF, /* 0x70 */
+ 0x85E0, 0x85E6, 0x85E8, 0x85ED, 0x85F3, 0x85F6, 0x85FC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x85FF, 0x8600, 0x8604, 0x8605, 0x860D, 0x860E, 0x8610, /* 0x20 */
+ 0x8611, 0x8612, 0x8618, 0x8619, 0x861B, 0x861E, 0x8621, 0x8627, /* 0x20 */
+ 0x8629, 0x8636, 0x8638, 0x863A, 0x863C, 0x863D, 0x8640, 0x8642, /* 0x30 */
+ 0x8646, 0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865D, /* 0x30 */
+ 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8669, 0x866C, 0x866F, /* 0x40 */
+ 0x8675, 0x8676, 0x8677, 0x867A, 0x868D, 0x8691, 0x8696, 0x8698, /* 0x40 */
+ 0x869A, 0x869C, 0x86A1, 0x86A6, 0x86A7, 0x86A8, 0x86AD, 0x86B1, /* 0x50 */
+ 0x86B3, 0x86B4, 0x86B5, 0x86B7, 0x86B8, 0x86B9, 0x86BF, 0x86C0, /* 0x50 */
+ 0x86C1, 0x86C3, 0x86C5, 0x86D1, 0x86D2, 0x86D5, 0x86D7, 0x86DA, /* 0x60 */
+ 0x86DC, 0x86E0, 0x86E3, 0x86E5, 0x86E7, 0x8688, 0x86FA, 0x86FC, /* 0x60 */
+ 0x86FD, 0x8704, 0x8705, 0x8707, 0x870B, 0x870E, 0x870F, 0x8710, /* 0x70 */
+ 0x8713, 0x8714, 0x8719, 0x871E, 0x871F, 0x8721, 0x8723 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8728, 0x872E, 0x872F, 0x8731, 0x8732, 0x8739, 0x873A, /* 0x20 */
+ 0x873C, 0x873D, 0x873E, 0x8740, 0x8743, 0x8745, 0x874D, 0x8758, /* 0x20 */
+ 0x875D, 0x8761, 0x8764, 0x8765, 0x876F, 0x8771, 0x8772, 0x877B, /* 0x30 */
+ 0x8783, 0x8784, 0x8785, 0x8786, 0x8787, 0x8788, 0x8789, 0x878B, /* 0x30 */
+ 0x878C, 0x8790, 0x8793, 0x8795, 0x8797, 0x8798, 0x8799, 0x879E, /* 0x40 */
+ 0x87A0, 0x87A3, 0x87A7, 0x87AC, 0x87AD, 0x87AE, 0x87B1, 0x87B5, /* 0x40 */
+ 0x87BE, 0x87BF, 0x87C1, 0x87C8, 0x87C9, 0x87CA, 0x87CE, 0x87D5, /* 0x50 */
+ 0x87D6, 0x87D9, 0x87DA, 0x87DC, 0x87DF, 0x87E2, 0x87E3, 0x87E4, /* 0x50 */
+ 0x87EA, 0x87EB, 0x87ED, 0x87F1, 0x87F3, 0x87F8, 0x87FA, 0x87FF, /* 0x60 */
+ 0x8801, 0x8803, 0x8806, 0x8809, 0x880A, 0x880B, 0x8810, 0x8819, /* 0x60 */
+ 0x8812, 0x8813, 0x8814, 0x8818, 0x881A, 0x881B, 0x881C, 0x881E, /* 0x70 */
+ 0x881F, 0x8828, 0x882D, 0x882E, 0x8830, 0x8832, 0x8835 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x883A, 0x883C, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849, /* 0x20 */
+ 0x884A, 0x884B, 0x884E, 0x8851, 0x8855, 0x8856, 0x8858, 0x885A, /* 0x20 */
+ 0x885C, 0x885F, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879, 0x887B, /* 0x30 */
+ 0x8880, 0x8898, 0x889A, 0x889B, 0x889C, 0x889F, 0x88A0, 0x88A8, /* 0x30 */
+ 0x88AA, 0x88BA, 0x88BD, 0x88BE, 0x88C0, 0x88CA, 0x88CB, 0x88CC, /* 0x40 */
+ 0x88CD, 0x88CE, 0x88D1, 0x88D2, 0x88D3, 0x88DB, 0x88DE, 0x88E7, /* 0x40 */
+ 0x88EF, 0x88F0, 0x88F1, 0x88F5, 0x88F7, 0x8901, 0x8906, 0x890D, /* 0x50 */
+ 0x890E, 0x890F, 0x8915, 0x8916, 0x8918, 0x8919, 0x891A, 0x891C, /* 0x50 */
+ 0x8920, 0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935, /* 0x60 */
+ 0x8939, 0x893A, 0x893E, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949, /* 0x60 */
+ 0x894F, 0x8952, 0x8957, 0x895A, 0x895B, 0x895C, 0x8961, 0x8962, /* 0x70 */
+ 0x8963, 0x896B, 0x896E, 0x8970, 0x8973, 0x8975, 0x897A /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x897B, 0x897C, 0x897D, 0x8989, 0x898D, 0x8990, 0x8994, /* 0x20 */
+ 0x8995, 0x899B, 0x899C, 0x899F, 0x89A0, 0x89A5, 0x89B0, 0x89B4, /* 0x20 */
+ 0x89B5, 0x89B6, 0x89B7, 0x89BC, 0x89D4, 0x89D5, 0x89D6, 0x89D7, /* 0x30 */
+ 0x89D8, 0x89E5, 0x89E9, 0x89EB, 0x89ED, 0x89F1, 0x89F3, 0x89F6, /* 0x30 */
+ 0x89F9, 0x89FD, 0x89FF, 0x8A04, 0x8A05, 0x8A07, 0x8A0F, 0x8A11, /* 0x40 */
+ 0x8A12, 0x8A14, 0x8A15, 0x8A1E, 0x8A20, 0x8A22, 0x8A24, 0x8A26, /* 0x40 */
+ 0x8A2B, 0x8A2C, 0x8A2F, 0x8A35, 0x8A37, 0x8A3D, 0x8A3E, 0x8A40, /* 0x50 */
+ 0x8A43, 0x8A45, 0x8A47, 0x8A49, 0x8A4D, 0x8A4E, 0x8A53, 0x8A56, /* 0x50 */
+ 0x8A57, 0x8A58, 0x8A5C, 0x8A5D, 0x8A61, 0x8A65, 0x8A67, 0x8A75, /* 0x60 */
+ 0x8A76, 0x8A77, 0x8A79, 0x8A7A, 0x8A7B, 0x8A7E, 0x8A7F, 0x8A80, /* 0x60 */
+ 0x8A83, 0x8A86, 0x8A8B, 0x8A8F, 0x8A90, 0x8A92, 0x8A96, 0x8A97, /* 0x70 */
+ 0x8A99, 0x8A9F, 0x8AA7, 0x8AA9, 0x8AAE, 0x8AAF, 0x8AB3 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8AB6, 0x8AB7, 0x8ABB, 0x8ABE, 0x8AC3, 0x8AC6, 0x8AC8, /* 0x20 */
+ 0x8AC9, 0x8ACA, 0x8AD1, 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD7, 0x8ADD, /* 0x20 */
+ 0x8ADF, 0x8AEC, 0x8AF0, 0x8AF4, 0x8AF5, 0x8AF6, 0x8AFC, 0x8AFF, /* 0x30 */
+ 0x8B05, 0x8B06, 0x8B0B, 0x8B11, 0x8B1C, 0x8B1E, 0x8B1F, 0x8B0A, /* 0x30 */
+ 0x8B2D, 0x8B30, 0x8B37, 0x8B3C, 0x8B42, 0x8B43, 0x8B44, 0x8B45, /* 0x40 */
+ 0x8B46, 0x8B48, 0x8B52, 0x8B53, 0x8B54, 0x8B59, 0x8B4D, 0x8B5E, /* 0x40 */
+ 0x8B63, 0x8B6D, 0x8B76, 0x8B78, 0x8B79, 0x8B7C, 0x8B7E, 0x8B81, /* 0x50 */
+ 0x8B84, 0x8B85, 0x8B8B, 0x8B8D, 0x8B8F, 0x8B94, 0x8B95, 0x8B9C, /* 0x50 */
+ 0x8B9E, 0x8B9F, 0x8C38, 0x8C39, 0x8C3D, 0x8C3E, 0x8C45, 0x8C47, /* 0x60 */
+ 0x8C49, 0x8C4B, 0x8C4F, 0x8C51, 0x8C53, 0x8C54, 0x8C57, 0x8C58, /* 0x60 */
+ 0x8C5B, 0x8C5D, 0x8C59, 0x8C63, 0x8C64, 0x8C66, 0x8C68, 0x8C69, /* 0x70 */
+ 0x8C6D, 0x8C73, 0x8C75, 0x8C76, 0x8C7B, 0x8C7E, 0x8C86 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8C87, 0x8C8B, 0x8C90, 0x8C92, 0x8C93, 0x8C99, 0x8C9B, /* 0x20 */
+ 0x8C9C, 0x8CA4, 0x8CB9, 0x8CBA, 0x8CC5, 0x8CC6, 0x8CC9, 0x8CCB, /* 0x20 */
+ 0x8CCF, 0x8CD6, 0x8CD5, 0x8CD9, 0x8CDD, 0x8CE1, 0x8CE8, 0x8CEC, /* 0x30 */
+ 0x8CEF, 0x8CF0, 0x8CF2, 0x8CF5, 0x8CF7, 0x8CF8, 0x8CFE, 0x8CFF, /* 0x30 */
+ 0x8D01, 0x8D03, 0x8D09, 0x8D12, 0x8D17, 0x8D1B, 0x8D65, 0x8D69, /* 0x40 */
+ 0x8D6C, 0x8D6E, 0x8D7F, 0x8D82, 0x8D84, 0x8D88, 0x8D8D, 0x8D90, /* 0x40 */
+ 0x8D91, 0x8D95, 0x8D9E, 0x8D9F, 0x8DA0, 0x8DA6, 0x8DAB, 0x8DAC, /* 0x50 */
+ 0x8DAF, 0x8DB2, 0x8DB5, 0x8DB7, 0x8DB9, 0x8DBB, 0x8DC0, 0x8DC5, /* 0x50 */
+ 0x8DC6, 0x8DC7, 0x8DC8, 0x8DCA, 0x8DCE, 0x8DD1, 0x8DD4, 0x8DD5, /* 0x60 */
+ 0x8DD7, 0x8DD9, 0x8DE4, 0x8DE5, 0x8DE7, 0x8DEC, 0x8DF0, 0x8DBC, /* 0x60 */
+ 0x8DF1, 0x8DF2, 0x8DF4, 0x8DFD, 0x8E01, 0x8E04, 0x8E05, 0x8E06, /* 0x70 */
+ 0x8E0B, 0x8E11, 0x8E14, 0x8E16, 0x8E20, 0x8E21, 0x8E22 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E23, 0x8E26, 0x8E27, 0x8E31, 0x8E33, 0x8E36, 0x8E37, /* 0x20 */
+ 0x8E38, 0x8E39, 0x8E3D, 0x8E40, 0x8E41, 0x8E4B, 0x8E4D, 0x8E4E, /* 0x20 */
+ 0x8E4F, 0x8E54, 0x8E5B, 0x8E5C, 0x8E5D, 0x8E5E, 0x8E61, 0x8E62, /* 0x30 */
+ 0x8E69, 0x8E6C, 0x8E6D, 0x8E6F, 0x8E70, 0x8E71, 0x8E79, 0x8E7A, /* 0x30 */
+ 0x8E7B, 0x8E82, 0x8E83, 0x8E89, 0x8E90, 0x8E92, 0x8E95, 0x8E9A, /* 0x40 */
+ 0x8E9B, 0x8E9D, 0x8E9E, 0x8EA2, 0x8EA7, 0x8EA9, 0x8EAD, 0x8EAE, /* 0x40 */
+ 0x8EB3, 0x8EB5, 0x8EBA, 0x8EBB, 0x8EC0, 0x8EC1, 0x8EC3, 0x8EC4, /* 0x50 */
+ 0x8EC7, 0x8ECF, 0x8ED1, 0x8ED4, 0x8EDC, 0x8EE8, 0x8EEE, 0x8EF0, /* 0x50 */
+ 0x8EF1, 0x8EF7, 0x8EF9, 0x8EFA, 0x8EED, 0x8F00, 0x8F02, 0x8F07, /* 0x60 */
+ 0x8F08, 0x8F0F, 0x8F10, 0x8F16, 0x8F17, 0x8F18, 0x8F1E, 0x8F20, /* 0x60 */
+ 0x8F21, 0x8F23, 0x8F25, 0x8F27, 0x8F28, 0x8F2C, 0x8F2D, 0x8F2E, /* 0x70 */
+ 0x8F34, 0x8F35, 0x8F36, 0x8F37, 0x8F3A, 0x8F40, 0x8F41 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8F43, 0x8F47, 0x8F4F, 0x8F51, 0x8F52, 0x8F53, 0x8F54, /* 0x20 */
+ 0x8F55, 0x8F58, 0x8F5D, 0x8F5E, 0x8F65, 0x8F9D, 0x8FA0, 0x8FA1, /* 0x20 */
+ 0x8FA4, 0x8FA5, 0x8FA6, 0x8FB5, 0x8FB6, 0x8FB8, 0x8FBE, 0x8FC0, /* 0x30 */
+ 0x8FC1, 0x8FC6, 0x8FCA, 0x8FCB, 0x8FCD, 0x8FD0, 0x8FD2, 0x8FD3, /* 0x30 */
+ 0x8FD5, 0x8FE0, 0x8FE3, 0x8FE4, 0x8FE8, 0x8FEE, 0x8FF1, 0x8FF5, /* 0x40 */
+ 0x8FF6, 0x8FFB, 0x8FFE, 0x9002, 0x9004, 0x9008, 0x900C, 0x9018, /* 0x40 */
+ 0x901B, 0x9028, 0x9029, 0x902F, 0x902A, 0x902C, 0x902D, 0x9033, /* 0x50 */
+ 0x9034, 0x9037, 0x903F, 0x9043, 0x9044, 0x904C, 0x905B, 0x905D, /* 0x50 */
+ 0x9062, 0x9066, 0x9067, 0x906C, 0x9070, 0x9074, 0x9079, 0x9085, /* 0x60 */
+ 0x9088, 0x908B, 0x908C, 0x908E, 0x9090, 0x9095, 0x9097, 0x9098, /* 0x60 */
+ 0x9099, 0x909B, 0x90A0, 0x90A1, 0x90A2, 0x90A5, 0x90B0, 0x90B2, /* 0x70 */
+ 0x90B3, 0x90B4, 0x90B6, 0x90BD, 0x90CC, 0x90BE, 0x90C3 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x90C4, 0x90C5, 0x90C7, 0x90C8, 0x90D5, 0x90D7, 0x90D8, /* 0x20 */
+ 0x90D9, 0x90DC, 0x90DD, 0x90DF, 0x90E5, 0x90D2, 0x90F6, 0x90EB, /* 0x20 */
+ 0x90EF, 0x90F0, 0x90F4, 0x90FE, 0x90FF, 0x9100, 0x9104, 0x9105, /* 0x30 */
+ 0x9106, 0x9108, 0x910D, 0x9110, 0x9114, 0x9116, 0x9117, 0x9118, /* 0x30 */
+ 0x911A, 0x911C, 0x911E, 0x9120, 0x9125, 0x9122, 0x9123, 0x9127, /* 0x40 */
+ 0x9129, 0x912E, 0x912F, 0x9131, 0x9134, 0x9136, 0x9137, 0x9139, /* 0x40 */
+ 0x913A, 0x913C, 0x913D, 0x9143, 0x9147, 0x9148, 0x914F, 0x9153, /* 0x50 */
+ 0x9157, 0x9159, 0x915A, 0x915B, 0x9161, 0x9164, 0x9167, 0x916D, /* 0x50 */
+ 0x9174, 0x9179, 0x917A, 0x917B, 0x9181, 0x9183, 0x9185, 0x9186, /* 0x60 */
+ 0x918A, 0x918E, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919E, /* 0x60 */
+ 0x91A1, 0x91A6, 0x91A8, 0x91AC, 0x91AD, 0x91AE, 0x91B0, 0x91B1, /* 0x70 */
+ 0x91B2, 0x91B3, 0x91B6, 0x91BB, 0x91BC, 0x91BD, 0x91BF /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x91C2, 0x91C3, 0x91C5, 0x91D3, 0x91D4, 0x91D7, 0x91D9, /* 0x20 */
+ 0x91DA, 0x91DE, 0x91E4, 0x91E5, 0x91E9, 0x91EA, 0x91EC, 0x91ED, /* 0x20 */
+ 0x91EE, 0x91EF, 0x91F0, 0x91F1, 0x91F7, 0x91F9, 0x91FB, 0x91FD, /* 0x30 */
+ 0x9200, 0x9201, 0x9204, 0x9205, 0x9206, 0x9207, 0x9209, 0x920A, /* 0x30 */
+ 0x920C, 0x9210, 0x9212, 0x9213, 0x9216, 0x9218, 0x921C, 0x921D, /* 0x40 */
+ 0x9223, 0x9224, 0x9225, 0x9226, 0x9228, 0x922E, 0x922F, 0x9230, /* 0x40 */
+ 0x9233, 0x9235, 0x9236, 0x9238, 0x9239, 0x923A, 0x923C, 0x923E, /* 0x50 */
+ 0x9240, 0x9242, 0x9243, 0x9246, 0x9247, 0x924A, 0x924D, 0x924E, /* 0x50 */
+ 0x924F, 0x9251, 0x9258, 0x9259, 0x925C, 0x925D, 0x9260, 0x9261, /* 0x60 */
+ 0x9265, 0x9267, 0x9268, 0x9269, 0x926E, 0x926F, 0x9270, 0x9275, /* 0x60 */
+ 0x9276, 0x9277, 0x9278, 0x9279, 0x927B, 0x927C, 0x927D, 0x927F, /* 0x70 */
+ 0x9288, 0x9289, 0x928A, 0x928D, 0x928E, 0x9292, 0x9297 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9299, 0x929F, 0x92A0, 0x92A4, 0x92A5, 0x92A7, 0x92A8, /* 0x20 */
+ 0x92AB, 0x92AF, 0x92B2, 0x92B6, 0x92B8, 0x92BA, 0x92BB, 0x92BC, /* 0x20 */
+ 0x92BD, 0x92BF, 0x92C0, 0x92C1, 0x92C2, 0x92C3, 0x92C5, 0x92C6, /* 0x30 */
+ 0x92C7, 0x92C8, 0x92CB, 0x92CC, 0x92CD, 0x92CE, 0x92D0, 0x92D3, /* 0x30 */
+ 0x92D5, 0x92D7, 0x92D8, 0x92D9, 0x92DC, 0x92DD, 0x92DF, 0x92E0, /* 0x40 */
+ 0x92E1, 0x92E3, 0x92E5, 0x92E7, 0x92E8, 0x92EC, 0x92EE, 0x92F0, /* 0x40 */
+ 0x92F9, 0x92FB, 0x92FF, 0x9300, 0x9302, 0x9308, 0x930D, 0x9311, /* 0x50 */
+ 0x9314, 0x9315, 0x931C, 0x931D, 0x931E, 0x931F, 0x9321, 0x9324, /* 0x50 */
+ 0x9325, 0x9327, 0x9329, 0x932A, 0x9333, 0x9334, 0x9336, 0x9337, /* 0x60 */
+ 0x9347, 0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357, /* 0x60 */
+ 0x9358, 0x935A, 0x935E, 0x9364, 0x9365, 0x9367, 0x9369, 0x936A, /* 0x70 */
+ 0x936D, 0x936F, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x937A, 0x937D, 0x937F, 0x9380, 0x9381, 0x9382, 0x9388, /* 0x20 */
+ 0x938A, 0x938B, 0x938D, 0x938F, 0x9392, 0x9395, 0x9398, 0x939B, /* 0x20 */
+ 0x939E, 0x93A1, 0x93A3, 0x93A4, 0x93A6, 0x93A8, 0x93AB, 0x93B4, /* 0x30 */
+ 0x93B5, 0x93B6, 0x93BA, 0x93A9, 0x93C1, 0x93C4, 0x93C5, 0x93C6, /* 0x30 */
+ 0x93C7, 0x93C9, 0x93CA, 0x93CB, 0x93CC, 0x93CD, 0x93D3, 0x93D9, /* 0x40 */
+ 0x93DC, 0x93DE, 0x93DF, 0x93E2, 0x93E6, 0x93E7, 0x93F9, 0x93F7, /* 0x40 */
+ 0x93F8, 0x93FA, 0x93FB, 0x93FD, 0x9401, 0x9402, 0x9404, 0x9408, /* 0x50 */
+ 0x9409, 0x940D, 0x940E, 0x940F, 0x9415, 0x9416, 0x9417, 0x941F, /* 0x50 */
+ 0x942E, 0x942F, 0x9431, 0x9432, 0x9433, 0x9434, 0x943B, 0x943F, /* 0x60 */
+ 0x943D, 0x9443, 0x9445, 0x9448, 0x944A, 0x944C, 0x9455, 0x9459, /* 0x60 */
+ 0x945C, 0x945F, 0x9461, 0x9463, 0x9468, 0x946B, 0x946D, 0x946E, /* 0x70 */
+ 0x946F, 0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x957E, 0x9584, 0x9588, 0x958C, 0x958D, 0x958E, 0x959D, /* 0x20 */
+ 0x959E, 0x959F, 0x95A1, 0x95A6, 0x95A9, 0x95AB, 0x95AC, 0x95B4, /* 0x20 */
+ 0x95B6, 0x95BA, 0x95BD, 0x95BF, 0x95C6, 0x95C8, 0x95C9, 0x95CB, /* 0x30 */
+ 0x95D0, 0x95D1, 0x95D2, 0x95D3, 0x95D9, 0x95DA, 0x95DD, 0x95DE, /* 0x30 */
+ 0x95DF, 0x95E0, 0x95E4, 0x95E6, 0x961D, 0x961E, 0x9622, 0x9624, /* 0x40 */
+ 0x9625, 0x9626, 0x962C, 0x9631, 0x9633, 0x9637, 0x9638, 0x9639, /* 0x40 */
+ 0x963A, 0x963C, 0x963D, 0x9641, 0x9652, 0x9654, 0x9656, 0x9657, /* 0x50 */
+ 0x9658, 0x9661, 0x966E, 0x9674, 0x967B, 0x967C, 0x967E, 0x967F, /* 0x50 */
+ 0x9681, 0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969A, /* 0x60 */
+ 0x969D, 0x969F, 0x96A4, 0x96A5, 0x96A6, 0x96A9, 0x96AE, 0x96AF, /* 0x60 */
+ 0x96B3, 0x96BA, 0x96CA, 0x96D2, 0x5DB2, 0x96D8, 0x96DA, 0x96DD, /* 0x70 */
+ 0x96DE, 0x96DF, 0x96E9, 0x96EF, 0x96F1, 0x96FA, 0x9702 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9703, 0x9705, 0x9709, 0x971A, 0x971B, 0x971D, 0x9721, /* 0x20 */
+ 0x9722, 0x9723, 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974A, /* 0x20 */
+ 0x974E, 0x974F, 0x9755, 0x9757, 0x9758, 0x975A, 0x975B, 0x9763, /* 0x30 */
+ 0x9767, 0x976A, 0x976E, 0x9773, 0x9776, 0x9777, 0x9778, 0x977B, /* 0x30 */
+ 0x977D, 0x977F, 0x9780, 0x9789, 0x9795, 0x9796, 0x9797, 0x9799, /* 0x40 */
+ 0x979A, 0x979E, 0x979F, 0x97A2, 0x97AC, 0x97AE, 0x97B1, 0x97B2, /* 0x40 */
+ 0x97B5, 0x97B6, 0x97B8, 0x97B9, 0x97BA, 0x97BC, 0x97BE, 0x97BF, /* 0x50 */
+ 0x97C1, 0x97C4, 0x97C5, 0x97C7, 0x97C9, 0x97CA, 0x97CC, 0x97CD, /* 0x50 */
+ 0x97CE, 0x97D0, 0x97D1, 0x97D4, 0x97D7, 0x97D8, 0x97D9, 0x97DD, /* 0x60 */
+ 0x97DE, 0x97E0, 0x97DB, 0x97E1, 0x97E4, 0x97EF, 0x97F1, 0x97F4, /* 0x60 */
+ 0x97F7, 0x97F8, 0x97FA, 0x9807, 0x980A, 0x9819, 0x980D, 0x980E, /* 0x70 */
+ 0x9814, 0x9816, 0x981C, 0x981E, 0x9820, 0x9823, 0x9826 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x982B, 0x982E, 0x982F, 0x9830, 0x9832, 0x9833, 0x9835, /* 0x20 */
+ 0x9825, 0x983E, 0x9844, 0x9847, 0x984A, 0x9851, 0x9852, 0x9853, /* 0x20 */
+ 0x9856, 0x9857, 0x9859, 0x985A, 0x9862, 0x9863, 0x9865, 0x9866, /* 0x30 */
+ 0x986A, 0x986C, 0x98AB, 0x98AD, 0x98AE, 0x98B0, 0x98B4, 0x98B7, /* 0x30 */
+ 0x98B8, 0x98BA, 0x98BB, 0x98BF, 0x98C2, 0x98C5, 0x98C8, 0x98CC, /* 0x40 */
+ 0x98E1, 0x98E3, 0x98E5, 0x98E6, 0x98E7, 0x98EA, 0x98F3, 0x98F6, /* 0x40 */
+ 0x9902, 0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, 0x991A, /* 0x50 */
+ 0x991B, 0x991C, 0x991F, 0x9922, 0x9926, 0x9927, 0x992B, 0x9931, /* 0x50 */
+ 0x9932, 0x9933, 0x9934, 0x9935, 0x9939, 0x993A, 0x993B, 0x993C, /* 0x60 */
+ 0x9940, 0x9941, 0x9946, 0x9947, 0x9948, 0x994D, 0x994E, 0x9954, /* 0x60 */
+ 0x9958, 0x9959, 0x995B, 0x995C, 0x995E, 0x995F, 0x9960, 0x999B, /* 0x70 */
+ 0x999D, 0x999F, 0x99A6, 0x99B0, 0x99B1, 0x99B2, 0x99B5 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x99B9, 0x99BA, 0x99BD, 0x99BF, 0x99C3, 0x99C9, 0x99D3, /* 0x20 */
+ 0x99D4, 0x99D9, 0x99DA, 0x99DC, 0x99DE, 0x99E7, 0x99EA, 0x99EB, /* 0x20 */
+ 0x99EC, 0x99F0, 0x99F4, 0x99F5, 0x99F9, 0x99FD, 0x99FE, 0x9A02, /* 0x30 */
+ 0x9A03, 0x9A04, 0x9A0B, 0x9A0C, 0x9A10, 0x9A11, 0x9A16, 0x9A1E, /* 0x30 */
+ 0x9A20, 0x9A22, 0x9A23, 0x9A24, 0x9A27, 0x9A2D, 0x9A2E, 0x9A33, /* 0x40 */
+ 0x9A35, 0x9A36, 0x9A38, 0x9A47, 0x9A41, 0x9A44, 0x9A4A, 0x9A4B, /* 0x40 */
+ 0x9A4C, 0x9A4E, 0x9A51, 0x9A54, 0x9A56, 0x9A5D, 0x9AAA, 0x9AAC, /* 0x50 */
+ 0x9AAE, 0x9AAF, 0x9AB2, 0x9AB4, 0x9AB5, 0x9AB6, 0x9AB9, 0x9ABB, /* 0x50 */
+ 0x9ABE, 0x9ABF, 0x9AC1, 0x9AC3, 0x9AC6, 0x9AC8, 0x9ACE, 0x9AD0, /* 0x60 */
+ 0x9AD2, 0x9AD5, 0x9AD6, 0x9AD7, 0x9ADB, 0x9ADC, 0x9AE0, 0x9AE4, /* 0x60 */
+ 0x9AE5, 0x9AE7, 0x9AE9, 0x9AEC, 0x9AF2, 0x9AF3, 0x9AF5, 0x9AF9, /* 0x70 */
+ 0x9AFA, 0x9AFD, 0x9AFF, 0x9B00, 0x9B01, 0x9B02, 0x9B03 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9B04, 0x9B05, 0x9B08, 0x9B09, 0x9B0B, 0x9B0C, 0x9B0D, /* 0x20 */
+ 0x9B0E, 0x9B10, 0x9B12, 0x9B16, 0x9B19, 0x9B1B, 0x9B1C, 0x9B20, /* 0x20 */
+ 0x9B26, 0x9B2B, 0x9B2D, 0x9B33, 0x9B34, 0x9B35, 0x9B37, 0x9B39, /* 0x30 */
+ 0x9B3A, 0x9B3D, 0x9B48, 0x9B4B, 0x9B4C, 0x9B55, 0x9B56, 0x9B57, /* 0x30 */
+ 0x9B5B, 0x9B5E, 0x9B61, 0x9B63, 0x9B65, 0x9B66, 0x9B68, 0x9B6A, /* 0x40 */
+ 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B73, 0x9B75, 0x9B77, 0x9B78, /* 0x40 */
+ 0x9B79, 0x9B7F, 0x9B80, 0x9B84, 0x9B85, 0x9B86, 0x9B87, 0x9B89, /* 0x50 */
+ 0x9B8A, 0x9B8B, 0x9B8D, 0x9B8F, 0x9B90, 0x9B94, 0x9B9A, 0x9B9D, /* 0x50 */
+ 0x9B9E, 0x9BA6, 0x9BA7, 0x9BA9, 0x9BAC, 0x9BB0, 0x9BB1, 0x9BB2, /* 0x60 */
+ 0x9BB7, 0x9BB8, 0x9BBB, 0x9BBC, 0x9BBE, 0x9BBF, 0x9BC1, 0x9BC7, /* 0x60 */
+ 0x9BC8, 0x9BCE, 0x9BD0, 0x9BD7, 0x9BD8, 0x9BDD, 0x9BDF, 0x9BE5, /* 0x70 */
+ 0x9BE7, 0x9BEA, 0x9BEB, 0x9BEF, 0x9BF3, 0x9BF7, 0x9BF8 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9BF9, 0x9BFA, 0x9BFD, 0x9BFF, 0x9C00, 0x9C02, 0x9C0B, /* 0x20 */
+ 0x9C0F, 0x9C11, 0x9C16, 0x9C18, 0x9C19, 0x9C1A, 0x9C1C, 0x9C1E, /* 0x20 */
+ 0x9C22, 0x9C23, 0x9C26, 0x9C27, 0x9C28, 0x9C29, 0x9C2A, 0x9C31, /* 0x30 */
+ 0x9C35, 0x9C36, 0x9C37, 0x9C3D, 0x9C41, 0x9C43, 0x9C44, 0x9C45, /* 0x30 */
+ 0x9C49, 0x9C4A, 0x9C4E, 0x9C4F, 0x9C50, 0x9C53, 0x9C54, 0x9C56, /* 0x40 */
+ 0x9C58, 0x9C5B, 0x9C5D, 0x9C5E, 0x9C5F, 0x9C63, 0x9C69, 0x9C6A, /* 0x40 */
+ 0x9C5C, 0x9C6B, 0x9C68, 0x9C6E, 0x9C70, 0x9C72, 0x9C75, 0x9C77, /* 0x50 */
+ 0x9C7B, 0x9CE6, 0x9CF2, 0x9CF7, 0x9CF9, 0x9D0B, 0x9D02, 0x9D11, /* 0x50 */
+ 0x9D17, 0x9D18, 0x9D1C, 0x9D1D, 0x9D1E, 0x9D2F, 0x9D30, 0x9D32, /* 0x60 */
+ 0x9D33, 0x9D34, 0x9D3A, 0x9D3C, 0x9D45, 0x9D3D, 0x9D42, 0x9D43, /* 0x60 */
+ 0x9D47, 0x9D4A, 0x9D53, 0x9D54, 0x9D5F, 0x9D63, 0x9D62, 0x9D65, /* 0x70 */
+ 0x9D69, 0x9D6A, 0x9D6B, 0x9D70, 0x9D76, 0x9D77, 0x9D7B /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9D7C, 0x9D7E, 0x9D83, 0x9D84, 0x9D86, 0x9D8A, 0x9D8D, /* 0x20 */
+ 0x9D8E, 0x9D92, 0x9D93, 0x9D95, 0x9D96, 0x9D97, 0x9D98, 0x9DA1, /* 0x20 */
+ 0x9DAA, 0x9DAC, 0x9DAE, 0x9DB1, 0x9DB5, 0x9DB9, 0x9DBC, 0x9DBF, /* 0x30 */
+ 0x9DC3, 0x9DC7, 0x9DC9, 0x9DCA, 0x9DD4, 0x9DD5, 0x9DD6, 0x9DD7, /* 0x30 */
+ 0x9DDA, 0x9DDE, 0x9DDF, 0x9DE0, 0x9DE5, 0x9DE7, 0x9DE9, 0x9DEB, /* 0x40 */
+ 0x9DEE, 0x9DF0, 0x9DF3, 0x9DF4, 0x9DFE, 0x9E0A, 0x9E02, 0x9E07, /* 0x40 */
+ 0x9E0E, 0x9E10, 0x9E11, 0x9E12, 0x9E15, 0x9E16, 0x9E19, 0x9E1C, /* 0x50 */
+ 0x9E1D, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E80, 0x9E82, 0x9E83, 0x9E84, /* 0x50 */
+ 0x9E85, 0x9E87, 0x9E8E, 0x9E8F, 0x9E96, 0x9E98, 0x9E9B, 0x9E9E, /* 0x60 */
+ 0x9EA4, 0x9EA8, 0x9EAC, 0x9EAE, 0x9EAF, 0x9EB0, 0x9EB3, 0x9EB4, /* 0x60 */
+ 0x9EB5, 0x9EC6, 0x9EC8, 0x9ECB, 0x9ED5, 0x9EDF, 0x9EE4, 0x9EE7, /* 0x70 */
+ 0x9EEC, 0x9EED, 0x9EEE, 0x9EF0, 0x9EF1, 0x9EF2, 0x9EF5 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JIS0212_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9EF8, 0x9EFF, 0x9F02, 0x9F03, 0x9F09, 0x9F0F, 0x9F10, /* 0x20 */
+ 0x9F11, 0x9F12, 0x9F14, 0x9F16, 0x9F17, 0x9F19, 0x9F1A, 0x9F1B, /* 0x20 */
+ 0x9F1F, 0x9F22, 0x9F26, 0x9F2A, 0x9F2B, 0x9F2F, 0x9F31, 0x9F32, /* 0x30 */
+ 0x9F34, 0x9F37, 0x9F39, 0x9F3A, 0x9F3C, 0x9F3D, 0x9F3F, 0x9F41, /* 0x30 */
+ 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0x9F47, 0x9F53, 0x9F55, 0x9F56, /* 0x40 */
+ 0x9F57, 0x9F58, 0x9F5A, 0x9F5D, 0x9F5E, 0x9F68, 0x9F69, 0x9F6D, /* 0x40 */
+ 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F73, 0x9F75, 0x9F7A, 0x9F7D, /* 0x50 */
+ 0x9F8F, 0x9F90, 0x9F91, 0x9F92, 0x9F94, 0x9F96, 0x9F97, 0x9F9E, /* 0x50 */
+ 0x9FA1, 0x9FA2, 0x9FA3, 0x9FA5 /* 0x60 */
+ /* 0x60 */
+};
diff --git a/sal/textenc/tcvtjp4.tab b/sal/textenc/tcvtjp4.tab
new file mode 100644
index 000000000..ba9af14b1
--- /dev/null
+++ b/sal/textenc/tcvtjp4.tab
@@ -0,0 +1,3576 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the UniCode to DBCS tables for the following */
+/* japanese charsets: JIS201, JIS208 */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2171, 0x2172, 0, 0, 0, 0x2178, /* 0xA0 */
+ 0x212F, 0, 0, 0, 0x224C, 0, 0, 0, /* 0xA0 */
+ 0x216B, 0x215E, 0, 0, 0x212D, 0, 0x2279, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x215F, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x2160, /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_03[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627, /* 0x90 */
+ 0x2628, 0x2629, 0x262A, 0x262B, 0x262C, 0x262D, 0x262E, 0x262F, /* 0x90 */
+ 0x2630, 0x2631, 0, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636, /* 0xA0 */
+ 0x2637, 0x2638, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647, /* 0xB0 */
+ 0x2648, 0x2649, 0x264A, 0x264B, 0x264C, 0x264D, 0x264E, 0x264F, /* 0xB0 */
+ 0x2650, 0x2651, 0, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656, /* 0xC0 */
+ 0x2657, 0x2658 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_04[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2727, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2728, 0x2729, /* 0x10 */
+ 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 0x2730, 0x2731, /* 0x10 */
+ 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, /* 0x20 */
+ 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 0x2740, 0x2741, /* 0x20 */
+ 0x2751, 0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2758, 0x2759, /* 0x30 */
+ 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0x275F, 0x2760, 0x2761, /* 0x30 */
+ 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769, /* 0x40 */
+ 0x276A, 0x276B, 0x276C, 0x276D, 0x276E, 0x276F, 0x2770, 0x2771, /* 0x40 */
+ 0, 0x2757 /* 0x50 */
+ /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_20[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x213E, 0, 0, 0, 0, 0x213D, 0x2142, 0, /* 0x10 */
+ 0x2146, 0x2147, 0, 0, 0x2148, 0x2149, 0, 0, /* 0x10 */
+ 0x2277, 0x2278, 0, 0, 0, 0x2145, 0x2144, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x2273, 0, 0x216C, 0x216D, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x2228 /* 0x30 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x216E, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x2D62, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x2D64, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x2272, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x2D35, 0x2D36, 0x2D37, 0x2D38, 0x2D39, 0x2D3A, 0x2D3B, 0x2D3C, /* 0x60 */
+ 0x2D3D, 0x2D3E, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x222B, 0x222C, 0x222A, 0x222D, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x224D, 0, 0x224E /* 0xD0 */
+ /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x224F, 0, 0x225F, 0x2250, 0, 0, 0, 0x2260, /* 0x00 */
+ 0x223A, 0, 0, 0x223B, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x2D74, 0x215D, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x2265, 0, 0, 0x2267, 0x2167, 0x2D78, /* 0x10 */
+ 0x225C, 0, 0, 0, 0, 0, 0, 0x224A, /* 0x20 */
+ 0x224B, 0x2241, 0x2240, 0x2269, 0x226A, 0, 0x2D73, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x2168, 0x2268, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x2266, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x2262, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x2162, 0x2261, 0, 0, 0, 0, 0x2165, 0x2166, /* 0x60 */
+ 0, 0, 0x2263, 0x2264, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x223E, 0x223F, 0, 0, 0x223C, 0x223D, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x225D, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x2D79 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_23[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x225E /* 0x10 */
+ /* 0x10 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_24[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2D21, 0x2D22, 0x2D23, 0x2D24, 0x2D25, 0x2D26, 0x2D27, 0x2D28, /* 0x60 */
+ 0x2D29, 0x2D2A, 0x2D2B, 0x2D2C, 0x2D2D, 0x2D2E, 0x2D2F, 0x2D30, /* 0x60 */
+ 0x2D31, 0x2D32, 0x2D33, 0x2D34 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_25[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2821, 0x282C, 0x2822, 0x282D, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x2823, 0, 0, 0x282E, /* 0x00 */
+ 0x2824, 0, 0, 0x282F, 0x2826, 0, 0, 0x2831, /* 0x10 */
+ 0x2825, 0, 0, 0x2830, 0x2827, 0x283C, 0, 0, /* 0x10 */
+ 0x2837, 0, 0, 0x2832, 0x2829, 0x283E, 0, 0, /* 0x20 */
+ 0x2839, 0, 0, 0x2834, 0x2828, 0, 0, 0x2838, /* 0x20 */
+ 0x283D, 0, 0, 0x2833, 0x282A, 0, 0, 0x283A, /* 0x30 */
+ 0x283F, 0, 0, 0x2835, 0x282B, 0, 0, 0x283B, /* 0x30 */
+ 0, 0, 0x2840, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x2836, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x2223, 0x2222, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x2225, 0x2224, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x2227, 0x2226, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x2221, 0x217E, /* 0xC0 */
+ 0, 0, 0, 0x217B, 0, 0, 0x217D, 0x217C, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x227E /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x217A, 0x2179, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x216A, 0, 0x2169, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x2276, 0, 0, 0x2275, 0, 0x2274 /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2121, 0x2122, 0x2123, 0x2137, 0, 0x2139, 0x213A, 0x213B, /* 0x00 */
+ 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, /* 0x00 */
+ 0x215A, 0x215B, 0x2229, 0x222E, 0x214C, 0x214D, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x2141, 0x2D60, 0, 0x2D61, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, /* 0x40 */
+ 0x2428, 0x2429, 0x242A, 0x242B, 0x242C, 0x242D, 0x242E, 0x242F, /* 0x40 */
+ 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, /* 0x50 */
+ 0x2438, 0x2439, 0x243A, 0x243B, 0x243C, 0x243D, 0x243E, 0x243F, /* 0x50 */
+ 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, /* 0x60 */
+ 0x2448, 0x2449, 0x244A, 0x244B, 0x244C, 0x244D, 0x244E, 0x244F, /* 0x60 */
+ 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, /* 0x70 */
+ 0x2458, 0x2459, 0x245A, 0x245B, 0x245C, 0x245D, 0x245E, 0x245F, /* 0x70 */
+ 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, /* 0x80 */
+ 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, /* 0x80 */
+ 0x2470, 0x2471, 0x2472, 0x2473, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x212B, 0x212C, 0x2135, 0x2136, 0, /* 0x90 */
+ 0, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, /* 0xA0 */
+ 0x2528, 0x2529, 0x252A, 0x252B, 0x252C, 0x252D, 0x252E, 0x252F, /* 0xA0 */
+ 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, /* 0xB0 */
+ 0x2538, 0x2539, 0x253A, 0x253B, 0x253C, 0x253D, 0x253E, 0x253F, /* 0xB0 */
+ 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, /* 0xC0 */
+ 0x2548, 0x2549, 0x254A, 0x254B, 0x254C, 0x254D, 0x254E, 0x254F, /* 0xC0 */
+ 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, /* 0xD0 */
+ 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 0x255F, /* 0xD0 */
+ 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, /* 0xE0 */
+ 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x256D, 0x256E, 0x256F, /* 0xE0 */
+ 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0, /* 0xF0 */
+ 0, 0, 0, 0x2126, 0x213C, 0x2133, 0x2134 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2D6A, 0x2D6B, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x2D6C, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x2D65, 0x2D66, 0x2D67, 0x2D68, /* 0xA0 */
+ 0x2D69 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2D46, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x2D4A, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x2D41, 0, 0, 0, /* 0x10 */
+ 0x2D44, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x2D42, 0x2D4C, 0, 0, 0x2D4B, 0x2D45, /* 0x20 */
+ 0, 0, 0, 0x2D4D, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x2D47, 0, /* 0x30 */
+ 0, 0, 0, 0x2D4F, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x2D40, 0x2D4E, 0, 0, 0x2D43, 0, 0, /* 0x40 */
+ 0, 0x2D48, 0, 0, 0, 0, 0, 0x2D49, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x2D5F, 0x2D6F, 0x2D6E, 0x2D6D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x2D53, 0x2D54, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x2D50, 0x2D51, 0x2D52, 0, /* 0x90 */
+ 0, 0x2D56, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x2D55, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x2D63 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x306C, 0x437A, 0, 0x3C37, 0, 0, 0, 0x4B7C, /* 0x00 */
+ 0x3E66, 0x3B30, 0x3E65, 0x323C, 0, 0x4954, 0x4D3F, 0, /* 0x00 */
+ 0x5022, 0x312F, 0, 0, 0x336E, 0x5023, 0x4024, 0x5242, /* 0x10 */
+ 0x3556, 0x4A3A, 0, 0, 0, 0, 0x3E67, 0, /* 0x10 */
+ 0, 0x4E3E, 0, 0, 0, 0, 0x4A42, 0, /* 0x20 */
+ 0, 0, 0x5024, 0, 0, 0x4366, 0, 0, /* 0x20 */
+ 0, 0x5025, 0x367A, 0, 0, 0, 0x5026, 0, /* 0x30 */
+ 0x345D, 0x4330, 0, 0x3C67, 0x5027, 0, 0, 0x5028, /* 0x30 */
+ 0, 0, 0x5029, 0x4735, 0, 0x3557, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x4737, 0, 0x4663, 0x3843, 0x4B33, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x6949, 0x502A, 0x3E68, /* 0x50 */
+ 0x502B, 0x3235, 0, 0, 0, 0x3665, 0x3870, 0x4C69, /* 0x50 */
+ 0, 0, 0x5626, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x4D70, 0, 0x467D, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x3425, 0, /* 0x70 */
+ 0x3535, 0, 0x502C, 0, 0, 0x502D, 0x4E3B, 0, /* 0x80 */
+ 0x4D3D, 0x4168, 0x502F, 0x3B76, 0x4673, 0, 0x5032, 0, /* 0x80 */
+ 0, 0x313E, 0x385F, 0, 0x385E, 0x3066, 0, 0, /* 0x90 */
+ 0x4F4B, 0x4F4A, 0, 0x3A33, 0x3021, 0, 0x5033, 0x5034, /* 0x90 */
+ 0x5035, 0x4B34, 0x5036, 0, 0x3872, 0x3067, 0x4B72, 0, /* 0xA0 */
+ 0x357C, 0, 0, 0x357D, 0x357E, 0x4462, 0x4E3C, 0, /* 0xA0 */
+ 0x5037, 0, 0, 0x5038, 0, 0, 0x5039, 0, /* 0xB0 */
+ 0, 0, 0x3F4D, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x3D3A, 0x3F4E, 0x503E, 0, 0x503C, 0, 0x503D, 0x3558, /* 0xC0 */
+ 0, 0, 0x3A23, 0x3270, 0, 0x503B, 0x503A, 0x4A29, /* 0xC0 */
+ 0, 0, 0, 0, 0x3B46, 0x3B45, 0x423E, 0x503F, /* 0xD0 */
+ 0x4955, 0x4067, 0, 0, 0, 0x2138, 0x5040, 0x5042, /* 0xD0 */
+ 0, 0, 0, 0x4265, 0x4E61, 0x304A, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x5041, 0x323E, 0, /* 0xE0 */
+ 0x3644, 0, 0x4367, 0, 0, 0, 0x376F, 0x5043, /* 0xF0 */
+ 0, 0, 0, 0x4724 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x346B, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x5044, 0x304B, 0, 0, 0x3860, 0x346C, 0x497A, /* 0x00 */
+ 0x4832, 0x3559, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x3271, 0, 0x5067, 0x4541, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0x476C, /* 0x20 */
+ 0x5046, 0, 0, 0, 0x483C, 0, 0x4E62, 0, /* 0x30 */
+ 0x3F2D, 0, 0x3B47, 0, 0x3B77, 0x3240, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x4451, 0, 0, 0x4322, 0x504A, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x304C, 0x4463, 0x3D3B, /* 0x40 */
+ 0x3A34, 0x4D24, 0, 0x424E, 0, 0x323F, 0, 0x5049, /* 0x50 */
+ 0, 0x4D3E, 0x5045, 0x5047, 0x3A6E, 0x5048, 0x5524, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x5050, 0, 0, 0, 0, 0, 0x5053, /* 0x60 */
+ 0x5051, 0, 0, 0x3242, 0, 0x4A3B, 0x504B, 0, /* 0x70 */
+ 0, 0, 0, 0x504F, 0x3873, 0, 0, 0x3B48, /* 0x70 */
+ 0, 0, 0, 0x3426, 0, 0, 0x5054, 0, /* 0x80 */
+ 0x504C, 0, 0, 0x4E63, 0, 0x3B78, 0, 0x504D, /* 0x80 */
+ 0, 0x5052, 0, 0, 0, 0, 0x5055, 0, /* 0x90 */
+ 0x504E, 0, 0, 0x3621, 0, 0x304D, 0, 0, /* 0x90 */
+ 0x3622, 0x3241, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x5525, 0, 0x4B79, 0x496E, 0x3874, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x3F2F, 0x4E37, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4A58, /* 0xB0 */
+ 0, 0, 0x3738, 0x4225, 0x3264, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x3D53, 0, 0, 0, 0x5059, 0, /* 0xC0 */
+ 0x505E, 0x505C, 0, 0, 0x5057, 0, 0, 0x422F, /* 0xD0 */
+ 0x505A, 0, 0x505D, 0x505B, 0, 0x4A5D, 0, 0x5058, /* 0xD0 */
+ 0, 0x3F2E, 0, 0x4B73, 0x505F, 0x5060, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x3D24, 0x506D, /* 0xE0 */
+ 0, 0, 0, 0x4750, 0, 0x4936, 0x5068, 0, /* 0xF0 */
+ 0x4A70, 0, 0x3236, 0, 0, 0, 0x506C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5066, 0x506F, 0, /* 0x00 */
+ 0, 0x4152, 0, 0x3844, 0, 0x475C, 0, 0x6047, /* 0x00 */
+ 0, 0x506E, 0x455D, 0, 0x5063, 0, 0x3876, 0, /* 0x10 */
+ 0, 0x3875, 0x5061, 0, 0, 0, 0, 0x3C5A, /* 0x10 */
+ 0, 0x5069, 0, 0x4A6F, 0x434D, 0x5065, 0x3771, 0, /* 0x20 */
+ 0x5062, 0x506A, 0x5064, 0x4E51, 0x506B, 0x4F41, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x3666, 0, /* 0x30 */
+ 0, 0x3770, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x5070, 0, 0, 0, 0x5071, /* 0x40 */
+ 0x5075, 0x304E, 0, 0, 0, 0, 0, 0x4A50, /* 0x40 */
+ 0x5074, 0, 0, 0, 0, 0x5073, 0x5077, 0, /* 0x50 */
+ 0, 0, 0x5076, 0, 0x4464, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x3772, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x5078, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x3C45, 0, 0x4226, 0x4465, 0x3676, 0, /* 0x70 */
+ 0x5079, 0, 0, 0, 0, 0x3536, 0, 0, /* 0x70 */
+ 0x507A, 0, 0, 0, 0, 0x507C, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x4B35, 0, 0, /* 0x80 */
+ 0, 0x3766, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x3B31, 0x4877, 0x507B, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x3A45, 0x4D43, 0, 0, /* 0xA0 */
+ 0, 0, 0x507E, 0x5123, 0x507D, 0x3A44, 0, 0x3D7D, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x3739, 0, /* 0xB0 */
+ 0, 0, 0x5124, 0, 0, 0x364F, 0, 0, /* 0xC0 */
+ 0, 0x5121, 0x5122, 0, 0, 0x462F, 0, 0x417C, /* 0xC0 */
+ 0, 0x3623, 0, 0, 0, 0x4B4D, 0x5125, 0, /* 0xD0 */
+ 0, 0, 0x4E3D, 0, 0, 0, 0x5126, 0, /* 0xD0 */
+ 0, 0, 0, 0x5129, 0, 0x5127, 0, 0x414E, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x5128, 0x512A, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x512C, 0, 0, /* 0xF0 */
+ 0, 0x512B, 0, 0x4A48 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3537, 0x512E, 0x512F, 0, 0x322F, 0, 0, 0, /* 0x00 */
+ 0, 0x512D, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x3C74, 0, 0x5132, 0x5131, 0x5130, 0, /* 0x10 */
+ 0x5056, 0, 0x5133, 0, 0, 0, 0, 0x3D7E, /* 0x10 */
+ 0, 0x5134, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x4D25, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x4C59, 0, 0, 0, 0, 0x5136, /* 0x30 */
+ 0, 0, 0x5135, 0x5138, 0x5137, 0, 0, 0x5139, /* 0x30 */
+ 0x513A, 0x3074, 0, 0x3835, 0x373B, 0x3D3C, 0x437B, 0x3624, /* 0x40 */
+ 0x4068, 0x3877, 0, 0x396E, 0x513C, 0x4C48, 0x4546, 0, /* 0x40 */
+ 0x3B79, 0, 0x513B, 0, 0x513D, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x455E, 0, 0x3375, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x513E, 0, 0, 0x467E, 0, 0, /* 0x60 */
+ 0x4134, 0x5140, 0x5141, 0x482C, 0x3878, 0x4F3B, 0x5142, 0, /* 0x60 */
+ 0, 0x3626, 0, 0, 0, 0x4A3C, 0x4236, 0x3671, /* 0x70 */
+ 0x4535, 0, 0, 0, 0x3773, 0, 0, 0, /* 0x70 */
+ 0x5143, 0, 0x5144, 0, 0, 0x4662, 0x315F, 0, /* 0x80 */
+ 0, 0x5147, 0x3A7D, 0, 0x5146, 0x3A46, 0, 0x5148, /* 0x80 */
+ 0x666E, 0x5149, 0x4B41, 0x514A, 0, 0x514B, 0x514C, 0x3E69, /* 0x90 */
+ 0, 0x3C4C, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x3427, 0, 0x514F, 0, 0x514D, 0x4C3D, 0x514E, 0, /* 0xA0 */
+ 0x495A, 0x5150, 0x5151, 0x5152, 0x455F, 0, 0, 0, /* 0xA0 */
+ 0x5156, 0x5154, 0x5155, 0x5153, 0x3A63, 0x5157, 0x4C6A, 0x4E64, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x5158, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x4028, 0x5159, 0x3D5A, 0, /* 0xC0 */
+ 0, 0x515A, 0, 0x437C, 0x4E3F, 0x4560, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x5245, 0, /* 0xD0 */
+ 0, 0, 0, 0x515B, 0x7425, 0x3645, 0, 0, /* 0xD0 */
+ 0x515C, 0x4B5E, 0, 0, 0, 0, 0x3D68, 0x427C, /* 0xE0 */
+ 0, 0x515E, 0x4664, 0, 0, 0x515F, 0, 0, /* 0xE0 */
+ 0x5160, 0x332E, 0, 0, 0, 0x5161, 0x3627, 0, /* 0xF0 */
+ 0x464C, 0x317A, 0x3D50, 0, 0, 0x4821, 0x5162 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4561, 0, 0, 0x3F4F, 0x5163, 0, 0x4A2C, 0x405A, /* 0x00 */
+ 0x3422, 0, 0x3429, 0x5164, 0, 0, 0x5166, 0, /* 0x00 */
+ 0, 0x373A, 0, 0, 0x5165, 0, 0, 0x4E73, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x3D69, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x483D, 0x4A4C, 0, 0x5167, /* 0x20 */
+ 0, 0x4D78, 0x5168, 0, 0, 0, 0x5169, 0, /* 0x20 */
+ 0x457E, 0, 0, 0x516A, 0, 0, 0x4029, 0x3A7E, /* 0x30 */
+ 0x3774, 0x516B, 0x3B49, 0x396F, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x4466, 0x516D, 0, 0, 0x4227, /* 0x40 */
+ 0, 0, 0x3A6F, 0x516E, 0x516F, 0x4130, 0, 0x516C, /* 0x40 */
+ 0, 0, 0, 0, 0x5171, 0, 0x4B36, 0, /* 0x50 */
+ 0, 0, 0, 0x3964, 0, 0, 0x5170, 0, /* 0x50 */
+ 0, 0, 0, 0x3775, 0x3A5E, 0x476D, 0, 0, /* 0x60 */
+ 0, 0x5174, 0x5172, 0, 0, 0, 0, 0x497B, /* 0x60 */
+ 0x3E6A, 0x517B, 0x3364, 0x5175, 0x5173, 0x414F, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x5177, 0, 0x5176, /* 0x70 */
+ 0, 0, 0, 0x3344, 0, 0, 0, 0x3760, /* 0x80 */
+ 0x517C, 0x4E2D, 0, 0, 0, 0x5178, 0, 0, /* 0x80 */
+ 0, 0x517D, 0x517A, 0, 0x5179, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x4E4F, 0, 0, 0, 0x3879, /* 0x90 */
+ 0x3243, 0, 0, 0x4E74, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x3D75, 0x4558, 0x3965, 0x5222, 0x5223, 0, 0, /* 0xA0 */
+ 0, 0x4E65, 0, 0, 0x4F2B, 0x5225, 0, 0, /* 0xB0 */
+ 0, 0x387A, 0, 0, 0x5224, 0, 0x332F, 0, /* 0xB0 */
+ 0, 0x5226, 0, 0x4B56, 0, 0x443C, 0, 0x4D26, /* 0xC0 */
+ 0, 0x4A59, 0, 0, 0, 0x5227, 0, 0, /* 0xC0 */
+ 0, 0, 0x7055, 0, 0, 0x4630, 0, 0x5228, /* 0xD0 */
+ 0x342A, 0x4C33, 0, 0, 0, 0x3E21, 0x5229, 0x4A67, /* 0xD0 */
+ 0x522D, 0, 0x402A, 0x522A, 0x3650, 0, 0x522B, 0x342B, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x372E, 0x522E, 0, 0x522F, 0, 0, /* 0xF0 */
+ 0x5230, 0x5231, 0x3C5B, 0, 0, 0, 0x387B, 0x4C5E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4C68, 0x4677, 0, 0, 0x4A71, 0x5232, 0, /* 0x00 */
+ 0x5233, 0, 0, 0, 0, 0x5235, 0, 0x5237, /* 0x00 */
+ 0x5236, 0, 0, 0, 0, 0x5238, 0x323D, 0x4B4C, /* 0x10 */
+ 0, 0x3A7C, 0x5239, 0, 0, 0x4159, 0, 0, /* 0x10 */
+ 0x3E22, 0x3629, 0, 0x523A, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x485B, 0, 0, 0, 0, 0x523B, /* 0x20 */
+ 0, 0x523C, 0, 0x523D, 0, 0, 0, 0, /* 0x30 */
+ 0x523E, 0x4924, 0x3668, 0x3065, 0, 0, 0, 0x463F, /* 0x30 */
+ 0x523F, 0x3D3D, 0, 0x4069, 0, 0x5241, 0x5240, 0x3E23, /* 0x40 */
+ 0x3861, 0x5243, 0x483E, 0, 0, 0x5244, 0, 0, /* 0x40 */
+ 0, 0x485C, 0x4234, 0x426E, 0x3628, 0, 0, 0x466E, /* 0x50 */
+ 0x4331, 0, 0x476E, 0, 0x4B4E, 0, 0x5246, 0, /* 0x50 */
+ 0x406A, 0, 0, 0, 0, 0, 0x3735, 0, /* 0x60 */
+ 0, 0x5247, 0, 0, 0, 0, 0x5248, 0x312C, /* 0x60 */
+ 0x3075, 0x346D, 0, 0x4228, 0x3551, 0x4D71, 0, 0x524B, /* 0x70 */
+ 0x3237, 0, 0, 0x524A, 0, 0, 0, 0x362A, /* 0x70 */
+ 0, 0, 0x524C, 0, 0x4C71, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x524D, 0, /* 0x90 */
+ 0x4E52, 0, 0x387C, 0, 0, 0, 0, 0x3836, /* 0x90 */
+ 0x524E, 0, 0, 0, 0, 0x5250, 0x524F, 0, /* 0xA0 */
+ 0x3F5F, 0x3139, 0, 0, 0, 0x315E, 0x5251, 0, /* 0xA0 */
+ 0x5252, 0, 0, 0x3837, 0, 0, 0x5253, 0, /* 0xB0 */
+ 0, 0, 0, 0x356E, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x3B32, 0x5254, 0, 0, 0, 0, /* 0xC0 */
+ 0x4B74, 0x3A35, 0x355A, 0x4D27, 0x4150, 0x483F, 0x3C7D, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x3D47, 0, 0x3C68, 0x3C75, /* 0xD0 */
+ 0, 0x3D76, 0, 0x4840, 0, 0, 0, 0x5257, /* 0xD0 */
+ 0, 0x3143, 0x4151, 0x387D, 0x3845, 0x3667, 0, 0, /* 0xE0 */
+ 0x525B, 0x4321, 0x427E, 0x362B, 0x3E24, 0x525C, 0x525A, 0x3244, /* 0xE0 */
+ 0x4266, 0x3C38, 0x3B4B, 0x3126, 0, 0, 0x3370, 0x3966, /* 0xF0 */
+ 0x3B4A, 0, 0x525D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x525E, 0, 0x3549, 0x3346, 0, 0, 0, /* 0x00 */
+ 0x3967, 0x3548, 0x445F, 0x3125, 0x4631, 0x4C3E, 0x3921, 0x4D79, /* 0x00 */
+ 0x4547, 0x387E, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x372F, 0, 0x5267, 0, 0x3663, /* 0x10 */
+ 0x4B4A, 0, 0, 0, 0, 0, 0x485D, 0, /* 0x20 */
+ 0, 0x5266, 0, 0x345E, 0x5261, 0x5262, 0x5264, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x5265, 0, /* 0x30 */
+ 0x355B, 0x3F61, 0, 0x4A2D, 0x5263, 0x525F, 0x3863, 0, /* 0x30 */
+ 0x5260, 0, 0x4F24, 0, 0, 0, 0x4A72, 0, /* 0x40 */
+ 0x4468, 0x3862, 0x3970, 0, 0, 0, 0x5268, 0, /* 0x40 */
+ 0, 0x465D, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x526C, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x3C7E, 0, 0x3C76, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x526F, 0x526D, 0, 0x4C23, 0, 0x526A, 0x5273, 0x526E, /* 0x70 */
+ 0, 0, 0, 0x5271, 0x3846, 0x4C3F, 0, 0, /* 0x70 */
+ 0x5272, 0, 0, 0, 0x5274, 0, 0x5276, 0, /* 0x80 */
+ 0, 0, 0, 0x3A70, 0x4F42, 0, 0x526B, 0x5269, /* 0x80 */
+ 0x5275, 0, 0x5270, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x5278, 0, 0x5323, 0x527A, 0, 0, /* 0xA0 */
+ 0x527E, 0, 0, 0x5321, 0x527B, 0, 0, 0x533E, /* 0xA0 */
+ 0, 0, 0x3A69, 0x3331, 0, 0, 0, 0, /* 0xB0 */
+ 0x5279, 0, 0, 0, 0x5325, 0x3076, 0x5324, 0, /* 0xB0 */
+ 0x3025, 0x494A, 0x5322, 0, 0x527C, 0, 0, 0x5277, /* 0xC0 */
+ 0x527D, 0x3A48, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x5326, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x3077, 0x532F, 0, 0, 0x5327, 0x5328, 0, /* 0xE0 */
+ 0x3E25, 0x4B69, 0, 0, 0, 0x532D, 0x532C, 0, /* 0xE0 */
+ 0, 0, 0x452F, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x532E, 0, 0, 0x532B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3134, 0, 0x3A36, 0x3F30, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5329, /* 0x00 */
+ 0x4562, 0, 0, 0, 0x532A, 0, 0x3022, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x5334, 0x4D23, /* 0x20 */
+ 0, 0x3E27, 0, 0x533A, 0, 0, 0, 0, /* 0x30 */
+ 0x5339, 0x5330, 0, 0, 0, 0, 0x4243, 0, /* 0x30 */
+ 0x5331, 0, 0, 0, 0x426F, 0x5336, 0x3E26, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x5333, 0, 0, 0x4C64, /* 0x40 */
+ 0, 0, 0, 0x373C, 0, 0, 0x5337, 0x5338, /* 0x50 */
+ 0, 0, 0, 0, 0x5335, 0x533B, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x5332, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x5341, 0x5346, 0, 0x5342, 0, /* 0x70 */
+ 0x533D, 0, 0, 0x5347, 0x4131, 0, 0, 0x5349, /* 0x80 */
+ 0, 0x3922, 0x533F, 0x437D, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x5343, 0x533C, 0x342D, 0, 0x346E, 0x3365, 0x5344, 0x5340, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3776, /* 0xA0 */
+ 0x534A, 0x5348, 0x4153, 0x354A, 0x362C, 0, 0x5345, 0, /* 0xA0 */
+ 0x3674, 0, 0, 0, 0, 0, 0x3144, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x534E, 0x534C, 0, 0x5427, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x5351, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x534B, 0, 0x534F, 0, 0, 0x534D, /* 0xD0 */
+ 0, 0, 0, 0x3B4C, 0x5350, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5353, /* 0xF0 */
+ 0, 0x5358, 0, 0, 0, 0x5356, 0x5355 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4332, 0, /* 0x00 */
+ 0, 0x3245, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x5352, 0, 0x5354, 0x3E28, /* 0x10 */
+ 0x3133, 0, 0, 0x5357, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x325E, 0, 0, 0, 0, 0, 0x5362, /* 0x20 */
+ 0, 0x3E7C, 0x535E, 0, 0x535C, 0, 0x535D, 0, /* 0x30 */
+ 0x535F, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x313D, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x4139, 0, 0x5359, 0, /* 0x40 */
+ 0x535A, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x337A, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x5361, 0, 0, 0, /* 0x60 */
+ 0x346F, 0, 0x5364, 0x5360, 0x5363, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x4A2E, 0, 0, 0, /* 0x70 */
+ 0x4655, 0, 0x4838, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x5366, 0, 0, 0, 0, 0, 0x5365, 0x3345, /* 0x80 */
+ 0, 0, 0x5367, 0, 0, 0, 0, 0x536A, /* 0x80 */
+ 0, 0, 0, 0, 0x5369, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x5368, 0, 0x4739, 0, 0, 0x536B, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x536C, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x536E, 0, 0x536D, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x5370, 0, 0, 0, /* 0xB0 */
+ 0x5373, 0x5371, 0x536F, 0x5372, 0, 0, 0, 0, /* 0xC0 */
+ 0x5374, 0, 0, 0, 0, 0, 0x5375, 0, /* 0xC0 */
+ 0, 0x5376, 0, 0x5377, 0, 0, 0, 0x5378, /* 0xD0 */
+ 0x5145, 0, 0x3C7C, 0x3B4D, 0, 0, 0x3273, 0, /* 0xD0 */
+ 0x3078, 0, 0, 0x4344, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x5379, 0, /* 0xE0 */
+ 0x3A24, 0, 0x304F, 0x3F5E, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x537A, 0x3847, 0, 0, 0x3971, 0, 0x537C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x537B, 0, 0, 0x4A60, 0x537D, 0, 0, 0, /* 0x00 */
+ 0x5421, 0x537E, 0, 0x5422, 0, 0x5423, 0, 0x3777, /* 0x00 */
+ 0, 0, 0x3160, 0x5424, 0, 0, 0x5426, 0, /* 0x10 */
+ 0x5425, 0, 0, 0, 0x5428, 0, 0, 0x455A, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x5429, 0x3035, /* 0x20 */
+ 0x3A5F, 0, 0, 0, 0, 0x373D, 0, 0, /* 0x20 */
+ 0x434F, 0, 0, 0, 0, 0, 0, 0x542A, /* 0x30 */
+ 0x542B, 0, 0, 0x542D, 0, 0, 0, 0, /* 0x30 */
+ 0x542E, 0, 0x3A64, 0, 0, 0, 0, 0x3651, /* 0x40 */
+ 0, 0, 0x4B37, 0, 0, 0, 0x542C, 0x542F, /* 0x40 */
+ 0x3A41, 0x3923, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x5433, 0, 0, 0x3A25, 0, 0x4333, 0, /* 0x60 */
+ 0, 0x5430, 0x445A, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5434, /* 0x70 */
+ 0, 0, 0x3F62, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x5432, 0x5435, 0, 0x373F, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x5436, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x5437, 0, 0x3924, 0x3340, 0x5439, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x543A, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x543B, 0, 0, 0x5438, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x5431, 0, 0, 0x543C, 0, 0, 0x543D, 0, /* 0xC0 */
+ 0, 0, 0, 0x4B64, 0, 0, 0x3E6B, 0, /* 0xC0 */
+ 0, 0, 0x543F, 0x5440, 0x543E, 0, 0x5442, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x4738, 0, 0, 0x3068, /* 0xD0 */
+ 0x4956, 0, 0, 0x5443, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x3E7D, 0, 0, 0x3C39, /* 0xF0 */
+ 0, 0x475D, 0x3470, 0, 0x3A6B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4B59, 0, 0x4632, 0, 0, 0x3778, 0x424F, 0, /* 0x00 */
+ 0, 0, 0x5441, 0x5444, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x4244, 0, 0, /* 0x10 */
+ 0, 0x5445, 0, 0, 0, 0x5446, 0, 0, /* 0x10 */
+ 0, 0x5448, 0, 0, 0x4469, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x342E, 0, 0, 0, 0, 0x7421, /* 0x20 */
+ 0x3161, 0x4A73, 0, 0, 0x3E6C, 0x4548, 0, 0, /* 0x30 */
+ 0, 0, 0x3A66, 0, 0, 0x544E, 0, 0, /* 0x30 */
+ 0x4A3D, 0x4E5D, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x3274, 0x544A, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x413A, 0x544D, 0, 0x4563, 0, 0, 0x4549, /* 0x50 */
+ 0x4564, 0x4839, 0x444D, 0, 0, 0, 0x3A49, 0, /* 0x50 */
+ 0, 0, 0x5449, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x3176, 0, 0x4536, 0, 0, 0, 0, /* 0x60 */
+ 0x544B, 0, 0x5447, 0, 0, 0x3F50, 0, 0, /* 0x70 */
+ 0, 0x544F, 0, 0, 0, 0, 0x3D4E, 0, /* 0x70 */
+ 0, 0, 0, 0x362D, 0, 0x5450, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x4A68, 0, 0, 0, 0x417D, /* 0x90 */
+ 0, 0, 0, 0, 0x4446, 0, 0, 0x5452, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x4B4F, 0, 0, 0x5453, 0, 0, 0x5458, 0, /* 0xA0 */
+ 0, 0, 0, 0x4A2F, 0, 0, 0, 0, /* 0xB0 */
+ 0x5457, 0x5451, 0x5454, 0x5456, 0, 0, 0x3A26, 0, /* 0xB0 */
+ 0, 0x4A49, 0, 0, 0, 0x5459, 0, 0x4345, /* 0xC0 */
+ 0, 0, 0x3275, 0, 0x3E6D, 0, 0, 0, /* 0xC0 */
+ 0, 0x545B, 0, 0x545A, 0, 0x3968, 0, 0x545C, /* 0xD0 */
+ 0x545E, 0x545D, 0, 0, 0x5460, 0, 0x5455, 0x5462, /* 0xD0 */
+ 0, 0, 0, 0, 0x5461, 0x545F, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x3B4E, 0x3F51, 0, 0x4154, 0x5463, /* 0xE0 */
+ 0x403C, 0x306D, 0x4764, 0, 0, 0, 0, 0x445B, /* 0xF0 */
+ 0, 0x5465, 0x5464, 0x5466, 0x5467, 0x5468 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5469, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x4A51, 0x546A, 0, 0, 0, 0, 0x3246, /* 0x00 */
+ 0x546B, 0, 0, 0, 0, 0x4D3C, 0x3330, 0, /* 0x10 */
+ 0x5249, 0x3D48, 0x423F, 0x546C, 0x4C6B, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x4C34, 0, 0, 0x546E, 0, 0x4267, /* 0x20 */
+ 0, 0x4537, 0x4240, 0x4957, 0x546F, 0x5470, 0x317B, 0, /* 0x20 */
+ 0, 0x3C3A, 0x5471, 0, 0, 0, 0, 0x3050, /* 0x30 */
+ 0x5472, 0, 0, 0, 0, 0, 0x5473, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x3162, 0, 0, 0x3471, /* 0x40 */
+ 0x4660, 0x4A74, 0, 0, 0, 0, 0x5477, 0x4155, /* 0x40 */
+ 0x5476, 0x3740, 0, 0, 0x4B5B, 0x5475, 0, 0x4565, /* 0x50 */
+ 0x5479, 0, 0x5478, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x547B, 0, 0x547A, 0, 0, 0x317C, 0, 0x547C, /* 0x60 */
+ 0x3E29, 0x547E, 0x4325, 0, 0x547D, 0, 0x4A33, 0, /* 0x60 */
+ 0, 0, 0, 0x3D77, 0x455B, 0, 0, 0, /* 0x70 */
+ 0x5521, 0, 0, 0, 0, 0x3925, 0, 0, /* 0x70 */
+ 0, 0x5522, 0x4721, 0x485E, 0x4C51, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x4725, 0, 0, 0x552B, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x3538, 0, 0, 0x4D45, 0, /* 0x90 */
+ 0, 0x4C2F, 0, 0x562C, 0, 0x5523, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x5526, 0, 0x4245, 0, 0, /* 0xA0 */
+ 0x4B38, 0, 0, 0, 0x454A, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x5527, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x4B65, 0, 0x3A4A, 0, 0, 0x3E2A, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x5528, 0, /* 0xC0 */
+ 0, 0x3B50, 0, 0x3B4F, 0, 0, 0, 0, /* 0xC0 */
+ 0x3039, 0x3848, 0, 0x402B, 0x3051, 0, 0, 0, /* 0xD0 */
+ 0, 0x552C, 0x552D, 0, 0x552A, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x3138, 0x342F, 0, /* 0xE0 */
+ 0x5529, 0, 0x4C45, 0x4931, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x3028, 0, /* 0xF0 */
+ 0, 0, 0, 0x3079, 0, 0, 0, 0x3B51 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3052, 0, 0x3023, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x5532, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x5530, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x4C3C, 0, 0x5533, 0, 0x5531, 0, 0, 0x552F, /* 0x10 */
+ 0x3F31, 0, 0, 0, 0, 0x552E, 0, 0, /* 0x20 */
+ 0, 0x4A5A, 0, 0, 0, 0, 0, 0x3864, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x5537, 0x5538, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x3E2B, 0, 0, 0, /* 0x30 */
+ 0x5534, 0x4F2C, 0, 0, 0, 0, 0x474C, 0, /* 0x40 */
+ 0, 0x5536, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x3A27, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x5539, 0, 0, 0, 0x4958, 0, /* 0x60 */
+ 0, 0, 0x553A, 0, 0x5535, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4C3B, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x475E, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x553B, 0x4932, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x553C, 0x5540, 0x553D, 0, /* 0xB0 */
+ 0, 0x3247, 0x553F, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x3C3B, 0, 0x553E, 0x3779, 0, 0, 0, /* 0xC0 */
+ 0x554C, 0, 0, 0, 0, 0, 0x5545, 0x5542, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x4364, 0, 0x5541, 0, 0, 0x5543, 0, /* 0xE0 */
+ 0, 0x5544, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x5546, 0x5547 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x3472, 0, 0x5549, 0x5548, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x554A, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x3E6E, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x554D, 0, 0x445C, 0, 0, 0, /* 0x20 */
+ 0x3145, 0, 0x554B, 0, 0, 0, 0x554E, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x554F, 0, /* 0x30 */
+ 0x5552, 0, 0, 0x5550, 0, 0x5551, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x3B52, 0x5553, 0, 0, 0x3926, 0x5554, 0, 0x3B7A, /* 0x50 */
+ 0x4238, 0, 0x5555, 0x5556, 0x3B5A, 0x3927, 0, 0x4C52, /* 0x50 */
+ 0, 0, 0, 0x3528, 0x3849, 0x5557, 0x3358, 0, /* 0x60 */
+ 0, 0x5558, 0, 0x4239, 0, 0, 0, 0, /* 0x60 */
+ 0x5559, 0x5623, 0, 0x555A, 0, 0x555B, 0, 0, /* 0x70 */
+ 0x555C, 0, 0x555E, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x555F, 0, 0, 0x5560, 0, 0x4270, 0, 0x3127, /* 0x80 */
+ 0x3C69, 0x3042, 0, 0x4157, 0x3430, 0x3C35, 0, 0x3928, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x4566, 0, 0x3D21, /* 0x90 */
+ 0x3431, 0x4368, 0x446A, 0x3038, 0x3539, 0x4A75, 0, 0x3C42, /* 0x90 */
+ 0, 0, 0x3552, 0x406B, 0x3C3C, 0x4D28, 0x5561, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x355C, 0, /* 0xA0 */
+ 0x3A4B, 0, 0, 0x3332, 0x3163, 0x3E2C, 0x3248, 0, /* 0xB0 */
+ 0x5562, 0x4D46, 0, 0, 0, 0, 0, 0x3D49, /* 0xB0 */
+ 0, 0, 0x3C64, 0x5563, 0x3473, 0x4652, 0x4C29, 0x5564, /* 0xC0 */
+ 0, 0x5565, 0, 0, 0x4959, 0, 0, 0, /* 0xC0 */
+ 0x5567, 0, 0x3428, 0x3677, 0x5566, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x3432, 0, 0x3F32, 0x556B, 0x3B21, /* 0xD0 */
+ 0, 0x3249, 0x556A, 0, 0x5568, 0x556C, 0x5569, 0x472B, /* 0xE0 */
+ 0x5C4D, 0x3F33, 0, 0x556D, 0, 0, 0x4E40, 0, /* 0xE0 */
+ 0x556E, 0, 0, 0x5570, 0, 0x437E, 0x556F, 0, /* 0xF0 */
+ 0x4023, 0, 0x3B7B, 0, 0, 0, 0x4250, 0x3C77 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4975, 0x406C, 0, 0x3C4D, 0x5571, 0x3E2D, 0x5572, /* 0x00 */
+ 0x5573, 0x3053, 0x423A, 0x3F52, 0, 0x5574, 0x4633, 0x3E2E, /* 0x00 */
+ 0, 0x3E2F, 0, 0x5575, 0, 0, 0x406D, 0, /* 0x10 */
+ 0, 0, 0x3E30, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x5576, 0, 0x5577, 0, 0x4C60, 0, 0, 0, /* 0x20 */
+ 0x5578, 0, 0, 0, 0, 0x3646, 0, 0, /* 0x20 */
+ 0, 0x3D22, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x5579, 0x557A, 0x3C5C, 0x3F2C, 0x4674, 0x3F54, 0x4878, 0x4722, /* 0x30 */
+ 0x3649, 0x557B, 0, 0, 0, 0x356F, 0x557C, 0, /* 0x40 */
+ 0x367E, 0, 0x464F, 0x3230, 0, 0x3B53, 0x557D, 0x5622, /* 0x40 */
+ 0x5621, 0x367D, 0, 0x557E, 0, 0x4538, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x4230, 0, /* 0x50 */
+ 0x454B, 0x3C48, 0, 0, 0x4158, 0x4D7A, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x5624, 0, 0x5625, 0x4656, /* 0x60 */
+ 0, 0x3B33, 0, 0, 0, 0, 0x5627, 0, /* 0x70 */
+ 0, 0x5628, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x5629, 0, 0, 0, /* 0x80 */
+ 0x3474, 0x562A, 0, 0, 0x562B, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x322C, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x413B, 0x3464, 0, 0x562D, 0x4C28, 0, 0, 0, /* 0xA0 */
+ 0, 0x4252, 0, 0x3359, 0, 0, 0x562F, 0x5631, /* 0xB0 */
+ 0x345F, 0, 0, 0x562E, 0x5630, 0, 0x5633, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x5632, 0, 0x5634, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x5635, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x463D, 0x362E, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x3265, 0x5636, 0x563B, 0, 0, 0x5639, 0, 0x4A77, /* 0xE0 */
+ 0x4A76, 0, 0, 0, 0, 0, 0x4567, 0, /* 0xF0 */
+ 0, 0, 0x5638, 0x3D54, 0, 0x5637 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3F72, /* 0x00 */
+ 0, 0, 0, 0x563C, 0, 0, 0x3A6A, 0, /* 0x00 */
+ 0, 0x5642, 0, 0, 0x5643, 0x563D, 0x3333, 0x563E, /* 0x10 */
+ 0x5647, 0x5646, 0x5645, 0x5641, 0, 0, 0, 0x5640, /* 0x10 */
+ 0, 0, 0x5644, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x4A78, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x564B, 0x5648, 0, 0x564A, 0, /* 0x40 */
+ 0x4D72, 0, 0x5649, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x563F, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x3F73, 0, 0, 0x564C, 0, 0, 0x3A37, /* 0x60 */
+ 0, 0, 0, 0x564D, 0, 0, 0x564E, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x5651, 0, 0x5650, 0, 0, 0x564F, /* 0x80 */
+ 0, 0, 0, 0x4568, 0x563A, 0, 0, 0, /* 0x80 */
+ 0x5657, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x5653, 0, 0, /* 0x90 */
+ 0, 0, 0x5652, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x5654, 0, 0x5655, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5658, /* 0xB0 */
+ 0, 0, 0x4E66, 0, 0x5659, 0x5656, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x565A, 0, 0, 0x3460, 0x565B, 0, 0, /* 0xC0 */
+ 0, 0, 0x565D, 0x565C, 0, 0, 0x565E, 0, /* 0xD0 */
+ 0, 0, 0, 0x565F, 0, 0x406E, 0x3D23, 0, /* 0xD0 */
+ 0, 0x3D64, 0, 0x4163, 0, 0x3929, 0x3A38, 0x392A, /* 0xE0 */
+ 0x3570, 0, 0, 0x5660, 0, 0, 0x3A39, 0, /* 0xE0 */
+ 0, 0x384A, 0x5661, 0x4C26, 0x4743, 0x5662, 0, 0x392B, /* 0xF0 */
+ 0, 0, 0, 0x342C, 0, 0x4327, 0x3652 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3B54, 0x495B, 0, 0, 0x4841, 0, /* 0x00 */
+ 0, 0, 0, 0x5663, 0x3475, 0, 0, 0, /* 0x00 */
+ 0, 0x5666, 0, 0, 0, 0, 0x4421, 0, /* 0x10 */
+ 0, 0x5665, 0x5664, 0x5667, 0, 0x446B, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x3F63, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x3B55, 0, 0x404A, 0, 0x4253, /* 0x20 */
+ 0x3522, 0, 0, 0x4422, 0, 0, 0x5668, 0x5669, /* 0x30 */
+ 0x3E6F, 0, 0, 0, 0, 0x4B39, 0, 0, /* 0x30 */
+ 0x566C, 0, 0, 0x566B, 0x566A, 0x497D, 0, 0x5673, /* 0x40 */
+ 0, 0, 0, 0, 0x4B5A, 0, 0x566D, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x566F, 0x4B6B, 0, 0x566E, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5670, /* 0x50 */
+ 0, 0x4828, 0x5671, 0x4A3E, 0x5672, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x3433, 0x4A3F, 0x472F, 0x5674, 0x5675, 0, /* 0x70 */
+ 0x392C, 0x3434, 0x5676, 0x3838, 0x4D44, 0x4D29, 0x3476, 0x5678, /* 0x70 */
+ 0, 0x4423, 0, 0x392D, 0x3E31, 0, 0, 0x485F, /* 0x80 */
+ 0, 0, 0x3E32, 0, 0, 0, 0, 0x3D78, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x446C, 0x4A79, 0x4539, /* 0x90 */
+ 0, 0, 0x392E, 0, 0x495C, 0, 0, 0, /* 0x90 */
+ 0x5679, 0, 0, 0, 0, 0, 0x4559, 0x3A42, /* 0xA0 */
+ 0, 0, 0, 0x384B, 0, 0x446D, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x3043, 0x3D6E, 0x392F, /* 0xB0 */
+ 0x4D47, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x567A, 0x567B, 0x4751, 0, 0, 0, 0, /* 0xC0 */
+ 0x567C, 0x4E77, 0x4F2D, 0, 0, 0, 0, 0x567E, /* 0xC0 */
+ 0x567D, 0, 0, 0x3347, 0, 0, 0x5721, 0, /* 0xD0 */
+ 0, 0, 0x5724, 0x5725, 0, 0x5723, 0, 0x4940, /* 0xD0 */
+ 0x3E33, 0x5727, 0x5726, 0x5722, 0, 0, 0, 0, /* 0xE0 */
+ 0x5728, 0x5729, 0, 0, 0x572A, 0, 0, 0, /* 0xE0 */
+ 0x572D, 0x572B, 0, 0x572C, 0x572E, 0, 0x3164, 0x446E, /* 0xF0 */
+ 0x572F, 0, 0x377A, 0x3276, 0x4736, 0, 0x5730, 0x467B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4A5B, 0, 0x5731, 0x4F2E, 0, 0, 0, /* 0x00 */
+ 0, 0x5732, 0x4A40, 0x5735, 0x5021, 0x5031, 0, 0x3C30, /* 0x00 */
+ 0x4675, 0x5736, 0, 0x355D, 0x4424, 0x307A, 0x5737, 0x4A26, /* 0x10 */
+ 0x3930, 0, 0, 0x4350, 0, 0, 0, 0x446F, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x4C6F, 0x3839, 0x384C, /* 0x20 */
+ 0, 0x5738, 0, 0, 0, 0x5739, 0, 0x573F, /* 0x20 */
+ 0, 0x3C65, 0, 0, 0, 0x4425, 0, 0x362F, /* 0x30 */
+ 0x573A, 0, 0, 0, 0x492B, 0, 0x4346, 0, /* 0x30 */
+ 0, 0x573B, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x573C, 0, 0x3630, 0, 0x573D, 0, 0x573E, 0, /* 0x40 */
+ 0, 0x5740, 0, 0x4576, 0, 0, 0x5741, 0x5742, /* 0x50 */
+ 0, 0x5743, 0, 0, 0x5734, 0x5733, 0, 0, /* 0x50 */
+ 0, 0x5744, 0x3741, 0, 0, 0, 0x4927, 0, /* 0x60 */
+ 0, 0x3A4C, 0x4937, 0x4426, 0x494B, 0x5745, 0, 0, /* 0x60 */
+ 0x3E34, 0x3146, 0, 0x5746, 0, 0, 0, 0x5747, /* 0x70 */
+ 0, 0x4C72, 0, 0, 0x4860, 0, 0, 0x574A, /* 0x70 */
+ 0x317D, 0x402C, 0x5749, 0x5748, 0x3742, 0x4254, 0, 0x574E, /* 0x80 */
+ 0x574C, 0, 0x574B, 0x4E27, 0x3865, 0, 0, 0, /* 0x80 */
+ 0x3D79, 0x574D, 0x454C, 0x3D3E, 0, 0, 0, 0x4640, /* 0x90 */
+ 0x5751, 0x5750, 0, 0, 0, 0, 0x574F, 0, /* 0x90 */
+ 0x5752, 0x3866, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x5753, 0x497C, 0x3D5B, 0, 0, 0x5754, 0x4879, 0, /* 0xA0 */
+ 0, 0, 0, 0x4641, 0x4427, 0, 0, 0, /* 0xB0 */
+ 0, 0x4530, 0, 0, 0x5755, 0x352B, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x3F34, 0, 0x492C, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x3477, 0x4726, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x5756, 0x3B56, /* 0xD0 */
+ 0x4B3A, 0x4B3B, 0, 0, 0x317E, 0x575B, 0, 0, /* 0xD0 */
+ 0x4369, 0, 0, 0, 0x5758, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x3277, 0, 0, 0, 0, /* 0xE0 */
+ 0x582D, 0x575A, 0, 0, 0, 0x4730, 0, 0, /* 0xF0 */
+ 0x5759, 0, 0, 0x5757, 0, 0x397A, 0, 0x575D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x5763, 0x5769, /* 0x00 */
+ 0x5761, 0, 0x455C, 0, 0, 0x5766, 0x495D, 0, /* 0x10 */
+ 0, 0x5760, 0, 0x5765, 0x4E67, 0x3B57, 0, 0, /* 0x10 */
+ 0x4255, 0x575E, 0, 0, 0, 0x355E, 0x5768, 0x402D, /* 0x20 */
+ 0x3165, 0x5762, 0x3278, 0x5767, 0, 0, 0, 0x3631, /* 0x20 */
+ 0, 0x5764, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x576A, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x576C, 0x5776, 0x5774, 0, 0, 0x5771, 0, /* 0x40 */
+ 0, 0, 0x5770, 0x4E78, 0, 0x5772, 0, 0, /* 0x40 */
+ 0x3632, 0, 0x3931, 0, 0, 0x3D7A, 0, 0, /* 0x50 */
+ 0, 0x5779, 0x576B, 0, 0, 0, 0, 0x576F, /* 0x50 */
+ 0x575F, 0, 0x327A, 0x5773, 0x5775, 0x4351, 0, 0, /* 0x60 */
+ 0x3A28, 0x3238, 0x576D, 0x5778, 0x5777, 0x3633, 0, 0x4229, /* 0x60 */
+ 0x3366, 0, 0, 0, 0, 0x3743, 0, 0x576E, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x577A, 0, 0x577D, 0x5821, 0, 0, 0, /* 0x80 */
+ 0, 0x3C3D, 0, 0x5827, 0x4470, 0x577B, 0, 0, /* 0x80 */
+ 0, 0, 0x5825, 0, 0x3279, 0, 0x5823, 0x5824, /* 0x90 */
+ 0, 0, 0x577E, 0x5822, 0, 0, 0, 0x3867, /* 0x90 */
+ 0x4D2A, 0, 0, 0x3435, 0, 0, 0x3159, 0x5826, /* 0xA0 */
+ 0, 0x473A, 0x302D, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x4861, 0x575C, 0x582C, 0x5830, 0x4C65, 0, /* 0xB0 */
+ 0x5829, 0, 0, 0, 0x4569, 0x582E, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x3E70, 0x582F, 0x4657, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x4F47, 0, 0x582B, 0, 0, 0, 0, /* 0xD0 */
+ 0x5831, 0, 0x397B, 0, 0x404B, 0, 0, 0x3054, /* 0xD0 */
+ 0x582A, 0x5828, 0, 0x415A, 0, 0, 0, 0x577C, /* 0xE0 */
+ 0x3B34, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x4246, 0x583D, 0, 0x415B, 0x5838, 0, 0x5835, 0x5836, /* 0xF0 */
+ 0, 0x3C66, 0x5839, 0x583C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5837, 0x3D25, 0, 0x583A, 0, 0, 0x5834, 0, /* 0x00 */
+ 0x4C7C, 0x4C7B, 0, 0, 0, 0x583E, 0x583F, 0x3055, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x5833, 0, 0, /* 0x10 */
+ 0, 0, 0x3672, 0x3026, 0, 0, 0, 0x3436, /* 0x10 */
+ 0, 0x583B, 0, 0, 0, 0, 0, 0x5843, /* 0x20 */
+ 0x5842, 0, 0, 0, 0x5847, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x5848, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x5846, 0x5849, 0x5841, 0x5845, /* 0x30 */
+ 0, 0, 0x584A, 0, 0x584B, 0, 0, 0x5840, /* 0x40 */
+ 0x3B7C, 0, 0x5844, 0x4256, 0x3932, 0x5832, 0x3F35, 0, /* 0x40 */
+ 0, 0, 0, 0x5858, 0, 0x4A69, 0, 0, /* 0x50 */
+ 0x584E, 0x584F, 0x5850, 0, 0, 0x5857, 0, 0x5856, /* 0x50 */
+ 0, 0, 0x4B7D, 0x3437, 0, 0x5854, 0, 0x3745, /* 0x60 */
+ 0x3334, 0, 0, 0x5851, 0, 0, 0x4E38, 0x5853, /* 0x60 */
+ 0x3056, 0x5855, 0, 0x584C, 0x5852, 0x5859, 0x3744, 0x584D, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x4D5D, 0, /* 0x70 */
+ 0, 0, 0x4D2B, 0, 0, 0, 0, 0x585C, /* 0x80 */
+ 0, 0, 0x5860, 0, 0, 0, 0x417E, 0, /* 0x80 */
+ 0x4E79, 0x5861, 0, 0, 0x585E, 0, 0x585B, 0, /* 0x90 */
+ 0, 0x585A, 0x585F, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x4A30, 0, 0, 0x4634, /* 0xA0 */
+ 0, 0x3746, 0, 0x5862, 0x585D, 0, 0x5863, 0, /* 0xA0 */
+ 0, 0, 0x377B, 0, 0, 0, 0x3231, 0, /* 0xB0 */
+ 0, 0, 0x586B, 0, 0, 0, 0x3438, 0, /* 0xB0 */
+ 0, 0, 0, 0x5869, 0, 0, 0x586A, 0x3A29, /* 0xC0 */
+ 0x5868, 0x5866, 0x5865, 0x586C, 0x5864, 0x586E, 0, 0, /* 0xC0 */
+ 0x327B, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x5870, 0, 0, 0x586F, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x4428, 0, 0x5873, 0, 0x5871, 0x5867, /* 0xF0 */
+ 0x377C, 0, 0x5872, 0, 0x5876, 0x5875, 0x5877, 0x5874 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5878, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x5879, 0x587A, 0x4A6A, 0, 0x587C, 0x587B, 0x3D3F, 0, /* 0x00 */
+ 0x402E, 0x3266, 0x327C, 0, 0x587D, 0, 0x303F, 0, /* 0x10 */
+ 0, 0, 0x404C, 0x587E, 0, 0x6C43, 0x5921, 0x3761, /* 0x10 */
+ 0, 0x5922, 0, 0, 0, 0, 0x406F, 0, /* 0x20 */
+ 0, 0, 0x5923, 0, 0, 0, 0x5924, 0x353A, /* 0x20 */
+ 0x5925, 0, 0x5926, 0x5927, 0x4257, 0, 0, 0, /* 0x30 */
+ 0x384D, 0, 0, 0x4C61, 0, 0, 0, 0x4B3C, /* 0x30 */
+ 0x3D6A, 0x5928, 0, 0, 0, 0, 0, 0x4070, /* 0x40 */
+ 0x6E3D, 0x4862, 0, 0x3C6A, 0, 0x3A4D, 0x5929, 0, /* 0x40 */
+ 0, 0, 0, 0x4247, 0, 0x4A27, 0, 0, /* 0x50 */
+ 0x4271, 0, 0, 0x592C, 0, 0, 0x592A, 0, /* 0x50 */
+ 0x592D, 0, 0, 0x592B, 0, 0, 0, 0, /* 0x60 */
+ 0x592E, 0, 0, 0, 0, 0, 0x4A31, 0, /* 0x60 */
+ 0, 0x3037, 0, 0, 0, 0, 0x495E, 0, /* 0x70 */
+ 0, 0x4863, 0, 0, 0x592F, 0, 0x5932, 0x3E35, /* 0x70 */
+ 0x353B, 0, 0x5930, 0x5937, 0x3E36, 0, 0, 0, /* 0x80 */
+ 0, 0x5931, 0x4744, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x4D5E, 0x5933, 0x5934, 0x5938, 0x456A, 0x5935, 0x3933, /* 0x90 */
+ 0x405E, 0, 0, 0x5946, 0x4834, 0, 0x4272, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x4864, 0x5A2D, 0, 0, 0, /* 0xA0 */
+ 0, 0x4A7A, 0, 0, 0, 0x4471, 0, 0, /* 0xB0 */
+ 0, 0x4B75, 0, 0x593B, 0x3221, 0x436A, 0, 0, /* 0xB0 */
+ 0, 0, 0x5944, 0, 0, 0x4334, 0x593E, 0x5945, /* 0xC0 */
+ 0x5940, 0x5947, 0x5943, 0, 0x5942, 0x476F, 0, 0x593C, /* 0xC0 */
+ 0x327D, 0x593A, 0x3571, 0x4273, 0x5936, 0, 0, 0x5939, /* 0xD0 */
+ 0x3934, 0x405B, 0, 0x3E37, 0x5941, 0x4752, 0, 0, /* 0xD0 */
+ 0x3572, 0x3348, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x3367, 0x3F21, 0x5949, 0x594E, /* 0xE0 */
+ 0, 0x594A, 0, 0x377D, 0, 0x594F, 0x3B22, 0x3969, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0x3D26, 0x593D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3B7D, 0x594C, 0, 0, 0, 0, 0x3B58, /* 0x00 */
+ 0x594D, 0x3044, 0, 0, 0x5948, 0, 0, 0, /* 0x00 */
+ 0, 0x4429, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x3573, 0, 0, 0, 0, 0, 0x3634, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0x594B, /* 0x20 */
+ 0x3027, 0, 0, 0x3A43, 0, 0, 0, 0x3F36, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x4472, 0, 0, 0x4854, 0x5951, 0x415E, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x422A, 0, 0, 0x3B2B, 0x5952, 0, 0x5954, /* 0x40 */
+ 0x5950, 0, 0, 0, 0, 0x4A61, 0, 0x443D, /* 0x50 */
+ 0, 0, 0, 0, 0x415C, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4A7B, /* 0x60 */
+ 0x3C4E, 0x5960, 0, 0x595F, 0, 0, 0x3F78, 0, /* 0x60 */
+ 0, 0, 0x377E, 0, 0, 0, 0x5959, 0x3E39, /* 0x70 */
+ 0, 0, 0x4668, 0x4731, 0, 0, 0, 0, /* 0x70 */
+ 0x5957, 0, 0, 0x415D, 0, 0, 0, 0, /* 0x80 */
+ 0x3C78, 0x595C, 0, 0, 0x3E38, 0, 0x5956, 0x595B, /* 0x80 */
+ 0, 0, 0x4753, 0, 0, 0, 0x5955, 0, /* 0x90 */
+ 0x3721, 0, 0, 0x335D, 0, 0, 0, 0x595D, /* 0x90 */
+ 0x4E2B, 0x3A4E, 0x4335, 0x595A, 0, 0x405C, 0, 0x3935, /* 0xA0 */
+ 0x3F64, 0x3166, 0x413C, 0x5958, 0x3545, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x3747, 0, 0x444F, 0x595E, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x415F, 0, 0, 0x5961, 0, /* 0xB0 */
+ 0x5963, 0, 0, 0x4237, 0x5969, 0, 0x5964, 0, /* 0xC0 */
+ 0, 0x5966, 0, 0, 0, 0, 0, 0x4941, /* 0xC0 */
+ 0x4473, 0, 0x5967, 0, 0, 0, 0x4D2C, 0, /* 0xD0 */
+ 0, 0, 0x4D48, 0x3439, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x302E, 0, 0x5965, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x5962, 0, 0, 0, 0, 0x3478, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x3167, 0, 0x5968, 0, /* 0xF0 */
+ 0, 0, 0x4D49 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x596C, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x423B, 0, 0x5973, /* 0x00 */
+ 0, 0, 0, 0x596D, 0, 0, 0x596A, 0x5971, /* 0x10 */
+ 0, 0, 0, 0, 0x5953, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x596E, 0, /* 0x20 */
+ 0x5972, 0, 0, 0, 0x4842, 0x456B, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x596B, 0, 0x596F, 0, /* 0x30 */
+ 0, 0, 0x3748, 0, 0, 0, 0x3A71, 0, /* 0x30 */
+ 0, 0, 0x405D, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x5977, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x4526, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5974, /* 0x60 */
+ 0, 0x4B60, 0, 0, 0, 0, 0, 0x5975, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0x5976, 0, /* 0x70 */
+ 0x4C4E, 0, 0x4022, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x3762, 0, 0, 0, 0, /* 0x80 */
+ 0x597D, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x3B35, 0x597A, 0, 0x5979, 0, 0, /* 0x90 */
+ 0, 0, 0x4732, 0, 0, 0, 0x4635, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x4531, 0x597B, 0, 0, /* 0xA0 */
+ 0, 0x597C, 0, 0x496F, 0, 0x4745, 0x3B23, 0, /* 0xA0 */
+ 0x4071, 0, 0x4B50, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x3349, 0, 0x5A25, 0x597E, 0, 0, 0, /* 0xB0 */
+ 0, 0x4D4A, 0x5A27, 0, 0, 0x5A23, 0, 0x5A24, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x4160, 0, 0, /* 0xC0 */
+ 0, 0, 0x5A22, 0, 0x593F, 0, 0, 0, /* 0xD0 */
+ 0x5A26, 0, 0x5A21, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x5A2B, 0x5A2C, 0x4527, 0x5A2E, 0, 0, 0x3B24, 0x5A29, /* 0xE0 */
+ 0, 0, 0, 0, 0x353C, 0, 0, 0x5A2F, /* 0xE0 */
+ 0, 0x5A28, 0x5A33, 0, 0x5A32, 0, 0x5A31, 0, /* 0xF0 */
+ 0, 0, 0x5A34, 0, 0, 0x5A36, 0x3E71 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5A35, 0, 0, 0, 0, 0x5A39, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x5A37, 0, 0, 0, 0x5A38, 0x5970, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x5A3B, 0x5A3A, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x5978, 0x5A3C, 0x5A30, 0, 0, 0x3B59, /* 0x20 */
+ 0, 0, 0, 0, 0x5A3D, 0x5A3E, 0x5A40, 0x5A3F, /* 0x30 */
+ 0x5A41, 0x327E, 0, 0x3936, 0, 0, 0x4A7C, 0x402F, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x384E, 0, 0, /* 0x40 */
+ 0x5A43, 0, 0, 0, 0, 0x5A46, 0, 0x4952, /* 0x40 */
+ 0, 0x355F, 0, 0, 0, 0x5A45, 0x5A44, 0x4754, /* 0x50 */
+ 0x5A47, 0x3635, 0, 0, 0, 0x5A49, 0x5A48, 0, /* 0x50 */
+ 0, 0, 0x343A, 0x3B36, 0, 0, 0x4658, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x3749, 0, 0, 0, /* 0x60 */
+ 0x3F74, 0, 0x5A4A, 0, 0x4030, 0x4528, 0, 0x495F, /* 0x70 */
+ 0x5A4B, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x5A4C, 0x5A4D, 0, 0, 0, 0x4A38, /* 0x80 */
+ 0x555D, 0x4046, 0, 0, 0x494C, 0, 0x3A58, 0, /* 0x80 */
+ 0x4865, 0x4843, 0, 0, 0, 0, 0, 0x454D, /* 0x90 */
+ 0, 0x4E41, 0, 0x5A4F, 0x3C50, 0, 0, 0x5A50, /* 0x90 */
+ 0, 0x3036, 0, 0, 0x3654, 0x404D, 0, 0x4960, /* 0xA0 */
+ 0, 0, 0, 0x5A51, 0x3B42, 0x4347, 0, 0x3B5B, /* 0xA0 */
+ 0x3F37, 0, 0, 0, 0, 0, 0, 0x5A52, /* 0xB0 */
+ 0, 0x4A7D, 0, 0, 0x3177, 0x3B5C, 0, 0, /* 0xB0 */
+ 0, 0x5A55, 0, 0x5A53, 0x5A56, 0x4E39, 0x5A54, 0, /* 0xC0 */
+ 0, 0, 0, 0x407B, 0x5A57, 0, 0, 0x4232, /* 0xC0 */
+ 0, 0, 0x5A58, 0, 0, 0, 0, 0x347A, /* 0xD0 */
+ 0, 0x5A5A, 0, 0x5A59, 0, 0, 0, 0, /* 0xD0 */
+ 0x5A5B, 0x5A5C, 0x347B, 0, 0, 0x467C, 0x4336, 0x356C, /* 0xE0 */
+ 0x3B5D, 0x4161, 0, 0, 0x3D5C, 0x3030, 0, 0, /* 0xE0 */
+ 0, 0x5A5D, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x3222, 0x5A61 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3937, 0x5A60, 0, 0, 0x3A2B, 0x3E3A, /* 0x00 */
+ 0, 0, 0x5A5F, 0, 0x3E3B, 0, 0x4C40, 0x3A2A, /* 0x00 */
+ 0, 0, 0, 0x3057, 0x404E, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x5A66, 0, 0, 0x4031, /* 0x10 */
+ 0x3147, 0, 0, 0, 0, 0x3D55, 0, 0x4B66, /* 0x20 */
+ 0x3A72, 0, 0, 0, 0, 0x3E3C, 0, 0x4027, /* 0x20 */
+ 0, 0, 0, 0, 0x5A65, 0x5A63, 0x5A64, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x436B, 0, 0, 0x5B26, /* 0x30 */
+ 0, 0x5A6A, 0x3B7E, 0x3938, 0x5A68, 0, 0, 0, /* 0x40 */
+ 0, 0x5A69, 0, 0x3F38, 0, 0, 0, 0x5A67, /* 0x40 */
+ 0, 0, 0x3B2F, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x5A6C, 0x5A6B, 0x5A70, /* 0x50 */
+ 0, 0, 0x5A71, 0, 0x5A6D, 0, 0x3322, 0x5A6E, /* 0x60 */
+ 0x5A6F, 0x4855, 0, 0, 0, 0, 0x4961, 0x374A, /* 0x60 */
+ 0x5A72, 0, 0, 0, 0x4032, 0, 0x3E3D, 0, /* 0x70 */
+ 0, 0, 0x4352, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x3647, 0, 0x5A73, 0x5A77, 0, 0, 0x324B, /* 0x80 */
+ 0x5A74, 0x5A76, 0, 0, 0, 0, 0x5A75, 0, /* 0x80 */
+ 0, 0x3D6B, 0, 0, 0, 0, 0x4348, 0x3045, /* 0x90 */
+ 0x5A78, 0, 0, 0, 0, 0x5A79, 0, 0, /* 0x90 */
+ 0, 0, 0x442A, 0, 0, 0, 0x4E71, 0, /* 0xA0 */
+ 0, 0, 0, 0x3B43, 0, 0, 0x4A6B, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x4B3D, 0, 0, 0, /* 0xB0 */
+ 0x5B22, 0x5A7B, 0, 0, 0x5A7E, 0, 0x5A7D, 0, /* 0xB0 */
+ 0, 0x5A7A, 0, 0, 0x5B21, 0, 0, 0x465E, /* 0xC0 */
+ 0, 0x5A7C, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x5B23, 0, /* 0xD0 */
+ 0, 0x3D6C, 0x5B24, 0, 0x4D4B, 0x4778, 0, 0, /* 0xD0 */
+ 0x5B25, 0, 0, 0, 0, 0, 0x5B27, 0, /* 0xE0 */
+ 0, 0x5B28, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x5B29, 0, 0x364A, 0x3148, 0x3939, 0x5B2A, 0, 0x5B2B, /* 0xF0 */
+ 0x3D71, 0x4162, 0, 0, 0x5258, 0x413E, 0x413D, 0x4258 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3A47, 0, 0, 0x5072, 0, 0, 0, 0, /* 0x00 */
+ 0x376E, 0x4D2D, 0, 0x4A7E, 0, 0x497E, 0, 0x5B2C, /* 0x00 */
+ 0, 0, 0, 0, 0x3A73, 0x443F, 0x5B2D, 0x4F2F, /* 0x10 */
+ 0, 0, 0, 0x4B3E, 0, 0x442B, 0x5B2E, 0x347C, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x5B2F, 0x5B30, /* 0x20 */
+ 0x4C5A, 0, 0x4C24, 0x4B76, 0x4B5C, 0x3B25, 0x5B32, 0, /* 0x20 */
+ 0, 0x3C6B, 0, 0, 0x4B51, 0, 0x5B34, 0x5B37, /* 0x30 */
+ 0x5B36, 0, 0x3479, 0, 0, 0x3560, 0, 0x5B33, /* 0x30 */
+ 0, 0x5B35, 0, 0, 0, 0, 0x5B38, 0, /* 0x40 */
+ 0, 0x3F79, 0, 0, 0, 0, 0x4D7B, 0x3049, /* 0x40 */
+ 0x3A60, 0x423C, 0, 0x3C5D, 0, 0, 0x3E73, 0, /* 0x50 */
+ 0, 0x5B3B, 0, 0, 0x454E, 0, 0x5B39, 0x422B, /* 0x50 */
+ 0x5B3A, 0x3E72, 0x4C5D, 0x5B3C, 0x5B3D, 0x4D68, 0, 0, /* 0x60 */
+ 0, 0, 0x5B42, 0, 0, 0x393A, 0, 0x4755, /* 0x60 */
+ 0x5B3F, 0x456C, 0x5A5E, 0x5A62, 0, 0x354F, 0, 0x4747, /* 0x70 */
+ 0, 0, 0, 0, 0x5B41, 0, 0x3E3E, 0x4844, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x5B47, 0, 0x487A, /* 0x80 */
+ 0, 0x5B3E, 0, 0x5B44, 0x5B43, 0, 0, 0, /* 0x80 */
+ 0x404F, 0, 0, 0, 0, 0x4B6D, 0, 0x4E53, /* 0x90 */
+ 0, 0, 0x4B67, 0, 0x324C, 0x3B5E, 0, 0, /* 0x90 */
+ 0x4F48, 0x5B46, 0x3F75, 0, 0, 0, 0x5B45, 0, /* 0xA0 */
+ 0, 0x5B40, 0, 0, 0, 0, 0, 0x384F, /* 0xA0 */
+ 0, 0, 0, 0x5B4C, 0x5B4A, 0, 0x324D, 0x5B48, /* 0xB0 */
+ 0x5B4E, 0x5B54, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x4248, 0, 0, 0x4A41, 0, 0x5B56, 0, /* 0xC0 */
+ 0, 0, 0x4922, 0, 0, 0, 0x5B55, 0x4770, /* 0xC0 */
+ 0x4B3F, 0x343B, 0, 0x4077, 0x3D40, 0, 0, 0, /* 0xD0 */
+ 0x4453, 0, 0x4D2E, 0, 0, 0x5B51, 0x5B50, 0, /* 0xD0 */
+ 0, 0, 0x5B52, 0, 0x5B4F, 0, 0, 0x5B57, /* 0xE0 */
+ 0, 0x5B4D, 0, 0, 0x5B4B, 0, 0x5B53, 0x5B49, /* 0xE0 */
+ 0, 0x436C, 0, 0x4C78, 0x3C46, 0x3A74, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0x3A3A, 0, 0, 0x4B6F, 0x3341 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x444E, 0x464A, 0x3149, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x4072, 0, 0, 0x4034, 0x372A, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x5B59, 0, /* 0x10 */
+ 0, 0x393B, 0x337C, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x5B5B, 0x3374, 0x5B61, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x5B5E, 0, 0x4073, 0, 0, 0, /* 0x30 */
+ 0x334B, 0x3A2C, 0, 0, 0x334A, 0x3A4F, 0, 0, /* 0x30 */
+ 0x5B5C, 0x3765, 0x374B, 0x456D, 0, 0, 0x5B5A, 0, /* 0x40 */
+ 0x3046, 0, 0, 0, 0, 0x5B5D, 0x5B5F, 0, /* 0x40 */
+ 0x364D, 0x372C, 0, 0x343C, 0x354B, 0, 0, 0, /* 0x50 */
+ 0, 0x5B62, 0, 0, 0x3A79, 0x4B71, 0, 0x3B37, /* 0x50 */
+ 0, 0, 0, 0x5B63, 0, 0, 0, 0x4930, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x5B6F, 0, 0x3233, 0x5B64, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x5B75, 0x5B65, /* 0x70 */
+ 0, 0x4E42, 0, 0x5B6C, 0, 0x475F, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x5B74, 0, 0x5B67, /* 0x80 */
+ 0, 0, 0, 0x3034, 0x5B69, 0, 0, 0x393C, /* 0x90 */
+ 0, 0, 0, 0x5B6B, 0, 0x5B6A, 0, 0x5B66, /* 0x90 */
+ 0x5B71, 0, 0x3E3F, 0, 0, 0, 0x546D, 0x3868, /* 0xA0 */
+ 0x4D7C, 0, 0, 0, 0, 0x5B68, 0, 0x4474, /* 0xA0 */
+ 0x3323, 0x3A2D, 0, 0x5B60, 0, 0x5B70, 0x3361, 0, /* 0xB0 */
+ 0, 0x5B6E, 0x5B72, 0, 0x456E, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x347E, 0, 0x5C32, 0, /* 0xC0 */
+ 0, 0x4C49, 0x5B77, 0x347D, 0, 0x5B7E, 0, 0, /* 0xC0 */
+ 0, 0, 0x4B40, 0, 0x5C21, 0x5C23, 0, 0x5C27, /* 0xD0 */
+ 0x5B79, 0, 0x432A, 0, 0, 0, 0, 0x456F, /* 0xD0 */
+ 0x5C2B, 0x5B7C, 0, 0x5C28, 0, 0, 0, 0x5C22, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x3F39, 0x5C2C, /* 0xE0 */
+ 0, 0, 0x4033, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x5C2A, 0x343D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F50, 0x5B76, 0, 0, 0x5C26, 0x3058, 0, 0, /* 0x00 */
+ 0x5B78, 0, 0, 0x4C3A, 0x5B7D, 0x3F22, 0x4447, 0x5B73, /* 0x00 */
+ 0, 0, 0x5C25, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x3F7A, 0x5C2F, 0x3371, 0x3821, 0, 0, 0, /* 0x10 */
+ 0, 0x5C31, 0x5B7A, 0x5C30, 0, 0x5C29, 0x5B7B, 0, /* 0x20 */
+ 0x5C2D, 0, 0x5C2E, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x5C3F, 0, 0, 0, 0x464E, 0, 0x5C24, 0, /* 0x30 */
+ 0, 0x5C3B, 0, 0, 0, 0x5C3D, 0, 0x4458, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x4D4C, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x4976, 0x5C38, 0x424A, 0, 0, /* 0x50 */
+ 0, 0x5C3E, 0x413F, 0, 0x5C35, 0x5C42, 0x5C41, 0, /* 0x50 */
+ 0x466F, 0x5C40, 0x466A, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x5C44, 0x5C37, 0, 0x3648, 0x5C3A, 0x3D5D, /* 0x60 */
+ 0, 0, 0, 0x4760, 0x5C3C, 0x364B, 0, 0x5C34, /* 0x70 */
+ 0x5C36, 0x5C33, 0, 0, 0x4F30, 0x335A, 0x5C39, 0, /* 0x70 */
+ 0, 0x5C43, 0x3335, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x3A67, 0, 0, 0, 0x315D, 0, /* 0x80 */
+ 0, 0x5C54, 0, 0, 0x4F31, 0x5C57, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x3F3A, 0x5C56, 0, 0, 0, /* 0x90 */
+ 0x5C55, 0, 0, 0, 0, 0, 0, 0x5C52, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x5C46, 0, /* 0xA0 */
+ 0, 0x5C63, 0x5C45, 0, 0x5C58, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x5C50, 0, 0, 0x5C4B, 0x5C48, /* 0xB0 */
+ 0, 0x5C49, 0, 0x5C51, 0, 0, 0, 0x7422, /* 0xC0 */
+ 0, 0, 0x5C4E, 0x393D, 0x4448, 0x4164, 0x5C4C, 0, /* 0xC0 */
+ 0x5C47, 0, 0, 0x5C4A, 0, 0, 0, 0, /* 0xD0 */
+ 0x4D4D, 0x4B6A, 0, 0, 0, 0x5C4F, 0x5C59, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5C61, /* 0xE0 */
+ 0x5C5A, 0, 0, 0x5C67, 0, 0x5C65, 0, 0, /* 0xE0 */
+ 0, 0, 0x5C60, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x5C5F, 0, 0x4450, 0, 0x4165, 0, 0x5C5D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5C5B, 0, 0, 0x5C62, 0, 0, /* 0x00 */
+ 0, 0, 0x5C68, 0x4875, 0x5C6E, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x5C69, 0x5C6C, 0x5C66, 0, 0, 0x4374, /* 0x10 */
+ 0, 0x4938, 0, 0x5C5C, 0, 0, 0x5C64, 0x3E40, /* 0x10 */
+ 0, 0x4C4F, 0x5C78, 0x5C6B, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x3822, 0x3223, 0x335F, 0, 0, 0x5C53, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x3E41, 0x5C70, 0, /* 0x30 */
+ 0x5C77, 0x3C79, 0x3372, 0, 0, 0x432E, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x5C6D, 0, 0, 0x5C72, /* 0x40 */
+ 0x5C76, 0, 0, 0x3636, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x354C, 0x5C74, 0, 0, 0, 0, 0, 0x3521, /* 0x50 */
+ 0, 0x464B, 0x5C73, 0, 0, 0, 0x5C75, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x5C6F, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x5C71, 0, 0, 0, 0, 0, 0, 0x3360, /* 0x70 */
+ 0x4349, 0, 0, 0, 0x5C7C, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x5C7A, 0x3869, 0, /* 0x80 */
+ 0x5C79, 0, 0, 0, 0, 0, 0, 0x5D21, /* 0x90 */
+ 0, 0, 0, 0, 0x5B58, 0, 0, 0, /* 0x90 */
+ 0x5C7B, 0, 0x5C7D, 0x5C7E, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x5D2C, 0, 0x5D28, 0, 0x5B6D, 0, /* 0xA0 */
+ 0, 0, 0, 0x5D27, 0, 0, 0, 0, /* 0xB0 */
+ 0x5D26, 0, 0, 0x5D23, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x5C6A, 0x5D25, 0x5D24, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x5D2A, 0, 0x4F26, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x5D2D, 0x367B, 0, 0, 0x5D29, 0x5D2B, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x4827, 0, 0x5D2E, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x5D32, 0x5D2F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4D73, 0x5D30, 0, 0, /* 0x00 */
+ 0, 0, 0x5C5E, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x5D33, 0, 0, 0, 0x5D34, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x3135, 0, 0x5D36, /* 0x10 */
+ 0x3767, 0x3C21, 0, 0x3655, 0, 0, 0, 0x3224, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x4D5F, 0, 0, 0, 0, 0x5D38, /* 0x30 */
+ 0x5D37, 0x5D3A, 0x353D, 0, 0, 0x3656, 0x343E, 0, /* 0x30 */
+ 0, 0, 0, 0x5D3D, 0, 0, 0, 0x5D3C, /* 0x40 */
+ 0, 0x5D3E, 0, 0, 0x324E, 0, 0x4337, 0, /* 0x40 */
+ 0x5D3F, 0, 0, 0x343F, 0x5D41, 0, 0, 0, /* 0x50 */
+ 0, 0x5D40, 0, 0x5D42, 0, 0, 0, 0x5D43, /* 0x50 */
+ 0, 0x5D44, 0x3B5F, 0x4035, 0x3A21, 0, 0x4970, 0, /* 0x60 */
+ 0, 0x4A62, 0x4F44, 0, 0, 0, 0, 0x3B75, /* 0x60 */
+ 0, 0, 0, 0x3A50, 0x4E72, 0, 0, 0, /* 0x70 */
+ 0x5D45, 0x5D46, 0, 0x3B60, 0, 0, 0, 0x5D47, /* 0x70 */
+ 0x5D48, 0, 0, 0x5D4A, 0x5D49, 0, 0x4B58, 0, /* 0x80 */
+ 0, 0x3D5E, 0x3C6C, 0x3B44, 0, 0x5D4B, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x5D4D, 0x3F23, 0, /* 0x90 */
+ 0x5D4C, 0, 0, 0, 0, 0, 0x5D4E, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x5D4F, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x5D50, 0x5D51, 0, 0, 0, 0x5D52, /* 0xA0 */
+ 0, 0x5D54, 0x5D53, 0x5D55, 0x3225, 0x434A, 0, 0x5D56, /* 0xB0 */
+ 0, 0, 0x3B26, 0x334C, 0x5D57, 0, 0, 0x4542, /* 0xB0 */
+ 0x544C, 0, 0, 0, 0, 0x3523, 0x5D58, 0, /* 0xC0 */
+ 0, 0, 0, 0x5D59, 0, 0x4A6C, 0x4B68, 0, /* 0xC0 */
+ 0, 0, 0x4647, 0x5D5A, 0x4866, 0, 0, 0, /* 0xD0 */
+ 0x487B, 0, 0, 0x4C53, 0, 0, 0, 0x5D5B, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x5D5D, 0x5D5C, 0, 0, 0x5D5F, /* 0xE0 */
+ 0, 0, 0, 0x5D5E /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x5D61, 0, 0, 0, 0, 0, 0, 0x3B61, /* 0x00 */
+ 0, 0x4C31, 0, 0x5D62, 0x5D63, 0, 0, 0x3524, /* 0x10 */
+ 0, 0, 0, 0x5D64, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x5D66, 0x5D65, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x3F65, 0, 0, 0x4939, /* 0x30 */
+ 0x314A, 0, 0, 0, 0, 0, 0x4845, 0, /* 0x30 */
+ 0x4475, 0x3D41, 0x3561, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x4846, 0, /* 0x40 */
+ 0x3C2E, 0, 0, 0, 0, 0x5D68, 0, 0x3440, /* 0x50 */
+ 0, 0, 0x3178, 0, 0, 0x4672, 0x5D67, 0x393E, /* 0x50 */
+ 0x4353, 0, 0x5D69, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x5D71, 0, 0x5D6A, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x4241, 0, 0x3562, 0x5D72, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x3768, 0, 0, 0x3525, 0x5D70, 0, /* 0x70 */
+ 0, 0x5D6E, 0x5D6B, 0x4D60, 0, 0, 0, 0, /* 0x80 */
+ 0x4440, 0, 0, 0, 0x4659, 0x5D6C, 0, 0, /* 0x80 */
+ 0x5D74, 0, 0x5D73, 0x3723, 0, 0, 0x322D, 0, /* 0x90 */
+ 0, 0x3A3B, 0x5D6D, 0x5D6F, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x4B57, 0x4274, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x4B77, 0, 0, 0x5D7C, 0, /* 0xA0 */
+ 0, 0x5D7D, 0, 0x324F, 0, 0, 0, 0, /* 0xB0 */
+ 0x4A28, 0x4C7D, 0x5E21, 0x3C23, 0x3E42, 0x5D78, 0x5D7E, 0x3168, /* 0xB0 */
+ 0, 0x3637, 0, 0, 0x5D75, 0x5D7A, 0, 0, /* 0xC0 */
+ 0, 0x4074, 0x4771, 0, 0x4867, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x5D77, 0, 0x4B21, 0, 0x5D79, /* 0xD0 */
+ 0, 0x5E24, 0, 0x5E22, 0, 0x5D7B, 0, 0, /* 0xD0 */
+ 0, 0x4B22, 0x4748, 0x3563, 0, 0x4525, 0, 0, /* 0xE0 */
+ 0x436D, 0, 0x5E25, 0, 0, 0, 0, 0x5E23, /* 0xE0 */
+ 0x4259, 0x5D76, 0, 0x314B /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x4D4E, 0x5E30, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x5E2F, 0, 0, 0, 0, 0x4076, /* 0x10 */
+ 0, 0x5E2C, 0, 0x4D6C, 0, 0, 0x4636, 0x5E26, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x4445, 0, 0, /* 0x20 */
+ 0, 0x314C, 0x393F, 0x5E29, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x3D27, 0x5E2E, 0, 0x5E2D, 0x5E28, 0, /* 0x30 */
+ 0x5E2B, 0, 0, 0x3368, 0, 0x5E2A, 0x4749, 0, /* 0x30 */
+ 0, 0x4E2E, 0, 0, 0x3E74, 0x4075, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x5E36, 0x5E34, 0, 0x494D, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x5E31, 0x5E33, 0, 0x313A, 0, /* 0x60 */
+ 0, 0x3940, 0x4F32, 0, 0x333D, 0, 0x4962, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x4D61, 0, 0, 0x3324, /* 0x70 */
+ 0x3F3B, 0x5E35, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x5E3A, 0, 0, /* 0x80 */
+ 0x3E43, 0, 0, 0, 0x4D30, 0, 0x5E37, 0, /* 0x80 */
+ 0, 0, 0, 0x5E32, 0, 0x5E38, 0, 0, /* 0x90 */
+ 0, 0x4E5E, 0, 0x4573, 0x4642, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3336, /* 0xA0 */
+ 0, 0, 0x3155, 0, 0, 0x5E3E, 0, 0, /* 0xB0 */
+ 0x5E41, 0, 0, 0, 0x4E43, 0, 0, 0, /* 0xB0 */
+ 0x4D64, 0, 0, 0, 0, 0x5E48, 0x5E42, 0x5E3F, /* 0xC0 */
+ 0, 0, 0, 0x4E54, 0x5E45, 0, 0, 0, /* 0xC0 */
+ 0, 0x3D4A, 0x5E47, 0, 0, 0x5E4C, 0, 0, /* 0xD0 */
+ 0x4571, 0x5E4A, 0, 0, 0, 0, 0x5E44, 0, /* 0xD0 */
+ 0, 0x4338, 0, 0, 0x5E4B, 0, 0x5E40, 0, /* 0xE0 */
+ 0x5E46, 0, 0x5E4D, 0x307C, 0x5E43, 0, 0x5E4E, 0, /* 0xE0 */
+ 0, 0x3F3C, 0, 0x3D5F, 0, 0x4A25, 0, 0x3A2E, /* 0xF0 */
+ 0, 0x5E3B, 0x5E49, 0x453A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4036, 0, 0x3369, /* 0x00 */
+ 0x3A51, 0x3E44, 0x5E3D, 0x3D42, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x374C, 0, 0x5E3C, 0, 0, /* 0x10 */
+ 0, 0x5E52, 0x3D6D, 0x383A, 0, 0x5E61, 0, 0x5E5B, /* 0x10 */
+ 0x3574, 0x454F, 0, 0x5E56, 0x5E5F, 0x302F, 0x3132, 0, /* 0x20 */
+ 0, 0x3239, 0, 0x5E58, 0x422C, 0x5E4F, 0x5E51, 0x3941, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x5E62, 0, 0x5E5D, 0, 0, 0, 0x5E55, 0, /* 0x30 */
+ 0, 0, 0, 0x5E5C, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x4C2B, 0, 0, 0x5E5A, 0x5E5E, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x3850, 0, /* 0x50 */
+ 0x3E45, 0, 0, 0x4339, 0, 0, 0, 0x5E54, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4D2F, /* 0x60 */
+ 0, 0, 0, 0x5E57, 0, 0, 0x5E50, 0x4572, /* 0x60 */
+ 0, 0, 0x5E53, 0, 0, 0, 0x5E59, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x4F51, 0x3C3E, /* 0x70 */
+ 0x4B7E, 0, 0x5E63, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x482E, 0, 0, 0x5E6F, /* 0x80 */
+ 0x383B, 0, 0, 0, 0, 0, 0x3D60, 0, /* 0x90 */
+ 0x5E65, 0, 0, 0, 0x4E2F, 0x3942, 0, 0x5E72, /* 0x90 */
+ 0, 0, 0x306E, 0, 0, 0x5E70, 0, 0, /* 0xA0 */
+ 0, 0, 0x5E64, 0, 0, 0, 0, 0x5E6A, /* 0xA0 */
+ 0, 0, 0x5E6C, 0, 0, 0, 0x4D4F, 0x5E67, /* 0xB0 */
+ 0, 0, 0x452E, 0, 0, 0x5E69, 0, 0, /* 0xB0 */
+ 0, 0, 0x5E71, 0, 0x5E6B, 0x4C47, 0, 0, /* 0xC0 */
+ 0, 0x5E66, 0, 0x3C22, 0x5E7E, 0, 0, 0, /* 0xC0 */
+ 0, 0x336A, 0, 0x5E68, 0x5E6D, 0x5E6E, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x426C, 0x425A, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x5E76, 0, 0, 0x5E7C, /* 0xE0 */
+ 0, 0, 0x5E7A, 0, 0x4529, 0, 0, 0x5F23, /* 0xF0 */
+ 0x5E77, 0, 0, 0, 0, 0, 0x5E78, 0x5E60 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3579, 0x493A, 0, 0, 0, 0x3C3F, 0, /* 0x00 */
+ 0, 0x3977, 0, 0, 0, 0, 0, 0x4F33, /* 0x00 */
+ 0, 0x5E74, 0, 0x5F22, 0x3169, 0x4166, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x4779, 0, 0x3441, 0x4E7A, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x4C21, 0x4452, 0, 0, 0, /* 0x20 */
+ 0, 0x5E7B, 0x5E7D, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x4132, 0, 0, 0, 0, 0, 0x5F21, 0x5E79, /* 0x30 */
+ 0, 0x5E73, 0, 0, 0, 0x3443, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x3769, 0, 0, 0, /* 0x50 */
+ 0x5F2F, 0, 0, 0x5F2A, 0x4078, 0, 0, 0x3363, /* 0x50 */
+ 0, 0, 0, 0, 0x3D61, 0, 0x5F33, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x5F2C, 0x442C, 0x5F29, /* 0x60 */
+ 0x4459, 0, 0, 0, 0x5F4C, 0, 0, 0, /* 0x70 */
+ 0x5F26, 0, 0x5F25, 0, 0x5F2E, 0, 0, 0, /* 0x70 */
+ 0x5F28, 0x5F27, 0x5F2D, 0, 0x4021, 0, 0x5F24, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x5F30, 0, /* 0x80 */
+ 0, 0x5F31, 0, 0, 0, 0, 0, 0x3442, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5F36, 0, 0x5F35, 0x5F37, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x5F3A, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x4543, 0, 0x5F34, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x5F38, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x3763, 0x4279, 0x5F32, 0x473B, 0, 0, 0x5F39, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x5F3E, 0x5F3C, 0, 0, /* 0xD0 */
+ 0x5F3F, 0, 0, 0x5F42, 0, 0, 0, 0x5F3B, /* 0xD0 */
+ 0x396A, 0x4728, 0, 0, 0x5E39, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x4D74, 0x5F3D, 0, 0x5F41, 0x4275, /* 0xE0 */
+ 0, 0x5F40, 0, 0x5F2B, 0, 0, 0x6F69, 0, /* 0xF0 */
+ 0, 0, 0x5F45, 0, 0, 0, 0x5F49 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5F47, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x5F43, 0, 0x5F44, 0, 0, 0, 0x5F48, /* 0x00 */
+ 0, 0x5F46, 0, 0, 0, 0x494E, 0, 0, /* 0x10 */
+ 0x5F4E, 0, 0x5F4B, 0x5F4A, 0, 0x5F4D, 0x4654, 0x5F4F, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x4375, 0x426D, /* 0x20 */
+ 0, 0, 0, 0, 0x4025, 0, 0, 0, /* 0x20 */
+ 0x5F50, 0, 0x5F52, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x5F51, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x5E75, 0, 0, 0, /* 0x40 */
+ 0, 0x5F53, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x4667, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x5F54, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x3250, 0, 0, 0, 0x4574, /* 0x60 */
+ 0x3325, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x3564, 0, 0, 0, 0x3C5E, 0x3A52, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x4F27, 0x3F66, 0, 0, 0, 0x316A, 0, /* 0x80 */
+ 0, 0, 0x5F56, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5F55, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x5F59, 0x433A, 0x5F5C, 0x5F57, /* 0xA0 */
+ 0, 0, 0, 0x5F5B, 0, 0, 0, 0, /* 0xB0 */
+ 0x5F5A, 0x4540, 0x3059, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x4E75, 0, 0, 0x5F5E, 0, 0, 0, 0x3128, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x5F60, 0, 0, 0, 0x5F5F, 0, 0x5F5D, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x5F58, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x4B23, 0, 0, 0, 0x5F62 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x5F61, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x316B, 0, 0, 0, /* 0x10 */
+ 0, 0x5F64, 0x4A32, 0, 0x5F63, 0, 0, 0, /* 0x10 */
+ 0, 0x4C35, 0, 0, 0, 0, 0x3E47, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x4133, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x3E46, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x4E7B, 0, 0, 0x5F6A, 0, 0x4079, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x5F66, 0x5F6B, 0, /* 0x50 */
+ 0, 0x316C, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x5F69, 0, 0x4761, 0x5F65, 0x5F68, 0x3E48, /* 0x60 */
+ 0, 0x4851, 0, 0, 0x5F6C, 0, 0x3C51, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x407A, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x5F6F, 0, 0, 0, /* 0x80 */
+ 0x5F67, 0, 0x3727, 0, 0, 0, 0, 0x5F6D, /* 0x80 */
+ 0, 0, 0, 0, 0x4D50, 0x5F70, 0, 0, /* 0x90 */
+ 0, 0x7426, 0, 0, 0, 0, 0, 0x3D4F, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x5F71, 0, 0, 0, 0x5F72, 0, 0, 0, /* 0xA0 */
+ 0, 0x472E, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x5F74, 0, 0, 0, 0, 0x5F75, 0, /* 0xB0 */
+ 0, 0, 0, 0x4733, 0, 0, 0, 0, /* 0xC0 */
+ 0x4575, 0x5F77, 0, 0, 0, 0, 0x5F79, 0, /* 0xC0 */
+ 0x4E55, 0, 0x5F76, 0, 0x5F78, 0x316D, 0, 0x5F73, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x535B, /* 0xD0 */
+ 0x5F7A, 0, 0, 0, 0, 0x4167, 0x3B38, 0x5F7C, /* 0xE0 */
+ 0, 0, 0, 0, 0x5F7B, 0x3F24, 0x5259, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x5F7D, 0, 0, /* 0xF0 */
+ 0, 0x6021, 0, 0x5F6E, 0x5F7E, 0, 0, 0x6022 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x477A, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x6023, 0, 0, /* 0x00 */
+ 0x6024, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x6025, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x6026, 0, 0x445E, 0, 0x6028, 0x6027, 0, 0, /* 0x20 */
+ 0x6029, 0, 0x602A, 0, 0, 0x3C5F, 0x4963, 0, /* 0x30 */
+ 0, 0, 0x4C6C, 0x602B, 0x602C, 0x4156, 0x3C24, 0x602D, /* 0x30 */
+ 0x602E, 0, 0, 0, 0, 0, 0x602F, 0x4A52, /* 0x40 */
+ 0x4847, 0, 0, 0x6030, 0x4757, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x442D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x6031, 0x3267, 0, 0x356D, 0, 0x4C46, 0, 0x4C36, /* 0x50 */
+ 0, 0x3234, 0x4F34, 0, 0, 0, 0, 0x4B52, /* 0x60 */
+ 0, 0x4A2A, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x4037, 0, 0x6032, 0, 0, 0, /* 0x70 */
+ 0, 0x4643, 0, 0, 0, 0x3823, 0x6033, 0, /* 0x70 */
+ 0x3A54, 0x6035, 0x6034, 0, 0, 0, 0, 0x6036, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x6037, 0, 0, 0, 0x6038, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x353E, 0, 0x6039, 0, 0, 0, 0, 0x603A, /* 0xA0 */
+ 0, 0, 0, 0, 0x3824, 0, 0, 0x4848, /* 0xA0 */
+ 0, 0, 0x603C, 0, 0, 0, 0x3E75, 0, /* 0xB0 */
+ 0, 0x603B, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x3638, 0x603D, 0x603F, 0, 0x603E, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x6040, 0, /* 0xC0 */
+ 0x3851, 0, 0x6041, 0, 0, 0, 0, 0x3669, /* 0xD0 */
+ 0, 0x4140, 0, 0x397D, 0, 0, 0, 0, /* 0xD0 */
+ 0x6043, 0x6044, 0x6042, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x3C6D, 0, 0, 0x4648, 0x3639, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6046, /* 0xF0 */
+ 0x432C, 0x6045, 0, 0, 0x4F35, 0x4762 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x6049, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x604B, 0x6048, /* 0x10 */
+ 0, 0, 0, 0x4C54, 0x604A, 0x604C, 0, 0x4E44, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x6050, 0, 0, /* 0x20 */
+ 0, 0x604F, 0x4376, 0x472D, 0, 0, 0x3825, 0x604E, /* 0x20 */
+ 0, 0, 0, 0, 0x604D, 0, 0x4D31, 0x4D32, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x6051, 0x316E, /* 0x30 */
+ 0, 0, 0, 0, 0x3976, 0x3B62, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x6052, 0x6053, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6055, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x3D43, 0, 0, 0, 0, /* 0x60 */
+ 0x6057, 0, 0x6056, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x6058, 0, 0x334D, 0, 0, 0x605A, 0, 0, /* 0x70 */
+ 0x6059, 0, 0x605C, 0x605B, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x383C, 0, 0, 0x4E28, /* 0x80 */
+ 0, 0x364C, 0, 0x3226, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x366A, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x3461, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x4E68, 0x605E, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x6060, 0, 0, 0, 0, /* 0xB0 */
+ 0x6061, 0, 0x3251, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x605D, 0, 0x3B39, 0, 0, 0x4441, 0x605F, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0x6064, 0, /* 0xD0 */
+ 0x3C6E, 0, 0, 0, 0, 0x6062, 0, 0, /* 0xE0 */
+ 0, 0, 0x373E, 0, 0, 0x4849, 0x6063, 0, /* 0xE0 */
+ 0, 0x607E, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x6069, 0, 0, 0, 0, 0, 0x383D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3565, 0, 0x6066, 0x4D7D, 0, /* 0x00 */
+ 0, 0x4E30, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x4276, 0, 0, 0x6068, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x606A, 0x4E56, 0x3657, 0x487C, 0x474A, 0, /* 0x30 */
+ 0, 0, 0x606B, 0, 0, 0, 0, 0x606D, /* 0x30 */
+ 0, 0x6070, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x606C, 0, 0, /* 0x50 */
+ 0, 0x606F, 0x386A, 0x314D, 0x6071, 0, 0x3F70, 0x606E, /* 0x50 */
+ 0x4E5C, 0, 0, 0x6074, 0x7424, 0, 0, 0, /* 0x60 */
+ 0, 0x6072, 0x6075, 0, 0, 0, 0, 0x6067, /* 0x60 */
+ 0x6073, 0, 0, 0x3A3C, 0, 0, 0x6076, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x6077, 0, /* 0x70 */
+ 0, 0, 0, 0x4D7E, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x6078, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x6079, 0, /* 0x90 */
+ 0, 0, 0x6065, 0, 0, 0, 0, 0x607A, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x3444, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x3C25, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x607B, 0, 0, 0, 0, 0x607C, /* 0xC0 */
+ 0, 0, 0, 0, 0x607D, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x313B, 0, 0, 0, /* 0xD0 */
+ 0x6121, 0, 0x493B, 0x6122, 0, 0, 0x3424, 0x6123, /* 0xE0 */
+ 0, 0x6124, 0, 0, 0, 0, 0x6125, 0, /* 0xE0 */
+ 0x6127, 0x6128, 0x6126, 0, 0, 0, 0x4953, 0x612A, /* 0xF0 */
+ 0x6129 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x612C, 0x612B, 0x612D, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x612E, 0x6130, 0x612F, 0, /* 0x00 */
+ 0, 0x3979, 0, 0x6132, 0, 0x6131, 0, 0, /* 0x10 */
+ 0x3445, 0, 0x3F53, 0, 0x453C, 0, 0x6133, 0x4038, /* 0x10 */
+ 0, 0, 0, 0x3B3A, 0, 0x3179, 0x6134, 0, /* 0x20 */
+ 0x4D51, 0, 0, 0x4A63, 0x6135, 0, 0, 0, /* 0x20 */
+ 0x4544, 0x4D33, 0x3943, 0x3F3D, 0, 0, 0, 0x434B, /* 0x30 */
+ 0x5234, 0, 0x442E, 0x3268, 0x6136, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x6137, 0, 0x613C, 0, /* 0x40 */
+ 0, 0x613A, 0x6139, 0x5A42, 0x3326, 0x6138, 0, 0x305A, /* 0x40 */
+ 0, 0x482A, 0, 0, 0x484A, 0, 0, 0, /* 0x50 */
+ 0, 0x4E31, 0x613D, 0x613B, 0x435C, 0x4026, 0, 0, /* 0x50 */
+ 0x482B, 0, 0x492D, 0, 0x613F, 0x4E2C, 0x374D, 0x6140, /* 0x60 */
+ 0, 0x613E, 0x4856, 0x6141, 0, 0x6142, 0, 0, /* 0x60 */
+ 0x305B, 0, 0, 0x3E76, 0x6147, 0, 0x6144, 0x466D, /* 0x70 */
+ 0x6143, 0, 0, 0, 0, 0, 0, 0x3526, /* 0x70 */
+ 0, 0, 0x614A, 0, 0, 0, 0x6145, 0x6146, /* 0x80 */
+ 0, 0x6149, 0x6148, 0x4925, 0, 0, 0x4142, 0x4141, /* 0x80 */
+ 0, 0x353F, 0, 0, 0x614B, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x614C, 0, 0, 0x614D, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x614F, 0, 0x614E, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x3156, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x6157, 0x4868, 0x6151, 0, 0x6153, 0, 0, /* 0xB0 */
+ 0x6155, 0x3F3E, 0, 0, 0x6156, 0x6154, 0x3C40, 0, /* 0xB0 */
+ 0, 0, 0x6150, 0x6152, 0, 0x4942, 0, 0x3E49, /* 0xC0 */
+ 0, 0, 0x6159, 0, 0, 0x6158, 0, 0, /* 0xC0 */
+ 0, 0, 0x615A, 0, 0x3C26, 0x3A2F, 0, 0, /* 0xD0 */
+ 0x4577, 0x615B, 0, 0x444B, 0, 0, 0x615D, 0, /* 0xD0 */
+ 0, 0, 0x4E21, 0x615C, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x4169, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x6162, 0, 0x6164, 0x6165, 0x4354, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x6163, 0, 0x6160, 0, 0x615E, 0x615F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6161, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x6168, 0, 0x6166, 0, 0x6167, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6169, /* 0x10 */
+ 0x616B, 0x616C, 0x616D, 0, 0x616E, 0, 0, 0x616A, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x6170, 0, 0, 0, 0x616F, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x6171, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x4E45, 0, 0, 0, 0x6174, 0x6172, /* 0x40 */
+ 0x6173, 0, 0, 0, 0x3462, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x4C7E, 0, 0, 0, 0x4A4A, 0, /* 0x50 */
+ 0x6176, 0, 0, 0, 0x6175, 0, 0, 0, /* 0x50 */
+ 0, 0x6177, 0x6178, 0, 0, 0, 0, 0x617C, /* 0x60 */
+ 0x6179, 0x617A, 0x617B, 0, 0x617D, 0, 0, 0, /* 0x60 */
+ 0x617E, 0, 0x6221, 0, 0, 0, 0x6222, 0, /* 0x70 */
+ 0x6223, 0, 0x482F, 0x4550, 0x6224, 0x4772, 0x4934, 0, /* 0x70 */
+ 0x6225, 0, 0, 0x6226, 0x452A, 0, 0x3327, 0x3944, /* 0x80 */
+ 0x6227, 0, 0, 0x6228, 0, 0, 0x6229, 0, /* 0x80 */
+ 0x3B29, 0, 0, 0x622B, 0, 0, 0x622A, 0, /* 0x90 */
+ 0, 0x622C, 0x622D, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x4869, 0, /* 0xA0 */
+ 0x622E, 0, 0, 0, 0x622F, 0, 0, 0x7369, /* 0xB0 */
+ 0x6230, 0x6231, 0x6232, 0, 0, 0, 0, 0x3B2E, /* 0xB0 */
+ 0, 0, 0x6233, 0x4756, 0, 0, 0x4B5F, 0, /* 0xC0 */
+ 0x314E, 0, 0x3157, 0, 0, 0x6234, 0, 0, /* 0xC0 */
+ 0, 0, 0x6236, 0, 0, 0, 0x6235, 0x4570, /* 0xD0 */
+ 0, 0, 0, 0x4039, 0x5D39, 0, 0x6237, 0x4C41, /* 0xD0 */
+ 0, 0x6238, 0, 0x3446, 0x4857, 0x6239, 0, 0x623A, /* 0xE0 */
+ 0, 0, 0x623B, 0, 0, 0, 0x4C5C, 0, /* 0xE0 */
+ 0, 0, 0x4C55, 0, 0x443E, 0, 0, 0, /* 0xF0 */
+ 0x416A, 0, 0, 0x623D, 0, 0, 0x3D62 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3E4A, 0, 0, 0x6240, 0, 0, 0x623F, /* 0x00 */
+ 0x623E, 0x487D, 0, 0x3447, 0x3829, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x6246, 0, 0, 0x6243, 0x3F3F, /* 0x10 */
+ 0x4C32, 0, 0, 0, 0x6242, 0x6244, 0x6245, 0, /* 0x20 */
+ 0, 0x6241, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6247, /* 0x30 */
+ 0x6248, 0, 0x442F, 0, 0x3463, 0, 0, 0, /* 0x30 */
+ 0x4365, 0, 0, 0, 0, 0, 0, 0x6249, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x624A, 0x624D, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x3F67, 0, 0x4644, 0, 0x624E, 0x4B53, 0, /* 0x60 */
+ 0x624B, 0, 0, 0x624C, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x6251, 0, 0, 0, 0, 0x6250, 0x624F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x6253, 0, 0, 0x6252, 0, /* 0x80 */
+ 0, 0x6254, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x6256, 0, /* 0x90 */
+ 0x6255, 0, 0, 0, 0, 0x4A4D, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x3D56, 0x4E46, 0, 0, /* 0xA0 */
+ 0x6257, 0, 0, 0x4637, 0, 0, 0x6258, 0, /* 0xB0 */
+ 0, 0x6259, 0, 0x625D, 0x625B, 0x625C, 0, 0x625A, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x625E, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x625F, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6260, /* 0xD0 */
+ 0, 0, 0x6261, 0x4C37, 0x6262, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x4C70, 0x6263, 0, 0x434E, 0, 0x476A, /* 0xE0 */
+ 0, 0x366B, 0, 0, 0, 0x433B, 0x6264, 0x363A, /* 0xE0 */
+ 0, 0, 0, 0x4050, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x6265 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3A3D, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x6266, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x6267, 0, 0x3826, 0x3A55, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x6269, 0, 0, 0, 0, 0x4556, 0x3A56, 0x354E, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x4B24, 0, 0x474B, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x4557, 0, 0, 0, 0, 0x395C, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x626B, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x3E4B, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x4E32, 0x3945, 0, 0, 0x3827, /* 0x60 */
+ 0, 0, 0x4823, 0, 0x626D, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x626F, 0, 0, 0, /* 0x70 */
+ 0, 0x386B, 0, 0, 0, 0, 0x626E, 0x4476, /* 0x80 */
+ 0, 0, 0, 0, 0x6271, 0x3337, 0x626C, 0, /* 0x80 */
+ 0, 0x486A, 0, 0x3130, 0, 0x3A6C, 0, 0x4F52, /* 0x90 */
+ 0, 0, 0x6270, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x6272, 0, 0, 0, 0x4A4B, /* 0xA0 */
+ 0, 0x4059, 0x6274, 0, 0, 0, 0, 0x6275, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x6273, 0, 0, /* 0xB0 */
+ 0, 0, 0x334E, 0, 0x627B, 0, 0x627A, 0, /* 0xB0 */
+ 0, 0x3C27, 0, 0, 0, 0x627C, 0x6277, 0, /* 0xC0 */
+ 0, 0, 0x627D, 0x6278, 0, 0, 0, 0, /* 0xC0 */
+ 0x4858, 0x6276, 0, 0, 0x6279, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x6322, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6321, /* 0xE0 */
+ 0x4B61, 0, 0, 0, 0x627E, 0, 0, 0x306B, /* 0xE0 */
+ 0, 0, 0, 0, 0x6324, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0x6323 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3E4C, 0, 0, 0, 0, 0, 0x6325, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x4143, 0, /* 0x00 */
+ 0, 0x6327, 0x6326, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x6328, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x6268, 0, /* 0x20 */
+ 0, 0, 0x626A, 0x632A, 0x6329, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x3C28, 0, 0x4E69, 0, 0x3C52, 0, /* 0x30 */
+ 0x632B, 0x3737, 0, 0, 0, 0, 0, 0x3540, /* 0x40 */
+ 0x3527, 0x3B63, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x4D34, 0, 0, 0x6331, 0, 0x6330, 0x4144, 0x632D, /* 0x50 */
+ 0, 0, 0x632F, 0, 0, 0x3D4B, 0x3F40, 0x632E, /* 0x50 */
+ 0x632C, 0, 0x472A, 0, 0, 0x3E4D, 0, 0, /* 0x60 */
+ 0x493C, 0, 0, 0, 0, 0x3A57, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4578, /* 0x70 */
+ 0, 0, 0x6332, 0, 0, 0, 0, 0x6333, /* 0x70 */
+ 0x6349, 0x3658, 0, 0, 0x4F3D, 0x4135, 0, 0, /* 0x80 */
+ 0, 0, 0x6334, 0, 0, 0x3252, 0x4477, 0x4A21, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x6335, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x357A, 0x6336, /* 0xA0 */
+ 0, 0, 0x6338, 0, 0, 0, 0x6339, 0, /* 0xA0 */
+ 0x4729, 0, 0, 0x633A, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x633B, 0x633C, 0, 0, 0x3659, 0x3253, 0x4645, /* 0xB0 */
+ 0x3D28, 0x3B64, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x633D, 0, 0x3D29, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x324A, 0x4943, 0, 0, 0x633E, 0, 0, /* 0xD0 */
+ 0x486B, 0, 0, 0, 0, 0, 0, 0x4145, /* 0xD0 */
+ 0, 0x6341, 0, 0x6342, 0x4769, 0, 0x3F41, 0x633F, /* 0xE0 */
+ 0, 0x4361, 0, 0, 0x6340, 0, 0, 0, /* 0xE0 */
+ 0x3E4E, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0x305C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3529, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x6343, 0, 0, 0x4478, 0, 0x6344, 0x4047, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x4C2D, 0, 0, 0x4923, /* 0x10 */
+ 0x6345, 0x6346, 0x4355, 0, 0x4E47, 0, 0, 0x6348, /* 0x10 */
+ 0x6347, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x3C6F, 0, /* 0x20 */
+ 0, 0x634A, 0x3070, 0, 0, 0, 0, 0x634D, /* 0x30 */
+ 0, 0, 0, 0x634B, 0x3254, 0x374E, 0x634C, 0x3946, /* 0x30 */
+ 0x3972, 0, 0x4A66, 0x634E, 0, 0, 0x4B54, 0, /* 0x40 */
+ 0, 0x6350, 0, 0, 0, 0x4051, 0x314F, 0x323A, /* 0x40 */
+ 0x302C, 0, 0, 0, 0, 0, 0, 0x634F, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x6351, 0x6352, 0x3E77, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x6353, 0, 0x334F, 0, 0, 0, 0, /* 0x60 */
+ 0x6355, 0, 0, 0, 0x376A, 0, 0x3566, 0, /* 0x70 */
+ 0, 0x6356, 0x3675, 0, 0, 0x6357, 0, 0x407C, /* 0x70 */
+ 0, 0x464D, 0, 0x4060, 0x3A75, 0, 0, 0, /* 0x80 */
+ 0x6358, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x4362, 0x416B, 0, 0x635A, 0x635C, 0x6359, /* 0x90 */
+ 0x635B, 0, 0, 0, 0, 0, 0, 0x3722, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x635D, 0x3726, 0, 0, 0, 0x3567, 0x4D52, /* 0xA0 */
+ 0x635F, 0, 0, 0, 0, 0, 0x6360, 0, /* 0xB0 */
+ 0, 0, 0x312E, 0, 0, 0, 0, 0x6363, /* 0xB0 */
+ 0, 0, 0, 0x3376, 0x6362, 0x6361, 0, 0x6365, /* 0xC0 */
+ 0x635E, 0, 0x6366, 0x4E29, 0, 0x6367, 0, 0x6368, /* 0xC0 */
+ 0, 0, 0x5474, 0x636A, 0, 0x6369, 0, 0, /* 0xD0 */
+ 0, 0x636B, 0x636C, 0, 0x4E35, 0x636D, 0, 0x706F, /* 0xD0 */
+ 0x3E4F, 0x636E, 0x636F, 0x3D57, 0, 0x4638, 0x6370, 0, /* 0xE0 */
+ 0, 0, 0x4328, 0, 0, 0x6371, 0, 0x433C, /* 0xE0 */
+ 0x6372, 0, 0, 0, 0, 0, 0x3625, 0, /* 0xF0 */
+ 0x513F, 0x435D, 0x3C33, 0, 0, 0, 0, 0x3448 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6373, 0, 0x6422, 0, 0x6376, 0, /* 0x00 */
+ 0x3568, 0, 0x6375, 0x6424, 0, 0, 0, 0x6374, /* 0x00 */
+ 0, 0x3E50, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x6378, 0x6379, 0, 0x452B, 0, 0, 0x637A, 0, /* 0x10 */
+ 0x335E, 0, 0, 0, 0, 0x3F5A, 0x4964, 0, /* 0x20 */
+ 0x637C, 0, 0, 0, 0x4268, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x6377, 0, 0x637B, 0x637D, 0, /* 0x30 */
+ 0, 0x3A7B, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x6426, 0x492E, 0, /* 0x40 */
+ 0x4826, 0x4579, 0, 0x365A, 0x6425, 0x6423, 0, 0x4835, /* 0x40 */
+ 0x637E, 0x435E, 0x457B, 0, 0x457A, 0, 0x3A76, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x6438, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x6428, 0, 0x642A, /* 0x60 */
+ 0, 0, 0, 0, 0x642D, 0, 0x642E, 0, /* 0x60 */
+ 0x642B, 0x642C, 0, 0, 0x6429, 0x6427, 0, 0, /* 0x70 */
+ 0, 0, 0x6421, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x4A4F, 0x3255, /* 0x80 */
+ 0, 0, 0, 0x6435, 0, 0x6432, 0, 0x6437, /* 0x80 */
+ 0, 0, 0x6436, 0, 0x4773, 0x4C27, 0, 0x3B3B, /* 0x90 */
+ 0x6430, 0x6439, 0x6434, 0, 0x6433, 0x642F, 0, 0x6431, /* 0x90 */
+ 0, 0x3449, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x433D, 0, 0, 0x407D, 0, 0, /* 0xA0 */
+ 0, 0x4822, 0, 0, 0x643E, 0, 0, 0, /* 0xB0 */
+ 0x4824, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x4061, 0x643B, 0, 0, 0x484F, 0, 0x643F, 0x4A53, /* 0xC0 */
+ 0, 0x435B, 0, 0x643A, 0x643C, 0, 0, 0x643D, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x6440, 0, 0, /* 0xD0 */
+ 0x3C44, 0, 0, 0, 0x4646, 0x6445, 0x6444, 0, /* 0xE0 */
+ 0, 0x6441, 0, 0, 0, 0x4F36, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x644A, 0, 0, 0x644E, 0x644B /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6447, 0, 0, 0, 0, 0, 0, 0x6448, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x644D, 0, 0, /* 0x00 */
+ 0, 0x6442, 0x5255, 0x6449, 0x6443, 0, 0, 0x644C, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6452, /* 0x10 */
+ 0, 0x344A, 0, 0x644F, 0, 0, 0, 0x6450, /* 0x20 */
+ 0, 0, 0x6451, 0x6454, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6453, /* 0x30 */
+ 0x4876, 0, 0, 0, 0, 0x6455, 0x4E7C, 0x4A6D, /* 0x30 */
+ 0x645A, 0, 0, 0x6457, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x6456, 0x4052, 0, 0x6459, /* 0x40 */
+ 0x645B, 0, 0, 0, 0x6458, 0, 0x645F, 0, /* 0x50 */
+ 0x645C, 0, 0, 0, 0, 0, 0, 0x645D, /* 0x50 */
+ 0x6446, 0, 0, 0, 0x645E, 0x6460, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x6461, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x4A46, 0, 0x6462, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x4C62, 0, /* 0x70 */
+ 0, 0x364E, 0x3729, 0x6463, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x4A34, 0, 0x3F68, 0, 0x4C30, 0, 0, /* 0x80 */
+ 0x6464, 0, 0x4E33, 0, 0, 0x4774, 0, 0x4146, /* 0x90 */
+ 0x4734, 0, 0, 0x3D4D, 0, 0, 0, 0x3040, /* 0x90 */
+ 0, 0x6469, 0x6467, 0, 0x6465, 0x3421, 0, 0x3E51, /* 0xA0 */
+ 0x646A, 0, 0, 0x6468, 0, 0x6466, 0x646E, 0, /* 0xA0 */
+ 0, 0x646D, 0x646C, 0x646B, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x646F, 0, 0, 0, 0x6470, 0x403A, 0, /* 0xB0 */
+ 0x6471, 0, 0x6473, 0, 0, 0x6472, 0, 0, /* 0xC0 */
+ 0, 0, 0x3852, 0, 0, 0, 0x4138, 0, /* 0xC0 */
+ 0, 0, 0x6475, 0, 0, 0, 0x457C, 0, /* 0xD0 */
+ 0x6474, 0, 0, 0, 0x6476, 0, 0x4A35, 0x416C, /* 0xD0 */
+ 0x3947, 0, 0x6477, 0, 0, 0, 0, 0x4E48, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6479, /* 0xE0 */
+ 0, 0, 0x647A, 0, 0x647B, 0, 0x647C, 0, /* 0xF0 */
+ 0x3B65, 0, 0x647D, 0x374F, 0, 0, 0x356A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x352A, 0, 0x6521, 0, 0x4C73, 0x3948, 0x647E, 0, /* 0x00 */
+ 0, 0, 0x6524, 0x4C66, 0, 0x473C, 0, 0, /* 0x00 */
+ 0x4933, 0, 0, 0, 0x3D63, 0x6523, 0, 0x3C53, /* 0x10 */
+ 0x3949, 0x3B66, 0x3569, 0x4A36, 0x6522, 0, 0, 0, /* 0x10 */
+ 0x4147, 0x4B42, 0x3A77, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x3B67, 0x445D, 0, 0x6527, 0x4E5F, /* 0x20 */
+ 0x3A59, 0, 0x6528, 0x3F42, 0, 0x652A, 0, 0, /* 0x30 */
+ 0, 0x3E52, 0x3A30, 0, 0, 0, 0, 0x6529, /* 0x30 */
+ 0, 0, 0x3D2A, 0x383E, 0x4148, 0x6525, 0x652B, 0, /* 0x40 */
+ 0, 0, 0, 0x6526, 0x3750, 0, 0x652E, 0x6532, /* 0x40 */
+ 0x376B, 0, 0, 0, 0, 0, 0x652D, 0, /* 0x50 */
+ 0, 0, 0, 0x6536, 0, 0, 0x394A, 0, /* 0x50 */
+ 0, 0x4D6D, 0x303C, 0x6533, 0, 0, 0x356B, 0, /* 0x60 */
+ 0x6530, 0, 0, 0, 0, 0, 0x6531, 0, /* 0x60 */
+ 0, 0x457D, 0x652F, 0x652C, 0, 0x3328, 0x4064, 0, /* 0x70 */
+ 0, 0x3828, 0, 0, 0, 0x6538, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x6535, 0, 0, 0, 0, 0, 0x6537, /* 0x80 */
+ 0, 0, 0, 0x6534, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x3751, 0x4233, 0x6539, 0x416E, 0, 0, 0x6546, /* 0x90 */
+ 0, 0, 0x6542, 0x653C, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x6540, 0x3C7A, 0x305D, 0x653B, 0x6543, /* 0xA0 */
+ 0x6547, 0x394B, 0x4C56, 0, 0x4456, 0x653D, 0, 0, /* 0xB0 */
+ 0x6545, 0, 0x653A, 0x433E, 0, 0x653F, 0x303D, 0x4C4A, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x653E, /* 0xC0 */
+ 0, 0, 0x365B, 0x486C, 0, 0, 0, 0x416D, /* 0xC0 */
+ 0, 0x4E50, 0x3D6F, 0, 0, 0x656E, 0, 0, /* 0xD0 */
+ 0x6548, 0, 0x407E, 0, 0x6544, 0x6549, 0x654B, 0, /* 0xD0 */
+ 0x4479, 0x654E, 0, 0, 0x654A, 0, 0, 0, /* 0xE0 */
+ 0x4A54, 0x344B, 0, 0, 0x4C4B, 0, 0, 0x305E, /* 0xE0 */
+ 0, 0, 0x654D, 0, 0x4E7D, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0x654C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x316F, 0, 0, 0x466C, 0x654F, 0, 0, /* 0x00 */
+ 0, 0x6556, 0x6550, 0x6557, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x6553, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x477B, 0, 0, 0x3C4A, 0x6555, /* 0x10 */
+ 0, 0x6552, 0x6558, 0x6551, 0, 0, 0x3D44, 0, /* 0x20 */
+ 0, 0, 0, 0x4B25, 0, 0, 0x3D4C, 0, /* 0x20 */
+ 0, 0x6554, 0x6560, 0, 0, 0x655C, 0, 0x655F, /* 0x30 */
+ 0, 0x655D, 0x6561, 0x655B, 0, 0x6541, 0x4053, 0, /* 0x30 */
+ 0, 0x484B, 0, 0x655E, 0, 0, 0x6559, 0, /* 0x40 */
+ 0, 0, 0x4121, 0x3752, 0, 0x3D2B, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x3F25, 0x4136, 0x6564, 0, /* 0x50 */
+ 0, 0x6566, 0x6567, 0, 0, 0x6563, 0x6565, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x655A, 0x6562, /* 0x60 */
+ 0, 0x656A, 0x6569, 0, 0, 0x4B7A, 0, 0, /* 0x60 */
+ 0x372B, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x6568, 0, 0x656C, 0x656B, 0x656F, 0, 0x6571, /* 0x70 */
+ 0, 0, 0x3B3C, 0x656D, 0, 0, 0, 0, /* 0x80 */
+ 0x6572, 0x6573, 0, 0, 0x6574, 0, 0x657A, 0x453B, /* 0x80 */
+ 0x6576, 0, 0x6575, 0x6577, 0x6578, 0, 0x6579, 0, /* 0x90 */
+ 0, 0, 0, 0x657B, 0x657C /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x344C, 0, /* 0x30 */
+ 0x657D, 0, 0x657E, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x6621, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x6622, 0x6623, 0x6624, 0, /* 0x40 */
+ 0x6625, 0x6626, 0, 0, 0x6628, 0x6627, 0, 0, /* 0x50 */
+ 0x6629, 0, 0, 0, 0, 0, 0, 0x662A, /* 0x50 */
+ 0x662B, 0, 0, 0, 0, 0, 0, 0x662E, /* 0x60 */
+ 0x662C, 0x662D, 0x3A61, 0x3753, 0, 0, 0x4356, 0, /* 0x60 */
+ 0x4833, 0, 0x3D70, 0, 0, 0x474D, 0, 0x486D, /* 0x70 */
+ 0x662F, 0x586D, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x6630, 0x6632, 0, 0x4D65, 0x6631, 0x6634, /* 0x80 */
+ 0x6633, 0, 0x4D53, 0, 0x6635, 0, 0x487E, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x6636, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x6639, 0, 0, 0x6638, 0x6637, 0, /* 0x90 */
+ 0, 0, 0, 0x663A, 0x3732, 0, 0, 0, /* 0xA0 */
+ 0x4122, 0x3541, 0, 0, 0, 0, 0x663E, 0x663B, /* 0xA0 */
+ 0, 0, 0x663C, 0, 0, 0, 0x663F, 0, /* 0xB0 */
+ 0x6640, 0x663D, 0, 0, 0, 0x3129, 0, 0, /* 0xB0 */
+ 0, 0x3227, 0, 0, 0, 0x6642, 0x6643, 0, /* 0xC0 */
+ 0, 0, 0x6644, 0, 0x4D62, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x3D2C, 0, 0x6646, 0x6645, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x3F69, 0x6647, 0, 0, 0, 0, 0x6648, 0, /* 0xE0 */
+ 0, 0x6649, 0, 0x3465, 0, 0, 0, 0, /* 0xE0 */
+ 0x344D, 0, 0, 0x664A, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x664B, 0, 0x4B5D, 0x4D63 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4D54, 0x4F37, 0, 0x394D, 0x664E, 0x3C54, 0x664D, 0, /* 0x00 */
+ 0, 0, 0, 0x664F, 0x3C29, 0, 0, 0, /* 0x00 */
+ 0x4251, 0, 0x6650, 0, 0, 0x394C, 0, 0x4C57, /* 0x10 */
+ 0x6651, 0x6652, 0, 0, 0x6653, 0, 0, 0, /* 0x10 */
+ 0, 0x6654, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x6655, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x3C2A, 0, 0, 0x4C6D, 0, /* 0x30 */
+ 0, 0, 0, 0x6657, 0, 0x433F, 0, 0x6656, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x6659, 0, /* 0x40 */
+ 0, 0, 0x6658, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x665A, 0, 0, 0, 0x403B, 0, /* 0x50 */
+ 0x665B, 0, 0x665C, 0, 0, 0, 0x4A39, 0x665D, /* 0x50 */
+ 0, 0x416F, 0x665E, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x665F, 0, 0, 0, 0, 0, 0, 0x4E7E, /* 0x60 */
+ 0x6662, 0, 0x6661, 0x6660, 0x4430, 0, 0x6663, 0x3F26, /* 0x70 */
+ 0, 0x6664, 0, 0, 0, 0x6665, 0x4F38, 0x6666, /* 0x70 */
+ 0, 0, 0, 0, 0x6667, 0x6669, 0x6668, 0x4825, /* 0x80 */
+ 0, 0x4679, 0, 0x4F3E, 0x4829, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x666B, 0, 0, 0x3E53, 0, /* 0x90 */
+ 0x492A, 0, 0x666C, 0x666A, 0, 0x344E, 0, 0, /* 0x90 */
+ 0, 0x3854, 0x3B68, 0, 0, 0x486E, 0, 0, /* 0xA0 */
+ 0, 0x382A, 0x4B43, 0, 0x666F, 0x666D, 0, 0x394E, /* 0xA0 */
+ 0, 0x394F, 0x3069, 0, 0x3A68, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x4759, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x305F, 0x6674, 0, 0x4340, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x4758, 0, 0x425B, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x6676, 0, /* 0xD0 */
+ 0, 0x6672, 0x6675, 0x6670, 0, 0x6673, 0x4B26, 0, /* 0xD0 */
+ 0, 0x3855, 0, 0, 0x307D, 0x6671, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6678, /* 0xE0 */
+ 0, 0x6679, 0, 0, 0x4639, 0, 0, 0, /* 0xF0 */
+ 0x363B, 0, 0, 0, 0x6726, 0x473D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3B69, 0, 0, 0x363C, 0x4048, 0x4F46, /* 0x00 */
+ 0x4C2E, 0x6677, 0x4054, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x3553, 0x667A, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x667C, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x667B, 0, 0, 0, 0, 0, 0x667D, /* 0x20 */
+ 0, 0x4326, 0, 0x473E, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x4431, 0, 0, 0, 0, 0x6723, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x6722, 0, /* 0x40 */
+ 0, 0, 0, 0x667E, 0, 0, 0x3F55, 0, /* 0x40 */
+ 0x4965, 0x6725, 0, 0x6724, 0x3950, 0x4F53, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6735, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x6729, 0x672A, 0, /* 0x60 */
+ 0, 0, 0, 0x3C70, 0, 0, 0x6728, 0, /* 0x60 */
+ 0x3978, 0x6727, 0, 0, 0x672B, 0, 0, 0, /* 0x70 */
+ 0x4432, 0x4A22, 0x4123, 0, 0, 0, 0, 0x425C, /* 0x70 */
+ 0x672F, 0, 0x6730, 0x672C, 0, 0, 0, 0, /* 0x80 */
+ 0x672D, 0, 0x672E, 0, 0, 0, 0, 0x3951, /* 0x80 */
+ 0, 0, 0, 0x6736, 0, 0x6732, 0, 0, /* 0x90 */
+ 0, 0, 0x4966, 0, 0x4B6C, 0x4928, 0, 0, /* 0x90 */
+ 0x6731, 0, 0, 0x6734, 0x6733, 0, 0, 0, /* 0xA0 */
+ 0x4B44, 0x6737, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x6738, 0, 0, 0x4137, 0, 0x6739, 0, 0, /* 0xB0 */
+ 0x673B, 0, 0x673F, 0, 0, 0x673C, 0x673A, 0x473F, /* 0xB0 */
+ 0x673D, 0, 0x673E, 0, 0, 0, 0x3232, 0, /* 0xC0 */
+ 0x6745, 0x6740, 0, 0, 0, 0x6741, 0, 0, /* 0xC0 */
+ 0, 0x6742, 0, 0x4221, 0, 0, 0, 0, /* 0xD0 */
+ 0x6744, 0x6743, 0x6746, 0, 0, 0, 0, 0x6747, /* 0xD0 */
+ 0x6748, 0, 0, 0x3F43, 0, 0x3269, 0, 0x6749, /* 0xE0 */
+ 0x4E57, 0, 0x3C2B, 0, 0, 0x3D2D, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x3B6A, 0x4357, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x674A, 0x674B, 0x3131, 0, 0x674C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x674D, 0x674E, 0, 0, 0x674F, 0, 0x6750, /* 0x00 */
+ 0x363D, 0x5A2A, 0x6751, 0, 0x4065, 0x6752, 0x3C4B, 0, /* 0x00 */
+ 0x6753, 0, 0x5030, 0, 0, 0, 0x6754, 0x4A5E, /* 0x10 */
+ 0x345C, 0, 0, 0x4124, 0x3D58, 0, 0x4971, 0x3D2E, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x6755, 0x3952, 0x6756, 0x484C, 0, 0x6764, 0, /* 0x20 */
+ 0, 0, 0, 0x6758, 0, 0x4249, 0x4775, 0x383F, /* 0x30 */
+ 0x6757, 0x4125, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x6759, 0, 0, 0, 0, 0, 0, 0x447A, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x675B, 0x675A, 0x675D, 0, 0, 0x675C, 0, 0x675E, /* 0x50 */
+ 0, 0, 0x6760, 0, 0x675F, 0, 0x344F, 0, /* 0x60 */
+ 0x6761, 0, 0x6762, 0x6763, 0, 0, 0x3A31, 0x4E49, /* 0x60 */
+ 0, 0x6765, 0x3F27, 0, 0, 0, 0x3170, 0x6766, /* 0x70 */
+ 0x6767, 0, 0, 0, 0, 0, 0x6768, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x3072, 0, 0x6769, 0, 0, /* 0x80 */
+ 0, 0, 0x676A, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x4967, 0, 0, 0, 0x3C47, 0, 0x676C, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x3329, 0x3032, 0, /* 0xA0 */
+ 0, 0, 0, 0x676B, 0x676E, 0x474E, 0, 0x3F44, /* 0xA0 */
+ 0, 0x3256, 0, 0x4B27, 0, 0, 0, 0, /* 0xB0 */
+ 0x375D, 0x365C, 0, 0x676D, 0, 0x326A, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x3423, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x3171, 0x6772, 0x4E6A, 0x425D, 0, 0, 0x4944, /* 0xD0 */
+ 0, 0x677E, 0, 0x3257, 0x677C, 0, 0x677A, 0x6771, /* 0xD0 */
+ 0, 0x676F, 0, 0x6770, 0, 0x3C63, 0x366C, 0x4377, /* 0xE0 */
+ 0, 0, 0, 0x4651, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x3151, 0, 0x6774, 0x6773, 0, 0, 0, /* 0xF0 */
+ 0, 0x6779, 0x6775, 0x6778 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4C50, 0x6777, 0x3258, 0x337D, 0x677B, 0, /* 0x00 */
+ 0, 0x677D, 0, 0, 0, 0, 0x3754, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x6823, 0x682C, /* 0x10 */
+ 0x682D, 0, 0, 0, 0x302B, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x6834, 0, 0, 0, 0, /* 0x20 */
+ 0x3071, 0, 0, 0x682B, 0, 0, 0, 0x682A, /* 0x20 */
+ 0, 0x6825, 0x6824, 0, 0x6822, 0x6821, 0x4363, 0, /* 0x30 */
+ 0x427B, 0x6827, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x6826, 0, 0, 0, 0, 0x6829, 0, 0, /* 0x40 */
+ 0, 0x4170, 0x3755, 0, 0, 0, 0, 0x3141, /* 0x40 */
+ 0x6828, 0, 0x3953, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x4171, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x683A, 0, 0x683B, 0, 0x3259, /* 0x70 */
+ 0, 0, 0, 0x322E, 0x6838, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x682E, 0, 0x6836, /* 0x80 */
+ 0, 0x683D, 0x6837, 0, 0, 0, 0x6835, 0, /* 0x80 */
+ 0, 0, 0, 0x6776, 0, 0, 0x6833, 0, /* 0x90 */
+ 0, 0, 0x682F, 0, 0, 0, 0x3450, 0x6831, /* 0x90 */
+ 0x683C, 0, 0x6832, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x683E, 0, 0x6830, 0x477C, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x4D69, 0, 0, 0, 0x6839, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x684F, 0, 0, /* 0xB0 */
+ 0, 0x6847, 0, 0, 0, 0x3F7B, 0, 0, /* 0xC0 */
+ 0, 0, 0x3546, 0, 0x365D, 0, 0x6842, 0, /* 0xC0 */
+ 0, 0, 0, 0x325B, 0, 0, 0x3E54, 0, /* 0xD0 */
+ 0x6845, 0, 0, 0, 0x3A5A, 0, 0, 0x4551, /* 0xD0 */
+ 0x684A, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x4A6E, 0, 0x6841, 0, 0, 0, 0x325A, /* 0xE0 */
+ 0x3856, 0x4929, 0x684B, 0, 0x683F, 0, 0, 0x6848, /* 0xF0 */
+ 0, 0, 0, 0x6852, 0, 0x6843 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6844, 0x463A, 0, 0, 0x6849, /* 0x00 */
+ 0, 0, 0, 0x6846, 0x4B28, 0x684C, 0x3060, 0, /* 0x00 */
+ 0, 0, 0, 0x6840, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x684E, 0, 0x684D, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x476B, 0x6854, 0, 0x685F, 0, 0, 0, /* 0x20 */
+ 0, 0x337E, 0, 0, 0, 0x6862, 0, 0, /* 0x30 */
+ 0x6850, 0, 0, 0, 0x6855, 0x4D6E, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x685E, 0, /* 0x40 */
+ 0, 0x4D55, 0, 0, 0, 0, 0x4E2A, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4378, /* 0x50 */
+ 0, 0, 0, 0x336B, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x4972, 0x6864, 0x4621, 0, 0, 0x3031, 0, /* 0x60 */
+ 0, 0x685D, 0, 0x6859, 0x4172, 0x6853, 0x685B, 0x6860, /* 0x60 */
+ 0, 0x472C, 0, 0, 0, 0x302A, 0, 0x6858, /* 0x70 */
+ 0, 0x6861, 0x4978, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x685C, 0, 0x6857, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x3E55, 0, 0, 0, 0, /* 0x80 */
+ 0x3D2F, 0, 0, 0, 0x3C2C, 0, 0, 0, /* 0x90 */
+ 0, 0x4C58, 0, 0, 0x4947, 0, 0, 0x6867, /* 0x90 */
+ 0, 0x6870, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x685A, 0, 0, /* 0xA0 */
+ 0, 0, 0x3377, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x3E78, 0x6865, 0, 0x686A, 0x4173, 0, 0, 0x6866, /* 0xB0 */
+ 0, 0x686D, 0, 0, 0x435F, 0, 0x686E, 0, /* 0xC0 */
+ 0, 0x4D56, 0x6863, 0x3338, 0, 0x6869, 0, 0, /* 0xC0 */
+ 0x686C, 0x4C2C, 0, 0, 0, 0, 0x686F, 0, /* 0xD0 */
+ 0, 0x6868, 0x686B, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x4B29, 0, 0x4F21, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x6873, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x687A, 0, 0, 0x6872 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3C43, 0, 0, 0, 0, 0, 0x6851, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x4A4E, 0, 0x4C22, 0x6879, 0x6878, 0, 0x6874, /* 0x10 */
+ 0x6875, 0, 0x3136, 0, 0, 0, 0, 0x6877, /* 0x10 */
+ 0, 0x6871, 0, 0, 0, 0, 0x4455, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x6876, 0x307E, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x4222, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x4A43, 0, 0, /* 0x30 */
+ 0x687B, 0x6921, 0, 0x4859, 0, 0, 0, 0, /* 0x40 */
+ 0x687E, 0x3E56, 0x3C49, 0x6923, 0, 0, 0x363E, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x6924, 0, 0x4979, /* 0x50 */
+ 0x687D, 0, 0x6856, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x687C, 0, 0, 0, 0, /* 0x60 */
+ 0x4F4F, 0x4622, 0x4973, 0, 0, 0x692B, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6931, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x6932, 0, /* 0x70 */
+ 0x6925, 0, 0, 0, 0x4776, 0, 0, 0x692F, /* 0x80 */
+ 0x6927, 0, 0x6929, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x6933, 0x6928, 0, 0, 0x692C, 0, 0, 0x3172, /* 0x90 */
+ 0, 0x4665, 0, 0x692D, 0x6930, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x6926, 0, 0x4126, 0, /* 0xA0 */
+ 0x692A, 0x3B27, 0x3F45, 0x3730, 0x4C74, 0, 0x4C79, 0x3D72, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x6937, 0x6935, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x4F4E, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x6934, 0, 0, 0, 0x4D75, 0, 0x6936, /* 0xC0 */
+ 0x6938, 0, 0, 0, 0, 0x6939, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x693C, 0x693A, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x4623, 0x693B, 0, 0, /* 0xE0 */
+ 0, 0x484D, 0x692E, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3D73, /* 0xF0 */
+ 0, 0x693D, 0x6942, 0x4174, 0, 0, 0x6941 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6922, 0, 0, 0, 0x6943, 0x4149, /* 0x00 */
+ 0, 0, 0x693E, 0x6940, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x693F, 0, 0, 0x5D31, 0x5D22, /* 0x10 */
+ 0, 0, 0x6945, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x6944, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x4D76, 0, 0x623C, /* 0x20 */
+ 0x6946, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6947, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x6948, 0x3857, 0, /* 0x40 */
+ 0x3554, 0, 0, 0, 0x694A, 0x515D, 0, 0, /* 0x50 */
+ 0, 0, 0x3575, 0, 0x4E3A, 0, 0x3673, 0x694B, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x694C, /* 0x60 */
+ 0, 0, 0, 0x436E, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x694D, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x467A, 0, 0x303A, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x3263, 0x6952, 0x6953, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x694E, 0, 0x3B3D, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x694F, 0x4742, 0, 0, 0, /* 0xA0 */
+ 0, 0x6950, 0x6951, 0x695B, 0, 0, 0, 0x6955, /* 0xA0 */
+ 0x6958, 0, 0, 0, 0, 0, 0x6954, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x6956, 0, 0x6957, 0x3C58, /* 0xC0 */
+ 0, 0x6959, 0, 0x4341, 0, 0x3756, 0x3342, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x695C, 0, 0, 0, /* 0xD0 */
+ 0, 0x333F, 0, 0x6961, 0, 0, 0x695D, 0x6960, /* 0xD0 */
+ 0, 0, 0, 0, 0x483A, 0, 0, 0, /* 0xE0 */
+ 0, 0x695E, 0, 0, 0x695F, 0x4948, 0x485A, 0x6962, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x427D, 0x696C, 0, 0x6968, 0, 0, 0x326B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6966, 0, 0x4B2A, 0x6967, 0, 0, 0x6964, 0, /* 0x00 */
+ 0x6965, 0x696A, 0x696D, 0, 0, 0x696B, 0, 0, /* 0x00 */
+ 0, 0x6969, 0x6963, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x4358, 0, 0x6974, 0, 0x4C2A, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x6972, 0, 0, /* 0x20 */
+ 0, 0x6973, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x696E, 0, 0, 0x6970, /* 0x30 */
+ 0, 0, 0, 0x6971, 0, 0, 0, 0x696F, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x4066, 0, 0x4F39, 0x6978, 0, 0x6979, 0, /* 0x40 */
+ 0, 0, 0, 0x6A21, 0, 0x3F2A, 0, 0x697B, /* 0x50 */
+ 0, 0x697E, 0, 0, 0, 0, 0, 0x6976, /* 0x50 */
+ 0x6975, 0, 0, 0x6A22, 0, 0, 0x325C, 0, /* 0x60 */
+ 0x697C, 0, 0x6A23, 0, 0, 0, 0x697D, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x697A, 0, 0x4433, 0, /* 0x70 */
+ 0x6977, 0, 0, 0, 0, 0, 0, 0x4768, /* 0x70 */
+ 0, 0, 0x6A27, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x4D3B, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6A26, /* 0x90 */
+ 0, 0, 0x6A25, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x6A2E, 0, 0, 0, 0x6A28, /* 0xA0 */
+ 0, 0, 0, 0x6A30, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x4D66, 0x6A33, 0, 0x6A2A, 0, 0, /* 0xB0 */
+ 0x6A2B, 0, 0, 0, 0x6A2F, 0, 0x6A32, 0x6A31, /* 0xC0 */
+ 0, 0, 0, 0x6A29, 0, 0, 0, 0, /* 0xC0 */
+ 0x6A2C, 0, 0x6A3D, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x6A36, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6A34, /* 0xE0 */
+ 0, 0, 0x6A35, 0, 0, 0, 0x6A3A, 0x6A3B, /* 0xF0 */
+ 0, 0x332A, 0, 0x3542, 0, 0, 0x6A39 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A24, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x6A38, 0x6A3C, 0x6A37, /* 0x00 */
+ 0, 0x6A3E, 0, 0, 0, 0x6A40, 0x6A3F, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x6A42, 0x6A41, 0x695A, 0, 0, 0, 0x6A46, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x6A43, 0, 0, 0, 0, 0x6A44, 0, /* 0x30 */
+ 0, 0x6A45, 0, 0x6A47, 0, 0, 0, 0, /* 0x30 */
+ 0x376C, 0, 0x6A49, 0, 0x6A48, 0, 0x3D30, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x3954, 0x5E27, 0, 0, /* 0x40 */
+ 0, 0, 0x6A4A, 0x3D51, 0, 0, 0, 0x3339, /* 0x50 */
+ 0, 0x6A4B, 0, 0x3152, 0, 0x3E57, 0x6A4C, 0, /* 0x50 */
+ 0, 0x3955, 0x6A4D, 0x3061, 0, 0, 0, 0, /* 0x60 */
+ 0x493D, 0, 0, 0x6A4E, 0, 0, 0, 0, /* 0x60 */
+ 0x3F6A, 0, 0x6A55, 0, 0, 0x6A52, 0, 0x436F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x6A53, 0x6A50, 0x365E, /* 0x70 */
+ 0, 0x6A4F, 0x6A56, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x3736, 0, 0, 0x425E, 0, 0x6A5C, 0, 0, /* 0x80 */
+ 0, 0, 0x6A58, 0, 0, 0, 0x4235, 0x6A57, /* 0x90 */
+ 0, 0x6A5A, 0, 0, 0, 0, 0x6A51, 0, /* 0x90 */
+ 0, 0, 0x6A5B, 0, 0x6A5D, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x486F, 0, 0, 0x6A59, 0, /* 0xA0 */
+ 0x6A5E, 0x6A60, 0, 0, 0x3853, 0x6A54, 0, 0x3041, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6A5F, /* 0xB0 */
+ 0, 0x3A5B, 0x4E76, 0x6A61, 0x6A62, 0x4175, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4E22, /* 0xC0 */
+ 0, 0, 0, 0, 0x6A63, 0x4D35, 0, 0, /* 0xD0 */
+ 0x6A64, 0x6A65, 0, 0, 0x4A64, 0x6A66, 0, 0x3A40, /* 0xD0 */
+ 0, 0x4E23, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x6A6B, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x6A6C, 0x3E58, 0x6A6A, 0, 0, 0, /* 0xF0 */
+ 0x4D67, 0x6A67, 0, 0, 0x6A69, 0x403D, 0x3F7E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A68, 0, 0x6A6D, 0, 0, 0x4A23, /* 0x00 */
+ 0, 0, 0x6A6F, 0, 0x6A6E, 0, 0, 0, /* 0x00 */
+ 0x336C, 0, 0x4B2B, 0x6A70, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x6A7C, 0x6A72, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x6A73, 0, 0, /* 0x20 */
+ 0, 0, 0x6A74, 0x6A75, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x6A79, 0, /* 0x30 */
+ 0x6A7A, 0, 0, 0x6A78, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x6A76, 0, 0x6A71, 0x6A77, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x6A7B, 0x7037, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x3228, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x6A7E, 0x365F, /* 0x50 */
+ 0x6A7D, 0, 0, 0, 0x6B22, 0, 0x6B21, 0, /* 0x60 */
+ 0, 0, 0x6B24, 0, 0, 0x6B23, 0, 0x6B25, /* 0x60 */
+ 0, 0, 0x3D31, 0, 0x6B26, 0, 0, 0x6B27, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x6B28, 0x403E, /* 0x70 */
+ 0, 0x4D57, 0, 0x6B29, 0, 0, 0x4A24, 0x4746, /* 0x80 */
+ 0x6B2A, 0, 0x6B2B, 0x382B, 0, 0, 0, 0x352C, /* 0x80 */
+ 0, 0, 0, 0x6B2C, 0, 0, 0x3B6B, 0x4741, /* 0x90 */
+ 0x6B2D, 0, 0x3350, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6B2E, 0, 0, 0, 0, 0x6B30, 0x4D77, /* 0xA0 */
+ 0, 0x6B2F, 0x3F46, 0, 0x6B31, 0, 0, 0x6B32, /* 0xA0 */
+ 0, 0, 0x6B33, 0x3451, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x6B34, 0, 0, 0x6B35, 0, 0x6B36, /* 0xB0 */
+ 0x6B37, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x3351, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x6B38, 0, 0x6B39, 0x6B3A, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x3272, 0, 0, 0x3F28, 0x6B3B, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x6B3C, 0, 0, 0, /* 0xF0 */
+ 0x6B3D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3840, 0, 0x447B, 0x6B3E, 0, 0, 0, 0, /* 0x00 */
+ 0x3757, 0, 0x3F56, 0, 0x6B41, 0, 0x4624, 0, /* 0x00 */
+ 0x6B40, 0, 0, 0x3731, 0, 0, 0x6B3F, 0x4277, /* 0x10 */
+ 0x352D, 0, 0, 0x6B42, 0, 0x6B43, 0, 0x3E59, /* 0x10 */
+ 0, 0, 0, 0x376D, 0, 0x6B44, 0, 0, /* 0x20 */
+ 0, 0, 0x4B2C, 0, 0, 0x405F, 0, 0, /* 0x20 */
+ 0, 0x3576, 0, 0x4C75, 0x414A, 0, 0x6B45, 0, /* 0x30 */
+ 0, 0, 0x3F47, 0x4370, 0x3E5A, 0, 0, 0, /* 0x30 */
+ 0, 0x6B46, 0, 0, 0, 0, 0x6B49, 0, /* 0x40 */
+ 0x6B4A, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x3A3E, 0x4242, 0x6B48, 0, 0x3E5B, 0x493E, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x6B47, 0, 0, 0x3B6C, 0, /* 0x50 */
+ 0x3153, 0, 0x6B4E, 0x3758, 0, 0, 0x3B6E, 0, /* 0x60 */
+ 0, 0x3B6D, 0, 0x4F4D, 0x6B4D, 0x6B4C, 0x4127, 0, /* 0x60 */
+ 0x354D, 0x4F43, 0x333A, 0x3E5C, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x6B4B, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x6B50, 0, 0x6B51, 0x6B4F, 0, 0x3858, /* 0x80 */
+ 0, 0x4D40, 0, 0, 0x3B6F, 0x4727, 0, 0, /* 0x80 */
+ 0, 0x6B54, 0, 0x4040, 0, 0x4342, 0, 0, /* 0x90 */
+ 0x4D36, 0, 0x6B57, 0, 0, 0, 0x386C, 0, /* 0x90 */
+ 0x403F, 0x6B53, 0, 0x6B58, 0x386D, 0x6B55, 0x6B56, 0, /* 0xA0 */
+ 0x6B52, 0, 0, 0, 0x4062, 0x4649, 0, 0, /* 0xA0 */
+ 0x432F, 0, 0x325D, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x4870, 0, 0, 0x3543, 0, 0, 0x4434, /* 0xB0 */
+ 0, 0, 0x6B5B, 0, 0x6B59, 0, 0, 0x434C, /* 0xC0 */
+ 0, 0, 0, 0x4041, 0x3452, 0x6B5A, 0, 0x3F5B, /* 0xC0 */
+ 0, 0, 0x4E4A, 0, 0, 0, 0x4F40, 0, /* 0xD0 */
+ 0, 0, 0x6B5C, 0x6B67, 0x4435, 0, 0x6B66, 0, /* 0xD0 */
+ 0x6B63, 0x6B6B, 0x6B64, 0, 0x6B60, 0, 0x447C, 0x6B5F, /* 0xE0 */
+ 0, 0, 0, 0x6B5D, 0, 0x4D21, 0x3B70, 0, /* 0xE0 */
+ 0, 0x6B61, 0, 0x6B5E, 0, 0, 0, 0x6B65, /* 0xF0 */
+ 0x3D74, 0, 0x3841, 0, 0, 0, 0x427A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4B45, 0x315A, 0x3062, 0, 0x4625, 0, 0, 0x6B69, /* 0x00 */
+ 0, 0, 0, 0, 0x6B68, 0, 0x4666, 0, /* 0x00 */
+ 0x6B6D, 0, 0, 0, 0x6B62, 0, 0x6B6C, 0x6B6E, /* 0x10 */
+ 0, 0x382C, 0x6B6A, 0x3956, 0, 0x3C55, 0, 0, /* 0x10 */
+ 0x6B6F, 0x4D58, 0, 0, 0, 0, 0x6B72, 0, /* 0x20 */
+ 0x6B75, 0, 0, 0x6B73, 0x4935, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x6B70, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x3660, 0, 0, 0, 0, 0x6B74, 0, /* 0x30 */
+ 0, 0x6B76, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x6B7A, 0, 0, 0x6B77, 0, 0x6B79, 0x6B78, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x6B7B, 0, /* 0x50 */
+ 0x3C31, 0, 0x6B7D, 0x6B7C, 0x4968, 0, 0, 0x6C21, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x3759, 0, /* 0x60 */
+ 0, 0, 0, 0x6B7E, 0x6C22, 0, 0, 0x6C23, /* 0x60 */
+ 0x3544, 0x6641, 0x3E79, 0, 0x6C24, 0, 0, 0x386E, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x6C25, 0, 0, /* 0x70 */
+ 0x6C26, 0, 0, 0x3B3E, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x5A4E, 0, 0x6C27, 0, 0x6C28, 0, /* 0x80 */
+ 0x3D32, 0, 0x6C29, 0x6C2A, 0, 0, 0x6C2B, 0, /* 0x90 */
+ 0, 0x6C2C, 0x6C2D /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x432B, /* 0x30 */
+ 0, 0, 0x6C2E, 0, 0, 0, 0, 0x6C30, /* 0x30 */
+ 0, 0x6C2F, 0, 0, 0, 0, 0x4626, 0, /* 0x40 */
+ 0x6C31, 0, 0x4B2D, 0, 0x6C32, 0, 0x6C33, 0, /* 0x40 */
+ 0x6C34, 0, 0, 0, 0, 0x6C35, 0, 0, /* 0x50 */
+ 0, 0, 0x465A, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x3E5D, 0x6C36, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x396B, 0x502E, 0x6C37, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x6C38, 0x493F, 0x6C39, 0, 0x6C41, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x6C3A, 0, 0, 0x6C3C, 0, 0, /* 0x80 */
+ 0, 0x6C3B, 0x6C3D, 0, 0x4B46, 0x6C3E, 0x6C3F, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x6C40, 0, 0, 0, /* 0x90 */
+ 0x6C42, 0, 0, 0, 0, 0x332D, 0x4467, 0, /* 0x90 */
+ 0x4969, 0x3A62, 0x3957, 0, 0, 0, 0, 0x494F, /* 0xA0 */
+ 0x325F, 0x484E, 0x6C45, 0x3453, 0x4055, 0x6C44, 0x6C49, 0x4379, /* 0xA0 */
+ 0x4C63, 0, 0x6C47, 0x6C48, 0x352E, 0, 0x6C4A, 0x4763, /* 0xB0 */
+ 0x425F, 0, 0, 0x4871, 0x453D, 0x6C46, 0, 0x4B47, /* 0xB0 */
+ 0x326C, 0x6C4C, 0x4F28, 0x4442, 0x4F45, 0, 0, 0x3B71, /* 0xC0 */
+ 0x6C4B, 0, 0x4231, 0, 0, 0x6C5C, 0x4128, 0, /* 0xC0 */
+ 0, 0x4678, 0, 0x4950, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x6C4F, 0x3B3F, 0x3B72, 0, 0x3E5E, 0, /* 0xD0 */
+ 0x4765, 0, 0x382D, 0x6C4E, 0x6C4D, 0, 0x496A, 0, /* 0xE0 */
+ 0, 0, 0x3C41, 0, 0, 0x4552, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x6C51, 0x6C52, 0x3958, 0x6C50 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6C53, 0x6C54, 0, 0x6C56, /* 0x00 */
+ 0x4223, 0, 0x6C55, 0x3466, 0, 0x6C58, 0, 0x6C57, /* 0x00 */
+ 0x6C59, 0, 0, 0x6C5B, 0x6C5D, 0, 0x6C5E, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x4056, 0, 0x3C4F, 0x6C5F, /* 0x60 */
+ 0, 0, 0, 0x3352, 0, 0x6C60, 0, 0, /* 0x60 */
+ 0x4176, 0x6C61, 0, 0x6C62, 0x496B, 0, 0, 0x352F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x6C63, 0, 0, 0, 0x4436, 0, 0, /* 0x80 */
+ 0, 0, 0x315B, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6C64, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x3C71, 0, 0, 0, 0, /* 0xA0 */
+ 0x3F76, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x422D, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x6C67, 0, 0, 0, 0x6C66, 0, /* 0xB0 */
+ 0, 0, 0x6C65, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x6C6D, 0x6C6B, 0, 0, 0x6C68, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x6C6A, 0, /* 0xD0 */
+ 0, 0, 0x6C69, 0x6C6C, 0, 0x3577, 0, 0x6C70, /* 0xD0 */
+ 0, 0x4057, 0, 0x6C71, 0, 0, 0, 0, /* 0xE0 */
+ 0x3859, 0, 0x6C6E, 0x6C6F, 0, 0, 0, 0x4F29, /* 0xE0 */
+ 0, 0, 0, 0x4437, 0, 0x4129, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x6C72, 0, 0, 0x6C75 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x6C73, 0x6C74, 0x4D59, 0, 0, 0, 0, 0x4627, /* 0x00 */
+ 0x6C78, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x6C76, 0x6C77, 0x6C79, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x6D29, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x6C7C, 0, 0, 0, 0x6C7D, 0x6C7B, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x6C7A, 0, 0x447D, 0, 0, 0x6D21, /* 0x40 */
+ 0x6D25, 0x6D22, 0x6C7E, 0, 0x6D23, 0, 0, 0, /* 0x40 */
+ 0x6D24, 0, 0, 0, 0, 0x6D2B, 0, 0, /* 0x50 */
+ 0, 0x6D26, 0, 0, 0, 0, 0, 0x4058, /* 0x50 */
+ 0x6D28, 0, 0, 0x6D2A, 0x6D27, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x6D2D, 0, 0x3D33, 0, 0x6D2C, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x6D2E, 0, 0, 0, /* 0x70 */
+ 0, 0x6D2F, 0, 0, 0x6D32, 0x6D31, 0, 0x6D30, /* 0x80 */
+ 0, 0, 0x6D34, 0x6D33, 0, 0x4C76, 0, 0, /* 0x80 */
+ 0, 0x6D36, 0, 0x6D35, 0x6D37, 0, 0, 0, /* 0x90 */
+ 0, 0x6D38, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6D3A, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x6D39, 0x3F48, 0x6D3B, 0, 0, 0x366D, /* 0xA0 */
+ 0x6D3C, 0x6D3E, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x6D3F, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x6D40, 0x6D3D, 0, /* 0xC0 */
+ 0x6D41, 0, 0x3C56, 0x6D42, 0x3530, 0x3733, 0, 0, /* 0xC0 */
+ 0, 0, 0x382E, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x6D43, 0, 0, 0, 0x4670, /* 0xD0 */
+ 0, 0, 0x453E, 0x6D44, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x6D47, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x3C34, 0, 0, 0x6D46, 0x6D45, 0x375A, 0x6D48 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3353, 0, 0x6D4A, 0, 0, /* 0x00 */
+ 0, 0x3A5C, 0x6D49, 0, 0x6D52, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x6D4C, 0x6D4E, 0x4A65, 0x6D4B, 0, 0, /* 0x10 */
+ 0, 0x6D4D, 0, 0x6D51, 0x6D4F, 0x3531, 0, 0x6D50, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x6D53, 0, /* 0x20 */
+ 0, 0x475A, 0x4E58, 0, 0, 0, 0, 0x3D34, /* 0x20 */
+ 0, 0, 0, 0x6D54, 0, 0, 0, 0, /* 0x30 */
+ 0x4D22, 0x6D56, 0, 0x6D55, 0, 0, 0x6D59, 0x4D41, /* 0x30 */
+ 0, 0, 0x6D58, 0, 0x336D, 0x6D57, 0x6D5C, 0, /* 0x40 */
+ 0, 0x6D5B, 0, 0, 0x6D5A, 0x4532, 0x6D5D, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6D5E, /* 0x50 */
+ 0, 0, 0, 0, 0x6D5F, 0, 0, 0x396C, /* 0x50 */
+ 0, 0x3725, 0x6D60, 0x6D61, 0x6D62, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x3F49, 0x6D63, 0, 0x3C2D, 0x6D64, /* 0x90 */
+ 0, 0, 0, 0x6D65, 0, 0, 0, 0x5221, /* 0xA0 */
+ 0x517E, 0, 0, 0, 0, 0x6D66, 0x6570, 0x6D67, /* 0xA0 */
+ 0x4324, 0x3F2B, 0x4740, 0, 0, 0, 0, 0x6D68, /* 0xB0 */
+ 0, 0, 0x4A55, 0x4454, 0x397E, 0, 0, 0x4329, /* 0xB0 */
+ 0, 0, 0x312A, 0, 0x4B78, 0x3F57, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x375E, 0, /* 0xC0 */
+ 0, 0x3661, 0, 0, 0x4A56, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x6D69, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x6D6B, 0, 0, 0x6D6A, 0x3260, 0, /* 0xE0 */
+ 0, 0x4676, 0x6D6C, 0x4777, 0, 0x4533, 0, 0x6D6D, /* 0xE0 */
+ 0x3D52, 0, 0, 0, 0x6D6F, 0, 0, 0x4C42, /* 0xF0 */
+ 0x6D7E, 0x6D71, 0x6D72, 0, 0, 0x4449 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4260, 0x4177, 0, 0x4628, 0, 0x6D70, 0x3555, 0, /* 0x00 */
+ 0, 0, 0, 0x6D79, 0, 0x6D76, 0x6E25, 0x4629, /* 0x00 */
+ 0x4360, 0x6D73, 0, 0x447E, 0x4553, 0x6D74, 0x6D78, 0x3F60, /* 0x10 */
+ 0, 0x4767, 0x444C, 0, 0, 0x4042, 0x6D77, 0x422E, /* 0x10 */
+ 0x4224, 0x6D75, 0x3029, 0x4F22, 0, 0, 0, 0x6D7A, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x4261, 0, /* 0x20 */
+ 0, 0x3D35, 0x3F4A, 0, 0, 0x6D7C, 0x6D7B, 0, /* 0x30 */
+ 0x306F, 0x6D7D, 0, 0, 0x492F, 0, 0x6E27, 0, /* 0x30 */
+ 0, 0x465B, 0x3F6B, 0, 0, 0x4359, 0, 0x3678, /* 0x40 */
+ 0, 0x6E26, 0x4D37, 0x313F, 0, 0x4A57, 0x3261, 0x6E21, /* 0x40 */
+ 0x6E22, 0x6E23, 0x6E24, 0x463B, 0x4323, 0x3063, 0x6E28, 0, /* 0x50 */
+ 0x6E29, 0x7423, 0, 0, 0x423D, 0, 0x6E2A, 0, /* 0x50 */
+ 0x3173, 0x414C, 0, 0x382F, 0, 0x4D5A, 0, 0, /* 0x60 */
+ 0x6E2B, 0x452C, 0, 0, 0, 0x4178, 0x3C57, 0x6E2C, /* 0x60 */
+ 0, 0, 0x6E2F, 0, 0, 0x3D65, 0x6E2D, 0x412B, /* 0x70 */
+ 0x412A, 0, 0x3064, 0, 0x4E4B, 0x6E31, 0, 0x4872, /* 0x70 */
+ 0x6E33, 0x6E32, 0x6E30, 0x6364, 0x3454, 0, 0, 0x6D6E, /* 0x80 */
+ 0, 0x6E35, 0x6E34, 0, 0, 0, 0, 0x6E36, /* 0x80 */
+ 0, 0x4D38, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x4661, 0, 0, 0x4B2E, 0, /* 0xA0 */
+ 0x6E37, 0, 0x3C59, 0, 0, 0, 0, 0x6E38, /* 0xA0 */
+ 0, 0x6E39, 0, 0, 0, 0x6E3A, 0, 0, /* 0xB0 */
+ 0x4521, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x306A, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x3959, 0, 0, 0, 0x4F3A, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x6E3E, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x3734, 0x6E3B, 0, 0x6E3C, 0, 0, 0, /* 0xE0 */
+ 0x4974, 0, 0, 0, 0, 0x3354, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x4D39, 0, 0x363F, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0x4554 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6E3F, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x6E40, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x6E41, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x4522, 0, 0, /* 0x20 */
+ 0x6E43, 0, 0x6E42, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x4653, 0x6E44, 0x3D36, 0x3C60, 0x475B, 0x4371, 0, /* 0x40 */
+ 0, 0, 0x3C72, 0, 0x3F6C, 0, 0x6E45, 0, /* 0x50 */
+ 0x6E46, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x3F5D, 0x6E47, 0, 0x6E48, 0, 0, /* 0x60 */
+ 0, 0x6E49, 0x4D6F, 0, 0x3D37, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x6E4B, 0x6E4A, 0, 0x395A, 0, 0x3973, /* 0x70 */
+ 0x3B40, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x6E4E, 0, 0, 0, 0, 0x3D66, /* 0x80 */
+ 0, 0x6E4D, 0, 0x6E4C, 0, 0x4269, 0, 0, /* 0x80 */
+ 0x386F, 0, 0x4043, 0, 0, 0, 0, 0x4830, /* 0x90 */
+ 0, 0, 0, 0, 0x3D39, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x6E4F, 0, 0x3E5F, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x6E52, 0x6E50, 0, 0, 0, 0x6E51, /* 0xA0 */
+ 0, 0, 0, 0, 0x6E54, 0x6E53, 0, 0, /* 0xB0 */
+ 0x3E7A, 0, 0x6E55, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x6E56, 0x6E57, 0, 0, 0, 0, 0x4850, 0x3A53, /* 0xC0 */
+ 0x3C61, 0x6E58, 0, 0x6E59, 0x4E24, 0x3D45, 0x4C6E, 0x4E4C, /* 0xC0 */
+ 0x6E5A, 0x3662, 0, 0, 0, 0, 0x6E5B, 0, /* 0xD0 */
+ 0x4523, 0, 0, 0x6E5E, 0x3378, 0x3F4B, 0, 0x6E5C, /* 0xD0 */
+ 0, 0x6E5D, 0, 0x4460, 0, 0, 0x4B55, 0x367C, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x6E60, 0x6E61, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x6E5F, 0, 0, 0x6E63 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x465F, 0x3343, 0, /* 0x00 */
+ 0, 0x6E67, 0, 0, 0x6E64, 0x6E66, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x6E62, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x6F4F, 0, 0, 0x6E65, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x4E6B, 0, 0, 0x385A, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6E6F, /* 0x30 */
+ 0, 0, 0, 0, 0x4534, 0x6E6A, 0, 0, /* 0x40 */
+ 0x6E6D, 0x6E6B, 0, 0x6E70, 0, 0, 0, 0, /* 0x40 */
+ 0x6E71, 0, 0, 0, 0, 0, 0, 0x6E69, /* 0x50 */
+ 0, 0, 0x6E76, 0x3174, 0, 0, 0x6E68, 0, /* 0x50 */
+ 0, 0, 0x482D, 0, 0x6E6C, 0, 0x3E60, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x395B, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x4B48, 0, /* 0x70 */
+ 0x3664, 0, 0, 0x3D46, 0, 0x463C, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x412D, 0, 0x6E74, 0, 0x6E6E, 0x6E73, 0, /* 0x90 */
+ 0x4C43, 0, 0x4438, 0x6E75, 0x6E72, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x412C, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6E79, /* 0xB0 */
+ 0, 0x6E78, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6E77, /* 0xC0 */
+ 0, 0, 0x4B2F, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x3D7B, 0, 0, 0, /* 0xE0 */
+ 0, 0x6E7A, 0x4A5F, 0, 0, 0x3154, 0, 0, /* 0xE0 */
+ 0, 0, 0x4946, 0x4372, 0, 0, 0, 0, /* 0xF0 */
+ 0x3578, 0, 0x6E7C, 0, 0x395D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3B2C, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6E7B, /* 0x00 */
+ 0x3F6D, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x3F6E, 0x6F21, 0x6F23, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x3E7B, 0, 0x6F22, 0x6F24, 0, 0, 0x3653, 0, /* 0x20 */
+ 0x4945, 0, 0, 0x3C62, 0x4F23, 0, 0x6E7E, 0x3A78, /* 0x20 */
+ 0, 0, 0x4F3F, 0, 0, 0x6F26, 0, 0, /* 0x30 */
+ 0, 0, 0x6F25, 0x6F27, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x6E7D, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x4669, 0, 0x4555, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x4457, 0, 0x6F2C, 0, /* 0x50 */
+ 0, 0, 0, 0x4343, 0x6F28, 0, 0, 0, /* 0x50 */
+ 0x6F29, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x372D, 0, 0x6F2B, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x3830, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x6F2A, 0, 0x3E61, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x3379, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x6F30, 0, 0x3A3F, 0x4179, /* 0x90 */
+ 0, 0, 0x444A, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x333B, /* 0xA0 */
+ 0, 0, 0, 0, 0x6F2E, 0x6F2F, 0x4443, 0, /* 0xA0 */
+ 0x6F2D, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x6F31, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x6F37, 0, 0, 0, 0, /* 0xC0 */
+ 0x6F3A, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x6F39, 0x452D, 0, 0, 0, 0, 0x6F32, 0x6F33, /* 0xD0 */
+ 0x6F36, 0, 0, 0, 0, 0x6F38, 0, 0, /* 0xD0 */
+ 0, 0x3640, 0, 0, 0x6F3B, 0x6F35, 0, 0, /* 0xE0 */
+ 0x6F34 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6F3F, 0, 0, 0, 0x6F40, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x6F41, 0, 0, 0x6F3E, 0x6F3D, 0, 0, 0, /* 0x10 */
+ 0x3E62, 0x462A, 0x6F3C, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x6F45, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x6F43, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x6F44, 0x6F42, 0, /* 0x30 */
+ 0x4278, 0, 0x6F46, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x6F47, 0, 0, 0x6F49, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x3455, 0x6F48, 0x4C7A, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x6F54, 0x6F4A, 0, 0, 0x6F4D, 0, /* 0x50 */
+ 0x6F4B, 0, 0x6F4C, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x6F4E, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x6F50, 0, 0, 0, 0, 0x6F51, 0, 0x6F52, /* 0x70 */
+ 0, 0, 0, 0, 0x6F55, 0x6F53, 0x6F56, 0x6F58, /* 0x70 */
+ 0, 0x6F57 /* 0x80 */
+ /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4439, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x4C67, 0, 0x6F59, 0x412E, 0, 0, 0, 0x6F5A, /* 0x80 */
+ 0, 0x4A44, 0x6F5B, 0x332B, 0, 0, 0, 0x313C, /* 0x80 */
+ 0, 0x3457, 0, 0x3456, 0x6F5C, 0, 0x6F5D, 0, /* 0x90 */
+ 0x6F5E, 0x6F5F, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x6F60, 0, 0x3458, 0x3355, 0x395E, 0x4836, 0, 0x6F62, /* 0xA0 */
+ 0x6F61, 0, 0, 0, 0, 0x6F63, 0, 0, /* 0xA0 */
+ 0, 0, 0x315C, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x6F66, 0, 0x6F65, 0x6F64, 0, 0x6F67, 0, /* 0xB0 */
+ 0, 0, 0, 0x6F6A, 0, 0, 0, 0x3047, /* 0xC0 */
+ 0, 0, 0x6F68, 0, 0x6F6C, 0x6F6B, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x6F6E, 0x6F6D, 0x6F6F, 0, /* 0xD0 */
+ 0x462E, 0, 0, 0, 0x6F70, 0, 0, 0, /* 0xD0 */
+ 0, 0x6F71, 0x6F73, 0, 0, 0x6F72 /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0x496C, 0, 0, 0, /* 0x10 */
+ 0, 0x6F74, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x6F75, 0, 0x3A65, 0, 0, 0, 0x6F76, 0x6F77, /* 0x20 */
+ 0, 0, 0x4B49, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x414B, 0, 0, 0, 0x3024, /* 0x30 */
+ 0x424B, 0, 0x6F78, 0, 0x496D, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x6F7B, 0x6F79, 0x395F, 0, 0x6F7A, /* 0x40 */
+ 0x3842, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x4A45, 0x6F7D, 0x7021, 0x6F7E, 0x7022, /* 0x50 */
+ 0, 0, 0x3121, 0x3F58, 0x3D7C, 0x3459, 0x7023, 0, /* 0x60 */
+ 0, 0, 0x4766, 0, 0x7025, 0, 0, 0, /* 0x60 */
+ 0x3122, 0, 0x7024, 0x4444, 0, 0x4E4D, 0x462B, 0x6F7C, /* 0x70 */
+ 0x4E26, 0, 0x3831, 0, 0, 0x4D5B, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x3679, 0x4E34, 0, /* 0x80 */
+ 0x3728, 0, 0x4262, 0x6721, 0, 0x7026, 0x332C, 0x3F6F, /* 0x80 */
+ 0, 0, 0, 0, 0x3356, 0x7028, 0, 0x7029, /* 0x90 */
+ 0x7027, 0x3764, 0, 0x3A5D, 0x3E63, 0, 0, 0, /* 0x90 */
+ 0x3123, 0, 0, 0x4E59, 0, 0, 0, 0x702B, /* 0xA0 */
+ 0x6E2E, 0, 0x702A, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x702E, 0x702C, 0x702D, 0, 0x702F, 0, 0x7030, 0x4E6C, /* 0xB0 */
+ 0x7031, 0x7032, 0, 0x4049, 0x483B, 0, 0, 0, /* 0xB0 */
+ 0x3F7D, 0x3467, 0, 0, 0x4D3A, 0x326D, 0x3D38, 0x385B, /* 0xC0 */
+ 0, 0x7035, 0, 0x7034, 0x3B73, 0x7036, 0x7033, 0, /* 0xC0 */
+ 0, 0x3B28, 0, 0, 0, 0x703A, 0x6A2D, 0, /* 0xD0 */
+ 0, 0x5256, 0, 0x3F77, 0x7038, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x4E25, 0x4671, 0, 0, 0, 0, /* 0xE0 */
+ 0x312B, 0, 0x4063, 0x3C36, 0, 0, 0, 0, /* 0xE0 */
+ 0x4A37, 0, 0x3140, 0, 0, 0, 0x4E6D, 0x4D6B, /* 0xF0 */
+ 0, 0x703B, 0, 0x4545 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3C7B, 0, 0, 0, 0x703C, 0, 0x703D, 0x3F4C, /* 0x00 */
+ 0x703E, 0, 0x4E6E, 0, 0, 0x7039, 0x7040, 0x7042, /* 0x00 */
+ 0, 0x7041, 0, 0x703F, 0, 0, 0x7043, 0, /* 0x10 */
+ 0, 0x7044, 0, 0, 0x417A, 0, 0x3262, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x7045, 0, 0, 0x4C38, /* 0x20 */
+ 0, 0, 0x7046, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x7047, 0, 0x4F2A, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x5B31, 0x7048, 0, 0, 0, 0x7049, 0x704A, 0, /* 0x30 */
+ 0, 0, 0x704E, 0, 0x704B, 0, 0x704C, 0, /* 0x40 */
+ 0x704D, 0x704F, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x4044, 0, 0, 0, 0x4C77, 0, /* 0x50 */
+ 0, 0x4045, 0, 0, 0x7050, 0, 0x4873, 0, /* 0x50 */
+ 0x7051, 0x7353, 0x4C4C, 0, 0x7052, 0, 0x7053, 0, /* 0x60 */
+ 0x7054, 0x3357, 0, 0x7056, 0, 0x3F59, 0, 0, /* 0x60 */
+ 0, 0x7057, 0, 0, 0x3724, 0, 0, 0, /* 0x70 */
+ 0, 0x7058, 0x705C, 0, 0x705A, 0, 0, 0, /* 0x70 */
+ 0, 0x705B, 0, 0, 0x3373, 0x7059, 0x705D, 0, /* 0x80 */
+ 0, 0, 0, 0x705E, 0, 0x3048, 0, 0x705F, /* 0x80 */
+ 0x7060, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x3E64, 0, 0, 0, 0x7061, 0, 0, 0, /* 0x90 */
+ 0x3547, 0, 0, 0x7064, 0, 0, 0x7063, 0, /* 0xA0 */
+ 0x7062, 0, 0, 0x6B71, 0, 0x4A5C, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x7065, 0x7066, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x7067, 0, 0, 0x7068, 0, /* 0xC0 */
+ 0x7069, 0, 0, 0x706A, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x345A, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x706B, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x706C, 0x4723, 0, /* 0xE0 */
+ 0, 0, 0x706E, 0x323B, 0, 0x7071, 0x7070, 0, /* 0xF0 */
+ 0, 0, 0, 0x3124, 0, 0, 0, 0x3641 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4A47, 0x443A, 0x3A22, 0, 0x3960, 0x3D67, 0, /* 0x00 */
+ 0x3F5C, 0, 0, 0, 0x7073, 0, 0, 0x7072, /* 0x00 */
+ 0x4D42, 0x3468, 0x4852, 0x465C, 0, 0, 0, 0x3F7C, /* 0x10 */
+ 0x4E4E, 0, 0x375B, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x7076, 0, 0, 0x7075, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x4B4B, 0x462C, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x3150, 0, 0, 0x7077, /* 0x30 */
+ 0x7074, 0, 0, 0x4951, 0x4D6A, 0x7078, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x7079, 0, /* 0x40 */
+ 0, 0, 0, 0x707B, 0x426A, 0x335B, 0x335C, 0x707A, /* 0x40 */
+ 0, 0, 0, 0, 0x3469, 0x3832, 0, 0, /* 0x50 */
+ 0x346A, 0, 0, 0x453F, 0, 0, 0x4E60, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x385C, /* 0x60 */
+ 0, 0, 0, 0x707C, 0, 0, 0, 0x707D, /* 0x60 */
+ 0x707E, 0x7121, 0, 0x7123, 0x7122, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x4977, 0, 0x7124, 0, 0, 0, 0, 0x7125, /* 0xA0 */
+ 0, 0x7126, 0, 0, 0, 0, 0x7127, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x7129, 0x7128, 0, 0x712A, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x4874, 0x664C, 0, 0, 0x3F29, /* 0xD0 */
+ 0, 0, 0x3532, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x712B, 0, 0x712C, 0, 0x522C, 0x5D3B, 0x4853, /* 0xE0 */
+ 0, 0, 0x307B, 0, 0x303B, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x3B74, 0x4B30, 0x3E7E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x712D, 0, 0x4C5F, 0, 0, /* 0x00 */
+ 0, 0x712E, 0x4D5C, 0, 0x3142, 0, 0, 0, /* 0x00 */
+ 0x3B41, 0, 0x712F, 0x326E, 0x7130, 0, 0, 0, /* 0x10 */
+ 0x7131, 0, 0, 0, 0, 0x7133, 0x7134, 0, /* 0x10 */
+ 0x7136, 0x7132, 0, 0, 0x7135, 0, 0, 0, /* 0x20 */
+ 0x345B, 0, 0, 0, 0x7137, 0, 0x7138, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x7139, 0x713A, 0, /* 0x30 */
+ 0, 0, 0x713B, 0, 0, 0x713D, 0, 0, /* 0x40 */
+ 0, 0x713C, 0, 0x713F, 0x7142, 0, 0, 0, /* 0x40 */
+ 0x713E, 0x7140, 0x7141, 0, 0, 0x7143, 0, 0x3642, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x3C73, 0x7144, /* 0x90 */
+ 0x7145, 0x3961, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x7146, 0, 0, /* 0xA0 */
+ 0x333E, 0, 0, 0, 0x474F, 0x7147, 0x7148, 0, /* 0xA0 */
+ 0, 0, 0, 0x435A, 0x466B, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x7149, 0, 0, 0, /* 0xB0 */
+ 0, 0x477D, 0, 0, 0x424C, 0x3158, 0x366E, 0, /* 0xC0 */
+ 0x366F, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x4373, 0x714E, 0x3670, 0, 0, 0x326F, 0, 0, /* 0xD0 */
+ 0x714D, 0, 0, 0x714B, 0, 0x714C, 0, 0x714A, /* 0xD0 */
+ 0, 0, 0x7158, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x714F, 0x7150, 0, /* 0xE0 */
+ 0, 0x7151, 0x7152, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x7154, 0, 0, 0x7153, 0, 0, 0, 0x3D59 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7155, 0, 0, 0, 0x7157, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x3533, 0x7156, /* 0x00 */
+ 0, 0, 0x417B, 0x3833, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x7159, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x424D, 0, 0, 0x715A, 0, 0, 0, 0, /* 0x20 */
+ 0x462D, 0, 0, 0, 0, 0, 0, 0x715B, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x7160, 0, /* 0x30 */
+ 0x715E, 0, 0x715D, 0x715F, 0, 0x715C, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x7162, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x7161, 0, 0x7164, /* 0x50 */
+ 0, 0, 0x3643, 0x7163, 0, 0, 0, 0x7165, /* 0x50 */
+ 0, 0, 0x7166, 0, 0x7168, 0x7167, 0, 0, /* 0x60 */
+ 0, 0x7169, 0x716B, 0x716A, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x397C, 0, 0, 0, 0, 0x716C, 0, 0, /* 0xA0 */
+ 0x716D, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x333C, 0, 0, 0, 0x716E, 0, 0, 0, /* 0xB0 */
+ 0x716F, 0, 0, 0, 0x3F71, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x7170, /* 0xC0 */
+ 0, 0x7171, 0, 0x7172, 0x7173, 0, 0, 0, /* 0xD0 */
+ 0x3962, 0, 0, 0, 0, 0, 0x7174, 0x7175, /* 0xD0 */
+ 0, 0, 0x7176, 0x7177, 0, 0, 0x7178, 0, /* 0xE0 */
+ 0, 0, 0x4831, 0x717A, 0, 0x4926, 0x717B, 0x7179, /* 0xE0 */
+ 0, 0x717D, 0, 0, 0x717C, 0, 0, 0x717E, /* 0xF0 */
+ 0, 0, 0, 0x7221 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7222, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x7223, 0, 0x7224, 0, 0, 0, 0, 0x7225, /* 0x10 */
+ 0, 0, 0x7226, 0x7227, 0, 0x7228, 0, 0x7229, /* 0x20 */
+ 0x722A, 0x722B, 0x722C, 0, 0, 0, 0x722D, 0x722E, /* 0x20 */
+ 0, 0x5D35, 0x722F, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x6478, 0x3534, 0, 0, 0, /* 0x30 */
+ 0, 0x3321, 0x3A32, 0x7231, 0x7230, 0x4C25, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x7233, 0x7234, 0x7232, /* 0x40 */
+ 0, 0x7235, 0, 0, 0x4B62, 0, 0, 0, /* 0x50 */
+ 0x7236, 0, 0x357B, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4F25, /* 0x60 */
+ 0, 0, 0, 0, 0x7237, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x7239, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x303E, 0, /* 0x80 */
+ 0, 0x723A, 0x4A2B, 0x7238, 0, 0, 0x723B, 0x723C, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x723D, /* 0x90 */
+ 0x723E, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x723F, 0, 0x4B6E, 0x3B2D, 0, 0x3A7A, 0x412F, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x7240, 0, 0, 0, /* 0xB0 */
+ 0, 0x7243, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x7241, 0, 0, 0, 0, 0, 0x7244, 0, /* 0xC0 */
+ 0, 0x3871, 0x7242, 0, 0, 0, 0, 0x7245, /* 0xC0 */
+ 0, 0x7246, 0x7247, 0, 0x724B, 0, 0x3B2A, 0, /* 0xD0 */
+ 0, 0, 0, 0x4264, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x724C, 0x7249, 0x7248, 0x724A, 0, 0, 0, /* 0xE0 */
+ 0x375F, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x7250, 0x724F, 0x724E, 0, 0, 0x3033 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x725A, 0, 0x7256, 0, /* 0x00 */
+ 0x7257, 0x7253, 0x7259, 0, 0x7255, 0x3362, 0, 0, /* 0x00 */
+ 0x4F4C, 0, 0x7258, 0x7254, 0x7252, 0x7251, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x725C, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x725F, 0, 0, 0x725E, 0x725D, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x4949, 0x725B, 0x3073, /* 0x20 */
+ 0x7260, 0, 0x7262, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x336F, 0x724D, 0x3137, 0, 0, 0x7264, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x7263, 0x7261, /* 0x40 */
+ 0x432D, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x4B70, 0, 0, 0, 0, 0x4E5A, /* 0x50 */
+ 0, 0, 0x7265, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x7266, 0, 0, 0, 0, 0, 0, 0x7267, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0x7268, 0, /* 0x70 */
+ 0x7269, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x443B, 0, 0x726A, /* 0xE0 */
+ 0, 0x4837, 0, 0x726F, 0x726B, 0, 0, 0, /* 0xE0 */
+ 0x726C, 0, 0, 0x4B31, 0x4C44, 0, 0x4650 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7270, 0, 0, 0x7271, 0x463E, /* 0x00 */
+ 0x726E, 0x726D, 0, 0, 0, 0, 0x322A, 0, /* 0x00 */
+ 0, 0, 0x7279, 0, 0, 0x7278, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x3175, 0, 0, 0, 0x7276, /* 0x10 */
+ 0, 0, 0, 0x7275, 0, 0, 0x7273, 0, /* 0x20 */
+ 0x337B, 0, 0x7272, 0x3C32, 0x3229, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x3963, 0, 0, 0x727C, 0x727B, /* 0x30 */
+ 0, 0x727A, 0, 0, 0x7277, 0, 0x727D, 0, /* 0x40 */
+ 0x727E, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x7325, 0x7324, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x7326, 0, 0, 0x312D, 0x7321, 0x7322, 0, /* 0x50 */
+ 0x3974, 0x4C39, 0, 0, 0x7323, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x4B32, 0, 0, 0x732B, /* 0x60 */
+ 0, 0, 0x7327, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x732C, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x7329, /* 0x80 */
+ 0, 0x7328, 0, 0, 0, 0, 0, 0x375C, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x732D, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x732E, 0, 0, 0, /* 0xA0 */
+ 0, 0x732F, 0, 0x732A, 0, 0, 0, 0x7274, /* 0xA0 */
+ 0, 0, 0x7330, 0, 0x4461, 0, 0, 0, /* 0xB0 */
+ 0x7334, 0, 0x7335, 0x7333, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x7332, 0x7338, 0, 0x7331, 0, 0x7336, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x7337, /* 0xC0 */
+ 0, 0, 0, 0x733A, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x7339, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0x733C, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x733D, 0, 0x733E, /* 0xE0 */
+ 0, 0, 0x4F49, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x733B, 0x426B, 0x3A6D, 0, 0, 0x733F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0x7340, 0x7341, 0, 0, 0x7342, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x7343, 0, 0, /* 0x70 */
+ 0x3834, 0x7344, 0, 0, 0, 0x7345, 0, 0x3C2F, /* 0x70 */
+ 0, 0x7346, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x7347, 0, 0, 0x7348, 0x7349, 0, 0, 0, /* 0x80 */
+ 0, 0x734C, 0x734A, 0x4F3C, 0, 0x734B, 0, 0x4E6F, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x734D, 0, 0x4E5B, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x734E, 0x477E, 0, /* 0xA0 */
+ 0, 0x734F, 0x7351, 0, 0, 0x7352, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x7350, 0x396D, 0x4C4D, 0x4B63, 0x5677, 0, 0x5D60, 0x4B7B, /* 0xB0 */
+ 0, 0, 0, 0, 0x322B, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x7354, 0x3550, 0x7355, 0x7356, /* 0xC0 */
+ 0x7357, 0, 0x3975, 0, 0x7358, 0, 0, 0, /* 0xD0 */
+ 0x6054, 0x4C5B, 0, 0x4263, 0x7359, 0x735B, 0x735A, 0, /* 0xD0 */
+ 0x735C, 0, 0, 0, 0, 0x735D, 0, 0, /* 0xE0 */
+ 0x735E, 0, 0, 0, 0, 0, 0, 0x735F, /* 0xE0 */
+ 0, 0, 0, 0, 0x7360, 0, 0x7361, 0x7362, /* 0xF0 */
+ 0, 0x7363, 0, 0x7364, 0x7365, 0x7366 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7367, /* 0x00 */
+ 0x7368, 0, 0, 0, 0, 0, 0x4524, 0, /* 0x00 */
+ 0, 0, 0, 0x385D, 0, 0x736A, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x414D, 0x736B, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x736C, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x4921, 0, 0, 0x736D, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x736E, 0x6337, 0, 0, 0x6C5A, 0x706D, /* 0x40 */
+ 0, 0, 0x736F, 0, 0x7370, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x7372, /* 0x50 */
+ 0x7373, 0x7374, 0x4E70, 0x7371, 0, 0, 0x7375, 0x7376, /* 0x60 */
+ 0, 0, 0x7378, 0, 0x7377, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x737A, 0, 0, 0, 0x737B, 0x7379, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x4E36, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x737C, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x737D, 0x6354, 0, 0, /* 0x90 */
+ 0x737E /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0208_FF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x212A, 0, 0x2174, 0x2170, 0x2173, 0x2175, 0, /* 0x00 */
+ 0x214A, 0x214B, 0x2176, 0x215C, 0x2124, 0, 0x2125, 0x213F, /* 0x00 */
+ 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, /* 0x10 */
+ 0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129, /* 0x10 */
+ 0x2177, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, /* 0x20 */
+ 0x2348, 0x2349, 0x234A, 0x234B, 0x234C, 0x234D, 0x234E, 0x234F, /* 0x20 */
+ 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, /* 0x30 */
+ 0x2358, 0x2359, 0x235A, 0x214E, 0, 0x214F, 0x2130, 0x2132, /* 0x30 */
+ 0x212E, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, /* 0x40 */
+ 0x2368, 0x2369, 0x236A, 0x236B, 0x236C, 0x236D, 0x236E, 0x236F, /* 0x40 */
+ 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, /* 0x50 */
+ 0x2378, 0x2379, 0x237A, 0x2150, 0x2143, 0x2151, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x2131, 0, 0x216F /* 0xE0 */
+ /* 0xE0 */
+};
+
diff --git a/sal/textenc/tcvtjp5.tab b/sal/textenc/tcvtjp5.tab
new file mode 100644
index 000000000..9fb0f1436
--- /dev/null
+++ b/sal/textenc/tcvtjp5.tab
@@ -0,0 +1,3341 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the UniCode to DBCS tables for the following */
+/* japanese charsets: JIS212 */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2242, 0, 0, 0x2270, 0, 0x2243, 0, /* 0xA0 */
+ 0, 0x226D, 0x226C, 0, 0, 0, 0x226E, 0x2234, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x2231, 0, 0x226B, 0, 0, 0, 0, 0x2244, /* 0xB0 */
+ 0x2A22, 0x2A21, 0x2A24, 0x2A2A, 0x2A23, 0x2A29, 0x2921, 0x2A2E, /* 0xC0 */
+ 0x2A32, 0x2A31, 0x2A34, 0x2A33, 0x2A40, 0x2A3F, 0x2A42, 0x2A41, /* 0xC0 */
+ 0, 0x2A50, 0x2A52, 0x2A51, 0x2A54, 0x2A58, 0x2A53, 0, /* 0xD0 */
+ 0x292C, 0x2A63, 0x2A62, 0x2A65, 0x2A64, 0x2A72, 0x2930, 0x294E, /* 0xD0 */
+ 0x2B22, 0x2B21, 0x2B24, 0x2B2A, 0x2B23, 0x2B29, 0x2941, 0x2B2E, /* 0xE0 */
+ 0x2B32, 0x2B31, 0x2B34, 0x2B33, 0x2B40, 0x2B3F, 0x2B42, 0x2B41, /* 0xE0 */
+ 0x2943, 0x2B50, 0x2B52, 0x2B51, 0x2B54, 0x2B58, 0x2B53, 0, /* 0xF0 */
+ 0x294C, 0x2B63, 0x2B62, 0x2B65, 0x2B64, 0x2B72, 0x2950, 0x2B73 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_01[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2A27, 0x2B27, 0x2A25, 0x2B25, 0x2A28, 0x2B28, 0x2A2B, 0x2B2B, /* 0x00 */
+ 0x2A2C, 0x2B2C, 0x2A2F, 0x2B2F, 0x2A2D, 0x2B2D, 0x2A30, 0x2B30, /* 0x00 */
+ 0x2922, 0x2942, 0x2A37, 0x2B37, 0, 0, 0x2A36, 0x2B36, /* 0x10 */
+ 0x2A38, 0x2B38, 0x2A35, 0x2B35, 0x2A3A, 0x2B3A, 0x2A3B, 0x2B3B, /* 0x10 */
+ 0x2A3D, 0x2B3D, 0x2A3C, 0, 0x2A3E, 0x2B3E, 0x2924, 0x2944, /* 0x20 */
+ 0x2A47, 0x2B47, 0x2A45, 0x2B45, 0, 0, 0x2A46, 0x2B46, /* 0x20 */
+ 0x2A44, 0x2945, 0x2926, 0x2946, 0x2A48, 0x2B48, 0x2A49, 0x2B49, /* 0x30 */
+ 0x2947, 0x2A4A, 0x2B4A, 0x2A4C, 0x2B4C, 0x2A4B, 0x2B4B, 0x2929, /* 0x30 */
+ 0x2949, 0x2928, 0x2948, 0x2A4D, 0x2B4D, 0x2A4F, 0x2B4F, 0x2A4E, /* 0x40 */
+ 0x2B4E, 0x294A, 0x292B, 0x294B, 0x2A57, 0x2B57, 0, 0, /* 0x40 */
+ 0x2A56, 0x2B56, 0x292D, 0x294D, 0x2A59, 0x2B59, 0x2A5B, 0x2B5B, /* 0x50 */
+ 0x2A5A, 0x2B5A, 0x2A5C, 0x2B5C, 0x2A5D, 0x2B5D, 0x2A5F, 0x2B5F, /* 0x50 */
+ 0x2A5E, 0x2B5E, 0x2A61, 0x2B61, 0x2A60, 0x2B60, 0x292F, 0x294F, /* 0x60 */
+ 0x2A6C, 0x2B6C, 0x2A69, 0x2B69, 0x2A66, 0x2B66, 0x2A6B, 0x2B6B, /* 0x60 */
+ 0x2A68, 0x2B68, 0x2A6A, 0x2B6A, 0x2A71, 0x2B71, 0x2A74, 0x2B74, /* 0x70 */
+ 0x2A73, 0x2A75, 0x2B75, 0x2A77, 0x2B77, 0x2A76, 0x2B76, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x2A26, 0x2B26, 0x2A43, /* 0xC0 */
+ 0x2B43, 0x2A55, 0x2B55, 0x2A67, 0x2B67, 0x2A70, 0x2B70, 0x2A6D, /* 0xD0 */
+ 0x2B6D, 0x2A6F, 0x2B6F, 0x2A6E, 0x2B6E, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x2B39 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_02[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2230, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x222F, 0x2232, 0x2236, 0x2235, 0, 0x2233 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_03[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2238, 0x2239, 0x2661, 0, /* 0x80 */
+ 0x2662, 0x2663, 0x2664, 0, 0x2667, 0, 0x2669, 0x266C, /* 0x80 */
+ 0x2676, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x2665, 0x266A, 0x2671, 0x2672, 0x2673, 0x2674, /* 0xA0 */
+ 0x267B, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x2678, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x2675, 0x267A, 0x2677, 0x2679, 0x267C /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_04[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, /* 0x00 */
+ 0x2748, 0x2749, 0x274A, 0x274B, 0x274C, 0, 0x274D, 0x274E, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x2772, 0x2773, 0x2774, 0x2775, 0x2776, 0x2777, /* 0x50 */
+ 0x2778, 0x2779, 0x277A, 0x277B, 0x277C, 0, 0x277D, 0x277E /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2271, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x226F /* 0x20 */
+ /* 0x20 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3021, 0, 0x3022, 0x3023, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x3024, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x3025, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3026, /* 0x10 */
+ 0, 0, 0, 0x3027, 0x3028, 0, 0, 0, /* 0x20 */
+ 0x3029, 0, 0, 0x302A, 0, 0, 0x302B, 0x302C, /* 0x20 */
+ 0x302D, 0, 0, 0, 0, 0x302E, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x302F, 0x3030, 0, 0, 0x3031, 0, 0, 0x3032, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x3033, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x3034, 0, 0x3035, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x3036, 0, 0, 0, 0, /* 0x60 */
+ 0x3037, 0x3038, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x3039, 0x303A, 0, 0, /* 0x70 */
+ 0, 0x303B, 0, 0, 0, 0, 0, 0x303C, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x303D, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x303E, 0x303F, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x3040, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3041, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x3042, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x3043, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x3044, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x3045, 0x3046, 0, 0, 0, 0, /* 0xD0 */
+ 0x3047, 0x3048, 0x3049, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x304A, 0, 0, 0, 0, 0, 0, 0x304B, /* 0xE0 */
+ 0, 0x304C, 0, 0x304D, 0, 0x304E, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0x304F, 0x3050, 0x3051 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3052, 0, 0x3053, 0x3054, 0, 0, 0, 0, /* 0x00 */
+ 0x3055, 0, 0, 0x3056, 0x3057, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x3058, 0, 0, 0x3059, 0x305A, 0x305B, /* 0x10 */
+ 0, 0x305C, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x305D, 0, /* 0x20 */
+ 0, 0x305E, 0, 0x3060, 0, 0x3061, 0, 0x3062, /* 0x30 */
+ 0, 0x3063, 0, 0x3064, 0, 0, 0x3065, 0, /* 0x30 */
+ 0x3066, 0, 0x3067, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x3068, 0x3069, 0, 0x306A, 0x306B, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x306C, 0, 0x306D, 0, 0x306E, 0, /* 0x50 */
+ 0x306F, 0, 0, 0, 0, 0, 0, 0x3070, /* 0x50 */
+ 0x305F, 0, 0, 0x3071, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x3072, 0, 0x3073, 0, 0x3074, 0, /* 0x60 */
+ 0, 0x3075, 0, 0, 0, 0, 0, 0x3076, /* 0x70 */
+ 0x3077, 0x3078, 0x3079, 0, 0, 0x307A, 0x307B, 0, /* 0x70 */
+ 0, 0x307C, 0x307D, 0, 0x307E, 0x3121, 0, 0, /* 0x80 */
+ 0, 0x3122, 0x3123, 0, 0x3124, 0, 0x3125, 0, /* 0x80 */
+ 0x3126, 0, 0x3127, 0x3128, 0x3129, 0, 0, 0x312A, /* 0x90 */
+ 0, 0x312B, 0x312C, 0, 0, 0, 0x312D, 0x312E, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x312F, 0, 0, 0, 0, 0x3130, /* 0xB0 */
+ 0, 0x3131, 0, 0x3132, 0x3133, 0x3134, 0x3135, 0, /* 0xB0 */
+ 0x3136, 0x3137, 0, 0, 0, 0x3138, 0x3139, 0, /* 0xC0 */
+ 0x313A, 0x313B, 0, 0x313C, 0x313D, 0x313E, 0, 0x313F, /* 0xC0 */
+ 0, 0, 0x3140, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x3141, 0, 0, 0, /* 0xD0 */
+ 0x3142, 0, 0x3143, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x3144, 0, 0x3145, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x3146, 0x3147, 0, 0x3148 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3149, 0x314A, 0, 0, 0x314B, 0, 0, 0x314C, /* 0x00 */
+ 0, 0, 0x314D, 0, 0x314E, 0, 0x314F, 0, /* 0x00 */
+ 0x3150, 0, 0, 0x3151, 0, 0, 0, 0x3152, /* 0x10 */
+ 0x3153, 0, 0, 0x3154, 0x3155, 0x3156, 0x3157, 0, /* 0x10 */
+ 0, 0, 0x3158, 0, 0, 0, 0, 0x3159, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x315A, 0, /* 0x20 */
+ 0x315B, 0, 0x315C, 0x315D, 0, 0x315E, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x3176, 0, 0, 0, 0, /* 0x30 */
+ 0x315F, 0x3160, 0x3161, 0, 0, 0x3162, 0x3163, 0, /* 0x40 */
+ 0, 0, 0x3164, 0, 0x3165, 0, 0x3166, 0, /* 0x40 */
+ 0, 0x3167, 0x3168, 0x3169, 0, 0, 0, 0x316A, /* 0x50 */
+ 0, 0x316B, 0, 0, 0, 0, 0, 0x316C, /* 0x50 */
+ 0x316D, 0, 0x316E, 0x316F, 0, 0, 0x3170, 0x3171, /* 0x60 */
+ 0, 0, 0x3172, 0, 0, 0x3173, 0, 0, /* 0x60 */
+ 0x3174, 0x3175, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x3177, 0, 0x3178, 0x3179, 0, 0x317A, 0, /* 0x80 */
+ 0, 0, 0x317B, 0, 0, 0, 0x317C, 0x317D, /* 0x80 */
+ 0x317E, 0, 0x3221, 0x3222, 0x3223, 0, 0x3224, 0, /* 0x90 */
+ 0, 0, 0, 0x3225, 0x3226, 0, 0x3227, 0x3228, /* 0x90 */
+ 0x3229, 0x322A, 0x322B, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x322C, 0, 0, 0, 0, 0x322D, /* 0xA0 */
+ 0x322E, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x322F, 0x3230, 0, 0, 0x3231, 0, 0, /* 0xB0 */
+ 0x3232, 0, 0, 0x3233, 0x3234, 0, 0, 0x3235, /* 0xC0 */
+ 0, 0, 0, 0, 0x3236, 0, 0x3237, 0, /* 0xC0 */
+ 0x3238, 0, 0, 0x3239, 0x323A, 0, 0, 0, /* 0xD0 */
+ 0x323B, 0, 0, 0, 0x323C, 0x323D, 0, 0x323E, /* 0xD0 */
+ 0, 0, 0x323F, 0, 0x3240, 0, 0x3241, 0, /* 0xE0 */
+ 0x3242, 0x3243, 0, 0, 0, 0, 0, 0x3244, /* 0xE0 */
+ 0, 0x3245, 0x3251, 0, 0, 0, 0x3246, 0, /* 0xF0 */
+ 0, 0, 0x3247, 0, 0, 0, 0x3248 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3249, 0, 0, 0x324A, 0x324B, /* 0x00 */
+ 0x324C, 0, 0, 0x324D, 0x324E, 0x324F, 0x3250, 0, /* 0x00 */
+ 0x3252, 0, 0, 0, 0, 0, 0, 0x3253, /* 0x10 */
+ 0, 0x3254, 0, 0x3255, 0x3256, 0x3257, 0x3258, 0, /* 0x10 */
+ 0, 0, 0, 0x3259, 0, 0, 0, 0x325A, /* 0x20 */
+ 0x325B, 0, 0, 0, 0x325C, 0x325D, 0, 0x325E, /* 0x20 */
+ 0, 0x325F, 0, 0x3260, 0x3261, 0x3262, 0, 0, /* 0x30 */
+ 0x3263, 0x3264, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x3265, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x3266, 0, 0, 0, 0, 0x3267, /* 0x40 */
+ 0, 0, 0, 0x3268, 0, 0x3269, 0, 0x326A, /* 0x50 */
+ 0x326B, 0, 0, 0, 0, 0, 0, 0x326C, /* 0x50 */
+ 0, 0, 0, 0, 0x326D, 0, 0x326E, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x326F, 0, /* 0x70 */
+ 0, 0, 0, 0x3270, 0x3271, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x3272, 0, 0, 0x3273, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x3274, 0, 0, 0, 0, 0x3275, 0, 0, /* 0x90 */
+ 0, 0x3276, 0, 0x3277, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x3278, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x3279, 0, 0x327A, 0, 0x327B, 0, 0x327C, 0x327D, /* 0xB0 */
+ 0, 0, 0x327E, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x3321, 0, 0, 0, 0, 0, 0, 0x3322, /* 0xC0 */
+ 0, 0x3323, 0x3324, 0x3325, 0, 0x3326, 0, 0, /* 0xD0 */
+ 0x3327, 0, 0, 0, 0, 0, 0x3328, 0, /* 0xD0 */
+ 0, 0, 0x3329, 0, 0, 0x332A, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x332B, 0, /* 0xE0 */
+ 0, 0, 0x332C, 0x332D, 0x332E, 0, 0, 0x332F /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3330, 0x3331, 0, 0, 0x3332, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x3333, 0x3334, 0, 0x3335, 0x3336, 0, /* 0x10 */
+ 0x3337, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x3338, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x3339, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x333A, 0x333B, 0, 0, 0x333C, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x333D, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x333E, 0, 0, /* 0x40 */
+ 0, 0x333F, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x3340, 0, 0x3341, /* 0x50 */
+ 0x3342, 0, 0x3343, 0, 0x3344, 0, 0, 0x3345, /* 0x50 */
+ 0x3346, 0x3347, 0, 0, 0, 0, 0x3348, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0x3349, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x334A, /* 0x70 */
+ 0x334B, 0x334C, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x334D, 0, 0x334E, 0, 0, 0x334F, 0, 0, /* 0x80 */
+ 0, 0, 0x3350, 0, 0x3351, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x3352, 0, 0x3353, 0x3354, 0x3355, /* 0x90 */
+ 0x3356, 0, 0x3357, 0, 0x3358, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x3359, 0x335A, 0x335B, 0x335C, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x335D, /* 0xA0 */
+ 0x335E, 0, 0, 0, 0, 0, 0x335F, 0x3360, /* 0xB0 */
+ 0x3361, 0, 0x3362, 0x3363, 0, 0x3364, 0, 0, /* 0xB0 */
+ 0x3365, 0, 0, 0, 0x3366, 0, 0x3367, 0, /* 0xC0 */
+ 0x3368, 0, 0, 0, 0x3369, 0, 0, 0x336A, /* 0xC0 */
+ 0, 0x336B, 0, 0, 0x336C, 0, 0x336D, 0, /* 0xD0 */
+ 0, 0, 0, 0x336E, 0x336F, 0, 0, 0, /* 0xD0 */
+ 0, 0x3370, 0, 0, 0, 0x3371, 0, 0, /* 0xE0 */
+ 0x3372, 0x3373, 0x3374, 0, 0x3375, 0, 0, 0, /* 0xE0 */
+ 0x3376, 0x3377, 0, 0, 0x3378, 0, 0x3379, 0x337A /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x337B, 0, 0, 0x337C, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x337D, 0x337E, 0x3421, 0, 0, 0, /* 0x00 */
+ 0, 0x3422, 0, 0x3423, 0, 0, 0, 0, /* 0x10 */
+ 0x3424, 0, 0, 0x3425, 0x3426, 0, 0x3427, 0x3428, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x3429, 0, 0x342A, /* 0x20 */
+ 0x342B, 0x342C, 0, 0x342D, 0x342E, 0x342F, 0, 0, /* 0x20 */
+ 0x3430, 0, 0x3431, 0, 0, 0x3432, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x3433, 0x3434, 0x3435, 0, /* 0x30 */
+ 0, 0, 0x3436, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x3438, 0x3437, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x3439, 0, 0x343A, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x343B, 0, 0x343C, 0, 0x343D, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x343E, 0x343F, 0, 0, /* 0x60 */
+ 0, 0, 0x3440, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x3441, 0, 0, 0, 0, 0x3442, 0, /* 0x70 */
+ 0, 0, 0, 0x3443, 0, 0, 0, 0x3444, /* 0x80 */
+ 0x3445, 0, 0, 0, 0, 0, 0x3446, 0, /* 0x80 */
+ 0, 0, 0, 0x3447, 0x3448, 0, 0, 0, /* 0x90 */
+ 0, 0x3449, 0, 0, 0, 0x344A, 0, 0, /* 0x90 */
+ 0, 0x344B, 0, 0, 0x344C, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x344D, 0x344E, 0, 0, 0, 0x344F, /* 0xA0 */
+ 0, 0, 0x3450, 0, 0x3451, 0x3452, 0, 0x3453, /* 0xB0 */
+ 0x3454, 0, 0x3455, 0, 0, 0x3456, 0, 0, /* 0xB0 */
+ 0x3457, 0, 0, 0, 0, 0x3458, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3459, /* 0xC0 */
+ 0, 0, 0x345A, 0x345B, 0, 0x345C, 0, 0, /* 0xD0 */
+ 0, 0, 0x345D, 0, 0, 0x345E, 0x345F, 0, /* 0xD0 */
+ 0x3460, 0, 0, 0, 0, 0, 0x3461, 0x3462, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x3463 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3464, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x3465, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x3466, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x3467, 0, 0, 0, 0, 0, 0x3468, /* 0x20 */
+ 0x3469, 0, 0x346A, 0, 0, 0, 0, 0x346B, /* 0x20 */
+ 0, 0x346C, 0, 0, 0x346D, 0x346E, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x346F, 0x3470, 0, 0, 0x3471, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x3472, 0, 0x3473, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x3474, 0, /* 0x50 */
+ 0, 0, 0x3475, 0, 0x3476, 0, 0x3477, 0x3478, /* 0x60 */
+ 0, 0x3479, 0, 0x347A, 0, 0x347B, 0x347C, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x347D, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x347E, /* 0x70 */
+ 0, 0x3521, 0, 0x3522, 0, 0x3523, 0, 0, /* 0x80 */
+ 0x3524, 0x3525, 0, 0, 0, 0x3526, 0, 0, /* 0x80 */
+ 0, 0x3527, 0, 0, 0, 0x3528, 0x3529, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x352A, 0, 0, 0x352B, /* 0x90 */
+ 0, 0x352C, 0, 0, 0, 0, 0x352D, 0x352E, /* 0xA0 */
+ 0, 0x352F, 0x3530, 0, 0, 0x3531, 0x3532, 0, /* 0xA0 */
+ 0, 0x3533, 0, 0, 0, 0, 0, 0x3534, /* 0xB0 */
+ 0, 0x3535, 0x3536, 0x3537, 0, 0, 0, 0x3538, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x3539, 0, /* 0xC0 */
+ 0, 0, 0x353A, 0, 0, 0x353B, 0x353C, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x353D, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x353E, 0, 0x353F, 0, 0, 0x3540, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x3541, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x3542, 0, 0x3543, 0x3544 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3545, 0x3546, 0, 0, 0, 0x3547, 0, 0, /* 0x00 */
+ 0x3548, 0x3549, 0, 0, 0x354A, 0x354B, 0x354C, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x354D, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x354E, 0x354F, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x3550, 0, 0, 0x3551, 0x3552, 0, /* 0x30 */
+ 0, 0, 0, 0x3553, 0x3554, 0x3555, 0, 0, /* 0x30 */
+ 0, 0x3556, 0, 0, 0, 0, 0, 0x3557, /* 0x40 */
+ 0, 0x3558, 0x3559, 0, 0, 0x355A, 0, 0, /* 0x40 */
+ 0x355B, 0x355C, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x355D, 0, 0x355E, 0x355F, 0, 0, 0x3560, 0, /* 0x50 */
+ 0x3561, 0x3562, 0, 0, 0x3563, 0, 0x3564, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3565, /* 0x70 */
+ 0, 0x3566, 0x3567, 0, 0, 0, 0x3568, 0, /* 0x80 */
+ 0x3569, 0, 0, 0, 0, 0, 0x356A, 0x356B, /* 0x80 */
+ 0, 0x356C, 0x356D, 0x356E, 0x356F, 0, 0, 0x3570, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x3571, 0x3572, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x3573, 0, 0, /* 0xA0 */
+ 0, 0, 0x3574, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3575, /* 0xB0 */
+ 0, 0x3576, 0, 0x3577, 0, 0, 0x3578, 0, /* 0xC0 */
+ 0, 0x3579, 0, 0x357A, 0x357B, 0, 0x357C, 0, /* 0xC0 */
+ 0, 0x357D, 0x357E, 0x3621, 0, 0, 0, 0x3622, /* 0xD0 */
+ 0x3623, 0, 0, 0x3624, 0, 0, 0x3625, 0, /* 0xD0 */
+ 0, 0, 0x3626, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x3627, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x3628, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3629 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x362A, 0, 0, /* 0x00 */
+ 0x362B, 0, 0x362C, 0, 0, 0x362D, 0x362E, 0x362F, /* 0x00 */
+ 0x3630, 0x3631, 0x3632, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x3633, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x3634, 0, 0, 0, /* 0x20 */
+ 0x3635, 0, 0, 0x3636, 0, 0x3637, 0, 0x3638, /* 0x30 */
+ 0, 0x3639, 0, 0x363A, 0x363B, 0x363C, 0, 0x363D, /* 0x30 */
+ 0x363E, 0x363F, 0, 0x3640, 0x3641, 0, 0x3642, 0, /* 0x40 */
+ 0, 0x3643, 0, 0x3644, 0, 0x3645, 0, 0x3646, /* 0x40 */
+ 0, 0, 0, 0, 0x3647, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x3648, 0, /* 0x50 */
+ 0x3649, 0x364A, 0x364B, 0x364C, 0, 0, 0x364D, 0, /* 0x60 */
+ 0, 0x364E, 0, 0, 0, 0x364F, 0, 0x3650, /* 0x60 */
+ 0, 0x3651, 0x3652, 0, 0, 0x3653, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x3654, 0x3655, 0, 0, /* 0x80 */
+ 0x3656, 0, 0, 0x3657, 0x3658, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x3659, 0, 0, /* 0x90 */
+ 0, 0x365A, 0x365B, 0, 0, 0x365C, 0x365D, 0x365E, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x365F, 0x3660, /* 0xA0 */
+ 0x3661, 0x3662, 0, 0x3663, 0x3664, 0x3665, 0, 0, /* 0xA0 */
+ 0, 0x3666, 0, 0x3667, 0, 0, 0, 0x3668, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x3669, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x366A, 0, 0, /* 0xC0 */
+ 0, 0x366B, 0x366C, 0x366D, 0x3670, 0x3671, 0, 0x366E, /* 0xC0 */
+ 0x366F, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x3672, 0, 0, 0x3673, 0x3674, 0, 0x3675, /* 0xD0 */
+ 0, 0x3676, 0, 0, 0x3677, 0x3678, 0x3679, 0x367A, /* 0xE0 */
+ 0x367B, 0, 0, 0x367D, 0, 0x367E, 0, 0, /* 0xE0 */
+ 0, 0x367C, 0, 0, 0, 0, 0x3721, 0x3722 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3723, 0x3724, 0, 0, 0, 0, 0x3725, /* 0x00 */
+ 0, 0, 0x3726, 0, 0x3727, 0, 0, 0, /* 0x00 */
+ 0, 0x3728, 0, 0, 0, 0x3729, 0, 0, /* 0x10 */
+ 0, 0, 0x372A, 0x372B, 0, 0x372C, 0, 0, /* 0x10 */
+ 0x372D, 0, 0x372E, 0x372F, 0x3730, 0x3731, 0, 0, /* 0x20 */
+ 0, 0x3732, 0x3733, 0, 0x3734, 0, 0x3735, 0x3736, /* 0x20 */
+ 0, 0, 0, 0x3737, 0x3738, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x3739, 0x373A, 0x373B, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x373C, 0x373D, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x373E, 0x373F, 0, 0, /* 0x40 */
+ 0, 0, 0x3740, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x3741, 0, 0, 0x3742, 0, 0x3743, /* 0x60 */
+ 0x3744, 0, 0, 0x3745, 0, 0x3746, 0x3747, 0x3748, /* 0x60 */
+ 0x3749, 0x374A, 0, 0x374B, 0x374C, 0x374D, 0, 0x374E, /* 0x70 */
+ 0, 0x374F, 0x3750, 0x3751, 0x3752, 0, 0x3753, 0, /* 0x70 */
+ 0, 0x3754, 0, 0x3755, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x3756, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x3757, 0x3760, 0, 0x3758, /* 0x90 */
+ 0, 0x3759, 0x375A, 0, 0x375B, 0x375C, 0x375D, 0x375E, /* 0x90 */
+ 0, 0x375F, 0, 0, 0, 0, 0, 0x3761, /* 0xA0 */
+ 0x3762, 0x3763, 0, 0, 0x3764, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x3765, 0, 0, 0, 0, 0x3766, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3767, /* 0xC0 */
+ 0x3768, 0, 0, 0, 0x3769, 0, 0, 0x376A, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x376B, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x376C, 0x376D, 0, /* 0xD0 */
+ 0, 0x377E, 0, 0, 0x376E, 0, 0x376F, 0x3770, /* 0xE0 */
+ 0, 0x3771, 0, 0, 0, 0x3772, 0, 0, /* 0xE0 */
+ 0x3773, 0, 0, 0, 0, 0x3774, 0x3775, 0, /* 0xF0 */
+ 0x3776, 0, 0, 0, 0, 0x3777, 0x3778, 0x3779 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x377A, 0x377B, 0, 0, 0, /* 0x00 */
+ 0x377C, 0x377D, 0, 0, 0x3821, 0x3822, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x3823, 0, 0, 0x3824, 0x3825, /* 0x10 */
+ 0x3826, 0, 0, 0, 0, 0, 0x3827, 0x3828, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x3829, 0, 0, /* 0x20 */
+ 0, 0, 0x382A, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x382B, 0, 0, 0, 0, 0, 0x382C, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x382D, 0, 0, 0x382E, 0x382F, 0, 0x3830, /* 0x40 */
+ 0x3831, 0, 0, 0, 0, 0x3832, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3833, /* 0x50 */
+ 0, 0x3834, 0, 0, 0x3835, 0, 0, 0x3836, /* 0x60 */
+ 0x3837, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x3838, 0, 0, 0, 0x3839, 0, 0, 0x383A, /* 0x70 */
+ 0x383B, 0x383C, 0, 0, 0, 0, 0, 0x383D, /* 0x80 */
+ 0x383E, 0x383F, 0x3840, 0, 0x3841, 0x3842, 0, 0x3843, /* 0x80 */
+ 0x3844, 0, 0, 0, 0x3845, 0, 0x3846, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x3847, 0, 0, /* 0x90 */
+ 0x3848, 0x3849, 0x384A, 0, 0, 0, 0x384B, 0, /* 0xA0 */
+ 0, 0x384C, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x384D, 0x384E, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x3850, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x3851, 0, 0x384F, 0, 0, 0, /* 0xC0 */
+ 0x3852, 0, 0, 0, 0, 0x3853, 0x3854, 0, /* 0xC0 */
+ 0x3855, 0, 0x3856, 0, 0x3857, 0, 0x3858, 0, /* 0xD0 */
+ 0, 0, 0x3859, 0, 0, 0x385A, 0, 0, /* 0xD0 */
+ 0, 0x385B, 0x385C, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x385D, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x385E /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x385F, 0x3860, 0, /* 0x00 */
+ 0, 0, 0, 0x3861, 0x3862, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x3863, 0x3864, 0x3865, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x3867, 0, 0, /* 0x10 */
+ 0, 0x3868, 0, 0x3869, 0x386A, 0, 0, 0, /* 0x20 */
+ 0x386B, 0, 0, 0, 0, 0, 0, 0x386C, /* 0x20 */
+ 0x386D, 0, 0, 0x386E, 0, 0x386F, 0x3870, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3871, /* 0x30 */
+ 0, 0, 0, 0x3872, 0, 0, 0x3873, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x3874, 0x3875, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x3876, 0, 0x3877, 0, 0x3878, 0x3879, 0x387A, /* 0x50 */
+ 0, 0x387B, 0, 0x387C, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x387D, 0, 0x387E, 0, 0x3921, /* 0x60 */
+ 0, 0, 0x3922, 0, 0, 0x3923, 0x3924, 0, /* 0x70 */
+ 0, 0x3925, 0, 0x3926, 0x3927, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x3928, 0x3929, 0, 0x392A, 0, /* 0x80 */
+ 0, 0, 0x392B, 0, 0, 0x392C, 0, 0x392D, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x392E, /* 0x90 */
+ 0, 0, 0, 0, 0x392F, 0, 0, 0x3930, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x3931, 0x3932, 0x3933, /* 0xA0 */
+ 0x3934, 0, 0, 0x3935, 0, 0, 0, 0x3936, /* 0xB0 */
+ 0, 0, 0x3937, 0, 0x3938, 0, 0, 0, /* 0xB0 */
+ 0, 0x3939, 0, 0x393A, 0x393B, 0, 0, 0, /* 0xC0 */
+ 0x393C, 0, 0x393D, 0, 0, 0x393E, 0, 0, /* 0xC0 */
+ 0, 0, 0x393F, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x3940, 0x3941, 0x3942, /* 0xD0 */
+ 0, 0, 0, 0x3943, 0x3944, 0, 0, 0x3945, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x3946, 0x3947, /* 0xE0 */
+ 0, 0x3948, 0x3949, 0, 0x394A, 0, 0, 0x394B /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x394C, 0, 0, 0, 0x394D, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x394E, 0x394F, 0x3950, 0, /* 0x00 */
+ 0, 0, 0x3951, 0x3952, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x3953, 0, /* 0x10 */
+ 0, 0, 0, 0x3954, 0x3955, 0, 0, 0x3956, /* 0x20 */
+ 0x3957, 0, 0x3958, 0, 0, 0x3959, 0, 0, /* 0x20 */
+ 0x395A, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x395B, 0x395C, 0, 0x395D, /* 0x40 */
+ 0x395E, 0, 0, 0, 0x395F, 0, 0, 0, /* 0x40 */
+ 0x3960, 0, 0, 0, 0, 0x3961, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x3962, 0, /* 0x50 */
+ 0, 0, 0, 0x3963, 0, 0x3964, 0, 0x3965, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x3966, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3967, /* 0x70 */
+ 0, 0, 0x3968, 0x3969, 0, 0, 0x396A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x396B, 0, 0, 0, 0, /* 0x80 */
+ 0x396C, 0, 0, 0x396D, 0, 0, 0x396E, 0, /* 0x90 */
+ 0, 0x396F, 0, 0, 0x3970, 0, 0x3971, 0x3972, /* 0x90 */
+ 0x3973, 0, 0x3974, 0, 0, 0, 0, 0x3975, /* 0xA0 */
+ 0, 0, 0, 0, 0x3976, 0, 0, 0, /* 0xA0 */
+ 0, 0x3977, 0x3978, 0x3979, 0, 0x397A, 0, 0, /* 0xB0 */
+ 0x397B, 0, 0x397C, 0x397D, 0, 0, 0, 0x397E, /* 0xB0 */
+ 0, 0, 0, 0, 0x3A21, 0, 0x3A22, 0, /* 0xC0 */
+ 0x3A23, 0, 0, 0, 0, 0, 0, 0x3A24, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x3A25, 0, 0x3A26, 0, 0, 0, /* 0xD0 */
+ 0x3A27, 0, 0, 0, 0, 0x3A28, 0, 0, /* 0xE0 */
+ 0, 0, 0x3A29, 0, 0, 0, 0x3A2A, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x3A2B, 0x3A2C, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0x3A2D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3A2E, 0x3A2F, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x3A30, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3A31, /* 0x10 */
+ 0, 0x3A33, 0, 0x3A34, 0, 0x3A35, 0, 0, /* 0x10 */
+ 0, 0x3A36, 0, 0, 0, 0x3A37, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x3A38, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x3A32, 0, 0, 0, /* 0x30 */
+ 0x3A39, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x3A3A, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x3A3B, 0x3A3C, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x3A3D, 0, 0, 0, 0x3A3E, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x3A3F, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x3A40, 0, 0, 0, 0, 0, 0x3A41, 0x3A42, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x3A43, 0x3A44, 0x3A45, 0x3A46, /* 0x70 */
+ 0, 0x3A47, 0, 0, 0x3A48, 0, 0x3A49, 0, /* 0x80 */
+ 0, 0, 0x3A4A, 0, 0, 0, 0x3A4B, 0, /* 0x80 */
+ 0x3A4C, 0x3A4D, 0, 0x3A4E, 0x3A4F, 0, 0x3A50, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x3A51, 0x3A52, 0, 0, 0x3A53, 0x3A54, 0, 0x3A55, /* 0xA0 */
+ 0, 0x3A56, 0x3A57, 0, 0, 0, 0, 0x3A58, /* 0xB0 */
+ 0, 0, 0x3A59, 0, 0x3A5A, 0, 0, 0, /* 0xB0 */
+ 0x3A5B, 0x3A5C, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x3A5D, 0, 0x3A5E, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x3A5F, 0x3A60, /* 0xD0 */
+ 0x3A61, 0x3A62, 0x3A63, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x3A64, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3A65, /* 0xE0 */
+ 0, 0x3A66, 0, 0, 0x3A67, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0x3A68 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x3A69, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3A6A, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x3A6B, 0x3A6C, /* 0x10 */
+ 0, 0, 0, 0x3A6D, 0, 0, 0x3A6E, 0, /* 0x20 */
+ 0, 0x3A6F, 0, 0x3A70, 0x3A71, 0, 0x3A72, 0, /* 0x20 */
+ 0x3A73, 0, 0x3A74, 0, 0, 0x3A75, 0x3A76, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x3A77, 0x3A78, 0, 0x3A79, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x3A7A, 0x3A7B, 0, 0, 0, 0x3A7C, /* 0x60 */
+ 0x3A7D, 0x3A7E, 0, 0, 0, 0x3B21, 0, 0, /* 0x60 */
+ 0x3B22, 0, 0, 0, 0x3B23, 0x3B24, 0, 0, /* 0x70 */
+ 0, 0, 0x3B25, 0x3B26, 0x3B27, 0x3B28, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3B29, /* 0x80 */
+ 0x3B2A, 0, 0x3B2B, 0, 0, 0, 0, 0x3B2C, /* 0x80 */
+ 0, 0, 0x3B2D, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x3B2E, 0, 0x3B2F, /* 0x90 */
+ 0x3B30, 0, 0x3B31, 0x3B32, 0, 0, 0x3B33, 0, /* 0xA0 */
+ 0, 0, 0x3B34, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x3B35, 0, 0x3B36, 0x3B37, 0, 0, /* 0xB0 */
+ 0, 0, 0x3B38, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x3B39, 0, 0x3B3A, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x3B3B, 0, 0, 0, 0, 0x3B3D, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x3B3C, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x3B3E, 0, /* 0xE0 */
+ 0, 0x3B3F, 0x3B40, 0, 0x3B41 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3B42, 0, 0, 0, 0, 0x3B43, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x3B44, 0, 0, /* 0x00 */
+ 0, 0, 0x3B45, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x3B47, 0x3B48, 0, 0x3B49, 0x3B4A, /* 0x20 */
+ 0, 0, 0, 0x3B46, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x3B4B, 0, 0, 0x3B4C, 0, 0, 0, /* 0x30 */
+ 0, 0x3B4D, 0, 0, 0, 0x3B4E, 0, 0x3B4F, /* 0x30 */
+ 0, 0, 0x3B50, 0x3B51, 0, 0, 0x3B52, 0, /* 0x40 */
+ 0x3B53, 0, 0x3B57, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x3B55, 0, 0, 0, 0x3B54, 0, 0, /* 0x50 */
+ 0, 0x3B56, 0, 0, 0, 0, 0, 0x3B58, /* 0x50 */
+ 0x3B59, 0x3B5A, 0x3B5B, 0, 0x3B5C, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x3B5D, 0, 0, 0x3B5E, 0, 0, /* 0x60 */
+ 0x3B5F, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x3B60, 0x3B61, 0, 0, 0, 0x3B62, 0x3B63, /* 0x70 */
+ 0, 0x3B64, 0, 0x3B65, 0, 0, 0, 0, /* 0x80 */
+ 0x3B66, 0, 0x3B67, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x3B68, 0x3B69, 0x3B6A, 0x3B6B, 0, 0, /* 0x90 */
+ 0, 0x3B6C, 0, 0x3B6D, 0, 0, 0, 0x3B6E, /* 0x90 */
+ 0x3B6F, 0, 0, 0, 0, 0, 0, 0x3B70, /* 0xA0 */
+ 0, 0, 0, 0x3B71, 0, 0, 0, 0, /* 0xA0 */
+ 0x3B72, 0, 0x6674, 0, 0x3B73, 0, 0, 0, /* 0xB0 */
+ 0x3B74, 0x3B75, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x3B76, 0, 0, 0, 0x3B77, /* 0xC0 */
+ 0, 0, 0, 0x3B78, 0, 0, 0x3B7A, 0, /* 0xC0 */
+ 0x3B79, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x3B7B, 0x3B7C, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x3B7D, 0, 0, 0, 0x3B7E, 0, 0, 0, /* 0xE0 */
+ 0, 0x3C21, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x3C22, 0x3C23 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3C24, 0, 0, 0, 0, 0, 0, 0x3C25, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x3C26, 0, 0, /* 0x00 */
+ 0, 0, 0x3C27, 0, 0x3C28, 0x3C29, 0, 0, /* 0x10 */
+ 0x3C2A, 0, 0, 0, 0, 0, 0, 0x3C2B, /* 0x10 */
+ 0x3C2C, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x3C2E, 0, 0, 0, 0, 0, 0x3C2D, 0, /* 0x20 */
+ 0, 0, 0x3C2F, 0, 0, 0x3C30, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x3C31, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x3C34, 0, 0x3C32, 0, 0, 0, 0, /* 0x40 */
+ 0x3C33, 0x3C35, 0, 0, 0, 0, 0x3C36, 0, /* 0x50 */
+ 0x3C37, 0, 0, 0x3C38, 0x3C39, 0, 0x3C3A, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x3C3B, 0, 0x3C3C, 0x3C3D, 0x3C3E, 0x3C3F, 0x3C40, 0, /* 0x60 */
+ 0x3C41, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x3C42, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x3C43, 0, 0, 0x3C44, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x3C45, 0, 0x3C46, 0x3C47, 0, 0, /* 0xA0 */
+ 0x3C48, 0, 0x3C49, 0, 0x3C4A, 0, 0, 0, /* 0xA0 */
+ 0, 0x3C4B, 0, 0x3C4C, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x3C4D, 0x3C4E, 0x3C4F, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x3C50, 0, /* 0xC0 */
+ 0, 0, 0, 0x3C52, 0x3C51, 0, 0x3C53, 0, /* 0xC0 */
+ 0, 0x3C54, 0x3C55, 0, 0x3C56, 0x3C57, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x3C58, 0, 0x3C59, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x3C5A, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x3C5B /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3C5C, 0, 0, 0, 0x3C5D, 0x3C5E, /* 0x00 */
+ 0x3C5F, 0, 0, 0, 0, 0, 0x3C60, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x3C61, 0, 0, 0x3C62, 0x3C63, 0, 0, /* 0x10 */
+ 0, 0x3C64, 0x3C65, 0x3C66, 0x3C67, 0, 0, 0, /* 0x20 */
+ 0x3C68, 0, 0, 0x3C69, 0x3C6A, 0, 0x3C6B, 0, /* 0x20 */
+ 0x3C6C, 0, 0, 0, 0x3C6D, 0, 0x3C6E, 0, /* 0x30 */
+ 0, 0, 0, 0x3C6F, 0, 0x3C70, 0, 0x3C71, /* 0x30 */
+ 0x3C72, 0, 0, 0, 0x3C73, 0x3C74, 0, 0x3C75, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x3C76, 0, 0, /* 0x40 */
+ 0x3C77, 0, 0, 0, 0x3C78, 0, 0, 0, /* 0x50 */
+ 0x3C79, 0, 0, 0x3C7A, 0, 0, 0, 0, /* 0x50 */
+ 0x3C7B, 0, 0, 0x3C7C, 0x3C7D, 0, 0, 0x3C7E, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x3D21, /* 0x60 */
+ 0, 0, 0x3D22, 0, 0x3D23, 0x3D24, 0, 0, /* 0x70 */
+ 0x3D25, 0, 0x3D26, 0, 0, 0x3D27, 0x3D28, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x3D29, 0, 0, 0, 0x3D2A, 0, 0x3D2B, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x3D2C, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x3D2D, 0x3D2E, 0, 0, /* 0x90 */
+ 0, 0, 0x3D2F, 0, 0x3D32, 0, 0, 0x3D30, /* 0xA0 */
+ 0, 0, 0, 0x3D31, 0x3D33, 0, 0, 0x3D34, /* 0xA0 */
+ 0x3D35, 0x3D36, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x3D37, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x3D38, 0, 0, 0x3D39, /* 0xC0 */
+ 0x3D3A, 0x3D3B, 0, 0x3D3C, 0, 0, 0, 0, /* 0xC0 */
+ 0x3D3D, 0x3D3E, 0x3D3F, 0x3D40, 0x3D41, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0x3D42, 0, /* 0xD0 */
+ 0, 0x3D43, 0x3D44, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x3D45, 0x3D46, 0x3D47, 0, 0x3D48, 0x3D49, 0x3D4A, 0x3D4B, /* 0xE0 */
+ 0, 0, 0x3D4C, 0x3D4D, 0, 0, 0x3D4E, 0, /* 0xF0 */
+ 0, 0, 0x3D4F, 0, 0x3D50 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3D51, /* 0x00 */
+ 0, 0, 0x3D52, 0, 0, 0x3D53, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x3D54, 0x3D55, 0, 0, 0x3D56, /* 0x10 */
+ 0x3D57, 0, 0x3D58, 0, 0, 0, 0, 0x3D59, /* 0x10 */
+ 0, 0, 0, 0, 0x3D5A, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x3D5B, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x3D5C, 0, 0x3D5D, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x3D5E, 0, 0, 0, 0, 0, 0, 0x3D5F, /* 0x40 */
+ 0x3D60, 0x3D61, 0, 0, 0x3D62, 0, 0, 0, /* 0x40 */
+ 0, 0x3D63, 0, 0, 0x3D64, 0, 0x3D65, 0x3D66, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x3D67, 0, 0, /* 0x50 */
+ 0, 0x3D68, 0, 0, 0, 0, 0, 0x3D69, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x3D6A, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x3D6B, 0x3D6C, /* 0x70 */
+ 0, 0, 0x3D6D, 0, 0, 0, 0x3D6E, 0, /* 0x80 */
+ 0x3D6F, 0, 0x3D70, 0, 0, 0, 0x3D71, 0, /* 0x80 */
+ 0, 0x3D72, 0, 0x3D73, 0, 0x3D74, 0, 0, /* 0x90 */
+ 0x3D75, 0, 0, 0, 0, 0x3D76, 0x3D77, 0, /* 0x90 */
+ 0, 0, 0x3D78, 0, 0x3D79, 0x3D7A, 0, 0, /* 0xA0 */
+ 0x3D7B, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x3D7C, 0x3D7D, 0, 0, 0, 0, 0, 0x3D7E, /* 0xB0 */
+ 0, 0, 0, 0x3E21, 0, 0, 0x3E22, 0, /* 0xB0 */
+ 0, 0, 0x3E23, 0, 0x3E24, 0, 0, 0, /* 0xC0 */
+ 0x3E25, 0x3E26, 0x3E27, 0x3E28, 0, 0, 0x3E29, 0x3E2A, /* 0xC0 */
+ 0, 0, 0, 0, 0x3E2B, 0x3E2C, 0, 0, /* 0xD0 */
+ 0, 0x3E2D, 0, 0x3E2E, 0, 0x3E2F, 0x3E30, 0, /* 0xD0 */
+ 0, 0, 0x3E31, 0, 0, 0x3E32, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x3E33, 0, 0, 0x3E34, 0, 0, /* 0xF0 */
+ 0x3E35, 0, 0, 0, 0x3E36, 0x3E37 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3E38, 0, 0, 0, 0, 0x3E39, /* 0x00 */
+ 0, 0, 0x3E3A, 0, 0x3E3B, 0, 0, 0, /* 0x00 */
+ 0x3E3C, 0x3E3D, 0x3E3E, 0x3E3F, 0x3E40, 0, 0x3E41, 0x3E42, /* 0x10 */
+ 0, 0x3E43, 0, 0, 0x3E44, 0, 0x3E45, 0, /* 0x10 */
+ 0, 0, 0x3E46, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x3E47, 0x3E48, 0, 0, 0, 0, /* 0x20 */
+ 0x3E49, 0x3E4A, 0, 0, 0, 0x3E4B, 0x3E4C, 0x3E4D, /* 0x30 */
+ 0, 0x3E4E, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x3E4F, 0, 0, 0, 0x3E50, 0x3E51, 0, /* 0x40 */
+ 0, 0x3E52, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x3E53, 0, /* 0x50 */
+ 0x3E54, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x3E55, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x3E56, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x3E57, 0, 0, 0x3E58, 0x3E59, 0, 0, 0x3E5A, /* 0x70 */
+ 0x3E5B, 0x3E5C, 0, 0x3E5D, 0x3E5E, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x3E5F, 0, 0x3E60, 0, 0, /* 0x80 */
+ 0, 0, 0x3E61, 0x3E62, 0, 0, 0, 0x3E63, /* 0x90 */
+ 0x3E64, 0, 0, 0, 0x3E65, 0x3E66, 0, 0x3E67, /* 0x90 */
+ 0x3E68, 0, 0, 0, 0, 0x3E69, 0, 0, /* 0xA0 */
+ 0x3E6A, 0, 0x3E6B, 0, 0, 0x3E6C, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x3E6D, 0x3E6E, 0, 0, 0x3E6F, 0, 0, 0, /* 0xB0 */
+ 0x3E70, 0x3E71, 0x3E72, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x3E73, 0x3E74, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x3E75, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x3E76, 0x3E77, 0x3E78, 0x3E79, /* 0xD0 */
+ 0, 0x3E7A, 0x3E7B, 0, 0, 0x3E7E, 0, 0x3E7C, /* 0xE0 */
+ 0, 0x3E7D, 0, 0, 0x3F21, 0x3F22, 0, 0x3F23 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3F24, 0, 0x3F25, 0x3F26, 0, 0, 0x3F27, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x3F28, 0, 0x3F29, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x3F2A, 0, 0, 0, /* 0x10 */
+ 0x3F2B, 0, 0x3F2C, 0x3F2D, 0, 0, 0, 0x3F2E, /* 0x20 */
+ 0, 0x3F2F, 0, 0x3F30, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x3F31, 0, 0, 0, 0x3F32, 0, 0, /* 0x30 */
+ 0, 0, 0x3F33, 0x3F34, 0x3F35, 0, 0x3F36, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x3F37, 0, 0, 0, /* 0x40 */
+ 0x3F38, 0x3F39, 0x3F3A, 0, 0x3F3B, 0, 0x3F3C, 0, /* 0x50 */
+ 0, 0, 0x3F3D, 0, 0x3F3E, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x3F3F, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x3F40, 0, 0x3F41, /* 0x60 */
+ 0, 0, 0, 0x3F42, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x3F43, 0, 0, 0x3F44, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x3F45, 0x3F46, 0x3F47, /* 0x80 */
+ 0x3F48, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x3F49, 0, /* 0xA0 */
+ 0x3F4A, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x3F4B, 0, 0, 0x3F4C, 0x3F4D, /* 0xB0 */
+ 0, 0, 0x3F4E, 0, 0, 0, 0x3F4F, 0x3F50, /* 0xB0 */
+ 0, 0, 0, 0, 0x3F51, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x3F52, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x3F53, 0x3F54, 0, /* 0xD0 */
+ 0, 0, 0x3F55, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x3F56, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x3F57, 0, 0x3F58, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x3F59, 0x3F5A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3F5B, 0x3F5C, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x3F5D, 0x3F5E, 0, 0x3F5F, 0, 0, /* 0x00 */
+ 0x3F60, 0, 0, 0x3F61, 0, 0, 0x3F62, 0, /* 0x10 */
+ 0x3F63, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x3F64, 0x3F65, 0, 0, 0x3F66, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x3F67, 0x3F68, 0, /* 0x30 */
+ 0, 0x3F69, 0, 0, 0x3F6A, 0, 0, 0, /* 0x30 */
+ 0, 0x3F6B, 0x3F6C, 0x3F6D, 0x3F6E, 0, 0x3F6F, 0, /* 0x40 */
+ 0, 0, 0x3F70, 0x3F71, 0, 0, 0x3F72, 0, /* 0x40 */
+ 0, 0, 0x3F73, 0x3F74, 0x3F75, 0, 0, 0, /* 0x50 */
+ 0x3F76, 0, 0, 0x3F77, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x3F78, 0x3F79, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x3F7A, 0x3F7B, 0, 0, /* 0x60 */
+ 0, 0x3F7C, 0, 0, 0x3F7D, 0x3F7E, 0, 0, /* 0x70 */
+ 0x4021, 0, 0, 0, 0x4022, 0x4023, 0, 0x4024, /* 0x70 */
+ 0, 0, 0x4025, 0, 0x4026, 0, 0, 0x4027, /* 0x80 */
+ 0, 0, 0x4028, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x4029, 0, 0, 0, 0x402A, 0x402B, 0, 0, /* 0x90 */
+ 0, 0x402C, 0x402D, 0, 0, 0, 0x402E, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x402F, 0, 0x4030, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x4031, 0x4032, 0x4033, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x4034, 0, 0, /* 0xB0 */
+ 0, 0x4035, 0, 0, 0, 0x4036, 0, 0, /* 0xC0 */
+ 0x4037, 0, 0, 0, 0, 0, 0x4038, 0, /* 0xC0 */
+ 0, 0x4039, 0, 0x403A, 0x403B, 0x403C, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x403D, 0, 0, 0, /* 0xD0 */
+ 0x403E, 0, 0, 0, 0, 0x403F, 0, 0, /* 0xE0 */
+ 0, 0, 0x4040, 0, 0x4041, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x4042, 0x4043, 0, 0x4044, 0, 0, /* 0xF0 */
+ 0x4045, 0x4046 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0x4047, 0x4048, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x4049, 0, 0x404A, 0, 0x404B, 0, 0, 0, /* 0x10 */
+ 0x404C, 0, 0, 0, 0, 0, 0x404D, 0, /* 0x10 */
+ 0x404E, 0, 0x404F, 0, 0x4050, 0x4051, 0, 0, /* 0x20 */
+ 0, 0x4052, 0x4053, 0, 0, 0, 0, 0x4054, /* 0x20 */
+ 0x4055, 0, 0, 0, 0, 0x4056, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x4057, 0, 0x4058, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x4059, 0, 0, 0, 0x405A, /* 0x40 */
+ 0, 0x405B, 0x405C, 0x405D, 0x405E, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x405F, 0x4060, 0x4061, 0x4062, 0, 0x4063, /* 0x50 */
+ 0x4064, 0x4065, 0, 0x4066, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x4067, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x4068, 0x4069, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x406A, 0, 0x406B, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x406C, 0, 0x406D, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0x406E, /* 0x80 */
+ 0x406F, 0x4070, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x4071, 0x4072, 0, 0x4073, 0, 0x4074, 0, 0x4075, /* 0x90 */
+ 0, 0x4076, 0, 0x4077, 0, 0, 0x4078, 0, /* 0xA0 */
+ 0x4079, 0, 0, 0, 0x407A, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x407B, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x407C, 0x407D, 0x407E, /* 0xB0 */
+ 0, 0, 0, 0, 0x4121, 0, 0, 0, /* 0xC0 */
+ 0, 0x4122, 0x4123, 0x4124, 0x4125, 0, 0x4126, 0, /* 0xC0 */
+ 0x4127, 0x4128, 0, 0, 0, 0x4129, 0, 0x412A, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x412B, 0x412C, 0, 0, /* 0xE0 */
+ 0, 0x412D, 0x412E, 0, 0, 0x412F, 0, 0, /* 0xE0 */
+ 0x4130, 0, 0, 0, 0, 0x4131, 0, 0x4132, /* 0xF0 */
+ 0, 0, 0, 0x4133, 0, 0, 0, 0x4134 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4135, 0, 0, 0x4136, 0, 0, 0, /* 0x00 */
+ 0x4137, 0x4138, 0x4139, 0, 0, 0, 0, 0x413A, /* 0x00 */
+ 0, 0, 0, 0x413B, 0x413C, 0, 0x413D, 0, /* 0x10 */
+ 0, 0x413E, 0, 0x413F, 0, 0, 0x4140, 0x4141, /* 0x10 */
+ 0, 0, 0x4142, 0, 0, 0, 0x4143, 0, /* 0x20 */
+ 0, 0x4144, 0, 0, 0, 0, 0x4145, 0, /* 0x20 */
+ 0, 0x4146, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x4147, 0, 0x4148, 0x4149, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x414A, 0, 0, 0, 0x414B, /* 0x40 */
+ 0, 0x414C, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x414D, 0, 0x414E, 0, 0x414F, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4150, /* 0x50 */
+ 0x4151, 0, 0, 0, 0, 0, 0, 0x4152, /* 0x60 */
+ 0, 0, 0, 0x4153, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x4154, 0, 0, 0x4155, 0, 0, /* 0x70 */
+ 0, 0x4156, 0, 0, 0, 0x4157, 0, 0, /* 0x80 */
+ 0, 0, 0x4158, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x4159, 0, 0, 0x415A, 0, 0, /* 0x90 */
+ 0x415B, 0, 0, 0, 0, 0x415C, 0, 0, /* 0x90 */
+ 0x415D, 0, 0, 0x415E, 0, 0, 0x415F, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x4160, 0, /* 0xA0 */
+ 0, 0, 0x4161, 0x4162, 0x4163, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4164, /* 0xB0 */
+ 0, 0, 0x4165, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x4166, 0x4167, 0, 0, 0, 0, 0x4168, 0, /* 0xC0 */
+ 0x4169, 0, 0, 0, 0x416A, 0, 0x416B, 0, /* 0xD0 */
+ 0x416C, 0, 0, 0, 0, 0, 0, 0x416D, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x416E, 0, 0x416F, 0, 0x4170, 0x4171, 0, 0, /* 0xF0 */
+ 0, 0x4172, 0, 0, 0, 0, 0x4173, 0x4174 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4175, 0, 0, 0, 0x4176, 0, 0, 0, /* 0x00 */
+ 0x4177, 0x4178, 0, 0, 0, 0x4179, 0, 0, /* 0x00 */
+ 0, 0x417A, 0x417B, 0, 0, 0x417C, 0x417D, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x417E, 0x4221, 0, /* 0x10 */
+ 0, 0x4222, 0x4223, 0x4224, 0x4225, 0, 0x4226, 0, /* 0x20 */
+ 0, 0x4227, 0x4228, 0x4229, 0x422A, 0, 0x422B, 0, /* 0x20 */
+ 0x422C, 0x422D, 0, 0x422E, 0, 0, 0, 0x4230, /* 0x30 */
+ 0, 0x422F, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x4231, 0, 0, 0, 0, 0x4232, 0x4233, 0, /* 0x40 */
+ 0, 0, 0x4234, 0, 0x4235, 0, 0x4237, 0, /* 0x40 */
+ 0, 0x4236, 0, 0, 0, 0, 0, 0x4238, /* 0x50 */
+ 0x4239, 0x423A, 0, 0x423B, 0x423C, 0, 0, 0, /* 0x50 */
+ 0x423D, 0x423E, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x4240, 0x4241, 0x4242, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x4244, 0, 0x4245, 0, 0x4247, /* 0x70 */
+ 0x4248, 0x4249, 0, 0x424A, 0x424C, 0, 0x4243, 0x4246, /* 0x70 */
+ 0x424B, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x424D, 0x424E, 0x424F, 0, 0, /* 0x80 */
+ 0x4250, 0, 0x4251, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x4252, 0x4253, 0x4254, 0x4255, 0, 0, 0x4256, /* 0x90 */
+ 0x4257, 0, 0, 0, 0x4258, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x4259, 0, 0, /* 0xA0 */
+ 0, 0x425A, 0x425B, 0, 0, 0x425C, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x425D, 0, 0, 0, 0x425E, /* 0xB0 */
+ 0x425F, 0, 0x4260, 0x4261, 0, 0, 0, 0, /* 0xC0 */
+ 0x4262, 0, 0, 0, 0x4263, 0, 0x4264, 0x4265, /* 0xC0 */
+ 0, 0, 0, 0, 0x4266, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x4267, 0, 0, 0, 0x4268, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x4269, 0, 0, 0x426A, 0x426B, 0, 0x426C, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x426D, 0x423F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x426E, 0, 0x426F, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x4270, 0, /* 0x00 */
+ 0, 0, 0, 0x4271, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x4272, 0, 0, 0x4273, 0, 0, 0, /* 0x10 */
+ 0x4274, 0, 0x4275, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x4276, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x4277, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x4278, 0, 0x4279, /* 0x40 */
+ 0x427A, 0, 0, 0, 0x427B, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x427C, 0x427D, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x427E, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x4321, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x4322, 0, 0x4323, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x4324, 0, 0x4325, 0, /* 0x70 */
+ 0, 0, 0, 0x4326, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x4327, 0, 0, 0x4328, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x4329, 0x432A, /* 0x80 */
+ 0, 0x432B, 0, 0x432C, 0, 0, 0x432D, 0, /* 0x90 */
+ 0x432E, 0x432F, 0, 0x4330, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x4331, 0x4332, 0x4333, 0, 0, 0x4334, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x4335, 0x4336, 0x4337, 0, 0, /* 0xB0 */
+ 0x4339, 0, 0x433A, 0x433B, 0, 0x433C, 0, 0, /* 0xC0 */
+ 0x433D, 0x433E, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x433F, 0, 0, 0, 0, 0x4340, /* 0xD0 */
+ 0, 0x4341, 0, 0, 0x4342, 0, 0, 0, /* 0xD0 */
+ 0, 0x4343, 0, 0, 0, 0, 0x4344, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x4345, 0, 0x4346, 0, 0, 0, 0x4347, 0x4348, /* 0xF0 */
+ 0, 0x4338 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x434A, 0, 0, 0, /* 0x10 */
+ 0, 0x434B, 0, 0, 0, 0x434C, 0, 0x434D, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0x434F, /* 0x20 */
+ 0x434E, 0, 0, 0, 0x4350, 0x4351, 0, 0x4352, /* 0x20 */
+ 0x4353, 0x4354, 0, 0x4355, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x4356, 0, 0, 0, 0x4357, /* 0x30 */
+ 0, 0, 0, 0, 0x4358, 0x4359, 0, 0, /* 0x40 */
+ 0, 0, 0x435A, 0, 0x435B, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x4349, 0, 0, 0x435C, 0, 0x435D, /* 0x50 */
+ 0x435E, 0, 0, 0x435F, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x4360, 0, 0, 0x4361, 0x4362, /* 0x60 */
+ 0x4363, 0x4364, 0x4365, 0, 0, 0x4366, 0, 0, /* 0x70 */
+ 0, 0x4367, 0x4368, 0x4369, 0x436A, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x436B, 0, 0x436C, 0, 0x436D, 0, /* 0x80 */
+ 0x436E, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x436F, 0, /* 0x90 */
+ 0x4370, 0, 0x4371, 0, 0x4372, 0, 0, 0, /* 0x90 */
+ 0, 0x4373, 0, 0x4374, 0, 0x4375, 0, 0, /* 0xA0 */
+ 0, 0x4376, 0x4377, 0, 0, 0, 0x4378, 0, /* 0xA0 */
+ 0, 0, 0x4379, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x437A, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x437B, 0, 0, /* 0xC0 */
+ 0x437C, 0, 0, 0, 0x437D, 0, 0, 0x437E, /* 0xC0 */
+ 0x4421, 0x4422, 0, 0x4423, 0, 0, 0x4424, 0, /* 0xD0 */
+ 0, 0x4425, 0, 0, 0x4426, 0x4427, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x4428, 0, 0, /* 0xE0 */
+ 0x4429, 0, 0x442A, 0x442B, 0x442C, 0x442D, 0, 0, /* 0xE0 */
+ 0x442E, 0x442F, 0, 0, 0, 0x4430, 0x4431, 0, /* 0xF0 */
+ 0, 0, 0, 0x4432, 0x4433, 0x4434 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4435, 0, /* 0x00 */
+ 0, 0x4436, 0x4437, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x4438, 0x4439, 0, 0x443A, 0, 0, 0x443B, 0x443C, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x443D, 0, 0x443E, 0, 0x443F, 0, 0, /* 0x30 */
+ 0x4440, 0, 0, 0x4441, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x4442, 0, 0, 0x4443, 0, 0, /* 0x40 */
+ 0, 0x4444, 0, 0, 0, 0, 0x4445, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4446, /* 0x50 */
+ 0, 0, 0, 0x4447, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x4448, 0x4449, 0x444A, 0x444B, 0, /* 0x60 */
+ 0x444C, 0x444D, 0, 0, 0x444E, 0, 0, 0, /* 0x60 */
+ 0x444F, 0x4450, 0x4451, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x4452, 0x4453, 0, 0, 0, 0x4454, /* 0x70 */
+ 0x4455, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x4456, 0, 0, /* 0x80 */
+ 0, 0, 0x4457, 0, 0, 0, 0x4458, 0, /* 0x90 */
+ 0x4459, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x445A, 0, 0, 0, 0x445B, 0x445C, 0, /* 0xA0 */
+ 0x445D, 0, 0, 0x445E, 0, 0x445F, 0, 0x4460, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4461, /* 0xB0 */
+ 0x4462, 0, 0x4463, 0, 0x4464, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x4465, 0, 0, /* 0xC0 */
+ 0x4466, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x4467, 0, 0, 0, 0, 0x4468, 0x4469, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x446A, 0, 0, 0x446B, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x446C, 0x446D, /* 0xE0 */
+ 0, 0x446E, 0, 0x446F, 0, 0x4470, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0x4471 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4472, 0x4473, 0, 0x4474, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4475, /* 0x00 */
+ 0, 0x4476, 0, 0, 0, 0x4477, 0, 0, /* 0x10 */
+ 0, 0, 0x4478, 0, 0, 0x4479, 0, 0, /* 0x10 */
+ 0x447A, 0, 0, 0, 0x447B, 0, 0, 0, /* 0x20 */
+ 0x447C, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x447D, 0, 0x447E, 0, 0x4521, 0, 0, 0x4522, /* 0x30 */
+ 0, 0, 0, 0x4523, 0, 0, 0x4524, 0x4525, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x4526, 0x4527, 0, /* 0x40 */
+ 0, 0x4528, 0x4529, 0, 0, 0, 0x452A, 0, /* 0x40 */
+ 0x452B, 0x452C, 0x452D, 0, 0, 0x452E, 0x452F, 0, /* 0x50 */
+ 0, 0, 0, 0x4530, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x4531, 0, 0, 0x4532, /* 0x60 */
+ 0, 0, 0x4533, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x4534, 0, 0x4535, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x4536, 0, /* 0x70 */
+ 0, 0x4537, 0, 0x4538, 0, 0, 0x4539, 0x453A, /* 0x80 */
+ 0, 0x453B, 0, 0x453C, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x453D, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x453E, 0, 0x453F, 0x4540, 0x4541, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x4542, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x4543, 0, 0, 0, 0x4544, /* 0xA0 */
+ 0x4545, 0x4546, 0, 0, 0x4547, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x4548, 0x4549, 0x454A, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x454B, 0, /* 0xC0 */
+ 0x454D, 0x454C, 0, 0, 0x454E, 0, 0, 0, /* 0xC0 */
+ 0x454F, 0, 0, 0, 0x4550, 0x4551, 0x4552, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x4553, 0x4554, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x4555, 0, 0, 0x4556, /* 0xE0 */
+ 0, 0, 0, 0, 0x4557, 0, 0, 0, /* 0xE0 */
+ 0x4558, 0x4559, 0x455A, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x455B, 0x455C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x455D, 0x455E, 0, 0, 0x455F, 0x4560, /* 0x00 */
+ 0, 0x4561, 0, 0, 0, 0, 0, 0x4562, /* 0x00 */
+ 0x4563, 0x4564, 0, 0, 0, 0, 0, 0x4565, /* 0x10 */
+ 0, 0, 0, 0x4566, 0, 0, 0x4567, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x4568, 0, 0, 0, /* 0x20 */
+ 0x4569, 0, 0, 0x456A, 0x456B, 0, 0, 0x456C, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x456D, 0x456E, 0, /* 0x30 */
+ 0, 0, 0, 0x456F, 0, 0, 0, 0x4570, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x4571, 0, /* 0x40 */
+ 0, 0, 0x4572, 0, 0, 0x4573, 0, 0, /* 0x40 */
+ 0, 0, 0x4574, 0, 0, 0, 0x4575, 0, /* 0x50 */
+ 0x4576, 0, 0, 0, 0, 0x4577, 0, 0, /* 0x50 */
+ 0x4578, 0, 0, 0, 0, 0, 0, 0x4579, /* 0x60 */
+ 0, 0, 0, 0x457A, 0, 0, 0x457B, 0, /* 0x60 */
+ 0x457C, 0, 0, 0, 0, 0x457D, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x457E, 0x4621, 0, /* 0x70 */
+ 0, 0, 0x4622, 0, 0, 0x4623, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4624, /* 0x90 */
+ 0, 0, 0, 0x4625, 0, 0, 0, 0x4626, /* 0x90 */
+ 0x4627, 0, 0x4628, 0x4629, 0, 0, 0, 0, /* 0xA0 */
+ 0x462A, 0x462B, 0, 0, 0x462C, 0x462D, 0x462E, 0, /* 0xA0 */
+ 0x462F, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x4630, 0x4631, 0, 0, 0, 0x4632, 0x4633, 0, /* 0xB0 */
+ 0, 0, 0, 0x4634, 0x4635, 0, 0, 0, /* 0xC0 */
+ 0, 0x4636, 0, 0, 0x4637, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x4638, 0, /* 0xD0 */
+ 0, 0, 0x4639, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x463A, 0, 0x463B, 0, 0, 0x463C, 0x463D, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x463E, 0, /* 0xE0 */
+ 0, 0x463F, 0, 0, 0, 0, 0, 0x4640, /* 0xF0 */
+ 0, 0x4641, 0, 0, 0, 0, 0, 0x4642 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4643, 0, 0x4644, 0x4645, 0, 0, /* 0x00 */
+ 0, 0x4646, 0, 0, 0, 0x4647, 0x4648, 0, /* 0x00 */
+ 0x4649, 0, 0x464A, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x464B, 0, 0, 0, 0, 0, 0x464C, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x464D, 0x464E, /* 0x20 */
+ 0x464F, 0, 0, 0, 0x4650, 0, 0x4651, 0, /* 0x20 */
+ 0, 0, 0, 0x4652, 0, 0x4653, 0x4654, 0, /* 0x30 */
+ 0, 0, 0x4655, 0x4656, 0, 0, 0, 0x4657, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x4658, 0x4659, 0, 0x465A, 0, 0x465B, /* 0x40 */
+ 0, 0, 0x465C, 0, 0x465D, 0, 0, 0, /* 0x50 */
+ 0, 0x465E, 0, 0x465F, 0x4660, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4736, /* 0x60 */
+ 0, 0, 0, 0x4661, 0, 0x4662, 0, 0x4663, /* 0x60 */
+ 0, 0, 0, 0, 0x4664, 0, 0x4665, 0, /* 0x70 */
+ 0x4666, 0x4667, 0, 0x4668, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x4669, 0x466A, 0x466B, /* 0x80 */
+ 0, 0x466C, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x466D, 0x466E, 0, 0x466F, /* 0x90 */
+ 0x4670, 0, 0, 0, 0x4671, 0, 0, 0x4672, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x4673, 0, 0x4674, 0, 0x4675, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x4676, 0, 0, 0, 0x4677, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x4678, 0, 0x4679, /* 0xC0 */
+ 0x467A, 0x467B, 0x467C, 0, 0x467D, 0, 0x467E, 0, /* 0xD0 */
+ 0, 0, 0x4721, 0, 0x4722, 0, 0, 0, /* 0xD0 */
+ 0x4723, 0, 0, 0, 0, 0, 0, 0x4724, /* 0xE0 */
+ 0, 0x4725, 0, 0x4726, 0x4727, 0, 0x4728, 0, /* 0xE0 */
+ 0, 0, 0x4729, 0, 0x472A /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x472B, 0, 0, 0x472C, /* 0x00 */
+ 0, 0, 0x472D, 0, 0, 0, 0x472E, 0x472F, /* 0x00 */
+ 0, 0x4730, 0, 0x4731, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x4732, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x4733, 0x4734, /* 0x20 */
+ 0x4735, 0, 0, 0, 0, 0, 0x4737, 0x4738, /* 0x20 */
+ 0, 0x4739, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x473A, 0, 0, 0x473B, 0, 0, 0x473C, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x473D, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x473E, 0x473F, /* 0x50 */
+ 0, 0x4740, 0, 0, 0, 0x4741, 0, 0x4742, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4743, /* 0x60 */
+ 0x4744, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x4745, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x4746, 0, 0, 0, 0, 0x4747, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x4748, 0x4749, 0, 0x474A, 0, 0x474B, 0x474C, /* 0x90 */
+ 0x474D, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x474E, 0, 0x474F, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x4750, 0, 0, 0x4751, /* 0xB0 */
+ 0, 0x4752, 0, 0, 0, 0x4753, 0, 0x4754, /* 0xB0 */
+ 0, 0, 0, 0, 0x4755, 0, 0, 0, /* 0xC0 */
+ 0x4756, 0, 0x4757, 0, 0, 0, 0x4758, 0x4759, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0x475A, 0, /* 0xD0 */
+ 0, 0, 0, 0x475B, 0, 0x475C, 0, 0x475D, /* 0xD0 */
+ 0x475E, 0, 0x475F, 0, 0, 0x4760, 0, 0, /* 0xE0 */
+ 0, 0x4761, 0, 0, 0, 0, 0, 0x4762, /* 0xE0 */
+ 0x4763, 0, 0, 0, 0x4764, 0, 0x4765, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x4766 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4767, 0, 0, 0, 0x4768, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x4769, 0, /* 0x10 */
+ 0, 0, 0x476A, 0, 0, 0, 0, 0x476B, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x476C, 0, 0, 0, 0x476D, 0, /* 0x30 */
+ 0, 0x476E, 0, 0x476F, 0x4770, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x4771, 0x4772, 0, 0, /* 0x40 */
+ 0x4773, 0x4774, 0, 0x4775, 0, 0, 0, 0x4776, /* 0x40 */
+ 0, 0x4777, 0x4778, 0x4779, 0x477A, 0, 0, 0x477B, /* 0x50 */
+ 0, 0, 0, 0, 0x477C, 0x477D, 0x477E, 0, /* 0x50 */
+ 0, 0, 0x4821, 0x4822, 0, 0, 0, 0, /* 0x60 */
+ 0x4823, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x4824, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x4825, 0, 0x4826, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x4827, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x4828, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x4829, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x482A, 0, 0, 0, 0, 0, 0, 0x482B, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x482C, 0x482D, 0, /* 0xA0 */
+ 0, 0x482E, 0, 0x482F, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x4830, 0, 0, 0, 0x4831, /* 0xB0 */
+ 0x4832, 0x4833, 0, 0x4834, 0, 0, 0, 0x4835, /* 0xC0 */
+ 0x4836, 0, 0x4837, 0, 0, 0x4838, 0x4839, 0x483A, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x483B, 0, 0x483C, 0x483D, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x483E, 0, 0x483F, 0, 0x4840 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4841, 0, 0, 0, /* 0x00 */
+ 0x4842, 0, 0x4843, 0, 0x4844, 0x4845, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x4846, 0, /* 0x10 */
+ 0x4847, 0, 0x4848, 0x4849, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x484A, 0, /* 0x20 */
+ 0, 0x484B, 0x484C, 0, 0, 0x4853, 0, 0x484D, /* 0x20 */
+ 0x484E, 0, 0, 0x484F, 0, 0, 0x4850, 0, /* 0x30 */
+ 0, 0, 0, 0x4851, 0x4852, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4854, /* 0x40 */
+ 0, 0x4855, 0x4856, 0x4857, 0, 0, 0, 0x4858, /* 0x50 */
+ 0, 0x4859, 0x485A, 0, 0, 0x485B, 0x485C, 0, /* 0x50 */
+ 0, 0x485D, 0x485E, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x485F, 0, 0, 0, 0x4860, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x4861, 0x4862, 0, /* 0x70 */
+ 0, 0, 0, 0x4863, 0, 0, 0, 0x4864, /* 0x80 */
+ 0x4865, 0, 0, 0x4866, 0x4867, 0x4868, 0, 0, /* 0x80 */
+ 0x4869, 0, 0x486A, 0x486B, 0x486C, 0, 0x486D, 0, /* 0x90 */
+ 0, 0, 0x486E, 0, 0, 0, 0, 0x486F, /* 0x90 */
+ 0x4870, 0, 0, 0, 0, 0x4871, 0x4872, 0x4873, /* 0xA0 */
+ 0x4874, 0, 0, 0, 0, 0, 0x4875, 0x4876, /* 0xA0 */
+ 0x4877, 0, 0, 0, 0, 0x4878, 0x4879, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x487A, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x487B, 0, 0x487C, /* 0xC0 */
+ 0x487D, 0, 0x487E, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x4921, 0, 0, 0, 0x4922, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x4923, 0x4924, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x4925, 0, 0, 0, 0, 0x4926, 0, 0, /* 0xF0 */
+ 0, 0x4927, 0, 0, 0x4928, 0x4929 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x492A, 0, 0, 0, 0, 0x492B, 0x492C, 0x492D, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x492E, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x492F, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x4930, 0, 0, 0x4931, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4932, /* 0x20 */
+ 0, 0, 0, 0, 0x4933, 0, 0, 0x4934, /* 0x30 */
+ 0, 0x4935, 0, 0, 0x4936, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x4937, 0x4938, 0, 0, 0, /* 0x40 */
+ 0x4939, 0x493A, 0x493B, 0x493C, 0, 0, 0x4941, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x493D, 0x493E, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x493F, 0x4940, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x4942, 0x4943, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x4944, 0, 0x4945, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x4946, 0x4947, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x4948, 0, /* 0x70 */
+ 0, 0x4949, 0, 0, 0, 0x494A, 0x494B, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x494C, 0x494D, 0x494E, 0x494F, /* 0x90 */
+ 0x4950, 0, 0, 0x4951, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x4952, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x4953, 0, 0, 0, 0, /* 0xA0 */
+ 0x4954, 0x4955, 0, 0, 0x4956, 0, 0, 0x4957, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x4958, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x4959, 0, 0x495A, 0x495B, 0x495C, 0x495D, 0, /* 0xD0 */
+ 0x495E, 0, 0, 0, 0x495F, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x4960, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x4961 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4962, 0x4963, 0x4964, 0x4965, 0x4966, /* 0x00 */
+ 0, 0, 0, 0x4967, 0x4968, 0, 0, 0x4969, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x496A, 0, /* 0x10 */
+ 0x496B, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x496C, 0, 0x496D, 0, 0x496E, /* 0x20 */
+ 0x496F, 0x4970, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x4971, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x4972, 0, 0, 0, 0x4973, 0x4974, 0x4975, /* 0x40 */
+ 0, 0, 0x4976, 0x4977, 0, 0, 0, 0, /* 0x40 */
+ 0x4978, 0, 0x4979, 0, 0, 0, 0, 0x497A, /* 0x50 */
+ 0, 0, 0x497B, 0, 0x497C, 0, 0x497D, 0, /* 0x50 */
+ 0x497E, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x4A21, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x4A22, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x4A23, 0, 0, 0, 0, 0x4A24, 0, 0x4A25, /* 0x80 */
+ 0, 0, 0, 0, 0x4A26, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x4A27, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x4A28, 0x4A29, 0, 0, 0, 0, /* 0x90 */
+ 0x4A2A, 0, 0x4A2B, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4A2C, /* 0xA0 */
+ 0x4A2D, 0, 0x4A2E, 0x4A2F, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x4A30, 0, 0, 0, 0, 0x4A31, /* 0xB0 */
+ 0x4A32, 0x4A33, 0, 0, 0x4A34, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x4A35, 0x4A36, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x4A37, 0, 0, 0x4A38, 0, /* 0xD0 */
+ 0, 0x4A39, 0x4A3A, 0, 0x4A3B, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x4A3C, 0, 0, 0, 0, 0, 0x4A3D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4A3E, 0, 0, 0, 0, 0, 0, 0x4A3F, /* 0x00 */
+ 0x4A40, 0x4A41, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x4A42, 0, 0, 0, 0x4A43, /* 0x10 */
+ 0, 0, 0x4A44, 0, 0, 0x4A45, 0, 0x4A46, /* 0x10 */
+ 0, 0, 0, 0, 0x4A47, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x4A48, 0, 0, 0, 0x4A49, /* 0x20 */
+ 0, 0, 0, 0, 0x4A4A, 0, 0, 0, /* 0x30 */
+ 0x4A4B, 0x4A4C, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x4A4D, 0x4A4E, 0x4A4F, 0, 0x4A50, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x4A51, 0x4A52, /* 0x40 */
+ 0x4A53, 0, 0, 0x4A54, 0, 0x4A55, 0x4A56, 0, /* 0x50 */
+ 0, 0, 0x4A57, 0, 0x4A58, 0, 0x4A59, 0, /* 0x50 */
+ 0x4A5A, 0, 0, 0x4A5B, 0, 0, 0, 0, /* 0x60 */
+ 0x4A5C, 0, 0, 0x4A5D, 0, 0, 0x4A5E, 0x4A5F, /* 0x60 */
+ 0, 0x4A60, 0, 0, 0, 0, 0, 0x4A61, /* 0x70 */
+ 0x4A62, 0, 0, 0x4A63, 0x4A64, 0, 0, 0x4A65, /* 0x70 */
+ 0, 0, 0, 0, 0x4A66, 0, 0, 0, /* 0x80 */
+ 0, 0x4A67, 0, 0, 0, 0x4A68, 0x4A69, 0, /* 0x80 */
+ 0, 0, 0, 0x4A6A, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x4A6B, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x4A6C, 0, 0, 0, 0, 0x4A6D, 0x4A6E, 0, /* 0xA0 */
+ 0, 0x4A6F, 0, 0, 0x4A70, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x4A71, 0, /* 0xB0 */
+ 0, 0x4A72, 0, 0, 0, 0, 0, 0x4A73, /* 0xC0 */
+ 0, 0x4A74, 0, 0, 0x4A75, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x4A76, 0x4A77, 0, /* 0xD0 */
+ 0x4A78, 0, 0, 0, 0, 0, 0, 0x4A79, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x4A7A, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x4A7B, 0x4A7C, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x4A7D, 0x4A7E, 0, 0, 0x4B21 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4B22, 0, 0x4B23, 0x4B24, 0, 0x4B25, /* 0x00 */
+ 0, 0, 0, 0x4B26, 0, 0x4B27, 0, 0, /* 0x00 */
+ 0, 0, 0x4B28, 0x4B29, 0, 0, 0, 0, /* 0x10 */
+ 0x4B2A, 0x4B2B, 0, 0, 0, 0, 0x4B2C, 0, /* 0x10 */
+ 0, 0, 0x4B2D, 0, 0x4B2E, 0, 0, 0x4B2F, /* 0x20 */
+ 0x4B30, 0, 0, 0, 0x4B31, 0, 0, 0, /* 0x20 */
+ 0, 0x4B32, 0x4B33, 0, 0, 0x4B34, 0, 0, /* 0x30 */
+ 0, 0, 0x4B35, 0x4B36, 0, 0x4B37, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x4B38, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x4B39, 0, 0, /* 0x40 */
+ 0x4B3A, 0, 0x4B3B, 0, 0, 0, 0x4B3C, 0, /* 0x50 */
+ 0x4B3D, 0, 0, 0, 0, 0x4B3E, 0x4B3F, 0x4B40, /* 0x50 */
+ 0x4B41, 0, 0, 0, 0, 0, 0x4B42, 0x4B43, /* 0x60 */
+ 0, 0x4B44, 0, 0x4B45, 0x4B46, 0, 0x4B47, 0x4B48, /* 0x60 */
+ 0, 0x4B49, 0, 0, 0, 0, 0, 0x4B4A, /* 0x70 */
+ 0, 0x4B4B, 0, 0, 0x4B4C, 0, 0, 0, /* 0x70 */
+ 0x4B4D, 0x4B4E, 0, 0x4B4F, 0, 0x4B50, 0x4B51, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x4B52, 0, /* 0x80 */
+ 0x4B53, 0, 0, 0x4B54, 0, 0x4B55, 0, 0x4B56, /* 0x90 */
+ 0x4B57, 0, 0, 0, 0x4B58, 0, 0x4B59, 0x4B5A, /* 0x90 */
+ 0x4B5B, 0, 0x4B5C, 0, 0, 0x4B5D, 0x4B5E, 0, /* 0xA0 */
+ 0, 0, 0x4B5F, 0x4B60, 0, 0x4B61, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x4B62, 0, 0x4B63, /* 0xB0 */
+ 0, 0x4B64, 0, 0, 0x4B65, 0x4B66, 0, 0x4B67, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x4B68, 0x4B69, 0, /* 0xC0 */
+ 0, 0x4B6A, 0, 0x4B6B, 0x4B6C, 0, 0, 0x4B6D, /* 0xC0 */
+ 0, 0, 0x4B6E, 0x4B6F, 0, 0, 0x4B70, 0, /* 0xD0 */
+ 0, 0x4B71, 0, 0, 0, 0x4B72, 0, 0, /* 0xD0 */
+ 0, 0x4B73, 0, 0x4B74, 0, 0, 0x4B75, 0x4B76, /* 0xE0 */
+ 0, 0x4B77, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x4B78, 0x4B79, 0, 0x4B7A, /* 0xF0 */
+ 0, 0x4B7B, 0x4B7C, 0x4B7D, 0, 0x4B7E, 0, 0x4C21 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4C22, 0x4C23, 0, 0, 0x4C24, 0, 0, 0x4C25, /* 0x00 */
+ 0, 0, 0x4C26, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x4C27, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x4C28, 0x4C29, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x4C2A, 0, 0x4C2B, 0, /* 0x20 */
+ 0x4C2C, 0x4C2D, 0x4C2E, 0x4C2F, 0x4C30, 0x4C31, 0x4C32, 0x4C33, /* 0x20 */
+ 0x4C34, 0x4C35, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x4C36, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x4C37, 0, 0, 0x4C38, 0x4C39, 0, 0x4C3A, 0x4C3B, /* 0x40 */
+ 0, 0, 0, 0x4C3C, 0, 0x4C3D, 0, 0, /* 0x40 */
+ 0, 0x4C3E, 0x4C3F, 0, 0, 0, 0, 0x4C40, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x4C41, 0, 0, /* 0x50 */
+ 0, 0, 0x4C42, 0, 0, 0, 0x4C43, 0x4C44, /* 0x60 */
+ 0x4C45, 0, 0, 0x4C46, 0, 0x4C47, 0x4C48, 0, /* 0x60 */
+ 0, 0x4C49, 0x4C4A, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x4C4B, 0x4C4C, 0, 0, 0, 0x4C4D, 0x4C4E, 0x4C4F, /* 0x80 */
+ 0, 0x4C50, 0, 0, 0, 0, 0, 0x4C51, /* 0x80 */
+ 0x4C52, 0x4C53, 0x4C54, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x4C55, 0x4C56, 0x4C57, 0, 0x4C58, 0, 0, 0x4C59, /* 0x90 */
+ 0x4C5A, 0x4C5B, 0, 0x4C5C, 0, 0, 0x4C5D, 0, /* 0xA0 */
+ 0x4C5E, 0x4C5F, 0x4C60, 0x4C61, 0, 0, 0x4C62, 0x4C63, /* 0xA0 */
+ 0, 0x4C64, 0x4C65, 0, 0, 0x4C66, 0, 0, /* 0xB0 */
+ 0, 0x4C67, 0, 0x4C68, 0, 0, 0, 0x4C69, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x4C6A, 0x4C6B, 0, 0, 0x4C6C, 0, 0, 0, /* 0xC0 */
+ 0x4C6D, 0, 0, 0x4C6E, 0, 0, 0, 0, /* 0xD0 */
+ 0x4C6F, 0, 0x4C70, 0x4C71, 0, 0, 0x4C72, 0x4C73, /* 0xD0 */
+ 0, 0, 0, 0, 0x4C74, 0, 0, 0, /* 0xE0 */
+ 0x4C75, 0, 0x4C76, 0x4C77, 0, 0, 0, 0x4C78, /* 0xE0 */
+ 0, 0, 0, 0, 0x4C79, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x4C7A, 0x4C7B, 0x4C7C, 0, 0, 0x4C7D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4C7E, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x4D21, 0, 0, 0, 0x4D22, 0x4D23, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x4D24, 0x4D25, 0, 0, 0x4D26, 0, 0, 0x4D27, /* 0x20 */
+ 0, 0x4D28, 0x4D29, 0, 0, 0, 0, 0x4D2A, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x4D2B, 0, /* 0x30 */
+ 0, 0x4D2C, 0, 0, 0, 0x4D2D, 0x4D2E, 0x4D2F, /* 0x30 */
+ 0x4D30, 0, 0, 0x4D31, 0, 0, 0, 0x4D32, /* 0x40 */
+ 0x4D33, 0, 0, 0, 0, 0, 0x4D34, 0, /* 0x40 */
+ 0x4D35, 0, 0x4D36, 0, 0, 0, 0, 0x4D37, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0x4D38, 0x4D39, /* 0x50 */
+ 0, 0x4D3A, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4D3B, /* 0x60 */
+ 0, 0x4D3C, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x4D3D, 0x4D3E, 0x4D3F, 0x4D40, 0x4D41, 0x4D42, 0, /* 0x70 */
+ 0, 0x4D43, 0, 0, 0, 0x4D44, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x4D45, 0, 0x4D46, 0x4D47, 0, 0x4D48, 0, 0, /* 0x90 */
+ 0, 0x4D49, 0, 0, 0x4D4A, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x4D4B, 0, 0x4D4C, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x4D4D, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x4D4E, 0, 0, 0, 0, 0x4D4F, /* 0xB0 */
+ 0x4D50, 0x4D51, 0, 0, 0x4D52, 0, 0x4D53, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x4D54, 0, 0x4D55, 0x4D56, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x4D57, /* 0xD0 */
+ 0, 0, 0, 0, 0x4D58, 0, 0, 0x4D59, /* 0xD0 */
+ 0x4D5A, 0x4D5B, 0, 0, 0x4D5C, 0, 0, 0x4D5D, /* 0xE0 */
+ 0, 0, 0, 0, 0x4D5E, 0, 0x4D5F, 0x4D60, /* 0xE0 */
+ 0, 0x4D61, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x4D62 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4D63, 0, 0x4D64, 0x4D65, 0x4D66, 0, 0, 0x4D67, /* 0x00 */
+ 0x4D68, 0, 0x4D69, 0, 0x4D6A, 0, 0, 0x4D6B, /* 0x00 */
+ 0, 0, 0x4D6C, 0x4D6D, 0, 0x4D6E, 0x4D6F, 0, /* 0x10 */
+ 0, 0x4D70, 0, 0x4D71, 0x4D72, 0x4D73, 0x4D74, 0, /* 0x10 */
+ 0, 0, 0, 0x4D75, 0, 0x4D76, 0x4D77, 0, /* 0x20 */
+ 0, 0x4D78, 0, 0, 0, 0x4D79, 0, 0, /* 0x20 */
+ 0, 0, 0x4D7A, 0x4D7B, 0, 0x4D7C, 0, 0, /* 0x30 */
+ 0x4D7D, 0x4D7E, 0x4E21, 0, 0x4E22, 0, 0, 0, /* 0x30 */
+ 0x4E24, 0x4E25, 0, 0x4E26, 0x4E27, 0x4E28, 0, 0, /* 0x40 */
+ 0, 0x4E29, 0x4E23, 0x4E2A, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x4E2B, 0, 0, /* 0x50 */
+ 0, 0x4E2C, 0, 0, 0, 0, 0, 0x4E2D, /* 0x50 */
+ 0, 0, 0, 0, 0x4E2E, 0x4E2F, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x4E30, 0x4E31, 0x4E32, /* 0x60 */
+ 0, 0x4E33, 0, 0, 0x4E34, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x4E35, 0, 0, 0, 0x4E36, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x4E37, 0x4E38, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x4E39, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x4E3A, 0x4E3B, 0x4E3C, 0, 0x4E3D, /* 0x90 */
+ 0x4E3E, 0, 0x4E3F, 0x4E40, 0x4E41, 0x4E42, 0x4E43, 0x4E44, /* 0xA0 */
+ 0x4E45, 0, 0x4E46, 0, 0, 0x4E47, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x4E48, 0, 0, /* 0xB0 */
+ 0, 0x4E49, 0, 0, 0, 0x4E4A, 0, 0, /* 0xC0 */
+ 0, 0x4E4B, 0, 0x4E4C, 0x4E4D, 0, 0x4E4E, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x4E4F, 0, 0, 0, /* 0xD0 */
+ 0, 0x4E50, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x4E51, 0, 0, 0, 0, 0, 0x4E52, 0, /* 0xE0 */
+ 0x4E53, 0, 0, 0, 0x4E54, 0, 0, 0, /* 0xE0 */
+ 0x4E55, 0x4E56, 0, 0, 0, 0, 0x4E57, 0, /* 0xF0 */
+ 0, 0x4E58, 0, 0, 0x4E59 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E5A, 0, 0, 0, 0, 0, 0x4E5B, 0, /* 0x00 */
+ 0, 0, 0x4E5C, 0, 0, 0, 0x4E5D, 0, /* 0x00 */
+ 0, 0, 0x4E5E, 0, 0x4E5F, 0x4E60, 0, 0x4E61, /* 0x10 */
+ 0, 0x4E62, 0x4E63, 0, 0x4E64, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x4E65, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x4E66, 0, 0, 0, 0, 0x4E67, 0x4E68, 0x4E69, /* 0x20 */
+ 0, 0, 0, 0, 0x4E6A, 0x4E6B, 0x4E6C, 0, /* 0x30 */
+ 0, 0x4E6D, 0, 0, 0, 0x4E6E, 0x4E6F, 0, /* 0x30 */
+ 0, 0, 0x4E70, 0, 0, 0x4E71, 0x4E72, 0, /* 0x40 */
+ 0, 0, 0x4E73, 0, 0, 0x4E74, 0x4E75, 0x4E76, /* 0x40 */
+ 0, 0, 0x4E77, 0, 0, 0, 0x4E78, 0x4E79, /* 0x50 */
+ 0, 0, 0, 0, 0x4E7A, 0, 0x4E7B, 0x4E7C, /* 0x50 */
+ 0x4E7D, 0, 0x4E7E, 0, 0x4F21, 0, 0, 0x4F22, /* 0x60 */
+ 0, 0, 0x4F23, 0, 0x4F24, 0, 0, 0, /* 0x60 */
+ 0x4F25, 0, 0x4F26, 0x4F27, 0x4F28, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x4F29, 0, 0, 0x4F2A, 0, 0, /* 0x70 */
+ 0x4F2B, 0, 0, 0, 0x4F2C, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x4F2D, 0x4F2E, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0x4F2F, 0x4F30, 0x4F31, 0, /* 0x90 */
+ 0, 0, 0x4F32, 0, 0, 0, 0, 0x4F33, /* 0x90 */
+ 0, 0, 0x4F34, 0, 0, 0, 0, 0x4F35, /* 0xA0 */
+ 0, 0, 0x4F36, 0, 0, 0, 0x4F37, 0x4F38, /* 0xA0 */
+ 0, 0x4F39, 0, 0, 0, 0x4F3A, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x4F3B, 0, /* 0xB0 */
+ 0, 0, 0, 0x4F3C, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x4F3D, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x4F3E, 0x4F3F, 0, 0, 0x4F40, 0, 0, /* 0xD0 */
+ 0, 0x4F41, 0, 0, 0, 0, 0x4F42, 0x4F43, /* 0xD0 */
+ 0x4F44, 0, 0, 0, 0x4F45, 0, 0x4F46, 0, /* 0xE0 */
+ 0, 0, 0x4F47, 0, 0x4F48, 0, 0, 0, /* 0xE0 */
+ 0x4F49, 0x4F4A, 0, 0, 0x4F4B, 0, 0, 0, /* 0xF0 */
+ 0x4F4C, 0, 0, 0x4F4D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F4E, 0x4F4F, 0, /* 0x00 */
+ 0, 0x4F50, 0, 0, 0, 0x4F51, 0x4F52, 0, /* 0x00 */
+ 0, 0x4F53, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x4F54, 0, 0, /* 0x10 */
+ 0, 0x4F55, 0x4F56, 0x4F57, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x4F58, 0x4F59, 0, /* 0x20 */
+ 0x4F5A, 0, 0, 0, 0, 0x4F5B, 0, 0x4F5C, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x4F5D, 0x4F5E, 0, 0, 0x4F5F, /* 0x40 */
+ 0x4F60, 0, 0, 0, 0x4F61, 0, 0x4F62, 0, /* 0x40 */
+ 0, 0, 0x4F63, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x4F64, 0, 0x4F65, 0, /* 0x50 */
+ 0x4F66, 0x4F67, 0, 0x4F68, 0x4F69, 0, 0, 0, /* 0x60 */
+ 0x4F6A, 0, 0x4F6B, 0, 0, 0, 0x4F6C, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x4F6D, 0, 0, 0, 0x4F6E, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x4F6F, 0, 0, 0, 0, 0x4F70, /* 0x80 */
+ 0, 0, 0, 0, 0x4F71, 0, 0, 0, /* 0x90 */
+ 0x4F72, 0, 0, 0, 0, 0x4F74, 0x4F75, 0x4F76, /* 0x90 */
+ 0, 0x4F73, 0, 0, 0x4F77, 0, 0, 0, /* 0xA0 */
+ 0x4F78, 0, 0, 0, 0x4F79, 0x4F7A, 0, 0, /* 0xA0 */
+ 0x4F7B, 0x4F7C, 0x4F7D, 0x4F7E, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x5021, 0, 0x5022, 0, 0x5023, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5024, /* 0xC0 */
+ 0x5025, 0x5026, 0, 0, 0x5027, 0, 0x5028, 0, /* 0xC0 */
+ 0, 0, 0x5029, 0x502A, 0, 0x502B, 0x502C, 0, /* 0xD0 */
+ 0, 0, 0, 0x502E, 0, 0, 0, 0x502F, /* 0xD0 */
+ 0x5030, 0x5031, 0, 0, 0x502D, 0, 0x5032, 0, /* 0xE0 */
+ 0, 0, 0x5033, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x5034, 0x5035, 0, 0, 0x5037, 0x5038, /* 0xF0 */
+ 0, 0, 0x5039, 0x503A, 0, 0, 0, 0x503B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5036, 0, 0, 0, 0, 0, 0x503C, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x503D, 0, 0, 0, /* 0x00 */
+ 0x503E, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x503F, 0, 0x5040, 0, 0x5041, 0x5042, /* 0x10 */
+ 0x5043, 0, 0, 0, 0, 0x5044, 0, 0x5045, /* 0x20 */
+ 0, 0x5046, 0, 0, 0, 0x5047, 0, 0, /* 0x20 */
+ 0, 0x5048, 0, 0, 0x5049, 0x504A, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x504B, 0, 0x504C, 0, 0x504D, /* 0x30 */
+ 0, 0, 0, 0, 0x504E, 0x504F, 0x5050, 0, /* 0x40 */
+ 0, 0, 0x5051, 0x5052, 0, 0, 0, 0x5053, /* 0x40 */
+ 0, 0x5054, 0, 0, 0x5055, 0, 0, 0, /* 0x50 */
+ 0x5056, 0, 0, 0x5057, 0x5058, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5059, /* 0x60 */
+ 0, 0x505A, 0, 0x505B, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0x505C, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x505D, 0, 0x505E, 0x505F, 0, 0x5060, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x5061, 0x5062, 0, 0, 0, /* 0x80 */
+ 0, 0x5063, 0, 0x5064, 0x5065, 0x5066, 0x5067, 0, /* 0x90 */
+ 0x5068, 0, 0, 0x5069, 0x506A, 0, 0, 0, /* 0x90 */
+ 0, 0x506B, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x506C, 0x506D, 0, 0x506E, 0, 0, 0, 0x506F, /* 0xA0 */
+ 0, 0x5070, 0, 0, 0x5071, 0, 0, 0, /* 0xB0 */
+ 0x5072, 0, 0, 0x5073, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x5074, 0, 0x5075, 0, 0, 0x5076, /* 0xC0 */
+ 0x5077, 0, 0x5078, 0, 0, 0, 0, 0x5079, /* 0xC0 */
+ 0, 0, 0, 0, 0x507A, 0, 0x507B, 0, /* 0xD0 */
+ 0, 0, 0x507C, 0, 0, 0x507D, 0x507E, 0, /* 0xD0 */
+ 0x5121, 0, 0x5122, 0, 0, 0x5123, 0, 0, /* 0xE0 */
+ 0, 0, 0x5124, 0x5125, 0, 0x5126, 0, 0, /* 0xE0 */
+ 0, 0x5127, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0x5128, 0, 0, 0, 0x5129 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x512A, 0x512B, 0, 0, 0, 0x512C, /* 0x00 */
+ 0, 0x512D, 0x512E, 0, 0x512F, 0, 0, 0, /* 0x00 */
+ 0, 0x5130, 0, 0, 0, 0x5131, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x5132, 0, 0, 0x5133, 0, /* 0x10 */
+ 0, 0x5134, 0, 0, 0, 0, 0, 0x5135, /* 0x20 */
+ 0, 0, 0, 0x5136, 0, 0x5137, 0, 0x5138, /* 0x20 */
+ 0x5139, 0, 0, 0, 0x513A, 0x513B, 0, 0, /* 0x30 */
+ 0x513C, 0x513D, 0x513E, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x513F, 0x5140, 0, 0x5141, /* 0x40 */
+ 0x5142, 0, 0, 0, 0x5143, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x5144, 0x5145, 0, /* 0x50 */
+ 0, 0x5146, 0, 0, 0x5147, 0x5148, 0, 0x5149, /* 0x50 */
+ 0x514A, 0, 0, 0, 0, 0x514B, 0, 0x514C, /* 0x60 */
+ 0, 0, 0x514D, 0, 0, 0x514E, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x514F, 0, 0, /* 0x70 */
+ 0x5150, 0, 0, 0, 0, 0, 0x5151, 0, /* 0x70 */
+ 0x5152, 0, 0x5153, 0, 0, 0x5154, 0x5155, 0, /* 0x80 */
+ 0, 0, 0x5156, 0x5157, 0, 0, 0, 0, /* 0x80 */
+ 0x5158, 0x5159, 0, 0, 0x515A, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x515B, 0, /* 0x90 */
+ 0x515C, 0, 0, 0x515D, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x515E, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x515F, 0, 0x5160, 0, 0, /* 0xB0 */
+ 0, 0x5161, 0, 0x5162, 0x5163, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x5164, 0, /* 0xC0 */
+ 0, 0x5165, 0, 0, 0x5166, 0, 0x5167, 0, /* 0xC0 */
+ 0, 0x5168, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x5169, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x516A, 0x516B, 0, 0x516C, 0x516D, 0, 0, 0, /* 0xE0 */
+ 0, 0x516E, 0, 0, 0x516F, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0x5170, 0, 0x5171, 0x5172 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5173, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x5174, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5175, /* 0x10 */
+ 0, 0, 0, 0x5176, 0, 0, 0, 0x5177, /* 0x20 */
+ 0, 0x5178, 0x5179, 0x517A, 0, 0x517B, 0x517C, 0x517D, /* 0x20 */
+ 0x517E, 0x5221, 0, 0, 0x5222, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x5223, 0, 0x5224, /* 0x30 */
+ 0x5225, 0x5226, 0, 0, 0, 0, 0, 0x5227, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x5228, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x5229, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x522A, 0, 0, 0, 0x522B, 0, 0x522C, 0, /* 0x60 */
+ 0, 0x522D, 0x522E, 0, 0, 0x522F, 0, 0x5230, /* 0x60 */
+ 0, 0, 0x5231, 0x5232, 0, 0, 0, 0x5233, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x5234, 0, 0, 0, /* 0x80 */
+ 0, 0x5235, 0, 0, 0, 0, 0x5236, 0, /* 0x80 */
+ 0x5237, 0x5238, 0, 0, 0, 0, 0x5239, 0, /* 0x90 */
+ 0, 0, 0, 0x523A, 0, 0, 0x523B, 0, /* 0x90 */
+ 0x523C, 0, 0, 0, 0, 0x523D, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x523E, 0, 0, 0x523F, /* 0xA0 */
+ 0x5240, 0, 0x5241, 0, 0, 0x5242, 0x5243, 0, /* 0xB0 */
+ 0, 0, 0x5244, 0x5245, 0x5246, 0x5247, 0, 0, /* 0xB0 */
+ 0, 0, 0x5248, 0, 0, 0x5249, 0, 0, /* 0xC0 */
+ 0x524A, 0, 0x524B, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x524C, 0, 0x524D, 0x524E, /* 0xD0 */
+ 0, 0x524F, 0x5250, 0x5251, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x5252, 0, 0x5253, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x5254, 0, 0x5255, 0x5256, 0, 0, /* 0xF0 */
+ 0x5257, 0x5258, 0x5259, 0, 0x525A, 0, 0x525B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x525C, 0x525D, 0x525E, 0x525F, 0, 0x5260, 0, /* 0x00 */
+ 0, 0x5261, 0, 0x5262, 0x5263, 0, 0x5264, 0x5265, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0x5266, 0, 0x5267, 0, 0, 0, 0, /* 0x10 */
+ 0x5268, 0, 0, 0, 0, 0x5269, 0x526A, 0, /* 0x20 */
+ 0x526B, 0, 0, 0, 0x526C, 0, 0, 0, /* 0x20 */
+ 0, 0x526D, 0, 0x526E, 0x526F, 0, 0x5270, 0, /* 0x30 */
+ 0, 0x5271, 0x5272, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x5273, 0, /* 0x40 */
+ 0, 0, 0x5274, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x5276, 0x5277, 0x5278, 0, 0x5275, 0, 0, /* 0x50 */
+ 0, 0x5279, 0x527A, 0x527B, 0x527C, 0x527D, 0x527E, 0, /* 0x50 */
+ 0, 0x5321, 0, 0x5322, 0, 0, 0, 0x5323, /* 0x60 */
+ 0, 0x5324, 0, 0, 0, 0x5325, 0x5326, 0, /* 0x60 */
+ 0x5327, 0, 0x5328, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x5329, 0, 0, 0x532A, 0x532B, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x532C, 0x532D, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0x532E, /* 0x80 */
+ 0, 0, 0, 0, 0x532F, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x5330, 0, /* 0x90 */
+ 0x5331, 0, 0, 0, 0, 0, 0x5332, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x5333, 0, 0, 0, 0, 0, 0x5334, 0x5335, /* 0xB0 */
+ 0, 0, 0x5336, 0x5337, 0x5338, 0, 0, 0x5339, /* 0xB0 */
+ 0, 0, 0, 0, 0x533A, 0, 0, 0x533B, /* 0xC0 */
+ 0x533C, 0x533D, 0, 0, 0, 0x533E, 0, 0x533F, /* 0xC0 */
+ 0, 0, 0, 0x5340, 0x5341, 0x5342, 0, 0x5343, /* 0xD0 */
+ 0, 0x5344, 0x5345, 0, 0, 0x5346, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0x5347, 0, /* 0xE0 */
+ 0, 0x5348, 0, 0x5349, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x534A /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x534B, 0, 0, 0, 0x534C, /* 0x00 */
+ 0x534D, 0x534E, 0, 0, 0, 0, 0, 0x534F, /* 0x00 */
+ 0, 0x5350, 0x5351, 0x5352, 0, 0, 0x5353, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x5354, 0x5355, 0, /* 0x10 */
+ 0, 0, 0, 0x5356, 0, 0, 0x5357, 0, /* 0x20 */
+ 0, 0, 0x5358, 0, 0, 0x5359, 0, 0, /* 0x20 */
+ 0, 0x535A, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x535B, 0x535C, 0x535D, 0, /* 0x30 */
+ 0x535E, 0x535F, 0, 0, 0, 0, 0, 0x5360, /* 0x40 */
+ 0x5361, 0, 0, 0, 0, 0x5362, 0, 0, /* 0x40 */
+ 0, 0x5363, 0, 0x5364, 0, 0, 0, 0x5365, /* 0x50 */
+ 0, 0x5366, 0x5367, 0, 0x5368, 0x5369, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x536A, 0, 0x536B, /* 0x60 */
+ 0, 0, 0x536C, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x536D, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x536E, 0, 0x536F, 0x5370, 0, 0, 0, 0x5371, /* 0x70 */
+ 0, 0x5372, 0x5373, 0x5374, 0, 0x5375, 0x5376, 0, /* 0x80 */
+ 0x5377, 0, 0, 0x5378, 0x5379, 0x537A, 0, 0, /* 0x80 */
+ 0, 0x537B, 0, 0, 0, 0, 0x537C, 0x537D, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x537E, 0x5421, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x5422, 0x5423, /* 0xA0 */
+ 0, 0, 0x5424, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x5425, 0, 0, 0x5426, 0x5427, /* 0xB0 */
+ 0, 0x5428, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x5429, 0x542A, 0x542B, 0x542C, 0x542D, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x542E, 0x542F, 0x5430, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5431, /* 0xD0 */
+ 0, 0x5432, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0x5434, 0, 0, 0x5435, 0x5436, 0, /* 0xE0 */
+ 0, 0, 0x5437, 0x5438, 0, 0x5439, 0, 0, /* 0xE0 */
+ 0, 0x543A, 0, 0, 0, 0x543B, 0x543C, 0, /* 0xF0 */
+ 0, 0x543D, 0x543E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5433, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x543F, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x5440, 0x5441, 0, 0, 0, 0x5442, 0, 0x5443, /* 0x10 */
+ 0, 0, 0, 0, 0x5444, 0x5445, 0, 0, /* 0x10 */
+ 0x5446, 0, 0, 0, 0, 0, 0, 0x5447, /* 0x20 */
+ 0x5448, 0, 0, 0, 0x5449, 0x544A, 0, 0x544B, /* 0x20 */
+ 0, 0, 0, 0x544C, 0, 0, 0x544D, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0x544E, /* 0x30 */
+ 0, 0, 0, 0, 0x544F, 0x5450, 0, 0x5451, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0x5452, 0, /* 0x40 */
+ 0x5453, 0, 0x5454, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x5455, 0, 0, 0, 0, 0, 0, 0x5456, /* 0x50 */
+ 0, 0x5457, 0x5458, 0, 0, 0x5459, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x545A, 0, 0, 0x545B, 0x545C, /* 0x60 */
+ 0, 0, 0, 0x545D, 0, 0, 0, 0, /* 0x70 */
+ 0x545E, 0, 0, 0, 0, 0, 0x545F, 0, /* 0x70 */
+ 0, 0x5460, 0, 0, 0, 0, 0x5461, 0x5462, /* 0x80 */
+ 0, 0, 0x5463, 0, 0, 0x5464, 0, 0, /* 0x80 */
+ 0, 0x5465, 0, 0, 0, 0x5466, 0, 0, /* 0x90 */
+ 0x5467, 0, 0x5468, 0, 0, 0x5469, 0x546A /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x30 */
+ 0x546C, 0x546B, 0x546D, 0x546E, 0x546F, /* 0x30 */
+ 0, 0, 0, 0x5470, 0x5471, 0, 0, 0x5472, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5473, /* 0x40 */
+ 0, 0, 0x5474, 0x5475, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x5476, 0x5477, 0x5478, 0, 0, /* 0x50 */
+ 0, 0x5479, 0, 0x547A, 0x547B, 0x547C, 0x547D, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x547E, 0, 0, /* 0x60 */
+ 0, 0x5521, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x5522, 0x5523, 0x5524, /* 0x70 */
+ 0x5525, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x5526, 0, 0x5527, 0, 0x5528, /* 0x80 */
+ 0x5529, 0x552A, 0, 0, 0, 0, 0x552B, 0x552C, /* 0x90 */
+ 0, 0, 0, 0, 0x552D, 0, 0, 0, /* 0x90 */
+ 0, 0x552E, 0x552F, 0, 0, 0, 0x5530, 0, /* 0xA0 */
+ 0, 0, 0x5531, 0, 0, 0x5532, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x5533, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0x5534, 0, 0, 0x5535, /* 0xB0 */
+ 0x5536, 0, 0, 0x5537, 0, 0, 0, 0, /* 0xC0 */
+ 0x5538, 0, 0, 0, 0, 0, 0x5539, 0x553A, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x553B, 0, 0, 0, 0x553C, /* 0xD0 */
+ 0, 0, 0, 0x553D, 0, 0x553E, 0, 0, /* 0xE0 */
+ 0x553F, 0, 0, 0, 0x5540, 0, 0x5541, 0x5542, /* 0xE0 */
+ 0, 0, 0x5543, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x5544, 0, 0, 0x5545, 0x5546, 0x5547 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5548, /* 0x00 */
+ 0x5549, 0, 0x554A, 0, 0, 0x554B, 0x554C, 0x554D, /* 0x00 */
+ 0, 0x554E, 0, 0x554F, 0x5550, 0, 0x5551, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0x5552, 0x5553, 0x5554, /* 0x10 */
+ 0x5555, 0, 0, 0, 0x5556, 0, 0x5557, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x5558, 0, 0x5559, 0, /* 0x20 */
+ 0x555A, 0, 0, 0, 0x555B, 0x555C, 0, 0x555D, /* 0x30 */
+ 0, 0x555E, 0x555F, 0, 0x5560, 0, 0x5561, 0, /* 0x30 */
+ 0x5562, 0, 0, 0, 0x5563, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x5564, 0, 0, 0, 0x5565, 0, 0x5566, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x5567, 0, 0, /* 0x60 */
+ 0, 0x5568, 0, 0, 0, 0x5569, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x556A, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x556B, 0, 0, 0, 0, 0, 0x556C, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x556D, 0, 0x556E, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x556F, 0x5570, /* 0xA0 */
+ 0, 0, 0, 0x5571, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0x5572, 0x5573, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x5574, 0, 0, 0, 0, 0x5575, 0, 0x5576, /* 0xC0 */
+ 0, 0, 0x5577, 0, 0x5578, 0x5579, 0, 0x557A, /* 0xD0 */
+ 0x557B, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x557C, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0x557D, 0x557E, 0, /* 0xE0 */
+ 0x5621, 0, 0x5622, 0x5623, 0, 0, 0x5624, 0, /* 0xF0 */
+ 0, 0x5625, 0x5626, 0, 0, 0, 0x5627 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5628, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x5629, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0x562A, 0x562B, /* 0x10 */
+ 0x562C, 0, 0, 0, 0x562D, 0, 0x562E, 0, /* 0x10 */
+ 0x562F, 0, 0, 0, 0x5630, 0, 0, 0x5631, /* 0x20 */
+ 0, 0, 0, 0, 0x5632, 0, 0, 0, /* 0x20 */
+ 0x5633, 0, 0, 0, 0, 0x5634, 0, 0, /* 0x30 */
+ 0, 0, 0x5635, 0, 0x5636, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x5637, 0, 0x5638, /* 0x40 */
+ 0, 0, 0x5639, 0, 0x563A, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x563B, 0, 0, 0, 0, 0x563C, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x563D, 0x563E, 0, 0, 0, 0, 0, 0x563F, /* 0x60 */
+ 0x5640, 0x5641, 0, 0, 0, 0x5642, 0, 0x5643, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5644, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x5645, 0, 0, 0x5647, 0x5648, 0x5649, 0, /* 0x80 */
+ 0, 0, 0, 0x564A, 0, 0, 0x564B, 0, /* 0x80 */
+ 0x5646, 0, 0, 0, 0, 0, 0x564C, 0, /* 0x90 */
+ 0x564D, 0, 0, 0x564E, 0, 0, 0x564F, 0, /* 0x90 */
+ 0, 0, 0x5650, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0x5651, 0, /* 0xA0 */
+ 0, 0, 0x5652, 0, 0x5653, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x5654, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0x5656, 0, 0x5657, 0, 0, /* 0xC0 */
+ 0, 0, 0x5658, 0x5655, 0, 0, 0x5659, 0x565A, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x565B, 0, 0x565C, /* 0xD0 */
+ 0, 0, 0, 0x565D, 0, 0x565E, 0x565F, 0, /* 0xD0 */
+ 0, 0x5660, 0, 0, 0x5661, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x5662, 0x5663, 0, 0, 0, /* 0xE0 */
+ 0x5664, 0x5665, 0x5666, 0, 0, 0x5667, 0x5668, 0, /* 0xF0 */
+ 0x5669, 0x566A, 0, 0, 0, 0x566B, 0, 0x566C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x566D, 0, 0, 0x566E, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x566F, /* 0x00 */
+ 0, 0, 0, 0x5670, 0x5671, 0, 0, 0, /* 0x10 */
+ 0, 0x5672, 0x5673, 0, 0, 0x5674, 0, 0, /* 0x10 */
+ 0, 0x5675, 0x5676, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x5677, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0x5678, 0, 0x5679, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x567A, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x567B, 0x567C, 0x567D, 0x567E, 0, /* 0x40 */
+ 0, 0, 0, 0x5721, 0, 0, 0x5722, 0x5723, /* 0x40 */
+ 0, 0x5724, 0, 0, 0, 0, 0x5725, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x5726, 0, 0, 0, /* 0x50 */
+ 0x5727, 0, 0, 0x5728, 0, 0, 0, 0x5729, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x572A, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x572B, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x572C, 0, 0x572D, 0, 0x572E, /* 0x70 */
+ 0x572F, 0x5730, 0, 0x5731, 0x5732, 0, 0, 0x5733, /* 0x80 */
+ 0, 0x5734, 0x5735, 0, 0, 0, 0x5736, 0, /* 0x80 */
+ 0, 0x5737, 0, 0, 0x5738, 0, 0x5739, 0, /* 0x90 */
+ 0x573A, 0, 0x573B, 0x573C, 0, 0, 0, 0, /* 0x90 */
+ 0x573D, 0x573E, 0, 0x573F, 0x5740, 0, 0, 0x5741, /* 0xA0 */
+ 0x5742, 0x5743, 0x5744, 0, 0, 0, 0x5745, 0, /* 0xA0 */
+ 0x5746, 0, 0x5747, 0, 0x5748, 0, 0, 0x5749, /* 0xB0 */
+ 0, 0, 0x574A, 0, 0x574B, 0, 0x574C, 0x574D, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x574E, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x574F, 0, 0, 0, 0, 0x5750, 0, 0, /* 0xD0 */
+ 0, 0, 0x5751, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x5752, 0, 0x5753, 0, 0x5754, 0, 0, 0, /* 0xE0 */
+ 0x5755, 0, 0x5756, 0, 0, 0x5757, 0, 0x5758, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x5759, 0x575A, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0x575B, 0x575C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x575D, 0x575E, 0, 0, 0, 0, 0, 0x575F, /* 0x00 */
+ 0x5760, 0, 0x5761, 0x5762, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x5764, 0, 0x5765, 0x5766, 0x5767, /* 0x10 */
+ 0, 0x5768, 0x5769, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x576A, 0x576B, 0x576C, 0, /* 0x20 */
+ 0x576D, 0, 0, 0x576E, 0, 0, 0, 0x576F, /* 0x30 */
+ 0, 0, 0x5770, 0, 0x5771, 0x5772, 0, 0, /* 0x30 */
+ 0, 0, 0x5773, 0x5774, 0x5775, 0, 0, 0x5776, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x5777, 0x5778, 0, /* 0x40 */
+ 0, 0x5779, 0, 0x583E, 0x5763, 0x577A, 0x577B, 0x577C, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x577D, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0x577E, 0, 0, 0, 0, 0x5821, 0, 0x5822, /* 0x70 */
+ 0x5823, 0, 0x5824, 0, 0x5825, 0, 0x5826, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x5827, 0, 0, /* 0x80 */
+ 0, 0, 0x5828, 0, 0x5829, 0x582A, 0, 0, /* 0x90 */
+ 0x582B, 0x582C, 0, 0x582D, 0x582E, 0x582F, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x5830, 0x5831, /* 0xA0 */
+ 0, 0x5832, 0, 0, 0x5833, 0x584C, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x5834, 0x5835, /* 0xB0 */
+ 0x5836, 0, 0, 0, 0, 0, 0, 0x5837, /* 0xC0 */
+ 0, 0x5838, 0, 0, 0, 0, 0, 0x5839, /* 0xC0 */
+ 0x583A, 0x583B, 0, 0, 0x583C, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x583D, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x583F, 0, 0x5840, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0x5841, 0, /* 0xF0 */
+ 0x5842, 0x5843, 0, 0, 0x5844 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5845, 0, 0, 0, 0, 0x5846, 0, /* 0x00 */
+ 0, 0, 0x5847, 0, 0, 0, 0, 0x5848, /* 0x00 */
+ 0, 0x5849, 0, 0, 0, 0x584A, 0, 0, /* 0x10 */
+ 0, 0x584B, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0x584D, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x584E, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x584F, 0, 0x5850, /* 0x40 */
+ 0x5851, 0, 0x5852, 0, 0, 0x5853, 0, 0x5854, /* 0x40 */
+ 0, 0x5855, 0x5856, 0, 0, 0, 0x5857, 0, /* 0x50 */
+ 0x5858, 0x5859, 0x585A, 0, 0x585B, 0, 0, 0, /* 0x50 */
+ 0x585C, 0, 0, 0, 0x585D, 0x585E, 0, 0x585F, /* 0x60 */
+ 0, 0, 0x5860, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x5861, 0, 0, 0x5862, 0x5863, 0, 0x5864, 0, /* 0x70 */
+ 0x5865, 0, 0, 0, 0x5866, 0x5867, 0, 0, /* 0x70 */
+ 0, 0x5868, 0, 0, 0, 0x5869, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0x586A, 0x586B, 0, 0x586C, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x586D, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x586E, 0, /* 0xA0 */
+ 0x586F, 0x5870, 0x5871, 0, 0, 0, 0, 0x5872, /* 0xA0 */
+ 0, 0x5873, 0, 0, 0x5874, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x5875, 0, 0, 0x5876, 0x5877, 0, /* 0xB0 */
+ 0x5878, 0, 0x5879, 0, 0, 0, 0, 0x587A, /* 0xC0 */
+ 0x587B, 0, 0, 0, 0x587C, 0, 0, 0x587D, /* 0xC0 */
+ 0, 0, 0, 0x587E, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x5921, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5922, /* 0xE0 */
+ 0, 0, 0x5923, 0, 0, 0, 0, 0x5924, /* 0xE0 */
+ 0x5925, 0x5926, 0x5927, 0, 0, 0, 0, 0x5928, /* 0xF0 */
+ 0, 0, 0x592A, 0x592B, 0, 0x592C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x592D, 0x592E, 0, 0, 0, 0x592F, /* 0x00 */
+ 0, 0, 0, 0, 0x5930, 0, 0x5931, 0, /* 0x00 */
+ 0x5932, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x5933, 0, 0x5934, 0, /* 0x10 */
+ 0, 0, 0x5935, 0x5936, 0x5937, 0x5938, 0, 0x5939, /* 0x20 */
+ 0, 0, 0x593A, 0x593B, 0, 0, 0, 0x593C, /* 0x20 */
+ 0, 0, 0x5929, 0x593D, 0x593E, 0, 0x593F, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5940, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x5941, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5942, /* 0x40 */
+ 0x5943, 0x5944, 0x5945, 0x5946, 0, 0, 0x5947, 0, /* 0x50 */
+ 0, 0x5948, 0, 0, 0x5949, 0x594A, 0x594B, 0x594C, /* 0x50 */
+ 0x594D, 0x594E, 0x594F, 0, 0x5950, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x5951, 0, 0, 0, 0x5952, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x5953, 0x5954, 0x5955, 0, 0x5956, 0, 0x5957, /* 0x70 */
+ 0, 0x5958, 0, 0, 0, 0x5959, 0x595A, 0, /* 0x80 */
+ 0, 0x595B, 0, 0x595C, 0x595D, 0, 0, 0x595E, /* 0x80 */
+ 0, 0, 0, 0x595F, 0, 0, 0, 0, /* 0x90 */
+ 0x5960, 0, 0, 0, 0, 0x5961, 0, 0x5962, /* 0x90 */
+ 0x5963, 0, 0x5964, 0, 0, 0x5965, 0, 0x5966, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x5974, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x5967, 0, 0x5968, 0x5969, /* 0xB0 */
+ 0x596A, 0, 0, 0, 0x596B, 0x596C, 0x596D, 0x596E, /* 0xB0 */
+ 0, 0, 0x596F, 0, 0, 0, 0, 0x5970, /* 0xC0 */
+ 0, 0, 0x5971, 0x5972, 0, 0, 0x5973, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x5975, 0, 0x5976, 0, 0, 0, 0, 0x5977, /* 0xD0 */
+ 0x5978, 0, 0, 0, 0, 0, 0x5979, 0, /* 0xE0 */
+ 0x597A, 0, 0, 0, 0, 0x597B, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x597C, 0, 0, 0x597D, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x597E, 0, 0, 0x5A21 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5A22, 0, 0, 0, 0x5A23, 0x5A24, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x5A25, 0x5A26, 0, /* 0x00 */
+ 0x5A27, 0x5A28, 0x5A29, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x5A2A, 0x5A2B, 0, 0x5A2C, 0, 0, 0x5A2D, 0, /* 0x10 */
+ 0, 0x5A2E, 0, 0, 0, 0, 0, 0x5A2F, /* 0x20 */
+ 0, 0x5A30, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x5A31, 0, /* 0x30 */
+ 0x5A32, 0, 0x5A33, 0, 0x5A34, 0x5A35, 0, 0, /* 0x30 */
+ 0x5A36, 0x3866, 0x5A37, 0, 0, 0, 0x5A38, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x5A39, 0x5A3A, 0, 0, 0x5A3B, 0x5A3C, /* 0x50 */
+ 0x5A3D, 0x5A3E, 0, 0, 0, 0x5A3F, 0, 0, /* 0x50 */
+ 0x5A40, 0x5A41, 0x5A42, 0x5A43, 0x5A44, 0, 0, 0, /* 0x60 */
+ 0, 0x5A45, 0, 0, 0x5A46, 0, 0, 0x5A47, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x5A48, 0x5A49, 0x5A4A, /* 0x70 */
+ 0, 0, 0x5A4B, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x5A6D, 0, 0, 0, 0, 0x5A4C, 0, 0, /* 0x80 */
+ 0, 0x5A4D, 0, 0, 0, 0, 0x5A4E, 0, /* 0x90 */
+ 0x5A4F, 0, 0x5A50, 0, 0x5A51, 0, 0, 0, /* 0x90 */
+ 0, 0x5A52, 0, 0, 0, 0, 0x5A53, 0x5A54, /* 0xA0 */
+ 0x5A55, 0, 0, 0, 0, 0x5A56, 0, 0, /* 0xA0 */
+ 0, 0x5A57, 0, 0x5A58, 0x5A59, 0x5A5A, 0, 0x5A5B, /* 0xB0 */
+ 0x5A5C, 0x5A5D, 0, 0, 0, 0, 0, 0x5A5E, /* 0xB0 */
+ 0x5A5F, 0x5A60, 0, 0x5A61, 0, 0x5A62, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x5A63, 0x5A64, 0, 0, 0x5A65, 0, 0x5A66, /* 0xD0 */
+ 0, 0, 0x5A67, 0, 0x5A68, 0, 0, 0, /* 0xD0 */
+ 0x5A69, 0, 0, 0x5A6A, 0, 0x5A6B, 0, 0x5A6C, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x5A6E, 0, 0x5A6F, 0x5A70 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5A71, 0x5A72, 0, 0x5A73, /* 0x00 */
+ 0, 0, 0, 0x5A74, 0, 0, 0x5A75, 0x5A76, /* 0x00 */
+ 0x5A77, 0, 0, 0x5A78, 0x5A79, 0, 0, 0, /* 0x10 */
+ 0, 0x5A7A, 0, 0, 0, 0, 0x5A7B, 0x5A7C, /* 0x10 */
+ 0, 0x5A7D, 0, 0x5A7E, 0, 0, 0, 0, /* 0x20 */
+ 0x5B21, 0, 0, 0, 0, 0, 0x5B22, 0x5B23, /* 0x20 */
+ 0, 0x5B24, 0x5B25, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x5B26, 0x5B27, 0, 0x5B28, 0x5B29, 0x5B2A, 0, /* 0x30 */
+ 0x5B2B, 0, 0, 0x5B2C, 0, 0x5B2D, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x5B2E, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x5B2F, 0, 0, 0, 0, 0x5B30, 0, 0, /* 0x50 */
+ 0, 0x5B31, 0, 0, 0x5B32, 0x5B33, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5B34, /* 0x60 */
+ 0, 0x5B35, 0x5B36, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x5B37, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x5B38, 0x5B39, 0x5B3A, 0x5B3B, 0x5B3C, /* 0x80 */
+ 0x5B3D, 0x5B3E, 0, 0x5B3F, 0x5B40, 0, 0, 0, /* 0x80 */
+ 0x5B41, 0, 0, 0x5B42, 0, 0x5B43, 0, 0x5B44, /* 0x90 */
+ 0x5B45, 0x5B46, 0, 0, 0, 0, 0x5B47, 0, /* 0x90 */
+ 0x5B48, 0, 0, 0x5B49, 0, 0, 0, 0x5B4A, /* 0xA0 */
+ 0, 0, 0, 0, 0x5B4B, 0x5B4C, 0x5B4D, 0, /* 0xA0 */
+ 0, 0x5B4E, 0, 0, 0, 0x5B4F, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x5B50, 0x5B51, /* 0xB0 */
+ 0, 0x5B52, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0x5B53, 0x5B54, 0x5B55, 0, 0, 0, 0x5B56, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x5B57, 0x5B58, 0, /* 0xD0 */
+ 0, 0x5B59, 0x5B5A, 0, 0x5B5B, 0, 0, 0x5B5C, /* 0xD0 */
+ 0, 0, 0x5B5D, 0x5B5E, 0x5B5F, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x5B60, 0x5B61, 0, 0x5B62, 0, 0, /* 0xE0 */
+ 0, 0x5B63, 0, 0x5B64, 0, 0, 0, 0, /* 0xF0 */
+ 0x5B65, 0, 0x5B66, 0, 0, 0, 0, 0x5B67 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5B68, 0, 0x5B69, 0, 0, 0x5B6A, 0, /* 0x00 */
+ 0, 0x5B6B, 0x5B6C, 0x5B6D, 0, 0, 0, 0, /* 0x00 */
+ 0x5B6E, 0, 0x5B70, 0x5B71, 0x5B72, 0, 0, 0, /* 0x10 */
+ 0x5B73, 0x5B6F, 0x5B74, 0x5B75, 0x5B76, 0, 0x5B77, 0x5B78, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x5B79, 0, 0, 0, 0, 0x5B7A, 0x5B7B, 0, /* 0x20 */
+ 0x5B7C, 0, 0x5B7D, 0, 0, 0x5B7E, 0, 0, /* 0x30 */
+ 0, 0, 0x5C21, 0, 0x5C22, 0, 0, 0, /* 0x30 */
+ 0, 0x5C23, 0, 0x5C24, 0, 0x5C25, 0, 0, /* 0x40 */
+ 0x5C26, 0x5C27, 0x5C28, 0x5C29, 0, 0, 0x5C2A, 0, /* 0x40 */
+ 0, 0x5C2B, 0, 0, 0, 0x5C2C, 0x5C2D, 0, /* 0x50 */
+ 0x5C2E, 0, 0x5C2F, 0, 0x5C30, 0, 0, 0x5C31, /* 0x50 */
+ 0x5C32, 0, 0, 0, 0x5C33, 0, 0, 0, /* 0x60 */
+ 0, 0x5C34, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x5C35, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x5C36, 0, 0x5C37, 0, 0, 0, 0, /* 0x70 */
+ 0x5C38, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x5C39, 0, 0x5C3A, 0x5C3B, 0x5C3C, 0, 0, 0x5C3D, /* 0x90 */
+ 0x5C3E, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x5C3F, 0, 0x5C40, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x5C41, 0, 0, 0x5C42, 0x5C43, 0, /* 0xB0 */
+ 0x5C44, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x5C45, 0x5C46, 0x5C47, 0x5C48, 0x5C49, 0, /* 0xC0 */
+ 0, 0x5C4A, 0x5C4B, 0x5C4C, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0x5C4D, 0, 0, 0x5C4E, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5C4F, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5C50, /* 0xE0 */
+ 0x5C51, 0x5C52, 0, 0, 0, 0x5C53, 0, 0x5C54 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5C55, 0, 0, 0, 0, 0x5C56, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x5C57, 0x5C58, 0x5C59, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x5C5A, 0x5C5B, 0, /* 0x10 */
+ 0x5C5C, 0x5C5D, 0x5C5E, 0, 0x5C5F, 0, 0, 0, /* 0x10 */
+ 0x5C60, 0, 0, 0, 0, 0, 0x5C61, 0x5C62, /* 0x20 */
+ 0x5C63, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x5C64, 0x5C65, 0x5C66, 0, 0, 0x5C67, 0, 0, /* 0x30 */
+ 0, 0x5C68, 0x5C69, 0, 0, 0, 0x5C6A, 0, /* 0x30 */
+ 0x5C6B, 0, 0x5C6C, 0, 0, 0x5C6D, 0x5C6E, 0, /* 0x40 */
+ 0, 0x5C6F, 0, 0, 0, 0, 0, 0x5C70, /* 0x40 */
+ 0, 0, 0x5C71, 0, 0, 0, 0, 0x5C72, /* 0x50 */
+ 0, 0, 0x5C73, 0x5C74, 0x5C75, 0, 0, 0, /* 0x50 */
+ 0, 0x5C76, 0x5C77, 0x5C78, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x5C79, 0, 0, 0x5C7A, 0, /* 0x60 */
+ 0x5C7B, 0, 0, 0x5C7C, 0, 0x5C7D, 0, 0, /* 0x70 */
+ 0, 0, 0x5C7E, 0x5D21, 0x5D22, 0x5D23, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x5D24, 0, 0, 0, 0x5D25, 0, 0, /* 0x80 */
+ 0x5D26, 0, 0, 0, 0x5D27, 0x5D28, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x5D29, 0x5D2A, 0, 0, 0x5D2B, /* 0x90 */
+ 0x5D2C, 0, 0, 0, 0, 0x5D2D, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x5D2E, 0, 0, 0, 0x5D2F, 0x5D30, 0x5D31, 0x5D32, /* 0xB0 */
+ 0, 0, 0, 0, 0x5D33, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x5D34, 0x5D35, 0x5D36, 0x5D37, /* 0xD0 */
+ 0x5D38, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x5D39, 0, 0, /* 0xE0 */
+ 0, 0x5D3A, 0, 0x5D3B, 0, 0x5D3C, 0, 0, /* 0xE0 */
+ 0, 0x5D3D, 0, 0x5D3E, 0, 0, 0x5D3F, 0, /* 0xF0 */
+ 0, 0x5D40, 0, 0, 0, 0x5D41, 0, 0x5D42 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5D43, 0x5D44, 0, 0x5D45, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5D46, /* 0x00 */
+ 0, 0x5D47, 0x5D48, 0, 0x5D49, 0x5D4A, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x5D4B, 0, /* 0x10 */
+ 0x5D4C, 0, 0x5D4D, 0, 0x5D4E, 0, 0x5D4F, 0, /* 0x20 */
+ 0, 0, 0, 0x5D50, 0x5D51, 0, 0, 0x5D52, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x5D53, 0, 0x5D54, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x5D55, 0x5D56, 0, /* 0x30 */
+ 0x5D57, 0, 0, 0x5D58, 0, 0x5D59, 0, 0x5D5A, /* 0x40 */
+ 0, 0x5D5B, 0, 0, 0, 0x5D5C, 0x5D5D, 0, /* 0x40 */
+ 0, 0, 0, 0x5D5E, 0, 0, 0x5D5F, 0x5D60, /* 0x50 */
+ 0x5D61, 0, 0, 0, 0x5D62, 0x5D63, 0, 0, /* 0x50 */
+ 0, 0x5D64, 0, 0, 0, 0x5D65, 0, 0x5D66, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x5D67, 0x5D68, 0x5D69, /* 0x70 */
+ 0, 0x5D6A, 0x5D6B, 0x5D6C, 0, 0, 0x5D6D, 0x5D6E, /* 0x70 */
+ 0x5D6F, 0, 0, 0x5D70, 0, 0, 0x5D71, 0, /* 0x80 */
+ 0, 0, 0, 0x5D72, 0, 0, 0, 0x5D73, /* 0x80 */
+ 0x5D74, 0, 0x5D75, 0, 0, 0, 0x5D76, 0x5D77, /* 0x90 */
+ 0, 0x5D78, 0, 0, 0, 0, 0, 0x5D79, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5D7A, /* 0xA0 */
+ 0, 0x5D7B, 0, 0, 0, 0, 0x5D7C, 0x5D7D, /* 0xA0 */
+ 0, 0, 0, 0x5D7E, 0, 0, 0x5E21, 0x5E22, /* 0xB0 */
+ 0, 0, 0, 0x5E23, 0, 0, 0x5E24, 0, /* 0xB0 */
+ 0, 0, 0, 0x5E25, 0, 0, 0x5E26, 0, /* 0xC0 */
+ 0x5E27, 0x5E28, 0x5E29, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x5E2A, 0, 0x5E2B, 0x5E2C, 0x5E2D, 0, 0x5E2E, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x5E2F, 0, 0x5E30, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0x5E31, 0, 0, 0, /* 0xE0 */
+ 0x5E32, 0, 0, 0, 0x5E33, 0x5E34, 0x5E35, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0x5E36, 0, 0, 0x5E37 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5E38, 0x5E39, 0, /* 0x00 */
+ 0, 0, 0x5E3F, 0x5E3A, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x5E3B, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x5E3C, 0, 0x5E3D, 0x5E3E, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x5E40, 0, 0, /* 0x20 */
+ 0x5E41, 0, 0, 0, 0, 0, 0, 0x5E42, /* 0x30 */
+ 0, 0, 0, 0, 0x5E43, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x5E44, 0x5E45, 0x5E46, 0x5E47, 0x5E48, 0, /* 0x40 */
+ 0x5E49, 0, 0, 0, 0, 0x5E4E, 0, 0, /* 0x40 */
+ 0, 0, 0x5E4A, 0x5E4B, 0x5E4C, 0, 0, 0, /* 0x50 */
+ 0, 0x5E4D, 0, 0, 0, 0, 0x5E4F, 0, /* 0x50 */
+ 0, 0, 0, 0x5E50, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x5E51, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0x5E52, 0, /* 0x70 */
+ 0x5E53, 0x5E54, 0, 0, 0x5E55, 0, 0x5E56, 0, /* 0x70 */
+ 0, 0x5E57, 0, 0, 0x5E58, 0x5E59, 0, 0, /* 0x80 */
+ 0, 0, 0, 0x5E5A, 0, 0x5E5B, 0, 0x5E5C, /* 0x80 */
+ 0, 0, 0, 0, 0x5E5D, 0x5E5E, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x5E5F, 0, 0x5E60, 0x5E61 /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x30 */
+ 0x5E62, 0x5E63, 0, 0, 0, 0x5E64, 0x5E65, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x5E66, 0, 0x5E67, /* 0x40 */
+ 0, 0x5E68, 0, 0x5E69, 0, 0, 0, 0x5E6A, /* 0x40 */
+ 0, 0x5E6B, 0, 0x5E6C, 0x5E6D, 0, 0, 0x5E6E, /* 0x50 */
+ 0x5E6F, 0x5E72, 0, 0x5E70, 0, 0x5E71, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x5E73, 0x5E74, 0, 0x5E75, 0, /* 0x60 */
+ 0x5E76, 0x5E77, 0, 0, 0, 0x5E78, 0, 0, /* 0x60 */
+ 0, 0, 0, 0x5E79, 0, 0x5E7A, 0x5E7B, 0, /* 0x70 */
+ 0, 0, 0, 0x5E7C, 0, 0, 0x5E7D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0x5E7E, 0x5F21, /* 0x80 */
+ 0, 0, 0, 0x5F22, 0, 0, 0, 0, /* 0x80 */
+ 0x5F23, 0, 0x5F24, 0x5F25, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5F26, 0, 0x5F27, 0x5F28, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x5F29, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x5F2A, 0x5F2B, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x5F2C, 0x5F2D, 0, /* 0xC0 */
+ 0, 0x5F2E, 0, 0x5F2F, 0, 0, 0, 0x5F30, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x5F32, 0x5F31, 0, /* 0xD0 */
+ 0, 0x5F33, 0, 0, 0, 0x5F34, 0, 0, /* 0xD0 */
+ 0, 0x5F35, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x5F36, 0, 0, 0, 0x5F37, 0, 0, 0x5F38, /* 0xE0 */
+ 0x5F39, 0, 0x5F3A, 0, 0, 0x5F3B, 0, 0x5F3C, /* 0xF0 */
+ 0x5F3D, 0, 0, 0, 0, 0, 0x5F3E, 0x5F3F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5F40, 0, 0x5F41, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x5F42, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0x5F43, 0, 0, 0, 0, 0x5F44, /* 0x10 */
+ 0, 0, 0, 0x5F45, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x5F46, 0, 0, /* 0x60 */
+ 0, 0x5F47, 0, 0, 0x5F48, 0, 0x5F49, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0x5F4A, /* 0x70 */
+ 0, 0, 0x5F4B, 0, 0x5F4C, 0, 0, 0, /* 0x80 */
+ 0x5F4D, 0, 0, 0, 0, 0x5F4E, 0, 0, /* 0x80 */
+ 0x5F4F, 0x5F50, 0, 0, 0, 0x5F51, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x5F52, 0x5F53, /* 0x90 */
+ 0x5F54, 0, 0, 0, 0, 0, 0x5F55, 0, /* 0xA0 */
+ 0, 0, 0, 0x5F56, 0x5F57, 0, 0, 0x5F58, /* 0xA0 */
+ 0, 0, 0x5F59, 0, 0, 0x5F5A, 0, 0x5F5B, /* 0xB0 */
+ 0, 0x5F5C, 0, 0x5F5D, 0x5F6F, 0, 0, 0, /* 0xB0 */
+ 0x5F5E, 0, 0, 0, 0, 0x5F5F, 0x5F60, 0x5F61, /* 0xC0 */
+ 0x5F62, 0, 0x5F63, 0, 0, 0, 0x5F64, 0, /* 0xC0 */
+ 0, 0x5F65, 0, 0, 0x5F66, 0x5F67, 0, 0x5F68, /* 0xD0 */
+ 0, 0x5F69, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x5F6A, 0x5F6B, 0, 0x5F6C, /* 0xE0 */
+ 0, 0, 0, 0, 0x5F6D, 0, 0, 0, /* 0xE0 */
+ 0x5F6E, 0x5F70, 0x5F71, 0, 0x5F72, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0x5F73 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5F74, 0, 0, 0x5F75, 0x5F76, 0x5F77, 0, /* 0x00 */
+ 0, 0, 0, 0x5F78, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x5F79, 0, 0, 0x5F7A, 0, 0x5F7B, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x5F7C, 0x5F7D, 0x5F7E, 0x6021, 0, 0, 0x6022, 0x6023, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x6024, 0, 0x6025, 0, 0, 0x6026, 0x6027, /* 0x30 */
+ 0x6028, 0x6029, 0, 0, 0, 0x602A, 0, 0, /* 0x30 */
+ 0x602B, 0x602C, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x602D, 0, 0x602E, 0x602F, 0x6030, /* 0x40 */
+ 0, 0, 0, 0, 0x6031, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x6032, 0x6033, 0x6034, 0x6035, 0, /* 0x50 */
+ 0, 0x6036, 0x6037, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x6038, 0, 0, 0x6039, 0x603A, 0, 0x603B, /* 0x60 */
+ 0x603C, 0x603D, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x603E, 0x603F, 0x6040, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x6041, 0x6042, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x6043, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x6044, 0, 0x6045, 0, 0, 0x6046, 0, 0, /* 0x90 */
+ 0, 0, 0x6047, 0x6048, 0, 0x6049, 0x604A, 0, /* 0x90 */
+ 0, 0, 0x604B, 0, 0, 0, 0, 0x604C, /* 0xA0 */
+ 0, 0x604D, 0, 0, 0, 0x604E, 0x604F, 0, /* 0xA0 */
+ 0, 0, 0, 0x6050, 0, 0x6051, 0, 0, /* 0xB0 */
+ 0, 0, 0x6052, 0x6053, 0, 0, 0, 0, /* 0xB0 */
+ 0x6054, 0x6055, 0, 0x6056, 0x6057, 0, 0, 0x6058, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6059, /* 0xC0 */
+ 0, 0x605A, 0, 0, 0x605B, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x605C, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0x605D, 0, 0, 0, 0, 0x6064, 0x605E, 0, /* 0xE0 */
+ 0x605F, 0x6060, 0, 0, 0, 0, 0, 0x6061, /* 0xF0 */
+ 0, 0x6062, 0x6063 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6065, 0, 0x6066, 0, 0, 0, 0, 0x6067, /* 0x00 */
+ 0x6068, 0, 0, 0, 0, 0, 0, 0x6069, /* 0x00 */
+ 0x606A, 0, 0, 0, 0, 0, 0x606B, 0x606C, /* 0x10 */
+ 0x606D, 0, 0, 0, 0, 0, 0x606E, 0, /* 0x10 */
+ 0x606F, 0x6070, 0, 0x6071, 0, 0x6072, 0, 0x6073, /* 0x20 */
+ 0x6074, 0, 0, 0, 0x6075, 0x6076, 0x6077, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x6078, 0x6079, 0x607A, 0x607B, /* 0x30 */
+ 0, 0, 0x607C, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x607D, 0x607E, 0, 0x6121, 0, 0, 0, 0x6122, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6123, /* 0x40 */
+ 0, 0x6124, 0x6125, 0x6126, 0x6127, 0x6128, 0, 0, /* 0x50 */
+ 0x6129, 0, 0, 0, 0, 0x612A, 0x612B, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x612C, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x612D, 0, 0, /* 0x90 */
+ 0x612E, 0x612F, 0, 0, 0x6130, 0x6131, 0x6132, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0x6133, 0x6134, 0, /* 0xB0 */
+ 0x6135, 0, 0, 0, 0, 0, 0x6136, 0, /* 0xB0 */
+ 0x6137, 0x6138, 0, 0, 0, 0, 0x6139, 0, /* 0xC0 */
+ 0, 0, 0x613A, 0x613B, 0, 0x613C, 0, 0, /* 0xC0 */
+ 0x613D, 0, 0x613E, 0x613F, 0, 0x6140, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x6141, 0, 0, 0x6142, 0x6143, 0, 0, 0, /* 0xE0 */
+ 0x6144, 0, 0, 0, 0, 0, 0x6145, 0, /* 0xE0 */
+ 0, 0x6146, 0, 0, 0, 0x6147, 0x6148, 0, /* 0xF0 */
+ 0, 0, 0, 0x6149, 0, 0, 0x614A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x614B, 0, 0x614C, 0, 0, 0, /* 0x00 */
+ 0x614D, 0, 0, 0, 0x614E, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0x614F, 0, 0, 0x6150, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0x6151, 0x6152, 0x6154, 0, 0x6155, 0x6156, 0, 0x6153, /* 0x20 */
+ 0, 0, 0, 0x6157, 0x6158, 0, 0, 0x6159, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0x615A, /* 0x30 */
+ 0, 0, 0, 0x615B, 0x615C, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x615D, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x615E, 0, 0x615F, 0, 0, /* 0x50 */
+ 0, 0, 0x6160, 0, 0, 0, 0x6161, 0x6162, /* 0x60 */
+ 0, 0, 0, 0, 0x6163, 0, 0, 0, /* 0x60 */
+ 0x6164, 0, 0, 0, 0x6165, 0, 0, 0, /* 0x70 */
+ 0, 0x6166, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0x6167, 0, 0, /* 0x80 */
+ 0x6168, 0, 0, 0x6169, 0x616A, 0, 0x616B, 0, /* 0x80 */
+ 0x616C, 0, 0, 0, 0, 0x616D, 0, 0x616E, /* 0x90 */
+ 0x616F, 0x6170, 0, 0x6171, 0, 0, 0, 0, /* 0x90 */
+ 0x6172, 0x6173, 0x6174, 0, 0, 0x6175, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x6176, 0, 0x6177, 0x6178, 0x6179, 0, 0x617A, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0x617B, 0x617D, 0, /* 0xB0 */
+ 0, 0, 0, 0x617E, 0x6221, 0x6222, 0, 0x6223, /* 0xC0 */
+ 0x6224, 0, 0, 0, 0x617C, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x622D, 0, 0, 0x6225, 0, 0x6226, /* 0xD0 */
+ 0x6227, 0x6228, 0, 0, 0x6229, 0x622A, 0, 0x622B, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x622C, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x622F, 0, 0, 0, 0x6230, /* 0xE0 */
+ 0x6231, 0, 0, 0, 0x6232, 0, 0x622E, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0x6233, 0x6234 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6235, 0, 0, 0, 0x6236, 0x6237, 0x6238, 0, /* 0x00 */
+ 0x6239, 0, 0, 0, 0, 0x623A, 0, 0, /* 0x00 */
+ 0x623B, 0, 0, 0, 0x623C, 0, 0x623D, 0x623E, /* 0x10 */
+ 0x623F, 0, 0x6240, 0, 0x6241, 0, 0x6242, 0, /* 0x10 */
+ 0x6243, 0, 0x6245, 0x6246, 0, 0x6244, 0, 0x6247, /* 0x20 */
+ 0, 0x6248, 0, 0, 0, 0, 0x6249, 0x624A, /* 0x20 */
+ 0, 0x624B, 0, 0, 0x624C, 0, 0x624D, 0x624E, /* 0x30 */
+ 0, 0x624F, 0x6250, 0, 0x6251, 0x6252, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x6253, 0, 0, 0, 0x6254, /* 0x40 */
+ 0x6255, 0, 0, 0, 0, 0, 0, 0x6256, /* 0x40 */
+ 0, 0, 0, 0x6257, 0, 0, 0, 0x6258, /* 0x50 */
+ 0, 0x6259, 0x625A, 0x625B, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x625C, 0, 0, 0x625D, 0, 0, 0x625E, /* 0x60 */
+ 0, 0, 0, 0, 0, 0x625F, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x6260, 0, 0, 0, /* 0x70 */
+ 0, 0x6261, 0x6262, 0x6263, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x6264, 0, 0x6265, 0, 0x6266, 0x6267, 0, /* 0x80 */
+ 0, 0, 0x6268, 0, 0, 0, 0x6269, 0, /* 0x80 */
+ 0, 0x626A, 0, 0x626B, 0x626C, 0x626D, 0, 0, /* 0x90 */
+ 0x626E, 0, 0, 0, 0, 0, 0x626F, 0, /* 0x90 */
+ 0, 0x6270, 0, 0, 0, 0, 0x6271, 0, /* 0xA0 */
+ 0x6272, 0, 0, 0, 0x6273, 0x6274, 0x6275, 0, /* 0xA0 */
+ 0x6276, 0x6277, 0x6278, 0x6279, 0, 0, 0x627A, 0, /* 0xB0 */
+ 0, 0, 0, 0x627B, 0x627C, 0x627D, 0, 0x627E, /* 0xB0 */
+ 0, 0, 0x6321, 0x6322, 0, 0x6323, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x6324, 0x6325, 0, 0, 0x6326, /* 0xD0 */
+ 0, 0x6327, 0x6328, 0, 0, 0, 0x6329, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0x632A, 0x632B, 0, 0, /* 0xE0 */
+ 0, 0x632C, 0x632D, 0, 0x632E, 0x632F, 0x6330, 0x6331, /* 0xE0 */
+ 0x6332, 0x6333, 0, 0, 0, 0, 0, 0x6334, /* 0xF0 */
+ 0, 0x6335, 0, 0x6336, 0, 0x6337 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6338, 0x6339, 0, 0, 0x633A, 0x633B, 0x633C, 0x633D, /* 0x00 */
+ 0, 0x633E, 0x633F, 0, 0x6340, 0, 0, 0, /* 0x00 */
+ 0x6341, 0, 0x6342, 0x6343, 0, 0, 0x6344, 0, /* 0x10 */
+ 0x6345, 0, 0, 0, 0x6346, 0x6347, 0, 0, /* 0x10 */
+ 0, 0, 0, 0x6348, 0x6349, 0x634A, 0x634B, 0, /* 0x20 */
+ 0x634C, 0, 0, 0, 0, 0, 0x634D, 0x634E, /* 0x20 */
+ 0x634F, 0, 0, 0x6350, 0, 0x6351, 0x6352, 0, /* 0x30 */
+ 0x6353, 0x6354, 0x6355, 0, 0x6356, 0, 0x6357, 0, /* 0x30 */
+ 0x6358, 0, 0x6359, 0x635A, 0, 0, 0x635B, 0x635C, /* 0x40 */
+ 0, 0, 0x635D, 0, 0, 0x635E, 0x635F, 0x6360, /* 0x40 */
+ 0, 0x6361, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0x6362, 0x6363, 0, 0, 0x6364, 0x6365, 0, 0, /* 0x50 */
+ 0x6366, 0x6367, 0, 0, 0, 0x6368, 0, 0x6369, /* 0x60 */
+ 0x636A, 0x636B, 0, 0, 0, 0, 0x636C, 0x636D, /* 0x60 */
+ 0x636E, 0, 0, 0, 0, 0x636F, 0x6370, 0x6371, /* 0x70 */
+ 0x6372, 0x6373, 0, 0x6374, 0x6375, 0x6376, 0, 0x6377, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x6378, 0x6379, 0x637A, 0, 0, 0x637B, 0x637C, 0, /* 0x80 */
+ 0, 0, 0x637D, 0, 0, 0, 0, 0x637E, /* 0x90 */
+ 0, 0x6421, 0, 0, 0, 0, 0, 0x6422, /* 0x90 */
+ 0x6423, 0, 0, 0, 0x6424, 0x6425, 0, 0x6426, /* 0xA0 */
+ 0x6427, 0, 0, 0x6428, 0, 0, 0, 0x6429, /* 0xA0 */
+ 0, 0, 0x642A, 0, 0, 0, 0x642B, 0, /* 0xB0 */
+ 0x642C, 0, 0x642D, 0x642E, 0x642F, 0x6430, 0, 0x6431, /* 0xB0 */
+ 0x6432, 0x6433, 0x6434, 0x6435, 0, 0x6436, 0x6437, 0x6438, /* 0xC0 */
+ 0x6439, 0, 0, 0x643A, 0x643B, 0x643C, 0x643D, 0, /* 0xC0 */
+ 0x643E, 0, 0, 0x643F, 0, 0x6440, 0, 0x6441, /* 0xD0 */
+ 0x6442, 0x6443, 0, 0, 0x6444, 0x6445, 0, 0x6446, /* 0xD0 */
+ 0x6447, 0x6448, 0, 0x6449, 0, 0x644A, 0, 0x644B, /* 0xE0 */
+ 0x644C, 0, 0, 0, 0x644D, 0, 0x644E, 0, /* 0xE0 */
+ 0x644F, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0x6450, 0, 0x6451, 0, 0, 0, 0x6452 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6453, 0, 0x6454, 0, 0, 0, 0, 0, /* 0x00 */
+ 0x6455, 0, 0, 0, 0, 0x6456, 0, 0, /* 0x00 */
+ 0, 0x6457, 0, 0, 0x6458, 0x6459, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0x645A, 0x645B, 0x645C, 0x645D, /* 0x10 */
+ 0, 0x645E, 0, 0, 0x645F, 0x6460, 0, 0x6461, /* 0x20 */
+ 0, 0x6462, 0x6463, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x6464, 0x6465, 0, 0x6466, 0x6467, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6468, /* 0x40 */
+ 0x6469, 0x646A, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x646B, 0x646C, 0x646D, 0, 0, 0x646E, 0, 0x646F, /* 0x50 */
+ 0x6470, 0, 0x6471, 0, 0, 0, 0x6472, 0, /* 0x50 */
+ 0, 0, 0, 0, 0x6473, 0x6474, 0, 0x6475, /* 0x60 */
+ 0, 0x6476, 0x6477, 0, 0, 0x6478, 0, 0x6479, /* 0x60 */
+ 0x647A, 0x647B, 0, 0x647C, 0x647D, 0, 0x647E, 0, /* 0x70 */
+ 0, 0, 0x6521, 0, 0, 0x6522, 0, 0x6523, /* 0x70 */
+ 0x6524, 0x6525, 0x6526, 0, 0, 0, 0, 0, /* 0x80 */
+ 0x6527, 0, 0x6528, 0x6529, 0, 0x652A, 0, 0x652B, /* 0x80 */
+ 0, 0, 0x652C, 0, 0, 0x652D, 0, 0, /* 0x90 */
+ 0x652E, 0, 0, 0x652F, 0, 0, 0x6530, 0, /* 0x90 */
+ 0, 0x6531, 0, 0x6532, 0x6533, 0, 0x6534, 0, /* 0xA0 */
+ 0x6535, 0x653B, 0, 0x6536, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x6537, 0x6538, 0x6539, 0, /* 0xB0 */
+ 0, 0, 0x653A, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x653C, 0, 0, 0x653D, 0x653E, 0x653F, 0x6540, /* 0xC0 */
+ 0, 0x6541, 0x6542, 0x6543, 0x6544, 0x6545, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x6546, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x6547, 0, 0, 0x6548, 0, 0x6549, 0x654A, /* 0xD0 */
+ 0, 0, 0x654B, 0, 0, 0, 0x654C, 0x654D, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x654F, /* 0xF0 */
+ 0x6550, 0x654E, 0x6551, 0x6552, 0, 0x6553 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6554, 0x6555, 0, 0x6556, 0, 0, 0, /* 0x00 */
+ 0x6557, 0x6558, 0, 0, 0, 0x6559, 0x655A, 0x655B, /* 0x00 */
+ 0, 0, 0, 0, 0, 0x655C, 0x655D, 0x655E, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0x655F, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0x6560, 0x6561, /* 0x20 */
+ 0, 0x6562, 0x6563, 0x6564, 0x6565, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0x6566, 0, 0x6568, 0, 0x6567, /* 0x30 */
+ 0, 0, 0, 0x6569, 0, 0x656A, 0, 0, /* 0x40 */
+ 0x656B, 0, 0x656C, 0, 0x656D, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x656E, 0, 0, /* 0x50 */
+ 0, 0x656F, 0, 0, 0x6570, 0, 0, 0x6571, /* 0x50 */
+ 0, 0x6572, 0, 0x6573, 0, 0, 0, 0, /* 0x60 */
+ 0x6574, 0, 0, 0x6575, 0, 0x6576, 0x6577, 0x6578, /* 0x60 */
+ 0, 0x6579, 0x657A, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x657C, 0x657B /* 0x80 */
+ /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x70 */
+ 0x657D, 0x657E, 0, 0, 0, 0, 0x6621, 0, /* 0x70 */
+ 0, 0, 0, 0, 0x6622, 0, 0, 0, /* 0x80 */
+ 0x6623, 0, 0, 0, 0x6624, 0x6625, 0x6626, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0x6627, 0x6628, 0x6629, /* 0x90 */
+ 0, 0x662A, 0, 0, 0, 0, 0x662B, 0, /* 0xA0 */
+ 0, 0x662C, 0, 0x662D, 0x662E, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x662F, 0, 0x6630, 0, /* 0xB0 */
+ 0, 0, 0x6631, 0, 0, 0x6632, 0, 0x6633, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x6634, 0, /* 0xC0 */
+ 0x6635, 0x6636, 0, 0x6637, 0, 0, 0, 0, /* 0xC0 */
+ 0x6638, 0x6639, 0x663A, 0x663B, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x663C, 0x663D, 0, 0, 0x663E, 0x663F, 0x6640, /* 0xD0 */
+ 0x6641, 0, 0, 0, 0x6642, 0, 0x6643 /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0x6644, 0x6645, 0, /* 0x10 */
+ 0, 0, 0x6646, 0, 0x6647, 0x6648, 0x6649, 0, /* 0x20 */
+ 0, 0, 0, 0, 0x664A, 0, 0, 0, /* 0x20 */
+ 0, 0x664B, 0, 0x664C, 0, 0, 0, 0x664D, /* 0x30 */
+ 0x664E, 0x664F, 0x6650, 0, 0x6651, 0x6652, 0, 0, /* 0x30 */
+ 0, 0x6653, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x6654, 0, 0x6655, 0, 0x6656, 0x6657, /* 0x50 */
+ 0x6658, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x6659, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0x665A, 0, /* 0x60 */
+ 0, 0, 0, 0, 0x665B, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0x665C, 0x665D, 0, 0x665E, 0x665F, /* 0x70 */
+ 0, 0x6660, 0x6661, 0x6662, 0x6663, 0, 0, 0, /* 0x80 */
+ 0, 0x6664, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x6665, 0, 0, 0, 0, 0x6666, 0, /* 0x90 */
+ 0, 0, 0x6667, 0, 0, 0x6668, 0, 0x6669, /* 0x90 */
+ 0, 0, 0, 0, 0x666A, 0x666B, 0x666C, 0, /* 0xA0 */
+ 0, 0x666D, 0, 0, 0, 0, 0x666E, 0x666F, /* 0xA0 */
+ 0, 0, 0, 0x6670, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0x6671, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x6672, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0x6673, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0x6675, 0, 0x6676, 0, 0, 0x6677, 0x6678, 0x6679, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0x667A, 0, 0, 0, 0, 0, 0x667B, /* 0xE0 */
+ 0, 0x667C, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0x667D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x667E, 0x6721, 0, 0x6722, 0, 0, /* 0x00 */
+ 0, 0x6723, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x6724, 0x6725, 0, 0x6726, 0, 0, /* 0x10 */
+ 0, 0x6727, 0x6728, 0x6729, 0, 0, 0, 0, /* 0x20 */
+ 0x672A, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x672B, 0, 0x672C, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x672D, 0, 0x672E, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0x672F, 0, 0, 0, 0x6730, 0x6731, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x6732, 0, 0x6733, /* 0x50 */
+ 0x6734, 0, 0x6735, 0x6736, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0x6737, 0, 0, 0, 0x6738, /* 0x60 */
+ 0, 0, 0x6739, 0, 0, 0, 0x673A, 0, /* 0x60 */
+ 0, 0, 0, 0x673B, 0, 0, 0x673C, 0x673D, /* 0x70 */
+ 0x673E, 0, 0, 0x673F, 0, 0x6740, 0, 0x6741, /* 0x70 */
+ 0x6742, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x6743, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0x6744, 0x6745, 0x6746, /* 0x90 */
+ 0, 0x6747, 0x6748, 0, 0, 0, 0x6749, 0x674A, /* 0x90 */
+ 0, 0, 0x674B, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x674C, 0, 0x674D, 0, /* 0xA0 */
+ 0, 0x674E, 0x674F, 0, 0, 0x6750, 0x6751, 0, /* 0xB0 */
+ 0x6752, 0x6753, 0x6754, 0, 0x6755, 0, 0x6756, 0x6757, /* 0xB0 */
+ 0, 0x6758, 0, 0, 0x6759, 0x675A, 0, 0x675B, /* 0xC0 */
+ 0, 0x675C, 0x675D, 0, 0x675E, 0x675F, 0x6760, 0, /* 0xC0 */
+ 0x6761, 0x6762, 0, 0, 0x6763, 0, 0, 0x6764, /* 0xD0 */
+ 0x6765, 0x6766, 0, 0x676A, 0, 0x6767, 0x6768, 0, /* 0xD0 */
+ 0x6769, 0x676B, 0, 0, 0x676C, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x676D, /* 0xE0 */
+ 0, 0x676E, 0, 0, 0x676F, 0, 0, 0x6770, /* 0xF0 */
+ 0x6771, 0, 0x6772 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6773, /* 0x00 */
+ 0, 0, 0x6774, 0, 0, 0x6776, 0x6777, 0, /* 0x00 */
+ 0, 0, 0, 0, 0x6778, 0, 0x6779, 0, /* 0x10 */
+ 0, 0x6775, 0, 0, 0x677A, 0, 0x677B, 0, /* 0x10 */
+ 0x677C, 0, 0, 0x677D, 0, 0x6828, 0x677E, 0, /* 0x20 */
+ 0, 0, 0, 0x6821, 0, 0, 0x6822, 0x6823, /* 0x20 */
+ 0x6824, 0, 0x6825, 0x6826, 0, 0x6827, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0x6829, 0, /* 0x30 */
+ 0, 0, 0, 0, 0x682A, 0, 0, 0x682B, /* 0x40 */
+ 0, 0, 0x682C, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x682D, 0x682E, 0x682F, 0, 0, 0x6830, 0x6831, /* 0x50 */
+ 0, 0x6832, 0x6833, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0x6834, 0x6835, 0, 0x6836, 0x6837, 0, /* 0x60 */
+ 0, 0, 0x6838, 0, 0x6839, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0x683A, 0, 0x683B, 0x683C, 0, /* 0xA0 */
+ 0x683D, 0, 0, 0, 0x683E, 0, 0, 0x683F, /* 0xB0 */
+ 0x6840, 0, 0x6841, 0x6842, 0, 0, 0, 0x6843, /* 0xB0 */
+ 0, 0, 0x6844, 0, 0, 0x6845, 0, 0, /* 0xC0 */
+ 0x6846, 0, 0, 0, 0x6847, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x6848, 0, 0x6849, 0, 0x684A, 0x684B, 0x684C, /* 0xE0 */
+ 0, 0, 0x684D, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0x684E, 0, 0, 0x684F /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6850, 0, 0, 0, 0, 0x6851, /* 0x00 */
+ 0x6852, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x6853, 0, 0, 0, 0x6854, 0x6855, 0x6856, /* 0x10 */
+ 0, 0, 0x6857, 0x6858, 0x6859, 0, 0, 0x685A, /* 0x10 */
+ 0, 0, 0x685B, 0, 0, 0, 0x685C, 0x685D, /* 0x20 */
+ 0, 0, 0, 0x685E, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x685F, 0x6860, 0x6861, 0x6862, 0x6863, 0, 0, /* 0x30 */
+ 0, 0x6864, 0x6865, 0x6866, 0x6867, 0, 0, 0, /* 0x30 */
+ 0x6868, 0x6869, 0, 0, 0, 0, 0x686A, 0x686B, /* 0x40 */
+ 0x686C, 0, 0, 0, 0, 0x686D, 0x686E, 0, /* 0x40 */
+ 0, 0, 0, 0, 0x686F, 0, 0, 0, /* 0x50 */
+ 0x6870, 0x6871, 0, 0x6872, 0x6873, 0, 0x6874, 0x6875, /* 0x50 */
+ 0x6876, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0x6877, 0, 0x6878, 0, 0x6879, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x687A, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x687B, 0x687C, 0x687D, 0, 0, 0x687E, 0, 0, /* 0xB0 */
+ 0, 0x6921, 0x6922, 0, 0, 0x6923, 0, 0x6924, /* 0xB0 */
+ 0, 0, 0, 0x6925, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x6926, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0x6927, 0x6928, 0, 0, 0, /* 0xD0 */
+ 0, 0x6929, 0x692A, 0, 0x692B, 0, 0x692C, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x692D, /* 0xE0 */
+ 0, 0, 0x692E, 0x692F, 0x6930, 0, 0, 0, /* 0xE0 */
+ 0x6931, 0, 0, 0, 0x6932, 0x6933, 0, 0, /* 0xF0 */
+ 0, 0x6934, 0, 0, 0, 0x6935, 0x6936 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6937, 0x6938, 0x6939, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x693A, 0x693B, 0, 0, 0, /* 0x00 */
+ 0x693C, 0x693D, 0, 0, 0, 0, 0x693E, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0x693F, 0, /* 0x10 */
+ 0x6940, 0, 0x6941, 0x6942, 0x6943, 0, 0, 0x6944, /* 0x20 */
+ 0, 0, 0, 0, 0, 0x6945, 0x6946, 0, /* 0x20 */
+ 0, 0, 0, 0x6947, 0, 0x6948, 0x6949, 0, /* 0x30 */
+ 0x694A, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0x694C, 0, 0, 0x694D, 0, 0, 0x694B, /* 0x40 */
+ 0, 0, 0x694E, 0x694F, 0x6950, 0, 0x6951, 0, /* 0x40 */
+ 0, 0x6952, 0, 0, 0x6953, 0, 0x6954, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0x6955, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x6956, 0, 0x6957, 0, 0x6958, 0x6959, /* 0xA0 */
+ 0, 0, 0x695A, 0, 0x695B, 0x695C, 0x695D, 0, /* 0xB0 */
+ 0, 0x695E, 0, 0x695F, 0, 0, 0x6960, 0x6961, /* 0xB0 */
+ 0, 0x6962, 0, 0x6963, 0, 0, 0x6964, 0, /* 0xC0 */
+ 0x6965, 0, 0, 0, 0, 0, 0x6966, 0, /* 0xC0 */
+ 0x6967, 0, 0x6968, 0, 0, 0x6969, 0x696A, 0x696B, /* 0xD0 */
+ 0, 0, 0, 0x696C, 0x696D, 0, 0, 0, /* 0xD0 */
+ 0x696E, 0, 0, 0, 0x696F, 0x6970, 0, 0x6971, /* 0xE0 */
+ 0, 0x6972, 0, 0, 0x6973, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x6974, 0x6975, 0, 0x6976, 0, 0, /* 0xF0 */
+ 0, 0x6977, 0x6978, 0, 0, 0x6979, 0, 0x697A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x697B, 0x697C, 0x697D, 0x697E, 0x6A21, 0x6A22, 0, 0, /* 0x00 */
+ 0x6A23, 0x6A24, 0, 0x6A25, 0x6A26, 0x6A27, 0x6A28, 0, /* 0x00 */
+ 0x6A29, 0, 0x6A2A, 0, 0, 0, 0x6A2B, 0, /* 0x10 */
+ 0, 0x6A2C, 0, 0x6A2D, 0x6A2E, 0, 0, 0, /* 0x10 */
+ 0x6A2F, 0, 0, 0, 0, 0, 0x6A30, 0, /* 0x20 */
+ 0, 0, 0, 0x6A31, 0, 0x6A32, 0, 0, /* 0x20 */
+ 0, 0, 0, 0x6A33, 0x6A34, 0x6A35, 0, 0x6A36, /* 0x30 */
+ 0, 0x6A37, 0x6A38, 0, 0, 0x6A39, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0x6A3A, 0, 0, 0x6A3B, 0x6A3C, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0x6A3D, 0x6A3E, 0x6A3F, /* 0x50 */
+ 0, 0, 0, 0x6A40, 0, 0, 0x6A41, 0, /* 0x50 */
+ 0, 0x6A42, 0, 0x6A43, 0, 0x6A44, 0x6A45, 0, /* 0x60 */
+ 0x6A46, 0, 0x6A47, 0x6A48, 0x6A49, 0x6A4A, 0x6A4B, 0, /* 0x60 */
+ 0, 0, 0, 0x6A4C, 0, 0x6A4D, 0, 0x6A4E, /* 0x70 */
+ 0x6A4F, 0x6A50, 0, 0, 0, 0, 0, 0x6A51, /* 0x70 */
+ 0x6A52, 0, 0, 0, 0x6A53, 0x6A54, 0x6A55, 0x6A56, /* 0x80 */
+ 0, 0x6A57, 0x6A58, 0x6A59, 0, 0x6A5A, 0, 0x6A5B, /* 0x80 */
+ 0x6A5C, 0, 0, 0, 0x6A5D, 0, 0, 0, /* 0x90 */
+ 0, 0, 0x6A5E, 0, 0, 0x6A5F, 0x6A60, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x6A61, 0x6A62, /* 0xA0 */
+ 0, 0x6A63, 0, 0, 0x6A64, 0, 0, 0, /* 0xA0 */
+ 0x6A65, 0x6A66, 0x6A67, 0, 0, 0, 0, 0x6A68, /* 0xB0 */
+ 0x6A69, 0, 0, 0x6A6A, 0x6A6B, 0, 0x6A6C, 0x6A6D, /* 0xB0 */
+ 0, 0x6A6E, 0, 0, 0, 0, 0, 0x6A6F, /* 0xC0 */
+ 0x6A70, 0, 0, 0, 0, 0, 0x6A71, 0, /* 0xC0 */
+ 0x6A72, 0, 0, 0, 0, 0, 0, 0x6A73, /* 0xD0 */
+ 0x6A74, 0, 0, 0, 0, 0x6A75, 0, 0x6A76, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0x6A77, 0, 0x6A78, /* 0xE0 */
+ 0, 0, 0x6A79, 0x6A7A, 0, 0, 0, 0x6A7B, /* 0xE0 */
+ 0, 0, 0, 0x6A7C, 0, 0, 0, 0x6A7D, /* 0xF0 */
+ 0x6A7E, 0x6B21, 0x6B22, 0, 0, 0x6B23, 0, 0x6B24 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6B25, 0, 0x6B26, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x6B27, 0, 0, 0, 0x6B28, /* 0x00 */
+ 0, 0x6B29, 0, 0, 0, 0, 0x6B2A, 0, /* 0x10 */
+ 0x6B2B, 0x6B2C, 0x6B2D, 0, 0x6B2E, 0, 0x6B2F, 0, /* 0x10 */
+ 0, 0, 0x6B30, 0x6B31, 0, 0, 0x6B32, 0x6B33, /* 0x20 */
+ 0x6B34, 0x6B35, 0x6B36, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0x6B37, 0, 0, 0, 0x6B38, 0x6B39, 0x6B3A, /* 0x30 */
+ 0, 0, 0, 0, 0, 0x6B3B, 0, 0, /* 0x30 */
+ 0, 0x6B3C, 0, 0x6B3D, 0x6B3E, 0x6B3F, 0, 0, /* 0x40 */
+ 0, 0x6B40, 0x6B41, 0, 0, 0, 0x6B42, 0x6B43, /* 0x40 */
+ 0x6B44, 0, 0, 0x6B45, 0x6B46, 0, 0x6B47, 0, /* 0x50 */
+ 0x6B48, 0, 0, 0x6B49, 0x6B50, 0x6B4A, 0x6B4B, 0x6B4C, /* 0x50 */
+ 0, 0, 0, 0x6B4D, 0, 0, 0, 0, /* 0x60 */
+ 0x6B52, 0x6B4E, 0x6B4F, 0x6B51, 0, 0, 0x6B53, 0, /* 0x60 */
+ 0x6B54, 0, 0x6B55, 0, 0, 0x6B56, 0, 0x6B57, /* 0x70 */
+ 0, 0, 0, 0x6B58, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0x6B59, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0x6B5A, 0, 0, 0, 0, 0x6B5B, /* 0xF0 */
+ 0, 0x6B5C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6B5E, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0x6B5D, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x6B5F, 0, 0, 0, 0, 0, 0x6B60, /* 0x10 */
+ 0x6B61, 0, 0, 0, 0x6B62, 0x6B63, 0x6B64, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6B65, /* 0x20 */
+ 0x6B66, 0, 0x6B67, 0x6B68, 0x6B69, 0, 0, 0, /* 0x30 */
+ 0, 0, 0x6B6A, 0, 0x6B6B, 0x6B6D, 0, 0, /* 0x30 */
+ 0, 0, 0x6B6E, 0x6B6F, 0, 0x6B6C, 0, 0x6B70, /* 0x40 */
+ 0, 0, 0x6B71, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x6B72, 0x6B73, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6B74, /* 0x50 */
+ 0, 0, 0x6B76, 0x6B75, 0, 0x6B77, 0, 0, /* 0x60 */
+ 0, 0x6B78, 0x6B79, 0x6B7A, 0, 0, 0, 0, /* 0x60 */
+ 0x6B7B, 0, 0, 0, 0, 0, 0x6B7C, 0x6B7D, /* 0x70 */
+ 0, 0, 0, 0x6B7E, 0x6C21, 0, 0x6C22, 0, /* 0x70 */
+ 0, 0, 0, 0x6C23, 0x6C24, 0, 0x6C25, 0, /* 0x80 */
+ 0, 0, 0x6C26, 0, 0, 0x6C27, 0x6C28, 0, /* 0x80 */
+ 0, 0, 0x6C29, 0x6C2A, 0, 0x6C2B, 0x6C2C, 0x6C2D, /* 0x90 */
+ 0x6C2E, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6C2F, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0x6C30, 0, 0x6C31, 0, 0x6C32, 0, /* 0xA0 */
+ 0, 0x6C33, 0, 0, 0, 0x6C34, 0, 0, /* 0xB0 */
+ 0, 0x6C35, 0, 0, 0x6C36, 0, 0, 0x6C37, /* 0xB0 */
+ 0, 0, 0, 0x6C38, 0, 0, 0, 0x6C39, /* 0xC0 */
+ 0, 0x6C3A, 0x6C3B, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0x6C3C, 0x6C3D, 0x6C3E, 0x6C3F, /* 0xD0 */
+ 0, 0, 0x6C40, 0, 0, 0, 0x6C41, 0x6C42, /* 0xD0 */
+ 0x6C43, 0, 0, 0, 0, 0x6C44, 0, 0x6C45, /* 0xE0 */
+ 0, 0x6C46, 0, 0x6C47, 0, 0, 0x6C48, 0, /* 0xE0 */
+ 0x6C49, 0, 0, 0x6C4A, 0x6C4B, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0x6C4C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6C4E, 0, 0, 0, 0, 0x6C4F, /* 0x00 */
+ 0, 0, 0x6C4D, 0, 0, 0, 0x6C50, 0, /* 0x00 */
+ 0x6C51, 0x6C52, 0x6C53, 0, 0, 0x6C54, 0x6C55, 0, /* 0x10 */
+ 0, 0x6C56, 0, 0, 0x6C57, 0x6C58, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0x6C59, 0x6C5A, 0x6C5B, 0, 0, 0, /* 0x70 */
+ 0x6C5C, 0, 0x6C5D, 0x6C5E, 0x6C5F, 0x6C60, 0, 0x6C61, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x6C62, 0x6C63, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x6C64, 0, /* 0x90 */
+ 0x6C65, 0, 0, 0x6C66, 0, 0, 0x6C67, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x6C68, 0, 0, 0, /* 0xA0 */
+ 0x6C69, 0, 0, 0, 0x6C6A, 0, 0x6C6B, 0x6C6C, /* 0xA0 */
+ 0x6C6D, 0, 0, 0x6C6E, 0x6C6F, 0x6C70, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0x6C71, 0, /* 0xC0 */
+ 0x6C72, 0, 0, 0x6C73, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0x6C74, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6C75, /* 0xD0 */
+ 0, 0, 0, 0, 0x6C76, 0, 0, 0x6C77, /* 0xE0 */
+ 0, 0, 0, 0, 0x6C78, 0x6C79, 0x6C7A, 0, /* 0xE0 */
+ 0x6C7B, 0x6C7C, 0x6C7D, 0, 0, 0x6C7E, 0, 0, /* 0xF0 */
+ 0x6D21, 0, 0, 0, 0, 0, 0, 0x6D22 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JIS0212_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6D23, 0x6D24, 0, 0, 0, 0, /* 0x00 */
+ 0, 0x6D25, 0, 0, 0, 0, 0, 0x6D26, /* 0x00 */
+ 0x6D27, 0x6D28, 0x6D29, 0, 0x6D2A, 0, 0x6D2B, 0x6D2C, /* 0x10 */
+ 0, 0x6D2D, 0x6D2E, 0x6D2F, 0, 0, 0, 0x6D30, /* 0x10 */
+ 0, 0, 0x6D31, 0, 0, 0, 0x6D32, 0, /* 0x20 */
+ 0, 0, 0x6D33, 0x6D34, 0, 0, 0, 0x6D35, /* 0x20 */
+ 0, 0x6D36, 0x6D37, 0, 0x6D38, 0, 0, 0x6D39, /* 0x30 */
+ 0, 0x6D3A, 0x6D3B, 0, 0x6D3C, 0x6D3D, 0, 0x6D3E, /* 0x30 */
+ 0, 0x6D3F, 0, 0x6D40, 0x6D41, 0x6D42, 0x6D43, 0x6D44, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0x6D45, 0, 0x6D46, 0x6D47, 0x6D48, /* 0x50 */
+ 0x6D49, 0, 0x6D4A, 0, 0, 0x6D4B, 0x6D4C, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0x6D4D, 0x6D4E, 0, 0, 0, 0x6D4F, 0x6D50, 0x6D51, /* 0x60 */
+ 0x6D52, 0x6D53, 0, 0x6D54, 0, 0x6D55, 0, 0, /* 0x70 */
+ 0, 0, 0x6D56, 0, 0, 0x6D57, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0x6D58, /* 0x80 */
+ 0x6D59, 0x6D5A, 0x6D5B, 0, 0x6D5C, 0, 0x6D5D, 0x6D5E, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0x6D5F, 0, /* 0x90 */
+ 0, 0x6D60, 0x6D61, 0x6D62, 0, 0x6D63 /* 0xA0 */
+ /* 0xA0 */
+};
+
diff --git a/sal/textenc/tcvtjp6.tab b/sal/textenc/tcvtjp6.tab
new file mode 100644
index 000000000..0cb02992d
--- /dev/null
+++ b/sal/textenc/tcvtjp6.tab
@@ -0,0 +1,2656 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "convertsimple.hxx"
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+/* This file contain the information tables for all japanese charsets: */
+/* SJIS, MS932, APPLE_JAPANESE, EUC_JP, JIS-X-201, JIS-X-208, JIS-X-212 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aSJISUniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */ /* is A5 (YEN SIGN), but for compatibility with ASCII, we use 0x5C (SLASH) like MS CP392 */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */ /* is 0x0203E (SPACING OVERSCORE), but for compatibility with ASCII, we use 0x7E (TILDE) like MS CP392 */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0x005C, 0, 0, nullptr }, /* 0x80 */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 }, /* 0x81 */
+ { 0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 }, /* 0x82 */
+ { 0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 }, /* 0x83 */
+ { 0, 0x40, 0xBE, aImplDBCSToUniTab_SJIS_84 }, /* 0x84 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */
+ { 0, 0x40, 0x9C, aImplDBCSToUniTab_MS932_87 }, /* 0x87 */ /* We use the MS table for better MS compatibility */
+ { 0, 0x9F, 0xFC, aImplDBCSToUniTab_SJIS_88 }, /* 0x88 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 }, /* 0x89 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A }, /* 0x8A */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B }, /* 0x8B */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C }, /* 0x8C */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D }, /* 0x8D */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E }, /* 0x8E */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F }, /* 0x8F */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 }, /* 0x90 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 }, /* 0x91 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 }, /* 0x92 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 }, /* 0x93 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 }, /* 0x94 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 }, /* 0x95 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 }, /* 0x96 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 }, /* 0x97 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 }, /* 0x98 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 }, /* 0x99 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A }, /* 0x9A */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B }, /* 0x9B */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C }, /* 0x9C */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D }, /* 0x9D */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E }, /* 0x9E */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F }, /* 0x9F */
+ { 0x00A0, 0, 0, nullptr }, /* 0xA0 */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+ { 0xFF61, 0, 0, nullptr }, /* 0xA1 */
+ { 0xFF62, 0, 0, nullptr }, /* 0xA2 */
+ { 0xFF63, 0, 0, nullptr }, /* 0xA3 */
+ { 0xFF64, 0, 0, nullptr }, /* 0xA4 */
+ { 0xFF65, 0, 0, nullptr }, /* 0xA5 */
+ { 0xFF66, 0, 0, nullptr }, /* 0xA6 */
+ { 0xFF67, 0, 0, nullptr }, /* 0xA7 */
+ { 0xFF68, 0, 0, nullptr }, /* 0xA8 */
+ { 0xFF69, 0, 0, nullptr }, /* 0xA9 */
+ { 0xFF6A, 0, 0, nullptr }, /* 0xAA */
+ { 0xFF6B, 0, 0, nullptr }, /* 0xAB */
+ { 0xFF6C, 0, 0, nullptr }, /* 0xAC */
+ { 0xFF6D, 0, 0, nullptr }, /* 0xAD */
+ { 0xFF6E, 0, 0, nullptr }, /* 0xAE */
+ { 0xFF6F, 0, 0, nullptr }, /* 0xAF */
+ { 0xFF70, 0, 0, nullptr }, /* 0xB0 */
+ { 0xFF71, 0, 0, nullptr }, /* 0xB1 */
+ { 0xFF72, 0, 0, nullptr }, /* 0xB2 */
+ { 0xFF73, 0, 0, nullptr }, /* 0xB3 */
+ { 0xFF74, 0, 0, nullptr }, /* 0xB4 */
+ { 0xFF75, 0, 0, nullptr }, /* 0xB5 */
+ { 0xFF76, 0, 0, nullptr }, /* 0xB6 */
+ { 0xFF77, 0, 0, nullptr }, /* 0xB7 */
+ { 0xFF78, 0, 0, nullptr }, /* 0xB8 */
+ { 0xFF79, 0, 0, nullptr }, /* 0xB9 */
+ { 0xFF7A, 0, 0, nullptr }, /* 0xBA */
+ { 0xFF7B, 0, 0, nullptr }, /* 0xBB */
+ { 0xFF7C, 0, 0, nullptr }, /* 0xBC */
+ { 0xFF7D, 0, 0, nullptr }, /* 0xBD */
+ { 0xFF7E, 0, 0, nullptr }, /* 0xBE */
+ { 0xFF7F, 0, 0, nullptr }, /* 0xBF */
+ { 0xFF80, 0, 0, nullptr }, /* 0xC0 */
+ { 0xFF81, 0, 0, nullptr }, /* 0xC1 */
+ { 0xFF82, 0, 0, nullptr }, /* 0xC2 */
+ { 0xFF83, 0, 0, nullptr }, /* 0xC3 */
+ { 0xFF84, 0, 0, nullptr }, /* 0xC4 */
+ { 0xFF85, 0, 0, nullptr }, /* 0xC5 */
+ { 0xFF86, 0, 0, nullptr }, /* 0xC6 */
+ { 0xFF87, 0, 0, nullptr }, /* 0xC7 */
+ { 0xFF88, 0, 0, nullptr }, /* 0xC8 */
+ { 0xFF89, 0, 0, nullptr }, /* 0xC9 */
+ { 0xFF8A, 0, 0, nullptr }, /* 0xCA */
+ { 0xFF8B, 0, 0, nullptr }, /* 0xCB */
+ { 0xFF8C, 0, 0, nullptr }, /* 0xCC */
+ { 0xFF8D, 0, 0, nullptr }, /* 0xCD */
+ { 0xFF8E, 0, 0, nullptr }, /* 0xCE */
+ { 0xFF8F, 0, 0, nullptr }, /* 0xCF */
+ { 0xFF90, 0, 0, nullptr }, /* 0xD0 */
+ { 0xFF91, 0, 0, nullptr }, /* 0xD1 */
+ { 0xFF92, 0, 0, nullptr }, /* 0xD2 */
+ { 0xFF93, 0, 0, nullptr }, /* 0xD3 */
+ { 0xFF94, 0, 0, nullptr }, /* 0xD4 */
+ { 0xFF95, 0, 0, nullptr }, /* 0xD5 */
+ { 0xFF96, 0, 0, nullptr }, /* 0xD6 */
+ { 0xFF97, 0, 0, nullptr }, /* 0xD7 */
+ { 0xFF98, 0, 0, nullptr }, /* 0xD8 */
+ { 0xFF99, 0, 0, nullptr }, /* 0xD9 */
+ { 0xFF9A, 0, 0, nullptr }, /* 0xDA */
+ { 0xFF9B, 0, 0, nullptr }, /* 0xDB */
+ { 0xFF9C, 0, 0, nullptr }, /* 0xDC */
+ { 0xFF9D, 0, 0, nullptr }, /* 0xDD */
+ { 0xFF9E, 0, 0, nullptr }, /* 0xDE */
+ { 0xFF9F, 0, 0, nullptr }, /* 0xDF */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 }, /* 0xE0 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 }, /* 0xE1 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 }, /* 0xE2 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 }, /* 0xE3 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 }, /* 0xE4 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 }, /* 0xE5 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 }, /* 0xE6 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 }, /* 0xE7 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 }, /* 0xE8 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 }, /* 0xE9 */
+ { 0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA }, /* 0xEA */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEC */ /* We convert this as double byte */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_ED }, /* 0xED */ /* We use the MS table for better MS compatibility */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_EE }, /* 0xEE */ /* We use the MS table for better MS compatibility */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEF */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF0 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF1 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF2 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF3 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF4 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF5 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF6 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF7 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* EUDC Range */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA }, /* 0xFA */ /* We use the MS table for better MS compatibility */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB }, /* 0xFB */ /* We use the MS table for better MS compatibility */
+ { 0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC }, /* 0xFC */ /* We use the MS table for better MS compatibility */
+ { 0x00A9, 0, 0, nullptr }, /* 0xFD */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+ { 0x2122, 0, 0, nullptr }, /* 0xFE */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+ { 0x2026, 0, 0, nullptr } /* 0xFF */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* MS932-Tables are used for better microsoft compatibility */
+
+ImplUniToDBCSHighTab const aSJISDBCSHighTab[256] =
+{
+ { 0x00, 0xF7, aImplUniToDBCSTab_SJIS_00 }, /* 0x00 */
+ { 1, 0, nullptr }, /* 0x01 */
+ { 1, 0, nullptr }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 }, /* 0x20 */
+ { 0x03, 0xD4, aImplUniToDBCSTab_MS932_21 }, /* 0x21 */
+ { 0x00, 0xBF, aImplUniToDBCSTab_MS932_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 }, /* 0x23 */
+ { 0x60, 0x73, aImplUniToDBCSTab_MS932_24 }, /* 0x24 */
+ { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 }, /* 0x25 */
+ { 0x05, 0x6F, aImplUniToDBCSTab_SJIS_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_30 }, /* 0x30 */
+ { 1, 0, nullptr }, /* 0x31 */
+ { 0x31, 0xA8, aImplUniToDBCSTab_MS932_32 }, /* 0x32 */
+ { 0x03, 0xCD, aImplUniToDBCSTab_MS932_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E }, /* 0x4E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F }, /* 0x4F */
+ { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 }, /* 0x50 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 }, /* 0x52 */
+ { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 }, /* 0x54 */
+ { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 }, /* 0x55 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 }, /* 0x56 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 }, /* 0x57 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 }, /* 0x58 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 }, /* 0x59 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A }, /* 0x5A */
+ { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B }, /* 0x5B */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C }, /* 0x5C */
+ { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D }, /* 0x5D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F }, /* 0x5F */
+ { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 }, /* 0x62 */
+ { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 }, /* 0x63 */
+ { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 }, /* 0x64 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 }, /* 0x67 */
+ { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 }, /* 0x68 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 }, /* 0x69 */
+ { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A }, /* 0x6A */
+ { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B }, /* 0x6B */
+ { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C }, /* 0x6C */
+ { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D }, /* 0x6D */
+ { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E }, /* 0x6E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F }, /* 0x6F */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 }, /* 0x70 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 }, /* 0x71 */
+ { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 }, /* 0x72 */
+ { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 }, /* 0x73 */
+ { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 }, /* 0x74 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 }, /* 0x75 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 }, /* 0x76 */
+ { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 }, /* 0x77 */
+ { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A }, /* 0x7A */
+ { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B }, /* 0x7B */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D }, /* 0x7D */
+ { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E }, /* 0x7E */
+ { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 }, /* 0x81 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 }, /* 0x82 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 }, /* 0x83 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 }, /* 0x84 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 }, /* 0x85 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 }, /* 0x87 */
+ { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 }, /* 0x88 */
+ { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 }, /* 0x89 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A }, /* 0x8A */
+ { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B }, /* 0x8B */
+ { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C }, /* 0x8C */
+ { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D }, /* 0x8D */
+ { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E }, /* 0x8E */
+ { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F }, /* 0x8F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 }, /* 0x90 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 }, /* 0x91 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 }, /* 0x92 */
+ { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 }, /* 0x93 */
+ { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 }, /* 0x94 */
+ { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 }, /* 0x95 */
+ { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 }, /* 0x97 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 }, /* 0x98 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 }, /* 0x99 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A }, /* 0x9A */
+ { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B }, /* 0x9B */
+ { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C }, /* 0x9C */
+ { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D }, /* 0x9D */
+ { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E }, /* 0x9E */
+ { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 }, /* 0xF9 */
+ { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 1, 0, nullptr }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* F040-F9FC --> E000-E757 */
+
+#define DBCS_EUDC_SJIS_COUNT 1
+ImplDBCSEUDCData const aImplSJISDBCSEUDCTab[DBCS_EUDC_SJIS_COUNT] =
+{
+ /* EUDC-Range */
+ /* Lead: F0-F9 */
+ /* Trail: 40-7E, 80-FC */
+ { 0xF0, 0xF9, 0x40, 0x7E, 0x80, 0xFC, 0, 0, 2, 0xBC, 0xE000, 0xE757 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplSJISDBCSCvtData =
+{
+ aSJISUniLeadTab,
+ aSJISDBCSHighTab,
+ aImplSJISDBCSEUDCTab,
+ DBCS_EUDC_SJIS_COUNT,
+ 0x00, 0xFF,
+ 0x40, 0xFC,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplSJISTextEncodingData
+ = { { &aImplSJISDBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-jp",
+ "shift_jis",
+ 1,
+ 2,
+ 2,
+ 128,
+ RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aMS932UniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */ /* in SJIS this is A5 (YEN SIGN), but for compatibility with ASCII, we use 0x5C like MS CP392 */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */ /* in SJIS this is 0x0203E (SPACING OVERSCORE), but for compatibility with ASCII, we use 0x7E (TILDE) like MS CP392 */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0x005C, 0, 0, nullptr }, /* 0x80 */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 }, /* 0x81 */
+ { 0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 }, /* 0x82 */
+ { 0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 }, /* 0x83 */
+ { 0, 0x40, 0xBE, aImplDBCSToUniTab_SJIS_84 }, /* 0x84 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */
+ { 0, 0x40, 0x9C, aImplDBCSToUniTab_MS932_87 }, /* 0x87 */
+ { 0, 0x9F, 0xFC, aImplDBCSToUniTab_SJIS_88 }, /* 0x88 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 }, /* 0x89 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A }, /* 0x8A */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B }, /* 0x8B */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C }, /* 0x8C */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D }, /* 0x8D */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E }, /* 0x8E */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F }, /* 0x8F */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 }, /* 0x90 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 }, /* 0x91 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 }, /* 0x92 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 }, /* 0x93 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 }, /* 0x94 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 }, /* 0x95 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 }, /* 0x96 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 }, /* 0x97 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 }, /* 0x98 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 }, /* 0x99 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A }, /* 0x9A */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B }, /* 0x9B */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C }, /* 0x9C */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D }, /* 0x9D */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E }, /* 0x9E */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F }, /* 0x9F */
+ { 0x00A0, 0, 0, nullptr }, /* 0xA0 */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+ { 0xFF61, 0, 0, nullptr }, /* 0xA1 */
+ { 0xFF62, 0, 0, nullptr }, /* 0xA2 */
+ { 0xFF63, 0, 0, nullptr }, /* 0xA3 */
+ { 0xFF64, 0, 0, nullptr }, /* 0xA4 */
+ { 0xFF65, 0, 0, nullptr }, /* 0xA5 */
+ { 0xFF66, 0, 0, nullptr }, /* 0xA6 */
+ { 0xFF67, 0, 0, nullptr }, /* 0xA7 */
+ { 0xFF68, 0, 0, nullptr }, /* 0xA8 */
+ { 0xFF69, 0, 0, nullptr }, /* 0xA9 */
+ { 0xFF6A, 0, 0, nullptr }, /* 0xAA */
+ { 0xFF6B, 0, 0, nullptr }, /* 0xAB */
+ { 0xFF6C, 0, 0, nullptr }, /* 0xAC */
+ { 0xFF6D, 0, 0, nullptr }, /* 0xAD */
+ { 0xFF6E, 0, 0, nullptr }, /* 0xAE */
+ { 0xFF6F, 0, 0, nullptr }, /* 0xAF */
+ { 0xFF70, 0, 0, nullptr }, /* 0xB0 */
+ { 0xFF71, 0, 0, nullptr }, /* 0xB1 */
+ { 0xFF72, 0, 0, nullptr }, /* 0xB2 */
+ { 0xFF73, 0, 0, nullptr }, /* 0xB3 */
+ { 0xFF74, 0, 0, nullptr }, /* 0xB4 */
+ { 0xFF75, 0, 0, nullptr }, /* 0xB5 */
+ { 0xFF76, 0, 0, nullptr }, /* 0xB6 */
+ { 0xFF77, 0, 0, nullptr }, /* 0xB7 */
+ { 0xFF78, 0, 0, nullptr }, /* 0xB8 */
+ { 0xFF79, 0, 0, nullptr }, /* 0xB9 */
+ { 0xFF7A, 0, 0, nullptr }, /* 0xBA */
+ { 0xFF7B, 0, 0, nullptr }, /* 0xBB */
+ { 0xFF7C, 0, 0, nullptr }, /* 0xBC */
+ { 0xFF7D, 0, 0, nullptr }, /* 0xBD */
+ { 0xFF7E, 0, 0, nullptr }, /* 0xBE */
+ { 0xFF7F, 0, 0, nullptr }, /* 0xBF */
+ { 0xFF80, 0, 0, nullptr }, /* 0xC0 */
+ { 0xFF81, 0, 0, nullptr }, /* 0xC1 */
+ { 0xFF82, 0, 0, nullptr }, /* 0xC2 */
+ { 0xFF83, 0, 0, nullptr }, /* 0xC3 */
+ { 0xFF84, 0, 0, nullptr }, /* 0xC4 */
+ { 0xFF85, 0, 0, nullptr }, /* 0xC5 */
+ { 0xFF86, 0, 0, nullptr }, /* 0xC6 */
+ { 0xFF87, 0, 0, nullptr }, /* 0xC7 */
+ { 0xFF88, 0, 0, nullptr }, /* 0xC8 */
+ { 0xFF89, 0, 0, nullptr }, /* 0xC9 */
+ { 0xFF8A, 0, 0, nullptr }, /* 0xCA */
+ { 0xFF8B, 0, 0, nullptr }, /* 0xCB */
+ { 0xFF8C, 0, 0, nullptr }, /* 0xCC */
+ { 0xFF8D, 0, 0, nullptr }, /* 0xCD */
+ { 0xFF8E, 0, 0, nullptr }, /* 0xCE */
+ { 0xFF8F, 0, 0, nullptr }, /* 0xCF */
+ { 0xFF90, 0, 0, nullptr }, /* 0xD0 */
+ { 0xFF91, 0, 0, nullptr }, /* 0xD1 */
+ { 0xFF92, 0, 0, nullptr }, /* 0xD2 */
+ { 0xFF93, 0, 0, nullptr }, /* 0xD3 */
+ { 0xFF94, 0, 0, nullptr }, /* 0xD4 */
+ { 0xFF95, 0, 0, nullptr }, /* 0xD5 */
+ { 0xFF96, 0, 0, nullptr }, /* 0xD6 */
+ { 0xFF97, 0, 0, nullptr }, /* 0xD7 */
+ { 0xFF98, 0, 0, nullptr }, /* 0xD8 */
+ { 0xFF99, 0, 0, nullptr }, /* 0xD9 */
+ { 0xFF9A, 0, 0, nullptr }, /* 0xDA */
+ { 0xFF9B, 0, 0, nullptr }, /* 0xDB */
+ { 0xFF9C, 0, 0, nullptr }, /* 0xDC */
+ { 0xFF9D, 0, 0, nullptr }, /* 0xDD */
+ { 0xFF9E, 0, 0, nullptr }, /* 0xDE */
+ { 0xFF9F, 0, 0, nullptr }, /* 0xDF */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 }, /* 0xE0 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 }, /* 0xE1 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 }, /* 0xE2 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 }, /* 0xE3 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 }, /* 0xE4 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 }, /* 0xE5 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 }, /* 0xE6 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 }, /* 0xE7 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 }, /* 0xE8 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 }, /* 0xE9 */
+ { 0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA }, /* 0xEA */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEC */ /* We convert this as double byte */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_ED }, /* 0xED */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_EE }, /* 0xEE */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEF */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF0 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF1 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF2 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF3 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF4 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF5 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF6 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF7 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* EUDC Range */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA }, /* 0xFA */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB }, /* 0xFB */
+ { 0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC }, /* 0xFC */
+ { 0x00A9, 0, 0, nullptr }, /* 0xFD */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+ { 0x2122, 0, 0, nullptr }, /* 0xFE */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+ { 0x2026, 0, 0, nullptr } /* 0xFF */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aMS932DBCSHighTab[256] =
+{
+ { 0x00, 0xF7, aImplUniToDBCSTab_SJIS_00 }, /* 0x00 */
+ { 1, 0, nullptr }, /* 0x01 */
+ { 1, 0, nullptr }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 }, /* 0x20 */
+ { 0x03, 0xD4, aImplUniToDBCSTab_MS932_21 }, /* 0x21 */
+ { 0x00, 0xBF, aImplUniToDBCSTab_MS932_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 }, /* 0x23 */
+ { 0x60, 0x73, aImplUniToDBCSTab_MS932_24 }, /* 0x24 */
+ { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 }, /* 0x25 */
+ { 0x05, 0x6F, aImplUniToDBCSTab_SJIS_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_30 }, /* 0x30 */
+ { 1, 0, nullptr }, /* 0x31 */
+ { 0x31, 0xA8, aImplUniToDBCSTab_MS932_32 }, /* 0x32 */
+ { 0x03, 0xCD, aImplUniToDBCSTab_MS932_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E }, /* 0x4E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F }, /* 0x4F */
+ { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 }, /* 0x50 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 }, /* 0x52 */
+ { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 }, /* 0x54 */
+ { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 }, /* 0x55 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 }, /* 0x56 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 }, /* 0x57 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 }, /* 0x58 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 }, /* 0x59 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A }, /* 0x5A */
+ { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B }, /* 0x5B */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C }, /* 0x5C */
+ { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D }, /* 0x5D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F }, /* 0x5F */
+ { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 }, /* 0x62 */
+ { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 }, /* 0x63 */
+ { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 }, /* 0x64 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 }, /* 0x67 */
+ { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 }, /* 0x68 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 }, /* 0x69 */
+ { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A }, /* 0x6A */
+ { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B }, /* 0x6B */
+ { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C }, /* 0x6C */
+ { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D }, /* 0x6D */
+ { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E }, /* 0x6E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F }, /* 0x6F */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 }, /* 0x70 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 }, /* 0x71 */
+ { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 }, /* 0x72 */
+ { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 }, /* 0x73 */
+ { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 }, /* 0x74 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 }, /* 0x75 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 }, /* 0x76 */
+ { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 }, /* 0x77 */
+ { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A }, /* 0x7A */
+ { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B }, /* 0x7B */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D }, /* 0x7D */
+ { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E }, /* 0x7E */
+ { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 }, /* 0x81 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 }, /* 0x82 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 }, /* 0x83 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 }, /* 0x84 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 }, /* 0x85 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 }, /* 0x87 */
+ { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 }, /* 0x88 */
+ { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 }, /* 0x89 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A }, /* 0x8A */
+ { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B }, /* 0x8B */
+ { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C }, /* 0x8C */
+ { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D }, /* 0x8D */
+ { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E }, /* 0x8E */
+ { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F }, /* 0x8F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 }, /* 0x90 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 }, /* 0x91 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 }, /* 0x92 */
+ { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 }, /* 0x93 */
+ { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 }, /* 0x94 */
+ { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 }, /* 0x95 */
+ { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 }, /* 0x97 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 }, /* 0x98 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 }, /* 0x99 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A }, /* 0x9A */
+ { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B }, /* 0x9B */
+ { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C }, /* 0x9C */
+ { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D }, /* 0x9D */
+ { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E }, /* 0x9E */
+ { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 }, /* 0xF9 */
+ { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 1, 0, nullptr }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplMS932DBCSCvtData =
+{
+ aMS932UniLeadTab,
+ aMS932DBCSHighTab,
+ aImplSJISDBCSEUDCTab,
+ DBCS_EUDC_SJIS_COUNT,
+ 0x00, 0xFF,
+ 0x40, 0xFC,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS932TextEncodingData
+ = { { &aImplMS932DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-jp",
+ "shift_jis",
+ 1,
+ 2,
+ 2,
+ 128,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* WIN/DOS/OS2, SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aAPPLEJAPANESEUniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */ /* is A5 (YEN SIGN), but for compatibility with ASCII, we use 0x5C like MS CP392 */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */ /* in SJIS this is 0x0203E (SPACING OVERSCORE), but for compatibility with ASCII, we use 0x7E (TILDE) like MS CP392 */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0x005C, 0, 0, nullptr }, /* 0x80 */ /* APPLE additions over SJIS */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 }, /* 0x81 */
+ { 0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 }, /* 0x82 */
+ { 0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 }, /* 0x83 */
+ { 0, 0x40, 0xBE, aImplDBCSToUniTab_SJIS_84 }, /* 0x84 */
+ { 0, 0x40, 0xF4, aImplDBCSToUniTab_APPLEJAPANESE_85 }, /* 0x85 */
+ { 0, 0x40, 0xD2, aImplDBCSToUniTab_APPLEJAPANESE_86 }, /* 0x86 */
+ { 0, 0x40, 0xFA, aImplDBCSToUniTab_APPLEJAPANESE_87 }, /* 0x87 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_APPLEJAPANESE_88 }, /* 0x88 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 }, /* 0x89 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A }, /* 0x8A */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B }, /* 0x8B */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C }, /* 0x8C */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D }, /* 0x8D */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E }, /* 0x8E */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F }, /* 0x8F */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 }, /* 0x90 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 }, /* 0x91 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 }, /* 0x92 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 }, /* 0x93 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 }, /* 0x94 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 }, /* 0x95 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 }, /* 0x96 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 }, /* 0x97 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 }, /* 0x98 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 }, /* 0x99 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A }, /* 0x9A */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B }, /* 0x9B */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C }, /* 0x9C */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D }, /* 0x9D */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E }, /* 0x9E */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F }, /* 0x9F */
+ { 0x00A0, 0, 0, nullptr }, /* 0xA0 */ /* APPLE additions over SJIS */
+ { 0xFF61, 0, 0, nullptr }, /* 0xA1 */
+ { 0xFF62, 0, 0, nullptr }, /* 0xA2 */
+ { 0xFF63, 0, 0, nullptr }, /* 0xA3 */
+ { 0xFF64, 0, 0, nullptr }, /* 0xA4 */
+ { 0xFF65, 0, 0, nullptr }, /* 0xA5 */
+ { 0xFF66, 0, 0, nullptr }, /* 0xA6 */
+ { 0xFF67, 0, 0, nullptr }, /* 0xA7 */
+ { 0xFF68, 0, 0, nullptr }, /* 0xA8 */
+ { 0xFF69, 0, 0, nullptr }, /* 0xA9 */
+ { 0xFF6A, 0, 0, nullptr }, /* 0xAA */
+ { 0xFF6B, 0, 0, nullptr }, /* 0xAB */
+ { 0xFF6C, 0, 0, nullptr }, /* 0xAC */
+ { 0xFF6D, 0, 0, nullptr }, /* 0xAD */
+ { 0xFF6E, 0, 0, nullptr }, /* 0xAE */
+ { 0xFF6F, 0, 0, nullptr }, /* 0xAF */
+ { 0xFF70, 0, 0, nullptr }, /* 0xB0 */
+ { 0xFF71, 0, 0, nullptr }, /* 0xB1 */
+ { 0xFF72, 0, 0, nullptr }, /* 0xB2 */
+ { 0xFF73, 0, 0, nullptr }, /* 0xB3 */
+ { 0xFF74, 0, 0, nullptr }, /* 0xB4 */
+ { 0xFF75, 0, 0, nullptr }, /* 0xB5 */
+ { 0xFF76, 0, 0, nullptr }, /* 0xB6 */
+ { 0xFF77, 0, 0, nullptr }, /* 0xB7 */
+ { 0xFF78, 0, 0, nullptr }, /* 0xB8 */
+ { 0xFF79, 0, 0, nullptr }, /* 0xB9 */
+ { 0xFF7A, 0, 0, nullptr }, /* 0xBA */
+ { 0xFF7B, 0, 0, nullptr }, /* 0xBB */
+ { 0xFF7C, 0, 0, nullptr }, /* 0xBC */
+ { 0xFF7D, 0, 0, nullptr }, /* 0xBD */
+ { 0xFF7E, 0, 0, nullptr }, /* 0xBE */
+ { 0xFF7F, 0, 0, nullptr }, /* 0xBF */
+ { 0xFF80, 0, 0, nullptr }, /* 0xC0 */
+ { 0xFF81, 0, 0, nullptr }, /* 0xC1 */
+ { 0xFF82, 0, 0, nullptr }, /* 0xC2 */
+ { 0xFF83, 0, 0, nullptr }, /* 0xC3 */
+ { 0xFF84, 0, 0, nullptr }, /* 0xC4 */
+ { 0xFF85, 0, 0, nullptr }, /* 0xC5 */
+ { 0xFF86, 0, 0, nullptr }, /* 0xC6 */
+ { 0xFF87, 0, 0, nullptr }, /* 0xC7 */
+ { 0xFF88, 0, 0, nullptr }, /* 0xC8 */
+ { 0xFF89, 0, 0, nullptr }, /* 0xC9 */
+ { 0xFF8A, 0, 0, nullptr }, /* 0xCA */
+ { 0xFF8B, 0, 0, nullptr }, /* 0xCB */
+ { 0xFF8C, 0, 0, nullptr }, /* 0xCC */
+ { 0xFF8D, 0, 0, nullptr }, /* 0xCD */
+ { 0xFF8E, 0, 0, nullptr }, /* 0xCE */
+ { 0xFF8F, 0, 0, nullptr }, /* 0xCF */
+ { 0xFF90, 0, 0, nullptr }, /* 0xD0 */
+ { 0xFF91, 0, 0, nullptr }, /* 0xD1 */
+ { 0xFF92, 0, 0, nullptr }, /* 0xD2 */
+ { 0xFF93, 0, 0, nullptr }, /* 0xD3 */
+ { 0xFF94, 0, 0, nullptr }, /* 0xD4 */
+ { 0xFF95, 0, 0, nullptr }, /* 0xD5 */
+ { 0xFF96, 0, 0, nullptr }, /* 0xD6 */
+ { 0xFF97, 0, 0, nullptr }, /* 0xD7 */
+ { 0xFF98, 0, 0, nullptr }, /* 0xD8 */
+ { 0xFF99, 0, 0, nullptr }, /* 0xD9 */
+ { 0xFF9A, 0, 0, nullptr }, /* 0xDA */
+ { 0xFF9B, 0, 0, nullptr }, /* 0xDB */
+ { 0xFF9C, 0, 0, nullptr }, /* 0xDC */
+ { 0xFF9D, 0, 0, nullptr }, /* 0xDD */
+ { 0xFF9E, 0, 0, nullptr }, /* 0xDE */
+ { 0xFF9F, 0, 0, nullptr }, /* 0xDF */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 }, /* 0xE0 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 }, /* 0xE1 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 }, /* 0xE2 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 }, /* 0xE3 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 }, /* 0xE4 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 }, /* 0xE5 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 }, /* 0xE6 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 }, /* 0xE7 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 }, /* 0xE8 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 }, /* 0xE9 */
+ { 0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA }, /* 0xEA */
+ { 0, 0x51, 0x7A, aImplDBCSToUniTab_APPLEJAPANESE_EB }, /* 0xEB */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEC */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xED */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEE */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEF */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF0 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF1 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF2 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF3 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF4 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF5 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF6 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF7 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* EUDC Range */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* EUDC Range */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA }, /* 0xFA */ /* We use the MS table for better MS compatibility */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB }, /* 0xFB */ /* We use the MS table for better MS compatibility */
+ { 0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC }, /* 0xFC */ /* We use the MS table for better MS compatibility */
+ { 0x00A9, 0, 0, nullptr }, /* 0xFD */ /* APPLE additions over SJIS */
+ { 0x2122, 0, 0, nullptr }, /* 0xFE */ /* APPLE additions over SJIS */
+ { 0x2026, 0, 0, nullptr } /* 0xFF */ /* APPLE additions over SJIS */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aAPPLEJAPANESEDBCSHighTab[256] =
+{
+ { 0x00, 0xF7, aImplUniToDBCSTab_APPLEJAPANESE_00 }, /* 0x00 */
+ { 1, 0, nullptr }, /* 0x01 */
+ { 1, 0, nullptr }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 }, /* 0x20 */
+ { 0x03, 0xE9, aImplUniToDBCSTab_APPLEJAPANESE_21 }, /* 0x21 */
+ { 0x00, 0xEF, aImplUniToDBCSTab_APPLEJAPANESE_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 }, /* 0x23 */
+ { 0x60, 0xB5, aImplUniToDBCSTab_APPLEJAPANESE_24 }, /* 0x24 */
+ { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 }, /* 0x25 */
+ { 0x05, 0x6F, aImplUniToDBCSTab_APPLEJAPANESE_26 }, /* 0x26 */
+ { 0x76, 0x7E, aImplUniToDBCSTab_APPLEJAPANESE_27 }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_APPLEJAPANESE_30 }, /* 0x30 */
+ { 1, 0, nullptr }, /* 0x31 */
+ { 0x2A, 0xA9, aImplUniToDBCSTab_APPLEJAPANESE_32 }, /* 0x32 */
+ { 0x00, 0xD4, aImplUniToDBCSTab_APPLEJAPANESE_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E }, /* 0x4E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F }, /* 0x4F */
+ { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 }, /* 0x50 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 }, /* 0x52 */
+ { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 }, /* 0x54 */
+ { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 }, /* 0x55 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 }, /* 0x56 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 }, /* 0x57 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 }, /* 0x58 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 }, /* 0x59 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A }, /* 0x5A */
+ { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B }, /* 0x5B */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C }, /* 0x5C */
+ { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D }, /* 0x5D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F }, /* 0x5F */
+ { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 }, /* 0x62 */
+ { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 }, /* 0x63 */
+ { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 }, /* 0x64 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 }, /* 0x67 */
+ { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 }, /* 0x68 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 }, /* 0x69 */
+ { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A }, /* 0x6A */
+ { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B }, /* 0x6B */
+ { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C }, /* 0x6C */
+ { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D }, /* 0x6D */
+ { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E }, /* 0x6E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F }, /* 0x6F */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 }, /* 0x70 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 }, /* 0x71 */
+ { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 }, /* 0x72 */
+ { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 }, /* 0x73 */
+ { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 }, /* 0x74 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 }, /* 0x75 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 }, /* 0x76 */
+ { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 }, /* 0x77 */
+ { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A }, /* 0x7A */
+ { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B }, /* 0x7B */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D }, /* 0x7D */
+ { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E }, /* 0x7E */
+ { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 }, /* 0x81 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 }, /* 0x82 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 }, /* 0x83 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 }, /* 0x84 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 }, /* 0x85 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 }, /* 0x87 */
+ { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 }, /* 0x88 */
+ { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 }, /* 0x89 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A }, /* 0x8A */
+ { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B }, /* 0x8B */
+ { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C }, /* 0x8C */
+ { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D }, /* 0x8D */
+ { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E }, /* 0x8E */
+ { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F }, /* 0x8F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 }, /* 0x90 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 }, /* 0x91 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 }, /* 0x92 */
+ { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 }, /* 0x93 */
+ { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 }, /* 0x94 */
+ { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 }, /* 0x95 */
+ { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 }, /* 0x97 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 }, /* 0x98 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 }, /* 0x99 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A }, /* 0x9A */
+ { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B }, /* 0x9B */
+ { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C }, /* 0x9C */
+ { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D }, /* 0x9D */
+ { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E }, /* 0x9E */
+ { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 }, /* 0xF9 */
+ { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x30, 0x44, aImplUniToDBCSTab_APPLEJAPANESE_FE }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplAPPLEJAPANESEDBCSCvtData =
+{
+ aAPPLEJAPANESEUniLeadTab,
+ aAPPLEJAPANESEDBCSHighTab,
+ aImplSJISDBCSEUDCTab,
+ DBCS_EUDC_SJIS_COUNT,
+ 0x00, 0xFF,
+ 0x40, 0xFC,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLEJAPANESETextEncodingData
+ = { { &aImplAPPLEJAPANESEDBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-jp",
+ "shift_jis",
+ 1,
+ 2,
+ 2,
+ 128,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* MAC, SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aJIS0208UniLeadTab[128] =
+{
+ { 0, 1, 0, nullptr }, /* 0x00 */
+ { 0, 1, 0, nullptr }, /* 0x01 */
+ { 0, 1, 0, nullptr }, /* 0x02 */
+ { 0, 1, 0, nullptr }, /* 0x03 */
+ { 0, 1, 0, nullptr }, /* 0x04 */
+ { 0, 1, 0, nullptr }, /* 0x05 */
+ { 0, 1, 0, nullptr }, /* 0x06 */
+ { 0, 1, 0, nullptr }, /* 0x07 */
+ { 0, 1, 0, nullptr }, /* 0x08 */
+ { 0, 1, 0, nullptr }, /* 0x09 */
+ { 0, 1, 0, nullptr }, /* 0x0A */
+ { 0, 1, 0, nullptr }, /* 0x0B */
+ { 0, 1, 0, nullptr }, /* 0x0C */
+ { 0, 1, 0, nullptr }, /* 0x0D */
+ { 0, 1, 0, nullptr }, /* 0x0E */
+ { 0, 1, 0, nullptr }, /* 0x0F */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x10 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x11 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x12 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x13 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x14 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x15 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x16 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x17 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x18 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x19 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x20 */ /* We convert this as double byte */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_21 }, /* 0x21 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_22 }, /* 0x22 */
+ { 0, 0x30, 0x7A, aImplDBCSToUniTab_JIS0208_23 }, /* 0x23 */
+ { 0, 0x21, 0x73, aImplDBCSToUniTab_JIS0208_24 }, /* 0x24 */
+ { 0, 0x21, 0x76, aImplDBCSToUniTab_JIS0208_25 }, /* 0x25 */
+ { 0, 0x21, 0x58, aImplDBCSToUniTab_JIS0208_26 }, /* 0x26 */
+ { 0, 0x21, 0x71, aImplDBCSToUniTab_JIS0208_27 }, /* 0x27 */
+ { 0, 0x21, 0x40, aImplDBCSToUniTab_JIS0208_28 }, /* 0x28 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x29 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2C */ /* We convert this as double byte */
+ { 0, 0x21, 0x7C, aImplDBCSToUniTab_JIS0208_2D }, /* 0x2D */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2F */ /* We convert this as double byte */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_30 }, /* 0x30 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_31 }, /* 0x31 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_32 }, /* 0x32 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_33 }, /* 0x33 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_34 }, /* 0x34 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_35 }, /* 0x35 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_36 }, /* 0x36 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_37 }, /* 0x37 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_38 }, /* 0x38 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_39 }, /* 0x39 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3A }, /* 0x3A */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3B }, /* 0x3B */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3C }, /* 0x3C */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3D }, /* 0x3D */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3E }, /* 0x3E */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3F }, /* 0x3F */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_40 }, /* 0x40 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_41 }, /* 0x41 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_42 }, /* 0x42 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_43 }, /* 0x43 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_44 }, /* 0x44 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_45 }, /* 0x45 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_46 }, /* 0x46 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_47 }, /* 0x47 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_48 }, /* 0x48 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_49 }, /* 0x49 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4A }, /* 0x4A */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4B }, /* 0x4B */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4C }, /* 0x4C */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4D }, /* 0x4D */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4E }, /* 0x4E */
+ { 0, 0x21, 0x53, aImplDBCSToUniTab_JIS0208_4F }, /* 0x4F */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_50 }, /* 0x50 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_51 }, /* 0x51 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_52 }, /* 0x52 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_53 }, /* 0x53 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_54 }, /* 0x54 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_55 }, /* 0x55 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_56 }, /* 0x56 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_57 }, /* 0x57 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_58 }, /* 0x58 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_59 }, /* 0x59 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5A }, /* 0x5A */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5B }, /* 0x5B */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5C }, /* 0x5C */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5D }, /* 0x5D */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5E }, /* 0x5E */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5F }, /* 0x5F */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_60 }, /* 0x60 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_61 }, /* 0x61 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_62 }, /* 0x62 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_63 }, /* 0x63 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_64 }, /* 0x64 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_65 }, /* 0x65 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_66 }, /* 0x66 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_67 }, /* 0x67 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_68 }, /* 0x68 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_69 }, /* 0x69 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6A }, /* 0x6A */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6B }, /* 0x6B */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6C }, /* 0x6C */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6D }, /* 0x6D */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6E }, /* 0x6E */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6F }, /* 0x6F */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_70 }, /* 0x70 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_71 }, /* 0x71 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_72 }, /* 0x72 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_73 }, /* 0x73 */
+ { 0, 0x21, 0x26, aImplDBCSToUniTab_JIS0208_74 }, /* 0x74 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x75 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x76 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x77 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x78 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x79 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7E */ /* We convert this as double byte */
+ { 0, 1, 0, nullptr } /* 0x7F */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aJIS0208DBCSHighTab[256] =
+{
+ { 0xA2, 0xF7, aImplUniToDBCSTab_JIS0208_00 }, /* 0x00 */
+ { 1, 0, nullptr }, /* 0x01 */
+ { 1, 0, nullptr }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_JIS0208_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_JIS0208_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x10, 0x3B, aImplUniToDBCSTab_JIS0208_20 }, /* 0x20 */
+ { 0x03, 0xD4, aImplUniToDBCSTab_JIS0208_21 }, /* 0x21 */
+ { 0x00, 0xBF, aImplUniToDBCSTab_JIS0208_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_JIS0208_23 }, /* 0x23 */
+ { 0x60, 0x73, aImplUniToDBCSTab_JIS0208_24 }, /* 0x24 */
+ { 0x00, 0xEF, aImplUniToDBCSTab_JIS0208_25 }, /* 0x25 */
+ { 0x05, 0x6F, aImplUniToDBCSTab_JIS0208_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_30 }, /* 0x30 */
+ { 1, 0, nullptr }, /* 0x31 */
+ { 0x31, 0xA8, aImplUniToDBCSTab_JIS0208_32 }, /* 0x32 */
+ { 0x03, 0xCD, aImplUniToDBCSTab_JIS0208_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_4E }, /* 0x4E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_4F }, /* 0x4F */
+ { 0x05, 0xFB, aImplUniToDBCSTab_JIS0208_50 }, /* 0x50 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_52 }, /* 0x52 */
+ { 0x01, 0xFA, aImplUniToDBCSTab_JIS0208_53 }, /* 0x53 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_54 }, /* 0x54 */
+ { 0x04, 0xFE, aImplUniToDBCSTab_JIS0208_55 }, /* 0x55 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_JIS0208_56 }, /* 0x56 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_JIS0208_57 }, /* 0x57 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_58 }, /* 0x58 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_59 }, /* 0x59 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_5A }, /* 0x5A */
+ { 0x09, 0xFF, aImplUniToDBCSTab_JIS0208_5B }, /* 0x5B */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_5C }, /* 0x5C */
+ { 0x07, 0xFE, aImplUniToDBCSTab_JIS0208_5D }, /* 0x5D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_JIS0208_5F }, /* 0x5F */
+ { 0x0E, 0xFB, aImplUniToDBCSTab_JIS0208_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_62 }, /* 0x62 */
+ { 0x01, 0xFA, aImplUniToDBCSTab_JIS0208_63 }, /* 0x63 */
+ { 0x06, 0xFE, aImplUniToDBCSTab_JIS0208_64 }, /* 0x64 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_65 }, /* 0x65 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_67 }, /* 0x67 */
+ { 0x02, 0xFA, aImplUniToDBCSTab_JIS0208_68 }, /* 0x68 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_69 }, /* 0x69 */
+ { 0x02, 0xFB, aImplUniToDBCSTab_JIS0208_6A }, /* 0x6A */
+ { 0x04, 0xF3, aImplUniToDBCSTab_JIS0208_6B }, /* 0x6B */
+ { 0x08, 0xF3, aImplUniToDBCSTab_JIS0208_6C }, /* 0x6C */
+ { 0x0B, 0xFB, aImplUniToDBCSTab_JIS0208_6D }, /* 0x6D */
+ { 0x05, 0xFF, aImplUniToDBCSTab_JIS0208_6E }, /* 0x6E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_6F }, /* 0x6F */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_70 }, /* 0x70 */
+ { 0x09, 0xFF, aImplUniToDBCSTab_JIS0208_71 }, /* 0x71 */
+ { 0x06, 0xFD, aImplUniToDBCSTab_JIS0208_72 }, /* 0x72 */
+ { 0x0A, 0xFE, aImplUniToDBCSTab_JIS0208_73 }, /* 0x73 */
+ { 0x03, 0xF8, aImplUniToDBCSTab_JIS0208_74 }, /* 0x74 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_75 }, /* 0x75 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_76 }, /* 0x76 */
+ { 0x01, 0xFC, aImplUniToDBCSTab_JIS0208_77 }, /* 0x77 */
+ { 0x02, 0xFD, aImplUniToDBCSTab_JIS0208_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_7A }, /* 0x7A */
+ { 0x02, 0xF7, aImplUniToDBCSTab_JIS0208_7B }, /* 0x7B */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_7D }, /* 0x7D */
+ { 0x01, 0x9C, aImplUniToDBCSTab_JIS0208_7E }, /* 0x7E */
+ { 0x36, 0xFC, aImplUniToDBCSTab_JIS0208_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_JIS0208_81 }, /* 0x81 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_82 }, /* 0x82 */
+ { 0x02, 0xFD, aImplUniToDBCSTab_JIS0208_83 }, /* 0x83 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_84 }, /* 0x84 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_85 }, /* 0x85 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_JIS0208_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_87 }, /* 0x87 */
+ { 0x05, 0xFE, aImplUniToDBCSTab_JIS0208_88 }, /* 0x88 */
+ { 0x02, 0xF8, aImplUniToDBCSTab_JIS0208_89 }, /* 0x89 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_8A }, /* 0x8A */
+ { 0x00, 0x9A, aImplUniToDBCSTab_JIS0208_8B }, /* 0x8B */
+ { 0x37, 0xFD, aImplUniToDBCSTab_JIS0208_8C }, /* 0x8C */
+ { 0x04, 0xFF, aImplUniToDBCSTab_JIS0208_8D }, /* 0x8D */
+ { 0x08, 0xFE, aImplUniToDBCSTab_JIS0208_8E }, /* 0x8E */
+ { 0x03, 0xFD, aImplUniToDBCSTab_JIS0208_8F }, /* 0x8F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_90 }, /* 0x90 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_91 }, /* 0x91 */
+ { 0x0D, 0xFC, aImplUniToDBCSTab_JIS0208_92 }, /* 0x92 */
+ { 0x06, 0xE8, aImplUniToDBCSTab_JIS0208_93 }, /* 0x93 */
+ { 0x03, 0x81, aImplUniToDBCSTab_JIS0208_94 }, /* 0x94 */
+ { 0x77, 0xE5, aImplUniToDBCSTab_JIS0208_95 }, /* 0x95 */
+ { 0x1C, 0xFB, aImplUniToDBCSTab_JIS0208_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_97 }, /* 0x97 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_98 }, /* 0x98 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_99 }, /* 0x99 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_9A }, /* 0x9A */
+ { 0x06, 0xF5, aImplUniToDBCSTab_JIS0208_9B }, /* 0x9B */
+ { 0x04, 0xF6, aImplUniToDBCSTab_JIS0208_9C }, /* 0x9C */
+ { 0x03, 0xFD, aImplUniToDBCSTab_JIS0208_9D }, /* 0x9D */
+ { 0x1A, 0xFD, aImplUniToDBCSTab_JIS0208_9E }, /* 0x9E */
+ { 0x07, 0xA0, aImplUniToDBCSTab_JIS0208_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 1, 0, nullptr }, /* 0xF9 */
+ { 1, 0, nullptr }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 1, 0, nullptr }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_JIS0208_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSToUniLeadTab const aJIS0212UniLeadTab[128] =
+{
+ { 0, 1, 0, nullptr }, /* 0x00 */
+ { 0, 1, 0, nullptr }, /* 0x01 */
+ { 0, 1, 0, nullptr }, /* 0x02 */
+ { 0, 1, 0, nullptr }, /* 0x03 */
+ { 0, 1, 0, nullptr }, /* 0x04 */
+ { 0, 1, 0, nullptr }, /* 0x05 */
+ { 0, 1, 0, nullptr }, /* 0x06 */
+ { 0, 1, 0, nullptr }, /* 0x07 */
+ { 0, 1, 0, nullptr }, /* 0x08 */
+ { 0, 1, 0, nullptr }, /* 0x09 */
+ { 0, 1, 0, nullptr }, /* 0x0A */
+ { 0, 1, 0, nullptr }, /* 0x0B */
+ { 0, 1, 0, nullptr }, /* 0x0C */
+ { 0, 1, 0, nullptr }, /* 0x0D */
+ { 0, 1, 0, nullptr }, /* 0x0E */
+ { 0, 1, 0, nullptr }, /* 0x0F */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x10 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x11 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x12 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x13 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x14 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x15 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x16 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x17 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x18 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x19 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x20 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x21 */ /* We convert this as double byte */
+ { 0, 0x2F, 0x71, aImplDBCSToUniTab_JIS0212_22 }, /* 0x22 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x23 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x24 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x25 */ /* We convert this as double byte */
+ { 0, 0x61, 0x7C, aImplDBCSToUniTab_JIS0212_26 }, /* 0x26 */
+ { 0, 0x42, 0x7E, aImplDBCSToUniTab_JIS0212_27 }, /* 0x27 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x28 */ /* We convert this as double byte */
+ { 0, 0x21, 0x50, aImplDBCSToUniTab_JIS0212_29 }, /* 0x29 */
+ { 0, 0x21, 0x77, aImplDBCSToUniTab_JIS0212_2A }, /* 0x2A */
+ { 0, 0x21, 0x77, aImplDBCSToUniTab_JIS0212_2B }, /* 0x2B */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2F */ /* We convert this as double byte */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_30 }, /* 0x30 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_31 }, /* 0x31 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_32 }, /* 0x32 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_33 }, /* 0x33 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_34 }, /* 0x34 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_35 }, /* 0x35 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_36 }, /* 0x36 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_37 }, /* 0x37 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_38 }, /* 0x38 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_39 }, /* 0x39 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3A }, /* 0x3A */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3B }, /* 0x3B */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3C }, /* 0x3C */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3D }, /* 0x3D */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3E }, /* 0x3E */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3F }, /* 0x3F */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_40 }, /* 0x40 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_41 }, /* 0x41 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_42 }, /* 0x42 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_43 }, /* 0x43 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_44 }, /* 0x44 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_45 }, /* 0x45 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_46 }, /* 0x46 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_47 }, /* 0x47 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_48 }, /* 0x48 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_49 }, /* 0x49 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4A }, /* 0x4A */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4B }, /* 0x4B */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4C }, /* 0x4C */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4D }, /* 0x4D */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4E }, /* 0x4E */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4F }, /* 0x4F */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_50 }, /* 0x50 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_51 }, /* 0x51 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_52 }, /* 0x52 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_53 }, /* 0x53 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_54 }, /* 0x54 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_55 }, /* 0x55 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_56 }, /* 0x56 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_57 }, /* 0x57 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_58 }, /* 0x58 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_59 }, /* 0x59 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5A }, /* 0x5A */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5B }, /* 0x5B */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5C }, /* 0x5C */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5D }, /* 0x5D */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5E }, /* 0x5E */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5F }, /* 0x5F */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_60 }, /* 0x60 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_61 }, /* 0x61 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_62 }, /* 0x62 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_63 }, /* 0x63 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_64 }, /* 0x64 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_65 }, /* 0x65 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_66 }, /* 0x66 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_67 }, /* 0x67 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_68 }, /* 0x68 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_69 }, /* 0x69 */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6A }, /* 0x6A */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6B }, /* 0x6B */
+ { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6C }, /* 0x6C */
+ { 0, 0x21, 0x63, aImplDBCSToUniTab_JIS0212_6D }, /* 0x6D */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x6E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x6F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x70 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x71 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x72 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x73 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x74 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x75 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x76 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x77 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x78 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x79 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7E */ /* We convert this as double byte */
+ { 0, 1, 0, nullptr } /* 0x7F */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aJIS0212DBCSHighTab[256] =
+{
+ { 0xA1, 0xFF, aImplUniToDBCSTab_JIS0212_00 }, /* 0x00 */
+ { 0x00, 0xF5, aImplUniToDBCSTab_JIS0212_01 }, /* 0x01 */
+ { 0xC7, 0xDD, aImplUniToDBCSTab_JIS0212_02 }, /* 0x02 */
+ { 0x84, 0xCE, aImplUniToDBCSTab_JIS0212_03 }, /* 0x03 */
+ { 0x02, 0x5F, aImplUniToDBCSTab_JIS0212_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 1, 0, nullptr }, /* 0x20 */
+ { 0x16, 0x22, aImplUniToDBCSTab_JIS0212_21 }, /* 0x21 */
+ { 1, 0, nullptr }, /* 0x22 */
+ { 1, 0, nullptr }, /* 0x23 */
+ { 1, 0, nullptr }, /* 0x24 */
+ { 1, 0, nullptr }, /* 0x25 */
+ { 1, 0, nullptr }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 1, 0, nullptr }, /* 0x30 */
+ { 1, 0, nullptr }, /* 0x31 */
+ { 1, 0, nullptr }, /* 0x32 */
+ { 1, 0, nullptr }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_4E }, /* 0x4E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_4F }, /* 0x4F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_50 }, /* 0x50 */
+ { 0x03, 0xF7, aImplUniToDBCSTab_JIS0212_51 }, /* 0x51 */
+ { 0x01, 0xF7, aImplUniToDBCSTab_JIS0212_52 }, /* 0x52 */
+ { 0x00, 0xF5, aImplUniToDBCSTab_JIS0212_53 }, /* 0x53 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_54 }, /* 0x54 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_55 }, /* 0x55 */
+ { 0x05, 0xF7, aImplUniToDBCSTab_JIS0212_56 }, /* 0x56 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_57 }, /* 0x57 */
+ { 0x03, 0xF3, aImplUniToDBCSTab_JIS0212_58 }, /* 0x58 */
+ { 0x05, 0xF7, aImplUniToDBCSTab_JIS0212_59 }, /* 0x59 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_5A }, /* 0x5A */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_5B }, /* 0x5B */
+ { 0x0C, 0xF4, aImplUniToDBCSTab_JIS0212_5C }, /* 0x5C */
+ { 0x01, 0xF9, aImplUniToDBCSTab_JIS0212_5D }, /* 0x5D */
+ { 0x00, 0xEB, aImplUniToDBCSTab_JIS0212_5E }, /* 0x5E */
+ { 0x02, 0xFC, aImplUniToDBCSTab_JIS0212_5F }, /* 0x5F */
+ { 0x07, 0xFD, aImplUniToDBCSTab_JIS0212_60 }, /* 0x60 */
+ { 0x02, 0xEF, aImplUniToDBCSTab_JIS0212_61 }, /* 0x61 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_62 }, /* 0x62 */
+ { 0x03, 0xF9, aImplUniToDBCSTab_JIS0212_63 }, /* 0x63 */
+ { 0x09, 0xFF, aImplUniToDBCSTab_JIS0212_64 }, /* 0x64 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_65 }, /* 0x65 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_JIS0212_66 }, /* 0x66 */
+ { 0x05, 0xF9, aImplUniToDBCSTab_JIS0212_67 }, /* 0x67 */
+ { 0x04, 0xFD, aImplUniToDBCSTab_JIS0212_68 }, /* 0x68 */
+ { 0x06, 0xFE, aImplUniToDBCSTab_JIS0212_69 }, /* 0x69 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_6A }, /* 0x6A */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_6B }, /* 0x6B */
+ { 0x02, 0xF4, aImplUniToDBCSTab_JIS0212_6C }, /* 0x6C */
+ { 0x04, 0xFC, aImplUniToDBCSTab_JIS0212_6D }, /* 0x6D */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_6E }, /* 0x6E */
+ { 0x04, 0xFD, aImplUniToDBCSTab_JIS0212_6F }, /* 0x6F */
+ { 0x00, 0xFA, aImplUniToDBCSTab_JIS0212_70 }, /* 0x70 */
+ { 0x03, 0xFE, aImplUniToDBCSTab_JIS0212_71 }, /* 0x71 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_72 }, /* 0x72 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_73 }, /* 0x73 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_74 }, /* 0x74 */
+ { 0x06, 0xF9, aImplUniToDBCSTab_JIS0212_75 }, /* 0x75 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_76 }, /* 0x76 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_JIS0212_77 }, /* 0x77 */
+ { 0x05, 0xFF, aImplUniToDBCSTab_JIS0212_78 }, /* 0x78 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_79 }, /* 0x79 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_7A }, /* 0x7A */
+ { 0x07, 0xFE, aImplUniToDBCSTab_JIS0212_7B }, /* 0x7B */
+ { 0x01, 0xF5, aImplUniToDBCSTab_JIS0212_7C }, /* 0x7C */
+ { 0x03, 0xFA, aImplUniToDBCSTab_JIS0212_7D }, /* 0x7D */
+ { 0x00, 0x9E, aImplUniToDBCSTab_JIS0212_7E }, /* 0x7E */
+ { 0x3B, 0xFF, aImplUniToDBCSTab_JIS0212_7F }, /* 0x7F */
+ { 0x07, 0xFE, aImplUniToDBCSTab_JIS0212_80 }, /* 0x80 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_JIS0212_81 }, /* 0x81 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_82 }, /* 0x82 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_83 }, /* 0x83 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_84 }, /* 0x84 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_85 }, /* 0x85 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_86 }, /* 0x86 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_JIS0212_87 }, /* 0x87 */
+ { 0x01, 0xF7, aImplUniToDBCSTab_JIS0212_88 }, /* 0x88 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_89 }, /* 0x89 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_JIS0212_8A }, /* 0x8A */
+ { 0x05, 0x9F, aImplUniToDBCSTab_JIS0212_8B }, /* 0x8B */
+ { 0x38, 0xFF, aImplUniToDBCSTab_JIS0212_8C }, /* 0x8C */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_8D }, /* 0x8D */
+ { 0x01, 0xFA, aImplUniToDBCSTab_JIS0212_8E }, /* 0x8E */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_8F }, /* 0x8F */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_90 }, /* 0x90 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_91 }, /* 0x91 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_92 }, /* 0x92 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_93 }, /* 0x93 */
+ { 0x01, 0x84, aImplUniToDBCSTab_JIS0212_94 }, /* 0x94 */
+ { 0x78, 0xE6, aImplUniToDBCSTab_JIS0212_95 }, /* 0x95 */
+ { 0x1D, 0xFA, aImplUniToDBCSTab_JIS0212_96 }, /* 0x96 */
+ { 0x02, 0xFA, aImplUniToDBCSTab_JIS0212_97 }, /* 0x97 */
+ { 0x07, 0xF6, aImplUniToDBCSTab_JIS0212_98 }, /* 0x98 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_99 }, /* 0x99 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_9A }, /* 0x9A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_9B }, /* 0x9B */
+ { 0x00, 0xF9, aImplUniToDBCSTab_JIS0212_9C }, /* 0x9C */
+ { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_9D }, /* 0x9D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_9E }, /* 0x9E */
+ { 0x02, 0xA5, aImplUniToDBCSTab_JIS0212_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 1, 0, nullptr }, /* 0xF9 */
+ { 1, 0, nullptr }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 1, 0, nullptr }, /* 0xFE */
+ { 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplEUCJPConvertData const aImplEUCJPCvtData =
+{
+ aJIS0208UniLeadTab,
+ aJIS0212UniLeadTab,
+ aJIS0208DBCSHighTab,
+ aJIS0212DBCSHighTab
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplEUCJPTextEncodingData
+ = { { &aImplEUCJPCvtData,
+ ImplEUCJPToUnicode,
+ ImplUnicodeToEUCJP,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-jp",
+ "euc-jp",
+ 1,
+ 3,
+ 2,
+ 128,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
+
+/* ======================================================================= */
+
+/* !!! JIS - X Encodings not complete !!! */
+
+#define HALFWIDTHKANA_START 0xFF61
+#define HALFWIDTHKANA_END 0xFF9F
+
+unsigned char const aImplJISX0201Tab[HALFWIDTHKANA_END - HALFWIDTHKANA_START + 1] =
+{
+ 0xA1, 0xA2, 0xA3, 0xA4, 0x5A, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplJISX0201ByteCvtData =
+{
+ nullptr,
+ nullptr,
+ aImplJISX0201Tab,
+ nullptr,
+ nullptr,
+ 0, 0,
+ 0, 0,
+ HALFWIDTHKANA_START, HALFWIDTHKANA_END,
+ 0, 0,
+ 0
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplJISX0201TextEncodingData
+ = { { &aImplJISX0201ByteCvtData,
+ nullptr,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-jp",
+ "euc-jp",
+ 1,
+ 1,
+ 1,
+ 128,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
+
+/* ======================================================================= */
+
+ImplDBCSConvertData const aImplJISX0208DBCSCvtData =
+{
+ nullptr,
+ aJIS0208DBCSHighTab,
+ nullptr,
+ 0,
+ 0x00, 0xFF,
+ 0x21, 0x7E,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplJISX0208TextEncodingData
+ = { { &aImplJISX0208DBCSCvtData,
+ nullptr,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-jp",
+ "euc-jp",
+ 2,
+ 2,
+ 2,
+ 128,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
+
+/* ======================================================================= */
+
+ImplDBCSConvertData const aImplJISX0212DBCSCvtData =
+{
+ nullptr,
+ aJIS0212DBCSHighTab,
+ nullptr,
+ 0,
+ 0x00, 0xFF,
+ 0x21, 0x7E,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplJISX0212TextEncodingData
+ = { { &aImplJISX0212DBCSCvtData,
+ nullptr,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-jp",
+ "euc-jp",
+ 2,
+ 2,
+ 2,
+ 128,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
diff --git a/sal/textenc/tcvtkr1.tab b/sal/textenc/tcvtkr1.tab
new file mode 100644
index 000000000..9160f5048
--- /dev/null
+++ b/sal/textenc/tcvtkr1.tab
@@ -0,0 +1,3314 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* Mapping tables from KS X 1001:1992 (formerly known as KS C 5601-1992) to
+ Unicode.
+
+ The mappings are suitable for the EUC-KR encoding (first and second byte
+ each ranging from 0xA1 to 0xFE), and for ISO-2022-KR if you subtract
+ accordingly. But note that the tables are too "large" for both EUC-KR and
+ ISO-2022-KR (and map undefined input to Unicode code points), because they
+ also support UHC.
+
+ The mappings also include UHC encoding (Unified Hangul Code, also known as
+ Microsoft Code Page 949), which is a superset of EUC-KR (extra first byte
+ range 0x81 to 0xA0, extra second byte ranges 0x41 to 0x5A, 0x61 to 0x7A,
+ and 0x81 to 0xA0, even within the original EUC-KR area).
+
+ The mappings are also used for the HangulTalk encoding (Macintosh), although
+ this contains some other EUC-KR extensions (that are thus not supported):
+ special single byte characters 0x81, 0x82, 0x83, 0xFE, and 0xFF; extra
+ double byte characters within first byte range 0xA1 to 0xAD and second byte
+ range 0x41 to 0xFE, even within the original EUC-KR area).
+ */
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAC02, 0xAC03, 0xAC05, 0xAC06, 0xAC0B, 0xAC0C, 0xAC0D, /* 0x40 */
+ 0xAC0E, 0xAC0F, 0xAC18, 0xAC1E, 0xAC1F, 0xAC21, 0xAC22, 0xAC23, /* 0x40 */
+ 0xAC25, 0xAC26, 0xAC27, 0xAC28, 0xAC29, 0xAC2A, 0xAC2B, 0xAC2E, /* 0x50 */
+ 0xAC32, 0xAC33, 0xAC34, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xAC35, 0xAC36, 0xAC37, 0xAC3A, 0xAC3B, 0xAC3D, 0xAC3E, /* 0x60 */
+ 0xAC3F, 0xAC41, 0xAC42, 0xAC43, 0xAC44, 0xAC45, 0xAC46, 0xAC47, /* 0x60 */
+ 0xAC48, 0xAC49, 0xAC4A, 0xAC4C, 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, /* 0x70 */
+ 0xAC52, 0xAC53, 0xAC55, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xAC56, 0xAC57, 0xAC59, 0xAC5A, 0xAC5B, 0xAC5D, 0xAC5E, /* 0x80 */
+ 0xAC5F, 0xAC60, 0xAC61, 0xAC62, 0xAC63, 0xAC64, 0xAC65, 0xAC66, /* 0x80 */
+ 0xAC67, 0xAC68, 0xAC69, 0xAC6A, 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E, /* 0x90 */
+ 0xAC6F, 0xAC72, 0xAC73, 0xAC75, 0xAC76, 0xAC79, 0xAC7B, 0xAC7C, /* 0x90 */
+ 0xAC7D, 0xAC7E, 0xAC7F, 0xAC82, 0xAC87, 0xAC88, 0xAC8D, 0xAC8E, /* 0xA0 */
+ 0xAC8F, 0xAC91, 0xAC92, 0xAC93, 0xAC95, 0xAC96, 0xAC97, 0xAC98, /* 0xA0 */
+ 0xAC99, 0xAC9A, 0xAC9B, 0xAC9E, 0xACA2, 0xACA3, 0xACA4, 0xACA5, /* 0xB0 */
+ 0xACA6, 0xACA7, 0xACAB, 0xACAD, 0xACAE, 0xACB1, 0xACB2, 0xACB3, /* 0xB0 */
+ 0xACB4, 0xACB5, 0xACB6, 0xACB7, 0xACBA, 0xACBE, 0xACBF, 0xACC0, /* 0xC0 */
+ 0xACC2, 0xACC3, 0xACC5, 0xACC6, 0xACC7, 0xACC9, 0xACCA, 0xACCB, /* 0xC0 */
+ 0xACCD, 0xACCE, 0xACCF, 0xACD0, 0xACD1, 0xACD2, 0xACD3, 0xACD4, /* 0xD0 */
+ 0xACD6, 0xACD8, 0xACD9, 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACDE, /* 0xD0 */
+ 0xACDF, 0xACE2, 0xACE3, 0xACE5, 0xACE6, 0xACE9, 0xACEB, 0xACED, /* 0xE0 */
+ 0xACEE, 0xACF2, 0xACF4, 0xACF7, 0xACF8, 0xACF9, 0xACFA, 0xACFB, /* 0xE0 */
+ 0xACFE, 0xACFF, 0xAD01, 0xAD02, 0xAD03, 0xAD05, 0xAD07, 0xAD08, /* 0xF0 */
+ 0xAD09, 0xAD0A, 0xAD0B, 0xAD0E, 0xAD10, 0xAD12, 0xAD13 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAD14, 0xAD15, 0xAD16, 0xAD17, 0xAD19, 0xAD1A, 0xAD1B, /* 0x40 */
+ 0xAD1D, 0xAD1E, 0xAD1F, 0xAD21, 0xAD22, 0xAD23, 0xAD24, 0xAD25, /* 0x40 */
+ 0xAD26, 0xAD27, 0xAD28, 0xAD2A, 0xAD2B, 0xAD2E, 0xAD2F, 0xAD30, /* 0x50 */
+ 0xAD31, 0xAD32, 0xAD33, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xAD36, 0xAD37, 0xAD39, 0xAD3A, 0xAD3B, 0xAD3D, 0xAD3E, /* 0x60 */
+ 0xAD3F, 0xAD40, 0xAD41, 0xAD42, 0xAD43, 0xAD46, 0xAD48, 0xAD4A, /* 0x60 */
+ 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD51, 0xAD52, 0xAD53, /* 0x70 */
+ 0xAD55, 0xAD56, 0xAD57, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xAD59, 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, 0xAD5F, /* 0x80 */
+ 0xAD60, 0xAD62, 0xAD64, 0xAD65, 0xAD66, 0xAD67, 0xAD68, 0xAD69, /* 0x80 */
+ 0xAD6A, 0xAD6B, 0xAD6E, 0xAD6F, 0xAD71, 0xAD72, 0xAD77, 0xAD78, /* 0x90 */
+ 0xAD79, 0xAD7A, 0xAD7E, 0xAD80, 0xAD83, 0xAD84, 0xAD85, 0xAD86, /* 0x90 */
+ 0xAD87, 0xAD8A, 0xAD8B, 0xAD8D, 0xAD8E, 0xAD8F, 0xAD91, 0xAD92, /* 0xA0 */
+ 0xAD93, 0xAD94, 0xAD95, 0xAD96, 0xAD97, 0xAD98, 0xAD99, 0xAD9A, /* 0xA0 */
+ 0xAD9B, 0xAD9E, 0xAD9F, 0xADA0, 0xADA1, 0xADA2, 0xADA3, 0xADA5, /* 0xB0 */
+ 0xADA6, 0xADA7, 0xADA8, 0xADA9, 0xADAA, 0xADAB, 0xADAC, 0xADAD, /* 0xB0 */
+ 0xADAE, 0xADAF, 0xADB0, 0xADB1, 0xADB2, 0xADB3, 0xADB4, 0xADB5, /* 0xC0 */
+ 0xADB6, 0xADB8, 0xADB9, 0xADBA, 0xADBB, 0xADBC, 0xADBD, 0xADBE, /* 0xC0 */
+ 0xADBF, 0xADC2, 0xADC3, 0xADC5, 0xADC6, 0xADC7, 0xADC9, 0xADCA, /* 0xD0 */
+ 0xADCB, 0xADCC, 0xADCD, 0xADCE, 0xADCF, 0xADD2, 0xADD4, 0xADD5, /* 0xD0 */
+ 0xADD6, 0xADD7, 0xADD8, 0xADD9, 0xADDA, 0xADDB, 0xADDD, 0xADDE, /* 0xE0 */
+ 0xADDF, 0xADE1, 0xADE2, 0xADE3, 0xADE5, 0xADE6, 0xADE7, 0xADE8, /* 0xE0 */
+ 0xADE9, 0xADEA, 0xADEB, 0xADEC, 0xADED, 0xADEE, 0xADEF, 0xADF0, /* 0xF0 */
+ 0xADF1, 0xADF2, 0xADF3, 0xADF4, 0xADF5, 0xADF6, 0xADF7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xADFA, 0xADFB, 0xADFD, 0xADFE, 0xAE02, 0xAE03, 0xAE04, /* 0x40 */
+ 0xAE05, 0xAE06, 0xAE07, 0xAE0A, 0xAE0C, 0xAE0E, 0xAE0F, 0xAE10, /* 0x40 */
+ 0xAE11, 0xAE12, 0xAE13, 0xAE15, 0xAE16, 0xAE17, 0xAE18, 0xAE19, /* 0x50 */
+ 0xAE1A, 0xAE1B, 0xAE1C, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xAE1D, 0xAE1E, 0xAE1F, 0xAE20, 0xAE21, 0xAE22, 0xAE23, /* 0x60 */
+ 0xAE24, 0xAE25, 0xAE26, 0xAE27, 0xAE28, 0xAE29, 0xAE2A, 0xAE2B, /* 0x60 */
+ 0xAE2C, 0xAE2D, 0xAE2E, 0xAE2F, 0xAE32, 0xAE33, 0xAE35, 0xAE36, /* 0x70 */
+ 0xAE39, 0xAE3B, 0xAE3C, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xAE3D, 0xAE3E, 0xAE3F, 0xAE42, 0xAE44, 0xAE47, 0xAE48, /* 0x80 */
+ 0xAE49, 0xAE4B, 0xAE4F, 0xAE51, 0xAE52, 0xAE53, 0xAE55, 0xAE57, /* 0x80 */
+ 0xAE58, 0xAE59, 0xAE5A, 0xAE5B, 0xAE5E, 0xAE62, 0xAE63, 0xAE64, /* 0x90 */
+ 0xAE66, 0xAE67, 0xAE6A, 0xAE6B, 0xAE6D, 0xAE6E, 0xAE6F, 0xAE71, /* 0x90 */
+ 0xAE72, 0xAE73, 0xAE74, 0xAE75, 0xAE76, 0xAE77, 0xAE7A, 0xAE7E, /* 0xA0 */
+ 0xAE7F, 0xAE80, 0xAE81, 0xAE82, 0xAE83, 0xAE86, 0xAE87, 0xAE88, /* 0xA0 */
+ 0xAE89, 0xAE8A, 0xAE8B, 0xAE8D, 0xAE8E, 0xAE8F, 0xAE90, 0xAE91, /* 0xB0 */
+ 0xAE92, 0xAE93, 0xAE94, 0xAE95, 0xAE96, 0xAE97, 0xAE98, 0xAE99, /* 0xB0 */
+ 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D, 0xAE9E, 0xAE9F, 0xAEA0, 0xAEA1, /* 0xC0 */
+ 0xAEA2, 0xAEA3, 0xAEA4, 0xAEA5, 0xAEA6, 0xAEA7, 0xAEA8, 0xAEA9, /* 0xC0 */
+ 0xAEAA, 0xAEAB, 0xAEAC, 0xAEAD, 0xAEAE, 0xAEAF, 0xAEB0, 0xAEB1, /* 0xD0 */
+ 0xAEB2, 0xAEB3, 0xAEB4, 0xAEB5, 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, /* 0xD0 */
+ 0xAEBA, 0xAEBB, 0xAEBF, 0xAEC1, 0xAEC2, 0xAEC3, 0xAEC5, 0xAEC6, /* 0xE0 */
+ 0xAEC7, 0xAEC8, 0xAEC9, 0xAECA, 0xAECB, 0xAECE, 0xAED2, 0xAED3, /* 0xE0 */
+ 0xAED4, 0xAED5, 0xAED6, 0xAED7, 0xAEDA, 0xAEDB, 0xAEDD, 0xAEDE, /* 0xF0 */
+ 0xAEDF, 0xAEE0, 0xAEE1, 0xAEE2, 0xAEE3, 0xAEE4, 0xAEE5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAEE6, 0xAEE7, 0xAEE9, 0xAEEA, 0xAEEC, 0xAEEE, 0xAEEF, /* 0x40 */
+ 0xAEF0, 0xAEF1, 0xAEF2, 0xAEF3, 0xAEF5, 0xAEF6, 0xAEF7, 0xAEF9, /* 0x40 */
+ 0xAEFA, 0xAEFB, 0xAEFD, 0xAEFE, 0xAEFF, 0xAF00, 0xAF01, 0xAF02, /* 0x50 */
+ 0xAF03, 0xAF04, 0xAF05, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xAF06, 0xAF09, 0xAF0A, 0xAF0B, 0xAF0C, 0xAF0E, 0xAF0F, /* 0x60 */
+ 0xAF11, 0xAF12, 0xAF13, 0xAF14, 0xAF15, 0xAF16, 0xAF17, 0xAF18, /* 0x60 */
+ 0xAF19, 0xAF1A, 0xAF1B, 0xAF1C, 0xAF1D, 0xAF1E, 0xAF1F, 0xAF20, /* 0x70 */
+ 0xAF21, 0xAF22, 0xAF23, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xAF24, 0xAF25, 0xAF26, 0xAF27, 0xAF28, 0xAF29, 0xAF2A, /* 0x80 */
+ 0xAF2B, 0xAF2E, 0xAF2F, 0xAF31, 0xAF33, 0xAF35, 0xAF36, 0xAF37, /* 0x80 */
+ 0xAF38, 0xAF39, 0xAF3A, 0xAF3B, 0xAF3E, 0xAF40, 0xAF44, 0xAF45, /* 0x90 */
+ 0xAF46, 0xAF47, 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, /* 0x90 */
+ 0xAF51, 0xAF52, 0xAF53, 0xAF54, 0xAF55, 0xAF56, 0xAF57, 0xAF58, /* 0xA0 */
+ 0xAF59, 0xAF5A, 0xAF5B, 0xAF5E, 0xAF5F, 0xAF60, 0xAF61, 0xAF62, /* 0xA0 */
+ 0xAF63, 0xAF66, 0xAF67, 0xAF68, 0xAF69, 0xAF6A, 0xAF6B, 0xAF6C, /* 0xB0 */
+ 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xAF71, 0xAF72, 0xAF73, 0xAF74, /* 0xB0 */
+ 0xAF75, 0xAF76, 0xAF77, 0xAF78, 0xAF7A, 0xAF7B, 0xAF7C, 0xAF7D, /* 0xC0 */
+ 0xAF7E, 0xAF7F, 0xAF81, 0xAF82, 0xAF83, 0xAF85, 0xAF86, 0xAF87, /* 0xC0 */
+ 0xAF89, 0xAF8A, 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, 0xAF8F, 0xAF92, /* 0xD0 */
+ 0xAF93, 0xAF94, 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, 0xAF9B, /* 0xD0 */
+ 0xAF9D, 0xAF9E, 0xAF9F, 0xAFA0, 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, /* 0xE0 */
+ 0xAFA5, 0xAFA6, 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC, /* 0xE0 */
+ 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1, 0xAFB2, 0xAFB3, 0xAFB4, /* 0xF0 */
+ 0xAFB5, 0xAFB6, 0xAFB7, 0xAFBA, 0xAFBB, 0xAFBD, 0xAFBE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAFBF, 0xAFC1, 0xAFC2, 0xAFC3, 0xAFC4, 0xAFC5, 0xAFC6, /* 0x40 */
+ 0xAFCA, 0xAFCC, 0xAFCF, 0xAFD0, 0xAFD1, 0xAFD2, 0xAFD3, 0xAFD5, /* 0x40 */
+ 0xAFD6, 0xAFD7, 0xAFD8, 0xAFD9, 0xAFDA, 0xAFDB, 0xAFDD, 0xAFDE, /* 0x50 */
+ 0xAFDF, 0xAFE0, 0xAFE1, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xAFE2, 0xAFE3, 0xAFE4, 0xAFE5, 0xAFE6, 0xAFE7, 0xAFEA, /* 0x60 */
+ 0xAFEB, 0xAFEC, 0xAFED, 0xAFEE, 0xAFEF, 0xAFF2, 0xAFF3, 0xAFF5, /* 0x60 */
+ 0xAFF6, 0xAFF7, 0xAFF9, 0xAFFA, 0xAFFB, 0xAFFC, 0xAFFD, 0xAFFE, /* 0x70 */
+ 0xAFFF, 0xB002, 0xB003, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB005, 0xB006, 0xB007, 0xB008, 0xB009, 0xB00A, 0xB00B, /* 0x80 */
+ 0xB00D, 0xB00E, 0xB00F, 0xB011, 0xB012, 0xB013, 0xB015, 0xB016, /* 0x80 */
+ 0xB017, 0xB018, 0xB019, 0xB01A, 0xB01B, 0xB01E, 0xB01F, 0xB020, /* 0x90 */
+ 0xB021, 0xB022, 0xB023, 0xB024, 0xB025, 0xB026, 0xB027, 0xB029, /* 0x90 */
+ 0xB02A, 0xB02B, 0xB02C, 0xB02D, 0xB02E, 0xB02F, 0xB030, 0xB031, /* 0xA0 */
+ 0xB032, 0xB033, 0xB034, 0xB035, 0xB036, 0xB037, 0xB038, 0xB039, /* 0xA0 */
+ 0xB03A, 0xB03B, 0xB03C, 0xB03D, 0xB03E, 0xB03F, 0xB040, 0xB041, /* 0xB0 */
+ 0xB042, 0xB043, 0xB046, 0xB047, 0xB049, 0xB04B, 0xB04D, 0xB04F, /* 0xB0 */
+ 0xB050, 0xB051, 0xB052, 0xB056, 0xB058, 0xB05A, 0xB05B, 0xB05C, /* 0xC0 */
+ 0xB05E, 0xB05F, 0xB060, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, /* 0xC0 */
+ 0xB066, 0xB067, 0xB068, 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D, /* 0xD0 */
+ 0xB06E, 0xB06F, 0xB070, 0xB071, 0xB072, 0xB073, 0xB074, 0xB075, /* 0xD0 */
+ 0xB076, 0xB077, 0xB078, 0xB079, 0xB07A, 0xB07B, 0xB07E, 0xB07F, /* 0xE0 */
+ 0xB081, 0xB082, 0xB083, 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, /* 0xE0 */
+ 0xB08A, 0xB08B, 0xB08E, 0xB090, 0xB092, 0xB093, 0xB094, 0xB095, /* 0xF0 */
+ 0xB096, 0xB097, 0xB09B, 0xB09D, 0xB09E, 0xB0A3, 0xB0A4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB0A5, 0xB0A6, 0xB0A7, 0xB0AA, 0xB0B0, 0xB0B2, 0xB0B6, /* 0x40 */
+ 0xB0B7, 0xB0B9, 0xB0BA, 0xB0BB, 0xB0BD, 0xB0BE, 0xB0BF, 0xB0C0, /* 0x40 */
+ 0xB0C1, 0xB0C2, 0xB0C3, 0xB0C6, 0xB0CA, 0xB0CB, 0xB0CC, 0xB0CD, /* 0x50 */
+ 0xB0CE, 0xB0CF, 0xB0D2, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB0D3, 0xB0D5, 0xB0D6, 0xB0D7, 0xB0D9, 0xB0DA, 0xB0DB, /* 0x60 */
+ 0xB0DC, 0xB0DD, 0xB0DE, 0xB0DF, 0xB0E1, 0xB0E2, 0xB0E3, 0xB0E4, /* 0x60 */
+ 0xB0E6, 0xB0E7, 0xB0E8, 0xB0E9, 0xB0EA, 0xB0EB, 0xB0EC, 0xB0ED, /* 0x70 */
+ 0xB0EE, 0xB0EF, 0xB0F0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB0F1, 0xB0F2, 0xB0F3, 0xB0F4, 0xB0F5, 0xB0F6, 0xB0F7, /* 0x80 */
+ 0xB0F8, 0xB0F9, 0xB0FA, 0xB0FB, 0xB0FC, 0xB0FD, 0xB0FE, 0xB0FF, /* 0x80 */
+ 0xB100, 0xB101, 0xB102, 0xB103, 0xB104, 0xB105, 0xB106, 0xB107, /* 0x90 */
+ 0xB10A, 0xB10D, 0xB10E, 0xB10F, 0xB111, 0xB114, 0xB115, 0xB116, /* 0x90 */
+ 0xB117, 0xB11A, 0xB11E, 0xB11F, 0xB120, 0xB121, 0xB122, 0xB126, /* 0xA0 */
+ 0xB127, 0xB129, 0xB12A, 0xB12B, 0xB12D, 0xB12E, 0xB12F, 0xB130, /* 0xA0 */
+ 0xB131, 0xB132, 0xB133, 0xB136, 0xB13A, 0xB13B, 0xB13C, 0xB13D, /* 0xB0 */
+ 0xB13E, 0xB13F, 0xB142, 0xB143, 0xB145, 0xB146, 0xB147, 0xB149, /* 0xB0 */
+ 0xB14A, 0xB14B, 0xB14C, 0xB14D, 0xB14E, 0xB14F, 0xB152, 0xB153, /* 0xC0 */
+ 0xB156, 0xB157, 0xB159, 0xB15A, 0xB15B, 0xB15D, 0xB15E, 0xB15F, /* 0xC0 */
+ 0xB161, 0xB162, 0xB163, 0xB164, 0xB165, 0xB166, 0xB167, 0xB168, /* 0xD0 */
+ 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, /* 0xD0 */
+ 0xB171, 0xB172, 0xB173, 0xB174, 0xB175, 0xB176, 0xB177, 0xB17A, /* 0xE0 */
+ 0xB17B, 0xB17D, 0xB17E, 0xB17F, 0xB181, 0xB183, 0xB184, 0xB185, /* 0xE0 */
+ 0xB186, 0xB187, 0xB18A, 0xB18C, 0xB18E, 0xB18F, 0xB190, 0xB191, /* 0xF0 */
+ 0xB195, 0xB196, 0xB197, 0xB199, 0xB19A, 0xB19B, 0xB19D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB19E, 0xB19F, 0xB1A0, 0xB1A1, 0xB1A2, 0xB1A3, 0xB1A4, /* 0x40 */
+ 0xB1A5, 0xB1A6, 0xB1A7, 0xB1A9, 0xB1AA, 0xB1AB, 0xB1AC, 0xB1AD, /* 0x40 */
+ 0xB1AE, 0xB1AF, 0xB1B0, 0xB1B1, 0xB1B2, 0xB1B3, 0xB1B4, 0xB1B5, /* 0x50 */
+ 0xB1B6, 0xB1B7, 0xB1B8, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB1B9, 0xB1BA, 0xB1BB, 0xB1BC, 0xB1BD, 0xB1BE, 0xB1BF, /* 0x60 */
+ 0xB1C0, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, 0xB1C5, 0xB1C6, 0xB1C7, /* 0x60 */
+ 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB, 0xB1CD, 0xB1CE, 0xB1CF, 0xB1D1, /* 0x70 */
+ 0xB1D2, 0xB1D3, 0xB1D5, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB1D6, 0xB1D7, 0xB1D8, 0xB1D9, 0xB1DA, 0xB1DB, 0xB1DE, /* 0x80 */
+ 0xB1E0, 0xB1E1, 0xB1E2, 0xB1E3, 0xB1E4, 0xB1E5, 0xB1E6, 0xB1E7, /* 0x80 */
+ 0xB1EA, 0xB1EB, 0xB1ED, 0xB1EE, 0xB1EF, 0xB1F1, 0xB1F2, 0xB1F3, /* 0x90 */
+ 0xB1F4, 0xB1F5, 0xB1F6, 0xB1F7, 0xB1F8, 0xB1FA, 0xB1FC, 0xB1FE, /* 0x90 */
+ 0xB1FF, 0xB200, 0xB201, 0xB202, 0xB203, 0xB206, 0xB207, 0xB209, /* 0xA0 */
+ 0xB20A, 0xB20D, 0xB20E, 0xB20F, 0xB210, 0xB211, 0xB212, 0xB213, /* 0xA0 */
+ 0xB216, 0xB218, 0xB21A, 0xB21B, 0xB21C, 0xB21D, 0xB21E, 0xB21F, /* 0xB0 */
+ 0xB221, 0xB222, 0xB223, 0xB224, 0xB225, 0xB226, 0xB227, 0xB228, /* 0xB0 */
+ 0xB229, 0xB22A, 0xB22B, 0xB22C, 0xB22D, 0xB22E, 0xB22F, 0xB230, /* 0xC0 */
+ 0xB231, 0xB232, 0xB233, 0xB235, 0xB236, 0xB237, 0xB238, 0xB239, /* 0xC0 */
+ 0xB23A, 0xB23B, 0xB23D, 0xB23E, 0xB23F, 0xB240, 0xB241, 0xB242, /* 0xD0 */
+ 0xB243, 0xB244, 0xB245, 0xB246, 0xB247, 0xB248, 0xB249, 0xB24A, /* 0xD0 */
+ 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB252, /* 0xE0 */
+ 0xB253, 0xB254, 0xB255, 0xB256, 0xB257, 0xB259, 0xB25A, 0xB25B, /* 0xE0 */
+ 0xB25D, 0xB25E, 0xB25F, 0xB261, 0xB262, 0xB263, 0xB264, 0xB265, /* 0xF0 */
+ 0xB266, 0xB267, 0xB26A, 0xB26B, 0xB26C, 0xB26D, 0xB26E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB26F, 0xB270, 0xB271, 0xB272, 0xB273, 0xB276, 0xB277, /* 0x40 */
+ 0xB278, 0xB279, 0xB27A, 0xB27B, 0xB27D, 0xB27E, 0xB27F, 0xB280, /* 0x40 */
+ 0xB281, 0xB282, 0xB283, 0xB286, 0xB287, 0xB288, 0xB28A, 0xB28B, /* 0x50 */
+ 0xB28C, 0xB28D, 0xB28E, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB28F, 0xB292, 0xB293, 0xB295, 0xB296, 0xB297, 0xB29B, /* 0x60 */
+ 0xB29C, 0xB29D, 0xB29E, 0xB29F, 0xB2A2, 0xB2A4, 0xB2A7, 0xB2A8, /* 0x60 */
+ 0xB2A9, 0xB2AB, 0xB2AD, 0xB2AE, 0xB2AF, 0xB2B1, 0xB2B2, 0xB2B3, /* 0x70 */
+ 0xB2B5, 0xB2B6, 0xB2B7, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB2B8, 0xB2B9, 0xB2BA, 0xB2BB, 0xB2BC, 0xB2BD, 0xB2BE, /* 0x80 */
+ 0xB2BF, 0xB2C0, 0xB2C1, 0xB2C2, 0xB2C3, 0xB2C4, 0xB2C5, 0xB2C6, /* 0x80 */
+ 0xB2C7, 0xB2CA, 0xB2CB, 0xB2CD, 0xB2CE, 0xB2CF, 0xB2D1, 0xB2D3, /* 0x90 */
+ 0xB2D4, 0xB2D5, 0xB2D6, 0xB2D7, 0xB2DA, 0xB2DC, 0xB2DE, 0xB2DF, /* 0x90 */
+ 0xB2E0, 0xB2E1, 0xB2E3, 0xB2E7, 0xB2E9, 0xB2EA, 0xB2F0, 0xB2F1, /* 0xA0 */
+ 0xB2F2, 0xB2F6, 0xB2FC, 0xB2FD, 0xB2FE, 0xB302, 0xB303, 0xB305, /* 0xA0 */
+ 0xB306, 0xB307, 0xB309, 0xB30A, 0xB30B, 0xB30C, 0xB30D, 0xB30E, /* 0xB0 */
+ 0xB30F, 0xB312, 0xB316, 0xB317, 0xB318, 0xB319, 0xB31A, 0xB31B, /* 0xB0 */
+ 0xB31D, 0xB31E, 0xB31F, 0xB320, 0xB321, 0xB322, 0xB323, 0xB324, /* 0xC0 */
+ 0xB325, 0xB326, 0xB327, 0xB328, 0xB329, 0xB32A, 0xB32B, 0xB32C, /* 0xC0 */
+ 0xB32D, 0xB32E, 0xB32F, 0xB330, 0xB331, 0xB332, 0xB333, 0xB334, /* 0xD0 */
+ 0xB335, 0xB336, 0xB337, 0xB338, 0xB339, 0xB33A, 0xB33B, 0xB33C, /* 0xD0 */
+ 0xB33D, 0xB33E, 0xB33F, 0xB340, 0xB341, 0xB342, 0xB343, 0xB344, /* 0xE0 */
+ 0xB345, 0xB346, 0xB347, 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, /* 0xE0 */
+ 0xB34D, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, 0xB353, 0xB357, /* 0xF0 */
+ 0xB359, 0xB35A, 0xB35D, 0xB360, 0xB361, 0xB362, 0xB363 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB366, 0xB368, 0xB36A, 0xB36C, 0xB36D, 0xB36F, 0xB372, /* 0x40 */
+ 0xB373, 0xB375, 0xB376, 0xB377, 0xB379, 0xB37A, 0xB37B, 0xB37C, /* 0x40 */
+ 0xB37D, 0xB37E, 0xB37F, 0xB382, 0xB386, 0xB387, 0xB388, 0xB389, /* 0x50 */
+ 0xB38A, 0xB38B, 0xB38D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB38E, 0xB38F, 0xB391, 0xB392, 0xB393, 0xB395, 0xB396, /* 0x60 */
+ 0xB397, 0xB398, 0xB399, 0xB39A, 0xB39B, 0xB39C, 0xB39D, 0xB39E, /* 0x60 */
+ 0xB39F, 0xB3A2, 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, 0xB3A7, 0xB3A9, /* 0x70 */
+ 0xB3AA, 0xB3AB, 0xB3AD, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB3AE, 0xB3AF, 0xB3B0, 0xB3B1, 0xB3B2, 0xB3B3, 0xB3B4, /* 0x80 */
+ 0xB3B5, 0xB3B6, 0xB3B7, 0xB3B8, 0xB3B9, 0xB3BA, 0xB3BB, 0xB3BC, /* 0x80 */
+ 0xB3BD, 0xB3BE, 0xB3BF, 0xB3C0, 0xB3C1, 0xB3C2, 0xB3C3, 0xB3C6, /* 0x90 */
+ 0xB3C7, 0xB3C9, 0xB3CA, 0xB3CD, 0xB3CF, 0xB3D1, 0xB3D2, 0xB3D3, /* 0x90 */
+ 0xB3D6, 0xB3D8, 0xB3DA, 0xB3DC, 0xB3DE, 0xB3DF, 0xB3E1, 0xB3E2, /* 0xA0 */
+ 0xB3E3, 0xB3E5, 0xB3E6, 0xB3E7, 0xB3E9, 0xB3EA, 0xB3EB, 0xB3EC, /* 0xA0 */
+ 0xB3ED, 0xB3EE, 0xB3EF, 0xB3F0, 0xB3F1, 0xB3F2, 0xB3F3, 0xB3F4, /* 0xB0 */
+ 0xB3F5, 0xB3F6, 0xB3F7, 0xB3F8, 0xB3F9, 0xB3FA, 0xB3FB, 0xB3FD, /* 0xB0 */
+ 0xB3FE, 0xB3FF, 0xB400, 0xB401, 0xB402, 0xB403, 0xB404, 0xB405, /* 0xC0 */
+ 0xB406, 0xB407, 0xB408, 0xB409, 0xB40A, 0xB40B, 0xB40C, 0xB40D, /* 0xC0 */
+ 0xB40E, 0xB40F, 0xB411, 0xB412, 0xB413, 0xB414, 0xB415, 0xB416, /* 0xD0 */
+ 0xB417, 0xB419, 0xB41A, 0xB41B, 0xB41D, 0xB41E, 0xB41F, 0xB421, /* 0xD0 */
+ 0xB422, 0xB423, 0xB424, 0xB425, 0xB426, 0xB427, 0xB42A, 0xB42C, /* 0xE0 */
+ 0xB42D, 0xB42E, 0xB42F, 0xB430, 0xB431, 0xB432, 0xB433, 0xB435, /* 0xE0 */
+ 0xB436, 0xB437, 0xB438, 0xB439, 0xB43A, 0xB43B, 0xB43C, 0xB43D, /* 0xF0 */
+ 0xB43E, 0xB43F, 0xB440, 0xB441, 0xB442, 0xB443, 0xB444 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB445, 0xB446, 0xB447, 0xB448, 0xB449, 0xB44A, 0xB44B, /* 0x40 */
+ 0xB44C, 0xB44D, 0xB44E, 0xB44F, 0xB452, 0xB453, 0xB455, 0xB456, /* 0x40 */
+ 0xB457, 0xB459, 0xB45A, 0xB45B, 0xB45C, 0xB45D, 0xB45E, 0xB45F, /* 0x50 */
+ 0xB462, 0xB464, 0xB466, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0xB46D, 0xB46E, /* 0x60 */
+ 0xB46F, 0xB470, 0xB471, 0xB472, 0xB473, 0xB474, 0xB475, 0xB476, /* 0x60 */
+ 0xB477, 0xB478, 0xB479, 0xB47A, 0xB47B, 0xB47C, 0xB47D, 0xB47E, /* 0x70 */
+ 0xB47F, 0xB481, 0xB482, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB483, 0xB484, 0xB485, 0xB486, 0xB487, 0xB489, 0xB48A, /* 0x80 */
+ 0xB48B, 0xB48C, 0xB48D, 0xB48E, 0xB48F, 0xB490, 0xB491, 0xB492, /* 0x80 */
+ 0xB493, 0xB494, 0xB495, 0xB496, 0xB497, 0xB498, 0xB499, 0xB49A, /* 0x90 */
+ 0xB49B, 0xB49C, 0xB49E, 0xB49F, 0xB4A0, 0xB4A1, 0xB4A2, 0xB4A3, /* 0x90 */
+ 0xB4A5, 0xB4A6, 0xB4A7, 0xB4A9, 0xB4AA, 0xB4AB, 0xB4AD, 0xB4AE, /* 0xA0 */
+ 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B2, 0xB4B3, 0xB4B4, 0xB4B6, 0xB4B8, /* 0xA0 */
+ 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, 0xB4BE, 0xB4BF, 0xB4C1, 0xB4C2, /* 0xB0 */
+ 0xB4C3, 0xB4C5, 0xB4C6, 0xB4C7, 0xB4C9, 0xB4CA, 0xB4CB, 0xB4CC, /* 0xB0 */
+ 0xB4CD, 0xB4CE, 0xB4CF, 0xB4D1, 0xB4D2, 0xB4D3, 0xB4D4, 0xB4D6, /* 0xC0 */
+ 0xB4D7, 0xB4D8, 0xB4D9, 0xB4DA, 0xB4DB, 0xB4DE, 0xB4DF, 0xB4E1, /* 0xC0 */
+ 0xB4E2, 0xB4E5, 0xB4E7, 0xB4E8, 0xB4E9, 0xB4EA, 0xB4EB, 0xB4EE, /* 0xD0 */
+ 0xB4F0, 0xB4F2, 0xB4F3, 0xB4F4, 0xB4F5, 0xB4F6, 0xB4F7, 0xB4F9, /* 0xD0 */
+ 0xB4FA, 0xB4FB, 0xB4FC, 0xB4FD, 0xB4FE, 0xB4FF, 0xB500, 0xB501, /* 0xE0 */
+ 0xB502, 0xB503, 0xB504, 0xB505, 0xB506, 0xB507, 0xB508, 0xB509, /* 0xE0 */
+ 0xB50A, 0xB50B, 0xB50C, 0xB50D, 0xB50E, 0xB50F, 0xB510, 0xB511, /* 0xF0 */
+ 0xB512, 0xB513, 0xB516, 0xB517, 0xB519, 0xB51A, 0xB51D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB51E, 0xB51F, 0xB520, 0xB521, 0xB522, 0xB523, 0xB526, /* 0x40 */
+ 0xB52B, 0xB52C, 0xB52D, 0xB52E, 0xB52F, 0xB532, 0xB533, 0xB535, /* 0x40 */
+ 0xB536, 0xB537, 0xB539, 0xB53A, 0xB53B, 0xB53C, 0xB53D, 0xB53E, /* 0x50 */
+ 0xB53F, 0xB542, 0xB546, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54E, 0xB54F, 0xB551, /* 0x60 */
+ 0xB552, 0xB553, 0xB555, 0xB556, 0xB557, 0xB558, 0xB559, 0xB55A, /* 0x60 */
+ 0xB55B, 0xB55E, 0xB562, 0xB563, 0xB564, 0xB565, 0xB566, 0xB567, /* 0x70 */
+ 0xB568, 0xB569, 0xB56A, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB56B, 0xB56C, 0xB56D, 0xB56E, 0xB56F, 0xB570, 0xB571, /* 0x80 */
+ 0xB572, 0xB573, 0xB574, 0xB575, 0xB576, 0xB577, 0xB578, 0xB579, /* 0x80 */
+ 0xB57A, 0xB57B, 0xB57C, 0xB57D, 0xB57E, 0xB57F, 0xB580, 0xB581, /* 0x90 */
+ 0xB582, 0xB583, 0xB584, 0xB585, 0xB586, 0xB587, 0xB588, 0xB589, /* 0x90 */
+ 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xB58E, 0xB58F, 0xB590, 0xB591, /* 0xA0 */
+ 0xB592, 0xB593, 0xB594, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, /* 0xA0 */
+ 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB59E, 0xB59F, 0xB5A2, 0xB5A3, /* 0xB0 */
+ 0xB5A5, 0xB5A6, 0xB5A7, 0xB5A9, 0xB5AC, 0xB5AD, 0xB5AE, 0xB5AF, /* 0xB0 */
+ 0xB5B2, 0xB5B6, 0xB5B7, 0xB5B8, 0xB5B9, 0xB5BA, 0xB5BE, 0xB5BF, /* 0xC0 */
+ 0xB5C1, 0xB5C2, 0xB5C3, 0xB5C5, 0xB5C6, 0xB5C7, 0xB5C8, 0xB5C9, /* 0xC0 */
+ 0xB5CA, 0xB5CB, 0xB5CE, 0xB5D2, 0xB5D3, 0xB5D4, 0xB5D5, 0xB5D6, /* 0xD0 */
+ 0xB5D7, 0xB5D9, 0xB5DA, 0xB5DB, 0xB5DC, 0xB5DD, 0xB5DE, 0xB5DF, /* 0xD0 */
+ 0xB5E0, 0xB5E1, 0xB5E2, 0xB5E3, 0xB5E4, 0xB5E5, 0xB5E6, 0xB5E7, /* 0xE0 */
+ 0xB5E8, 0xB5E9, 0xB5EA, 0xB5EB, 0xB5ED, 0xB5EE, 0xB5EF, 0xB5F0, /* 0xE0 */
+ 0xB5F1, 0xB5F2, 0xB5F3, 0xB5F4, 0xB5F5, 0xB5F6, 0xB5F7, 0xB5F8, /* 0xF0 */
+ 0xB5F9, 0xB5FA, 0xB5FB, 0xB5FC, 0xB5FD, 0xB5FE, 0xB5FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB600, 0xB601, 0xB602, 0xB603, 0xB604, 0xB605, 0xB606, /* 0x40 */
+ 0xB607, 0xB608, 0xB609, 0xB60A, 0xB60B, 0xB60C, 0xB60D, 0xB60E, /* 0x40 */
+ 0xB60F, 0xB612, 0xB613, 0xB615, 0xB616, 0xB617, 0xB619, 0xB61A, /* 0x50 */
+ 0xB61B, 0xB61C, 0xB61D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB61E, 0xB61F, 0xB620, 0xB621, 0xB622, 0xB623, 0xB624, /* 0x60 */
+ 0xB626, 0xB627, 0xB628, 0xB629, 0xB62A, 0xB62B, 0xB62D, 0xB62E, /* 0x60 */
+ 0xB62F, 0xB630, 0xB631, 0xB632, 0xB633, 0xB635, 0xB636, 0xB637, /* 0x70 */
+ 0xB638, 0xB639, 0xB63A, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB63B, 0xB63C, 0xB63D, 0xB63E, 0xB63F, 0xB640, 0xB641, /* 0x80 */
+ 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xB647, 0xB649, 0xB64A, /* 0x80 */
+ 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, /* 0x90 */
+ 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, /* 0x90 */
+ 0xB65B, 0xB65C, 0xB65D, 0xB65E, 0xB65F, 0xB660, 0xB661, 0xB662, /* 0xA0 */
+ 0xB663, 0xB665, 0xB666, 0xB667, 0xB669, 0xB66A, 0xB66B, 0xB66C, /* 0xA0 */
+ 0xB66D, 0xB66E, 0xB66F, 0xB670, 0xB671, 0xB672, 0xB673, 0xB674, /* 0xB0 */
+ 0xB675, 0xB676, 0xB677, 0xB678, 0xB679, 0xB67A, 0xB67B, 0xB67C, /* 0xB0 */
+ 0xB67D, 0xB67E, 0xB67F, 0xB680, 0xB681, 0xB682, 0xB683, 0xB684, /* 0xC0 */
+ 0xB685, 0xB686, 0xB687, 0xB688, 0xB689, 0xB68A, 0xB68B, 0xB68C, /* 0xC0 */
+ 0xB68D, 0xB68E, 0xB68F, 0xB690, 0xB691, 0xB692, 0xB693, 0xB694, /* 0xD0 */
+ 0xB695, 0xB696, 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0xB69E, /* 0xD0 */
+ 0xB69F, 0xB6A1, 0xB6A2, 0xB6A3, 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, /* 0xE0 */
+ 0xB6A9, 0xB6AA, 0xB6AD, 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B2, 0xB6B3, /* 0xE0 */
+ 0xB6B4, 0xB6B5, 0xB6B6, 0xB6B7, 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, /* 0xF0 */
+ 0xB6BC, 0xB6BD, 0xB6BE, 0xB6BF, 0xB6C0, 0xB6C1, 0xB6C2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB6C3, 0xB6C4, 0xB6C5, 0xB6C6, 0xB6C7, 0xB6C8, 0xB6C9, /* 0x40 */
+ 0xB6CA, 0xB6CB, 0xB6CC, 0xB6CD, 0xB6CE, 0xB6CF, 0xB6D0, 0xB6D1, /* 0x40 */
+ 0xB6D2, 0xB6D3, 0xB6D5, 0xB6D6, 0xB6D7, 0xB6D8, 0xB6D9, 0xB6DA, /* 0x50 */
+ 0xB6DB, 0xB6DC, 0xB6DD, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB6DE, 0xB6DF, 0xB6E0, 0xB6E1, 0xB6E2, 0xB6E3, 0xB6E4, /* 0x60 */
+ 0xB6E5, 0xB6E6, 0xB6E7, 0xB6E8, 0xB6E9, 0xB6EA, 0xB6EB, 0xB6EC, /* 0x60 */
+ 0xB6ED, 0xB6EE, 0xB6EF, 0xB6F1, 0xB6F2, 0xB6F3, 0xB6F5, 0xB6F6, /* 0x70 */
+ 0xB6F7, 0xB6F9, 0xB6FA, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB6FB, 0xB6FC, 0xB6FD, 0xB6FE, 0xB6FF, 0xB702, 0xB703, /* 0x80 */
+ 0xB704, 0xB706, 0xB707, 0xB708, 0xB709, 0xB70A, 0xB70B, 0xB70C, /* 0x80 */
+ 0xB70D, 0xB70E, 0xB70F, 0xB710, 0xB711, 0xB712, 0xB713, 0xB714, /* 0x90 */
+ 0xB715, 0xB716, 0xB717, 0xB718, 0xB719, 0xB71A, 0xB71B, 0xB71C, /* 0x90 */
+ 0xB71D, 0xB71E, 0xB71F, 0xB720, 0xB721, 0xB722, 0xB723, 0xB724, /* 0xA0 */
+ 0xB725, 0xB726, 0xB727, 0xB72A, 0xB72B, 0xB72D, 0xB72E, 0xB731, /* 0xA0 */
+ 0xB732, 0xB733, 0xB734, 0xB735, 0xB736, 0xB737, 0xB73A, 0xB73C, /* 0xB0 */
+ 0xB73D, 0xB73E, 0xB73F, 0xB740, 0xB741, 0xB742, 0xB743, 0xB745, /* 0xB0 */
+ 0xB746, 0xB747, 0xB749, 0xB74A, 0xB74B, 0xB74D, 0xB74E, 0xB74F, /* 0xC0 */
+ 0xB750, 0xB751, 0xB752, 0xB753, 0xB756, 0xB757, 0xB758, 0xB759, /* 0xC0 */
+ 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xB75F, 0xB761, 0xB762, /* 0xD0 */
+ 0xB763, 0xB765, 0xB766, 0xB767, 0xB769, 0xB76A, 0xB76B, 0xB76C, /* 0xD0 */
+ 0xB76D, 0xB76E, 0xB76F, 0xB772, 0xB774, 0xB776, 0xB777, 0xB778, /* 0xE0 */
+ 0xB779, 0xB77A, 0xB77B, 0xB77E, 0xB77F, 0xB781, 0xB782, 0xB783, /* 0xE0 */
+ 0xB785, 0xB786, 0xB787, 0xB788, 0xB789, 0xB78A, 0xB78B, 0xB78E, /* 0xF0 */
+ 0xB793, 0xB794, 0xB795, 0xB79A, 0xB79B, 0xB79D, 0xB79E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB79F, 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, 0xB7A5, 0xB7A6, /* 0x40 */
+ 0xB7A7, 0xB7AA, 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B2, 0xB7B3, /* 0x40 */
+ 0xB7B6, 0xB7B7, 0xB7B9, 0xB7BA, 0xB7BB, 0xB7BC, 0xB7BD, 0xB7BE, /* 0x50 */
+ 0xB7BF, 0xB7C0, 0xB7C1, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB7C2, 0xB7C3, 0xB7C4, 0xB7C5, 0xB7C6, 0xB7C8, 0xB7CA, /* 0x60 */
+ 0xB7CB, 0xB7CC, 0xB7CD, 0xB7CE, 0xB7CF, 0xB7D0, 0xB7D1, 0xB7D2, /* 0x60 */
+ 0xB7D3, 0xB7D4, 0xB7D5, 0xB7D6, 0xB7D7, 0xB7D8, 0xB7D9, 0xB7DA, /* 0x70 */
+ 0xB7DB, 0xB7DC, 0xB7DD, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB7DE, 0xB7DF, 0xB7E0, 0xB7E1, 0xB7E2, 0xB7E3, 0xB7E4, /* 0x80 */
+ 0xB7E5, 0xB7E6, 0xB7E7, 0xB7E8, 0xB7E9, 0xB7EA, 0xB7EB, 0xB7EE, /* 0x80 */
+ 0xB7EF, 0xB7F1, 0xB7F2, 0xB7F3, 0xB7F5, 0xB7F6, 0xB7F7, 0xB7F8, /* 0x90 */
+ 0xB7F9, 0xB7FA, 0xB7FB, 0xB7FE, 0xB802, 0xB803, 0xB804, 0xB805, /* 0x90 */
+ 0xB806, 0xB80A, 0xB80B, 0xB80D, 0xB80E, 0xB80F, 0xB811, 0xB812, /* 0xA0 */
+ 0xB813, 0xB814, 0xB815, 0xB816, 0xB817, 0xB81A, 0xB81C, 0xB81E, /* 0xA0 */
+ 0xB81F, 0xB820, 0xB821, 0xB822, 0xB823, 0xB826, 0xB827, 0xB829, /* 0xB0 */
+ 0xB82A, 0xB82B, 0xB82D, 0xB82E, 0xB82F, 0xB830, 0xB831, 0xB832, /* 0xB0 */
+ 0xB833, 0xB836, 0xB83A, 0xB83B, 0xB83C, 0xB83D, 0xB83E, 0xB83F, /* 0xC0 */
+ 0xB841, 0xB842, 0xB843, 0xB845, 0xB846, 0xB847, 0xB848, 0xB849, /* 0xC0 */
+ 0xB84A, 0xB84B, 0xB84C, 0xB84D, 0xB84E, 0xB84F, 0xB850, 0xB852, /* 0xD0 */
+ 0xB854, 0xB855, 0xB856, 0xB857, 0xB858, 0xB859, 0xB85A, 0xB85B, /* 0xD0 */
+ 0xB85E, 0xB85F, 0xB861, 0xB862, 0xB863, 0xB865, 0xB866, 0xB867, /* 0xE0 */
+ 0xB868, 0xB869, 0xB86A, 0xB86B, 0xB86E, 0xB870, 0xB872, 0xB873, /* 0xE0 */
+ 0xB874, 0xB875, 0xB876, 0xB877, 0xB879, 0xB87A, 0xB87B, 0xB87D, /* 0xF0 */
+ 0xB87E, 0xB87F, 0xB880, 0xB881, 0xB882, 0xB883, 0xB884 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB885, 0xB886, 0xB887, 0xB888, 0xB889, 0xB88A, 0xB88B, /* 0x40 */
+ 0xB88C, 0xB88E, 0xB88F, 0xB890, 0xB891, 0xB892, 0xB893, 0xB894, /* 0x40 */
+ 0xB895, 0xB896, 0xB897, 0xB898, 0xB899, 0xB89A, 0xB89B, 0xB89C, /* 0x50 */
+ 0xB89D, 0xB89E, 0xB89F, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB8A0, 0xB8A1, 0xB8A2, 0xB8A3, 0xB8A4, 0xB8A5, 0xB8A6, /* 0x60 */
+ 0xB8A7, 0xB8A9, 0xB8AA, 0xB8AB, 0xB8AC, 0xB8AD, 0xB8AE, 0xB8AF, /* 0x60 */
+ 0xB8B1, 0xB8B2, 0xB8B3, 0xB8B5, 0xB8B6, 0xB8B7, 0xB8B9, 0xB8BA, /* 0x70 */
+ 0xB8BB, 0xB8BC, 0xB8BD, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB8BE, 0xB8BF, 0xB8C2, 0xB8C4, 0xB8C6, 0xB8C7, 0xB8C8, /* 0x80 */
+ 0xB8C9, 0xB8CA, 0xB8CB, 0xB8CD, 0xB8CE, 0xB8CF, 0xB8D1, 0xB8D2, /* 0x80 */
+ 0xB8D3, 0xB8D5, 0xB8D6, 0xB8D7, 0xB8D8, 0xB8D9, 0xB8DA, 0xB8DB, /* 0x90 */
+ 0xB8DC, 0xB8DE, 0xB8E0, 0xB8E2, 0xB8E3, 0xB8E4, 0xB8E5, 0xB8E6, /* 0x90 */
+ 0xB8E7, 0xB8EA, 0xB8EB, 0xB8ED, 0xB8EE, 0xB8EF, 0xB8F1, 0xB8F2, /* 0xA0 */
+ 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6, 0xB8F7, 0xB8FA, 0xB8FC, 0xB8FE, /* 0xA0 */
+ 0xB8FF, 0xB900, 0xB901, 0xB902, 0xB903, 0xB905, 0xB906, 0xB907, /* 0xB0 */
+ 0xB908, 0xB909, 0xB90A, 0xB90B, 0xB90C, 0xB90D, 0xB90E, 0xB90F, /* 0xB0 */
+ 0xB910, 0xB911, 0xB912, 0xB913, 0xB914, 0xB915, 0xB916, 0xB917, /* 0xC0 */
+ 0xB919, 0xB91A, 0xB91B, 0xB91C, 0xB91D, 0xB91E, 0xB91F, 0xB921, /* 0xC0 */
+ 0xB922, 0xB923, 0xB924, 0xB925, 0xB926, 0xB927, 0xB928, 0xB929, /* 0xD0 */
+ 0xB92A, 0xB92B, 0xB92C, 0xB92D, 0xB92E, 0xB92F, 0xB930, 0xB931, /* 0xD0 */
+ 0xB932, 0xB933, 0xB934, 0xB935, 0xB936, 0xB937, 0xB938, 0xB939, /* 0xE0 */
+ 0xB93A, 0xB93B, 0xB93E, 0xB93F, 0xB941, 0xB942, 0xB943, 0xB945, /* 0xE0 */
+ 0xB946, 0xB947, 0xB948, 0xB949, 0xB94A, 0xB94B, 0xB94D, 0xB94E, /* 0xF0 */
+ 0xB950, 0xB952, 0xB953, 0xB954, 0xB955, 0xB956, 0xB957 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB95A, 0xB95B, 0xB95D, 0xB95E, 0xB95F, 0xB961, 0xB962, /* 0x40 */
+ 0xB963, 0xB964, 0xB965, 0xB966, 0xB967, 0xB96A, 0xB96C, 0xB96E, /* 0x40 */
+ 0xB96F, 0xB970, 0xB971, 0xB972, 0xB973, 0xB976, 0xB977, 0xB979, /* 0x50 */
+ 0xB97A, 0xB97B, 0xB97D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB97E, 0xB97F, 0xB980, 0xB981, 0xB982, 0xB983, 0xB986, /* 0x60 */
+ 0xB988, 0xB98B, 0xB98C, 0xB98F, 0xB990, 0xB991, 0xB992, 0xB993, /* 0x60 */
+ 0xB994, 0xB995, 0xB996, 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, /* 0x70 */
+ 0xB99C, 0xB99D, 0xB99E, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB99F, 0xB9A0, 0xB9A1, 0xB9A2, 0xB9A3, 0xB9A4, 0xB9A5, /* 0x80 */
+ 0xB9A6, 0xB9A7, 0xB9A8, 0xB9A9, 0xB9AA, 0xB9AB, 0xB9AE, 0xB9AF, /* 0x80 */
+ 0xB9B1, 0xB9B2, 0xB9B3, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9, /* 0x90 */
+ 0xB9BA, 0xB9BB, 0xB9BE, 0xB9C0, 0xB9C2, 0xB9C3, 0xB9C4, 0xB9C5, /* 0x90 */
+ 0xB9C6, 0xB9C7, 0xB9CA, 0xB9CB, 0xB9CD, 0xB9D3, 0xB9D4, 0xB9D5, /* 0xA0 */
+ 0xB9D6, 0xB9D7, 0xB9DA, 0xB9DC, 0xB9DF, 0xB9E0, 0xB9E2, 0xB9E6, /* 0xA0 */
+ 0xB9E7, 0xB9E9, 0xB9EA, 0xB9EB, 0xB9ED, 0xB9EE, 0xB9EF, 0xB9F0, /* 0xB0 */
+ 0xB9F1, 0xB9F2, 0xB9F3, 0xB9F6, 0xB9FB, 0xB9FC, 0xB9FD, 0xB9FE, /* 0xB0 */
+ 0xB9FF, 0xBA02, 0xBA03, 0xBA04, 0xBA05, 0xBA06, 0xBA07, 0xBA09, /* 0xC0 */
+ 0xBA0A, 0xBA0B, 0xBA0C, 0xBA0D, 0xBA0E, 0xBA0F, 0xBA10, 0xBA11, /* 0xC0 */
+ 0xBA12, 0xBA13, 0xBA14, 0xBA16, 0xBA17, 0xBA18, 0xBA19, 0xBA1A, /* 0xD0 */
+ 0xBA1B, 0xBA1C, 0xBA1D, 0xBA1E, 0xBA1F, 0xBA20, 0xBA21, 0xBA22, /* 0xD0 */
+ 0xBA23, 0xBA24, 0xBA25, 0xBA26, 0xBA27, 0xBA28, 0xBA29, 0xBA2A, /* 0xE0 */
+ 0xBA2B, 0xBA2C, 0xBA2D, 0xBA2E, 0xBA2F, 0xBA30, 0xBA31, 0xBA32, /* 0xE0 */
+ 0xBA33, 0xBA34, 0xBA35, 0xBA36, 0xBA37, 0xBA3A, 0xBA3B, 0xBA3D, /* 0xF0 */
+ 0xBA3E, 0xBA3F, 0xBA41, 0xBA43, 0xBA44, 0xBA45, 0xBA46 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBA47, 0xBA4A, 0xBA4C, 0xBA4F, 0xBA50, 0xBA51, 0xBA52, /* 0x40 */
+ 0xBA56, 0xBA57, 0xBA59, 0xBA5A, 0xBA5B, 0xBA5D, 0xBA5E, 0xBA5F, /* 0x40 */
+ 0xBA60, 0xBA61, 0xBA62, 0xBA63, 0xBA66, 0xBA6A, 0xBA6B, 0xBA6C, /* 0x50 */
+ 0xBA6D, 0xBA6E, 0xBA6F, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBA72, 0xBA73, 0xBA75, 0xBA76, 0xBA77, 0xBA79, 0xBA7A, /* 0x60 */
+ 0xBA7B, 0xBA7C, 0xBA7D, 0xBA7E, 0xBA7F, 0xBA80, 0xBA81, 0xBA82, /* 0x60 */
+ 0xBA86, 0xBA88, 0xBA89, 0xBA8A, 0xBA8B, 0xBA8D, 0xBA8E, 0xBA8F, /* 0x70 */
+ 0xBA90, 0xBA91, 0xBA92, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, /* 0x80 */
+ 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, 0xBA9F, 0xBAA0, 0xBAA1, /* 0x80 */
+ 0xBAA2, 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0xBAAA, 0xBAAD, /* 0x90 */
+ 0xBAAE, 0xBAAF, 0xBAB1, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, 0xBAB7, /* 0x90 */
+ 0xBABA, 0xBABC, 0xBABE, 0xBABF, 0xBAC0, 0xBAC1, 0xBAC2, 0xBAC3, /* 0xA0 */
+ 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC9, 0xBACA, 0xBACB, 0xBACC, 0xBACD, /* 0xA0 */
+ 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD2, 0xBAD3, 0xBAD4, 0xBAD5, /* 0xB0 */
+ 0xBAD6, 0xBAD7, 0xBADA, 0xBADB, 0xBADC, 0xBADD, 0xBADE, 0xBADF, /* 0xB0 */
+ 0xBAE0, 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6, 0xBAE7, /* 0xC0 */
+ 0xBAE8, 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, 0xBAEF, /* 0xC0 */
+ 0xBAF0, 0xBAF1, 0xBAF2, 0xBAF3, 0xBAF4, 0xBAF5, 0xBAF6, 0xBAF7, /* 0xD0 */
+ 0xBAF8, 0xBAF9, 0xBAFA, 0xBAFB, 0xBAFD, 0xBAFE, 0xBAFF, 0xBB01, /* 0xD0 */
+ 0xBB02, 0xBB03, 0xBB05, 0xBB06, 0xBB07, 0xBB08, 0xBB09, 0xBB0A, /* 0xE0 */
+ 0xBB0B, 0xBB0C, 0xBB0E, 0xBB10, 0xBB12, 0xBB13, 0xBB14, 0xBB15, /* 0xE0 */
+ 0xBB16, 0xBB17, 0xBB19, 0xBB1A, 0xBB1B, 0xBB1D, 0xBB1E, 0xBB1F, /* 0xF0 */
+ 0xBB21, 0xBB22, 0xBB23, 0xBB24, 0xBB25, 0xBB26, 0xBB27 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBB28, 0xBB2A, 0xBB2C, 0xBB2D, 0xBB2E, 0xBB2F, 0xBB30, /* 0x40 */
+ 0xBB31, 0xBB32, 0xBB33, 0xBB37, 0xBB39, 0xBB3A, 0xBB3F, 0xBB40, /* 0x40 */
+ 0xBB41, 0xBB42, 0xBB43, 0xBB46, 0xBB48, 0xBB4A, 0xBB4B, 0xBB4C, /* 0x50 */
+ 0xBB4E, 0xBB51, 0xBB52, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBB53, 0xBB55, 0xBB56, 0xBB57, 0xBB59, 0xBB5A, 0xBB5B, /* 0x60 */
+ 0xBB5C, 0xBB5D, 0xBB5E, 0xBB5F, 0xBB60, 0xBB62, 0xBB64, 0xBB65, /* 0x60 */
+ 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, 0xBB6D, 0xBB6E, /* 0x70 */
+ 0xBB6F, 0xBB70, 0xBB71, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBB72, 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xBB77, 0xBB78, /* 0x80 */
+ 0xBB79, 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB7E, 0xBB7F, 0xBB80, /* 0x80 */
+ 0xBB81, 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, 0xBB87, 0xBB89, /* 0x90 */
+ 0xBB8A, 0xBB8B, 0xBB8D, 0xBB8E, 0xBB8F, 0xBB91, 0xBB92, 0xBB93, /* 0x90 */
+ 0xBB94, 0xBB95, 0xBB96, 0xBB97, 0xBB98, 0xBB99, 0xBB9A, 0xBB9B, /* 0xA0 */
+ 0xBB9C, 0xBB9D, 0xBB9E, 0xBB9F, 0xBBA0, 0xBBA1, 0xBBA2, 0xBBA3, /* 0xA0 */
+ 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA9, 0xBBAA, 0xBBAB, 0xBBAD, 0xBBAE, /* 0xB0 */
+ 0xBBAF, 0xBBB0, 0xBBB1, 0xBBB2, 0xBBB3, 0xBBB5, 0xBBB6, 0xBBB8, /* 0xB0 */
+ 0xBBB9, 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBBBE, 0xBBBF, 0xBBC1, /* 0xC0 */
+ 0xBBC2, 0xBBC3, 0xBBC5, 0xBBC6, 0xBBC7, 0xBBC9, 0xBBCA, 0xBBCB, /* 0xC0 */
+ 0xBBCC, 0xBBCD, 0xBBCE, 0xBBCF, 0xBBD1, 0xBBD2, 0xBBD4, 0xBBD5, /* 0xD0 */
+ 0xBBD6, 0xBBD7, 0xBBD8, 0xBBD9, 0xBBDA, 0xBBDB, 0xBBDC, 0xBBDD, /* 0xD0 */
+ 0xBBDE, 0xBBDF, 0xBBE0, 0xBBE1, 0xBBE2, 0xBBE3, 0xBBE4, 0xBBE5, /* 0xE0 */
+ 0xBBE6, 0xBBE7, 0xBBE8, 0xBBE9, 0xBBEA, 0xBBEB, 0xBBEC, 0xBBED, /* 0xE0 */
+ 0xBBEE, 0xBBEF, 0xBBF0, 0xBBF1, 0xBBF2, 0xBBF3, 0xBBF4, 0xBBF5, /* 0xF0 */
+ 0xBBF6, 0xBBF7, 0xBBFA, 0xBBFB, 0xBBFD, 0xBBFE, 0xBC01 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBC03, 0xBC04, 0xBC05, 0xBC06, 0xBC07, 0xBC0A, 0xBC0E, /* 0x40 */
+ 0xBC10, 0xBC12, 0xBC13, 0xBC19, 0xBC1A, 0xBC20, 0xBC21, 0xBC22, /* 0x40 */
+ 0xBC23, 0xBC26, 0xBC28, 0xBC2A, 0xBC2B, 0xBC2C, 0xBC2E, 0xBC2F, /* 0x50 */
+ 0xBC32, 0xBC33, 0xBC35, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBC36, 0xBC37, 0xBC39, 0xBC3A, 0xBC3B, 0xBC3C, 0xBC3D, /* 0x60 */
+ 0xBC3E, 0xBC3F, 0xBC42, 0xBC46, 0xBC47, 0xBC48, 0xBC4A, 0xBC4B, /* 0x60 */
+ 0xBC4E, 0xBC4F, 0xBC51, 0xBC52, 0xBC53, 0xBC54, 0xBC55, 0xBC56, /* 0x70 */
+ 0xBC57, 0xBC58, 0xBC59, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBC5A, 0xBC5B, 0xBC5C, 0xBC5E, 0xBC5F, 0xBC60, 0xBC61, /* 0x80 */
+ 0xBC62, 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0xBC68, 0xBC69, /* 0x80 */
+ 0xBC6A, 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E, 0xBC6F, 0xBC70, 0xBC71, /* 0x90 */
+ 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, 0xBC77, 0xBC78, 0xBC79, /* 0x90 */
+ 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, 0xBC7E, 0xBC7F, 0xBC80, 0xBC81, /* 0xA0 */
+ 0xBC82, 0xBC83, 0xBC86, 0xBC87, 0xBC89, 0xBC8A, 0xBC8D, 0xBC8F, /* 0xA0 */
+ 0xBC90, 0xBC91, 0xBC92, 0xBC93, 0xBC96, 0xBC98, 0xBC9B, 0xBC9C, /* 0xB0 */
+ 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA2, 0xBCA3, 0xBCA5, 0xBCA6, 0xBCA9, /* 0xB0 */
+ 0xBCAA, 0xBCAB, 0xBCAC, 0xBCAD, 0xBCAE, 0xBCAF, 0xBCB2, 0xBCB6, /* 0xC0 */
+ 0xBCB7, 0xBCB8, 0xBCB9, 0xBCBA, 0xBCBB, 0xBCBE, 0xBCBF, 0xBCC1, /* 0xC0 */
+ 0xBCC2, 0xBCC3, 0xBCC5, 0xBCC6, 0xBCC7, 0xBCC8, 0xBCC9, 0xBCCA, /* 0xD0 */
+ 0xBCCB, 0xBCCC, 0xBCCE, 0xBCD2, 0xBCD3, 0xBCD4, 0xBCD6, 0xBCD7, /* 0xD0 */
+ 0xBCD9, 0xBCDA, 0xBCDB, 0xBCDD, 0xBCDE, 0xBCDF, 0xBCE0, 0xBCE1, /* 0xE0 */
+ 0xBCE2, 0xBCE3, 0xBCE4, 0xBCE5, 0xBCE6, 0xBCE7, 0xBCE8, 0xBCE9, /* 0xE0 */
+ 0xBCEA, 0xBCEB, 0xBCEC, 0xBCED, 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1, /* 0xF0 */
+ 0xBCF2, 0xBCF3, 0xBCF7, 0xBCF9, 0xBCFA, 0xBCFB, 0xBCFD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBCFE, 0xBCFF, 0xBD00, 0xBD01, 0xBD02, 0xBD03, 0xBD06, /* 0x40 */
+ 0xBD08, 0xBD0A, 0xBD0B, 0xBD0C, 0xBD0D, 0xBD0E, 0xBD0F, 0xBD11, /* 0x40 */
+ 0xBD12, 0xBD13, 0xBD15, 0xBD16, 0xBD17, 0xBD18, 0xBD19, 0xBD1A, /* 0x50 */
+ 0xBD1B, 0xBD1C, 0xBD1D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBD1E, 0xBD1F, 0xBD20, 0xBD21, 0xBD22, 0xBD23, 0xBD25, /* 0x60 */
+ 0xBD26, 0xBD27, 0xBD28, 0xBD29, 0xBD2A, 0xBD2B, 0xBD2D, 0xBD2E, /* 0x60 */
+ 0xBD2F, 0xBD30, 0xBD31, 0xBD32, 0xBD33, 0xBD34, 0xBD35, 0xBD36, /* 0x70 */
+ 0xBD37, 0xBD38, 0xBD39, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBD3A, 0xBD3B, 0xBD3C, 0xBD3D, 0xBD3E, 0xBD3F, 0xBD41, /* 0x80 */
+ 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD4A, 0xBD4B, /* 0x80 */
+ 0xBD4D, 0xBD4E, 0xBD4F, 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, /* 0x90 */
+ 0xBD56, 0xBD57, 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F, /* 0x90 */
+ 0xBD60, 0xBD61, 0xBD62, 0xBD63, 0xBD65, 0xBD66, 0xBD67, 0xBD69, /* 0xA0 */
+ 0xBD6A, 0xBD6B, 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, /* 0xA0 */
+ 0xBD72, 0xBD73, 0xBD74, 0xBD75, 0xBD76, 0xBD77, 0xBD78, 0xBD79, /* 0xB0 */
+ 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, 0xBD7E, 0xBD7F, 0xBD82, 0xBD83, /* 0xB0 */
+ 0xBD85, 0xBD86, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, 0xBD92, /* 0xC0 */
+ 0xBD94, 0xBD96, 0xBD97, 0xBD98, 0xBD9B, 0xBD9D, 0xBD9E, 0xBD9F, /* 0xC0 */
+ 0xBDA0, 0xBDA1, 0xBDA2, 0xBDA3, 0xBDA5, 0xBDA6, 0xBDA7, 0xBDA8, /* 0xD0 */
+ 0xBDA9, 0xBDAA, 0xBDAB, 0xBDAC, 0xBDAD, 0xBDAE, 0xBDAF, 0xBDB1, /* 0xD0 */
+ 0xBDB2, 0xBDB3, 0xBDB4, 0xBDB5, 0xBDB6, 0xBDB7, 0xBDB9, 0xBDBA, /* 0xE0 */
+ 0xBDBB, 0xBDBC, 0xBDBD, 0xBDBE, 0xBDBF, 0xBDC0, 0xBDC1, 0xBDC2, /* 0xE0 */
+ 0xBDC3, 0xBDC4, 0xBDC5, 0xBDC6, 0xBDC7, 0xBDC8, 0xBDC9, 0xBDCA, /* 0xF0 */
+ 0xBDCB, 0xBDCC, 0xBDCD, 0xBDCE, 0xBDCF, 0xBDD0, 0xBDD1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDD2, 0xBDD3, 0xBDD6, 0xBDD7, 0xBDD9, 0xBDDA, 0xBDDB, /* 0x40 */
+ 0xBDDD, 0xBDDE, 0xBDDF, 0xBDE0, 0xBDE1, 0xBDE2, 0xBDE3, 0xBDE4, /* 0x40 */
+ 0xBDE5, 0xBDE6, 0xBDE7, 0xBDE8, 0xBDEA, 0xBDEB, 0xBDEC, 0xBDED, /* 0x50 */
+ 0xBDEE, 0xBDEF, 0xBDF1, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBDF2, 0xBDF3, 0xBDF5, 0xBDF6, 0xBDF7, 0xBDF9, 0xBDFA, /* 0x60 */
+ 0xBDFB, 0xBDFC, 0xBDFD, 0xBDFE, 0xBDFF, 0xBE01, 0xBE02, 0xBE04, /* 0x60 */
+ 0xBE06, 0xBE07, 0xBE08, 0xBE09, 0xBE0A, 0xBE0B, 0xBE0E, 0xBE0F, /* 0x70 */
+ 0xBE11, 0xBE12, 0xBE13, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBE15, 0xBE16, 0xBE17, 0xBE18, 0xBE19, 0xBE1A, 0xBE1B, /* 0x80 */
+ 0xBE1E, 0xBE20, 0xBE21, 0xBE22, 0xBE23, 0xBE24, 0xBE25, 0xBE26, /* 0x80 */
+ 0xBE27, 0xBE28, 0xBE29, 0xBE2A, 0xBE2B, 0xBE2C, 0xBE2D, 0xBE2E, /* 0x90 */
+ 0xBE2F, 0xBE30, 0xBE31, 0xBE32, 0xBE33, 0xBE34, 0xBE35, 0xBE36, /* 0x90 */
+ 0xBE37, 0xBE38, 0xBE39, 0xBE3A, 0xBE3B, 0xBE3C, 0xBE3D, 0xBE3E, /* 0xA0 */
+ 0xBE3F, 0xBE40, 0xBE41, 0xBE42, 0xBE43, 0xBE46, 0xBE47, 0xBE49, /* 0xA0 */
+ 0xBE4A, 0xBE4B, 0xBE4D, 0xBE4F, 0xBE50, 0xBE51, 0xBE52, 0xBE53, /* 0xB0 */
+ 0xBE56, 0xBE58, 0xBE5C, 0xBE5D, 0xBE5E, 0xBE5F, 0xBE62, 0xBE63, /* 0xB0 */
+ 0xBE65, 0xBE66, 0xBE67, 0xBE69, 0xBE6B, 0xBE6C, 0xBE6D, 0xBE6E, /* 0xC0 */
+ 0xBE6F, 0xBE72, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7E, /* 0xC0 */
+ 0xBE7F, 0xBE81, 0xBE82, 0xBE83, 0xBE85, 0xBE86, 0xBE87, 0xBE88, /* 0xD0 */
+ 0xBE89, 0xBE8A, 0xBE8B, 0xBE8E, 0xBE92, 0xBE93, 0xBE94, 0xBE95, /* 0xD0 */
+ 0xBE96, 0xBE97, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F, /* 0xE0 */
+ 0xBEA0, 0xBEA1, 0xBEA2, 0xBEA3, 0xBEA4, 0xBEA5, 0xBEA6, 0xBEA7, /* 0xE0 */
+ 0xBEA9, 0xBEAA, 0xBEAB, 0xBEAC, 0xBEAD, 0xBEAE, 0xBEAF, 0xBEB0, /* 0xF0 */
+ 0xBEB1, 0xBEB2, 0xBEB3, 0xBEB4, 0xBEB5, 0xBEB6, 0xBEB7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBEB8, 0xBEB9, 0xBEBA, 0xBEBB, 0xBEBC, 0xBEBD, 0xBEBE, /* 0x40 */
+ 0xBEBF, 0xBEC0, 0xBEC1, 0xBEC2, 0xBEC3, 0xBEC4, 0xBEC5, 0xBEC6, /* 0x40 */
+ 0xBEC7, 0xBEC8, 0xBEC9, 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, /* 0x50 */
+ 0xBECF, 0xBED2, 0xBED3, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBED5, 0xBED6, 0xBED9, 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD, /* 0x60 */
+ 0xBEDE, 0xBEDF, 0xBEE1, 0xBEE2, 0xBEE6, 0xBEE7, 0xBEE8, 0xBEE9, /* 0x60 */
+ 0xBEEA, 0xBEEB, 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, 0xBEF1, 0xBEF2, /* 0x70 */
+ 0xBEF3, 0xBEF4, 0xBEF5, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA, 0xBEFB, 0xBEFC, /* 0x80 */
+ 0xBEFD, 0xBEFE, 0xBEFF, 0xBF00, 0xBF02, 0xBF03, 0xBF04, 0xBF05, /* 0x80 */
+ 0xBF06, 0xBF07, 0xBF0A, 0xBF0B, 0xBF0C, 0xBF0D, 0xBF0E, 0xBF0F, /* 0x90 */
+ 0xBF10, 0xBF11, 0xBF12, 0xBF13, 0xBF14, 0xBF15, 0xBF16, 0xBF17, /* 0x90 */
+ 0xBF1A, 0xBF1E, 0xBF1F, 0xBF20, 0xBF21, 0xBF22, 0xBF23, 0xBF24, /* 0xA0 */
+ 0xBF25, 0xBF26, 0xBF27, 0xBF28, 0xBF29, 0xBF2A, 0xBF2B, 0xBF2C, /* 0xA0 */
+ 0xBF2D, 0xBF2E, 0xBF2F, 0xBF30, 0xBF31, 0xBF32, 0xBF33, 0xBF34, /* 0xB0 */
+ 0xBF35, 0xBF36, 0xBF37, 0xBF38, 0xBF39, 0xBF3A, 0xBF3B, 0xBF3C, /* 0xB0 */
+ 0xBF3D, 0xBF3E, 0xBF3F, 0xBF42, 0xBF43, 0xBF45, 0xBF46, 0xBF47, /* 0xC0 */
+ 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF52, /* 0xC0 */
+ 0xBF53, 0xBF54, 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, /* 0xD0 */
+ 0xBF5C, 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, 0xBF63, /* 0xD0 */
+ 0xBF64, 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, /* 0xE0 */
+ 0xBF6C, 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, 0xBF72, 0xBF73, /* 0xE0 */
+ 0xBF74, 0xBF75, 0xBF76, 0xBF77, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, /* 0xF0 */
+ 0xBF7C, 0xBF7D, 0xBF7E, 0xBF7F, 0xBF80, 0xBF81, 0xBF82 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xBF87, 0xBF88, 0xBF89, /* 0x40 */
+ 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, /* 0x40 */
+ 0xBF92, 0xBF93, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, /* 0x50 */
+ 0xBF9B, 0xBF9C, 0xBF9D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBF9E, 0xBF9F, 0xBFA0, 0xBFA1, 0xBFA2, 0xBFA3, 0xBFA4, /* 0x60 */
+ 0xBFA5, 0xBFA6, 0xBFA7, 0xBFA8, 0xBFA9, 0xBFAA, 0xBFAB, 0xBFAC, /* 0x60 */
+ 0xBFAD, 0xBFAE, 0xBFAF, 0xBFB1, 0xBFB2, 0xBFB3, 0xBFB4, 0xBFB5, /* 0x70 */
+ 0xBFB6, 0xBFB7, 0xBFB8, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBFB9, 0xBFBA, 0xBFBB, 0xBFBC, 0xBFBD, 0xBFBE, 0xBFBF, /* 0x80 */
+ 0xBFC0, 0xBFC1, 0xBFC2, 0xBFC3, 0xBFC4, 0xBFC6, 0xBFC7, 0xBFC8, /* 0x80 */
+ 0xBFC9, 0xBFCA, 0xBFCB, 0xBFCE, 0xBFCF, 0xBFD1, 0xBFD2, 0xBFD3, /* 0x90 */
+ 0xBFD5, 0xBFD6, 0xBFD7, 0xBFD8, 0xBFD9, 0xBFDA, 0xBFDB, 0xBFDD, /* 0x90 */
+ 0xBFDE, 0xBFE0, 0xBFE2, 0xBFE3, 0xBFE4, 0xBFE5, 0xBFE6, 0xBFE7, /* 0xA0 */
+ 0xBFE8, 0xBFE9, 0xBFEA, 0xBFEB, 0xBFEC, 0xBFED, 0xBFEE, 0xBFEF, /* 0xA0 */
+ 0xBFF0, 0xBFF1, 0xBFF2, 0xBFF3, 0xBFF4, 0xBFF5, 0xBFF6, 0xBFF7, /* 0xB0 */
+ 0xBFF8, 0xBFF9, 0xBFFA, 0xBFFB, 0xBFFC, 0xBFFD, 0xBFFE, 0xBFFF, /* 0xB0 */
+ 0xC000, 0xC001, 0xC002, 0xC003, 0xC004, 0xC005, 0xC006, 0xC007, /* 0xC0 */
+ 0xC008, 0xC009, 0xC00A, 0xC00B, 0xC00C, 0xC00D, 0xC00E, 0xC00F, /* 0xC0 */
+ 0xC010, 0xC011, 0xC012, 0xC013, 0xC014, 0xC015, 0xC016, 0xC017, /* 0xD0 */
+ 0xC018, 0xC019, 0xC01A, 0xC01B, 0xC01C, 0xC01D, 0xC01E, 0xC01F, /* 0xD0 */
+ 0xC020, 0xC021, 0xC022, 0xC023, 0xC024, 0xC025, 0xC026, 0xC027, /* 0xE0 */
+ 0xC028, 0xC029, 0xC02A, 0xC02B, 0xC02C, 0xC02D, 0xC02E, 0xC02F, /* 0xE0 */
+ 0xC030, 0xC031, 0xC032, 0xC033, 0xC034, 0xC035, 0xC036, 0xC037, /* 0xF0 */
+ 0xC038, 0xC039, 0xC03A, 0xC03B, 0xC03D, 0xC03E, 0xC03F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC040, 0xC041, 0xC042, 0xC043, 0xC044, 0xC045, 0xC046, /* 0x40 */
+ 0xC047, 0xC048, 0xC049, 0xC04A, 0xC04B, 0xC04C, 0xC04D, 0xC04E, /* 0x40 */
+ 0xC04F, 0xC050, 0xC052, 0xC053, 0xC054, 0xC055, 0xC056, 0xC057, /* 0x50 */
+ 0xC059, 0xC05A, 0xC05B, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC05D, 0xC05E, 0xC05F, 0xC061, 0xC062, 0xC063, 0xC064, /* 0x60 */
+ 0xC065, 0xC066, 0xC067, 0xC06A, 0xC06B, 0xC06C, 0xC06D, 0xC06E, /* 0x60 */
+ 0xC06F, 0xC070, 0xC071, 0xC072, 0xC073, 0xC074, 0xC075, 0xC076, /* 0x70 */
+ 0xC077, 0xC078, 0xC079, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC07A, 0xC07B, 0xC07C, 0xC07D, 0xC07E, 0xC07F, 0xC080, /* 0x80 */
+ 0xC081, 0xC082, 0xC083, 0xC084, 0xC085, 0xC086, 0xC087, 0xC088, /* 0x80 */
+ 0xC089, 0xC08A, 0xC08B, 0xC08C, 0xC08D, 0xC08E, 0xC08F, 0xC092, /* 0x90 */
+ 0xC093, 0xC095, 0xC096, 0xC097, 0xC099, 0xC09A, 0xC09B, 0xC09C, /* 0x90 */
+ 0xC09D, 0xC09E, 0xC09F, 0xC0A2, 0xC0A4, 0xC0A6, 0xC0A7, 0xC0A8, /* 0xA0 */
+ 0xC0A9, 0xC0AA, 0xC0AB, 0xC0AE, 0xC0B1, 0xC0B2, 0xC0B7, 0xC0B8, /* 0xA0 */
+ 0xC0B9, 0xC0BA, 0xC0BB, 0xC0BE, 0xC0C2, 0xC0C3, 0xC0C4, 0xC0C6, /* 0xB0 */
+ 0xC0C7, 0xC0CA, 0xC0CB, 0xC0CD, 0xC0CE, 0xC0CF, 0xC0D1, 0xC0D2, /* 0xB0 */
+ 0xC0D3, 0xC0D4, 0xC0D5, 0xC0D6, 0xC0D7, 0xC0DA, 0xC0DE, 0xC0DF, /* 0xC0 */
+ 0xC0E0, 0xC0E1, 0xC0E2, 0xC0E3, 0xC0E6, 0xC0E7, 0xC0E9, 0xC0EA, /* 0xC0 */
+ 0xC0EB, 0xC0ED, 0xC0EE, 0xC0EF, 0xC0F0, 0xC0F1, 0xC0F2, 0xC0F3, /* 0xD0 */
+ 0xC0F6, 0xC0F8, 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD, 0xC0FE, 0xC0FF, /* 0xD0 */
+ 0xC101, 0xC102, 0xC103, 0xC105, 0xC106, 0xC107, 0xC109, 0xC10A, /* 0xE0 */
+ 0xC10B, 0xC10C, 0xC10D, 0xC10E, 0xC10F, 0xC111, 0xC112, 0xC113, /* 0xE0 */
+ 0xC114, 0xC116, 0xC117, 0xC118, 0xC119, 0xC11A, 0xC11B, 0xC121, /* 0xF0 */
+ 0xC122, 0xC125, 0xC128, 0xC129, 0xC12A, 0xC12B, 0xC12E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC132, 0xC133, 0xC134, 0xC135, 0xC137, 0xC13A, 0xC13B, /* 0x40 */
+ 0xC13D, 0xC13E, 0xC13F, 0xC141, 0xC142, 0xC143, 0xC144, 0xC145, /* 0x40 */
+ 0xC146, 0xC147, 0xC14A, 0xC14E, 0xC14F, 0xC150, 0xC151, 0xC152, /* 0x50 */
+ 0xC153, 0xC156, 0xC157, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC159, 0xC15A, 0xC15B, 0xC15D, 0xC15E, 0xC15F, 0xC160, /* 0x60 */
+ 0xC161, 0xC162, 0xC163, 0xC166, 0xC16A, 0xC16B, 0xC16C, 0xC16D, /* 0x60 */
+ 0xC16E, 0xC16F, 0xC171, 0xC172, 0xC173, 0xC175, 0xC176, 0xC177, /* 0x70 */
+ 0xC179, 0xC17A, 0xC17B, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC17C, 0xC17D, 0xC17E, 0xC17F, 0xC180, 0xC181, 0xC182, /* 0x80 */
+ 0xC183, 0xC184, 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A, 0xC18B, /* 0x80 */
+ 0xC18F, 0xC191, 0xC192, 0xC193, 0xC195, 0xC197, 0xC198, 0xC199, /* 0x90 */
+ 0xC19A, 0xC19B, 0xC19E, 0xC1A0, 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A6, /* 0x90 */
+ 0xC1A7, 0xC1AA, 0xC1AB, 0xC1AD, 0xC1AE, 0xC1AF, 0xC1B1, 0xC1B2, /* 0xA0 */
+ 0xC1B3, 0xC1B4, 0xC1B5, 0xC1B6, 0xC1B7, 0xC1B8, 0xC1B9, 0xC1BA, /* 0xA0 */
+ 0xC1BB, 0xC1BC, 0xC1BE, 0xC1BF, 0xC1C0, 0xC1C1, 0xC1C2, 0xC1C3, /* 0xB0 */
+ 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C9, 0xC1CA, 0xC1CB, 0xC1CD, 0xC1CE, /* 0xB0 */
+ 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D2, 0xC1D3, 0xC1D5, 0xC1D6, 0xC1D9, /* 0xC0 */
+ 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, 0xC1DE, 0xC1DF, 0xC1E1, 0xC1E2, /* 0xC0 */
+ 0xC1E3, 0xC1E5, 0xC1E6, 0xC1E7, 0xC1E9, 0xC1EA, 0xC1EB, 0xC1EC, /* 0xD0 */
+ 0xC1ED, 0xC1EE, 0xC1EF, 0xC1F2, 0xC1F4, 0xC1F5, 0xC1F6, 0xC1F7, /* 0xD0 */
+ 0xC1F8, 0xC1F9, 0xC1FA, 0xC1FB, 0xC1FE, 0xC1FF, 0xC201, 0xC202, /* 0xE0 */
+ 0xC203, 0xC205, 0xC206, 0xC207, 0xC208, 0xC209, 0xC20A, 0xC20B, /* 0xE0 */
+ 0xC20E, 0xC210, 0xC212, 0xC213, 0xC214, 0xC215, 0xC216, 0xC217, /* 0xF0 */
+ 0xC21A, 0xC21B, 0xC21D, 0xC21E, 0xC221, 0xC222, 0xC223 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC224, 0xC225, 0xC226, 0xC227, 0xC22A, 0xC22C, 0xC22E, /* 0x40 */
+ 0xC230, 0xC233, 0xC235, 0xC236, 0xC237, 0xC238, 0xC239, 0xC23A, /* 0x40 */
+ 0xC23B, 0xC23C, 0xC23D, 0xC23E, 0xC23F, 0xC240, 0xC241, 0xC242, /* 0x50 */
+ 0xC243, 0xC244, 0xC245, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC246, 0xC247, 0xC249, 0xC24A, 0xC24B, 0xC24C, 0xC24D, /* 0x60 */
+ 0xC24E, 0xC24F, 0xC252, 0xC253, 0xC255, 0xC256, 0xC257, 0xC259, /* 0x60 */
+ 0xC25A, 0xC25B, 0xC25C, 0xC25D, 0xC25E, 0xC25F, 0xC261, 0xC262, /* 0x70 */
+ 0xC263, 0xC264, 0xC266, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC267, 0xC268, 0xC269, 0xC26A, 0xC26B, 0xC26E, 0xC26F, /* 0x80 */
+ 0xC271, 0xC272, 0xC273, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, /* 0x80 */
+ 0xC27A, 0xC27B, 0xC27E, 0xC280, 0xC282, 0xC283, 0xC284, 0xC285, /* 0x90 */
+ 0xC286, 0xC287, 0xC28A, 0xC28B, 0xC28C, 0xC28D, 0xC28E, 0xC28F, /* 0x90 */
+ 0xC291, 0xC292, 0xC293, 0xC294, 0xC295, 0xC296, 0xC297, 0xC299, /* 0xA0 */
+ 0xC29A, 0xC29C, 0xC29E, 0xC29F, 0xC2A0, 0xC2A1, 0xC2A2, 0xC2A3, /* 0xA0 */
+ 0xC2A6, 0xC2A7, 0xC2A9, 0xC2AA, 0xC2AB, 0xC2AE, 0xC2AF, 0xC2B0, /* 0xB0 */
+ 0xC2B1, 0xC2B2, 0xC2B3, 0xC2B6, 0xC2B8, 0xC2BA, 0xC2BB, 0xC2BC, /* 0xB0 */
+ 0xC2BD, 0xC2BE, 0xC2BF, 0xC2C0, 0xC2C1, 0xC2C2, 0xC2C3, 0xC2C4, /* 0xC0 */
+ 0xC2C5, 0xC2C6, 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA, 0xC2CB, 0xC2CC, /* 0xC0 */
+ 0xC2CD, 0xC2CE, 0xC2CF, 0xC2D0, 0xC2D1, 0xC2D2, 0xC2D3, 0xC2D4, /* 0xD0 */
+ 0xC2D5, 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA, 0xC2DB, 0xC2DE, /* 0xD0 */
+ 0xC2DF, 0xC2E1, 0xC2E2, 0xC2E5, 0xC2E6, 0xC2E7, 0xC2E8, 0xC2E9, /* 0xE0 */
+ 0xC2EA, 0xC2EE, 0xC2F0, 0xC2F2, 0xC2F3, 0xC2F4, 0xC2F5, 0xC2F7, /* 0xE0 */
+ 0xC2FA, 0xC2FD, 0xC2FE, 0xC2FF, 0xC301, 0xC302, 0xC303, 0xC304, /* 0xF0 */
+ 0xC305, 0xC306, 0xC307, 0xC30A, 0xC30B, 0xC30E, 0xC30F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC310, 0xC311, 0xC312, 0xC316, 0xC317, 0xC319, 0xC31A, /* 0x40 */
+ 0xC31B, 0xC31D, 0xC31E, 0xC31F, 0xC320, 0xC321, 0xC322, 0xC323, /* 0x40 */
+ 0xC326, 0xC327, 0xC32A, 0xC32B, 0xC32C, 0xC32D, 0xC32E, 0xC32F, /* 0x50 */
+ 0xC330, 0xC331, 0xC332, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC333, 0xC334, 0xC335, 0xC336, 0xC337, 0xC338, 0xC339, /* 0x60 */
+ 0xC33A, 0xC33B, 0xC33C, 0xC33D, 0xC33E, 0xC33F, 0xC340, 0xC341, /* 0x60 */
+ 0xC342, 0xC343, 0xC344, 0xC346, 0xC347, 0xC348, 0xC349, 0xC34A, /* 0x70 */
+ 0xC34B, 0xC34C, 0xC34D, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC34E, 0xC34F, 0xC350, 0xC351, 0xC352, 0xC353, 0xC354, /* 0x80 */
+ 0xC355, 0xC356, 0xC357, 0xC358, 0xC359, 0xC35A, 0xC35B, 0xC35C, /* 0x80 */
+ 0xC35D, 0xC35E, 0xC35F, 0xC360, 0xC361, 0xC362, 0xC363, 0xC364, /* 0x90 */
+ 0xC365, 0xC366, 0xC367, 0xC36A, 0xC36B, 0xC36D, 0xC36E, 0xC36F, /* 0x90 */
+ 0xC371, 0xC373, 0xC374, 0xC375, 0xC376, 0xC377, 0xC37A, 0xC37B, /* 0xA0 */
+ 0xC37E, 0xC37F, 0xC380, 0xC381, 0xC382, 0xC383, 0xC385, 0xC386, /* 0xA0 */
+ 0xC387, 0xC389, 0xC38A, 0xC38B, 0xC38D, 0xC38E, 0xC38F, 0xC390, /* 0xB0 */
+ 0xC391, 0xC392, 0xC393, 0xC394, 0xC395, 0xC396, 0xC397, 0xC398, /* 0xB0 */
+ 0xC399, 0xC39A, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, 0xC3A0, /* 0xC0 */
+ 0xC3A1, 0xC3A2, 0xC3A3, 0xC3A4, 0xC3A5, 0xC3A6, 0xC3A7, 0xC3A8, /* 0xC0 */
+ 0xC3A9, 0xC3AA, 0xC3AB, 0xC3AC, 0xC3AD, 0xC3AE, 0xC3AF, 0xC3B0, /* 0xD0 */
+ 0xC3B1, 0xC3B2, 0xC3B3, 0xC3B4, 0xC3B5, 0xC3B6, 0xC3B7, 0xC3B8, /* 0xD0 */
+ 0xC3B9, 0xC3BA, 0xC3BB, 0xC3BC, 0xC3BD, 0xC3BE, 0xC3BF, 0xC3C1, /* 0xE0 */
+ 0xC3C2, 0xC3C3, 0xC3C4, 0xC3C5, 0xC3C6, 0xC3C7, 0xC3C8, 0xC3C9, /* 0xE0 */
+ 0xC3CA, 0xC3CB, 0xC3CC, 0xC3CD, 0xC3CE, 0xC3CF, 0xC3D0, 0xC3D1, /* 0xF0 */
+ 0xC3D2, 0xC3D3, 0xC3D4, 0xC3D5, 0xC3D6, 0xC3D7, 0xC3DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC3DB, 0xC3DD, 0xC3DE, 0xC3E1, 0xC3E3, 0xC3E4, 0xC3E5, /* 0x40 */
+ 0xC3E6, 0xC3E7, 0xC3EA, 0xC3EB, 0xC3EC, 0xC3EE, 0xC3EF, 0xC3F0, /* 0x40 */
+ 0xC3F1, 0xC3F2, 0xC3F3, 0xC3F6, 0xC3F7, 0xC3F9, 0xC3FA, 0xC3FB, /* 0x50 */
+ 0xC3FC, 0xC3FD, 0xC3FE, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC3FF, 0xC400, 0xC401, 0xC402, 0xC403, 0xC404, 0xC405, /* 0x60 */
+ 0xC406, 0xC407, 0xC409, 0xC40A, 0xC40B, 0xC40C, 0xC40D, 0xC40E, /* 0x60 */
+ 0xC40F, 0xC411, 0xC412, 0xC413, 0xC414, 0xC415, 0xC416, 0xC417, /* 0x70 */
+ 0xC418, 0xC419, 0xC41A, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC41B, 0xC41C, 0xC41D, 0xC41E, 0xC41F, 0xC420, 0xC421, /* 0x80 */
+ 0xC422, 0xC423, 0xC425, 0xC426, 0xC427, 0xC428, 0xC429, 0xC42A, /* 0x80 */
+ 0xC42B, 0xC42D, 0xC42E, 0xC42F, 0xC431, 0xC432, 0xC433, 0xC435, /* 0x90 */
+ 0xC436, 0xC437, 0xC438, 0xC439, 0xC43A, 0xC43B, 0xC43E, 0xC43F, /* 0x90 */
+ 0xC440, 0xC441, 0xC442, 0xC443, 0xC444, 0xC445, 0xC446, 0xC447, /* 0xA0 */
+ 0xC449, 0xC44A, 0xC44B, 0xC44C, 0xC44D, 0xC44E, 0xC44F, 0xC450, /* 0xA0 */
+ 0xC451, 0xC452, 0xC453, 0xC454, 0xC455, 0xC456, 0xC457, 0xC458, /* 0xB0 */
+ 0xC459, 0xC45A, 0xC45B, 0xC45C, 0xC45D, 0xC45E, 0xC45F, 0xC460, /* 0xB0 */
+ 0xC461, 0xC462, 0xC463, 0xC466, 0xC467, 0xC469, 0xC46A, 0xC46B, /* 0xC0 */
+ 0xC46D, 0xC46E, 0xC46F, 0xC470, 0xC471, 0xC472, 0xC473, 0xC476, /* 0xC0 */
+ 0xC477, 0xC478, 0xC47A, 0xC47B, 0xC47C, 0xC47D, 0xC47E, 0xC47F, /* 0xD0 */
+ 0xC481, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, 0xC487, 0xC488, /* 0xD0 */
+ 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E, 0xC48F, 0xC490, /* 0xE0 */
+ 0xC491, 0xC492, 0xC493, 0xC495, 0xC496, 0xC497, 0xC498, 0xC499, /* 0xE0 */
+ 0xC49A, 0xC49B, 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC4A1, 0xC4A2, /* 0xF0 */
+ 0xC4A3, 0xC4A4, 0xC4A5, 0xC4A6, 0xC4A7, 0xC4A8, 0xC4A9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC4AA, 0xC4AB, 0xC4AC, 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, /* 0x40 */
+ 0xC4B1, 0xC4B2, 0xC4B3, 0xC4B4, 0xC4B5, 0xC4B6, 0xC4B7, 0xC4B9, /* 0x40 */
+ 0xC4BA, 0xC4BB, 0xC4BD, 0xC4BE, 0xC4BF, 0xC4C0, 0xC4C1, 0xC4C2, /* 0x50 */
+ 0xC4C3, 0xC4C4, 0xC4C5, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC4C6, 0xC4C7, 0xC4C8, 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, /* 0x60 */
+ 0xC4CD, 0xC4CE, 0xC4CF, 0xC4D0, 0xC4D1, 0xC4D2, 0xC4D3, 0xC4D4, /* 0x60 */
+ 0xC4D5, 0xC4D6, 0xC4D7, 0xC4D8, 0xC4D9, 0xC4DA, 0xC4DB, 0xC4DC, /* 0x70 */
+ 0xC4DD, 0xC4DE, 0xC4DF, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC4E0, 0xC4E1, 0xC4E2, 0xC4E3, 0xC4E4, 0xC4E5, 0xC4E6, /* 0x80 */
+ 0xC4E7, 0xC4E8, 0xC4EA, 0xC4EB, 0xC4EC, 0xC4ED, 0xC4EE, 0xC4EF, /* 0x80 */
+ 0xC4F2, 0xC4F3, 0xC4F5, 0xC4F6, 0xC4F7, 0xC4F9, 0xC4FB, 0xC4FC, /* 0x90 */
+ 0xC4FD, 0xC4FE, 0xC502, 0xC503, 0xC504, 0xC505, 0xC506, 0xC507, /* 0x90 */
+ 0xC508, 0xC509, 0xC50A, 0xC50B, 0xC50D, 0xC50E, 0xC50F, 0xC511, /* 0xA0 */
+ 0xC512, 0xC513, 0xC515, 0xC516, 0xC517, 0xC518, 0xC519, 0xC51A, /* 0xA0 */
+ 0xC51B, 0xC51D, 0xC51E, 0xC51F, 0xC520, 0xC521, 0xC522, 0xC523, /* 0xB0 */
+ 0xC524, 0xC525, 0xC526, 0xC527, 0xC52A, 0xC52B, 0xC52D, 0xC52E, /* 0xB0 */
+ 0xC52F, 0xC531, 0xC532, 0xC533, 0xC534, 0xC535, 0xC536, 0xC537, /* 0xC0 */
+ 0xC53A, 0xC53C, 0xC53E, 0xC53F, 0xC540, 0xC541, 0xC542, 0xC543, /* 0xC0 */
+ 0xC546, 0xC547, 0xC54B, 0xC54F, 0xC550, 0xC551, 0xC552, 0xC556, /* 0xD0 */
+ 0xC55A, 0xC55B, 0xC55C, 0xC55F, 0xC562, 0xC563, 0xC565, 0xC566, /* 0xD0 */
+ 0xC567, 0xC569, 0xC56A, 0xC56B, 0xC56C, 0xC56D, 0xC56E, 0xC56F, /* 0xE0 */
+ 0xC572, 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC57B, 0xC57E, /* 0xE0 */
+ 0xC57F, 0xC581, 0xC582, 0xC583, 0xC585, 0xC586, 0xC588, 0xC589, /* 0xF0 */
+ 0xC58A, 0xC58B, 0xC58E, 0xC590, 0xC592, 0xC593, 0xC594 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC596, 0xC599, 0xC59A, 0xC59B, 0xC59D, 0xC59E, 0xC59F, /* 0x40 */
+ 0xC5A1, 0xC5A2, 0xC5A3, 0xC5A4, 0xC5A5, 0xC5A6, 0xC5A7, 0xC5A8, /* 0x40 */
+ 0xC5AA, 0xC5AB, 0xC5AC, 0xC5AD, 0xC5AE, 0xC5AF, 0xC5B0, 0xC5B1, /* 0x50 */
+ 0xC5B2, 0xC5B3, 0xC5B6, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC5B7, 0xC5BA, 0xC5BF, 0xC5C0, 0xC5C1, 0xC5C2, 0xC5C3, /* 0x60 */
+ 0xC5CB, 0xC5CD, 0xC5CF, 0xC5D2, 0xC5D3, 0xC5D5, 0xC5D6, 0xC5D7, /* 0x60 */
+ 0xC5D9, 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5DE, 0xC5DF, 0xC5E2, /* 0x70 */
+ 0xC5E4, 0xC5E6, 0xC5E7, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0xC5EF, 0xC5F1, 0xC5F2, /* 0x80 */
+ 0xC5F3, 0xC5F5, 0xC5F8, 0xC5F9, 0xC5FA, 0xC5FB, 0xC602, 0xC603, /* 0x80 */
+ 0xC604, 0xC609, 0xC60A, 0xC60B, 0xC60D, 0xC60E, 0xC60F, 0xC611, /* 0x90 */
+ 0xC612, 0xC613, 0xC614, 0xC615, 0xC616, 0xC617, 0xC61A, 0xC61D, /* 0x90 */
+ 0xC61E, 0xC61F, 0xC620, 0xC621, 0xC622, 0xC623, 0xC626, 0xC627, /* 0xA0 */
+ 0xC629, 0xC62A, 0xC62B, 0xC62F, 0xC631, 0xC632, 0xC636, 0xC638, /* 0xA0 */
+ 0xC63A, 0xC63C, 0xC63D, 0xC63E, 0xC63F, 0xC642, 0xC643, 0xC645, /* 0xB0 */
+ 0xC646, 0xC647, 0xC649, 0xC64A, 0xC64B, 0xC64C, 0xC64D, 0xC64E, /* 0xB0 */
+ 0xC64F, 0xC652, 0xC656, 0xC657, 0xC658, 0xC659, 0xC65A, 0xC65B, /* 0xC0 */
+ 0xC65E, 0xC65F, 0xC661, 0xC662, 0xC663, 0xC664, 0xC665, 0xC666, /* 0xC0 */
+ 0xC667, 0xC668, 0xC669, 0xC66A, 0xC66B, 0xC66D, 0xC66E, 0xC670, /* 0xD0 */
+ 0xC672, 0xC673, 0xC674, 0xC675, 0xC676, 0xC677, 0xC67A, 0xC67B, /* 0xD0 */
+ 0xC67D, 0xC67E, 0xC67F, 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, /* 0xE0 */
+ 0xC686, 0xC687, 0xC68A, 0xC68C, 0xC68E, 0xC68F, 0xC690, 0xC691, /* 0xE0 */
+ 0xC692, 0xC693, 0xC696, 0xC697, 0xC699, 0xC69A, 0xC69B, 0xC69D, /* 0xF0 */
+ 0xC69E, 0xC69F, 0xC6A0, 0xC6A1, 0xC6A2, 0xC6A3, 0xC6A6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6A8, 0xC6AA, 0xC6AB, 0xC6AC, 0xC6AD, 0xC6AE, 0xC6AF, /* 0x40 */
+ 0xC6B2, 0xC6B3, 0xC6B5, 0xC6B6, 0xC6B7, 0xC6BB, 0xC6BC, 0xC6BD, /* 0x40 */
+ 0xC6BE, 0xC6BF, 0xC6C2, 0xC6C4, 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9, /* 0x50 */
+ 0xC6CA, 0xC6CB, 0xC6CE, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC6CF, 0xC6D1, 0xC6D2, 0xC6D3, 0xC6D5, 0xC6D6, 0xC6D7, /* 0x60 */
+ 0xC6D8, 0xC6D9, 0xC6DA, 0xC6DB, 0xC6DE, 0xC6DF, 0xC6E2, 0xC6E3, /* 0x60 */
+ 0xC6E4, 0xC6E5, 0xC6E6, 0xC6E7, 0xC6EA, 0xC6EB, 0xC6ED, 0xC6EE, /* 0x70 */
+ 0xC6EF, 0xC6F1, 0xC6F2, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC6F3, 0xC6F4, 0xC6F5, 0xC6F6, 0xC6F7, 0xC6FA, 0xC6FB, /* 0x80 */
+ 0xC6FC, 0xC6FE, 0xC6FF, 0xC700, 0xC701, 0xC702, 0xC703, 0xC706, /* 0x80 */
+ 0xC707, 0xC709, 0xC70A, 0xC70B, 0xC70D, 0xC70E, 0xC70F, 0xC710, /* 0x90 */
+ 0xC711, 0xC712, 0xC713, 0xC716, 0xC718, 0xC71A, 0xC71B, 0xC71C, /* 0x90 */
+ 0xC71D, 0xC71E, 0xC71F, 0xC722, 0xC723, 0xC725, 0xC726, 0xC727, /* 0xA0 */
+ 0xC729, 0xC72A, 0xC72B, 0xC72C, 0xC72D, 0xC72E, 0xC72F, 0xC732, /* 0xA0 */
+ 0xC734, 0xC736, 0xC738, 0xC739, 0xC73A, 0xC73B, 0xC73E, 0xC73F, /* 0xB0 */
+ 0xC741, 0xC742, 0xC743, 0xC745, 0xC746, 0xC747, 0xC748, 0xC749, /* 0xB0 */
+ 0xC74B, 0xC74E, 0xC750, 0xC759, 0xC75A, 0xC75B, 0xC75D, 0xC75E, /* 0xC0 */
+ 0xC75F, 0xC761, 0xC762, 0xC763, 0xC764, 0xC765, 0xC766, 0xC767, /* 0xC0 */
+ 0xC769, 0xC76A, 0xC76C, 0xC76D, 0xC76E, 0xC76F, 0xC770, 0xC771, /* 0xD0 */
+ 0xC772, 0xC773, 0xC776, 0xC777, 0xC779, 0xC77A, 0xC77B, 0xC77F, /* 0xD0 */
+ 0xC780, 0xC781, 0xC782, 0xC786, 0xC78B, 0xC78C, 0xC78D, 0xC78F, /* 0xE0 */
+ 0xC792, 0xC793, 0xC795, 0xC799, 0xC79B, 0xC79C, 0xC79D, 0xC79E, /* 0xE0 */
+ 0xC79F, 0xC7A2, 0xC7A7, 0xC7A8, 0xC7A9, 0xC7AA, 0xC7AB, 0xC7AE, /* 0xF0 */
+ 0xC7AF, 0xC7B1, 0xC7B2, 0xC7B3, 0xC7B5, 0xC7B6, 0xC7B7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7B8, 0xC7B9, 0xC7BA, 0xC7BB, 0xC7BE, 0xC7C2, 0xC7C3, /* 0x40 */
+ 0xC7C4, 0xC7C5, 0xC7C6, 0xC7C7, 0xC7CA, 0xC7CB, 0xC7CD, 0xC7CF, /* 0x40 */
+ 0xC7D1, 0xC7D2, 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6, 0xC7D7, 0xC7D9, /* 0x50 */
+ 0xC7DA, 0xC7DB, 0xC7DC, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC7DE, 0xC7DF, 0xC7E0, 0xC7E1, 0xC7E2, 0xC7E3, 0xC7E5, /* 0x60 */
+ 0xC7E6, 0xC7E7, 0xC7E9, 0xC7EA, 0xC7EB, 0xC7ED, 0xC7EE, 0xC7EF, /* 0x60 */
+ 0xC7F0, 0xC7F1, 0xC7F2, 0xC7F3, 0xC7F4, 0xC7F5, 0xC7F6, 0xC7F7, /* 0x70 */
+ 0xC7F8, 0xC7F9, 0xC7FA, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC7FB, 0xC7FC, 0xC7FD, 0xC7FE, 0xC7FF, 0xC802, 0xC803, /* 0x80 */
+ 0xC805, 0xC806, 0xC807, 0xC809, 0xC80B, 0xC80C, 0xC80D, 0xC80E, /* 0x80 */
+ 0xC80F, 0xC812, 0xC814, 0xC817, 0xC818, 0xC819, 0xC81A, 0xC81B, /* 0x90 */
+ 0xC81E, 0xC81F, 0xC821, 0xC822, 0xC823, 0xC825, 0xC826, 0xC827, /* 0x90 */
+ 0xC828, 0xC829, 0xC82A, 0xC82B, 0xC82E, 0xC830, 0xC832, 0xC833, /* 0xA0 */
+ 0xC834, 0xC835, 0xC836, 0xC837, 0xC839, 0xC83A, 0xC83B, 0xC83D, /* 0xA0 */
+ 0xC83E, 0xC83F, 0xC841, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846, /* 0xB0 */
+ 0xC847, 0xC84A, 0xC84B, 0xC84E, 0xC84F, 0xC850, 0xC851, 0xC852, /* 0xB0 */
+ 0xC853, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, 0xC85A, 0xC85B, /* 0xC0 */
+ 0xC85C, 0xC85D, 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, 0xC863, /* 0xC0 */
+ 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, 0xC86A, 0xC86B, /* 0xD0 */
+ 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0xC872, 0xC873, 0xC875, 0xC876, /* 0xD0 */
+ 0xC877, 0xC879, 0xC87B, 0xC87C, 0xC87D, 0xC87E, 0xC87F, 0xC882, /* 0xE0 */
+ 0xC884, 0xC888, 0xC889, 0xC88A, 0xC88E, 0xC88F, 0xC890, 0xC891, /* 0xE0 */
+ 0xC892, 0xC893, 0xC895, 0xC896, 0xC897, 0xC898, 0xC899, 0xC89A, /* 0xF0 */
+ 0xC89B, 0xC89C, 0xC89E, 0xC8A0, 0xC8A2, 0xC8A3, 0xC8A4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC8A5, 0xC8A6, 0xC8A7, 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, /* 0x40 */
+ 0xC8AD, 0xC8AE, 0xC8AF, 0xC8B0, 0xC8B1, 0xC8B2, 0xC8B3, 0xC8B4, /* 0x40 */
+ 0xC8B5, 0xC8B6, 0xC8B7, 0xC8B8, 0xC8B9, 0xC8BA, 0xC8BB, 0xC8BE, /* 0x50 */
+ 0xC8BF, 0xC8C0, 0xC8C1, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC8C2, 0xC8C3, 0xC8C5, 0xC8C6, 0xC8C7, 0xC8C9, 0xC8CA, /* 0x60 */
+ 0xC8CB, 0xC8CD, 0xC8CE, 0xC8CF, 0xC8D0, 0xC8D1, 0xC8D2, 0xC8D3, /* 0x60 */
+ 0xC8D6, 0xC8D8, 0xC8DA, 0xC8DB, 0xC8DC, 0xC8DD, 0xC8DE, 0xC8DF, /* 0x70 */
+ 0xC8E2, 0xC8E3, 0xC8E5, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC8E6, 0xC8E7, 0xC8E8, 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC, /* 0x80 */
+ 0xC8ED, 0xC8EE, 0xC8EF, 0xC8F0, 0xC8F1, 0xC8F2, 0xC8F3, 0xC8F4, /* 0x80 */
+ 0xC8F6, 0xC8F7, 0xC8F8, 0xC8F9, 0xC8FA, 0xC8FB, 0xC8FE, 0xC8FF, /* 0x90 */
+ 0xC901, 0xC902, 0xC903, 0xC907, 0xC908, 0xC909, 0xC90A, 0xC90B, /* 0x90 */
+ 0xC90E, 0x3000, 0x3001, 0x3002, 0x00B7, 0x2025, 0x2026, 0x00A8, /* 0xA0 */
+ 0x3003, 0x00AD, 0x2015, 0x2225, 0xFF3C, 0x223C, 0x2018, 0x2019, /* 0xA0 */
+ 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, /* 0xB0 */
+ 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0x00B1, 0x00D7, /* 0xB0 */
+ 0x00F7, 0x2260, 0x2264, 0x2265, 0x221E, 0x2234, 0x00B0, 0x2032, /* 0xC0 */
+ 0x2033, 0x2103, 0x212B, 0xFFE0, 0xFFE1, 0xFFE5, 0x2642, 0x2640, /* 0xC0 */
+ 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00A7, /* 0xD0 */
+ 0x203B, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, /* 0xD0 */
+ 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x2192, 0x2190, /* 0xE0 */
+ 0x2191, 0x2193, 0x2194, 0x3013, 0x226A, 0x226B, 0x221A, 0x223D, /* 0xE0 */
+ 0x221D, 0x2235, 0x222B, 0x222C, 0x2208, 0x220B, 0x2286, 0x2287, /* 0xF0 */
+ 0x2282, 0x2283, 0x222A, 0x2229, 0x2227, 0x2228, 0xFFE2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC910, 0xC912, 0xC913, 0xC914, 0xC915, 0xC916, 0xC917, /* 0x40 */
+ 0xC919, 0xC91A, 0xC91B, 0xC91C, 0xC91D, 0xC91E, 0xC91F, 0xC920, /* 0x40 */
+ 0xC921, 0xC922, 0xC923, 0xC924, 0xC925, 0xC926, 0xC927, 0xC928, /* 0x50 */
+ 0xC929, 0xC92A, 0xC92B, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC92D, 0xC92E, 0xC92F, 0xC930, 0xC931, 0xC932, 0xC933, /* 0x60 */
+ 0xC935, 0xC936, 0xC937, 0xC938, 0xC939, 0xC93A, 0xC93B, 0xC93C, /* 0x60 */
+ 0xC93D, 0xC93E, 0xC93F, 0xC940, 0xC941, 0xC942, 0xC943, 0xC944, /* 0x70 */
+ 0xC945, 0xC946, 0xC947, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC948, 0xC949, 0xC94A, 0xC94B, 0xC94C, 0xC94D, 0xC94E, /* 0x80 */
+ 0xC94F, 0xC952, 0xC953, 0xC955, 0xC956, 0xC957, 0xC959, 0xC95A, /* 0x80 */
+ 0xC95B, 0xC95C, 0xC95D, 0xC95E, 0xC95F, 0xC962, 0xC964, 0xC965, /* 0x90 */
+ 0xC966, 0xC967, 0xC968, 0xC969, 0xC96A, 0xC96B, 0xC96D, 0xC96E, /* 0x90 */
+ 0xC96F, 0x21D2, 0x21D4, 0x2200, 0x2203, 0x00B4, 0xFF5E, 0x02C7, /* 0xA0 */
+ 0x02D8, 0x02DD, 0x02DA, 0x02D9, 0x00B8, 0x02DB, 0x00A1, 0x00BF, /* 0xA0 */
+ 0x02D0, 0x222E, 0x2211, 0x220F, 0x00A4, 0x2109, 0x2030, 0x25C1, /* 0xB0 */
+ 0x25C0, 0x25B7, 0x25B6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, /* 0xB0 */
+ 0x2663, 0x2299, 0x25C8, 0x25A3, 0x25D0, 0x25D1, 0x2592, 0x25A4, /* 0xC0 */
+ 0x25A5, 0x25A8, 0x25A7, 0x25A6, 0x25A9, 0x2668, 0x260F, 0x260E, /* 0xC0 */
+ 0x261C, 0x261E, 0x00B6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, /* 0xD0 */
+ 0x2196, 0x2198, 0x266D, 0x2669, 0x266A, 0x266C, 0x327F, 0x321C, /* 0xD0 */
+ 0x2116, 0x33C7, 0x2122, 0x33C2, 0x33D8, 0x2121, 0x20AC, 0x00AE /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC971, 0xC972, 0xC973, 0xC975, 0xC976, 0xC977, 0xC978, /* 0x40 */
+ 0xC979, 0xC97A, 0xC97B, 0xC97D, 0xC97E, 0xC97F, 0xC980, 0xC981, /* 0x40 */
+ 0xC982, 0xC983, 0xC984, 0xC985, 0xC986, 0xC987, 0xC98A, 0xC98B, /* 0x50 */
+ 0xC98D, 0xC98E, 0xC98F, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995, 0xC996, 0xC997, /* 0x60 */
+ 0xC99A, 0xC99C, 0xC99E, 0xC99F, 0xC9A0, 0xC9A1, 0xC9A2, 0xC9A3, /* 0x60 */
+ 0xC9A4, 0xC9A5, 0xC9A6, 0xC9A7, 0xC9A8, 0xC9A9, 0xC9AA, 0xC9AB, /* 0x70 */
+ 0xC9AC, 0xC9AD, 0xC9AE, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC9AF, 0xC9B0, 0xC9B1, 0xC9B2, 0xC9B3, 0xC9B4, 0xC9B5, /* 0x80 */
+ 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD, /* 0x80 */
+ 0xC9BE, 0xC9BF, 0xC9C2, 0xC9C3, 0xC9C5, 0xC9C6, 0xC9C9, 0xC9CB, /* 0x90 */
+ 0xC9CC, 0xC9CD, 0xC9CE, 0xC9CF, 0xC9D2, 0xC9D4, 0xC9D7, 0xC9D8, /* 0x90 */
+ 0xC9DB, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, /* 0xA0 */
+ 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, /* 0xA0 */
+ 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, /* 0xB0 */
+ 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, /* 0xB0 */
+ 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, /* 0xC0 */
+ 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, /* 0xC0 */
+ 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, /* 0xD0 */
+ 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFFE6, 0xFF3D, 0xFF3E, 0xFF3F, /* 0xD0 */
+ 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0xE0 */
+ 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0xE0 */
+ 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, /* 0xF0 */
+ 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, 0xFFE3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC9DE, 0xC9DF, 0xC9E1, 0xC9E3, 0xC9E5, 0xC9E6, 0xC9E8, /* 0x40 */
+ 0xC9E9, 0xC9EA, 0xC9EB, 0xC9EE, 0xC9F2, 0xC9F3, 0xC9F4, 0xC9F5, /* 0x40 */
+ 0xC9F6, 0xC9F7, 0xC9FA, 0xC9FB, 0xC9FD, 0xC9FE, 0xC9FF, 0xCA01, /* 0x50 */
+ 0xCA02, 0xCA03, 0xCA04, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCA05, 0xCA06, 0xCA07, 0xCA0A, 0xCA0E, 0xCA0F, 0xCA10, /* 0x60 */
+ 0xCA11, 0xCA12, 0xCA13, 0xCA15, 0xCA16, 0xCA17, 0xCA19, 0xCA1A, /* 0x60 */
+ 0xCA1B, 0xCA1C, 0xCA1D, 0xCA1E, 0xCA1F, 0xCA20, 0xCA21, 0xCA22, /* 0x70 */
+ 0xCA23, 0xCA24, 0xCA25, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCA26, 0xCA27, 0xCA28, 0xCA2A, 0xCA2B, 0xCA2C, 0xCA2D, /* 0x80 */
+ 0xCA2E, 0xCA2F, 0xCA30, 0xCA31, 0xCA32, 0xCA33, 0xCA34, 0xCA35, /* 0x80 */
+ 0xCA36, 0xCA37, 0xCA38, 0xCA39, 0xCA3A, 0xCA3B, 0xCA3C, 0xCA3D, /* 0x90 */
+ 0xCA3E, 0xCA3F, 0xCA40, 0xCA41, 0xCA42, 0xCA43, 0xCA44, 0xCA45, /* 0x90 */
+ 0xCA46, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, /* 0xA0 */
+ 0x3138, 0x3139, 0x313A, 0x313B, 0x313C, 0x313D, 0x313E, 0x313F, /* 0xA0 */
+ 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, /* 0xB0 */
+ 0x3148, 0x3149, 0x314A, 0x314B, 0x314C, 0x314D, 0x314E, 0x314F, /* 0xB0 */
+ 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, /* 0xC0 */
+ 0x3158, 0x3159, 0x315A, 0x315B, 0x315C, 0x315D, 0x315E, 0x315F, /* 0xC0 */
+ 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, /* 0xD0 */
+ 0x3168, 0x3169, 0x316A, 0x316B, 0x316C, 0x316D, 0x316E, 0x316F, /* 0xD0 */
+ 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, /* 0xE0 */
+ 0x3178, 0x3179, 0x317A, 0x317B, 0x317C, 0x317D, 0x317E, 0x317F, /* 0xE0 */
+ 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, /* 0xF0 */
+ 0x3188, 0x3189, 0x318A, 0x318B, 0x318C, 0x318D, 0x318E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCA47, 0xCA48, 0xCA49, 0xCA4A, 0xCA4B, 0xCA4E, 0xCA4F, /* 0x40 */
+ 0xCA51, 0xCA52, 0xCA53, 0xCA55, 0xCA56, 0xCA57, 0xCA58, 0xCA59, /* 0x40 */
+ 0xCA5A, 0xCA5B, 0xCA5E, 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, /* 0x50 */
+ 0xCA67, 0xCA69, 0xCA6A, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, 0xCA6F, 0xCA70, 0xCA71, /* 0x60 */
+ 0xCA72, 0xCA73, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, 0xCA79, /* 0x60 */
+ 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7E, 0xCA7F, 0xCA80, 0xCA81, 0xCA82, /* 0x70 */
+ 0xCA83, 0xCA85, 0xCA86, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xCA8B, 0xCA8C, 0xCA8D, /* 0x80 */
+ 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, 0xCA93, 0xCA94, 0xCA95, /* 0x80 */
+ 0xCA96, 0xCA97, 0xCA99, 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, 0xCA9E, /* 0x90 */
+ 0xCA9F, 0xCAA0, 0xCAA1, 0xCAA2, 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6, /* 0x90 */
+ 0xCAA7, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, /* 0xA0 */
+ 0x2177, 0x2178, 0x2179, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, /* 0xB0 */
+ 0x2168, 0x2169, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0xC0 */
+ 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0xC0 */
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, /* 0xD0 */
+ 0x03A9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0xE0 */
+ 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0xE0 */
+ 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, /* 0xF0 */
+ 0x03C9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCAA8, 0xCAA9, 0xCAAA, 0xCAAB, 0xCAAC, 0xCAAD, 0xCAAE, /* 0x40 */
+ 0xCAAF, 0xCAB0, 0xCAB1, 0xCAB2, 0xCAB3, 0xCAB4, 0xCAB5, 0xCAB6, /* 0x40 */
+ 0xCAB7, 0xCAB8, 0xCAB9, 0xCABA, 0xCABB, 0xCABE, 0xCABF, 0xCAC1, /* 0x50 */
+ 0xCAC2, 0xCAC3, 0xCAC5, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCAC6, 0xCAC7, 0xCAC8, 0xCAC9, 0xCACA, 0xCACB, 0xCACE, /* 0x60 */
+ 0xCAD0, 0xCAD2, 0xCAD4, 0xCAD5, 0xCAD6, 0xCAD7, 0xCADA, 0xCADB, /* 0x60 */
+ 0xCADC, 0xCADD, 0xCADE, 0xCADF, 0xCAE1, 0xCAE2, 0xCAE3, 0xCAE4, /* 0x70 */
+ 0xCAE5, 0xCAE6, 0xCAE7, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCAE8, 0xCAE9, 0xCAEA, 0xCAEB, 0xCAED, 0xCAEE, 0xCAEF, /* 0x80 */
+ 0xCAF0, 0xCAF1, 0xCAF2, 0xCAF3, 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8, /* 0x80 */
+ 0xCAF9, 0xCAFA, 0xCAFB, 0xCAFC, 0xCAFD, 0xCAFE, 0xCAFF, 0xCB00, /* 0x90 */
+ 0xCB01, 0xCB02, 0xCB03, 0xCB04, 0xCB05, 0xCB06, 0xCB07, 0xCB09, /* 0x90 */
+ 0xCB0A, 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, /* 0xA0 */
+ 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, /* 0xA0 */
+ 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, /* 0xB0 */
+ 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, /* 0xB0 */
+ 0x2542, 0x2512, 0x2511, 0x251A, 0x2519, 0x2516, 0x2515, 0x250E, /* 0xC0 */
+ 0x250D, 0x251E, 0x251F, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, /* 0xC0 */
+ 0x252A, 0x252D, 0x252E, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, /* 0xD0 */
+ 0x253A, 0x253D, 0x253E, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, /* 0xD0 */
+ 0x2546, 0x2547, 0x2548, 0x2549, 0x254A /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCB0B, 0xCB0C, 0xCB0D, 0xCB0E, 0xCB0F, 0xCB11, 0xCB12, /* 0x40 */
+ 0xCB13, 0xCB15, 0xCB16, 0xCB17, 0xCB19, 0xCB1A, 0xCB1B, 0xCB1C, /* 0x40 */
+ 0xCB1D, 0xCB1E, 0xCB1F, 0xCB22, 0xCB23, 0xCB24, 0xCB25, 0xCB26, /* 0x50 */
+ 0xCB27, 0xCB28, 0xCB29, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCB2A, 0xCB2B, 0xCB2C, 0xCB2D, 0xCB2E, 0xCB2F, 0xCB30, /* 0x60 */
+ 0xCB31, 0xCB32, 0xCB33, 0xCB34, 0xCB35, 0xCB36, 0xCB37, 0xCB38, /* 0x60 */
+ 0xCB39, 0xCB3A, 0xCB3B, 0xCB3C, 0xCB3D, 0xCB3E, 0xCB3F, 0xCB40, /* 0x70 */
+ 0xCB42, 0xCB43, 0xCB44, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCB45, 0xCB46, 0xCB47, 0xCB4A, 0xCB4B, 0xCB4D, 0xCB4E, /* 0x80 */
+ 0xCB4F, 0xCB51, 0xCB52, 0xCB53, 0xCB54, 0xCB55, 0xCB56, 0xCB57, /* 0x80 */
+ 0xCB5A, 0xCB5B, 0xCB5C, 0xCB5E, 0xCB5F, 0xCB60, 0xCB61, 0xCB62, /* 0x90 */
+ 0xCB63, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xCB69, 0xCB6A, 0xCB6B, /* 0x90 */
+ 0xCB6C, 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33C4, 0x33A3, /* 0xA0 */
+ 0x33A4, 0x33A5, 0x33A6, 0x3399, 0x339A, 0x339B, 0x339C, 0x339D, /* 0xA0 */
+ 0x339E, 0x339F, 0x33A0, 0x33A1, 0x33A2, 0x33CA, 0x338D, 0x338E, /* 0xB0 */
+ 0x338F, 0x33CF, 0x3388, 0x3389, 0x33C8, 0x33A7, 0x33A8, 0x33B0, /* 0xB0 */
+ 0x33B1, 0x33B2, 0x33B3, 0x33B4, 0x33B5, 0x33B6, 0x33B7, 0x33B8, /* 0xC0 */
+ 0x33B9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33BA, 0x33BB, /* 0xC0 */
+ 0x33BC, 0x33BD, 0x33BE, 0x33BF, 0x3390, 0x3391, 0x3392, 0x3393, /* 0xD0 */
+ 0x3394, 0x2126, 0x33C0, 0x33C1, 0x338A, 0x338B, 0x338C, 0x33D6, /* 0xD0 */
+ 0x33C5, 0x33AD, 0x33AE, 0x33AF, 0x33DB, 0x33A9, 0x33AA, 0x33AB, /* 0xE0 */
+ 0x33AC, 0x33DD, 0x33D0, 0x33D3, 0x33C3, 0x33C9, 0x33DC, 0x33C6 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xCB71, 0xCB72, 0xCB73, /* 0x40 */
+ 0xCB74, 0xCB75, 0xCB76, 0xCB77, 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D, /* 0x40 */
+ 0xCB7E, 0xCB7F, 0xCB80, 0xCB81, 0xCB82, 0xCB83, 0xCB84, 0xCB85, /* 0x50 */
+ 0xCB86, 0xCB87, 0xCB88, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCB8E, 0xCB8F, /* 0x60 */
+ 0xCB90, 0xCB91, 0xCB92, 0xCB93, 0xCB94, 0xCB95, 0xCB96, 0xCB97, /* 0x60 */
+ 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9D, 0xCB9E, 0xCB9F, 0xCBA0, /* 0x70 */
+ 0xCBA1, 0xCBA2, 0xCBA3, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCBA4, 0xCBA5, 0xCBA6, 0xCBA7, 0xCBA8, 0xCBA9, 0xCBAA, /* 0x80 */
+ 0xCBAB, 0xCBAC, 0xCBAD, 0xCBAE, 0xCBAF, 0xCBB0, 0xCBB1, 0xCBB2, /* 0x80 */
+ 0xCBB3, 0xCBB4, 0xCBB5, 0xCBB6, 0xCBB7, 0xCBB9, 0xCBBA, 0xCBBB, /* 0x90 */
+ 0xCBBC, 0xCBBD, 0xCBBE, 0xCBBF, 0xCBC0, 0xCBC1, 0xCBC2, 0xCBC3, /* 0x90 */
+ 0xCBC4, 0x00C6, 0x00D0, 0x00AA, 0x0126, 0, 0x0132, 0, /* 0xA0 */
+ 0x013F, 0x0141, 0x00D8, 0x0152, 0x00BA, 0x00DE, 0x0166, 0x014A, /* 0xA0 */
+ 0, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, /* 0xB0 */
+ 0x3267, 0x3268, 0x3269, 0x326A, 0x326B, 0x326C, 0x326D, 0x326E, /* 0xB0 */
+ 0x326F, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, /* 0xC0 */
+ 0x3277, 0x3278, 0x3279, 0x327A, 0x327B, 0x24D0, 0x24D1, 0x24D2, /* 0xC0 */
+ 0x24D3, 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, /* 0xD0 */
+ 0x24DB, 0x24DC, 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, /* 0xD0 */
+ 0x24E3, 0x24E4, 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x2460, /* 0xE0 */
+ 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, /* 0xE0 */
+ 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x00BD, 0x2153, /* 0xF0 */
+ 0x2154, 0x00BC, 0x00BE, 0x215B, 0x215C, 0x215D, 0x215E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_A9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCBC5, 0xCBC6, 0xCBC7, 0xCBC8, 0xCBC9, 0xCBCA, 0xCBCB, /* 0x40 */
+ 0xCBCC, 0xCBCD, 0xCBCE, 0xCBCF, 0xCBD0, 0xCBD1, 0xCBD2, 0xCBD3, /* 0x40 */
+ 0xCBD5, 0xCBD6, 0xCBD7, 0xCBD8, 0xCBD9, 0xCBDA, 0xCBDB, 0xCBDC, /* 0x50 */
+ 0xCBDD, 0xCBDE, 0xCBDF, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCBE0, 0xCBE1, 0xCBE2, 0xCBE3, 0xCBE5, 0xCBE6, 0xCBE8, /* 0x60 */
+ 0xCBEA, 0xCBEB, 0xCBEC, 0xCBED, 0xCBEE, 0xCBEF, 0xCBF0, 0xCBF1, /* 0x60 */
+ 0xCBF2, 0xCBF3, 0xCBF4, 0xCBF5, 0xCBF6, 0xCBF7, 0xCBF8, 0xCBF9, /* 0x70 */
+ 0xCBFA, 0xCBFB, 0xCBFC, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCBFD, 0xCBFE, 0xCBFF, 0xCC00, 0xCC01, 0xCC02, 0xCC03, /* 0x80 */
+ 0xCC04, 0xCC05, 0xCC06, 0xCC07, 0xCC08, 0xCC09, 0xCC0A, 0xCC0B, /* 0x80 */
+ 0xCC0E, 0xCC0F, 0xCC11, 0xCC12, 0xCC13, 0xCC15, 0xCC16, 0xCC17, /* 0x90 */
+ 0xCC18, 0xCC19, 0xCC1A, 0xCC1B, 0xCC1E, 0xCC1F, 0xCC20, 0xCC23, /* 0x90 */
+ 0xCC24, 0x00E6, 0x0111, 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138, /* 0xA0 */
+ 0x0140, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x00FE, 0x0167, 0x014B, /* 0xA0 */
+ 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, /* 0xB0 */
+ 0x3207, 0x3208, 0x3209, 0x320A, 0x320B, 0x320C, 0x320D, 0x320E, /* 0xB0 */
+ 0x320F, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, /* 0xC0 */
+ 0x3217, 0x3218, 0x3219, 0x321A, 0x321B, 0x249C, 0x249D, 0x249E, /* 0xC0 */
+ 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, /* 0xD0 */
+ 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, /* 0xD0 */
+ 0x24AF, 0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x2474, /* 0xE0 */
+ 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, /* 0xE0 */
+ 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x00B9, 0x00B2, /* 0xF0 */
+ 0x00B3, 0x2074, 0x207F, 0x2081, 0x2082, 0x2083, 0x2084 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_AA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCC25, 0xCC26, 0xCC2A, 0xCC2B, 0xCC2D, 0xCC2F, 0xCC31, /* 0x40 */
+ 0xCC32, 0xCC33, 0xCC34, 0xCC35, 0xCC36, 0xCC37, 0xCC3A, 0xCC3F, /* 0x40 */
+ 0xCC40, 0xCC41, 0xCC42, 0xCC43, 0xCC46, 0xCC47, 0xCC49, 0xCC4A, /* 0x50 */
+ 0xCC4B, 0xCC4D, 0xCC4E, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, 0xCC53, 0xCC56, 0xCC5A, /* 0x60 */
+ 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, 0xCC61, 0xCC62, 0xCC63, /* 0x60 */
+ 0xCC65, 0xCC67, 0xCC69, 0xCC6A, 0xCC6B, 0xCC6C, 0xCC6D, 0xCC6E, /* 0x70 */
+ 0xCC6F, 0xCC71, 0xCC72, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCC73, 0xCC74, 0xCC76, 0xCC77, 0xCC78, 0xCC79, 0xCC7A, /* 0x80 */
+ 0xCC7B, 0xCC7C, 0xCC7D, 0xCC7E, 0xCC7F, 0xCC80, 0xCC81, 0xCC82, /* 0x80 */
+ 0xCC83, 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88, 0xCC89, 0xCC8A, /* 0x90 */
+ 0xCC8B, 0xCC8C, 0xCC8D, 0xCC8E, 0xCC8F, 0xCC90, 0xCC91, 0xCC92, /* 0x90 */
+ 0xCC93, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0xA0 */
+ 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, /* 0xA0 */
+ 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, /* 0xB0 */
+ 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, /* 0xB0 */
+ 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, /* 0xC0 */
+ 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, /* 0xC0 */
+ 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, /* 0xD0 */
+ 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, /* 0xD0 */
+ 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0xE0 */
+ 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, /* 0xE0 */
+ 0x3090, 0x3091, 0x3092, 0x3093 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_AB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCC94, 0xCC95, 0xCC96, 0xCC97, 0xCC9A, 0xCC9B, 0xCC9D, /* 0x40 */
+ 0xCC9E, 0xCC9F, 0xCCA1, 0xCCA2, 0xCCA3, 0xCCA4, 0xCCA5, 0xCCA6, /* 0x40 */
+ 0xCCA7, 0xCCAA, 0xCCAE, 0xCCAF, 0xCCB0, 0xCCB1, 0xCCB2, 0xCCB3, /* 0x50 */
+ 0xCCB6, 0xCCB7, 0xCCB9, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCCBA, 0xCCBB, 0xCCBD, 0xCCBE, 0xCCBF, 0xCCC0, 0xCCC1, /* 0x60 */
+ 0xCCC2, 0xCCC3, 0xCCC6, 0xCCC8, 0xCCCA, 0xCCCB, 0xCCCC, 0xCCCD, /* 0x60 */
+ 0xCCCE, 0xCCCF, 0xCCD1, 0xCCD2, 0xCCD3, 0xCCD5, 0xCCD6, 0xCCD7, /* 0x70 */
+ 0xCCD8, 0xCCD9, 0xCCDA, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCCDB, 0xCCDC, 0xCCDD, 0xCCDE, 0xCCDF, 0xCCE0, 0xCCE1, /* 0x80 */
+ 0xCCE2, 0xCCE3, 0xCCE5, 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA, /* 0x80 */
+ 0xCCEB, 0xCCED, 0xCCEE, 0xCCEF, 0xCCF1, 0xCCF2, 0xCCF3, 0xCCF4, /* 0x90 */
+ 0xCCF5, 0xCCF6, 0xCCF7, 0xCCF8, 0xCCF9, 0xCCFA, 0xCCFB, 0xCCFC, /* 0x90 */
+ 0xCCFD, 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, /* 0xA0 */
+ 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0xA0 */
+ 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0xB0 */
+ 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0xB0 */
+ 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0xC0 */
+ 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0xC0 */
+ 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0xD0 */
+ 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0xD0 */
+ 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0xE0 */
+ 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, /* 0xE0 */
+ 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_AC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCCFE, 0xCCFF, 0xCD00, 0xCD02, 0xCD03, 0xCD04, 0xCD05, /* 0x40 */
+ 0xCD06, 0xCD07, 0xCD0A, 0xCD0B, 0xCD0D, 0xCD0E, 0xCD0F, 0xCD11, /* 0x40 */
+ 0xCD12, 0xCD13, 0xCD14, 0xCD15, 0xCD16, 0xCD17, 0xCD1A, 0xCD1C, /* 0x50 */
+ 0xCD1E, 0xCD1F, 0xCD20, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCD21, 0xCD22, 0xCD23, 0xCD25, 0xCD26, 0xCD27, 0xCD29, /* 0x60 */
+ 0xCD2A, 0xCD2B, 0xCD2D, 0xCD2E, 0xCD2F, 0xCD30, 0xCD31, 0xCD32, /* 0x60 */
+ 0xCD33, 0xCD34, 0xCD35, 0xCD36, 0xCD37, 0xCD38, 0xCD3A, 0xCD3B, /* 0x70 */
+ 0xCD3C, 0xCD3D, 0xCD3E, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCD3F, 0xCD40, 0xCD41, 0xCD42, 0xCD43, 0xCD44, 0xCD45, /* 0x80 */
+ 0xCD46, 0xCD47, 0xCD48, 0xCD49, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, /* 0x80 */
+ 0xCD4E, 0xCD4F, 0xCD50, 0xCD51, 0xCD52, 0xCD53, 0xCD54, 0xCD55, /* 0x90 */
+ 0xCD56, 0xCD57, 0xCD58, 0xCD59, 0xCD5A, 0xCD5B, 0xCD5D, 0xCD5E, /* 0x90 */
+ 0xCD5F, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, /* 0xA0 */
+ 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, /* 0xA0 */
+ 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, /* 0xB0 */
+ 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, /* 0xB0 */
+ 0x042E, 0x042F, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, /* 0xD0 */
+ 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, /* 0xD0 */
+ 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0xE0 */
+ 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0xE0 */
+ 0x044E, 0x044F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_AD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCD61, 0xCD62, 0xCD63, 0xCD65, 0xCD66, 0xCD67, 0xCD68, /* 0x40 */
+ 0xCD69, 0xCD6A, 0xCD6B, 0xCD6E, 0xCD70, 0xCD72, 0xCD73, 0xCD74, /* 0x40 */
+ 0xCD75, 0xCD76, 0xCD77, 0xCD79, 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, /* 0x50 */
+ 0xCD7E, 0xCD7F, 0xCD80, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xCD85, 0xCD86, 0xCD87, /* 0x60 */
+ 0xCD89, 0xCD8A, 0xCD8B, 0xCD8C, 0xCD8D, 0xCD8E, 0xCD8F, 0xCD90, /* 0x60 */
+ 0xCD91, 0xCD92, 0xCD93, 0xCD96, 0xCD97, 0xCD99, 0xCD9A, 0xCD9B, /* 0x70 */
+ 0xCD9D, 0xCD9E, 0xCD9F, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCDA0, 0xCDA1, 0xCDA2, 0xCDA3, 0xCDA6, 0xCDA8, 0xCDAA, /* 0x80 */
+ 0xCDAB, 0xCDAC, 0xCDAD, 0xCDAE, 0xCDAF, 0xCDB1, 0xCDB2, 0xCDB3, /* 0x80 */
+ 0xCDB4, 0xCDB5, 0xCDB6, 0xCDB7, 0xCDB8, 0xCDB9, 0xCDBA, 0xCDBB, /* 0x90 */
+ 0xCDBC, 0xCDBD, 0xCDBE, 0xCDBF, 0xCDC0, 0xCDC1, 0xCDC2, 0xCDC3, /* 0x90 */
+ 0xCDC5 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_AE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDC6, 0xCDC7, 0xCDC8, 0xCDC9, 0xCDCA, 0xCDCB, 0xCDCD, /* 0x40 */
+ 0xCDCE, 0xCDCF, 0xCDD1, 0xCDD2, 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6, /* 0x40 */
+ 0xCDD7, 0xCDD8, 0xCDD9, 0xCDDA, 0xCDDB, 0xCDDC, 0xCDDD, 0xCDDE, /* 0x50 */
+ 0xCDDF, 0xCDE0, 0xCDE1, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCDE2, 0xCDE3, 0xCDE4, 0xCDE5, 0xCDE6, 0xCDE7, 0xCDE9, /* 0x60 */
+ 0xCDEA, 0xCDEB, 0xCDED, 0xCDEE, 0xCDEF, 0xCDF1, 0xCDF2, 0xCDF3, /* 0x60 */
+ 0xCDF4, 0xCDF5, 0xCDF6, 0xCDF7, 0xCDFA, 0xCDFC, 0xCDFE, 0xCDFF, /* 0x70 */
+ 0xCE00, 0xCE01, 0xCE02, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCE03, 0xCE05, 0xCE06, 0xCE07, 0xCE09, 0xCE0A, 0xCE0B, /* 0x80 */
+ 0xCE0D, 0xCE0E, 0xCE0F, 0xCE10, 0xCE11, 0xCE12, 0xCE13, 0xCE15, /* 0x80 */
+ 0xCE16, 0xCE17, 0xCE18, 0xCE1A, 0xCE1B, 0xCE1C, 0xCE1D, 0xCE1E, /* 0x90 */
+ 0xCE1F, 0xCE22, 0xCE23, 0xCE25, 0xCE26, 0xCE27, 0xCE29, 0xCE2A, /* 0x90 */
+ 0xCE2B /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_AF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCE2C, 0xCE2D, 0xCE2E, 0xCE2F, 0xCE32, 0xCE34, 0xCE36, /* 0x40 */
+ 0xCE37, 0xCE38, 0xCE39, 0xCE3A, 0xCE3B, 0xCE3C, 0xCE3D, 0xCE3E, /* 0x40 */
+ 0xCE3F, 0xCE40, 0xCE41, 0xCE42, 0xCE43, 0xCE44, 0xCE45, 0xCE46, /* 0x50 */
+ 0xCE47, 0xCE48, 0xCE49, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCE4A, 0xCE4B, 0xCE4C, 0xCE4D, 0xCE4E, 0xCE4F, 0xCE50, /* 0x60 */
+ 0xCE51, 0xCE52, 0xCE53, 0xCE54, 0xCE55, 0xCE56, 0xCE57, 0xCE5A, /* 0x60 */
+ 0xCE5B, 0xCE5D, 0xCE5E, 0xCE62, 0xCE63, 0xCE64, 0xCE65, 0xCE66, /* 0x70 */
+ 0xCE67, 0xCE6A, 0xCE6C, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE72, 0xCE73, 0xCE76, /* 0x80 */
+ 0xCE77, 0xCE79, 0xCE7A, 0xCE7B, 0xCE7D, 0xCE7E, 0xCE7F, 0xCE80, /* 0x80 */
+ 0xCE81, 0xCE82, 0xCE83, 0xCE86, 0xCE88, 0xCE8A, 0xCE8B, 0xCE8C, /* 0x90 */
+ 0xCE8D, 0xCE8E, 0xCE8F, 0xCE92, 0xCE93, 0xCE95, 0xCE96, 0xCE97, /* 0x90 */
+ 0xCE99 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCE9A, 0xCE9B, 0xCE9C, 0xCE9D, 0xCE9E, 0xCE9F, 0xCEA2, /* 0x40 */
+ 0xCEA6, 0xCEA7, 0xCEA8, 0xCEA9, 0xCEAA, 0xCEAB, 0xCEAE, 0xCEAF, /* 0x40 */
+ 0xCEB0, 0xCEB1, 0xCEB2, 0xCEB3, 0xCEB4, 0xCEB5, 0xCEB6, 0xCEB7, /* 0x50 */
+ 0xCEB8, 0xCEB9, 0xCEBA, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCEBB, 0xCEBC, 0xCEBD, 0xCEBE, 0xCEBF, 0xCEC0, 0xCEC2, /* 0x60 */
+ 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6, 0xCEC7, 0xCEC8, 0xCEC9, 0xCECA, /* 0x60 */
+ 0xCECB, 0xCECC, 0xCECD, 0xCECE, 0xCECF, 0xCED0, 0xCED1, 0xCED2, /* 0x70 */
+ 0xCED3, 0xCED4, 0xCED5, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCED6, 0xCED7, 0xCED8, 0xCED9, 0xCEDA, 0xCEDB, 0xCEDC, /* 0x80 */
+ 0xCEDD, 0xCEDE, 0xCEDF, 0xCEE0, 0xCEE1, 0xCEE2, 0xCEE3, 0xCEE6, /* 0x80 */
+ 0xCEE7, 0xCEE9, 0xCEEA, 0xCEED, 0xCEEE, 0xCEEF, 0xCEF0, 0xCEF1, /* 0x90 */
+ 0xCEF2, 0xCEF3, 0xCEF6, 0xCEFA, 0xCEFB, 0xCEFC, 0xCEFD, 0xCEFE, /* 0x90 */
+ 0xCEFF, 0xAC00, 0xAC01, 0xAC04, 0xAC07, 0xAC08, 0xAC09, 0xAC0A, /* 0xA0 */
+ 0xAC10, 0xAC11, 0xAC12, 0xAC13, 0xAC14, 0xAC15, 0xAC16, 0xAC17, /* 0xA0 */
+ 0xAC19, 0xAC1A, 0xAC1B, 0xAC1C, 0xAC1D, 0xAC20, 0xAC24, 0xAC2C, /* 0xB0 */
+ 0xAC2D, 0xAC2F, 0xAC30, 0xAC31, 0xAC38, 0xAC39, 0xAC3C, 0xAC40, /* 0xB0 */
+ 0xAC4B, 0xAC4D, 0xAC54, 0xAC58, 0xAC5C, 0xAC70, 0xAC71, 0xAC74, /* 0xC0 */
+ 0xAC77, 0xAC78, 0xAC7A, 0xAC80, 0xAC81, 0xAC83, 0xAC84, 0xAC85, /* 0xC0 */
+ 0xAC86, 0xAC89, 0xAC8A, 0xAC8B, 0xAC8C, 0xAC90, 0xAC94, 0xAC9C, /* 0xD0 */
+ 0xAC9D, 0xAC9F, 0xACA0, 0xACA1, 0xACA8, 0xACA9, 0xACAA, 0xACAC, /* 0xD0 */
+ 0xACAF, 0xACB0, 0xACB8, 0xACB9, 0xACBB, 0xACBC, 0xACBD, 0xACC1, /* 0xE0 */
+ 0xACC4, 0xACC8, 0xACCC, 0xACD5, 0xACD7, 0xACE0, 0xACE1, 0xACE4, /* 0xE0 */
+ 0xACE7, 0xACE8, 0xACEA, 0xACEC, 0xACEF, 0xACF0, 0xACF1, 0xACF3, /* 0xF0 */
+ 0xACF5, 0xACF6, 0xACFC, 0xACFD, 0xAD00, 0xAD04, 0xAD06 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCF02, 0xCF03, 0xCF05, 0xCF06, 0xCF07, 0xCF09, 0xCF0A, /* 0x40 */
+ 0xCF0B, 0xCF0C, 0xCF0D, 0xCF0E, 0xCF0F, 0xCF12, 0xCF14, 0xCF16, /* 0x40 */
+ 0xCF17, 0xCF18, 0xCF19, 0xCF1A, 0xCF1B, 0xCF1D, 0xCF1E, 0xCF1F, /* 0x50 */
+ 0xCF21, 0xCF22, 0xCF23, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCF25, 0xCF26, 0xCF27, 0xCF28, 0xCF29, 0xCF2A, 0xCF2B, /* 0x60 */
+ 0xCF2E, 0xCF32, 0xCF33, 0xCF34, 0xCF35, 0xCF36, 0xCF37, 0xCF39, /* 0x60 */
+ 0xCF3A, 0xCF3B, 0xCF3C, 0xCF3D, 0xCF3E, 0xCF3F, 0xCF40, 0xCF41, /* 0x70 */
+ 0xCF42, 0xCF43, 0xCF44, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCF45, 0xCF46, 0xCF47, 0xCF48, 0xCF49, 0xCF4A, 0xCF4B, /* 0x80 */
+ 0xCF4C, 0xCF4D, 0xCF4E, 0xCF4F, 0xCF50, 0xCF51, 0xCF52, 0xCF53, /* 0x80 */
+ 0xCF56, 0xCF57, 0xCF59, 0xCF5A, 0xCF5B, 0xCF5D, 0xCF5E, 0xCF5F, /* 0x90 */
+ 0xCF60, 0xCF61, 0xCF62, 0xCF63, 0xCF66, 0xCF68, 0xCF6A, 0xCF6B, /* 0x90 */
+ 0xCF6C, 0xAD0C, 0xAD0D, 0xAD0F, 0xAD11, 0xAD18, 0xAD1C, 0xAD20, /* 0xA0 */
+ 0xAD29, 0xAD2C, 0xAD2D, 0xAD34, 0xAD35, 0xAD38, 0xAD3C, 0xAD44, /* 0xA0 */
+ 0xAD45, 0xAD47, 0xAD49, 0xAD50, 0xAD54, 0xAD58, 0xAD61, 0xAD63, /* 0xB0 */
+ 0xAD6C, 0xAD6D, 0xAD70, 0xAD73, 0xAD74, 0xAD75, 0xAD76, 0xAD7B, /* 0xB0 */
+ 0xAD7C, 0xAD7D, 0xAD7F, 0xAD81, 0xAD82, 0xAD88, 0xAD89, 0xAD8C, /* 0xC0 */
+ 0xAD90, 0xAD9C, 0xAD9D, 0xADA4, 0xADB7, 0xADC0, 0xADC1, 0xADC4, /* 0xC0 */
+ 0xADC8, 0xADD0, 0xADD1, 0xADD3, 0xADDC, 0xADE0, 0xADE4, 0xADF8, /* 0xD0 */
+ 0xADF9, 0xADFC, 0xADFF, 0xAE00, 0xAE01, 0xAE08, 0xAE09, 0xAE0B, /* 0xD0 */
+ 0xAE0D, 0xAE14, 0xAE30, 0xAE31, 0xAE34, 0xAE37, 0xAE38, 0xAE3A, /* 0xE0 */
+ 0xAE40, 0xAE41, 0xAE43, 0xAE45, 0xAE46, 0xAE4A, 0xAE4C, 0xAE4D, /* 0xE0 */
+ 0xAE4E, 0xAE50, 0xAE54, 0xAE56, 0xAE5C, 0xAE5D, 0xAE5F, 0xAE60, /* 0xF0 */
+ 0xAE61, 0xAE65, 0xAE68, 0xAE69, 0xAE6C, 0xAE70, 0xAE78 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCF6D, 0xCF6E, 0xCF6F, 0xCF72, 0xCF73, 0xCF75, 0xCF76, /* 0x40 */
+ 0xCF77, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, 0xCF7E, 0xCF7F, /* 0x40 */
+ 0xCF81, 0xCF82, 0xCF83, 0xCF84, 0xCF86, 0xCF87, 0xCF88, 0xCF89, /* 0x50 */
+ 0xCF8A, 0xCF8B, 0xCF8D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92, 0xCF93, 0xCF94, /* 0x60 */
+ 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, 0xCF9A, 0xCF9B, 0xCF9C, /* 0x60 */
+ 0xCF9D, 0xCF9E, 0xCF9F, 0xCFA0, 0xCFA2, 0xCFA3, 0xCFA4, 0xCFA5, /* 0x70 */
+ 0xCFA6, 0xCFA7, 0xCFA9, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCFAA, 0xCFAB, 0xCFAC, 0xCFAD, 0xCFAE, 0xCFAF, 0xCFB1, /* 0x80 */
+ 0xCFB2, 0xCFB3, 0xCFB4, 0xCFB5, 0xCFB6, 0xCFB7, 0xCFB8, 0xCFB9, /* 0x80 */
+ 0xCFBA, 0xCFBB, 0xCFBC, 0xCFBD, 0xCFBE, 0xCFBF, 0xCFC0, 0xCFC1, /* 0x90 */
+ 0xCFC2, 0xCFC3, 0xCFC5, 0xCFC6, 0xCFC7, 0xCFC8, 0xCFC9, 0xCFCA, /* 0x90 */
+ 0xCFCB, 0xAE79, 0xAE7B, 0xAE7C, 0xAE7D, 0xAE84, 0xAE85, 0xAE8C, /* 0xA0 */
+ 0xAEBC, 0xAEBD, 0xAEBE, 0xAEC0, 0xAEC4, 0xAECC, 0xAECD, 0xAECF, /* 0xA0 */
+ 0xAED0, 0xAED1, 0xAED8, 0xAED9, 0xAEDC, 0xAEE8, 0xAEEB, 0xAEED, /* 0xB0 */
+ 0xAEF4, 0xAEF8, 0xAEFC, 0xAF07, 0xAF08, 0xAF0D, 0xAF10, 0xAF2C, /* 0xB0 */
+ 0xAF2D, 0xAF30, 0xAF32, 0xAF34, 0xAF3C, 0xAF3D, 0xAF3F, 0xAF41, /* 0xC0 */
+ 0xAF42, 0xAF43, 0xAF48, 0xAF49, 0xAF50, 0xAF5C, 0xAF5D, 0xAF64, /* 0xC0 */
+ 0xAF65, 0xAF79, 0xAF80, 0xAF84, 0xAF88, 0xAF90, 0xAF91, 0xAF95, /* 0xD0 */
+ 0xAF9C, 0xAFB8, 0xAFB9, 0xAFBC, 0xAFC0, 0xAFC7, 0xAFC8, 0xAFC9, /* 0xD0 */
+ 0xAFCB, 0xAFCD, 0xAFCE, 0xAFD4, 0xAFDC, 0xAFE8, 0xAFE9, 0xAFF0, /* 0xE0 */
+ 0xAFF1, 0xAFF4, 0xAFF8, 0xB000, 0xB001, 0xB004, 0xB00C, 0xB010, /* 0xE0 */
+ 0xB014, 0xB01C, 0xB01D, 0xB028, 0xB044, 0xB045, 0xB048, 0xB04A, /* 0xF0 */
+ 0xB04C, 0xB04E, 0xB053, 0xB054, 0xB055, 0xB057, 0xB059 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFCC, 0xCFCD, 0xCFCE, 0xCFCF, 0xCFD0, 0xCFD1, 0xCFD2, /* 0x40 */
+ 0xCFD3, 0xCFD4, 0xCFD5, 0xCFD6, 0xCFD7, 0xCFD8, 0xCFD9, 0xCFDA, /* 0x40 */
+ 0xCFDB, 0xCFDC, 0xCFDD, 0xCFDE, 0xCFDF, 0xCFE2, 0xCFE3, 0xCFE5, /* 0x50 */
+ 0xCFE6, 0xCFE7, 0xCFE9, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCFEA, 0xCFEB, 0xCFEC, 0xCFED, 0xCFEE, 0xCFEF, 0xCFF2, /* 0x60 */
+ 0xCFF4, 0xCFF6, 0xCFF7, 0xCFF8, 0xCFF9, 0xCFFA, 0xCFFB, 0xCFFD, /* 0x60 */
+ 0xCFFE, 0xCFFF, 0xD001, 0xD002, 0xD003, 0xD005, 0xD006, 0xD007, /* 0x70 */
+ 0xD008, 0xD009, 0xD00A, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD00B, 0xD00C, 0xD00D, 0xD00E, 0xD00F, 0xD010, 0xD012, /* 0x80 */
+ 0xD013, 0xD014, 0xD015, 0xD016, 0xD017, 0xD019, 0xD01A, 0xD01B, /* 0x80 */
+ 0xD01C, 0xD01D, 0xD01E, 0xD01F, 0xD020, 0xD021, 0xD022, 0xD023, /* 0x90 */
+ 0xD024, 0xD025, 0xD026, 0xD027, 0xD028, 0xD029, 0xD02A, 0xD02B, /* 0x90 */
+ 0xD02C, 0xB05D, 0xB07C, 0xB07D, 0xB080, 0xB084, 0xB08C, 0xB08D, /* 0xA0 */
+ 0xB08F, 0xB091, 0xB098, 0xB099, 0xB09A, 0xB09C, 0xB09F, 0xB0A0, /* 0xA0 */
+ 0xB0A1, 0xB0A2, 0xB0A8, 0xB0A9, 0xB0AB, 0xB0AC, 0xB0AD, 0xB0AE, /* 0xB0 */
+ 0xB0AF, 0xB0B1, 0xB0B3, 0xB0B4, 0xB0B5, 0xB0B8, 0xB0BC, 0xB0C4, /* 0xB0 */
+ 0xB0C5, 0xB0C7, 0xB0C8, 0xB0C9, 0xB0D0, 0xB0D1, 0xB0D4, 0xB0D8, /* 0xC0 */
+ 0xB0E0, 0xB0E5, 0xB108, 0xB109, 0xB10B, 0xB10C, 0xB110, 0xB112, /* 0xC0 */
+ 0xB113, 0xB118, 0xB119, 0xB11B, 0xB11C, 0xB11D, 0xB123, 0xB124, /* 0xD0 */
+ 0xB125, 0xB128, 0xB12C, 0xB134, 0xB135, 0xB137, 0xB138, 0xB139, /* 0xD0 */
+ 0xB140, 0xB141, 0xB144, 0xB148, 0xB150, 0xB151, 0xB154, 0xB155, /* 0xE0 */
+ 0xB158, 0xB15C, 0xB160, 0xB178, 0xB179, 0xB17C, 0xB180, 0xB182, /* 0xE0 */
+ 0xB188, 0xB189, 0xB18B, 0xB18D, 0xB192, 0xB193, 0xB194, 0xB198, /* 0xF0 */
+ 0xB19C, 0xB1A8, 0xB1CC, 0xB1D0, 0xB1D4, 0xB1DC, 0xB1DD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD02E, 0xD02F, 0xD030, 0xD031, 0xD032, 0xD033, 0xD036, /* 0x40 */
+ 0xD037, 0xD039, 0xD03A, 0xD03B, 0xD03D, 0xD03E, 0xD03F, 0xD040, /* 0x40 */
+ 0xD041, 0xD042, 0xD043, 0xD046, 0xD048, 0xD04A, 0xD04B, 0xD04C, /* 0x50 */
+ 0xD04D, 0xD04E, 0xD04F, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD051, 0xD052, 0xD053, 0xD055, 0xD056, 0xD057, 0xD059, /* 0x60 */
+ 0xD05A, 0xD05B, 0xD05C, 0xD05D, 0xD05E, 0xD05F, 0xD061, 0xD062, /* 0x60 */
+ 0xD063, 0xD064, 0xD065, 0xD066, 0xD067, 0xD068, 0xD069, 0xD06A, /* 0x70 */
+ 0xD06B, 0xD06E, 0xD06F, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD071, 0xD072, 0xD073, 0xD075, 0xD076, 0xD077, 0xD078, /* 0x80 */
+ 0xD079, 0xD07A, 0xD07B, 0xD07E, 0xD07F, 0xD080, 0xD082, 0xD083, /* 0x80 */
+ 0xD084, 0xD085, 0xD086, 0xD087, 0xD088, 0xD089, 0xD08A, 0xD08B, /* 0x90 */
+ 0xD08C, 0xD08D, 0xD08E, 0xD08F, 0xD090, 0xD091, 0xD092, 0xD093, /* 0x90 */
+ 0xD094, 0xB1DF, 0xB1E8, 0xB1E9, 0xB1EC, 0xB1F0, 0xB1F9, 0xB1FB, /* 0xA0 */
+ 0xB1FD, 0xB204, 0xB205, 0xB208, 0xB20B, 0xB20C, 0xB214, 0xB215, /* 0xA0 */
+ 0xB217, 0xB219, 0xB220, 0xB234, 0xB23C, 0xB258, 0xB25C, 0xB260, /* 0xB0 */
+ 0xB268, 0xB269, 0xB274, 0xB275, 0xB27C, 0xB284, 0xB285, 0xB289, /* 0xB0 */
+ 0xB290, 0xB291, 0xB294, 0xB298, 0xB299, 0xB29A, 0xB2A0, 0xB2A1, /* 0xC0 */
+ 0xB2A3, 0xB2A5, 0xB2A6, 0xB2AA, 0xB2AC, 0xB2B0, 0xB2B4, 0xB2C8, /* 0xC0 */
+ 0xB2C9, 0xB2CC, 0xB2D0, 0xB2D2, 0xB2D8, 0xB2D9, 0xB2DB, 0xB2DD, /* 0xD0 */
+ 0xB2E2, 0xB2E4, 0xB2E5, 0xB2E6, 0xB2E8, 0xB2EB, 0xB2EC, 0xB2ED, /* 0xD0 */
+ 0xB2EE, 0xB2EF, 0xB2F3, 0xB2F4, 0xB2F5, 0xB2F7, 0xB2F8, 0xB2F9, /* 0xE0 */
+ 0xB2FA, 0xB2FB, 0xB2FF, 0xB300, 0xB301, 0xB304, 0xB308, 0xB310, /* 0xE0 */
+ 0xB311, 0xB313, 0xB314, 0xB315, 0xB31C, 0xB354, 0xB355, 0xB356, /* 0xF0 */
+ 0xB358, 0xB35B, 0xB35C, 0xB35E, 0xB35F, 0xB364, 0xB365 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD095, 0xD096, 0xD097, 0xD098, 0xD099, 0xD09A, 0xD09B, /* 0x40 */
+ 0xD09C, 0xD09D, 0xD09E, 0xD09F, 0xD0A0, 0xD0A1, 0xD0A2, 0xD0A3, /* 0x40 */
+ 0xD0A6, 0xD0A7, 0xD0A9, 0xD0AA, 0xD0AB, 0xD0AD, 0xD0AE, 0xD0AF, /* 0x50 */
+ 0xD0B0, 0xD0B1, 0xD0B2, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD0B3, 0xD0B6, 0xD0B8, 0xD0BA, 0xD0BB, 0xD0BC, 0xD0BD, /* 0x60 */
+ 0xD0BE, 0xD0BF, 0xD0C2, 0xD0C3, 0xD0C5, 0xD0C6, 0xD0C7, 0xD0CA, /* 0x60 */
+ 0xD0CB, 0xD0CC, 0xD0CD, 0xD0CE, 0xD0CF, 0xD0D2, 0xD0D6, 0xD0D7, /* 0x70 */
+ 0xD0D8, 0xD0D9, 0xD0DA, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD0DB, 0xD0DE, 0xD0DF, 0xD0E1, 0xD0E2, 0xD0E3, 0xD0E5, /* 0x80 */
+ 0xD0E6, 0xD0E7, 0xD0E8, 0xD0E9, 0xD0EA, 0xD0EB, 0xD0EE, 0xD0F2, /* 0x80 */
+ 0xD0F3, 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0xD0F9, 0xD0FA, 0xD0FB, /* 0x90 */
+ 0xD0FC, 0xD0FD, 0xD0FE, 0xD0FF, 0xD100, 0xD101, 0xD102, 0xD103, /* 0x90 */
+ 0xD104, 0xB367, 0xB369, 0xB36B, 0xB36E, 0xB370, 0xB371, 0xB374, /* 0xA0 */
+ 0xB378, 0xB380, 0xB381, 0xB383, 0xB384, 0xB385, 0xB38C, 0xB390, /* 0xA0 */
+ 0xB394, 0xB3A0, 0xB3A1, 0xB3A8, 0xB3AC, 0xB3C4, 0xB3C5, 0xB3C8, /* 0xB0 */
+ 0xB3CB, 0xB3CC, 0xB3CE, 0xB3D0, 0xB3D4, 0xB3D5, 0xB3D7, 0xB3D9, /* 0xB0 */
+ 0xB3DB, 0xB3DD, 0xB3E0, 0xB3E4, 0xB3E8, 0xB3FC, 0xB410, 0xB418, /* 0xC0 */
+ 0xB41C, 0xB420, 0xB428, 0xB429, 0xB42B, 0xB434, 0xB450, 0xB451, /* 0xC0 */
+ 0xB454, 0xB458, 0xB460, 0xB461, 0xB463, 0xB465, 0xB46C, 0xB480, /* 0xD0 */
+ 0xB488, 0xB49D, 0xB4A4, 0xB4A8, 0xB4AC, 0xB4B5, 0xB4B7, 0xB4B9, /* 0xD0 */
+ 0xB4C0, 0xB4C4, 0xB4C8, 0xB4D0, 0xB4D5, 0xB4DC, 0xB4DD, 0xB4E0, /* 0xE0 */
+ 0xB4E3, 0xB4E4, 0xB4E6, 0xB4EC, 0xB4ED, 0xB4EF, 0xB4F1, 0xB4F8, /* 0xE0 */
+ 0xB514, 0xB515, 0xB518, 0xB51B, 0xB51C, 0xB524, 0xB525, 0xB527, /* 0xF0 */
+ 0xB528, 0xB529, 0xB52A, 0xB530, 0xB531, 0xB534, 0xB538 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD105, 0xD106, 0xD107, 0xD108, 0xD109, 0xD10A, 0xD10B, /* 0x40 */
+ 0xD10C, 0xD10E, 0xD10F, 0xD110, 0xD111, 0xD112, 0xD113, 0xD114, /* 0x40 */
+ 0xD115, 0xD116, 0xD117, 0xD118, 0xD119, 0xD11A, 0xD11B, 0xD11C, /* 0x50 */
+ 0xD11D, 0xD11E, 0xD11F, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD120, 0xD121, 0xD122, 0xD123, 0xD124, 0xD125, 0xD126, /* 0x60 */
+ 0xD127, 0xD128, 0xD129, 0xD12A, 0xD12B, 0xD12C, 0xD12D, 0xD12E, /* 0x60 */
+ 0xD12F, 0xD132, 0xD133, 0xD135, 0xD136, 0xD137, 0xD139, 0xD13B, /* 0x70 */
+ 0xD13C, 0xD13D, 0xD13E, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD13F, 0xD142, 0xD146, 0xD147, 0xD148, 0xD149, 0xD14A, /* 0x80 */
+ 0xD14B, 0xD14E, 0xD14F, 0xD151, 0xD152, 0xD153, 0xD155, 0xD156, /* 0x80 */
+ 0xD157, 0xD158, 0xD159, 0xD15A, 0xD15B, 0xD15E, 0xD160, 0xD162, /* 0x90 */
+ 0xD163, 0xD164, 0xD165, 0xD166, 0xD167, 0xD169, 0xD16A, 0xD16B, /* 0x90 */
+ 0xD16D, 0xB540, 0xB541, 0xB543, 0xB544, 0xB545, 0xB54B, 0xB54C, /* 0xA0 */
+ 0xB54D, 0xB550, 0xB554, 0xB55C, 0xB55D, 0xB55F, 0xB560, 0xB561, /* 0xA0 */
+ 0xB5A0, 0xB5A1, 0xB5A4, 0xB5A8, 0xB5AA, 0xB5AB, 0xB5B0, 0xB5B1, /* 0xB0 */
+ 0xB5B3, 0xB5B4, 0xB5B5, 0xB5BB, 0xB5BC, 0xB5BD, 0xB5C0, 0xB5C4, /* 0xB0 */
+ 0xB5CC, 0xB5CD, 0xB5CF, 0xB5D0, 0xB5D1, 0xB5D8, 0xB5EC, 0xB610, /* 0xC0 */
+ 0xB611, 0xB614, 0xB618, 0xB625, 0xB62C, 0xB634, 0xB648, 0xB664, /* 0xC0 */
+ 0xB668, 0xB69C, 0xB69D, 0xB6A0, 0xB6A4, 0xB6AB, 0xB6AC, 0xB6B1, /* 0xD0 */
+ 0xB6D4, 0xB6F0, 0xB6F4, 0xB6F8, 0xB700, 0xB701, 0xB705, 0xB728, /* 0xD0 */
+ 0xB729, 0xB72C, 0xB72F, 0xB730, 0xB738, 0xB739, 0xB73B, 0xB744, /* 0xE0 */
+ 0xB748, 0xB74C, 0xB754, 0xB755, 0xB760, 0xB764, 0xB768, 0xB770, /* 0xE0 */
+ 0xB771, 0xB773, 0xB775, 0xB77C, 0xB77D, 0xB780, 0xB784, 0xB78C, /* 0xF0 */
+ 0xB78D, 0xB78F, 0xB790, 0xB791, 0xB792, 0xB796, 0xB797 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD16E, 0xD16F, 0xD170, 0xD171, 0xD172, 0xD173, 0xD174, /* 0x40 */
+ 0xD175, 0xD176, 0xD177, 0xD178, 0xD179, 0xD17A, 0xD17B, 0xD17D, /* 0x40 */
+ 0xD17E, 0xD17F, 0xD180, 0xD181, 0xD182, 0xD183, 0xD185, 0xD186, /* 0x50 */
+ 0xD187, 0xD189, 0xD18A, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD18B, 0xD18C, 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xD191, /* 0x60 */
+ 0xD192, 0xD193, 0xD194, 0xD195, 0xD196, 0xD197, 0xD198, 0xD199, /* 0x60 */
+ 0xD19A, 0xD19B, 0xD19C, 0xD19D, 0xD19E, 0xD19F, 0xD1A2, 0xD1A3, /* 0x70 */
+ 0xD1A5, 0xD1A6, 0xD1A7, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, 0xD1AF, /* 0x80 */
+ 0xD1B2, 0xD1B4, 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, 0xD1BB, 0xD1BD, /* 0x80 */
+ 0xD1BE, 0xD1BF, 0xD1C1, 0xD1C2, 0xD1C3, 0xD1C4, 0xD1C5, 0xD1C6, /* 0x90 */
+ 0xD1C7, 0xD1C8, 0xD1C9, 0xD1CA, 0xD1CB, 0xD1CC, 0xD1CD, 0xD1CE, /* 0x90 */
+ 0xD1CF, 0xB798, 0xB799, 0xB79C, 0xB7A0, 0xB7A8, 0xB7A9, 0xB7AB, /* 0xA0 */
+ 0xB7AC, 0xB7AD, 0xB7B4, 0xB7B5, 0xB7B8, 0xB7C7, 0xB7C9, 0xB7EC, /* 0xA0 */
+ 0xB7ED, 0xB7F0, 0xB7F4, 0xB7FC, 0xB7FD, 0xB7FF, 0xB800, 0xB801, /* 0xB0 */
+ 0xB807, 0xB808, 0xB809, 0xB80C, 0xB810, 0xB818, 0xB819, 0xB81B, /* 0xB0 */
+ 0xB81D, 0xB824, 0xB825, 0xB828, 0xB82C, 0xB834, 0xB835, 0xB837, /* 0xC0 */
+ 0xB838, 0xB839, 0xB840, 0xB844, 0xB851, 0xB853, 0xB85C, 0xB85D, /* 0xC0 */
+ 0xB860, 0xB864, 0xB86C, 0xB86D, 0xB86F, 0xB871, 0xB878, 0xB87C, /* 0xD0 */
+ 0xB88D, 0xB8A8, 0xB8B0, 0xB8B4, 0xB8B8, 0xB8C0, 0xB8C1, 0xB8C3, /* 0xD0 */
+ 0xB8C5, 0xB8CC, 0xB8D0, 0xB8D4, 0xB8DD, 0xB8DF, 0xB8E1, 0xB8E8, /* 0xE0 */
+ 0xB8E9, 0xB8EC, 0xB8F0, 0xB8F8, 0xB8F9, 0xB8FB, 0xB8FD, 0xB904, /* 0xE0 */
+ 0xB918, 0xB920, 0xB93C, 0xB93D, 0xB940, 0xB944, 0xB94C, 0xB94F, /* 0xF0 */
+ 0xB951, 0xB958, 0xB959, 0xB95C, 0xB960, 0xB968, 0xB969 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1D0, 0xD1D1, 0xD1D2, 0xD1D3, 0xD1D4, 0xD1D5, 0xD1D6, /* 0x40 */
+ 0xD1D7, 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD, 0xD1DE, 0xD1DF, /* 0x40 */
+ 0xD1E0, 0xD1E1, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6, 0xD1E7, /* 0x50 */
+ 0xD1E8, 0xD1E9, 0xD1EA, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD1EB, 0xD1EC, 0xD1ED, 0xD1EE, 0xD1EF, 0xD1F0, 0xD1F1, /* 0x60 */
+ 0xD1F2, 0xD1F3, 0xD1F5, 0xD1F6, 0xD1F7, 0xD1F9, 0xD1FA, 0xD1FB, /* 0x60 */
+ 0xD1FC, 0xD1FD, 0xD1FE, 0xD1FF, 0xD200, 0xD201, 0xD202, 0xD203, /* 0x70 */
+ 0xD204, 0xD205, 0xD206, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD208, 0xD20A, 0xD20B, 0xD20C, 0xD20D, 0xD20E, 0xD20F, /* 0x80 */
+ 0xD211, 0xD212, 0xD213, 0xD214, 0xD215, 0xD216, 0xD217, 0xD218, /* 0x80 */
+ 0xD219, 0xD21A, 0xD21B, 0xD21C, 0xD21D, 0xD21E, 0xD21F, 0xD220, /* 0x90 */
+ 0xD221, 0xD222, 0xD223, 0xD224, 0xD225, 0xD226, 0xD227, 0xD228, /* 0x90 */
+ 0xD229, 0xB96B, 0xB96D, 0xB974, 0xB975, 0xB978, 0xB97C, 0xB984, /* 0xA0 */
+ 0xB985, 0xB987, 0xB989, 0xB98A, 0xB98D, 0xB98E, 0xB9AC, 0xB9AD, /* 0xA0 */
+ 0xB9B0, 0xB9B4, 0xB9BC, 0xB9BD, 0xB9BF, 0xB9C1, 0xB9C8, 0xB9C9, /* 0xB0 */
+ 0xB9CC, 0xB9CE, 0xB9CF, 0xB9D0, 0xB9D1, 0xB9D2, 0xB9D8, 0xB9D9, /* 0xB0 */
+ 0xB9DB, 0xB9DD, 0xB9DE, 0xB9E1, 0xB9E3, 0xB9E4, 0xB9E5, 0xB9E8, /* 0xC0 */
+ 0xB9EC, 0xB9F4, 0xB9F5, 0xB9F7, 0xB9F8, 0xB9F9, 0xB9FA, 0xBA00, /* 0xC0 */
+ 0xBA01, 0xBA08, 0xBA15, 0xBA38, 0xBA39, 0xBA3C, 0xBA40, 0xBA42, /* 0xD0 */
+ 0xBA48, 0xBA49, 0xBA4B, 0xBA4D, 0xBA4E, 0xBA53, 0xBA54, 0xBA55, /* 0xD0 */
+ 0xBA58, 0xBA5C, 0xBA64, 0xBA65, 0xBA67, 0xBA68, 0xBA69, 0xBA70, /* 0xE0 */
+ 0xBA71, 0xBA74, 0xBA78, 0xBA83, 0xBA84, 0xBA85, 0xBA87, 0xBA8C, /* 0xE0 */
+ 0xBAA8, 0xBAA9, 0xBAAB, 0xBAAC, 0xBAB0, 0xBAB2, 0xBAB8, 0xBAB9, /* 0xF0 */
+ 0xBABB, 0xBABD, 0xBAC4, 0xBAC8, 0xBAD8, 0xBAD9, 0xBAFC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_B9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD22A, 0xD22B, 0xD22E, 0xD22F, 0xD231, 0xD232, 0xD233, /* 0x40 */
+ 0xD235, 0xD236, 0xD237, 0xD238, 0xD239, 0xD23A, 0xD23B, 0xD23E, /* 0x40 */
+ 0xD240, 0xD242, 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, 0xD249, /* 0x50 */
+ 0xD24A, 0xD24B, 0xD24C, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD24D, 0xD24E, 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, /* 0x60 */
+ 0xD254, 0xD255, 0xD256, 0xD257, 0xD258, 0xD259, 0xD25A, 0xD25B, /* 0x60 */
+ 0xD25D, 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, 0xD265, /* 0x70 */
+ 0xD266, 0xD267, 0xD268, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD269, 0xD26A, 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, /* 0x80 */
+ 0xD270, 0xD271, 0xD272, 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, /* 0x80 */
+ 0xD278, 0xD279, 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD27E, 0xD27F, /* 0x90 */
+ 0xD282, 0xD283, 0xD285, 0xD286, 0xD287, 0xD289, 0xD28A, 0xD28B, /* 0x90 */
+ 0xD28C, 0xBB00, 0xBB04, 0xBB0D, 0xBB0F, 0xBB11, 0xBB18, 0xBB1C, /* 0xA0 */
+ 0xBB20, 0xBB29, 0xBB2B, 0xBB34, 0xBB35, 0xBB36, 0xBB38, 0xBB3B, /* 0xA0 */
+ 0xBB3C, 0xBB3D, 0xBB3E, 0xBB44, 0xBB45, 0xBB47, 0xBB49, 0xBB4D, /* 0xB0 */
+ 0xBB4F, 0xBB50, 0xBB54, 0xBB58, 0xBB61, 0xBB63, 0xBB6C, 0xBB88, /* 0xB0 */
+ 0xBB8C, 0xBB90, 0xBBA4, 0xBBA8, 0xBBAC, 0xBBB4, 0xBBB7, 0xBBC0, /* 0xC0 */
+ 0xBBC4, 0xBBC8, 0xBBD0, 0xBBD3, 0xBBF8, 0xBBF9, 0xBBFC, 0xBBFF, /* 0xC0 */
+ 0xBC00, 0xBC02, 0xBC08, 0xBC09, 0xBC0B, 0xBC0C, 0xBC0D, 0xBC0F, /* 0xD0 */
+ 0xBC11, 0xBC14, 0xBC15, 0xBC16, 0xBC17, 0xBC18, 0xBC1B, 0xBC1C, /* 0xD0 */
+ 0xBC1D, 0xBC1E, 0xBC1F, 0xBC24, 0xBC25, 0xBC27, 0xBC29, 0xBC2D, /* 0xE0 */
+ 0xBC30, 0xBC31, 0xBC34, 0xBC38, 0xBC40, 0xBC41, 0xBC43, 0xBC44, /* 0xE0 */
+ 0xBC45, 0xBC49, 0xBC4C, 0xBC4D, 0xBC50, 0xBC5D, 0xBC84, 0xBC85, /* 0xF0 */
+ 0xBC88, 0xBC8B, 0xBC8C, 0xBC8E, 0xBC94, 0xBC95, 0xBC97 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_BA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD28D, 0xD28E, 0xD28F, 0xD292, 0xD293, 0xD294, 0xD296, /* 0x40 */
+ 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29D, 0xD29E, 0xD29F, /* 0x40 */
+ 0xD2A1, 0xD2A2, 0xD2A3, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, 0xD2A9, /* 0x50 */
+ 0xD2AA, 0xD2AB, 0xD2AD, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD2AE, 0xD2AF, 0xD2B0, 0xD2B2, 0xD2B3, 0xD2B4, 0xD2B5, /* 0x60 */
+ 0xD2B6, 0xD2B7, 0xD2BA, 0xD2BB, 0xD2BD, 0xD2BE, 0xD2C1, 0xD2C3, /* 0x60 */
+ 0xD2C4, 0xD2C5, 0xD2C6, 0xD2C7, 0xD2CA, 0xD2CC, 0xD2CD, 0xD2CE, /* 0x70 */
+ 0xD2CF, 0xD2D0, 0xD2D1, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD2D2, 0xD2D3, 0xD2D5, 0xD2D6, 0xD2D7, 0xD2D9, 0xD2DA, /* 0x80 */
+ 0xD2DB, 0xD2DD, 0xD2DE, 0xD2DF, 0xD2E0, 0xD2E1, 0xD2E2, 0xD2E3, /* 0x80 */
+ 0xD2E6, 0xD2E7, 0xD2E8, 0xD2E9, 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, /* 0x90 */
+ 0xD2EE, 0xD2EF, 0xD2F2, 0xD2F3, 0xD2F5, 0xD2F6, 0xD2F7, 0xD2F9, /* 0x90 */
+ 0xD2FA, 0xBC99, 0xBC9A, 0xBCA0, 0xBCA1, 0xBCA4, 0xBCA7, 0xBCA8, /* 0xA0 */
+ 0xBCB0, 0xBCB1, 0xBCB3, 0xBCB4, 0xBCB5, 0xBCBC, 0xBCBD, 0xBCC0, /* 0xA0 */
+ 0xBCC4, 0xBCCD, 0xBCCF, 0xBCD0, 0xBCD1, 0xBCD5, 0xBCD8, 0xBCDC, /* 0xB0 */
+ 0xBCF4, 0xBCF5, 0xBCF6, 0xBCF8, 0xBCFC, 0xBD04, 0xBD05, 0xBD07, /* 0xB0 */
+ 0xBD09, 0xBD10, 0xBD14, 0xBD24, 0xBD2C, 0xBD40, 0xBD48, 0xBD49, /* 0xC0 */
+ 0xBD4C, 0xBD50, 0xBD58, 0xBD59, 0xBD64, 0xBD68, 0xBD80, 0xBD81, /* 0xC0 */
+ 0xBD84, 0xBD87, 0xBD88, 0xBD89, 0xBD8A, 0xBD90, 0xBD91, 0xBD93, /* 0xD0 */
+ 0xBD95, 0xBD99, 0xBD9A, 0xBD9C, 0xBDA4, 0xBDB0, 0xBDB8, 0xBDD4, /* 0xD0 */
+ 0xBDD5, 0xBDD8, 0xBDDC, 0xBDE9, 0xBDF0, 0xBDF4, 0xBDF8, 0xBE00, /* 0xE0 */
+ 0xBE03, 0xBE05, 0xBE0C, 0xBE0D, 0xBE10, 0xBE14, 0xBE1C, 0xBE1D, /* 0xE0 */
+ 0xBE1F, 0xBE44, 0xBE45, 0xBE48, 0xBE4C, 0xBE4E, 0xBE54, 0xBE55, /* 0xF0 */
+ 0xBE57, 0xBE59, 0xBE5A, 0xBE5B, 0xBE60, 0xBE61, 0xBE64 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_BB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2FB, 0xD2FC, 0xD2FD, 0xD2FE, 0xD2FF, 0xD302, 0xD304, /* 0x40 */
+ 0xD306, 0xD307, 0xD308, 0xD309, 0xD30A, 0xD30B, 0xD30F, 0xD311, /* 0x40 */
+ 0xD312, 0xD313, 0xD315, 0xD317, 0xD318, 0xD319, 0xD31A, 0xD31B, /* 0x50 */
+ 0xD31E, 0xD322, 0xD323, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD324, 0xD326, 0xD327, 0xD32A, 0xD32B, 0xD32D, 0xD32E, /* 0x60 */
+ 0xD32F, 0xD331, 0xD332, 0xD333, 0xD334, 0xD335, 0xD336, 0xD337, /* 0x60 */
+ 0xD33A, 0xD33E, 0xD33F, 0xD340, 0xD341, 0xD342, 0xD343, 0xD346, /* 0x70 */
+ 0xD347, 0xD348, 0xD349, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD34A, 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F, 0xD350, /* 0x80 */
+ 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, 0xD356, 0xD357, 0xD358, /* 0x80 */
+ 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, 0xD35E, 0xD35F, 0xD360, /* 0x90 */
+ 0xD361, 0xD362, 0xD363, 0xD364, 0xD365, 0xD366, 0xD367, 0xD368, /* 0x90 */
+ 0xD369, 0xBE68, 0xBE6A, 0xBE70, 0xBE71, 0xBE73, 0xBE74, 0xBE75, /* 0xA0 */
+ 0xBE7B, 0xBE7C, 0xBE7D, 0xBE80, 0xBE84, 0xBE8C, 0xBE8D, 0xBE8F, /* 0xA0 */
+ 0xBE90, 0xBE91, 0xBE98, 0xBE99, 0xBEA8, 0xBED0, 0xBED1, 0xBED4, /* 0xB0 */
+ 0xBED7, 0xBED8, 0xBEE0, 0xBEE3, 0xBEE4, 0xBEE5, 0xBEEC, 0xBF01, /* 0xB0 */
+ 0xBF08, 0xBF09, 0xBF18, 0xBF19, 0xBF1B, 0xBF1C, 0xBF1D, 0xBF40, /* 0xC0 */
+ 0xBF41, 0xBF44, 0xBF48, 0xBF50, 0xBF51, 0xBF55, 0xBF94, 0xBFB0, /* 0xC0 */
+ 0xBFC5, 0xBFCC, 0xBFCD, 0xBFD0, 0xBFD4, 0xBFDC, 0xBFDF, 0xBFE1, /* 0xD0 */
+ 0xC03C, 0xC051, 0xC058, 0xC05C, 0xC060, 0xC068, 0xC069, 0xC090, /* 0xD0 */
+ 0xC091, 0xC094, 0xC098, 0xC0A0, 0xC0A1, 0xC0A3, 0xC0A5, 0xC0AC, /* 0xE0 */
+ 0xC0AD, 0xC0AF, 0xC0B0, 0xC0B3, 0xC0B4, 0xC0B5, 0xC0B6, 0xC0BC, /* 0xE0 */
+ 0xC0BD, 0xC0BF, 0xC0C0, 0xC0C1, 0xC0C5, 0xC0C8, 0xC0C9, 0xC0CC, /* 0xF0 */
+ 0xC0D0, 0xC0D8, 0xC0D9, 0xC0DB, 0xC0DC, 0xC0DD, 0xC0E4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_BC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD36A, 0xD36B, 0xD36C, 0xD36D, 0xD36E, 0xD36F, 0xD370, /* 0x40 */
+ 0xD371, 0xD372, 0xD373, 0xD374, 0xD375, 0xD376, 0xD377, 0xD378, /* 0x40 */
+ 0xD379, 0xD37A, 0xD37B, 0xD37E, 0xD37F, 0xD381, 0xD382, 0xD383, /* 0x50 */
+ 0xD385, 0xD386, 0xD387, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD388, 0xD389, 0xD38A, 0xD38B, 0xD38E, 0xD392, 0xD393, /* 0x60 */
+ 0xD394, 0xD395, 0xD396, 0xD397, 0xD39A, 0xD39B, 0xD39D, 0xD39E, /* 0x60 */
+ 0xD39F, 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4, 0xD3A5, 0xD3A6, 0xD3A7, /* 0x70 */
+ 0xD3AA, 0xD3AC, 0xD3AE, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD3AF, 0xD3B0, 0xD3B1, 0xD3B2, 0xD3B3, 0xD3B5, 0xD3B6, /* 0x80 */
+ 0xD3B7, 0xD3B9, 0xD3BA, 0xD3BB, 0xD3BD, 0xD3BE, 0xD3BF, 0xD3C0, /* 0x80 */
+ 0xD3C1, 0xD3C2, 0xD3C3, 0xD3C6, 0xD3C7, 0xD3CA, 0xD3CB, 0xD3CC, /* 0x90 */
+ 0xD3CD, 0xD3CE, 0xD3CF, 0xD3D1, 0xD3D2, 0xD3D3, 0xD3D4, 0xD3D5, /* 0x90 */
+ 0xD3D6, 0xC0E5, 0xC0E8, 0xC0EC, 0xC0F4, 0xC0F5, 0xC0F7, 0xC0F9, /* 0xA0 */
+ 0xC100, 0xC104, 0xC108, 0xC110, 0xC115, 0xC11C, 0xC11D, 0xC11E, /* 0xA0 */
+ 0xC11F, 0xC120, 0xC123, 0xC124, 0xC126, 0xC127, 0xC12C, 0xC12D, /* 0xB0 */
+ 0xC12F, 0xC130, 0xC131, 0xC136, 0xC138, 0xC139, 0xC13C, 0xC140, /* 0xB0 */
+ 0xC148, 0xC149, 0xC14B, 0xC14C, 0xC14D, 0xC154, 0xC155, 0xC158, /* 0xC0 */
+ 0xC15C, 0xC164, 0xC165, 0xC167, 0xC168, 0xC169, 0xC170, 0xC174, /* 0xC0 */
+ 0xC178, 0xC185, 0xC18C, 0xC18D, 0xC18E, 0xC190, 0xC194, 0xC196, /* 0xD0 */
+ 0xC19C, 0xC19D, 0xC19F, 0xC1A1, 0xC1A5, 0xC1A8, 0xC1A9, 0xC1AC, /* 0xD0 */
+ 0xC1B0, 0xC1BD, 0xC1C4, 0xC1C8, 0xC1CC, 0xC1D4, 0xC1D7, 0xC1D8, /* 0xE0 */
+ 0xC1E0, 0xC1E4, 0xC1E8, 0xC1F0, 0xC1F1, 0xC1F3, 0xC1FC, 0xC1FD, /* 0xE0 */
+ 0xC200, 0xC204, 0xC20C, 0xC20D, 0xC20F, 0xC211, 0xC218, 0xC219, /* 0xF0 */
+ 0xC21C, 0xC21F, 0xC220, 0xC228, 0xC229, 0xC22B, 0xC22D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_BD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD3D7, 0xD3D9, 0xD3DA, 0xD3DB, 0xD3DC, 0xD3DD, 0xD3DE, /* 0x40 */
+ 0xD3DF, 0xD3E0, 0xD3E2, 0xD3E4, 0xD3E5, 0xD3E6, 0xD3E7, 0xD3E8, /* 0x40 */
+ 0xD3E9, 0xD3EA, 0xD3EB, 0xD3EE, 0xD3EF, 0xD3F1, 0xD3F2, 0xD3F3, /* 0x50 */
+ 0xD3F5, 0xD3F6, 0xD3F7, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD3F8, 0xD3F9, 0xD3FA, 0xD3FB, 0xD3FE, 0xD400, 0xD402, /* 0x60 */
+ 0xD403, 0xD404, 0xD405, 0xD406, 0xD407, 0xD409, 0xD40A, 0xD40B, /* 0x60 */
+ 0xD40C, 0xD40D, 0xD40E, 0xD40F, 0xD410, 0xD411, 0xD412, 0xD413, /* 0x70 */
+ 0xD414, 0xD415, 0xD416, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD417, 0xD418, 0xD419, 0xD41A, 0xD41B, 0xD41C, 0xD41E, /* 0x80 */
+ 0xD41F, 0xD420, 0xD421, 0xD422, 0xD423, 0xD424, 0xD425, 0xD426, /* 0x80 */
+ 0xD427, 0xD428, 0xD429, 0xD42A, 0xD42B, 0xD42C, 0xD42D, 0xD42E, /* 0x90 */
+ 0xD42F, 0xD430, 0xD431, 0xD432, 0xD433, 0xD434, 0xD435, 0xD436, /* 0x90 */
+ 0xD437, 0xC22F, 0xC231, 0xC232, 0xC234, 0xC248, 0xC250, 0xC251, /* 0xA0 */
+ 0xC254, 0xC258, 0xC260, 0xC265, 0xC26C, 0xC26D, 0xC270, 0xC274, /* 0xA0 */
+ 0xC27C, 0xC27D, 0xC27F, 0xC281, 0xC288, 0xC289, 0xC290, 0xC298, /* 0xB0 */
+ 0xC29B, 0xC29D, 0xC2A4, 0xC2A5, 0xC2A8, 0xC2AC, 0xC2AD, 0xC2B4, /* 0xB0 */
+ 0xC2B5, 0xC2B7, 0xC2B9, 0xC2DC, 0xC2DD, 0xC2E0, 0xC2E3, 0xC2E4, /* 0xC0 */
+ 0xC2EB, 0xC2EC, 0xC2ED, 0xC2EF, 0xC2F1, 0xC2F6, 0xC2F8, 0xC2F9, /* 0xC0 */
+ 0xC2FB, 0xC2FC, 0xC300, 0xC308, 0xC309, 0xC30C, 0xC30D, 0xC313, /* 0xD0 */
+ 0xC314, 0xC315, 0xC318, 0xC31C, 0xC324, 0xC325, 0xC328, 0xC329, /* 0xD0 */
+ 0xC345, 0xC368, 0xC369, 0xC36C, 0xC370, 0xC372, 0xC378, 0xC379, /* 0xE0 */
+ 0xC37C, 0xC37D, 0xC384, 0xC388, 0xC38C, 0xC3C0, 0xC3D8, 0xC3D9, /* 0xE0 */
+ 0xC3DC, 0xC3DF, 0xC3E0, 0xC3E2, 0xC3E8, 0xC3E9, 0xC3ED, 0xC3F4, /* 0xF0 */
+ 0xC3F5, 0xC3F8, 0xC408, 0xC410, 0xC424, 0xC42C, 0xC430 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_BE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD438, 0xD439, 0xD43A, 0xD43B, 0xD43C, 0xD43D, 0xD43E, /* 0x40 */
+ 0xD43F, 0xD441, 0xD442, 0xD443, 0xD445, 0xD446, 0xD447, 0xD448, /* 0x40 */
+ 0xD449, 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, 0xD44F, 0xD450, /* 0x50 */
+ 0xD451, 0xD452, 0xD453, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD454, 0xD455, 0xD456, 0xD457, 0xD458, 0xD459, 0xD45A, /* 0x60 */
+ 0xD45B, 0xD45D, 0xD45E, 0xD45F, 0xD461, 0xD462, 0xD463, 0xD465, /* 0x60 */
+ 0xD466, 0xD467, 0xD468, 0xD469, 0xD46A, 0xD46B, 0xD46C, 0xD46E, /* 0x70 */
+ 0xD470, 0xD471, 0xD472, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, 0xD47A, 0xD47B, /* 0x80 */
+ 0xD47D, 0xD47E, 0xD481, 0xD483, 0xD484, 0xD485, 0xD486, 0xD487, /* 0x80 */
+ 0xD48A, 0xD48C, 0xD48E, 0xD48F, 0xD490, 0xD491, 0xD492, 0xD493, /* 0x90 */
+ 0xD495, 0xD496, 0xD497, 0xD498, 0xD499, 0xD49A, 0xD49B, 0xD49C, /* 0x90 */
+ 0xD49D, 0xC434, 0xC43C, 0xC43D, 0xC448, 0xC464, 0xC465, 0xC468, /* 0xA0 */
+ 0xC46C, 0xC474, 0xC475, 0xC479, 0xC480, 0xC494, 0xC49C, 0xC4B8, /* 0xA0 */
+ 0xC4BC, 0xC4E9, 0xC4F0, 0xC4F1, 0xC4F4, 0xC4F8, 0xC4FA, 0xC4FF, /* 0xB0 */
+ 0xC500, 0xC501, 0xC50C, 0xC510, 0xC514, 0xC51C, 0xC528, 0xC529, /* 0xB0 */
+ 0xC52C, 0xC530, 0xC538, 0xC539, 0xC53B, 0xC53D, 0xC544, 0xC545, /* 0xC0 */
+ 0xC548, 0xC549, 0xC54A, 0xC54C, 0xC54D, 0xC54E, 0xC553, 0xC554, /* 0xC0 */
+ 0xC555, 0xC557, 0xC558, 0xC559, 0xC55D, 0xC55E, 0xC560, 0xC561, /* 0xD0 */
+ 0xC564, 0xC568, 0xC570, 0xC571, 0xC573, 0xC574, 0xC575, 0xC57C, /* 0xD0 */
+ 0xC57D, 0xC580, 0xC584, 0xC587, 0xC58C, 0xC58D, 0xC58F, 0xC591, /* 0xE0 */
+ 0xC595, 0xC597, 0xC598, 0xC59C, 0xC5A0, 0xC5A9, 0xC5B4, 0xC5B5, /* 0xE0 */
+ 0xC5B8, 0xC5B9, 0xC5BB, 0xC5BC, 0xC5BD, 0xC5BE, 0xC5C4, 0xC5C5, /* 0xF0 */
+ 0xC5C6, 0xC5C7, 0xC5C8, 0xC5C9, 0xC5CA, 0xC5CC, 0xC5CE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_BF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD49E, 0xD49F, 0xD4A0, 0xD4A1, 0xD4A2, 0xD4A3, 0xD4A4, /* 0x40 */
+ 0xD4A5, 0xD4A6, 0xD4A7, 0xD4A8, 0xD4AA, 0xD4AB, 0xD4AC, 0xD4AD, /* 0x40 */
+ 0xD4AE, 0xD4AF, 0xD4B0, 0xD4B1, 0xD4B2, 0xD4B3, 0xD4B4, 0xD4B5, /* 0x50 */
+ 0xD4B6, 0xD4B7, 0xD4B8, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD4B9, 0xD4BA, 0xD4BB, 0xD4BC, 0xD4BD, 0xD4BE, 0xD4BF, /* 0x60 */
+ 0xD4C0, 0xD4C1, 0xD4C2, 0xD4C3, 0xD4C4, 0xD4C5, 0xD4C6, 0xD4C7, /* 0x60 */
+ 0xD4C8, 0xD4C9, 0xD4CA, 0xD4CB, 0xD4CD, 0xD4CE, 0xD4CF, 0xD4D1, /* 0x70 */
+ 0xD4D2, 0xD4D3, 0xD4D5, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD4D6, 0xD4D7, 0xD4D8, 0xD4D9, 0xD4DA, 0xD4DB, 0xD4DD, /* 0x80 */
+ 0xD4DE, 0xD4E0, 0xD4E1, 0xD4E2, 0xD4E3, 0xD4E4, 0xD4E5, 0xD4E6, /* 0x80 */
+ 0xD4E7, 0xD4E9, 0xD4EA, 0xD4EB, 0xD4ED, 0xD4EE, 0xD4EF, 0xD4F1, /* 0x90 */
+ 0xD4F2, 0xD4F3, 0xD4F4, 0xD4F5, 0xD4F6, 0xD4F7, 0xD4F9, 0xD4FA, /* 0x90 */
+ 0xD4FC, 0xC5D0, 0xC5D1, 0xC5D4, 0xC5D8, 0xC5E0, 0xC5E1, 0xC5E3, /* 0xA0 */
+ 0xC5E5, 0xC5EC, 0xC5ED, 0xC5EE, 0xC5F0, 0xC5F4, 0xC5F6, 0xC5F7, /* 0xA0 */
+ 0xC5FC, 0xC5FD, 0xC5FE, 0xC5FF, 0xC600, 0xC601, 0xC605, 0xC606, /* 0xB0 */
+ 0xC607, 0xC608, 0xC60C, 0xC610, 0xC618, 0xC619, 0xC61B, 0xC61C, /* 0xB0 */
+ 0xC624, 0xC625, 0xC628, 0xC62C, 0xC62D, 0xC62E, 0xC630, 0xC633, /* 0xC0 */
+ 0xC634, 0xC635, 0xC637, 0xC639, 0xC63B, 0xC640, 0xC641, 0xC644, /* 0xC0 */
+ 0xC648, 0xC650, 0xC651, 0xC653, 0xC654, 0xC655, 0xC65C, 0xC65D, /* 0xD0 */
+ 0xC660, 0xC66C, 0xC66F, 0xC671, 0xC678, 0xC679, 0xC67C, 0xC680, /* 0xD0 */
+ 0xC688, 0xC689, 0xC68B, 0xC68D, 0xC694, 0xC695, 0xC698, 0xC69C, /* 0xE0 */
+ 0xC6A4, 0xC6A5, 0xC6A7, 0xC6A9, 0xC6B0, 0xC6B1, 0xC6B4, 0xC6B8, /* 0xE0 */
+ 0xC6B9, 0xC6BA, 0xC6C0, 0xC6C1, 0xC6C3, 0xC6C5, 0xC6CC, 0xC6CD, /* 0xF0 */
+ 0xC6D0, 0xC6D4, 0xC6DC, 0xC6DD, 0xC6E0, 0xC6E1, 0xC6E8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD4FE, 0xD4FF, 0xD500, 0xD501, 0xD502, 0xD503, 0xD505, /* 0x40 */
+ 0xD506, 0xD507, 0xD509, 0xD50A, 0xD50B, 0xD50D, 0xD50E, 0xD50F, /* 0x40 */
+ 0xD510, 0xD511, 0xD512, 0xD513, 0xD516, 0xD518, 0xD519, 0xD51A, /* 0x50 */
+ 0xD51B, 0xD51C, 0xD51D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD51E, 0xD51F, 0xD520, 0xD521, 0xD522, 0xD523, 0xD524, /* 0x60 */
+ 0xD525, 0xD526, 0xD527, 0xD528, 0xD529, 0xD52A, 0xD52B, 0xD52C, /* 0x60 */
+ 0xD52D, 0xD52E, 0xD52F, 0xD530, 0xD531, 0xD532, 0xD533, 0xD534, /* 0x70 */
+ 0xD535, 0xD536, 0xD537, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD538, 0xD539, 0xD53A, 0xD53B, 0xD53E, 0xD53F, 0xD541, /* 0x80 */
+ 0xD542, 0xD543, 0xD545, 0xD546, 0xD547, 0xD548, 0xD549, 0xD54A, /* 0x80 */
+ 0xD54B, 0xD54E, 0xD550, 0xD552, 0xD553, 0xD554, 0xD555, 0xD556, /* 0x90 */
+ 0xD557, 0xD55A, 0xD55B, 0xD55D, 0xD55E, 0xD55F, 0xD561, 0xD562, /* 0x90 */
+ 0xD563, 0xC6E9, 0xC6EC, 0xC6F0, 0xC6F8, 0xC6F9, 0xC6FD, 0xC704, /* 0xA0 */
+ 0xC705, 0xC708, 0xC70C, 0xC714, 0xC715, 0xC717, 0xC719, 0xC720, /* 0xA0 */
+ 0xC721, 0xC724, 0xC728, 0xC730, 0xC731, 0xC733, 0xC735, 0xC737, /* 0xB0 */
+ 0xC73C, 0xC73D, 0xC740, 0xC744, 0xC74A, 0xC74C, 0xC74D, 0xC74F, /* 0xB0 */
+ 0xC751, 0xC752, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, /* 0xC0 */
+ 0xC75C, 0xC760, 0xC768, 0xC76B, 0xC774, 0xC775, 0xC778, 0xC77C, /* 0xC0 */
+ 0xC77D, 0xC77E, 0xC783, 0xC784, 0xC785, 0xC787, 0xC788, 0xC789, /* 0xD0 */
+ 0xC78A, 0xC78E, 0xC790, 0xC791, 0xC794, 0xC796, 0xC797, 0xC798, /* 0xD0 */
+ 0xC79A, 0xC7A0, 0xC7A1, 0xC7A3, 0xC7A4, 0xC7A5, 0xC7A6, 0xC7AC, /* 0xE0 */
+ 0xC7AD, 0xC7B0, 0xC7B4, 0xC7BC, 0xC7BD, 0xC7BF, 0xC7C0, 0xC7C1, /* 0xE0 */
+ 0xC7C8, 0xC7C9, 0xC7CC, 0xC7CE, 0xC7D0, 0xC7D8, 0xC7DD, 0xC7E4, /* 0xF0 */
+ 0xC7E8, 0xC7EC, 0xC800, 0xC801, 0xC804, 0xC808, 0xC80A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD564, 0xD566, 0xD567, 0xD56A, 0xD56C, 0xD56E, 0xD56F, /* 0x40 */
+ 0xD570, 0xD571, 0xD572, 0xD573, 0xD576, 0xD577, 0xD579, 0xD57A, /* 0x40 */
+ 0xD57B, 0xD57D, 0xD57E, 0xD57F, 0xD580, 0xD581, 0xD582, 0xD583, /* 0x50 */
+ 0xD586, 0xD58A, 0xD58B, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD58C, 0xD58D, 0xD58E, 0xD58F, 0xD591, 0xD592, 0xD593, /* 0x60 */
+ 0xD594, 0xD595, 0xD596, 0xD597, 0xD598, 0xD599, 0xD59A, 0xD59B, /* 0x60 */
+ 0xD59C, 0xD59D, 0xD59E, 0xD59F, 0xD5A0, 0xD5A1, 0xD5A2, 0xD5A3, /* 0x70 */
+ 0xD5A4, 0xD5A6, 0xD5A7, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD5A8, 0xD5A9, 0xD5AA, 0xD5AB, 0xD5AC, 0xD5AD, 0xD5AE, /* 0x80 */
+ 0xD5AF, 0xD5B0, 0xD5B1, 0xD5B2, 0xD5B3, 0xD5B4, 0xD5B5, 0xD5B6, /* 0x80 */
+ 0xD5B7, 0xD5B8, 0xD5B9, 0xD5BA, 0xD5BB, 0xD5BC, 0xD5BD, 0xD5BE, /* 0x90 */
+ 0xD5BF, 0xD5C0, 0xD5C1, 0xD5C2, 0xD5C3, 0xD5C4, 0xD5C5, 0xD5C6, /* 0x90 */
+ 0xD5C7, 0xC810, 0xC811, 0xC813, 0xC815, 0xC816, 0xC81C, 0xC81D, /* 0xA0 */
+ 0xC820, 0xC824, 0xC82C, 0xC82D, 0xC82F, 0xC831, 0xC838, 0xC83C, /* 0xA0 */
+ 0xC840, 0xC848, 0xC849, 0xC84C, 0xC84D, 0xC854, 0xC870, 0xC871, /* 0xB0 */
+ 0xC874, 0xC878, 0xC87A, 0xC880, 0xC881, 0xC883, 0xC885, 0xC886, /* 0xB0 */
+ 0xC887, 0xC88B, 0xC88C, 0xC88D, 0xC894, 0xC89D, 0xC89F, 0xC8A1, /* 0xC0 */
+ 0xC8A8, 0xC8BC, 0xC8BD, 0xC8C4, 0xC8C8, 0xC8CC, 0xC8D4, 0xC8D5, /* 0xC0 */
+ 0xC8D7, 0xC8D9, 0xC8E0, 0xC8E1, 0xC8E4, 0xC8F5, 0xC8FC, 0xC8FD, /* 0xD0 */
+ 0xC900, 0xC904, 0xC905, 0xC906, 0xC90C, 0xC90D, 0xC90F, 0xC911, /* 0xD0 */
+ 0xC918, 0xC92C, 0xC934, 0xC950, 0xC951, 0xC954, 0xC958, 0xC960, /* 0xE0 */
+ 0xC961, 0xC963, 0xC96C, 0xC970, 0xC974, 0xC97C, 0xC988, 0xC989, /* 0xE0 */
+ 0xC98C, 0xC990, 0xC998, 0xC999, 0xC99B, 0xC99D, 0xC9C0, 0xC9C1, /* 0xF0 */
+ 0xC9C4, 0xC9C7, 0xC9C8, 0xC9CA, 0xC9D0, 0xC9D1, 0xC9D3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD5CA, 0xD5CB, 0xD5CD, 0xD5CE, 0xD5CF, 0xD5D1, 0xD5D3, /* 0x40 */
+ 0xD5D4, 0xD5D5, 0xD5D6, 0xD5D7, 0xD5DA, 0xD5DC, 0xD5DE, 0xD5DF, /* 0x40 */
+ 0xD5E0, 0xD5E1, 0xD5E2, 0xD5E3, 0xD5E6, 0xD5E7, 0xD5E9, 0xD5EA, /* 0x50 */
+ 0xD5EB, 0xD5ED, 0xD5EE, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD5EF, 0xD5F0, 0xD5F1, 0xD5F2, 0xD5F3, 0xD5F6, 0xD5F8, /* 0x60 */
+ 0xD5FA, 0xD5FB, 0xD5FC, 0xD5FD, 0xD5FE, 0xD5FF, 0xD602, 0xD603, /* 0x60 */
+ 0xD605, 0xD606, 0xD607, 0xD609, 0xD60A, 0xD60B, 0xD60C, 0xD60D, /* 0x70 */
+ 0xD60E, 0xD60F, 0xD612, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD616, 0xD617, 0xD618, 0xD619, 0xD61A, 0xD61B, 0xD61D, /* 0x80 */
+ 0xD61E, 0xD61F, 0xD621, 0xD622, 0xD623, 0xD625, 0xD626, 0xD627, /* 0x80 */
+ 0xD628, 0xD629, 0xD62A, 0xD62B, 0xD62C, 0xD62E, 0xD62F, 0xD630, /* 0x90 */
+ 0xD631, 0xD632, 0xD633, 0xD634, 0xD635, 0xD636, 0xD637, 0xD63A, /* 0x90 */
+ 0xD63B, 0xC9D5, 0xC9D6, 0xC9D9, 0xC9DA, 0xC9DC, 0xC9DD, 0xC9E0, /* 0xA0 */
+ 0xC9E2, 0xC9E4, 0xC9E7, 0xC9EC, 0xC9ED, 0xC9EF, 0xC9F0, 0xC9F1, /* 0xA0 */
+ 0xC9F8, 0xC9F9, 0xC9FC, 0xCA00, 0xCA08, 0xCA09, 0xCA0B, 0xCA0C, /* 0xB0 */
+ 0xCA0D, 0xCA14, 0xCA18, 0xCA29, 0xCA4C, 0xCA4D, 0xCA50, 0xCA54, /* 0xB0 */
+ 0xCA5C, 0xCA5D, 0xCA5F, 0xCA60, 0xCA61, 0xCA68, 0xCA7D, 0xCA84, /* 0xC0 */
+ 0xCA98, 0xCABC, 0xCABD, 0xCAC0, 0xCAC4, 0xCACC, 0xCACD, 0xCACF, /* 0xC0 */
+ 0xCAD1, 0xCAD3, 0xCAD8, 0xCAD9, 0xCAE0, 0xCAEC, 0xCAF4, 0xCB08, /* 0xD0 */
+ 0xCB10, 0xCB14, 0xCB18, 0xCB20, 0xCB21, 0xCB41, 0xCB48, 0xCB49, /* 0xD0 */
+ 0xCB4C, 0xCB50, 0xCB58, 0xCB59, 0xCB5D, 0xCB64, 0xCB78, 0xCB79, /* 0xE0 */
+ 0xCB9C, 0xCBB8, 0xCBD4, 0xCBE4, 0xCBE7, 0xCBE9, 0xCC0C, 0xCC0D, /* 0xE0 */
+ 0xCC10, 0xCC14, 0xCC1C, 0xCC1D, 0xCC21, 0xCC22, 0xCC27, 0xCC28, /* 0xF0 */
+ 0xCC29, 0xCC2C, 0xCC2E, 0xCC30, 0xCC38, 0xCC39, 0xCC3B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD63D, 0xD63E, 0xD63F, 0xD641, 0xD642, 0xD643, 0xD644, /* 0x40 */
+ 0xD646, 0xD647, 0xD64A, 0xD64C, 0xD64E, 0xD64F, 0xD650, 0xD652, /* 0x40 */
+ 0xD653, 0xD656, 0xD657, 0xD659, 0xD65A, 0xD65B, 0xD65D, 0xD65E, /* 0x50 */
+ 0xD65F, 0xD660, 0xD661, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD662, 0xD663, 0xD664, 0xD665, 0xD666, 0xD668, 0xD66A, /* 0x60 */
+ 0xD66B, 0xD66C, 0xD66D, 0xD66E, 0xD66F, 0xD672, 0xD673, 0xD675, /* 0x60 */
+ 0xD676, 0xD677, 0xD678, 0xD679, 0xD67A, 0xD67B, 0xD67C, 0xD67D, /* 0x70 */
+ 0xD67E, 0xD67F, 0xD680, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD681, 0xD682, 0xD684, 0xD686, 0xD687, 0xD688, 0xD689, /* 0x80 */
+ 0xD68A, 0xD68B, 0xD68E, 0xD68F, 0xD691, 0xD692, 0xD693, 0xD695, /* 0x80 */
+ 0xD696, 0xD697, 0xD698, 0xD699, 0xD69A, 0xD69B, 0xD69C, 0xD69E, /* 0x90 */
+ 0xD6A0, 0xD6A2, 0xD6A3, 0xD6A4, 0xD6A5, 0xD6A6, 0xD6A7, 0xD6A9, /* 0x90 */
+ 0xD6AA, 0xCC3C, 0xCC3D, 0xCC3E, 0xCC44, 0xCC45, 0xCC48, 0xCC4C, /* 0xA0 */
+ 0xCC54, 0xCC55, 0xCC57, 0xCC58, 0xCC59, 0xCC60, 0xCC64, 0xCC66, /* 0xA0 */
+ 0xCC68, 0xCC70, 0xCC75, 0xCC98, 0xCC99, 0xCC9C, 0xCCA0, 0xCCA8, /* 0xB0 */
+ 0xCCA9, 0xCCAB, 0xCCAC, 0xCCAD, 0xCCB4, 0xCCB5, 0xCCB8, 0xCCBC, /* 0xB0 */
+ 0xCCC4, 0xCCC5, 0xCCC7, 0xCCC9, 0xCCD0, 0xCCD4, 0xCCE4, 0xCCEC, /* 0xC0 */
+ 0xCCF0, 0xCD01, 0xCD08, 0xCD09, 0xCD0C, 0xCD10, 0xCD18, 0xCD19, /* 0xC0 */
+ 0xCD1B, 0xCD1D, 0xCD24, 0xCD28, 0xCD2C, 0xCD39, 0xCD5C, 0xCD60, /* 0xD0 */
+ 0xCD64, 0xCD6C, 0xCD6D, 0xCD6F, 0xCD71, 0xCD78, 0xCD88, 0xCD94, /* 0xD0 */
+ 0xCD95, 0xCD98, 0xCD9C, 0xCDA4, 0xCDA5, 0xCDA7, 0xCDA9, 0xCDB0, /* 0xE0 */
+ 0xCDC4, 0xCDCC, 0xCDD0, 0xCDE8, 0xCDEC, 0xCDF0, 0xCDF8, 0xCDF9, /* 0xE0 */
+ 0xCDFB, 0xCDFD, 0xCE04, 0xCE08, 0xCE0C, 0xCE14, 0xCE19, 0xCE20, /* 0xF0 */
+ 0xCE21, 0xCE24, 0xCE28, 0xCE30, 0xCE31, 0xCE33, 0xCE35 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD6AB, 0xD6AD, 0xD6AE, 0xD6AF, 0xD6B1, 0xD6B2, 0xD6B3, /* 0x40 */
+ 0xD6B4, 0xD6B5, 0xD6B6, 0xD6B7, 0xD6B8, 0xD6BA, 0xD6BC, 0xD6BD, /* 0x40 */
+ 0xD6BE, 0xD6BF, 0xD6C0, 0xD6C1, 0xD6C2, 0xD6C3, 0xD6C6, 0xD6C7, /* 0x50 */
+ 0xD6C9, 0xD6CA, 0xD6CB, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD6CD, 0xD6CE, 0xD6CF, 0xD6D0, 0xD6D2, 0xD6D3, 0xD6D5, /* 0x60 */
+ 0xD6D6, 0xD6D8, 0xD6DA, 0xD6DB, 0xD6DC, 0xD6DD, 0xD6DE, 0xD6DF, /* 0x60 */
+ 0xD6E1, 0xD6E2, 0xD6E3, 0xD6E5, 0xD6E6, 0xD6E7, 0xD6E9, 0xD6EA, /* 0x70 */
+ 0xD6EB, 0xD6EC, 0xD6ED, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD6EE, 0xD6EF, 0xD6F1, 0xD6F2, 0xD6F3, 0xD6F4, 0xD6F6, /* 0x80 */
+ 0xD6F7, 0xD6F8, 0xD6F9, 0xD6FA, 0xD6FB, 0xD6FE, 0xD6FF, 0xD701, /* 0x80 */
+ 0xD702, 0xD703, 0xD705, 0xD706, 0xD707, 0xD708, 0xD709, 0xD70A, /* 0x90 */
+ 0xD70B, 0xD70C, 0xD70D, 0xD70E, 0xD70F, 0xD710, 0xD712, 0xD713, /* 0x90 */
+ 0xD714, 0xCE58, 0xCE59, 0xCE5C, 0xCE5F, 0xCE60, 0xCE61, 0xCE68, /* 0xA0 */
+ 0xCE69, 0xCE6B, 0xCE6D, 0xCE74, 0xCE75, 0xCE78, 0xCE7C, 0xCE84, /* 0xA0 */
+ 0xCE85, 0xCE87, 0xCE89, 0xCE90, 0xCE91, 0xCE94, 0xCE98, 0xCEA0, /* 0xB0 */
+ 0xCEA1, 0xCEA3, 0xCEA4, 0xCEA5, 0xCEAC, 0xCEAD, 0xCEC1, 0xCEE4, /* 0xB0 */
+ 0xCEE5, 0xCEE8, 0xCEEB, 0xCEEC, 0xCEF4, 0xCEF5, 0xCEF7, 0xCEF8, /* 0xC0 */
+ 0xCEF9, 0xCF00, 0xCF01, 0xCF04, 0xCF08, 0xCF10, 0xCF11, 0xCF13, /* 0xC0 */
+ 0xCF15, 0xCF1C, 0xCF20, 0xCF24, 0xCF2C, 0xCF2D, 0xCF2F, 0xCF30, /* 0xD0 */
+ 0xCF31, 0xCF38, 0xCF54, 0xCF55, 0xCF58, 0xCF5C, 0xCF64, 0xCF65, /* 0xD0 */
+ 0xCF67, 0xCF69, 0xCF70, 0xCF71, 0xCF74, 0xCF78, 0xCF80, 0xCF85, /* 0xE0 */
+ 0xCF8C, 0xCFA1, 0xCFA8, 0xCFB0, 0xCFC4, 0xCFE0, 0xCFE1, 0xCFE4, /* 0xE0 */
+ 0xCFE8, 0xCFF0, 0xCFF1, 0xCFF3, 0xCFF5, 0xCFFC, 0xD000, 0xD004, /* 0xF0 */
+ 0xD011, 0xD018, 0xD02D, 0xD034, 0xD035, 0xD038, 0xD03C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD715, 0xD716, 0xD717, 0xD71A, 0xD71B, 0xD71D, 0xD71E, /* 0x40 */
+ 0xD71F, 0xD721, 0xD722, 0xD723, 0xD724, 0xD725, 0xD726, 0xD727, /* 0x40 */
+ 0xD72A, 0xD72C, 0xD72E, 0xD72F, 0xD730, 0xD731, 0xD732, 0xD733, /* 0x50 */
+ 0xD736, 0xD737, 0xD739, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD73A, 0xD73B, 0xD73D, 0xD73E, 0xD73F, 0xD740, 0xD741, /* 0x60 */
+ 0xD742, 0xD743, 0xD745, 0xD746, 0xD748, 0xD74A, 0xD74B, 0xD74C, /* 0x60 */
+ 0xD74D, 0xD74E, 0xD74F, 0xD752, 0xD753, 0xD755, 0xD75A, 0xD75B, /* 0x70 */
+ 0xD75C, 0xD75D, 0xD75E, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD75F, 0xD762, 0xD764, 0xD766, 0xD767, 0xD768, 0xD76A, /* 0x80 */
+ 0xD76B, 0xD76D, 0xD76E, 0xD76F, 0xD771, 0xD772, 0xD773, 0xD775, /* 0x80 */
+ 0xD776, 0xD777, 0xD778, 0xD779, 0xD77A, 0xD77B, 0xD77E, 0xD77F, /* 0x90 */
+ 0xD780, 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0xD78A, /* 0x90 */
+ 0xD78B, 0xD044, 0xD045, 0xD047, 0xD049, 0xD050, 0xD054, 0xD058, /* 0xA0 */
+ 0xD060, 0xD06C, 0xD06D, 0xD070, 0xD074, 0xD07C, 0xD07D, 0xD081, /* 0xA0 */
+ 0xD0A4, 0xD0A5, 0xD0A8, 0xD0AC, 0xD0B4, 0xD0B5, 0xD0B7, 0xD0B9, /* 0xB0 */
+ 0xD0C0, 0xD0C1, 0xD0C4, 0xD0C8, 0xD0C9, 0xD0D0, 0xD0D1, 0xD0D3, /* 0xB0 */
+ 0xD0D4, 0xD0D5, 0xD0DC, 0xD0DD, 0xD0E0, 0xD0E4, 0xD0EC, 0xD0ED, /* 0xC0 */
+ 0xD0EF, 0xD0F0, 0xD0F1, 0xD0F8, 0xD10D, 0xD130, 0xD131, 0xD134, /* 0xC0 */
+ 0xD138, 0xD13A, 0xD140, 0xD141, 0xD143, 0xD144, 0xD145, 0xD14C, /* 0xD0 */
+ 0xD14D, 0xD150, 0xD154, 0xD15C, 0xD15D, 0xD15F, 0xD161, 0xD168, /* 0xD0 */
+ 0xD16C, 0xD17C, 0xD184, 0xD188, 0xD1A0, 0xD1A1, 0xD1A4, 0xD1A8, /* 0xE0 */
+ 0xD1B0, 0xD1B1, 0xD1B3, 0xD1B5, 0xD1BA, 0xD1BC, 0xD1C0, 0xD1D8, /* 0xE0 */
+ 0xD1F4, 0xD1F8, 0xD207, 0xD209, 0xD210, 0xD22C, 0xD22D, 0xD230, /* 0xF0 */
+ 0xD234, 0xD23C, 0xD23D, 0xD23F, 0xD241, 0xD248, 0xD25C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD78D, 0xD78E, 0xD78F, 0xD791, 0xD792, 0xD793, 0xD794, /* 0x40 */
+ 0xD795, 0xD796, 0xD797, 0xD79A, 0xD79C, 0xD79E, 0xD79F, 0xD7A0, /* 0x40 */
+ 0xD7A1, 0xD7A2, 0xD7A3, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xD264, 0xD280, 0xD281, 0xD284, 0xD288, 0xD290, 0xD291, /* 0xA0 */
+ 0xD295, 0xD29C, 0xD2A0, 0xD2A4, 0xD2AC, 0xD2B1, 0xD2B8, 0xD2B9, /* 0xA0 */
+ 0xD2BC, 0xD2BF, 0xD2C0, 0xD2C2, 0xD2C8, 0xD2C9, 0xD2CB, 0xD2D4, /* 0xB0 */
+ 0xD2D8, 0xD2DC, 0xD2E4, 0xD2E5, 0xD2F0, 0xD2F1, 0xD2F4, 0xD2F8, /* 0xB0 */
+ 0xD300, 0xD301, 0xD303, 0xD305, 0xD30C, 0xD30D, 0xD30E, 0xD310, /* 0xC0 */
+ 0xD314, 0xD316, 0xD31C, 0xD31D, 0xD31F, 0xD320, 0xD321, 0xD325, /* 0xC0 */
+ 0xD328, 0xD329, 0xD32C, 0xD330, 0xD338, 0xD339, 0xD33B, 0xD33C, /* 0xD0 */
+ 0xD33D, 0xD344, 0xD345, 0xD37C, 0xD37D, 0xD380, 0xD384, 0xD38C, /* 0xD0 */
+ 0xD38D, 0xD38F, 0xD390, 0xD391, 0xD398, 0xD399, 0xD39C, 0xD3A0, /* 0xE0 */
+ 0xD3A8, 0xD3A9, 0xD3AB, 0xD3AD, 0xD3B4, 0xD3B8, 0xD3BC, 0xD3C4, /* 0xE0 */
+ 0xD3C5, 0xD3C8, 0xD3C9, 0xD3D0, 0xD3D8, 0xD3E1, 0xD3E3, 0xD3EC, /* 0xF0 */
+ 0xD3ED, 0xD3F0, 0xD3F4, 0xD3FC, 0xD3FD, 0xD3FF, 0xD401 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD408, 0xD41D, 0xD440, 0xD444, 0xD45C, 0xD460, 0xD464, /* 0xA0 */
+ 0xD46D, 0xD46F, 0xD478, 0xD479, 0xD47C, 0xD47F, 0xD480, 0xD482, /* 0xA0 */
+ 0xD488, 0xD489, 0xD48B, 0xD48D, 0xD494, 0xD4A9, 0xD4CC, 0xD4D0, /* 0xB0 */
+ 0xD4D4, 0xD4DC, 0xD4DF, 0xD4E8, 0xD4EC, 0xD4F0, 0xD4F8, 0xD4FB, /* 0xB0 */
+ 0xD4FD, 0xD504, 0xD508, 0xD50C, 0xD514, 0xD515, 0xD517, 0xD53C, /* 0xC0 */
+ 0xD53D, 0xD540, 0xD544, 0xD54C, 0xD54D, 0xD54F, 0xD551, 0xD558, /* 0xC0 */
+ 0xD559, 0xD55C, 0xD560, 0xD565, 0xD568, 0xD569, 0xD56B, 0xD56D, /* 0xD0 */
+ 0xD574, 0xD575, 0xD578, 0xD57C, 0xD584, 0xD585, 0xD587, 0xD588, /* 0xD0 */
+ 0xD589, 0xD590, 0xD5A5, 0xD5C8, 0xD5C9, 0xD5CC, 0xD5D0, 0xD5D2, /* 0xE0 */
+ 0xD5D8, 0xD5D9, 0xD5DB, 0xD5DD, 0xD5E4, 0xD5E5, 0xD5E8, 0xD5EC, /* 0xE0 */
+ 0xD5F4, 0xD5F5, 0xD5F7, 0xD5F9, 0xD600, 0xD601, 0xD604, 0xD608, /* 0xF0 */
+ 0xD610, 0xD611, 0xD613, 0xD614, 0xD615, 0xD61C, 0xD620 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_C8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD624, 0xD62D, 0xD638, 0xD639, 0xD63C, 0xD640, 0xD645, /* 0xA0 */
+ 0xD648, 0xD649, 0xD64B, 0xD64D, 0xD651, 0xD654, 0xD655, 0xD658, /* 0xA0 */
+ 0xD65C, 0xD667, 0xD669, 0xD670, 0xD671, 0xD674, 0xD683, 0xD685, /* 0xB0 */
+ 0xD68C, 0xD68D, 0xD690, 0xD694, 0xD69D, 0xD69F, 0xD6A1, 0xD6A8, /* 0xB0 */
+ 0xD6AC, 0xD6B0, 0xD6B9, 0xD6BB, 0xD6C4, 0xD6C5, 0xD6C8, 0xD6CC, /* 0xC0 */
+ 0xD6D1, 0xD6D4, 0xD6D7, 0xD6D9, 0xD6E0, 0xD6E4, 0xD6E8, 0xD6F0, /* 0xC0 */
+ 0xD6F5, 0xD6FC, 0xD6FD, 0xD700, 0xD704, 0xD711, 0xD718, 0xD719, /* 0xD0 */
+ 0xD71C, 0xD720, 0xD728, 0xD729, 0xD72B, 0xD72D, 0xD734, 0xD735, /* 0xD0 */
+ 0xD738, 0xD73C, 0xD744, 0xD747, 0xD749, 0xD750, 0xD751, 0xD754, /* 0xE0 */
+ 0xD756, 0xD757, 0xD758, 0xD759, 0xD760, 0xD761, 0xD763, 0xD765, /* 0xE0 */
+ 0xD769, 0xD76C, 0xD770, 0xD774, 0xD77C, 0xD77D, 0xD781, 0xD788, /* 0xF0 */
+ 0xD789, 0xD78C, 0xD790, 0xD798, 0xD799, 0xD79B, 0xD79D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_CA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F3D, 0x4F73, 0x5047, 0x50F9, 0x52A0, 0x53EF, 0x5475, /* 0xA0 */
+ 0x54E5, 0x5609, 0x5AC1, 0x5BB6, 0x6687, 0x67B6, 0x67B7, 0x67EF, /* 0xA0 */
+ 0x6B4C, 0x73C2, 0x75C2, 0x7A3C, 0x82DB, 0x8304, 0x8857, 0x8888, /* 0xB0 */
+ 0x8A36, 0x8CC8, 0x8DCF, 0x8EFB, 0x8FE6, 0x99D5, 0x523B, 0x5374, /* 0xB0 */
+ 0x5404, 0x606A, 0x6164, 0x6BBC, 0x73CF, 0x811A, 0x89BA, 0x89D2, /* 0xC0 */
+ 0x95A3, 0x4F83, 0x520A, 0x58BE, 0x5978, 0x59E6, 0x5E72, 0x5E79, /* 0xC0 */
+ 0x61C7, 0x63C0, 0x6746, 0x67EC, 0x687F, 0x6F97, 0x764E, 0x770B, /* 0xD0 */
+ 0x78F5, 0x7A08, 0x7AFF, 0x7C21, 0x809D, 0x826E, 0x8271, 0x8AEB, /* 0xD0 */
+ 0x9593, 0x4E6B, 0x559D, 0x66F7, 0x6E34, 0x78A3, 0x7AED, 0x845B, /* 0xE0 */
+ 0x8910, 0x874E, 0x97A8, 0x52D8, 0x574E, 0x582A, 0x5D4C, 0x611F, /* 0xE0 */
+ 0x61BE, 0x6221, 0x6562, 0x67D1, 0x6A44, 0x6E1B, 0x7518, 0x75B3, /* 0xF0 */
+ 0x76E3, 0x77B0, 0x7D3A, 0x90AF, 0x9451, 0x9452, 0x9F95 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_CB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5323, 0x5CAC, 0x7532, 0x80DB, 0x9240, 0x9598, 0x525B, /* 0xA0 */
+ 0x5808, 0x59DC, 0x5CA1, 0x5D17, 0x5EB7, 0x5F3A, 0x5F4A, 0x6177, /* 0xA0 */
+ 0x6C5F, 0x757A, 0x7586, 0x7CE0, 0x7D73, 0x7DB1, 0x7F8C, 0x8154, /* 0xB0 */
+ 0x8221, 0x8591, 0x8941, 0x8B1B, 0x92FC, 0x964D, 0x9C47, 0x4ECB, /* 0xB0 */
+ 0x4EF7, 0x500B, 0x51F1, 0x584F, 0x6137, 0x613E, 0x6168, 0x6539, /* 0xC0 */
+ 0x69EA, 0x6F11, 0x75A5, 0x7686, 0x76D6, 0x7B87, 0x82A5, 0x84CB, /* 0xC0 */
+ 0xF900, 0x93A7, 0x958B, 0x5580, 0x5BA2, 0x5751, 0xF901, 0x7CB3, /* 0xD0 */
+ 0x7FB9, 0x91B5, 0x5028, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x636E, /* 0xD0 */
+ 0x64DA, 0x64E7, 0x6E20, 0x70AC, 0x795B, 0x8DDD, 0x8E1E, 0xF902, /* 0xE0 */
+ 0x907D, 0x9245, 0x92F8, 0x4E7E, 0x4EF6, 0x5065, 0x5DFE, 0x5EFA, /* 0xE0 */
+ 0x6106, 0x6957, 0x8171, 0x8654, 0x8E47, 0x9375, 0x9A2B, 0x4E5E, /* 0xF0 */
+ 0x5091, 0x6770, 0x6840, 0x5109, 0x528D, 0x5292, 0x6AA2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_CC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x77BC, 0x9210, 0x9ED4, 0x52AB, 0x602F, 0x8FF2, 0x5048, /* 0xA0 */
+ 0x61A9, 0x63ED, 0x64CA, 0x683C, 0x6A84, 0x6FC0, 0x8188, 0x89A1, /* 0xA0 */
+ 0x9694, 0x5805, 0x727D, 0x72AC, 0x7504, 0x7D79, 0x7E6D, 0x80A9, /* 0xB0 */
+ 0x898B, 0x8B74, 0x9063, 0x9D51, 0x6289, 0x6C7A, 0x6F54, 0x7D50, /* 0xB0 */
+ 0x7F3A, 0x8A23, 0x517C, 0x614A, 0x7B9D, 0x8B19, 0x9257, 0x938C, /* 0xC0 */
+ 0x4EAC, 0x4FD3, 0x501E, 0x50BE, 0x5106, 0x52C1, 0x52CD, 0x537F, /* 0xC0 */
+ 0x5770, 0x5883, 0x5E9A, 0x5F91, 0x6176, 0x61AC, 0x64CE, 0x656C, /* 0xD0 */
+ 0x666F, 0x66BB, 0x66F4, 0x6897, 0x6D87, 0x7085, 0x70F1, 0x749F, /* 0xD0 */
+ 0x74A5, 0x74CA, 0x75D9, 0x786C, 0x78EC, 0x7ADF, 0x7AF6, 0x7D45, /* 0xE0 */
+ 0x7D93, 0x8015, 0x803F, 0x811B, 0x8396, 0x8B66, 0x8F15, 0x9015, /* 0xE0 */
+ 0x93E1, 0x9803, 0x9838, 0x9A5A, 0x9BE8, 0x4FC2, 0x5553, 0x583A, /* 0xF0 */
+ 0x5951, 0x5B63, 0x5C46, 0x60B8, 0x6212, 0x6842, 0x68B0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_CD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x68E8, 0x6EAA, 0x754C, 0x7678, 0x78CE, 0x7A3D, 0x7CFB, /* 0xA0 */
+ 0x7E6B, 0x7E7C, 0x8A08, 0x8AA1, 0x8C3F, 0x968E, 0x9DC4, 0x53E4, /* 0xA0 */
+ 0x53E9, 0x544A, 0x5471, 0x56FA, 0x59D1, 0x5B64, 0x5C3B, 0x5EAB, /* 0xB0 */
+ 0x62F7, 0x6537, 0x6545, 0x6572, 0x66A0, 0x67AF, 0x69C1, 0x6CBD, /* 0xB0 */
+ 0x75FC, 0x7690, 0x777E, 0x7A3F, 0x7F94, 0x8003, 0x80A1, 0x818F, /* 0xC0 */
+ 0x82E6, 0x82FD, 0x83F0, 0x85C1, 0x8831, 0x88B4, 0x8AA5, 0xF903, /* 0xC0 */
+ 0x8F9C, 0x932E, 0x96C7, 0x9867, 0x9AD8, 0x9F13, 0x54ED, 0x659B, /* 0xD0 */
+ 0x66F2, 0x688F, 0x7A40, 0x8C37, 0x9D60, 0x56F0, 0x5764, 0x5D11, /* 0xD0 */
+ 0x6606, 0x68B1, 0x68CD, 0x6EFE, 0x7428, 0x889E, 0x9BE4, 0x6C68, /* 0xE0 */
+ 0xF904, 0x9AA8, 0x4F9B, 0x516C, 0x5171, 0x529F, 0x5B54, 0x5DE5, /* 0xE0 */
+ 0x6050, 0x606D, 0x62F1, 0x63A7, 0x653B, 0x73D9, 0x7A7A, 0x86A3, /* 0xF0 */
+ 0x8CA2, 0x978F, 0x4E32, 0x5BE1, 0x6208, 0x679C, 0x74DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_CE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x79D1, 0x83D3, 0x8A87, 0x8AB2, 0x8DE8, 0x904E, 0x934B, /* 0xA0 */
+ 0x9846, 0x5ED3, 0x69E8, 0x85FF, 0x90ED, 0xF905, 0x51A0, 0x5B98, /* 0xA0 */
+ 0x5BEC, 0x6163, 0x68FA, 0x6B3E, 0x704C, 0x742F, 0x74D8, 0x7BA1, /* 0xB0 */
+ 0x7F50, 0x83C5, 0x89C0, 0x8CAB, 0x95DC, 0x9928, 0x522E, 0x605D, /* 0xB0 */
+ 0x62EC, 0x9002, 0x4F8A, 0x5149, 0x5321, 0x58D9, 0x5EE3, 0x66E0, /* 0xC0 */
+ 0x6D38, 0x709A, 0x72C2, 0x73D6, 0x7B50, 0x80F1, 0x945B, 0x5366, /* 0xC0 */
+ 0x639B, 0x7F6B, 0x4E56, 0x5080, 0x584A, 0x58DE, 0x602A, 0x6127, /* 0xD0 */
+ 0x62D0, 0x69D0, 0x9B41, 0x5B8F, 0x7D18, 0x80B1, 0x8F5F, 0x4EA4, /* 0xD0 */
+ 0x50D1, 0x54AC, 0x55AC, 0x5B0C, 0x5DA0, 0x5DE7, 0x652A, 0x654E, /* 0xE0 */
+ 0x6821, 0x6A4B, 0x72E1, 0x768E, 0x77EF, 0x7D5E, 0x7FF9, 0x81A0, /* 0xE0 */
+ 0x854E, 0x86DF, 0x8F03, 0x8F4E, 0x90CA, 0x9903, 0x9A55, 0x9BAB, /* 0xF0 */
+ 0x4E18, 0x4E45, 0x4E5D, 0x4EC7, 0x4FF1, 0x5177, 0x52FE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_CF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5340, 0x53E3, 0x53E5, 0x548E, 0x5614, 0x5775, 0x57A2, /* 0xA0 */
+ 0x5BC7, 0x5D87, 0x5ED0, 0x61FC, 0x62D8, 0x6551, 0x67B8, 0x67E9, /* 0xA0 */
+ 0x69CB, 0x6B50, 0x6BC6, 0x6BEC, 0x6C42, 0x6E9D, 0x7078, 0x72D7, /* 0xB0 */
+ 0x7396, 0x7403, 0x77BF, 0x77E9, 0x7A76, 0x7D7F, 0x8009, 0x81FC, /* 0xB0 */
+ 0x8205, 0x820A, 0x82DF, 0x8862, 0x8B33, 0x8CFC, 0x8EC0, 0x9011, /* 0xC0 */
+ 0x90B1, 0x9264, 0x92B6, 0x99D2, 0x9A45, 0x9CE9, 0x9DD7, 0x9F9C, /* 0xC0 */
+ 0x570B, 0x5C40, 0x83CA, 0x97A0, 0x97AB, 0x9EB4, 0x541B, 0x7A98, /* 0xD0 */
+ 0x7FA4, 0x88D9, 0x8ECD, 0x90E1, 0x5800, 0x5C48, 0x6398, 0x7A9F, /* 0xD0 */
+ 0x5BAE, 0x5F13, 0x7A79, 0x7AAE, 0x828E, 0x8EAC, 0x5026, 0x5238, /* 0xE0 */
+ 0x52F8, 0x5377, 0x5708, 0x62F3, 0x6372, 0x6B0A, 0x6DC3, 0x7737, /* 0xE0 */
+ 0x53A5, 0x7357, 0x8568, 0x8E76, 0x95D5, 0x673A, 0x6AC3, 0x6F70, /* 0xF0 */
+ 0x8A6D, 0x8ECC, 0x994B, 0xF906, 0x6677, 0x6B78, 0x8CB4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9B3C, 0xF907, 0x53EB, 0x572D, 0x594E, 0x63C6, 0x69FB, /* 0xA0 */
+ 0x73EA, 0x7845, 0x7ABA, 0x7AC5, 0x7CFE, 0x8475, 0x898F, 0x8D73, /* 0xA0 */
+ 0x9035, 0x95A8, 0x52FB, 0x5747, 0x7547, 0x7B60, 0x83CC, 0x921E, /* 0xB0 */
+ 0xF908, 0x6A58, 0x514B, 0x524B, 0x5287, 0x621F, 0x68D8, 0x6975, /* 0xB0 */
+ 0x9699, 0x50C5, 0x52A4, 0x52E4, 0x61C3, 0x65A4, 0x6839, 0x69FF, /* 0xC0 */
+ 0x747E, 0x7B4B, 0x82B9, 0x83EB, 0x89B2, 0x8B39, 0x8FD1, 0x9949, /* 0xC0 */
+ 0xF909, 0x4ECA, 0x5997, 0x64D2, 0x6611, 0x6A8E, 0x7434, 0x7981, /* 0xD0 */
+ 0x79BD, 0x82A9, 0x887E, 0x887F, 0x895F, 0xF90A, 0x9326, 0x4F0B, /* 0xD0 */
+ 0x53CA, 0x6025, 0x6271, 0x6C72, 0x7D1A, 0x7D66, 0x4E98, 0x5162, /* 0xE0 */
+ 0x77DC, 0x80AF, 0x4F01, 0x4F0E, 0x5176, 0x5180, 0x55DC, 0x5668, /* 0xE0 */
+ 0x573B, 0x57FA, 0x57FC, 0x5914, 0x5947, 0x5993, 0x5BC4, 0x5C90, /* 0xF0 */
+ 0x5D0E, 0x5DF1, 0x5E7E, 0x5FCC, 0x6280, 0x65D7, 0x65E3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x671E, 0x671F, 0x675E, 0x68CB, 0x68C4, 0x6A5F, 0x6B3A, /* 0xA0 */
+ 0x6C23, 0x6C7D, 0x6C82, 0x6DC7, 0x7398, 0x7426, 0x742A, 0x7482, /* 0xA0 */
+ 0x74A3, 0x7578, 0x757F, 0x7881, 0x78EF, 0x7941, 0x7947, 0x7948, /* 0xB0 */
+ 0x797A, 0x7B95, 0x7D00, 0x7DBA, 0x7F88, 0x8006, 0x802D, 0x808C, /* 0xB0 */
+ 0x8A18, 0x8B4F, 0x8C48, 0x8D77, 0x9321, 0x9324, 0x98E2, 0x9951, /* 0xC0 */
+ 0x9A0E, 0x9A0F, 0x9A65, 0x9E92, 0x7DCA, 0x4F76, 0x5409, 0x62EE, /* 0xC0 */
+ 0x6854, 0x91D1, 0x55AB, 0x513A, 0xF90B, 0xF90C, 0x5A1C, 0x61E6, /* 0xD0 */
+ 0xF90D, 0x62CF, 0x62FF, 0xF90E, 0xF90F, 0xF910, 0xF911, 0xF912, /* 0xD0 */
+ 0xF913, 0x90A3, 0xF914, 0xF915, 0xF916, 0xF917, 0xF918, 0x8AFE, /* 0xE0 */
+ 0xF919, 0xF91A, 0xF91B, 0xF91C, 0x6696, 0xF91D, 0x7156, 0xF91E, /* 0xE0 */
+ 0xF91F, 0x96E3, 0xF920, 0x634F, 0x637A, 0x5357, 0xF921, 0x678F, /* 0xF0 */
+ 0x6960, 0x6E73, 0xF922, 0x7537, 0xF923, 0xF924, 0xF925 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7D0D, 0xF926, 0xF927, 0x8872, 0x56CA, 0x5A18, 0xF928, /* 0xA0 */
+ 0xF929, 0xF92A, 0xF92B, 0xF92C, 0x4E43, 0xF92D, 0x5167, 0x5948, /* 0xA0 */
+ 0x67F0, 0x8010, 0xF92E, 0x5973, 0x5E74, 0x649A, 0x79CA, 0x5FF5, /* 0xB0 */
+ 0x606C, 0x62C8, 0x637B, 0x5BE7, 0x5BD7, 0x52AA, 0xF92F, 0x5974, /* 0xB0 */
+ 0x5F29, 0x6012, 0xF930, 0xF931, 0xF932, 0x7459, 0xF933, 0xF934, /* 0xC0 */
+ 0xF935, 0xF936, 0xF937, 0xF938, 0x99D1, 0xF939, 0xF93A, 0xF93B, /* 0xC0 */
+ 0xF93C, 0xF93D, 0xF93E, 0xF93F, 0xF940, 0xF941, 0xF942, 0xF943, /* 0xD0 */
+ 0x6FC3, 0xF944, 0xF945, 0x81BF, 0x8FB2, 0x60F1, 0xF946, 0xF947, /* 0xD0 */
+ 0x8166, 0xF948, 0xF949, 0x5C3F, 0xF94A, 0xF94B, 0xF94C, 0xF94D, /* 0xE0 */
+ 0xF94E, 0xF94F, 0xF950, 0xF951, 0x5AE9, 0x8A25, 0x677B, 0x7D10, /* 0xE0 */
+ 0xF952, 0xF953, 0xF954, 0xF955, 0xF956, 0xF957, 0x80FD, 0xF958, /* 0xF0 */
+ 0xF959, 0x5C3C, 0x6CE5, 0x533F, 0x6EBA, 0x591A, 0x8336 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E39, 0x4EB6, 0x4F46, 0x55AE, 0x5718, 0x58C7, 0x5F56, /* 0xA0 */
+ 0x65B7, 0x65E6, 0x6A80, 0x6BB5, 0x6E4D, 0x77ED, 0x7AEF, 0x7C1E, /* 0xA0 */
+ 0x7DDE, 0x86CB, 0x8892, 0x9132, 0x935B, 0x64BB, 0x6FBE, 0x737A, /* 0xB0 */
+ 0x75B8, 0x9054, 0x5556, 0x574D, 0x61BA, 0x64D4, 0x66C7, 0x6DE1, /* 0xB0 */
+ 0x6E5B, 0x6F6D, 0x6FB9, 0x75F0, 0x8043, 0x81BD, 0x8541, 0x8983, /* 0xC0 */
+ 0x8AC7, 0x8B5A, 0x931F, 0x6C93, 0x7553, 0x7B54, 0x8E0F, 0x905D, /* 0xC0 */
+ 0x5510, 0x5802, 0x5858, 0x5E62, 0x6207, 0x649E, 0x68E0, 0x7576, /* 0xD0 */
+ 0x7CD6, 0x87B3, 0x9EE8, 0x4EE3, 0x5788, 0x576E, 0x5927, 0x5C0D, /* 0xD0 */
+ 0x5CB1, 0x5E36, 0x5F85, 0x6234, 0x64E1, 0x73B3, 0x81FA, 0x888B, /* 0xE0 */
+ 0x8CB8, 0x968A, 0x9EDB, 0x5B85, 0x5FB7, 0x60B3, 0x5012, 0x5200, /* 0xE0 */
+ 0x5230, 0x5716, 0x5835, 0x5857, 0x5C0E, 0x5C60, 0x5CF6, 0x5D8B, /* 0xF0 */
+ 0x5EA6, 0x5F92, 0x60BC, 0x6311, 0x6389, 0x6417, 0x6843 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x68F9, 0x6AC2, 0x6DD8, 0x6E21, 0x6ED4, 0x6FE4, 0x71FE, /* 0xA0 */
+ 0x76DC, 0x7779, 0x79B1, 0x7A3B, 0x8404, 0x89A9, 0x8CED, 0x8DF3, /* 0xA0 */
+ 0x8E48, 0x9003, 0x9014, 0x9053, 0x90FD, 0x934D, 0x9676, 0x97DC, /* 0xB0 */
+ 0x6BD2, 0x7006, 0x7258, 0x72A2, 0x7368, 0x7763, 0x79BF, 0x7BE4, /* 0xB0 */
+ 0x7E9B, 0x8B80, 0x58A9, 0x60C7, 0x6566, 0x65FD, 0x66BE, 0x6C8C, /* 0xC0 */
+ 0x711E, 0x71C9, 0x8C5A, 0x9813, 0x4E6D, 0x7A81, 0x4EDD, 0x51AC, /* 0xC0 */
+ 0x51CD, 0x52D5, 0x540C, 0x61A7, 0x6771, 0x6850, 0x68DF, 0x6D1E, /* 0xD0 */
+ 0x6F7C, 0x75BC, 0x77B3, 0x7AE5, 0x80F4, 0x8463, 0x9285, 0x515C, /* 0xD0 */
+ 0x6597, 0x675C, 0x6793, 0x75D8, 0x7AC7, 0x8373, 0xF95A, 0x8C46, /* 0xE0 */
+ 0x9017, 0x982D, 0x5C6F, 0x81C0, 0x829A, 0x9041, 0x906F, 0x920D, /* 0xE0 */
+ 0x5F97, 0x5D9D, 0x6A59, 0x71C8, 0x767B, 0x7B49, 0x85E4, 0x8B04, /* 0xF0 */
+ 0x9127, 0x9A30, 0x5587, 0x61F6, 0xF95B, 0x7669, 0x7F85 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x863F, 0x87BA, 0x88F8, 0x908F, 0xF95C, 0x6D1B, 0x70D9, /* 0xA0 */
+ 0x73DE, 0x7D61, 0x843D, 0xF95D, 0x916A, 0x99F1, 0xF95E, 0x4E82, /* 0xA0 */
+ 0x5375, 0x6B04, 0x6B12, 0x703E, 0x721B, 0x862D, 0x9E1E, 0x524C, /* 0xB0 */
+ 0x8FA3, 0x5D50, 0x64E5, 0x652C, 0x6B16, 0x6FEB, 0x7C43, 0x7E9C, /* 0xB0 */
+ 0x85CD, 0x8964, 0x89BD, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717, /* 0xC0 */
+ 0x6D6A, 0x72FC, 0x7405, 0x746F, 0x8782, 0x90DE, 0x4F86, 0x5D0D, /* 0xC0 */
+ 0x5FA0, 0x840A, 0x51B7, 0x63A0, 0x7565, 0x4EAE, 0x5006, 0x5169, /* 0xD0 */
+ 0x51C9, 0x6881, 0x6A11, 0x7CAE, 0x7CB1, 0x7CE7, 0x826F, 0x8AD2, /* 0xD0 */
+ 0x8F1B, 0x91CF, 0x4FB6, 0x5137, 0x52F5, 0x5442, 0x5EEC, 0x616E, /* 0xE0 */
+ 0x623E, 0x65C5, 0x6ADA, 0x6FFE, 0x792A, 0x85DC, 0x8823, 0x95AD, /* 0xE0 */
+ 0x9A62, 0x9A6A, 0x9E97, 0x9ECE, 0x529B, 0x66C6, 0x6B77, 0x701D, /* 0xF0 */
+ 0x792B, 0x8F62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6F23 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7149, 0x7489, 0x7DF4, 0x806F, 0x84EE, 0x8F26, 0x9023, /* 0xA0 */
+ 0x934A, 0x51BD, 0x5217, 0x52A3, 0x6D0C, 0x70C8, 0x88C2, 0x5EC9, /* 0xA0 */
+ 0x6582, 0x6BAE, 0x6FC2, 0x7C3E, 0x7375, 0x4EE4, 0x4F36, 0x56F9, /* 0xB0 */
+ 0xF95F, 0x5CBA, 0x5DBA, 0x601C, 0x73B2, 0x7B2D, 0x7F9A, 0x7FCE, /* 0xB0 */
+ 0x8046, 0x901E, 0x9234, 0x96F6, 0x9748, 0x9818, 0x9F61, 0x4F8B, /* 0xC0 */
+ 0x6FA7, 0x79AE, 0x91B4, 0x96B7, 0x52DE, 0xF960, 0x6488, 0x64C4, /* 0xC0 */
+ 0x6AD3, 0x6F5E, 0x7018, 0x7210, 0x76E7, 0x8001, 0x8606, 0x865C, /* 0xD0 */
+ 0x8DEF, 0x8F05, 0x9732, 0x9B6F, 0x9DFA, 0x9E75, 0x788C, 0x797F, /* 0xD0 */
+ 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x9E93, 0x8AD6, 0x58DF, 0x5F04, /* 0xE0 */
+ 0x6727, 0x7027, 0x74CF, 0x7C60, 0x807E, 0x5121, 0x7028, 0x7262, /* 0xE0 */
+ 0x78CA, 0x8CC2, 0x8CDA, 0x8CF4, 0x96F7, 0x4E86, 0x50DA, 0x5BEE, /* 0xF0 */
+ 0x5ED6, 0x6599, 0x71CE, 0x7642, 0x77AD, 0x804A, 0x84FC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x907C, 0x9B27, 0x9F8D, 0x58D8, 0x5A41, 0x5C62, 0x6A13, /* 0xA0 */
+ 0x6DDA, 0x6F0F, 0x763B, 0x7D2F, 0x7E37, 0x851E, 0x8938, 0x93E4, /* 0xA0 */
+ 0x964B, 0x5289, 0x65D2, 0x67F3, 0x69B4, 0x6D41, 0x6E9C, 0x700F, /* 0xB0 */
+ 0x7409, 0x7460, 0x7559, 0x7624, 0x786B, 0x8B2C, 0x985E, 0x516D, /* 0xB0 */
+ 0x622E, 0x9678, 0x4F96, 0x502B, 0x5D19, 0x6DEA, 0x7DB8, 0x8F2A, /* 0xC0 */
+ 0x5F8B, 0x6144, 0x6817, 0xF961, 0x9686, 0x52D2, 0x808B, 0x51DC, /* 0xC0 */
+ 0x51CC, 0x695E, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x4FDA, 0x5229, /* 0xD0 */
+ 0x5398, 0x540F, 0x550E, 0x5C65, 0x60A7, 0x674E, 0x68A8, 0x6D6C, /* 0xD0 */
+ 0x7281, 0x72F8, 0x7406, 0x7483, 0xF962, 0x75E2, 0x7C6C, 0x7F79, /* 0xE0 */
+ 0x7FB8, 0x8389, 0x88CF, 0x88E1, 0x91CC, 0x91D0, 0x96E2, 0x9BC9, /* 0xE0 */
+ 0x541D, 0x6F7E, 0x71D0, 0x7498, 0x85FA, 0x8EAA, 0x96A3, 0x9C57, /* 0xF0 */
+ 0x9E9F, 0x6797, 0x6DCB, 0x7433, 0x81E8, 0x9716, 0x782C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7ACB, 0x7B20, 0x7C92, 0x6469, 0x746A, 0x75F2, 0x78BC, /* 0xA0 */
+ 0x78E8, 0x99AC, 0x9B54, 0x9EBB, 0x5BDE, 0x5E55, 0x6F20, 0x819C, /* 0xA0 */
+ 0x83AB, 0x9088, 0x4E07, 0x534D, 0x5A29, 0x5DD2, 0x5F4E, 0x6162, /* 0xB0 */
+ 0x633D, 0x6669, 0x66FC, 0x6EFF, 0x6F2B, 0x7063, 0x779E, 0x842C, /* 0xB0 */
+ 0x8513, 0x883B, 0x8F13, 0x9945, 0x9C3B, 0x551C, 0x62B9, 0x672B, /* 0xC0 */
+ 0x6CAB, 0x8309, 0x896A, 0x977A, 0x4EA1, 0x5984, 0x5FD8, 0x5FD9, /* 0xC0 */
+ 0x671B, 0x7DB2, 0x7F54, 0x8292, 0x832B, 0x83BD, 0x8F1E, 0x9099, /* 0xD0 */
+ 0x57CB, 0x59B9, 0x5A92, 0x5BD0, 0x6627, 0x679A, 0x6885, 0x6BCF, /* 0xD0 */
+ 0x7164, 0x7F75, 0x8CB7, 0x8CE3, 0x9081, 0x9B45, 0x8108, 0x8C8A, /* 0xE0 */
+ 0x964C, 0x9A40, 0x9EA5, 0x5B5F, 0x6C13, 0x731B, 0x76F2, 0x76DF, /* 0xE0 */
+ 0x840C, 0x51AA, 0x8993, 0x514D, 0x5195, 0x52C9, 0x68C9, 0x6C94, /* 0xF0 */
+ 0x7704, 0x7720, 0x7DBF, 0x7DEC, 0x9762, 0x9EB5, 0x6EC5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_D9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8511, 0x51A5, 0x540D, 0x547D, 0x660E, 0x669D, 0x6927, /* 0xA0 */
+ 0x6E9F, 0x76BF, 0x7791, 0x8317, 0x84C2, 0x879F, 0x9169, 0x9298, /* 0xA0 */
+ 0x9CF4, 0x8882, 0x4FAE, 0x5192, 0x52DF, 0x59C6, 0x5E3D, 0x6155, /* 0xB0 */
+ 0x6478, 0x6479, 0x66AE, 0x67D0, 0x6A21, 0x6BCD, 0x6BDB, 0x725F, /* 0xB0 */
+ 0x7261, 0x7441, 0x7738, 0x77DB, 0x8017, 0x82BC, 0x8305, 0x8B00, /* 0xC0 */
+ 0x8B28, 0x8C8C, 0x6728, 0x6C90, 0x7267, 0x76EE, 0x7766, 0x7A46, /* 0xC0 */
+ 0x9DA9, 0x6B7F, 0x6C92, 0x5922, 0x6726, 0x8499, 0x536F, 0x5893, /* 0xD0 */
+ 0x5999, 0x5EDF, 0x63CF, 0x6634, 0x6773, 0x6E3A, 0x732B, 0x7AD7, /* 0xD0 */
+ 0x82D7, 0x9328, 0x52D9, 0x5DEB, 0x61AE, 0x61CB, 0x620A, 0x62C7, /* 0xE0 */
+ 0x64AB, 0x65E0, 0x6959, 0x6B66, 0x6BCB, 0x7121, 0x73F7, 0x755D, /* 0xE0 */
+ 0x7E46, 0x821E, 0x8302, 0x856A, 0x8AA3, 0x8CBF, 0x9727, 0x9D61, /* 0xF0 */
+ 0x58A8, 0x9ED8, 0x5011, 0x520E, 0x543B, 0x554F, 0x6587 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_DA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6C76, 0x7D0A, 0x7D0B, 0x805E, 0x868A, 0x9580, 0x96EF, /* 0xA0 */
+ 0x52FF, 0x6C95, 0x7269, 0x5473, 0x5A9A, 0x5C3E, 0x5D4B, 0x5F4C, /* 0xA0 */
+ 0x5FAE, 0x672A, 0x68B6, 0x6963, 0x6E3C, 0x6E44, 0x7709, 0x7C73, /* 0xB0 */
+ 0x7F8E, 0x8587, 0x8B0E, 0x8FF7, 0x9761, 0x9EF4, 0x5CB7, 0x60B6, /* 0xB0 */
+ 0x610D, 0x61AB, 0x654F, 0x65FB, 0x65FC, 0x6C11, 0x6CEF, 0x739F, /* 0xC0 */
+ 0x73C9, 0x7DE1, 0x9594, 0x5BC6, 0x871C, 0x8B10, 0x525D, 0x535A, /* 0xC0 */
+ 0x62CD, 0x640F, 0x64B2, 0x6734, 0x6A38, 0x6CCA, 0x73C0, 0x749E, /* 0xD0 */
+ 0x7B94, 0x7C95, 0x7E1B, 0x818A, 0x8236, 0x8584, 0x8FEB, 0x96F9, /* 0xD0 */
+ 0x99C1, 0x4F34, 0x534A, 0x53CD, 0x53DB, 0x62CC, 0x642C, 0x6500, /* 0xE0 */
+ 0x6591, 0x69C3, 0x6CEE, 0x6F58, 0x73ED, 0x7554, 0x7622, 0x76E4, /* 0xE0 */
+ 0x76FC, 0x78D0, 0x78FB, 0x792C, 0x7D46, 0x822C, 0x87E0, 0x8FD4, /* 0xF0 */
+ 0x9812, 0x98EF, 0x52C3, 0x62D4, 0x64A5, 0x6E24, 0x6F51 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_DB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x767C, 0x8DCB, 0x91B1, 0x9262, 0x9AEE, 0x9B43, 0x5023, /* 0xA0 */
+ 0x508D, 0x574A, 0x59A8, 0x5C28, 0x5E47, 0x5F77, 0x623F, 0x653E, /* 0xA0 */
+ 0x65B9, 0x65C1, 0x6609, 0x678B, 0x699C, 0x6EC2, 0x78C5, 0x7D21, /* 0xB0 */
+ 0x80AA, 0x8180, 0x822B, 0x82B3, 0x84A1, 0x868C, 0x8A2A, 0x8B17, /* 0xB0 */
+ 0x90A6, 0x9632, 0x9F90, 0x500D, 0x4FF3, 0xF963, 0x57F9, 0x5F98, /* 0xC0 */
+ 0x62DC, 0x6392, 0x676F, 0x6E43, 0x7119, 0x76C3, 0x80CC, 0x80DA, /* 0xC0 */
+ 0x88F4, 0x88F5, 0x8919, 0x8CE0, 0x8F29, 0x914D, 0x966A, 0x4F2F, /* 0xD0 */
+ 0x4F70, 0x5E1B, 0x67CF, 0x6822, 0x767D, 0x767E, 0x9B44, 0x5E61, /* 0xD0 */
+ 0x6A0A, 0x7169, 0x71D4, 0x756A, 0xF964, 0x7E41, 0x8543, 0x85E9, /* 0xE0 */
+ 0x98DC, 0x4F10, 0x7B4F, 0x7F70, 0x95A5, 0x51E1, 0x5E06, 0x68B5, /* 0xE0 */
+ 0x6C3E, 0x6C4E, 0x6CDB, 0x72AF, 0x7BC4, 0x8303, 0x6CD5, 0x743A, /* 0xF0 */
+ 0x50FB, 0x5288, 0x58C1, 0x64D8, 0x6A97, 0x74A7, 0x7656 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_DC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x78A7, 0x8617, 0x95E2, 0x9739, 0xF965, 0x535E, 0x5F01, /* 0xA0 */
+ 0x8B8A, 0x8FA8, 0x8FAF, 0x908A, 0x5225, 0x77A5, 0x9C49, 0x9F08, /* 0xA0 */
+ 0x4E19, 0x5002, 0x5175, 0x5C5B, 0x5E77, 0x661E, 0x663A, 0x67C4, /* 0xB0 */
+ 0x68C5, 0x70B3, 0x7501, 0x75C5, 0x79C9, 0x7ADD, 0x8F27, 0x9920, /* 0xB0 */
+ 0x9A08, 0x4FDD, 0x5821, 0x5831, 0x5BF6, 0x666E, 0x6B65, 0x6D11, /* 0xC0 */
+ 0x6E7A, 0x6F7D, 0x73E4, 0x752B, 0x83E9, 0x88DC, 0x8913, 0x8B5C, /* 0xC0 */
+ 0x8F14, 0x4F0F, 0x50D5, 0x5310, 0x535C, 0x5B93, 0x5FA9, 0x670D, /* 0xD0 */
+ 0x798F, 0x8179, 0x832F, 0x8514, 0x8907, 0x8986, 0x8F39, 0x8F3B, /* 0xD0 */
+ 0x99A5, 0x9C12, 0x672C, 0x4E76, 0x4FF8, 0x5949, 0x5C01, 0x5CEF, /* 0xE0 */
+ 0x5CF0, 0x6367, 0x68D2, 0x70FD, 0x71A2, 0x742B, 0x7E2B, 0x84EC, /* 0xE0 */
+ 0x8702, 0x9022, 0x92D2, 0x9CF3, 0x4E0D, 0x4ED8, 0x4FEF, 0x5085, /* 0xF0 */
+ 0x5256, 0x526F, 0x5426, 0x5490, 0x57E0, 0x592B, 0x5A66 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_DD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5B5A, 0x5B75, 0x5BCC, 0x5E9C, 0xF966, 0x6276, 0x6577, /* 0xA0 */
+ 0x65A7, 0x6D6E, 0x6EA5, 0x7236, 0x7B26, 0x7C3F, 0x7F36, 0x8150, /* 0xA0 */
+ 0x8151, 0x819A, 0x8240, 0x8299, 0x83A9, 0x8A03, 0x8CA0, 0x8CE6, /* 0xB0 */
+ 0x8CFB, 0x8D74, 0x8DBA, 0x90E8, 0x91DC, 0x961C, 0x9644, 0x99D9, /* 0xB0 */
+ 0x9CE7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58B3, 0x5954, 0x596E, /* 0xC0 */
+ 0x5FFF, 0x61A4, 0x626E, 0x6610, 0x6C7E, 0x711A, 0x76C6, 0x7C89, /* 0xC0 */
+ 0x7CDE, 0x7D1B, 0x82AC, 0x8CC1, 0x96F0, 0xF967, 0x4F5B, 0x5F17, /* 0xD0 */
+ 0x5F7F, 0x62C2, 0x5D29, 0x670B, 0x68DA, 0x787C, 0x7E43, 0x9D6C, /* 0xD0 */
+ 0x4E15, 0x5099, 0x5315, 0x532A, 0x5351, 0x5983, 0x5A62, 0x5E87, /* 0xE0 */
+ 0x60B2, 0x618A, 0x6249, 0x6279, 0x6590, 0x6787, 0x69A7, 0x6BD4, /* 0xE0 */
+ 0x6BD6, 0x6BD7, 0x6BD8, 0x6CB8, 0xF968, 0x7435, 0x75FA, 0x7812, /* 0xF0 */
+ 0x7891, 0x79D5, 0x79D8, 0x7C83, 0x7DCB, 0x7FE1, 0x80A5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_DE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x813E, 0x81C2, 0x83F2, 0x871A, 0x88E8, 0x8AB9, 0x8B6C, /* 0xA0 */
+ 0x8CBB, 0x9119, 0x975E, 0x98DB, 0x9F3B, 0x56AC, 0x5B2A, 0x5F6C, /* 0xA0 */
+ 0x658C, 0x6AB3, 0x6BAF, 0x6D5C, 0x6FF1, 0x7015, 0x725D, 0x73AD, /* 0xB0 */
+ 0x8CA7, 0x8CD3, 0x983B, 0x6191, 0x6C37, 0x8058, 0x9A01, 0x4E4D, /* 0xB0 */
+ 0x4E8B, 0x4E9B, 0x4ED5, 0x4F3A, 0x4F3C, 0x4F7F, 0x4FDF, 0x50FF, /* 0xC0 */
+ 0x53F2, 0x53F8, 0x5506, 0x55E3, 0x56DB, 0x58EB, 0x5962, 0x5A11, /* 0xC0 */
+ 0x5BEB, 0x5BFA, 0x5C04, 0x5DF3, 0x5E2B, 0x5F99, 0x601D, 0x6368, /* 0xD0 */
+ 0x659C, 0x65AF, 0x67F6, 0x67FB, 0x68AD, 0x6B7B, 0x6C99, 0x6CD7, /* 0xD0 */
+ 0x6E23, 0x7009, 0x7345, 0x7802, 0x793E, 0x7940, 0x7960, 0x79C1, /* 0xE0 */
+ 0x7BE9, 0x7D17, 0x7D72, 0x8086, 0x820D, 0x838E, 0x84D1, 0x86C7, /* 0xE0 */
+ 0x88DF, 0x8A50, 0x8A5E, 0x8B1D, 0x8CDC, 0x8D66, 0x8FAD, 0x90AA, /* 0xF0 */
+ 0x98FC, 0x99DF, 0x9E9D, 0x524A, 0xF969, 0x6714, 0xF96A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_DF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5098, 0x522A, 0x5C71, 0x6563, 0x6C55, 0x73CA, 0x7523, /* 0xA0 */
+ 0x759D, 0x7B97, 0x849C, 0x9178, 0x9730, 0x4E77, 0x6492, 0x6BBA, /* 0xA0 */
+ 0x715E, 0x85A9, 0x4E09, 0xF96B, 0x6749, 0x68EE, 0x6E17, 0x829F, /* 0xB0 */
+ 0x8518, 0x886B, 0x63F7, 0x6F81, 0x9212, 0x98AF, 0x4E0A, 0x50B7, /* 0xB0 */
+ 0x50CF, 0x511F, 0x5546, 0x55AA, 0x5617, 0x5B40, 0x5C19, 0x5CE0, /* 0xC0 */
+ 0x5E38, 0x5E8A, 0x5EA0, 0x5EC2, 0x60F3, 0x6851, 0x6A61, 0x6E58, /* 0xC0 */
+ 0x723D, 0x7240, 0x72C0, 0x76F8, 0x7965, 0x7BB1, 0x7FD4, 0x88F3, /* 0xD0 */
+ 0x89F4, 0x8A73, 0x8C61, 0x8CDE, 0x971C, 0x585E, 0x74BD, 0x8CFD, /* 0xD0 */
+ 0x55C7, 0xF96C, 0x7A61, 0x7D22, 0x8272, 0x7272, 0x751F, 0x7525, /* 0xE0 */
+ 0xF96D, 0x7B19, 0x5885, 0x58FB, 0x5DBC, 0x5E8F, 0x5EB6, 0x5F90, /* 0xE0 */
+ 0x6055, 0x6292, 0x637F, 0x654D, 0x6691, 0x66D9, 0x66F8, 0x6816, /* 0xF0 */
+ 0x68F2, 0x7280, 0x745E, 0x7B6E, 0x7D6E, 0x7DD6, 0x7F72 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x80E5, 0x8212, 0x85AF, 0x897F, 0x8A93, 0x901D, 0x92E4, /* 0xA0 */
+ 0x9ECD, 0x9F20, 0x5915, 0x596D, 0x5E2D, 0x60DC, 0x6614, 0x6673, /* 0xA0 */
+ 0x6790, 0x6C50, 0x6DC5, 0x6F5F, 0x77F3, 0x78A9, 0x84C6, 0x91CB, /* 0xB0 */
+ 0x932B, 0x4ED9, 0x50CA, 0x5148, 0x5584, 0x5B0B, 0x5BA3, 0x6247, /* 0xB0 */
+ 0x657E, 0x65CB, 0x6E32, 0x717D, 0x7401, 0x7444, 0x7487, 0x74BF, /* 0xC0 */
+ 0x766C, 0x79AA, 0x7DDA, 0x7E55, 0x7FA8, 0x817A, 0x81B3, 0x8239, /* 0xC0 */
+ 0x861A, 0x87EC, 0x8A75, 0x8DE3, 0x9078, 0x9291, 0x9425, 0x994D, /* 0xD0 */
+ 0x9BAE, 0x5368, 0x5C51, 0x6954, 0x6CC4, 0x6D29, 0x6E2B, 0x820C, /* 0xD0 */
+ 0x859B, 0x893B, 0x8A2D, 0x8AAA, 0x96EA, 0x9F67, 0x5261, 0x66B9, /* 0xE0 */
+ 0x6BB2, 0x7E96, 0x87FE, 0x8D0D, 0x9583, 0x965D, 0x651D, 0x6D89, /* 0xE0 */
+ 0x71EE, 0xF96E, 0x57CE, 0x59D3, 0x5BAC, 0x6027, 0x60FA, 0x6210, /* 0xF0 */
+ 0x661F, 0x665F, 0x7329, 0x73F9, 0x76DB, 0x7701, 0x7B6C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8056, 0x8072, 0x8165, 0x8AA0, 0x9192, 0x4E16, 0x52E2, /* 0xA0 */
+ 0x6B72, 0x6D17, 0x7A05, 0x7B39, 0x7D30, 0xF96F, 0x8CB0, 0x53EC, /* 0xA0 */
+ 0x562F, 0x5851, 0x5BB5, 0x5C0F, 0x5C11, 0x5DE2, 0x6240, 0x6383, /* 0xB0 */
+ 0x6414, 0x662D, 0x68B3, 0x6CBC, 0x6D88, 0x6EAF, 0x701F, 0x70A4, /* 0xB0 */
+ 0x71D2, 0x7526, 0x758F, 0x758E, 0x7619, 0x7B11, 0x7BE0, 0x7C2B, /* 0xC0 */
+ 0x7D20, 0x7D39, 0x852C, 0x856D, 0x8607, 0x8A34, 0x900D, 0x9061, /* 0xC0 */
+ 0x90B5, 0x92B7, 0x97F6, 0x9A37, 0x4FD7, 0x5C6C, 0x675F, 0x6D91, /* 0xD0 */
+ 0x7C9F, 0x7E8C, 0x8B16, 0x8D16, 0x901F, 0x5B6B, 0x5DFD, 0x640D, /* 0xD0 */
+ 0x84C0, 0x905C, 0x98E1, 0x7387, 0x5B8B, 0x609A, 0x677E, 0x6DDE, /* 0xE0 */
+ 0x8A1F, 0x8AA6, 0x9001, 0x980C, 0x5237, 0xF970, 0x7051, 0x788E, /* 0xE0 */
+ 0x9396, 0x8870, 0x91D7, 0x4FEE, 0x53D7, 0x55FD, 0x56DA, 0x5782, /* 0xF0 */
+ 0x58FD, 0x5AC2, 0x5B88, 0x5CAB, 0x5CC0, 0x5E25, 0x6101 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x620D, 0x624B, 0x6388, 0x641C, 0x6536, 0x6578, 0x6A39, /* 0xA0 */
+ 0x6B8A, 0x6C34, 0x6D19, 0x6F31, 0x71E7, 0x72E9, 0x7378, 0x7407, /* 0xA0 */
+ 0x74B2, 0x7626, 0x7761, 0x79C0, 0x7A57, 0x7AEA, 0x7CB9, 0x7D8F, /* 0xB0 */
+ 0x7DAC, 0x7E61, 0x7F9E, 0x8129, 0x8331, 0x8490, 0x84DA, 0x85EA, /* 0xB0 */
+ 0x8896, 0x8AB0, 0x8B90, 0x8F38, 0x9042, 0x9083, 0x916C, 0x9296, /* 0xC0 */
+ 0x92B9, 0x968B, 0x96A7, 0x96A8, 0x96D6, 0x9700, 0x9808, 0x9996, /* 0xC0 */
+ 0x9AD3, 0x9B1A, 0x53D4, 0x587E, 0x5919, 0x5B70, 0x5BBF, 0x6DD1, /* 0xD0 */
+ 0x6F5A, 0x719F, 0x7421, 0x74B9, 0x8085, 0x83FD, 0x5DE1, 0x5F87, /* 0xD0 */
+ 0x5FAA, 0x6042, 0x65EC, 0x6812, 0x696F, 0x6A53, 0x6B89, 0x6D35, /* 0xE0 */
+ 0x6DF3, 0x73E3, 0x76FE, 0x77AC, 0x7B4D, 0x7D14, 0x8123, 0x821C, /* 0xE0 */
+ 0x8340, 0x84F4, 0x8563, 0x8A62, 0x8AC4, 0x9187, 0x931E, 0x9806, /* 0xF0 */
+ 0x99B4, 0x620C, 0x8853, 0x8FF0, 0x9265, 0x5D07, 0x5D27 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5D69, 0x745F, 0x819D, 0x8768, 0x6FD5, 0x62FE, 0x7FD2, /* 0xA0 */
+ 0x8936, 0x8972, 0x4E1E, 0x4E58, 0x50E7, 0x52DD, 0x5347, 0x627F, /* 0xA0 */
+ 0x6607, 0x7E69, 0x8805, 0x965E, 0x4F8D, 0x5319, 0x5636, 0x59CB, /* 0xB0 */
+ 0x5AA4, 0x5C38, 0x5C4E, 0x5C4D, 0x5E02, 0x5F11, 0x6043, 0x65BD, /* 0xB0 */
+ 0x662F, 0x6642, 0x67BE, 0x67F4, 0x731C, 0x77E2, 0x793A, 0x7FC5, /* 0xC0 */
+ 0x8494, 0x84CD, 0x8996, 0x8A66, 0x8A69, 0x8AE1, 0x8C55, 0x8C7A, /* 0xC0 */
+ 0x57F4, 0x5BD4, 0x5F0F, 0x606F, 0x62ED, 0x690D, 0x6B96, 0x6E5C, /* 0xD0 */
+ 0x7184, 0x7BD2, 0x8755, 0x8B58, 0x8EFE, 0x98DF, 0x98FE, 0x4F38, /* 0xD0 */
+ 0x4F81, 0x4FE1, 0x547B, 0x5A20, 0x5BB8, 0x613C, 0x65B0, 0x6668, /* 0xE0 */
+ 0x71FC, 0x7533, 0x795E, 0x7D33, 0x814E, 0x81E3, 0x8398, 0x85AA, /* 0xE0 */
+ 0x85CE, 0x8703, 0x8A0A, 0x8EAB, 0x8F9B, 0xF971, 0x8FC5, 0x5931, /* 0xF0 */
+ 0x5BA4, 0x5BE6, 0x6089, 0x5BE9, 0x5C0B, 0x5FC3, 0x6C81 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF972, 0x6DF1, 0x700B, 0x751A, 0x82AF, 0x8AF6, 0x4EC0, /* 0xA0 */
+ 0x5341, 0xF973, 0x96D9, 0x6C0F, 0x4E9E, 0x4FC4, 0x5152, 0x555E, /* 0xA0 */
+ 0x5A25, 0x5CE8, 0x6211, 0x7259, 0x82BD, 0x83AA, 0x86FE, 0x8859, /* 0xB0 */
+ 0x8A1D, 0x963F, 0x96C5, 0x9913, 0x9D09, 0x9D5D, 0x580A, 0x5CB3, /* 0xB0 */
+ 0x5DBD, 0x5E44, 0x60E1, 0x6115, 0x63E1, 0x6A02, 0x6E25, 0x9102, /* 0xC0 */
+ 0x9354, 0x984E, 0x9C10, 0x9F77, 0x5B89, 0x5CB8, 0x6309, 0x664F, /* 0xC0 */
+ 0x6848, 0x773C, 0x96C1, 0x978D, 0x9854, 0x9B9F, 0x65A1, 0x8B01, /* 0xD0 */
+ 0x8ECB, 0x95BC, 0x5535, 0x5CA9, 0x5DD6, 0x5EB5, 0x6697, 0x764C, /* 0xD0 */
+ 0x83F4, 0x95C7, 0x58D3, 0x62BC, 0x72CE, 0x9D28, 0x4EF0, 0x592E, /* 0xE0 */
+ 0x600F, 0x663B, 0x6B83, 0x79E7, 0x9D26, 0x5393, 0x54C0, 0x57C3, /* 0xE0 */
+ 0x5D16, 0x611B, 0x66D6, 0x6DAF, 0x788D, 0x827E, 0x9698, 0x9744, /* 0xF0 */
+ 0x5384, 0x627C, 0x6396, 0x6DB2, 0x7E0A, 0x814B, 0x984D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6AFB, 0x7F4C, 0x9DAF, 0x9E1A, 0x4E5F, 0x503B, 0x51B6, /* 0xA0 */
+ 0x591C, 0x60F9, 0x63F6, 0x6930, 0x723A, 0x8036, 0xF974, 0x91CE, /* 0xA0 */
+ 0x5F31, 0xF975, 0xF976, 0x7D04, 0x82E5, 0x846F, 0x84BB, 0x85E5, /* 0xB0 */
+ 0x8E8D, 0xF977, 0x4F6F, 0xF978, 0xF979, 0x58E4, 0x5B43, 0x6059, /* 0xB0 */
+ 0x63DA, 0x6518, 0x656D, 0x6698, 0xF97A, 0x694A, 0x6A23, 0x6D0B, /* 0xC0 */
+ 0x7001, 0x716C, 0x75D2, 0x760D, 0x79B3, 0x7A70, 0xF97B, 0x7F8A, /* 0xC0 */
+ 0xF97C, 0x8944, 0xF97D, 0x8B93, 0x91C0, 0x967D, 0xF97E, 0x990A, /* 0xD0 */
+ 0x5704, 0x5FA1, 0x65BC, 0x6F01, 0x7600, 0x79A6, 0x8A9E, 0x99AD, /* 0xD0 */
+ 0x9B5A, 0x9F6C, 0x5104, 0x61B6, 0x6291, 0x6A8D, 0x81C6, 0x5043, /* 0xE0 */
+ 0x5830, 0x5F66, 0x7109, 0x8A00, 0x8AFA, 0x5B7C, 0x8616, 0x4FFA, /* 0xE0 */
+ 0x513C, 0x56B4, 0x5944, 0x63A9, 0x6DF9, 0x5DAA, 0x696D, 0x5186, /* 0xF0 */
+ 0x4E88, 0x4F59, 0xF97F, 0xF980, 0xF981, 0x5982, 0xF982 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF983, 0x6B5F, 0x6C5D, 0xF984, 0x74B5, 0x7916, 0xF985, /* 0xA0 */
+ 0x8207, 0x8245, 0x8339, 0x8F3F, 0x8F5D, 0xF986, 0x9918, 0xF987, /* 0xA0 */
+ 0xF988, 0xF989, 0x4EA6, 0xF98A, 0x57DF, 0x5F79, 0x6613, 0xF98B, /* 0xB0 */
+ 0xF98C, 0x75AB, 0x7E79, 0x8B6F, 0xF98D, 0x9006, 0x9A5B, 0x56A5, /* 0xB0 */
+ 0x5827, 0x59F8, 0x5A1F, 0x5BB4, 0xF98E, 0x5EF6, 0xF98F, 0xF990, /* 0xC0 */
+ 0x6350, 0x633B, 0xF991, 0x693D, 0x6C87, 0x6CBF, 0x6D8E, 0x6D93, /* 0xC0 */
+ 0x6DF5, 0x6F14, 0xF992, 0x70DF, 0x7136, 0x7159, 0xF993, 0x71C3, /* 0xD0 */
+ 0x71D5, 0xF994, 0x784F, 0x786F, 0xF995, 0x7B75, 0x7DE3, 0xF996, /* 0xD0 */
+ 0x7E2F, 0xF997, 0x884D, 0x8EDF, 0xF998, 0xF999, 0xF99A, 0x925B, /* 0xE0 */
+ 0xF99B, 0x9CF6, 0xF99C, 0xF99D, 0xF99E, 0x6085, 0x6D85, 0xF99F, /* 0xE0 */
+ 0x71B1, 0xF9A0, 0xF9A1, 0x95B1, 0x53AD, 0xF9A2, 0xF9A3, 0xF9A4, /* 0xF0 */
+ 0x67D3, 0xF9A5, 0x708E, 0x7130, 0x7430, 0x8276, 0x82D2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF9A6, 0x95BB, 0x9AE5, 0x9E7D, 0x66C4, 0xF9A7, 0x71C1, /* 0xA0 */
+ 0x8449, 0xF9A8, 0xF9A9, 0x584B, 0xF9AA, 0xF9AB, 0x5DB8, 0x5F71, /* 0xA0 */
+ 0xF9AC, 0x6620, 0x668E, 0x6979, 0x69AE, 0x6C38, 0x6CF3, 0x6E36, /* 0xB0 */
+ 0x6F41, 0x6FDA, 0x701B, 0x702F, 0x7150, 0x71DF, 0x7370, 0xF9AD, /* 0xB0 */
+ 0x745B, 0xF9AE, 0x74D4, 0x76C8, 0x7A4E, 0x7E93, 0xF9AF, 0xF9B0, /* 0xC0 */
+ 0x82F1, 0x8A60, 0x8FCE, 0xF9B1, 0x9348, 0xF9B2, 0x9719, 0xF9B3, /* 0xC0 */
+ 0xF9B4, 0x4E42, 0x502A, 0xF9B5, 0x5208, 0x53E1, 0x66F3, 0x6C6D, /* 0xD0 */
+ 0x6FCA, 0x730A, 0x777F, 0x7A62, 0x82AE, 0x85DD, 0x8602, 0xF9B6, /* 0xD0 */
+ 0x88D4, 0x8A63, 0x8B7D, 0x8C6B, 0xF9B7, 0x92B3, 0xF9B8, 0x9713, /* 0xE0 */
+ 0x9810, 0x4E94, 0x4F0D, 0x4FC9, 0x50B2, 0x5348, 0x543E, 0x5433, /* 0xE0 */
+ 0x55DA, 0x5862, 0x58BA, 0x5967, 0x5A1B, 0x5BE4, 0x609F, 0xF9B9, /* 0xF0 */
+ 0x61CA, 0x6556, 0x65FF, 0x6664, 0x68A7, 0x6C5A, 0x6FB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x70CF, 0x71AC, 0x7352, 0x7B7D, 0x8708, 0x8AA4, 0x9C32, /* 0xA0 */
+ 0x9F07, 0x5C4B, 0x6C83, 0x7344, 0x7389, 0x923A, 0x6EAB, 0x7465, /* 0xA0 */
+ 0x761F, 0x7A69, 0x7E15, 0x860A, 0x5140, 0x58C5, 0x64C1, 0x74EE, /* 0xB0 */
+ 0x7515, 0x7670, 0x7FC1, 0x9095, 0x96CD, 0x9954, 0x6E26, 0x74E6, /* 0xB0 */
+ 0x7AA9, 0x7AAA, 0x81E5, 0x86D9, 0x8778, 0x8A1B, 0x5A49, 0x5B8C, /* 0xC0 */
+ 0x5B9B, 0x68A1, 0x6900, 0x6D63, 0x73A9, 0x7413, 0x742C, 0x7897, /* 0xC0 */
+ 0x7DE9, 0x7FEB, 0x8118, 0x8155, 0x839E, 0x8C4C, 0x962E, 0x9811, /* 0xD0 */
+ 0x66F0, 0x5F80, 0x65FA, 0x6789, 0x6C6A, 0x738B, 0x502D, 0x5A03, /* 0xD0 */
+ 0x6B6A, 0x77EE, 0x5916, 0x5D6C, 0x5DCD, 0x7325, 0x754F, 0xF9BA, /* 0xE0 */
+ 0xF9BB, 0x50E5, 0x51F9, 0x582F, 0x592D, 0x5996, 0x59DA, 0x5BE5, /* 0xE0 */
+ 0xF9BC, 0xF9BD, 0x5DA2, 0x62D7, 0x6416, 0x6493, 0x64FE, 0xF9BE, /* 0xF0 */
+ 0x66DC, 0xF9BF, 0x6A48, 0xF9C0, 0x71FF, 0x7464, 0xF9C1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_E9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7A88, 0x7AAF, 0x7E47, 0x7E5E, 0x8000, 0x8170, 0xF9C2, /* 0xA0 */
+ 0x87EF, 0x8981, 0x8B20, 0x9059, 0xF9C3, 0x9080, 0x9952, 0x617E, /* 0xA0 */
+ 0x6B32, 0x6D74, 0x7E1F, 0x8925, 0x8FB1, 0x4FD1, 0x50AD, 0x5197, /* 0xB0 */
+ 0x52C7, 0x57C7, 0x5889, 0x5BB9, 0x5EB8, 0x6142, 0x6995, 0x6D8C, /* 0xB0 */
+ 0x6E67, 0x6EB6, 0x7194, 0x7462, 0x7528, 0x752C, 0x8073, 0x8338, /* 0xC0 */
+ 0x84C9, 0x8E0A, 0x9394, 0x93DE, 0xF9C4, 0x4E8E, 0x4F51, 0x5076, /* 0xC0 */
+ 0x512A, 0x53C8, 0x53CB, 0x53F3, 0x5B87, 0x5BD3, 0x5C24, 0x611A, /* 0xD0 */
+ 0x6182, 0x65F4, 0x725B, 0x7397, 0x7440, 0x76C2, 0x7950, 0x7991, /* 0xD0 */
+ 0x79B9, 0x7D06, 0x7FBD, 0x828B, 0x85D5, 0x865E, 0x8FC2, 0x9047, /* 0xE0 */
+ 0x90F5, 0x91EA, 0x9685, 0x96E8, 0x96E9, 0x52D6, 0x5F67, 0x65ED, /* 0xE0 */
+ 0x6631, 0x682F, 0x715C, 0x7A36, 0x90C1, 0x980A, 0x4E91, 0xF9C5, /* 0xF0 */
+ 0x6A52, 0x6B9E, 0x6F90, 0x7189, 0x8018, 0x82B8, 0x8553 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_EA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x904B, 0x9695, 0x96F2, 0x97FB, 0x851A, 0x9B31, 0x4E90, /* 0xA0 */
+ 0x718A, 0x96C4, 0x5143, 0x539F, 0x54E1, 0x5713, 0x5712, 0x57A3, /* 0xA0 */
+ 0x5A9B, 0x5AC4, 0x5BC3, 0x6028, 0x613F, 0x63F4, 0x6C85, 0x6D39, /* 0xB0 */
+ 0x6E72, 0x6E90, 0x7230, 0x733F, 0x7457, 0x82D1, 0x8881, 0x8F45, /* 0xB0 */
+ 0x9060, 0xF9C6, 0x9662, 0x9858, 0x9D1B, 0x6708, 0x8D8A, 0x925E, /* 0xC0 */
+ 0x4F4D, 0x5049, 0x50DE, 0x5371, 0x570D, 0x59D4, 0x5A01, 0x5C09, /* 0xC0 */
+ 0x6170, 0x6690, 0x6E2D, 0x7232, 0x744B, 0x7DEF, 0x80C3, 0x840E, /* 0xD0 */
+ 0x8466, 0x853F, 0x875F, 0x885B, 0x8918, 0x8B02, 0x9055, 0x97CB, /* 0xD0 */
+ 0x9B4F, 0x4E73, 0x4F91, 0x5112, 0x516A, 0xF9C7, 0x552F, 0x55A9, /* 0xE0 */
+ 0x5B7A, 0x5BA5, 0x5E7C, 0x5E7D, 0x5EBE, 0x60A0, 0x60DF, 0x6108, /* 0xE0 */
+ 0x6109, 0x63C4, 0x6538, 0x6709, 0xF9C8, 0x67D4, 0x67DA, 0xF9C9, /* 0xF0 */
+ 0x6961, 0x6962, 0x6CB9, 0x6D27, 0xF9CA, 0x6E38, 0xF9CB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_EB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6FE1, 0x7336, 0x7337, 0xF9CC, 0x745C, 0x7531, 0xF9CD, /* 0xA0 */
+ 0x7652, 0xF9CE, 0xF9CF, 0x7DAD, 0x81FE, 0x8438, 0x88D5, 0x8A98, /* 0xA0 */
+ 0x8ADB, 0x8AED, 0x8E30, 0x8E42, 0x904A, 0x903E, 0x907A, 0x9149, /* 0xB0 */
+ 0x91C9, 0x936E, 0xF9D0, 0xF9D1, 0x5809, 0xF9D2, 0x6BD3, 0x8089, /* 0xB0 */
+ 0x80B2, 0xF9D3, 0xF9D4, 0x5141, 0x596B, 0x5C39, 0xF9D5, 0xF9D6, /* 0xC0 */
+ 0x6F64, 0x73A7, 0x80E4, 0x8D07, 0xF9D7, 0x9217, 0x958F, 0xF9D8, /* 0xC0 */
+ 0xF9D9, 0xF9DA, 0xF9DB, 0x807F, 0x620E, 0x701C, 0x7D68, 0x878D, /* 0xD0 */
+ 0xF9DC, 0x57A0, 0x6069, 0x6147, 0x6BB7, 0x8ABE, 0x9280, 0x96B1, /* 0xD0 */
+ 0x4E59, 0x541F, 0x6DEB, 0x852D, 0x9670, 0x97F3, 0x98EE, 0x63D6, /* 0xE0 */
+ 0x6CE3, 0x9091, 0x51DD, 0x61C9, 0x81BA, 0x9DF9, 0x4F9D, 0x501A, /* 0xE0 */
+ 0x5100, 0x5B9C, 0x610F, 0x61FF, 0x64EC, 0x6905, 0x6BC5, 0x7591, /* 0xF0 */
+ 0x77E3, 0x7FA9, 0x8264, 0x858F, 0x87FB, 0x8863, 0x8ABC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_EC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B70, 0x91AB, 0x4E8C, 0x4EE5, 0x4F0A, 0xF9DD, 0xF9DE, /* 0xA0 */
+ 0x5937, 0x59E8, 0xF9DF, 0x5DF2, 0x5F1B, 0x5F5B, 0x6021, 0xF9E0, /* 0xA0 */
+ 0xF9E1, 0xF9E2, 0xF9E3, 0x723E, 0x73E5, 0xF9E4, 0x7570, 0x75CD, /* 0xB0 */
+ 0xF9E5, 0x79FB, 0xF9E6, 0x800C, 0x8033, 0x8084, 0x82E1, 0x8351, /* 0xB0 */
+ 0xF9E7, 0xF9E8, 0x8CBD, 0x8CB3, 0x9087, 0xF9E9, 0xF9EA, 0x98F4, /* 0xC0 */
+ 0x990C, 0xF9EB, 0xF9EC, 0x7037, 0x76CA, 0x7FCA, 0x7FCC, 0x7FFC, /* 0xC0 */
+ 0x8B1A, 0x4EBA, 0x4EC1, 0x5203, 0x5370, 0xF9ED, 0x54BD, 0x56E0, /* 0xD0 */
+ 0x59FB, 0x5BC5, 0x5F15, 0x5FCD, 0x6E6E, 0xF9EE, 0xF9EF, 0x7D6A, /* 0xD0 */
+ 0x8335, 0xF9F0, 0x8693, 0x8A8D, 0xF9F1, 0x976D, 0x9777, 0xF9F2, /* 0xE0 */
+ 0xF9F3, 0x4E00, 0x4F5A, 0x4F7E, 0x58F9, 0x65E5, 0x6EA2, 0x9038, /* 0xE0 */
+ 0x93B0, 0x99B9, 0x4EFB, 0x58EC, 0x598A, 0x59D9, 0x6041, 0xF9F4, /* 0xF0 */
+ 0xF9F5, 0x7A14, 0xF9F6, 0x834F, 0x8CC3, 0x5165, 0x5344 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_ED[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF9F7, 0xF9F8, 0xF9F9, 0x4ECD, 0x5269, 0x5B55, 0x82BF, /* 0xA0 */
+ 0x4ED4, 0x523A, 0x54A8, 0x59C9, 0x59FF, 0x5B50, 0x5B57, 0x5B5C, /* 0xA0 */
+ 0x6063, 0x6148, 0x6ECB, 0x7099, 0x716E, 0x7386, 0x74F7, 0x75B5, /* 0xB0 */
+ 0x78C1, 0x7D2B, 0x8005, 0x81EA, 0x8328, 0x8517, 0x85C9, 0x8AEE, /* 0xB0 */
+ 0x8CC7, 0x96CC, 0x4F5C, 0x52FA, 0x56BC, 0x65AB, 0x6628, 0x707C, /* 0xC0 */
+ 0x70B8, 0x7235, 0x7DBD, 0x828D, 0x914C, 0x96C0, 0x9D72, 0x5B71, /* 0xC0 */
+ 0x68E7, 0x6B98, 0x6F7A, 0x76DE, 0x5C91, 0x66AB, 0x6F5B, 0x7BB4, /* 0xD0 */
+ 0x7C2A, 0x8836, 0x96DC, 0x4E08, 0x4ED7, 0x5320, 0x5834, 0x58BB, /* 0xD0 */
+ 0x58EF, 0x596C, 0x5C07, 0x5E33, 0x5E84, 0x5F35, 0x638C, 0x66B2, /* 0xE0 */
+ 0x6756, 0x6A1F, 0x6AA3, 0x6B0C, 0x6F3F, 0x7246, 0xF9FA, 0x7350, /* 0xE0 */
+ 0x748B, 0x7AE0, 0x7CA7, 0x8178, 0x81DF, 0x81E7, 0x838A, 0x846C, /* 0xF0 */
+ 0x8523, 0x8594, 0x85CF, 0x88DD, 0x8D13, 0x91AC, 0x9577 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_EE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x969C, 0x518D, 0x54C9, 0x5728, 0x5BB0, 0x624D, 0x6750, /* 0xA0 */
+ 0x683D, 0x6893, 0x6E3D, 0x6ED3, 0x707D, 0x7E21, 0x88C1, 0x8CA1, /* 0xA0 */
+ 0x8F09, 0x9F4B, 0x9F4E, 0x722D, 0x7B8F, 0x8ACD, 0x931A, 0x4F47, /* 0xB0 */
+ 0x4F4E, 0x5132, 0x5480, 0x59D0, 0x5E95, 0x62B5, 0x6775, 0x696E, /* 0xB0 */
+ 0x6A17, 0x6CAE, 0x6E1A, 0x72D9, 0x732A, 0x75BD, 0x7BB8, 0x7D35, /* 0xC0 */
+ 0x82E7, 0x83F9, 0x8457, 0x85F7, 0x8A5B, 0x8CAF, 0x8E87, 0x9019, /* 0xC0 */
+ 0x90B8, 0x96CE, 0x9F5F, 0x52E3, 0x540A, 0x5AE1, 0x5BC2, 0x6458, /* 0xD0 */
+ 0x6575, 0x6EF4, 0x72C4, 0xF9FB, 0x7684, 0x7A4D, 0x7B1B, 0x7C4D, /* 0xD0 */
+ 0x7E3E, 0x7FDF, 0x837B, 0x8B2B, 0x8CCA, 0x8D64, 0x8DE1, 0x8E5F, /* 0xE0 */
+ 0x8FEA, 0x8FF9, 0x9069, 0x93D1, 0x4F43, 0x4F7A, 0x50B3, 0x5168, /* 0xE0 */
+ 0x5178, 0x524D, 0x526A, 0x5861, 0x587C, 0x5960, 0x5C08, 0x5C55, /* 0xF0 */
+ 0x5EDB, 0x609B, 0x6230, 0x6813, 0x6BBF, 0x6C08, 0x6FB1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_EF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x714E, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7B4C, /* 0xA0 */
+ 0x7B8B, 0x7BAD, 0x7BC6, 0x7E8F, 0x8A6E, 0x8F3E, 0x8F49, 0x923F, /* 0xA0 */
+ 0x9293, 0x9322, 0x942B, 0x96FB, 0x985A, 0x986B, 0x991E, 0x5207, /* 0xB0 */
+ 0x622A, 0x6298, 0x6D59, 0x7664, 0x7ACA, 0x7BC0, 0x7D76, 0x5360, /* 0xB0 */
+ 0x5CBE, 0x5E97, 0x6F38, 0x70B9, 0x7C98, 0x9711, 0x9B8E, 0x9EDE, /* 0xC0 */
+ 0x63A5, 0x647A, 0x8776, 0x4E01, 0x4E95, 0x4EAD, 0x505C, 0x5075, /* 0xC0 */
+ 0x5448, 0x59C3, 0x5B9A, 0x5E40, 0x5EAD, 0x5EF7, 0x5F81, 0x60C5, /* 0xD0 */
+ 0x633A, 0x653F, 0x6574, 0x65CC, 0x6676, 0x6678, 0x67FE, 0x6968, /* 0xD0 */
+ 0x6A89, 0x6B63, 0x6C40, 0x6DC0, 0x6DE8, 0x6E1F, 0x6E5E, 0x701E, /* 0xE0 */
+ 0x70A1, 0x738E, 0x73FD, 0x753A, 0x775B, 0x7887, 0x798E, 0x7A0B, /* 0xE0 */
+ 0x7A7D, 0x7CBE, 0x7D8E, 0x8247, 0x8A02, 0x8AEA, 0x8C9E, 0x912D, /* 0xF0 */
+ 0x914A, 0x91D8, 0x9266, 0x92CC, 0x9320, 0x9706, 0x9756 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x975C, 0x9802, 0x9F0E, 0x5236, 0x5291, 0x557C, 0x5824, /* 0xA0 */
+ 0x5E1D, 0x5F1F, 0x608C, 0x63D0, 0x68AF, 0x6FDF, 0x796D, 0x7B2C, /* 0xA0 */
+ 0x81CD, 0x85BA, 0x88FD, 0x8AF8, 0x8E44, 0x918D, 0x9664, 0x969B, /* 0xB0 */
+ 0x973D, 0x984C, 0x9F4A, 0x4FCE, 0x5146, 0x51CB, 0x52A9, 0x5632, /* 0xB0 */
+ 0x5F14, 0x5F6B, 0x63AA, 0x64CD, 0x65E9, 0x6641, 0x66FA, 0x66F9, /* 0xC0 */
+ 0x671D, 0x689D, 0x68D7, 0x69FD, 0x6F15, 0x6F6E, 0x7167, 0x71E5, /* 0xC0 */
+ 0x722A, 0x74AA, 0x773A, 0x7956, 0x795A, 0x79DF, 0x7A20, 0x7A95, /* 0xD0 */
+ 0x7C97, 0x7CDF, 0x7D44, 0x7E70, 0x8087, 0x85FB, 0x86A4, 0x8A54, /* 0xD0 */
+ 0x8ABF, 0x8D99, 0x8E81, 0x9020, 0x906D, 0x91E3, 0x963B, 0x96D5, /* 0xE0 */
+ 0x9CE5, 0x65CF, 0x7C07, 0x8DB3, 0x93C3, 0x5B58, 0x5C0A, 0x5352, /* 0xE0 */
+ 0x62D9, 0x731D, 0x5027, 0x5B97, 0x5F9E, 0x60B0, 0x616B, 0x68D5, /* 0xF0 */
+ 0x6DD9, 0x742E, 0x7A2E, 0x7D42, 0x7D9C, 0x7E31, 0x816B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E2A, 0x8E35, 0x937E, 0x9418, 0x4F50, 0x5750, 0x5DE6, /* 0xA0 */
+ 0x5EA7, 0x632B, 0x7F6A, 0x4E3B, 0x4F4F, 0x4F8F, 0x505A, 0x59DD, /* 0xA0 */
+ 0x80C4, 0x546A, 0x5468, 0x55FE, 0x594F, 0x5B99, 0x5DDE, 0x5EDA, /* 0xB0 */
+ 0x665D, 0x6731, 0x67F1, 0x682A, 0x6CE8, 0x6D32, 0x6E4A, 0x6F8D, /* 0xB0 */
+ 0x70B7, 0x73E0, 0x7587, 0x7C4C, 0x7D02, 0x7D2C, 0x7DA2, 0x821F, /* 0xC0 */
+ 0x86DB, 0x8A3B, 0x8A85, 0x8D70, 0x8E8A, 0x8F33, 0x9031, 0x914E, /* 0xC0 */
+ 0x9152, 0x9444, 0x99D0, 0x7AF9, 0x7CA5, 0x4FCA, 0x5101, 0x51C6, /* 0xD0 */
+ 0x57C8, 0x5BEF, 0x5CFB, 0x6659, 0x6A3D, 0x6D5A, 0x6E96, 0x6FEC, /* 0xD0 */
+ 0x710C, 0x756F, 0x7AE3, 0x8822, 0x9021, 0x9075, 0x96CB, 0x99FF, /* 0xE0 */
+ 0x8301, 0x4E2D, 0x4EF2, 0x8846, 0x91CD, 0x537D, 0x6ADB, 0x696B, /* 0xE0 */
+ 0x6C41, 0x847A, 0x589E, 0x618E, 0x66FE, 0x62EF, 0x70DD, 0x7511, /* 0xF0 */
+ 0x75C7, 0x7E52, 0x84B8, 0x8B49, 0x8D08, 0x4E4B, 0x53EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x54AB, 0x5730, 0x5740, 0x5FD7, 0x6301, 0x6307, 0x646F, /* 0xA0 */
+ 0x652F, 0x65E8, 0x667A, 0x679D, 0x67B3, 0x6B62, 0x6C60, 0x6C9A, /* 0xA0 */
+ 0x6F2C, 0x77E5, 0x7825, 0x7949, 0x7957, 0x7D19, 0x80A2, 0x8102, /* 0xB0 */
+ 0x81F3, 0x829D, 0x82B7, 0x8718, 0x8A8C, 0xF9FC, 0x8D04, 0x8DBE, /* 0xB0 */
+ 0x9072, 0x76F4, 0x7A19, 0x7A37, 0x7E54, 0x8077, 0x5507, 0x55D4, /* 0xC0 */
+ 0x5875, 0x632F, 0x6422, 0x6649, 0x664B, 0x686D, 0x699B, 0x6B84, /* 0xC0 */
+ 0x6D25, 0x6EB1, 0x73CD, 0x7468, 0x74A1, 0x755B, 0x75B9, 0x76E1, /* 0xD0 */
+ 0x771E, 0x778B, 0x79E6, 0x7E09, 0x7E1D, 0x81FB, 0x852F, 0x8897, /* 0xD0 */
+ 0x8A3A, 0x8CD1, 0x8EEB, 0x8FB0, 0x9032, 0x93AD, 0x9663, 0x9673, /* 0xE0 */
+ 0x9707, 0x4F84, 0x53F1, 0x59EA, 0x5AC9, 0x5E19, 0x684E, 0x74C6, /* 0xE0 */
+ 0x75BE, 0x79E9, 0x7A92, 0x81A3, 0x86ED, 0x8CEA, 0x8DCC, 0x8FED, /* 0xF0 */
+ 0x659F, 0x6715, 0xF9FD, 0x57F7, 0x6F57, 0x7DDD, 0x8F2F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x93F6, 0x96C6, 0x5FB5, 0x61F2, 0x6F84, 0x4E14, 0x4F98, /* 0xA0 */
+ 0x501F, 0x53C9, 0x55DF, 0x5D6F, 0x5DEE, 0x6B21, 0x6B64, 0x78CB, /* 0xA0 */
+ 0x7B9A, 0xF9FE, 0x8E49, 0x8ECA, 0x906E, 0x6349, 0x643E, 0x7740, /* 0xB0 */
+ 0x7A84, 0x932F, 0x947F, 0x9F6A, 0x64B0, 0x6FAF, 0x71E6, 0x74A8, /* 0xB0 */
+ 0x74DA, 0x7AC4, 0x7C12, 0x7E82, 0x7CB2, 0x7E98, 0x8B9A, 0x8D0A, /* 0xC0 */
+ 0x947D, 0x9910, 0x994C, 0x5239, 0x5BDF, 0x64E6, 0x672D, 0x7D2E, /* 0xC0 */
+ 0x50ED, 0x53C3, 0x5879, 0x6158, 0x6159, 0x61FA, 0x65AC, 0x7AD9, /* 0xD0 */
+ 0x8B92, 0x8B96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5A3C, 0x5EE0, /* 0xD0 */
+ 0x5F70, 0x6134, 0x655E, 0x660C, 0x6636, 0x66A2, 0x69CD, 0x6EC4, /* 0xE0 */
+ 0x6F32, 0x7316, 0x7621, 0x7A93, 0x8139, 0x8259, 0x83D6, 0x84BC, /* 0xE0 */
+ 0x50B5, 0x57F0, 0x5BC0, 0x5BE8, 0x5F69, 0x63A1, 0x7826, 0x7DB5, /* 0xF0 */
+ 0x83DC, 0x8521, 0x91C7, 0x91F5, 0x518A, 0x67F5, 0x7B56 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8CAC, 0x51C4, 0x59BB, 0x60BD, 0x8655, 0x501C, 0xF9FF, /* 0xA0 */
+ 0x5254, 0x5C3A, 0x617D, 0x621A, 0x62D3, 0x64F2, 0x65A5, 0x6ECC, /* 0xA0 */
+ 0x7620, 0x810A, 0x8E60, 0x965F, 0x96BB, 0x4EDF, 0x5343, 0x5598, /* 0xB0 */
+ 0x5929, 0x5DDD, 0x64C5, 0x6CC9, 0x6DFA, 0x7394, 0x7A7F, 0x821B, /* 0xB0 */
+ 0x85A6, 0x8CE4, 0x8E10, 0x9077, 0x91E7, 0x95E1, 0x9621, 0x97C6, /* 0xC0 */
+ 0x51F8, 0x54F2, 0x5586, 0x5FB9, 0x64A4, 0x6F88, 0x7DB4, 0x8F1F, /* 0xC0 */
+ 0x8F4D, 0x9435, 0x50C9, 0x5C16, 0x6CBE, 0x6DFB, 0x751B, 0x77BB, /* 0xD0 */
+ 0x7C3D, 0x7C64, 0x8A79, 0x8AC2, 0x581E, 0x59BE, 0x5E16, 0x6377, /* 0xD0 */
+ 0x7252, 0x758A, 0x776B, 0x8ADC, 0x8CBC, 0x8F12, 0x5EF3, 0x6674, /* 0xE0 */
+ 0x6DF8, 0x807D, 0x83C1, 0x8ACB, 0x9751, 0x9BD6, 0xFA00, 0x5243, /* 0xE0 */
+ 0x66FF, 0x6D95, 0x6EEF, 0x7DE0, 0x8AE6, 0x902E, 0x905E, 0x9AD4, /* 0xF0 */
+ 0x521D, 0x527F, 0x54E8, 0x6194, 0x6284, 0x62DB, 0x68A2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6912, 0x695A, 0x6A35, 0x7092, 0x7126, 0x785D, 0x7901, /* 0xA0 */
+ 0x790E, 0x79D2, 0x7A0D, 0x8096, 0x8278, 0x82D5, 0x8349, 0x8549, /* 0xA0 */
+ 0x8C82, 0x8D85, 0x9162, 0x918B, 0x91AE, 0x4FC3, 0x56D1, 0x71ED, /* 0xB0 */
+ 0x77D7, 0x8700, 0x89F8, 0x5BF8, 0x5FD6, 0x6751, 0x90A8, 0x53E2, /* 0xB0 */
+ 0x585A, 0x5BF5, 0x60A4, 0x6181, 0x6460, 0x7E3D, 0x8070, 0x8525, /* 0xC0 */
+ 0x9283, 0x64AE, 0x50AC, 0x5D14, 0x6700, 0x589C, 0x62BD, 0x63A8, /* 0xC0 */
+ 0x690E, 0x6978, 0x6A1E, 0x6E6B, 0x76BA, 0x79CB, 0x82BB, 0x8429, /* 0xD0 */
+ 0x8ACF, 0x8DA8, 0x8FFD, 0x9112, 0x914B, 0x919C, 0x9310, 0x9318, /* 0xD0 */
+ 0x939A, 0x96DB, 0x9A36, 0x9C0D, 0x4E11, 0x755C, 0x795D, 0x7AFA, /* 0xE0 */
+ 0x7B51, 0x7BC9, 0x7E2E, 0x84C4, 0x8E59, 0x8E74, 0x8EF8, 0x9010, /* 0xE0 */
+ 0x6625, 0x693F, 0x7443, 0x51FA, 0x672E, 0x9EDC, 0x5145, 0x5FE0, /* 0xF0 */
+ 0x6C96, 0x87F2, 0x885D, 0x8877, 0x60B4, 0x81B5, 0x8403 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8D05, 0x53D6, 0x5439, 0x5634, 0x5A36, 0x5C31, 0x708A, /* 0xA0 */
+ 0x7FE0, 0x805A, 0x8106, 0x81ED, 0x8DA3, 0x9189, 0x9A5F, 0x9DF2, /* 0xA0 */
+ 0x5074, 0x4EC4, 0x53A0, 0x60FB, 0x6E2C, 0x5C64, 0x4F88, 0x5024, /* 0xB0 */
+ 0x55E4, 0x5CD9, 0x5E5F, 0x6065, 0x6894, 0x6CBB, 0x6DC4, 0x71BE, /* 0xB0 */
+ 0x75D4, 0x75F4, 0x7661, 0x7A1A, 0x7A49, 0x7DC7, 0x7DFB, 0x7F6E, /* 0xC0 */
+ 0x81F4, 0x86A9, 0x8F1C, 0x96C9, 0x99B3, 0x9F52, 0x5247, 0x52C5, /* 0xC0 */
+ 0x98ED, 0x89AA, 0x4E03, 0x67D2, 0x6F06, 0x4FB5, 0x5BE2, 0x6795, /* 0xD0 */
+ 0x6C88, 0x6D78, 0x741B, 0x7827, 0x91DD, 0x937C, 0x87C4, 0x79E4, /* 0xD0 */
+ 0x7A31, 0x5FEB, 0x4ED6, 0x54A4, 0x553E, 0x58AE, 0x59A5, 0x60F0, /* 0xE0 */
+ 0x6253, 0x62D6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99B1, 0x99DD, /* 0xE0 */
+ 0x502C, 0x5353, 0x5544, 0x577C, 0xFA01, 0x6258, 0xFA02, 0x64E2, /* 0xF0 */
+ 0x666B, 0x67DD, 0x6FC1, 0x6FEF, 0x7422, 0x7438, 0x8A17 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9438, 0x5451, 0x5606, 0x5766, 0x5F48, 0x619A, 0x6B4E, /* 0xA0 */
+ 0x7058, 0x70AD, 0x7DBB, 0x8A95, 0x596A, 0x812B, 0x63A2, 0x7708, /* 0xA0 */
+ 0x803D, 0x8CAA, 0x5854, 0x642D, 0x69BB, 0x5B95, 0x5E11, 0x6E6F, /* 0xB0 */
+ 0xFA03, 0x8569, 0x514C, 0x53F0, 0x592A, 0x6020, 0x614B, 0x6B86, /* 0xB0 */
+ 0x6C70, 0x6CF0, 0x7B1E, 0x80CE, 0x82D4, 0x8DC6, 0x90B0, 0x98B1, /* 0xC0 */
+ 0xFA04, 0x64C7, 0x6FA4, 0x6491, 0x6504, 0x514E, 0x5410, 0x571F, /* 0xC0 */
+ 0x8A0E, 0x615F, 0x6876, 0xFA05, 0x75DB, 0x7B52, 0x7D71, 0x901A, /* 0xD0 */
+ 0x5806, 0x69CC, 0x817F, 0x892A, 0x9000, 0x9839, 0x5078, 0x5957, /* 0xD0 */
+ 0x59AC, 0x6295, 0x900F, 0x9B2A, 0x615D, 0x7279, 0x95D6, 0x5761, /* 0xE0 */
+ 0x5A46, 0x5DF4, 0x628A, 0x64AD, 0x64FA, 0x6777, 0x6CE2, 0x6D3E, /* 0xE0 */
+ 0x722C, 0x7436, 0x7834, 0x7F77, 0x82AD, 0x8DDB, 0x9817, 0x5224, /* 0xF0 */
+ 0x5742, 0x677F, 0x7248, 0x74E3, 0x8CA9, 0x8FA6, 0x9211 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x962A, 0x516B, 0x53ED, 0x634C, 0x4F69, 0x5504, 0x6096, /* 0xA0 */
+ 0x6557, 0x6C9B, 0x6D7F, 0x724C, 0x72FD, 0x7A17, 0x8987, 0x8C9D, /* 0xA0 */
+ 0x5F6D, 0x6F8E, 0x70F9, 0x81A8, 0x610E, 0x4FBF, 0x504F, 0x6241, /* 0xB0 */
+ 0x7247, 0x7BC7, 0x7DE8, 0x7FE9, 0x904D, 0x97AD, 0x9A19, 0x8CB6, /* 0xB0 */
+ 0x576A, 0x5E73, 0x67B0, 0x840D, 0x8A55, 0x5420, 0x5B16, 0x5E63, /* 0xC0 */
+ 0x5EE2, 0x5F0A, 0x6583, 0x80BA, 0x853D, 0x9589, 0x965B, 0x4F48, /* 0xC0 */
+ 0x5305, 0x530D, 0x530F, 0x5486, 0x54FA, 0x5703, 0x5E03, 0x6016, /* 0xD0 */
+ 0x629B, 0x62B1, 0x6355, 0xFA06, 0x6CE1, 0x6D66, 0x75B1, 0x7832, /* 0xD0 */
+ 0x80DE, 0x812F, 0x82DE, 0x8461, 0x84B2, 0x888D, 0x8912, 0x900B, /* 0xE0 */
+ 0x92EA, 0x98FD, 0x9B91, 0x5E45, 0x66B4, 0x66DD, 0x7011, 0x7206, /* 0xE0 */
+ 0xFA07, 0x4FF5, 0x527D, 0x5F6A, 0x6153, 0x6753, 0x6A19, 0x6F02, /* 0xF0 */
+ 0x74E2, 0x7968, 0x8868, 0x8C79, 0x98C7, 0x98C4, 0x9A43 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x54C1, 0x7A1F, 0x6953, 0x8AF7, 0x8C4A, 0x98A8, 0x99AE, /* 0xA0 */
+ 0x5F7C, 0x62AB, 0x75B2, 0x76AE, 0x88AB, 0x907F, 0x9642, 0x5339, /* 0xA0 */
+ 0x5F3C, 0x5FC5, 0x6CCC, 0x73CC, 0x7562, 0x758B, 0x7B46, 0x82FE, /* 0xB0 */
+ 0x999D, 0x4E4F, 0x903C, 0x4E0B, 0x4F55, 0x53A6, 0x590F, 0x5EC8, /* 0xB0 */
+ 0x6630, 0x6CB3, 0x7455, 0x8377, 0x8766, 0x8CC0, 0x9050, 0x971E, /* 0xC0 */
+ 0x9C15, 0x58D1, 0x5B78, 0x8650, 0x8B14, 0x9DB4, 0x5BD2, 0x6068, /* 0xC0 */
+ 0x608D, 0x65F1, 0x6C57, 0x6F22, 0x6FA3, 0x701A, 0x7F55, 0x7FF0, /* 0xD0 */
+ 0x9591, 0x9592, 0x9650, 0x97D3, 0x5272, 0x8F44, 0x51FD, 0x542B, /* 0xD0 */
+ 0x54B8, 0x5563, 0x558A, 0x6ABB, 0x6DB5, 0x7DD8, 0x8266, 0x929C, /* 0xE0 */
+ 0x9677, 0x9E79, 0x5408, 0x54C8, 0x76D2, 0x86E4, 0x95A4, 0x95D4, /* 0xE0 */
+ 0x965C, 0x4EA2, 0x4F09, 0x59EE, 0x5AE6, 0x5DF7, 0x6052, 0x6297, /* 0xF0 */
+ 0x676D, 0x6841, 0x6C86, 0x6E2F, 0x7F38, 0x809B, 0x822A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_FA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFA08, 0xFA09, 0x9805, 0x4EA5, 0x5055, 0x54B3, 0x5793, /* 0xA0 */
+ 0x595A, 0x5B69, 0x5BB3, 0x61C8, 0x6977, 0x6D77, 0x7023, 0x87F9, /* 0xA0 */
+ 0x89E3, 0x8A72, 0x8AE7, 0x9082, 0x99ED, 0x9AB8, 0x52BE, 0x6838, /* 0xB0 */
+ 0x5016, 0x5E78, 0x674F, 0x8347, 0x884C, 0x4EAB, 0x5411, 0x56AE, /* 0xB0 */
+ 0x73E6, 0x9115, 0x97FF, 0x9909, 0x9957, 0x9999, 0x5653, 0x589F, /* 0xC0 */
+ 0x865B, 0x8A31, 0x61B2, 0x6AF6, 0x737B, 0x8ED2, 0x6B47, 0x96AA, /* 0xC0 */
+ 0x9A57, 0x5955, 0x7200, 0x8D6B, 0x9769, 0x4FD4, 0x5CF4, 0x5F26, /* 0xD0 */
+ 0x61F8, 0x665B, 0x6CEB, 0x70AB, 0x7384, 0x73B9, 0x73FE, 0x7729, /* 0xD0 */
+ 0x774D, 0x7D43, 0x7D62, 0x7E23, 0x8237, 0x8852, 0xFA0A, 0x8CE2, /* 0xE0 */
+ 0x9249, 0x986F, 0x5B51, 0x7A74, 0x8840, 0x9801, 0x5ACC, 0x4FE0, /* 0xE0 */
+ 0x5354, 0x593E, 0x5CFD, 0x633E, 0x6D79, 0x72F9, 0x8105, 0x8107, /* 0xF0 */
+ 0x83A2, 0x92CF, 0x9830, 0x4EA8, 0x5144, 0x5211, 0x578B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_FB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5F62, 0x6CC2, 0x6ECE, 0x7005, 0x7050, 0x70AF, 0x7192, /* 0xA0 */
+ 0x73E9, 0x7469, 0x834A, 0x87A2, 0x8861, 0x9008, 0x90A2, 0x93A3, /* 0xA0 */
+ 0x99A8, 0x516E, 0x5F57, 0x60E0, 0x6167, 0x66B3, 0x8559, 0x8E4A, /* 0xB0 */
+ 0x91AF, 0x978B, 0x4E4E, 0x4E92, 0x547C, 0x58D5, 0x58FA, 0x597D, /* 0xB0 */
+ 0x5CB5, 0x5F27, 0x6236, 0x6248, 0x660A, 0x6667, 0x6BEB, 0x6D69, /* 0xC0 */
+ 0x6DCF, 0x6E56, 0x6EF8, 0x6F94, 0x6FE0, 0x6FE9, 0x705D, 0x72D0, /* 0xC0 */
+ 0x7425, 0x745A, 0x74E0, 0x7693, 0x795C, 0x7CCA, 0x7E1E, 0x80E1, /* 0xD0 */
+ 0x82A6, 0x846B, 0x84BF, 0x864E, 0x865F, 0x8774, 0x8B77, 0x8C6A, /* 0xD0 */
+ 0x93AC, 0x9800, 0x9865, 0x60D1, 0x6216, 0x9177, 0x5A5A, 0x660F, /* 0xE0 */
+ 0x6DF7, 0x6E3E, 0x743F, 0x9B42, 0x5FFD, 0x60DA, 0x7B0F, 0x54C4, /* 0xE0 */
+ 0x5F18, 0x6C5E, 0x6CD3, 0x6D2A, 0x70D8, 0x7D05, 0x8679, 0x8A0C, /* 0xF0 */
+ 0x9D3B, 0x5316, 0x548C, 0x5B05, 0x6A3A, 0x706B, 0x7575 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_FC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x798D, 0x79BE, 0x82B1, 0x83EF, 0x8A71, 0x8B41, 0x8CA8, /* 0xA0 */
+ 0x9774, 0xFA0B, 0x64F4, 0x652B, 0x78BA, 0x78BB, 0x7A6B, 0x4E38, /* 0xA0 */
+ 0x559A, 0x5950, 0x5BA6, 0x5E7B, 0x60A3, 0x63DB, 0x6B61, 0x6665, /* 0xB0 */
+ 0x6853, 0x6E19, 0x7165, 0x74B0, 0x7D08, 0x9084, 0x9A69, 0x9C25, /* 0xB0 */
+ 0x6D3B, 0x6ED1, 0x733E, 0x8C41, 0x95CA, 0x51F0, 0x5E4C, 0x5FA8, /* 0xC0 */
+ 0x604D, 0x60F6, 0x6130, 0x614C, 0x6643, 0x6644, 0x69A5, 0x6CC1, /* 0xC0 */
+ 0x6E5F, 0x6EC9, 0x6F62, 0x714C, 0x749C, 0x7687, 0x7BC1, 0x7C27, /* 0xD0 */
+ 0x8352, 0x8757, 0x9051, 0x968D, 0x9EC3, 0x532F, 0x56DE, 0x5EFB, /* 0xD0 */
+ 0x5F8A, 0x6062, 0x6094, 0x61F7, 0x6666, 0x6703, 0x6A9C, 0x6DEE, /* 0xE0 */
+ 0x6FAE, 0x7070, 0x736A, 0x7E6A, 0x81BE, 0x8334, 0x86D4, 0x8AA8, /* 0xE0 */
+ 0x8CC4, 0x5283, 0x7372, 0x5B96, 0x6A6B, 0x9404, 0x54EE, 0x5686, /* 0xF0 */
+ 0x5B5D, 0x6548, 0x6585, 0x66C9, 0x689F, 0x6D8D, 0x6DC6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_KSC5601_FD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x723B, 0x80B4, 0x9175, 0x9A4D, 0x4FAF, 0x5019, 0x539A, /* 0xA0 */
+ 0x540E, 0x543C, 0x5589, 0x55C5, 0x5E3F, 0x5F8C, 0x673D, 0x7166, /* 0xA0 */
+ 0x73DD, 0x9005, 0x52DB, 0x52F3, 0x5864, 0x58CE, 0x7104, 0x718F, /* 0xB0 */
+ 0x71FB, 0x85B0, 0x8A13, 0x6688, 0x85A8, 0x55A7, 0x6684, 0x714A, /* 0xB0 */
+ 0x8431, 0x5349, 0x5599, 0x6BC1, 0x5F59, 0x5FBD, 0x63EE, 0x6689, /* 0xC0 */
+ 0x7147, 0x8AF1, 0x8F1D, 0x9EBE, 0x4F11, 0x643A, 0x70CB, 0x7566, /* 0xC0 */
+ 0x8667, 0x6064, 0x8B4E, 0x9DF8, 0x5147, 0x51F6, 0x5308, 0x6D36, /* 0xD0 */
+ 0x80F8, 0x9ED1, 0x6615, 0x6B23, 0x7098, 0x75D5, 0x5403, 0x5C79, /* 0xD0 */
+ 0x7D07, 0x8A16, 0x6B20, 0x6B3D, 0x6B46, 0x5438, 0x6070, 0x6D3D, /* 0xE0 */
+ 0x7FD5, 0x8208, 0x50D6, 0x51DE, 0x559C, 0x566B, 0x56CD, 0x59EC, /* 0xE0 */
+ 0x5B09, 0x5E0C, 0x6199, 0x6198, 0x6231, 0x665E, 0x66E6, 0x7199, /* 0xF0 */
+ 0x71B9, 0x71BA, 0x72A7, 0x79A7, 0x7A00, 0x7FB2, 0x8A70 /* 0xF0 */
+};
diff --git a/sal/textenc/tcvtkr2.tab b/sal/textenc/tcvtkr2.tab
new file mode 100644
index 000000000..ee8ab9a52
--- /dev/null
+++ b/sal/textenc/tcvtkr2.tab
@@ -0,0 +1,5406 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the DBCS to UniCode tables for the following */
+/* korean charsets: */
+/* KSC_5601, EUC-KR, MS_949, APPLE_KOREAN */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xA2AE, 0, 0, 0xA2B4, 0, 0, 0xA1D7, /* 0xA0 */
+ 0xA1A7, 0, 0xA8A3, 0, 0, 0xA1A9, 0xA2E7, 0, /* 0xA0 */
+ 0xA1C6, 0xA1BE, 0xA9F7, 0xA9F8, 0xA2A5, 0, 0xA2D2, 0xA1A4, /* 0xB0 */
+ 0xA2AC, 0xA9F6, 0xA8AC, 0, 0xA8F9, 0xA8F6, 0xA8FA, 0xA2AF, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xA8A1, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xA8A2, 0, 0, 0, 0, 0, 0, 0xA1BF, /* 0xD0 */
+ 0xA8AA, 0, 0, 0, 0, 0, 0xA8AD, 0xA9AC, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xA9A1, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xA9A3, 0, 0, 0, 0, 0, 0, 0xA1C0, /* 0xF0 */
+ 0xA9AA, 0, 0, 0, 0, 0, 0xA9AD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_01[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA9A2, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xA8A4, 0xA9A4, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xA9A5, 0xA8A6, 0xA9A6, 0, 0, 0, 0, /* 0x30 */
+ 0xA9A7, 0, 0, 0, 0, 0, 0, 0xA8A8, /* 0x30 */
+ 0xA9A8, 0xA8A9, 0xA9A9, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xA9B0, 0xA8AF, 0xA9AF, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xA8AB, 0xA9AB, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xA8AE, 0xA9AE /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_02[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA2A7, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xA2B0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xA2A8, 0xA2AB, 0xA2AA, 0xA2AD, 0, 0xA2A9 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_03[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA5C1, 0xA5C2, 0xA5C3, 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, /* 0x90 */
+ 0xA5C8, 0xA5C9, 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, /* 0x90 */
+ 0xA5D0, 0xA5D1, 0, 0xA5D2, 0xA5D3, 0xA5D4, 0xA5D5, 0xA5D6, /* 0xA0 */
+ 0xA5D7, 0xA5D8, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xA5E1, 0xA5E2, 0xA5E3, 0xA5E4, 0xA5E5, 0xA5E6, 0xA5E7, /* 0xB0 */
+ 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, 0xA5ED, 0xA5EE, 0xA5EF, /* 0xB0 */
+ 0xA5F0, 0xA5F1, 0, 0xA5F2, 0xA5F3, 0xA5F4, 0xA5F5, 0xA5F6, /* 0xC0 */
+ 0xA5F7, 0xA5F8 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_04[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xACA7, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xACA1, 0xACA2, 0xACA3, 0xACA4, 0xACA5, 0xACA6, 0xACA8, 0xACA9, /* 0x10 */
+ 0xACAA, 0xACAB, 0xACAC, 0xACAD, 0xACAE, 0xACAF, 0xACB0, 0xACB1, /* 0x10 */
+ 0xACB2, 0xACB3, 0xACB4, 0xACB5, 0xACB6, 0xACB7, 0xACB8, 0xACB9, /* 0x20 */
+ 0xACBA, 0xACBB, 0xACBC, 0xACBD, 0xACBE, 0xACBF, 0xACC0, 0xACC1, /* 0x20 */
+ 0xACD1, 0xACD2, 0xACD3, 0xACD4, 0xACD5, 0xACD6, 0xACD8, 0xACD9, /* 0x30 */
+ 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACDE, 0xACDF, 0xACE0, 0xACE1, /* 0x30 */
+ 0xACE2, 0xACE3, 0xACE4, 0xACE5, 0xACE6, 0xACE7, 0xACE8, 0xACE9, /* 0x40 */
+ 0xACEA, 0xACEB, 0xACEC, 0xACED, 0xACEE, 0xACEF, 0xACF0, 0xACF1, /* 0x40 */
+ 0, 0xACD7 /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_20[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1AA, 0, 0, /* 0x10 */
+ 0xA1AE, 0xA1AF, 0, 0, 0xA1B0, 0xA1B1, 0, 0, /* 0x10 */
+ 0xA2D3, 0xA2D4, 0, 0, 0, 0xA1A5, 0xA1A6, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xA2B6, 0, 0xA1C7, 0xA1C8, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xA1D8, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xA9F9, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA9FA, /* 0x70 */
+ 0, 0xA9FB, 0xA9FC, 0xA9FD, 0xA9FE, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xA2E6 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1C9, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xA2B5, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xA7A4, 0, 0, 0xA2E0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xA2E5, 0xA2E2, 0, 0, 0, 0xA7D9, 0, /* 0x20 */
+ 0, 0, 0, 0xA1CA, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xA8F7, 0xA8F8, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xA8FB, 0xA8FC, 0xA8FD, 0xA8FE, 0, /* 0x50 */
+ 0xA5B0, 0xA5B1, 0xA5B2, 0xA5B3, 0xA5B4, 0xA5B5, 0xA5B6, 0xA5B7, /* 0x60 */
+ 0xA5B8, 0xA5B9, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, 0xA5A5, 0xA5A6, 0xA5A7, 0xA5A8, /* 0x70 */
+ 0xA5A9, 0xA5AA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xA1E7, 0xA1E8, 0xA1E6, 0xA1E9, 0xA1EA, 0xA2D5, 0xA2D8, 0xA2D6, /* 0x90 */
+ 0xA2D9, 0xA2D7, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xA2A1, 0, 0xA2A2 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA2A3, 0, 0xA1D3, 0xA2A4, 0, 0, 0, 0xA1D4, /* 0x00 */
+ 0xA1F4, 0, 0, 0xA1F5, 0, 0, 0, 0xA2B3, /* 0x00 */
+ 0, 0xA2B2, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xA1EE, 0, 0, 0xA1F0, 0xA1C4, 0, /* 0x10 */
+ 0xA1D0, 0, 0, 0, 0, 0xA1AB, 0, 0xA1FC, /* 0x20 */
+ 0xA1FD, 0xA1FB, 0xA1FA, 0xA1F2, 0xA1F3, 0, 0xA2B1, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xA1C5, 0xA1F1, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xA1AD, 0xA1EF, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xA1D6, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA1C1, 0xA1D5, 0, 0, 0xA1C2, 0xA1C3, 0, 0, /* 0x60 */
+ 0, 0, 0xA1EC, 0xA1ED, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xA1F8, 0xA1F9, 0, 0, 0xA1F6, 0xA1F7, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xA2C1, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xA1D1 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_23[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1D2 /* 0x10 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_24[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA8E7, 0xA8E8, 0xA8E9, 0xA8EA, 0xA8EB, 0xA8EC, 0xA8ED, 0xA8EE, /* 0x60 */
+ 0xA8EF, 0xA8F0, 0xA8F1, 0xA8F2, 0xA8F3, 0xA8F4, 0xA8F5, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xA9E7, 0xA9E8, 0xA9E9, 0xA9EA, /* 0x70 */
+ 0xA9EB, 0xA9EC, 0xA9ED, 0xA9EE, 0xA9EF, 0xA9F0, 0xA9F1, 0xA9F2, /* 0x70 */
+ 0xA9F3, 0xA9F4, 0xA9F5, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xA9CD, 0xA9CE, 0xA9CF, 0xA9D0, /* 0x90 */
+ 0xA9D1, 0xA9D2, 0xA9D3, 0xA9D4, 0xA9D5, 0xA9D6, 0xA9D7, 0xA9D8, /* 0xA0 */
+ 0xA9D9, 0xA9DA, 0xA9DB, 0xA9DC, 0xA9DD, 0xA9DE, 0xA9DF, 0xA9E0, /* 0xA0 */
+ 0xA9E1, 0xA9E2, 0xA9E3, 0xA9E4, 0xA9E5, 0xA9E6, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xA8CD, 0xA8CE, 0xA8CF, 0xA8D0, 0xA8D1, 0xA8D2, 0xA8D3, 0xA8D4, /* 0xD0 */
+ 0xA8D5, 0xA8D6, 0xA8D7, 0xA8D8, 0xA8D9, 0xA8DA, 0xA8DB, 0xA8DC, /* 0xD0 */
+ 0xA8DD, 0xA8DE, 0xA8DF, 0xA8E0, 0xA8E1, 0xA8E2, 0xA8E3, 0xA8E4, /* 0xE0 */
+ 0xA8E5, 0xA8E6 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_25[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA6A1, 0xA6AC, 0xA6A2, 0xA6AD, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xA6A3, 0xA6C8, 0xA6C7, 0xA6AE, /* 0x00 */
+ 0xA6A4, 0xA6C2, 0xA6C1, 0xA6AF, 0xA6A6, 0xA6C6, 0xA6C5, 0xA6B1, /* 0x10 */
+ 0xA6A5, 0xA6C4, 0xA6C3, 0xA6B0, 0xA6A7, 0xA6BC, 0xA6C9, 0xA6CA, /* 0x10 */
+ 0xA6B7, 0xA6CB, 0xA6CC, 0xA6B2, 0xA6A9, 0xA6BE, 0xA6CD, 0xA6CE, /* 0x20 */
+ 0xA6B9, 0xA6CF, 0xA6D0, 0xA6B4, 0xA6A8, 0xA6D1, 0xA6D2, 0xA6B8, /* 0x20 */
+ 0xA6BD, 0xA6D3, 0xA6D4, 0xA6B3, 0xA6AA, 0xA6D5, 0xA6D6, 0xA6BA, /* 0x30 */
+ 0xA6BF, 0xA6D7, 0xA6D8, 0xA6B5, 0xA6AB, 0xA6D9, 0xA6DA, 0xA6BB, /* 0x30 */
+ 0xA6DB, 0xA6DC, 0xA6C0, 0xA6DD, 0xA6DE, 0xA6DF, 0xA6E0, 0xA6E1, /* 0x40 */
+ 0xA6E2, 0xA6E3, 0xA6E4, 0xA6B6, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xA2C6, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xA1E1, 0xA1E0, 0, 0xA2C3, 0xA2C7, 0xA2C8, 0xA2CB, 0xA2CA, /* 0xA0 */
+ 0xA2C9, 0xA2CC, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xA1E3, 0xA1E2, 0, 0, 0xA2BA, 0xA2B9, /* 0xB0 */
+ 0, 0, 0, 0, 0xA1E5, 0xA1E4, 0, 0, /* 0xB0 */
+ 0xA2B8, 0xA2B7, 0, 0, 0, 0, 0xA1DF, 0xA1DE, /* 0xC0 */
+ 0xA2C2, 0, 0, 0xA1DB, 0, 0, 0xA1DD, 0xA1DC, /* 0xC0 */
+ 0xA2C4, 0xA2C5 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1DA, 0xA1D9, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xA2CF, 0xA2CE, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xA2D0, 0, 0xA2D1, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xA1CF, 0, 0xA1CE, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA2BC, 0xA2BD, 0, 0xA2C0, 0xA2BB, 0xA2BE, 0, 0xA2BF, /* 0x60 */
+ 0xA2CD, 0xA2DB, 0xA2DC, 0, 0xA2DD, 0xA2DA /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A8, 0, 0, 0, 0, /* 0x00 */
+ 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, /* 0x00 */
+ 0xA1BC, 0xA1BD, 0, 0xA1EB, 0xA1B2, 0xA1B3, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xAAA1, 0xAAA2, 0xAAA3, 0xAAA4, 0xAAA5, 0xAAA6, 0xAAA7, /* 0x40 */
+ 0xAAA8, 0xAAA9, 0xAAAA, 0xAAAB, 0xAAAC, 0xAAAD, 0xAAAE, 0xAAAF, /* 0x40 */
+ 0xAAB0, 0xAAB1, 0xAAB2, 0xAAB3, 0xAAB4, 0xAAB5, 0xAAB6, 0xAAB7, /* 0x50 */
+ 0xAAB8, 0xAAB9, 0xAABA, 0xAABB, 0xAABC, 0xAABD, 0xAABE, 0xAABF, /* 0x50 */
+ 0xAAC0, 0xAAC1, 0xAAC2, 0xAAC3, 0xAAC4, 0xAAC5, 0xAAC6, 0xAAC7, /* 0x60 */
+ 0xAAC8, 0xAAC9, 0xAACA, 0xAACB, 0xAACC, 0xAACD, 0xAACE, 0xAACF, /* 0x60 */
+ 0xAAD0, 0xAAD1, 0xAAD2, 0xAAD3, 0xAAD4, 0xAAD5, 0xAAD6, 0xAAD7, /* 0x70 */
+ 0xAAD8, 0xAAD9, 0xAADA, 0xAADB, 0xAADC, 0xAADD, 0xAADE, 0xAADF, /* 0x70 */
+ 0xAAE0, 0xAAE1, 0xAAE2, 0xAAE3, 0xAAE4, 0xAAE5, 0xAAE6, 0xAAE7, /* 0x80 */
+ 0xAAE8, 0xAAE9, 0xAAEA, 0xAAEB, 0xAAEC, 0xAAED, 0xAAEE, 0xAAEF, /* 0x80 */
+ 0xAAF0, 0xAAF1, 0xAAF2, 0xAAF3, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xABA1, 0xABA2, 0xABA3, 0xABA4, 0xABA5, 0xABA6, 0xABA7, /* 0xA0 */
+ 0xABA8, 0xABA9, 0xABAA, 0xABAB, 0xABAC, 0xABAD, 0xABAE, 0xABAF, /* 0xA0 */
+ 0xABB0, 0xABB1, 0xABB2, 0xABB3, 0xABB4, 0xABB5, 0xABB6, 0xABB7, /* 0xB0 */
+ 0xABB8, 0xABB9, 0xABBA, 0xABBB, 0xABBC, 0xABBD, 0xABBE, 0xABBF, /* 0xB0 */
+ 0xABC0, 0xABC1, 0xABC2, 0xABC3, 0xABC4, 0xABC5, 0xABC6, 0xABC7, /* 0xC0 */
+ 0xABC8, 0xABC9, 0xABCA, 0xABCB, 0xABCC, 0xABCD, 0xABCE, 0xABCF, /* 0xC0 */
+ 0xABD0, 0xABD1, 0xABD2, 0xABD3, 0xABD4, 0xABD5, 0xABD6, 0xABD7, /* 0xD0 */
+ 0xABD8, 0xABD9, 0xABDA, 0xABDB, 0xABDC, 0xABDD, 0xABDE, 0xABDF, /* 0xD0 */
+ 0xABE0, 0xABE1, 0xABE2, 0xABE3, 0xABE4, 0xABE5, 0xABE6, 0xABE7, /* 0xE0 */
+ 0xABE8, 0xABE9, 0xABEA, 0xABEB, 0xABEC, 0xABED, 0xABEE, 0xABEF, /* 0xE0 */
+ 0xABF0, 0xABF1, 0xABF2, 0xABF3, 0xABF4, 0xABF5, 0xABF6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_31[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, 0xA4A5, 0xA4A6, 0xA4A7, /* 0x30 */
+ 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, 0xA4AC, 0xA4AD, 0xA4AE, 0xA4AF, /* 0x30 */
+ 0xA4B0, 0xA4B1, 0xA4B2, 0xA4B3, 0xA4B4, 0xA4B5, 0xA4B6, 0xA4B7, /* 0x40 */
+ 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, 0xA4BE, 0xA4BF, /* 0x40 */
+ 0xA4C0, 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, /* 0x50 */
+ 0xA4C8, 0xA4C9, 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, /* 0x50 */
+ 0xA4D0, 0xA4D1, 0xA4D2, 0xA4D3, 0xA4D4, 0xA4D5, 0xA4D6, 0xA4D7, /* 0x60 */
+ 0xA4D8, 0xA4D9, 0xA4DA, 0xA4DB, 0xA4DC, 0xA4DD, 0xA4DE, 0xA4DF, /* 0x60 */
+ 0xA4E0, 0xA4E1, 0xA4E2, 0xA4E3, 0xA4E4, 0xA4E5, 0xA4E6, 0xA4E7, /* 0x70 */
+ 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, 0xA4ED, 0xA4EE, 0xA4EF, /* 0x70 */
+ 0xA4F0, 0xA4F1, 0xA4F2, 0xA4F3, 0xA4F4, 0xA4F5, 0xA4F6, 0xA4F7, /* 0x80 */
+ 0xA4F8, 0xA4F9, 0xA4FA, 0xA4FB, 0xA4FC, 0xA4FD, 0xA4FE /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA9B1, 0xA9B2, 0xA9B3, 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, 0xA9B8, /* 0x00 */
+ 0xA9B9, 0xA9BA, 0xA9BB, 0xA9BC, 0xA9BD, 0xA9BE, 0xA9BF, 0xA9C0, /* 0x00 */
+ 0xA9C1, 0xA9C2, 0xA9C3, 0xA9C4, 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, /* 0x10 */
+ 0xA9C9, 0xA9CA, 0xA9CB, 0xA9CC, 0xA2DF, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA8B1, 0xA8B2, 0xA8B3, 0xA8B4, 0xA8B5, 0xA8B6, 0xA8B7, 0xA8B8, /* 0x60 */
+ 0xA8B9, 0xA8BA, 0xA8BB, 0xA8BC, 0xA8BD, 0xA8BE, 0xA8BF, 0xA8C0, /* 0x60 */
+ 0xA8C1, 0xA8C2, 0xA8C3, 0xA8C4, 0xA8C5, 0xA8C6, 0xA8C7, 0xA8C8, /* 0x70 */
+ 0xA8C9, 0xA8CA, 0xA8CB, 0xA8CC, 0, 0, 0, 0xA2DE /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA7C9, 0xA7CA, 0xA7CB, 0xA7CC, 0xA7CD, 0, 0, 0, /* 0x80 */
+ 0xA7BA, 0xA7BB, 0xA7DC, 0xA7DD, 0xA7DE, 0xA7B6, 0xA7B7, 0xA7B8, /* 0x80 */
+ 0xA7D4, 0xA7D5, 0xA7D6, 0xA7D7, 0xA7D8, 0xA7A1, 0xA7A2, 0xA7A3, /* 0x90 */
+ 0xA7A5, 0xA7AB, 0xA7AC, 0xA7AD, 0xA7AE, 0xA7AF, 0xA7B0, 0xA7B1, /* 0x90 */
+ 0xA7B2, 0xA7B3, 0xA7B4, 0xA7A7, 0xA7A8, 0xA7A9, 0xA7AA, 0xA7BD, /* 0xA0 */
+ 0xA7BE, 0xA7E5, 0xA7E6, 0xA7E7, 0xA7E8, 0xA7E1, 0xA7E2, 0xA7E3, /* 0xA0 */
+ 0xA7BF, 0xA7C0, 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C5, 0xA7C6, /* 0xB0 */
+ 0xA7C7, 0xA7C8, 0xA7CE, 0xA7CF, 0xA7D0, 0xA7D1, 0xA7D2, 0xA7D3, /* 0xB0 */
+ 0xA7DA, 0xA7DB, 0xA2E3, 0xA7EC, 0xA7A6, 0xA7E0, 0xA7EF, 0xA2E1, /* 0xC0 */
+ 0xA7BC, 0xA7ED, 0xA7B5, 0, 0, 0, 0, 0xA7B9, /* 0xC0 */
+ 0xA7EA, 0, 0, 0xA7EB, 0, 0, 0xA7DF, 0, /* 0xD0 */
+ 0xA2E4, 0, 0, 0xA7E4, 0xA7EE, 0xA7E9 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xECE9, 0xEFCB, 0, 0xF6D2, 0, 0, 0, 0xD8B2, /* 0x00 */
+ 0xEDDB, 0xDFB2, 0xDFBE, 0xF9BB, 0, 0xDCF4, 0, 0, /* 0x00 */
+ 0, 0xF5E4, 0, 0, 0xF3A6, 0xDDE0, 0xE1A6, 0, /* 0x10 */
+ 0xCEF8, 0xDCB0, 0, 0, 0, 0, 0xE3AA, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF1E9, 0, 0, /* 0x20 */
+ 0, 0, 0xCDFA, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xFCAF, 0xD3A1, 0, 0xF1AB, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xE7D1, 0xD2AC, 0, 0xCEF9, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF1FD, 0, 0xDEBF, 0xFBBA, 0xF9B9, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xCED2, 0, /* 0x50 */
+ 0xE3AB, 0xEBE0, 0, 0, 0, 0xCEFA, 0xCBF7, 0xE5A5, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xCAE1, 0, 0xD4CC, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xEAE1, 0, 0, 0xDCE3, 0xDFAD, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xCBEB, 0, /* 0x70 */
+ 0, 0, 0xD5AF, 0, 0, 0, 0xD6F5, 0, /* 0x80 */
+ 0xE5F8, 0, 0, 0xDEC0, 0xECA3, 0, 0xE9CD, 0, /* 0x80 */
+ 0xEAA7, 0xE9F6, 0xFBBB, 0, 0xE7E9, 0xEFCC, 0, 0, /* 0x90 */
+ 0xD0E6, 0, 0, 0xDEC1, 0, 0, 0xE4AC, 0, /* 0x90 */
+ 0, 0xD8CC, 0xF9F1, 0, 0xCEDF, 0xFAA4, 0xE6B2, 0, /* 0xA0 */
+ 0xFAFB, 0, 0, 0xFABD, 0xCCC8, 0xEFCD, 0xD5D5, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xD3A2, 0, /* 0xB0 */
+ 0, 0, 0xECD1, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xE4A7, 0xECD2, 0, 0, 0xF6B1, 0, 0, 0xCEFB, /* 0xC0 */
+ 0, 0, 0xD0D1, 0xCBBF, 0, 0xEDA4, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xEDA8, 0xDEC2, 0xF6E2, 0xEDDC, /* 0xD0 */
+ 0xDCF5, 0xE0B9, 0, 0, 0, 0xD4CE, 0, 0xF4B5, /* 0xD0 */
+ 0, 0, 0, 0xD3DB, 0xD6B5, 0xECA4, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE4E6, 0, 0xF1EA, 0, 0, 0, 0xCBEC, 0xCBC0, /* 0xF0 */
+ 0, 0, 0, 0xECF2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD0EA, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xF9F2, 0xECA5, 0xD0DF, 0, 0xE7EA, 0xD0EB, 0xDCD1, /* 0x00 */
+ 0xDBE9, 0xFDCC, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDBD7, /* 0x20 */
+ 0, 0, 0, 0, 0xDAE1, 0, 0xD6B6, 0, /* 0x30 */
+ 0xE3DF, 0, 0xDEC3, 0, 0xDEC4, 0xCAA1, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xEEEC, 0, 0, 0xD3A3, 0xEEB7, /* 0x40 */
+ 0xF8CF, 0, 0, 0, 0, 0xEAC8, 0xEEB8, 0xF1AC, /* 0x40 */
+ 0xF1A5, 0xE9CE, 0, 0, 0, 0xF9BC, 0, 0, /* 0x50 */
+ 0, 0xE5F9, 0xECEA, 0xDDD6, 0xEDC2, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xF8A5, 0, 0, 0, 0, 0, 0xE5BA, /* 0x60 */
+ 0xDBD8, 0, 0, 0xCAA2, 0, 0, 0xD1CD, 0, /* 0x70 */
+ 0, 0, 0xEEED, 0, 0, 0, 0xECEB, 0xDEC5, /* 0x70 */
+ 0, 0xE3E0, 0, 0xCAC9, 0xF2E9, 0, 0xD5CE, 0, /* 0x80 */
+ 0xF6B6, 0, 0xCEC2, 0xD6C7, 0, 0xE3B4, 0, 0xF1AD, /* 0x80 */
+ 0, 0xEAE2, 0, 0, 0, 0, 0xD7C2, 0, /* 0x90 */
+ 0xF3A7, 0, 0, 0xCDEA, 0, 0xEBEE, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xD9B2, 0xFDA5, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xF6D5, 0xD5E2, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF8B5, /* 0xB0 */
+ 0, 0, 0xCCF5, 0xF5B5, 0xE4AD, 0, 0, 0, /* 0xC0 */
+ 0, 0xE7EB, 0xF1D5, 0, 0, 0, 0xF0BB, 0, /* 0xC0 */
+ 0, 0xE9B5, 0, 0xCCC9, 0xFAD5, 0, 0, 0xE1D4, /* 0xD0 */
+ 0, 0, 0xD7D6, 0, 0, 0xDCC1, 0, 0xDEC6, /* 0xD0 */
+ 0xFAEF, 0xE3E1, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xE1F3, 0xDCF6, /* 0xE0 */
+ 0, 0xCEFC, 0, 0xDBC4, 0, 0xF8F1, 0, 0, /* 0xF0 */
+ 0xDCE4, 0, 0xE5EF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCB1, 0, 0, 0, 0xD5D6, 0, /* 0x00 */
+ 0, 0xF3DA, 0, 0xCBC1, 0, 0xDBC3, 0, 0, /* 0x00 */
+ 0, 0xD9FA, 0xD3EE, 0, 0, 0, 0xFAB8, 0, /* 0x10 */
+ 0, 0xFDA6, 0xEBEF, 0, 0xF4A6, 0, 0xCCCA, 0xF3A8, /* 0x10 */
+ 0, 0xF3DB, 0, 0xDBA7, 0xF6B7, 0, 0xCFE6, 0xF0F2, /* 0x20 */
+ 0xCBDA, 0, 0xE7D2, 0xD7C3, 0xF6F0, 0xE8DE, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE5A6, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE5E7, 0, 0, 0, 0xCAA3, /* 0x40 */
+ 0xCCA7, 0xEAC9, 0, 0, 0, 0, 0, 0xF8B6, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xFAA5, 0, 0, /* 0x50 */
+ 0, 0, 0xF1AE, 0, 0xEFCE, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xCBED, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xF6B0, 0xEFCF, 0xE9CF, 0, /* 0x70 */
+ 0xF7DE, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xCED3, 0, 0, 0, 0, 0xDCF7, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xDBA8, 0, 0, /* 0x80 */
+ 0, 0xCBF8, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xDFA1, 0xDDE1, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xF5CA, 0xE9B6, 0, 0, /* 0xA0 */
+ 0, 0, 0xE7EC, 0xEEEE, 0, 0xF3F0, 0, 0xDFBF, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xCCCB, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xD0C1, 0, 0, /* 0xC0 */
+ 0, 0xF4D2, 0xE0BA, 0, 0, 0, 0, 0xDFC0, /* 0xC0 */
+ 0, 0xCEE0, 0, 0, 0, 0xDCD2, 0xFDEA, 0, /* 0xD0 */
+ 0, 0, 0xD6F6, 0, 0, 0, 0xEACA, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xE8E9, 0, 0xE3AC, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF3D0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xCAA4, 0, 0xDBF8, 0, 0, 0, 0xDEC7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEBF0, 0xF1D6, 0, 0, 0xE5E2, 0, 0xCCCC, 0, /* 0x00 */
+ 0, 0xCBFB, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xEAE3, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDFC1, /* 0x10 */
+ 0, 0xD6ED, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE9D0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xEEB9, 0, 0, 0, 0, 0xD5E3, /* 0x30 */
+ 0, 0, 0xD1D3, 0, 0xE5F0, 0, 0, 0, /* 0x30 */
+ 0xE8B4, 0xEBC3, 0, 0xEAAA, 0xFAFC, 0xF5F6, 0xF0BC, 0xFDD4, /* 0x40 */
+ 0xE0BB, 0xCEC3, 0, 0xD0BA, 0xF7BA, 0xD8F3, 0xF7CD, 0, /* 0x40 */
+ 0, 0, 0xE4AE, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xD4DF, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xD0E7, 0, 0, 0xECFD, 0, 0xD2AE, /* 0x60 */
+ 0xEEEF, 0xD5D7, 0xEAE4, 0xF8A2, 0xCDEB, 0xD7BF, 0xFBB1, 0, /* 0x60 */
+ 0, 0xCDEC, 0, 0, 0, 0xDCB2, 0xD0EC, 0xCEFD, /* 0x70 */
+ 0xEEF0, 0, 0, 0, 0xCCC2, 0, 0, 0, /* 0x70 */
+ 0xD0ED, 0, 0, 0, 0, 0, 0xE5F7, 0, /* 0x80 */
+ 0, 0, 0xF3FC, 0, 0, 0xEEA2, 0, 0, /* 0x80 */
+ 0, 0, 0xD9B3, 0, 0, 0xD8F4, 0, 0xE9B7, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xCEAE, 0, 0, 0, 0, 0xD9A2, 0, 0, /* 0xA0 */
+ 0, 0, 0xD8F1, 0, 0xD4CF, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xE5A7, 0xD5D2, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xD6A9, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF4A2, 0, 0xF1D7, 0, /* 0xC0 */
+ 0, 0xD5D8, 0, 0xF0BD, 0xD7D0, 0xD4D0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xD7CF, 0xEBEA, 0xFDEB, 0, /* 0xD0 */
+ 0, 0xDBED, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xFCC5, 0xCBC2, 0, 0, 0, 0, 0xFDD5, 0, /* 0xF0 */
+ 0xF4C8, 0xE8EA, 0xF5F3, 0, 0, 0xF9DE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD3EF, 0, 0, 0xECD3, 0, 0, 0xDDC2, 0xEFB7, /* 0x00 */
+ 0xE7D4, 0, 0xCACA, 0, 0, 0, 0xD9FB, 0, /* 0x00 */
+ 0, 0xFAFD, 0, 0, 0, 0, 0, 0xD6AA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF4F8, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xF7F7, 0xDCAC, 0, 0, /* 0x20 */
+ 0, 0xD7D7, 0xDFA2, 0, 0, 0, 0xCEBE, 0, /* 0x20 */
+ 0xD3F0, 0, 0, 0, 0, 0, 0xF0A4, 0xE1EC, /* 0x30 */
+ 0xCFE7, 0xF3CB, 0xEDA9, 0xCABE, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xF4EF, 0, 0, 0, 0xF6CE, /* 0x40 */
+ 0, 0, 0xDEFB, 0xD0BB, 0xD5B7, 0xEEF1, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF4A8, 0, 0xDCF8, 0, /* 0x50 */
+ 0, 0, 0, 0xCBA7, 0, 0xDACE, 0, 0, /* 0x50 */
+ 0, 0xE0E6, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xEDA5, 0xEEF2, 0, 0, 0, 0, 0xDCF9, /* 0x60 */
+ 0, 0, 0xF9DC, 0, 0, 0xF3DC, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF8F2, 0, 0xF4F9, /* 0x70 */
+ 0, 0, 0, 0xFCF1, 0, 0, 0, 0xD0BC, /* 0x80 */
+ 0xDBF9, 0xD7B1, 0, 0, 0, 0xCBFC, 0, 0, /* 0x80 */
+ 0, 0xF0A5, 0xCBFD, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xD5F4, 0, 0, 0, 0xCDED, /* 0x90 */
+ 0xCAA5, 0, 0, 0xD6AB, 0xD0C2, 0, 0, 0, /* 0xA0 */
+ 0, 0xF0BE, 0xD2BD, 0xCCA4, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xFAB6, 0, /* 0xB0 */
+ 0, 0xCCCD, 0, 0xDAFA, 0, 0xF6CF, 0, 0xE9B8, /* 0xC0 */
+ 0, 0xD8F5, 0, 0, 0, 0xCCCE, 0, 0, /* 0xC0 */
+ 0, 0, 0xD7CD, 0, 0, 0xD4D1, 0xE9ED, 0, /* 0xD0 */
+ 0xCAEB, 0xD9E2, 0, 0xFDB2, 0, 0xE3AD, 0xD6CC, 0xD9B4, /* 0xD0 */
+ 0, 0, 0xE1A7, 0xEED3, 0xD0C3, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xFDB3, 0, 0xD5E4, 0, 0, /* 0xF0 */
+ 0xCFE8, 0, 0xEDC3, 0xD0B2, 0, 0, 0xCEFE, 0xDAA8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF8D0, 0, 0, /* 0x00 */
+ 0xFDD6, 0, 0, 0, 0, 0xF8D1, 0, 0xF8D2, /* 0x00 */
+ 0xDCD3, 0, 0, 0, 0, 0xDDE2, 0xFBF9, 0xDDC1, /* 0x10 */
+ 0, 0xE3B5, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xEDDD, 0xCEC4, 0, 0xCBA1, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xDDE3, 0, 0, 0, 0, 0xFCDD, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF9AF, 0, 0, 0, 0, 0, 0xD2FB, /* 0x30 */
+ 0xCFA1, 0xE4A8, 0, 0xF4B6, 0xECFE, 0, 0, 0xE3AE, /* 0x40 */
+ 0xE7ED, 0xFDC1, 0xDAE2, 0, 0, 0xD8B3, 0, 0, /* 0x40 */
+ 0, 0xDDE4, 0xF0EF, 0xF6F1, 0xFAF0, 0, 0, 0xD1F5, /* 0x50 */
+ 0, 0, 0xDACF, 0, 0xDCD4, 0, 0xDCA6, 0, /* 0x50 */
+ 0xEFBF, 0, 0, 0, 0, 0, 0xCECF, 0, /* 0x60 */
+ 0xE0D9, 0, 0, 0, 0, 0, 0, 0xD9D6, /* 0x60 */
+ 0xECD4, 0xEACB, 0, 0, 0xCABF, 0xD5B0, 0, 0xCFE9, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF1ED, 0, 0xCCCF, /* 0x70 */
+ 0, 0, 0, 0, 0xE4F8, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xE4ED, 0, 0, 0, 0, /* 0x90 */
+ 0xD7D8, 0, 0xFDA7, 0, 0, 0, 0, 0xEAAB, /* 0x90 */
+ 0xF6B2, 0, 0, 0, 0, 0xCFF0, 0xF9BD, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xE6F4, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xCBDB, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF3D1, 0, 0, 0, 0, /* 0xC0 */
+ 0xE9D1, 0xF3A9, 0xD0E0, 0xE9D2, 0, 0xDAE3, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE2D2, 0, 0xF6A2, 0xE1F4, /* 0xD0 */
+ 0, 0, 0, 0xDAE4, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE7D5, 0xF5BF, 0xCFA2, 0xCDAF, 0xCFA3, 0, 0, /* 0xE0 */
+ 0, 0xCDB0, 0xF1FE, 0xD0A3, 0xE1AF, 0xF8A3, 0, 0xCAA6, /* 0xE0 */
+ 0xF7BB, 0xF2EA, 0xDEC8, 0xE9D3, 0, 0, 0, 0, /* 0xF0 */
+ 0xDEC9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFDDE, 0xCAC0, 0, 0, 0, /* 0x00 */
+ 0xF9EA, 0xD1CE, 0xEED4, 0, 0xD4D2, 0xD9A3, 0xFDA8, 0xD7D9, /* 0x00 */
+ 0xF7CE, 0xFABE, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xCFD6, 0, 0xD7F0, 0, 0xEBE1, /* 0x10 */
+ 0xF8C5, 0, 0, 0, 0, 0, 0xDCFA, 0, /* 0x20 */
+ 0, 0xDDC3, 0, 0xF9DF, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE7EF, 0, 0, 0, 0, /* 0x30 */
+ 0xFDE5, 0xF6A3, 0, 0xD9FC, 0xFDA9, 0, 0xE7EE, 0, /* 0x30 */
+ 0, 0, 0xD5E5, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEFD0, 0, 0xCDB1, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF7A2, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xF1B2, 0, 0xF1B1, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xCDB2, 0, 0xDAAB, 0, 0xCAA7, 0, 0, /* 0x70 */
+ 0, 0, 0, 0xE3E2, 0xFBBC, 0xD9A4, 0, 0, /* 0x70 */
+ 0xEEBA, 0, 0, 0, 0, 0, 0xF8D3, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xFBFA, 0, 0xCFA4, 0, /* 0x80 */
+ 0xDCFB, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF6E3, 0, 0, 0, /* 0xA0 */
+ 0xEDAA, 0, 0, 0xF2A1, 0xCEE1, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xFAA6, 0, 0, 0, 0, /* 0xB0 */
+ 0xF9E0, 0, 0, 0, 0, 0xECD6, 0, 0, /* 0xB0 */
+ 0xE4EE, 0xF9A1, 0, 0, 0xFBEF, 0, 0, 0, /* 0xC0 */
+ 0xF9EB, 0xEEA3, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xEAAC, 0, 0, 0, 0xCAA8, 0, 0, /* 0xE0 */
+ 0xF4FA, 0, 0, 0, 0, 0xCDD6, 0xFCF6, 0, /* 0xE0 */
+ 0, 0, 0xF4C9, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xF8D4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF8A6, 0, 0xDECA, 0xF2C6, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xD7DA, 0, /* 0x00 */
+ 0xD3D0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xD8C5, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEAE6, /* 0x20 */
+ 0, 0xF3DD, 0, 0, 0, 0xE4DA, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xF6E4, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF6F2, 0, 0xDFC2, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD9FD, /* 0x40 */
+ 0, 0, 0, 0xCCF6, 0, 0, 0xD3BA, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xE4AF, 0, /* 0x50 */
+ 0, 0, 0, 0xF9E1, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF0A6, 0, 0, 0, /* 0x70 */
+ 0xCBD3, 0, 0, 0, 0xE0BC, 0, 0xF4CA, 0xD4FA, /* 0x80 */
+ 0, 0xFDAA, 0xF9E2, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xF4B7, 0xFDC2, 0xFCB0, 0, 0xFDEC, 0xCAE2, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFDBD, /* 0xA0 */
+ 0, 0xEAE7, 0xDFC3, 0xD1D2, 0xCEE2, 0, 0xD3A4, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xFDAB, 0, 0xDFE0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xF2C7, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE7F0, 0, 0xD0EE, 0, 0, 0xF3AA, /* 0xD0 */
+ 0, 0, 0, 0xDECB, 0xF6B8, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xE1F5, 0xF1B3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF7A3, 0, /* 0x00 */
+ 0, 0xCAA9, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xCFA5, 0, 0, 0xDFC4, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1B0, /* 0x20 */
+ 0, 0, 0xF0BF, 0, 0xF6A4, 0, 0xE3B6, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xFAC6, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xD0EF, 0, 0, 0xFDED, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xDDC4, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xFCF7, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xE6BF, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xDEAD, 0, 0xFABF, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE5F1, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xEDC4, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xD2A5, 0, 0, 0xFDEE, 0, 0, /* 0xC0 */
+ 0, 0xF5B6, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE1F6, 0xDECC, 0, 0, 0xFCDE, 0, /* 0xD0 */
+ 0xECD7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xCDDD, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xD6B7, 0xCDB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF8D5, 0xE5D8, 0, 0, 0, /* 0x00 */
+ 0xCFEA, 0, 0, 0xCFD0, 0, 0xEACC, 0, 0, /* 0x00 */
+ 0, 0, 0xEAAE, 0xEAAD, 0, 0, 0xD3F1, 0, /* 0x10 */
+ 0xD3A5, 0, 0, 0, 0, 0, 0, 0xF7CF, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xEEA4, 0, 0, 0, 0, 0xD0A4, 0, 0, /* 0x20 */
+ 0xF2A2, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xD0F0, 0, 0, 0, 0, /* 0x30 */
+ 0xF2A3, 0, 0xF7F8, 0, 0, 0, 0, 0xD0B3, /* 0x40 */
+ 0, 0, 0xDBA9, 0, 0, 0xD3BB, 0xCAEC, 0, /* 0x40 */
+ 0xF1A6, 0xCBD5, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF7E7, 0, 0, 0xCDDE, 0, 0xF7A4, 0, /* 0x60 */
+ 0, 0, 0xF8C0, 0, 0, 0, 0xD3DD, 0, /* 0x60 */
+ 0xCCD0, 0, 0, 0, 0, 0xCFA6, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF6F3, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE1F7, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xD3DC, 0, 0, 0xFAFE, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xFAA7, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xEBD9, 0, 0xCFA7, 0xEAAF, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE4EF, 0, 0, 0, 0xE9B9, /* 0xC0 */
+ 0xF1D8, 0, 0, 0xD8D8, 0, 0, 0xE0F2, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6B4, /* 0xD0 */
+ 0xDCFC, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF3F1, 0, 0, 0, 0xE3D0, 0, 0, 0xF2FB, /* 0xF0 */
+ 0, 0xDBC6, 0xD0F1, 0, 0xD0F2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFDC, 0, 0xD3D1, 0, 0, 0xCCB1, 0xF7D8, 0, /* 0x00 */
+ 0xCBA8, 0xEBBC, 0xE4BE, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xF4DC, 0, /* 0x10 */
+ 0, 0xDCC2, 0, 0, 0xF0A7, 0, 0, 0xE6C0, /* 0x20 */
+ 0, 0, 0xCAED, 0, 0, 0, 0, 0xE8EB, /* 0x20 */
+ 0xE5E8, 0xDCC3, 0, 0, 0xEDDE, 0xD3F2, 0, 0, /* 0x30 */
+ 0, 0, 0xCCF7, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xCED4, 0xE7AB, 0, 0, 0, 0xCBC3, /* 0x40 */
+ 0, 0xE1B1, 0, 0, 0xF7B2, 0, 0, 0xD3F3, /* 0x50 */
+ 0xD3D2, 0, 0xF5C0, 0, 0, 0, 0xDFDD, 0, /* 0x50 */
+ 0, 0xEEF3, 0xE7F1, 0, 0xFDB4, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF2C8, 0, 0, /* 0x70 */
+ 0, 0xF3D2, 0, 0, 0xEEF4, 0, 0xE2D3, 0, /* 0x70 */
+ 0, 0, 0, 0xCCD1, 0, 0xDFEA, 0, 0, /* 0x80 */
+ 0, 0xE9BA, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xD9D7, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF5CD, 0, 0xF1F2, 0xFAC7, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xD9F8, 0xD4C2, 0, 0, 0, 0, 0xF6E5, 0, /* 0xA0 */
+ 0, 0, 0, 0xDDC5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE7F2, 0xEDDF, 0, 0, 0xCACB, 0, /* 0xB0 */
+ 0, 0xDBFA, 0, 0, 0, 0xE8B5, 0, 0xD3A6, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xFDB5, 0, /* 0xC0 */
+ 0, 0xF9C9, 0, 0xE4E2, 0, 0xFBBD, 0, 0, /* 0xD0 */
+ 0xD7A4, 0xCEC5, 0, 0, 0, 0, 0xCED5, 0xD6E6, /* 0xD0 */
+ 0, 0, 0, 0, 0xE5BD, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xDECD, 0xECF3, 0, 0, 0xEDE0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xECEC, 0xFBBE, 0xDFEB, 0, 0xE1F8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF9BE, /* 0x00 */
+ 0, 0, 0, 0, 0xD0F3, 0xE0AA, 0xE8E2, 0, /* 0x10 */
+ 0, 0xE2D4, 0xD2FD, 0, 0xE5A8, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xD9D3, 0, 0, 0, 0, 0xD3DE, /* 0x20 */
+ 0, 0xF4B8, 0xF7BC, 0xDCFD, 0, 0xE8EC, 0xE4E7, 0, /* 0x20 */
+ 0, 0xE3F7, 0, 0, 0, 0, 0, 0xECA8, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xFAF1, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE5F2, 0, 0, 0xD0F4, /* 0x40 */
+ 0xD2AF, 0xDCE5, 0, 0, 0, 0, 0xD0A5, 0xF1B4, /* 0x40 */
+ 0xFCB1, 0xCCF8, 0, 0, 0xDDC6, 0xFAD1, 0, 0xF7DF, /* 0x50 */
+ 0, 0, 0xFAA8, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xEEF5, 0, 0xDECE, 0, 0, 0, 0, 0xE7F3, /* 0x60 */
+ 0, 0, 0xF7AC, 0xEBC4, 0xEDE1, 0xE0AB, 0xDDC7, 0, /* 0x60 */
+ 0, 0, 0, 0xD2B3, 0xD2BF, 0, 0, 0, /* 0x70 */
+ 0xCACC, 0, 0, 0, 0, 0xFBBF, 0, 0, /* 0x70 */
+ 0, 0, 0xE5FD, 0xDDE5, 0xD8CD, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xECF4, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xD0F5, 0, 0, 0xE8ED, 0xD0D2, /* 0x90 */
+ 0, 0xD9D8, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF6E6, 0, 0, /* 0xA0 */
+ 0xDBAA, 0, 0, 0, 0xF7E0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xD8D9, 0, 0xF4A3, 0, 0, 0xF4DD, 0, /* 0xB0 */
+ 0, 0, 0, 0xEFD1, 0, 0, 0xD9B5, 0, /* 0xC0 */
+ 0, 0xEDAB, 0, 0xE3B7, 0, 0, 0, 0, /* 0xC0 */
+ 0xEEBB, 0xCDB4, 0, 0xE0F3, 0xEACD, 0, 0, 0, /* 0xD0 */
+ 0, 0xECF5, 0xE8EE, 0, 0xCBA9, 0xF1AF, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xCACD, 0, /* 0xE0 */
+ 0xECA9, 0, 0xF2EB, 0, 0xFDEF, 0, 0xF9F3, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xE6C1, 0, 0, 0xECD8, 0, 0, 0, 0xEDAC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEACE, 0, 0xE8DF, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xDECF, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xD2A6, 0, 0, 0xE7F4, 0xD1D6, 0, 0, 0xE6C2, /* 0x10 */
+ 0xE3E3, 0, 0, 0, 0, 0xE4B0, 0, 0, /* 0x20 */
+ 0, 0xD8B4, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xF6A5, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF3DE, 0, 0, 0, /* 0x30 */
+ 0, 0xD7A5, 0, 0, 0, 0, 0xF7E8, 0, /* 0x40 */
+ 0, 0xE8C6, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xFBE6, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xDDE6, 0, 0, 0, 0xDCFE, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD8DA, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xDAAC, 0xEAB0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE3B8, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xCAAA, 0xE1F9, 0, 0xEAB1, 0, 0, 0, /* 0xC0 */
+ 0, 0xF2EC, 0, 0, 0xFAEE, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xEED5, 0, 0, 0, 0, 0xF9F4, 0, /* 0xE0 */
+ 0, 0xD2EC /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFBFB, 0, 0, /* 0x00 */
+ 0, 0xFDF0, 0, 0xE0BD, 0xCEE3, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xF8C6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xDEAE, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xDFC5, 0, 0, 0xE5BE, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEDAD, 0xFAEA, 0, 0, 0xCDEE, 0xEDA6, 0, 0xEDAE, /* 0x50 */
+ 0xF0ED, 0, 0xDDA1, 0, 0xEDAF, 0xFCF8, 0, 0xD8EB, /* 0x50 */
+ 0, 0, 0, 0xCCF9, 0xCDB5, 0, 0, 0, /* 0x60 */
+ 0, 0xFAA9, 0, 0xE1DD, 0, 0, 0, 0, /* 0x60 */
+ 0xE2D5, 0xEDCF, 0, 0, 0, 0xDDA2, 0, 0, /* 0x70 */
+ 0xF9CA, 0, 0xEAE8, 0, 0xE5ED, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xD3EB, 0, 0xE9D4, /* 0x80 */
+ 0xE1FA, 0xE4CC, 0, 0xE1E4, 0xE8C7, 0, 0, 0xCEDB, /* 0x80 */
+ 0, 0, 0, 0xDCD5, 0, 0xF7B5, 0xFCF3, 0xF0F3, /* 0x90 */
+ 0xCEAF, 0xF1B5, 0xEFD2, 0xE8C8, 0xEBF1, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xCBD4, 0xE0BE, 0xE3F8, 0xEAE9, 0xFCB2, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE0F4, 0, 0xCFE0, 0, /* 0xA0 */
+ 0xEEA5, 0, 0, 0xFAAA, 0xE6C3, 0xE1B2, 0xCAAB, 0, /* 0xB0 */
+ 0xE3E4, 0xE9BB, 0, 0, 0, 0, 0, 0xE2D6, /* 0xB0 */
+ 0xF3F2, 0, 0xEED6, 0xEAB2, 0xD0F6, 0xECD9, 0xDACB, 0xCFA8, /* 0xC0 */
+ 0, 0, 0, 0, 0xDDA3, 0, 0, 0, /* 0xC0 */
+ 0xD8DB, 0, 0xF9CE, 0xE9D5, 0xE3D1, 0, 0, 0xD2BC, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xD8AC, 0xF3CC, /* 0xD0 */
+ 0, 0xCDFB, 0xF6D6, 0, 0xE7F5, 0xE8EF, 0xE3F9, 0xD2BB, /* 0xE0 */
+ 0xF3F3, 0xE3FB, 0, 0xDED0, 0xCEB0, 0, 0xD6F7, 0xF1D9, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF5C1, 0xDCC4, 0, /* 0xF0 */
+ 0xF5BB, 0, 0xDED1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCE6, 0, 0, 0xDED2, 0, 0, 0xEDE2, /* 0x00 */
+ 0xEEF6, 0xEACF, 0xF0EE, 0xE3FC, 0, 0xD3DF, 0xD3F4, 0xE1B3, /* 0x00 */
+ 0, 0xE1B4, 0, 0, 0, 0, 0xF4D3, 0, /* 0x10 */
+ 0, 0xDFC6, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xE9D6, 0, 0, 0, /* 0x20 */
+ 0xDBAB, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xF6A6, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE3B9, 0xEBC5, 0xF4A9, 0xCDB6, 0xD2F9, 0, 0xDAAD, 0xD2E3, /* 0x30 */
+ 0xCFD1, 0, 0, 0, 0, 0xCBDC, 0xCCFA, 0, /* 0x40 */
+ 0xCFDD, 0, 0, 0xE8A9, 0, 0xE3BB, 0xE3BA, 0, /* 0x40 */
+ 0, 0xE0DA, 0, 0, 0, 0xEEF7, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xDCB3, 0, 0, 0, 0, /* 0x50 */
+ 0xD3F5, 0, 0xD7A6, 0, 0xF6B5, 0xD7DB, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE1D5, 0, 0, 0xD4EA, /* 0x60 */
+ 0, 0xDFA3, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xFDDF, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xD0F7, 0xEDD4, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xCBAA, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE4DB, 0, 0xE1FB, 0xCBA2, 0, 0, 0, /* 0xA0 */
+ 0, 0xD3E0, 0, 0xE4BF, 0, 0xFBC0, 0, 0xDABE, /* 0xB0 */
+ 0xE4CD, 0, 0xD6B9, 0, 0, 0, 0xEFC0, 0, /* 0xB0 */
+ 0xE1FC, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xF6B9, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xDFC7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE4B1, 0, 0, 0, 0, 0, 0, 0xDCE7, /* 0xE0 */
+ 0xDCE8, 0, 0, 0, 0xFAD6, 0, 0xD3F6, 0, /* 0xF0 */
+ 0, 0, 0, 0xF1DA, 0, 0xFAF2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2FD, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xD5CF, 0xD0F8, 0, /* 0x00 */
+ 0, 0xCDDF, 0, 0, 0xF5CB, 0, 0xE4F0, 0xCBAB, /* 0x10 */
+ 0, 0xD7C4, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2FE, /* 0x20 */
+ 0, 0xDDDA, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xDAAE, 0xCAEE, 0, 0, 0, /* 0x40 */
+ 0xD5B9, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE3A1, 0, 0, 0xE8E3, 0, 0, 0xF3AB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCFA9, /* 0x80 */
+ 0, 0, 0, 0xD3F7, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xD4F1, 0, 0, /* 0x90 */
+ 0xCEE4, 0, 0xE8F2, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE5F5, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xE7AE, 0, 0xD6BA, 0, 0xDFEC, 0xE4C0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xE8E4, 0, 0, /* 0xC0 */
+ 0, 0, 0xD8B5, 0, 0, 0, 0xE4DC, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xF4B9, 0xF1B6, 0, /* 0xD0 */
+ 0, 0xE2DE, 0xE1B5, 0, 0, 0xCDEF, 0xF1A7, 0xCEE5, /* 0xE0 */
+ 0xCBDD, 0, 0, 0xD9E3, 0, 0, 0xF3AC, 0, /* 0xE0 */
+ 0, 0xD0F9, 0xECAB, 0xDED3, 0xF7E9, 0, 0, 0xF9F5, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xE1DE, 0xCBEE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE3BC, 0xF8D6, 0, 0, 0xDBEE, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xFDF1, 0, 0, 0, /* 0x00 */
+ 0, 0xF7B6, 0, 0, 0, 0, 0xF4DE, 0, /* 0x10 */
+ 0, 0xF2ED, 0, 0xDBD9, 0, 0xF0A8, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE1FD, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xDED4, 0, 0xE0AC, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xEDE3, 0, 0, 0xD3E1, 0, /* 0x30 */
+ 0xDFC8, 0, 0, 0, 0, 0xD9B6, 0, 0xFDAC, /* 0x30 */
+ 0xEFD3, 0, 0, 0, 0xE4C1, 0xF8EB, 0, 0xDBAC, /* 0x40 */
+ 0, 0, 0, 0, 0xFCC6, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xD8AD, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF6BA, /* 0x50 */
+ 0, 0xDBDF, 0xD3D3, 0xF8C7, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xCACE, 0xF8C1, 0xD2B4, 0, 0, 0xDCB4, /* 0x70 */
+ 0xFAB9, 0xCACF, 0, 0xFCB3, 0xEAEA, 0xEAEB, 0xD0FA, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xEDE4, 0, 0, 0xDDE7, /* 0x80 */
+ 0, 0, 0xDFC9, 0, 0, 0, 0, 0xDFED, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xEEBC, 0, 0xEFC1, /* 0x90 */
+ 0, 0, 0xCCD2, 0, 0xDDA4, 0, 0, 0, /* 0x90 */
+ 0xDFCA, 0, 0, 0, 0, 0, 0xD3F8, 0xF1A8, /* 0xA0 */
+ 0, 0, 0, 0xCDB7, 0, 0xEFD4, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xE4DD, 0xDFEE, 0xCBAC, /* 0xB0 */
+ 0xE9BC, 0, 0, 0, 0, 0, 0xEAEC, 0, /* 0xB0 */
+ 0, 0, 0xDFCB, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xF9BF, 0xD6AF, 0xD5C6, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xCFAA, 0, 0, 0xCEA9, 0, 0, 0xD6F8, 0, /* 0xD0 */
+ 0, 0, 0xF1B7, 0xEEF8, 0, 0, 0, 0xD9D9, /* 0xD0 */
+ 0xF3DF, 0, 0xF8C8, 0xCEC6, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xD5E6, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF4E6, 0, 0, 0xE6C5, 0xEFD5, /* 0xF0 */
+ 0, 0, 0xCBEF, 0xFCDF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCA7, 0, 0, 0xD6E7, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF8C9, 0, 0, 0, 0, 0xE3D2, /* 0x00 */
+ 0, 0xE3BD, 0, 0xCFE1, 0xF0C0, 0xECDA, 0, 0xDDD7, /* 0x10 */
+ 0xFBF0, 0, 0, 0xECAC, 0, 0, 0, 0xF0A9, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xFAD7, 0xFBC1, /* 0x20 */
+ 0, 0xD2C0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE5B0, 0, 0, 0, 0xEDE5, 0, 0, /* 0x30 */
+ 0, 0, 0xCBAD, 0, 0xF9B0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xF7A5, 0, 0xCBAE, 0, 0xDAAF, 0, 0xD8B6, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xD3A7, 0xFBB2, /* 0x50 */
+ 0, 0xFDC4, 0, 0xECAD, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xFBA1, 0, 0, 0, 0xE5E9, 0xE9EE, /* 0x60 */
+ 0, 0xF3F4, 0xF8F3, 0xF0C1, 0xDEAF, 0xF8B0, 0, 0, /* 0x60 */
+ 0xF3E0, 0xE7AF, 0, 0, 0, 0, 0, 0xDBAD, /* 0x70 */
+ 0, 0xE6B5, 0, 0, 0xF9A8, 0, 0, 0xDDD8, /* 0x70 */
+ 0xE8D9, 0xEFD6, 0, 0, 0, 0xD3E2, 0, 0xE2DF, /* 0x80 */
+ 0, 0, 0xFCE0, 0xD7C8, 0xFDAD, 0, 0, 0, /* 0x80 */
+ 0xDFEF, 0xCCD3, 0xD3F9, 0, 0, 0, 0, 0xD4F0, /* 0x90 */
+ 0xDBC7, 0xDED5, 0, 0, 0, 0, 0xF0F4, 0, /* 0x90 */
+ 0xD5D0, 0xE5D9, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xFCC7, 0xDCD6, 0xE2E0, 0, 0, 0, 0xDAB0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xF3A3, 0, 0xD3EC, /* 0xB0 */
+ 0, 0xF4CB, 0, 0, 0, 0xFDC5, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE3FD, 0, 0xF9B1, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xD0FB, 0xECDB, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xF5BC, 0xF2A4, /* 0xD0 */
+ 0xD8CE, 0xD8CF, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xF5F7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF6E1, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xD2B7, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xFBEC, 0, 0xDDC8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4E8, /* 0x00 */
+ 0, 0, 0xD2C1, 0, 0, 0, 0xF8D7, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xD6BB, 0xDED6, 0, 0, /* 0x10 */
+ 0xF7BD, 0xECAE, 0, 0, 0, 0xD0E1, 0, 0xE0F5, /* 0x20 */
+ 0xEAB3, 0, 0xCED6, 0, 0, 0, 0, 0xCCA5, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xECF6, 0xE2E1, 0xE3BE, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xFCC8, 0, 0, /* 0x40 */
+ 0xCDF0, 0, 0xF9F6, 0, 0, 0xDFF0, 0, 0, /* 0x50 */
+ 0, 0xE5BF, 0, 0, 0, 0xCEBF, 0, 0, /* 0x50 */
+ 0, 0, 0xFCE1, 0xEDB0, 0xFDD1, 0xF6BB, 0, 0, /* 0x60 */
+ 0xF9CF, 0xEBDA, 0xCAC1, 0, 0xD2B8, 0xCDF1, 0, 0xE3D3, /* 0x60 */
+ 0xFDE6, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE6ED, 0, 0, /* 0x80 */
+ 0, 0xE3FA, 0, 0, 0xF0AA, 0xF9D0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xFCE2, 0, 0xF8A7, 0, /* 0x90 */
+ 0, 0, 0xE1E5, 0xEEF9, 0, 0, 0, 0xE7F6, /* 0x90 */
+ 0xEAED, 0, 0, 0xFCB4, 0xF5C2, 0, 0, 0xD7DC, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF0F5, 0, 0xDDE8, 0xD3ED, 0xF5FC, 0, 0xDABF, 0, /* 0xB0 */
+ 0xCCFB, 0, 0, 0, 0xD3FA, 0xF4A4, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xEFD7, 0, 0xD4C3, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xFBE3, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xFBED, 0, 0xE0AD, 0, 0, 0xEAEE, /* 0xD0 */
+ 0xFBB3, 0xE4C2, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF6E7, 0xD2DD, 0, 0xDFCC, 0, 0, 0xFCC9, 0, /* 0xF0 */
+ 0, 0xE5A9, 0xE0F6, 0xF6B3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1FE, 0, 0, 0, 0, 0xCBF0, 0, /* 0x00 */
+ 0xEAEF, 0xEAF0, 0, 0, 0, 0xDAC0, 0xF8B4, 0xEBF2, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE4C3, 0, 0, /* 0x10 */
+ 0, 0, 0xE9D7, 0xE4F1, 0, 0, 0, 0xCAEF, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCED7, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xFCCA, 0, 0, 0, 0xF3E1, 0, 0, 0xCBC4, /* 0x30 */
+ 0, 0, 0, 0, 0xE3E5, 0, 0xCBC5, 0xEAB4, /* 0x30 */
+ 0, 0, 0xE9BD, 0, 0xD7C9, 0, 0, 0xEBDB, /* 0x40 */
+ 0xEDB1, 0, 0xCCC3, 0xF7BE, 0xFCCB, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF8F4, 0, 0xD9B7, 0, 0, /* 0x50 */
+ 0xF3D3, 0xF3D4, 0, 0, 0, 0xF7E4, 0, 0xF7D1, /* 0x50 */
+ 0, 0, 0xD8B7, 0xCEB1, 0xCAC2, 0, 0, 0xFBB4, /* 0x60 */
+ 0xCBC6, 0, 0, 0xF0F6, 0, 0, 0xD5E7, 0, /* 0x60 */
+ 0xEAD0, 0, 0, 0, 0, 0, 0xCCD4, 0xCBAF, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF4AA, 0xE9AF, 0, /* 0x70 */
+ 0, 0xF5C3, 0xE9D8, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xDDE9, 0, 0, 0, 0xF1F3, 0, /* 0x80 */
+ 0xD5FB, 0xDEBB, 0, 0, 0xF4FB, 0, 0, 0, /* 0x90 */
+ 0xFDF3, 0xFDF2, 0xF7A6, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xDDC9, 0, 0, 0xD4D3, /* 0xA0 */
+ 0, 0xCCA8, 0, 0xDAC1, 0xCCD5, 0, 0xD9E4, 0, /* 0xA0 */
+ 0, 0, 0xFACA, 0, 0, 0, 0xE5E3, 0, /* 0xB0 */
+ 0, 0, 0xD3BC, 0, 0, 0, 0xCAF0, 0, /* 0xB0 */
+ 0, 0, 0, 0xD0C4, 0, 0, 0, 0xCAD0, /* 0xC0 */
+ 0xFAAB, 0xEBEB, 0xE7F8, 0xD9E5, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xD1D7, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xF3A4, 0, 0, 0, 0xD4FB, 0xFCE3, /* 0xF0 */
+ 0xFAD8, 0, 0xF3D5, 0, 0xCFAB, 0, 0, 0xEBF3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD5FC, 0, 0, 0, 0, 0, 0, 0xD3D4, /* 0x00 */
+ 0xCDFC, 0, 0xD9E6, 0, 0xE2F9, 0xE2A1, 0xEBD4, 0, /* 0x00 */
+ 0xE0F7, 0xE4B2, 0xCCFC, 0, 0, 0, 0xFBE4, 0, /* 0x10 */
+ 0, 0, 0xF4AB, 0, 0, 0, 0, 0xD0BD, /* 0x10 */
+ 0, 0xCAF1, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xEFB8, 0, 0, 0, 0xD7C0, 0, /* 0x20 */
+ 0xEEFA, 0xFDF4, 0, 0, 0xD3E3, 0, 0xFBC2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xD5E8, 0xDBAE, /* 0x30 */
+ 0xE1B6, 0xF8B7, 0, 0, 0, 0, 0, 0xE0BF, /* 0x40 */
+ 0xFBC3, 0xDDEA, 0, 0xE2A2, 0, 0xEEA6, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF6E8, 0, 0, 0, 0, /* 0x50 */
+ 0xF6F5, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xDDCA, 0, /* 0x60 */
+ 0, 0xD0E2, 0, 0, 0, 0, 0xDDA6, 0, /* 0x70 */
+ 0, 0xDDEB, 0, 0, 0xE4F9, 0, 0, 0xE3AF, /* 0x70 */
+ 0xD0FC, 0, 0, 0, 0xF4FC, 0, 0, 0, /* 0x80 */
+ 0, 0xCCBC, 0xF7EA, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xE5E4, 0xDFF1, 0, 0, 0xF7E1, 0, 0xF9F7, /* 0x90 */
+ 0xEFB9, 0, 0, 0xF8D8, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF9A9, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xF8D9, 0, 0, 0, 0xEEBD, 0, 0, /* 0xB0 */
+ 0, 0xD8C6, 0, 0, 0xE4E3, 0xF5CE, 0, 0, /* 0xB0 */
+ 0, 0, 0xDDD9, 0, 0, 0, 0, 0xD9E7, /* 0xC0 */
+ 0xD2B9, 0xD5C3, 0, 0, 0xDAE5, 0xDAD0, 0, 0xD1D9, /* 0xC0 */
+ 0xCED8, 0, 0xCBDE, 0xF4AC, 0xDAFB, 0, 0xF6E9, 0xE8F3, /* 0xD0 */
+ 0xCFAC, 0xF0F0, 0, 0xF4FD, 0xDBC8, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xCEC0, 0xE3D4, 0xD1CF, 0xF1F5, /* 0xE0 */
+ 0, 0xCDF2, 0, 0xCFEB, 0, 0, 0, 0xCDB8, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0xE3A6, 0xD1DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF2A5, 0, 0, 0, 0, 0, 0xF2A6, /* 0x00 */
+ 0, 0xE4CE, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xD3FB, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xF1A9, 0, 0, 0, 0xF2C9, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xEFD8, 0xE6C9, 0, 0xD8B8, 0xFAF3, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF3B5, 0, 0, 0xF8A4, 0, 0, 0xD1F3, /* 0x40 */
+ 0xE6C8, 0, 0, 0, 0, 0xF8DA, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDCE9, /* 0x60 */
+ 0xDED7, 0, 0, 0, 0, 0, 0xCBDF, 0, /* 0x60 */
+ 0, 0, 0xCFEC, 0, 0, 0, 0, 0xF4DF, /* 0x70 */
+ 0, 0, 0xD1F4, 0xD2BA, 0, 0, 0, 0xDFF2, /* 0x70 */
+ 0, 0, 0, 0xE1B7, 0, 0, 0, 0, /* 0x80 */
+ 0xE2A3, 0xD3FC, 0, 0, 0xEDE6, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xDBC9, 0, 0, 0, 0xE4FA, 0, /* 0x90 */
+ 0xCFDE, 0, 0, 0xCED0, 0, 0, 0, 0, /* 0x90 */
+ 0xD5D3, 0xF3F5, 0xF7AE, 0, 0, 0xEFC8, 0, 0xCDF3, /* 0xA0 */
+ 0xF5CF, 0xE5F3, 0xF0C2, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xCAD1, 0, 0, 0, 0xEAF1, 0, 0xD0A6, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD9DA, /* 0xC0 */
+ 0xF0AB, 0, 0, 0, 0, 0, 0xEBE7, 0, /* 0xD0 */
+ 0, 0, 0xE5C0, 0xFCB5, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE4C4, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xCCA9, 0xFDC6, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xEAB5, 0, 0xE5AA, 0xDFBA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1DF, 0, 0xDAD1, /* 0x00 */
+ 0, 0, 0, 0, 0xE1B8, 0, 0xE8F4, 0xD3FD, /* 0x10 */
+ 0, 0, 0, 0, 0xE2A4, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xF2CA, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xDAE6, 0xF7B3, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xFDCD, 0, 0, 0, 0xF3B6, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xEED7, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF5C4, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xD8A4, 0, 0, 0, 0, 0, 0xF2A7, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xD9B8, 0xD9B9, 0xEFC9, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xD6CE, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF7CB, 0xDFAE, 0xE8F5, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xD2B5, 0, 0, 0, 0xD3D5, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF4CC, 0xDAFC, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xD9E8, 0, 0xF7EB, 0xF5C9, 0, /* 0xA0 */
+ 0xF3BC, 0, 0xDAD2, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xD3B5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE8B6, 0, 0, 0xD6CF, 0xF4BA, 0, 0xF7C9, /* 0xC0 */
+ 0, 0, 0xCCAA, 0, 0, 0xF0C3, 0xCCD6, 0, /* 0xC0 */
+ 0, 0, 0xD0D3, 0, 0xD3BD, 0, 0, 0, /* 0xD0 */
+ 0xDBFB, 0, 0xCBE0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xD3E4, 0xF6F7, 0, 0, 0xD5BA, 0xF3CD, 0xCBE1, /* 0xE0 */
+ 0, 0, 0, 0, 0xEBF4, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xF4AD, 0, 0xFCAA, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xF7EC, 0, 0, 0, 0xE8F6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDAE7, 0, 0, 0, 0xF7CC, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE5C1, 0, 0, 0, 0, 0xE0EE, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xD5FD, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xCEE6, 0xFCAB, 0xD5BB, 0, 0, 0xF2A8, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xE2A5, 0xCDB9, /* 0x30 */
+ 0xEAF2, 0xCBC7, 0, 0xCDF4, 0, 0, 0xDBAF, 0xEFD9, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xCDBA, 0, 0, /* 0x40 */
+ 0xFCF9, 0, 0, 0, 0, 0xDFF3, 0xCEE7, 0xDAC2, /* 0x40 */
+ 0, 0xCFAD, 0, 0, 0, 0, 0xE7F9, 0xF8A8, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xF3E2, 0, /* 0x50 */
+ 0, 0, 0xCAF2, 0xDFA4, 0, 0, 0xD4C4, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xCCD7, 0xE5C2, 0, 0, /* 0x60 */
+ 0, 0, 0xCDBB, 0, 0xEFDA, 0xEED8, 0, 0xDDA7, /* 0x70 */
+ 0xE2A6, 0, 0, 0, 0, 0, 0xE0C0, 0, /* 0x70 */
+ 0, 0, 0xD6B0, 0xF8CA, 0, 0xFCFA, 0, 0xD9FE, /* 0x80 */
+ 0, 0, 0, 0, 0xDEB0, 0, 0, 0, /* 0x80 */
+ 0xDDEC, 0xDAE8, 0, 0, 0, 0, 0, 0xD4E0, /* 0x90 */
+ 0, 0xD6F9, 0, 0xCDD7, 0xDED8, 0, 0, 0xF2F8, /* 0x90 */
+ 0, 0xE4D6, 0, 0, 0xD0C5, 0xF4AE, 0, 0xDDA8, /* 0xA0 */
+ 0, 0, 0, 0xEDC5, 0xF3D6, 0, 0, 0xDED9, /* 0xA0 */
+ 0xE3E6, 0, 0, 0, 0, 0, 0, 0xD3A8, /* 0xB0 */
+ 0, 0xDBB0, 0, 0, 0xE5DA, 0xE3BF, 0, 0, /* 0xB0 */
+ 0, 0xDBB1, 0, 0, 0, 0xD5E9, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE0C1, 0xEFDB, 0, 0, 0xF0E9, /* 0xC0 */
+ 0, 0, 0xD7B2, 0, 0, 0, 0, 0xD0FD, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xD9E9, 0, 0, 0xD0FE, 0, 0xECED, 0xD3A9, 0, /* 0xE0 */
+ 0xF2A9, 0xF0C4, 0, 0, 0xE2E2, 0xE9EF, 0, 0, /* 0xE0 */
+ 0, 0xF9D1, 0, 0, 0xE9D9, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xE8DA, 0xDAC3, 0xDAC4, 0xD4C5, 0, 0xE7FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDE0, 0xE3B0, /* 0x00 */
+ 0, 0xDBB2, 0xFBC4, 0, 0xF3E3, 0, 0xD9A5, 0xFBE7, /* 0x00 */
+ 0xDDCB, 0xD0D4, 0, 0xE6B6, 0xE0AE, 0xFDDA, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xDCB5, 0xE0F8, /* 0x10 */
+ 0xE7B1, 0, 0, 0, 0, 0xF5F0, 0, 0xD8DC, /* 0x20 */
+ 0xEDC6, 0, 0, 0, 0, 0xE1B9, 0, 0xE3C0, /* 0x20 */
+ 0xF9C0, 0xE9F0, 0, 0, 0xD9DB, 0, 0xF3E4, 0, /* 0x30 */
+ 0, 0, 0xDCB6, 0xE4E9, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF0C5, 0xE3C1, 0xFCCC, 0xFCCD, 0, 0, 0, /* 0x40 */
+ 0, 0xF2CB, 0, 0xF2CC, 0, 0, 0, 0xE4CF, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF1DB, 0, 0xFAD9, 0, 0xF1B8, 0xFDF5, 0xE0F9, /* 0x50 */
+ 0, 0, 0, 0, 0xE7FB, 0xFCB7, 0xFCE4, 0xFBC5, /* 0x60 */
+ 0xE3E7, 0xD8B9, 0, 0xF6F8, 0, 0, 0xDCC5, 0xCCD8, /* 0x60 */
+ 0, 0, 0, 0xE0AF, 0xF4E7, 0, 0xEFDC, 0xCFFC, /* 0x70 */
+ 0xEFDD, 0, 0xF2AA, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xFDBE, 0, 0, 0xCAAC, /* 0x80 */
+ 0xFDBB, 0xFDC7, 0, 0, 0, 0, 0xE7B2, 0, /* 0x80 */
+ 0xEAD1, 0xDFF4, 0, 0, 0, 0, 0xD1EC, 0xE4DE, /* 0x90 */
+ 0xE5C3, 0, 0, 0, 0, 0xD9A6, 0, 0, /* 0x90 */
+ 0xCDBC, 0, 0xF3E5, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xEDD5, 0, 0, 0xD9BA, 0, /* 0xA0 */
+ 0, 0, 0xEDE7, 0xFBB5, 0xF8EC, 0, 0, 0, /* 0xB0 */
+ 0, 0xE0E7, 0, 0xCCD9, 0, 0, 0xD4C6, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE7A5, 0, 0xD5F5, 0xD3BE, /* 0xC0 */
+ 0, 0xFCFB, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE4F2, 0, /* 0xD0 */
+ 0, 0xDFF5, 0, 0, 0xE8F8, 0xF8ED, 0, 0, /* 0xD0 */
+ 0xCEC7, 0, 0, 0, 0, 0, 0xFDF6, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE8D8, 0, 0xCDD8, 0xE7D6, 0xCCDA, 0, 0, 0xCAE3, /* 0xF0 */
+ 0xDFF6, 0xF0C7, 0xF0C6, 0, 0xD8BA, 0, 0xF1F4, 0xF4F0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5CC, 0, 0, 0xFCE5, 0, 0, 0, 0, /* 0x00 */
+ 0xEAC5, 0xEAF3, 0, 0xDDDB, 0, 0xDCD7, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xDEFD, 0xF2F9, 0, 0xD5C7, /* 0x10 */
+ 0, 0, 0, 0xD8D0, 0, 0xF0C8, 0xD1A1, 0xD1A2, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xD9D4, 0xD6E8, /* 0x20 */
+ 0xD9CA, 0, 0xDAB1, 0xD8C7, 0xDCE2, 0xF3CE, 0xF5F4, 0, /* 0x20 */
+ 0, 0xF1B9, 0, 0, 0xDAD3, 0, 0xF6EA, 0, /* 0x30 */
+ 0, 0, 0xCFF5, 0, 0, 0xFDAE, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xCAD2, 0, /* 0x40 */
+ 0, 0xDFB4, 0, 0, 0, 0, 0xD7DD, 0xFABA, /* 0x40 */
+ 0xEEA7, 0xF5BD, 0, 0xF8F5, 0, 0, 0xEDE8, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xD4E1, 0, 0xD1A3, 0xE1D6, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF9F8, 0, 0xDBCA, /* 0x60 */
+ 0xCBF9, 0xD4D4, 0, 0xD9DC, 0, 0xEEBE, 0, 0xF7ED, /* 0x70 */
+ 0, 0, 0, 0xD2EE, 0, 0, 0xE1E6, 0xF7F9, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDDED, /* 0x80 */
+ 0, 0xE8DB, 0, 0xDBB3, 0, 0, 0, 0xD1F7, /* 0x80 */
+ 0xE0B0, 0, 0, 0xD4E2, 0, 0xF6D7, 0, 0xD7F9, /* 0x90 */
+ 0, 0, 0xD8DD, 0, 0xCDFD, 0xF2AB, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCDBD, /* 0xA0 */
+ 0xF8C2, 0, 0, 0xF2AC, 0, 0, 0xCAAD, 0xCAAE, /* 0xB0 */
+ 0xCFAE, 0, 0, 0, 0, 0, 0xE3C2, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xDCB7, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDBDA, /* 0xC0 */
+ 0xD9BB, 0xCAF3, 0xF6D3, 0xE6F8, 0xEAF5, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xEAF6, 0, 0, 0xF6F9, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xCFAF, 0, 0, 0xCAD3, 0, 0, 0xCAAF, /* 0xE0 */
+ 0xD2B0, 0xF1BA, 0, 0xD7B3, 0xE3C3, 0xF3FD, 0xDEDA, 0, /* 0xF0 */
+ 0, 0, 0, 0xDEDB, 0, 0, 0xEFDE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2E3, 0xEEFB, 0, 0, 0xDFF7, 0xD7CA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xCEE8, 0xDBDB, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF1BB, 0, 0, 0, 0, 0xE9F1, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xFAB7, 0xD0C6, 0, 0, 0xCCAB, 0xEEA8, 0, 0, /* 0x30 */
+ 0xCBFA, 0xF9F9, 0xCCFD, 0xD3FE, 0, 0, 0, 0, /* 0x40 */
+ 0xE4D0, 0, 0, 0, 0, 0, 0xF2EE, 0, /* 0x40 */
+ 0xD4D5, 0xDFCD, 0, 0xFCB8, 0xD1D0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF2CD, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xF7D2, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCAD4, /* 0x70 */
+ 0, 0xD5D9, 0, 0, 0, 0xD8DE, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCDD9, /* 0x80 */
+ 0, 0, 0, 0xEEA9, 0xF6BC, 0, 0, 0xCCDB, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF0C9, 0, 0xFCFC, /* 0x90 */
+ 0, 0xE8C9, 0xF4FE, 0, 0, 0, 0, 0xE7FC, /* 0xA0 */
+ 0xD7DE, 0, 0, 0, 0, 0xDEDC, 0, 0xF0AC, /* 0xA0 */
+ 0xCCFE, 0xCDE1, 0, 0xE1BA, 0, 0xDBEF, 0xDAB2, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xD1A5, 0xDCB8, 0, 0, /* 0xC0 */
+ 0, 0xD8F6, 0, 0xD1A4, 0, 0xCDE2, 0, 0, /* 0xC0 */
+ 0, 0, 0xDCEA, 0, 0, 0xF0F7, 0, 0xF0CA, /* 0xD0 */
+ 0xD0BE, 0, 0xDDDC, 0, 0, 0, 0, 0xD4D6, /* 0xD0 */
+ 0xD3D6, 0, 0, 0, 0, 0, 0, 0xEDD0, /* 0xE0 */
+ 0xCDA1, 0, 0, 0, 0, 0, 0xDFB5, 0, /* 0xE0 */
+ 0, 0, 0xDFF8, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xD4A1, 0xCEB2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE8CA, 0, 0, 0, 0, 0xEBF5, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE3D5, 0xF5D0, 0, /* 0x00 */
+ 0, 0, 0xF5A1, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD9A7, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE5AB, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE6CB, 0, 0xF5F1, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xE5C5, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF9A3, 0xE0DB, 0xF6EB, 0, 0xCBF1, /* 0x50 */
+ 0, 0xD9EA, 0xF5A2, 0, 0, 0, 0xD7D1, 0, /* 0x50 */
+ 0xD1F8, 0xEAF8, 0xEAF9, 0xDAB3, 0, 0, 0, 0, /* 0x60 */
+ 0xEFDF, 0, 0, 0xF1EF, 0, 0xE5F6, 0xEEBF, 0xE2E4, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xD0BF, 0, 0xFAAC, /* 0x70 */
+ 0xF5D1, 0xE7B3, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xE9BE, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF2CE, 0xDBB4, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xFCCE, 0, 0xDDEE, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xE7B4, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xD7B4, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF7B4, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xCDBE, 0, 0xDAE9, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xCFB0, 0xF7D9, 0xF3E6, 0, 0, /* 0xC0 */
+ 0xCED9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xCEAA, 0, 0xCBC8, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xD0A7, 0, 0xF0CB, 0, 0xD0C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4C5, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xDBE0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xD5DA, 0, 0xD7A7, 0, 0, 0, 0xEEC0, /* 0x10 */
+ 0, 0xF8F6, 0, 0, 0, 0, 0xF5D2, 0xEDE9, /* 0x10 */
+ 0, 0xD9BC, 0, 0xE5C6, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF5A3, 0, 0, /* 0x30 */
+ 0xDAD4, 0xE2A7, 0xFBFC, 0, 0, 0xF1DC, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xCAF4, 0, 0, 0, /* 0x40 */
+ 0xE8FA, 0, 0, 0xCEE9, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xE9F8, 0xE2E5, 0, 0, 0, 0, /* 0x50 */
+ 0xD0B9, 0xD4F2, 0, 0, 0, 0, 0, 0xD1A6, /* 0x50 */
+ 0, 0xDFCE, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xFCF4, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xD3AA, 0, 0, 0, 0xCCAC, 0, 0, 0, /* 0x80 */
+ 0, 0xEFE0, 0, 0, 0, 0xE5E5, 0xD0D5, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDBFC, /* 0x90 */
+ 0, 0, 0, 0, 0xFCE6, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xCBFE, 0xEDEA, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xDEB1, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF9E3, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xD4A2, 0xCFF6, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xD6D0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xD5EA, 0xF1EE, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xFACB, 0, /* 0xF0 */
+ 0, 0, 0, 0xE5A1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD5B1, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xCFED, 0, 0xEDEB, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xD5B2, 0, 0, 0, 0xD5BC, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xFDE2, 0xF3AD, 0, 0xFDDB, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE9B0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xD1A7, 0, 0, 0xFDE3, 0xCEB3, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xFDE4, 0xFACE, /* 0x40 */
+ 0, 0, 0, 0, 0xCAB0, 0, 0xF7A7, 0, /* 0x40 */
+ 0xCFB1, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6A2, /* 0x50 */
+ 0, 0xFCB6, 0xF2AD, 0xEFE1, 0xF3AE, 0xDCC6, 0xD9EB, 0, /* 0x60 */
+ 0, 0, 0xE8E0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE1A8, 0, 0, 0, 0, 0xD5F6, /* 0x70 */
+ 0xCFFD, 0, 0, 0xDEDD, 0, 0, 0, 0xD9D1, /* 0x70 */
+ 0, 0, 0, 0xE4EA, 0xF2CF, 0, 0xF7BF, 0, /* 0x80 */
+ 0, 0xE2E6, 0xE2A8, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xE3D6, 0, /* 0x90 */
+ 0xEDD1, 0, 0, 0, 0, 0, 0xE9F9, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xD6B1, 0xDEB2, /* 0xA0 */
+ 0, 0, 0xE0E8, 0, 0, 0xD3AB, 0, 0xEBDC, /* 0xB0 */
+ 0, 0, 0xDFAF, 0, 0xCAC3, 0, 0, 0xEEFC, /* 0xB0 */
+ 0, 0xFDC3, 0, 0, 0, 0xEBF6, 0xCFB2, 0, /* 0xC0 */
+ 0, 0, 0, 0xD9EC, 0, 0xD9BD, 0, 0xD8DF, /* 0xC0 */
+ 0, 0, 0xD4B8, 0xEBBE, 0xDDEF, 0, 0xDDF0, 0xDDF1, /* 0xD0 */
+ 0xDDF2, 0, 0, 0xD9BE, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xFBC6, 0xCFB3 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEEFD, 0, 0, 0, 0, 0, 0, 0xE4AB, /* 0x00 */
+ 0, 0xDAC5, 0, 0xD8EC, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xD1A8, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE2A9, 0, 0, 0xDEBC, /* 0x30 */
+ 0xE7B5, 0, 0, 0, 0, 0, 0xDBF0, 0, /* 0x30 */
+ 0xEFE2, 0xF1F0, 0xCFB4, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xDBF1, 0, /* 0x40 */
+ 0xE0B1, 0, 0, 0, 0, 0xDFA5, 0, 0xF9D2, /* 0x50 */
+ 0, 0, 0xE7FD, 0, 0, 0xE6A3, 0xFBF1, 0xCBB0, /* 0x50 */
+ 0xF2AE, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xCDE7, 0, 0xE8DC, 0, 0, 0xE7D7, 0, 0, /* 0x60 */
+ 0xF7C0, 0, 0xD0E3, 0, 0, 0, 0xDAA1, 0, /* 0x70 */
+ 0, 0, 0xCCBD, 0, 0, 0xD1A9, 0xDDCC, 0, /* 0x70 */
+ 0, 0xE3FE, 0xD1AA, 0xE8AA, 0, 0xEAB6, 0xF9FA, 0xE6CC, /* 0x80 */
+ 0xF6D8, 0, 0, 0, 0xD4C7, 0, 0, 0, /* 0x80 */
+ 0xD9CB, 0, 0xD9D2, 0xD3CB, 0xD8F7, 0xDAA9, 0xF5F8, 0, /* 0x90 */
+ 0, 0xDEDE, 0xF2AF, 0xF8A9, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xD8C8, 0, 0, 0xEEC1, 0, /* 0xA0 */
+ 0, 0, 0, 0xF9C1, 0, 0, 0, 0, /* 0xB0 */
+ 0xDDF3, 0xEAFA, 0, 0xF6BD, 0xE1BB, 0xCDBF, 0xF4D4, 0xE6CD, /* 0xB0 */
+ 0, 0xFCCF, 0xFBA2, 0, 0xE0DC, 0, 0, 0, /* 0xC0 */
+ 0, 0xF4BB, 0xDAD5, 0, 0xF9B2, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xFBF2, 0, 0xDBF6, 0, 0xDEDF, /* 0xD0 */
+ 0, 0, 0, 0xDBF2, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xF8DC, 0xF7EE, 0xEBE8, 0, 0xD2FA, 0, 0, /* 0xE0 */
+ 0xF1BC, 0, 0, 0xFADA, 0, 0, 0xDAEA, 0xDAC6, /* 0xE0 */
+ 0xF7C1, 0, 0, 0xE7B6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5C7, 0xD6AC, 0, 0, 0, /* 0x00 */
+ 0, 0xDCC7, 0, 0, 0, 0, 0, 0xE1A9, /* 0x10 */
+ 0, 0xE2AA, 0, 0xD5A6, 0, 0, 0xD4D7, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF2D0, 0, 0xEAFB, /* 0x20 */
+ 0, 0xE0DD, 0xFBF3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF1BD, 0, 0, 0xE2E7, 0xFDD7, 0, /* 0x30 */
+ 0xCEC8, 0xEAB7, 0, 0xFCC0, 0, 0xFDE7, 0xF7EF, 0, /* 0x30 */
+ 0, 0xD7B5, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xEFBA, 0xF1DD, 0, 0xDEB3, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE8CB, 0, 0, 0xF8DD, 0, /* 0x60 */
+ 0, 0xFBC7, 0xD5C8, 0, 0xD7DF, 0, 0xDDA9, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE9B1, 0, 0, 0xFAAD, /* 0x70 */
+ 0xF6D9, 0xFAF4, 0, 0, 0, 0, 0, 0xF8AA, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE6EE, 0, 0xCCDC, /* 0x80 */
+ 0xE1BC, 0xE0EF, 0, 0, 0xE9BF, 0xFCFD, 0xE6CE, 0, /* 0x80 */
+ 0, 0xE1D7, 0, 0xE6CF, 0, 0xF4F1, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE4F3, /* 0xA0 */
+ 0, 0, 0xE4FB, 0, 0, 0xF9E4, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xEFE3, 0, 0, 0xCFEE, 0xF6BE, 0xE0B2, 0xFCFE, 0xD1AB, /* 0xC0 */
+ 0, 0, 0, 0xD7FA, 0, 0, 0, 0xFBC8, /* 0xC0 */
+ 0, 0xE2D7, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xD4A3, 0xF0F8, 0xD7A8, 0, 0, 0, 0xE1E7, 0, /* 0xD0 */
+ 0, 0xD3BF, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xEFE4, 0, 0xD7C5, 0xEBE2, 0, 0, 0xFCE7, 0, /* 0xE0 */
+ 0, 0xE4A2, 0, 0xE2E8, 0, 0xE6D0, 0, 0xFBE8, /* 0xF0 */
+ 0xF4E8, 0xE5F4, 0xF4BC, 0xF4D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDFB6, /* 0x10 */
+ 0, 0xFCB9, 0xEEC2, 0xCAF5, 0, 0, 0, 0xEFE5, /* 0x10 */
+ 0xCBE2, 0xD4A4, 0, 0xDEE0, 0xDAFD, 0xE4C6, 0xE8BE, 0, /* 0x20 */
+ 0, 0, 0, 0xE0DE, 0xF6B4, 0xEAD2, 0, 0xF9FB, /* 0x20 */
+ 0, 0, 0xE0C2, 0, 0xCAE4, 0, 0xE7B7, 0, /* 0x30 */
+ 0xEAFD, 0, 0xD9DD, 0, 0xDAB4, 0xEEAA, 0xFBE9, 0, /* 0x30 */
+ 0, 0, 0, 0xDBCB, 0xDAB5, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF1BE, 0, 0, 0xD3AC, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xFBC9, 0, /* 0x50 */
+ 0xDFCF, 0, 0, 0xD3C0, 0xE3D7, 0, 0xEFE6, 0xFCD0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE9C0, /* 0x60 */
+ 0, 0, 0, 0xF5D3, 0, 0, 0xECDC, 0xF7B7, /* 0x60 */
+ 0, 0, 0xEAB8, 0xD1F9, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xDCC8, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xEAB9, 0, 0, 0, 0, 0, 0xF1DE, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xD7B6, 0xCFB5, 0, 0xD9A8, /* 0x90 */
+ 0, 0, 0xECEE, 0, 0, 0xDDAA, 0, 0, /* 0xA0 */
+ 0, 0, 0xCDA2, 0xE8AE, 0, 0, 0, 0xE1BD, /* 0xA0 */
+ 0, 0xF2D1, 0, 0, 0, 0, 0xE9C1, 0, /* 0xB0 */
+ 0, 0, 0xD2FC, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xDBB5, 0, 0xF3E7, 0xD8FE, 0, 0, /* 0xC0 */
+ 0, 0xFCD1, 0, 0xEDB2, 0xF4AF, 0, 0xFBA3, 0, /* 0xC0 */
+ 0, 0xFCC1, 0, 0xEEAB, 0xD4A5, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF4F2, /* 0xE0 */
+ 0, 0, 0, 0, 0xEED9, 0, 0, 0, /* 0xF0 */
+ 0xFBCA, 0, 0, 0, 0, 0, 0xCDE3, 0xD8BB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5DB, 0xF8F7, 0, 0, 0, 0xF6D4, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD7A9, /* 0x00 */
+ 0, 0xCBC9, 0, 0, 0xE6D1, 0xF0CC, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xD8AE, 0, 0xF9D3, 0xD5FE, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xD8BC, 0xF2B0, 0, 0, 0, /* 0x20 */
+ 0, 0xE2AB, 0xF3E8, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xEFC2, 0, 0, 0, 0, 0, 0, 0xEDEC, /* 0x30 */
+ 0, 0xE7B8, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xDAFE, 0, 0, 0xCCBE, 0, 0, 0xF2FC, /* 0x50 */
+ 0xDAEB, 0, 0xE2D8, 0xEDD6, 0, 0, 0xD6D1, 0xE0B3, /* 0x50 */
+ 0, 0, 0xFCD2, 0, 0xEBC8, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xD3C1, 0xF0CD, 0, /* 0x60 */
+ 0xCFF7, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xEDD2, 0, 0xD4D8, 0xDCC9, 0xD7F1, 0, /* 0x70 */
+ 0, 0xDFBB, 0, 0, 0xF3A5, 0, 0, 0, /* 0x80 */
+ 0xF4CD, 0, 0, 0, 0, 0xF1BF, 0xF8B1, 0, /* 0x80 */
+ 0xE9FA, 0, 0, 0, 0xFBCB, 0, 0, 0xCAD5, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF9D4, 0xF7CA, 0, 0, 0xD6C8, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xFCE8, 0xF3BD, /* 0xA0 */
+ 0, 0xEEFE, 0, 0xE7FE, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xD3C2, 0, 0, 0, 0, 0xD3B6, 0, /* 0xB0 */
+ 0xCCAD, 0xF6FA, 0xD6B2, 0xD2D8, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE7D8, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xE3A5, 0, 0, /* 0xD0 */
+ 0, 0, 0xE7B9, 0, 0, 0, 0, 0xF0AD, /* 0xD0 */
+ 0xFBCC, 0xEBA1, 0, 0, 0xD4A6, 0, 0, 0, /* 0xE0 */
+ 0, 0xFBCD, 0, 0xD5BD, 0xF1DF, 0, 0, 0xF6FB, /* 0xE0 */
+ 0, 0xDEB4, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0xD5EB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5C8, 0, 0, 0, 0xFBA4, 0xD4B9, 0, /* 0x00 */
+ 0, 0xDEE1, 0, 0xE4A3, 0, 0, 0, 0xD7B7, /* 0x00 */
+ 0, 0xF8EE, 0, 0, 0, 0xDEB5, 0, 0, /* 0x10 */
+ 0xD6D2, 0, 0xF9D5, 0xE7BA, 0xEBD5, 0xD5F7, 0xEFE7, 0xE1BE, /* 0x10 */
+ 0, 0, 0, 0xFAAE, 0, 0, 0, 0xD6E9, /* 0x20 */
+ 0xD6EE, 0, 0, 0, 0, 0, 0, 0xE7BB, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xECCB, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xD5B3, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xCEB4, 0, 0, 0, /* 0x40 */
+ 0xFBA5, 0xE1EE, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF7A8, 0, 0, 0, 0, 0xFBCE, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xD8BD, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xFBFD, 0, 0, 0, 0, /* 0x60 */
+ 0xFCE9, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xCFB6, 0, 0, 0, 0xEDC7, 0xEEAC, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xCCDD, 0, 0, /* 0x80 */
+ 0, 0, 0xF6A7, 0, 0, 0, 0xE6FA, 0, /* 0x80 */
+ 0, 0, 0xF5A4, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xFDDC, 0xEDB3, 0xCEC9, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xEFE8, 0, 0, 0xE1BF, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xFADB, 0xCBE3, 0xF7A9, 0, 0xFBA6, /* 0xA0 */
+ 0, 0, 0, 0xDCB9, 0, 0, 0, 0xF1C0, /* 0xB0 */
+ 0xEDC8, 0xEFC3, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xD6AD, 0, 0, 0xFDCE, 0, 0, 0, 0xE8A1, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xFBF4, 0xD5A7, 0, 0, 0, 0xF1F6, 0, 0xE6D3, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xCCDE, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xF8B2, 0, 0, 0, 0xDCEB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFDB6, 0, 0, 0, /* 0x00 */
+ 0, 0xE5EA, 0, 0, 0xF1E0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xDBCC, 0xDDCD, 0, 0, 0, 0xD4C8, 0, /* 0x10 */
+ 0, 0xD9ED, 0, 0, 0, 0, 0xF5A5, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE6FB, 0, 0, 0, 0, 0, 0xE6D4, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFDC8, /* 0x40 */
+ 0, 0xD6A1, 0xFDBF, 0, 0xFCD3, 0, 0xEFA1, 0, /* 0x40 */
+ 0xE7BC, 0, 0, 0, 0, 0, 0xD1EE, 0, /* 0x50 */
+ 0, 0xE6D5, 0, 0, 0xE9F2, 0, 0xDFB0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xD8E0, 0xFCBA, 0xFDAF, 0xF0CE, /* 0x60 */
+ 0, 0xDBE1, 0, 0, 0xE5C9, 0, 0xEDB4, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE0C3, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xE3D8, 0, 0, 0, /* 0x80 */
+ 0, 0xE9FB, 0xEAA8, 0, 0, 0, 0, 0xFDB7, /* 0x80 */
+ 0, 0, 0xFBA7, 0, 0xE9C2, 0, 0, 0, /* 0x90 */
+ 0, 0xFDF7, 0, 0, 0, 0, 0, 0xE2D9, /* 0x90 */
+ 0, 0, 0xDCEC, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE8A2, 0, 0, 0, /* 0xA0 */
+ 0, 0xE6F0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xFDF8, 0xFDF9, 0, 0, 0, 0xF6BF, 0, /* 0xB0 */
+ 0, 0xE7A7, 0, 0xE6D7, 0, 0, 0, 0, /* 0xC0 */
+ 0xD4F3, 0xD4C9, 0, 0, 0, 0, 0xD6FA, 0, /* 0xC0 */
+ 0xD7F2, 0, 0xE1C0, 0, 0xDBE2, 0xE6D8, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7BD, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xF0CF, 0xF3BE, 0xE2AC, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF5B7, 0xE0F0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xFDB8, 0xE3E8, 0, 0xD4A7, 0xE8FC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFAD2, 0, 0, 0, 0, 0, 0xF8EF, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xD6D3, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xD5B4, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF0D0, 0, 0xF7F0, 0xEEB3, 0, 0, /* 0x20 */
+ 0xEABA, 0, 0xEAD3, 0, 0, 0xEDC9, 0xDDAB, 0, /* 0x30 */
+ 0, 0, 0xE5AC, 0xFDA1, 0, 0xDFD0, 0xECB3, 0, /* 0x30 */
+ 0xDFD1, 0, 0, 0, 0, 0, 0xEDED, 0xF8B8, /* 0x40 */
+ 0xF7FA, 0, 0, 0, 0xF8AB, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF4E0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xD4BA, 0xE4B3, 0, 0xE9DA, 0, 0xDEB6, 0, 0xD9BF, /* 0x50 */
+ 0, 0xD9C0, 0xD6EF, 0, 0, 0, 0, 0xD9CC, /* 0x60 */
+ 0, 0xDAAA, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xDFE5, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF7E5, 0, 0, 0, 0xCCB2, 0, 0, /* 0x70 */
+ 0xDFF9, 0xD7E0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xD4BB, 0, 0, 0, 0, 0xFDFA, /* 0xA0 */
+ 0, 0, 0, 0, 0xCCB3, 0, 0, 0xDBF3, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xDFD2, 0, 0xCECA, 0, 0xEEDA, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE4E4, 0, /* 0xC0 */
+ 0xFBCF, 0, 0, 0, 0, 0, 0, 0xCFB7, /* 0xD0 */
+ 0, 0xEEC3, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xCEEA, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE2AD, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xD7E1, 0xFAF5, 0, 0, 0xD5C9, 0xF8AC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE7D9, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xF3E9, 0, /* 0x10 */
+ 0, 0, 0, 0xD8ED, 0xE3C4, 0xF0F1, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE8E5, 0, 0, /* 0x20 */
+ 0, 0xE0FA, 0xEEC4, 0xD9DE, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xEBA2, 0xEBA3, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xFCC2, 0xEABB, /* 0x30 */
+ 0, 0, 0, 0, 0xE8AB, 0xDEE2, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEDEF, 0, 0xE8A3, 0, 0, 0, 0, 0xCFF1, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xD4BC, 0, 0xFCEA, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xE7BE, 0, 0xFCF2, 0, 0, 0xD6B4, 0, 0, /* 0x70 */
+ 0xE2AE, 0, 0xD3B7, 0xFACC, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xFADC, 0, 0xEDB5, 0xE1E3, /* 0x80 */
+ 0, 0xE8AC, 0, 0xE8DD, 0, 0, 0xEFE9, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xF4BD, 0, 0xCFB8, 0xE9DB, /* 0x90 */
+ 0xD1AC, 0, 0, 0, 0, 0, 0, 0xDAC7, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEBC9, /* 0xA0 */
+ 0, 0xE8CC, 0, 0, 0, 0xDEB7, 0, 0, /* 0xA0 */
+ 0, 0, 0xD6BC, 0xD3E5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xFADD, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xDAD6, 0, 0xCAB1, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xDAC8, 0xDFA6, 0, 0xF9B3, 0xF2D2, 0, 0xCAC4, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xCECB, 0, /* 0xD0 */
+ 0, 0xCDF5, 0, 0, 0, 0xFDB0, 0xD5A8, 0, /* 0xD0 */
+ 0xF1C1, 0, 0, 0xE2E9, 0xDCCA, 0xECB4, 0xFAC0, 0, /* 0xE0 */
+ 0, 0xFBA8, 0xD0A8, 0, 0, 0xDAEC, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD9EE, /* 0xF0 */
+ 0, 0xE0FB, 0, 0, 0, 0xEFEA, 0xFADE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE0C4, 0, 0xCFB9, 0, 0xD5CA, 0xD7E2, 0xE2AF, /* 0x00 */
+ 0, 0xD7B8, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xE8CD, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xF6DA, 0, 0, 0, 0, /* 0x10 */
+ 0xEFA2, 0xE2DA, 0xF6FC, 0, 0, 0xFBD0, 0xD1AD, 0, /* 0x20 */
+ 0xCDE4, 0, 0xD1AE, 0xDCED, 0xE8CE, 0, 0xF0F9, 0xCEB5, /* 0x20 */
+ 0xE6FC, 0, 0, 0xD7FB, 0xD0D6, 0xDDF5, 0xF7F1, 0, /* 0x30 */
+ 0xF6FD, 0, 0xDBF7, 0, 0, 0, 0, 0xFBEA, /* 0x30 */
+ 0xE9DC, 0xD9C1, 0, 0xF5F2, 0xE0C5, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xEAD4, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF9C2, 0, 0xEABC, /* 0x50 */
+ 0, 0xD2C5, 0xFBD1, 0xE7C0, 0xEBA5, 0, 0xDFFA, 0xE3A2, /* 0x50 */
+ 0xD7B9, 0, 0xE9C3, 0, 0xE8FD, 0xE8AF, 0, 0, /* 0x60 */
+ 0xF2D3, 0xFBA9, 0xD8A5, 0, 0, 0, 0, 0xD5CB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xD0C8, 0, /* 0x70 */
+ 0, 0, 0xD1AF, 0xD7E3, 0, 0, 0, 0xE0C6, /* 0x80 */
+ 0, 0xD6A2, 0, 0xEDF0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xD7F3, 0, 0, 0, 0xFCD4, 0, 0xDAD7, 0xCCDF, /* 0x90 */
+ 0, 0xF2D4, 0, 0xD1B0, 0, 0xCCE0, 0, 0xDBFD, /* 0xA0 */
+ 0xF3BF, 0, 0xF0D1, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xFCBB, 0, 0xE2B0, 0, 0, 0xE6A5, 0, 0, /* 0xB0 */
+ 0, 0xE2DB, 0, 0, 0, 0xDFDE, 0, 0xE0C7, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xF2EF, 0, /* 0xC0 */
+ 0, 0, 0xCCE1, 0, 0, 0, 0, 0xD6EA, /* 0xC0 */
+ 0, 0, 0, 0, 0xE7C2, 0, 0, 0, /* 0xD0 */
+ 0xCEB6, 0, 0xF3C0, 0, 0xCDFE, 0, 0, 0, /* 0xD0 */
+ 0xFBD2, 0, 0xF8F8, 0xF7FB, 0, 0, 0xE8BF, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xE8B7, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEDB6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCBA, 0, 0, 0xCCB4, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xF1F7, 0, 0, 0, 0xE8B8, 0, 0, /* 0x10 */
+ 0xCAF6, 0, 0xE4A4, 0xF4D6, 0, 0, 0, 0xDFE6, /* 0x10 */
+ 0, 0, 0, 0xDFA7, 0, 0xDFE7, 0xE1C1, 0, /* 0x20 */
+ 0xE9C4, 0, 0, 0xDCCB, 0xE9C5, 0, 0, 0, /* 0x20 */
+ 0xEFA3, 0xEBA6, 0xCBA3, 0xE3E9, 0, 0, 0, 0xD1FB, /* 0x30 */
+ 0xEFA4, 0, 0xEFEB, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD0B4, /* 0x40 */
+ 0, 0, 0, 0, 0xCDA3, 0, 0, 0xE8E6, /* 0x40 */
+ 0, 0xEFA5, 0, 0xD3CC, 0xDAED, 0, 0, 0, /* 0x50 */
+ 0, 0xD7BA, 0, 0xF2D5, 0xF5E5, 0xD9EF, 0, 0, /* 0x50 */
+ 0, 0, 0xF9B4, 0, 0, 0xD5D4, 0xFDCF, 0, /* 0x60 */
+ 0, 0, 0xDBE3, 0, 0, 0, 0, 0xF1E1, /* 0x60 */
+ 0xECB6, 0, 0, 0, 0, 0xFBFE, 0xD3D7, 0, /* 0x70 */
+ 0xD1B1, 0, 0xCBB1, 0, 0, 0, 0, 0xD1B2, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xCBB2, 0xF1C2, /* 0x80 */
+ 0, 0, 0xF4E1, 0xF9B5, 0, 0, 0xE1C3, 0xE1C2, /* 0x80 */
+ 0, 0xEBF7, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xDFA8, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xCBCA, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE6B9, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xF8DE, 0xF9AA, 0xCAF7, 0, 0xEDB7, 0, 0, /* 0xB0 */
+ 0xD3B8, 0xF2D6, 0, 0, 0xD4D9, 0xEEC5, 0xF2F0, 0, /* 0xB0 */
+ 0, 0, 0xCAB2, 0, 0, 0xDCBB, 0, 0xF1F8, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xECB7, 0, 0, /* 0xC0 */
+ 0, 0, 0xE5CA, 0, 0xF6C0, 0xFDDD, 0, 0, /* 0xD0 */
+ 0xD4E3, 0xCCE2, 0, 0xF7D4, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xD7E5, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xD3C3, 0, 0xD8A6, 0, 0xF6C1, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xDDF6, 0, 0xCDC0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5DC, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE5CB, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE1C4, 0, 0, 0, 0, 0, 0xE8B0, /* 0x10 */
+ 0xF4B0, 0xF3EA, 0xDAEE, 0, 0xD7BB, 0, 0xE2B1, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xD7AA, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xD6FB, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE4DF, 0, 0xCAD6, 0, /* 0x40 */
+ 0, 0, 0xEBA8, 0, 0, 0, 0xDBFE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF6C2, 0, 0, 0xEFBB, 0, 0, 0, /* 0x60 */
+ 0, 0xD4FD, 0, 0, 0xE0C8, 0, 0, 0, /* 0x60 */
+ 0xE8B9, 0, 0xEFA6, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xCDA4, 0, 0, 0xD4F4, 0xDBA1, 0xDBDC, 0xDBDD, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xEEDC, 0, 0xCBCB, 0xFCD5, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xCEEB, 0, /* 0x80 */
+ 0xCDC1, 0, 0, 0xFBD3, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xF9AB, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xF5D4, 0, 0, 0, 0, 0xD9A9, /* 0xB0 */
+ 0, 0, 0xE9DD, 0xDBCD, 0, 0, 0xDDCE, 0, /* 0xC0 */
+ 0xE7C3, 0, 0xECCC, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xF9EC, 0, 0, 0, 0xCBCC, 0, /* 0xD0 */
+ 0, 0, 0, 0xE0FC, 0xD4A8, 0, 0xEDD3, 0xD8EF, /* 0xD0 */
+ 0, 0xF2D7, 0, 0xCAF8, 0xDAEF, 0, 0, 0xD6D4, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xD9CD, 0, /* 0xE0 */
+ 0, 0, 0xD8EE, 0, 0xF2C1, 0, 0, 0, /* 0xF0 */
+ 0xDFD3, 0, 0, 0, 0xDAF0, 0, 0xE2EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE0FD, 0, 0, 0xD8F8, 0, 0, 0, /* 0x00 */
+ 0xF7AF, 0xDAB6, 0, 0xCAD7, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xF2D8, 0, /* 0x10 */
+ 0xD8F9, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xFADF, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCFEF, /* 0x30 */
+ 0xD9C2, 0, 0xF0D2, 0, 0xE4D1, 0, 0, 0, /* 0x30 */
+ 0xF3B7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xFAE0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xEFEC, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xE2B2, 0, 0xD4BD, 0, 0, 0xD9CE, 0, /* 0x60 */
+ 0, 0, 0, 0xF4E2, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD4A9, 0, 0, 0, 0, 0xCDC2, 0xE7DA, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF2D9, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xD9AA, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xD8BE, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xDCAD, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE2EB, 0xD6FC, 0, 0, /* 0xA0 */
+ 0xCAF9, 0, 0, 0xD4DA, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF4D7, 0xCCA1, 0, 0, 0xCFBA, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF5B8, /* 0xD0 */
+ 0, 0, 0, 0xD9C3, 0xD0E8, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE3C5, 0xEBF8, 0, 0xF2B1, 0, 0, /* 0xE0 */
+ 0, 0xCFBB, 0, 0, 0, 0xD3AD, 0xE8E1, 0xCEEC, /* 0xE0 */
+ 0, 0, 0, 0xE0B4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDEE3, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xDDF7, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF2B2, 0xF3F6, 0xF6DB, /* 0x20 */
+ 0, 0, 0, 0, 0xD7FE, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF8DF, 0, 0xF7F2, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xD0A9, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6DA, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xF5A6, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xD7BC, 0xCCE3, 0, 0, 0xE6DB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xDDDD, 0, 0, 0, /* 0x70 */
+ 0, 0xD1B3, 0, 0, 0, 0, 0, 0xEFED, /* 0x80 */
+ 0, 0, 0, 0, 0xD6DE, 0xE4F4, 0xE1EF, 0, /* 0x80 */
+ 0, 0xDDF8, 0, 0, 0, 0, 0, 0xE8CF, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xCAE5, 0, 0, 0, 0xDCA1, /* 0xA0 */
+ 0, 0xE0B5, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xFCAC, 0xFCAD, 0xD8A7, 0, 0, 0, /* 0xB0 */
+ 0, 0xEDB8, 0, 0, 0, 0xDBB6, 0, 0, /* 0xC0 */
+ 0, 0, 0xD6F0, 0xF3AF, 0, 0, 0xCDA5, 0, /* 0xC0 */
+ 0xDAF1, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xD8A8, 0, 0, 0, 0xCCE4, 0, 0, 0xD1B4, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xCAD8, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xDAF2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5A7, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xF5A8, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE6A6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xD5EC, 0xD5F8, 0xDAF3, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xE3C6, 0, 0, 0, 0xDEE4, 0, /* 0x30 */
+ 0xDEE5, 0xD1B5, 0, 0, 0, 0, 0, 0xD1B6, /* 0x40 */
+ 0xD1B7, 0xF2B3, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xE9DE, 0, 0, 0, 0, 0, 0xF0D3, 0xF2B4, /* 0x50 */
+ 0, 0, 0xF0D4, 0xCBE4, 0xFBD4, 0xF5E6, 0xE3EA, 0, /* 0x50 */
+ 0xDEE6, 0, 0, 0, 0, 0xDFD4, 0, 0, /* 0x60 */
+ 0xF8F9, 0, 0, 0, 0, 0xF0AE, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xD1B8, 0, 0, 0, 0, 0xD6DF, /* 0x70 */
+ 0, 0xD0D7, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xFCA1, 0xEFEE, 0xDCD8, /* 0x80 */
+ 0, 0xE9DF, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xE5DD, 0xFDFB, /* 0xA0 */
+ 0, 0, 0xE0C9, 0, 0, 0, 0xD6C9, 0, /* 0xA0 */
+ 0, 0xD4AA, 0, 0xE5CC, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE9E0, 0, 0, 0, 0xD0D8, 0xFCA2, 0xD4BE, /* 0xB0 */
+ 0xE2B3, 0xDEE7, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xDCBC, 0xD2B6, 0xF5D5, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xCEA1, 0xF5A9, 0, 0, 0xDDF9, 0, 0, /* 0xD0 */
+ 0xDDFA, 0, 0, 0, 0, 0, 0, 0xF0D5, /* 0xD0 */
+ 0, 0, 0, 0, 0xF6DF, 0, 0xF2DA, 0xE4EB, /* 0xE0 */
+ 0, 0xF2F1, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xECB9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFDFC, 0, 0, 0, 0, 0xE1AA, 0, 0, /* 0x00 */
+ 0xCAD9, 0, 0, 0xEFEF, 0, 0xF5AA, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xECF9, 0, 0, 0xF8AD, /* 0x10 */
+ 0, 0xF2C2, 0xF6C3, 0, 0xD7D2, 0, 0, 0xF9A2, /* 0x10 */
+ 0xF0D6, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xF0FA, 0, /* 0x20 */
+ 0, 0xF6E0, 0, 0, 0, 0, 0xE9F3, 0xF2C3, /* 0x30 */
+ 0, 0, 0, 0xD4AB, 0xCAB3, 0xCDA6, 0, 0xCDC3, /* 0x30 */
+ 0xCDDA, 0, 0, 0, 0, 0, 0xD9CF, 0, /* 0x40 */
+ 0, 0xF6C4, 0, 0, 0, 0xEEDD, 0xE7C4, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2B4, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xDFE2, 0xE7DB, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE8B1, 0, 0xFCAE, 0, 0, 0, 0, /* 0x60 */
+ 0xE5CD, 0, 0, 0, 0xFAEB, 0, 0xCFBC, 0, /* 0x70 */
+ 0, 0xCFE2, 0xCDF6, 0, 0, 0xEFF0, 0, 0xF4BE, /* 0x70 */
+ 0, 0xD4CD, 0, 0, 0xF3B8, 0, 0, 0, /* 0x80 */
+ 0xE9A1, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xF2F2, 0xF3EB, 0, 0xF0D7, 0, 0, /* 0x90 */
+ 0xCFD7, 0, 0, 0, 0, 0, 0, 0xCFDF, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE8C0, 0xE8C1, 0, 0, 0, 0xCFE3, 0xE9A2, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xD0AA, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF3C1, 0xD0AB, 0, 0xD4E4, /* 0xC0 */
+ 0, 0, 0xEFBC, 0xD8A1, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD9DF, /* 0xD0 */
+ 0, 0xF3D7, 0, 0, 0, 0xDCBD, 0, 0xCCE5, /* 0xD0 */
+ 0xEDF1, 0, 0, 0xF1E2, 0, 0xD4DB, 0, 0, /* 0xE0 */
+ 0, 0, 0xE2B5, 0, 0, 0xCAE6, 0, 0xD3AE, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xCCE6, 0, /* 0xF0 */
+ 0, 0xF1D3, 0xF5E7, 0, 0, 0, 0, 0xCADA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFBEE, /* 0x00 */
+ 0, 0xE1C5, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xDFE9, 0, 0xEEDE, 0, 0, 0xF7C2, 0, /* 0x10 */
+ 0xD8A2, 0, 0, 0, 0, 0, 0xDDAC, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xF0AF, 0xD6BD, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xE1AB, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xF9B6, 0, /* 0x40 */
+ 0, 0xD4F5, 0, 0xD0C9, 0xEFA7, 0xE2EC, 0, 0xDBEA, /* 0x40 */
+ 0xCECC, 0xF5E8, 0xF7D5, 0, 0xD3CD, 0, 0xF3FE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xD0B5, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE0FE, 0, 0xDFFB, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE6DD, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE8A4, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCBCD, /* 0x80 */
+ 0, 0, 0, 0xEFA8, 0, 0, 0, 0xEEB4, /* 0x80 */
+ 0, 0, 0, 0, 0xDAD8, 0xD1B9, 0, 0xDFA9, /* 0x90 */
+ 0, 0, 0xF3B0, 0, 0, 0xCCC4, 0, 0, /* 0x90 */
+ 0, 0xCEB7, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xEFA9, 0, 0, /* 0xA0 */
+ 0, 0xDFD5, 0, 0, 0xEDD7, 0, 0, 0, /* 0xB0 */
+ 0xEEC6, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xEFBD, 0xFCD6, 0, 0, 0xDBF4, 0, 0xEFAA, 0xF8B9, /* 0xC0 */
+ 0, 0xF5E9, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE3D9, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xE1C6, 0, 0, 0, 0xD4BF, 0, 0, 0, /* 0xE0 */
+ 0, 0xDEE8 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0EA, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF3C2, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xD3AF, 0, /* 0x10 */
+ 0, 0xCADB, 0, 0, 0, 0, 0, 0xFCD7, /* 0x20 */
+ 0, 0, 0xEDD8, 0xE1C7, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF4D8, 0xD6B3, 0xDDAD, /* 0x30 */
+ 0, 0, 0, 0xD5BE, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF1C3, 0xEEDF, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xD6EB, 0, 0, 0, 0xF4D9, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xD7E6, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xDAB7, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0xDDFB, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xDDCF, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD8A3, 0, 0, 0xDAD9, 0, 0xF0D8, /* 0x90 */
+ 0xEFC4, 0, 0, 0, 0, 0, 0, 0xE1D8, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF1D4, 0, 0xEDF2, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xD5DB, 0, /* 0xA0 */
+ 0, 0xD5DC, 0xF3C4, 0xCBD7, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE2B6, 0, 0, 0, 0, 0xEFF1, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xFBD5, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xD3D8, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xDDD0, 0xF0D9, /* 0xD0 */
+ 0xCBB3, 0, 0, 0, 0, 0, 0, 0xD5DD, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xCDA7, 0, 0, 0xD0AC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1BA, 0, 0xF1C4, 0, 0xE5B3, 0xFBF5, 0xE9E1, 0xFDE0, /* 0x00 */
+ 0xFCBC, 0, 0xDAA2, 0xDAA3, 0, 0xD2A1, 0, 0, /* 0x00 */
+ 0xD2EF, 0, 0, 0, 0xE2ED, 0, 0, 0xDEE9, /* 0x10 */
+ 0xCEDC, 0xF2B5, 0xD0E4, 0xDDD1, 0, 0, 0, 0, /* 0x10 */
+ 0xE1C8, 0xDBB7, 0xDFE3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xEDB9, 0xF1C5, 0, 0xF3CF, 0xD7AB, /* 0x20 */
+ 0xE1AC, 0, 0, 0xE3EB, 0, 0xEEC7, 0, 0, /* 0x30 */
+ 0, 0xE1C9, 0xCAFA, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xF0FB, 0xFAE1, 0xF0DA, 0xCCE7, 0xDAF4, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xCCBF, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xCEED, 0, /* 0x50 */
+ 0, 0xD5A9, 0xFAE2, 0, 0, 0, 0xD0E5, 0, /* 0x60 */
+ 0xEBD6, 0, 0xECDF, 0, 0, 0, 0xDFFC, 0, /* 0x60 */
+ 0, 0xF7D6, 0xDEEA, 0xCBB4, 0, 0, 0xEFBE, 0, /* 0x70 */
+ 0, 0xCCB5, 0, 0, 0, 0, 0, 0xCFBD, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xEFF2, 0xE2B7, /* 0x80 */
+ 0, 0, 0, 0xCCE8, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF0FC, 0, 0, 0, /* 0x90 */
+ 0xD6E0, 0, 0xF1C6, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE2B8, 0xEBAB, 0, 0, /* 0xA0 */
+ 0, 0xCBB5, 0xD8D1, 0, 0xF4CE, 0xF3F7, 0, 0, /* 0xB0 */
+ 0xD7C6, 0, 0xD1BB, 0xF7AA, 0, 0xEDCA, 0xD7D3, 0xD8FA, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF6C5, /* 0xC0 */
+ 0, 0, 0xD1CC, 0xDDFC, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xDFFD, 0, /* 0xD0 */
+ 0xF9E5, 0, 0xE0CA, 0, 0, 0xF2FD, 0xD3B0, 0, /* 0xD0 */
+ 0xF4F3, 0xDAC9, 0, 0xE6DE, 0, 0, 0, 0, /* 0xE0 */
+ 0xF8BA, 0xE8D0, 0, 0, 0xD8FB, 0, 0, 0xEAD5, /* 0xE0 */
+ 0, 0, 0, 0, 0xD6A3, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xF6C6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF2DB, 0xE4FC, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE8B2, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xDADA, 0, 0xF2DC, 0xFBD6, 0xE9B2, /* 0x10 */
+ 0, 0xEEAD, 0, 0xFAE3, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xDCEE, 0, 0, 0xF5EA, 0xE6E0, /* 0x20 */
+ 0, 0xF0FD, 0, 0, 0, 0, 0, 0xD7AC, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF5C5, 0xEEE0, 0, /* 0x30 */
+ 0, 0xDBE5, 0, 0xDDDE, 0, 0, 0xD9F0, 0xE9A3, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF1F9, 0, 0xF2C4, 0xE0CB, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xE9A4, 0, /* 0x50 */
+ 0, 0xE2B9, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE3B1, 0xFCEB, 0xCDA8, 0, 0xCCB6, 0, 0, /* 0x60 */
+ 0xF0DB, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xE6BA, 0, 0, 0xCDA9, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xF3C3, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE1D9, 0, 0, 0xEFAB, /* 0x80 */
+ 0, 0, 0, 0xE7C5, 0, 0, 0xE0E9, 0, /* 0x90 */
+ 0xF3C5, 0, 0, 0xD4C0, 0xD5BF /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDDAE, 0, /* 0x30 */
+ 0xF9FC, 0, 0xCCC0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE5A2, 0, 0, 0, /* 0x40 */
+ 0xCEB8, 0, 0, 0, 0xD8D2, 0xF9D6, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xF1AA, 0xCED1, 0, 0, 0xF6C7, 0, /* 0x60 */
+ 0xDBEB, 0, 0xDFFE, 0, 0, 0xD8E1, 0, 0xF7F3, /* 0x70 */
+ 0, 0xD7E7, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xD4FE, 0, 0, /* 0x80 */
+ 0xD1BC, 0, 0xE5CF, 0, 0xCBB6, 0, 0xDAB8, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xCDC4, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xD6BE, 0, 0, 0, 0xE2BA, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xCFD8, 0, 0, 0, /* 0xA0 */
+ 0xE0CC, 0xEBF9, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xFDFD, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xD7E8, 0xCBD8, 0, 0, 0, 0xE9E2, 0, 0, /* 0xB0 */
+ 0, 0xE8BA, 0, 0, 0, 0xE3C7, 0, 0, /* 0xC0 */
+ 0, 0, 0xECCD, 0, 0xECCE, 0, 0xD6BF, 0, /* 0xC0 */
+ 0, 0, 0xE3A7, 0, 0xDFD6, 0xFDE8, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEEE1, /* 0xD0 */
+ 0xF6A8, 0xDDFD, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xF8BB, 0, 0xE8D1, 0, 0, 0, 0, /* 0xE0 */
+ 0xF9D7, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xCEEE, 0, 0, 0xECCF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE9A5, 0xD6D5, 0, 0xCDC5, 0, 0xEDBA, 0xD1BD, 0, /* 0x00 */
+ 0, 0xCFBE, 0, 0, 0xECBB, 0, 0, 0, /* 0x00 */
+ 0xD2B1, 0, 0, 0, 0, 0xCCE9, 0, 0xD9C4, /* 0x10 */
+ 0xE9FC, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xD1BE, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xECBC, 0, 0, 0xE5AD, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF7B0, 0, 0xCCEA, /* 0x30 */
+ 0, 0, 0, 0xD3C4, 0, 0, 0xD6C0, 0, /* 0x40 */
+ 0, 0, 0xD6FD, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xE1A1, 0, /* 0x50 */
+ 0xDEBD, 0, 0xF6A9, 0, 0, 0, 0xDAA4, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD6A4, /* 0x60 */
+ 0xF5C6, 0, 0xE1A2, 0xE9C6, 0, 0, 0, 0xF2C5, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF4E9, 0xD6EC, 0xEBD3, /* 0x70 */
+ 0, 0, 0, 0, 0xECBD, 0xE2DC, 0xDEEB, 0xF0DC, /* 0x80 */
+ 0, 0xEBBF, 0, 0xD7CE, 0xD1BF, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xF5AB, 0, /* 0x90 */
+ 0, 0, 0, 0xF9FD, 0, 0xCADC, 0, 0, /* 0x90 */
+ 0, 0xCDC6, 0xF2B6, 0, 0, 0xDDFE, 0, 0, /* 0xA0 */
+ 0, 0xCCB7, 0xDBB8, 0, 0, 0, 0, 0xD0E9, /* 0xA0 */
+ 0, 0xCEDD, 0xEBC0, 0, 0xFDA2, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xF8CB, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xEAD6, 0xF1B0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xDBCE, 0, 0xF7C3, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xDBCF, 0xCBA4, 0, 0, 0xF8E0, 0, /* 0xD0 */
+ 0, 0xFBD7, 0, 0, 0xEBCA, 0xE0A1, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xCECD, 0, 0, 0xD4DC, 0, 0, 0, /* 0xF0 */
+ 0xFDD8, 0, 0, 0, 0, 0xD2F6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF2B7, 0, 0, 0xFAF6, 0xF6AA, 0xFAF7, /* 0x00 */
+ 0xD8E6, 0, 0xF4B1, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE8D2, 0, 0xCAC5, 0xCCEB, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE2EE, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE2BB, 0, 0xF7AD, 0, 0, 0, 0xF8E1, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF3EC, 0, 0, 0, 0, 0xDEA1, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xE4FD, 0, 0, 0xE3EC, 0, /* 0x40 */
+ 0xDDAF, 0xDDB0, 0, 0, 0xCBB7, 0xE8D3, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xE1A3, 0xD2E0, 0, /* 0x60 */
+ 0, 0, 0, 0xF0FE, 0, 0, 0, 0, /* 0x60 */
+ 0xE9A6, 0xCBF2, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xEDF3, 0xDCD9, 0xE0CD, 0, 0, 0, 0, 0xF7DA, /* 0x70 */
+ 0xDBB9, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xCCAE, 0, 0xDADB, 0, 0, 0, 0, 0xCDC7, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xDDB1, 0, 0xD8AF, 0xE3A3, 0, 0, /* 0x90 */
+ 0xCEEF, 0, 0, 0xF2F3, 0, 0, 0, 0, /* 0xA0 */
+ 0xF8B3, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE0CE, 0, 0xF5FD, 0, 0, /* 0xB0 */
+ 0, 0, 0xEBEC, 0, 0, 0xD3C5, 0xFCEC, 0xD2DB, /* 0xB0 */
+ 0xD4EB, 0, 0xDEA2, 0, 0, 0, 0xE5E6, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xF0B0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xD5C4, 0, 0, 0, 0, 0, 0, 0xEDF4, /* 0xD0 */
+ 0, 0, 0, 0xE3ED, 0, 0xE8C2, 0, 0xEDF5, /* 0xE0 */
+ 0xD7FC, 0, 0xEDBB, 0, 0, 0xF6AB, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF2B8, 0xF6C8, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xD3E6, 0xF2DD, 0xCFBF, 0, 0xEBAC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFC0, 0, 0xE6A8, /* 0x00 */
+ 0xFDE9, 0, 0xCFC1, 0, 0xE0DF, 0xDEEC, 0, 0, /* 0x00 */
+ 0, 0, 0xE0A2, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xF4BF, 0xE2EF, 0, 0xD9F1, 0xF1C7, /* 0x10 */
+ 0, 0xCBB8, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF9FE, 0xDBBA, 0xDAF5, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF6EC, 0xDADC, 0xFAE4, /* 0x30 */
+ 0, 0xE0CF, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xDDB2, 0, 0, 0, 0, 0xE6A9, 0, 0xEFF3, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF3ED, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xEBFA, 0, 0xF9E6, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xCADD, 0xD5DE, /* 0x60 */
+ 0, 0xCADE, 0xDFE4, 0, 0, 0, 0xE6FD, 0, /* 0x70 */
+ 0xF5AC, 0, 0, 0, 0, 0, 0xE4F5, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xE9E3, 0, 0xEDCB, 0xCFE4, 0, /* 0x80 */
+ 0, 0, 0xD8D3, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xDDB3, 0xD4EC, 0, 0, 0xF2B9, 0, 0xDFB7, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xCBCE, 0xFBD8, 0, /* 0xA0 */
+ 0, 0xD0D9, 0, 0, 0xDDD2, 0xF7F4, 0xE7DC, 0xE4A5, /* 0xA0 */
+ 0, 0xFCA3, 0, 0xDBBB, 0, 0, 0, 0xF2BA, /* 0xB0 */
+ 0xE9FD, 0xD0CA, 0, 0xF5D6, 0xD9C5, 0xE4B4, 0, 0xEDA7, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xEABD, 0xE6FE, 0, 0xF7C4, 0xF5AD, 0, 0xD9E0, /* 0xD0 */
+ 0, 0, 0, 0xCAB4, 0, 0, 0xF8E2, 0xCFC2, /* 0xD0 */
+ 0, 0xECBE, 0, 0, 0, 0xE5B4, 0xCDC8, 0xEEC8, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE7C8, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xCDC9, 0xF9B7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF1E8, 0xD9F2, 0xDBF5, 0xCAB5, 0xD9C6, 0, 0, /* 0x00 */
+ 0, 0xD8C9, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD9AB, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xEDBC, 0, 0, 0xD8D4, 0, 0, 0, 0xDCDA, /* 0x20 */
+ 0, 0xE2BC, 0, 0, 0xFCED, 0xECE0, 0xD2FE, 0, /* 0x30 */
+ 0xE9C7, 0xE6AA, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE2F0, 0, 0, 0, 0, 0, 0, 0xFABB, /* 0x40 */
+ 0, 0xF5AE, 0xFBAA, 0, 0, 0, 0, 0xECFB, /* 0x40 */
+ 0, 0xECBF, 0xFCD8, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xD4E5, 0, 0, 0, 0xF9C3, /* 0x70 */
+ 0, 0, 0, 0xEEE2, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xD7E9, 0xEDF6, 0, 0, 0, 0xDEED, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xCCEC, 0, /* 0x90 */
+ 0xE3EE, 0, 0, 0, 0, 0, 0xE8D4, 0, /* 0x90 */
+ 0, 0, 0xFAF8, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xDDB4, 0xE4B5, 0xD8B0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xD8D5, 0, 0, /* 0xB0 */
+ 0, 0xF4EA, 0, 0, 0, 0xCEB9, 0, 0, /* 0xC0 */
+ 0, 0xD6E1, 0xCFD2, 0, 0xD0B6, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xCEA2, 0, 0, 0xF3EE, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xF3F8, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xDCCC, 0, 0xD0CB, 0, 0, 0, 0xFCA4, /* 0xE0 */
+ 0xCDCA, 0xD7D4, 0xDEA3, 0, 0xE4E0, 0, 0, 0, /* 0xF0 */
+ 0, 0xEEC9, 0, 0, 0, 0xE2DD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5FE, 0xD4AC, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xD5D1, 0, 0xD8F0, 0xF8C3, 0xEAD7, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xF5D7, 0, 0, 0xD8BF, 0, 0, 0, /* 0x20 */
+ 0, 0xFDC0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xEBAD, 0, 0, 0, 0, 0xD5AA, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xE7A8, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEECA, /* 0x50 */
+ 0, 0, 0, 0xCAE7, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF8E3, 0, 0xD4DD, 0, 0, 0xEAD8, 0, /* 0x60 */
+ 0, 0, 0, 0xFBD9, 0xEDF7, 0, 0, 0xE5B5, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xD0AD, 0, 0, /* 0x70 */
+ 0, 0, 0xF1F1, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE2BD, 0, 0, 0, 0xE3C8, 0, 0, 0, /* 0x90 */
+ 0, 0xD9D5, 0, 0, 0xDFAA, 0, 0, 0, /* 0x90 */
+ 0, 0xDBBC, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xF8E4, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xF1FA, 0, 0, 0xE5B6, 0xF3EF, 0, 0, 0xFBDA, /* 0xB0 */
+ 0xE1E0, 0, 0xD9AC, 0, 0xF5EB, 0, 0xE0B6, 0, /* 0xC0 */
+ 0, 0xE9C8, 0, 0xCBCF, 0, 0xE3C9, 0, 0, /* 0xC0 */
+ 0, 0xDEEE, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE2BE, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xDCEF, 0, 0xD6A5, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE2F1, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xD6FE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD9A1, 0, 0xD8C0, 0xDCDB, 0, 0, 0xEDBD, /* 0x10 */
+ 0xDFB8, 0, 0xEAA5, 0, 0, 0, 0xD7AD, 0, /* 0x10 */
+ 0, 0xF3F9, 0, 0xEDF8, 0, 0xF5C7, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE1CA, 0xEBE3, 0, 0xF2DE, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF8CC, 0, 0xEAD9, /* 0x30 */
+ 0, 0xD3C6, 0, 0xDBE6, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF5AF, 0, 0, 0, 0, 0xCEF0, 0, /* 0x40 */
+ 0, 0, 0, 0xE9FE, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xFBB6, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE2F2, 0, 0, 0, 0, /* 0x60 */
+ 0xCFF2, 0xF7B9, 0xD9F3, 0, 0, 0xE1CB, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xDADD, 0, 0, 0xDAB9, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEBFB, /* 0x80 */
+ 0, 0xCBB9, 0, 0, 0xEDF9, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE0E0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xF4C0, 0, /* 0xA0 */
+ 0xFDBC, 0xDFB1, 0xE3EF, 0, 0, 0, 0, 0xE0A3, /* 0xA0 */
+ 0xFDB9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xF0B1, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xCDCB, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xEDBE, 0, 0, 0, 0xD5C0, 0xE3F0, 0xEDFA, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xE9E4, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xD5ED, 0xE7DD, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xD4F6, 0xE5B7, 0, 0, /* 0xE0 */
+ 0, 0xDBE7, 0xE2BF, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEECB, /* 0xF0 */
+ 0, 0, 0xD7F4, 0xF0DD, 0, 0, 0, 0xCEAB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE7DE, 0, 0, 0, 0xD6D6, 0xE1CC, /* 0x00 */
+ 0, 0, 0xE8B3, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE5EE, 0xDCA2, /* 0x10 */
+ 0, 0, 0xE0D0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xD5B5, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD5A1, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xFBDB, 0, /* 0x40 */
+ 0xF9CB, 0, 0, 0, 0xCBF3, 0xF4A5, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xFAC8, 0xD6D7, 0, 0xE9E5, 0xFBDC, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFDD0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xFBF6, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xDAA5, 0, 0xDBBD, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xECE2, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xCDF7, 0xF0DE, 0, 0, 0, /* 0xA0 */
+ 0, 0xF6C9, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDEEF, /* 0xC0 */
+ 0, 0, 0, 0xD3B1, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xFCEE, 0, 0, 0, /* 0xD0 */
+ 0, 0xE8C3, 0, 0xF1C8, 0, 0, 0, 0xCEF1, /* 0xD0 */
+ 0, 0, 0, 0, 0xF9ED, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF2F4, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0xE4B6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5B9, 0, 0xDCF0, 0xE3F1, 0, 0, 0, 0, /* 0x00 */
+ 0xE8A5, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF2BB, 0, 0xDEA4, 0, 0xDACC, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xCAE9, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE3DA, 0, 0xFCD9, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEADA, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xF9C4, 0, /* 0x60 */
+ 0xE3A4, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xFBDD, 0, 0xEFCA, 0, /* 0x70 */
+ 0xE8C4, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xD5CC, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xEBD7, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD9AD, /* 0x90 */
+ 0, 0, 0xFBAB, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xD3D9, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xD5A2, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF6DE, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xDAF6, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE0D1, 0, 0, 0xE9A8, /* 0xE0 */
+ 0, 0, 0xF5F9, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xFAAF, 0, 0xEBFC, 0, 0, 0xE0EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE3B2, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD5C5, /* 0x10 */
+ 0, 0, 0xF1E3, 0xD5EE, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xCDCC, 0, 0, 0, 0, 0xEDD9, 0, /* 0x30 */
+ 0, 0, 0, 0xD8C1, 0, 0, 0, 0, /* 0x30 */
+ 0xFAEC, 0, 0, 0, 0, 0, 0xF1EB, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xFABC, 0xE6E2, 0, 0, /* 0x40 */
+ 0, 0, 0xFAE5, 0xE2FA, 0, 0, 0, 0xCAB6, /* 0x50 */
+ 0, 0xE4B7, 0, 0xEADB, 0, 0xF5FA, 0, 0, /* 0x50 */
+ 0, 0xFBAC, 0xCFC3, 0xEBFD, 0, 0, 0, 0, /* 0x60 */
+ 0xF8FA, 0, 0, 0xDFB9, 0, 0, 0, 0, /* 0x60 */
+ 0xE1F1, 0, 0xD2A4, 0, 0, 0, 0, 0xF5FB, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xD0DA, 0xD0DB, /* 0x70 */
+ 0, 0xEABE, 0xD9B1, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xCAB7, 0, 0, 0xD3E7, 0, 0xF8E5, 0, 0, /* 0x80 */
+ 0, 0, 0xD3B2, 0, 0, 0, 0xE2C0, 0xF2DF, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xCDE5, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF9AC, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xCDCD, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xEEAE, 0xD6AE, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD7EA, /* 0xC0 */
+ 0, 0, 0, 0, 0xE7E0, 0xEBAE, 0, 0, /* 0xD0 */
+ 0, 0xCFD9, 0, 0, 0xDCCD, 0xEDFB, 0, 0xDEF0, /* 0xD0 */
+ 0, 0xD7EB, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xDEA5, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xDFD7, 0xDBD0, 0xDBD1, 0, 0, /* 0xF0 */
+ 0xD5A3, 0, 0, 0, 0, 0xF0B2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCDC, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xCAE8, 0, 0xF8E6, 0xDCCE, 0, 0, 0, 0, /* 0x10 */
+ 0xEADC, 0xDBD2, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE9B3, 0, 0, /* 0x20 */
+ 0, 0, 0xF7DB, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xE3A8, 0, /* 0x30 */
+ 0xD7AE, 0, 0, 0xE0E1, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xCBBA, 0, 0, 0xE5D1, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD0DC, /* 0x50 */
+ 0, 0, 0, 0, 0xD5C1, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xD8CA, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE3A9, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE0A4, /* 0x70 */
+ 0, 0xE9A9, 0, 0xD3C7, 0, 0, 0xDCDD, 0xF8AE, /* 0x80 */
+ 0, 0, 0, 0xCCB8, 0, 0, 0, 0xD0AE, /* 0x80 */
+ 0, 0, 0, 0xD8F2, 0, 0, 0xE3CA, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xCCAF, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xD4AD, 0xF6D1, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xD0CC, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xCAC6, 0, 0, 0xD5C2, 0, 0, /* 0xB0 */
+ 0xCEBA, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xCAC7, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xFAB0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xDFD8, 0, 0, 0, /* 0xF0 */
+ 0xF5BA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5EB, 0, 0xEFF4, 0xDDB5, 0, 0, 0, 0, /* 0x00 */
+ 0xCDAA, 0, 0xE3F2, 0, 0xFBF7, 0, 0xF7D0, 0, /* 0x00 */
+ 0, 0, 0, 0xFDBA, 0, 0, 0xFDE1, 0xF6FE, /* 0x10 */
+ 0xD1C0, 0, 0, 0xE8C5, 0, 0xE4B8, 0, 0xE1E8, /* 0x10 */
+ 0, 0, 0, 0xCCC1, 0, 0xD2ED, 0, 0, /* 0x20 */
+ 0, 0, 0xDBBE, 0, 0, 0xE0E2, 0, 0, /* 0x20 */
+ 0, 0xFAC9, 0, 0, 0xE1CD, 0, 0xCAB8, 0, /* 0x30 */
+ 0, 0, 0xF2E0, 0xF1C9, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xDEF1, 0, 0, 0, 0xF0DF, 0xF8C4, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xEECC, 0, 0, 0xDEF2, 0, /* 0x50 */
+ 0xE7C9, 0, 0xE2F3, 0xE7E1, 0, 0, 0xE3CB, 0, /* 0x60 */
+ 0, 0xE3CC, 0, 0, 0, 0xCFF8, 0xEFAC, 0, /* 0x60 */
+ 0xFDFE, 0xFCA5, 0xFAB1, 0xDFD9, 0, 0xE0D2, 0, 0, /* 0x70 */
+ 0, 0xF4DA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF1CA, 0, 0xCEA3, /* 0x80 */
+ 0, 0, 0, 0, 0xF2BC, 0xECE3, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xE0A5, 0, 0xF7AB, 0, 0, /* 0x90 */
+ 0xEBAF, 0, 0, 0, 0, 0, 0xE5DE, 0, /* 0x90 */
+ 0xE1A4, 0xCDAB, 0, 0xD9F4, 0xE8A6, 0xCDCE, 0xE1E9, 0, /* 0xA0 */
+ 0xFCEF, 0, 0xE0E3, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE2C1, 0, 0xCEA4, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xDEA6, 0, 0, 0xEBFE, 0, 0xEBDD, 0xF0E0, /* 0xB0 */
+ 0, 0, 0xF4DB, 0, 0xE2F4, 0, 0, 0xD3C8, /* 0xC0 */
+ 0, 0, 0, 0xF4EB, 0, 0xEEB5, 0, 0xF5D8, /* 0xC0 */
+ 0, 0, 0xD5DF, 0, 0, 0, 0xD6E5, 0, /* 0xD0 */
+ 0, 0, 0, 0xEBB0, 0xF4E3, 0, 0, 0, /* 0xD0 */
+ 0, 0xE3CD, 0, 0, 0, 0, 0xF4F4, 0xFAB2, /* 0xE0 */
+ 0, 0, 0xEFF5, 0xCADF, 0, 0xEBB1, 0xEDBF, 0, /* 0xE0 */
+ 0, 0xFDC9, 0, 0, 0, 0, 0xE4A6, 0xF9A4, /* 0xF0 */
+ 0xF0B3, 0, 0xE5EC, 0, 0, 0, 0xD1E7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD9C7, 0xE4D7, 0xEADD, 0, 0xD4F7, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xDABA, 0, /* 0x00 */
+ 0xDACD, 0, 0, 0, 0xF9CC, 0, 0xE1DA, 0xDBBF, /* 0x10 */
+ 0, 0xCCC5, 0xECD0, 0xCBBB, 0, 0xDEF3, 0, 0, /* 0x10 */
+ 0xE9AA, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xD9C8, 0, 0, 0xEEE3, 0xD7BD, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xCFC4, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xD0CD, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xFCA6, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF1FB, 0, 0, 0, 0, 0xFDD2, 0xD1C1, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE3DB, 0, 0xD3C9, 0, 0xDCCF, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xCCED, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xDEA7, 0, 0, 0xE6BB, /* 0x60 */
+ 0xECA1, 0, 0, 0, 0xCCB9, 0, 0, 0xFBDE, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE7E2, 0, 0, /* 0x70 */
+ 0xD4C1, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xDCA8, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE2C2, 0, 0xF3D8, 0xE5D3, 0, 0, 0xF3D9, 0, /* 0x90 */
+ 0, 0, 0xF3C6 /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDDB, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCDAC, /* 0x30 */
+ 0, 0xFCC3, 0, 0, 0, 0, 0xD4E7, 0, /* 0x40 */
+ 0xD1C2, 0, 0xF9A5, 0, 0xE8D5, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE3CE, 0, 0, /* 0x50 */
+ 0, 0, 0xD4CA, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xDFDA, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xFBDF, 0xE7E3, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF8FB, 0xE3CF, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xF5B0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD8E7, 0, 0xD9C9, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF8AF, 0xEFF6, 0, /* 0x90 */
+ 0xDDB6, 0xEEAF, 0xCDF8, 0, 0, 0, 0, 0xDEB8, /* 0xA0 */
+ 0xFCA7, 0xF7FC, 0xF7B1, 0xCEBB, 0xF4A1, 0, 0, 0xEECD, /* 0xA0 */
+ 0xE1AE, 0, 0, 0xECC3, 0xCFFE, 0, 0xF8BF, 0xD8E2, /* 0xB0 */
+ 0xD3E8, 0, 0, 0xDEA8, 0xF4E4, 0xECC2, 0, 0xD9F5, /* 0xB0 */
+ 0xF9C5, 0xDDD3, 0xD6F1, 0xECFC, 0xFCF0, 0, 0, 0xEDC0, /* 0xC0 */
+ 0xCAB9, 0, 0xEEE4, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF2E1, 0, 0xDEB9, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xD6F2, 0, 0xDEF4, 0, 0xDFDB, 0, /* 0xD0 */
+ 0xDBD3, 0, 0xFAE7, 0xD8E3, 0xF4C1, 0, 0xDDB7, 0, /* 0xE0 */
+ 0, 0, 0xF2F5, 0, 0, 0xD4AE, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xD6F3, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xDDB8, 0xCFC5, 0xDFDF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF2BE, 0xF6A1, 0, 0xEBCB, /* 0x00 */
+ 0xF1FC, 0, 0xF3C7, 0, 0, 0xE0EB, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xEDFC, 0, 0, 0xE1DB, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xEEE5, 0, 0xDEF5, 0, /* 0x60 */
+ 0, 0, 0, 0xFAD3, 0, 0, 0, 0, /* 0x60 */
+ 0xF1CB, 0, 0, 0xD0AF, 0xDDB9, 0, 0, 0xD1C3, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF5B1, 0, 0, /* 0x80 */
+ 0, 0, 0xEAC6, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xF0E1, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF6AC, 0, 0, 0, 0, /* 0xA0 */
+ 0xF5D9, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF0EB, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xDDBA, 0, 0, 0, 0xF2BF, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xF7C5, 0, /* 0xC0 */
+ 0, 0, 0, 0xDBA2, 0xF2F6, 0, 0, 0xCABA, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xF7F5, 0, 0xCBE5, 0, 0, /* 0xD0 */
+ 0, 0xEEE6, 0, 0xE0D3, 0, 0, 0, 0, /* 0xE0 */
+ 0xCEA5, 0, 0, 0, 0, 0, 0, 0xD6D8, /* 0xE0 */
+ 0, 0, 0, 0xD4AF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE9C9, 0, 0, 0, 0, 0xD3CE, /* 0x00 */
+ 0xF4C2, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xCBE6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF1A1, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xEBB2, 0, 0, 0, 0, 0xF1A2, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xEBB3, 0, 0xF0B4, 0, 0, 0xCBF4, /* 0x40 */
+ 0xD4B0, 0xF3B2, 0xFBB7, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF5EC, 0, 0, 0, 0, 0, 0xEEE7, /* 0x50 */
+ 0xF4B2, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xF5ED, 0, 0xCFF3, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF0E2, 0, 0, 0, 0, 0, 0xEECE, /* 0x80 */
+ 0, 0, 0xF1CC, 0, 0, 0xE5B8, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xD7F5, 0xE3F3, 0xCFE5, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xCFC6, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xF3B3, 0xE4D8, 0xCFF9, 0xCFDA, 0, 0, /* 0xC0 */
+ 0, 0, 0xFACD, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6E3, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF2E2, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xF5EE, 0, 0, 0xCABB, 0, 0, 0xE3DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCEF2, 0, 0xD6D9, 0, 0, /* 0x00 */
+ 0, 0xEEB0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF4E5, 0xD8C2, 0xDCD0, 0xCCEE, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xD5E0, 0xF6CA, 0xFDCA, 0xD8D6, 0xF4CF, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xD6A6, 0xDCBE, /* 0x20 */
+ 0, 0xDBD4, 0xD7C7, 0, 0, 0, 0, 0xF2FE, /* 0x20 */
+ 0, 0, 0, 0xF1CD, 0, 0, 0, 0, /* 0x30 */
+ 0xE2C3, 0xDCDE, 0, 0xDCDF, 0, 0, 0xEFAD, 0xE6AB, /* 0x30 */
+ 0, 0, 0, 0, 0xF9DD, 0xEABF, 0, 0, /* 0x40 */
+ 0, 0xEFAE, 0, 0, 0, 0xF4D0, 0xCEF3, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xE6AC, 0, 0xCEDE, /* 0x50 */
+ 0, 0, 0xD5F9, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE3F4, 0xCDD0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xD5B8, 0, 0, 0xF7FD, 0, /* 0xA0 */
+ 0xDCA9, 0, 0, 0, 0, 0xDEF6, 0, 0xDCAA, /* 0xA0 */
+ 0xF2E3, 0xE9B4, 0xD2DC, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE9E6, 0, 0, 0xE3F6, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE7CA, 0, /* 0xC0 */
+ 0, 0xD0CE, 0, 0, 0xDAF7, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xCABC, 0, /* 0xE0 */
+ 0, 0, 0xEEE8, 0xDADE, 0, 0xF2F7, 0, 0, /* 0xE0 */
+ 0xE2FB, 0, 0xCCA6, 0, 0, 0, 0, 0xDABB, /* 0xF0 */
+ 0, 0xEEE9, 0, 0, 0, 0xF5DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF7DC, 0xE1EA, 0xCEC1, 0xD4B1, 0, 0xFDB1, 0xE6BD, 0, /* 0x00 */
+ 0xFBAD, 0, 0, 0xF8E7, 0, 0xE1CE, 0, 0xF7E2, /* 0x00 */
+ 0xF5EF, 0xCFC7, 0, 0, 0xD4B2, 0xCCEF, 0, 0xD4E8, /* 0x10 */
+ 0, 0xEECF, 0xF7D7, 0, 0, 0xE0A6, 0xD6C1, 0xE1DC, /* 0x10 */
+ 0xF0E3, 0xF1E4, 0xDCF1, 0xD6A7, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xF4F5, 0, /* 0x20 */
+ 0, 0xF1CE, 0xF2E4, 0, 0, 0xD0B0, 0, 0, /* 0x30 */
+ 0xECEF, 0, 0, 0, 0xF9BA, 0, 0xEBB5, 0, /* 0x30 */
+ 0, 0xD4ED, 0xE2C4, 0, 0, 0, 0, 0xE9E7, /* 0x40 */
+ 0, 0, 0xEBB4, 0xEAA1, 0, 0xF8BC, 0xCEA6, 0, /* 0x40 */
+ 0xF9C6, 0xFCDA, 0, 0xD4B3, 0xD3B9, 0xEADE, 0, 0, /* 0x50 */
+ 0, 0xE9AB, 0, 0, 0xE1E1, 0xD3CF, 0xF4F6, 0, /* 0x50 */
+ 0xEAC0, 0xE1CF, 0, 0xCCBA, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xEEEA, 0, 0, 0, 0xF0E4, 0xF3B4, 0xD4EE, /* 0x60 */
+ 0, 0, 0xF2C0, 0, 0, 0xF1E5, 0, 0xF4C3, /* 0x70 */
+ 0xE0D4, 0, 0xEBB6, 0, 0xD7A1, 0xCBE8, 0, 0xF9AD, /* 0x70 */
+ 0xE9AD, 0xD8E4, 0xFAB3, 0xE2C5, 0xFCBD, 0, 0, 0xECC4, /* 0x80 */
+ 0xD8B1, 0, 0xDCAB, 0, 0, 0, 0, 0xD5A4, /* 0x80 */
+ 0, 0xEBE9, 0, 0, 0, 0xE8BB, 0, 0, /* 0x90 */
+ 0, 0xD8D7, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xFBAE, 0xD1E1, 0, 0, 0xDBC0, 0, /* 0xA0 */
+ 0xF5BE, 0, 0xDEF7, 0, 0, 0, 0, 0xCAFB, /* 0xA0 */
+ 0xF7C6, 0xCFC8, 0, 0, 0, 0xE1D0, 0, 0, /* 0xB0 */
+ 0xEED0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE9F4, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xCEF4, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xD5CD, 0, /* 0xD0 */
+ 0, 0xCFDB, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xDDBB, 0, 0, 0, 0, 0xCEAC, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE9E8, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xD4B4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4C7, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF5DB, 0, 0, 0xFAC1, 0, 0, /* 0x10 */
+ 0, 0xDEA9, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD4F8, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xEFF7, 0, 0, /* 0x20 */
+ 0, 0, 0xD3B3, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xEBB7, 0xEFF8, 0xF5DC, 0xEDCC, 0xDBD5, 0xF1CF, 0, /* 0x40 */
+ 0, 0, 0xF1D0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xF5B2, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xD9AE, 0xD5AC, 0, 0xE2C6, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xFDA3, 0, 0xFBE5, /* 0x70 */
+ 0xDFAB, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2F5, /* 0x80 */
+ 0, 0xF6AD, 0, 0xF5B3, 0, 0xF0B5, 0, 0, /* 0x80 */
+ 0, 0, 0xE1A5, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF5DD, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xECA2, 0xEDFD, 0, 0xF5B4, 0xFBB8, /* 0xA0 */
+ 0, 0xDBA3, 0, 0, 0xD6CA, 0xCBD9, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xE5D4, 0, 0, 0, 0, 0, 0, 0xF3FA, /* 0xC0 */
+ 0, 0xEBB8, 0, 0xE0B7, 0xD7EC, 0xF1EC, 0xE5AF, 0xD5E1, /* 0xC0 */
+ 0xD7ED, 0xD1D1, 0, 0, 0, 0, 0, 0xE1F2, /* 0xD0 */
+ 0xEFF9, 0, 0, 0, 0xDDBC, 0xF6DC, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xF0E5, 0, 0, 0, 0xF4C4, /* 0xE0 */
+ 0, 0, 0xE9E9, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF3FB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD4EF, 0, 0, /* 0x00 */
+ 0xCCA2, 0xF7FE, 0xDFBC, 0, 0, 0, 0, 0xEBCD, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xD0B7, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xD6C2, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xE8AD, 0, 0, 0, 0, 0xEFAF, /* 0x30 */
+ 0xCBA5, 0, 0, 0, 0, 0xCBE9, 0, 0, /* 0x40 */
+ 0, 0xFAE8, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCCC6, /* 0x50 */
+ 0, 0, 0, 0xE6E7, 0, 0, 0xEAC7, 0, /* 0x50 */
+ 0, 0, 0xDBA4, 0, 0xCFC9, 0xE2FC, 0xEFFA, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xEBDE, 0, 0, 0xF5C8, 0, 0xD4DE, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xE0D5, 0, 0xEFB0, 0, 0, 0xE2C7, 0, /* 0x90 */
+ 0xD9AF, 0, 0, 0, 0xF9E7, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE7E5, 0, 0, 0xCFCA, 0xE1D1, /* 0xB0 */
+ 0, 0xE2C8, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xEFFB, 0, 0, 0xFAF9, /* 0xC0 */
+ 0, 0, 0xDCF2, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE0A7, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xF8E8, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xCBEA, 0, 0, 0, 0xCBBC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD6E2, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xF5DE, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF5DF, 0, 0xEEB6, 0, 0, 0, 0xE2F6, 0xD3CA, /* 0x10 */
+ 0xEFFC, 0xD1C4, 0xEFB1, 0, 0xD1C5, 0, 0xD0DE, 0, /* 0x20 */
+ 0xD9E1, 0, 0, 0xE0B8, 0, 0, 0xCDD1, 0xF3B9, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xE7CC, 0, 0xD6A8, 0xCEA7, 0, 0xD4B5, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE4C8, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xD3B4, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xEBB9, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xCBF5, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF6DD, 0, 0xF1A3, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xCCC7, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE9CA, 0, 0xE1F0, 0, /* 0x90 */
+ 0, 0, 0xF5E0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xFBAF, 0, 0, 0, 0xCBD1, /* 0xA0 */
+ 0, 0, 0, 0, 0xFBE0, 0xF2E5, 0, 0, /* 0xA0 */
+ 0xECF0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF0EC, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xEEEB, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE9CB, 0, /* 0xD0 */
+ 0, 0xCCF0, 0, 0, 0xD7AF, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xF3A1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFCF5, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF1A4, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE0D6, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xEFB2, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF4D1, 0, 0, /* 0x30 */
+ 0xF7A1, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF1D1, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xCAFC, 0xCAFD, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xCECE, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF3C8, 0, 0xF3BA /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDFE, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xDAA6, 0, 0, 0xE0EC, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF8CD, 0, 0xCBD2, 0, 0, 0, 0xEBCE, /* 0x80 */
+ 0, 0xF9D8, 0xF9D9, 0xCAE0, 0xDACA, 0, 0, 0, /* 0x90 */
+ 0xCBA6, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xCAC8, 0xF9EE, 0xDBEC, 0, 0, /* 0xA0 */
+ 0xD0B1, 0, 0, 0, 0, 0xD5EF, 0, 0, /* 0xA0 */
+ 0, 0xE6F3, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE7A2, 0xE4D9, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE4E1, /* 0xC0 */
+ 0, 0, 0xFCC4, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xF9EF, 0xCFF4, 0xF7E6, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xCEBC, 0, 0, 0, /* 0xD0 */
+ 0, 0xF4C5, 0xDCA3 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDDBD, 0, 0, 0, /* 0x10 */
+ 0, 0xF4C6, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF8A1, 0, 0, 0, 0xE8D6, 0, /* 0x20 */
+ 0, 0, 0xDBC1, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xF0E6, 0, 0, 0, 0xE4B9, /* 0x30 */
+ 0xF6ED, 0, 0xF9AE, 0, 0xDDBE, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xD7B0, 0xD8E8, 0xCBBD, 0, 0, /* 0x40 */
+ 0xF9DA, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xF8CE, 0xF9F0, 0xE0ED, 0xE3B3, 0xF4B3, /* 0x50 */
+ 0, 0, 0xEAC2, 0xF2E6, 0xF0B6, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xDBD6, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xEBE4, 0, 0, 0xF2E7, 0, 0xD7D5, 0xD4B6, 0xF9E8, /* 0x70 */
+ 0xD7C1, 0, 0, 0, 0, 0xE5D5, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE9EA, 0xD7CC, 0, /* 0x80 */
+ 0, 0, 0xD3E9, 0xE2C9, 0, 0xFCDB, 0xCDAD, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xCCB0, 0xEAA2, 0, 0, /* 0x90 */
+ 0xE4F6, 0xD0C0, 0, 0xF0B7, 0xEEA1, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xD7F6, 0, 0, 0, 0xE2CA, /* 0xA0 */
+ 0xE2CB, 0, 0xFACF, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xEBDF, 0, 0, 0, 0, 0, 0xD6CB, /* 0xB0 */
+ 0, 0, 0, 0xF4B4, 0, 0, 0, 0, /* 0xB0 */
+ 0xEDCD, 0xE4D2, 0, 0, 0xEAA9, 0xE4BA, 0xF3A2, 0xCDD2, /* 0xC0 */
+ 0, 0xF6CB, 0, 0xF1E6, 0xEDC1, 0xE8BC, 0xEED1, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xF0E7, 0xE2CC, 0, /* 0xD0 */
+ 0, 0xE4AA, 0, 0xF5E1, 0xEDDA, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xD7EE, 0xD1F1, 0, 0, 0, 0, /* 0xE0 */
+ 0xE9EB, 0xE9EC, 0xE0E4, 0, 0, 0, 0, 0xDAA7, /* 0xE0 */
+ 0xDDD4, 0, 0xEAA3, 0, 0, 0, 0xD6C3, 0xD6F4, /* 0xF0 */
+ 0, 0xDADF, 0, 0xEFB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2CD, 0, 0, 0, 0, 0, 0xEFFD, 0xF2E8, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xEFC5, 0, 0xE7E7, 0, 0, 0xD7FD, 0, /* 0x10 */
+ 0, 0xE7CE, 0, 0, 0xDFDC, 0, 0xF9C7, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD9F6, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xDFAC, 0, 0xD6DA, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xDCA4, 0, 0, 0, 0xF0B8, 0, 0, /* 0x30 */
+ 0, 0, 0xD5FA, 0, 0xE4F7, 0, 0, 0, /* 0x40 */
+ 0xD6C4, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF4EC, 0, 0, 0, 0, 0xEFFE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xF0A1, 0, 0xDEAA, 0, /* 0x50 */
+ 0, 0xDABC, 0xD8FC, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xFAD4, 0, 0, 0, 0xECE5, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xFCA8, 0, 0, 0xECE6, /* 0x70 */
+ 0, 0, 0xD8CB, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xFBB9, 0, 0xE4D3, 0, 0xCDF9, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xCFD3, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xCAEA, 0, 0, 0xCFD4, 0, 0xF8BD, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xF4C7, 0, /* 0xC0 */
+ 0, 0, 0, 0xEADF, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xF9DB, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xD4B7, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xEBE5, 0, 0, 0xE1D2, 0, /* 0xF0 */
+ 0, 0, 0, 0xEAA4, 0, 0, 0, 0xFAC2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFBE1, 0xFAED, 0xF0A2, 0xCCF1, 0, 0xFAA3, 0xE2F7, 0, /* 0x00 */
+ 0xE2CE, 0, 0xE9F5, 0, 0xE1EB, 0, 0, 0, /* 0x00 */
+ 0xE7E8, 0xE8D7, 0xDAF8, 0xD4CB, 0, 0, 0, 0xF7F6, /* 0x10 */
+ 0xD6C5, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xD4E9, 0, 0, /* 0x20 */
+ 0xFAFA, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xCCF2, 0xF7DD, 0, 0xDEBA, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xCEA8, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF0B9, 0xE4FE, 0xE4C9, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE4D4, 0, 0, 0, /* 0x50 */
+ 0xEAC3, 0, 0xEFB4, 0, 0, 0, 0xD7BE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xFBE2, 0, 0xCDD3, /* 0x60 */
+ 0, 0, 0, 0xEFB5, 0, 0, 0, 0xFAE9, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF9A6, 0, 0, 0, 0, 0, 0, 0xDFBD, /* 0xA0 */
+ 0, 0xF7C7, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF8FD, 0, 0, 0xF8FC, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xDEAB, 0xDBE8, 0, 0, 0xE3DD, /* 0xD0 */
+ 0, 0xE1E2, 0xD1C6, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF6D0, 0xEBE6, 0xDAF9, /* 0xE0 */
+ 0, 0, 0, 0, 0xECC7, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xDEF8, 0xF8E9, 0xE3DE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCEF5, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xFAC3, 0xE5D7, 0, 0xECC8, 0, 0, 0, /* 0x00 */
+ 0xF3C9, 0, 0, 0xE4BB, 0, 0, 0, 0, /* 0x10 */
+ 0xE6AE, 0, 0, 0, 0, 0, 0xEFB6, 0, /* 0x10 */
+ 0xDCBF, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xCEBD, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xD8C3, 0, 0, /* 0x40 */
+ 0, 0xD0CF, 0, 0xCFFA, 0xF3CA, 0xE0D7, 0, 0, /* 0x40 */
+ 0, 0xD1C7, 0xE9AE, 0, 0xE8BD, 0, 0, 0xFAC4, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xE2CF, 0, /* 0x90 */
+ 0, 0xFAC5, 0, 0, 0, 0xF9B8, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xDCE0, 0, 0, /* 0xA0 */
+ 0xFBB0, 0, 0, 0, 0xD8A9, 0xE5DF, 0xF9A7, 0, /* 0xA0 */
+ 0, 0xF6EE, 0, 0xF6CC, 0xE2F8, 0, 0, 0, /* 0xB0 */
+ 0, 0xECF1, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xDAE0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xF1D2, 0xD2CC, 0xCFCB, 0, 0, 0xCABD, 0, 0, /* 0xD0 */
+ 0, 0xDDBF, 0, 0, 0, 0xF6EF, 0, 0xDEF9, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xFAB4, 0, 0, /* 0xE0 */
+ 0, 0xD5AD, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF1E7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDEBE, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xDCC0, 0, 0, 0, 0, 0, 0xD1C8, 0xD1C9, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF8BE, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xCBF6, 0, 0, 0, 0, /* 0x20 */
+ 0xD4F9, 0, 0, 0, 0, 0, 0xF5E2, 0xE1D3, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xD8E9, 0, 0, 0xF8FE, 0, 0xCFCC, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xFDA4, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xCEF6, 0, 0xFAD0, /* 0x50 */
+ 0, 0, 0xCCF3, 0xE6BE, 0, 0, 0, 0xF6AE, /* 0x50 */
+ 0, 0, 0xD5F0, 0, 0, 0xD1CA, 0, 0, /* 0x60 */
+ 0, 0xFCBE, 0xD5F1, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xCDE9, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xFAB5, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE2D0, 0xF4F7, 0, 0, 0, /* 0xD0 */
+ 0xCDD4, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xE7A3, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xDBA5 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2D1, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD7A2, /* 0x20 */
+ 0, 0, 0xF7E3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xEAA6, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xD0A1, 0, 0, 0, /* 0x30 */
+ 0, 0xCEDA, 0xFBEB, 0xDBA6, 0xDBDE, 0xD8E5, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEAE0, /* 0x40 */
+ 0, 0, 0, 0, 0xD8AA, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE5E0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD6DB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xEFC6, 0, /* 0x80 */
+ 0, 0xF8EA, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE4D5, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xCEF7, 0, 0, 0xE0D8, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xD7EF, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xF4ED, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xCDE6, 0, 0, 0, /* 0xE0 */
+ 0xCCF4 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5E3, 0, 0, /* 0x00 */
+ 0xE4CA, 0, 0xDCE1, 0, 0, 0xF9C8, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xFCBF, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE8A7, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xD8C4, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCBBE, /* 0x40 */
+ 0, 0xDCAE, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD7F7, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xF0E8, 0, 0xDDC0, /* 0xE0 */
+ 0, 0xCFCD, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xDCF3, 0xD9B0, 0, 0xE6E9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4BC, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xEAC4, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE4EC, 0, /* 0x20 */
+ 0xE4E5, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xFBF8, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xCCBB, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xE4BD, 0, 0, /* 0x50 */
+ 0xCDDC, 0xD9F7, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xDDDF, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xEDCE, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xD9D0, 0, 0, 0, 0, 0, 0xE5A3, /* 0xA0 */
+ 0, 0, 0, 0, 0xF9CD, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xCDAE, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCFCE, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xF6AF, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xFDD3, 0xEBED, 0xD6DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5A4, 0, 0, 0, 0xD5B6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xD6DD, 0, 0, /* 0x70 */
+ 0, 0xF9E9, 0, 0, 0, 0xE7A4, 0, 0xD6E3, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD1CB, 0xD6E4, 0, 0, 0, 0xD5F2, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xDEFA, 0, 0xD7F8, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xD8EA, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xCFD5, 0xD8FD, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xD8AB, 0, 0, 0xFDCB, 0, /* 0xB0 */
+ 0, 0, 0, 0xFCDC, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xE0A8, 0xD5F3, 0, /* 0xC0 */
+ 0, 0xFDD9, 0, 0, 0xCCA3, 0, 0, 0, /* 0xD0 */
+ 0xD9F9, 0, 0, 0xD3EA, 0xF5F5, 0, 0xEFC7, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xD3DA, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xDABD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE8A8, /* 0x00 */
+ 0xDCAF, 0, 0, 0, 0, 0, 0xF0A3, 0, /* 0x00 */
+ 0, 0, 0, 0xCDD5, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE0A9, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xDEAC, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF0BA, 0xEEB1, 0, 0, 0xEEB2, 0, /* 0x40 */
+ 0, 0, 0xF6CD, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEED2, /* 0x50 */
+ 0, 0xD6C6, 0, 0, 0, 0, 0, 0xE0E5, /* 0x60 */
+ 0, 0, 0xF3BB, 0, 0xE5E1, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE4CB, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xD7A3, 0, 0, /* 0x80 */
+ 0xDBC2, 0, 0, 0, 0, 0xCAFE, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xCFCF /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_AC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB0A1, 0xB0A2, 0x8141, 0x8142, 0xB0A3, 0x8143, 0x8144, 0xB0A4, /* 0x00 */
+ 0xB0A5, 0xB0A6, 0xB0A7, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, /* 0x00 */
+ 0xB0A8, 0xB0A9, 0xB0AA, 0xB0AB, 0xB0AC, 0xB0AD, 0xB0AE, 0xB0AF, /* 0x10 */
+ 0x814A, 0xB0B0, 0xB0B1, 0xB0B2, 0xB0B3, 0xB0B4, 0x814B, 0x814C, /* 0x10 */
+ 0xB0B5, 0x814D, 0x814E, 0x814F, 0xB0B6, 0x8150, 0x8151, 0x8152, /* 0x20 */
+ 0x8153, 0x8154, 0x8155, 0x8156, 0xB0B7, 0xB0B8, 0x8157, 0xB0B9, /* 0x20 */
+ 0xB0BA, 0xB0BB, 0x8158, 0x8159, 0x815A, 0x8161, 0x8162, 0x8163, /* 0x30 */
+ 0xB0BC, 0xB0BD, 0x8164, 0x8165, 0xB0BE, 0x8166, 0x8167, 0x8168, /* 0x30 */
+ 0xB0BF, 0x8169, 0x816A, 0x816B, 0x816C, 0x816D, 0x816E, 0x816F, /* 0x40 */
+ 0x8170, 0x8171, 0x8172, 0xB0C0, 0x8173, 0xB0C1, 0x8174, 0x8175, /* 0x40 */
+ 0x8176, 0x8177, 0x8178, 0x8179, 0xB0C2, 0x817A, 0x8181, 0x8182, /* 0x50 */
+ 0xB0C3, 0x8183, 0x8184, 0x8185, 0xB0C4, 0x8186, 0x8187, 0x8188, /* 0x50 */
+ 0x8189, 0x818A, 0x818B, 0x818C, 0x818D, 0x818E, 0x818F, 0x8190, /* 0x60 */
+ 0x8191, 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8198, /* 0x60 */
+ 0xB0C5, 0xB0C6, 0x8199, 0x819A, 0xB0C7, 0x819B, 0x819C, 0xB0C8, /* 0x70 */
+ 0xB0C9, 0x819D, 0xB0CA, 0x819E, 0x819F, 0x81A0, 0x81A1, 0x81A2, /* 0x70 */
+ 0xB0CB, 0xB0CC, 0x81A3, 0xB0CD, 0xB0CE, 0xB0CF, 0xB0D0, 0x81A4, /* 0x80 */
+ 0x81A5, 0xB0D1, 0xB0D2, 0xB0D3, 0xB0D4, 0x81A6, 0x81A7, 0x81A8, /* 0x80 */
+ 0xB0D5, 0x81A9, 0x81AA, 0x81AB, 0xB0D6, 0x81AC, 0x81AD, 0x81AE, /* 0x90 */
+ 0x81AF, 0x81B0, 0x81B1, 0x81B2, 0xB0D7, 0xB0D8, 0x81B3, 0xB0D9, /* 0x90 */
+ 0xB0DA, 0xB0DB, 0x81B4, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, /* 0xA0 */
+ 0xB0DC, 0xB0DD, 0xB0DE, 0x81BA, 0xB0DF, 0x81BB, 0x81BC, 0xB0E0, /* 0xA0 */
+ 0xB0E1, 0x81BD, 0x81BE, 0x81BF, 0x81C0, 0x81C1, 0x81C2, 0x81C3, /* 0xB0 */
+ 0xB0E2, 0xB0E3, 0x81C4, 0xB0E4, 0xB0E5, 0xB0E6, 0x81C5, 0x81C6, /* 0xB0 */
+ 0x81C7, 0xB0E7, 0x81C8, 0x81C9, 0xB0E8, 0x81CA, 0x81CB, 0x81CC, /* 0xC0 */
+ 0xB0E9, 0x81CD, 0x81CE, 0x81CF, 0xB0EA, 0x81D0, 0x81D1, 0x81D2, /* 0xC0 */
+ 0x81D3, 0x81D4, 0x81D5, 0x81D6, 0x81D7, 0xB0EB, 0x81D8, 0xB0EC, /* 0xD0 */
+ 0x81D9, 0x81DA, 0x81DB, 0x81DC, 0x81DD, 0x81DE, 0x81DF, 0x81E0, /* 0xD0 */
+ 0xB0ED, 0xB0EE, 0x81E1, 0x81E2, 0xB0EF, 0x81E3, 0x81E4, 0xB0F0, /* 0xE0 */
+ 0xB0F1, 0x81E5, 0xB0F2, 0x81E6, 0xB0F3, 0x81E7, 0x81E8, 0xB0F4, /* 0xE0 */
+ 0xB0F5, 0xB0F6, 0x81E9, 0xB0F7, 0x81EA, 0xB0F8, 0xB0F9, 0x81EB, /* 0xF0 */
+ 0x81EC, 0x81ED, 0x81EE, 0x81EF, 0xB0FA, 0xB0FB, 0x81F0, 0x81F1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_AD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB0FC, 0x81F2, 0x81F3, 0x81F4, 0xB0FD, 0x81F5, 0xB0FE, 0x81F6, /* 0x00 */
+ 0x81F7, 0x81F8, 0x81F9, 0x81FA, 0xB1A1, 0xB1A2, 0x81FB, 0xB1A3, /* 0x00 */
+ 0x81FC, 0xB1A4, 0x81FD, 0x81FE, 0x8241, 0x8242, 0x8243, 0x8244, /* 0x10 */
+ 0xB1A5, 0x8245, 0x8246, 0x8247, 0xB1A6, 0x8248, 0x8249, 0x824A, /* 0x10 */
+ 0xB1A7, 0x824B, 0x824C, 0x824D, 0x824E, 0x824F, 0x8250, 0x8251, /* 0x20 */
+ 0x8252, 0xB1A8, 0x8253, 0x8254, 0xB1A9, 0xB1AA, 0x8255, 0x8256, /* 0x20 */
+ 0x8257, 0x8258, 0x8259, 0x825A, 0xB1AB, 0xB1AC, 0x8261, 0x8262, /* 0x30 */
+ 0xB1AD, 0x8263, 0x8264, 0x8265, 0xB1AE, 0x8266, 0x8267, 0x8268, /* 0x30 */
+ 0x8269, 0x826A, 0x826B, 0x826C, 0xB1AF, 0xB1B0, 0x826D, 0xB1B1, /* 0x40 */
+ 0x826E, 0xB1B2, 0x826F, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, /* 0x40 */
+ 0xB1B3, 0x8275, 0x8276, 0x8277, 0xB1B4, 0x8278, 0x8279, 0x827A, /* 0x50 */
+ 0xB1B5, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, /* 0x50 */
+ 0x8288, 0xB1B6, 0x8289, 0xB1B7, 0x828A, 0x828B, 0x828C, 0x828D, /* 0x60 */
+ 0x828E, 0x828F, 0x8290, 0x8291, 0xB1B8, 0xB1B9, 0x8292, 0x8293, /* 0x60 */
+ 0xB1BA, 0x8294, 0x8295, 0xB1BB, 0xB1BC, 0xB1BD, 0xB1BE, 0x8296, /* 0x70 */
+ 0x8297, 0x8298, 0x8299, 0xB1BF, 0xB1C0, 0xB1C1, 0x829A, 0xB1C2, /* 0x70 */
+ 0x829B, 0xB1C3, 0xB1C4, 0x829C, 0x829D, 0x829E, 0x829F, 0x82A0, /* 0x80 */
+ 0xB1C5, 0xB1C6, 0x82A1, 0x82A2, 0xB1C7, 0x82A3, 0x82A4, 0x82A5, /* 0x80 */
+ 0xB1C8, 0x82A6, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AB, 0x82AC, /* 0x90 */
+ 0x82AD, 0x82AE, 0x82AF, 0x82B0, 0xB1C9, 0xB1CA, 0x82B1, 0x82B2, /* 0x90 */
+ 0x82B3, 0x82B4, 0x82B5, 0x82B6, 0xB1CB, 0x82B7, 0x82B8, 0x82B9, /* 0xA0 */
+ 0x82BA, 0x82BB, 0x82BC, 0x82BD, 0x82BE, 0x82BF, 0x82C0, 0x82C1, /* 0xA0 */
+ 0x82C2, 0x82C3, 0x82C4, 0x82C5, 0x82C6, 0x82C7, 0x82C8, 0xB1CC, /* 0xB0 */
+ 0x82C9, 0x82CA, 0x82CB, 0x82CC, 0x82CD, 0x82CE, 0x82CF, 0x82D0, /* 0xB0 */
+ 0xB1CD, 0xB1CE, 0x82D1, 0x82D2, 0xB1CF, 0x82D3, 0x82D4, 0x82D5, /* 0xC0 */
+ 0xB1D0, 0x82D6, 0x82D7, 0x82D8, 0x82D9, 0x82DA, 0x82DB, 0x82DC, /* 0xC0 */
+ 0xB1D1, 0xB1D2, 0x82DD, 0xB1D3, 0x82DE, 0x82DF, 0x82E0, 0x82E1, /* 0xD0 */
+ 0x82E2, 0x82E3, 0x82E4, 0x82E5, 0xB1D4, 0x82E6, 0x82E7, 0x82E8, /* 0xD0 */
+ 0xB1D5, 0x82E9, 0x82EA, 0x82EB, 0xB1D6, 0x82EC, 0x82ED, 0x82EE, /* 0xE0 */
+ 0x82EF, 0x82F0, 0x82F1, 0x82F2, 0x82F3, 0x82F4, 0x82F5, 0x82F6, /* 0xE0 */
+ 0x82F7, 0x82F8, 0x82F9, 0x82FA, 0x82FB, 0x82FC, 0x82FD, 0x82FE, /* 0xF0 */
+ 0xB1D7, 0xB1D8, 0x8341, 0x8342, 0xB1D9, 0x8343, 0x8344, 0xB1DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_AE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB1DB, 0xB1DC, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834A, /* 0x00 */
+ 0xB1DD, 0xB1DE, 0x834B, 0xB1DF, 0x834C, 0xB1E0, 0x834D, 0x834E, /* 0x00 */
+ 0x834F, 0x8350, 0x8351, 0x8352, 0xB1E1, 0x8353, 0x8354, 0x8355, /* 0x10 */
+ 0x8356, 0x8357, 0x8358, 0x8359, 0x835A, 0x8361, 0x8362, 0x8363, /* 0x10 */
+ 0x8364, 0x8365, 0x8366, 0x8367, 0x8368, 0x8369, 0x836A, 0x836B, /* 0x20 */
+ 0x836C, 0x836D, 0x836E, 0x836F, 0x8370, 0x8371, 0x8372, 0x8373, /* 0x20 */
+ 0xB1E2, 0xB1E3, 0x8374, 0x8375, 0xB1E4, 0x8376, 0x8377, 0xB1E5, /* 0x30 */
+ 0xB1E6, 0x8378, 0xB1E7, 0x8379, 0x837A, 0x8381, 0x8382, 0x8383, /* 0x30 */
+ 0xB1E8, 0xB1E9, 0x8384, 0xB1EA, 0x8385, 0xB1EB, 0xB1EC, 0x8386, /* 0x40 */
+ 0x8387, 0x8388, 0xB1ED, 0x8389, 0xB1EE, 0xB1EF, 0xB1F0, 0x838A, /* 0x40 */
+ 0xB1F1, 0x838B, 0x838C, 0x838D, 0xB1F2, 0x838E, 0xB1F3, 0x838F, /* 0x50 */
+ 0x8390, 0x8391, 0x8392, 0x8393, 0xB1F4, 0xB1F5, 0x8394, 0xB1F6, /* 0x50 */
+ 0xB1F7, 0xB1F8, 0x8395, 0x8396, 0x8397, 0xB1F9, 0x8398, 0x8399, /* 0x60 */
+ 0xB1FA, 0xB1FB, 0x839A, 0x839B, 0xB1FC, 0x839C, 0x839D, 0x839E, /* 0x60 */
+ 0xB1FD, 0x839F, 0x83A0, 0x83A1, 0x83A2, 0x83A3, 0x83A4, 0x83A5, /* 0x70 */
+ 0xB1FE, 0xB2A1, 0x83A6, 0xB2A2, 0xB2A3, 0xB2A4, 0x83A7, 0x83A8, /* 0x70 */
+ 0x83A9, 0x83AA, 0x83AB, 0x83AC, 0xB2A5, 0xB2A6, 0x83AD, 0x83AE, /* 0x80 */
+ 0x83AF, 0x83B0, 0x83B1, 0x83B2, 0xB2A7, 0x83B3, 0x83B4, 0x83B5, /* 0x80 */
+ 0x83B6, 0x83B7, 0x83B8, 0x83B9, 0x83BA, 0x83BB, 0x83BC, 0x83BD, /* 0x90 */
+ 0x83BE, 0x83BF, 0x83C0, 0x83C1, 0x83C2, 0x83C3, 0x83C4, 0x83C5, /* 0x90 */
+ 0x83C6, 0x83C7, 0x83C8, 0x83C9, 0x83CA, 0x83CB, 0x83CC, 0x83CD, /* 0xA0 */
+ 0x83CE, 0x83CF, 0x83D0, 0x83D1, 0x83D2, 0x83D3, 0x83D4, 0x83D5, /* 0xA0 */
+ 0x83D6, 0x83D7, 0x83D8, 0x83D9, 0x83DA, 0x83DB, 0x83DC, 0x83DD, /* 0xB0 */
+ 0x83DE, 0x83DF, 0x83E0, 0x83E1, 0xB2A8, 0xB2A9, 0xB2AA, 0x83E2, /* 0xB0 */
+ 0xB2AB, 0x83E3, 0x83E4, 0x83E5, 0xB2AC, 0x83E6, 0x83E7, 0x83E8, /* 0xC0 */
+ 0x83E9, 0x83EA, 0x83EB, 0x83EC, 0xB2AD, 0xB2AE, 0x83ED, 0xB2AF, /* 0xC0 */
+ 0xB2B0, 0xB2B1, 0x83EE, 0x83EF, 0x83F0, 0x83F1, 0x83F2, 0x83F3, /* 0xD0 */
+ 0xB2B2, 0xB2B3, 0x83F4, 0x83F5, 0xB2B4, 0x83F6, 0x83F7, 0x83F8, /* 0xD0 */
+ 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD, 0x83FE, 0x8441, 0x8442, /* 0xE0 */
+ 0xB2B5, 0x8443, 0x8444, 0xB2B6, 0x8445, 0xB2B7, 0x8446, 0x8447, /* 0xE0 */
+ 0x8448, 0x8449, 0x844A, 0x844B, 0xB2B8, 0x844C, 0x844D, 0x844E, /* 0xF0 */
+ 0xB2B9, 0x844F, 0x8450, 0x8451, 0xB2BA, 0x8452, 0x8453, 0x8454 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_AF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8455, 0x8456, 0x8457, 0x8458, 0x8459, 0x845A, 0x8461, 0xB2BB, /* 0x00 */
+ 0xB2BC, 0x8462, 0x8463, 0x8464, 0x8465, 0xB2BD, 0x8466, 0x8467, /* 0x00 */
+ 0xB2BE, 0x8468, 0x8469, 0x846A, 0x846B, 0x846C, 0x846D, 0x846E, /* 0x10 */
+ 0x846F, 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, /* 0x10 */
+ 0x8477, 0x8478, 0x8479, 0x847A, 0x8481, 0x8482, 0x8483, 0x8484, /* 0x20 */
+ 0x8485, 0x8486, 0x8487, 0x8488, 0xB2BF, 0xB2C0, 0x8489, 0x848A, /* 0x20 */
+ 0xB2C1, 0x848B, 0xB2C2, 0x848C, 0xB2C3, 0x848D, 0x848E, 0x848F, /* 0x30 */
+ 0x8490, 0x8491, 0x8492, 0x8493, 0xB2C4, 0xB2C5, 0x8494, 0xB2C6, /* 0x30 */
+ 0x8495, 0xB2C7, 0xB2C8, 0xB2C9, 0x8496, 0x8497, 0x8498, 0x8499, /* 0x40 */
+ 0xB2CA, 0xB2CB, 0x849A, 0x849B, 0x849C, 0x849D, 0x849E, 0x849F, /* 0x40 */
+ 0xB2CC, 0x84A0, 0x84A1, 0x84A2, 0x84A3, 0x84A4, 0x84A5, 0x84A6, /* 0x50 */
+ 0x84A7, 0x84A8, 0x84A9, 0x84AA, 0xB2CD, 0xB2CE, 0x84AB, 0x84AC, /* 0x50 */
+ 0x84AD, 0x84AE, 0x84AF, 0x84B0, 0xB2CF, 0xB2D0, 0x84B1, 0x84B2, /* 0x60 */
+ 0x84B3, 0x84B4, 0x84B5, 0x84B6, 0x84B7, 0x84B8, 0x84B9, 0x84BA, /* 0x60 */
+ 0x84BB, 0x84BC, 0x84BD, 0x84BE, 0x84BF, 0x84C0, 0x84C1, 0x84C2, /* 0x70 */
+ 0x84C3, 0xB2D1, 0x84C4, 0x84C5, 0x84C6, 0x84C7, 0x84C8, 0x84C9, /* 0x70 */
+ 0xB2D2, 0x84CA, 0x84CB, 0x84CC, 0xB2D3, 0x84CD, 0x84CE, 0x84CF, /* 0x80 */
+ 0xB2D4, 0x84D0, 0x84D1, 0x84D2, 0x84D3, 0x84D4, 0x84D5, 0x84D6, /* 0x80 */
+ 0xB2D5, 0xB2D6, 0x84D7, 0x84D8, 0x84D9, 0xB2D7, 0x84DA, 0x84DB, /* 0x90 */
+ 0x84DC, 0x84DD, 0x84DE, 0x84DF, 0xB2D8, 0x84E0, 0x84E1, 0x84E2, /* 0x90 */
+ 0x84E3, 0x84E4, 0x84E5, 0x84E6, 0x84E7, 0x84E8, 0x84E9, 0x84EA, /* 0xA0 */
+ 0x84EB, 0x84EC, 0x84ED, 0x84EE, 0x84EF, 0x84F0, 0x84F1, 0x84F2, /* 0xA0 */
+ 0x84F3, 0x84F4, 0x84F5, 0x84F6, 0x84F7, 0x84F8, 0x84F9, 0x84FA, /* 0xB0 */
+ 0xB2D9, 0xB2DA, 0x84FB, 0x84FC, 0xB2DB, 0x84FD, 0x84FE, 0x8541, /* 0xB0 */
+ 0xB2DC, 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, 0xB2DD, /* 0xC0 */
+ 0xB2DE, 0xB2DF, 0x8548, 0xB2E0, 0x8549, 0xB2E1, 0xB2E2, 0x854A, /* 0xC0 */
+ 0x854B, 0x854C, 0x854D, 0x854E, 0xB2E3, 0x854F, 0x8550, 0x8551, /* 0xD0 */
+ 0x8552, 0x8553, 0x8554, 0x8555, 0xB2E4, 0x8556, 0x8557, 0x8558, /* 0xD0 */
+ 0x8559, 0x855A, 0x8561, 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, /* 0xE0 */
+ 0xB2E5, 0xB2E6, 0x8567, 0x8568, 0x8569, 0x856A, 0x856B, 0x856C, /* 0xE0 */
+ 0xB2E7, 0xB2E8, 0x856D, 0x856E, 0xB2E9, 0x856F, 0x8570, 0x8571, /* 0xF0 */
+ 0xB2EA, 0x8572, 0x8573, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB2EB, 0xB2EC, 0x8579, 0x857A, 0xB2ED, 0x8581, 0x8582, 0x8583, /* 0x00 */
+ 0x8584, 0x8585, 0x8586, 0x8587, 0xB2EE, 0x8588, 0x8589, 0x858A, /* 0x00 */
+ 0xB2EF, 0x858B, 0x858C, 0x858D, 0xB2F0, 0x858E, 0x858F, 0x8590, /* 0x10 */
+ 0x8591, 0x8592, 0x8593, 0x8594, 0xB2F1, 0xB2F2, 0x8595, 0x8596, /* 0x10 */
+ 0x8597, 0x8598, 0x8599, 0x859A, 0x859B, 0x859C, 0x859D, 0x859E, /* 0x20 */
+ 0xB2F3, 0x859F, 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A4, 0x85A5, /* 0x20 */
+ 0x85A6, 0x85A7, 0x85A8, 0x85A9, 0x85AA, 0x85AB, 0x85AC, 0x85AD, /* 0x30 */
+ 0x85AE, 0x85AF, 0x85B0, 0x85B1, 0x85B2, 0x85B3, 0x85B4, 0x85B5, /* 0x30 */
+ 0x85B6, 0x85B7, 0x85B8, 0x85B9, 0xB2F4, 0xB2F5, 0x85BA, 0x85BB, /* 0x40 */
+ 0xB2F6, 0x85BC, 0xB2F7, 0x85BD, 0xB2F8, 0x85BE, 0xB2F9, 0x85BF, /* 0x40 */
+ 0x85C0, 0x85C1, 0x85C2, 0xB2FA, 0xB2FB, 0xB2FC, 0x85C3, 0xB2FD, /* 0x50 */
+ 0x85C4, 0xB2FE, 0x85C5, 0x85C6, 0x85C7, 0xB3A1, 0x85C8, 0x85C9, /* 0x50 */
+ 0x85CA, 0x85CB, 0x85CC, 0x85CD, 0x85CE, 0x85CF, 0x85D0, 0x85D1, /* 0x60 */
+ 0x85D2, 0x85D3, 0x85D4, 0x85D5, 0x85D6, 0x85D7, 0x85D8, 0x85D9, /* 0x60 */
+ 0x85DA, 0x85DB, 0x85DC, 0x85DD, 0x85DE, 0x85DF, 0x85E0, 0x85E1, /* 0x70 */
+ 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0xB3A2, 0xB3A3, 0x85E6, 0x85E7, /* 0x70 */
+ 0xB3A4, 0x85E8, 0x85E9, 0x85EA, 0xB3A5, 0x85EB, 0x85EC, 0x85ED, /* 0x80 */
+ 0x85EE, 0x85EF, 0x85F0, 0x85F1, 0xB3A6, 0xB3A7, 0x85F2, 0xB3A8, /* 0x80 */
+ 0x85F3, 0xB3A9, 0x85F4, 0x85F5, 0x85F6, 0x85F7, 0x85F8, 0x85F9, /* 0x90 */
+ 0xB3AA, 0xB3AB, 0xB3AC, 0x85FA, 0xB3AD, 0x85FB, 0x85FC, 0xB3AE, /* 0x90 */
+ 0xB3AF, 0xB3B0, 0xB3B1, 0x85FD, 0x85FE, 0x8641, 0x8642, 0x8643, /* 0xA0 */
+ 0xB3B2, 0xB3B3, 0x8644, 0xB3B4, 0xB3B5, 0xB3B6, 0xB3B7, 0xB3B8, /* 0xA0 */
+ 0x8645, 0xB3B9, 0x8646, 0xB3BA, 0xB3BB, 0xB3BC, 0x8647, 0x8648, /* 0xB0 */
+ 0xB3BD, 0x8649, 0x864A, 0x864B, 0xB3BE, 0x864C, 0x864D, 0x864E, /* 0xB0 */
+ 0x864F, 0x8650, 0x8651, 0x8652, 0xB3BF, 0xB3C0, 0x8653, 0xB3C1, /* 0xC0 */
+ 0xB3C2, 0xB3C3, 0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, /* 0xC0 */
+ 0xB3C4, 0xB3C5, 0x865A, 0x8661, 0xB3C6, 0x8662, 0x8663, 0x8664, /* 0xD0 */
+ 0xB3C7, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866A, 0x866B, /* 0xD0 */
+ 0xB3C8, 0x866C, 0x866D, 0x866E, 0x866F, 0xB3C9, 0x8670, 0x8671, /* 0xE0 */
+ 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8679, /* 0xE0 */
+ 0x867A, 0x8681, 0x8682, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, /* 0xF0 */
+ 0x8688, 0x8689, 0x868A, 0x868B, 0x868C, 0x868D, 0x868E, 0x868F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8690, 0x8691, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, 0x8697, /* 0x00 */
+ 0xB3CA, 0xB3CB, 0x8698, 0xB3CC, 0xB3CD, 0x8699, 0x869A, 0x869B, /* 0x00 */
+ 0xB3CE, 0x869C, 0xB3CF, 0xB3D0, 0x869D, 0x869E, 0x869F, 0x86A0, /* 0x10 */
+ 0xB3D1, 0xB3D2, 0x86A1, 0xB3D3, 0xB3D4, 0xB3D5, 0x86A2, 0x86A3, /* 0x10 */
+ 0x86A4, 0x86A5, 0x86A6, 0xB3D6, 0xB3D7, 0xB3D8, 0x86A7, 0x86A8, /* 0x20 */
+ 0xB3D9, 0x86A9, 0x86AA, 0x86AB, 0xB3DA, 0x86AC, 0x86AD, 0x86AE, /* 0x20 */
+ 0x86AF, 0x86B0, 0x86B1, 0x86B2, 0xB3DB, 0xB3DC, 0x86B3, 0xB3DD, /* 0x30 */
+ 0xB3DE, 0xB3DF, 0x86B4, 0x86B5, 0x86B6, 0x86B7, 0x86B8, 0x86B9, /* 0x30 */
+ 0xB3E0, 0xB3E1, 0x86BA, 0x86BB, 0xB3E2, 0x86BC, 0x86BD, 0x86BE, /* 0x40 */
+ 0xB3E3, 0x86BF, 0x86C0, 0x86C1, 0x86C2, 0x86C3, 0x86C4, 0x86C5, /* 0x40 */
+ 0xB3E4, 0xB3E5, 0x86C6, 0x86C7, 0xB3E6, 0xB3E7, 0x86C8, 0x86C9, /* 0x50 */
+ 0xB3E8, 0x86CA, 0x86CB, 0x86CC, 0xB3E9, 0x86CD, 0x86CE, 0x86CF, /* 0x50 */
+ 0xB3EA, 0x86D0, 0x86D1, 0x86D2, 0x86D3, 0x86D4, 0x86D5, 0x86D6, /* 0x60 */
+ 0x86D7, 0x86D8, 0x86D9, 0x86DA, 0x86DB, 0x86DC, 0x86DD, 0x86DE, /* 0x60 */
+ 0x86DF, 0x86E0, 0x86E1, 0x86E2, 0x86E3, 0x86E4, 0x86E5, 0x86E6, /* 0x70 */
+ 0xB3EB, 0xB3EC, 0x86E7, 0x86E8, 0xB3ED, 0x86E9, 0x86EA, 0x86EB, /* 0x70 */
+ 0xB3EE, 0x86EC, 0xB3EF, 0x86ED, 0x86EE, 0x86EF, 0x86F0, 0x86F1, /* 0x80 */
+ 0xB3F0, 0xB3F1, 0x86F2, 0xB3F2, 0x86F3, 0xB3F3, 0x86F4, 0x86F5, /* 0x80 */
+ 0x86F6, 0x86F7, 0xB3F4, 0xB3F5, 0xB3F6, 0x86F8, 0x86F9, 0x86FA, /* 0x90 */
+ 0xB3F7, 0x86FB, 0x86FC, 0x86FD, 0xB3F8, 0x86FE, 0x8741, 0x8742, /* 0x90 */
+ 0x8743, 0x8744, 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874A, /* 0xA0 */
+ 0xB3F9, 0x874B, 0x874C, 0x874D, 0x874E, 0x874F, 0x8750, 0x8751, /* 0xA0 */
+ 0x8752, 0x8753, 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, /* 0xB0 */
+ 0x875A, 0x8761, 0x8762, 0x8763, 0x8764, 0x8765, 0x8766, 0x8767, /* 0xB0 */
+ 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, 0x876D, 0x876E, 0x876F, /* 0xC0 */
+ 0x8770, 0x8771, 0x8772, 0x8773, 0xB3FA, 0x8774, 0x8775, 0x8776, /* 0xC0 */
+ 0xB3FB, 0x8777, 0x8778, 0x8779, 0xB3FC, 0x877A, 0x8781, 0x8782, /* 0xD0 */
+ 0x8783, 0x8784, 0x8785, 0x8786, 0xB3FD, 0xB3FE, 0x8787, 0xB4A1, /* 0xD0 */
+ 0x8788, 0x8789, 0x878A, 0x878B, 0x878C, 0x878D, 0x878E, 0x878F, /* 0xE0 */
+ 0xB4A2, 0xB4A3, 0x8790, 0x8791, 0xB4A4, 0x8792, 0x8793, 0x8794, /* 0xE0 */
+ 0xB4A5, 0x8795, 0x8796, 0x8797, 0x8798, 0x8799, 0x879A, 0x879B, /* 0xF0 */
+ 0x879C, 0xB4A6, 0x879D, 0xB4A7, 0x879E, 0xB4A8, 0x879F, 0x87A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x87A1, 0x87A2, 0x87A3, 0x87A4, 0xB4A9, 0xB4AA, 0x87A5, 0x87A6, /* 0x00 */
+ 0xB4AB, 0x87A7, 0x87A8, 0xB4AC, 0xB4AD, 0x87A9, 0x87AA, 0x87AB, /* 0x00 */
+ 0x87AC, 0x87AD, 0x87AE, 0x87AF, 0xB4AE, 0xB4AF, 0x87B0, 0xB4B0, /* 0x10 */
+ 0x87B1, 0xB4B1, 0x87B2, 0x87B3, 0x87B4, 0x87B5, 0x87B6, 0x87B7, /* 0x10 */
+ 0xB4B2, 0x87B8, 0x87B9, 0x87BA, 0x87BB, 0x87BC, 0x87BD, 0x87BE, /* 0x20 */
+ 0x87BF, 0x87C0, 0x87C1, 0x87C2, 0x87C3, 0x87C4, 0x87C5, 0x87C6, /* 0x20 */
+ 0x87C7, 0x87C8, 0x87C9, 0x87CA, 0xB4B3, 0x87CB, 0x87CC, 0x87CD, /* 0x30 */
+ 0x87CE, 0x87CF, 0x87D0, 0x87D1, 0xB4B4, 0x87D2, 0x87D3, 0x87D4, /* 0x30 */
+ 0x87D5, 0x87D6, 0x87D7, 0x87D8, 0x87D9, 0x87DA, 0x87DB, 0x87DC, /* 0x40 */
+ 0x87DD, 0x87DE, 0x87DF, 0x87E0, 0x87E1, 0x87E2, 0x87E3, 0x87E4, /* 0x40 */
+ 0x87E5, 0x87E6, 0x87E7, 0x87E8, 0x87E9, 0x87EA, 0x87EB, 0x87EC, /* 0x50 */
+ 0xB4B5, 0x87ED, 0x87EE, 0x87EF, 0xB4B6, 0x87F0, 0x87F1, 0x87F2, /* 0x50 */
+ 0xB4B7, 0x87F3, 0x87F4, 0x87F5, 0x87F6, 0x87F7, 0x87F8, 0x87F9, /* 0x60 */
+ 0xB4B8, 0xB4B9, 0x87FA, 0x87FB, 0x87FC, 0x87FD, 0x87FE, 0x8841, /* 0x60 */
+ 0x8842, 0x8843, 0x8844, 0x8845, 0xB4BA, 0xB4BB, 0x8846, 0x8847, /* 0x70 */
+ 0x8848, 0x8849, 0x884A, 0x884B, 0xB4BC, 0x884C, 0x884D, 0x884E, /* 0x70 */
+ 0x884F, 0x8850, 0x8851, 0x8852, 0xB4BD, 0xB4BE, 0x8853, 0x8854, /* 0x80 */
+ 0x8855, 0xB4BF, 0x8856, 0x8857, 0x8858, 0x8859, 0x885A, 0x8861, /* 0x80 */
+ 0xB4C0, 0xB4C1, 0x8862, 0x8863, 0xB4C2, 0x8864, 0x8865, 0x8866, /* 0x90 */
+ 0xB4C3, 0xB4C4, 0xB4C5, 0x8867, 0x8868, 0x8869, 0x886A, 0x886B, /* 0x90 */
+ 0xB4C6, 0xB4C7, 0x886C, 0xB4C8, 0x886D, 0xB4C9, 0xB4CA, 0x886E, /* 0xA0 */
+ 0x886F, 0x8870, 0xB4CB, 0x8871, 0xB4CC, 0x8872, 0x8873, 0x8874, /* 0xA0 */
+ 0xB4CD, 0x8875, 0x8876, 0x8877, 0xB4CE, 0x8878, 0x8879, 0x887A, /* 0xB0 */
+ 0x8881, 0x8882, 0x8883, 0x8884, 0x8885, 0x8886, 0x8887, 0x8888, /* 0xB0 */
+ 0x8889, 0x888A, 0x888B, 0x888C, 0x888D, 0x888E, 0x888F, 0x8890, /* 0xC0 */
+ 0xB4CF, 0xB4D0, 0x8891, 0x8892, 0xB4D1, 0x8893, 0x8894, 0x8895, /* 0xC0 */
+ 0xB4D2, 0x8896, 0xB4D3, 0x8897, 0x8898, 0x8899, 0x889A, 0x889B, /* 0xD0 */
+ 0xB4D4, 0xB4D5, 0x889C, 0xB4D6, 0x889D, 0xB4D7, 0x889E, 0x889F, /* 0xD0 */
+ 0x88A0, 0x88A1, 0xB4D8, 0x88A2, 0xB4D9, 0xB4DA, 0xB4DB, 0x88A3, /* 0xE0 */
+ 0xB4DC, 0x88A4, 0x88A5, 0xB4DD, 0xB4DE, 0xB4DF, 0xB4E0, 0xB4E1, /* 0xE0 */
+ 0x88A6, 0x88A7, 0x88A8, 0xB4E2, 0xB4E3, 0xB4E4, 0x88A9, 0xB4E5, /* 0xF0 */
+ 0xB4E6, 0xB4E7, 0xB4E8, 0xB4E9, 0x88AA, 0x88AB, 0x88AC, 0xB4EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB4EB, 0xB4EC, 0x88AD, 0x88AE, 0xB4ED, 0x88AF, 0x88B0, 0x88B1, /* 0x00 */
+ 0xB4EE, 0x88B2, 0x88B3, 0x88B4, 0x88B5, 0x88B6, 0x88B7, 0x88B8, /* 0x00 */
+ 0xB4EF, 0xB4F0, 0x88B9, 0xB4F1, 0xB4F2, 0xB4F3, 0x88BA, 0x88BB, /* 0x10 */
+ 0x88BC, 0x88BD, 0x88BE, 0x88BF, 0xB4F4, 0x88C0, 0x88C1, 0x88C2, /* 0x10 */
+ 0x88C3, 0x88C4, 0x88C5, 0x88C6, 0x88C7, 0x88C8, 0x88C9, 0x88CA, /* 0x20 */
+ 0x88CB, 0x88CC, 0x88CD, 0x88CE, 0x88CF, 0x88D0, 0x88D1, 0x88D2, /* 0x20 */
+ 0x88D3, 0x88D4, 0x88D5, 0x88D6, 0x88D7, 0x88D8, 0x88D9, 0x88DA, /* 0x30 */
+ 0x88DB, 0x88DC, 0x88DD, 0x88DE, 0x88DF, 0x88E0, 0x88E1, 0x88E2, /* 0x30 */
+ 0x88E3, 0x88E4, 0x88E5, 0x88E6, 0x88E7, 0x88E8, 0x88E9, 0x88EA, /* 0x40 */
+ 0x88EB, 0x88EC, 0x88ED, 0x88EE, 0x88EF, 0x88F0, 0x88F1, 0x88F2, /* 0x40 */
+ 0x88F3, 0x88F4, 0x88F5, 0x88F6, 0xB4F5, 0xB4F6, 0xB4F7, 0x88F7, /* 0x50 */
+ 0xB4F8, 0x88F8, 0x88F9, 0xB4F9, 0xB4FA, 0x88FA, 0xB4FB, 0xB4FC, /* 0x50 */
+ 0x88FB, 0x88FC, 0x88FD, 0x88FE, 0xB4FD, 0xB4FE, 0x8941, 0xB5A1, /* 0x60 */
+ 0x8942, 0xB5A2, 0x8943, 0xB5A3, 0x8944, 0x8945, 0xB5A4, 0x8946, /* 0x60 */
+ 0xB5A5, 0xB5A6, 0x8947, 0x8948, 0xB5A7, 0x8949, 0x894A, 0x894B, /* 0x70 */
+ 0xB5A8, 0x894C, 0x894D, 0x894E, 0x894F, 0x8950, 0x8951, 0x8952, /* 0x70 */
+ 0xB5A9, 0xB5AA, 0x8953, 0xB5AB, 0xB5AC, 0xB5AD, 0x8954, 0x8955, /* 0x80 */
+ 0x8956, 0x8957, 0x8958, 0x8959, 0xB5AE, 0x895A, 0x8961, 0x8962, /* 0x80 */
+ 0xB5AF, 0x8963, 0x8964, 0x8965, 0xB5B0, 0x8966, 0x8967, 0x8968, /* 0x90 */
+ 0x8969, 0x896A, 0x896B, 0x896C, 0x896D, 0x896E, 0x896F, 0x8970, /* 0x90 */
+ 0xB5B1, 0xB5B2, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0x8976, /* 0xA0 */
+ 0xB5B3, 0x8977, 0x8978, 0x8979, 0xB5B4, 0x897A, 0x8981, 0x8982, /* 0xA0 */
+ 0x8983, 0x8984, 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898A, /* 0xB0 */
+ 0x898B, 0x898C, 0x898D, 0x898E, 0x898F, 0x8990, 0x8991, 0x8992, /* 0xB0 */
+ 0x8993, 0x8994, 0x8995, 0x8996, 0xB5B5, 0xB5B6, 0x8997, 0x8998, /* 0xC0 */
+ 0xB5B7, 0x8999, 0x899A, 0xB5B8, 0xB5B9, 0x899B, 0xB5BA, 0x899C, /* 0xC0 */
+ 0xB5BB, 0x899D, 0x899E, 0x899F, 0xB5BC, 0xB5BD, 0x89A0, 0xB5BE, /* 0xD0 */
+ 0x89A1, 0xB5BF, 0x89A2, 0xB5C0, 0x89A3, 0xB5C1, 0x89A4, 0x89A5, /* 0xD0 */
+ 0xB5C2, 0x89A6, 0x89A7, 0x89A8, 0xB5C3, 0x89A9, 0x89AA, 0x89AB, /* 0xE0 */
+ 0xB5C4, 0x89AC, 0x89AD, 0x89AE, 0x89AF, 0x89B0, 0x89B1, 0x89B2, /* 0xE0 */
+ 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, 0x89B8, 0x89B9, 0x89BA, /* 0xF0 */
+ 0x89BB, 0x89BC, 0x89BD, 0x89BE, 0xB5C5, 0x89BF, 0x89C0, 0x89C1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x89C2, 0x89C3, 0x89C4, 0x89C5, 0x89C6, 0x89C7, 0x89C8, 0x89C9, /* 0x00 */
+ 0x89CA, 0x89CB, 0x89CC, 0x89CD, 0x89CE, 0x89CF, 0x89D0, 0x89D1, /* 0x00 */
+ 0xB5C6, 0x89D2, 0x89D3, 0x89D4, 0x89D5, 0x89D6, 0x89D7, 0x89D8, /* 0x10 */
+ 0xB5C7, 0x89D9, 0x89DA, 0x89DB, 0xB5C8, 0x89DC, 0x89DD, 0x89DE, /* 0x10 */
+ 0xB5C9, 0x89DF, 0x89E0, 0x89E1, 0x89E2, 0x89E3, 0x89E4, 0x89E5, /* 0x20 */
+ 0xB5CA, 0xB5CB, 0x89E6, 0xB5CC, 0x89E7, 0x89E8, 0x89E9, 0x89EA, /* 0x20 */
+ 0x89EB, 0x89EC, 0x89ED, 0x89EE, 0xB5CD, 0x89EF, 0x89F0, 0x89F1, /* 0x30 */
+ 0x89F2, 0x89F3, 0x89F4, 0x89F5, 0x89F6, 0x89F7, 0x89F8, 0x89F9, /* 0x30 */
+ 0x89FA, 0x89FB, 0x89FC, 0x89FD, 0x89FE, 0x8A41, 0x8A42, 0x8A43, /* 0x40 */
+ 0x8A44, 0x8A45, 0x8A46, 0x8A47, 0x8A48, 0x8A49, 0x8A4A, 0x8A4B, /* 0x40 */
+ 0xB5CE, 0xB5CF, 0x8A4C, 0x8A4D, 0xB5D0, 0x8A4E, 0x8A4F, 0x8A50, /* 0x50 */
+ 0xB5D1, 0x8A51, 0x8A52, 0x8A53, 0x8A54, 0x8A55, 0x8A56, 0x8A57, /* 0x50 */
+ 0xB5D2, 0xB5D3, 0x8A58, 0xB5D4, 0x8A59, 0xB5D5, 0x8A5A, 0x8A61, /* 0x60 */
+ 0x8A62, 0x8A63, 0x8A64, 0x8A65, 0xB5D6, 0x8A66, 0x8A67, 0x8A68, /* 0x60 */
+ 0x8A69, 0x8A6A, 0x8A6B, 0x8A6C, 0x8A6D, 0x8A6E, 0x8A6F, 0x8A70, /* 0x70 */
+ 0x8A71, 0x8A72, 0x8A73, 0x8A74, 0x8A75, 0x8A76, 0x8A77, 0x8A78, /* 0x70 */
+ 0xB5D7, 0x8A79, 0x8A7A, 0x8A81, 0x8A82, 0x8A83, 0x8A84, 0x8A85, /* 0x80 */
+ 0xB5D8, 0x8A86, 0x8A87, 0x8A88, 0x8A89, 0x8A8A, 0x8A8B, 0x8A8C, /* 0x80 */
+ 0x8A8D, 0x8A8E, 0x8A8F, 0x8A90, 0x8A91, 0x8A92, 0x8A93, 0x8A94, /* 0x90 */
+ 0x8A95, 0x8A96, 0x8A97, 0x8A98, 0x8A99, 0xB5D9, 0x8A9A, 0x8A9B, /* 0x90 */
+ 0x8A9C, 0x8A9D, 0x8A9E, 0x8A9F, 0xB5DA, 0x8AA0, 0x8AA1, 0x8AA2, /* 0xA0 */
+ 0xB5DB, 0x8AA3, 0x8AA4, 0x8AA5, 0xB5DC, 0x8AA6, 0x8AA7, 0x8AA8, /* 0xA0 */
+ 0x8AA9, 0x8AAA, 0x8AAB, 0x8AAC, 0x8AAD, 0xB5DD, 0x8AAE, 0xB5DE, /* 0xB0 */
+ 0x8AAF, 0xB5DF, 0x8AB0, 0x8AB1, 0x8AB2, 0x8AB3, 0x8AB4, 0x8AB5, /* 0xB0 */
+ 0xB5E0, 0x8AB6, 0x8AB7, 0x8AB8, 0xB5E1, 0x8AB9, 0x8ABA, 0x8ABB, /* 0xC0 */
+ 0xB5E2, 0x8ABC, 0x8ABD, 0x8ABE, 0x8ABF, 0x8AC0, 0x8AC1, 0x8AC2, /* 0xC0 */
+ 0xB5E3, 0x8AC3, 0x8AC4, 0x8AC5, 0x8AC6, 0xB5E4, 0x8AC7, 0x8AC8, /* 0xD0 */
+ 0x8AC9, 0x8ACA, 0x8ACB, 0x8ACC, 0xB5E5, 0xB5E6, 0x8ACD, 0x8ACE, /* 0xD0 */
+ 0xB5E7, 0x8ACF, 0x8AD0, 0xB5E8, 0xB5E9, 0x8AD1, 0xB5EA, 0x8AD2, /* 0xE0 */
+ 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD6, 0xB5EB, 0xB5EC, 0x8AD7, 0xB5ED, /* 0xE0 */
+ 0x8AD8, 0xB5EE, 0x8AD9, 0x8ADA, 0x8ADB, 0x8ADC, 0x8ADD, 0x8ADE, /* 0xF0 */
+ 0xB5EF, 0x8ADF, 0x8AE0, 0x8AE1, 0x8AE2, 0x8AE3, 0x8AE4, 0x8AE5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8AE6, 0x8AE7, 0x8AE8, 0x8AE9, 0x8AEA, 0x8AEB, 0x8AEC, 0x8AED, /* 0x00 */
+ 0x8AEE, 0x8AEF, 0x8AF0, 0x8AF1, 0x8AF2, 0x8AF3, 0x8AF4, 0x8AF5, /* 0x00 */
+ 0x8AF6, 0x8AF7, 0x8AF8, 0x8AF9, 0xB5F0, 0xB5F1, 0x8AFA, 0x8AFB, /* 0x10 */
+ 0xB5F2, 0x8AFC, 0x8AFD, 0xB5F3, 0xB5F4, 0x8AFE, 0x8B41, 0x8B42, /* 0x10 */
+ 0x8B43, 0x8B44, 0x8B45, 0x8B46, 0xB5F5, 0xB5F6, 0x8B47, 0xB5F7, /* 0x20 */
+ 0xB5F8, 0xB5F9, 0xB5FA, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, 0x8B4C, /* 0x20 */
+ 0xB5FB, 0xB5FC, 0x8B4D, 0x8B4E, 0xB5FD, 0x8B4F, 0x8B50, 0x8B51, /* 0x30 */
+ 0xB5FE, 0x8B52, 0x8B53, 0x8B54, 0x8B55, 0x8B56, 0x8B57, 0x8B58, /* 0x30 */
+ 0xB6A1, 0xB6A2, 0x8B59, 0xB6A3, 0xB6A4, 0xB6A5, 0x8B5A, 0x8B61, /* 0x40 */
+ 0x8B62, 0x8B63, 0x8B64, 0xB6A6, 0xB6A7, 0xB6A8, 0x8B65, 0x8B66, /* 0x40 */
+ 0xB6A9, 0x8B67, 0x8B68, 0x8B69, 0xB6AA, 0x8B6A, 0x8B6B, 0x8B6C, /* 0x50 */
+ 0x8B6D, 0x8B6E, 0x8B6F, 0x8B70, 0xB6AB, 0xB6AC, 0x8B71, 0xB6AD, /* 0x50 */
+ 0xB6AE, 0xB6AF, 0x8B72, 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, /* 0x60 */
+ 0x8B78, 0x8B79, 0x8B7A, 0x8B81, 0x8B82, 0x8B83, 0x8B84, 0x8B85, /* 0x60 */
+ 0x8B86, 0x8B87, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, 0x8B8D, /* 0x70 */
+ 0x8B8E, 0x8B8F, 0x8B90, 0x8B91, 0x8B92, 0x8B93, 0x8B94, 0x8B95, /* 0x70 */
+ 0x8B96, 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B, 0x8B9C, 0x8B9D, /* 0x80 */
+ 0x8B9E, 0x8B9F, 0x8BA0, 0x8BA1, 0x8BA2, 0x8BA3, 0x8BA4, 0x8BA5, /* 0x80 */
+ 0x8BA6, 0x8BA7, 0x8BA8, 0x8BA9, 0x8BAA, 0x8BAB, 0x8BAC, 0x8BAD, /* 0x90 */
+ 0x8BAE, 0x8BAF, 0x8BB0, 0x8BB1, 0x8BB2, 0x8BB3, 0x8BB4, 0x8BB5, /* 0x90 */
+ 0xB6B0, 0xB6B1, 0x8BB6, 0x8BB7, 0xB6B2, 0x8BB8, 0x8BB9, 0x8BBA, /* 0xA0 */
+ 0xB6B3, 0x8BBB, 0xB6B4, 0xB6B5, 0x8BBC, 0x8BBD, 0x8BBE, 0x8BBF, /* 0xA0 */
+ 0xB6B6, 0xB6B7, 0x8BC0, 0xB6B8, 0xB6B9, 0xB6BA, 0x8BC1, 0x8BC2, /* 0xB0 */
+ 0x8BC3, 0x8BC4, 0x8BC5, 0xB6BB, 0xB6BC, 0xB6BD, 0x8BC6, 0x8BC7, /* 0xB0 */
+ 0xB6BE, 0x8BC8, 0x8BC9, 0x8BCA, 0xB6BF, 0x8BCB, 0x8BCC, 0x8BCD, /* 0xC0 */
+ 0x8BCE, 0x8BCF, 0x8BD0, 0x8BD1, 0xB6C0, 0xB6C1, 0x8BD2, 0xB6C2, /* 0xC0 */
+ 0xB6C3, 0xB6C4, 0x8BD3, 0x8BD4, 0x8BD5, 0x8BD6, 0x8BD7, 0x8BD8, /* 0xD0 */
+ 0xB6C5, 0x8BD9, 0x8BDA, 0x8BDB, 0x8BDC, 0x8BDD, 0x8BDE, 0x8BDF, /* 0xD0 */
+ 0x8BE0, 0x8BE1, 0x8BE2, 0x8BE3, 0x8BE4, 0x8BE5, 0x8BE6, 0x8BE7, /* 0xE0 */
+ 0x8BE8, 0x8BE9, 0x8BEA, 0x8BEB, 0xB6C6, 0x8BEC, 0x8BED, 0x8BEE, /* 0xE0 */
+ 0x8BEF, 0x8BF0, 0x8BF1, 0x8BF2, 0x8BF3, 0x8BF4, 0x8BF5, 0x8BF6, /* 0xF0 */
+ 0x8BF7, 0x8BF8, 0x8BF9, 0x8BFA, 0x8BFB, 0x8BFC, 0x8BFD, 0x8BFE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8C41, 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C46, 0x8C47, 0x8C48, /* 0x00 */
+ 0x8C49, 0x8C4A, 0x8C4B, 0x8C4C, 0x8C4D, 0x8C4E, 0x8C4F, 0x8C50, /* 0x00 */
+ 0xB6C7, 0xB6C8, 0x8C51, 0x8C52, 0xB6C9, 0x8C53, 0x8C54, 0x8C55, /* 0x10 */
+ 0xB6CA, 0x8C56, 0x8C57, 0x8C58, 0x8C59, 0x8C5A, 0x8C61, 0x8C62, /* 0x10 */
+ 0x8C63, 0x8C64, 0x8C65, 0x8C66, 0x8C67, 0xB6CB, 0x8C68, 0x8C69, /* 0x20 */
+ 0x8C6A, 0x8C6B, 0x8C6C, 0x8C6D, 0xB6CC, 0x8C6E, 0x8C6F, 0x8C70, /* 0x20 */
+ 0x8C71, 0x8C72, 0x8C73, 0x8C74, 0xB6CD, 0x8C75, 0x8C76, 0x8C77, /* 0x30 */
+ 0x8C78, 0x8C79, 0x8C7A, 0x8C81, 0x8C82, 0x8C83, 0x8C84, 0x8C85, /* 0x30 */
+ 0x8C86, 0x8C87, 0x8C88, 0x8C89, 0x8C8A, 0x8C8B, 0x8C8C, 0x8C8D, /* 0x40 */
+ 0xB6CE, 0x8C8E, 0x8C8F, 0x8C90, 0x8C91, 0x8C92, 0x8C93, 0x8C94, /* 0x40 */
+ 0x8C95, 0x8C96, 0x8C97, 0x8C98, 0x8C99, 0x8C9A, 0x8C9B, 0x8C9C, /* 0x50 */
+ 0x8C9D, 0x8C9E, 0x8C9F, 0x8CA0, 0x8CA1, 0x8CA2, 0x8CA3, 0x8CA4, /* 0x50 */
+ 0x8CA5, 0x8CA6, 0x8CA7, 0x8CA8, 0xB6CF, 0x8CA9, 0x8CAA, 0x8CAB, /* 0x60 */
+ 0xB6D0, 0x8CAC, 0x8CAD, 0x8CAE, 0x8CAF, 0x8CB0, 0x8CB1, 0x8CB2, /* 0x60 */
+ 0x8CB3, 0x8CB4, 0x8CB5, 0x8CB6, 0x8CB7, 0x8CB8, 0x8CB9, 0x8CBA, /* 0x70 */
+ 0x8CBB, 0x8CBC, 0x8CBD, 0x8CBE, 0x8CBF, 0x8CC0, 0x8CC1, 0x8CC2, /* 0x70 */
+ 0x8CC3, 0x8CC4, 0x8CC5, 0x8CC6, 0x8CC7, 0x8CC8, 0x8CC9, 0x8CCA, /* 0x80 */
+ 0x8CCB, 0x8CCC, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, 0x8CD1, 0x8CD2, /* 0x80 */
+ 0x8CD3, 0x8CD4, 0x8CD5, 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDA, /* 0x90 */
+ 0x8CDB, 0x8CDC, 0x8CDD, 0x8CDE, 0xB6D1, 0xB6D2, 0x8CDF, 0x8CE0, /* 0x90 */
+ 0xB6D3, 0x8CE1, 0x8CE2, 0x8CE3, 0xB6D4, 0x8CE4, 0x8CE5, 0x8CE6, /* 0xA0 */
+ 0x8CE7, 0x8CE8, 0x8CE9, 0xB6D5, 0xB6D6, 0x8CEA, 0x8CEB, 0x8CEC, /* 0xA0 */
+ 0x8CED, 0xB6D7, 0x8CEE, 0x8CEF, 0x8CF0, 0x8CF1, 0x8CF2, 0x8CF3, /* 0xB0 */
+ 0x8CF4, 0x8CF5, 0x8CF6, 0x8CF7, 0x8CF8, 0x8CF9, 0x8CFA, 0x8CFB, /* 0xB0 */
+ 0x8CFC, 0x8CFD, 0x8CFE, 0x8D41, 0x8D42, 0x8D43, 0x8D44, 0x8D45, /* 0xC0 */
+ 0x8D46, 0x8D47, 0x8D48, 0x8D49, 0x8D4A, 0x8D4B, 0x8D4C, 0x8D4D, /* 0xC0 */
+ 0x8D4E, 0x8D4F, 0x8D50, 0x8D51, 0xB6D8, 0x8D52, 0x8D53, 0x8D54, /* 0xD0 */
+ 0x8D55, 0x8D56, 0x8D57, 0x8D58, 0x8D59, 0x8D5A, 0x8D61, 0x8D62, /* 0xD0 */
+ 0x8D63, 0x8D64, 0x8D65, 0x8D66, 0x8D67, 0x8D68, 0x8D69, 0x8D6A, /* 0xE0 */
+ 0x8D6B, 0x8D6C, 0x8D6D, 0x8D6E, 0x8D6F, 0x8D70, 0x8D71, 0x8D72, /* 0xE0 */
+ 0xB6D9, 0x8D73, 0x8D74, 0x8D75, 0xB6DA, 0x8D76, 0x8D77, 0x8D78, /* 0xF0 */
+ 0xB6DB, 0x8D79, 0x8D7A, 0x8D81, 0x8D82, 0x8D83, 0x8D84, 0x8D85 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB6DC, 0xB6DD, 0x8D86, 0x8D87, 0x8D88, 0xB6DE, 0x8D89, 0x8D8A, /* 0x00 */
+ 0x8D8B, 0x8D8C, 0x8D8D, 0x8D8E, 0x8D8F, 0x8D90, 0x8D91, 0x8D92, /* 0x00 */
+ 0x8D93, 0x8D94, 0x8D95, 0x8D96, 0x8D97, 0x8D98, 0x8D99, 0x8D9A, /* 0x10 */
+ 0x8D9B, 0x8D9C, 0x8D9D, 0x8D9E, 0x8D9F, 0x8DA0, 0x8DA1, 0x8DA2, /* 0x10 */
+ 0x8DA3, 0x8DA4, 0x8DA5, 0x8DA6, 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, /* 0x20 */
+ 0xB6DF, 0xB6E0, 0x8DAB, 0x8DAC, 0xB6E1, 0x8DAD, 0x8DAE, 0xB6E2, /* 0x20 */
+ 0xB6E3, 0x8DAF, 0x8DB0, 0x8DB1, 0x8DB2, 0x8DB3, 0x8DB4, 0x8DB5, /* 0x30 */
+ 0xB6E4, 0xB6E5, 0x8DB6, 0xB6E6, 0x8DB7, 0x8DB8, 0x8DB9, 0x8DBA, /* 0x30 */
+ 0x8DBB, 0x8DBC, 0x8DBD, 0x8DBE, 0xB6E7, 0x8DBF, 0x8DC0, 0x8DC1, /* 0x40 */
+ 0xB6E8, 0x8DC2, 0x8DC3, 0x8DC4, 0xB6E9, 0x8DC5, 0x8DC6, 0x8DC7, /* 0x40 */
+ 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCB, 0xB6EA, 0xB6EB, 0x8DCC, 0x8DCD, /* 0x50 */
+ 0x8DCE, 0x8DCF, 0x8DD0, 0x8DD1, 0x8DD2, 0x8DD3, 0x8DD4, 0x8DD5, /* 0x50 */
+ 0xB6EC, 0x8DD6, 0x8DD7, 0x8DD8, 0xB6ED, 0x8DD9, 0x8DDA, 0x8DDB, /* 0x60 */
+ 0xB6EE, 0x8DDC, 0x8DDD, 0x8DDE, 0x8DDF, 0x8DE0, 0x8DE1, 0x8DE2, /* 0x60 */
+ 0xB6EF, 0xB6F0, 0x8DE3, 0xB6F1, 0x8DE4, 0xB6F2, 0x8DE5, 0x8DE6, /* 0x70 */
+ 0x8DE7, 0x8DE8, 0x8DE9, 0x8DEA, 0xB6F3, 0xB6F4, 0x8DEB, 0x8DEC, /* 0x70 */
+ 0xB6F5, 0x8DED, 0x8DEE, 0x8DEF, 0xB6F6, 0x8DF0, 0x8DF1, 0x8DF2, /* 0x80 */
+ 0x8DF3, 0x8DF4, 0x8DF5, 0x8DF6, 0xB6F7, 0xB6F8, 0x8DF7, 0xB6F9, /* 0x80 */
+ 0xB6FA, 0xB6FB, 0xB6FC, 0x8DF8, 0x8DF9, 0x8DFA, 0xB6FD, 0xB6FE, /* 0x90 */
+ 0xB7A1, 0xB7A2, 0x8DFB, 0x8DFC, 0xB7A3, 0x8DFD, 0x8DFE, 0x8E41, /* 0x90 */
+ 0xB7A4, 0x8E42, 0x8E43, 0x8E44, 0x8E45, 0x8E46, 0x8E47, 0x8E48, /* 0xA0 */
+ 0xB7A5, 0xB7A6, 0x8E49, 0xB7A7, 0xB7A8, 0xB7A9, 0x8E4A, 0x8E4B, /* 0xA0 */
+ 0x8E4C, 0x8E4D, 0x8E4E, 0x8E4F, 0xB7AA, 0xB7AB, 0x8E50, 0x8E51, /* 0xB0 */
+ 0xB7AC, 0x8E52, 0x8E53, 0x8E54, 0x8E55, 0x8E56, 0x8E57, 0x8E58, /* 0xB0 */
+ 0x8E59, 0x8E5A, 0x8E61, 0x8E62, 0x8E63, 0x8E64, 0x8E65, 0xB7AD, /* 0xC0 */
+ 0x8E66, 0xB7AE, 0x8E67, 0x8E68, 0x8E69, 0x8E6A, 0x8E6B, 0x8E6C, /* 0xC0 */
+ 0x8E6D, 0x8E6E, 0x8E6F, 0x8E70, 0x8E71, 0x8E72, 0x8E73, 0x8E74, /* 0xD0 */
+ 0x8E75, 0x8E76, 0x8E77, 0x8E78, 0x8E79, 0x8E7A, 0x8E81, 0x8E82, /* 0xD0 */
+ 0x8E83, 0x8E84, 0x8E85, 0x8E86, 0x8E87, 0x8E88, 0x8E89, 0x8E8A, /* 0xE0 */
+ 0x8E8B, 0x8E8C, 0x8E8D, 0x8E8E, 0xB7AF, 0xB7B0, 0x8E8F, 0x8E90, /* 0xE0 */
+ 0xB7B1, 0x8E91, 0x8E92, 0x8E93, 0xB7B2, 0x8E94, 0x8E95, 0x8E96, /* 0xF0 */
+ 0x8E97, 0x8E98, 0x8E99, 0x8E9A, 0xB7B3, 0xB7B4, 0x8E9B, 0xB7B5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB7B6, 0xB7B7, 0x8E9C, 0x8E9D, 0x8E9E, 0x8E9F, 0x8EA0, 0xB7B8, /* 0x00 */
+ 0xB7B9, 0xB7BA, 0x8EA1, 0x8EA2, 0xB7BB, 0x8EA3, 0x8EA4, 0x8EA5, /* 0x00 */
+ 0xB7BC, 0x8EA6, 0x8EA7, 0x8EA8, 0x8EA9, 0x8EAA, 0x8EAB, 0x8EAC, /* 0x10 */
+ 0xB7BD, 0xB7BE, 0x8EAD, 0xB7BF, 0x8EAE, 0xB7C0, 0x8EAF, 0x8EB0, /* 0x10 */
+ 0x8EB1, 0x8EB2, 0x8EB3, 0x8EB4, 0xB7C1, 0xB7C2, 0x8EB5, 0x8EB6, /* 0x20 */
+ 0xB7C3, 0x8EB7, 0x8EB8, 0x8EB9, 0xB7C4, 0x8EBA, 0x8EBB, 0x8EBC, /* 0x20 */
+ 0x8EBD, 0x8EBE, 0x8EBF, 0x8EC0, 0xB7C5, 0xB7C6, 0x8EC1, 0xB7C7, /* 0x30 */
+ 0xB7C8, 0xB7C9, 0x8EC2, 0x8EC3, 0x8EC4, 0x8EC5, 0x8EC6, 0x8EC7, /* 0x30 */
+ 0xB7CA, 0x8EC8, 0x8EC9, 0x8ECA, 0xB7CB, 0x8ECB, 0x8ECC, 0x8ECD, /* 0x40 */
+ 0x8ECE, 0x8ECF, 0x8ED0, 0x8ED1, 0x8ED2, 0x8ED3, 0x8ED4, 0x8ED5, /* 0x40 */
+ 0x8ED6, 0xB7CC, 0x8ED7, 0xB7CD, 0x8ED8, 0x8ED9, 0x8EDA, 0x8EDB, /* 0x50 */
+ 0x8EDC, 0x8EDD, 0x8EDE, 0x8EDF, 0xB7CE, 0xB7CF, 0x8EE0, 0x8EE1, /* 0x50 */
+ 0xB7D0, 0x8EE2, 0x8EE3, 0x8EE4, 0xB7D1, 0x8EE5, 0x8EE6, 0x8EE7, /* 0x60 */
+ 0x8EE8, 0x8EE9, 0x8EEA, 0x8EEB, 0xB7D2, 0xB7D3, 0x8EEC, 0xB7D4, /* 0x60 */
+ 0x8EED, 0xB7D5, 0x8EEE, 0x8EEF, 0x8EF0, 0x8EF1, 0x8EF2, 0x8EF3, /* 0x70 */
+ 0xB7D6, 0x8EF4, 0x8EF5, 0x8EF6, 0xB7D7, 0x8EF7, 0x8EF8, 0x8EF9, /* 0x70 */
+ 0x8EFA, 0x8EFB, 0x8EFC, 0x8EFD, 0x8EFE, 0x8F41, 0x8F42, 0x8F43, /* 0x80 */
+ 0x8F44, 0x8F45, 0x8F46, 0x8F47, 0x8F48, 0xB7D8, 0x8F49, 0x8F4A, /* 0x80 */
+ 0x8F4B, 0x8F4C, 0x8F4D, 0x8F4E, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, /* 0x90 */
+ 0x8F53, 0x8F54, 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, /* 0x90 */
+ 0x8F61, 0x8F62, 0x8F63, 0x8F64, 0x8F65, 0x8F66, 0x8F67, 0x8F68, /* 0xA0 */
+ 0xB7D9, 0x8F69, 0x8F6A, 0x8F6B, 0x8F6C, 0x8F6D, 0x8F6E, 0x8F6F, /* 0xA0 */
+ 0xB7DA, 0x8F70, 0x8F71, 0x8F72, 0xB7DB, 0x8F73, 0x8F74, 0x8F75, /* 0xB0 */
+ 0xB7DC, 0x8F76, 0x8F77, 0x8F78, 0x8F79, 0x8F7A, 0x8F81, 0x8F82, /* 0xB0 */
+ 0xB7DD, 0xB7DE, 0x8F83, 0xB7DF, 0x8F84, 0xB7E0, 0x8F85, 0x8F86, /* 0xC0 */
+ 0x8F87, 0x8F88, 0x8F89, 0x8F8A, 0xB7E1, 0x8F8B, 0x8F8C, 0x8F8D, /* 0xC0 */
+ 0xB7E2, 0x8F8E, 0x8F8F, 0x8F90, 0xB7E3, 0x8F91, 0x8F92, 0x8F93, /* 0xD0 */
+ 0x8F94, 0x8F95, 0x8F96, 0x8F97, 0x8F98, 0xB7E4, 0x8F99, 0xB7E5, /* 0xD0 */
+ 0x8F9A, 0xB7E6, 0x8F9B, 0x8F9C, 0x8F9D, 0x8F9E, 0x8F9F, 0x8FA0, /* 0xE0 */
+ 0xB7E7, 0xB7E8, 0x8FA1, 0x8FA2, 0xB7E9, 0x8FA3, 0x8FA4, 0x8FA5, /* 0xE0 */
+ 0xB7EA, 0x8FA6, 0x8FA7, 0x8FA8, 0x8FA9, 0x8FAA, 0x8FAB, 0x8FAC, /* 0xF0 */
+ 0xB7EB, 0xB7EC, 0x8FAD, 0xB7ED, 0x8FAE, 0xB7EE, 0x8FAF, 0x8FB0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_B9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8FB1, 0x8FB2, 0x8FB3, 0x8FB4, 0xB7EF, 0x8FB5, 0x8FB6, 0x8FB7, /* 0x00 */
+ 0x8FB8, 0x8FB9, 0x8FBA, 0x8FBB, 0x8FBC, 0x8FBD, 0x8FBE, 0x8FBF, /* 0x00 */
+ 0x8FC0, 0x8FC1, 0x8FC2, 0x8FC3, 0x8FC4, 0x8FC5, 0x8FC6, 0x8FC7, /* 0x10 */
+ 0xB7F0, 0x8FC8, 0x8FC9, 0x8FCA, 0x8FCB, 0x8FCC, 0x8FCD, 0x8FCE, /* 0x10 */
+ 0xB7F1, 0x8FCF, 0x8FD0, 0x8FD1, 0x8FD2, 0x8FD3, 0x8FD4, 0x8FD5, /* 0x20 */
+ 0x8FD6, 0x8FD7, 0x8FD8, 0x8FD9, 0x8FDA, 0x8FDB, 0x8FDC, 0x8FDD, /* 0x20 */
+ 0x8FDE, 0x8FDF, 0x8FE0, 0x8FE1, 0x8FE2, 0x8FE3, 0x8FE4, 0x8FE5, /* 0x30 */
+ 0x8FE6, 0x8FE7, 0x8FE8, 0x8FE9, 0xB7F2, 0xB7F3, 0x8FEA, 0x8FEB, /* 0x30 */
+ 0xB7F4, 0x8FEC, 0x8FED, 0x8FEE, 0xB7F5, 0x8FEF, 0x8FF0, 0x8FF1, /* 0x40 */
+ 0x8FF2, 0x8FF3, 0x8FF4, 0x8FF5, 0xB7F6, 0x8FF6, 0x8FF7, 0xB7F7, /* 0x40 */
+ 0x8FF8, 0xB7F8, 0x8FF9, 0x8FFA, 0x8FFB, 0x8FFC, 0x8FFD, 0x8FFE, /* 0x50 */
+ 0xB7F9, 0xB7FA, 0x9041, 0x9042, 0xB7FB, 0x9043, 0x9044, 0x9045, /* 0x50 */
+ 0xB7FC, 0x9046, 0x9047, 0x9048, 0x9049, 0x904A, 0x904B, 0x904C, /* 0x60 */
+ 0xB7FD, 0xB7FE, 0x904D, 0xB8A1, 0x904E, 0xB8A2, 0x904F, 0x9050, /* 0x60 */
+ 0x9051, 0x9052, 0x9053, 0x9054, 0xB8A3, 0xB8A4, 0x9055, 0x9056, /* 0x70 */
+ 0xB8A5, 0x9057, 0x9058, 0x9059, 0xB8A6, 0x905A, 0x9061, 0x9062, /* 0x70 */
+ 0x9063, 0x9064, 0x9065, 0x9066, 0xB8A7, 0xB8A8, 0x9067, 0xB8A9, /* 0x80 */
+ 0x9068, 0xB8AA, 0xB8AB, 0x9069, 0x906A, 0xB8AC, 0xB8AD, 0x906B, /* 0x80 */
+ 0x906C, 0x906D, 0x906E, 0x906F, 0x9070, 0x9071, 0x9072, 0x9073, /* 0x90 */
+ 0x9074, 0x9075, 0x9076, 0x9077, 0x9078, 0x9079, 0x907A, 0x9081, /* 0x90 */
+ 0x9082, 0x9083, 0x9084, 0x9085, 0x9086, 0x9087, 0x9088, 0x9089, /* 0xA0 */
+ 0x908A, 0x908B, 0x908C, 0x908D, 0xB8AE, 0xB8AF, 0x908E, 0x908F, /* 0xA0 */
+ 0xB8B0, 0x9090, 0x9091, 0x9092, 0xB8B1, 0x9093, 0x9094, 0x9095, /* 0xB0 */
+ 0x9096, 0x9097, 0x9098, 0x9099, 0xB8B2, 0xB8B3, 0x909A, 0xB8B4, /* 0xB0 */
+ 0x909B, 0xB8B5, 0x909C, 0x909D, 0x909E, 0x909F, 0x90A0, 0x90A1, /* 0xC0 */
+ 0xB8B6, 0xB8B7, 0x90A2, 0x90A3, 0xB8B8, 0x90A4, 0xB8B9, 0xB8BA, /* 0xC0 */
+ 0xB8BB, 0xB8BC, 0xB8BD, 0x90A5, 0x90A6, 0x90A7, 0x90A8, 0x90A9, /* 0xD0 */
+ 0xB8BE, 0xB8BF, 0x90AA, 0xB8C0, 0x90AB, 0xB8C1, 0xB8C2, 0x90AC, /* 0xD0 */
+ 0x90AD, 0xB8C3, 0x90AE, 0xB8C4, 0xB8C5, 0xB8C6, 0x90AF, 0x90B0, /* 0xE0 */
+ 0xB8C7, 0x90B1, 0x90B2, 0x90B3, 0xB8C8, 0x90B4, 0x90B5, 0x90B6, /* 0xE0 */
+ 0x90B7, 0x90B8, 0x90B9, 0x90BA, 0xB8C9, 0xB8CA, 0x90BB, 0xB8CB, /* 0xF0 */
+ 0xB8CC, 0xB8CD, 0xB8CE, 0x90BC, 0x90BD, 0x90BE, 0x90BF, 0x90C0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_BA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB8CF, 0xB8D0, 0x90C1, 0x90C2, 0x90C3, 0x90C4, 0x90C5, 0x90C6, /* 0x00 */
+ 0xB8D1, 0x90C7, 0x90C8, 0x90C9, 0x90CA, 0x90CB, 0x90CC, 0x90CD, /* 0x00 */
+ 0x90CE, 0x90CF, 0x90D0, 0x90D1, 0x90D2, 0xB8D2, 0x90D3, 0x90D4, /* 0x10 */
+ 0x90D5, 0x90D6, 0x90D7, 0x90D8, 0x90D9, 0x90DA, 0x90DB, 0x90DC, /* 0x10 */
+ 0x90DD, 0x90DE, 0x90DF, 0x90E0, 0x90E1, 0x90E2, 0x90E3, 0x90E4, /* 0x20 */
+ 0x90E5, 0x90E6, 0x90E7, 0x90E8, 0x90E9, 0x90EA, 0x90EB, 0x90EC, /* 0x20 */
+ 0x90ED, 0x90EE, 0x90EF, 0x90F0, 0x90F1, 0x90F2, 0x90F3, 0x90F4, /* 0x30 */
+ 0xB8D3, 0xB8D4, 0x90F5, 0x90F6, 0xB8D5, 0x90F7, 0x90F8, 0x90F9, /* 0x30 */
+ 0xB8D6, 0x90FA, 0xB8D7, 0x90FB, 0x90FC, 0x90FD, 0x90FE, 0x9141, /* 0x40 */
+ 0xB8D8, 0xB8D9, 0x9142, 0xB8DA, 0x9143, 0xB8DB, 0xB8DC, 0x9144, /* 0x40 */
+ 0x9145, 0x9146, 0x9147, 0xB8DD, 0xB8DE, 0xB8DF, 0x9148, 0x9149, /* 0x50 */
+ 0xB8E0, 0x914A, 0x914B, 0x914C, 0xB8E1, 0x914D, 0x914E, 0x914F, /* 0x50 */
+ 0x9150, 0x9151, 0x9152, 0x9153, 0xB8E2, 0xB8E3, 0x9154, 0xB8E4, /* 0x60 */
+ 0xB8E5, 0xB8E6, 0x9155, 0x9156, 0x9157, 0x9158, 0x9159, 0x915A, /* 0x60 */
+ 0xB8E7, 0xB8E8, 0x9161, 0x9162, 0xB8E9, 0x9163, 0x9164, 0x9165, /* 0x70 */
+ 0xB8EA, 0x9166, 0x9167, 0x9168, 0x9169, 0x916A, 0x916B, 0x916C, /* 0x70 */
+ 0x916D, 0x916E, 0x916F, 0xB8EB, 0xB8EC, 0xB8ED, 0x9170, 0xB8EE, /* 0x80 */
+ 0x9171, 0x9172, 0x9173, 0x9174, 0xB8EF, 0x9175, 0x9176, 0x9177, /* 0x80 */
+ 0x9178, 0x9179, 0x917A, 0x9181, 0x9182, 0x9183, 0x9184, 0x9185, /* 0x90 */
+ 0x9186, 0x9187, 0x9188, 0x9189, 0x918A, 0x918B, 0x918C, 0x918D, /* 0x90 */
+ 0x918E, 0x918F, 0x9190, 0x9191, 0x9192, 0x9193, 0x9194, 0x9195, /* 0xA0 */
+ 0xB8F0, 0xB8F1, 0x9196, 0xB8F2, 0xB8F3, 0x9197, 0x9198, 0x9199, /* 0xA0 */
+ 0xB8F4, 0x919A, 0xB8F5, 0x919B, 0x919C, 0x919D, 0x919E, 0x919F, /* 0xB0 */
+ 0xB8F6, 0xB8F7, 0x91A0, 0xB8F8, 0x91A1, 0xB8F9, 0x91A2, 0x91A3, /* 0xB0 */
+ 0x91A4, 0x91A5, 0x91A6, 0x91A7, 0xB8FA, 0x91A8, 0x91A9, 0x91AA, /* 0xC0 */
+ 0xB8FB, 0x91AB, 0x91AC, 0x91AD, 0x91AE, 0x91AF, 0x91B0, 0x91B1, /* 0xC0 */
+ 0x91B2, 0x91B3, 0x91B4, 0x91B5, 0x91B6, 0x91B7, 0x91B8, 0x91B9, /* 0xD0 */
+ 0xB8FC, 0xB8FD, 0x91BA, 0x91BB, 0x91BC, 0x91BD, 0x91BE, 0x91BF, /* 0xD0 */
+ 0x91C0, 0x91C1, 0x91C2, 0x91C3, 0x91C4, 0x91C5, 0x91C6, 0x91C7, /* 0xE0 */
+ 0x91C8, 0x91C9, 0x91CA, 0x91CB, 0x91CC, 0x91CD, 0x91CE, 0x91CF, /* 0xE0 */
+ 0x91D0, 0x91D1, 0x91D2, 0x91D3, 0x91D4, 0x91D5, 0x91D6, 0x91D7, /* 0xF0 */
+ 0x91D8, 0x91D9, 0x91DA, 0x91DB, 0xB8FE, 0x91DC, 0x91DD, 0x91DE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_BB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB9A1, 0x91DF, 0x91E0, 0x91E1, 0xB9A2, 0x91E2, 0x91E3, 0x91E4, /* 0x00 */
+ 0x91E5, 0x91E6, 0x91E7, 0x91E8, 0x91E9, 0xB9A3, 0x91EA, 0xB9A4, /* 0x00 */
+ 0x91EB, 0xB9A5, 0x91EC, 0x91ED, 0x91EE, 0x91EF, 0x91F0, 0x91F1, /* 0x10 */
+ 0xB9A6, 0x91F2, 0x91F3, 0x91F4, 0xB9A7, 0x91F5, 0x91F6, 0x91F7, /* 0x10 */
+ 0xB9A8, 0x91F8, 0x91F9, 0x91FA, 0x91FB, 0x91FC, 0x91FD, 0x91FE, /* 0x20 */
+ 0x9241, 0xB9A9, 0x9242, 0xB9AA, 0x9243, 0x9244, 0x9245, 0x9246, /* 0x20 */
+ 0x9247, 0x9248, 0x9249, 0x924A, 0xB9AB, 0xB9AC, 0xB9AD, 0x924B, /* 0x30 */
+ 0xB9AE, 0x924C, 0x924D, 0xB9AF, 0xB9B0, 0xB9B1, 0xB9B2, 0x924E, /* 0x30 */
+ 0x924F, 0x9250, 0x9251, 0x9252, 0xB9B3, 0xB9B4, 0x9253, 0xB9B5, /* 0x40 */
+ 0x9254, 0xB9B6, 0x9255, 0x9256, 0x9257, 0xB9B7, 0x9258, 0xB9B8, /* 0x40 */
+ 0xB9B9, 0x9259, 0x925A, 0x9261, 0xB9BA, 0x9262, 0x9263, 0x9264, /* 0x50 */
+ 0xB9BB, 0x9265, 0x9266, 0x9267, 0x9268, 0x9269, 0x926A, 0x926B, /* 0x50 */
+ 0x926C, 0xB9BC, 0x926D, 0xB9BD, 0x926E, 0x926F, 0x9270, 0x9271, /* 0x60 */
+ 0x9272, 0x9273, 0x9274, 0x9275, 0xB9BE, 0x9276, 0x9277, 0x9278, /* 0x60 */
+ 0x9279, 0x927A, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x9286, /* 0x70 */
+ 0x9287, 0x9288, 0x9289, 0x928A, 0x928B, 0x928C, 0x928D, 0x928E, /* 0x70 */
+ 0x928F, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, /* 0x80 */
+ 0xB9BF, 0x9297, 0x9298, 0x9299, 0xB9C0, 0x929A, 0x929B, 0x929C, /* 0x80 */
+ 0xB9C1, 0x929D, 0x929E, 0x929F, 0x92A0, 0x92A1, 0x92A2, 0x92A3, /* 0x90 */
+ 0x92A4, 0x92A5, 0x92A6, 0x92A7, 0x92A8, 0x92A9, 0x92AA, 0x92AB, /* 0x90 */
+ 0x92AC, 0x92AD, 0x92AE, 0x92AF, 0xB9C2, 0x92B0, 0x92B1, 0x92B2, /* 0xA0 */
+ 0xB9C3, 0x92B3, 0x92B4, 0x92B5, 0xB9C4, 0x92B6, 0x92B7, 0x92B8, /* 0xA0 */
+ 0x92B9, 0x92BA, 0x92BB, 0x92BC, 0xB9C5, 0x92BD, 0x92BE, 0xB9C6, /* 0xB0 */
+ 0x92BF, 0x92C0, 0x92C1, 0x92C2, 0x92C3, 0x92C4, 0x92C5, 0x92C6, /* 0xB0 */
+ 0xB9C7, 0x92C7, 0x92C8, 0x92C9, 0xB9C8, 0x92CA, 0x92CB, 0x92CC, /* 0xC0 */
+ 0xB9C9, 0x92CD, 0x92CE, 0x92CF, 0x92D0, 0x92D1, 0x92D2, 0x92D3, /* 0xC0 */
+ 0xB9CA, 0x92D4, 0x92D5, 0xB9CB, 0x92D6, 0x92D7, 0x92D8, 0x92D9, /* 0xD0 */
+ 0x92DA, 0x92DB, 0x92DC, 0x92DD, 0x92DE, 0x92DF, 0x92E0, 0x92E1, /* 0xD0 */
+ 0x92E2, 0x92E3, 0x92E4, 0x92E5, 0x92E6, 0x92E7, 0x92E8, 0x92E9, /* 0xE0 */
+ 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, 0x92F1, /* 0xE0 */
+ 0x92F2, 0x92F3, 0x92F4, 0x92F5, 0x92F6, 0x92F7, 0x92F8, 0x92F9, /* 0xF0 */
+ 0xB9CC, 0xB9CD, 0x92FA, 0x92FB, 0xB9CE, 0x92FC, 0x92FD, 0xB9CF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_BC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB9D0, 0x92FE, 0xB9D1, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345, /* 0x00 */
+ 0xB9D2, 0xB9D3, 0x9346, 0xB9D4, 0xB9D5, 0xB9D6, 0x9347, 0xB9D7, /* 0x00 */
+ 0x9348, 0xB9D8, 0x9349, 0x934A, 0xB9D9, 0xB9DA, 0xB9DB, 0xB9DC, /* 0x10 */
+ 0xB9DD, 0x934B, 0x934C, 0xB9DE, 0xB9DF, 0xB9E0, 0xB9E1, 0xB9E2, /* 0x10 */
+ 0x934D, 0x934E, 0x934F, 0x9350, 0xB9E3, 0xB9E4, 0x9351, 0xB9E5, /* 0x20 */
+ 0x9352, 0xB9E6, 0x9353, 0x9354, 0x9355, 0xB9E7, 0x9356, 0x9357, /* 0x20 */
+ 0xB9E8, 0xB9E9, 0x9358, 0x9359, 0xB9EA, 0x935A, 0x9361, 0x9362, /* 0x30 */
+ 0xB9EB, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, /* 0x30 */
+ 0xB9EC, 0xB9ED, 0x936A, 0xB9EE, 0xB9EF, 0xB9F0, 0x936B, 0x936C, /* 0x40 */
+ 0x936D, 0xB9F1, 0x936E, 0x936F, 0xB9F2, 0xB9F3, 0x9370, 0x9371, /* 0x40 */
+ 0xB9F4, 0x9372, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, /* 0x50 */
+ 0x9379, 0x937A, 0x9381, 0x9382, 0x9383, 0xB9F5, 0x9384, 0x9385, /* 0x50 */
+ 0x9386, 0x9387, 0x9388, 0x9389, 0x938A, 0x938B, 0x938C, 0x938D, /* 0x60 */
+ 0x938E, 0x938F, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, /* 0x60 */
+ 0x9396, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, 0x939C, 0x939D, /* 0x70 */
+ 0x939E, 0x939F, 0x93A0, 0x93A1, 0x93A2, 0x93A3, 0x93A4, 0x93A5, /* 0x70 */
+ 0x93A6, 0x93A7, 0x93A8, 0x93A9, 0xB9F6, 0xB9F7, 0x93AA, 0x93AB, /* 0x80 */
+ 0xB9F8, 0x93AC, 0x93AD, 0xB9F9, 0xB9FA, 0x93AE, 0xB9FB, 0x93AF, /* 0x80 */
+ 0x93B0, 0x93B1, 0x93B2, 0x93B3, 0xB9FC, 0xB9FD, 0x93B4, 0xB9FE, /* 0x90 */
+ 0x93B5, 0xBAA1, 0xBAA2, 0x93B6, 0x93B7, 0x93B8, 0x93B9, 0x93BA, /* 0x90 */
+ 0xBAA3, 0xBAA4, 0x93BB, 0x93BC, 0xBAA5, 0x93BD, 0x93BE, 0xBAA6, /* 0xA0 */
+ 0xBAA7, 0x93BF, 0x93C0, 0x93C1, 0x93C2, 0x93C3, 0x93C4, 0x93C5, /* 0xA0 */
+ 0xBAA8, 0xBAA9, 0x93C6, 0xBAAA, 0xBAAB, 0xBAAC, 0x93C7, 0x93C8, /* 0xB0 */
+ 0x93C9, 0x93CA, 0x93CB, 0x93CC, 0xBAAD, 0xBAAE, 0x93CD, 0x93CE, /* 0xB0 */
+ 0xBAAF, 0x93CF, 0x93D0, 0x93D1, 0xBAB0, 0x93D2, 0x93D3, 0x93D4, /* 0xC0 */
+ 0x93D5, 0x93D6, 0x93D7, 0x93D8, 0x93D9, 0xBAB1, 0x93DA, 0xBAB2, /* 0xC0 */
+ 0xBAB3, 0xBAB4, 0x93DB, 0x93DC, 0x93DD, 0xBAB5, 0x93DE, 0x93DF, /* 0xD0 */
+ 0xBAB6, 0x93E0, 0x93E1, 0x93E2, 0xBAB7, 0x93E3, 0x93E4, 0x93E5, /* 0xD0 */
+ 0x93E6, 0x93E7, 0x93E8, 0x93E9, 0x93EA, 0x93EB, 0x93EC, 0x93ED, /* 0xE0 */
+ 0x93EE, 0x93EF, 0x93F0, 0x93F1, 0x93F2, 0x93F3, 0x93F4, 0x93F5, /* 0xE0 */
+ 0x93F6, 0x93F7, 0x93F8, 0x93F9, 0xBAB8, 0xBAB9, 0xBABA, 0x93FA, /* 0xF0 */
+ 0xBABB, 0x93FB, 0x93FC, 0x93FD, 0xBABC, 0x93FE, 0x9441, 0x9442 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_BD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9443, 0x9444, 0x9445, 0x9446, 0xBABD, 0xBABE, 0x9447, 0xBABF, /* 0x00 */
+ 0x9448, 0xBAC0, 0x9449, 0x944A, 0x944B, 0x944C, 0x944D, 0x944E, /* 0x00 */
+ 0xBAC1, 0x944F, 0x9450, 0x9451, 0xBAC2, 0x9452, 0x9453, 0x9454, /* 0x10 */
+ 0x9455, 0x9456, 0x9457, 0x9458, 0x9459, 0x945A, 0x9461, 0x9462, /* 0x10 */
+ 0x9463, 0x9464, 0x9465, 0x9466, 0xBAC3, 0x9467, 0x9468, 0x9469, /* 0x20 */
+ 0x946A, 0x946B, 0x946C, 0x946D, 0xBAC4, 0x946E, 0x946F, 0x9470, /* 0x20 */
+ 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, 0x9478, /* 0x30 */
+ 0x9479, 0x947A, 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, /* 0x30 */
+ 0xBAC5, 0x9487, 0x9488, 0x9489, 0x948A, 0x948B, 0x948C, 0x948D, /* 0x40 */
+ 0xBAC6, 0xBAC7, 0x948E, 0x948F, 0xBAC8, 0x9490, 0x9491, 0x9492, /* 0x40 */
+ 0xBAC9, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, 0x9499, /* 0x50 */
+ 0xBACA, 0xBACB, 0x949A, 0x949B, 0x949C, 0x949D, 0x949E, 0x949F, /* 0x50 */
+ 0x94A0, 0x94A1, 0x94A2, 0x94A3, 0xBACC, 0x94A4, 0x94A5, 0x94A6, /* 0x60 */
+ 0xBACD, 0x94A7, 0x94A8, 0x94A9, 0x94AA, 0x94AB, 0x94AC, 0x94AD, /* 0x60 */
+ 0x94AE, 0x94AF, 0x94B0, 0x94B1, 0x94B2, 0x94B3, 0x94B4, 0x94B5, /* 0x70 */
+ 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC, 0x94BD, /* 0x70 */
+ 0xBACE, 0xBACF, 0x94BE, 0x94BF, 0xBAD0, 0x94C0, 0x94C1, 0xBAD1, /* 0x80 */
+ 0xBAD2, 0xBAD3, 0xBAD4, 0x94C2, 0x94C3, 0x94C4, 0x94C5, 0x94C6, /* 0x80 */
+ 0xBAD5, 0xBAD6, 0x94C7, 0xBAD7, 0x94C8, 0xBAD8, 0x94C9, 0x94CA, /* 0x90 */
+ 0x94CB, 0xBAD9, 0xBADA, 0x94CC, 0xBADB, 0x94CD, 0x94CE, 0x94CF, /* 0x90 */
+ 0x94D0, 0x94D1, 0x94D2, 0x94D3, 0xBADC, 0x94D4, 0x94D5, 0x94D6, /* 0xA0 */
+ 0x94D7, 0x94D8, 0x94D9, 0x94DA, 0x94DB, 0x94DC, 0x94DD, 0x94DE, /* 0xA0 */
+ 0xBADD, 0x94DF, 0x94E0, 0x94E1, 0x94E2, 0x94E3, 0x94E4, 0x94E5, /* 0xB0 */
+ 0xBADE, 0x94E6, 0x94E7, 0x94E8, 0x94E9, 0x94EA, 0x94EB, 0x94EC, /* 0xB0 */
+ 0x94ED, 0x94EE, 0x94EF, 0x94F0, 0x94F1, 0x94F2, 0x94F3, 0x94F4, /* 0xC0 */
+ 0x94F5, 0x94F6, 0x94F7, 0x94F8, 0x94F9, 0x94FA, 0x94FB, 0x94FC, /* 0xC0 */
+ 0x94FD, 0x94FE, 0x9541, 0x9542, 0xBADF, 0xBAE0, 0x9543, 0x9544, /* 0xD0 */
+ 0xBAE1, 0x9545, 0x9546, 0x9547, 0xBAE2, 0x9548, 0x9549, 0x954A, /* 0xD0 */
+ 0x954B, 0x954C, 0x954D, 0x954E, 0x954F, 0x9550, 0x9551, 0x9552, /* 0xE0 */
+ 0x9553, 0xBAE3, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559, /* 0xE0 */
+ 0xBAE4, 0x955A, 0x9561, 0x9562, 0xBAE5, 0x9563, 0x9564, 0x9565, /* 0xF0 */
+ 0xBAE6, 0x9566, 0x9567, 0x9568, 0x9569, 0x956A, 0x956B, 0x956C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_BE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBAE7, 0x956D, 0x956E, 0xBAE8, 0x956F, 0xBAE9, 0x9570, 0x9571, /* 0x00 */
+ 0x9572, 0x9573, 0x9574, 0x9575, 0xBAEA, 0xBAEB, 0x9576, 0x9577, /* 0x00 */
+ 0xBAEC, 0x9578, 0x9579, 0x957A, 0xBAED, 0x9581, 0x9582, 0x9583, /* 0x10 */
+ 0x9584, 0x9585, 0x9586, 0x9587, 0xBAEE, 0xBAEF, 0x9588, 0xBAF0, /* 0x10 */
+ 0x9589, 0x958A, 0x958B, 0x958C, 0x958D, 0x958E, 0x958F, 0x9590, /* 0x20 */
+ 0x9591, 0x9592, 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, /* 0x20 */
+ 0x9599, 0x959A, 0x959B, 0x959C, 0x959D, 0x959E, 0x959F, 0x95A0, /* 0x30 */
+ 0x95A1, 0x95A2, 0x95A3, 0x95A4, 0x95A5, 0x95A6, 0x95A7, 0x95A8, /* 0x30 */
+ 0x95A9, 0x95AA, 0x95AB, 0x95AC, 0xBAF1, 0xBAF2, 0x95AD, 0x95AE, /* 0x40 */
+ 0xBAF3, 0x95AF, 0x95B0, 0x95B1, 0xBAF4, 0x95B2, 0xBAF5, 0x95B3, /* 0x40 */
+ 0x95B4, 0x95B5, 0x95B6, 0x95B7, 0xBAF6, 0xBAF7, 0x95B8, 0xBAF8, /* 0x50 */
+ 0x95B9, 0xBAF9, 0xBAFA, 0xBAFB, 0x95BA, 0x95BB, 0x95BC, 0x95BD, /* 0x50 */
+ 0xBAFC, 0xBAFD, 0x95BE, 0x95BF, 0xBAFE, 0x95C0, 0x95C1, 0x95C2, /* 0x60 */
+ 0xBBA1, 0x95C3, 0xBBA2, 0x95C4, 0x95C5, 0x95C6, 0x95C7, 0x95C8, /* 0x60 */
+ 0xBBA3, 0xBBA4, 0x95C9, 0xBBA5, 0xBBA6, 0xBBA7, 0x95CA, 0x95CB, /* 0x70 */
+ 0x95CC, 0x95CD, 0x95CE, 0xBBA8, 0xBBA9, 0xBBAA, 0x95CF, 0x95D0, /* 0x70 */
+ 0xBBAB, 0x95D1, 0x95D2, 0x95D3, 0xBBAC, 0x95D4, 0x95D5, 0x95D6, /* 0x80 */
+ 0x95D7, 0x95D8, 0x95D9, 0x95DA, 0xBBAD, 0xBBAE, 0x95DB, 0xBBAF, /* 0x80 */
+ 0xBBB0, 0xBBB1, 0x95DC, 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E1, /* 0x90 */
+ 0xBBB2, 0xBBB3, 0x95E2, 0x95E3, 0x95E4, 0x95E5, 0x95E6, 0x95E7, /* 0x90 */
+ 0x95E8, 0x95E9, 0x95EA, 0x95EB, 0x95EC, 0x95ED, 0x95EE, 0x95EF, /* 0xA0 */
+ 0xBBB4, 0x95F0, 0x95F1, 0x95F2, 0x95F3, 0x95F4, 0x95F5, 0x95F6, /* 0xA0 */
+ 0x95F7, 0x95F8, 0x95F9, 0x95FA, 0x95FB, 0x95FC, 0x95FD, 0x95FE, /* 0xB0 */
+ 0x9641, 0x9642, 0x9643, 0x9644, 0x9645, 0x9646, 0x9647, 0x9648, /* 0xB0 */
+ 0x9649, 0x964A, 0x964B, 0x964C, 0x964D, 0x964E, 0x964F, 0x9650, /* 0xC0 */
+ 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, /* 0xC0 */
+ 0xBBB5, 0xBBB6, 0x9659, 0x965A, 0xBBB7, 0x9661, 0x9662, 0xBBB8, /* 0xD0 */
+ 0xBBB9, 0x9663, 0x9664, 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, /* 0xD0 */
+ 0xBBBA, 0x966A, 0x966B, 0xBBBB, 0xBBBC, 0xBBBD, 0x966C, 0x966D, /* 0xE0 */
+ 0x966E, 0x966F, 0x9670, 0x9671, 0xBBBE, 0x9672, 0x9673, 0x9674, /* 0xE0 */
+ 0x9675, 0x9676, 0x9677, 0x9678, 0x9679, 0x967A, 0x9681, 0x9682, /* 0xF0 */
+ 0x9683, 0x9684, 0x9685, 0x9686, 0x9687, 0x9688, 0x9689, 0x968A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_BF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x968B, 0xBBBF, 0x968C, 0x968D, 0x968E, 0x968F, 0x9690, 0x9691, /* 0x00 */
+ 0xBBC0, 0xBBC1, 0x9692, 0x9693, 0x9694, 0x9695, 0x9696, 0x9697, /* 0x00 */
+ 0x9698, 0x9699, 0x969A, 0x969B, 0x969C, 0x969D, 0x969E, 0x969F, /* 0x10 */
+ 0xBBC2, 0xBBC3, 0x96A0, 0xBBC4, 0xBBC5, 0xBBC6, 0x96A1, 0x96A2, /* 0x10 */
+ 0x96A3, 0x96A4, 0x96A5, 0x96A6, 0x96A7, 0x96A8, 0x96A9, 0x96AA, /* 0x20 */
+ 0x96AB, 0x96AC, 0x96AD, 0x96AE, 0x96AF, 0x96B0, 0x96B1, 0x96B2, /* 0x20 */
+ 0x96B3, 0x96B4, 0x96B5, 0x96B6, 0x96B7, 0x96B8, 0x96B9, 0x96BA, /* 0x30 */
+ 0x96BB, 0x96BC, 0x96BD, 0x96BE, 0x96BF, 0x96C0, 0x96C1, 0x96C2, /* 0x30 */
+ 0xBBC7, 0xBBC8, 0x96C3, 0x96C4, 0xBBC9, 0x96C5, 0x96C6, 0x96C7, /* 0x40 */
+ 0xBBCA, 0x96C8, 0x96C9, 0x96CA, 0x96CB, 0x96CC, 0x96CD, 0x96CE, /* 0x40 */
+ 0xBBCB, 0xBBCC, 0x96CF, 0x96D0, 0x96D1, 0xBBCD, 0x96D2, 0x96D3, /* 0x50 */
+ 0x96D4, 0x96D5, 0x96D6, 0x96D7, 0x96D8, 0x96D9, 0x96DA, 0x96DB, /* 0x50 */
+ 0x96DC, 0x96DD, 0x96DE, 0x96DF, 0x96E0, 0x96E1, 0x96E2, 0x96E3, /* 0x60 */
+ 0x96E4, 0x96E5, 0x96E6, 0x96E7, 0x96E8, 0x96E9, 0x96EA, 0x96EB, /* 0x60 */
+ 0x96EC, 0x96ED, 0x96EE, 0x96EF, 0x96F0, 0x96F1, 0x96F2, 0x96F3, /* 0x70 */
+ 0x96F4, 0x96F5, 0x96F6, 0x96F7, 0x96F8, 0x96F9, 0x96FA, 0x96FB, /* 0x70 */
+ 0x96FC, 0x96FD, 0x96FE, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, /* 0x80 */
+ 0x9746, 0x9747, 0x9748, 0x9749, 0x974A, 0x974B, 0x974C, 0x974D, /* 0x80 */
+ 0x974E, 0x974F, 0x9750, 0x9751, 0xBBCE, 0x9752, 0x9753, 0x9754, /* 0x90 */
+ 0x9755, 0x9756, 0x9757, 0x9758, 0x9759, 0x975A, 0x9761, 0x9762, /* 0x90 */
+ 0x9763, 0x9764, 0x9765, 0x9766, 0x9767, 0x9768, 0x9769, 0x976A, /* 0xA0 */
+ 0x976B, 0x976C, 0x976D, 0x976E, 0x976F, 0x9770, 0x9771, 0x9772, /* 0xA0 */
+ 0xBBCF, 0x9773, 0x9774, 0x9775, 0x9776, 0x9777, 0x9778, 0x9779, /* 0xB0 */
+ 0x977A, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, 0x9787, /* 0xB0 */
+ 0x9788, 0x9789, 0x978A, 0x978B, 0x978C, 0xBBD0, 0x978D, 0x978E, /* 0xC0 */
+ 0x978F, 0x9790, 0x9791, 0x9792, 0xBBD1, 0xBBD2, 0x9793, 0x9794, /* 0xC0 */
+ 0xBBD3, 0x9795, 0x9796, 0x9797, 0xBBD4, 0x9798, 0x9799, 0x979A, /* 0xD0 */
+ 0x979B, 0x979C, 0x979D, 0x979E, 0xBBD5, 0x979F, 0x97A0, 0xBBD6, /* 0xD0 */
+ 0x97A1, 0xBBD7, 0x97A2, 0x97A3, 0x97A4, 0x97A5, 0x97A6, 0x97A7, /* 0xE0 */
+ 0x97A8, 0x97A9, 0x97AA, 0x97AB, 0x97AC, 0x97AD, 0x97AE, 0x97AF, /* 0xE0 */
+ 0x97B0, 0x97B1, 0x97B2, 0x97B3, 0x97B4, 0x97B5, 0x97B6, 0x97B7, /* 0xF0 */
+ 0x97B8, 0x97B9, 0x97BA, 0x97BB, 0x97BC, 0x97BD, 0x97BE, 0x97BF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x97C0, 0x97C1, 0x97C2, 0x97C3, 0x97C4, 0x97C5, 0x97C6, 0x97C7, /* 0x00 */
+ 0x97C8, 0x97C9, 0x97CA, 0x97CB, 0x97CC, 0x97CD, 0x97CE, 0x97CF, /* 0x00 */
+ 0x97D0, 0x97D1, 0x97D2, 0x97D3, 0x97D4, 0x97D5, 0x97D6, 0x97D7, /* 0x10 */
+ 0x97D8, 0x97D9, 0x97DA, 0x97DB, 0x97DC, 0x97DD, 0x97DE, 0x97DF, /* 0x10 */
+ 0x97E0, 0x97E1, 0x97E2, 0x97E3, 0x97E4, 0x97E5, 0x97E6, 0x97E7, /* 0x20 */
+ 0x97E8, 0x97E9, 0x97EA, 0x97EB, 0x97EC, 0x97ED, 0x97EE, 0x97EF, /* 0x20 */
+ 0x97F0, 0x97F1, 0x97F2, 0x97F3, 0x97F4, 0x97F5, 0x97F6, 0x97F7, /* 0x30 */
+ 0x97F8, 0x97F9, 0x97FA, 0x97FB, 0xBBD8, 0x97FC, 0x97FD, 0x97FE, /* 0x30 */
+ 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847, 0x9848, /* 0x40 */
+ 0x9849, 0x984A, 0x984B, 0x984C, 0x984D, 0x984E, 0x984F, 0x9850, /* 0x40 */
+ 0x9851, 0xBBD9, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857, /* 0x50 */
+ 0xBBDA, 0x9858, 0x9859, 0x985A, 0xBBDB, 0x9861, 0x9862, 0x9863, /* 0x50 */
+ 0xBBDC, 0x9864, 0x9865, 0x9866, 0x9867, 0x9868, 0x9869, 0x986A, /* 0x60 */
+ 0xBBDD, 0xBBDE, 0x986B, 0x986C, 0x986D, 0x986E, 0x986F, 0x9870, /* 0x60 */
+ 0x9871, 0x9872, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, 0x9878, /* 0x70 */
+ 0x9879, 0x987A, 0x9881, 0x9882, 0x9883, 0x9884, 0x9885, 0x9886, /* 0x70 */
+ 0x9887, 0x9888, 0x9889, 0x988A, 0x988B, 0x988C, 0x988D, 0x988E, /* 0x80 */
+ 0x988F, 0x9890, 0x9891, 0x9892, 0x9893, 0x9894, 0x9895, 0x9896, /* 0x80 */
+ 0xBBDF, 0xBBE0, 0x9897, 0x9898, 0xBBE1, 0x9899, 0x989A, 0x989B, /* 0x90 */
+ 0xBBE2, 0x989C, 0x989D, 0x989E, 0x989F, 0x98A0, 0x98A1, 0x98A2, /* 0x90 */
+ 0xBBE3, 0xBBE4, 0x98A3, 0xBBE5, 0x98A4, 0xBBE6, 0x98A5, 0x98A6, /* 0xA0 */
+ 0x98A7, 0x98A8, 0x98A9, 0x98AA, 0xBBE7, 0xBBE8, 0x98AB, 0xBBE9, /* 0xA0 */
+ 0xBBEA, 0x98AC, 0x98AD, 0xBBEB, 0xBBEC, 0xBBED, 0xBBEE, 0x98AE, /* 0xB0 */
+ 0x98AF, 0x98B0, 0x98B1, 0x98B2, 0xBBEF, 0xBBF0, 0x98B3, 0xBBF1, /* 0xB0 */
+ 0xBBF2, 0xBBF3, 0x98B4, 0x98B5, 0x98B6, 0xBBF4, 0x98B7, 0x98B8, /* 0xC0 */
+ 0xBBF5, 0xBBF6, 0x98B9, 0x98BA, 0xBBF7, 0x98BB, 0x98BC, 0x98BD, /* 0xC0 */
+ 0xBBF8, 0x98BE, 0x98BF, 0x98C0, 0x98C1, 0x98C2, 0x98C3, 0x98C4, /* 0xD0 */
+ 0xBBF9, 0xBBFA, 0x98C5, 0xBBFB, 0xBBFC, 0xBBFD, 0x98C6, 0x98C7, /* 0xD0 */
+ 0x98C8, 0x98C9, 0x98CA, 0x98CB, 0xBBFE, 0xBCA1, 0x98CC, 0x98CD, /* 0xE0 */
+ 0xBCA2, 0x98CE, 0x98CF, 0x98D0, 0xBCA3, 0x98D1, 0x98D2, 0x98D3, /* 0xE0 */
+ 0x98D4, 0x98D5, 0x98D6, 0x98D7, 0xBCA4, 0xBCA5, 0x98D8, 0xBCA6, /* 0xF0 */
+ 0x98D9, 0xBCA7, 0x98DA, 0x98DB, 0x98DC, 0x98DD, 0x98DE, 0x98DF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBCA8, 0x98E0, 0x98E1, 0x98E2, 0xBCA9, 0x98E3, 0x98E4, 0x98E5, /* 0x00 */
+ 0xBCAA, 0x98E6, 0x98E7, 0x98E8, 0x98E9, 0x98EA, 0x98EB, 0x98EC, /* 0x00 */
+ 0xBCAB, 0x98ED, 0x98EE, 0x98EF, 0x98F0, 0xBCAC, 0x98F1, 0x98F2, /* 0x10 */
+ 0x98F3, 0x98F4, 0x98F5, 0x98F6, 0xBCAD, 0xBCAE, 0xBCAF, 0xBCB0, /* 0x10 */
+ 0xBCB1, 0x98F7, 0x98F8, 0xBCB2, 0xBCB3, 0x98F9, 0xBCB4, 0xBCB5, /* 0x20 */
+ 0x98FA, 0x98FB, 0x98FC, 0x98FD, 0xBCB6, 0xBCB7, 0x98FE, 0xBCB8, /* 0x20 */
+ 0xBCB9, 0xBCBA, 0x9941, 0x9942, 0x9943, 0x9944, 0xBCBB, 0x9945, /* 0x30 */
+ 0xBCBC, 0xBCBD, 0x9946, 0x9947, 0xBCBE, 0x9948, 0x9949, 0x994A, /* 0x30 */
+ 0xBCBF, 0x994B, 0x994C, 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, /* 0x40 */
+ 0xBCC0, 0xBCC1, 0x9952, 0xBCC2, 0xBCC3, 0xBCC4, 0x9953, 0x9954, /* 0x40 */
+ 0x9955, 0x9956, 0x9957, 0x9958, 0xBCC5, 0xBCC6, 0x9959, 0x995A, /* 0x50 */
+ 0xBCC7, 0x9961, 0x9962, 0x9963, 0xBCC8, 0x9964, 0x9965, 0x9966, /* 0x50 */
+ 0x9967, 0x9968, 0x9969, 0x996A, 0xBCC9, 0xBCCA, 0x996B, 0xBCCB, /* 0x60 */
+ 0xBCCC, 0xBCCD, 0x996C, 0x996D, 0x996E, 0x996F, 0x9970, 0x9971, /* 0x60 */
+ 0xBCCE, 0x9972, 0x9973, 0x9974, 0xBCCF, 0x9975, 0x9976, 0x9977, /* 0x70 */
+ 0xBCD0, 0x9978, 0x9979, 0x997A, 0x9981, 0x9982, 0x9983, 0x9984, /* 0x70 */
+ 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0xBCD1, 0x998A, 0x998B, /* 0x80 */
+ 0x998C, 0x998D, 0x998E, 0x998F, 0xBCD2, 0xBCD3, 0xBCD4, 0x9990, /* 0x80 */
+ 0xBCD5, 0x9991, 0x9992, 0x9993, 0xBCD6, 0x9994, 0xBCD7, 0x9995, /* 0x90 */
+ 0x9996, 0x9997, 0x9998, 0x9999, 0xBCD8, 0xBCD9, 0x999A, 0xBCDA, /* 0x90 */
+ 0x999B, 0xBCDB, 0x999C, 0x999D, 0x999E, 0xBCDC, 0x999F, 0x99A0, /* 0xA0 */
+ 0xBCDD, 0xBCDE, 0x99A1, 0x99A2, 0xBCDF, 0x99A3, 0x99A4, 0x99A5, /* 0xA0 */
+ 0xBCE0, 0x99A6, 0x99A7, 0x99A8, 0x99A9, 0x99AA, 0x99AB, 0x99AC, /* 0xB0 */
+ 0x99AD, 0x99AE, 0x99AF, 0x99B0, 0x99B1, 0xBCE1, 0x99B2, 0x99B3, /* 0xB0 */
+ 0x99B4, 0x99B5, 0x99B6, 0x99B7, 0xBCE2, 0x99B8, 0x99B9, 0x99BA, /* 0xC0 */
+ 0xBCE3, 0x99BB, 0x99BC, 0x99BD, 0xBCE4, 0x99BE, 0x99BF, 0x99C0, /* 0xC0 */
+ 0x99C1, 0x99C2, 0x99C3, 0x99C4, 0xBCE5, 0x99C5, 0x99C6, 0xBCE6, /* 0xD0 */
+ 0xBCE7, 0x99C7, 0x99C8, 0x99C9, 0x99CA, 0x99CB, 0x99CC, 0x99CD, /* 0xD0 */
+ 0xBCE8, 0x99CE, 0x99CF, 0x99D0, 0xBCE9, 0x99D1, 0x99D2, 0x99D3, /* 0xE0 */
+ 0xBCEA, 0x99D4, 0x99D5, 0x99D6, 0x99D7, 0x99D8, 0x99D9, 0x99DA, /* 0xE0 */
+ 0xBCEB, 0xBCEC, 0x99DB, 0xBCED, 0x99DC, 0x99DD, 0x99DE, 0x99DF, /* 0xF0 */
+ 0x99E0, 0x99E1, 0x99E2, 0x99E3, 0xBCEE, 0xBCEF, 0x99E4, 0x99E5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBCF0, 0x99E6, 0x99E7, 0x99E8, 0xBCF1, 0x99E9, 0x99EA, 0x99EB, /* 0x00 */
+ 0x99EC, 0x99ED, 0x99EE, 0x99EF, 0xBCF2, 0xBCF3, 0x99F0, 0xBCF4, /* 0x00 */
+ 0x99F1, 0xBCF5, 0x99F2, 0x99F3, 0x99F4, 0x99F5, 0x99F6, 0x99F7, /* 0x10 */
+ 0xBCF6, 0xBCF7, 0x99F8, 0x99F9, 0xBCF8, 0x99FA, 0x99FB, 0xBCF9, /* 0x10 */
+ 0xBCFA, 0x99FC, 0x99FD, 0x99FE, 0x9A41, 0x9A42, 0x9A43, 0x9A44, /* 0x20 */
+ 0xBCFB, 0xBCFC, 0x9A45, 0xBCFD, 0x9A46, 0xBCFE, 0x9A47, 0xBDA1, /* 0x20 */
+ 0x9A48, 0xBDA2, 0xBDA3, 0x9A49, 0xBDA4, 0x9A4A, 0x9A4B, 0x9A4C, /* 0x30 */
+ 0x9A4D, 0x9A4E, 0x9A4F, 0x9A50, 0x9A51, 0x9A52, 0x9A53, 0x9A54, /* 0x30 */
+ 0x9A55, 0x9A56, 0x9A57, 0x9A58, 0x9A59, 0x9A5A, 0x9A61, 0x9A62, /* 0x40 */
+ 0xBDA5, 0x9A63, 0x9A64, 0x9A65, 0x9A66, 0x9A67, 0x9A68, 0x9A69, /* 0x40 */
+ 0xBDA6, 0xBDA7, 0x9A6A, 0x9A6B, 0xBDA8, 0x9A6C, 0x9A6D, 0x9A6E, /* 0x50 */
+ 0xBDA9, 0x9A6F, 0x9A70, 0x9A71, 0x9A72, 0x9A73, 0x9A74, 0x9A75, /* 0x50 */
+ 0xBDAA, 0x9A76, 0x9A77, 0x9A78, 0x9A79, 0xBDAB, 0x9A7A, 0x9A81, /* 0x60 */
+ 0x9A82, 0x9A83, 0x9A84, 0x9A85, 0xBDAC, 0xBDAD, 0x9A86, 0x9A87, /* 0x60 */
+ 0xBDAE, 0x9A88, 0x9A89, 0x9A8A, 0xBDAF, 0x9A8B, 0x9A8C, 0x9A8D, /* 0x70 */
+ 0x9A8E, 0x9A8F, 0x9A90, 0x9A91, 0xBDB0, 0xBDB1, 0x9A92, 0xBDB2, /* 0x70 */
+ 0x9A93, 0xBDB3, 0x9A94, 0x9A95, 0x9A96, 0x9A97, 0x9A98, 0x9A99, /* 0x80 */
+ 0xBDB4, 0xBDB5, 0x9A9A, 0x9A9B, 0x9A9C, 0x9A9D, 0x9A9E, 0x9A9F, /* 0x80 */
+ 0xBDB6, 0x9AA0, 0x9AA1, 0x9AA2, 0x9AA3, 0x9AA4, 0x9AA5, 0x9AA6, /* 0x90 */
+ 0xBDB7, 0x9AA7, 0x9AA8, 0xBDB8, 0x9AA9, 0xBDB9, 0x9AAA, 0x9AAB, /* 0x90 */
+ 0x9AAC, 0x9AAD, 0x9AAE, 0x9AAF, 0xBDBA, 0xBDBB, 0x9AB0, 0x9AB1, /* 0xA0 */
+ 0xBDBC, 0x9AB2, 0x9AB3, 0x9AB4, 0xBDBD, 0xBDBE, 0x9AB5, 0x9AB6, /* 0xA0 */
+ 0x9AB7, 0x9AB8, 0x9AB9, 0x9ABA, 0xBDBF, 0xBDC0, 0x9ABB, 0xBDC1, /* 0xB0 */
+ 0x9ABC, 0xBDC2, 0x9ABD, 0x9ABE, 0x9ABF, 0x9AC0, 0x9AC1, 0x9AC2, /* 0xB0 */
+ 0x9AC3, 0x9AC4, 0x9AC5, 0x9AC6, 0x9AC7, 0x9AC8, 0x9AC9, 0x9ACA, /* 0xC0 */
+ 0x9ACB, 0x9ACC, 0x9ACD, 0x9ACE, 0x9ACF, 0x9AD0, 0x9AD1, 0x9AD2, /* 0xC0 */
+ 0x9AD3, 0x9AD4, 0x9AD5, 0x9AD6, 0x9AD7, 0x9AD8, 0x9AD9, 0x9ADA, /* 0xD0 */
+ 0x9ADB, 0x9ADC, 0x9ADD, 0x9ADE, 0xBDC3, 0xBDC4, 0x9ADF, 0x9AE0, /* 0xD0 */
+ 0xBDC5, 0x9AE1, 0x9AE2, 0xBDC6, 0xBDC7, 0x9AE3, 0x9AE4, 0x9AE5, /* 0xE0 */
+ 0x9AE6, 0x9AE7, 0x9AE8, 0xBDC8, 0xBDC9, 0xBDCA, 0x9AE9, 0xBDCB, /* 0xE0 */
+ 0x9AEA, 0xBDCC, 0x9AEB, 0x9AEC, 0x9AED, 0x9AEE, 0xBDCD, 0x9AEF, /* 0xF0 */
+ 0xBDCE, 0xBDCF, 0x9AF0, 0xBDD0, 0xBDD1, 0x9AF1, 0x9AF2, 0x9AF3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDD2, 0x9AF4, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AF9, 0x9AFA, /* 0x00 */
+ 0xBDD3, 0xBDD4, 0x9AFB, 0x9AFC, 0xBDD5, 0xBDD6, 0x9AFD, 0x9AFE, /* 0x00 */
+ 0x9B41, 0x9B42, 0x9B43, 0xBDD7, 0xBDD8, 0xBDD9, 0x9B44, 0x9B45, /* 0x10 */
+ 0xBDDA, 0x9B46, 0x9B47, 0x9B48, 0xBDDB, 0x9B49, 0x9B4A, 0x9B4B, /* 0x10 */
+ 0x9B4C, 0x9B4D, 0x9B4E, 0x9B4F, 0xBDDC, 0xBDDD, 0x9B50, 0x9B51, /* 0x20 */
+ 0xBDDE, 0xBDDF, 0x9B52, 0x9B53, 0x9B54, 0x9B55, 0x9B56, 0x9B57, /* 0x20 */
+ 0x9B58, 0x9B59, 0x9B5A, 0x9B61, 0x9B62, 0x9B63, 0x9B64, 0x9B65, /* 0x30 */
+ 0x9B66, 0x9B67, 0x9B68, 0x9B69, 0x9B6A, 0x9B6B, 0x9B6C, 0x9B6D, /* 0x30 */
+ 0x9B6E, 0x9B6F, 0x9B70, 0x9B71, 0x9B72, 0xBDE0, 0x9B73, 0x9B74, /* 0x40 */
+ 0x9B75, 0x9B76, 0x9B77, 0x9B78, 0x9B79, 0x9B7A, 0x9B81, 0x9B82, /* 0x40 */
+ 0x9B83, 0x9B84, 0x9B85, 0x9B86, 0x9B87, 0x9B88, 0x9B89, 0x9B8A, /* 0x50 */
+ 0x9B8B, 0x9B8C, 0x9B8D, 0x9B8E, 0x9B8F, 0x9B90, 0x9B91, 0x9B92, /* 0x50 */
+ 0x9B93, 0x9B94, 0x9B95, 0x9B96, 0x9B97, 0x9B98, 0x9B99, 0x9B9A, /* 0x60 */
+ 0xBDE1, 0xBDE2, 0x9B9B, 0x9B9C, 0xBDE3, 0x9B9D, 0x9B9E, 0x9B9F, /* 0x60 */
+ 0xBDE4, 0x9BA0, 0xBDE5, 0x9BA1, 0x9BA2, 0x9BA3, 0x9BA4, 0x9BA5, /* 0x70 */
+ 0xBDE6, 0xBDE7, 0x9BA6, 0x9BA7, 0xBDE8, 0xBDE9, 0x9BA8, 0x9BA9, /* 0x70 */
+ 0x9BAA, 0x9BAB, 0x9BAC, 0x9BAD, 0xBDEA, 0x9BAE, 0x9BAF, 0x9BB0, /* 0x80 */
+ 0xBDEB, 0x9BB1, 0x9BB2, 0x9BB3, 0xBDEC, 0x9BB4, 0x9BB5, 0x9BB6, /* 0x80 */
+ 0x9BB7, 0x9BB8, 0x9BB9, 0x9BBA, 0x9BBB, 0x9BBC, 0x9BBD, 0x9BBE, /* 0x90 */
+ 0x9BBF, 0x9BC0, 0x9BC1, 0x9BC2, 0x9BC3, 0x9BC4, 0x9BC5, 0x9BC6, /* 0x90 */
+ 0x9BC7, 0x9BC8, 0x9BC9, 0x9BCA, 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, /* 0xA0 */
+ 0x9BCF, 0x9BD0, 0x9BD1, 0x9BD2, 0x9BD3, 0x9BD4, 0x9BD5, 0x9BD6, /* 0xA0 */
+ 0x9BD7, 0x9BD8, 0x9BD9, 0x9BDA, 0x9BDB, 0x9BDC, 0x9BDD, 0x9BDE, /* 0xB0 */
+ 0x9BDF, 0x9BE0, 0x9BE1, 0x9BE2, 0x9BE3, 0x9BE4, 0x9BE5, 0x9BE6, /* 0xB0 */
+ 0xBDED, 0x9BE7, 0x9BE8, 0x9BE9, 0x9BEA, 0x9BEB, 0x9BEC, 0x9BED, /* 0xC0 */
+ 0x9BEE, 0x9BEF, 0x9BF0, 0x9BF1, 0x9BF2, 0x9BF3, 0x9BF4, 0x9BF5, /* 0xC0 */
+ 0x9BF6, 0x9BF7, 0x9BF8, 0x9BF9, 0x9BFA, 0x9BFB, 0x9BFC, 0x9BFD, /* 0xD0 */
+ 0xBDEE, 0xBDEF, 0x9BFE, 0x9C41, 0xBDF0, 0x9C42, 0x9C43, 0xBDF1, /* 0xD0 */
+ 0xBDF2, 0x9C44, 0xBDF3, 0x9C45, 0x9C46, 0x9C47, 0x9C48, 0x9C49, /* 0xE0 */
+ 0xBDF4, 0xBDF5, 0x9C4A, 0x9C4B, 0x9C4C, 0xBDF6, 0x9C4D, 0x9C4E, /* 0xE0 */
+ 0x9C4F, 0x9C50, 0x9C51, 0x9C52, 0xBDF7, 0xBDF8, 0x9C53, 0x9C54, /* 0xF0 */
+ 0xBDF9, 0x9C55, 0x9C56, 0x9C57, 0x9C58, 0x9C59, 0x9C5A, 0x9C61 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9C62, 0x9C63, 0x9C64, 0x9C65, 0x9C66, 0x9C67, 0x9C68, 0x9C69, /* 0x00 */
+ 0xBDFA, 0x9C6A, 0x9C6B, 0x9C6C, 0x9C6D, 0x9C6E, 0x9C6F, 0x9C70, /* 0x00 */
+ 0xBDFB, 0x9C71, 0x9C72, 0x9C73, 0x9C74, 0x9C75, 0x9C76, 0x9C77, /* 0x10 */
+ 0x9C78, 0x9C79, 0x9C7A, 0x9C81, 0x9C82, 0x9C83, 0x9C84, 0x9C85, /* 0x10 */
+ 0x9C86, 0x9C87, 0x9C88, 0x9C89, 0xBDFC, 0x9C8A, 0x9C8B, 0x9C8C, /* 0x20 */
+ 0x9C8D, 0x9C8E, 0x9C8F, 0x9C90, 0xBDFD, 0x9C91, 0x9C92, 0x9C93, /* 0x20 */
+ 0xBDFE, 0x9C94, 0x9C95, 0x9C96, 0xBEA1, 0x9C97, 0x9C98, 0x9C99, /* 0x30 */
+ 0x9C9A, 0x9C9B, 0x9C9C, 0x9C9D, 0xBEA2, 0xBEA3, 0x9C9E, 0x9C9F, /* 0x30 */
+ 0x9CA0, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA4, 0x9CA5, 0x9CA6, 0x9CA7, /* 0x40 */
+ 0xBEA4, 0x9CA8, 0x9CA9, 0x9CAA, 0x9CAB, 0x9CAC, 0x9CAD, 0x9CAE, /* 0x40 */
+ 0x9CAF, 0x9CB0, 0x9CB1, 0x9CB2, 0x9CB3, 0x9CB4, 0x9CB5, 0x9CB6, /* 0x50 */
+ 0x9CB7, 0x9CB8, 0x9CB9, 0x9CBA, 0x9CBB, 0x9CBC, 0x9CBD, 0x9CBE, /* 0x50 */
+ 0x9CBF, 0x9CC0, 0x9CC1, 0x9CC2, 0xBEA5, 0xBEA6, 0x9CC3, 0x9CC4, /* 0x60 */
+ 0xBEA7, 0x9CC5, 0x9CC6, 0x9CC7, 0xBEA8, 0x9CC8, 0x9CC9, 0x9CCA, /* 0x60 */
+ 0x9CCB, 0x9CCC, 0x9CCD, 0x9CCE, 0xBEA9, 0xBEAA, 0x9CCF, 0x9CD0, /* 0x70 */
+ 0x9CD1, 0xBEAB, 0x9CD2, 0x9CD3, 0x9CD4, 0x9CD5, 0x9CD6, 0x9CD7, /* 0x70 */
+ 0xBEAC, 0x9CD8, 0x9CD9, 0x9CDA, 0x9CDB, 0x9CDC, 0x9CDD, 0x9CDE, /* 0x80 */
+ 0x9CDF, 0x9CE0, 0x9CE1, 0x9CE2, 0x9CE3, 0x9CE4, 0x9CE5, 0x9CE6, /* 0x80 */
+ 0x9CE7, 0x9CE8, 0x9CE9, 0x9CEA, 0xBEAD, 0x9CEB, 0x9CEC, 0x9CED, /* 0x90 */
+ 0x9CEE, 0x9CEF, 0x9CF0, 0x9CF1, 0xBEAE, 0x9CF2, 0x9CF3, 0x9CF4, /* 0x90 */
+ 0x9CF5, 0x9CF6, 0x9CF7, 0x9CF8, 0x9CF9, 0x9CFA, 0x9CFB, 0x9CFC, /* 0xA0 */
+ 0x9CFD, 0x9CFE, 0x9D41, 0x9D42, 0x9D43, 0x9D44, 0x9D45, 0x9D46, /* 0xA0 */
+ 0x9D47, 0x9D48, 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, /* 0xB0 */
+ 0xBEAF, 0x9D4F, 0x9D50, 0x9D51, 0xBEB0, 0x9D52, 0x9D53, 0x9D54, /* 0xB0 */
+ 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0x9D5A, 0x9D61, 0x9D62, /* 0xC0 */
+ 0x9D63, 0x9D64, 0x9D65, 0x9D66, 0x9D67, 0x9D68, 0x9D69, 0x9D6A, /* 0xC0 */
+ 0x9D6B, 0x9D6C, 0x9D6D, 0x9D6E, 0x9D6F, 0x9D70, 0x9D71, 0x9D72, /* 0xD0 */
+ 0x9D73, 0x9D74, 0x9D75, 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, /* 0xD0 */
+ 0x9D81, 0x9D82, 0x9D83, 0x9D84, 0x9D85, 0x9D86, 0x9D87, 0x9D88, /* 0xE0 */
+ 0x9D89, 0xBEB1, 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, /* 0xE0 */
+ 0xBEB2, 0xBEB3, 0x9D90, 0x9D91, 0xBEB4, 0x9D92, 0x9D93, 0x9D94, /* 0xF0 */
+ 0xBEB5, 0x9D95, 0xBEB6, 0x9D96, 0x9D97, 0x9D98, 0x9D99, 0xBEB7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBEB8, 0xBEB9, 0x9D9A, 0x9D9B, 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, /* 0x00 */
+ 0x9DA0, 0x9DA1, 0x9DA2, 0x9DA3, 0xBEBA, 0x9DA4, 0x9DA5, 0x9DA6, /* 0x00 */
+ 0xBEBB, 0x9DA7, 0x9DA8, 0x9DA9, 0xBEBC, 0x9DAA, 0x9DAB, 0x9DAC, /* 0x10 */
+ 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0xBEBD, 0x9DB1, 0x9DB2, 0x9DB3, /* 0x10 */
+ 0x9DB4, 0x9DB5, 0x9DB6, 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBB, /* 0x20 */
+ 0xBEBE, 0xBEBF, 0x9DBC, 0x9DBD, 0xBEC0, 0x9DBE, 0x9DBF, 0x9DC0, /* 0x20 */
+ 0xBEC1, 0x9DC1, 0x9DC2, 0x9DC3, 0x9DC4, 0x9DC5, 0x9DC6, 0x9DC7, /* 0x30 */
+ 0xBEC2, 0xBEC3, 0x9DC8, 0xBEC4, 0x9DC9, 0xBEC5, 0x9DCA, 0x9DCB, /* 0x30 */
+ 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0xBEC6, 0xBEC7, 0x9DD0, 0x9DD1, /* 0x40 */
+ 0xBEC8, 0xBEC9, 0xBECA, 0x9DD2, 0xBECB, 0xBECC, 0xBECD, 0x9DD3, /* 0x40 */
+ 0x9DD4, 0x9DD5, 0x9DD6, 0xBECE, 0xBECF, 0xBED0, 0x9DD7, 0xBED1, /* 0x50 */
+ 0xBED2, 0xBED3, 0x9DD8, 0x9DD9, 0x9DDA, 0xBED4, 0xBED5, 0x9DDB, /* 0x50 */
+ 0xBED6, 0xBED7, 0x9DDC, 0x9DDD, 0xBED8, 0x9DDE, 0x9DDF, 0x9DE0, /* 0x60 */
+ 0xBED9, 0x9DE1, 0x9DE2, 0x9DE3, 0x9DE4, 0x9DE5, 0x9DE6, 0x9DE7, /* 0x60 */
+ 0xBEDA, 0xBEDB, 0x9DE8, 0xBEDC, 0xBEDD, 0xBEDE, 0x9DE9, 0x9DEA, /* 0x70 */
+ 0x9DEB, 0x9DEC, 0x9DED, 0x9DEE, 0xBEDF, 0xBEE0, 0x9DEF, 0x9DF0, /* 0x70 */
+ 0xBEE1, 0x9DF1, 0x9DF2, 0x9DF3, 0xBEE2, 0x9DF4, 0x9DF5, 0xBEE3, /* 0x80 */
+ 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, 0xBEE4, 0xBEE5, 0x9DFA, 0xBEE6, /* 0x80 */
+ 0x9DFB, 0xBEE7, 0x9DFC, 0x9DFD, 0x9DFE, 0xBEE8, 0x9E41, 0xBEE9, /* 0x90 */
+ 0xBEEA, 0x9E42, 0x9E43, 0x9E44, 0xBEEB, 0x9E45, 0x9E46, 0x9E47, /* 0x90 */
+ 0xBEEC, 0x9E48, 0x9E49, 0x9E4A, 0x9E4B, 0x9E4C, 0x9E4D, 0x9E4E, /* 0xA0 */
+ 0x9E4F, 0xBEED, 0x9E50, 0x9E51, 0x9E52, 0x9E53, 0x9E54, 0x9E55, /* 0xA0 */
+ 0x9E56, 0x9E57, 0x9E58, 0x9E59, 0xBEEE, 0xBEEF, 0x9E5A, 0x9E61, /* 0xB0 */
+ 0xBEF0, 0xBEF1, 0x9E62, 0xBEF2, 0xBEF3, 0xBEF4, 0xBEF5, 0x9E63, /* 0xB0 */
+ 0x9E64, 0x9E65, 0x9E66, 0x9E67, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, /* 0xC0 */
+ 0xBEFA, 0xBEFB, 0xBEFC, 0x9E68, 0xBEFD, 0x9E69, 0xBEFE, 0x9E6A, /* 0xC0 */
+ 0xBFA1, 0xBFA2, 0x9E6B, 0x9E6C, 0xBFA3, 0x9E6D, 0x9E6E, 0x9E6F, /* 0xD0 */
+ 0xBFA4, 0x9E70, 0x9E71, 0x9E72, 0x9E73, 0x9E74, 0x9E75, 0x9E76, /* 0xD0 */
+ 0xBFA5, 0xBFA6, 0x9E77, 0xBFA7, 0x9E78, 0xBFA8, 0x9E79, 0x9E7A, /* 0xE0 */
+ 0x9E81, 0x9E82, 0x9E83, 0x9E84, 0xBFA9, 0xBFAA, 0xBFAB, 0x9E85, /* 0xE0 */
+ 0xBFAC, 0x9E86, 0x9E87, 0x9E88, 0xBFAD, 0x9E89, 0xBFAE, 0xBFAF, /* 0xF0 */
+ 0x9E8A, 0x9E8B, 0x9E8C, 0x9E8D, 0xBFB0, 0xBFB1, 0xBFB2, 0xBFB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBFB4, 0xBFB5, 0x9E8E, 0x9E8F, 0x9E90, 0xBFB6, 0xBFB7, 0xBFB8, /* 0x00 */
+ 0xBFB9, 0x9E91, 0x9E92, 0x9E93, 0xBFBA, 0x9E94, 0x9E95, 0x9E96, /* 0x00 */
+ 0xBFBB, 0x9E97, 0x9E98, 0x9E99, 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9D, /* 0x10 */
+ 0xBFBC, 0xBFBD, 0x9E9E, 0xBFBE, 0xBFBF, 0x9E9F, 0x9EA0, 0x9EA1, /* 0x10 */
+ 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA5, 0xBFC0, 0xBFC1, 0x9EA6, 0x9EA7, /* 0x20 */
+ 0xBFC2, 0x9EA8, 0x9EA9, 0x9EAA, 0xBFC3, 0xBFC4, 0xBFC5, 0x9EAB, /* 0x20 */
+ 0xBFC6, 0x9EAC, 0x9EAD, 0xBFC7, 0xBFC8, 0xBFC9, 0x9EAE, 0xBFCA, /* 0x30 */
+ 0x9EAF, 0xBFCB, 0x9EB0, 0xBFCC, 0x9EB1, 0x9EB2, 0x9EB3, 0x9EB4, /* 0x30 */
+ 0xBFCD, 0xBFCE, 0x9EB5, 0x9EB6, 0xBFCF, 0x9EB7, 0x9EB8, 0x9EB9, /* 0x40 */
+ 0xBFD0, 0x9EBA, 0x9EBB, 0x9EBC, 0x9EBD, 0x9EBE, 0x9EBF, 0x9EC0, /* 0x40 */
+ 0xBFD1, 0xBFD2, 0x9EC1, 0xBFD3, 0xBFD4, 0xBFD5, 0x9EC2, 0x9EC3, /* 0x50 */
+ 0x9EC4, 0x9EC5, 0x9EC6, 0x9EC7, 0xBFD6, 0xBFD7, 0x9EC8, 0x9EC9, /* 0x50 */
+ 0xBFD8, 0x9ECA, 0x9ECB, 0x9ECC, 0x9ECD, 0x9ECE, 0x9ECF, 0x9ED0, /* 0x60 */
+ 0x9ED1, 0x9ED2, 0x9ED3, 0x9ED4, 0xBFD9, 0x9ED5, 0x9ED6, 0xBFDA, /* 0x60 */
+ 0x9ED7, 0xBFDB, 0x9ED8, 0x9ED9, 0x9EDA, 0x9EDB, 0x9EDC, 0x9EDD, /* 0x70 */
+ 0xBFDC, 0xBFDD, 0x9EDE, 0x9EDF, 0xBFDE, 0x9EE0, 0x9EE1, 0x9EE2, /* 0x70 */
+ 0xBFDF, 0x9EE3, 0x9EE4, 0x9EE5, 0x9EE6, 0x9EE7, 0x9EE8, 0x9EE9, /* 0x80 */
+ 0xBFE0, 0xBFE1, 0x9EEA, 0xBFE2, 0x9EEB, 0xBFE3, 0x9EEC, 0x9EED, /* 0x80 */
+ 0x9EEE, 0x9EEF, 0x9EF0, 0x9EF1, 0xBFE4, 0xBFE5, 0x9EF2, 0x9EF3, /* 0x90 */
+ 0xBFE6, 0x9EF4, 0x9EF5, 0x9EF6, 0xBFE7, 0x9EF7, 0x9EF8, 0x9EF9, /* 0x90 */
+ 0x9EFA, 0x9EFB, 0x9EFC, 0x9EFD, 0xBFE8, 0xBFE9, 0x9EFE, 0xBFEA, /* 0xA0 */
+ 0x9F41, 0xBFEB, 0x9F42, 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0x9F47, /* 0xA0 */
+ 0xBFEC, 0xBFED, 0x9F48, 0x9F49, 0xBFEE, 0x9F4A, 0x9F4B, 0x9F4C, /* 0xB0 */
+ 0xBFEF, 0xBFF0, 0xBFF1, 0x9F4D, 0x9F4E, 0x9F4F, 0x9F50, 0x9F51, /* 0xB0 */
+ 0xBFF2, 0xBFF3, 0x9F52, 0xBFF4, 0x9F53, 0xBFF5, 0x9F54, 0x9F55, /* 0xC0 */
+ 0x9F56, 0x9F57, 0x9F58, 0x9F59, 0xBFF6, 0xBFF7, 0x9F5A, 0x9F61, /* 0xC0 */
+ 0xBFF8, 0x9F62, 0x9F63, 0x9F64, 0xBFF9, 0x9F65, 0x9F66, 0x9F67, /* 0xD0 */
+ 0x9F68, 0x9F69, 0x9F6A, 0x9F6B, 0xBFFA, 0xBFFB, 0x9F6C, 0x9F6D, /* 0xD0 */
+ 0xBFFC, 0xBFFD, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F72, 0x9F73, /* 0xE0 */
+ 0xBFFE, 0xC0A1, 0x9F74, 0x9F75, 0xC0A2, 0x9F76, 0x9F77, 0x9F78, /* 0xE0 */
+ 0xC0A3, 0x9F79, 0x9F7A, 0x9F81, 0x9F82, 0x9F83, 0x9F84, 0x9F85, /* 0xF0 */
+ 0xC0A4, 0xC0A5, 0x9F86, 0x9F87, 0x9F88, 0xC0A6, 0x9F89, 0x9F8A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9F8B, 0x9F8C, 0x9F8D, 0x9F8E, 0xC0A7, 0xC0A8, 0x9F8F, 0x9F90, /* 0x00 */
+ 0xC0A9, 0x9F91, 0x9F92, 0x9F93, 0xC0AA, 0x9F94, 0x9F95, 0x9F96, /* 0x00 */
+ 0x9F97, 0x9F98, 0x9F99, 0x9F9A, 0xC0AB, 0xC0AC, 0x9F9B, 0xC0AD, /* 0x10 */
+ 0x9F9C, 0xC0AE, 0x9F9D, 0x9F9E, 0x9F9F, 0x9FA0, 0x9FA1, 0x9FA2, /* 0x10 */
+ 0xC0AF, 0xC0B0, 0x9FA3, 0x9FA4, 0xC0B1, 0x9FA5, 0x9FA6, 0x9FA7, /* 0x20 */
+ 0xC0B2, 0x9FA8, 0x9FA9, 0x9FAA, 0x9FAB, 0x9FAC, 0x9FAD, 0x9FAE, /* 0x20 */
+ 0xC0B3, 0xC0B4, 0x9FAF, 0xC0B5, 0x9FB0, 0xC0B6, 0x9FB1, 0xC0B7, /* 0x30 */
+ 0x9FB2, 0x9FB3, 0x9FB4, 0x9FB5, 0xC0B8, 0xC0B9, 0x9FB6, 0x9FB7, /* 0x30 */
+ 0xC0BA, 0x9FB8, 0x9FB9, 0x9FBA, 0xC0BB, 0x9FBB, 0x9FBC, 0x9FBD, /* 0x40 */
+ 0x9FBE, 0x9FBF, 0xC0BC, 0x9FC0, 0xC0BD, 0xC0BE, 0x9FC1, 0xC0BF, /* 0x40 */
+ 0x9FC2, 0xC0C0, 0xC0C1, 0xC0C2, 0xC0C3, 0xC0C4, 0xC0C5, 0xC0C6, /* 0x50 */
+ 0xC0C7, 0x9FC3, 0x9FC4, 0x9FC5, 0xC0C8, 0x9FC6, 0x9FC7, 0x9FC8, /* 0x50 */
+ 0xC0C9, 0x9FC9, 0x9FCA, 0x9FCB, 0x9FCC, 0x9FCD, 0x9FCE, 0x9FCF, /* 0x60 */
+ 0xC0CA, 0x9FD0, 0x9FD1, 0xC0CB, 0x9FD2, 0x9FD3, 0x9FD4, 0x9FD5, /* 0x60 */
+ 0x9FD6, 0x9FD7, 0x9FD8, 0x9FD9, 0xC0CC, 0xC0CD, 0x9FDA, 0x9FDB, /* 0x70 */
+ 0xC0CE, 0x9FDC, 0x9FDD, 0x9FDE, 0xC0CF, 0xC0D0, 0xC0D1, 0x9FDF, /* 0x70 */
+ 0x9FE0, 0x9FE1, 0x9FE2, 0xC0D2, 0xC0D3, 0xC0D4, 0x9FE3, 0xC0D5, /* 0x80 */
+ 0xC0D6, 0xC0D7, 0xC0D8, 0x9FE4, 0x9FE5, 0x9FE6, 0xC0D9, 0x9FE7, /* 0x80 */
+ 0xC0DA, 0xC0DB, 0x9FE8, 0x9FE9, 0xC0DC, 0x9FEA, 0xC0DD, 0xC0DE, /* 0x90 */
+ 0xC0DF, 0x9FEB, 0xC0E0, 0x9FEC, 0x9FED, 0x9FEE, 0x9FEF, 0x9FF0, /* 0x90 */
+ 0xC0E1, 0xC0E2, 0x9FF1, 0xC0E3, 0xC0E4, 0xC0E5, 0xC0E6, 0x9FF2, /* 0xA0 */
+ 0x9FF3, 0x9FF4, 0x9FF5, 0x9FF6, 0xC0E7, 0xC0E8, 0x9FF7, 0x9FF8, /* 0xA0 */
+ 0xC0E9, 0x9FF9, 0x9FFA, 0x9FFB, 0xC0EA, 0x9FFC, 0x9FFD, 0x9FFE, /* 0xB0 */
+ 0xA041, 0xA042, 0xA043, 0xA044, 0xC0EB, 0xC0EC, 0xA045, 0xC0ED, /* 0xB0 */
+ 0xC0EE, 0xC0EF, 0xA046, 0xA047, 0xA048, 0xA049, 0xA04A, 0xA04B, /* 0xC0 */
+ 0xC0F0, 0xC0F1, 0xA04C, 0xA04D, 0xC0F2, 0xA04E, 0xC0F3, 0xA04F, /* 0xC0 */
+ 0xC0F4, 0xA050, 0xA051, 0xA052, 0xA053, 0xA054, 0xA055, 0xA056, /* 0xD0 */
+ 0xC0F5, 0xA057, 0xA058, 0xA059, 0xA05A, 0xC0F6, 0xA061, 0xA062, /* 0xD0 */
+ 0xA063, 0xA064, 0xA065, 0xA066, 0xC0F7, 0xA067, 0xA068, 0xA069, /* 0xE0 */
+ 0xC0F8, 0xA06A, 0xA06B, 0xA06C, 0xC0F9, 0xA06D, 0xA06E, 0xA06F, /* 0xE0 */
+ 0xA070, 0xA071, 0xA072, 0xA073, 0xA074, 0xA075, 0xA076, 0xA077, /* 0xF0 */
+ 0xA078, 0xA079, 0xA07A, 0xA081, 0xA082, 0xA083, 0xA084, 0xA085 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC0FA, 0xC0FB, 0xA086, 0xA087, 0xC0FC, 0xA088, 0xA089, 0xA08A, /* 0x00 */
+ 0xC0FD, 0xA08B, 0xC0FE, 0xA08C, 0xA08D, 0xA08E, 0xA08F, 0xA090, /* 0x00 */
+ 0xC1A1, 0xC1A2, 0xA091, 0xC1A3, 0xA092, 0xC1A4, 0xC1A5, 0xA093, /* 0x10 */
+ 0xA094, 0xA095, 0xA096, 0xA097, 0xC1A6, 0xC1A7, 0xA098, 0xA099, /* 0x10 */
+ 0xC1A8, 0xA09A, 0xA09B, 0xA09C, 0xC1A9, 0xA09D, 0xA09E, 0xA09F, /* 0x20 */
+ 0xA0A0, 0xA0A1, 0xA0A2, 0xA0A3, 0xC1AA, 0xC1AB, 0xA0A4, 0xC1AC, /* 0x20 */
+ 0xA0A5, 0xC1AD, 0xA0A6, 0xA0A7, 0xA0A8, 0xA0A9, 0xA0AA, 0xA0AB, /* 0x30 */
+ 0xC1AE, 0xA0AC, 0xA0AD, 0xA0AE, 0xC1AF, 0xA0AF, 0xA0B0, 0xA0B1, /* 0x30 */
+ 0xC1B0, 0xA0B2, 0xA0B3, 0xA0B4, 0xA0B5, 0xA0B6, 0xA0B7, 0xA0B8, /* 0x40 */
+ 0xC1B1, 0xC1B2, 0xA0B9, 0xA0BA, 0xC1B3, 0xC1B4, 0xA0BB, 0xA0BC, /* 0x40 */
+ 0xA0BD, 0xA0BE, 0xA0BF, 0xA0C0, 0xC1B5, 0xA0C1, 0xA0C2, 0xA0C3, /* 0x50 */
+ 0xA0C4, 0xA0C5, 0xA0C6, 0xA0C7, 0xA0C8, 0xA0C9, 0xA0CA, 0xA0CB, /* 0x50 */
+ 0xA0CC, 0xA0CD, 0xA0CE, 0xA0CF, 0xA0D0, 0xA0D1, 0xA0D2, 0xA0D3, /* 0x60 */
+ 0xA0D4, 0xA0D5, 0xA0D6, 0xA0D7, 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, /* 0x60 */
+ 0xC1B6, 0xC1B7, 0xA0DC, 0xA0DD, 0xC1B8, 0xA0DE, 0xA0DF, 0xA0E0, /* 0x70 */
+ 0xC1B9, 0xA0E1, 0xC1BA, 0xA0E2, 0xA0E3, 0xA0E4, 0xA0E5, 0xA0E6, /* 0x70 */
+ 0xC1BB, 0xC1BC, 0xA0E7, 0xC1BD, 0xA0E8, 0xC1BE, 0xC1BF, 0xC1C0, /* 0x80 */
+ 0xA0E9, 0xA0EA, 0xA0EB, 0xC1C1, 0xC1C2, 0xC1C3, 0xA0EC, 0xA0ED, /* 0x80 */
+ 0xA0EE, 0xA0EF, 0xA0F0, 0xA0F1, 0xC1C4, 0xA0F2, 0xA0F3, 0xA0F4, /* 0x90 */
+ 0xA0F5, 0xA0F6, 0xA0F7, 0xA0F8, 0xA0F9, 0xC1C5, 0xA0FA, 0xC1C6, /* 0x90 */
+ 0xA0FB, 0xC1C7, 0xA0FC, 0xA0FD, 0xA0FE, 0xA141, 0xA142, 0xA143, /* 0xA0 */
+ 0xC1C8, 0xA144, 0xA145, 0xA146, 0xA147, 0xA148, 0xA149, 0xA14A, /* 0xA0 */
+ 0xA14B, 0xA14C, 0xA14D, 0xA14E, 0xA14F, 0xA150, 0xA151, 0xA152, /* 0xB0 */
+ 0xA153, 0xA154, 0xA155, 0xA156, 0xC1C9, 0xC1CA, 0xA157, 0xA158, /* 0xB0 */
+ 0xA159, 0xA15A, 0xA161, 0xA162, 0xC1CB, 0xA163, 0xA164, 0xA165, /* 0xC0 */
+ 0xC1CC, 0xA166, 0xA167, 0xA168, 0xC1CD, 0xA169, 0xA16A, 0xA16B, /* 0xC0 */
+ 0xA16C, 0xA16D, 0xA16E, 0xA16F, 0xC1CE, 0xC1CF, 0xA170, 0xC1D0, /* 0xD0 */
+ 0xA171, 0xC1D1, 0xA172, 0xA173, 0xA174, 0xA175, 0xA176, 0xA177, /* 0xD0 */
+ 0xC1D2, 0xC1D3, 0xA178, 0xA179, 0xC1D4, 0xA17A, 0xA181, 0xA182, /* 0xE0 */
+ 0xA183, 0xA184, 0xA185, 0xA186, 0xA187, 0xA188, 0xA189, 0xA18A, /* 0xE0 */
+ 0xA18B, 0xA18C, 0xA18D, 0xA18E, 0xA18F, 0xC1D5, 0xA190, 0xA191, /* 0xF0 */
+ 0xA192, 0xA193, 0xA194, 0xA195, 0xC1D6, 0xC1D7, 0xA196, 0xA197 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_C9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC1D8, 0xA198, 0xA199, 0xA19A, 0xC1D9, 0xC1DA, 0xC1DB, 0xA19B, /* 0x00 */
+ 0xA19C, 0xA19D, 0xA19E, 0xA19F, 0xC1DC, 0xC1DD, 0xA1A0, 0xC1DE, /* 0x00 */
+ 0xA241, 0xC1DF, 0xA242, 0xA243, 0xA244, 0xA245, 0xA246, 0xA247, /* 0x10 */
+ 0xC1E0, 0xA248, 0xA249, 0xA24A, 0xA24B, 0xA24C, 0xA24D, 0xA24E, /* 0x10 */
+ 0xA24F, 0xA250, 0xA251, 0xA252, 0xA253, 0xA254, 0xA255, 0xA256, /* 0x20 */
+ 0xA257, 0xA258, 0xA259, 0xA25A, 0xC1E1, 0xA261, 0xA262, 0xA263, /* 0x20 */
+ 0xA264, 0xA265, 0xA266, 0xA267, 0xC1E2, 0xA268, 0xA269, 0xA26A, /* 0x30 */
+ 0xA26B, 0xA26C, 0xA26D, 0xA26E, 0xA26F, 0xA270, 0xA271, 0xA272, /* 0x30 */
+ 0xA273, 0xA274, 0xA275, 0xA276, 0xA277, 0xA278, 0xA279, 0xA27A, /* 0x40 */
+ 0xA281, 0xA282, 0xA283, 0xA284, 0xA285, 0xA286, 0xA287, 0xA288, /* 0x40 */
+ 0xC1E3, 0xC1E4, 0xA289, 0xA28A, 0xC1E5, 0xA28B, 0xA28C, 0xA28D, /* 0x50 */
+ 0xC1E6, 0xA28E, 0xA28F, 0xA290, 0xA291, 0xA292, 0xA293, 0xA294, /* 0x50 */
+ 0xC1E7, 0xC1E8, 0xA295, 0xC1E9, 0xA296, 0xA297, 0xA298, 0xA299, /* 0x60 */
+ 0xA29A, 0xA29B, 0xA29C, 0xA29D, 0xC1EA, 0xA29E, 0xA29F, 0xA2A0, /* 0x60 */
+ 0xC1EB, 0xA341, 0xA342, 0xA343, 0xC1EC, 0xA344, 0xA345, 0xA346, /* 0x70 */
+ 0xA347, 0xA348, 0xA349, 0xA34A, 0xC1ED, 0xA34B, 0xA34C, 0xA34D, /* 0x70 */
+ 0xA34E, 0xA34F, 0xA350, 0xA351, 0xA352, 0xA353, 0xA354, 0xA355, /* 0x80 */
+ 0xC1EE, 0xC1EF, 0xA356, 0xA357, 0xC1F0, 0xA358, 0xA359, 0xA35A, /* 0x80 */
+ 0xC1F1, 0xA361, 0xA362, 0xA363, 0xA364, 0xA365, 0xA366, 0xA367, /* 0x90 */
+ 0xC1F2, 0xC1F3, 0xA368, 0xC1F4, 0xA369, 0xC1F5, 0xA36A, 0xA36B, /* 0x90 */
+ 0xA36C, 0xA36D, 0xA36E, 0xA36F, 0xA370, 0xA371, 0xA372, 0xA373, /* 0xA0 */
+ 0xA374, 0xA375, 0xA376, 0xA377, 0xA378, 0xA379, 0xA37A, 0xA381, /* 0xA0 */
+ 0xA382, 0xA383, 0xA384, 0xA385, 0xA386, 0xA387, 0xA388, 0xA389, /* 0xB0 */
+ 0xA38A, 0xA38B, 0xA38C, 0xA38D, 0xA38E, 0xA38F, 0xA390, 0xA391, /* 0xB0 */
+ 0xC1F6, 0xC1F7, 0xA392, 0xA393, 0xC1F8, 0xA394, 0xA395, 0xC1F9, /* 0xC0 */
+ 0xC1FA, 0xA396, 0xC1FB, 0xA397, 0xA398, 0xA399, 0xA39A, 0xA39B, /* 0xC0 */
+ 0xC1FC, 0xC1FD, 0xA39C, 0xC1FE, 0xA39D, 0xC2A1, 0xC2A2, 0xA39E, /* 0xD0 */
+ 0xA39F, 0xC2A3, 0xC2A4, 0xA3A0, 0xC2A5, 0xC2A6, 0xA441, 0xA442, /* 0xD0 */
+ 0xC2A7, 0xA443, 0xC2A8, 0xA444, 0xC2A9, 0xA445, 0xA446, 0xC2AA, /* 0xE0 */
+ 0xA447, 0xA448, 0xA449, 0xA44A, 0xC2AB, 0xC2AC, 0xA44B, 0xC2AD, /* 0xE0 */
+ 0xC2AE, 0xC2AF, 0xA44C, 0xA44D, 0xA44E, 0xA44F, 0xA450, 0xA451, /* 0xF0 */
+ 0xC2B0, 0xC2B1, 0xA452, 0xA453, 0xC2B2, 0xA454, 0xA455, 0xA456 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_CA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC2B3, 0xA457, 0xA458, 0xA459, 0xA45A, 0xA461, 0xA462, 0xA463, /* 0x00 */
+ 0xC2B4, 0xC2B5, 0xA464, 0xC2B6, 0xC2B7, 0xC2B8, 0xA465, 0xA466, /* 0x00 */
+ 0xA467, 0xA468, 0xA469, 0xA46A, 0xC2B9, 0xA46B, 0xA46C, 0xA46D, /* 0x10 */
+ 0xC2BA, 0xA46E, 0xA46F, 0xA470, 0xA471, 0xA472, 0xA473, 0xA474, /* 0x10 */
+ 0xA475, 0xA476, 0xA477, 0xA478, 0xA479, 0xA47A, 0xA481, 0xA482, /* 0x20 */
+ 0xA483, 0xC2BB, 0xA484, 0xA485, 0xA486, 0xA487, 0xA488, 0xA489, /* 0x20 */
+ 0xA48A, 0xA48B, 0xA48C, 0xA48D, 0xA48E, 0xA48F, 0xA490, 0xA491, /* 0x30 */
+ 0xA492, 0xA493, 0xA494, 0xA495, 0xA496, 0xA497, 0xA498, 0xA499, /* 0x30 */
+ 0xA49A, 0xA49B, 0xA49C, 0xA49D, 0xA49E, 0xA49F, 0xA4A0, 0xA541, /* 0x40 */
+ 0xA542, 0xA543, 0xA544, 0xA545, 0xC2BC, 0xC2BD, 0xA546, 0xA547, /* 0x40 */
+ 0xC2BE, 0xA548, 0xA549, 0xA54A, 0xC2BF, 0xA54B, 0xA54C, 0xA54D, /* 0x50 */
+ 0xA54E, 0xA54F, 0xA550, 0xA551, 0xC2C0, 0xC2C1, 0xA552, 0xC2C2, /* 0x50 */
+ 0xC2C3, 0xC2C4, 0xA553, 0xA554, 0xA555, 0xA556, 0xA557, 0xA558, /* 0x60 */
+ 0xC2C5, 0xA559, 0xA55A, 0xA561, 0xA562, 0xA563, 0xA564, 0xA565, /* 0x60 */
+ 0xA566, 0xA567, 0xA568, 0xA569, 0xA56A, 0xA56B, 0xA56C, 0xA56D, /* 0x70 */
+ 0xA56E, 0xA56F, 0xA570, 0xA571, 0xA572, 0xC2C6, 0xA573, 0xA574, /* 0x70 */
+ 0xA575, 0xA576, 0xA577, 0xA578, 0xC2C7, 0xA579, 0xA57A, 0xA581, /* 0x80 */
+ 0xA582, 0xA583, 0xA584, 0xA585, 0xA586, 0xA587, 0xA588, 0xA589, /* 0x80 */
+ 0xA58A, 0xA58B, 0xA58C, 0xA58D, 0xA58E, 0xA58F, 0xA590, 0xA591, /* 0x90 */
+ 0xC2C8, 0xA592, 0xA593, 0xA594, 0xA595, 0xA596, 0xA597, 0xA598, /* 0x90 */
+ 0xA599, 0xA59A, 0xA59B, 0xA59C, 0xA59D, 0xA59E, 0xA59F, 0xA5A0, /* 0xA0 */
+ 0xA641, 0xA642, 0xA643, 0xA644, 0xA645, 0xA646, 0xA647, 0xA648, /* 0xA0 */
+ 0xA649, 0xA64A, 0xA64B, 0xA64C, 0xA64D, 0xA64E, 0xA64F, 0xA650, /* 0xB0 */
+ 0xA651, 0xA652, 0xA653, 0xA654, 0xC2C9, 0xC2CA, 0xA655, 0xA656, /* 0xB0 */
+ 0xC2CB, 0xA657, 0xA658, 0xA659, 0xC2CC, 0xA65A, 0xA661, 0xA662, /* 0xC0 */
+ 0xA663, 0xA664, 0xA665, 0xA666, 0xC2CD, 0xC2CE, 0xA667, 0xC2CF, /* 0xC0 */
+ 0xA668, 0xC2D0, 0xA669, 0xC2D1, 0xA66A, 0xA66B, 0xA66C, 0xA66D, /* 0xD0 */
+ 0xC2D2, 0xC2D3, 0xA66E, 0xA66F, 0xA670, 0xA671, 0xA672, 0xA673, /* 0xD0 */
+ 0xC2D4, 0xA674, 0xA675, 0xA676, 0xA677, 0xA678, 0xA679, 0xA67A, /* 0xE0 */
+ 0xA681, 0xA682, 0xA683, 0xA684, 0xC2D5, 0xA685, 0xA686, 0xA687, /* 0xE0 */
+ 0xA688, 0xA689, 0xA68A, 0xA68B, 0xC2D6, 0xA68C, 0xA68D, 0xA68E, /* 0xF0 */
+ 0xA68F, 0xA690, 0xA691, 0xA692, 0xA693, 0xA694, 0xA695, 0xA696 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_CB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA697, 0xA698, 0xA699, 0xA69A, 0xA69B, 0xA69C, 0xA69D, 0xA69E, /* 0x00 */
+ 0xC2D7, 0xA69F, 0xA6A0, 0xA741, 0xA742, 0xA743, 0xA744, 0xA745, /* 0x00 */
+ 0xC2D8, 0xA746, 0xA747, 0xA748, 0xC2D9, 0xA749, 0xA74A, 0xA74B, /* 0x10 */
+ 0xC2DA, 0xA74C, 0xA74D, 0xA74E, 0xA74F, 0xA750, 0xA751, 0xA752, /* 0x10 */
+ 0xC2DB, 0xC2DC, 0xA753, 0xA754, 0xA755, 0xA756, 0xA757, 0xA758, /* 0x20 */
+ 0xA759, 0xA75A, 0xA761, 0xA762, 0xA763, 0xA764, 0xA765, 0xA766, /* 0x20 */
+ 0xA767, 0xA768, 0xA769, 0xA76A, 0xA76B, 0xA76C, 0xA76D, 0xA76E, /* 0x30 */
+ 0xA76F, 0xA770, 0xA771, 0xA772, 0xA773, 0xA774, 0xA775, 0xA776, /* 0x30 */
+ 0xA777, 0xC2DD, 0xA778, 0xA779, 0xA77A, 0xA781, 0xA782, 0xA783, /* 0x40 */
+ 0xC2DE, 0xC2DF, 0xA784, 0xA785, 0xC2E0, 0xA786, 0xA787, 0xA788, /* 0x40 */
+ 0xC2E1, 0xA789, 0xA78A, 0xA78B, 0xA78C, 0xA78D, 0xA78E, 0xA78F, /* 0x50 */
+ 0xC2E2, 0xC2E3, 0xA790, 0xA791, 0xA792, 0xC2E4, 0xA793, 0xA794, /* 0x50 */
+ 0xA795, 0xA796, 0xA797, 0xA798, 0xC2E5, 0xA799, 0xA79A, 0xA79B, /* 0x60 */
+ 0xA79C, 0xA79D, 0xA79E, 0xA79F, 0xA7A0, 0xA841, 0xA842, 0xA843, /* 0x60 */
+ 0xA844, 0xA845, 0xA846, 0xA847, 0xA848, 0xA849, 0xA84A, 0xA84B, /* 0x70 */
+ 0xC2E6, 0xC2E7, 0xA84C, 0xA84D, 0xA84E, 0xA84F, 0xA850, 0xA851, /* 0x70 */
+ 0xA852, 0xA853, 0xA854, 0xA855, 0xA856, 0xA857, 0xA858, 0xA859, /* 0x80 */
+ 0xA85A, 0xA861, 0xA862, 0xA863, 0xA864, 0xA865, 0xA866, 0xA867, /* 0x80 */
+ 0xA868, 0xA869, 0xA86A, 0xA86B, 0xA86C, 0xA86D, 0xA86E, 0xA86F, /* 0x90 */
+ 0xA870, 0xA871, 0xA872, 0xA873, 0xC2E8, 0xA874, 0xA875, 0xA876, /* 0x90 */
+ 0xA877, 0xA878, 0xA879, 0xA87A, 0xA881, 0xA882, 0xA883, 0xA884, /* 0xA0 */
+ 0xA885, 0xA886, 0xA887, 0xA888, 0xA889, 0xA88A, 0xA88B, 0xA88C, /* 0xA0 */
+ 0xA88D, 0xA88E, 0xA88F, 0xA890, 0xA891, 0xA892, 0xA893, 0xA894, /* 0xB0 */
+ 0xC2E9, 0xA895, 0xA896, 0xA897, 0xA898, 0xA899, 0xA89A, 0xA89B, /* 0xB0 */
+ 0xA89C, 0xA89D, 0xA89E, 0xA89F, 0xA8A0, 0xA941, 0xA942, 0xA943, /* 0xC0 */
+ 0xA944, 0xA945, 0xA946, 0xA947, 0xA948, 0xA949, 0xA94A, 0xA94B, /* 0xC0 */
+ 0xA94C, 0xA94D, 0xA94E, 0xA94F, 0xC2EA, 0xA950, 0xA951, 0xA952, /* 0xD0 */
+ 0xA953, 0xA954, 0xA955, 0xA956, 0xA957, 0xA958, 0xA959, 0xA95A, /* 0xD0 */
+ 0xA961, 0xA962, 0xA963, 0xA964, 0xC2EB, 0xA965, 0xA966, 0xC2EC, /* 0xE0 */
+ 0xA967, 0xC2ED, 0xA968, 0xA969, 0xA96A, 0xA96B, 0xA96C, 0xA96D, /* 0xE0 */
+ 0xA96E, 0xA96F, 0xA970, 0xA971, 0xA972, 0xA973, 0xA974, 0xA975, /* 0xF0 */
+ 0xA976, 0xA977, 0xA978, 0xA979, 0xA97A, 0xA981, 0xA982, 0xA983 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_CC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA984, 0xA985, 0xA986, 0xA987, 0xA988, 0xA989, 0xA98A, 0xA98B, /* 0x00 */
+ 0xA98C, 0xA98D, 0xA98E, 0xA98F, 0xC2EE, 0xC2EF, 0xA990, 0xA991, /* 0x00 */
+ 0xC2F0, 0xA992, 0xA993, 0xA994, 0xC2F1, 0xA995, 0xA996, 0xA997, /* 0x10 */
+ 0xA998, 0xA999, 0xA99A, 0xA99B, 0xC2F2, 0xC2F3, 0xA99C, 0xA99D, /* 0x10 */
+ 0xA99E, 0xC2F4, 0xC2F5, 0xA99F, 0xA9A0, 0xAA41, 0xAA42, 0xC2F6, /* 0x20 */
+ 0xC2F7, 0xC2F8, 0xAA43, 0xAA44, 0xC2F9, 0xAA45, 0xC2FA, 0xAA46, /* 0x20 */
+ 0xC2FB, 0xAA47, 0xAA48, 0xAA49, 0xAA4A, 0xAA4B, 0xAA4C, 0xAA4D, /* 0x30 */
+ 0xC2FC, 0xC2FD, 0xAA4E, 0xC2FE, 0xC3A1, 0xC3A2, 0xC3A3, 0xAA4F, /* 0x30 */
+ 0xAA50, 0xAA51, 0xAA52, 0xAA53, 0xC3A4, 0xC3A5, 0xAA54, 0xAA55, /* 0x40 */
+ 0xC3A6, 0xAA56, 0xAA57, 0xAA58, 0xC3A7, 0xAA59, 0xAA5A, 0xAA61, /* 0x40 */
+ 0xAA62, 0xAA63, 0xAA64, 0xAA65, 0xC3A8, 0xC3A9, 0xAA66, 0xC3AA, /* 0x50 */
+ 0xC3AB, 0xC3AC, 0xAA67, 0xAA68, 0xAA69, 0xAA6A, 0xAA6B, 0xAA6C, /* 0x50 */
+ 0xC3AD, 0xAA6D, 0xAA6E, 0xAA6F, 0xC3AE, 0xAA70, 0xC3AF, 0xAA71, /* 0x60 */
+ 0xC3B0, 0xAA72, 0xAA73, 0xAA74, 0xAA75, 0xAA76, 0xAA77, 0xAA78, /* 0x60 */
+ 0xC3B1, 0xAA79, 0xAA7A, 0xAA81, 0xAA82, 0xC3B2, 0xAA83, 0xAA84, /* 0x70 */
+ 0xAA85, 0xAA86, 0xAA87, 0xAA88, 0xAA89, 0xAA8A, 0xAA8B, 0xAA8C, /* 0x70 */
+ 0xAA8D, 0xAA8E, 0xAA8F, 0xAA90, 0xAA91, 0xAA92, 0xAA93, 0xAA94, /* 0x80 */
+ 0xAA95, 0xAA96, 0xAA97, 0xAA98, 0xAA99, 0xAA9A, 0xAA9B, 0xAA9C, /* 0x80 */
+ 0xAA9D, 0xAA9E, 0xAA9F, 0xAAA0, 0xAB41, 0xAB42, 0xAB43, 0xAB44, /* 0x90 */
+ 0xC3B3, 0xC3B4, 0xAB45, 0xAB46, 0xC3B5, 0xAB47, 0xAB48, 0xAB49, /* 0x90 */
+ 0xC3B6, 0xAB4A, 0xAB4B, 0xAB4C, 0xAB4D, 0xAB4E, 0xAB4F, 0xAB50, /* 0xA0 */
+ 0xC3B7, 0xC3B8, 0xAB51, 0xC3B9, 0xC3BA, 0xC3BB, 0xAB52, 0xAB53, /* 0xA0 */
+ 0xAB54, 0xAB55, 0xAB56, 0xAB57, 0xC3BC, 0xC3BD, 0xAB58, 0xAB59, /* 0xB0 */
+ 0xC3BE, 0xAB5A, 0xAB61, 0xAB62, 0xC3BF, 0xAB63, 0xAB64, 0xAB65, /* 0xB0 */
+ 0xAB66, 0xAB67, 0xAB68, 0xAB69, 0xC3C0, 0xC3C1, 0xAB6A, 0xC3C2, /* 0xC0 */
+ 0xAB6B, 0xC3C3, 0xAB6C, 0xAB6D, 0xAB6E, 0xAB6F, 0xAB70, 0xAB71, /* 0xC0 */
+ 0xC3C4, 0xAB72, 0xAB73, 0xAB74, 0xC3C5, 0xAB75, 0xAB76, 0xAB77, /* 0xD0 */
+ 0xAB78, 0xAB79, 0xAB7A, 0xAB81, 0xAB82, 0xAB83, 0xAB84, 0xAB85, /* 0xD0 */
+ 0xAB86, 0xAB87, 0xAB88, 0xAB89, 0xC3C6, 0xAB8A, 0xAB8B, 0xAB8C, /* 0xE0 */
+ 0xAB8D, 0xAB8E, 0xAB8F, 0xAB90, 0xC3C7, 0xAB91, 0xAB92, 0xAB93, /* 0xE0 */
+ 0xC3C8, 0xAB94, 0xAB95, 0xAB96, 0xAB97, 0xAB98, 0xAB99, 0xAB9A, /* 0xF0 */
+ 0xAB9B, 0xAB9C, 0xAB9D, 0xAB9E, 0xAB9F, 0xABA0, 0xAC41, 0xAC42 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_CD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAC43, 0xC3C9, 0xAC44, 0xAC45, 0xAC46, 0xAC47, 0xAC48, 0xAC49, /* 0x00 */
+ 0xC3CA, 0xC3CB, 0xAC4A, 0xAC4B, 0xC3CC, 0xAC4C, 0xAC4D, 0xAC4E, /* 0x00 */
+ 0xC3CD, 0xAC4F, 0xAC50, 0xAC51, 0xAC52, 0xAC53, 0xAC54, 0xAC55, /* 0x10 */
+ 0xC3CE, 0xC3CF, 0xAC56, 0xC3D0, 0xAC57, 0xC3D1, 0xAC58, 0xAC59, /* 0x10 */
+ 0xAC5A, 0xAC61, 0xAC62, 0xAC63, 0xC3D2, 0xAC64, 0xAC65, 0xAC66, /* 0x20 */
+ 0xC3D3, 0xAC67, 0xAC68, 0xAC69, 0xC3D4, 0xAC6A, 0xAC6B, 0xAC6C, /* 0x20 */
+ 0xAC6D, 0xAC6E, 0xAC6F, 0xAC70, 0xAC71, 0xAC72, 0xAC73, 0xAC74, /* 0x30 */
+ 0xAC75, 0xC3D5, 0xAC76, 0xAC77, 0xAC78, 0xAC79, 0xAC7A, 0xAC81, /* 0x30 */
+ 0xAC82, 0xAC83, 0xAC84, 0xAC85, 0xAC86, 0xAC87, 0xAC88, 0xAC89, /* 0x40 */
+ 0xAC8A, 0xAC8B, 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, 0xAC91, /* 0x40 */
+ 0xAC92, 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xAC97, 0xAC98, 0xAC99, /* 0x50 */
+ 0xAC9A, 0xAC9B, 0xAC9C, 0xAC9D, 0xC3D6, 0xAC9E, 0xAC9F, 0xACA0, /* 0x50 */
+ 0xC3D7, 0xAD41, 0xAD42, 0xAD43, 0xC3D8, 0xAD44, 0xAD45, 0xAD46, /* 0x60 */
+ 0xAD47, 0xAD48, 0xAD49, 0xAD4A, 0xC3D9, 0xC3DA, 0xAD4B, 0xC3DB, /* 0x60 */
+ 0xAD4C, 0xC3DC, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD50, 0xAD51, 0xAD52, /* 0x70 */
+ 0xC3DD, 0xAD53, 0xAD54, 0xAD55, 0xAD56, 0xAD57, 0xAD58, 0xAD59, /* 0x70 */
+ 0xAD5A, 0xAD61, 0xAD62, 0xAD63, 0xAD64, 0xAD65, 0xAD66, 0xAD67, /* 0x80 */
+ 0xC3DE, 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6C, 0xAD6D, 0xAD6E, /* 0x80 */
+ 0xAD6F, 0xAD70, 0xAD71, 0xAD72, 0xC3DF, 0xC3E0, 0xAD73, 0xAD74, /* 0x90 */
+ 0xC3E1, 0xAD75, 0xAD76, 0xAD77, 0xC3E2, 0xAD78, 0xAD79, 0xAD7A, /* 0x90 */
+ 0xAD81, 0xAD82, 0xAD83, 0xAD84, 0xC3E3, 0xC3E4, 0xAD85, 0xC3E5, /* 0xA0 */
+ 0xAD86, 0xC3E6, 0xAD87, 0xAD88, 0xAD89, 0xAD8A, 0xAD8B, 0xAD8C, /* 0xA0 */
+ 0xC3E7, 0xAD8D, 0xAD8E, 0xAD8F, 0xAD90, 0xAD91, 0xAD92, 0xAD93, /* 0xB0 */
+ 0xAD94, 0xAD95, 0xAD96, 0xAD97, 0xAD98, 0xAD99, 0xAD9A, 0xAD9B, /* 0xB0 */
+ 0xAD9C, 0xAD9D, 0xAD9E, 0xAD9F, 0xC3E8, 0xADA0, 0xAE41, 0xAE42, /* 0xC0 */
+ 0xAE43, 0xAE44, 0xAE45, 0xAE46, 0xC3E9, 0xAE47, 0xAE48, 0xAE49, /* 0xC0 */
+ 0xC3EA, 0xAE4A, 0xAE4B, 0xAE4C, 0xAE4D, 0xAE4E, 0xAE4F, 0xAE50, /* 0xD0 */
+ 0xAE51, 0xAE52, 0xAE53, 0xAE54, 0xAE55, 0xAE56, 0xAE57, 0xAE58, /* 0xD0 */
+ 0xAE59, 0xAE5A, 0xAE61, 0xAE62, 0xAE63, 0xAE64, 0xAE65, 0xAE66, /* 0xE0 */
+ 0xC3EB, 0xAE67, 0xAE68, 0xAE69, 0xC3EC, 0xAE6A, 0xAE6B, 0xAE6C, /* 0xE0 */
+ 0xC3ED, 0xAE6D, 0xAE6E, 0xAE6F, 0xAE70, 0xAE71, 0xAE72, 0xAE73, /* 0xF0 */
+ 0xC3EE, 0xC3EF, 0xAE74, 0xC3F0, 0xAE75, 0xC3F1, 0xAE76, 0xAE77 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_CE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAE78, 0xAE79, 0xAE7A, 0xAE81, 0xC3F2, 0xAE82, 0xAE83, 0xAE84, /* 0x00 */
+ 0xC3F3, 0xAE85, 0xAE86, 0xAE87, 0xC3F4, 0xAE88, 0xAE89, 0xAE8A, /* 0x00 */
+ 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xC3F5, 0xAE8F, 0xAE90, 0xAE91, /* 0x10 */
+ 0xAE92, 0xC3F6, 0xAE93, 0xAE94, 0xAE95, 0xAE96, 0xAE97, 0xAE98, /* 0x10 */
+ 0xC3F7, 0xC3F8, 0xAE99, 0xAE9A, 0xC3F9, 0xAE9B, 0xAE9C, 0xAE9D, /* 0x20 */
+ 0xC3FA, 0xAE9E, 0xAE9F, 0xAEA0, 0xAF41, 0xAF42, 0xAF43, 0xAF44, /* 0x20 */
+ 0xC3FB, 0xC3FC, 0xAF45, 0xC3FD, 0xAF46, 0xC3FE, 0xAF47, 0xAF48, /* 0x30 */
+ 0xAF49, 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, 0xAF50, /* 0x30 */
+ 0xAF51, 0xAF52, 0xAF53, 0xAF54, 0xAF55, 0xAF56, 0xAF57, 0xAF58, /* 0x40 */
+ 0xAF59, 0xAF5A, 0xAF61, 0xAF62, 0xAF63, 0xAF64, 0xAF65, 0xAF66, /* 0x40 */
+ 0xAF67, 0xAF68, 0xAF69, 0xAF6A, 0xAF6B, 0xAF6C, 0xAF6D, 0xAF6E, /* 0x50 */
+ 0xC4A1, 0xC4A2, 0xAF6F, 0xAF70, 0xC4A3, 0xAF71, 0xAF72, 0xC4A4, /* 0x50 */
+ 0xC4A5, 0xC4A6, 0xAF73, 0xAF74, 0xAF75, 0xAF76, 0xAF77, 0xAF78, /* 0x60 */
+ 0xC4A7, 0xC4A8, 0xAF79, 0xC4A9, 0xAF7A, 0xC4AA, 0xAF81, 0xAF82, /* 0x60 */
+ 0xAF83, 0xAF84, 0xAF85, 0xAF86, 0xC4AB, 0xC4AC, 0xAF87, 0xAF88, /* 0x70 */
+ 0xC4AD, 0xAF89, 0xAF8A, 0xAF8B, 0xC4AE, 0xAF8C, 0xAF8D, 0xAF8E, /* 0x70 */
+ 0xAF8F, 0xAF90, 0xAF91, 0xAF92, 0xC4AF, 0xC4B0, 0xAF93, 0xC4B1, /* 0x80 */
+ 0xAF94, 0xC4B2, 0xAF95, 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, /* 0x80 */
+ 0xC4B3, 0xC4B4, 0xAF9B, 0xAF9C, 0xC4B5, 0xAF9D, 0xAF9E, 0xAF9F, /* 0x90 */
+ 0xC4B6, 0xAFA0, 0xB041, 0xB042, 0xB043, 0xB044, 0xB045, 0xB046, /* 0x90 */
+ 0xC4B7, 0xC4B8, 0xB047, 0xC4B9, 0xC4BA, 0xC4BB, 0xB048, 0xB049, /* 0xA0 */
+ 0xB04A, 0xB04B, 0xB04C, 0xB04D, 0xC4BC, 0xC4BD, 0xB04E, 0xB04F, /* 0xA0 */
+ 0xB050, 0xB051, 0xB052, 0xB053, 0xB054, 0xB055, 0xB056, 0xB057, /* 0xB0 */
+ 0xB058, 0xB059, 0xB05A, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, /* 0xB0 */
+ 0xB066, 0xC4BE, 0xB067, 0xB068, 0xB069, 0xB06A, 0xB06B, 0xB06C, /* 0xC0 */
+ 0xB06D, 0xB06E, 0xB06F, 0xB070, 0xB071, 0xB072, 0xB073, 0xB074, /* 0xC0 */
+ 0xB075, 0xB076, 0xB077, 0xB078, 0xB079, 0xB07A, 0xB081, 0xB082, /* 0xD0 */
+ 0xB083, 0xB084, 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, 0xB08A, /* 0xD0 */
+ 0xB08B, 0xB08C, 0xB08D, 0xB08E, 0xC4BF, 0xC4C0, 0xB08F, 0xB090, /* 0xE0 */
+ 0xC4C1, 0xB091, 0xB092, 0xC4C2, 0xC4C3, 0xB093, 0xB094, 0xB095, /* 0xE0 */
+ 0xB096, 0xB097, 0xB098, 0xB099, 0xC4C4, 0xC4C5, 0xB09A, 0xC4C6, /* 0xF0 */
+ 0xC4C7, 0xC4C8, 0xB09B, 0xB09C, 0xB09D, 0xB09E, 0xB09F, 0xB0A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_CF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC4C9, 0xC4CA, 0xB141, 0xB142, 0xC4CB, 0xB143, 0xB144, 0xB145, /* 0x00 */
+ 0xC4CC, 0xB146, 0xB147, 0xB148, 0xB149, 0xB14A, 0xB14B, 0xB14C, /* 0x00 */
+ 0xC4CD, 0xC4CE, 0xB14D, 0xC4CF, 0xB14E, 0xC4D0, 0xB14F, 0xB150, /* 0x10 */
+ 0xB151, 0xB152, 0xB153, 0xB154, 0xC4D1, 0xB155, 0xB156, 0xB157, /* 0x10 */
+ 0xC4D2, 0xB158, 0xB159, 0xB15A, 0xC4D3, 0xB161, 0xB162, 0xB163, /* 0x20 */
+ 0xB164, 0xB165, 0xB166, 0xB167, 0xC4D4, 0xC4D5, 0xB168, 0xC4D6, /* 0x20 */
+ 0xC4D7, 0xC4D8, 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E, /* 0x30 */
+ 0xC4D9, 0xB16F, 0xB170, 0xB171, 0xB172, 0xB173, 0xB174, 0xB175, /* 0x30 */
+ 0xB176, 0xB177, 0xB178, 0xB179, 0xB17A, 0xB181, 0xB182, 0xB183, /* 0x40 */
+ 0xB184, 0xB185, 0xB186, 0xB187, 0xB188, 0xB189, 0xB18A, 0xB18B, /* 0x40 */
+ 0xB18C, 0xB18D, 0xB18E, 0xB18F, 0xC4DA, 0xC4DB, 0xB190, 0xB191, /* 0x50 */
+ 0xC4DC, 0xB192, 0xB193, 0xB194, 0xC4DD, 0xB195, 0xB196, 0xB197, /* 0x50 */
+ 0xB198, 0xB199, 0xB19A, 0xB19B, 0xC4DE, 0xC4DF, 0xB19C, 0xC4E0, /* 0x60 */
+ 0xB19D, 0xC4E1, 0xB19E, 0xB19F, 0xB1A0, 0xB241, 0xB242, 0xB243, /* 0x60 */
+ 0xC4E2, 0xC4E3, 0xB244, 0xB245, 0xC4E4, 0xB246, 0xB247, 0xB248, /* 0x70 */
+ 0xC4E5, 0xB249, 0xB24A, 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, /* 0x70 */
+ 0xC4E6, 0xB250, 0xB251, 0xB252, 0xB253, 0xC4E7, 0xB254, 0xB255, /* 0x80 */
+ 0xB256, 0xB257, 0xB258, 0xB259, 0xC4E8, 0xB25A, 0xB261, 0xB262, /* 0x80 */
+ 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB268, 0xB269, 0xB26A, /* 0x90 */
+ 0xB26B, 0xB26C, 0xB26D, 0xB26E, 0xB26F, 0xB270, 0xB271, 0xB272, /* 0x90 */
+ 0xB273, 0xC4E9, 0xB274, 0xB275, 0xB276, 0xB277, 0xB278, 0xB279, /* 0xA0 */
+ 0xC4EA, 0xB27A, 0xB281, 0xB282, 0xB283, 0xB284, 0xB285, 0xB286, /* 0xA0 */
+ 0xC4EB, 0xB287, 0xB288, 0xB289, 0xB28A, 0xB28B, 0xB28C, 0xB28D, /* 0xB0 */
+ 0xB28E, 0xB28F, 0xB290, 0xB291, 0xB292, 0xB293, 0xB294, 0xB295, /* 0xB0 */
+ 0xB296, 0xB297, 0xB298, 0xB299, 0xC4EC, 0xB29A, 0xB29B, 0xB29C, /* 0xC0 */
+ 0xB29D, 0xB29E, 0xB29F, 0xB2A0, 0xB341, 0xB342, 0xB343, 0xB344, /* 0xC0 */
+ 0xB345, 0xB346, 0xB347, 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, /* 0xD0 */
+ 0xB34D, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, 0xB353, 0xB354, /* 0xD0 */
+ 0xC4ED, 0xC4EE, 0xB355, 0xB356, 0xC4EF, 0xB357, 0xB358, 0xB359, /* 0xE0 */
+ 0xC4F0, 0xB35A, 0xB361, 0xB362, 0xB363, 0xB364, 0xB365, 0xB366, /* 0xE0 */
+ 0xC4F1, 0xC4F2, 0xB367, 0xC4F3, 0xB368, 0xC4F4, 0xB369, 0xB36A, /* 0xF0 */
+ 0xB36B, 0xB36C, 0xB36D, 0xB36E, 0xC4F5, 0xB36F, 0xB370, 0xB371 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_D0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC4F6, 0xB372, 0xB373, 0xB374, 0xC4F7, 0xB375, 0xB376, 0xB377, /* 0x00 */
+ 0xB378, 0xB379, 0xB37A, 0xB381, 0xB382, 0xB383, 0xB384, 0xB385, /* 0x00 */
+ 0xB386, 0xC4F8, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0xB38C, /* 0x10 */
+ 0xC4F9, 0xB38D, 0xB38E, 0xB38F, 0xB390, 0xB391, 0xB392, 0xB393, /* 0x10 */
+ 0xB394, 0xB395, 0xB396, 0xB397, 0xB398, 0xB399, 0xB39A, 0xB39B, /* 0x20 */
+ 0xB39C, 0xB39D, 0xB39E, 0xB39F, 0xB3A0, 0xC4FA, 0xB441, 0xB442, /* 0x20 */
+ 0xB443, 0xB444, 0xB445, 0xB446, 0xC4FB, 0xC4FC, 0xB447, 0xB448, /* 0x30 */
+ 0xC4FD, 0xB449, 0xB44A, 0xB44B, 0xC4FE, 0xB44C, 0xB44D, 0xB44E, /* 0x30 */
+ 0xB44F, 0xB450, 0xB451, 0xB452, 0xC5A1, 0xC5A2, 0xB453, 0xC5A3, /* 0x40 */
+ 0xB454, 0xC5A4, 0xB455, 0xB456, 0xB457, 0xB458, 0xB459, 0xB45A, /* 0x40 */
+ 0xC5A5, 0xB461, 0xB462, 0xB463, 0xC5A6, 0xB464, 0xB465, 0xB466, /* 0x50 */
+ 0xC5A7, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0xB46C, 0xB46D, /* 0x50 */
+ 0xC5A8, 0xB46E, 0xB46F, 0xB470, 0xB471, 0xB472, 0xB473, 0xB474, /* 0x60 */
+ 0xB475, 0xB476, 0xB477, 0xB478, 0xC5A9, 0xC5AA, 0xB479, 0xB47A, /* 0x60 */
+ 0xC5AB, 0xB481, 0xB482, 0xB483, 0xC5AC, 0xB484, 0xB485, 0xB486, /* 0x70 */
+ 0xB487, 0xB488, 0xB489, 0xB48A, 0xC5AD, 0xC5AE, 0xB48B, 0xB48C, /* 0x70 */
+ 0xB48D, 0xC5AF, 0xB48E, 0xB48F, 0xB490, 0xB491, 0xB492, 0xB493, /* 0x80 */
+ 0xB494, 0xB495, 0xB496, 0xB497, 0xB498, 0xB499, 0xB49A, 0xB49B, /* 0x80 */
+ 0xB49C, 0xB49D, 0xB49E, 0xB49F, 0xB4A0, 0xB541, 0xB542, 0xB543, /* 0x90 */
+ 0xB544, 0xB545, 0xB546, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54B, /* 0x90 */
+ 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xC5B0, 0xC5B1, 0xB550, 0xB551, /* 0xA0 */
+ 0xC5B2, 0xB552, 0xB553, 0xB554, 0xC5B3, 0xB555, 0xB556, 0xB557, /* 0xA0 */
+ 0xB558, 0xB559, 0xB55A, 0xB561, 0xC5B4, 0xC5B5, 0xB562, 0xC5B6, /* 0xB0 */
+ 0xB563, 0xC5B7, 0xB564, 0xB565, 0xB566, 0xB567, 0xB568, 0xB569, /* 0xB0 */
+ 0xC5B8, 0xC5B9, 0xB56A, 0xB56B, 0xC5BA, 0xB56C, 0xB56D, 0xB56E, /* 0xC0 */
+ 0xC5BB, 0xC5BC, 0xB56F, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, /* 0xC0 */
+ 0xC5BD, 0xC5BE, 0xB575, 0xC5BF, 0xC5C0, 0xC5C1, 0xB576, 0xB577, /* 0xD0 */
+ 0xB578, 0xB579, 0xB57A, 0xB581, 0xC5C2, 0xC5C3, 0xB582, 0xB583, /* 0xD0 */
+ 0xC5C4, 0xB584, 0xB585, 0xB586, 0xC5C5, 0xB587, 0xB588, 0xB589, /* 0xE0 */
+ 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xC5C6, 0xC5C7, 0xB58E, 0xC5C8, /* 0xE0 */
+ 0xC5C9, 0xC5CA, 0xB58F, 0xB590, 0xB591, 0xB592, 0xB593, 0xB594, /* 0xF0 */
+ 0xC5CB, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, 0xB59A, 0xB59B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_D1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB59C, 0xB59D, 0xB59E, 0xB59F, 0xB5A0, 0xB641, 0xB642, 0xB643, /* 0x00 */
+ 0xB644, 0xB645, 0xB646, 0xB647, 0xB648, 0xC5CC, 0xB649, 0xB64A, /* 0x00 */
+ 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, /* 0x10 */
+ 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, /* 0x10 */
+ 0xB661, 0xB662, 0xB663, 0xB664, 0xB665, 0xB666, 0xB667, 0xB668, /* 0x20 */
+ 0xB669, 0xB66A, 0xB66B, 0xB66C, 0xB66D, 0xB66E, 0xB66F, 0xB670, /* 0x20 */
+ 0xC5CD, 0xC5CE, 0xB671, 0xB672, 0xC5CF, 0xB673, 0xB674, 0xB675, /* 0x30 */
+ 0xC5D0, 0xB676, 0xC5D1, 0xB677, 0xB678, 0xB679, 0xB67A, 0xB681, /* 0x30 */
+ 0xC5D2, 0xC5D3, 0xB682, 0xC5D4, 0xC5D5, 0xC5D6, 0xB683, 0xB684, /* 0x40 */
+ 0xB685, 0xB686, 0xB687, 0xB688, 0xC5D7, 0xC5D8, 0xB689, 0xB68A, /* 0x40 */
+ 0xC5D9, 0xB68B, 0xB68C, 0xB68D, 0xC5DA, 0xB68E, 0xB68F, 0xB690, /* 0x50 */
+ 0xB691, 0xB692, 0xB693, 0xB694, 0xC5DB, 0xC5DC, 0xB695, 0xC5DD, /* 0x50 */
+ 0xB696, 0xC5DE, 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0xB69C, /* 0x60 */
+ 0xC5DF, 0xB69D, 0xB69E, 0xB69F, 0xC5E0, 0xB6A0, 0xB741, 0xB742, /* 0x60 */
+ 0xB743, 0xB744, 0xB745, 0xB746, 0xB747, 0xB748, 0xB749, 0xB74A, /* 0x70 */
+ 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xC5E1, 0xB74F, 0xB750, 0xB751, /* 0x70 */
+ 0xB752, 0xB753, 0xB754, 0xB755, 0xC5E2, 0xB756, 0xB757, 0xB758, /* 0x80 */
+ 0xC5E3, 0xB759, 0xB75A, 0xB761, 0xB762, 0xB763, 0xB764, 0xB765, /* 0x80 */
+ 0xB766, 0xB767, 0xB768, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, /* 0x90 */
+ 0xB76E, 0xB76F, 0xB770, 0xB771, 0xB772, 0xB773, 0xB774, 0xB775, /* 0x90 */
+ 0xC5E4, 0xC5E5, 0xB776, 0xB777, 0xC5E6, 0xB778, 0xB779, 0xB77A, /* 0xA0 */
+ 0xC5E7, 0xB781, 0xB782, 0xB783, 0xB784, 0xB785, 0xB786, 0xB787, /* 0xA0 */
+ 0xC5E8, 0xC5E9, 0xB788, 0xC5EA, 0xB789, 0xC5EB, 0xB78A, 0xB78B, /* 0xB0 */
+ 0xB78C, 0xB78D, 0xC5EC, 0xB78E, 0xC5ED, 0xB78F, 0xB790, 0xB791, /* 0xB0 */
+ 0xC5EE, 0xB792, 0xB793, 0xB794, 0xB795, 0xB796, 0xB797, 0xB798, /* 0xC0 */
+ 0xB799, 0xB79A, 0xB79B, 0xB79C, 0xB79D, 0xB79E, 0xB79F, 0xB7A0, /* 0xC0 */
+ 0xB841, 0xB842, 0xB843, 0xB844, 0xB845, 0xB846, 0xB847, 0xB848, /* 0xD0 */
+ 0xC5EF, 0xB849, 0xB84A, 0xB84B, 0xB84C, 0xB84D, 0xB84E, 0xB84F, /* 0xD0 */
+ 0xB850, 0xB851, 0xB852, 0xB853, 0xB854, 0xB855, 0xB856, 0xB857, /* 0xE0 */
+ 0xB858, 0xB859, 0xB85A, 0xB861, 0xB862, 0xB863, 0xB864, 0xB865, /* 0xE0 */
+ 0xB866, 0xB867, 0xB868, 0xB869, 0xC5F0, 0xB86A, 0xB86B, 0xB86C, /* 0xF0 */
+ 0xC5F1, 0xB86D, 0xB86E, 0xB86F, 0xB870, 0xB871, 0xB872, 0xB873 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_D2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB874, 0xB875, 0xB876, 0xB877, 0xB878, 0xB879, 0xB87A, 0xC5F2, /* 0x00 */
+ 0xB881, 0xC5F3, 0xB882, 0xB883, 0xB884, 0xB885, 0xB886, 0xB887, /* 0x00 */
+ 0xC5F4, 0xB888, 0xB889, 0xB88A, 0xB88B, 0xB88C, 0xB88D, 0xB88E, /* 0x10 */
+ 0xB88F, 0xB890, 0xB891, 0xB892, 0xB893, 0xB894, 0xB895, 0xB896, /* 0x10 */
+ 0xB897, 0xB898, 0xB899, 0xB89A, 0xB89B, 0xB89C, 0xB89D, 0xB89E, /* 0x20 */
+ 0xB89F, 0xB8A0, 0xB941, 0xB942, 0xC5F5, 0xC5F6, 0xB943, 0xB944, /* 0x20 */
+ 0xC5F7, 0xB945, 0xB946, 0xB947, 0xC5F8, 0xB948, 0xB949, 0xB94A, /* 0x30 */
+ 0xB94B, 0xB94C, 0xB94D, 0xB94E, 0xC5F9, 0xC5FA, 0xB94F, 0xC5FB, /* 0x30 */
+ 0xB950, 0xC5FC, 0xB951, 0xB952, 0xB953, 0xB954, 0xB955, 0xB956, /* 0x40 */
+ 0xC5FD, 0xB957, 0xB958, 0xB959, 0xB95A, 0xB961, 0xB962, 0xB963, /* 0x40 */
+ 0xB964, 0xB965, 0xB966, 0xB967, 0xB968, 0xB969, 0xB96A, 0xB96B, /* 0x50 */
+ 0xB96C, 0xB96D, 0xB96E, 0xB96F, 0xC5FE, 0xB970, 0xB971, 0xB972, /* 0x50 */
+ 0xB973, 0xB974, 0xB975, 0xB976, 0xC6A1, 0xB977, 0xB978, 0xB979, /* 0x60 */
+ 0xB97A, 0xB981, 0xB982, 0xB983, 0xB984, 0xB985, 0xB986, 0xB987, /* 0x60 */
+ 0xB988, 0xB989, 0xB98A, 0xB98B, 0xB98C, 0xB98D, 0xB98E, 0xB98F, /* 0x70 */
+ 0xB990, 0xB991, 0xB992, 0xB993, 0xB994, 0xB995, 0xB996, 0xB997, /* 0x70 */
+ 0xC6A2, 0xC6A3, 0xB998, 0xB999, 0xC6A4, 0xB99A, 0xB99B, 0xB99C, /* 0x80 */
+ 0xC6A5, 0xB99D, 0xB99E, 0xB99F, 0xB9A0, 0xBA41, 0xBA42, 0xBA43, /* 0x80 */
+ 0xC6A6, 0xC6A7, 0xBA44, 0xBA45, 0xBA46, 0xC6A8, 0xBA47, 0xBA48, /* 0x90 */
+ 0xBA49, 0xBA4A, 0xBA4B, 0xBA4C, 0xC6A9, 0xBA4D, 0xBA4E, 0xBA4F, /* 0x90 */
+ 0xC6AA, 0xBA50, 0xBA51, 0xBA52, 0xC6AB, 0xBA53, 0xBA54, 0xBA55, /* 0xA0 */
+ 0xBA56, 0xBA57, 0xBA58, 0xBA59, 0xC6AC, 0xBA5A, 0xBA61, 0xBA62, /* 0xA0 */
+ 0xBA63, 0xC6AD, 0xBA64, 0xBA65, 0xBA66, 0xBA67, 0xBA68, 0xBA69, /* 0xB0 */
+ 0xC6AE, 0xC6AF, 0xBA6A, 0xBA6B, 0xC6B0, 0xBA6C, 0xBA6D, 0xC6B1, /* 0xB0 */
+ 0xC6B2, 0xBA6E, 0xC6B3, 0xBA6F, 0xBA70, 0xBA71, 0xBA72, 0xBA73, /* 0xC0 */
+ 0xC6B4, 0xC6B5, 0xBA74, 0xC6B6, 0xBA75, 0xBA76, 0xBA77, 0xBA78, /* 0xC0 */
+ 0xBA79, 0xBA7A, 0xBA81, 0xBA82, 0xC6B7, 0xBA83, 0xBA84, 0xBA85, /* 0xD0 */
+ 0xC6B8, 0xBA86, 0xBA87, 0xBA88, 0xC6B9, 0xBA89, 0xBA8A, 0xBA8B, /* 0xD0 */
+ 0xBA8C, 0xBA8D, 0xBA8E, 0xBA8F, 0xC6BA, 0xC6BB, 0xBA90, 0xBA91, /* 0xE0 */
+ 0xBA92, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, /* 0xE0 */
+ 0xC6BC, 0xC6BD, 0xBA9A, 0xBA9B, 0xC6BE, 0xBA9C, 0xBA9D, 0xBA9E, /* 0xF0 */
+ 0xC6BF, 0xBA9F, 0xBAA0, 0xBB41, 0xBB42, 0xBB43, 0xBB44, 0xBB45 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_D3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6C0, 0xC6C1, 0xBB46, 0xC6C2, 0xBB47, 0xC6C3, 0xBB48, 0xBB49, /* 0x00 */
+ 0xBB4A, 0xBB4B, 0xBB4C, 0xBB4D, 0xC6C4, 0xC6C5, 0xC6C6, 0xBB4E, /* 0x00 */
+ 0xC6C7, 0xBB4F, 0xBB50, 0xBB51, 0xC6C8, 0xBB52, 0xC6C9, 0xBB53, /* 0x10 */
+ 0xBB54, 0xBB55, 0xBB56, 0xBB57, 0xC6CA, 0xC6CB, 0xBB58, 0xC6CC, /* 0x10 */
+ 0xC6CD, 0xC6CE, 0xBB59, 0xBB5A, 0xBB61, 0xC6CF, 0xBB62, 0xBB63, /* 0x20 */
+ 0xC6D0, 0xC6D1, 0xBB64, 0xBB65, 0xC6D2, 0xBB66, 0xBB67, 0xBB68, /* 0x20 */
+ 0xC6D3, 0xBB69, 0xBB6A, 0xBB6B, 0xBB6C, 0xBB6D, 0xBB6E, 0xBB6F, /* 0x30 */
+ 0xC6D4, 0xC6D5, 0xBB70, 0xC6D6, 0xC6D7, 0xC6D8, 0xBB71, 0xBB72, /* 0x30 */
+ 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xC6D9, 0xC6DA, 0xBB77, 0xBB78, /* 0x40 */
+ 0xBB79, 0xBB7A, 0xBB81, 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, /* 0x40 */
+ 0xBB87, 0xBB88, 0xBB89, 0xBB8A, 0xBB8B, 0xBB8C, 0xBB8D, 0xBB8E, /* 0x50 */
+ 0xBB8F, 0xBB90, 0xBB91, 0xBB92, 0xBB93, 0xBB94, 0xBB95, 0xBB96, /* 0x50 */
+ 0xBB97, 0xBB98, 0xBB99, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, 0xBB9E, /* 0x60 */
+ 0xBB9F, 0xBBA0, 0xBC41, 0xBC42, 0xBC43, 0xBC44, 0xBC45, 0xBC46, /* 0x60 */
+ 0xBC47, 0xBC48, 0xBC49, 0xBC4A, 0xBC4B, 0xBC4C, 0xBC4D, 0xBC4E, /* 0x70 */
+ 0xBC4F, 0xBC50, 0xBC51, 0xBC52, 0xC6DB, 0xC6DC, 0xBC53, 0xBC54, /* 0x70 */
+ 0xC6DD, 0xBC55, 0xBC56, 0xBC57, 0xC6DE, 0xBC58, 0xBC59, 0xBC5A, /* 0x80 */
+ 0xBC61, 0xBC62, 0xBC63, 0xBC64, 0xC6DF, 0xC6E0, 0xBC65, 0xC6E1, /* 0x80 */
+ 0xC6E2, 0xC6E3, 0xBC66, 0xBC67, 0xBC68, 0xBC69, 0xBC6A, 0xBC6B, /* 0x90 */
+ 0xC6E4, 0xC6E5, 0xBC6C, 0xBC6D, 0xC6E6, 0xBC6E, 0xBC6F, 0xBC70, /* 0x90 */
+ 0xC6E7, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, 0xBC77, /* 0xA0 */
+ 0xC6E8, 0xC6E9, 0xBC78, 0xC6EA, 0xBC79, 0xC6EB, 0xBC7A, 0xBC81, /* 0xA0 */
+ 0xBC82, 0xBC83, 0xBC84, 0xBC85, 0xC6EC, 0xBC86, 0xBC87, 0xBC88, /* 0xB0 */
+ 0xC6ED, 0xBC89, 0xBC8A, 0xBC8B, 0xC6EE, 0xBC8C, 0xBC8D, 0xBC8E, /* 0xB0 */
+ 0xBC8F, 0xBC90, 0xBC91, 0xBC92, 0xC6EF, 0xC6F0, 0xBC93, 0xBC94, /* 0xC0 */
+ 0xC6F1, 0xC6F2, 0xBC95, 0xBC96, 0xBC97, 0xBC98, 0xBC99, 0xBC9A, /* 0xC0 */
+ 0xC6F3, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA0, 0xBD41, /* 0xD0 */
+ 0xC6F4, 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD48, /* 0xD0 */
+ 0xBD49, 0xC6F5, 0xBD4A, 0xC6F6, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, /* 0xE0 */
+ 0xBD4F, 0xBD50, 0xBD51, 0xBD52, 0xC6F7, 0xC6F8, 0xBD53, 0xBD54, /* 0xE0 */
+ 0xC6F9, 0xBD55, 0xBD56, 0xBD57, 0xC6FA, 0xBD58, 0xBD59, 0xBD5A, /* 0xF0 */
+ 0xBD61, 0xBD62, 0xBD63, 0xBD64, 0xC6FB, 0xC6FC, 0xBD65, 0xC6FD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_D4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBD66, 0xC6FE, 0xBD67, 0xBD68, 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, /* 0x00 */
+ 0xC7A1, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, 0xBD73, /* 0x00 */
+ 0xBD74, 0xBD75, 0xBD76, 0xBD77, 0xBD78, 0xBD79, 0xBD7A, 0xBD81, /* 0x10 */
+ 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, 0xC7A2, 0xBD87, 0xBD88, /* 0x10 */
+ 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, 0xBD90, /* 0x20 */
+ 0xBD91, 0xBD92, 0xBD93, 0xBD94, 0xBD95, 0xBD96, 0xBD97, 0xBD98, /* 0x20 */
+ 0xBD99, 0xBD9A, 0xBD9B, 0xBD9C, 0xBD9D, 0xBD9E, 0xBD9F, 0xBDA0, /* 0x30 */
+ 0xBE41, 0xBE42, 0xBE43, 0xBE44, 0xBE45, 0xBE46, 0xBE47, 0xBE48, /* 0x30 */
+ 0xC7A3, 0xBE49, 0xBE4A, 0xBE4B, 0xC7A4, 0xBE4C, 0xBE4D, 0xBE4E, /* 0x40 */
+ 0xBE4F, 0xBE50, 0xBE51, 0xBE52, 0xBE53, 0xBE54, 0xBE55, 0xBE56, /* 0x40 */
+ 0xBE57, 0xBE58, 0xBE59, 0xBE5A, 0xBE61, 0xBE62, 0xBE63, 0xBE64, /* 0x50 */
+ 0xBE65, 0xBE66, 0xBE67, 0xBE68, 0xC7A5, 0xBE69, 0xBE6A, 0xBE6B, /* 0x50 */
+ 0xC7A6, 0xBE6C, 0xBE6D, 0xBE6E, 0xC7A7, 0xBE6F, 0xBE70, 0xBE71, /* 0x60 */
+ 0xBE72, 0xBE73, 0xBE74, 0xBE75, 0xBE76, 0xC7A8, 0xBE77, 0xC7A9, /* 0x60 */
+ 0xBE78, 0xBE79, 0xBE7A, 0xBE81, 0xBE82, 0xBE83, 0xBE84, 0xBE85, /* 0x70 */
+ 0xC7AA, 0xC7AB, 0xBE86, 0xBE87, 0xC7AC, 0xBE88, 0xBE89, 0xC7AD, /* 0x70 */
+ 0xC7AE, 0xBE8A, 0xC7AF, 0xBE8B, 0xBE8C, 0xBE8D, 0xBE8E, 0xBE8F, /* 0x80 */
+ 0xC7B0, 0xC7B1, 0xBE90, 0xC7B2, 0xBE91, 0xC7B3, 0xBE92, 0xBE93, /* 0x80 */
+ 0xBE94, 0xBE95, 0xBE96, 0xBE97, 0xC7B4, 0xBE98, 0xBE99, 0xBE9A, /* 0x90 */
+ 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F, 0xBEA0, 0xBF41, 0xBF42, /* 0x90 */
+ 0xBF43, 0xBF44, 0xBF45, 0xBF46, 0xBF47, 0xBF48, 0xBF49, 0xBF4A, /* 0xA0 */
+ 0xBF4B, 0xC7B5, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF50, 0xBF51, /* 0xA0 */
+ 0xBF52, 0xBF53, 0xBF54, 0xBF55, 0xBF56, 0xBF57, 0xBF58, 0xBF59, /* 0xB0 */
+ 0xBF5A, 0xBF61, 0xBF62, 0xBF63, 0xBF64, 0xBF65, 0xBF66, 0xBF67, /* 0xB0 */
+ 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, 0xBF6D, 0xBF6E, 0xBF6F, /* 0xC0 */
+ 0xBF70, 0xBF71, 0xBF72, 0xBF73, 0xC7B6, 0xBF74, 0xBF75, 0xBF76, /* 0xC0 */
+ 0xC7B7, 0xBF77, 0xBF78, 0xBF79, 0xC7B8, 0xBF7A, 0xBF81, 0xBF82, /* 0xD0 */
+ 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xC7B9, 0xBF87, 0xBF88, 0xC7BA, /* 0xD0 */
+ 0xBF89, 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, /* 0xE0 */
+ 0xC7BB, 0xBF91, 0xBF92, 0xBF93, 0xC7BC, 0xBF94, 0xBF95, 0xBF96, /* 0xE0 */
+ 0xC7BD, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, 0xBF9B, 0xBF9C, 0xBF9D, /* 0xF0 */
+ 0xC7BE, 0xBF9E, 0xBF9F, 0xC7BF, 0xBFA0, 0xC7C0, 0xC041, 0xC042 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_D5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC043, 0xC044, 0xC045, 0xC046, 0xC7C1, 0xC047, 0xC048, 0xC049, /* 0x00 */
+ 0xC7C2, 0xC04A, 0xC04B, 0xC04C, 0xC7C3, 0xC04D, 0xC04E, 0xC04F, /* 0x00 */
+ 0xC050, 0xC051, 0xC052, 0xC053, 0xC7C4, 0xC7C5, 0xC054, 0xC7C6, /* 0x10 */
+ 0xC055, 0xC056, 0xC057, 0xC058, 0xC059, 0xC05A, 0xC061, 0xC062, /* 0x10 */
+ 0xC063, 0xC064, 0xC065, 0xC066, 0xC067, 0xC068, 0xC069, 0xC06A, /* 0x20 */
+ 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, 0xC071, 0xC072, /* 0x20 */
+ 0xC073, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, 0xC07A, /* 0x30 */
+ 0xC081, 0xC082, 0xC083, 0xC084, 0xC7C7, 0xC7C8, 0xC085, 0xC086, /* 0x30 */
+ 0xC7C9, 0xC087, 0xC088, 0xC089, 0xC7CA, 0xC08A, 0xC08B, 0xC08C, /* 0x40 */
+ 0xC08D, 0xC08E, 0xC08F, 0xC090, 0xC7CB, 0xC7CC, 0xC091, 0xC7CD, /* 0x40 */
+ 0xC092, 0xC7CE, 0xC093, 0xC094, 0xC095, 0xC096, 0xC097, 0xC098, /* 0x50 */
+ 0xC7CF, 0xC7D0, 0xC099, 0xC09A, 0xC7D1, 0xC09B, 0xC09C, 0xC09D, /* 0x50 */
+ 0xC7D2, 0xC09E, 0xC09F, 0xC0A0, 0xC141, 0xC7D3, 0xC142, 0xC143, /* 0x60 */
+ 0xC7D4, 0xC7D5, 0xC144, 0xC7D6, 0xC145, 0xC7D7, 0xC146, 0xC147, /* 0x60 */
+ 0xC148, 0xC149, 0xC14A, 0xC14B, 0xC7D8, 0xC7D9, 0xC14C, 0xC14D, /* 0x70 */
+ 0xC7DA, 0xC14E, 0xC14F, 0xC150, 0xC7DB, 0xC151, 0xC152, 0xC153, /* 0x70 */
+ 0xC154, 0xC155, 0xC156, 0xC157, 0xC7DC, 0xC7DD, 0xC158, 0xC7DE, /* 0x80 */
+ 0xC7DF, 0xC7E0, 0xC159, 0xC15A, 0xC161, 0xC162, 0xC163, 0xC164, /* 0x80 */
+ 0xC7E1, 0xC165, 0xC166, 0xC167, 0xC168, 0xC169, 0xC16A, 0xC16B, /* 0x90 */
+ 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0xC170, 0xC171, 0xC172, 0xC173, /* 0x90 */
+ 0xC174, 0xC175, 0xC176, 0xC177, 0xC178, 0xC7E2, 0xC179, 0xC17A, /* 0xA0 */
+ 0xC181, 0xC182, 0xC183, 0xC184, 0xC185, 0xC186, 0xC187, 0xC188, /* 0xA0 */
+ 0xC189, 0xC18A, 0xC18B, 0xC18C, 0xC18D, 0xC18E, 0xC18F, 0xC190, /* 0xB0 */
+ 0xC191, 0xC192, 0xC193, 0xC194, 0xC195, 0xC196, 0xC197, 0xC198, /* 0xB0 */
+ 0xC199, 0xC19A, 0xC19B, 0xC19C, 0xC19D, 0xC19E, 0xC19F, 0xC1A0, /* 0xC0 */
+ 0xC7E3, 0xC7E4, 0xC241, 0xC242, 0xC7E5, 0xC243, 0xC244, 0xC245, /* 0xC0 */
+ 0xC7E6, 0xC246, 0xC7E7, 0xC247, 0xC248, 0xC249, 0xC24A, 0xC24B, /* 0xD0 */
+ 0xC7E8, 0xC7E9, 0xC24C, 0xC7EA, 0xC24D, 0xC7EB, 0xC24E, 0xC24F, /* 0xD0 */
+ 0xC250, 0xC251, 0xC252, 0xC253, 0xC7EC, 0xC7ED, 0xC254, 0xC255, /* 0xE0 */
+ 0xC7EE, 0xC256, 0xC257, 0xC258, 0xC7EF, 0xC259, 0xC25A, 0xC261, /* 0xE0 */
+ 0xC262, 0xC263, 0xC264, 0xC265, 0xC7F0, 0xC7F1, 0xC266, 0xC7F2, /* 0xF0 */
+ 0xC267, 0xC7F3, 0xC268, 0xC269, 0xC26A, 0xC26B, 0xC26C, 0xC26D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_D6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7F4, 0xC7F5, 0xC26E, 0xC26F, 0xC7F6, 0xC270, 0xC271, 0xC272, /* 0x00 */
+ 0xC7F7, 0xC273, 0xC274, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, /* 0x00 */
+ 0xC7F8, 0xC7F9, 0xC27A, 0xC7FA, 0xC7FB, 0xC7FC, 0xC281, 0xC282, /* 0x10 */
+ 0xC283, 0xC284, 0xC285, 0xC286, 0xC7FD, 0xC287, 0xC288, 0xC289, /* 0x10 */
+ 0xC7FE, 0xC28A, 0xC28B, 0xC28C, 0xC8A1, 0xC28D, 0xC28E, 0xC28F, /* 0x20 */
+ 0xC290, 0xC291, 0xC292, 0xC293, 0xC294, 0xC8A2, 0xC295, 0xC296, /* 0x20 */
+ 0xC297, 0xC298, 0xC299, 0xC29A, 0xC29B, 0xC29C, 0xC29D, 0xC29E, /* 0x30 */
+ 0xC8A3, 0xC8A4, 0xC29F, 0xC2A0, 0xC8A5, 0xC341, 0xC342, 0xC343, /* 0x30 */
+ 0xC8A6, 0xC344, 0xC345, 0xC346, 0xC347, 0xC8A7, 0xC348, 0xC349, /* 0x40 */
+ 0xC8A8, 0xC8A9, 0xC34A, 0xC8AA, 0xC34B, 0xC8AB, 0xC34C, 0xC34D, /* 0x40 */
+ 0xC34E, 0xC8AC, 0xC34F, 0xC350, 0xC8AD, 0xC8AE, 0xC351, 0xC352, /* 0x50 */
+ 0xC8AF, 0xC353, 0xC354, 0xC355, 0xC8B0, 0xC356, 0xC357, 0xC358, /* 0x50 */
+ 0xC359, 0xC35A, 0xC361, 0xC362, 0xC363, 0xC364, 0xC365, 0xC8B1, /* 0x60 */
+ 0xC366, 0xC8B2, 0xC367, 0xC368, 0xC369, 0xC36A, 0xC36B, 0xC36C, /* 0x60 */
+ 0xC8B3, 0xC8B4, 0xC36D, 0xC36E, 0xC8B5, 0xC36F, 0xC370, 0xC371, /* 0x70 */
+ 0xC372, 0xC373, 0xC374, 0xC375, 0xC376, 0xC377, 0xC378, 0xC379, /* 0x70 */
+ 0xC37A, 0xC381, 0xC382, 0xC8B6, 0xC383, 0xC8B7, 0xC384, 0xC385, /* 0x80 */
+ 0xC386, 0xC387, 0xC388, 0xC389, 0xC8B8, 0xC8B9, 0xC38A, 0xC38B, /* 0x80 */
+ 0xC8BA, 0xC38C, 0xC38D, 0xC38E, 0xC8BB, 0xC38F, 0xC390, 0xC391, /* 0x90 */
+ 0xC392, 0xC393, 0xC394, 0xC395, 0xC396, 0xC8BC, 0xC397, 0xC8BD, /* 0x90 */
+ 0xC398, 0xC8BE, 0xC399, 0xC39A, 0xC39B, 0xC39C, 0xC39D, 0xC39E, /* 0xA0 */
+ 0xC8BF, 0xC39F, 0xC3A0, 0xC441, 0xC8C0, 0xC442, 0xC443, 0xC444, /* 0xA0 */
+ 0xC8C1, 0xC445, 0xC446, 0xC447, 0xC448, 0xC449, 0xC44A, 0xC44B, /* 0xB0 */
+ 0xC44C, 0xC8C2, 0xC44D, 0xC8C3, 0xC44E, 0xC44F, 0xC450, 0xC451, /* 0xB0 */
+ 0xC452, 0xC453, 0xC454, 0xC455, 0xC8C4, 0xC8C5, 0xC456, 0xC457, /* 0xC0 */
+ 0xC8C6, 0xC458, 0xC459, 0xC45A, 0xC8C7, 0xC461, 0xC462, 0xC463, /* 0xC0 */
+ 0xC464, 0xC8C8, 0xC465, 0xC466, 0xC8C9, 0xC467, 0xC468, 0xC8CA, /* 0xD0 */
+ 0xC469, 0xC8CB, 0xC46A, 0xC46B, 0xC46C, 0xC46D, 0xC46E, 0xC46F, /* 0xD0 */
+ 0xC8CC, 0xC470, 0xC471, 0xC472, 0xC8CD, 0xC473, 0xC474, 0xC475, /* 0xE0 */
+ 0xC8CE, 0xC476, 0xC477, 0xC478, 0xC479, 0xC47A, 0xC481, 0xC482, /* 0xE0 */
+ 0xC8CF, 0xC483, 0xC484, 0xC485, 0xC486, 0xC8D0, 0xC487, 0xC488, /* 0xF0 */
+ 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC8D1, 0xC8D2, 0xC48D, 0xC48E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_D7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC8D3, 0xC48F, 0xC490, 0xC491, 0xC8D4, 0xC492, 0xC493, 0xC494, /* 0x00 */
+ 0xC495, 0xC496, 0xC497, 0xC498, 0xC499, 0xC49A, 0xC49B, 0xC49C, /* 0x00 */
+ 0xC49D, 0xC8D5, 0xC49E, 0xC49F, 0xC4A0, 0xC541, 0xC542, 0xC543, /* 0x10 */
+ 0xC8D6, 0xC8D7, 0xC544, 0xC545, 0xC8D8, 0xC546, 0xC547, 0xC548, /* 0x10 */
+ 0xC8D9, 0xC549, 0xC54A, 0xC54B, 0xC54C, 0xC54D, 0xC54E, 0xC54F, /* 0x20 */
+ 0xC8DA, 0xC8DB, 0xC550, 0xC8DC, 0xC551, 0xC8DD, 0xC552, 0xC553, /* 0x20 */
+ 0xC554, 0xC555, 0xC556, 0xC557, 0xC8DE, 0xC8DF, 0xC558, 0xC559, /* 0x30 */
+ 0xC8E0, 0xC55A, 0xC561, 0xC562, 0xC8E1, 0xC563, 0xC564, 0xC565, /* 0x30 */
+ 0xC566, 0xC567, 0xC568, 0xC569, 0xC8E2, 0xC56A, 0xC56B, 0xC8E3, /* 0x40 */
+ 0xC56C, 0xC8E4, 0xC56D, 0xC56E, 0xC56F, 0xC570, 0xC571, 0xC572, /* 0x40 */
+ 0xC8E5, 0xC8E6, 0xC573, 0xC574, 0xC8E7, 0xC575, 0xC8E8, 0xC8E9, /* 0x50 */
+ 0xC8EA, 0xC8EB, 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC581, /* 0x50 */
+ 0xC8EC, 0xC8ED, 0xC582, 0xC8EE, 0xC583, 0xC8EF, 0xC584, 0xC585, /* 0x60 */
+ 0xC586, 0xC8F0, 0xC587, 0xC588, 0xC8F1, 0xC589, 0xC58A, 0xC58B, /* 0x60 */
+ 0xC8F2, 0xC58C, 0xC58D, 0xC58E, 0xC8F3, 0xC58F, 0xC590, 0xC591, /* 0x70 */
+ 0xC592, 0xC593, 0xC594, 0xC595, 0xC8F4, 0xC8F5, 0xC596, 0xC597, /* 0x70 */
+ 0xC598, 0xC8F6, 0xC599, 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC59E, /* 0x80 */
+ 0xC8F7, 0xC8F8, 0xC59F, 0xC5A0, 0xC8F9, 0xC641, 0xC642, 0xC643, /* 0x80 */
+ 0xC8FA, 0xC644, 0xC645, 0xC646, 0xC647, 0xC648, 0xC649, 0xC64A, /* 0x90 */
+ 0xC8FB, 0xC8FC, 0xC64B, 0xC8FD, 0xC64C, 0xC8FE, 0xC64D, 0xC64E, /* 0x90 */
+ 0xC64F, 0xC650, 0xC651, 0xC652 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCBD0, 0xCBD6, 0xCBE7, 0xCDCF, 0xCDE8, 0xCEAD, 0xCFFB, 0xD0A2, /* 0x00 */
+ 0xD0B8, 0xD0D0, 0xD0DD, 0xD1D4, 0xD1D5, 0xD1D8, 0xD1DB, 0xD1DC, /* 0x00 */
+ 0xD1DD, 0xD1DE, 0xD1DF, 0xD1E0, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, /* 0x10 */
+ 0xD1E6, 0xD1E8, 0xD1E9, 0xD1EA, 0xD1EB, 0xD1ED, 0xD1EF, 0xD1F0, /* 0x10 */
+ 0xD1F2, 0xD1F6, 0xD1FA, 0xD1FC, 0xD1FD, 0xD1FE, 0xD2A2, 0xD2A3, /* 0x20 */
+ 0xD2A7, 0xD2A8, 0xD2A9, 0xD2AA, 0xD2AB, 0xD2AD, 0xD2B2, 0xD2BE, /* 0x20 */
+ 0xD2C2, 0xD2C3, 0xD2C4, 0xD2C6, 0xD2C7, 0xD2C8, 0xD2C9, 0xD2CA, /* 0x30 */
+ 0xD2CB, 0xD2CD, 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1, 0xD2D2, 0xD2D3, /* 0x30 */
+ 0xD2D4, 0xD2D5, 0xD2D6, 0xD2D7, 0xD2D9, 0xD2DA, 0xD2DE, 0xD2DF, /* 0x40 */
+ 0xD2E1, 0xD2E2, 0xD2E4, 0xD2E5, 0xD2E6, 0xD2E7, 0xD2E8, 0xD2E9, /* 0x40 */
+ 0xD2EA, 0xD2EB, 0xD2F0, 0xD2F1, 0xD2F2, 0xD2F3, 0xD2F4, 0xD2F5, /* 0x50 */
+ 0xD2F7, 0xD2F8, 0xD4E6, 0xD4FC, 0xD5A5, 0xD5AB, 0xD5AE, 0xD6B8, /* 0x50 */
+ 0xD6CD, 0xD7CB, 0xD7E4, 0xDBC5, 0xDBE4, 0xDCA5, 0xDDA5, 0xDDD5, /* 0x60 */
+ 0xDDF4, 0xDEFC, 0xDEFE, 0xDFB3, 0xDFE1, 0xDFE8, 0xE0F1, 0xE1AD, /* 0x60 */
+ 0xE1ED, 0xE3F5, 0xE4A1, 0xE4A9, 0xE5AE, 0xE5B1, 0xE5B2, 0xE5B9, /* 0x70 */
+ 0xE5BB, 0xE5BC, 0xE5C4, 0xE5CE, 0xE5D0, 0xE5D2, 0xE5D6, 0xE5FA, /* 0x70 */
+ 0xE5FB, 0xE5FC, 0xE5FE, 0xE6A1, 0xE6A4, 0xE6A7, 0xE6AD, 0xE6AF, /* 0x80 */
+ 0xE6B0, 0xE6B1, 0xE6B3, 0xE6B7, 0xE6B8, 0xE6BC, 0xE6C4, 0xE6C6, /* 0x80 */
+ 0xE6C7, 0xE6CA, 0xE6D2, 0xE6D6, 0xE6D9, 0xE6DC, 0xE6DF, 0xE6E1, /* 0x90 */
+ 0xE6E4, 0xE6E5, 0xE6E6, 0xE6E8, 0xE6EA, 0xE6EB, 0xE6EC, 0xE6EF, /* 0x90 */
+ 0xE6F1, 0xE6F2, 0xE6F5, 0xE6F6, 0xE6F7, 0xE6F9, 0xE7A1, 0xE7A6, /* 0xA0 */
+ 0xE7A9, 0xE7AA, 0xE7AC, 0xE7AD, 0xE7B0, 0xE7BF, 0xE7C1, 0xE7C6, /* 0xA0 */
+ 0xE7C7, 0xE7CB, 0xE7CD, 0xE7CF, 0xE7D0, 0xE7D3, 0xE7DF, 0xE7E4, /* 0xB0 */
+ 0xE7E6, 0xE7F7, 0xE8E7, 0xE8E8, 0xE8F0, 0xE8F1, 0xE8F7, 0xE8F9, /* 0xB0 */
+ 0xE8FB, 0xE8FE, 0xE9A7, 0xE9AC, 0xE9CC, 0xE9F7, 0xEAC1, 0xEAE5, /* 0xC0 */
+ 0xEAF4, 0xEAF7, 0xEAFC, 0xEAFE, 0xEBA4, 0xEBA7, 0xEBA9, 0xEBAA, /* 0xC0 */
+ 0xEBBA, 0xEBBB, 0xEBBD, 0xEBC1, 0xEBC2, 0xEBC6, 0xEBC7, 0xEBCC, /* 0xD0 */
+ 0xEBCF, 0xEBD0, 0xEBD1, 0xEBD2, 0xEBD8, 0xECA6, 0xECA7, 0xECAA, /* 0xD0 */
+ 0xECAF, 0xECB0, 0xECB1, 0xECB2, 0xECB5, 0xECB8, 0xECBA, 0xECC0, /* 0xE0 */
+ 0xECC1, 0xECC5, 0xECC6, 0xECC9, 0xECCA, 0xECD5, 0xECDD, 0xECDE, /* 0xE0 */
+ 0xECE1, 0xECE4, 0xECE7, 0xECE8, 0xECF7, 0xECF8, 0xECFA, 0xEDA1, /* 0xF0 */
+ 0xEDA2, 0xEDA3, 0xEDEE, 0xEEDB, 0xF2BD, 0xF2FA, 0xF3B1, 0xF4A7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_FA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF4EE, 0xF6F4, 0xF6F6, 0xF7B8, 0xF7C8, 0xF7D3, 0xF8DB, 0xF8F0, /* 0x00 */
+ 0xFAA1, 0xFAA2, 0xFAE6, 0xFCA9 /* 0x00 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_KSC5601_FF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA3A1, 0xA3A2, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA3A7, /* 0x00 */
+ 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, /* 0x00 */
+ 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, /* 0x10 */
+ 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF, /* 0x10 */
+ 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, 0xA3C5, 0xA3C6, 0xA3C7, /* 0x20 */
+ 0xA3C8, 0xA3C9, 0xA3CA, 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF, /* 0x20 */
+ 0xA3D0, 0xA3D1, 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, 0xA3D7, /* 0x30 */
+ 0xA3D8, 0xA3D9, 0xA3DA, 0xA3DB, 0xA1AC, 0xA3DD, 0xA3DE, 0xA3DF, /* 0x30 */
+ 0xA3E0, 0xA3E1, 0xA3E2, 0xA3E3, 0xA3E4, 0xA3E5, 0xA3E6, 0xA3E7, /* 0x40 */
+ 0xA3E8, 0xA3E9, 0xA3EA, 0xA3EB, 0xA3EC, 0xA3ED, 0xA3EE, 0xA3EF, /* 0x40 */
+ 0xA3F0, 0xA3F1, 0xA3F2, 0xA3F3, 0xA3F4, 0xA3F5, 0xA3F6, 0xA3F7, /* 0x50 */
+ 0xA3F8, 0xA3F9, 0xA3FA, 0xA3FB, 0xA3FC, 0xA3FD, 0xA2A6, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xA1CB, 0xA1CC, 0xA1FE, 0xA3FE, 0, 0xA1CD, 0xA3DC /* 0xE0 */
+};
+
diff --git a/sal/textenc/tcvtkr4.tab b/sal/textenc/tcvtkr4.tab
new file mode 100644
index 000000000..0bea24e74
--- /dev/null
+++ b/sal/textenc/tcvtkr4.tab
@@ -0,0 +1,3494 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the DBCS to UniCode tables for the following */
+/* korean charsets: */
+/* JOHAB */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3133, 0, 0x3135, 0x3136, /* 0x40 */
+ 0, 0, 0x313A, 0x313B, 0x313C, 0x313D, 0x313E, 0x313F, /* 0x40 */
+ 0x3140, 0, 0, 0, 0x3144, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x314F, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x3150, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x3151, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x3152, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x3153 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3154, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x3155, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x3156, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x3157, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x3158, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x3159 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x315A, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x315B, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x315C, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x315D, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x315E, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x315F /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3160, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0x3161, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0x3162, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x3163 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3131, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xAC00, 0xAC01, 0xAC02, 0xAC03, 0xAC04, 0xAC05, 0xAC06, /* 0x60 */
+ 0xAC07, 0xAC08, 0xAC09, 0xAC0A, 0xAC0B, 0xAC0C, 0xAC0D, 0xAC0E, /* 0x60 */
+ 0xAC0F, 0xAC10, 0, 0xAC11, 0xAC12, 0xAC13, 0xAC14, 0xAC15, /* 0x70 */
+ 0xAC16, 0xAC17, 0xAC18, 0xAC19, 0xAC1A, 0xAC1B, 0, 0, /* 0x70 */
+ 0, 0xAC1C, 0xAC1D, 0xAC1E, 0xAC1F, 0xAC20, 0xAC21, 0xAC22, /* 0x80 */
+ 0xAC23, 0xAC24, 0xAC25, 0xAC26, 0xAC27, 0xAC28, 0xAC29, 0xAC2A, /* 0x80 */
+ 0xAC2B, 0xAC2C, 0, 0xAC2D, 0xAC2E, 0xAC2F, 0xAC30, 0xAC31, /* 0x90 */
+ 0xAC32, 0xAC33, 0xAC34, 0xAC35, 0xAC36, 0xAC37, 0, 0, /* 0x90 */
+ 0, 0xAC38, 0xAC39, 0xAC3A, 0xAC3B, 0xAC3C, 0xAC3D, 0xAC3E, /* 0xA0 */
+ 0xAC3F, 0xAC40, 0xAC41, 0xAC42, 0xAC43, 0xAC44, 0xAC45, 0xAC46, /* 0xA0 */
+ 0xAC47, 0xAC48, 0, 0xAC49, 0xAC4A, 0xAC4B, 0xAC4C, 0xAC4D, /* 0xB0 */
+ 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, 0xAC52, 0xAC53, 0, 0, /* 0xB0 */
+ 0, 0xAC54, 0xAC55, 0xAC56, 0xAC57, 0xAC58, 0xAC59, 0xAC5A, /* 0xC0 */
+ 0xAC5B, 0xAC5C, 0xAC5D, 0xAC5E, 0xAC5F, 0xAC60, 0xAC61, 0xAC62, /* 0xC0 */
+ 0xAC63, 0xAC64, 0, 0xAC65, 0xAC66, 0xAC67, 0xAC68, 0xAC69, /* 0xD0 */
+ 0xAC6A, 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E, 0xAC6F, 0, 0, /* 0xD0 */
+ 0, 0xAC70, 0xAC71, 0xAC72, 0xAC73, 0xAC74, 0xAC75, 0xAC76, /* 0xE0 */
+ 0xAC77, 0xAC78, 0xAC79, 0xAC7A, 0xAC7B, 0xAC7C, 0xAC7D, 0xAC7E, /* 0xE0 */
+ 0xAC7F, 0xAC80, 0, 0xAC81, 0xAC82, 0xAC83, 0xAC84, 0xAC85, /* 0xF0 */
+ 0xAC86, 0xAC87, 0xAC88, 0xAC89, 0xAC8A, 0xAC8B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, 0xAC91, 0xAC92, /* 0x40 */
+ 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xAC97, 0xAC98, 0xAC99, 0xAC9A, /* 0x40 */
+ 0xAC9B, 0xAC9C, 0, 0xAC9D, 0xAC9E, 0xAC9F, 0xACA0, 0xACA1, /* 0x50 */
+ 0xACA2, 0xACA3, 0xACA4, 0xACA5, 0xACA6, 0xACA7, 0, 0, /* 0x50 */
+ 0, 0xACA8, 0xACA9, 0xACAA, 0xACAB, 0xACAC, 0xACAD, 0xACAE, /* 0x60 */
+ 0xACAF, 0xACB0, 0xACB1, 0xACB2, 0xACB3, 0xACB4, 0xACB5, 0xACB6, /* 0x60 */
+ 0xACB7, 0xACB8, 0, 0xACB9, 0xACBA, 0xACBB, 0xACBC, 0xACBD, /* 0x70 */
+ 0xACBE, 0xACBF, 0xACC0, 0xACC1, 0xACC2, 0xACC3, 0, 0, /* 0x70 */
+ 0, 0xACC4, 0xACC5, 0xACC6, 0xACC7, 0xACC8, 0xACC9, 0xACCA, /* 0x80 */
+ 0xACCB, 0xACCC, 0xACCD, 0xACCE, 0xACCF, 0xACD0, 0xACD1, 0xACD2, /* 0x80 */
+ 0xACD3, 0xACD4, 0, 0xACD5, 0xACD6, 0xACD7, 0xACD8, 0xACD9, /* 0x90 */
+ 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACDE, 0xACDF, 0, 0, /* 0x90 */
+ 0, 0xACE0, 0xACE1, 0xACE2, 0xACE3, 0xACE4, 0xACE5, 0xACE6, /* 0xA0 */
+ 0xACE7, 0xACE8, 0xACE9, 0xACEA, 0xACEB, 0xACEC, 0xACED, 0xACEE, /* 0xA0 */
+ 0xACEF, 0xACF0, 0, 0xACF1, 0xACF2, 0xACF3, 0xACF4, 0xACF5, /* 0xB0 */
+ 0xACF6, 0xACF7, 0xACF8, 0xACF9, 0xACFA, 0xACFB, 0, 0, /* 0xB0 */
+ 0, 0xACFC, 0xACFD, 0xACFE, 0xACFF, 0xAD00, 0xAD01, 0xAD02, /* 0xC0 */
+ 0xAD03, 0xAD04, 0xAD05, 0xAD06, 0xAD07, 0xAD08, 0xAD09, 0xAD0A, /* 0xC0 */
+ 0xAD0B, 0xAD0C, 0, 0xAD0D, 0xAD0E, 0xAD0F, 0xAD10, 0xAD11, /* 0xD0 */
+ 0xAD12, 0xAD13, 0xAD14, 0xAD15, 0xAD16, 0xAD17, 0, 0, /* 0xD0 */
+ 0, 0xAD18, 0xAD19, 0xAD1A, 0xAD1B, 0xAD1C, 0xAD1D, 0xAD1E, /* 0xE0 */
+ 0xAD1F, 0xAD20, 0xAD21, 0xAD22, 0xAD23, 0xAD24, 0xAD25, 0xAD26, /* 0xE0 */
+ 0xAD27, 0xAD28, 0, 0xAD29, 0xAD2A, 0xAD2B, 0xAD2C, 0xAD2D, /* 0xF0 */
+ 0xAD2E, 0xAD2F, 0xAD30, 0xAD31, 0xAD32, 0xAD33 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAD34, 0xAD35, 0xAD36, 0xAD37, 0xAD38, 0xAD39, 0xAD3A, /* 0x40 */
+ 0xAD3B, 0xAD3C, 0xAD3D, 0xAD3E, 0xAD3F, 0xAD40, 0xAD41, 0xAD42, /* 0x40 */
+ 0xAD43, 0xAD44, 0, 0xAD45, 0xAD46, 0xAD47, 0xAD48, 0xAD49, /* 0x50 */
+ 0xAD4A, 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0, 0, /* 0x50 */
+ 0, 0xAD50, 0xAD51, 0xAD52, 0xAD53, 0xAD54, 0xAD55, 0xAD56, /* 0x60 */
+ 0xAD57, 0xAD58, 0xAD59, 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, /* 0x60 */
+ 0xAD5F, 0xAD60, 0, 0xAD61, 0xAD62, 0xAD63, 0xAD64, 0xAD65, /* 0x70 */
+ 0xAD66, 0xAD67, 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0, 0, /* 0x70 */
+ 0, 0xAD6C, 0xAD6D, 0xAD6E, 0xAD6F, 0xAD70, 0xAD71, 0xAD72, /* 0x80 */
+ 0xAD73, 0xAD74, 0xAD75, 0xAD76, 0xAD77, 0xAD78, 0xAD79, 0xAD7A, /* 0x80 */
+ 0xAD7B, 0xAD7C, 0, 0xAD7D, 0xAD7E, 0xAD7F, 0xAD80, 0xAD81, /* 0x90 */
+ 0xAD82, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, 0, 0, /* 0x90 */
+ 0, 0xAD88, 0xAD89, 0xAD8A, 0xAD8B, 0xAD8C, 0xAD8D, 0xAD8E, /* 0xA0 */
+ 0xAD8F, 0xAD90, 0xAD91, 0xAD92, 0xAD93, 0xAD94, 0xAD95, 0xAD96, /* 0xA0 */
+ 0xAD97, 0xAD98, 0, 0xAD99, 0xAD9A, 0xAD9B, 0xAD9C, 0xAD9D, /* 0xB0 */
+ 0xAD9E, 0xAD9F, 0xADA0, 0xADA1, 0xADA2, 0xADA3, 0, 0, /* 0xB0 */
+ 0, 0xADA4, 0xADA5, 0xADA6, 0xADA7, 0xADA8, 0xADA9, 0xADAA, /* 0xC0 */
+ 0xADAB, 0xADAC, 0xADAD, 0xADAE, 0xADAF, 0xADB0, 0xADB1, 0xADB2, /* 0xC0 */
+ 0xADB3, 0xADB4, 0, 0xADB5, 0xADB6, 0xADB7, 0xADB8, 0xADB9, /* 0xD0 */
+ 0xADBA, 0xADBB, 0xADBC, 0xADBD, 0xADBE, 0xADBF, 0, 0, /* 0xD0 */
+ 0, 0xADC0, 0xADC1, 0xADC2, 0xADC3, 0xADC4, 0xADC5, 0xADC6, /* 0xE0 */
+ 0xADC7, 0xADC8, 0xADC9, 0xADCA, 0xADCB, 0xADCC, 0xADCD, 0xADCE, /* 0xE0 */
+ 0xADCF, 0xADD0, 0, 0xADD1, 0xADD2, 0xADD3, 0xADD4, 0xADD5, /* 0xF0 */
+ 0xADD6, 0xADD7, 0xADD8, 0xADD9, 0xADDA, 0xADDB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xADDC, 0xADDD, 0xADDE, 0xADDF, 0xADE0, 0xADE1, 0xADE2, /* 0x40 */
+ 0xADE3, 0xADE4, 0xADE5, 0xADE6, 0xADE7, 0xADE8, 0xADE9, 0xADEA, /* 0x40 */
+ 0xADEB, 0xADEC, 0, 0xADED, 0xADEE, 0xADEF, 0xADF0, 0xADF1, /* 0x50 */
+ 0xADF2, 0xADF3, 0xADF4, 0xADF5, 0xADF6, 0xADF7, 0, 0, /* 0x50 */
+ 0, 0xADF8, 0xADF9, 0xADFA, 0xADFB, 0xADFC, 0xADFD, 0xADFE, /* 0x60 */
+ 0xADFF, 0xAE00, 0xAE01, 0xAE02, 0xAE03, 0xAE04, 0xAE05, 0xAE06, /* 0x60 */
+ 0xAE07, 0xAE08, 0, 0xAE09, 0xAE0A, 0xAE0B, 0xAE0C, 0xAE0D, /* 0x70 */
+ 0xAE0E, 0xAE0F, 0xAE10, 0xAE11, 0xAE12, 0xAE13, 0, 0, /* 0x70 */
+ 0, 0xAE14, 0xAE15, 0xAE16, 0xAE17, 0xAE18, 0xAE19, 0xAE1A, /* 0x80 */
+ 0xAE1B, 0xAE1C, 0xAE1D, 0xAE1E, 0xAE1F, 0xAE20, 0xAE21, 0xAE22, /* 0x80 */
+ 0xAE23, 0xAE24, 0, 0xAE25, 0xAE26, 0xAE27, 0xAE28, 0xAE29, /* 0x90 */
+ 0xAE2A, 0xAE2B, 0xAE2C, 0xAE2D, 0xAE2E, 0xAE2F, 0, 0, /* 0x90 */
+ 0, 0xAE30, 0xAE31, 0xAE32, 0xAE33, 0xAE34, 0xAE35, 0xAE36, /* 0xA0 */
+ 0xAE37, 0xAE38, 0xAE39, 0xAE3A, 0xAE3B, 0xAE3C, 0xAE3D, 0xAE3E, /* 0xA0 */
+ 0xAE3F, 0xAE40, 0, 0xAE41, 0xAE42, 0xAE43, 0xAE44, 0xAE45, /* 0xB0 */
+ 0xAE46, 0xAE47, 0xAE48, 0xAE49, 0xAE4A, 0xAE4B /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3132, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xAE4C, 0xAE4D, 0xAE4E, 0xAE4F, 0xAE50, 0xAE51, 0xAE52, /* 0x60 */
+ 0xAE53, 0xAE54, 0xAE55, 0xAE56, 0xAE57, 0xAE58, 0xAE59, 0xAE5A, /* 0x60 */
+ 0xAE5B, 0xAE5C, 0, 0xAE5D, 0xAE5E, 0xAE5F, 0xAE60, 0xAE61, /* 0x70 */
+ 0xAE62, 0xAE63, 0xAE64, 0xAE65, 0xAE66, 0xAE67, 0, 0, /* 0x70 */
+ 0, 0xAE68, 0xAE69, 0xAE6A, 0xAE6B, 0xAE6C, 0xAE6D, 0xAE6E, /* 0x80 */
+ 0xAE6F, 0xAE70, 0xAE71, 0xAE72, 0xAE73, 0xAE74, 0xAE75, 0xAE76, /* 0x80 */
+ 0xAE77, 0xAE78, 0, 0xAE79, 0xAE7A, 0xAE7B, 0xAE7C, 0xAE7D, /* 0x90 */
+ 0xAE7E, 0xAE7F, 0xAE80, 0xAE81, 0xAE82, 0xAE83, 0, 0, /* 0x90 */
+ 0, 0xAE84, 0xAE85, 0xAE86, 0xAE87, 0xAE88, 0xAE89, 0xAE8A, /* 0xA0 */
+ 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xAE8F, 0xAE90, 0xAE91, 0xAE92, /* 0xA0 */
+ 0xAE93, 0xAE94, 0, 0xAE95, 0xAE96, 0xAE97, 0xAE98, 0xAE99, /* 0xB0 */
+ 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D, 0xAE9E, 0xAE9F, 0, 0, /* 0xB0 */
+ 0, 0xAEA0, 0xAEA1, 0xAEA2, 0xAEA3, 0xAEA4, 0xAEA5, 0xAEA6, /* 0xC0 */
+ 0xAEA7, 0xAEA8, 0xAEA9, 0xAEAA, 0xAEAB, 0xAEAC, 0xAEAD, 0xAEAE, /* 0xC0 */
+ 0xAEAF, 0xAEB0, 0, 0xAEB1, 0xAEB2, 0xAEB3, 0xAEB4, 0xAEB5, /* 0xD0 */
+ 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, 0xAEBA, 0xAEBB, 0, 0, /* 0xD0 */
+ 0, 0xAEBC, 0xAEBD, 0xAEBE, 0xAEBF, 0xAEC0, 0xAEC1, 0xAEC2, /* 0xE0 */
+ 0xAEC3, 0xAEC4, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8, 0xAEC9, 0xAECA, /* 0xE0 */
+ 0xAECB, 0xAECC, 0, 0xAECD, 0xAECE, 0xAECF, 0xAED0, 0xAED1, /* 0xF0 */
+ 0xAED2, 0xAED3, 0xAED4, 0xAED5, 0xAED6, 0xAED7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAED8, 0xAED9, 0xAEDA, 0xAEDB, 0xAEDC, 0xAEDD, 0xAEDE, /* 0x40 */
+ 0xAEDF, 0xAEE0, 0xAEE1, 0xAEE2, 0xAEE3, 0xAEE4, 0xAEE5, 0xAEE6, /* 0x40 */
+ 0xAEE7, 0xAEE8, 0, 0xAEE9, 0xAEEA, 0xAEEB, 0xAEEC, 0xAEED, /* 0x50 */
+ 0xAEEE, 0xAEEF, 0xAEF0, 0xAEF1, 0xAEF2, 0xAEF3, 0, 0, /* 0x50 */
+ 0, 0xAEF4, 0xAEF5, 0xAEF6, 0xAEF7, 0xAEF8, 0xAEF9, 0xAEFA, /* 0x60 */
+ 0xAEFB, 0xAEFC, 0xAEFD, 0xAEFE, 0xAEFF, 0xAF00, 0xAF01, 0xAF02, /* 0x60 */
+ 0xAF03, 0xAF04, 0, 0xAF05, 0xAF06, 0xAF07, 0xAF08, 0xAF09, /* 0x70 */
+ 0xAF0A, 0xAF0B, 0xAF0C, 0xAF0D, 0xAF0E, 0xAF0F, 0, 0, /* 0x70 */
+ 0, 0xAF10, 0xAF11, 0xAF12, 0xAF13, 0xAF14, 0xAF15, 0xAF16, /* 0x80 */
+ 0xAF17, 0xAF18, 0xAF19, 0xAF1A, 0xAF1B, 0xAF1C, 0xAF1D, 0xAF1E, /* 0x80 */
+ 0xAF1F, 0xAF20, 0, 0xAF21, 0xAF22, 0xAF23, 0xAF24, 0xAF25, /* 0x90 */
+ 0xAF26, 0xAF27, 0xAF28, 0xAF29, 0xAF2A, 0xAF2B, 0, 0, /* 0x90 */
+ 0, 0xAF2C, 0xAF2D, 0xAF2E, 0xAF2F, 0xAF30, 0xAF31, 0xAF32, /* 0xA0 */
+ 0xAF33, 0xAF34, 0xAF35, 0xAF36, 0xAF37, 0xAF38, 0xAF39, 0xAF3A, /* 0xA0 */
+ 0xAF3B, 0xAF3C, 0, 0xAF3D, 0xAF3E, 0xAF3F, 0xAF40, 0xAF41, /* 0xB0 */
+ 0xAF42, 0xAF43, 0xAF44, 0xAF45, 0xAF46, 0xAF47, 0, 0, /* 0xB0 */
+ 0, 0xAF48, 0xAF49, 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, /* 0xC0 */
+ 0xAF4F, 0xAF50, 0xAF51, 0xAF52, 0xAF53, 0xAF54, 0xAF55, 0xAF56, /* 0xC0 */
+ 0xAF57, 0xAF58, 0, 0xAF59, 0xAF5A, 0xAF5B, 0xAF5C, 0xAF5D, /* 0xD0 */
+ 0xAF5E, 0xAF5F, 0xAF60, 0xAF61, 0xAF62, 0xAF63, 0, 0, /* 0xD0 */
+ 0, 0xAF64, 0xAF65, 0xAF66, 0xAF67, 0xAF68, 0xAF69, 0xAF6A, /* 0xE0 */
+ 0xAF6B, 0xAF6C, 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xAF71, 0xAF72, /* 0xE0 */
+ 0xAF73, 0xAF74, 0, 0xAF75, 0xAF76, 0xAF77, 0xAF78, 0xAF79, /* 0xF0 */
+ 0xAF7A, 0xAF7B, 0xAF7C, 0xAF7D, 0xAF7E, 0xAF7F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAF80, 0xAF81, 0xAF82, 0xAF83, 0xAF84, 0xAF85, 0xAF86, /* 0x40 */
+ 0xAF87, 0xAF88, 0xAF89, 0xAF8A, 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, /* 0x40 */
+ 0xAF8F, 0xAF90, 0, 0xAF91, 0xAF92, 0xAF93, 0xAF94, 0xAF95, /* 0x50 */
+ 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, 0xAF9B, 0, 0, /* 0x50 */
+ 0, 0xAF9C, 0xAF9D, 0xAF9E, 0xAF9F, 0xAFA0, 0xAFA1, 0xAFA2, /* 0x60 */
+ 0xAFA3, 0xAFA4, 0xAFA5, 0xAFA6, 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, /* 0x60 */
+ 0xAFAB, 0xAFAC, 0, 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1, /* 0x70 */
+ 0xAFB2, 0xAFB3, 0xAFB4, 0xAFB5, 0xAFB6, 0xAFB7, 0, 0, /* 0x70 */
+ 0, 0xAFB8, 0xAFB9, 0xAFBA, 0xAFBB, 0xAFBC, 0xAFBD, 0xAFBE, /* 0x80 */
+ 0xAFBF, 0xAFC0, 0xAFC1, 0xAFC2, 0xAFC3, 0xAFC4, 0xAFC5, 0xAFC6, /* 0x80 */
+ 0xAFC7, 0xAFC8, 0, 0xAFC9, 0xAFCA, 0xAFCB, 0xAFCC, 0xAFCD, /* 0x90 */
+ 0xAFCE, 0xAFCF, 0xAFD0, 0xAFD1, 0xAFD2, 0xAFD3, 0, 0, /* 0x90 */
+ 0, 0xAFD4, 0xAFD5, 0xAFD6, 0xAFD7, 0xAFD8, 0xAFD9, 0xAFDA, /* 0xA0 */
+ 0xAFDB, 0xAFDC, 0xAFDD, 0xAFDE, 0xAFDF, 0xAFE0, 0xAFE1, 0xAFE2, /* 0xA0 */
+ 0xAFE3, 0xAFE4, 0, 0xAFE5, 0xAFE6, 0xAFE7, 0xAFE8, 0xAFE9, /* 0xB0 */
+ 0xAFEA, 0xAFEB, 0xAFEC, 0xAFED, 0xAFEE, 0xAFEF, 0, 0, /* 0xB0 */
+ 0, 0xAFF0, 0xAFF1, 0xAFF2, 0xAFF3, 0xAFF4, 0xAFF5, 0xAFF6, /* 0xC0 */
+ 0xAFF7, 0xAFF8, 0xAFF9, 0xAFFA, 0xAFFB, 0xAFFC, 0xAFFD, 0xAFFE, /* 0xC0 */
+ 0xAFFF, 0xB000, 0, 0xB001, 0xB002, 0xB003, 0xB004, 0xB005, /* 0xD0 */
+ 0xB006, 0xB007, 0xB008, 0xB009, 0xB00A, 0xB00B, 0, 0, /* 0xD0 */
+ 0, 0xB00C, 0xB00D, 0xB00E, 0xB00F, 0xB010, 0xB011, 0xB012, /* 0xE0 */
+ 0xB013, 0xB014, 0xB015, 0xB016, 0xB017, 0xB018, 0xB019, 0xB01A, /* 0xE0 */
+ 0xB01B, 0xB01C, 0, 0xB01D, 0xB01E, 0xB01F, 0xB020, 0xB021, /* 0xF0 */
+ 0xB022, 0xB023, 0xB024, 0xB025, 0xB026, 0xB027 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB028, 0xB029, 0xB02A, 0xB02B, 0xB02C, 0xB02D, 0xB02E, /* 0x40 */
+ 0xB02F, 0xB030, 0xB031, 0xB032, 0xB033, 0xB034, 0xB035, 0xB036, /* 0x40 */
+ 0xB037, 0xB038, 0, 0xB039, 0xB03A, 0xB03B, 0xB03C, 0xB03D, /* 0x50 */
+ 0xB03E, 0xB03F, 0xB040, 0xB041, 0xB042, 0xB043, 0, 0, /* 0x50 */
+ 0, 0xB044, 0xB045, 0xB046, 0xB047, 0xB048, 0xB049, 0xB04A, /* 0x60 */
+ 0xB04B, 0xB04C, 0xB04D, 0xB04E, 0xB04F, 0xB050, 0xB051, 0xB052, /* 0x60 */
+ 0xB053, 0xB054, 0, 0xB055, 0xB056, 0xB057, 0xB058, 0xB059, /* 0x70 */
+ 0xB05A, 0xB05B, 0xB05C, 0xB05D, 0xB05E, 0xB05F, 0, 0, /* 0x70 */
+ 0, 0xB060, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, 0xB066, /* 0x80 */
+ 0xB067, 0xB068, 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D, 0xB06E, /* 0x80 */
+ 0xB06F, 0xB070, 0, 0xB071, 0xB072, 0xB073, 0xB074, 0xB075, /* 0x90 */
+ 0xB076, 0xB077, 0xB078, 0xB079, 0xB07A, 0xB07B, 0, 0, /* 0x90 */
+ 0, 0xB07C, 0xB07D, 0xB07E, 0xB07F, 0xB080, 0xB081, 0xB082, /* 0xA0 */
+ 0xB083, 0xB084, 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, 0xB08A, /* 0xA0 */
+ 0xB08B, 0xB08C, 0, 0xB08D, 0xB08E, 0xB08F, 0xB090, 0xB091, /* 0xB0 */
+ 0xB092, 0xB093, 0xB094, 0xB095, 0xB096, 0xB097 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3134, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB098, 0xB099, 0xB09A, 0xB09B, 0xB09C, 0xB09D, 0xB09E, /* 0x60 */
+ 0xB09F, 0xB0A0, 0xB0A1, 0xB0A2, 0xB0A3, 0xB0A4, 0xB0A5, 0xB0A6, /* 0x60 */
+ 0xB0A7, 0xB0A8, 0, 0xB0A9, 0xB0AA, 0xB0AB, 0xB0AC, 0xB0AD, /* 0x70 */
+ 0xB0AE, 0xB0AF, 0xB0B0, 0xB0B1, 0xB0B2, 0xB0B3, 0, 0, /* 0x70 */
+ 0, 0xB0B4, 0xB0B5, 0xB0B6, 0xB0B7, 0xB0B8, 0xB0B9, 0xB0BA, /* 0x80 */
+ 0xB0BB, 0xB0BC, 0xB0BD, 0xB0BE, 0xB0BF, 0xB0C0, 0xB0C1, 0xB0C2, /* 0x80 */
+ 0xB0C3, 0xB0C4, 0, 0xB0C5, 0xB0C6, 0xB0C7, 0xB0C8, 0xB0C9, /* 0x90 */
+ 0xB0CA, 0xB0CB, 0xB0CC, 0xB0CD, 0xB0CE, 0xB0CF, 0, 0, /* 0x90 */
+ 0, 0xB0D0, 0xB0D1, 0xB0D2, 0xB0D3, 0xB0D4, 0xB0D5, 0xB0D6, /* 0xA0 */
+ 0xB0D7, 0xB0D8, 0xB0D9, 0xB0DA, 0xB0DB, 0xB0DC, 0xB0DD, 0xB0DE, /* 0xA0 */
+ 0xB0DF, 0xB0E0, 0, 0xB0E1, 0xB0E2, 0xB0E3, 0xB0E4, 0xB0E5, /* 0xB0 */
+ 0xB0E6, 0xB0E7, 0xB0E8, 0xB0E9, 0xB0EA, 0xB0EB, 0, 0, /* 0xB0 */
+ 0, 0xB0EC, 0xB0ED, 0xB0EE, 0xB0EF, 0xB0F0, 0xB0F1, 0xB0F2, /* 0xC0 */
+ 0xB0F3, 0xB0F4, 0xB0F5, 0xB0F6, 0xB0F7, 0xB0F8, 0xB0F9, 0xB0FA, /* 0xC0 */
+ 0xB0FB, 0xB0FC, 0, 0xB0FD, 0xB0FE, 0xB0FF, 0xB100, 0xB101, /* 0xD0 */
+ 0xB102, 0xB103, 0xB104, 0xB105, 0xB106, 0xB107, 0, 0, /* 0xD0 */
+ 0, 0xB108, 0xB109, 0xB10A, 0xB10B, 0xB10C, 0xB10D, 0xB10E, /* 0xE0 */
+ 0xB10F, 0xB110, 0xB111, 0xB112, 0xB113, 0xB114, 0xB115, 0xB116, /* 0xE0 */
+ 0xB117, 0xB118, 0, 0xB119, 0xB11A, 0xB11B, 0xB11C, 0xB11D, /* 0xF0 */
+ 0xB11E, 0xB11F, 0xB120, 0xB121, 0xB122, 0xB123 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB124, 0xB125, 0xB126, 0xB127, 0xB128, 0xB129, 0xB12A, /* 0x40 */
+ 0xB12B, 0xB12C, 0xB12D, 0xB12E, 0xB12F, 0xB130, 0xB131, 0xB132, /* 0x40 */
+ 0xB133, 0xB134, 0, 0xB135, 0xB136, 0xB137, 0xB138, 0xB139, /* 0x50 */
+ 0xB13A, 0xB13B, 0xB13C, 0xB13D, 0xB13E, 0xB13F, 0, 0, /* 0x50 */
+ 0, 0xB140, 0xB141, 0xB142, 0xB143, 0xB144, 0xB145, 0xB146, /* 0x60 */
+ 0xB147, 0xB148, 0xB149, 0xB14A, 0xB14B, 0xB14C, 0xB14D, 0xB14E, /* 0x60 */
+ 0xB14F, 0xB150, 0, 0xB151, 0xB152, 0xB153, 0xB154, 0xB155, /* 0x70 */
+ 0xB156, 0xB157, 0xB158, 0xB159, 0xB15A, 0xB15B, 0, 0, /* 0x70 */
+ 0, 0xB15C, 0xB15D, 0xB15E, 0xB15F, 0xB160, 0xB161, 0xB162, /* 0x80 */
+ 0xB163, 0xB164, 0xB165, 0xB166, 0xB167, 0xB168, 0xB169, 0xB16A, /* 0x80 */
+ 0xB16B, 0xB16C, 0, 0xB16D, 0xB16E, 0xB16F, 0xB170, 0xB171, /* 0x90 */
+ 0xB172, 0xB173, 0xB174, 0xB175, 0xB176, 0xB177, 0, 0, /* 0x90 */
+ 0, 0xB178, 0xB179, 0xB17A, 0xB17B, 0xB17C, 0xB17D, 0xB17E, /* 0xA0 */
+ 0xB17F, 0xB180, 0xB181, 0xB182, 0xB183, 0xB184, 0xB185, 0xB186, /* 0xA0 */
+ 0xB187, 0xB188, 0, 0xB189, 0xB18A, 0xB18B, 0xB18C, 0xB18D, /* 0xB0 */
+ 0xB18E, 0xB18F, 0xB190, 0xB191, 0xB192, 0xB193, 0, 0, /* 0xB0 */
+ 0, 0xB194, 0xB195, 0xB196, 0xB197, 0xB198, 0xB199, 0xB19A, /* 0xC0 */
+ 0xB19B, 0xB19C, 0xB19D, 0xB19E, 0xB19F, 0xB1A0, 0xB1A1, 0xB1A2, /* 0xC0 */
+ 0xB1A3, 0xB1A4, 0, 0xB1A5, 0xB1A6, 0xB1A7, 0xB1A8, 0xB1A9, /* 0xD0 */
+ 0xB1AA, 0xB1AB, 0xB1AC, 0xB1AD, 0xB1AE, 0xB1AF, 0, 0, /* 0xD0 */
+ 0, 0xB1B0, 0xB1B1, 0xB1B2, 0xB1B3, 0xB1B4, 0xB1B5, 0xB1B6, /* 0xE0 */
+ 0xB1B7, 0xB1B8, 0xB1B9, 0xB1BA, 0xB1BB, 0xB1BC, 0xB1BD, 0xB1BE, /* 0xE0 */
+ 0xB1BF, 0xB1C0, 0, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, 0xB1C5, /* 0xF0 */
+ 0xB1C6, 0xB1C7, 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB1CC, 0xB1CD, 0xB1CE, 0xB1CF, 0xB1D0, 0xB1D1, 0xB1D2, /* 0x40 */
+ 0xB1D3, 0xB1D4, 0xB1D5, 0xB1D6, 0xB1D7, 0xB1D8, 0xB1D9, 0xB1DA, /* 0x40 */
+ 0xB1DB, 0xB1DC, 0, 0xB1DD, 0xB1DE, 0xB1DF, 0xB1E0, 0xB1E1, /* 0x50 */
+ 0xB1E2, 0xB1E3, 0xB1E4, 0xB1E5, 0xB1E6, 0xB1E7, 0, 0, /* 0x50 */
+ 0, 0xB1E8, 0xB1E9, 0xB1EA, 0xB1EB, 0xB1EC, 0xB1ED, 0xB1EE, /* 0x60 */
+ 0xB1EF, 0xB1F0, 0xB1F1, 0xB1F2, 0xB1F3, 0xB1F4, 0xB1F5, 0xB1F6, /* 0x60 */
+ 0xB1F7, 0xB1F8, 0, 0xB1F9, 0xB1FA, 0xB1FB, 0xB1FC, 0xB1FD, /* 0x70 */
+ 0xB1FE, 0xB1FF, 0xB200, 0xB201, 0xB202, 0xB203, 0, 0, /* 0x70 */
+ 0, 0xB204, 0xB205, 0xB206, 0xB207, 0xB208, 0xB209, 0xB20A, /* 0x80 */
+ 0xB20B, 0xB20C, 0xB20D, 0xB20E, 0xB20F, 0xB210, 0xB211, 0xB212, /* 0x80 */
+ 0xB213, 0xB214, 0, 0xB215, 0xB216, 0xB217, 0xB218, 0xB219, /* 0x90 */
+ 0xB21A, 0xB21B, 0xB21C, 0xB21D, 0xB21E, 0xB21F, 0, 0, /* 0x90 */
+ 0, 0xB220, 0xB221, 0xB222, 0xB223, 0xB224, 0xB225, 0xB226, /* 0xA0 */
+ 0xB227, 0xB228, 0xB229, 0xB22A, 0xB22B, 0xB22C, 0xB22D, 0xB22E, /* 0xA0 */
+ 0xB22F, 0xB230, 0, 0xB231, 0xB232, 0xB233, 0xB234, 0xB235, /* 0xB0 */
+ 0xB236, 0xB237, 0xB238, 0xB239, 0xB23A, 0xB23B, 0, 0, /* 0xB0 */
+ 0, 0xB23C, 0xB23D, 0xB23E, 0xB23F, 0xB240, 0xB241, 0xB242, /* 0xC0 */
+ 0xB243, 0xB244, 0xB245, 0xB246, 0xB247, 0xB248, 0xB249, 0xB24A, /* 0xC0 */
+ 0xB24B, 0xB24C, 0, 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, /* 0xD0 */
+ 0xB252, 0xB253, 0xB254, 0xB255, 0xB256, 0xB257, 0, 0, /* 0xD0 */
+ 0, 0xB258, 0xB259, 0xB25A, 0xB25B, 0xB25C, 0xB25D, 0xB25E, /* 0xE0 */
+ 0xB25F, 0xB260, 0xB261, 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, /* 0xE0 */
+ 0xB267, 0xB268, 0, 0xB269, 0xB26A, 0xB26B, 0xB26C, 0xB26D, /* 0xF0 */
+ 0xB26E, 0xB26F, 0xB270, 0xB271, 0xB272, 0xB273 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB274, 0xB275, 0xB276, 0xB277, 0xB278, 0xB279, 0xB27A, /* 0x40 */
+ 0xB27B, 0xB27C, 0xB27D, 0xB27E, 0xB27F, 0xB280, 0xB281, 0xB282, /* 0x40 */
+ 0xB283, 0xB284, 0, 0xB285, 0xB286, 0xB287, 0xB288, 0xB289, /* 0x50 */
+ 0xB28A, 0xB28B, 0xB28C, 0xB28D, 0xB28E, 0xB28F, 0, 0, /* 0x50 */
+ 0, 0xB290, 0xB291, 0xB292, 0xB293, 0xB294, 0xB295, 0xB296, /* 0x60 */
+ 0xB297, 0xB298, 0xB299, 0xB29A, 0xB29B, 0xB29C, 0xB29D, 0xB29E, /* 0x60 */
+ 0xB29F, 0xB2A0, 0, 0xB2A1, 0xB2A2, 0xB2A3, 0xB2A4, 0xB2A5, /* 0x70 */
+ 0xB2A6, 0xB2A7, 0xB2A8, 0xB2A9, 0xB2AA, 0xB2AB, 0, 0, /* 0x70 */
+ 0, 0xB2AC, 0xB2AD, 0xB2AE, 0xB2AF, 0xB2B0, 0xB2B1, 0xB2B2, /* 0x80 */
+ 0xB2B3, 0xB2B4, 0xB2B5, 0xB2B6, 0xB2B7, 0xB2B8, 0xB2B9, 0xB2BA, /* 0x80 */
+ 0xB2BB, 0xB2BC, 0, 0xB2BD, 0xB2BE, 0xB2BF, 0xB2C0, 0xB2C1, /* 0x90 */
+ 0xB2C2, 0xB2C3, 0xB2C4, 0xB2C5, 0xB2C6, 0xB2C7, 0, 0, /* 0x90 */
+ 0, 0xB2C8, 0xB2C9, 0xB2CA, 0xB2CB, 0xB2CC, 0xB2CD, 0xB2CE, /* 0xA0 */
+ 0xB2CF, 0xB2D0, 0xB2D1, 0xB2D2, 0xB2D3, 0xB2D4, 0xB2D5, 0xB2D6, /* 0xA0 */
+ 0xB2D7, 0xB2D8, 0, 0xB2D9, 0xB2DA, 0xB2DB, 0xB2DC, 0xB2DD, /* 0xB0 */
+ 0xB2DE, 0xB2DF, 0xB2E0, 0xB2E1, 0xB2E2, 0xB2E3 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3137, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB2E4, 0xB2E5, 0xB2E6, 0xB2E7, 0xB2E8, 0xB2E9, 0xB2EA, /* 0x60 */
+ 0xB2EB, 0xB2EC, 0xB2ED, 0xB2EE, 0xB2EF, 0xB2F0, 0xB2F1, 0xB2F2, /* 0x60 */
+ 0xB2F3, 0xB2F4, 0, 0xB2F5, 0xB2F6, 0xB2F7, 0xB2F8, 0xB2F9, /* 0x70 */
+ 0xB2FA, 0xB2FB, 0xB2FC, 0xB2FD, 0xB2FE, 0xB2FF, 0, 0, /* 0x70 */
+ 0, 0xB300, 0xB301, 0xB302, 0xB303, 0xB304, 0xB305, 0xB306, /* 0x80 */
+ 0xB307, 0xB308, 0xB309, 0xB30A, 0xB30B, 0xB30C, 0xB30D, 0xB30E, /* 0x80 */
+ 0xB30F, 0xB310, 0, 0xB311, 0xB312, 0xB313, 0xB314, 0xB315, /* 0x90 */
+ 0xB316, 0xB317, 0xB318, 0xB319, 0xB31A, 0xB31B, 0, 0, /* 0x90 */
+ 0, 0xB31C, 0xB31D, 0xB31E, 0xB31F, 0xB320, 0xB321, 0xB322, /* 0xA0 */
+ 0xB323, 0xB324, 0xB325, 0xB326, 0xB327, 0xB328, 0xB329, 0xB32A, /* 0xA0 */
+ 0xB32B, 0xB32C, 0, 0xB32D, 0xB32E, 0xB32F, 0xB330, 0xB331, /* 0xB0 */
+ 0xB332, 0xB333, 0xB334, 0xB335, 0xB336, 0xB337, 0, 0, /* 0xB0 */
+ 0, 0xB338, 0xB339, 0xB33A, 0xB33B, 0xB33C, 0xB33D, 0xB33E, /* 0xC0 */
+ 0xB33F, 0xB340, 0xB341, 0xB342, 0xB343, 0xB344, 0xB345, 0xB346, /* 0xC0 */
+ 0xB347, 0xB348, 0, 0xB349, 0xB34A, 0xB34B, 0xB34C, 0xB34D, /* 0xD0 */
+ 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, 0xB353, 0, 0, /* 0xD0 */
+ 0, 0xB354, 0xB355, 0xB356, 0xB357, 0xB358, 0xB359, 0xB35A, /* 0xE0 */
+ 0xB35B, 0xB35C, 0xB35D, 0xB35E, 0xB35F, 0xB360, 0xB361, 0xB362, /* 0xE0 */
+ 0xB363, 0xB364, 0, 0xB365, 0xB366, 0xB367, 0xB368, 0xB369, /* 0xF0 */
+ 0xB36A, 0xB36B, 0xB36C, 0xB36D, 0xB36E, 0xB36F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB370, 0xB371, 0xB372, 0xB373, 0xB374, 0xB375, 0xB376, /* 0x40 */
+ 0xB377, 0xB378, 0xB379, 0xB37A, 0xB37B, 0xB37C, 0xB37D, 0xB37E, /* 0x40 */
+ 0xB37F, 0xB380, 0, 0xB381, 0xB382, 0xB383, 0xB384, 0xB385, /* 0x50 */
+ 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0, 0, /* 0x50 */
+ 0, 0xB38C, 0xB38D, 0xB38E, 0xB38F, 0xB390, 0xB391, 0xB392, /* 0x60 */
+ 0xB393, 0xB394, 0xB395, 0xB396, 0xB397, 0xB398, 0xB399, 0xB39A, /* 0x60 */
+ 0xB39B, 0xB39C, 0, 0xB39D, 0xB39E, 0xB39F, 0xB3A0, 0xB3A1, /* 0x70 */
+ 0xB3A2, 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, 0xB3A7, 0, 0, /* 0x70 */
+ 0, 0xB3A8, 0xB3A9, 0xB3AA, 0xB3AB, 0xB3AC, 0xB3AD, 0xB3AE, /* 0x80 */
+ 0xB3AF, 0xB3B0, 0xB3B1, 0xB3B2, 0xB3B3, 0xB3B4, 0xB3B5, 0xB3B6, /* 0x80 */
+ 0xB3B7, 0xB3B8, 0, 0xB3B9, 0xB3BA, 0xB3BB, 0xB3BC, 0xB3BD, /* 0x90 */
+ 0xB3BE, 0xB3BF, 0xB3C0, 0xB3C1, 0xB3C2, 0xB3C3, 0, 0, /* 0x90 */
+ 0, 0xB3C4, 0xB3C5, 0xB3C6, 0xB3C7, 0xB3C8, 0xB3C9, 0xB3CA, /* 0xA0 */
+ 0xB3CB, 0xB3CC, 0xB3CD, 0xB3CE, 0xB3CF, 0xB3D0, 0xB3D1, 0xB3D2, /* 0xA0 */
+ 0xB3D3, 0xB3D4, 0, 0xB3D5, 0xB3D6, 0xB3D7, 0xB3D8, 0xB3D9, /* 0xB0 */
+ 0xB3DA, 0xB3DB, 0xB3DC, 0xB3DD, 0xB3DE, 0xB3DF, 0, 0, /* 0xB0 */
+ 0, 0xB3E0, 0xB3E1, 0xB3E2, 0xB3E3, 0xB3E4, 0xB3E5, 0xB3E6, /* 0xC0 */
+ 0xB3E7, 0xB3E8, 0xB3E9, 0xB3EA, 0xB3EB, 0xB3EC, 0xB3ED, 0xB3EE, /* 0xC0 */
+ 0xB3EF, 0xB3F0, 0, 0xB3F1, 0xB3F2, 0xB3F3, 0xB3F4, 0xB3F5, /* 0xD0 */
+ 0xB3F6, 0xB3F7, 0xB3F8, 0xB3F9, 0xB3FA, 0xB3FB, 0, 0, /* 0xD0 */
+ 0, 0xB3FC, 0xB3FD, 0xB3FE, 0xB3FF, 0xB400, 0xB401, 0xB402, /* 0xE0 */
+ 0xB403, 0xB404, 0xB405, 0xB406, 0xB407, 0xB408, 0xB409, 0xB40A, /* 0xE0 */
+ 0xB40B, 0xB40C, 0, 0xB40D, 0xB40E, 0xB40F, 0xB410, 0xB411, /* 0xF0 */
+ 0xB412, 0xB413, 0xB414, 0xB415, 0xB416, 0xB417 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB418, 0xB419, 0xB41A, 0xB41B, 0xB41C, 0xB41D, 0xB41E, /* 0x40 */
+ 0xB41F, 0xB420, 0xB421, 0xB422, 0xB423, 0xB424, 0xB425, 0xB426, /* 0x40 */
+ 0xB427, 0xB428, 0, 0xB429, 0xB42A, 0xB42B, 0xB42C, 0xB42D, /* 0x50 */
+ 0xB42E, 0xB42F, 0xB430, 0xB431, 0xB432, 0xB433, 0, 0, /* 0x50 */
+ 0, 0xB434, 0xB435, 0xB436, 0xB437, 0xB438, 0xB439, 0xB43A, /* 0x60 */
+ 0xB43B, 0xB43C, 0xB43D, 0xB43E, 0xB43F, 0xB440, 0xB441, 0xB442, /* 0x60 */
+ 0xB443, 0xB444, 0, 0xB445, 0xB446, 0xB447, 0xB448, 0xB449, /* 0x70 */
+ 0xB44A, 0xB44B, 0xB44C, 0xB44D, 0xB44E, 0xB44F, 0, 0, /* 0x70 */
+ 0, 0xB450, 0xB451, 0xB452, 0xB453, 0xB454, 0xB455, 0xB456, /* 0x80 */
+ 0xB457, 0xB458, 0xB459, 0xB45A, 0xB45B, 0xB45C, 0xB45D, 0xB45E, /* 0x80 */
+ 0xB45F, 0xB460, 0, 0xB461, 0xB462, 0xB463, 0xB464, 0xB465, /* 0x90 */
+ 0xB466, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0, 0, /* 0x90 */
+ 0, 0xB46C, 0xB46D, 0xB46E, 0xB46F, 0xB470, 0xB471, 0xB472, /* 0xA0 */
+ 0xB473, 0xB474, 0xB475, 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A, /* 0xA0 */
+ 0xB47B, 0xB47C, 0, 0xB47D, 0xB47E, 0xB47F, 0xB480, 0xB481, /* 0xB0 */
+ 0xB482, 0xB483, 0xB484, 0xB485, 0xB486, 0xB487, 0, 0, /* 0xB0 */
+ 0, 0xB488, 0xB489, 0xB48A, 0xB48B, 0xB48C, 0xB48D, 0xB48E, /* 0xC0 */
+ 0xB48F, 0xB490, 0xB491, 0xB492, 0xB493, 0xB494, 0xB495, 0xB496, /* 0xC0 */
+ 0xB497, 0xB498, 0, 0xB499, 0xB49A, 0xB49B, 0xB49C, 0xB49D, /* 0xD0 */
+ 0xB49E, 0xB49F, 0xB4A0, 0xB4A1, 0xB4A2, 0xB4A3, 0, 0, /* 0xD0 */
+ 0, 0xB4A4, 0xB4A5, 0xB4A6, 0xB4A7, 0xB4A8, 0xB4A9, 0xB4AA, /* 0xE0 */
+ 0xB4AB, 0xB4AC, 0xB4AD, 0xB4AE, 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B2, /* 0xE0 */
+ 0xB4B3, 0xB4B4, 0, 0xB4B5, 0xB4B6, 0xB4B7, 0xB4B8, 0xB4B9, /* 0xF0 */
+ 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, 0xB4BE, 0xB4BF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB4C0, 0xB4C1, 0xB4C2, 0xB4C3, 0xB4C4, 0xB4C5, 0xB4C6, /* 0x40 */
+ 0xB4C7, 0xB4C8, 0xB4C9, 0xB4CA, 0xB4CB, 0xB4CC, 0xB4CD, 0xB4CE, /* 0x40 */
+ 0xB4CF, 0xB4D0, 0, 0xB4D1, 0xB4D2, 0xB4D3, 0xB4D4, 0xB4D5, /* 0x50 */
+ 0xB4D6, 0xB4D7, 0xB4D8, 0xB4D9, 0xB4DA, 0xB4DB, 0, 0, /* 0x50 */
+ 0, 0xB4DC, 0xB4DD, 0xB4DE, 0xB4DF, 0xB4E0, 0xB4E1, 0xB4E2, /* 0x60 */
+ 0xB4E3, 0xB4E4, 0xB4E5, 0xB4E6, 0xB4E7, 0xB4E8, 0xB4E9, 0xB4EA, /* 0x60 */
+ 0xB4EB, 0xB4EC, 0, 0xB4ED, 0xB4EE, 0xB4EF, 0xB4F0, 0xB4F1, /* 0x70 */
+ 0xB4F2, 0xB4F3, 0xB4F4, 0xB4F5, 0xB4F6, 0xB4F7, 0, 0, /* 0x70 */
+ 0, 0xB4F8, 0xB4F9, 0xB4FA, 0xB4FB, 0xB4FC, 0xB4FD, 0xB4FE, /* 0x80 */
+ 0xB4FF, 0xB500, 0xB501, 0xB502, 0xB503, 0xB504, 0xB505, 0xB506, /* 0x80 */
+ 0xB507, 0xB508, 0, 0xB509, 0xB50A, 0xB50B, 0xB50C, 0xB50D, /* 0x90 */
+ 0xB50E, 0xB50F, 0xB510, 0xB511, 0xB512, 0xB513, 0, 0, /* 0x90 */
+ 0, 0xB514, 0xB515, 0xB516, 0xB517, 0xB518, 0xB519, 0xB51A, /* 0xA0 */
+ 0xB51B, 0xB51C, 0xB51D, 0xB51E, 0xB51F, 0xB520, 0xB521, 0xB522, /* 0xA0 */
+ 0xB523, 0xB524, 0, 0xB525, 0xB526, 0xB527, 0xB528, 0xB529, /* 0xB0 */
+ 0xB52A, 0xB52B, 0xB52C, 0xB52D, 0xB52E, 0xB52F /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3138, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB530, 0xB531, 0xB532, 0xB533, 0xB534, 0xB535, 0xB536, /* 0x60 */
+ 0xB537, 0xB538, 0xB539, 0xB53A, 0xB53B, 0xB53C, 0xB53D, 0xB53E, /* 0x60 */
+ 0xB53F, 0xB540, 0, 0xB541, 0xB542, 0xB543, 0xB544, 0xB545, /* 0x70 */
+ 0xB546, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54B, 0, 0, /* 0x70 */
+ 0, 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xB550, 0xB551, 0xB552, /* 0x80 */
+ 0xB553, 0xB554, 0xB555, 0xB556, 0xB557, 0xB558, 0xB559, 0xB55A, /* 0x80 */
+ 0xB55B, 0xB55C, 0, 0xB55D, 0xB55E, 0xB55F, 0xB560, 0xB561, /* 0x90 */
+ 0xB562, 0xB563, 0xB564, 0xB565, 0xB566, 0xB567, 0, 0, /* 0x90 */
+ 0, 0xB568, 0xB569, 0xB56A, 0xB56B, 0xB56C, 0xB56D, 0xB56E, /* 0xA0 */
+ 0xB56F, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, 0xB575, 0xB576, /* 0xA0 */
+ 0xB577, 0xB578, 0, 0xB579, 0xB57A, 0xB57B, 0xB57C, 0xB57D, /* 0xB0 */
+ 0xB57E, 0xB57F, 0xB580, 0xB581, 0xB582, 0xB583, 0, 0, /* 0xB0 */
+ 0, 0xB584, 0xB585, 0xB586, 0xB587, 0xB588, 0xB589, 0xB58A, /* 0xC0 */
+ 0xB58B, 0xB58C, 0xB58D, 0xB58E, 0xB58F, 0xB590, 0xB591, 0xB592, /* 0xC0 */
+ 0xB593, 0xB594, 0, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, /* 0xD0 */
+ 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB59E, 0xB59F, 0, 0, /* 0xD0 */
+ 0, 0xB5A0, 0xB5A1, 0xB5A2, 0xB5A3, 0xB5A4, 0xB5A5, 0xB5A6, /* 0xE0 */
+ 0xB5A7, 0xB5A8, 0xB5A9, 0xB5AA, 0xB5AB, 0xB5AC, 0xB5AD, 0xB5AE, /* 0xE0 */
+ 0xB5AF, 0xB5B0, 0, 0xB5B1, 0xB5B2, 0xB5B3, 0xB5B4, 0xB5B5, /* 0xF0 */
+ 0xB5B6, 0xB5B7, 0xB5B8, 0xB5B9, 0xB5BA, 0xB5BB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB5BC, 0xB5BD, 0xB5BE, 0xB5BF, 0xB5C0, 0xB5C1, 0xB5C2, /* 0x40 */
+ 0xB5C3, 0xB5C4, 0xB5C5, 0xB5C6, 0xB5C7, 0xB5C8, 0xB5C9, 0xB5CA, /* 0x40 */
+ 0xB5CB, 0xB5CC, 0, 0xB5CD, 0xB5CE, 0xB5CF, 0xB5D0, 0xB5D1, /* 0x50 */
+ 0xB5D2, 0xB5D3, 0xB5D4, 0xB5D5, 0xB5D6, 0xB5D7, 0, 0, /* 0x50 */
+ 0, 0xB5D8, 0xB5D9, 0xB5DA, 0xB5DB, 0xB5DC, 0xB5DD, 0xB5DE, /* 0x60 */
+ 0xB5DF, 0xB5E0, 0xB5E1, 0xB5E2, 0xB5E3, 0xB5E4, 0xB5E5, 0xB5E6, /* 0x60 */
+ 0xB5E7, 0xB5E8, 0, 0xB5E9, 0xB5EA, 0xB5EB, 0xB5EC, 0xB5ED, /* 0x70 */
+ 0xB5EE, 0xB5EF, 0xB5F0, 0xB5F1, 0xB5F2, 0xB5F3, 0, 0, /* 0x70 */
+ 0, 0xB5F4, 0xB5F5, 0xB5F6, 0xB5F7, 0xB5F8, 0xB5F9, 0xB5FA, /* 0x80 */
+ 0xB5FB, 0xB5FC, 0xB5FD, 0xB5FE, 0xB5FF, 0xB600, 0xB601, 0xB602, /* 0x80 */
+ 0xB603, 0xB604, 0, 0xB605, 0xB606, 0xB607, 0xB608, 0xB609, /* 0x90 */
+ 0xB60A, 0xB60B, 0xB60C, 0xB60D, 0xB60E, 0xB60F, 0, 0, /* 0x90 */
+ 0, 0xB610, 0xB611, 0xB612, 0xB613, 0xB614, 0xB615, 0xB616, /* 0xA0 */
+ 0xB617, 0xB618, 0xB619, 0xB61A, 0xB61B, 0xB61C, 0xB61D, 0xB61E, /* 0xA0 */
+ 0xB61F, 0xB620, 0, 0xB621, 0xB622, 0xB623, 0xB624, 0xB625, /* 0xB0 */
+ 0xB626, 0xB627, 0xB628, 0xB629, 0xB62A, 0xB62B, 0, 0, /* 0xB0 */
+ 0, 0xB62C, 0xB62D, 0xB62E, 0xB62F, 0xB630, 0xB631, 0xB632, /* 0xC0 */
+ 0xB633, 0xB634, 0xB635, 0xB636, 0xB637, 0xB638, 0xB639, 0xB63A, /* 0xC0 */
+ 0xB63B, 0xB63C, 0, 0xB63D, 0xB63E, 0xB63F, 0xB640, 0xB641, /* 0xD0 */
+ 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xB647, 0, 0, /* 0xD0 */
+ 0, 0xB648, 0xB649, 0xB64A, 0xB64B, 0xB64C, 0xB64D, 0xB64E, /* 0xE0 */
+ 0xB64F, 0xB650, 0xB651, 0xB652, 0xB653, 0xB654, 0xB655, 0xB656, /* 0xE0 */
+ 0xB657, 0xB658, 0, 0xB659, 0xB65A, 0xB65B, 0xB65C, 0xB65D, /* 0xF0 */
+ 0xB65E, 0xB65F, 0xB660, 0xB661, 0xB662, 0xB663 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB664, 0xB665, 0xB666, 0xB667, 0xB668, 0xB669, 0xB66A, /* 0x40 */
+ 0xB66B, 0xB66C, 0xB66D, 0xB66E, 0xB66F, 0xB670, 0xB671, 0xB672, /* 0x40 */
+ 0xB673, 0xB674, 0, 0xB675, 0xB676, 0xB677, 0xB678, 0xB679, /* 0x50 */
+ 0xB67A, 0xB67B, 0xB67C, 0xB67D, 0xB67E, 0xB67F, 0, 0, /* 0x50 */
+ 0, 0xB680, 0xB681, 0xB682, 0xB683, 0xB684, 0xB685, 0xB686, /* 0x60 */
+ 0xB687, 0xB688, 0xB689, 0xB68A, 0xB68B, 0xB68C, 0xB68D, 0xB68E, /* 0x60 */
+ 0xB68F, 0xB690, 0, 0xB691, 0xB692, 0xB693, 0xB694, 0xB695, /* 0x70 */
+ 0xB696, 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0, 0, /* 0x70 */
+ 0, 0xB69C, 0xB69D, 0xB69E, 0xB69F, 0xB6A0, 0xB6A1, 0xB6A2, /* 0x80 */
+ 0xB6A3, 0xB6A4, 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, 0xB6A9, 0xB6AA, /* 0x80 */
+ 0xB6AB, 0xB6AC, 0, 0xB6AD, 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B1, /* 0x90 */
+ 0xB6B2, 0xB6B3, 0xB6B4, 0xB6B5, 0xB6B6, 0xB6B7, 0, 0, /* 0x90 */
+ 0, 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, 0xB6BC, 0xB6BD, 0xB6BE, /* 0xA0 */
+ 0xB6BF, 0xB6C0, 0xB6C1, 0xB6C2, 0xB6C3, 0xB6C4, 0xB6C5, 0xB6C6, /* 0xA0 */
+ 0xB6C7, 0xB6C8, 0, 0xB6C9, 0xB6CA, 0xB6CB, 0xB6CC, 0xB6CD, /* 0xB0 */
+ 0xB6CE, 0xB6CF, 0xB6D0, 0xB6D1, 0xB6D2, 0xB6D3, 0, 0, /* 0xB0 */
+ 0, 0xB6D4, 0xB6D5, 0xB6D6, 0xB6D7, 0xB6D8, 0xB6D9, 0xB6DA, /* 0xC0 */
+ 0xB6DB, 0xB6DC, 0xB6DD, 0xB6DE, 0xB6DF, 0xB6E0, 0xB6E1, 0xB6E2, /* 0xC0 */
+ 0xB6E3, 0xB6E4, 0, 0xB6E5, 0xB6E6, 0xB6E7, 0xB6E8, 0xB6E9, /* 0xD0 */
+ 0xB6EA, 0xB6EB, 0xB6EC, 0xB6ED, 0xB6EE, 0xB6EF, 0, 0, /* 0xD0 */
+ 0, 0xB6F0, 0xB6F1, 0xB6F2, 0xB6F3, 0xB6F4, 0xB6F5, 0xB6F6, /* 0xE0 */
+ 0xB6F7, 0xB6F8, 0xB6F9, 0xB6FA, 0xB6FB, 0xB6FC, 0xB6FD, 0xB6FE, /* 0xE0 */
+ 0xB6FF, 0xB700, 0, 0xB701, 0xB702, 0xB703, 0xB704, 0xB705, /* 0xF0 */
+ 0xB706, 0xB707, 0xB708, 0xB709, 0xB70A, 0xB70B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB70C, 0xB70D, 0xB70E, 0xB70F, 0xB710, 0xB711, 0xB712, /* 0x40 */
+ 0xB713, 0xB714, 0xB715, 0xB716, 0xB717, 0xB718, 0xB719, 0xB71A, /* 0x40 */
+ 0xB71B, 0xB71C, 0, 0xB71D, 0xB71E, 0xB71F, 0xB720, 0xB721, /* 0x50 */
+ 0xB722, 0xB723, 0xB724, 0xB725, 0xB726, 0xB727, 0, 0, /* 0x50 */
+ 0, 0xB728, 0xB729, 0xB72A, 0xB72B, 0xB72C, 0xB72D, 0xB72E, /* 0x60 */
+ 0xB72F, 0xB730, 0xB731, 0xB732, 0xB733, 0xB734, 0xB735, 0xB736, /* 0x60 */
+ 0xB737, 0xB738, 0, 0xB739, 0xB73A, 0xB73B, 0xB73C, 0xB73D, /* 0x70 */
+ 0xB73E, 0xB73F, 0xB740, 0xB741, 0xB742, 0xB743, 0, 0, /* 0x70 */
+ 0, 0xB744, 0xB745, 0xB746, 0xB747, 0xB748, 0xB749, 0xB74A, /* 0x80 */
+ 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xB74F, 0xB750, 0xB751, 0xB752, /* 0x80 */
+ 0xB753, 0xB754, 0, 0xB755, 0xB756, 0xB757, 0xB758, 0xB759, /* 0x90 */
+ 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xB75F, 0, 0, /* 0x90 */
+ 0, 0xB760, 0xB761, 0xB762, 0xB763, 0xB764, 0xB765, 0xB766, /* 0xA0 */
+ 0xB767, 0xB768, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, 0xB76E, /* 0xA0 */
+ 0xB76F, 0xB770, 0, 0xB771, 0xB772, 0xB773, 0xB774, 0xB775, /* 0xB0 */
+ 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3139, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB77C, 0xB77D, 0xB77E, 0xB77F, 0xB780, 0xB781, 0xB782, /* 0x60 */
+ 0xB783, 0xB784, 0xB785, 0xB786, 0xB787, 0xB788, 0xB789, 0xB78A, /* 0x60 */
+ 0xB78B, 0xB78C, 0, 0xB78D, 0xB78E, 0xB78F, 0xB790, 0xB791, /* 0x70 */
+ 0xB792, 0xB793, 0xB794, 0xB795, 0xB796, 0xB797, 0, 0, /* 0x70 */
+ 0, 0xB798, 0xB799, 0xB79A, 0xB79B, 0xB79C, 0xB79D, 0xB79E, /* 0x80 */
+ 0xB79F, 0xB7A0, 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, 0xB7A5, 0xB7A6, /* 0x80 */
+ 0xB7A7, 0xB7A8, 0, 0xB7A9, 0xB7AA, 0xB7AB, 0xB7AC, 0xB7AD, /* 0x90 */
+ 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B2, 0xB7B3, 0, 0, /* 0x90 */
+ 0, 0xB7B4, 0xB7B5, 0xB7B6, 0xB7B7, 0xB7B8, 0xB7B9, 0xB7BA, /* 0xA0 */
+ 0xB7BB, 0xB7BC, 0xB7BD, 0xB7BE, 0xB7BF, 0xB7C0, 0xB7C1, 0xB7C2, /* 0xA0 */
+ 0xB7C3, 0xB7C4, 0, 0xB7C5, 0xB7C6, 0xB7C7, 0xB7C8, 0xB7C9, /* 0xB0 */
+ 0xB7CA, 0xB7CB, 0xB7CC, 0xB7CD, 0xB7CE, 0xB7CF, 0, 0, /* 0xB0 */
+ 0, 0xB7D0, 0xB7D1, 0xB7D2, 0xB7D3, 0xB7D4, 0xB7D5, 0xB7D6, /* 0xC0 */
+ 0xB7D7, 0xB7D8, 0xB7D9, 0xB7DA, 0xB7DB, 0xB7DC, 0xB7DD, 0xB7DE, /* 0xC0 */
+ 0xB7DF, 0xB7E0, 0, 0xB7E1, 0xB7E2, 0xB7E3, 0xB7E4, 0xB7E5, /* 0xD0 */
+ 0xB7E6, 0xB7E7, 0xB7E8, 0xB7E9, 0xB7EA, 0xB7EB, 0, 0, /* 0xD0 */
+ 0, 0xB7EC, 0xB7ED, 0xB7EE, 0xB7EF, 0xB7F0, 0xB7F1, 0xB7F2, /* 0xE0 */
+ 0xB7F3, 0xB7F4, 0xB7F5, 0xB7F6, 0xB7F7, 0xB7F8, 0xB7F9, 0xB7FA, /* 0xE0 */
+ 0xB7FB, 0xB7FC, 0, 0xB7FD, 0xB7FE, 0xB7FF, 0xB800, 0xB801, /* 0xF0 */
+ 0xB802, 0xB803, 0xB804, 0xB805, 0xB806, 0xB807 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB808, 0xB809, 0xB80A, 0xB80B, 0xB80C, 0xB80D, 0xB80E, /* 0x40 */
+ 0xB80F, 0xB810, 0xB811, 0xB812, 0xB813, 0xB814, 0xB815, 0xB816, /* 0x40 */
+ 0xB817, 0xB818, 0, 0xB819, 0xB81A, 0xB81B, 0xB81C, 0xB81D, /* 0x50 */
+ 0xB81E, 0xB81F, 0xB820, 0xB821, 0xB822, 0xB823, 0, 0, /* 0x50 */
+ 0, 0xB824, 0xB825, 0xB826, 0xB827, 0xB828, 0xB829, 0xB82A, /* 0x60 */
+ 0xB82B, 0xB82C, 0xB82D, 0xB82E, 0xB82F, 0xB830, 0xB831, 0xB832, /* 0x60 */
+ 0xB833, 0xB834, 0, 0xB835, 0xB836, 0xB837, 0xB838, 0xB839, /* 0x70 */
+ 0xB83A, 0xB83B, 0xB83C, 0xB83D, 0xB83E, 0xB83F, 0, 0, /* 0x70 */
+ 0, 0xB840, 0xB841, 0xB842, 0xB843, 0xB844, 0xB845, 0xB846, /* 0x80 */
+ 0xB847, 0xB848, 0xB849, 0xB84A, 0xB84B, 0xB84C, 0xB84D, 0xB84E, /* 0x80 */
+ 0xB84F, 0xB850, 0, 0xB851, 0xB852, 0xB853, 0xB854, 0xB855, /* 0x90 */
+ 0xB856, 0xB857, 0xB858, 0xB859, 0xB85A, 0xB85B, 0, 0, /* 0x90 */
+ 0, 0xB85C, 0xB85D, 0xB85E, 0xB85F, 0xB860, 0xB861, 0xB862, /* 0xA0 */
+ 0xB863, 0xB864, 0xB865, 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, /* 0xA0 */
+ 0xB86B, 0xB86C, 0, 0xB86D, 0xB86E, 0xB86F, 0xB870, 0xB871, /* 0xB0 */
+ 0xB872, 0xB873, 0xB874, 0xB875, 0xB876, 0xB877, 0, 0, /* 0xB0 */
+ 0, 0xB878, 0xB879, 0xB87A, 0xB87B, 0xB87C, 0xB87D, 0xB87E, /* 0xC0 */
+ 0xB87F, 0xB880, 0xB881, 0xB882, 0xB883, 0xB884, 0xB885, 0xB886, /* 0xC0 */
+ 0xB887, 0xB888, 0, 0xB889, 0xB88A, 0xB88B, 0xB88C, 0xB88D, /* 0xD0 */
+ 0xB88E, 0xB88F, 0xB890, 0xB891, 0xB892, 0xB893, 0, 0, /* 0xD0 */
+ 0, 0xB894, 0xB895, 0xB896, 0xB897, 0xB898, 0xB899, 0xB89A, /* 0xE0 */
+ 0xB89B, 0xB89C, 0xB89D, 0xB89E, 0xB89F, 0xB8A0, 0xB8A1, 0xB8A2, /* 0xE0 */
+ 0xB8A3, 0xB8A4, 0, 0xB8A5, 0xB8A6, 0xB8A7, 0xB8A8, 0xB8A9, /* 0xF0 */
+ 0xB8AA, 0xB8AB, 0xB8AC, 0xB8AD, 0xB8AE, 0xB8AF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB8B0, 0xB8B1, 0xB8B2, 0xB8B3, 0xB8B4, 0xB8B5, 0xB8B6, /* 0x40 */
+ 0xB8B7, 0xB8B8, 0xB8B9, 0xB8BA, 0xB8BB, 0xB8BC, 0xB8BD, 0xB8BE, /* 0x40 */
+ 0xB8BF, 0xB8C0, 0, 0xB8C1, 0xB8C2, 0xB8C3, 0xB8C4, 0xB8C5, /* 0x50 */
+ 0xB8C6, 0xB8C7, 0xB8C8, 0xB8C9, 0xB8CA, 0xB8CB, 0, 0, /* 0x50 */
+ 0, 0xB8CC, 0xB8CD, 0xB8CE, 0xB8CF, 0xB8D0, 0xB8D1, 0xB8D2, /* 0x60 */
+ 0xB8D3, 0xB8D4, 0xB8D5, 0xB8D6, 0xB8D7, 0xB8D8, 0xB8D9, 0xB8DA, /* 0x60 */
+ 0xB8DB, 0xB8DC, 0, 0xB8DD, 0xB8DE, 0xB8DF, 0xB8E0, 0xB8E1, /* 0x70 */
+ 0xB8E2, 0xB8E3, 0xB8E4, 0xB8E5, 0xB8E6, 0xB8E7, 0, 0, /* 0x70 */
+ 0, 0xB8E8, 0xB8E9, 0xB8EA, 0xB8EB, 0xB8EC, 0xB8ED, 0xB8EE, /* 0x80 */
+ 0xB8EF, 0xB8F0, 0xB8F1, 0xB8F2, 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6, /* 0x80 */
+ 0xB8F7, 0xB8F8, 0, 0xB8F9, 0xB8FA, 0xB8FB, 0xB8FC, 0xB8FD, /* 0x90 */
+ 0xB8FE, 0xB8FF, 0xB900, 0xB901, 0xB902, 0xB903, 0, 0, /* 0x90 */
+ 0, 0xB904, 0xB905, 0xB906, 0xB907, 0xB908, 0xB909, 0xB90A, /* 0xA0 */
+ 0xB90B, 0xB90C, 0xB90D, 0xB90E, 0xB90F, 0xB910, 0xB911, 0xB912, /* 0xA0 */
+ 0xB913, 0xB914, 0, 0xB915, 0xB916, 0xB917, 0xB918, 0xB919, /* 0xB0 */
+ 0xB91A, 0xB91B, 0xB91C, 0xB91D, 0xB91E, 0xB91F, 0, 0, /* 0xB0 */
+ 0, 0xB920, 0xB921, 0xB922, 0xB923, 0xB924, 0xB925, 0xB926, /* 0xC0 */
+ 0xB927, 0xB928, 0xB929, 0xB92A, 0xB92B, 0xB92C, 0xB92D, 0xB92E, /* 0xC0 */
+ 0xB92F, 0xB930, 0, 0xB931, 0xB932, 0xB933, 0xB934, 0xB935, /* 0xD0 */
+ 0xB936, 0xB937, 0xB938, 0xB939, 0xB93A, 0xB93B, 0, 0, /* 0xD0 */
+ 0, 0xB93C, 0xB93D, 0xB93E, 0xB93F, 0xB940, 0xB941, 0xB942, /* 0xE0 */
+ 0xB943, 0xB944, 0xB945, 0xB946, 0xB947, 0xB948, 0xB949, 0xB94A, /* 0xE0 */
+ 0xB94B, 0xB94C, 0, 0xB94D, 0xB94E, 0xB94F, 0xB950, 0xB951, /* 0xF0 */
+ 0xB952, 0xB953, 0xB954, 0xB955, 0xB956, 0xB957 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB958, 0xB959, 0xB95A, 0xB95B, 0xB95C, 0xB95D, 0xB95E, /* 0x40 */
+ 0xB95F, 0xB960, 0xB961, 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, /* 0x40 */
+ 0xB967, 0xB968, 0, 0xB969, 0xB96A, 0xB96B, 0xB96C, 0xB96D, /* 0x50 */
+ 0xB96E, 0xB96F, 0xB970, 0xB971, 0xB972, 0xB973, 0, 0, /* 0x50 */
+ 0, 0xB974, 0xB975, 0xB976, 0xB977, 0xB978, 0xB979, 0xB97A, /* 0x60 */
+ 0xB97B, 0xB97C, 0xB97D, 0xB97E, 0xB97F, 0xB980, 0xB981, 0xB982, /* 0x60 */
+ 0xB983, 0xB984, 0, 0xB985, 0xB986, 0xB987, 0xB988, 0xB989, /* 0x70 */
+ 0xB98A, 0xB98B, 0xB98C, 0xB98D, 0xB98E, 0xB98F, 0, 0, /* 0x70 */
+ 0, 0xB990, 0xB991, 0xB992, 0xB993, 0xB994, 0xB995, 0xB996, /* 0x80 */
+ 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, 0xB99D, 0xB99E, /* 0x80 */
+ 0xB99F, 0xB9A0, 0, 0xB9A1, 0xB9A2, 0xB9A3, 0xB9A4, 0xB9A5, /* 0x90 */
+ 0xB9A6, 0xB9A7, 0xB9A8, 0xB9A9, 0xB9AA, 0xB9AB, 0, 0, /* 0x90 */
+ 0, 0xB9AC, 0xB9AD, 0xB9AE, 0xB9AF, 0xB9B0, 0xB9B1, 0xB9B2, /* 0xA0 */
+ 0xB9B3, 0xB9B4, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9, 0xB9BA, /* 0xA0 */
+ 0xB9BB, 0xB9BC, 0, 0xB9BD, 0xB9BE, 0xB9BF, 0xB9C0, 0xB9C1, /* 0xB0 */
+ 0xB9C2, 0xB9C3, 0xB9C4, 0xB9C5, 0xB9C6, 0xB9C7 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3141, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xB9C8, 0xB9C9, 0xB9CA, 0xB9CB, 0xB9CC, 0xB9CD, 0xB9CE, /* 0x60 */
+ 0xB9CF, 0xB9D0, 0xB9D1, 0xB9D2, 0xB9D3, 0xB9D4, 0xB9D5, 0xB9D6, /* 0x60 */
+ 0xB9D7, 0xB9D8, 0, 0xB9D9, 0xB9DA, 0xB9DB, 0xB9DC, 0xB9DD, /* 0x70 */
+ 0xB9DE, 0xB9DF, 0xB9E0, 0xB9E1, 0xB9E2, 0xB9E3, 0, 0, /* 0x70 */
+ 0, 0xB9E4, 0xB9E5, 0xB9E6, 0xB9E7, 0xB9E8, 0xB9E9, 0xB9EA, /* 0x80 */
+ 0xB9EB, 0xB9EC, 0xB9ED, 0xB9EE, 0xB9EF, 0xB9F0, 0xB9F1, 0xB9F2, /* 0x80 */
+ 0xB9F3, 0xB9F4, 0, 0xB9F5, 0xB9F6, 0xB9F7, 0xB9F8, 0xB9F9, /* 0x90 */
+ 0xB9FA, 0xB9FB, 0xB9FC, 0xB9FD, 0xB9FE, 0xB9FF, 0, 0, /* 0x90 */
+ 0, 0xBA00, 0xBA01, 0xBA02, 0xBA03, 0xBA04, 0xBA05, 0xBA06, /* 0xA0 */
+ 0xBA07, 0xBA08, 0xBA09, 0xBA0A, 0xBA0B, 0xBA0C, 0xBA0D, 0xBA0E, /* 0xA0 */
+ 0xBA0F, 0xBA10, 0, 0xBA11, 0xBA12, 0xBA13, 0xBA14, 0xBA15, /* 0xB0 */
+ 0xBA16, 0xBA17, 0xBA18, 0xBA19, 0xBA1A, 0xBA1B, 0, 0, /* 0xB0 */
+ 0, 0xBA1C, 0xBA1D, 0xBA1E, 0xBA1F, 0xBA20, 0xBA21, 0xBA22, /* 0xC0 */
+ 0xBA23, 0xBA24, 0xBA25, 0xBA26, 0xBA27, 0xBA28, 0xBA29, 0xBA2A, /* 0xC0 */
+ 0xBA2B, 0xBA2C, 0, 0xBA2D, 0xBA2E, 0xBA2F, 0xBA30, 0xBA31, /* 0xD0 */
+ 0xBA32, 0xBA33, 0xBA34, 0xBA35, 0xBA36, 0xBA37, 0, 0, /* 0xD0 */
+ 0, 0xBA38, 0xBA39, 0xBA3A, 0xBA3B, 0xBA3C, 0xBA3D, 0xBA3E, /* 0xE0 */
+ 0xBA3F, 0xBA40, 0xBA41, 0xBA42, 0xBA43, 0xBA44, 0xBA45, 0xBA46, /* 0xE0 */
+ 0xBA47, 0xBA48, 0, 0xBA49, 0xBA4A, 0xBA4B, 0xBA4C, 0xBA4D, /* 0xF0 */
+ 0xBA4E, 0xBA4F, 0xBA50, 0xBA51, 0xBA52, 0xBA53 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBA54, 0xBA55, 0xBA56, 0xBA57, 0xBA58, 0xBA59, 0xBA5A, /* 0x40 */
+ 0xBA5B, 0xBA5C, 0xBA5D, 0xBA5E, 0xBA5F, 0xBA60, 0xBA61, 0xBA62, /* 0x40 */
+ 0xBA63, 0xBA64, 0, 0xBA65, 0xBA66, 0xBA67, 0xBA68, 0xBA69, /* 0x50 */
+ 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0, 0, /* 0x50 */
+ 0, 0xBA70, 0xBA71, 0xBA72, 0xBA73, 0xBA74, 0xBA75, 0xBA76, /* 0x60 */
+ 0xBA77, 0xBA78, 0xBA79, 0xBA7A, 0xBA7B, 0xBA7C, 0xBA7D, 0xBA7E, /* 0x60 */
+ 0xBA7F, 0xBA80, 0, 0xBA81, 0xBA82, 0xBA83, 0xBA84, 0xBA85, /* 0x70 */
+ 0xBA86, 0xBA87, 0xBA88, 0xBA89, 0xBA8A, 0xBA8B, 0, 0, /* 0x70 */
+ 0, 0xBA8C, 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, 0xBA92, /* 0x80 */
+ 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, 0xBA9A, /* 0x80 */
+ 0xBA9B, 0xBA9C, 0, 0xBA9D, 0xBA9E, 0xBA9F, 0xBAA0, 0xBAA1, /* 0x90 */
+ 0xBAA2, 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0, 0, /* 0x90 */
+ 0, 0xBAA8, 0xBAA9, 0xBAAA, 0xBAAB, 0xBAAC, 0xBAAD, 0xBAAE, /* 0xA0 */
+ 0xBAAF, 0xBAB0, 0xBAB1, 0xBAB2, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, /* 0xA0 */
+ 0xBAB7, 0xBAB8, 0, 0xBAB9, 0xBABA, 0xBABB, 0xBABC, 0xBABD, /* 0xB0 */
+ 0xBABE, 0xBABF, 0xBAC0, 0xBAC1, 0xBAC2, 0xBAC3, 0, 0, /* 0xB0 */
+ 0, 0xBAC4, 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC8, 0xBAC9, 0xBACA, /* 0xC0 */
+ 0xBACB, 0xBACC, 0xBACD, 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD2, /* 0xC0 */
+ 0xBAD3, 0xBAD4, 0, 0xBAD5, 0xBAD6, 0xBAD7, 0xBAD8, 0xBAD9, /* 0xD0 */
+ 0xBADA, 0xBADB, 0xBADC, 0xBADD, 0xBADE, 0xBADF, 0, 0, /* 0xD0 */
+ 0, 0xBAE0, 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6, /* 0xE0 */
+ 0xBAE7, 0xBAE8, 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, /* 0xE0 */
+ 0xBAEF, 0xBAF0, 0, 0xBAF1, 0xBAF2, 0xBAF3, 0xBAF4, 0xBAF5, /* 0xF0 */
+ 0xBAF6, 0xBAF7, 0xBAF8, 0xBAF9, 0xBAFA, 0xBAFB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBAFC, 0xBAFD, 0xBAFE, 0xBAFF, 0xBB00, 0xBB01, 0xBB02, /* 0x40 */
+ 0xBB03, 0xBB04, 0xBB05, 0xBB06, 0xBB07, 0xBB08, 0xBB09, 0xBB0A, /* 0x40 */
+ 0xBB0B, 0xBB0C, 0, 0xBB0D, 0xBB0E, 0xBB0F, 0xBB10, 0xBB11, /* 0x50 */
+ 0xBB12, 0xBB13, 0xBB14, 0xBB15, 0xBB16, 0xBB17, 0, 0, /* 0x50 */
+ 0, 0xBB18, 0xBB19, 0xBB1A, 0xBB1B, 0xBB1C, 0xBB1D, 0xBB1E, /* 0x60 */
+ 0xBB1F, 0xBB20, 0xBB21, 0xBB22, 0xBB23, 0xBB24, 0xBB25, 0xBB26, /* 0x60 */
+ 0xBB27, 0xBB28, 0, 0xBB29, 0xBB2A, 0xBB2B, 0xBB2C, 0xBB2D, /* 0x70 */
+ 0xBB2E, 0xBB2F, 0xBB30, 0xBB31, 0xBB32, 0xBB33, 0, 0, /* 0x70 */
+ 0, 0xBB34, 0xBB35, 0xBB36, 0xBB37, 0xBB38, 0xBB39, 0xBB3A, /* 0x80 */
+ 0xBB3B, 0xBB3C, 0xBB3D, 0xBB3E, 0xBB3F, 0xBB40, 0xBB41, 0xBB42, /* 0x80 */
+ 0xBB43, 0xBB44, 0, 0xBB45, 0xBB46, 0xBB47, 0xBB48, 0xBB49, /* 0x90 */
+ 0xBB4A, 0xBB4B, 0xBB4C, 0xBB4D, 0xBB4E, 0xBB4F, 0, 0, /* 0x90 */
+ 0, 0xBB50, 0xBB51, 0xBB52, 0xBB53, 0xBB54, 0xBB55, 0xBB56, /* 0xA0 */
+ 0xBB57, 0xBB58, 0xBB59, 0xBB5A, 0xBB5B, 0xBB5C, 0xBB5D, 0xBB5E, /* 0xA0 */
+ 0xBB5F, 0xBB60, 0, 0xBB61, 0xBB62, 0xBB63, 0xBB64, 0xBB65, /* 0xB0 */
+ 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, 0, 0, /* 0xB0 */
+ 0, 0xBB6C, 0xBB6D, 0xBB6E, 0xBB6F, 0xBB70, 0xBB71, 0xBB72, /* 0xC0 */
+ 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xBB77, 0xBB78, 0xBB79, 0xBB7A, /* 0xC0 */
+ 0xBB7B, 0xBB7C, 0, 0xBB7D, 0xBB7E, 0xBB7F, 0xBB80, 0xBB81, /* 0xD0 */
+ 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, 0xBB87, 0, 0, /* 0xD0 */
+ 0, 0xBB88, 0xBB89, 0xBB8A, 0xBB8B, 0xBB8C, 0xBB8D, 0xBB8E, /* 0xE0 */
+ 0xBB8F, 0xBB90, 0xBB91, 0xBB92, 0xBB93, 0xBB94, 0xBB95, 0xBB96, /* 0xE0 */
+ 0xBB97, 0xBB98, 0, 0xBB99, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, /* 0xF0 */
+ 0xBB9E, 0xBB9F, 0xBBA0, 0xBBA1, 0xBBA2, 0xBBA3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBBA4, 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA8, 0xBBA9, 0xBBAA, /* 0x40 */
+ 0xBBAB, 0xBBAC, 0xBBAD, 0xBBAE, 0xBBAF, 0xBBB0, 0xBBB1, 0xBBB2, /* 0x40 */
+ 0xBBB3, 0xBBB4, 0, 0xBBB5, 0xBBB6, 0xBBB7, 0xBBB8, 0xBBB9, /* 0x50 */
+ 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBBBE, 0xBBBF, 0, 0, /* 0x50 */
+ 0, 0xBBC0, 0xBBC1, 0xBBC2, 0xBBC3, 0xBBC4, 0xBBC5, 0xBBC6, /* 0x60 */
+ 0xBBC7, 0xBBC8, 0xBBC9, 0xBBCA, 0xBBCB, 0xBBCC, 0xBBCD, 0xBBCE, /* 0x60 */
+ 0xBBCF, 0xBBD0, 0, 0xBBD1, 0xBBD2, 0xBBD3, 0xBBD4, 0xBBD5, /* 0x70 */
+ 0xBBD6, 0xBBD7, 0xBBD8, 0xBBD9, 0xBBDA, 0xBBDB, 0, 0, /* 0x70 */
+ 0, 0xBBDC, 0xBBDD, 0xBBDE, 0xBBDF, 0xBBE0, 0xBBE1, 0xBBE2, /* 0x80 */
+ 0xBBE3, 0xBBE4, 0xBBE5, 0xBBE6, 0xBBE7, 0xBBE8, 0xBBE9, 0xBBEA, /* 0x80 */
+ 0xBBEB, 0xBBEC, 0, 0xBBED, 0xBBEE, 0xBBEF, 0xBBF0, 0xBBF1, /* 0x90 */
+ 0xBBF2, 0xBBF3, 0xBBF4, 0xBBF5, 0xBBF6, 0xBBF7, 0, 0, /* 0x90 */
+ 0, 0xBBF8, 0xBBF9, 0xBBFA, 0xBBFB, 0xBBFC, 0xBBFD, 0xBBFE, /* 0xA0 */
+ 0xBBFF, 0xBC00, 0xBC01, 0xBC02, 0xBC03, 0xBC04, 0xBC05, 0xBC06, /* 0xA0 */
+ 0xBC07, 0xBC08, 0, 0xBC09, 0xBC0A, 0xBC0B, 0xBC0C, 0xBC0D, /* 0xB0 */
+ 0xBC0E, 0xBC0F, 0xBC10, 0xBC11, 0xBC12, 0xBC13 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3142, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBC14, 0xBC15, 0xBC16, 0xBC17, 0xBC18, 0xBC19, 0xBC1A, /* 0x60 */
+ 0xBC1B, 0xBC1C, 0xBC1D, 0xBC1E, 0xBC1F, 0xBC20, 0xBC21, 0xBC22, /* 0x60 */
+ 0xBC23, 0xBC24, 0, 0xBC25, 0xBC26, 0xBC27, 0xBC28, 0xBC29, /* 0x70 */
+ 0xBC2A, 0xBC2B, 0xBC2C, 0xBC2D, 0xBC2E, 0xBC2F, 0, 0, /* 0x70 */
+ 0, 0xBC30, 0xBC31, 0xBC32, 0xBC33, 0xBC34, 0xBC35, 0xBC36, /* 0x80 */
+ 0xBC37, 0xBC38, 0xBC39, 0xBC3A, 0xBC3B, 0xBC3C, 0xBC3D, 0xBC3E, /* 0x80 */
+ 0xBC3F, 0xBC40, 0, 0xBC41, 0xBC42, 0xBC43, 0xBC44, 0xBC45, /* 0x90 */
+ 0xBC46, 0xBC47, 0xBC48, 0xBC49, 0xBC4A, 0xBC4B, 0, 0, /* 0x90 */
+ 0, 0xBC4C, 0xBC4D, 0xBC4E, 0xBC4F, 0xBC50, 0xBC51, 0xBC52, /* 0xA0 */
+ 0xBC53, 0xBC54, 0xBC55, 0xBC56, 0xBC57, 0xBC58, 0xBC59, 0xBC5A, /* 0xA0 */
+ 0xBC5B, 0xBC5C, 0, 0xBC5D, 0xBC5E, 0xBC5F, 0xBC60, 0xBC61, /* 0xB0 */
+ 0xBC62, 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0, 0, /* 0xB0 */
+ 0, 0xBC68, 0xBC69, 0xBC6A, 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E, /* 0xC0 */
+ 0xBC6F, 0xBC70, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, /* 0xC0 */
+ 0xBC77, 0xBC78, 0, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, /* 0xD0 */
+ 0xBC7E, 0xBC7F, 0xBC80, 0xBC81, 0xBC82, 0xBC83, 0, 0, /* 0xD0 */
+ 0, 0xBC84, 0xBC85, 0xBC86, 0xBC87, 0xBC88, 0xBC89, 0xBC8A, /* 0xE0 */
+ 0xBC8B, 0xBC8C, 0xBC8D, 0xBC8E, 0xBC8F, 0xBC90, 0xBC91, 0xBC92, /* 0xE0 */
+ 0xBC93, 0xBC94, 0, 0xBC95, 0xBC96, 0xBC97, 0xBC98, 0xBC99, /* 0xF0 */
+ 0xBC9A, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBCA0, 0xBCA1, 0xBCA2, 0xBCA3, 0xBCA4, 0xBCA5, 0xBCA6, /* 0x40 */
+ 0xBCA7, 0xBCA8, 0xBCA9, 0xBCAA, 0xBCAB, 0xBCAC, 0xBCAD, 0xBCAE, /* 0x40 */
+ 0xBCAF, 0xBCB0, 0, 0xBCB1, 0xBCB2, 0xBCB3, 0xBCB4, 0xBCB5, /* 0x50 */
+ 0xBCB6, 0xBCB7, 0xBCB8, 0xBCB9, 0xBCBA, 0xBCBB, 0, 0, /* 0x50 */
+ 0, 0xBCBC, 0xBCBD, 0xBCBE, 0xBCBF, 0xBCC0, 0xBCC1, 0xBCC2, /* 0x60 */
+ 0xBCC3, 0xBCC4, 0xBCC5, 0xBCC6, 0xBCC7, 0xBCC8, 0xBCC9, 0xBCCA, /* 0x60 */
+ 0xBCCB, 0xBCCC, 0, 0xBCCD, 0xBCCE, 0xBCCF, 0xBCD0, 0xBCD1, /* 0x70 */
+ 0xBCD2, 0xBCD3, 0xBCD4, 0xBCD5, 0xBCD6, 0xBCD7, 0, 0, /* 0x70 */
+ 0, 0xBCD8, 0xBCD9, 0xBCDA, 0xBCDB, 0xBCDC, 0xBCDD, 0xBCDE, /* 0x80 */
+ 0xBCDF, 0xBCE0, 0xBCE1, 0xBCE2, 0xBCE3, 0xBCE4, 0xBCE5, 0xBCE6, /* 0x80 */
+ 0xBCE7, 0xBCE8, 0, 0xBCE9, 0xBCEA, 0xBCEB, 0xBCEC, 0xBCED, /* 0x90 */
+ 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1, 0xBCF2, 0xBCF3, 0, 0, /* 0x90 */
+ 0, 0xBCF4, 0xBCF5, 0xBCF6, 0xBCF7, 0xBCF8, 0xBCF9, 0xBCFA, /* 0xA0 */
+ 0xBCFB, 0xBCFC, 0xBCFD, 0xBCFE, 0xBCFF, 0xBD00, 0xBD01, 0xBD02, /* 0xA0 */
+ 0xBD03, 0xBD04, 0, 0xBD05, 0xBD06, 0xBD07, 0xBD08, 0xBD09, /* 0xB0 */
+ 0xBD0A, 0xBD0B, 0xBD0C, 0xBD0D, 0xBD0E, 0xBD0F, 0, 0, /* 0xB0 */
+ 0, 0xBD10, 0xBD11, 0xBD12, 0xBD13, 0xBD14, 0xBD15, 0xBD16, /* 0xC0 */
+ 0xBD17, 0xBD18, 0xBD19, 0xBD1A, 0xBD1B, 0xBD1C, 0xBD1D, 0xBD1E, /* 0xC0 */
+ 0xBD1F, 0xBD20, 0, 0xBD21, 0xBD22, 0xBD23, 0xBD24, 0xBD25, /* 0xD0 */
+ 0xBD26, 0xBD27, 0xBD28, 0xBD29, 0xBD2A, 0xBD2B, 0, 0, /* 0xD0 */
+ 0, 0xBD2C, 0xBD2D, 0xBD2E, 0xBD2F, 0xBD30, 0xBD31, 0xBD32, /* 0xE0 */
+ 0xBD33, 0xBD34, 0xBD35, 0xBD36, 0xBD37, 0xBD38, 0xBD39, 0xBD3A, /* 0xE0 */
+ 0xBD3B, 0xBD3C, 0, 0xBD3D, 0xBD3E, 0xBD3F, 0xBD40, 0xBD41, /* 0xF0 */
+ 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBD48, 0xBD49, 0xBD4A, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, /* 0x40 */
+ 0xBD4F, 0xBD50, 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, 0xBD56, /* 0x40 */
+ 0xBD57, 0xBD58, 0, 0xBD59, 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, /* 0x50 */
+ 0xBD5E, 0xBD5F, 0xBD60, 0xBD61, 0xBD62, 0xBD63, 0, 0, /* 0x50 */
+ 0, 0xBD64, 0xBD65, 0xBD66, 0xBD67, 0xBD68, 0xBD69, 0xBD6A, /* 0x60 */
+ 0xBD6B, 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, /* 0x60 */
+ 0xBD73, 0xBD74, 0, 0xBD75, 0xBD76, 0xBD77, 0xBD78, 0xBD79, /* 0x70 */
+ 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, 0xBD7E, 0xBD7F, 0, 0, /* 0x70 */
+ 0, 0xBD80, 0xBD81, 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, /* 0x80 */
+ 0xBD87, 0xBD88, 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, /* 0x80 */
+ 0xBD8F, 0xBD90, 0, 0xBD91, 0xBD92, 0xBD93, 0xBD94, 0xBD95, /* 0x90 */
+ 0xBD96, 0xBD97, 0xBD98, 0xBD99, 0xBD9A, 0xBD9B, 0, 0, /* 0x90 */
+ 0, 0xBD9C, 0xBD9D, 0xBD9E, 0xBD9F, 0xBDA0, 0xBDA1, 0xBDA2, /* 0xA0 */
+ 0xBDA3, 0xBDA4, 0xBDA5, 0xBDA6, 0xBDA7, 0xBDA8, 0xBDA9, 0xBDAA, /* 0xA0 */
+ 0xBDAB, 0xBDAC, 0, 0xBDAD, 0xBDAE, 0xBDAF, 0xBDB0, 0xBDB1, /* 0xB0 */
+ 0xBDB2, 0xBDB3, 0xBDB4, 0xBDB5, 0xBDB6, 0xBDB7, 0, 0, /* 0xB0 */
+ 0, 0xBDB8, 0xBDB9, 0xBDBA, 0xBDBB, 0xBDBC, 0xBDBD, 0xBDBE, /* 0xC0 */
+ 0xBDBF, 0xBDC0, 0xBDC1, 0xBDC2, 0xBDC3, 0xBDC4, 0xBDC5, 0xBDC6, /* 0xC0 */
+ 0xBDC7, 0xBDC8, 0, 0xBDC9, 0xBDCA, 0xBDCB, 0xBDCC, 0xBDCD, /* 0xD0 */
+ 0xBDCE, 0xBDCF, 0xBDD0, 0xBDD1, 0xBDD2, 0xBDD3, 0, 0, /* 0xD0 */
+ 0, 0xBDD4, 0xBDD5, 0xBDD6, 0xBDD7, 0xBDD8, 0xBDD9, 0xBDDA, /* 0xE0 */
+ 0xBDDB, 0xBDDC, 0xBDDD, 0xBDDE, 0xBDDF, 0xBDE0, 0xBDE1, 0xBDE2, /* 0xE0 */
+ 0xBDE3, 0xBDE4, 0, 0xBDE5, 0xBDE6, 0xBDE7, 0xBDE8, 0xBDE9, /* 0xF0 */
+ 0xBDEA, 0xBDEB, 0xBDEC, 0xBDED, 0xBDEE, 0xBDEF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDF0, 0xBDF1, 0xBDF2, 0xBDF3, 0xBDF4, 0xBDF5, 0xBDF6, /* 0x40 */
+ 0xBDF7, 0xBDF8, 0xBDF9, 0xBDFA, 0xBDFB, 0xBDFC, 0xBDFD, 0xBDFE, /* 0x40 */
+ 0xBDFF, 0xBE00, 0, 0xBE01, 0xBE02, 0xBE03, 0xBE04, 0xBE05, /* 0x50 */
+ 0xBE06, 0xBE07, 0xBE08, 0xBE09, 0xBE0A, 0xBE0B, 0, 0, /* 0x50 */
+ 0, 0xBE0C, 0xBE0D, 0xBE0E, 0xBE0F, 0xBE10, 0xBE11, 0xBE12, /* 0x60 */
+ 0xBE13, 0xBE14, 0xBE15, 0xBE16, 0xBE17, 0xBE18, 0xBE19, 0xBE1A, /* 0x60 */
+ 0xBE1B, 0xBE1C, 0, 0xBE1D, 0xBE1E, 0xBE1F, 0xBE20, 0xBE21, /* 0x70 */
+ 0xBE22, 0xBE23, 0xBE24, 0xBE25, 0xBE26, 0xBE27, 0, 0, /* 0x70 */
+ 0, 0xBE28, 0xBE29, 0xBE2A, 0xBE2B, 0xBE2C, 0xBE2D, 0xBE2E, /* 0x80 */
+ 0xBE2F, 0xBE30, 0xBE31, 0xBE32, 0xBE33, 0xBE34, 0xBE35, 0xBE36, /* 0x80 */
+ 0xBE37, 0xBE38, 0, 0xBE39, 0xBE3A, 0xBE3B, 0xBE3C, 0xBE3D, /* 0x90 */
+ 0xBE3E, 0xBE3F, 0xBE40, 0xBE41, 0xBE42, 0xBE43, 0, 0, /* 0x90 */
+ 0, 0xBE44, 0xBE45, 0xBE46, 0xBE47, 0xBE48, 0xBE49, 0xBE4A, /* 0xA0 */
+ 0xBE4B, 0xBE4C, 0xBE4D, 0xBE4E, 0xBE4F, 0xBE50, 0xBE51, 0xBE52, /* 0xA0 */
+ 0xBE53, 0xBE54, 0, 0xBE55, 0xBE56, 0xBE57, 0xBE58, 0xBE59, /* 0xB0 */
+ 0xBE5A, 0xBE5B, 0xBE5C, 0xBE5D, 0xBE5E, 0xBE5F /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3143, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBE60, 0xBE61, 0xBE62, 0xBE63, 0xBE64, 0xBE65, 0xBE66, /* 0x60 */
+ 0xBE67, 0xBE68, 0xBE69, 0xBE6A, 0xBE6B, 0xBE6C, 0xBE6D, 0xBE6E, /* 0x60 */
+ 0xBE6F, 0xBE70, 0, 0xBE71, 0xBE72, 0xBE73, 0xBE74, 0xBE75, /* 0x70 */
+ 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7B, 0, 0, /* 0x70 */
+ 0, 0xBE7C, 0xBE7D, 0xBE7E, 0xBE7F, 0xBE80, 0xBE81, 0xBE82, /* 0x80 */
+ 0xBE83, 0xBE84, 0xBE85, 0xBE86, 0xBE87, 0xBE88, 0xBE89, 0xBE8A, /* 0x80 */
+ 0xBE8B, 0xBE8C, 0, 0xBE8D, 0xBE8E, 0xBE8F, 0xBE90, 0xBE91, /* 0x90 */
+ 0xBE92, 0xBE93, 0xBE94, 0xBE95, 0xBE96, 0xBE97, 0, 0, /* 0x90 */
+ 0, 0xBE98, 0xBE99, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, /* 0xA0 */
+ 0xBE9F, 0xBEA0, 0xBEA1, 0xBEA2, 0xBEA3, 0xBEA4, 0xBEA5, 0xBEA6, /* 0xA0 */
+ 0xBEA7, 0xBEA8, 0, 0xBEA9, 0xBEAA, 0xBEAB, 0xBEAC, 0xBEAD, /* 0xB0 */
+ 0xBEAE, 0xBEAF, 0xBEB0, 0xBEB1, 0xBEB2, 0xBEB3, 0, 0, /* 0xB0 */
+ 0, 0xBEB4, 0xBEB5, 0xBEB6, 0xBEB7, 0xBEB8, 0xBEB9, 0xBEBA, /* 0xC0 */
+ 0xBEBB, 0xBEBC, 0xBEBD, 0xBEBE, 0xBEBF, 0xBEC0, 0xBEC1, 0xBEC2, /* 0xC0 */
+ 0xBEC3, 0xBEC4, 0, 0xBEC5, 0xBEC6, 0xBEC7, 0xBEC8, 0xBEC9, /* 0xD0 */
+ 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, 0xBECF, 0, 0, /* 0xD0 */
+ 0, 0xBED0, 0xBED1, 0xBED2, 0xBED3, 0xBED4, 0xBED5, 0xBED6, /* 0xE0 */
+ 0xBED7, 0xBED8, 0xBED9, 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD, 0xBEDE, /* 0xE0 */
+ 0xBEDF, 0xBEE0, 0, 0xBEE1, 0xBEE2, 0xBEE3, 0xBEE4, 0xBEE5, /* 0xF0 */
+ 0xBEE6, 0xBEE7, 0xBEE8, 0xBEE9, 0xBEEA, 0xBEEB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_A9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBEEC, 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, 0xBEF1, 0xBEF2, /* 0x40 */
+ 0xBEF3, 0xBEF4, 0xBEF5, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA, /* 0x40 */
+ 0xBEFB, 0xBEFC, 0, 0xBEFD, 0xBEFE, 0xBEFF, 0xBF00, 0xBF01, /* 0x50 */
+ 0xBF02, 0xBF03, 0xBF04, 0xBF05, 0xBF06, 0xBF07, 0, 0, /* 0x50 */
+ 0, 0xBF08, 0xBF09, 0xBF0A, 0xBF0B, 0xBF0C, 0xBF0D, 0xBF0E, /* 0x60 */
+ 0xBF0F, 0xBF10, 0xBF11, 0xBF12, 0xBF13, 0xBF14, 0xBF15, 0xBF16, /* 0x60 */
+ 0xBF17, 0xBF18, 0, 0xBF19, 0xBF1A, 0xBF1B, 0xBF1C, 0xBF1D, /* 0x70 */
+ 0xBF1E, 0xBF1F, 0xBF20, 0xBF21, 0xBF22, 0xBF23, 0, 0, /* 0x70 */
+ 0, 0xBF24, 0xBF25, 0xBF26, 0xBF27, 0xBF28, 0xBF29, 0xBF2A, /* 0x80 */
+ 0xBF2B, 0xBF2C, 0xBF2D, 0xBF2E, 0xBF2F, 0xBF30, 0xBF31, 0xBF32, /* 0x80 */
+ 0xBF33, 0xBF34, 0, 0xBF35, 0xBF36, 0xBF37, 0xBF38, 0xBF39, /* 0x90 */
+ 0xBF3A, 0xBF3B, 0xBF3C, 0xBF3D, 0xBF3E, 0xBF3F, 0, 0, /* 0x90 */
+ 0, 0xBF40, 0xBF41, 0xBF42, 0xBF43, 0xBF44, 0xBF45, 0xBF46, /* 0xA0 */
+ 0xBF47, 0xBF48, 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, /* 0xA0 */
+ 0xBF4F, 0xBF50, 0, 0xBF51, 0xBF52, 0xBF53, 0xBF54, 0xBF55, /* 0xB0 */
+ 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, 0, 0, /* 0xB0 */
+ 0, 0xBF5C, 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, /* 0xC0 */
+ 0xBF63, 0xBF64, 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, /* 0xC0 */
+ 0xBF6B, 0xBF6C, 0, 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, /* 0xD0 */
+ 0xBF72, 0xBF73, 0xBF74, 0xBF75, 0xBF76, 0xBF77, 0, 0, /* 0xD0 */
+ 0, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, 0xBF7D, 0xBF7E, /* 0xE0 */
+ 0xBF7F, 0xBF80, 0xBF81, 0xBF82, 0xBF83, 0xBF84, 0xBF85, 0xBF86, /* 0xE0 */
+ 0xBF87, 0xBF88, 0, 0xBF89, 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, /* 0xF0 */
+ 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, 0xBF92, 0xBF93 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_AA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBF94, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, /* 0x40 */
+ 0xBF9B, 0xBF9C, 0xBF9D, 0xBF9E, 0xBF9F, 0xBFA0, 0xBFA1, 0xBFA2, /* 0x40 */
+ 0xBFA3, 0xBFA4, 0, 0xBFA5, 0xBFA6, 0xBFA7, 0xBFA8, 0xBFA9, /* 0x50 */
+ 0xBFAA, 0xBFAB, 0xBFAC, 0xBFAD, 0xBFAE, 0xBFAF, 0, 0, /* 0x50 */
+ 0, 0xBFB0, 0xBFB1, 0xBFB2, 0xBFB3, 0xBFB4, 0xBFB5, 0xBFB6, /* 0x60 */
+ 0xBFB7, 0xBFB8, 0xBFB9, 0xBFBA, 0xBFBB, 0xBFBC, 0xBFBD, 0xBFBE, /* 0x60 */
+ 0xBFBF, 0xBFC0, 0, 0xBFC1, 0xBFC2, 0xBFC3, 0xBFC4, 0xBFC5, /* 0x70 */
+ 0xBFC6, 0xBFC7, 0xBFC8, 0xBFC9, 0xBFCA, 0xBFCB, 0, 0, /* 0x70 */
+ 0, 0xBFCC, 0xBFCD, 0xBFCE, 0xBFCF, 0xBFD0, 0xBFD1, 0xBFD2, /* 0x80 */
+ 0xBFD3, 0xBFD4, 0xBFD5, 0xBFD6, 0xBFD7, 0xBFD8, 0xBFD9, 0xBFDA, /* 0x80 */
+ 0xBFDB, 0xBFDC, 0, 0xBFDD, 0xBFDE, 0xBFDF, 0xBFE0, 0xBFE1, /* 0x90 */
+ 0xBFE2, 0xBFE3, 0xBFE4, 0xBFE5, 0xBFE6, 0xBFE7, 0, 0, /* 0x90 */
+ 0, 0xBFE8, 0xBFE9, 0xBFEA, 0xBFEB, 0xBFEC, 0xBFED, 0xBFEE, /* 0xA0 */
+ 0xBFEF, 0xBFF0, 0xBFF1, 0xBFF2, 0xBFF3, 0xBFF4, 0xBFF5, 0xBFF6, /* 0xA0 */
+ 0xBFF7, 0xBFF8, 0, 0xBFF9, 0xBFFA, 0xBFFB, 0xBFFC, 0xBFFD, /* 0xB0 */
+ 0xBFFE, 0xBFFF, 0xC000, 0xC001, 0xC002, 0xC003, 0, 0, /* 0xB0 */
+ 0, 0xC004, 0xC005, 0xC006, 0xC007, 0xC008, 0xC009, 0xC00A, /* 0xC0 */
+ 0xC00B, 0xC00C, 0xC00D, 0xC00E, 0xC00F, 0xC010, 0xC011, 0xC012, /* 0xC0 */
+ 0xC013, 0xC014, 0, 0xC015, 0xC016, 0xC017, 0xC018, 0xC019, /* 0xD0 */
+ 0xC01A, 0xC01B, 0xC01C, 0xC01D, 0xC01E, 0xC01F, 0, 0, /* 0xD0 */
+ 0, 0xC020, 0xC021, 0xC022, 0xC023, 0xC024, 0xC025, 0xC026, /* 0xE0 */
+ 0xC027, 0xC028, 0xC029, 0xC02A, 0xC02B, 0xC02C, 0xC02D, 0xC02E, /* 0xE0 */
+ 0xC02F, 0xC030, 0, 0xC031, 0xC032, 0xC033, 0xC034, 0xC035, /* 0xF0 */
+ 0xC036, 0xC037, 0xC038, 0xC039, 0xC03A, 0xC03B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_AB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC03C, 0xC03D, 0xC03E, 0xC03F, 0xC040, 0xC041, 0xC042, /* 0x40 */
+ 0xC043, 0xC044, 0xC045, 0xC046, 0xC047, 0xC048, 0xC049, 0xC04A, /* 0x40 */
+ 0xC04B, 0xC04C, 0, 0xC04D, 0xC04E, 0xC04F, 0xC050, 0xC051, /* 0x50 */
+ 0xC052, 0xC053, 0xC054, 0xC055, 0xC056, 0xC057, 0, 0, /* 0x50 */
+ 0, 0xC058, 0xC059, 0xC05A, 0xC05B, 0xC05C, 0xC05D, 0xC05E, /* 0x60 */
+ 0xC05F, 0xC060, 0xC061, 0xC062, 0xC063, 0xC064, 0xC065, 0xC066, /* 0x60 */
+ 0xC067, 0xC068, 0, 0xC069, 0xC06A, 0xC06B, 0xC06C, 0xC06D, /* 0x70 */
+ 0xC06E, 0xC06F, 0xC070, 0xC071, 0xC072, 0xC073, 0, 0, /* 0x70 */
+ 0, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, 0xC07A, /* 0x80 */
+ 0xC07B, 0xC07C, 0xC07D, 0xC07E, 0xC07F, 0xC080, 0xC081, 0xC082, /* 0x80 */
+ 0xC083, 0xC084, 0, 0xC085, 0xC086, 0xC087, 0xC088, 0xC089, /* 0x90 */
+ 0xC08A, 0xC08B, 0xC08C, 0xC08D, 0xC08E, 0xC08F, 0, 0, /* 0x90 */
+ 0, 0xC090, 0xC091, 0xC092, 0xC093, 0xC094, 0xC095, 0xC096, /* 0xA0 */
+ 0xC097, 0xC098, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, 0xC09E, /* 0xA0 */
+ 0xC09F, 0xC0A0, 0, 0xC0A1, 0xC0A2, 0xC0A3, 0xC0A4, 0xC0A5, /* 0xB0 */
+ 0xC0A6, 0xC0A7, 0xC0A8, 0xC0A9, 0xC0AA, 0xC0AB /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_AC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3145, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC0AC, 0xC0AD, 0xC0AE, 0xC0AF, 0xC0B0, 0xC0B1, 0xC0B2, /* 0x60 */
+ 0xC0B3, 0xC0B4, 0xC0B5, 0xC0B6, 0xC0B7, 0xC0B8, 0xC0B9, 0xC0BA, /* 0x60 */
+ 0xC0BB, 0xC0BC, 0, 0xC0BD, 0xC0BE, 0xC0BF, 0xC0C0, 0xC0C1, /* 0x70 */
+ 0xC0C2, 0xC0C3, 0xC0C4, 0xC0C5, 0xC0C6, 0xC0C7, 0, 0, /* 0x70 */
+ 0, 0xC0C8, 0xC0C9, 0xC0CA, 0xC0CB, 0xC0CC, 0xC0CD, 0xC0CE, /* 0x80 */
+ 0xC0CF, 0xC0D0, 0xC0D1, 0xC0D2, 0xC0D3, 0xC0D4, 0xC0D5, 0xC0D6, /* 0x80 */
+ 0xC0D7, 0xC0D8, 0, 0xC0D9, 0xC0DA, 0xC0DB, 0xC0DC, 0xC0DD, /* 0x90 */
+ 0xC0DE, 0xC0DF, 0xC0E0, 0xC0E1, 0xC0E2, 0xC0E3, 0, 0, /* 0x90 */
+ 0, 0xC0E4, 0xC0E5, 0xC0E6, 0xC0E7, 0xC0E8, 0xC0E9, 0xC0EA, /* 0xA0 */
+ 0xC0EB, 0xC0EC, 0xC0ED, 0xC0EE, 0xC0EF, 0xC0F0, 0xC0F1, 0xC0F2, /* 0xA0 */
+ 0xC0F3, 0xC0F4, 0, 0xC0F5, 0xC0F6, 0xC0F7, 0xC0F8, 0xC0F9, /* 0xB0 */
+ 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD, 0xC0FE, 0xC0FF, 0, 0, /* 0xB0 */
+ 0, 0xC100, 0xC101, 0xC102, 0xC103, 0xC104, 0xC105, 0xC106, /* 0xC0 */
+ 0xC107, 0xC108, 0xC109, 0xC10A, 0xC10B, 0xC10C, 0xC10D, 0xC10E, /* 0xC0 */
+ 0xC10F, 0xC110, 0, 0xC111, 0xC112, 0xC113, 0xC114, 0xC115, /* 0xD0 */
+ 0xC116, 0xC117, 0xC118, 0xC119, 0xC11A, 0xC11B, 0, 0, /* 0xD0 */
+ 0, 0xC11C, 0xC11D, 0xC11E, 0xC11F, 0xC120, 0xC121, 0xC122, /* 0xE0 */
+ 0xC123, 0xC124, 0xC125, 0xC126, 0xC127, 0xC128, 0xC129, 0xC12A, /* 0xE0 */
+ 0xC12B, 0xC12C, 0, 0xC12D, 0xC12E, 0xC12F, 0xC130, 0xC131, /* 0xF0 */
+ 0xC132, 0xC133, 0xC134, 0xC135, 0xC136, 0xC137 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_AD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC138, 0xC139, 0xC13A, 0xC13B, 0xC13C, 0xC13D, 0xC13E, /* 0x40 */
+ 0xC13F, 0xC140, 0xC141, 0xC142, 0xC143, 0xC144, 0xC145, 0xC146, /* 0x40 */
+ 0xC147, 0xC148, 0, 0xC149, 0xC14A, 0xC14B, 0xC14C, 0xC14D, /* 0x50 */
+ 0xC14E, 0xC14F, 0xC150, 0xC151, 0xC152, 0xC153, 0, 0, /* 0x50 */
+ 0, 0xC154, 0xC155, 0xC156, 0xC157, 0xC158, 0xC159, 0xC15A, /* 0x60 */
+ 0xC15B, 0xC15C, 0xC15D, 0xC15E, 0xC15F, 0xC160, 0xC161, 0xC162, /* 0x60 */
+ 0xC163, 0xC164, 0, 0xC165, 0xC166, 0xC167, 0xC168, 0xC169, /* 0x70 */
+ 0xC16A, 0xC16B, 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0, 0, /* 0x70 */
+ 0, 0xC170, 0xC171, 0xC172, 0xC173, 0xC174, 0xC175, 0xC176, /* 0x80 */
+ 0xC177, 0xC178, 0xC179, 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xC17E, /* 0x80 */
+ 0xC17F, 0xC180, 0, 0xC181, 0xC182, 0xC183, 0xC184, 0xC185, /* 0x90 */
+ 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A, 0xC18B, 0, 0, /* 0x90 */
+ 0, 0xC18C, 0xC18D, 0xC18E, 0xC18F, 0xC190, 0xC191, 0xC192, /* 0xA0 */
+ 0xC193, 0xC194, 0xC195, 0xC196, 0xC197, 0xC198, 0xC199, 0xC19A, /* 0xA0 */
+ 0xC19B, 0xC19C, 0, 0xC19D, 0xC19E, 0xC19F, 0xC1A0, 0xC1A1, /* 0xB0 */
+ 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A5, 0xC1A6, 0xC1A7, 0, 0, /* 0xB0 */
+ 0, 0xC1A8, 0xC1A9, 0xC1AA, 0xC1AB, 0xC1AC, 0xC1AD, 0xC1AE, /* 0xC0 */
+ 0xC1AF, 0xC1B0, 0xC1B1, 0xC1B2, 0xC1B3, 0xC1B4, 0xC1B5, 0xC1B6, /* 0xC0 */
+ 0xC1B7, 0xC1B8, 0, 0xC1B9, 0xC1BA, 0xC1BB, 0xC1BC, 0xC1BD, /* 0xD0 */
+ 0xC1BE, 0xC1BF, 0xC1C0, 0xC1C1, 0xC1C2, 0xC1C3, 0, 0, /* 0xD0 */
+ 0, 0xC1C4, 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C8, 0xC1C9, 0xC1CA, /* 0xE0 */
+ 0xC1CB, 0xC1CC, 0xC1CD, 0xC1CE, 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D2, /* 0xE0 */
+ 0xC1D3, 0xC1D4, 0, 0xC1D5, 0xC1D6, 0xC1D7, 0xC1D8, 0xC1D9, /* 0xF0 */
+ 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, 0xC1DE, 0xC1DF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_AE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC1E0, 0xC1E1, 0xC1E2, 0xC1E3, 0xC1E4, 0xC1E5, 0xC1E6, /* 0x40 */
+ 0xC1E7, 0xC1E8, 0xC1E9, 0xC1EA, 0xC1EB, 0xC1EC, 0xC1ED, 0xC1EE, /* 0x40 */
+ 0xC1EF, 0xC1F0, 0, 0xC1F1, 0xC1F2, 0xC1F3, 0xC1F4, 0xC1F5, /* 0x50 */
+ 0xC1F6, 0xC1F7, 0xC1F8, 0xC1F9, 0xC1FA, 0xC1FB, 0, 0, /* 0x50 */
+ 0, 0xC1FC, 0xC1FD, 0xC1FE, 0xC1FF, 0xC200, 0xC201, 0xC202, /* 0x60 */
+ 0xC203, 0xC204, 0xC205, 0xC206, 0xC207, 0xC208, 0xC209, 0xC20A, /* 0x60 */
+ 0xC20B, 0xC20C, 0, 0xC20D, 0xC20E, 0xC20F, 0xC210, 0xC211, /* 0x70 */
+ 0xC212, 0xC213, 0xC214, 0xC215, 0xC216, 0xC217, 0, 0, /* 0x70 */
+ 0, 0xC218, 0xC219, 0xC21A, 0xC21B, 0xC21C, 0xC21D, 0xC21E, /* 0x80 */
+ 0xC21F, 0xC220, 0xC221, 0xC222, 0xC223, 0xC224, 0xC225, 0xC226, /* 0x80 */
+ 0xC227, 0xC228, 0, 0xC229, 0xC22A, 0xC22B, 0xC22C, 0xC22D, /* 0x90 */
+ 0xC22E, 0xC22F, 0xC230, 0xC231, 0xC232, 0xC233, 0, 0, /* 0x90 */
+ 0, 0xC234, 0xC235, 0xC236, 0xC237, 0xC238, 0xC239, 0xC23A, /* 0xA0 */
+ 0xC23B, 0xC23C, 0xC23D, 0xC23E, 0xC23F, 0xC240, 0xC241, 0xC242, /* 0xA0 */
+ 0xC243, 0xC244, 0, 0xC245, 0xC246, 0xC247, 0xC248, 0xC249, /* 0xB0 */
+ 0xC24A, 0xC24B, 0xC24C, 0xC24D, 0xC24E, 0xC24F, 0, 0, /* 0xB0 */
+ 0, 0xC250, 0xC251, 0xC252, 0xC253, 0xC254, 0xC255, 0xC256, /* 0xC0 */
+ 0xC257, 0xC258, 0xC259, 0xC25A, 0xC25B, 0xC25C, 0xC25D, 0xC25E, /* 0xC0 */
+ 0xC25F, 0xC260, 0, 0xC261, 0xC262, 0xC263, 0xC264, 0xC265, /* 0xD0 */
+ 0xC266, 0xC267, 0xC268, 0xC269, 0xC26A, 0xC26B, 0, 0, /* 0xD0 */
+ 0, 0xC26C, 0xC26D, 0xC26E, 0xC26F, 0xC270, 0xC271, 0xC272, /* 0xE0 */
+ 0xC273, 0xC274, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, 0xC27A, /* 0xE0 */
+ 0xC27B, 0xC27C, 0, 0xC27D, 0xC27E, 0xC27F, 0xC280, 0xC281, /* 0xF0 */
+ 0xC282, 0xC283, 0xC284, 0xC285, 0xC286, 0xC287 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_AF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC288, 0xC289, 0xC28A, 0xC28B, 0xC28C, 0xC28D, 0xC28E, /* 0x40 */
+ 0xC28F, 0xC290, 0xC291, 0xC292, 0xC293, 0xC294, 0xC295, 0xC296, /* 0x40 */
+ 0xC297, 0xC298, 0, 0xC299, 0xC29A, 0xC29B, 0xC29C, 0xC29D, /* 0x50 */
+ 0xC29E, 0xC29F, 0xC2A0, 0xC2A1, 0xC2A2, 0xC2A3, 0, 0, /* 0x50 */
+ 0, 0xC2A4, 0xC2A5, 0xC2A6, 0xC2A7, 0xC2A8, 0xC2A9, 0xC2AA, /* 0x60 */
+ 0xC2AB, 0xC2AC, 0xC2AD, 0xC2AE, 0xC2AF, 0xC2B0, 0xC2B1, 0xC2B2, /* 0x60 */
+ 0xC2B3, 0xC2B4, 0, 0xC2B5, 0xC2B6, 0xC2B7, 0xC2B8, 0xC2B9, /* 0x70 */
+ 0xC2BA, 0xC2BB, 0xC2BC, 0xC2BD, 0xC2BE, 0xC2BF, 0, 0, /* 0x70 */
+ 0, 0xC2C0, 0xC2C1, 0xC2C2, 0xC2C3, 0xC2C4, 0xC2C5, 0xC2C6, /* 0x80 */
+ 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA, 0xC2CB, 0xC2CC, 0xC2CD, 0xC2CE, /* 0x80 */
+ 0xC2CF, 0xC2D0, 0, 0xC2D1, 0xC2D2, 0xC2D3, 0xC2D4, 0xC2D5, /* 0x90 */
+ 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA, 0xC2DB, 0, 0, /* 0x90 */
+ 0, 0xC2DC, 0xC2DD, 0xC2DE, 0xC2DF, 0xC2E0, 0xC2E1, 0xC2E2, /* 0xA0 */
+ 0xC2E3, 0xC2E4, 0xC2E5, 0xC2E6, 0xC2E7, 0xC2E8, 0xC2E9, 0xC2EA, /* 0xA0 */
+ 0xC2EB, 0xC2EC, 0, 0xC2ED, 0xC2EE, 0xC2EF, 0xC2F0, 0xC2F1, /* 0xB0 */
+ 0xC2F2, 0xC2F3, 0xC2F4, 0xC2F5, 0xC2F6, 0xC2F7 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3146, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC2F8, 0xC2F9, 0xC2FA, 0xC2FB, 0xC2FC, 0xC2FD, 0xC2FE, /* 0x60 */
+ 0xC2FF, 0xC300, 0xC301, 0xC302, 0xC303, 0xC304, 0xC305, 0xC306, /* 0x60 */
+ 0xC307, 0xC308, 0, 0xC309, 0xC30A, 0xC30B, 0xC30C, 0xC30D, /* 0x70 */
+ 0xC30E, 0xC30F, 0xC310, 0xC311, 0xC312, 0xC313, 0, 0, /* 0x70 */
+ 0, 0xC314, 0xC315, 0xC316, 0xC317, 0xC318, 0xC319, 0xC31A, /* 0x80 */
+ 0xC31B, 0xC31C, 0xC31D, 0xC31E, 0xC31F, 0xC320, 0xC321, 0xC322, /* 0x80 */
+ 0xC323, 0xC324, 0, 0xC325, 0xC326, 0xC327, 0xC328, 0xC329, /* 0x90 */
+ 0xC32A, 0xC32B, 0xC32C, 0xC32D, 0xC32E, 0xC32F, 0, 0, /* 0x90 */
+ 0, 0xC330, 0xC331, 0xC332, 0xC333, 0xC334, 0xC335, 0xC336, /* 0xA0 */
+ 0xC337, 0xC338, 0xC339, 0xC33A, 0xC33B, 0xC33C, 0xC33D, 0xC33E, /* 0xA0 */
+ 0xC33F, 0xC340, 0, 0xC341, 0xC342, 0xC343, 0xC344, 0xC345, /* 0xB0 */
+ 0xC346, 0xC347, 0xC348, 0xC349, 0xC34A, 0xC34B, 0, 0, /* 0xB0 */
+ 0, 0xC34C, 0xC34D, 0xC34E, 0xC34F, 0xC350, 0xC351, 0xC352, /* 0xC0 */
+ 0xC353, 0xC354, 0xC355, 0xC356, 0xC357, 0xC358, 0xC359, 0xC35A, /* 0xC0 */
+ 0xC35B, 0xC35C, 0, 0xC35D, 0xC35E, 0xC35F, 0xC360, 0xC361, /* 0xD0 */
+ 0xC362, 0xC363, 0xC364, 0xC365, 0xC366, 0xC367, 0, 0, /* 0xD0 */
+ 0, 0xC368, 0xC369, 0xC36A, 0xC36B, 0xC36C, 0xC36D, 0xC36E, /* 0xE0 */
+ 0xC36F, 0xC370, 0xC371, 0xC372, 0xC373, 0xC374, 0xC375, 0xC376, /* 0xE0 */
+ 0xC377, 0xC378, 0, 0xC379, 0xC37A, 0xC37B, 0xC37C, 0xC37D, /* 0xF0 */
+ 0xC37E, 0xC37F, 0xC380, 0xC381, 0xC382, 0xC383 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC384, 0xC385, 0xC386, 0xC387, 0xC388, 0xC389, 0xC38A, /* 0x40 */
+ 0xC38B, 0xC38C, 0xC38D, 0xC38E, 0xC38F, 0xC390, 0xC391, 0xC392, /* 0x40 */
+ 0xC393, 0xC394, 0, 0xC395, 0xC396, 0xC397, 0xC398, 0xC399, /* 0x50 */
+ 0xC39A, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, 0, 0, /* 0x50 */
+ 0, 0xC3A0, 0xC3A1, 0xC3A2, 0xC3A3, 0xC3A4, 0xC3A5, 0xC3A6, /* 0x60 */
+ 0xC3A7, 0xC3A8, 0xC3A9, 0xC3AA, 0xC3AB, 0xC3AC, 0xC3AD, 0xC3AE, /* 0x60 */
+ 0xC3AF, 0xC3B0, 0, 0xC3B1, 0xC3B2, 0xC3B3, 0xC3B4, 0xC3B5, /* 0x70 */
+ 0xC3B6, 0xC3B7, 0xC3B8, 0xC3B9, 0xC3BA, 0xC3BB, 0, 0, /* 0x70 */
+ 0, 0xC3BC, 0xC3BD, 0xC3BE, 0xC3BF, 0xC3C0, 0xC3C1, 0xC3C2, /* 0x80 */
+ 0xC3C3, 0xC3C4, 0xC3C5, 0xC3C6, 0xC3C7, 0xC3C8, 0xC3C9, 0xC3CA, /* 0x80 */
+ 0xC3CB, 0xC3CC, 0, 0xC3CD, 0xC3CE, 0xC3CF, 0xC3D0, 0xC3D1, /* 0x90 */
+ 0xC3D2, 0xC3D3, 0xC3D4, 0xC3D5, 0xC3D6, 0xC3D7, 0, 0, /* 0x90 */
+ 0, 0xC3D8, 0xC3D9, 0xC3DA, 0xC3DB, 0xC3DC, 0xC3DD, 0xC3DE, /* 0xA0 */
+ 0xC3DF, 0xC3E0, 0xC3E1, 0xC3E2, 0xC3E3, 0xC3E4, 0xC3E5, 0xC3E6, /* 0xA0 */
+ 0xC3E7, 0xC3E8, 0, 0xC3E9, 0xC3EA, 0xC3EB, 0xC3EC, 0xC3ED, /* 0xB0 */
+ 0xC3EE, 0xC3EF, 0xC3F0, 0xC3F1, 0xC3F2, 0xC3F3, 0, 0, /* 0xB0 */
+ 0, 0xC3F4, 0xC3F5, 0xC3F6, 0xC3F7, 0xC3F8, 0xC3F9, 0xC3FA, /* 0xC0 */
+ 0xC3FB, 0xC3FC, 0xC3FD, 0xC3FE, 0xC3FF, 0xC400, 0xC401, 0xC402, /* 0xC0 */
+ 0xC403, 0xC404, 0, 0xC405, 0xC406, 0xC407, 0xC408, 0xC409, /* 0xD0 */
+ 0xC40A, 0xC40B, 0xC40C, 0xC40D, 0xC40E, 0xC40F, 0, 0, /* 0xD0 */
+ 0, 0xC410, 0xC411, 0xC412, 0xC413, 0xC414, 0xC415, 0xC416, /* 0xE0 */
+ 0xC417, 0xC418, 0xC419, 0xC41A, 0xC41B, 0xC41C, 0xC41D, 0xC41E, /* 0xE0 */
+ 0xC41F, 0xC420, 0, 0xC421, 0xC422, 0xC423, 0xC424, 0xC425, /* 0xF0 */
+ 0xC426, 0xC427, 0xC428, 0xC429, 0xC42A, 0xC42B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC42C, 0xC42D, 0xC42E, 0xC42F, 0xC430, 0xC431, 0xC432, /* 0x40 */
+ 0xC433, 0xC434, 0xC435, 0xC436, 0xC437, 0xC438, 0xC439, 0xC43A, /* 0x40 */
+ 0xC43B, 0xC43C, 0, 0xC43D, 0xC43E, 0xC43F, 0xC440, 0xC441, /* 0x50 */
+ 0xC442, 0xC443, 0xC444, 0xC445, 0xC446, 0xC447, 0, 0, /* 0x50 */
+ 0, 0xC448, 0xC449, 0xC44A, 0xC44B, 0xC44C, 0xC44D, 0xC44E, /* 0x60 */
+ 0xC44F, 0xC450, 0xC451, 0xC452, 0xC453, 0xC454, 0xC455, 0xC456, /* 0x60 */
+ 0xC457, 0xC458, 0, 0xC459, 0xC45A, 0xC45B, 0xC45C, 0xC45D, /* 0x70 */
+ 0xC45E, 0xC45F, 0xC460, 0xC461, 0xC462, 0xC463, 0, 0, /* 0x70 */
+ 0, 0xC464, 0xC465, 0xC466, 0xC467, 0xC468, 0xC469, 0xC46A, /* 0x80 */
+ 0xC46B, 0xC46C, 0xC46D, 0xC46E, 0xC46F, 0xC470, 0xC471, 0xC472, /* 0x80 */
+ 0xC473, 0xC474, 0, 0xC475, 0xC476, 0xC477, 0xC478, 0xC479, /* 0x90 */
+ 0xC47A, 0xC47B, 0xC47C, 0xC47D, 0xC47E, 0xC47F, 0, 0, /* 0x90 */
+ 0, 0xC480, 0xC481, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, /* 0xA0 */
+ 0xC487, 0xC488, 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E, /* 0xA0 */
+ 0xC48F, 0xC490, 0, 0xC491, 0xC492, 0xC493, 0xC494, 0xC495, /* 0xB0 */
+ 0xC496, 0xC497, 0xC498, 0xC499, 0xC49A, 0xC49B, 0, 0, /* 0xB0 */
+ 0, 0xC49C, 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC4A1, 0xC4A2, /* 0xC0 */
+ 0xC4A3, 0xC4A4, 0xC4A5, 0xC4A6, 0xC4A7, 0xC4A8, 0xC4A9, 0xC4AA, /* 0xC0 */
+ 0xC4AB, 0xC4AC, 0, 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, 0xC4B1, /* 0xD0 */
+ 0xC4B2, 0xC4B3, 0xC4B4, 0xC4B5, 0xC4B6, 0xC4B7, 0, 0, /* 0xD0 */
+ 0, 0xC4B8, 0xC4B9, 0xC4BA, 0xC4BB, 0xC4BC, 0xC4BD, 0xC4BE, /* 0xE0 */
+ 0xC4BF, 0xC4C0, 0xC4C1, 0xC4C2, 0xC4C3, 0xC4C4, 0xC4C5, 0xC4C6, /* 0xE0 */
+ 0xC4C7, 0xC4C8, 0, 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, 0xC4CD, /* 0xF0 */
+ 0xC4CE, 0xC4CF, 0xC4D0, 0xC4D1, 0xC4D2, 0xC4D3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC4D4, 0xC4D5, 0xC4D6, 0xC4D7, 0xC4D8, 0xC4D9, 0xC4DA, /* 0x40 */
+ 0xC4DB, 0xC4DC, 0xC4DD, 0xC4DE, 0xC4DF, 0xC4E0, 0xC4E1, 0xC4E2, /* 0x40 */
+ 0xC4E3, 0xC4E4, 0, 0xC4E5, 0xC4E6, 0xC4E7, 0xC4E8, 0xC4E9, /* 0x50 */
+ 0xC4EA, 0xC4EB, 0xC4EC, 0xC4ED, 0xC4EE, 0xC4EF, 0, 0, /* 0x50 */
+ 0, 0xC4F0, 0xC4F1, 0xC4F2, 0xC4F3, 0xC4F4, 0xC4F5, 0xC4F6, /* 0x60 */
+ 0xC4F7, 0xC4F8, 0xC4F9, 0xC4FA, 0xC4FB, 0xC4FC, 0xC4FD, 0xC4FE, /* 0x60 */
+ 0xC4FF, 0xC500, 0, 0xC501, 0xC502, 0xC503, 0xC504, 0xC505, /* 0x70 */
+ 0xC506, 0xC507, 0xC508, 0xC509, 0xC50A, 0xC50B, 0, 0, /* 0x70 */
+ 0, 0xC50C, 0xC50D, 0xC50E, 0xC50F, 0xC510, 0xC511, 0xC512, /* 0x80 */
+ 0xC513, 0xC514, 0xC515, 0xC516, 0xC517, 0xC518, 0xC519, 0xC51A, /* 0x80 */
+ 0xC51B, 0xC51C, 0, 0xC51D, 0xC51E, 0xC51F, 0xC520, 0xC521, /* 0x90 */
+ 0xC522, 0xC523, 0xC524, 0xC525, 0xC526, 0xC527, 0, 0, /* 0x90 */
+ 0, 0xC528, 0xC529, 0xC52A, 0xC52B, 0xC52C, 0xC52D, 0xC52E, /* 0xA0 */
+ 0xC52F, 0xC530, 0xC531, 0xC532, 0xC533, 0xC534, 0xC535, 0xC536, /* 0xA0 */
+ 0xC537, 0xC538, 0, 0xC539, 0xC53A, 0xC53B, 0xC53C, 0xC53D, /* 0xB0 */
+ 0xC53E, 0xC53F, 0xC540, 0xC541, 0xC542, 0xC543 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3147, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC544, 0xC545, 0xC546, 0xC547, 0xC548, 0xC549, 0xC54A, /* 0x60 */
+ 0xC54B, 0xC54C, 0xC54D, 0xC54E, 0xC54F, 0xC550, 0xC551, 0xC552, /* 0x60 */
+ 0xC553, 0xC554, 0, 0xC555, 0xC556, 0xC557, 0xC558, 0xC559, /* 0x70 */
+ 0xC55A, 0xC55B, 0xC55C, 0xC55D, 0xC55E, 0xC55F, 0, 0, /* 0x70 */
+ 0, 0xC560, 0xC561, 0xC562, 0xC563, 0xC564, 0xC565, 0xC566, /* 0x80 */
+ 0xC567, 0xC568, 0xC569, 0xC56A, 0xC56B, 0xC56C, 0xC56D, 0xC56E, /* 0x80 */
+ 0xC56F, 0xC570, 0, 0xC571, 0xC572, 0xC573, 0xC574, 0xC575, /* 0x90 */
+ 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC57B, 0, 0, /* 0x90 */
+ 0, 0xC57C, 0xC57D, 0xC57E, 0xC57F, 0xC580, 0xC581, 0xC582, /* 0xA0 */
+ 0xC583, 0xC584, 0xC585, 0xC586, 0xC587, 0xC588, 0xC589, 0xC58A, /* 0xA0 */
+ 0xC58B, 0xC58C, 0, 0xC58D, 0xC58E, 0xC58F, 0xC590, 0xC591, /* 0xB0 */
+ 0xC592, 0xC593, 0xC594, 0xC595, 0xC596, 0xC597, 0, 0, /* 0xB0 */
+ 0, 0xC598, 0xC599, 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC59E, /* 0xC0 */
+ 0xC59F, 0xC5A0, 0xC5A1, 0xC5A2, 0xC5A3, 0xC5A4, 0xC5A5, 0xC5A6, /* 0xC0 */
+ 0xC5A7, 0xC5A8, 0, 0xC5A9, 0xC5AA, 0xC5AB, 0xC5AC, 0xC5AD, /* 0xD0 */
+ 0xC5AE, 0xC5AF, 0xC5B0, 0xC5B1, 0xC5B2, 0xC5B3, 0, 0, /* 0xD0 */
+ 0, 0xC5B4, 0xC5B5, 0xC5B6, 0xC5B7, 0xC5B8, 0xC5B9, 0xC5BA, /* 0xE0 */
+ 0xC5BB, 0xC5BC, 0xC5BD, 0xC5BE, 0xC5BF, 0xC5C0, 0xC5C1, 0xC5C2, /* 0xE0 */
+ 0xC5C3, 0xC5C4, 0, 0xC5C5, 0xC5C6, 0xC5C7, 0xC5C8, 0xC5C9, /* 0xF0 */
+ 0xC5CA, 0xC5CB, 0xC5CC, 0xC5CD, 0xC5CE, 0xC5CF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC5D0, 0xC5D1, 0xC5D2, 0xC5D3, 0xC5D4, 0xC5D5, 0xC5D6, /* 0x40 */
+ 0xC5D7, 0xC5D8, 0xC5D9, 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5DE, /* 0x40 */
+ 0xC5DF, 0xC5E0, 0, 0xC5E1, 0xC5E2, 0xC5E3, 0xC5E4, 0xC5E5, /* 0x50 */
+ 0xC5E6, 0xC5E7, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0, 0, /* 0x50 */
+ 0, 0xC5EC, 0xC5ED, 0xC5EE, 0xC5EF, 0xC5F0, 0xC5F1, 0xC5F2, /* 0x60 */
+ 0xC5F3, 0xC5F4, 0xC5F5, 0xC5F6, 0xC5F7, 0xC5F8, 0xC5F9, 0xC5FA, /* 0x60 */
+ 0xC5FB, 0xC5FC, 0, 0xC5FD, 0xC5FE, 0xC5FF, 0xC600, 0xC601, /* 0x70 */
+ 0xC602, 0xC603, 0xC604, 0xC605, 0xC606, 0xC607, 0, 0, /* 0x70 */
+ 0, 0xC608, 0xC609, 0xC60A, 0xC60B, 0xC60C, 0xC60D, 0xC60E, /* 0x80 */
+ 0xC60F, 0xC610, 0xC611, 0xC612, 0xC613, 0xC614, 0xC615, 0xC616, /* 0x80 */
+ 0xC617, 0xC618, 0, 0xC619, 0xC61A, 0xC61B, 0xC61C, 0xC61D, /* 0x90 */
+ 0xC61E, 0xC61F, 0xC620, 0xC621, 0xC622, 0xC623, 0, 0, /* 0x90 */
+ 0, 0xC624, 0xC625, 0xC626, 0xC627, 0xC628, 0xC629, 0xC62A, /* 0xA0 */
+ 0xC62B, 0xC62C, 0xC62D, 0xC62E, 0xC62F, 0xC630, 0xC631, 0xC632, /* 0xA0 */
+ 0xC633, 0xC634, 0, 0xC635, 0xC636, 0xC637, 0xC638, 0xC639, /* 0xB0 */
+ 0xC63A, 0xC63B, 0xC63C, 0xC63D, 0xC63E, 0xC63F, 0, 0, /* 0xB0 */
+ 0, 0xC640, 0xC641, 0xC642, 0xC643, 0xC644, 0xC645, 0xC646, /* 0xC0 */
+ 0xC647, 0xC648, 0xC649, 0xC64A, 0xC64B, 0xC64C, 0xC64D, 0xC64E, /* 0xC0 */
+ 0xC64F, 0xC650, 0, 0xC651, 0xC652, 0xC653, 0xC654, 0xC655, /* 0xD0 */
+ 0xC656, 0xC657, 0xC658, 0xC659, 0xC65A, 0xC65B, 0, 0, /* 0xD0 */
+ 0, 0xC65C, 0xC65D, 0xC65E, 0xC65F, 0xC660, 0xC661, 0xC662, /* 0xE0 */
+ 0xC663, 0xC664, 0xC665, 0xC666, 0xC667, 0xC668, 0xC669, 0xC66A, /* 0xE0 */
+ 0xC66B, 0xC66C, 0, 0xC66D, 0xC66E, 0xC66F, 0xC670, 0xC671, /* 0xF0 */
+ 0xC672, 0xC673, 0xC674, 0xC675, 0xC676, 0xC677 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC678, 0xC679, 0xC67A, 0xC67B, 0xC67C, 0xC67D, 0xC67E, /* 0x40 */
+ 0xC67F, 0xC680, 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, 0xC686, /* 0x40 */
+ 0xC687, 0xC688, 0, 0xC689, 0xC68A, 0xC68B, 0xC68C, 0xC68D, /* 0x50 */
+ 0xC68E, 0xC68F, 0xC690, 0xC691, 0xC692, 0xC693, 0, 0, /* 0x50 */
+ 0, 0xC694, 0xC695, 0xC696, 0xC697, 0xC698, 0xC699, 0xC69A, /* 0x60 */
+ 0xC69B, 0xC69C, 0xC69D, 0xC69E, 0xC69F, 0xC6A0, 0xC6A1, 0xC6A2, /* 0x60 */
+ 0xC6A3, 0xC6A4, 0, 0xC6A5, 0xC6A6, 0xC6A7, 0xC6A8, 0xC6A9, /* 0x70 */
+ 0xC6AA, 0xC6AB, 0xC6AC, 0xC6AD, 0xC6AE, 0xC6AF, 0, 0, /* 0x70 */
+ 0, 0xC6B0, 0xC6B1, 0xC6B2, 0xC6B3, 0xC6B4, 0xC6B5, 0xC6B6, /* 0x80 */
+ 0xC6B7, 0xC6B8, 0xC6B9, 0xC6BA, 0xC6BB, 0xC6BC, 0xC6BD, 0xC6BE, /* 0x80 */
+ 0xC6BF, 0xC6C0, 0, 0xC6C1, 0xC6C2, 0xC6C3, 0xC6C4, 0xC6C5, /* 0x90 */
+ 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9, 0xC6CA, 0xC6CB, 0, 0, /* 0x90 */
+ 0, 0xC6CC, 0xC6CD, 0xC6CE, 0xC6CF, 0xC6D0, 0xC6D1, 0xC6D2, /* 0xA0 */
+ 0xC6D3, 0xC6D4, 0xC6D5, 0xC6D6, 0xC6D7, 0xC6D8, 0xC6D9, 0xC6DA, /* 0xA0 */
+ 0xC6DB, 0xC6DC, 0, 0xC6DD, 0xC6DE, 0xC6DF, 0xC6E0, 0xC6E1, /* 0xB0 */
+ 0xC6E2, 0xC6E3, 0xC6E4, 0xC6E5, 0xC6E6, 0xC6E7, 0, 0, /* 0xB0 */
+ 0, 0xC6E8, 0xC6E9, 0xC6EA, 0xC6EB, 0xC6EC, 0xC6ED, 0xC6EE, /* 0xC0 */
+ 0xC6EF, 0xC6F0, 0xC6F1, 0xC6F2, 0xC6F3, 0xC6F4, 0xC6F5, 0xC6F6, /* 0xC0 */
+ 0xC6F7, 0xC6F8, 0, 0xC6F9, 0xC6FA, 0xC6FB, 0xC6FC, 0xC6FD, /* 0xD0 */
+ 0xC6FE, 0xC6FF, 0xC700, 0xC701, 0xC702, 0xC703, 0, 0, /* 0xD0 */
+ 0, 0xC704, 0xC705, 0xC706, 0xC707, 0xC708, 0xC709, 0xC70A, /* 0xE0 */
+ 0xC70B, 0xC70C, 0xC70D, 0xC70E, 0xC70F, 0xC710, 0xC711, 0xC712, /* 0xE0 */
+ 0xC713, 0xC714, 0, 0xC715, 0xC716, 0xC717, 0xC718, 0xC719, /* 0xF0 */
+ 0xC71A, 0xC71B, 0xC71C, 0xC71D, 0xC71E, 0xC71F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC720, 0xC721, 0xC722, 0xC723, 0xC724, 0xC725, 0xC726, /* 0x40 */
+ 0xC727, 0xC728, 0xC729, 0xC72A, 0xC72B, 0xC72C, 0xC72D, 0xC72E, /* 0x40 */
+ 0xC72F, 0xC730, 0, 0xC731, 0xC732, 0xC733, 0xC734, 0xC735, /* 0x50 */
+ 0xC736, 0xC737, 0xC738, 0xC739, 0xC73A, 0xC73B, 0, 0, /* 0x50 */
+ 0, 0xC73C, 0xC73D, 0xC73E, 0xC73F, 0xC740, 0xC741, 0xC742, /* 0x60 */
+ 0xC743, 0xC744, 0xC745, 0xC746, 0xC747, 0xC748, 0xC749, 0xC74A, /* 0x60 */
+ 0xC74B, 0xC74C, 0, 0xC74D, 0xC74E, 0xC74F, 0xC750, 0xC751, /* 0x70 */
+ 0xC752, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, 0, 0, /* 0x70 */
+ 0, 0xC758, 0xC759, 0xC75A, 0xC75B, 0xC75C, 0xC75D, 0xC75E, /* 0x80 */
+ 0xC75F, 0xC760, 0xC761, 0xC762, 0xC763, 0xC764, 0xC765, 0xC766, /* 0x80 */
+ 0xC767, 0xC768, 0, 0xC769, 0xC76A, 0xC76B, 0xC76C, 0xC76D, /* 0x90 */
+ 0xC76E, 0xC76F, 0xC770, 0xC771, 0xC772, 0xC773, 0, 0, /* 0x90 */
+ 0, 0xC774, 0xC775, 0xC776, 0xC777, 0xC778, 0xC779, 0xC77A, /* 0xA0 */
+ 0xC77B, 0xC77C, 0xC77D, 0xC77E, 0xC77F, 0xC780, 0xC781, 0xC782, /* 0xA0 */
+ 0xC783, 0xC784, 0, 0xC785, 0xC786, 0xC787, 0xC788, 0xC789, /* 0xB0 */
+ 0xC78A, 0xC78B, 0xC78C, 0xC78D, 0xC78E, 0xC78F /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3148, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC790, 0xC791, 0xC792, 0xC793, 0xC794, 0xC795, 0xC796, /* 0x60 */
+ 0xC797, 0xC798, 0xC799, 0xC79A, 0xC79B, 0xC79C, 0xC79D, 0xC79E, /* 0x60 */
+ 0xC79F, 0xC7A0, 0, 0xC7A1, 0xC7A2, 0xC7A3, 0xC7A4, 0xC7A5, /* 0x70 */
+ 0xC7A6, 0xC7A7, 0xC7A8, 0xC7A9, 0xC7AA, 0xC7AB, 0, 0, /* 0x70 */
+ 0, 0xC7AC, 0xC7AD, 0xC7AE, 0xC7AF, 0xC7B0, 0xC7B1, 0xC7B2, /* 0x80 */
+ 0xC7B3, 0xC7B4, 0xC7B5, 0xC7B6, 0xC7B7, 0xC7B8, 0xC7B9, 0xC7BA, /* 0x80 */
+ 0xC7BB, 0xC7BC, 0, 0xC7BD, 0xC7BE, 0xC7BF, 0xC7C0, 0xC7C1, /* 0x90 */
+ 0xC7C2, 0xC7C3, 0xC7C4, 0xC7C5, 0xC7C6, 0xC7C7, 0, 0, /* 0x90 */
+ 0, 0xC7C8, 0xC7C9, 0xC7CA, 0xC7CB, 0xC7CC, 0xC7CD, 0xC7CE, /* 0xA0 */
+ 0xC7CF, 0xC7D0, 0xC7D1, 0xC7D2, 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6, /* 0xA0 */
+ 0xC7D7, 0xC7D8, 0, 0xC7D9, 0xC7DA, 0xC7DB, 0xC7DC, 0xC7DD, /* 0xB0 */
+ 0xC7DE, 0xC7DF, 0xC7E0, 0xC7E1, 0xC7E2, 0xC7E3, 0, 0, /* 0xB0 */
+ 0, 0xC7E4, 0xC7E5, 0xC7E6, 0xC7E7, 0xC7E8, 0xC7E9, 0xC7EA, /* 0xC0 */
+ 0xC7EB, 0xC7EC, 0xC7ED, 0xC7EE, 0xC7EF, 0xC7F0, 0xC7F1, 0xC7F2, /* 0xC0 */
+ 0xC7F3, 0xC7F4, 0, 0xC7F5, 0xC7F6, 0xC7F7, 0xC7F8, 0xC7F9, /* 0xD0 */
+ 0xC7FA, 0xC7FB, 0xC7FC, 0xC7FD, 0xC7FE, 0xC7FF, 0, 0, /* 0xD0 */
+ 0, 0xC800, 0xC801, 0xC802, 0xC803, 0xC804, 0xC805, 0xC806, /* 0xE0 */
+ 0xC807, 0xC808, 0xC809, 0xC80A, 0xC80B, 0xC80C, 0xC80D, 0xC80E, /* 0xE0 */
+ 0xC80F, 0xC810, 0, 0xC811, 0xC812, 0xC813, 0xC814, 0xC815, /* 0xF0 */
+ 0xC816, 0xC817, 0xC818, 0xC819, 0xC81A, 0xC81B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_B9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC81C, 0xC81D, 0xC81E, 0xC81F, 0xC820, 0xC821, 0xC822, /* 0x40 */
+ 0xC823, 0xC824, 0xC825, 0xC826, 0xC827, 0xC828, 0xC829, 0xC82A, /* 0x40 */
+ 0xC82B, 0xC82C, 0, 0xC82D, 0xC82E, 0xC82F, 0xC830, 0xC831, /* 0x50 */
+ 0xC832, 0xC833, 0xC834, 0xC835, 0xC836, 0xC837, 0, 0, /* 0x50 */
+ 0, 0xC838, 0xC839, 0xC83A, 0xC83B, 0xC83C, 0xC83D, 0xC83E, /* 0x60 */
+ 0xC83F, 0xC840, 0xC841, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846, /* 0x60 */
+ 0xC847, 0xC848, 0, 0xC849, 0xC84A, 0xC84B, 0xC84C, 0xC84D, /* 0x70 */
+ 0xC84E, 0xC84F, 0xC850, 0xC851, 0xC852, 0xC853, 0, 0, /* 0x70 */
+ 0, 0xC854, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, 0xC85A, /* 0x80 */
+ 0xC85B, 0xC85C, 0xC85D, 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, /* 0x80 */
+ 0xC863, 0xC864, 0, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, /* 0x90 */
+ 0xC86A, 0xC86B, 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0, 0, /* 0x90 */
+ 0, 0xC870, 0xC871, 0xC872, 0xC873, 0xC874, 0xC875, 0xC876, /* 0xA0 */
+ 0xC877, 0xC878, 0xC879, 0xC87A, 0xC87B, 0xC87C, 0xC87D, 0xC87E, /* 0xA0 */
+ 0xC87F, 0xC880, 0, 0xC881, 0xC882, 0xC883, 0xC884, 0xC885, /* 0xB0 */
+ 0xC886, 0xC887, 0xC888, 0xC889, 0xC88A, 0xC88B, 0, 0, /* 0xB0 */
+ 0, 0xC88C, 0xC88D, 0xC88E, 0xC88F, 0xC890, 0xC891, 0xC892, /* 0xC0 */
+ 0xC893, 0xC894, 0xC895, 0xC896, 0xC897, 0xC898, 0xC899, 0xC89A, /* 0xC0 */
+ 0xC89B, 0xC89C, 0, 0xC89D, 0xC89E, 0xC89F, 0xC8A0, 0xC8A1, /* 0xD0 */
+ 0xC8A2, 0xC8A3, 0xC8A4, 0xC8A5, 0xC8A6, 0xC8A7, 0, 0, /* 0xD0 */
+ 0, 0xC8A8, 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, 0xC8AD, 0xC8AE, /* 0xE0 */
+ 0xC8AF, 0xC8B0, 0xC8B1, 0xC8B2, 0xC8B3, 0xC8B4, 0xC8B5, 0xC8B6, /* 0xE0 */
+ 0xC8B7, 0xC8B8, 0, 0xC8B9, 0xC8BA, 0xC8BB, 0xC8BC, 0xC8BD, /* 0xF0 */
+ 0xC8BE, 0xC8BF, 0xC8C0, 0xC8C1, 0xC8C2, 0xC8C3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_BA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC8C4, 0xC8C5, 0xC8C6, 0xC8C7, 0xC8C8, 0xC8C9, 0xC8CA, /* 0x40 */
+ 0xC8CB, 0xC8CC, 0xC8CD, 0xC8CE, 0xC8CF, 0xC8D0, 0xC8D1, 0xC8D2, /* 0x40 */
+ 0xC8D3, 0xC8D4, 0, 0xC8D5, 0xC8D6, 0xC8D7, 0xC8D8, 0xC8D9, /* 0x50 */
+ 0xC8DA, 0xC8DB, 0xC8DC, 0xC8DD, 0xC8DE, 0xC8DF, 0, 0, /* 0x50 */
+ 0, 0xC8E0, 0xC8E1, 0xC8E2, 0xC8E3, 0xC8E4, 0xC8E5, 0xC8E6, /* 0x60 */
+ 0xC8E7, 0xC8E8, 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC, 0xC8ED, 0xC8EE, /* 0x60 */
+ 0xC8EF, 0xC8F0, 0, 0xC8F1, 0xC8F2, 0xC8F3, 0xC8F4, 0xC8F5, /* 0x70 */
+ 0xC8F6, 0xC8F7, 0xC8F8, 0xC8F9, 0xC8FA, 0xC8FB, 0, 0, /* 0x70 */
+ 0, 0xC8FC, 0xC8FD, 0xC8FE, 0xC8FF, 0xC900, 0xC901, 0xC902, /* 0x80 */
+ 0xC903, 0xC904, 0xC905, 0xC906, 0xC907, 0xC908, 0xC909, 0xC90A, /* 0x80 */
+ 0xC90B, 0xC90C, 0, 0xC90D, 0xC90E, 0xC90F, 0xC910, 0xC911, /* 0x90 */
+ 0xC912, 0xC913, 0xC914, 0xC915, 0xC916, 0xC917, 0, 0, /* 0x90 */
+ 0, 0xC918, 0xC919, 0xC91A, 0xC91B, 0xC91C, 0xC91D, 0xC91E, /* 0xA0 */
+ 0xC91F, 0xC920, 0xC921, 0xC922, 0xC923, 0xC924, 0xC925, 0xC926, /* 0xA0 */
+ 0xC927, 0xC928, 0, 0xC929, 0xC92A, 0xC92B, 0xC92C, 0xC92D, /* 0xB0 */
+ 0xC92E, 0xC92F, 0xC930, 0xC931, 0xC932, 0xC933, 0, 0, /* 0xB0 */
+ 0, 0xC934, 0xC935, 0xC936, 0xC937, 0xC938, 0xC939, 0xC93A, /* 0xC0 */
+ 0xC93B, 0xC93C, 0xC93D, 0xC93E, 0xC93F, 0xC940, 0xC941, 0xC942, /* 0xC0 */
+ 0xC943, 0xC944, 0, 0xC945, 0xC946, 0xC947, 0xC948, 0xC949, /* 0xD0 */
+ 0xC94A, 0xC94B, 0xC94C, 0xC94D, 0xC94E, 0xC94F, 0, 0, /* 0xD0 */
+ 0, 0xC950, 0xC951, 0xC952, 0xC953, 0xC954, 0xC955, 0xC956, /* 0xE0 */
+ 0xC957, 0xC958, 0xC959, 0xC95A, 0xC95B, 0xC95C, 0xC95D, 0xC95E, /* 0xE0 */
+ 0xC95F, 0xC960, 0, 0xC961, 0xC962, 0xC963, 0xC964, 0xC965, /* 0xF0 */
+ 0xC966, 0xC967, 0xC968, 0xC969, 0xC96A, 0xC96B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_BB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC96C, 0xC96D, 0xC96E, 0xC96F, 0xC970, 0xC971, 0xC972, /* 0x40 */
+ 0xC973, 0xC974, 0xC975, 0xC976, 0xC977, 0xC978, 0xC979, 0xC97A, /* 0x40 */
+ 0xC97B, 0xC97C, 0, 0xC97D, 0xC97E, 0xC97F, 0xC980, 0xC981, /* 0x50 */
+ 0xC982, 0xC983, 0xC984, 0xC985, 0xC986, 0xC987, 0, 0, /* 0x50 */
+ 0, 0xC988, 0xC989, 0xC98A, 0xC98B, 0xC98C, 0xC98D, 0xC98E, /* 0x60 */
+ 0xC98F, 0xC990, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995, 0xC996, /* 0x60 */
+ 0xC997, 0xC998, 0, 0xC999, 0xC99A, 0xC99B, 0xC99C, 0xC99D, /* 0x70 */
+ 0xC99E, 0xC99F, 0xC9A0, 0xC9A1, 0xC9A2, 0xC9A3, 0, 0, /* 0x70 */
+ 0, 0xC9A4, 0xC9A5, 0xC9A6, 0xC9A7, 0xC9A8, 0xC9A9, 0xC9AA, /* 0x80 */
+ 0xC9AB, 0xC9AC, 0xC9AD, 0xC9AE, 0xC9AF, 0xC9B0, 0xC9B1, 0xC9B2, /* 0x80 */
+ 0xC9B3, 0xC9B4, 0, 0xC9B5, 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, /* 0x90 */
+ 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD, 0xC9BE, 0xC9BF, 0, 0, /* 0x90 */
+ 0, 0xC9C0, 0xC9C1, 0xC9C2, 0xC9C3, 0xC9C4, 0xC9C5, 0xC9C6, /* 0xA0 */
+ 0xC9C7, 0xC9C8, 0xC9C9, 0xC9CA, 0xC9CB, 0xC9CC, 0xC9CD, 0xC9CE, /* 0xA0 */
+ 0xC9CF, 0xC9D0, 0, 0xC9D1, 0xC9D2, 0xC9D3, 0xC9D4, 0xC9D5, /* 0xB0 */
+ 0xC9D6, 0xC9D7, 0xC9D8, 0xC9D9, 0xC9DA, 0xC9DB /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_BC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3149, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC9DC, 0xC9DD, 0xC9DE, 0xC9DF, 0xC9E0, 0xC9E1, 0xC9E2, /* 0x60 */
+ 0xC9E3, 0xC9E4, 0xC9E5, 0xC9E6, 0xC9E7, 0xC9E8, 0xC9E9, 0xC9EA, /* 0x60 */
+ 0xC9EB, 0xC9EC, 0, 0xC9ED, 0xC9EE, 0xC9EF, 0xC9F0, 0xC9F1, /* 0x70 */
+ 0xC9F2, 0xC9F3, 0xC9F4, 0xC9F5, 0xC9F6, 0xC9F7, 0, 0, /* 0x70 */
+ 0, 0xC9F8, 0xC9F9, 0xC9FA, 0xC9FB, 0xC9FC, 0xC9FD, 0xC9FE, /* 0x80 */
+ 0xC9FF, 0xCA00, 0xCA01, 0xCA02, 0xCA03, 0xCA04, 0xCA05, 0xCA06, /* 0x80 */
+ 0xCA07, 0xCA08, 0, 0xCA09, 0xCA0A, 0xCA0B, 0xCA0C, 0xCA0D, /* 0x90 */
+ 0xCA0E, 0xCA0F, 0xCA10, 0xCA11, 0xCA12, 0xCA13, 0, 0, /* 0x90 */
+ 0, 0xCA14, 0xCA15, 0xCA16, 0xCA17, 0xCA18, 0xCA19, 0xCA1A, /* 0xA0 */
+ 0xCA1B, 0xCA1C, 0xCA1D, 0xCA1E, 0xCA1F, 0xCA20, 0xCA21, 0xCA22, /* 0xA0 */
+ 0xCA23, 0xCA24, 0, 0xCA25, 0xCA26, 0xCA27, 0xCA28, 0xCA29, /* 0xB0 */
+ 0xCA2A, 0xCA2B, 0xCA2C, 0xCA2D, 0xCA2E, 0xCA2F, 0, 0, /* 0xB0 */
+ 0, 0xCA30, 0xCA31, 0xCA32, 0xCA33, 0xCA34, 0xCA35, 0xCA36, /* 0xC0 */
+ 0xCA37, 0xCA38, 0xCA39, 0xCA3A, 0xCA3B, 0xCA3C, 0xCA3D, 0xCA3E, /* 0xC0 */
+ 0xCA3F, 0xCA40, 0, 0xCA41, 0xCA42, 0xCA43, 0xCA44, 0xCA45, /* 0xD0 */
+ 0xCA46, 0xCA47, 0xCA48, 0xCA49, 0xCA4A, 0xCA4B, 0, 0, /* 0xD0 */
+ 0, 0xCA4C, 0xCA4D, 0xCA4E, 0xCA4F, 0xCA50, 0xCA51, 0xCA52, /* 0xE0 */
+ 0xCA53, 0xCA54, 0xCA55, 0xCA56, 0xCA57, 0xCA58, 0xCA59, 0xCA5A, /* 0xE0 */
+ 0xCA5B, 0xCA5C, 0, 0xCA5D, 0xCA5E, 0xCA5F, 0xCA60, 0xCA61, /* 0xF0 */
+ 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, 0xCA67 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_BD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCA68, 0xCA69, 0xCA6A, 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, /* 0x40 */
+ 0xCA6F, 0xCA70, 0xCA71, 0xCA72, 0xCA73, 0xCA74, 0xCA75, 0xCA76, /* 0x40 */
+ 0xCA77, 0xCA78, 0, 0xCA79, 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7D, /* 0x50 */
+ 0xCA7E, 0xCA7F, 0xCA80, 0xCA81, 0xCA82, 0xCA83, 0, 0, /* 0x50 */
+ 0, 0xCA84, 0xCA85, 0xCA86, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, /* 0x60 */
+ 0xCA8B, 0xCA8C, 0xCA8D, 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, /* 0x60 */
+ 0xCA93, 0xCA94, 0, 0xCA95, 0xCA96, 0xCA97, 0xCA98, 0xCA99, /* 0x70 */
+ 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, 0xCA9E, 0xCA9F, 0, 0, /* 0x70 */
+ 0, 0xCAA0, 0xCAA1, 0xCAA2, 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6, /* 0x80 */
+ 0xCAA7, 0xCAA8, 0xCAA9, 0xCAAA, 0xCAAB, 0xCAAC, 0xCAAD, 0xCAAE, /* 0x80 */
+ 0xCAAF, 0xCAB0, 0, 0xCAB1, 0xCAB2, 0xCAB3, 0xCAB4, 0xCAB5, /* 0x90 */
+ 0xCAB6, 0xCAB7, 0xCAB8, 0xCAB9, 0xCABA, 0xCABB, 0, 0, /* 0x90 */
+ 0, 0xCABC, 0xCABD, 0xCABE, 0xCABF, 0xCAC0, 0xCAC1, 0xCAC2, /* 0xA0 */
+ 0xCAC3, 0xCAC4, 0xCAC5, 0xCAC6, 0xCAC7, 0xCAC8, 0xCAC9, 0xCACA, /* 0xA0 */
+ 0xCACB, 0xCACC, 0, 0xCACD, 0xCACE, 0xCACF, 0xCAD0, 0xCAD1, /* 0xB0 */
+ 0xCAD2, 0xCAD3, 0xCAD4, 0xCAD5, 0xCAD6, 0xCAD7, 0, 0, /* 0xB0 */
+ 0, 0xCAD8, 0xCAD9, 0xCADA, 0xCADB, 0xCADC, 0xCADD, 0xCADE, /* 0xC0 */
+ 0xCADF, 0xCAE0, 0xCAE1, 0xCAE2, 0xCAE3, 0xCAE4, 0xCAE5, 0xCAE6, /* 0xC0 */
+ 0xCAE7, 0xCAE8, 0, 0xCAE9, 0xCAEA, 0xCAEB, 0xCAEC, 0xCAED, /* 0xD0 */
+ 0xCAEE, 0xCAEF, 0xCAF0, 0xCAF1, 0xCAF2, 0xCAF3, 0, 0, /* 0xD0 */
+ 0, 0xCAF4, 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8, 0xCAF9, 0xCAFA, /* 0xE0 */
+ 0xCAFB, 0xCAFC, 0xCAFD, 0xCAFE, 0xCAFF, 0xCB00, 0xCB01, 0xCB02, /* 0xE0 */
+ 0xCB03, 0xCB04, 0, 0xCB05, 0xCB06, 0xCB07, 0xCB08, 0xCB09, /* 0xF0 */
+ 0xCB0A, 0xCB0B, 0xCB0C, 0xCB0D, 0xCB0E, 0xCB0F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_BE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCB10, 0xCB11, 0xCB12, 0xCB13, 0xCB14, 0xCB15, 0xCB16, /* 0x40 */
+ 0xCB17, 0xCB18, 0xCB19, 0xCB1A, 0xCB1B, 0xCB1C, 0xCB1D, 0xCB1E, /* 0x40 */
+ 0xCB1F, 0xCB20, 0, 0xCB21, 0xCB22, 0xCB23, 0xCB24, 0xCB25, /* 0x50 */
+ 0xCB26, 0xCB27, 0xCB28, 0xCB29, 0xCB2A, 0xCB2B, 0, 0, /* 0x50 */
+ 0, 0xCB2C, 0xCB2D, 0xCB2E, 0xCB2F, 0xCB30, 0xCB31, 0xCB32, /* 0x60 */
+ 0xCB33, 0xCB34, 0xCB35, 0xCB36, 0xCB37, 0xCB38, 0xCB39, 0xCB3A, /* 0x60 */
+ 0xCB3B, 0xCB3C, 0, 0xCB3D, 0xCB3E, 0xCB3F, 0xCB40, 0xCB41, /* 0x70 */
+ 0xCB42, 0xCB43, 0xCB44, 0xCB45, 0xCB46, 0xCB47, 0, 0, /* 0x70 */
+ 0, 0xCB48, 0xCB49, 0xCB4A, 0xCB4B, 0xCB4C, 0xCB4D, 0xCB4E, /* 0x80 */
+ 0xCB4F, 0xCB50, 0xCB51, 0xCB52, 0xCB53, 0xCB54, 0xCB55, 0xCB56, /* 0x80 */
+ 0xCB57, 0xCB58, 0, 0xCB59, 0xCB5A, 0xCB5B, 0xCB5C, 0xCB5D, /* 0x90 */
+ 0xCB5E, 0xCB5F, 0xCB60, 0xCB61, 0xCB62, 0xCB63, 0, 0, /* 0x90 */
+ 0, 0xCB64, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xCB69, 0xCB6A, /* 0xA0 */
+ 0xCB6B, 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xCB71, 0xCB72, /* 0xA0 */
+ 0xCB73, 0xCB74, 0, 0xCB75, 0xCB76, 0xCB77, 0xCB78, 0xCB79, /* 0xB0 */
+ 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D, 0xCB7E, 0xCB7F, 0, 0, /* 0xB0 */
+ 0, 0xCB80, 0xCB81, 0xCB82, 0xCB83, 0xCB84, 0xCB85, 0xCB86, /* 0xC0 */
+ 0xCB87, 0xCB88, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCB8E, /* 0xC0 */
+ 0xCB8F, 0xCB90, 0, 0xCB91, 0xCB92, 0xCB93, 0xCB94, 0xCB95, /* 0xD0 */
+ 0xCB96, 0xCB97, 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0, 0, /* 0xD0 */
+ 0, 0xCB9C, 0xCB9D, 0xCB9E, 0xCB9F, 0xCBA0, 0xCBA1, 0xCBA2, /* 0xE0 */
+ 0xCBA3, 0xCBA4, 0xCBA5, 0xCBA6, 0xCBA7, 0xCBA8, 0xCBA9, 0xCBAA, /* 0xE0 */
+ 0xCBAB, 0xCBAC, 0, 0xCBAD, 0xCBAE, 0xCBAF, 0xCBB0, 0xCBB1, /* 0xF0 */
+ 0xCBB2, 0xCBB3, 0xCBB4, 0xCBB5, 0xCBB6, 0xCBB7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_BF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCBB8, 0xCBB9, 0xCBBA, 0xCBBB, 0xCBBC, 0xCBBD, 0xCBBE, /* 0x40 */
+ 0xCBBF, 0xCBC0, 0xCBC1, 0xCBC2, 0xCBC3, 0xCBC4, 0xCBC5, 0xCBC6, /* 0x40 */
+ 0xCBC7, 0xCBC8, 0, 0xCBC9, 0xCBCA, 0xCBCB, 0xCBCC, 0xCBCD, /* 0x50 */
+ 0xCBCE, 0xCBCF, 0xCBD0, 0xCBD1, 0xCBD2, 0xCBD3, 0, 0, /* 0x50 */
+ 0, 0xCBD4, 0xCBD5, 0xCBD6, 0xCBD7, 0xCBD8, 0xCBD9, 0xCBDA, /* 0x60 */
+ 0xCBDB, 0xCBDC, 0xCBDD, 0xCBDE, 0xCBDF, 0xCBE0, 0xCBE1, 0xCBE2, /* 0x60 */
+ 0xCBE3, 0xCBE4, 0, 0xCBE5, 0xCBE6, 0xCBE7, 0xCBE8, 0xCBE9, /* 0x70 */
+ 0xCBEA, 0xCBEB, 0xCBEC, 0xCBED, 0xCBEE, 0xCBEF, 0, 0, /* 0x70 */
+ 0, 0xCBF0, 0xCBF1, 0xCBF2, 0xCBF3, 0xCBF4, 0xCBF5, 0xCBF6, /* 0x80 */
+ 0xCBF7, 0xCBF8, 0xCBF9, 0xCBFA, 0xCBFB, 0xCBFC, 0xCBFD, 0xCBFE, /* 0x80 */
+ 0xCBFF, 0xCC00, 0, 0xCC01, 0xCC02, 0xCC03, 0xCC04, 0xCC05, /* 0x90 */
+ 0xCC06, 0xCC07, 0xCC08, 0xCC09, 0xCC0A, 0xCC0B, 0, 0, /* 0x90 */
+ 0, 0xCC0C, 0xCC0D, 0xCC0E, 0xCC0F, 0xCC10, 0xCC11, 0xCC12, /* 0xA0 */
+ 0xCC13, 0xCC14, 0xCC15, 0xCC16, 0xCC17, 0xCC18, 0xCC19, 0xCC1A, /* 0xA0 */
+ 0xCC1B, 0xCC1C, 0, 0xCC1D, 0xCC1E, 0xCC1F, 0xCC20, 0xCC21, /* 0xB0 */
+ 0xCC22, 0xCC23, 0xCC24, 0xCC25, 0xCC26, 0xCC27 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x314A, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCC28, 0xCC29, 0xCC2A, 0xCC2B, 0xCC2C, 0xCC2D, 0xCC2E, /* 0x60 */
+ 0xCC2F, 0xCC30, 0xCC31, 0xCC32, 0xCC33, 0xCC34, 0xCC35, 0xCC36, /* 0x60 */
+ 0xCC37, 0xCC38, 0, 0xCC39, 0xCC3A, 0xCC3B, 0xCC3C, 0xCC3D, /* 0x70 */
+ 0xCC3E, 0xCC3F, 0xCC40, 0xCC41, 0xCC42, 0xCC43, 0, 0, /* 0x70 */
+ 0, 0xCC44, 0xCC45, 0xCC46, 0xCC47, 0xCC48, 0xCC49, 0xCC4A, /* 0x80 */
+ 0xCC4B, 0xCC4C, 0xCC4D, 0xCC4E, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, /* 0x80 */
+ 0xCC53, 0xCC54, 0, 0xCC55, 0xCC56, 0xCC57, 0xCC58, 0xCC59, /* 0x90 */
+ 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, 0, 0, /* 0x90 */
+ 0, 0xCC60, 0xCC61, 0xCC62, 0xCC63, 0xCC64, 0xCC65, 0xCC66, /* 0xA0 */
+ 0xCC67, 0xCC68, 0xCC69, 0xCC6A, 0xCC6B, 0xCC6C, 0xCC6D, 0xCC6E, /* 0xA0 */
+ 0xCC6F, 0xCC70, 0, 0xCC71, 0xCC72, 0xCC73, 0xCC74, 0xCC75, /* 0xB0 */
+ 0xCC76, 0xCC77, 0xCC78, 0xCC79, 0xCC7A, 0xCC7B, 0, 0, /* 0xB0 */
+ 0, 0xCC7C, 0xCC7D, 0xCC7E, 0xCC7F, 0xCC80, 0xCC81, 0xCC82, /* 0xC0 */
+ 0xCC83, 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88, 0xCC89, 0xCC8A, /* 0xC0 */
+ 0xCC8B, 0xCC8C, 0, 0xCC8D, 0xCC8E, 0xCC8F, 0xCC90, 0xCC91, /* 0xD0 */
+ 0xCC92, 0xCC93, 0xCC94, 0xCC95, 0xCC96, 0xCC97, 0, 0, /* 0xD0 */
+ 0, 0xCC98, 0xCC99, 0xCC9A, 0xCC9B, 0xCC9C, 0xCC9D, 0xCC9E, /* 0xE0 */
+ 0xCC9F, 0xCCA0, 0xCCA1, 0xCCA2, 0xCCA3, 0xCCA4, 0xCCA5, 0xCCA6, /* 0xE0 */
+ 0xCCA7, 0xCCA8, 0, 0xCCA9, 0xCCAA, 0xCCAB, 0xCCAC, 0xCCAD, /* 0xF0 */
+ 0xCCAE, 0xCCAF, 0xCCB0, 0xCCB1, 0xCCB2, 0xCCB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCCB4, 0xCCB5, 0xCCB6, 0xCCB7, 0xCCB8, 0xCCB9, 0xCCBA, /* 0x40 */
+ 0xCCBB, 0xCCBC, 0xCCBD, 0xCCBE, 0xCCBF, 0xCCC0, 0xCCC1, 0xCCC2, /* 0x40 */
+ 0xCCC3, 0xCCC4, 0, 0xCCC5, 0xCCC6, 0xCCC7, 0xCCC8, 0xCCC9, /* 0x50 */
+ 0xCCCA, 0xCCCB, 0xCCCC, 0xCCCD, 0xCCCE, 0xCCCF, 0, 0, /* 0x50 */
+ 0, 0xCCD0, 0xCCD1, 0xCCD2, 0xCCD3, 0xCCD4, 0xCCD5, 0xCCD6, /* 0x60 */
+ 0xCCD7, 0xCCD8, 0xCCD9, 0xCCDA, 0xCCDB, 0xCCDC, 0xCCDD, 0xCCDE, /* 0x60 */
+ 0xCCDF, 0xCCE0, 0, 0xCCE1, 0xCCE2, 0xCCE3, 0xCCE4, 0xCCE5, /* 0x70 */
+ 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA, 0xCCEB, 0, 0, /* 0x70 */
+ 0, 0xCCEC, 0xCCED, 0xCCEE, 0xCCEF, 0xCCF0, 0xCCF1, 0xCCF2, /* 0x80 */
+ 0xCCF3, 0xCCF4, 0xCCF5, 0xCCF6, 0xCCF7, 0xCCF8, 0xCCF9, 0xCCFA, /* 0x80 */
+ 0xCCFB, 0xCCFC, 0, 0xCCFD, 0xCCFE, 0xCCFF, 0xCD00, 0xCD01, /* 0x90 */
+ 0xCD02, 0xCD03, 0xCD04, 0xCD05, 0xCD06, 0xCD07, 0, 0, /* 0x90 */
+ 0, 0xCD08, 0xCD09, 0xCD0A, 0xCD0B, 0xCD0C, 0xCD0D, 0xCD0E, /* 0xA0 */
+ 0xCD0F, 0xCD10, 0xCD11, 0xCD12, 0xCD13, 0xCD14, 0xCD15, 0xCD16, /* 0xA0 */
+ 0xCD17, 0xCD18, 0, 0xCD19, 0xCD1A, 0xCD1B, 0xCD1C, 0xCD1D, /* 0xB0 */
+ 0xCD1E, 0xCD1F, 0xCD20, 0xCD21, 0xCD22, 0xCD23, 0, 0, /* 0xB0 */
+ 0, 0xCD24, 0xCD25, 0xCD26, 0xCD27, 0xCD28, 0xCD29, 0xCD2A, /* 0xC0 */
+ 0xCD2B, 0xCD2C, 0xCD2D, 0xCD2E, 0xCD2F, 0xCD30, 0xCD31, 0xCD32, /* 0xC0 */
+ 0xCD33, 0xCD34, 0, 0xCD35, 0xCD36, 0xCD37, 0xCD38, 0xCD39, /* 0xD0 */
+ 0xCD3A, 0xCD3B, 0xCD3C, 0xCD3D, 0xCD3E, 0xCD3F, 0, 0, /* 0xD0 */
+ 0, 0xCD40, 0xCD41, 0xCD42, 0xCD43, 0xCD44, 0xCD45, 0xCD46, /* 0xE0 */
+ 0xCD47, 0xCD48, 0xCD49, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, /* 0xE0 */
+ 0xCD4F, 0xCD50, 0, 0xCD51, 0xCD52, 0xCD53, 0xCD54, 0xCD55, /* 0xF0 */
+ 0xCD56, 0xCD57, 0xCD58, 0xCD59, 0xCD5A, 0xCD5B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCD5C, 0xCD5D, 0xCD5E, 0xCD5F, 0xCD60, 0xCD61, 0xCD62, /* 0x40 */
+ 0xCD63, 0xCD64, 0xCD65, 0xCD66, 0xCD67, 0xCD68, 0xCD69, 0xCD6A, /* 0x40 */
+ 0xCD6B, 0xCD6C, 0, 0xCD6D, 0xCD6E, 0xCD6F, 0xCD70, 0xCD71, /* 0x50 */
+ 0xCD72, 0xCD73, 0xCD74, 0xCD75, 0xCD76, 0xCD77, 0, 0, /* 0x50 */
+ 0, 0xCD78, 0xCD79, 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, 0xCD7E, /* 0x60 */
+ 0xCD7F, 0xCD80, 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xCD85, 0xCD86, /* 0x60 */
+ 0xCD87, 0xCD88, 0, 0xCD89, 0xCD8A, 0xCD8B, 0xCD8C, 0xCD8D, /* 0x70 */
+ 0xCD8E, 0xCD8F, 0xCD90, 0xCD91, 0xCD92, 0xCD93, 0, 0, /* 0x70 */
+ 0, 0xCD94, 0xCD95, 0xCD96, 0xCD97, 0xCD98, 0xCD99, 0xCD9A, /* 0x80 */
+ 0xCD9B, 0xCD9C, 0xCD9D, 0xCD9E, 0xCD9F, 0xCDA0, 0xCDA1, 0xCDA2, /* 0x80 */
+ 0xCDA3, 0xCDA4, 0, 0xCDA5, 0xCDA6, 0xCDA7, 0xCDA8, 0xCDA9, /* 0x90 */
+ 0xCDAA, 0xCDAB, 0xCDAC, 0xCDAD, 0xCDAE, 0xCDAF, 0, 0, /* 0x90 */
+ 0, 0xCDB0, 0xCDB1, 0xCDB2, 0xCDB3, 0xCDB4, 0xCDB5, 0xCDB6, /* 0xA0 */
+ 0xCDB7, 0xCDB8, 0xCDB9, 0xCDBA, 0xCDBB, 0xCDBC, 0xCDBD, 0xCDBE, /* 0xA0 */
+ 0xCDBF, 0xCDC0, 0, 0xCDC1, 0xCDC2, 0xCDC3, 0xCDC4, 0xCDC5, /* 0xB0 */
+ 0xCDC6, 0xCDC7, 0xCDC8, 0xCDC9, 0xCDCA, 0xCDCB, 0, 0, /* 0xB0 */
+ 0, 0xCDCC, 0xCDCD, 0xCDCE, 0xCDCF, 0xCDD0, 0xCDD1, 0xCDD2, /* 0xC0 */
+ 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6, 0xCDD7, 0xCDD8, 0xCDD9, 0xCDDA, /* 0xC0 */
+ 0xCDDB, 0xCDDC, 0, 0xCDDD, 0xCDDE, 0xCDDF, 0xCDE0, 0xCDE1, /* 0xD0 */
+ 0xCDE2, 0xCDE3, 0xCDE4, 0xCDE5, 0xCDE6, 0xCDE7, 0, 0, /* 0xD0 */
+ 0, 0xCDE8, 0xCDE9, 0xCDEA, 0xCDEB, 0xCDEC, 0xCDED, 0xCDEE, /* 0xE0 */
+ 0xCDEF, 0xCDF0, 0xCDF1, 0xCDF2, 0xCDF3, 0xCDF4, 0xCDF5, 0xCDF6, /* 0xE0 */
+ 0xCDF7, 0xCDF8, 0, 0xCDF9, 0xCDFA, 0xCDFB, 0xCDFC, 0xCDFD, /* 0xF0 */
+ 0xCDFE, 0xCDFF, 0xCE00, 0xCE01, 0xCE02, 0xCE03 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCE04, 0xCE05, 0xCE06, 0xCE07, 0xCE08, 0xCE09, 0xCE0A, /* 0x40 */
+ 0xCE0B, 0xCE0C, 0xCE0D, 0xCE0E, 0xCE0F, 0xCE10, 0xCE11, 0xCE12, /* 0x40 */
+ 0xCE13, 0xCE14, 0, 0xCE15, 0xCE16, 0xCE17, 0xCE18, 0xCE19, /* 0x50 */
+ 0xCE1A, 0xCE1B, 0xCE1C, 0xCE1D, 0xCE1E, 0xCE1F, 0, 0, /* 0x50 */
+ 0, 0xCE20, 0xCE21, 0xCE22, 0xCE23, 0xCE24, 0xCE25, 0xCE26, /* 0x60 */
+ 0xCE27, 0xCE28, 0xCE29, 0xCE2A, 0xCE2B, 0xCE2C, 0xCE2D, 0xCE2E, /* 0x60 */
+ 0xCE2F, 0xCE30, 0, 0xCE31, 0xCE32, 0xCE33, 0xCE34, 0xCE35, /* 0x70 */
+ 0xCE36, 0xCE37, 0xCE38, 0xCE39, 0xCE3A, 0xCE3B, 0, 0, /* 0x70 */
+ 0, 0xCE3C, 0xCE3D, 0xCE3E, 0xCE3F, 0xCE40, 0xCE41, 0xCE42, /* 0x80 */
+ 0xCE43, 0xCE44, 0xCE45, 0xCE46, 0xCE47, 0xCE48, 0xCE49, 0xCE4A, /* 0x80 */
+ 0xCE4B, 0xCE4C, 0, 0xCE4D, 0xCE4E, 0xCE4F, 0xCE50, 0xCE51, /* 0x90 */
+ 0xCE52, 0xCE53, 0xCE54, 0xCE55, 0xCE56, 0xCE57, 0, 0, /* 0x90 */
+ 0, 0xCE58, 0xCE59, 0xCE5A, 0xCE5B, 0xCE5C, 0xCE5D, 0xCE5E, /* 0xA0 */
+ 0xCE5F, 0xCE60, 0xCE61, 0xCE62, 0xCE63, 0xCE64, 0xCE65, 0xCE66, /* 0xA0 */
+ 0xCE67, 0xCE68, 0, 0xCE69, 0xCE6A, 0xCE6B, 0xCE6C, 0xCE6D, /* 0xB0 */
+ 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE72, 0xCE73 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x314B, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCE74, 0xCE75, 0xCE76, 0xCE77, 0xCE78, 0xCE79, 0xCE7A, /* 0x60 */
+ 0xCE7B, 0xCE7C, 0xCE7D, 0xCE7E, 0xCE7F, 0xCE80, 0xCE81, 0xCE82, /* 0x60 */
+ 0xCE83, 0xCE84, 0, 0xCE85, 0xCE86, 0xCE87, 0xCE88, 0xCE89, /* 0x70 */
+ 0xCE8A, 0xCE8B, 0xCE8C, 0xCE8D, 0xCE8E, 0xCE8F, 0, 0, /* 0x70 */
+ 0, 0xCE90, 0xCE91, 0xCE92, 0xCE93, 0xCE94, 0xCE95, 0xCE96, /* 0x80 */
+ 0xCE97, 0xCE98, 0xCE99, 0xCE9A, 0xCE9B, 0xCE9C, 0xCE9D, 0xCE9E, /* 0x80 */
+ 0xCE9F, 0xCEA0, 0, 0xCEA1, 0xCEA2, 0xCEA3, 0xCEA4, 0xCEA5, /* 0x90 */
+ 0xCEA6, 0xCEA7, 0xCEA8, 0xCEA9, 0xCEAA, 0xCEAB, 0, 0, /* 0x90 */
+ 0, 0xCEAC, 0xCEAD, 0xCEAE, 0xCEAF, 0xCEB0, 0xCEB1, 0xCEB2, /* 0xA0 */
+ 0xCEB3, 0xCEB4, 0xCEB5, 0xCEB6, 0xCEB7, 0xCEB8, 0xCEB9, 0xCEBA, /* 0xA0 */
+ 0xCEBB, 0xCEBC, 0, 0xCEBD, 0xCEBE, 0xCEBF, 0xCEC0, 0xCEC1, /* 0xB0 */
+ 0xCEC2, 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6, 0xCEC7, 0, 0, /* 0xB0 */
+ 0, 0xCEC8, 0xCEC9, 0xCECA, 0xCECB, 0xCECC, 0xCECD, 0xCECE, /* 0xC0 */
+ 0xCECF, 0xCED0, 0xCED1, 0xCED2, 0xCED3, 0xCED4, 0xCED5, 0xCED6, /* 0xC0 */
+ 0xCED7, 0xCED8, 0, 0xCED9, 0xCEDA, 0xCEDB, 0xCEDC, 0xCEDD, /* 0xD0 */
+ 0xCEDE, 0xCEDF, 0xCEE0, 0xCEE1, 0xCEE2, 0xCEE3, 0, 0, /* 0xD0 */
+ 0, 0xCEE4, 0xCEE5, 0xCEE6, 0xCEE7, 0xCEE8, 0xCEE9, 0xCEEA, /* 0xE0 */
+ 0xCEEB, 0xCEEC, 0xCEED, 0xCEEE, 0xCEEF, 0xCEF0, 0xCEF1, 0xCEF2, /* 0xE0 */
+ 0xCEF3, 0xCEF4, 0, 0xCEF5, 0xCEF6, 0xCEF7, 0xCEF8, 0xCEF9, /* 0xF0 */
+ 0xCEFA, 0xCEFB, 0xCEFC, 0xCEFD, 0xCEFE, 0xCEFF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCF00, 0xCF01, 0xCF02, 0xCF03, 0xCF04, 0xCF05, 0xCF06, /* 0x40 */
+ 0xCF07, 0xCF08, 0xCF09, 0xCF0A, 0xCF0B, 0xCF0C, 0xCF0D, 0xCF0E, /* 0x40 */
+ 0xCF0F, 0xCF10, 0, 0xCF11, 0xCF12, 0xCF13, 0xCF14, 0xCF15, /* 0x50 */
+ 0xCF16, 0xCF17, 0xCF18, 0xCF19, 0xCF1A, 0xCF1B, 0, 0, /* 0x50 */
+ 0, 0xCF1C, 0xCF1D, 0xCF1E, 0xCF1F, 0xCF20, 0xCF21, 0xCF22, /* 0x60 */
+ 0xCF23, 0xCF24, 0xCF25, 0xCF26, 0xCF27, 0xCF28, 0xCF29, 0xCF2A, /* 0x60 */
+ 0xCF2B, 0xCF2C, 0, 0xCF2D, 0xCF2E, 0xCF2F, 0xCF30, 0xCF31, /* 0x70 */
+ 0xCF32, 0xCF33, 0xCF34, 0xCF35, 0xCF36, 0xCF37, 0, 0, /* 0x70 */
+ 0, 0xCF38, 0xCF39, 0xCF3A, 0xCF3B, 0xCF3C, 0xCF3D, 0xCF3E, /* 0x80 */
+ 0xCF3F, 0xCF40, 0xCF41, 0xCF42, 0xCF43, 0xCF44, 0xCF45, 0xCF46, /* 0x80 */
+ 0xCF47, 0xCF48, 0, 0xCF49, 0xCF4A, 0xCF4B, 0xCF4C, 0xCF4D, /* 0x90 */
+ 0xCF4E, 0xCF4F, 0xCF50, 0xCF51, 0xCF52, 0xCF53, 0, 0, /* 0x90 */
+ 0, 0xCF54, 0xCF55, 0xCF56, 0xCF57, 0xCF58, 0xCF59, 0xCF5A, /* 0xA0 */
+ 0xCF5B, 0xCF5C, 0xCF5D, 0xCF5E, 0xCF5F, 0xCF60, 0xCF61, 0xCF62, /* 0xA0 */
+ 0xCF63, 0xCF64, 0, 0xCF65, 0xCF66, 0xCF67, 0xCF68, 0xCF69, /* 0xB0 */
+ 0xCF6A, 0xCF6B, 0xCF6C, 0xCF6D, 0xCF6E, 0xCF6F, 0, 0, /* 0xB0 */
+ 0, 0xCF70, 0xCF71, 0xCF72, 0xCF73, 0xCF74, 0xCF75, 0xCF76, /* 0xC0 */
+ 0xCF77, 0xCF78, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, 0xCF7E, /* 0xC0 */
+ 0xCF7F, 0xCF80, 0, 0xCF81, 0xCF82, 0xCF83, 0xCF84, 0xCF85, /* 0xD0 */
+ 0xCF86, 0xCF87, 0xCF88, 0xCF89, 0xCF8A, 0xCF8B, 0, 0, /* 0xD0 */
+ 0, 0xCF8C, 0xCF8D, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92, /* 0xE0 */
+ 0xCF93, 0xCF94, 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, 0xCF9A, /* 0xE0 */
+ 0xCF9B, 0xCF9C, 0, 0xCF9D, 0xCF9E, 0xCF9F, 0xCFA0, 0xCFA1, /* 0xF0 */
+ 0xCFA2, 0xCFA3, 0xCFA4, 0xCFA5, 0xCFA6, 0xCFA7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFA8, 0xCFA9, 0xCFAA, 0xCFAB, 0xCFAC, 0xCFAD, 0xCFAE, /* 0x40 */
+ 0xCFAF, 0xCFB0, 0xCFB1, 0xCFB2, 0xCFB3, 0xCFB4, 0xCFB5, 0xCFB6, /* 0x40 */
+ 0xCFB7, 0xCFB8, 0, 0xCFB9, 0xCFBA, 0xCFBB, 0xCFBC, 0xCFBD, /* 0x50 */
+ 0xCFBE, 0xCFBF, 0xCFC0, 0xCFC1, 0xCFC2, 0xCFC3, 0, 0, /* 0x50 */
+ 0, 0xCFC4, 0xCFC5, 0xCFC6, 0xCFC7, 0xCFC8, 0xCFC9, 0xCFCA, /* 0x60 */
+ 0xCFCB, 0xCFCC, 0xCFCD, 0xCFCE, 0xCFCF, 0xCFD0, 0xCFD1, 0xCFD2, /* 0x60 */
+ 0xCFD3, 0xCFD4, 0, 0xCFD5, 0xCFD6, 0xCFD7, 0xCFD8, 0xCFD9, /* 0x70 */
+ 0xCFDA, 0xCFDB, 0xCFDC, 0xCFDD, 0xCFDE, 0xCFDF, 0, 0, /* 0x70 */
+ 0, 0xCFE0, 0xCFE1, 0xCFE2, 0xCFE3, 0xCFE4, 0xCFE5, 0xCFE6, /* 0x80 */
+ 0xCFE7, 0xCFE8, 0xCFE9, 0xCFEA, 0xCFEB, 0xCFEC, 0xCFED, 0xCFEE, /* 0x80 */
+ 0xCFEF, 0xCFF0, 0, 0xCFF1, 0xCFF2, 0xCFF3, 0xCFF4, 0xCFF5, /* 0x90 */
+ 0xCFF6, 0xCFF7, 0xCFF8, 0xCFF9, 0xCFFA, 0xCFFB, 0, 0, /* 0x90 */
+ 0, 0xCFFC, 0xCFFD, 0xCFFE, 0xCFFF, 0xD000, 0xD001, 0xD002, /* 0xA0 */
+ 0xD003, 0xD004, 0xD005, 0xD006, 0xD007, 0xD008, 0xD009, 0xD00A, /* 0xA0 */
+ 0xD00B, 0xD00C, 0, 0xD00D, 0xD00E, 0xD00F, 0xD010, 0xD011, /* 0xB0 */
+ 0xD012, 0xD013, 0xD014, 0xD015, 0xD016, 0xD017, 0, 0, /* 0xB0 */
+ 0, 0xD018, 0xD019, 0xD01A, 0xD01B, 0xD01C, 0xD01D, 0xD01E, /* 0xC0 */
+ 0xD01F, 0xD020, 0xD021, 0xD022, 0xD023, 0xD024, 0xD025, 0xD026, /* 0xC0 */
+ 0xD027, 0xD028, 0, 0xD029, 0xD02A, 0xD02B, 0xD02C, 0xD02D, /* 0xD0 */
+ 0xD02E, 0xD02F, 0xD030, 0xD031, 0xD032, 0xD033, 0, 0, /* 0xD0 */
+ 0, 0xD034, 0xD035, 0xD036, 0xD037, 0xD038, 0xD039, 0xD03A, /* 0xE0 */
+ 0xD03B, 0xD03C, 0xD03D, 0xD03E, 0xD03F, 0xD040, 0xD041, 0xD042, /* 0xE0 */
+ 0xD043, 0xD044, 0, 0xD045, 0xD046, 0xD047, 0xD048, 0xD049, /* 0xF0 */
+ 0xD04A, 0xD04B, 0xD04C, 0xD04D, 0xD04E, 0xD04F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD050, 0xD051, 0xD052, 0xD053, 0xD054, 0xD055, 0xD056, /* 0x40 */
+ 0xD057, 0xD058, 0xD059, 0xD05A, 0xD05B, 0xD05C, 0xD05D, 0xD05E, /* 0x40 */
+ 0xD05F, 0xD060, 0, 0xD061, 0xD062, 0xD063, 0xD064, 0xD065, /* 0x50 */
+ 0xD066, 0xD067, 0xD068, 0xD069, 0xD06A, 0xD06B, 0, 0, /* 0x50 */
+ 0, 0xD06C, 0xD06D, 0xD06E, 0xD06F, 0xD070, 0xD071, 0xD072, /* 0x60 */
+ 0xD073, 0xD074, 0xD075, 0xD076, 0xD077, 0xD078, 0xD079, 0xD07A, /* 0x60 */
+ 0xD07B, 0xD07C, 0, 0xD07D, 0xD07E, 0xD07F, 0xD080, 0xD081, /* 0x70 */
+ 0xD082, 0xD083, 0xD084, 0xD085, 0xD086, 0xD087, 0, 0, /* 0x70 */
+ 0, 0xD088, 0xD089, 0xD08A, 0xD08B, 0xD08C, 0xD08D, 0xD08E, /* 0x80 */
+ 0xD08F, 0xD090, 0xD091, 0xD092, 0xD093, 0xD094, 0xD095, 0xD096, /* 0x80 */
+ 0xD097, 0xD098, 0, 0xD099, 0xD09A, 0xD09B, 0xD09C, 0xD09D, /* 0x90 */
+ 0xD09E, 0xD09F, 0xD0A0, 0xD0A1, 0xD0A2, 0xD0A3, 0, 0, /* 0x90 */
+ 0, 0xD0A4, 0xD0A5, 0xD0A6, 0xD0A7, 0xD0A8, 0xD0A9, 0xD0AA, /* 0xA0 */
+ 0xD0AB, 0xD0AC, 0xD0AD, 0xD0AE, 0xD0AF, 0xD0B0, 0xD0B1, 0xD0B2, /* 0xA0 */
+ 0xD0B3, 0xD0B4, 0, 0xD0B5, 0xD0B6, 0xD0B7, 0xD0B8, 0xD0B9, /* 0xB0 */
+ 0xD0BA, 0xD0BB, 0xD0BC, 0xD0BD, 0xD0BE, 0xD0BF /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x314C, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD0C0, 0xD0C1, 0xD0C2, 0xD0C3, 0xD0C4, 0xD0C5, 0xD0C6, /* 0x60 */
+ 0xD0C7, 0xD0C8, 0xD0C9, 0xD0CA, 0xD0CB, 0xD0CC, 0xD0CD, 0xD0CE, /* 0x60 */
+ 0xD0CF, 0xD0D0, 0, 0xD0D1, 0xD0D2, 0xD0D3, 0xD0D4, 0xD0D5, /* 0x70 */
+ 0xD0D6, 0xD0D7, 0xD0D8, 0xD0D9, 0xD0DA, 0xD0DB, 0, 0, /* 0x70 */
+ 0, 0xD0DC, 0xD0DD, 0xD0DE, 0xD0DF, 0xD0E0, 0xD0E1, 0xD0E2, /* 0x80 */
+ 0xD0E3, 0xD0E4, 0xD0E5, 0xD0E6, 0xD0E7, 0xD0E8, 0xD0E9, 0xD0EA, /* 0x80 */
+ 0xD0EB, 0xD0EC, 0, 0xD0ED, 0xD0EE, 0xD0EF, 0xD0F0, 0xD0F1, /* 0x90 */
+ 0xD0F2, 0xD0F3, 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0, 0, /* 0x90 */
+ 0, 0xD0F8, 0xD0F9, 0xD0FA, 0xD0FB, 0xD0FC, 0xD0FD, 0xD0FE, /* 0xA0 */
+ 0xD0FF, 0xD100, 0xD101, 0xD102, 0xD103, 0xD104, 0xD105, 0xD106, /* 0xA0 */
+ 0xD107, 0xD108, 0, 0xD109, 0xD10A, 0xD10B, 0xD10C, 0xD10D, /* 0xB0 */
+ 0xD10E, 0xD10F, 0xD110, 0xD111, 0xD112, 0xD113, 0, 0, /* 0xB0 */
+ 0, 0xD114, 0xD115, 0xD116, 0xD117, 0xD118, 0xD119, 0xD11A, /* 0xC0 */
+ 0xD11B, 0xD11C, 0xD11D, 0xD11E, 0xD11F, 0xD120, 0xD121, 0xD122, /* 0xC0 */
+ 0xD123, 0xD124, 0, 0xD125, 0xD126, 0xD127, 0xD128, 0xD129, /* 0xD0 */
+ 0xD12A, 0xD12B, 0xD12C, 0xD12D, 0xD12E, 0xD12F, 0, 0, /* 0xD0 */
+ 0, 0xD130, 0xD131, 0xD132, 0xD133, 0xD134, 0xD135, 0xD136, /* 0xE0 */
+ 0xD137, 0xD138, 0xD139, 0xD13A, 0xD13B, 0xD13C, 0xD13D, 0xD13E, /* 0xE0 */
+ 0xD13F, 0xD140, 0, 0xD141, 0xD142, 0xD143, 0xD144, 0xD145, /* 0xF0 */
+ 0xD146, 0xD147, 0xD148, 0xD149, 0xD14A, 0xD14B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_C9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD14C, 0xD14D, 0xD14E, 0xD14F, 0xD150, 0xD151, 0xD152, /* 0x40 */
+ 0xD153, 0xD154, 0xD155, 0xD156, 0xD157, 0xD158, 0xD159, 0xD15A, /* 0x40 */
+ 0xD15B, 0xD15C, 0, 0xD15D, 0xD15E, 0xD15F, 0xD160, 0xD161, /* 0x50 */
+ 0xD162, 0xD163, 0xD164, 0xD165, 0xD166, 0xD167, 0, 0, /* 0x50 */
+ 0, 0xD168, 0xD169, 0xD16A, 0xD16B, 0xD16C, 0xD16D, 0xD16E, /* 0x60 */
+ 0xD16F, 0xD170, 0xD171, 0xD172, 0xD173, 0xD174, 0xD175, 0xD176, /* 0x60 */
+ 0xD177, 0xD178, 0, 0xD179, 0xD17A, 0xD17B, 0xD17C, 0xD17D, /* 0x70 */
+ 0xD17E, 0xD17F, 0xD180, 0xD181, 0xD182, 0xD183, 0, 0, /* 0x70 */
+ 0, 0xD184, 0xD185, 0xD186, 0xD187, 0xD188, 0xD189, 0xD18A, /* 0x80 */
+ 0xD18B, 0xD18C, 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xD191, 0xD192, /* 0x80 */
+ 0xD193, 0xD194, 0, 0xD195, 0xD196, 0xD197, 0xD198, 0xD199, /* 0x90 */
+ 0xD19A, 0xD19B, 0xD19C, 0xD19D, 0xD19E, 0xD19F, 0, 0, /* 0x90 */
+ 0, 0xD1A0, 0xD1A1, 0xD1A2, 0xD1A3, 0xD1A4, 0xD1A5, 0xD1A6, /* 0xA0 */
+ 0xD1A7, 0xD1A8, 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, /* 0xA0 */
+ 0xD1AF, 0xD1B0, 0, 0xD1B1, 0xD1B2, 0xD1B3, 0xD1B4, 0xD1B5, /* 0xB0 */
+ 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, 0xD1BA, 0xD1BB, 0, 0, /* 0xB0 */
+ 0, 0xD1BC, 0xD1BD, 0xD1BE, 0xD1BF, 0xD1C0, 0xD1C1, 0xD1C2, /* 0xC0 */
+ 0xD1C3, 0xD1C4, 0xD1C5, 0xD1C6, 0xD1C7, 0xD1C8, 0xD1C9, 0xD1CA, /* 0xC0 */
+ 0xD1CB, 0xD1CC, 0, 0xD1CD, 0xD1CE, 0xD1CF, 0xD1D0, 0xD1D1, /* 0xD0 */
+ 0xD1D2, 0xD1D3, 0xD1D4, 0xD1D5, 0xD1D6, 0xD1D7, 0, 0, /* 0xD0 */
+ 0, 0xD1D8, 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD, 0xD1DE, /* 0xE0 */
+ 0xD1DF, 0xD1E0, 0xD1E1, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6, /* 0xE0 */
+ 0xD1E7, 0xD1E8, 0, 0xD1E9, 0xD1EA, 0xD1EB, 0xD1EC, 0xD1ED, /* 0xF0 */
+ 0xD1EE, 0xD1EF, 0xD1F0, 0xD1F1, 0xD1F2, 0xD1F3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_CA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1F4, 0xD1F5, 0xD1F6, 0xD1F7, 0xD1F8, 0xD1F9, 0xD1FA, /* 0x40 */
+ 0xD1FB, 0xD1FC, 0xD1FD, 0xD1FE, 0xD1FF, 0xD200, 0xD201, 0xD202, /* 0x40 */
+ 0xD203, 0xD204, 0, 0xD205, 0xD206, 0xD207, 0xD208, 0xD209, /* 0x50 */
+ 0xD20A, 0xD20B, 0xD20C, 0xD20D, 0xD20E, 0xD20F, 0, 0, /* 0x50 */
+ 0, 0xD210, 0xD211, 0xD212, 0xD213, 0xD214, 0xD215, 0xD216, /* 0x60 */
+ 0xD217, 0xD218, 0xD219, 0xD21A, 0xD21B, 0xD21C, 0xD21D, 0xD21E, /* 0x60 */
+ 0xD21F, 0xD220, 0, 0xD221, 0xD222, 0xD223, 0xD224, 0xD225, /* 0x70 */
+ 0xD226, 0xD227, 0xD228, 0xD229, 0xD22A, 0xD22B, 0, 0, /* 0x70 */
+ 0, 0xD22C, 0xD22D, 0xD22E, 0xD22F, 0xD230, 0xD231, 0xD232, /* 0x80 */
+ 0xD233, 0xD234, 0xD235, 0xD236, 0xD237, 0xD238, 0xD239, 0xD23A, /* 0x80 */
+ 0xD23B, 0xD23C, 0, 0xD23D, 0xD23E, 0xD23F, 0xD240, 0xD241, /* 0x90 */
+ 0xD242, 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, 0, 0, /* 0x90 */
+ 0, 0xD248, 0xD249, 0xD24A, 0xD24B, 0xD24C, 0xD24D, 0xD24E, /* 0xA0 */
+ 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, 0xD254, 0xD255, 0xD256, /* 0xA0 */
+ 0xD257, 0xD258, 0, 0xD259, 0xD25A, 0xD25B, 0xD25C, 0xD25D, /* 0xB0 */
+ 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, 0, 0, /* 0xB0 */
+ 0, 0xD264, 0xD265, 0xD266, 0xD267, 0xD268, 0xD269, 0xD26A, /* 0xC0 */
+ 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, 0xD270, 0xD271, 0xD272, /* 0xC0 */
+ 0xD273, 0xD274, 0, 0xD275, 0xD276, 0xD277, 0xD278, 0xD279, /* 0xD0 */
+ 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD27E, 0xD27F, 0, 0, /* 0xD0 */
+ 0, 0xD280, 0xD281, 0xD282, 0xD283, 0xD284, 0xD285, 0xD286, /* 0xE0 */
+ 0xD287, 0xD288, 0xD289, 0xD28A, 0xD28B, 0xD28C, 0xD28D, 0xD28E, /* 0xE0 */
+ 0xD28F, 0xD290, 0, 0xD291, 0xD292, 0xD293, 0xD294, 0xD295, /* 0xF0 */
+ 0xD296, 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_CB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD29C, 0xD29D, 0xD29E, 0xD29F, 0xD2A0, 0xD2A1, 0xD2A2, /* 0x40 */
+ 0xD2A3, 0xD2A4, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, 0xD2A9, 0xD2AA, /* 0x40 */
+ 0xD2AB, 0xD2AC, 0, 0xD2AD, 0xD2AE, 0xD2AF, 0xD2B0, 0xD2B1, /* 0x50 */
+ 0xD2B2, 0xD2B3, 0xD2B4, 0xD2B5, 0xD2B6, 0xD2B7, 0, 0, /* 0x50 */
+ 0, 0xD2B8, 0xD2B9, 0xD2BA, 0xD2BB, 0xD2BC, 0xD2BD, 0xD2BE, /* 0x60 */
+ 0xD2BF, 0xD2C0, 0xD2C1, 0xD2C2, 0xD2C3, 0xD2C4, 0xD2C5, 0xD2C6, /* 0x60 */
+ 0xD2C7, 0xD2C8, 0, 0xD2C9, 0xD2CA, 0xD2CB, 0xD2CC, 0xD2CD, /* 0x70 */
+ 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1, 0xD2D2, 0xD2D3, 0, 0, /* 0x70 */
+ 0, 0xD2D4, 0xD2D5, 0xD2D6, 0xD2D7, 0xD2D8, 0xD2D9, 0xD2DA, /* 0x80 */
+ 0xD2DB, 0xD2DC, 0xD2DD, 0xD2DE, 0xD2DF, 0xD2E0, 0xD2E1, 0xD2E2, /* 0x80 */
+ 0xD2E3, 0xD2E4, 0, 0xD2E5, 0xD2E6, 0xD2E7, 0xD2E8, 0xD2E9, /* 0x90 */
+ 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, 0xD2EE, 0xD2EF, 0, 0, /* 0x90 */
+ 0, 0xD2F0, 0xD2F1, 0xD2F2, 0xD2F3, 0xD2F4, 0xD2F5, 0xD2F6, /* 0xA0 */
+ 0xD2F7, 0xD2F8, 0xD2F9, 0xD2FA, 0xD2FB, 0xD2FC, 0xD2FD, 0xD2FE, /* 0xA0 */
+ 0xD2FF, 0xD300, 0, 0xD301, 0xD302, 0xD303, 0xD304, 0xD305, /* 0xB0 */
+ 0xD306, 0xD307, 0xD308, 0xD309, 0xD30A, 0xD30B /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_CC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x314D, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD30C, 0xD30D, 0xD30E, 0xD30F, 0xD310, 0xD311, 0xD312, /* 0x60 */
+ 0xD313, 0xD314, 0xD315, 0xD316, 0xD317, 0xD318, 0xD319, 0xD31A, /* 0x60 */
+ 0xD31B, 0xD31C, 0, 0xD31D, 0xD31E, 0xD31F, 0xD320, 0xD321, /* 0x70 */
+ 0xD322, 0xD323, 0xD324, 0xD325, 0xD326, 0xD327, 0, 0, /* 0x70 */
+ 0, 0xD328, 0xD329, 0xD32A, 0xD32B, 0xD32C, 0xD32D, 0xD32E, /* 0x80 */
+ 0xD32F, 0xD330, 0xD331, 0xD332, 0xD333, 0xD334, 0xD335, 0xD336, /* 0x80 */
+ 0xD337, 0xD338, 0, 0xD339, 0xD33A, 0xD33B, 0xD33C, 0xD33D, /* 0x90 */
+ 0xD33E, 0xD33F, 0xD340, 0xD341, 0xD342, 0xD343, 0, 0, /* 0x90 */
+ 0, 0xD344, 0xD345, 0xD346, 0xD347, 0xD348, 0xD349, 0xD34A, /* 0xA0 */
+ 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F, 0xD350, 0xD351, 0xD352, /* 0xA0 */
+ 0xD353, 0xD354, 0, 0xD355, 0xD356, 0xD357, 0xD358, 0xD359, /* 0xB0 */
+ 0xD35A, 0xD35B, 0xD35C, 0xD35D, 0xD35E, 0xD35F, 0, 0, /* 0xB0 */
+ 0, 0xD360, 0xD361, 0xD362, 0xD363, 0xD364, 0xD365, 0xD366, /* 0xC0 */
+ 0xD367, 0xD368, 0xD369, 0xD36A, 0xD36B, 0xD36C, 0xD36D, 0xD36E, /* 0xC0 */
+ 0xD36F, 0xD370, 0, 0xD371, 0xD372, 0xD373, 0xD374, 0xD375, /* 0xD0 */
+ 0xD376, 0xD377, 0xD378, 0xD379, 0xD37A, 0xD37B, 0, 0, /* 0xD0 */
+ 0, 0xD37C, 0xD37D, 0xD37E, 0xD37F, 0xD380, 0xD381, 0xD382, /* 0xE0 */
+ 0xD383, 0xD384, 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, 0xD38A, /* 0xE0 */
+ 0xD38B, 0xD38C, 0, 0xD38D, 0xD38E, 0xD38F, 0xD390, 0xD391, /* 0xF0 */
+ 0xD392, 0xD393, 0xD394, 0xD395, 0xD396, 0xD397 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_CD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD398, 0xD399, 0xD39A, 0xD39B, 0xD39C, 0xD39D, 0xD39E, /* 0x40 */
+ 0xD39F, 0xD3A0, 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4, 0xD3A5, 0xD3A6, /* 0x40 */
+ 0xD3A7, 0xD3A8, 0, 0xD3A9, 0xD3AA, 0xD3AB, 0xD3AC, 0xD3AD, /* 0x50 */
+ 0xD3AE, 0xD3AF, 0xD3B0, 0xD3B1, 0xD3B2, 0xD3B3, 0, 0, /* 0x50 */
+ 0, 0xD3B4, 0xD3B5, 0xD3B6, 0xD3B7, 0xD3B8, 0xD3B9, 0xD3BA, /* 0x60 */
+ 0xD3BB, 0xD3BC, 0xD3BD, 0xD3BE, 0xD3BF, 0xD3C0, 0xD3C1, 0xD3C2, /* 0x60 */
+ 0xD3C3, 0xD3C4, 0, 0xD3C5, 0xD3C6, 0xD3C7, 0xD3C8, 0xD3C9, /* 0x70 */
+ 0xD3CA, 0xD3CB, 0xD3CC, 0xD3CD, 0xD3CE, 0xD3CF, 0, 0, /* 0x70 */
+ 0, 0xD3D0, 0xD3D1, 0xD3D2, 0xD3D3, 0xD3D4, 0xD3D5, 0xD3D6, /* 0x80 */
+ 0xD3D7, 0xD3D8, 0xD3D9, 0xD3DA, 0xD3DB, 0xD3DC, 0xD3DD, 0xD3DE, /* 0x80 */
+ 0xD3DF, 0xD3E0, 0, 0xD3E1, 0xD3E2, 0xD3E3, 0xD3E4, 0xD3E5, /* 0x90 */
+ 0xD3E6, 0xD3E7, 0xD3E8, 0xD3E9, 0xD3EA, 0xD3EB, 0, 0, /* 0x90 */
+ 0, 0xD3EC, 0xD3ED, 0xD3EE, 0xD3EF, 0xD3F0, 0xD3F1, 0xD3F2, /* 0xA0 */
+ 0xD3F3, 0xD3F4, 0xD3F5, 0xD3F6, 0xD3F7, 0xD3F8, 0xD3F9, 0xD3FA, /* 0xA0 */
+ 0xD3FB, 0xD3FC, 0, 0xD3FD, 0xD3FE, 0xD3FF, 0xD400, 0xD401, /* 0xB0 */
+ 0xD402, 0xD403, 0xD404, 0xD405, 0xD406, 0xD407, 0, 0, /* 0xB0 */
+ 0, 0xD408, 0xD409, 0xD40A, 0xD40B, 0xD40C, 0xD40D, 0xD40E, /* 0xC0 */
+ 0xD40F, 0xD410, 0xD411, 0xD412, 0xD413, 0xD414, 0xD415, 0xD416, /* 0xC0 */
+ 0xD417, 0xD418, 0, 0xD419, 0xD41A, 0xD41B, 0xD41C, 0xD41D, /* 0xD0 */
+ 0xD41E, 0xD41F, 0xD420, 0xD421, 0xD422, 0xD423, 0, 0, /* 0xD0 */
+ 0, 0xD424, 0xD425, 0xD426, 0xD427, 0xD428, 0xD429, 0xD42A, /* 0xE0 */
+ 0xD42B, 0xD42C, 0xD42D, 0xD42E, 0xD42F, 0xD430, 0xD431, 0xD432, /* 0xE0 */
+ 0xD433, 0xD434, 0, 0xD435, 0xD436, 0xD437, 0xD438, 0xD439, /* 0xF0 */
+ 0xD43A, 0xD43B, 0xD43C, 0xD43D, 0xD43E, 0xD43F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_CE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD440, 0xD441, 0xD442, 0xD443, 0xD444, 0xD445, 0xD446, /* 0x40 */
+ 0xD447, 0xD448, 0xD449, 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, /* 0x40 */
+ 0xD44F, 0xD450, 0, 0xD451, 0xD452, 0xD453, 0xD454, 0xD455, /* 0x50 */
+ 0xD456, 0xD457, 0xD458, 0xD459, 0xD45A, 0xD45B, 0, 0, /* 0x50 */
+ 0, 0xD45C, 0xD45D, 0xD45E, 0xD45F, 0xD460, 0xD461, 0xD462, /* 0x60 */
+ 0xD463, 0xD464, 0xD465, 0xD466, 0xD467, 0xD468, 0xD469, 0xD46A, /* 0x60 */
+ 0xD46B, 0xD46C, 0, 0xD46D, 0xD46E, 0xD46F, 0xD470, 0xD471, /* 0x70 */
+ 0xD472, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, 0, 0, /* 0x70 */
+ 0, 0xD478, 0xD479, 0xD47A, 0xD47B, 0xD47C, 0xD47D, 0xD47E, /* 0x80 */
+ 0xD47F, 0xD480, 0xD481, 0xD482, 0xD483, 0xD484, 0xD485, 0xD486, /* 0x80 */
+ 0xD487, 0xD488, 0, 0xD489, 0xD48A, 0xD48B, 0xD48C, 0xD48D, /* 0x90 */
+ 0xD48E, 0xD48F, 0xD490, 0xD491, 0xD492, 0xD493, 0, 0, /* 0x90 */
+ 0, 0xD494, 0xD495, 0xD496, 0xD497, 0xD498, 0xD499, 0xD49A, /* 0xA0 */
+ 0xD49B, 0xD49C, 0xD49D, 0xD49E, 0xD49F, 0xD4A0, 0xD4A1, 0xD4A2, /* 0xA0 */
+ 0xD4A3, 0xD4A4, 0, 0xD4A5, 0xD4A6, 0xD4A7, 0xD4A8, 0xD4A9, /* 0xB0 */
+ 0xD4AA, 0xD4AB, 0xD4AC, 0xD4AD, 0xD4AE, 0xD4AF, 0, 0, /* 0xB0 */
+ 0, 0xD4B0, 0xD4B1, 0xD4B2, 0xD4B3, 0xD4B4, 0xD4B5, 0xD4B6, /* 0xC0 */
+ 0xD4B7, 0xD4B8, 0xD4B9, 0xD4BA, 0xD4BB, 0xD4BC, 0xD4BD, 0xD4BE, /* 0xC0 */
+ 0xD4BF, 0xD4C0, 0, 0xD4C1, 0xD4C2, 0xD4C3, 0xD4C4, 0xD4C5, /* 0xD0 */
+ 0xD4C6, 0xD4C7, 0xD4C8, 0xD4C9, 0xD4CA, 0xD4CB, 0, 0, /* 0xD0 */
+ 0, 0xD4CC, 0xD4CD, 0xD4CE, 0xD4CF, 0xD4D0, 0xD4D1, 0xD4D2, /* 0xE0 */
+ 0xD4D3, 0xD4D4, 0xD4D5, 0xD4D6, 0xD4D7, 0xD4D8, 0xD4D9, 0xD4DA, /* 0xE0 */
+ 0xD4DB, 0xD4DC, 0, 0xD4DD, 0xD4DE, 0xD4DF, 0xD4E0, 0xD4E1, /* 0xF0 */
+ 0xD4E2, 0xD4E3, 0xD4E4, 0xD4E5, 0xD4E6, 0xD4E7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_CF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD4E8, 0xD4E9, 0xD4EA, 0xD4EB, 0xD4EC, 0xD4ED, 0xD4EE, /* 0x40 */
+ 0xD4EF, 0xD4F0, 0xD4F1, 0xD4F2, 0xD4F3, 0xD4F4, 0xD4F5, 0xD4F6, /* 0x40 */
+ 0xD4F7, 0xD4F8, 0, 0xD4F9, 0xD4FA, 0xD4FB, 0xD4FC, 0xD4FD, /* 0x50 */
+ 0xD4FE, 0xD4FF, 0xD500, 0xD501, 0xD502, 0xD503, 0, 0, /* 0x50 */
+ 0, 0xD504, 0xD505, 0xD506, 0xD507, 0xD508, 0xD509, 0xD50A, /* 0x60 */
+ 0xD50B, 0xD50C, 0xD50D, 0xD50E, 0xD50F, 0xD510, 0xD511, 0xD512, /* 0x60 */
+ 0xD513, 0xD514, 0, 0xD515, 0xD516, 0xD517, 0xD518, 0xD519, /* 0x70 */
+ 0xD51A, 0xD51B, 0xD51C, 0xD51D, 0xD51E, 0xD51F, 0, 0, /* 0x70 */
+ 0, 0xD520, 0xD521, 0xD522, 0xD523, 0xD524, 0xD525, 0xD526, /* 0x80 */
+ 0xD527, 0xD528, 0xD529, 0xD52A, 0xD52B, 0xD52C, 0xD52D, 0xD52E, /* 0x80 */
+ 0xD52F, 0xD530, 0, 0xD531, 0xD532, 0xD533, 0xD534, 0xD535, /* 0x90 */
+ 0xD536, 0xD537, 0xD538, 0xD539, 0xD53A, 0xD53B, 0, 0, /* 0x90 */
+ 0, 0xD53C, 0xD53D, 0xD53E, 0xD53F, 0xD540, 0xD541, 0xD542, /* 0xA0 */
+ 0xD543, 0xD544, 0xD545, 0xD546, 0xD547, 0xD548, 0xD549, 0xD54A, /* 0xA0 */
+ 0xD54B, 0xD54C, 0, 0xD54D, 0xD54E, 0xD54F, 0xD550, 0xD551, /* 0xB0 */
+ 0xD552, 0xD553, 0xD554, 0xD555, 0xD556, 0xD557 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_D0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x314E, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD558, 0xD559, 0xD55A, 0xD55B, 0xD55C, 0xD55D, 0xD55E, /* 0x60 */
+ 0xD55F, 0xD560, 0xD561, 0xD562, 0xD563, 0xD564, 0xD565, 0xD566, /* 0x60 */
+ 0xD567, 0xD568, 0, 0xD569, 0xD56A, 0xD56B, 0xD56C, 0xD56D, /* 0x70 */
+ 0xD56E, 0xD56F, 0xD570, 0xD571, 0xD572, 0xD573, 0, 0, /* 0x70 */
+ 0, 0xD574, 0xD575, 0xD576, 0xD577, 0xD578, 0xD579, 0xD57A, /* 0x80 */
+ 0xD57B, 0xD57C, 0xD57D, 0xD57E, 0xD57F, 0xD580, 0xD581, 0xD582, /* 0x80 */
+ 0xD583, 0xD584, 0, 0xD585, 0xD586, 0xD587, 0xD588, 0xD589, /* 0x90 */
+ 0xD58A, 0xD58B, 0xD58C, 0xD58D, 0xD58E, 0xD58F, 0, 0, /* 0x90 */
+ 0, 0xD590, 0xD591, 0xD592, 0xD593, 0xD594, 0xD595, 0xD596, /* 0xA0 */
+ 0xD597, 0xD598, 0xD599, 0xD59A, 0xD59B, 0xD59C, 0xD59D, 0xD59E, /* 0xA0 */
+ 0xD59F, 0xD5A0, 0, 0xD5A1, 0xD5A2, 0xD5A3, 0xD5A4, 0xD5A5, /* 0xB0 */
+ 0xD5A6, 0xD5A7, 0xD5A8, 0xD5A9, 0xD5AA, 0xD5AB, 0, 0, /* 0xB0 */
+ 0, 0xD5AC, 0xD5AD, 0xD5AE, 0xD5AF, 0xD5B0, 0xD5B1, 0xD5B2, /* 0xC0 */
+ 0xD5B3, 0xD5B4, 0xD5B5, 0xD5B6, 0xD5B7, 0xD5B8, 0xD5B9, 0xD5BA, /* 0xC0 */
+ 0xD5BB, 0xD5BC, 0, 0xD5BD, 0xD5BE, 0xD5BF, 0xD5C0, 0xD5C1, /* 0xD0 */
+ 0xD5C2, 0xD5C3, 0xD5C4, 0xD5C5, 0xD5C6, 0xD5C7, 0, 0, /* 0xD0 */
+ 0, 0xD5C8, 0xD5C9, 0xD5CA, 0xD5CB, 0xD5CC, 0xD5CD, 0xD5CE, /* 0xE0 */
+ 0xD5CF, 0xD5D0, 0xD5D1, 0xD5D2, 0xD5D3, 0xD5D4, 0xD5D5, 0xD5D6, /* 0xE0 */
+ 0xD5D7, 0xD5D8, 0, 0xD5D9, 0xD5DA, 0xD5DB, 0xD5DC, 0xD5DD, /* 0xF0 */
+ 0xD5DE, 0xD5DF, 0xD5E0, 0xD5E1, 0xD5E2, 0xD5E3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_D1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD5E4, 0xD5E5, 0xD5E6, 0xD5E7, 0xD5E8, 0xD5E9, 0xD5EA, /* 0x40 */
+ 0xD5EB, 0xD5EC, 0xD5ED, 0xD5EE, 0xD5EF, 0xD5F0, 0xD5F1, 0xD5F2, /* 0x40 */
+ 0xD5F3, 0xD5F4, 0, 0xD5F5, 0xD5F6, 0xD5F7, 0xD5F8, 0xD5F9, /* 0x50 */
+ 0xD5FA, 0xD5FB, 0xD5FC, 0xD5FD, 0xD5FE, 0xD5FF, 0, 0, /* 0x50 */
+ 0, 0xD600, 0xD601, 0xD602, 0xD603, 0xD604, 0xD605, 0xD606, /* 0x60 */
+ 0xD607, 0xD608, 0xD609, 0xD60A, 0xD60B, 0xD60C, 0xD60D, 0xD60E, /* 0x60 */
+ 0xD60F, 0xD610, 0, 0xD611, 0xD612, 0xD613, 0xD614, 0xD615, /* 0x70 */
+ 0xD616, 0xD617, 0xD618, 0xD619, 0xD61A, 0xD61B, 0, 0, /* 0x70 */
+ 0, 0xD61C, 0xD61D, 0xD61E, 0xD61F, 0xD620, 0xD621, 0xD622, /* 0x80 */
+ 0xD623, 0xD624, 0xD625, 0xD626, 0xD627, 0xD628, 0xD629, 0xD62A, /* 0x80 */
+ 0xD62B, 0xD62C, 0, 0xD62D, 0xD62E, 0xD62F, 0xD630, 0xD631, /* 0x90 */
+ 0xD632, 0xD633, 0xD634, 0xD635, 0xD636, 0xD637, 0, 0, /* 0x90 */
+ 0, 0xD638, 0xD639, 0xD63A, 0xD63B, 0xD63C, 0xD63D, 0xD63E, /* 0xA0 */
+ 0xD63F, 0xD640, 0xD641, 0xD642, 0xD643, 0xD644, 0xD645, 0xD646, /* 0xA0 */
+ 0xD647, 0xD648, 0, 0xD649, 0xD64A, 0xD64B, 0xD64C, 0xD64D, /* 0xB0 */
+ 0xD64E, 0xD64F, 0xD650, 0xD651, 0xD652, 0xD653, 0, 0, /* 0xB0 */
+ 0, 0xD654, 0xD655, 0xD656, 0xD657, 0xD658, 0xD659, 0xD65A, /* 0xC0 */
+ 0xD65B, 0xD65C, 0xD65D, 0xD65E, 0xD65F, 0xD660, 0xD661, 0xD662, /* 0xC0 */
+ 0xD663, 0xD664, 0, 0xD665, 0xD666, 0xD667, 0xD668, 0xD669, /* 0xD0 */
+ 0xD66A, 0xD66B, 0xD66C, 0xD66D, 0xD66E, 0xD66F, 0, 0, /* 0xD0 */
+ 0, 0xD670, 0xD671, 0xD672, 0xD673, 0xD674, 0xD675, 0xD676, /* 0xE0 */
+ 0xD677, 0xD678, 0xD679, 0xD67A, 0xD67B, 0xD67C, 0xD67D, 0xD67E, /* 0xE0 */
+ 0xD67F, 0xD680, 0, 0xD681, 0xD682, 0xD683, 0xD684, 0xD685, /* 0xF0 */
+ 0xD686, 0xD687, 0xD688, 0xD689, 0xD68A, 0xD68B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_D2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD68C, 0xD68D, 0xD68E, 0xD68F, 0xD690, 0xD691, 0xD692, /* 0x40 */
+ 0xD693, 0xD694, 0xD695, 0xD696, 0xD697, 0xD698, 0xD699, 0xD69A, /* 0x40 */
+ 0xD69B, 0xD69C, 0, 0xD69D, 0xD69E, 0xD69F, 0xD6A0, 0xD6A1, /* 0x50 */
+ 0xD6A2, 0xD6A3, 0xD6A4, 0xD6A5, 0xD6A6, 0xD6A7, 0, 0, /* 0x50 */
+ 0, 0xD6A8, 0xD6A9, 0xD6AA, 0xD6AB, 0xD6AC, 0xD6AD, 0xD6AE, /* 0x60 */
+ 0xD6AF, 0xD6B0, 0xD6B1, 0xD6B2, 0xD6B3, 0xD6B4, 0xD6B5, 0xD6B6, /* 0x60 */
+ 0xD6B7, 0xD6B8, 0, 0xD6B9, 0xD6BA, 0xD6BB, 0xD6BC, 0xD6BD, /* 0x70 */
+ 0xD6BE, 0xD6BF, 0xD6C0, 0xD6C1, 0xD6C2, 0xD6C3, 0, 0, /* 0x70 */
+ 0, 0xD6C4, 0xD6C5, 0xD6C6, 0xD6C7, 0xD6C8, 0xD6C9, 0xD6CA, /* 0x80 */
+ 0xD6CB, 0xD6CC, 0xD6CD, 0xD6CE, 0xD6CF, 0xD6D0, 0xD6D1, 0xD6D2, /* 0x80 */
+ 0xD6D3, 0xD6D4, 0, 0xD6D5, 0xD6D6, 0xD6D7, 0xD6D8, 0xD6D9, /* 0x90 */
+ 0xD6DA, 0xD6DB, 0xD6DC, 0xD6DD, 0xD6DE, 0xD6DF, 0, 0, /* 0x90 */
+ 0, 0xD6E0, 0xD6E1, 0xD6E2, 0xD6E3, 0xD6E4, 0xD6E5, 0xD6E6, /* 0xA0 */
+ 0xD6E7, 0xD6E8, 0xD6E9, 0xD6EA, 0xD6EB, 0xD6EC, 0xD6ED, 0xD6EE, /* 0xA0 */
+ 0xD6EF, 0xD6F0, 0, 0xD6F1, 0xD6F2, 0xD6F3, 0xD6F4, 0xD6F5, /* 0xB0 */
+ 0xD6F6, 0xD6F7, 0xD6F8, 0xD6F9, 0xD6FA, 0xD6FB, 0, 0, /* 0xB0 */
+ 0, 0xD6FC, 0xD6FD, 0xD6FE, 0xD6FF, 0xD700, 0xD701, 0xD702, /* 0xC0 */
+ 0xD703, 0xD704, 0xD705, 0xD706, 0xD707, 0xD708, 0xD709, 0xD70A, /* 0xC0 */
+ 0xD70B, 0xD70C, 0, 0xD70D, 0xD70E, 0xD70F, 0xD710, 0xD711, /* 0xD0 */
+ 0xD712, 0xD713, 0xD714, 0xD715, 0xD716, 0xD717, 0, 0, /* 0xD0 */
+ 0, 0xD718, 0xD719, 0xD71A, 0xD71B, 0xD71C, 0xD71D, 0xD71E, /* 0xE0 */
+ 0xD71F, 0xD720, 0xD721, 0xD722, 0xD723, 0xD724, 0xD725, 0xD726, /* 0xE0 */
+ 0xD727, 0xD728, 0, 0xD729, 0xD72A, 0xD72B, 0xD72C, 0xD72D, /* 0xF0 */
+ 0xD72E, 0xD72F, 0xD730, 0xD731, 0xD732, 0xD733 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_D3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD734, 0xD735, 0xD736, 0xD737, 0xD738, 0xD739, 0xD73A, /* 0x40 */
+ 0xD73B, 0xD73C, 0xD73D, 0xD73E, 0xD73F, 0xD740, 0xD741, 0xD742, /* 0x40 */
+ 0xD743, 0xD744, 0, 0xD745, 0xD746, 0xD747, 0xD748, 0xD749, /* 0x50 */
+ 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E, 0xD74F, 0, 0, /* 0x50 */
+ 0, 0xD750, 0xD751, 0xD752, 0xD753, 0xD754, 0xD755, 0xD756, /* 0x60 */
+ 0xD757, 0xD758, 0xD759, 0xD75A, 0xD75B, 0xD75C, 0xD75D, 0xD75E, /* 0x60 */
+ 0xD75F, 0xD760, 0, 0xD761, 0xD762, 0xD763, 0xD764, 0xD765, /* 0x70 */
+ 0xD766, 0xD767, 0xD768, 0xD769, 0xD76A, 0xD76B, 0, 0, /* 0x70 */
+ 0, 0xD76C, 0xD76D, 0xD76E, 0xD76F, 0xD770, 0xD771, 0xD772, /* 0x80 */
+ 0xD773, 0xD774, 0xD775, 0xD776, 0xD777, 0xD778, 0xD779, 0xD77A, /* 0x80 */
+ 0xD77B, 0xD77C, 0, 0xD77D, 0xD77E, 0xD77F, 0xD780, 0xD781, /* 0x90 */
+ 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0, 0, /* 0x90 */
+ 0, 0xD788, 0xD789, 0xD78A, 0xD78B, 0xD78C, 0xD78D, 0xD78E, /* 0xA0 */
+ 0xD78F, 0xD790, 0xD791, 0xD792, 0xD793, 0xD794, 0xD795, 0xD796, /* 0xA0 */
+ 0xD797, 0xD798, 0, 0xD799, 0xD79A, 0xD79B, 0xD79C, 0xD79D, /* 0xB0 */
+ 0xD79E, 0xD79F, 0xD7A0, 0xD7A1, 0xD7A2, 0xD7A3 /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_D9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3000, 0x3001, 0x3002, 0x00B7, 0x2025, 0x2026, 0x00A8, /* 0x30 */
+ 0x3003, 0x00AD, 0x2015, 0x2225, 0xFF3C, 0x223C, 0x2018, 0x2019, /* 0x30 */
+ 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, /* 0x40 */
+ 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0x00B1, 0x00D7, /* 0x40 */
+ 0x00F7, 0x2260, 0x2264, 0x2265, 0x221E, 0x2234, 0x00B0, 0x2032, /* 0x50 */
+ 0x2033, 0x2103, 0x212B, 0xFFE0, 0xFFE1, 0xFFE5, 0x2642, 0x2640, /* 0x50 */
+ 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00A7, /* 0x60 */
+ 0x203B, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, /* 0x60 */
+ 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x2192, 0x2190, /* 0x70 */
+ 0x2191, 0x2193, 0x2194, 0x3013, 0x226A, 0x226B, 0x221A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x223D, 0x221D, 0x2235, 0x222B, 0x222C, 0x2208, 0x220B, /* 0x90 */
+ 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, 0x2229, 0x2227, 0x2228, /* 0x90 */
+ 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203, 0x00B4, 0xFF5E, 0x02C7, /* 0xA0 */
+ 0x02D8, 0x02DD, 0x02DA, 0x02D9, 0x00B8, 0x02DB, 0x00A1, 0x00BF, /* 0xA0 */
+ 0x02D0, 0x222E, 0x2211, 0x220F, 0x00A4, 0x2109, 0x2030, 0x25C1, /* 0xB0 */
+ 0x25C0, 0x25B7, 0x25B6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, /* 0xB0 */
+ 0x2663, 0x2299, 0x25C8, 0x25A3, 0x25D0, 0x25D1, 0x2592, 0x25A4, /* 0xC0 */
+ 0x25A5, 0x25A8, 0x25A7, 0x25A6, 0x25A9, 0x2668, 0x260F, 0x260E, /* 0xC0 */
+ 0x261C, 0x261E, 0x00B6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, /* 0xD0 */
+ 0x2196, 0x2198, 0x266D, 0x2669, 0x266A, 0x266C, 0x327F, 0x321C, /* 0xD0 */
+ 0x2116, 0x33C7, 0x2122, 0x33C2, 0x33D8, 0x2121 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* Add some additional characters, which are different defined on Solaris */
+/* DAA1-DAD3 --> 3131-3163 */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_DA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, /* 0x30 */
+ 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, /* 0x30 */
+ 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, /* 0x40 */
+ 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, /* 0x40 */
+ 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, /* 0x50 */
+ 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, /* 0x50 */
+ 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, /* 0x60 */
+ 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFFE6, 0xFF3D, 0xFF3E, 0xFF3F, /* 0x60 */
+ 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0x70 */
+ 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, /* 0x90 */
+ 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, /* 0x90 */
+ 0xFFE3, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, /* 0xA0 */
+ 0x3138, 0x3139, 0x313A, 0x313B, 0x313C, 0x313D, 0x313E, 0x313F, /* 0xA0 */
+ 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, /* 0xB0 */
+ 0x3148, 0x3149, 0x314A, 0x314B, 0x314C, 0x314D, 0x314E, 0x314F, /* 0xB0 */
+ 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, /* 0xC0 */
+ 0x3158, 0x3159, 0x315A, 0x315B, 0x315C, 0x315D, 0x315E, 0x315F, /* 0xC0 */
+ 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, /* 0xD0 */
+ 0x3168, 0x3169, 0x316A, 0x316B, 0x316C, 0x316D, 0x316E, 0x316F, /* 0xD0 */
+ 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, /* 0xE0 */
+ 0x3178, 0x3179, 0x317A, 0x317B, 0x317C, 0x317D, 0x317E, 0x317F, /* 0xE0 */
+ 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, /* 0xF0 */
+ 0x3188, 0x3189, 0x318A, 0x318B, 0x318C, 0x318D, 0x318E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_DB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, /* 0x30 */
+ 0x2177, 0x2178, 0x2179, 0, 0, 0, 0, 0, /* 0x30 */
+ 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, /* 0x40 */
+ 0x2168, 0x2169, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0x50 */
+ 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0x50 */
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, /* 0x60 */
+ 0x03A9, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0x70 */
+ 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, /* 0x90 */
+ 0x03C7, 0x03C8, 0x03C9, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, /* 0xA0 */
+ 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, /* 0xA0 */
+ 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, /* 0xB0 */
+ 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, /* 0xB0 */
+ 0x2542, 0x2512, 0x2511, 0x251A, 0x2519, 0x2516, 0x2515, 0x250E, /* 0xC0 */
+ 0x250D, 0x251E, 0x251F, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, /* 0xC0 */
+ 0x252A, 0x252D, 0x252E, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, /* 0xD0 */
+ 0x253A, 0x253D, 0x253E, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, /* 0xD0 */
+ 0x2546, 0x2547, 0x2548, 0x2549, 0x254A /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_DC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33C4, 0x33A3, /* 0x30 */
+ 0x33A4, 0x33A5, 0x33A6, 0x3399, 0x339A, 0x339B, 0x339C, 0x339D, /* 0x30 */
+ 0x339E, 0x339F, 0x33A0, 0x33A1, 0x33A2, 0x33CA, 0x338D, 0x338E, /* 0x40 */
+ 0x338F, 0x33CF, 0x3388, 0x3389, 0x33C8, 0x33A7, 0x33A8, 0x33B0, /* 0x40 */
+ 0x33B1, 0x33B2, 0x33B3, 0x33B4, 0x33B5, 0x33B6, 0x33B7, 0x33B8, /* 0x50 */
+ 0x33B9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33BA, 0x33BB, /* 0x50 */
+ 0x33BC, 0x33BD, 0x33BE, 0x33BF, 0x3390, 0x3391, 0x3392, 0x3393, /* 0x60 */
+ 0x3394, 0x2126, 0x33C0, 0x33C1, 0x338A, 0x338B, 0x338C, 0x33D6, /* 0x60 */
+ 0x33C5, 0x33AD, 0x33AE, 0x33AF, 0x33DB, 0x33A9, 0x33AA, 0x33AB, /* 0x70 */
+ 0x33AC, 0x33DD, 0x33D0, 0x33D3, 0x33C3, 0x33C9, 0x33DC, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x33C6, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x00C6, 0x00D0, 0x00AA, 0x0126, 0, 0x0132, 0, /* 0xA0 */
+ 0x013F, 0x0141, 0x00D8, 0x0152, 0x00BA, 0x00DE, 0x0166, 0x014A, /* 0xA0 */
+ 0, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, /* 0xB0 */
+ 0x3267, 0x3268, 0x3269, 0x326A, 0x326B, 0x326C, 0x326D, 0x326E, /* 0xB0 */
+ 0x326F, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, /* 0xC0 */
+ 0x3277, 0x3278, 0x3279, 0x327A, 0x327B, 0x24D0, 0x24D1, 0x24D2, /* 0xC0 */
+ 0x24D3, 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, /* 0xD0 */
+ 0x24DB, 0x24DC, 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, /* 0xD0 */
+ 0x24E3, 0x24E4, 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x2460, /* 0xE0 */
+ 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, /* 0xE0 */
+ 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x00BD, 0x2153, /* 0xF0 */
+ 0x2154, 0x00BC, 0x00BE, 0x215B, 0x215C, 0x215D, 0x215E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_DD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00E6, 0x0111, 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138, /* 0x30 */
+ 0x0140, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x00FE, 0x0167, 0x014B, /* 0x30 */
+ 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, /* 0x40 */
+ 0x3207, 0x3208, 0x3209, 0x320A, 0x320B, 0x320C, 0x320D, 0x320E, /* 0x40 */
+ 0x320F, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, /* 0x50 */
+ 0x3217, 0x3218, 0x3219, 0x321A, 0x321B, 0x249C, 0x249D, 0x249E, /* 0x50 */
+ 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, /* 0x60 */
+ 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, /* 0x60 */
+ 0x24AF, 0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x2474, /* 0x70 */
+ 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x247C, 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, /* 0x90 */
+ 0x00B9, 0x00B2, 0x00B3, 0x2074, 0x207F, 0x2081, 0x2082, 0x2083, /* 0x90 */
+ 0x2084, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0xA0 */
+ 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, /* 0xA0 */
+ 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, /* 0xB0 */
+ 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, /* 0xB0 */
+ 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, /* 0xC0 */
+ 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, /* 0xC0 */
+ 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, /* 0xD0 */
+ 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, /* 0xD0 */
+ 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0xE0 */
+ 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, /* 0xE0 */
+ 0x3090, 0x3091, 0x3092, 0x3093 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_DE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, /* 0x30 */
+ 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0x30 */
+ 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0x40 */
+ 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0x40 */
+ 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0x50 */
+ 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0x50 */
+ 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0x60 */
+ 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0x60 */
+ 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0x70 */
+ 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, /* 0x90 */
+ 0x30F6, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, /* 0xA0 */
+ 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, /* 0xA0 */
+ 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, /* 0xB0 */
+ 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, /* 0xB0 */
+ 0x042E, 0x042F, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, /* 0xD0 */
+ 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, /* 0xD0 */
+ 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0xE0 */
+ 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0xE0 */
+ 0x044E, 0x044F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F3D, 0x4F73, 0x5047, 0x50F9, 0x52A0, 0x53EF, 0x5475, /* 0x30 */
+ 0x54E5, 0x5609, 0x5AC1, 0x5BB6, 0x6687, 0x67B6, 0x67B7, 0x67EF, /* 0x30 */
+ 0x6B4C, 0x73C2, 0x75C2, 0x7A3C, 0x82DB, 0x8304, 0x8857, 0x8888, /* 0x40 */
+ 0x8A36, 0x8CC8, 0x8DCF, 0x8EFB, 0x8FE6, 0x99D5, 0x523B, 0x5374, /* 0x40 */
+ 0x5404, 0x606A, 0x6164, 0x6BBC, 0x73CF, 0x811A, 0x89BA, 0x89D2, /* 0x50 */
+ 0x95A3, 0x4F83, 0x520A, 0x58BE, 0x5978, 0x59E6, 0x5E72, 0x5E79, /* 0x50 */
+ 0x61C7, 0x63C0, 0x6746, 0x67EC, 0x687F, 0x6F97, 0x764E, 0x770B, /* 0x60 */
+ 0x78F5, 0x7A08, 0x7AFF, 0x7C21, 0x809D, 0x826E, 0x8271, 0x8AEB, /* 0x60 */
+ 0x9593, 0x4E6B, 0x559D, 0x66F7, 0x6E34, 0x78A3, 0x7AED, 0x845B, /* 0x70 */
+ 0x8910, 0x874E, 0x97A8, 0x52D8, 0x574E, 0x582A, 0x5D4C, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x611F, 0x61BE, 0x6221, 0x6562, 0x67D1, 0x6A44, 0x6E1B, /* 0x90 */
+ 0x7518, 0x75B3, 0x76E3, 0x77B0, 0x7D3A, 0x90AF, 0x9451, 0x9452, /* 0x90 */
+ 0x9F95, 0x5323, 0x5CAC, 0x7532, 0x80DB, 0x9240, 0x9598, 0x525B, /* 0xA0 */
+ 0x5808, 0x59DC, 0x5CA1, 0x5D17, 0x5EB7, 0x5F3A, 0x5F4A, 0x6177, /* 0xA0 */
+ 0x6C5F, 0x757A, 0x7586, 0x7CE0, 0x7D73, 0x7DB1, 0x7F8C, 0x8154, /* 0xB0 */
+ 0x8221, 0x8591, 0x8941, 0x8B1B, 0x92FC, 0x964D, 0x9C47, 0x4ECB, /* 0xB0 */
+ 0x4EF7, 0x500B, 0x51F1, 0x584F, 0x6137, 0x613E, 0x6168, 0x6539, /* 0xC0 */
+ 0x69EA, 0x6F11, 0x75A5, 0x7686, 0x76D6, 0x7B87, 0x82A5, 0x84CB, /* 0xC0 */
+ 0xF900, 0x93A7, 0x958B, 0x5580, 0x5BA2, 0x5751, 0xF901, 0x7CB3, /* 0xD0 */
+ 0x7FB9, 0x91B5, 0x5028, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x636E, /* 0xD0 */
+ 0x64DA, 0x64E7, 0x6E20, 0x70AC, 0x795B, 0x8DDD, 0x8E1E, 0xF902, /* 0xE0 */
+ 0x907D, 0x9245, 0x92F8, 0x4E7E, 0x4EF6, 0x5065, 0x5DFE, 0x5EFA, /* 0xE0 */
+ 0x6106, 0x6957, 0x8171, 0x8654, 0x8E47, 0x9375, 0x9A2B, 0x4E5E, /* 0xF0 */
+ 0x5091, 0x6770, 0x6840, 0x5109, 0x528D, 0x5292, 0x6AA2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x77BC, 0x9210, 0x9ED4, 0x52AB, 0x602F, 0x8FF2, 0x5048, /* 0x30 */
+ 0x61A9, 0x63ED, 0x64CA, 0x683C, 0x6A84, 0x6FC0, 0x8188, 0x89A1, /* 0x30 */
+ 0x9694, 0x5805, 0x727D, 0x72AC, 0x7504, 0x7D79, 0x7E6D, 0x80A9, /* 0x40 */
+ 0x898B, 0x8B74, 0x9063, 0x9D51, 0x6289, 0x6C7A, 0x6F54, 0x7D50, /* 0x40 */
+ 0x7F3A, 0x8A23, 0x517C, 0x614A, 0x7B9D, 0x8B19, 0x9257, 0x938C, /* 0x50 */
+ 0x4EAC, 0x4FD3, 0x501E, 0x50BE, 0x5106, 0x52C1, 0x52CD, 0x537F, /* 0x50 */
+ 0x5770, 0x5883, 0x5E9A, 0x5F91, 0x6176, 0x61AC, 0x64CE, 0x656C, /* 0x60 */
+ 0x666F, 0x66BB, 0x66F4, 0x6897, 0x6D87, 0x7085, 0x70F1, 0x749F, /* 0x60 */
+ 0x74A5, 0x74CA, 0x75D9, 0x786C, 0x78EC, 0x7ADF, 0x7AF6, 0x7D45, /* 0x70 */
+ 0x7D93, 0x8015, 0x803F, 0x811B, 0x8396, 0x8B66, 0x8F15, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x9015, 0x93E1, 0x9803, 0x9838, 0x9A5A, 0x9BE8, 0x4FC2, /* 0x90 */
+ 0x5553, 0x583A, 0x5951, 0x5B63, 0x5C46, 0x60B8, 0x6212, 0x6842, /* 0x90 */
+ 0x68B0, 0x68E8, 0x6EAA, 0x754C, 0x7678, 0x78CE, 0x7A3D, 0x7CFB, /* 0xA0 */
+ 0x7E6B, 0x7E7C, 0x8A08, 0x8AA1, 0x8C3F, 0x968E, 0x9DC4, 0x53E4, /* 0xA0 */
+ 0x53E9, 0x544A, 0x5471, 0x56FA, 0x59D1, 0x5B64, 0x5C3B, 0x5EAB, /* 0xB0 */
+ 0x62F7, 0x6537, 0x6545, 0x6572, 0x66A0, 0x67AF, 0x69C1, 0x6CBD, /* 0xB0 */
+ 0x75FC, 0x7690, 0x777E, 0x7A3F, 0x7F94, 0x8003, 0x80A1, 0x818F, /* 0xC0 */
+ 0x82E6, 0x82FD, 0x83F0, 0x85C1, 0x8831, 0x88B4, 0x8AA5, 0xF903, /* 0xC0 */
+ 0x8F9C, 0x932E, 0x96C7, 0x9867, 0x9AD8, 0x9F13, 0x54ED, 0x659B, /* 0xD0 */
+ 0x66F2, 0x688F, 0x7A40, 0x8C37, 0x9D60, 0x56F0, 0x5764, 0x5D11, /* 0xD0 */
+ 0x6606, 0x68B1, 0x68CD, 0x6EFE, 0x7428, 0x889E, 0x9BE4, 0x6C68, /* 0xE0 */
+ 0xF904, 0x9AA8, 0x4F9B, 0x516C, 0x5171, 0x529F, 0x5B54, 0x5DE5, /* 0xE0 */
+ 0x6050, 0x606D, 0x62F1, 0x63A7, 0x653B, 0x73D9, 0x7A7A, 0x86A3, /* 0xF0 */
+ 0x8CA2, 0x978F, 0x4E32, 0x5BE1, 0x6208, 0x679C, 0x74DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x79D1, 0x83D3, 0x8A87, 0x8AB2, 0x8DE8, 0x904E, 0x934B, /* 0x30 */
+ 0x9846, 0x5ED3, 0x69E8, 0x85FF, 0x90ED, 0xF905, 0x51A0, 0x5B98, /* 0x30 */
+ 0x5BEC, 0x6163, 0x68FA, 0x6B3E, 0x704C, 0x742F, 0x74D8, 0x7BA1, /* 0x40 */
+ 0x7F50, 0x83C5, 0x89C0, 0x8CAB, 0x95DC, 0x9928, 0x522E, 0x605D, /* 0x40 */
+ 0x62EC, 0x9002, 0x4F8A, 0x5149, 0x5321, 0x58D9, 0x5EE3, 0x66E0, /* 0x50 */
+ 0x6D38, 0x709A, 0x72C2, 0x73D6, 0x7B50, 0x80F1, 0x945B, 0x5366, /* 0x50 */
+ 0x639B, 0x7F6B, 0x4E56, 0x5080, 0x584A, 0x58DE, 0x602A, 0x6127, /* 0x60 */
+ 0x62D0, 0x69D0, 0x9B41, 0x5B8F, 0x7D18, 0x80B1, 0x8F5F, 0x4EA4, /* 0x60 */
+ 0x50D1, 0x54AC, 0x55AC, 0x5B0C, 0x5DA0, 0x5DE7, 0x652A, 0x654E, /* 0x70 */
+ 0x6821, 0x6A4B, 0x72E1, 0x768E, 0x77EF, 0x7D5E, 0x7FF9, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x81A0, 0x854E, 0x86DF, 0x8F03, 0x8F4E, 0x90CA, 0x9903, /* 0x90 */
+ 0x9A55, 0x9BAB, 0x4E18, 0x4E45, 0x4E5D, 0x4EC7, 0x4FF1, 0x5177, /* 0x90 */
+ 0x52FE, 0x5340, 0x53E3, 0x53E5, 0x548E, 0x5614, 0x5775, 0x57A2, /* 0xA0 */
+ 0x5BC7, 0x5D87, 0x5ED0, 0x61FC, 0x62D8, 0x6551, 0x67B8, 0x67E9, /* 0xA0 */
+ 0x69CB, 0x6B50, 0x6BC6, 0x6BEC, 0x6C42, 0x6E9D, 0x7078, 0x72D7, /* 0xB0 */
+ 0x7396, 0x7403, 0x77BF, 0x77E9, 0x7A76, 0x7D7F, 0x8009, 0x81FC, /* 0xB0 */
+ 0x8205, 0x820A, 0x82DF, 0x8862, 0x8B33, 0x8CFC, 0x8EC0, 0x9011, /* 0xC0 */
+ 0x90B1, 0x9264, 0x92B6, 0x99D2, 0x9A45, 0x9CE9, 0x9DD7, 0x9F9C, /* 0xC0 */
+ 0x570B, 0x5C40, 0x83CA, 0x97A0, 0x97AB, 0x9EB4, 0x541B, 0x7A98, /* 0xD0 */
+ 0x7FA4, 0x88D9, 0x8ECD, 0x90E1, 0x5800, 0x5C48, 0x6398, 0x7A9F, /* 0xD0 */
+ 0x5BAE, 0x5F13, 0x7A79, 0x7AAE, 0x828E, 0x8EAC, 0x5026, 0x5238, /* 0xE0 */
+ 0x52F8, 0x5377, 0x5708, 0x62F3, 0x6372, 0x6B0A, 0x6DC3, 0x7737, /* 0xE0 */
+ 0x53A5, 0x7357, 0x8568, 0x8E76, 0x95D5, 0x673A, 0x6AC3, 0x6F70, /* 0xF0 */
+ 0x8A6D, 0x8ECC, 0x994B, 0xF906, 0x6677, 0x6B78, 0x8CB4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9B3C, 0xF907, 0x53EB, 0x572D, 0x594E, 0x63C6, 0x69FB, /* 0x30 */
+ 0x73EA, 0x7845, 0x7ABA, 0x7AC5, 0x7CFE, 0x8475, 0x898F, 0x8D73, /* 0x30 */
+ 0x9035, 0x95A8, 0x52FB, 0x5747, 0x7547, 0x7B60, 0x83CC, 0x921E, /* 0x40 */
+ 0xF908, 0x6A58, 0x514B, 0x524B, 0x5287, 0x621F, 0x68D8, 0x6975, /* 0x40 */
+ 0x9699, 0x50C5, 0x52A4, 0x52E4, 0x61C3, 0x65A4, 0x6839, 0x69FF, /* 0x50 */
+ 0x747E, 0x7B4B, 0x82B9, 0x83EB, 0x89B2, 0x8B39, 0x8FD1, 0x9949, /* 0x50 */
+ 0xF909, 0x4ECA, 0x5997, 0x64D2, 0x6611, 0x6A8E, 0x7434, 0x7981, /* 0x60 */
+ 0x79BD, 0x82A9, 0x887E, 0x887F, 0x895F, 0xF90A, 0x9326, 0x4F0B, /* 0x60 */
+ 0x53CA, 0x6025, 0x6271, 0x6C72, 0x7D1A, 0x7D66, 0x4E98, 0x5162, /* 0x70 */
+ 0x77DC, 0x80AF, 0x4F01, 0x4F0E, 0x5176, 0x5180, 0x55DC, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x5668, 0x573B, 0x57FA, 0x57FC, 0x5914, 0x5947, 0x5993, /* 0x90 */
+ 0x5BC4, 0x5C90, 0x5D0E, 0x5DF1, 0x5E7E, 0x5FCC, 0x6280, 0x65D7, /* 0x90 */
+ 0x65E3, 0x671E, 0x671F, 0x675E, 0x68CB, 0x68C4, 0x6A5F, 0x6B3A, /* 0xA0 */
+ 0x6C23, 0x6C7D, 0x6C82, 0x6DC7, 0x7398, 0x7426, 0x742A, 0x7482, /* 0xA0 */
+ 0x74A3, 0x7578, 0x757F, 0x7881, 0x78EF, 0x7941, 0x7947, 0x7948, /* 0xB0 */
+ 0x797A, 0x7B95, 0x7D00, 0x7DBA, 0x7F88, 0x8006, 0x802D, 0x808C, /* 0xB0 */
+ 0x8A18, 0x8B4F, 0x8C48, 0x8D77, 0x9321, 0x9324, 0x98E2, 0x9951, /* 0xC0 */
+ 0x9A0E, 0x9A0F, 0x9A65, 0x9E92, 0x7DCA, 0x4F76, 0x5409, 0x62EE, /* 0xC0 */
+ 0x6854, 0x91D1, 0x55AB, 0x513A, 0xF90B, 0xF90C, 0x5A1C, 0x61E6, /* 0xD0 */
+ 0xF90D, 0x62CF, 0x62FF, 0xF90E, 0xF90F, 0xF910, 0xF911, 0xF912, /* 0xD0 */
+ 0xF913, 0x90A3, 0xF914, 0xF915, 0xF916, 0xF917, 0xF918, 0x8AFE, /* 0xE0 */
+ 0xF919, 0xF91A, 0xF91B, 0xF91C, 0x6696, 0xF91D, 0x7156, 0xF91E, /* 0xE0 */
+ 0xF91F, 0x96E3, 0xF920, 0x634F, 0x637A, 0x5357, 0xF921, 0x678F, /* 0xF0 */
+ 0x6960, 0x6E73, 0xF922, 0x7537, 0xF923, 0xF924, 0xF925 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7D0D, 0xF926, 0xF927, 0x8872, 0x56CA, 0x5A18, 0xF928, /* 0x30 */
+ 0xF929, 0xF92A, 0xF92B, 0xF92C, 0x4E43, 0xF92D, 0x5167, 0x5948, /* 0x30 */
+ 0x67F0, 0x8010, 0xF92E, 0x5973, 0x5E74, 0x649A, 0x79CA, 0x5FF5, /* 0x40 */
+ 0x606C, 0x62C8, 0x637B, 0x5BE7, 0x5BD7, 0x52AA, 0xF92F, 0x5974, /* 0x40 */
+ 0x5F29, 0x6012, 0xF930, 0xF931, 0xF932, 0x7459, 0xF933, 0xF934, /* 0x50 */
+ 0xF935, 0xF936, 0xF937, 0xF938, 0x99D1, 0xF939, 0xF93A, 0xF93B, /* 0x50 */
+ 0xF93C, 0xF93D, 0xF93E, 0xF93F, 0xF940, 0xF941, 0xF942, 0xF943, /* 0x60 */
+ 0x6FC3, 0xF944, 0xF945, 0x81BF, 0x8FB2, 0x60F1, 0xF946, 0xF947, /* 0x60 */
+ 0x8166, 0xF948, 0xF949, 0x5C3F, 0xF94A, 0xF94B, 0xF94C, 0xF94D, /* 0x70 */
+ 0xF94E, 0xF94F, 0xF950, 0xF951, 0x5AE9, 0x8A25, 0x677B, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x7D10, 0xF952, 0xF953, 0xF954, 0xF955, 0xF956, 0xF957, /* 0x90 */
+ 0x80FD, 0xF958, 0xF959, 0x5C3C, 0x6CE5, 0x533F, 0x6EBA, 0x591A, /* 0x90 */
+ 0x8336, 0x4E39, 0x4EB6, 0x4F46, 0x55AE, 0x5718, 0x58C7, 0x5F56, /* 0xA0 */
+ 0x65B7, 0x65E6, 0x6A80, 0x6BB5, 0x6E4D, 0x77ED, 0x7AEF, 0x7C1E, /* 0xA0 */
+ 0x7DDE, 0x86CB, 0x8892, 0x9132, 0x935B, 0x64BB, 0x6FBE, 0x737A, /* 0xB0 */
+ 0x75B8, 0x9054, 0x5556, 0x574D, 0x61BA, 0x64D4, 0x66C7, 0x6DE1, /* 0xB0 */
+ 0x6E5B, 0x6F6D, 0x6FB9, 0x75F0, 0x8043, 0x81BD, 0x8541, 0x8983, /* 0xC0 */
+ 0x8AC7, 0x8B5A, 0x931F, 0x6C93, 0x7553, 0x7B54, 0x8E0F, 0x905D, /* 0xC0 */
+ 0x5510, 0x5802, 0x5858, 0x5E62, 0x6207, 0x649E, 0x68E0, 0x7576, /* 0xD0 */
+ 0x7CD6, 0x87B3, 0x9EE8, 0x4EE3, 0x5788, 0x576E, 0x5927, 0x5C0D, /* 0xD0 */
+ 0x5CB1, 0x5E36, 0x5F85, 0x6234, 0x64E1, 0x73B3, 0x81FA, 0x888B, /* 0xE0 */
+ 0x8CB8, 0x968A, 0x9EDB, 0x5B85, 0x5FB7, 0x60B3, 0x5012, 0x5200, /* 0xE0 */
+ 0x5230, 0x5716, 0x5835, 0x5857, 0x5C0E, 0x5C60, 0x5CF6, 0x5D8B, /* 0xF0 */
+ 0x5EA6, 0x5F92, 0x60BC, 0x6311, 0x6389, 0x6417, 0x6843 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x68F9, 0x6AC2, 0x6DD8, 0x6E21, 0x6ED4, 0x6FE4, 0x71FE, /* 0x30 */
+ 0x76DC, 0x7779, 0x79B1, 0x7A3B, 0x8404, 0x89A9, 0x8CED, 0x8DF3, /* 0x30 */
+ 0x8E48, 0x9003, 0x9014, 0x9053, 0x90FD, 0x934D, 0x9676, 0x97DC, /* 0x40 */
+ 0x6BD2, 0x7006, 0x7258, 0x72A2, 0x7368, 0x7763, 0x79BF, 0x7BE4, /* 0x40 */
+ 0x7E9B, 0x8B80, 0x58A9, 0x60C7, 0x6566, 0x65FD, 0x66BE, 0x6C8C, /* 0x50 */
+ 0x711E, 0x71C9, 0x8C5A, 0x9813, 0x4E6D, 0x7A81, 0x4EDD, 0x51AC, /* 0x50 */
+ 0x51CD, 0x52D5, 0x540C, 0x61A7, 0x6771, 0x6850, 0x68DF, 0x6D1E, /* 0x60 */
+ 0x6F7C, 0x75BC, 0x77B3, 0x7AE5, 0x80F4, 0x8463, 0x9285, 0x515C, /* 0x60 */
+ 0x6597, 0x675C, 0x6793, 0x75D8, 0x7AC7, 0x8373, 0xF95A, 0x8C46, /* 0x70 */
+ 0x9017, 0x982D, 0x5C6F, 0x81C0, 0x829A, 0x9041, 0x906F, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x920D, 0x5F97, 0x5D9D, 0x6A59, 0x71C8, 0x767B, 0x7B49, /* 0x90 */
+ 0x85E4, 0x8B04, 0x9127, 0x9A30, 0x5587, 0x61F6, 0xF95B, 0x7669, /* 0x90 */
+ 0x7F85, 0x863F, 0x87BA, 0x88F8, 0x908F, 0xF95C, 0x6D1B, 0x70D9, /* 0xA0 */
+ 0x73DE, 0x7D61, 0x843D, 0xF95D, 0x916A, 0x99F1, 0xF95E, 0x4E82, /* 0xA0 */
+ 0x5375, 0x6B04, 0x6B12, 0x703E, 0x721B, 0x862D, 0x9E1E, 0x524C, /* 0xB0 */
+ 0x8FA3, 0x5D50, 0x64E5, 0x652C, 0x6B16, 0x6FEB, 0x7C43, 0x7E9C, /* 0xB0 */
+ 0x85CD, 0x8964, 0x89BD, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717, /* 0xC0 */
+ 0x6D6A, 0x72FC, 0x7405, 0x746F, 0x8782, 0x90DE, 0x4F86, 0x5D0D, /* 0xC0 */
+ 0x5FA0, 0x840A, 0x51B7, 0x63A0, 0x7565, 0x4EAE, 0x5006, 0x5169, /* 0xD0 */
+ 0x51C9, 0x6881, 0x6A11, 0x7CAE, 0x7CB1, 0x7CE7, 0x826F, 0x8AD2, /* 0xD0 */
+ 0x8F1B, 0x91CF, 0x4FB6, 0x5137, 0x52F5, 0x5442, 0x5EEC, 0x616E, /* 0xE0 */
+ 0x623E, 0x65C5, 0x6ADA, 0x6FFE, 0x792A, 0x85DC, 0x8823, 0x95AD, /* 0xE0 */
+ 0x9A62, 0x9A6A, 0x9E97, 0x9ECE, 0x529B, 0x66C6, 0x6B77, 0x701D, /* 0xF0 */
+ 0x792B, 0x8F62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6F23 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7149, 0x7489, 0x7DF4, 0x806F, 0x84EE, 0x8F26, 0x9023, /* 0x30 */
+ 0x934A, 0x51BD, 0x5217, 0x52A3, 0x6D0C, 0x70C8, 0x88C2, 0x5EC9, /* 0x30 */
+ 0x6582, 0x6BAE, 0x6FC2, 0x7C3E, 0x7375, 0x4EE4, 0x4F36, 0x56F9, /* 0x40 */
+ 0xF95F, 0x5CBA, 0x5DBA, 0x601C, 0x73B2, 0x7B2D, 0x7F9A, 0x7FCE, /* 0x40 */
+ 0x8046, 0x901E, 0x9234, 0x96F6, 0x9748, 0x9818, 0x9F61, 0x4F8B, /* 0x50 */
+ 0x6FA7, 0x79AE, 0x91B4, 0x96B7, 0x52DE, 0xF960, 0x6488, 0x64C4, /* 0x50 */
+ 0x6AD3, 0x6F5E, 0x7018, 0x7210, 0x76E7, 0x8001, 0x8606, 0x865C, /* 0x60 */
+ 0x8DEF, 0x8F05, 0x9732, 0x9B6F, 0x9DFA, 0x9E75, 0x788C, 0x797F, /* 0x60 */
+ 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x9E93, 0x8AD6, 0x58DF, 0x5F04, /* 0x70 */
+ 0x6727, 0x7027, 0x74CF, 0x7C60, 0x807E, 0x5121, 0x7028, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x7262, 0x78CA, 0x8CC2, 0x8CDA, 0x8CF4, 0x96F7, 0x4E86, /* 0x90 */
+ 0x50DA, 0x5BEE, 0x5ED6, 0x6599, 0x71CE, 0x7642, 0x77AD, 0x804A, /* 0x90 */
+ 0x84FC, 0x907C, 0x9B27, 0x9F8D, 0x58D8, 0x5A41, 0x5C62, 0x6A13, /* 0xA0 */
+ 0x6DDA, 0x6F0F, 0x763B, 0x7D2F, 0x7E37, 0x851E, 0x8938, 0x93E4, /* 0xA0 */
+ 0x964B, 0x5289, 0x65D2, 0x67F3, 0x69B4, 0x6D41, 0x6E9C, 0x700F, /* 0xB0 */
+ 0x7409, 0x7460, 0x7559, 0x7624, 0x786B, 0x8B2C, 0x985E, 0x516D, /* 0xB0 */
+ 0x622E, 0x9678, 0x4F96, 0x502B, 0x5D19, 0x6DEA, 0x7DB8, 0x8F2A, /* 0xC0 */
+ 0x5F8B, 0x6144, 0x6817, 0xF961, 0x9686, 0x52D2, 0x808B, 0x51DC, /* 0xC0 */
+ 0x51CC, 0x695E, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x4FDA, 0x5229, /* 0xD0 */
+ 0x5398, 0x540F, 0x550E, 0x5C65, 0x60A7, 0x674E, 0x68A8, 0x6D6C, /* 0xD0 */
+ 0x7281, 0x72F8, 0x7406, 0x7483, 0xF962, 0x75E2, 0x7C6C, 0x7F79, /* 0xE0 */
+ 0x7FB8, 0x8389, 0x88CF, 0x88E1, 0x91CC, 0x91D0, 0x96E2, 0x9BC9, /* 0xE0 */
+ 0x541D, 0x6F7E, 0x71D0, 0x7498, 0x85FA, 0x8EAA, 0x96A3, 0x9C57, /* 0xF0 */
+ 0x9E9F, 0x6797, 0x6DCB, 0x7433, 0x81E8, 0x9716, 0x782C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7ACB, 0x7B20, 0x7C92, 0x6469, 0x746A, 0x75F2, 0x78BC, /* 0x30 */
+ 0x78E8, 0x99AC, 0x9B54, 0x9EBB, 0x5BDE, 0x5E55, 0x6F20, 0x819C, /* 0x30 */
+ 0x83AB, 0x9088, 0x4E07, 0x534D, 0x5A29, 0x5DD2, 0x5F4E, 0x6162, /* 0x40 */
+ 0x633D, 0x6669, 0x66FC, 0x6EFF, 0x6F2B, 0x7063, 0x779E, 0x842C, /* 0x40 */
+ 0x8513, 0x883B, 0x8F13, 0x9945, 0x9C3B, 0x551C, 0x62B9, 0x672B, /* 0x50 */
+ 0x6CAB, 0x8309, 0x896A, 0x977A, 0x4EA1, 0x5984, 0x5FD8, 0x5FD9, /* 0x50 */
+ 0x671B, 0x7DB2, 0x7F54, 0x8292, 0x832B, 0x83BD, 0x8F1E, 0x9099, /* 0x60 */
+ 0x57CB, 0x59B9, 0x5A92, 0x5BD0, 0x6627, 0x679A, 0x6885, 0x6BCF, /* 0x60 */
+ 0x7164, 0x7F75, 0x8CB7, 0x8CE3, 0x9081, 0x9B45, 0x8108, 0x8C8A, /* 0x70 */
+ 0x964C, 0x9A40, 0x9EA5, 0x5B5F, 0x6C13, 0x731B, 0x76F2, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x76DF, 0x840C, 0x51AA, 0x8993, 0x514D, 0x5195, 0x52C9, /* 0x90 */
+ 0x68C9, 0x6C94, 0x7704, 0x7720, 0x7DBF, 0x7DEC, 0x9762, 0x9EB5, /* 0x90 */
+ 0x6EC5, 0x8511, 0x51A5, 0x540D, 0x547D, 0x660E, 0x669D, 0x6927, /* 0xA0 */
+ 0x6E9F, 0x76BF, 0x7791, 0x8317, 0x84C2, 0x879F, 0x9169, 0x9298, /* 0xA0 */
+ 0x9CF4, 0x8882, 0x4FAE, 0x5192, 0x52DF, 0x59C6, 0x5E3D, 0x6155, /* 0xB0 */
+ 0x6478, 0x6479, 0x66AE, 0x67D0, 0x6A21, 0x6BCD, 0x6BDB, 0x725F, /* 0xB0 */
+ 0x7261, 0x7441, 0x7738, 0x77DB, 0x8017, 0x82BC, 0x8305, 0x8B00, /* 0xC0 */
+ 0x8B28, 0x8C8C, 0x6728, 0x6C90, 0x7267, 0x76EE, 0x7766, 0x7A46, /* 0xC0 */
+ 0x9DA9, 0x6B7F, 0x6C92, 0x5922, 0x6726, 0x8499, 0x536F, 0x5893, /* 0xD0 */
+ 0x5999, 0x5EDF, 0x63CF, 0x6634, 0x6773, 0x6E3A, 0x732B, 0x7AD7, /* 0xD0 */
+ 0x82D7, 0x9328, 0x52D9, 0x5DEB, 0x61AE, 0x61CB, 0x620A, 0x62C7, /* 0xE0 */
+ 0x64AB, 0x65E0, 0x6959, 0x6B66, 0x6BCB, 0x7121, 0x73F7, 0x755D, /* 0xE0 */
+ 0x7E46, 0x821E, 0x8302, 0x856A, 0x8AA3, 0x8CBF, 0x9727, 0x9D61, /* 0xF0 */
+ 0x58A8, 0x9ED8, 0x5011, 0x520E, 0x543B, 0x554F, 0x6587 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6C76, 0x7D0A, 0x7D0B, 0x805E, 0x868A, 0x9580, 0x96EF, /* 0x30 */
+ 0x52FF, 0x6C95, 0x7269, 0x5473, 0x5A9A, 0x5C3E, 0x5D4B, 0x5F4C, /* 0x30 */
+ 0x5FAE, 0x672A, 0x68B6, 0x6963, 0x6E3C, 0x6E44, 0x7709, 0x7C73, /* 0x40 */
+ 0x7F8E, 0x8587, 0x8B0E, 0x8FF7, 0x9761, 0x9EF4, 0x5CB7, 0x60B6, /* 0x40 */
+ 0x610D, 0x61AB, 0x654F, 0x65FB, 0x65FC, 0x6C11, 0x6CEF, 0x739F, /* 0x50 */
+ 0x73C9, 0x7DE1, 0x9594, 0x5BC6, 0x871C, 0x8B10, 0x525D, 0x535A, /* 0x50 */
+ 0x62CD, 0x640F, 0x64B2, 0x6734, 0x6A38, 0x6CCA, 0x73C0, 0x749E, /* 0x60 */
+ 0x7B94, 0x7C95, 0x7E1B, 0x818A, 0x8236, 0x8584, 0x8FEB, 0x96F9, /* 0x60 */
+ 0x99C1, 0x4F34, 0x534A, 0x53CD, 0x53DB, 0x62CC, 0x642C, 0x6500, /* 0x70 */
+ 0x6591, 0x69C3, 0x6CEE, 0x6F58, 0x73ED, 0x7554, 0x7622, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x76E4, 0x76FC, 0x78D0, 0x78FB, 0x792C, 0x7D46, 0x822C, /* 0x90 */
+ 0x87E0, 0x8FD4, 0x9812, 0x98EF, 0x52C3, 0x62D4, 0x64A5, 0x6E24, /* 0x90 */
+ 0x6F51, 0x767C, 0x8DCB, 0x91B1, 0x9262, 0x9AEE, 0x9B43, 0x5023, /* 0xA0 */
+ 0x508D, 0x574A, 0x59A8, 0x5C28, 0x5E47, 0x5F77, 0x623F, 0x653E, /* 0xA0 */
+ 0x65B9, 0x65C1, 0x6609, 0x678B, 0x699C, 0x6EC2, 0x78C5, 0x7D21, /* 0xB0 */
+ 0x80AA, 0x8180, 0x822B, 0x82B3, 0x84A1, 0x868C, 0x8A2A, 0x8B17, /* 0xB0 */
+ 0x90A6, 0x9632, 0x9F90, 0x500D, 0x4FF3, 0xF963, 0x57F9, 0x5F98, /* 0xC0 */
+ 0x62DC, 0x6392, 0x676F, 0x6E43, 0x7119, 0x76C3, 0x80CC, 0x80DA, /* 0xC0 */
+ 0x88F4, 0x88F5, 0x8919, 0x8CE0, 0x8F29, 0x914D, 0x966A, 0x4F2F, /* 0xD0 */
+ 0x4F70, 0x5E1B, 0x67CF, 0x6822, 0x767D, 0x767E, 0x9B44, 0x5E61, /* 0xD0 */
+ 0x6A0A, 0x7169, 0x71D4, 0x756A, 0xF964, 0x7E41, 0x8543, 0x85E9, /* 0xE0 */
+ 0x98DC, 0x4F10, 0x7B4F, 0x7F70, 0x95A5, 0x51E1, 0x5E06, 0x68B5, /* 0xE0 */
+ 0x6C3E, 0x6C4E, 0x6CDB, 0x72AF, 0x7BC4, 0x8303, 0x6CD5, 0x743A, /* 0xF0 */
+ 0x50FB, 0x5288, 0x58C1, 0x64D8, 0x6A97, 0x74A7, 0x7656 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_E9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x78A7, 0x8617, 0x95E2, 0x9739, 0xF965, 0x535E, 0x5F01, /* 0x30 */
+ 0x8B8A, 0x8FA8, 0x8FAF, 0x908A, 0x5225, 0x77A5, 0x9C49, 0x9F08, /* 0x30 */
+ 0x4E19, 0x5002, 0x5175, 0x5C5B, 0x5E77, 0x661E, 0x663A, 0x67C4, /* 0x40 */
+ 0x68C5, 0x70B3, 0x7501, 0x75C5, 0x79C9, 0x7ADD, 0x8F27, 0x9920, /* 0x40 */
+ 0x9A08, 0x4FDD, 0x5821, 0x5831, 0x5BF6, 0x666E, 0x6B65, 0x6D11, /* 0x50 */
+ 0x6E7A, 0x6F7D, 0x73E4, 0x752B, 0x83E9, 0x88DC, 0x8913, 0x8B5C, /* 0x50 */
+ 0x8F14, 0x4F0F, 0x50D5, 0x5310, 0x535C, 0x5B93, 0x5FA9, 0x670D, /* 0x60 */
+ 0x798F, 0x8179, 0x832F, 0x8514, 0x8907, 0x8986, 0x8F39, 0x8F3B, /* 0x60 */
+ 0x99A5, 0x9C12, 0x672C, 0x4E76, 0x4FF8, 0x5949, 0x5C01, 0x5CEF, /* 0x70 */
+ 0x5CF0, 0x6367, 0x68D2, 0x70FD, 0x71A2, 0x742B, 0x7E2B, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x84EC, 0x8702, 0x9022, 0x92D2, 0x9CF3, 0x4E0D, 0x4ED8, /* 0x90 */
+ 0x4FEF, 0x5085, 0x5256, 0x526F, 0x5426, 0x5490, 0x57E0, 0x592B, /* 0x90 */
+ 0x5A66, 0x5B5A, 0x5B75, 0x5BCC, 0x5E9C, 0xF966, 0x6276, 0x6577, /* 0xA0 */
+ 0x65A7, 0x6D6E, 0x6EA5, 0x7236, 0x7B26, 0x7C3F, 0x7F36, 0x8150, /* 0xA0 */
+ 0x8151, 0x819A, 0x8240, 0x8299, 0x83A9, 0x8A03, 0x8CA0, 0x8CE6, /* 0xB0 */
+ 0x8CFB, 0x8D74, 0x8DBA, 0x90E8, 0x91DC, 0x961C, 0x9644, 0x99D9, /* 0xB0 */
+ 0x9CE7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58B3, 0x5954, 0x596E, /* 0xC0 */
+ 0x5FFF, 0x61A4, 0x626E, 0x6610, 0x6C7E, 0x711A, 0x76C6, 0x7C89, /* 0xC0 */
+ 0x7CDE, 0x7D1B, 0x82AC, 0x8CC1, 0x96F0, 0xF967, 0x4F5B, 0x5F17, /* 0xD0 */
+ 0x5F7F, 0x62C2, 0x5D29, 0x670B, 0x68DA, 0x787C, 0x7E43, 0x9D6C, /* 0xD0 */
+ 0x4E15, 0x5099, 0x5315, 0x532A, 0x5351, 0x5983, 0x5A62, 0x5E87, /* 0xE0 */
+ 0x60B2, 0x618A, 0x6249, 0x6279, 0x6590, 0x6787, 0x69A7, 0x6BD4, /* 0xE0 */
+ 0x6BD6, 0x6BD7, 0x6BD8, 0x6CB8, 0xF968, 0x7435, 0x75FA, 0x7812, /* 0xF0 */
+ 0x7891, 0x79D5, 0x79D8, 0x7C83, 0x7DCB, 0x7FE1, 0x80A5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_EA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x813E, 0x81C2, 0x83F2, 0x871A, 0x88E8, 0x8AB9, 0x8B6C, /* 0x30 */
+ 0x8CBB, 0x9119, 0x975E, 0x98DB, 0x9F3B, 0x56AC, 0x5B2A, 0x5F6C, /* 0x30 */
+ 0x658C, 0x6AB3, 0x6BAF, 0x6D5C, 0x6FF1, 0x7015, 0x725D, 0x73AD, /* 0x40 */
+ 0x8CA7, 0x8CD3, 0x983B, 0x6191, 0x6C37, 0x8058, 0x9A01, 0x4E4D, /* 0x40 */
+ 0x4E8B, 0x4E9B, 0x4ED5, 0x4F3A, 0x4F3C, 0x4F7F, 0x4FDF, 0x50FF, /* 0x50 */
+ 0x53F2, 0x53F8, 0x5506, 0x55E3, 0x56DB, 0x58EB, 0x5962, 0x5A11, /* 0x50 */
+ 0x5BEB, 0x5BFA, 0x5C04, 0x5DF3, 0x5E2B, 0x5F99, 0x601D, 0x6368, /* 0x60 */
+ 0x659C, 0x65AF, 0x67F6, 0x67FB, 0x68AD, 0x6B7B, 0x6C99, 0x6CD7, /* 0x60 */
+ 0x6E23, 0x7009, 0x7345, 0x7802, 0x793E, 0x7940, 0x7960, 0x79C1, /* 0x70 */
+ 0x7BE9, 0x7D17, 0x7D72, 0x8086, 0x820D, 0x838E, 0x84D1, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x86C7, 0x88DF, 0x8A50, 0x8A5E, 0x8B1D, 0x8CDC, 0x8D66, /* 0x90 */
+ 0x8FAD, 0x90AA, 0x98FC, 0x99DF, 0x9E9D, 0x524A, 0xF969, 0x6714, /* 0x90 */
+ 0xF96A, 0x5098, 0x522A, 0x5C71, 0x6563, 0x6C55, 0x73CA, 0x7523, /* 0xA0 */
+ 0x759D, 0x7B97, 0x849C, 0x9178, 0x9730, 0x4E77, 0x6492, 0x6BBA, /* 0xA0 */
+ 0x715E, 0x85A9, 0x4E09, 0xF96B, 0x6749, 0x68EE, 0x6E17, 0x829F, /* 0xB0 */
+ 0x8518, 0x886B, 0x63F7, 0x6F81, 0x9212, 0x98AF, 0x4E0A, 0x50B7, /* 0xB0 */
+ 0x50CF, 0x511F, 0x5546, 0x55AA, 0x5617, 0x5B40, 0x5C19, 0x5CE0, /* 0xC0 */
+ 0x5E38, 0x5E8A, 0x5EA0, 0x5EC2, 0x60F3, 0x6851, 0x6A61, 0x6E58, /* 0xC0 */
+ 0x723D, 0x7240, 0x72C0, 0x76F8, 0x7965, 0x7BB1, 0x7FD4, 0x88F3, /* 0xD0 */
+ 0x89F4, 0x8A73, 0x8C61, 0x8CDE, 0x971C, 0x585E, 0x74BD, 0x8CFD, /* 0xD0 */
+ 0x55C7, 0xF96C, 0x7A61, 0x7D22, 0x8272, 0x7272, 0x751F, 0x7525, /* 0xE0 */
+ 0xF96D, 0x7B19, 0x5885, 0x58FB, 0x5DBC, 0x5E8F, 0x5EB6, 0x5F90, /* 0xE0 */
+ 0x6055, 0x6292, 0x637F, 0x654D, 0x6691, 0x66D9, 0x66F8, 0x6816, /* 0xF0 */
+ 0x68F2, 0x7280, 0x745E, 0x7B6E, 0x7D6E, 0x7DD6, 0x7F72 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_EB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x80E5, 0x8212, 0x85AF, 0x897F, 0x8A93, 0x901D, 0x92E4, /* 0x30 */
+ 0x9ECD, 0x9F20, 0x5915, 0x596D, 0x5E2D, 0x60DC, 0x6614, 0x6673, /* 0x30 */
+ 0x6790, 0x6C50, 0x6DC5, 0x6F5F, 0x77F3, 0x78A9, 0x84C6, 0x91CB, /* 0x40 */
+ 0x932B, 0x4ED9, 0x50CA, 0x5148, 0x5584, 0x5B0B, 0x5BA3, 0x6247, /* 0x40 */
+ 0x657E, 0x65CB, 0x6E32, 0x717D, 0x7401, 0x7444, 0x7487, 0x74BF, /* 0x50 */
+ 0x766C, 0x79AA, 0x7DDA, 0x7E55, 0x7FA8, 0x817A, 0x81B3, 0x8239, /* 0x50 */
+ 0x861A, 0x87EC, 0x8A75, 0x8DE3, 0x9078, 0x9291, 0x9425, 0x994D, /* 0x60 */
+ 0x9BAE, 0x5368, 0x5C51, 0x6954, 0x6CC4, 0x6D29, 0x6E2B, 0x820C, /* 0x60 */
+ 0x859B, 0x893B, 0x8A2D, 0x8AAA, 0x96EA, 0x9F67, 0x5261, 0x66B9, /* 0x70 */
+ 0x6BB2, 0x7E96, 0x87FE, 0x8D0D, 0x9583, 0x965D, 0x651D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x6D89, 0x71EE, 0xF96E, 0x57CE, 0x59D3, 0x5BAC, 0x6027, /* 0x90 */
+ 0x60FA, 0x6210, 0x661F, 0x665F, 0x7329, 0x73F9, 0x76DB, 0x7701, /* 0x90 */
+ 0x7B6C, 0x8056, 0x8072, 0x8165, 0x8AA0, 0x9192, 0x4E16, 0x52E2, /* 0xA0 */
+ 0x6B72, 0x6D17, 0x7A05, 0x7B39, 0x7D30, 0xF96F, 0x8CB0, 0x53EC, /* 0xA0 */
+ 0x562F, 0x5851, 0x5BB5, 0x5C0F, 0x5C11, 0x5DE2, 0x6240, 0x6383, /* 0xB0 */
+ 0x6414, 0x662D, 0x68B3, 0x6CBC, 0x6D88, 0x6EAF, 0x701F, 0x70A4, /* 0xB0 */
+ 0x71D2, 0x7526, 0x758F, 0x758E, 0x7619, 0x7B11, 0x7BE0, 0x7C2B, /* 0xC0 */
+ 0x7D20, 0x7D39, 0x852C, 0x856D, 0x8607, 0x8A34, 0x900D, 0x9061, /* 0xC0 */
+ 0x90B5, 0x92B7, 0x97F6, 0x9A37, 0x4FD7, 0x5C6C, 0x675F, 0x6D91, /* 0xD0 */
+ 0x7C9F, 0x7E8C, 0x8B16, 0x8D16, 0x901F, 0x5B6B, 0x5DFD, 0x640D, /* 0xD0 */
+ 0x84C0, 0x905C, 0x98E1, 0x7387, 0x5B8B, 0x609A, 0x677E, 0x6DDE, /* 0xE0 */
+ 0x8A1F, 0x8AA6, 0x9001, 0x980C, 0x5237, 0xF970, 0x7051, 0x788E, /* 0xE0 */
+ 0x9396, 0x8870, 0x91D7, 0x4FEE, 0x53D7, 0x55FD, 0x56DA, 0x5782, /* 0xF0 */
+ 0x58FD, 0x5AC2, 0x5B88, 0x5CAB, 0x5CC0, 0x5E25, 0x6101 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_EC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x620D, 0x624B, 0x6388, 0x641C, 0x6536, 0x6578, 0x6A39, /* 0x30 */
+ 0x6B8A, 0x6C34, 0x6D19, 0x6F31, 0x71E7, 0x72E9, 0x7378, 0x7407, /* 0x30 */
+ 0x74B2, 0x7626, 0x7761, 0x79C0, 0x7A57, 0x7AEA, 0x7CB9, 0x7D8F, /* 0x40 */
+ 0x7DAC, 0x7E61, 0x7F9E, 0x8129, 0x8331, 0x8490, 0x84DA, 0x85EA, /* 0x40 */
+ 0x8896, 0x8AB0, 0x8B90, 0x8F38, 0x9042, 0x9083, 0x916C, 0x9296, /* 0x50 */
+ 0x92B9, 0x968B, 0x96A7, 0x96A8, 0x96D6, 0x9700, 0x9808, 0x9996, /* 0x50 */
+ 0x9AD3, 0x9B1A, 0x53D4, 0x587E, 0x5919, 0x5B70, 0x5BBF, 0x6DD1, /* 0x60 */
+ 0x6F5A, 0x719F, 0x7421, 0x74B9, 0x8085, 0x83FD, 0x5DE1, 0x5F87, /* 0x60 */
+ 0x5FAA, 0x6042, 0x65EC, 0x6812, 0x696F, 0x6A53, 0x6B89, 0x6D35, /* 0x70 */
+ 0x6DF3, 0x73E3, 0x76FE, 0x77AC, 0x7B4D, 0x7D14, 0x8123, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x821C, 0x8340, 0x84F4, 0x8563, 0x8A62, 0x8AC4, 0x9187, /* 0x90 */
+ 0x931E, 0x9806, 0x99B4, 0x620C, 0x8853, 0x8FF0, 0x9265, 0x5D07, /* 0x90 */
+ 0x5D27, 0x5D69, 0x745F, 0x819D, 0x8768, 0x6FD5, 0x62FE, 0x7FD2, /* 0xA0 */
+ 0x8936, 0x8972, 0x4E1E, 0x4E58, 0x50E7, 0x52DD, 0x5347, 0x627F, /* 0xA0 */
+ 0x6607, 0x7E69, 0x8805, 0x965E, 0x4F8D, 0x5319, 0x5636, 0x59CB, /* 0xB0 */
+ 0x5AA4, 0x5C38, 0x5C4E, 0x5C4D, 0x5E02, 0x5F11, 0x6043, 0x65BD, /* 0xB0 */
+ 0x662F, 0x6642, 0x67BE, 0x67F4, 0x731C, 0x77E2, 0x793A, 0x7FC5, /* 0xC0 */
+ 0x8494, 0x84CD, 0x8996, 0x8A66, 0x8A69, 0x8AE1, 0x8C55, 0x8C7A, /* 0xC0 */
+ 0x57F4, 0x5BD4, 0x5F0F, 0x606F, 0x62ED, 0x690D, 0x6B96, 0x6E5C, /* 0xD0 */
+ 0x7184, 0x7BD2, 0x8755, 0x8B58, 0x8EFE, 0x98DF, 0x98FE, 0x4F38, /* 0xD0 */
+ 0x4F81, 0x4FE1, 0x547B, 0x5A20, 0x5BB8, 0x613C, 0x65B0, 0x6668, /* 0xE0 */
+ 0x71FC, 0x7533, 0x795E, 0x7D33, 0x814E, 0x81E3, 0x8398, 0x85AA, /* 0xE0 */
+ 0x85CE, 0x8703, 0x8A0A, 0x8EAB, 0x8F9B, 0xF971, 0x8FC5, 0x5931, /* 0xF0 */
+ 0x5BA4, 0x5BE6, 0x6089, 0x5BE9, 0x5C0B, 0x5FC3, 0x6C81 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_ED[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF972, 0x6DF1, 0x700B, 0x751A, 0x82AF, 0x8AF6, 0x4EC0, /* 0x30 */
+ 0x5341, 0xF973, 0x96D9, 0x6C0F, 0x4E9E, 0x4FC4, 0x5152, 0x555E, /* 0x30 */
+ 0x5A25, 0x5CE8, 0x6211, 0x7259, 0x82BD, 0x83AA, 0x86FE, 0x8859, /* 0x40 */
+ 0x8A1D, 0x963F, 0x96C5, 0x9913, 0x9D09, 0x9D5D, 0x580A, 0x5CB3, /* 0x40 */
+ 0x5DBD, 0x5E44, 0x60E1, 0x6115, 0x63E1, 0x6A02, 0x6E25, 0x9102, /* 0x50 */
+ 0x9354, 0x984E, 0x9C10, 0x9F77, 0x5B89, 0x5CB8, 0x6309, 0x664F, /* 0x50 */
+ 0x6848, 0x773C, 0x96C1, 0x978D, 0x9854, 0x9B9F, 0x65A1, 0x8B01, /* 0x60 */
+ 0x8ECB, 0x95BC, 0x5535, 0x5CA9, 0x5DD6, 0x5EB5, 0x6697, 0x764C, /* 0x60 */
+ 0x83F4, 0x95C7, 0x58D3, 0x62BC, 0x72CE, 0x9D28, 0x4EF0, 0x592E, /* 0x70 */
+ 0x600F, 0x663B, 0x6B83, 0x79E7, 0x9D26, 0x5393, 0x54C0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x57C3, 0x5D16, 0x611B, 0x66D6, 0x6DAF, 0x788D, 0x827E, /* 0x90 */
+ 0x9698, 0x9744, 0x5384, 0x627C, 0x6396, 0x6DB2, 0x7E0A, 0x814B, /* 0x90 */
+ 0x984D, 0x6AFB, 0x7F4C, 0x9DAF, 0x9E1A, 0x4E5F, 0x503B, 0x51B6, /* 0xA0 */
+ 0x591C, 0x60F9, 0x63F6, 0x6930, 0x723A, 0x8036, 0xF974, 0x91CE, /* 0xA0 */
+ 0x5F31, 0xF975, 0xF976, 0x7D04, 0x82E5, 0x846F, 0x84BB, 0x85E5, /* 0xB0 */
+ 0x8E8D, 0xF977, 0x4F6F, 0xF978, 0xF979, 0x58E4, 0x5B43, 0x6059, /* 0xB0 */
+ 0x63DA, 0x6518, 0x656D, 0x6698, 0xF97A, 0x694A, 0x6A23, 0x6D0B, /* 0xC0 */
+ 0x7001, 0x716C, 0x75D2, 0x760D, 0x79B3, 0x7A70, 0xF97B, 0x7F8A, /* 0xC0 */
+ 0xF97C, 0x8944, 0xF97D, 0x8B93, 0x91C0, 0x967D, 0xF97E, 0x990A, /* 0xD0 */
+ 0x5704, 0x5FA1, 0x65BC, 0x6F01, 0x7600, 0x79A6, 0x8A9E, 0x99AD, /* 0xD0 */
+ 0x9B5A, 0x9F6C, 0x5104, 0x61B6, 0x6291, 0x6A8D, 0x81C6, 0x5043, /* 0xE0 */
+ 0x5830, 0x5F66, 0x7109, 0x8A00, 0x8AFA, 0x5B7C, 0x8616, 0x4FFA, /* 0xE0 */
+ 0x513C, 0x56B4, 0x5944, 0x63A9, 0x6DF9, 0x5DAA, 0x696D, 0x5186, /* 0xF0 */
+ 0x4E88, 0x4F59, 0xF97F, 0xF980, 0xF981, 0x5982, 0xF982 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_EE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF983, 0x6B5F, 0x6C5D, 0xF984, 0x74B5, 0x7916, 0xF985, /* 0x30 */
+ 0x8207, 0x8245, 0x8339, 0x8F3F, 0x8F5D, 0xF986, 0x9918, 0xF987, /* 0x30 */
+ 0xF988, 0xF989, 0x4EA6, 0xF98A, 0x57DF, 0x5F79, 0x6613, 0xF98B, /* 0x40 */
+ 0xF98C, 0x75AB, 0x7E79, 0x8B6F, 0xF98D, 0x9006, 0x9A5B, 0x56A5, /* 0x40 */
+ 0x5827, 0x59F8, 0x5A1F, 0x5BB4, 0xF98E, 0x5EF6, 0xF98F, 0xF990, /* 0x50 */
+ 0x6350, 0x633B, 0xF991, 0x693D, 0x6C87, 0x6CBF, 0x6D8E, 0x6D93, /* 0x50 */
+ 0x6DF5, 0x6F14, 0xF992, 0x70DF, 0x7136, 0x7159, 0xF993, 0x71C3, /* 0x60 */
+ 0x71D5, 0xF994, 0x784F, 0x786F, 0xF995, 0x7B75, 0x7DE3, 0xF996, /* 0x60 */
+ 0x7E2F, 0xF997, 0x884D, 0x8EDF, 0xF998, 0xF999, 0xF99A, 0x925B, /* 0x70 */
+ 0xF99B, 0x9CF6, 0xF99C, 0xF99D, 0xF99E, 0x6085, 0x6D85, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF99F, 0x71B1, 0xF9A0, 0xF9A1, 0x95B1, 0x53AD, 0xF9A2, /* 0x90 */
+ 0xF9A3, 0xF9A4, 0x67D3, 0xF9A5, 0x708E, 0x7130, 0x7430, 0x8276, /* 0x90 */
+ 0x82D2, 0xF9A6, 0x95BB, 0x9AE5, 0x9E7D, 0x66C4, 0xF9A7, 0x71C1, /* 0xA0 */
+ 0x8449, 0xF9A8, 0xF9A9, 0x584B, 0xF9AA, 0xF9AB, 0x5DB8, 0x5F71, /* 0xA0 */
+ 0xF9AC, 0x6620, 0x668E, 0x6979, 0x69AE, 0x6C38, 0x6CF3, 0x6E36, /* 0xB0 */
+ 0x6F41, 0x6FDA, 0x701B, 0x702F, 0x7150, 0x71DF, 0x7370, 0xF9AD, /* 0xB0 */
+ 0x745B, 0xF9AE, 0x74D4, 0x76C8, 0x7A4E, 0x7E93, 0xF9AF, 0xF9B0, /* 0xC0 */
+ 0x82F1, 0x8A60, 0x8FCE, 0xF9B1, 0x9348, 0xF9B2, 0x9719, 0xF9B3, /* 0xC0 */
+ 0xF9B4, 0x4E42, 0x502A, 0xF9B5, 0x5208, 0x53E1, 0x66F3, 0x6C6D, /* 0xD0 */
+ 0x6FCA, 0x730A, 0x777F, 0x7A62, 0x82AE, 0x85DD, 0x8602, 0xF9B6, /* 0xD0 */
+ 0x88D4, 0x8A63, 0x8B7D, 0x8C6B, 0xF9B7, 0x92B3, 0xF9B8, 0x9713, /* 0xE0 */
+ 0x9810, 0x4E94, 0x4F0D, 0x4FC9, 0x50B2, 0x5348, 0x543E, 0x5433, /* 0xE0 */
+ 0x55DA, 0x5862, 0x58BA, 0x5967, 0x5A1B, 0x5BE4, 0x609F, 0xF9B9, /* 0xF0 */
+ 0x61CA, 0x6556, 0x65FF, 0x6664, 0x68A7, 0x6C5A, 0x6FB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_EF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x70CF, 0x71AC, 0x7352, 0x7B7D, 0x8708, 0x8AA4, 0x9C32, /* 0x30 */
+ 0x9F07, 0x5C4B, 0x6C83, 0x7344, 0x7389, 0x923A, 0x6EAB, 0x7465, /* 0x30 */
+ 0x761F, 0x7A69, 0x7E15, 0x860A, 0x5140, 0x58C5, 0x64C1, 0x74EE, /* 0x40 */
+ 0x7515, 0x7670, 0x7FC1, 0x9095, 0x96CD, 0x9954, 0x6E26, 0x74E6, /* 0x40 */
+ 0x7AA9, 0x7AAA, 0x81E5, 0x86D9, 0x8778, 0x8A1B, 0x5A49, 0x5B8C, /* 0x50 */
+ 0x5B9B, 0x68A1, 0x6900, 0x6D63, 0x73A9, 0x7413, 0x742C, 0x7897, /* 0x50 */
+ 0x7DE9, 0x7FEB, 0x8118, 0x8155, 0x839E, 0x8C4C, 0x962E, 0x9811, /* 0x60 */
+ 0x66F0, 0x5F80, 0x65FA, 0x6789, 0x6C6A, 0x738B, 0x502D, 0x5A03, /* 0x60 */
+ 0x6B6A, 0x77EE, 0x5916, 0x5D6C, 0x5DCD, 0x7325, 0x754F, 0xF9BA, /* 0x70 */
+ 0xF9BB, 0x50E5, 0x51F9, 0x582F, 0x592D, 0x5996, 0x59DA, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x5BE5, 0xF9BC, 0xF9BD, 0x5DA2, 0x62D7, 0x6416, 0x6493, /* 0x90 */
+ 0x64FE, 0xF9BE, 0x66DC, 0xF9BF, 0x6A48, 0xF9C0, 0x71FF, 0x7464, /* 0x90 */
+ 0xF9C1, 0x7A88, 0x7AAF, 0x7E47, 0x7E5E, 0x8000, 0x8170, 0xF9C2, /* 0xA0 */
+ 0x87EF, 0x8981, 0x8B20, 0x9059, 0xF9C3, 0x9080, 0x9952, 0x617E, /* 0xA0 */
+ 0x6B32, 0x6D74, 0x7E1F, 0x8925, 0x8FB1, 0x4FD1, 0x50AD, 0x5197, /* 0xB0 */
+ 0x52C7, 0x57C7, 0x5889, 0x5BB9, 0x5EB8, 0x6142, 0x6995, 0x6D8C, /* 0xB0 */
+ 0x6E67, 0x6EB6, 0x7194, 0x7462, 0x7528, 0x752C, 0x8073, 0x8338, /* 0xC0 */
+ 0x84C9, 0x8E0A, 0x9394, 0x93DE, 0xF9C4, 0x4E8E, 0x4F51, 0x5076, /* 0xC0 */
+ 0x512A, 0x53C8, 0x53CB, 0x53F3, 0x5B87, 0x5BD3, 0x5C24, 0x611A, /* 0xD0 */
+ 0x6182, 0x65F4, 0x725B, 0x7397, 0x7440, 0x76C2, 0x7950, 0x7991, /* 0xD0 */
+ 0x79B9, 0x7D06, 0x7FBD, 0x828B, 0x85D5, 0x865E, 0x8FC2, 0x9047, /* 0xE0 */
+ 0x90F5, 0x91EA, 0x9685, 0x96E8, 0x96E9, 0x52D6, 0x5F67, 0x65ED, /* 0xE0 */
+ 0x6631, 0x682F, 0x715C, 0x7A36, 0x90C1, 0x980A, 0x4E91, 0xF9C5, /* 0xF0 */
+ 0x6A52, 0x6B9E, 0x6F90, 0x7189, 0x8018, 0x82B8, 0x8553 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x904B, 0x9695, 0x96F2, 0x97FB, 0x851A, 0x9B31, 0x4E90, /* 0x30 */
+ 0x718A, 0x96C4, 0x5143, 0x539F, 0x54E1, 0x5713, 0x5712, 0x57A3, /* 0x30 */
+ 0x5A9B, 0x5AC4, 0x5BC3, 0x6028, 0x613F, 0x63F4, 0x6C85, 0x6D39, /* 0x40 */
+ 0x6E72, 0x6E90, 0x7230, 0x733F, 0x7457, 0x82D1, 0x8881, 0x8F45, /* 0x40 */
+ 0x9060, 0xF9C6, 0x9662, 0x9858, 0x9D1B, 0x6708, 0x8D8A, 0x925E, /* 0x50 */
+ 0x4F4D, 0x5049, 0x50DE, 0x5371, 0x570D, 0x59D4, 0x5A01, 0x5C09, /* 0x50 */
+ 0x6170, 0x6690, 0x6E2D, 0x7232, 0x744B, 0x7DEF, 0x80C3, 0x840E, /* 0x60 */
+ 0x8466, 0x853F, 0x875F, 0x885B, 0x8918, 0x8B02, 0x9055, 0x97CB, /* 0x60 */
+ 0x9B4F, 0x4E73, 0x4F91, 0x5112, 0x516A, 0xF9C7, 0x552F, 0x55A9, /* 0x70 */
+ 0x5B7A, 0x5BA5, 0x5E7C, 0x5E7D, 0x5EBE, 0x60A0, 0x60DF, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x6108, 0x6109, 0x63C4, 0x6538, 0x6709, 0xF9C8, 0x67D4, /* 0x90 */
+ 0x67DA, 0xF9C9, 0x6961, 0x6962, 0x6CB9, 0x6D27, 0xF9CA, 0x6E38, /* 0x90 */
+ 0xF9CB, 0x6FE1, 0x7336, 0x7337, 0xF9CC, 0x745C, 0x7531, 0xF9CD, /* 0xA0 */
+ 0x7652, 0xF9CE, 0xF9CF, 0x7DAD, 0x81FE, 0x8438, 0x88D5, 0x8A98, /* 0xA0 */
+ 0x8ADB, 0x8AED, 0x8E30, 0x8E42, 0x904A, 0x903E, 0x907A, 0x9149, /* 0xB0 */
+ 0x91C9, 0x936E, 0xF9D0, 0xF9D1, 0x5809, 0xF9D2, 0x6BD3, 0x8089, /* 0xB0 */
+ 0x80B2, 0xF9D3, 0xF9D4, 0x5141, 0x596B, 0x5C39, 0xF9D5, 0xF9D6, /* 0xC0 */
+ 0x6F64, 0x73A7, 0x80E4, 0x8D07, 0xF9D7, 0x9217, 0x958F, 0xF9D8, /* 0xC0 */
+ 0xF9D9, 0xF9DA, 0xF9DB, 0x807F, 0x620E, 0x701C, 0x7D68, 0x878D, /* 0xD0 */
+ 0xF9DC, 0x57A0, 0x6069, 0x6147, 0x6BB7, 0x8ABE, 0x9280, 0x96B1, /* 0xD0 */
+ 0x4E59, 0x541F, 0x6DEB, 0x852D, 0x9670, 0x97F3, 0x98EE, 0x63D6, /* 0xE0 */
+ 0x6CE3, 0x9091, 0x51DD, 0x61C9, 0x81BA, 0x9DF9, 0x4F9D, 0x501A, /* 0xE0 */
+ 0x5100, 0x5B9C, 0x610F, 0x61FF, 0x64EC, 0x6905, 0x6BC5, 0x7591, /* 0xF0 */
+ 0x77E3, 0x7FA9, 0x8264, 0x858F, 0x87FB, 0x8863, 0x8ABC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B70, 0x91AB, 0x4E8C, 0x4EE5, 0x4F0A, 0xF9DD, 0xF9DE, /* 0x30 */
+ 0x5937, 0x59E8, 0xF9DF, 0x5DF2, 0x5F1B, 0x5F5B, 0x6021, 0xF9E0, /* 0x30 */
+ 0xF9E1, 0xF9E2, 0xF9E3, 0x723E, 0x73E5, 0xF9E4, 0x7570, 0x75CD, /* 0x40 */
+ 0xF9E5, 0x79FB, 0xF9E6, 0x800C, 0x8033, 0x8084, 0x82E1, 0x8351, /* 0x40 */
+ 0xF9E7, 0xF9E8, 0x8CBD, 0x8CB3, 0x9087, 0xF9E9, 0xF9EA, 0x98F4, /* 0x50 */
+ 0x990C, 0xF9EB, 0xF9EC, 0x7037, 0x76CA, 0x7FCA, 0x7FCC, 0x7FFC, /* 0x50 */
+ 0x8B1A, 0x4EBA, 0x4EC1, 0x5203, 0x5370, 0xF9ED, 0x54BD, 0x56E0, /* 0x60 */
+ 0x59FB, 0x5BC5, 0x5F15, 0x5FCD, 0x6E6E, 0xF9EE, 0xF9EF, 0x7D6A, /* 0x60 */
+ 0x8335, 0xF9F0, 0x8693, 0x8A8D, 0xF9F1, 0x976D, 0x9777, 0xF9F2, /* 0x70 */
+ 0xF9F3, 0x4E00, 0x4F5A, 0x4F7E, 0x58F9, 0x65E5, 0x6EA2, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x9038, 0x93B0, 0x99B9, 0x4EFB, 0x58EC, 0x598A, 0x59D9, /* 0x90 */
+ 0x6041, 0xF9F4, 0xF9F5, 0x7A14, 0xF9F6, 0x834F, 0x8CC3, 0x5165, /* 0x90 */
+ 0x5344, 0xF9F7, 0xF9F8, 0xF9F9, 0x4ECD, 0x5269, 0x5B55, 0x82BF, /* 0xA0 */
+ 0x4ED4, 0x523A, 0x54A8, 0x59C9, 0x59FF, 0x5B50, 0x5B57, 0x5B5C, /* 0xA0 */
+ 0x6063, 0x6148, 0x6ECB, 0x7099, 0x716E, 0x7386, 0x74F7, 0x75B5, /* 0xB0 */
+ 0x78C1, 0x7D2B, 0x8005, 0x81EA, 0x8328, 0x8517, 0x85C9, 0x8AEE, /* 0xB0 */
+ 0x8CC7, 0x96CC, 0x4F5C, 0x52FA, 0x56BC, 0x65AB, 0x6628, 0x707C, /* 0xC0 */
+ 0x70B8, 0x7235, 0x7DBD, 0x828D, 0x914C, 0x96C0, 0x9D72, 0x5B71, /* 0xC0 */
+ 0x68E7, 0x6B98, 0x6F7A, 0x76DE, 0x5C91, 0x66AB, 0x6F5B, 0x7BB4, /* 0xD0 */
+ 0x7C2A, 0x8836, 0x96DC, 0x4E08, 0x4ED7, 0x5320, 0x5834, 0x58BB, /* 0xD0 */
+ 0x58EF, 0x596C, 0x5C07, 0x5E33, 0x5E84, 0x5F35, 0x638C, 0x66B2, /* 0xE0 */
+ 0x6756, 0x6A1F, 0x6AA3, 0x6B0C, 0x6F3F, 0x7246, 0xF9FA, 0x7350, /* 0xE0 */
+ 0x748B, 0x7AE0, 0x7CA7, 0x8178, 0x81DF, 0x81E7, 0x838A, 0x846C, /* 0xF0 */
+ 0x8523, 0x8594, 0x85CF, 0x88DD, 0x8D13, 0x91AC, 0x9577 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x969C, 0x518D, 0x54C9, 0x5728, 0x5BB0, 0x624D, 0x6750, /* 0x30 */
+ 0x683D, 0x6893, 0x6E3D, 0x6ED3, 0x707D, 0x7E21, 0x88C1, 0x8CA1, /* 0x30 */
+ 0x8F09, 0x9F4B, 0x9F4E, 0x722D, 0x7B8F, 0x8ACD, 0x931A, 0x4F47, /* 0x40 */
+ 0x4F4E, 0x5132, 0x5480, 0x59D0, 0x5E95, 0x62B5, 0x6775, 0x696E, /* 0x40 */
+ 0x6A17, 0x6CAE, 0x6E1A, 0x72D9, 0x732A, 0x75BD, 0x7BB8, 0x7D35, /* 0x50 */
+ 0x82E7, 0x83F9, 0x8457, 0x85F7, 0x8A5B, 0x8CAF, 0x8E87, 0x9019, /* 0x50 */
+ 0x90B8, 0x96CE, 0x9F5F, 0x52E3, 0x540A, 0x5AE1, 0x5BC2, 0x6458, /* 0x60 */
+ 0x6575, 0x6EF4, 0x72C4, 0xF9FB, 0x7684, 0x7A4D, 0x7B1B, 0x7C4D, /* 0x60 */
+ 0x7E3E, 0x7FDF, 0x837B, 0x8B2B, 0x8CCA, 0x8D64, 0x8DE1, 0x8E5F, /* 0x70 */
+ 0x8FEA, 0x8FF9, 0x9069, 0x93D1, 0x4F43, 0x4F7A, 0x50B3, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x5168, 0x5178, 0x524D, 0x526A, 0x5861, 0x587C, 0x5960, /* 0x90 */
+ 0x5C08, 0x5C55, 0x5EDB, 0x609B, 0x6230, 0x6813, 0x6BBF, 0x6C08, /* 0x90 */
+ 0x6FB1, 0x714E, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7B4C, /* 0xA0 */
+ 0x7B8B, 0x7BAD, 0x7BC6, 0x7E8F, 0x8A6E, 0x8F3E, 0x8F49, 0x923F, /* 0xA0 */
+ 0x9293, 0x9322, 0x942B, 0x96FB, 0x985A, 0x986B, 0x991E, 0x5207, /* 0xB0 */
+ 0x622A, 0x6298, 0x6D59, 0x7664, 0x7ACA, 0x7BC0, 0x7D76, 0x5360, /* 0xB0 */
+ 0x5CBE, 0x5E97, 0x6F38, 0x70B9, 0x7C98, 0x9711, 0x9B8E, 0x9EDE, /* 0xC0 */
+ 0x63A5, 0x647A, 0x8776, 0x4E01, 0x4E95, 0x4EAD, 0x505C, 0x5075, /* 0xC0 */
+ 0x5448, 0x59C3, 0x5B9A, 0x5E40, 0x5EAD, 0x5EF7, 0x5F81, 0x60C5, /* 0xD0 */
+ 0x633A, 0x653F, 0x6574, 0x65CC, 0x6676, 0x6678, 0x67FE, 0x6968, /* 0xD0 */
+ 0x6A89, 0x6B63, 0x6C40, 0x6DC0, 0x6DE8, 0x6E1F, 0x6E5E, 0x701E, /* 0xE0 */
+ 0x70A1, 0x738E, 0x73FD, 0x753A, 0x775B, 0x7887, 0x798E, 0x7A0B, /* 0xE0 */
+ 0x7A7D, 0x7CBE, 0x7D8E, 0x8247, 0x8A02, 0x8AEA, 0x8C9E, 0x912D, /* 0xF0 */
+ 0x914A, 0x91D8, 0x9266, 0x92CC, 0x9320, 0x9706, 0x9756 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x975C, 0x9802, 0x9F0E, 0x5236, 0x5291, 0x557C, 0x5824, /* 0x30 */
+ 0x5E1D, 0x5F1F, 0x608C, 0x63D0, 0x68AF, 0x6FDF, 0x796D, 0x7B2C, /* 0x30 */
+ 0x81CD, 0x85BA, 0x88FD, 0x8AF8, 0x8E44, 0x918D, 0x9664, 0x969B, /* 0x40 */
+ 0x973D, 0x984C, 0x9F4A, 0x4FCE, 0x5146, 0x51CB, 0x52A9, 0x5632, /* 0x40 */
+ 0x5F14, 0x5F6B, 0x63AA, 0x64CD, 0x65E9, 0x6641, 0x66FA, 0x66F9, /* 0x50 */
+ 0x671D, 0x689D, 0x68D7, 0x69FD, 0x6F15, 0x6F6E, 0x7167, 0x71E5, /* 0x50 */
+ 0x722A, 0x74AA, 0x773A, 0x7956, 0x795A, 0x79DF, 0x7A20, 0x7A95, /* 0x60 */
+ 0x7C97, 0x7CDF, 0x7D44, 0x7E70, 0x8087, 0x85FB, 0x86A4, 0x8A54, /* 0x60 */
+ 0x8ABF, 0x8D99, 0x8E81, 0x9020, 0x906D, 0x91E3, 0x963B, 0x96D5, /* 0x70 */
+ 0x9CE5, 0x65CF, 0x7C07, 0x8DB3, 0x93C3, 0x5B58, 0x5C0A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x5352, 0x62D9, 0x731D, 0x5027, 0x5B97, 0x5F9E, 0x60B0, /* 0x90 */
+ 0x616B, 0x68D5, 0x6DD9, 0x742E, 0x7A2E, 0x7D42, 0x7D9C, 0x7E31, /* 0x90 */
+ 0x816B, 0x8E2A, 0x8E35, 0x937E, 0x9418, 0x4F50, 0x5750, 0x5DE6, /* 0xA0 */
+ 0x5EA7, 0x632B, 0x7F6A, 0x4E3B, 0x4F4F, 0x4F8F, 0x505A, 0x59DD, /* 0xA0 */
+ 0x80C4, 0x546A, 0x5468, 0x55FE, 0x594F, 0x5B99, 0x5DDE, 0x5EDA, /* 0xB0 */
+ 0x665D, 0x6731, 0x67F1, 0x682A, 0x6CE8, 0x6D32, 0x6E4A, 0x6F8D, /* 0xB0 */
+ 0x70B7, 0x73E0, 0x7587, 0x7C4C, 0x7D02, 0x7D2C, 0x7DA2, 0x821F, /* 0xC0 */
+ 0x86DB, 0x8A3B, 0x8A85, 0x8D70, 0x8E8A, 0x8F33, 0x9031, 0x914E, /* 0xC0 */
+ 0x9152, 0x9444, 0x99D0, 0x7AF9, 0x7CA5, 0x4FCA, 0x5101, 0x51C6, /* 0xD0 */
+ 0x57C8, 0x5BEF, 0x5CFB, 0x6659, 0x6A3D, 0x6D5A, 0x6E96, 0x6FEC, /* 0xD0 */
+ 0x710C, 0x756F, 0x7AE3, 0x8822, 0x9021, 0x9075, 0x96CB, 0x99FF, /* 0xE0 */
+ 0x8301, 0x4E2D, 0x4EF2, 0x8846, 0x91CD, 0x537D, 0x6ADB, 0x696B, /* 0xE0 */
+ 0x6C41, 0x847A, 0x589E, 0x618E, 0x66FE, 0x62EF, 0x70DD, 0x7511, /* 0xF0 */
+ 0x75C7, 0x7E52, 0x84B8, 0x8B49, 0x8D08, 0x4E4B, 0x53EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x54AB, 0x5730, 0x5740, 0x5FD7, 0x6301, 0x6307, 0x646F, /* 0x30 */
+ 0x652F, 0x65E8, 0x667A, 0x679D, 0x67B3, 0x6B62, 0x6C60, 0x6C9A, /* 0x30 */
+ 0x6F2C, 0x77E5, 0x7825, 0x7949, 0x7957, 0x7D19, 0x80A2, 0x8102, /* 0x40 */
+ 0x81F3, 0x829D, 0x82B7, 0x8718, 0x8A8C, 0xF9FC, 0x8D04, 0x8DBE, /* 0x40 */
+ 0x9072, 0x76F4, 0x7A19, 0x7A37, 0x7E54, 0x8077, 0x5507, 0x55D4, /* 0x50 */
+ 0x5875, 0x632F, 0x6422, 0x6649, 0x664B, 0x686D, 0x699B, 0x6B84, /* 0x50 */
+ 0x6D25, 0x6EB1, 0x73CD, 0x7468, 0x74A1, 0x755B, 0x75B9, 0x76E1, /* 0x60 */
+ 0x771E, 0x778B, 0x79E6, 0x7E09, 0x7E1D, 0x81FB, 0x852F, 0x8897, /* 0x60 */
+ 0x8A3A, 0x8CD1, 0x8EEB, 0x8FB0, 0x9032, 0x93AD, 0x9663, 0x9673, /* 0x70 */
+ 0x9707, 0x4F84, 0x53F1, 0x59EA, 0x5AC9, 0x5E19, 0x684E, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x74C6, 0x75BE, 0x79E9, 0x7A92, 0x81A3, 0x86ED, 0x8CEA, /* 0x90 */
+ 0x8DCC, 0x8FED, 0x659F, 0x6715, 0xF9FD, 0x57F7, 0x6F57, 0x7DDD, /* 0x90 */
+ 0x8F2F, 0x93F6, 0x96C6, 0x5FB5, 0x61F2, 0x6F84, 0x4E14, 0x4F98, /* 0xA0 */
+ 0x501F, 0x53C9, 0x55DF, 0x5D6F, 0x5DEE, 0x6B21, 0x6B64, 0x78CB, /* 0xA0 */
+ 0x7B9A, 0xF9FE, 0x8E49, 0x8ECA, 0x906E, 0x6349, 0x643E, 0x7740, /* 0xB0 */
+ 0x7A84, 0x932F, 0x947F, 0x9F6A, 0x64B0, 0x6FAF, 0x71E6, 0x74A8, /* 0xB0 */
+ 0x74DA, 0x7AC4, 0x7C12, 0x7E82, 0x7CB2, 0x7E98, 0x8B9A, 0x8D0A, /* 0xC0 */
+ 0x947D, 0x9910, 0x994C, 0x5239, 0x5BDF, 0x64E6, 0x672D, 0x7D2E, /* 0xC0 */
+ 0x50ED, 0x53C3, 0x5879, 0x6158, 0x6159, 0x61FA, 0x65AC, 0x7AD9, /* 0xD0 */
+ 0x8B92, 0x8B96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5A3C, 0x5EE0, /* 0xD0 */
+ 0x5F70, 0x6134, 0x655E, 0x660C, 0x6636, 0x66A2, 0x69CD, 0x6EC4, /* 0xE0 */
+ 0x6F32, 0x7316, 0x7621, 0x7A93, 0x8139, 0x8259, 0x83D6, 0x84BC, /* 0xE0 */
+ 0x50B5, 0x57F0, 0x5BC0, 0x5BE8, 0x5F69, 0x63A1, 0x7826, 0x7DB5, /* 0xF0 */
+ 0x83DC, 0x8521, 0x91C7, 0x91F5, 0x518A, 0x67F5, 0x7B56 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8CAC, 0x51C4, 0x59BB, 0x60BD, 0x8655, 0x501C, 0xF9FF, /* 0x30 */
+ 0x5254, 0x5C3A, 0x617D, 0x621A, 0x62D3, 0x64F2, 0x65A5, 0x6ECC, /* 0x30 */
+ 0x7620, 0x810A, 0x8E60, 0x965F, 0x96BB, 0x4EDF, 0x5343, 0x5598, /* 0x40 */
+ 0x5929, 0x5DDD, 0x64C5, 0x6CC9, 0x6DFA, 0x7394, 0x7A7F, 0x821B, /* 0x40 */
+ 0x85A6, 0x8CE4, 0x8E10, 0x9077, 0x91E7, 0x95E1, 0x9621, 0x97C6, /* 0x50 */
+ 0x51F8, 0x54F2, 0x5586, 0x5FB9, 0x64A4, 0x6F88, 0x7DB4, 0x8F1F, /* 0x50 */
+ 0x8F4D, 0x9435, 0x50C9, 0x5C16, 0x6CBE, 0x6DFB, 0x751B, 0x77BB, /* 0x60 */
+ 0x7C3D, 0x7C64, 0x8A79, 0x8AC2, 0x581E, 0x59BE, 0x5E16, 0x6377, /* 0x60 */
+ 0x7252, 0x758A, 0x776B, 0x8ADC, 0x8CBC, 0x8F12, 0x5EF3, 0x6674, /* 0x70 */
+ 0x6DF8, 0x807D, 0x83C1, 0x8ACB, 0x9751, 0x9BD6, 0xFA00, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x5243, 0x66FF, 0x6D95, 0x6EEF, 0x7DE0, 0x8AE6, 0x902E, /* 0x90 */
+ 0x905E, 0x9AD4, 0x521D, 0x527F, 0x54E8, 0x6194, 0x6284, 0x62DB, /* 0x90 */
+ 0x68A2, 0x6912, 0x695A, 0x6A35, 0x7092, 0x7126, 0x785D, 0x7901, /* 0xA0 */
+ 0x790E, 0x79D2, 0x7A0D, 0x8096, 0x8278, 0x82D5, 0x8349, 0x8549, /* 0xA0 */
+ 0x8C82, 0x8D85, 0x9162, 0x918B, 0x91AE, 0x4FC3, 0x56D1, 0x71ED, /* 0xB0 */
+ 0x77D7, 0x8700, 0x89F8, 0x5BF8, 0x5FD6, 0x6751, 0x90A8, 0x53E2, /* 0xB0 */
+ 0x585A, 0x5BF5, 0x60A4, 0x6181, 0x6460, 0x7E3D, 0x8070, 0x8525, /* 0xC0 */
+ 0x9283, 0x64AE, 0x50AC, 0x5D14, 0x6700, 0x589C, 0x62BD, 0x63A8, /* 0xC0 */
+ 0x690E, 0x6978, 0x6A1E, 0x6E6B, 0x76BA, 0x79CB, 0x82BB, 0x8429, /* 0xD0 */
+ 0x8ACF, 0x8DA8, 0x8FFD, 0x9112, 0x914B, 0x919C, 0x9310, 0x9318, /* 0xD0 */
+ 0x939A, 0x96DB, 0x9A36, 0x9C0D, 0x4E11, 0x755C, 0x795D, 0x7AFA, /* 0xE0 */
+ 0x7B51, 0x7BC9, 0x7E2E, 0x84C4, 0x8E59, 0x8E74, 0x8EF8, 0x9010, /* 0xE0 */
+ 0x6625, 0x693F, 0x7443, 0x51FA, 0x672E, 0x9EDC, 0x5145, 0x5FE0, /* 0xF0 */
+ 0x6C96, 0x87F2, 0x885D, 0x8877, 0x60B4, 0x81B5, 0x8403 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8D05, 0x53D6, 0x5439, 0x5634, 0x5A36, 0x5C31, 0x708A, /* 0x30 */
+ 0x7FE0, 0x805A, 0x8106, 0x81ED, 0x8DA3, 0x9189, 0x9A5F, 0x9DF2, /* 0x30 */
+ 0x5074, 0x4EC4, 0x53A0, 0x60FB, 0x6E2C, 0x5C64, 0x4F88, 0x5024, /* 0x40 */
+ 0x55E4, 0x5CD9, 0x5E5F, 0x6065, 0x6894, 0x6CBB, 0x6DC4, 0x71BE, /* 0x40 */
+ 0x75D4, 0x75F4, 0x7661, 0x7A1A, 0x7A49, 0x7DC7, 0x7DFB, 0x7F6E, /* 0x50 */
+ 0x81F4, 0x86A9, 0x8F1C, 0x96C9, 0x99B3, 0x9F52, 0x5247, 0x52C5, /* 0x50 */
+ 0x98ED, 0x89AA, 0x4E03, 0x67D2, 0x6F06, 0x4FB5, 0x5BE2, 0x6795, /* 0x60 */
+ 0x6C88, 0x6D78, 0x741B, 0x7827, 0x91DD, 0x937C, 0x87C4, 0x79E4, /* 0x60 */
+ 0x7A31, 0x5FEB, 0x4ED6, 0x54A4, 0x553E, 0x58AE, 0x59A5, 0x60F0, /* 0x70 */
+ 0x6253, 0x62D6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99B1, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x99DD, 0x502C, 0x5353, 0x5544, 0x577C, 0xFA01, 0x6258, /* 0x90 */
+ 0xFA02, 0x64E2, 0x666B, 0x67DD, 0x6FC1, 0x6FEF, 0x7422, 0x7438, /* 0x90 */
+ 0x8A17, 0x9438, 0x5451, 0x5606, 0x5766, 0x5F48, 0x619A, 0x6B4E, /* 0xA0 */
+ 0x7058, 0x70AD, 0x7DBB, 0x8A95, 0x596A, 0x812B, 0x63A2, 0x7708, /* 0xA0 */
+ 0x803D, 0x8CAA, 0x5854, 0x642D, 0x69BB, 0x5B95, 0x5E11, 0x6E6F, /* 0xB0 */
+ 0xFA03, 0x8569, 0x514C, 0x53F0, 0x592A, 0x6020, 0x614B, 0x6B86, /* 0xB0 */
+ 0x6C70, 0x6CF0, 0x7B1E, 0x80CE, 0x82D4, 0x8DC6, 0x90B0, 0x98B1, /* 0xC0 */
+ 0xFA04, 0x64C7, 0x6FA4, 0x6491, 0x6504, 0x514E, 0x5410, 0x571F, /* 0xC0 */
+ 0x8A0E, 0x615F, 0x6876, 0xFA05, 0x75DB, 0x7B52, 0x7D71, 0x901A, /* 0xD0 */
+ 0x5806, 0x69CC, 0x817F, 0x892A, 0x9000, 0x9839, 0x5078, 0x5957, /* 0xD0 */
+ 0x59AC, 0x6295, 0x900F, 0x9B2A, 0x615D, 0x7279, 0x95D6, 0x5761, /* 0xE0 */
+ 0x5A46, 0x5DF4, 0x628A, 0x64AD, 0x64FA, 0x6777, 0x6CE2, 0x6D3E, /* 0xE0 */
+ 0x722C, 0x7436, 0x7834, 0x7F77, 0x82AD, 0x8DDB, 0x9817, 0x5224, /* 0xF0 */
+ 0x5742, 0x677F, 0x7248, 0x74E3, 0x8CA9, 0x8FA6, 0x9211 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x962A, 0x516B, 0x53ED, 0x634C, 0x4F69, 0x5504, 0x6096, /* 0x30 */
+ 0x6557, 0x6C9B, 0x6D7F, 0x724C, 0x72FD, 0x7A17, 0x8987, 0x8C9D, /* 0x30 */
+ 0x5F6D, 0x6F8E, 0x70F9, 0x81A8, 0x610E, 0x4FBF, 0x504F, 0x6241, /* 0x40 */
+ 0x7247, 0x7BC7, 0x7DE8, 0x7FE9, 0x904D, 0x97AD, 0x9A19, 0x8CB6, /* 0x40 */
+ 0x576A, 0x5E73, 0x67B0, 0x840D, 0x8A55, 0x5420, 0x5B16, 0x5E63, /* 0x50 */
+ 0x5EE2, 0x5F0A, 0x6583, 0x80BA, 0x853D, 0x9589, 0x965B, 0x4F48, /* 0x50 */
+ 0x5305, 0x530D, 0x530F, 0x5486, 0x54FA, 0x5703, 0x5E03, 0x6016, /* 0x60 */
+ 0x629B, 0x62B1, 0x6355, 0xFA06, 0x6CE1, 0x6D66, 0x75B1, 0x7832, /* 0x60 */
+ 0x80DE, 0x812F, 0x82DE, 0x8461, 0x84B2, 0x888D, 0x8912, 0x900B, /* 0x70 */
+ 0x92EA, 0x98FD, 0x9B91, 0x5E45, 0x66B4, 0x66DD, 0x7011, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x7206, 0xFA07, 0x4FF5, 0x527D, 0x5F6A, 0x6153, 0x6753, /* 0x90 */
+ 0x6A19, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8C79, 0x98C7, 0x98C4, /* 0x90 */
+ 0x9A43, 0x54C1, 0x7A1F, 0x6953, 0x8AF7, 0x8C4A, 0x98A8, 0x99AE, /* 0xA0 */
+ 0x5F7C, 0x62AB, 0x75B2, 0x76AE, 0x88AB, 0x907F, 0x9642, 0x5339, /* 0xA0 */
+ 0x5F3C, 0x5FC5, 0x6CCC, 0x73CC, 0x7562, 0x758B, 0x7B46, 0x82FE, /* 0xB0 */
+ 0x999D, 0x4E4F, 0x903C, 0x4E0B, 0x4F55, 0x53A6, 0x590F, 0x5EC8, /* 0xB0 */
+ 0x6630, 0x6CB3, 0x7455, 0x8377, 0x8766, 0x8CC0, 0x9050, 0x971E, /* 0xC0 */
+ 0x9C15, 0x58D1, 0x5B78, 0x8650, 0x8B14, 0x9DB4, 0x5BD2, 0x6068, /* 0xC0 */
+ 0x608D, 0x65F1, 0x6C57, 0x6F22, 0x6FA3, 0x701A, 0x7F55, 0x7FF0, /* 0xD0 */
+ 0x9591, 0x9592, 0x9650, 0x97D3, 0x5272, 0x8F44, 0x51FD, 0x542B, /* 0xD0 */
+ 0x54B8, 0x5563, 0x558A, 0x6ABB, 0x6DB5, 0x7DD8, 0x8266, 0x929C, /* 0xE0 */
+ 0x9677, 0x9E79, 0x5408, 0x54C8, 0x76D2, 0x86E4, 0x95A4, 0x95D4, /* 0xE0 */
+ 0x965C, 0x4EA2, 0x4F09, 0x59EE, 0x5AE6, 0x5DF7, 0x6052, 0x6297, /* 0xF0 */
+ 0x676D, 0x6841, 0x6C86, 0x6E2F, 0x7F38, 0x809B, 0x822A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFA08, 0xFA09, 0x9805, 0x4EA5, 0x5055, 0x54B3, 0x5793, /* 0x30 */
+ 0x595A, 0x5B69, 0x5BB3, 0x61C8, 0x6977, 0x6D77, 0x7023, 0x87F9, /* 0x30 */
+ 0x89E3, 0x8A72, 0x8AE7, 0x9082, 0x99ED, 0x9AB8, 0x52BE, 0x6838, /* 0x40 */
+ 0x5016, 0x5E78, 0x674F, 0x8347, 0x884C, 0x4EAB, 0x5411, 0x56AE, /* 0x40 */
+ 0x73E6, 0x9115, 0x97FF, 0x9909, 0x9957, 0x9999, 0x5653, 0x589F, /* 0x50 */
+ 0x865B, 0x8A31, 0x61B2, 0x6AF6, 0x737B, 0x8ED2, 0x6B47, 0x96AA, /* 0x50 */
+ 0x9A57, 0x5955, 0x7200, 0x8D6B, 0x9769, 0x4FD4, 0x5CF4, 0x5F26, /* 0x60 */
+ 0x61F8, 0x665B, 0x6CEB, 0x70AB, 0x7384, 0x73B9, 0x73FE, 0x7729, /* 0x60 */
+ 0x774D, 0x7D43, 0x7D62, 0x7E23, 0x8237, 0x8852, 0xFA0A, 0x8CE2, /* 0x70 */
+ 0x9249, 0x986F, 0x5B51, 0x7A74, 0x8840, 0x9801, 0x5ACC, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x4FE0, 0x5354, 0x593E, 0x5CFD, 0x633E, 0x6D79, 0x72F9, /* 0x90 */
+ 0x8105, 0x8107, 0x83A2, 0x92CF, 0x9830, 0x4EA8, 0x5144, 0x5211, /* 0x90 */
+ 0x578B, 0x5F62, 0x6CC2, 0x6ECE, 0x7005, 0x7050, 0x70AF, 0x7192, /* 0xA0 */
+ 0x73E9, 0x7469, 0x834A, 0x87A2, 0x8861, 0x9008, 0x90A2, 0x93A3, /* 0xA0 */
+ 0x99A8, 0x516E, 0x5F57, 0x60E0, 0x6167, 0x66B3, 0x8559, 0x8E4A, /* 0xB0 */
+ 0x91AF, 0x978B, 0x4E4E, 0x4E92, 0x547C, 0x58D5, 0x58FA, 0x597D, /* 0xB0 */
+ 0x5CB5, 0x5F27, 0x6236, 0x6248, 0x660A, 0x6667, 0x6BEB, 0x6D69, /* 0xC0 */
+ 0x6DCF, 0x6E56, 0x6EF8, 0x6F94, 0x6FE0, 0x6FE9, 0x705D, 0x72D0, /* 0xC0 */
+ 0x7425, 0x745A, 0x74E0, 0x7693, 0x795C, 0x7CCA, 0x7E1E, 0x80E1, /* 0xD0 */
+ 0x82A6, 0x846B, 0x84BF, 0x864E, 0x865F, 0x8774, 0x8B77, 0x8C6A, /* 0xD0 */
+ 0x93AC, 0x9800, 0x9865, 0x60D1, 0x6216, 0x9177, 0x5A5A, 0x660F, /* 0xE0 */
+ 0x6DF7, 0x6E3E, 0x743F, 0x9B42, 0x5FFD, 0x60DA, 0x7B0F, 0x54C4, /* 0xE0 */
+ 0x5F18, 0x6C5E, 0x6CD3, 0x6D2A, 0x70D8, 0x7D05, 0x8679, 0x8A0C, /* 0xF0 */
+ 0x9D3B, 0x5316, 0x548C, 0x5B05, 0x6A3A, 0x706B, 0x7575 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_JOHAB_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x798D, 0x79BE, 0x82B1, 0x83EF, 0x8A71, 0x8B41, 0x8CA8, /* 0x30 */
+ 0x9774, 0xFA0B, 0x64F4, 0x652B, 0x78BA, 0x78BB, 0x7A6B, 0x4E38, /* 0x30 */
+ 0x559A, 0x5950, 0x5BA6, 0x5E7B, 0x60A3, 0x63DB, 0x6B61, 0x6665, /* 0x40 */
+ 0x6853, 0x6E19, 0x7165, 0x74B0, 0x7D08, 0x9084, 0x9A69, 0x9C25, /* 0x40 */
+ 0x6D3B, 0x6ED1, 0x733E, 0x8C41, 0x95CA, 0x51F0, 0x5E4C, 0x5FA8, /* 0x50 */
+ 0x604D, 0x60F6, 0x6130, 0x614C, 0x6643, 0x6644, 0x69A5, 0x6CC1, /* 0x50 */
+ 0x6E5F, 0x6EC9, 0x6F62, 0x714C, 0x749C, 0x7687, 0x7BC1, 0x7C27, /* 0x60 */
+ 0x8352, 0x8757, 0x9051, 0x968D, 0x9EC3, 0x532F, 0x56DE, 0x5EFB, /* 0x60 */
+ 0x5F8A, 0x6062, 0x6094, 0x61F7, 0x6666, 0x6703, 0x6A9C, 0x6DEE, /* 0x70 */
+ 0x6FAE, 0x7070, 0x736A, 0x7E6A, 0x81BE, 0x8334, 0x86D4, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0x8AA8, 0x8CC4, 0x5283, 0x7372, 0x5B96, 0x6A6B, 0x9404, /* 0x90 */
+ 0x54EE, 0x5686, 0x5B5D, 0x6548, 0x6585, 0x66C9, 0x689F, 0x6D8D, /* 0x90 */
+ 0x6DC6, 0x723B, 0x80B4, 0x9175, 0x9A4D, 0x4FAF, 0x5019, 0x539A, /* 0xA0 */
+ 0x540E, 0x543C, 0x5589, 0x55C5, 0x5E3F, 0x5F8C, 0x673D, 0x7166, /* 0xA0 */
+ 0x73DD, 0x9005, 0x52DB, 0x52F3, 0x5864, 0x58CE, 0x7104, 0x718F, /* 0xB0 */
+ 0x71FB, 0x85B0, 0x8A13, 0x6688, 0x85A8, 0x55A7, 0x6684, 0x714A, /* 0xB0 */
+ 0x8431, 0x5349, 0x5599, 0x6BC1, 0x5F59, 0x5FBD, 0x63EE, 0x6689, /* 0xC0 */
+ 0x7147, 0x8AF1, 0x8F1D, 0x9EBE, 0x4F11, 0x643A, 0x70CB, 0x7566, /* 0xC0 */
+ 0x8667, 0x6064, 0x8B4E, 0x9DF8, 0x5147, 0x51F6, 0x5308, 0x6D36, /* 0xD0 */
+ 0x80F8, 0x9ED1, 0x6615, 0x6B23, 0x7098, 0x75D5, 0x5403, 0x5C79, /* 0xD0 */
+ 0x7D07, 0x8A16, 0x6B20, 0x6B3D, 0x6B46, 0x5438, 0x6070, 0x6D3D, /* 0xE0 */
+ 0x7FD5, 0x8208, 0x50D6, 0x51DE, 0x559C, 0x566B, 0x56CD, 0x59EC, /* 0xE0 */
+ 0x5B09, 0x5E0C, 0x6199, 0x6198, 0x6231, 0x665E, 0x66E6, 0x7199, /* 0xF0 */
+ 0x71B9, 0x71BA, 0x72A7, 0x79A7, 0x7A00, 0x7FB2, 0x8A70 /* 0xF0 */
+};
diff --git a/sal/textenc/tcvtkr5.tab b/sal/textenc/tcvtkr5.tab
new file mode 100644
index 000000000..c0f0ddcfc
--- /dev/null
+++ b/sal/textenc/tcvtkr5.tab
@@ -0,0 +1,5406 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the DBCS to UniCode tables for the following */
+/* korean charsets: */
+/* JOHAB */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xD9AE, 0, 0, 0xD9B4, 0, 0, 0xD967, /* 0xA0 */
+ 0xD937, 0, 0xDCA3, 0, 0, 0xD939, 0, 0, /* 0xA0 */
+ 0xD956, 0xD94E, 0xDD99, 0xDD9A, 0xD9A5, 0, 0xD9D2, 0xD934, /* 0xB0 */
+ 0xD9AC, 0xDD98, 0xDCAC, 0, 0xDCF9, 0xDCF6, 0xDCFA, 0xD9AF, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xDCA1, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xDCA2, 0, 0, 0, 0, 0, 0, 0xD94F, /* 0xD0 */
+ 0xDCAA, 0, 0, 0, 0, 0, 0xDCAD, 0xDD3C, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xDD31, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xDD33, 0, 0, 0, 0, 0, 0, 0xD950, /* 0xF0 */
+ 0xDD3A, 0, 0, 0, 0, 0, 0xDD3D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_01[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDD32, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xDCA4, 0xDD34, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xDD35, 0xDCA6, 0xDD36, 0, 0, 0, 0, /* 0x30 */
+ 0xDD37, 0, 0, 0, 0, 0, 0, 0xDCA8, /* 0x30 */
+ 0xDD38, 0xDCA9, 0xDD39, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xDD40, 0xDCAF, 0xDD3F, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xDCAB, 0xDD3B, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xDCAE, 0xDD3E /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_02[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD9A7, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xD9B0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xD9A8, 0xD9AB, 0xD9AA, 0xD9AD, 0, 0xD9A9 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_03[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDB51, 0xDB52, 0xDB53, 0xDB54, 0xDB55, 0xDB56, 0xDB57, /* 0x90 */
+ 0xDB58, 0xDB59, 0xDB5A, 0xDB5B, 0xDB5C, 0xDB5D, 0xDB5E, 0xDB5F, /* 0x90 */
+ 0xDB60, 0xDB61, 0, 0xDB62, 0xDB63, 0xDB64, 0xDB65, 0xDB66, /* 0xA0 */
+ 0xDB67, 0xDB68, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xDB71, 0xDB72, 0xDB73, 0xDB74, 0xDB75, 0xDB76, 0xDB77, /* 0xB0 */
+ 0xDB78, 0xDB79, 0xDB7A, 0xDB7B, 0xDB7C, 0xDB7D, 0xDB7E, 0xDB91, /* 0xB0 */
+ 0xDB92, 0xDB93, 0, 0xDB94, 0xDB95, 0xDB96, 0xDB97, 0xDB98, /* 0xC0 */
+ 0xDB99, 0xDB9A /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_04[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDEA7, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xDEA1, 0xDEA2, 0xDEA3, 0xDEA4, 0xDEA5, 0xDEA6, 0xDEA8, 0xDEA9, /* 0x10 */
+ 0xDEAA, 0xDEAB, 0xDEAC, 0xDEAD, 0xDEAE, 0xDEAF, 0xDEB0, 0xDEB1, /* 0x10 */
+ 0xDEB2, 0xDEB3, 0xDEB4, 0xDEB5, 0xDEB6, 0xDEB7, 0xDEB8, 0xDEB9, /* 0x20 */
+ 0xDEBA, 0xDEBB, 0xDEBC, 0xDEBD, 0xDEBE, 0xDEBF, 0xDEC0, 0xDEC1, /* 0x20 */
+ 0xDED1, 0xDED2, 0xDED3, 0xDED4, 0xDED5, 0xDED6, 0xDED8, 0xDED9, /* 0x30 */
+ 0xDEDA, 0xDEDB, 0xDEDC, 0xDEDD, 0xDEDE, 0xDEDF, 0xDEE0, 0xDEE1, /* 0x30 */
+ 0xDEE2, 0xDEE3, 0xDEE4, 0xDEE5, 0xDEE6, 0xDEE7, 0xDEE8, 0xDEE9, /* 0x40 */
+ 0xDEEA, 0xDEEB, 0xDEEC, 0xDEED, 0xDEEE, 0xDEEF, 0xDEF0, 0xDEF1, /* 0x40 */
+ 0, 0xDED7 /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_20[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD93A, 0, 0, /* 0x10 */
+ 0xD93E, 0xD93F, 0, 0, 0xD940, 0xD941, 0, 0, /* 0x10 */
+ 0xD9D3, 0xD9D4, 0, 0, 0, 0xD935, 0xD936, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xD9B6, 0, 0xD957, 0xD958, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xD968, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xDD9B, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDD9C, /* 0x70 */
+ 0, 0xDD9D, 0xDD9E, 0xDD9F, 0xDDA0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x005C /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD959, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xD9B5, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xDC34, 0, 0, 0xD9E0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xD9E5, 0xD9E2, 0, 0, 0, 0xDC69, 0, /* 0x20 */
+ 0, 0, 0, 0xD95A, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xDCF7, 0xDCF8, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xDCFB, 0xDCFC, 0xDCFD, 0xDCFE, 0, /* 0x50 */
+ 0xDB40, 0xDB41, 0xDB42, 0xDB43, 0xDB44, 0xDB45, 0xDB46, 0xDB47, /* 0x60 */
+ 0xDB48, 0xDB49, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xDB31, 0xDB32, 0xDB33, 0xDB34, 0xDB35, 0xDB36, 0xDB37, 0xDB38, /* 0x70 */
+ 0xDB39, 0xDB3A, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xD977, 0xD978, 0xD976, 0xD979, 0xD97A, 0xD9D5, 0xD9D8, 0xD9D6, /* 0x90 */
+ 0xD9D9, 0xD9D7, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xD9A1, 0, 0xD9A2 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD9A3, 0, 0xD963, 0xD9A4, 0, 0, 0, 0xD964, /* 0x00 */
+ 0xD996, 0, 0, 0xD997, 0, 0, 0, 0xD9B3, /* 0x00 */
+ 0, 0xD9B2, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xD97E, 0, 0, 0xD992, 0xD954, 0, /* 0x10 */
+ 0xD960, 0, 0, 0, 0, 0xD93B, 0, 0xD99E, /* 0x20 */
+ 0xD99F, 0xD99D, 0xD99C, 0xD994, 0xD995, 0, 0xD9B1, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xD955, 0xD993, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xD93D, 0xD991, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xD966, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xD951, 0xD965, 0, 0, 0xD952, 0xD953, 0, 0, /* 0x60 */
+ 0, 0, 0xD97C, 0xD97D, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xD99A, 0xD99B, 0, 0, 0xD998, 0xD999, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xD9C1, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xD961 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_23[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD962 /* 0x10 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_24[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCE7, 0xDCE8, 0xDCE9, 0xDCEA, 0xDCEB, 0xDCEC, 0xDCED, 0xDCEE, /* 0x60 */
+ 0xDCEF, 0xDCF0, 0xDCF1, 0xDCF2, 0xDCF3, 0xDCF4, 0xDCF5, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xDD77, 0xDD78, 0xDD79, 0xDD7A, /* 0x70 */
+ 0xDD7B, 0xDD7C, 0xDD7D, 0xDD7E, 0xDD91, 0xDD92, 0xDD93, 0xDD94, /* 0x70 */
+ 0xDD95, 0xDD96, 0xDD97, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xDD5D, 0xDD5E, 0xDD5F, 0xDD60, /* 0x90 */
+ 0xDD61, 0xDD62, 0xDD63, 0xDD64, 0xDD65, 0xDD66, 0xDD67, 0xDD68, /* 0xA0 */
+ 0xDD69, 0xDD6A, 0xDD6B, 0xDD6C, 0xDD6D, 0xDD6E, 0xDD6F, 0xDD70, /* 0xA0 */
+ 0xDD71, 0xDD72, 0xDD73, 0xDD74, 0xDD75, 0xDD76, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xDCCD, 0xDCCE, 0xDCCF, 0xDCD0, 0xDCD1, 0xDCD2, 0xDCD3, 0xDCD4, /* 0xD0 */
+ 0xDCD5, 0xDCD6, 0xDCD7, 0xDCD8, 0xDCD9, 0xDCDA, 0xDCDB, 0xDCDC, /* 0xD0 */
+ 0xDCDD, 0xDCDE, 0xDCDF, 0xDCE0, 0xDCE1, 0xDCE2, 0xDCE3, 0xDCE4, /* 0xE0 */
+ 0xDCE5, 0xDCE6 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_25[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDBA1, 0xDBAC, 0xDBA2, 0xDBAD, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xDBA3, 0xDBC8, 0xDBC7, 0xDBAE, /* 0x00 */
+ 0xDBA4, 0xDBC2, 0xDBC1, 0xDBAF, 0xDBA6, 0xDBC6, 0xDBC5, 0xDBB1, /* 0x10 */
+ 0xDBA5, 0xDBC4, 0xDBC3, 0xDBB0, 0xDBA7, 0xDBBC, 0xDBC9, 0xDBCA, /* 0x10 */
+ 0xDBB7, 0xDBCB, 0xDBCC, 0xDBB2, 0xDBA9, 0xDBBE, 0xDBCD, 0xDBCE, /* 0x20 */
+ 0xDBB9, 0xDBCF, 0xDBD0, 0xDBB4, 0xDBA8, 0xDBD1, 0xDBD2, 0xDBB8, /* 0x20 */
+ 0xDBBD, 0xDBD3, 0xDBD4, 0xDBB3, 0xDBAA, 0xDBD5, 0xDBD6, 0xDBBA, /* 0x30 */
+ 0xDBBF, 0xDBD7, 0xDBD8, 0xDBB5, 0xDBAB, 0xDBD9, 0xDBDA, 0xDBBB, /* 0x30 */
+ 0xDBDB, 0xDBDC, 0xDBC0, 0xDBDD, 0xDBDE, 0xDBDF, 0xDBE0, 0xDBE1, /* 0x40 */
+ 0xDBE2, 0xDBE3, 0xDBE4, 0xDBB6, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD9C6, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xD971, 0xD970, 0, 0xD9C3, 0xD9C7, 0xD9C8, 0xD9CB, 0xD9CA, /* 0xA0 */
+ 0xD9C9, 0xD9CC, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xD973, 0xD972, 0, 0, 0xD9BA, 0xD9B9, /* 0xB0 */
+ 0, 0, 0, 0, 0xD975, 0xD974, 0, 0, /* 0xB0 */
+ 0xD9B8, 0xD9B7, 0, 0, 0, 0, 0xD96F, 0xD96E, /* 0xC0 */
+ 0xD9C2, 0, 0, 0xD96B, 0, 0, 0xD96D, 0xD96C, /* 0xC0 */
+ 0xD9C4, 0xD9C5 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD96A, 0xD969, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xD9CF, 0xD9CE, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xD9D0, 0, 0xD9D1, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xD95F, 0, 0xD95E, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xD9BC, 0xD9BD, 0, 0xD9C0, 0xD9BB, 0xD9BE, 0, 0xD9BF, /* 0x60 */
+ 0xD9CD, 0xD9DB, 0xD9DC, 0, 0xD9DD, 0xD9DA /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD931, 0xD932, 0xD933, 0xD938, 0, 0, 0, 0, /* 0x00 */
+ 0xD944, 0xD945, 0xD946, 0xD947, 0xD948, 0xD949, 0xD94A, 0xD94B, /* 0x00 */
+ 0xD94C, 0xD94D, 0, 0xD97B, 0xD942, 0xD943, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xDDA1, 0xDDA2, 0xDDA3, 0xDDA4, 0xDDA5, 0xDDA6, 0xDDA7, /* 0x40 */
+ 0xDDA8, 0xDDA9, 0xDDAA, 0xDDAB, 0xDDAC, 0xDDAD, 0xDDAE, 0xDDAF, /* 0x40 */
+ 0xDDB0, 0xDDB1, 0xDDB2, 0xDDB3, 0xDDB4, 0xDDB5, 0xDDB6, 0xDDB7, /* 0x50 */
+ 0xDDB8, 0xDDB9, 0xDDBA, 0xDDBB, 0xDDBC, 0xDDBD, 0xDDBE, 0xDDBF, /* 0x50 */
+ 0xDDC0, 0xDDC1, 0xDDC2, 0xDDC3, 0xDDC4, 0xDDC5, 0xDDC6, 0xDDC7, /* 0x60 */
+ 0xDDC8, 0xDDC9, 0xDDCA, 0xDDCB, 0xDDCC, 0xDDCD, 0xDDCE, 0xDDCF, /* 0x60 */
+ 0xDDD0, 0xDDD1, 0xDDD2, 0xDDD3, 0xDDD4, 0xDDD5, 0xDDD6, 0xDDD7, /* 0x70 */
+ 0xDDD8, 0xDDD9, 0xDDDA, 0xDDDB, 0xDDDC, 0xDDDD, 0xDDDE, 0xDDDF, /* 0x70 */
+ 0xDDE0, 0xDDE1, 0xDDE2, 0xDDE3, 0xDDE4, 0xDDE5, 0xDDE6, 0xDDE7, /* 0x80 */
+ 0xDDE8, 0xDDE9, 0xDDEA, 0xDDEB, 0xDDEC, 0xDDED, 0xDDEE, 0xDDEF, /* 0x80 */
+ 0xDDF0, 0xDDF1, 0xDDF2, 0xDDF3, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xDE31, 0xDE32, 0xDE33, 0xDE34, 0xDE35, 0xDE36, 0xDE37, /* 0xA0 */
+ 0xDE38, 0xDE39, 0xDE3A, 0xDE3B, 0xDE3C, 0xDE3D, 0xDE3E, 0xDE3F, /* 0xA0 */
+ 0xDE40, 0xDE41, 0xDE42, 0xDE43, 0xDE44, 0xDE45, 0xDE46, 0xDE47, /* 0xB0 */
+ 0xDE48, 0xDE49, 0xDE4A, 0xDE4B, 0xDE4C, 0xDE4D, 0xDE4E, 0xDE4F, /* 0xB0 */
+ 0xDE50, 0xDE51, 0xDE52, 0xDE53, 0xDE54, 0xDE55, 0xDE56, 0xDE57, /* 0xC0 */
+ 0xDE58, 0xDE59, 0xDE5A, 0xDE5B, 0xDE5C, 0xDE5D, 0xDE5E, 0xDE5F, /* 0xC0 */
+ 0xDE60, 0xDE61, 0xDE62, 0xDE63, 0xDE64, 0xDE65, 0xDE66, 0xDE67, /* 0xD0 */
+ 0xDE68, 0xDE69, 0xDE6A, 0xDE6B, 0xDE6C, 0xDE6D, 0xDE6E, 0xDE6F, /* 0xD0 */
+ 0xDE70, 0xDE71, 0xDE72, 0xDE73, 0xDE74, 0xDE75, 0xDE76, 0xDE77, /* 0xE0 */
+ 0xDE78, 0xDE79, 0xDE7A, 0xDE7B, 0xDE7C, 0xDE7D, 0xDE7E, 0xDE91, /* 0xE0 */
+ 0xDE92, 0xDE93, 0xDE94, 0xDE95, 0xDE96, 0xDE97, 0xDE98 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_31[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8841, 0x8C41, 0x8444, 0x9041, 0x8446, 0x8447, 0x9441, /* 0x30 */
+ 0x9841, 0x9C41, 0x844A, 0x844B, 0x844C, 0x844D, 0x844E, 0x844F, /* 0x30 */
+ 0x8450, 0xA041, 0xA441, 0xA841, 0x8454, 0xAC41, 0xB041, 0xB441, /* 0x40 */
+ 0xB841, 0xBC41, 0xC041, 0xC441, 0xC841, 0xCC41, 0xD041, 0x8461, /* 0x40 */
+ 0x8481, 0x84A1, 0x84C1, 0x84E1, 0x8541, 0x8561, 0x8581, 0x85A1, /* 0x50 */
+ 0x85C1, 0x85E1, 0x8641, 0x8661, 0x8681, 0x86A1, 0x86C1, 0x86E1, /* 0x50 */
+ 0x8741, 0x8761, 0x8781, 0x87A1, 0xDAD4, 0xDAD5, 0xDAD6, 0xDAD7, /* 0x60 */
+ 0xDAD8, 0xDAD9, 0xDADA, 0xDADB, 0xDADC, 0xDADD, 0xDADE, 0xDADF, /* 0x60 */
+ 0xDAE0, 0xDAE1, 0xDAE2, 0xDAE3, 0xDAE4, 0xDAE5, 0xDAE6, 0xDAE7, /* 0x70 */
+ 0xDAE8, 0xDAE9, 0xDAEA, 0xDAEB, 0xDAEC, 0xDAED, 0xDAEE, 0xDAEF, /* 0x70 */
+ 0xDAF0, 0xDAF1, 0xDAF2, 0xDAF3, 0xDAF4, 0xDAF5, 0xDAF6, 0xDAF7, /* 0x80 */
+ 0xDAF8, 0xDAF9, 0xDAFA, 0xDAFB, 0xDAFC, 0xDAFD, 0xDAFE /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDD41, 0xDD42, 0xDD43, 0xDD44, 0xDD45, 0xDD46, 0xDD47, 0xDD48, /* 0x00 */
+ 0xDD49, 0xDD4A, 0xDD4B, 0xDD4C, 0xDD4D, 0xDD4E, 0xDD4F, 0xDD50, /* 0x00 */
+ 0xDD51, 0xDD52, 0xDD53, 0xDD54, 0xDD55, 0xDD56, 0xDD57, 0xDD58, /* 0x10 */
+ 0xDD59, 0xDD5A, 0xDD5B, 0xDD5C, 0xD9DF, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xDCB1, 0xDCB2, 0xDCB3, 0xDCB4, 0xDCB5, 0xDCB6, 0xDCB7, 0xDCB8, /* 0x60 */
+ 0xDCB9, 0xDCBA, 0xDCBB, 0xDCBC, 0xDCBD, 0xDCBE, 0xDCBF, 0xDCC0, /* 0x60 */
+ 0xDCC1, 0xDCC2, 0xDCC3, 0xDCC4, 0xDCC5, 0xDCC6, 0xDCC7, 0xDCC8, /* 0x70 */
+ 0xDCC9, 0xDCCA, 0xDCCB, 0xDCCC, 0, 0, 0, 0xD9DE /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDC59, 0xDC5A, 0xDC5B, 0xDC5C, 0xDC5D, 0, 0, 0, /* 0x80 */
+ 0xDC4A, 0xDC4B, 0xDC6C, 0xDC6D, 0xDC6E, 0xDC46, 0xDC47, 0xDC48, /* 0x80 */
+ 0xDC64, 0xDC65, 0xDC66, 0xDC67, 0xDC68, 0xDC31, 0xDC32, 0xDC33, /* 0x90 */
+ 0xDC35, 0xDC3B, 0xDC3C, 0xDC3D, 0xDC3E, 0xDC3F, 0xDC40, 0xDC41, /* 0x90 */
+ 0xDC42, 0xDC43, 0xDC44, 0xDC37, 0xDC38, 0xDC39, 0xDC3A, 0xDC4D, /* 0xA0 */
+ 0xDC4E, 0xDC75, 0xDC76, 0xDC77, 0xDC78, 0xDC71, 0xDC72, 0xDC73, /* 0xA0 */
+ 0xDC4F, 0xDC50, 0xDC51, 0xDC52, 0xDC53, 0xDC54, 0xDC55, 0xDC56, /* 0xB0 */
+ 0xDC57, 0xDC58, 0xDC5E, 0xDC5F, 0xDC60, 0xDC61, 0xDC62, 0xDC63, /* 0xB0 */
+ 0xDC6A, 0xDC6B, 0xD9E3, 0xDC7C, 0xDC36, 0xDC70, 0xDC91, 0xD9E1, /* 0xC0 */
+ 0xDC4C, 0xDC7D, 0xDC45, 0, 0, 0, 0, 0xDC49, /* 0xC0 */
+ 0xDC7A, 0, 0, 0xDC7B, 0, 0, 0xDC6F, 0, /* 0xD0 */
+ 0xD9E4, 0, 0, 0xDC74, 0xDC7E, 0xDC79 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF179, 0xF2CB, 0, 0xF662, 0, 0, 0, 0xE742, /* 0x00 */
+ 0xF1DB, 0xEAB2, 0xEABE, 0xF7BB, 0, 0xE996, 0, 0, /* 0x00 */
+ 0, 0xF5E4, 0, 0, 0xF4A6, 0xE9E0, 0xEBA6, 0, /* 0x10 */
+ 0xE29A, 0xE940, 0, 0, 0, 0, 0xECAA, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF3E9, 0, 0, /* 0x20 */
+ 0, 0, 0xE1FA, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xF93F, 0xE4A1, 0, 0xF3AB, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xEED1, 0xE43C, 0, 0xE29B, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF3FD, 0, 0xEA4F, 0xF8BA, 0xF7B9, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xE262, 0, /* 0x50 */
+ 0xECAB, 0xF0E0, 0, 0, 0, 0xE29C, 0xE0F7, 0xEDA5, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE071, 0, 0xE55C, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xF071, 0, 0, 0xE973, 0xEAAD, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE0EB, 0, /* 0x70 */
+ 0, 0, 0xE5AF, 0, 0, 0, 0xE697, 0, /* 0x80 */
+ 0xEDF8, 0, 0, 0xEA50, 0xF133, 0, 0xEFCD, 0, /* 0x80 */
+ 0xF037, 0xEFF6, 0xF8BB, 0, 0xEEE9, 0xF2CC, 0, 0, /* 0x90 */
+ 0xE376, 0, 0, 0xEA51, 0, 0, 0xED3C, 0, /* 0x90 */
+ 0, 0xE75C, 0xF7F1, 0, 0xE26F, 0xF834, 0xEE42, 0, /* 0xA0 */
+ 0xF89D, 0, 0, 0xF84D, 0xE158, 0xF2CD, 0xE5D5, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xE4A2, 0, /* 0xB0 */
+ 0, 0, 0xF161, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xED37, 0xF162, 0, 0, 0xF641, 0, 0, 0xE29D, /* 0xC0 */
+ 0, 0, 0xE361, 0xE0BF, 0, 0xF1A4, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xF1A8, 0xEA52, 0xF672, 0xF1DC, /* 0xD0 */
+ 0xE997, 0xEB49, 0, 0, 0, 0xE55E, 0, 0xF545, /* 0xD0 */
+ 0, 0, 0, 0xE4DB, 0xE645, 0xF134, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xED76, 0, 0xF3EA, 0, 0, 0, 0xE0EC, 0xE0C0, /* 0xF0 */
+ 0, 0, 0, 0xF194 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE37A, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xF7F2, 0xF135, 0xE36F, 0, 0xEEEA, 0xE37B, 0xE961, /* 0x00 */
+ 0xE8E9, 0xF9CC, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8D7, /* 0x20 */
+ 0, 0, 0, 0, 0xE871, 0, 0xE646, 0, /* 0x30 */
+ 0xECDF, 0, 0xEA53, 0, 0xEA54, 0xE031, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xF27C, 0, 0, 0xE4A3, 0xF247, /* 0x40 */
+ 0xF75F, 0, 0, 0, 0, 0xF058, 0xF248, 0xF3AC, /* 0x40 */
+ 0xF3A5, 0xEFCE, 0, 0, 0, 0xF7BC, 0, 0, /* 0x50 */
+ 0, 0xEDF9, 0xF17A, 0xE9D6, 0xF1C2, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xF735, 0, 0, 0, 0, 0, 0xEDBA, /* 0x60 */
+ 0xE8D8, 0, 0, 0xE032, 0, 0, 0xE3CD, 0, /* 0x70 */
+ 0, 0, 0xF27D, 0, 0, 0, 0xF17B, 0xEA55, /* 0x70 */
+ 0, 0xECE0, 0, 0xE059, 0xF479, 0, 0xE5CE, 0, /* 0x80 */
+ 0xF646, 0, 0xE252, 0xE657, 0, 0xECB4, 0, 0xF3AD, /* 0x80 */
+ 0, 0xF072, 0, 0, 0, 0, 0xE6C2, 0, /* 0x90 */
+ 0xF4A7, 0, 0, 0xE1EA, 0, 0xF0EE, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xE7B2, 0xF9A5, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xF665, 0xE5E2, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF745, /* 0xB0 */
+ 0, 0, 0xE197, 0xF5B5, 0xED3D, 0, 0, 0, /* 0xC0 */
+ 0, 0xEEEB, 0xF3D5, 0, 0, 0, 0xF34B, 0, /* 0xC0 */
+ 0, 0xEFB5, 0, 0xE159, 0xF865, 0, 0, 0xEBD4, /* 0xD0 */
+ 0, 0, 0xE6D6, 0, 0, 0xE951, 0, 0xEA56, /* 0xD0 */
+ 0xF891, 0xECE1, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xEBF3, 0xE998, /* 0xE0 */
+ 0, 0xE29E, 0, 0xE8C4, 0, 0xF793, 0, 0, /* 0xF0 */
+ 0xE974, 0, 0xEDEF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE941, 0, 0, 0, 0xE5D6, 0, /* 0x00 */
+ 0, 0xF4DA, 0, 0xE0C1, 0, 0xE8C3, 0, 0, /* 0x00 */
+ 0, 0xE7FA, 0xE4EE, 0, 0, 0, 0xF848, 0, /* 0x10 */
+ 0, 0xF9A6, 0xF0EF, 0, 0xF536, 0, 0xE15A, 0xF4A8, /* 0x10 */
+ 0, 0xF4DB, 0, 0xE8A7, 0xF647, 0, 0xE2E6, 0xF394, /* 0x20 */
+ 0xE0DA, 0, 0xEED2, 0xE6C3, 0xF692, 0xEF6E, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xEDA6, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xEDE7, 0, 0, 0, 0xE033, /* 0x40 */
+ 0xE137, 0xF059, 0, 0, 0, 0, 0, 0xF746, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF835, 0, 0, /* 0x50 */
+ 0, 0, 0xF3AE, 0, 0xF2CE, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xE0ED, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xF640, 0xF2CF, 0xEFCF, 0, /* 0x70 */
+ 0xF6DE, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE263, 0, 0, 0, 0, 0xE999, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xE8A8, 0, 0, /* 0x80 */
+ 0, 0xE0F8, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xEAA1, 0xE9E1, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xF5CA, 0xEFB6, 0, 0, /* 0xA0 */
+ 0, 0, 0xEEEC, 0xF27E, 0, 0xF4F0, 0, 0xEABF, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xE15B, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xE351, 0, 0, /* 0xC0 */
+ 0, 0xF562, 0xEB4A, 0, 0, 0, 0, 0xEAC0, /* 0xC0 */
+ 0, 0xE270, 0, 0, 0, 0xE962, 0xF9EA, 0, /* 0xD0 */
+ 0, 0, 0xE698, 0, 0, 0, 0xF05A, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xEF79, 0, 0xECAC, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF4D0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xE034, 0, 0xE8F8, 0, 0, 0, 0xEA57 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0F0, 0xF3D6, 0, 0, 0xEDE2, 0, 0xE15C, 0, /* 0x00 */
+ 0, 0xE0FB, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF073, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEAC1, /* 0x10 */
+ 0, 0xE67D, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xEFD0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF249, 0, 0, 0, 0, 0xE5E3, /* 0x30 */
+ 0, 0, 0xE3D3, 0, 0xEDF0, 0, 0, 0, /* 0x30 */
+ 0xEF44, 0xF0C3, 0, 0xF03A, 0xF89E, 0xF5F6, 0xF34C, 0xF9D4, /* 0x40 */
+ 0xEB4B, 0xE253, 0, 0xE34A, 0xF6BA, 0xE795, 0xF6CD, 0, /* 0x40 */
+ 0, 0, 0xED3E, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xE56F, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE377, 0, 0, 0xF19F, 0, 0xE43E, /* 0x60 */
+ 0xF291, 0xE5D7, 0xF074, 0xF732, 0xE1EB, 0xE6BF, 0xF8B1, 0, /* 0x60 */
+ 0, 0xE1EC, 0, 0, 0, 0xE942, 0xE37C, 0xE29F, /* 0x70 */
+ 0xF292, 0, 0, 0, 0xE152, 0, 0, 0, /* 0x70 */
+ 0xE37D, 0, 0, 0, 0, 0, 0xEDF7, 0, /* 0x80 */
+ 0, 0, 0xF4FC, 0, 0, 0xF232, 0, 0, /* 0x80 */
+ 0, 0, 0xE7B3, 0, 0, 0xE796, 0, 0xEFB7, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xE23E, 0, 0, 0, 0, 0xE7A2, 0, 0, /* 0xA0 */
+ 0, 0, 0xE793, 0, 0xE55F, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xEDA7, 0xE5D2, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xE639, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF532, 0, 0xF3D7, 0, /* 0xC0 */
+ 0, 0xE5D8, 0, 0xF34D, 0xE6D0, 0xE560, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE6CF, 0xF0EA, 0xF9EB, 0, /* 0xD0 */
+ 0, 0xE8ED, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF955, 0xE0C2, 0, 0, 0, 0, 0xF9D5, 0, /* 0xF0 */
+ 0xF558, 0xEF7A, 0xF5F3, 0, 0, 0xF7DE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4EF, 0, 0, 0xF163, 0, 0, 0xE9C2, 0xF2B7, /* 0x00 */
+ 0xEED4, 0, 0xE05A, 0, 0, 0, 0xE7FB, 0, /* 0x00 */
+ 0, 0xF89F, 0, 0, 0, 0, 0, 0xE63A, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF59A, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xF6F7, 0xE93C, 0, 0, /* 0x20 */
+ 0, 0xE6D7, 0xEAA2, 0, 0, 0, 0xE24E, 0, /* 0x20 */
+ 0xE4F0, 0, 0, 0, 0, 0, 0xF334, 0xEBEC, /* 0x30 */
+ 0xE2E7, 0xF4CB, 0xF1A9, 0xE04E, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xF591, 0, 0, 0, 0xF65E, /* 0x40 */
+ 0, 0, 0xEA9D, 0xE34B, 0xE5B7, 0xF293, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF538, 0, 0xE99A, 0, /* 0x50 */
+ 0, 0, 0, 0xE0A7, 0, 0xE85E, 0, 0, /* 0x50 */
+ 0, 0xEB76, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xF1A5, 0xF294, 0, 0, 0, 0, 0xE99B, /* 0x60 */
+ 0, 0, 0xF7DC, 0, 0, 0xF4DC, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF794, 0, 0xF59B, /* 0x70 */
+ 0, 0, 0, 0xF993, 0, 0, 0, 0xE34C, /* 0x80 */
+ 0xE8F9, 0xE6B1, 0, 0, 0, 0xE0FC, 0, 0, /* 0x80 */
+ 0, 0xF335, 0xE0FD, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE5F4, 0, 0, 0, 0xE1ED, /* 0x90 */
+ 0xE035, 0, 0, 0xE63B, 0xE352, 0, 0, 0, /* 0xA0 */
+ 0, 0xF34E, 0xE44D, 0xE134, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xF846, 0, /* 0xB0 */
+ 0, 0xE15D, 0, 0xE89C, 0, 0xF65F, 0, 0xEFB8, /* 0xC0 */
+ 0, 0xE797, 0, 0, 0, 0xE15E, 0, 0, /* 0xC0 */
+ 0, 0, 0xE6CD, 0, 0, 0xE561, 0xEFED, 0, /* 0xD0 */
+ 0xE07B, 0xE7E2, 0, 0xF9B2, 0, 0xECAD, 0xE65C, 0xE7B4, /* 0xD0 */
+ 0, 0, 0xEBA7, 0xF263, 0xE353, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF9B3, 0, 0xE5E4, 0, 0, /* 0xF0 */
+ 0xE2E8, 0, 0xF1C3, 0xE342, 0, 0, 0xE2A0, 0xE838 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF760, 0, 0, /* 0x00 */
+ 0xF9D6, 0, 0, 0, 0, 0xF761, 0, 0xF762, /* 0x00 */
+ 0xE963, 0, 0, 0, 0, 0xE9E2, 0xF8F9, 0xE9C1, /* 0x10 */
+ 0, 0xECB5, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF1DD, 0xE254, 0, 0xE0A1, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE9E3, 0, 0, 0, 0, 0xF96D, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF7AF, 0, 0, 0, 0, 0, 0xE49D, /* 0x30 */
+ 0xE2A1, 0xED38, 0, 0xF546, 0xF1A0, 0, 0, 0xECAE, /* 0x40 */
+ 0xEEED, 0xF9C1, 0xE872, 0, 0, 0xE743, 0, 0, /* 0x40 */
+ 0, 0xE9E4, 0xF391, 0xF693, 0xF892, 0, 0, 0xE3F5, /* 0x50 */
+ 0, 0, 0xE85F, 0, 0xE964, 0, 0xE936, 0, /* 0x50 */
+ 0xF2BF, 0, 0, 0, 0, 0, 0xE25F, 0, /* 0x60 */
+ 0xEB69, 0, 0, 0, 0, 0, 0, 0xE7D6, /* 0x60 */
+ 0xF164, 0xF05B, 0, 0, 0xE04F, 0xE5B0, 0, 0xE2E9, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF3ED, 0, 0xE15F, /* 0x70 */
+ 0, 0, 0, 0, 0xED9A, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xED7D, 0, 0, 0, 0, /* 0x90 */
+ 0xE6D8, 0, 0xF9A7, 0, 0, 0, 0, 0xF03B, /* 0x90 */
+ 0xF642, 0, 0, 0, 0, 0xE2F0, 0xF7BD, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xEE96, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE0DB, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF4D1, 0, 0, 0, 0, /* 0xC0 */
+ 0xEFD1, 0xF4A9, 0xE370, 0xEFD2, 0, 0xE873, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xEC62, 0, 0xF632, 0xEBF4, /* 0xD0 */
+ 0, 0, 0, 0xE874, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xEED5, 0xF5BF, 0xE2A2, 0xE1AF, 0xE2A3, 0, 0, /* 0xE0 */
+ 0, 0xE1B0, 0xF3FE, 0xE333, 0xEBAF, 0xF733, 0, 0xE036, /* 0xE0 */
+ 0xF6BB, 0xF47A, 0xEA58, 0xEFD3, 0, 0, 0, 0, /* 0xF0 */
+ 0xEA59 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF9DE, 0xE050, 0, 0, 0, /* 0x00 */
+ 0xF7EA, 0xE3CE, 0xF264, 0, 0xE562, 0xE7A3, 0xF9A8, 0xE6D9, /* 0x00 */
+ 0xF6CE, 0xF84E, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE2D6, 0, 0xE6F0, 0, 0xF0E1, /* 0x10 */
+ 0xF755, 0, 0, 0, 0, 0, 0xE99C, 0, /* 0x20 */
+ 0, 0xE9C3, 0, 0xF7DF, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xEEEF, 0, 0, 0, 0, /* 0x30 */
+ 0xF9E5, 0xF633, 0, 0xE7FC, 0xF9A9, 0, 0xEEEE, 0, /* 0x30 */
+ 0, 0, 0xE5E5, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xF2D0, 0, 0xE1B1, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF6A2, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xF3B2, 0, 0xF3B1, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE1B2, 0, 0xE83B, 0, 0xE037, 0, 0, /* 0x70 */
+ 0, 0, 0, 0xECE2, 0xF8BC, 0xE7A4, 0, 0, /* 0x70 */
+ 0xF24A, 0, 0, 0, 0, 0, 0xF763, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xF8FA, 0, 0xE2A4, 0, /* 0x80 */
+ 0xE99D, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF673, 0, 0, 0, /* 0xA0 */
+ 0xF1AA, 0, 0, 0xF431, 0xE271, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF836, 0, 0, 0, 0, /* 0xB0 */
+ 0xF7E0, 0, 0, 0, 0, 0xF166, 0, 0, /* 0xB0 */
+ 0xED7E, 0xF7A1, 0, 0, 0xF8EF, 0, 0, 0, /* 0xC0 */
+ 0xF7EB, 0xF233, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xF03C, 0, 0, 0, 0xE038, 0, 0, /* 0xE0 */
+ 0xF59C, 0, 0, 0, 0, 0xE1D6, 0xF998, 0, /* 0xE0 */
+ 0, 0, 0xF559, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xF764 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF736, 0, 0xEA5A, 0xF456, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE6DA, 0, /* 0x00 */
+ 0xE4D0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xE755, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF076, /* 0x20 */
+ 0, 0xF4DD, 0, 0, 0, 0xED6A, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xF674, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF694, 0, 0xEAC2, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7FD, /* 0x40 */
+ 0, 0, 0, 0xE198, 0, 0, 0xE4BA, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xED3F, 0, /* 0x50 */
+ 0, 0, 0, 0xF7E1, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF336, 0, 0, 0, /* 0x70 */
+ 0xE0D3, 0, 0, 0, 0xEB4C, 0, 0xF55A, 0xE59C, /* 0x80 */
+ 0, 0xF9AA, 0xF7E2, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xF547, 0xF9C2, 0xF940, 0, 0xF9EC, 0xE072, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF9BD, /* 0xA0 */
+ 0, 0xF077, 0xEAC3, 0xE3D2, 0xE272, 0, 0xE4A4, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xF9AB, 0, 0xEAE0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xF457, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xEEF0, 0, 0xE37E, 0, 0, 0xF4AA, /* 0xD0 */
+ 0, 0, 0, 0xEA5B, 0xF648, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xEBF5, 0xF3B3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF6A3, 0, /* 0x00 */
+ 0, 0xE039, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xE2A5, 0, 0, 0xEAC4, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEBB0, /* 0x20 */
+ 0, 0, 0xF34F, 0, 0xF634, 0, 0xECB6, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF856, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xE391, 0, 0, 0xF9ED, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE9C4, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xF999, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xEE4F, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xEA3D, 0, 0xF84F, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xEDF1, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF1C4, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE435, 0, 0, 0xF9EE, 0, 0, /* 0xC0 */
+ 0, 0xF5B6, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xEBF6, 0xEA5C, 0, 0, 0xF96E, 0, /* 0xD0 */
+ 0xF167, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE1DD, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xE647, 0xE1B3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF765, 0xEDD8, 0, 0, 0, /* 0x00 */
+ 0xE2EA, 0, 0, 0xE2D0, 0, 0xF05C, 0, 0, /* 0x00 */
+ 0, 0, 0xF03E, 0xF03D, 0, 0, 0xE4F1, 0, /* 0x10 */
+ 0xE4A5, 0, 0, 0, 0, 0, 0, 0xF6CF, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xF234, 0, 0, 0, 0, 0xE334, 0, 0, /* 0x20 */
+ 0xF432, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE392, 0, 0, 0, 0, /* 0x30 */
+ 0xF433, 0, 0xF6F8, 0, 0, 0, 0, 0xE343, /* 0x40 */
+ 0, 0, 0xE8A9, 0, 0, 0xE4BB, 0xE07C, 0, /* 0x40 */
+ 0xF3A6, 0xE0D5, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF6E7, 0, 0, 0xE1DE, 0, 0xF6A4, 0, /* 0x60 */
+ 0, 0, 0xF750, 0, 0, 0, 0xE4DD, 0, /* 0x60 */
+ 0xE160, 0, 0, 0, 0, 0xE2A6, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF695, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xEBF7, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE4DC, 0, 0, 0xF8A0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF837, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xF0D9, 0, 0xE2A7, 0xF03F, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xED91, 0, 0, 0, 0xEFB9, /* 0xC0 */
+ 0xF3D8, 0, 0, 0xE768, 0, 0, 0xEB94, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEE44, /* 0xD0 */
+ 0xE99E, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF4F1, 0, 0, 0, 0xECD0, 0, 0, 0xF49D, /* 0xF0 */
+ 0, 0xE8C6, 0xE393, 0, 0xE394 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2DC, 0, 0xE4D1, 0, 0, 0xE141, 0xF6D8, 0, /* 0x00 */
+ 0xE0A8, 0xF0BC, 0xED4E, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xF56C, 0, /* 0x10 */
+ 0, 0xE952, 0, 0, 0xF337, 0, 0, 0xEE50, /* 0x20 */
+ 0, 0, 0xE07D, 0, 0, 0, 0, 0xEF7B, /* 0x20 */
+ 0xEDE8, 0xE953, 0, 0, 0xF1DE, 0xE4F2, 0, 0, /* 0x30 */
+ 0, 0, 0xE199, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xE264, 0xEEAB, 0, 0, 0, 0xE0C3, /* 0x40 */
+ 0, 0xEBB1, 0, 0, 0xF6B2, 0, 0, 0xE4F3, /* 0x50 */
+ 0xE4D2, 0, 0xF5C0, 0, 0, 0, 0xEADD, 0, /* 0x50 */
+ 0, 0xF295, 0xEEF1, 0, 0xF9B4, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF458, 0, 0, /* 0x70 */
+ 0, 0xF4D2, 0, 0, 0xF296, 0, 0xEC63, 0, /* 0x70 */
+ 0, 0, 0, 0xE161, 0, 0xEAEA, 0, 0, /* 0x80 */
+ 0, 0xEFBA, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xE7D7, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF5CD, 0, 0xF3F2, 0xF857, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE7F8, 0xE552, 0, 0, 0, 0, 0xF675, 0, /* 0xA0 */
+ 0, 0, 0, 0xE9C5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xEEF2, 0xF1DF, 0, 0, 0xE05B, 0, /* 0xB0 */
+ 0, 0xE8FA, 0, 0, 0, 0xEF45, 0, 0xE4A6, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xF9B5, 0, /* 0xC0 */
+ 0, 0xF7C9, 0, 0xED72, 0, 0xF8BD, 0, 0, /* 0xD0 */
+ 0xE6A4, 0xE255, 0, 0, 0, 0, 0xE265, 0xE676, /* 0xD0 */
+ 0, 0, 0, 0, 0xEDBD, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xEA5D, 0xF195, 0, 0, 0xF1E0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xF17C, 0xF8BE, 0xEAEB, 0, 0xEBF8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF7BE, /* 0x00 */
+ 0, 0, 0, 0, 0xE395, 0xEB3A, 0xEF72, 0, /* 0x10 */
+ 0, 0xEC64, 0xE49F, 0, 0xEDA8, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xE7D3, 0, 0, 0, 0, 0xE4DE, /* 0x20 */
+ 0, 0xF548, 0xF6BC, 0xE99F, 0, 0xEF7C, 0xED77, 0, /* 0x20 */
+ 0, 0xECF7, 0, 0, 0, 0, 0, 0xF138, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xF893, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xEDF2, 0, 0, 0xE396, /* 0x40 */
+ 0xE43F, 0xE975, 0, 0, 0, 0, 0xE335, 0xF3B4, /* 0x40 */
+ 0xF941, 0xE19A, 0, 0, 0xE9C6, 0xF861, 0, 0xF6DF, /* 0x50 */
+ 0, 0, 0xF838, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF297, 0, 0xEA5E, 0, 0, 0, 0, 0xEEF3, /* 0x60 */
+ 0, 0, 0xF6AC, 0xF0C4, 0xF1E1, 0xEB3B, 0xE9C7, 0, /* 0x60 */
+ 0, 0, 0, 0xE443, 0xE44F, 0, 0, 0, /* 0x70 */
+ 0xE05C, 0, 0, 0, 0, 0xF8BF, 0, 0, /* 0x70 */
+ 0, 0, 0xEDFD, 0xE9E5, 0xE75D, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xF196, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xE397, 0, 0, 0xEF7D, 0xE362, /* 0x90 */
+ 0, 0xE7D8, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF676, 0, 0, /* 0xA0 */
+ 0xE8AA, 0, 0, 0, 0xF6E0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE769, 0, 0xF533, 0, 0, 0xF56D, 0, /* 0xB0 */
+ 0, 0, 0, 0xF2D1, 0, 0, 0xE7B5, 0, /* 0xC0 */
+ 0, 0xF1AB, 0, 0xECB7, 0, 0, 0, 0, /* 0xC0 */
+ 0xF24B, 0xE1B4, 0, 0xEB95, 0xF05D, 0, 0, 0, /* 0xD0 */
+ 0, 0xF197, 0xEF7E, 0, 0xE0A9, 0xF3AF, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE05D, 0, /* 0xE0 */
+ 0xF139, 0, 0xF47B, 0, 0xF9EF, 0, 0xF7F3, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xEE51, 0, 0, 0xF168, 0, 0, 0, 0xF1AC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF05E, 0, 0xEF6F, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xEA5F, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE436, 0, 0, 0xEEF4, 0xE3D6, 0, 0, 0xEE52, /* 0x10 */
+ 0xECE3, 0, 0, 0, 0, 0xED40, 0, 0, /* 0x20 */
+ 0, 0xE744, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xF635, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF4DE, 0, 0, 0, /* 0x30 */
+ 0, 0xE6A5, 0, 0, 0, 0, 0xF6E8, 0, /* 0x40 */
+ 0, 0xEF56, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xF8E6, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE9E6, 0, 0, 0, 0xE9A0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE76A, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE83C, 0xF040, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xECB8, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE03A, 0xEBF9, 0, 0xF041, 0, 0, 0, /* 0xC0 */
+ 0, 0xF47C, 0, 0, 0xF87E, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xF265, 0, 0, 0, 0, 0xF7F4, 0, /* 0xE0 */
+ 0, 0xE47C /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF8FB, 0, 0, /* 0x00 */
+ 0, 0xF9F0, 0, 0xEB4D, 0xE273, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xF756, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xEA3E, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xEAC5, 0, 0, 0xEDBE, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xF1AD, 0xF87A, 0, 0, 0xE1EE, 0xF1A6, 0, 0xF1AE, /* 0x50 */
+ 0xF37D, 0, 0xE9A1, 0, 0xF1AF, 0xF99A, 0, 0xE77B, /* 0x50 */
+ 0, 0, 0, 0xE19B, 0xE1B5, 0, 0, 0, /* 0x60 */
+ 0, 0xF839, 0, 0xEBDD, 0, 0, 0, 0, /* 0x60 */
+ 0xEC65, 0xF1CF, 0, 0, 0, 0xE9A2, 0, 0, /* 0x70 */
+ 0xF7CA, 0, 0xF078, 0, 0xEDED, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE4EB, 0, 0xEFD4, /* 0x80 */
+ 0xEBFA, 0xED5C, 0, 0xEBE4, 0xEF57, 0, 0, 0xE26B, /* 0x80 */
+ 0, 0, 0, 0xE965, 0, 0xF6B5, 0xF995, 0xF395, /* 0x90 */
+ 0xE23F, 0xF3B5, 0xF2D2, 0xEF58, 0xF0F1, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE0D4, 0xEB4E, 0xECF8, 0xF079, 0xF942, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xEB96, 0, 0xE2E0, 0, /* 0xA0 */
+ 0xF235, 0, 0, 0xF83A, 0xEE53, 0xEBB2, 0xE03B, 0, /* 0xB0 */
+ 0xECE4, 0xEFBB, 0, 0, 0, 0, 0, 0xEC66, /* 0xB0 */
+ 0xF4F2, 0, 0xF266, 0xF042, 0xE398, 0xF169, 0xE85B, 0xE2A8, /* 0xC0 */
+ 0, 0, 0, 0, 0xE9A3, 0, 0, 0, /* 0xC0 */
+ 0xE76B, 0, 0xF7CE, 0xEFD5, 0xECD1, 0, 0, 0xE44C, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE73C, 0xF4CC, /* 0xD0 */
+ 0, 0xE1FB, 0xF666, 0, 0xEEF5, 0xEF91, 0xECF9, 0xE44B, /* 0xE0 */
+ 0xF4F3, 0xECFB, 0, 0xEA60, 0xE240, 0, 0xE699, 0xF3D9, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF5C1, 0xE954, 0, /* 0xF0 */
+ 0xF5BB, 0, 0xEA61 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE976, 0, 0, 0xEA62, 0, 0, 0xF1E2, /* 0x00 */
+ 0xF298, 0xF05F, 0xF37E, 0xECFC, 0, 0xE4DF, 0xE4F4, 0xEBB3, /* 0x00 */
+ 0, 0xEBB4, 0, 0, 0, 0, 0xF563, 0, /* 0x10 */
+ 0, 0xEAC6, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xEFD6, 0, 0, 0, /* 0x20 */
+ 0xE8AB, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xF636, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xECB9, 0xF0C5, 0xF539, 0xE1B6, 0xE49B, 0, 0xE83D, 0xE473, /* 0x30 */
+ 0xE2D1, 0, 0, 0, 0, 0xE0DC, 0xE19C, 0, /* 0x40 */
+ 0xE2DD, 0, 0, 0xEF39, 0, 0xECBB, 0xECBA, 0, /* 0x40 */
+ 0, 0xEB6A, 0, 0, 0, 0xF299, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE943, 0, 0, 0, 0, /* 0x50 */
+ 0xE4F5, 0, 0xE6A6, 0, 0xF645, 0xE6DB, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xEBD5, 0, 0, 0xE57A, /* 0x60 */
+ 0, 0xEAA3, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF9DF, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE399, 0xF1D4, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE0AA, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xED6B, 0, 0xEBFB, 0xE0A2, 0, 0, 0, /* 0xA0 */
+ 0, 0xE4E0, 0, 0xED4F, 0, 0xF8C0, 0, 0xE84E, /* 0xB0 */
+ 0xED5D, 0, 0xE649, 0, 0, 0, 0xF2C0, 0, /* 0xB0 */
+ 0xEBFC, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xF649, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xEAC7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xED41, 0, 0, 0, 0, 0, 0, 0xE977, /* 0xE0 */
+ 0xE978, 0, 0, 0, 0xF866, 0, 0xE4F6, 0, /* 0xF0 */
+ 0, 0, 0, 0xF3DA, 0, 0xF894 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEC9F, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE5CF, 0xE39A, 0, /* 0x00 */
+ 0, 0xE1DF, 0, 0, 0xF5CB, 0, 0xED92, 0xE0AB, /* 0x10 */
+ 0, 0xE6C4, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xECA0, /* 0x20 */
+ 0, 0xE9DA, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xE83E, 0xE07E, 0, 0, 0, /* 0x40 */
+ 0xE5B9, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xECA1, 0, 0, 0xEF73, 0, 0, 0xF4AB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2A9, /* 0x80 */
+ 0, 0, 0, 0xE4F7, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xE593, 0, 0, /* 0x90 */
+ 0xE274, 0, 0xEF94, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xEDF5, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xEEAE, 0, 0xE64A, 0, 0xEAEC, 0xED50, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xEF74, 0, 0, /* 0xC0 */
+ 0, 0, 0xE745, 0, 0, 0, 0xED6C, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xF549, 0xF3B6, 0, /* 0xD0 */
+ 0, 0xEC6E, 0xEBB5, 0, 0, 0xE1EF, 0xF3A7, 0xE275, /* 0xE0 */
+ 0xE0DD, 0, 0, 0xE7E3, 0, 0, 0xF4AC, 0, /* 0xE0 */
+ 0, 0xE39B, 0xF13B, 0xEA63, 0xF6E9, 0, 0, 0xF7F5, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xEBDE, 0xE0EE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xECBC, 0xF766, 0, 0, 0xE8EE, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xF9F1, 0, 0, 0, /* 0x00 */
+ 0, 0xF6B6, 0, 0, 0, 0, 0xF56E, 0, /* 0x10 */
+ 0, 0xF47D, 0, 0xE8D9, 0, 0xF338, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xEBFD, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xEA64, 0, 0xEB3C, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xF1E3, 0, 0, 0xE4E1, 0, /* 0x30 */
+ 0xEAC8, 0, 0, 0, 0, 0xE7B6, 0, 0xF9AC, /* 0x30 */
+ 0xF2D3, 0, 0, 0, 0xED51, 0xF77B, 0, 0xE8AC, /* 0x40 */
+ 0, 0, 0, 0, 0xF956, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE73D, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF64A, /* 0x50 */
+ 0, 0xE8DF, 0xE4D3, 0xF757, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE05E, 0xF751, 0xE444, 0, 0, 0xE944, /* 0x70 */
+ 0xF849, 0xE05F, 0, 0xF943, 0xF07A, 0xF07B, 0xE39C, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF1E4, 0, 0, 0xE9E7, /* 0x80 */
+ 0, 0, 0xEAC9, 0, 0, 0, 0, 0xEAED, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xF24C, 0, 0xF2C1, /* 0x90 */
+ 0, 0, 0xE162, 0, 0xE9A4, 0, 0, 0, /* 0x90 */
+ 0xEACA, 0, 0, 0, 0, 0, 0xE4F8, 0xF3A8, /* 0xA0 */
+ 0, 0, 0, 0xE1B7, 0, 0xF2D4, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xED6D, 0xEAEE, 0xE0AC, /* 0xB0 */
+ 0xEFBC, 0, 0, 0, 0, 0, 0xF07C, 0, /* 0xB0 */
+ 0, 0, 0xEACB, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xF7BF, 0xE63F, 0xE5C6, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xE2AA, 0, 0, 0xE239, 0, 0, 0xE69A, 0, /* 0xD0 */
+ 0, 0, 0xF3B7, 0xF29A, 0, 0, 0, 0xE7D9, /* 0xD0 */
+ 0xF4DF, 0, 0xF758, 0xE256, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE5E6, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF576, 0, 0, 0xEE55, 0xF2D5, /* 0xF0 */
+ 0, 0, 0xE0EF, 0xF96F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE937, 0, 0, 0xE677, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF759, 0, 0, 0, 0, 0xECD2, /* 0x00 */
+ 0, 0xECBD, 0, 0xE2E1, 0xF350, 0xF16A, 0, 0xE9D7, /* 0x10 */
+ 0xF8F0, 0, 0, 0xF13C, 0, 0, 0, 0xF339, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xF867, 0xF8C1, /* 0x20 */
+ 0, 0xE450, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xEDB0, 0, 0, 0, 0xF1E5, 0, 0, /* 0x30 */
+ 0, 0, 0xE0AD, 0, 0xF7B0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xF6A5, 0, 0xE0AE, 0, 0xE83F, 0, 0xE746, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xE4A7, 0xF8B2, /* 0x50 */
+ 0, 0xF9C4, 0, 0xF13D, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xF8A1, 0, 0, 0, 0xEDE9, 0xEFEE, /* 0x60 */
+ 0, 0xF4F4, 0xF795, 0xF351, 0xEA3F, 0xF740, 0, 0, /* 0x60 */
+ 0xF4E0, 0xEEAF, 0, 0, 0, 0, 0, 0xE8AD, /* 0x70 */
+ 0, 0xEE45, 0, 0, 0xF7A8, 0, 0, 0xE9D8, /* 0x70 */
+ 0xEF69, 0xF2D6, 0, 0, 0, 0xE4E2, 0, 0xEC6F, /* 0x80 */
+ 0, 0, 0xF970, 0xE6C8, 0xF9AD, 0, 0, 0, /* 0x80 */
+ 0xEAEF, 0xE163, 0xE4F9, 0, 0, 0, 0, 0xE592, /* 0x90 */
+ 0xE8C7, 0xEA65, 0, 0, 0, 0, 0xF396, 0, /* 0x90 */
+ 0xE5D0, 0xEDD9, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF957, 0xE966, 0xEC70, 0, 0, 0, 0xE840, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xF4A3, 0, 0xE4EC, /* 0xB0 */
+ 0, 0xF55B, 0, 0, 0, 0xF9C5, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xECFD, 0, 0xF7B1, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE39D, 0xF16B, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xF5BC, 0xF434, /* 0xD0 */
+ 0xE75E, 0xE75F, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xF5F7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF671, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE447, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xF8EC, 0, 0xE9C8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xED78, /* 0x00 */
+ 0, 0, 0xE451, 0, 0, 0, 0xF767, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xE64B, 0xEA66, 0, 0, /* 0x10 */
+ 0xF6BD, 0xF13E, 0, 0, 0, 0xE371, 0, 0xEB97, /* 0x20 */
+ 0xF043, 0, 0xE266, 0, 0, 0, 0, 0xE135, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF198, 0xEC71, 0xECBE, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF958, 0, 0, /* 0x40 */
+ 0xE1F0, 0, 0xF7F6, 0, 0, 0xEAF0, 0, 0, /* 0x50 */
+ 0, 0xEDBF, 0, 0, 0, 0xE24F, 0, 0, /* 0x50 */
+ 0, 0, 0xF971, 0xF1B0, 0xF9D1, 0xF64B, 0, 0, /* 0x60 */
+ 0xF7CF, 0xF0DA, 0xE051, 0, 0xE448, 0xE1F1, 0, 0xECD3, /* 0x60 */
+ 0xF9E6, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xEE7D, 0, 0, /* 0x80 */
+ 0, 0xECFA, 0, 0, 0xF33A, 0xF7D0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xF972, 0, 0xF737, 0, /* 0x90 */
+ 0, 0, 0xEBE5, 0xF29B, 0, 0, 0, 0xEEF6, /* 0x90 */
+ 0xF07D, 0, 0, 0xF944, 0xF5C2, 0, 0, 0xE6DC, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF397, 0, 0xE9E8, 0xE4ED, 0xF5FC, 0, 0xE84F, 0, /* 0xB0 */
+ 0xE19D, 0, 0, 0, 0xE4FA, 0xF534, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xF2D7, 0, 0xE553, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF8E3, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xF8ED, 0, 0xEB3D, 0, 0, 0xF07E, /* 0xD0 */
+ 0xF8B3, 0xED52, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF677, 0xE46D, 0, 0xEACC, 0, 0, 0xF959, 0, /* 0xF0 */
+ 0, 0xEDA9, 0xEB98, 0xF643 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEBFE, 0, 0, 0, 0, 0xE0F0, 0, /* 0x00 */
+ 0xF091, 0xF092, 0, 0, 0, 0xE850, 0xF744, 0xF0F2, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xED53, 0, 0, /* 0x10 */
+ 0, 0, 0xEFD7, 0xED93, 0, 0, 0, 0xE091, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE267, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xF95A, 0, 0, 0, 0xF4E1, 0, 0, 0xE0C4, /* 0x30 */
+ 0, 0, 0, 0, 0xECE5, 0, 0xE0C5, 0xF044, /* 0x30 */
+ 0, 0, 0xEFBD, 0, 0xE6C9, 0, 0, 0xF0DB, /* 0x40 */
+ 0xF1B1, 0, 0xE153, 0xF6BE, 0xF95B, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF796, 0, 0xE7B7, 0, 0, /* 0x50 */
+ 0xF4D3, 0xF4D4, 0, 0, 0, 0xF6E4, 0, 0xF6D1, /* 0x50 */
+ 0, 0, 0xE747, 0xE241, 0xE052, 0, 0, 0xF8B4, /* 0x60 */
+ 0xE0C6, 0, 0, 0xF398, 0, 0, 0xE5E7, 0, /* 0x60 */
+ 0xF060, 0, 0, 0, 0, 0, 0xE164, 0xE0AF, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF53A, 0xEFAF, 0, /* 0x70 */
+ 0, 0xF5C3, 0xEFD8, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE9E9, 0, 0, 0, 0xF3F3, 0, /* 0x80 */
+ 0xE5FB, 0xEA4B, 0, 0, 0xF59D, 0, 0, 0, /* 0x90 */
+ 0xF9F3, 0xF9F2, 0xF6A6, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE9C9, 0, 0, 0xE563, /* 0xA0 */
+ 0, 0xE138, 0, 0xE851, 0xE165, 0, 0xE7E4, 0, /* 0xA0 */
+ 0, 0, 0xF85A, 0, 0, 0, 0xEDE3, 0, /* 0xB0 */
+ 0, 0, 0xE4BC, 0, 0, 0, 0xE092, 0, /* 0xB0 */
+ 0, 0, 0, 0xE354, 0, 0, 0, 0xE060, /* 0xC0 */
+ 0xF83B, 0xF0EB, 0xEEF8, 0xE7E5, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE3D7, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xF4A4, 0, 0, 0, 0xE59D, 0xF973, /* 0xF0 */
+ 0xF868, 0, 0xF4D5, 0, 0xE2AB, 0, 0, 0xF0F3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5FC, 0, 0, 0, 0, 0, 0, 0xE4D4, /* 0x00 */
+ 0xE1FC, 0, 0xE7E6, 0, 0xEC9B, 0xEC31, 0xF0D4, 0, /* 0x00 */
+ 0xEB99, 0xED42, 0xE19E, 0, 0, 0, 0xF8E4, 0, /* 0x10 */
+ 0, 0, 0xF53B, 0, 0, 0, 0, 0xE34D, /* 0x10 */
+ 0, 0xE093, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF2B8, 0, 0, 0, 0xE6C0, 0, /* 0x20 */
+ 0xF29C, 0xF9F4, 0, 0, 0xE4E3, 0, 0xF8C2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE5E8, 0xE8AE, /* 0x30 */
+ 0xEBB6, 0xF747, 0, 0, 0, 0, 0, 0xEB4F, /* 0x40 */
+ 0xF8C3, 0xE9EA, 0, 0xEC32, 0, 0xF236, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF678, 0, 0, 0, 0, /* 0x50 */
+ 0xF697, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xE9CA, 0, /* 0x60 */
+ 0, 0xE372, 0, 0, 0, 0, 0xE9A6, 0, /* 0x70 */
+ 0, 0xE9EB, 0, 0, 0xED9B, 0, 0, 0xECAF, /* 0x70 */
+ 0xE39E, 0, 0, 0, 0xF59E, 0, 0, 0, /* 0x80 */
+ 0, 0xE14C, 0xF6EA, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xEDE4, 0xEAF1, 0, 0, 0xF6E1, 0, 0xF7F7, /* 0x90 */
+ 0xF2B9, 0, 0, 0xF768, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF7A9, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xF769, 0, 0, 0, 0xF24D, 0, 0, /* 0xB0 */
+ 0, 0xE756, 0, 0, 0xED73, 0xF5CE, 0, 0, /* 0xB0 */
+ 0, 0, 0xE9D9, 0, 0, 0, 0, 0xE7E7, /* 0xC0 */
+ 0xE449, 0xE5C3, 0, 0, 0xE875, 0xE860, 0, 0xE3D9, /* 0xC0 */
+ 0xE268, 0, 0xE0DE, 0xF53C, 0xE89D, 0, 0xF679, 0xEF95, /* 0xD0 */
+ 0xE2AC, 0xF392, 0, 0xF59F, 0xE8C8, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE250, 0xECD4, 0xE3CF, 0xF3F5, /* 0xE0 */
+ 0, 0xE1F2, 0, 0xE2EB, 0, 0, 0, 0xE1B8, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0xECA6, 0xE3DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF435, 0, 0, 0, 0, 0, 0xF436, /* 0x00 */
+ 0, 0xED5E, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xE4FB, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xF3A9, 0, 0, 0, 0xF459, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xF2D8, 0xEE59, 0, 0xE748, 0xF895, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF4B5, 0, 0, 0xF734, 0, 0, 0xE3F3, /* 0x40 */
+ 0xEE58, 0, 0, 0, 0, 0xF76A, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE979, /* 0x60 */
+ 0xEA67, 0, 0, 0, 0, 0, 0xE0DF, 0, /* 0x60 */
+ 0, 0, 0xE2EC, 0, 0, 0, 0, 0xF56F, /* 0x70 */
+ 0, 0, 0xE3F4, 0xE44A, 0, 0, 0, 0xEAF2, /* 0x70 */
+ 0, 0, 0, 0xEBB7, 0, 0, 0, 0, /* 0x80 */
+ 0xEC33, 0xE4FC, 0, 0, 0xF1E6, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE8C9, 0, 0, 0, 0xED9C, 0, /* 0x90 */
+ 0xE2DE, 0, 0, 0xE260, 0, 0, 0, 0, /* 0x90 */
+ 0xE5D3, 0xF4F5, 0xF6AE, 0, 0, 0xF2C8, 0, 0xE1F3, /* 0xA0 */
+ 0xF5CF, 0xEDF3, 0xF352, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xE061, 0, 0, 0, 0xF093, 0, 0xE336, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7DA, /* 0xC0 */
+ 0xF33B, 0, 0, 0, 0, 0, 0xF0E7, 0, /* 0xD0 */
+ 0, 0, 0xEDC0, 0xF945, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xED54, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE139, 0xF9C6, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xF045, 0, 0xEDAA, 0xEABA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEBDF, 0, 0xE861, /* 0x00 */
+ 0, 0, 0, 0, 0xEBB8, 0, 0xEF96, 0xE4FD, /* 0x10 */
+ 0, 0, 0, 0, 0xEC34, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xF45A, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE876, 0xF6B3, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xF9CD, 0, 0, 0, 0xF4B6, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF267, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF5C4, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE734, 0, 0, 0, 0, 0, 0xF437, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE7B8, 0xE7B9, 0xF2C9, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE65E, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF6CB, 0xEAAE, 0xEF97, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE445, 0, 0, 0, 0xE4D5, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF55C, 0xE89E, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE7E8, 0, 0xF6EB, 0xF5C9, 0, /* 0xA0 */
+ 0xF4BC, 0, 0xE862, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE4B5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xEF46, 0, 0, 0xE65F, 0xF54A, 0, 0xF6C9, /* 0xC0 */
+ 0, 0, 0xE13A, 0, 0, 0xF353, 0xE166, 0, /* 0xC0 */
+ 0, 0, 0xE363, 0, 0xE4BD, 0, 0, 0, /* 0xD0 */
+ 0xE8FB, 0, 0xE0E0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE4E4, 0xF699, 0, 0, 0xE5BA, 0xF4CD, 0xE0E1, /* 0xE0 */
+ 0, 0, 0, 0, 0xF0F4, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xF53D, 0, 0xF93A, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xF6EC, 0, 0, 0, 0xEF98 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE877, 0, 0, 0, 0xF6CC, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xEDC1, 0, 0, 0, 0, 0xEB7E, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE5FD, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE276, 0xF93B, 0xE5BB, 0, 0, 0xF438, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xEC35, 0xE1B9, /* 0x30 */
+ 0xF094, 0xE0C7, 0, 0xE1F4, 0, 0, 0xE8AF, 0xF2D9, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE1BA, 0, 0, /* 0x40 */
+ 0xF99B, 0, 0, 0, 0, 0xEAF3, 0xE277, 0xE852, /* 0x40 */
+ 0, 0xE2AD, 0, 0, 0, 0, 0xEEF9, 0xF738, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xF4E2, 0, /* 0x50 */
+ 0, 0, 0xE094, 0xEAA4, 0, 0, 0xE554, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE167, 0xEDC2, 0, 0, /* 0x60 */
+ 0, 0, 0xE1BB, 0, 0xF2DA, 0xF268, 0, 0xE9A7, /* 0x70 */
+ 0xEC36, 0, 0, 0, 0, 0, 0xEB50, 0, /* 0x70 */
+ 0, 0, 0xE640, 0xF75A, 0, 0xF99C, 0, 0xE7FE, /* 0x80 */
+ 0, 0, 0, 0, 0xEA40, 0, 0, 0, /* 0x80 */
+ 0xE9EC, 0xE878, 0, 0, 0, 0, 0, 0xE570, /* 0x90 */
+ 0, 0xE69B, 0, 0xE1D7, 0xEA68, 0, 0, 0xF49A, /* 0x90 */
+ 0, 0xED66, 0, 0, 0xE355, 0xF53E, 0, 0xE9A8, /* 0xA0 */
+ 0, 0, 0, 0xF1C5, 0xF4D6, 0, 0, 0xEA69, /* 0xA0 */
+ 0xECE6, 0, 0, 0, 0, 0, 0, 0xE4A8, /* 0xB0 */
+ 0, 0xE8B0, 0, 0, 0xEDDA, 0xECBF, 0, 0, /* 0xB0 */
+ 0, 0xE8B1, 0, 0, 0, 0xE5E9, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xEB51, 0xF2DB, 0, 0, 0xF379, /* 0xC0 */
+ 0, 0, 0xE6B2, 0, 0, 0, 0, 0xE39F, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xE7E9, 0, 0, 0xE3A0, 0, 0xF17D, 0xE4A9, 0, /* 0xE0 */
+ 0xF439, 0xF354, 0, 0, 0xEC72, 0xEFEF, 0, 0, /* 0xE0 */
+ 0, 0xF7D1, 0, 0, 0xEFD9, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xEF6A, 0xE853, 0xE854, 0xE555, 0, 0xEEFA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1E0, 0xECB0, /* 0x00 */
+ 0, 0xE8B2, 0xF8C4, 0, 0xF4E3, 0, 0xE7A5, 0xF8E7, /* 0x00 */
+ 0xE9CB, 0xE364, 0, 0xEE46, 0xEB3E, 0xF9DA, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE945, 0xEB9A, /* 0x10 */
+ 0xEEB1, 0, 0, 0, 0, 0xF5F0, 0, 0xE76C, /* 0x20 */
+ 0xF1C6, 0, 0, 0, 0, 0xEBB9, 0, 0xECC0, /* 0x20 */
+ 0xF7C0, 0xEFF0, 0, 0, 0xE7DB, 0, 0xF4E4, 0, /* 0x30 */
+ 0, 0, 0xE946, 0xED79, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF355, 0xECC1, 0xF95C, 0xF95D, 0, 0, 0, /* 0x40 */
+ 0, 0xF45B, 0, 0xF45C, 0, 0, 0, 0xED5F, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF3DB, 0, 0xF869, 0, 0xF3B8, 0xF9F5, 0xEB9B, /* 0x50 */
+ 0, 0, 0, 0, 0xEEFB, 0xF947, 0xF974, 0xF8C5, /* 0x60 */
+ 0xECE7, 0xE749, 0, 0xF69A, 0, 0, 0xE955, 0xE168, /* 0x60 */
+ 0, 0, 0, 0xEB3F, 0xF577, 0, 0xF2DC, 0xE2FC, /* 0x70 */
+ 0xF2DD, 0, 0xF43A, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF9BE, 0, 0, 0xE03C, /* 0x80 */
+ 0xF9BB, 0xF9C7, 0, 0, 0, 0, 0xEEB2, 0, /* 0x80 */
+ 0xF061, 0xEAF4, 0, 0, 0, 0, 0xE3EC, 0xED6E, /* 0x90 */
+ 0xEDC3, 0, 0, 0, 0, 0xE7A6, 0, 0, /* 0x90 */
+ 0xE1BC, 0, 0xF4E5, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF1D5, 0, 0, 0xE7BA, 0, /* 0xA0 */
+ 0, 0, 0xF1E7, 0xF8B5, 0xF77C, 0, 0, 0, /* 0xB0 */
+ 0, 0xEB77, 0, 0xE169, 0, 0, 0xE556, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xEEA5, 0, 0xE5F5, 0xE4BE, /* 0xC0 */
+ 0, 0xF99D, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xED94, 0, /* 0xD0 */
+ 0, 0xEAF5, 0, 0, 0xEF9A, 0xF77D, 0, 0, /* 0xD0 */
+ 0xE257, 0, 0, 0, 0, 0, 0xF9F6, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xEF68, 0, 0xE1D8, 0xEED6, 0xE16A, 0, 0, 0xE073, /* 0xF0 */
+ 0xEAF6, 0xF357, 0xF356, 0, 0xE74A, 0, 0xF3F4, 0xF592 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5CC, 0, 0, 0xF975, 0, 0, 0, 0, /* 0x00 */
+ 0xF055, 0xF095, 0, 0xE9DB, 0, 0xE967, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xEA9F, 0xF49B, 0, 0xE5C7, /* 0x10 */
+ 0, 0, 0, 0xE760, 0, 0xF358, 0xE3A1, 0xE3A2, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE7D4, 0xE678, /* 0x20 */
+ 0xE7CA, 0, 0xE841, 0xE757, 0xE972, 0xF4CE, 0xF5F4, 0, /* 0x20 */
+ 0, 0xF3B9, 0, 0, 0xE863, 0, 0xF67A, 0, /* 0x30 */
+ 0, 0, 0xE2F5, 0, 0, 0xF9AE, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE062, 0, /* 0x40 */
+ 0, 0xEAB4, 0, 0, 0, 0, 0xE6DD, 0xF84A, /* 0x40 */
+ 0xF237, 0xF5BD, 0, 0xF797, 0, 0, 0xF1E8, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xE571, 0, 0xE3A3, 0xEBD6, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF7F8, 0, 0xE8CA, /* 0x60 */
+ 0xE0F9, 0xE564, 0, 0xE7DC, 0, 0xF24E, 0, 0xF6ED, /* 0x70 */
+ 0, 0, 0, 0xE47E, 0, 0, 0xEBE6, 0xF6F9, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE9ED, /* 0x80 */
+ 0, 0xEF6B, 0, 0xE8B3, 0, 0, 0, 0xE3F7, /* 0x80 */
+ 0xEB40, 0, 0, 0xE572, 0, 0xF667, 0, 0xE6F9, /* 0x90 */
+ 0, 0, 0xE76D, 0, 0xE1FD, 0xF43B, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1BD, /* 0xA0 */
+ 0xF752, 0, 0, 0xF43C, 0, 0, 0xE03D, 0xE03E, /* 0xB0 */
+ 0xE2AE, 0, 0, 0, 0, 0, 0xECC2, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE947, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8DA, /* 0xC0 */
+ 0xE7BB, 0xE095, 0xF663, 0xEE9A, 0xF097, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xF098, 0, 0, 0xF69B, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE2AF, 0, 0, 0xE063, 0, 0, 0xE03F, /* 0xE0 */
+ 0xE440, 0xF3BA, 0, 0xE6B3, 0xECC3, 0xF4FD, 0xEA6A, 0, /* 0xF0 */
+ 0, 0, 0, 0xEA6B, 0, 0, 0xF2DE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEC73, 0xF29D, 0, 0, 0xEAF7, 0xE6CA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE278, 0xE8DB, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF3BB, 0, 0, 0, 0, 0xEFF1, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xF847, 0xE356, 0, 0, 0xE13B, 0xF238, 0, 0, /* 0x30 */
+ 0xE0FA, 0xF7F9, 0xE19F, 0xE4FE, 0, 0, 0, 0, /* 0x40 */
+ 0xED60, 0, 0, 0, 0, 0, 0xF47E, 0, /* 0x40 */
+ 0xE565, 0xEACD, 0, 0xF948, 0xE3D0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF45D, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xF6D2, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE064, /* 0x70 */
+ 0, 0xE5D9, 0, 0, 0, 0xE76E, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1D9, /* 0x80 */
+ 0, 0, 0, 0xF239, 0xF64C, 0, 0, 0xE16B, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF359, 0, 0xF99E, /* 0x90 */
+ 0, 0xEF59, 0xF5A0, 0, 0, 0, 0, 0xEEFC, /* 0xA0 */
+ 0xE6DE, 0, 0, 0, 0, 0xEA6C, 0, 0xF33C, /* 0xA0 */
+ 0xE1A0, 0xE1E1, 0, 0xEBBA, 0, 0xE8EF, 0xE842, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE3A5, 0xE948, 0, 0, /* 0xC0 */
+ 0, 0xE798, 0, 0xE3A4, 0, 0xE1E2, 0, 0, /* 0xC0 */
+ 0, 0, 0xE97A, 0, 0, 0xF399, 0, 0xF35A, /* 0xD0 */
+ 0xE34E, 0, 0xE9DC, 0, 0, 0, 0, 0xE566, /* 0xD0 */
+ 0xE4D6, 0, 0, 0, 0, 0, 0, 0xF1D0, /* 0xE0 */
+ 0xE1A1, 0, 0, 0, 0, 0, 0xEAB5, 0, /* 0xE0 */
+ 0, 0, 0xEAF8, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xE531, 0xE242 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEF5A, 0, 0, 0, 0, 0xF0F5, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xECD5, 0xF5D0, 0, /* 0x00 */
+ 0, 0, 0xF5A1, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7A7, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xEDAB, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xEE5B, 0, 0xF5F1, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xEDC5, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF7A3, 0xEB6B, 0xF67B, 0, 0xE0F1, /* 0x50 */
+ 0, 0xE7EA, 0xF5A2, 0, 0, 0, 0xE6D1, 0, /* 0x50 */
+ 0xE3F8, 0xF09A, 0xF09B, 0xE843, 0, 0, 0, 0, /* 0x60 */
+ 0xF2DF, 0, 0, 0xF3EF, 0, 0xEDF6, 0xF24F, 0xEC74, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE34F, 0, 0xF83C, /* 0x70 */
+ 0xF5D1, 0xEEB3, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xEFBE, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF45E, 0xE8B4, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF95E, 0, 0xE9EE, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xEEB4, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE6B4, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF6B4, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE1BE, 0, 0xE879, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE2B0, 0xF6D9, 0xF4E6, 0, 0, /* 0xC0 */
+ 0xE269, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE23A, 0, 0xE0C8, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xE337, 0, 0xF35B, 0, 0xE357 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xED55, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE8E0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xE5DA, 0, 0xE6A7, 0, 0, 0, 0xF250, /* 0x10 */
+ 0, 0xF798, 0, 0, 0, 0, 0xF5D2, 0xF1E9, /* 0x10 */
+ 0, 0xE7BC, 0, 0xEDC6, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF5A3, 0, 0, /* 0x30 */
+ 0xE864, 0xEC37, 0xF8FC, 0, 0, 0xF3DC, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE096, 0, 0, 0, /* 0x40 */
+ 0xEF9C, 0, 0, 0xE279, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xEFF8, 0xEC75, 0, 0, 0, 0, /* 0x50 */
+ 0xE349, 0xE594, 0, 0, 0, 0, 0, 0xE3A6, /* 0x50 */
+ 0, 0xEACE, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xF996, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE4AA, 0, 0, 0, 0xE13C, 0, 0, 0, /* 0x80 */
+ 0, 0xF2E0, 0, 0, 0, 0xEDE5, 0xE365, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8FC, /* 0x90 */
+ 0, 0, 0, 0, 0xF976, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE0FE, 0xF1EA, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xEA41, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF7E3, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE532, 0xE2F6, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE660, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE5EA, 0xF3EE, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xF85B, 0, /* 0xF0 */
+ 0, 0, 0, 0xEDA1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5B1, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE2ED, 0, 0xF1EB, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE5B2, 0, 0, 0, 0xE5BC, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF9E2, 0xF4AD, 0, 0xF9DB, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xEFB0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xE3A7, 0, 0, 0xF9E3, 0xE243, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xF9E4, 0xF85E, /* 0x40 */
+ 0, 0, 0, 0, 0xE040, 0, 0xF6A7, 0, /* 0x40 */
+ 0xE2B1, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEE32, /* 0x50 */
+ 0, 0xF946, 0xF43D, 0xF2E1, 0xF4AE, 0xE956, 0xE7EB, 0, /* 0x60 */
+ 0, 0, 0xEF70, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xEBA8, 0, 0, 0, 0, 0xE5F6, /* 0x70 */
+ 0xE2FD, 0, 0, 0xEA6D, 0, 0, 0, 0xE7D1, /* 0x70 */
+ 0, 0, 0, 0xED7A, 0xF45F, 0, 0xF6BF, 0, /* 0x80 */
+ 0, 0xEC76, 0xEC38, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xECD6, 0, /* 0x90 */
+ 0xF1D1, 0, 0, 0, 0, 0, 0xEFF9, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xE641, 0xEA42, /* 0xA0 */
+ 0, 0, 0xEB78, 0, 0, 0xE4AB, 0, 0xF0DC, /* 0xB0 */
+ 0, 0, 0xEAAF, 0, 0xE053, 0, 0, 0xF29E, /* 0xB0 */
+ 0, 0xF9C3, 0, 0, 0, 0xF0F6, 0xE2B2, 0, /* 0xC0 */
+ 0, 0, 0, 0xE7EC, 0, 0xE7BD, 0, 0xE76F, /* 0xC0 */
+ 0, 0, 0xE548, 0xF0BE, 0xE9EF, 0, 0xE9F0, 0xE9F1, /* 0xD0 */
+ 0xE9F2, 0, 0, 0xE7BE, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF8C6, 0xE2B3 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF29F, 0, 0, 0, 0, 0, 0, 0xED3B, /* 0x00 */
+ 0, 0xE855, 0, 0xE77C, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE3A8, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xEC39, 0, 0, 0xEA4C, /* 0x30 */
+ 0xEEB5, 0, 0, 0, 0, 0, 0xE8F0, 0, /* 0x30 */
+ 0xF2E2, 0xF3F0, 0xE2B4, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xE8F1, 0, /* 0x40 */
+ 0xEB41, 0, 0, 0, 0, 0xEAA5, 0, 0xF7D2, /* 0x50 */
+ 0, 0, 0xEEFD, 0, 0, 0xEE33, 0xF8F1, 0xE0B0, /* 0x50 */
+ 0xF43E, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xE1E7, 0, 0xEF6C, 0, 0, 0xEED7, 0, 0, /* 0x60 */
+ 0xF6C0, 0, 0xE373, 0, 0, 0, 0xE831, 0, /* 0x70 */
+ 0, 0, 0xE14D, 0, 0, 0xE3A9, 0xE9CC, 0, /* 0x70 */
+ 0, 0xECFE, 0xE3AA, 0xEF3A, 0, 0xF046, 0xF7FA, 0xEE5C, /* 0x80 */
+ 0xF668, 0, 0, 0, 0xE557, 0, 0, 0, /* 0x80 */
+ 0xE7CB, 0, 0xE7D2, 0xE4CB, 0xE799, 0xE839, 0xF5F8, 0, /* 0x90 */
+ 0, 0xEA6E, 0xF43F, 0xF739, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE758, 0, 0, 0xF251, 0, /* 0xA0 */
+ 0, 0, 0, 0xF7C1, 0, 0, 0, 0, /* 0xB0 */
+ 0xE9F3, 0xF09C, 0, 0xF64D, 0xEBBB, 0xE1BF, 0xF564, 0xEE5D, /* 0xB0 */
+ 0, 0xF95F, 0xF8A2, 0, 0xEB6C, 0, 0, 0, /* 0xC0 */
+ 0, 0xF54B, 0xE865, 0, 0xF7B2, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xF8F2, 0, 0xE8F6, 0, 0xEA6F, /* 0xD0 */
+ 0, 0, 0, 0xE8F2, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xF76C, 0xF6EE, 0xF0E8, 0, 0xE49C, 0, 0, /* 0xE0 */
+ 0xF3BC, 0, 0, 0xF86A, 0, 0, 0xE87A, 0xE856, /* 0xE0 */
+ 0xF6C1, 0, 0, 0xEEB6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDC7, 0xE63C, 0, 0, 0, /* 0x00 */
+ 0, 0xE957, 0, 0, 0, 0, 0, 0xEBA9, /* 0x10 */
+ 0, 0xEC3A, 0, 0xE5A6, 0, 0, 0xE567, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF460, 0, 0xF09D, /* 0x20 */
+ 0, 0xEB6D, 0xF8F3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF3BD, 0, 0, 0xEC77, 0xF9D7, 0, /* 0x30 */
+ 0xE258, 0xF047, 0, 0xF950, 0, 0xF9E7, 0xF6EF, 0, /* 0x30 */
+ 0, 0xE6B5, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF2BA, 0xF3DD, 0, 0xEA43, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xEF5B, 0, 0, 0xF76D, 0, /* 0x60 */
+ 0, 0xF8C7, 0xE5C8, 0, 0xE6DF, 0, 0xE9A9, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xEFB1, 0, 0, 0xF83D, /* 0x70 */
+ 0xF669, 0xF896, 0, 0, 0, 0, 0, 0xF73A, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xEE7E, 0, 0xE16C, /* 0x80 */
+ 0xEBBC, 0xEB91, 0, 0, 0xEFBF, 0xF99F, 0xEE5E, 0, /* 0x80 */
+ 0, 0xEBD7, 0, 0xEE5F, 0, 0xF593, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xED95, /* 0xA0 */
+ 0, 0, 0xED9D, 0, 0, 0xF7E4, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xF2E3, 0, 0, 0xE2EE, 0xF64E, 0xEB42, 0xF9A0, 0xE3AB, /* 0xC0 */
+ 0, 0, 0, 0xE6FA, 0, 0, 0, 0xF8C8, /* 0xC0 */
+ 0, 0xEC67, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xE533, 0xF39A, 0xE6A8, 0, 0, 0, 0xEBE7, 0, /* 0xD0 */
+ 0, 0xE4BF, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF2E4, 0, 0xE6C5, 0xF0E2, 0, 0, 0xF977, 0, /* 0xE0 */
+ 0, 0xED32, 0, 0xEC78, 0, 0xEE60, 0, 0xF8E8, /* 0xF0 */
+ 0xF578, 0xEDF4, 0xF54C, 0xF565 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEAB6, /* 0x10 */
+ 0, 0xF949, 0xF252, 0xE097, 0, 0, 0, 0xF2E5, /* 0x10 */
+ 0xE0E2, 0xE534, 0, 0xEA70, 0xE89F, 0xED56, 0xEF4E, 0, /* 0x20 */
+ 0, 0, 0, 0xEB6E, 0xF644, 0xF062, 0, 0xF7FB, /* 0x20 */
+ 0, 0, 0xEB52, 0, 0xE074, 0, 0xEEB7, 0, /* 0x30 */
+ 0xF09F, 0, 0xE7DD, 0, 0xE844, 0xF23A, 0xF8E9, 0, /* 0x30 */
+ 0, 0, 0, 0xE8CB, 0xE845, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF3BE, 0, 0, 0xE4AC, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xF8C9, 0, /* 0x50 */
+ 0xEACF, 0, 0, 0xE4C0, 0xECD7, 0, 0xF2E6, 0xF960, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEFC0, /* 0x60 */
+ 0, 0, 0, 0xF5D3, 0, 0, 0xF16C, 0xF6B7, /* 0x60 */
+ 0, 0, 0xF048, 0xE3F9, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE958, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xF049, 0, 0, 0, 0, 0, 0xF3DE, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE6B6, 0xE2B5, 0, 0xE7A8, /* 0x90 */
+ 0, 0, 0xF17E, 0, 0, 0xE9AA, 0, 0, /* 0xA0 */
+ 0, 0, 0xE1A2, 0xEF3E, 0, 0, 0, 0xEBBD, /* 0xA0 */
+ 0, 0xF461, 0, 0, 0, 0, 0xEFC1, 0, /* 0xB0 */
+ 0, 0, 0xE49E, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE8B5, 0, 0xF4E7, 0xE7A0, 0, 0, /* 0xC0 */
+ 0, 0xF961, 0, 0xF1B2, 0xF53F, 0, 0xF8A3, 0, /* 0xC0 */
+ 0, 0xF951, 0, 0xF23B, 0xE535, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF594, /* 0xE0 */
+ 0, 0, 0, 0, 0xF269, 0, 0, 0, /* 0xF0 */
+ 0xF8CA, 0, 0, 0, 0, 0, 0xE1E3, 0xE74B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDDB, 0xF799, 0, 0, 0, 0xF664, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6A9, /* 0x00 */
+ 0, 0xE0C9, 0, 0, 0xEE61, 0xF35C, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xE73E, 0, 0xF7D3, 0xE5FE, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE74C, 0xF440, 0, 0, 0, /* 0x20 */
+ 0, 0xEC3B, 0xF4E8, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xF2C2, 0, 0, 0, 0, 0, 0, 0xF1EC, /* 0x30 */
+ 0, 0xEEB8, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xE8A0, 0, 0, 0xE14E, 0, 0, 0xF49E, /* 0x50 */
+ 0xE87B, 0, 0xEC68, 0xF1D6, 0, 0, 0xE661, 0xEB43, /* 0x50 */
+ 0, 0, 0xF962, 0, 0xF0C8, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE4C1, 0xF35D, 0, /* 0x60 */
+ 0xE2F7, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xF1D2, 0, 0xE568, 0xE959, 0xE6F1, 0, /* 0x70 */
+ 0, 0xEABB, 0, 0, 0xF4A5, 0, 0, 0, /* 0x80 */
+ 0xF55D, 0, 0, 0, 0, 0xF3BF, 0xF741, 0, /* 0x80 */
+ 0xEFFA, 0, 0, 0, 0xF8CB, 0, 0, 0xE065, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF7D4, 0xF6CA, 0, 0, 0xE658, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xF978, 0xF4BD, /* 0xA0 */
+ 0, 0xF2A0, 0, 0xEEFE, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE4C2, 0, 0, 0, 0, 0xE4B6, 0, /* 0xB0 */
+ 0xE13D, 0xF69C, 0xE642, 0xE468, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xEED8, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xECA5, 0, 0, /* 0xD0 */
+ 0, 0, 0xEEB9, 0, 0, 0, 0, 0xF33D, /* 0xD0 */
+ 0xF8CC, 0xF0A1, 0, 0, 0xE536, 0, 0, 0, /* 0xE0 */
+ 0, 0xF8CD, 0, 0xE5BD, 0xF3DF, 0, 0, 0xF69D, /* 0xE0 */
+ 0, 0xEA44, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0xE5EB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDC8, 0, 0, 0, 0xF8A4, 0xE549, 0, /* 0x00 */
+ 0, 0xEA71, 0, 0xED33, 0, 0, 0, 0xE6B7, /* 0x00 */
+ 0, 0xF77E, 0, 0, 0, 0xEA45, 0, 0, /* 0x10 */
+ 0xE662, 0, 0xF7D5, 0xEEBA, 0xF0D5, 0xE5F7, 0xF2E7, 0xEBBE, /* 0x10 */
+ 0, 0, 0, 0xF83E, 0, 0, 0, 0xE679, /* 0x20 */
+ 0xE67E, 0, 0, 0, 0, 0, 0, 0xEEBB, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF15B, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE5B3, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE244, 0, 0, 0, /* 0x40 */
+ 0xF8A5, 0xEBEE, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF6A8, 0, 0, 0, 0, 0xF8CE, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE74D, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xF8FD, 0, 0, 0, 0, /* 0x60 */
+ 0xF979, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE2B6, 0, 0, 0, 0xF1C7, 0xF23C, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE16D, 0, 0, /* 0x80 */
+ 0, 0, 0xF637, 0, 0, 0, 0xEE9C, 0, /* 0x80 */
+ 0, 0, 0xF5A4, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xF9DC, 0xF1B3, 0xE259, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xF2E8, 0, 0, 0xEBBF, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF86B, 0xE0E3, 0xF6A9, 0, 0xF8A6, /* 0xA0 */
+ 0, 0, 0, 0xE949, 0, 0, 0, 0xF3C0, /* 0xB0 */
+ 0xF1C8, 0xF2C3, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xE63D, 0, 0, 0xF9CE, 0, 0, 0, 0xEF31, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xF8F4, 0xE5A7, 0, 0, 0, 0xF3F6, 0, 0xEE63, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE16E, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xF742, 0, 0, 0, 0xE97B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF9B6, 0, 0, 0, /* 0x00 */
+ 0, 0xEDEA, 0, 0, 0xF3E0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE8CC, 0xE9CD, 0, 0, 0, 0xE558, 0, /* 0x10 */
+ 0, 0xE7ED, 0, 0, 0, 0, 0xF5A5, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xEE9D, 0, 0, 0, 0, 0, 0xEE64, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF9C8, /* 0x40 */
+ 0, 0xE631, 0xF9BF, 0, 0xF963, 0, 0xF2A1, 0, /* 0x40 */
+ 0xEEBC, 0, 0, 0, 0, 0, 0xE3EE, 0, /* 0x50 */
+ 0, 0xEE65, 0, 0, 0xEFF2, 0, 0xEAB0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xE770, 0xF94A, 0xF9AF, 0xF35E, /* 0x60 */
+ 0, 0xE8E1, 0, 0, 0xEDC9, 0, 0xF1B4, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xEB53, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xECD8, 0, 0, 0, /* 0x80 */
+ 0, 0xEFFB, 0xF038, 0, 0, 0, 0, 0xF9B7, /* 0x80 */
+ 0, 0, 0xF8A7, 0, 0xEFC2, 0, 0, 0, /* 0x90 */
+ 0, 0xF9F7, 0, 0, 0, 0, 0, 0xEC69, /* 0x90 */
+ 0, 0, 0xE97C, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xEF32, 0, 0, 0, /* 0xA0 */
+ 0, 0xEE92, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xF9F8, 0xF9F9, 0, 0, 0, 0xF64F, 0, /* 0xB0 */
+ 0, 0xEEA7, 0, 0xEE67, 0, 0, 0, 0, /* 0xC0 */
+ 0xE595, 0xE559, 0, 0, 0, 0, 0xE69C, 0, /* 0xC0 */
+ 0xE6F2, 0, 0xEBC0, 0, 0xE8E2, 0xEE68, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEEBD, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xF35F, 0xF4BE, 0xEC3C, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF5B7, 0xEB92, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xF9B8, 0xECE8, 0, 0xE537, 0xEF9E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF862, 0, 0, 0, 0, 0, 0xF791, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xE663, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE5B4, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF360, 0, 0xF6F0, 0xF243, 0, 0, /* 0x20 */
+ 0xF04A, 0, 0xF063, 0, 0, 0xF1C9, 0xE9AB, 0, /* 0x30 */
+ 0, 0, 0xEDAC, 0xF9A1, 0, 0xEAD0, 0xF143, 0, /* 0x30 */
+ 0xEAD1, 0, 0, 0, 0, 0, 0xF1ED, 0xF748, /* 0x40 */
+ 0xF6FA, 0, 0, 0, 0xF73B, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF570, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE54A, 0xED43, 0, 0xEFDA, 0, 0xEA46, 0, 0xE7BF, /* 0x50 */
+ 0, 0xE7C0, 0xE691, 0, 0, 0, 0, 0xE7CC, /* 0x60 */
+ 0, 0xE83A, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xEAE5, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF6E5, 0, 0, 0, 0xE142, 0, 0, /* 0x70 */
+ 0xEAF9, 0xE6E0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE54B, 0, 0, 0, 0, 0xF9FA, /* 0xA0 */
+ 0, 0, 0, 0, 0xE143, 0, 0, 0xE8F3, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xEAD2, 0, 0xE25A, 0, 0xF26A, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xED74, 0, /* 0xC0 */
+ 0xF8CF, 0, 0, 0, 0, 0, 0, 0xE2B7, /* 0xD0 */
+ 0, 0xF253, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE27A, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xEC3D, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xE6E1, 0xF897, 0, 0, 0xE5C9, 0xF73C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEED9, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xF4E9, 0, /* 0x10 */
+ 0, 0, 0, 0xE77D, 0xECC4, 0xF393, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xEF75, 0, 0, /* 0x20 */
+ 0, 0xEB9C, 0xF254, 0xE7DE, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xF0A2, 0xF0A3, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xF952, 0xF04B, /* 0x30 */
+ 0, 0, 0, 0, 0xEF3B, 0xEA72, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xF1EF, 0, 0xEF33, 0, 0, 0, 0, 0xE2F1, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xE54C, 0, 0xF97A, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xEEBE, 0, 0xF994, 0, 0, 0xE644, 0, 0, /* 0x70 */
+ 0xEC3E, 0, 0xE4B7, 0xF85C, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF86C, 0, 0xF1B5, 0xEBE3, /* 0x80 */
+ 0, 0xEF3C, 0, 0xEF6D, 0, 0, 0xF2E9, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xF54D, 0, 0xE2B8, 0xEFDB, /* 0x90 */
+ 0xE3AC, 0, 0, 0, 0, 0, 0, 0xE857, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF0C9, /* 0xA0 */
+ 0, 0xEF5C, 0, 0, 0, 0xEA47, 0, 0, /* 0xA0 */
+ 0, 0, 0xE64C, 0xE4E5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xF86D, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xE866, 0, 0xE041, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE858, 0xEAA6, 0, 0xF7B3, 0xF462, 0, 0xE054, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE25B, 0, /* 0xD0 */
+ 0, 0xE1F5, 0, 0, 0, 0xF9B0, 0xE5A8, 0, /* 0xD0 */
+ 0xF3C1, 0, 0, 0xEC79, 0xE95A, 0xF144, 0xF850, 0, /* 0xE0 */
+ 0, 0xF8A8, 0xE338, 0, 0, 0xE87C, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7EE, /* 0xF0 */
+ 0, 0xEB9D, 0, 0, 0, 0xF2EA, 0xF86E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEB54, 0, 0xE2B9, 0, 0xE5CA, 0xE6E2, 0xEC3F, /* 0x00 */
+ 0, 0xE6B8, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xEF5D, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xF66A, 0, 0, 0, 0, /* 0x10 */
+ 0xF2A2, 0xEC6A, 0xF69E, 0, 0, 0xF8D0, 0xE3AD, 0, /* 0x20 */
+ 0xE1E4, 0, 0xE3AE, 0xE97D, 0xEF5E, 0, 0xF39B, 0xE245, /* 0x20 */
+ 0xEE9E, 0, 0, 0xE6FB, 0xE366, 0xE9F5, 0xF6F1, 0, /* 0x30 */
+ 0xF69F, 0, 0xE8F7, 0, 0, 0, 0, 0xF8EA, /* 0x30 */
+ 0xEFDC, 0xE7C1, 0, 0xF5F2, 0xEB55, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xF064, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF7C2, 0, 0xF04C, /* 0x50 */
+ 0, 0xE455, 0xF8D1, 0xEEC0, 0xF0A5, 0, 0xEAFA, 0xECA2, /* 0x50 */
+ 0xE6B9, 0, 0xEFC3, 0, 0xEF9F, 0xEF3F, 0, 0, /* 0x60 */
+ 0xF463, 0xF8A9, 0xE735, 0, 0, 0, 0, 0xE5CB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE358, 0, /* 0x70 */
+ 0, 0, 0xE3AF, 0xE6E3, 0, 0, 0, 0xEB56, /* 0x80 */
+ 0, 0xE632, 0, 0xF1F0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xE6F3, 0, 0, 0, 0xF964, 0, 0xE867, 0xE16F, /* 0x90 */
+ 0, 0xF464, 0, 0xE3B0, 0, 0xE170, 0, 0xE8FD, /* 0xA0 */
+ 0xF4BF, 0, 0xF361, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF94B, 0, 0xEC40, 0, 0, 0xEE35, 0, 0, /* 0xB0 */
+ 0, 0xEC6B, 0, 0, 0, 0xEADE, 0, 0xEB57, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xF491, 0, /* 0xC0 */
+ 0, 0, 0xE171, 0, 0, 0, 0, 0xE67A, /* 0xC0 */
+ 0, 0, 0, 0, 0xEEC2, 0, 0, 0, /* 0xD0 */
+ 0xE246, 0, 0xF4C0, 0, 0xE1FE, 0, 0, 0, /* 0xD0 */
+ 0xF8D2, 0, 0xF79A, 0xF6FB, 0, 0, 0xEF4F, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xEF47, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF1B6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE94A, 0, 0, 0xE144, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xF3F7, 0, 0, 0, 0xEF48, 0, 0, /* 0x10 */
+ 0xE098, 0, 0xED34, 0xF566, 0, 0, 0, 0xEAE6, /* 0x10 */
+ 0, 0, 0, 0xEAA7, 0, 0xEAE7, 0xEBC1, 0, /* 0x20 */
+ 0xEFC4, 0, 0, 0xE95B, 0xEFC5, 0, 0, 0, /* 0x20 */
+ 0xF2A3, 0xF0A6, 0xE0A3, 0xECE9, 0, 0, 0, 0xE3FB, /* 0x30 */
+ 0xF2A4, 0, 0xF2EB, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE344, /* 0x40 */
+ 0, 0, 0, 0, 0xE1A3, 0, 0, 0xEF76, /* 0x40 */
+ 0, 0xF2A5, 0, 0xE4CC, 0xE87D, 0, 0, 0, /* 0x50 */
+ 0, 0xE6BA, 0, 0xF465, 0xF5E5, 0xE7EF, 0, 0, /* 0x50 */
+ 0, 0, 0xF7B4, 0, 0, 0xE5D4, 0xF9CF, 0, /* 0x60 */
+ 0, 0, 0xE8E3, 0, 0, 0, 0, 0xF3E1, /* 0x60 */
+ 0xF146, 0, 0, 0, 0, 0xF8FE, 0xE4D7, 0, /* 0x70 */
+ 0xE3B1, 0, 0xE0B1, 0, 0, 0, 0, 0xE3B2, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE0B2, 0xF3C2, /* 0x80 */
+ 0, 0, 0xF571, 0xF7B5, 0, 0, 0xEBC3, 0xEBC2, /* 0x80 */
+ 0, 0xF0F7, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xEAA8, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xE0CA, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xEE49, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xF76E, 0xF7AA, 0xE099, 0, 0xF1B7, 0, 0, /* 0xB0 */
+ 0xE4B8, 0xF466, 0, 0, 0xE569, 0xF255, 0xF492, 0, /* 0xB0 */
+ 0, 0, 0xE042, 0, 0, 0xE94B, 0, 0xF3F8, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xF147, 0, 0, /* 0xC0 */
+ 0, 0, 0xEDCA, 0, 0xF650, 0xF9DD, 0, 0, /* 0xD0 */
+ 0xE573, 0xE172, 0, 0xF6D4, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE6E5, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE4C3, 0, 0xE736, 0, 0xF651, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xE9F6, 0, 0xE1C0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDDC, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xEDCB, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xEBC4, 0, 0, 0, 0, 0, 0xEF40, /* 0x10 */
+ 0xF540, 0xF4EA, 0xE87E, 0, 0xE6BB, 0, 0xEC41, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE6AA, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xE69D, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xED6F, 0, 0xE066, 0, /* 0x40 */
+ 0, 0, 0xF0A8, 0, 0, 0, 0xE8FE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF652, 0, 0, 0xF2BB, 0, 0, 0, /* 0x60 */
+ 0, 0xE59F, 0, 0, 0xEB58, 0, 0, 0, /* 0x60 */
+ 0xEF49, 0, 0xF2A6, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE1A4, 0, 0, 0xE596, 0xE8A1, 0xE8DC, 0xE8DD, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF26C, 0, 0xE0CB, 0xF965, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xE27B, 0, /* 0x80 */
+ 0xE1C1, 0, 0, 0xF8D3, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xF7AB, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xF5D4, 0, 0, 0, 0, 0xE7A9, /* 0xB0 */
+ 0, 0, 0xEFDD, 0xE8CD, 0, 0, 0xE9CE, 0, /* 0xC0 */
+ 0xEEC3, 0, 0xF15C, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xF7EC, 0, 0, 0, 0xE0CC, 0, /* 0xD0 */
+ 0, 0, 0, 0xEB9E, 0xE538, 0, 0xF1D3, 0xE791, /* 0xD0 */
+ 0, 0xF467, 0, 0xE09A, 0xE891, 0, 0, 0xE664, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xE7CD, 0, /* 0xE0 */
+ 0, 0, 0xE77E, 0, 0xF451, 0, 0, 0, /* 0xF0 */
+ 0xEAD3, 0, 0, 0, 0xE892, 0, 0xEC7A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEB9F, 0, 0, 0xE79A, 0, 0, 0, /* 0x00 */
+ 0xF6AF, 0xE846, 0, 0xE067, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xF468, 0, /* 0x10 */
+ 0xE79B, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xF86F, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2EF, /* 0x30 */
+ 0xE7C2, 0, 0xF362, 0, 0xED61, 0, 0, 0, /* 0x30 */
+ 0xF4B7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF870, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xF2EC, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xEC42, 0, 0xE54D, 0, 0, 0xE7CE, 0, /* 0x60 */
+ 0, 0, 0, 0xF572, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xE539, 0, 0, 0, 0, 0xE1C2, 0xEEDA, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF469, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xE7AA, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xE74E, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xE93D, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xEC7B, 0xE69E, 0, 0, /* 0xA0 */
+ 0xE09B, 0, 0, 0xE56A, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF567, 0xE131, 0, 0, 0xE2BA, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF5B8, /* 0xD0 */
+ 0, 0, 0, 0xE7C3, 0xE378, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xECC5, 0xF0F8, 0, 0xF441, 0, 0, /* 0xE0 */
+ 0, 0xE2BB, 0, 0, 0, 0xE4AD, 0xEF71, 0xE27C, /* 0xE0 */
+ 0, 0, 0, 0xEB44 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEA73, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE9F7, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF442, 0xF4F6, 0xF66B, /* 0x20 */
+ 0, 0, 0, 0, 0xE6FE, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF76F, 0, 0xF6F2, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE339, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEE6A, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xF5A6, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE6BC, 0xE173, 0, 0, 0xEE6B, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xE9DD, 0, 0, 0, /* 0x70 */
+ 0, 0xE3B3, 0, 0, 0, 0, 0, 0xF2ED, /* 0x80 */
+ 0, 0, 0, 0, 0xE66E, 0xED96, 0xEBEF, 0, /* 0x80 */
+ 0, 0xE9F8, 0, 0, 0, 0, 0, 0xEF5F, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE075, 0, 0, 0, 0xE931, /* 0xA0 */
+ 0, 0xEB45, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xF93C, 0xF93D, 0xE737, 0, 0, 0, /* 0xB0 */
+ 0, 0xF1B8, 0, 0, 0, 0xE8B6, 0, 0, /* 0xC0 */
+ 0, 0, 0xE692, 0xF4AF, 0, 0, 0xE1A5, 0, /* 0xC0 */
+ 0xE893, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE738, 0, 0, 0, 0xE174, 0, 0, 0xE3B4, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE068, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xE894 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5A7, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xF5A8, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xEE36, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE5EC, 0xE5F8, 0xE895, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xECC6, 0, 0, 0, 0xEA74, 0, /* 0x30 */
+ 0xEA75, 0xE3B5, 0, 0, 0, 0, 0, 0xE3B6, /* 0x40 */
+ 0xE3B7, 0xF443, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEFDE, 0, 0, 0, 0, 0, 0xF363, 0xF444, /* 0x50 */
+ 0, 0, 0xF364, 0xE0E4, 0xF8D4, 0xF5E6, 0xECEA, 0, /* 0x50 */
+ 0xEA76, 0, 0, 0, 0, 0xEAD4, 0, 0, /* 0x60 */
+ 0xF79B, 0, 0, 0, 0, 0xF33E, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE3B8, 0, 0, 0, 0, 0xE66F, /* 0x70 */
+ 0, 0xE367, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xF931, 0xF2EE, 0xE968, /* 0x80 */
+ 0, 0xEFDF, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xEDDD, 0xF9FB, /* 0xA0 */
+ 0, 0, 0xEB59, 0, 0, 0, 0xE659, 0, /* 0xA0 */
+ 0, 0xE53A, 0, 0xEDCC, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xEFE0, 0, 0, 0, 0xE368, 0xF932, 0xE54E, /* 0xB0 */
+ 0xEC43, 0xEA77, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE94C, 0xE446, 0xF5D5, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE231, 0xF5A9, 0, 0, 0xE9F9, 0, 0, /* 0xD0 */
+ 0xE9FA, 0, 0, 0, 0, 0, 0, 0xF365, /* 0xD0 */
+ 0, 0, 0, 0, 0xF66F, 0, 0xF46A, 0xED7B, /* 0xE0 */
+ 0, 0xF493, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xF149 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF9FC, 0, 0, 0, 0, 0xEBAA, 0, 0, /* 0x00 */
+ 0xE069, 0, 0, 0xF2EF, 0, 0xF5AA, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xF19B, 0, 0, 0xF73D, /* 0x10 */
+ 0, 0xF452, 0xF653, 0, 0xE6D2, 0, 0, 0xF7A2, /* 0x10 */
+ 0xF366, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xF39C, 0, /* 0x20 */
+ 0, 0xF670, 0, 0, 0, 0, 0xEFF3, 0xF453, /* 0x30 */
+ 0, 0, 0, 0xE53B, 0xE043, 0xE1A6, 0, 0xE1C3, /* 0x30 */
+ 0xE1DA, 0, 0, 0, 0, 0, 0xE7CF, 0, /* 0x40 */
+ 0, 0xF654, 0, 0, 0, 0xF26D, 0xEEC4, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEC44, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xEAE2, 0xEEDB, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xEF41, 0, 0xF93E, 0, 0, 0, 0, /* 0x60 */
+ 0xEDCD, 0, 0, 0, 0xF87B, 0, 0xE2BC, 0, /* 0x70 */
+ 0, 0xE2E2, 0xE1F6, 0, 0, 0xF2F0, 0, 0xF54E, /* 0x70 */
+ 0, 0xE55D, 0, 0, 0xF4B8, 0, 0, 0, /* 0x80 */
+ 0xEFA1, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xF494, 0xF4EB, 0, 0xF367, 0, 0, /* 0x90 */
+ 0xE2D7, 0, 0, 0, 0, 0, 0, 0xE2DF, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xEF50, 0xEF51, 0, 0, 0, 0xE2E3, 0xEFA2, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE33A, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF4C1, 0xE33B, 0, 0xE574, /* 0xC0 */
+ 0, 0, 0xF2BC, 0xE731, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7DF, /* 0xD0 */
+ 0, 0xF4D7, 0, 0, 0, 0xE94D, 0, 0xE175, /* 0xD0 */
+ 0xF1F1, 0, 0, 0xF3E2, 0, 0xE56B, 0, 0, /* 0xE0 */
+ 0, 0, 0xEC45, 0, 0, 0xE076, 0, 0xE4AE, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xE176, 0, /* 0xF0 */
+ 0, 0xF3D3, 0xF5E7, 0, 0, 0, 0, 0xE06A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF8EE, /* 0x00 */
+ 0, 0xEBC5, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xEAE9, 0, 0xF26E, 0, 0, 0xF6C2, 0, /* 0x10 */
+ 0xE732, 0, 0, 0, 0, 0, 0xE9AC, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xF33F, 0xE64D, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xEBAB, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xF7B6, 0, /* 0x40 */
+ 0, 0xE597, 0, 0xE359, 0xF2A7, 0xEC7C, 0, 0xE8EA, /* 0x40 */
+ 0xE25C, 0xF5E8, 0xF6D5, 0, 0xE4CD, 0, 0xF4FE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE345, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xEBA0, 0, 0xEAFB, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xEE6D, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xEF34, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE0CD, /* 0x80 */
+ 0, 0, 0, 0xF2A8, 0, 0, 0, 0xF244, /* 0x80 */
+ 0, 0, 0, 0, 0xE868, 0xE3B9, 0, 0xEAA9, /* 0x90 */
+ 0, 0, 0xF4B0, 0, 0, 0xE154, 0, 0, /* 0x90 */
+ 0, 0xE247, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xF2A9, 0, 0, /* 0xA0 */
+ 0, 0xEAD5, 0, 0, 0xF1D7, 0, 0, 0, /* 0xB0 */
+ 0xF256, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xF2BD, 0xF966, 0, 0, 0xE8F4, 0, 0xF2AA, 0xF749, /* 0xC0 */
+ 0, 0xF5E9, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xECD9, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xEBC6, 0, 0, 0, 0xE54F, 0, 0, 0, /* 0xE0 */
+ 0, 0xEA78 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF37A, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF4C2, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE4AF, 0, /* 0x10 */
+ 0, 0xE06B, 0, 0, 0, 0, 0, 0xF967, /* 0x20 */
+ 0, 0, 0xF1D8, 0xEBC7, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF568, 0xE643, 0xE9AD, /* 0x30 */
+ 0, 0, 0, 0xE5BE, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF3C3, 0xF26F, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE67B, 0, 0, 0, 0xF569, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE6E6, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE847, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0xE9FB, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xE9CF, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE733, 0, 0, 0xE869, 0, 0xF368, /* 0x90 */
+ 0xF2C4, 0, 0, 0, 0, 0, 0, 0xEBD8, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF3D4, 0, 0xF1F2, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xE5DB, 0, /* 0xA0 */
+ 0, 0xE5DC, 0xF4C4, 0xE0D7, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xEC46, 0, 0, 0, 0, 0xF2F1, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xF8D5, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE4D8, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE9D0, 0xF369, /* 0xD0 */
+ 0xE0B3, 0, 0, 0, 0, 0, 0, 0xE5DD, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xE1A7, 0, 0, 0xE33C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE3BA, 0, 0xF3C4, 0, 0xEDB3, 0xF8F5, 0xEFE1, 0xF9E0, /* 0x00 */
+ 0xF94C, 0, 0xE832, 0xE833, 0, 0xE431, 0, 0, /* 0x00 */
+ 0xE491, 0, 0, 0, 0xEC7D, 0, 0, 0xEA79, /* 0x10 */
+ 0xE26C, 0xF445, 0xE374, 0xE9D1, 0, 0, 0, 0, /* 0x10 */
+ 0xEBC8, 0xE8B7, 0xEAE3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xF1B9, 0xF3C5, 0, 0xF4CF, 0xE6AB, /* 0x20 */
+ 0xEBAC, 0, 0, 0xECEB, 0, 0xF257, 0, 0, /* 0x30 */
+ 0, 0xEBC9, 0xE09C, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xF39D, 0xF871, 0xF36A, 0xE177, 0xE896, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xE14F, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xE27D, 0, /* 0x50 */
+ 0, 0xE5A9, 0xF872, 0, 0, 0, 0xE375, 0, /* 0x60 */
+ 0xF0D6, 0, 0xF16F, 0, 0, 0, 0xEAFC, 0, /* 0x60 */
+ 0, 0xF6D6, 0xEA7A, 0xE0B4, 0, 0, 0xF2BE, 0, /* 0x70 */
+ 0, 0xE145, 0, 0, 0, 0, 0, 0xE2BD, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xF2F2, 0xEC47, /* 0x80 */
+ 0, 0, 0, 0xE178, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF39E, 0, 0, 0, /* 0x90 */
+ 0xE670, 0, 0xF3C6, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xEC48, 0xF0AB, 0, 0, /* 0xA0 */
+ 0, 0xE0B5, 0xE761, 0, 0xF55E, 0xF4F7, 0, 0, /* 0xB0 */
+ 0xE6C6, 0, 0xE3BB, 0xF6AA, 0, 0xF1CA, 0xE6D3, 0xE79C, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF655, /* 0xC0 */
+ 0, 0, 0xE3CC, 0xE9FC, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xEAFD, 0, /* 0xD0 */
+ 0xF7E5, 0, 0xEB5A, 0, 0, 0xF49F, 0xE4B0, 0, /* 0xD0 */
+ 0xF595, 0xE859, 0, 0xEE6E, 0, 0, 0, 0, /* 0xE0 */
+ 0xF74A, 0xEF60, 0, 0, 0xE79D, 0, 0, 0xF065, /* 0xE0 */
+ 0, 0, 0, 0, 0xE633, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xF656 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF46B, 0xED9E, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xEF42, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE86A, 0, 0xF46C, 0xF8D6, 0xEFB2, /* 0x10 */
+ 0, 0xF23D, 0, 0xF873, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE97E, 0, 0, 0xF5EA, 0xEE70, /* 0x20 */
+ 0, 0xF39F, 0, 0, 0, 0, 0, 0xE6AC, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF5C5, 0xF270, 0, /* 0x30 */
+ 0, 0xE8E5, 0, 0xE9DE, 0, 0, 0xE7F0, 0xEFA3, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF3F9, 0, 0xF454, 0xEB5B, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xEFA4, 0, /* 0x50 */
+ 0, 0xEC49, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xECB1, 0xF97B, 0xE1A8, 0, 0xE146, 0, 0, /* 0x60 */
+ 0xF36B, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xEE4A, 0, 0, 0xE1A9, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xF4C3, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xEBD9, 0, 0, 0xF2AB, /* 0x80 */
+ 0, 0, 0, 0xEEC5, 0, 0, 0xEB79, 0, /* 0x90 */
+ 0xF4C5, 0, 0, 0xE550, 0xE5BF /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE9AE, 0, /* 0x30 */
+ 0xF7FC, 0, 0xE150, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xEDA2, 0, 0, 0, /* 0x40 */
+ 0xE248, 0, 0, 0, 0xE762, 0xF7D6, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xF3AA, 0xE261, 0, 0, 0xF657, 0, /* 0x60 */
+ 0xE8EB, 0, 0xEAFE, 0, 0, 0xE771, 0, 0xF6F3, /* 0x70 */
+ 0, 0xE6E7, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE5A0, 0, 0, /* 0x80 */
+ 0xE3BC, 0, 0xEDCF, 0, 0xE0B6, 0, 0xE848, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE1C4, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE64E, 0, 0, 0, 0xEC4A, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE2D8, 0, 0, 0, /* 0xA0 */
+ 0xEB5C, 0xF0F9, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xF9FD, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xE6E8, 0xE0D8, 0, 0, 0, 0xEFE2, 0, 0, /* 0xB0 */
+ 0, 0xEF4A, 0, 0, 0, 0xECC7, 0, 0, /* 0xC0 */
+ 0, 0, 0xF15D, 0, 0xF15E, 0, 0xE64F, 0, /* 0xC0 */
+ 0, 0, 0xECA7, 0, 0xEAD6, 0xF9E8, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF271, /* 0xD0 */
+ 0xF638, 0xE9FD, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xF74B, 0, 0xEF61, 0, 0, 0, 0, /* 0xE0 */
+ 0xF7D7, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xE27E, 0, 0, 0xF15F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEFA5, 0xE665, 0, 0xE1C5, 0, 0xF1BA, 0xE3BD, 0, /* 0x00 */
+ 0, 0xE2BE, 0, 0, 0xF14B, 0, 0, 0, /* 0x00 */
+ 0xE441, 0, 0, 0, 0, 0xE179, 0, 0xE7C4, /* 0x10 */
+ 0xEFFC, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE3BE, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xF14C, 0, 0, 0xEDAD, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF6B0, 0, 0xE17A, /* 0x30 */
+ 0, 0, 0, 0xE4C4, 0, 0, 0xE650, 0, /* 0x40 */
+ 0, 0, 0xE69F, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xEBA1, 0, /* 0x50 */
+ 0xEA4D, 0, 0xF639, 0, 0, 0, 0xE834, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE634, /* 0x60 */
+ 0xF5C6, 0, 0xEBA2, 0xEFC6, 0, 0, 0, 0xF455, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF579, 0xE67C, 0xF0D3, /* 0x70 */
+ 0, 0, 0, 0, 0xF14D, 0xEC6C, 0xEA7B, 0xF36C, /* 0x80 */
+ 0, 0xF0BF, 0, 0xE6CE, 0xE3BF, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xF5AB, 0, /* 0x90 */
+ 0, 0, 0, 0xF7FD, 0, 0xE06C, 0, 0, /* 0x90 */
+ 0, 0xE1C6, 0xF446, 0, 0, 0xE9FE, 0, 0, /* 0xA0 */
+ 0, 0xE147, 0xE8B8, 0, 0, 0, 0, 0xE379, /* 0xA0 */
+ 0, 0xE26D, 0xF0C0, 0, 0xF9A2, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xF75B, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF066, 0xF3B0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE8CE, 0, 0xF6C3, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE8CF, 0xE0A4, 0, 0, 0xF770, 0, /* 0xD0 */
+ 0, 0xF8D7, 0, 0, 0xF0CA, 0xEB31, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE25D, 0, 0, 0xE56C, 0, 0, 0, /* 0xF0 */
+ 0xF9D8, 0, 0, 0, 0, 0xE498 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF447, 0, 0, 0xF898, 0xF63A, 0xF899, /* 0x00 */
+ 0xE776, 0, 0xF541, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xEF62, 0, 0xE055, 0xE17B, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xEC7E, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xEC4B, 0, 0xF6AD, 0, 0, 0, 0xF771, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF4EC, 0, 0, 0, 0, 0xEA31, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xED9F, 0, 0, 0xECEC, 0, /* 0x40 */
+ 0xE9AF, 0xE9B0, 0, 0, 0xE0B7, 0xEF63, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xEBA3, 0xE470, 0, /* 0x60 */
+ 0, 0, 0, 0xF3A0, 0, 0, 0, 0, /* 0x60 */
+ 0xEFA6, 0xE0F2, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xF1F3, 0xE969, 0xEB5D, 0, 0, 0, 0, 0xF6DA, /* 0x70 */
+ 0xE8B9, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE13E, 0, 0xE86B, 0, 0, 0, 0, 0xE1C7, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE9B1, 0, 0xE73F, 0xECA3, 0, 0, /* 0x90 */
+ 0xE291, 0, 0, 0xF495, 0, 0, 0, 0, /* 0xA0 */
+ 0xF743, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xEB5E, 0, 0xF5FD, 0, 0, /* 0xB0 */
+ 0, 0, 0xF0EC, 0, 0, 0xE4C5, 0xF97C, 0xE46B, /* 0xB0 */
+ 0xE57B, 0, 0xEA32, 0, 0, 0, 0xEDE6, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xF340, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xE5C4, 0, 0, 0, 0, 0, 0, 0xF1F4, /* 0xD0 */
+ 0, 0, 0, 0xECED, 0, 0xEF52, 0, 0xF1F5, /* 0xE0 */
+ 0xE6FC, 0, 0xF1BB, 0, 0, 0xF63B, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF448, 0xF658, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xE4E6, 0xF46D, 0xE2BF, 0, 0xF0AC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2C0, 0, 0xEE38, /* 0x00 */
+ 0xF9E9, 0, 0xE2C1, 0, 0xEB6F, 0xEA7C, 0, 0, /* 0x00 */
+ 0, 0, 0xEB32, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xF54F, 0xEC91, 0, 0xE7F1, 0xF3C7, /* 0x10 */
+ 0, 0xE0B8, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF7FE, 0xE8BA, 0xE897, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF67C, 0xE86C, 0xF874, /* 0x30 */
+ 0, 0xEB5F, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE9B2, 0, 0, 0, 0, 0xEE39, 0, 0xF2F3, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF4ED, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xF0FA, 0, 0xF7E6, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xE06D, 0xE5DE, /* 0x60 */
+ 0, 0xE06E, 0xEAE4, 0, 0, 0, 0xEE9F, 0, /* 0x70 */
+ 0xF5AC, 0, 0, 0, 0, 0, 0xED97, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xEFE3, 0, 0xF1CB, 0xE2E4, 0, /* 0x80 */
+ 0, 0, 0xE763, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE9B3, 0xE57C, 0, 0, 0xF449, 0, 0xEAB7, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xE0CE, 0xF8D8, 0, /* 0xA0 */
+ 0, 0xE369, 0, 0, 0xE9D2, 0xF6F4, 0xEEDC, 0xED35, /* 0xA0 */
+ 0, 0xF933, 0, 0xE8BB, 0, 0, 0, 0xF44A, /* 0xB0 */
+ 0xEFFD, 0xE35A, 0, 0xF5D6, 0xE7C5, 0xED44, 0, 0xF1A7, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF04D, 0xEEA0, 0, 0xF6C4, 0xF5AD, 0, 0xE7E0, /* 0xD0 */
+ 0, 0, 0, 0xE044, 0, 0, 0xF772, 0xE2C2, /* 0xD0 */
+ 0, 0xF14E, 0, 0, 0, 0xEDB4, 0xE1C8, 0xF258, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xEEC8, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xE1C9, 0xF7B7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF3E8, 0xE7F2, 0xE8F5, 0xE045, 0xE7C6, 0, 0, /* 0x00 */
+ 0, 0xE759, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7AB, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xF1BC, 0, 0, 0xE764, 0, 0, 0, 0xE96A, /* 0x20 */
+ 0, 0xEC4C, 0, 0, 0xF97D, 0xF170, 0xE4A0, 0, /* 0x30 */
+ 0xEFC7, 0xEE3A, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xEC92, 0, 0, 0, 0, 0, 0, 0xF84B, /* 0x40 */
+ 0, 0xF5AE, 0xF8AA, 0, 0, 0, 0, 0xF19D, /* 0x40 */
+ 0, 0xF14F, 0xF968, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE575, 0, 0, 0, 0xF7C3, /* 0x70 */
+ 0, 0, 0, 0xF272, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xE6E9, 0xF1F6, 0, 0, 0, 0xEA7D, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xE17C, 0, /* 0x90 */
+ 0xECEE, 0, 0, 0, 0, 0, 0xEF64, 0, /* 0x90 */
+ 0, 0, 0xF89A, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE9B4, 0xED45, 0xE740, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xE765, 0, 0, /* 0xB0 */
+ 0, 0xF57A, 0, 0, 0, 0xE249, 0, 0, /* 0xC0 */
+ 0, 0xE671, 0xE2D2, 0, 0xE346, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE232, 0, 0, 0xF4EE, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xF4F8, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE95C, 0, 0xE35B, 0, 0, 0, 0xF934, /* 0xE0 */
+ 0xE1CA, 0xE6D4, 0xEA33, 0, 0xED70, 0, 0, 0, /* 0xF0 */
+ 0, 0xF259, 0, 0, 0, 0xEC6D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5FE, 0xE53C, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE5D1, 0, 0xE792, 0xF753, 0xF067, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xF5D7, 0, 0, 0xE74F, 0, 0, 0, /* 0x20 */
+ 0, 0xF9C0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xF0AD, 0, 0, 0, 0, 0xE5AA, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xEEA8, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF25A, /* 0x50 */
+ 0, 0, 0, 0xE077, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF773, 0, 0xE56D, 0, 0, 0xF068, 0, /* 0x60 */
+ 0, 0, 0, 0xF8D9, 0xF1F7, 0, 0, 0xEDB5, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE33D, 0, 0, /* 0x70 */
+ 0, 0, 0xF3F1, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xEC4D, 0, 0, 0, 0xECC8, 0, 0, 0, /* 0x90 */
+ 0, 0xE7D5, 0, 0, 0xEAAA, 0, 0, 0, /* 0x90 */
+ 0, 0xE8BC, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xF774, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xF3FA, 0, 0, 0xEDB6, 0xF4EF, 0, 0, 0xF8DA, /* 0xB0 */
+ 0xEBE0, 0, 0xE7AC, 0, 0xF5EB, 0, 0xEB46, 0, /* 0xC0 */
+ 0, 0xEFC8, 0, 0xE0CF, 0, 0xECC9, 0, 0, /* 0xC0 */
+ 0, 0xEA7E, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xEC4E, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE991, 0, 0xE635, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xEC93, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xE6A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE7A1, 0, 0xE750, 0xE96B, 0, 0, 0xF1BD, /* 0x10 */
+ 0xEAB8, 0, 0xF035, 0, 0, 0, 0xE6AD, 0, /* 0x10 */
+ 0, 0xF4F9, 0, 0xF1F8, 0, 0xF5C7, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xEBCA, 0xF0E3, 0, 0xF46E, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF75C, 0, 0xF069, /* 0x30 */
+ 0, 0xE4C6, 0, 0xE8E6, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF5AF, 0, 0, 0, 0, 0xE292, 0, /* 0x40 */
+ 0, 0, 0, 0xEFFE, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF8B6, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xEC94, 0, 0, 0, 0, /* 0x60 */
+ 0xE2F2, 0xF6B9, 0xE7F3, 0, 0, 0xEBCB, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xE86D, 0, 0, 0xE849, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF0FB, /* 0x80 */
+ 0, 0xE0B9, 0, 0, 0xF1F9, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xEB70, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xF550, 0, /* 0xA0 */
+ 0xF9BC, 0xEAB1, 0xECEF, 0, 0, 0, 0, 0xEB33, /* 0xA0 */
+ 0xF9B9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xF341, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE1CB, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF1BE, 0, 0, 0, 0xE5C0, 0xECF0, 0xF1FA, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xEFE4, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE5ED, 0xEEDD, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE598, 0xEDB7, 0, 0, /* 0xE0 */
+ 0, 0xE8E7, 0xEC4F, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF25B, /* 0xF0 */
+ 0, 0, 0xE6F4, 0xF36D, 0, 0, 0, 0xE23B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEEDE, 0, 0, 0, 0xE666, 0xEBCC, /* 0x00 */
+ 0, 0, 0xEF43, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xEDEE, 0xE932, /* 0x10 */
+ 0, 0, 0xEB60, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE5B5, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE5A1, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xF8DB, 0, /* 0x40 */
+ 0xF7CB, 0, 0, 0, 0xE0F3, 0xF535, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xF858, 0xE667, 0, 0xEFE5, 0xF8DC, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF9D0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF8F6, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE835, 0, 0xE8BD, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF172, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE1F7, 0xF36E, 0, 0, 0, /* 0xA0 */
+ 0, 0xF659, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEA91, /* 0xC0 */
+ 0, 0, 0, 0xE4B1, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xF97E, 0, 0, 0, /* 0xD0 */
+ 0, 0xEF53, 0, 0xF3C8, 0, 0, 0, 0xE293, /* 0xD0 */
+ 0, 0, 0, 0, 0xF7ED, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF496, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0xED46 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5B9, 0, 0xE992, 0xECF1, 0, 0, 0, 0, /* 0x00 */
+ 0xEF35, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF44B, 0, 0xEA34, 0, 0xE85C, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xE079, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xECDA, 0, 0xF969, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF06A, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xF7C4, 0, /* 0x60 */
+ 0xECA4, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xF8DD, 0, 0xF2CA, 0, /* 0x70 */
+ 0xEF54, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE5CC, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xF0D7, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7AD, /* 0x90 */
+ 0, 0, 0xF8AB, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE4D9, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE5A2, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF66E, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xE898, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xEB61, 0, 0, 0xEFA8, /* 0xE0 */
+ 0, 0, 0xF5F9, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xF83F, 0, 0xF0FC, 0, 0, 0xEB7A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xECB2, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE5C5, /* 0x10 */
+ 0, 0, 0xF3E3, 0xE5EE, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE1CC, 0, 0, 0, 0, 0xF1D9, 0, /* 0x30 */
+ 0, 0, 0, 0xE751, 0, 0, 0, 0, /* 0x30 */
+ 0xF87C, 0, 0, 0, 0, 0, 0xF3EB, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF84C, 0xEE72, 0, 0, /* 0x40 */
+ 0, 0, 0xF875, 0xEC9C, 0, 0, 0, 0xE046, /* 0x50 */
+ 0, 0xED47, 0, 0xF06B, 0, 0xF5FA, 0, 0, /* 0x50 */
+ 0, 0xF8AC, 0xE2C3, 0xF0FD, 0, 0, 0, 0, /* 0x60 */
+ 0xF79C, 0, 0, 0xEAB9, 0, 0, 0, 0, /* 0x60 */
+ 0xEBF1, 0, 0xE434, 0, 0, 0, 0, 0xF5FB, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE36A, 0xE36B, /* 0x70 */
+ 0, 0xF04E, 0xE7B1, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE047, 0, 0, 0xE4E7, 0, 0xF775, 0, 0, /* 0x80 */
+ 0, 0, 0xE4B2, 0, 0, 0, 0xEC50, 0xF46F, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xE1E5, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF7AC, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE1CD, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xF23E, 0xE63E, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6EA, /* 0xC0 */
+ 0, 0, 0, 0, 0xEEE0, 0xF0AE, 0, 0, /* 0xD0 */
+ 0, 0xE2D9, 0, 0, 0xE95D, 0xF1FB, 0, 0xEA92, /* 0xD0 */
+ 0, 0xE6EB, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xEA35, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xEAD7, 0xE8D0, 0xE8D1, 0, 0, /* 0xF0 */
+ 0xE5A3, 0, 0, 0, 0, 0xF342 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE96C, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xE078, 0, 0xF776, 0xE95E, 0, 0, 0, 0, /* 0x10 */
+ 0xF06C, 0xE8D2, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xEFB3, 0, 0, /* 0x20 */
+ 0, 0, 0xF6DB, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xECA8, 0, /* 0x30 */
+ 0xE6AE, 0, 0, 0xEB71, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xE0BA, 0, 0, 0xEDD1, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE36C, /* 0x50 */
+ 0, 0, 0, 0, 0xE5C1, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE75A, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xECA9, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEB34, /* 0x70 */
+ 0, 0xEFA9, 0, 0xE4C7, 0, 0, 0xE96D, 0xF73E, /* 0x80 */
+ 0, 0, 0, 0xE148, 0, 0, 0, 0xE33E, /* 0x80 */
+ 0, 0, 0, 0xE794, 0, 0, 0xECCA, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE13F, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE53D, 0xF661, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE35C, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE056, 0, 0, 0xE5C2, 0, 0, /* 0xB0 */
+ 0xE24A, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE057, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xF840, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xEAD8, 0, 0, 0, /* 0xF0 */
+ 0xF5BA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDEB, 0, 0xF2F4, 0xE9B5, 0, 0, 0, 0, /* 0x00 */
+ 0xE1AA, 0, 0xECF2, 0, 0xF8F7, 0, 0xF6D0, 0, /* 0x00 */
+ 0, 0, 0, 0xF9BA, 0, 0, 0xF9E1, 0xF6A0, /* 0x10 */
+ 0xE3C0, 0, 0, 0xEF55, 0, 0xED48, 0, 0xEBE8, /* 0x10 */
+ 0, 0, 0, 0xE151, 0, 0xE47D, 0, 0, /* 0x20 */
+ 0, 0, 0xE8BE, 0, 0, 0xEB72, 0, 0, /* 0x20 */
+ 0, 0xF859, 0, 0, 0xEBCD, 0, 0xE048, 0, /* 0x30 */
+ 0, 0, 0xF470, 0xF3C9, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEA93, 0, 0, 0, 0xF36F, 0xF754, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xF25C, 0, 0, 0xEA94, 0, /* 0x50 */
+ 0xEEC9, 0, 0xEC95, 0xEEE1, 0, 0, 0xECCB, 0, /* 0x60 */
+ 0, 0xECCC, 0, 0, 0, 0xE2F8, 0xF2AC, 0, /* 0x60 */
+ 0xF9FE, 0xF935, 0xF841, 0xEAD9, 0, 0xEB62, 0, 0, /* 0x70 */
+ 0, 0xF56A, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF3CA, 0, 0xE233, /* 0x80 */
+ 0, 0, 0, 0, 0xF44C, 0xF173, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xEB35, 0, 0xF6AB, 0, 0, /* 0x90 */
+ 0xF0AF, 0, 0, 0, 0, 0, 0xEDDE, 0, /* 0x90 */
+ 0xEBA4, 0xE1AB, 0, 0xE7F4, 0xEF36, 0xE1CE, 0xEBE9, 0, /* 0xA0 */
+ 0xF991, 0, 0xEB73, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xEC51, 0, 0xE234, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xEA36, 0, 0, 0xF0FE, 0, 0xF0DD, 0xF370, /* 0xB0 */
+ 0, 0, 0xF56B, 0, 0xEC96, 0, 0, 0xE4C8, /* 0xC0 */
+ 0, 0, 0, 0xF57B, 0, 0xF245, 0, 0xF5D8, /* 0xC0 */
+ 0, 0, 0xE5DF, 0, 0, 0, 0xE675, 0, /* 0xD0 */
+ 0, 0, 0, 0xF0B0, 0xF573, 0, 0, 0, /* 0xD0 */
+ 0, 0xECCD, 0, 0, 0, 0, 0xF596, 0xF842, /* 0xE0 */
+ 0, 0, 0xF2F5, 0xE06F, 0, 0xF0B1, 0xF1BF, 0, /* 0xE0 */
+ 0, 0xF9C9, 0, 0, 0, 0, 0xED36, 0xF7A4, /* 0xF0 */
+ 0xF343, 0, 0xEDEC, 0, 0, 0, 0xE3E7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE7C7, 0xED67, 0xF06D, 0, 0xE599, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE84A, 0, /* 0x00 */
+ 0xE85D, 0, 0, 0, 0xF7CC, 0, 0xEBDA, 0xE8BF, /* 0x10 */
+ 0, 0xE155, 0xF160, 0xE0BB, 0, 0xEA95, 0, 0, /* 0x10 */
+ 0xEFAA, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE7C8, 0, 0, 0xF273, 0xE6BD, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE2C4, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xE35D, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF936, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF3FB, 0, 0, 0, 0, 0xF9D2, 0xE3C1, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xECDB, 0, 0xE4C9, 0, 0xE95F, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xE17D, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xEA37, 0, 0, 0xEE4B, /* 0x60 */
+ 0xF131, 0, 0, 0, 0xE149, 0, 0, 0xF8DE, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xEEE2, 0, 0, /* 0x70 */
+ 0xE551, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE938, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xEC52, 0, 0xF4D8, 0xEDD3, 0, 0, 0xF4D9, 0, /* 0x90 */
+ 0, 0, 0xF4C6 /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1DB, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1AC, /* 0x30 */
+ 0, 0xF953, 0, 0, 0, 0, 0xE577, 0, /* 0x40 */
+ 0xE3C2, 0, 0xF7A5, 0, 0xEF65, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xECCE, 0, 0, /* 0x50 */
+ 0, 0, 0xE55A, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xEADA, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xF8DF, 0xEEE3, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF79D, 0xECCF, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xF5B0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE777, 0, 0xE7C9, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF73F, 0xF2F6, 0, /* 0x90 */
+ 0xE9B6, 0xF23F, 0xE1F8, 0, 0, 0, 0, 0xEA48, /* 0xA0 */
+ 0xF937, 0xF6FC, 0xF6B1, 0xE24B, 0xF531, 0, 0, 0xF25D, /* 0xA0 */
+ 0xEBAE, 0, 0, 0xF153, 0xE2FE, 0, 0xF74F, 0xE772, /* 0xB0 */
+ 0xE4E8, 0, 0, 0xEA38, 0xF574, 0xF152, 0, 0xE7F5, /* 0xB0 */
+ 0xF7C5, 0xE9D3, 0xE693, 0xF19E, 0xF992, 0, 0, 0xF1C0, /* 0xC0 */
+ 0xE049, 0, 0xF274, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF471, 0, 0xEA49, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE694, 0, 0xEA96, 0, 0xEADB, 0, /* 0xD0 */
+ 0xE8D3, 0, 0xF877, 0xE773, 0xF551, 0, 0xE9B7, 0, /* 0xE0 */
+ 0, 0, 0xF497, 0, 0, 0xE53E, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE695, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xE9B8, 0xE2C5, 0xEADF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF44E, 0xF631, 0, 0xF0CB, /* 0x00 */
+ 0xF3FC, 0, 0xF4C7, 0, 0, 0xEB7B, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xF1FC, 0, 0, 0xEBDB, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xF275, 0, 0xEA97, 0, /* 0x60 */
+ 0, 0, 0, 0xF863, 0, 0, 0, 0, /* 0x60 */
+ 0xF3CB, 0, 0, 0xE33F, 0xE9B9, 0, 0, 0xE3C3, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF5B1, 0, 0, /* 0x80 */
+ 0, 0, 0xF056, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xF371, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF63C, 0, 0, 0, 0, /* 0xA0 */
+ 0xF5D9, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF37B, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE9BA, 0, 0, 0, 0xF44F, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xF6C5, 0, /* 0xC0 */
+ 0, 0, 0, 0xE8A2, 0xF498, 0, 0, 0xE04A, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xF6F5, 0, 0xE0E5, 0, 0, /* 0xD0 */
+ 0, 0xF276, 0, 0xEB63, 0, 0, 0, 0, /* 0xE0 */
+ 0xE235, 0, 0, 0, 0, 0, 0, 0xE668, /* 0xE0 */
+ 0, 0, 0, 0xE53F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEFC9, 0, 0, 0, 0, 0xE4CE, /* 0x00 */
+ 0xF552, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE0E6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF3A1, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xF0B2, 0, 0, 0, 0, 0xF3A2, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xF0B3, 0, 0xF344, 0, 0, 0xE0F4, /* 0x40 */
+ 0xE540, 0xF4B2, 0xF8B7, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF5EC, 0, 0, 0, 0, 0, 0xF277, /* 0x50 */
+ 0xF542, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xF5ED, 0, 0xE2F3, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF372, 0, 0, 0, 0, 0, 0xF25E, /* 0x80 */
+ 0, 0, 0xF3CC, 0, 0, 0xEDB8, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE6F5, 0xECF3, 0xE2E5, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xE2C6, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xF4B3, 0xED68, 0xE2F9, 0xE2DA, 0, 0, /* 0xC0 */
+ 0, 0, 0xF85D, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEE73, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF472, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xF5EE, 0, 0, 0xE04B, 0, 0, 0xECDC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE294, 0, 0xE669, 0, 0, /* 0x00 */
+ 0, 0xF240, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF575, 0xE752, 0xE960, 0xE17E, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE5E0, 0xF65A, 0xF9CA, 0xE766, 0xF55F, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE636, 0xE94E, /* 0x20 */
+ 0, 0xE8D4, 0xE6C7, 0, 0, 0, 0, 0xF4A0, /* 0x20 */
+ 0, 0, 0, 0xF3CD, 0, 0, 0, 0, /* 0x30 */
+ 0xEC53, 0xE96E, 0, 0xE96F, 0, 0, 0xF2AD, 0xEE3B, /* 0x30 */
+ 0, 0, 0, 0, 0xF7DD, 0xF04F, 0, 0, /* 0x40 */
+ 0, 0xF2AE, 0, 0, 0, 0xF560, 0xE295, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xEE3C, 0, 0xE26E, /* 0x50 */
+ 0, 0, 0xE5F9, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xECF4, 0xE1D0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE5B8, 0, 0, 0xF6FD, 0, /* 0xA0 */
+ 0xE939, 0, 0, 0, 0, 0xEA98, 0, 0xE93A, /* 0xA0 */
+ 0xF473, 0xEFB4, 0xE46C, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xEFE6, 0, 0, 0xECF6, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xEECA, 0, /* 0xC0 */
+ 0, 0xE35E, 0, 0, 0xE899, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE04C, 0, /* 0xE0 */
+ 0, 0, 0xF278, 0xE86E, 0, 0xF499, 0, 0, /* 0xE0 */
+ 0xEC9D, 0, 0xE136, 0, 0, 0, 0, 0xE84B, /* 0xF0 */
+ 0, 0xF279, 0, 0, 0, 0xF5DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF6DC, 0xEBEA, 0xE251, 0xE541, 0, 0xF9B1, 0xEE4D, 0, /* 0x00 */
+ 0xF8AD, 0, 0, 0xF777, 0, 0xEBCE, 0, 0xF6E2, /* 0x00 */
+ 0xF5EF, 0xE2C7, 0, 0, 0xE542, 0xE191, 0, 0xE578, /* 0x10 */
+ 0, 0xF25F, 0xF6D7, 0, 0, 0xEB36, 0xE651, 0xEBDC, /* 0x10 */
+ 0xF373, 0xF3E4, 0xE993, 0xE637, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xF597, 0, /* 0x20 */
+ 0, 0xF3CE, 0xF474, 0, 0, 0xE340, 0, 0, /* 0x30 */
+ 0xF191, 0, 0, 0, 0xF7BA, 0, 0xF0B5, 0, /* 0x30 */
+ 0, 0xE57D, 0xEC54, 0, 0, 0, 0, 0xEFE7, /* 0x40 */
+ 0, 0, 0xF0B4, 0xF031, 0, 0xF74C, 0xE236, 0, /* 0x40 */
+ 0xF7C6, 0xF96A, 0, 0xE543, 0xE4B9, 0xF06E, 0, 0, /* 0x50 */
+ 0, 0xEFAB, 0, 0, 0xEBE1, 0xE4CF, 0xF598, 0, /* 0x50 */
+ 0xF050, 0xEBCF, 0, 0xE14A, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xF27A, 0, 0, 0, 0xF374, 0xF4B4, 0xE57E, /* 0x60 */
+ 0, 0, 0xF450, 0, 0, 0xF3E5, 0, 0xF553, /* 0x70 */
+ 0xEB64, 0, 0xF0B6, 0, 0xE6A1, 0xE0E8, 0, 0xF7AD, /* 0x70 */
+ 0xEFAD, 0xE774, 0xF843, 0xEC55, 0xF94D, 0, 0, 0xF154, /* 0x80 */
+ 0xE741, 0, 0xE93B, 0, 0, 0, 0, 0xE5A4, /* 0x80 */
+ 0, 0xF0E9, 0, 0, 0, 0xEF4B, 0, 0, /* 0x90 */
+ 0, 0xE767, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xF8AE, 0xE3E1, 0, 0, 0xE8C0, 0, /* 0xA0 */
+ 0xF5BE, 0, 0xEA99, 0, 0, 0, 0, 0xE09D, /* 0xA0 */
+ 0xF6C6, 0xE2C8, 0, 0, 0, 0xEBD0, 0, 0, /* 0xB0 */
+ 0xF260, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xEFF4, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE296, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE5CD, 0, /* 0xD0 */
+ 0, 0xE2DB, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE9BB, 0, 0, 0, 0, 0xE23C, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xEFE8, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xE544 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xED57, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF5DB, 0, 0, 0xF851, 0, 0, /* 0x10 */
+ 0, 0xEA39, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE59A, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF2F7, 0, 0, /* 0x20 */
+ 0, 0, 0xE4B3, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF0B7, 0xF2F8, 0xF5DC, 0xF1CC, 0xE8D5, 0xF3CF, 0, /* 0x40 */
+ 0, 0, 0xF3D0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xF5B2, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE7AE, 0xE5AC, 0, 0xEC56, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF9A3, 0, 0xF8E5, /* 0x70 */
+ 0xEAAB, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEC97, /* 0x80 */
+ 0, 0xF63D, 0, 0xF5B3, 0, 0xF345, 0, 0, /* 0x80 */
+ 0, 0, 0xEBA5, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF5DD, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF132, 0xF1FD, 0, 0xF5B4, 0xF8B8, /* 0xA0 */
+ 0, 0xE8A3, 0, 0, 0xE65A, 0xE0D9, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xEDD4, 0, 0, 0, 0, 0, 0, 0xF4FA, /* 0xC0 */
+ 0, 0xF0B8, 0, 0xEB47, 0xE6EC, 0xF3EC, 0xEDAF, 0xE5E1, /* 0xC0 */
+ 0xE6ED, 0xE3D1, 0, 0, 0, 0, 0, 0xEBF2, /* 0xD0 */
+ 0xF2F9, 0, 0, 0, 0xE9BC, 0xF66C, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xF375, 0, 0, 0, 0xF554, /* 0xE0 */
+ 0, 0, 0xEFE9, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF4FB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE591, 0, 0, /* 0x00 */
+ 0xE132, 0xF6FE, 0xEABC, 0, 0, 0, 0, 0xF0CD, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE347, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE652, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xEF3D, 0, 0, 0, 0, 0xF2AF, /* 0x30 */
+ 0xE0A5, 0, 0, 0, 0, 0xE0E9, 0, 0, /* 0x40 */
+ 0, 0xF878, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE156, /* 0x50 */
+ 0, 0, 0, 0xEE77, 0, 0, 0xF057, 0, /* 0x50 */
+ 0, 0, 0xE8A4, 0, 0xE2C9, 0xEC9E, 0xF2FA, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xF0DE, 0, 0, 0xF5C8, 0, 0xE56E, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xEB65, 0, 0xF2B0, 0, 0, 0xEC57, 0, /* 0x90 */
+ 0xE7AF, 0, 0, 0, 0xF7E7, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xEEE5, 0, 0, 0xE2CA, 0xEBD1, /* 0xB0 */
+ 0, 0xEC58, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xF2FB, 0, 0, 0xF89B, /* 0xC0 */
+ 0, 0, 0xE994, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xEB37, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xF778, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xE0EA, 0, 0, 0, 0xE0BC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE672, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xF5DE, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF5DF, 0, 0xF246, 0, 0, 0, 0xEC98, 0xE4CA, /* 0x10 */
+ 0xF2FC, 0xE3C4, 0xF2B1, 0, 0xE3C5, 0, 0xE36E, 0, /* 0x20 */
+ 0xE7E1, 0, 0, 0xEB48, 0, 0, 0xE1D1, 0xF4B9, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEECC, 0, 0xE638, 0xE237, 0, 0xE545, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xED58, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE4B4, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xF0B9, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE0F5, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF66D, 0, 0xF3A3, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE157, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xEFCA, 0, 0xEBF0, 0, /* 0x90 */
+ 0, 0, 0xF5E0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF8AF, 0, 0, 0, 0xE0D1, /* 0xA0 */
+ 0, 0, 0, 0, 0xF8E0, 0xF475, 0, 0, /* 0xA0 */
+ 0xF192, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF37C, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF27B, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xEFCB, 0, /* 0xD0 */
+ 0, 0xE192, 0, 0, 0xE6AF, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xF4A1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF997, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF3A4, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xEB66, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xF2B2, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xF561, 0, 0, /* 0x30 */
+ 0xF6A1, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF3D1, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xE09E, 0xE09F, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE25E, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF4C8, 0, 0xF4BA /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF1FE, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE836, 0, 0, 0xEB7C, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF75D, 0, 0xE0D2, 0, 0, 0, 0xF0CE, /* 0x80 */
+ 0, 0xF7D8, 0xF7D9, 0xE070, 0xE85A, 0, 0, 0, /* 0x90 */
+ 0xE0A6, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE058, 0xF7EE, 0xE8EC, 0, 0, /* 0xA0 */
+ 0xE341, 0, 0, 0, 0, 0xE5EF, 0, 0, /* 0xA0 */
+ 0, 0xEE95, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xEEA2, 0xED69, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xED71, /* 0xC0 */
+ 0, 0, 0xF954, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xF7EF, 0xE2F4, 0xF6E6, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE24C, 0, 0, 0, /* 0xD0 */
+ 0, 0xF555, 0xE933 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE9BD, 0, 0, 0, /* 0x10 */
+ 0, 0xF556, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF731, 0, 0, 0, 0xEF66, 0, /* 0x20 */
+ 0, 0, 0xE8C1, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xF376, 0, 0, 0, 0xED49, /* 0x30 */
+ 0xF67D, 0, 0xF7AE, 0, 0xE9BE, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xE6B0, 0xE778, 0xE0BD, 0, 0, /* 0x40 */
+ 0xF7DA, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xF75E, 0xF7F0, 0xEB7D, 0xECB3, 0xF543, /* 0x50 */
+ 0, 0, 0xF052, 0xF476, 0xF346, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE8D6, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xF0E4, 0, 0, 0xF477, 0, 0xE6D5, 0xE546, 0xF7E8, /* 0x70 */
+ 0xE6C1, 0, 0, 0, 0, 0xEDD5, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xEFEA, 0xE6CC, 0, /* 0x80 */
+ 0, 0, 0xE4E9, 0xEC59, 0, 0xF96B, 0xE1AD, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE140, 0xF032, 0, 0, /* 0x90 */
+ 0xED98, 0xE350, 0, 0xF347, 0xF231, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xE6F6, 0, 0, 0, 0xEC5A, /* 0xA0 */
+ 0xEC5B, 0, 0xF85F, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xF0DF, 0, 0, 0, 0, 0, 0xE65B, /* 0xB0 */
+ 0, 0, 0, 0xF544, 0, 0, 0, 0, /* 0xB0 */
+ 0xF1CD, 0xED62, 0, 0, 0xF039, 0xED4A, 0xF4A2, 0xE1D2, /* 0xC0 */
+ 0, 0xF65B, 0, 0xF3E6, 0xF1C1, 0xEF4C, 0xF261, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xF377, 0xEC5C, 0, /* 0xD0 */
+ 0, 0xED3A, 0, 0xF5E1, 0xF1DA, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE6EE, 0xE3F1, 0, 0, 0, 0, /* 0xE0 */
+ 0xEFEB, 0xEFEC, 0xEB74, 0, 0, 0, 0, 0xE837, /* 0xE0 */
+ 0xE9D4, 0, 0xF033, 0, 0, 0, 0xE653, 0xE696, /* 0xF0 */
+ 0, 0xE86F, 0, 0xF2B3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEC5D, 0, 0, 0, 0, 0, 0xF2FD, 0xF478, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xF2C5, 0, 0xEEE7, 0, 0, 0xE6FD, 0, /* 0x10 */
+ 0, 0xEECE, 0, 0, 0xEADC, 0, 0xF7C7, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7F6, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xEAAC, 0, 0xE66A, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xE934, 0, 0, 0, 0xF348, 0, 0, /* 0x30 */
+ 0, 0, 0xE5FA, 0, 0xED99, 0, 0, 0, /* 0x40 */
+ 0xE654, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF57C, 0, 0, 0, 0, 0xF2FE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xF331, 0, 0xEA3A, 0, /* 0x50 */
+ 0, 0xE84C, 0xE79E, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xF864, 0, 0, 0, 0xF175, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xF938, 0, 0, 0xF176, /* 0x70 */
+ 0, 0, 0xE75B, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF8B9, 0, 0xED63, 0, 0xE1F9, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xE2D3, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE07A, 0, 0, 0xE2D4, 0, 0xF74D, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xF557, 0, /* 0xC0 */
+ 0, 0, 0, 0xF06F, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xF7DB, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE547, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF0E5, 0, 0, 0xEBD2, 0, /* 0xF0 */
+ 0, 0, 0, 0xF034, 0, 0, 0, 0xF852 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF8E1, 0xF87D, 0xF332, 0xE193, 0, 0xF833, 0xEC99, 0, /* 0x00 */
+ 0xEC5E, 0, 0xEFF5, 0, 0xEBEB, 0, 0, 0, /* 0x00 */
+ 0xEEE8, 0xEF67, 0xE89A, 0xE55B, 0, 0, 0, 0xF6F6, /* 0x10 */
+ 0xE655, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE579, 0, 0, /* 0x20 */
+ 0xF89C, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE194, 0xF6DD, 0, 0xEA4A, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE238, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF349, 0xEDA0, 0xED59, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xED64, 0, 0, 0, /* 0x50 */
+ 0xF053, 0, 0xF2B4, 0, 0, 0, 0xE6BE, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xF8E2, 0, 0xE1D3, /* 0x60 */
+ 0, 0, 0, 0xF2B5, 0, 0, 0, 0xF879, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF7A6, 0, 0, 0, 0, 0, 0, 0xEABD, /* 0xA0 */
+ 0, 0xF6C7, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xF79F, 0, 0, 0xF79E, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xEA3B, 0xE8E8, 0, 0, 0xECDD, /* 0xD0 */
+ 0, 0xEBE2, 0xE3C6, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF660, 0xF0E6, 0xE89B, /* 0xE0 */
+ 0, 0, 0, 0, 0xF157, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xEA9A, 0xF779, 0xECDE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE297, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xF853, 0xEDD7, 0, 0xF158, 0, 0, 0, /* 0x00 */
+ 0xF4C9, 0, 0, 0xED4B, 0, 0, 0, 0, /* 0x10 */
+ 0xEE3E, 0, 0, 0, 0, 0, 0xF2B6, 0, /* 0x10 */
+ 0xE94F, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE24D, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE753, 0, 0, /* 0x40 */
+ 0, 0xE35F, 0, 0xE2FA, 0xF4CA, 0xEB67, 0, 0, /* 0x40 */
+ 0, 0xE3C7, 0xEFAE, 0, 0xEF4D, 0, 0, 0xF854, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xEC5F, 0, /* 0x90 */
+ 0, 0xF855, 0, 0, 0, 0xF7B8, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xE970, 0, 0, /* 0xA0 */
+ 0xF8B0, 0, 0, 0, 0xE739, 0xEDDF, 0xF7A7, 0, /* 0xA0 */
+ 0, 0xF67E, 0, 0xF65C, 0xEC9A, 0, 0, 0, /* 0xB0 */
+ 0, 0xF193, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE870, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xF3D2, 0xE45C, 0xE2CB, 0, 0, 0xE04D, 0, 0, /* 0xD0 */
+ 0, 0xE9BF, 0, 0, 0, 0xF691, 0, 0xEA9B, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF844, 0, 0, /* 0xE0 */
+ 0, 0xE5AD, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF3E7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEA4E, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xE950, 0, 0, 0, 0, 0, 0xE3C8, 0xE3C9, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF74E, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE0F6, 0, 0, 0, 0, /* 0x20 */
+ 0xE59B, 0, 0, 0, 0, 0, 0xF5E2, 0xEBD3, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE779, 0, 0, 0xF7A0, 0, 0xE2CC, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF9A4, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE298, 0, 0xF860, /* 0x50 */
+ 0, 0, 0xE195, 0xEE4E, 0, 0, 0, 0xF63E, /* 0x50 */
+ 0, 0, 0xE5F0, 0, 0, 0xE3CA, 0, 0, /* 0x60 */
+ 0, 0xF94E, 0xE5F1, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE1E9, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xF845, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xEC60, 0xF599, 0, 0, 0, /* 0xD0 */
+ 0xE1D4, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xEEA3, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xE8A5 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEC61, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6A2, /* 0x20 */
+ 0, 0, 0xF6E3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xF036, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE331, 0, 0, 0, /* 0x30 */
+ 0, 0xE26A, 0xF8EB, 0xE8A6, 0xE8DE, 0xE775, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF070, /* 0x40 */
+ 0, 0, 0, 0, 0xE73A, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xEDE0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE66B, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xF2C6, 0, /* 0x80 */
+ 0, 0xF77A, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xED65, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE299, 0, 0, 0xEB68, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE6EF, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xF57D, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xE1E6, 0, 0, 0, /* 0xE0 */
+ 0xE196 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5E3, 0, 0, /* 0x00 */
+ 0xED5A, 0, 0xE971, 0, 0, 0xF7C8, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF94F, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xEF37, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE754, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE0BE, /* 0x40 */
+ 0, 0xE93E, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6F7, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xF378, 0, 0xE9C0, /* 0xE0 */
+ 0, 0xE2CD, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE995, 0xE7B0, 0, 0xEE79 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xED4C, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xF054, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xED7C, 0, /* 0x20 */
+ 0xED75, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xF8F8, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xE14B, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xED4D, 0, 0, /* 0x50 */
+ 0xE1DC, 0xE7F7, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE9DF, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xF1CE, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE7D0, 0, 0, 0, 0, 0, 0xEDA3, /* 0xA0 */
+ 0, 0, 0, 0, 0xF7CD, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE1AE, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2CE, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xF63F, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xF9D3, 0xF0ED, 0xE66C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDA4, 0, 0, 0, 0xE5B6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE66D, 0, 0, /* 0x70 */
+ 0, 0xF7E9, 0, 0, 0, 0xEEA4, 0, 0xE673, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xE3CB, 0xE674, 0, 0, 0, 0xE5F2, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xEA9C, 0, 0xE6F8, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xE77A, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE2D5, 0xE79F, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xE73B, 0, 0, 0xF9CB, 0, /* 0xB0 */
+ 0, 0, 0, 0xF96C, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xEB38, 0xE5F3, 0, /* 0xC0 */
+ 0, 0xF9D9, 0, 0, 0xE133, 0, 0, 0, /* 0xD0 */
+ 0xE7F9, 0, 0, 0xE4EA, 0xF5F5, 0, 0xF2C7, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE4DA, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xE84D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEF38, /* 0x00 */
+ 0xE93F, 0, 0, 0, 0, 0, 0xF333, 0, /* 0x00 */
+ 0, 0, 0, 0xE1D5, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xEB39, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xEA3C, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF34A, 0xF241, 0, 0, 0xF242, 0, /* 0x40 */
+ 0, 0, 0xF65D, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF262, /* 0x50 */
+ 0, 0xE656, 0, 0, 0, 0, 0, 0xEB75, /* 0x60 */
+ 0, 0, 0xF4BB, 0, 0xEDE1, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xED5B, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xE6A3, 0, 0, /* 0x80 */
+ 0xE8C2, 0, 0, 0, 0, 0xE0A0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE2CF /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_AC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8861, 0x8862, 0x8863, 0x8864, 0x8865, 0x8866, 0x8867, 0x8868, /* 0x00 */
+ 0x8869, 0x886A, 0x886B, 0x886C, 0x886D, 0x886E, 0x886F, 0x8870, /* 0x00 */
+ 0x8871, 0x8873, 0x8874, 0x8875, 0x8876, 0x8877, 0x8878, 0x8879, /* 0x10 */
+ 0x887A, 0x887B, 0x887C, 0x887D, 0x8881, 0x8882, 0x8883, 0x8884, /* 0x10 */
+ 0x8885, 0x8886, 0x8887, 0x8888, 0x8889, 0x888A, 0x888B, 0x888C, /* 0x20 */
+ 0x888D, 0x888E, 0x888F, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, /* 0x20 */
+ 0x8896, 0x8897, 0x8898, 0x8899, 0x889A, 0x889B, 0x889C, 0x889D, /* 0x30 */
+ 0x88A1, 0x88A2, 0x88A3, 0x88A4, 0x88A5, 0x88A6, 0x88A7, 0x88A8, /* 0x30 */
+ 0x88A9, 0x88AA, 0x88AB, 0x88AC, 0x88AD, 0x88AE, 0x88AF, 0x88B0, /* 0x40 */
+ 0x88B1, 0x88B3, 0x88B4, 0x88B5, 0x88B6, 0x88B7, 0x88B8, 0x88B9, /* 0x40 */
+ 0x88BA, 0x88BB, 0x88BC, 0x88BD, 0x88C1, 0x88C2, 0x88C3, 0x88C4, /* 0x50 */
+ 0x88C5, 0x88C6, 0x88C7, 0x88C8, 0x88C9, 0x88CA, 0x88CB, 0x88CC, /* 0x50 */
+ 0x88CD, 0x88CE, 0x88CF, 0x88D0, 0x88D1, 0x88D3, 0x88D4, 0x88D5, /* 0x60 */
+ 0x88D6, 0x88D7, 0x88D8, 0x88D9, 0x88DA, 0x88DB, 0x88DC, 0x88DD, /* 0x60 */
+ 0x88E1, 0x88E2, 0x88E3, 0x88E4, 0x88E5, 0x88E6, 0x88E7, 0x88E8, /* 0x70 */
+ 0x88E9, 0x88EA, 0x88EB, 0x88EC, 0x88ED, 0x88EE, 0x88EF, 0x88F0, /* 0x70 */
+ 0x88F1, 0x88F3, 0x88F4, 0x88F5, 0x88F6, 0x88F7, 0x88F8, 0x88F9, /* 0x80 */
+ 0x88FA, 0x88FB, 0x88FC, 0x88FD, 0x8941, 0x8942, 0x8943, 0x8944, /* 0x80 */
+ 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, 0x894A, 0x894B, 0x894C, /* 0x90 */
+ 0x894D, 0x894E, 0x894F, 0x8950, 0x8951, 0x8953, 0x8954, 0x8955, /* 0x90 */
+ 0x8956, 0x8957, 0x8958, 0x8959, 0x895A, 0x895B, 0x895C, 0x895D, /* 0xA0 */
+ 0x8961, 0x8962, 0x8963, 0x8964, 0x8965, 0x8966, 0x8967, 0x8968, /* 0xA0 */
+ 0x8969, 0x896A, 0x896B, 0x896C, 0x896D, 0x896E, 0x896F, 0x8970, /* 0xB0 */
+ 0x8971, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, /* 0xB0 */
+ 0x897A, 0x897B, 0x897C, 0x897D, 0x8981, 0x8982, 0x8983, 0x8984, /* 0xC0 */
+ 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898A, 0x898B, 0x898C, /* 0xC0 */
+ 0x898D, 0x898E, 0x898F, 0x8990, 0x8991, 0x8993, 0x8994, 0x8995, /* 0xD0 */
+ 0x8996, 0x8997, 0x8998, 0x8999, 0x899A, 0x899B, 0x899C, 0x899D, /* 0xD0 */
+ 0x89A1, 0x89A2, 0x89A3, 0x89A4, 0x89A5, 0x89A6, 0x89A7, 0x89A8, /* 0xE0 */
+ 0x89A9, 0x89AA, 0x89AB, 0x89AC, 0x89AD, 0x89AE, 0x89AF, 0x89B0, /* 0xE0 */
+ 0x89B1, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, 0x89B8, 0x89B9, /* 0xF0 */
+ 0x89BA, 0x89BB, 0x89BC, 0x89BD, 0x89C1, 0x89C2, 0x89C3, 0x89C4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_AD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x89C5, 0x89C6, 0x89C7, 0x89C8, 0x89C9, 0x89CA, 0x89CB, 0x89CC, /* 0x00 */
+ 0x89CD, 0x89CE, 0x89CF, 0x89D0, 0x89D1, 0x89D3, 0x89D4, 0x89D5, /* 0x00 */
+ 0x89D6, 0x89D7, 0x89D8, 0x89D9, 0x89DA, 0x89DB, 0x89DC, 0x89DD, /* 0x10 */
+ 0x89E1, 0x89E2, 0x89E3, 0x89E4, 0x89E5, 0x89E6, 0x89E7, 0x89E8, /* 0x10 */
+ 0x89E9, 0x89EA, 0x89EB, 0x89EC, 0x89ED, 0x89EE, 0x89EF, 0x89F0, /* 0x20 */
+ 0x89F1, 0x89F3, 0x89F4, 0x89F5, 0x89F6, 0x89F7, 0x89F8, 0x89F9, /* 0x20 */
+ 0x89FA, 0x89FB, 0x89FC, 0x89FD, 0x8A41, 0x8A42, 0x8A43, 0x8A44, /* 0x30 */
+ 0x8A45, 0x8A46, 0x8A47, 0x8A48, 0x8A49, 0x8A4A, 0x8A4B, 0x8A4C, /* 0x30 */
+ 0x8A4D, 0x8A4E, 0x8A4F, 0x8A50, 0x8A51, 0x8A53, 0x8A54, 0x8A55, /* 0x40 */
+ 0x8A56, 0x8A57, 0x8A58, 0x8A59, 0x8A5A, 0x8A5B, 0x8A5C, 0x8A5D, /* 0x40 */
+ 0x8A61, 0x8A62, 0x8A63, 0x8A64, 0x8A65, 0x8A66, 0x8A67, 0x8A68, /* 0x50 */
+ 0x8A69, 0x8A6A, 0x8A6B, 0x8A6C, 0x8A6D, 0x8A6E, 0x8A6F, 0x8A70, /* 0x50 */
+ 0x8A71, 0x8A73, 0x8A74, 0x8A75, 0x8A76, 0x8A77, 0x8A78, 0x8A79, /* 0x60 */
+ 0x8A7A, 0x8A7B, 0x8A7C, 0x8A7D, 0x8A81, 0x8A82, 0x8A83, 0x8A84, /* 0x60 */
+ 0x8A85, 0x8A86, 0x8A87, 0x8A88, 0x8A89, 0x8A8A, 0x8A8B, 0x8A8C, /* 0x70 */
+ 0x8A8D, 0x8A8E, 0x8A8F, 0x8A90, 0x8A91, 0x8A93, 0x8A94, 0x8A95, /* 0x70 */
+ 0x8A96, 0x8A97, 0x8A98, 0x8A99, 0x8A9A, 0x8A9B, 0x8A9C, 0x8A9D, /* 0x80 */
+ 0x8AA1, 0x8AA2, 0x8AA3, 0x8AA4, 0x8AA5, 0x8AA6, 0x8AA7, 0x8AA8, /* 0x80 */
+ 0x8AA9, 0x8AAA, 0x8AAB, 0x8AAC, 0x8AAD, 0x8AAE, 0x8AAF, 0x8AB0, /* 0x90 */
+ 0x8AB1, 0x8AB3, 0x8AB4, 0x8AB5, 0x8AB6, 0x8AB7, 0x8AB8, 0x8AB9, /* 0x90 */
+ 0x8ABA, 0x8ABB, 0x8ABC, 0x8ABD, 0x8AC1, 0x8AC2, 0x8AC3, 0x8AC4, /* 0xA0 */
+ 0x8AC5, 0x8AC6, 0x8AC7, 0x8AC8, 0x8AC9, 0x8ACA, 0x8ACB, 0x8ACC, /* 0xA0 */
+ 0x8ACD, 0x8ACE, 0x8ACF, 0x8AD0, 0x8AD1, 0x8AD3, 0x8AD4, 0x8AD5, /* 0xB0 */
+ 0x8AD6, 0x8AD7, 0x8AD8, 0x8AD9, 0x8ADA, 0x8ADB, 0x8ADC, 0x8ADD, /* 0xB0 */
+ 0x8AE1, 0x8AE2, 0x8AE3, 0x8AE4, 0x8AE5, 0x8AE6, 0x8AE7, 0x8AE8, /* 0xC0 */
+ 0x8AE9, 0x8AEA, 0x8AEB, 0x8AEC, 0x8AED, 0x8AEE, 0x8AEF, 0x8AF0, /* 0xC0 */
+ 0x8AF1, 0x8AF3, 0x8AF4, 0x8AF5, 0x8AF6, 0x8AF7, 0x8AF8, 0x8AF9, /* 0xD0 */
+ 0x8AFA, 0x8AFB, 0x8AFC, 0x8AFD, 0x8B41, 0x8B42, 0x8B43, 0x8B44, /* 0xD0 */
+ 0x8B45, 0x8B46, 0x8B47, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, 0x8B4C, /* 0xE0 */
+ 0x8B4D, 0x8B4E, 0x8B4F, 0x8B50, 0x8B51, 0x8B53, 0x8B54, 0x8B55, /* 0xE0 */
+ 0x8B56, 0x8B57, 0x8B58, 0x8B59, 0x8B5A, 0x8B5B, 0x8B5C, 0x8B5D, /* 0xF0 */
+ 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, 0x8B66, 0x8B67, 0x8B68 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_AE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B69, 0x8B6A, 0x8B6B, 0x8B6C, 0x8B6D, 0x8B6E, 0x8B6F, 0x8B70, /* 0x00 */
+ 0x8B71, 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, 0x8B78, 0x8B79, /* 0x00 */
+ 0x8B7A, 0x8B7B, 0x8B7C, 0x8B7D, 0x8B81, 0x8B82, 0x8B83, 0x8B84, /* 0x10 */
+ 0x8B85, 0x8B86, 0x8B87, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, /* 0x10 */
+ 0x8B8D, 0x8B8E, 0x8B8F, 0x8B90, 0x8B91, 0x8B93, 0x8B94, 0x8B95, /* 0x20 */
+ 0x8B96, 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B, 0x8B9C, 0x8B9D, /* 0x20 */
+ 0x8BA1, 0x8BA2, 0x8BA3, 0x8BA4, 0x8BA5, 0x8BA6, 0x8BA7, 0x8BA8, /* 0x30 */
+ 0x8BA9, 0x8BAA, 0x8BAB, 0x8BAC, 0x8BAD, 0x8BAE, 0x8BAF, 0x8BB0, /* 0x30 */
+ 0x8BB1, 0x8BB3, 0x8BB4, 0x8BB5, 0x8BB6, 0x8BB7, 0x8BB8, 0x8BB9, /* 0x40 */
+ 0x8BBA, 0x8BBB, 0x8BBC, 0x8BBD, 0x8C61, 0x8C62, 0x8C63, 0x8C64, /* 0x40 */
+ 0x8C65, 0x8C66, 0x8C67, 0x8C68, 0x8C69, 0x8C6A, 0x8C6B, 0x8C6C, /* 0x50 */
+ 0x8C6D, 0x8C6E, 0x8C6F, 0x8C70, 0x8C71, 0x8C73, 0x8C74, 0x8C75, /* 0x50 */
+ 0x8C76, 0x8C77, 0x8C78, 0x8C79, 0x8C7A, 0x8C7B, 0x8C7C, 0x8C7D, /* 0x60 */
+ 0x8C81, 0x8C82, 0x8C83, 0x8C84, 0x8C85, 0x8C86, 0x8C87, 0x8C88, /* 0x60 */
+ 0x8C89, 0x8C8A, 0x8C8B, 0x8C8C, 0x8C8D, 0x8C8E, 0x8C8F, 0x8C90, /* 0x70 */
+ 0x8C91, 0x8C93, 0x8C94, 0x8C95, 0x8C96, 0x8C97, 0x8C98, 0x8C99, /* 0x70 */
+ 0x8C9A, 0x8C9B, 0x8C9C, 0x8C9D, 0x8CA1, 0x8CA2, 0x8CA3, 0x8CA4, /* 0x80 */
+ 0x8CA5, 0x8CA6, 0x8CA7, 0x8CA8, 0x8CA9, 0x8CAA, 0x8CAB, 0x8CAC, /* 0x80 */
+ 0x8CAD, 0x8CAE, 0x8CAF, 0x8CB0, 0x8CB1, 0x8CB3, 0x8CB4, 0x8CB5, /* 0x90 */
+ 0x8CB6, 0x8CB7, 0x8CB8, 0x8CB9, 0x8CBA, 0x8CBB, 0x8CBC, 0x8CBD, /* 0x90 */
+ 0x8CC1, 0x8CC2, 0x8CC3, 0x8CC4, 0x8CC5, 0x8CC6, 0x8CC7, 0x8CC8, /* 0xA0 */
+ 0x8CC9, 0x8CCA, 0x8CCB, 0x8CCC, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, /* 0xA0 */
+ 0x8CD1, 0x8CD3, 0x8CD4, 0x8CD5, 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, /* 0xB0 */
+ 0x8CDA, 0x8CDB, 0x8CDC, 0x8CDD, 0x8CE1, 0x8CE2, 0x8CE3, 0x8CE4, /* 0xB0 */
+ 0x8CE5, 0x8CE6, 0x8CE7, 0x8CE8, 0x8CE9, 0x8CEA, 0x8CEB, 0x8CEC, /* 0xC0 */
+ 0x8CED, 0x8CEE, 0x8CEF, 0x8CF0, 0x8CF1, 0x8CF3, 0x8CF4, 0x8CF5, /* 0xC0 */
+ 0x8CF6, 0x8CF7, 0x8CF8, 0x8CF9, 0x8CFA, 0x8CFB, 0x8CFC, 0x8CFD, /* 0xD0 */
+ 0x8D41, 0x8D42, 0x8D43, 0x8D44, 0x8D45, 0x8D46, 0x8D47, 0x8D48, /* 0xD0 */
+ 0x8D49, 0x8D4A, 0x8D4B, 0x8D4C, 0x8D4D, 0x8D4E, 0x8D4F, 0x8D50, /* 0xE0 */
+ 0x8D51, 0x8D53, 0x8D54, 0x8D55, 0x8D56, 0x8D57, 0x8D58, 0x8D59, /* 0xE0 */
+ 0x8D5A, 0x8D5B, 0x8D5C, 0x8D5D, 0x8D61, 0x8D62, 0x8D63, 0x8D64, /* 0xF0 */
+ 0x8D65, 0x8D66, 0x8D67, 0x8D68, 0x8D69, 0x8D6A, 0x8D6B, 0x8D6C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_AF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8D6D, 0x8D6E, 0x8D6F, 0x8D70, 0x8D71, 0x8D73, 0x8D74, 0x8D75, /* 0x00 */
+ 0x8D76, 0x8D77, 0x8D78, 0x8D79, 0x8D7A, 0x8D7B, 0x8D7C, 0x8D7D, /* 0x00 */
+ 0x8D81, 0x8D82, 0x8D83, 0x8D84, 0x8D85, 0x8D86, 0x8D87, 0x8D88, /* 0x10 */
+ 0x8D89, 0x8D8A, 0x8D8B, 0x8D8C, 0x8D8D, 0x8D8E, 0x8D8F, 0x8D90, /* 0x10 */
+ 0x8D91, 0x8D93, 0x8D94, 0x8D95, 0x8D96, 0x8D97, 0x8D98, 0x8D99, /* 0x20 */
+ 0x8D9A, 0x8D9B, 0x8D9C, 0x8D9D, 0x8DA1, 0x8DA2, 0x8DA3, 0x8DA4, /* 0x20 */
+ 0x8DA5, 0x8DA6, 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, 0x8DAB, 0x8DAC, /* 0x30 */
+ 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x8DB1, 0x8DB3, 0x8DB4, 0x8DB5, /* 0x30 */
+ 0x8DB6, 0x8DB7, 0x8DB8, 0x8DB9, 0x8DBA, 0x8DBB, 0x8DBC, 0x8DBD, /* 0x40 */
+ 0x8DC1, 0x8DC2, 0x8DC3, 0x8DC4, 0x8DC5, 0x8DC6, 0x8DC7, 0x8DC8, /* 0x40 */
+ 0x8DC9, 0x8DCA, 0x8DCB, 0x8DCC, 0x8DCD, 0x8DCE, 0x8DCF, 0x8DD0, /* 0x50 */
+ 0x8DD1, 0x8DD3, 0x8DD4, 0x8DD5, 0x8DD6, 0x8DD7, 0x8DD8, 0x8DD9, /* 0x50 */
+ 0x8DDA, 0x8DDB, 0x8DDC, 0x8DDD, 0x8DE1, 0x8DE2, 0x8DE3, 0x8DE4, /* 0x60 */
+ 0x8DE5, 0x8DE6, 0x8DE7, 0x8DE8, 0x8DE9, 0x8DEA, 0x8DEB, 0x8DEC, /* 0x60 */
+ 0x8DED, 0x8DEE, 0x8DEF, 0x8DF0, 0x8DF1, 0x8DF3, 0x8DF4, 0x8DF5, /* 0x70 */
+ 0x8DF6, 0x8DF7, 0x8DF8, 0x8DF9, 0x8DFA, 0x8DFB, 0x8DFC, 0x8DFD, /* 0x70 */
+ 0x8E41, 0x8E42, 0x8E43, 0x8E44, 0x8E45, 0x8E46, 0x8E47, 0x8E48, /* 0x80 */
+ 0x8E49, 0x8E4A, 0x8E4B, 0x8E4C, 0x8E4D, 0x8E4E, 0x8E4F, 0x8E50, /* 0x80 */
+ 0x8E51, 0x8E53, 0x8E54, 0x8E55, 0x8E56, 0x8E57, 0x8E58, 0x8E59, /* 0x90 */
+ 0x8E5A, 0x8E5B, 0x8E5C, 0x8E5D, 0x8E61, 0x8E62, 0x8E63, 0x8E64, /* 0x90 */
+ 0x8E65, 0x8E66, 0x8E67, 0x8E68, 0x8E69, 0x8E6A, 0x8E6B, 0x8E6C, /* 0xA0 */
+ 0x8E6D, 0x8E6E, 0x8E6F, 0x8E70, 0x8E71, 0x8E73, 0x8E74, 0x8E75, /* 0xA0 */
+ 0x8E76, 0x8E77, 0x8E78, 0x8E79, 0x8E7A, 0x8E7B, 0x8E7C, 0x8E7D, /* 0xB0 */
+ 0x8E81, 0x8E82, 0x8E83, 0x8E84, 0x8E85, 0x8E86, 0x8E87, 0x8E88, /* 0xB0 */
+ 0x8E89, 0x8E8A, 0x8E8B, 0x8E8C, 0x8E8D, 0x8E8E, 0x8E8F, 0x8E90, /* 0xC0 */
+ 0x8E91, 0x8E93, 0x8E94, 0x8E95, 0x8E96, 0x8E97, 0x8E98, 0x8E99, /* 0xC0 */
+ 0x8E9A, 0x8E9B, 0x8E9C, 0x8E9D, 0x8EA1, 0x8EA2, 0x8EA3, 0x8EA4, /* 0xD0 */
+ 0x8EA5, 0x8EA6, 0x8EA7, 0x8EA8, 0x8EA9, 0x8EAA, 0x8EAB, 0x8EAC, /* 0xD0 */
+ 0x8EAD, 0x8EAE, 0x8EAF, 0x8EB0, 0x8EB1, 0x8EB3, 0x8EB4, 0x8EB5, /* 0xE0 */
+ 0x8EB6, 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBA, 0x8EBB, 0x8EBC, 0x8EBD, /* 0xE0 */
+ 0x8EC1, 0x8EC2, 0x8EC3, 0x8EC4, 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, /* 0xF0 */
+ 0x8EC9, 0x8ECA, 0x8ECB, 0x8ECC, 0x8ECD, 0x8ECE, 0x8ECF, 0x8ED0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8ED1, 0x8ED3, 0x8ED4, 0x8ED5, 0x8ED6, 0x8ED7, 0x8ED8, 0x8ED9, /* 0x00 */
+ 0x8EDA, 0x8EDB, 0x8EDC, 0x8EDD, 0x8EE1, 0x8EE2, 0x8EE3, 0x8EE4, /* 0x00 */
+ 0x8EE5, 0x8EE6, 0x8EE7, 0x8EE8, 0x8EE9, 0x8EEA, 0x8EEB, 0x8EEC, /* 0x10 */
+ 0x8EED, 0x8EEE, 0x8EEF, 0x8EF0, 0x8EF1, 0x8EF3, 0x8EF4, 0x8EF5, /* 0x10 */
+ 0x8EF6, 0x8EF7, 0x8EF8, 0x8EF9, 0x8EFA, 0x8EFB, 0x8EFC, 0x8EFD, /* 0x20 */
+ 0x8F41, 0x8F42, 0x8F43, 0x8F44, 0x8F45, 0x8F46, 0x8F47, 0x8F48, /* 0x20 */
+ 0x8F49, 0x8F4A, 0x8F4B, 0x8F4C, 0x8F4D, 0x8F4E, 0x8F4F, 0x8F50, /* 0x30 */
+ 0x8F51, 0x8F53, 0x8F54, 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, /* 0x30 */
+ 0x8F5A, 0x8F5B, 0x8F5C, 0x8F5D, 0x8F61, 0x8F62, 0x8F63, 0x8F64, /* 0x40 */
+ 0x8F65, 0x8F66, 0x8F67, 0x8F68, 0x8F69, 0x8F6A, 0x8F6B, 0x8F6C, /* 0x40 */
+ 0x8F6D, 0x8F6E, 0x8F6F, 0x8F70, 0x8F71, 0x8F73, 0x8F74, 0x8F75, /* 0x50 */
+ 0x8F76, 0x8F77, 0x8F78, 0x8F79, 0x8F7A, 0x8F7B, 0x8F7C, 0x8F7D, /* 0x50 */
+ 0x8F81, 0x8F82, 0x8F83, 0x8F84, 0x8F85, 0x8F86, 0x8F87, 0x8F88, /* 0x60 */
+ 0x8F89, 0x8F8A, 0x8F8B, 0x8F8C, 0x8F8D, 0x8F8E, 0x8F8F, 0x8F90, /* 0x60 */
+ 0x8F91, 0x8F93, 0x8F94, 0x8F95, 0x8F96, 0x8F97, 0x8F98, 0x8F99, /* 0x70 */
+ 0x8F9A, 0x8F9B, 0x8F9C, 0x8F9D, 0x8FA1, 0x8FA2, 0x8FA3, 0x8FA4, /* 0x70 */
+ 0x8FA5, 0x8FA6, 0x8FA7, 0x8FA8, 0x8FA9, 0x8FAA, 0x8FAB, 0x8FAC, /* 0x80 */
+ 0x8FAD, 0x8FAE, 0x8FAF, 0x8FB0, 0x8FB1, 0x8FB3, 0x8FB4, 0x8FB5, /* 0x80 */
+ 0x8FB6, 0x8FB7, 0x8FB8, 0x8FB9, 0x8FBA, 0x8FBB, 0x8FBC, 0x8FBD, /* 0x90 */
+ 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0x9066, 0x9067, 0x9068, /* 0x90 */
+ 0x9069, 0x906A, 0x906B, 0x906C, 0x906D, 0x906E, 0x906F, 0x9070, /* 0xA0 */
+ 0x9071, 0x9073, 0x9074, 0x9075, 0x9076, 0x9077, 0x9078, 0x9079, /* 0xA0 */
+ 0x907A, 0x907B, 0x907C, 0x907D, 0x9081, 0x9082, 0x9083, 0x9084, /* 0xB0 */
+ 0x9085, 0x9086, 0x9087, 0x9088, 0x9089, 0x908A, 0x908B, 0x908C, /* 0xB0 */
+ 0x908D, 0x908E, 0x908F, 0x9090, 0x9091, 0x9093, 0x9094, 0x9095, /* 0xC0 */
+ 0x9096, 0x9097, 0x9098, 0x9099, 0x909A, 0x909B, 0x909C, 0x909D, /* 0xC0 */
+ 0x90A1, 0x90A2, 0x90A3, 0x90A4, 0x90A5, 0x90A6, 0x90A7, 0x90A8, /* 0xD0 */
+ 0x90A9, 0x90AA, 0x90AB, 0x90AC, 0x90AD, 0x90AE, 0x90AF, 0x90B0, /* 0xD0 */
+ 0x90B1, 0x90B3, 0x90B4, 0x90B5, 0x90B6, 0x90B7, 0x90B8, 0x90B9, /* 0xE0 */
+ 0x90BA, 0x90BB, 0x90BC, 0x90BD, 0x90C1, 0x90C2, 0x90C3, 0x90C4, /* 0xE0 */
+ 0x90C5, 0x90C6, 0x90C7, 0x90C8, 0x90C9, 0x90CA, 0x90CB, 0x90CC, /* 0xF0 */
+ 0x90CD, 0x90CE, 0x90CF, 0x90D0, 0x90D1, 0x90D3, 0x90D4, 0x90D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x90D6, 0x90D7, 0x90D8, 0x90D9, 0x90DA, 0x90DB, 0x90DC, 0x90DD, /* 0x00 */
+ 0x90E1, 0x90E2, 0x90E3, 0x90E4, 0x90E5, 0x90E6, 0x90E7, 0x90E8, /* 0x00 */
+ 0x90E9, 0x90EA, 0x90EB, 0x90EC, 0x90ED, 0x90EE, 0x90EF, 0x90F0, /* 0x10 */
+ 0x90F1, 0x90F3, 0x90F4, 0x90F5, 0x90F6, 0x90F7, 0x90F8, 0x90F9, /* 0x10 */
+ 0x90FA, 0x90FB, 0x90FC, 0x90FD, 0x9141, 0x9142, 0x9143, 0x9144, /* 0x20 */
+ 0x9145, 0x9146, 0x9147, 0x9148, 0x9149, 0x914A, 0x914B, 0x914C, /* 0x20 */
+ 0x914D, 0x914E, 0x914F, 0x9150, 0x9151, 0x9153, 0x9154, 0x9155, /* 0x30 */
+ 0x9156, 0x9157, 0x9158, 0x9159, 0x915A, 0x915B, 0x915C, 0x915D, /* 0x30 */
+ 0x9161, 0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, /* 0x40 */
+ 0x9169, 0x916A, 0x916B, 0x916C, 0x916D, 0x916E, 0x916F, 0x9170, /* 0x40 */
+ 0x9171, 0x9173, 0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179, /* 0x50 */
+ 0x917A, 0x917B, 0x917C, 0x917D, 0x9181, 0x9182, 0x9183, 0x9184, /* 0x50 */
+ 0x9185, 0x9186, 0x9187, 0x9188, 0x9189, 0x918A, 0x918B, 0x918C, /* 0x60 */
+ 0x918D, 0x918E, 0x918F, 0x9190, 0x9191, 0x9193, 0x9194, 0x9195, /* 0x60 */
+ 0x9196, 0x9197, 0x9198, 0x9199, 0x919A, 0x919B, 0x919C, 0x919D, /* 0x70 */
+ 0x91A1, 0x91A2, 0x91A3, 0x91A4, 0x91A5, 0x91A6, 0x91A7, 0x91A8, /* 0x70 */
+ 0x91A9, 0x91AA, 0x91AB, 0x91AC, 0x91AD, 0x91AE, 0x91AF, 0x91B0, /* 0x80 */
+ 0x91B1, 0x91B3, 0x91B4, 0x91B5, 0x91B6, 0x91B7, 0x91B8, 0x91B9, /* 0x80 */
+ 0x91BA, 0x91BB, 0x91BC, 0x91BD, 0x91C1, 0x91C2, 0x91C3, 0x91C4, /* 0x90 */
+ 0x91C5, 0x91C6, 0x91C7, 0x91C8, 0x91C9, 0x91CA, 0x91CB, 0x91CC, /* 0x90 */
+ 0x91CD, 0x91CE, 0x91CF, 0x91D0, 0x91D1, 0x91D3, 0x91D4, 0x91D5, /* 0xA0 */
+ 0x91D6, 0x91D7, 0x91D8, 0x91D9, 0x91DA, 0x91DB, 0x91DC, 0x91DD, /* 0xA0 */
+ 0x91E1, 0x91E2, 0x91E3, 0x91E4, 0x91E5, 0x91E6, 0x91E7, 0x91E8, /* 0xB0 */
+ 0x91E9, 0x91EA, 0x91EB, 0x91EC, 0x91ED, 0x91EE, 0x91EF, 0x91F0, /* 0xB0 */
+ 0x91F1, 0x91F3, 0x91F4, 0x91F5, 0x91F6, 0x91F7, 0x91F8, 0x91F9, /* 0xC0 */
+ 0x91FA, 0x91FB, 0x91FC, 0x91FD, 0x9241, 0x9242, 0x9243, 0x9244, /* 0xC0 */
+ 0x9245, 0x9246, 0x9247, 0x9248, 0x9249, 0x924A, 0x924B, 0x924C, /* 0xD0 */
+ 0x924D, 0x924E, 0x924F, 0x9250, 0x9251, 0x9253, 0x9254, 0x9255, /* 0xD0 */
+ 0x9256, 0x9257, 0x9258, 0x9259, 0x925A, 0x925B, 0x925C, 0x925D, /* 0xE0 */
+ 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, 0x9266, 0x9267, 0x9268, /* 0xE0 */
+ 0x9269, 0x926A, 0x926B, 0x926C, 0x926D, 0x926E, 0x926F, 0x9270, /* 0xF0 */
+ 0x9271, 0x9273, 0x9274, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x927A, 0x927B, 0x927C, 0x927D, 0x9281, 0x9282, 0x9283, 0x9284, /* 0x00 */
+ 0x9285, 0x9286, 0x9287, 0x9288, 0x9289, 0x928A, 0x928B, 0x928C, /* 0x00 */
+ 0x928D, 0x928E, 0x928F, 0x9290, 0x9291, 0x9293, 0x9294, 0x9295, /* 0x10 */
+ 0x9296, 0x9297, 0x9298, 0x9299, 0x929A, 0x929B, 0x929C, 0x929D, /* 0x10 */
+ 0x92A1, 0x92A2, 0x92A3, 0x92A4, 0x92A5, 0x92A6, 0x92A7, 0x92A8, /* 0x20 */
+ 0x92A9, 0x92AA, 0x92AB, 0x92AC, 0x92AD, 0x92AE, 0x92AF, 0x92B0, /* 0x20 */
+ 0x92B1, 0x92B3, 0x92B4, 0x92B5, 0x92B6, 0x92B7, 0x92B8, 0x92B9, /* 0x30 */
+ 0x92BA, 0x92BB, 0x92BC, 0x92BD, 0x92C1, 0x92C2, 0x92C3, 0x92C4, /* 0x30 */
+ 0x92C5, 0x92C6, 0x92C7, 0x92C8, 0x92C9, 0x92CA, 0x92CB, 0x92CC, /* 0x40 */
+ 0x92CD, 0x92CE, 0x92CF, 0x92D0, 0x92D1, 0x92D3, 0x92D4, 0x92D5, /* 0x40 */
+ 0x92D6, 0x92D7, 0x92D8, 0x92D9, 0x92DA, 0x92DB, 0x92DC, 0x92DD, /* 0x50 */
+ 0x92E1, 0x92E2, 0x92E3, 0x92E4, 0x92E5, 0x92E6, 0x92E7, 0x92E8, /* 0x50 */
+ 0x92E9, 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, /* 0x60 */
+ 0x92F1, 0x92F3, 0x92F4, 0x92F5, 0x92F6, 0x92F7, 0x92F8, 0x92F9, /* 0x60 */
+ 0x92FA, 0x92FB, 0x92FC, 0x92FD, 0x9341, 0x9342, 0x9343, 0x9344, /* 0x70 */
+ 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934A, 0x934B, 0x934C, /* 0x70 */
+ 0x934D, 0x934E, 0x934F, 0x9350, 0x9351, 0x9353, 0x9354, 0x9355, /* 0x80 */
+ 0x9356, 0x9357, 0x9358, 0x9359, 0x935A, 0x935B, 0x935C, 0x935D, /* 0x80 */
+ 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, /* 0x90 */
+ 0x9369, 0x936A, 0x936B, 0x936C, 0x936D, 0x936E, 0x936F, 0x9370, /* 0x90 */
+ 0x9371, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, /* 0xA0 */
+ 0x937A, 0x937B, 0x937C, 0x937D, 0x9381, 0x9382, 0x9383, 0x9384, /* 0xA0 */
+ 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938A, 0x938B, 0x938C, /* 0xB0 */
+ 0x938D, 0x938E, 0x938F, 0x9390, 0x9391, 0x9393, 0x9394, 0x9395, /* 0xB0 */
+ 0x9396, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, 0x939C, 0x939D, /* 0xC0 */
+ 0x93A1, 0x93A2, 0x93A3, 0x93A4, 0x93A5, 0x93A6, 0x93A7, 0x93A8, /* 0xC0 */
+ 0x93A9, 0x93AA, 0x93AB, 0x93AC, 0x93AD, 0x93AE, 0x93AF, 0x93B0, /* 0xD0 */
+ 0x93B1, 0x93B3, 0x93B4, 0x93B5, 0x93B6, 0x93B7, 0x93B8, 0x93B9, /* 0xD0 */
+ 0x93BA, 0x93BB, 0x93BC, 0x93BD, 0x9461, 0x9462, 0x9463, 0x9464, /* 0xE0 */
+ 0x9465, 0x9466, 0x9467, 0x9468, 0x9469, 0x946A, 0x946B, 0x946C, /* 0xE0 */
+ 0x946D, 0x946E, 0x946F, 0x9470, 0x9471, 0x9473, 0x9474, 0x9475, /* 0xF0 */
+ 0x9476, 0x9477, 0x9478, 0x9479, 0x947A, 0x947B, 0x947C, 0x947D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, 0x9487, 0x9488, /* 0x00 */
+ 0x9489, 0x948A, 0x948B, 0x948C, 0x948D, 0x948E, 0x948F, 0x9490, /* 0x00 */
+ 0x9491, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, 0x9499, /* 0x10 */
+ 0x949A, 0x949B, 0x949C, 0x949D, 0x94A1, 0x94A2, 0x94A3, 0x94A4, /* 0x10 */
+ 0x94A5, 0x94A6, 0x94A7, 0x94A8, 0x94A9, 0x94AA, 0x94AB, 0x94AC, /* 0x20 */
+ 0x94AD, 0x94AE, 0x94AF, 0x94B0, 0x94B1, 0x94B3, 0x94B4, 0x94B5, /* 0x20 */
+ 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC, 0x94BD, /* 0x30 */
+ 0x94C1, 0x94C2, 0x94C3, 0x94C4, 0x94C5, 0x94C6, 0x94C7, 0x94C8, /* 0x30 */
+ 0x94C9, 0x94CA, 0x94CB, 0x94CC, 0x94CD, 0x94CE, 0x94CF, 0x94D0, /* 0x40 */
+ 0x94D1, 0x94D3, 0x94D4, 0x94D5, 0x94D6, 0x94D7, 0x94D8, 0x94D9, /* 0x40 */
+ 0x94DA, 0x94DB, 0x94DC, 0x94DD, 0x94E1, 0x94E2, 0x94E3, 0x94E4, /* 0x50 */
+ 0x94E5, 0x94E6, 0x94E7, 0x94E8, 0x94E9, 0x94EA, 0x94EB, 0x94EC, /* 0x50 */
+ 0x94ED, 0x94EE, 0x94EF, 0x94F0, 0x94F1, 0x94F3, 0x94F4, 0x94F5, /* 0x60 */
+ 0x94F6, 0x94F7, 0x94F8, 0x94F9, 0x94FA, 0x94FB, 0x94FC, 0x94FD, /* 0x60 */
+ 0x9541, 0x9542, 0x9543, 0x9544, 0x9545, 0x9546, 0x9547, 0x9548, /* 0x70 */
+ 0x9549, 0x954A, 0x954B, 0x954C, 0x954D, 0x954E, 0x954F, 0x9550, /* 0x70 */
+ 0x9551, 0x9553, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559, /* 0x80 */
+ 0x955A, 0x955B, 0x955C, 0x955D, 0x9561, 0x9562, 0x9563, 0x9564, /* 0x80 */
+ 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, 0x956A, 0x956B, 0x956C, /* 0x90 */
+ 0x956D, 0x956E, 0x956F, 0x9570, 0x9571, 0x9573, 0x9574, 0x9575, /* 0x90 */
+ 0x9576, 0x9577, 0x9578, 0x9579, 0x957A, 0x957B, 0x957C, 0x957D, /* 0xA0 */
+ 0x9581, 0x9582, 0x9583, 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, /* 0xA0 */
+ 0x9589, 0x958A, 0x958B, 0x958C, 0x958D, 0x958E, 0x958F, 0x9590, /* 0xB0 */
+ 0x9591, 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, /* 0xB0 */
+ 0x959A, 0x959B, 0x959C, 0x959D, 0x95A1, 0x95A2, 0x95A3, 0x95A4, /* 0xC0 */
+ 0x95A5, 0x95A6, 0x95A7, 0x95A8, 0x95A9, 0x95AA, 0x95AB, 0x95AC, /* 0xC0 */
+ 0x95AD, 0x95AE, 0x95AF, 0x95B0, 0x95B1, 0x95B3, 0x95B4, 0x95B5, /* 0xD0 */
+ 0x95B6, 0x95B7, 0x95B8, 0x95B9, 0x95BA, 0x95BB, 0x95BC, 0x95BD, /* 0xD0 */
+ 0x95C1, 0x95C2, 0x95C3, 0x95C4, 0x95C5, 0x95C6, 0x95C7, 0x95C8, /* 0xE0 */
+ 0x95C9, 0x95CA, 0x95CB, 0x95CC, 0x95CD, 0x95CE, 0x95CF, 0x95D0, /* 0xE0 */
+ 0x95D1, 0x95D3, 0x95D4, 0x95D5, 0x95D6, 0x95D7, 0x95D8, 0x95D9, /* 0xF0 */
+ 0x95DA, 0x95DB, 0x95DC, 0x95DD, 0x95E1, 0x95E2, 0x95E3, 0x95E4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x95E5, 0x95E6, 0x95E7, 0x95E8, 0x95E9, 0x95EA, 0x95EB, 0x95EC, /* 0x00 */
+ 0x95ED, 0x95EE, 0x95EF, 0x95F0, 0x95F1, 0x95F3, 0x95F4, 0x95F5, /* 0x00 */
+ 0x95F6, 0x95F7, 0x95F8, 0x95F9, 0x95FA, 0x95FB, 0x95FC, 0x95FD, /* 0x10 */
+ 0x9641, 0x9642, 0x9643, 0x9644, 0x9645, 0x9646, 0x9647, 0x9648, /* 0x10 */
+ 0x9649, 0x964A, 0x964B, 0x964C, 0x964D, 0x964E, 0x964F, 0x9650, /* 0x20 */
+ 0x9651, 0x9653, 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, 0x9659, /* 0x20 */
+ 0x965A, 0x965B, 0x965C, 0x965D, 0x9661, 0x9662, 0x9663, 0x9664, /* 0x30 */
+ 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, 0x966A, 0x966B, 0x966C, /* 0x30 */
+ 0x966D, 0x966E, 0x966F, 0x9670, 0x9671, 0x9673, 0x9674, 0x9675, /* 0x40 */
+ 0x9676, 0x9677, 0x9678, 0x9679, 0x967A, 0x967B, 0x967C, 0x967D, /* 0x40 */
+ 0x9681, 0x9682, 0x9683, 0x9684, 0x9685, 0x9686, 0x9687, 0x9688, /* 0x50 */
+ 0x9689, 0x968A, 0x968B, 0x968C, 0x968D, 0x968E, 0x968F, 0x9690, /* 0x50 */
+ 0x9691, 0x9693, 0x9694, 0x9695, 0x9696, 0x9697, 0x9698, 0x9699, /* 0x60 */
+ 0x969A, 0x969B, 0x969C, 0x969D, 0x96A1, 0x96A2, 0x96A3, 0x96A4, /* 0x60 */
+ 0x96A5, 0x96A6, 0x96A7, 0x96A8, 0x96A9, 0x96AA, 0x96AB, 0x96AC, /* 0x70 */
+ 0x96AD, 0x96AE, 0x96AF, 0x96B0, 0x96B1, 0x96B3, 0x96B4, 0x96B5, /* 0x70 */
+ 0x96B6, 0x96B7, 0x96B8, 0x96B9, 0x96BA, 0x96BB, 0x96BC, 0x96BD, /* 0x80 */
+ 0x96C1, 0x96C2, 0x96C3, 0x96C4, 0x96C5, 0x96C6, 0x96C7, 0x96C8, /* 0x80 */
+ 0x96C9, 0x96CA, 0x96CB, 0x96CC, 0x96CD, 0x96CE, 0x96CF, 0x96D0, /* 0x90 */
+ 0x96D1, 0x96D3, 0x96D4, 0x96D5, 0x96D6, 0x96D7, 0x96D8, 0x96D9, /* 0x90 */
+ 0x96DA, 0x96DB, 0x96DC, 0x96DD, 0x96E1, 0x96E2, 0x96E3, 0x96E4, /* 0xA0 */
+ 0x96E5, 0x96E6, 0x96E7, 0x96E8, 0x96E9, 0x96EA, 0x96EB, 0x96EC, /* 0xA0 */
+ 0x96ED, 0x96EE, 0x96EF, 0x96F0, 0x96F1, 0x96F3, 0x96F4, 0x96F5, /* 0xB0 */
+ 0x96F6, 0x96F7, 0x96F8, 0x96F9, 0x96FA, 0x96FB, 0x96FC, 0x96FD, /* 0xB0 */
+ 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, 0x9748, /* 0xC0 */
+ 0x9749, 0x974A, 0x974B, 0x974C, 0x974D, 0x974E, 0x974F, 0x9750, /* 0xC0 */
+ 0x9751, 0x9753, 0x9754, 0x9755, 0x9756, 0x9757, 0x9758, 0x9759, /* 0xD0 */
+ 0x975A, 0x975B, 0x975C, 0x975D, 0x9761, 0x9762, 0x9763, 0x9764, /* 0xD0 */
+ 0x9765, 0x9766, 0x9767, 0x9768, 0x9769, 0x976A, 0x976B, 0x976C, /* 0xE0 */
+ 0x976D, 0x976E, 0x976F, 0x9770, 0x9771, 0x9773, 0x9774, 0x9775, /* 0xE0 */
+ 0x9776, 0x9777, 0x9778, 0x9779, 0x977A, 0x977B, 0x977C, 0x977D, /* 0xF0 */
+ 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, 0x9787, 0x9788 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9789, 0x978A, 0x978B, 0x978C, 0x978D, 0x978E, 0x978F, 0x9790, /* 0x00 */
+ 0x9791, 0x9793, 0x9794, 0x9795, 0x9796, 0x9797, 0x9798, 0x9799, /* 0x00 */
+ 0x979A, 0x979B, 0x979C, 0x979D, 0x97A1, 0x97A2, 0x97A3, 0x97A4, /* 0x10 */
+ 0x97A5, 0x97A6, 0x97A7, 0x97A8, 0x97A9, 0x97AA, 0x97AB, 0x97AC, /* 0x10 */
+ 0x97AD, 0x97AE, 0x97AF, 0x97B0, 0x97B1, 0x97B3, 0x97B4, 0x97B5, /* 0x20 */
+ 0x97B6, 0x97B7, 0x97B8, 0x97B9, 0x97BA, 0x97BB, 0x97BC, 0x97BD, /* 0x20 */
+ 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867, 0x9868, /* 0x30 */
+ 0x9869, 0x986A, 0x986B, 0x986C, 0x986D, 0x986E, 0x986F, 0x9870, /* 0x30 */
+ 0x9871, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, 0x9878, 0x9879, /* 0x40 */
+ 0x987A, 0x987B, 0x987C, 0x987D, 0x9881, 0x9882, 0x9883, 0x9884, /* 0x40 */
+ 0x9885, 0x9886, 0x9887, 0x9888, 0x9889, 0x988A, 0x988B, 0x988C, /* 0x50 */
+ 0x988D, 0x988E, 0x988F, 0x9890, 0x9891, 0x9893, 0x9894, 0x9895, /* 0x50 */
+ 0x9896, 0x9897, 0x9898, 0x9899, 0x989A, 0x989B, 0x989C, 0x989D, /* 0x60 */
+ 0x98A1, 0x98A2, 0x98A3, 0x98A4, 0x98A5, 0x98A6, 0x98A7, 0x98A8, /* 0x60 */
+ 0x98A9, 0x98AA, 0x98AB, 0x98AC, 0x98AD, 0x98AE, 0x98AF, 0x98B0, /* 0x70 */
+ 0x98B1, 0x98B3, 0x98B4, 0x98B5, 0x98B6, 0x98B7, 0x98B8, 0x98B9, /* 0x70 */
+ 0x98BA, 0x98BB, 0x98BC, 0x98BD, 0x98C1, 0x98C2, 0x98C3, 0x98C4, /* 0x80 */
+ 0x98C5, 0x98C6, 0x98C7, 0x98C8, 0x98C9, 0x98CA, 0x98CB, 0x98CC, /* 0x80 */
+ 0x98CD, 0x98CE, 0x98CF, 0x98D0, 0x98D1, 0x98D3, 0x98D4, 0x98D5, /* 0x90 */
+ 0x98D6, 0x98D7, 0x98D8, 0x98D9, 0x98DA, 0x98DB, 0x98DC, 0x98DD, /* 0x90 */
+ 0x98E1, 0x98E2, 0x98E3, 0x98E4, 0x98E5, 0x98E6, 0x98E7, 0x98E8, /* 0xA0 */
+ 0x98E9, 0x98EA, 0x98EB, 0x98EC, 0x98ED, 0x98EE, 0x98EF, 0x98F0, /* 0xA0 */
+ 0x98F1, 0x98F3, 0x98F4, 0x98F5, 0x98F6, 0x98F7, 0x98F8, 0x98F9, /* 0xB0 */
+ 0x98FA, 0x98FB, 0x98FC, 0x98FD, 0x9941, 0x9942, 0x9943, 0x9944, /* 0xB0 */
+ 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x994A, 0x994B, 0x994C, /* 0xC0 */
+ 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, 0x9953, 0x9954, 0x9955, /* 0xC0 */
+ 0x9956, 0x9957, 0x9958, 0x9959, 0x995A, 0x995B, 0x995C, 0x995D, /* 0xD0 */
+ 0x9961, 0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968, /* 0xD0 */
+ 0x9969, 0x996A, 0x996B, 0x996C, 0x996D, 0x996E, 0x996F, 0x9970, /* 0xE0 */
+ 0x9971, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, 0x9979, /* 0xE0 */
+ 0x997A, 0x997B, 0x997C, 0x997D, 0x9981, 0x9982, 0x9983, 0x9984, /* 0xF0 */
+ 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0x998A, 0x998B, 0x998C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x998D, 0x998E, 0x998F, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, /* 0x00 */
+ 0x9996, 0x9997, 0x9998, 0x9999, 0x999A, 0x999B, 0x999C, 0x999D, /* 0x00 */
+ 0x99A1, 0x99A2, 0x99A3, 0x99A4, 0x99A5, 0x99A6, 0x99A7, 0x99A8, /* 0x10 */
+ 0x99A9, 0x99AA, 0x99AB, 0x99AC, 0x99AD, 0x99AE, 0x99AF, 0x99B0, /* 0x10 */
+ 0x99B1, 0x99B3, 0x99B4, 0x99B5, 0x99B6, 0x99B7, 0x99B8, 0x99B9, /* 0x20 */
+ 0x99BA, 0x99BB, 0x99BC, 0x99BD, 0x99C1, 0x99C2, 0x99C3, 0x99C4, /* 0x20 */
+ 0x99C5, 0x99C6, 0x99C7, 0x99C8, 0x99C9, 0x99CA, 0x99CB, 0x99CC, /* 0x30 */
+ 0x99CD, 0x99CE, 0x99CF, 0x99D0, 0x99D1, 0x99D3, 0x99D4, 0x99D5, /* 0x30 */
+ 0x99D6, 0x99D7, 0x99D8, 0x99D9, 0x99DA, 0x99DB, 0x99DC, 0x99DD, /* 0x40 */
+ 0x99E1, 0x99E2, 0x99E3, 0x99E4, 0x99E5, 0x99E6, 0x99E7, 0x99E8, /* 0x40 */
+ 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99ED, 0x99EE, 0x99EF, 0x99F0, /* 0x50 */
+ 0x99F1, 0x99F3, 0x99F4, 0x99F5, 0x99F6, 0x99F7, 0x99F8, 0x99F9, /* 0x50 */
+ 0x99FA, 0x99FB, 0x99FC, 0x99FD, 0x9A41, 0x9A42, 0x9A43, 0x9A44, /* 0x60 */
+ 0x9A45, 0x9A46, 0x9A47, 0x9A48, 0x9A49, 0x9A4A, 0x9A4B, 0x9A4C, /* 0x60 */
+ 0x9A4D, 0x9A4E, 0x9A4F, 0x9A50, 0x9A51, 0x9A53, 0x9A54, 0x9A55, /* 0x70 */
+ 0x9A56, 0x9A57, 0x9A58, 0x9A59, 0x9A5A, 0x9A5B, 0x9A5C, 0x9A5D, /* 0x70 */
+ 0x9A61, 0x9A62, 0x9A63, 0x9A64, 0x9A65, 0x9A66, 0x9A67, 0x9A68, /* 0x80 */
+ 0x9A69, 0x9A6A, 0x9A6B, 0x9A6C, 0x9A6D, 0x9A6E, 0x9A6F, 0x9A70, /* 0x80 */
+ 0x9A71, 0x9A73, 0x9A74, 0x9A75, 0x9A76, 0x9A77, 0x9A78, 0x9A79, /* 0x90 */
+ 0x9A7A, 0x9A7B, 0x9A7C, 0x9A7D, 0x9A81, 0x9A82, 0x9A83, 0x9A84, /* 0x90 */
+ 0x9A85, 0x9A86, 0x9A87, 0x9A88, 0x9A89, 0x9A8A, 0x9A8B, 0x9A8C, /* 0xA0 */
+ 0x9A8D, 0x9A8E, 0x9A8F, 0x9A90, 0x9A91, 0x9A93, 0x9A94, 0x9A95, /* 0xA0 */
+ 0x9A96, 0x9A97, 0x9A98, 0x9A99, 0x9A9A, 0x9A9B, 0x9A9C, 0x9A9D, /* 0xB0 */
+ 0x9AA1, 0x9AA2, 0x9AA3, 0x9AA4, 0x9AA5, 0x9AA6, 0x9AA7, 0x9AA8, /* 0xB0 */
+ 0x9AA9, 0x9AAA, 0x9AAB, 0x9AAC, 0x9AAD, 0x9AAE, 0x9AAF, 0x9AB0, /* 0xC0 */
+ 0x9AB1, 0x9AB3, 0x9AB4, 0x9AB5, 0x9AB6, 0x9AB7, 0x9AB8, 0x9AB9, /* 0xC0 */
+ 0x9ABA, 0x9ABB, 0x9ABC, 0x9ABD, 0x9AC1, 0x9AC2, 0x9AC3, 0x9AC4, /* 0xD0 */
+ 0x9AC5, 0x9AC6, 0x9AC7, 0x9AC8, 0x9AC9, 0x9ACA, 0x9ACB, 0x9ACC, /* 0xD0 */
+ 0x9ACD, 0x9ACE, 0x9ACF, 0x9AD0, 0x9AD1, 0x9AD3, 0x9AD4, 0x9AD5, /* 0xE0 */
+ 0x9AD6, 0x9AD7, 0x9AD8, 0x9AD9, 0x9ADA, 0x9ADB, 0x9ADC, 0x9ADD, /* 0xE0 */
+ 0x9AE1, 0x9AE2, 0x9AE3, 0x9AE4, 0x9AE5, 0x9AE6, 0x9AE7, 0x9AE8, /* 0xF0 */
+ 0x9AE9, 0x9AEA, 0x9AEB, 0x9AEC, 0x9AED, 0x9AEE, 0x9AEF, 0x9AF0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9AF1, 0x9AF3, 0x9AF4, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AF9, /* 0x00 */
+ 0x9AFA, 0x9AFB, 0x9AFC, 0x9AFD, 0x9B41, 0x9B42, 0x9B43, 0x9B44, /* 0x00 */
+ 0x9B45, 0x9B46, 0x9B47, 0x9B48, 0x9B49, 0x9B4A, 0x9B4B, 0x9B4C, /* 0x10 */
+ 0x9B4D, 0x9B4E, 0x9B4F, 0x9B50, 0x9B51, 0x9B53, 0x9B54, 0x9B55, /* 0x10 */
+ 0x9B56, 0x9B57, 0x9B58, 0x9B59, 0x9B5A, 0x9B5B, 0x9B5C, 0x9B5D, /* 0x20 */
+ 0x9B61, 0x9B62, 0x9B63, 0x9B64, 0x9B65, 0x9B66, 0x9B67, 0x9B68, /* 0x20 */
+ 0x9B69, 0x9B6A, 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B6F, 0x9B70, /* 0x30 */
+ 0x9B71, 0x9B73, 0x9B74, 0x9B75, 0x9B76, 0x9B77, 0x9B78, 0x9B79, /* 0x30 */
+ 0x9B7A, 0x9B7B, 0x9B7C, 0x9B7D, 0x9B81, 0x9B82, 0x9B83, 0x9B84, /* 0x40 */
+ 0x9B85, 0x9B86, 0x9B87, 0x9B88, 0x9B89, 0x9B8A, 0x9B8B, 0x9B8C, /* 0x40 */
+ 0x9B8D, 0x9B8E, 0x9B8F, 0x9B90, 0x9B91, 0x9B93, 0x9B94, 0x9B95, /* 0x50 */
+ 0x9B96, 0x9B97, 0x9B98, 0x9B99, 0x9B9A, 0x9B9B, 0x9B9C, 0x9B9D, /* 0x50 */
+ 0x9BA1, 0x9BA2, 0x9BA3, 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0x9BA8, /* 0x60 */
+ 0x9BA9, 0x9BAA, 0x9BAB, 0x9BAC, 0x9BAD, 0x9BAE, 0x9BAF, 0x9BB0, /* 0x60 */
+ 0x9BB1, 0x9BB3, 0x9BB4, 0x9BB5, 0x9BB6, 0x9BB7, 0x9BB8, 0x9BB9, /* 0x70 */
+ 0x9BBA, 0x9BBB, 0x9BBC, 0x9BBD, 0x9C61, 0x9C62, 0x9C63, 0x9C64, /* 0x70 */
+ 0x9C65, 0x9C66, 0x9C67, 0x9C68, 0x9C69, 0x9C6A, 0x9C6B, 0x9C6C, /* 0x80 */
+ 0x9C6D, 0x9C6E, 0x9C6F, 0x9C70, 0x9C71, 0x9C73, 0x9C74, 0x9C75, /* 0x80 */
+ 0x9C76, 0x9C77, 0x9C78, 0x9C79, 0x9C7A, 0x9C7B, 0x9C7C, 0x9C7D, /* 0x90 */
+ 0x9C81, 0x9C82, 0x9C83, 0x9C84, 0x9C85, 0x9C86, 0x9C87, 0x9C88, /* 0x90 */
+ 0x9C89, 0x9C8A, 0x9C8B, 0x9C8C, 0x9C8D, 0x9C8E, 0x9C8F, 0x9C90, /* 0xA0 */
+ 0x9C91, 0x9C93, 0x9C94, 0x9C95, 0x9C96, 0x9C97, 0x9C98, 0x9C99, /* 0xA0 */
+ 0x9C9A, 0x9C9B, 0x9C9C, 0x9C9D, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA4, /* 0xB0 */
+ 0x9CA5, 0x9CA6, 0x9CA7, 0x9CA8, 0x9CA9, 0x9CAA, 0x9CAB, 0x9CAC, /* 0xB0 */
+ 0x9CAD, 0x9CAE, 0x9CAF, 0x9CB0, 0x9CB1, 0x9CB3, 0x9CB4, 0x9CB5, /* 0xC0 */
+ 0x9CB6, 0x9CB7, 0x9CB8, 0x9CB9, 0x9CBA, 0x9CBB, 0x9CBC, 0x9CBD, /* 0xC0 */
+ 0x9CC1, 0x9CC2, 0x9CC3, 0x9CC4, 0x9CC5, 0x9CC6, 0x9CC7, 0x9CC8, /* 0xD0 */
+ 0x9CC9, 0x9CCA, 0x9CCB, 0x9CCC, 0x9CCD, 0x9CCE, 0x9CCF, 0x9CD0, /* 0xD0 */
+ 0x9CD1, 0x9CD3, 0x9CD4, 0x9CD5, 0x9CD6, 0x9CD7, 0x9CD8, 0x9CD9, /* 0xE0 */
+ 0x9CDA, 0x9CDB, 0x9CDC, 0x9CDD, 0x9CE1, 0x9CE2, 0x9CE3, 0x9CE4, /* 0xE0 */
+ 0x9CE5, 0x9CE6, 0x9CE7, 0x9CE8, 0x9CE9, 0x9CEA, 0x9CEB, 0x9CEC, /* 0xF0 */
+ 0x9CED, 0x9CEE, 0x9CEF, 0x9CF0, 0x9CF1, 0x9CF3, 0x9CF4, 0x9CF5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9CF6, 0x9CF7, 0x9CF8, 0x9CF9, 0x9CFA, 0x9CFB, 0x9CFC, 0x9CFD, /* 0x00 */
+ 0x9D41, 0x9D42, 0x9D43, 0x9D44, 0x9D45, 0x9D46, 0x9D47, 0x9D48, /* 0x00 */
+ 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, 0x9D4F, 0x9D50, /* 0x10 */
+ 0x9D51, 0x9D53, 0x9D54, 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, /* 0x10 */
+ 0x9D5A, 0x9D5B, 0x9D5C, 0x9D5D, 0x9D61, 0x9D62, 0x9D63, 0x9D64, /* 0x20 */
+ 0x9D65, 0x9D66, 0x9D67, 0x9D68, 0x9D69, 0x9D6A, 0x9D6B, 0x9D6C, /* 0x20 */
+ 0x9D6D, 0x9D6E, 0x9D6F, 0x9D70, 0x9D71, 0x9D73, 0x9D74, 0x9D75, /* 0x30 */
+ 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, 0x9D7B, 0x9D7C, 0x9D7D, /* 0x30 */
+ 0x9D81, 0x9D82, 0x9D83, 0x9D84, 0x9D85, 0x9D86, 0x9D87, 0x9D88, /* 0x40 */
+ 0x9D89, 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, /* 0x40 */
+ 0x9D91, 0x9D93, 0x9D94, 0x9D95, 0x9D96, 0x9D97, 0x9D98, 0x9D99, /* 0x50 */
+ 0x9D9A, 0x9D9B, 0x9D9C, 0x9D9D, 0x9DA1, 0x9DA2, 0x9DA3, 0x9DA4, /* 0x50 */
+ 0x9DA5, 0x9DA6, 0x9DA7, 0x9DA8, 0x9DA9, 0x9DAA, 0x9DAB, 0x9DAC, /* 0x60 */
+ 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0x9DB1, 0x9DB3, 0x9DB4, 0x9DB5, /* 0x60 */
+ 0x9DB6, 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBB, 0x9DBC, 0x9DBD, /* 0x70 */
+ 0x9DC1, 0x9DC2, 0x9DC3, 0x9DC4, 0x9DC5, 0x9DC6, 0x9DC7, 0x9DC8, /* 0x70 */
+ 0x9DC9, 0x9DCA, 0x9DCB, 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, /* 0x80 */
+ 0x9DD1, 0x9DD3, 0x9DD4, 0x9DD5, 0x9DD6, 0x9DD7, 0x9DD8, 0x9DD9, /* 0x80 */
+ 0x9DDA, 0x9DDB, 0x9DDC, 0x9DDD, 0x9DE1, 0x9DE2, 0x9DE3, 0x9DE4, /* 0x90 */
+ 0x9DE5, 0x9DE6, 0x9DE7, 0x9DE8, 0x9DE9, 0x9DEA, 0x9DEB, 0x9DEC, /* 0x90 */
+ 0x9DED, 0x9DEE, 0x9DEF, 0x9DF0, 0x9DF1, 0x9DF3, 0x9DF4, 0x9DF5, /* 0xA0 */
+ 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, 0x9DFA, 0x9DFB, 0x9DFC, 0x9DFD, /* 0xA0 */
+ 0x9E41, 0x9E42, 0x9E43, 0x9E44, 0x9E45, 0x9E46, 0x9E47, 0x9E48, /* 0xB0 */
+ 0x9E49, 0x9E4A, 0x9E4B, 0x9E4C, 0x9E4D, 0x9E4E, 0x9E4F, 0x9E50, /* 0xB0 */
+ 0x9E51, 0x9E53, 0x9E54, 0x9E55, 0x9E56, 0x9E57, 0x9E58, 0x9E59, /* 0xC0 */
+ 0x9E5A, 0x9E5B, 0x9E5C, 0x9E5D, 0x9E61, 0x9E62, 0x9E63, 0x9E64, /* 0xC0 */
+ 0x9E65, 0x9E66, 0x9E67, 0x9E68, 0x9E69, 0x9E6A, 0x9E6B, 0x9E6C, /* 0xD0 */
+ 0x9E6D, 0x9E6E, 0x9E6F, 0x9E70, 0x9E71, 0x9E73, 0x9E74, 0x9E75, /* 0xD0 */
+ 0x9E76, 0x9E77, 0x9E78, 0x9E79, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E7D, /* 0xE0 */
+ 0x9E81, 0x9E82, 0x9E83, 0x9E84, 0x9E85, 0x9E86, 0x9E87, 0x9E88, /* 0xE0 */
+ 0x9E89, 0x9E8A, 0x9E8B, 0x9E8C, 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, /* 0xF0 */
+ 0x9E91, 0x9E93, 0x9E94, 0x9E95, 0x9E96, 0x9E97, 0x9E98, 0x9E99 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_B9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9D, 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, /* 0x00 */
+ 0x9EA5, 0x9EA6, 0x9EA7, 0x9EA8, 0x9EA9, 0x9EAA, 0x9EAB, 0x9EAC, /* 0x00 */
+ 0x9EAD, 0x9EAE, 0x9EAF, 0x9EB0, 0x9EB1, 0x9EB3, 0x9EB4, 0x9EB5, /* 0x10 */
+ 0x9EB6, 0x9EB7, 0x9EB8, 0x9EB9, 0x9EBA, 0x9EBB, 0x9EBC, 0x9EBD, /* 0x10 */
+ 0x9EC1, 0x9EC2, 0x9EC3, 0x9EC4, 0x9EC5, 0x9EC6, 0x9EC7, 0x9EC8, /* 0x20 */
+ 0x9EC9, 0x9ECA, 0x9ECB, 0x9ECC, 0x9ECD, 0x9ECE, 0x9ECF, 0x9ED0, /* 0x20 */
+ 0x9ED1, 0x9ED3, 0x9ED4, 0x9ED5, 0x9ED6, 0x9ED7, 0x9ED8, 0x9ED9, /* 0x30 */
+ 0x9EDA, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EE1, 0x9EE2, 0x9EE3, 0x9EE4, /* 0x30 */
+ 0x9EE5, 0x9EE6, 0x9EE7, 0x9EE8, 0x9EE9, 0x9EEA, 0x9EEB, 0x9EEC, /* 0x40 */
+ 0x9EED, 0x9EEE, 0x9EEF, 0x9EF0, 0x9EF1, 0x9EF3, 0x9EF4, 0x9EF5, /* 0x40 */
+ 0x9EF6, 0x9EF7, 0x9EF8, 0x9EF9, 0x9EFA, 0x9EFB, 0x9EFC, 0x9EFD, /* 0x50 */
+ 0x9F41, 0x9F42, 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0x9F47, 0x9F48, /* 0x50 */
+ 0x9F49, 0x9F4A, 0x9F4B, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F4F, 0x9F50, /* 0x60 */
+ 0x9F51, 0x9F53, 0x9F54, 0x9F55, 0x9F56, 0x9F57, 0x9F58, 0x9F59, /* 0x60 */
+ 0x9F5A, 0x9F5B, 0x9F5C, 0x9F5D, 0x9F61, 0x9F62, 0x9F63, 0x9F64, /* 0x70 */
+ 0x9F65, 0x9F66, 0x9F67, 0x9F68, 0x9F69, 0x9F6A, 0x9F6B, 0x9F6C, /* 0x70 */
+ 0x9F6D, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F73, 0x9F74, 0x9F75, /* 0x80 */
+ 0x9F76, 0x9F77, 0x9F78, 0x9F79, 0x9F7A, 0x9F7B, 0x9F7C, 0x9F7D, /* 0x80 */
+ 0x9F81, 0x9F82, 0x9F83, 0x9F84, 0x9F85, 0x9F86, 0x9F87, 0x9F88, /* 0x90 */
+ 0x9F89, 0x9F8A, 0x9F8B, 0x9F8C, 0x9F8D, 0x9F8E, 0x9F8F, 0x9F90, /* 0x90 */
+ 0x9F91, 0x9F93, 0x9F94, 0x9F95, 0x9F96, 0x9F97, 0x9F98, 0x9F99, /* 0xA0 */
+ 0x9F9A, 0x9F9B, 0x9F9C, 0x9F9D, 0x9FA1, 0x9FA2, 0x9FA3, 0x9FA4, /* 0xA0 */
+ 0x9FA5, 0x9FA6, 0x9FA7, 0x9FA8, 0x9FA9, 0x9FAA, 0x9FAB, 0x9FAC, /* 0xB0 */
+ 0x9FAD, 0x9FAE, 0x9FAF, 0x9FB0, 0x9FB1, 0x9FB3, 0x9FB4, 0x9FB5, /* 0xB0 */
+ 0x9FB6, 0x9FB7, 0x9FB8, 0x9FB9, 0x9FBA, 0x9FBB, 0x9FBC, 0x9FBD, /* 0xC0 */
+ 0xA061, 0xA062, 0xA063, 0xA064, 0xA065, 0xA066, 0xA067, 0xA068, /* 0xC0 */
+ 0xA069, 0xA06A, 0xA06B, 0xA06C, 0xA06D, 0xA06E, 0xA06F, 0xA070, /* 0xD0 */
+ 0xA071, 0xA073, 0xA074, 0xA075, 0xA076, 0xA077, 0xA078, 0xA079, /* 0xD0 */
+ 0xA07A, 0xA07B, 0xA07C, 0xA07D, 0xA081, 0xA082, 0xA083, 0xA084, /* 0xE0 */
+ 0xA085, 0xA086, 0xA087, 0xA088, 0xA089, 0xA08A, 0xA08B, 0xA08C, /* 0xE0 */
+ 0xA08D, 0xA08E, 0xA08F, 0xA090, 0xA091, 0xA093, 0xA094, 0xA095, /* 0xF0 */
+ 0xA096, 0xA097, 0xA098, 0xA099, 0xA09A, 0xA09B, 0xA09C, 0xA09D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_BA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA0A1, 0xA0A2, 0xA0A3, 0xA0A4, 0xA0A5, 0xA0A6, 0xA0A7, 0xA0A8, /* 0x00 */
+ 0xA0A9, 0xA0AA, 0xA0AB, 0xA0AC, 0xA0AD, 0xA0AE, 0xA0AF, 0xA0B0, /* 0x00 */
+ 0xA0B1, 0xA0B3, 0xA0B4, 0xA0B5, 0xA0B6, 0xA0B7, 0xA0B8, 0xA0B9, /* 0x10 */
+ 0xA0BA, 0xA0BB, 0xA0BC, 0xA0BD, 0xA0C1, 0xA0C2, 0xA0C3, 0xA0C4, /* 0x10 */
+ 0xA0C5, 0xA0C6, 0xA0C7, 0xA0C8, 0xA0C9, 0xA0CA, 0xA0CB, 0xA0CC, /* 0x20 */
+ 0xA0CD, 0xA0CE, 0xA0CF, 0xA0D0, 0xA0D1, 0xA0D3, 0xA0D4, 0xA0D5, /* 0x20 */
+ 0xA0D6, 0xA0D7, 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, 0xA0DC, 0xA0DD, /* 0x30 */
+ 0xA0E1, 0xA0E2, 0xA0E3, 0xA0E4, 0xA0E5, 0xA0E6, 0xA0E7, 0xA0E8, /* 0x30 */
+ 0xA0E9, 0xA0EA, 0xA0EB, 0xA0EC, 0xA0ED, 0xA0EE, 0xA0EF, 0xA0F0, /* 0x40 */
+ 0xA0F1, 0xA0F3, 0xA0F4, 0xA0F5, 0xA0F6, 0xA0F7, 0xA0F8, 0xA0F9, /* 0x40 */
+ 0xA0FA, 0xA0FB, 0xA0FC, 0xA0FD, 0xA141, 0xA142, 0xA143, 0xA144, /* 0x50 */
+ 0xA145, 0xA146, 0xA147, 0xA148, 0xA149, 0xA14A, 0xA14B, 0xA14C, /* 0x50 */
+ 0xA14D, 0xA14E, 0xA14F, 0xA150, 0xA151, 0xA153, 0xA154, 0xA155, /* 0x60 */
+ 0xA156, 0xA157, 0xA158, 0xA159, 0xA15A, 0xA15B, 0xA15C, 0xA15D, /* 0x60 */
+ 0xA161, 0xA162, 0xA163, 0xA164, 0xA165, 0xA166, 0xA167, 0xA168, /* 0x70 */
+ 0xA169, 0xA16A, 0xA16B, 0xA16C, 0xA16D, 0xA16E, 0xA16F, 0xA170, /* 0x70 */
+ 0xA171, 0xA173, 0xA174, 0xA175, 0xA176, 0xA177, 0xA178, 0xA179, /* 0x80 */
+ 0xA17A, 0xA17B, 0xA17C, 0xA17D, 0xA181, 0xA182, 0xA183, 0xA184, /* 0x80 */
+ 0xA185, 0xA186, 0xA187, 0xA188, 0xA189, 0xA18A, 0xA18B, 0xA18C, /* 0x90 */
+ 0xA18D, 0xA18E, 0xA18F, 0xA190, 0xA191, 0xA193, 0xA194, 0xA195, /* 0x90 */
+ 0xA196, 0xA197, 0xA198, 0xA199, 0xA19A, 0xA19B, 0xA19C, 0xA19D, /* 0xA0 */
+ 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A4, 0xA1A5, 0xA1A6, 0xA1A7, 0xA1A8, /* 0xA0 */
+ 0xA1A9, 0xA1AA, 0xA1AB, 0xA1AC, 0xA1AD, 0xA1AE, 0xA1AF, 0xA1B0, /* 0xB0 */
+ 0xA1B1, 0xA1B3, 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, /* 0xB0 */
+ 0xA1BA, 0xA1BB, 0xA1BC, 0xA1BD, 0xA1C1, 0xA1C2, 0xA1C3, 0xA1C4, /* 0xC0 */
+ 0xA1C5, 0xA1C6, 0xA1C7, 0xA1C8, 0xA1C9, 0xA1CA, 0xA1CB, 0xA1CC, /* 0xC0 */
+ 0xA1CD, 0xA1CE, 0xA1CF, 0xA1D0, 0xA1D1, 0xA1D3, 0xA1D4, 0xA1D5, /* 0xD0 */
+ 0xA1D6, 0xA1D7, 0xA1D8, 0xA1D9, 0xA1DA, 0xA1DB, 0xA1DC, 0xA1DD, /* 0xD0 */
+ 0xA1E1, 0xA1E2, 0xA1E3, 0xA1E4, 0xA1E5, 0xA1E6, 0xA1E7, 0xA1E8, /* 0xE0 */
+ 0xA1E9, 0xA1EA, 0xA1EB, 0xA1EC, 0xA1ED, 0xA1EE, 0xA1EF, 0xA1F0, /* 0xE0 */
+ 0xA1F1, 0xA1F3, 0xA1F4, 0xA1F5, 0xA1F6, 0xA1F7, 0xA1F8, 0xA1F9, /* 0xF0 */
+ 0xA1FA, 0xA1FB, 0xA1FC, 0xA1FD, 0xA241, 0xA242, 0xA243, 0xA244 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_BB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA245, 0xA246, 0xA247, 0xA248, 0xA249, 0xA24A, 0xA24B, 0xA24C, /* 0x00 */
+ 0xA24D, 0xA24E, 0xA24F, 0xA250, 0xA251, 0xA253, 0xA254, 0xA255, /* 0x00 */
+ 0xA256, 0xA257, 0xA258, 0xA259, 0xA25A, 0xA25B, 0xA25C, 0xA25D, /* 0x10 */
+ 0xA261, 0xA262, 0xA263, 0xA264, 0xA265, 0xA266, 0xA267, 0xA268, /* 0x10 */
+ 0xA269, 0xA26A, 0xA26B, 0xA26C, 0xA26D, 0xA26E, 0xA26F, 0xA270, /* 0x20 */
+ 0xA271, 0xA273, 0xA274, 0xA275, 0xA276, 0xA277, 0xA278, 0xA279, /* 0x20 */
+ 0xA27A, 0xA27B, 0xA27C, 0xA27D, 0xA281, 0xA282, 0xA283, 0xA284, /* 0x30 */
+ 0xA285, 0xA286, 0xA287, 0xA288, 0xA289, 0xA28A, 0xA28B, 0xA28C, /* 0x30 */
+ 0xA28D, 0xA28E, 0xA28F, 0xA290, 0xA291, 0xA293, 0xA294, 0xA295, /* 0x40 */
+ 0xA296, 0xA297, 0xA298, 0xA299, 0xA29A, 0xA29B, 0xA29C, 0xA29D, /* 0x40 */
+ 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, /* 0x50 */
+ 0xA2A9, 0xA2AA, 0xA2AB, 0xA2AC, 0xA2AD, 0xA2AE, 0xA2AF, 0xA2B0, /* 0x50 */
+ 0xA2B1, 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, 0xA2B7, 0xA2B8, 0xA2B9, /* 0x60 */
+ 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2C1, 0xA2C2, 0xA2C3, 0xA2C4, /* 0x60 */
+ 0xA2C5, 0xA2C6, 0xA2C7, 0xA2C8, 0xA2C9, 0xA2CA, 0xA2CB, 0xA2CC, /* 0x70 */
+ 0xA2CD, 0xA2CE, 0xA2CF, 0xA2D0, 0xA2D1, 0xA2D3, 0xA2D4, 0xA2D5, /* 0x70 */
+ 0xA2D6, 0xA2D7, 0xA2D8, 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, /* 0x80 */
+ 0xA2E1, 0xA2E2, 0xA2E3, 0xA2E4, 0xA2E5, 0xA2E6, 0xA2E7, 0xA2E8, /* 0x80 */
+ 0xA2E9, 0xA2EA, 0xA2EB, 0xA2EC, 0xA2ED, 0xA2EE, 0xA2EF, 0xA2F0, /* 0x90 */
+ 0xA2F1, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, 0xA2F9, /* 0x90 */
+ 0xA2FA, 0xA2FB, 0xA2FC, 0xA2FD, 0xA341, 0xA342, 0xA343, 0xA344, /* 0xA0 */
+ 0xA345, 0xA346, 0xA347, 0xA348, 0xA349, 0xA34A, 0xA34B, 0xA34C, /* 0xA0 */
+ 0xA34D, 0xA34E, 0xA34F, 0xA350, 0xA351, 0xA353, 0xA354, 0xA355, /* 0xB0 */
+ 0xA356, 0xA357, 0xA358, 0xA359, 0xA35A, 0xA35B, 0xA35C, 0xA35D, /* 0xB0 */
+ 0xA361, 0xA362, 0xA363, 0xA364, 0xA365, 0xA366, 0xA367, 0xA368, /* 0xC0 */
+ 0xA369, 0xA36A, 0xA36B, 0xA36C, 0xA36D, 0xA36E, 0xA36F, 0xA370, /* 0xC0 */
+ 0xA371, 0xA373, 0xA374, 0xA375, 0xA376, 0xA377, 0xA378, 0xA379, /* 0xD0 */
+ 0xA37A, 0xA37B, 0xA37C, 0xA37D, 0xA381, 0xA382, 0xA383, 0xA384, /* 0xD0 */
+ 0xA385, 0xA386, 0xA387, 0xA388, 0xA389, 0xA38A, 0xA38B, 0xA38C, /* 0xE0 */
+ 0xA38D, 0xA38E, 0xA38F, 0xA390, 0xA391, 0xA393, 0xA394, 0xA395, /* 0xE0 */
+ 0xA396, 0xA397, 0xA398, 0xA399, 0xA39A, 0xA39B, 0xA39C, 0xA39D, /* 0xF0 */
+ 0xA3A1, 0xA3A2, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA3A7, 0xA3A8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_BC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, 0xA3B0, /* 0x00 */
+ 0xA3B1, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, 0xA3B8, 0xA3B9, /* 0x00 */
+ 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA461, 0xA462, 0xA463, 0xA464, /* 0x10 */
+ 0xA465, 0xA466, 0xA467, 0xA468, 0xA469, 0xA46A, 0xA46B, 0xA46C, /* 0x10 */
+ 0xA46D, 0xA46E, 0xA46F, 0xA470, 0xA471, 0xA473, 0xA474, 0xA475, /* 0x20 */
+ 0xA476, 0xA477, 0xA478, 0xA479, 0xA47A, 0xA47B, 0xA47C, 0xA47D, /* 0x20 */
+ 0xA481, 0xA482, 0xA483, 0xA484, 0xA485, 0xA486, 0xA487, 0xA488, /* 0x30 */
+ 0xA489, 0xA48A, 0xA48B, 0xA48C, 0xA48D, 0xA48E, 0xA48F, 0xA490, /* 0x30 */
+ 0xA491, 0xA493, 0xA494, 0xA495, 0xA496, 0xA497, 0xA498, 0xA499, /* 0x40 */
+ 0xA49A, 0xA49B, 0xA49C, 0xA49D, 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, /* 0x40 */
+ 0xA4A5, 0xA4A6, 0xA4A7, 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, 0xA4AC, /* 0x50 */
+ 0xA4AD, 0xA4AE, 0xA4AF, 0xA4B0, 0xA4B1, 0xA4B3, 0xA4B4, 0xA4B5, /* 0x50 */
+ 0xA4B6, 0xA4B7, 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, /* 0x60 */
+ 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, 0xA4C8, /* 0x60 */
+ 0xA4C9, 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, 0xA4D0, /* 0x70 */
+ 0xA4D1, 0xA4D3, 0xA4D4, 0xA4D5, 0xA4D6, 0xA4D7, 0xA4D8, 0xA4D9, /* 0x70 */
+ 0xA4DA, 0xA4DB, 0xA4DC, 0xA4DD, 0xA4E1, 0xA4E2, 0xA4E3, 0xA4E4, /* 0x80 */
+ 0xA4E5, 0xA4E6, 0xA4E7, 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, /* 0x80 */
+ 0xA4ED, 0xA4EE, 0xA4EF, 0xA4F0, 0xA4F1, 0xA4F3, 0xA4F4, 0xA4F5, /* 0x90 */
+ 0xA4F6, 0xA4F7, 0xA4F8, 0xA4F9, 0xA4FA, 0xA4FB, 0xA4FC, 0xA4FD, /* 0x90 */
+ 0xA541, 0xA542, 0xA543, 0xA544, 0xA545, 0xA546, 0xA547, 0xA548, /* 0xA0 */
+ 0xA549, 0xA54A, 0xA54B, 0xA54C, 0xA54D, 0xA54E, 0xA54F, 0xA550, /* 0xA0 */
+ 0xA551, 0xA553, 0xA554, 0xA555, 0xA556, 0xA557, 0xA558, 0xA559, /* 0xB0 */
+ 0xA55A, 0xA55B, 0xA55C, 0xA55D, 0xA561, 0xA562, 0xA563, 0xA564, /* 0xB0 */
+ 0xA565, 0xA566, 0xA567, 0xA568, 0xA569, 0xA56A, 0xA56B, 0xA56C, /* 0xC0 */
+ 0xA56D, 0xA56E, 0xA56F, 0xA570, 0xA571, 0xA573, 0xA574, 0xA575, /* 0xC0 */
+ 0xA576, 0xA577, 0xA578, 0xA579, 0xA57A, 0xA57B, 0xA57C, 0xA57D, /* 0xD0 */
+ 0xA581, 0xA582, 0xA583, 0xA584, 0xA585, 0xA586, 0xA587, 0xA588, /* 0xD0 */
+ 0xA589, 0xA58A, 0xA58B, 0xA58C, 0xA58D, 0xA58E, 0xA58F, 0xA590, /* 0xE0 */
+ 0xA591, 0xA593, 0xA594, 0xA595, 0xA596, 0xA597, 0xA598, 0xA599, /* 0xE0 */
+ 0xA59A, 0xA59B, 0xA59C, 0xA59D, 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, /* 0xF0 */
+ 0xA5A5, 0xA5A6, 0xA5A7, 0xA5A8, 0xA5A9, 0xA5AA, 0xA5AB, 0xA5AC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_BD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA5AD, 0xA5AE, 0xA5AF, 0xA5B0, 0xA5B1, 0xA5B3, 0xA5B4, 0xA5B5, /* 0x00 */
+ 0xA5B6, 0xA5B7, 0xA5B8, 0xA5B9, 0xA5BA, 0xA5BB, 0xA5BC, 0xA5BD, /* 0x00 */
+ 0xA5C1, 0xA5C2, 0xA5C3, 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, 0xA5C8, /* 0x10 */
+ 0xA5C9, 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, 0xA5D0, /* 0x10 */
+ 0xA5D1, 0xA5D3, 0xA5D4, 0xA5D5, 0xA5D6, 0xA5D7, 0xA5D8, 0xA5D9, /* 0x20 */
+ 0xA5DA, 0xA5DB, 0xA5DC, 0xA5DD, 0xA5E1, 0xA5E2, 0xA5E3, 0xA5E4, /* 0x20 */
+ 0xA5E5, 0xA5E6, 0xA5E7, 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, /* 0x30 */
+ 0xA5ED, 0xA5EE, 0xA5EF, 0xA5F0, 0xA5F1, 0xA5F3, 0xA5F4, 0xA5F5, /* 0x30 */
+ 0xA5F6, 0xA5F7, 0xA5F8, 0xA5F9, 0xA5FA, 0xA5FB, 0xA5FC, 0xA5FD, /* 0x40 */
+ 0xA641, 0xA642, 0xA643, 0xA644, 0xA645, 0xA646, 0xA647, 0xA648, /* 0x40 */
+ 0xA649, 0xA64A, 0xA64B, 0xA64C, 0xA64D, 0xA64E, 0xA64F, 0xA650, /* 0x50 */
+ 0xA651, 0xA653, 0xA654, 0xA655, 0xA656, 0xA657, 0xA658, 0xA659, /* 0x50 */
+ 0xA65A, 0xA65B, 0xA65C, 0xA65D, 0xA661, 0xA662, 0xA663, 0xA664, /* 0x60 */
+ 0xA665, 0xA666, 0xA667, 0xA668, 0xA669, 0xA66A, 0xA66B, 0xA66C, /* 0x60 */
+ 0xA66D, 0xA66E, 0xA66F, 0xA670, 0xA671, 0xA673, 0xA674, 0xA675, /* 0x70 */
+ 0xA676, 0xA677, 0xA678, 0xA679, 0xA67A, 0xA67B, 0xA67C, 0xA67D, /* 0x70 */
+ 0xA681, 0xA682, 0xA683, 0xA684, 0xA685, 0xA686, 0xA687, 0xA688, /* 0x80 */
+ 0xA689, 0xA68A, 0xA68B, 0xA68C, 0xA68D, 0xA68E, 0xA68F, 0xA690, /* 0x80 */
+ 0xA691, 0xA693, 0xA694, 0xA695, 0xA696, 0xA697, 0xA698, 0xA699, /* 0x90 */
+ 0xA69A, 0xA69B, 0xA69C, 0xA69D, 0xA6A1, 0xA6A2, 0xA6A3, 0xA6A4, /* 0x90 */
+ 0xA6A5, 0xA6A6, 0xA6A7, 0xA6A8, 0xA6A9, 0xA6AA, 0xA6AB, 0xA6AC, /* 0xA0 */
+ 0xA6AD, 0xA6AE, 0xA6AF, 0xA6B0, 0xA6B1, 0xA6B3, 0xA6B4, 0xA6B5, /* 0xA0 */
+ 0xA6B6, 0xA6B7, 0xA6B8, 0xA6B9, 0xA6BA, 0xA6BB, 0xA6BC, 0xA6BD, /* 0xB0 */
+ 0xA6C1, 0xA6C2, 0xA6C3, 0xA6C4, 0xA6C5, 0xA6C6, 0xA6C7, 0xA6C8, /* 0xB0 */
+ 0xA6C9, 0xA6CA, 0xA6CB, 0xA6CC, 0xA6CD, 0xA6CE, 0xA6CF, 0xA6D0, /* 0xC0 */
+ 0xA6D1, 0xA6D3, 0xA6D4, 0xA6D5, 0xA6D6, 0xA6D7, 0xA6D8, 0xA6D9, /* 0xC0 */
+ 0xA6DA, 0xA6DB, 0xA6DC, 0xA6DD, 0xA6E1, 0xA6E2, 0xA6E3, 0xA6E4, /* 0xD0 */
+ 0xA6E5, 0xA6E6, 0xA6E7, 0xA6E8, 0xA6E9, 0xA6EA, 0xA6EB, 0xA6EC, /* 0xD0 */
+ 0xA6ED, 0xA6EE, 0xA6EF, 0xA6F0, 0xA6F1, 0xA6F3, 0xA6F4, 0xA6F5, /* 0xE0 */
+ 0xA6F6, 0xA6F7, 0xA6F8, 0xA6F9, 0xA6FA, 0xA6FB, 0xA6FC, 0xA6FD, /* 0xE0 */
+ 0xA741, 0xA742, 0xA743, 0xA744, 0xA745, 0xA746, 0xA747, 0xA748, /* 0xF0 */
+ 0xA749, 0xA74A, 0xA74B, 0xA74C, 0xA74D, 0xA74E, 0xA74F, 0xA750 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_BE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA751, 0xA753, 0xA754, 0xA755, 0xA756, 0xA757, 0xA758, 0xA759, /* 0x00 */
+ 0xA75A, 0xA75B, 0xA75C, 0xA75D, 0xA761, 0xA762, 0xA763, 0xA764, /* 0x00 */
+ 0xA765, 0xA766, 0xA767, 0xA768, 0xA769, 0xA76A, 0xA76B, 0xA76C, /* 0x10 */
+ 0xA76D, 0xA76E, 0xA76F, 0xA770, 0xA771, 0xA773, 0xA774, 0xA775, /* 0x10 */
+ 0xA776, 0xA777, 0xA778, 0xA779, 0xA77A, 0xA77B, 0xA77C, 0xA77D, /* 0x20 */
+ 0xA781, 0xA782, 0xA783, 0xA784, 0xA785, 0xA786, 0xA787, 0xA788, /* 0x20 */
+ 0xA789, 0xA78A, 0xA78B, 0xA78C, 0xA78D, 0xA78E, 0xA78F, 0xA790, /* 0x30 */
+ 0xA791, 0xA793, 0xA794, 0xA795, 0xA796, 0xA797, 0xA798, 0xA799, /* 0x30 */
+ 0xA79A, 0xA79B, 0xA79C, 0xA79D, 0xA7A1, 0xA7A2, 0xA7A3, 0xA7A4, /* 0x40 */
+ 0xA7A5, 0xA7A6, 0xA7A7, 0xA7A8, 0xA7A9, 0xA7AA, 0xA7AB, 0xA7AC, /* 0x40 */
+ 0xA7AD, 0xA7AE, 0xA7AF, 0xA7B0, 0xA7B1, 0xA7B3, 0xA7B4, 0xA7B5, /* 0x50 */
+ 0xA7B6, 0xA7B7, 0xA7B8, 0xA7B9, 0xA7BA, 0xA7BB, 0xA7BC, 0xA7BD, /* 0x50 */
+ 0xA861, 0xA862, 0xA863, 0xA864, 0xA865, 0xA866, 0xA867, 0xA868, /* 0x60 */
+ 0xA869, 0xA86A, 0xA86B, 0xA86C, 0xA86D, 0xA86E, 0xA86F, 0xA870, /* 0x60 */
+ 0xA871, 0xA873, 0xA874, 0xA875, 0xA876, 0xA877, 0xA878, 0xA879, /* 0x70 */
+ 0xA87A, 0xA87B, 0xA87C, 0xA87D, 0xA881, 0xA882, 0xA883, 0xA884, /* 0x70 */
+ 0xA885, 0xA886, 0xA887, 0xA888, 0xA889, 0xA88A, 0xA88B, 0xA88C, /* 0x80 */
+ 0xA88D, 0xA88E, 0xA88F, 0xA890, 0xA891, 0xA893, 0xA894, 0xA895, /* 0x80 */
+ 0xA896, 0xA897, 0xA898, 0xA899, 0xA89A, 0xA89B, 0xA89C, 0xA89D, /* 0x90 */
+ 0xA8A1, 0xA8A2, 0xA8A3, 0xA8A4, 0xA8A5, 0xA8A6, 0xA8A7, 0xA8A8, /* 0x90 */
+ 0xA8A9, 0xA8AA, 0xA8AB, 0xA8AC, 0xA8AD, 0xA8AE, 0xA8AF, 0xA8B0, /* 0xA0 */
+ 0xA8B1, 0xA8B3, 0xA8B4, 0xA8B5, 0xA8B6, 0xA8B7, 0xA8B8, 0xA8B9, /* 0xA0 */
+ 0xA8BA, 0xA8BB, 0xA8BC, 0xA8BD, 0xA8C1, 0xA8C2, 0xA8C3, 0xA8C4, /* 0xB0 */
+ 0xA8C5, 0xA8C6, 0xA8C7, 0xA8C8, 0xA8C9, 0xA8CA, 0xA8CB, 0xA8CC, /* 0xB0 */
+ 0xA8CD, 0xA8CE, 0xA8CF, 0xA8D0, 0xA8D1, 0xA8D3, 0xA8D4, 0xA8D5, /* 0xC0 */
+ 0xA8D6, 0xA8D7, 0xA8D8, 0xA8D9, 0xA8DA, 0xA8DB, 0xA8DC, 0xA8DD, /* 0xC0 */
+ 0xA8E1, 0xA8E2, 0xA8E3, 0xA8E4, 0xA8E5, 0xA8E6, 0xA8E7, 0xA8E8, /* 0xD0 */
+ 0xA8E9, 0xA8EA, 0xA8EB, 0xA8EC, 0xA8ED, 0xA8EE, 0xA8EF, 0xA8F0, /* 0xD0 */
+ 0xA8F1, 0xA8F3, 0xA8F4, 0xA8F5, 0xA8F6, 0xA8F7, 0xA8F8, 0xA8F9, /* 0xE0 */
+ 0xA8FA, 0xA8FB, 0xA8FC, 0xA8FD, 0xA941, 0xA942, 0xA943, 0xA944, /* 0xE0 */
+ 0xA945, 0xA946, 0xA947, 0xA948, 0xA949, 0xA94A, 0xA94B, 0xA94C, /* 0xF0 */
+ 0xA94D, 0xA94E, 0xA94F, 0xA950, 0xA951, 0xA953, 0xA954, 0xA955 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_BF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA956, 0xA957, 0xA958, 0xA959, 0xA95A, 0xA95B, 0xA95C, 0xA95D, /* 0x00 */
+ 0xA961, 0xA962, 0xA963, 0xA964, 0xA965, 0xA966, 0xA967, 0xA968, /* 0x00 */
+ 0xA969, 0xA96A, 0xA96B, 0xA96C, 0xA96D, 0xA96E, 0xA96F, 0xA970, /* 0x10 */
+ 0xA971, 0xA973, 0xA974, 0xA975, 0xA976, 0xA977, 0xA978, 0xA979, /* 0x10 */
+ 0xA97A, 0xA97B, 0xA97C, 0xA97D, 0xA981, 0xA982, 0xA983, 0xA984, /* 0x20 */
+ 0xA985, 0xA986, 0xA987, 0xA988, 0xA989, 0xA98A, 0xA98B, 0xA98C, /* 0x20 */
+ 0xA98D, 0xA98E, 0xA98F, 0xA990, 0xA991, 0xA993, 0xA994, 0xA995, /* 0x30 */
+ 0xA996, 0xA997, 0xA998, 0xA999, 0xA99A, 0xA99B, 0xA99C, 0xA99D, /* 0x30 */
+ 0xA9A1, 0xA9A2, 0xA9A3, 0xA9A4, 0xA9A5, 0xA9A6, 0xA9A7, 0xA9A8, /* 0x40 */
+ 0xA9A9, 0xA9AA, 0xA9AB, 0xA9AC, 0xA9AD, 0xA9AE, 0xA9AF, 0xA9B0, /* 0x40 */
+ 0xA9B1, 0xA9B3, 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, 0xA9B8, 0xA9B9, /* 0x50 */
+ 0xA9BA, 0xA9BB, 0xA9BC, 0xA9BD, 0xA9C1, 0xA9C2, 0xA9C3, 0xA9C4, /* 0x50 */
+ 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, 0xA9C9, 0xA9CA, 0xA9CB, 0xA9CC, /* 0x60 */
+ 0xA9CD, 0xA9CE, 0xA9CF, 0xA9D0, 0xA9D1, 0xA9D3, 0xA9D4, 0xA9D5, /* 0x60 */
+ 0xA9D6, 0xA9D7, 0xA9D8, 0xA9D9, 0xA9DA, 0xA9DB, 0xA9DC, 0xA9DD, /* 0x70 */
+ 0xA9E1, 0xA9E2, 0xA9E3, 0xA9E4, 0xA9E5, 0xA9E6, 0xA9E7, 0xA9E8, /* 0x70 */
+ 0xA9E9, 0xA9EA, 0xA9EB, 0xA9EC, 0xA9ED, 0xA9EE, 0xA9EF, 0xA9F0, /* 0x80 */
+ 0xA9F1, 0xA9F3, 0xA9F4, 0xA9F5, 0xA9F6, 0xA9F7, 0xA9F8, 0xA9F9, /* 0x80 */
+ 0xA9FA, 0xA9FB, 0xA9FC, 0xA9FD, 0xAA41, 0xAA42, 0xAA43, 0xAA44, /* 0x90 */
+ 0xAA45, 0xAA46, 0xAA47, 0xAA48, 0xAA49, 0xAA4A, 0xAA4B, 0xAA4C, /* 0x90 */
+ 0xAA4D, 0xAA4E, 0xAA4F, 0xAA50, 0xAA51, 0xAA53, 0xAA54, 0xAA55, /* 0xA0 */
+ 0xAA56, 0xAA57, 0xAA58, 0xAA59, 0xAA5A, 0xAA5B, 0xAA5C, 0xAA5D, /* 0xA0 */
+ 0xAA61, 0xAA62, 0xAA63, 0xAA64, 0xAA65, 0xAA66, 0xAA67, 0xAA68, /* 0xB0 */
+ 0xAA69, 0xAA6A, 0xAA6B, 0xAA6C, 0xAA6D, 0xAA6E, 0xAA6F, 0xAA70, /* 0xB0 */
+ 0xAA71, 0xAA73, 0xAA74, 0xAA75, 0xAA76, 0xAA77, 0xAA78, 0xAA79, /* 0xC0 */
+ 0xAA7A, 0xAA7B, 0xAA7C, 0xAA7D, 0xAA81, 0xAA82, 0xAA83, 0xAA84, /* 0xC0 */
+ 0xAA85, 0xAA86, 0xAA87, 0xAA88, 0xAA89, 0xAA8A, 0xAA8B, 0xAA8C, /* 0xD0 */
+ 0xAA8D, 0xAA8E, 0xAA8F, 0xAA90, 0xAA91, 0xAA93, 0xAA94, 0xAA95, /* 0xD0 */
+ 0xAA96, 0xAA97, 0xAA98, 0xAA99, 0xAA9A, 0xAA9B, 0xAA9C, 0xAA9D, /* 0xE0 */
+ 0xAAA1, 0xAAA2, 0xAAA3, 0xAAA4, 0xAAA5, 0xAAA6, 0xAAA7, 0xAAA8, /* 0xE0 */
+ 0xAAA9, 0xAAAA, 0xAAAB, 0xAAAC, 0xAAAD, 0xAAAE, 0xAAAF, 0xAAB0, /* 0xF0 */
+ 0xAAB1, 0xAAB3, 0xAAB4, 0xAAB5, 0xAAB6, 0xAAB7, 0xAAB8, 0xAAB9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAABA, 0xAABB, 0xAABC, 0xAABD, 0xAAC1, 0xAAC2, 0xAAC3, 0xAAC4, /* 0x00 */
+ 0xAAC5, 0xAAC6, 0xAAC7, 0xAAC8, 0xAAC9, 0xAACA, 0xAACB, 0xAACC, /* 0x00 */
+ 0xAACD, 0xAACE, 0xAACF, 0xAAD0, 0xAAD1, 0xAAD3, 0xAAD4, 0xAAD5, /* 0x10 */
+ 0xAAD6, 0xAAD7, 0xAAD8, 0xAAD9, 0xAADA, 0xAADB, 0xAADC, 0xAADD, /* 0x10 */
+ 0xAAE1, 0xAAE2, 0xAAE3, 0xAAE4, 0xAAE5, 0xAAE6, 0xAAE7, 0xAAE8, /* 0x20 */
+ 0xAAE9, 0xAAEA, 0xAAEB, 0xAAEC, 0xAAED, 0xAAEE, 0xAAEF, 0xAAF0, /* 0x20 */
+ 0xAAF1, 0xAAF3, 0xAAF4, 0xAAF5, 0xAAF6, 0xAAF7, 0xAAF8, 0xAAF9, /* 0x30 */
+ 0xAAFA, 0xAAFB, 0xAAFC, 0xAAFD, 0xAB41, 0xAB42, 0xAB43, 0xAB44, /* 0x30 */
+ 0xAB45, 0xAB46, 0xAB47, 0xAB48, 0xAB49, 0xAB4A, 0xAB4B, 0xAB4C, /* 0x40 */
+ 0xAB4D, 0xAB4E, 0xAB4F, 0xAB50, 0xAB51, 0xAB53, 0xAB54, 0xAB55, /* 0x40 */
+ 0xAB56, 0xAB57, 0xAB58, 0xAB59, 0xAB5A, 0xAB5B, 0xAB5C, 0xAB5D, /* 0x50 */
+ 0xAB61, 0xAB62, 0xAB63, 0xAB64, 0xAB65, 0xAB66, 0xAB67, 0xAB68, /* 0x50 */
+ 0xAB69, 0xAB6A, 0xAB6B, 0xAB6C, 0xAB6D, 0xAB6E, 0xAB6F, 0xAB70, /* 0x60 */
+ 0xAB71, 0xAB73, 0xAB74, 0xAB75, 0xAB76, 0xAB77, 0xAB78, 0xAB79, /* 0x60 */
+ 0xAB7A, 0xAB7B, 0xAB7C, 0xAB7D, 0xAB81, 0xAB82, 0xAB83, 0xAB84, /* 0x70 */
+ 0xAB85, 0xAB86, 0xAB87, 0xAB88, 0xAB89, 0xAB8A, 0xAB8B, 0xAB8C, /* 0x70 */
+ 0xAB8D, 0xAB8E, 0xAB8F, 0xAB90, 0xAB91, 0xAB93, 0xAB94, 0xAB95, /* 0x80 */
+ 0xAB96, 0xAB97, 0xAB98, 0xAB99, 0xAB9A, 0xAB9B, 0xAB9C, 0xAB9D, /* 0x80 */
+ 0xABA1, 0xABA2, 0xABA3, 0xABA4, 0xABA5, 0xABA6, 0xABA7, 0xABA8, /* 0x90 */
+ 0xABA9, 0xABAA, 0xABAB, 0xABAC, 0xABAD, 0xABAE, 0xABAF, 0xABB0, /* 0x90 */
+ 0xABB1, 0xABB3, 0xABB4, 0xABB5, 0xABB6, 0xABB7, 0xABB8, 0xABB9, /* 0xA0 */
+ 0xABBA, 0xABBB, 0xABBC, 0xABBD, 0xAC61, 0xAC62, 0xAC63, 0xAC64, /* 0xA0 */
+ 0xAC65, 0xAC66, 0xAC67, 0xAC68, 0xAC69, 0xAC6A, 0xAC6B, 0xAC6C, /* 0xB0 */
+ 0xAC6D, 0xAC6E, 0xAC6F, 0xAC70, 0xAC71, 0xAC73, 0xAC74, 0xAC75, /* 0xB0 */
+ 0xAC76, 0xAC77, 0xAC78, 0xAC79, 0xAC7A, 0xAC7B, 0xAC7C, 0xAC7D, /* 0xC0 */
+ 0xAC81, 0xAC82, 0xAC83, 0xAC84, 0xAC85, 0xAC86, 0xAC87, 0xAC88, /* 0xC0 */
+ 0xAC89, 0xAC8A, 0xAC8B, 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, /* 0xD0 */
+ 0xAC91, 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xAC97, 0xAC98, 0xAC99, /* 0xD0 */
+ 0xAC9A, 0xAC9B, 0xAC9C, 0xAC9D, 0xACA1, 0xACA2, 0xACA3, 0xACA4, /* 0xE0 */
+ 0xACA5, 0xACA6, 0xACA7, 0xACA8, 0xACA9, 0xACAA, 0xACAB, 0xACAC, /* 0xE0 */
+ 0xACAD, 0xACAE, 0xACAF, 0xACB0, 0xACB1, 0xACB3, 0xACB4, 0xACB5, /* 0xF0 */
+ 0xACB6, 0xACB7, 0xACB8, 0xACB9, 0xACBA, 0xACBB, 0xACBC, 0xACBD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xACC1, 0xACC2, 0xACC3, 0xACC4, 0xACC5, 0xACC6, 0xACC7, 0xACC8, /* 0x00 */
+ 0xACC9, 0xACCA, 0xACCB, 0xACCC, 0xACCD, 0xACCE, 0xACCF, 0xACD0, /* 0x00 */
+ 0xACD1, 0xACD3, 0xACD4, 0xACD5, 0xACD6, 0xACD7, 0xACD8, 0xACD9, /* 0x10 */
+ 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACE1, 0xACE2, 0xACE3, 0xACE4, /* 0x10 */
+ 0xACE5, 0xACE6, 0xACE7, 0xACE8, 0xACE9, 0xACEA, 0xACEB, 0xACEC, /* 0x20 */
+ 0xACED, 0xACEE, 0xACEF, 0xACF0, 0xACF1, 0xACF3, 0xACF4, 0xACF5, /* 0x20 */
+ 0xACF6, 0xACF7, 0xACF8, 0xACF9, 0xACFA, 0xACFB, 0xACFC, 0xACFD, /* 0x30 */
+ 0xAD41, 0xAD42, 0xAD43, 0xAD44, 0xAD45, 0xAD46, 0xAD47, 0xAD48, /* 0x30 */
+ 0xAD49, 0xAD4A, 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD50, /* 0x40 */
+ 0xAD51, 0xAD53, 0xAD54, 0xAD55, 0xAD56, 0xAD57, 0xAD58, 0xAD59, /* 0x40 */
+ 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D, 0xAD61, 0xAD62, 0xAD63, 0xAD64, /* 0x50 */
+ 0xAD65, 0xAD66, 0xAD67, 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6C, /* 0x50 */
+ 0xAD6D, 0xAD6E, 0xAD6F, 0xAD70, 0xAD71, 0xAD73, 0xAD74, 0xAD75, /* 0x60 */
+ 0xAD76, 0xAD77, 0xAD78, 0xAD79, 0xAD7A, 0xAD7B, 0xAD7C, 0xAD7D, /* 0x60 */
+ 0xAD81, 0xAD82, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, 0xAD88, /* 0x70 */
+ 0xAD89, 0xAD8A, 0xAD8B, 0xAD8C, 0xAD8D, 0xAD8E, 0xAD8F, 0xAD90, /* 0x70 */
+ 0xAD91, 0xAD93, 0xAD94, 0xAD95, 0xAD96, 0xAD97, 0xAD98, 0xAD99, /* 0x80 */
+ 0xAD9A, 0xAD9B, 0xAD9C, 0xAD9D, 0xADA1, 0xADA2, 0xADA3, 0xADA4, /* 0x80 */
+ 0xADA5, 0xADA6, 0xADA7, 0xADA8, 0xADA9, 0xADAA, 0xADAB, 0xADAC, /* 0x90 */
+ 0xADAD, 0xADAE, 0xADAF, 0xADB0, 0xADB1, 0xADB3, 0xADB4, 0xADB5, /* 0x90 */
+ 0xADB6, 0xADB7, 0xADB8, 0xADB9, 0xADBA, 0xADBB, 0xADBC, 0xADBD, /* 0xA0 */
+ 0xADC1, 0xADC2, 0xADC3, 0xADC4, 0xADC5, 0xADC6, 0xADC7, 0xADC8, /* 0xA0 */
+ 0xADC9, 0xADCA, 0xADCB, 0xADCC, 0xADCD, 0xADCE, 0xADCF, 0xADD0, /* 0xB0 */
+ 0xADD1, 0xADD3, 0xADD4, 0xADD5, 0xADD6, 0xADD7, 0xADD8, 0xADD9, /* 0xB0 */
+ 0xADDA, 0xADDB, 0xADDC, 0xADDD, 0xADE1, 0xADE2, 0xADE3, 0xADE4, /* 0xC0 */
+ 0xADE5, 0xADE6, 0xADE7, 0xADE8, 0xADE9, 0xADEA, 0xADEB, 0xADEC, /* 0xC0 */
+ 0xADED, 0xADEE, 0xADEF, 0xADF0, 0xADF1, 0xADF3, 0xADF4, 0xADF5, /* 0xD0 */
+ 0xADF6, 0xADF7, 0xADF8, 0xADF9, 0xADFA, 0xADFB, 0xADFC, 0xADFD, /* 0xD0 */
+ 0xAE41, 0xAE42, 0xAE43, 0xAE44, 0xAE45, 0xAE46, 0xAE47, 0xAE48, /* 0xE0 */
+ 0xAE49, 0xAE4A, 0xAE4B, 0xAE4C, 0xAE4D, 0xAE4E, 0xAE4F, 0xAE50, /* 0xE0 */
+ 0xAE51, 0xAE53, 0xAE54, 0xAE55, 0xAE56, 0xAE57, 0xAE58, 0xAE59, /* 0xF0 */
+ 0xAE5A, 0xAE5B, 0xAE5C, 0xAE5D, 0xAE61, 0xAE62, 0xAE63, 0xAE64 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAE65, 0xAE66, 0xAE67, 0xAE68, 0xAE69, 0xAE6A, 0xAE6B, 0xAE6C, /* 0x00 */
+ 0xAE6D, 0xAE6E, 0xAE6F, 0xAE70, 0xAE71, 0xAE73, 0xAE74, 0xAE75, /* 0x00 */
+ 0xAE76, 0xAE77, 0xAE78, 0xAE79, 0xAE7A, 0xAE7B, 0xAE7C, 0xAE7D, /* 0x10 */
+ 0xAE81, 0xAE82, 0xAE83, 0xAE84, 0xAE85, 0xAE86, 0xAE87, 0xAE88, /* 0x10 */
+ 0xAE89, 0xAE8A, 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xAE8F, 0xAE90, /* 0x20 */
+ 0xAE91, 0xAE93, 0xAE94, 0xAE95, 0xAE96, 0xAE97, 0xAE98, 0xAE99, /* 0x20 */
+ 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D, 0xAEA1, 0xAEA2, 0xAEA3, 0xAEA4, /* 0x30 */
+ 0xAEA5, 0xAEA6, 0xAEA7, 0xAEA8, 0xAEA9, 0xAEAA, 0xAEAB, 0xAEAC, /* 0x30 */
+ 0xAEAD, 0xAEAE, 0xAEAF, 0xAEB0, 0xAEB1, 0xAEB3, 0xAEB4, 0xAEB5, /* 0x40 */
+ 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, 0xAEBA, 0xAEBB, 0xAEBC, 0xAEBD, /* 0x40 */
+ 0xAEC1, 0xAEC2, 0xAEC3, 0xAEC4, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8, /* 0x50 */
+ 0xAEC9, 0xAECA, 0xAECB, 0xAECC, 0xAECD, 0xAECE, 0xAECF, 0xAED0, /* 0x50 */
+ 0xAED1, 0xAED3, 0xAED4, 0xAED5, 0xAED6, 0xAED7, 0xAED8, 0xAED9, /* 0x60 */
+ 0xAEDA, 0xAEDB, 0xAEDC, 0xAEDD, 0xAEE1, 0xAEE2, 0xAEE3, 0xAEE4, /* 0x60 */
+ 0xAEE5, 0xAEE6, 0xAEE7, 0xAEE8, 0xAEE9, 0xAEEA, 0xAEEB, 0xAEEC, /* 0x70 */
+ 0xAEED, 0xAEEE, 0xAEEF, 0xAEF0, 0xAEF1, 0xAEF3, 0xAEF4, 0xAEF5, /* 0x70 */
+ 0xAEF6, 0xAEF7, 0xAEF8, 0xAEF9, 0xAEFA, 0xAEFB, 0xAEFC, 0xAEFD, /* 0x80 */
+ 0xAF41, 0xAF42, 0xAF43, 0xAF44, 0xAF45, 0xAF46, 0xAF47, 0xAF48, /* 0x80 */
+ 0xAF49, 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, 0xAF50, /* 0x90 */
+ 0xAF51, 0xAF53, 0xAF54, 0xAF55, 0xAF56, 0xAF57, 0xAF58, 0xAF59, /* 0x90 */
+ 0xAF5A, 0xAF5B, 0xAF5C, 0xAF5D, 0xAF61, 0xAF62, 0xAF63, 0xAF64, /* 0xA0 */
+ 0xAF65, 0xAF66, 0xAF67, 0xAF68, 0xAF69, 0xAF6A, 0xAF6B, 0xAF6C, /* 0xA0 */
+ 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xAF71, 0xAF73, 0xAF74, 0xAF75, /* 0xB0 */
+ 0xAF76, 0xAF77, 0xAF78, 0xAF79, 0xAF7A, 0xAF7B, 0xAF7C, 0xAF7D, /* 0xB0 */
+ 0xAF81, 0xAF82, 0xAF83, 0xAF84, 0xAF85, 0xAF86, 0xAF87, 0xAF88, /* 0xC0 */
+ 0xAF89, 0xAF8A, 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, 0xAF8F, 0xAF90, /* 0xC0 */
+ 0xAF91, 0xAF93, 0xAF94, 0xAF95, 0xAF96, 0xAF97, 0xAF98, 0xAF99, /* 0xD0 */
+ 0xAF9A, 0xAF9B, 0xAF9C, 0xAF9D, 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, /* 0xD0 */
+ 0xAFA5, 0xAFA6, 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC, /* 0xE0 */
+ 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1, 0xAFB3, 0xAFB4, 0xAFB5, /* 0xE0 */
+ 0xAFB6, 0xAFB7, 0xAFB8, 0xAFB9, 0xAFBA, 0xAFBB, 0xAFBC, 0xAFBD, /* 0xF0 */
+ 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, 0xB066, 0xB067, 0xB068 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D, 0xB06E, 0xB06F, 0xB070, /* 0x00 */
+ 0xB071, 0xB073, 0xB074, 0xB075, 0xB076, 0xB077, 0xB078, 0xB079, /* 0x00 */
+ 0xB07A, 0xB07B, 0xB07C, 0xB07D, 0xB081, 0xB082, 0xB083, 0xB084, /* 0x10 */
+ 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, 0xB08A, 0xB08B, 0xB08C, /* 0x10 */
+ 0xB08D, 0xB08E, 0xB08F, 0xB090, 0xB091, 0xB093, 0xB094, 0xB095, /* 0x20 */
+ 0xB096, 0xB097, 0xB098, 0xB099, 0xB09A, 0xB09B, 0xB09C, 0xB09D, /* 0x20 */
+ 0xB0A1, 0xB0A2, 0xB0A3, 0xB0A4, 0xB0A5, 0xB0A6, 0xB0A7, 0xB0A8, /* 0x30 */
+ 0xB0A9, 0xB0AA, 0xB0AB, 0xB0AC, 0xB0AD, 0xB0AE, 0xB0AF, 0xB0B0, /* 0x30 */
+ 0xB0B1, 0xB0B3, 0xB0B4, 0xB0B5, 0xB0B6, 0xB0B7, 0xB0B8, 0xB0B9, /* 0x40 */
+ 0xB0BA, 0xB0BB, 0xB0BC, 0xB0BD, 0xB0C1, 0xB0C2, 0xB0C3, 0xB0C4, /* 0x40 */
+ 0xB0C5, 0xB0C6, 0xB0C7, 0xB0C8, 0xB0C9, 0xB0CA, 0xB0CB, 0xB0CC, /* 0x50 */
+ 0xB0CD, 0xB0CE, 0xB0CF, 0xB0D0, 0xB0D1, 0xB0D3, 0xB0D4, 0xB0D5, /* 0x50 */
+ 0xB0D6, 0xB0D7, 0xB0D8, 0xB0D9, 0xB0DA, 0xB0DB, 0xB0DC, 0xB0DD, /* 0x60 */
+ 0xB0E1, 0xB0E2, 0xB0E3, 0xB0E4, 0xB0E5, 0xB0E6, 0xB0E7, 0xB0E8, /* 0x60 */
+ 0xB0E9, 0xB0EA, 0xB0EB, 0xB0EC, 0xB0ED, 0xB0EE, 0xB0EF, 0xB0F0, /* 0x70 */
+ 0xB0F1, 0xB0F3, 0xB0F4, 0xB0F5, 0xB0F6, 0xB0F7, 0xB0F8, 0xB0F9, /* 0x70 */
+ 0xB0FA, 0xB0FB, 0xB0FC, 0xB0FD, 0xB141, 0xB142, 0xB143, 0xB144, /* 0x80 */
+ 0xB145, 0xB146, 0xB147, 0xB148, 0xB149, 0xB14A, 0xB14B, 0xB14C, /* 0x80 */
+ 0xB14D, 0xB14E, 0xB14F, 0xB150, 0xB151, 0xB153, 0xB154, 0xB155, /* 0x90 */
+ 0xB156, 0xB157, 0xB158, 0xB159, 0xB15A, 0xB15B, 0xB15C, 0xB15D, /* 0x90 */
+ 0xB161, 0xB162, 0xB163, 0xB164, 0xB165, 0xB166, 0xB167, 0xB168, /* 0xA0 */
+ 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, /* 0xA0 */
+ 0xB171, 0xB173, 0xB174, 0xB175, 0xB176, 0xB177, 0xB178, 0xB179, /* 0xB0 */
+ 0xB17A, 0xB17B, 0xB17C, 0xB17D, 0xB181, 0xB182, 0xB183, 0xB184, /* 0xB0 */
+ 0xB185, 0xB186, 0xB187, 0xB188, 0xB189, 0xB18A, 0xB18B, 0xB18C, /* 0xC0 */
+ 0xB18D, 0xB18E, 0xB18F, 0xB190, 0xB191, 0xB193, 0xB194, 0xB195, /* 0xC0 */
+ 0xB196, 0xB197, 0xB198, 0xB199, 0xB19A, 0xB19B, 0xB19C, 0xB19D, /* 0xD0 */
+ 0xB1A1, 0xB1A2, 0xB1A3, 0xB1A4, 0xB1A5, 0xB1A6, 0xB1A7, 0xB1A8, /* 0xD0 */
+ 0xB1A9, 0xB1AA, 0xB1AB, 0xB1AC, 0xB1AD, 0xB1AE, 0xB1AF, 0xB1B0, /* 0xE0 */
+ 0xB1B1, 0xB1B3, 0xB1B4, 0xB1B5, 0xB1B6, 0xB1B7, 0xB1B8, 0xB1B9, /* 0xE0 */
+ 0xB1BA, 0xB1BB, 0xB1BC, 0xB1BD, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, /* 0xF0 */
+ 0xB1C5, 0xB1C6, 0xB1C7, 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB, 0xB1CC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB1CD, 0xB1CE, 0xB1CF, 0xB1D0, 0xB1D1, 0xB1D3, 0xB1D4, 0xB1D5, /* 0x00 */
+ 0xB1D6, 0xB1D7, 0xB1D8, 0xB1D9, 0xB1DA, 0xB1DB, 0xB1DC, 0xB1DD, /* 0x00 */
+ 0xB1E1, 0xB1E2, 0xB1E3, 0xB1E4, 0xB1E5, 0xB1E6, 0xB1E7, 0xB1E8, /* 0x10 */
+ 0xB1E9, 0xB1EA, 0xB1EB, 0xB1EC, 0xB1ED, 0xB1EE, 0xB1EF, 0xB1F0, /* 0x10 */
+ 0xB1F1, 0xB1F3, 0xB1F4, 0xB1F5, 0xB1F6, 0xB1F7, 0xB1F8, 0xB1F9, /* 0x20 */
+ 0xB1FA, 0xB1FB, 0xB1FC, 0xB1FD, 0xB241, 0xB242, 0xB243, 0xB244, /* 0x20 */
+ 0xB245, 0xB246, 0xB247, 0xB248, 0xB249, 0xB24A, 0xB24B, 0xB24C, /* 0x30 */
+ 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB253, 0xB254, 0xB255, /* 0x30 */
+ 0xB256, 0xB257, 0xB258, 0xB259, 0xB25A, 0xB25B, 0xB25C, 0xB25D, /* 0x40 */
+ 0xB261, 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB268, /* 0x40 */
+ 0xB269, 0xB26A, 0xB26B, 0xB26C, 0xB26D, 0xB26E, 0xB26F, 0xB270, /* 0x50 */
+ 0xB271, 0xB273, 0xB274, 0xB275, 0xB276, 0xB277, 0xB278, 0xB279, /* 0x50 */
+ 0xB27A, 0xB27B, 0xB27C, 0xB27D, 0xB281, 0xB282, 0xB283, 0xB284, /* 0x60 */
+ 0xB285, 0xB286, 0xB287, 0xB288, 0xB289, 0xB28A, 0xB28B, 0xB28C, /* 0x60 */
+ 0xB28D, 0xB28E, 0xB28F, 0xB290, 0xB291, 0xB293, 0xB294, 0xB295, /* 0x70 */
+ 0xB296, 0xB297, 0xB298, 0xB299, 0xB29A, 0xB29B, 0xB29C, 0xB29D, /* 0x70 */
+ 0xB2A1, 0xB2A2, 0xB2A3, 0xB2A4, 0xB2A5, 0xB2A6, 0xB2A7, 0xB2A8, /* 0x80 */
+ 0xB2A9, 0xB2AA, 0xB2AB, 0xB2AC, 0xB2AD, 0xB2AE, 0xB2AF, 0xB2B0, /* 0x80 */
+ 0xB2B1, 0xB2B3, 0xB2B4, 0xB2B5, 0xB2B6, 0xB2B7, 0xB2B8, 0xB2B9, /* 0x90 */
+ 0xB2BA, 0xB2BB, 0xB2BC, 0xB2BD, 0xB2C1, 0xB2C2, 0xB2C3, 0xB2C4, /* 0x90 */
+ 0xB2C5, 0xB2C6, 0xB2C7, 0xB2C8, 0xB2C9, 0xB2CA, 0xB2CB, 0xB2CC, /* 0xA0 */
+ 0xB2CD, 0xB2CE, 0xB2CF, 0xB2D0, 0xB2D1, 0xB2D3, 0xB2D4, 0xB2D5, /* 0xA0 */
+ 0xB2D6, 0xB2D7, 0xB2D8, 0xB2D9, 0xB2DA, 0xB2DB, 0xB2DC, 0xB2DD, /* 0xB0 */
+ 0xB2E1, 0xB2E2, 0xB2E3, 0xB2E4, 0xB2E5, 0xB2E6, 0xB2E7, 0xB2E8, /* 0xB0 */
+ 0xB2E9, 0xB2EA, 0xB2EB, 0xB2EC, 0xB2ED, 0xB2EE, 0xB2EF, 0xB2F0, /* 0xC0 */
+ 0xB2F1, 0xB2F3, 0xB2F4, 0xB2F5, 0xB2F6, 0xB2F7, 0xB2F8, 0xB2F9, /* 0xC0 */
+ 0xB2FA, 0xB2FB, 0xB2FC, 0xB2FD, 0xB341, 0xB342, 0xB343, 0xB344, /* 0xD0 */
+ 0xB345, 0xB346, 0xB347, 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, /* 0xD0 */
+ 0xB34D, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB353, 0xB354, 0xB355, /* 0xE0 */
+ 0xB356, 0xB357, 0xB358, 0xB359, 0xB35A, 0xB35B, 0xB35C, 0xB35D, /* 0xE0 */
+ 0xB361, 0xB362, 0xB363, 0xB364, 0xB365, 0xB366, 0xB367, 0xB368, /* 0xF0 */
+ 0xB369, 0xB36A, 0xB36B, 0xB36C, 0xB36D, 0xB36E, 0xB36F, 0xB370 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB371, 0xB373, 0xB374, 0xB375, 0xB376, 0xB377, 0xB378, 0xB379, /* 0x00 */
+ 0xB37A, 0xB37B, 0xB37C, 0xB37D, 0xB381, 0xB382, 0xB383, 0xB384, /* 0x00 */
+ 0xB385, 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0xB38C, /* 0x10 */
+ 0xB38D, 0xB38E, 0xB38F, 0xB390, 0xB391, 0xB393, 0xB394, 0xB395, /* 0x10 */
+ 0xB396, 0xB397, 0xB398, 0xB399, 0xB39A, 0xB39B, 0xB39C, 0xB39D, /* 0x20 */
+ 0xB3A1, 0xB3A2, 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, 0xB3A7, 0xB3A8, /* 0x20 */
+ 0xB3A9, 0xB3AA, 0xB3AB, 0xB3AC, 0xB3AD, 0xB3AE, 0xB3AF, 0xB3B0, /* 0x30 */
+ 0xB3B1, 0xB3B3, 0xB3B4, 0xB3B5, 0xB3B6, 0xB3B7, 0xB3B8, 0xB3B9, /* 0x30 */
+ 0xB3BA, 0xB3BB, 0xB3BC, 0xB3BD, 0xB461, 0xB462, 0xB463, 0xB464, /* 0x40 */
+ 0xB465, 0xB466, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0xB46C, /* 0x40 */
+ 0xB46D, 0xB46E, 0xB46F, 0xB470, 0xB471, 0xB473, 0xB474, 0xB475, /* 0x50 */
+ 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A, 0xB47B, 0xB47C, 0xB47D, /* 0x50 */
+ 0xB481, 0xB482, 0xB483, 0xB484, 0xB485, 0xB486, 0xB487, 0xB488, /* 0x60 */
+ 0xB489, 0xB48A, 0xB48B, 0xB48C, 0xB48D, 0xB48E, 0xB48F, 0xB490, /* 0x60 */
+ 0xB491, 0xB493, 0xB494, 0xB495, 0xB496, 0xB497, 0xB498, 0xB499, /* 0x70 */
+ 0xB49A, 0xB49B, 0xB49C, 0xB49D, 0xB4A1, 0xB4A2, 0xB4A3, 0xB4A4, /* 0x70 */
+ 0xB4A5, 0xB4A6, 0xB4A7, 0xB4A8, 0xB4A9, 0xB4AA, 0xB4AB, 0xB4AC, /* 0x80 */
+ 0xB4AD, 0xB4AE, 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B3, 0xB4B4, 0xB4B5, /* 0x80 */
+ 0xB4B6, 0xB4B7, 0xB4B8, 0xB4B9, 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, /* 0x90 */
+ 0xB4C1, 0xB4C2, 0xB4C3, 0xB4C4, 0xB4C5, 0xB4C6, 0xB4C7, 0xB4C8, /* 0x90 */
+ 0xB4C9, 0xB4CA, 0xB4CB, 0xB4CC, 0xB4CD, 0xB4CE, 0xB4CF, 0xB4D0, /* 0xA0 */
+ 0xB4D1, 0xB4D3, 0xB4D4, 0xB4D5, 0xB4D6, 0xB4D7, 0xB4D8, 0xB4D9, /* 0xA0 */
+ 0xB4DA, 0xB4DB, 0xB4DC, 0xB4DD, 0xB4E1, 0xB4E2, 0xB4E3, 0xB4E4, /* 0xB0 */
+ 0xB4E5, 0xB4E6, 0xB4E7, 0xB4E8, 0xB4E9, 0xB4EA, 0xB4EB, 0xB4EC, /* 0xB0 */
+ 0xB4ED, 0xB4EE, 0xB4EF, 0xB4F0, 0xB4F1, 0xB4F3, 0xB4F4, 0xB4F5, /* 0xC0 */
+ 0xB4F6, 0xB4F7, 0xB4F8, 0xB4F9, 0xB4FA, 0xB4FB, 0xB4FC, 0xB4FD, /* 0xC0 */
+ 0xB541, 0xB542, 0xB543, 0xB544, 0xB545, 0xB546, 0xB547, 0xB548, /* 0xD0 */
+ 0xB549, 0xB54A, 0xB54B, 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xB550, /* 0xD0 */
+ 0xB551, 0xB553, 0xB554, 0xB555, 0xB556, 0xB557, 0xB558, 0xB559, /* 0xE0 */
+ 0xB55A, 0xB55B, 0xB55C, 0xB55D, 0xB561, 0xB562, 0xB563, 0xB564, /* 0xE0 */
+ 0xB565, 0xB566, 0xB567, 0xB568, 0xB569, 0xB56A, 0xB56B, 0xB56C, /* 0xF0 */
+ 0xB56D, 0xB56E, 0xB56F, 0xB570, 0xB571, 0xB573, 0xB574, 0xB575 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB576, 0xB577, 0xB578, 0xB579, 0xB57A, 0xB57B, 0xB57C, 0xB57D, /* 0x00 */
+ 0xB581, 0xB582, 0xB583, 0xB584, 0xB585, 0xB586, 0xB587, 0xB588, /* 0x00 */
+ 0xB589, 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xB58E, 0xB58F, 0xB590, /* 0x10 */
+ 0xB591, 0xB593, 0xB594, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, /* 0x10 */
+ 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB5A1, 0xB5A2, 0xB5A3, 0xB5A4, /* 0x20 */
+ 0xB5A5, 0xB5A6, 0xB5A7, 0xB5A8, 0xB5A9, 0xB5AA, 0xB5AB, 0xB5AC, /* 0x20 */
+ 0xB5AD, 0xB5AE, 0xB5AF, 0xB5B0, 0xB5B1, 0xB5B3, 0xB5B4, 0xB5B5, /* 0x30 */
+ 0xB5B6, 0xB5B7, 0xB5B8, 0xB5B9, 0xB5BA, 0xB5BB, 0xB5BC, 0xB5BD, /* 0x30 */
+ 0xB5C1, 0xB5C2, 0xB5C3, 0xB5C4, 0xB5C5, 0xB5C6, 0xB5C7, 0xB5C8, /* 0x40 */
+ 0xB5C9, 0xB5CA, 0xB5CB, 0xB5CC, 0xB5CD, 0xB5CE, 0xB5CF, 0xB5D0, /* 0x40 */
+ 0xB5D1, 0xB5D3, 0xB5D4, 0xB5D5, 0xB5D6, 0xB5D7, 0xB5D8, 0xB5D9, /* 0x50 */
+ 0xB5DA, 0xB5DB, 0xB5DC, 0xB5DD, 0xB5E1, 0xB5E2, 0xB5E3, 0xB5E4, /* 0x50 */
+ 0xB5E5, 0xB5E6, 0xB5E7, 0xB5E8, 0xB5E9, 0xB5EA, 0xB5EB, 0xB5EC, /* 0x60 */
+ 0xB5ED, 0xB5EE, 0xB5EF, 0xB5F0, 0xB5F1, 0xB5F3, 0xB5F4, 0xB5F5, /* 0x60 */
+ 0xB5F6, 0xB5F7, 0xB5F8, 0xB5F9, 0xB5FA, 0xB5FB, 0xB5FC, 0xB5FD, /* 0x70 */
+ 0xB641, 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xB647, 0xB648, /* 0x70 */
+ 0xB649, 0xB64A, 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, /* 0x80 */
+ 0xB651, 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, /* 0x80 */
+ 0xB65A, 0xB65B, 0xB65C, 0xB65D, 0xB661, 0xB662, 0xB663, 0xB664, /* 0x90 */
+ 0xB665, 0xB666, 0xB667, 0xB668, 0xB669, 0xB66A, 0xB66B, 0xB66C, /* 0x90 */
+ 0xB66D, 0xB66E, 0xB66F, 0xB670, 0xB671, 0xB673, 0xB674, 0xB675, /* 0xA0 */
+ 0xB676, 0xB677, 0xB678, 0xB679, 0xB67A, 0xB67B, 0xB67C, 0xB67D, /* 0xA0 */
+ 0xB681, 0xB682, 0xB683, 0xB684, 0xB685, 0xB686, 0xB687, 0xB688, /* 0xB0 */
+ 0xB689, 0xB68A, 0xB68B, 0xB68C, 0xB68D, 0xB68E, 0xB68F, 0xB690, /* 0xB0 */
+ 0xB691, 0xB693, 0xB694, 0xB695, 0xB696, 0xB697, 0xB698, 0xB699, /* 0xC0 */
+ 0xB69A, 0xB69B, 0xB69C, 0xB69D, 0xB6A1, 0xB6A2, 0xB6A3, 0xB6A4, /* 0xC0 */
+ 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, 0xB6A9, 0xB6AA, 0xB6AB, 0xB6AC, /* 0xD0 */
+ 0xB6AD, 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B1, 0xB6B3, 0xB6B4, 0xB6B5, /* 0xD0 */
+ 0xB6B6, 0xB6B7, 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, 0xB6BC, 0xB6BD, /* 0xE0 */
+ 0xB6C1, 0xB6C2, 0xB6C3, 0xB6C4, 0xB6C5, 0xB6C6, 0xB6C7, 0xB6C8, /* 0xE0 */
+ 0xB6C9, 0xB6CA, 0xB6CB, 0xB6CC, 0xB6CD, 0xB6CE, 0xB6CF, 0xB6D0, /* 0xF0 */
+ 0xB6D1, 0xB6D3, 0xB6D4, 0xB6D5, 0xB6D6, 0xB6D7, 0xB6D8, 0xB6D9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB6DA, 0xB6DB, 0xB6DC, 0xB6DD, 0xB6E1, 0xB6E2, 0xB6E3, 0xB6E4, /* 0x00 */
+ 0xB6E5, 0xB6E6, 0xB6E7, 0xB6E8, 0xB6E9, 0xB6EA, 0xB6EB, 0xB6EC, /* 0x00 */
+ 0xB6ED, 0xB6EE, 0xB6EF, 0xB6F0, 0xB6F1, 0xB6F3, 0xB6F4, 0xB6F5, /* 0x10 */
+ 0xB6F6, 0xB6F7, 0xB6F8, 0xB6F9, 0xB6FA, 0xB6FB, 0xB6FC, 0xB6FD, /* 0x10 */
+ 0xB741, 0xB742, 0xB743, 0xB744, 0xB745, 0xB746, 0xB747, 0xB748, /* 0x20 */
+ 0xB749, 0xB74A, 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xB74F, 0xB750, /* 0x20 */
+ 0xB751, 0xB753, 0xB754, 0xB755, 0xB756, 0xB757, 0xB758, 0xB759, /* 0x30 */
+ 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB761, 0xB762, 0xB763, 0xB764, /* 0x30 */
+ 0xB765, 0xB766, 0xB767, 0xB768, 0xB769, 0xB76A, 0xB76B, 0xB76C, /* 0x40 */
+ 0xB76D, 0xB76E, 0xB76F, 0xB770, 0xB771, 0xB773, 0xB774, 0xB775, /* 0x40 */
+ 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B, 0xB77C, 0xB77D, /* 0x50 */
+ 0xB781, 0xB782, 0xB783, 0xB784, 0xB785, 0xB786, 0xB787, 0xB788, /* 0x50 */
+ 0xB789, 0xB78A, 0xB78B, 0xB78C, 0xB78D, 0xB78E, 0xB78F, 0xB790, /* 0x60 */
+ 0xB791, 0xB793, 0xB794, 0xB795, 0xB796, 0xB797, 0xB798, 0xB799, /* 0x60 */
+ 0xB79A, 0xB79B, 0xB79C, 0xB79D, 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, /* 0x70 */
+ 0xB7A5, 0xB7A6, 0xB7A7, 0xB7A8, 0xB7A9, 0xB7AA, 0xB7AB, 0xB7AC, /* 0x70 */
+ 0xB7AD, 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B3, 0xB7B4, 0xB7B5, /* 0x80 */
+ 0xB7B6, 0xB7B7, 0xB7B8, 0xB7B9, 0xB7BA, 0xB7BB, 0xB7BC, 0xB7BD, /* 0x80 */
+ 0xB861, 0xB862, 0xB863, 0xB864, 0xB865, 0xB866, 0xB867, 0xB868, /* 0x90 */
+ 0xB869, 0xB86A, 0xB86B, 0xB86C, 0xB86D, 0xB86E, 0xB86F, 0xB870, /* 0x90 */
+ 0xB871, 0xB873, 0xB874, 0xB875, 0xB876, 0xB877, 0xB878, 0xB879, /* 0xA0 */
+ 0xB87A, 0xB87B, 0xB87C, 0xB87D, 0xB881, 0xB882, 0xB883, 0xB884, /* 0xA0 */
+ 0xB885, 0xB886, 0xB887, 0xB888, 0xB889, 0xB88A, 0xB88B, 0xB88C, /* 0xB0 */
+ 0xB88D, 0xB88E, 0xB88F, 0xB890, 0xB891, 0xB893, 0xB894, 0xB895, /* 0xB0 */
+ 0xB896, 0xB897, 0xB898, 0xB899, 0xB89A, 0xB89B, 0xB89C, 0xB89D, /* 0xC0 */
+ 0xB8A1, 0xB8A2, 0xB8A3, 0xB8A4, 0xB8A5, 0xB8A6, 0xB8A7, 0xB8A8, /* 0xC0 */
+ 0xB8A9, 0xB8AA, 0xB8AB, 0xB8AC, 0xB8AD, 0xB8AE, 0xB8AF, 0xB8B0, /* 0xD0 */
+ 0xB8B1, 0xB8B3, 0xB8B4, 0xB8B5, 0xB8B6, 0xB8B7, 0xB8B8, 0xB8B9, /* 0xD0 */
+ 0xB8BA, 0xB8BB, 0xB8BC, 0xB8BD, 0xB8C1, 0xB8C2, 0xB8C3, 0xB8C4, /* 0xE0 */
+ 0xB8C5, 0xB8C6, 0xB8C7, 0xB8C8, 0xB8C9, 0xB8CA, 0xB8CB, 0xB8CC, /* 0xE0 */
+ 0xB8CD, 0xB8CE, 0xB8CF, 0xB8D0, 0xB8D1, 0xB8D3, 0xB8D4, 0xB8D5, /* 0xF0 */
+ 0xB8D6, 0xB8D7, 0xB8D8, 0xB8D9, 0xB8DA, 0xB8DB, 0xB8DC, 0xB8DD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB8E1, 0xB8E2, 0xB8E3, 0xB8E4, 0xB8E5, 0xB8E6, 0xB8E7, 0xB8E8, /* 0x00 */
+ 0xB8E9, 0xB8EA, 0xB8EB, 0xB8EC, 0xB8ED, 0xB8EE, 0xB8EF, 0xB8F0, /* 0x00 */
+ 0xB8F1, 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6, 0xB8F7, 0xB8F8, 0xB8F9, /* 0x10 */
+ 0xB8FA, 0xB8FB, 0xB8FC, 0xB8FD, 0xB941, 0xB942, 0xB943, 0xB944, /* 0x10 */
+ 0xB945, 0xB946, 0xB947, 0xB948, 0xB949, 0xB94A, 0xB94B, 0xB94C, /* 0x20 */
+ 0xB94D, 0xB94E, 0xB94F, 0xB950, 0xB951, 0xB953, 0xB954, 0xB955, /* 0x20 */
+ 0xB956, 0xB957, 0xB958, 0xB959, 0xB95A, 0xB95B, 0xB95C, 0xB95D, /* 0x30 */
+ 0xB961, 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, 0xB967, 0xB968, /* 0x30 */
+ 0xB969, 0xB96A, 0xB96B, 0xB96C, 0xB96D, 0xB96E, 0xB96F, 0xB970, /* 0x40 */
+ 0xB971, 0xB973, 0xB974, 0xB975, 0xB976, 0xB977, 0xB978, 0xB979, /* 0x40 */
+ 0xB97A, 0xB97B, 0xB97C, 0xB97D, 0xB981, 0xB982, 0xB983, 0xB984, /* 0x50 */
+ 0xB985, 0xB986, 0xB987, 0xB988, 0xB989, 0xB98A, 0xB98B, 0xB98C, /* 0x50 */
+ 0xB98D, 0xB98E, 0xB98F, 0xB990, 0xB991, 0xB993, 0xB994, 0xB995, /* 0x60 */
+ 0xB996, 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, 0xB99D, /* 0x60 */
+ 0xB9A1, 0xB9A2, 0xB9A3, 0xB9A4, 0xB9A5, 0xB9A6, 0xB9A7, 0xB9A8, /* 0x70 */
+ 0xB9A9, 0xB9AA, 0xB9AB, 0xB9AC, 0xB9AD, 0xB9AE, 0xB9AF, 0xB9B0, /* 0x70 */
+ 0xB9B1, 0xB9B3, 0xB9B4, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9, /* 0x80 */
+ 0xB9BA, 0xB9BB, 0xB9BC, 0xB9BD, 0xB9C1, 0xB9C2, 0xB9C3, 0xB9C4, /* 0x80 */
+ 0xB9C5, 0xB9C6, 0xB9C7, 0xB9C8, 0xB9C9, 0xB9CA, 0xB9CB, 0xB9CC, /* 0x90 */
+ 0xB9CD, 0xB9CE, 0xB9CF, 0xB9D0, 0xB9D1, 0xB9D3, 0xB9D4, 0xB9D5, /* 0x90 */
+ 0xB9D6, 0xB9D7, 0xB9D8, 0xB9D9, 0xB9DA, 0xB9DB, 0xB9DC, 0xB9DD, /* 0xA0 */
+ 0xB9E1, 0xB9E2, 0xB9E3, 0xB9E4, 0xB9E5, 0xB9E6, 0xB9E7, 0xB9E8, /* 0xA0 */
+ 0xB9E9, 0xB9EA, 0xB9EB, 0xB9EC, 0xB9ED, 0xB9EE, 0xB9EF, 0xB9F0, /* 0xB0 */
+ 0xB9F1, 0xB9F3, 0xB9F4, 0xB9F5, 0xB9F6, 0xB9F7, 0xB9F8, 0xB9F9, /* 0xB0 */
+ 0xB9FA, 0xB9FB, 0xB9FC, 0xB9FD, 0xBA41, 0xBA42, 0xBA43, 0xBA44, /* 0xC0 */
+ 0xBA45, 0xBA46, 0xBA47, 0xBA48, 0xBA49, 0xBA4A, 0xBA4B, 0xBA4C, /* 0xC0 */
+ 0xBA4D, 0xBA4E, 0xBA4F, 0xBA50, 0xBA51, 0xBA53, 0xBA54, 0xBA55, /* 0xD0 */
+ 0xBA56, 0xBA57, 0xBA58, 0xBA59, 0xBA5A, 0xBA5B, 0xBA5C, 0xBA5D, /* 0xD0 */
+ 0xBA61, 0xBA62, 0xBA63, 0xBA64, 0xBA65, 0xBA66, 0xBA67, 0xBA68, /* 0xE0 */
+ 0xBA69, 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0xBA70, /* 0xE0 */
+ 0xBA71, 0xBA73, 0xBA74, 0xBA75, 0xBA76, 0xBA77, 0xBA78, 0xBA79, /* 0xF0 */
+ 0xBA7A, 0xBA7B, 0xBA7C, 0xBA7D, 0xBA81, 0xBA82, 0xBA83, 0xBA84 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_C9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBA85, 0xBA86, 0xBA87, 0xBA88, 0xBA89, 0xBA8A, 0xBA8B, 0xBA8C, /* 0x00 */
+ 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, 0xBA93, 0xBA94, 0xBA95, /* 0x00 */
+ 0xBA96, 0xBA97, 0xBA98, 0xBA99, 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, /* 0x10 */
+ 0xBAA1, 0xBAA2, 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0xBAA8, /* 0x10 */
+ 0xBAA9, 0xBAAA, 0xBAAB, 0xBAAC, 0xBAAD, 0xBAAE, 0xBAAF, 0xBAB0, /* 0x20 */
+ 0xBAB1, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, 0xBAB7, 0xBAB8, 0xBAB9, /* 0x20 */
+ 0xBABA, 0xBABB, 0xBABC, 0xBABD, 0xBAC1, 0xBAC2, 0xBAC3, 0xBAC4, /* 0x30 */
+ 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC8, 0xBAC9, 0xBACA, 0xBACB, 0xBACC, /* 0x30 */
+ 0xBACD, 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD3, 0xBAD4, 0xBAD5, /* 0x40 */
+ 0xBAD6, 0xBAD7, 0xBAD8, 0xBAD9, 0xBADA, 0xBADB, 0xBADC, 0xBADD, /* 0x40 */
+ 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6, 0xBAE7, 0xBAE8, /* 0x50 */
+ 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, 0xBAEF, 0xBAF0, /* 0x50 */
+ 0xBAF1, 0xBAF3, 0xBAF4, 0xBAF5, 0xBAF6, 0xBAF7, 0xBAF8, 0xBAF9, /* 0x60 */
+ 0xBAFA, 0xBAFB, 0xBAFC, 0xBAFD, 0xBB41, 0xBB42, 0xBB43, 0xBB44, /* 0x60 */
+ 0xBB45, 0xBB46, 0xBB47, 0xBB48, 0xBB49, 0xBB4A, 0xBB4B, 0xBB4C, /* 0x70 */
+ 0xBB4D, 0xBB4E, 0xBB4F, 0xBB50, 0xBB51, 0xBB53, 0xBB54, 0xBB55, /* 0x70 */
+ 0xBB56, 0xBB57, 0xBB58, 0xBB59, 0xBB5A, 0xBB5B, 0xBB5C, 0xBB5D, /* 0x80 */
+ 0xBB61, 0xBB62, 0xBB63, 0xBB64, 0xBB65, 0xBB66, 0xBB67, 0xBB68, /* 0x80 */
+ 0xBB69, 0xBB6A, 0xBB6B, 0xBB6C, 0xBB6D, 0xBB6E, 0xBB6F, 0xBB70, /* 0x90 */
+ 0xBB71, 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xBB77, 0xBB78, 0xBB79, /* 0x90 */
+ 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB81, 0xBB82, 0xBB83, 0xBB84, /* 0xA0 */
+ 0xBB85, 0xBB86, 0xBB87, 0xBB88, 0xBB89, 0xBB8A, 0xBB8B, 0xBB8C, /* 0xA0 */
+ 0xBB8D, 0xBB8E, 0xBB8F, 0xBB90, 0xBB91, 0xBB93, 0xBB94, 0xBB95, /* 0xB0 */
+ 0xBB96, 0xBB97, 0xBB98, 0xBB99, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, /* 0xB0 */
+ 0xBBA1, 0xBBA2, 0xBBA3, 0xBBA4, 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA8, /* 0xC0 */
+ 0xBBA9, 0xBBAA, 0xBBAB, 0xBBAC, 0xBBAD, 0xBBAE, 0xBBAF, 0xBBB0, /* 0xC0 */
+ 0xBBB1, 0xBBB3, 0xBBB4, 0xBBB5, 0xBBB6, 0xBBB7, 0xBBB8, 0xBBB9, /* 0xD0 */
+ 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBC61, 0xBC62, 0xBC63, 0xBC64, /* 0xD0 */
+ 0xBC65, 0xBC66, 0xBC67, 0xBC68, 0xBC69, 0xBC6A, 0xBC6B, 0xBC6C, /* 0xE0 */
+ 0xBC6D, 0xBC6E, 0xBC6F, 0xBC70, 0xBC71, 0xBC73, 0xBC74, 0xBC75, /* 0xE0 */
+ 0xBC76, 0xBC77, 0xBC78, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, /* 0xF0 */
+ 0xBC81, 0xBC82, 0xBC83, 0xBC84, 0xBC85, 0xBC86, 0xBC87, 0xBC88 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_CA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBC89, 0xBC8A, 0xBC8B, 0xBC8C, 0xBC8D, 0xBC8E, 0xBC8F, 0xBC90, /* 0x00 */
+ 0xBC91, 0xBC93, 0xBC94, 0xBC95, 0xBC96, 0xBC97, 0xBC98, 0xBC99, /* 0x00 */
+ 0xBC9A, 0xBC9B, 0xBC9C, 0xBC9D, 0xBCA1, 0xBCA2, 0xBCA3, 0xBCA4, /* 0x10 */
+ 0xBCA5, 0xBCA6, 0xBCA7, 0xBCA8, 0xBCA9, 0xBCAA, 0xBCAB, 0xBCAC, /* 0x10 */
+ 0xBCAD, 0xBCAE, 0xBCAF, 0xBCB0, 0xBCB1, 0xBCB3, 0xBCB4, 0xBCB5, /* 0x20 */
+ 0xBCB6, 0xBCB7, 0xBCB8, 0xBCB9, 0xBCBA, 0xBCBB, 0xBCBC, 0xBCBD, /* 0x20 */
+ 0xBCC1, 0xBCC2, 0xBCC3, 0xBCC4, 0xBCC5, 0xBCC6, 0xBCC7, 0xBCC8, /* 0x30 */
+ 0xBCC9, 0xBCCA, 0xBCCB, 0xBCCC, 0xBCCD, 0xBCCE, 0xBCCF, 0xBCD0, /* 0x30 */
+ 0xBCD1, 0xBCD3, 0xBCD4, 0xBCD5, 0xBCD6, 0xBCD7, 0xBCD8, 0xBCD9, /* 0x40 */
+ 0xBCDA, 0xBCDB, 0xBCDC, 0xBCDD, 0xBCE1, 0xBCE2, 0xBCE3, 0xBCE4, /* 0x40 */
+ 0xBCE5, 0xBCE6, 0xBCE7, 0xBCE8, 0xBCE9, 0xBCEA, 0xBCEB, 0xBCEC, /* 0x50 */
+ 0xBCED, 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1, 0xBCF3, 0xBCF4, 0xBCF5, /* 0x50 */
+ 0xBCF6, 0xBCF7, 0xBCF8, 0xBCF9, 0xBCFA, 0xBCFB, 0xBCFC, 0xBCFD, /* 0x60 */
+ 0xBD41, 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD48, /* 0x60 */
+ 0xBD49, 0xBD4A, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, 0xBD4F, 0xBD50, /* 0x70 */
+ 0xBD51, 0xBD53, 0xBD54, 0xBD55, 0xBD56, 0xBD57, 0xBD58, 0xBD59, /* 0x70 */
+ 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD61, 0xBD62, 0xBD63, 0xBD64, /* 0x80 */
+ 0xBD65, 0xBD66, 0xBD67, 0xBD68, 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, /* 0x80 */
+ 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD73, 0xBD74, 0xBD75, /* 0x90 */
+ 0xBD76, 0xBD77, 0xBD78, 0xBD79, 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, /* 0x90 */
+ 0xBD81, 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, 0xBD87, 0xBD88, /* 0xA0 */
+ 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, 0xBD90, /* 0xA0 */
+ 0xBD91, 0xBD93, 0xBD94, 0xBD95, 0xBD96, 0xBD97, 0xBD98, 0xBD99, /* 0xB0 */
+ 0xBD9A, 0xBD9B, 0xBD9C, 0xBD9D, 0xBDA1, 0xBDA2, 0xBDA3, 0xBDA4, /* 0xB0 */
+ 0xBDA5, 0xBDA6, 0xBDA7, 0xBDA8, 0xBDA9, 0xBDAA, 0xBDAB, 0xBDAC, /* 0xC0 */
+ 0xBDAD, 0xBDAE, 0xBDAF, 0xBDB0, 0xBDB1, 0xBDB3, 0xBDB4, 0xBDB5, /* 0xC0 */
+ 0xBDB6, 0xBDB7, 0xBDB8, 0xBDB9, 0xBDBA, 0xBDBB, 0xBDBC, 0xBDBD, /* 0xD0 */
+ 0xBDC1, 0xBDC2, 0xBDC3, 0xBDC4, 0xBDC5, 0xBDC6, 0xBDC7, 0xBDC8, /* 0xD0 */
+ 0xBDC9, 0xBDCA, 0xBDCB, 0xBDCC, 0xBDCD, 0xBDCE, 0xBDCF, 0xBDD0, /* 0xE0 */
+ 0xBDD1, 0xBDD3, 0xBDD4, 0xBDD5, 0xBDD6, 0xBDD7, 0xBDD8, 0xBDD9, /* 0xE0 */
+ 0xBDDA, 0xBDDB, 0xBDDC, 0xBDDD, 0xBDE1, 0xBDE2, 0xBDE3, 0xBDE4, /* 0xF0 */
+ 0xBDE5, 0xBDE6, 0xBDE7, 0xBDE8, 0xBDE9, 0xBDEA, 0xBDEB, 0xBDEC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_CB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDED, 0xBDEE, 0xBDEF, 0xBDF0, 0xBDF1, 0xBDF3, 0xBDF4, 0xBDF5, /* 0x00 */
+ 0xBDF6, 0xBDF7, 0xBDF8, 0xBDF9, 0xBDFA, 0xBDFB, 0xBDFC, 0xBDFD, /* 0x00 */
+ 0xBE41, 0xBE42, 0xBE43, 0xBE44, 0xBE45, 0xBE46, 0xBE47, 0xBE48, /* 0x10 */
+ 0xBE49, 0xBE4A, 0xBE4B, 0xBE4C, 0xBE4D, 0xBE4E, 0xBE4F, 0xBE50, /* 0x10 */
+ 0xBE51, 0xBE53, 0xBE54, 0xBE55, 0xBE56, 0xBE57, 0xBE58, 0xBE59, /* 0x20 */
+ 0xBE5A, 0xBE5B, 0xBE5C, 0xBE5D, 0xBE61, 0xBE62, 0xBE63, 0xBE64, /* 0x20 */
+ 0xBE65, 0xBE66, 0xBE67, 0xBE68, 0xBE69, 0xBE6A, 0xBE6B, 0xBE6C, /* 0x30 */
+ 0xBE6D, 0xBE6E, 0xBE6F, 0xBE70, 0xBE71, 0xBE73, 0xBE74, 0xBE75, /* 0x30 */
+ 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7B, 0xBE7C, 0xBE7D, /* 0x40 */
+ 0xBE81, 0xBE82, 0xBE83, 0xBE84, 0xBE85, 0xBE86, 0xBE87, 0xBE88, /* 0x40 */
+ 0xBE89, 0xBE8A, 0xBE8B, 0xBE8C, 0xBE8D, 0xBE8E, 0xBE8F, 0xBE90, /* 0x50 */
+ 0xBE91, 0xBE93, 0xBE94, 0xBE95, 0xBE96, 0xBE97, 0xBE98, 0xBE99, /* 0x50 */
+ 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBEA1, 0xBEA2, 0xBEA3, 0xBEA4, /* 0x60 */
+ 0xBEA5, 0xBEA6, 0xBEA7, 0xBEA8, 0xBEA9, 0xBEAA, 0xBEAB, 0xBEAC, /* 0x60 */
+ 0xBEAD, 0xBEAE, 0xBEAF, 0xBEB0, 0xBEB1, 0xBEB3, 0xBEB4, 0xBEB5, /* 0x70 */
+ 0xBEB6, 0xBEB7, 0xBEB8, 0xBEB9, 0xBEBA, 0xBEBB, 0xBEBC, 0xBEBD, /* 0x70 */
+ 0xBEC1, 0xBEC2, 0xBEC3, 0xBEC4, 0xBEC5, 0xBEC6, 0xBEC7, 0xBEC8, /* 0x80 */
+ 0xBEC9, 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, 0xBECF, 0xBED0, /* 0x80 */
+ 0xBED1, 0xBED3, 0xBED4, 0xBED5, 0xBED6, 0xBED7, 0xBED8, 0xBED9, /* 0x90 */
+ 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD, 0xBEE1, 0xBEE2, 0xBEE3, 0xBEE4, /* 0x90 */
+ 0xBEE5, 0xBEE6, 0xBEE7, 0xBEE8, 0xBEE9, 0xBEEA, 0xBEEB, 0xBEEC, /* 0xA0 */
+ 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, 0xBEF1, 0xBEF3, 0xBEF4, 0xBEF5, /* 0xA0 */
+ 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA, 0xBEFB, 0xBEFC, 0xBEFD, /* 0xB0 */
+ 0xBF41, 0xBF42, 0xBF43, 0xBF44, 0xBF45, 0xBF46, 0xBF47, 0xBF48, /* 0xB0 */
+ 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF50, /* 0xC0 */
+ 0xBF51, 0xBF53, 0xBF54, 0xBF55, 0xBF56, 0xBF57, 0xBF58, 0xBF59, /* 0xC0 */
+ 0xBF5A, 0xBF5B, 0xBF5C, 0xBF5D, 0xBF61, 0xBF62, 0xBF63, 0xBF64, /* 0xD0 */
+ 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, /* 0xD0 */
+ 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, 0xBF73, 0xBF74, 0xBF75, /* 0xE0 */
+ 0xBF76, 0xBF77, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, 0xBF7D, /* 0xE0 */
+ 0xBF81, 0xBF82, 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xBF87, 0xBF88, /* 0xF0 */
+ 0xBF89, 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_CC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBF91, 0xBF93, 0xBF94, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, /* 0x00 */
+ 0xBF9A, 0xBF9B, 0xBF9C, 0xBF9D, 0xBFA1, 0xBFA2, 0xBFA3, 0xBFA4, /* 0x00 */
+ 0xBFA5, 0xBFA6, 0xBFA7, 0xBFA8, 0xBFA9, 0xBFAA, 0xBFAB, 0xBFAC, /* 0x10 */
+ 0xBFAD, 0xBFAE, 0xBFAF, 0xBFB0, 0xBFB1, 0xBFB3, 0xBFB4, 0xBFB5, /* 0x10 */
+ 0xBFB6, 0xBFB7, 0xBFB8, 0xBFB9, 0xBFBA, 0xBFBB, 0xBFBC, 0xBFBD, /* 0x20 */
+ 0xC061, 0xC062, 0xC063, 0xC064, 0xC065, 0xC066, 0xC067, 0xC068, /* 0x20 */
+ 0xC069, 0xC06A, 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, /* 0x30 */
+ 0xC071, 0xC073, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, /* 0x30 */
+ 0xC07A, 0xC07B, 0xC07C, 0xC07D, 0xC081, 0xC082, 0xC083, 0xC084, /* 0x40 */
+ 0xC085, 0xC086, 0xC087, 0xC088, 0xC089, 0xC08A, 0xC08B, 0xC08C, /* 0x40 */
+ 0xC08D, 0xC08E, 0xC08F, 0xC090, 0xC091, 0xC093, 0xC094, 0xC095, /* 0x50 */
+ 0xC096, 0xC097, 0xC098, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, /* 0x50 */
+ 0xC0A1, 0xC0A2, 0xC0A3, 0xC0A4, 0xC0A5, 0xC0A6, 0xC0A7, 0xC0A8, /* 0x60 */
+ 0xC0A9, 0xC0AA, 0xC0AB, 0xC0AC, 0xC0AD, 0xC0AE, 0xC0AF, 0xC0B0, /* 0x60 */
+ 0xC0B1, 0xC0B3, 0xC0B4, 0xC0B5, 0xC0B6, 0xC0B7, 0xC0B8, 0xC0B9, /* 0x70 */
+ 0xC0BA, 0xC0BB, 0xC0BC, 0xC0BD, 0xC0C1, 0xC0C2, 0xC0C3, 0xC0C4, /* 0x70 */
+ 0xC0C5, 0xC0C6, 0xC0C7, 0xC0C8, 0xC0C9, 0xC0CA, 0xC0CB, 0xC0CC, /* 0x80 */
+ 0xC0CD, 0xC0CE, 0xC0CF, 0xC0D0, 0xC0D1, 0xC0D3, 0xC0D4, 0xC0D5, /* 0x80 */
+ 0xC0D6, 0xC0D7, 0xC0D8, 0xC0D9, 0xC0DA, 0xC0DB, 0xC0DC, 0xC0DD, /* 0x90 */
+ 0xC0E1, 0xC0E2, 0xC0E3, 0xC0E4, 0xC0E5, 0xC0E6, 0xC0E7, 0xC0E8, /* 0x90 */
+ 0xC0E9, 0xC0EA, 0xC0EB, 0xC0EC, 0xC0ED, 0xC0EE, 0xC0EF, 0xC0F0, /* 0xA0 */
+ 0xC0F1, 0xC0F3, 0xC0F4, 0xC0F5, 0xC0F6, 0xC0F7, 0xC0F8, 0xC0F9, /* 0xA0 */
+ 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD, 0xC141, 0xC142, 0xC143, 0xC144, /* 0xB0 */
+ 0xC145, 0xC146, 0xC147, 0xC148, 0xC149, 0xC14A, 0xC14B, 0xC14C, /* 0xB0 */
+ 0xC14D, 0xC14E, 0xC14F, 0xC150, 0xC151, 0xC153, 0xC154, 0xC155, /* 0xC0 */
+ 0xC156, 0xC157, 0xC158, 0xC159, 0xC15A, 0xC15B, 0xC15C, 0xC15D, /* 0xC0 */
+ 0xC161, 0xC162, 0xC163, 0xC164, 0xC165, 0xC166, 0xC167, 0xC168, /* 0xD0 */
+ 0xC169, 0xC16A, 0xC16B, 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0xC170, /* 0xD0 */
+ 0xC171, 0xC173, 0xC174, 0xC175, 0xC176, 0xC177, 0xC178, 0xC179, /* 0xE0 */
+ 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xC181, 0xC182, 0xC183, 0xC184, /* 0xE0 */
+ 0xC185, 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A, 0xC18B, 0xC18C, /* 0xF0 */
+ 0xC18D, 0xC18E, 0xC18F, 0xC190, 0xC191, 0xC193, 0xC194, 0xC195 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_CD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC196, 0xC197, 0xC198, 0xC199, 0xC19A, 0xC19B, 0xC19C, 0xC19D, /* 0x00 */
+ 0xC1A1, 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A5, 0xC1A6, 0xC1A7, 0xC1A8, /* 0x00 */
+ 0xC1A9, 0xC1AA, 0xC1AB, 0xC1AC, 0xC1AD, 0xC1AE, 0xC1AF, 0xC1B0, /* 0x10 */
+ 0xC1B1, 0xC1B3, 0xC1B4, 0xC1B5, 0xC1B6, 0xC1B7, 0xC1B8, 0xC1B9, /* 0x10 */
+ 0xC1BA, 0xC1BB, 0xC1BC, 0xC1BD, 0xC1C1, 0xC1C2, 0xC1C3, 0xC1C4, /* 0x20 */
+ 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C8, 0xC1C9, 0xC1CA, 0xC1CB, 0xC1CC, /* 0x20 */
+ 0xC1CD, 0xC1CE, 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D3, 0xC1D4, 0xC1D5, /* 0x30 */
+ 0xC1D6, 0xC1D7, 0xC1D8, 0xC1D9, 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, /* 0x30 */
+ 0xC1E1, 0xC1E2, 0xC1E3, 0xC1E4, 0xC1E5, 0xC1E6, 0xC1E7, 0xC1E8, /* 0x40 */
+ 0xC1E9, 0xC1EA, 0xC1EB, 0xC1EC, 0xC1ED, 0xC1EE, 0xC1EF, 0xC1F0, /* 0x40 */
+ 0xC1F1, 0xC1F3, 0xC1F4, 0xC1F5, 0xC1F6, 0xC1F7, 0xC1F8, 0xC1F9, /* 0x50 */
+ 0xC1FA, 0xC1FB, 0xC1FC, 0xC1FD, 0xC241, 0xC242, 0xC243, 0xC244, /* 0x50 */
+ 0xC245, 0xC246, 0xC247, 0xC248, 0xC249, 0xC24A, 0xC24B, 0xC24C, /* 0x60 */
+ 0xC24D, 0xC24E, 0xC24F, 0xC250, 0xC251, 0xC253, 0xC254, 0xC255, /* 0x60 */
+ 0xC256, 0xC257, 0xC258, 0xC259, 0xC25A, 0xC25B, 0xC25C, 0xC25D, /* 0x70 */
+ 0xC261, 0xC262, 0xC263, 0xC264, 0xC265, 0xC266, 0xC267, 0xC268, /* 0x70 */
+ 0xC269, 0xC26A, 0xC26B, 0xC26C, 0xC26D, 0xC26E, 0xC26F, 0xC270, /* 0x80 */
+ 0xC271, 0xC273, 0xC274, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, /* 0x80 */
+ 0xC27A, 0xC27B, 0xC27C, 0xC27D, 0xC281, 0xC282, 0xC283, 0xC284, /* 0x90 */
+ 0xC285, 0xC286, 0xC287, 0xC288, 0xC289, 0xC28A, 0xC28B, 0xC28C, /* 0x90 */
+ 0xC28D, 0xC28E, 0xC28F, 0xC290, 0xC291, 0xC293, 0xC294, 0xC295, /* 0xA0 */
+ 0xC296, 0xC297, 0xC298, 0xC299, 0xC29A, 0xC29B, 0xC29C, 0xC29D, /* 0xA0 */
+ 0xC2A1, 0xC2A2, 0xC2A3, 0xC2A4, 0xC2A5, 0xC2A6, 0xC2A7, 0xC2A8, /* 0xB0 */
+ 0xC2A9, 0xC2AA, 0xC2AB, 0xC2AC, 0xC2AD, 0xC2AE, 0xC2AF, 0xC2B0, /* 0xB0 */
+ 0xC2B1, 0xC2B3, 0xC2B4, 0xC2B5, 0xC2B6, 0xC2B7, 0xC2B8, 0xC2B9, /* 0xC0 */
+ 0xC2BA, 0xC2BB, 0xC2BC, 0xC2BD, 0xC2C1, 0xC2C2, 0xC2C3, 0xC2C4, /* 0xC0 */
+ 0xC2C5, 0xC2C6, 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA, 0xC2CB, 0xC2CC, /* 0xD0 */
+ 0xC2CD, 0xC2CE, 0xC2CF, 0xC2D0, 0xC2D1, 0xC2D3, 0xC2D4, 0xC2D5, /* 0xD0 */
+ 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA, 0xC2DB, 0xC2DC, 0xC2DD, /* 0xE0 */
+ 0xC2E1, 0xC2E2, 0xC2E3, 0xC2E4, 0xC2E5, 0xC2E6, 0xC2E7, 0xC2E8, /* 0xE0 */
+ 0xC2E9, 0xC2EA, 0xC2EB, 0xC2EC, 0xC2ED, 0xC2EE, 0xC2EF, 0xC2F0, /* 0xF0 */
+ 0xC2F1, 0xC2F3, 0xC2F4, 0xC2F5, 0xC2F6, 0xC2F7, 0xC2F8, 0xC2F9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_CE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC2FA, 0xC2FB, 0xC2FC, 0xC2FD, 0xC341, 0xC342, 0xC343, 0xC344, /* 0x00 */
+ 0xC345, 0xC346, 0xC347, 0xC348, 0xC349, 0xC34A, 0xC34B, 0xC34C, /* 0x00 */
+ 0xC34D, 0xC34E, 0xC34F, 0xC350, 0xC351, 0xC353, 0xC354, 0xC355, /* 0x10 */
+ 0xC356, 0xC357, 0xC358, 0xC359, 0xC35A, 0xC35B, 0xC35C, 0xC35D, /* 0x10 */
+ 0xC361, 0xC362, 0xC363, 0xC364, 0xC365, 0xC366, 0xC367, 0xC368, /* 0x20 */
+ 0xC369, 0xC36A, 0xC36B, 0xC36C, 0xC36D, 0xC36E, 0xC36F, 0xC370, /* 0x20 */
+ 0xC371, 0xC373, 0xC374, 0xC375, 0xC376, 0xC377, 0xC378, 0xC379, /* 0x30 */
+ 0xC37A, 0xC37B, 0xC37C, 0xC37D, 0xC381, 0xC382, 0xC383, 0xC384, /* 0x30 */
+ 0xC385, 0xC386, 0xC387, 0xC388, 0xC389, 0xC38A, 0xC38B, 0xC38C, /* 0x40 */
+ 0xC38D, 0xC38E, 0xC38F, 0xC390, 0xC391, 0xC393, 0xC394, 0xC395, /* 0x40 */
+ 0xC396, 0xC397, 0xC398, 0xC399, 0xC39A, 0xC39B, 0xC39C, 0xC39D, /* 0x50 */
+ 0xC3A1, 0xC3A2, 0xC3A3, 0xC3A4, 0xC3A5, 0xC3A6, 0xC3A7, 0xC3A8, /* 0x50 */
+ 0xC3A9, 0xC3AA, 0xC3AB, 0xC3AC, 0xC3AD, 0xC3AE, 0xC3AF, 0xC3B0, /* 0x60 */
+ 0xC3B1, 0xC3B3, 0xC3B4, 0xC3B5, 0xC3B6, 0xC3B7, 0xC3B8, 0xC3B9, /* 0x60 */
+ 0xC3BA, 0xC3BB, 0xC3BC, 0xC3BD, 0xC461, 0xC462, 0xC463, 0xC464, /* 0x70 */
+ 0xC465, 0xC466, 0xC467, 0xC468, 0xC469, 0xC46A, 0xC46B, 0xC46C, /* 0x70 */
+ 0xC46D, 0xC46E, 0xC46F, 0xC470, 0xC471, 0xC473, 0xC474, 0xC475, /* 0x80 */
+ 0xC476, 0xC477, 0xC478, 0xC479, 0xC47A, 0xC47B, 0xC47C, 0xC47D, /* 0x80 */
+ 0xC481, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, 0xC487, 0xC488, /* 0x90 */
+ 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E, 0xC48F, 0xC490, /* 0x90 */
+ 0xC491, 0xC493, 0xC494, 0xC495, 0xC496, 0xC497, 0xC498, 0xC499, /* 0xA0 */
+ 0xC49A, 0xC49B, 0xC49C, 0xC49D, 0xC4A1, 0xC4A2, 0xC4A3, 0xC4A4, /* 0xA0 */
+ 0xC4A5, 0xC4A6, 0xC4A7, 0xC4A8, 0xC4A9, 0xC4AA, 0xC4AB, 0xC4AC, /* 0xB0 */
+ 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, 0xC4B1, 0xC4B3, 0xC4B4, 0xC4B5, /* 0xB0 */
+ 0xC4B6, 0xC4B7, 0xC4B8, 0xC4B9, 0xC4BA, 0xC4BB, 0xC4BC, 0xC4BD, /* 0xC0 */
+ 0xC4C1, 0xC4C2, 0xC4C3, 0xC4C4, 0xC4C5, 0xC4C6, 0xC4C7, 0xC4C8, /* 0xC0 */
+ 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, 0xC4CD, 0xC4CE, 0xC4CF, 0xC4D0, /* 0xD0 */
+ 0xC4D1, 0xC4D3, 0xC4D4, 0xC4D5, 0xC4D6, 0xC4D7, 0xC4D8, 0xC4D9, /* 0xD0 */
+ 0xC4DA, 0xC4DB, 0xC4DC, 0xC4DD, 0xC4E1, 0xC4E2, 0xC4E3, 0xC4E4, /* 0xE0 */
+ 0xC4E5, 0xC4E6, 0xC4E7, 0xC4E8, 0xC4E9, 0xC4EA, 0xC4EB, 0xC4EC, /* 0xE0 */
+ 0xC4ED, 0xC4EE, 0xC4EF, 0xC4F0, 0xC4F1, 0xC4F3, 0xC4F4, 0xC4F5, /* 0xF0 */
+ 0xC4F6, 0xC4F7, 0xC4F8, 0xC4F9, 0xC4FA, 0xC4FB, 0xC4FC, 0xC4FD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_CF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC541, 0xC542, 0xC543, 0xC544, 0xC545, 0xC546, 0xC547, 0xC548, /* 0x00 */
+ 0xC549, 0xC54A, 0xC54B, 0xC54C, 0xC54D, 0xC54E, 0xC54F, 0xC550, /* 0x00 */
+ 0xC551, 0xC553, 0xC554, 0xC555, 0xC556, 0xC557, 0xC558, 0xC559, /* 0x10 */
+ 0xC55A, 0xC55B, 0xC55C, 0xC55D, 0xC561, 0xC562, 0xC563, 0xC564, /* 0x10 */
+ 0xC565, 0xC566, 0xC567, 0xC568, 0xC569, 0xC56A, 0xC56B, 0xC56C, /* 0x20 */
+ 0xC56D, 0xC56E, 0xC56F, 0xC570, 0xC571, 0xC573, 0xC574, 0xC575, /* 0x20 */
+ 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC57B, 0xC57C, 0xC57D, /* 0x30 */
+ 0xC581, 0xC582, 0xC583, 0xC584, 0xC585, 0xC586, 0xC587, 0xC588, /* 0x30 */
+ 0xC589, 0xC58A, 0xC58B, 0xC58C, 0xC58D, 0xC58E, 0xC58F, 0xC590, /* 0x40 */
+ 0xC591, 0xC593, 0xC594, 0xC595, 0xC596, 0xC597, 0xC598, 0xC599, /* 0x40 */
+ 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC5A1, 0xC5A2, 0xC5A3, 0xC5A4, /* 0x50 */
+ 0xC5A5, 0xC5A6, 0xC5A7, 0xC5A8, 0xC5A9, 0xC5AA, 0xC5AB, 0xC5AC, /* 0x50 */
+ 0xC5AD, 0xC5AE, 0xC5AF, 0xC5B0, 0xC5B1, 0xC5B3, 0xC5B4, 0xC5B5, /* 0x60 */
+ 0xC5B6, 0xC5B7, 0xC5B8, 0xC5B9, 0xC5BA, 0xC5BB, 0xC5BC, 0xC5BD, /* 0x60 */
+ 0xC5C1, 0xC5C2, 0xC5C3, 0xC5C4, 0xC5C5, 0xC5C6, 0xC5C7, 0xC5C8, /* 0x70 */
+ 0xC5C9, 0xC5CA, 0xC5CB, 0xC5CC, 0xC5CD, 0xC5CE, 0xC5CF, 0xC5D0, /* 0x70 */
+ 0xC5D1, 0xC5D3, 0xC5D4, 0xC5D5, 0xC5D6, 0xC5D7, 0xC5D8, 0xC5D9, /* 0x80 */
+ 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5E1, 0xC5E2, 0xC5E3, 0xC5E4, /* 0x80 */
+ 0xC5E5, 0xC5E6, 0xC5E7, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0xC5EC, /* 0x90 */
+ 0xC5ED, 0xC5EE, 0xC5EF, 0xC5F0, 0xC5F1, 0xC5F3, 0xC5F4, 0xC5F5, /* 0x90 */
+ 0xC5F6, 0xC5F7, 0xC5F8, 0xC5F9, 0xC5FA, 0xC5FB, 0xC5FC, 0xC5FD, /* 0xA0 */
+ 0xC641, 0xC642, 0xC643, 0xC644, 0xC645, 0xC646, 0xC647, 0xC648, /* 0xA0 */
+ 0xC649, 0xC64A, 0xC64B, 0xC64C, 0xC64D, 0xC64E, 0xC64F, 0xC650, /* 0xB0 */
+ 0xC651, 0xC653, 0xC654, 0xC655, 0xC656, 0xC657, 0xC658, 0xC659, /* 0xB0 */
+ 0xC65A, 0xC65B, 0xC65C, 0xC65D, 0xC661, 0xC662, 0xC663, 0xC664, /* 0xC0 */
+ 0xC665, 0xC666, 0xC667, 0xC668, 0xC669, 0xC66A, 0xC66B, 0xC66C, /* 0xC0 */
+ 0xC66D, 0xC66E, 0xC66F, 0xC670, 0xC671, 0xC673, 0xC674, 0xC675, /* 0xD0 */
+ 0xC676, 0xC677, 0xC678, 0xC679, 0xC67A, 0xC67B, 0xC67C, 0xC67D, /* 0xD0 */
+ 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, 0xC686, 0xC687, 0xC688, /* 0xE0 */
+ 0xC689, 0xC68A, 0xC68B, 0xC68C, 0xC68D, 0xC68E, 0xC68F, 0xC690, /* 0xE0 */
+ 0xC691, 0xC693, 0xC694, 0xC695, 0xC696, 0xC697, 0xC698, 0xC699, /* 0xF0 */
+ 0xC69A, 0xC69B, 0xC69C, 0xC69D, 0xC6A1, 0xC6A2, 0xC6A3, 0xC6A4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_D0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6A5, 0xC6A6, 0xC6A7, 0xC6A8, 0xC6A9, 0xC6AA, 0xC6AB, 0xC6AC, /* 0x00 */
+ 0xC6AD, 0xC6AE, 0xC6AF, 0xC6B0, 0xC6B1, 0xC6B3, 0xC6B4, 0xC6B5, /* 0x00 */
+ 0xC6B6, 0xC6B7, 0xC6B8, 0xC6B9, 0xC6BA, 0xC6BB, 0xC6BC, 0xC6BD, /* 0x10 */
+ 0xC6C1, 0xC6C2, 0xC6C3, 0xC6C4, 0xC6C5, 0xC6C6, 0xC6C7, 0xC6C8, /* 0x10 */
+ 0xC6C9, 0xC6CA, 0xC6CB, 0xC6CC, 0xC6CD, 0xC6CE, 0xC6CF, 0xC6D0, /* 0x20 */
+ 0xC6D1, 0xC6D3, 0xC6D4, 0xC6D5, 0xC6D6, 0xC6D7, 0xC6D8, 0xC6D9, /* 0x20 */
+ 0xC6DA, 0xC6DB, 0xC6DC, 0xC6DD, 0xC6E1, 0xC6E2, 0xC6E3, 0xC6E4, /* 0x30 */
+ 0xC6E5, 0xC6E6, 0xC6E7, 0xC6E8, 0xC6E9, 0xC6EA, 0xC6EB, 0xC6EC, /* 0x30 */
+ 0xC6ED, 0xC6EE, 0xC6EF, 0xC6F0, 0xC6F1, 0xC6F3, 0xC6F4, 0xC6F5, /* 0x40 */
+ 0xC6F6, 0xC6F7, 0xC6F8, 0xC6F9, 0xC6FA, 0xC6FB, 0xC6FC, 0xC6FD, /* 0x40 */
+ 0xC741, 0xC742, 0xC743, 0xC744, 0xC745, 0xC746, 0xC747, 0xC748, /* 0x50 */
+ 0xC749, 0xC74A, 0xC74B, 0xC74C, 0xC74D, 0xC74E, 0xC74F, 0xC750, /* 0x50 */
+ 0xC751, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, 0xC759, /* 0x60 */
+ 0xC75A, 0xC75B, 0xC75C, 0xC75D, 0xC761, 0xC762, 0xC763, 0xC764, /* 0x60 */
+ 0xC765, 0xC766, 0xC767, 0xC768, 0xC769, 0xC76A, 0xC76B, 0xC76C, /* 0x70 */
+ 0xC76D, 0xC76E, 0xC76F, 0xC770, 0xC771, 0xC773, 0xC774, 0xC775, /* 0x70 */
+ 0xC776, 0xC777, 0xC778, 0xC779, 0xC77A, 0xC77B, 0xC77C, 0xC77D, /* 0x80 */
+ 0xC781, 0xC782, 0xC783, 0xC784, 0xC785, 0xC786, 0xC787, 0xC788, /* 0x80 */
+ 0xC789, 0xC78A, 0xC78B, 0xC78C, 0xC78D, 0xC78E, 0xC78F, 0xC790, /* 0x90 */
+ 0xC791, 0xC793, 0xC794, 0xC795, 0xC796, 0xC797, 0xC798, 0xC799, /* 0x90 */
+ 0xC79A, 0xC79B, 0xC79C, 0xC79D, 0xC7A1, 0xC7A2, 0xC7A3, 0xC7A4, /* 0xA0 */
+ 0xC7A5, 0xC7A6, 0xC7A7, 0xC7A8, 0xC7A9, 0xC7AA, 0xC7AB, 0xC7AC, /* 0xA0 */
+ 0xC7AD, 0xC7AE, 0xC7AF, 0xC7B0, 0xC7B1, 0xC7B3, 0xC7B4, 0xC7B5, /* 0xB0 */
+ 0xC7B6, 0xC7B7, 0xC7B8, 0xC7B9, 0xC7BA, 0xC7BB, 0xC7BC, 0xC7BD, /* 0xB0 */
+ 0xC861, 0xC862, 0xC863, 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, /* 0xC0 */
+ 0xC869, 0xC86A, 0xC86B, 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0xC870, /* 0xC0 */
+ 0xC871, 0xC873, 0xC874, 0xC875, 0xC876, 0xC877, 0xC878, 0xC879, /* 0xD0 */
+ 0xC87A, 0xC87B, 0xC87C, 0xC87D, 0xC881, 0xC882, 0xC883, 0xC884, /* 0xD0 */
+ 0xC885, 0xC886, 0xC887, 0xC888, 0xC889, 0xC88A, 0xC88B, 0xC88C, /* 0xE0 */
+ 0xC88D, 0xC88E, 0xC88F, 0xC890, 0xC891, 0xC893, 0xC894, 0xC895, /* 0xE0 */
+ 0xC896, 0xC897, 0xC898, 0xC899, 0xC89A, 0xC89B, 0xC89C, 0xC89D, /* 0xF0 */
+ 0xC8A1, 0xC8A2, 0xC8A3, 0xC8A4, 0xC8A5, 0xC8A6, 0xC8A7, 0xC8A8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_D1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, 0xC8AD, 0xC8AE, 0xC8AF, 0xC8B0, /* 0x00 */
+ 0xC8B1, 0xC8B3, 0xC8B4, 0xC8B5, 0xC8B6, 0xC8B7, 0xC8B8, 0xC8B9, /* 0x00 */
+ 0xC8BA, 0xC8BB, 0xC8BC, 0xC8BD, 0xC8C1, 0xC8C2, 0xC8C3, 0xC8C4, /* 0x10 */
+ 0xC8C5, 0xC8C6, 0xC8C7, 0xC8C8, 0xC8C9, 0xC8CA, 0xC8CB, 0xC8CC, /* 0x10 */
+ 0xC8CD, 0xC8CE, 0xC8CF, 0xC8D0, 0xC8D1, 0xC8D3, 0xC8D4, 0xC8D5, /* 0x20 */
+ 0xC8D6, 0xC8D7, 0xC8D8, 0xC8D9, 0xC8DA, 0xC8DB, 0xC8DC, 0xC8DD, /* 0x20 */
+ 0xC8E1, 0xC8E2, 0xC8E3, 0xC8E4, 0xC8E5, 0xC8E6, 0xC8E7, 0xC8E8, /* 0x30 */
+ 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC, 0xC8ED, 0xC8EE, 0xC8EF, 0xC8F0, /* 0x30 */
+ 0xC8F1, 0xC8F3, 0xC8F4, 0xC8F5, 0xC8F6, 0xC8F7, 0xC8F8, 0xC8F9, /* 0x40 */
+ 0xC8FA, 0xC8FB, 0xC8FC, 0xC8FD, 0xC941, 0xC942, 0xC943, 0xC944, /* 0x40 */
+ 0xC945, 0xC946, 0xC947, 0xC948, 0xC949, 0xC94A, 0xC94B, 0xC94C, /* 0x50 */
+ 0xC94D, 0xC94E, 0xC94F, 0xC950, 0xC951, 0xC953, 0xC954, 0xC955, /* 0x50 */
+ 0xC956, 0xC957, 0xC958, 0xC959, 0xC95A, 0xC95B, 0xC95C, 0xC95D, /* 0x60 */
+ 0xC961, 0xC962, 0xC963, 0xC964, 0xC965, 0xC966, 0xC967, 0xC968, /* 0x60 */
+ 0xC969, 0xC96A, 0xC96B, 0xC96C, 0xC96D, 0xC96E, 0xC96F, 0xC970, /* 0x70 */
+ 0xC971, 0xC973, 0xC974, 0xC975, 0xC976, 0xC977, 0xC978, 0xC979, /* 0x70 */
+ 0xC97A, 0xC97B, 0xC97C, 0xC97D, 0xC981, 0xC982, 0xC983, 0xC984, /* 0x80 */
+ 0xC985, 0xC986, 0xC987, 0xC988, 0xC989, 0xC98A, 0xC98B, 0xC98C, /* 0x80 */
+ 0xC98D, 0xC98E, 0xC98F, 0xC990, 0xC991, 0xC993, 0xC994, 0xC995, /* 0x90 */
+ 0xC996, 0xC997, 0xC998, 0xC999, 0xC99A, 0xC99B, 0xC99C, 0xC99D, /* 0x90 */
+ 0xC9A1, 0xC9A2, 0xC9A3, 0xC9A4, 0xC9A5, 0xC9A6, 0xC9A7, 0xC9A8, /* 0xA0 */
+ 0xC9A9, 0xC9AA, 0xC9AB, 0xC9AC, 0xC9AD, 0xC9AE, 0xC9AF, 0xC9B0, /* 0xA0 */
+ 0xC9B1, 0xC9B3, 0xC9B4, 0xC9B5, 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, /* 0xB0 */
+ 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD, 0xC9C1, 0xC9C2, 0xC9C3, 0xC9C4, /* 0xB0 */
+ 0xC9C5, 0xC9C6, 0xC9C7, 0xC9C8, 0xC9C9, 0xC9CA, 0xC9CB, 0xC9CC, /* 0xC0 */
+ 0xC9CD, 0xC9CE, 0xC9CF, 0xC9D0, 0xC9D1, 0xC9D3, 0xC9D4, 0xC9D5, /* 0xC0 */
+ 0xC9D6, 0xC9D7, 0xC9D8, 0xC9D9, 0xC9DA, 0xC9DB, 0xC9DC, 0xC9DD, /* 0xD0 */
+ 0xC9E1, 0xC9E2, 0xC9E3, 0xC9E4, 0xC9E5, 0xC9E6, 0xC9E7, 0xC9E8, /* 0xD0 */
+ 0xC9E9, 0xC9EA, 0xC9EB, 0xC9EC, 0xC9ED, 0xC9EE, 0xC9EF, 0xC9F0, /* 0xE0 */
+ 0xC9F1, 0xC9F3, 0xC9F4, 0xC9F5, 0xC9F6, 0xC9F7, 0xC9F8, 0xC9F9, /* 0xE0 */
+ 0xC9FA, 0xC9FB, 0xC9FC, 0xC9FD, 0xCA41, 0xCA42, 0xCA43, 0xCA44, /* 0xF0 */
+ 0xCA45, 0xCA46, 0xCA47, 0xCA48, 0xCA49, 0xCA4A, 0xCA4B, 0xCA4C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_D2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCA4D, 0xCA4E, 0xCA4F, 0xCA50, 0xCA51, 0xCA53, 0xCA54, 0xCA55, /* 0x00 */
+ 0xCA56, 0xCA57, 0xCA58, 0xCA59, 0xCA5A, 0xCA5B, 0xCA5C, 0xCA5D, /* 0x00 */
+ 0xCA61, 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, 0xCA67, 0xCA68, /* 0x10 */
+ 0xCA69, 0xCA6A, 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, 0xCA6F, 0xCA70, /* 0x10 */
+ 0xCA71, 0xCA73, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, 0xCA79, /* 0x20 */
+ 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7D, 0xCA81, 0xCA82, 0xCA83, 0xCA84, /* 0x20 */
+ 0xCA85, 0xCA86, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xCA8B, 0xCA8C, /* 0x30 */
+ 0xCA8D, 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA93, 0xCA94, 0xCA95, /* 0x30 */
+ 0xCA96, 0xCA97, 0xCA98, 0xCA99, 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, /* 0x40 */
+ 0xCAA1, 0xCAA2, 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6, 0xCAA7, 0xCAA8, /* 0x40 */
+ 0xCAA9, 0xCAAA, 0xCAAB, 0xCAAC, 0xCAAD, 0xCAAE, 0xCAAF, 0xCAB0, /* 0x50 */
+ 0xCAB1, 0xCAB3, 0xCAB4, 0xCAB5, 0xCAB6, 0xCAB7, 0xCAB8, 0xCAB9, /* 0x50 */
+ 0xCABA, 0xCABB, 0xCABC, 0xCABD, 0xCAC1, 0xCAC2, 0xCAC3, 0xCAC4, /* 0x60 */
+ 0xCAC5, 0xCAC6, 0xCAC7, 0xCAC8, 0xCAC9, 0xCACA, 0xCACB, 0xCACC, /* 0x60 */
+ 0xCACD, 0xCACE, 0xCACF, 0xCAD0, 0xCAD1, 0xCAD3, 0xCAD4, 0xCAD5, /* 0x70 */
+ 0xCAD6, 0xCAD7, 0xCAD8, 0xCAD9, 0xCADA, 0xCADB, 0xCADC, 0xCADD, /* 0x70 */
+ 0xCAE1, 0xCAE2, 0xCAE3, 0xCAE4, 0xCAE5, 0xCAE6, 0xCAE7, 0xCAE8, /* 0x80 */
+ 0xCAE9, 0xCAEA, 0xCAEB, 0xCAEC, 0xCAED, 0xCAEE, 0xCAEF, 0xCAF0, /* 0x80 */
+ 0xCAF1, 0xCAF3, 0xCAF4, 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8, 0xCAF9, /* 0x90 */
+ 0xCAFA, 0xCAFB, 0xCAFC, 0xCAFD, 0xCB41, 0xCB42, 0xCB43, 0xCB44, /* 0x90 */
+ 0xCB45, 0xCB46, 0xCB47, 0xCB48, 0xCB49, 0xCB4A, 0xCB4B, 0xCB4C, /* 0xA0 */
+ 0xCB4D, 0xCB4E, 0xCB4F, 0xCB50, 0xCB51, 0xCB53, 0xCB54, 0xCB55, /* 0xA0 */
+ 0xCB56, 0xCB57, 0xCB58, 0xCB59, 0xCB5A, 0xCB5B, 0xCB5C, 0xCB5D, /* 0xB0 */
+ 0xCB61, 0xCB62, 0xCB63, 0xCB64, 0xCB65, 0xCB66, 0xCB67, 0xCB68, /* 0xB0 */
+ 0xCB69, 0xCB6A, 0xCB6B, 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, /* 0xC0 */
+ 0xCB71, 0xCB73, 0xCB74, 0xCB75, 0xCB76, 0xCB77, 0xCB78, 0xCB79, /* 0xC0 */
+ 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D, 0xCB81, 0xCB82, 0xCB83, 0xCB84, /* 0xD0 */
+ 0xCB85, 0xCB86, 0xCB87, 0xCB88, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, /* 0xD0 */
+ 0xCB8D, 0xCB8E, 0xCB8F, 0xCB90, 0xCB91, 0xCB93, 0xCB94, 0xCB95, /* 0xE0 */
+ 0xCB96, 0xCB97, 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9C, 0xCB9D, /* 0xE0 */
+ 0xCBA1, 0xCBA2, 0xCBA3, 0xCBA4, 0xCBA5, 0xCBA6, 0xCBA7, 0xCBA8, /* 0xF0 */
+ 0xCBA9, 0xCBAA, 0xCBAB, 0xCBAC, 0xCBAD, 0xCBAE, 0xCBAF, 0xCBB0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_D3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCBB1, 0xCBB3, 0xCBB4, 0xCBB5, 0xCBB6, 0xCBB7, 0xCBB8, 0xCBB9, /* 0x00 */
+ 0xCBBA, 0xCBBB, 0xCBBC, 0xCBBD, 0xCC61, 0xCC62, 0xCC63, 0xCC64, /* 0x00 */
+ 0xCC65, 0xCC66, 0xCC67, 0xCC68, 0xCC69, 0xCC6A, 0xCC6B, 0xCC6C, /* 0x10 */
+ 0xCC6D, 0xCC6E, 0xCC6F, 0xCC70, 0xCC71, 0xCC73, 0xCC74, 0xCC75, /* 0x10 */
+ 0xCC76, 0xCC77, 0xCC78, 0xCC79, 0xCC7A, 0xCC7B, 0xCC7C, 0xCC7D, /* 0x20 */
+ 0xCC81, 0xCC82, 0xCC83, 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88, /* 0x20 */
+ 0xCC89, 0xCC8A, 0xCC8B, 0xCC8C, 0xCC8D, 0xCC8E, 0xCC8F, 0xCC90, /* 0x30 */
+ 0xCC91, 0xCC93, 0xCC94, 0xCC95, 0xCC96, 0xCC97, 0xCC98, 0xCC99, /* 0x30 */
+ 0xCC9A, 0xCC9B, 0xCC9C, 0xCC9D, 0xCCA1, 0xCCA2, 0xCCA3, 0xCCA4, /* 0x40 */
+ 0xCCA5, 0xCCA6, 0xCCA7, 0xCCA8, 0xCCA9, 0xCCAA, 0xCCAB, 0xCCAC, /* 0x40 */
+ 0xCCAD, 0xCCAE, 0xCCAF, 0xCCB0, 0xCCB1, 0xCCB3, 0xCCB4, 0xCCB5, /* 0x50 */
+ 0xCCB6, 0xCCB7, 0xCCB8, 0xCCB9, 0xCCBA, 0xCCBB, 0xCCBC, 0xCCBD, /* 0x50 */
+ 0xCCC1, 0xCCC2, 0xCCC3, 0xCCC4, 0xCCC5, 0xCCC6, 0xCCC7, 0xCCC8, /* 0x60 */
+ 0xCCC9, 0xCCCA, 0xCCCB, 0xCCCC, 0xCCCD, 0xCCCE, 0xCCCF, 0xCCD0, /* 0x60 */
+ 0xCCD1, 0xCCD3, 0xCCD4, 0xCCD5, 0xCCD6, 0xCCD7, 0xCCD8, 0xCCD9, /* 0x70 */
+ 0xCCDA, 0xCCDB, 0xCCDC, 0xCCDD, 0xCCE1, 0xCCE2, 0xCCE3, 0xCCE4, /* 0x70 */
+ 0xCCE5, 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA, 0xCCEB, 0xCCEC, /* 0x80 */
+ 0xCCED, 0xCCEE, 0xCCEF, 0xCCF0, 0xCCF1, 0xCCF3, 0xCCF4, 0xCCF5, /* 0x80 */
+ 0xCCF6, 0xCCF7, 0xCCF8, 0xCCF9, 0xCCFA, 0xCCFB, 0xCCFC, 0xCCFD, /* 0x90 */
+ 0xCD41, 0xCD42, 0xCD43, 0xCD44, 0xCD45, 0xCD46, 0xCD47, 0xCD48, /* 0x90 */
+ 0xCD49, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, 0xCD4F, 0xCD50, /* 0xA0 */
+ 0xCD51, 0xCD53, 0xCD54, 0xCD55, 0xCD56, 0xCD57, 0xCD58, 0xCD59, /* 0xA0 */
+ 0xCD5A, 0xCD5B, 0xCD5C, 0xCD5D, 0xCD61, 0xCD62, 0xCD63, 0xCD64, /* 0xB0 */
+ 0xCD65, 0xCD66, 0xCD67, 0xCD68, 0xCD69, 0xCD6A, 0xCD6B, 0xCD6C, /* 0xB0 */
+ 0xCD6D, 0xCD6E, 0xCD6F, 0xCD70, 0xCD71, 0xCD73, 0xCD74, 0xCD75, /* 0xC0 */
+ 0xCD76, 0xCD77, 0xCD78, 0xCD79, 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, /* 0xC0 */
+ 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xCD85, 0xCD86, 0xCD87, 0xCD88, /* 0xD0 */
+ 0xCD89, 0xCD8A, 0xCD8B, 0xCD8C, 0xCD8D, 0xCD8E, 0xCD8F, 0xCD90, /* 0xD0 */
+ 0xCD91, 0xCD93, 0xCD94, 0xCD95, 0xCD96, 0xCD97, 0xCD98, 0xCD99, /* 0xE0 */
+ 0xCD9A, 0xCD9B, 0xCD9C, 0xCD9D, 0xCDA1, 0xCDA2, 0xCDA3, 0xCDA4, /* 0xE0 */
+ 0xCDA5, 0xCDA6, 0xCDA7, 0xCDA8, 0xCDA9, 0xCDAA, 0xCDAB, 0xCDAC, /* 0xF0 */
+ 0xCDAD, 0xCDAE, 0xCDAF, 0xCDB0, 0xCDB1, 0xCDB3, 0xCDB4, 0xCDB5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_D4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDB6, 0xCDB7, 0xCDB8, 0xCDB9, 0xCDBA, 0xCDBB, 0xCDBC, 0xCDBD, /* 0x00 */
+ 0xCDC1, 0xCDC2, 0xCDC3, 0xCDC4, 0xCDC5, 0xCDC6, 0xCDC7, 0xCDC8, /* 0x00 */
+ 0xCDC9, 0xCDCA, 0xCDCB, 0xCDCC, 0xCDCD, 0xCDCE, 0xCDCF, 0xCDD0, /* 0x10 */
+ 0xCDD1, 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6, 0xCDD7, 0xCDD8, 0xCDD9, /* 0x10 */
+ 0xCDDA, 0xCDDB, 0xCDDC, 0xCDDD, 0xCDE1, 0xCDE2, 0xCDE3, 0xCDE4, /* 0x20 */
+ 0xCDE5, 0xCDE6, 0xCDE7, 0xCDE8, 0xCDE9, 0xCDEA, 0xCDEB, 0xCDEC, /* 0x20 */
+ 0xCDED, 0xCDEE, 0xCDEF, 0xCDF0, 0xCDF1, 0xCDF3, 0xCDF4, 0xCDF5, /* 0x30 */
+ 0xCDF6, 0xCDF7, 0xCDF8, 0xCDF9, 0xCDFA, 0xCDFB, 0xCDFC, 0xCDFD, /* 0x30 */
+ 0xCE41, 0xCE42, 0xCE43, 0xCE44, 0xCE45, 0xCE46, 0xCE47, 0xCE48, /* 0x40 */
+ 0xCE49, 0xCE4A, 0xCE4B, 0xCE4C, 0xCE4D, 0xCE4E, 0xCE4F, 0xCE50, /* 0x40 */
+ 0xCE51, 0xCE53, 0xCE54, 0xCE55, 0xCE56, 0xCE57, 0xCE58, 0xCE59, /* 0x50 */
+ 0xCE5A, 0xCE5B, 0xCE5C, 0xCE5D, 0xCE61, 0xCE62, 0xCE63, 0xCE64, /* 0x50 */
+ 0xCE65, 0xCE66, 0xCE67, 0xCE68, 0xCE69, 0xCE6A, 0xCE6B, 0xCE6C, /* 0x60 */
+ 0xCE6D, 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE73, 0xCE74, 0xCE75, /* 0x60 */
+ 0xCE76, 0xCE77, 0xCE78, 0xCE79, 0xCE7A, 0xCE7B, 0xCE7C, 0xCE7D, /* 0x70 */
+ 0xCE81, 0xCE82, 0xCE83, 0xCE84, 0xCE85, 0xCE86, 0xCE87, 0xCE88, /* 0x70 */
+ 0xCE89, 0xCE8A, 0xCE8B, 0xCE8C, 0xCE8D, 0xCE8E, 0xCE8F, 0xCE90, /* 0x80 */
+ 0xCE91, 0xCE93, 0xCE94, 0xCE95, 0xCE96, 0xCE97, 0xCE98, 0xCE99, /* 0x80 */
+ 0xCE9A, 0xCE9B, 0xCE9C, 0xCE9D, 0xCEA1, 0xCEA2, 0xCEA3, 0xCEA4, /* 0x90 */
+ 0xCEA5, 0xCEA6, 0xCEA7, 0xCEA8, 0xCEA9, 0xCEAA, 0xCEAB, 0xCEAC, /* 0x90 */
+ 0xCEAD, 0xCEAE, 0xCEAF, 0xCEB0, 0xCEB1, 0xCEB3, 0xCEB4, 0xCEB5, /* 0xA0 */
+ 0xCEB6, 0xCEB7, 0xCEB8, 0xCEB9, 0xCEBA, 0xCEBB, 0xCEBC, 0xCEBD, /* 0xA0 */
+ 0xCEC1, 0xCEC2, 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6, 0xCEC7, 0xCEC8, /* 0xB0 */
+ 0xCEC9, 0xCECA, 0xCECB, 0xCECC, 0xCECD, 0xCECE, 0xCECF, 0xCED0, /* 0xB0 */
+ 0xCED1, 0xCED3, 0xCED4, 0xCED5, 0xCED6, 0xCED7, 0xCED8, 0xCED9, /* 0xC0 */
+ 0xCEDA, 0xCEDB, 0xCEDC, 0xCEDD, 0xCEE1, 0xCEE2, 0xCEE3, 0xCEE4, /* 0xC0 */
+ 0xCEE5, 0xCEE6, 0xCEE7, 0xCEE8, 0xCEE9, 0xCEEA, 0xCEEB, 0xCEEC, /* 0xD0 */
+ 0xCEED, 0xCEEE, 0xCEEF, 0xCEF0, 0xCEF1, 0xCEF3, 0xCEF4, 0xCEF5, /* 0xD0 */
+ 0xCEF6, 0xCEF7, 0xCEF8, 0xCEF9, 0xCEFA, 0xCEFB, 0xCEFC, 0xCEFD, /* 0xE0 */
+ 0xCF41, 0xCF42, 0xCF43, 0xCF44, 0xCF45, 0xCF46, 0xCF47, 0xCF48, /* 0xE0 */
+ 0xCF49, 0xCF4A, 0xCF4B, 0xCF4C, 0xCF4D, 0xCF4E, 0xCF4F, 0xCF50, /* 0xF0 */
+ 0xCF51, 0xCF53, 0xCF54, 0xCF55, 0xCF56, 0xCF57, 0xCF58, 0xCF59 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_D5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCF5A, 0xCF5B, 0xCF5C, 0xCF5D, 0xCF61, 0xCF62, 0xCF63, 0xCF64, /* 0x00 */
+ 0xCF65, 0xCF66, 0xCF67, 0xCF68, 0xCF69, 0xCF6A, 0xCF6B, 0xCF6C, /* 0x00 */
+ 0xCF6D, 0xCF6E, 0xCF6F, 0xCF70, 0xCF71, 0xCF73, 0xCF74, 0xCF75, /* 0x10 */
+ 0xCF76, 0xCF77, 0xCF78, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, /* 0x10 */
+ 0xCF81, 0xCF82, 0xCF83, 0xCF84, 0xCF85, 0xCF86, 0xCF87, 0xCF88, /* 0x20 */
+ 0xCF89, 0xCF8A, 0xCF8B, 0xCF8C, 0xCF8D, 0xCF8E, 0xCF8F, 0xCF90, /* 0x20 */
+ 0xCF91, 0xCF93, 0xCF94, 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, /* 0x30 */
+ 0xCF9A, 0xCF9B, 0xCF9C, 0xCF9D, 0xCFA1, 0xCFA2, 0xCFA3, 0xCFA4, /* 0x30 */
+ 0xCFA5, 0xCFA6, 0xCFA7, 0xCFA8, 0xCFA9, 0xCFAA, 0xCFAB, 0xCFAC, /* 0x40 */
+ 0xCFAD, 0xCFAE, 0xCFAF, 0xCFB0, 0xCFB1, 0xCFB3, 0xCFB4, 0xCFB5, /* 0x40 */
+ 0xCFB6, 0xCFB7, 0xCFB8, 0xCFB9, 0xCFBA, 0xCFBB, 0xCFBC, 0xCFBD, /* 0x50 */
+ 0xD061, 0xD062, 0xD063, 0xD064, 0xD065, 0xD066, 0xD067, 0xD068, /* 0x50 */
+ 0xD069, 0xD06A, 0xD06B, 0xD06C, 0xD06D, 0xD06E, 0xD06F, 0xD070, /* 0x60 */
+ 0xD071, 0xD073, 0xD074, 0xD075, 0xD076, 0xD077, 0xD078, 0xD079, /* 0x60 */
+ 0xD07A, 0xD07B, 0xD07C, 0xD07D, 0xD081, 0xD082, 0xD083, 0xD084, /* 0x70 */
+ 0xD085, 0xD086, 0xD087, 0xD088, 0xD089, 0xD08A, 0xD08B, 0xD08C, /* 0x70 */
+ 0xD08D, 0xD08E, 0xD08F, 0xD090, 0xD091, 0xD093, 0xD094, 0xD095, /* 0x80 */
+ 0xD096, 0xD097, 0xD098, 0xD099, 0xD09A, 0xD09B, 0xD09C, 0xD09D, /* 0x80 */
+ 0xD0A1, 0xD0A2, 0xD0A3, 0xD0A4, 0xD0A5, 0xD0A6, 0xD0A7, 0xD0A8, /* 0x90 */
+ 0xD0A9, 0xD0AA, 0xD0AB, 0xD0AC, 0xD0AD, 0xD0AE, 0xD0AF, 0xD0B0, /* 0x90 */
+ 0xD0B1, 0xD0B3, 0xD0B4, 0xD0B5, 0xD0B6, 0xD0B7, 0xD0B8, 0xD0B9, /* 0xA0 */
+ 0xD0BA, 0xD0BB, 0xD0BC, 0xD0BD, 0xD0C1, 0xD0C2, 0xD0C3, 0xD0C4, /* 0xA0 */
+ 0xD0C5, 0xD0C6, 0xD0C7, 0xD0C8, 0xD0C9, 0xD0CA, 0xD0CB, 0xD0CC, /* 0xB0 */
+ 0xD0CD, 0xD0CE, 0xD0CF, 0xD0D0, 0xD0D1, 0xD0D3, 0xD0D4, 0xD0D5, /* 0xB0 */
+ 0xD0D6, 0xD0D7, 0xD0D8, 0xD0D9, 0xD0DA, 0xD0DB, 0xD0DC, 0xD0DD, /* 0xC0 */
+ 0xD0E1, 0xD0E2, 0xD0E3, 0xD0E4, 0xD0E5, 0xD0E6, 0xD0E7, 0xD0E8, /* 0xC0 */
+ 0xD0E9, 0xD0EA, 0xD0EB, 0xD0EC, 0xD0ED, 0xD0EE, 0xD0EF, 0xD0F0, /* 0xD0 */
+ 0xD0F1, 0xD0F3, 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0xD0F8, 0xD0F9, /* 0xD0 */
+ 0xD0FA, 0xD0FB, 0xD0FC, 0xD0FD, 0xD141, 0xD142, 0xD143, 0xD144, /* 0xE0 */
+ 0xD145, 0xD146, 0xD147, 0xD148, 0xD149, 0xD14A, 0xD14B, 0xD14C, /* 0xE0 */
+ 0xD14D, 0xD14E, 0xD14F, 0xD150, 0xD151, 0xD153, 0xD154, 0xD155, /* 0xF0 */
+ 0xD156, 0xD157, 0xD158, 0xD159, 0xD15A, 0xD15B, 0xD15C, 0xD15D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_D6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD161, 0xD162, 0xD163, 0xD164, 0xD165, 0xD166, 0xD167, 0xD168, /* 0x00 */
+ 0xD169, 0xD16A, 0xD16B, 0xD16C, 0xD16D, 0xD16E, 0xD16F, 0xD170, /* 0x00 */
+ 0xD171, 0xD173, 0xD174, 0xD175, 0xD176, 0xD177, 0xD178, 0xD179, /* 0x10 */
+ 0xD17A, 0xD17B, 0xD17C, 0xD17D, 0xD181, 0xD182, 0xD183, 0xD184, /* 0x10 */
+ 0xD185, 0xD186, 0xD187, 0xD188, 0xD189, 0xD18A, 0xD18B, 0xD18C, /* 0x20 */
+ 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xD191, 0xD193, 0xD194, 0xD195, /* 0x20 */
+ 0xD196, 0xD197, 0xD198, 0xD199, 0xD19A, 0xD19B, 0xD19C, 0xD19D, /* 0x30 */
+ 0xD1A1, 0xD1A2, 0xD1A3, 0xD1A4, 0xD1A5, 0xD1A6, 0xD1A7, 0xD1A8, /* 0x30 */
+ 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, 0xD1AF, 0xD1B0, /* 0x40 */
+ 0xD1B1, 0xD1B3, 0xD1B4, 0xD1B5, 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, /* 0x40 */
+ 0xD1BA, 0xD1BB, 0xD1BC, 0xD1BD, 0xD1C1, 0xD1C2, 0xD1C3, 0xD1C4, /* 0x50 */
+ 0xD1C5, 0xD1C6, 0xD1C7, 0xD1C8, 0xD1C9, 0xD1CA, 0xD1CB, 0xD1CC, /* 0x50 */
+ 0xD1CD, 0xD1CE, 0xD1CF, 0xD1D0, 0xD1D1, 0xD1D3, 0xD1D4, 0xD1D5, /* 0x60 */
+ 0xD1D6, 0xD1D7, 0xD1D8, 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD, /* 0x60 */
+ 0xD1E1, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6, 0xD1E7, 0xD1E8, /* 0x70 */
+ 0xD1E9, 0xD1EA, 0xD1EB, 0xD1EC, 0xD1ED, 0xD1EE, 0xD1EF, 0xD1F0, /* 0x70 */
+ 0xD1F1, 0xD1F3, 0xD1F4, 0xD1F5, 0xD1F6, 0xD1F7, 0xD1F8, 0xD1F9, /* 0x80 */
+ 0xD1FA, 0xD1FB, 0xD1FC, 0xD1FD, 0xD241, 0xD242, 0xD243, 0xD244, /* 0x80 */
+ 0xD245, 0xD246, 0xD247, 0xD248, 0xD249, 0xD24A, 0xD24B, 0xD24C, /* 0x90 */
+ 0xD24D, 0xD24E, 0xD24F, 0xD250, 0xD251, 0xD253, 0xD254, 0xD255, /* 0x90 */
+ 0xD256, 0xD257, 0xD258, 0xD259, 0xD25A, 0xD25B, 0xD25C, 0xD25D, /* 0xA0 */
+ 0xD261, 0xD262, 0xD263, 0xD264, 0xD265, 0xD266, 0xD267, 0xD268, /* 0xA0 */
+ 0xD269, 0xD26A, 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, 0xD270, /* 0xB0 */
+ 0xD271, 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, 0xD278, 0xD279, /* 0xB0 */
+ 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD281, 0xD282, 0xD283, 0xD284, /* 0xC0 */
+ 0xD285, 0xD286, 0xD287, 0xD288, 0xD289, 0xD28A, 0xD28B, 0xD28C, /* 0xC0 */
+ 0xD28D, 0xD28E, 0xD28F, 0xD290, 0xD291, 0xD293, 0xD294, 0xD295, /* 0xD0 */
+ 0xD296, 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29C, 0xD29D, /* 0xD0 */
+ 0xD2A1, 0xD2A2, 0xD2A3, 0xD2A4, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, /* 0xE0 */
+ 0xD2A9, 0xD2AA, 0xD2AB, 0xD2AC, 0xD2AD, 0xD2AE, 0xD2AF, 0xD2B0, /* 0xE0 */
+ 0xD2B1, 0xD2B3, 0xD2B4, 0xD2B5, 0xD2B6, 0xD2B7, 0xD2B8, 0xD2B9, /* 0xF0 */
+ 0xD2BA, 0xD2BB, 0xD2BC, 0xD2BD, 0xD2C1, 0xD2C2, 0xD2C3, 0xD2C4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_D7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2C5, 0xD2C6, 0xD2C7, 0xD2C8, 0xD2C9, 0xD2CA, 0xD2CB, 0xD2CC, /* 0x00 */
+ 0xD2CD, 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1, 0xD2D3, 0xD2D4, 0xD2D5, /* 0x00 */
+ 0xD2D6, 0xD2D7, 0xD2D8, 0xD2D9, 0xD2DA, 0xD2DB, 0xD2DC, 0xD2DD, /* 0x10 */
+ 0xD2E1, 0xD2E2, 0xD2E3, 0xD2E4, 0xD2E5, 0xD2E6, 0xD2E7, 0xD2E8, /* 0x10 */
+ 0xD2E9, 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, 0xD2EE, 0xD2EF, 0xD2F0, /* 0x20 */
+ 0xD2F1, 0xD2F3, 0xD2F4, 0xD2F5, 0xD2F6, 0xD2F7, 0xD2F8, 0xD2F9, /* 0x20 */
+ 0xD2FA, 0xD2FB, 0xD2FC, 0xD2FD, 0xD341, 0xD342, 0xD343, 0xD344, /* 0x30 */
+ 0xD345, 0xD346, 0xD347, 0xD348, 0xD349, 0xD34A, 0xD34B, 0xD34C, /* 0x30 */
+ 0xD34D, 0xD34E, 0xD34F, 0xD350, 0xD351, 0xD353, 0xD354, 0xD355, /* 0x40 */
+ 0xD356, 0xD357, 0xD358, 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, /* 0x40 */
+ 0xD361, 0xD362, 0xD363, 0xD364, 0xD365, 0xD366, 0xD367, 0xD368, /* 0x50 */
+ 0xD369, 0xD36A, 0xD36B, 0xD36C, 0xD36D, 0xD36E, 0xD36F, 0xD370, /* 0x50 */
+ 0xD371, 0xD373, 0xD374, 0xD375, 0xD376, 0xD377, 0xD378, 0xD379, /* 0x60 */
+ 0xD37A, 0xD37B, 0xD37C, 0xD37D, 0xD381, 0xD382, 0xD383, 0xD384, /* 0x60 */
+ 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, 0xD38A, 0xD38B, 0xD38C, /* 0x70 */
+ 0xD38D, 0xD38E, 0xD38F, 0xD390, 0xD391, 0xD393, 0xD394, 0xD395, /* 0x70 */
+ 0xD396, 0xD397, 0xD398, 0xD399, 0xD39A, 0xD39B, 0xD39C, 0xD39D, /* 0x80 */
+ 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4, 0xD3A5, 0xD3A6, 0xD3A7, 0xD3A8, /* 0x80 */
+ 0xD3A9, 0xD3AA, 0xD3AB, 0xD3AC, 0xD3AD, 0xD3AE, 0xD3AF, 0xD3B0, /* 0x90 */
+ 0xD3B1, 0xD3B3, 0xD3B4, 0xD3B5, 0xD3B6, 0xD3B7, 0xD3B8, 0xD3B9, /* 0x90 */
+ 0xD3BA, 0xD3BB, 0xD3BC, 0xD3BD /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE0D0, 0xE0D6, 0xE0E7, 0xE1CF, 0xE1E8, 0xE23D, 0xE2FB, 0xE332, /* 0x00 */
+ 0xE348, 0xE360, 0xE36D, 0xE3D4, 0xE3D5, 0xE3D8, 0xE3DB, 0xE3DC, /* 0x00 */
+ 0xE3DD, 0xE3DE, 0xE3DF, 0xE3E0, 0xE3E2, 0xE3E3, 0xE3E4, 0xE3E5, /* 0x10 */
+ 0xE3E6, 0xE3E8, 0xE3E9, 0xE3EA, 0xE3EB, 0xE3ED, 0xE3EF, 0xE3F0, /* 0x10 */
+ 0xE3F2, 0xE3F6, 0xE3FA, 0xE3FC, 0xE3FD, 0xE3FE, 0xE432, 0xE433, /* 0x20 */
+ 0xE437, 0xE438, 0xE439, 0xE43A, 0xE43B, 0xE43D, 0xE442, 0xE44E, /* 0x20 */
+ 0xE452, 0xE453, 0xE454, 0xE456, 0xE457, 0xE458, 0xE459, 0xE45A, /* 0x30 */
+ 0xE45B, 0xE45D, 0xE45E, 0xE45F, 0xE460, 0xE461, 0xE462, 0xE463, /* 0x30 */
+ 0xE464, 0xE465, 0xE466, 0xE467, 0xE469, 0xE46A, 0xE46E, 0xE46F, /* 0x40 */
+ 0xE471, 0xE472, 0xE474, 0xE475, 0xE476, 0xE477, 0xE478, 0xE479, /* 0x40 */
+ 0xE47A, 0xE47B, 0xE492, 0xE493, 0xE494, 0xE495, 0xE496, 0xE497, /* 0x50 */
+ 0xE499, 0xE49A, 0xE576, 0xE59E, 0xE5A5, 0xE5AB, 0xE5AE, 0xE648, /* 0x50 */
+ 0xE65D, 0xE6CB, 0xE6E4, 0xE8C5, 0xE8E4, 0xE935, 0xE9A5, 0xE9D5, /* 0x60 */
+ 0xE9F4, 0xEA9E, 0xEAA0, 0xEAB3, 0xEAE1, 0xEAE8, 0xEB93, 0xEBAD, /* 0x60 */
+ 0xEBED, 0xECF5, 0xED31, 0xED39, 0xEDAE, 0xEDB1, 0xEDB2, 0xEDB9, /* 0x70 */
+ 0xEDBB, 0xEDBC, 0xEDC4, 0xEDCE, 0xEDD0, 0xEDD2, 0xEDD6, 0xEDFA, /* 0x70 */
+ 0xEDFB, 0xEDFC, 0xEDFE, 0xEE31, 0xEE34, 0xEE37, 0xEE3D, 0xEE3F, /* 0x80 */
+ 0xEE40, 0xEE41, 0xEE43, 0xEE47, 0xEE48, 0xEE4C, 0xEE54, 0xEE56, /* 0x80 */
+ 0xEE57, 0xEE5A, 0xEE62, 0xEE66, 0xEE69, 0xEE6C, 0xEE6F, 0xEE71, /* 0x90 */
+ 0xEE74, 0xEE75, 0xEE76, 0xEE78, 0xEE7A, 0xEE7B, 0xEE7C, 0xEE91, /* 0x90 */
+ 0xEE93, 0xEE94, 0xEE97, 0xEE98, 0xEE99, 0xEE9B, 0xEEA1, 0xEEA6, /* 0xA0 */
+ 0xEEA9, 0xEEAA, 0xEEAC, 0xEEAD, 0xEEB0, 0xEEBF, 0xEEC1, 0xEEC6, /* 0xA0 */
+ 0xEEC7, 0xEECB, 0xEECD, 0xEECF, 0xEED0, 0xEED3, 0xEEDF, 0xEEE4, /* 0xB0 */
+ 0xEEE6, 0xEEF7, 0xEF77, 0xEF78, 0xEF92, 0xEF93, 0xEF99, 0xEF9B, /* 0xB0 */
+ 0xEF9D, 0xEFA0, 0xEFA7, 0xEFAC, 0xEFCC, 0xEFF7, 0xF051, 0xF075, /* 0xC0 */
+ 0xF096, 0xF099, 0xF09E, 0xF0A0, 0xF0A4, 0xF0A7, 0xF0A9, 0xF0AA, /* 0xC0 */
+ 0xF0BA, 0xF0BB, 0xF0BD, 0xF0C1, 0xF0C2, 0xF0C6, 0xF0C7, 0xF0CC, /* 0xD0 */
+ 0xF0CF, 0xF0D0, 0xF0D1, 0xF0D2, 0xF0D8, 0xF136, 0xF137, 0xF13A, /* 0xD0 */
+ 0xF13F, 0xF140, 0xF141, 0xF142, 0xF145, 0xF148, 0xF14A, 0xF150, /* 0xE0 */
+ 0xF151, 0xF155, 0xF156, 0xF159, 0xF15A, 0xF165, 0xF16D, 0xF16E, /* 0xE0 */
+ 0xF171, 0xF174, 0xF177, 0xF178, 0xF199, 0xF19A, 0xF19C, 0xF1A1, /* 0xF0 */
+ 0xF1A2, 0xF1A3, 0xF1EE, 0xF26B, 0xF44D, 0xF49C, 0xF4B1, 0xF537 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_FA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF57E, 0xF696, 0xF698, 0xF6B8, 0xF6C8, 0xF6D3, 0xF76B, 0xF792, /* 0x00 */
+ 0xF831, 0xF832, 0xF876, 0xF939 /* 0x00 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_JOHAB_FF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDA31, 0xDA32, 0xDA33, 0xDA34, 0xDA35, 0xDA36, 0xDA37, /* 0x00 */
+ 0xDA38, 0xDA39, 0xDA3A, 0xDA3B, 0xDA3C, 0xDA3D, 0xDA3E, 0xDA3F, /* 0x00 */
+ 0xDA40, 0xDA41, 0xDA42, 0xDA43, 0xDA44, 0xDA45, 0xDA46, 0xDA47, /* 0x10 */
+ 0xDA48, 0xDA49, 0xDA4A, 0xDA4B, 0xDA4C, 0xDA4D, 0xDA4E, 0xDA4F, /* 0x10 */
+ 0xDA50, 0xDA51, 0xDA52, 0xDA53, 0xDA54, 0xDA55, 0xDA56, 0xDA57, /* 0x20 */
+ 0xDA58, 0xDA59, 0xDA5A, 0xDA5B, 0xDA5C, 0xDA5D, 0xDA5E, 0xDA5F, /* 0x20 */
+ 0xDA60, 0xDA61, 0xDA62, 0xDA63, 0xDA64, 0xDA65, 0xDA66, 0xDA67, /* 0x30 */
+ 0xDA68, 0xDA69, 0xDA6A, 0xDA6B, 0xD93C, 0xDA6D, 0xDA6E, 0xDA6F, /* 0x30 */
+ 0xDA70, 0xDA71, 0xDA72, 0xDA73, 0xDA74, 0xDA75, 0xDA76, 0xDA77, /* 0x40 */
+ 0xDA78, 0xDA79, 0xDA7A, 0xDA7B, 0xDA7C, 0xDA7D, 0xDA7E, 0xDA91, /* 0x40 */
+ 0xDA92, 0xDA93, 0xDA94, 0xDA95, 0xDA96, 0xDA97, 0xDA98, 0xDA99, /* 0x50 */
+ 0xDA9A, 0xDA9B, 0xDA9C, 0xDA9D, 0xDA9E, 0xDA9F, 0xD9A6, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xD95B, 0xD95C, 0xD9A0, 0xDAA0, 0, 0xD95D, 0xDA6C /* 0xE0 */
+};
+
diff --git a/sal/textenc/tcvtkr6.tab b/sal/textenc/tcvtkr6.tab
new file mode 100644
index 000000000..441e11332
--- /dev/null
+++ b/sal/textenc/tcvtkr6.tab
@@ -0,0 +1,1233 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+/* This file contain the information tables for all */
+/* korean charsets: */
+/* CP949, JOHAB */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aKSC5601UniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0, 1, 0, nullptr }, /* 0x80 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_81 }, /* 0x81 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_82 }, /* 0x82 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_83 }, /* 0x83 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_84 }, /* 0x84 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_85 }, /* 0x85 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_86 }, /* 0x86 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_87 }, /* 0x87 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_88 }, /* 0x88 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_89 }, /* 0x89 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8A }, /* 0x8A */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8B }, /* 0x8B */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8C }, /* 0x8C */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8D }, /* 0x8D */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8E }, /* 0x8E */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8F }, /* 0x8F */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_90 }, /* 0x90 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_91 }, /* 0x91 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_92 }, /* 0x92 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_93 }, /* 0x93 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_94 }, /* 0x94 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_95 }, /* 0x95 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_96 }, /* 0x96 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_97 }, /* 0x97 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_98 }, /* 0x98 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_99 }, /* 0x99 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9A }, /* 0x9A */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9B }, /* 0x9B */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9C }, /* 0x9C */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9D }, /* 0x9D */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9E }, /* 0x9E */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9F }, /* 0x9F */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A0 }, /* 0xA0 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A1 }, /* 0xA1 */
+ { 0, 0x41, 0xE7, aImplDBCSToUniTab_KSC5601_A2 }, /* 0xA2 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A3 }, /* 0xA3 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A4 }, /* 0xA4 */
+ { 0, 0x41, 0xF8, aImplDBCSToUniTab_KSC5601_A5 }, /* 0xA5 */
+ { 0, 0x41, 0xE4, aImplDBCSToUniTab_KSC5601_A6 }, /* 0xA6 */
+ { 0, 0x41, 0xEF, aImplDBCSToUniTab_KSC5601_A7 }, /* 0xA7 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A8 }, /* 0xA8 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A9 }, /* 0xA9 */
+ { 0, 0x41, 0xF3, aImplDBCSToUniTab_KSC5601_AA }, /* 0xAA */
+ { 0, 0x41, 0xF6, aImplDBCSToUniTab_KSC5601_AB }, /* 0xAB */
+ { 0, 0x41, 0xF1, aImplDBCSToUniTab_KSC5601_AC }, /* 0xAC */
+ { 0, 0x41, 0xA0, aImplDBCSToUniTab_KSC5601_AD }, /* 0xAD */
+ { 0, 0x41, 0xA0, aImplDBCSToUniTab_KSC5601_AE }, /* 0xAE */
+ { 0, 0x41, 0xA0, aImplDBCSToUniTab_KSC5601_AF }, /* 0xAF */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B0 }, /* 0xB0 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B1 }, /* 0xB1 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B2 }, /* 0xB2 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B3 }, /* 0xB3 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B4 }, /* 0xB4 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B5 }, /* 0xB5 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B6 }, /* 0xB6 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B7 }, /* 0xB7 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B8 }, /* 0xB8 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B9 }, /* 0xB9 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BA }, /* 0xBA */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BB }, /* 0xBB */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BC }, /* 0xBC */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BD }, /* 0xBD */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BE }, /* 0xBE */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BF }, /* 0xBF */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C0 }, /* 0xC0 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C1 }, /* 0xC1 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C2 }, /* 0xC2 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C3 }, /* 0xC3 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C4 }, /* 0xC4 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C5 }, /* 0xC5 */
+ { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C6 }, /* 0xC6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_C7 }, /* 0xC7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_C8 }, /* 0xC8 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CA }, /* 0xCA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CB }, /* 0xCB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CC }, /* 0xCC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CD }, /* 0xCD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CE }, /* 0xCE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CF }, /* 0xCF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D0 }, /* 0xD0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D1 }, /* 0xD1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D2 }, /* 0xD2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D3 }, /* 0xD3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D4 }, /* 0xD4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D5 }, /* 0xD5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D6 }, /* 0xD6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D7 }, /* 0xD7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D8 }, /* 0xD8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D9 }, /* 0xD9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DA }, /* 0xDA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DB }, /* 0xDB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DC }, /* 0xDC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DD }, /* 0xDD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DE }, /* 0xDE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DF }, /* 0xDF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E0 }, /* 0xE0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E1 }, /* 0xE1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E2 }, /* 0xE2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E3 }, /* 0xE3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E4 }, /* 0xE4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E5 }, /* 0xE5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E6 }, /* 0xE6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E7 }, /* 0xE7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E8 }, /* 0xE8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E9 }, /* 0xE9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EA }, /* 0xEA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EB }, /* 0xEB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EC }, /* 0xEC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_ED }, /* 0xED */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EE }, /* 0xEE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EF }, /* 0xEF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F0 }, /* 0xF0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F1 }, /* 0xF1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F2 }, /* 0xF2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F3 }, /* 0xF3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F4 }, /* 0xF4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F5 }, /* 0xF5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F6 }, /* 0xF6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F7 }, /* 0xF7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F8 }, /* 0xF8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F9 }, /* 0xF9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_FA }, /* 0xFA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_FB }, /* 0xFB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_FC }, /* 0xFC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_FD }, /* 0xFD */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */
+ { 0, 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aKSC5601DBCSHighTab[256] =
+{
+ { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_00 }, /* 0x00 */
+ { 0x11, 0x67, aImplUniToDBCSTab_KSC5601_01 }, /* 0x01 */
+ { 0xC7, 0xDD, aImplUniToDBCSTab_KSC5601_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_KSC5601_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_KSC5601_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x15, 0xAC, aImplUniToDBCSTab_KSC5601_20 }, /* 0x20 */
+ { 0x03, 0xD4, aImplUniToDBCSTab_KSC5601_21 }, /* 0x21 */
+ { 0x00, 0xA5, aImplUniToDBCSTab_KSC5601_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_KSC5601_23 }, /* 0x23 */
+ { 0x60, 0xE9, aImplUniToDBCSTab_KSC5601_24 }, /* 0x24 */
+ { 0x00, 0xD1, aImplUniToDBCSTab_KSC5601_25 }, /* 0x25 */
+ { 0x05, 0x6D, aImplUniToDBCSTab_KSC5601_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xF6, aImplUniToDBCSTab_KSC5601_30 }, /* 0x30 */
+ { 0x31, 0x8E, aImplUniToDBCSTab_KSC5601_31 }, /* 0x31 */
+ { 0x00, 0x7F, aImplUniToDBCSTab_KSC5601_32 }, /* 0x32 */
+ { 0x80, 0xDD, aImplUniToDBCSTab_KSC5601_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFB, aImplUniToDBCSTab_KSC5601_4E }, /* 0x4E */
+ { 0x01, 0xFA, aImplUniToDBCSTab_KSC5601_4F }, /* 0x4F */
+ { 0x02, 0xFF, aImplUniToDBCSTab_KSC5601_50 }, /* 0x50 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_52 }, /* 0x52 */
+ { 0x05, 0xF8, aImplUniToDBCSTab_KSC5601_53 }, /* 0x53 */
+ { 0x03, 0xFA, aImplUniToDBCSTab_KSC5601_54 }, /* 0x54 */
+ { 0x04, 0xFE, aImplUniToDBCSTab_KSC5601_55 }, /* 0x55 */
+ { 0x06, 0xFA, aImplUniToDBCSTab_KSC5601_56 }, /* 0x56 */
+ { 0x03, 0xFC, aImplUniToDBCSTab_KSC5601_57 }, /* 0x57 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_58 }, /* 0x58 */
+ { 0x0F, 0xFF, aImplUniToDBCSTab_KSC5601_59 }, /* 0x59 */
+ { 0x01, 0xE9, aImplUniToDBCSTab_KSC5601_5A }, /* 0x5A */
+ { 0x05, 0xFA, aImplUniToDBCSTab_KSC5601_5B }, /* 0x5B */
+ { 0x01, 0xFD, aImplUniToDBCSTab_KSC5601_5C }, /* 0x5C */
+ { 0x07, 0xFE, aImplUniToDBCSTab_KSC5601_5D }, /* 0x5D */
+ { 0x02, 0xFB, aImplUniToDBCSTab_KSC5601_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_KSC5601_5F }, /* 0x5F */
+ { 0x0F, 0xFB, aImplUniToDBCSTab_KSC5601_60 }, /* 0x60 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_KSC5601_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_62 }, /* 0x62 */
+ { 0x01, 0xF7, aImplUniToDBCSTab_KSC5601_63 }, /* 0x63 */
+ { 0x0D, 0xFE, aImplUniToDBCSTab_KSC5601_64 }, /* 0x64 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_65 }, /* 0x65 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_KSC5601_66 }, /* 0x66 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_67 }, /* 0x67 */
+ { 0x12, 0xFA, aImplUniToDBCSTab_KSC5601_68 }, /* 0x68 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_69 }, /* 0x69 */
+ { 0x02, 0xFB, aImplUniToDBCSTab_KSC5601_6A }, /* 0x6A */
+ { 0x04, 0xEC, aImplUniToDBCSTab_KSC5601_6B }, /* 0x6B */
+ { 0x08, 0xF3, aImplUniToDBCSTab_KSC5601_6C }, /* 0x6C */
+ { 0x0B, 0xFB, aImplUniToDBCSTab_KSC5601_6D }, /* 0x6D */
+ { 0x17, 0xFF, aImplUniToDBCSTab_KSC5601_6E }, /* 0x6E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_KSC5601_6F }, /* 0x6F */
+ { 0x01, 0xFD, aImplUniToDBCSTab_KSC5601_70 }, /* 0x70 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_KSC5601_71 }, /* 0x71 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_72 }, /* 0x72 */
+ { 0x0A, 0xFE, aImplUniToDBCSTab_KSC5601_73 }, /* 0x73 */
+ { 0x01, 0xF7, aImplUniToDBCSTab_KSC5601_74 }, /* 0x74 */
+ { 0x01, 0xFC, aImplUniToDBCSTab_KSC5601_75 }, /* 0x75 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_76 }, /* 0x76 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_KSC5601_77 }, /* 0x77 */
+ { 0x02, 0xFB, aImplUniToDBCSTab_KSC5601_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_KSC5601_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_7A }, /* 0x7A */
+ { 0x0F, 0xE9, aImplUniToDBCSTab_KSC5601_7B }, /* 0x7B */
+ { 0x07, 0xFE, aImplUniToDBCSTab_KSC5601_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_KSC5601_7D }, /* 0x7D */
+ { 0x09, 0x9C, aImplUniToDBCSTab_KSC5601_7E }, /* 0x7E */
+ { 0x36, 0xFC, aImplUniToDBCSTab_KSC5601_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_KSC5601_81 }, /* 0x81 */
+ { 0x05, 0xFE, aImplUniToDBCSTab_KSC5601_82 }, /* 0x82 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_KSC5601_83 }, /* 0x83 */
+ { 0x03, 0xFC, aImplUniToDBCSTab_KSC5601_84 }, /* 0x84 */
+ { 0x11, 0xFF, aImplUniToDBCSTab_KSC5601_85 }, /* 0x85 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_KSC5601_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_87 }, /* 0x87 */
+ { 0x05, 0xFD, aImplUniToDBCSTab_KSC5601_88 }, /* 0x88 */
+ { 0x07, 0xF8, aImplUniToDBCSTab_KSC5601_89 }, /* 0x89 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_8A }, /* 0x8A */
+ { 0x00, 0x9A, aImplUniToDBCSTab_KSC5601_8B }, /* 0x8B */
+ { 0x37, 0xFD, aImplUniToDBCSTab_KSC5601_8C }, /* 0x8C */
+ { 0x04, 0xFB, aImplUniToDBCSTab_KSC5601_8D }, /* 0x8D */
+ { 0x0A, 0xFE, aImplUniToDBCSTab_KSC5601_8E }, /* 0x8E */
+ { 0x03, 0xFD, aImplUniToDBCSTab_KSC5601_8F }, /* 0x8F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_90 }, /* 0x90 */
+ { 0x02, 0xF5, aImplUniToDBCSTab_KSC5601_91 }, /* 0x91 */
+ { 0x0D, 0xFC, aImplUniToDBCSTab_KSC5601_92 }, /* 0x92 */
+ { 0x04, 0xF6, aImplUniToDBCSTab_KSC5601_93 }, /* 0x93 */
+ { 0x04, 0x7F, aImplUniToDBCSTab_KSC5601_94 }, /* 0x94 */
+ { 0x77, 0xE2, aImplUniToDBCSTab_KSC5601_95 }, /* 0x95 */
+ { 0x1C, 0xFB, aImplUniToDBCSTab_KSC5601_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_97 }, /* 0x97 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_98 }, /* 0x98 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_KSC5601_99 }, /* 0x99 */
+ { 0x01, 0xEE, aImplUniToDBCSTab_KSC5601_9A }, /* 0x9A */
+ { 0x1A, 0xE8, aImplUniToDBCSTab_KSC5601_9B }, /* 0x9B */
+ { 0x0D, 0xF6, aImplUniToDBCSTab_KSC5601_9C }, /* 0x9C */
+ { 0x09, 0xFA, aImplUniToDBCSTab_KSC5601_9D }, /* 0x9D */
+ { 0x1A, 0xF4, aImplUniToDBCSTab_KSC5601_9E }, /* 0x9E */
+ { 0x07, 0x9C, aImplUniToDBCSTab_KSC5601_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_AC }, /* 0xAC */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_AD }, /* 0xAD */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_AE }, /* 0xAE */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_AF }, /* 0xAF */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B0 }, /* 0xB0 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B1 }, /* 0xB1 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B2 }, /* 0xB2 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B3 }, /* 0xB3 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B4 }, /* 0xB4 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B5 }, /* 0xB5 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B6 }, /* 0xB6 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B7 }, /* 0xB7 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B8 }, /* 0xB8 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B9 }, /* 0xB9 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BA }, /* 0xBA */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BB }, /* 0xBB */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BC }, /* 0xBC */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BD }, /* 0xBD */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BE }, /* 0xBE */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BF }, /* 0xBF */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C0 }, /* 0xC0 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C1 }, /* 0xC1 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C2 }, /* 0xC2 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C3 }, /* 0xC3 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C4 }, /* 0xC4 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C5 }, /* 0xC5 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C6 }, /* 0xC6 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C7 }, /* 0xC7 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C8 }, /* 0xC8 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C9 }, /* 0xC9 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CA }, /* 0xCA */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CB }, /* 0xCB */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CC }, /* 0xCC */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CD }, /* 0xCD */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CE }, /* 0xCE */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CF }, /* 0xCF */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D0 }, /* 0xD0 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D1 }, /* 0xD1 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D2 }, /* 0xD2 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D3 }, /* 0xD3 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D4 }, /* 0xD4 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D5 }, /* 0xD5 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D6 }, /* 0xD6 */
+ { 0x00, 0xA3, aImplUniToDBCSTab_KSC5601_D7 }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_F9 }, /* 0xF9 */
+ { 0x00, 0x0B, aImplUniToDBCSTab_KSC5601_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 1, 0, nullptr }, /* 0xFE */
+ { 0x01, 0xE6, aImplUniToDBCSTab_KSC5601_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* C9A1-C9FE -> E000-E05D */
+/* FEA1-FEFE -> E05E-E0BB */
+
+#define DBCS_EUDC_MS949_COUNT 2
+ImplDBCSEUDCData const aImplMS949DBCSEUDCTab[DBCS_EUDC_MS949_COUNT] =
+{
+ /* EUDC-Range */
+ /* Lead: C9-C9 */
+ /* Trail: A1-FE */
+ { 0xC9, 0xC9, 0xA1, 0xFE, 0, 0, 0, 0, 1, 0x5E, 0xE000, 0xE05D },
+ /* Lead: FE-FE */
+ /* Trail: A1-FE */
+ { 0xFE, 0xFE, 0xA1, 0xFE, 0, 0, 0, 0, 1, 0x5E, 0xE05E, 0xE0BB }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplKSC5601DBCSCvtData =
+{
+ aKSC5601UniLeadTab,
+ aKSC5601DBCSHighTab,
+ aImplMS949DBCSEUDCTab,
+ DBCS_EUDC_MS949_COUNT,
+ 0xA1, 0xFE,
+ 0xA1, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplMS949DBCSCvtData =
+{
+ aKSC5601UniLeadTab,
+ aKSC5601DBCSHighTab,
+ aImplMS949DBCSEUDCTab,
+ DBCS_EUDC_MS949_COUNT,
+ 0x00, 0xFF,
+ 0x41, 0xFE,
+};
+
+/* ======================================================================= */
+
+ImplTextEncodingData const aImplEUCKRTextEncodingData
+ = { { &aImplKSC5601DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-kr",
+ "euc-kr",
+ 1,
+ 2,
+ 2,
+ 129,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_KOREAN, pc code page 934, mac encoding 3 */
+
+/* ======================================================================= */
+
+ImplTextEncodingData const aImplMS949TextEncodingData
+ = { { &aImplMS949DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-kr",
+ "euc-kr",
+ 1,
+ 2,
+ 2,
+ 129,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* WIN/DOS/OS2, SCRIPT_KOREAN, pc code page 934, mac encoding 3 */
+
+/* ======================================================================= */
+
+/* Apple has some extension, which we don't support */
+
+ImplTextEncodingData const aImplAPPLEKOREANTextEncodingData
+ = { { &aImplMS949DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-kr",
+ "euc-kr",
+ 1,
+ 2,
+ 2,
+ 129,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* MAC, SCRIPT_KOREAN, pc code page 934, mac encoding 3 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aJOHABUniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0x0080, 0, 0, nullptr }, /* 0x80 */
+ { 0x0081, 0, 0, nullptr }, /* 0x81 */
+ { 0x0082, 0, 0, nullptr }, /* 0x82 */
+ { 0x0083, 0, 0, nullptr }, /* 0x83 */
+ { 0, 0x44, 0xE1, aImplDBCSToUniTab_JOHAB_84 }, /* 0x84 */
+ { 0, 0x41, 0xE1, aImplDBCSToUniTab_JOHAB_85 }, /* 0x85 */
+ { 0, 0x41, 0xE1, aImplDBCSToUniTab_JOHAB_86 }, /* 0x86 */
+ { 0, 0x41, 0xA1, aImplDBCSToUniTab_JOHAB_87 }, /* 0x87 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_88 }, /* 0x88 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_89 }, /* 0x89 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_8A }, /* 0x8A */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_8B }, /* 0x8B */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_8C }, /* 0x8C */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_8D }, /* 0x8D */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_8E }, /* 0x8E */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_8F }, /* 0x8F */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_90 }, /* 0x90 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_91 }, /* 0x91 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_92 }, /* 0x92 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_93 }, /* 0x93 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_94 }, /* 0x94 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_95 }, /* 0x95 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_96 }, /* 0x96 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_97 }, /* 0x97 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_98 }, /* 0x98 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_99 }, /* 0x99 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_9A }, /* 0x9A */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_9B }, /* 0x9B */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_9C }, /* 0x9C */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_9D }, /* 0x9D */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_9E }, /* 0x9E */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_9F }, /* 0x9F */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A0 }, /* 0xA0 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A1 }, /* 0xA1 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A2 }, /* 0xA2 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_A3 }, /* 0xA3 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A4 }, /* 0xA4 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A5 }, /* 0xA5 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A6 }, /* 0xA6 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_A7 }, /* 0xA7 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A8 }, /* 0xA8 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A9 }, /* 0xA9 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_AA }, /* 0xAA */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_AB }, /* 0xAB */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_AC }, /* 0xAC */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_AD }, /* 0xAD */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_AE }, /* 0xAE */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_AF }, /* 0xAF */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B0 }, /* 0xB0 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B1 }, /* 0xB1 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B2 }, /* 0xB2 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_B3 }, /* 0xB3 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B4 }, /* 0xB4 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B5 }, /* 0xB5 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B6 }, /* 0xB6 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_B7 }, /* 0xB7 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B8 }, /* 0xB8 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B9 }, /* 0xB9 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_BA }, /* 0xBA */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_BB }, /* 0xBB */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_BC }, /* 0xBC */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_BD }, /* 0xBD */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_BE }, /* 0xBE */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_BF }, /* 0xBF */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C0 }, /* 0xC0 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C1 }, /* 0xC1 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C2 }, /* 0xC2 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_C3 }, /* 0xC3 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C4 }, /* 0xC4 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C5 }, /* 0xC5 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C6 }, /* 0xC6 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_C7 }, /* 0xC7 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C8 }, /* 0xC8 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C9 }, /* 0xC9 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_CA }, /* 0xCA */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_CB }, /* 0xCB */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_CC }, /* 0xCC */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_CD }, /* 0xCD */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_CE }, /* 0xCE */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_CF }, /* 0xCF */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_D0 }, /* 0xD0 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_D1 }, /* 0xD1 */
+ { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_D2 }, /* 0xD2 */
+ { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_D3 }, /* 0xD3 */
+ { 0, 1, 0, nullptr }, /* 0xD4 */
+ { 0, 1, 0, nullptr }, /* 0xD5 */
+ { 0, 1, 0, nullptr }, /* 0xD6 */
+ { 0, 1, 0, nullptr }, /* 0xD7 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xD8 */ /* We convert this as double byte */
+ { 0, 0x31, 0xE5, aImplDBCSToUniTab_JOHAB_D9 }, /* 0xD9 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_DA }, /* 0xDA */
+ { 0, 0x31, 0xE4, aImplDBCSToUniTab_JOHAB_DB }, /* 0xDB */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_DC }, /* 0xDC */
+ { 0, 0x31, 0xF3, aImplDBCSToUniTab_JOHAB_DD }, /* 0xDD */
+ { 0, 0x31, 0xF1, aImplDBCSToUniTab_JOHAB_DE }, /* 0xDE */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xDF */ /* We convert this as double byte */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E0 }, /* 0xE0 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E1 }, /* 0xE1 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E2 }, /* 0xE2 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E3 }, /* 0xE3 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E4 }, /* 0xE4 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E5 }, /* 0xE5 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E6 }, /* 0xE6 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E7 }, /* 0xE7 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E8 }, /* 0xE8 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E9 }, /* 0xE9 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EA }, /* 0xEA */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EB }, /* 0xEB */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EC }, /* 0xEC */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_ED }, /* 0xED */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EE }, /* 0xEE */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EF }, /* 0xEF */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F0 }, /* 0xF0 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F1 }, /* 0xF1 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F2 }, /* 0xF2 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F3 }, /* 0xF3 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F4 }, /* 0xF4 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F5 }, /* 0xF5 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F6 }, /* 0xF6 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F7 }, /* 0xF7 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F8 }, /* 0xF8 */
+ { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F9 }, /* 0xF9 */
+ { 0, 1, 0, nullptr }, /* 0xFA */
+ { 0, 1, 0, nullptr }, /* 0xFB */
+ { 0, 1, 0, nullptr }, /* 0xFC */
+ { 0, 1, 0, nullptr }, /* 0xFD */
+ { 0, 1, 0, nullptr }, /* 0xFE */
+ { 0, 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aJOHABDBCSHighTab[256] =
+{
+ { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_00 }, /* 0x00 */
+ { 0x11, 0x67, aImplUniToDBCSTab_JOHAB_01 }, /* 0x01 */
+ { 0xC7, 0xDD, aImplUniToDBCSTab_JOHAB_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_JOHAB_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_JOHAB_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x15, 0xA9, aImplUniToDBCSTab_JOHAB_20 }, /* 0x20 */
+ { 0x03, 0xD4, aImplUniToDBCSTab_JOHAB_21 }, /* 0x21 */
+ { 0x00, 0xA5, aImplUniToDBCSTab_JOHAB_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_JOHAB_23 }, /* 0x23 */
+ { 0x60, 0xE9, aImplUniToDBCSTab_JOHAB_24 }, /* 0x24 */
+ { 0x00, 0xD1, aImplUniToDBCSTab_JOHAB_25 }, /* 0x25 */
+ { 0x05, 0x6D, aImplUniToDBCSTab_JOHAB_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xF6, aImplUniToDBCSTab_JOHAB_30 }, /* 0x30 */
+ { 0x31, 0x8E, aImplUniToDBCSTab_JOHAB_31 }, /* 0x31 */
+ { 0x00, 0x7F, aImplUniToDBCSTab_JOHAB_32 }, /* 0x32 */
+ { 0x80, 0xDD, aImplUniToDBCSTab_JOHAB_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFB, aImplUniToDBCSTab_JOHAB_4E }, /* 0x4E */
+ { 0x01, 0xFA, aImplUniToDBCSTab_JOHAB_4F }, /* 0x4F */
+ { 0x02, 0xFF, aImplUniToDBCSTab_JOHAB_50 }, /* 0x50 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_52 }, /* 0x52 */
+ { 0x05, 0xF8, aImplUniToDBCSTab_JOHAB_53 }, /* 0x53 */
+ { 0x03, 0xFA, aImplUniToDBCSTab_JOHAB_54 }, /* 0x54 */
+ { 0x04, 0xFE, aImplUniToDBCSTab_JOHAB_55 }, /* 0x55 */
+ { 0x06, 0xFA, aImplUniToDBCSTab_JOHAB_56 }, /* 0x56 */
+ { 0x03, 0xFC, aImplUniToDBCSTab_JOHAB_57 }, /* 0x57 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_58 }, /* 0x58 */
+ { 0x0F, 0xFF, aImplUniToDBCSTab_JOHAB_59 }, /* 0x59 */
+ { 0x01, 0xE9, aImplUniToDBCSTab_JOHAB_5A }, /* 0x5A */
+ { 0x05, 0xFA, aImplUniToDBCSTab_JOHAB_5B }, /* 0x5B */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JOHAB_5C }, /* 0x5C */
+ { 0x07, 0xFE, aImplUniToDBCSTab_JOHAB_5D }, /* 0x5D */
+ { 0x02, 0xFB, aImplUniToDBCSTab_JOHAB_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_JOHAB_5F }, /* 0x5F */
+ { 0x0F, 0xFB, aImplUniToDBCSTab_JOHAB_60 }, /* 0x60 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_JOHAB_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_62 }, /* 0x62 */
+ { 0x01, 0xF7, aImplUniToDBCSTab_JOHAB_63 }, /* 0x63 */
+ { 0x0D, 0xFE, aImplUniToDBCSTab_JOHAB_64 }, /* 0x64 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_65 }, /* 0x65 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_JOHAB_66 }, /* 0x66 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_67 }, /* 0x67 */
+ { 0x12, 0xFA, aImplUniToDBCSTab_JOHAB_68 }, /* 0x68 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_69 }, /* 0x69 */
+ { 0x02, 0xFB, aImplUniToDBCSTab_JOHAB_6A }, /* 0x6A */
+ { 0x04, 0xEC, aImplUniToDBCSTab_JOHAB_6B }, /* 0x6B */
+ { 0x08, 0xF3, aImplUniToDBCSTab_JOHAB_6C }, /* 0x6C */
+ { 0x0B, 0xFB, aImplUniToDBCSTab_JOHAB_6D }, /* 0x6D */
+ { 0x17, 0xFF, aImplUniToDBCSTab_JOHAB_6E }, /* 0x6E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_JOHAB_6F }, /* 0x6F */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JOHAB_70 }, /* 0x70 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_JOHAB_71 }, /* 0x71 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_72 }, /* 0x72 */
+ { 0x0A, 0xFE, aImplUniToDBCSTab_JOHAB_73 }, /* 0x73 */
+ { 0x01, 0xF7, aImplUniToDBCSTab_JOHAB_74 }, /* 0x74 */
+ { 0x01, 0xFC, aImplUniToDBCSTab_JOHAB_75 }, /* 0x75 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_76 }, /* 0x76 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_JOHAB_77 }, /* 0x77 */
+ { 0x02, 0xFB, aImplUniToDBCSTab_JOHAB_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_JOHAB_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_7A }, /* 0x7A */
+ { 0x0F, 0xE9, aImplUniToDBCSTab_JOHAB_7B }, /* 0x7B */
+ { 0x07, 0xFE, aImplUniToDBCSTab_JOHAB_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_JOHAB_7D }, /* 0x7D */
+ { 0x09, 0x9C, aImplUniToDBCSTab_JOHAB_7E }, /* 0x7E */
+ { 0x36, 0xFC, aImplUniToDBCSTab_JOHAB_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_JOHAB_81 }, /* 0x81 */
+ { 0x05, 0xFE, aImplUniToDBCSTab_JOHAB_82 }, /* 0x82 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_JOHAB_83 }, /* 0x83 */
+ { 0x03, 0xFC, aImplUniToDBCSTab_JOHAB_84 }, /* 0x84 */
+ { 0x11, 0xFF, aImplUniToDBCSTab_JOHAB_85 }, /* 0x85 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_JOHAB_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_87 }, /* 0x87 */
+ { 0x05, 0xFD, aImplUniToDBCSTab_JOHAB_88 }, /* 0x88 */
+ { 0x07, 0xF8, aImplUniToDBCSTab_JOHAB_89 }, /* 0x89 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_8A }, /* 0x8A */
+ { 0x00, 0x9A, aImplUniToDBCSTab_JOHAB_8B }, /* 0x8B */
+ { 0x37, 0xFD, aImplUniToDBCSTab_JOHAB_8C }, /* 0x8C */
+ { 0x04, 0xFB, aImplUniToDBCSTab_JOHAB_8D }, /* 0x8D */
+ { 0x0A, 0xFE, aImplUniToDBCSTab_JOHAB_8E }, /* 0x8E */
+ { 0x03, 0xFD, aImplUniToDBCSTab_JOHAB_8F }, /* 0x8F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_90 }, /* 0x90 */
+ { 0x02, 0xF5, aImplUniToDBCSTab_JOHAB_91 }, /* 0x91 */
+ { 0x0D, 0xFC, aImplUniToDBCSTab_JOHAB_92 }, /* 0x92 */
+ { 0x04, 0xF6, aImplUniToDBCSTab_JOHAB_93 }, /* 0x93 */
+ { 0x04, 0x7F, aImplUniToDBCSTab_JOHAB_94 }, /* 0x94 */
+ { 0x77, 0xE2, aImplUniToDBCSTab_JOHAB_95 }, /* 0x95 */
+ { 0x1C, 0xFB, aImplUniToDBCSTab_JOHAB_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_97 }, /* 0x97 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_98 }, /* 0x98 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_JOHAB_99 }, /* 0x99 */
+ { 0x01, 0xEE, aImplUniToDBCSTab_JOHAB_9A }, /* 0x9A */
+ { 0x1A, 0xE8, aImplUniToDBCSTab_JOHAB_9B }, /* 0x9B */
+ { 0x0D, 0xF6, aImplUniToDBCSTab_JOHAB_9C }, /* 0x9C */
+ { 0x09, 0xFA, aImplUniToDBCSTab_JOHAB_9D }, /* 0x9D */
+ { 0x1A, 0xF4, aImplUniToDBCSTab_JOHAB_9E }, /* 0x9E */
+ { 0x07, 0x9C, aImplUniToDBCSTab_JOHAB_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_AC }, /* 0xAC */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_AD }, /* 0xAD */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_AE }, /* 0xAE */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_AF }, /* 0xAF */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B0 }, /* 0xB0 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B1 }, /* 0xB1 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B2 }, /* 0xB2 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B3 }, /* 0xB3 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B4 }, /* 0xB4 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B5 }, /* 0xB5 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B6 }, /* 0xB6 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B7 }, /* 0xB7 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B8 }, /* 0xB8 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B9 }, /* 0xB9 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BA }, /* 0xBA */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BB }, /* 0xBB */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BC }, /* 0xBC */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BD }, /* 0xBD */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BE }, /* 0xBE */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BF }, /* 0xBF */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C0 }, /* 0xC0 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C1 }, /* 0xC1 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C2 }, /* 0xC2 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C3 }, /* 0xC3 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C4 }, /* 0xC4 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C5 }, /* 0xC5 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C6 }, /* 0xC6 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C7 }, /* 0xC7 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C8 }, /* 0xC8 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C9 }, /* 0xC9 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CA }, /* 0xCA */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CB }, /* 0xCB */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CC }, /* 0xCC */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CD }, /* 0xCD */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CE }, /* 0xCE */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CF }, /* 0xCF */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D0 }, /* 0xD0 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D1 }, /* 0xD1 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D2 }, /* 0xD2 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D3 }, /* 0xD3 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D4 }, /* 0xD4 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D5 }, /* 0xD5 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D6 }, /* 0xD6 */
+ { 0x00, 0xA3, aImplUniToDBCSTab_JOHAB_D7 }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_F9 }, /* 0xF9 */
+ { 0x00, 0x0B, aImplUniToDBCSTab_JOHAB_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 1, 0, nullptr }, /* 0xFE */
+ { 0x01, 0xE6, aImplUniToDBCSTab_JOHAB_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* D831-D87E -> E000-E05D */
+/* D891-D8FE -> E05E-E0BB */
+
+#define DBCS_EUDC_MS1361_COUNT 2
+ImplDBCSEUDCData const aImplMS1361DBCSEUDCTab[DBCS_EUDC_MS1361_COUNT] =
+{
+ /* EUDC-Range */
+ /* Lead: D8-D8 */
+ /* Trail: 31-7E */
+ { 0xD8, 0xD8, 0x31, 0x7E, 0, 0, 0, 0, 1, 0x5D, 0xE000, 0xE05D },
+ /* Lead: D8-D8 */
+ /* Trail: 91-FE */
+ { 0xD8, 0xD8, 0x91, 0xFE, 0, 0, 0, 0, 1, 0x5D, 0xE05E, 0xE0BB }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplJOHABDBCSCvtData =
+{
+ aJOHABUniLeadTab,
+ aJOHABDBCSHighTab,
+ aImplMS1361DBCSEUDCTab,
+ DBCS_EUDC_MS1361_COUNT,
+ 0x00, 0xFF,
+ 0x31, 0xFE,
+};
+
+/* ======================================================================= */
+
+ImplTextEncodingData const aImplMS1361TextEncodingData
+ = { { &aImplJOHABDBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-kr",
+ "euc-kr",
+ 1,
+ 2,
+ 2,
+ 130,
+ RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_KOREAN, pc code page 1361, mac encoding 3 */
diff --git a/sal/textenc/tcvtlat1.tab b/sal/textenc/tcvtlat1.tab
new file mode 100644
index 000000000..0bfcb1dd9
--- /dev/null
+++ b/sal/textenc/tcvtlat1.tab
@@ -0,0 +1,1552 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "convertsimple.hxx"
+#include "tcvtbyte.hxx"
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+/* This file contain the tables for all 1 byte charsets, for the */
+/* following scripts: latin, iceland, nordic */
+
+/* ======================================================================= */
+
+/* IBM-437 */
+/* Dos Latin US - Standard CharSet for Western Script */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp437.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM437UNI_START 0x80
+#define IBM437UNI_END 0xFF
+sal_uInt16 const aImplIBM437ToUniTab[IBM437UNI_END - IBM437UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, /* 0x80 */
+ 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, /* 0x90 */
+ 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, /* 0x90 */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */
+ 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */
+ 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */
+ 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM437CHAR_START 0x00A0
+#define IBM437CHAR_END 0x00FF
+unsigned char const aImplIBM437ToCharTab[IBM437CHAR_END - IBM437CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF, 0xAD, 0x9B, 0x9C, 0, 0x9D, 0, 0, /* 0x00A0 */
+ 0, 0, 0xA6, 0xAE, 0xAA, 0, 0, 0, /* 0x00A0 */
+ 0xF8, 0xF1, 0xFD, 0, 0, 0xE6, 0, 0xFA, /* 0x00B0 */
+ 0, 0, 0xA7, 0xAF, 0xAC, 0xAB, 0, 0xA8, /* 0x00B0 */
+ 0, 0, 0, 0, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */
+ 0, 0x90, 0, 0, 0, 0, 0, 0, /* 0x00C0 */
+ 0, 0xA5, 0, 0, 0, 0, 0x99, 0, /* 0x00D0 */
+ 0, 0, 0, 0, 0x9A, 0, 0, 0xE1, /* 0x00D0 */
+ 0x85, 0xA0, 0x83, 0, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */
+ 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* 0x00E0 */
+ 0, 0xA4, 0x95, 0xA2, 0x93, 0, 0x94, 0xF6, /* 0x00F0 */
+ 0, 0x97, 0xA3, 0x96, 0x81, 0, 0, 0x98 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM437TOCHARTABEX_COUNT 75
+ImplUniCharTabData const aImplIBM437ToCharTabEx[IBM437TOCHARTABEX_COUNT] =
+{
+ { 0x0192, 0x9F, 0 },
+ { 0x0393, 0xE2, 0 },
+ { 0x0398, 0xE9, 0 },
+ { 0x03A3, 0xE4, 0 },
+ { 0x03A6, 0xE8, 0 },
+ { 0x03A9, 0xEA, 0 },
+ { 0x03B1, 0xE0, 0 },
+ { 0x03B4, 0xEB, 0 },
+ { 0x03B5, 0xEE, 0 },
+ { 0x03C0, 0xE3, 0 },
+ { 0x03C3, 0xE5, 0 },
+ { 0x03C4, 0xE7, 0 },
+ { 0x03C6, 0xED, 0 },
+ { 0x207F, 0xFC, 0 },
+ { 0x20A7, 0x9E, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x221A, 0xFB, 0 },
+ { 0x221E, 0xEC, 0 },
+ { 0x2229, 0xEF, 0 },
+ { 0x2248, 0xF7, 0 },
+ { 0x2261, 0xF0, 0 },
+ { 0x2264, 0xF3, 0 },
+ { 0x2265, 0xF2, 0 },
+ { 0x2310, 0xA9, 0 },
+ { 0x2320, 0xF4, 0 },
+ { 0x2321, 0xF5, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2552, 0xD5, 0 },
+ { 0x2553, 0xD6, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2555, 0xB8, 0 },
+ { 0x2556, 0xB7, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x2558, 0xD4, 0 },
+ { 0x2559, 0xD3, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255B, 0xBE, 0 },
+ { 0x255C, 0xBD, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x255E, 0xC6, 0 },
+ { 0x255F, 0xC7, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2561, 0xB5, 0 },
+ { 0x2562, 0xB6, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2564, 0xD1, 0 },
+ { 0x2565, 0xD2, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2567, 0xCF, 0 },
+ { 0x2568, 0xD0, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256A, 0xD8, 0 },
+ { 0x256B, 0xD7, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM437ByteCvtData =
+{
+ aImplIBM437ToUniTab,
+ nullptr,
+ aImplIBM437ToCharTab,
+ nullptr,
+ aImplIBM437ToCharTabEx,
+ IBM437UNI_START, IBM437UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM437CHAR_START, IBM437CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM437TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM437TextEncodingData
+ = { { &aImplIBM437ByteCvtData,
+ ImplUpperCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "ibm437",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* DOS/OS2, SCRIPT_LATIN, pc code page 437 */
+
+/* ======================================================================= */
+
+/* IBM-850 */
+/* Dos Standard CharSet for Western/Europe */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp850.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+/* D5 - changed to EURO SIGN and 0x20AC added to D5 */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM850UNI_START 0x80
+#define IBM850UNI_END 0xFF
+sal_uInt16 const aImplIBM850ToUniTab[IBM850UNI_END - IBM850UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, /* 0x80 */
+ 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, /* 0x90 */
+ 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, /* 0x90 */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */
+ 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, /* 0xB0 */
+ 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, /* 0xC0 */
+ 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x20AC, 0x00CD, 0x00CE, /* 0xD0 */
+ 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, /* 0xD0 */
+ 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, /* 0xE0 */
+ 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, /* 0xE0 */
+ 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, /* 0xF0 */
+ 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM850CHAR_START 0x00A0
+#define IBM850CHAR_END 0x00FF
+unsigned char const aImplIBM850ToCharTab[IBM850CHAR_END - IBM850CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5, /* 0x00A0 */
+ 0xF9, 0xB8, 0xA6, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE, /* 0x00A0 */
+ 0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA, /* 0x00B0 */
+ 0xF7, 0xFB, 0xA7, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, /* 0x00B0 */
+ 0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */
+ 0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8, /* 0x00C0 */
+ 0xD1, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0x9E, /* 0x00D0 */
+ 0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0xED, 0xE8, 0xE1, /* 0x00D0 */
+ 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */
+ 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* 0x00E0 */
+ 0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* 0x00F0 */
+ 0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM850TOCHARTABEX_COUNT 33
+ImplUniCharTabData const aImplIBM850ToCharTabEx[IBM850TOCHARTABEX_COUNT] =
+{
+ { 0x0131, 0xD5, 0 },
+ { 0x0192, 0x9F, 0 },
+ { 0x2017, 0xF2, 0 },
+ { 0x20AC, 0xD5, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM850ByteCvtData =
+{
+ aImplIBM850ToUniTab,
+ nullptr,
+ aImplIBM850ToCharTab,
+ nullptr,
+ aImplIBM850ToCharTabEx,
+ IBM850UNI_START, IBM850UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM850CHAR_START, IBM850CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM850TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM850TextEncodingData
+ = { { &aImplIBM850ByteCvtData,
+ ImplUpperCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "ibm850",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* DOS/OS2, SCRIPT_LATIN, pc code page 850 */
+
+/* ======================================================================= */
+
+/* IBM-860 */
+/* Dos Standard CharSet for Portuguese */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp860.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM860UNI_START 0x80
+#define IBM860UNI_END 0xFF
+sal_uInt16 const aImplIBM860ToUniTab[IBM860UNI_END - IBM860UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, /* 0x80 */
+ 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2, /* 0x80 */
+ 0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, /* 0x90 */
+ 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3, /* 0x90 */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */
+ 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */
+ 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */
+ 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM860CHAR_START 0x00A0
+#define IBM860CHAR_END 0x00FC
+unsigned char const aImplIBM860ToCharTab[IBM860CHAR_END - IBM860CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF, 0xAD, 0x9B, 0x9C, 0 , 0, 0, 0, /* 0x00A0 */
+ 0, 0, 0xA6, 0xAE, 0xAA, 0, 0, 0, /* 0x00A0 */
+ 0xF8, 0xF1, 0xFD, 0, 0, 0xE6, 0, 0xFA, /* 0x00B0 */
+ 0, 0, 0xA7, 0xAF, 0xAC, 0xAB, 0, 0xA8, /* 0x00B0 */
+ 0x91, 0x86, 0x8F, 0x8E, 0, 0, 0, 0x80, /* 0x00C0 */
+ 0x92, 0x90, 0x89, 0, 0x98, 0x8B, 0, 0, /* 0x00C0 */
+ 0, 0xA5, 0xA9, 0x9F, 0x8C, 0x99, 0, 0, /* 0x00D0 */
+ 0, 0x9D, 0x96, 0, 0x9A, 0, 0, 0xE1, /* 0x00D0 */
+ 0x85, 0xA0, 0x83, 0x84, 0, 0, 0, 0x87, /* 0x00E0 */
+ 0x8A, 0x82, 0x88, 0, 0x8D, 0xA1, 0, 0, /* 0x00E0 */
+ 0, 0xA4, 0x95, 0xA2, 0x93, 0x94, 0, 0xF6, /* 0x00F0 */
+ 0, 0x97, 0xA3, 0, 0x81 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM860TOCHARTABEX_COUNT 73
+ImplUniCharTabData const aImplIBM860ToCharTabEx[IBM860TOCHARTABEX_COUNT] =
+{
+ { 0x0393, 0xE2, 0 },
+ { 0x0398, 0xE9, 0 },
+ { 0x03A3, 0xE4, 0 },
+ { 0x03A6, 0xE8, 0 },
+ { 0x03A9, 0xEA, 0 },
+ { 0x03B1, 0xE0, 0 },
+ { 0x03B4, 0xEB, 0 },
+ { 0x03B5, 0xEE, 0 },
+ { 0x03C0, 0xE3, 0 },
+ { 0x03C3, 0xE5, 0 },
+ { 0x03C4, 0xE7, 0 },
+ { 0x03C6, 0xED, 0 },
+ { 0x207F, 0xFC, 0 },
+ { 0x20A7, 0x9E, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x221A, 0xFB, 0 },
+ { 0x221E, 0xEC, 0 },
+ { 0x2229, 0xEF, 0 },
+ { 0x2248, 0xF7, 0 },
+ { 0x2261, 0xF0, 0 },
+ { 0x2264, 0xF3, 0 },
+ { 0x2265, 0xF2, 0 },
+ { 0x2320, 0xF4, 0 },
+ { 0x2321, 0xF5, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2552, 0xD5, 0 },
+ { 0x2553, 0xD6, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2555, 0xB8, 0 },
+ { 0x2556, 0xB7, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x2558, 0xD4, 0 },
+ { 0x2559, 0xD3, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255B, 0xBE, 0 },
+ { 0x255C, 0xBD, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x255E, 0xC6, 0 },
+ { 0x255F, 0xC7, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2561, 0xB5, 0 },
+ { 0x2562, 0xB6, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2564, 0xD1, 0 },
+ { 0x2565, 0xD2, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2567, 0xCF, 0 },
+ { 0x2568, 0xD0, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256A, 0xD8, 0 },
+ { 0x256B, 0xD7, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM860ByteCvtData =
+{
+ aImplIBM860ToUniTab,
+ nullptr,
+ aImplIBM860ToCharTab,
+ nullptr,
+ aImplIBM860ToCharTabEx,
+ IBM860UNI_START, IBM860UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM860CHAR_START, IBM860CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM860TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM860TextEncodingData
+ = { { &aImplIBM860ByteCvtData,
+ ImplUpperCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "IBM860",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* DOS/OS2, SCRIPT_LATIN, pc code page 860 */
+
+/* ======================================================================= */
+
+/* IBM-861 */
+/* Dos Standard CharSet for Icelandic */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp861.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM861UNI_START 0x80
+#define IBM861UNI_END 0xFF
+sal_uInt16 const aImplIBM861ToUniTab[IBM861UNI_END - IBM861UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5, /* 0x80 */
+ 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, /* 0x90 */
+ 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, /* 0x90 */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, /* 0xA0 */
+ 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */
+ 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */
+ 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM861CHAR_START 0x00A0
+#define IBM861CHAR_END 0x00FE
+unsigned char const aImplIBM861ToCharTab[IBM861CHAR_END - IBM861CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF, 0xAD, 0, 0x9C, 0, 0, 0, 0, /* 0x00A0 */
+ 0, 0, 0, 0xAE, 0xAA, 0, 0, 0, /* 0x00A0 */
+ 0xF8, 0xF1, 0xFD, 0, 0, 0xE6, 0, 0xFA, /* 0x00B0 */
+ 0, 0, 0, 0xAF, 0xAC, 0xAB, 0, 0xA8, /* 0x00B0 */
+ 0, 0xA4, 0, 0, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */
+ 0, 0x90, 0, 0, 0, 0xA5, 0, 0, /* 0x00C0 */
+ 0x8B, 0, 0, 0xA6, 0, 0, 0x99, 0, /* 0x00D0 */
+ 0x9D, 0, 0xA7, 0, 0x9A, 0x97, 0x8D, 0xE1, /* 0x00D0 */
+ 0x85, 0xA0, 0x83, 0, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */
+ 0x8A, 0x82, 0x88, 0x89, 0, 0xA1, 0, 0, /* 0x00E0 */
+ 0x8C, 0, 0, 0xA2, 0x93, 0, 0x94, 0xF6, /* 0x00F0 */
+ 0x9B, 0, 0xA3, 0x96, 0x81, 0x98, 0x95 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM861TOCHARTABEX_COUNT 75
+ImplUniCharTabData const aImplIBM861ToCharTabEx[IBM861TOCHARTABEX_COUNT] =
+{
+ { 0x0192, 0x9F, 0 },
+ { 0x0393, 0xE2, 0 },
+ { 0x0398, 0xE9, 0 },
+ { 0x03A3, 0xE4, 0 },
+ { 0x03A6, 0xE8, 0 },
+ { 0x03A9, 0xEA, 0 },
+ { 0x03B1, 0xE0, 0 },
+ { 0x03B4, 0xEB, 0 },
+ { 0x03B5, 0xEE, 0 },
+ { 0x03C0, 0xE3, 0 },
+ { 0x03C3, 0xE5, 0 },
+ { 0x03C4, 0xE7, 0 },
+ { 0x03C6, 0xED, 0 },
+ { 0x207F, 0xFC, 0 },
+ { 0x20A7, 0x9E, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x221A, 0xFB, 0 },
+ { 0x221E, 0xEC, 0 },
+ { 0x2229, 0xEF, 0 },
+ { 0x2248, 0xF7, 0 },
+ { 0x2261, 0xF0, 0 },
+ { 0x2264, 0xF3, 0 },
+ { 0x2265, 0xF2, 0 },
+ { 0x2310, 0xA9, 0 },
+ { 0x2320, 0xF4, 0 },
+ { 0x2321, 0xF5, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2552, 0xD5, 0 },
+ { 0x2553, 0xD6, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2555, 0xB8, 0 },
+ { 0x2556, 0xB7, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x2558, 0xD4, 0 },
+ { 0x2559, 0xD3, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255B, 0xBE, 0 },
+ { 0x255C, 0xBD, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x255E, 0xC6, 0 },
+ { 0x255F, 0xC7, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2561, 0xB5, 0 },
+ { 0x2562, 0xB6, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2564, 0xD1, 0 },
+ { 0x2565, 0xD2, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2567, 0xCF, 0 },
+ { 0x2568, 0xD0, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256A, 0xD8, 0 },
+ { 0x256B, 0xD7, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM861ByteCvtData =
+{
+ aImplIBM861ToUniTab,
+ nullptr,
+ aImplIBM861ToCharTab,
+ nullptr,
+ aImplIBM861ToCharTabEx,
+ IBM861UNI_START, IBM861UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM861CHAR_START, IBM861CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM861TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM861TextEncodingData
+ = { { &aImplIBM861ByteCvtData,
+ ImplUpperCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "IBM861",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* DOS/OS2, SCRIPT_LATIN, pc code page 861, mac encoding 37 */
+
+/* ======================================================================= */
+
+/* IBM-863 */
+/* Dos Standard CharSet for Canada-France */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp863.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM863UNI_START 0x80
+#define IBM863UNI_END 0xFF
+sal_uInt16 const aImplIBM863ToUniTab[IBM863UNI_END - IBM863UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x2017, 0x00C0, 0x00A7, /* 0x80 */
+ 0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, /* 0x90 */
+ 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192, /* 0x90 */
+ 0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00B8, 0x00B3, 0x00AF, /* 0xA0 */
+ 0x00CE, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */
+ 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */
+ 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM863CHAR_START 0x00A0
+#define IBM863CHAR_END 0x00FC
+unsigned char const aImplIBM863ToCharTab[IBM863CHAR_END - IBM863CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF, 0, 0x9B, 0x9C, 0x98, 0, 0xA0, 0x8F, /* 0x00A0 */
+ 0xA4, 0, 0, 0xAE, 0xAA, 0, 0, 0xA7, /* 0x00A0 */
+ 0xF8, 0xF1, 0xFD, 0xA6, 0xA1, 0xE6, 0x86, 0xFA, /* 0x00B0 */
+ 0xA5, 0, 0, 0xAF, 0xAC, 0xAB, 0xAD, 0, /* 0x00B0 */
+ 0x8E, 0, 0x84, 0, 0, 0, 0, 0x80, /* 0x00C0 */
+ 0x91, 0x90, 0x92, 0x94, 0, 0, 0xA8, 0x95, /* 0x00C0 */
+ 0, 0, 0, 0, 0x99, 0, 0, 0, /* 0x00D0 */
+ 0, 0x9D, 0, 0x9E, 0x9A, 0, 0, 0xE1, /* 0x00D0 */
+ 0x85, 0, 0x83, 0, 0, 0, 0, 0x87, /* 0x00E0 */
+ 0x8A, 0x82, 0x88, 0x89, 0, 0, 0x8C, 0x8B, /* 0x00E0 */
+ 0, 0, 0, 0xA2, 0x93, 0, 0, 0xF6, /* 0x00F0 */
+ 0, 0x97, 0xA3, 0x96, 0x81 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM863TOCHARTABEX_COUNT 75
+ImplUniCharTabData const aImplIBM863ToCharTabEx[IBM863TOCHARTABEX_COUNT] =
+{
+ { 0x0192, 0x9F, 0 },
+ { 0x0393, 0xE2, 0 },
+ { 0x0398, 0xE9, 0 },
+ { 0x03A3, 0xE4, 0 },
+ { 0x03A6, 0xE8, 0 },
+ { 0x03A9, 0xEA, 0 },
+ { 0x03B1, 0xE0, 0 },
+ { 0x03B4, 0xEB, 0 },
+ { 0x03B5, 0xEE, 0 },
+ { 0x03C0, 0xE3, 0 },
+ { 0x03C3, 0xE5, 0 },
+ { 0x03C4, 0xE7, 0 },
+ { 0x03C6, 0xED, 0 },
+ { 0x2017, 0x8D, 0 },
+ { 0x207F, 0xFC, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x221A, 0xFB, 0 },
+ { 0x221E, 0xEC, 0 },
+ { 0x2229, 0xEF, 0 },
+ { 0x2248, 0xF7, 0 },
+ { 0x2261, 0xF0, 0 },
+ { 0x2264, 0xF3, 0 },
+ { 0x2265, 0xF2, 0 },
+ { 0x2310, 0xA9, 0 },
+ { 0x2320, 0xF4, 0 },
+ { 0x2321, 0xF5, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2552, 0xD5, 0 },
+ { 0x2553, 0xD6, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2555, 0xB8, 0 },
+ { 0x2556, 0xB7, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x2558, 0xD4, 0 },
+ { 0x2559, 0xD3, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255B, 0xBE, 0 },
+ { 0x255C, 0xBD, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x255E, 0xC6, 0 },
+ { 0x255F, 0xC7, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2561, 0xB5, 0 },
+ { 0x2562, 0xB6, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2564, 0xD1, 0 },
+ { 0x2565, 0xD2, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2567, 0xCF, 0 },
+ { 0x2568, 0xD0, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256A, 0xD8, 0 },
+ { 0x256B, 0xD7, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM863ByteCvtData =
+{
+ aImplIBM863ToUniTab,
+ nullptr,
+ aImplIBM863ToCharTab,
+ nullptr,
+ aImplIBM863ToCharTabEx,
+ IBM863UNI_START, IBM863UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM863CHAR_START, IBM863CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM863TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM863TextEncodingData
+ = { { &aImplIBM863ByteCvtData,
+ ImplUpperCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "IBM863",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* DOS/OS2, SCRIPT_LATIN, pc code page 863 */
+
+/* ======================================================================= */
+
+/* IBM-865 */
+/* Dos Standard CharSet for Nordic */
+/* 1-byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/pc/cp865.txt from 04/24/96 Version 2.00 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM865UNI_START 0x80
+#define IBM865UNI_END 0xFF
+sal_uInt16 const aImplIBM865ToUniTab[IBM865UNI_END - IBM865UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, /* 0x80 */
+ 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, /* 0x90 */
+ 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, /* 0x90 */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */
+ 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4, /* 0xA0 */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */
+ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */
+ 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */
+ 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM865CHAR_START 0x00A0
+#define IBM865CHAR_END 0x00FF
+unsigned char const aImplIBM865ToCharTab[IBM865CHAR_END - IBM865CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF, 0xAD, 0, 0x9C, 0xAF, 0, 0, 0, /* 0x00A0 */
+ 0, 0, 0xA6, 0xAE, 0xAA, 0, 0, 0, /* 0x00A0 */
+ 0xF8, 0xF1, 0xFD, 0, 0, 0xE6, 0, 0xFA, /* 0x00B0 */
+ 0, 0, 0xA7, 0, 0xAC, 0xAB, 0, 0xA8, /* 0x00B0 */
+ 0, 0, 0, 0, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */
+ 0, 0x90, 0, 0, 0, 0, 0, 0, /* 0x00C0 */
+ 0, 0xA5, 0, 0, 0, 0, 0x99, 0, /* 0x00D0 */
+ 0x9D, 0, 0, 0, 0x9A, 0, 0, 0xE1, /* 0x00D0 */
+ 0x85, 0xA0, 0x83, 0, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */
+ 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* 0x00E0 */
+ 0, 0xA4, 0x95, 0xA2, 0x93, 0, 0x94, 0xF6, /* 0x00F0 */
+ 0x9B, 0x97, 0xA3, 0x96, 0x81, 0, 0, 0x98 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define IBM865TOCHARTABEX_COUNT 75
+ImplUniCharTabData const aImplIBM865ToCharTabEx[IBM865TOCHARTABEX_COUNT] =
+{
+ { 0x0192, 0x9F, 0 },
+ { 0x0393, 0xE2, 0 },
+ { 0x0398, 0xE9, 0 },
+ { 0x03A3, 0xE4, 0 },
+ { 0x03A6, 0xE8, 0 },
+ { 0x03A9, 0xEA, 0 },
+ { 0x03B1, 0xE0, 0 },
+ { 0x03B4, 0xEB, 0 },
+ { 0x03B5, 0xEE, 0 },
+ { 0x03C0, 0xE3, 0 },
+ { 0x03C3, 0xE5, 0 },
+ { 0x03C4, 0xE7, 0 },
+ { 0x03C6, 0xED, 0 },
+ { 0x207F, 0xFC, 0 },
+ { 0x20A7, 0x9E, 0 },
+ { 0x2219, 0xF9, 0 },
+ { 0x221A, 0xFB, 0 },
+ { 0x221E, 0xEC, 0 },
+ { 0x2229, 0xEF, 0 },
+ { 0x2248, 0xF7, 0 },
+ { 0x2261, 0xF0, 0 },
+ { 0x2264, 0xF3, 0 },
+ { 0x2265, 0xF2, 0 },
+ { 0x2310, 0xA9, 0 },
+ { 0x2320, 0xF4, 0 },
+ { 0x2321, 0xF5, 0 },
+ { 0x2500, 0xC4, 0 },
+ { 0x2502, 0xB3, 0 },
+ { 0x250C, 0xDA, 0 },
+ { 0x2510, 0xBF, 0 },
+ { 0x2514, 0xC0, 0 },
+ { 0x2518, 0xD9, 0 },
+ { 0x251C, 0xC3, 0 },
+ { 0x2524, 0xB4, 0 },
+ { 0x252C, 0xC2, 0 },
+ { 0x2534, 0xC1, 0 },
+ { 0x253C, 0xC5, 0 },
+ { 0x2550, 0xCD, 0 },
+ { 0x2551, 0xBA, 0 },
+ { 0x2552, 0xD5, 0 },
+ { 0x2553, 0xD6, 0 },
+ { 0x2554, 0xC9, 0 },
+ { 0x2555, 0xB8, 0 },
+ { 0x2556, 0xB7, 0 },
+ { 0x2557, 0xBB, 0 },
+ { 0x2558, 0xD4, 0 },
+ { 0x2559, 0xD3, 0 },
+ { 0x255A, 0xC8, 0 },
+ { 0x255B, 0xBE, 0 },
+ { 0x255C, 0xBD, 0 },
+ { 0x255D, 0xBC, 0 },
+ { 0x255E, 0xC6, 0 },
+ { 0x255F, 0xC7, 0 },
+ { 0x2560, 0xCC, 0 },
+ { 0x2561, 0xB5, 0 },
+ { 0x2562, 0xB6, 0 },
+ { 0x2563, 0xB9, 0 },
+ { 0x2564, 0xD1, 0 },
+ { 0x2565, 0xD2, 0 },
+ { 0x2566, 0xCB, 0 },
+ { 0x2567, 0xCF, 0 },
+ { 0x2568, 0xD0, 0 },
+ { 0x2569, 0xCA, 0 },
+ { 0x256A, 0xD8, 0 },
+ { 0x256B, 0xD7, 0 },
+ { 0x256C, 0xCE, 0 },
+ { 0x2580, 0xDF, 0 },
+ { 0x2584, 0xDC, 0 },
+ { 0x2588, 0xDB, 0 },
+ { 0x258C, 0xDD, 0 },
+ { 0x2590, 0xDE, 0 },
+ { 0x2591, 0xB0, 0 },
+ { 0x2592, 0xB1, 0 },
+ { 0x2593, 0xB2, 0 },
+ { 0x25A0, 0xFE, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplIBM865ByteCvtData =
+{
+ aImplIBM865ToUniTab,
+ nullptr,
+ aImplIBM865ToCharTab,
+ nullptr,
+ aImplIBM865ToCharTabEx,
+ IBM865UNI_START, IBM865UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ IBM865CHAR_START, IBM865CHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ IBM865TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplIBM865TextEncodingData
+ = { { &aImplIBM865ByteCvtData,
+ ImplUpperCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "IBM865",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* DOS/OS2, SCRIPT_LATIN, pc code page 865 */
+
+/* ======================================================================= */
+
+/* ISO-8859-14 */
+/* approximately like Latin1 */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-14.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO885914UNI_START 0xA0
+#define ISO885914UNI_END 0xFF
+sal_uInt16 const aImplISO885914ToUniTab[ISO885914UNI_END - ISO885914UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x1E02, 0x1E03, 0x00A3, 0x010A, 0x010B, 0x1E0A, 0x00A7, /* 0xA0 */
+ 0x1E80, 0x00A9, 0x1E82, 0x1E0B, 0x1EF2, 0x00AD, 0x00AE, 0x0178, /* 0xA0 */
+ 0x1E1E, 0x1E1F, 0x0120, 0x0121, 0x1E40, 0x1E41, 0x00B6, 0x1E56, /* 0xB0 */
+ 0x1E81, 0x1E57, 0x1E83, 0x1E60, 0x1EF3, 0x1E84, 0x1E85, 0x1E61, /* 0xB0 */
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0x0174, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x1E6A, /* 0xD0 */
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x0176, 0x00DF, /* 0xD0 */
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x0175, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x1E6B, /* 0xF0 */
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x0177, 0x00FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO885914CHAR_START 0x00C0
+#define ISO885914CHAR_END 0x00FF
+unsigned char const aImplISO885914ToCharTab[ISO885914CHAR_END - ISO885914CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x00C0 */
+ 0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0, /* 0x00D0 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0, 0xDF, /* 0x00D0 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x00E0 */
+ 0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0, /* 0x00F0 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0, 0xFF /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO885914TOCHARTABEX_COUNT 38
+ImplUniCharTabData const aImplISO885914ToCharTabEx[ISO885914TOCHARTABEX_COUNT] =
+{
+ { 0x00A0, 0xA0, 0 },
+ { 0x00A3, 0xA3, 0 },
+ { 0x00A7, 0xA7, 0 },
+ { 0x00A9, 0xA9, 0 },
+ { 0x00AD, 0xAD, 0 },
+ { 0x00AE, 0xAE, 0 },
+ { 0x00B6, 0xB6, 0 },
+ { 0x010A, 0xA4, 0 },
+ { 0x010B, 0xA5, 0 },
+ { 0x0120, 0xB2, 0 },
+ { 0x0121, 0xB3, 0 },
+ { 0x0174, 0xD0, 0 },
+ { 0x0175, 0xF0, 0 },
+ { 0x0176, 0xDE, 0 },
+ { 0x0177, 0xFE, 0 },
+ { 0x0178, 0xAF, 0 },
+ { 0x1E02, 0xA1, 0 },
+ { 0x1E03, 0xA2, 0 },
+ { 0x1E0A, 0xA6, 0 },
+ { 0x1E0B, 0xAB, 0 },
+ { 0x1E1E, 0xB0, 0 },
+ { 0x1E1F, 0xB1, 0 },
+ { 0x1E40, 0xB4, 0 },
+ { 0x1E41, 0xB5, 0 },
+ { 0x1E56, 0xB7, 0 },
+ { 0x1E57, 0xB9, 0 },
+ { 0x1E60, 0xBB, 0 },
+ { 0x1E61, 0xBF, 0 },
+ { 0x1E6A, 0xD7, 0 },
+ { 0x1E6B, 0xF7, 0 },
+ { 0x1E80, 0xA8, 0 },
+ { 0x1E81, 0xB8, 0 },
+ { 0x1E82, 0xAA, 0 },
+ { 0x1E83, 0xBA, 0 },
+ { 0x1E84, 0xBD, 0 },
+ { 0x1E85, 0xBE, 0 },
+ { 0x1EF2, 0xAC, 0 },
+ { 0x1EF3, 0xBC, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO885914ByteCvtData =
+{
+ aImplISO885914ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplISO885914ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplISO885914ToCharTabEx,
+ ISO885914UNI_START, ISO885914UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ ISO885914CHAR_START, ISO885914CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ ISO885914TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO885914TextEncodingData
+ = { { &aImplISO885914ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-14",
+ "iso-8859-14",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_LATIN, pc code page 850 */
+
+/* ======================================================================= */
+
+/* ISO-8859-15 */
+/* approximately like Latin1, but with Euro (former CURRENCY symbol to A4) */
+/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-15.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO885915UNI_START 0xA0
+#define ISO885915UNI_END 0xFF
+sal_uInt16 const aImplISO885915ToUniTab[ISO885915UNI_END - ISO885915UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, /* 0xA0 */
+ 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, /* 0xB0 */
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0xD0 */
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO885915CHAR_START 0x00A0
+#define ISO885915CHAR_END 0x00FF
+unsigned char const aImplISO885915ToCharTab[ISO885915CHAR_END - ISO885915CHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA0, 0xA1, 0xA2, 0xA3, 0, 0xA5, 0, 0xA7, /* 0x00A0 */
+ 0, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */
+ 0xB0, 0xB1, 0xB2, 0xB3, 0, 0xB5, 0xB6, 0xB7, /* 0x00B0 */
+ 0, 0xB9, 0xBA, 0xBB, 0, 0, 0, 0xBF, /* 0x00B0 */
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x00C0 */
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x00D0 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x00D0 */
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x00E0 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x00F0 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define ISO885915TOCHARTABEX_COUNT 8
+ImplUniCharTabData const aImplISO885915ToCharTabEx[ISO885915TOCHARTABEX_COUNT] =
+{
+ { 0x0152, 0xBC, 0 },
+ { 0x0153, 0xBD, 0 },
+ { 0x0160, 0xA6, 0 },
+ { 0x0161, 0xA8, 0 },
+ { 0x0178, 0xBE, 0 },
+ { 0x017D, 0xB4, 0 },
+ { 0x017E, 0xB8, 0 },
+ { 0x20AC, 0xA4, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO885915ByteCvtData =
+{
+ aImplISO885915ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplISO885915ToCharTab,
+ aImpl8090SameToCharTab,
+ aImplISO885915ToCharTabEx,
+ ISO885915UNI_START, ISO885915UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ ISO885915CHAR_START, ISO885915CHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ ISO885915TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO885915TextEncodingData
+ = { { &aImplISO885915ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-15",
+ "iso-8859-15",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_LATIN, pc code page 850 */
+
+/* ======================================================================= */
+
+/* APPLE-Iceland */
+/* Apple CharSet for Iceland */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/iceland.txt from 02/05/98 */
+/* Last-Changes from us: */
+
+#define APPLEICELANDUNI_START 0x80
+#define APPLEICELANDUNI_END 0xFF
+sal_uInt16 const aImplAPPLEICELANDToUniTab[APPLEICELANDUNI_END - APPLEICELANDUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */
+ 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */
+ 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */
+ 0x00DD, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */
+ 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, /* 0xA0 */
+ 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, /* 0xB0 */
+ 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, /* 0xB0 */
+ 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */
+ 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */
+ 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */
+ 0x00FF, 0x0178, 0x2044, 0x00A4, 0x00D0, 0x00F0, 0x00DE, 0x00FE, /* 0xD0 */
+ 0x00FD, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, /* 0xE0 */
+ 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */
+ 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, /* 0xF0 */
+ 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEICELANDCHAR_START 0x00A0
+#define APPLEICELANDCHAR_END 0x00FF
+unsigned char const aImplAPPLEICELANDToCharTab[APPLEICELANDCHAR_END - APPLEICELANDCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCA, 0xC1, 0xA2, 0xA3, 0xDB, 0xB4, 0, 0xA4, /* 0x00A0 */
+ 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */
+ 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */
+ 0xFC, 0, 0xBC, 0xC8, 0, 0, 0, 0xC0, /* 0x00B0 */
+ 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xAE, 0x82, /* 0x00C0 */
+ 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */
+ 0xDC, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */
+ 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0xA0, 0xDE, 0xA7, /* 0x00D0 */
+ 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xBE, 0x8D, /* 0x00E0 */
+ 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */
+ 0xDD, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */
+ 0xBF, 0x9D, 0x9C, 0x9E, 0x9F, 0xE0, 0xDF, 0xD8 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEICELANDTOCHARTABEX_COUNT 41
+ImplUniCharTabData const aImplAPPLEICELANDToCharTabEx[APPLEICELANDTOCHARTABEX_COUNT] =
+{
+ { 0x0131, 0xF5, 0 },
+ { 0x0152, 0xCE, 0 },
+ { 0x0153, 0xCF, 0 },
+ { 0x0178, 0xD9, 0 },
+ { 0x0192, 0xC4, 0 },
+ { 0x02C6, 0xF6, 0 },
+ { 0x02C7, 0xFF, 0 },
+ { 0x02D8, 0xF9, 0 },
+ { 0x02D9, 0xFA, 0 },
+ { 0x02DA, 0xFB, 0 },
+ { 0x02DB, 0xFE, 0 },
+ { 0x02DC, 0xF7, 0 },
+ { 0x02DD, 0xFD, 0 },
+ { 0x03A9, 0xBD, 0 },
+ { 0x03C0, 0xB9, 0 },
+ { 0x2013, 0xD0, 0 },
+ { 0x2014, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201A, 0xE2, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x201E, 0xE3, 0 },
+ { 0x2022, 0xA5, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2030, 0xE4, 0 },
+ { 0x2044, 0xDA, 0 },
+ { 0x2122, 0xAA, 0 },
+ { 0x2202, 0xB6, 0 },
+ { 0x2206, 0xC6, 0 },
+ { 0x220F, 0xB8, 0 },
+ { 0x2211, 0xB7, 0 },
+ { 0x221A, 0xC3, 0 },
+ { 0x221E, 0xB0, 0 },
+ { 0x222B, 0xBA, 0 },
+ { 0x2248, 0xC5, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 },
+ { 0x25CA, 0xD7, 0 },
+ { 0xF8FF, 0xF0, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLEICELANDByteCvtData =
+{
+ aImplAPPLEICELANDToUniTab,
+ nullptr,
+ aImplAPPLEICELANDToCharTab,
+ nullptr,
+ aImplAPPLEICELANDToCharTabEx,
+ APPLEICELANDUNI_START, APPLEICELANDUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ APPLEICELANDCHAR_START, APPLEICELANDCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLEICELANDTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLEICELANDTextEncodingData
+ = { { &aImplAPPLEICELANDByteCvtData,
+ ImplUpperCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "iso-8859-1",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII };
+ /* MAC, SCRIPT_LATIN, pc code page 861, mac encoding 37 */
+
+/* ======================================================================= */
+
+/* APPLE-Roman */
+/* Standard Apple CharSet for Western */
+/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */
+/* which we don't consider, though */
+/* Convert-Tables: mappings/vendors/apple/roman.txt from 08/18/98 */
+/* Last-Changes from us: */
+
+#define APPLEROMANUNI_START 0x80
+#define APPLEROMANUNI_END 0xFF
+sal_uInt16 const aImplAPPLEROMANToUniTab[APPLEROMANUNI_END - APPLEROMANUNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */
+ 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */
+ 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */
+ 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */
+ 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */
+ 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, /* 0xA0 */
+ 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, /* 0xB0 */
+ 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, /* 0xB0 */
+ 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */
+ 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */
+ 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */
+ 0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A, 0xFB01, 0xFB02, /* 0xD0 */
+ 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, /* 0xE0 */
+ 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */
+ 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, /* 0xF0 */
+ 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEROMANCHAR_START 0x00A0
+#define APPLEROMANCHAR_END 0x00FF
+unsigned char const aImplAPPLEROMANToCharTab[APPLEROMANCHAR_END - APPLEROMANCHAR_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCA, 0xC1, 0xA2, 0xA3, 0, 0xB4, 0, 0xA4, /* 0x00A0 */
+ 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */
+ 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */
+ 0xFC, 0, 0xBC, 0xC8, 0, 0, 0, 0xC0, /* 0x00B0 */
+ 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xAE, 0x82, /* 0x00C0 */
+ 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */
+ 0, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */
+ 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0, 0, 0xA7, /* 0x00D0 */
+ 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xBE, 0x8D, /* 0x00E0 */
+ 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */
+ 0, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */
+ 0xBF, 0x9D, 0x9C, 0x9E, 0x9F, 0, 0, 0xD8 /* 0x00F0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define APPLEROMANTOCHARTABEX_COUNT 48
+ImplUniCharTabData const aImplAPPLEROMANToCharTabEx[APPLEROMANTOCHARTABEX_COUNT] =
+{
+ { 0x0131, 0xF5, 0 },
+ { 0x0152, 0xCE, 0 },
+ { 0x0153, 0xCF, 0 },
+ { 0x0178, 0xD9, 0 },
+ { 0x0192, 0xC4, 0 },
+ { 0x02C6, 0xF6, 0 },
+ { 0x02C7, 0xFF, 0 },
+ { 0x02D8, 0xF9, 0 },
+ { 0x02D9, 0xFA, 0 },
+ { 0x02DA, 0xFB, 0 },
+ { 0x02DB, 0xFE, 0 },
+ { 0x02DC, 0xF7, 0 },
+ { 0x02DD, 0xFD, 0 },
+ { 0x03A9, 0xBD, 0 },
+ { 0x03C0, 0xB9, 0 },
+ { 0x2013, 0xD0, 0 },
+ { 0x2014, 0xD1, 0 },
+ { 0x2018, 0xD4, 0 },
+ { 0x2019, 0xD5, 0 },
+ { 0x201A, 0xE2, 0 },
+ { 0x201C, 0xD2, 0 },
+ { 0x201D, 0xD3, 0 },
+ { 0x201E, 0xE3, 0 },
+ { 0x2020, 0xA0, 0 },
+ { 0x2021, 0xE0, 0 },
+ { 0x2022, 0xA5, 0 },
+ { 0x2026, 0xC9, 0 },
+ { 0x2030, 0xE4, 0 },
+ { 0x2039, 0xDC, 0 },
+ { 0x203A, 0xDD, 0 },
+ { 0x2044, 0xDA, 0 },
+ { 0x20AC, 0xDB, 0 },
+ { 0x2122, 0xAA, 0 },
+ { 0x2202, 0xB6, 0 },
+ { 0x2206, 0xC6, 0 },
+ { 0x220F, 0xB8, 0 },
+ { 0x2211, 0xB7, 0 },
+ { 0x221A, 0xC3, 0 },
+ { 0x221E, 0xB0, 0 },
+ { 0x222B, 0xBA, 0 },
+ { 0x2248, 0xC5, 0 },
+ { 0x2260, 0xAD, 0 },
+ { 0x2264, 0xB2, 0 },
+ { 0x2265, 0xB3, 0 },
+ { 0x25CA, 0xD7, 0 },
+ { 0xF8FF, 0xF0, 0 },
+ { 0xFB01, 0xDE, 0 },
+ { 0xFB02, 0xDF, 0 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplAPPLEROMANByteCvtData =
+{
+ aImplAPPLEROMANToUniTab,
+ nullptr,
+ aImplAPPLEROMANToCharTab,
+ nullptr,
+ aImplAPPLEROMANToCharTabEx,
+ APPLEROMANUNI_START, APPLEROMANUNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ APPLEROMANCHAR_START, APPLEROMANCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ APPLEROMANTOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLEROMANTextEncodingData
+ = { { &aImplAPPLEROMANByteCvtData,
+ ImplUpperCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "macintosh",
+ 1,
+ 1,
+ 1,
+ 77,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* MAC, SCRIPT_LATIN, pc code page 850 */
diff --git a/sal/textenc/tcvtmb.cxx b/sal/textenc/tcvtmb.cxx
new file mode 100644
index 000000000..89e89c56c
--- /dev/null
+++ b/sal/textenc/tcvtmb.cxx
@@ -0,0 +1,682 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/textcvt.h>
+
+#include "handleundefinedunicodetotextchar.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+/* DBCS to Unicode conversion routine use a lead table for the first byte, */
+/* where we determine the trail table or for single byte chars the unicode */
+/* value. We have for all lead byte a separate table, because we can */
+/* then share many tables for different charset encodings. */
+
+sal_Size ImplDBCSToUnicode( const void* pData, SAL_UNUSED_PARAMETER void*,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes )
+{
+ unsigned char cTrail;
+ sal_Unicode cConv;
+ const ImplDBCSToUniLeadTab* pLeadEntry;
+ const ImplDBCSConvertData* pConvertData = static_cast<const ImplDBCSConvertData*>(pData);
+ const ImplDBCSToUniLeadTab* pLeadTab = pConvertData->mpToUniLeadTab;
+ sal_Unicode* pEndDestBuf;
+ const char* pEndSrcBuf;
+ char const * startOfCurrentChar = pSrcBuf;
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestChars;
+ pEndSrcBuf = pSrcBuf+nSrcBytes;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ unsigned char cLead = static_cast<unsigned char>(*pSrcBuf);
+
+ /* get entry for the lead byte */
+ pLeadEntry = pLeadTab+cLead;
+
+ /* SingleByte char? */
+ if (pLeadEntry->mpToUniTrailTab == nullptr
+ || cLead < pConvertData->mnLeadStart
+ || cLead > pConvertData->mnLeadEnd)
+ {
+ cConv = pLeadEntry->mnUniChar;
+ if ( !cConv && (cLead != 0) )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_UNDEFINED;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR )
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++pSrcBuf;
+ } else {
+ pSrcBuf = startOfCurrentChar;
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_IGNORE )
+ {
+ pSrcBuf++;
+ startOfCurrentChar = pSrcBuf;
+ continue;
+ }
+ cConv = ImplGetUndefinedUnicodeChar(cLead, nFlags);
+ }
+ }
+ else
+ {
+ /* Source buffer too small */
+ if ( pSrcBuf +1 == pEndSrcBuf )
+ {
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0 )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ break;
+ }
+ cConv = 0;
+ }
+ else
+ {
+ pSrcBuf++;
+ cTrail = static_cast<unsigned char>(*pSrcBuf);
+ if ( (cTrail >= pLeadEntry->mnTrailStart) && (cTrail <= pLeadEntry->mnTrailEnd) )
+ cConv = pLeadEntry->mpToUniTrailTab[cTrail-pLeadEntry->mnTrailStart];
+ else
+ cConv = 0;
+
+ if ( !cConv )
+ {
+ /* EUDC Ranges */
+ sal_uInt16 i;
+ const ImplDBCSEUDCData* pEUDCTab = pConvertData->mpEUDCTab;
+ for ( i = 0; i < pConvertData->mnEUDCCount; i++ )
+ {
+ if ( (cLead >= pEUDCTab->mnLeadStart) &&
+ (cLead <= pEUDCTab->mnLeadEnd) )
+ {
+ if ( (cTrail >= pEUDCTab->mnTrail1Start) &&
+ (cTrail <= pEUDCTab->mnTrail1End) )
+ {
+ cConv = pEUDCTab->mnUniStart+
+ ((cLead-pEUDCTab->mnLeadStart)*pEUDCTab->mnTrailRangeCount)+
+ (cTrail-pEUDCTab->mnTrail1Start);
+ break;
+ }
+ sal_uInt16 nTrailCount = pEUDCTab->mnTrail1End-pEUDCTab->mnTrail1Start+1;
+ if ( (pEUDCTab->mnTrailCount >= 2) &&
+ (cTrail >= pEUDCTab->mnTrail2Start) &&
+ (cTrail <= pEUDCTab->mnTrail2End) )
+ {
+ cConv = pEUDCTab->mnUniStart+
+ ((cLead-pEUDCTab->mnLeadStart)*pEUDCTab->mnTrailRangeCount)+
+ nTrailCount+
+ (cTrail-pEUDCTab->mnTrail2Start);
+ break;
+ }
+ nTrailCount = pEUDCTab->mnTrail2End-pEUDCTab->mnTrail2Start+1;
+ if ( (pEUDCTab->mnTrailCount >= 3) &&
+ (cTrail >= pEUDCTab->mnTrail3Start) &&
+ (cTrail <= pEUDCTab->mnTrail3End) )
+ {
+ cConv = pEUDCTab->mnUniStart+
+ ((cLead-pEUDCTab->mnLeadStart)*pEUDCTab->mnTrailRangeCount)+
+ nTrailCount+
+ (cTrail-pEUDCTab->mnTrail3Start);
+ break;
+ }
+ }
+
+ pEUDCTab++;
+ }
+
+ if ( !cConv )
+ {
+ /* We compare the full range of the trail we defined, */
+ /* which can often be greater than the limit. We do this */
+ /* so that extensions that don't consider encodings */
+ /* correctly treat double-byte characters as a single */
+ /* character as much as possible. */
+
+ if (cLead < pConvertData->mnLeadStart
+ || cLead > pConvertData->mnLeadEnd
+ || cTrail < pConvertData->mnTrailStart
+ || cTrail > pConvertData->mnTrailEnd)
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR )
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++pSrcBuf;
+ } else {
+ pSrcBuf = startOfCurrentChar;
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE )
+ {
+ pSrcBuf++;
+ startOfCurrentChar = pSrcBuf;
+ continue;
+ }
+ cConv = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+ }
+ }
+ }
+ }
+ if ( !cConv )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_MBUNDEFINED;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR )
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++pSrcBuf;
+ } else {
+ pSrcBuf = startOfCurrentChar;
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_IGNORE )
+ {
+ pSrcBuf++;
+ startOfCurrentChar = pSrcBuf;
+ continue;
+ }
+ cConv = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+ }
+ }
+
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ *pDestBuf = cConv;
+ pDestBuf++;
+ pSrcBuf++;
+ startOfCurrentChar = pSrcBuf;
+ }
+
+ *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf);
+ return (nDestChars - (pEndDestBuf-pDestBuf));
+}
+
+sal_Size ImplUnicodeToDBCS( const void* pData, SAL_UNUSED_PARAMETER void*,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars )
+{
+ sal_uInt16 cConv;
+ sal_Unicode c;
+ const ImplUniToDBCSHighTab* pHighEntry;
+ const ImplDBCSConvertData* pConvertData = static_cast<const ImplDBCSConvertData*>(pData);
+ const ImplUniToDBCSHighTab* pHighTab = pConvertData->mpToDBCSHighTab;
+ char* pEndDestBuf;
+ const sal_Unicode* pEndSrcBuf;
+
+ bool bCheckRange =
+ pConvertData->mnLeadStart != 0 || pConvertData->mnLeadEnd != 0xFF;
+ /* this statement has the effect that this extra check is only done for
+ EUC-KR, which uses the MS-949 tables, but does not support the full
+ range of MS-949 */
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestBytes;
+ pEndSrcBuf = pSrcBuf+nSrcChars;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ c = *pSrcBuf;
+ unsigned char nHighChar = static_cast<unsigned char>((c >> 8) & 0xFF);
+ unsigned char nLowChar = static_cast<unsigned char>(c & 0xFF);
+
+ /* get entry for the high byte */
+ pHighEntry = pHighTab+nHighChar;
+
+ /* is low byte in the table range */
+ if ( (nLowChar >= pHighEntry->mnLowStart) && (nLowChar <= pHighEntry->mnLowEnd) )
+ {
+ cConv = pHighEntry->mpToUniTrailTab[nLowChar-pHighEntry->mnLowStart];
+ if (bCheckRange && cConv > 0x7F
+ && ((cConv >> 8) < pConvertData->mnLeadStart
+ || (cConv >> 8) > pConvertData->mnLeadEnd
+ || (cConv & 0xFF) < pConvertData->mnTrailStart
+ || (cConv & 0xFF) > pConvertData->mnTrailEnd))
+ cConv = 0;
+ }
+ else
+ cConv = 0;
+
+ if (cConv == 0 && c != 0)
+ {
+ /* Map to EUDC ranges: */
+ ImplDBCSEUDCData const * pEUDCTab = pConvertData->mpEUDCTab;
+ sal_uInt32 i;
+ for (i = 0; i < pConvertData->mnEUDCCount; ++i)
+ {
+ if (c >= pEUDCTab->mnUniStart && c <= pEUDCTab->mnUniEnd)
+ {
+ sal_uInt32 nIndex = c - pEUDCTab->mnUniStart;
+ sal_uInt32 nLeadOff
+ = nIndex / pEUDCTab->mnTrailRangeCount;
+ sal_uInt32 nTrailOff
+ = nIndex % pEUDCTab->mnTrailRangeCount;
+ sal_uInt32 nSize;
+ cConv = static_cast<sal_uInt16>((pEUDCTab->mnLeadStart + nLeadOff) << 8);
+ nSize
+ = pEUDCTab->mnTrail1End - pEUDCTab->mnTrail1Start + 1;
+ if (nTrailOff < nSize)
+ {
+ cConv |= pEUDCTab->mnTrail1Start + nTrailOff;
+ break;
+ }
+ nTrailOff -= nSize;
+ nSize
+ = pEUDCTab->mnTrail2End - pEUDCTab->mnTrail2Start + 1;
+ if (nTrailOff < nSize)
+ {
+ cConv |= pEUDCTab->mnTrail2Start + nTrailOff;
+ break;
+ }
+ nTrailOff -= nSize;
+ cConv |= pEUDCTab->mnTrail3Start + nTrailOff;
+ break;
+ }
+ pEUDCTab++;
+ }
+
+ /* FIXME
+ * SB: Not sure why this is in here. Plus, it does not work as
+ * intended when (c & 0xFF) == 0, because the next !cConv check
+ * will then think c has not yet been converted...
+ */
+ if (c >= RTL_TEXTCVT_BYTE_PRIVATE_START
+ && c <= RTL_TEXTCVT_BYTE_PRIVATE_END)
+ {
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0 )
+ cConv = static_cast< char >(static_cast< unsigned char >(c & 0xFF));
+ }
+ }
+
+ if (cConv == 0 && c != 0)
+ {
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE )
+ {
+ /* !!! */
+ }
+
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR )
+ {
+ /* !!! */
+ }
+
+ /* Handle undefined and surrogates characters */
+ /* (all surrogates characters are undefined) */
+ if (sal::detail::textenc::handleUndefinedUnicodeToTextChar(
+ &pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf, nFlags,
+ pInfo))
+ continue;
+ break;
+ }
+
+ /* SingleByte */
+ if ( !(cConv & 0xFF00) )
+ {
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF));
+ pDestBuf++;
+ }
+ else
+ {
+ if ( pDestBuf+1 >= pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >((cConv >> 8) & 0xFF));
+ pDestBuf++;
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF));
+ pDestBuf++;
+ }
+
+ pSrcBuf++;
+ }
+
+ *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf);
+ return (nDestBytes - (pEndDestBuf-pDestBuf));
+}
+
+#define JIS_EUC_LEAD_OFF 0x80
+#define JIS_EUC_TRAIL_OFF 0x80
+
+sal_Size ImplEUCJPToUnicode( const void* pData,
+ SAL_UNUSED_PARAMETER void*,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes )
+{
+ unsigned char cLead = '\0';
+ unsigned char cTrail = '\0';
+ sal_Unicode cConv;
+ const ImplDBCSToUniLeadTab* pLeadEntry;
+ const ImplDBCSToUniLeadTab* pLeadTab;
+ const ImplEUCJPConvertData* pConvertData = static_cast<const ImplEUCJPConvertData*>(pData);
+ sal_Unicode* pEndDestBuf;
+ const char* pEndSrcBuf;
+ char const * startOfCurrentChar = pSrcBuf;
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestChars;
+ pEndSrcBuf = pSrcBuf+nSrcBytes;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ unsigned char c = static_cast<unsigned char>(*pSrcBuf);
+
+ /* ASCII */
+ if ( c <= 0x7F )
+ cConv = c;
+ else
+ {
+ /* SS2 - Half-width katakana */
+ /* 8E + A1-DF */
+ if ( c == 0x8E )
+ {
+ /* Source buffer too small */
+ if ( pSrcBuf + 1 == pEndSrcBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ break;
+ }
+
+ pSrcBuf++;
+ c = static_cast<unsigned char>(*pSrcBuf);
+ if ( (c >= 0xA1) && (c <= 0xDF) )
+ cConv = 0xFF61+(c-0xA1);
+ else
+ {
+ cConv = 0;
+ cLead = 0x8E;
+ cTrail = c;
+ }
+ }
+ else
+ {
+ /* SS3 - JIS 0212-1990 */
+ /* 8F + A1-FE + A1-FE */
+ if ( c == 0x8F )
+ {
+ /* Source buffer too small */
+ if (pEndSrcBuf - pSrcBuf < 3)
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ break;
+ }
+
+ pSrcBuf++;
+ cLead = static_cast<unsigned char>(*pSrcBuf);
+ pSrcBuf++;
+ cTrail = static_cast<unsigned char>(*pSrcBuf);
+ pLeadTab = pConvertData->mpJIS0212ToUniLeadTab;
+ }
+ /* CodeSet 2 JIS 0208-1997 */
+ /* A1-FE + A1-FE */
+ else
+ {
+ /* Source buffer too small */
+ if ( pSrcBuf + 1 == pEndSrcBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ break;
+ }
+
+ cLead = c;
+ pSrcBuf++;
+ cTrail = static_cast<unsigned char>(*pSrcBuf);
+ pLeadTab = pConvertData->mpJIS0208ToUniLeadTab;
+ }
+
+ /* Undefined Range */
+ if ( (cLead < JIS_EUC_LEAD_OFF) || (cTrail < JIS_EUC_TRAIL_OFF) )
+ cConv = 0;
+ else
+ {
+ cLead -= JIS_EUC_LEAD_OFF;
+ cTrail -= JIS_EUC_TRAIL_OFF;
+ pLeadEntry = pLeadTab+cLead;
+ if ( (cTrail >= pLeadEntry->mnTrailStart) && (cTrail <= pLeadEntry->mnTrailEnd) )
+ cConv = pLeadEntry->mpToUniTrailTab[cTrail-pLeadEntry->mnTrailStart];
+ else
+ cConv = 0;
+ }
+ }
+
+ if ( !cConv )
+ {
+ /* We compare the full range of the trail we defined, */
+ /* which can often be greater than the limit. We do this */
+ /* so that extensions that don't consider encodings */
+ /* correctly treat double-byte characters as a single */
+ /* character as much as possible. */
+
+ if ( (cLead < JIS_EUC_LEAD_OFF) || (cTrail < JIS_EUC_TRAIL_OFF) )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR )
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++pSrcBuf;
+ } else {
+ pSrcBuf = startOfCurrentChar;
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE )
+ {
+ pSrcBuf++;
+ startOfCurrentChar = pSrcBuf;
+ continue;
+ }
+ cConv = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+ }
+ else
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++pSrcBuf;
+ } else {
+ pSrcBuf = startOfCurrentChar;
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_MBUNDEFINED;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_IGNORE )
+ {
+ pSrcBuf++;
+ startOfCurrentChar = pSrcBuf;
+ continue;
+ }
+ cConv = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+ }
+ }
+ }
+
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ *pDestBuf = cConv;
+ pDestBuf++;
+ pSrcBuf++;
+ startOfCurrentChar = pSrcBuf;
+ }
+
+ *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf);
+ return (nDestChars - (pEndDestBuf-pDestBuf));
+}
+
+sal_Size ImplUnicodeToEUCJP( const void* pData,
+ SAL_UNUSED_PARAMETER void*,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars )
+{
+ sal_uInt32 cConv;
+ sal_Unicode c;
+ unsigned char nHighChar;
+ unsigned char nLowChar;
+ const ImplUniToDBCSHighTab* pHighEntry;
+ const ImplUniToDBCSHighTab* pHighTab;
+ const ImplEUCJPConvertData* pConvertData = static_cast<const ImplEUCJPConvertData*>(pData);
+ char* pEndDestBuf;
+ const sal_Unicode* pEndSrcBuf;
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestBytes;
+ pEndSrcBuf = pSrcBuf+nSrcChars;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ c = *pSrcBuf;
+
+ /* ASCII */
+ if ( c <= 0x7F )
+ cConv = c;
+ /* Half-width katakana */
+ else if ( (c >= 0xFF61) && (c <= 0xFF9F) )
+ cConv = 0x8E00+0xA1+(c-0xFF61);
+ else
+ {
+ nHighChar = static_cast<unsigned char>((c >> 8) & 0xFF);
+ nLowChar = static_cast<unsigned char>(c & 0xFF);
+
+ /* JIS 0208 */
+ pHighTab = pConvertData->mpUniToJIS0208HighTab;
+ pHighEntry = pHighTab+nHighChar;
+ if ( (nLowChar >= pHighEntry->mnLowStart) && (nLowChar <= pHighEntry->mnLowEnd) )
+ {
+ cConv = pHighEntry->mpToUniTrailTab[nLowChar-pHighEntry->mnLowStart];
+ if (cConv != 0)
+ cConv |= 0x8080;
+ }
+ else
+ cConv = 0;
+
+ /* JIS 0212 */
+ if ( !cConv )
+ {
+ pHighTab = pConvertData->mpUniToJIS0212HighTab;
+ pHighEntry = pHighTab+nHighChar;
+ if ( (nLowChar >= pHighEntry->mnLowStart) && (nLowChar <= pHighEntry->mnLowEnd) )
+ {
+ cConv = pHighEntry->mpToUniTrailTab[nLowChar-pHighEntry->mnLowStart];
+ if (cConv != 0)
+ cConv |= 0x8F8080;
+ }
+
+ if ( !cConv )
+ {
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE )
+ {
+ /* !!! */
+ }
+
+ if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR )
+ {
+ /* !!! */
+ }
+
+ /* Handle undefined and surrogates characters */
+ /* (all surrogates characters are undefined) */
+ if (sal::detail::textenc::handleUndefinedUnicodeToTextChar(
+ &pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf,
+ nFlags, pInfo))
+ continue;
+ break;
+ }
+ }
+ }
+
+ /* SingleByte */
+ if ( !(cConv & 0xFFFF00) )
+ {
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF));
+ pDestBuf++;
+ }
+ /* DoubleByte */
+ else if ( !(cConv & 0xFF0000) )
+ {
+ if ( pDestBuf+1 >= pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >((cConv >> 8) & 0xFF));
+ pDestBuf++;
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF));
+ pDestBuf++;
+ }
+ else
+ {
+ if ( pDestBuf+2 >= pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >((cConv >> 16) & 0xFF));
+ pDestBuf++;
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >((cConv >> 8) & 0xFF));
+ pDestBuf++;
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF));
+ pDestBuf++;
+ }
+
+ pSrcBuf++;
+ }
+
+ *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf);
+ return (nDestBytes - (pEndDestBuf-pDestBuf));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/tcvtscn1.tab b/sal/textenc/tcvtscn1.tab
new file mode 100644
index 000000000..20e412c93
--- /dev/null
+++ b/sal/textenc/tcvtscn1.tab
@@ -0,0 +1,3851 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the DBCS to UniCode tables for the following */
+/* chinese simplified (China) charsets: */
+/* GB (GB2312), GBK, MS936, APPLE_CHINSIMP */
+
+/* GBK is a superset of GB2312, so we have only GBK tables. The offset is */
+/* added in the lead byte tables. */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E02, 0x4E04, 0x4E05, 0x4E06, 0x4E0F, 0x4E12, 0x4E17, 0x4E1F, /* 0x40 */
+ 0x4E20, 0x4E21, 0x4E23, 0x4E26, 0x4E29, 0x4E2E, 0x4E2F, 0x4E31, /* 0x40 */
+ 0x4E33, 0x4E35, 0x4E37, 0x4E3C, 0x4E40, 0x4E41, 0x4E42, 0x4E44, /* 0x50 */
+ 0x4E46, 0x4E4A, 0x4E51, 0x4E55, 0x4E57, 0x4E5A, 0x4E5B, 0x4E62, /* 0x50 */
+ 0x4E63, 0x4E64, 0x4E65, 0x4E67, 0x4E68, 0x4E6A, 0x4E6B, 0x4E6C, /* 0x60 */
+ 0x4E6D, 0x4E6E, 0x4E6F, 0x4E72, 0x4E74, 0x4E75, 0x4E76, 0x4E77, /* 0x60 */
+ 0x4E78, 0x4E79, 0x4E7A, 0x4E7B, 0x4E7C, 0x4E7D, 0x4E7F, 0x4E80, /* 0x70 */
+ 0x4E81, 0x4E82, 0x4E83, 0x4E84, 0x4E85, 0x4E87, 0x4E8A, 0, /* 0x70 */
+ 0x4E90, 0x4E96, 0x4E97, 0x4E99, 0x4E9C, 0x4E9D, 0x4E9E, 0x4EA3, /* 0x80 */
+ 0x4EAA, 0x4EAF, 0x4EB0, 0x4EB1, 0x4EB4, 0x4EB6, 0x4EB7, 0x4EB8, /* 0x80 */
+ 0x4EB9, 0x4EBC, 0x4EBD, 0x4EBE, 0x4EC8, 0x4ECC, 0x4ECF, 0x4ED0, /* 0x90 */
+ 0x4ED2, 0x4EDA, 0x4EDB, 0x4EDC, 0x4EE0, 0x4EE2, 0x4EE6, 0x4EE7, /* 0x90 */
+ 0x4EE9, 0x4EED, 0x4EEE, 0x4EEF, 0x4EF1, 0x4EF4, 0x4EF8, 0x4EF9, /* 0xA0 */
+ 0x4EFA, 0x4EFC, 0x4EFE, 0x4F00, 0x4F02, 0x4F03, 0x4F04, 0x4F05, /* 0xA0 */
+ 0x4F06, 0x4F07, 0x4F08, 0x4F0B, 0x4F0C, 0x4F12, 0x4F13, 0x4F14, /* 0xB0 */
+ 0x4F15, 0x4F16, 0x4F1C, 0x4F1D, 0x4F21, 0x4F23, 0x4F28, 0x4F29, /* 0xB0 */
+ 0x4F2C, 0x4F2D, 0x4F2E, 0x4F31, 0x4F33, 0x4F35, 0x4F37, 0x4F39, /* 0xC0 */
+ 0x4F3B, 0x4F3E, 0x4F3F, 0x4F40, 0x4F41, 0x4F42, 0x4F44, 0x4F45, /* 0xC0 */
+ 0x4F47, 0x4F48, 0x4F49, 0x4F4A, 0x4F4B, 0x4F4C, 0x4F52, 0x4F54, /* 0xD0 */
+ 0x4F56, 0x4F61, 0x4F62, 0x4F66, 0x4F68, 0x4F6A, 0x4F6B, 0x4F6D, /* 0xD0 */
+ 0x4F6E, 0x4F71, 0x4F72, 0x4F75, 0x4F77, 0x4F78, 0x4F79, 0x4F7A, /* 0xE0 */
+ 0x4F7D, 0x4F80, 0x4F81, 0x4F82, 0x4F85, 0x4F86, 0x4F87, 0x4F8A, /* 0xE0 */
+ 0x4F8C, 0x4F8E, 0x4F90, 0x4F92, 0x4F93, 0x4F95, 0x4F96, 0x4F98, /* 0xF0 */
+ 0x4F99, 0x4F9A, 0x4F9C, 0x4F9E, 0x4F9F, 0x4FA1, 0x4FA2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4FA4, 0x4FAB, 0x4FAD, 0x4FB0, 0x4FB1, 0x4FB2, 0x4FB3, 0x4FB4, /* 0x40 */
+ 0x4FB6, 0x4FB7, 0x4FB8, 0x4FB9, 0x4FBA, 0x4FBB, 0x4FBC, 0x4FBD, /* 0x40 */
+ 0x4FBE, 0x4FC0, 0x4FC1, 0x4FC2, 0x4FC6, 0x4FC7, 0x4FC8, 0x4FC9, /* 0x50 */
+ 0x4FCB, 0x4FCC, 0x4FCD, 0x4FD2, 0x4FD3, 0x4FD4, 0x4FD5, 0x4FD6, /* 0x50 */
+ 0x4FD9, 0x4FDB, 0x4FE0, 0x4FE2, 0x4FE4, 0x4FE5, 0x4FE7, 0x4FEB, /* 0x60 */
+ 0x4FEC, 0x4FF0, 0x4FF2, 0x4FF4, 0x4FF5, 0x4FF6, 0x4FF7, 0x4FF9, /* 0x60 */
+ 0x4FFB, 0x4FFC, 0x4FFD, 0x4FFF, 0x5000, 0x5001, 0x5002, 0x5003, /* 0x70 */
+ 0x5004, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, 0x500A, 0, /* 0x70 */
+ 0x500B, 0x500E, 0x5010, 0x5011, 0x5013, 0x5015, 0x5016, 0x5017, /* 0x80 */
+ 0x501B, 0x501D, 0x501E, 0x5020, 0x5022, 0x5023, 0x5024, 0x5027, /* 0x80 */
+ 0x502B, 0x502F, 0x5030, 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, /* 0x90 */
+ 0x5036, 0x5037, 0x5038, 0x5039, 0x503B, 0x503D, 0x503F, 0x5040, /* 0x90 */
+ 0x5041, 0x5042, 0x5044, 0x5045, 0x5046, 0x5049, 0x504A, 0x504B, /* 0xA0 */
+ 0x504D, 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5056, 0x5057, /* 0xA0 */
+ 0x5058, 0x5059, 0x505B, 0x505D, 0x505E, 0x505F, 0x5060, 0x5061, /* 0xB0 */
+ 0x5062, 0x5063, 0x5064, 0x5066, 0x5067, 0x5068, 0x5069, 0x506A, /* 0xB0 */
+ 0x506B, 0x506D, 0x506E, 0x506F, 0x5070, 0x5071, 0x5072, 0x5073, /* 0xC0 */
+ 0x5074, 0x5075, 0x5078, 0x5079, 0x507A, 0x507C, 0x507D, 0x5081, /* 0xC0 */
+ 0x5082, 0x5083, 0x5084, 0x5086, 0x5087, 0x5089, 0x508A, 0x508B, /* 0xD0 */
+ 0x508C, 0x508E, 0x508F, 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, /* 0xD0 */
+ 0x5095, 0x5096, 0x5097, 0x5098, 0x5099, 0x509A, 0x509B, 0x509C, /* 0xE0 */
+ 0x509D, 0x509E, 0x509F, 0x50A0, 0x50A1, 0x50A2, 0x50A4, 0x50A6, /* 0xE0 */
+ 0x50AA, 0x50AB, 0x50AD, 0x50AE, 0x50AF, 0x50B0, 0x50B1, 0x50B3, /* 0xF0 */
+ 0x50B4, 0x50B5, 0x50B6, 0x50B7, 0x50B8, 0x50B9, 0x50BC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x50BD, 0x50BE, 0x50BF, 0x50C0, 0x50C1, 0x50C2, 0x50C3, 0x50C4, /* 0x40 */
+ 0x50C5, 0x50C6, 0x50C7, 0x50C8, 0x50C9, 0x50CA, 0x50CB, 0x50CC, /* 0x40 */
+ 0x50CD, 0x50CE, 0x50D0, 0x50D1, 0x50D2, 0x50D3, 0x50D4, 0x50D5, /* 0x50 */
+ 0x50D7, 0x50D8, 0x50D9, 0x50DB, 0x50DC, 0x50DD, 0x50DE, 0x50DF, /* 0x50 */
+ 0x50E0, 0x50E1, 0x50E2, 0x50E3, 0x50E4, 0x50E5, 0x50E8, 0x50E9, /* 0x60 */
+ 0x50EA, 0x50EB, 0x50EF, 0x50F0, 0x50F1, 0x50F2, 0x50F4, 0x50F6, /* 0x60 */
+ 0x50F7, 0x50F8, 0x50F9, 0x50FA, 0x50FC, 0x50FD, 0x50FE, 0x50FF, /* 0x70 */
+ 0x5100, 0x5101, 0x5102, 0x5103, 0x5104, 0x5105, 0x5108, 0, /* 0x70 */
+ 0x5109, 0x510A, 0x510C, 0x510D, 0x510E, 0x510F, 0x5110, 0x5111, /* 0x80 */
+ 0x5113, 0x5114, 0x5115, 0x5116, 0x5117, 0x5118, 0x5119, 0x511A, /* 0x80 */
+ 0x511B, 0x511C, 0x511D, 0x511E, 0x511F, 0x5120, 0x5122, 0x5123, /* 0x90 */
+ 0x5124, 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512A, 0x512B, /* 0x90 */
+ 0x512C, 0x512D, 0x512E, 0x512F, 0x5130, 0x5131, 0x5132, 0x5133, /* 0xA0 */
+ 0x5134, 0x5135, 0x5136, 0x5137, 0x5138, 0x5139, 0x513A, 0x513B, /* 0xA0 */
+ 0x513C, 0x513D, 0x513E, 0x5142, 0x5147, 0x514A, 0x514C, 0x514E, /* 0xB0 */
+ 0x514F, 0x5150, 0x5152, 0x5153, 0x5157, 0x5158, 0x5159, 0x515B, /* 0xB0 */
+ 0x515D, 0x515E, 0x515F, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166, /* 0xC0 */
+ 0x5167, 0x5169, 0x516A, 0x516F, 0x5172, 0x517A, 0x517E, 0x517F, /* 0xC0 */
+ 0x5183, 0x5184, 0x5186, 0x5187, 0x518A, 0x518B, 0x518E, 0x518F, /* 0xD0 */
+ 0x5190, 0x5191, 0x5193, 0x5194, 0x5198, 0x519A, 0x519D, 0x519E, /* 0xD0 */
+ 0x519F, 0x51A1, 0x51A3, 0x51A6, 0x51A7, 0x51A8, 0x51A9, 0x51AA, /* 0xE0 */
+ 0x51AD, 0x51AE, 0x51B4, 0x51B8, 0x51B9, 0x51BA, 0x51BE, 0x51BF, /* 0xE0 */
+ 0x51C1, 0x51C2, 0x51C3, 0x51C5, 0x51C8, 0x51CA, 0x51CD, 0x51CE, /* 0xF0 */
+ 0x51D0, 0x51D2, 0x51D3, 0x51D4, 0x51D5, 0x51D6, 0x51D7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x51D8, 0x51D9, 0x51DA, 0x51DC, 0x51DE, 0x51DF, 0x51E2, 0x51E3, /* 0x40 */
+ 0x51E5, 0x51E6, 0x51E7, 0x51E8, 0x51E9, 0x51EA, 0x51EC, 0x51EE, /* 0x40 */
+ 0x51F1, 0x51F2, 0x51F4, 0x51F7, 0x51FE, 0x5204, 0x5205, 0x5209, /* 0x50 */
+ 0x520B, 0x520C, 0x520F, 0x5210, 0x5213, 0x5214, 0x5215, 0x521C, /* 0x50 */
+ 0x521E, 0x521F, 0x5221, 0x5222, 0x5223, 0x5225, 0x5226, 0x5227, /* 0x60 */
+ 0x522A, 0x522C, 0x522F, 0x5231, 0x5232, 0x5234, 0x5235, 0x523C, /* 0x60 */
+ 0x523E, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524B, /* 0x70 */
+ 0x524E, 0x524F, 0x5252, 0x5253, 0x5255, 0x5257, 0x5258, 0, /* 0x70 */
+ 0x5259, 0x525A, 0x525B, 0x525D, 0x525F, 0x5260, 0x5262, 0x5263, /* 0x80 */
+ 0x5264, 0x5266, 0x5268, 0x526B, 0x526C, 0x526D, 0x526E, 0x5270, /* 0x80 */
+ 0x5271, 0x5273, 0x5274, 0x5275, 0x5276, 0x5277, 0x5278, 0x5279, /* 0x90 */
+ 0x527A, 0x527B, 0x527C, 0x527E, 0x5280, 0x5283, 0x5284, 0x5285, /* 0x90 */
+ 0x5286, 0x5287, 0x5289, 0x528A, 0x528B, 0x528C, 0x528D, 0x528E, /* 0xA0 */
+ 0x528F, 0x5291, 0x5292, 0x5294, 0x5295, 0x5296, 0x5297, 0x5298, /* 0xA0 */
+ 0x5299, 0x529A, 0x529C, 0x52A4, 0x52A5, 0x52A6, 0x52A7, 0x52AE, /* 0xB0 */
+ 0x52AF, 0x52B0, 0x52B4, 0x52B5, 0x52B6, 0x52B7, 0x52B8, 0x52B9, /* 0xB0 */
+ 0x52BA, 0x52BB, 0x52BC, 0x52BD, 0x52C0, 0x52C1, 0x52C2, 0x52C4, /* 0xC0 */
+ 0x52C5, 0x52C6, 0x52C8, 0x52CA, 0x52CC, 0x52CD, 0x52CE, 0x52CF, /* 0xC0 */
+ 0x52D1, 0x52D3, 0x52D4, 0x52D5, 0x52D7, 0x52D9, 0x52DA, 0x52DB, /* 0xD0 */
+ 0x52DC, 0x52DD, 0x52DE, 0x52E0, 0x52E1, 0x52E2, 0x52E3, 0x52E5, /* 0xD0 */
+ 0x52E6, 0x52E7, 0x52E8, 0x52E9, 0x52EA, 0x52EB, 0x52EC, 0x52ED, /* 0xE0 */
+ 0x52EE, 0x52EF, 0x52F1, 0x52F2, 0x52F3, 0x52F4, 0x52F5, 0x52F6, /* 0xE0 */
+ 0x52F7, 0x52F8, 0x52FB, 0x52FC, 0x52FD, 0x5301, 0x5302, 0x5303, /* 0xF0 */
+ 0x5304, 0x5307, 0x5309, 0x530A, 0x530B, 0x530C, 0x530E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5311, 0x5312, 0x5313, 0x5314, 0x5318, 0x531B, 0x531C, 0x531E, /* 0x40 */
+ 0x531F, 0x5322, 0x5324, 0x5325, 0x5327, 0x5328, 0x5329, 0x532B, /* 0x40 */
+ 0x532C, 0x532D, 0x532F, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334, /* 0x50 */
+ 0x5335, 0x5336, 0x5337, 0x5338, 0x533C, 0x533D, 0x5340, 0x5342, /* 0x50 */
+ 0x5344, 0x5346, 0x534B, 0x534C, 0x534D, 0x5350, 0x5354, 0x5358, /* 0x60 */
+ 0x5359, 0x535B, 0x535D, 0x5365, 0x5368, 0x536A, 0x536C, 0x536D, /* 0x60 */
+ 0x5372, 0x5376, 0x5379, 0x537B, 0x537C, 0x537D, 0x537E, 0x5380, /* 0x70 */
+ 0x5381, 0x5383, 0x5387, 0x5388, 0x538A, 0x538E, 0x538F, 0, /* 0x70 */
+ 0x5390, 0x5391, 0x5392, 0x5393, 0x5394, 0x5396, 0x5397, 0x5399, /* 0x80 */
+ 0x539B, 0x539C, 0x539E, 0x53A0, 0x53A1, 0x53A4, 0x53A7, 0x53AA, /* 0x80 */
+ 0x53AB, 0x53AC, 0x53AD, 0x53AF, 0x53B0, 0x53B1, 0x53B2, 0x53B3, /* 0x90 */
+ 0x53B4, 0x53B5, 0x53B7, 0x53B8, 0x53B9, 0x53BA, 0x53BC, 0x53BD, /* 0x90 */
+ 0x53BE, 0x53C0, 0x53C3, 0x53C4, 0x53C5, 0x53C6, 0x53C7, 0x53CE, /* 0xA0 */
+ 0x53CF, 0x53D0, 0x53D2, 0x53D3, 0x53D5, 0x53DA, 0x53DC, 0x53DD, /* 0xA0 */
+ 0x53DE, 0x53E1, 0x53E2, 0x53E7, 0x53F4, 0x53FA, 0x53FE, 0x53FF, /* 0xB0 */
+ 0x5400, 0x5402, 0x5405, 0x5407, 0x540B, 0x5414, 0x5418, 0x5419, /* 0xB0 */
+ 0x541A, 0x541C, 0x5422, 0x5424, 0x5425, 0x542A, 0x5430, 0x5433, /* 0xC0 */
+ 0x5436, 0x5437, 0x543A, 0x543D, 0x543F, 0x5441, 0x5442, 0x5444, /* 0xC0 */
+ 0x5445, 0x5447, 0x5449, 0x544C, 0x544D, 0x544E, 0x544F, 0x5451, /* 0xD0 */
+ 0x545A, 0x545D, 0x545E, 0x545F, 0x5460, 0x5461, 0x5463, 0x5465, /* 0xD0 */
+ 0x5467, 0x5469, 0x546A, 0x546B, 0x546C, 0x546D, 0x546E, 0x546F, /* 0xE0 */
+ 0x5470, 0x5474, 0x5479, 0x547A, 0x547E, 0x547F, 0x5481, 0x5483, /* 0xE0 */
+ 0x5485, 0x5487, 0x5488, 0x5489, 0x548A, 0x548D, 0x5491, 0x5493, /* 0xF0 */
+ 0x5497, 0x5498, 0x549C, 0x549E, 0x549F, 0x54A0, 0x54A1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x54A2, 0x54A5, 0x54AE, 0x54B0, 0x54B2, 0x54B5, 0x54B6, 0x54B7, /* 0x40 */
+ 0x54B9, 0x54BA, 0x54BC, 0x54BE, 0x54C3, 0x54C5, 0x54CA, 0x54CB, /* 0x40 */
+ 0x54D6, 0x54D8, 0x54DB, 0x54E0, 0x54E1, 0x54E2, 0x54E3, 0x54E4, /* 0x50 */
+ 0x54EB, 0x54EC, 0x54EF, 0x54F0, 0x54F1, 0x54F4, 0x54F5, 0x54F6, /* 0x50 */
+ 0x54F7, 0x54F8, 0x54F9, 0x54FB, 0x54FE, 0x5500, 0x5502, 0x5503, /* 0x60 */
+ 0x5504, 0x5505, 0x5508, 0x550A, 0x550B, 0x550C, 0x550D, 0x550E, /* 0x60 */
+ 0x5512, 0x5513, 0x5515, 0x5516, 0x5517, 0x5518, 0x5519, 0x551A, /* 0x70 */
+ 0x551C, 0x551D, 0x551E, 0x551F, 0x5521, 0x5525, 0x5526, 0, /* 0x70 */
+ 0x5528, 0x5529, 0x552B, 0x552D, 0x5532, 0x5534, 0x5535, 0x5536, /* 0x80 */
+ 0x5538, 0x5539, 0x553A, 0x553B, 0x553D, 0x5540, 0x5542, 0x5545, /* 0x80 */
+ 0x5547, 0x5548, 0x554B, 0x554C, 0x554D, 0x554E, 0x554F, 0x5551, /* 0x90 */
+ 0x5552, 0x5553, 0x5554, 0x5557, 0x5558, 0x5559, 0x555A, 0x555B, /* 0x90 */
+ 0x555D, 0x555E, 0x555F, 0x5560, 0x5562, 0x5563, 0x5568, 0x5569, /* 0xA0 */
+ 0x556B, 0x556F, 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5579, /* 0xA0 */
+ 0x557A, 0x557D, 0x557F, 0x5585, 0x5586, 0x558C, 0x558D, 0x558E, /* 0xB0 */
+ 0x5590, 0x5592, 0x5593, 0x5595, 0x5596, 0x5597, 0x559A, 0x559B, /* 0xB0 */
+ 0x559E, 0x55A0, 0x55A1, 0x55A2, 0x55A3, 0x55A4, 0x55A5, 0x55A6, /* 0xC0 */
+ 0x55A8, 0x55A9, 0x55AA, 0x55AB, 0x55AC, 0x55AD, 0x55AE, 0x55AF, /* 0xC0 */
+ 0x55B0, 0x55B2, 0x55B4, 0x55B6, 0x55B8, 0x55BA, 0x55BC, 0x55BF, /* 0xD0 */
+ 0x55C0, 0x55C1, 0x55C2, 0x55C3, 0x55C6, 0x55C7, 0x55C8, 0x55CA, /* 0xD0 */
+ 0x55CB, 0x55CE, 0x55CF, 0x55D0, 0x55D5, 0x55D7, 0x55D8, 0x55D9, /* 0xE0 */
+ 0x55DA, 0x55DB, 0x55DE, 0x55E0, 0x55E2, 0x55E7, 0x55E9, 0x55ED, /* 0xE0 */
+ 0x55EE, 0x55F0, 0x55F1, 0x55F4, 0x55F6, 0x55F8, 0x55F9, 0x55FA, /* 0xF0 */
+ 0x55FB, 0x55FC, 0x55FF, 0x5602, 0x5603, 0x5604, 0x5605 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5606, 0x5607, 0x560A, 0x560B, 0x560D, 0x5610, 0x5611, 0x5612, /* 0x40 */
+ 0x5613, 0x5614, 0x5615, 0x5616, 0x5617, 0x5619, 0x561A, 0x561C, /* 0x40 */
+ 0x561D, 0x5620, 0x5621, 0x5622, 0x5625, 0x5626, 0x5628, 0x5629, /* 0x50 */
+ 0x562A, 0x562B, 0x562E, 0x562F, 0x5630, 0x5633, 0x5635, 0x5637, /* 0x50 */
+ 0x5638, 0x563A, 0x563C, 0x563D, 0x563E, 0x5640, 0x5641, 0x5642, /* 0x60 */
+ 0x5643, 0x5644, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, 0x564A, /* 0x60 */
+ 0x564B, 0x564F, 0x5650, 0x5651, 0x5652, 0x5653, 0x5655, 0x5656, /* 0x70 */
+ 0x565A, 0x565B, 0x565D, 0x565E, 0x565F, 0x5660, 0x5661, 0, /* 0x70 */
+ 0x5663, 0x5665, 0x5666, 0x5667, 0x566D, 0x566E, 0x566F, 0x5670, /* 0x80 */
+ 0x5672, 0x5673, 0x5674, 0x5675, 0x5677, 0x5678, 0x5679, 0x567A, /* 0x80 */
+ 0x567D, 0x567E, 0x567F, 0x5680, 0x5681, 0x5682, 0x5683, 0x5684, /* 0x90 */
+ 0x5687, 0x5688, 0x5689, 0x568A, 0x568B, 0x568C, 0x568D, 0x5690, /* 0x90 */
+ 0x5691, 0x5692, 0x5694, 0x5695, 0x5696, 0x5697, 0x5698, 0x5699, /* 0xA0 */
+ 0x569A, 0x569B, 0x569C, 0x569D, 0x569E, 0x569F, 0x56A0, 0x56A1, /* 0xA0 */
+ 0x56A2, 0x56A4, 0x56A5, 0x56A6, 0x56A7, 0x56A8, 0x56A9, 0x56AA, /* 0xB0 */
+ 0x56AB, 0x56AC, 0x56AD, 0x56AE, 0x56B0, 0x56B1, 0x56B2, 0x56B3, /* 0xB0 */
+ 0x56B4, 0x56B5, 0x56B6, 0x56B8, 0x56B9, 0x56BA, 0x56BB, 0x56BD, /* 0xC0 */
+ 0x56BE, 0x56BF, 0x56C0, 0x56C1, 0x56C2, 0x56C3, 0x56C4, 0x56C5, /* 0xC0 */
+ 0x56C6, 0x56C7, 0x56C8, 0x56C9, 0x56CB, 0x56CC, 0x56CD, 0x56CE, /* 0xD0 */
+ 0x56CF, 0x56D0, 0x56D1, 0x56D2, 0x56D3, 0x56D5, 0x56D6, 0x56D8, /* 0xD0 */
+ 0x56D9, 0x56DC, 0x56E3, 0x56E5, 0x56E6, 0x56E7, 0x56E8, 0x56E9, /* 0xE0 */
+ 0x56EA, 0x56EC, 0x56EE, 0x56EF, 0x56F2, 0x56F3, 0x56F6, 0x56F7, /* 0xE0 */
+ 0x56F8, 0x56FB, 0x56FC, 0x5700, 0x5701, 0x5702, 0x5705, 0x5707, /* 0xF0 */
+ 0x570B, 0x570C, 0x570D, 0x570E, 0x570F, 0x5710, 0x5711 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5712, 0x5713, 0x5714, 0x5715, 0x5716, 0x5717, 0x5718, 0x5719, /* 0x40 */
+ 0x571A, 0x571B, 0x571D, 0x571E, 0x5720, 0x5721, 0x5722, 0x5724, /* 0x40 */
+ 0x5725, 0x5726, 0x5727, 0x572B, 0x5731, 0x5732, 0x5734, 0x5735, /* 0x50 */
+ 0x5736, 0x5737, 0x5738, 0x573C, 0x573D, 0x573F, 0x5741, 0x5743, /* 0x50 */
+ 0x5744, 0x5745, 0x5746, 0x5748, 0x5749, 0x574B, 0x5752, 0x5753, /* 0x60 */
+ 0x5754, 0x5755, 0x5756, 0x5758, 0x5759, 0x5762, 0x5763, 0x5765, /* 0x60 */
+ 0x5767, 0x576C, 0x576E, 0x5770, 0x5771, 0x5772, 0x5774, 0x5775, /* 0x70 */
+ 0x5778, 0x5779, 0x577A, 0x577D, 0x577E, 0x577F, 0x5780, 0, /* 0x70 */
+ 0x5781, 0x5787, 0x5788, 0x5789, 0x578A, 0x578D, 0x578E, 0x578F, /* 0x80 */
+ 0x5790, 0x5791, 0x5794, 0x5795, 0x5796, 0x5797, 0x5798, 0x5799, /* 0x80 */
+ 0x579A, 0x579C, 0x579D, 0x579E, 0x579F, 0x57A5, 0x57A8, 0x57AA, /* 0x90 */
+ 0x57AC, 0x57AF, 0x57B0, 0x57B1, 0x57B3, 0x57B5, 0x57B6, 0x57B7, /* 0x90 */
+ 0x57B9, 0x57BA, 0x57BB, 0x57BC, 0x57BD, 0x57BE, 0x57BF, 0x57C0, /* 0xA0 */
+ 0x57C1, 0x57C4, 0x57C5, 0x57C6, 0x57C7, 0x57C8, 0x57C9, 0x57CA, /* 0xA0 */
+ 0x57CC, 0x57CD, 0x57D0, 0x57D1, 0x57D3, 0x57D6, 0x57D7, 0x57DB, /* 0xB0 */
+ 0x57DC, 0x57DE, 0x57E1, 0x57E2, 0x57E3, 0x57E5, 0x57E6, 0x57E7, /* 0xB0 */
+ 0x57E8, 0x57E9, 0x57EA, 0x57EB, 0x57EC, 0x57EE, 0x57F0, 0x57F1, /* 0xC0 */
+ 0x57F2, 0x57F3, 0x57F5, 0x57F6, 0x57F7, 0x57FB, 0x57FC, 0x57FE, /* 0xC0 */
+ 0x57FF, 0x5801, 0x5803, 0x5804, 0x5805, 0x5808, 0x5809, 0x580A, /* 0xD0 */
+ 0x580C, 0x580E, 0x580F, 0x5810, 0x5812, 0x5813, 0x5814, 0x5816, /* 0xD0 */
+ 0x5817, 0x5818, 0x581A, 0x581B, 0x581C, 0x581D, 0x581F, 0x5822, /* 0xE0 */
+ 0x5823, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582B, 0x582C, /* 0xE0 */
+ 0x582D, 0x582E, 0x582F, 0x5831, 0x5832, 0x5833, 0x5834, 0x5836, /* 0xF0 */
+ 0x5837, 0x5838, 0x5839, 0x583A, 0x583B, 0x583C, 0x583D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x583E, 0x583F, 0x5840, 0x5841, 0x5842, 0x5843, 0x5845, 0x5846, /* 0x40 */
+ 0x5847, 0x5848, 0x5849, 0x584A, 0x584B, 0x584E, 0x584F, 0x5850, /* 0x40 */
+ 0x5852, 0x5853, 0x5855, 0x5856, 0x5857, 0x5859, 0x585A, 0x585B, /* 0x50 */
+ 0x585C, 0x585D, 0x585F, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, /* 0x50 */
+ 0x5866, 0x5867, 0x5868, 0x5869, 0x586A, 0x586D, 0x586E, 0x586F, /* 0x60 */
+ 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877, /* 0x60 */
+ 0x5878, 0x5879, 0x587A, 0x587B, 0x587C, 0x587D, 0x587F, 0x5882, /* 0x70 */
+ 0x5884, 0x5886, 0x5887, 0x5888, 0x588A, 0x588B, 0x588C, 0, /* 0x70 */
+ 0x588D, 0x588E, 0x588F, 0x5890, 0x5891, 0x5894, 0x5895, 0x5896, /* 0x80 */
+ 0x5897, 0x5898, 0x589B, 0x589C, 0x589D, 0x58A0, 0x58A1, 0x58A2, /* 0x80 */
+ 0x58A3, 0x58A4, 0x58A5, 0x58A6, 0x58A7, 0x58AA, 0x58AB, 0x58AC, /* 0x90 */
+ 0x58AD, 0x58AE, 0x58AF, 0x58B0, 0x58B1, 0x58B2, 0x58B3, 0x58B4, /* 0x90 */
+ 0x58B5, 0x58B6, 0x58B7, 0x58B8, 0x58B9, 0x58BA, 0x58BB, 0x58BD, /* 0xA0 */
+ 0x58BE, 0x58BF, 0x58C0, 0x58C2, 0x58C3, 0x58C4, 0x58C6, 0x58C7, /* 0xA0 */
+ 0x58C8, 0x58C9, 0x58CA, 0x58CB, 0x58CC, 0x58CD, 0x58CE, 0x58CF, /* 0xB0 */
+ 0x58D0, 0x58D2, 0x58D3, 0x58D4, 0x58D6, 0x58D7, 0x58D8, 0x58D9, /* 0xB0 */
+ 0x58DA, 0x58DB, 0x58DC, 0x58DD, 0x58DE, 0x58DF, 0x58E0, 0x58E1, /* 0xC0 */
+ 0x58E2, 0x58E3, 0x58E5, 0x58E6, 0x58E7, 0x58E8, 0x58E9, 0x58EA, /* 0xC0 */
+ 0x58ED, 0x58EF, 0x58F1, 0x58F2, 0x58F4, 0x58F5, 0x58F7, 0x58F8, /* 0xD0 */
+ 0x58FA, 0x58FB, 0x58FC, 0x58FD, 0x58FE, 0x58FF, 0x5900, 0x5901, /* 0xD0 */
+ 0x5903, 0x5905, 0x5906, 0x5908, 0x5909, 0x590A, 0x590B, 0x590C, /* 0xE0 */
+ 0x590E, 0x5910, 0x5911, 0x5912, 0x5913, 0x5917, 0x5918, 0x591B, /* 0xE0 */
+ 0x591D, 0x591E, 0x5920, 0x5921, 0x5922, 0x5923, 0x5926, 0x5928, /* 0xF0 */
+ 0x592C, 0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x593D, 0x593E, 0x593F, 0x5940, 0x5943, 0x5945, 0x5946, 0x594A, /* 0x40 */
+ 0x594C, 0x594D, 0x5950, 0x5952, 0x5953, 0x5959, 0x595B, 0x595C, /* 0x40 */
+ 0x595D, 0x595E, 0x595F, 0x5961, 0x5963, 0x5964, 0x5966, 0x5967, /* 0x50 */
+ 0x5968, 0x5969, 0x596A, 0x596B, 0x596C, 0x596D, 0x596E, 0x596F, /* 0x50 */
+ 0x5970, 0x5971, 0x5972, 0x5975, 0x5977, 0x597A, 0x597B, 0x597C, /* 0x60 */
+ 0x597E, 0x597F, 0x5980, 0x5985, 0x5989, 0x598B, 0x598C, 0x598E, /* 0x60 */
+ 0x598F, 0x5990, 0x5991, 0x5994, 0x5995, 0x5998, 0x599A, 0x599B, /* 0x70 */
+ 0x599C, 0x599D, 0x599F, 0x59A0, 0x59A1, 0x59A2, 0x59A6, 0, /* 0x70 */
+ 0x59A7, 0x59AC, 0x59AD, 0x59B0, 0x59B1, 0x59B3, 0x59B4, 0x59B5, /* 0x80 */
+ 0x59B6, 0x59B7, 0x59B8, 0x59BA, 0x59BC, 0x59BD, 0x59BF, 0x59C0, /* 0x80 */
+ 0x59C1, 0x59C2, 0x59C3, 0x59C4, 0x59C5, 0x59C7, 0x59C8, 0x59C9, /* 0x90 */
+ 0x59CC, 0x59CD, 0x59CE, 0x59CF, 0x59D5, 0x59D6, 0x59D9, 0x59DB, /* 0x90 */
+ 0x59DE, 0x59DF, 0x59E0, 0x59E1, 0x59E2, 0x59E4, 0x59E6, 0x59E7, /* 0xA0 */
+ 0x59E9, 0x59EA, 0x59EB, 0x59ED, 0x59EE, 0x59EF, 0x59F0, 0x59F1, /* 0xA0 */
+ 0x59F2, 0x59F3, 0x59F4, 0x59F5, 0x59F6, 0x59F7, 0x59F8, 0x59FA, /* 0xB0 */
+ 0x59FC, 0x59FD, 0x59FE, 0x5A00, 0x5A02, 0x5A0A, 0x5A0B, 0x5A0D, /* 0xB0 */
+ 0x5A0E, 0x5A0F, 0x5A10, 0x5A12, 0x5A14, 0x5A15, 0x5A16, 0x5A17, /* 0xC0 */
+ 0x5A19, 0x5A1A, 0x5A1B, 0x5A1D, 0x5A1E, 0x5A21, 0x5A22, 0x5A24, /* 0xC0 */
+ 0x5A26, 0x5A27, 0x5A28, 0x5A2A, 0x5A2B, 0x5A2C, 0x5A2D, 0x5A2E, /* 0xD0 */
+ 0x5A2F, 0x5A30, 0x5A33, 0x5A35, 0x5A37, 0x5A38, 0x5A39, 0x5A3A, /* 0xD0 */
+ 0x5A3B, 0x5A3D, 0x5A3E, 0x5A3F, 0x5A41, 0x5A42, 0x5A43, 0x5A44, /* 0xE0 */
+ 0x5A45, 0x5A47, 0x5A48, 0x5A4B, 0x5A4C, 0x5A4D, 0x5A4E, 0x5A4F, /* 0xE0 */
+ 0x5A50, 0x5A51, 0x5A52, 0x5A53, 0x5A54, 0x5A56, 0x5A57, 0x5A58, /* 0xF0 */
+ 0x5A59, 0x5A5B, 0x5A5C, 0x5A5D, 0x5A5E, 0x5A5F, 0x5A60 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5A61, 0x5A63, 0x5A64, 0x5A65, 0x5A66, 0x5A68, 0x5A69, 0x5A6B, /* 0x40 */
+ 0x5A6C, 0x5A6D, 0x5A6E, 0x5A6F, 0x5A70, 0x5A71, 0x5A72, 0x5A73, /* 0x40 */
+ 0x5A78, 0x5A79, 0x5A7B, 0x5A7C, 0x5A7D, 0x5A7E, 0x5A80, 0x5A81, /* 0x50 */
+ 0x5A82, 0x5A83, 0x5A84, 0x5A85, 0x5A86, 0x5A87, 0x5A88, 0x5A89, /* 0x50 */
+ 0x5A8A, 0x5A8B, 0x5A8C, 0x5A8D, 0x5A8E, 0x5A8F, 0x5A90, 0x5A91, /* 0x60 */
+ 0x5A93, 0x5A94, 0x5A95, 0x5A96, 0x5A97, 0x5A98, 0x5A99, 0x5A9C, /* 0x60 */
+ 0x5A9D, 0x5A9E, 0x5A9F, 0x5AA0, 0x5AA1, 0x5AA2, 0x5AA3, 0x5AA4, /* 0x70 */
+ 0x5AA5, 0x5AA6, 0x5AA7, 0x5AA8, 0x5AA9, 0x5AAB, 0x5AAC, 0, /* 0x70 */
+ 0x5AAD, 0x5AAE, 0x5AAF, 0x5AB0, 0x5AB1, 0x5AB4, 0x5AB6, 0x5AB7, /* 0x80 */
+ 0x5AB9, 0x5ABA, 0x5ABB, 0x5ABC, 0x5ABD, 0x5ABF, 0x5AC0, 0x5AC3, /* 0x80 */
+ 0x5AC4, 0x5AC5, 0x5AC6, 0x5AC7, 0x5AC8, 0x5ACA, 0x5ACB, 0x5ACD, /* 0x90 */
+ 0x5ACE, 0x5ACF, 0x5AD0, 0x5AD1, 0x5AD3, 0x5AD5, 0x5AD7, 0x5AD9, /* 0x90 */
+ 0x5ADA, 0x5ADB, 0x5ADD, 0x5ADE, 0x5ADF, 0x5AE2, 0x5AE4, 0x5AE5, /* 0xA0 */
+ 0x5AE7, 0x5AE8, 0x5AEA, 0x5AEC, 0x5AED, 0x5AEE, 0x5AEF, 0x5AF0, /* 0xA0 */
+ 0x5AF2, 0x5AF3, 0x5AF4, 0x5AF5, 0x5AF6, 0x5AF7, 0x5AF8, 0x5AF9, /* 0xB0 */
+ 0x5AFA, 0x5AFB, 0x5AFC, 0x5AFD, 0x5AFE, 0x5AFF, 0x5B00, 0x5B01, /* 0xB0 */
+ 0x5B02, 0x5B03, 0x5B04, 0x5B05, 0x5B06, 0x5B07, 0x5B08, 0x5B0A, /* 0xC0 */
+ 0x5B0B, 0x5B0C, 0x5B0D, 0x5B0E, 0x5B0F, 0x5B10, 0x5B11, 0x5B12, /* 0xC0 */
+ 0x5B13, 0x5B14, 0x5B15, 0x5B18, 0x5B19, 0x5B1A, 0x5B1B, 0x5B1C, /* 0xD0 */
+ 0x5B1D, 0x5B1E, 0x5B1F, 0x5B20, 0x5B21, 0x5B22, 0x5B23, 0x5B24, /* 0xD0 */
+ 0x5B25, 0x5B26, 0x5B27, 0x5B28, 0x5B29, 0x5B2A, 0x5B2B, 0x5B2C, /* 0xE0 */
+ 0x5B2D, 0x5B2E, 0x5B2F, 0x5B30, 0x5B31, 0x5B33, 0x5B35, 0x5B36, /* 0xE0 */
+ 0x5B38, 0x5B39, 0x5B3A, 0x5B3B, 0x5B3C, 0x5B3D, 0x5B3E, 0x5B3F, /* 0xF0 */
+ 0x5B41, 0x5B42, 0x5B43, 0x5B44, 0x5B45, 0x5B46, 0x5B47 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5B48, 0x5B49, 0x5B4A, 0x5B4B, 0x5B4C, 0x5B4D, 0x5B4E, 0x5B4F, /* 0x40 */
+ 0x5B52, 0x5B56, 0x5B5E, 0x5B60, 0x5B61, 0x5B67, 0x5B68, 0x5B6B, /* 0x40 */
+ 0x5B6D, 0x5B6E, 0x5B6F, 0x5B72, 0x5B74, 0x5B76, 0x5B77, 0x5B78, /* 0x50 */
+ 0x5B79, 0x5B7B, 0x5B7C, 0x5B7E, 0x5B7F, 0x5B82, 0x5B86, 0x5B8A, /* 0x50 */
+ 0x5B8D, 0x5B8E, 0x5B90, 0x5B91, 0x5B92, 0x5B94, 0x5B96, 0x5B9F, /* 0x60 */
+ 0x5BA7, 0x5BA8, 0x5BA9, 0x5BAC, 0x5BAD, 0x5BAE, 0x5BAF, 0x5BB1, /* 0x60 */
+ 0x5BB2, 0x5BB7, 0x5BBA, 0x5BBB, 0x5BBC, 0x5BC0, 0x5BC1, 0x5BC3, /* 0x70 */
+ 0x5BC8, 0x5BC9, 0x5BCA, 0x5BCB, 0x5BCD, 0x5BCE, 0x5BCF, 0, /* 0x70 */
+ 0x5BD1, 0x5BD4, 0x5BD5, 0x5BD6, 0x5BD7, 0x5BD8, 0x5BD9, 0x5BDA, /* 0x80 */
+ 0x5BDB, 0x5BDC, 0x5BE0, 0x5BE2, 0x5BE3, 0x5BE6, 0x5BE7, 0x5BE9, /* 0x80 */
+ 0x5BEA, 0x5BEB, 0x5BEC, 0x5BED, 0x5BEF, 0x5BF1, 0x5BF2, 0x5BF3, /* 0x90 */
+ 0x5BF4, 0x5BF5, 0x5BF6, 0x5BF7, 0x5BFD, 0x5BFE, 0x5C00, 0x5C02, /* 0x90 */
+ 0x5C03, 0x5C05, 0x5C07, 0x5C08, 0x5C0B, 0x5C0C, 0x5C0D, 0x5C0E, /* 0xA0 */
+ 0x5C10, 0x5C12, 0x5C13, 0x5C17, 0x5C19, 0x5C1B, 0x5C1E, 0x5C1F, /* 0xA0 */
+ 0x5C20, 0x5C21, 0x5C23, 0x5C26, 0x5C28, 0x5C29, 0x5C2A, 0x5C2B, /* 0xB0 */
+ 0x5C2D, 0x5C2E, 0x5C2F, 0x5C30, 0x5C32, 0x5C33, 0x5C35, 0x5C36, /* 0xB0 */
+ 0x5C37, 0x5C43, 0x5C44, 0x5C46, 0x5C47, 0x5C4C, 0x5C4D, 0x5C52, /* 0xC0 */
+ 0x5C53, 0x5C54, 0x5C56, 0x5C57, 0x5C58, 0x5C5A, 0x5C5B, 0x5C5C, /* 0xC0 */
+ 0x5C5D, 0x5C5F, 0x5C62, 0x5C64, 0x5C67, 0x5C68, 0x5C69, 0x5C6A, /* 0xD0 */
+ 0x5C6B, 0x5C6C, 0x5C6D, 0x5C70, 0x5C72, 0x5C73, 0x5C74, 0x5C75, /* 0xD0 */
+ 0x5C76, 0x5C77, 0x5C78, 0x5C7B, 0x5C7C, 0x5C7D, 0x5C7E, 0x5C80, /* 0xE0 */
+ 0x5C83, 0x5C84, 0x5C85, 0x5C86, 0x5C87, 0x5C89, 0x5C8A, 0x5C8B, /* 0xE0 */
+ 0x5C8E, 0x5C8F, 0x5C92, 0x5C93, 0x5C95, 0x5C9D, 0x5C9E, 0x5C9F, /* 0xF0 */
+ 0x5CA0, 0x5CA1, 0x5CA4, 0x5CA5, 0x5CA6, 0x5CA7, 0x5CA8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5CAA, 0x5CAE, 0x5CAF, 0x5CB0, 0x5CB2, 0x5CB4, 0x5CB6, 0x5CB9, /* 0x40 */
+ 0x5CBA, 0x5CBB, 0x5CBC, 0x5CBE, 0x5CC0, 0x5CC2, 0x5CC3, 0x5CC5, /* 0x40 */
+ 0x5CC6, 0x5CC7, 0x5CC8, 0x5CC9, 0x5CCA, 0x5CCC, 0x5CCD, 0x5CCE, /* 0x50 */
+ 0x5CCF, 0x5CD0, 0x5CD1, 0x5CD3, 0x5CD4, 0x5CD5, 0x5CD6, 0x5CD7, /* 0x50 */
+ 0x5CD8, 0x5CDA, 0x5CDB, 0x5CDC, 0x5CDD, 0x5CDE, 0x5CDF, 0x5CE0, /* 0x60 */
+ 0x5CE2, 0x5CE3, 0x5CE7, 0x5CE9, 0x5CEB, 0x5CEC, 0x5CEE, 0x5CEF, /* 0x60 */
+ 0x5CF1, 0x5CF2, 0x5CF3, 0x5CF4, 0x5CF5, 0x5CF6, 0x5CF7, 0x5CF8, /* 0x70 */
+ 0x5CF9, 0x5CFA, 0x5CFC, 0x5CFD, 0x5CFE, 0x5CFF, 0x5D00, 0, /* 0x70 */
+ 0x5D01, 0x5D04, 0x5D05, 0x5D08, 0x5D09, 0x5D0A, 0x5D0B, 0x5D0C, /* 0x80 */
+ 0x5D0D, 0x5D0F, 0x5D10, 0x5D11, 0x5D12, 0x5D13, 0x5D15, 0x5D17, /* 0x80 */
+ 0x5D18, 0x5D19, 0x5D1A, 0x5D1C, 0x5D1D, 0x5D1F, 0x5D20, 0x5D21, /* 0x90 */
+ 0x5D22, 0x5D23, 0x5D25, 0x5D28, 0x5D2A, 0x5D2B, 0x5D2C, 0x5D2F, /* 0x90 */
+ 0x5D30, 0x5D31, 0x5D32, 0x5D33, 0x5D35, 0x5D36, 0x5D37, 0x5D38, /* 0xA0 */
+ 0x5D39, 0x5D3A, 0x5D3B, 0x5D3C, 0x5D3F, 0x5D40, 0x5D41, 0x5D42, /* 0xA0 */
+ 0x5D43, 0x5D44, 0x5D45, 0x5D46, 0x5D48, 0x5D49, 0x5D4D, 0x5D4E, /* 0xB0 */
+ 0x5D4F, 0x5D50, 0x5D51, 0x5D52, 0x5D53, 0x5D54, 0x5D55, 0x5D56, /* 0xB0 */
+ 0x5D57, 0x5D59, 0x5D5A, 0x5D5C, 0x5D5E, 0x5D5F, 0x5D60, 0x5D61, /* 0xC0 */
+ 0x5D62, 0x5D63, 0x5D64, 0x5D65, 0x5D66, 0x5D67, 0x5D68, 0x5D6A, /* 0xC0 */
+ 0x5D6D, 0x5D6E, 0x5D70, 0x5D71, 0x5D72, 0x5D73, 0x5D75, 0x5D76, /* 0xD0 */
+ 0x5D77, 0x5D78, 0x5D79, 0x5D7A, 0x5D7B, 0x5D7C, 0x5D7D, 0x5D7E, /* 0xD0 */
+ 0x5D7F, 0x5D80, 0x5D81, 0x5D83, 0x5D84, 0x5D85, 0x5D86, 0x5D87, /* 0xE0 */
+ 0x5D88, 0x5D89, 0x5D8A, 0x5D8B, 0x5D8C, 0x5D8D, 0x5D8E, 0x5D8F, /* 0xE0 */
+ 0x5D90, 0x5D91, 0x5D92, 0x5D93, 0x5D94, 0x5D95, 0x5D96, 0x5D97, /* 0xF0 */
+ 0x5D98, 0x5D9A, 0x5D9B, 0x5D9C, 0x5D9E, 0x5D9F, 0x5DA0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5DA1, 0x5DA2, 0x5DA3, 0x5DA4, 0x5DA5, 0x5DA6, 0x5DA7, 0x5DA8, /* 0x40 */
+ 0x5DA9, 0x5DAA, 0x5DAB, 0x5DAC, 0x5DAD, 0x5DAE, 0x5DAF, 0x5DB0, /* 0x40 */
+ 0x5DB1, 0x5DB2, 0x5DB3, 0x5DB4, 0x5DB5, 0x5DB6, 0x5DB8, 0x5DB9, /* 0x50 */
+ 0x5DBA, 0x5DBB, 0x5DBC, 0x5DBD, 0x5DBE, 0x5DBF, 0x5DC0, 0x5DC1, /* 0x50 */
+ 0x5DC2, 0x5DC3, 0x5DC4, 0x5DC6, 0x5DC7, 0x5DC8, 0x5DC9, 0x5DCA, /* 0x60 */
+ 0x5DCB, 0x5DCC, 0x5DCE, 0x5DCF, 0x5DD0, 0x5DD1, 0x5DD2, 0x5DD3, /* 0x60 */
+ 0x5DD4, 0x5DD5, 0x5DD6, 0x5DD7, 0x5DD8, 0x5DD9, 0x5DDA, 0x5DDC, /* 0x70 */
+ 0x5DDF, 0x5DE0, 0x5DE3, 0x5DE4, 0x5DEA, 0x5DEC, 0x5DED, 0, /* 0x70 */
+ 0x5DF0, 0x5DF5, 0x5DF6, 0x5DF8, 0x5DF9, 0x5DFA, 0x5DFB, 0x5DFC, /* 0x80 */
+ 0x5DFF, 0x5E00, 0x5E04, 0x5E07, 0x5E09, 0x5E0A, 0x5E0B, 0x5E0D, /* 0x80 */
+ 0x5E0E, 0x5E12, 0x5E13, 0x5E17, 0x5E1E, 0x5E1F, 0x5E20, 0x5E21, /* 0x90 */
+ 0x5E22, 0x5E23, 0x5E24, 0x5E25, 0x5E28, 0x5E29, 0x5E2A, 0x5E2B, /* 0x90 */
+ 0x5E2C, 0x5E2F, 0x5E30, 0x5E32, 0x5E33, 0x5E34, 0x5E35, 0x5E36, /* 0xA0 */
+ 0x5E39, 0x5E3A, 0x5E3E, 0x5E3F, 0x5E40, 0x5E41, 0x5E43, 0x5E46, /* 0xA0 */
+ 0x5E47, 0x5E48, 0x5E49, 0x5E4A, 0x5E4B, 0x5E4D, 0x5E4E, 0x5E4F, /* 0xB0 */
+ 0x5E50, 0x5E51, 0x5E52, 0x5E53, 0x5E56, 0x5E57, 0x5E58, 0x5E59, /* 0xB0 */
+ 0x5E5A, 0x5E5C, 0x5E5D, 0x5E5F, 0x5E60, 0x5E63, 0x5E64, 0x5E65, /* 0xC0 */
+ 0x5E66, 0x5E67, 0x5E68, 0x5E69, 0x5E6A, 0x5E6B, 0x5E6C, 0x5E6D, /* 0xC0 */
+ 0x5E6E, 0x5E6F, 0x5E70, 0x5E71, 0x5E75, 0x5E77, 0x5E79, 0x5E7E, /* 0xD0 */
+ 0x5E81, 0x5E82, 0x5E83, 0x5E85, 0x5E88, 0x5E89, 0x5E8C, 0x5E8D, /* 0xD0 */
+ 0x5E8E, 0x5E92, 0x5E98, 0x5E9B, 0x5E9D, 0x5EA1, 0x5EA2, 0x5EA3, /* 0xE0 */
+ 0x5EA4, 0x5EA8, 0x5EA9, 0x5EAA, 0x5EAB, 0x5EAC, 0x5EAE, 0x5EAF, /* 0xE0 */
+ 0x5EB0, 0x5EB1, 0x5EB2, 0x5EB4, 0x5EBA, 0x5EBB, 0x5EBC, 0x5EBD, /* 0xF0 */
+ 0x5EBF, 0x5EC0, 0x5EC1, 0x5EC2, 0x5EC3, 0x5EC4, 0x5EC5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5EC6, 0x5EC7, 0x5EC8, 0x5ECB, 0x5ECC, 0x5ECD, 0x5ECE, 0x5ECF, /* 0x40 */
+ 0x5ED0, 0x5ED4, 0x5ED5, 0x5ED7, 0x5ED8, 0x5ED9, 0x5EDA, 0x5EDC, /* 0x40 */
+ 0x5EDD, 0x5EDE, 0x5EDF, 0x5EE0, 0x5EE1, 0x5EE2, 0x5EE3, 0x5EE4, /* 0x50 */
+ 0x5EE5, 0x5EE6, 0x5EE7, 0x5EE9, 0x5EEB, 0x5EEC, 0x5EED, 0x5EEE, /* 0x50 */
+ 0x5EEF, 0x5EF0, 0x5EF1, 0x5EF2, 0x5EF3, 0x5EF5, 0x5EF8, 0x5EF9, /* 0x60 */
+ 0x5EFB, 0x5EFC, 0x5EFD, 0x5F05, 0x5F06, 0x5F07, 0x5F09, 0x5F0C, /* 0x60 */
+ 0x5F0D, 0x5F0E, 0x5F10, 0x5F12, 0x5F14, 0x5F16, 0x5F19, 0x5F1A, /* 0x70 */
+ 0x5F1C, 0x5F1D, 0x5F1E, 0x5F21, 0x5F22, 0x5F23, 0x5F24, 0, /* 0x70 */
+ 0x5F28, 0x5F2B, 0x5F2C, 0x5F2E, 0x5F30, 0x5F32, 0x5F33, 0x5F34, /* 0x80 */
+ 0x5F35, 0x5F36, 0x5F37, 0x5F38, 0x5F3B, 0x5F3D, 0x5F3E, 0x5F3F, /* 0x80 */
+ 0x5F41, 0x5F42, 0x5F43, 0x5F44, 0x5F45, 0x5F46, 0x5F47, 0x5F48, /* 0x90 */
+ 0x5F49, 0x5F4A, 0x5F4B, 0x5F4C, 0x5F4D, 0x5F4E, 0x5F4F, 0x5F51, /* 0x90 */
+ 0x5F54, 0x5F59, 0x5F5A, 0x5F5B, 0x5F5C, 0x5F5E, 0x5F5F, 0x5F60, /* 0xA0 */
+ 0x5F63, 0x5F65, 0x5F67, 0x5F68, 0x5F6B, 0x5F6E, 0x5F6F, 0x5F72, /* 0xA0 */
+ 0x5F74, 0x5F75, 0x5F76, 0x5F78, 0x5F7A, 0x5F7D, 0x5F7E, 0x5F7F, /* 0xB0 */
+ 0x5F83, 0x5F86, 0x5F8D, 0x5F8E, 0x5F8F, 0x5F91, 0x5F93, 0x5F94, /* 0xB0 */
+ 0x5F96, 0x5F9A, 0x5F9B, 0x5F9D, 0x5F9E, 0x5F9F, 0x5FA0, 0x5FA2, /* 0xC0 */
+ 0x5FA3, 0x5FA4, 0x5FA5, 0x5FA6, 0x5FA7, 0x5FA9, 0x5FAB, 0x5FAC, /* 0xC0 */
+ 0x5FAF, 0x5FB0, 0x5FB1, 0x5FB2, 0x5FB3, 0x5FB4, 0x5FB6, 0x5FB8, /* 0xD0 */
+ 0x5FB9, 0x5FBA, 0x5FBB, 0x5FBE, 0x5FBF, 0x5FC0, 0x5FC1, 0x5FC2, /* 0xD0 */
+ 0x5FC7, 0x5FC8, 0x5FCA, 0x5FCB, 0x5FCE, 0x5FD3, 0x5FD4, 0x5FD5, /* 0xE0 */
+ 0x5FDA, 0x5FDB, 0x5FDC, 0x5FDE, 0x5FDF, 0x5FE2, 0x5FE3, 0x5FE5, /* 0xE0 */
+ 0x5FE6, 0x5FE8, 0x5FE9, 0x5FEC, 0x5FEF, 0x5FF0, 0x5FF2, 0x5FF3, /* 0xF0 */
+ 0x5FF4, 0x5FF6, 0x5FF7, 0x5FF9, 0x5FFA, 0x5FFC, 0x6007 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6008, 0x6009, 0x600B, 0x600C, 0x6010, 0x6011, 0x6013, 0x6017, /* 0x40 */
+ 0x6018, 0x601A, 0x601E, 0x601F, 0x6022, 0x6023, 0x6024, 0x602C, /* 0x40 */
+ 0x602D, 0x602E, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6036, /* 0x50 */
+ 0x6037, 0x6038, 0x6039, 0x603A, 0x603D, 0x603E, 0x6040, 0x6044, /* 0x50 */
+ 0x6045, 0x6046, 0x6047, 0x6048, 0x6049, 0x604A, 0x604C, 0x604E, /* 0x60 */
+ 0x604F, 0x6051, 0x6053, 0x6054, 0x6056, 0x6057, 0x6058, 0x605B, /* 0x60 */
+ 0x605C, 0x605E, 0x605F, 0x6060, 0x6061, 0x6065, 0x6066, 0x606E, /* 0x70 */
+ 0x6071, 0x6072, 0x6074, 0x6075, 0x6077, 0x607E, 0x6080, 0, /* 0x70 */
+ 0x6081, 0x6082, 0x6085, 0x6086, 0x6087, 0x6088, 0x608A, 0x608B, /* 0x80 */
+ 0x608E, 0x608F, 0x6090, 0x6091, 0x6093, 0x6095, 0x6097, 0x6098, /* 0x80 */
+ 0x6099, 0x609C, 0x609E, 0x60A1, 0x60A2, 0x60A4, 0x60A5, 0x60A7, /* 0x90 */
+ 0x60A9, 0x60AA, 0x60AE, 0x60B0, 0x60B3, 0x60B5, 0x60B6, 0x60B7, /* 0x90 */
+ 0x60B9, 0x60BA, 0x60BD, 0x60BE, 0x60BF, 0x60C0, 0x60C1, 0x60C2, /* 0xA0 */
+ 0x60C3, 0x60C4, 0x60C7, 0x60C8, 0x60C9, 0x60CC, 0x60CD, 0x60CE, /* 0xA0 */
+ 0x60CF, 0x60D0, 0x60D2, 0x60D3, 0x60D4, 0x60D6, 0x60D7, 0x60D9, /* 0xB0 */
+ 0x60DB, 0x60DE, 0x60E1, 0x60E2, 0x60E3, 0x60E4, 0x60E5, 0x60EA, /* 0xB0 */
+ 0x60F1, 0x60F2, 0x60F5, 0x60F7, 0x60F8, 0x60FB, 0x60FC, 0x60FD, /* 0xC0 */
+ 0x60FE, 0x60FF, 0x6102, 0x6103, 0x6104, 0x6105, 0x6107, 0x610A, /* 0xC0 */
+ 0x610B, 0x610C, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, /* 0xD0 */
+ 0x6117, 0x6118, 0x6119, 0x611B, 0x611C, 0x611D, 0x611E, 0x6121, /* 0xD0 */
+ 0x6122, 0x6125, 0x6128, 0x6129, 0x612A, 0x612C, 0x612D, 0x612E, /* 0xE0 */
+ 0x612F, 0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, /* 0xE0 */
+ 0x6137, 0x6138, 0x6139, 0x613A, 0x613B, 0x613C, 0x613D, 0x613E, /* 0xF0 */
+ 0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6147, 0x6149, 0x614B, 0x614D, 0x614F, 0x6150, 0x6152, 0x6153, /* 0x40 */
+ 0x6154, 0x6156, 0x6157, 0x6158, 0x6159, 0x615A, 0x615B, 0x615C, /* 0x40 */
+ 0x615E, 0x615F, 0x6160, 0x6161, 0x6163, 0x6164, 0x6165, 0x6166, /* 0x50 */
+ 0x6169, 0x616A, 0x616B, 0x616C, 0x616D, 0x616E, 0x616F, 0x6171, /* 0x50 */
+ 0x6172, 0x6173, 0x6174, 0x6176, 0x6178, 0x6179, 0x617A, 0x617B, /* 0x60 */
+ 0x617C, 0x617D, 0x617E, 0x617F, 0x6180, 0x6181, 0x6182, 0x6183, /* 0x60 */
+ 0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618A, 0x618C, /* 0x70 */
+ 0x618D, 0x618F, 0x6190, 0x6191, 0x6192, 0x6193, 0x6195, 0, /* 0x70 */
+ 0x6196, 0x6197, 0x6198, 0x6199, 0x619A, 0x619B, 0x619C, 0x619E, /* 0x80 */
+ 0x619F, 0x61A0, 0x61A1, 0x61A2, 0x61A3, 0x61A4, 0x61A5, 0x61A6, /* 0x80 */
+ 0x61AA, 0x61AB, 0x61AD, 0x61AE, 0x61AF, 0x61B0, 0x61B1, 0x61B2, /* 0x90 */
+ 0x61B3, 0x61B4, 0x61B5, 0x61B6, 0x61B8, 0x61B9, 0x61BA, 0x61BB, /* 0x90 */
+ 0x61BC, 0x61BD, 0x61BF, 0x61C0, 0x61C1, 0x61C3, 0x61C4, 0x61C5, /* 0xA0 */
+ 0x61C6, 0x61C7, 0x61C9, 0x61CC, 0x61CD, 0x61CE, 0x61CF, 0x61D0, /* 0xA0 */
+ 0x61D3, 0x61D5, 0x61D6, 0x61D7, 0x61D8, 0x61D9, 0x61DA, 0x61DB, /* 0xB0 */
+ 0x61DC, 0x61DD, 0x61DE, 0x61DF, 0x61E0, 0x61E1, 0x61E2, 0x61E3, /* 0xB0 */
+ 0x61E4, 0x61E5, 0x61E7, 0x61E8, 0x61E9, 0x61EA, 0x61EB, 0x61EC, /* 0xC0 */
+ 0x61ED, 0x61EE, 0x61EF, 0x61F0, 0x61F1, 0x61F2, 0x61F3, 0x61F4, /* 0xC0 */
+ 0x61F6, 0x61F7, 0x61F8, 0x61F9, 0x61FA, 0x61FB, 0x61FC, 0x61FD, /* 0xD0 */
+ 0x61FE, 0x6200, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6207, /* 0xD0 */
+ 0x6209, 0x6213, 0x6214, 0x6219, 0x621C, 0x621D, 0x621E, 0x6220, /* 0xE0 */
+ 0x6223, 0x6226, 0x6227, 0x6228, 0x6229, 0x622B, 0x622D, 0x622F, /* 0xE0 */
+ 0x6230, 0x6231, 0x6232, 0x6235, 0x6236, 0x6238, 0x6239, 0x623A, /* 0xF0 */
+ 0x623B, 0x623C, 0x6242, 0x6244, 0x6245, 0x6246, 0x624A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x624F, 0x6250, 0x6255, 0x6256, 0x6257, 0x6259, 0x625A, 0x625C, /* 0x40 */
+ 0x625D, 0x625E, 0x625F, 0x6260, 0x6261, 0x6262, 0x6264, 0x6265, /* 0x40 */
+ 0x6268, 0x6271, 0x6272, 0x6274, 0x6275, 0x6277, 0x6278, 0x627A, /* 0x50 */
+ 0x627B, 0x627D, 0x6281, 0x6282, 0x6283, 0x6285, 0x6286, 0x6287, /* 0x50 */
+ 0x6288, 0x628B, 0x628C, 0x628D, 0x628E, 0x628F, 0x6290, 0x6294, /* 0x60 */
+ 0x6299, 0x629C, 0x629D, 0x629E, 0x62A3, 0x62A6, 0x62A7, 0x62A9, /* 0x60 */
+ 0x62AA, 0x62AD, 0x62AE, 0x62AF, 0x62B0, 0x62B2, 0x62B3, 0x62B4, /* 0x70 */
+ 0x62B6, 0x62B7, 0x62B8, 0x62BA, 0x62BE, 0x62C0, 0x62C1, 0, /* 0x70 */
+ 0x62C3, 0x62CB, 0x62CF, 0x62D1, 0x62D5, 0x62DD, 0x62DE, 0x62E0, /* 0x80 */
+ 0x62E1, 0x62E4, 0x62EA, 0x62EB, 0x62F0, 0x62F2, 0x62F5, 0x62F8, /* 0x80 */
+ 0x62F9, 0x62FA, 0x62FB, 0x6300, 0x6303, 0x6304, 0x6305, 0x6306, /* 0x90 */
+ 0x630A, 0x630B, 0x630C, 0x630D, 0x630F, 0x6310, 0x6312, 0x6313, /* 0x90 */
+ 0x6314, 0x6315, 0x6317, 0x6318, 0x6319, 0x631C, 0x6326, 0x6327, /* 0xA0 */
+ 0x6329, 0x632C, 0x632D, 0x632E, 0x6330, 0x6331, 0x6333, 0x6334, /* 0xA0 */
+ 0x6335, 0x6336, 0x6337, 0x6338, 0x633B, 0x633C, 0x633E, 0x633F, /* 0xB0 */
+ 0x6340, 0x6341, 0x6344, 0x6347, 0x6348, 0x634A, 0x6351, 0x6352, /* 0xB0 */
+ 0x6353, 0x6354, 0x6356, 0x6357, 0x6358, 0x6359, 0x635A, 0x635B, /* 0xC0 */
+ 0x635C, 0x635D, 0x6360, 0x6364, 0x6365, 0x6366, 0x6368, 0x636A, /* 0xC0 */
+ 0x636B, 0x636C, 0x636F, 0x6370, 0x6372, 0x6373, 0x6374, 0x6375, /* 0xD0 */
+ 0x6378, 0x6379, 0x637C, 0x637D, 0x637E, 0x637F, 0x6381, 0x6383, /* 0xD0 */
+ 0x6384, 0x6385, 0x6386, 0x638B, 0x638D, 0x6391, 0x6393, 0x6394, /* 0xE0 */
+ 0x6395, 0x6397, 0x6399, 0x639A, 0x639B, 0x639C, 0x639D, 0x639E, /* 0xE0 */
+ 0x639F, 0x63A1, 0x63A4, 0x63A6, 0x63AB, 0x63AF, 0x63B1, 0x63B2, /* 0xF0 */
+ 0x63B5, 0x63B6, 0x63B9, 0x63BB, 0x63BD, 0x63BF, 0x63C0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x63C1, 0x63C2, 0x63C3, 0x63C5, 0x63C7, 0x63C8, 0x63CA, 0x63CB, /* 0x40 */
+ 0x63CC, 0x63D1, 0x63D3, 0x63D4, 0x63D5, 0x63D7, 0x63D8, 0x63D9, /* 0x40 */
+ 0x63DA, 0x63DB, 0x63DC, 0x63DD, 0x63DF, 0x63E2, 0x63E4, 0x63E5, /* 0x50 */
+ 0x63E6, 0x63E7, 0x63E8, 0x63EB, 0x63EC, 0x63EE, 0x63EF, 0x63F0, /* 0x50 */
+ 0x63F1, 0x63F3, 0x63F5, 0x63F7, 0x63F9, 0x63FA, 0x63FB, 0x63FC, /* 0x60 */
+ 0x63FE, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408, 0x6409, 0x640A, /* 0x60 */
+ 0x640D, 0x640E, 0x6411, 0x6412, 0x6415, 0x6416, 0x6417, 0x6418, /* 0x70 */
+ 0x6419, 0x641A, 0x641D, 0x641F, 0x6422, 0x6423, 0x6424, 0, /* 0x70 */
+ 0x6425, 0x6427, 0x6428, 0x6429, 0x642B, 0x642E, 0x642F, 0x6430, /* 0x80 */
+ 0x6431, 0x6432, 0x6433, 0x6435, 0x6436, 0x6437, 0x6438, 0x6439, /* 0x80 */
+ 0x643B, 0x643C, 0x643E, 0x6440, 0x6442, 0x6443, 0x6449, 0x644B, /* 0x90 */
+ 0x644C, 0x644D, 0x644E, 0x644F, 0x6450, 0x6451, 0x6453, 0x6455, /* 0x90 */
+ 0x6456, 0x6457, 0x6459, 0x645A, 0x645B, 0x645C, 0x645D, 0x645F, /* 0xA0 */
+ 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6468, /* 0xA0 */
+ 0x646A, 0x646B, 0x646C, 0x646E, 0x646F, 0x6470, 0x6471, 0x6472, /* 0xB0 */
+ 0x6473, 0x6474, 0x6475, 0x6476, 0x6477, 0x647B, 0x647C, 0x647D, /* 0xB0 */
+ 0x647E, 0x647F, 0x6480, 0x6481, 0x6483, 0x6486, 0x6488, 0x6489, /* 0xC0 */
+ 0x648A, 0x648B, 0x648C, 0x648D, 0x648E, 0x648F, 0x6490, 0x6493, /* 0xC0 */
+ 0x6494, 0x6497, 0x6498, 0x649A, 0x649B, 0x649C, 0x649D, 0x649F, /* 0xD0 */
+ 0x64A0, 0x64A1, 0x64A2, 0x64A3, 0x64A5, 0x64A6, 0x64A7, 0x64A8, /* 0xD0 */
+ 0x64AA, 0x64AB, 0x64AF, 0x64B1, 0x64B2, 0x64B3, 0x64B4, 0x64B6, /* 0xE0 */
+ 0x64B9, 0x64BB, 0x64BD, 0x64BE, 0x64BF, 0x64C1, 0x64C3, 0x64C4, /* 0xE0 */
+ 0x64C6, 0x64C7, 0x64C8, 0x64C9, 0x64CA, 0x64CB, 0x64CC, 0x64CF, /* 0xF0 */
+ 0x64D1, 0x64D3, 0x64D4, 0x64D5, 0x64D6, 0x64D9, 0x64DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x64DB, 0x64DC, 0x64DD, 0x64DF, 0x64E0, 0x64E1, 0x64E3, 0x64E5, /* 0x40 */
+ 0x64E7, 0x64E8, 0x64E9, 0x64EA, 0x64EB, 0x64EC, 0x64ED, 0x64EE, /* 0x40 */
+ 0x64EF, 0x64F0, 0x64F1, 0x64F2, 0x64F3, 0x64F4, 0x64F5, 0x64F6, /* 0x50 */
+ 0x64F7, 0x64F8, 0x64F9, 0x64FA, 0x64FB, 0x64FC, 0x64FD, 0x64FE, /* 0x50 */
+ 0x64FF, 0x6501, 0x6502, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507, /* 0x60 */
+ 0x6508, 0x650A, 0x650B, 0x650C, 0x650D, 0x650E, 0x650F, 0x6510, /* 0x60 */
+ 0x6511, 0x6513, 0x6514, 0x6515, 0x6516, 0x6517, 0x6519, 0x651A, /* 0x70 */
+ 0x651B, 0x651C, 0x651D, 0x651E, 0x651F, 0x6520, 0x6521, 0, /* 0x70 */
+ 0x6522, 0x6523, 0x6524, 0x6526, 0x6527, 0x6528, 0x6529, 0x652A, /* 0x80 */
+ 0x652C, 0x652D, 0x6530, 0x6531, 0x6532, 0x6533, 0x6537, 0x653A, /* 0x80 */
+ 0x653C, 0x653D, 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6546, /* 0x90 */
+ 0x6547, 0x654A, 0x654B, 0x654D, 0x654E, 0x6550, 0x6552, 0x6553, /* 0x90 */
+ 0x6554, 0x6557, 0x6558, 0x655A, 0x655C, 0x655F, 0x6560, 0x6561, /* 0xA0 */
+ 0x6564, 0x6565, 0x6567, 0x6568, 0x6569, 0x656A, 0x656D, 0x656E, /* 0xA0 */
+ 0x656F, 0x6571, 0x6573, 0x6575, 0x6576, 0x6578, 0x6579, 0x657A, /* 0xB0 */
+ 0x657B, 0x657C, 0x657D, 0x657E, 0x657F, 0x6580, 0x6581, 0x6582, /* 0xB0 */
+ 0x6583, 0x6584, 0x6585, 0x6586, 0x6588, 0x6589, 0x658A, 0x658D, /* 0xC0 */
+ 0x658E, 0x658F, 0x6592, 0x6594, 0x6595, 0x6596, 0x6598, 0x659A, /* 0xC0 */
+ 0x659D, 0x659E, 0x65A0, 0x65A2, 0x65A3, 0x65A6, 0x65A8, 0x65AA, /* 0xD0 */
+ 0x65AC, 0x65AE, 0x65B1, 0x65B2, 0x65B3, 0x65B4, 0x65B5, 0x65B6, /* 0xD0 */
+ 0x65B7, 0x65B8, 0x65BA, 0x65BB, 0x65BE, 0x65BF, 0x65C0, 0x65C2, /* 0xE0 */
+ 0x65C7, 0x65C8, 0x65C9, 0x65CA, 0x65CD, 0x65D0, 0x65D1, 0x65D3, /* 0xE0 */
+ 0x65D4, 0x65D5, 0x65D8, 0x65D9, 0x65DA, 0x65DB, 0x65DC, 0x65DD, /* 0xF0 */
+ 0x65DE, 0x65DF, 0x65E1, 0x65E3, 0x65E4, 0x65EA, 0x65EB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x65F2, 0x65F3, 0x65F4, 0x65F5, 0x65F8, 0x65F9, 0x65FB, 0x65FC, /* 0x40 */
+ 0x65FD, 0x65FE, 0x65FF, 0x6601, 0x6604, 0x6605, 0x6607, 0x6608, /* 0x40 */
+ 0x6609, 0x660B, 0x660D, 0x6610, 0x6611, 0x6612, 0x6616, 0x6617, /* 0x50 */
+ 0x6618, 0x661A, 0x661B, 0x661C, 0x661E, 0x6621, 0x6622, 0x6623, /* 0x50 */
+ 0x6624, 0x6626, 0x6629, 0x662A, 0x662B, 0x662C, 0x662E, 0x6630, /* 0x60 */
+ 0x6632, 0x6633, 0x6637, 0x6638, 0x6639, 0x663A, 0x663B, 0x663D, /* 0x60 */
+ 0x663F, 0x6640, 0x6642, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, /* 0x70 */
+ 0x6649, 0x664A, 0x664D, 0x664E, 0x6650, 0x6651, 0x6658, 0, /* 0x70 */
+ 0x6659, 0x665B, 0x665C, 0x665D, 0x665E, 0x6660, 0x6662, 0x6663, /* 0x80 */
+ 0x6665, 0x6667, 0x6669, 0x666A, 0x666B, 0x666C, 0x666D, 0x6671, /* 0x80 */
+ 0x6672, 0x6673, 0x6675, 0x6678, 0x6679, 0x667B, 0x667C, 0x667D, /* 0x90 */
+ 0x667F, 0x6680, 0x6681, 0x6683, 0x6685, 0x6686, 0x6688, 0x6689, /* 0x90 */
+ 0x668A, 0x668B, 0x668D, 0x668E, 0x668F, 0x6690, 0x6692, 0x6693, /* 0xA0 */
+ 0x6694, 0x6695, 0x6698, 0x6699, 0x669A, 0x669B, 0x669C, 0x669E, /* 0xA0 */
+ 0x669F, 0x66A0, 0x66A1, 0x66A2, 0x66A3, 0x66A4, 0x66A5, 0x66A6, /* 0xB0 */
+ 0x66A9, 0x66AA, 0x66AB, 0x66AC, 0x66AD, 0x66AF, 0x66B0, 0x66B1, /* 0xB0 */
+ 0x66B2, 0x66B3, 0x66B5, 0x66B6, 0x66B7, 0x66B8, 0x66BA, 0x66BB, /* 0xC0 */
+ 0x66BC, 0x66BD, 0x66BF, 0x66C0, 0x66C1, 0x66C2, 0x66C3, 0x66C4, /* 0xC0 */
+ 0x66C5, 0x66C6, 0x66C7, 0x66C8, 0x66C9, 0x66CA, 0x66CB, 0x66CC, /* 0xD0 */
+ 0x66CD, 0x66CE, 0x66CF, 0x66D0, 0x66D1, 0x66D2, 0x66D3, 0x66D4, /* 0xD0 */
+ 0x66D5, 0x66D6, 0x66D7, 0x66D8, 0x66DA, 0x66DE, 0x66DF, 0x66E0, /* 0xE0 */
+ 0x66E1, 0x66E2, 0x66E3, 0x66E4, 0x66E5, 0x66E7, 0x66E8, 0x66EA, /* 0xE0 */
+ 0x66EB, 0x66EC, 0x66ED, 0x66EE, 0x66EF, 0x66F1, 0x66F5, 0x66F6, /* 0xF0 */
+ 0x66F8, 0x66FA, 0x66FB, 0x66FD, 0x6701, 0x6702, 0x6703 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6704, 0x6705, 0x6706, 0x6707, 0x670C, 0x670E, 0x670F, 0x6711, /* 0x40 */
+ 0x6712, 0x6713, 0x6716, 0x6718, 0x6719, 0x671A, 0x671C, 0x671E, /* 0x40 */
+ 0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6727, 0x6729, /* 0x50 */
+ 0x672E, 0x6730, 0x6732, 0x6733, 0x6736, 0x6737, 0x6738, 0x6739, /* 0x50 */
+ 0x673B, 0x673C, 0x673E, 0x673F, 0x6741, 0x6744, 0x6745, 0x6747, /* 0x60 */
+ 0x674A, 0x674B, 0x674D, 0x6752, 0x6754, 0x6755, 0x6757, 0x6758, /* 0x60 */
+ 0x6759, 0x675A, 0x675B, 0x675D, 0x6762, 0x6763, 0x6764, 0x6766, /* 0x70 */
+ 0x6767, 0x676B, 0x676C, 0x676E, 0x6771, 0x6774, 0x6776, 0, /* 0x70 */
+ 0x6778, 0x6779, 0x677A, 0x677B, 0x677D, 0x6780, 0x6782, 0x6783, /* 0x80 */
+ 0x6785, 0x6786, 0x6788, 0x678A, 0x678C, 0x678D, 0x678E, 0x678F, /* 0x80 */
+ 0x6791, 0x6792, 0x6793, 0x6794, 0x6796, 0x6799, 0x679B, 0x679F, /* 0x90 */
+ 0x67A0, 0x67A1, 0x67A4, 0x67A6, 0x67A9, 0x67AC, 0x67AE, 0x67B1, /* 0x90 */
+ 0x67B2, 0x67B4, 0x67B9, 0x67BA, 0x67BB, 0x67BC, 0x67BD, 0x67BE, /* 0xA0 */
+ 0x67BF, 0x67C0, 0x67C2, 0x67C5, 0x67C6, 0x67C7, 0x67C8, 0x67C9, /* 0xA0 */
+ 0x67CA, 0x67CB, 0x67CC, 0x67CD, 0x67CE, 0x67D5, 0x67D6, 0x67D7, /* 0xB0 */
+ 0x67DB, 0x67DF, 0x67E1, 0x67E3, 0x67E4, 0x67E6, 0x67E7, 0x67E8, /* 0xB0 */
+ 0x67EA, 0x67EB, 0x67ED, 0x67EE, 0x67F2, 0x67F5, 0x67F6, 0x67F7, /* 0xC0 */
+ 0x67F8, 0x67F9, 0x67FA, 0x67FB, 0x67FC, 0x67FE, 0x6801, 0x6802, /* 0xC0 */
+ 0x6803, 0x6804, 0x6806, 0x680D, 0x6810, 0x6812, 0x6814, 0x6815, /* 0xD0 */
+ 0x6818, 0x6819, 0x681A, 0x681B, 0x681C, 0x681E, 0x681F, 0x6820, /* 0xD0 */
+ 0x6822, 0x6823, 0x6824, 0x6825, 0x6826, 0x6827, 0x6828, 0x682B, /* 0xE0 */
+ 0x682C, 0x682D, 0x682E, 0x682F, 0x6830, 0x6831, 0x6834, 0x6835, /* 0xE0 */
+ 0x6836, 0x683A, 0x683B, 0x683F, 0x6847, 0x684B, 0x684D, 0x684F, /* 0xF0 */
+ 0x6852, 0x6856, 0x6857, 0x6858, 0x6859, 0x685A, 0x685B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x685C, 0x685D, 0x685E, 0x685F, 0x686A, 0x686C, 0x686D, 0x686E, /* 0x40 */
+ 0x686F, 0x6870, 0x6871, 0x6872, 0x6873, 0x6875, 0x6878, 0x6879, /* 0x40 */
+ 0x687A, 0x687B, 0x687C, 0x687D, 0x687E, 0x687F, 0x6880, 0x6882, /* 0x50 */
+ 0x6884, 0x6887, 0x6888, 0x6889, 0x688A, 0x688B, 0x688C, 0x688D, /* 0x50 */
+ 0x688E, 0x6890, 0x6891, 0x6892, 0x6894, 0x6895, 0x6896, 0x6898, /* 0x60 */
+ 0x6899, 0x689A, 0x689B, 0x689C, 0x689D, 0x689E, 0x689F, 0x68A0, /* 0x60 */
+ 0x68A1, 0x68A3, 0x68A4, 0x68A5, 0x68A9, 0x68AA, 0x68AB, 0x68AC, /* 0x70 */
+ 0x68AE, 0x68B1, 0x68B2, 0x68B4, 0x68B6, 0x68B7, 0x68B8, 0, /* 0x70 */
+ 0x68B9, 0x68BA, 0x68BB, 0x68BC, 0x68BD, 0x68BE, 0x68BF, 0x68C1, /* 0x80 */
+ 0x68C3, 0x68C4, 0x68C5, 0x68C6, 0x68C7, 0x68C8, 0x68CA, 0x68CC, /* 0x80 */
+ 0x68CE, 0x68CF, 0x68D0, 0x68D1, 0x68D3, 0x68D4, 0x68D6, 0x68D7, /* 0x90 */
+ 0x68D9, 0x68DB, 0x68DC, 0x68DD, 0x68DE, 0x68DF, 0x68E1, 0x68E2, /* 0x90 */
+ 0x68E4, 0x68E5, 0x68E6, 0x68E7, 0x68E8, 0x68E9, 0x68EA, 0x68EB, /* 0xA0 */
+ 0x68EC, 0x68ED, 0x68EF, 0x68F2, 0x68F3, 0x68F4, 0x68F6, 0x68F7, /* 0xA0 */
+ 0x68F8, 0x68FB, 0x68FD, 0x68FE, 0x68FF, 0x6900, 0x6902, 0x6903, /* 0xB0 */
+ 0x6904, 0x6906, 0x6907, 0x6908, 0x6909, 0x690A, 0x690C, 0x690F, /* 0xB0 */
+ 0x6911, 0x6913, 0x6914, 0x6915, 0x6916, 0x6917, 0x6918, 0x6919, /* 0xC0 */
+ 0x691A, 0x691B, 0x691C, 0x691D, 0x691E, 0x6921, 0x6922, 0x6923, /* 0xC0 */
+ 0x6925, 0x6926, 0x6927, 0x6928, 0x6929, 0x692A, 0x692B, 0x692C, /* 0xD0 */
+ 0x692E, 0x692F, 0x6931, 0x6932, 0x6933, 0x6935, 0x6936, 0x6937, /* 0xD0 */
+ 0x6938, 0x693A, 0x693B, 0x693C, 0x693E, 0x6940, 0x6941, 0x6943, /* 0xE0 */
+ 0x6944, 0x6945, 0x6946, 0x6947, 0x6948, 0x6949, 0x694A, 0x694B, /* 0xE0 */
+ 0x694C, 0x694D, 0x694E, 0x694F, 0x6950, 0x6951, 0x6952, 0x6953, /* 0xF0 */
+ 0x6955, 0x6956, 0x6958, 0x6959, 0x695B, 0x695C, 0x695F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6961, 0x6962, 0x6964, 0x6965, 0x6967, 0x6968, 0x6969, 0x696A, /* 0x40 */
+ 0x696C, 0x696D, 0x696F, 0x6970, 0x6972, 0x6973, 0x6974, 0x6975, /* 0x40 */
+ 0x6976, 0x697A, 0x697B, 0x697D, 0x697E, 0x697F, 0x6981, 0x6983, /* 0x50 */
+ 0x6985, 0x698A, 0x698B, 0x698C, 0x698E, 0x698F, 0x6990, 0x6991, /* 0x50 */
+ 0x6992, 0x6993, 0x6996, 0x6997, 0x6999, 0x699A, 0x699D, 0x699E, /* 0x60 */
+ 0x699F, 0x69A0, 0x69A1, 0x69A2, 0x69A3, 0x69A4, 0x69A5, 0x69A6, /* 0x60 */
+ 0x69A9, 0x69AA, 0x69AC, 0x69AE, 0x69AF, 0x69B0, 0x69B2, 0x69B3, /* 0x70 */
+ 0x69B5, 0x69B6, 0x69B8, 0x69B9, 0x69BA, 0x69BC, 0x69BD, 0, /* 0x70 */
+ 0x69BE, 0x69BF, 0x69C0, 0x69C2, 0x69C3, 0x69C4, 0x69C5, 0x69C6, /* 0x80 */
+ 0x69C7, 0x69C8, 0x69C9, 0x69CB, 0x69CD, 0x69CF, 0x69D1, 0x69D2, /* 0x80 */
+ 0x69D3, 0x69D5, 0x69D6, 0x69D7, 0x69D8, 0x69D9, 0x69DA, 0x69DC, /* 0x90 */
+ 0x69DD, 0x69DE, 0x69E1, 0x69E2, 0x69E3, 0x69E4, 0x69E5, 0x69E6, /* 0x90 */
+ 0x69E7, 0x69E8, 0x69E9, 0x69EA, 0x69EB, 0x69EC, 0x69EE, 0x69EF, /* 0xA0 */
+ 0x69F0, 0x69F1, 0x69F3, 0x69F4, 0x69F5, 0x69F6, 0x69F7, 0x69F8, /* 0xA0 */
+ 0x69F9, 0x69FA, 0x69FB, 0x69FC, 0x69FE, 0x6A00, 0x6A01, 0x6A02, /* 0xB0 */
+ 0x6A03, 0x6A04, 0x6A05, 0x6A06, 0x6A07, 0x6A08, 0x6A09, 0x6A0B, /* 0xB0 */
+ 0x6A0C, 0x6A0D, 0x6A0E, 0x6A0F, 0x6A10, 0x6A11, 0x6A12, 0x6A13, /* 0xC0 */
+ 0x6A14, 0x6A15, 0x6A16, 0x6A19, 0x6A1A, 0x6A1B, 0x6A1C, 0x6A1D, /* 0xC0 */
+ 0x6A1E, 0x6A20, 0x6A22, 0x6A23, 0x6A24, 0x6A25, 0x6A26, 0x6A27, /* 0xD0 */
+ 0x6A29, 0x6A2B, 0x6A2C, 0x6A2D, 0x6A2E, 0x6A30, 0x6A32, 0x6A33, /* 0xD0 */
+ 0x6A34, 0x6A36, 0x6A37, 0x6A38, 0x6A39, 0x6A3A, 0x6A3B, 0x6A3C, /* 0xE0 */
+ 0x6A3F, 0x6A40, 0x6A41, 0x6A42, 0x6A43, 0x6A45, 0x6A46, 0x6A48, /* 0xE0 */
+ 0x6A49, 0x6A4A, 0x6A4B, 0x6A4C, 0x6A4D, 0x6A4E, 0x6A4F, 0x6A51, /* 0xF0 */
+ 0x6A52, 0x6A53, 0x6A54, 0x6A55, 0x6A56, 0x6A57, 0x6A5A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A5C, 0x6A5D, 0x6A5E, 0x6A5F, 0x6A60, 0x6A62, 0x6A63, 0x6A64, /* 0x40 */
+ 0x6A66, 0x6A67, 0x6A68, 0x6A69, 0x6A6A, 0x6A6B, 0x6A6C, 0x6A6D, /* 0x40 */
+ 0x6A6E, 0x6A6F, 0x6A70, 0x6A72, 0x6A73, 0x6A74, 0x6A75, 0x6A76, /* 0x50 */
+ 0x6A77, 0x6A78, 0x6A7A, 0x6A7B, 0x6A7D, 0x6A7E, 0x6A7F, 0x6A81, /* 0x50 */
+ 0x6A82, 0x6A83, 0x6A85, 0x6A86, 0x6A87, 0x6A88, 0x6A89, 0x6A8A, /* 0x60 */
+ 0x6A8B, 0x6A8C, 0x6A8D, 0x6A8F, 0x6A92, 0x6A93, 0x6A94, 0x6A95, /* 0x60 */
+ 0x6A96, 0x6A98, 0x6A99, 0x6A9A, 0x6A9B, 0x6A9C, 0x6A9D, 0x6A9E, /* 0x70 */
+ 0x6A9F, 0x6AA1, 0x6AA2, 0x6AA3, 0x6AA4, 0x6AA5, 0x6AA6, 0, /* 0x70 */
+ 0x6AA7, 0x6AA8, 0x6AAA, 0x6AAD, 0x6AAE, 0x6AAF, 0x6AB0, 0x6AB1, /* 0x80 */
+ 0x6AB2, 0x6AB3, 0x6AB4, 0x6AB5, 0x6AB6, 0x6AB7, 0x6AB8, 0x6AB9, /* 0x80 */
+ 0x6ABA, 0x6ABB, 0x6ABC, 0x6ABD, 0x6ABE, 0x6ABF, 0x6AC0, 0x6AC1, /* 0x90 */
+ 0x6AC2, 0x6AC3, 0x6AC4, 0x6AC5, 0x6AC6, 0x6AC7, 0x6AC8, 0x6AC9, /* 0x90 */
+ 0x6ACA, 0x6ACB, 0x6ACC, 0x6ACD, 0x6ACE, 0x6ACF, 0x6AD0, 0x6AD1, /* 0xA0 */
+ 0x6AD2, 0x6AD3, 0x6AD4, 0x6AD5, 0x6AD6, 0x6AD7, 0x6AD8, 0x6AD9, /* 0xA0 */
+ 0x6ADA, 0x6ADB, 0x6ADC, 0x6ADD, 0x6ADE, 0x6ADF, 0x6AE0, 0x6AE1, /* 0xB0 */
+ 0x6AE2, 0x6AE3, 0x6AE4, 0x6AE5, 0x6AE6, 0x6AE7, 0x6AE8, 0x6AE9, /* 0xB0 */
+ 0x6AEA, 0x6AEB, 0x6AEC, 0x6AED, 0x6AEE, 0x6AEF, 0x6AF0, 0x6AF1, /* 0xC0 */
+ 0x6AF2, 0x6AF3, 0x6AF4, 0x6AF5, 0x6AF6, 0x6AF7, 0x6AF8, 0x6AF9, /* 0xC0 */
+ 0x6AFA, 0x6AFB, 0x6AFC, 0x6AFD, 0x6AFE, 0x6AFF, 0x6B00, 0x6B01, /* 0xD0 */
+ 0x6B02, 0x6B03, 0x6B04, 0x6B05, 0x6B06, 0x6B07, 0x6B08, 0x6B09, /* 0xD0 */
+ 0x6B0A, 0x6B0B, 0x6B0C, 0x6B0D, 0x6B0E, 0x6B0F, 0x6B10, 0x6B11, /* 0xE0 */
+ 0x6B12, 0x6B13, 0x6B14, 0x6B15, 0x6B16, 0x6B17, 0x6B18, 0x6B19, /* 0xE0 */
+ 0x6B1A, 0x6B1B, 0x6B1C, 0x6B1D, 0x6B1E, 0x6B1F, 0x6B25, 0x6B26, /* 0xF0 */
+ 0x6B28, 0x6B29, 0x6B2A, 0x6B2B, 0x6B2C, 0x6B2D, 0x6B2E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6B2F, 0x6B30, 0x6B31, 0x6B33, 0x6B34, 0x6B35, 0x6B36, 0x6B38, /* 0x40 */
+ 0x6B3B, 0x6B3C, 0x6B3D, 0x6B3F, 0x6B40, 0x6B41, 0x6B42, 0x6B44, /* 0x40 */
+ 0x6B45, 0x6B48, 0x6B4A, 0x6B4B, 0x6B4D, 0x6B4E, 0x6B4F, 0x6B50, /* 0x50 */
+ 0x6B51, 0x6B52, 0x6B53, 0x6B54, 0x6B55, 0x6B56, 0x6B57, 0x6B58, /* 0x50 */
+ 0x6B5A, 0x6B5B, 0x6B5C, 0x6B5D, 0x6B5E, 0x6B5F, 0x6B60, 0x6B61, /* 0x60 */
+ 0x6B68, 0x6B69, 0x6B6B, 0x6B6C, 0x6B6D, 0x6B6E, 0x6B6F, 0x6B70, /* 0x60 */
+ 0x6B71, 0x6B72, 0x6B73, 0x6B74, 0x6B75, 0x6B76, 0x6B77, 0x6B78, /* 0x70 */
+ 0x6B7A, 0x6B7D, 0x6B7E, 0x6B7F, 0x6B80, 0x6B85, 0x6B88, 0, /* 0x70 */
+ 0x6B8C, 0x6B8E, 0x6B8F, 0x6B90, 0x6B91, 0x6B94, 0x6B95, 0x6B97, /* 0x80 */
+ 0x6B98, 0x6B99, 0x6B9C, 0x6B9D, 0x6B9E, 0x6B9F, 0x6BA0, 0x6BA2, /* 0x80 */
+ 0x6BA3, 0x6BA4, 0x6BA5, 0x6BA6, 0x6BA7, 0x6BA8, 0x6BA9, 0x6BAB, /* 0x90 */
+ 0x6BAC, 0x6BAD, 0x6BAE, 0x6BAF, 0x6BB0, 0x6BB1, 0x6BB2, 0x6BB6, /* 0x90 */
+ 0x6BB8, 0x6BB9, 0x6BBA, 0x6BBB, 0x6BBC, 0x6BBD, 0x6BBE, 0x6BC0, /* 0xA0 */
+ 0x6BC3, 0x6BC4, 0x6BC6, 0x6BC7, 0x6BC8, 0x6BC9, 0x6BCA, 0x6BCC, /* 0xA0 */
+ 0x6BCE, 0x6BD0, 0x6BD1, 0x6BD8, 0x6BDA, 0x6BDC, 0x6BDD, 0x6BDE, /* 0xB0 */
+ 0x6BDF, 0x6BE0, 0x6BE2, 0x6BE3, 0x6BE4, 0x6BE5, 0x6BE6, 0x6BE7, /* 0xB0 */
+ 0x6BE8, 0x6BE9, 0x6BEC, 0x6BED, 0x6BEE, 0x6BF0, 0x6BF1, 0x6BF2, /* 0xC0 */
+ 0x6BF4, 0x6BF6, 0x6BF7, 0x6BF8, 0x6BFA, 0x6BFB, 0x6BFC, 0x6BFE, /* 0xC0 */
+ 0x6BFF, 0x6C00, 0x6C01, 0x6C02, 0x6C03, 0x6C04, 0x6C08, 0x6C09, /* 0xD0 */
+ 0x6C0A, 0x6C0B, 0x6C0C, 0x6C0E, 0x6C12, 0x6C17, 0x6C1C, 0x6C1D, /* 0xD0 */
+ 0x6C1E, 0x6C20, 0x6C23, 0x6C25, 0x6C2B, 0x6C2C, 0x6C2D, 0x6C31, /* 0xE0 */
+ 0x6C33, 0x6C36, 0x6C37, 0x6C39, 0x6C3A, 0x6C3B, 0x6C3C, 0x6C3E, /* 0xE0 */
+ 0x6C3F, 0x6C43, 0x6C44, 0x6C45, 0x6C48, 0x6C4B, 0x6C4C, 0x6C4D, /* 0xF0 */
+ 0x6C4E, 0x6C4F, 0x6C51, 0x6C52, 0x6C53, 0x6C56, 0x6C58 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6C59, 0x6C5A, 0x6C62, 0x6C63, 0x6C65, 0x6C66, 0x6C67, 0x6C6B, /* 0x40 */
+ 0x6C6C, 0x6C6D, 0x6C6E, 0x6C6F, 0x6C71, 0x6C73, 0x6C75, 0x6C77, /* 0x40 */
+ 0x6C78, 0x6C7A, 0x6C7B, 0x6C7C, 0x6C7F, 0x6C80, 0x6C84, 0x6C87, /* 0x50 */
+ 0x6C8A, 0x6C8B, 0x6C8D, 0x6C8E, 0x6C91, 0x6C92, 0x6C95, 0x6C96, /* 0x50 */
+ 0x6C97, 0x6C98, 0x6C9A, 0x6C9C, 0x6C9D, 0x6C9E, 0x6CA0, 0x6CA2, /* 0x60 */
+ 0x6CA8, 0x6CAC, 0x6CAF, 0x6CB0, 0x6CB4, 0x6CB5, 0x6CB6, 0x6CB7, /* 0x60 */
+ 0x6CBA, 0x6CC0, 0x6CC1, 0x6CC2, 0x6CC3, 0x6CC6, 0x6CC7, 0x6CC8, /* 0x70 */
+ 0x6CCB, 0x6CCD, 0x6CCE, 0x6CCF, 0x6CD1, 0x6CD2, 0x6CD8, 0, /* 0x70 */
+ 0x6CD9, 0x6CDA, 0x6CDC, 0x6CDD, 0x6CDF, 0x6CE4, 0x6CE6, 0x6CE7, /* 0x80 */
+ 0x6CE9, 0x6CEC, 0x6CED, 0x6CF2, 0x6CF4, 0x6CF9, 0x6CFF, 0x6D00, /* 0x80 */
+ 0x6D02, 0x6D03, 0x6D05, 0x6D06, 0x6D08, 0x6D09, 0x6D0A, 0x6D0D, /* 0x90 */
+ 0x6D0F, 0x6D10, 0x6D11, 0x6D13, 0x6D14, 0x6D15, 0x6D16, 0x6D18, /* 0x90 */
+ 0x6D1C, 0x6D1D, 0x6D1F, 0x6D20, 0x6D21, 0x6D22, 0x6D23, 0x6D24, /* 0xA0 */
+ 0x6D26, 0x6D28, 0x6D29, 0x6D2C, 0x6D2D, 0x6D2F, 0x6D30, 0x6D34, /* 0xA0 */
+ 0x6D36, 0x6D37, 0x6D38, 0x6D3A, 0x6D3F, 0x6D40, 0x6D42, 0x6D44, /* 0xB0 */
+ 0x6D49, 0x6D4C, 0x6D50, 0x6D55, 0x6D56, 0x6D57, 0x6D58, 0x6D5B, /* 0xB0 */
+ 0x6D5D, 0x6D5F, 0x6D61, 0x6D62, 0x6D64, 0x6D65, 0x6D67, 0x6D68, /* 0xC0 */
+ 0x6D6B, 0x6D6C, 0x6D6D, 0x6D70, 0x6D71, 0x6D72, 0x6D73, 0x6D75, /* 0xC0 */
+ 0x6D76, 0x6D79, 0x6D7A, 0x6D7B, 0x6D7D, 0x6D7E, 0x6D7F, 0x6D80, /* 0xD0 */
+ 0x6D81, 0x6D83, 0x6D84, 0x6D86, 0x6D87, 0x6D8A, 0x6D8B, 0x6D8D, /* 0xD0 */
+ 0x6D8F, 0x6D90, 0x6D92, 0x6D96, 0x6D97, 0x6D98, 0x6D99, 0x6D9A, /* 0xE0 */
+ 0x6D9C, 0x6DA2, 0x6DA5, 0x6DAC, 0x6DAD, 0x6DB0, 0x6DB1, 0x6DB3, /* 0xE0 */
+ 0x6DB4, 0x6DB6, 0x6DB7, 0x6DB9, 0x6DBA, 0x6DBB, 0x6DBC, 0x6DBD, /* 0xF0 */
+ 0x6DBE, 0x6DC1, 0x6DC2, 0x6DC3, 0x6DC8, 0x6DC9, 0x6DCA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6DCD, 0x6DCE, 0x6DCF, 0x6DD0, 0x6DD2, 0x6DD3, 0x6DD4, 0x6DD5, /* 0x40 */
+ 0x6DD7, 0x6DDA, 0x6DDB, 0x6DDC, 0x6DDF, 0x6DE2, 0x6DE3, 0x6DE5, /* 0x40 */
+ 0x6DE7, 0x6DE8, 0x6DE9, 0x6DEA, 0x6DED, 0x6DEF, 0x6DF0, 0x6DF2, /* 0x50 */
+ 0x6DF4, 0x6DF5, 0x6DF6, 0x6DF8, 0x6DFA, 0x6DFD, 0x6DFE, 0x6DFF, /* 0x50 */
+ 0x6E00, 0x6E01, 0x6E02, 0x6E03, 0x6E04, 0x6E06, 0x6E07, 0x6E08, /* 0x60 */
+ 0x6E09, 0x6E0B, 0x6E0F, 0x6E12, 0x6E13, 0x6E15, 0x6E18, 0x6E19, /* 0x60 */
+ 0x6E1B, 0x6E1C, 0x6E1E, 0x6E1F, 0x6E22, 0x6E26, 0x6E27, 0x6E28, /* 0x70 */
+ 0x6E2A, 0x6E2C, 0x6E2E, 0x6E30, 0x6E31, 0x6E33, 0x6E35, 0, /* 0x70 */
+ 0x6E36, 0x6E37, 0x6E39, 0x6E3B, 0x6E3C, 0x6E3D, 0x6E3E, 0x6E3F, /* 0x80 */
+ 0x6E40, 0x6E41, 0x6E42, 0x6E45, 0x6E46, 0x6E47, 0x6E48, 0x6E49, /* 0x80 */
+ 0x6E4A, 0x6E4B, 0x6E4C, 0x6E4F, 0x6E50, 0x6E51, 0x6E52, 0x6E55, /* 0x90 */
+ 0x6E57, 0x6E59, 0x6E5A, 0x6E5C, 0x6E5D, 0x6E5E, 0x6E60, 0x6E61, /* 0x90 */
+ 0x6E62, 0x6E63, 0x6E64, 0x6E65, 0x6E66, 0x6E67, 0x6E68, 0x6E69, /* 0xA0 */
+ 0x6E6A, 0x6E6C, 0x6E6D, 0x6E6F, 0x6E70, 0x6E71, 0x6E72, 0x6E73, /* 0xA0 */
+ 0x6E74, 0x6E75, 0x6E76, 0x6E77, 0x6E78, 0x6E79, 0x6E7A, 0x6E7B, /* 0xB0 */
+ 0x6E7C, 0x6E7D, 0x6E80, 0x6E81, 0x6E82, 0x6E84, 0x6E87, 0x6E88, /* 0xB0 */
+ 0x6E8A, 0x6E8B, 0x6E8C, 0x6E8D, 0x6E8E, 0x6E91, 0x6E92, 0x6E93, /* 0xC0 */
+ 0x6E94, 0x6E95, 0x6E96, 0x6E97, 0x6E99, 0x6E9A, 0x6E9B, 0x6E9D, /* 0xC0 */
+ 0x6E9E, 0x6EA0, 0x6EA1, 0x6EA3, 0x6EA4, 0x6EA6, 0x6EA8, 0x6EA9, /* 0xD0 */
+ 0x6EAB, 0x6EAC, 0x6EAD, 0x6EAE, 0x6EB0, 0x6EB3, 0x6EB5, 0x6EB8, /* 0xD0 */
+ 0x6EB9, 0x6EBC, 0x6EBE, 0x6EBF, 0x6EC0, 0x6EC3, 0x6EC4, 0x6EC5, /* 0xE0 */
+ 0x6EC6, 0x6EC8, 0x6EC9, 0x6ECA, 0x6ECC, 0x6ECD, 0x6ECE, 0x6ED0, /* 0xE0 */
+ 0x6ED2, 0x6ED6, 0x6ED8, 0x6ED9, 0x6EDB, 0x6EDC, 0x6EDD, 0x6EE3, /* 0xF0 */
+ 0x6EE7, 0x6EEA, 0x6EEB, 0x6EEC, 0x6EED, 0x6EEE, 0x6EEF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6EF0, 0x6EF1, 0x6EF2, 0x6EF3, 0x6EF5, 0x6EF6, 0x6EF7, 0x6EF8, /* 0x40 */
+ 0x6EFA, 0x6EFB, 0x6EFC, 0x6EFD, 0x6EFE, 0x6EFF, 0x6F00, 0x6F01, /* 0x40 */
+ 0x6F03, 0x6F04, 0x6F05, 0x6F07, 0x6F08, 0x6F0A, 0x6F0B, 0x6F0C, /* 0x50 */
+ 0x6F0D, 0x6F0E, 0x6F10, 0x6F11, 0x6F12, 0x6F16, 0x6F17, 0x6F18, /* 0x50 */
+ 0x6F19, 0x6F1A, 0x6F1B, 0x6F1C, 0x6F1D, 0x6F1E, 0x6F1F, 0x6F21, /* 0x60 */
+ 0x6F22, 0x6F23, 0x6F25, 0x6F26, 0x6F27, 0x6F28, 0x6F2C, 0x6F2E, /* 0x60 */
+ 0x6F30, 0x6F32, 0x6F34, 0x6F35, 0x6F37, 0x6F38, 0x6F39, 0x6F3A, /* 0x70 */
+ 0x6F3B, 0x6F3C, 0x6F3D, 0x6F3F, 0x6F40, 0x6F41, 0x6F42, 0, /* 0x70 */
+ 0x6F43, 0x6F44, 0x6F45, 0x6F48, 0x6F49, 0x6F4A, 0x6F4C, 0x6F4E, /* 0x80 */
+ 0x6F4F, 0x6F50, 0x6F51, 0x6F52, 0x6F53, 0x6F54, 0x6F55, 0x6F56, /* 0x80 */
+ 0x6F57, 0x6F59, 0x6F5A, 0x6F5B, 0x6F5D, 0x6F5F, 0x6F60, 0x6F61, /* 0x90 */
+ 0x6F63, 0x6F64, 0x6F65, 0x6F67, 0x6F68, 0x6F69, 0x6F6A, 0x6F6B, /* 0x90 */
+ 0x6F6C, 0x6F6F, 0x6F70, 0x6F71, 0x6F73, 0x6F75, 0x6F76, 0x6F77, /* 0xA0 */
+ 0x6F79, 0x6F7B, 0x6F7D, 0x6F7E, 0x6F7F, 0x6F80, 0x6F81, 0x6F82, /* 0xA0 */
+ 0x6F83, 0x6F85, 0x6F86, 0x6F87, 0x6F8A, 0x6F8B, 0x6F8F, 0x6F90, /* 0xB0 */
+ 0x6F91, 0x6F92, 0x6F93, 0x6F94, 0x6F95, 0x6F96, 0x6F97, 0x6F98, /* 0xB0 */
+ 0x6F99, 0x6F9A, 0x6F9B, 0x6F9D, 0x6F9E, 0x6F9F, 0x6FA0, 0x6FA2, /* 0xC0 */
+ 0x6FA3, 0x6FA4, 0x6FA5, 0x6FA6, 0x6FA8, 0x6FA9, 0x6FAA, 0x6FAB, /* 0xC0 */
+ 0x6FAC, 0x6FAD, 0x6FAE, 0x6FAF, 0x6FB0, 0x6FB1, 0x6FB2, 0x6FB4, /* 0xD0 */
+ 0x6FB5, 0x6FB7, 0x6FB8, 0x6FBA, 0x6FBB, 0x6FBC, 0x6FBD, 0x6FBE, /* 0xD0 */
+ 0x6FBF, 0x6FC1, 0x6FC3, 0x6FC4, 0x6FC5, 0x6FC6, 0x6FC7, 0x6FC8, /* 0xE0 */
+ 0x6FCA, 0x6FCB, 0x6FCC, 0x6FCD, 0x6FCE, 0x6FCF, 0x6FD0, 0x6FD3, /* 0xE0 */
+ 0x6FD4, 0x6FD5, 0x6FD6, 0x6FD7, 0x6FD8, 0x6FD9, 0x6FDA, 0x6FDB, /* 0xF0 */
+ 0x6FDC, 0x6FDD, 0x6FDF, 0x6FE2, 0x6FE3, 0x6FE4, 0x6FE5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6FE6, 0x6FE7, 0x6FE8, 0x6FE9, 0x6FEA, 0x6FEB, 0x6FEC, 0x6FED, /* 0x40 */
+ 0x6FF0, 0x6FF1, 0x6FF2, 0x6FF3, 0x6FF4, 0x6FF5, 0x6FF6, 0x6FF7, /* 0x40 */
+ 0x6FF8, 0x6FF9, 0x6FFA, 0x6FFB, 0x6FFC, 0x6FFD, 0x6FFE, 0x6FFF, /* 0x50 */
+ 0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7005, 0x7006, 0x7007, /* 0x50 */
+ 0x7008, 0x7009, 0x700A, 0x700B, 0x700C, 0x700D, 0x700E, 0x700F, /* 0x60 */
+ 0x7010, 0x7012, 0x7013, 0x7014, 0x7015, 0x7016, 0x7017, 0x7018, /* 0x60 */
+ 0x7019, 0x701C, 0x701D, 0x701E, 0x701F, 0x7020, 0x7021, 0x7022, /* 0x70 */
+ 0x7024, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, 0x702A, 0, /* 0x70 */
+ 0x702B, 0x702C, 0x702D, 0x702E, 0x702F, 0x7030, 0x7031, 0x7032, /* 0x80 */
+ 0x7033, 0x7034, 0x7036, 0x7037, 0x7038, 0x703A, 0x703B, 0x703C, /* 0x80 */
+ 0x703D, 0x703E, 0x703F, 0x7040, 0x7041, 0x7042, 0x7043, 0x7044, /* 0x90 */
+ 0x7045, 0x7046, 0x7047, 0x7048, 0x7049, 0x704A, 0x704B, 0x704D, /* 0x90 */
+ 0x704E, 0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, /* 0xA0 */
+ 0x7057, 0x7058, 0x7059, 0x705A, 0x705B, 0x705C, 0x705D, 0x705F, /* 0xA0 */
+ 0x7060, 0x7061, 0x7062, 0x7063, 0x7064, 0x7065, 0x7066, 0x7067, /* 0xB0 */
+ 0x7068, 0x7069, 0x706A, 0x706E, 0x7071, 0x7072, 0x7073, 0x7074, /* 0xB0 */
+ 0x7077, 0x7079, 0x707A, 0x707B, 0x707D, 0x7081, 0x7082, 0x7083, /* 0xC0 */
+ 0x7084, 0x7086, 0x7087, 0x7088, 0x708B, 0x708C, 0x708D, 0x708F, /* 0xC0 */
+ 0x7090, 0x7091, 0x7093, 0x7097, 0x7098, 0x709A, 0x709B, 0x709E, /* 0xD0 */
+ 0x709F, 0x70A0, 0x70A1, 0x70A2, 0x70A3, 0x70A4, 0x70A5, 0x70A6, /* 0xD0 */
+ 0x70A7, 0x70A8, 0x70A9, 0x70AA, 0x70B0, 0x70B2, 0x70B4, 0x70B5, /* 0xE0 */
+ 0x70B6, 0x70BA, 0x70BE, 0x70BF, 0x70C4, 0x70C5, 0x70C6, 0x70C7, /* 0xE0 */
+ 0x70C9, 0x70CB, 0x70CC, 0x70CD, 0x70CE, 0x70CF, 0x70D0, 0x70D1, /* 0xF0 */
+ 0x70D2, 0x70D3, 0x70D4, 0x70D5, 0x70D6, 0x70D7, 0x70DA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x70DC, 0x70DD, 0x70DE, 0x70E0, 0x70E1, 0x70E2, 0x70E3, 0x70E5, /* 0x40 */
+ 0x70EA, 0x70EE, 0x70F0, 0x70F1, 0x70F2, 0x70F3, 0x70F4, 0x70F5, /* 0x40 */
+ 0x70F6, 0x70F8, 0x70FA, 0x70FB, 0x70FC, 0x70FE, 0x70FF, 0x7100, /* 0x50 */
+ 0x7101, 0x7102, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x7108, /* 0x50 */
+ 0x710B, 0x710C, 0x710D, 0x710E, 0x710F, 0x7111, 0x7112, 0x7114, /* 0x60 */
+ 0x7117, 0x711B, 0x711C, 0x711D, 0x711E, 0x711F, 0x7120, 0x7121, /* 0x60 */
+ 0x7122, 0x7123, 0x7124, 0x7125, 0x7127, 0x7128, 0x7129, 0x712A, /* 0x70 */
+ 0x712B, 0x712C, 0x712D, 0x712E, 0x7132, 0x7133, 0x7134, 0, /* 0x70 */
+ 0x7135, 0x7137, 0x7138, 0x7139, 0x713A, 0x713B, 0x713C, 0x713D, /* 0x80 */
+ 0x713E, 0x713F, 0x7140, 0x7141, 0x7142, 0x7143, 0x7144, 0x7146, /* 0x80 */
+ 0x7147, 0x7148, 0x7149, 0x714B, 0x714D, 0x714F, 0x7150, 0x7151, /* 0x90 */
+ 0x7152, 0x7153, 0x7154, 0x7155, 0x7156, 0x7157, 0x7158, 0x7159, /* 0x90 */
+ 0x715A, 0x715B, 0x715D, 0x715F, 0x7160, 0x7161, 0x7162, 0x7163, /* 0xA0 */
+ 0x7165, 0x7169, 0x716A, 0x716B, 0x716C, 0x716D, 0x716F, 0x7170, /* 0xA0 */
+ 0x7171, 0x7174, 0x7175, 0x7176, 0x7177, 0x7179, 0x717B, 0x717C, /* 0xB0 */
+ 0x717E, 0x717F, 0x7180, 0x7181, 0x7182, 0x7183, 0x7185, 0x7186, /* 0xB0 */
+ 0x7187, 0x7188, 0x7189, 0x718B, 0x718C, 0x718D, 0x718E, 0x7190, /* 0xC0 */
+ 0x7191, 0x7192, 0x7193, 0x7195, 0x7196, 0x7197, 0x719A, 0x719B, /* 0xC0 */
+ 0x719C, 0x719D, 0x719E, 0x71A1, 0x71A2, 0x71A3, 0x71A4, 0x71A5, /* 0xD0 */
+ 0x71A6, 0x71A7, 0x71A9, 0x71AA, 0x71AB, 0x71AD, 0x71AE, 0x71AF, /* 0xD0 */
+ 0x71B0, 0x71B1, 0x71B2, 0x71B4, 0x71B6, 0x71B7, 0x71B8, 0x71BA, /* 0xE0 */
+ 0x71BB, 0x71BC, 0x71BD, 0x71BE, 0x71BF, 0x71C0, 0x71C1, 0x71C2, /* 0xE0 */
+ 0x71C4, 0x71C5, 0x71C6, 0x71C7, 0x71C8, 0x71C9, 0x71CA, 0x71CB, /* 0xF0 */
+ 0x71CC, 0x71CD, 0x71CF, 0x71D0, 0x71D1, 0x71D2, 0x71D3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_A0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x71D6, 0x71D7, 0x71D8, 0x71D9, 0x71DA, 0x71DB, 0x71DC, 0x71DD, /* 0x40 */
+ 0x71DE, 0x71DF, 0x71E1, 0x71E2, 0x71E3, 0x71E4, 0x71E6, 0x71E8, /* 0x40 */
+ 0x71E9, 0x71EA, 0x71EB, 0x71EC, 0x71ED, 0x71EF, 0x71F0, 0x71F1, /* 0x50 */
+ 0x71F2, 0x71F3, 0x71F4, 0x71F5, 0x71F6, 0x71F7, 0x71F8, 0x71FA, /* 0x50 */
+ 0x71FB, 0x71FC, 0x71FD, 0x71FE, 0x71FF, 0x7200, 0x7201, 0x7202, /* 0x60 */
+ 0x7203, 0x7204, 0x7205, 0x7207, 0x7208, 0x7209, 0x720A, 0x720B, /* 0x60 */
+ 0x720C, 0x720D, 0x720E, 0x720F, 0x7210, 0x7211, 0x7212, 0x7213, /* 0x70 */
+ 0x7214, 0x7215, 0x7216, 0x7217, 0x7218, 0x7219, 0x721A, 0, /* 0x70 */
+ 0x721B, 0x721C, 0x721E, 0x721F, 0x7220, 0x7221, 0x7222, 0x7223, /* 0x80 */
+ 0x7224, 0x7225, 0x7226, 0x7227, 0x7229, 0x722B, 0x722D, 0x722E, /* 0x80 */
+ 0x722F, 0x7232, 0x7233, 0x7234, 0x723A, 0x723C, 0x723E, 0x7240, /* 0x90 */
+ 0x7241, 0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724A, /* 0x90 */
+ 0x724B, 0x724E, 0x724F, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255, /* 0xA0 */
+ 0x7257, 0x7258, 0x725A, 0x725C, 0x725E, 0x7260, 0x7263, 0x7264, /* 0xA0 */
+ 0x7265, 0x7268, 0x726A, 0x726B, 0x726C, 0x726D, 0x7270, 0x7271, /* 0xB0 */
+ 0x7273, 0x7274, 0x7276, 0x7277, 0x7278, 0x727B, 0x727C, 0x727D, /* 0xB0 */
+ 0x7282, 0x7283, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728C, /* 0xC0 */
+ 0x728E, 0x7290, 0x7291, 0x7293, 0x7294, 0x7295, 0x7296, 0x7297, /* 0xC0 */
+ 0x7298, 0x7299, 0x729A, 0x729B, 0x729C, 0x729D, 0x729E, 0x72A0, /* 0xD0 */
+ 0x72A1, 0x72A2, 0x72A3, 0x72A4, 0x72A5, 0x72A6, 0x72A7, 0x72A8, /* 0xD0 */
+ 0x72A9, 0x72AA, 0x72AB, 0x72AE, 0x72B1, 0x72B2, 0x72B3, 0x72B5, /* 0xE0 */
+ 0x72BA, 0x72BB, 0x72BC, 0x72BD, 0x72BE, 0x72BF, 0x72C0, 0x72C5, /* 0xE0 */
+ 0x72C6, 0x72C7, 0x72C9, 0x72CA, 0x72CB, 0x72CC, 0x72CF, 0x72D1, /* 0xF0 */
+ 0x72D3, 0x72D4, 0x72D5, 0x72D6, 0x72D8, 0x72DA, 0x72DB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* Changes: */
+/* A1_A4: GB == 0x30FB, MS936 == 0x00B7, APPLE_CHINSIMP == 0x00B7 - we use in all systems 0x00B7 for better MS compatibility */
+/* A1_AA: GB == 0x2015, MS936 == 0x2014, APPLE_CHINSIMP == 0x2014 - we use in all systems 0x2014 for better MS compatibility */
+/* A1_AB: GB == 0xFF5E, MS936 == 0xFF5E, APPLE_CHINSIMP == 0x301C - we use in all systems 0xFF5E for better MS compatibility */
+/* A1_AD: GB == 0x2026, MS936 == 0x2026, APPLE_CHINSIMP == 0x22EF - we use in all systems 0x2026 for better MS compatibility */
+/* A1_E9: GB == 0xFFE0, MS936 == 0xFFE0, APPLE_CHINSIMP == 0x00A2 - we use in all systems 0xFFE0 for better MS compatibility */
+/* A1_EA: GB == 0xFFE1, MS936 == 0xFFE1, APPLE_CHINSIMP == 0x00A3 - we use in all systems 0xFFE1 for better MS compatibility */
+
+sal_uInt16 const aImplDBCSToUniTab_GB_A1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3000, 0x3001, 0x3002, 0x00B7, 0x02C9, 0x02C7, 0x00A8, /* 0xA0 */
+ 0x3003, 0x3005, 0x2014, 0xFF5E, 0x2016, 0x2026, 0x2018, 0x2019, /* 0xA0 */
+ 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, /* 0xB0 */
+ 0x300C, 0x300D, 0x300E, 0x300F, 0x3016, 0x3017, 0x3010, 0x3011, /* 0xB0 */
+ 0x00B1, 0x00D7, 0x00F7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220F, /* 0xC0 */
+ 0x222A, 0x2229, 0x2208, 0x2237, 0x221A, 0x22A5, 0x2225, 0x2220, /* 0xC0 */
+ 0x2312, 0x2299, 0x222B, 0x222E, 0x2261, 0x224C, 0x2248, 0x223D, /* 0xD0 */
+ 0x221D, 0x2260, 0x226E, 0x226F, 0x2264, 0x2265, 0x221E, 0x2235, /* 0xD0 */
+ 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFF04, /* 0xE0 */
+ 0x00A4, 0xFFE0, 0xFFE1, 0x2030, 0x00A7, 0x2116, 0x2606, 0x2605, /* 0xE0 */
+ 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25B3, /* 0xF0 */
+ 0x25B2, 0x203B, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* A2_A1-A2_AA is a MS 936 extension, but we use this on all systems for better MS compatibility */
+
+sal_uInt16 const aImplDBCSToUniTab_GB_A2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, /* 0xA0 */
+ 0x2177, 0x2178, 0x2179, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0x2488, 0x2489, 0x248A, 0x248B, 0x248C, 0x248D, 0x248E, /* 0xB0 */
+ 0x248F, 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, /* 0xB0 */
+ 0x2497, 0x2498, 0x2499, 0x249A, 0x249B, 0x2474, 0x2475, 0x2476, /* 0xC0 */
+ 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x247E, /* 0xC0 */
+ 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, /* 0xD0 */
+ 0x2487, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, /* 0xD0 */
+ 0x2467, 0x2468, 0x2469, 0, 0, 0x3220, 0x3221, 0x3222, /* 0xE0 */
+ 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0, /* 0xE0 */
+ 0, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, /* 0xF0 */
+ 0x2167, 0x2168, 0x2169, 0x216A, 0x216B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* Changes: */
+/* A3_A4: GB == 0xFFE5, MS936 == 0xFFE5, APPLE_CHINSIMP == 0x00A5 - we use in all systems 0xFFE5 for better MS compatibility */
+/* A3_FE: GB == 0xFFE3, MS936 == 0xFFE3, APPLE_CHINSIMP == 0x203E - we use in all systems 0xFFE3 for better MS compatibility */
+
+sal_uInt16 const aImplDBCSToUniTab_GB_A3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF01, 0xFF02, 0xFF03, 0xFFE5, 0xFF05, 0xFF06, 0xFF07, /* 0xA0 */
+ 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, /* 0xA0 */
+ 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, /* 0xB0 */
+ 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, /* 0xB0 */
+ 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, /* 0xC0 */
+ 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, /* 0xC0 */
+ 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, /* 0xD0 */
+ 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFF3C, 0xFF3D, 0xFF3E, 0xFF3F, /* 0xD0 */
+ 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0xE0 */
+ 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0xE0 */
+ 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, /* 0xF0 */
+ 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, 0xFFE3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GB_A4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0xA0 */
+ 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, /* 0xA0 */
+ 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, /* 0xB0 */
+ 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, /* 0xB0 */
+ 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, /* 0xC0 */
+ 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, /* 0xC0 */
+ 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, /* 0xD0 */
+ 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, /* 0xD0 */
+ 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0xE0 */
+ 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, /* 0xE0 */
+ 0x3090, 0x3091, 0x3092, 0x3093 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GB_A5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, /* 0xA0 */
+ 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0xA0 */
+ 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0xB0 */
+ 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0xB0 */
+ 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0xC0 */
+ 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0xC0 */
+ 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0xD0 */
+ 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0xD0 */
+ 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0xE0 */
+ 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, /* 0xE0 */
+ 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GB_A6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0xA0 */
+ 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0xA0 */
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, /* 0xB0 */
+ 0x03A9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0xC0 */
+ 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0xC0 */
+ 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, /* 0xD0 */
+ 0x03C9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xFE35, 0xFE36, 0xFE39, 0xFE3A, 0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, /* 0xE0 */
+ 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0, 0, 0xFE3B, 0xFE3C, /* 0xE0 */
+ 0xFE37, 0xFE38, 0xFE31, 0, 0xFE33, 0xFE34 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GB_A7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, /* 0xA0 */
+ 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, /* 0xA0 */
+ 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, /* 0xB0 */
+ 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, /* 0xB0 */
+ 0x042E, 0x042F, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, /* 0xD0 */
+ 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, /* 0xD0 */
+ 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0xE0 */
+ 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0xE0 */
+ 0x044E, 0x044F /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* A8_BC come from APPLE_CHINSIMP */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_A8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x02CA, 0x02CB, 0x02D9, 0x2013, 0x2015, 0x2025, 0x2035, 0x2105, /* 0x40 */
+ 0x2109, 0x2196, 0x2197, 0x2198, 0x2199, 0x2215, 0x221F, 0x2223, /* 0x40 */
+ 0x2252, 0x2266, 0x2267, 0x22BF, 0x2550, 0x2551, 0x2552, 0x2553, /* 0x50 */
+ 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, /* 0x50 */
+ 0x255C, 0x255D, 0x255E, 0x255F, 0x2560, 0x2561, 0x2562, 0x2563, /* 0x60 */
+ 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, /* 0x60 */
+ 0x256C, 0x256D, 0x256E, 0x256F, 0x2570, 0x2571, 0x2572, 0x2573, /* 0x70 */
+ 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0, /* 0x70 */
+ 0x2588, 0x2589, 0x258A, 0x258B, 0x258C, 0x258D, 0x258E, 0x258F, /* 0x80 */
+ 0x2593, 0x2594, 0x2595, 0x25BC, 0x25BD, 0x25E2, 0x25E3, 0x25E4, /* 0x80 */
+ 0x25E5, 0x2609, 0x2295, 0x3012, 0x301D, 0x301E, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x0101, 0x00E1, 0x01CE, 0x00E0, 0x0113, 0x00E9, 0x011B, /* 0xA0 */
+ 0x00E8, 0x012B, 0x00ED, 0x01D0, 0x00EC, 0x014D, 0x00F3, 0x01D2, /* 0xA0 */
+ 0x00F2, 0x016B, 0x00FA, 0x01D4, 0x00F9, 0x01D6, 0x01D8, 0x01DA, /* 0xB0 */
+ 0x01DC, 0x00FC, 0x00EA, 0x0251, 0x1E3F, 0x0144, 0x0148, 0, /* 0xB0 */
+ 0x0261, 0, 0, 0, 0, 0x3105, 0x3106, 0x3107, /* 0xC0 */
+ 0x3108, 0x3109, 0x310A, 0x310B, 0x310C, 0x310D, 0x310E, 0x310F, /* 0xC0 */
+ 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, /* 0xD0 */
+ 0x3118, 0x3119, 0x311A, 0x311B, 0x311C, 0x311D, 0x311E, 0x311F, /* 0xD0 */
+ 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, /* 0xE0 */
+ 0x3128, 0x3129 /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_A9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, /* 0x40 */
+ 0x3029, 0x32A3, 0x338E, 0x338F, 0x339C, 0x339D, 0x339E, 0x33A1, /* 0x40 */
+ 0x33C4, 0x33CE, 0x33D1, 0x33D2, 0x33D5, 0xFE30, 0xFFE2, 0xFFE4, /* 0x50 */
+ 0, 0x2121, 0x3231, 0, 0x2010, 0, 0, 0, /* 0x50 */
+ 0x30FC, 0x309B, 0x309C, 0x30FD, 0x30FE, 0x3006, 0x309D, 0x309E, /* 0x60 */
+ 0xFE49, 0xFE4A, 0xFE4B, 0xFE4C, 0xFE4D, 0xFE4E, 0xFE4F, 0xFE50, /* 0x60 */
+ 0xFE51, 0xFE52, 0xFE54, 0xFE55, 0xFE56, 0xFE57, 0xFE59, 0xFE5A, /* 0x70 */
+ 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0xFE5F, 0xFE60, 0xFE61, 0, /* 0x70 */
+ 0xFE62, 0xFE63, 0xFE64, 0xFE65, 0xFE66, 0xFE68, 0xFE69, 0xFE6A, /* 0x80 */
+ 0xFE6B, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0x3007, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0x2500, 0x2501, 0x2502, 0x2503, /* 0xA0 */
+ 0x2504, 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250A, 0x250B, /* 0xA0 */
+ 0x250C, 0x250D, 0x250E, 0x250F, 0x2510, 0x2511, 0x2512, 0x2513, /* 0xB0 */
+ 0x2514, 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251A, 0x251B, /* 0xB0 */
+ 0x251C, 0x251D, 0x251E, 0x251F, 0x2520, 0x2521, 0x2522, 0x2523, /* 0xC0 */
+ 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252A, 0x252B, /* 0xC0 */
+ 0x252C, 0x252D, 0x252E, 0x252F, 0x2530, 0x2531, 0x2532, 0x2533, /* 0xD0 */
+ 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253A, 0x253B, /* 0xD0 */
+ 0x253C, 0x253D, 0x253E, 0x253F, 0x2540, 0x2541, 0x2542, 0x2543, /* 0xE0 */
+ 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254A, 0x254B /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_AA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x72DC, 0x72DD, 0x72DF, 0x72E2, 0x72E3, 0x72E4, 0x72E5, 0x72E6, /* 0x40 */
+ 0x72E7, 0x72EA, 0x72EB, 0x72F5, 0x72F6, 0x72F9, 0x72FD, 0x72FE, /* 0x40 */
+ 0x72FF, 0x7300, 0x7302, 0x7304, 0x7305, 0x7306, 0x7307, 0x7308, /* 0x50 */
+ 0x7309, 0x730B, 0x730C, 0x730D, 0x730F, 0x7310, 0x7311, 0x7312, /* 0x50 */
+ 0x7314, 0x7318, 0x7319, 0x731A, 0x731F, 0x7320, 0x7323, 0x7324, /* 0x60 */
+ 0x7326, 0x7327, 0x7328, 0x732D, 0x732F, 0x7330, 0x7332, 0x7333, /* 0x60 */
+ 0x7335, 0x7336, 0x733A, 0x733B, 0x733C, 0x733D, 0x7340, 0x7341, /* 0x70 */
+ 0x7342, 0x7343, 0x7344, 0x7345, 0x7346, 0x7347, 0x7348, 0, /* 0x70 */
+ 0x7349, 0x734A, 0x734B, 0x734C, 0x734E, 0x734F, 0x7351, 0x7353, /* 0x80 */
+ 0x7354, 0x7355, 0x7356, 0x7358, 0x7359, 0x735A, 0x735B, 0x735C, /* 0x80 */
+ 0x735D, 0x735E, 0x735F, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, /* 0x90 */
+ 0x7366, 0x7367, 0x7368, 0x7369, 0x736A, 0x736B, 0x736E, 0x7370, /* 0x90 */
+ 0x7371 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_AB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7372, 0x7373, 0x7374, 0x7375, 0x7376, 0x7377, 0x7378, 0x7379, /* 0x40 */
+ 0x737A, 0x737B, 0x737C, 0x737D, 0x737F, 0x7380, 0x7381, 0x7382, /* 0x40 */
+ 0x7383, 0x7385, 0x7386, 0x7388, 0x738A, 0x738C, 0x738D, 0x738F, /* 0x50 */
+ 0x7390, 0x7392, 0x7393, 0x7394, 0x7395, 0x7397, 0x7398, 0x7399, /* 0x50 */
+ 0x739A, 0x739C, 0x739D, 0x739E, 0x73A0, 0x73A1, 0x73A3, 0x73A4, /* 0x60 */
+ 0x73A5, 0x73A6, 0x73A7, 0x73A8, 0x73AA, 0x73AC, 0x73AD, 0x73B1, /* 0x60 */
+ 0x73B4, 0x73B5, 0x73B6, 0x73B8, 0x73B9, 0x73BC, 0x73BD, 0x73BE, /* 0x70 */
+ 0x73BF, 0x73C1, 0x73C3, 0x73C4, 0x73C5, 0x73C6, 0x73C7, 0, /* 0x70 */
+ 0x73CB, 0x73CC, 0x73CE, 0x73D2, 0x73D3, 0x73D4, 0x73D5, 0x73D6, /* 0x80 */
+ 0x73D7, 0x73D8, 0x73DA, 0x73DB, 0x73DC, 0x73DD, 0x73DF, 0x73E1, /* 0x80 */
+ 0x73E2, 0x73E3, 0x73E4, 0x73E6, 0x73E8, 0x73EA, 0x73EB, 0x73EC, /* 0x90 */
+ 0x73EE, 0x73EF, 0x73F0, 0x73F1, 0x73F3, 0x73F4, 0x73F5, 0x73F6, /* 0x90 */
+ 0x73F7 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_AC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x73F8, 0x73F9, 0x73FA, 0x73FB, 0x73FC, 0x73FD, 0x73FE, 0x73FF, /* 0x40 */
+ 0x7400, 0x7401, 0x7402, 0x7404, 0x7407, 0x7408, 0x740B, 0x740C, /* 0x40 */
+ 0x740D, 0x740E, 0x7411, 0x7412, 0x7413, 0x7414, 0x7415, 0x7416, /* 0x50 */
+ 0x7417, 0x7418, 0x7419, 0x741C, 0x741D, 0x741E, 0x741F, 0x7420, /* 0x50 */
+ 0x7421, 0x7423, 0x7424, 0x7427, 0x7429, 0x742B, 0x742D, 0x742F, /* 0x60 */
+ 0x7431, 0x7432, 0x7437, 0x7438, 0x7439, 0x743A, 0x743B, 0x743D, /* 0x60 */
+ 0x743E, 0x743F, 0x7440, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446, /* 0x70 */
+ 0x7447, 0x7448, 0x7449, 0x744A, 0x744B, 0x744C, 0x744D, 0, /* 0x70 */
+ 0x744E, 0x744F, 0x7450, 0x7451, 0x7452, 0x7453, 0x7454, 0x7456, /* 0x80 */
+ 0x7458, 0x745D, 0x7460, 0x7461, 0x7462, 0x7463, 0x7464, 0x7465, /* 0x80 */
+ 0x7466, 0x7467, 0x7468, 0x7469, 0x746A, 0x746B, 0x746C, 0x746E, /* 0x90 */
+ 0x746F, 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, /* 0x90 */
+ 0x747A /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_AD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x747B, 0x747C, 0x747D, 0x747F, 0x7482, 0x7484, 0x7485, 0x7486, /* 0x40 */
+ 0x7488, 0x7489, 0x748A, 0x748C, 0x748D, 0x748F, 0x7491, 0x7492, /* 0x40 */
+ 0x7493, 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749A, /* 0x50 */
+ 0x749B, 0x749D, 0x749F, 0x74A0, 0x74A1, 0x74A2, 0x74A3, 0x74A4, /* 0x50 */
+ 0x74A5, 0x74A6, 0x74AA, 0x74AB, 0x74AC, 0x74AD, 0x74AE, 0x74AF, /* 0x60 */
+ 0x74B0, 0x74B1, 0x74B2, 0x74B3, 0x74B4, 0x74B5, 0x74B6, 0x74B7, /* 0x60 */
+ 0x74B8, 0x74B9, 0x74BB, 0x74BC, 0x74BD, 0x74BE, 0x74BF, 0x74C0, /* 0x70 */
+ 0x74C1, 0x74C2, 0x74C3, 0x74C4, 0x74C5, 0x74C6, 0x74C7, 0, /* 0x70 */
+ 0x74C8, 0x74C9, 0x74CA, 0x74CB, 0x74CC, 0x74CD, 0x74CE, 0x74CF, /* 0x80 */
+ 0x74D0, 0x74D1, 0x74D3, 0x74D4, 0x74D5, 0x74D6, 0x74D7, 0x74D8, /* 0x80 */
+ 0x74D9, 0x74DA, 0x74DB, 0x74DD, 0x74DF, 0x74E1, 0x74E5, 0x74E7, /* 0x90 */
+ 0x74E8, 0x74E9, 0x74EA, 0x74EB, 0x74EC, 0x74ED, 0x74F0, 0x74F1, /* 0x90 */
+ 0x74F2 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_AE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x74F3, 0x74F5, 0x74F8, 0x74F9, 0x74FA, 0x74FB, 0x74FC, 0x74FD, /* 0x40 */
+ 0x74FE, 0x7500, 0x7501, 0x7502, 0x7503, 0x7505, 0x7506, 0x7507, /* 0x40 */
+ 0x7508, 0x7509, 0x750A, 0x750B, 0x750C, 0x750E, 0x7510, 0x7512, /* 0x50 */
+ 0x7514, 0x7515, 0x7516, 0x7517, 0x751B, 0x751D, 0x751E, 0x7520, /* 0x50 */
+ 0x7521, 0x7522, 0x7523, 0x7524, 0x7526, 0x7527, 0x752A, 0x752E, /* 0x60 */
+ 0x7534, 0x7536, 0x7539, 0x753C, 0x753D, 0x753F, 0x7541, 0x7542, /* 0x60 */
+ 0x7543, 0x7544, 0x7546, 0x7547, 0x7549, 0x754A, 0x754D, 0x7550, /* 0x70 */
+ 0x7551, 0x7552, 0x7553, 0x7555, 0x7556, 0x7557, 0x7558, 0, /* 0x70 */
+ 0x755D, 0x755E, 0x755F, 0x7560, 0x7561, 0x7562, 0x7563, 0x7564, /* 0x80 */
+ 0x7567, 0x7568, 0x7569, 0x756B, 0x756C, 0x756D, 0x756E, 0x756F, /* 0x80 */
+ 0x7570, 0x7571, 0x7573, 0x7575, 0x7576, 0x7577, 0x757A, 0x757B, /* 0x90 */
+ 0x757C, 0x757D, 0x757E, 0x7580, 0x7581, 0x7582, 0x7584, 0x7585, /* 0x90 */
+ 0x7587 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_AF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7588, 0x7589, 0x758A, 0x758C, 0x758D, 0x758E, 0x7590, 0x7593, /* 0x40 */
+ 0x7595, 0x7598, 0x759B, 0x759C, 0x759E, 0x75A2, 0x75A6, 0x75A7, /* 0x40 */
+ 0x75A8, 0x75A9, 0x75AA, 0x75AD, 0x75B6, 0x75B7, 0x75BA, 0x75BB, /* 0x50 */
+ 0x75BF, 0x75C0, 0x75C1, 0x75C6, 0x75CB, 0x75CC, 0x75CE, 0x75CF, /* 0x50 */
+ 0x75D0, 0x75D1, 0x75D3, 0x75D7, 0x75D9, 0x75DA, 0x75DC, 0x75DD, /* 0x60 */
+ 0x75DF, 0x75E0, 0x75E1, 0x75E5, 0x75E9, 0x75EC, 0x75ED, 0x75EE, /* 0x60 */
+ 0x75EF, 0x75F2, 0x75F3, 0x75F5, 0x75F6, 0x75F7, 0x75F8, 0x75FA, /* 0x70 */
+ 0x75FB, 0x75FD, 0x75FE, 0x7602, 0x7604, 0x7606, 0x7607, 0, /* 0x70 */
+ 0x7608, 0x7609, 0x760B, 0x760D, 0x760E, 0x760F, 0x7611, 0x7612, /* 0x80 */
+ 0x7613, 0x7614, 0x7616, 0x761A, 0x761C, 0x761D, 0x761E, 0x7621, /* 0x80 */
+ 0x7623, 0x7627, 0x7628, 0x762C, 0x762E, 0x762F, 0x7631, 0x7632, /* 0x90 */
+ 0x7636, 0x7637, 0x7639, 0x763A, 0x763B, 0x763D, 0x7641, 0x7642, /* 0x90 */
+ 0x7644 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7645, 0x7646, 0x7647, 0x7648, 0x7649, 0x764A, 0x764B, 0x764E, /* 0x40 */
+ 0x764F, 0x7650, 0x7651, 0x7652, 0x7653, 0x7655, 0x7657, 0x7658, /* 0x40 */
+ 0x7659, 0x765A, 0x765B, 0x765D, 0x765F, 0x7660, 0x7661, 0x7662, /* 0x50 */
+ 0x7664, 0x7665, 0x7666, 0x7667, 0x7668, 0x7669, 0x766A, 0x766C, /* 0x50 */
+ 0x766D, 0x766E, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x7675, /* 0x60 */
+ 0x7676, 0x7677, 0x7679, 0x767A, 0x767C, 0x767F, 0x7680, 0x7681, /* 0x60 */
+ 0x7683, 0x7685, 0x7689, 0x768A, 0x768C, 0x768D, 0x768F, 0x7690, /* 0x70 */
+ 0x7692, 0x7694, 0x7695, 0x7697, 0x7698, 0x769A, 0x769B, 0, /* 0x70 */
+ 0x769C, 0x769D, 0x769E, 0x769F, 0x76A0, 0x76A1, 0x76A2, 0x76A3, /* 0x80 */
+ 0x76A5, 0x76A6, 0x76A7, 0x76A8, 0x76A9, 0x76AA, 0x76AB, 0x76AC, /* 0x80 */
+ 0x76AD, 0x76AF, 0x76B0, 0x76B3, 0x76B5, 0x76B6, 0x76B7, 0x76B8, /* 0x90 */
+ 0x76B9, 0x76BA, 0x76BB, 0x76BC, 0x76BD, 0x76BE, 0x76C0, 0x76C1, /* 0x90 */
+ 0x76C3, 0x554A, 0x963F, 0x57C3, 0x6328, 0x54CE, 0x5509, 0x54C0, /* 0xA0 */
+ 0x7691, 0x764C, 0x853C, 0x77EE, 0x827E, 0x788D, 0x7231, 0x9698, /* 0xA0 */
+ 0x978D, 0x6C28, 0x5B89, 0x4FFA, 0x6309, 0x6697, 0x5CB8, 0x80FA, /* 0xB0 */
+ 0x6848, 0x80AE, 0x6602, 0x76CE, 0x51F9, 0x6556, 0x71AC, 0x7FF1, /* 0xB0 */
+ 0x8884, 0x50B2, 0x5965, 0x61CA, 0x6FB3, 0x82AD, 0x634C, 0x6252, /* 0xC0 */
+ 0x53ED, 0x5427, 0x7B06, 0x516B, 0x75A4, 0x5DF4, 0x62D4, 0x8DCB, /* 0xC0 */
+ 0x9776, 0x628A, 0x8019, 0x575D, 0x9738, 0x7F62, 0x7238, 0x767D, /* 0xD0 */
+ 0x67CF, 0x767E, 0x6446, 0x4F70, 0x8D25, 0x62DC, 0x7A17, 0x6591, /* 0xD0 */
+ 0x73ED, 0x642C, 0x6273, 0x822C, 0x9881, 0x677F, 0x7248, 0x626E, /* 0xE0 */
+ 0x62CC, 0x4F34, 0x74E3, 0x534A, 0x529E, 0x7ECA, 0x90A6, 0x5E2E, /* 0xE0 */
+ 0x6886, 0x699C, 0x8180, 0x7ED1, 0x68D2, 0x78C5, 0x868C, 0x9551, /* 0xF0 */
+ 0x508D, 0x8C24, 0x82DE, 0x80DE, 0x5305, 0x8912, 0x5265 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x76C4, 0x76C7, 0x76C9, 0x76CB, 0x76CC, 0x76D3, 0x76D5, 0x76D9, /* 0x40 */
+ 0x76DA, 0x76DC, 0x76DD, 0x76DE, 0x76E0, 0x76E1, 0x76E2, 0x76E3, /* 0x40 */
+ 0x76E4, 0x76E6, 0x76E7, 0x76E8, 0x76E9, 0x76EA, 0x76EB, 0x76EC, /* 0x50 */
+ 0x76ED, 0x76F0, 0x76F3, 0x76F5, 0x76F6, 0x76F7, 0x76FA, 0x76FB, /* 0x50 */
+ 0x76FD, 0x76FF, 0x7700, 0x7702, 0x7703, 0x7705, 0x7706, 0x770A, /* 0x60 */
+ 0x770C, 0x770E, 0x770F, 0x7710, 0x7711, 0x7712, 0x7713, 0x7714, /* 0x60 */
+ 0x7715, 0x7716, 0x7717, 0x7718, 0x771B, 0x771C, 0x771D, 0x771E, /* 0x70 */
+ 0x7721, 0x7723, 0x7724, 0x7725, 0x7727, 0x772A, 0x772B, 0, /* 0x70 */
+ 0x772C, 0x772E, 0x7730, 0x7731, 0x7732, 0x7733, 0x7734, 0x7739, /* 0x80 */
+ 0x773B, 0x773D, 0x773E, 0x773F, 0x7742, 0x7744, 0x7745, 0x7746, /* 0x80 */
+ 0x7748, 0x7749, 0x774A, 0x774B, 0x774C, 0x774D, 0x774E, 0x774F, /* 0x90 */
+ 0x7752, 0x7753, 0x7754, 0x7755, 0x7756, 0x7757, 0x7758, 0x7759, /* 0x90 */
+ 0x775C, 0x8584, 0x96F9, 0x4FDD, 0x5821, 0x9971, 0x5B9D, 0x62B1, /* 0xA0 */
+ 0x62A5, 0x66B4, 0x8C79, 0x9C8D, 0x7206, 0x676F, 0x7891, 0x60B2, /* 0xA0 */
+ 0x5351, 0x5317, 0x8F88, 0x80CC, 0x8D1D, 0x94A1, 0x500D, 0x72C8, /* 0xB0 */
+ 0x5907, 0x60EB, 0x7119, 0x88AB, 0x5954, 0x82EF, 0x672C, 0x7B28, /* 0xB0 */
+ 0x5D29, 0x7EF7, 0x752D, 0x6CF5, 0x8E66, 0x8FF8, 0x903C, 0x9F3B, /* 0xC0 */
+ 0x6BD4, 0x9119, 0x7B14, 0x5F7C, 0x78A7, 0x84D6, 0x853D, 0x6BD5, /* 0xC0 */
+ 0x6BD9, 0x6BD6, 0x5E01, 0x5E87, 0x75F9, 0x95ED, 0x655D, 0x5F0A, /* 0xD0 */
+ 0x5FC5, 0x8F9F, 0x58C1, 0x81C2, 0x907F, 0x965B, 0x97AD, 0x8FB9, /* 0xD0 */
+ 0x7F16, 0x8D2C, 0x6241, 0x4FBF, 0x53D8, 0x535E, 0x8FA8, 0x8FA9, /* 0xE0 */
+ 0x8FAB, 0x904D, 0x6807, 0x5F6A, 0x8198, 0x8868, 0x9CD6, 0x618B, /* 0xE0 */
+ 0x522B, 0x762A, 0x5F6C, 0x658C, 0x6FD2, 0x6EE8, 0x5BBE, 0x6448, /* 0xF0 */
+ 0x5175, 0x51B0, 0x67C4, 0x4E19, 0x79C9, 0x997C, 0x70B3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x775D, 0x775E, 0x775F, 0x7760, 0x7764, 0x7767, 0x7769, 0x776A, /* 0x40 */
+ 0x776D, 0x776E, 0x776F, 0x7770, 0x7771, 0x7772, 0x7773, 0x7774, /* 0x40 */
+ 0x7775, 0x7776, 0x7777, 0x7778, 0x777A, 0x777B, 0x777C, 0x7781, /* 0x50 */
+ 0x7782, 0x7783, 0x7786, 0x7787, 0x7788, 0x7789, 0x778A, 0x778B, /* 0x50 */
+ 0x778F, 0x7790, 0x7793, 0x7794, 0x7795, 0x7796, 0x7797, 0x7798, /* 0x60 */
+ 0x7799, 0x779A, 0x779B, 0x779C, 0x779D, 0x779E, 0x77A1, 0x77A3, /* 0x60 */
+ 0x77A4, 0x77A6, 0x77A8, 0x77AB, 0x77AD, 0x77AE, 0x77AF, 0x77B1, /* 0x70 */
+ 0x77B2, 0x77B4, 0x77B6, 0x77B7, 0x77B8, 0x77B9, 0x77BA, 0, /* 0x70 */
+ 0x77BC, 0x77BE, 0x77C0, 0x77C1, 0x77C2, 0x77C3, 0x77C4, 0x77C5, /* 0x80 */
+ 0x77C6, 0x77C7, 0x77C8, 0x77C9, 0x77CA, 0x77CB, 0x77CC, 0x77CE, /* 0x80 */
+ 0x77CF, 0x77D0, 0x77D1, 0x77D2, 0x77D3, 0x77D4, 0x77D5, 0x77D6, /* 0x90 */
+ 0x77D8, 0x77D9, 0x77DA, 0x77DD, 0x77DE, 0x77DF, 0x77E0, 0x77E1, /* 0x90 */
+ 0x77E4, 0x75C5, 0x5E76, 0x73BB, 0x83E0, 0x64AD, 0x62E8, 0x94B5, /* 0xA0 */
+ 0x6CE2, 0x535A, 0x52C3, 0x640F, 0x94C2, 0x7B94, 0x4F2F, 0x5E1B, /* 0xA0 */
+ 0x8236, 0x8116, 0x818A, 0x6E24, 0x6CCA, 0x9A73, 0x6355, 0x535C, /* 0xB0 */
+ 0x54FA, 0x8865, 0x57E0, 0x4E0D, 0x5E03, 0x6B65, 0x7C3F, 0x90E8, /* 0xB0 */
+ 0x6016, 0x64E6, 0x731C, 0x88C1, 0x6750, 0x624D, 0x8D22, 0x776C, /* 0xC0 */
+ 0x8E29, 0x91C7, 0x5F69, 0x83DC, 0x8521, 0x9910, 0x53C2, 0x8695, /* 0xC0 */
+ 0x6B8B, 0x60ED, 0x60E8, 0x707F, 0x82CD, 0x8231, 0x4ED3, 0x6CA7, /* 0xD0 */
+ 0x85CF, 0x64CD, 0x7CD9, 0x69FD, 0x66F9, 0x8349, 0x5395, 0x7B56, /* 0xD0 */
+ 0x4FA7, 0x518C, 0x6D4B, 0x5C42, 0x8E6D, 0x63D2, 0x53C9, 0x832C, /* 0xE0 */
+ 0x8336, 0x67E5, 0x78B4, 0x643D, 0x5BDF, 0x5C94, 0x5DEE, 0x8BE7, /* 0xE0 */
+ 0x62C6, 0x67F4, 0x8C7A, 0x6400, 0x63BA, 0x8749, 0x998B, 0x8C17, /* 0xF0 */
+ 0x7F20, 0x94F2, 0x4EA7, 0x9610, 0x98A4, 0x660C, 0x7316 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x77E6, 0x77E8, 0x77EA, 0x77EF, 0x77F0, 0x77F1, 0x77F2, 0x77F4, /* 0x40 */
+ 0x77F5, 0x77F7, 0x77F9, 0x77FA, 0x77FB, 0x77FC, 0x7803, 0x7804, /* 0x40 */
+ 0x7805, 0x7806, 0x7807, 0x7808, 0x780A, 0x780B, 0x780E, 0x780F, /* 0x50 */
+ 0x7810, 0x7813, 0x7815, 0x7819, 0x781B, 0x781E, 0x7820, 0x7821, /* 0x50 */
+ 0x7822, 0x7824, 0x7828, 0x782A, 0x782B, 0x782E, 0x782F, 0x7831, /* 0x60 */
+ 0x7832, 0x7833, 0x7835, 0x7836, 0x783D, 0x783F, 0x7841, 0x7842, /* 0x60 */
+ 0x7843, 0x7844, 0x7846, 0x7848, 0x7849, 0x784A, 0x784B, 0x784D, /* 0x70 */
+ 0x784F, 0x7851, 0x7853, 0x7854, 0x7858, 0x7859, 0x785A, 0, /* 0x70 */
+ 0x785B, 0x785C, 0x785E, 0x785F, 0x7860, 0x7861, 0x7862, 0x7863, /* 0x80 */
+ 0x7864, 0x7865, 0x7866, 0x7867, 0x7868, 0x7869, 0x786F, 0x7870, /* 0x80 */
+ 0x7871, 0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7878, 0x7879, /* 0x90 */
+ 0x787A, 0x787B, 0x787D, 0x787E, 0x787F, 0x7880, 0x7881, 0x7882, /* 0x90 */
+ 0x7883, 0x573A, 0x5C1D, 0x5E38, 0x957F, 0x507F, 0x80A0, 0x5382, /* 0xA0 */
+ 0x655E, 0x7545, 0x5531, 0x5021, 0x8D85, 0x6284, 0x949E, 0x671D, /* 0xA0 */
+ 0x5632, 0x6F6E, 0x5DE2, 0x5435, 0x7092, 0x8F66, 0x626F, 0x64A4, /* 0xB0 */
+ 0x63A3, 0x5F7B, 0x6F88, 0x90F4, 0x81E3, 0x8FB0, 0x5C18, 0x6668, /* 0xB0 */
+ 0x5FF1, 0x6C89, 0x9648, 0x8D81, 0x886C, 0x6491, 0x79F0, 0x57CE, /* 0xC0 */
+ 0x6A59, 0x6210, 0x5448, 0x4E58, 0x7A0B, 0x60E9, 0x6F84, 0x8BDA, /* 0xC0 */
+ 0x627F, 0x901E, 0x9A8B, 0x79E4, 0x5403, 0x75F4, 0x6301, 0x5319, /* 0xD0 */
+ 0x6C60, 0x8FDF, 0x5F1B, 0x9A70, 0x803B, 0x9F7F, 0x4F88, 0x5C3A, /* 0xD0 */
+ 0x8D64, 0x7FC5, 0x65A5, 0x70BD, 0x5145, 0x51B2, 0x866B, 0x5D07, /* 0xE0 */
+ 0x5BA0, 0x62BD, 0x916C, 0x7574, 0x8E0C, 0x7A20, 0x6101, 0x7B79, /* 0xE0 */
+ 0x4EC7, 0x7EF8, 0x7785, 0x4E11, 0x81ED, 0x521D, 0x51FA, 0x6A71, /* 0xF0 */
+ 0x53A8, 0x8E87, 0x9504, 0x96CF, 0x6EC1, 0x9664, 0x695A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7884, 0x7885, 0x7886, 0x7888, 0x788A, 0x788B, 0x788F, 0x7890, /* 0x40 */
+ 0x7892, 0x7894, 0x7895, 0x7896, 0x7899, 0x789D, 0x789E, 0x78A0, /* 0x40 */
+ 0x78A2, 0x78A4, 0x78A6, 0x78A8, 0x78A9, 0x78AA, 0x78AB, 0x78AC, /* 0x50 */
+ 0x78AD, 0x78AE, 0x78AF, 0x78B5, 0x78B6, 0x78B7, 0x78B8, 0x78BA, /* 0x50 */
+ 0x78BB, 0x78BC, 0x78BD, 0x78BF, 0x78C0, 0x78C2, 0x78C3, 0x78C4, /* 0x60 */
+ 0x78C6, 0x78C7, 0x78C8, 0x78CC, 0x78CD, 0x78CE, 0x78CF, 0x78D1, /* 0x60 */
+ 0x78D2, 0x78D3, 0x78D6, 0x78D7, 0x78D8, 0x78DA, 0x78DB, 0x78DC, /* 0x70 */
+ 0x78DD, 0x78DE, 0x78DF, 0x78E0, 0x78E1, 0x78E2, 0x78E3, 0, /* 0x70 */
+ 0x78E4, 0x78E5, 0x78E6, 0x78E7, 0x78E9, 0x78EA, 0x78EB, 0x78ED, /* 0x80 */
+ 0x78EE, 0x78EF, 0x78F0, 0x78F1, 0x78F3, 0x78F5, 0x78F6, 0x78F8, /* 0x80 */
+ 0x78F9, 0x78FB, 0x78FC, 0x78FD, 0x78FE, 0x78FF, 0x7900, 0x7902, /* 0x90 */
+ 0x7903, 0x7904, 0x7906, 0x7907, 0x7908, 0x7909, 0x790A, 0x790B, /* 0x90 */
+ 0x790C, 0x7840, 0x50A8, 0x77D7, 0x6410, 0x89E6, 0x5904, 0x63E3, /* 0xA0 */
+ 0x5DDD, 0x7A7F, 0x693D, 0x4F20, 0x8239, 0x5598, 0x4E32, 0x75AE, /* 0xA0 */
+ 0x7A97, 0x5E62, 0x5E8A, 0x95EF, 0x521B, 0x5439, 0x708A, 0x6376, /* 0xB0 */
+ 0x9524, 0x5782, 0x6625, 0x693F, 0x9187, 0x5507, 0x6DF3, 0x7EAF, /* 0xB0 */
+ 0x8822, 0x6233, 0x7EF0, 0x75B5, 0x8328, 0x78C1, 0x96CC, 0x8F9E, /* 0xC0 */
+ 0x6148, 0x74F7, 0x8BCD, 0x6B64, 0x523A, 0x8D50, 0x6B21, 0x806A, /* 0xC0 */
+ 0x8471, 0x56F1, 0x5306, 0x4ECE, 0x4E1B, 0x51D1, 0x7C97, 0x918B, /* 0xD0 */
+ 0x7C07, 0x4FC3, 0x8E7F, 0x7BE1, 0x7A9C, 0x6467, 0x5D14, 0x50AC, /* 0xD0 */
+ 0x8106, 0x7601, 0x7CB9, 0x6DEC, 0x7FE0, 0x6751, 0x5B58, 0x5BF8, /* 0xE0 */
+ 0x78CB, 0x64AE, 0x6413, 0x63AA, 0x632B, 0x9519, 0x642D, 0x8FBE, /* 0xE0 */
+ 0x7B54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6B79, 0x50A3, 0x6234, /* 0xF0 */
+ 0x5E26, 0x6B86, 0x4EE3, 0x8D37, 0x888B, 0x5F85, 0x902E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x790D, 0x790E, 0x790F, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915, /* 0x40 */
+ 0x7916, 0x7917, 0x7918, 0x7919, 0x791A, 0x791B, 0x791C, 0x791D, /* 0x40 */
+ 0x791F, 0x7920, 0x7921, 0x7922, 0x7923, 0x7925, 0x7926, 0x7927, /* 0x50 */
+ 0x7928, 0x7929, 0x792A, 0x792B, 0x792C, 0x792D, 0x792E, 0x792F, /* 0x50 */
+ 0x7930, 0x7931, 0x7932, 0x7933, 0x7935, 0x7936, 0x7937, 0x7938, /* 0x60 */
+ 0x7939, 0x793D, 0x793F, 0x7942, 0x7943, 0x7944, 0x7945, 0x7947, /* 0x60 */
+ 0x794A, 0x794B, 0x794C, 0x794D, 0x794E, 0x794F, 0x7950, 0x7951, /* 0x70 */
+ 0x7952, 0x7954, 0x7955, 0x7958, 0x7959, 0x7961, 0x7963, 0, /* 0x70 */
+ 0x7964, 0x7966, 0x7969, 0x796A, 0x796B, 0x796C, 0x796E, 0x7970, /* 0x80 */
+ 0x7971, 0x7972, 0x7973, 0x7974, 0x7975, 0x7976, 0x7979, 0x797B, /* 0x80 */
+ 0x797C, 0x797D, 0x797E, 0x797F, 0x7982, 0x7983, 0x7986, 0x7987, /* 0x90 */
+ 0x7988, 0x7989, 0x798B, 0x798C, 0x798D, 0x798E, 0x7990, 0x7991, /* 0x90 */
+ 0x7992, 0x6020, 0x803D, 0x62C5, 0x4E39, 0x5355, 0x90F8, 0x63B8, /* 0xA0 */
+ 0x80C6, 0x65E6, 0x6C2E, 0x4F46, 0x60EE, 0x6DE1, 0x8BDE, 0x5F39, /* 0xA0 */
+ 0x86CB, 0x5F53, 0x6321, 0x515A, 0x8361, 0x6863, 0x5200, 0x6363, /* 0xB0 */
+ 0x8E48, 0x5012, 0x5C9B, 0x7977, 0x5BFC, 0x5230, 0x7A3B, 0x60BC, /* 0xB0 */
+ 0x9053, 0x76D7, 0x5FB7, 0x5F97, 0x7684, 0x8E6C, 0x706F, 0x767B, /* 0xC0 */
+ 0x7B49, 0x77AA, 0x51F3, 0x9093, 0x5824, 0x4F4E, 0x6EF4, 0x8FEA, /* 0xC0 */
+ 0x654C, 0x7B1B, 0x72C4, 0x6DA4, 0x7FDF, 0x5AE1, 0x62B5, 0x5E95, /* 0xD0 */
+ 0x5730, 0x8482, 0x7B2C, 0x5E1D, 0x5F1F, 0x9012, 0x7F14, 0x98A0, /* 0xD0 */
+ 0x6382, 0x6EC7, 0x7898, 0x70B9, 0x5178, 0x975B, 0x57AB, 0x7535, /* 0xE0 */
+ 0x4F43, 0x7538, 0x5E97, 0x60E6, 0x5960, 0x6DC0, 0x6BBF, 0x7889, /* 0xE0 */
+ 0x53FC, 0x96D5, 0x51CB, 0x5201, 0x6389, 0x540A, 0x9493, 0x8C03, /* 0xF0 */
+ 0x8DCC, 0x7239, 0x789F, 0x8776, 0x8FED, 0x8C0D, 0x53E0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7993, 0x7994, 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799B, /* 0x40 */
+ 0x799C, 0x799D, 0x799E, 0x799F, 0x79A0, 0x79A1, 0x79A2, 0x79A3, /* 0x40 */
+ 0x79A4, 0x79A5, 0x79A6, 0x79A8, 0x79A9, 0x79AA, 0x79AB, 0x79AC, /* 0x50 */
+ 0x79AD, 0x79AE, 0x79AF, 0x79B0, 0x79B1, 0x79B2, 0x79B4, 0x79B5, /* 0x50 */
+ 0x79B6, 0x79B7, 0x79B8, 0x79BC, 0x79BF, 0x79C2, 0x79C4, 0x79C5, /* 0x60 */
+ 0x79C7, 0x79C8, 0x79CA, 0x79CC, 0x79CE, 0x79CF, 0x79D0, 0x79D3, /* 0x60 */
+ 0x79D4, 0x79D6, 0x79D7, 0x79D9, 0x79DA, 0x79DB, 0x79DC, 0x79DD, /* 0x70 */
+ 0x79DE, 0x79E0, 0x79E1, 0x79E2, 0x79E5, 0x79E8, 0x79EA, 0, /* 0x70 */
+ 0x79EC, 0x79EE, 0x79F1, 0x79F2, 0x79F3, 0x79F4, 0x79F5, 0x79F6, /* 0x80 */
+ 0x79F7, 0x79F9, 0x79FA, 0x79FC, 0x79FE, 0x79FF, 0x7A01, 0x7A04, /* 0x80 */
+ 0x7A05, 0x7A07, 0x7A08, 0x7A09, 0x7A0A, 0x7A0C, 0x7A0F, 0x7A10, /* 0x90 */
+ 0x7A11, 0x7A12, 0x7A13, 0x7A15, 0x7A16, 0x7A18, 0x7A19, 0x7A1B, /* 0x90 */
+ 0x7A1C, 0x4E01, 0x76EF, 0x53EE, 0x9489, 0x9876, 0x9F0E, 0x952D, /* 0xA0 */
+ 0x5B9A, 0x8BA2, 0x4E22, 0x4E1C, 0x51AC, 0x8463, 0x61C2, 0x52A8, /* 0xA0 */
+ 0x680B, 0x4F97, 0x606B, 0x51BB, 0x6D1E, 0x515C, 0x6296, 0x6597, /* 0xB0 */
+ 0x9661, 0x8C46, 0x9017, 0x75D8, 0x90FD, 0x7763, 0x6BD2, 0x728A, /* 0xB0 */
+ 0x72EC, 0x8BFB, 0x5835, 0x7779, 0x8D4C, 0x675C, 0x9540, 0x809A, /* 0xC0 */
+ 0x5EA6, 0x6E21, 0x5992, 0x7AEF, 0x77ED, 0x953B, 0x6BB5, 0x65AD, /* 0xC0 */
+ 0x7F0E, 0x5806, 0x5151, 0x961F, 0x5BF9, 0x58A9, 0x5428, 0x8E72, /* 0xD0 */
+ 0x6566, 0x987F, 0x56E4, 0x949D, 0x76FE, 0x9041, 0x6387, 0x54C6, /* 0xD0 */
+ 0x591A, 0x593A, 0x579B, 0x8EB2, 0x6735, 0x8DFA, 0x8235, 0x5241, /* 0xE0 */
+ 0x60F0, 0x5815, 0x86FE, 0x5CE8, 0x9E45, 0x4FC4, 0x989D, 0x8BB9, /* 0xE0 */
+ 0x5A25, 0x6076, 0x5384, 0x627C, 0x904F, 0x9102, 0x997F, 0x6069, /* 0xF0 */
+ 0x800C, 0x513F, 0x8033, 0x5C14, 0x9975, 0x6D31, 0x4E8C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7A1D, 0x7A1F, 0x7A21, 0x7A22, 0x7A24, 0x7A25, 0x7A26, 0x7A27, /* 0x40 */
+ 0x7A28, 0x7A29, 0x7A2A, 0x7A2B, 0x7A2C, 0x7A2D, 0x7A2E, 0x7A2F, /* 0x40 */
+ 0x7A30, 0x7A31, 0x7A32, 0x7A34, 0x7A35, 0x7A36, 0x7A38, 0x7A3A, /* 0x50 */
+ 0x7A3E, 0x7A40, 0x7A41, 0x7A42, 0x7A43, 0x7A44, 0x7A45, 0x7A47, /* 0x50 */
+ 0x7A48, 0x7A49, 0x7A4A, 0x7A4B, 0x7A4C, 0x7A4D, 0x7A4E, 0x7A4F, /* 0x60 */
+ 0x7A50, 0x7A52, 0x7A53, 0x7A54, 0x7A55, 0x7A56, 0x7A58, 0x7A59, /* 0x60 */
+ 0x7A5A, 0x7A5B, 0x7A5C, 0x7A5D, 0x7A5E, 0x7A5F, 0x7A60, 0x7A61, /* 0x70 */
+ 0x7A62, 0x7A63, 0x7A64, 0x7A65, 0x7A66, 0x7A67, 0x7A68, 0, /* 0x70 */
+ 0x7A69, 0x7A6A, 0x7A6B, 0x7A6C, 0x7A6D, 0x7A6E, 0x7A6F, 0x7A71, /* 0x80 */
+ 0x7A72, 0x7A73, 0x7A75, 0x7A7B, 0x7A7C, 0x7A7D, 0x7A7E, 0x7A82, /* 0x80 */
+ 0x7A85, 0x7A87, 0x7A89, 0x7A8A, 0x7A8B, 0x7A8C, 0x7A8E, 0x7A8F, /* 0x90 */
+ 0x7A90, 0x7A93, 0x7A94, 0x7A99, 0x7A9A, 0x7A9B, 0x7A9E, 0x7AA1, /* 0x90 */
+ 0x7AA2, 0x8D30, 0x53D1, 0x7F5A, 0x7B4F, 0x4F10, 0x4E4F, 0x9600, /* 0xA0 */
+ 0x6CD5, 0x73D0, 0x85E9, 0x5E06, 0x756A, 0x7FFB, 0x6A0A, 0x77FE, /* 0xA0 */
+ 0x9492, 0x7E41, 0x51E1, 0x70E6, 0x53CD, 0x8FD4, 0x8303, 0x8D29, /* 0xB0 */
+ 0x72AF, 0x996D, 0x6CDB, 0x574A, 0x82B3, 0x65B9, 0x80AA, 0x623F, /* 0xB0 */
+ 0x9632, 0x59A8, 0x4EFF, 0x8BBF, 0x7EBA, 0x653E, 0x83F2, 0x975E, /* 0xC0 */
+ 0x5561, 0x98DE, 0x80A5, 0x532A, 0x8BFD, 0x5420, 0x80BA, 0x5E9F, /* 0xC0 */
+ 0x6CB8, 0x8D39, 0x82AC, 0x915A, 0x5429, 0x6C1B, 0x5206, 0x7EB7, /* 0xD0 */
+ 0x575F, 0x711A, 0x6C7E, 0x7C89, 0x594B, 0x4EFD, 0x5FFF, 0x6124, /* 0xD0 */
+ 0x7CAA, 0x4E30, 0x5C01, 0x67AB, 0x8702, 0x5CF0, 0x950B, 0x98CE, /* 0xE0 */
+ 0x75AF, 0x70FD, 0x9022, 0x51AF, 0x7F1D, 0x8BBD, 0x5949, 0x51E4, /* 0xE0 */
+ 0x4F5B, 0x5426, 0x592B, 0x6577, 0x80A4, 0x5B75, 0x6276, 0x62C2, /* 0xF0 */
+ 0x8F90, 0x5E45, 0x6C1F, 0x7B26, 0x4F0F, 0x4FD8, 0x670D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7AA3, 0x7AA4, 0x7AA7, 0x7AA9, 0x7AAA, 0x7AAB, 0x7AAE, 0x7AAF, /* 0x40 */
+ 0x7AB0, 0x7AB1, 0x7AB2, 0x7AB4, 0x7AB5, 0x7AB6, 0x7AB7, 0x7AB8, /* 0x40 */
+ 0x7AB9, 0x7ABA, 0x7ABB, 0x7ABC, 0x7ABD, 0x7ABE, 0x7AC0, 0x7AC1, /* 0x50 */
+ 0x7AC2, 0x7AC3, 0x7AC4, 0x7AC5, 0x7AC6, 0x7AC7, 0x7AC8, 0x7AC9, /* 0x50 */
+ 0x7ACA, 0x7ACC, 0x7ACD, 0x7ACE, 0x7ACF, 0x7AD0, 0x7AD1, 0x7AD2, /* 0x60 */
+ 0x7AD3, 0x7AD4, 0x7AD5, 0x7AD7, 0x7AD8, 0x7ADA, 0x7ADB, 0x7ADC, /* 0x60 */
+ 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE4, 0x7AE7, 0x7AE8, 0x7AE9, 0x7AEA, /* 0x70 */
+ 0x7AEB, 0x7AEC, 0x7AEE, 0x7AF0, 0x7AF1, 0x7AF2, 0x7AF3, 0, /* 0x70 */
+ 0x7AF4, 0x7AF5, 0x7AF6, 0x7AF7, 0x7AF8, 0x7AFB, 0x7AFC, 0x7AFE, /* 0x80 */
+ 0x7B00, 0x7B01, 0x7B02, 0x7B05, 0x7B07, 0x7B09, 0x7B0C, 0x7B0D, /* 0x80 */
+ 0x7B0E, 0x7B10, 0x7B12, 0x7B13, 0x7B16, 0x7B17, 0x7B18, 0x7B1A, /* 0x90 */
+ 0x7B1C, 0x7B1D, 0x7B1F, 0x7B21, 0x7B22, 0x7B23, 0x7B27, 0x7B29, /* 0x90 */
+ 0x7B2D, 0x6D6E, 0x6DAA, 0x798F, 0x88B1, 0x5F17, 0x752B, 0x629A, /* 0xA0 */
+ 0x8F85, 0x4FEF, 0x91DC, 0x65A7, 0x812F, 0x8151, 0x5E9C, 0x8150, /* 0xA0 */
+ 0x8D74, 0x526F, 0x8986, 0x8D4B, 0x590D, 0x5085, 0x4ED8, 0x961C, /* 0xB0 */
+ 0x7236, 0x8179, 0x8D1F, 0x5BCC, 0x8BA3, 0x9644, 0x5987, 0x7F1A, /* 0xB0 */
+ 0x5490, 0x5676, 0x560E, 0x8BE5, 0x6539, 0x6982, 0x9499, 0x76D6, /* 0xC0 */
+ 0x6E89, 0x5E72, 0x7518, 0x6746, 0x67D1, 0x7AFF, 0x809D, 0x8D76, /* 0xC0 */
+ 0x611F, 0x79C6, 0x6562, 0x8D63, 0x5188, 0x521A, 0x94A2, 0x7F38, /* 0xD0 */
+ 0x809B, 0x7EB2, 0x5C97, 0x6E2F, 0x6760, 0x7BD9, 0x768B, 0x9AD8, /* 0xD0 */
+ 0x818F, 0x7F94, 0x7CD5, 0x641E, 0x9550, 0x7A3F, 0x544A, 0x54E5, /* 0xE0 */
+ 0x6B4C, 0x6401, 0x6208, 0x9E3D, 0x80F3, 0x7599, 0x5272, 0x9769, /* 0xE0 */
+ 0x845B, 0x683C, 0x86E4, 0x9601, 0x9694, 0x94EC, 0x4E2A, 0x5404, /* 0xF0 */
+ 0x7ED9, 0x6839, 0x8DDF, 0x8015, 0x66F4, 0x5E9A, 0x7FB9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_B9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7B2F, 0x7B30, 0x7B32, 0x7B34, 0x7B35, 0x7B36, 0x7B37, 0x7B39, /* 0x40 */
+ 0x7B3B, 0x7B3D, 0x7B3F, 0x7B40, 0x7B41, 0x7B42, 0x7B43, 0x7B44, /* 0x40 */
+ 0x7B46, 0x7B48, 0x7B4A, 0x7B4D, 0x7B4E, 0x7B53, 0x7B55, 0x7B57, /* 0x50 */
+ 0x7B59, 0x7B5C, 0x7B5E, 0x7B5F, 0x7B61, 0x7B63, 0x7B64, 0x7B65, /* 0x50 */
+ 0x7B66, 0x7B67, 0x7B68, 0x7B69, 0x7B6A, 0x7B6B, 0x7B6C, 0x7B6D, /* 0x60 */
+ 0x7B6F, 0x7B70, 0x7B73, 0x7B74, 0x7B76, 0x7B78, 0x7B7A, 0x7B7C, /* 0x60 */
+ 0x7B7D, 0x7B7F, 0x7B81, 0x7B82, 0x7B83, 0x7B84, 0x7B86, 0x7B87, /* 0x70 */
+ 0x7B88, 0x7B89, 0x7B8A, 0x7B8B, 0x7B8C, 0x7B8E, 0x7B8F, 0, /* 0x70 */
+ 0x7B91, 0x7B92, 0x7B93, 0x7B96, 0x7B98, 0x7B99, 0x7B9A, 0x7B9B, /* 0x80 */
+ 0x7B9E, 0x7B9F, 0x7BA0, 0x7BA3, 0x7BA4, 0x7BA5, 0x7BAE, 0x7BAF, /* 0x80 */
+ 0x7BB0, 0x7BB2, 0x7BB3, 0x7BB5, 0x7BB6, 0x7BB7, 0x7BB9, 0x7BBA, /* 0x90 */
+ 0x7BBB, 0x7BBC, 0x7BBD, 0x7BBE, 0x7BBF, 0x7BC0, 0x7BC2, 0x7BC3, /* 0x90 */
+ 0x7BC4, 0x57C2, 0x803F, 0x6897, 0x5DE5, 0x653B, 0x529F, 0x606D, /* 0xA0 */
+ 0x9F9A, 0x4F9B, 0x8EAC, 0x516C, 0x5BAB, 0x5F13, 0x5DE9, 0x6C5E, /* 0xA0 */
+ 0x62F1, 0x8D21, 0x5171, 0x94A9, 0x52FE, 0x6C9F, 0x82DF, 0x72D7, /* 0xB0 */
+ 0x57A2, 0x6784, 0x8D2D, 0x591F, 0x8F9C, 0x83C7, 0x5495, 0x7B8D, /* 0xB0 */
+ 0x4F30, 0x6CBD, 0x5B64, 0x59D1, 0x9F13, 0x53E4, 0x86CA, 0x9AA8, /* 0xC0 */
+ 0x8C37, 0x80A1, 0x6545, 0x987E, 0x56FA, 0x96C7, 0x522E, 0x74DC, /* 0xC0 */
+ 0x5250, 0x5BE1, 0x6302, 0x8902, 0x4E56, 0x62D0, 0x602A, 0x68FA, /* 0xD0 */
+ 0x5173, 0x5B98, 0x51A0, 0x89C2, 0x7BA1, 0x9986, 0x7F50, 0x60EF, /* 0xD0 */
+ 0x704C, 0x8D2F, 0x5149, 0x5E7F, 0x901B, 0x7470, 0x89C4, 0x572D, /* 0xE0 */
+ 0x7845, 0x5F52, 0x9F9F, 0x95FA, 0x8F68, 0x9B3C, 0x8BE1, 0x7678, /* 0xE0 */
+ 0x6842, 0x67DC, 0x8DEA, 0x8D35, 0x523D, 0x8F8A, 0x6EDA, 0x68CD, /* 0xF0 */
+ 0x9505, 0x90ED, 0x56FD, 0x679C, 0x88F9, 0x8FC7, 0x54C8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_BA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7BC5, 0x7BC8, 0x7BC9, 0x7BCA, 0x7BCB, 0x7BCD, 0x7BCE, 0x7BCF, /* 0x40 */
+ 0x7BD0, 0x7BD2, 0x7BD4, 0x7BD5, 0x7BD6, 0x7BD7, 0x7BD8, 0x7BDB, /* 0x40 */
+ 0x7BDC, 0x7BDE, 0x7BDF, 0x7BE0, 0x7BE2, 0x7BE3, 0x7BE4, 0x7BE7, /* 0x50 */
+ 0x7BE8, 0x7BE9, 0x7BEB, 0x7BEC, 0x7BED, 0x7BEF, 0x7BF0, 0x7BF2, /* 0x50 */
+ 0x7BF3, 0x7BF4, 0x7BF5, 0x7BF6, 0x7BF8, 0x7BF9, 0x7BFA, 0x7BFB, /* 0x60 */
+ 0x7BFD, 0x7BFF, 0x7C00, 0x7C01, 0x7C02, 0x7C03, 0x7C04, 0x7C05, /* 0x60 */
+ 0x7C06, 0x7C08, 0x7C09, 0x7C0A, 0x7C0D, 0x7C0E, 0x7C10, 0x7C11, /* 0x70 */
+ 0x7C12, 0x7C13, 0x7C14, 0x7C15, 0x7C17, 0x7C18, 0x7C19, 0, /* 0x70 */
+ 0x7C1A, 0x7C1B, 0x7C1C, 0x7C1D, 0x7C1E, 0x7C20, 0x7C21, 0x7C22, /* 0x80 */
+ 0x7C23, 0x7C24, 0x7C25, 0x7C28, 0x7C29, 0x7C2B, 0x7C2C, 0x7C2D, /* 0x80 */
+ 0x7C2E, 0x7C2F, 0x7C30, 0x7C31, 0x7C32, 0x7C33, 0x7C34, 0x7C35, /* 0x90 */
+ 0x7C36, 0x7C37, 0x7C39, 0x7C3A, 0x7C3B, 0x7C3C, 0x7C3D, 0x7C3E, /* 0x90 */
+ 0x7C42, 0x9AB8, 0x5B69, 0x6D77, 0x6C26, 0x4EA5, 0x5BB3, 0x9A87, /* 0xA0 */
+ 0x9163, 0x61A8, 0x90AF, 0x97E9, 0x542B, 0x6DB5, 0x5BD2, 0x51FD, /* 0xA0 */
+ 0x558A, 0x7F55, 0x7FF0, 0x64BC, 0x634D, 0x65F1, 0x61BE, 0x608D, /* 0xB0 */
+ 0x710A, 0x6C57, 0x6C49, 0x592F, 0x676D, 0x822A, 0x58D5, 0x568E, /* 0xB0 */
+ 0x8C6A, 0x6BEB, 0x90DD, 0x597D, 0x8017, 0x53F7, 0x6D69, 0x5475, /* 0xC0 */
+ 0x559D, 0x8377, 0x83CF, 0x6838, 0x79BE, 0x548C, 0x4F55, 0x5408, /* 0xC0 */
+ 0x76D2, 0x8C89, 0x9602, 0x6CB3, 0x6DB8, 0x8D6B, 0x8910, 0x9E64, /* 0xD0 */
+ 0x8D3A, 0x563F, 0x9ED1, 0x75D5, 0x5F88, 0x72E0, 0x6068, 0x54FC, /* 0xD0 */
+ 0x4EA8, 0x6A2A, 0x8861, 0x6052, 0x8F70, 0x54C4, 0x70D8, 0x8679, /* 0xE0 */
+ 0x9E3F, 0x6D2A, 0x5B8F, 0x5F18, 0x7EA2, 0x5589, 0x4FAF, 0x7334, /* 0xE0 */
+ 0x543C, 0x539A, 0x5019, 0x540E, 0x547C, 0x4E4E, 0x5FFD, 0x745A, /* 0xF0 */
+ 0x58F6, 0x846B, 0x80E1, 0x8774, 0x72D0, 0x7CCA, 0x6E56 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_BB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7C43, 0x7C44, 0x7C45, 0x7C46, 0x7C47, 0x7C48, 0x7C49, 0x7C4A, /* 0x40 */
+ 0x7C4B, 0x7C4C, 0x7C4E, 0x7C4F, 0x7C50, 0x7C51, 0x7C52, 0x7C53, /* 0x40 */
+ 0x7C54, 0x7C55, 0x7C56, 0x7C57, 0x7C58, 0x7C59, 0x7C5A, 0x7C5B, /* 0x50 */
+ 0x7C5C, 0x7C5D, 0x7C5E, 0x7C5F, 0x7C60, 0x7C61, 0x7C62, 0x7C63, /* 0x50 */
+ 0x7C64, 0x7C65, 0x7C66, 0x7C67, 0x7C68, 0x7C69, 0x7C6A, 0x7C6B, /* 0x60 */
+ 0x7C6C, 0x7C6D, 0x7C6E, 0x7C6F, 0x7C70, 0x7C71, 0x7C72, 0x7C75, /* 0x60 */
+ 0x7C76, 0x7C77, 0x7C78, 0x7C79, 0x7C7A, 0x7C7E, 0x7C7F, 0x7C80, /* 0x70 */
+ 0x7C81, 0x7C82, 0x7C83, 0x7C84, 0x7C85, 0x7C86, 0x7C87, 0, /* 0x70 */
+ 0x7C88, 0x7C8A, 0x7C8B, 0x7C8C, 0x7C8D, 0x7C8E, 0x7C8F, 0x7C90, /* 0x80 */
+ 0x7C93, 0x7C94, 0x7C96, 0x7C99, 0x7C9A, 0x7C9B, 0x7CA0, 0x7CA1, /* 0x80 */
+ 0x7CA3, 0x7CA6, 0x7CA7, 0x7CA8, 0x7CA9, 0x7CAB, 0x7CAC, 0x7CAD, /* 0x90 */
+ 0x7CAF, 0x7CB0, 0x7CB4, 0x7CB5, 0x7CB6, 0x7CB7, 0x7CB8, 0x7CBA, /* 0x90 */
+ 0x7CBB, 0x5F27, 0x864E, 0x552C, 0x62A4, 0x4E92, 0x6CAA, 0x6237, /* 0xA0 */
+ 0x82B1, 0x54D7, 0x534E, 0x733E, 0x6ED1, 0x753B, 0x5212, 0x5316, /* 0xA0 */
+ 0x8BDD, 0x69D0, 0x5F8A, 0x6000, 0x6DEE, 0x574F, 0x6B22, 0x73AF, /* 0xB0 */
+ 0x6853, 0x8FD8, 0x7F13, 0x6362, 0x60A3, 0x5524, 0x75EA, 0x8C62, /* 0xB0 */
+ 0x7115, 0x6DA3, 0x5BA6, 0x5E7B, 0x8352, 0x614C, 0x9EC4, 0x78FA, /* 0xC0 */
+ 0x8757, 0x7C27, 0x7687, 0x51F0, 0x60F6, 0x714C, 0x6643, 0x5E4C, /* 0xC0 */
+ 0x604D, 0x8C0E, 0x7070, 0x6325, 0x8F89, 0x5FBD, 0x6062, 0x86D4, /* 0xD0 */
+ 0x56DE, 0x6BC1, 0x6094, 0x6167, 0x5349, 0x60E0, 0x6666, 0x8D3F, /* 0xD0 */
+ 0x79FD, 0x4F1A, 0x70E9, 0x6C47, 0x8BB3, 0x8BF2, 0x7ED8, 0x8364, /* 0xE0 */
+ 0x660F, 0x5A5A, 0x9B42, 0x6D51, 0x6DF7, 0x8C41, 0x6D3B, 0x4F19, /* 0xE0 */
+ 0x706B, 0x83B7, 0x6216, 0x60D1, 0x970D, 0x8D27, 0x7978, 0x51FB, /* 0xF0 */
+ 0x573E, 0x57FA, 0x673A, 0x7578, 0x7A3D, 0x79EF, 0x7B95 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_BC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7CBF, 0x7CC0, 0x7CC2, 0x7CC3, 0x7CC4, 0x7CC6, 0x7CC9, 0x7CCB, /* 0x40 */
+ 0x7CCE, 0x7CCF, 0x7CD0, 0x7CD1, 0x7CD2, 0x7CD3, 0x7CD4, 0x7CD8, /* 0x40 */
+ 0x7CDA, 0x7CDB, 0x7CDD, 0x7CDE, 0x7CE1, 0x7CE2, 0x7CE3, 0x7CE4, /* 0x50 */
+ 0x7CE5, 0x7CE6, 0x7CE7, 0x7CE9, 0x7CEA, 0x7CEB, 0x7CEC, 0x7CED, /* 0x50 */
+ 0x7CEE, 0x7CF0, 0x7CF1, 0x7CF2, 0x7CF3, 0x7CF4, 0x7CF5, 0x7CF6, /* 0x60 */
+ 0x7CF7, 0x7CF9, 0x7CFA, 0x7CFC, 0x7CFD, 0x7CFE, 0x7CFF, 0x7D00, /* 0x60 */
+ 0x7D01, 0x7D02, 0x7D03, 0x7D04, 0x7D05, 0x7D06, 0x7D07, 0x7D08, /* 0x70 */
+ 0x7D09, 0x7D0B, 0x7D0C, 0x7D0D, 0x7D0E, 0x7D0F, 0x7D10, 0, /* 0x70 */
+ 0x7D11, 0x7D12, 0x7D13, 0x7D14, 0x7D15, 0x7D16, 0x7D17, 0x7D18, /* 0x80 */
+ 0x7D19, 0x7D1A, 0x7D1B, 0x7D1C, 0x7D1D, 0x7D1E, 0x7D1F, 0x7D21, /* 0x80 */
+ 0x7D23, 0x7D24, 0x7D25, 0x7D26, 0x7D28, 0x7D29, 0x7D2A, 0x7D2C, /* 0x90 */
+ 0x7D2D, 0x7D2E, 0x7D30, 0x7D31, 0x7D32, 0x7D33, 0x7D34, 0x7D35, /* 0x90 */
+ 0x7D36, 0x808C, 0x9965, 0x8FF9, 0x6FC0, 0x8BA5, 0x9E21, 0x59EC, /* 0xA0 */
+ 0x7EE9, 0x7F09, 0x5409, 0x6781, 0x68D8, 0x8F91, 0x7C4D, 0x96C6, /* 0xA0 */
+ 0x53CA, 0x6025, 0x75BE, 0x6C72, 0x5373, 0x5AC9, 0x7EA7, 0x6324, /* 0xB0 */
+ 0x51E0, 0x810A, 0x5DF1, 0x84DF, 0x6280, 0x5180, 0x5B63, 0x4F0E, /* 0xB0 */
+ 0x796D, 0x5242, 0x60B8, 0x6D4E, 0x5BC4, 0x5BC2, 0x8BA1, 0x8BB0, /* 0xC0 */
+ 0x65E2, 0x5FCC, 0x9645, 0x5993, 0x7EE7, 0x7EAA, 0x5609, 0x67B7, /* 0xC0 */
+ 0x5939, 0x4F73, 0x5BB6, 0x52A0, 0x835A, 0x988A, 0x8D3E, 0x7532, /* 0xD0 */
+ 0x94BE, 0x5047, 0x7A3C, 0x4EF7, 0x67B6, 0x9A7E, 0x5AC1, 0x6B7C, /* 0xD0 */
+ 0x76D1, 0x575A, 0x5C16, 0x7B3A, 0x95F4, 0x714E, 0x517C, 0x80A9, /* 0xE0 */
+ 0x8270, 0x5978, 0x7F04, 0x8327, 0x68C0, 0x67EC, 0x78B1, 0x7877, /* 0xE0 */
+ 0x62E3, 0x6361, 0x7B80, 0x4FED, 0x526A, 0x51CF, 0x8350, 0x69DB, /* 0xF0 */
+ 0x9274, 0x8DF5, 0x8D31, 0x89C1, 0x952E, 0x7BAD, 0x4EF6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_BD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7D37, 0x7D38, 0x7D39, 0x7D3A, 0x7D3B, 0x7D3C, 0x7D3D, 0x7D3E, /* 0x40 */
+ 0x7D3F, 0x7D40, 0x7D41, 0x7D42, 0x7D43, 0x7D44, 0x7D45, 0x7D46, /* 0x40 */
+ 0x7D47, 0x7D48, 0x7D49, 0x7D4A, 0x7D4B, 0x7D4C, 0x7D4D, 0x7D4E, /* 0x50 */
+ 0x7D4F, 0x7D50, 0x7D51, 0x7D52, 0x7D53, 0x7D54, 0x7D55, 0x7D56, /* 0x50 */
+ 0x7D57, 0x7D58, 0x7D59, 0x7D5A, 0x7D5B, 0x7D5C, 0x7D5D, 0x7D5E, /* 0x60 */
+ 0x7D5F, 0x7D60, 0x7D61, 0x7D62, 0x7D63, 0x7D64, 0x7D65, 0x7D66, /* 0x60 */
+ 0x7D67, 0x7D68, 0x7D69, 0x7D6A, 0x7D6B, 0x7D6C, 0x7D6D, 0x7D6F, /* 0x70 */
+ 0x7D70, 0x7D71, 0x7D72, 0x7D73, 0x7D74, 0x7D75, 0x7D76, 0, /* 0x70 */
+ 0x7D78, 0x7D79, 0x7D7A, 0x7D7B, 0x7D7C, 0x7D7D, 0x7D7E, 0x7D7F, /* 0x80 */
+ 0x7D80, 0x7D81, 0x7D82, 0x7D83, 0x7D84, 0x7D85, 0x7D86, 0x7D87, /* 0x80 */
+ 0x7D88, 0x7D89, 0x7D8A, 0x7D8B, 0x7D8C, 0x7D8D, 0x7D8E, 0x7D8F, /* 0x90 */
+ 0x7D90, 0x7D91, 0x7D92, 0x7D93, 0x7D94, 0x7D95, 0x7D96, 0x7D97, /* 0x90 */
+ 0x7D98, 0x5065, 0x8230, 0x5251, 0x996F, 0x6E10, 0x6E85, 0x6DA7, /* 0xA0 */
+ 0x5EFA, 0x50F5, 0x59DC, 0x5C06, 0x6D46, 0x6C5F, 0x7586, 0x848B, /* 0xA0 */
+ 0x6868, 0x5956, 0x8BB2, 0x5320, 0x9171, 0x964D, 0x8549, 0x6912, /* 0xB0 */
+ 0x7901, 0x7126, 0x80F6, 0x4EA4, 0x90CA, 0x6D47, 0x9A84, 0x5A07, /* 0xB0 */
+ 0x56BC, 0x6405, 0x94F0, 0x77EB, 0x4FA5, 0x811A, 0x72E1, 0x89D2, /* 0xC0 */
+ 0x997A, 0x7F34, 0x7EDE, 0x527F, 0x6559, 0x9175, 0x8F7F, 0x8F83, /* 0xC0 */
+ 0x53EB, 0x7A96, 0x63ED, 0x63A5, 0x7686, 0x79F8, 0x8857, 0x9636, /* 0xD0 */
+ 0x622A, 0x52AB, 0x8282, 0x6854, 0x6770, 0x6377, 0x776B, 0x7AED, /* 0xD0 */
+ 0x6D01, 0x7ED3, 0x89E3, 0x59D0, 0x6212, 0x85C9, 0x82A5, 0x754C, /* 0xE0 */
+ 0x501F, 0x4ECB, 0x75A5, 0x8BEB, 0x5C4A, 0x5DFE, 0x7B4B, 0x65A4, /* 0xE0 */
+ 0x91D1, 0x4ECA, 0x6D25, 0x895F, 0x7D27, 0x9526, 0x4EC5, 0x8C28, /* 0xF0 */
+ 0x8FDB, 0x9773, 0x664B, 0x7981, 0x8FD1, 0x70EC, 0x6D78 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_BE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7D99, 0x7D9A, 0x7D9B, 0x7D9C, 0x7D9D, 0x7D9E, 0x7D9F, 0x7DA0, /* 0x40 */
+ 0x7DA1, 0x7DA2, 0x7DA3, 0x7DA4, 0x7DA5, 0x7DA7, 0x7DA8, 0x7DA9, /* 0x40 */
+ 0x7DAA, 0x7DAB, 0x7DAC, 0x7DAD, 0x7DAF, 0x7DB0, 0x7DB1, 0x7DB2, /* 0x50 */
+ 0x7DB3, 0x7DB4, 0x7DB5, 0x7DB6, 0x7DB7, 0x7DB8, 0x7DB9, 0x7DBA, /* 0x50 */
+ 0x7DBB, 0x7DBC, 0x7DBD, 0x7DBE, 0x7DBF, 0x7DC0, 0x7DC1, 0x7DC2, /* 0x60 */
+ 0x7DC3, 0x7DC4, 0x7DC5, 0x7DC6, 0x7DC7, 0x7DC8, 0x7DC9, 0x7DCA, /* 0x60 */
+ 0x7DCB, 0x7DCC, 0x7DCD, 0x7DCE, 0x7DCF, 0x7DD0, 0x7DD1, 0x7DD2, /* 0x70 */
+ 0x7DD3, 0x7DD4, 0x7DD5, 0x7DD6, 0x7DD7, 0x7DD8, 0x7DD9, 0, /* 0x70 */
+ 0x7DDA, 0x7DDB, 0x7DDC, 0x7DDD, 0x7DDE, 0x7DDF, 0x7DE0, 0x7DE1, /* 0x80 */
+ 0x7DE2, 0x7DE3, 0x7DE4, 0x7DE5, 0x7DE6, 0x7DE7, 0x7DE8, 0x7DE9, /* 0x80 */
+ 0x7DEA, 0x7DEB, 0x7DEC, 0x7DED, 0x7DEE, 0x7DEF, 0x7DF0, 0x7DF1, /* 0x90 */
+ 0x7DF2, 0x7DF3, 0x7DF4, 0x7DF5, 0x7DF6, 0x7DF7, 0x7DF8, 0x7DF9, /* 0x90 */
+ 0x7DFA, 0x5C3D, 0x52B2, 0x8346, 0x5162, 0x830E, 0x775B, 0x6676, /* 0xA0 */
+ 0x9CB8, 0x4EAC, 0x60CA, 0x7CBE, 0x7CB3, 0x7ECF, 0x4E95, 0x8B66, /* 0xA0 */
+ 0x666F, 0x9888, 0x9759, 0x5883, 0x656C, 0x955C, 0x5F84, 0x75C9, /* 0xB0 */
+ 0x9756, 0x7ADF, 0x7ADE, 0x51C0, 0x70AF, 0x7A98, 0x63EA, 0x7A76, /* 0xB0 */
+ 0x7EA0, 0x7396, 0x97ED, 0x4E45, 0x7078, 0x4E5D, 0x9152, 0x53A9, /* 0xC0 */
+ 0x6551, 0x65E7, 0x81FC, 0x8205, 0x548E, 0x5C31, 0x759A, 0x97A0, /* 0xC0 */
+ 0x62D8, 0x72D9, 0x75BD, 0x5C45, 0x9A79, 0x83CA, 0x5C40, 0x5480, /* 0xD0 */
+ 0x77E9, 0x4E3E, 0x6CAE, 0x805A, 0x62D2, 0x636E, 0x5DE8, 0x5177, /* 0xD0 */
+ 0x8DDD, 0x8E1E, 0x952F, 0x4FF1, 0x53E5, 0x60E7, 0x70AC, 0x5267, /* 0xE0 */
+ 0x6350, 0x9E43, 0x5A1F, 0x5026, 0x7737, 0x5377, 0x7EE2, 0x6485, /* 0xE0 */
+ 0x652B, 0x6289, 0x6398, 0x5014, 0x7235, 0x89C9, 0x51B3, 0x8BC0, /* 0xF0 */
+ 0x7EDD, 0x5747, 0x83CC, 0x94A7, 0x519B, 0x541B, 0x5CFB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_BF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7DFB, 0x7DFC, 0x7DFD, 0x7DFE, 0x7DFF, 0x7E00, 0x7E01, 0x7E02, /* 0x40 */
+ 0x7E03, 0x7E04, 0x7E05, 0x7E06, 0x7E07, 0x7E08, 0x7E09, 0x7E0A, /* 0x40 */
+ 0x7E0B, 0x7E0C, 0x7E0D, 0x7E0E, 0x7E0F, 0x7E10, 0x7E11, 0x7E12, /* 0x50 */
+ 0x7E13, 0x7E14, 0x7E15, 0x7E16, 0x7E17, 0x7E18, 0x7E19, 0x7E1A, /* 0x50 */
+ 0x7E1B, 0x7E1C, 0x7E1D, 0x7E1E, 0x7E1F, 0x7E20, 0x7E21, 0x7E22, /* 0x60 */
+ 0x7E23, 0x7E24, 0x7E25, 0x7E26, 0x7E27, 0x7E28, 0x7E29, 0x7E2A, /* 0x60 */
+ 0x7E2B, 0x7E2C, 0x7E2D, 0x7E2E, 0x7E2F, 0x7E30, 0x7E31, 0x7E32, /* 0x70 */
+ 0x7E33, 0x7E34, 0x7E35, 0x7E36, 0x7E37, 0x7E38, 0x7E39, 0, /* 0x70 */
+ 0x7E3A, 0x7E3C, 0x7E3D, 0x7E3E, 0x7E3F, 0x7E40, 0x7E42, 0x7E43, /* 0x80 */
+ 0x7E44, 0x7E45, 0x7E46, 0x7E48, 0x7E49, 0x7E4A, 0x7E4B, 0x7E4C, /* 0x80 */
+ 0x7E4D, 0x7E4E, 0x7E4F, 0x7E50, 0x7E51, 0x7E52, 0x7E53, 0x7E54, /* 0x90 */
+ 0x7E55, 0x7E56, 0x7E57, 0x7E58, 0x7E59, 0x7E5A, 0x7E5B, 0x7E5C, /* 0x90 */
+ 0x7E5D, 0x4FCA, 0x7AE3, 0x6D5A, 0x90E1, 0x9A8F, 0x5580, 0x5496, /* 0xA0 */
+ 0x5361, 0x54AF, 0x5F00, 0x63E9, 0x6977, 0x51EF, 0x6168, 0x520A, /* 0xA0 */
+ 0x582A, 0x52D8, 0x574E, 0x780D, 0x770B, 0x5EB7, 0x6177, 0x7CE0, /* 0xB0 */
+ 0x625B, 0x6297, 0x4EA2, 0x7095, 0x8003, 0x62F7, 0x70E4, 0x9760, /* 0xB0 */
+ 0x5777, 0x82DB, 0x67EF, 0x68F5, 0x78D5, 0x9897, 0x79D1, 0x58F3, /* 0xC0 */
+ 0x54B3, 0x53EF, 0x6E34, 0x514B, 0x523B, 0x5BA2, 0x8BFE, 0x80AF, /* 0xC0 */
+ 0x5543, 0x57A6, 0x6073, 0x5751, 0x542D, 0x7A7A, 0x6050, 0x5B54, /* 0xD0 */
+ 0x63A7, 0x62A0, 0x53E3, 0x6263, 0x5BC7, 0x67AF, 0x54ED, 0x7A9F, /* 0xD0 */
+ 0x82E6, 0x9177, 0x5E93, 0x88E4, 0x5938, 0x57AE, 0x630E, 0x8DE8, /* 0xE0 */
+ 0x80EF, 0x5757, 0x7B77, 0x4FA9, 0x5FEB, 0x5BBD, 0x6B3E, 0x5321, /* 0xE0 */
+ 0x7B50, 0x72C2, 0x6846, 0x77FF, 0x7736, 0x65F7, 0x51B5, 0x4E8F, /* 0xF0 */
+ 0x76D4, 0x5CBF, 0x7AA5, 0x8475, 0x594E, 0x9B41, 0x5080 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7E5E, 0x7E5F, 0x7E60, 0x7E61, 0x7E62, 0x7E63, 0x7E64, 0x7E65, /* 0x40 */
+ 0x7E66, 0x7E67, 0x7E68, 0x7E69, 0x7E6A, 0x7E6B, 0x7E6C, 0x7E6D, /* 0x40 */
+ 0x7E6E, 0x7E6F, 0x7E70, 0x7E71, 0x7E72, 0x7E73, 0x7E74, 0x7E75, /* 0x50 */
+ 0x7E76, 0x7E77, 0x7E78, 0x7E79, 0x7E7A, 0x7E7B, 0x7E7C, 0x7E7D, /* 0x50 */
+ 0x7E7E, 0x7E7F, 0x7E80, 0x7E81, 0x7E83, 0x7E84, 0x7E85, 0x7E86, /* 0x60 */
+ 0x7E87, 0x7E88, 0x7E89, 0x7E8A, 0x7E8B, 0x7E8C, 0x7E8D, 0x7E8E, /* 0x60 */
+ 0x7E8F, 0x7E90, 0x7E91, 0x7E92, 0x7E93, 0x7E94, 0x7E95, 0x7E96, /* 0x70 */
+ 0x7E97, 0x7E98, 0x7E99, 0x7E9A, 0x7E9C, 0x7E9D, 0x7E9E, 0, /* 0x70 */
+ 0x7EAE, 0x7EB4, 0x7EBB, 0x7EBC, 0x7ED6, 0x7EE4, 0x7EEC, 0x7EF9, /* 0x80 */
+ 0x7F0A, 0x7F10, 0x7F1E, 0x7F37, 0x7F39, 0x7F3B, 0x7F3C, 0x7F3D, /* 0x80 */
+ 0x7F3E, 0x7F3F, 0x7F40, 0x7F41, 0x7F43, 0x7F46, 0x7F47, 0x7F48, /* 0x90 */
+ 0x7F49, 0x7F4A, 0x7F4B, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F4F, 0x7F52, /* 0x90 */
+ 0x7F53, 0x9988, 0x6127, 0x6E83, 0x5764, 0x6606, 0x6346, 0x56F0, /* 0xA0 */
+ 0x62EC, 0x6269, 0x5ED3, 0x9614, 0x5783, 0x62C9, 0x5587, 0x8721, /* 0xA0 */
+ 0x814A, 0x8FA3, 0x5566, 0x83B1, 0x6765, 0x8D56, 0x84DD, 0x5A6A, /* 0xB0 */
+ 0x680F, 0x62E6, 0x7BEE, 0x9611, 0x5170, 0x6F9C, 0x8C30, 0x63FD, /* 0xB0 */
+ 0x89C8, 0x61D2, 0x7F06, 0x70C2, 0x6EE5, 0x7405, 0x6994, 0x72FC, /* 0xC0 */
+ 0x5ECA, 0x90CE, 0x6717, 0x6D6A, 0x635E, 0x52B3, 0x7262, 0x8001, /* 0xC0 */
+ 0x4F6C, 0x59E5, 0x916A, 0x70D9, 0x6D9D, 0x52D2, 0x4E50, 0x96F7, /* 0xD0 */
+ 0x956D, 0x857E, 0x78CA, 0x7D2F, 0x5121, 0x5792, 0x64C2, 0x808B, /* 0xD0 */
+ 0x7C7B, 0x6CEA, 0x68F1, 0x695E, 0x51B7, 0x5398, 0x68A8, 0x7281, /* 0xE0 */
+ 0x9ECE, 0x7BF1, 0x72F8, 0x79BB, 0x6F13, 0x7406, 0x674E, 0x91CC, /* 0xE0 */
+ 0x9CA4, 0x793C, 0x8389, 0x8354, 0x540F, 0x6817, 0x4E3D, 0x5389, /* 0xF0 */
+ 0x52B1, 0x783E, 0x5386, 0x5229, 0x5088, 0x4F8B, 0x4FD0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7F56, 0x7F59, 0x7F5B, 0x7F5C, 0x7F5D, 0x7F5E, 0x7F60, 0x7F63, /* 0x40 */
+ 0x7F64, 0x7F65, 0x7F66, 0x7F67, 0x7F6B, 0x7F6C, 0x7F6D, 0x7F6F, /* 0x40 */
+ 0x7F70, 0x7F73, 0x7F75, 0x7F76, 0x7F77, 0x7F78, 0x7F7A, 0x7F7B, /* 0x50 */
+ 0x7F7C, 0x7F7D, 0x7F7F, 0x7F80, 0x7F82, 0x7F83, 0x7F84, 0x7F85, /* 0x50 */
+ 0x7F86, 0x7F87, 0x7F88, 0x7F89, 0x7F8B, 0x7F8D, 0x7F8F, 0x7F90, /* 0x60 */
+ 0x7F91, 0x7F92, 0x7F93, 0x7F95, 0x7F96, 0x7F97, 0x7F98, 0x7F99, /* 0x60 */
+ 0x7F9B, 0x7F9C, 0x7FA0, 0x7FA2, 0x7FA3, 0x7FA5, 0x7FA6, 0x7FA8, /* 0x70 */
+ 0x7FA9, 0x7FAA, 0x7FAB, 0x7FAC, 0x7FAD, 0x7FAE, 0x7FB1, 0, /* 0x70 */
+ 0x7FB3, 0x7FB4, 0x7FB5, 0x7FB6, 0x7FB7, 0x7FBA, 0x7FBB, 0x7FBE, /* 0x80 */
+ 0x7FC0, 0x7FC2, 0x7FC3, 0x7FC4, 0x7FC6, 0x7FC7, 0x7FC8, 0x7FC9, /* 0x80 */
+ 0x7FCB, 0x7FCD, 0x7FCF, 0x7FD0, 0x7FD1, 0x7FD2, 0x7FD3, 0x7FD6, /* 0x90 */
+ 0x7FD7, 0x7FD9, 0x7FDA, 0x7FDB, 0x7FDC, 0x7FDD, 0x7FDE, 0x7FE2, /* 0x90 */
+ 0x7FE3, 0x75E2, 0x7ACB, 0x7C92, 0x6CA5, 0x96B6, 0x529B, 0x7483, /* 0xA0 */
+ 0x54E9, 0x4FE9, 0x8054, 0x83B2, 0x8FDE, 0x9570, 0x5EC9, 0x601C, /* 0xA0 */
+ 0x6D9F, 0x5E18, 0x655B, 0x8138, 0x94FE, 0x604B, 0x70BC, 0x7EC3, /* 0xB0 */
+ 0x7CAE, 0x51C9, 0x6881, 0x7CB1, 0x826F, 0x4E24, 0x8F86, 0x91CF, /* 0xB0 */
+ 0x667E, 0x4EAE, 0x8C05, 0x64A9, 0x804A, 0x50DA, 0x7597, 0x71CE, /* 0xC0 */
+ 0x5BE5, 0x8FBD, 0x6F66, 0x4E86, 0x6482, 0x9563, 0x5ED6, 0x6599, /* 0xC0 */
+ 0x5217, 0x88C2, 0x70C8, 0x52A3, 0x730E, 0x7433, 0x6797, 0x78F7, /* 0xD0 */
+ 0x9716, 0x4E34, 0x90BB, 0x9CDE, 0x6DCB, 0x51DB, 0x8D41, 0x541D, /* 0xD0 */
+ 0x62CE, 0x73B2, 0x83F1, 0x96F6, 0x9F84, 0x94C3, 0x4F36, 0x7F9A, /* 0xE0 */
+ 0x51CC, 0x7075, 0x9675, 0x5CAD, 0x9886, 0x53E6, 0x4EE4, 0x6E9C, /* 0xE0 */
+ 0x7409, 0x69B4, 0x786B, 0x998F, 0x7559, 0x5218, 0x7624, 0x6D41, /* 0xF0 */
+ 0x67F3, 0x516D, 0x9F99, 0x804B, 0x5499, 0x7B3C, 0x7ABF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7FE4, 0x7FE7, 0x7FE8, 0x7FEA, 0x7FEB, 0x7FEC, 0x7FED, 0x7FEF, /* 0x40 */
+ 0x7FF2, 0x7FF4, 0x7FF5, 0x7FF6, 0x7FF7, 0x7FF8, 0x7FF9, 0x7FFA, /* 0x40 */
+ 0x7FFD, 0x7FFE, 0x7FFF, 0x8002, 0x8007, 0x8008, 0x8009, 0x800A, /* 0x50 */
+ 0x800E, 0x800F, 0x8011, 0x8013, 0x801A, 0x801B, 0x801D, 0x801E, /* 0x50 */
+ 0x801F, 0x8021, 0x8023, 0x8024, 0x802B, 0x802C, 0x802D, 0x802E, /* 0x60 */
+ 0x802F, 0x8030, 0x8032, 0x8034, 0x8039, 0x803A, 0x803C, 0x803E, /* 0x60 */
+ 0x8040, 0x8041, 0x8044, 0x8045, 0x8047, 0x8048, 0x8049, 0x804E, /* 0x70 */
+ 0x804F, 0x8050, 0x8051, 0x8053, 0x8055, 0x8056, 0x8057, 0, /* 0x70 */
+ 0x8059, 0x805B, 0x805C, 0x805D, 0x805E, 0x805F, 0x8060, 0x8061, /* 0x80 */
+ 0x8062, 0x8063, 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806B, /* 0x80 */
+ 0x806C, 0x806D, 0x806E, 0x806F, 0x8070, 0x8072, 0x8073, 0x8074, /* 0x90 */
+ 0x8075, 0x8076, 0x8077, 0x8078, 0x8079, 0x807A, 0x807B, 0x807C, /* 0x90 */
+ 0x807D, 0x9686, 0x5784, 0x62E2, 0x9647, 0x697C, 0x5A04, 0x6402, /* 0xA0 */
+ 0x7BD3, 0x6F0F, 0x964B, 0x82A6, 0x5362, 0x9885, 0x5E90, 0x7089, /* 0xA0 */
+ 0x63B3, 0x5364, 0x864F, 0x9C81, 0x9E93, 0x788C, 0x9732, 0x8DEF, /* 0xB0 */
+ 0x8D42, 0x9E7F, 0x6F5E, 0x7984, 0x5F55, 0x9646, 0x622E, 0x9A74, /* 0xB0 */
+ 0x5415, 0x94DD, 0x4FA3, 0x65C5, 0x5C65, 0x5C61, 0x7F15, 0x8651, /* 0xC0 */
+ 0x6C2F, 0x5F8B, 0x7387, 0x6EE4, 0x7EFF, 0x5CE6, 0x631B, 0x5B6A, /* 0xC0 */
+ 0x6EE6, 0x5375, 0x4E71, 0x63A0, 0x7565, 0x62A1, 0x8F6E, 0x4F26, /* 0xD0 */
+ 0x4ED1, 0x6CA6, 0x7EB6, 0x8BBA, 0x841D, 0x87BA, 0x7F57, 0x903B, /* 0xD0 */
+ 0x9523, 0x7BA9, 0x9AA1, 0x88F8, 0x843D, 0x6D1B, 0x9A86, 0x7EDC, /* 0xE0 */
+ 0x5988, 0x9EBB, 0x739B, 0x7801, 0x8682, 0x9A6C, 0x9A82, 0x561B, /* 0xE0 */
+ 0x5417, 0x57CB, 0x4E70, 0x9EA6, 0x5356, 0x8FC8, 0x8109, 0x7792, /* 0xF0 */
+ 0x9992, 0x86EE, 0x6EE1, 0x8513, 0x66FC, 0x6162, 0x6F2B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x807E, 0x8081, 0x8082, 0x8085, 0x8088, 0x808A, 0x808D, 0x808E, /* 0x40 */
+ 0x808F, 0x8090, 0x8091, 0x8092, 0x8094, 0x8095, 0x8097, 0x8099, /* 0x40 */
+ 0x809E, 0x80A3, 0x80A6, 0x80A7, 0x80A8, 0x80AC, 0x80B0, 0x80B3, /* 0x50 */
+ 0x80B5, 0x80B6, 0x80B8, 0x80B9, 0x80BB, 0x80C5, 0x80C7, 0x80C8, /* 0x50 */
+ 0x80C9, 0x80CA, 0x80CB, 0x80CF, 0x80D0, 0x80D1, 0x80D2, 0x80D3, /* 0x60 */
+ 0x80D4, 0x80D5, 0x80D8, 0x80DF, 0x80E0, 0x80E2, 0x80E3, 0x80E6, /* 0x60 */
+ 0x80EE, 0x80F5, 0x80F7, 0x80F9, 0x80FB, 0x80FE, 0x80FF, 0x8100, /* 0x70 */
+ 0x8101, 0x8103, 0x8104, 0x8105, 0x8107, 0x8108, 0x810B, 0, /* 0x70 */
+ 0x810C, 0x8115, 0x8117, 0x8119, 0x811B, 0x811C, 0x811D, 0x811F, /* 0x80 */
+ 0x8120, 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127, /* 0x80 */
+ 0x8128, 0x8129, 0x812A, 0x812B, 0x812D, 0x812E, 0x8130, 0x8133, /* 0x90 */
+ 0x8134, 0x8135, 0x8137, 0x8139, 0x813A, 0x813B, 0x813C, 0x813D, /* 0x90 */
+ 0x813F, 0x8C29, 0x8292, 0x832B, 0x76F2, 0x6C13, 0x5FD9, 0x83BD, /* 0xA0 */
+ 0x732B, 0x8305, 0x951A, 0x6BDB, 0x77DB, 0x94C6, 0x536F, 0x8302, /* 0xA0 */
+ 0x5192, 0x5E3D, 0x8C8C, 0x8D38, 0x4E48, 0x73AB, 0x679A, 0x6885, /* 0xB0 */
+ 0x9176, 0x9709, 0x7164, 0x6CA1, 0x7709, 0x5A92, 0x9541, 0x6BCF, /* 0xB0 */
+ 0x7F8E, 0x6627, 0x5BD0, 0x59B9, 0x5A9A, 0x95E8, 0x95F7, 0x4EEC, /* 0xC0 */
+ 0x840C, 0x8499, 0x6AAC, 0x76DF, 0x9530, 0x731B, 0x68A6, 0x5B5F, /* 0xC0 */
+ 0x772F, 0x919A, 0x9761, 0x7CDC, 0x8FF7, 0x8C1C, 0x5F25, 0x7C73, /* 0xD0 */
+ 0x79D8, 0x89C5, 0x6CCC, 0x871C, 0x5BC6, 0x5E42, 0x68C9, 0x7720, /* 0xD0 */
+ 0x7EF5, 0x5195, 0x514D, 0x52C9, 0x5A29, 0x7F05, 0x9762, 0x82D7, /* 0xE0 */
+ 0x63CF, 0x7784, 0x85D0, 0x79D2, 0x6E3A, 0x5E99, 0x5999, 0x8511, /* 0xE0 */
+ 0x706D, 0x6C11, 0x62BF, 0x76BF, 0x654F, 0x60AF, 0x95FD, 0x660E, /* 0xF0 */
+ 0x879F, 0x9E23, 0x94ED, 0x540D, 0x547D, 0x8C2C, 0x6478 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147, 0x8149, /* 0x40 */
+ 0x814D, 0x814E, 0x814F, 0x8152, 0x8156, 0x8157, 0x8158, 0x815B, /* 0x40 */
+ 0x815C, 0x815D, 0x815E, 0x815F, 0x8161, 0x8162, 0x8163, 0x8164, /* 0x50 */
+ 0x8166, 0x8168, 0x816A, 0x816B, 0x816C, 0x816F, 0x8172, 0x8173, /* 0x50 */
+ 0x8175, 0x8176, 0x8177, 0x8178, 0x8181, 0x8183, 0x8184, 0x8185, /* 0x60 */
+ 0x8186, 0x8187, 0x8189, 0x818B, 0x818C, 0x818D, 0x818E, 0x8190, /* 0x60 */
+ 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8199, 0x819A, /* 0x70 */
+ 0x819E, 0x819F, 0x81A0, 0x81A1, 0x81A2, 0x81A4, 0x81A5, 0, /* 0x70 */
+ 0x81A7, 0x81A9, 0x81AB, 0x81AC, 0x81AD, 0x81AE, 0x81AF, 0x81B0, /* 0x80 */
+ 0x81B1, 0x81B2, 0x81B4, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, /* 0x80 */
+ 0x81BC, 0x81BD, 0x81BE, 0x81BF, 0x81C4, 0x81C5, 0x81C7, 0x81C8, /* 0x90 */
+ 0x81C9, 0x81CB, 0x81CD, 0x81CE, 0x81CF, 0x81D0, 0x81D1, 0x81D2, /* 0x90 */
+ 0x81D3, 0x6479, 0x8611, 0x6A21, 0x819C, 0x78E8, 0x6469, 0x9B54, /* 0xA0 */
+ 0x62B9, 0x672B, 0x83AB, 0x58A8, 0x9ED8, 0x6CAB, 0x6F20, 0x5BDE, /* 0xA0 */
+ 0x964C, 0x8C0B, 0x725F, 0x67D0, 0x62C7, 0x7261, 0x4EA9, 0x59C6, /* 0xB0 */
+ 0x6BCD, 0x5893, 0x66AE, 0x5E55, 0x52DF, 0x6155, 0x6728, 0x76EE, /* 0xB0 */
+ 0x7766, 0x7267, 0x7A46, 0x62FF, 0x54EA, 0x5450, 0x94A0, 0x90A3, /* 0xC0 */
+ 0x5A1C, 0x7EB3, 0x6C16, 0x4E43, 0x5976, 0x8010, 0x5948, 0x5357, /* 0xC0 */
+ 0x7537, 0x96BE, 0x56CA, 0x6320, 0x8111, 0x607C, 0x95F9, 0x6DD6, /* 0xD0 */
+ 0x5462, 0x9981, 0x5185, 0x5AE9, 0x80FD, 0x59AE, 0x9713, 0x502A, /* 0xD0 */
+ 0x6CE5, 0x5C3C, 0x62DF, 0x4F60, 0x533F, 0x817B, 0x9006, 0x6EBA, /* 0xE0 */
+ 0x852B, 0x62C8, 0x5E74, 0x78BE, 0x64B5, 0x637B, 0x5FF5, 0x5A18, /* 0xE0 */
+ 0x917F, 0x9E1F, 0x5C3F, 0x634F, 0x8042, 0x5B7D, 0x556E, 0x954A, /* 0xF0 */
+ 0x954D, 0x6D85, 0x60A8, 0x67E0, 0x72DE, 0x51DD, 0x5B81 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x81D4, 0x81D5, 0x81D6, 0x81D7, 0x81D8, 0x81D9, 0x81DA, 0x81DB, /* 0x40 */
+ 0x81DC, 0x81DD, 0x81DE, 0x81DF, 0x81E0, 0x81E1, 0x81E2, 0x81E4, /* 0x40 */
+ 0x81E5, 0x81E6, 0x81E8, 0x81E9, 0x81EB, 0x81EE, 0x81EF, 0x81F0, /* 0x50 */
+ 0x81F1, 0x81F2, 0x81F5, 0x81F6, 0x81F7, 0x81F8, 0x81F9, 0x81FA, /* 0x50 */
+ 0x81FD, 0x81FF, 0x8203, 0x8207, 0x8208, 0x8209, 0x820A, 0x820B, /* 0x60 */
+ 0x820E, 0x820F, 0x8211, 0x8213, 0x8215, 0x8216, 0x8217, 0x8218, /* 0x60 */
+ 0x8219, 0x821A, 0x821D, 0x8220, 0x8224, 0x8225, 0x8226, 0x8227, /* 0x70 */
+ 0x8229, 0x822E, 0x8232, 0x823A, 0x823C, 0x823D, 0x823F, 0, /* 0x70 */
+ 0x8240, 0x8241, 0x8242, 0x8243, 0x8245, 0x8246, 0x8248, 0x824A, /* 0x80 */
+ 0x824C, 0x824D, 0x824E, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, /* 0x80 */
+ 0x8255, 0x8256, 0x8257, 0x8259, 0x825B, 0x825C, 0x825D, 0x825E, /* 0x90 */
+ 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, /* 0x90 */
+ 0x8269, 0x62E7, 0x6CDE, 0x725B, 0x626D, 0x94AE, 0x7EBD, 0x8113, /* 0xA0 */
+ 0x6D53, 0x519C, 0x5F04, 0x5974, 0x52AA, 0x6012, 0x5973, 0x6696, /* 0xA0 */
+ 0x8650, 0x759F, 0x632A, 0x61E6, 0x7CEF, 0x8BFA, 0x54E6, 0x6B27, /* 0xB0 */
+ 0x9E25, 0x6BB4, 0x85D5, 0x5455, 0x5076, 0x6CA4, 0x556A, 0x8DB4, /* 0xB0 */
+ 0x722C, 0x5E15, 0x6015, 0x7436, 0x62CD, 0x6392, 0x724C, 0x5F98, /* 0xC0 */
+ 0x6E43, 0x6D3E, 0x6500, 0x6F58, 0x76D8, 0x78D0, 0x76FC, 0x7554, /* 0xC0 */
+ 0x5224, 0x53DB, 0x4E53, 0x5E9E, 0x65C1, 0x802A, 0x80D6, 0x629B, /* 0xD0 */
+ 0x5486, 0x5228, 0x70AE, 0x888D, 0x8DD1, 0x6CE1, 0x5478, 0x80DA, /* 0xD0 */
+ 0x57F9, 0x88F4, 0x8D54, 0x966A, 0x914D, 0x4F69, 0x6C9B, 0x55B7, /* 0xE0 */
+ 0x76C6, 0x7830, 0x62A8, 0x70F9, 0x6F8E, 0x5F6D, 0x84EC, 0x68DA, /* 0xE0 */
+ 0x787C, 0x7BF7, 0x81A8, 0x670B, 0x9E4F, 0x6367, 0x78B0, 0x576F, /* 0xF0 */
+ 0x7812, 0x9739, 0x6279, 0x62AB, 0x5288, 0x7435, 0x6BD7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x826A, 0x826B, 0x826C, 0x826D, 0x8271, 0x8275, 0x8276, 0x8277, /* 0x40 */
+ 0x8278, 0x827B, 0x827C, 0x8280, 0x8281, 0x8283, 0x8285, 0x8286, /* 0x40 */
+ 0x8287, 0x8289, 0x828C, 0x8290, 0x8293, 0x8294, 0x8295, 0x8296, /* 0x50 */
+ 0x829A, 0x829B, 0x829E, 0x82A0, 0x82A2, 0x82A3, 0x82A7, 0x82B2, /* 0x50 */
+ 0x82B5, 0x82B6, 0x82BA, 0x82BB, 0x82BC, 0x82BF, 0x82C0, 0x82C2, /* 0x60 */
+ 0x82C3, 0x82C5, 0x82C6, 0x82C9, 0x82D0, 0x82D6, 0x82D9, 0x82DA, /* 0x60 */
+ 0x82DD, 0x82E2, 0x82E7, 0x82E8, 0x82E9, 0x82EA, 0x82EC, 0x82ED, /* 0x70 */
+ 0x82EE, 0x82F0, 0x82F2, 0x82F3, 0x82F5, 0x82F6, 0x82F8, 0, /* 0x70 */
+ 0x82FA, 0x82FC, 0x82FD, 0x82FE, 0x82FF, 0x8300, 0x830A, 0x830B, /* 0x80 */
+ 0x830D, 0x8310, 0x8312, 0x8313, 0x8316, 0x8318, 0x8319, 0x831D, /* 0x80 */
+ 0x831E, 0x831F, 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, /* 0x90 */
+ 0x8326, 0x8329, 0x832A, 0x832E, 0x8330, 0x8332, 0x8337, 0x833B, /* 0x90 */
+ 0x833D, 0x5564, 0x813E, 0x75B2, 0x76AE, 0x5339, 0x75DE, 0x50FB, /* 0xA0 */
+ 0x5C41, 0x8B6C, 0x7BC7, 0x504F, 0x7247, 0x9A97, 0x98D8, 0x6F02, /* 0xA0 */
+ 0x74E2, 0x7968, 0x6487, 0x77A5, 0x62FC, 0x9891, 0x8D2B, 0x54C1, /* 0xB0 */
+ 0x8058, 0x4E52, 0x576A, 0x82F9, 0x840D, 0x5E73, 0x51ED, 0x74F6, /* 0xB0 */
+ 0x8BC4, 0x5C4F, 0x5761, 0x6CFC, 0x9887, 0x5A46, 0x7834, 0x9B44, /* 0xC0 */
+ 0x8FEB, 0x7C95, 0x5256, 0x6251, 0x94FA, 0x4EC6, 0x8386, 0x8461, /* 0xC0 */
+ 0x83E9, 0x84B2, 0x57D4, 0x6734, 0x5703, 0x666E, 0x6D66, 0x8C31, /* 0xD0 */
+ 0x66DD, 0x7011, 0x671F, 0x6B3A, 0x6816, 0x621A, 0x59BB, 0x4E03, /* 0xD0 */
+ 0x51C4, 0x6F06, 0x67D2, 0x6C8F, 0x5176, 0x68CB, 0x5947, 0x6B67, /* 0xE0 */
+ 0x7566, 0x5D0E, 0x8110, 0x9F50, 0x65D7, 0x7948, 0x7941, 0x9A91, /* 0xE0 */
+ 0x8D77, 0x5C82, 0x4E5E, 0x4F01, 0x542F, 0x5951, 0x780C, 0x5668, /* 0xF0 */
+ 0x6C14, 0x8FC4, 0x5F03, 0x6C7D, 0x6CE3, 0x8BAB, 0x6390 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x833E, 0x833F, 0x8341, 0x8342, 0x8344, 0x8345, 0x8348, 0x834A, /* 0x40 */
+ 0x834B, 0x834C, 0x834D, 0x834E, 0x8353, 0x8355, 0x8356, 0x8357, /* 0x40 */
+ 0x8358, 0x8359, 0x835D, 0x8362, 0x8370, 0x8371, 0x8372, 0x8373, /* 0x50 */
+ 0x8374, 0x8375, 0x8376, 0x8379, 0x837A, 0x837E, 0x837F, 0x8380, /* 0x50 */
+ 0x8381, 0x8382, 0x8383, 0x8384, 0x8387, 0x8388, 0x838A, 0x838B, /* 0x60 */
+ 0x838C, 0x838D, 0x838F, 0x8390, 0x8391, 0x8394, 0x8395, 0x8396, /* 0x60 */
+ 0x8397, 0x8399, 0x839A, 0x839D, 0x839F, 0x83A1, 0x83A2, 0x83A3, /* 0x70 */
+ 0x83A4, 0x83A5, 0x83A6, 0x83A7, 0x83AC, 0x83AD, 0x83AE, 0, /* 0x70 */
+ 0x83AF, 0x83B5, 0x83BB, 0x83BE, 0x83BF, 0x83C2, 0x83C3, 0x83C4, /* 0x80 */
+ 0x83C6, 0x83C8, 0x83C9, 0x83CB, 0x83CD, 0x83CE, 0x83D0, 0x83D1, /* 0x80 */
+ 0x83D2, 0x83D3, 0x83D5, 0x83D7, 0x83D9, 0x83DA, 0x83DB, 0x83DE, /* 0x90 */
+ 0x83E2, 0x83E3, 0x83E4, 0x83E6, 0x83E7, 0x83E8, 0x83EB, 0x83EC, /* 0x90 */
+ 0x83ED, 0x6070, 0x6D3D, 0x7275, 0x6266, 0x948E, 0x94C5, 0x5343, /* 0xA0 */
+ 0x8FC1, 0x7B7E, 0x4EDF, 0x8C26, 0x4E7E, 0x9ED4, 0x94B1, 0x94B3, /* 0xA0 */
+ 0x524D, 0x6F5C, 0x9063, 0x6D45, 0x8C34, 0x5811, 0x5D4C, 0x6B20, /* 0xB0 */
+ 0x6B49, 0x67AA, 0x545B, 0x8154, 0x7F8C, 0x5899, 0x8537, 0x5F3A, /* 0xB0 */
+ 0x62A2, 0x6A47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77A7, 0x4E54, /* 0xC0 */
+ 0x4FA8, 0x5DE7, 0x9798, 0x64AC, 0x7FD8, 0x5CED, 0x4FCF, 0x7A8D, /* 0xC0 */
+ 0x5207, 0x8304, 0x4E14, 0x602F, 0x7A83, 0x94A6, 0x4FB5, 0x4EB2, /* 0xD0 */
+ 0x79E6, 0x7434, 0x52E4, 0x82B9, 0x64D2, 0x79BD, 0x5BDD, 0x6C81, /* 0xD0 */
+ 0x9752, 0x8F7B, 0x6C22, 0x503E, 0x537F, 0x6E05, 0x64CE, 0x6674, /* 0xE0 */
+ 0x6C30, 0x60C5, 0x9877, 0x8BF7, 0x5E86, 0x743C, 0x7A77, 0x79CB, /* 0xE0 */
+ 0x4E18, 0x90B1, 0x7403, 0x6C42, 0x56DA, 0x914B, 0x6CC5, 0x8D8B, /* 0xF0 */
+ 0x533A, 0x86C6, 0x66F2, 0x8EAF, 0x5C48, 0x9A71, 0x6E20 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x83EE, 0x83EF, 0x83F3, 0x83F4, 0x83F5, 0x83F6, 0x83F7, 0x83FA, /* 0x40 */
+ 0x83FB, 0x83FC, 0x83FE, 0x83FF, 0x8400, 0x8402, 0x8405, 0x8407, /* 0x40 */
+ 0x8408, 0x8409, 0x840A, 0x8410, 0x8412, 0x8413, 0x8414, 0x8415, /* 0x50 */
+ 0x8416, 0x8417, 0x8419, 0x841A, 0x841B, 0x841E, 0x841F, 0x8420, /* 0x50 */
+ 0x8421, 0x8422, 0x8423, 0x8429, 0x842A, 0x842B, 0x842C, 0x842D, /* 0x60 */
+ 0x842E, 0x842F, 0x8430, 0x8432, 0x8433, 0x8434, 0x8435, 0x8436, /* 0x60 */
+ 0x8437, 0x8439, 0x843A, 0x843B, 0x843E, 0x843F, 0x8440, 0x8441, /* 0x70 */
+ 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0, /* 0x70 */
+ 0x844A, 0x844B, 0x844C, 0x844D, 0x844E, 0x844F, 0x8450, 0x8452, /* 0x80 */
+ 0x8453, 0x8454, 0x8455, 0x8456, 0x8458, 0x845D, 0x845E, 0x845F, /* 0x80 */
+ 0x8460, 0x8462, 0x8464, 0x8465, 0x8466, 0x8467, 0x8468, 0x846A, /* 0x90 */
+ 0x846E, 0x846F, 0x8470, 0x8472, 0x8474, 0x8477, 0x8479, 0x847B, /* 0x90 */
+ 0x847C, 0x53D6, 0x5A36, 0x9F8B, 0x8DA3, 0x53BB, 0x5708, 0x98A7, /* 0xA0 */
+ 0x6743, 0x919B, 0x6CC9, 0x5168, 0x75CA, 0x62F3, 0x72AC, 0x5238, /* 0xA0 */
+ 0x529D, 0x7F3A, 0x7094, 0x7638, 0x5374, 0x9E4A, 0x69B7, 0x786E, /* 0xB0 */
+ 0x96C0, 0x88D9, 0x7FA4, 0x7136, 0x71C3, 0x5189, 0x67D3, 0x74E4, /* 0xB0 */
+ 0x58E4, 0x6518, 0x56B7, 0x8BA9, 0x9976, 0x6270, 0x7ED5, 0x60F9, /* 0xC0 */
+ 0x70ED, 0x58EC, 0x4EC1, 0x4EBA, 0x5FCD, 0x97E7, 0x4EFB, 0x8BA4, /* 0xC0 */
+ 0x5203, 0x598A, 0x7EAB, 0x6254, 0x4ECD, 0x65E5, 0x620E, 0x8338, /* 0xD0 */
+ 0x84C9, 0x8363, 0x878D, 0x7194, 0x6EB6, 0x5BB9, 0x7ED2, 0x5197, /* 0xD0 */
+ 0x63C9, 0x67D4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5B7A, 0x5982, /* 0xE0 */
+ 0x8FB1, 0x4E73, 0x6C5D, 0x5165, 0x8925, 0x8F6F, 0x962E, 0x854A, /* 0xE0 */
+ 0x745E, 0x9510, 0x95F0, 0x6DA6, 0x82E5, 0x5F31, 0x6492, 0x6D12, /* 0xF0 */
+ 0x8428, 0x816E, 0x9CC3, 0x585E, 0x8D5B, 0x4E09, 0x53C1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_C9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x847D, 0x847E, 0x847F, 0x8480, 0x8481, 0x8483, 0x8484, 0x8485, /* 0x40 */
+ 0x8486, 0x848A, 0x848D, 0x848F, 0x8490, 0x8491, 0x8492, 0x8493, /* 0x40 */
+ 0x8494, 0x8495, 0x8496, 0x8498, 0x849A, 0x849B, 0x849D, 0x849E, /* 0x50 */
+ 0x849F, 0x84A0, 0x84A2, 0x84A3, 0x84A4, 0x84A5, 0x84A6, 0x84A7, /* 0x50 */
+ 0x84A8, 0x84A9, 0x84AA, 0x84AB, 0x84AC, 0x84AD, 0x84AE, 0x84B0, /* 0x60 */
+ 0x84B1, 0x84B3, 0x84B5, 0x84B6, 0x84B7, 0x84BB, 0x84BC, 0x84BE, /* 0x60 */
+ 0x84C0, 0x84C2, 0x84C3, 0x84C5, 0x84C6, 0x84C7, 0x84C8, 0x84CB, /* 0x70 */
+ 0x84CC, 0x84CE, 0x84CF, 0x84D2, 0x84D4, 0x84D5, 0x84D7, 0, /* 0x70 */
+ 0x84D8, 0x84D9, 0x84DA, 0x84DB, 0x84DC, 0x84DE, 0x84E1, 0x84E2, /* 0x80 */
+ 0x84E4, 0x84E7, 0x84E8, 0x84E9, 0x84EA, 0x84EB, 0x84ED, 0x84EE, /* 0x80 */
+ 0x84EF, 0x84F1, 0x84F2, 0x84F3, 0x84F4, 0x84F5, 0x84F6, 0x84F7, /* 0x90 */
+ 0x84F8, 0x84F9, 0x84FA, 0x84FB, 0x84FD, 0x84FE, 0x8500, 0x8501, /* 0x90 */
+ 0x8502, 0x4F1E, 0x6563, 0x6851, 0x55D3, 0x4E27, 0x6414, 0x9A9A, /* 0xA0 */
+ 0x626B, 0x5AC2, 0x745F, 0x8272, 0x6DA9, 0x68EE, 0x50E7, 0x838E, /* 0xA0 */
+ 0x7802, 0x6740, 0x5239, 0x6C99, 0x7EB1, 0x50BB, 0x5565, 0x715E, /* 0xB0 */
+ 0x7B5B, 0x6652, 0x73CA, 0x82EB, 0x6749, 0x5C71, 0x5220, 0x717D, /* 0xB0 */
+ 0x886B, 0x95EA, 0x9655, 0x64C5, 0x8D61, 0x81B3, 0x5584, 0x6C55, /* 0xC0 */
+ 0x6247, 0x7F2E, 0x5892, 0x4F24, 0x5546, 0x8D4F, 0x664C, 0x4E0A, /* 0xC0 */
+ 0x5C1A, 0x88F3, 0x68A2, 0x634E, 0x7A0D, 0x70E7, 0x828D, 0x52FA, /* 0xD0 */
+ 0x97F6, 0x5C11, 0x54E8, 0x90B5, 0x7ECD, 0x5962, 0x8D4A, 0x86C7, /* 0xD0 */
+ 0x820C, 0x820D, 0x8D66, 0x6444, 0x5C04, 0x6151, 0x6D89, 0x793E, /* 0xE0 */
+ 0x8BBE, 0x7837, 0x7533, 0x547B, 0x4F38, 0x8EAB, 0x6DF1, 0x5A20, /* 0xE0 */
+ 0x7EC5, 0x795E, 0x6C88, 0x5BA1, 0x5A76, 0x751A, 0x80BE, 0x614E, /* 0xF0 */
+ 0x6E17, 0x58F0, 0x751F, 0x7525, 0x7272, 0x5347, 0x7EF3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_CA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8503, 0x8504, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509, 0x850A, /* 0x40 */
+ 0x850B, 0x850D, 0x850E, 0x850F, 0x8510, 0x8512, 0x8514, 0x8515, /* 0x40 */
+ 0x8516, 0x8518, 0x8519, 0x851B, 0x851C, 0x851D, 0x851E, 0x8520, /* 0x50 */
+ 0x8522, 0x8523, 0x8524, 0x8525, 0x8526, 0x8527, 0x8528, 0x8529, /* 0x50 */
+ 0x852A, 0x852D, 0x852E, 0x852F, 0x8530, 0x8531, 0x8532, 0x8533, /* 0x60 */
+ 0x8534, 0x8535, 0x8536, 0x853E, 0x853F, 0x8540, 0x8541, 0x8542, /* 0x60 */
+ 0x8544, 0x8545, 0x8546, 0x8547, 0x854B, 0x854C, 0x854D, 0x854E, /* 0x70 */
+ 0x854F, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0, /* 0x70 */
+ 0x8557, 0x8558, 0x855A, 0x855B, 0x855C, 0x855D, 0x855F, 0x8560, /* 0x80 */
+ 0x8561, 0x8562, 0x8563, 0x8565, 0x8566, 0x8567, 0x8569, 0x856A, /* 0x80 */
+ 0x856B, 0x856C, 0x856D, 0x856E, 0x856F, 0x8570, 0x8571, 0x8573, /* 0x90 */
+ 0x8575, 0x8576, 0x8577, 0x8578, 0x857C, 0x857D, 0x857F, 0x8580, /* 0x90 */
+ 0x8581, 0x7701, 0x76DB, 0x5269, 0x80DC, 0x5723, 0x5E08, 0x5931, /* 0xA0 */
+ 0x72EE, 0x65BD, 0x6E7F, 0x8BD7, 0x5C38, 0x8671, 0x5341, 0x77F3, /* 0xA0 */
+ 0x62FE, 0x65F6, 0x4EC0, 0x98DF, 0x8680, 0x5B9E, 0x8BC6, 0x53F2, /* 0xB0 */
+ 0x77E2, 0x4F7F, 0x5C4E, 0x9A76, 0x59CB, 0x5F0F, 0x793A, 0x58EB, /* 0xB0 */
+ 0x4E16, 0x67FF, 0x4E8B, 0x62ED, 0x8A93, 0x901D, 0x52BF, 0x662F, /* 0xC0 */
+ 0x55DC, 0x566C, 0x9002, 0x4ED5, 0x4F8D, 0x91CA, 0x9970, 0x6C0F, /* 0xC0 */
+ 0x5E02, 0x6043, 0x5BA4, 0x89C6, 0x8BD5, 0x6536, 0x624B, 0x9996, /* 0xD0 */
+ 0x5B88, 0x5BFF, 0x6388, 0x552E, 0x53D7, 0x7626, 0x517D, 0x852C, /* 0xD0 */
+ 0x67A2, 0x68B3, 0x6B8A, 0x6292, 0x8F93, 0x53D4, 0x8212, 0x6DD1, /* 0xE0 */
+ 0x758F, 0x4E66, 0x8D4E, 0x5B70, 0x719F, 0x85AF, 0x6691, 0x66D9, /* 0xE0 */
+ 0x7F72, 0x8700, 0x9ECD, 0x9F20, 0x5C5E, 0x672F, 0x8FF0, 0x6811, /* 0xF0 */
+ 0x675F, 0x620D, 0x7AD6, 0x5885, 0x5EB6, 0x6570, 0x6F31 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_CB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8582, 0x8583, 0x8586, 0x8588, 0x8589, 0x858A, 0x858B, 0x858C, /* 0x40 */
+ 0x858D, 0x858E, 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595, /* 0x40 */
+ 0x8596, 0x8597, 0x8598, 0x8599, 0x859A, 0x859D, 0x859E, 0x859F, /* 0x50 */
+ 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A5, 0x85A6, 0x85A7, 0x85A9, /* 0x50 */
+ 0x85AB, 0x85AC, 0x85AD, 0x85B1, 0x85B2, 0x85B3, 0x85B4, 0x85B5, /* 0x60 */
+ 0x85B6, 0x85B8, 0x85BA, 0x85BB, 0x85BC, 0x85BD, 0x85BE, 0x85BF, /* 0x60 */
+ 0x85C0, 0x85C2, 0x85C3, 0x85C4, 0x85C5, 0x85C6, 0x85C7, 0x85C8, /* 0x70 */
+ 0x85CA, 0x85CB, 0x85CC, 0x85CD, 0x85CE, 0x85D1, 0x85D2, 0, /* 0x70 */
+ 0x85D4, 0x85D6, 0x85D7, 0x85D8, 0x85D9, 0x85DA, 0x85DB, 0x85DD, /* 0x80 */
+ 0x85DE, 0x85DF, 0x85E0, 0x85E1, 0x85E2, 0x85E3, 0x85E5, 0x85E6, /* 0x80 */
+ 0x85E7, 0x85E8, 0x85EA, 0x85EB, 0x85EC, 0x85ED, 0x85EE, 0x85EF, /* 0x90 */
+ 0x85F0, 0x85F1, 0x85F2, 0x85F3, 0x85F4, 0x85F5, 0x85F6, 0x85F7, /* 0x90 */
+ 0x85F8, 0x6055, 0x5237, 0x800D, 0x6454, 0x8870, 0x7529, 0x5E05, /* 0xA0 */
+ 0x6813, 0x62F4, 0x971C, 0x53CC, 0x723D, 0x8C01, 0x6C34, 0x7761, /* 0xA0 */
+ 0x7A0E, 0x542E, 0x77AC, 0x987A, 0x821C, 0x8BF4, 0x7855, 0x6714, /* 0xB0 */
+ 0x70C1, 0x65AF, 0x6495, 0x5636, 0x601D, 0x79C1, 0x53F8, 0x4E1D, /* 0xB0 */
+ 0x6B7B, 0x8086, 0x5BFA, 0x55E3, 0x56DB, 0x4F3A, 0x4F3C, 0x9972, /* 0xC0 */
+ 0x5DF3, 0x677E, 0x8038, 0x6002, 0x9882, 0x9001, 0x5B8B, 0x8BBC, /* 0xC0 */
+ 0x8BF5, 0x641C, 0x8258, 0x64DE, 0x55FD, 0x82CF, 0x9165, 0x4FD7, /* 0xD0 */
+ 0x7D20, 0x901F, 0x7C9F, 0x50F3, 0x5851, 0x6EAF, 0x5BBF, 0x8BC9, /* 0xD0 */
+ 0x8083, 0x9178, 0x849C, 0x7B97, 0x867D, 0x968B, 0x968F, 0x7EE5, /* 0xE0 */
+ 0x9AD3, 0x788E, 0x5C81, 0x7A57, 0x9042, 0x96A7, 0x795F, 0x5B59, /* 0xE0 */
+ 0x635F, 0x7B0B, 0x84D1, 0x68AD, 0x5506, 0x7F29, 0x7410, 0x7D22, /* 0xF0 */
+ 0x9501, 0x6240, 0x584C, 0x4ED6, 0x5B83, 0x5979, 0x5854 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_CC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x85F9, 0x85FA, 0x85FC, 0x85FD, 0x85FE, 0x8600, 0x8601, 0x8602, /* 0x40 */
+ 0x8603, 0x8604, 0x8606, 0x8607, 0x8608, 0x8609, 0x860A, 0x860B, /* 0x40 */
+ 0x860C, 0x860D, 0x860E, 0x860F, 0x8610, 0x8612, 0x8613, 0x8614, /* 0x50 */
+ 0x8615, 0x8617, 0x8618, 0x8619, 0x861A, 0x861B, 0x861C, 0x861D, /* 0x50 */
+ 0x861E, 0x861F, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625, /* 0x60 */
+ 0x8626, 0x8628, 0x862A, 0x862B, 0x862C, 0x862D, 0x862E, 0x862F, /* 0x60 */
+ 0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637, /* 0x70 */
+ 0x8639, 0x863A, 0x863B, 0x863D, 0x863E, 0x863F, 0x8640, 0, /* 0x70 */
+ 0x8641, 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, /* 0x80 */
+ 0x8649, 0x864A, 0x864B, 0x864C, 0x8652, 0x8653, 0x8655, 0x8656, /* 0x80 */
+ 0x8657, 0x8658, 0x8659, 0x865B, 0x865C, 0x865D, 0x865F, 0x8660, /* 0x90 */
+ 0x8661, 0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, /* 0x90 */
+ 0x866A, 0x736D, 0x631E, 0x8E4B, 0x8E0F, 0x80CE, 0x82D4, 0x62AC, /* 0xA0 */
+ 0x53F0, 0x6CF0, 0x915E, 0x592A, 0x6001, 0x6C70, 0x574D, 0x644A, /* 0xA0 */
+ 0x8D2A, 0x762B, 0x6EE9, 0x575B, 0x6A80, 0x75F0, 0x6F6D, 0x8C2D, /* 0xB0 */
+ 0x8C08, 0x5766, 0x6BEF, 0x8892, 0x78B3, 0x63A2, 0x53F9, 0x70AD, /* 0xB0 */
+ 0x6C64, 0x5858, 0x642A, 0x5802, 0x68E0, 0x819B, 0x5510, 0x7CD6, /* 0xC0 */
+ 0x5018, 0x8EBA, 0x6DCC, 0x8D9F, 0x70EB, 0x638F, 0x6D9B, 0x6ED4, /* 0xC0 */
+ 0x7EE6, 0x8404, 0x6843, 0x9003, 0x6DD8, 0x9676, 0x8BA8, 0x5957, /* 0xD0 */
+ 0x7279, 0x85E4, 0x817E, 0x75BC, 0x8A8A, 0x68AF, 0x5254, 0x8E22, /* 0xD0 */
+ 0x9511, 0x63D0, 0x9898, 0x8E44, 0x557C, 0x4F53, 0x66FF, 0x568F, /* 0xE0 */
+ 0x60D5, 0x6D95, 0x5243, 0x5C49, 0x5929, 0x6DFB, 0x586B, 0x7530, /* 0xE0 */
+ 0x751C, 0x606C, 0x8214, 0x8146, 0x6311, 0x6761, 0x8FE2, 0x773A, /* 0xF0 */
+ 0x8DF3, 0x8D34, 0x94C1, 0x5E16, 0x5385, 0x542C, 0x70C3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_CD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x866D, 0x866F, 0x8670, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, /* 0x40 */
+ 0x8677, 0x8678, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688, /* 0x40 */
+ 0x8689, 0x868E, 0x868F, 0x8690, 0x8691, 0x8692, 0x8694, 0x8696, /* 0x50 */
+ 0x8697, 0x8698, 0x8699, 0x869A, 0x869B, 0x869E, 0x869F, 0x86A0, /* 0x50 */
+ 0x86A1, 0x86A2, 0x86A5, 0x86A6, 0x86AB, 0x86AD, 0x86AE, 0x86B2, /* 0x60 */
+ 0x86B3, 0x86B7, 0x86B8, 0x86B9, 0x86BB, 0x86BC, 0x86BD, 0x86BE, /* 0x60 */
+ 0x86BF, 0x86C1, 0x86C2, 0x86C3, 0x86C5, 0x86C8, 0x86CC, 0x86CD, /* 0x70 */
+ 0x86D2, 0x86D3, 0x86D5, 0x86D6, 0x86D7, 0x86DA, 0x86DC, 0, /* 0x70 */
+ 0x86DD, 0x86E0, 0x86E1, 0x86E2, 0x86E3, 0x86E5, 0x86E6, 0x86E7, /* 0x80 */
+ 0x86E8, 0x86EA, 0x86EB, 0x86EC, 0x86EF, 0x86F5, 0x86F6, 0x86F7, /* 0x80 */
+ 0x86FA, 0x86FB, 0x86FC, 0x86FD, 0x86FF, 0x8701, 0x8704, 0x8705, /* 0x90 */
+ 0x8706, 0x870B, 0x870C, 0x870E, 0x870F, 0x8710, 0x8711, 0x8714, /* 0x90 */
+ 0x8716, 0x6C40, 0x5EF7, 0x505C, 0x4EAD, 0x5EAD, 0x633A, 0x8247, /* 0xA0 */
+ 0x901A, 0x6850, 0x916E, 0x77B3, 0x540C, 0x94DC, 0x5F64, 0x7AE5, /* 0xA0 */
+ 0x6876, 0x6345, 0x7B52, 0x7EDF, 0x75DB, 0x5077, 0x6295, 0x5934, /* 0xB0 */
+ 0x900F, 0x51F8, 0x79C3, 0x7A81, 0x56FE, 0x5F92, 0x9014, 0x6D82, /* 0xB0 */
+ 0x5C60, 0x571F, 0x5410, 0x5154, 0x6E4D, 0x56E2, 0x63A8, 0x9893, /* 0xC0 */
+ 0x817F, 0x8715, 0x892A, 0x9000, 0x541E, 0x5C6F, 0x81C0, 0x62D6, /* 0xC0 */
+ 0x6258, 0x8131, 0x9E35, 0x9640, 0x9A6E, 0x9A7C, 0x692D, 0x59A5, /* 0xD0 */
+ 0x62D3, 0x553E, 0x6316, 0x54C7, 0x86D9, 0x6D3C, 0x5A03, 0x74E6, /* 0xD0 */
+ 0x889C, 0x6B6A, 0x5916, 0x8C4C, 0x5F2F, 0x6E7E, 0x73A9, 0x987D, /* 0xE0 */
+ 0x4E38, 0x70F7, 0x5B8C, 0x7897, 0x633D, 0x665A, 0x7696, 0x60CB, /* 0xE0 */
+ 0x5B9B, 0x5A49, 0x4E07, 0x8155, 0x6C6A, 0x738B, 0x4EA1, 0x6789, /* 0xF0 */
+ 0x7F51, 0x5F80, 0x65FA, 0x671B, 0x5FD8, 0x5984, 0x5A01 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_CE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8719, 0x871B, 0x871D, 0x871F, 0x8720, 0x8724, 0x8726, 0x8727, /* 0x40 */
+ 0x8728, 0x872A, 0x872B, 0x872C, 0x872D, 0x872F, 0x8730, 0x8732, /* 0x40 */
+ 0x8733, 0x8735, 0x8736, 0x8738, 0x8739, 0x873A, 0x873C, 0x873D, /* 0x50 */
+ 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x874A, /* 0x50 */
+ 0x874B, 0x874D, 0x874F, 0x8750, 0x8751, 0x8752, 0x8754, 0x8755, /* 0x60 */
+ 0x8756, 0x8758, 0x875A, 0x875B, 0x875C, 0x875D, 0x875E, 0x875F, /* 0x60 */
+ 0x8761, 0x8762, 0x8766, 0x8767, 0x8768, 0x8769, 0x876A, 0x876B, /* 0x70 */
+ 0x876C, 0x876D, 0x876F, 0x8771, 0x8772, 0x8773, 0x8775, 0, /* 0x70 */
+ 0x8777, 0x8778, 0x8779, 0x877A, 0x877F, 0x8780, 0x8781, 0x8784, /* 0x80 */
+ 0x8786, 0x8787, 0x8789, 0x878A, 0x878C, 0x878E, 0x878F, 0x8790, /* 0x80 */
+ 0x8791, 0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799, 0x879A, /* 0x90 */
+ 0x879B, 0x879C, 0x879D, 0x879E, 0x87A0, 0x87A1, 0x87A2, 0x87A3, /* 0x90 */
+ 0x87A4, 0x5DCD, 0x5FAE, 0x5371, 0x97E6, 0x8FDD, 0x6845, 0x56F4, /* 0xA0 */
+ 0x552F, 0x60DF, 0x4E3A, 0x6F4D, 0x7EF4, 0x82C7, 0x840E, 0x59D4, /* 0xA0 */
+ 0x4F1F, 0x4F2A, 0x5C3E, 0x7EAC, 0x672A, 0x851A, 0x5473, 0x754F, /* 0xB0 */
+ 0x80C3, 0x5582, 0x9B4F, 0x4F4D, 0x6E2D, 0x8C13, 0x5C09, 0x6170, /* 0xB0 */
+ 0x536B, 0x761F, 0x6E29, 0x868A, 0x6587, 0x95FB, 0x7EB9, 0x543B, /* 0xC0 */
+ 0x7A33, 0x7D0A, 0x95EE, 0x55E1, 0x7FC1, 0x74EE, 0x631D, 0x8717, /* 0xC0 */
+ 0x6DA1, 0x7A9D, 0x6211, 0x65A1, 0x5367, 0x63E1, 0x6C83, 0x5DEB, /* 0xD0 */
+ 0x545C, 0x94A8, 0x4E4C, 0x6C61, 0x8BEC, 0x5C4B, 0x65E0, 0x829C, /* 0xD0 */
+ 0x68A7, 0x543E, 0x5434, 0x6BCB, 0x6B66, 0x4E94, 0x6342, 0x5348, /* 0xE0 */
+ 0x821E, 0x4F0D, 0x4FAE, 0x575E, 0x620A, 0x96FE, 0x6664, 0x7269, /* 0xE0 */
+ 0x52FF, 0x52A1, 0x609F, 0x8BEF, 0x6614, 0x7199, 0x6790, 0x897F, /* 0xF0 */
+ 0x7852, 0x77FD, 0x6670, 0x563B, 0x5438, 0x9521, 0x727A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_CF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x87A5, 0x87A6, 0x87A7, 0x87A9, 0x87AA, 0x87AE, 0x87B0, 0x87B1, /* 0x40 */
+ 0x87B2, 0x87B4, 0x87B6, 0x87B7, 0x87B8, 0x87B9, 0x87BB, 0x87BC, /* 0x40 */
+ 0x87BE, 0x87BF, 0x87C1, 0x87C2, 0x87C3, 0x87C4, 0x87C5, 0x87C7, /* 0x50 */
+ 0x87C8, 0x87C9, 0x87CC, 0x87CD, 0x87CE, 0x87CF, 0x87D0, 0x87D4, /* 0x50 */
+ 0x87D5, 0x87D6, 0x87D7, 0x87D8, 0x87D9, 0x87DA, 0x87DC, 0x87DD, /* 0x60 */
+ 0x87DE, 0x87DF, 0x87E1, 0x87E2, 0x87E3, 0x87E4, 0x87E6, 0x87E7, /* 0x60 */
+ 0x87E8, 0x87E9, 0x87EB, 0x87EC, 0x87ED, 0x87EF, 0x87F0, 0x87F1, /* 0x70 */
+ 0x87F2, 0x87F3, 0x87F4, 0x87F5, 0x87F6, 0x87F7, 0x87F8, 0, /* 0x70 */
+ 0x87FA, 0x87FB, 0x87FC, 0x87FD, 0x87FF, 0x8800, 0x8801, 0x8802, /* 0x80 */
+ 0x8804, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, 0x880B, 0x880C, /* 0x80 */
+ 0x880D, 0x880E, 0x880F, 0x8810, 0x8811, 0x8812, 0x8814, 0x8817, /* 0x90 */
+ 0x8818, 0x8819, 0x881A, 0x881C, 0x881D, 0x881E, 0x881F, 0x8820, /* 0x90 */
+ 0x8823, 0x7A00, 0x606F, 0x5E0C, 0x6089, 0x819D, 0x5915, 0x60DC, /* 0xA0 */
+ 0x7184, 0x70EF, 0x6EAA, 0x6C50, 0x7280, 0x6A84, 0x88AD, 0x5E2D, /* 0xA0 */
+ 0x4E60, 0x5AB3, 0x559C, 0x94E3, 0x6D17, 0x7CFB, 0x9699, 0x620F, /* 0xB0 */
+ 0x7EC6, 0x778E, 0x867E, 0x5323, 0x971E, 0x8F96, 0x6687, 0x5CE1, /* 0xB0 */
+ 0x4FA0, 0x72ED, 0x4E0B, 0x53A6, 0x590F, 0x5413, 0x6380, 0x9528, /* 0xC0 */
+ 0x5148, 0x4ED9, 0x9C9C, 0x7EA4, 0x54B8, 0x8D24, 0x8854, 0x8237, /* 0xC0 */
+ 0x95F2, 0x6D8E, 0x5F26, 0x5ACC, 0x663E, 0x9669, 0x73B0, 0x732E, /* 0xD0 */
+ 0x53BF, 0x817A, 0x9985, 0x7FA1, 0x5BAA, 0x9677, 0x9650, 0x7EBF, /* 0xD0 */
+ 0x76F8, 0x53A2, 0x9576, 0x9999, 0x7BB1, 0x8944, 0x6E58, 0x4E61, /* 0xE0 */
+ 0x7FD4, 0x7965, 0x8BE6, 0x60F3, 0x54CD, 0x4EAB, 0x9879, 0x5DF7, /* 0xE0 */
+ 0x6A61, 0x50CF, 0x5411, 0x8C61, 0x8427, 0x785D, 0x9704, 0x524A, /* 0xF0 */
+ 0x54EE, 0x56A3, 0x9500, 0x6D88, 0x5BB5, 0x6DC6, 0x6653 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8824, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, 0x882A, 0x882B, /* 0x40 */
+ 0x882C, 0x882D, 0x882E, 0x882F, 0x8830, 0x8831, 0x8833, 0x8834, /* 0x40 */
+ 0x8835, 0x8836, 0x8837, 0x8838, 0x883A, 0x883B, 0x883D, 0x883E, /* 0x50 */
+ 0x883F, 0x8841, 0x8842, 0x8843, 0x8846, 0x8847, 0x8848, 0x8849, /* 0x50 */
+ 0x884A, 0x884B, 0x884E, 0x884F, 0x8850, 0x8851, 0x8852, 0x8853, /* 0x60 */
+ 0x8855, 0x8856, 0x8858, 0x885A, 0x885B, 0x885C, 0x885D, 0x885E, /* 0x60 */
+ 0x885F, 0x8860, 0x8866, 0x8867, 0x886A, 0x886D, 0x886F, 0x8871, /* 0x70 */
+ 0x8873, 0x8874, 0x8875, 0x8876, 0x8878, 0x8879, 0x887A, 0, /* 0x70 */
+ 0x887B, 0x887C, 0x8880, 0x8883, 0x8886, 0x8887, 0x8889, 0x888A, /* 0x80 */
+ 0x888C, 0x888E, 0x888F, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, /* 0x80 */
+ 0x8897, 0x8898, 0x8899, 0x889A, 0x889B, 0x889D, 0x889E, 0x889F, /* 0x90 */
+ 0x88A0, 0x88A1, 0x88A3, 0x88A5, 0x88A6, 0x88A7, 0x88A8, 0x88A9, /* 0x90 */
+ 0x88AA, 0x5C0F, 0x5B5D, 0x6821, 0x8096, 0x5578, 0x7B11, 0x6548, /* 0xA0 */
+ 0x6954, 0x4E9B, 0x6B47, 0x874E, 0x978B, 0x534F, 0x631F, 0x643A, /* 0xA0 */
+ 0x90AA, 0x659C, 0x80C1, 0x8C10, 0x5199, 0x68B0, 0x5378, 0x87F9, /* 0xB0 */
+ 0x61C8, 0x6CC4, 0x6CFB, 0x8C22, 0x5C51, 0x85AA, 0x82AF, 0x950C, /* 0xB0 */
+ 0x6B23, 0x8F9B, 0x65B0, 0x5FFB, 0x5FC3, 0x4FE1, 0x8845, 0x661F, /* 0xC0 */
+ 0x8165, 0x7329, 0x60FA, 0x5174, 0x5211, 0x578B, 0x5F62, 0x90A2, /* 0xC0 */
+ 0x884C, 0x9192, 0x5E78, 0x674F, 0x6027, 0x59D3, 0x5144, 0x51F6, /* 0xD0 */
+ 0x80F8, 0x5308, 0x6C79, 0x96C4, 0x718A, 0x4F11, 0x4FEE, 0x7F9E, /* 0xD0 */
+ 0x673D, 0x55C5, 0x9508, 0x79C0, 0x8896, 0x7EE3, 0x589F, 0x620C, /* 0xE0 */
+ 0x9700, 0x865A, 0x5618, 0x987B, 0x5F90, 0x8BB8, 0x84C4, 0x9157, /* 0xE0 */
+ 0x53D9, 0x65ED, 0x5E8F, 0x755C, 0x6064, 0x7D6E, 0x5A7F, 0x7EEA, /* 0xF0 */
+ 0x7EED, 0x8F69, 0x55A7, 0x5BA3, 0x60AC, 0x65CB, 0x7384 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x88AC, 0x88AE, 0x88AF, 0x88B0, 0x88B2, 0x88B3, 0x88B4, 0x88B5, /* 0x40 */
+ 0x88B6, 0x88B8, 0x88B9, 0x88BA, 0x88BB, 0x88BD, 0x88BE, 0x88BF, /* 0x40 */
+ 0x88C0, 0x88C3, 0x88C4, 0x88C7, 0x88C8, 0x88CA, 0x88CB, 0x88CC, /* 0x50 */
+ 0x88CD, 0x88CF, 0x88D0, 0x88D1, 0x88D3, 0x88D6, 0x88D7, 0x88DA, /* 0x50 */
+ 0x88DB, 0x88DC, 0x88DD, 0x88DE, 0x88E0, 0x88E1, 0x88E6, 0x88E7, /* 0x60 */
+ 0x88E9, 0x88EA, 0x88EB, 0x88EC, 0x88ED, 0x88EE, 0x88EF, 0x88F2, /* 0x60 */
+ 0x88F5, 0x88F6, 0x88F7, 0x88FA, 0x88FB, 0x88FD, 0x88FF, 0x8900, /* 0x70 */
+ 0x8901, 0x8903, 0x8904, 0x8905, 0x8906, 0x8907, 0x8908, 0, /* 0x70 */
+ 0x8909, 0x890B, 0x890C, 0x890D, 0x890E, 0x890F, 0x8911, 0x8914, /* 0x80 */
+ 0x8915, 0x8916, 0x8917, 0x8918, 0x891C, 0x891D, 0x891E, 0x891F, /* 0x80 */
+ 0x8920, 0x8922, 0x8923, 0x8924, 0x8926, 0x8927, 0x8928, 0x8929, /* 0x90 */
+ 0x892C, 0x892D, 0x892E, 0x892F, 0x8931, 0x8932, 0x8933, 0x8935, /* 0x90 */
+ 0x8937, 0x9009, 0x7663, 0x7729, 0x7EDA, 0x9774, 0x859B, 0x5B66, /* 0xA0 */
+ 0x7A74, 0x96EA, 0x8840, 0x52CB, 0x718F, 0x5FAA, 0x65EC, 0x8BE2, /* 0xA0 */
+ 0x5BFB, 0x9A6F, 0x5DE1, 0x6B89, 0x6C5B, 0x8BAD, 0x8BAF, 0x900A, /* 0xB0 */
+ 0x8FC5, 0x538B, 0x62BC, 0x9E26, 0x9E2D, 0x5440, 0x4E2B, 0x82BD, /* 0xB0 */
+ 0x7259, 0x869C, 0x5D16, 0x8859, 0x6DAF, 0x96C5, 0x54D1, 0x4E9A, /* 0xC0 */
+ 0x8BB6, 0x7109, 0x54BD, 0x9609, 0x70DF, 0x6DF9, 0x76D0, 0x4E25, /* 0xC0 */
+ 0x7814, 0x8712, 0x5CA9, 0x5EF6, 0x8A00, 0x989C, 0x960E, 0x708E, /* 0xD0 */
+ 0x6CBF, 0x5944, 0x63A9, 0x773C, 0x884D, 0x6F14, 0x8273, 0x5830, /* 0xD0 */
+ 0x71D5, 0x538C, 0x781A, 0x96C1, 0x5501, 0x5F66, 0x7130, 0x5BB4, /* 0xE0 */
+ 0x8C1A, 0x9A8C, 0x6B83, 0x592E, 0x9E2F, 0x79E7, 0x6768, 0x626C, /* 0xE0 */
+ 0x4F6F, 0x75A1, 0x7F8A, 0x6D0B, 0x9633, 0x6C27, 0x4EF0, 0x75D2, /* 0xF0 */
+ 0x517B, 0x6837, 0x6F3E, 0x9080, 0x8170, 0x5996, 0x7476 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8938, 0x8939, 0x893A, 0x893B, 0x893C, 0x893D, 0x893E, 0x893F, /* 0x40 */
+ 0x8940, 0x8942, 0x8943, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, /* 0x40 */
+ 0x894A, 0x894B, 0x894C, 0x894D, 0x894E, 0x894F, 0x8950, 0x8951, /* 0x50 */
+ 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, /* 0x50 */
+ 0x895A, 0x895B, 0x895C, 0x895D, 0x8960, 0x8961, 0x8962, 0x8963, /* 0x60 */
+ 0x8964, 0x8965, 0x8967, 0x8968, 0x8969, 0x896A, 0x896B, 0x896C, /* 0x60 */
+ 0x896D, 0x896E, 0x896F, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, /* 0x70 */
+ 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897A, 0x897C, 0, /* 0x70 */
+ 0x897D, 0x897E, 0x8980, 0x8982, 0x8984, 0x8985, 0x8987, 0x8988, /* 0x80 */
+ 0x8989, 0x898A, 0x898B, 0x898C, 0x898D, 0x898E, 0x898F, 0x8990, /* 0x80 */
+ 0x8991, 0x8992, 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, /* 0x90 */
+ 0x8999, 0x899A, 0x899B, 0x899C, 0x899D, 0x899E, 0x899F, 0x89A0, /* 0x90 */
+ 0x89A1, 0x6447, 0x5C27, 0x9065, 0x7A91, 0x8C23, 0x59DA, 0x54AC, /* 0xA0 */
+ 0x8200, 0x836F, 0x8981, 0x8000, 0x6930, 0x564E, 0x8036, 0x7237, /* 0xA0 */
+ 0x91CE, 0x51B6, 0x4E5F, 0x9875, 0x6396, 0x4E1A, 0x53F6, 0x66F3, /* 0xB0 */
+ 0x814B, 0x591C, 0x6DB2, 0x4E00, 0x58F9, 0x533B, 0x63D6, 0x94F1, /* 0xB0 */
+ 0x4F9D, 0x4F0A, 0x8863, 0x9890, 0x5937, 0x9057, 0x79FB, 0x4EEA, /* 0xC0 */
+ 0x80F0, 0x7591, 0x6C82, 0x5B9C, 0x59E8, 0x5F5D, 0x6905, 0x8681, /* 0xC0 */
+ 0x501A, 0x5DF2, 0x4E59, 0x77E3, 0x4EE5, 0x827A, 0x6291, 0x6613, /* 0xD0 */
+ 0x9091, 0x5C79, 0x4EBF, 0x5F79, 0x81C6, 0x9038, 0x8084, 0x75AB, /* 0xD0 */
+ 0x4EA6, 0x88D4, 0x610F, 0x6BC5, 0x5FC6, 0x4E49, 0x76CA, 0x6EA2, /* 0xE0 */
+ 0x8BE3, 0x8BAE, 0x8C0A, 0x8BD1, 0x5F02, 0x7FFC, 0x7FCC, 0x7ECE, /* 0xE0 */
+ 0x8335, 0x836B, 0x56E0, 0x6BB7, 0x97F3, 0x9634, 0x59FB, 0x541F, /* 0xF0 */
+ 0x94F6, 0x6DEB, 0x5BC5, 0x996E, 0x5C39, 0x5F15, 0x9690 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x89A2, 0x89A3, 0x89A4, 0x89A5, 0x89A6, 0x89A7, 0x89A8, 0x89A9, /* 0x40 */
+ 0x89AA, 0x89AB, 0x89AC, 0x89AD, 0x89AE, 0x89AF, 0x89B0, 0x89B1, /* 0x40 */
+ 0x89B2, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, 0x89B8, 0x89B9, /* 0x50 */
+ 0x89BA, 0x89BB, 0x89BC, 0x89BD, 0x89BE, 0x89BF, 0x89C0, 0x89C3, /* 0x50 */
+ 0x89CD, 0x89D3, 0x89D4, 0x89D5, 0x89D7, 0x89D8, 0x89D9, 0x89DB, /* 0x60 */
+ 0x89DD, 0x89DF, 0x89E0, 0x89E1, 0x89E2, 0x89E4, 0x89E7, 0x89E8, /* 0x60 */
+ 0x89E9, 0x89EA, 0x89EC, 0x89ED, 0x89EE, 0x89F0, 0x89F1, 0x89F2, /* 0x70 */
+ 0x89F4, 0x89F5, 0x89F6, 0x89F7, 0x89F8, 0x89F9, 0x89FA, 0, /* 0x70 */
+ 0x89FB, 0x89FC, 0x89FD, 0x89FE, 0x89FF, 0x8A01, 0x8A02, 0x8A03, /* 0x80 */
+ 0x8A04, 0x8A05, 0x8A06, 0x8A08, 0x8A09, 0x8A0A, 0x8A0B, 0x8A0C, /* 0x80 */
+ 0x8A0D, 0x8A0E, 0x8A0F, 0x8A10, 0x8A11, 0x8A12, 0x8A13, 0x8A14, /* 0x90 */
+ 0x8A15, 0x8A16, 0x8A17, 0x8A18, 0x8A19, 0x8A1A, 0x8A1B, 0x8A1C, /* 0x90 */
+ 0x8A1D, 0x5370, 0x82F1, 0x6A31, 0x5A74, 0x9E70, 0x5E94, 0x7F28, /* 0xA0 */
+ 0x83B9, 0x8424, 0x8425, 0x8367, 0x8747, 0x8FCE, 0x8D62, 0x76C8, /* 0xA0 */
+ 0x5F71, 0x9896, 0x786C, 0x6620, 0x54DF, 0x62E5, 0x4F63, 0x81C3, /* 0xB0 */
+ 0x75C8, 0x5EB8, 0x96CD, 0x8E0A, 0x86F9, 0x548F, 0x6CF3, 0x6D8C, /* 0xB0 */
+ 0x6C38, 0x607F, 0x52C7, 0x7528, 0x5E7D, 0x4F18, 0x60A0, 0x5FE7, /* 0xC0 */
+ 0x5C24, 0x7531, 0x90AE, 0x94C0, 0x72B9, 0x6CB9, 0x6E38, 0x9149, /* 0xC0 */
+ 0x6709, 0x53CB, 0x53F3, 0x4F51, 0x91C9, 0x8BF1, 0x53C8, 0x5E7C, /* 0xD0 */
+ 0x8FC2, 0x6DE4, 0x4E8E, 0x76C2, 0x6986, 0x865E, 0x611A, 0x8206, /* 0xD0 */
+ 0x4F59, 0x4FDE, 0x903E, 0x9C7C, 0x6109, 0x6E1D, 0x6E14, 0x9685, /* 0xE0 */
+ 0x4E88, 0x5A31, 0x96E8, 0x4E0E, 0x5C7F, 0x79B9, 0x5B87, 0x8BED, /* 0xE0 */
+ 0x7FBD, 0x7389, 0x57DF, 0x828B, 0x90C1, 0x5401, 0x9047, 0x55BB, /* 0xF0 */
+ 0x5CEA, 0x5FA1, 0x6108, 0x6B32, 0x72F1, 0x80B2, 0x8A89 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8A1E, 0x8A1F, 0x8A20, 0x8A21, 0x8A22, 0x8A23, 0x8A24, 0x8A25, /* 0x40 */
+ 0x8A26, 0x8A27, 0x8A28, 0x8A29, 0x8A2A, 0x8A2B, 0x8A2C, 0x8A2D, /* 0x40 */
+ 0x8A2E, 0x8A2F, 0x8A30, 0x8A31, 0x8A32, 0x8A33, 0x8A34, 0x8A35, /* 0x50 */
+ 0x8A36, 0x8A37, 0x8A38, 0x8A39, 0x8A3A, 0x8A3B, 0x8A3C, 0x8A3D, /* 0x50 */
+ 0x8A3F, 0x8A40, 0x8A41, 0x8A42, 0x8A43, 0x8A44, 0x8A45, 0x8A46, /* 0x60 */
+ 0x8A47, 0x8A49, 0x8A4A, 0x8A4B, 0x8A4C, 0x8A4D, 0x8A4E, 0x8A4F, /* 0x60 */
+ 0x8A50, 0x8A51, 0x8A52, 0x8A53, 0x8A54, 0x8A55, 0x8A56, 0x8A57, /* 0x70 */
+ 0x8A58, 0x8A59, 0x8A5A, 0x8A5B, 0x8A5C, 0x8A5D, 0x8A5E, 0, /* 0x70 */
+ 0x8A5F, 0x8A60, 0x8A61, 0x8A62, 0x8A63, 0x8A64, 0x8A65, 0x8A66, /* 0x80 */
+ 0x8A67, 0x8A68, 0x8A69, 0x8A6A, 0x8A6B, 0x8A6C, 0x8A6D, 0x8A6E, /* 0x80 */
+ 0x8A6F, 0x8A70, 0x8A71, 0x8A72, 0x8A73, 0x8A74, 0x8A75, 0x8A76, /* 0x90 */
+ 0x8A77, 0x8A78, 0x8A7A, 0x8A7B, 0x8A7C, 0x8A7D, 0x8A7E, 0x8A7F, /* 0x90 */
+ 0x8A80, 0x6D74, 0x5BD3, 0x88D5, 0x9884, 0x8C6B, 0x9A6D, 0x9E33, /* 0xA0 */
+ 0x6E0A, 0x51A4, 0x5143, 0x57A3, 0x8881, 0x539F, 0x63F4, 0x8F95, /* 0xA0 */
+ 0x56ED, 0x5458, 0x5706, 0x733F, 0x6E90, 0x7F18, 0x8FDC, 0x82D1, /* 0xB0 */
+ 0x613F, 0x6028, 0x9662, 0x66F0, 0x7EA6, 0x8D8A, 0x8DC3, 0x94A5, /* 0xB0 */
+ 0x5CB3, 0x7CA4, 0x6708, 0x60A6, 0x9605, 0x8018, 0x4E91, 0x90E7, /* 0xC0 */
+ 0x5300, 0x9668, 0x5141, 0x8FD0, 0x8574, 0x915D, 0x6655, 0x97F5, /* 0xC0 */
+ 0x5B55, 0x531D, 0x7838, 0x6742, 0x683D, 0x54C9, 0x707E, 0x5BB0, /* 0xD0 */
+ 0x8F7D, 0x518D, 0x5728, 0x54B1, 0x6512, 0x6682, 0x8D5E, 0x8D43, /* 0xD0 */
+ 0x810F, 0x846C, 0x906D, 0x7CDF, 0x51FF, 0x85FB, 0x67A3, 0x65E9, /* 0xE0 */
+ 0x6FA1, 0x86A4, 0x8E81, 0x566A, 0x9020, 0x7682, 0x7076, 0x71E5, /* 0xE0 */
+ 0x8D23, 0x62E9, 0x5219, 0x6CFD, 0x8D3C, 0x600E, 0x589E, 0x618E, /* 0xF0 */
+ 0x66FE, 0x8D60, 0x624E, 0x55B3, 0x6E23, 0x672D, 0x8F67 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8A81, 0x8A82, 0x8A83, 0x8A84, 0x8A85, 0x8A86, 0x8A87, 0x8A88, /* 0x40 */
+ 0x8A8B, 0x8A8C, 0x8A8D, 0x8A8E, 0x8A8F, 0x8A90, 0x8A91, 0x8A92, /* 0x40 */
+ 0x8A94, 0x8A95, 0x8A96, 0x8A97, 0x8A98, 0x8A99, 0x8A9A, 0x8A9B, /* 0x50 */
+ 0x8A9C, 0x8A9D, 0x8A9E, 0x8A9F, 0x8AA0, 0x8AA1, 0x8AA2, 0x8AA3, /* 0x50 */
+ 0x8AA4, 0x8AA5, 0x8AA6, 0x8AA7, 0x8AA8, 0x8AA9, 0x8AAA, 0x8AAB, /* 0x60 */
+ 0x8AAC, 0x8AAD, 0x8AAE, 0x8AAF, 0x8AB0, 0x8AB1, 0x8AB2, 0x8AB3, /* 0x60 */
+ 0x8AB4, 0x8AB5, 0x8AB6, 0x8AB7, 0x8AB8, 0x8AB9, 0x8ABA, 0x8ABB, /* 0x70 */
+ 0x8ABC, 0x8ABD, 0x8ABE, 0x8ABF, 0x8AC0, 0x8AC1, 0x8AC2, 0, /* 0x70 */
+ 0x8AC3, 0x8AC4, 0x8AC5, 0x8AC6, 0x8AC7, 0x8AC8, 0x8AC9, 0x8ACA, /* 0x80 */
+ 0x8ACB, 0x8ACC, 0x8ACD, 0x8ACE, 0x8ACF, 0x8AD0, 0x8AD1, 0x8AD2, /* 0x80 */
+ 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD6, 0x8AD7, 0x8AD8, 0x8AD9, 0x8ADA, /* 0x90 */
+ 0x8ADB, 0x8ADC, 0x8ADD, 0x8ADE, 0x8ADF, 0x8AE0, 0x8AE1, 0x8AE2, /* 0x90 */
+ 0x8AE3, 0x94E1, 0x95F8, 0x7728, 0x6805, 0x69A8, 0x548B, 0x4E4D, /* 0xA0 */
+ 0x70B8, 0x8BC8, 0x6458, 0x658B, 0x5B85, 0x7A84, 0x503A, 0x5BE8, /* 0xA0 */
+ 0x77BB, 0x6BE1, 0x8A79, 0x7C98, 0x6CBE, 0x76CF, 0x65A9, 0x8F97, /* 0xB0 */
+ 0x5D2D, 0x5C55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7AD9, 0x6E5B, /* 0xB0 */
+ 0x7EFD, 0x6A1F, 0x7AE0, 0x5F70, 0x6F33, 0x5F20, 0x638C, 0x6DA8, /* 0xC0 */
+ 0x6756, 0x4E08, 0x5E10, 0x8D26, 0x4ED7, 0x80C0, 0x7634, 0x969C, /* 0xC0 */
+ 0x62DB, 0x662D, 0x627E, 0x6CBC, 0x8D75, 0x7167, 0x7F69, 0x5146, /* 0xD0 */
+ 0x8087, 0x53EC, 0x906E, 0x6298, 0x54F2, 0x86F0, 0x8F99, 0x8005, /* 0xD0 */
+ 0x9517, 0x8517, 0x8FD9, 0x6D59, 0x73CD, 0x659F, 0x771F, 0x7504, /* 0xE0 */
+ 0x7827, 0x81FB, 0x8D1E, 0x9488, 0x4FA6, 0x6795, 0x75B9, 0x8BCA, /* 0xE0 */
+ 0x9707, 0x632F, 0x9547, 0x9635, 0x84B8, 0x6323, 0x7741, 0x5F81, /* 0xF0 */
+ 0x72F0, 0x4E89, 0x6014, 0x6574, 0x62EF, 0x6B63, 0x653F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8AE4, 0x8AE5, 0x8AE6, 0x8AE7, 0x8AE8, 0x8AE9, 0x8AEA, 0x8AEB, /* 0x40 */
+ 0x8AEC, 0x8AED, 0x8AEE, 0x8AEF, 0x8AF0, 0x8AF1, 0x8AF2, 0x8AF3, /* 0x40 */
+ 0x8AF4, 0x8AF5, 0x8AF6, 0x8AF7, 0x8AF8, 0x8AF9, 0x8AFA, 0x8AFB, /* 0x50 */
+ 0x8AFC, 0x8AFD, 0x8AFE, 0x8AFF, 0x8B00, 0x8B01, 0x8B02, 0x8B03, /* 0x50 */
+ 0x8B04, 0x8B05, 0x8B06, 0x8B08, 0x8B09, 0x8B0A, 0x8B0B, 0x8B0C, /* 0x60 */
+ 0x8B0D, 0x8B0E, 0x8B0F, 0x8B10, 0x8B11, 0x8B12, 0x8B13, 0x8B14, /* 0x60 */
+ 0x8B15, 0x8B16, 0x8B17, 0x8B18, 0x8B19, 0x8B1A, 0x8B1B, 0x8B1C, /* 0x70 */
+ 0x8B1D, 0x8B1E, 0x8B1F, 0x8B20, 0x8B21, 0x8B22, 0x8B23, 0, /* 0x70 */
+ 0x8B24, 0x8B25, 0x8B27, 0x8B28, 0x8B29, 0x8B2A, 0x8B2B, 0x8B2C, /* 0x80 */
+ 0x8B2D, 0x8B2E, 0x8B2F, 0x8B30, 0x8B31, 0x8B32, 0x8B33, 0x8B34, /* 0x80 */
+ 0x8B35, 0x8B36, 0x8B37, 0x8B38, 0x8B39, 0x8B3A, 0x8B3B, 0x8B3C, /* 0x90 */
+ 0x8B3D, 0x8B3E, 0x8B3F, 0x8B40, 0x8B41, 0x8B42, 0x8B43, 0x8B44, /* 0x90 */
+ 0x8B45, 0x5E27, 0x75C7, 0x90D1, 0x8BC1, 0x829D, 0x679D, 0x652F, /* 0xA0 */
+ 0x5431, 0x8718, 0x77E5, 0x80A2, 0x8102, 0x6C41, 0x4E4B, 0x7EC7, /* 0xA0 */
+ 0x804C, 0x76F4, 0x690D, 0x6B96, 0x6267, 0x503C, 0x4F84, 0x5740, /* 0xB0 */
+ 0x6307, 0x6B62, 0x8DBE, 0x53EA, 0x65E8, 0x7EB8, 0x5FD7, 0x631A, /* 0xB0 */
+ 0x63B7, 0x81F3, 0x81F4, 0x7F6E, 0x5E1C, 0x5CD9, 0x5236, 0x667A, /* 0xC0 */
+ 0x79E9, 0x7A1A, 0x8D28, 0x7099, 0x75D4, 0x6EDE, 0x6CBB, 0x7A92, /* 0xC0 */
+ 0x4E2D, 0x76C5, 0x5FE0, 0x949F, 0x8877, 0x7EC8, 0x79CD, 0x80BF, /* 0xD0 */
+ 0x91CD, 0x4EF2, 0x4F17, 0x821F, 0x5468, 0x5DDE, 0x6D32, 0x8BCC, /* 0xD0 */
+ 0x7CA5, 0x8F74, 0x8098, 0x5E1A, 0x5492, 0x76B1, 0x5B99, 0x663C, /* 0xE0 */
+ 0x9AA4, 0x73E0, 0x682A, 0x86DB, 0x6731, 0x732A, 0x8BF8, 0x8BDB, /* 0xE0 */
+ 0x9010, 0x7AF9, 0x70DB, 0x716E, 0x62C4, 0x77A9, 0x5631, 0x4E3B, /* 0xF0 */
+ 0x8457, 0x67F1, 0x52A9, 0x86C0, 0x8D2E, 0x94F8, 0x7B51 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B46, 0x8B47, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, 0x8B4C, 0x8B4D, /* 0x40 */
+ 0x8B4E, 0x8B4F, 0x8B50, 0x8B51, 0x8B52, 0x8B53, 0x8B54, 0x8B55, /* 0x40 */
+ 0x8B56, 0x8B57, 0x8B58, 0x8B59, 0x8B5A, 0x8B5B, 0x8B5C, 0x8B5D, /* 0x50 */
+ 0x8B5E, 0x8B5F, 0x8B60, 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, /* 0x50 */
+ 0x8B67, 0x8B68, 0x8B69, 0x8B6A, 0x8B6B, 0x8B6D, 0x8B6E, 0x8B6F, /* 0x60 */
+ 0x8B70, 0x8B71, 0x8B72, 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, /* 0x60 */
+ 0x8B78, 0x8B79, 0x8B7A, 0x8B7B, 0x8B7C, 0x8B7D, 0x8B7E, 0x8B7F, /* 0x70 */
+ 0x8B80, 0x8B81, 0x8B82, 0x8B83, 0x8B84, 0x8B85, 0x8B86, 0, /* 0x70 */
+ 0x8B87, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, 0x8B8D, 0x8B8E, /* 0x80 */
+ 0x8B8F, 0x8B90, 0x8B91, 0x8B92, 0x8B93, 0x8B94, 0x8B95, 0x8B96, /* 0x80 */
+ 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B, 0x8B9C, 0x8B9D, 0x8B9E, /* 0x90 */
+ 0x8B9F, 0x8BAC, 0x8BB1, 0x8BBB, 0x8BC7, 0x8BD0, 0x8BEA, 0x8C09, /* 0x90 */
+ 0x8C1E, 0x4F4F, 0x6CE8, 0x795D, 0x9A7B, 0x6293, 0x722A, 0x62FD, /* 0xA0 */
+ 0x4E13, 0x7816, 0x8F6C, 0x64B0, 0x8D5A, 0x7BC6, 0x6869, 0x5E84, /* 0xA0 */
+ 0x88C5, 0x5986, 0x649E, 0x58EE, 0x72B6, 0x690E, 0x9525, 0x8FFD, /* 0xB0 */
+ 0x8D58, 0x5760, 0x7F00, 0x8C06, 0x51C6, 0x6349, 0x62D9, 0x5353, /* 0xB0 */
+ 0x684C, 0x7422, 0x8301, 0x914C, 0x5544, 0x7740, 0x707C, 0x6D4A, /* 0xC0 */
+ 0x5179, 0x54A8, 0x8D44, 0x59FF, 0x6ECB, 0x6DC4, 0x5B5C, 0x7D2B, /* 0xC0 */
+ 0x4ED4, 0x7C7D, 0x6ED3, 0x5B50, 0x81EA, 0x6E0D, 0x5B57, 0x9B03, /* 0xD0 */
+ 0x68D5, 0x8E2A, 0x5B97, 0x7EFC, 0x603B, 0x7EB5, 0x90B9, 0x8D70, /* 0xD0 */
+ 0x594F, 0x63CD, 0x79DF, 0x8DB3, 0x5352, 0x65CF, 0x7956, 0x8BC5, /* 0xE0 */
+ 0x963B, 0x7EC4, 0x94BB, 0x7E82, 0x5634, 0x9189, 0x6700, 0x7F6A, /* 0xE0 */
+ 0x5C0A, 0x9075, 0x6628, 0x5DE6, 0x4F50, 0x67DE, 0x505A, 0x4F5C, /* 0xF0 */
+ 0x5750, 0x5EA7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8C38, 0x8C39, 0x8C3A, 0x8C3B, 0x8C3C, 0x8C3D, 0x8C3E, 0x8C3F, /* 0x40 */
+ 0x8C40, 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C48, 0x8C4A, 0x8C4B, /* 0x40 */
+ 0x8C4D, 0x8C4E, 0x8C4F, 0x8C50, 0x8C51, 0x8C52, 0x8C53, 0x8C54, /* 0x50 */
+ 0x8C56, 0x8C57, 0x8C58, 0x8C59, 0x8C5B, 0x8C5C, 0x8C5D, 0x8C5E, /* 0x50 */
+ 0x8C5F, 0x8C60, 0x8C63, 0x8C64, 0x8C65, 0x8C66, 0x8C67, 0x8C68, /* 0x60 */
+ 0x8C69, 0x8C6C, 0x8C6D, 0x8C6E, 0x8C6F, 0x8C70, 0x8C71, 0x8C72, /* 0x60 */
+ 0x8C74, 0x8C75, 0x8C76, 0x8C77, 0x8C7B, 0x8C7C, 0x8C7D, 0x8C7E, /* 0x70 */
+ 0x8C7F, 0x8C80, 0x8C81, 0x8C83, 0x8C84, 0x8C86, 0x8C87, 0, /* 0x70 */
+ 0x8C88, 0x8C8B, 0x8C8D, 0x8C8E, 0x8C8F, 0x8C90, 0x8C91, 0x8C92, /* 0x80 */
+ 0x8C93, 0x8C95, 0x8C96, 0x8C97, 0x8C99, 0x8C9A, 0x8C9B, 0x8C9C, /* 0x80 */
+ 0x8C9D, 0x8C9E, 0x8C9F, 0x8CA0, 0x8CA1, 0x8CA2, 0x8CA3, 0x8CA4, /* 0x90 */
+ 0x8CA5, 0x8CA6, 0x8CA7, 0x8CA8, 0x8CA9, 0x8CAA, 0x8CAB, 0x8CAC, /* 0x90 */
+ 0x8CAD, 0x4E8D, 0x4E0C, 0x5140, 0x4E10, 0x5EFF, 0x5345, 0x4E15, /* 0xA0 */
+ 0x4E98, 0x4E1E, 0x9B32, 0x5B6C, 0x5669, 0x4E28, 0x79BA, 0x4E3F, /* 0xA0 */
+ 0x5315, 0x4E47, 0x592D, 0x723B, 0x536E, 0x6C10, 0x56DF, 0x80E4, /* 0xB0 */
+ 0x9997, 0x6BD3, 0x777E, 0x9F17, 0x4E36, 0x4E9F, 0x9F10, 0x4E5C, /* 0xB0 */
+ 0x4E69, 0x4E93, 0x8288, 0x5B5B, 0x556C, 0x560F, 0x4EC4, 0x538D, /* 0xC0 */
+ 0x539D, 0x53A3, 0x53A5, 0x53AE, 0x9765, 0x8D5D, 0x531A, 0x53F5, /* 0xC0 */
+ 0x5326, 0x532E, 0x533E, 0x8D5C, 0x5366, 0x5363, 0x5202, 0x5208, /* 0xD0 */
+ 0x520E, 0x522D, 0x5233, 0x523F, 0x5240, 0x524C, 0x525E, 0x5261, /* 0xD0 */
+ 0x525C, 0x84AF, 0x527D, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, /* 0xE0 */
+ 0x7F54, 0x4EBB, 0x4EC3, 0x4EC9, 0x4EC2, 0x4EE8, 0x4EE1, 0x4EEB, /* 0xE0 */
+ 0x4EDE, 0x4F1B, 0x4EF3, 0x4F22, 0x4F64, 0x4EF5, 0x4F25, 0x4F27, /* 0xF0 */
+ 0x4F09, 0x4F2B, 0x4F5E, 0x4F67, 0x6538, 0x4F5A, 0x4F5D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_D9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8CAE, 0x8CAF, 0x8CB0, 0x8CB1, 0x8CB2, 0x8CB3, 0x8CB4, 0x8CB5, /* 0x40 */
+ 0x8CB6, 0x8CB7, 0x8CB8, 0x8CB9, 0x8CBA, 0x8CBB, 0x8CBC, 0x8CBD, /* 0x40 */
+ 0x8CBE, 0x8CBF, 0x8CC0, 0x8CC1, 0x8CC2, 0x8CC3, 0x8CC4, 0x8CC5, /* 0x50 */
+ 0x8CC6, 0x8CC7, 0x8CC8, 0x8CC9, 0x8CCA, 0x8CCB, 0x8CCC, 0x8CCD, /* 0x50 */
+ 0x8CCE, 0x8CCF, 0x8CD0, 0x8CD1, 0x8CD2, 0x8CD3, 0x8CD4, 0x8CD5, /* 0x60 */
+ 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDA, 0x8CDB, 0x8CDC, 0x8CDD, /* 0x60 */
+ 0x8CDE, 0x8CDF, 0x8CE0, 0x8CE1, 0x8CE2, 0x8CE3, 0x8CE4, 0x8CE5, /* 0x70 */
+ 0x8CE6, 0x8CE7, 0x8CE8, 0x8CE9, 0x8CEA, 0x8CEB, 0x8CEC, 0, /* 0x70 */
+ 0x8CED, 0x8CEE, 0x8CEF, 0x8CF0, 0x8CF1, 0x8CF2, 0x8CF3, 0x8CF4, /* 0x80 */
+ 0x8CF5, 0x8CF6, 0x8CF7, 0x8CF8, 0x8CF9, 0x8CFA, 0x8CFB, 0x8CFC, /* 0x80 */
+ 0x8CFD, 0x8CFE, 0x8CFF, 0x8D00, 0x8D01, 0x8D02, 0x8D03, 0x8D04, /* 0x90 */
+ 0x8D05, 0x8D06, 0x8D07, 0x8D08, 0x8D09, 0x8D0A, 0x8D0B, 0x8D0C, /* 0x90 */
+ 0x8D0D, 0x4F5F, 0x4F57, 0x4F32, 0x4F3D, 0x4F76, 0x4F74, 0x4F91, /* 0xA0 */
+ 0x4F89, 0x4F83, 0x4F8F, 0x4F7E, 0x4F7B, 0x4FAA, 0x4F7C, 0x4FAC, /* 0xA0 */
+ 0x4F94, 0x4FE6, 0x4FE8, 0x4FEA, 0x4FC5, 0x4FDA, 0x4FE3, 0x4FDC, /* 0xB0 */
+ 0x4FD1, 0x4FDF, 0x4FF8, 0x5029, 0x504C, 0x4FF3, 0x502C, 0x500F, /* 0xB0 */
+ 0x502E, 0x502D, 0x4FFE, 0x501C, 0x500C, 0x5025, 0x5028, 0x507E, /* 0xC0 */
+ 0x5043, 0x5055, 0x5048, 0x504E, 0x506C, 0x507B, 0x50A5, 0x50A7, /* 0xC0 */
+ 0x50A9, 0x50BA, 0x50D6, 0x5106, 0x50ED, 0x50EC, 0x50E6, 0x50EE, /* 0xD0 */
+ 0x5107, 0x510B, 0x4EDD, 0x6C3D, 0x4F58, 0x4F65, 0x4FCE, 0x9FA0, /* 0xD0 */
+ 0x6C46, 0x7C74, 0x516E, 0x5DFD, 0x9EC9, 0x9998, 0x5181, 0x5914, /* 0xE0 */
+ 0x52F9, 0x530D, 0x8A07, 0x5310, 0x51EB, 0x5919, 0x5155, 0x4EA0, /* 0xE0 */
+ 0x5156, 0x4EB3, 0x886E, 0x88A4, 0x4EB5, 0x8114, 0x88D2, 0x7980, /* 0xF0 */
+ 0x5B34, 0x8803, 0x7FB8, 0x51AB, 0x51B1, 0x51BD, 0x51BC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_DA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8D0E, 0x8D0F, 0x8D10, 0x8D11, 0x8D12, 0x8D13, 0x8D14, 0x8D15, /* 0x40 */
+ 0x8D16, 0x8D17, 0x8D18, 0x8D19, 0x8D1A, 0x8D1B, 0x8D1C, 0x8D20, /* 0x40 */
+ 0x8D51, 0x8D52, 0x8D57, 0x8D5F, 0x8D65, 0x8D68, 0x8D69, 0x8D6A, /* 0x50 */
+ 0x8D6C, 0x8D6E, 0x8D6F, 0x8D71, 0x8D72, 0x8D78, 0x8D79, 0x8D7A, /* 0x50 */
+ 0x8D7B, 0x8D7C, 0x8D7D, 0x8D7E, 0x8D7F, 0x8D80, 0x8D82, 0x8D83, /* 0x60 */
+ 0x8D86, 0x8D87, 0x8D88, 0x8D89, 0x8D8C, 0x8D8D, 0x8D8E, 0x8D8F, /* 0x60 */
+ 0x8D90, 0x8D92, 0x8D93, 0x8D95, 0x8D96, 0x8D97, 0x8D98, 0x8D99, /* 0x70 */
+ 0x8D9A, 0x8D9B, 0x8D9C, 0x8D9D, 0x8D9E, 0x8DA0, 0x8DA1, 0, /* 0x70 */
+ 0x8DA2, 0x8DA4, 0x8DA5, 0x8DA6, 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, /* 0x80 */
+ 0x8DAB, 0x8DAC, 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x8DB2, 0x8DB6, /* 0x80 */
+ 0x8DB7, 0x8DB9, 0x8DBB, 0x8DBD, 0x8DC0, 0x8DC1, 0x8DC2, 0x8DC5, /* 0x90 */
+ 0x8DC7, 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCD, 0x8DD0, 0x8DD2, 0x8DD3, /* 0x90 */
+ 0x8DD4, 0x51C7, 0x5196, 0x51A2, 0x51A5, 0x8BA0, 0x8BA6, 0x8BA7, /* 0xA0 */
+ 0x8BAA, 0x8BB4, 0x8BB5, 0x8BB7, 0x8BC2, 0x8BC3, 0x8BCB, 0x8BCF, /* 0xA0 */
+ 0x8BCE, 0x8BD2, 0x8BD3, 0x8BD4, 0x8BD6, 0x8BD8, 0x8BD9, 0x8BDC, /* 0xB0 */
+ 0x8BDF, 0x8BE0, 0x8BE4, 0x8BE8, 0x8BE9, 0x8BEE, 0x8BF0, 0x8BF3, /* 0xB0 */
+ 0x8BF6, 0x8BF9, 0x8BFC, 0x8BFF, 0x8C00, 0x8C02, 0x8C04, 0x8C07, /* 0xC0 */
+ 0x8C0C, 0x8C0F, 0x8C11, 0x8C12, 0x8C14, 0x8C15, 0x8C16, 0x8C19, /* 0xC0 */
+ 0x8C1B, 0x8C18, 0x8C1D, 0x8C1F, 0x8C20, 0x8C21, 0x8C25, 0x8C27, /* 0xD0 */
+ 0x8C2A, 0x8C2B, 0x8C2E, 0x8C2F, 0x8C32, 0x8C33, 0x8C35, 0x8C36, /* 0xD0 */
+ 0x5369, 0x537A, 0x961D, 0x9622, 0x9621, 0x9631, 0x962A, 0x963D, /* 0xE0 */
+ 0x963C, 0x9642, 0x9649, 0x9654, 0x965F, 0x9667, 0x966C, 0x9672, /* 0xE0 */
+ 0x9674, 0x9688, 0x968D, 0x9697, 0x96B0, 0x9097, 0x909B, 0x909D, /* 0xF0 */
+ 0x9099, 0x90AC, 0x90A1, 0x90B4, 0x90B3, 0x90B6, 0x90BA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_DB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8DD5, 0x8DD8, 0x8DD9, 0x8DDC, 0x8DE0, 0x8DE1, 0x8DE2, 0x8DE5, /* 0x40 */
+ 0x8DE6, 0x8DE7, 0x8DE9, 0x8DED, 0x8DEE, 0x8DF0, 0x8DF1, 0x8DF2, /* 0x40 */
+ 0x8DF4, 0x8DF6, 0x8DFC, 0x8DFE, 0x8DFF, 0x8E00, 0x8E01, 0x8E02, /* 0x50 */
+ 0x8E03, 0x8E04, 0x8E06, 0x8E07, 0x8E08, 0x8E0B, 0x8E0D, 0x8E0E, /* 0x50 */
+ 0x8E10, 0x8E11, 0x8E12, 0x8E13, 0x8E15, 0x8E16, 0x8E17, 0x8E18, /* 0x60 */
+ 0x8E19, 0x8E1A, 0x8E1B, 0x8E1C, 0x8E20, 0x8E21, 0x8E24, 0x8E25, /* 0x60 */
+ 0x8E26, 0x8E27, 0x8E28, 0x8E2B, 0x8E2D, 0x8E30, 0x8E32, 0x8E33, /* 0x70 */
+ 0x8E34, 0x8E36, 0x8E37, 0x8E38, 0x8E3B, 0x8E3C, 0x8E3E, 0, /* 0x70 */
+ 0x8E3F, 0x8E43, 0x8E45, 0x8E46, 0x8E4C, 0x8E4D, 0x8E4E, 0x8E4F, /* 0x80 */
+ 0x8E50, 0x8E53, 0x8E54, 0x8E55, 0x8E56, 0x8E57, 0x8E58, 0x8E5A, /* 0x80 */
+ 0x8E5B, 0x8E5C, 0x8E5D, 0x8E5E, 0x8E5F, 0x8E60, 0x8E61, 0x8E62, /* 0x90 */
+ 0x8E63, 0x8E64, 0x8E65, 0x8E67, 0x8E68, 0x8E6A, 0x8E6B, 0x8E6E, /* 0x90 */
+ 0x8E71, 0x90B8, 0x90B0, 0x90CF, 0x90C5, 0x90BE, 0x90D0, 0x90C4, /* 0xA0 */
+ 0x90C7, 0x90D3, 0x90E6, 0x90E2, 0x90DC, 0x90D7, 0x90DB, 0x90EB, /* 0xA0 */
+ 0x90EF, 0x90FE, 0x9104, 0x9122, 0x911E, 0x9123, 0x9131, 0x912F, /* 0xB0 */
+ 0x9139, 0x9143, 0x9146, 0x520D, 0x5942, 0x52A2, 0x52AC, 0x52AD, /* 0xB0 */
+ 0x52BE, 0x54FF, 0x52D0, 0x52D6, 0x52F0, 0x53DF, 0x71EE, 0x77CD, /* 0xC0 */
+ 0x5EF4, 0x51F5, 0x51FC, 0x9B2F, 0x53B6, 0x5F01, 0x755A, 0x5DEF, /* 0xC0 */
+ 0x574C, 0x57A9, 0x57A1, 0x587E, 0x58BC, 0x58C5, 0x58D1, 0x5729, /* 0xD0 */
+ 0x572C, 0x572A, 0x5733, 0x5739, 0x572E, 0x572F, 0x575C, 0x573B, /* 0xD0 */
+ 0x5742, 0x5769, 0x5785, 0x576B, 0x5786, 0x577C, 0x577B, 0x5768, /* 0xE0 */
+ 0x576D, 0x5776, 0x5773, 0x57AD, 0x57A4, 0x578C, 0x57B2, 0x57CF, /* 0xE0 */
+ 0x57A7, 0x57B4, 0x5793, 0x57A0, 0x57D5, 0x57D8, 0x57DA, 0x57D9, /* 0xF0 */
+ 0x57D2, 0x57B8, 0x57F4, 0x57EF, 0x57F8, 0x57E4, 0x57DD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_DC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E73, 0x8E75, 0x8E77, 0x8E78, 0x8E79, 0x8E7A, 0x8E7B, 0x8E7D, /* 0x40 */
+ 0x8E7E, 0x8E80, 0x8E82, 0x8E83, 0x8E84, 0x8E86, 0x8E88, 0x8E89, /* 0x40 */
+ 0x8E8A, 0x8E8B, 0x8E8C, 0x8E8D, 0x8E8E, 0x8E91, 0x8E92, 0x8E93, /* 0x50 */
+ 0x8E95, 0x8E96, 0x8E97, 0x8E98, 0x8E99, 0x8E9A, 0x8E9B, 0x8E9D, /* 0x50 */
+ 0x8E9F, 0x8EA0, 0x8EA1, 0x8EA2, 0x8EA3, 0x8EA4, 0x8EA5, 0x8EA6, /* 0x60 */
+ 0x8EA7, 0x8EA8, 0x8EA9, 0x8EAA, 0x8EAD, 0x8EAE, 0x8EB0, 0x8EB1, /* 0x60 */
+ 0x8EB3, 0x8EB4, 0x8EB5, 0x8EB6, 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBB, /* 0x70 */
+ 0x8EBC, 0x8EBD, 0x8EBE, 0x8EBF, 0x8EC0, 0x8EC1, 0x8EC2, 0, /* 0x70 */
+ 0x8EC3, 0x8EC4, 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, 0x8EC9, 0x8ECA, /* 0x80 */
+ 0x8ECB, 0x8ECC, 0x8ECD, 0x8ECF, 0x8ED0, 0x8ED1, 0x8ED2, 0x8ED3, /* 0x80 */
+ 0x8ED4, 0x8ED5, 0x8ED6, 0x8ED7, 0x8ED8, 0x8ED9, 0x8EDA, 0x8EDB, /* 0x90 */
+ 0x8EDC, 0x8EDD, 0x8EDE, 0x8EDF, 0x8EE0, 0x8EE1, 0x8EE2, 0x8EE3, /* 0x90 */
+ 0x8EE4, 0x580B, 0x580D, 0x57FD, 0x57ED, 0x5800, 0x581E, 0x5819, /* 0xA0 */
+ 0x5844, 0x5820, 0x5865, 0x586C, 0x5881, 0x5889, 0x589A, 0x5880, /* 0xA0 */
+ 0x99A8, 0x9F19, 0x61FF, 0x8279, 0x827D, 0x827F, 0x828F, 0x828A, /* 0xB0 */
+ 0x82A8, 0x8284, 0x828E, 0x8291, 0x8297, 0x8299, 0x82AB, 0x82B8, /* 0xB0 */
+ 0x82BE, 0x82B0, 0x82C8, 0x82CA, 0x82E3, 0x8298, 0x82B7, 0x82AE, /* 0xC0 */
+ 0x82CB, 0x82CC, 0x82C1, 0x82A9, 0x82B4, 0x82A1, 0x82AA, 0x829F, /* 0xC0 */
+ 0x82C4, 0x82CE, 0x82A4, 0x82E1, 0x8309, 0x82F7, 0x82E4, 0x830F, /* 0xD0 */
+ 0x8307, 0x82DC, 0x82F4, 0x82D2, 0x82D8, 0x830C, 0x82FB, 0x82D3, /* 0xD0 */
+ 0x8311, 0x831A, 0x8306, 0x8314, 0x8315, 0x82E0, 0x82D5, 0x831C, /* 0xE0 */
+ 0x8351, 0x835B, 0x835C, 0x8308, 0x8392, 0x833C, 0x8334, 0x8331, /* 0xE0 */
+ 0x839B, 0x835E, 0x832F, 0x834F, 0x8347, 0x8343, 0x835F, 0x8340, /* 0xF0 */
+ 0x8317, 0x8360, 0x832D, 0x833A, 0x8333, 0x8366, 0x8365 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_DD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8EE5, 0x8EE6, 0x8EE7, 0x8EE8, 0x8EE9, 0x8EEA, 0x8EEB, 0x8EEC, /* 0x40 */
+ 0x8EED, 0x8EEE, 0x8EEF, 0x8EF0, 0x8EF1, 0x8EF2, 0x8EF3, 0x8EF4, /* 0x40 */
+ 0x8EF5, 0x8EF6, 0x8EF7, 0x8EF8, 0x8EF9, 0x8EFA, 0x8EFB, 0x8EFC, /* 0x50 */
+ 0x8EFD, 0x8EFE, 0x8EFF, 0x8F00, 0x8F01, 0x8F02, 0x8F03, 0x8F04, /* 0x50 */
+ 0x8F05, 0x8F06, 0x8F07, 0x8F08, 0x8F09, 0x8F0A, 0x8F0B, 0x8F0C, /* 0x60 */
+ 0x8F0D, 0x8F0E, 0x8F0F, 0x8F10, 0x8F11, 0x8F12, 0x8F13, 0x8F14, /* 0x60 */
+ 0x8F15, 0x8F16, 0x8F17, 0x8F18, 0x8F19, 0x8F1A, 0x8F1B, 0x8F1C, /* 0x70 */
+ 0x8F1D, 0x8F1E, 0x8F1F, 0x8F20, 0x8F21, 0x8F22, 0x8F23, 0, /* 0x70 */
+ 0x8F24, 0x8F25, 0x8F26, 0x8F27, 0x8F28, 0x8F29, 0x8F2A, 0x8F2B, /* 0x80 */
+ 0x8F2C, 0x8F2D, 0x8F2E, 0x8F2F, 0x8F30, 0x8F31, 0x8F32, 0x8F33, /* 0x80 */
+ 0x8F34, 0x8F35, 0x8F36, 0x8F37, 0x8F38, 0x8F39, 0x8F3A, 0x8F3B, /* 0x90 */
+ 0x8F3C, 0x8F3D, 0x8F3E, 0x8F3F, 0x8F40, 0x8F41, 0x8F42, 0x8F43, /* 0x90 */
+ 0x8F44, 0x8368, 0x831B, 0x8369, 0x836C, 0x836A, 0x836D, 0x836E, /* 0xA0 */
+ 0x83B0, 0x8378, 0x83B3, 0x83B4, 0x83A0, 0x83AA, 0x8393, 0x839C, /* 0xA0 */
+ 0x8385, 0x837C, 0x83B6, 0x83A9, 0x837D, 0x83B8, 0x837B, 0x8398, /* 0xB0 */
+ 0x839E, 0x83A8, 0x83BA, 0x83BC, 0x83C1, 0x8401, 0x83E5, 0x83D8, /* 0xB0 */
+ 0x5807, 0x8418, 0x840B, 0x83DD, 0x83FD, 0x83D6, 0x841C, 0x8438, /* 0xC0 */
+ 0x8411, 0x8406, 0x83D4, 0x83DF, 0x840F, 0x8403, 0x83F8, 0x83F9, /* 0xC0 */
+ 0x83EA, 0x83C5, 0x83C0, 0x8426, 0x83F0, 0x83E1, 0x845C, 0x8451, /* 0xD0 */
+ 0x845A, 0x8459, 0x8473, 0x8487, 0x8488, 0x847A, 0x8489, 0x8478, /* 0xD0 */
+ 0x843C, 0x8446, 0x8469, 0x8476, 0x848C, 0x848E, 0x8431, 0x846D, /* 0xE0 */
+ 0x84C1, 0x84CD, 0x84D0, 0x84E6, 0x84BD, 0x84D3, 0x84CA, 0x84BF, /* 0xE0 */
+ 0x84BA, 0x84E0, 0x84A1, 0x84B9, 0x84B4, 0x8497, 0x84E5, 0x84E3, /* 0xF0 */
+ 0x850C, 0x750D, 0x8538, 0x84F0, 0x8539, 0x851F, 0x853A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_DE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8F45, 0x8F46, 0x8F47, 0x8F48, 0x8F49, 0x8F4A, 0x8F4B, 0x8F4C, /* 0x40 */
+ 0x8F4D, 0x8F4E, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, 0x8F53, 0x8F54, /* 0x40 */
+ 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, 0x8F5B, 0x8F5C, /* 0x50 */
+ 0x8F5D, 0x8F5E, 0x8F5F, 0x8F60, 0x8F61, 0x8F62, 0x8F63, 0x8F64, /* 0x50 */
+ 0x8F65, 0x8F6A, 0x8F80, 0x8F8C, 0x8F92, 0x8F9D, 0x8FA0, 0x8FA1, /* 0x60 */
+ 0x8FA2, 0x8FA4, 0x8FA5, 0x8FA6, 0x8FA7, 0x8FAA, 0x8FAC, 0x8FAD, /* 0x60 */
+ 0x8FAE, 0x8FAF, 0x8FB2, 0x8FB3, 0x8FB4, 0x8FB5, 0x8FB7, 0x8FB8, /* 0x70 */
+ 0x8FBA, 0x8FBB, 0x8FBC, 0x8FBF, 0x8FC0, 0x8FC3, 0x8FC6, 0, /* 0x70 */
+ 0x8FC9, 0x8FCA, 0x8FCB, 0x8FCC, 0x8FCD, 0x8FCF, 0x8FD2, 0x8FD6, /* 0x80 */
+ 0x8FD7, 0x8FDA, 0x8FE0, 0x8FE1, 0x8FE3, 0x8FE7, 0x8FEC, 0x8FEF, /* 0x80 */
+ 0x8FF1, 0x8FF2, 0x8FF4, 0x8FF5, 0x8FF6, 0x8FFA, 0x8FFB, 0x8FFC, /* 0x90 */
+ 0x8FFE, 0x8FFF, 0x9007, 0x9008, 0x900C, 0x900E, 0x9013, 0x9015, /* 0x90 */
+ 0x9018, 0x8556, 0x853B, 0x84FF, 0x84FC, 0x8559, 0x8548, 0x8568, /* 0xA0 */
+ 0x8564, 0x855E, 0x857A, 0x77A2, 0x8543, 0x8572, 0x857B, 0x85A4, /* 0xA0 */
+ 0x85A8, 0x8587, 0x858F, 0x8579, 0x85AE, 0x859C, 0x8585, 0x85B9, /* 0xB0 */
+ 0x85B7, 0x85B0, 0x85D3, 0x85C1, 0x85DC, 0x85FF, 0x8627, 0x8605, /* 0xB0 */
+ 0x8629, 0x8616, 0x863C, 0x5EFE, 0x5F08, 0x593C, 0x5941, 0x8037, /* 0xC0 */
+ 0x5955, 0x595A, 0x5958, 0x530F, 0x5C22, 0x5C25, 0x5C2C, 0x5C34, /* 0xC0 */
+ 0x624C, 0x626A, 0x629F, 0x62BB, 0x62CA, 0x62DA, 0x62D7, 0x62EE, /* 0xD0 */
+ 0x6322, 0x62F6, 0x6339, 0x634B, 0x6343, 0x63AD, 0x63F6, 0x6371, /* 0xD0 */
+ 0x637A, 0x638E, 0x63B4, 0x636D, 0x63AC, 0x638A, 0x6369, 0x63AE, /* 0xE0 */
+ 0x63BC, 0x63F2, 0x63F8, 0x63E0, 0x63FF, 0x63C4, 0x63DE, 0x63CE, /* 0xE0 */
+ 0x6452, 0x63C6, 0x63BE, 0x6445, 0x6441, 0x640B, 0x641B, 0x6420, /* 0xF0 */
+ 0x640C, 0x6426, 0x6421, 0x645E, 0x6484, 0x646D, 0x6496 /* 0xF0 */
+};
+sal_uInt16 const aImplDBCSToUniTab_GBK_DF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9019, 0x901C, 0x9023, 0x9024, 0x9025, 0x9027, 0x9028, 0x9029, /* 0x40 */
+ 0x902A, 0x902B, 0x902C, 0x9030, 0x9031, 0x9032, 0x9033, 0x9034, /* 0x40 */
+ 0x9037, 0x9039, 0x903A, 0x903D, 0x903F, 0x9040, 0x9043, 0x9045, /* 0x50 */
+ 0x9046, 0x9048, 0x9049, 0x904A, 0x904B, 0x904C, 0x904E, 0x9054, /* 0x50 */
+ 0x9055, 0x9056, 0x9059, 0x905A, 0x905C, 0x905D, 0x905E, 0x905F, /* 0x60 */
+ 0x9060, 0x9061, 0x9064, 0x9066, 0x9067, 0x9069, 0x906A, 0x906B, /* 0x60 */
+ 0x906C, 0x906F, 0x9070, 0x9071, 0x9072, 0x9073, 0x9076, 0x9077, /* 0x70 */
+ 0x9078, 0x9079, 0x907A, 0x907B, 0x907C, 0x907E, 0x9081, 0, /* 0x70 */
+ 0x9084, 0x9085, 0x9086, 0x9087, 0x9089, 0x908A, 0x908C, 0x908D, /* 0x80 */
+ 0x908E, 0x908F, 0x9090, 0x9092, 0x9094, 0x9096, 0x9098, 0x909A, /* 0x80 */
+ 0x909C, 0x909E, 0x909F, 0x90A0, 0x90A4, 0x90A5, 0x90A7, 0x90A8, /* 0x90 */
+ 0x90A9, 0x90AB, 0x90AD, 0x90B2, 0x90B7, 0x90BC, 0x90BD, 0x90BF, /* 0x90 */
+ 0x90C0, 0x647A, 0x64B7, 0x64B8, 0x6499, 0x64BA, 0x64C0, 0x64D0, /* 0xA0 */
+ 0x64D7, 0x64E4, 0x64E2, 0x6509, 0x6525, 0x652E, 0x5F0B, 0x5FD2, /* 0xA0 */
+ 0x7519, 0x5F11, 0x535F, 0x53F1, 0x53FD, 0x53E9, 0x53E8, 0x53FB, /* 0xB0 */
+ 0x5412, 0x5416, 0x5406, 0x544B, 0x5452, 0x5453, 0x5454, 0x5456, /* 0xB0 */
+ 0x5443, 0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, /* 0xC0 */
+ 0x5477, 0x5471, 0x5464, 0x549A, 0x549B, 0x5484, 0x5476, 0x5466, /* 0xC0 */
+ 0x549D, 0x54D0, 0x54AD, 0x54C2, 0x54B4, 0x54D2, 0x54A7, 0x54A6, /* 0xD0 */
+ 0x54D3, 0x54D4, 0x5472, 0x54A3, 0x54D5, 0x54BB, 0x54BF, 0x54CC, /* 0xD0 */
+ 0x54D9, 0x54DA, 0x54DC, 0x54A9, 0x54AA, 0x54A4, 0x54DD, 0x54CF, /* 0xE0 */
+ 0x54DE, 0x551B, 0x54E7, 0x5520, 0x54FD, 0x5514, 0x54F3, 0x5522, /* 0xE0 */
+ 0x5523, 0x550F, 0x5511, 0x5527, 0x552A, 0x5567, 0x558F, 0x55B5, /* 0xF0 */
+ 0x5549, 0x556D, 0x5541, 0x5555, 0x553F, 0x5550, 0x553C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x90C2, 0x90C3, 0x90C6, 0x90C8, 0x90C9, 0x90CB, 0x90CC, 0x90CD, /* 0x40 */
+ 0x90D2, 0x90D4, 0x90D5, 0x90D6, 0x90D8, 0x90D9, 0x90DA, 0x90DE, /* 0x40 */
+ 0x90DF, 0x90E0, 0x90E3, 0x90E4, 0x90E5, 0x90E9, 0x90EA, 0x90EC, /* 0x50 */
+ 0x90EE, 0x90F0, 0x90F1, 0x90F2, 0x90F3, 0x90F5, 0x90F6, 0x90F7, /* 0x50 */
+ 0x90F9, 0x90FA, 0x90FB, 0x90FC, 0x90FF, 0x9100, 0x9101, 0x9103, /* 0x60 */
+ 0x9105, 0x9106, 0x9107, 0x9108, 0x9109, 0x910A, 0x910B, 0x910C, /* 0x60 */
+ 0x910D, 0x910E, 0x910F, 0x9110, 0x9111, 0x9112, 0x9113, 0x9114, /* 0x70 */
+ 0x9115, 0x9116, 0x9117, 0x9118, 0x911A, 0x911B, 0x911C, 0, /* 0x70 */
+ 0x911D, 0x911F, 0x9120, 0x9121, 0x9124, 0x9125, 0x9126, 0x9127, /* 0x80 */
+ 0x9128, 0x9129, 0x912A, 0x912B, 0x912C, 0x912D, 0x912E, 0x9130, /* 0x80 */
+ 0x9132, 0x9133, 0x9134, 0x9135, 0x9136, 0x9137, 0x9138, 0x913A, /* 0x90 */
+ 0x913B, 0x913C, 0x913D, 0x913E, 0x913F, 0x9140, 0x9141, 0x9142, /* 0x90 */
+ 0x9144, 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, /* 0xA0 */
+ 0x555C, 0x558B, 0x55D2, 0x5583, 0x55B1, 0x55B9, 0x5588, 0x5581, /* 0xA0 */
+ 0x559F, 0x557E, 0x55D6, 0x5591, 0x557B, 0x55DF, 0x55BD, 0x55BE, /* 0xB0 */
+ 0x5594, 0x5599, 0x55EA, 0x55F7, 0x55C9, 0x561F, 0x55D1, 0x55EB, /* 0xB0 */
+ 0x55EC, 0x55D4, 0x55E6, 0x55DD, 0x55C4, 0x55EF, 0x55E5, 0x55F2, /* 0xC0 */
+ 0x55F3, 0x55CC, 0x55CD, 0x55E8, 0x55F5, 0x55E4, 0x8F94, 0x561E, /* 0xC0 */
+ 0x5608, 0x560C, 0x5601, 0x5624, 0x5623, 0x55FE, 0x5600, 0x5627, /* 0xD0 */
+ 0x562D, 0x5658, 0x5639, 0x5657, 0x562C, 0x564D, 0x5662, 0x5659, /* 0xD0 */
+ 0x565C, 0x564C, 0x5654, 0x5686, 0x5664, 0x5671, 0x566B, 0x567B, /* 0xE0 */
+ 0x567C, 0x5685, 0x5693, 0x56AF, 0x56D4, 0x56D7, 0x56DD, 0x56E1, /* 0xE0 */
+ 0x56F5, 0x56EB, 0x56F9, 0x56FF, 0x5704, 0x570A, 0x5709, 0x571C, /* 0xF0 */
+ 0x5E0F, 0x5E19, 0x5E14, 0x5E11, 0x5E31, 0x5E3B, 0x5E3C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9145, 0x9147, 0x9148, 0x9151, 0x9153, 0x9154, 0x9155, 0x9156, /* 0x40 */
+ 0x9158, 0x9159, 0x915B, 0x915C, 0x915F, 0x9160, 0x9166, 0x9167, /* 0x40 */
+ 0x9168, 0x916B, 0x916D, 0x9173, 0x917A, 0x917B, 0x917C, 0x9180, /* 0x50 */
+ 0x9181, 0x9182, 0x9183, 0x9184, 0x9186, 0x9188, 0x918A, 0x918E, /* 0x50 */
+ 0x918F, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, /* 0x60 */
+ 0x919C, 0x919D, 0x919E, 0x919F, 0x91A0, 0x91A1, 0x91A4, 0x91A5, /* 0x60 */
+ 0x91A6, 0x91A7, 0x91A8, 0x91A9, 0x91AB, 0x91AC, 0x91B0, 0x91B1, /* 0x70 */
+ 0x91B2, 0x91B3, 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BB, 0, /* 0x70 */
+ 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C0, 0x91C1, 0x91C2, 0x91C3, /* 0x80 */
+ 0x91C4, 0x91C5, 0x91C6, 0x91C8, 0x91CB, 0x91D0, 0x91D2, 0x91D3, /* 0x80 */
+ 0x91D4, 0x91D5, 0x91D6, 0x91D7, 0x91D8, 0x91D9, 0x91DA, 0x91DB, /* 0x90 */
+ 0x91DD, 0x91DE, 0x91DF, 0x91E0, 0x91E1, 0x91E2, 0x91E3, 0x91E4, /* 0x90 */
+ 0x91E5, 0x5E37, 0x5E44, 0x5E54, 0x5E5B, 0x5E5E, 0x5E61, 0x5C8C, /* 0xA0 */
+ 0x5C7A, 0x5C8D, 0x5C90, 0x5C96, 0x5C88, 0x5C98, 0x5C99, 0x5C91, /* 0xA0 */
+ 0x5C9A, 0x5C9C, 0x5CB5, 0x5CA2, 0x5CBD, 0x5CAC, 0x5CAB, 0x5CB1, /* 0xB0 */
+ 0x5CA3, 0x5CC1, 0x5CB7, 0x5CC4, 0x5CD2, 0x5CE4, 0x5CCB, 0x5CE5, /* 0xB0 */
+ 0x5D02, 0x5D03, 0x5D27, 0x5D26, 0x5D2E, 0x5D24, 0x5D1E, 0x5D06, /* 0xC0 */
+ 0x5D1B, 0x5D58, 0x5D3E, 0x5D34, 0x5D3D, 0x5D6C, 0x5D5B, 0x5D6F, /* 0xC0 */
+ 0x5D5D, 0x5D6B, 0x5D4B, 0x5D4A, 0x5D69, 0x5D74, 0x5D82, 0x5D99, /* 0xD0 */
+ 0x5D9D, 0x8C73, 0x5DB7, 0x5DC5, 0x5F73, 0x5F77, 0x5F82, 0x5F87, /* 0xD0 */
+ 0x5F89, 0x5F8C, 0x5F95, 0x5F99, 0x5F9C, 0x5FA8, 0x5FAD, 0x5FB5, /* 0xE0 */
+ 0x5FBC, 0x8862, 0x5F61, 0x72AD, 0x72B0, 0x72B4, 0x72B7, 0x72B8, /* 0xE0 */
+ 0x72C3, 0x72C1, 0x72CE, 0x72CD, 0x72D2, 0x72E8, 0x72EF, 0x72E9, /* 0xF0 */
+ 0x72F2, 0x72F4, 0x72F7, 0x7301, 0x72F3, 0x7303, 0x72FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x91E6, 0x91E7, 0x91E8, 0x91E9, 0x91EA, 0x91EB, 0x91EC, 0x91ED, /* 0x40 */
+ 0x91EE, 0x91EF, 0x91F0, 0x91F1, 0x91F2, 0x91F3, 0x91F4, 0x91F5, /* 0x40 */
+ 0x91F6, 0x91F7, 0x91F8, 0x91F9, 0x91FA, 0x91FB, 0x91FC, 0x91FD, /* 0x50 */
+ 0x91FE, 0x91FF, 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205, /* 0x50 */
+ 0x9206, 0x9207, 0x9208, 0x9209, 0x920A, 0x920B, 0x920C, 0x920D, /* 0x60 */
+ 0x920E, 0x920F, 0x9210, 0x9211, 0x9212, 0x9213, 0x9214, 0x9215, /* 0x60 */
+ 0x9216, 0x9217, 0x9218, 0x9219, 0x921A, 0x921B, 0x921C, 0x921D, /* 0x70 */
+ 0x921E, 0x921F, 0x9220, 0x9221, 0x9222, 0x9223, 0x9224, 0, /* 0x70 */
+ 0x9225, 0x9226, 0x9227, 0x9228, 0x9229, 0x922A, 0x922B, 0x922C, /* 0x80 */
+ 0x922D, 0x922E, 0x922F, 0x9230, 0x9231, 0x9232, 0x9233, 0x9234, /* 0x80 */
+ 0x9235, 0x9236, 0x9237, 0x9238, 0x9239, 0x923A, 0x923B, 0x923C, /* 0x90 */
+ 0x923D, 0x923E, 0x923F, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, /* 0x90 */
+ 0x9245, 0x72FB, 0x7317, 0x7313, 0x7321, 0x730A, 0x731E, 0x731D, /* 0xA0 */
+ 0x7315, 0x7322, 0x7339, 0x7325, 0x732C, 0x7338, 0x7331, 0x7350, /* 0xA0 */
+ 0x734D, 0x7357, 0x7360, 0x736C, 0x736F, 0x737E, 0x821B, 0x5925, /* 0xB0 */
+ 0x98E7, 0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996A, /* 0xB0 */
+ 0x996B, 0x996C, 0x9974, 0x9977, 0x997D, 0x9980, 0x9984, 0x9987, /* 0xC0 */
+ 0x998A, 0x998D, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5E80, /* 0xC0 */
+ 0x5E91, 0x5E8B, 0x5E96, 0x5EA5, 0x5EA0, 0x5EB9, 0x5EB5, 0x5EBE, /* 0xD0 */
+ 0x5EB3, 0x8D53, 0x5ED2, 0x5ED1, 0x5EDB, 0x5EE8, 0x5EEA, 0x81BA, /* 0xD0 */
+ 0x5FC4, 0x5FC9, 0x5FD6, 0x5FCF, 0x6003, 0x5FEE, 0x6004, 0x5FE1, /* 0xE0 */
+ 0x5FE4, 0x5FFE, 0x6005, 0x6006, 0x5FEA, 0x5FED, 0x5FF8, 0x6019, /* 0xE0 */
+ 0x6035, 0x6026, 0x601B, 0x600F, 0x600D, 0x6029, 0x602B, 0x600A, /* 0xF0 */
+ 0x603F, 0x6021, 0x6078, 0x6079, 0x607B, 0x607A, 0x6042 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9246, 0x9247, 0x9248, 0x9249, 0x924A, 0x924B, 0x924C, 0x924D, /* 0x40 */
+ 0x924E, 0x924F, 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255, /* 0x40 */
+ 0x9256, 0x9257, 0x9258, 0x9259, 0x925A, 0x925B, 0x925C, 0x925D, /* 0x50 */
+ 0x925E, 0x925F, 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, /* 0x50 */
+ 0x9266, 0x9267, 0x9268, 0x9269, 0x926A, 0x926B, 0x926C, 0x926D, /* 0x60 */
+ 0x926E, 0x926F, 0x9270, 0x9271, 0x9272, 0x9273, 0x9275, 0x9276, /* 0x60 */
+ 0x9277, 0x9278, 0x9279, 0x927A, 0x927B, 0x927C, 0x927D, 0x927E, /* 0x70 */
+ 0x927F, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0, /* 0x70 */
+ 0x9286, 0x9287, 0x9288, 0x9289, 0x928A, 0x928B, 0x928C, 0x928D, /* 0x80 */
+ 0x928F, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, /* 0x80 */
+ 0x9297, 0x9298, 0x9299, 0x929A, 0x929B, 0x929C, 0x929D, 0x929E, /* 0x90 */
+ 0x929F, 0x92A0, 0x92A1, 0x92A2, 0x92A3, 0x92A4, 0x92A5, 0x92A6, /* 0x90 */
+ 0x92A7, 0x606A, 0x607D, 0x6096, 0x609A, 0x60AD, 0x609D, 0x6083, /* 0xA0 */
+ 0x6092, 0x608C, 0x609B, 0x60EC, 0x60BB, 0x60B1, 0x60DD, 0x60D8, /* 0xA0 */
+ 0x60C6, 0x60DA, 0x60B4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60F4, /* 0xB0 */
+ 0x6100, 0x610E, 0x612B, 0x614A, 0x6175, 0x61AC, 0x6194, 0x61A7, /* 0xB0 */
+ 0x61B7, 0x61D4, 0x61F5, 0x5FDD, 0x96B3, 0x95E9, 0x95EB, 0x95F1, /* 0xC0 */
+ 0x95F3, 0x95F5, 0x95F6, 0x95FC, 0x95FE, 0x9603, 0x9604, 0x9606, /* 0xC0 */
+ 0x9608, 0x960A, 0x960B, 0x960C, 0x960D, 0x960F, 0x9612, 0x9615, /* 0xD0 */
+ 0x9616, 0x9617, 0x9619, 0x961A, 0x4E2C, 0x723F, 0x6215, 0x6C35, /* 0xD0 */
+ 0x6C54, 0x6C5C, 0x6C4A, 0x6CA3, 0x6C85, 0x6C90, 0x6C94, 0x6C8C, /* 0xE0 */
+ 0x6C68, 0x6C69, 0x6C74, 0x6C76, 0x6C86, 0x6CA9, 0x6CD0, 0x6CD4, /* 0xE0 */
+ 0x6CAD, 0x6CF7, 0x6CF8, 0x6CF1, 0x6CD7, 0x6CB2, 0x6CE0, 0x6CD6, /* 0xF0 */
+ 0x6CFA, 0x6CEB, 0x6CEE, 0x6CB1, 0x6CD3, 0x6CEF, 0x6CFE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x92A8, 0x92A9, 0x92AA, 0x92AB, 0x92AC, 0x92AD, 0x92AF, 0x92B0, /* 0x40 */
+ 0x92B1, 0x92B2, 0x92B3, 0x92B4, 0x92B5, 0x92B6, 0x92B7, 0x92B8, /* 0x40 */
+ 0x92B9, 0x92BA, 0x92BB, 0x92BC, 0x92BD, 0x92BE, 0x92BF, 0x92C0, /* 0x50 */
+ 0x92C1, 0x92C2, 0x92C3, 0x92C4, 0x92C5, 0x92C6, 0x92C7, 0x92C9, /* 0x50 */
+ 0x92CA, 0x92CB, 0x92CC, 0x92CD, 0x92CE, 0x92CF, 0x92D0, 0x92D1, /* 0x60 */
+ 0x92D2, 0x92D3, 0x92D4, 0x92D5, 0x92D6, 0x92D7, 0x92D8, 0x92D9, /* 0x60 */
+ 0x92DA, 0x92DB, 0x92DC, 0x92DD, 0x92DE, 0x92DF, 0x92E0, 0x92E1, /* 0x70 */
+ 0x92E2, 0x92E3, 0x92E4, 0x92E5, 0x92E6, 0x92E7, 0x92E8, 0, /* 0x70 */
+ 0x92E9, 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, /* 0x80 */
+ 0x92F1, 0x92F2, 0x92F3, 0x92F4, 0x92F5, 0x92F6, 0x92F7, 0x92F8, /* 0x80 */
+ 0x92F9, 0x92FA, 0x92FB, 0x92FC, 0x92FD, 0x92FE, 0x92FF, 0x9300, /* 0x90 */
+ 0x9301, 0x9302, 0x9303, 0x9304, 0x9305, 0x9306, 0x9307, 0x9308, /* 0x90 */
+ 0x9309, 0x6D39, 0x6D27, 0x6D0C, 0x6D43, 0x6D48, 0x6D07, 0x6D04, /* 0xA0 */
+ 0x6D19, 0x6D0E, 0x6D2B, 0x6D4D, 0x6D2E, 0x6D35, 0x6D1A, 0x6D4F, /* 0xA0 */
+ 0x6D52, 0x6D54, 0x6D33, 0x6D91, 0x6D6F, 0x6D9E, 0x6DA0, 0x6D5E, /* 0xB0 */
+ 0x6D93, 0x6D94, 0x6D5C, 0x6D60, 0x6D7C, 0x6D63, 0x6E1A, 0x6DC7, /* 0xB0 */
+ 0x6DC5, 0x6DDE, 0x6E0E, 0x6DBF, 0x6DE0, 0x6E11, 0x6DE6, 0x6DDD, /* 0xC0 */
+ 0x6DD9, 0x6E16, 0x6DAB, 0x6E0C, 0x6DAE, 0x6E2B, 0x6E6E, 0x6E4E, /* 0xC0 */
+ 0x6E6B, 0x6EB2, 0x6E5F, 0x6E86, 0x6E53, 0x6E54, 0x6E32, 0x6E25, /* 0xD0 */
+ 0x6E44, 0x6EDF, 0x6EB1, 0x6E98, 0x6EE0, 0x6F2D, 0x6EE2, 0x6EA5, /* 0xD0 */
+ 0x6EA7, 0x6EBD, 0x6EBB, 0x6EB7, 0x6ED7, 0x6EB4, 0x6ECF, 0x6E8F, /* 0xE0 */
+ 0x6EC2, 0x6E9F, 0x6F62, 0x6F46, 0x6F47, 0x6F24, 0x6F15, 0x6EF9, /* 0xE0 */
+ 0x6F2F, 0x6F36, 0x6F4B, 0x6F74, 0x6F2A, 0x6F09, 0x6F29, 0x6F89, /* 0xF0 */
+ 0x6F8D, 0x6F8C, 0x6F78, 0x6F72, 0x6F7C, 0x6F7A, 0x6FD1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x930A, 0x930B, 0x930C, 0x930D, 0x930E, 0x930F, 0x9310, 0x9311, /* 0x40 */
+ 0x9312, 0x9313, 0x9314, 0x9315, 0x9316, 0x9317, 0x9318, 0x9319, /* 0x40 */
+ 0x931A, 0x931B, 0x931C, 0x931D, 0x931E, 0x931F, 0x9320, 0x9321, /* 0x50 */
+ 0x9322, 0x9323, 0x9324, 0x9325, 0x9326, 0x9327, 0x9328, 0x9329, /* 0x50 */
+ 0x932A, 0x932B, 0x932C, 0x932D, 0x932E, 0x932F, 0x9330, 0x9331, /* 0x60 */
+ 0x9332, 0x9333, 0x9334, 0x9335, 0x9336, 0x9337, 0x9338, 0x9339, /* 0x60 */
+ 0x933A, 0x933B, 0x933C, 0x933D, 0x933F, 0x9340, 0x9341, 0x9342, /* 0x70 */
+ 0x9343, 0x9344, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0, /* 0x70 */
+ 0x934A, 0x934B, 0x934C, 0x934D, 0x934E, 0x934F, 0x9350, 0x9351, /* 0x80 */
+ 0x9352, 0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, /* 0x80 */
+ 0x935A, 0x935B, 0x935C, 0x935D, 0x935E, 0x935F, 0x9360, 0x9361, /* 0x90 */
+ 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, /* 0x90 */
+ 0x936B, 0x6FC9, 0x6FA7, 0x6FB9, 0x6FB6, 0x6FC2, 0x6FE1, 0x6FEE, /* 0xA0 */
+ 0x6FDE, 0x6FE0, 0x6FEF, 0x701A, 0x7023, 0x701B, 0x7039, 0x7035, /* 0xA0 */
+ 0x704F, 0x705E, 0x5B80, 0x5B84, 0x5B95, 0x5B93, 0x5BA5, 0x5BB8, /* 0xB0 */
+ 0x752F, 0x9A9E, 0x6434, 0x5BE4, 0x5BEE, 0x8930, 0x5BF0, 0x8E47, /* 0xB0 */
+ 0x8B07, 0x8FB6, 0x8FD3, 0x8FD5, 0x8FE5, 0x8FEE, 0x8FE4, 0x8FE9, /* 0xC0 */
+ 0x8FE6, 0x8FF3, 0x8FE8, 0x9005, 0x9004, 0x900B, 0x9026, 0x9011, /* 0xC0 */
+ 0x900D, 0x9016, 0x9021, 0x9035, 0x9036, 0x902D, 0x902F, 0x9044, /* 0xD0 */
+ 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905B, 0x66B9, /* 0xD0 */
+ 0x9074, 0x907D, 0x9082, 0x9088, 0x9083, 0x908B, 0x5F50, 0x5F57, /* 0xE0 */
+ 0x5F56, 0x5F58, 0x5C3B, 0x54AB, 0x5C50, 0x5C59, 0x5B71, 0x5C63, /* 0xE0 */
+ 0x5C66, 0x7FBC, 0x5F2A, 0x5F29, 0x5F2D, 0x8274, 0x5F3C, 0x9B3B, /* 0xF0 */
+ 0x5C6E, 0x5981, 0x5983, 0x598D, 0x59A9, 0x59AA, 0x59A3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x936C, 0x936D, 0x936E, 0x936F, 0x9370, 0x9371, 0x9372, 0x9373, /* 0x40 */
+ 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0x937A, 0x937B, /* 0x40 */
+ 0x937C, 0x937D, 0x937E, 0x937F, 0x9380, 0x9381, 0x9382, 0x9383, /* 0x50 */
+ 0x9384, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938A, 0x938B, /* 0x50 */
+ 0x938C, 0x938D, 0x938E, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, /* 0x60 */
+ 0x9395, 0x9396, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, 0x939C, /* 0x60 */
+ 0x939D, 0x939E, 0x939F, 0x93A0, 0x93A1, 0x93A2, 0x93A3, 0x93A4, /* 0x70 */
+ 0x93A5, 0x93A6, 0x93A7, 0x93A8, 0x93A9, 0x93AA, 0x93AB, 0, /* 0x70 */
+ 0x93AC, 0x93AD, 0x93AE, 0x93AF, 0x93B0, 0x93B1, 0x93B2, 0x93B3, /* 0x80 */
+ 0x93B4, 0x93B5, 0x93B6, 0x93B7, 0x93B8, 0x93B9, 0x93BA, 0x93BB, /* 0x80 */
+ 0x93BC, 0x93BD, 0x93BE, 0x93BF, 0x93C0, 0x93C1, 0x93C2, 0x93C3, /* 0x90 */
+ 0x93C4, 0x93C5, 0x93C6, 0x93C7, 0x93C8, 0x93C9, 0x93CB, 0x93CC, /* 0x90 */
+ 0x93CD, 0x5997, 0x59CA, 0x59AB, 0x599E, 0x59A4, 0x59D2, 0x59B2, /* 0xA0 */
+ 0x59AF, 0x59D7, 0x59BE, 0x5A05, 0x5A06, 0x59DD, 0x5A08, 0x59E3, /* 0xA0 */
+ 0x59D8, 0x59F9, 0x5A0C, 0x5A09, 0x5A32, 0x5A34, 0x5A11, 0x5A23, /* 0xB0 */
+ 0x5A13, 0x5A40, 0x5A67, 0x5A4A, 0x5A55, 0x5A3C, 0x5A62, 0x5A75, /* 0xB0 */
+ 0x80EC, 0x5AAA, 0x5A9B, 0x5A77, 0x5A7A, 0x5ABE, 0x5AEB, 0x5AB2, /* 0xC0 */
+ 0x5AD2, 0x5AD4, 0x5AB8, 0x5AE0, 0x5AE3, 0x5AF1, 0x5AD6, 0x5AE6, /* 0xC0 */
+ 0x5AD8, 0x5ADC, 0x5B09, 0x5B17, 0x5B16, 0x5B32, 0x5B37, 0x5B40, /* 0xD0 */
+ 0x5C15, 0x5C1C, 0x5B5A, 0x5B65, 0x5B73, 0x5B51, 0x5B53, 0x5B62, /* 0xD0 */
+ 0x9A75, 0x9A77, 0x9A78, 0x9A7A, 0x9A7F, 0x9A7D, 0x9A80, 0x9A81, /* 0xE0 */
+ 0x9A85, 0x9A88, 0x9A8A, 0x9A90, 0x9A92, 0x9A93, 0x9A96, 0x9A98, /* 0xE0 */
+ 0x9A9B, 0x9A9C, 0x9A9D, 0x9A9F, 0x9AA0, 0x9AA2, 0x9AA3, 0x9AA5, /* 0xF0 */
+ 0x9AA7, 0x7E9F, 0x7EA1, 0x7EA3, 0x7EA5, 0x7EA8, 0x7EA9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x93CE, 0x93CF, 0x93D0, 0x93D1, 0x93D2, 0x93D3, 0x93D4, 0x93D5, /* 0x40 */
+ 0x93D7, 0x93D8, 0x93D9, 0x93DA, 0x93DB, 0x93DC, 0x93DD, 0x93DE, /* 0x40 */
+ 0x93DF, 0x93E0, 0x93E1, 0x93E2, 0x93E3, 0x93E4, 0x93E5, 0x93E6, /* 0x50 */
+ 0x93E7, 0x93E8, 0x93E9, 0x93EA, 0x93EB, 0x93EC, 0x93ED, 0x93EE, /* 0x50 */
+ 0x93EF, 0x93F0, 0x93F1, 0x93F2, 0x93F3, 0x93F4, 0x93F5, 0x93F6, /* 0x60 */
+ 0x93F7, 0x93F8, 0x93F9, 0x93FA, 0x93FB, 0x93FC, 0x93FD, 0x93FE, /* 0x60 */
+ 0x93FF, 0x9400, 0x9401, 0x9402, 0x9403, 0x9404, 0x9405, 0x9406, /* 0x70 */
+ 0x9407, 0x9408, 0x9409, 0x940A, 0x940B, 0x940C, 0x940D, 0, /* 0x70 */
+ 0x940E, 0x940F, 0x9410, 0x9411, 0x9412, 0x9413, 0x9414, 0x9415, /* 0x80 */
+ 0x9416, 0x9417, 0x9418, 0x9419, 0x941A, 0x941B, 0x941C, 0x941D, /* 0x80 */
+ 0x941E, 0x941F, 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, /* 0x90 */
+ 0x9426, 0x9427, 0x9428, 0x9429, 0x942A, 0x942B, 0x942C, 0x942D, /* 0x90 */
+ 0x942E, 0x7EAD, 0x7EB0, 0x7EBE, 0x7EC0, 0x7EC1, 0x7EC2, 0x7EC9, /* 0xA0 */
+ 0x7ECB, 0x7ECC, 0x7ED0, 0x7ED4, 0x7ED7, 0x7EDB, 0x7EE0, 0x7EE1, /* 0xA0 */
+ 0x7EE8, 0x7EEB, 0x7EEE, 0x7EEF, 0x7EF1, 0x7EF2, 0x7F0D, 0x7EF6, /* 0xB0 */
+ 0x7EFA, 0x7EFB, 0x7EFE, 0x7F01, 0x7F02, 0x7F03, 0x7F07, 0x7F08, /* 0xB0 */
+ 0x7F0B, 0x7F0C, 0x7F0F, 0x7F11, 0x7F12, 0x7F17, 0x7F19, 0x7F1C, /* 0xC0 */
+ 0x7F1B, 0x7F1F, 0x7F21, 0x7F22, 0x7F23, 0x7F24, 0x7F25, 0x7F26, /* 0xC0 */
+ 0x7F27, 0x7F2A, 0x7F2B, 0x7F2C, 0x7F2D, 0x7F2F, 0x7F30, 0x7F31, /* 0xD0 */
+ 0x7F32, 0x7F33, 0x7F35, 0x5E7A, 0x757F, 0x5DDB, 0x753E, 0x9095, /* 0xD0 */
+ 0x738E, 0x7391, 0x73AE, 0x73A2, 0x739F, 0x73CF, 0x73C2, 0x73D1, /* 0xE0 */
+ 0x73B7, 0x73B3, 0x73C0, 0x73C9, 0x73C8, 0x73E5, 0x73D9, 0x987C, /* 0xE0 */
+ 0x740A, 0x73E9, 0x73E7, 0x73DE, 0x73BA, 0x73F2, 0x740F, 0x742A, /* 0xF0 */
+ 0x745B, 0x7426, 0x7425, 0x7428, 0x7430, 0x742E, 0x742C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x942F, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436, /* 0x40 */
+ 0x9437, 0x9438, 0x9439, 0x943A, 0x943B, 0x943C, 0x943D, 0x943F, /* 0x40 */
+ 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447, /* 0x50 */
+ 0x9448, 0x9449, 0x944A, 0x944B, 0x944C, 0x944D, 0x944E, 0x944F, /* 0x50 */
+ 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, /* 0x60 */
+ 0x9458, 0x9459, 0x945A, 0x945B, 0x945C, 0x945D, 0x945E, 0x945F, /* 0x60 */
+ 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, /* 0x70 */
+ 0x9468, 0x9469, 0x946A, 0x946C, 0x946D, 0x946E, 0x946F, 0, /* 0x70 */
+ 0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, /* 0x80 */
+ 0x9478, 0x9479, 0x947A, 0x947B, 0x947C, 0x947D, 0x947E, 0x947F, /* 0x80 */
+ 0x9480, 0x9481, 0x9482, 0x9483, 0x9484, 0x9491, 0x9496, 0x9498, /* 0x90 */
+ 0x94C7, 0x94CF, 0x94D3, 0x94D4, 0x94DA, 0x94E6, 0x94FB, 0x951C, /* 0x90 */
+ 0x9520, 0x741B, 0x741A, 0x7441, 0x745C, 0x7457, 0x7455, 0x7459, /* 0xA0 */
+ 0x7477, 0x746D, 0x747E, 0x749C, 0x748E, 0x7480, 0x7481, 0x7487, /* 0xA0 */
+ 0x748B, 0x749E, 0x74A8, 0x74A9, 0x7490, 0x74A7, 0x74D2, 0x74BA, /* 0xB0 */
+ 0x97EA, 0x97EB, 0x97EC, 0x674C, 0x6753, 0x675E, 0x6748, 0x6769, /* 0xB0 */
+ 0x67A5, 0x6787, 0x676A, 0x6773, 0x6798, 0x67A7, 0x6775, 0x67A8, /* 0xC0 */
+ 0x679E, 0x67AD, 0x678B, 0x6777, 0x677C, 0x67F0, 0x6809, 0x67D8, /* 0xC0 */
+ 0x680A, 0x67E9, 0x67B0, 0x680C, 0x67D9, 0x67B5, 0x67DA, 0x67B3, /* 0xD0 */
+ 0x67DD, 0x6800, 0x67C3, 0x67B8, 0x67E2, 0x680E, 0x67C1, 0x67FD, /* 0xD0 */
+ 0x6832, 0x6833, 0x6860, 0x6861, 0x684E, 0x6862, 0x6844, 0x6864, /* 0xE0 */
+ 0x6883, 0x681D, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683E, /* 0xE0 */
+ 0x684A, 0x6849, 0x6829, 0x68B5, 0x688F, 0x6874, 0x6877, 0x6893, /* 0xF0 */
+ 0x686B, 0x68C2, 0x696E, 0x68FC, 0x691F, 0x6920, 0x68F9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_E9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9527, 0x9533, 0x953D, 0x9543, 0x9548, 0x954B, 0x9555, 0x955A, /* 0x40 */
+ 0x9560, 0x956E, 0x9574, 0x9575, 0x9577, 0x9578, 0x9579, 0x957A, /* 0x40 */
+ 0x957B, 0x957C, 0x957D, 0x957E, 0x9580, 0x9581, 0x9582, 0x9583, /* 0x50 */
+ 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958A, 0x958B, /* 0x50 */
+ 0x958C, 0x958D, 0x958E, 0x958F, 0x9590, 0x9591, 0x9592, 0x9593, /* 0x60 */
+ 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959A, 0x959B, /* 0x60 */
+ 0x959C, 0x959D, 0x959E, 0x959F, 0x95A0, 0x95A1, 0x95A2, 0x95A3, /* 0x70 */
+ 0x95A4, 0x95A5, 0x95A6, 0x95A7, 0x95A8, 0x95A9, 0x95AA, 0, /* 0x70 */
+ 0x95AB, 0x95AC, 0x95AD, 0x95AE, 0x95AF, 0x95B0, 0x95B1, 0x95B2, /* 0x80 */
+ 0x95B3, 0x95B4, 0x95B5, 0x95B6, 0x95B7, 0x95B8, 0x95B9, 0x95BA, /* 0x80 */
+ 0x95BB, 0x95BC, 0x95BD, 0x95BE, 0x95BF, 0x95C0, 0x95C1, 0x95C2, /* 0x90 */
+ 0x95C3, 0x95C4, 0x95C5, 0x95C6, 0x95C7, 0x95C8, 0x95C9, 0x95CA, /* 0x90 */
+ 0x95CB, 0x6924, 0x68F0, 0x690B, 0x6901, 0x6957, 0x68E3, 0x6910, /* 0xA0 */
+ 0x6971, 0x6939, 0x6960, 0x6942, 0x695D, 0x6984, 0x696B, 0x6980, /* 0xA0 */
+ 0x6998, 0x6978, 0x6934, 0x69CC, 0x6987, 0x6988, 0x69CE, 0x6989, /* 0xB0 */
+ 0x6966, 0x6963, 0x6979, 0x699B, 0x69A7, 0x69BB, 0x69AB, 0x69AD, /* 0xB0 */
+ 0x69D4, 0x69B1, 0x69C1, 0x69CA, 0x69DF, 0x6995, 0x69E0, 0x698D, /* 0xC0 */
+ 0x69FF, 0x6A2F, 0x69ED, 0x6A17, 0x6A18, 0x6A65, 0x69F2, 0x6A44, /* 0xC0 */
+ 0x6A3E, 0x6AA0, 0x6A50, 0x6A5B, 0x6A35, 0x6A8E, 0x6A79, 0x6A3D, /* 0xD0 */
+ 0x6A28, 0x6A58, 0x6A7C, 0x6A91, 0x6A90, 0x6AA9, 0x6A97, 0x6AAB, /* 0xD0 */
+ 0x7337, 0x7352, 0x6B81, 0x6B82, 0x6B87, 0x6B84, 0x6B92, 0x6B93, /* 0xE0 */
+ 0x6B8D, 0x6B9A, 0x6B9B, 0x6BA1, 0x6BAA, 0x8F6B, 0x8F6D, 0x8F71, /* 0xE0 */
+ 0x8F72, 0x8F73, 0x8F75, 0x8F76, 0x8F78, 0x8F77, 0x8F79, 0x8F7A, /* 0xF0 */
+ 0x8F7C, 0x8F7E, 0x8F81, 0x8F82, 0x8F84, 0x8F87, 0x8F8B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_EA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x95CC, 0x95CD, 0x95CE, 0x95CF, 0x95D0, 0x95D1, 0x95D2, 0x95D3, /* 0x40 */
+ 0x95D4, 0x95D5, 0x95D6, 0x95D7, 0x95D8, 0x95D9, 0x95DA, 0x95DB, /* 0x40 */
+ 0x95DC, 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E1, 0x95E2, 0x95E3, /* 0x50 */
+ 0x95E4, 0x95E5, 0x95E6, 0x95E7, 0x95EC, 0x95FF, 0x9607, 0x9613, /* 0x50 */
+ 0x9618, 0x961B, 0x961E, 0x9620, 0x9623, 0x9624, 0x9625, 0x9626, /* 0x60 */
+ 0x9627, 0x9628, 0x9629, 0x962B, 0x962C, 0x962D, 0x962F, 0x9630, /* 0x60 */
+ 0x9637, 0x9638, 0x9639, 0x963A, 0x963E, 0x9641, 0x9643, 0x964A, /* 0x70 */
+ 0x964E, 0x964F, 0x9651, 0x9652, 0x9653, 0x9656, 0x9657, 0, /* 0x70 */
+ 0x9658, 0x9659, 0x965A, 0x965C, 0x965D, 0x965E, 0x9660, 0x9663, /* 0x80 */
+ 0x9665, 0x9666, 0x966B, 0x966D, 0x966E, 0x966F, 0x9670, 0x9671, /* 0x80 */
+ 0x9673, 0x9678, 0x9679, 0x967A, 0x967B, 0x967C, 0x967D, 0x967E, /* 0x90 */
+ 0x967F, 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, /* 0x90 */
+ 0x968A, 0x8F8D, 0x8F8E, 0x8F8F, 0x8F98, 0x8F9A, 0x8ECE, 0x620B, /* 0xA0 */
+ 0x6217, 0x621B, 0x621F, 0x6222, 0x6221, 0x6225, 0x6224, 0x622C, /* 0xA0 */
+ 0x81E7, 0x74EF, 0x74F4, 0x74FF, 0x750F, 0x7511, 0x7513, 0x6534, /* 0xB0 */
+ 0x65EE, 0x65EF, 0x65F0, 0x660A, 0x6619, 0x6772, 0x6603, 0x6615, /* 0xB0 */
+ 0x6600, 0x7085, 0x66F7, 0x661D, 0x6634, 0x6631, 0x6636, 0x6635, /* 0xC0 */
+ 0x8006, 0x665F, 0x6654, 0x6641, 0x664F, 0x6656, 0x6661, 0x6657, /* 0xC0 */
+ 0x6677, 0x6684, 0x668C, 0x66A7, 0x669D, 0x66BE, 0x66DB, 0x66DC, /* 0xD0 */
+ 0x66E6, 0x66E9, 0x8D32, 0x8D33, 0x8D36, 0x8D3B, 0x8D3D, 0x8D40, /* 0xD0 */
+ 0x8D45, 0x8D46, 0x8D48, 0x8D49, 0x8D47, 0x8D4D, 0x8D55, 0x8D59, /* 0xE0 */
+ 0x89C7, 0x89CA, 0x89CB, 0x89CC, 0x89CE, 0x89CF, 0x89D0, 0x89D1, /* 0xE0 */
+ 0x726E, 0x729F, 0x725D, 0x7266, 0x726F, 0x727E, 0x727F, 0x7284, /* 0xF0 */
+ 0x728B, 0x728D, 0x728F, 0x7292, 0x6308, 0x6332, 0x63B0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_EB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x968C, 0x968E, 0x9691, 0x9692, 0x9693, 0x9695, 0x9696, 0x969A, /* 0x40 */
+ 0x969B, 0x969D, 0x969E, 0x969F, 0x96A0, 0x96A1, 0x96A2, 0x96A3, /* 0x40 */
+ 0x96A4, 0x96A5, 0x96A6, 0x96A8, 0x96A9, 0x96AA, 0x96AB, 0x96AC, /* 0x50 */
+ 0x96AD, 0x96AE, 0x96AF, 0x96B1, 0x96B2, 0x96B4, 0x96B5, 0x96B7, /* 0x50 */
+ 0x96B8, 0x96BA, 0x96BB, 0x96BF, 0x96C2, 0x96C3, 0x96C8, 0x96CA, /* 0x60 */
+ 0x96CB, 0x96D0, 0x96D1, 0x96D3, 0x96D4, 0x96D6, 0x96D7, 0x96D8, /* 0x60 */
+ 0x96D9, 0x96DA, 0x96DB, 0x96DC, 0x96DD, 0x96DE, 0x96DF, 0x96E1, /* 0x70 */
+ 0x96E2, 0x96E3, 0x96E4, 0x96E5, 0x96E6, 0x96E7, 0x96EB, 0, /* 0x70 */
+ 0x96EC, 0x96ED, 0x96EE, 0x96F0, 0x96F1, 0x96F2, 0x96F4, 0x96F5, /* 0x80 */
+ 0x96F8, 0x96FA, 0x96FB, 0x96FC, 0x96FD, 0x96FF, 0x9702, 0x9703, /* 0x80 */
+ 0x9705, 0x970A, 0x970B, 0x970C, 0x9710, 0x9711, 0x9712, 0x9714, /* 0x90 */
+ 0x9715, 0x9717, 0x9718, 0x9719, 0x971A, 0x971B, 0x971D, 0x971F, /* 0x90 */
+ 0x9720, 0x643F, 0x64D8, 0x8004, 0x6BEA, 0x6BF3, 0x6BFD, 0x6BF5, /* 0xA0 */
+ 0x6BF9, 0x6C05, 0x6C07, 0x6C06, 0x6C0D, 0x6C15, 0x6C18, 0x6C19, /* 0xA0 */
+ 0x6C1A, 0x6C21, 0x6C29, 0x6C24, 0x6C2A, 0x6C32, 0x6535, 0x6555, /* 0xB0 */
+ 0x656B, 0x724D, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809F, /* 0xB0 */
+ 0x809C, 0x8093, 0x80BC, 0x670A, 0x80BD, 0x80B1, 0x80AB, 0x80AD, /* 0xC0 */
+ 0x80B4, 0x80B7, 0x80E7, 0x80E8, 0x80E9, 0x80EA, 0x80DB, 0x80C2, /* 0xC0 */
+ 0x80C4, 0x80D9, 0x80CD, 0x80D7, 0x6710, 0x80DD, 0x80EB, 0x80F1, /* 0xD0 */
+ 0x80F4, 0x80ED, 0x810D, 0x810E, 0x80F2, 0x80FC, 0x6715, 0x8112, /* 0xD0 */
+ 0x8C5A, 0x8136, 0x811E, 0x812C, 0x8118, 0x8132, 0x8148, 0x814C, /* 0xE0 */
+ 0x8153, 0x8174, 0x8159, 0x815A, 0x8171, 0x8160, 0x8169, 0x817C, /* 0xE0 */
+ 0x817D, 0x816D, 0x8167, 0x584D, 0x5AB5, 0x8188, 0x8182, 0x8191, /* 0xF0 */
+ 0x6ED5, 0x81A3, 0x81AA, 0x81CC, 0x6726, 0x81CA, 0x81BB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_EC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9721, 0x9722, 0x9723, 0x9724, 0x9725, 0x9726, 0x9727, 0x9728, /* 0x40 */
+ 0x9729, 0x972B, 0x972C, 0x972E, 0x972F, 0x9731, 0x9733, 0x9734, /* 0x40 */
+ 0x9735, 0x9736, 0x9737, 0x973A, 0x973B, 0x973C, 0x973D, 0x973F, /* 0x50 */
+ 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, /* 0x50 */
+ 0x9748, 0x9749, 0x974A, 0x974B, 0x974C, 0x974D, 0x974E, 0x974F, /* 0x60 */
+ 0x9750, 0x9751, 0x9754, 0x9755, 0x9757, 0x9758, 0x975A, 0x975C, /* 0x60 */
+ 0x975D, 0x975F, 0x9763, 0x9764, 0x9766, 0x9767, 0x9768, 0x976A, /* 0x70 */
+ 0x976B, 0x976C, 0x976D, 0x976E, 0x976F, 0x9770, 0x9771, 0, /* 0x70 */
+ 0x9772, 0x9775, 0x9777, 0x9778, 0x9779, 0x977A, 0x977B, 0x977D, /* 0x80 */
+ 0x977E, 0x977F, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9786, /* 0x80 */
+ 0x9787, 0x9788, 0x9789, 0x978A, 0x978C, 0x978E, 0x978F, 0x9790, /* 0x90 */
+ 0x9793, 0x9795, 0x9796, 0x9797, 0x9799, 0x979A, 0x979B, 0x979C, /* 0x90 */
+ 0x979D, 0x81C1, 0x81A6, 0x6B24, 0x6B37, 0x6B39, 0x6B43, 0x6B46, /* 0xA0 */
+ 0x6B59, 0x98D1, 0x98D2, 0x98D3, 0x98D5, 0x98D9, 0x98DA, 0x6BB3, /* 0xA0 */
+ 0x5F40, 0x6BC2, 0x89F3, 0x6590, 0x9F51, 0x6593, 0x65BC, 0x65C6, /* 0xB0 */
+ 0x65C4, 0x65C3, 0x65CC, 0x65CE, 0x65D2, 0x65D6, 0x7080, 0x709C, /* 0xB0 */
+ 0x7096, 0x709D, 0x70BB, 0x70C0, 0x70B7, 0x70AB, 0x70B1, 0x70E8, /* 0xC0 */
+ 0x70CA, 0x7110, 0x7113, 0x7116, 0x712F, 0x7131, 0x7173, 0x715C, /* 0xC0 */
+ 0x7168, 0x7145, 0x7172, 0x714A, 0x7178, 0x717A, 0x7198, 0x71B3, /* 0xD0 */
+ 0x71B5, 0x71A8, 0x71A0, 0x71E0, 0x71D4, 0x71E7, 0x71F9, 0x721D, /* 0xD0 */
+ 0x7228, 0x706C, 0x7118, 0x7166, 0x71B9, 0x623E, 0x623D, 0x6243, /* 0xE0 */
+ 0x6248, 0x6249, 0x793B, 0x7940, 0x7946, 0x7949, 0x795B, 0x795C, /* 0xE0 */
+ 0x7953, 0x795A, 0x7962, 0x7957, 0x7960, 0x796F, 0x7967, 0x797A, /* 0xF0 */
+ 0x7985, 0x798A, 0x799A, 0x79A7, 0x79B3, 0x5FD1, 0x5FD0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_ED[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x979E, 0x979F, 0x97A1, 0x97A2, 0x97A4, 0x97A5, 0x97A6, 0x97A7, /* 0x40 */
+ 0x97A8, 0x97A9, 0x97AA, 0x97AC, 0x97AE, 0x97B0, 0x97B1, 0x97B3, /* 0x40 */
+ 0x97B5, 0x97B6, 0x97B7, 0x97B8, 0x97B9, 0x97BA, 0x97BB, 0x97BC, /* 0x50 */
+ 0x97BD, 0x97BE, 0x97BF, 0x97C0, 0x97C1, 0x97C2, 0x97C3, 0x97C4, /* 0x50 */
+ 0x97C5, 0x97C6, 0x97C7, 0x97C8, 0x97C9, 0x97CA, 0x97CB, 0x97CC, /* 0x60 */
+ 0x97CD, 0x97CE, 0x97CF, 0x97D0, 0x97D1, 0x97D2, 0x97D3, 0x97D4, /* 0x60 */
+ 0x97D5, 0x97D6, 0x97D7, 0x97D8, 0x97D9, 0x97DA, 0x97DB, 0x97DC, /* 0x70 */
+ 0x97DD, 0x97DE, 0x97DF, 0x97E0, 0x97E1, 0x97E2, 0x97E3, 0, /* 0x70 */
+ 0x97E4, 0x97E5, 0x97E8, 0x97EE, 0x97EF, 0x97F0, 0x97F1, 0x97F2, /* 0x80 */
+ 0x97F4, 0x97F7, 0x97F8, 0x97F9, 0x97FA, 0x97FB, 0x97FC, 0x97FD, /* 0x80 */
+ 0x97FE, 0x97FF, 0x9800, 0x9801, 0x9802, 0x9803, 0x9804, 0x9805, /* 0x90 */
+ 0x9806, 0x9807, 0x9808, 0x9809, 0x980A, 0x980B, 0x980C, 0x980D, /* 0x90 */
+ 0x980E, 0x603C, 0x605D, 0x605A, 0x6067, 0x6041, 0x6059, 0x6063, /* 0xA0 */
+ 0x60AB, 0x6106, 0x610D, 0x615D, 0x61A9, 0x619D, 0x61CB, 0x61D1, /* 0xA0 */
+ 0x6206, 0x8080, 0x807F, 0x6C93, 0x6CF6, 0x6DFC, 0x77F6, 0x77F8, /* 0xB0 */
+ 0x7800, 0x7809, 0x7817, 0x7818, 0x7811, 0x65AB, 0x782D, 0x781C, /* 0xB0 */
+ 0x781D, 0x7839, 0x783A, 0x783B, 0x781F, 0x783C, 0x7825, 0x782C, /* 0xC0 */
+ 0x7823, 0x7829, 0x784E, 0x786D, 0x7856, 0x7857, 0x7826, 0x7850, /* 0xC0 */
+ 0x7847, 0x784C, 0x786A, 0x789B, 0x7893, 0x789A, 0x7887, 0x789C, /* 0xD0 */
+ 0x78A1, 0x78A3, 0x78B2, 0x78B9, 0x78A5, 0x78D4, 0x78D9, 0x78C9, /* 0xD0 */
+ 0x78EC, 0x78F2, 0x7905, 0x78F4, 0x7913, 0x7924, 0x791E, 0x7934, /* 0xE0 */
+ 0x9F9B, 0x9EF9, 0x9EFB, 0x9EFC, 0x76F1, 0x7704, 0x770D, 0x76F9, /* 0xE0 */
+ 0x7707, 0x7708, 0x771A, 0x7722, 0x7719, 0x772D, 0x7726, 0x7735, /* 0xF0 */
+ 0x7738, 0x7750, 0x7751, 0x7747, 0x7743, 0x775A, 0x7768 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_EE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x980F, 0x9810, 0x9811, 0x9812, 0x9813, 0x9814, 0x9815, 0x9816, /* 0x40 */
+ 0x9817, 0x9818, 0x9819, 0x981A, 0x981B, 0x981C, 0x981D, 0x981E, /* 0x40 */
+ 0x981F, 0x9820, 0x9821, 0x9822, 0x9823, 0x9824, 0x9825, 0x9826, /* 0x50 */
+ 0x9827, 0x9828, 0x9829, 0x982A, 0x982B, 0x982C, 0x982D, 0x982E, /* 0x50 */
+ 0x982F, 0x9830, 0x9831, 0x9832, 0x9833, 0x9834, 0x9835, 0x9836, /* 0x60 */
+ 0x9837, 0x9838, 0x9839, 0x983A, 0x983B, 0x983C, 0x983D, 0x983E, /* 0x60 */
+ 0x983F, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, /* 0x70 */
+ 0x9847, 0x9848, 0x9849, 0x984A, 0x984B, 0x984C, 0x984D, 0, /* 0x70 */
+ 0x984E, 0x984F, 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, /* 0x80 */
+ 0x9856, 0x9857, 0x9858, 0x9859, 0x985A, 0x985B, 0x985C, 0x985D, /* 0x80 */
+ 0x985E, 0x985F, 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, /* 0x90 */
+ 0x9866, 0x9867, 0x9868, 0x9869, 0x986A, 0x986B, 0x986C, 0x986D, /* 0x90 */
+ 0x986E, 0x7762, 0x7765, 0x777F, 0x778D, 0x777D, 0x7780, 0x778C, /* 0xA0 */
+ 0x7791, 0x779F, 0x77A0, 0x77B0, 0x77B5, 0x77BD, 0x753A, 0x7540, /* 0xA0 */
+ 0x754E, 0x754B, 0x7548, 0x755B, 0x7572, 0x7579, 0x7583, 0x7F58, /* 0xB0 */
+ 0x7F61, 0x7F5F, 0x8A48, 0x7F68, 0x7F74, 0x7F71, 0x7F79, 0x7F81, /* 0xB0 */
+ 0x7F7E, 0x76CD, 0x76E5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948B, /* 0xC0 */
+ 0x948A, 0x948C, 0x948D, 0x948F, 0x9490, 0x9494, 0x9497, 0x9495, /* 0xC0 */
+ 0x949A, 0x949B, 0x949C, 0x94A3, 0x94A4, 0x94AB, 0x94AA, 0x94AD, /* 0xD0 */
+ 0x94AC, 0x94AF, 0x94B0, 0x94B2, 0x94B4, 0x94B6, 0x94B7, 0x94B8, /* 0xD0 */
+ 0x94B9, 0x94BA, 0x94BC, 0x94BD, 0x94BF, 0x94C4, 0x94C8, 0x94C9, /* 0xE0 */
+ 0x94CA, 0x94CB, 0x94CC, 0x94CD, 0x94CE, 0x94D0, 0x94D1, 0x94D2, /* 0xE0 */
+ 0x94D5, 0x94D6, 0x94D7, 0x94D9, 0x94D8, 0x94DB, 0x94DE, 0x94DF, /* 0xF0 */
+ 0x94E0, 0x94E2, 0x94E4, 0x94E5, 0x94E7, 0x94E8, 0x94EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_EF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x986F, 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x988B, 0x988E, /* 0x40 */
+ 0x9892, 0x9895, 0x9899, 0x98A3, 0x98A8, 0x98A9, 0x98AA, 0x98AB, /* 0x40 */
+ 0x98AC, 0x98AD, 0x98AE, 0x98AF, 0x98B0, 0x98B1, 0x98B2, 0x98B3, /* 0x50 */
+ 0x98B4, 0x98B5, 0x98B6, 0x98B7, 0x98B8, 0x98B9, 0x98BA, 0x98BB, /* 0x50 */
+ 0x98BC, 0x98BD, 0x98BE, 0x98BF, 0x98C0, 0x98C1, 0x98C2, 0x98C3, /* 0x60 */
+ 0x98C4, 0x98C5, 0x98C6, 0x98C7, 0x98C8, 0x98C9, 0x98CA, 0x98CB, /* 0x60 */
+ 0x98CC, 0x98CD, 0x98CF, 0x98D0, 0x98D4, 0x98D6, 0x98D7, 0x98DB, /* 0x70 */
+ 0x98DC, 0x98DD, 0x98E0, 0x98E1, 0x98E2, 0x98E3, 0x98E4, 0, /* 0x70 */
+ 0x98E5, 0x98E6, 0x98E9, 0x98EA, 0x98EB, 0x98EC, 0x98ED, 0x98EE, /* 0x80 */
+ 0x98EF, 0x98F0, 0x98F1, 0x98F2, 0x98F3, 0x98F4, 0x98F5, 0x98F6, /* 0x80 */
+ 0x98F7, 0x98F8, 0x98F9, 0x98FA, 0x98FB, 0x98FC, 0x98FD, 0x98FE, /* 0x90 */
+ 0x98FF, 0x9900, 0x9901, 0x9902, 0x9903, 0x9904, 0x9905, 0x9906, /* 0x90 */
+ 0x9907, 0x94E9, 0x94EB, 0x94EE, 0x94EF, 0x94F3, 0x94F4, 0x94F5, /* 0xA0 */
+ 0x94F7, 0x94F9, 0x94FC, 0x94FD, 0x94FF, 0x9503, 0x9502, 0x9506, /* 0xA0 */
+ 0x9507, 0x9509, 0x950A, 0x950D, 0x950E, 0x950F, 0x9512, 0x9513, /* 0xB0 */
+ 0x9514, 0x9515, 0x9516, 0x9518, 0x951B, 0x951D, 0x951E, 0x951F, /* 0xB0 */
+ 0x9522, 0x952A, 0x952B, 0x9529, 0x952C, 0x9531, 0x9532, 0x9534, /* 0xC0 */
+ 0x9536, 0x9537, 0x9538, 0x953C, 0x953E, 0x953F, 0x9542, 0x9535, /* 0xC0 */
+ 0x9544, 0x9545, 0x9546, 0x9549, 0x954C, 0x954E, 0x954F, 0x9552, /* 0xD0 */
+ 0x9553, 0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955B, 0x955E, /* 0xD0 */
+ 0x955F, 0x955D, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, /* 0xE0 */
+ 0x9568, 0x9569, 0x956A, 0x956B, 0x956C, 0x956F, 0x9571, 0x9572, /* 0xE0 */
+ 0x9573, 0x953A, 0x77E7, 0x77EC, 0x96C9, 0x79D5, 0x79ED, 0x79E3, /* 0xF0 */
+ 0x79EB, 0x7A06, 0x5D47, 0x7A03, 0x7A02, 0x7A1E, 0x7A14 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9908, 0x9909, 0x990A, 0x990B, 0x990C, 0x990E, 0x990F, 0x9911, /* 0x40 */
+ 0x9912, 0x9913, 0x9914, 0x9915, 0x9916, 0x9917, 0x9918, 0x9919, /* 0x40 */
+ 0x991A, 0x991B, 0x991C, 0x991D, 0x991E, 0x991F, 0x9920, 0x9921, /* 0x50 */
+ 0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927, 0x9928, 0x9929, /* 0x50 */
+ 0x992A, 0x992B, 0x992C, 0x992D, 0x992F, 0x9930, 0x9931, 0x9932, /* 0x60 */
+ 0x9933, 0x9934, 0x9935, 0x9936, 0x9937, 0x9938, 0x9939, 0x993A, /* 0x60 */
+ 0x993B, 0x993C, 0x993D, 0x993E, 0x993F, 0x9940, 0x9941, 0x9942, /* 0x70 */
+ 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0, /* 0x70 */
+ 0x994A, 0x994B, 0x994C, 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, /* 0x80 */
+ 0x9952, 0x9953, 0x9956, 0x9957, 0x9958, 0x9959, 0x995A, 0x995B, /* 0x80 */
+ 0x995C, 0x995D, 0x995E, 0x995F, 0x9960, 0x9961, 0x9962, 0x9964, /* 0x90 */
+ 0x9966, 0x9973, 0x9978, 0x9979, 0x997B, 0x997E, 0x9982, 0x9983, /* 0x90 */
+ 0x9989, 0x7A39, 0x7A37, 0x7A51, 0x9ECF, 0x99A5, 0x7A70, 0x7688, /* 0xA0 */
+ 0x768E, 0x7693, 0x7699, 0x76A4, 0x74DE, 0x74E0, 0x752C, 0x9E20, /* 0xA0 */
+ 0x9E22, 0x9E28, 0x9E29, 0x9E2A, 0x9E2B, 0x9E2C, 0x9E32, 0x9E31, /* 0xB0 */
+ 0x9E36, 0x9E38, 0x9E37, 0x9E39, 0x9E3A, 0x9E3E, 0x9E41, 0x9E42, /* 0xB0 */
+ 0x9E44, 0x9E46, 0x9E47, 0x9E48, 0x9E49, 0x9E4B, 0x9E4C, 0x9E4E, /* 0xC0 */
+ 0x9E51, 0x9E55, 0x9E57, 0x9E5A, 0x9E5B, 0x9E5C, 0x9E5E, 0x9E63, /* 0xC0 */
+ 0x9E66, 0x9E67, 0x9E68, 0x9E69, 0x9E6A, 0x9E6B, 0x9E6C, 0x9E71, /* 0xD0 */
+ 0x9E6D, 0x9E73, 0x7592, 0x7594, 0x7596, 0x75A0, 0x759D, 0x75AC, /* 0xD0 */
+ 0x75A3, 0x75B3, 0x75B4, 0x75B8, 0x75C4, 0x75B1, 0x75B0, 0x75C3, /* 0xE0 */
+ 0x75C2, 0x75D6, 0x75CD, 0x75E3, 0x75E8, 0x75E6, 0x75E4, 0x75EB, /* 0xE0 */
+ 0x75E7, 0x7603, 0x75F1, 0x75FC, 0x75FF, 0x7610, 0x7600, 0x7605, /* 0xF0 */
+ 0x760C, 0x7617, 0x760A, 0x7625, 0x7618, 0x7615, 0x7619 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x998C, 0x998E, 0x999A, 0x999B, 0x999C, 0x999D, 0x999E, 0x999F, /* 0x40 */
+ 0x99A0, 0x99A1, 0x99A2, 0x99A3, 0x99A4, 0x99A6, 0x99A7, 0x99A9, /* 0x40 */
+ 0x99AA, 0x99AB, 0x99AC, 0x99AD, 0x99AE, 0x99AF, 0x99B0, 0x99B1, /* 0x50 */
+ 0x99B2, 0x99B3, 0x99B4, 0x99B5, 0x99B6, 0x99B7, 0x99B8, 0x99B9, /* 0x50 */
+ 0x99BA, 0x99BB, 0x99BC, 0x99BD, 0x99BE, 0x99BF, 0x99C0, 0x99C1, /* 0x60 */
+ 0x99C2, 0x99C3, 0x99C4, 0x99C5, 0x99C6, 0x99C7, 0x99C8, 0x99C9, /* 0x60 */
+ 0x99CA, 0x99CB, 0x99CC, 0x99CD, 0x99CE, 0x99CF, 0x99D0, 0x99D1, /* 0x70 */
+ 0x99D2, 0x99D3, 0x99D4, 0x99D5, 0x99D6, 0x99D7, 0x99D8, 0, /* 0x70 */
+ 0x99D9, 0x99DA, 0x99DB, 0x99DC, 0x99DD, 0x99DE, 0x99DF, 0x99E0, /* 0x80 */
+ 0x99E1, 0x99E2, 0x99E3, 0x99E4, 0x99E5, 0x99E6, 0x99E7, 0x99E8, /* 0x80 */
+ 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99ED, 0x99EE, 0x99EF, 0x99F0, /* 0x90 */
+ 0x99F1, 0x99F2, 0x99F3, 0x99F4, 0x99F5, 0x99F6, 0x99F7, 0x99F8, /* 0x90 */
+ 0x99F9, 0x761B, 0x763C, 0x7622, 0x7620, 0x7640, 0x762D, 0x7630, /* 0xA0 */
+ 0x763F, 0x7635, 0x7643, 0x763E, 0x7633, 0x764D, 0x765E, 0x7654, /* 0xA0 */
+ 0x765C, 0x7656, 0x766B, 0x766F, 0x7FCA, 0x7AE6, 0x7A78, 0x7A79, /* 0xB0 */
+ 0x7A80, 0x7A86, 0x7A88, 0x7A95, 0x7AA6, 0x7AA0, 0x7AAC, 0x7AA8, /* 0xB0 */
+ 0x7AAD, 0x7AB3, 0x8864, 0x8869, 0x8872, 0x887D, 0x887F, 0x8882, /* 0xC0 */
+ 0x88A2, 0x88C6, 0x88B7, 0x88BC, 0x88C9, 0x88E2, 0x88CE, 0x88E3, /* 0xC0 */
+ 0x88E5, 0x88F1, 0x891A, 0x88FC, 0x88E8, 0x88FE, 0x88F0, 0x8921, /* 0xD0 */
+ 0x8919, 0x8913, 0x891B, 0x890A, 0x8934, 0x892B, 0x8936, 0x8941, /* 0xD0 */
+ 0x8966, 0x897B, 0x758B, 0x80E5, 0x76B2, 0x76B4, 0x77DC, 0x8012, /* 0xE0 */
+ 0x8014, 0x8016, 0x801C, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, /* 0xE0 */
+ 0x8029, 0x8028, 0x8031, 0x800B, 0x8035, 0x8043, 0x8046, 0x804D, /* 0xF0 */
+ 0x8052, 0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x99FA, 0x99FB, 0x99FC, 0x99FD, 0x99FE, 0x99FF, 0x9A00, 0x9A01, /* 0x40 */
+ 0x9A02, 0x9A03, 0x9A04, 0x9A05, 0x9A06, 0x9A07, 0x9A08, 0x9A09, /* 0x40 */
+ 0x9A0A, 0x9A0B, 0x9A0C, 0x9A0D, 0x9A0E, 0x9A0F, 0x9A10, 0x9A11, /* 0x50 */
+ 0x9A12, 0x9A13, 0x9A14, 0x9A15, 0x9A16, 0x9A17, 0x9A18, 0x9A19, /* 0x50 */
+ 0x9A1A, 0x9A1B, 0x9A1C, 0x9A1D, 0x9A1E, 0x9A1F, 0x9A20, 0x9A21, /* 0x60 */
+ 0x9A22, 0x9A23, 0x9A24, 0x9A25, 0x9A26, 0x9A27, 0x9A28, 0x9A29, /* 0x60 */
+ 0x9A2A, 0x9A2B, 0x9A2C, 0x9A2D, 0x9A2E, 0x9A2F, 0x9A30, 0x9A31, /* 0x70 */
+ 0x9A32, 0x9A33, 0x9A34, 0x9A35, 0x9A36, 0x9A37, 0x9A38, 0, /* 0x70 */
+ 0x9A39, 0x9A3A, 0x9A3B, 0x9A3C, 0x9A3D, 0x9A3E, 0x9A3F, 0x9A40, /* 0x80 */
+ 0x9A41, 0x9A42, 0x9A43, 0x9A44, 0x9A45, 0x9A46, 0x9A47, 0x9A48, /* 0x80 */
+ 0x9A49, 0x9A4A, 0x9A4B, 0x9A4C, 0x9A4D, 0x9A4E, 0x9A4F, 0x9A50, /* 0x90 */
+ 0x9A51, 0x9A52, 0x9A53, 0x9A54, 0x9A55, 0x9A56, 0x9A57, 0x9A58, /* 0x90 */
+ 0x9A59, 0x9889, 0x988C, 0x988D, 0x988F, 0x9894, 0x989A, 0x989B, /* 0xA0 */
+ 0x989E, 0x989F, 0x98A1, 0x98A2, 0x98A5, 0x98A6, 0x864D, 0x8654, /* 0xA0 */
+ 0x866C, 0x866E, 0x867F, 0x867A, 0x867C, 0x867B, 0x86A8, 0x868D, /* 0xB0 */
+ 0x868B, 0x86AC, 0x869D, 0x86A7, 0x86A3, 0x86AA, 0x8693, 0x86A9, /* 0xB0 */
+ 0x86B6, 0x86C4, 0x86B5, 0x86CE, 0x86B0, 0x86BA, 0x86B1, 0x86AF, /* 0xC0 */
+ 0x86C9, 0x86CF, 0x86B4, 0x86E9, 0x86F1, 0x86F2, 0x86ED, 0x86F3, /* 0xC0 */
+ 0x86D0, 0x8713, 0x86DE, 0x86F4, 0x86DF, 0x86D8, 0x86D1, 0x8703, /* 0xD0 */
+ 0x8707, 0x86F8, 0x8708, 0x870A, 0x870D, 0x8709, 0x8723, 0x873B, /* 0xD0 */
+ 0x871E, 0x8725, 0x872E, 0x871A, 0x873E, 0x8748, 0x8734, 0x8731, /* 0xE0 */
+ 0x8729, 0x8737, 0x873F, 0x8782, 0x8722, 0x877D, 0x877E, 0x877B, /* 0xE0 */
+ 0x8760, 0x8770, 0x874C, 0x876E, 0x878B, 0x8753, 0x8763, 0x877C, /* 0xF0 */
+ 0x8764, 0x8759, 0x8765, 0x8793, 0x87AF, 0x87A8, 0x87D2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9A5A, 0x9A5B, 0x9A5C, 0x9A5D, 0x9A5E, 0x9A5F, 0x9A60, 0x9A61, /* 0x40 */
+ 0x9A62, 0x9A63, 0x9A64, 0x9A65, 0x9A66, 0x9A67, 0x9A68, 0x9A69, /* 0x40 */
+ 0x9A6A, 0x9A6B, 0x9A72, 0x9A83, 0x9A89, 0x9A8D, 0x9A8E, 0x9A94, /* 0x50 */
+ 0x9A95, 0x9A99, 0x9AA6, 0x9AA9, 0x9AAA, 0x9AAB, 0x9AAC, 0x9AAD, /* 0x50 */
+ 0x9AAE, 0x9AAF, 0x9AB2, 0x9AB3, 0x9AB4, 0x9AB5, 0x9AB9, 0x9ABB, /* 0x60 */
+ 0x9ABD, 0x9ABE, 0x9ABF, 0x9AC3, 0x9AC4, 0x9AC6, 0x9AC7, 0x9AC8, /* 0x60 */
+ 0x9AC9, 0x9ACA, 0x9ACD, 0x9ACE, 0x9ACF, 0x9AD0, 0x9AD2, 0x9AD4, /* 0x70 */
+ 0x9AD5, 0x9AD6, 0x9AD7, 0x9AD9, 0x9ADA, 0x9ADB, 0x9ADC, 0, /* 0x70 */
+ 0x9ADD, 0x9ADE, 0x9AE0, 0x9AE2, 0x9AE3, 0x9AE4, 0x9AE5, 0x9AE7, /* 0x80 */
+ 0x9AE8, 0x9AE9, 0x9AEA, 0x9AEC, 0x9AEE, 0x9AF0, 0x9AF1, 0x9AF2, /* 0x80 */
+ 0x9AF3, 0x9AF4, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AFA, 0x9AFC, /* 0x90 */
+ 0x9AFD, 0x9AFE, 0x9AFF, 0x9B00, 0x9B01, 0x9B02, 0x9B04, 0x9B05, /* 0x90 */
+ 0x9B06, 0x87C6, 0x8788, 0x8785, 0x87AD, 0x8797, 0x8783, 0x87AB, /* 0xA0 */
+ 0x87E5, 0x87AC, 0x87B5, 0x87B3, 0x87CB, 0x87D3, 0x87BD, 0x87D1, /* 0xA0 */
+ 0x87C0, 0x87CA, 0x87DB, 0x87EA, 0x87E0, 0x87EE, 0x8816, 0x8813, /* 0xB0 */
+ 0x87FE, 0x880A, 0x881B, 0x8821, 0x8839, 0x883C, 0x7F36, 0x7F42, /* 0xB0 */
+ 0x7F44, 0x7F45, 0x8210, 0x7AFA, 0x7AFD, 0x7B08, 0x7B03, 0x7B04, /* 0xC0 */
+ 0x7B15, 0x7B0A, 0x7B2B, 0x7B0F, 0x7B47, 0x7B38, 0x7B2A, 0x7B19, /* 0xC0 */
+ 0x7B2E, 0x7B31, 0x7B20, 0x7B25, 0x7B24, 0x7B33, 0x7B3E, 0x7B1E, /* 0xD0 */
+ 0x7B58, 0x7B5A, 0x7B45, 0x7B75, 0x7B4C, 0x7B5D, 0x7B60, 0x7B6E, /* 0xD0 */
+ 0x7B7B, 0x7B62, 0x7B72, 0x7B71, 0x7B90, 0x7BA6, 0x7BA7, 0x7BB8, /* 0xE0 */
+ 0x7BAC, 0x7B9D, 0x7BA8, 0x7B85, 0x7BAA, 0x7B9C, 0x7BA2, 0x7BAB, /* 0xE0 */
+ 0x7BB4, 0x7BD1, 0x7BC1, 0x7BCC, 0x7BDD, 0x7BDA, 0x7BE5, 0x7BE6, /* 0xF0 */
+ 0x7BEA, 0x7C0C, 0x7BFE, 0x7BFC, 0x7C0F, 0x7C16, 0x7C0B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9B07, 0x9B09, 0x9B0A, 0x9B0B, 0x9B0C, 0x9B0D, 0x9B0E, 0x9B10, /* 0x40 */
+ 0x9B11, 0x9B12, 0x9B14, 0x9B15, 0x9B16, 0x9B17, 0x9B18, 0x9B19, /* 0x40 */
+ 0x9B1A, 0x9B1B, 0x9B1C, 0x9B1D, 0x9B1E, 0x9B20, 0x9B21, 0x9B22, /* 0x50 */
+ 0x9B24, 0x9B25, 0x9B26, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2B, /* 0x50 */
+ 0x9B2C, 0x9B2D, 0x9B2E, 0x9B30, 0x9B31, 0x9B33, 0x9B34, 0x9B35, /* 0x60 */
+ 0x9B36, 0x9B37, 0x9B38, 0x9B39, 0x9B3A, 0x9B3D, 0x9B3E, 0x9B3F, /* 0x60 */
+ 0x9B40, 0x9B46, 0x9B4A, 0x9B4B, 0x9B4C, 0x9B4E, 0x9B50, 0x9B52, /* 0x70 */
+ 0x9B53, 0x9B55, 0x9B56, 0x9B57, 0x9B58, 0x9B59, 0x9B5A, 0, /* 0x70 */
+ 0x9B5B, 0x9B5C, 0x9B5D, 0x9B5E, 0x9B5F, 0x9B60, 0x9B61, 0x9B62, /* 0x80 */
+ 0x9B63, 0x9B64, 0x9B65, 0x9B66, 0x9B67, 0x9B68, 0x9B69, 0x9B6A, /* 0x80 */
+ 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B6F, 0x9B70, 0x9B71, 0x9B72, /* 0x90 */
+ 0x9B73, 0x9B74, 0x9B75, 0x9B76, 0x9B77, 0x9B78, 0x9B79, 0x9B7A, /* 0x90 */
+ 0x9B7B, 0x7C1F, 0x7C2A, 0x7C26, 0x7C38, 0x7C41, 0x7C40, 0x81FE, /* 0xA0 */
+ 0x8201, 0x8202, 0x8204, 0x81EC, 0x8844, 0x8221, 0x8222, 0x8223, /* 0xA0 */
+ 0x822D, 0x822F, 0x8228, 0x822B, 0x8238, 0x823B, 0x8233, 0x8234, /* 0xB0 */
+ 0x823E, 0x8244, 0x8249, 0x824B, 0x824F, 0x825A, 0x825F, 0x8268, /* 0xB0 */
+ 0x887E, 0x8885, 0x8888, 0x88D8, 0x88DF, 0x895E, 0x7F9D, 0x7F9F, /* 0xC0 */
+ 0x7FA7, 0x7FAF, 0x7FB0, 0x7FB2, 0x7C7C, 0x6549, 0x7C91, 0x7C9D, /* 0xC0 */
+ 0x7C9C, 0x7C9E, 0x7CA2, 0x7CB2, 0x7CBC, 0x7CBD, 0x7CC1, 0x7CC7, /* 0xD0 */
+ 0x7CCC, 0x7CCD, 0x7CC8, 0x7CC5, 0x7CD7, 0x7CE8, 0x826E, 0x66A8, /* 0xD0 */
+ 0x7FBF, 0x7FCE, 0x7FD5, 0x7FE5, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FEE, /* 0xE0 */
+ 0x7FF3, 0x7CF8, 0x7D77, 0x7DA6, 0x7DAE, 0x7E47, 0x7E9B, 0x9EB8, /* 0xE0 */
+ 0x9EB4, 0x8D73, 0x8D84, 0x8D94, 0x8D91, 0x8DB1, 0x8D67, 0x8D6D, /* 0xF0 */
+ 0x8C47, 0x8C49, 0x914A, 0x9150, 0x914E, 0x914F, 0x9164 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9B7C, 0x9B7D, 0x9B7E, 0x9B7F, 0x9B80, 0x9B81, 0x9B82, 0x9B83, /* 0x40 */
+ 0x9B84, 0x9B85, 0x9B86, 0x9B87, 0x9B88, 0x9B89, 0x9B8A, 0x9B8B, /* 0x40 */
+ 0x9B8C, 0x9B8D, 0x9B8E, 0x9B8F, 0x9B90, 0x9B91, 0x9B92, 0x9B93, /* 0x50 */
+ 0x9B94, 0x9B95, 0x9B96, 0x9B97, 0x9B98, 0x9B99, 0x9B9A, 0x9B9B, /* 0x50 */
+ 0x9B9C, 0x9B9D, 0x9B9E, 0x9B9F, 0x9BA0, 0x9BA1, 0x9BA2, 0x9BA3, /* 0x60 */
+ 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0x9BA8, 0x9BA9, 0x9BAA, 0x9BAB, /* 0x60 */
+ 0x9BAC, 0x9BAD, 0x9BAE, 0x9BAF, 0x9BB0, 0x9BB1, 0x9BB2, 0x9BB3, /* 0x70 */
+ 0x9BB4, 0x9BB5, 0x9BB6, 0x9BB7, 0x9BB8, 0x9BB9, 0x9BBA, 0, /* 0x70 */
+ 0x9BBB, 0x9BBC, 0x9BBD, 0x9BBE, 0x9BBF, 0x9BC0, 0x9BC1, 0x9BC2, /* 0x80 */
+ 0x9BC3, 0x9BC4, 0x9BC5, 0x9BC6, 0x9BC7, 0x9BC8, 0x9BC9, 0x9BCA, /* 0x80 */
+ 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, 0x9BCF, 0x9BD0, 0x9BD1, 0x9BD2, /* 0x90 */
+ 0x9BD3, 0x9BD4, 0x9BD5, 0x9BD6, 0x9BD7, 0x9BD8, 0x9BD9, 0x9BDA, /* 0x90 */
+ 0x9BDB, 0x9162, 0x9161, 0x9170, 0x9169, 0x916F, 0x917D, 0x917E, /* 0xA0 */
+ 0x9172, 0x9174, 0x9179, 0x918C, 0x9185, 0x9190, 0x918D, 0x9191, /* 0xA0 */
+ 0x91A2, 0x91A3, 0x91AA, 0x91AD, 0x91AE, 0x91AF, 0x91B5, 0x91B4, /* 0xB0 */
+ 0x91BA, 0x8C55, 0x9E7E, 0x8DB8, 0x8DEB, 0x8E05, 0x8E59, 0x8E69, /* 0xB0 */
+ 0x8DB5, 0x8DBF, 0x8DBC, 0x8DBA, 0x8DC4, 0x8DD6, 0x8DD7, 0x8DDA, /* 0xC0 */
+ 0x8DDE, 0x8DCE, 0x8DCF, 0x8DDB, 0x8DC6, 0x8DEC, 0x8DF7, 0x8DF8, /* 0xC0 */
+ 0x8DE3, 0x8DF9, 0x8DFB, 0x8DE4, 0x8E09, 0x8DFD, 0x8E14, 0x8E1D, /* 0xD0 */
+ 0x8E1F, 0x8E2C, 0x8E2E, 0x8E23, 0x8E2F, 0x8E3A, 0x8E40, 0x8E39, /* 0xD0 */
+ 0x8E35, 0x8E3D, 0x8E31, 0x8E49, 0x8E41, 0x8E42, 0x8E51, 0x8E52, /* 0xE0 */
+ 0x8E4A, 0x8E70, 0x8E76, 0x8E7C, 0x8E6F, 0x8E74, 0x8E85, 0x8E8F, /* 0xE0 */
+ 0x8E94, 0x8E90, 0x8E9C, 0x8E9E, 0x8C78, 0x8C82, 0x8C8A, 0x8C85, /* 0xF0 */
+ 0x8C98, 0x8C94, 0x659B, 0x89D6, 0x89DE, 0x89DA, 0x89DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9BDC, 0x9BDD, 0x9BDE, 0x9BDF, 0x9BE0, 0x9BE1, 0x9BE2, 0x9BE3, /* 0x40 */
+ 0x9BE4, 0x9BE5, 0x9BE6, 0x9BE7, 0x9BE8, 0x9BE9, 0x9BEA, 0x9BEB, /* 0x40 */
+ 0x9BEC, 0x9BED, 0x9BEE, 0x9BEF, 0x9BF0, 0x9BF1, 0x9BF2, 0x9BF3, /* 0x50 */
+ 0x9BF4, 0x9BF5, 0x9BF6, 0x9BF7, 0x9BF8, 0x9BF9, 0x9BFA, 0x9BFB, /* 0x50 */
+ 0x9BFC, 0x9BFD, 0x9BFE, 0x9BFF, 0x9C00, 0x9C01, 0x9C02, 0x9C03, /* 0x60 */
+ 0x9C04, 0x9C05, 0x9C06, 0x9C07, 0x9C08, 0x9C09, 0x9C0A, 0x9C0B, /* 0x60 */
+ 0x9C0C, 0x9C0D, 0x9C0E, 0x9C0F, 0x9C10, 0x9C11, 0x9C12, 0x9C13, /* 0x70 */
+ 0x9C14, 0x9C15, 0x9C16, 0x9C17, 0x9C18, 0x9C19, 0x9C1A, 0, /* 0x70 */
+ 0x9C1B, 0x9C1C, 0x9C1D, 0x9C1E, 0x9C1F, 0x9C20, 0x9C21, 0x9C22, /* 0x80 */
+ 0x9C23, 0x9C24, 0x9C25, 0x9C26, 0x9C27, 0x9C28, 0x9C29, 0x9C2A, /* 0x80 */
+ 0x9C2B, 0x9C2C, 0x9C2D, 0x9C2E, 0x9C2F, 0x9C30, 0x9C31, 0x9C32, /* 0x90 */
+ 0x9C33, 0x9C34, 0x9C35, 0x9C36, 0x9C37, 0x9C38, 0x9C39, 0x9C3A, /* 0x90 */
+ 0x9C3B, 0x89E5, 0x89EB, 0x89EF, 0x8A3E, 0x8B26, 0x9753, 0x96E9, /* 0xA0 */
+ 0x96F3, 0x96EF, 0x9706, 0x9701, 0x9708, 0x970F, 0x970E, 0x972A, /* 0xA0 */
+ 0x972D, 0x9730, 0x973E, 0x9F80, 0x9F83, 0x9F85, 0x9F86, 0x9F87, /* 0xB0 */
+ 0x9F88, 0x9F89, 0x9F8A, 0x9F8C, 0x9EFE, 0x9F0B, 0x9F0D, 0x96B9, /* 0xB0 */
+ 0x96BC, 0x96BD, 0x96CE, 0x96D2, 0x77BF, 0x96E0, 0x928E, 0x92AE, /* 0xC0 */
+ 0x92C8, 0x933E, 0x936A, 0x93CA, 0x938F, 0x943E, 0x946B, 0x9C7F, /* 0xC0 */
+ 0x9C82, 0x9C85, 0x9C86, 0x9C87, 0x9C88, 0x7A23, 0x9C8B, 0x9C8E, /* 0xD0 */
+ 0x9C90, 0x9C91, 0x9C92, 0x9C94, 0x9C95, 0x9C9A, 0x9C9B, 0x9C9E, /* 0xD0 */
+ 0x9C9F, 0x9CA0, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA5, 0x9CA6, 0x9CA7, /* 0xE0 */
+ 0x9CA8, 0x9CA9, 0x9CAB, 0x9CAD, 0x9CAE, 0x9CB0, 0x9CB1, 0x9CB2, /* 0xE0 */
+ 0x9CB3, 0x9CB4, 0x9CB5, 0x9CB6, 0x9CB7, 0x9CBA, 0x9CBB, 0x9CBC, /* 0xF0 */
+ 0x9CBD, 0x9CC4, 0x9CC5, 0x9CC6, 0x9CC7, 0x9CCA, 0x9CCB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9C3C, 0x9C3D, 0x9C3E, 0x9C3F, 0x9C40, 0x9C41, 0x9C42, 0x9C43, /* 0x40 */
+ 0x9C44, 0x9C45, 0x9C46, 0x9C47, 0x9C48, 0x9C49, 0x9C4A, 0x9C4B, /* 0x40 */
+ 0x9C4C, 0x9C4D, 0x9C4E, 0x9C4F, 0x9C50, 0x9C51, 0x9C52, 0x9C53, /* 0x50 */
+ 0x9C54, 0x9C55, 0x9C56, 0x9C57, 0x9C58, 0x9C59, 0x9C5A, 0x9C5B, /* 0x50 */
+ 0x9C5C, 0x9C5D, 0x9C5E, 0x9C5F, 0x9C60, 0x9C61, 0x9C62, 0x9C63, /* 0x60 */
+ 0x9C64, 0x9C65, 0x9C66, 0x9C67, 0x9C68, 0x9C69, 0x9C6A, 0x9C6B, /* 0x60 */
+ 0x9C6C, 0x9C6D, 0x9C6E, 0x9C6F, 0x9C70, 0x9C71, 0x9C72, 0x9C73, /* 0x70 */
+ 0x9C74, 0x9C75, 0x9C76, 0x9C77, 0x9C78, 0x9C79, 0x9C7A, 0, /* 0x70 */
+ 0x9C7B, 0x9C7D, 0x9C7E, 0x9C80, 0x9C83, 0x9C84, 0x9C89, 0x9C8A, /* 0x80 */
+ 0x9C8C, 0x9C8F, 0x9C93, 0x9C96, 0x9C97, 0x9C98, 0x9C99, 0x9C9D, /* 0x80 */
+ 0x9CAA, 0x9CAC, 0x9CAF, 0x9CB9, 0x9CBE, 0x9CBF, 0x9CC0, 0x9CC1, /* 0x90 */
+ 0x9CC2, 0x9CC8, 0x9CC9, 0x9CD1, 0x9CD2, 0x9CDA, 0x9CDB, 0x9CE0, /* 0x90 */
+ 0x9CE1, 0x9CCC, 0x9CCD, 0x9CCE, 0x9CCF, 0x9CD0, 0x9CD3, 0x9CD4, /* 0xA0 */
+ 0x9CD5, 0x9CD7, 0x9CD8, 0x9CD9, 0x9CDC, 0x9CDD, 0x9CDF, 0x9CE2, /* 0xA0 */
+ 0x977C, 0x9785, 0x9791, 0x9792, 0x9794, 0x97AF, 0x97AB, 0x97A3, /* 0xB0 */
+ 0x97B2, 0x97B4, 0x9AB1, 0x9AB0, 0x9AB7, 0x9E58, 0x9AB6, 0x9ABA, /* 0xB0 */
+ 0x9ABC, 0x9AC1, 0x9AC0, 0x9AC5, 0x9AC2, 0x9ACB, 0x9ACC, 0x9AD1, /* 0xC0 */
+ 0x9B45, 0x9B43, 0x9B47, 0x9B49, 0x9B48, 0x9B4D, 0x9B51, 0x98E8, /* 0xC0 */
+ 0x990D, 0x992E, 0x9955, 0x9954, 0x9ADF, 0x9AE1, 0x9AE6, 0x9AEF, /* 0xD0 */
+ 0x9AEB, 0x9AFB, 0x9AED, 0x9AF9, 0x9B08, 0x9B0F, 0x9B13, 0x9B1F, /* 0xD0 */
+ 0x9B23, 0x9EBD, 0x9EBE, 0x7E3B, 0x9E82, 0x9E87, 0x9E88, 0x9E8B, /* 0xE0 */
+ 0x9E92, 0x93D6, 0x9E9D, 0x9E9F, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EE0, /* 0xE0 */
+ 0x9EDF, 0x9EE2, 0x9EE9, 0x9EE7, 0x9EE5, 0x9EEA, 0x9EEF, 0x9F22, /* 0xF0 */
+ 0x9F2C, 0x9F2F, 0x9F39, 0x9F37, 0x9F3D, 0x9F3E, 0x9F44 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9CE3, 0x9CE4, 0x9CE5, 0x9CE6, 0x9CE7, 0x9CE8, 0x9CE9, 0x9CEA, /* 0x40 */
+ 0x9CEB, 0x9CEC, 0x9CED, 0x9CEE, 0x9CEF, 0x9CF0, 0x9CF1, 0x9CF2, /* 0x40 */
+ 0x9CF3, 0x9CF4, 0x9CF5, 0x9CF6, 0x9CF7, 0x9CF8, 0x9CF9, 0x9CFA, /* 0x50 */
+ 0x9CFB, 0x9CFC, 0x9CFD, 0x9CFE, 0x9CFF, 0x9D00, 0x9D01, 0x9D02, /* 0x50 */
+ 0x9D03, 0x9D04, 0x9D05, 0x9D06, 0x9D07, 0x9D08, 0x9D09, 0x9D0A, /* 0x60 */
+ 0x9D0B, 0x9D0C, 0x9D0D, 0x9D0E, 0x9D0F, 0x9D10, 0x9D11, 0x9D12, /* 0x60 */
+ 0x9D13, 0x9D14, 0x9D15, 0x9D16, 0x9D17, 0x9D18, 0x9D19, 0x9D1A, /* 0x70 */
+ 0x9D1B, 0x9D1C, 0x9D1D, 0x9D1E, 0x9D1F, 0x9D20, 0x9D21, 0, /* 0x70 */
+ 0x9D22, 0x9D23, 0x9D24, 0x9D25, 0x9D26, 0x9D27, 0x9D28, 0x9D29, /* 0x80 */
+ 0x9D2A, 0x9D2B, 0x9D2C, 0x9D2D, 0x9D2E, 0x9D2F, 0x9D30, 0x9D31, /* 0x80 */
+ 0x9D32, 0x9D33, 0x9D34, 0x9D35, 0x9D36, 0x9D37, 0x9D38, 0x9D39, /* 0x90 */
+ 0x9D3A, 0x9D3B, 0x9D3C, 0x9D3D, 0x9D3E, 0x9D3F, 0x9D40, 0x9D41, /* 0x90 */
+ 0x9D42 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9D43, 0x9D44, 0x9D45, 0x9D46, 0x9D47, 0x9D48, 0x9D49, 0x9D4A, /* 0x40 */
+ 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, 0x9D4F, 0x9D50, 0x9D51, 0x9D52, /* 0x40 */
+ 0x9D53, 0x9D54, 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0x9D5A, /* 0x50 */
+ 0x9D5B, 0x9D5C, 0x9D5D, 0x9D5E, 0x9D5F, 0x9D60, 0x9D61, 0x9D62, /* 0x50 */
+ 0x9D63, 0x9D64, 0x9D65, 0x9D66, 0x9D67, 0x9D68, 0x9D69, 0x9D6A, /* 0x60 */
+ 0x9D6B, 0x9D6C, 0x9D6D, 0x9D6E, 0x9D6F, 0x9D70, 0x9D71, 0x9D72, /* 0x60 */
+ 0x9D73, 0x9D74, 0x9D75, 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, /* 0x70 */
+ 0x9D7B, 0x9D7C, 0x9D7D, 0x9D7E, 0x9D7F, 0x9D80, 0x9D81, 0, /* 0x70 */
+ 0x9D82, 0x9D83, 0x9D84, 0x9D85, 0x9D86, 0x9D87, 0x9D88, 0x9D89, /* 0x80 */
+ 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, 0x9D91, /* 0x80 */
+ 0x9D92, 0x9D93, 0x9D94, 0x9D95, 0x9D96, 0x9D97, 0x9D98, 0x9D99, /* 0x90 */
+ 0x9D9A, 0x9D9B, 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, 0x9DA0, 0x9DA1, /* 0x90 */
+ 0x9DA2 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_FA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9DA3, 0x9DA4, 0x9DA5, 0x9DA6, 0x9DA7, 0x9DA8, 0x9DA9, 0x9DAA, /* 0x40 */
+ 0x9DAB, 0x9DAC, 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0x9DB1, 0x9DB2, /* 0x40 */
+ 0x9DB3, 0x9DB4, 0x9DB5, 0x9DB6, 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, /* 0x50 */
+ 0x9DBB, 0x9DBC, 0x9DBD, 0x9DBE, 0x9DBF, 0x9DC0, 0x9DC1, 0x9DC2, /* 0x50 */
+ 0x9DC3, 0x9DC4, 0x9DC5, 0x9DC6, 0x9DC7, 0x9DC8, 0x9DC9, 0x9DCA, /* 0x60 */
+ 0x9DCB, 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, 0x9DD1, 0x9DD2, /* 0x60 */
+ 0x9DD3, 0x9DD4, 0x9DD5, 0x9DD6, 0x9DD7, 0x9DD8, 0x9DD9, 0x9DDA, /* 0x70 */
+ 0x9DDB, 0x9DDC, 0x9DDD, 0x9DDE, 0x9DDF, 0x9DE0, 0x9DE1, 0, /* 0x70 */
+ 0x9DE2, 0x9DE3, 0x9DE4, 0x9DE5, 0x9DE6, 0x9DE7, 0x9DE8, 0x9DE9, /* 0x80 */
+ 0x9DEA, 0x9DEB, 0x9DEC, 0x9DED, 0x9DEE, 0x9DEF, 0x9DF0, 0x9DF1, /* 0x80 */
+ 0x9DF2, 0x9DF3, 0x9DF4, 0x9DF5, 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, /* 0x90 */
+ 0x9DFA, 0x9DFB, 0x9DFC, 0x9DFD, 0x9DFE, 0x9DFF, 0x9E00, 0x9E01, /* 0x90 */
+ 0x9E02 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_FB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9E03, 0x9E04, 0x9E05, 0x9E06, 0x9E07, 0x9E08, 0x9E09, 0x9E0A, /* 0x40 */
+ 0x9E0B, 0x9E0C, 0x9E0D, 0x9E0E, 0x9E0F, 0x9E10, 0x9E11, 0x9E12, /* 0x40 */
+ 0x9E13, 0x9E14, 0x9E15, 0x9E16, 0x9E17, 0x9E18, 0x9E19, 0x9E1A, /* 0x50 */
+ 0x9E1B, 0x9E1C, 0x9E1D, 0x9E1E, 0x9E24, 0x9E27, 0x9E2E, 0x9E30, /* 0x50 */
+ 0x9E34, 0x9E3B, 0x9E3C, 0x9E40, 0x9E4D, 0x9E50, 0x9E52, 0x9E53, /* 0x60 */
+ 0x9E54, 0x9E56, 0x9E59, 0x9E5D, 0x9E5F, 0x9E60, 0x9E61, 0x9E62, /* 0x60 */
+ 0x9E65, 0x9E6E, 0x9E6F, 0x9E72, 0x9E74, 0x9E75, 0x9E76, 0x9E77, /* 0x70 */
+ 0x9E78, 0x9E79, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E7D, 0x9E80, 0, /* 0x70 */
+ 0x9E81, 0x9E83, 0x9E84, 0x9E85, 0x9E86, 0x9E89, 0x9E8A, 0x9E8C, /* 0x80 */
+ 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, 0x9E91, 0x9E94, 0x9E95, 0x9E96, /* 0x80 */
+ 0x9E97, 0x9E98, 0x9E99, 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9E, 0x9EA0, /* 0x90 */
+ 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA5, 0x9EA7, 0x9EA8, 0x9EA9, /* 0x90 */
+ 0x9EAA /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_FC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9EAB, 0x9EAC, 0x9EAD, 0x9EAE, 0x9EAF, 0x9EB0, 0x9EB1, 0x9EB2, /* 0x40 */
+ 0x9EB3, 0x9EB5, 0x9EB6, 0x9EB7, 0x9EB9, 0x9EBA, 0x9EBC, 0x9EBF, /* 0x40 */
+ 0x9EC0, 0x9EC1, 0x9EC2, 0x9EC3, 0x9EC5, 0x9EC6, 0x9EC7, 0x9EC8, /* 0x50 */
+ 0x9ECA, 0x9ECB, 0x9ECC, 0x9ED0, 0x9ED2, 0x9ED3, 0x9ED5, 0x9ED6, /* 0x50 */
+ 0x9ED7, 0x9ED9, 0x9EDA, 0x9EDE, 0x9EE1, 0x9EE3, 0x9EE4, 0x9EE6, /* 0x60 */
+ 0x9EE8, 0x9EEB, 0x9EEC, 0x9EED, 0x9EEE, 0x9EF0, 0x9EF1, 0x9EF2, /* 0x60 */
+ 0x9EF3, 0x9EF4, 0x9EF5, 0x9EF6, 0x9EF7, 0x9EF8, 0x9EFA, 0x9EFD, /* 0x70 */
+ 0x9EFF, 0x9F00, 0x9F01, 0x9F02, 0x9F03, 0x9F04, 0x9F05, 0, /* 0x70 */
+ 0x9F06, 0x9F07, 0x9F08, 0x9F09, 0x9F0A, 0x9F0C, 0x9F0F, 0x9F11, /* 0x80 */
+ 0x9F12, 0x9F14, 0x9F15, 0x9F16, 0x9F18, 0x9F1A, 0x9F1B, 0x9F1C, /* 0x80 */
+ 0x9F1D, 0x9F1E, 0x9F1F, 0x9F21, 0x9F23, 0x9F24, 0x9F25, 0x9F26, /* 0x90 */
+ 0x9F27, 0x9F28, 0x9F29, 0x9F2A, 0x9F2B, 0x9F2D, 0x9F2E, 0x9F30, /* 0x90 */
+ 0x9F31 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_FD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9F32, 0x9F33, 0x9F34, 0x9F35, 0x9F36, 0x9F38, 0x9F3A, 0x9F3C, /* 0x40 */
+ 0x9F3F, 0x9F40, 0x9F41, 0x9F42, 0x9F43, 0x9F45, 0x9F46, 0x9F47, /* 0x40 */
+ 0x9F48, 0x9F49, 0x9F4A, 0x9F4B, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F4F, /* 0x50 */
+ 0x9F52, 0x9F53, 0x9F54, 0x9F55, 0x9F56, 0x9F57, 0x9F58, 0x9F59, /* 0x50 */
+ 0x9F5A, 0x9F5B, 0x9F5C, 0x9F5D, 0x9F5E, 0x9F5F, 0x9F60, 0x9F61, /* 0x60 */
+ 0x9F62, 0x9F63, 0x9F64, 0x9F65, 0x9F66, 0x9F67, 0x9F68, 0x9F69, /* 0x60 */
+ 0x9F6A, 0x9F6B, 0x9F6C, 0x9F6D, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, /* 0x70 */
+ 0x9F72, 0x9F73, 0x9F74, 0x9F75, 0x9F76, 0x9F77, 0x9F78, 0, /* 0x70 */
+ 0x9F79, 0x9F7A, 0x9F7B, 0x9F7C, 0x9F7D, 0x9F7E, 0x9F81, 0x9F82, /* 0x80 */
+ 0x9F8D, 0x9F8E, 0x9F8F, 0x9F90, 0x9F91, 0x9F92, 0x9F93, 0x9F94, /* 0x80 */
+ 0x9F95, 0x9F96, 0x9F97, 0x9F98, 0x9F9C, 0x9F9D, 0x9F9E, 0x9FA1, /* 0x90 */
+ 0x9FA2, 0x9FA3, 0x9FA4, 0x9FA5, 0xF92C, 0xF979, 0xF995, 0xF9E7, /* 0x90 */
+ 0xF9F1 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBK_FE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFA0C, 0xFA0D, 0xFA0E, 0xFA0F, 0xFA11, 0xFA13, 0xFA14, 0xFA18, /* 0x40 */
+ 0xFA1F, 0xFA20, 0xFA21, 0xFA23, 0xFA24, 0xFA27, 0xFA28, 0xFA29, /* 0x40 */
+ 0x2E81, 0, 0, 0, 0x2E84, 0x3473, 0x3447, 0x2E88, /* 0x50 */
+ 0x2E8B, 0, 0x359E, 0x361A, 0x360E, 0x2E8C, 0x2E97, 0x396E, /* 0x50 */
+ 0x3918, 0, 0x39CF, 0x39DF, 0x3A73, 0x39D0, 0, 0, /* 0x60 */
+ 0x3B4E, 0x3C6E, 0x3CE0, 0x2EA7, 0, 0, 0x2EAA, 0x4056, /* 0x60 */
+ 0x415F, 0x2EAE, 0x4337, 0x2EB3, 0x2EB6, 0x2EB7, 0, 0x43B1, /* 0x70 */
+ 0x43AC, 0x2EBB, 0x43DD, 0x44D6, 0x4661, 0x464C, 0, 0, /* 0x70 */
+ 0x4723, 0x4729, 0x477C, 0x478D, 0x2ECA, 0x4947, 0x497A, 0x497D, /* 0x80 */
+ 0x4982, 0x4983, 0x4985, 0x4986, 0x499F, 0x499B, 0x49B7, 0x49B6, /* 0x80 */
+ 0, 0, 0x4CA3, 0x4C9F, 0x4CA0, 0x4CA1, 0x4C77, 0x4CA2, /* 0x90 */
+ 0x4D13, 0x4D14, 0x4D15, 0x4D16, 0x4D17, 0x4D18, 0x4D19, 0x4DAE /* 0x90 */
+};
diff --git a/sal/textenc/tcvtscn2.tab b/sal/textenc/tcvtscn2.tab
new file mode 100644
index 000000000..30fc485a7
--- /dev/null
+++ b/sal/textenc/tcvtscn2.tab
@@ -0,0 +1,4454 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the UniCode to DBCS tables for the following */
+/* chinese simplified (China) charsets: */
+/* GB (GB2312), GBK, MS936, APPLE_CHINSIMP */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xA1E8, 0, 0, 0xA1EC, /* 0xA0 */
+ 0xA1A7, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xA1E3, 0xA1C0, 0, 0, 0, 0, 0, 0xA1A4, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1C1, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xA8A4, 0xA8A2, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xA8A8, 0xA8A6, 0xA8BA, 0, 0xA8AC, 0xA8AA, 0, 0, /* 0xE0 */
+ 0, 0, 0xA8B0, 0xA8AE, 0, 0, 0, 0xA1C2, /* 0xF0 */
+ 0, 0xA8B4, 0xA8B2, 0, 0xA8B9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLECHINSIMP_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x00A0, 0, 0xA1E9, 0xA1EA, 0xA1E8, 0xA3A4, 0, 0xA1EC, /* 0xA0 */
+ 0xA1A7, 0x00FD, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xA1E3, 0xA1C0, 0, 0, 0, 0, 0, 0xA1A4, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1C1, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xA8A4, 0xA8A2, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xA8A8, 0xA8A6, 0xA8BA, 0, 0xA8AC, 0xA8AA, 0, 0, /* 0xE0 */
+ 0, 0, 0xA8B0, 0xA8AE, 0, 0, 0, 0xA1C2, /* 0xF0 */
+ 0, 0xA8B4, 0xA8B2, 0, 0xA8B9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_01[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA8A1, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xA8A5, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xA8A7, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xA8A9, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xA8BD, 0, 0, 0, /* 0x40 */
+ 0xA8BE, 0, 0, 0, 0, 0xA8AD, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xA8B1, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xA8A3, 0, /* 0xC0 */
+ 0xA8AB, 0, 0xA8AF, 0, 0xA8B3, 0, 0xA8B5, 0, /* 0xD0 */
+ 0xA8B6, 0, 0xA8B7, 0, 0xA8B8 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_02[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA8BB, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xA8C0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1A6, /* 0xC0 */
+ 0, 0xA1A5, 0xA840, 0xA841, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xA842 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_02[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA8BB, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xA8C0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1A6, /* 0xC0 */
+ 0, 0xA1A5 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_03[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA6A1, 0xA6A2, 0xA6A3, 0xA6A4, 0xA6A5, 0xA6A6, 0xA6A7, /* 0x90 */
+ 0xA6A8, 0xA6A9, 0xA6AA, 0xA6AB, 0xA6AC, 0xA6AD, 0xA6AE, 0xA6AF, /* 0x90 */
+ 0xA6B0, 0xA6B1, 0, 0xA6B2, 0xA6B3, 0xA6B4, 0xA6B5, 0xA6B6, /* 0xA0 */
+ 0xA6B7, 0xA6B8, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xA6C1, 0xA6C2, 0xA6C3, 0xA6C4, 0xA6C5, 0xA6C6, 0xA6C7, /* 0xB0 */
+ 0xA6C8, 0xA6C9, 0xA6CA, 0xA6CB, 0xA6CC, 0xA6CD, 0xA6CE, 0xA6CF, /* 0xB0 */
+ 0xA6D0, 0xA6D1, 0, 0xA6D2, 0xA6D3, 0xA6D4, 0xA6D5, 0xA6D6, /* 0xC0 */
+ 0xA6D7, 0xA6D8 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_04[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA7A7, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xA7A1, 0xA7A2, 0xA7A3, 0xA7A4, 0xA7A5, 0xA7A6, 0xA7A8, 0xA7A9, /* 0x10 */
+ 0xA7AA, 0xA7AB, 0xA7AC, 0xA7AD, 0xA7AE, 0xA7AF, 0xA7B0, 0xA7B1, /* 0x10 */
+ 0xA7B2, 0xA7B3, 0xA7B4, 0xA7B5, 0xA7B6, 0xA7B7, 0xA7B8, 0xA7B9, /* 0x20 */
+ 0xA7BA, 0xA7BB, 0xA7BC, 0xA7BD, 0xA7BE, 0xA7BF, 0xA7C0, 0xA7C1, /* 0x20 */
+ 0xA7D1, 0xA7D2, 0xA7D3, 0xA7D4, 0xA7D5, 0xA7D6, 0xA7D8, 0xA7D9, /* 0x30 */
+ 0xA7DA, 0xA7DB, 0xA7DC, 0xA7DD, 0xA7DE, 0xA7DF, 0xA7E0, 0xA7E1, /* 0x30 */
+ 0xA7E2, 0xA7E3, 0xA7E4, 0xA7E5, 0xA7E6, 0xA7E7, 0xA7E8, 0xA7E9, /* 0x40 */
+ 0xA7EA, 0xA7EB, 0xA7EC, 0xA7ED, 0xA7EE, 0xA7EF, 0xA7F0, 0xA7F1, /* 0x40 */
+ 0, 0xA7D7 /* 0x50 */
+ /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLECHINSIMP_1E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x30 */
+ 0xA8BC, /* 0x30 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_20[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA95C, 0, 0, 0xA843, 0xA1AA, 0xA844, 0xA1AC, 0, /* 0x10 */
+ 0xA1AE, 0xA1AF, 0, 0, 0xA1B0, 0xA1B1, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xA845, 0xA1AD, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xA1EB, 0, 0xA1E4, 0xA1E5, 0, 0xA846, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xA1F9, 0, 0, 0xA3FE, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x0080 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_20[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1AA, 0xA1AA, 0xA1AC, 0, /* 0x10 */
+ 0xA1AE, 0xA1AF, 0, 0, 0xA1B0, 0xA1B1, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xA1AD, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xA1EB, 0, 0xA1E4, 0xA1E5, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xA1F9, 0, 0, 0xA3FE, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0x0080 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1E6, 0, 0xA847, 0, 0, /* 0x00 */
+ 0, 0xA848, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xA1ED, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xA959, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, /* 0x60 */
+ 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0, 0, 0, 0, /* 0x60 */
+ 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, /* 0x70 */
+ 0xA2A9, 0xA2AA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xA1FB, 0xA1FC, 0xA1FA, 0xA1FD, 0, 0, 0xA849, 0xA84A, /* 0x90 */
+ 0xA84B, 0xA84C /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1E6, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xA1ED, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, /* 0x60 */
+ 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0, 0, 0, 0, /* 0x60 */
+ 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, /* 0x70 */
+ 0xA2A9, 0xA2AA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xA1FB, 0xA1FC, 0xA1FA, 0xA1FD /* 0x90 */
+ /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLECHINSIMP_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1E6, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xA1ED, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x00FE, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, /* 0x60 */
+ 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0, 0, 0, 0, /* 0x60 */
+ 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, /* 0x70 */
+ 0xA2A9, 0xA2AA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xA1FB, 0xA1FC, 0xA1FA, 0xA1FD /* 0x90 */
+ /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xA1CA, 0, 0, 0, 0, 0, 0, 0xA1C7, /* 0x00 */
+ 0, 0xA1C6, 0, 0, 0, 0xA84D, 0, 0, /* 0x10 */
+ 0, 0, 0xA1CC, 0, 0, 0xA1D8, 0xA1DE, 0xA84E, /* 0x10 */
+ 0xA1CF, 0, 0, 0xA84F, 0, 0xA1CE, 0, 0xA1C4, /* 0x20 */
+ 0xA1C5, 0xA1C9, 0xA1C8, 0xA1D2, 0, 0, 0xA1D3, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xA1E0, 0xA1DF, 0xA1C3, 0xA1CB, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xA1D7, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xA1D6, 0, 0, 0, 0xA1D5, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xA850, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA1D9, 0xA1D4, 0, 0, 0xA1DC, 0xA1DD, 0xA851, 0xA852, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xA1DA, 0xA1DB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xA892, 0, 0, /* 0x90 */
+ 0, 0xA1D1, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xA1CD, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA853, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1AD /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xA1CA, 0, 0, 0, 0, 0, 0, 0xA1C7, /* 0x00 */
+ 0, 0xA1C6, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xA1CC, 0, 0, 0xA1D8, 0xA1DE, 0, /* 0x10 */
+ 0xA1CF, 0, 0, 0, 0, 0xA1CE, 0, 0xA1C4, /* 0x20 */
+ 0xA1C5, 0xA1C9, 0xA1C8, 0xA1D2, 0, 0, 0xA1D3, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xA1E0, 0xA1DF, 0xA1C3, 0xA1CB, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xA1D7, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xA1D6, 0, 0, 0, 0xA1D5, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA1D9, 0xA1D4, 0, 0, 0xA1DC, 0xA1DD, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xA1DA, 0xA1DB, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xA1D1, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xA1CD, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1AD /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_23[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1D0 /* 0x10 */
+ /* 0x10 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_24[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, 0xA2DE, 0xA2DF, 0xA2E0, /* 0x60 */
+ 0xA2E1, 0xA2E2, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xA2C5, 0xA2C6, 0xA2C7, 0xA2C8, /* 0x70 */
+ 0xA2C9, 0xA2CA, 0xA2CB, 0xA2CC, 0xA2CD, 0xA2CE, 0xA2CF, 0xA2D0, /* 0x70 */
+ 0xA2D1, 0xA2D2, 0xA2D3, 0xA2D4, 0xA2D5, 0xA2D6, 0xA2D7, 0xA2D8, /* 0x80 */
+ 0xA2B1, 0xA2B2, 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, 0xA2B7, 0xA2B8, /* 0x80 */
+ 0xA2B9, 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, 0xA2BF, 0xA2C0, /* 0x90 */
+ 0xA2C1, 0xA2C2, 0xA2C3, 0xA2C4 /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_25[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA9A4, 0xA9A5, 0xA9A6, 0xA9A7, 0xA9A8, 0xA9A9, 0xA9AA, 0xA9AB, /* 0x00 */
+ 0xA9AC, 0xA9AD, 0xA9AE, 0xA9AF, 0xA9B0, 0xA9B1, 0xA9B2, 0xA9B3, /* 0x00 */
+ 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, 0xA9B8, 0xA9B9, 0xA9BA, 0xA9BB, /* 0x10 */
+ 0xA9BC, 0xA9BD, 0xA9BE, 0xA9BF, 0xA9C0, 0xA9C1, 0xA9C2, 0xA9C3, /* 0x10 */
+ 0xA9C4, 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, 0xA9C9, 0xA9CA, 0xA9CB, /* 0x20 */
+ 0xA9CC, 0xA9CD, 0xA9CE, 0xA9CF, 0xA9D0, 0xA9D1, 0xA9D2, 0xA9D3, /* 0x20 */
+ 0xA9D4, 0xA9D5, 0xA9D6, 0xA9D7, 0xA9D8, 0xA9D9, 0xA9DA, 0xA9DB, /* 0x30 */
+ 0xA9DC, 0xA9DD, 0xA9DE, 0xA9DF, 0xA9E0, 0xA9E1, 0xA9E2, 0xA9E3, /* 0x30 */
+ 0xA9E4, 0xA9E5, 0xA9E6, 0xA9E7, 0xA9E8, 0xA9E9, 0xA9EA, 0xA9EB, /* 0x40 */
+ 0xA9EC, 0xA9ED, 0xA9EE, 0xA9EF, 0, 0, 0, 0, /* 0x40 */
+ 0xA854, 0xA855, 0xA856, 0xA857, 0xA858, 0xA859, 0xA85A, 0xA85B, /* 0x50 */
+ 0xA85C, 0xA85D, 0xA85E, 0xA85F, 0xA860, 0xA861, 0xA862, 0xA863, /* 0x50 */
+ 0xA864, 0xA865, 0xA866, 0xA867, 0xA868, 0xA869, 0xA86A, 0xA86B, /* 0x60 */
+ 0xA86C, 0xA86D, 0xA86E, 0xA86F, 0xA870, 0xA871, 0xA872, 0xA873, /* 0x60 */
+ 0xA874, 0xA875, 0xA876, 0xA877, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xA878, 0xA879, 0xA87A, 0xA87B, 0xA87C, 0xA87D, 0xA87E, /* 0x80 */
+ 0xA880, 0xA881, 0xA882, 0xA883, 0xA884, 0xA885, 0xA886, 0xA887, /* 0x80 */
+ 0, 0, 0, 0xA888, 0xA889, 0xA88A, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xA1F6, 0xA1F5, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xA1F8, 0xA1F7, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xA88B, 0xA88C, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xA1F4, 0xA1F3, /* 0xC0 */
+ 0, 0, 0, 0xA1F0, 0, 0, 0xA1F2, 0xA1F1, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xA88D, 0xA88E, 0xA88F, 0xA890 /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_25[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA9A4, 0xA9A5, 0xA9A6, 0xA9A7, 0xA9A8, 0xA9A9, 0xA9AA, 0xA9AB, /* 0x00 */
+ 0xA9AC, 0xA9AD, 0xA9AE, 0xA9AF, 0xA9B0, 0xA9B1, 0xA9B2, 0xA9B3, /* 0x00 */
+ 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, 0xA9B8, 0xA9B9, 0xA9BA, 0xA9BB, /* 0x10 */
+ 0xA9BC, 0xA9BD, 0xA9BE, 0xA9BF, 0xA9C0, 0xA9C1, 0xA9C2, 0xA9C3, /* 0x10 */
+ 0xA9C4, 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, 0xA9C9, 0xA9CA, 0xA9CB, /* 0x20 */
+ 0xA9CC, 0xA9CD, 0xA9CE, 0xA9CF, 0xA9D0, 0xA9D1, 0xA9D2, 0xA9D3, /* 0x20 */
+ 0xA9D4, 0xA9D5, 0xA9D6, 0xA9D7, 0xA9D8, 0xA9D9, 0xA9DA, 0xA9DB, /* 0x30 */
+ 0xA9DC, 0xA9DD, 0xA9DE, 0xA9DF, 0xA9E0, 0xA9E1, 0xA9E2, 0xA9E3, /* 0x30 */
+ 0xA9E4, 0xA9E5, 0xA9E6, 0xA9E7, 0xA9E8, 0xA9E9, 0xA9EA, 0xA9EB, /* 0x40 */
+ 0xA9EC, 0xA9ED, 0xA9EE, 0xA9EF, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xA1F6, 0xA1F5, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xA1F8, 0xA1F7, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xA1F4, 0xA1F3, /* 0xC0 */
+ 0, 0, 0, 0xA1F0, 0, 0, 0xA1F2, 0xA1F1 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1EF, 0xA1EE, 0, /* 0x00 */
+ 0, 0xA891, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xA1E2, 0, 0xA1E1 /* 0x40 */
+ /* 0x40 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1EF, 0xA1EE, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xA1E2, 0, 0xA1E1 /* 0x40 */
+ /* 0x40 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_2E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE50, 0, 0, 0xFE54, 0, 0, 0, /* 0x80 */
+ 0xFE57, 0, 0, 0xFE58, 0xFE5D, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFE5E, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFE6B, /* 0xA0 */
+ 0, 0, 0xFE6E, 0, 0, 0, 0xFE71, 0, /* 0xA0 */
+ 0, 0, 0, 0xFE73, 0, 0, 0xFE74, 0xFE75, /* 0xB0 */
+ 0, 0, 0, 0xFE79, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xFE84 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A8, 0, 0xA1A9, 0xA965, 0xA996, /* 0x00 */
+ 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, /* 0x00 */
+ 0xA1BE, 0xA1BF, 0xA893, 0xA1FE, 0xA1B2, 0xA1B3, 0xA1BC, 0xA1BD, /* 0x10 */
+ 0, 0, 0, 0, 0xA1AB, 0xA894, 0xA895, 0, /* 0x10 */
+ 0, 0xA940, 0xA941, 0xA942, 0xA943, 0xA944, 0xA945, 0xA946, /* 0x20 */
+ 0xA947, 0xA948, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, 0xA4A5, 0xA4A6, 0xA4A7, /* 0x40 */
+ 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, 0xA4AC, 0xA4AD, 0xA4AE, 0xA4AF, /* 0x40 */
+ 0xA4B0, 0xA4B1, 0xA4B2, 0xA4B3, 0xA4B4, 0xA4B5, 0xA4B6, 0xA4B7, /* 0x50 */
+ 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, 0xA4BE, 0xA4BF, /* 0x50 */
+ 0xA4C0, 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, /* 0x60 */
+ 0xA4C8, 0xA4C9, 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, /* 0x60 */
+ 0xA4D0, 0xA4D1, 0xA4D2, 0xA4D3, 0xA4D4, 0xA4D5, 0xA4D6, 0xA4D7, /* 0x70 */
+ 0xA4D8, 0xA4D9, 0xA4DA, 0xA4DB, 0xA4DC, 0xA4DD, 0xA4DE, 0xA4DF, /* 0x70 */
+ 0xA4E0, 0xA4E1, 0xA4E2, 0xA4E3, 0xA4E4, 0xA4E5, 0xA4E6, 0xA4E7, /* 0x80 */
+ 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, 0xA4ED, 0xA4EE, 0xA4EF, /* 0x80 */
+ 0xA4F0, 0xA4F1, 0xA4F2, 0xA4F3, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xA961, 0xA962, 0xA966, 0xA967, 0, /* 0x90 */
+ 0, 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, 0xA5A5, 0xA5A6, 0xA5A7, /* 0xA0 */
+ 0xA5A8, 0xA5A9, 0xA5AA, 0xA5AB, 0xA5AC, 0xA5AD, 0xA5AE, 0xA5AF, /* 0xA0 */
+ 0xA5B0, 0xA5B1, 0xA5B2, 0xA5B3, 0xA5B4, 0xA5B5, 0xA5B6, 0xA5B7, /* 0xB0 */
+ 0xA5B8, 0xA5B9, 0xA5BA, 0xA5BB, 0xA5BC, 0xA5BD, 0xA5BE, 0xA5BF, /* 0xB0 */
+ 0xA5C0, 0xA5C1, 0xA5C2, 0xA5C3, 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, /* 0xC0 */
+ 0xA5C8, 0xA5C9, 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, /* 0xC0 */
+ 0xA5D0, 0xA5D1, 0xA5D2, 0xA5D3, 0xA5D4, 0xA5D5, 0xA5D6, 0xA5D7, /* 0xD0 */
+ 0xA5D8, 0xA5D9, 0xA5DA, 0xA5DB, 0xA5DC, 0xA5DD, 0xA5DE, 0xA5DF, /* 0xD0 */
+ 0xA5E0, 0xA5E1, 0xA5E2, 0xA5E3, 0xA5E4, 0xA5E5, 0xA5E6, 0xA5E7, /* 0xE0 */
+ 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, 0xA5ED, 0xA5EE, 0xA5EF, /* 0xE0 */
+ 0xA5F0, 0xA5F1, 0xA5F2, 0xA5F3, 0xA5F4, 0xA5F5, 0xA5F6, 0, /* 0xF0 */
+ 0, 0, 0, 0xA1A4, 0xA960, 0xA963, 0xA964 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A8, 0, 0xA1A9, 0, 0, /* 0x00 */
+ 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, /* 0x00 */
+ 0xA1BE, 0xA1BF, 0, 0xA1FE, 0xA1B2, 0xA1B3, 0xA1BC, 0xA1BD, /* 0x10 */
+ 0, 0, 0, 0, 0xA1AB, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, 0xA4A5, 0xA4A6, 0xA4A7, /* 0x40 */
+ 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, 0xA4AC, 0xA4AD, 0xA4AE, 0xA4AF, /* 0x40 */
+ 0xA4B0, 0xA4B1, 0xA4B2, 0xA4B3, 0xA4B4, 0xA4B5, 0xA4B6, 0xA4B7, /* 0x50 */
+ 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, 0xA4BE, 0xA4BF, /* 0x50 */
+ 0xA4C0, 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, /* 0x60 */
+ 0xA4C8, 0xA4C9, 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, /* 0x60 */
+ 0xA4D0, 0xA4D1, 0xA4D2, 0xA4D3, 0xA4D4, 0xA4D5, 0xA4D6, 0xA4D7, /* 0x70 */
+ 0xA4D8, 0xA4D9, 0xA4DA, 0xA4DB, 0xA4DC, 0xA4DD, 0xA4DE, 0xA4DF, /* 0x70 */
+ 0xA4E0, 0xA4E1, 0xA4E2, 0xA4E3, 0xA4E4, 0xA4E5, 0xA4E6, 0xA4E7, /* 0x80 */
+ 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, 0xA4ED, 0xA4EE, 0xA4EF, /* 0x80 */
+ 0xA4F0, 0xA4F1, 0xA4F2, 0xA4F3, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, 0xA5A5, 0xA5A6, 0xA5A7, /* 0xA0 */
+ 0xA5A8, 0xA5A9, 0xA5AA, 0xA5AB, 0xA5AC, 0xA5AD, 0xA5AE, 0xA5AF, /* 0xA0 */
+ 0xA5B0, 0xA5B1, 0xA5B2, 0xA5B3, 0xA5B4, 0xA5B5, 0xA5B6, 0xA5B7, /* 0xB0 */
+ 0xA5B8, 0xA5B9, 0xA5BA, 0xA5BB, 0xA5BC, 0xA5BD, 0xA5BE, 0xA5BF, /* 0xB0 */
+ 0xA5C0, 0xA5C1, 0xA5C2, 0xA5C3, 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, /* 0xC0 */
+ 0xA5C8, 0xA5C9, 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, /* 0xC0 */
+ 0xA5D0, 0xA5D1, 0xA5D2, 0xA5D3, 0xA5D4, 0xA5D5, 0xA5D6, 0xA5D7, /* 0xD0 */
+ 0xA5D8, 0xA5D9, 0xA5DA, 0xA5DB, 0xA5DC, 0xA5DD, 0xA5DE, 0xA5DF, /* 0xD0 */
+ 0xA5E0, 0xA5E1, 0xA5E2, 0xA5E3, 0xA5E4, 0xA5E5, 0xA5E6, 0xA5E7, /* 0xE0 */
+ 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, 0xA5ED, 0xA5EE, 0xA5EF, /* 0xE0 */
+ 0xA5F0, 0xA5F1, 0xA5F2, 0xA5F3, 0xA5F4, 0xA5F5, 0xA5F6, 0, /* 0xF0 */
+ 0, 0, 0, 0xA1A4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_31[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA8C5, 0xA8C6, 0xA8C7, /* 0x00 */
+ 0xA8C8, 0xA8C9, 0xA8CA, 0xA8CB, 0xA8CC, 0xA8CD, 0xA8CE, 0xA8CF, /* 0x00 */
+ 0xA8D0, 0xA8D1, 0xA8D2, 0xA8D3, 0xA8D4, 0xA8D5, 0xA8D6, 0xA8D7, /* 0x10 */
+ 0xA8D8, 0xA8D9, 0xA8DA, 0xA8DB, 0xA8DC, 0xA8DD, 0xA8DE, 0xA8DF, /* 0x10 */
+ 0xA8E0, 0xA8E1, 0xA8E2, 0xA8E3, 0xA8E4, 0xA8E5, 0xA8E6, 0xA8E7, /* 0x20 */
+ 0xA8E8, 0xA8E9 /* 0x20 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* GB only from 32_20 to 32_29 */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA2E5, 0xA2E6, 0xA2E7, 0xA2E8, 0xA2E9, 0xA2EA, 0xA2EB, 0xA2EC, /* 0x20 */
+ 0xA2ED, 0xA2EE, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xA95A, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xA949 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x80 */
+ 0xA94A, 0xA94B, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xA94C, 0xA94D, 0xA94E, 0, /* 0x90 */
+ 0, 0xA94F, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xA950, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xA951, 0, /* 0xC0 */
+ 0, 0xA952, 0xA953, 0, 0, 0xA954 /* 0xD0 */
+ /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_34[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE56, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xFE55 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_35[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x90 */
+ 0xFE5A /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_36[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xFE5C, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xFE5B /* 0x10 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_39[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0xFE60, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xFE5F, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFE62, /* 0xC0 */
+ 0xFE65, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFE63 /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_3A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE64 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_3B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x40 */
+ 0xFE68 /* 0x40 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_3C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x60 */
+ 0xFE69, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xFE6A /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_40[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE6F /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_41[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x50 */
+ 0xFE70 /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_43[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE72, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xFE78, 0, 0, 0, /* 0xA0 */
+ 0, 0xFE77, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xFE7A /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_44[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE7B /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_46[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x40 */
+ 0xFE7D, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xFE7C /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_47[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE80, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xFE81, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xFE82, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xFE83 /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_49[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE85, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xFE86, 0, 0, 0xFE87, 0, 0, /* 0x70 */
+ 0, 0, 0xFE88, 0xFE89, 0, 0xFE8A, 0xFE8B, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xFE8D, 0, 0, 0, 0xFE8C, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xFE8F, 0xFE8E /* 0xB0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_4C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE96, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFE93, /* 0x90 */
+ 0xFE94, 0xFE95, 0xFE97, 0xFE92 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_4D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFE98, 0xFE99, 0xFE9A, 0xFE9B, 0xFE9C, /* 0x10 */
+ 0xFE9D, 0xFE9E, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xFE9F /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2BB, 0xB6A1, 0x8140, 0xC6DF, 0x8141, 0x8142, 0x8143, 0xCDF2, /* 0x00 */
+ 0xD5C9, 0xC8FD, 0xC9CF, 0xCFC2, 0xD8A2, 0xB2BB, 0xD3EB, 0x8144, /* 0x00 */
+ 0xD8A4, 0xB3F3, 0x8145, 0xD7A8, 0xC7D2, 0xD8A7, 0xCAC0, 0x8146, /* 0x10 */
+ 0xC7F0, 0xB1FB, 0xD2B5, 0xB4D4, 0xB6AB, 0xCBBF, 0xD8A9, 0x8147, /* 0x10 */
+ 0x8148, 0x8149, 0xB6AA, 0x814A, 0xC1BD, 0xD1CF, 0x814B, 0xC9A5, /* 0x20 */
+ 0xD8AD, 0x814C, 0xB8F6, 0xD1BE, 0xE3DC, 0xD6D0, 0x814D, 0x814E, /* 0x20 */
+ 0xB7E1, 0x814F, 0xB4AE, 0x8150, 0xC1D9, 0x8151, 0xD8BC, 0x8152, /* 0x30 */
+ 0xCDE8, 0xB5A4, 0xCEAA, 0xD6F7, 0x8153, 0xC0F6, 0xBED9, 0xD8AF, /* 0x30 */
+ 0x8154, 0x8155, 0x8156, 0xC4CB, 0x8157, 0xBEC3, 0x8158, 0xD8B1, /* 0x40 */
+ 0xC3B4, 0xD2E5, 0x8159, 0xD6AE, 0xCEDA, 0xD5A7, 0xBAF5, 0xB7A6, /* 0x40 */
+ 0xC0D6, 0x815A, 0xC6B9, 0xC5D2, 0xC7C7, 0x815B, 0xB9D4, 0x815C, /* 0x50 */
+ 0xB3CB, 0xD2D2, 0x815D, 0x815E, 0xD8BF, 0xBEC5, 0xC6F2, 0xD2B2, /* 0x50 */
+ 0xCFB0, 0xCFE7, 0x815F, 0x8160, 0x8161, 0x8162, 0xCAE9, 0x8163, /* 0x60 */
+ 0x8164, 0xD8C0, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, 0x816A, /* 0x60 */
+ 0xC2F2, 0xC2D2, 0x816B, 0xC8E9, 0x816C, 0x816D, 0x816E, 0x816F, /* 0x70 */
+ 0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0xC7AC, 0x8176, /* 0x70 */
+ 0x8177, 0x8178, 0x8179, 0x817A, 0x817B, 0x817C, 0xC1CB, 0x817D, /* 0x80 */
+ 0xD3E8, 0xD5F9, 0x817E, 0xCAC2, 0xB6FE, 0xD8A1, 0xD3DA, 0xBFF7, /* 0x80 */
+ 0x8180, 0xD4C6, 0xBBA5, 0xD8C1, 0xCEE5, 0xBEAE, 0x8181, 0x8182, /* 0x90 */
+ 0xD8A8, 0x8183, 0xD1C7, 0xD0A9, 0x8184, 0x8185, 0x8186, 0xD8BD, /* 0x90 */
+ 0xD9EF, 0xCDF6, 0xBFBA, 0x8187, 0xBDBB, 0xBAA5, 0xD2E0, 0xB2FA, /* 0xA0 */
+ 0xBAE0, 0xC4B6, 0x8188, 0xCFED, 0xBEA9, 0xCDA4, 0xC1C1, 0x8189, /* 0xA0 */
+ 0x818A, 0x818B, 0xC7D7, 0xD9F1, 0x818C, 0xD9F4, 0x818D, 0x818E, /* 0xB0 */
+ 0x818F, 0x8190, 0xC8CB, 0xD8E9, 0x8191, 0x8192, 0x8193, 0xD2DA, /* 0xB0 */
+ 0xCAB2, 0xC8CA, 0xD8EC, 0xD8EA, 0xD8C6, 0xBDF6, 0xC6CD, 0xB3F0, /* 0xC0 */
+ 0x8194, 0xD8EB, 0xBDF1, 0xBDE9, 0x8195, 0xC8D4, 0xB4D3, 0x8196, /* 0xC0 */
+ 0x8197, 0xC2D8, 0x8198, 0xB2D6, 0xD7D0, 0xCACB, 0xCBFB, 0xD5CC, /* 0xD0 */
+ 0xB8B6, 0xCFC9, 0x8199, 0x819A, 0x819B, 0xD9DA, 0xD8F0, 0xC7AA, /* 0xD0 */
+ 0x819C, 0xD8EE, 0x819D, 0xB4FA, 0xC1EE, 0xD2D4, 0x819E, 0x819F, /* 0xE0 */
+ 0xD8ED, 0x81A0, 0xD2C7, 0xD8EF, 0xC3C7, 0x81A1, 0x81A2, 0x81A3, /* 0xE0 */
+ 0xD1F6, 0x81A4, 0xD6D9, 0xD8F2, 0x81A5, 0xD8F5, 0xBCFE, 0xBCDB, /* 0xF0 */
+ 0x81A6, 0x81A7, 0x81A8, 0xC8CE, 0x81A9, 0xB7DD, 0x81AA, 0xB7C2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x81AB, 0xC6F3, 0x81AC, 0x81AD, 0x81AE, 0x81AF, 0x81B0, 0x81B1, /* 0x00 */
+ 0x81B2, 0xD8F8, 0xD2C1, 0x81B3, 0x81B4, 0xCEE9, 0xBCBF, 0xB7FC, /* 0x00 */
+ 0xB7A5, 0xD0DD, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, 0xD6DA, /* 0x10 */
+ 0xD3C5, 0xBBEF, 0xBBE1, 0xD8F1, 0x81BA, 0x81BB, 0xC9A1, 0xCEB0, /* 0x10 */
+ 0xB4AB, 0x81BC, 0xD8F3, 0x81BD, 0xC9CB, 0xD8F6, 0xC2D7, 0xD8F7, /* 0x20 */
+ 0x81BE, 0x81BF, 0xCEB1, 0xD8F9, 0x81C0, 0x81C1, 0x81C2, 0xB2AE, /* 0x20 */
+ 0xB9C0, 0x81C3, 0xD9A3, 0x81C4, 0xB0E9, 0x81C5, 0xC1E6, 0x81C6, /* 0x30 */
+ 0xC9EC, 0x81C7, 0xCBC5, 0x81C8, 0xCBC6, 0xD9A4, 0x81C9, 0x81CA, /* 0x30 */
+ 0x81CB, 0x81CC, 0x81CD, 0xB5E8, 0x81CE, 0x81CF, 0xB5AB, 0x81D0, /* 0x40 */
+ 0x81D1, 0x81D2, 0x81D3, 0x81D4, 0x81D5, 0xCEBB, 0xB5CD, 0xD7A1, /* 0x40 */
+ 0xD7F4, 0xD3D3, 0x81D6, 0xCCE5, 0x81D7, 0xBACE, 0x81D8, 0xD9A2, /* 0x50 */
+ 0xD9DC, 0xD3E0, 0xD8FD, 0xB7F0, 0xD7F7, 0xD8FE, 0xD8FA, 0xD9A1, /* 0x50 */
+ 0xC4E3, 0x81D9, 0x81DA, 0xD3B6, 0xD8F4, 0xD9DD, 0x81DB, 0xD8FB, /* 0x60 */
+ 0x81DC, 0xC5E5, 0x81DD, 0x81DE, 0xC0D0, 0x81DF, 0x81E0, 0xD1F0, /* 0x60 */
+ 0xB0DB, 0x81E1, 0x81E2, 0xBCD1, 0xD9A6, 0x81E3, 0xD9A5, 0x81E4, /* 0x70 */
+ 0x81E5, 0x81E6, 0x81E7, 0xD9AC, 0xD9AE, 0x81E8, 0xD9AB, 0xCAB9, /* 0x70 */
+ 0x81E9, 0x81EA, 0x81EB, 0xD9A9, 0xD6B6, 0x81EC, 0x81ED, 0x81EE, /* 0x80 */
+ 0xB3DE, 0xD9A8, 0x81EF, 0xC0FD, 0x81F0, 0xCACC, 0x81F1, 0xD9AA, /* 0x80 */
+ 0x81F2, 0xD9A7, 0x81F3, 0x81F4, 0xD9B0, 0x81F5, 0x81F6, 0xB6B1, /* 0x90 */
+ 0x81F7, 0x81F8, 0x81F9, 0xB9A9, 0x81FA, 0xD2C0, 0x81FB, 0x81FC, /* 0x90 */
+ 0xCFC0, 0x81FD, 0x81FE, 0xC2C2, 0x8240, 0xBDC4, 0xD5EC, 0xB2E0, /* 0xA0 */
+ 0xC7C8, 0xBFEB, 0xD9AD, 0x8241, 0xD9AF, 0x8242, 0xCEEA, 0xBAEE, /* 0xA0 */
+ 0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0xC7D6, 0x8248, 0x8249, /* 0xB0 */
+ 0x824A, 0x824B, 0x824C, 0x824D, 0x824E, 0x824F, 0x8250, 0xB1E3, /* 0xB0 */
+ 0x8251, 0x8252, 0x8253, 0xB4D9, 0xB6ED, 0xD9B4, 0x8254, 0x8255, /* 0xC0 */
+ 0x8256, 0x8257, 0xBFA1, 0x8258, 0x8259, 0x825A, 0xD9DE, 0xC7CE, /* 0xC0 */
+ 0xC0FE, 0xD9B8, 0x825B, 0x825C, 0x825D, 0x825E, 0x825F, 0xCBD7, /* 0xD0 */
+ 0xB7FD, 0x8260, 0xD9B5, 0x8261, 0xD9B7, 0xB1A3, 0xD3E1, 0xD9B9, /* 0xD0 */
+ 0x8262, 0xD0C5, 0x8263, 0xD9B6, 0x8264, 0x8265, 0xD9B1, 0x8266, /* 0xE0 */
+ 0xD9B2, 0xC1A9, 0xD9B3, 0x8267, 0x8268, 0xBCF3, 0xD0DE, 0xB8A9, /* 0xE0 */
+ 0x8269, 0xBEE3, 0x826A, 0xD9BD, 0x826B, 0x826C, 0x826D, 0x826E, /* 0xF0 */
+ 0xD9BA, 0x826F, 0xB0B3, 0x8270, 0x8271, 0x8272, 0xD9C2, 0x8273 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827A, 0x827B, /* 0x00 */
+ 0x827C, 0x827D, 0x827E, 0x8280, 0xD9C4, 0xB1B6, 0x8281, 0xD9BF, /* 0x00 */
+ 0x8282, 0x8283, 0xB5B9, 0x8284, 0xBEF3, 0x8285, 0x8286, 0x8287, /* 0x10 */
+ 0xCCC8, 0xBAF2, 0xD2D0, 0x8288, 0xD9C3, 0x8289, 0x828A, 0xBDE8, /* 0x10 */
+ 0x828B, 0xB3AB, 0x828C, 0x828D, 0x828E, 0xD9C5, 0xBEEB, 0x828F, /* 0x20 */
+ 0xD9C6, 0xD9BB, 0xC4DF, 0x8290, 0xD9BE, 0xD9C1, 0xD9C0, 0x8291, /* 0x20 */
+ 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, /* 0x30 */
+ 0x829A, 0x829B, 0xD5AE, 0x829C, 0xD6B5, 0x829D, 0xC7E3, 0x829E, /* 0x30 */
+ 0x829F, 0x82A0, 0x82A1, 0xD9C8, 0x82A2, 0x82A3, 0x82A4, 0xBCD9, /* 0x40 */
+ 0xD9CA, 0x82A5, 0x82A6, 0x82A7, 0xD9BC, 0x82A8, 0xD9CB, 0xC6AB, /* 0x40 */
+ 0x82A9, 0x82AA, 0x82AB, 0x82AC, 0x82AD, 0xD9C9, 0x82AE, 0x82AF, /* 0x50 */
+ 0x82B0, 0x82B1, 0xD7F6, 0x82B2, 0xCDA3, 0x82B3, 0x82B4, 0x82B5, /* 0x50 */
+ 0x82B6, 0x82B7, 0x82B8, 0x82B9, 0x82BA, 0xBDA1, 0x82BB, 0x82BC, /* 0x60 */
+ 0x82BD, 0x82BE, 0x82BF, 0x82C0, 0xD9CC, 0x82C1, 0x82C2, 0x82C3, /* 0x60 */
+ 0x82C4, 0x82C5, 0x82C6, 0x82C7, 0x82C8, 0x82C9, 0xC5BC, 0xCDB5, /* 0x70 */
+ 0x82CA, 0x82CB, 0x82CC, 0xD9CD, 0x82CD, 0x82CE, 0xD9C7, 0xB3A5, /* 0x70 */
+ 0xBFFE, 0x82CF, 0x82D0, 0x82D1, 0x82D2, 0xB8B5, 0x82D3, 0x82D4, /* 0x80 */
+ 0xC0FC, 0x82D5, 0x82D6, 0x82D7, 0x82D8, 0xB0F8, 0x82D9, 0x82DA, /* 0x80 */
+ 0x82DB, 0x82DC, 0x82DD, 0x82DE, 0x82DF, 0x82E0, 0x82E1, 0x82E2, /* 0x90 */
+ 0x82E3, 0x82E4, 0x82E5, 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, /* 0x90 */
+ 0x82EB, 0x82EC, 0x82ED, 0xB4F6, 0x82EE, 0xD9CE, 0x82EF, 0xD9CF, /* 0xA0 */
+ 0xB4A2, 0xD9D0, 0x82F0, 0x82F1, 0xB4DF, 0x82F2, 0x82F3, 0x82F4, /* 0xA0 */
+ 0x82F5, 0x82F6, 0xB0C1, 0x82F7, 0x82F8, 0x82F9, 0x82FA, 0x82FB, /* 0xB0 */
+ 0x82FC, 0x82FD, 0xD9D1, 0xC9B5, 0x82FE, 0x8340, 0x8341, 0x8342, /* 0xB0 */
+ 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834A, /* 0xC0 */
+ 0x834B, 0x834C, 0x834D, 0x834E, 0x834F, 0x8350, 0x8351, 0xCFF1, /* 0xC0 */
+ 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0xD9D2, 0x8358, /* 0xD0 */
+ 0x8359, 0x835A, 0xC1C5, 0x835B, 0x835C, 0x835D, 0x835E, 0x835F, /* 0xD0 */
+ 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0xD9D6, 0xC9AE, /* 0xE0 */
+ 0x8366, 0x8367, 0x8368, 0x8369, 0xD9D5, 0xD9D4, 0xD9D7, 0x836A, /* 0xE0 */
+ 0x836B, 0x836C, 0x836D, 0xCBDB, 0x836E, 0xBDA9, 0x836F, 0x8370, /* 0xF0 */
+ 0x8371, 0x8372, 0x8373, 0xC6A7, 0x8374, 0x8375, 0x8376, 0x8377 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8378, 0x8379, 0x837A, 0x837B, 0x837C, 0x837D, 0xD9D3, 0xD9D8, /* 0x00 */
+ 0x837E, 0x8380, 0x8381, 0xD9D9, 0x8382, 0x8383, 0x8384, 0x8385, /* 0x00 */
+ 0x8386, 0x8387, 0xC8E5, 0x8388, 0x8389, 0x838A, 0x838B, 0x838C, /* 0x10 */
+ 0x838D, 0x838E, 0x838F, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, /* 0x10 */
+ 0x8395, 0xC0DC, 0x8396, 0x8397, 0x8398, 0x8399, 0x839A, 0x839B, /* 0x20 */
+ 0x839C, 0x839D, 0x839E, 0x839F, 0x83A0, 0x83A1, 0x83A2, 0x83A3, /* 0x20 */
+ 0x83A4, 0x83A5, 0x83A6, 0x83A7, 0x83A8, 0x83A9, 0x83AA, 0x83AB, /* 0x30 */
+ 0x83AC, 0x83AD, 0x83AE, 0x83AF, 0x83B0, 0x83B1, 0x83B2, 0xB6F9, /* 0x30 */
+ 0xD8A3, 0xD4CA, 0x83B3, 0xD4AA, 0xD0D6, 0xB3E4, 0xD5D7, 0x83B4, /* 0x40 */
+ 0xCFC8, 0xB9E2, 0x83B5, 0xBFCB, 0x83B6, 0xC3E2, 0x83B7, 0x83B8, /* 0x40 */
+ 0x83B9, 0xB6D2, 0x83BA, 0x83BB, 0xCDC3, 0xD9EE, 0xD9F0, 0x83BC, /* 0x50 */
+ 0x83BD, 0x83BE, 0xB5B3, 0x83BF, 0xB6B5, 0x83C0, 0x83C1, 0x83C2, /* 0x50 */
+ 0x83C3, 0x83C4, 0xBEA4, 0x83C5, 0x83C6, 0xC8EB, 0x83C7, 0x83C8, /* 0x60 */
+ 0xC8AB, 0x83C9, 0x83CA, 0xB0CB, 0xB9AB, 0xC1F9, 0xD9E2, 0x83CB, /* 0x60 */
+ 0xC0BC, 0xB9B2, 0x83CC, 0xB9D8, 0xD0CB, 0xB1F8, 0xC6E4, 0xBEDF, /* 0x70 */
+ 0xB5E4, 0xD7C8, 0x83CD, 0xD1F8, 0xBCE6, 0xCADE, 0x83CE, 0x83CF, /* 0x70 */
+ 0xBCBD, 0xD9E6, 0xD8E7, 0x83D0, 0x83D1, 0xC4DA, 0x83D2, 0x83D3, /* 0x80 */
+ 0xB8D4, 0xC8BD, 0x83D4, 0x83D5, 0xB2E1, 0xD4D9, 0x83D6, 0x83D7, /* 0x80 */
+ 0x83D8, 0x83D9, 0xC3B0, 0x83DA, 0x83DB, 0xC3E1, 0xDAA2, 0xC8DF, /* 0x90 */
+ 0x83DC, 0xD0B4, 0x83DD, 0xBEFC, 0xC5A9, 0x83DE, 0x83DF, 0x83E0, /* 0x90 */
+ 0xB9DA, 0x83E1, 0xDAA3, 0x83E2, 0xD4A9, 0xDAA4, 0x83E3, 0x83E4, /* 0xA0 */
+ 0x83E5, 0x83E6, 0x83E7, 0xD9FB, 0xB6AC, 0x83E8, 0x83E9, 0xB7EB, /* 0xA0 */
+ 0xB1F9, 0xD9FC, 0xB3E5, 0xBEF6, 0x83EA, 0xBFF6, 0xD2B1, 0xC0E4, /* 0xB0 */
+ 0x83EB, 0x83EC, 0x83ED, 0xB6B3, 0xD9FE, 0xD9FD, 0x83EE, 0x83EF, /* 0xB0 */
+ 0xBEBB, 0x83F0, 0x83F1, 0x83F2, 0xC6E0, 0x83F3, 0xD7BC, 0xDAA1, /* 0xC0 */
+ 0x83F4, 0xC1B9, 0x83F5, 0xB5F2, 0xC1E8, 0x83F6, 0x83F7, 0xBCF5, /* 0xC0 */
+ 0x83F8, 0xB4D5, 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD, 0x83FE, /* 0xD0 */
+ 0x8440, 0x8441, 0x8442, 0xC1DD, 0x8443, 0xC4FD, 0x8444, 0x8445, /* 0xD0 */
+ 0xBCB8, 0xB7B2, 0x8446, 0x8447, 0xB7EF, 0x8448, 0x8449, 0x844A, /* 0xE0 */
+ 0x844B, 0x844C, 0x844D, 0xD9EC, 0x844E, 0xC6BE, 0x844F, 0xBFAD, /* 0xE0 */
+ 0xBBCB, 0x8450, 0x8451, 0xB5CA, 0x8452, 0xDBC9, 0xD0D7, 0x8453, /* 0xF0 */
+ 0xCDB9, 0xB0BC, 0xB3F6, 0xBBF7, 0xDBCA, 0xBAAF, 0x8454, 0xD4E4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB5B6, 0xB5F3, 0xD8D6, 0xC8D0, 0x8455, 0x8456, 0xB7D6, 0xC7D0, /* 0x00 */
+ 0xD8D7, 0x8457, 0xBFAF, 0x8458, 0x8459, 0xDBBB, 0xD8D8, 0x845A, /* 0x00 */
+ 0x845B, 0xD0CC, 0xBBAE, 0x845C, 0x845D, 0x845E, 0xEBBE, 0xC1D0, /* 0x10 */
+ 0xC1F5, 0xD4F2, 0xB8D5, 0xB4B4, 0x845F, 0xB3F5, 0x8460, 0x8461, /* 0x10 */
+ 0xC9BE, 0x8462, 0x8463, 0x8464, 0xC5D0, 0x8465, 0x8466, 0x8467, /* 0x20 */
+ 0xC5D9, 0xC0FB, 0x8468, 0xB1F0, 0x8469, 0xD8D9, 0xB9CE, 0x846A, /* 0x20 */
+ 0xB5BD, 0x846B, 0x846C, 0xD8DA, 0x846D, 0x846E, 0xD6C6, 0xCBA2, /* 0x30 */
+ 0xC8AF, 0xC9B2, 0xB4CC, 0xBFCC, 0x846F, 0xB9F4, 0x8470, 0xD8DB, /* 0x30 */
+ 0xD8DC, 0xB6E7, 0xBCC1, 0xCCEA, 0x8471, 0x8472, 0x8473, 0x8474, /* 0x40 */
+ 0x8475, 0x8476, 0xCFF7, 0x8477, 0xD8DD, 0xC7B0, 0x8478, 0x8479, /* 0x40 */
+ 0xB9D0, 0xBDA3, 0x847A, 0x847B, 0xCCDE, 0x847C, 0xC6CA, 0x847D, /* 0x50 */
+ 0x847E, 0x8480, 0x8481, 0x8482, 0xD8E0, 0x8483, 0xD8DE, 0x8484, /* 0x50 */
+ 0x8485, 0xD8DF, 0x8486, 0x8487, 0x8488, 0xB0FE, 0x8489, 0xBEE7, /* 0x60 */
+ 0x848A, 0xCAA3, 0xBCF4, 0x848B, 0x848C, 0x848D, 0x848E, 0xB8B1, /* 0x60 */
+ 0x848F, 0x8490, 0xB8EE, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, /* 0x70 */
+ 0x8496, 0x8497, 0x8498, 0x8499, 0x849A, 0xD8E2, 0x849B, 0xBDCB, /* 0x70 */
+ 0x849C, 0xD8E4, 0xD8E3, 0x849D, 0x849E, 0x849F, 0x84A0, 0x84A1, /* 0x80 */
+ 0xC5FC, 0x84A2, 0x84A3, 0x84A4, 0x84A5, 0x84A6, 0x84A7, 0x84A8, /* 0x80 */
+ 0xD8E5, 0x84A9, 0x84AA, 0xD8E6, 0x84AB, 0x84AC, 0x84AD, 0x84AE, /* 0x90 */
+ 0x84AF, 0x84B0, 0x84B1, 0xC1A6, 0x84B2, 0xC8B0, 0xB0EC, 0xB9A6, /* 0x90 */
+ 0xBCD3, 0xCEF1, 0xDBBD, 0xC1D3, 0x84B3, 0x84B4, 0x84B5, 0x84B6, /* 0xA0 */
+ 0xB6AF, 0xD6FA, 0xC5AC, 0xBDD9, 0xDBBE, 0xDBBF, 0x84B7, 0x84B8, /* 0xA0 */
+ 0x84B9, 0xC0F8, 0xBEA2, 0xC0CD, 0x84BA, 0x84BB, 0x84BC, 0x84BD, /* 0xB0 */
+ 0x84BE, 0x84BF, 0x84C0, 0x84C1, 0x84C2, 0x84C3, 0xDBC0, 0xCAC6, /* 0xB0 */
+ 0x84C4, 0x84C5, 0x84C6, 0xB2AA, 0x84C7, 0x84C8, 0x84C9, 0xD3C2, /* 0xC0 */
+ 0x84CA, 0xC3E3, 0x84CB, 0xD1AB, 0x84CC, 0x84CD, 0x84CE, 0x84CF, /* 0xC0 */
+ 0xDBC2, 0x84D0, 0xC0D5, 0x84D1, 0x84D2, 0x84D3, 0xDBC3, 0x84D4, /* 0xD0 */
+ 0xBFB1, 0x84D5, 0x84D6, 0x84D7, 0x84D8, 0x84D9, 0x84DA, 0xC4BC, /* 0xD0 */
+ 0x84DB, 0x84DC, 0x84DD, 0x84DE, 0xC7DA, 0x84DF, 0x84E0, 0x84E1, /* 0xE0 */
+ 0x84E2, 0x84E3, 0x84E4, 0x84E5, 0x84E6, 0x84E7, 0x84E8, 0x84E9, /* 0xE0 */
+ 0xDBC4, 0x84EA, 0x84EB, 0x84EC, 0x84ED, 0x84EE, 0x84EF, 0x84F0, /* 0xF0 */
+ 0x84F1, 0xD9E8, 0xC9D7, 0x84F2, 0x84F3, 0x84F4, 0xB9B4, 0xCEF0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD4C8, 0x84F5, 0x84F6, 0x84F7, 0x84F8, 0xB0FC, 0xB4D2, 0x84F9, /* 0x00 */
+ 0xD0D9, 0x84FA, 0x84FB, 0x84FC, 0x84FD, 0xD9E9, 0x84FE, 0xDECB, /* 0x00 */
+ 0xD9EB, 0x8540, 0x8541, 0x8542, 0x8543, 0xD8B0, 0xBBAF, 0xB1B1, /* 0x10 */
+ 0x8544, 0xB3D7, 0xD8CE, 0x8545, 0x8546, 0xD4D1, 0x8547, 0x8548, /* 0x10 */
+ 0xBDB3, 0xBFEF, 0x8549, 0xCFBB, 0x854A, 0x854B, 0xD8D0, 0x854C, /* 0x20 */
+ 0x854D, 0x854E, 0xB7CB, 0x854F, 0x8550, 0x8551, 0xD8D1, 0x8552, /* 0x20 */
+ 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, 0x855A, /* 0x30 */
+ 0x855B, 0xC6A5, 0xC7F8, 0xD2BD, 0x855C, 0x855D, 0xD8D2, 0xC4E4, /* 0x30 */
+ 0x855E, 0xCAAE, 0x855F, 0xC7A7, 0x8560, 0xD8A6, 0x8561, 0xC9FD, /* 0x40 */
+ 0xCEE7, 0xBBDC, 0xB0EB, 0x8562, 0x8563, 0x8564, 0xBBAA, 0xD0AD, /* 0x40 */
+ 0x8565, 0xB1B0, 0xD7E4, 0xD7BF, 0x8566, 0xB5A5, 0xC2F4, 0xC4CF, /* 0x50 */
+ 0x8567, 0x8568, 0xB2A9, 0x8569, 0xB2B7, 0x856A, 0xB1E5, 0xDFB2, /* 0x50 */
+ 0xD5BC, 0xBFA8, 0xC2AC, 0xD8D5, 0xC2B1, 0x856B, 0xD8D4, 0xCED4, /* 0x60 */
+ 0x856C, 0xDAE0, 0x856D, 0xCEC0, 0x856E, 0x856F, 0xD8B4, 0xC3AE, /* 0x60 */
+ 0xD3A1, 0xCEA3, 0x8570, 0xBCB4, 0xC8B4, 0xC2D1, 0x8571, 0xBEED, /* 0x70 */
+ 0xD0B6, 0x8572, 0xDAE1, 0x8573, 0x8574, 0x8575, 0x8576, 0xC7E4, /* 0x70 */
+ 0x8577, 0x8578, 0xB3A7, 0x8579, 0xB6F2, 0xCCFC, 0xC0FA, 0x857A, /* 0x80 */
+ 0x857B, 0xC0F7, 0x857C, 0xD1B9, 0xD1E1, 0xD8C7, 0x857D, 0x857E, /* 0x80 */
+ 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0xB2DE, 0x8585, 0x8586, /* 0x90 */
+ 0xC0E5, 0x8587, 0xBAF1, 0x8588, 0x8589, 0xD8C8, 0x858A, 0xD4AD, /* 0x90 */
+ 0x858B, 0x858C, 0xCFE1, 0xD8C9, 0x858D, 0xD8CA, 0xCFC3, 0x858E, /* 0xA0 */
+ 0xB3F8, 0xBEC7, 0x858F, 0x8590, 0x8591, 0x8592, 0xD8CB, 0x8593, /* 0xA0 */
+ 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0xDBCC, 0x859A, /* 0xB0 */
+ 0x859B, 0x859C, 0x859D, 0xC8A5, 0x859E, 0x859F, 0x85A0, 0xCFD8, /* 0xB0 */
+ 0x85A1, 0xC8FE, 0xB2CE, 0x85A2, 0x85A3, 0x85A4, 0x85A5, 0x85A6, /* 0xC0 */
+ 0xD3D6, 0xB2E6, 0xBCB0, 0xD3D1, 0xCBAB, 0xB7B4, 0x85A7, 0x85A8, /* 0xC0 */
+ 0x85A9, 0xB7A2, 0x85AA, 0x85AB, 0xCAE5, 0x85AC, 0xC8A1, 0xCADC, /* 0xD0 */
+ 0xB1E4, 0xD0F0, 0x85AD, 0xC5D1, 0x85AE, 0x85AF, 0x85B0, 0xDBC5, /* 0xD0 */
+ 0xB5FE, 0x85B1, 0x85B2, 0xBFDA, 0xB9C5, 0xBEE4, 0xC1ED, 0x85B3, /* 0xE0 */
+ 0xDFB6, 0xDFB5, 0xD6BB, 0xBDD0, 0xD5D9, 0xB0C8, 0xB6A3, 0xBFC9, /* 0xE0 */
+ 0xCCA8, 0xDFB3, 0xCAB7, 0xD3D2, 0x85B4, 0xD8CF, 0xD2B6, 0xBAC5, /* 0xF0 */
+ 0xCBBE, 0xCCBE, 0x85B5, 0xDFB7, 0xB5F0, 0xDFB4, 0x85B6, 0x85B7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x85B8, 0xD3F5, 0x85B9, 0xB3D4, 0xB8F7, 0x85BA, 0xDFBA, 0x85BB, /* 0x00 */
+ 0xBACF, 0xBCAA, 0xB5F5, 0x85BC, 0xCDAC, 0xC3FB, 0xBAF3, 0xC0F4, /* 0x00 */
+ 0xCDC2, 0xCFF2, 0xDFB8, 0xCFC5, 0x85BD, 0xC2C0, 0xDFB9, 0xC2F0, /* 0x10 */
+ 0x85BE, 0x85BF, 0x85C0, 0xBEFD, 0x85C1, 0xC1DF, 0xCDCC, 0xD2F7, /* 0x10 */
+ 0xB7CD, 0xDFC1, 0x85C2, 0xDFC4, 0x85C3, 0x85C4, 0xB7F1, 0xB0C9, /* 0x20 */
+ 0xB6D6, 0xB7D4, 0x85C5, 0xBAAC, 0xCCFD, 0xBFD4, 0xCBB1, 0xC6F4, /* 0x20 */
+ 0x85C6, 0xD6A8, 0xDFC5, 0x85C7, 0xCEE2, 0xB3B3, 0x85C8, 0x85C9, /* 0x30 */
+ 0xCEFC, 0xB4B5, 0x85CA, 0xCEC7, 0xBAF0, 0x85CB, 0xCEE1, 0x85CC, /* 0x30 */
+ 0xD1BD, 0x85CD, 0x85CE, 0xDFC0, 0x85CF, 0x85D0, 0xB4F4, 0x85D1, /* 0x40 */
+ 0xB3CA, 0x85D2, 0xB8E6, 0xDFBB, 0x85D3, 0x85D4, 0x85D5, 0x85D6, /* 0x40 */
+ 0xC4C5, 0x85D7, 0xDFBC, 0xDFBD, 0xDFBE, 0xC5BB, 0xDFBF, 0xDFC2, /* 0x50 */
+ 0xD4B1, 0xDFC3, 0x85D8, 0xC7BA, 0xCED8, 0x85D9, 0x85DA, 0x85DB, /* 0x50 */
+ 0x85DC, 0x85DD, 0xC4D8, 0x85DE, 0xDFCA, 0x85DF, 0xDFCF, 0x85E0, /* 0x60 */
+ 0xD6DC, 0x85E1, 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0x85E6, 0x85E7, /* 0x60 */
+ 0x85E8, 0xDFC9, 0xDFDA, 0xCEB6, 0x85E9, 0xBAC7, 0xDFCE, 0xDFC8, /* 0x70 */
+ 0xC5DE, 0x85EA, 0x85EB, 0xC9EB, 0xBAF4, 0xC3FC, 0x85EC, 0x85ED, /* 0x70 */
+ 0xBED7, 0x85EE, 0xDFC6, 0x85EF, 0xDFCD, 0x85F0, 0xC5D8, 0x85F1, /* 0x80 */
+ 0x85F2, 0x85F3, 0x85F4, 0xD5A6, 0xBACD, 0x85F5, 0xBECC, 0xD3BD, /* 0x80 */
+ 0xB8C0, 0x85F6, 0xD6E4, 0x85F7, 0xDFC7, 0xB9BE, 0xBFA7, 0x85F8, /* 0x90 */
+ 0x85F9, 0xC1FC, 0xDFCB, 0xDFCC, 0x85FA, 0xDFD0, 0x85FB, 0x85FC, /* 0x90 */
+ 0x85FD, 0x85FE, 0x8640, 0xDFDB, 0xDFE5, 0x8641, 0xDFD7, 0xDFD6, /* 0xA0 */
+ 0xD7C9, 0xDFE3, 0xDFE4, 0xE5EB, 0xD2A7, 0xDFD2, 0x8642, 0xBFA9, /* 0xA0 */
+ 0x8643, 0xD4DB, 0x8644, 0xBFC8, 0xDFD4, 0x8645, 0x8646, 0x8647, /* 0xB0 */
+ 0xCFCC, 0x8648, 0x8649, 0xDFDD, 0x864A, 0xD1CA, 0x864B, 0xDFDE, /* 0xB0 */
+ 0xB0A7, 0xC6B7, 0xDFD3, 0x864C, 0xBAE5, 0x864D, 0xB6DF, 0xCDDB, /* 0xC0 */
+ 0xB9FE, 0xD4D5, 0x864E, 0x864F, 0xDFDF, 0xCFEC, 0xB0A5, 0xDFE7, /* 0xC0 */
+ 0xDFD1, 0xD1C6, 0xDFD5, 0xDFD8, 0xDFD9, 0xDFDC, 0x8650, 0xBBA9, /* 0xD0 */
+ 0x8651, 0xDFE0, 0xDFE1, 0x8652, 0xDFE2, 0xDFE6, 0xDFE8, 0xD3B4, /* 0xD0 */
+ 0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0xB8E7, 0xC5B6, 0xDFEA, /* 0xE0 */
+ 0xC9DA, 0xC1A8, 0xC4C4, 0x8658, 0x8659, 0xBFDE, 0xCFF8, 0x865A, /* 0xE0 */
+ 0x865B, 0x865C, 0xD5DC, 0xDFEE, 0x865D, 0x865E, 0x865F, 0x8660, /* 0xF0 */
+ 0x8661, 0x8662, 0xB2B8, 0x8663, 0xBADF, 0xDFEC, 0x8664, 0xDBC1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8665, 0xD1E4, 0x8666, 0x8667, 0x8668, 0x8669, 0xCBF4, 0xB4BD, /* 0x00 */
+ 0x866A, 0xB0A6, 0x866B, 0x866C, 0x866D, 0x866E, 0x866F, 0xDFF1, /* 0x00 */
+ 0xCCC6, 0xDFF2, 0x8670, 0x8671, 0xDFED, 0x8672, 0x8673, 0x8674, /* 0x10 */
+ 0x8675, 0x8676, 0x8677, 0xDFE9, 0x8678, 0x8679, 0x867A, 0x867B, /* 0x10 */
+ 0xDFEB, 0x867C, 0xDFEF, 0xDFF0, 0xBBBD, 0x867D, 0x867E, 0xDFF3, /* 0x20 */
+ 0x8680, 0x8681, 0xDFF4, 0x8682, 0xBBA3, 0x8683, 0xCADB, 0xCEA8, /* 0x20 */
+ 0xE0A7, 0xB3AA, 0x8684, 0xE0A6, 0x8685, 0x8686, 0x8687, 0xE0A1, /* 0x30 */
+ 0x8688, 0x8689, 0x868A, 0x868B, 0xDFFE, 0x868C, 0xCDD9, 0xDFFC, /* 0x30 */
+ 0x868D, 0xDFFA, 0x868E, 0xBFD0, 0xD7C4, 0x868F, 0xC9CC, 0x8690, /* 0x40 */
+ 0x8691, 0xDFF8, 0xB0A1, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, /* 0x40 */
+ 0xDFFD, 0x8697, 0x8698, 0x8699, 0x869A, 0xDFFB, 0xE0A2, 0x869B, /* 0x50 */
+ 0x869C, 0x869D, 0x869E, 0x869F, 0xE0A8, 0x86A0, 0x86A1, 0x86A2, /* 0x50 */
+ 0x86A3, 0xB7C8, 0x86A4, 0x86A5, 0xC6A1, 0xC9B6, 0xC0B2, 0xDFF5, /* 0x60 */
+ 0x86A6, 0x86A7, 0xC5BE, 0x86A8, 0xD8C4, 0xDFF9, 0xC4F6, 0x86A9, /* 0x60 */
+ 0x86AA, 0x86AB, 0x86AC, 0x86AD, 0x86AE, 0xE0A3, 0xE0A4, 0xE0A5, /* 0x70 */
+ 0xD0A5, 0x86AF, 0x86B0, 0xE0B4, 0xCCE4, 0x86B1, 0xE0B1, 0x86B2, /* 0x70 */
+ 0xBFA6, 0xE0AF, 0xCEB9, 0xE0AB, 0xC9C6, 0x86B3, 0x86B4, 0xC0AE, /* 0x80 */
+ 0xE0AE, 0xBAED, 0xBAB0, 0xE0A9, 0x86B5, 0x86B6, 0x86B7, 0xDFF6, /* 0x80 */
+ 0x86B8, 0xE0B3, 0x86B9, 0x86BA, 0xE0B8, 0x86BB, 0x86BC, 0x86BD, /* 0x90 */
+ 0xB4AD, 0xE0B9, 0x86BE, 0x86BF, 0xCFB2, 0xBAC8, 0x86C0, 0xE0B0, /* 0x90 */
+ 0x86C1, 0x86C2, 0x86C3, 0x86C4, 0x86C5, 0x86C6, 0x86C7, 0xD0FA, /* 0xA0 */
+ 0x86C8, 0x86C9, 0x86CA, 0x86CB, 0x86CC, 0x86CD, 0x86CE, 0x86CF, /* 0xA0 */
+ 0x86D0, 0xE0AC, 0x86D1, 0xD4FB, 0x86D2, 0xDFF7, 0x86D3, 0xC5E7, /* 0xB0 */
+ 0x86D4, 0xE0AD, 0x86D5, 0xD3F7, 0x86D6, 0xE0B6, 0xE0B7, 0x86D7, /* 0xB0 */
+ 0x86D8, 0x86D9, 0x86DA, 0x86DB, 0xE0C4, 0xD0E1, 0x86DC, 0x86DD, /* 0xC0 */
+ 0x86DE, 0xE0BC, 0x86DF, 0x86E0, 0xE0C9, 0xE0CA, 0x86E1, 0x86E2, /* 0xC0 */
+ 0x86E3, 0xE0BE, 0xE0AA, 0xC9A4, 0xE0C1, 0x86E4, 0xE0B2, 0x86E5, /* 0xD0 */
+ 0x86E6, 0x86E7, 0x86E8, 0x86E9, 0xCAC8, 0xE0C3, 0x86EA, 0xE0B5, /* 0xD0 */
+ 0x86EB, 0xCECB, 0x86EC, 0xCBC3, 0xE0CD, 0xE0C6, 0xE0C2, 0x86ED, /* 0xE0 */
+ 0xE0CB, 0x86EE, 0xE0BA, 0xE0BF, 0xE0C0, 0x86EF, 0x86F0, 0xE0C5, /* 0xE0 */
+ 0x86F1, 0x86F2, 0xE0C7, 0xE0C8, 0x86F3, 0xE0CC, 0x86F4, 0xE0BB, /* 0xF0 */
+ 0x86F5, 0x86F6, 0x86F7, 0x86F8, 0x86F9, 0xCBD4, 0xE0D5, 0x86FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE0D6, 0xE0D2, 0x86FB, 0x86FC, 0x86FD, 0x86FE, 0x8740, 0x8741, /* 0x00 */
+ 0xE0D0, 0xBCCE, 0x8742, 0x8743, 0xE0D1, 0x8744, 0xB8C2, 0xD8C5, /* 0x00 */
+ 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874A, 0x874B, 0x874C, /* 0x10 */
+ 0xD0EA, 0x874D, 0x874E, 0xC2EF, 0x874F, 0x8750, 0xE0CF, 0xE0BD, /* 0x10 */
+ 0x8751, 0x8752, 0x8753, 0xE0D4, 0xE0D3, 0x8754, 0x8755, 0xE0D7, /* 0x20 */
+ 0x8756, 0x8757, 0x8758, 0x8759, 0xE0DC, 0xE0D8, 0x875A, 0x875B, /* 0x20 */
+ 0x875C, 0xD6F6, 0xB3B0, 0x875D, 0xD7EC, 0x875E, 0xCBBB, 0x875F, /* 0x30 */
+ 0x8760, 0xE0DA, 0x8761, 0xCEFB, 0x8762, 0x8763, 0x8764, 0xBAD9, /* 0x30 */
+ 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, /* 0x40 */
+ 0x876D, 0x876E, 0x876F, 0x8770, 0xE0E1, 0xE0DD, 0xD2AD, 0x8771, /* 0x40 */
+ 0x8772, 0x8773, 0x8774, 0x8775, 0xE0E2, 0x8776, 0x8777, 0xE0DB, /* 0x50 */
+ 0xE0D9, 0xE0DF, 0x8778, 0x8779, 0xE0E0, 0x877A, 0x877B, 0x877C, /* 0x50 */
+ 0x877D, 0x877E, 0xE0DE, 0x8780, 0xE0E4, 0x8781, 0x8782, 0x8783, /* 0x60 */
+ 0xC6F7, 0xD8AC, 0xD4EB, 0xE0E6, 0xCAC9, 0x8784, 0x8785, 0x8786, /* 0x60 */
+ 0x8787, 0xE0E5, 0x8788, 0x8789, 0x878A, 0x878B, 0xB8C1, 0x878C, /* 0x70 */
+ 0x878D, 0x878E, 0x878F, 0xE0E7, 0xE0E8, 0x8790, 0x8791, 0x8792, /* 0x70 */
+ 0x8793, 0x8794, 0x8795, 0x8796, 0x8797, 0xE0E9, 0xE0E3, 0x8798, /* 0x80 */
+ 0x8799, 0x879A, 0x879B, 0x879C, 0x879D, 0x879E, 0xBABF, 0xCCE7, /* 0x80 */
+ 0x879F, 0x87A0, 0x87A1, 0xE0EA, 0x87A2, 0x87A3, 0x87A4, 0x87A5, /* 0x90 */
+ 0x87A6, 0x87A7, 0x87A8, 0x87A9, 0x87AA, 0x87AB, 0x87AC, 0x87AD, /* 0x90 */
+ 0x87AE, 0x87AF, 0x87B0, 0xCFF9, 0x87B1, 0x87B2, 0x87B3, 0x87B4, /* 0xA0 */
+ 0x87B5, 0x87B6, 0x87B7, 0x87B8, 0x87B9, 0x87BA, 0x87BB, 0xE0EB, /* 0xA0 */
+ 0x87BC, 0x87BD, 0x87BE, 0x87BF, 0x87C0, 0x87C1, 0x87C2, 0xC8C2, /* 0xB0 */
+ 0x87C3, 0x87C4, 0x87C5, 0x87C6, 0xBDC0, 0x87C7, 0x87C8, 0x87C9, /* 0xB0 */
+ 0x87CA, 0x87CB, 0x87CC, 0x87CD, 0x87CE, 0x87CF, 0x87D0, 0x87D1, /* 0xC0 */
+ 0x87D2, 0x87D3, 0xC4D2, 0x87D4, 0x87D5, 0x87D6, 0x87D7, 0x87D8, /* 0xC0 */
+ 0x87D9, 0x87DA, 0x87DB, 0x87DC, 0xE0EC, 0x87DD, 0x87DE, 0xE0ED, /* 0xD0 */
+ 0x87DF, 0x87E0, 0xC7F4, 0xCBC4, 0x87E1, 0xE0EE, 0xBBD8, 0xD8B6, /* 0xD0 */
+ 0xD2F2, 0xE0EF, 0xCDC5, 0x87E2, 0xB6DA, 0x87E3, 0x87E4, 0x87E5, /* 0xE0 */
+ 0x87E6, 0x87E7, 0x87E8, 0xE0F1, 0x87E9, 0xD4B0, 0x87EA, 0x87EB, /* 0xE0 */
+ 0xC0A7, 0xB4D1, 0x87EC, 0x87ED, 0xCEA7, 0xE0F0, 0x87EE, 0x87EF, /* 0xF0 */
+ 0x87F0, 0xE0F2, 0xB9CC, 0x87F1, 0x87F2, 0xB9FA, 0xCDBC, 0xE0F3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x87F3, 0x87F4, 0x87F5, 0xC6D4, 0xE0F4, 0x87F6, 0xD4B2, 0x87F7, /* 0x00 */
+ 0xC8A6, 0xE0F6, 0xE0F5, 0x87F8, 0x87F9, 0x87FA, 0x87FB, 0x87FC, /* 0x00 */
+ 0x87FD, 0x87FE, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, /* 0x10 */
+ 0x8846, 0x8847, 0x8848, 0x8849, 0xE0F7, 0x884A, 0x884B, 0xCDC1, /* 0x10 */
+ 0x884C, 0x884D, 0x884E, 0xCAA5, 0x884F, 0x8850, 0x8851, 0x8852, /* 0x20 */
+ 0xD4DA, 0xDBD7, 0xDBD9, 0x8853, 0xDBD8, 0xB9E7, 0xDBDC, 0xDBDD, /* 0x20 */
+ 0xB5D8, 0x8854, 0x8855, 0xDBDA, 0x8856, 0x8857, 0x8858, 0x8859, /* 0x30 */
+ 0x885A, 0xDBDB, 0xB3A1, 0xDBDF, 0x885B, 0x885C, 0xBBF8, 0x885D, /* 0x30 */
+ 0xD6B7, 0x885E, 0xDBE0, 0x885F, 0x8860, 0x8861, 0x8862, 0xBEF9, /* 0x40 */
+ 0x8863, 0x8864, 0xB7BB, 0x8865, 0xDBD0, 0xCCAE, 0xBFB2, 0xBBB5, /* 0x40 */
+ 0xD7F8, 0xBFD3, 0x8866, 0x8867, 0x8868, 0x8869, 0x886A, 0xBFE9, /* 0x50 */
+ 0x886B, 0x886C, 0xBCE1, 0xCCB3, 0xDBDE, 0xB0D3, 0xCEEB, 0xB7D8, /* 0x50 */
+ 0xD7B9, 0xC6C2, 0x886D, 0x886E, 0xC0A4, 0x886F, 0xCCB9, 0x8870, /* 0x60 */
+ 0xDBE7, 0xDBE1, 0xC6BA, 0xDBE3, 0x8871, 0xDBE8, 0x8872, 0xC5F7, /* 0x60 */
+ 0x8873, 0x8874, 0x8875, 0xDBEA, 0x8876, 0x8877, 0xDBE9, 0xBFC0, /* 0x70 */
+ 0x8878, 0x8879, 0x887A, 0xDBE6, 0xDBE5, 0x887B, 0x887C, 0x887D, /* 0x70 */
+ 0x887E, 0x8880, 0xB4B9, 0xC0AC, 0xC2A2, 0xDBE2, 0xDBE4, 0x8881, /* 0x80 */
+ 0x8882, 0x8883, 0x8884, 0xD0CD, 0xDBED, 0x8885, 0x8886, 0x8887, /* 0x80 */
+ 0x8888, 0x8889, 0xC0DD, 0xDBF2, 0x888A, 0x888B, 0x888C, 0x888D, /* 0x90 */
+ 0x888E, 0x888F, 0x8890, 0xB6E2, 0x8891, 0x8892, 0x8893, 0x8894, /* 0x90 */
+ 0xDBF3, 0xDBD2, 0xB9B8, 0xD4AB, 0xDBEC, 0x8895, 0xBFD1, 0xDBF0, /* 0xA0 */
+ 0x8896, 0xDBD1, 0x8897, 0xB5E6, 0x8898, 0xDBEB, 0xBFE5, 0x8899, /* 0xA0 */
+ 0x889A, 0x889B, 0xDBEE, 0x889C, 0xDBF1, 0x889D, 0x889E, 0x889F, /* 0xB0 */
+ 0xDBF9, 0x88A0, 0x88A1, 0x88A2, 0x88A3, 0x88A4, 0x88A5, 0x88A6, /* 0xB0 */
+ 0x88A7, 0x88A8, 0xB9A1, 0xB0A3, 0x88A9, 0x88AA, 0x88AB, 0x88AC, /* 0xC0 */
+ 0x88AD, 0x88AE, 0x88AF, 0xC2F1, 0x88B0, 0x88B1, 0xB3C7, 0xDBEF, /* 0xC0 */
+ 0x88B2, 0x88B3, 0xDBF8, 0x88B4, 0xC6D2, 0xDBF4, 0x88B5, 0x88B6, /* 0xD0 */
+ 0xDBF5, 0xDBF7, 0xDBF6, 0x88B7, 0x88B8, 0xDBFE, 0x88B9, 0xD3F2, /* 0xD0 */
+ 0xB2BA, 0x88BA, 0x88BB, 0x88BC, 0xDBFD, 0x88BD, 0x88BE, 0x88BF, /* 0xE0 */
+ 0x88C0, 0x88C1, 0x88C2, 0x88C3, 0x88C4, 0xDCA4, 0x88C5, 0xDBFB, /* 0xE0 */
+ 0x88C6, 0x88C7, 0x88C8, 0x88C9, 0xDBFA, 0x88CA, 0x88CB, 0x88CC, /* 0xF0 */
+ 0xDBFC, 0xC5E0, 0xBBF9, 0x88CD, 0x88CE, 0xDCA3, 0x88CF, 0x88D0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCA5, 0x88D1, 0xCCC3, 0x88D2, 0x88D3, 0x88D4, 0xB6D1, 0xDDC0, /* 0x00 */
+ 0x88D5, 0x88D6, 0x88D7, 0xDCA1, 0x88D8, 0xDCA2, 0x88D9, 0x88DA, /* 0x00 */
+ 0x88DB, 0xC7B5, 0x88DC, 0x88DD, 0x88DE, 0xB6E9, 0x88DF, 0x88E0, /* 0x10 */
+ 0x88E1, 0xDCA7, 0x88E2, 0x88E3, 0x88E4, 0x88E5, 0xDCA6, 0x88E6, /* 0x10 */
+ 0xDCA9, 0xB1A4, 0x88E7, 0x88E8, 0xB5CC, 0x88E9, 0x88EA, 0x88EB, /* 0x20 */
+ 0x88EC, 0x88ED, 0xBFB0, 0x88EE, 0x88EF, 0x88F0, 0x88F1, 0x88F2, /* 0x20 */
+ 0xD1DF, 0x88F3, 0x88F4, 0x88F5, 0x88F6, 0xB6C2, 0x88F7, 0x88F8, /* 0x30 */
+ 0x88F9, 0x88FA, 0x88FB, 0x88FC, 0x88FD, 0x88FE, 0x8940, 0x8941, /* 0x30 */
+ 0x8942, 0x8943, 0x8944, 0x8945, 0xDCA8, 0x8946, 0x8947, 0x8948, /* 0x40 */
+ 0x8949, 0x894A, 0x894B, 0x894C, 0xCBFA, 0xEBF3, 0x894D, 0x894E, /* 0x40 */
+ 0x894F, 0xCBDC, 0x8950, 0x8951, 0xCBFE, 0x8952, 0x8953, 0x8954, /* 0x50 */
+ 0xCCC1, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0xC8FB, 0x895A, /* 0x50 */
+ 0x895B, 0x895C, 0x895D, 0x895E, 0x895F, 0xDCAA, 0x8960, 0x8961, /* 0x60 */
+ 0x8962, 0x8963, 0x8964, 0xCCEE, 0xDCAB, 0x8965, 0x8966, 0x8967, /* 0x60 */
+ 0x8968, 0x8969, 0x896A, 0x896B, 0x896C, 0x896D, 0x896E, 0x896F, /* 0x70 */
+ 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0xDBD3, 0x8976, /* 0x70 */
+ 0xDCAF, 0xDCAC, 0x8977, 0xBEB3, 0x8978, 0xCAFB, 0x8979, 0x897A, /* 0x80 */
+ 0x897B, 0xDCAD, 0x897C, 0x897D, 0x897E, 0x8980, 0x8981, 0x8982, /* 0x80 */
+ 0x8983, 0x8984, 0xC9CA, 0xC4B9, 0x8985, 0x8986, 0x8987, 0x8988, /* 0x90 */
+ 0x8989, 0xC7BD, 0xDCAE, 0x898A, 0x898B, 0x898C, 0xD4F6, 0xD0E6, /* 0x90 */
+ 0x898D, 0x898E, 0x898F, 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, /* 0xA0 */
+ 0xC4AB, 0xB6D5, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899A, /* 0xA0 */
+ 0x899B, 0x899C, 0x899D, 0x899E, 0x899F, 0x89A0, 0x89A1, 0x89A2, /* 0xB0 */
+ 0x89A3, 0x89A4, 0x89A5, 0x89A6, 0xDBD4, 0x89A7, 0x89A8, 0x89A9, /* 0xB0 */
+ 0x89AA, 0xB1DA, 0x89AB, 0x89AC, 0x89AD, 0xDBD5, 0x89AE, 0x89AF, /* 0xC0 */
+ 0x89B0, 0x89B1, 0x89B2, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, /* 0xC0 */
+ 0x89B8, 0xDBD6, 0x89B9, 0x89BA, 0x89BB, 0xBABE, 0x89BC, 0x89BD, /* 0xD0 */
+ 0x89BE, 0x89BF, 0x89C0, 0x89C1, 0x89C2, 0x89C3, 0x89C4, 0x89C5, /* 0xD0 */
+ 0x89C6, 0x89C7, 0x89C8, 0x89C9, 0xC8C0, 0x89CA, 0x89CB, 0x89CC, /* 0xE0 */
+ 0x89CD, 0x89CE, 0x89CF, 0xCABF, 0xC8C9, 0x89D0, 0xD7B3, 0x89D1, /* 0xE0 */
+ 0xC9F9, 0x89D2, 0x89D3, 0xBFC7, 0x89D4, 0x89D5, 0xBAF8, 0x89D6, /* 0xF0 */
+ 0x89D7, 0xD2BC, 0x89D8, 0x89D9, 0x89DA, 0x89DB, 0x89DC, 0x89DD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x89DE, 0x89DF, 0xE2BA, 0x89E0, 0xB4A6, 0x89E1, 0x89E2, 0xB1B8, /* 0x00 */
+ 0x89E3, 0x89E4, 0x89E5, 0x89E6, 0x89E7, 0xB8B4, 0x89E8, 0xCFC4, /* 0x00 */
+ 0x89E9, 0x89EA, 0x89EB, 0x89EC, 0xD9E7, 0xCFA6, 0xCDE2, 0x89ED, /* 0x10 */
+ 0x89EE, 0xD9ED, 0xB6E0, 0x89EF, 0xD2B9, 0x89F0, 0x89F1, 0xB9BB, /* 0x10 */
+ 0x89F2, 0x89F3, 0x89F4, 0x89F5, 0xE2B9, 0xE2B7, 0x89F6, 0xB4F3, /* 0x20 */
+ 0x89F7, 0xCCEC, 0xCCAB, 0xB7F2, 0x89F8, 0xD8B2, 0xD1EB, 0xBABB, /* 0x20 */
+ 0x89F9, 0xCAA7, 0x89FA, 0x89FB, 0xCDB7, 0x89FC, 0x89FD, 0xD2C4, /* 0x30 */
+ 0xBFE4, 0xBCD0, 0xB6E1, 0x89FE, 0xDEC5, 0x8A40, 0x8A41, 0x8A42, /* 0x30 */
+ 0x8A43, 0xDEC6, 0xDBBC, 0x8A44, 0xD1D9, 0x8A45, 0x8A46, 0xC6E6, /* 0x40 */
+ 0xC4CE, 0xB7EE, 0x8A47, 0xB7DC, 0x8A48, 0x8A49, 0xBFFC, 0xD7E0, /* 0x40 */
+ 0x8A4A, 0xC6F5, 0x8A4B, 0x8A4C, 0xB1BC, 0xDEC8, 0xBDB1, 0xCCD7, /* 0x50 */
+ 0xDECA, 0x8A4D, 0xDEC9, 0x8A4E, 0x8A4F, 0x8A50, 0x8A51, 0x8A52, /* 0x50 */
+ 0xB5EC, 0x8A53, 0xC9DD, 0x8A54, 0x8A55, 0xB0C2, 0x8A56, 0x8A57, /* 0x60 */
+ 0x8A58, 0x8A59, 0x8A5A, 0x8A5B, 0x8A5C, 0x8A5D, 0x8A5E, 0x8A5F, /* 0x60 */
+ 0x8A60, 0x8A61, 0x8A62, 0xC5AE, 0xC5AB, 0x8A63, 0xC4CC, 0x8A64, /* 0x70 */
+ 0xBCE9, 0xCBFD, 0x8A65, 0x8A66, 0x8A67, 0xBAC3, 0x8A68, 0x8A69, /* 0x70 */
+ 0x8A6A, 0xE5F9, 0xC8E7, 0xE5FA, 0xCDFD, 0x8A6B, 0xD7B1, 0xB8BE, /* 0x80 */
+ 0xC2E8, 0x8A6C, 0xC8D1, 0x8A6D, 0x8A6E, 0xE5FB, 0x8A6F, 0x8A70, /* 0x80 */
+ 0x8A71, 0x8A72, 0xB6CA, 0xBCCB, 0x8A73, 0x8A74, 0xD1FD, 0xE6A1, /* 0x90 */
+ 0x8A75, 0xC3EE, 0x8A76, 0x8A77, 0x8A78, 0x8A79, 0xE6A4, 0x8A7A, /* 0x90 */
+ 0x8A7B, 0x8A7C, 0x8A7D, 0xE5FE, 0xE6A5, 0xCDD7, 0x8A7E, 0x8A80, /* 0xA0 */
+ 0xB7C1, 0xE5FC, 0xE5FD, 0xE6A3, 0x8A81, 0x8A82, 0xC4DD, 0xE6A8, /* 0xA0 */
+ 0x8A83, 0x8A84, 0xE6A7, 0x8A85, 0x8A86, 0x8A87, 0x8A88, 0x8A89, /* 0xB0 */
+ 0x8A8A, 0xC3C3, 0x8A8B, 0xC6DE, 0x8A8C, 0x8A8D, 0xE6AA, 0x8A8E, /* 0xB0 */
+ 0x8A8F, 0x8A90, 0x8A91, 0x8A92, 0x8A93, 0x8A94, 0xC4B7, 0x8A95, /* 0xC0 */
+ 0x8A96, 0x8A97, 0xE6A2, 0xCABC, 0x8A98, 0x8A99, 0x8A9A, 0x8A9B, /* 0xC0 */
+ 0xBDE3, 0xB9C3, 0xE6A6, 0xD0D5, 0xCEAF, 0x8A9C, 0x8A9D, 0xE6A9, /* 0xD0 */
+ 0xE6B0, 0x8A9E, 0xD2A6, 0x8A9F, 0xBDAA, 0xE6AD, 0x8AA0, 0x8AA1, /* 0xD0 */
+ 0x8AA2, 0x8AA3, 0x8AA4, 0xE6AF, 0x8AA5, 0xC0D1, 0x8AA6, 0x8AA7, /* 0xE0 */
+ 0xD2CC, 0x8AA8, 0x8AA9, 0x8AAA, 0xBCA7, 0x8AAB, 0x8AAC, 0x8AAD, /* 0xE0 */
+ 0x8AAE, 0x8AAF, 0x8AB0, 0x8AB1, 0x8AB2, 0x8AB3, 0x8AB4, 0x8AB5, /* 0xF0 */
+ 0x8AB6, 0xE6B1, 0x8AB7, 0xD2F6, 0x8AB8, 0x8AB9, 0x8ABA, 0xD7CB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8ABB, 0xCDFE, 0x8ABC, 0xCDDE, 0xC2A6, 0xE6AB, 0xE6AC, 0xBDBF, /* 0x00 */
+ 0xE6AE, 0xE6B3, 0x8ABD, 0x8ABE, 0xE6B2, 0x8ABF, 0x8AC0, 0x8AC1, /* 0x00 */
+ 0x8AC2, 0xE6B6, 0x8AC3, 0xE6B8, 0x8AC4, 0x8AC5, 0x8AC6, 0x8AC7, /* 0x10 */
+ 0xC4EF, 0x8AC8, 0x8AC9, 0x8ACA, 0xC4C8, 0x8ACB, 0x8ACC, 0xBEEA, /* 0x10 */
+ 0xC9EF, 0x8ACD, 0x8ACE, 0xE6B7, 0x8ACF, 0xB6F0, 0x8AD0, 0x8AD1, /* 0x20 */
+ 0x8AD2, 0xC3E4, 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD6, 0x8AD7, 0x8AD8, /* 0x20 */
+ 0x8AD9, 0xD3E9, 0xE6B4, 0x8ADA, 0xE6B5, 0x8ADB, 0xC8A2, 0x8ADC, /* 0x30 */
+ 0x8ADD, 0x8ADE, 0x8ADF, 0x8AE0, 0xE6BD, 0x8AE1, 0x8AE2, 0x8AE3, /* 0x30 */
+ 0xE6B9, 0x8AE4, 0x8AE5, 0x8AE6, 0x8AE7, 0x8AE8, 0xC6C5, 0x8AE9, /* 0x40 */
+ 0x8AEA, 0xCDF1, 0xE6BB, 0x8AEB, 0x8AEC, 0x8AED, 0x8AEE, 0x8AEF, /* 0x40 */
+ 0x8AF0, 0x8AF1, 0x8AF2, 0x8AF3, 0x8AF4, 0xE6BC, 0x8AF5, 0x8AF6, /* 0x50 */
+ 0x8AF7, 0x8AF8, 0xBBE9, 0x8AF9, 0x8AFA, 0x8AFB, 0x8AFC, 0x8AFD, /* 0x50 */
+ 0x8AFE, 0x8B40, 0xE6BE, 0x8B41, 0x8B42, 0x8B43, 0x8B44, 0xE6BA, /* 0x60 */
+ 0x8B45, 0x8B46, 0xC0B7, 0x8B47, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, /* 0x60 */
+ 0x8B4C, 0x8B4D, 0x8B4E, 0x8B4F, 0xD3A4, 0xE6BF, 0xC9F4, 0xE6C3, /* 0x70 */
+ 0x8B50, 0x8B51, 0xE6C4, 0x8B52, 0x8B53, 0x8B54, 0x8B55, 0xD0F6, /* 0x70 */
+ 0x8B56, 0x8B57, 0x8B58, 0x8B59, 0x8B5A, 0x8B5B, 0x8B5C, 0x8B5D, /* 0x80 */
+ 0x8B5E, 0x8B5F, 0x8B60, 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, /* 0x80 */
+ 0x8B66, 0x8B67, 0xC3BD, 0x8B68, 0x8B69, 0x8B6A, 0x8B6B, 0x8B6C, /* 0x90 */
+ 0x8B6D, 0x8B6E, 0xC3C4, 0xE6C2, 0x8B6F, 0x8B70, 0x8B71, 0x8B72, /* 0x90 */
+ 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, 0x8B78, 0x8B79, 0x8B7A, /* 0xA0 */
+ 0x8B7B, 0x8B7C, 0xE6C1, 0x8B7D, 0x8B7E, 0x8B80, 0x8B81, 0x8B82, /* 0xA0 */
+ 0x8B83, 0x8B84, 0xE6C7, 0xCFB1, 0x8B85, 0xEBF4, 0x8B86, 0x8B87, /* 0xB0 */
+ 0xE6CA, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, 0xE6C5, 0x8B8D, /* 0xB0 */
+ 0x8B8E, 0xBCDE, 0xC9A9, 0x8B8F, 0x8B90, 0x8B91, 0x8B92, 0x8B93, /* 0xC0 */
+ 0x8B94, 0xBCB5, 0x8B95, 0x8B96, 0xCFD3, 0x8B97, 0x8B98, 0x8B99, /* 0xC0 */
+ 0x8B9A, 0x8B9B, 0xE6C8, 0x8B9C, 0xE6C9, 0x8B9D, 0xE6CE, 0x8B9E, /* 0xD0 */
+ 0xE6D0, 0x8B9F, 0x8BA0, 0x8BA1, 0xE6D1, 0x8BA2, 0x8BA3, 0x8BA4, /* 0xD0 */
+ 0xE6CB, 0xB5D5, 0x8BA5, 0xE6CC, 0x8BA6, 0x8BA7, 0xE6CF, 0x8BA8, /* 0xE0 */
+ 0x8BA9, 0xC4DB, 0x8BAA, 0xE6C6, 0x8BAB, 0x8BAC, 0x8BAD, 0x8BAE, /* 0xE0 */
+ 0x8BAF, 0xE6CD, 0x8BB0, 0x8BB1, 0x8BB2, 0x8BB3, 0x8BB4, 0x8BB5, /* 0xF0 */
+ 0x8BB6, 0x8BB7, 0x8BB8, 0x8BB9, 0x8BBA, 0x8BBB, 0x8BBC, 0x8BBD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8BBE, 0x8BBF, 0x8BC0, 0x8BC1, 0x8BC2, 0x8BC3, 0x8BC4, 0x8BC5, /* 0x00 */
+ 0x8BC6, 0xE6D2, 0x8BC7, 0x8BC8, 0x8BC9, 0x8BCA, 0x8BCB, 0x8BCC, /* 0x00 */
+ 0x8BCD, 0x8BCE, 0x8BCF, 0x8BD0, 0x8BD1, 0x8BD2, 0xE6D4, 0xE6D3, /* 0x10 */
+ 0x8BD3, 0x8BD4, 0x8BD5, 0x8BD6, 0x8BD7, 0x8BD8, 0x8BD9, 0x8BDA, /* 0x10 */
+ 0x8BDB, 0x8BDC, 0x8BDD, 0x8BDE, 0x8BDF, 0x8BE0, 0x8BE1, 0x8BE2, /* 0x20 */
+ 0x8BE3, 0x8BE4, 0x8BE5, 0x8BE6, 0x8BE7, 0x8BE8, 0x8BE9, 0x8BEA, /* 0x20 */
+ 0x8BEB, 0x8BEC, 0xE6D5, 0x8BED, 0xD9F8, 0x8BEE, 0x8BEF, 0xE6D6, /* 0x30 */
+ 0x8BF0, 0x8BF1, 0x8BF2, 0x8BF3, 0x8BF4, 0x8BF5, 0x8BF6, 0x8BF7, /* 0x30 */
+ 0xE6D7, 0x8BF8, 0x8BF9, 0x8BFA, 0x8BFB, 0x8BFC, 0x8BFD, 0x8BFE, /* 0x40 */
+ 0x8C40, 0x8C41, 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C46, 0x8C47, /* 0x40 */
+ 0xD7D3, 0xE6DD, 0x8C48, 0xE6DE, 0xBFD7, 0xD4D0, 0x8C49, 0xD7D6, /* 0x50 */
+ 0xB4E6, 0xCBEF, 0xE6DA, 0xD8C3, 0xD7CE, 0xD0A2, 0x8C4A, 0xC3CF, /* 0x50 */
+ 0x8C4B, 0x8C4C, 0xE6DF, 0xBCBE, 0xB9C2, 0xE6DB, 0xD1A7, 0x8C4D, /* 0x60 */
+ 0x8C4E, 0xBAA2, 0xC2CF, 0x8C4F, 0xD8AB, 0x8C50, 0x8C51, 0x8C52, /* 0x60 */
+ 0xCAEB, 0xE5EE, 0x8C53, 0xE6DC, 0x8C54, 0xB7F5, 0x8C55, 0x8C56, /* 0x70 */
+ 0x8C57, 0x8C58, 0xC8E6, 0x8C59, 0x8C5A, 0xC4F5, 0x8C5B, 0x8C5C, /* 0x70 */
+ 0xE5B2, 0xC4FE, 0x8C5D, 0xCBFC, 0xE5B3, 0xD5AC, 0x8C5E, 0xD3EE, /* 0x80 */
+ 0xCAD8, 0xB0B2, 0x8C5F, 0xCBCE, 0xCDEA, 0x8C60, 0x8C61, 0xBAEA, /* 0x80 */
+ 0x8C62, 0x8C63, 0x8C64, 0xE5B5, 0x8C65, 0xE5B4, 0x8C66, 0xD7DA, /* 0x90 */
+ 0xB9D9, 0xD6E6, 0xB6A8, 0xCDF0, 0xD2CB, 0xB1A6, 0xCAB5, 0x8C67, /* 0x90 */
+ 0xB3E8, 0xC9F3, 0xBFCD, 0xD0FB, 0xCAD2, 0xE5B6, 0xBBC2, 0x8C68, /* 0xA0 */
+ 0x8C69, 0x8C6A, 0xCFDC, 0xB9AC, 0x8C6B, 0x8C6C, 0x8C6D, 0x8C6E, /* 0xA0 */
+ 0xD4D7, 0x8C6F, 0x8C70, 0xBAA6, 0xD1E7, 0xCFFC, 0xBCD2, 0x8C71, /* 0xB0 */
+ 0xE5B7, 0xC8DD, 0x8C72, 0x8C73, 0x8C74, 0xBFED, 0xB1F6, 0xCBDE, /* 0xB0 */
+ 0x8C75, 0x8C76, 0xBCC5, 0x8C77, 0xBCC4, 0xD2FA, 0xC3DC, 0xBFDC, /* 0xC0 */
+ 0x8C78, 0x8C79, 0x8C7A, 0x8C7B, 0xB8BB, 0x8C7C, 0x8C7D, 0x8C7E, /* 0xC0 */
+ 0xC3C2, 0x8C80, 0xBAAE, 0xD4A2, 0x8C81, 0x8C82, 0x8C83, 0x8C84, /* 0xD0 */
+ 0x8C85, 0x8C86, 0x8C87, 0x8C88, 0x8C89, 0xC7DE, 0xC4AF, 0xB2EC, /* 0xD0 */
+ 0x8C8A, 0xB9D1, 0x8C8B, 0x8C8C, 0xE5BB, 0xC1C8, 0x8C8D, 0x8C8E, /* 0xE0 */
+ 0xD5AF, 0x8C8F, 0x8C90, 0x8C91, 0x8C92, 0x8C93, 0xE5BC, 0x8C94, /* 0xE0 */
+ 0xE5BE, 0x8C95, 0x8C96, 0x8C97, 0x8C98, 0x8C99, 0x8C9A, 0x8C9B, /* 0xF0 */
+ 0xB4E7, 0xB6D4, 0xCBC2, 0xD1B0, 0xB5BC, 0x8C9C, 0x8C9D, 0xCAD9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8C9E, 0xB7E2, 0x8C9F, 0x8CA0, 0xC9E4, 0x8CA1, 0xBDAB, 0x8CA2, /* 0x00 */
+ 0x8CA3, 0xCEBE, 0xD7F0, 0x8CA4, 0x8CA5, 0x8CA6, 0x8CA7, 0xD0A1, /* 0x00 */
+ 0x8CA8, 0xC9D9, 0x8CA9, 0x8CAA, 0xB6FB, 0xE6D8, 0xBCE2, 0x8CAB, /* 0x10 */
+ 0xB3BE, 0x8CAC, 0xC9D0, 0x8CAD, 0xE6D9, 0xB3A2, 0x8CAE, 0x8CAF, /* 0x10 */
+ 0x8CB0, 0x8CB1, 0xDECC, 0x8CB2, 0xD3C8, 0xDECD, 0x8CB3, 0xD2A2, /* 0x20 */
+ 0x8CB4, 0x8CB5, 0x8CB6, 0x8CB7, 0xDECE, 0x8CB8, 0x8CB9, 0x8CBA, /* 0x20 */
+ 0x8CBB, 0xBECD, 0x8CBC, 0x8CBD, 0xDECF, 0x8CBE, 0x8CBF, 0x8CC0, /* 0x30 */
+ 0xCAAC, 0xD2FC, 0xB3DF, 0xE5EA, 0xC4E1, 0xBEA1, 0xCEB2, 0xC4F2, /* 0x30 */
+ 0xBED6, 0xC6A8, 0xB2E3, 0x8CC1, 0x8CC2, 0xBED3, 0x8CC3, 0x8CC4, /* 0x40 */
+ 0xC7FC, 0xCCEB, 0xBDEC, 0xCEDD, 0x8CC5, 0x8CC6, 0xCABA, 0xC6C1, /* 0x40 */
+ 0xE5EC, 0xD0BC, 0x8CC7, 0x8CC8, 0x8CC9, 0xD5B9, 0x8CCA, 0x8CCB, /* 0x50 */
+ 0x8CCC, 0xE5ED, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, 0xCAF4, 0x8CD1, /* 0x50 */
+ 0xCDC0, 0xC2C5, 0x8CD2, 0xE5EF, 0x8CD3, 0xC2C4, 0xE5F0, 0x8CD4, /* 0x60 */
+ 0x8CD5, 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDA, 0xE5F8, 0xCDCD, /* 0x60 */
+ 0x8CDB, 0xC9BD, 0x8CDC, 0x8CDD, 0x8CDE, 0x8CDF, 0x8CE0, 0x8CE1, /* 0x70 */
+ 0x8CE2, 0xD2D9, 0xE1A8, 0x8CE3, 0x8CE4, 0x8CE5, 0x8CE6, 0xD3EC, /* 0x70 */
+ 0x8CE7, 0xCBEA, 0xC6F1, 0x8CE8, 0x8CE9, 0x8CEA, 0x8CEB, 0x8CEC, /* 0x80 */
+ 0xE1AC, 0x8CED, 0x8CEE, 0x8CEF, 0xE1A7, 0xE1A9, 0x8CF0, 0x8CF1, /* 0x80 */
+ 0xE1AA, 0xE1AF, 0x8CF2, 0x8CF3, 0xB2ED, 0x8CF4, 0xE1AB, 0xB8DA, /* 0x90 */
+ 0xE1AD, 0xE1AE, 0xE1B0, 0xB5BA, 0xE1B1, 0x8CF5, 0x8CF6, 0x8CF7, /* 0x90 */
+ 0x8CF8, 0x8CF9, 0xE1B3, 0xE1B8, 0x8CFA, 0x8CFB, 0x8CFC, 0x8CFD, /* 0xA0 */
+ 0x8CFE, 0xD1D2, 0x8D40, 0xE1B6, 0xE1B5, 0xC1EB, 0x8D41, 0x8D42, /* 0xA0 */
+ 0x8D43, 0xE1B7, 0x8D44, 0xD4C0, 0x8D45, 0xE1B2, 0x8D46, 0xE1BA, /* 0xB0 */
+ 0xB0B6, 0x8D47, 0x8D48, 0x8D49, 0x8D4A, 0xE1B4, 0x8D4B, 0xBFF9, /* 0xB0 */
+ 0x8D4C, 0xE1B9, 0x8D4D, 0x8D4E, 0xE1BB, 0x8D4F, 0x8D50, 0x8D51, /* 0xC0 */
+ 0x8D52, 0x8D53, 0x8D54, 0xE1BE, 0x8D55, 0x8D56, 0x8D57, 0x8D58, /* 0xC0 */
+ 0x8D59, 0x8D5A, 0xE1BC, 0x8D5B, 0x8D5C, 0x8D5D, 0x8D5E, 0x8D5F, /* 0xD0 */
+ 0x8D60, 0xD6C5, 0x8D61, 0x8D62, 0x8D63, 0x8D64, 0x8D65, 0x8D66, /* 0xD0 */
+ 0x8D67, 0xCFBF, 0x8D68, 0x8D69, 0xE1BD, 0xE1BF, 0xC2CD, 0x8D6A, /* 0xE0 */
+ 0xB6EB, 0x8D6B, 0xD3F8, 0x8D6C, 0x8D6D, 0xC7CD, 0x8D6E, 0x8D6F, /* 0xE0 */
+ 0xB7E5, 0x8D70, 0x8D71, 0x8D72, 0x8D73, 0x8D74, 0x8D75, 0x8D76, /* 0xF0 */
+ 0x8D77, 0x8D78, 0x8D79, 0xBEFE, 0x8D7A, 0x8D7B, 0x8D7C, 0x8D7D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8D7E, 0x8D80, 0xE1C0, 0xE1C1, 0x8D81, 0x8D82, 0xE1C7, 0xB3E7, /* 0x00 */
+ 0x8D83, 0x8D84, 0x8D85, 0x8D86, 0x8D87, 0x8D88, 0xC6E9, 0x8D89, /* 0x00 */
+ 0x8D8A, 0x8D8B, 0x8D8C, 0x8D8D, 0xB4DE, 0x8D8E, 0xD1C2, 0x8D8F, /* 0x10 */
+ 0x8D90, 0x8D91, 0x8D92, 0xE1C8, 0x8D93, 0x8D94, 0xE1C6, 0x8D95, /* 0x10 */
+ 0x8D96, 0x8D97, 0x8D98, 0x8D99, 0xE1C5, 0x8D9A, 0xE1C3, 0xE1C2, /* 0x20 */
+ 0x8D9B, 0xB1C0, 0x8D9C, 0x8D9D, 0x8D9E, 0xD5B8, 0xE1C4, 0x8D9F, /* 0x20 */
+ 0x8DA0, 0x8DA1, 0x8DA2, 0x8DA3, 0xE1CB, 0x8DA4, 0x8DA5, 0x8DA6, /* 0x30 */
+ 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, 0x8DAB, 0xE1CC, 0xE1CA, 0x8DAC, /* 0x30 */
+ 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x8DB1, 0x8DB2, 0x8DB3, 0xEFFA, /* 0x40 */
+ 0x8DB4, 0x8DB5, 0xE1D3, 0xE1D2, 0xC7B6, 0x8DB6, 0x8DB7, 0x8DB8, /* 0x40 */
+ 0x8DB9, 0x8DBA, 0x8DBB, 0x8DBC, 0x8DBD, 0x8DBE, 0x8DBF, 0x8DC0, /* 0x50 */
+ 0xE1C9, 0x8DC1, 0x8DC2, 0xE1CE, 0x8DC3, 0xE1D0, 0x8DC4, 0x8DC5, /* 0x50 */
+ 0x8DC6, 0x8DC7, 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCB, 0x8DCC, 0x8DCD, /* 0x60 */
+ 0x8DCE, 0xE1D4, 0x8DCF, 0xE1D1, 0xE1CD, 0x8DD0, 0x8DD1, 0xE1CF, /* 0x60 */
+ 0x8DD2, 0x8DD3, 0x8DD4, 0x8DD5, 0xE1D5, 0x8DD6, 0x8DD7, 0x8DD8, /* 0x70 */
+ 0x8DD9, 0x8DDA, 0x8DDB, 0x8DDC, 0x8DDD, 0x8DDE, 0x8DDF, 0x8DE0, /* 0x70 */
+ 0x8DE1, 0x8DE2, 0xE1D6, 0x8DE3, 0x8DE4, 0x8DE5, 0x8DE6, 0x8DE7, /* 0x80 */
+ 0x8DE8, 0x8DE9, 0x8DEA, 0x8DEB, 0x8DEC, 0x8DED, 0x8DEE, 0x8DEF, /* 0x80 */
+ 0x8DF0, 0x8DF1, 0x8DF2, 0x8DF3, 0x8DF4, 0x8DF5, 0x8DF6, 0x8DF7, /* 0x90 */
+ 0x8DF8, 0xE1D7, 0x8DF9, 0x8DFA, 0x8DFB, 0xE1D8, 0x8DFC, 0x8DFD, /* 0x90 */
+ 0x8DFE, 0x8E40, 0x8E41, 0x8E42, 0x8E43, 0x8E44, 0x8E45, 0x8E46, /* 0xA0 */
+ 0x8E47, 0x8E48, 0x8E49, 0x8E4A, 0x8E4B, 0x8E4C, 0x8E4D, 0x8E4E, /* 0xA0 */
+ 0x8E4F, 0x8E50, 0x8E51, 0x8E52, 0x8E53, 0x8E54, 0x8E55, 0xE1DA, /* 0xB0 */
+ 0x8E56, 0x8E57, 0x8E58, 0x8E59, 0x8E5A, 0x8E5B, 0x8E5C, 0x8E5D, /* 0xB0 */
+ 0x8E5E, 0x8E5F, 0x8E60, 0x8E61, 0x8E62, 0xE1DB, 0x8E63, 0x8E64, /* 0xC0 */
+ 0x8E65, 0x8E66, 0x8E67, 0x8E68, 0x8E69, 0xCEA1, 0x8E6A, 0x8E6B, /* 0xC0 */
+ 0x8E6C, 0x8E6D, 0x8E6E, 0x8E6F, 0x8E70, 0x8E71, 0x8E72, 0x8E73, /* 0xD0 */
+ 0x8E74, 0x8E75, 0x8E76, 0xE7DD, 0x8E77, 0xB4A8, 0xD6DD, 0x8E78, /* 0xD0 */
+ 0x8E79, 0xD1B2, 0xB3B2, 0x8E7A, 0x8E7B, 0xB9A4, 0xD7F3, 0xC7C9, /* 0xE0 */
+ 0xBEDE, 0xB9AE, 0x8E7C, 0xCED7, 0x8E7D, 0x8E7E, 0xB2EE, 0xDBCF, /* 0xE0 */
+ 0x8E80, 0xBCBA, 0xD2D1, 0xCBC8, 0xB0CD, 0x8E81, 0x8E82, 0xCFEF, /* 0xF0 */
+ 0x8E83, 0x8E84, 0x8E85, 0x8E86, 0x8E87, 0xD9E3, 0xBDED, 0x8E88 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E89, 0xB1D2, 0xCAD0, 0xB2BC, 0x8E8A, 0xCBA7, 0xB7AB, 0x8E8B, /* 0x00 */
+ 0xCAA6, 0x8E8C, 0x8E8D, 0x8E8E, 0xCFA3, 0x8E8F, 0x8E90, 0xE0F8, /* 0x00 */
+ 0xD5CA, 0xE0FB, 0x8E91, 0x8E92, 0xE0FA, 0xC5C1, 0xCCFB, 0x8E93, /* 0x10 */
+ 0xC1B1, 0xE0F9, 0xD6E3, 0xB2AF, 0xD6C4, 0xB5DB, 0x8E94, 0x8E95, /* 0x10 */
+ 0x8E96, 0x8E97, 0x8E98, 0x8E99, 0x8E9A, 0x8E9B, 0xB4F8, 0xD6A1, /* 0x20 */
+ 0x8E9C, 0x8E9D, 0x8E9E, 0x8E9F, 0x8EA0, 0xCFAF, 0xB0EF, 0x8EA1, /* 0x20 */
+ 0x8EA2, 0xE0FC, 0x8EA3, 0x8EA4, 0x8EA5, 0x8EA6, 0x8EA7, 0xE1A1, /* 0x30 */
+ 0xB3A3, 0x8EA8, 0x8EA9, 0xE0FD, 0xE0FE, 0xC3B1, 0x8EAA, 0x8EAB, /* 0x30 */
+ 0x8EAC, 0x8EAD, 0xC3DD, 0x8EAE, 0xE1A2, 0xB7F9, 0x8EAF, 0x8EB0, /* 0x40 */
+ 0x8EB1, 0x8EB2, 0x8EB3, 0x8EB4, 0xBBCF, 0x8EB5, 0x8EB6, 0x8EB7, /* 0x40 */
+ 0x8EB8, 0x8EB9, 0x8EBA, 0x8EBB, 0xE1A3, 0xC4BB, 0x8EBC, 0x8EBD, /* 0x50 */
+ 0x8EBE, 0x8EBF, 0x8EC0, 0xE1A4, 0x8EC1, 0x8EC2, 0xE1A5, 0x8EC3, /* 0x50 */
+ 0x8EC4, 0xE1A6, 0xB4B1, 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, 0x8EC9, /* 0x60 */
+ 0x8ECA, 0x8ECB, 0x8ECC, 0x8ECD, 0x8ECE, 0x8ECF, 0x8ED0, 0x8ED1, /* 0x60 */
+ 0x8ED2, 0x8ED3, 0xB8C9, 0xC6BD, 0xC4EA, 0x8ED4, 0xB2A2, 0x8ED5, /* 0x70 */
+ 0xD0D2, 0x8ED6, 0xE7DB, 0xBBC3, 0xD3D7, 0xD3C4, 0x8ED7, 0xB9E3, /* 0x70 */
+ 0xE2CF, 0x8ED8, 0x8ED9, 0x8EDA, 0xD7AF, 0x8EDB, 0xC7EC, 0xB1D3, /* 0x80 */
+ 0x8EDC, 0x8EDD, 0xB4B2, 0xE2D1, 0x8EDE, 0x8EDF, 0x8EE0, 0xD0F2, /* 0x80 */
+ 0xC2AE, 0xE2D0, 0x8EE1, 0xBFE2, 0xD3A6, 0xB5D7, 0xE2D2, 0xB5EA, /* 0x90 */
+ 0x8EE2, 0xC3ED, 0xB8FD, 0x8EE3, 0xB8AE, 0x8EE4, 0xC5D3, 0xB7CF, /* 0x90 */
+ 0xE2D4, 0x8EE5, 0x8EE6, 0x8EE7, 0x8EE8, 0xE2D3, 0xB6C8, 0xD7F9, /* 0xA0 */
+ 0x8EE9, 0x8EEA, 0x8EEB, 0x8EEC, 0x8EED, 0xCDA5, 0x8EEE, 0x8EEF, /* 0xA0 */
+ 0x8EF0, 0x8EF1, 0x8EF2, 0xE2D8, 0x8EF3, 0xE2D6, 0xCAFC, 0xBFB5, /* 0xB0 */
+ 0xD3B9, 0xE2D5, 0x8EF4, 0x8EF5, 0x8EF6, 0x8EF7, 0xE2D7, 0x8EF8, /* 0xB0 */
+ 0x8EF9, 0x8EFA, 0x8EFB, 0x8EFC, 0x8EFD, 0x8EFE, 0x8F40, 0x8F41, /* 0xC0 */
+ 0x8F42, 0xC1AE, 0xC0C8, 0x8F43, 0x8F44, 0x8F45, 0x8F46, 0x8F47, /* 0xC0 */
+ 0x8F48, 0xE2DB, 0xE2DA, 0xC0AA, 0x8F49, 0x8F4A, 0xC1CE, 0x8F4B, /* 0xD0 */
+ 0x8F4C, 0x8F4D, 0x8F4E, 0xE2DC, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, /* 0xD0 */
+ 0x8F53, 0x8F54, 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, /* 0xE0 */
+ 0xE2DD, 0x8F5B, 0xE2DE, 0x8F5C, 0x8F5D, 0x8F5E, 0x8F5F, 0x8F60, /* 0xE0 */
+ 0x8F61, 0x8F62, 0x8F63, 0x8F64, 0xDBC8, 0x8F65, 0xD1D3, 0xCDA2, /* 0xF0 */
+ 0x8F66, 0x8F67, 0xBDA8, 0x8F68, 0x8F69, 0x8F6A, 0xDEC3, 0xD8A5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBFAA, 0xDBCD, 0xD2EC, 0xC6FA, 0xC5AA, 0x8F6B, 0x8F6C, 0x8F6D, /* 0x00 */
+ 0xDEC4, 0x8F6E, 0xB1D7, 0xDFAE, 0x8F6F, 0x8F70, 0x8F71, 0xCABD, /* 0x00 */
+ 0x8F72, 0xDFB1, 0x8F73, 0xB9AD, 0x8F74, 0xD2FD, 0x8F75, 0xB8A5, /* 0x10 */
+ 0xBAEB, 0x8F76, 0x8F77, 0xB3DA, 0x8F78, 0x8F79, 0x8F7A, 0xB5DC, /* 0x10 */
+ 0xD5C5, 0x8F7B, 0x8F7C, 0x8F7D, 0x8F7E, 0xC3D6, 0xCFD2, 0xBBA1, /* 0x20 */
+ 0x8F80, 0xE5F3, 0xE5F2, 0x8F81, 0x8F82, 0xE5F4, 0x8F83, 0xCDE4, /* 0x20 */
+ 0x8F84, 0xC8F5, 0x8F85, 0x8F86, 0x8F87, 0x8F88, 0x8F89, 0x8F8A, /* 0x30 */
+ 0x8F8B, 0xB5AF, 0xC7BF, 0x8F8C, 0xE5F6, 0x8F8D, 0x8F8E, 0x8F8F, /* 0x30 */
+ 0xECB0, 0x8F90, 0x8F91, 0x8F92, 0x8F93, 0x8F94, 0x8F95, 0x8F96, /* 0x40 */
+ 0x8F97, 0x8F98, 0x8F99, 0x8F9A, 0x8F9B, 0x8F9C, 0x8F9D, 0x8F9E, /* 0x40 */
+ 0xE5E6, 0x8F9F, 0xB9E9, 0xB5B1, 0x8FA0, 0xC2BC, 0xE5E8, 0xE5E7, /* 0x50 */
+ 0xE5E9, 0x8FA1, 0x8FA2, 0x8FA3, 0x8FA4, 0xD2CD, 0x8FA5, 0x8FA6, /* 0x50 */
+ 0x8FA7, 0xE1EA, 0xD0CE, 0x8FA8, 0xCDAE, 0x8FA9, 0xD1E5, 0x8FAA, /* 0x60 */
+ 0x8FAB, 0xB2CA, 0xB1EB, 0x8FAC, 0xB1F2, 0xC5ED, 0x8FAD, 0x8FAE, /* 0x60 */
+ 0xD5C3, 0xD3B0, 0x8FAF, 0xE1DC, 0x8FB0, 0x8FB1, 0x8FB2, 0xE1DD, /* 0x70 */
+ 0x8FB3, 0xD2DB, 0x8FB4, 0xB3B9, 0xB1CB, 0x8FB5, 0x8FB6, 0x8FB7, /* 0x70 */
+ 0xCDF9, 0xD5F7, 0xE1DE, 0x8FB8, 0xBEB6, 0xB4FD, 0x8FB9, 0xE1DF, /* 0x80 */
+ 0xBADC, 0xE1E0, 0xBBB2, 0xC2C9, 0xE1E1, 0x8FBA, 0x8FBB, 0x8FBC, /* 0x80 */
+ 0xD0EC, 0x8FBD, 0xCDBD, 0x8FBE, 0x8FBF, 0xE1E2, 0x8FC0, 0xB5C3, /* 0x90 */
+ 0xC5C7, 0xE1E3, 0x8FC1, 0x8FC2, 0xE1E4, 0x8FC3, 0x8FC4, 0x8FC5, /* 0x90 */
+ 0x8FC6, 0xD3F9, 0x8FC7, 0x8FC8, 0x8FC9, 0x8FCA, 0x8FCB, 0x8FCC, /* 0xA0 */
+ 0xE1E5, 0x8FCD, 0xD1AD, 0x8FCE, 0x8FCF, 0xE1E6, 0xCEA2, 0x8FD0, /* 0xA0 */
+ 0x8FD1, 0x8FD2, 0x8FD3, 0x8FD4, 0x8FD5, 0xE1E7, 0x8FD6, 0xB5C2, /* 0xB0 */
+ 0x8FD7, 0x8FD8, 0x8FD9, 0x8FDA, 0xE1E8, 0xBBD5, 0x8FDB, 0x8FDC, /* 0xB0 */
+ 0x8FDD, 0x8FDE, 0x8FDF, 0xD0C4, 0xE2E0, 0xB1D8, 0xD2E4, 0x8FE0, /* 0xC0 */
+ 0x8FE1, 0xE2E1, 0x8FE2, 0x8FE3, 0xBCC9, 0xC8CC, 0x8FE4, 0xE2E3, /* 0xC0 */
+ 0xECFE, 0xECFD, 0xDFAF, 0x8FE5, 0x8FE6, 0x8FE7, 0xE2E2, 0xD6BE, /* 0xD0 */
+ 0xCDFC, 0xC3A6, 0x8FE8, 0x8FE9, 0x8FEA, 0xE3C3, 0x8FEB, 0x8FEC, /* 0xD0 */
+ 0xD6D2, 0xE2E7, 0x8FED, 0x8FEE, 0xE2E8, 0x8FEF, 0x8FF0, 0xD3C7, /* 0xE0 */
+ 0x8FF1, 0x8FF2, 0xE2EC, 0xBFEC, 0x8FF3, 0xE2ED, 0xE2E5, 0x8FF4, /* 0xE0 */
+ 0x8FF5, 0xB3C0, 0x8FF6, 0x8FF7, 0x8FF8, 0xC4EE, 0x8FF9, 0x8FFA, /* 0xF0 */
+ 0xE2EE, 0x8FFB, 0x8FFC, 0xD0C3, 0x8FFD, 0xBAF6, 0xE2E9, 0xB7DE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBBB3, 0xCCAC, 0xCBCB, 0xE2E4, 0xE2E6, 0xE2EA, 0xE2EB, 0x8FFE, /* 0x00 */
+ 0x9040, 0x9041, 0xE2F7, 0x9042, 0x9043, 0xE2F4, 0xD4F5, 0xE2F3, /* 0x00 */
+ 0x9044, 0x9045, 0xC5AD, 0x9046, 0xD5FA, 0xC5C2, 0xB2C0, 0x9047, /* 0x10 */
+ 0x9048, 0xE2EF, 0x9049, 0xE2F2, 0xC1AF, 0xCBBC, 0x904A, 0x904B, /* 0x10 */
+ 0xB5A1, 0xE2F9, 0x904C, 0x904D, 0x904E, 0xBCB1, 0xE2F1, 0xD0D4, /* 0x20 */
+ 0xD4B9, 0xE2F5, 0xB9D6, 0xE2F6, 0x904F, 0x9050, 0x9051, 0xC7D3, /* 0x20 */
+ 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0xE2F0, 0x9057, 0x9058, /* 0x30 */
+ 0x9059, 0x905A, 0x905B, 0xD7DC, 0xEDA1, 0x905C, 0x905D, 0xE2F8, /* 0x30 */
+ 0x905E, 0xEDA5, 0xE2FE, 0xCAD1, 0x905F, 0x9060, 0x9061, 0x9062, /* 0x40 */
+ 0x9063, 0x9064, 0x9065, 0xC1B5, 0x9066, 0xBBD0, 0x9067, 0x9068, /* 0x40 */
+ 0xBFD6, 0x9069, 0xBAE3, 0x906A, 0x906B, 0xCBA1, 0x906C, 0x906D, /* 0x50 */
+ 0x906E, 0xEDA6, 0xEDA3, 0x906F, 0x9070, 0xEDA2, 0x9071, 0x9072, /* 0x50 */
+ 0x9073, 0x9074, 0xBBD6, 0xEDA7, 0xD0F4, 0x9075, 0x9076, 0xEDA4, /* 0x60 */
+ 0xBADE, 0xB6F7, 0xE3A1, 0xB6B2, 0xCCF1, 0xB9A7, 0x9077, 0xCFA2, /* 0x60 */
+ 0xC7A1, 0x9078, 0x9079, 0xBFD2, 0x907A, 0x907B, 0xB6F1, 0x907C, /* 0x70 */
+ 0xE2FA, 0xE2FB, 0xE2FD, 0xE2FC, 0xC4D5, 0xE3A2, 0x907D, 0xD3C1, /* 0x70 */
+ 0x907E, 0x9080, 0x9081, 0xE3A7, 0xC7C4, 0x9082, 0x9083, 0x9084, /* 0x80 */
+ 0x9085, 0xCFA4, 0x9086, 0x9087, 0xE3A9, 0xBAB7, 0x9088, 0x9089, /* 0x80 */
+ 0x908A, 0x908B, 0xE3A8, 0x908C, 0xBBDA, 0x908D, 0xE3A3, 0x908E, /* 0x90 */
+ 0x908F, 0x9090, 0xE3A4, 0xE3AA, 0x9091, 0xE3A6, 0x9092, 0xCEF2, /* 0x90 */
+ 0xD3C6, 0x9093, 0x9094, 0xBBBC, 0x9095, 0x9096, 0xD4C3, 0x9097, /* 0xA0 */
+ 0xC4FA, 0x9098, 0x9099, 0xEDA8, 0xD0FC, 0xE3A5, 0x909A, 0xC3F5, /* 0xA0 */
+ 0x909B, 0xE3AD, 0xB1AF, 0x909C, 0xE3B2, 0x909D, 0x909E, 0x909F, /* 0xB0 */
+ 0xBCC2, 0x90A0, 0x90A1, 0xE3AC, 0xB5BF, 0x90A2, 0x90A3, 0x90A4, /* 0xB0 */
+ 0x90A5, 0x90A6, 0x90A7, 0x90A8, 0x90A9, 0xC7E9, 0xE3B0, 0x90AA, /* 0xC0 */
+ 0x90AB, 0x90AC, 0xBEAA, 0xCDEF, 0x90AD, 0x90AE, 0x90AF, 0x90B0, /* 0xC0 */
+ 0x90B1, 0xBBF3, 0x90B2, 0x90B3, 0x90B4, 0xCCE8, 0x90B5, 0x90B6, /* 0xD0 */
+ 0xE3AF, 0x90B7, 0xE3B1, 0x90B8, 0xCFA7, 0xE3AE, 0x90B9, 0xCEA9, /* 0xD0 */
+ 0xBBDD, 0x90BA, 0x90BB, 0x90BC, 0x90BD, 0x90BE, 0xB5EB, 0xBEE5, /* 0xE0 */
+ 0xB2D2, 0xB3CD, 0x90BF, 0xB1B9, 0xE3AB, 0xB2D1, 0xB5AC, 0xB9DF, /* 0xE0 */
+ 0xB6E8, 0x90C0, 0x90C1, 0xCFEB, 0xE3B7, 0x90C2, 0xBBCC, 0x90C3, /* 0xF0 */
+ 0x90C4, 0xC8C7, 0xD0CA, 0x90C5, 0x90C6, 0x90C7, 0x90C8, 0x90C9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE3B8, 0xB3EE, 0x90CA, 0x90CB, 0x90CC, 0x90CD, 0xEDA9, 0x90CE, /* 0x00 */
+ 0xD3FA, 0xD3E4, 0x90CF, 0x90D0, 0x90D1, 0xEDAA, 0xE3B9, 0xD2E2, /* 0x00 */
+ 0x90D2, 0x90D3, 0x90D4, 0x90D5, 0x90D6, 0xE3B5, 0x90D7, 0x90D8, /* 0x10 */
+ 0x90D9, 0x90DA, 0xD3DE, 0x90DB, 0x90DC, 0x90DD, 0x90DE, 0xB8D0, /* 0x10 */
+ 0xE3B3, 0x90DF, 0x90E0, 0xE3B6, 0xB7DF, 0x90E1, 0xE3B4, 0xC0A2, /* 0x20 */
+ 0x90E2, 0x90E3, 0x90E4, 0xE3BA, 0x90E5, 0x90E6, 0x90E7, 0x90E8, /* 0x20 */
+ 0x90E9, 0x90EA, 0x90EB, 0x90EC, 0x90ED, 0x90EE, 0x90EF, 0x90F0, /* 0x30 */
+ 0x90F1, 0x90F2, 0x90F3, 0x90F4, 0x90F5, 0x90F6, 0x90F7, 0xD4B8, /* 0x30 */
+ 0x90F8, 0x90F9, 0x90FA, 0x90FB, 0x90FC, 0x90FD, 0x90FE, 0x9140, /* 0x40 */
+ 0xB4C8, 0x9141, 0xE3BB, 0x9142, 0xBBC5, 0x9143, 0xC9F7, 0x9144, /* 0x40 */
+ 0x9145, 0xC9E5, 0x9146, 0x9147, 0x9148, 0xC4BD, 0x9149, 0x914A, /* 0x50 */
+ 0x914B, 0x914C, 0x914D, 0x914E, 0x914F, 0xEDAB, 0x9150, 0x9151, /* 0x50 */
+ 0x9152, 0x9153, 0xC2FD, 0x9154, 0x9155, 0x9156, 0x9157, 0xBBDB, /* 0x60 */
+ 0xBFAE, 0x9158, 0x9159, 0x915A, 0x915B, 0x915C, 0x915D, 0x915E, /* 0x60 */
+ 0xCEBF, 0x915F, 0x9160, 0x9161, 0x9162, 0xE3BC, 0x9163, 0xBFB6, /* 0x70 */
+ 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, 0x916A, 0x916B, /* 0x70 */
+ 0x916C, 0x916D, 0x916E, 0x916F, 0x9170, 0x9171, 0x9172, 0x9173, /* 0x80 */
+ 0x9174, 0x9175, 0x9176, 0xB1EF, 0x9177, 0x9178, 0xD4F7, 0x9179, /* 0x80 */
+ 0x917A, 0x917B, 0x917C, 0x917D, 0xE3BE, 0x917E, 0x9180, 0x9181, /* 0x90 */
+ 0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0xEDAD, 0x9187, 0x9188, /* 0x90 */
+ 0x9189, 0x918A, 0x918B, 0x918C, 0x918D, 0x918E, 0x918F, 0xE3BF, /* 0xA0 */
+ 0xBAA9, 0xEDAC, 0x9190, 0x9191, 0xE3BD, 0x9192, 0x9193, 0x9194, /* 0xA0 */
+ 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919A, 0x919B, 0xE3C0, /* 0xB0 */
+ 0x919C, 0x919D, 0x919E, 0x919F, 0x91A0, 0x91A1, 0xBAB6, 0x91A2, /* 0xB0 */
+ 0x91A3, 0x91A4, 0xB6AE, 0x91A5, 0x91A6, 0x91A7, 0x91A8, 0x91A9, /* 0xC0 */
+ 0xD0B8, 0x91AA, 0xB0C3, 0xEDAE, 0x91AB, 0x91AC, 0x91AD, 0x91AE, /* 0xC0 */
+ 0x91AF, 0xEDAF, 0xC0C1, 0x91B0, 0xE3C1, 0x91B1, 0x91B2, 0x91B3, /* 0xD0 */
+ 0x91B4, 0x91B5, 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BA, 0x91BB, /* 0xD0 */
+ 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C0, 0x91C1, 0xC5B3, 0x91C2, /* 0xE0 */
+ 0x91C3, 0x91C4, 0x91C5, 0x91C6, 0x91C7, 0x91C8, 0x91C9, 0x91CA, /* 0xE0 */
+ 0x91CB, 0x91CC, 0x91CD, 0x91CE, 0x91CF, 0xE3C2, 0x91D0, 0x91D1, /* 0xF0 */
+ 0x91D2, 0x91D3, 0x91D4, 0x91D5, 0x91D6, 0x91D7, 0x91D8, 0xDCB2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x91D9, 0x91DA, 0x91DB, 0x91DC, 0x91DD, 0x91DE, 0xEDB0, 0x91DF, /* 0x00 */
+ 0xB8EA, 0x91E0, 0xCEEC, 0xEAA7, 0xD0E7, 0xCAF9, 0xC8D6, 0xCFB7, /* 0x00 */
+ 0xB3C9, 0xCED2, 0xBDE4, 0x91E1, 0x91E2, 0xE3DE, 0xBBF2, 0xEAA8, /* 0x10 */
+ 0xD5BD, 0x91E3, 0xC6DD, 0xEAA9, 0x91E4, 0x91E5, 0x91E6, 0xEAAA, /* 0x10 */
+ 0x91E7, 0xEAAC, 0xEAAB, 0x91E8, 0xEAAE, 0xEAAD, 0x91E9, 0x91EA, /* 0x20 */
+ 0x91EB, 0x91EC, 0xBDD8, 0x91ED, 0xEAAF, 0x91EE, 0xC2BE, 0x91EF, /* 0x20 */
+ 0x91F0, 0x91F1, 0x91F2, 0xB4C1, 0xB4F7, 0x91F3, 0x91F4, 0xBBA7, /* 0x30 */
+ 0x91F5, 0x91F6, 0x91F7, 0x91F8, 0x91F9, 0xECE6, 0xECE5, 0xB7BF, /* 0x30 */
+ 0xCBF9, 0xB1E2, 0x91FA, 0xECE7, 0x91FB, 0x91FC, 0x91FD, 0xC9C8, /* 0x40 */
+ 0xECE8, 0xECE9, 0x91FE, 0xCAD6, 0xDED0, 0xB2C5, 0xD4FA, 0x9240, /* 0x40 */
+ 0x9241, 0xC6CB, 0xB0C7, 0xB4F2, 0xC8D3, 0x9242, 0x9243, 0x9244, /* 0x50 */
+ 0xCDD0, 0x9245, 0x9246, 0xBFB8, 0x9247, 0x9248, 0x9249, 0x924A, /* 0x50 */
+ 0x924B, 0x924C, 0x924D, 0xBFDB, 0x924E, 0x924F, 0xC7A4, 0xD6B4, /* 0x60 */
+ 0x9250, 0xC0A9, 0xDED1, 0xC9A8, 0xD1EF, 0xC5A4, 0xB0E7, 0xB3B6, /* 0x60 */
+ 0xC8C5, 0x9251, 0x9252, 0xB0E2, 0x9253, 0x9254, 0xB7F6, 0x9255, /* 0x70 */
+ 0x9256, 0xC5FA, 0x9257, 0x9258, 0xB6F3, 0x9259, 0xD5D2, 0xB3D0, /* 0x70 */
+ 0xBCBC, 0x925A, 0x925B, 0x925C, 0xB3AD, 0x925D, 0x925E, 0x925F, /* 0x80 */
+ 0x9260, 0xBEF1, 0xB0D1, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, /* 0x80 */
+ 0x9266, 0xD2D6, 0xCAE3, 0xD7A5, 0x9267, 0xCDB6, 0xB6B6, 0xBFB9, /* 0x90 */
+ 0xD5DB, 0x9268, 0xB8A7, 0xC5D7, 0x9269, 0x926A, 0x926B, 0xDED2, /* 0x90 */
+ 0xBFD9, 0xC2D5, 0xC7C0, 0x926C, 0xBBA4, 0xB1A8, 0x926D, 0x926E, /* 0xA0 */
+ 0xC5EA, 0x926F, 0x9270, 0xC5FB, 0xCCA7, 0x9271, 0x9272, 0x9273, /* 0xA0 */
+ 0x9274, 0xB1A7, 0x9275, 0x9276, 0x9277, 0xB5D6, 0x9278, 0x9279, /* 0xB0 */
+ 0x927A, 0xC4A8, 0x927B, 0xDED3, 0xD1BA, 0xB3E9, 0x927C, 0xC3F2, /* 0xB0 */
+ 0x927D, 0x927E, 0xB7F7, 0x9280, 0xD6F4, 0xB5A3, 0xB2F0, 0xC4B4, /* 0xC0 */
+ 0xC4E9, 0xC0AD, 0xDED4, 0x9281, 0xB0E8, 0xC5C4, 0xC1E0, 0x9282, /* 0xC0 */
+ 0xB9D5, 0x9283, 0xBEDC, 0xCDD8, 0xB0CE, 0x9284, 0xCDCF, 0xDED6, /* 0xD0 */
+ 0xBED0, 0xD7BE, 0xDED5, 0xD5D0, 0xB0DD, 0x9285, 0x9286, 0xC4E2, /* 0xD0 */
+ 0x9287, 0x9288, 0xC2A3, 0xBCF0, 0x9289, 0xD3B5, 0xC0B9, 0xC5A1, /* 0xE0 */
+ 0xB2A6, 0xD4F1, 0x928A, 0x928B, 0xC0A8, 0xCAC3, 0xDED7, 0xD5FC, /* 0xE0 */
+ 0x928C, 0xB9B0, 0x928D, 0xC8AD, 0xCBA9, 0x928E, 0xDED9, 0xBFBD, /* 0xF0 */
+ 0x928F, 0x9290, 0x9291, 0x9292, 0xC6B4, 0xD7A7, 0xCAB0, 0xC4C3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9293, 0xB3D6, 0xB9D2, 0x9294, 0x9295, 0x9296, 0x9297, 0xD6B8, /* 0x00 */
+ 0xEAFC, 0xB0B4, 0x9298, 0x9299, 0x929A, 0x929B, 0xBFE6, 0x929C, /* 0x00 */
+ 0x929D, 0xCCF4, 0x929E, 0x929F, 0x92A0, 0x92A1, 0xCDDA, 0x92A2, /* 0x10 */
+ 0x92A3, 0x92A4, 0xD6BF, 0xC2CE, 0x92A5, 0xCECE, 0xCCA2, 0xD0AE, /* 0x10 */
+ 0xC4D3, 0xB5B2, 0xDED8, 0xD5F5, 0xBCB7, 0xBBD3, 0x92A6, 0x92A7, /* 0x20 */
+ 0xB0A4, 0x92A8, 0xC5B2, 0xB4EC, 0x92A9, 0x92AA, 0x92AB, 0xD5F1, /* 0x20 */
+ 0x92AC, 0x92AD, 0xEAFD, 0x92AE, 0x92AF, 0x92B0, 0x92B1, 0x92B2, /* 0x30 */
+ 0x92B3, 0xDEDA, 0xCDA6, 0x92B4, 0x92B5, 0xCDEC, 0x92B6, 0x92B7, /* 0x30 */
+ 0x92B8, 0x92B9, 0xCEE6, 0xDEDC, 0x92BA, 0xCDB1, 0xC0A6, 0x92BB, /* 0x40 */
+ 0x92BC, 0xD7BD, 0x92BD, 0xDEDB, 0xB0C6, 0xBAB4, 0xC9D3, 0xC4F3, /* 0x40 */
+ 0xBEE8, 0x92BE, 0x92BF, 0x92C0, 0x92C1, 0xB2B6, 0x92C2, 0x92C3, /* 0x50 */
+ 0x92C4, 0x92C5, 0x92C6, 0x92C7, 0x92C8, 0x92C9, 0xC0CC, 0xCBF0, /* 0x50 */
+ 0x92CA, 0xBCF1, 0xBBBB, 0xB5B7, 0x92CB, 0x92CC, 0x92CD, 0xC5F5, /* 0x60 */
+ 0x92CE, 0xDEE6, 0x92CF, 0x92D0, 0x92D1, 0xDEE3, 0xBEDD, 0x92D2, /* 0x60 */
+ 0x92D3, 0xDEDF, 0x92D4, 0x92D5, 0x92D6, 0x92D7, 0xB4B7, 0xBDDD, /* 0x70 */
+ 0x92D8, 0x92D9, 0xDEE0, 0xC4ED, 0x92DA, 0x92DB, 0x92DC, 0x92DD, /* 0x70 */
+ 0xCFC6, 0x92DE, 0xB5E0, 0x92DF, 0x92E0, 0x92E1, 0x92E2, 0xB6DE, /* 0x80 */
+ 0xCADA, 0xB5F4, 0xDEE5, 0x92E3, 0xD5C6, 0x92E4, 0xDEE1, 0xCCCD, /* 0x80 */
+ 0xC6FE, 0x92E5, 0xC5C5, 0x92E6, 0x92E7, 0x92E8, 0xD2B4, 0x92E9, /* 0x90 */
+ 0xBEF2, 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, /* 0x90 */
+ 0xC2D3, 0x92F1, 0xCCBD, 0xB3B8, 0x92F2, 0xBDD3, 0x92F3, 0xBFD8, /* 0xA0 */
+ 0xCDC6, 0xD1DA, 0xB4EB, 0x92F4, 0xDEE4, 0xDEDD, 0xDEE7, 0x92F5, /* 0xA0 */
+ 0xEAFE, 0x92F6, 0x92F7, 0xC2B0, 0xDEE2, 0x92F8, 0x92F9, 0xD6C0, /* 0xB0 */
+ 0xB5A7, 0x92FA, 0xB2F4, 0x92FB, 0xDEE8, 0x92FC, 0xDEF2, 0x92FD, /* 0xB0 */
+ 0x92FE, 0x9340, 0x9341, 0x9342, 0xDEED, 0x9343, 0xDEF1, 0x9344, /* 0xC0 */
+ 0x9345, 0xC8E0, 0x9346, 0x9347, 0x9348, 0xD7E1, 0xDEEF, 0xC3E8, /* 0xC0 */
+ 0xCCE1, 0x9349, 0xB2E5, 0x934A, 0x934B, 0x934C, 0xD2BE, 0x934D, /* 0xD0 */
+ 0x934E, 0x934F, 0x9350, 0x9351, 0x9352, 0x9353, 0xDEEE, 0x9354, /* 0xD0 */
+ 0xDEEB, 0xCED5, 0x9355, 0xB4A7, 0x9356, 0x9357, 0x9358, 0x9359, /* 0xE0 */
+ 0x935A, 0xBFAB, 0xBEBE, 0x935B, 0x935C, 0xBDD2, 0x935D, 0x935E, /* 0xE0 */
+ 0x935F, 0x9360, 0xDEE9, 0x9361, 0xD4AE, 0x9362, 0xDEDE, 0x9363, /* 0xF0 */
+ 0xDEEA, 0x9364, 0x9365, 0x9366, 0x9367, 0xC0BF, 0x9368, 0xDEEC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB2F3, 0xB8E9, 0xC2A7, 0x9369, 0x936A, 0xBDC1, 0x936B, 0x936C, /* 0x00 */
+ 0x936D, 0x936E, 0x936F, 0xDEF5, 0xDEF8, 0x9370, 0x9371, 0xB2AB, /* 0x00 */
+ 0xB4A4, 0x9372, 0x9373, 0xB4EA, 0xC9A6, 0x9374, 0x9375, 0x9376, /* 0x10 */
+ 0x9377, 0x9378, 0x9379, 0xDEF6, 0xCBD1, 0x937A, 0xB8E3, 0x937B, /* 0x10 */
+ 0xDEF7, 0xDEFA, 0x937C, 0x937D, 0x937E, 0x9380, 0xDEF9, 0x9381, /* 0x20 */
+ 0x9382, 0x9383, 0xCCC2, 0x9384, 0xB0E1, 0xB4EE, 0x9385, 0x9386, /* 0x20 */
+ 0x9387, 0x9388, 0x9389, 0x938A, 0xE5BA, 0x938B, 0x938C, 0x938D, /* 0x30 */
+ 0x938E, 0x938F, 0xD0AF, 0x9390, 0x9391, 0xB2EB, 0x9392, 0xEBA1, /* 0x30 */
+ 0x9393, 0xDEF4, 0x9394, 0x9395, 0xC9E3, 0xDEF3, 0xB0DA, 0xD2A1, /* 0x40 */
+ 0xB1F7, 0x9396, 0xCCAF, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, /* 0x40 */
+ 0x939C, 0x939D, 0xDEF0, 0x939E, 0xCBA4, 0x939F, 0x93A0, 0x93A1, /* 0x50 */
+ 0xD5AA, 0x93A2, 0x93A3, 0x93A4, 0x93A5, 0x93A6, 0xDEFB, 0x93A7, /* 0x50 */
+ 0x93A8, 0x93A9, 0x93AA, 0x93AB, 0x93AC, 0x93AD, 0x93AE, 0xB4DD, /* 0x60 */
+ 0x93AF, 0xC4A6, 0x93B0, 0x93B1, 0x93B2, 0xDEFD, 0x93B3, 0x93B4, /* 0x60 */
+ 0x93B5, 0x93B6, 0x93B7, 0x93B8, 0x93B9, 0x93BA, 0x93BB, 0x93BC, /* 0x70 */
+ 0xC3FE, 0xC4A1, 0xDFA1, 0x93BD, 0x93BE, 0x93BF, 0x93C0, 0x93C1, /* 0x70 */
+ 0x93C2, 0x93C3, 0xC1CC, 0x93C4, 0xDEFC, 0xBEEF, 0x93C5, 0xC6B2, /* 0x80 */
+ 0x93C6, 0x93C7, 0x93C8, 0x93C9, 0x93CA, 0x93CB, 0x93CC, 0x93CD, /* 0x80 */
+ 0x93CE, 0xB3C5, 0xC8F6, 0x93CF, 0x93D0, 0xCBBA, 0xDEFE, 0x93D1, /* 0x90 */
+ 0x93D2, 0xDFA4, 0x93D3, 0x93D4, 0x93D5, 0x93D6, 0xD7B2, 0x93D7, /* 0x90 */
+ 0x93D8, 0x93D9, 0x93DA, 0x93DB, 0xB3B7, 0x93DC, 0x93DD, 0x93DE, /* 0xA0 */
+ 0x93DF, 0xC1C3, 0x93E0, 0x93E1, 0xC7CB, 0xB2A5, 0xB4E9, 0x93E2, /* 0xA0 */
+ 0xD7AB, 0x93E3, 0x93E4, 0x93E5, 0x93E6, 0xC4EC, 0x93E7, 0xDFA2, /* 0xB0 */
+ 0xDFA3, 0x93E8, 0xDFA5, 0x93E9, 0xBAB3, 0x93EA, 0x93EB, 0x93EC, /* 0xB0 */
+ 0xDFA6, 0x93ED, 0xC0DE, 0x93EE, 0x93EF, 0xC9C3, 0x93F0, 0x93F1, /* 0xC0 */
+ 0x93F2, 0x93F3, 0x93F4, 0x93F5, 0x93F6, 0xB2D9, 0xC7E6, 0x93F7, /* 0xC0 */
+ 0xDFA7, 0x93F8, 0xC7DC, 0x93F9, 0x93FA, 0x93FB, 0x93FC, 0xDFA8, /* 0xD0 */
+ 0xEBA2, 0x93FD, 0x93FE, 0x9440, 0x9441, 0x9442, 0xCBD3, 0x9443, /* 0xD0 */
+ 0x9444, 0x9445, 0xDFAA, 0x9446, 0xDFA9, 0x9447, 0xB2C1, 0x9448, /* 0xE0 */
+ 0x9449, 0x944A, 0x944B, 0x944C, 0x944D, 0x944E, 0x944F, 0x9450, /* 0xE0 */
+ 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, /* 0xF0 */
+ 0x9459, 0x945A, 0x945B, 0x945C, 0x945D, 0x945E, 0x945F, 0x9460 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC5CA, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, /* 0x00 */
+ 0x9468, 0xDFAB, 0x9469, 0x946A, 0x946B, 0x946C, 0x946D, 0x946E, /* 0x00 */
+ 0x946F, 0x9470, 0xD4DC, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, /* 0x10 */
+ 0xC8C1, 0x9476, 0x9477, 0x9478, 0x9479, 0x947A, 0x947B, 0x947C, /* 0x10 */
+ 0x947D, 0x947E, 0x9480, 0x9481, 0x9482, 0xDFAC, 0x9483, 0x9484, /* 0x20 */
+ 0x9485, 0x9486, 0x9487, 0xBEF0, 0x9488, 0x9489, 0xDFAD, 0xD6A7, /* 0x20 */
+ 0x948A, 0x948B, 0x948C, 0x948D, 0xEAB7, 0xEBB6, 0xCAD5, 0x948E, /* 0x30 */
+ 0xD8FC, 0xB8C4, 0x948F, 0xB9A5, 0x9490, 0x9491, 0xB7C5, 0xD5FE, /* 0x30 */
+ 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0xB9CA, 0x9497, 0x9498, /* 0x40 */
+ 0xD0A7, 0xF4CD, 0x9499, 0x949A, 0xB5D0, 0x949B, 0x949C, 0xC3F4, /* 0x40 */
+ 0x949D, 0xBEC8, 0x949E, 0x949F, 0x94A0, 0xEBB7, 0xB0BD, 0x94A1, /* 0x50 */
+ 0x94A2, 0xBDCC, 0x94A3, 0xC1B2, 0x94A4, 0xB1D6, 0xB3A8, 0x94A5, /* 0x50 */
+ 0x94A6, 0x94A7, 0xB8D2, 0xC9A2, 0x94A8, 0x94A9, 0xB6D8, 0x94AA, /* 0x60 */
+ 0x94AB, 0x94AC, 0x94AD, 0xEBB8, 0xBEB4, 0x94AE, 0x94AF, 0x94B0, /* 0x60 */
+ 0xCAFD, 0x94B1, 0xC7C3, 0x94B2, 0xD5FB, 0x94B3, 0x94B4, 0xB7F3, /* 0x70 */
+ 0x94B5, 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC, /* 0x70 */
+ 0x94BD, 0x94BE, 0x94BF, 0x94C0, 0x94C1, 0x94C2, 0x94C3, 0xCEC4, /* 0x80 */
+ 0x94C4, 0x94C5, 0x94C6, 0xD5AB, 0xB1F3, 0x94C7, 0x94C8, 0x94C9, /* 0x80 */
+ 0xECB3, 0xB0DF, 0x94CA, 0xECB5, 0x94CB, 0x94CC, 0x94CD, 0xB6B7, /* 0x90 */
+ 0x94CE, 0xC1CF, 0x94CF, 0xF5FA, 0xD0B1, 0x94D0, 0x94D1, 0xD5E5, /* 0x90 */
+ 0x94D2, 0xCED3, 0x94D3, 0x94D4, 0xBDEF, 0xB3E2, 0x94D5, 0xB8AB, /* 0xA0 */
+ 0x94D6, 0xD5B6, 0x94D7, 0xEDBD, 0x94D8, 0xB6CF, 0x94D9, 0xCBB9, /* 0xA0 */
+ 0xD0C2, 0x94DA, 0x94DB, 0x94DC, 0x94DD, 0x94DE, 0x94DF, 0x94E0, /* 0xB0 */
+ 0x94E1, 0xB7BD, 0x94E2, 0x94E3, 0xECB6, 0xCAA9, 0x94E4, 0x94E5, /* 0xB0 */
+ 0x94E6, 0xC5D4, 0x94E7, 0xECB9, 0xECB8, 0xC2C3, 0xECB7, 0x94E8, /* 0xC0 */
+ 0x94E9, 0x94EA, 0x94EB, 0xD0FD, 0xECBA, 0x94EC, 0xECBB, 0xD7E5, /* 0xC0 */
+ 0x94ED, 0x94EE, 0xECBC, 0x94EF, 0x94F0, 0x94F1, 0xECBD, 0xC6EC, /* 0xD0 */
+ 0x94F2, 0x94F3, 0x94F4, 0x94F5, 0x94F6, 0x94F7, 0x94F8, 0x94F9, /* 0xD0 */
+ 0xCEDE, 0x94FA, 0xBCC8, 0x94FB, 0x94FC, 0xC8D5, 0xB5A9, 0xBEC9, /* 0xE0 */
+ 0xD6BC, 0xD4E7, 0x94FD, 0x94FE, 0xD1AE, 0xD0F1, 0xEAB8, 0xEAB9, /* 0xE0 */
+ 0xEABA, 0xBAB5, 0x9540, 0x9541, 0x9542, 0x9543, 0xCAB1, 0xBFF5, /* 0xF0 */
+ 0x9544, 0x9545, 0xCDFA, 0x9546, 0x9547, 0x9548, 0x9549, 0x954A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEAC0, 0x954B, 0xB0BA, 0xEABE, 0x954C, 0x954D, 0xC0A5, 0x954E, /* 0x00 */
+ 0x954F, 0x9550, 0xEABB, 0x9551, 0xB2FD, 0x9552, 0xC3F7, 0xBBE8, /* 0x00 */
+ 0x9553, 0x9554, 0x9555, 0xD2D7, 0xCEF4, 0xEABF, 0x9556, 0x9557, /* 0x10 */
+ 0x9558, 0xEABC, 0x9559, 0x955A, 0x955B, 0xEAC3, 0x955C, 0xD0C7, /* 0x10 */
+ 0xD3B3, 0x955D, 0x955E, 0x955F, 0x9560, 0xB4BA, 0x9561, 0xC3C1, /* 0x20 */
+ 0xD7F2, 0x9562, 0x9563, 0x9564, 0x9565, 0xD5D1, 0x9566, 0xCAC7, /* 0x20 */
+ 0x9567, 0xEAC5, 0x9568, 0x9569, 0xEAC4, 0xEAC7, 0xEAC6, 0x956A, /* 0x30 */
+ 0x956B, 0x956C, 0x956D, 0x956E, 0xD6E7, 0x956F, 0xCFD4, 0x9570, /* 0x30 */
+ 0x9571, 0xEACB, 0x9572, 0xBBCE, 0x9573, 0x9574, 0x9575, 0x9576, /* 0x40 */
+ 0x9577, 0x9578, 0x9579, 0xBDFA, 0xC9CE, 0x957A, 0x957B, 0xEACC, /* 0x40 */
+ 0x957C, 0x957D, 0xC9B9, 0xCFFE, 0xEACA, 0xD4CE, 0xEACD, 0xEACF, /* 0x50 */
+ 0x957E, 0x9580, 0xCDED, 0x9581, 0x9582, 0x9583, 0x9584, 0xEAC9, /* 0x50 */
+ 0x9585, 0xEACE, 0x9586, 0x9587, 0xCEEE, 0x9588, 0xBBDE, 0x9589, /* 0x60 */
+ 0xB3BF, 0x958A, 0x958B, 0x958C, 0x958D, 0x958E, 0xC6D5, 0xBEB0, /* 0x60 */
+ 0xCEFA, 0x958F, 0x9590, 0x9591, 0xC7E7, 0x9592, 0xBEA7, 0xEAD0, /* 0x70 */
+ 0x9593, 0x9594, 0xD6C7, 0x9595, 0x9596, 0x9597, 0xC1C0, 0x9598, /* 0x70 */
+ 0x9599, 0x959A, 0xD4DD, 0x959B, 0xEAD1, 0x959C, 0x959D, 0xCFBE, /* 0x80 */
+ 0x959E, 0x959F, 0x95A0, 0x95A1, 0xEAD2, 0x95A2, 0x95A3, 0x95A4, /* 0x80 */
+ 0x95A5, 0xCAEE, 0x95A6, 0x95A7, 0x95A8, 0x95A9, 0xC5AF, 0xB0B5, /* 0x90 */
+ 0x95AA, 0x95AB, 0x95AC, 0x95AD, 0x95AE, 0xEAD4, 0x95AF, 0x95B0, /* 0x90 */
+ 0x95B1, 0x95B2, 0x95B3, 0x95B4, 0x95B5, 0x95B6, 0x95B7, 0xEAD3, /* 0xA0 */
+ 0xF4DF, 0x95B8, 0x95B9, 0x95BA, 0x95BB, 0x95BC, 0xC4BA, 0x95BD, /* 0xA0 */
+ 0x95BE, 0x95BF, 0x95C0, 0x95C1, 0xB1A9, 0x95C2, 0x95C3, 0x95C4, /* 0xB0 */
+ 0x95C5, 0xE5DF, 0x95C6, 0x95C7, 0x95C8, 0x95C9, 0xEAD5, 0x95CA, /* 0xB0 */
+ 0x95CB, 0x95CC, 0x95CD, 0x95CE, 0x95CF, 0x95D0, 0x95D1, 0x95D2, /* 0xC0 */
+ 0x95D3, 0x95D4, 0x95D5, 0x95D6, 0x95D7, 0x95D8, 0x95D9, 0x95DA, /* 0xC0 */
+ 0x95DB, 0x95DC, 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E1, 0x95E2, /* 0xD0 */
+ 0x95E3, 0xCAEF, 0x95E4, 0xEAD6, 0xEAD7, 0xC6D8, 0x95E5, 0x95E6, /* 0xD0 */
+ 0x95E7, 0x95E8, 0x95E9, 0x95EA, 0x95EB, 0x95EC, 0xEAD8, 0x95ED, /* 0xE0 */
+ 0x95EE, 0xEAD9, 0x95EF, 0x95F0, 0x95F1, 0x95F2, 0x95F3, 0x95F4, /* 0xE0 */
+ 0xD4BB, 0x95F5, 0xC7FA, 0xD2B7, 0xB8FC, 0x95F6, 0x95F7, 0xEAC2, /* 0xF0 */
+ 0x95F8, 0xB2DC, 0x95F9, 0x95FA, 0xC2FC, 0x95FB, 0xD4F8, 0xCCE6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7EE, 0x95FC, 0x95FD, 0x95FE, 0x9640, 0x9641, 0x9642, 0x9643, /* 0x00 */
+ 0xD4C2, 0xD3D0, 0xEBC3, 0xC5F3, 0x9644, 0xB7FE, 0x9645, 0x9646, /* 0x00 */
+ 0xEBD4, 0x9647, 0x9648, 0x9649, 0xCBB7, 0xEBDE, 0x964A, 0xC0CA, /* 0x10 */
+ 0x964B, 0x964C, 0x964D, 0xCDFB, 0x964E, 0xB3AF, 0x964F, 0xC6DA, /* 0x10 */
+ 0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0xEBFC, 0x9656, /* 0x20 */
+ 0xC4BE, 0x9657, 0xCEB4, 0xC4A9, 0xB1BE, 0xD4FD, 0x9658, 0xCAF5, /* 0x20 */
+ 0x9659, 0xD6EC, 0x965A, 0x965B, 0xC6D3, 0xB6E4, 0x965C, 0x965D, /* 0x30 */
+ 0x965E, 0x965F, 0xBBFA, 0x9660, 0x9661, 0xD0E0, 0x9662, 0x9663, /* 0x30 */
+ 0xC9B1, 0x9664, 0xD4D3, 0xC8A8, 0x9665, 0x9666, 0xB8CB, 0x9667, /* 0x40 */
+ 0xE8BE, 0xC9BC, 0x9668, 0x9669, 0xE8BB, 0x966A, 0xC0EE, 0xD0D3, /* 0x40 */
+ 0xB2C4, 0xB4E5, 0x966B, 0xE8BC, 0x966C, 0x966D, 0xD5C8, 0x966E, /* 0x50 */
+ 0x966F, 0x9670, 0x9671, 0x9672, 0xB6C5, 0x9673, 0xE8BD, 0xCAF8, /* 0x50 */
+ 0xB8DC, 0xCCF5, 0x9674, 0x9675, 0x9676, 0xC0B4, 0x9677, 0x9678, /* 0x60 */
+ 0xD1EE, 0xE8BF, 0xE8C2, 0x9679, 0x967A, 0xBABC, 0x967B, 0xB1AD, /* 0x60 */
+ 0xBDDC, 0x967C, 0xEABD, 0xE8C3, 0x967D, 0xE8C6, 0x967E, 0xE8CB, /* 0x70 */
+ 0x9680, 0x9681, 0x9682, 0x9683, 0xE8CC, 0x9684, 0xCBC9, 0xB0E5, /* 0x70 */
+ 0x9685, 0xBCAB, 0x9686, 0x9687, 0xB9B9, 0x9688, 0x9689, 0xE8C1, /* 0x80 */
+ 0x968A, 0xCDF7, 0x968B, 0xE8CA, 0x968C, 0x968D, 0x968E, 0x968F, /* 0x80 */
+ 0xCEF6, 0x9690, 0x9691, 0x9692, 0x9693, 0xD5ED, 0x9694, 0xC1D6, /* 0x90 */
+ 0xE8C4, 0x9695, 0xC3B6, 0x9696, 0xB9FB, 0xD6A6, 0xE8C8, 0x9697, /* 0x90 */
+ 0x9698, 0x9699, 0xCAE0, 0xD4E6, 0x969A, 0xE8C0, 0x969B, 0xE8C5, /* 0xA0 */
+ 0xE8C7, 0x969C, 0xC7B9, 0xB7E3, 0x969D, 0xE8C9, 0x969E, 0xBFDD, /* 0xA0 */
+ 0xE8D2, 0x969F, 0x96A0, 0xE8D7, 0x96A1, 0xE8D5, 0xBCDC, 0xBCCF, /* 0xB0 */
+ 0xE8DB, 0x96A2, 0x96A3, 0x96A4, 0x96A5, 0x96A6, 0x96A7, 0x96A8, /* 0xB0 */
+ 0x96A9, 0xE8DE, 0x96AA, 0xE8DA, 0xB1FA, 0x96AB, 0x96AC, 0x96AD, /* 0xC0 */
+ 0x96AE, 0x96AF, 0x96B0, 0x96B1, 0x96B2, 0x96B3, 0x96B4, 0xB0D8, /* 0xC0 */
+ 0xC4B3, 0xB8CC, 0xC6E2, 0xC8BE, 0xC8E1, 0x96B5, 0x96B6, 0x96B7, /* 0xD0 */
+ 0xE8CF, 0xE8D4, 0xE8D6, 0x96B8, 0xB9F1, 0xE8D8, 0xD7F5, 0x96B9, /* 0xD0 */
+ 0xC4FB, 0x96BA, 0xE8DC, 0x96BB, 0x96BC, 0xB2E9, 0x96BD, 0x96BE, /* 0xE0 */
+ 0x96BF, 0xE8D1, 0x96C0, 0x96C1, 0xBCED, 0x96C2, 0x96C3, 0xBFC2, /* 0xE0 */
+ 0xE8CD, 0xD6F9, 0x96C4, 0xC1F8, 0xB2F1, 0x96C5, 0x96C6, 0x96C7, /* 0xF0 */
+ 0x96C8, 0x96C9, 0x96CA, 0x96CB, 0x96CC, 0xE8DF, 0x96CD, 0xCAC1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE8D9, 0x96CE, 0x96CF, 0x96D0, 0x96D1, 0xD5A4, 0x96D2, 0xB1EA, /* 0x00 */
+ 0xD5BB, 0xE8CE, 0xE8D0, 0xB6B0, 0xE8D3, 0x96D3, 0xE8DD, 0xC0B8, /* 0x00 */
+ 0x96D4, 0xCAF7, 0x96D5, 0xCBA8, 0x96D6, 0x96D7, 0xC6DC, 0xC0F5, /* 0x10 */
+ 0x96D8, 0x96D9, 0x96DA, 0x96DB, 0x96DC, 0xE8E9, 0x96DD, 0x96DE, /* 0x10 */
+ 0x96DF, 0xD0A3, 0x96E0, 0x96E1, 0x96E2, 0x96E3, 0x96E4, 0x96E5, /* 0x20 */
+ 0x96E6, 0xE8F2, 0xD6EA, 0x96E7, 0x96E8, 0x96E9, 0x96EA, 0x96EB, /* 0x20 */
+ 0x96EC, 0x96ED, 0xE8E0, 0xE8E1, 0x96EE, 0x96EF, 0x96F0, 0xD1F9, /* 0x30 */
+ 0xBACB, 0xB8F9, 0x96F1, 0x96F2, 0xB8F1, 0xD4D4, 0xE8EF, 0x96F3, /* 0x30 */
+ 0xE8EE, 0xE8EC, 0xB9F0, 0xCCD2, 0xE8E6, 0xCEA6, 0xBFF2, 0x96F4, /* 0x40 */
+ 0xB0B8, 0xE8F1, 0xE8F0, 0x96F5, 0xD7C0, 0x96F6, 0xE8E4, 0x96F7, /* 0x40 */
+ 0xCDA9, 0xC9A3, 0x96F8, 0xBBB8, 0xBDDB, 0xE8EA, 0x96F9, 0x96FA, /* 0x50 */
+ 0x96FB, 0x96FC, 0x96FD, 0x96FE, 0x9740, 0x9741, 0x9742, 0x9743, /* 0x50 */
+ 0xE8E2, 0xE8E3, 0xE8E5, 0xB5B5, 0xE8E7, 0xC7C5, 0xE8EB, 0xE8ED, /* 0x60 */
+ 0xBDB0, 0xD7AE, 0x9744, 0xE8F8, 0x9745, 0x9746, 0x9747, 0x9748, /* 0x60 */
+ 0x9749, 0x974A, 0x974B, 0x974C, 0xE8F5, 0x974D, 0xCDB0, 0xE8F6, /* 0x70 */
+ 0x974E, 0x974F, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, /* 0x70 */
+ 0x9756, 0xC1BA, 0x9757, 0xE8E8, 0x9758, 0xC3B7, 0xB0F0, 0x9759, /* 0x80 */
+ 0x975A, 0x975B, 0x975C, 0x975D, 0x975E, 0x975F, 0x9760, 0xE8F4, /* 0x80 */
+ 0x9761, 0x9762, 0x9763, 0xE8F7, 0x9764, 0x9765, 0x9766, 0xB9A3, /* 0x90 */
+ 0x9767, 0x9768, 0x9769, 0x976A, 0x976B, 0x976C, 0x976D, 0x976E, /* 0x90 */
+ 0x976F, 0x9770, 0xC9D2, 0x9771, 0x9772, 0x9773, 0xC3CE, 0xCEE0, /* 0xA0 */
+ 0xC0E6, 0x9774, 0x9775, 0x9776, 0x9777, 0xCBF3, 0x9778, 0xCCDD, /* 0xA0 */
+ 0xD0B5, 0x9779, 0x977A, 0xCAE1, 0x977B, 0xE8F3, 0x977C, 0x977D, /* 0xB0 */
+ 0x977E, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, /* 0xB0 */
+ 0xBCEC, 0x9787, 0xE8F9, 0x9788, 0x9789, 0x978A, 0x978B, 0x978C, /* 0xC0 */
+ 0x978D, 0xC3DE, 0x978E, 0xC6E5, 0x978F, 0xB9F7, 0x9790, 0x9791, /* 0xC0 */
+ 0x9792, 0x9793, 0xB0F4, 0x9794, 0x9795, 0xD7D8, 0x9796, 0x9797, /* 0xD0 */
+ 0xBCAC, 0x9798, 0xC5EF, 0x9799, 0x979A, 0x979B, 0x979C, 0x979D, /* 0xD0 */
+ 0xCCC4, 0x979E, 0x979F, 0xE9A6, 0x97A0, 0x97A1, 0x97A2, 0x97A3, /* 0xE0 */
+ 0x97A4, 0x97A5, 0x97A6, 0x97A7, 0x97A8, 0x97A9, 0xC9AD, 0x97AA, /* 0xE0 */
+ 0xE9A2, 0xC0E2, 0x97AB, 0x97AC, 0x97AD, 0xBFC3, 0x97AE, 0x97AF, /* 0xF0 */
+ 0x97B0, 0xE8FE, 0xB9D7, 0x97B1, 0xE8FB, 0x97B2, 0x97B3, 0x97B4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x97B5, 0xE9A4, 0x97B6, 0x97B7, 0x97B8, 0xD2CE, 0x97B9, 0x97BA, /* 0x00 */
+ 0x97BB, 0x97BC, 0x97BD, 0xE9A3, 0x97BE, 0xD6B2, 0xD7B5, 0x97BF, /* 0x00 */
+ 0xE9A7, 0x97C0, 0xBDB7, 0x97C1, 0x97C2, 0x97C3, 0x97C4, 0x97C5, /* 0x10 */
+ 0x97C6, 0x97C7, 0x97C8, 0x97C9, 0x97CA, 0x97CB, 0x97CC, 0xE8FC, /* 0x10 */
+ 0xE8FD, 0x97CD, 0x97CE, 0x97CF, 0xE9A1, 0x97D0, 0x97D1, 0x97D2, /* 0x20 */
+ 0x97D3, 0x97D4, 0x97D5, 0x97D6, 0x97D7, 0xCDD6, 0x97D8, 0x97D9, /* 0x20 */
+ 0xD2AC, 0x97DA, 0x97DB, 0x97DC, 0xE9B2, 0x97DD, 0x97DE, 0x97DF, /* 0x30 */
+ 0x97E0, 0xE9A9, 0x97E1, 0x97E2, 0x97E3, 0xB4AA, 0x97E4, 0xB4BB, /* 0x30 */
+ 0x97E5, 0x97E6, 0xE9AB, 0x97E7, 0x97E8, 0x97E9, 0x97EA, 0x97EB, /* 0x40 */
+ 0x97EC, 0x97ED, 0x97EE, 0x97EF, 0x97F0, 0x97F1, 0x97F2, 0x97F3, /* 0x40 */
+ 0x97F4, 0x97F5, 0x97F6, 0x97F7, 0xD0A8, 0x97F8, 0x97F9, 0xE9A5, /* 0x50 */
+ 0x97FA, 0x97FB, 0xB3FE, 0x97FC, 0x97FD, 0xE9AC, 0xC0E3, 0x97FE, /* 0x50 */
+ 0xE9AA, 0x9840, 0x9841, 0xE9B9, 0x9842, 0x9843, 0xE9B8, 0x9844, /* 0x60 */
+ 0x9845, 0x9846, 0x9847, 0xE9AE, 0x9848, 0x9849, 0xE8FA, 0x984A, /* 0x60 */
+ 0x984B, 0xE9A8, 0x984C, 0x984D, 0x984E, 0x984F, 0x9850, 0xBFAC, /* 0x70 */
+ 0xE9B1, 0xE9BA, 0x9851, 0x9852, 0xC2A5, 0x9853, 0x9854, 0x9855, /* 0x70 */
+ 0xE9AF, 0x9856, 0xB8C5, 0x9857, 0xE9AD, 0x9858, 0xD3DC, 0xE9B4, /* 0x80 */
+ 0xE9B5, 0xE9B7, 0x9859, 0x985A, 0x985B, 0xE9C7, 0x985C, 0x985D, /* 0x80 */
+ 0x985E, 0x985F, 0x9860, 0x9861, 0xC0C6, 0xE9C5, 0x9862, 0x9863, /* 0x90 */
+ 0xE9B0, 0x9864, 0x9865, 0xE9BB, 0xB0F1, 0x9866, 0x9867, 0x9868, /* 0x90 */
+ 0x9869, 0x986A, 0x986B, 0x986C, 0x986D, 0x986E, 0x986F, 0xE9BC, /* 0xA0 */
+ 0xD5A5, 0x9870, 0x9871, 0xE9BE, 0x9872, 0xE9BF, 0x9873, 0x9874, /* 0xA0 */
+ 0x9875, 0xE9C1, 0x9876, 0x9877, 0xC1F1, 0x9878, 0x9879, 0xC8B6, /* 0xB0 */
+ 0x987A, 0x987B, 0x987C, 0xE9BD, 0x987D, 0x987E, 0x9880, 0x9881, /* 0xB0 */
+ 0x9882, 0xE9C2, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, /* 0xC0 */
+ 0x9889, 0x988A, 0xE9C3, 0x988B, 0xE9B3, 0x988C, 0xE9B6, 0x988D, /* 0xC0 */
+ 0xBBB1, 0x988E, 0x988F, 0x9890, 0xE9C0, 0x9891, 0x9892, 0x9893, /* 0xD0 */
+ 0x9894, 0x9895, 0x9896, 0xBCF7, 0x9897, 0x9898, 0x9899, 0xE9C4, /* 0xD0 */
+ 0xE9C6, 0x989A, 0x989B, 0x989C, 0x989D, 0x989E, 0x989F, 0x98A0, /* 0xE0 */
+ 0x98A1, 0x98A2, 0x98A3, 0x98A4, 0x98A5, 0xE9CA, 0x98A6, 0x98A7, /* 0xE0 */
+ 0x98A8, 0x98A9, 0xE9CE, 0x98AA, 0x98AB, 0x98AC, 0x98AD, 0x98AE, /* 0xF0 */
+ 0x98AF, 0x98B0, 0x98B1, 0x98B2, 0x98B3, 0xB2DB, 0x98B4, 0xE9C8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x98B5, 0x98B6, 0x98B7, 0x98B8, 0x98B9, 0x98BA, 0x98BB, 0x98BC, /* 0x00 */
+ 0x98BD, 0x98BE, 0xB7AE, 0x98BF, 0x98C0, 0x98C1, 0x98C2, 0x98C3, /* 0x00 */
+ 0x98C4, 0x98C5, 0x98C6, 0x98C7, 0x98C8, 0x98C9, 0x98CA, 0xE9CB, /* 0x10 */
+ 0xE9CC, 0x98CB, 0x98CC, 0x98CD, 0x98CE, 0x98CF, 0x98D0, 0xD5C1, /* 0x10 */
+ 0x98D1, 0xC4A3, 0x98D2, 0x98D3, 0x98D4, 0x98D5, 0x98D6, 0x98D7, /* 0x20 */
+ 0xE9D8, 0x98D8, 0xBAE1, 0x98D9, 0x98DA, 0x98DB, 0x98DC, 0xE9C9, /* 0x20 */
+ 0x98DD, 0xD3A3, 0x98DE, 0x98DF, 0x98E0, 0xE9D4, 0x98E1, 0x98E2, /* 0x30 */
+ 0x98E3, 0x98E4, 0x98E5, 0x98E6, 0x98E7, 0xE9D7, 0xE9D0, 0x98E8, /* 0x30 */
+ 0x98E9, 0x98EA, 0x98EB, 0x98EC, 0xE9CF, 0x98ED, 0x98EE, 0xC7C1, /* 0x40 */
+ 0x98EF, 0x98F0, 0x98F1, 0x98F2, 0x98F3, 0x98F4, 0x98F5, 0x98F6, /* 0x40 */
+ 0xE9D2, 0x98F7, 0x98F8, 0x98F9, 0x98FA, 0x98FB, 0x98FC, 0x98FD, /* 0x50 */
+ 0xE9D9, 0xB3C8, 0x98FE, 0xE9D3, 0x9940, 0x9941, 0x9942, 0x9943, /* 0x50 */
+ 0x9944, 0xCFF0, 0x9945, 0x9946, 0x9947, 0xE9CD, 0x9948, 0x9949, /* 0x60 */
+ 0x994A, 0x994B, 0x994C, 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, /* 0x60 */
+ 0x9952, 0xB3F7, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, /* 0x70 */
+ 0x9959, 0xE9D6, 0x995A, 0x995B, 0xE9DA, 0x995C, 0x995D, 0x995E, /* 0x70 */
+ 0xCCB4, 0x995F, 0x9960, 0x9961, 0xCFAD, 0x9962, 0x9963, 0x9964, /* 0x80 */
+ 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, 0x996A, 0xE9D5, 0x996B, /* 0x80 */
+ 0xE9DC, 0xE9DB, 0x996C, 0x996D, 0x996E, 0x996F, 0x9970, 0xE9DE, /* 0x90 */
+ 0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, /* 0x90 */
+ 0xE9D1, 0x9979, 0x997A, 0x997B, 0x997C, 0x997D, 0x997E, 0x9980, /* 0xA0 */
+ 0x9981, 0xE9DD, 0x9982, 0xE9DF, 0xC3CA, 0x9983, 0x9984, 0x9985, /* 0xA0 */
+ 0x9986, 0x9987, 0x9988, 0x9989, 0x998A, 0x998B, 0x998C, 0x998D, /* 0xB0 */
+ 0x998E, 0x998F, 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, /* 0xB0 */
+ 0x9996, 0x9997, 0x9998, 0x9999, 0x999A, 0x999B, 0x999C, 0x999D, /* 0xC0 */
+ 0x999E, 0x999F, 0x99A0, 0x99A1, 0x99A2, 0x99A3, 0x99A4, 0x99A5, /* 0xC0 */
+ 0x99A6, 0x99A7, 0x99A8, 0x99A9, 0x99AA, 0x99AB, 0x99AC, 0x99AD, /* 0xD0 */
+ 0x99AE, 0x99AF, 0x99B0, 0x99B1, 0x99B2, 0x99B3, 0x99B4, 0x99B5, /* 0xD0 */
+ 0x99B6, 0x99B7, 0x99B8, 0x99B9, 0x99BA, 0x99BB, 0x99BC, 0x99BD, /* 0xE0 */
+ 0x99BE, 0x99BF, 0x99C0, 0x99C1, 0x99C2, 0x99C3, 0x99C4, 0x99C5, /* 0xE0 */
+ 0x99C6, 0x99C7, 0x99C8, 0x99C9, 0x99CA, 0x99CB, 0x99CC, 0x99CD, /* 0xF0 */
+ 0x99CE, 0x99CF, 0x99D0, 0x99D1, 0x99D2, 0x99D3, 0x99D4, 0x99D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x99D6, 0x99D7, 0x99D8, 0x99D9, 0x99DA, 0x99DB, 0x99DC, 0x99DD, /* 0x00 */
+ 0x99DE, 0x99DF, 0x99E0, 0x99E1, 0x99E2, 0x99E3, 0x99E4, 0x99E5, /* 0x00 */
+ 0x99E6, 0x99E7, 0x99E8, 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99ED, /* 0x10 */
+ 0x99EE, 0x99EF, 0x99F0, 0x99F1, 0x99F2, 0x99F3, 0x99F4, 0x99F5, /* 0x10 */
+ 0xC7B7, 0xB4CE, 0xBBB6, 0xD0C0, 0xECA3, 0x99F6, 0x99F7, 0xC5B7, /* 0x20 */
+ 0x99F8, 0x99F9, 0x99FA, 0x99FB, 0x99FC, 0x99FD, 0x99FE, 0x9A40, /* 0x20 */
+ 0x9A41, 0x9A42, 0xD3FB, 0x9A43, 0x9A44, 0x9A45, 0x9A46, 0xECA4, /* 0x30 */
+ 0x9A47, 0xECA5, 0xC6DB, 0x9A48, 0x9A49, 0x9A4A, 0xBFEE, 0x9A4B, /* 0x30 */
+ 0x9A4C, 0x9A4D, 0x9A4E, 0xECA6, 0x9A4F, 0x9A50, 0xECA7, 0xD0AA, /* 0x40 */
+ 0x9A51, 0xC7B8, 0x9A52, 0x9A53, 0xB8E8, 0x9A54, 0x9A55, 0x9A56, /* 0x40 */
+ 0x9A57, 0x9A58, 0x9A59, 0x9A5A, 0x9A5B, 0x9A5C, 0x9A5D, 0x9A5E, /* 0x50 */
+ 0x9A5F, 0xECA8, 0x9A60, 0x9A61, 0x9A62, 0x9A63, 0x9A64, 0x9A65, /* 0x50 */
+ 0x9A66, 0x9A67, 0xD6B9, 0xD5FD, 0xB4CB, 0xB2BD, 0xCEE4, 0xC6E7, /* 0x60 */
+ 0x9A68, 0x9A69, 0xCDE1, 0x9A6A, 0x9A6B, 0x9A6C, 0x9A6D, 0x9A6E, /* 0x60 */
+ 0x9A6F, 0x9A70, 0x9A71, 0x9A72, 0x9A73, 0x9A74, 0x9A75, 0x9A76, /* 0x70 */
+ 0x9A77, 0xB4F5, 0x9A78, 0xCBC0, 0xBCDF, 0x9A79, 0x9A7A, 0x9A7B, /* 0x70 */
+ 0x9A7C, 0xE9E2, 0xE9E3, 0xD1EA, 0xE9E5, 0x9A7D, 0xB4F9, 0xE9E4, /* 0x80 */
+ 0x9A7E, 0xD1B3, 0xCAE2, 0xB2D0, 0x9A80, 0xE9E8, 0x9A81, 0x9A82, /* 0x80 */
+ 0x9A83, 0x9A84, 0xE9E6, 0xE9E7, 0x9A85, 0x9A86, 0xD6B3, 0x9A87, /* 0x90 */
+ 0x9A88, 0x9A89, 0xE9E9, 0xE9EA, 0x9A8A, 0x9A8B, 0x9A8C, 0x9A8D, /* 0x90 */
+ 0x9A8E, 0xE9EB, 0x9A8F, 0x9A90, 0x9A91, 0x9A92, 0x9A93, 0x9A94, /* 0xA0 */
+ 0x9A95, 0x9A96, 0xE9EC, 0x9A97, 0x9A98, 0x9A99, 0x9A9A, 0x9A9B, /* 0xA0 */
+ 0x9A9C, 0x9A9D, 0x9A9E, 0xECAF, 0xC5B9, 0xB6CE, 0x9A9F, 0xD2F3, /* 0xB0 */
+ 0x9AA0, 0x9AA1, 0x9AA2, 0x9AA3, 0x9AA4, 0x9AA5, 0x9AA6, 0xB5EE, /* 0xB0 */
+ 0x9AA7, 0xBBD9, 0xECB1, 0x9AA8, 0x9AA9, 0xD2E3, 0x9AAA, 0x9AAB, /* 0xC0 */
+ 0x9AAC, 0x9AAD, 0x9AAE, 0xCEE3, 0x9AAF, 0xC4B8, 0x9AB0, 0xC3BF, /* 0xC0 */
+ 0x9AB1, 0x9AB2, 0xB6BE, 0xD8B9, 0xB1C8, 0xB1CF, 0xB1D1, 0xC5FE, /* 0xD0 */
+ 0x9AB3, 0xB1D0, 0x9AB4, 0xC3AB, 0x9AB5, 0x9AB6, 0x9AB7, 0x9AB8, /* 0xD0 */
+ 0x9AB9, 0xD5B1, 0x9ABA, 0x9ABB, 0x9ABC, 0x9ABD, 0x9ABE, 0x9ABF, /* 0xE0 */
+ 0x9AC0, 0x9AC1, 0xEBA4, 0xBAC1, 0x9AC2, 0x9AC3, 0x9AC4, 0xCCBA, /* 0xE0 */
+ 0x9AC5, 0x9AC6, 0x9AC7, 0xEBA5, 0x9AC8, 0xEBA7, 0x9AC9, 0x9ACA, /* 0xF0 */
+ 0x9ACB, 0xEBA8, 0x9ACC, 0x9ACD, 0x9ACE, 0xEBA6, 0x9ACF, 0x9AD0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9AD1, 0x9AD2, 0x9AD3, 0x9AD4, 0x9AD5, 0xEBA9, 0xEBAB, 0xEBAA, /* 0x00 */
+ 0x9AD6, 0x9AD7, 0x9AD8, 0x9AD9, 0x9ADA, 0xEBAC, 0x9ADB, 0xCACF, /* 0x00 */
+ 0xD8B5, 0xC3F1, 0x9ADC, 0xC3A5, 0xC6F8, 0xEBAD, 0xC4CA, 0x9ADD, /* 0x10 */
+ 0xEBAE, 0xEBAF, 0xEBB0, 0xB7D5, 0x9ADE, 0x9ADF, 0x9AE0, 0xB7FA, /* 0x10 */
+ 0x9AE1, 0xEBB1, 0xC7E2, 0x9AE2, 0xEBB3, 0x9AE3, 0xBAA4, 0xD1F5, /* 0x20 */
+ 0xB0B1, 0xEBB2, 0xEBB4, 0x9AE4, 0x9AE5, 0x9AE6, 0xB5AA, 0xC2C8, /* 0x20 */
+ 0xC7E8, 0x9AE7, 0xEBB5, 0x9AE8, 0xCBAE, 0xE3DF, 0x9AE9, 0x9AEA, /* 0x30 */
+ 0xD3C0, 0x9AEB, 0x9AEC, 0x9AED, 0x9AEE, 0xD9DB, 0x9AEF, 0x9AF0, /* 0x30 */
+ 0xCDA1, 0xD6AD, 0xC7F3, 0x9AF1, 0x9AF2, 0x9AF3, 0xD9E0, 0xBBE3, /* 0x40 */
+ 0x9AF4, 0xBABA, 0xE3E2, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AF9, /* 0x40 */
+ 0xCFAB, 0x9AFA, 0x9AFB, 0x9AFC, 0xE3E0, 0xC9C7, 0x9AFD, 0xBAB9, /* 0x50 */
+ 0x9AFE, 0x9B40, 0x9B41, 0xD1B4, 0xE3E1, 0xC8EA, 0xB9AF, 0xBDAD, /* 0x50 */
+ 0xB3D8, 0xCEDB, 0x9B42, 0x9B43, 0xCCC0, 0x9B44, 0x9B45, 0x9B46, /* 0x60 */
+ 0xE3E8, 0xE3E9, 0xCDF4, 0x9B47, 0x9B48, 0x9B49, 0x9B4A, 0x9B4B, /* 0x60 */
+ 0xCCAD, 0x9B4C, 0xBCB3, 0x9B4D, 0xE3EA, 0x9B4E, 0xE3EB, 0x9B4F, /* 0x70 */
+ 0x9B50, 0xD0DA, 0x9B51, 0x9B52, 0x9B53, 0xC6FB, 0xB7DA, 0x9B54, /* 0x70 */
+ 0x9B55, 0xC7DF, 0xD2CA, 0xCED6, 0x9B56, 0xE3E4, 0xE3EC, 0x9B57, /* 0x80 */
+ 0xC9F2, 0xB3C1, 0x9B58, 0x9B59, 0xE3E7, 0x9B5A, 0x9B5B, 0xC6E3, /* 0x80 */
+ 0xE3E5, 0x9B5C, 0x9B5D, 0xEDB3, 0xE3E6, 0x9B5E, 0x9B5F, 0x9B60, /* 0x90 */
+ 0x9B61, 0xC9B3, 0x9B62, 0xC5E6, 0x9B63, 0x9B64, 0x9B65, 0xB9B5, /* 0x90 */
+ 0x9B66, 0xC3BB, 0x9B67, 0xE3E3, 0xC5BD, 0xC1A4, 0xC2D9, 0xB2D7, /* 0xA0 */
+ 0x9B68, 0xE3ED, 0xBBA6, 0xC4AD, 0x9B69, 0xE3F0, 0xBEDA, 0x9B6A, /* 0xA0 */
+ 0x9B6B, 0xE3FB, 0xE3F5, 0xBAD3, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B6F, /* 0xB0 */
+ 0xB7D0, 0xD3CD, 0x9B70, 0xD6CE, 0xD5D3, 0xB9C1, 0xD5B4, 0xD1D8, /* 0xB0 */
+ 0x9B71, 0x9B72, 0x9B73, 0x9B74, 0xD0B9, 0xC7F6, 0x9B75, 0x9B76, /* 0xC0 */
+ 0x9B77, 0xC8AA, 0xB2B4, 0x9B78, 0xC3DA, 0x9B79, 0x9B7A, 0x9B7B, /* 0xC0 */
+ 0xE3EE, 0x9B7C, 0x9B7D, 0xE3FC, 0xE3EF, 0xB7A8, 0xE3F7, 0xE3F4, /* 0xD0 */
+ 0x9B7E, 0x9B80, 0x9B81, 0xB7BA, 0x9B82, 0x9B83, 0xC5A2, 0x9B84, /* 0xD0 */
+ 0xE3F6, 0xC5DD, 0xB2A8, 0xC6FC, 0x9B85, 0xC4E0, 0x9B86, 0x9B87, /* 0xE0 */
+ 0xD7A2, 0x9B88, 0xC0E1, 0xE3F9, 0x9B89, 0x9B8A, 0xE3FA, 0xE3FD, /* 0xE0 */
+ 0xCCA9, 0xE3F3, 0x9B8B, 0xD3BE, 0x9B8C, 0xB1C3, 0xEDB4, 0xE3F1, /* 0xF0 */
+ 0xE3F2, 0x9B8D, 0xE3F8, 0xD0BA, 0xC6C3, 0xD4F3, 0xE3FE, 0x9B8E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9B8F, 0xBDE0, 0x9B90, 0x9B91, 0xE4A7, 0x9B92, 0x9B93, 0xE4A6, /* 0x00 */
+ 0x9B94, 0x9B95, 0x9B96, 0xD1F3, 0xE4A3, 0x9B97, 0xE4A9, 0x9B98, /* 0x00 */
+ 0x9B99, 0x9B9A, 0xC8F7, 0x9B9B, 0x9B9C, 0x9B9D, 0x9B9E, 0xCFB4, /* 0x10 */
+ 0x9B9F, 0xE4A8, 0xE4AE, 0xC2E5, 0x9BA0, 0x9BA1, 0xB6B4, 0x9BA2, /* 0x10 */
+ 0x9BA3, 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0xBDF2, 0x9BA8, 0xE4A2, /* 0x20 */
+ 0x9BA9, 0x9BAA, 0xBAE9, 0xE4AA, 0x9BAB, 0x9BAC, 0xE4AC, 0x9BAD, /* 0x20 */
+ 0x9BAE, 0xB6FD, 0xD6DE, 0xE4B2, 0x9BAF, 0xE4AD, 0x9BB0, 0x9BB1, /* 0x30 */
+ 0x9BB2, 0xE4A1, 0x9BB3, 0xBBEE, 0xCDDD, 0xC7A2, 0xC5C9, 0x9BB4, /* 0x30 */
+ 0x9BB5, 0xC1F7, 0x9BB6, 0xE4A4, 0x9BB7, 0xC7B3, 0xBDAC, 0xBDBD, /* 0x40 */
+ 0xE4A5, 0x9BB8, 0xD7C7, 0xB2E2, 0x9BB9, 0xE4AB, 0xBCC3, 0xE4AF, /* 0x40 */
+ 0x9BBA, 0xBBEB, 0xE4B0, 0xC5A8, 0xE4B1, 0x9BBB, 0x9BBC, 0x9BBD, /* 0x50 */
+ 0x9BBE, 0xD5E3, 0xBFA3, 0x9BBF, 0xE4BA, 0x9BC0, 0xE4B7, 0x9BC1, /* 0x50 */
+ 0xE4BB, 0x9BC2, 0x9BC3, 0xE4BD, 0x9BC4, 0x9BC5, 0xC6D6, 0x9BC6, /* 0x60 */
+ 0x9BC7, 0xBAC6, 0xC0CB, 0x9BC8, 0x9BC9, 0x9BCA, 0xB8A1, 0xE4B4, /* 0x60 */
+ 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, 0xD4A1, 0x9BCF, 0x9BD0, 0xBAA3, /* 0x70 */
+ 0xBDFE, 0x9BD1, 0x9BD2, 0x9BD3, 0xE4BC, 0x9BD4, 0x9BD5, 0x9BD6, /* 0x70 */
+ 0x9BD7, 0x9BD8, 0xCDBF, 0x9BD9, 0x9BDA, 0xC4F9, 0x9BDB, 0x9BDC, /* 0x80 */
+ 0xCFFB, 0xC9E6, 0x9BDD, 0x9BDE, 0xD3BF, 0x9BDF, 0xCFD1, 0x9BE0, /* 0x80 */
+ 0x9BE1, 0xE4B3, 0x9BE2, 0xE4B8, 0xE4B9, 0xCCE9, 0x9BE3, 0x9BE4, /* 0x90 */
+ 0x9BE5, 0x9BE6, 0x9BE7, 0xCCCE, 0x9BE8, 0xC0D4, 0xE4B5, 0xC1B0, /* 0x90 */
+ 0xE4B6, 0xCED0, 0x9BE9, 0xBBC1, 0xB5D3, 0x9BEA, 0xC8F3, 0xBDA7, /* 0xA0 */
+ 0xD5C7, 0xC9AC, 0xB8A2, 0xE4CA, 0x9BEB, 0x9BEC, 0xE4CC, 0xD1C4, /* 0xA0 */
+ 0x9BED, 0x9BEE, 0xD2BA, 0x9BEF, 0x9BF0, 0xBAAD, 0x9BF1, 0x9BF2, /* 0xB0 */
+ 0xBAD4, 0x9BF3, 0x9BF4, 0x9BF5, 0x9BF6, 0x9BF7, 0x9BF8, 0xE4C3, /* 0xB0 */
+ 0xB5ED, 0x9BF9, 0x9BFA, 0x9BFB, 0xD7CD, 0xE4C0, 0xCFFD, 0xE4BF, /* 0xC0 */
+ 0x9BFC, 0x9BFD, 0x9BFE, 0xC1DC, 0xCCCA, 0x9C40, 0x9C41, 0x9C42, /* 0xC0 */
+ 0x9C43, 0xCAE7, 0x9C44, 0x9C45, 0x9C46, 0x9C47, 0xC4D7, 0x9C48, /* 0xD0 */
+ 0xCCD4, 0xE4C8, 0x9C49, 0x9C4A, 0x9C4B, 0xE4C7, 0xE4C1, 0x9C4C, /* 0xD0 */
+ 0xE4C4, 0xB5AD, 0x9C4D, 0x9C4E, 0xD3D9, 0x9C4F, 0xE4C6, 0x9C50, /* 0xE0 */
+ 0x9C51, 0x9C52, 0x9C53, 0xD2F9, 0xB4E3, 0x9C54, 0xBBB4, 0x9C55, /* 0xE0 */
+ 0x9C56, 0xC9EE, 0x9C57, 0xB4BE, 0x9C58, 0x9C59, 0x9C5A, 0xBBEC, /* 0xF0 */
+ 0x9C5B, 0xD1CD, 0x9C5C, 0xCCED, 0xEDB5, 0x9C5D, 0x9C5E, 0x9C5F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9C60, 0x9C61, 0x9C62, 0x9C63, 0x9C64, 0xC7E5, 0x9C65, 0x9C66, /* 0x00 */
+ 0x9C67, 0x9C68, 0xD4A8, 0x9C69, 0xE4CB, 0xD7D5, 0xE4C2, 0x9C6A, /* 0x00 */
+ 0xBDA5, 0xE4C5, 0x9C6B, 0x9C6C, 0xD3E6, 0x9C6D, 0xE4C9, 0xC9F8, /* 0x10 */
+ 0x9C6E, 0x9C6F, 0xE4BE, 0x9C70, 0x9C71, 0xD3E5, 0x9C72, 0x9C73, /* 0x10 */
+ 0xC7FE, 0xB6C9, 0x9C74, 0xD4FC, 0xB2B3, 0xE4D7, 0x9C75, 0x9C76, /* 0x20 */
+ 0x9C77, 0xCEC2, 0x9C78, 0xE4CD, 0x9C79, 0xCEBC, 0x9C7A, 0xB8DB, /* 0x20 */
+ 0x9C7B, 0x9C7C, 0xE4D6, 0x9C7D, 0xBFCA, 0x9C7E, 0x9C80, 0x9C81, /* 0x30 */
+ 0xD3CE, 0x9C82, 0xC3EC, 0x9C83, 0x9C84, 0x9C85, 0x9C86, 0x9C87, /* 0x30 */
+ 0x9C88, 0x9C89, 0x9C8A, 0xC5C8, 0xE4D8, 0x9C8B, 0x9C8C, 0x9C8D, /* 0x40 */
+ 0x9C8E, 0x9C8F, 0x9C90, 0x9C91, 0x9C92, 0xCDC4, 0xE4CF, 0x9C93, /* 0x40 */
+ 0x9C94, 0x9C95, 0x9C96, 0xE4D4, 0xE4D5, 0x9C97, 0xBAFE, 0x9C98, /* 0x50 */
+ 0xCFE6, 0x9C99, 0x9C9A, 0xD5BF, 0x9C9B, 0x9C9C, 0x9C9D, 0xE4D2, /* 0x50 */
+ 0x9C9E, 0x9C9F, 0x9CA0, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA4, 0x9CA5, /* 0x60 */
+ 0x9CA6, 0x9CA7, 0x9CA8, 0xE4D0, 0x9CA9, 0x9CAA, 0xE4CE, 0x9CAB, /* 0x60 */
+ 0x9CAC, 0x9CAD, 0x9CAE, 0x9CAF, 0x9CB0, 0x9CB1, 0x9CB2, 0x9CB3, /* 0x70 */
+ 0x9CB4, 0x9CB5, 0x9CB6, 0x9CB7, 0x9CB8, 0x9CB9, 0xCDE5, 0xCAAA, /* 0x70 */
+ 0x9CBA, 0x9CBB, 0x9CBC, 0xC0A3, 0x9CBD, 0xBDA6, 0xE4D3, 0x9CBE, /* 0x80 */
+ 0x9CBF, 0xB8C8, 0x9CC0, 0x9CC1, 0x9CC2, 0x9CC3, 0x9CC4, 0xE4E7, /* 0x80 */
+ 0xD4B4, 0x9CC5, 0x9CC6, 0x9CC7, 0x9CC8, 0x9CC9, 0x9CCA, 0x9CCB, /* 0x90 */
+ 0xE4DB, 0x9CCC, 0x9CCD, 0x9CCE, 0xC1EF, 0x9CCF, 0x9CD0, 0xE4E9, /* 0x90 */
+ 0x9CD1, 0x9CD2, 0xD2E7, 0x9CD3, 0x9CD4, 0xE4DF, 0x9CD5, 0xE4E0, /* 0xA0 */
+ 0x9CD6, 0x9CD7, 0xCFAA, 0x9CD8, 0x9CD9, 0x9CDA, 0x9CDB, 0xCBDD, /* 0xA0 */
+ 0x9CDC, 0xE4DA, 0xE4D1, 0x9CDD, 0xE4E5, 0x9CDE, 0xC8DC, 0xE4E3, /* 0xB0 */
+ 0x9CDF, 0x9CE0, 0xC4E7, 0xE4E2, 0x9CE1, 0xE4E1, 0x9CE2, 0x9CE3, /* 0xB0 */
+ 0x9CE4, 0xB3FC, 0xE4E8, 0x9CE5, 0x9CE6, 0x9CE7, 0x9CE8, 0xB5E1, /* 0xC0 */
+ 0x9CE9, 0x9CEA, 0x9CEB, 0xD7CC, 0x9CEC, 0x9CED, 0x9CEE, 0xE4E6, /* 0xC0 */
+ 0x9CEF, 0xBBAC, 0x9CF0, 0xD7D2, 0xCCCF, 0xEBF8, 0x9CF1, 0xE4E4, /* 0xD0 */
+ 0x9CF2, 0x9CF3, 0xB9F6, 0x9CF4, 0x9CF5, 0x9CF6, 0xD6CD, 0xE4D9, /* 0xD0 */
+ 0xE4DC, 0xC2FA, 0xE4DE, 0x9CF7, 0xC2CB, 0xC0C4, 0xC2D0, 0x9CF8, /* 0xE0 */
+ 0xB1F5, 0xCCB2, 0x9CF9, 0x9CFA, 0x9CFB, 0x9CFC, 0x9CFD, 0x9CFE, /* 0xE0 */
+ 0x9D40, 0x9D41, 0x9D42, 0x9D43, 0xB5CE, 0x9D44, 0x9D45, 0x9D46, /* 0xF0 */
+ 0x9D47, 0xE4EF, 0x9D48, 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9D4E, 0x9D4F, 0xC6AF, 0x9D50, 0x9D51, 0x9D52, 0xC6E1, 0x9D53, /* 0x00 */
+ 0x9D54, 0xE4F5, 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0xC2A9, /* 0x00 */
+ 0x9D5A, 0x9D5B, 0x9D5C, 0xC0EC, 0xD1DD, 0xE4EE, 0x9D5D, 0x9D5E, /* 0x10 */
+ 0x9D5F, 0x9D60, 0x9D61, 0x9D62, 0x9D63, 0x9D64, 0x9D65, 0x9D66, /* 0x10 */
+ 0xC4AE, 0x9D67, 0x9D68, 0x9D69, 0xE4ED, 0x9D6A, 0x9D6B, 0x9D6C, /* 0x20 */
+ 0x9D6D, 0xE4F6, 0xE4F4, 0xC2FE, 0x9D6E, 0xE4DD, 0x9D6F, 0xE4F0, /* 0x20 */
+ 0x9D70, 0xCAFE, 0x9D71, 0xD5C4, 0x9D72, 0x9D73, 0xE4F1, 0x9D74, /* 0x30 */
+ 0x9D75, 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, 0xD1FA, 0x9D7B, /* 0x30 */
+ 0x9D7C, 0x9D7D, 0x9D7E, 0x9D80, 0x9D81, 0x9D82, 0xE4EB, 0xE4EC, /* 0x40 */
+ 0x9D83, 0x9D84, 0x9D85, 0xE4F2, 0x9D86, 0xCEAB, 0x9D87, 0x9D88, /* 0x40 */
+ 0x9D89, 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, /* 0x50 */
+ 0xC5CB, 0x9D91, 0x9D92, 0x9D93, 0xC7B1, 0x9D94, 0xC2BA, 0x9D95, /* 0x50 */
+ 0x9D96, 0x9D97, 0xE4EA, 0x9D98, 0x9D99, 0x9D9A, 0xC1CA, 0x9D9B, /* 0x60 */
+ 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, 0x9DA0, 0xCCB6, 0xB3B1, 0x9DA1, /* 0x60 */
+ 0x9DA2, 0x9DA3, 0xE4FB, 0x9DA4, 0xE4F3, 0x9DA5, 0x9DA6, 0x9DA7, /* 0x70 */
+ 0xE4FA, 0x9DA8, 0xE4FD, 0x9DA9, 0xE4FC, 0x9DAA, 0x9DAB, 0x9DAC, /* 0x70 */
+ 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0xB3CE, 0x9DB1, 0x9DB2, 0x9DB3, /* 0x80 */
+ 0xB3BA, 0xE4F7, 0x9DB4, 0x9DB5, 0xE4F9, 0xE4F8, 0xC5EC, 0x9DB6, /* 0x80 */
+ 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBB, 0x9DBC, 0x9DBD, 0x9DBE, /* 0x90 */
+ 0x9DBF, 0x9DC0, 0x9DC1, 0x9DC2, 0xC0BD, 0x9DC3, 0x9DC4, 0x9DC5, /* 0x90 */
+ 0x9DC6, 0xD4E8, 0x9DC7, 0x9DC8, 0x9DC9, 0x9DCA, 0x9DCB, 0xE5A2, /* 0xA0 */
+ 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, 0x9DD1, 0x9DD2, 0x9DD3, /* 0xA0 */
+ 0x9DD4, 0x9DD5, 0x9DD6, 0xB0C4, 0x9DD7, 0x9DD8, 0xE5A4, 0x9DD9, /* 0xB0 */
+ 0x9DDA, 0xE5A3, 0x9DDB, 0x9DDC, 0x9DDD, 0x9DDE, 0x9DDF, 0x9DE0, /* 0xB0 */
+ 0xBCA4, 0x9DE1, 0xE5A5, 0x9DE2, 0x9DE3, 0x9DE4, 0x9DE5, 0x9DE6, /* 0xC0 */
+ 0x9DE7, 0xE5A1, 0x9DE8, 0x9DE9, 0x9DEA, 0x9DEB, 0x9DEC, 0x9DED, /* 0xC0 */
+ 0x9DEE, 0xE4FE, 0xB1F4, 0x9DEF, 0x9DF0, 0x9DF1, 0x9DF2, 0x9DF3, /* 0xD0 */
+ 0x9DF4, 0x9DF5, 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, 0xE5A8, 0x9DFA, /* 0xD0 */
+ 0xE5A9, 0xE5A6, 0x9DFB, 0x9DFC, 0x9DFD, 0x9DFE, 0x9E40, 0x9E41, /* 0xE0 */
+ 0x9E42, 0x9E43, 0x9E44, 0x9E45, 0x9E46, 0x9E47, 0xE5A7, 0xE5AA, /* 0xE0 */
+ 0x9E48, 0x9E49, 0x9E4A, 0x9E4B, 0x9E4C, 0x9E4D, 0x9E4E, 0x9E4F, /* 0xF0 */
+ 0x9E50, 0x9E51, 0x9E52, 0x9E53, 0x9E54, 0x9E55, 0x9E56, 0x9E57 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9E58, 0x9E59, 0x9E5A, 0x9E5B, 0x9E5C, 0x9E5D, 0x9E5E, 0x9E5F, /* 0x00 */
+ 0x9E60, 0x9E61, 0x9E62, 0x9E63, 0x9E64, 0x9E65, 0x9E66, 0x9E67, /* 0x00 */
+ 0x9E68, 0xC6D9, 0x9E69, 0x9E6A, 0x9E6B, 0x9E6C, 0x9E6D, 0x9E6E, /* 0x10 */
+ 0x9E6F, 0x9E70, 0xE5AB, 0xE5AD, 0x9E71, 0x9E72, 0x9E73, 0x9E74, /* 0x10 */
+ 0x9E75, 0x9E76, 0x9E77, 0xE5AC, 0x9E78, 0x9E79, 0x9E7A, 0x9E7B, /* 0x20 */
+ 0x9E7C, 0x9E7D, 0x9E7E, 0x9E80, 0x9E81, 0x9E82, 0x9E83, 0x9E84, /* 0x20 */
+ 0x9E85, 0x9E86, 0x9E87, 0x9E88, 0x9E89, 0xE5AF, 0x9E8A, 0x9E8B, /* 0x30 */
+ 0x9E8C, 0xE5AE, 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, 0x9E91, 0x9E92, /* 0x30 */
+ 0x9E93, 0x9E94, 0x9E95, 0x9E96, 0x9E97, 0x9E98, 0x9E99, 0x9E9A, /* 0x40 */
+ 0x9E9B, 0x9E9C, 0x9E9D, 0x9E9E, 0xB9E0, 0x9E9F, 0x9EA0, 0xE5B0, /* 0x40 */
+ 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA5, 0x9EA6, 0x9EA7, 0x9EA8, /* 0x50 */
+ 0x9EA9, 0x9EAA, 0x9EAB, 0x9EAC, 0x9EAD, 0x9EAE, 0xE5B1, 0x9EAF, /* 0x50 */
+ 0x9EB0, 0x9EB1, 0x9EB2, 0x9EB3, 0x9EB4, 0x9EB5, 0x9EB6, 0x9EB7, /* 0x60 */
+ 0x9EB8, 0x9EB9, 0x9EBA, 0xBBF0, 0xECE1, 0xC3F0, 0x9EBB, 0xB5C6, /* 0x60 */
+ 0xBBD2, 0x9EBC, 0x9EBD, 0x9EBE, 0x9EBF, 0xC1E9, 0xD4EE, 0x9EC0, /* 0x70 */
+ 0xBEC4, 0x9EC1, 0x9EC2, 0x9EC3, 0xD7C6, 0x9EC4, 0xD4D6, 0xB2D3, /* 0x70 */
+ 0xECBE, 0x9EC5, 0x9EC6, 0x9EC7, 0x9EC8, 0xEAC1, 0x9EC9, 0x9ECA, /* 0x80 */
+ 0x9ECB, 0xC2AF, 0xB4B6, 0x9ECC, 0x9ECD, 0x9ECE, 0xD1D7, 0x9ECF, /* 0x80 */
+ 0x9ED0, 0x9ED1, 0xB3B4, 0x9ED2, 0xC8B2, 0xBFBB, 0xECC0, 0x9ED3, /* 0x90 */
+ 0x9ED4, 0xD6CB, 0x9ED5, 0x9ED6, 0xECBF, 0xECC1, 0x9ED7, 0x9ED8, /* 0x90 */
+ 0x9ED9, 0x9EDA, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EDE, 0x9EDF, 0x9EE0, /* 0xA0 */
+ 0x9EE1, 0x9EE2, 0x9EE3, 0xECC5, 0xBEE6, 0xCCBF, 0xC5DA, 0xBEBC, /* 0xA0 */
+ 0x9EE4, 0xECC6, 0x9EE5, 0xB1FE, 0x9EE6, 0x9EE7, 0x9EE8, 0xECC4, /* 0xB0 */
+ 0xD5A8, 0xB5E3, 0x9EE9, 0xECC2, 0xC1B6, 0xB3E3, 0x9EEA, 0x9EEB, /* 0xB0 */
+ 0xECC3, 0xCBB8, 0xC0C3, 0xCCFE, 0x9EEC, 0x9EED, 0x9EEE, 0x9EEF, /* 0xC0 */
+ 0xC1D2, 0x9EF0, 0xECC8, 0x9EF1, 0x9EF2, 0x9EF3, 0x9EF4, 0x9EF5, /* 0xC0 */
+ 0x9EF6, 0x9EF7, 0x9EF8, 0x9EF9, 0x9EFA, 0x9EFB, 0x9EFC, 0x9EFD, /* 0xD0 */
+ 0xBAE6, 0xC0D3, 0x9EFE, 0xD6F2, 0x9F40, 0x9F41, 0x9F42, 0xD1CC, /* 0xD0 */
+ 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0xBFBE, 0x9F47, 0xB7B3, 0xC9D5, /* 0xE0 */
+ 0xECC7, 0xBBE2, 0x9F48, 0xCCCC, 0xBDFD, 0xC8C8, 0x9F49, 0xCFA9, /* 0xE0 */
+ 0x9F4A, 0x9F4B, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F4F, 0x9F50, 0xCDE9, /* 0xF0 */
+ 0x9F51, 0xC5EB, 0x9F52, 0x9F53, 0x9F54, 0xB7E9, 0x9F55, 0x9F56 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9F57, 0x9F58, 0x9F59, 0x9F5A, 0x9F5B, 0x9F5C, 0x9F5D, 0x9F5E, /* 0x00 */
+ 0x9F5F, 0xD1C9, 0xBAB8, 0x9F60, 0x9F61, 0x9F62, 0x9F63, 0x9F64, /* 0x00 */
+ 0xECC9, 0x9F65, 0x9F66, 0xECCA, 0x9F67, 0xBBC0, 0xECCB, 0x9F68, /* 0x10 */
+ 0xECE2, 0xB1BA, 0xB7D9, 0x9F69, 0x9F6A, 0x9F6B, 0x9F6C, 0x9F6D, /* 0x10 */
+ 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F72, 0x9F73, 0xBDB9, 0x9F74, /* 0x20 */
+ 0x9F75, 0x9F76, 0x9F77, 0x9F78, 0x9F79, 0x9F7A, 0x9F7B, 0xECCC, /* 0x20 */
+ 0xD1E6, 0xECCD, 0x9F7C, 0x9F7D, 0x9F7E, 0x9F80, 0xC8BB, 0x9F81, /* 0x30 */
+ 0x9F82, 0x9F83, 0x9F84, 0x9F85, 0x9F86, 0x9F87, 0x9F88, 0x9F89, /* 0x30 */
+ 0x9F8A, 0x9F8B, 0x9F8C, 0x9F8D, 0x9F8E, 0xECD1, 0x9F8F, 0x9F90, /* 0x40 */
+ 0x9F91, 0x9F92, 0xECD3, 0x9F93, 0xBBCD, 0x9F94, 0xBCE5, 0x9F95, /* 0x40 */
+ 0x9F96, 0x9F97, 0x9F98, 0x9F99, 0x9F9A, 0x9F9B, 0x9F9C, 0x9F9D, /* 0x50 */
+ 0x9F9E, 0x9F9F, 0x9FA0, 0x9FA1, 0xECCF, 0x9FA2, 0xC9B7, 0x9FA3, /* 0x50 */
+ 0x9FA4, 0x9FA5, 0x9FA6, 0x9FA7, 0xC3BA, 0x9FA8, 0xECE3, 0xD5D5, /* 0x60 */
+ 0xECD0, 0x9FA9, 0x9FAA, 0x9FAB, 0x9FAC, 0x9FAD, 0xD6F3, 0x9FAE, /* 0x60 */
+ 0x9FAF, 0x9FB0, 0xECD2, 0xECCE, 0x9FB1, 0x9FB2, 0x9FB3, 0x9FB4, /* 0x70 */
+ 0xECD4, 0x9FB5, 0xECD5, 0x9FB6, 0x9FB7, 0xC9BF, 0x9FB8, 0x9FB9, /* 0x70 */
+ 0x9FBA, 0x9FBB, 0x9FBC, 0x9FBD, 0xCFA8, 0x9FBE, 0x9FBF, 0x9FC0, /* 0x80 */
+ 0x9FC1, 0x9FC2, 0xD0DC, 0x9FC3, 0x9FC4, 0x9FC5, 0x9FC6, 0xD1AC, /* 0x80 */
+ 0x9FC7, 0x9FC8, 0x9FC9, 0x9FCA, 0xC8DB, 0x9FCB, 0x9FCC, 0x9FCD, /* 0x90 */
+ 0xECD6, 0xCEF5, 0x9FCE, 0x9FCF, 0x9FD0, 0x9FD1, 0x9FD2, 0xCAEC, /* 0x90 */
+ 0xECDA, 0x9FD3, 0x9FD4, 0x9FD5, 0x9FD6, 0x9FD7, 0x9FD8, 0x9FD9, /* 0xA0 */
+ 0xECD9, 0x9FDA, 0x9FDB, 0x9FDC, 0xB0BE, 0x9FDD, 0x9FDE, 0x9FDF, /* 0xA0 */
+ 0x9FE0, 0x9FE1, 0x9FE2, 0xECD7, 0x9FE3, 0xECD8, 0x9FE4, 0x9FE5, /* 0xB0 */
+ 0x9FE6, 0xECE4, 0x9FE7, 0x9FE8, 0x9FE9, 0x9FEA, 0x9FEB, 0x9FEC, /* 0xB0 */
+ 0x9FED, 0x9FEE, 0x9FEF, 0xC8BC, 0x9FF0, 0x9FF1, 0x9FF2, 0x9FF3, /* 0xC0 */
+ 0x9FF4, 0x9FF5, 0x9FF6, 0x9FF7, 0x9FF8, 0x9FF9, 0xC1C7, 0x9FFA, /* 0xC0 */
+ 0x9FFB, 0x9FFC, 0x9FFD, 0x9FFE, 0xECDC, 0xD1E0, 0xA040, 0xA041, /* 0xD0 */
+ 0xA042, 0xA043, 0xA044, 0xA045, 0xA046, 0xA047, 0xA048, 0xA049, /* 0xD0 */
+ 0xECDB, 0xA04A, 0xA04B, 0xA04C, 0xA04D, 0xD4EF, 0xA04E, 0xECDD, /* 0xE0 */
+ 0xA04F, 0xA050, 0xA051, 0xA052, 0xA053, 0xA054, 0xDBC6, 0xA055, /* 0xE0 */
+ 0xA056, 0xA057, 0xA058, 0xA059, 0xA05A, 0xA05B, 0xA05C, 0xA05D, /* 0xF0 */
+ 0xA05E, 0xECDE, 0xA05F, 0xA060, 0xA061, 0xA062, 0xA063, 0xA064 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA065, 0xA066, 0xA067, 0xA068, 0xA069, 0xA06A, 0xB1AC, 0xA06B, /* 0x00 */
+ 0xA06C, 0xA06D, 0xA06E, 0xA06F, 0xA070, 0xA071, 0xA072, 0xA073, /* 0x00 */
+ 0xA074, 0xA075, 0xA076, 0xA077, 0xA078, 0xA079, 0xA07A, 0xA07B, /* 0x10 */
+ 0xA07C, 0xA07D, 0xA07E, 0xA080, 0xA081, 0xECDF, 0xA082, 0xA083, /* 0x10 */
+ 0xA084, 0xA085, 0xA086, 0xA087, 0xA088, 0xA089, 0xA08A, 0xA08B, /* 0x20 */
+ 0xECE0, 0xA08C, 0xD7A6, 0xA08D, 0xC5C0, 0xA08E, 0xA08F, 0xA090, /* 0x20 */
+ 0xEBBC, 0xB0AE, 0xA091, 0xA092, 0xA093, 0xBEF4, 0xB8B8, 0xD2AF, /* 0x30 */
+ 0xB0D6, 0xB5F9, 0xA094, 0xD8B3, 0xA095, 0xCBAC, 0xA096, 0xE3DD, /* 0x30 */
+ 0xA097, 0xA098, 0xA099, 0xA09A, 0xA09B, 0xA09C, 0xA09D, 0xC6AC, /* 0x40 */
+ 0xB0E6, 0xA09E, 0xA09F, 0xA0A0, 0xC5C6, 0xEBB9, 0xA0A1, 0xA0A2, /* 0x40 */
+ 0xA0A3, 0xA0A4, 0xEBBA, 0xA0A5, 0xA0A6, 0xA0A7, 0xEBBB, 0xA0A8, /* 0x50 */
+ 0xA0A9, 0xD1C0, 0xA0AA, 0xC5A3, 0xA0AB, 0xEAF2, 0xA0AC, 0xC4B2, /* 0x50 */
+ 0xA0AD, 0xC4B5, 0xC0CE, 0xA0AE, 0xA0AF, 0xA0B0, 0xEAF3, 0xC4C1, /* 0x60 */
+ 0xA0B1, 0xCEEF, 0xA0B2, 0xA0B3, 0xA0B4, 0xA0B5, 0xEAF0, 0xEAF4, /* 0x60 */
+ 0xA0B6, 0xA0B7, 0xC9FC, 0xA0B8, 0xA0B9, 0xC7A3, 0xA0BA, 0xA0BB, /* 0x70 */
+ 0xA0BC, 0xCCD8, 0xCEFE, 0xA0BD, 0xA0BE, 0xA0BF, 0xEAF5, 0xEAF6, /* 0x70 */
+ 0xCFAC, 0xC0E7, 0xA0C0, 0xA0C1, 0xEAF7, 0xA0C2, 0xA0C3, 0xA0C4, /* 0x80 */
+ 0xA0C5, 0xA0C6, 0xB6BF, 0xEAF8, 0xA0C7, 0xEAF9, 0xA0C8, 0xEAFA, /* 0x80 */
+ 0xA0C9, 0xA0CA, 0xEAFB, 0xA0CB, 0xA0CC, 0xA0CD, 0xA0CE, 0xA0CF, /* 0x90 */
+ 0xA0D0, 0xA0D1, 0xA0D2, 0xA0D3, 0xA0D4, 0xA0D5, 0xA0D6, 0xEAF1, /* 0x90 */
+ 0xA0D7, 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, 0xA0DC, 0xA0DD, 0xA0DE, /* 0xA0 */
+ 0xA0DF, 0xA0E0, 0xA0E1, 0xA0E2, 0xC8AE, 0xE1EB, 0xA0E3, 0xB7B8, /* 0xA0 */
+ 0xE1EC, 0xA0E4, 0xA0E5, 0xA0E6, 0xE1ED, 0xA0E7, 0xD7B4, 0xE1EE, /* 0xB0 */
+ 0xE1EF, 0xD3CC, 0xA0E8, 0xA0E9, 0xA0EA, 0xA0EB, 0xA0EC, 0xA0ED, /* 0xB0 */
+ 0xA0EE, 0xE1F1, 0xBFF1, 0xE1F0, 0xB5D2, 0xA0EF, 0xA0F0, 0xA0F1, /* 0xC0 */
+ 0xB1B7, 0xA0F2, 0xA0F3, 0xA0F4, 0xA0F5, 0xE1F3, 0xE1F2, 0xA0F6, /* 0xC0 */
+ 0xBAFC, 0xA0F7, 0xE1F4, 0xA0F8, 0xA0F9, 0xA0FA, 0xA0FB, 0xB9B7, /* 0xD0 */
+ 0xA0FC, 0xBED1, 0xA0FD, 0xA0FE, 0xAA40, 0xAA41, 0xC4FC, 0xAA42, /* 0xD0 */
+ 0xBADD, 0xBDC6, 0xAA43, 0xAA44, 0xAA45, 0xAA46, 0xAA47, 0xAA48, /* 0xE0 */
+ 0xE1F5, 0xE1F7, 0xAA49, 0xAA4A, 0xB6C0, 0xCFC1, 0xCAA8, 0xE1F6, /* 0xE0 */
+ 0xD5F8, 0xD3FC, 0xE1F8, 0xE1FC, 0xE1F9, 0xAA4B, 0xAA4C, 0xE1FA, /* 0xF0 */
+ 0xC0EA, 0xAA4D, 0xE1FE, 0xE2A1, 0xC0C7, 0xAA4E, 0xAA4F, 0xAA50 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAA51, 0xE1FB, 0xAA52, 0xE1FD, 0xAA53, 0xAA54, 0xAA55, 0xAA56, /* 0x00 */
+ 0xAA57, 0xAA58, 0xE2A5, 0xAA59, 0xAA5A, 0xAA5B, 0xC1D4, 0xAA5C, /* 0x00 */
+ 0xAA5D, 0xAA5E, 0xAA5F, 0xE2A3, 0xAA60, 0xE2A8, 0xB2FE, 0xE2A2, /* 0x10 */
+ 0xAA61, 0xAA62, 0xAA63, 0xC3CD, 0xB2C2, 0xE2A7, 0xE2A6, 0xAA64, /* 0x10 */
+ 0xAA65, 0xE2A4, 0xE2A9, 0xAA66, 0xAA67, 0xE2AB, 0xAA68, 0xAA69, /* 0x20 */
+ 0xAA6A, 0xD0C9, 0xD6ED, 0xC3A8, 0xE2AC, 0xAA6B, 0xCFD7, 0xAA6C, /* 0x20 */
+ 0xAA6D, 0xE2AE, 0xAA6E, 0xAA6F, 0xBAEF, 0xAA70, 0xAA71, 0xE9E0, /* 0x30 */
+ 0xE2AD, 0xE2AA, 0xAA72, 0xAA73, 0xAA74, 0xAA75, 0xBBAB, 0xD4B3, /* 0x30 */
+ 0xAA76, 0xAA77, 0xAA78, 0xAA79, 0xAA7A, 0xAA7B, 0xAA7C, 0xAA7D, /* 0x40 */
+ 0xAA7E, 0xAA80, 0xAA81, 0xAA82, 0xAA83, 0xE2B0, 0xAA84, 0xAA85, /* 0x40 */
+ 0xE2AF, 0xAA86, 0xE9E1, 0xAA87, 0xAA88, 0xAA89, 0xAA8A, 0xE2B1, /* 0x50 */
+ 0xAA8B, 0xAA8C, 0xAA8D, 0xAA8E, 0xAA8F, 0xAA90, 0xAA91, 0xAA92, /* 0x50 */
+ 0xE2B2, 0xAA93, 0xAA94, 0xAA95, 0xAA96, 0xAA97, 0xAA98, 0xAA99, /* 0x60 */
+ 0xAA9A, 0xAA9B, 0xAA9C, 0xAA9D, 0xE2B3, 0xCCA1, 0xAA9E, 0xE2B4, /* 0x60 */
+ 0xAA9F, 0xAAA0, 0xAB40, 0xAB41, 0xAB42, 0xAB43, 0xAB44, 0xAB45, /* 0x70 */
+ 0xAB46, 0xAB47, 0xAB48, 0xAB49, 0xAB4A, 0xAB4B, 0xE2B5, 0xAB4C, /* 0x70 */
+ 0xAB4D, 0xAB4E, 0xAB4F, 0xAB50, 0xD0FE, 0xAB51, 0xAB52, 0xC2CA, /* 0x80 */
+ 0xAB53, 0xD3F1, 0xAB54, 0xCDF5, 0xAB55, 0xAB56, 0xE7E0, 0xAB57, /* 0x80 */
+ 0xAB58, 0xE7E1, 0xAB59, 0xAB5A, 0xAB5B, 0xAB5C, 0xBEC1, 0xAB5D, /* 0x90 */
+ 0xAB5E, 0xAB5F, 0xAB60, 0xC2EA, 0xAB61, 0xAB62, 0xAB63, 0xE7E4, /* 0x90 */
+ 0xAB64, 0xAB65, 0xE7E3, 0xAB66, 0xAB67, 0xAB68, 0xAB69, 0xAB6A, /* 0xA0 */
+ 0xAB6B, 0xCDE6, 0xAB6C, 0xC3B5, 0xAB6D, 0xAB6E, 0xE7E2, 0xBBB7, /* 0xA0 */
+ 0xCFD6, 0xAB6F, 0xC1E1, 0xE7E9, 0xAB70, 0xAB71, 0xAB72, 0xE7E8, /* 0xB0 */
+ 0xAB73, 0xAB74, 0xE7F4, 0xB2A3, 0xAB75, 0xAB76, 0xAB77, 0xAB78, /* 0xB0 */
+ 0xE7EA, 0xAB79, 0xE7E6, 0xAB7A, 0xAB7B, 0xAB7C, 0xAB7D, 0xAB7E, /* 0xC0 */
+ 0xE7EC, 0xE7EB, 0xC9BA, 0xAB80, 0xAB81, 0xD5E4, 0xAB82, 0xE7E5, /* 0xC0 */
+ 0xB7A9, 0xE7E7, 0xAB83, 0xAB84, 0xAB85, 0xAB86, 0xAB87, 0xAB88, /* 0xD0 */
+ 0xAB89, 0xE7EE, 0xAB8A, 0xAB8B, 0xAB8C, 0xAB8D, 0xE7F3, 0xAB8E, /* 0xD0 */
+ 0xD6E9, 0xAB8F, 0xAB90, 0xAB91, 0xAB92, 0xE7ED, 0xAB93, 0xE7F2, /* 0xE0 */
+ 0xAB94, 0xE7F1, 0xAB95, 0xAB96, 0xAB97, 0xB0E0, 0xAB98, 0xAB99, /* 0xE0 */
+ 0xAB9A, 0xAB9B, 0xE7F5, 0xAB9C, 0xAB9D, 0xAB9E, 0xAB9F, 0xABA0, /* 0xF0 */
+ 0xAC40, 0xAC41, 0xAC42, 0xAC43, 0xAC44, 0xAC45, 0xAC46, 0xAC47 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAC48, 0xAC49, 0xAC4A, 0xC7F2, 0xAC4B, 0xC0C5, 0xC0ED, 0xAC4C, /* 0x00 */
+ 0xAC4D, 0xC1F0, 0xE7F0, 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, 0xE7F6, /* 0x00 */
+ 0xCBF6, 0xAC52, 0xAC53, 0xAC54, 0xAC55, 0xAC56, 0xAC57, 0xAC58, /* 0x10 */
+ 0xAC59, 0xAC5A, 0xE8A2, 0xE8A1, 0xAC5B, 0xAC5C, 0xAC5D, 0xAC5E, /* 0x10 */
+ 0xAC5F, 0xAC60, 0xD7C1, 0xAC61, 0xAC62, 0xE7FA, 0xE7F9, 0xAC63, /* 0x20 */
+ 0xE7FB, 0xAC64, 0xE7F7, 0xAC65, 0xE7FE, 0xAC66, 0xE7FD, 0xAC67, /* 0x20 */
+ 0xE7FC, 0xAC68, 0xAC69, 0xC1D5, 0xC7D9, 0xC5FD, 0xC5C3, 0xAC6A, /* 0x30 */
+ 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E, 0xC7ED, 0xAC6F, 0xAC70, 0xAC71, /* 0x30 */
+ 0xAC72, 0xE8A3, 0xAC73, 0xAC74, 0xAC75, 0xAC76, 0xAC77, 0xAC78, /* 0x40 */
+ 0xAC79, 0xAC7A, 0xAC7B, 0xAC7C, 0xAC7D, 0xAC7E, 0xAC80, 0xAC81, /* 0x40 */
+ 0xAC82, 0xAC83, 0xAC84, 0xAC85, 0xAC86, 0xE8A6, 0xAC87, 0xE8A5, /* 0x50 */
+ 0xAC88, 0xE8A7, 0xBAF7, 0xE7F8, 0xE8A4, 0xAC89, 0xC8F0, 0xC9AA, /* 0x50 */
+ 0xAC8A, 0xAC8B, 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, 0xAC91, /* 0x60 */
+ 0xAC92, 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xE8A9, 0xAC97, 0xAC98, /* 0x60 */
+ 0xB9E5, 0xAC99, 0xAC9A, 0xAC9B, 0xAC9C, 0xAC9D, 0xD1FE, 0xE8A8, /* 0x70 */
+ 0xAC9E, 0xAC9F, 0xACA0, 0xAD40, 0xAD41, 0xAD42, 0xE8AA, 0xAD43, /* 0x70 */
+ 0xE8AD, 0xE8AE, 0xAD44, 0xC1A7, 0xAD45, 0xAD46, 0xAD47, 0xE8AF, /* 0x80 */
+ 0xAD48, 0xAD49, 0xAD4A, 0xE8B0, 0xAD4B, 0xAD4C, 0xE8AC, 0xAD4D, /* 0x80 */
+ 0xE8B4, 0xAD4E, 0xAD4F, 0xAD50, 0xAD51, 0xAD52, 0xAD53, 0xAD54, /* 0x90 */
+ 0xAD55, 0xAD56, 0xAD57, 0xAD58, 0xE8AB, 0xAD59, 0xE8B1, 0xAD5A, /* 0x90 */
+ 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, 0xAD5F, 0xAD60, 0xAD61, 0xE8B5, /* 0xA0 */
+ 0xE8B2, 0xE8B3, 0xAD62, 0xAD63, 0xAD64, 0xAD65, 0xAD66, 0xAD67, /* 0xA0 */
+ 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6C, 0xAD6D, 0xAD6E, 0xAD6F, /* 0xB0 */
+ 0xAD70, 0xAD71, 0xE8B7, 0xAD72, 0xAD73, 0xAD74, 0xAD75, 0xAD76, /* 0xB0 */
+ 0xAD77, 0xAD78, 0xAD79, 0xAD7A, 0xAD7B, 0xAD7C, 0xAD7D, 0xAD7E, /* 0xC0 */
+ 0xAD80, 0xAD81, 0xAD82, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, /* 0xC0 */
+ 0xAD88, 0xAD89, 0xE8B6, 0xAD8A, 0xAD8B, 0xAD8C, 0xAD8D, 0xAD8E, /* 0xD0 */
+ 0xAD8F, 0xAD90, 0xAD91, 0xAD92, 0xB9CF, 0xAD93, 0xF0AC, 0xAD94, /* 0xD0 */
+ 0xF0AD, 0xAD95, 0xC6B0, 0xB0EA, 0xC8BF, 0xAD96, 0xCDDF, 0xAD97, /* 0xE0 */
+ 0xAD98, 0xAD99, 0xAD9A, 0xAD9B, 0xAD9C, 0xAD9D, 0xCECD, 0xEAB1, /* 0xE0 */
+ 0xAD9E, 0xAD9F, 0xADA0, 0xAE40, 0xEAB2, 0xAE41, 0xC6BF, 0xB4C9, /* 0xF0 */
+ 0xAE42, 0xAE43, 0xAE44, 0xAE45, 0xAE46, 0xAE47, 0xAE48, 0xEAB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAE49, 0xAE4A, 0xAE4B, 0xAE4C, 0xD5E7, 0xAE4D, 0xAE4E, 0xAE4F, /* 0x00 */
+ 0xAE50, 0xAE51, 0xAE52, 0xAE53, 0xAE54, 0xDDF9, 0xAE55, 0xEAB4, /* 0x00 */
+ 0xAE56, 0xEAB5, 0xAE57, 0xEAB6, 0xAE58, 0xAE59, 0xAE5A, 0xAE5B, /* 0x10 */
+ 0xB8CA, 0xDFB0, 0xC9F5, 0xAE5C, 0xCCF0, 0xAE5D, 0xAE5E, 0xC9FA, /* 0x10 */
+ 0xAE5F, 0xAE60, 0xAE61, 0xAE62, 0xAE63, 0xC9FB, 0xAE64, 0xAE65, /* 0x20 */
+ 0xD3C3, 0xCBA6, 0xAE66, 0xB8A6, 0xF0AE, 0xB1C2, 0xAE67, 0xE5B8, /* 0x20 */
+ 0xCCEF, 0xD3C9, 0xBCD7, 0xC9EA, 0xAE68, 0xB5E7, 0xAE69, 0xC4D0, /* 0x30 */
+ 0xB5E9, 0xAE6A, 0xEEAE, 0xBBAD, 0xAE6B, 0xAE6C, 0xE7DE, 0xAE6D, /* 0x30 */
+ 0xEEAF, 0xAE6E, 0xAE6F, 0xAE70, 0xAE71, 0xB3A9, 0xAE72, 0xAE73, /* 0x40 */
+ 0xEEB2, 0xAE74, 0xAE75, 0xEEB1, 0xBDE7, 0xAE76, 0xEEB0, 0xCEB7, /* 0x40 */
+ 0xAE77, 0xAE78, 0xAE79, 0xAE7A, 0xC5CF, 0xAE7B, 0xAE7C, 0xAE7D, /* 0x50 */
+ 0xAE7E, 0xC1F4, 0xDBCE, 0xEEB3, 0xD0F3, 0xAE80, 0xAE81, 0xAE82, /* 0x50 */
+ 0xAE83, 0xAE84, 0xAE85, 0xAE86, 0xAE87, 0xC2D4, 0xC6E8, 0xAE88, /* 0x60 */
+ 0xAE89, 0xAE8A, 0xB7AC, 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xAE8F, /* 0x60 */
+ 0xAE90, 0xAE91, 0xEEB4, 0xAE92, 0xB3EB, 0xAE93, 0xAE94, 0xAE95, /* 0x70 */
+ 0xBBFB, 0xEEB5, 0xAE96, 0xAE97, 0xAE98, 0xAE99, 0xAE9A, 0xE7DC, /* 0x70 */
+ 0xAE9B, 0xAE9C, 0xAE9D, 0xEEB6, 0xAE9E, 0xAE9F, 0xBDAE, 0xAEA0, /* 0x80 */
+ 0xAF40, 0xAF41, 0xAF42, 0xF1E2, 0xAF43, 0xAF44, 0xAF45, 0xCAE8, /* 0x80 */
+ 0xAF46, 0xD2C9, 0xF0DA, 0xAF47, 0xF0DB, 0xAF48, 0xF0DC, 0xC1C6, /* 0x90 */
+ 0xAF49, 0xB8ED, 0xBECE, 0xAF4A, 0xAF4B, 0xF0DE, 0xAF4C, 0xC5B1, /* 0x90 */
+ 0xF0DD, 0xD1F1, 0xAF4D, 0xF0E0, 0xB0CC, 0xBDEA, 0xAF4E, 0xAF4F, /* 0xA0 */
+ 0xAF50, 0xAF51, 0xAF52, 0xD2DF, 0xF0DF, 0xAF53, 0xB4AF, 0xB7E8, /* 0xA0 */
+ 0xF0E6, 0xF0E5, 0xC6A3, 0xF0E1, 0xF0E2, 0xB4C3, 0xAF54, 0xAF55, /* 0xB0 */
+ 0xF0E3, 0xD5EE, 0xAF56, 0xAF57, 0xCCDB, 0xBED2, 0xBCB2, 0xAF58, /* 0xB0 */
+ 0xAF59, 0xAF5A, 0xF0E8, 0xF0E7, 0xF0E4, 0xB2A1, 0xAF5B, 0xD6A2, /* 0xC0 */
+ 0xD3B8, 0xBEB7, 0xC8AC, 0xAF5C, 0xAF5D, 0xF0EA, 0xAF5E, 0xAF5F, /* 0xC0 */
+ 0xAF60, 0xAF61, 0xD1F7, 0xAF62, 0xD6CC, 0xBADB, 0xF0E9, 0xAF63, /* 0xD0 */
+ 0xB6BB, 0xAF64, 0xAF65, 0xCDB4, 0xAF66, 0xAF67, 0xC6A6, 0xAF68, /* 0xD0 */
+ 0xAF69, 0xAF6A, 0xC1A1, 0xF0EB, 0xF0EE, 0xAF6B, 0xF0ED, 0xF0F0, /* 0xE0 */
+ 0xF0EC, 0xAF6C, 0xBBBE, 0xF0EF, 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, /* 0xE0 */
+ 0xCCB5, 0xF0F2, 0xAF71, 0xAF72, 0xB3D5, 0xAF73, 0xAF74, 0xAF75, /* 0xF0 */
+ 0xAF76, 0xB1D4, 0xAF77, 0xAF78, 0xF0F3, 0xAF79, 0xAF7A, 0xF0F4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0F6, 0xB4E1, 0xAF7B, 0xF0F1, 0xAF7C, 0xF0F7, 0xAF7D, 0xAF7E, /* 0x00 */
+ 0xAF80, 0xAF81, 0xF0FA, 0xAF82, 0xF0F8, 0xAF83, 0xAF84, 0xAF85, /* 0x00 */
+ 0xF0F5, 0xAF86, 0xAF87, 0xAF88, 0xAF89, 0xF0FD, 0xAF8A, 0xF0F9, /* 0x10 */
+ 0xF0FC, 0xF0FE, 0xAF8B, 0xF1A1, 0xAF8C, 0xAF8D, 0xAF8E, 0xCEC1, /* 0x10 */
+ 0xF1A4, 0xAF8F, 0xF1A3, 0xAF90, 0xC1F6, 0xF0FB, 0xCADD, 0xAF91, /* 0x20 */
+ 0xAF92, 0xB4F1, 0xB1F1, 0xCCB1, 0xAF93, 0xF1A6, 0xAF94, 0xAF95, /* 0x20 */
+ 0xF1A7, 0xAF96, 0xAF97, 0xF1AC, 0xD5CE, 0xF1A9, 0xAF98, 0xAF99, /* 0x30 */
+ 0xC8B3, 0xAF9A, 0xAF9B, 0xAF9C, 0xF1A2, 0xAF9D, 0xF1AB, 0xF1A8, /* 0x30 */
+ 0xF1A5, 0xAF9E, 0xAF9F, 0xF1AA, 0xAFA0, 0xB040, 0xB041, 0xB042, /* 0x40 */
+ 0xB043, 0xB044, 0xB045, 0xB046, 0xB0A9, 0xF1AD, 0xB047, 0xB048, /* 0x40 */
+ 0xB049, 0xB04A, 0xB04B, 0xB04C, 0xF1AF, 0xB04D, 0xF1B1, 0xB04E, /* 0x50 */
+ 0xB04F, 0xB050, 0xB051, 0xB052, 0xF1B0, 0xB053, 0xF1AE, 0xB054, /* 0x50 */
+ 0xB055, 0xB056, 0xB057, 0xD1A2, 0xB058, 0xB059, 0xB05A, 0xB05B, /* 0x60 */
+ 0xB05C, 0xB05D, 0xB05E, 0xF1B2, 0xB05F, 0xB060, 0xB061, 0xF1B3, /* 0x60 */
+ 0xB062, 0xB063, 0xB064, 0xB065, 0xB066, 0xB067, 0xB068, 0xB069, /* 0x70 */
+ 0xB9EF, 0xB06A, 0xB06B, 0xB5C7, 0xB06C, 0xB0D7, 0xB0D9, 0xB06D, /* 0x70 */
+ 0xB06E, 0xB06F, 0xD4ED, 0xB070, 0xB5C4, 0xB071, 0xBDD4, 0xBBCA, /* 0x80 */
+ 0xF0A7, 0xB072, 0xB073, 0xB8DE, 0xB074, 0xB075, 0xF0A8, 0xB076, /* 0x80 */
+ 0xB077, 0xB0A8, 0xB078, 0xF0A9, 0xB079, 0xB07A, 0xCDEE, 0xB07B, /* 0x90 */
+ 0xB07C, 0xF0AA, 0xB07D, 0xB07E, 0xB080, 0xB081, 0xB082, 0xB083, /* 0x90 */
+ 0xB084, 0xB085, 0xB086, 0xB087, 0xF0AB, 0xB088, 0xB089, 0xB08A, /* 0xA0 */
+ 0xB08B, 0xB08C, 0xB08D, 0xB08E, 0xB08F, 0xB090, 0xC6A4, 0xB091, /* 0xA0 */
+ 0xB092, 0xD6E5, 0xF1E4, 0xB093, 0xF1E5, 0xB094, 0xB095, 0xB096, /* 0xB0 */
+ 0xB097, 0xB098, 0xB099, 0xB09A, 0xB09B, 0xB09C, 0xB09D, 0xC3F3, /* 0xB0 */
+ 0xB09E, 0xB09F, 0xD3DB, 0xB0A0, 0xB140, 0xD6D1, 0xC5E8, 0xB141, /* 0xC0 */
+ 0xD3AF, 0xB142, 0xD2E6, 0xB143, 0xB144, 0xEEC1, 0xB0BB, 0xD5B5, /* 0xC0 */
+ 0xD1CE, 0xBCE0, 0xBAD0, 0xB145, 0xBFF8, 0xB146, 0xB8C7, 0xB5C1, /* 0xD0 */
+ 0xC5CC, 0xB147, 0xB148, 0xCAA2, 0xB149, 0xB14A, 0xB14B, 0xC3CB, /* 0xD0 */
+ 0xB14C, 0xB14D, 0xB14E, 0xB14F, 0xB150, 0xEEC2, 0xB151, 0xB152, /* 0xE0 */
+ 0xB153, 0xB154, 0xB155, 0xB156, 0xB157, 0xB158, 0xC4BF, 0xB6A2, /* 0xE0 */
+ 0xB159, 0xEDEC, 0xC3A4, 0xB15A, 0xD6B1, 0xB15B, 0xB15C, 0xB15D, /* 0xF0 */
+ 0xCFE0, 0xEDEF, 0xB15E, 0xB15F, 0xC5CE, 0xB160, 0xB6DC, 0xB161 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB162, 0xCAA1, 0xB163, 0xB164, 0xEDED, 0xB165, 0xB166, 0xEDF0, /* 0x00 */
+ 0xEDF1, 0xC3BC, 0xB167, 0xBFB4, 0xB168, 0xEDEE, 0xB169, 0xB16A, /* 0x00 */
+ 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, 0xB171, 0xB172, /* 0x10 */
+ 0xB173, 0xEDF4, 0xEDF2, 0xB174, 0xB175, 0xB176, 0xB177, 0xD5E6, /* 0x10 */
+ 0xC3DF, 0xB178, 0xEDF3, 0xB179, 0xB17A, 0xB17B, 0xEDF6, 0xB17C, /* 0x20 */
+ 0xD5A3, 0xD1A3, 0xB17D, 0xB17E, 0xB180, 0xEDF5, 0xB181, 0xC3D0, /* 0x20 */
+ 0xB182, 0xB183, 0xB184, 0xB185, 0xB186, 0xEDF7, 0xBFF4, 0xBEEC, /* 0x30 */
+ 0xEDF8, 0xB187, 0xCCF7, 0xB188, 0xD1DB, 0xB189, 0xB18A, 0xB18B, /* 0x30 */
+ 0xD7C5, 0xD5F6, 0xB18C, 0xEDFC, 0xB18D, 0xB18E, 0xB18F, 0xEDFB, /* 0x40 */
+ 0xB190, 0xB191, 0xB192, 0xB193, 0xB194, 0xB195, 0xB196, 0xB197, /* 0x40 */
+ 0xEDF9, 0xEDFA, 0xB198, 0xB199, 0xB19A, 0xB19B, 0xB19C, 0xB19D, /* 0x50 */
+ 0xB19E, 0xB19F, 0xEDFD, 0xBEA6, 0xB1A0, 0xB240, 0xB241, 0xB242, /* 0x50 */
+ 0xB243, 0xCBAF, 0xEEA1, 0xB6BD, 0xB244, 0xEEA2, 0xC4C0, 0xB245, /* 0x60 */
+ 0xEDFE, 0xB246, 0xB247, 0xBDDE, 0xB2C7, 0xB248, 0xB249, 0xB24A, /* 0x60 */
+ 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB252, /* 0x70 */
+ 0xB253, 0xB6C3, 0xB254, 0xB255, 0xB256, 0xEEA5, 0xD8BA, 0xEEA3, /* 0x70 */
+ 0xEEA6, 0xB257, 0xB258, 0xB259, 0xC3E9, 0xB3F2, 0xB25A, 0xB25B, /* 0x80 */
+ 0xB25C, 0xB25D, 0xB25E, 0xB25F, 0xEEA7, 0xEEA4, 0xCFB9, 0xB260, /* 0x80 */
+ 0xB261, 0xEEA8, 0xC2F7, 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, /* 0x90 */
+ 0xB267, 0xB268, 0xB269, 0xB26A, 0xB26B, 0xB26C, 0xB26D, 0xEEA9, /* 0x90 */
+ 0xEEAA, 0xB26E, 0xDEAB, 0xB26F, 0xB270, 0xC6B3, 0xB271, 0xC7C6, /* 0xA0 */
+ 0xB272, 0xD6F5, 0xB5C9, 0xB273, 0xCBB2, 0xB274, 0xB275, 0xB276, /* 0xA0 */
+ 0xEEAB, 0xB277, 0xB278, 0xCDAB, 0xB279, 0xEEAC, 0xB27A, 0xB27B, /* 0xB0 */
+ 0xB27C, 0xB27D, 0xB27E, 0xD5B0, 0xB280, 0xEEAD, 0xB281, 0xF6C4, /* 0xB0 */
+ 0xB282, 0xB283, 0xB284, 0xB285, 0xB286, 0xB287, 0xB288, 0xB289, /* 0xC0 */
+ 0xB28A, 0xB28B, 0xB28C, 0xB28D, 0xB28E, 0xDBC7, 0xB28F, 0xB290, /* 0xC0 */
+ 0xB291, 0xB292, 0xB293, 0xB294, 0xB295, 0xB296, 0xB297, 0xB4A3, /* 0xD0 */
+ 0xB298, 0xB299, 0xB29A, 0xC3AC, 0xF1E6, 0xB29B, 0xB29C, 0xB29D, /* 0xD0 */
+ 0xB29E, 0xB29F, 0xCAB8, 0xD2D3, 0xB2A0, 0xD6AA, 0xB340, 0xEFF2, /* 0xE0 */
+ 0xB341, 0xBED8, 0xB342, 0xBDC3, 0xEFF3, 0xB6CC, 0xB0AB, 0xB343, /* 0xE0 */
+ 0xB344, 0xB345, 0xB346, 0xCAAF, 0xB347, 0xB348, 0xEDB6, 0xB349, /* 0xF0 */
+ 0xEDB7, 0xB34A, 0xB34B, 0xB34C, 0xB34D, 0xCEF9, 0xB7AF, 0xBFF3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDB8, 0xC2EB, 0xC9B0, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, /* 0x00 */
+ 0xB353, 0xEDB9, 0xB354, 0xB355, 0xC6F6, 0xBFB3, 0xB356, 0xB357, /* 0x00 */
+ 0xB358, 0xEDBC, 0xC5F8, 0xB359, 0xD1D0, 0xB35A, 0xD7A9, 0xEDBA, /* 0x10 */
+ 0xEDBB, 0xB35B, 0xD1E2, 0xB35C, 0xEDBF, 0xEDC0, 0xB35D, 0xEDC4, /* 0x10 */
+ 0xB35E, 0xB35F, 0xB360, 0xEDC8, 0xB361, 0xEDC6, 0xEDCE, 0xD5E8, /* 0x20 */
+ 0xB362, 0xEDC9, 0xB363, 0xB364, 0xEDC7, 0xEDBE, 0xB365, 0xB366, /* 0x20 */
+ 0xC5E9, 0xB367, 0xB368, 0xB369, 0xC6C6, 0xB36A, 0xB36B, 0xC9E9, /* 0x30 */
+ 0xD4D2, 0xEDC1, 0xEDC2, 0xEDC3, 0xEDC5, 0xB36C, 0xC0F9, 0xB36D, /* 0x30 */
+ 0xB4A1, 0xB36E, 0xB36F, 0xB370, 0xB371, 0xB9E8, 0xB372, 0xEDD0, /* 0x40 */
+ 0xB373, 0xB374, 0xB375, 0xB376, 0xEDD1, 0xB377, 0xEDCA, 0xB378, /* 0x40 */
+ 0xEDCF, 0xB379, 0xCEF8, 0xB37A, 0xB37B, 0xCBB6, 0xEDCC, 0xEDCD, /* 0x50 */
+ 0xB37C, 0xB37D, 0xB37E, 0xB380, 0xB381, 0xCFF5, 0xB382, 0xB383, /* 0x50 */
+ 0xB384, 0xB385, 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, /* 0x60 */
+ 0xB38C, 0xB38D, 0xEDD2, 0xC1F2, 0xD3B2, 0xEDCB, 0xC8B7, 0xB38E, /* 0x60 */
+ 0xB38F, 0xB390, 0xB391, 0xB392, 0xB393, 0xB394, 0xB395, 0xBCEF, /* 0x70 */
+ 0xB396, 0xB397, 0xB398, 0xB399, 0xC5F0, 0xB39A, 0xB39B, 0xB39C, /* 0x70 */
+ 0xB39D, 0xB39E, 0xB39F, 0xB3A0, 0xB440, 0xB441, 0xB442, 0xEDD6, /* 0x80 */
+ 0xB443, 0xB5EF, 0xB444, 0xB445, 0xC2B5, 0xB0AD, 0xCBE9, 0xB446, /* 0x80 */
+ 0xB447, 0xB1AE, 0xB448, 0xEDD4, 0xB449, 0xB44A, 0xB44B, 0xCDEB, /* 0x90 */
+ 0xB5E2, 0xB44C, 0xEDD5, 0xEDD3, 0xEDD7, 0xB44D, 0xB44E, 0xB5FA, /* 0x90 */
+ 0xB44F, 0xEDD8, 0xB450, 0xEDD9, 0xB451, 0xEDDC, 0xB452, 0xB1CC, /* 0xA0 */
+ 0xB453, 0xB454, 0xB455, 0xB456, 0xB457, 0xB458, 0xB459, 0xB45A, /* 0xA0 */
+ 0xC5F6, 0xBCEE, 0xEDDA, 0xCCBC, 0xB2EA, 0xB45B, 0xB45C, 0xB45D, /* 0xB0 */
+ 0xB45E, 0xEDDB, 0xB45F, 0xB460, 0xB461, 0xB462, 0xC4EB, 0xB463, /* 0xB0 */
+ 0xB464, 0xB4C5, 0xB465, 0xB466, 0xB467, 0xB0F5, 0xB468, 0xB469, /* 0xC0 */
+ 0xB46A, 0xEDDF, 0xC0DA, 0xB4E8, 0xB46B, 0xB46C, 0xB46D, 0xB46E, /* 0xC0 */
+ 0xC5CD, 0xB46F, 0xB470, 0xB471, 0xEDDD, 0xBFC4, 0xB472, 0xB473, /* 0xD0 */
+ 0xB474, 0xEDDE, 0xB475, 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A, /* 0xD0 */
+ 0xB47B, 0xB47C, 0xB47D, 0xB47E, 0xB480, 0xB481, 0xB482, 0xB483, /* 0xE0 */
+ 0xC4A5, 0xB484, 0xB485, 0xB486, 0xEDE0, 0xB487, 0xB488, 0xB489, /* 0xE0 */
+ 0xB48A, 0xB48B, 0xEDE1, 0xB48C, 0xEDE3, 0xB48D, 0xB48E, 0xC1D7, /* 0xF0 */
+ 0xB48F, 0xB490, 0xBBC7, 0xB491, 0xB492, 0xB493, 0xB494, 0xB495 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB496, 0xBDB8, 0xB497, 0xB498, 0xB499, 0xEDE2, 0xB49A, 0xB49B, /* 0x00 */
+ 0xB49C, 0xB49D, 0xB49E, 0xB49F, 0xB4A0, 0xB540, 0xB541, 0xB542, /* 0x00 */
+ 0xB543, 0xB544, 0xB545, 0xEDE4, 0xB546, 0xB547, 0xB548, 0xB549, /* 0x10 */
+ 0xB54A, 0xB54B, 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xEDE6, 0xB550, /* 0x10 */
+ 0xB551, 0xB552, 0xB553, 0xB554, 0xEDE5, 0xB555, 0xB556, 0xB557, /* 0x20 */
+ 0xB558, 0xB559, 0xB55A, 0xB55B, 0xB55C, 0xB55D, 0xB55E, 0xB55F, /* 0x20 */
+ 0xB560, 0xB561, 0xB562, 0xB563, 0xEDE7, 0xB564, 0xB565, 0xB566, /* 0x30 */
+ 0xB567, 0xB568, 0xCABE, 0xECEA, 0xC0F1, 0xB569, 0xC9E7, 0xB56A, /* 0x30 */
+ 0xECEB, 0xC6EE, 0xB56B, 0xB56C, 0xB56D, 0xB56E, 0xECEC, 0xB56F, /* 0x40 */
+ 0xC6ED, 0xECED, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, 0xB575, /* 0x40 */
+ 0xB576, 0xB577, 0xB578, 0xECF0, 0xB579, 0xB57A, 0xD7E6, 0xECF3, /* 0x50 */
+ 0xB57B, 0xB57C, 0xECF1, 0xECEE, 0xECEF, 0xD7A3, 0xC9F1, 0xCBEE, /* 0x50 */
+ 0xECF4, 0xB57D, 0xECF2, 0xB57E, 0xB580, 0xCFE9, 0xB581, 0xECF6, /* 0x60 */
+ 0xC6B1, 0xB582, 0xB583, 0xB584, 0xB585, 0xBCC0, 0xB586, 0xECF5, /* 0x60 */
+ 0xB587, 0xB588, 0xB589, 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xB5BB, /* 0x70 */
+ 0xBBF6, 0xB58E, 0xECF7, 0xB58F, 0xB590, 0xB591, 0xB592, 0xB593, /* 0x70 */
+ 0xD9F7, 0xBDFB, 0xB594, 0xB595, 0xC2BB, 0xECF8, 0xB596, 0xB597, /* 0x80 */
+ 0xB598, 0xB599, 0xECF9, 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB8A3, /* 0x80 */
+ 0xB59E, 0xB59F, 0xB5A0, 0xB640, 0xB641, 0xB642, 0xB643, 0xB644, /* 0x90 */
+ 0xB645, 0xB646, 0xECFA, 0xB647, 0xB648, 0xB649, 0xB64A, 0xB64B, /* 0x90 */
+ 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, 0xECFB, /* 0xA0 */
+ 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, /* 0xA0 */
+ 0xB65B, 0xB65C, 0xB65D, 0xECFC, 0xB65E, 0xB65F, 0xB660, 0xB661, /* 0xB0 */
+ 0xB662, 0xD3ED, 0xD8AE, 0xC0EB, 0xB663, 0xC7DD, 0xBACC, 0xB664, /* 0xB0 */
+ 0xD0E3, 0xCBBD, 0xB665, 0xCDBA, 0xB666, 0xB667, 0xB8D1, 0xB668, /* 0xC0 */
+ 0xB669, 0xB1FC, 0xB66A, 0xC7EF, 0xB66B, 0xD6D6, 0xB66C, 0xB66D, /* 0xC0 */
+ 0xB66E, 0xBFC6, 0xC3EB, 0xB66F, 0xB670, 0xEFF5, 0xB671, 0xB672, /* 0xD0 */
+ 0xC3D8, 0xB673, 0xB674, 0xB675, 0xB676, 0xB677, 0xB678, 0xD7E2, /* 0xD0 */
+ 0xB679, 0xB67A, 0xB67B, 0xEFF7, 0xB3D3, 0xB67C, 0xC7D8, 0xD1ED, /* 0xE0 */
+ 0xB67D, 0xD6C8, 0xB67E, 0xEFF8, 0xB680, 0xEFF6, 0xB681, 0xBBFD, /* 0xE0 */
+ 0xB3C6, 0xB682, 0xB683, 0xB684, 0xB685, 0xB686, 0xB687, 0xB688, /* 0xF0 */
+ 0xBDD5, 0xB689, 0xB68A, 0xD2C6, 0xB68B, 0xBBE0, 0xB68C, 0xB68D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFA1, 0xB68E, 0xEFFC, 0xEFFB, 0xB68F, 0xB690, 0xEFF9, 0xB691, /* 0x00 */
+ 0xB692, 0xB693, 0xB694, 0xB3CC, 0xB695, 0xC9D4, 0xCBB0, 0xB696, /* 0x00 */
+ 0xB697, 0xB698, 0xB699, 0xB69A, 0xEFFE, 0xB69B, 0xB69C, 0xB0DE, /* 0x10 */
+ 0xB69D, 0xB69E, 0xD6C9, 0xB69F, 0xB6A0, 0xB740, 0xEFFD, 0xB741, /* 0x10 */
+ 0xB3ED, 0xB742, 0xB743, 0xF6D5, 0xB744, 0xB745, 0xB746, 0xB747, /* 0x20 */
+ 0xB748, 0xB749, 0xB74A, 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xB74F, /* 0x20 */
+ 0xB750, 0xB751, 0xB752, 0xCEC8, 0xB753, 0xB754, 0xB755, 0xF0A2, /* 0x30 */
+ 0xB756, 0xF0A1, 0xB757, 0xB5BE, 0xBCDA, 0xBBFC, 0xB758, 0xB8E5, /* 0x30 */
+ 0xB759, 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xC4C2, 0xB75F, /* 0x40 */
+ 0xB760, 0xB761, 0xB762, 0xB763, 0xB764, 0xB765, 0xB766, 0xB767, /* 0x40 */
+ 0xB768, 0xF0A3, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, 0xCBEB, /* 0x50 */
+ 0xB76E, 0xB76F, 0xB770, 0xB771, 0xB772, 0xB773, 0xB774, 0xB775, /* 0x50 */
+ 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B, 0xB77C, 0xB77D, /* 0x60 */
+ 0xB77E, 0xB780, 0xB781, 0xB782, 0xB783, 0xB784, 0xB785, 0xB786, /* 0x60 */
+ 0xF0A6, 0xB787, 0xB788, 0xB789, 0xD1A8, 0xB78A, 0xBEBF, 0xC7EE, /* 0x70 */
+ 0xF1B6, 0xF1B7, 0xBFD5, 0xB78B, 0xB78C, 0xB78D, 0xB78E, 0xB4A9, /* 0x70 */
+ 0xF1B8, 0xCDBB, 0xB78F, 0xC7D4, 0xD5AD, 0xB790, 0xF1B9, 0xB791, /* 0x80 */
+ 0xF1BA, 0xB792, 0xB793, 0xB794, 0xB795, 0xC7CF, 0xB796, 0xB797, /* 0x80 */
+ 0xB798, 0xD2A4, 0xD6CF, 0xB799, 0xB79A, 0xF1BB, 0xBDD1, 0xB4B0, /* 0x90 */
+ 0xBEBD, 0xB79B, 0xB79C, 0xB79D, 0xB4DC, 0xCED1, 0xB79E, 0xBFDF, /* 0x90 */
+ 0xF1BD, 0xB79F, 0xB7A0, 0xB840, 0xB841, 0xBFFA, 0xF1BC, 0xB842, /* 0xA0 */
+ 0xF1BF, 0xB843, 0xB844, 0xB845, 0xF1BE, 0xF1C0, 0xB846, 0xB847, /* 0xA0 */
+ 0xB848, 0xB849, 0xB84A, 0xF1C1, 0xB84B, 0xB84C, 0xB84D, 0xB84E, /* 0xB0 */
+ 0xB84F, 0xB850, 0xB851, 0xB852, 0xB853, 0xB854, 0xB855, 0xC1FE, /* 0xB0 */
+ 0xB856, 0xB857, 0xB858, 0xB859, 0xB85A, 0xB85B, 0xB85C, 0xB85D, /* 0xC0 */
+ 0xB85E, 0xB85F, 0xB860, 0xC1A2, 0xB861, 0xB862, 0xB863, 0xB864, /* 0xC0 */
+ 0xB865, 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, 0xCAFA, 0xB86B, /* 0xD0 */
+ 0xB86C, 0xD5BE, 0xB86D, 0xB86E, 0xB86F, 0xB870, 0xBEBA, 0xBEB9, /* 0xD0 */
+ 0xD5C2, 0xB871, 0xB872, 0xBFA2, 0xB873, 0xCDAF, 0xF1B5, 0xB874, /* 0xE0 */
+ 0xB875, 0xB876, 0xB877, 0xB878, 0xB879, 0xBDDF, 0xB87A, 0xB6CB, /* 0xE0 */
+ 0xB87B, 0xB87C, 0xB87D, 0xB87E, 0xB880, 0xB881, 0xB882, 0xB883, /* 0xF0 */
+ 0xB884, 0xD6F1, 0xF3C3, 0xB885, 0xB886, 0xF3C4, 0xB887, 0xB8CD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB888, 0xB889, 0xB88A, 0xF3C6, 0xF3C7, 0xB88B, 0xB0CA, 0xB88C, /* 0x00 */
+ 0xF3C5, 0xB88D, 0xF3C9, 0xCBF1, 0xB88E, 0xB88F, 0xB890, 0xF3CB, /* 0x00 */
+ 0xB891, 0xD0A6, 0xB892, 0xB893, 0xB1CA, 0xF3C8, 0xB894, 0xB895, /* 0x10 */
+ 0xB896, 0xF3CF, 0xB897, 0xB5D1, 0xB898, 0xB899, 0xF3D7, 0xB89A, /* 0x10 */
+ 0xF3D2, 0xB89B, 0xB89C, 0xB89D, 0xF3D4, 0xF3D3, 0xB7FB, 0xB89E, /* 0x20 */
+ 0xB1BF, 0xB89F, 0xF3CE, 0xF3CA, 0xB5DA, 0xB8A0, 0xF3D0, 0xB940, /* 0x20 */
+ 0xB941, 0xF3D1, 0xB942, 0xF3D5, 0xB943, 0xB944, 0xB945, 0xB946, /* 0x30 */
+ 0xF3CD, 0xB947, 0xBCE3, 0xB948, 0xC1FD, 0xB949, 0xF3D6, 0xB94A, /* 0x30 */
+ 0xB94B, 0xB94C, 0xB94D, 0xB94E, 0xB94F, 0xF3DA, 0xB950, 0xF3CC, /* 0x40 */
+ 0xB951, 0xB5C8, 0xB952, 0xBDEE, 0xF3DC, 0xB953, 0xB954, 0xB7A4, /* 0x40 */
+ 0xBFF0, 0xD6FE, 0xCDB2, 0xB955, 0xB4F0, 0xB956, 0xB2DF, 0xB957, /* 0x50 */
+ 0xF3D8, 0xB958, 0xF3D9, 0xC9B8, 0xB959, 0xF3DD, 0xB95A, 0xB95B, /* 0x50 */
+ 0xF3DE, 0xB95C, 0xF3E1, 0xB95D, 0xB95E, 0xB95F, 0xB960, 0xB961, /* 0x60 */
+ 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, 0xB967, 0xF3DF, 0xB968, /* 0x60 */
+ 0xB969, 0xF3E3, 0xF3E2, 0xB96A, 0xB96B, 0xF3DB, 0xB96C, 0xBFEA, /* 0x70 */
+ 0xB96D, 0xB3EF, 0xB96E, 0xF3E0, 0xB96F, 0xB970, 0xC7A9, 0xB971, /* 0x70 */
+ 0xBCF2, 0xB972, 0xB973, 0xB974, 0xB975, 0xF3EB, 0xB976, 0xB977, /* 0x80 */
+ 0xB978, 0xB979, 0xB97A, 0xB97B, 0xB97C, 0xB9BF, 0xB97D, 0xB97E, /* 0x80 */
+ 0xF3E4, 0xB980, 0xB981, 0xB982, 0xB2AD, 0xBBFE, 0xB983, 0xCBE3, /* 0x90 */
+ 0xB984, 0xB985, 0xB986, 0xB987, 0xF3ED, 0xF3E9, 0xB988, 0xB989, /* 0x90 */
+ 0xB98A, 0xB9DC, 0xF3EE, 0xB98B, 0xB98C, 0xB98D, 0xF3E5, 0xF3E6, /* 0xA0 */
+ 0xF3EA, 0xC2E1, 0xF3EC, 0xF3EF, 0xF3E8, 0xBCFD, 0xB98E, 0xB98F, /* 0xA0 */
+ 0xB990, 0xCFE4, 0xB991, 0xB992, 0xF3F0, 0xB993, 0xB994, 0xB995, /* 0xB0 */
+ 0xF3E7, 0xB996, 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, /* 0xB0 */
+ 0xB99D, 0xF3F2, 0xB99E, 0xB99F, 0xB9A0, 0xBA40, 0xD7AD, 0xC6AA, /* 0xC0 */
+ 0xBA41, 0xBA42, 0xBA43, 0xBA44, 0xF3F3, 0xBA45, 0xBA46, 0xBA47, /* 0xC0 */
+ 0xBA48, 0xF3F1, 0xBA49, 0xC2A8, 0xBA4A, 0xBA4B, 0xBA4C, 0xBA4D, /* 0xD0 */
+ 0xBA4E, 0xB8DD, 0xF3F5, 0xBA4F, 0xBA50, 0xF3F4, 0xBA51, 0xBA52, /* 0xD0 */
+ 0xBA53, 0xB4DB, 0xBA54, 0xBA55, 0xBA56, 0xF3F6, 0xF3F7, 0xBA57, /* 0xE0 */
+ 0xBA58, 0xBA59, 0xF3F8, 0xBA5A, 0xBA5B, 0xBA5C, 0xC0BA, 0xBA5D, /* 0xE0 */
+ 0xBA5E, 0xC0E9, 0xBA5F, 0xBA60, 0xBA61, 0xBA62, 0xBA63, 0xC5F1, /* 0xF0 */
+ 0xBA64, 0xBA65, 0xBA66, 0xBA67, 0xF3FB, 0xBA68, 0xF3FA, 0xBA69 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0xBA70, 0xB4D8, /* 0x00 */
+ 0xBA71, 0xBA72, 0xBA73, 0xF3FE, 0xF3F9, 0xBA74, 0xBA75, 0xF3FC, /* 0x00 */
+ 0xBA76, 0xBA77, 0xBA78, 0xBA79, 0xBA7A, 0xBA7B, 0xF3FD, 0xBA7C, /* 0x10 */
+ 0xBA7D, 0xBA7E, 0xBA80, 0xBA81, 0xBA82, 0xBA83, 0xBA84, 0xF4A1, /* 0x10 */
+ 0xBA85, 0xBA86, 0xBA87, 0xBA88, 0xBA89, 0xBA8A, 0xF4A3, 0xBBC9, /* 0x20 */
+ 0xBA8B, 0xBA8C, 0xF4A2, 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, /* 0x20 */
+ 0xBA92, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, /* 0x30 */
+ 0xF4A4, 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, 0xBA9F, 0xB2BE, /* 0x30 */
+ 0xF4A6, 0xF4A5, 0xBAA0, 0xBB40, 0xBB41, 0xBB42, 0xBB43, 0xBB44, /* 0x40 */
+ 0xBB45, 0xBB46, 0xBB47, 0xBB48, 0xBB49, 0xBCAE, 0xBB4A, 0xBB4B, /* 0x40 */
+ 0xBB4C, 0xBB4D, 0xBB4E, 0xBB4F, 0xBB50, 0xBB51, 0xBB52, 0xBB53, /* 0x50 */
+ 0xBB54, 0xBB55, 0xBB56, 0xBB57, 0xBB58, 0xBB59, 0xBB5A, 0xBB5B, /* 0x50 */
+ 0xBB5C, 0xBB5D, 0xBB5E, 0xBB5F, 0xBB60, 0xBB61, 0xBB62, 0xBB63, /* 0x60 */
+ 0xBB64, 0xBB65, 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, /* 0x60 */
+ 0xBB6C, 0xBB6D, 0xBB6E, 0xC3D7, 0xD9E1, 0xBB6F, 0xBB70, 0xBB71, /* 0x70 */
+ 0xBB72, 0xBB73, 0xBB74, 0xC0E0, 0xF4CC, 0xD7D1, 0xBB75, 0xBB76, /* 0x70 */
+ 0xBB77, 0xBB78, 0xBB79, 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB7E, /* 0x80 */
+ 0xBB80, 0xB7DB, 0xBB81, 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, /* 0x80 */
+ 0xBB87, 0xF4CE, 0xC1A3, 0xBB88, 0xBB89, 0xC6C9, 0xBB8A, 0xB4D6, /* 0x90 */
+ 0xD5B3, 0xBB8B, 0xBB8C, 0xBB8D, 0xF4D0, 0xF4CF, 0xF4D1, 0xCBDA, /* 0x90 */
+ 0xBB8E, 0xBB8F, 0xF4D2, 0xBB90, 0xD4C1, 0xD6E0, 0xBB91, 0xBB92, /* 0xA0 */
+ 0xBB93, 0xBB94, 0xB7E0, 0xBB95, 0xBB96, 0xBB97, 0xC1B8, 0xBB98, /* 0xA0 */
+ 0xBB99, 0xC1BB, 0xF4D3, 0xBEAC, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, /* 0xB0 */
+ 0xBB9E, 0xB4E2, 0xBB9F, 0xBBA0, 0xF4D4, 0xF4D5, 0xBEAB, 0xBC40, /* 0xB0 */
+ 0xBC41, 0xF4D6, 0xBC42, 0xBC43, 0xBC44, 0xF4DB, 0xBC45, 0xF4D7, /* 0xC0 */
+ 0xF4DA, 0xBC46, 0xBAFD, 0xBC47, 0xF4D8, 0xF4D9, 0xBC48, 0xBC49, /* 0xC0 */
+ 0xBC4A, 0xBC4B, 0xBC4C, 0xBC4D, 0xBC4E, 0xB8E2, 0xCCC7, 0xF4DC, /* 0xD0 */
+ 0xBC4F, 0xB2DA, 0xBC50, 0xBC51, 0xC3D3, 0xBC52, 0xBC53, 0xD4E3, /* 0xD0 */
+ 0xBFB7, 0xBC54, 0xBC55, 0xBC56, 0xBC57, 0xBC58, 0xBC59, 0xBC5A, /* 0xE0 */
+ 0xF4DD, 0xBC5B, 0xBC5C, 0xBC5D, 0xBC5E, 0xBC5F, 0xBC60, 0xC5B4, /* 0xE0 */
+ 0xBC61, 0xBC62, 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0xBC68, /* 0xF0 */
+ 0xF4E9, 0xBC69, 0xBC6A, 0xCFB5, 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBC6F, 0xBC70, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, /* 0x00 */
+ 0xBC77, 0xBC78, 0xCEC9, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, /* 0x00 */
+ 0xBC7E, 0xBC80, 0xBC81, 0xBC82, 0xBC83, 0xBC84, 0xBC85, 0xBC86, /* 0x10 */
+ 0xBC87, 0xBC88, 0xBC89, 0xBC8A, 0xBC8B, 0xBC8C, 0xBC8D, 0xBC8E, /* 0x10 */
+ 0xCBD8, 0xBC8F, 0xCBF7, 0xBC90, 0xBC91, 0xBC92, 0xBC93, 0xBDF4, /* 0x20 */
+ 0xBC94, 0xBC95, 0xBC96, 0xD7CF, 0xBC97, 0xBC98, 0xBC99, 0xC0DB, /* 0x20 */
+ 0xBC9A, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA0, 0xBD40, /* 0x30 */
+ 0xBD41, 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD48, /* 0x30 */
+ 0xBD49, 0xBD4A, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, 0xBD4F, 0xBD50, /* 0x40 */
+ 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, 0xBD56, 0xBD57, 0xBD58, /* 0x40 */
+ 0xBD59, 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F, 0xBD60, /* 0x50 */
+ 0xBD61, 0xBD62, 0xBD63, 0xBD64, 0xBD65, 0xBD66, 0xBD67, 0xBD68, /* 0x50 */
+ 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, /* 0x60 */
+ 0xBD71, 0xBD72, 0xBD73, 0xBD74, 0xBD75, 0xBD76, 0xD0F5, 0xBD77, /* 0x60 */
+ 0xBD78, 0xBD79, 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, 0xBD7E, 0xF4EA, /* 0x70 */
+ 0xBD80, 0xBD81, 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, 0xBD87, /* 0x70 */
+ 0xBD88, 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, /* 0x80 */
+ 0xBD90, 0xBD91, 0xBD92, 0xBD93, 0xBD94, 0xBD95, 0xBD96, 0xBD97, /* 0x80 */
+ 0xBD98, 0xBD99, 0xBD9A, 0xBD9B, 0xBD9C, 0xBD9D, 0xBD9E, 0xBD9F, /* 0x90 */
+ 0xBDA0, 0xBE40, 0xBE41, 0xBE42, 0xBE43, 0xBE44, 0xBE45, 0xBE46, /* 0x90 */
+ 0xBE47, 0xBE48, 0xBE49, 0xBE4A, 0xBE4B, 0xBE4C, 0xF4EB, 0xBE4D, /* 0xA0 */
+ 0xBE4E, 0xBE4F, 0xBE50, 0xBE51, 0xBE52, 0xBE53, 0xF4EC, 0xBE54, /* 0xA0 */
+ 0xBE55, 0xBE56, 0xBE57, 0xBE58, 0xBE59, 0xBE5A, 0xBE5B, 0xBE5C, /* 0xB0 */
+ 0xBE5D, 0xBE5E, 0xBE5F, 0xBE60, 0xBE61, 0xBE62, 0xBE63, 0xBE64, /* 0xB0 */
+ 0xBE65, 0xBE66, 0xBE67, 0xBE68, 0xBE69, 0xBE6A, 0xBE6B, 0xBE6C, /* 0xC0 */
+ 0xBE6D, 0xBE6E, 0xBE6F, 0xBE70, 0xBE71, 0xBE72, 0xBE73, 0xBE74, /* 0xC0 */
+ 0xBE75, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7B, 0xBE7C, /* 0xD0 */
+ 0xBE7D, 0xBE7E, 0xBE80, 0xBE81, 0xBE82, 0xBE83, 0xBE84, 0xBE85, /* 0xD0 */
+ 0xBE86, 0xBE87, 0xBE88, 0xBE89, 0xBE8A, 0xBE8B, 0xBE8C, 0xBE8D, /* 0xE0 */
+ 0xBE8E, 0xBE8F, 0xBE90, 0xBE91, 0xBE92, 0xBE93, 0xBE94, 0xBE95, /* 0xE0 */
+ 0xBE96, 0xBE97, 0xBE98, 0xBE99, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, /* 0xF0 */
+ 0xBE9E, 0xBE9F, 0xBEA0, 0xBF40, 0xBF41, 0xBF42, 0xBF43, 0xBF44 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBF45, 0xBF46, 0xBF47, 0xBF48, 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, /* 0x00 */
+ 0xBF4D, 0xBF4E, 0xBF4F, 0xBF50, 0xBF51, 0xBF52, 0xBF53, 0xBF54, /* 0x00 */
+ 0xBF55, 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, 0xBF5C, /* 0x10 */
+ 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, 0xBF63, 0xBF64, /* 0x10 */
+ 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, /* 0x20 */
+ 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, 0xBF72, 0xBF73, 0xBF74, /* 0x20 */
+ 0xBF75, 0xBF76, 0xBF77, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, /* 0x30 */
+ 0xBF7D, 0xBF7E, 0xBF80, 0xF7E3, 0xBF81, 0xBF82, 0xBF83, 0xBF84, /* 0x30 */
+ 0xBF85, 0xB7B1, 0xBF86, 0xBF87, 0xBF88, 0xBF89, 0xBF8A, 0xF4ED, /* 0x40 */
+ 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, 0xBF92, /* 0x40 */
+ 0xBF93, 0xBF94, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, /* 0x50 */
+ 0xBF9B, 0xBF9C, 0xBF9D, 0xBF9E, 0xBF9F, 0xBFA0, 0xC040, 0xC041, /* 0x50 */
+ 0xC042, 0xC043, 0xC044, 0xC045, 0xC046, 0xC047, 0xC048, 0xC049, /* 0x60 */
+ 0xC04A, 0xC04B, 0xC04C, 0xC04D, 0xC04E, 0xC04F, 0xC050, 0xC051, /* 0x60 */
+ 0xC052, 0xC053, 0xC054, 0xC055, 0xC056, 0xC057, 0xC058, 0xC059, /* 0x70 */
+ 0xC05A, 0xC05B, 0xC05C, 0xC05D, 0xC05E, 0xC05F, 0xC060, 0xC061, /* 0x70 */
+ 0xC062, 0xC063, 0xD7EB, 0xC064, 0xC065, 0xC066, 0xC067, 0xC068, /* 0x80 */
+ 0xC069, 0xC06A, 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, /* 0x80 */
+ 0xC071, 0xC072, 0xC073, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, /* 0x90 */
+ 0xC079, 0xC07A, 0xC07B, 0xF4EE, 0xC07C, 0xC07D, 0xC07E, 0xE6F9, /* 0x90 */
+ 0xBEC0, 0xE6FA, 0xBAEC, 0xE6FB, 0xCFCB, 0xE6FC, 0xD4BC, 0xBCB6, /* 0xA0 */
+ 0xE6FD, 0xE6FE, 0xBCCD, 0xC8D2, 0xCEB3, 0xE7A1, 0xC080, 0xB4BF, /* 0xA0 */
+ 0xE7A2, 0xC9B4, 0xB8D9, 0xC4C9, 0xC081, 0xD7DD, 0xC2DA, 0xB7D7, /* 0xB0 */
+ 0xD6BD, 0xCEC6, 0xB7C4, 0xC082, 0xC083, 0xC5A6, 0xE7A3, 0xCFDF, /* 0xB0 */
+ 0xE7A4, 0xE7A5, 0xE7A6, 0xC1B7, 0xD7E9, 0xC9F0, 0xCFB8, 0xD6AF, /* 0xC0 */
+ 0xD6D5, 0xE7A7, 0xB0ED, 0xE7A8, 0xE7A9, 0xC9DC, 0xD2EF, 0xBEAD, /* 0xC0 */
+ 0xE7AA, 0xB0F3, 0xC8DE, 0xBDE1, 0xE7AB, 0xC8C6, 0xC084, 0xE7AC, /* 0xD0 */
+ 0xBBE6, 0xB8F8, 0xD1A4, 0xE7AD, 0xC2E7, 0xBEF8, 0xBDCA, 0xCDB3, /* 0xD0 */
+ 0xE7AE, 0xE7AF, 0xBEEE, 0xD0E5, 0xC085, 0xCBE7, 0xCCD0, 0xBCCC, /* 0xE0 */
+ 0xE7B0, 0xBCA8, 0xD0F7, 0xE7B1, 0xC086, 0xD0F8, 0xE7B2, 0xE7B3, /* 0xE0 */
+ 0xB4C2, 0xE7B4, 0xE7B5, 0xC9FE, 0xCEAC, 0xC3E0, 0xE7B7, 0xB1C1, /* 0xF0 */
+ 0xB3F1, 0xC087, 0xE7B8, 0xE7B9, 0xD7DB, 0xD5C0, 0xE7BA, 0xC2CC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7BA, 0xE7BB, 0xE7BC, 0xE7BD, 0xBCEA, 0xC3E5, 0xC0C2, 0xE7BE, /* 0x00 */
+ 0xE7BF, 0xBCA9, 0xC088, 0xE7C0, 0xE7C1, 0xE7B6, 0xB6D0, 0xE7C2, /* 0x00 */
+ 0xC089, 0xE7C3, 0xE7C4, 0xBBBA, 0xB5DE, 0xC2C6, 0xB1E0, 0xE7C5, /* 0x10 */
+ 0xD4B5, 0xE7C6, 0xB8BF, 0xE7C8, 0xE7C7, 0xB7EC, 0xC08A, 0xE7C9, /* 0x10 */
+ 0xB2F8, 0xE7CA, 0xE7CB, 0xE7CC, 0xE7CD, 0xE7CE, 0xE7CF, 0xE7D0, /* 0x20 */
+ 0xD3A7, 0xCBF5, 0xE7D1, 0xE7D2, 0xE7D3, 0xE7D4, 0xC9C9, 0xE7D5, /* 0x20 */
+ 0xE7D6, 0xE7D7, 0xE7D8, 0xE7D9, 0xBDC9, 0xE7DA, 0xF3BE, 0xC08B, /* 0x30 */
+ 0xB8D7, 0xC08C, 0xC8B1, 0xC08D, 0xC08E, 0xC08F, 0xC090, 0xC091, /* 0x30 */
+ 0xC092, 0xC093, 0xF3BF, 0xC094, 0xF3C0, 0xF3C1, 0xC095, 0xC096, /* 0x40 */
+ 0xC097, 0xC098, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, 0xC09E, /* 0x40 */
+ 0xB9DE, 0xCDF8, 0xC09F, 0xC0A0, 0xD8E8, 0xBAB1, 0xC140, 0xC2DE, /* 0x50 */
+ 0xEEB7, 0xC141, 0xB7A3, 0xC142, 0xC143, 0xC144, 0xC145, 0xEEB9, /* 0x50 */
+ 0xC146, 0xEEB8, 0xB0D5, 0xC147, 0xC148, 0xC149, 0xC14A, 0xC14B, /* 0x60 */
+ 0xEEBB, 0xD5D6, 0xD7EF, 0xC14C, 0xC14D, 0xC14E, 0xD6C3, 0xC14F, /* 0x60 */
+ 0xC150, 0xEEBD, 0xCAF0, 0xC151, 0xEEBC, 0xC152, 0xC153, 0xC154, /* 0x70 */
+ 0xC155, 0xEEBE, 0xC156, 0xC157, 0xC158, 0xC159, 0xEEC0, 0xC15A, /* 0x70 */
+ 0xC15B, 0xEEBF, 0xC15C, 0xC15D, 0xC15E, 0xC15F, 0xC160, 0xC161, /* 0x80 */
+ 0xC162, 0xC163, 0xD1F2, 0xC164, 0xC7BC, 0xC165, 0xC3C0, 0xC166, /* 0x80 */
+ 0xC167, 0xC168, 0xC169, 0xC16A, 0xB8E1, 0xC16B, 0xC16C, 0xC16D, /* 0x90 */
+ 0xC16E, 0xC16F, 0xC1E7, 0xC170, 0xC171, 0xF4C6, 0xD0DF, 0xF4C7, /* 0x90 */
+ 0xC172, 0xCFDB, 0xC173, 0xC174, 0xC8BA, 0xC175, 0xC176, 0xF4C8, /* 0xA0 */
+ 0xC177, 0xC178, 0xC179, 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xF4C9, /* 0xA0 */
+ 0xF4CA, 0xC17E, 0xF4CB, 0xC180, 0xC181, 0xC182, 0xC183, 0xC184, /* 0xB0 */
+ 0xD9FA, 0xB8FE, 0xC185, 0xC186, 0xE5F1, 0xD3F0, 0xC187, 0xF4E0, /* 0xB0 */
+ 0xC188, 0xCECC, 0xC189, 0xC18A, 0xC18B, 0xB3E1, 0xC18C, 0xC18D, /* 0xC0 */
+ 0xC18E, 0xC18F, 0xF1B4, 0xC190, 0xD2EE, 0xC191, 0xF4E1, 0xC192, /* 0xC0 */
+ 0xC193, 0xC194, 0xC195, 0xC196, 0xCFE8, 0xF4E2, 0xC197, 0xC198, /* 0xD0 */
+ 0xC7CC, 0xC199, 0xC19A, 0xC19B, 0xC19C, 0xC19D, 0xC19E, 0xB5D4, /* 0xD0 */
+ 0xB4E4, 0xF4E4, 0xC19F, 0xC1A0, 0xC240, 0xF4E3, 0xF4E5, 0xC241, /* 0xE0 */
+ 0xC242, 0xF4E6, 0xC243, 0xC244, 0xC245, 0xC246, 0xF4E7, 0xC247, /* 0xE0 */
+ 0xBAB2, 0xB0BF, 0xC248, 0xF4E8, 0xC249, 0xC24A, 0xC24B, 0xC24C, /* 0xF0 */
+ 0xC24D, 0xC24E, 0xC24F, 0xB7AD, 0xD2ED, 0xC250, 0xC251, 0xC252 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2AB, 0xC0CF, 0xC253, 0xBFBC, 0xEBA3, 0xD5DF, 0xEAC8, 0xC254, /* 0x00 */
+ 0xC255, 0xC256, 0xC257, 0xF1F3, 0xB6F8, 0xCBA3, 0xC258, 0xC259, /* 0x00 */
+ 0xC4CD, 0xC25A, 0xF1E7, 0xC25B, 0xF1E8, 0xB8FB, 0xF1E9, 0xBAC4, /* 0x10 */
+ 0xD4C5, 0xB0D2, 0xC25C, 0xC25D, 0xF1EA, 0xC25E, 0xC25F, 0xC260, /* 0x10 */
+ 0xF1EB, 0xC261, 0xF1EC, 0xC262, 0xC263, 0xF1ED, 0xF1EE, 0xF1EF, /* 0x20 */
+ 0xF1F1, 0xF1F0, 0xC5D5, 0xC264, 0xC265, 0xC266, 0xC267, 0xC268, /* 0x20 */
+ 0xC269, 0xF1F2, 0xC26A, 0xB6FA, 0xC26B, 0xF1F4, 0xD2AE, 0xDEC7, /* 0x30 */
+ 0xCBCA, 0xC26C, 0xC26D, 0xB3DC, 0xC26E, 0xB5A2, 0xC26F, 0xB9A2, /* 0x30 */
+ 0xC270, 0xC271, 0xC4F4, 0xF1F5, 0xC272, 0xC273, 0xF1F6, 0xC274, /* 0x40 */
+ 0xC275, 0xC276, 0xC1C4, 0xC1FB, 0xD6B0, 0xF1F7, 0xC277, 0xC278, /* 0x40 */
+ 0xC279, 0xC27A, 0xF1F8, 0xC27B, 0xC1AA, 0xC27C, 0xC27D, 0xC27E, /* 0x50 */
+ 0xC6B8, 0xC280, 0xBEDB, 0xC281, 0xC282, 0xC283, 0xC284, 0xC285, /* 0x50 */
+ 0xC286, 0xC287, 0xC288, 0xC289, 0xC28A, 0xC28B, 0xC28C, 0xC28D, /* 0x60 */
+ 0xC28E, 0xF1F9, 0xB4CF, 0xC28F, 0xC290, 0xC291, 0xC292, 0xC293, /* 0x60 */
+ 0xC294, 0xF1FA, 0xC295, 0xC296, 0xC297, 0xC298, 0xC299, 0xC29A, /* 0x70 */
+ 0xC29B, 0xC29C, 0xC29D, 0xC29E, 0xC29F, 0xC2A0, 0xC340, 0xEDB2, /* 0x70 */
+ 0xEDB1, 0xC341, 0xC342, 0xCBE0, 0xD2DE, 0xC343, 0xCBC1, 0xD5D8, /* 0x80 */
+ 0xC344, 0xC8E2, 0xC345, 0xC0DF, 0xBCA1, 0xC346, 0xC347, 0xC348, /* 0x80 */
+ 0xC349, 0xC34A, 0xC34B, 0xEBC1, 0xC34C, 0xC34D, 0xD0A4, 0xC34E, /* 0x90 */
+ 0xD6E2, 0xC34F, 0xB6C7, 0xB8D8, 0xEBC0, 0xB8CE, 0xC350, 0xEBBF, /* 0x90 */
+ 0xB3A6, 0xB9C9, 0xD6AB, 0xC351, 0xB7F4, 0xB7CA, 0xC352, 0xC353, /* 0xA0 */
+ 0xC354, 0xBCE7, 0xB7BE, 0xEBC6, 0xC355, 0xEBC7, 0xB0B9, 0xBFCF, /* 0xA0 */
+ 0xC356, 0xEBC5, 0xD3FD, 0xC357, 0xEBC8, 0xC358, 0xC359, 0xEBC9, /* 0xB0 */
+ 0xC35A, 0xC35B, 0xB7CE, 0xC35C, 0xEBC2, 0xEBC4, 0xC9F6, 0xD6D7, /* 0xB0 */
+ 0xD5CD, 0xD0B2, 0xEBCF, 0xCEB8, 0xEBD0, 0xC35D, 0xB5A8, 0xC35E, /* 0xC0 */
+ 0xC35F, 0xC360, 0xC361, 0xC362, 0xB1B3, 0xEBD2, 0xCCA5, 0xC363, /* 0xC0 */
+ 0xC364, 0xC365, 0xC366, 0xC367, 0xC368, 0xC369, 0xC5D6, 0xEBD3, /* 0xD0 */
+ 0xC36A, 0xEBD1, 0xC5DF, 0xEBCE, 0xCAA4, 0xEBD5, 0xB0FB, 0xC36B, /* 0xD0 */
+ 0xC36C, 0xBAFA, 0xC36D, 0xC36E, 0xD8B7, 0xF1E3, 0xC36F, 0xEBCA, /* 0xE0 */
+ 0xEBCB, 0xEBCC, 0xEBCD, 0xEBD6, 0xE6C0, 0xEBD9, 0xC370, 0xBFE8, /* 0xE0 */
+ 0xD2C8, 0xEBD7, 0xEBDC, 0xB8EC, 0xEBD8, 0xC371, 0xBDBA, 0xC372, /* 0xF0 */
+ 0xD0D8, 0xC373, 0xB0B7, 0xC374, 0xEBDD, 0xC4DC, 0xC375, 0xC376 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC377, 0xC378, 0xD6AC, 0xC379, 0xC37A, 0xC37B, 0xB4E0, 0xC37C, /* 0x00 */
+ 0xC37D, 0xC2F6, 0xBCB9, 0xC37E, 0xC380, 0xEBDA, 0xEBDB, 0xD4E0, /* 0x00 */
+ 0xC6EA, 0xC4D4, 0xEBDF, 0xC5A7, 0xD9F5, 0xC381, 0xB2B1, 0xC382, /* 0x10 */
+ 0xEBE4, 0xC383, 0xBDC5, 0xC384, 0xC385, 0xC386, 0xEBE2, 0xC387, /* 0x10 */
+ 0xC388, 0xC389, 0xC38A, 0xC38B, 0xC38C, 0xC38D, 0xC38E, 0xC38F, /* 0x20 */
+ 0xC390, 0xC391, 0xC392, 0xC393, 0xEBE3, 0xC394, 0xC395, 0xB8AC, /* 0x20 */
+ 0xC396, 0xCDD1, 0xEBE5, 0xC397, 0xC398, 0xC399, 0xEBE1, 0xC39A, /* 0x30 */
+ 0xC1B3, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, 0xC6A2, 0xC3A0, /* 0x30 */
+ 0xC440, 0xC441, 0xC442, 0xC443, 0xC444, 0xC445, 0xCCF3, 0xC446, /* 0x40 */
+ 0xEBE6, 0xC447, 0xC0B0, 0xD2B8, 0xEBE7, 0xC448, 0xC449, 0xC44A, /* 0x40 */
+ 0xB8AF, 0xB8AD, 0xC44B, 0xEBE8, 0xC7BB, 0xCDF3, 0xC44C, 0xC44D, /* 0x50 */
+ 0xC44E, 0xEBEA, 0xEBEB, 0xC44F, 0xC450, 0xC451, 0xC452, 0xC453, /* 0x50 */
+ 0xEBED, 0xC454, 0xC455, 0xC456, 0xC457, 0xD0C8, 0xC458, 0xEBF2, /* 0x60 */
+ 0xC459, 0xEBEE, 0xC45A, 0xC45B, 0xC45C, 0xEBF1, 0xC8F9, 0xC45D, /* 0x60 */
+ 0xD1FC, 0xEBEC, 0xC45E, 0xC45F, 0xEBE9, 0xC460, 0xC461, 0xC462, /* 0x70 */
+ 0xC463, 0xB8B9, 0xCFD9, 0xC4E5, 0xEBEF, 0xEBF0, 0xCCDA, 0xCDC8, /* 0x70 */
+ 0xB0F2, 0xC464, 0xEBF6, 0xC465, 0xC466, 0xC467, 0xC468, 0xC469, /* 0x80 */
+ 0xEBF5, 0xC46A, 0xB2B2, 0xC46B, 0xC46C, 0xC46D, 0xC46E, 0xB8E0, /* 0x80 */
+ 0xC46F, 0xEBF7, 0xC470, 0xC471, 0xC472, 0xC473, 0xC474, 0xC475, /* 0x90 */
+ 0xB1EC, 0xC476, 0xC477, 0xCCC5, 0xC4A4, 0xCFA5, 0xC478, 0xC479, /* 0x90 */
+ 0xC47A, 0xC47B, 0xC47C, 0xEBF9, 0xC47D, 0xC47E, 0xECA2, 0xC480, /* 0xA0 */
+ 0xC5F2, 0xC481, 0xEBFA, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, /* 0xA0 */
+ 0xC487, 0xC488, 0xC489, 0xC9C5, 0xC48A, 0xC48B, 0xC48C, 0xC48D, /* 0xB0 */
+ 0xC48E, 0xC48F, 0xE2DF, 0xEBFE, 0xC490, 0xC491, 0xC492, 0xC493, /* 0xB0 */
+ 0xCDCE, 0xECA1, 0xB1DB, 0xD3B7, 0xC494, 0xC495, 0xD2DC, 0xC496, /* 0xC0 */
+ 0xC497, 0xC498, 0xEBFD, 0xC499, 0xEBFB, 0xC49A, 0xC49B, 0xC49C, /* 0xC0 */
+ 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC540, 0xC541, 0xC542, 0xC543, /* 0xD0 */
+ 0xC544, 0xC545, 0xC546, 0xC547, 0xC548, 0xC549, 0xC54A, 0xC54B, /* 0xD0 */
+ 0xC54C, 0xC54D, 0xC54E, 0xB3BC, 0xC54F, 0xC550, 0xC551, 0xEAB0, /* 0xE0 */
+ 0xC552, 0xC553, 0xD7D4, 0xC554, 0xF4AB, 0xB3F4, 0xC555, 0xC556, /* 0xE0 */
+ 0xC557, 0xC558, 0xC559, 0xD6C1, 0xD6C2, 0xC55A, 0xC55B, 0xC55C, /* 0xF0 */
+ 0xC55D, 0xC55E, 0xC55F, 0xD5E9, 0xBECA, 0xC560, 0xF4A7, 0xC561 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2A8, 0xF4A8, 0xF4A9, 0xC562, 0xF4AA, 0xBECB, 0xD3DF, 0xC563, /* 0x00 */
+ 0xC564, 0xC565, 0xC566, 0xC567, 0xC9E0, 0xC9E1, 0xC568, 0xC569, /* 0x00 */
+ 0xF3C2, 0xC56A, 0xCAE6, 0xC56B, 0xCCF2, 0xC56C, 0xC56D, 0xC56E, /* 0x10 */
+ 0xC56F, 0xC570, 0xC571, 0xE2B6, 0xCBB4, 0xC572, 0xCEE8, 0xD6DB, /* 0x10 */
+ 0xC573, 0xF4AD, 0xF4AE, 0xF4AF, 0xC574, 0xC575, 0xC576, 0xC577, /* 0x20 */
+ 0xF4B2, 0xC578, 0xBABD, 0xF4B3, 0xB0E3, 0xF4B0, 0xC579, 0xF4B1, /* 0x20 */
+ 0xBDA2, 0xB2D5, 0xC57A, 0xF4B6, 0xF4B7, 0xB6E6, 0xB2B0, 0xCFCF, /* 0x30 */
+ 0xF4B4, 0xB4AC, 0xC57B, 0xF4B5, 0xC57C, 0xC57D, 0xF4B8, 0xC57E, /* 0x30 */
+ 0xC580, 0xC581, 0xC582, 0xC583, 0xF4B9, 0xC584, 0xC585, 0xCDA7, /* 0x40 */
+ 0xC586, 0xF4BA, 0xC587, 0xF4BB, 0xC588, 0xC589, 0xC58A, 0xF4BC, /* 0x40 */
+ 0xC58B, 0xC58C, 0xC58D, 0xC58E, 0xC58F, 0xC590, 0xC591, 0xC592, /* 0x50 */
+ 0xCBD2, 0xC593, 0xF4BD, 0xC594, 0xC595, 0xC596, 0xC597, 0xF4BE, /* 0x50 */
+ 0xC598, 0xC599, 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC59E, 0xC59F, /* 0x60 */
+ 0xF4BF, 0xC5A0, 0xC640, 0xC641, 0xC642, 0xC643, 0xF4DE, 0xC1BC, /* 0x60 */
+ 0xBCE8, 0xC644, 0xC9AB, 0xD1DE, 0xE5F5, 0xC645, 0xC646, 0xC647, /* 0x70 */
+ 0xC648, 0xDCB3, 0xD2D5, 0xC649, 0xC64A, 0xDCB4, 0xB0AC, 0xDCB5, /* 0x70 */
+ 0xC64B, 0xC64C, 0xBDDA, 0xC64D, 0xDCB9, 0xC64E, 0xC64F, 0xC650, /* 0x80 */
+ 0xD8C2, 0xC651, 0xDCB7, 0xD3F3, 0xC652, 0xC9D6, 0xDCBA, 0xDCB6, /* 0x80 */
+ 0xC653, 0xDCBB, 0xC3A2, 0xC654, 0xC655, 0xC656, 0xC657, 0xDCBC, /* 0x90 */
+ 0xDCC5, 0xDCBD, 0xC658, 0xC659, 0xCEDF, 0xD6A5, 0xC65A, 0xDCCF, /* 0x90 */
+ 0xC65B, 0xDCCD, 0xC65C, 0xC65D, 0xDCD2, 0xBDE6, 0xC2AB, 0xC65E, /* 0xA0 */
+ 0xDCB8, 0xDCCB, 0xDCCE, 0xDCBE, 0xB7D2, 0xB0C5, 0xDCC7, 0xD0BE, /* 0xA0 */
+ 0xDCC1, 0xBBA8, 0xC65F, 0xB7BC, 0xDCCC, 0xC660, 0xC661, 0xDCC6, /* 0xB0 */
+ 0xDCBF, 0xC7DB, 0xC662, 0xC663, 0xC664, 0xD1BF, 0xDCC0, 0xC665, /* 0xB0 */
+ 0xC666, 0xDCCA, 0xC667, 0xC668, 0xDCD0, 0xC669, 0xC66A, 0xCEAD, /* 0xC0 */
+ 0xDCC2, 0xC66B, 0xDCC3, 0xDCC8, 0xDCC9, 0xB2D4, 0xDCD1, 0xCBD5, /* 0xC0 */
+ 0xC66C, 0xD4B7, 0xDCDB, 0xDCDF, 0xCCA6, 0xDCE6, 0xC66D, 0xC3E7, /* 0xD0 */
+ 0xDCDC, 0xC66E, 0xC66F, 0xBFC1, 0xDCD9, 0xC670, 0xB0FA, 0xB9B6, /* 0xD0 */
+ 0xDCE5, 0xDCD3, 0xC671, 0xDCC4, 0xDCD6, 0xC8F4, 0xBFE0, 0xC672, /* 0xE0 */
+ 0xC673, 0xC674, 0xC675, 0xC9BB, 0xC676, 0xC677, 0xC678, 0xB1BD, /* 0xE0 */
+ 0xC679, 0xD3A2, 0xC67A, 0xC67B, 0xDCDA, 0xC67C, 0xC67D, 0xDCD5, /* 0xF0 */
+ 0xC67E, 0xC6BB, 0xC680, 0xDCDE, 0xC681, 0xC682, 0xC683, 0xC684 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC685, 0xD7C2, 0xC3AF, 0xB7B6, 0xC7D1, 0xC3A9, 0xDCE2, 0xDCD8, /* 0x00 */
+ 0xDCEB, 0xDCD4, 0xC686, 0xC687, 0xDCDD, 0xC688, 0xBEA5, 0xDCD7, /* 0x00 */
+ 0xC689, 0xDCE0, 0xC68A, 0xC68B, 0xDCE3, 0xDCE4, 0xC68C, 0xDCF8, /* 0x10 */
+ 0xC68D, 0xC68E, 0xDCE1, 0xDDA2, 0xDCE7, 0xC68F, 0xC690, 0xC691, /* 0x10 */
+ 0xC692, 0xC693, 0xC694, 0xC695, 0xC696, 0xC697, 0xC698, 0xBCEB, /* 0x20 */
+ 0xB4C4, 0xC699, 0xC69A, 0xC3A3, 0xB2E7, 0xDCFA, 0xC69B, 0xDCF2, /* 0x20 */
+ 0xC69C, 0xDCEF, 0xC69D, 0xDCFC, 0xDCEE, 0xD2F0, 0xB2E8, 0xC69E, /* 0x30 */
+ 0xC8D7, 0xC8E3, 0xDCFB, 0xC69F, 0xDCED, 0xC6A0, 0xC740, 0xC741, /* 0x30 */
+ 0xDCF7, 0xC742, 0xC743, 0xDCF5, 0xC744, 0xC745, 0xBEA3, 0xDCF4, /* 0x40 */
+ 0xC746, 0xB2DD, 0xC747, 0xC748, 0xC749, 0xC74A, 0xC74B, 0xDCF3, /* 0x40 */
+ 0xBCF6, 0xDCE8, 0xBBC4, 0xC74C, 0xC0F3, 0xC74D, 0xC74E, 0xC74F, /* 0x50 */
+ 0xC750, 0xC751, 0xBCD4, 0xDCE9, 0xDCEA, 0xC752, 0xDCF1, 0xDCF6, /* 0x50 */
+ 0xDCF9, 0xB5B4, 0xC753, 0xC8D9, 0xBBE7, 0xDCFE, 0xDCFD, 0xD3AB, /* 0x60 */
+ 0xDDA1, 0xDDA3, 0xDDA5, 0xD2F1, 0xDDA4, 0xDDA6, 0xDDA7, 0xD2A9, /* 0x60 */
+ 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, 0xC759, 0xC75A, 0xBAC9, /* 0x70 */
+ 0xDDA9, 0xC75B, 0xC75C, 0xDDB6, 0xDDB1, 0xDDB4, 0xC75D, 0xC75E, /* 0x70 */
+ 0xC75F, 0xC760, 0xC761, 0xC762, 0xC763, 0xDDB0, 0xC6CE, 0xC764, /* 0x80 */
+ 0xC765, 0xC0F2, 0xC766, 0xC767, 0xC768, 0xC769, 0xC9AF, 0xC76A, /* 0x80 */
+ 0xC76B, 0xC76C, 0xDCEC, 0xDDAE, 0xC76D, 0xC76E, 0xC76F, 0xC770, /* 0x90 */
+ 0xDDB7, 0xC771, 0xC772, 0xDCF0, 0xDDAF, 0xC773, 0xDDB8, 0xC774, /* 0x90 */
+ 0xDDAC, 0xC775, 0xC776, 0xC777, 0xC778, 0xC779, 0xC77A, 0xC77B, /* 0xA0 */
+ 0xDDB9, 0xDDB3, 0xDDAD, 0xC4AA, 0xC77C, 0xC77D, 0xC77E, 0xC780, /* 0xA0 */
+ 0xDDA8, 0xC0B3, 0xC1AB, 0xDDAA, 0xDDAB, 0xC781, 0xDDB2, 0xBBF1, /* 0xB0 */
+ 0xDDB5, 0xD3A8, 0xDDBA, 0xC782, 0xDDBB, 0xC3A7, 0xC783, 0xC784, /* 0xB0 */
+ 0xDDD2, 0xDDBC, 0xC785, 0xC786, 0xC787, 0xDDD1, 0xC788, 0xB9BD, /* 0xC0 */
+ 0xC789, 0xC78A, 0xBED5, 0xC78B, 0xBEFA, 0xC78C, 0xC78D, 0xBACA, /* 0xC0 */
+ 0xC78E, 0xC78F, 0xC790, 0xC791, 0xDDCA, 0xC792, 0xDDC5, 0xC793, /* 0xD0 */
+ 0xDDBF, 0xC794, 0xC795, 0xC796, 0xB2CB, 0xDDC3, 0xC797, 0xDDCB, /* 0xD0 */
+ 0xB2A4, 0xDDD5, 0xC798, 0xC799, 0xC79A, 0xDDBE, 0xC79B, 0xC79C, /* 0xE0 */
+ 0xC79D, 0xC6D0, 0xDDD0, 0xC79E, 0xC79F, 0xC7A0, 0xC840, 0xC841, /* 0xE0 */
+ 0xDDD4, 0xC1E2, 0xB7C6, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846, /* 0xF0 */
+ 0xDDCE, 0xDDCF, 0xC847, 0xC848, 0xC849, 0xDDC4, 0xC84A, 0xC84B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC84C, 0xDDBD, 0xC84D, 0xDDCD, 0xCCD1, 0xC84E, 0xDDC9, 0xC84F, /* 0x00 */
+ 0xC850, 0xC851, 0xC852, 0xDDC2, 0xC3C8, 0xC6BC, 0xCEAE, 0xDDCC, /* 0x00 */
+ 0xC853, 0xDDC8, 0xC854, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, /* 0x10 */
+ 0xDDC1, 0xC85A, 0xC85B, 0xC85C, 0xDDC6, 0xC2DC, 0xC85D, 0xC85E, /* 0x10 */
+ 0xC85F, 0xC860, 0xC861, 0xC862, 0xD3A9, 0xD3AA, 0xDDD3, 0xCFF4, /* 0x20 */
+ 0xC8F8, 0xC863, 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, /* 0x20 */
+ 0xC86A, 0xDDE6, 0xC86B, 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0xC870, /* 0x30 */
+ 0xDDC7, 0xC871, 0xC872, 0xC873, 0xDDE0, 0xC2E4, 0xC874, 0xC875, /* 0x30 */
+ 0xC876, 0xC877, 0xC878, 0xC879, 0xC87A, 0xC87B, 0xDDE1, 0xC87C, /* 0x40 */
+ 0xC87D, 0xC87E, 0xC880, 0xC881, 0xC882, 0xC883, 0xC884, 0xC885, /* 0x40 */
+ 0xC886, 0xDDD7, 0xC887, 0xC888, 0xC889, 0xC88A, 0xC88B, 0xD6F8, /* 0x50 */
+ 0xC88C, 0xDDD9, 0xDDD8, 0xB8F0, 0xDDD6, 0xC88D, 0xC88E, 0xC88F, /* 0x50 */
+ 0xC890, 0xC6CF, 0xC891, 0xB6AD, 0xC892, 0xC893, 0xC894, 0xC895, /* 0x60 */
+ 0xC896, 0xDDE2, 0xC897, 0xBAF9, 0xD4E1, 0xDDE7, 0xC898, 0xC899, /* 0x60 */
+ 0xC89A, 0xB4D0, 0xC89B, 0xDDDA, 0xC89C, 0xBFFB, 0xDDE3, 0xC89D, /* 0x70 */
+ 0xDDDF, 0xC89E, 0xDDDD, 0xC89F, 0xC8A0, 0xC940, 0xC941, 0xC942, /* 0x70 */
+ 0xC943, 0xC944, 0xB5D9, 0xC945, 0xC946, 0xC947, 0xC948, 0xDDDB, /* 0x80 */
+ 0xDDDC, 0xDDDE, 0xC949, 0xBDAF, 0xDDE4, 0xC94A, 0xDDE5, 0xC94B, /* 0x80 */
+ 0xC94C, 0xC94D, 0xC94E, 0xC94F, 0xC950, 0xC951, 0xC952, 0xDDF5, /* 0x90 */
+ 0xC953, 0xC3C9, 0xC954, 0xC955, 0xCBE2, 0xC956, 0xC957, 0xC958, /* 0x90 */
+ 0xC959, 0xDDF2, 0xC95A, 0xC95B, 0xC95C, 0xC95D, 0xC95E, 0xC95F, /* 0xA0 */
+ 0xC960, 0xC961, 0xC962, 0xC963, 0xC964, 0xC965, 0xC966, 0xD8E1, /* 0xA0 */
+ 0xC967, 0xC968, 0xC6D1, 0xC969, 0xDDF4, 0xC96A, 0xC96B, 0xC96C, /* 0xB0 */
+ 0xD5F4, 0xDDF3, 0xDDF0, 0xC96D, 0xC96E, 0xDDEC, 0xC96F, 0xDDEF, /* 0xB0 */
+ 0xC970, 0xDDE8, 0xC971, 0xC972, 0xD0EE, 0xC973, 0xC974, 0xC975, /* 0xC0 */
+ 0xC976, 0xC8D8, 0xDDEE, 0xC977, 0xC978, 0xDDE9, 0xC979, 0xC97A, /* 0xC0 */
+ 0xDDEA, 0xCBF2, 0xC97B, 0xDDED, 0xC97C, 0xC97D, 0xB1CD, 0xC97E, /* 0xD0 */
+ 0xC980, 0xC981, 0xC982, 0xC983, 0xC984, 0xC0B6, 0xC985, 0xBCBB, /* 0xD0 */
+ 0xDDF1, 0xC986, 0xC987, 0xDDF7, 0xC988, 0xDDF6, 0xDDEB, 0xC989, /* 0xE0 */
+ 0xC98A, 0xC98B, 0xC98C, 0xC98D, 0xC5EE, 0xC98E, 0xC98F, 0xC990, /* 0xE0 */
+ 0xDDFB, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995, 0xC996, 0xC997, /* 0xF0 */
+ 0xC998, 0xC999, 0xC99A, 0xC99B, 0xDEA4, 0xC99C, 0xC99D, 0xDEA3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC99E, 0xC99F, 0xC9A0, 0xCA40, 0xCA41, 0xCA42, 0xCA43, 0xCA44, /* 0x00 */
+ 0xCA45, 0xCA46, 0xCA47, 0xCA48, 0xDDF8, 0xCA49, 0xCA4A, 0xCA4B, /* 0x00 */
+ 0xCA4C, 0xC3EF, 0xCA4D, 0xC2FB, 0xCA4E, 0xCA4F, 0xCA50, 0xD5E1, /* 0x10 */
+ 0xCA51, 0xCA52, 0xCEB5, 0xCA53, 0xCA54, 0xCA55, 0xCA56, 0xDDFD, /* 0x10 */
+ 0xCA57, 0xB2CC, 0xCA58, 0xCA59, 0xCA5A, 0xCA5B, 0xCA5C, 0xCA5D, /* 0x20 */
+ 0xCA5E, 0xCA5F, 0xCA60, 0xC4E8, 0xCADF, 0xCA61, 0xCA62, 0xCA63, /* 0x20 */
+ 0xCA64, 0xCA65, 0xCA66, 0xCA67, 0xCA68, 0xCA69, 0xCA6A, 0xC7BE, /* 0x30 */
+ 0xDDFA, 0xDDFC, 0xDDFE, 0xDEA2, 0xB0AA, 0xB1CE, 0xCA6B, 0xCA6C, /* 0x30 */
+ 0xCA6D, 0xCA6E, 0xCA6F, 0xDEAC, 0xCA70, 0xCA71, 0xCA72, 0xCA73, /* 0x40 */
+ 0xDEA6, 0xBDB6, 0xC8EF, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, /* 0x40 */
+ 0xCA79, 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7D, 0xCA7E, 0xDEA1, 0xCA80, /* 0x50 */
+ 0xCA81, 0xDEA5, 0xCA82, 0xCA83, 0xCA84, 0xCA85, 0xDEA9, 0xCA86, /* 0x50 */
+ 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xDEA8, 0xCA8B, 0xCA8C, 0xCA8D, /* 0x60 */
+ 0xDEA7, 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, 0xCA93, 0xCA94, /* 0x60 */
+ 0xCA95, 0xCA96, 0xDEAD, 0xCA97, 0xD4CC, 0xCA98, 0xCA99, 0xCA9A, /* 0x70 */
+ 0xCA9B, 0xDEB3, 0xDEAA, 0xDEAE, 0xCA9C, 0xCA9D, 0xC0D9, 0xCA9E, /* 0x70 */
+ 0xCA9F, 0xCAA0, 0xCB40, 0xCB41, 0xB1A1, 0xDEB6, 0xCB42, 0xDEB1, /* 0x80 */
+ 0xCB43, 0xCB44, 0xCB45, 0xCB46, 0xCB47, 0xCB48, 0xCB49, 0xDEB2, /* 0x80 */
+ 0xCB4A, 0xCB4B, 0xCB4C, 0xCB4D, 0xCB4E, 0xCB4F, 0xCB50, 0xCB51, /* 0x90 */
+ 0xCB52, 0xCB53, 0xCB54, 0xD1A6, 0xDEB5, 0xCB55, 0xCB56, 0xCB57, /* 0x90 */
+ 0xCB58, 0xCB59, 0xCB5A, 0xCB5B, 0xDEAF, 0xCB5C, 0xCB5D, 0xCB5E, /* 0xA0 */
+ 0xDEB0, 0xCB5F, 0xD0BD, 0xCB60, 0xCB61, 0xCB62, 0xDEB4, 0xCAED, /* 0xA0 */
+ 0xDEB9, 0xCB63, 0xCB64, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xDEB8, /* 0xB0 */
+ 0xCB69, 0xDEB7, 0xCB6A, 0xCB6B, 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, /* 0xB0 */
+ 0xCB70, 0xDEBB, 0xCB71, 0xCB72, 0xCB73, 0xCB74, 0xCB75, 0xCB76, /* 0xC0 */
+ 0xCB77, 0xBDE5, 0xCB78, 0xCB79, 0xCB7A, 0xCB7B, 0xCB7C, 0xB2D8, /* 0xC0 */
+ 0xC3EA, 0xCB7D, 0xCB7E, 0xDEBA, 0xCB80, 0xC5BA, 0xCB81, 0xCB82, /* 0xD0 */
+ 0xCB83, 0xCB84, 0xCB85, 0xCB86, 0xDEBC, 0xCB87, 0xCB88, 0xCB89, /* 0xD0 */
+ 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCCD9, 0xCB8E, 0xCB8F, 0xCB90, /* 0xE0 */
+ 0xCB91, 0xB7AA, 0xCB92, 0xCB93, 0xCB94, 0xCB95, 0xCB96, 0xCB97, /* 0xE0 */
+ 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9C, 0xCB9D, 0xCB9E, 0xCB9F, /* 0xF0 */
+ 0xCBA0, 0xCC40, 0xCC41, 0xD4E5, 0xCC42, 0xCC43, 0xCC44, 0xDEBD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCC45, 0xCC46, 0xCC47, 0xCC48, 0xCC49, 0xDEBF, 0xCC4A, 0xCC4B, /* 0x00 */
+ 0xCC4C, 0xCC4D, 0xCC4E, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, 0xCC53, /* 0x00 */
+ 0xCC54, 0xC4A2, 0xCC55, 0xCC56, 0xCC57, 0xCC58, 0xDEC1, 0xCC59, /* 0x10 */
+ 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, 0xCC60, 0xCC61, /* 0x10 */
+ 0xCC62, 0xCC63, 0xCC64, 0xCC65, 0xCC66, 0xCC67, 0xCC68, 0xDEBE, /* 0x20 */
+ 0xCC69, 0xDEC0, 0xCC6A, 0xCC6B, 0xCC6C, 0xCC6D, 0xCC6E, 0xCC6F, /* 0x20 */
+ 0xCC70, 0xCC71, 0xCC72, 0xCC73, 0xCC74, 0xCC75, 0xCC76, 0xCC77, /* 0x30 */
+ 0xD5BA, 0xCC78, 0xCC79, 0xCC7A, 0xDEC2, 0xCC7B, 0xCC7C, 0xCC7D, /* 0x30 */
+ 0xCC7E, 0xCC80, 0xCC81, 0xCC82, 0xCC83, 0xCC84, 0xCC85, 0xCC86, /* 0x40 */
+ 0xCC87, 0xCC88, 0xCC89, 0xCC8A, 0xCC8B, 0xF2AE, 0xBBA2, 0xC2B2, /* 0x40 */
+ 0xC5B0, 0xC2C7, 0xCC8C, 0xCC8D, 0xF2AF, 0xCC8E, 0xCC8F, 0xCC90, /* 0x50 */
+ 0xCC91, 0xCC92, 0xD0E9, 0xCC93, 0xCC94, 0xCC95, 0xD3DD, 0xCC96, /* 0x50 */
+ 0xCC97, 0xCC98, 0xEBBD, 0xCC99, 0xCC9A, 0xCC9B, 0xCC9C, 0xCC9D, /* 0x60 */
+ 0xCC9E, 0xCC9F, 0xCCA0, 0xB3E6, 0xF2B0, 0xCD40, 0xF2B1, 0xCD41, /* 0x60 */
+ 0xCD42, 0xCAAD, 0xCD43, 0xCD44, 0xCD45, 0xCD46, 0xCD47, 0xCD48, /* 0x70 */
+ 0xCD49, 0xBAE7, 0xF2B3, 0xF2B5, 0xF2B4, 0xCBE4, 0xCFBA, 0xF2B2, /* 0x70 */
+ 0xCAB4, 0xD2CF, 0xC2EC, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, /* 0x80 */
+ 0xCD4F, 0xCD50, 0xCEC3, 0xF2B8, 0xB0F6, 0xF2B7, 0xCD51, 0xCD52, /* 0x80 */
+ 0xCD53, 0xCD54, 0xCD55, 0xF2BE, 0xCD56, 0xB2CF, 0xCD57, 0xCD58, /* 0x90 */
+ 0xCD59, 0xCD5A, 0xCD5B, 0xCD5C, 0xD1C1, 0xF2BA, 0xCD5D, 0xCD5E, /* 0x90 */
+ 0xCD5F, 0xCD60, 0xCD61, 0xF2BC, 0xD4E9, 0xCD62, 0xCD63, 0xF2BB, /* 0xA0 */
+ 0xF2B6, 0xF2BF, 0xF2BD, 0xCD64, 0xF2B9, 0xCD65, 0xCD66, 0xF2C7, /* 0xA0 */
+ 0xF2C4, 0xF2C6, 0xCD67, 0xCD68, 0xF2CA, 0xF2C2, 0xF2C0, 0xCD69, /* 0xB0 */
+ 0xCD6A, 0xCD6B, 0xF2C5, 0xCD6C, 0xCD6D, 0xCD6E, 0xCD6F, 0xCD70, /* 0xB0 */
+ 0xD6FB, 0xCD71, 0xCD72, 0xCD73, 0xF2C1, 0xCD74, 0xC7F9, 0xC9DF, /* 0xC0 */
+ 0xCD75, 0xF2C8, 0xB9C6, 0xB5B0, 0xCD76, 0xCD77, 0xF2C3, 0xF2C9, /* 0xC0 */
+ 0xF2D0, 0xF2D6, 0xCD78, 0xCD79, 0xBBD7, 0xCD7A, 0xCD7B, 0xCD7C, /* 0xD0 */
+ 0xF2D5, 0xCDDC, 0xCD7D, 0xD6EB, 0xCD7E, 0xCD80, 0xF2D2, 0xF2D4, /* 0xD0 */
+ 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xB8F2, 0xCD85, 0xCD86, 0xCD87, /* 0xE0 */
+ 0xCD88, 0xF2CB, 0xCD89, 0xCD8A, 0xCD8B, 0xF2CE, 0xC2F9, 0xCD8C, /* 0xE0 */
+ 0xD5DD, 0xF2CC, 0xF2CD, 0xF2CF, 0xF2D3, 0xCD8D, 0xCD8E, 0xCD8F, /* 0xF0 */
+ 0xF2D9, 0xD3BC, 0xCD90, 0xCD91, 0xCD92, 0xCD93, 0xB6EA, 0xCD94 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCAF1, 0xCD95, 0xB7E4, 0xF2D7, 0xCD96, 0xCD97, 0xCD98, 0xF2D8, /* 0x00 */
+ 0xF2DA, 0xF2DD, 0xF2DB, 0xCD99, 0xCD9A, 0xF2DC, 0xCD9B, 0xCD9C, /* 0x00 */
+ 0xCD9D, 0xCD9E, 0xD1D1, 0xF2D1, 0xCD9F, 0xCDC9, 0xCDA0, 0xCECF, /* 0x10 */
+ 0xD6A9, 0xCE40, 0xF2E3, 0xCE41, 0xC3DB, 0xCE42, 0xF2E0, 0xCE43, /* 0x10 */
+ 0xCE44, 0xC0AF, 0xF2EC, 0xF2DE, 0xCE45, 0xF2E1, 0xCE46, 0xCE47, /* 0x20 */
+ 0xCE48, 0xF2E8, 0xCE49, 0xCE4A, 0xCE4B, 0xCE4C, 0xF2E2, 0xCE4D, /* 0x20 */
+ 0xCE4E, 0xF2E7, 0xCE4F, 0xCE50, 0xF2E6, 0xCE51, 0xCE52, 0xF2E9, /* 0x30 */
+ 0xCE53, 0xCE54, 0xCE55, 0xF2DF, 0xCE56, 0xCE57, 0xF2E4, 0xF2EA, /* 0x30 */
+ 0xCE58, 0xCE59, 0xCE5A, 0xCE5B, 0xCE5C, 0xCE5D, 0xCE5E, 0xD3AC, /* 0x40 */
+ 0xF2E5, 0xB2F5, 0xCE5F, 0xCE60, 0xF2F2, 0xCE61, 0xD0AB, 0xCE62, /* 0x40 */
+ 0xCE63, 0xCE64, 0xCE65, 0xF2F5, 0xCE66, 0xCE67, 0xCE68, 0xBBC8, /* 0x50 */
+ 0xCE69, 0xF2F9, 0xCE6A, 0xCE6B, 0xCE6C, 0xCE6D, 0xCE6E, 0xCE6F, /* 0x50 */
+ 0xF2F0, 0xCE70, 0xCE71, 0xF2F6, 0xF2F8, 0xF2FA, 0xCE72, 0xCE73, /* 0x60 */
+ 0xCE74, 0xCE75, 0xCE76, 0xCE77, 0xCE78, 0xCE79, 0xF2F3, 0xCE7A, /* 0x60 */
+ 0xF2F1, 0xCE7B, 0xCE7C, 0xCE7D, 0xBAFB, 0xCE7E, 0xB5FB, 0xCE80, /* 0x70 */
+ 0xCE81, 0xCE82, 0xCE83, 0xF2EF, 0xF2F7, 0xF2ED, 0xF2EE, 0xCE84, /* 0x70 */
+ 0xCE85, 0xCE86, 0xF2EB, 0xF3A6, 0xCE87, 0xF3A3, 0xCE88, 0xCE89, /* 0x80 */
+ 0xF3A2, 0xCE8A, 0xCE8B, 0xF2F4, 0xCE8C, 0xC8DA, 0xCE8D, 0xCE8E, /* 0x80 */
+ 0xCE8F, 0xCE90, 0xCE91, 0xF2FB, 0xCE92, 0xCE93, 0xCE94, 0xF3A5, /* 0x90 */
+ 0xCE95, 0xCE96, 0xCE97, 0xCE98, 0xCE99, 0xCE9A, 0xCE9B, 0xC3F8, /* 0x90 */
+ 0xCE9C, 0xCE9D, 0xCE9E, 0xCE9F, 0xCEA0, 0xCF40, 0xCF41, 0xCF42, /* 0xA0 */
+ 0xF2FD, 0xCF43, 0xCF44, 0xF3A7, 0xF3A9, 0xF3A4, 0xCF45, 0xF2FC, /* 0xA0 */
+ 0xCF46, 0xCF47, 0xCF48, 0xF3AB, 0xCF49, 0xF3AA, 0xCF4A, 0xCF4B, /* 0xB0 */
+ 0xCF4C, 0xCF4D, 0xC2DD, 0xCF4E, 0xCF4F, 0xF3AE, 0xCF50, 0xCF51, /* 0xB0 */
+ 0xF3B0, 0xCF52, 0xCF53, 0xCF54, 0xCF55, 0xCF56, 0xF3A1, 0xCF57, /* 0xC0 */
+ 0xCF58, 0xCF59, 0xF3B1, 0xF3AC, 0xCF5A, 0xCF5B, 0xCF5C, 0xCF5D, /* 0xC0 */
+ 0xCF5E, 0xF3AF, 0xF2FE, 0xF3AD, 0xCF5F, 0xCF60, 0xCF61, 0xCF62, /* 0xD0 */
+ 0xCF63, 0xCF64, 0xCF65, 0xF3B2, 0xCF66, 0xCF67, 0xCF68, 0xCF69, /* 0xD0 */
+ 0xF3B4, 0xCF6A, 0xCF6B, 0xCF6C, 0xCF6D, 0xF3A8, 0xCF6E, 0xCF6F, /* 0xE0 */
+ 0xCF70, 0xCF71, 0xF3B3, 0xCF72, 0xCF73, 0xCF74, 0xF3B5, 0xCF75, /* 0xE0 */
+ 0xCF76, 0xCF77, 0xCF78, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, /* 0xF0 */
+ 0xCF7E, 0xD0B7, 0xCF80, 0xCF81, 0xCF82, 0xCF83, 0xF3B8, 0xCF84 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCF85, 0xCF86, 0xCF87, 0xD9F9, 0xCF88, 0xCF89, 0xCF8A, 0xCF8B, /* 0x00 */
+ 0xCF8C, 0xCF8D, 0xF3B9, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92, /* 0x00 */
+ 0xCF93, 0xCF94, 0xCF95, 0xF3B7, 0xCF96, 0xC8E4, 0xF3B6, 0xCF97, /* 0x10 */
+ 0xCF98, 0xCF99, 0xCF9A, 0xF3BA, 0xCF9B, 0xCF9C, 0xCF9D, 0xCF9E, /* 0x10 */
+ 0xCF9F, 0xF3BB, 0xB4C0, 0xCFA0, 0xD040, 0xD041, 0xD042, 0xD043, /* 0x20 */
+ 0xD044, 0xD045, 0xD046, 0xD047, 0xD048, 0xD049, 0xD04A, 0xD04B, /* 0x20 */
+ 0xD04C, 0xD04D, 0xEEC3, 0xD04E, 0xD04F, 0xD050, 0xD051, 0xD052, /* 0x30 */
+ 0xD053, 0xF3BC, 0xD054, 0xD055, 0xF3BD, 0xD056, 0xD057, 0xD058, /* 0x30 */
+ 0xD1AA, 0xD059, 0xD05A, 0xD05B, 0xF4AC, 0xD0C6, 0xD05C, 0xD05D, /* 0x40 */
+ 0xD05E, 0xD05F, 0xD060, 0xD061, 0xD0D0, 0xD1DC, 0xD062, 0xD063, /* 0x40 */
+ 0xD064, 0xD065, 0xD066, 0xD067, 0xCFCE, 0xD068, 0xD069, 0xBDD6, /* 0x50 */
+ 0xD06A, 0xD1C3, 0xD06B, 0xD06C, 0xD06D, 0xD06E, 0xD06F, 0xD070, /* 0x50 */
+ 0xD071, 0xBAE2, 0xE1E9, 0xD2C2, 0xF1C2, 0xB2B9, 0xD072, 0xD073, /* 0x60 */
+ 0xB1ED, 0xF1C3, 0xD074, 0xC9C0, 0xB3C4, 0xD075, 0xD9F2, 0xD076, /* 0x60 */
+ 0xCBA5, 0xD077, 0xF1C4, 0xD078, 0xD079, 0xD07A, 0xD07B, 0xD6D4, /* 0x70 */
+ 0xD07C, 0xD07D, 0xD07E, 0xD080, 0xD081, 0xF1C5, 0xF4C0, 0xF1C6, /* 0x70 */
+ 0xD082, 0xD4AC, 0xF1C7, 0xD083, 0xB0C0, 0xF4C1, 0xD084, 0xD085, /* 0x80 */
+ 0xF4C2, 0xD086, 0xD087, 0xB4FC, 0xD088, 0xC5DB, 0xD089, 0xD08A, /* 0x80 */
+ 0xD08B, 0xD08C, 0xCCBB, 0xD08D, 0xD08E, 0xD08F, 0xD0E4, 0xD090, /* 0x90 */
+ 0xD091, 0xD092, 0xD093, 0xD094, 0xCDE0, 0xD095, 0xD096, 0xD097, /* 0x90 */
+ 0xD098, 0xD099, 0xF1C8, 0xD09A, 0xD9F3, 0xD09B, 0xD09C, 0xD09D, /* 0xA0 */
+ 0xD09E, 0xD09F, 0xD0A0, 0xB1BB, 0xD140, 0xCFAE, 0xD141, 0xD142, /* 0xA0 */
+ 0xD143, 0xB8A4, 0xD144, 0xD145, 0xD146, 0xD147, 0xD148, 0xF1CA, /* 0xB0 */
+ 0xD149, 0xD14A, 0xD14B, 0xD14C, 0xF1CB, 0xD14D, 0xD14E, 0xD14F, /* 0xB0 */
+ 0xD150, 0xB2C3, 0xC1D1, 0xD151, 0xD152, 0xD7B0, 0xF1C9, 0xD153, /* 0xC0 */
+ 0xD154, 0xF1CC, 0xD155, 0xD156, 0xD157, 0xD158, 0xF1CE, 0xD159, /* 0xC0 */
+ 0xD15A, 0xD15B, 0xD9F6, 0xD15C, 0xD2E1, 0xD4A3, 0xD15D, 0xD15E, /* 0xD0 */
+ 0xF4C3, 0xC8B9, 0xD15F, 0xD160, 0xD161, 0xD162, 0xD163, 0xF4C4, /* 0xD0 */
+ 0xD164, 0xD165, 0xF1CD, 0xF1CF, 0xBFE3, 0xF1D0, 0xD166, 0xD167, /* 0xE0 */
+ 0xF1D4, 0xD168, 0xD169, 0xD16A, 0xD16B, 0xD16C, 0xD16D, 0xD16E, /* 0xE0 */
+ 0xF1D6, 0xF1D1, 0xD16F, 0xC9D1, 0xC5E1, 0xD170, 0xD171, 0xD172, /* 0xF0 */
+ 0xC2E3, 0xB9FC, 0xD173, 0xD174, 0xF1D3, 0xD175, 0xF1D5, 0xD176 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD177, 0xD178, 0xB9D3, 0xD179, 0xD17A, 0xD17B, 0xD17C, 0xD17D, /* 0x00 */
+ 0xD17E, 0xD180, 0xF1DB, 0xD181, 0xD182, 0xD183, 0xD184, 0xD185, /* 0x00 */
+ 0xBAD6, 0xD186, 0xB0FD, 0xF1D9, 0xD187, 0xD188, 0xD189, 0xD18A, /* 0x10 */
+ 0xD18B, 0xF1D8, 0xF1D2, 0xF1DA, 0xD18C, 0xD18D, 0xD18E, 0xD18F, /* 0x10 */
+ 0xD190, 0xF1D7, 0xD191, 0xD192, 0xD193, 0xC8EC, 0xD194, 0xD195, /* 0x20 */
+ 0xD196, 0xD197, 0xCDCA, 0xF1DD, 0xD198, 0xD199, 0xD19A, 0xD19B, /* 0x20 */
+ 0xE5BD, 0xD19C, 0xD19D, 0xD19E, 0xF1DC, 0xD19F, 0xF1DE, 0xD1A0, /* 0x30 */
+ 0xD240, 0xD241, 0xD242, 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, /* 0x30 */
+ 0xD248, 0xF1DF, 0xD249, 0xD24A, 0xCFE5, 0xD24B, 0xD24C, 0xD24D, /* 0x40 */
+ 0xD24E, 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, 0xD254, 0xD255, /* 0x40 */
+ 0xD256, 0xD257, 0xD258, 0xD259, 0xD25A, 0xD25B, 0xD25C, 0xD25D, /* 0x50 */
+ 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, 0xF4C5, 0xBDF3, /* 0x50 */
+ 0xD264, 0xD265, 0xD266, 0xD267, 0xD268, 0xD269, 0xF1E0, 0xD26A, /* 0x60 */
+ 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, 0xD270, 0xD271, 0xD272, /* 0x60 */
+ 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, 0xD278, 0xD279, 0xD27A, /* 0x70 */
+ 0xD27B, 0xD27C, 0xD27D, 0xF1E1, 0xD27E, 0xD280, 0xD281, 0xCEF7, /* 0x70 */
+ 0xD282, 0xD2AA, 0xD283, 0xF1FB, 0xD284, 0xD285, 0xB8B2, 0xD286, /* 0x80 */
+ 0xD287, 0xD288, 0xD289, 0xD28A, 0xD28B, 0xD28C, 0xD28D, 0xD28E, /* 0x80 */
+ 0xD28F, 0xD290, 0xD291, 0xD292, 0xD293, 0xD294, 0xD295, 0xD296, /* 0x90 */
+ 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29C, 0xD29D, 0xD29E, /* 0x90 */
+ 0xD29F, 0xD2A0, 0xD340, 0xD341, 0xD342, 0xD343, 0xD344, 0xD345, /* 0xA0 */
+ 0xD346, 0xD347, 0xD348, 0xD349, 0xD34A, 0xD34B, 0xD34C, 0xD34D, /* 0xA0 */
+ 0xD34E, 0xD34F, 0xD350, 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, /* 0xB0 */
+ 0xD356, 0xD357, 0xD358, 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, /* 0xB0 */
+ 0xD35E, 0xBCFB, 0xB9DB, 0xD35F, 0xB9E6, 0xC3D9, 0xCAD3, 0xEAE8, /* 0xC0 */
+ 0xC0C0, 0xBEF5, 0xEAE9, 0xEAEA, 0xEAEB, 0xD360, 0xEAEC, 0xEAED, /* 0xC0 */
+ 0xEAEE, 0xEAEF, 0xBDC7, 0xD361, 0xD362, 0xD363, 0xF5FB, 0xD364, /* 0xD0 */
+ 0xD365, 0xD366, 0xF5FD, 0xD367, 0xF5FE, 0xD368, 0xF5FC, 0xD369, /* 0xD0 */
+ 0xD36A, 0xD36B, 0xD36C, 0xBDE2, 0xD36D, 0xF6A1, 0xB4A5, 0xD36E, /* 0xE0 */
+ 0xD36F, 0xD370, 0xD371, 0xF6A2, 0xD372, 0xD373, 0xD374, 0xF6A3, /* 0xE0 */
+ 0xD375, 0xD376, 0xD377, 0xECB2, 0xD378, 0xD379, 0xD37A, 0xD37B, /* 0xF0 */
+ 0xD37C, 0xD37D, 0xD37E, 0xD380, 0xD381, 0xD382, 0xD383, 0xD384 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1D4, 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, 0xD38A, 0xD9EA, /* 0x00 */
+ 0xD38B, 0xD38C, 0xD38D, 0xD38E, 0xD38F, 0xD390, 0xD391, 0xD392, /* 0x00 */
+ 0xD393, 0xD394, 0xD395, 0xD396, 0xD397, 0xD398, 0xD399, 0xD39A, /* 0x10 */
+ 0xD39B, 0xD39C, 0xD39D, 0xD39E, 0xD39F, 0xD3A0, 0xD440, 0xD441, /* 0x10 */
+ 0xD442, 0xD443, 0xD444, 0xD445, 0xD446, 0xD447, 0xD448, 0xD449, /* 0x20 */
+ 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, 0xD44F, 0xD450, 0xD451, /* 0x20 */
+ 0xD452, 0xD453, 0xD454, 0xD455, 0xD456, 0xD457, 0xD458, 0xD459, /* 0x30 */
+ 0xD45A, 0xD45B, 0xD45C, 0xD45D, 0xD45E, 0xD45F, 0xF6A4, 0xD460, /* 0x30 */
+ 0xD461, 0xD462, 0xD463, 0xD464, 0xD465, 0xD466, 0xD467, 0xD468, /* 0x40 */
+ 0xEEBA, 0xD469, 0xD46A, 0xD46B, 0xD46C, 0xD46D, 0xD46E, 0xD46F, /* 0x40 */
+ 0xD470, 0xD471, 0xD472, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, /* 0x50 */
+ 0xD478, 0xD479, 0xD47A, 0xD47B, 0xD47C, 0xD47D, 0xD47E, 0xD480, /* 0x50 */
+ 0xD481, 0xD482, 0xD483, 0xD484, 0xD485, 0xD486, 0xD487, 0xD488, /* 0x60 */
+ 0xD489, 0xD48A, 0xD48B, 0xD48C, 0xD48D, 0xD48E, 0xD48F, 0xD490, /* 0x60 */
+ 0xD491, 0xD492, 0xD493, 0xD494, 0xD495, 0xD496, 0xD497, 0xD498, /* 0x70 */
+ 0xD499, 0xD5B2, 0xD49A, 0xD49B, 0xD49C, 0xD49D, 0xD49E, 0xD49F, /* 0x70 */
+ 0xD4A0, 0xD540, 0xD541, 0xD542, 0xD543, 0xD544, 0xD545, 0xD546, /* 0x80 */
+ 0xD547, 0xD3FE, 0xCCDC, 0xD548, 0xD549, 0xD54A, 0xD54B, 0xD54C, /* 0x80 */
+ 0xD54D, 0xD54E, 0xD54F, 0xCAC4, 0xD550, 0xD551, 0xD552, 0xD553, /* 0x90 */
+ 0xD554, 0xD555, 0xD556, 0xD557, 0xD558, 0xD559, 0xD55A, 0xD55B, /* 0x90 */
+ 0xD55C, 0xD55D, 0xD55E, 0xD55F, 0xD560, 0xD561, 0xD562, 0xD563, /* 0xA0 */
+ 0xD564, 0xD565, 0xD566, 0xD567, 0xD568, 0xD569, 0xD56A, 0xD56B, /* 0xA0 */
+ 0xD56C, 0xD56D, 0xD56E, 0xD56F, 0xD570, 0xD571, 0xD572, 0xD573, /* 0xB0 */
+ 0xD574, 0xD575, 0xD576, 0xD577, 0xD578, 0xD579, 0xD57A, 0xD57B, /* 0xB0 */
+ 0xD57C, 0xD57D, 0xD57E, 0xD580, 0xD581, 0xD582, 0xD583, 0xD584, /* 0xC0 */
+ 0xD585, 0xD586, 0xD587, 0xD588, 0xD589, 0xD58A, 0xD58B, 0xD58C, /* 0xC0 */
+ 0xD58D, 0xD58E, 0xD58F, 0xD590, 0xD591, 0xD592, 0xD593, 0xD594, /* 0xD0 */
+ 0xD595, 0xD596, 0xD597, 0xD598, 0xD599, 0xD59A, 0xD59B, 0xD59C, /* 0xD0 */
+ 0xD59D, 0xD59E, 0xD59F, 0xD5A0, 0xD640, 0xD641, 0xD642, 0xD643, /* 0xE0 */
+ 0xD644, 0xD645, 0xD646, 0xD647, 0xD648, 0xD649, 0xD64A, 0xD64B, /* 0xE0 */
+ 0xD64C, 0xD64D, 0xD64E, 0xD64F, 0xD650, 0xD651, 0xD652, 0xD653, /* 0xF0 */
+ 0xD654, 0xD655, 0xD656, 0xD657, 0xD658, 0xD659, 0xD65A, 0xD65B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD65C, 0xD65D, 0xD65E, 0xD65F, 0xD660, 0xD661, 0xD662, 0xE5C0, /* 0x00 */
+ 0xD663, 0xD664, 0xD665, 0xD666, 0xD667, 0xD668, 0xD669, 0xD66A, /* 0x00 */
+ 0xD66B, 0xD66C, 0xD66D, 0xD66E, 0xD66F, 0xD670, 0xD671, 0xD672, /* 0x10 */
+ 0xD673, 0xD674, 0xD675, 0xD676, 0xD677, 0xD678, 0xD679, 0xD67A, /* 0x10 */
+ 0xD67B, 0xD67C, 0xD67D, 0xD67E, 0xD680, 0xD681, 0xF6A5, 0xD682, /* 0x20 */
+ 0xD683, 0xD684, 0xD685, 0xD686, 0xD687, 0xD688, 0xD689, 0xD68A, /* 0x20 */
+ 0xD68B, 0xD68C, 0xD68D, 0xD68E, 0xD68F, 0xD690, 0xD691, 0xD692, /* 0x30 */
+ 0xD693, 0xD694, 0xD695, 0xD696, 0xD697, 0xD698, 0xD699, 0xD69A, /* 0x30 */
+ 0xD69B, 0xD69C, 0xD69D, 0xD69E, 0xD69F, 0xD6A0, 0xD740, 0xD741, /* 0x40 */
+ 0xD742, 0xD743, 0xD744, 0xD745, 0xD746, 0xD747, 0xD748, 0xD749, /* 0x40 */
+ 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E, 0xD74F, 0xD750, 0xD751, /* 0x50 */
+ 0xD752, 0xD753, 0xD754, 0xD755, 0xD756, 0xD757, 0xD758, 0xD759, /* 0x50 */
+ 0xD75A, 0xD75B, 0xD75C, 0xD75D, 0xD75E, 0xD75F, 0xBEAF, 0xD760, /* 0x60 */
+ 0xD761, 0xD762, 0xD763, 0xD764, 0xC6A9, 0xD765, 0xD766, 0xD767, /* 0x60 */
+ 0xD768, 0xD769, 0xD76A, 0xD76B, 0xD76C, 0xD76D, 0xD76E, 0xD76F, /* 0x70 */
+ 0xD770, 0xD771, 0xD772, 0xD773, 0xD774, 0xD775, 0xD776, 0xD777, /* 0x70 */
+ 0xD778, 0xD779, 0xD77A, 0xD77B, 0xD77C, 0xD77D, 0xD77E, 0xD780, /* 0x80 */
+ 0xD781, 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0xD788, /* 0x80 */
+ 0xD789, 0xD78A, 0xD78B, 0xD78C, 0xD78D, 0xD78E, 0xD78F, 0xD790, /* 0x90 */
+ 0xD791, 0xD792, 0xD793, 0xD794, 0xD795, 0xD796, 0xD797, 0xD798, /* 0x90 */
+ 0xDAA5, 0xBCC6, 0xB6A9, 0xB8BC, 0xC8CF, 0xBCA5, 0xDAA6, 0xDAA7, /* 0xA0 */
+ 0xCCD6, 0xC8C3, 0xDAA8, 0xC6FD, 0xD799, 0xD1B5, 0xD2E9, 0xD1B6, /* 0xA0 */
+ 0xBCC7, 0xD79A, 0xBDB2, 0xBBE4, 0xDAA9, 0xDAAA, 0xD1C8, 0xDAAB, /* 0xB0 */
+ 0xD0ED, 0xB6EF, 0xC2DB, 0xD79B, 0xCBCF, 0xB7ED, 0xC9E8, 0xB7C3, /* 0xB0 */
+ 0xBEF7, 0xD6A4, 0xDAAC, 0xDAAD, 0xC6C0, 0xD7E7, 0xCAB6, 0xD79C, /* 0xC0 */
+ 0xD5A9, 0xCBDF, 0xD5EF, 0xDAAE, 0xD6DF, 0xB4CA, 0xDAB0, 0xDAAF, /* 0xC0 */
+ 0xD79D, 0xD2EB, 0xDAB1, 0xDAB2, 0xDAB3, 0xCAD4, 0xDAB4, 0xCAAB, /* 0xD0 */
+ 0xDAB5, 0xDAB6, 0xB3CF, 0xD6EF, 0xDAB7, 0xBBB0, 0xB5AE, 0xDAB8, /* 0xD0 */
+ 0xDAB9, 0xB9EE, 0xD1AF, 0xD2E8, 0xDABA, 0xB8C3, 0xCFEA, 0xB2EF, /* 0xE0 */
+ 0xDABB, 0xDABC, 0xD79E, 0xBDEB, 0xCEDC, 0xD3EF, 0xDABD, 0xCEF3, /* 0xE0 */
+ 0xDABE, 0xD3D5, 0xBBE5, 0xDABF, 0xCBB5, 0xCBD0, 0xDAC0, 0xC7EB, /* 0xF0 */
+ 0xD6EE, 0xDAC1, 0xC5B5, 0xB6C1, 0xDAC2, 0xB7CC, 0xBFCE, 0xDAC3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDAC4, 0xCBAD, 0xDAC5, 0xB5F7, 0xDAC6, 0xC1C2, 0xD7BB, 0xDAC7, /* 0x00 */
+ 0xCCB8, 0xD79F, 0xD2EA, 0xC4B1, 0xDAC8, 0xB5FD, 0xBBD1, 0xDAC9, /* 0x00 */
+ 0xD0B3, 0xDACA, 0xDACB, 0xCEBD, 0xDACC, 0xDACD, 0xDACE, 0xB2F7, /* 0x10 */
+ 0xDAD1, 0xDACF, 0xD1E8, 0xDAD0, 0xC3D5, 0xDAD2, 0xD7A0, 0xDAD3, /* 0x10 */
+ 0xDAD4, 0xDAD5, 0xD0BB, 0xD2A5, 0xB0F9, 0xDAD6, 0xC7AB, 0xDAD7, /* 0x20 */
+ 0xBDF7, 0xC3A1, 0xDAD8, 0xDAD9, 0xC3FD, 0xCCB7, 0xDADA, 0xDADB, /* 0x20 */
+ 0xC0BE, 0xC6D7, 0xDADC, 0xDADD, 0xC7B4, 0xDADE, 0xDADF, 0xB9C8, /* 0x30 */
+ 0xD840, 0xD841, 0xD842, 0xD843, 0xD844, 0xD845, 0xD846, 0xD847, /* 0x30 */
+ 0xD848, 0xBBED, 0xD849, 0xD84A, 0xD84B, 0xD84C, 0xB6B9, 0xF4F8, /* 0x40 */
+ 0xD84D, 0xF4F9, 0xD84E, 0xD84F, 0xCDE3, 0xD850, 0xD851, 0xD852, /* 0x40 */
+ 0xD853, 0xD854, 0xD855, 0xD856, 0xD857, 0xF5B9, 0xD858, 0xD859, /* 0x50 */
+ 0xD85A, 0xD85B, 0xEBE0, 0xD85C, 0xD85D, 0xD85E, 0xD85F, 0xD860, /* 0x50 */
+ 0xD861, 0xCFF3, 0xBBBF, 0xD862, 0xD863, 0xD864, 0xD865, 0xD866, /* 0x60 */
+ 0xD867, 0xD868, 0xBAC0, 0xD4A5, 0xD869, 0xD86A, 0xD86B, 0xD86C, /* 0x60 */
+ 0xD86D, 0xD86E, 0xD86F, 0xE1D9, 0xD870, 0xD871, 0xD872, 0xD873, /* 0x70 */
+ 0xF5F4, 0xB1AA, 0xB2F2, 0xD874, 0xD875, 0xD876, 0xD877, 0xD878, /* 0x70 */
+ 0xD879, 0xD87A, 0xF5F5, 0xD87B, 0xD87C, 0xF5F7, 0xD87D, 0xD87E, /* 0x80 */
+ 0xD880, 0xBAD1, 0xF5F6, 0xD881, 0xC3B2, 0xD882, 0xD883, 0xD884, /* 0x80 */
+ 0xD885, 0xD886, 0xD887, 0xD888, 0xF5F9, 0xD889, 0xD88A, 0xD88B, /* 0x90 */
+ 0xF5F8, 0xD88C, 0xD88D, 0xD88E, 0xD88F, 0xD890, 0xD891, 0xD892, /* 0x90 */
+ 0xD893, 0xD894, 0xD895, 0xD896, 0xD897, 0xD898, 0xD899, 0xD89A, /* 0xA0 */
+ 0xD89B, 0xD89C, 0xD89D, 0xD89E, 0xD89F, 0xD8A0, 0xD940, 0xD941, /* 0xA0 */
+ 0xD942, 0xD943, 0xD944, 0xD945, 0xD946, 0xD947, 0xD948, 0xD949, /* 0xB0 */
+ 0xD94A, 0xD94B, 0xD94C, 0xD94D, 0xD94E, 0xD94F, 0xD950, 0xD951, /* 0xB0 */
+ 0xD952, 0xD953, 0xD954, 0xD955, 0xD956, 0xD957, 0xD958, 0xD959, /* 0xC0 */
+ 0xD95A, 0xD95B, 0xD95C, 0xD95D, 0xD95E, 0xD95F, 0xD960, 0xD961, /* 0xC0 */
+ 0xD962, 0xD963, 0xD964, 0xD965, 0xD966, 0xD967, 0xD968, 0xD969, /* 0xD0 */
+ 0xD96A, 0xD96B, 0xD96C, 0xD96D, 0xD96E, 0xD96F, 0xD970, 0xD971, /* 0xD0 */
+ 0xD972, 0xD973, 0xD974, 0xD975, 0xD976, 0xD977, 0xD978, 0xD979, /* 0xE0 */
+ 0xD97A, 0xD97B, 0xD97C, 0xD97D, 0xD97E, 0xD980, 0xD981, 0xD982, /* 0xE0 */
+ 0xD983, 0xD984, 0xD985, 0xD986, 0xD987, 0xD988, 0xD989, 0xD98A, /* 0xF0 */
+ 0xD98B, 0xD98C, 0xD98D, 0xD98E, 0xD98F, 0xD990, 0xD991, 0xD992 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD993, 0xD994, 0xD995, 0xD996, 0xD997, 0xD998, 0xD999, 0xD99A, /* 0x00 */
+ 0xD99B, 0xD99C, 0xD99D, 0xD99E, 0xD99F, 0xD9A0, 0xDA40, 0xDA41, /* 0x00 */
+ 0xDA42, 0xDA43, 0xDA44, 0xDA45, 0xDA46, 0xDA47, 0xDA48, 0xDA49, /* 0x10 */
+ 0xDA4A, 0xDA4B, 0xDA4C, 0xDA4D, 0xDA4E, 0xB1B4, 0xD5EA, 0xB8BA, /* 0x10 */
+ 0xDA4F, 0xB9B1, 0xB2C6, 0xD4F0, 0xCFCD, 0xB0DC, 0xD5CB, 0xBBF5, /* 0x20 */
+ 0xD6CA, 0xB7B7, 0xCCB0, 0xC6B6, 0xB1E1, 0xB9BA, 0xD6FC, 0xB9E1, /* 0x20 */
+ 0xB7A1, 0xBCFA, 0xEADA, 0xEADB, 0xCCF9, 0xB9F3, 0xEADC, 0xB4FB, /* 0x30 */
+ 0xC3B3, 0xB7D1, 0xBAD8, 0xEADD, 0xD4F4, 0xEADE, 0xBCD6, 0xBBDF, /* 0x30 */
+ 0xEADF, 0xC1DE, 0xC2B8, 0xD4DF, 0xD7CA, 0xEAE0, 0xEAE1, 0xEAE4, /* 0x40 */
+ 0xEAE2, 0xEAE3, 0xC9DE, 0xB8B3, 0xB6C4, 0xEAE5, 0xCAEA, 0xC9CD, /* 0x40 */
+ 0xB4CD, 0xDA50, 0xDA51, 0xE2D9, 0xC5E2, 0xEAE6, 0xC0B5, 0xDA52, /* 0x50 */
+ 0xD7B8, 0xEAE7, 0xD7AC, 0xC8FC, 0xD8D3, 0xD8CD, 0xD4DE, 0xDA53, /* 0x50 */
+ 0xD4F9, 0xC9C4, 0xD3AE, 0xB8D3, 0xB3E0, 0xDA54, 0xC9E2, 0xF4F6, /* 0x60 */
+ 0xDA55, 0xDA56, 0xDA57, 0xBAD5, 0xDA58, 0xF4F7, 0xDA59, 0xDA5A, /* 0x60 */
+ 0xD7DF, 0xDA5B, 0xDA5C, 0xF4F1, 0xB8B0, 0xD5D4, 0xB8CF, 0xC6F0, /* 0x70 */
+ 0xDA5D, 0xDA5E, 0xDA5F, 0xDA60, 0xDA61, 0xDA62, 0xDA63, 0xDA64, /* 0x70 */
+ 0xDA65, 0xB3C3, 0xDA66, 0xDA67, 0xF4F2, 0xB3AC, 0xDA68, 0xDA69, /* 0x80 */
+ 0xDA6A, 0xDA6B, 0xD4BD, 0xC7F7, 0xDA6C, 0xDA6D, 0xDA6E, 0xDA6F, /* 0x80 */
+ 0xDA70, 0xF4F4, 0xDA71, 0xDA72, 0xF4F3, 0xDA73, 0xDA74, 0xDA75, /* 0x90 */
+ 0xDA76, 0xDA77, 0xDA78, 0xDA79, 0xDA7A, 0xDA7B, 0xDA7C, 0xCCCB, /* 0x90 */
+ 0xDA7D, 0xDA7E, 0xDA80, 0xC8A4, 0xDA81, 0xDA82, 0xDA83, 0xDA84, /* 0xA0 */
+ 0xDA85, 0xDA86, 0xDA87, 0xDA88, 0xDA89, 0xDA8A, 0xDA8B, 0xDA8C, /* 0xA0 */
+ 0xDA8D, 0xF4F5, 0xDA8E, 0xD7E3, 0xC5BF, 0xF5C0, 0xDA8F, 0xDA90, /* 0xB0 */
+ 0xF5BB, 0xDA91, 0xF5C3, 0xDA92, 0xF5C2, 0xDA93, 0xD6BA, 0xF5C1, /* 0xB0 */
+ 0xDA94, 0xDA95, 0xDA96, 0xD4BE, 0xF5C4, 0xDA97, 0xF5CC, 0xDA98, /* 0xC0 */
+ 0xDA99, 0xDA9A, 0xDA9B, 0xB0CF, 0xB5F8, 0xDA9C, 0xF5C9, 0xF5CA, /* 0xC0 */
+ 0xDA9D, 0xC5DC, 0xDA9E, 0xDA9F, 0xDAA0, 0xDB40, 0xF5C5, 0xF5C6, /* 0xD0 */
+ 0xDB41, 0xDB42, 0xF5C7, 0xF5CB, 0xDB43, 0xBEE0, 0xF5C8, 0xB8FA, /* 0xD0 */
+ 0xDB44, 0xDB45, 0xDB46, 0xF5D0, 0xF5D3, 0xDB47, 0xDB48, 0xDB49, /* 0xE0 */
+ 0xBFE7, 0xDB4A, 0xB9F2, 0xF5BC, 0xF5CD, 0xDB4B, 0xDB4C, 0xC2B7, /* 0xE0 */
+ 0xDB4D, 0xDB4E, 0xDB4F, 0xCCF8, 0xDB50, 0xBCF9, 0xDB51, 0xF5CE, /* 0xF0 */
+ 0xF5CF, 0xF5D1, 0xB6E5, 0xF5D2, 0xDB52, 0xF5D5, 0xDB53, 0xDB54 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDB55, 0xDB56, 0xDB57, 0xDB58, 0xDB59, 0xF5BD, 0xDB5A, 0xDB5B, /* 0x00 */
+ 0xDB5C, 0xF5D4, 0xD3BB, 0xDB5D, 0xB3EC, 0xDB5E, 0xDB5F, 0xCCA4, /* 0x00 */
+ 0xDB60, 0xDB61, 0xDB62, 0xDB63, 0xF5D6, 0xDB64, 0xDB65, 0xDB66, /* 0x10 */
+ 0xDB67, 0xDB68, 0xDB69, 0xDB6A, 0xDB6B, 0xF5D7, 0xBEE1, 0xF5D8, /* 0x10 */
+ 0xDB6C, 0xDB6D, 0xCCDF, 0xF5DB, 0xDB6E, 0xDB6F, 0xDB70, 0xDB71, /* 0x20 */
+ 0xDB72, 0xB2C8, 0xD7D9, 0xDB73, 0xF5D9, 0xDB74, 0xF5DA, 0xF5DC, /* 0x20 */
+ 0xDB75, 0xF5E2, 0xDB76, 0xDB77, 0xDB78, 0xF5E0, 0xDB79, 0xDB7A, /* 0x30 */
+ 0xDB7B, 0xF5DF, 0xF5DD, 0xDB7C, 0xDB7D, 0xF5E1, 0xDB7E, 0xDB80, /* 0x30 */
+ 0xF5DE, 0xF5E4, 0xF5E5, 0xDB81, 0xCCE3, 0xDB82, 0xDB83, 0xE5BF, /* 0x40 */
+ 0xB5B8, 0xF5E3, 0xF5E8, 0xCCA3, 0xDB84, 0xDB85, 0xDB86, 0xDB87, /* 0x40 */
+ 0xDB88, 0xF5E6, 0xF5E7, 0xDB89, 0xDB8A, 0xDB8B, 0xDB8C, 0xDB8D, /* 0x50 */
+ 0xDB8E, 0xF5BE, 0xDB8F, 0xDB90, 0xDB91, 0xDB92, 0xDB93, 0xDB94, /* 0x50 */
+ 0xDB95, 0xDB96, 0xDB97, 0xDB98, 0xDB99, 0xDB9A, 0xB1C4, 0xDB9B, /* 0x60 */
+ 0xDB9C, 0xF5BF, 0xDB9D, 0xDB9E, 0xB5C5, 0xB2E4, 0xDB9F, 0xF5EC, /* 0x60 */
+ 0xF5E9, 0xDBA0, 0xB6D7, 0xDC40, 0xF5ED, 0xDC41, 0xF5EA, 0xDC42, /* 0x70 */
+ 0xDC43, 0xDC44, 0xDC45, 0xDC46, 0xF5EB, 0xDC47, 0xDC48, 0xB4DA, /* 0x70 */
+ 0xDC49, 0xD4EA, 0xDC4A, 0xDC4B, 0xDC4C, 0xF5EE, 0xDC4D, 0xB3F9, /* 0x80 */
+ 0xDC4E, 0xDC4F, 0xDC50, 0xDC51, 0xDC52, 0xDC53, 0xDC54, 0xF5EF, /* 0x80 */
+ 0xF5F1, 0xDC55, 0xDC56, 0xDC57, 0xF5F0, 0xDC58, 0xDC59, 0xDC5A, /* 0x90 */
+ 0xDC5B, 0xDC5C, 0xDC5D, 0xDC5E, 0xF5F2, 0xDC5F, 0xF5F3, 0xDC60, /* 0x90 */
+ 0xDC61, 0xDC62, 0xDC63, 0xDC64, 0xDC65, 0xDC66, 0xDC67, 0xDC68, /* 0xA0 */
+ 0xDC69, 0xDC6A, 0xDC6B, 0xC9ED, 0xB9AA, 0xDC6C, 0xDC6D, 0xC7FB, /* 0xA0 */
+ 0xDC6E, 0xDC6F, 0xB6E3, 0xDC70, 0xDC71, 0xDC72, 0xDC73, 0xDC74, /* 0xB0 */
+ 0xDC75, 0xDC76, 0xCCC9, 0xDC77, 0xDC78, 0xDC79, 0xDC7A, 0xDC7B, /* 0xB0 */
+ 0xDC7C, 0xDC7D, 0xDC7E, 0xDC80, 0xDC81, 0xDC82, 0xDC83, 0xDC84, /* 0xC0 */
+ 0xDC85, 0xDC86, 0xDC87, 0xDC88, 0xDC89, 0xDC8A, 0xEAA6, 0xDC8B, /* 0xC0 */
+ 0xDC8C, 0xDC8D, 0xDC8E, 0xDC8F, 0xDC90, 0xDC91, 0xDC92, 0xDC93, /* 0xD0 */
+ 0xDC94, 0xDC95, 0xDC96, 0xDC97, 0xDC98, 0xDC99, 0xDC9A, 0xDC9B, /* 0xD0 */
+ 0xDC9C, 0xDC9D, 0xDC9E, 0xDC9F, 0xDCA0, 0xDD40, 0xDD41, 0xDD42, /* 0xE0 */
+ 0xDD43, 0xDD44, 0xDD45, 0xDD46, 0xDD47, 0xDD48, 0xDD49, 0xDD4A, /* 0xE0 */
+ 0xDD4B, 0xDD4C, 0xDD4D, 0xDD4E, 0xDD4F, 0xDD50, 0xDD51, 0xDD52, /* 0xF0 */
+ 0xDD53, 0xDD54, 0xDD55, 0xDD56, 0xDD57, 0xDD58, 0xDD59, 0xDD5A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDD5B, 0xDD5C, 0xDD5D, 0xDD5E, 0xDD5F, 0xDD60, 0xDD61, 0xDD62, /* 0x00 */
+ 0xDD63, 0xDD64, 0xDD65, 0xDD66, 0xDD67, 0xDD68, 0xDD69, 0xDD6A, /* 0x00 */
+ 0xDD6B, 0xDD6C, 0xDD6D, 0xDD6E, 0xDD6F, 0xDD70, 0xDD71, 0xDD72, /* 0x10 */
+ 0xDD73, 0xDD74, 0xDD75, 0xDD76, 0xDD77, 0xDD78, 0xDD79, 0xDD7A, /* 0x10 */
+ 0xDD7B, 0xDD7C, 0xDD7D, 0xDD7E, 0xDD80, 0xDD81, 0xDD82, 0xDD83, /* 0x20 */
+ 0xDD84, 0xDD85, 0xDD86, 0xDD87, 0xDD88, 0xDD89, 0xDD8A, 0xDD8B, /* 0x20 */
+ 0xDD8C, 0xDD8D, 0xDD8E, 0xDD8F, 0xDD90, 0xDD91, 0xDD92, 0xDD93, /* 0x30 */
+ 0xDD94, 0xDD95, 0xDD96, 0xDD97, 0xDD98, 0xDD99, 0xDD9A, 0xDD9B, /* 0x30 */
+ 0xDD9C, 0xDD9D, 0xDD9E, 0xDD9F, 0xDDA0, 0xDE40, 0xDE41, 0xDE42, /* 0x40 */
+ 0xDE43, 0xDE44, 0xDE45, 0xDE46, 0xDE47, 0xDE48, 0xDE49, 0xDE4A, /* 0x40 */
+ 0xDE4B, 0xDE4C, 0xDE4D, 0xDE4E, 0xDE4F, 0xDE50, 0xDE51, 0xDE52, /* 0x50 */
+ 0xDE53, 0xDE54, 0xDE55, 0xDE56, 0xDE57, 0xDE58, 0xDE59, 0xDE5A, /* 0x50 */
+ 0xDE5B, 0xDE5C, 0xDE5D, 0xDE5E, 0xDE5F, 0xDE60, 0xB3B5, 0xD4FE, /* 0x60 */
+ 0xB9EC, 0xD0F9, 0xDE61, 0xE9ED, 0xD7AA, 0xE9EE, 0xC2D6, 0xC8ED, /* 0x60 */
+ 0xBAE4, 0xE9EF, 0xE9F0, 0xE9F1, 0xD6E1, 0xE9F2, 0xE9F3, 0xE9F5, /* 0x70 */
+ 0xE9F4, 0xE9F6, 0xE9F7, 0xC7E1, 0xE9F8, 0xD4D8, 0xE9F9, 0xBDCE, /* 0x70 */
+ 0xDE62, 0xE9FA, 0xE9FB, 0xBDCF, 0xE9FC, 0xB8A8, 0xC1BE, 0xE9FD, /* 0x80 */
+ 0xB1B2, 0xBBD4, 0xB9F5, 0xE9FE, 0xDE63, 0xEAA1, 0xEAA2, 0xEAA3, /* 0x80 */
+ 0xB7F8, 0xBCAD, 0xDE64, 0xCAE4, 0xE0CE, 0xD4AF, 0xCFBD, 0xD5B7, /* 0x90 */
+ 0xEAA4, 0xD5DE, 0xEAA5, 0xD0C1, 0xB9BC, 0xDE65, 0xB4C7, 0xB1D9, /* 0x90 */
+ 0xDE66, 0xDE67, 0xDE68, 0xC0B1, 0xDE69, 0xDE6A, 0xDE6B, 0xDE6C, /* 0xA0 */
+ 0xB1E6, 0xB1E7, 0xDE6D, 0xB1E8, 0xDE6E, 0xDE6F, 0xDE70, 0xDE71, /* 0xA0 */
+ 0xB3BD, 0xC8E8, 0xDE72, 0xDE73, 0xDE74, 0xDE75, 0xE5C1, 0xDE76, /* 0xB0 */
+ 0xDE77, 0xB1DF, 0xDE78, 0xDE79, 0xDE7A, 0xC1C9, 0xB4EF, 0xDE7B, /* 0xB0 */
+ 0xDE7C, 0xC7A8, 0xD3D8, 0xDE7D, 0xC6F9, 0xD1B8, 0xDE7E, 0xB9FD, /* 0xC0 */
+ 0xC2F5, 0xDE80, 0xDE81, 0xDE82, 0xDE83, 0xDE84, 0xD3AD, 0xDE85, /* 0xC0 */
+ 0xD4CB, 0xBDFC, 0xDE86, 0xE5C2, 0xB7B5, 0xE5C3, 0xDE87, 0xDE88, /* 0xD0 */
+ 0xBBB9, 0xD5E2, 0xDE89, 0xBDF8, 0xD4B6, 0xCEA5, 0xC1AC, 0xB3D9, /* 0xD0 */
+ 0xDE8A, 0xDE8B, 0xCCF6, 0xDE8C, 0xE5C6, 0xE5C4, 0xE5C8, 0xDE8D, /* 0xE0 */
+ 0xE5CA, 0xE5C7, 0xB5CF, 0xC6C8, 0xDE8E, 0xB5FC, 0xE5C5, 0xDE8F, /* 0xE0 */
+ 0xCAF6, 0xDE90, 0xDE91, 0xE5C9, 0xDE92, 0xDE93, 0xDE94, 0xC3D4, /* 0xF0 */
+ 0xB1C5, 0xBCA3, 0xDE95, 0xDE96, 0xDE97, 0xD7B7, 0xDE98, 0xDE99 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDCB, 0xCBCD, 0xCACA, 0xCCD3, 0xE5CC, 0xE5CB, 0xC4E6, 0xDE9A, /* 0x00 */
+ 0xDE9B, 0xD1A1, 0xD1B7, 0xE5CD, 0xDE9C, 0xE5D0, 0xDE9D, 0xCDB8, /* 0x00 */
+ 0xD6F0, 0xE5CF, 0xB5DD, 0xDE9E, 0xCDBE, 0xDE9F, 0xE5D1, 0xB6BA, /* 0x10 */
+ 0xDEA0, 0xDF40, 0xCDA8, 0xB9E4, 0xDF41, 0xCAC5, 0xB3D1, 0xCBD9, /* 0x10 */
+ 0xD4EC, 0xE5D2, 0xB7EA, 0xDF42, 0xDF43, 0xDF44, 0xE5CE, 0xDF45, /* 0x20 */
+ 0xDF46, 0xDF47, 0xDF48, 0xDF49, 0xDF4A, 0xE5D5, 0xB4FE, 0xE5D6, /* 0x20 */
+ 0xDF4B, 0xDF4C, 0xDF4D, 0xDF4E, 0xDF4F, 0xE5D3, 0xE5D4, 0xDF50, /* 0x30 */
+ 0xD2DD, 0xDF51, 0xDF52, 0xC2DF, 0xB1C6, 0xDF53, 0xD3E2, 0xDF54, /* 0x30 */
+ 0xDF55, 0xB6DD, 0xCBEC, 0xDF56, 0xE5D7, 0xDF57, 0xDF58, 0xD3F6, /* 0x40 */
+ 0xDF59, 0xDF5A, 0xDF5B, 0xDF5C, 0xDF5D, 0xB1E9, 0xDF5E, 0xB6F4, /* 0x40 */
+ 0xE5DA, 0xE5D8, 0xE5D9, 0xB5C0, 0xDF5F, 0xDF60, 0xDF61, 0xD2C5, /* 0x50 */
+ 0xE5DC, 0xDF62, 0xDF63, 0xE5DE, 0xDF64, 0xDF65, 0xDF66, 0xDF67, /* 0x50 */
+ 0xDF68, 0xDF69, 0xE5DD, 0xC7B2, 0xDF6A, 0xD2A3, 0xDF6B, 0xDF6C, /* 0x60 */
+ 0xE5DB, 0xDF6D, 0xDF6E, 0xDF6F, 0xDF70, 0xD4E2, 0xD5DA, 0xDF71, /* 0x60 */
+ 0xDF72, 0xDF73, 0xDF74, 0xDF75, 0xE5E0, 0xD7F1, 0xDF76, 0xDF77, /* 0x70 */
+ 0xDF78, 0xDF79, 0xDF7A, 0xDF7B, 0xDF7C, 0xE5E1, 0xDF7D, 0xB1DC, /* 0x70 */
+ 0xD1FB, 0xDF7E, 0xE5E2, 0xE5E4, 0xDF80, 0xDF81, 0xDF82, 0xDF83, /* 0x80 */
+ 0xE5E3, 0xDF84, 0xDF85, 0xE5E5, 0xDF86, 0xDF87, 0xDF88, 0xDF89, /* 0x80 */
+ 0xDF8A, 0xD2D8, 0xDF8B, 0xB5CB, 0xDF8C, 0xE7DF, 0xDF8D, 0xDAF5, /* 0x90 */
+ 0xDF8E, 0xDAF8, 0xDF8F, 0xDAF6, 0xDF90, 0xDAF7, 0xDF91, 0xDF92, /* 0x90 */
+ 0xDF93, 0xDAFA, 0xD0CF, 0xC4C7, 0xDF94, 0xDF95, 0xB0EE, 0xDF96, /* 0xA0 */
+ 0xDF97, 0xDF98, 0xD0B0, 0xDF99, 0xDAF9, 0xDF9A, 0xD3CA, 0xBAAA, /* 0xA0 */
+ 0xDBA2, 0xC7F1, 0xDF9B, 0xDAFC, 0xDAFB, 0xC9DB, 0xDAFD, 0xDF9C, /* 0xB0 */
+ 0xDBA1, 0xD7DE, 0xDAFE, 0xC1DA, 0xDF9D, 0xDF9E, 0xDBA5, 0xDF9F, /* 0xB0 */
+ 0xDFA0, 0xD3F4, 0xE040, 0xE041, 0xDBA7, 0xDBA4, 0xE042, 0xDBA8, /* 0xC0 */
+ 0xE043, 0xE044, 0xBDBC, 0xE045, 0xE046, 0xE047, 0xC0C9, 0xDBA3, /* 0xC0 */
+ 0xDBA6, 0xD6A3, 0xE048, 0xDBA9, 0xE049, 0xE04A, 0xE04B, 0xDBAD, /* 0xD0 */
+ 0xE04C, 0xE04D, 0xE04E, 0xDBAE, 0xDBAC, 0xBAC2, 0xE04F, 0xE050, /* 0xD0 */
+ 0xE051, 0xBFA4, 0xDBAB, 0xE052, 0xE053, 0xE054, 0xDBAA, 0xD4C7, /* 0xE0 */
+ 0xB2BF, 0xE055, 0xE056, 0xDBAF, 0xE057, 0xB9F9, 0xE058, 0xDBB0, /* 0xE0 */
+ 0xE059, 0xE05A, 0xE05B, 0xE05C, 0xB3BB, 0xE05D, 0xE05E, 0xE05F, /* 0xF0 */
+ 0xB5A6, 0xE060, 0xE061, 0xE062, 0xE063, 0xB6BC, 0xDBB1, 0xE064 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE065, 0xE066, 0xB6F5, 0xE067, 0xDBB2, 0xE068, 0xE069, 0xE06A, /* 0x00 */
+ 0xE06B, 0xE06C, 0xE06D, 0xE06E, 0xE06F, 0xE070, 0xE071, 0xE072, /* 0x00 */
+ 0xE073, 0xE074, 0xE075, 0xE076, 0xE077, 0xE078, 0xE079, 0xE07A, /* 0x10 */
+ 0xE07B, 0xB1C9, 0xE07C, 0xE07D, 0xE07E, 0xE080, 0xDBB4, 0xE081, /* 0x10 */
+ 0xE082, 0xE083, 0xDBB3, 0xDBB5, 0xE084, 0xE085, 0xE086, 0xE087, /* 0x20 */
+ 0xE088, 0xE089, 0xE08A, 0xE08B, 0xE08C, 0xE08D, 0xE08E, 0xDBB7, /* 0x20 */
+ 0xE08F, 0xDBB6, 0xE090, 0xE091, 0xE092, 0xE093, 0xE094, 0xE095, /* 0x30 */
+ 0xE096, 0xDBB8, 0xE097, 0xE098, 0xE099, 0xE09A, 0xE09B, 0xE09C, /* 0x30 */
+ 0xE09D, 0xE09E, 0xE09F, 0xDBB9, 0xE0A0, 0xE140, 0xDBBA, 0xE141, /* 0x40 */
+ 0xE142, 0xD3CF, 0xF4FA, 0xC7F5, 0xD7C3, 0xC5E4, 0xF4FC, 0xF4FD, /* 0x40 */
+ 0xF4FB, 0xE143, 0xBEC6, 0xE144, 0xE145, 0xE146, 0xE147, 0xD0EF, /* 0x50 */
+ 0xE148, 0xE149, 0xB7D3, 0xE14A, 0xE14B, 0xD4CD, 0xCCAA, 0xE14C, /* 0x50 */
+ 0xE14D, 0xF5A2, 0xF5A1, 0xBAA8, 0xF4FE, 0xCBD6, 0xE14E, 0xE14F, /* 0x60 */
+ 0xE150, 0xF5A4, 0xC0D2, 0xE151, 0xB3EA, 0xE152, 0xCDAA, 0xF5A5, /* 0x60 */
+ 0xF5A3, 0xBDB4, 0xF5A8, 0xE153, 0xF5A9, 0xBDCD, 0xC3B8, 0xBFE1, /* 0x70 */
+ 0xCBE1, 0xF5AA, 0xE154, 0xE155, 0xE156, 0xF5A6, 0xF5A7, 0xC4F0, /* 0x70 */
+ 0xE157, 0xE158, 0xE159, 0xE15A, 0xE15B, 0xF5AC, 0xE15C, 0xB4BC, /* 0x80 */
+ 0xE15D, 0xD7ED, 0xE15E, 0xB4D7, 0xF5AB, 0xF5AE, 0xE15F, 0xE160, /* 0x80 */
+ 0xF5AD, 0xF5AF, 0xD0D1, 0xE161, 0xE162, 0xE163, 0xE164, 0xE165, /* 0x90 */
+ 0xE166, 0xE167, 0xC3D1, 0xC8A9, 0xE168, 0xE169, 0xE16A, 0xE16B, /* 0x90 */
+ 0xE16C, 0xE16D, 0xF5B0, 0xF5B1, 0xE16E, 0xE16F, 0xE170, 0xE171, /* 0xA0 */
+ 0xE172, 0xE173, 0xF5B2, 0xE174, 0xE175, 0xF5B3, 0xF5B4, 0xF5B5, /* 0xA0 */
+ 0xE176, 0xE177, 0xE178, 0xE179, 0xF5B7, 0xF5B6, 0xE17A, 0xE17B, /* 0xB0 */
+ 0xE17C, 0xE17D, 0xF5B8, 0xE17E, 0xE180, 0xE181, 0xE182, 0xE183, /* 0xB0 */
+ 0xE184, 0xE185, 0xE186, 0xE187, 0xE188, 0xE189, 0xE18A, 0xB2C9, /* 0xC0 */
+ 0xE18B, 0xD3D4, 0xCACD, 0xE18C, 0xC0EF, 0xD6D8, 0xD2B0, 0xC1BF, /* 0xC0 */
+ 0xE18D, 0xBDF0, 0xE18E, 0xE18F, 0xE190, 0xE191, 0xE192, 0xE193, /* 0xD0 */
+ 0xE194, 0xE195, 0xE196, 0xE197, 0xB8AA, 0xE198, 0xE199, 0xE19A, /* 0xD0 */
+ 0xE19B, 0xE19C, 0xE19D, 0xE19E, 0xE19F, 0xE1A0, 0xE240, 0xE241, /* 0xE0 */
+ 0xE242, 0xE243, 0xE244, 0xE245, 0xE246, 0xE247, 0xE248, 0xE249, /* 0xE0 */
+ 0xE24A, 0xE24B, 0xE24C, 0xE24D, 0xE24E, 0xE24F, 0xE250, 0xE251, /* 0xF0 */
+ 0xE252, 0xE253, 0xE254, 0xE255, 0xE256, 0xE257, 0xE258, 0xE259 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE25A, 0xE25B, 0xE25C, 0xE25D, 0xE25E, 0xE25F, 0xE260, 0xE261, /* 0x00 */
+ 0xE262, 0xE263, 0xE264, 0xE265, 0xE266, 0xE267, 0xE268, 0xE269, /* 0x00 */
+ 0xE26A, 0xE26B, 0xE26C, 0xE26D, 0xE26E, 0xE26F, 0xE270, 0xE271, /* 0x10 */
+ 0xE272, 0xE273, 0xE274, 0xE275, 0xE276, 0xE277, 0xE278, 0xE279, /* 0x10 */
+ 0xE27A, 0xE27B, 0xE27C, 0xE27D, 0xE27E, 0xE280, 0xE281, 0xE282, /* 0x20 */
+ 0xE283, 0xE284, 0xE285, 0xE286, 0xE287, 0xE288, 0xE289, 0xE28A, /* 0x20 */
+ 0xE28B, 0xE28C, 0xE28D, 0xE28E, 0xE28F, 0xE290, 0xE291, 0xE292, /* 0x30 */
+ 0xE293, 0xE294, 0xE295, 0xE296, 0xE297, 0xE298, 0xE299, 0xE29A, /* 0x30 */
+ 0xE29B, 0xE29C, 0xE29D, 0xE29E, 0xE29F, 0xE2A0, 0xE340, 0xE341, /* 0x40 */
+ 0xE342, 0xE343, 0xE344, 0xE345, 0xE346, 0xE347, 0xE348, 0xE349, /* 0x40 */
+ 0xE34A, 0xE34B, 0xE34C, 0xE34D, 0xE34E, 0xE34F, 0xE350, 0xE351, /* 0x50 */
+ 0xE352, 0xE353, 0xE354, 0xE355, 0xE356, 0xE357, 0xE358, 0xE359, /* 0x50 */
+ 0xE35A, 0xE35B, 0xE35C, 0xE35D, 0xE35E, 0xE35F, 0xE360, 0xE361, /* 0x60 */
+ 0xE362, 0xE363, 0xE364, 0xE365, 0xE366, 0xE367, 0xE368, 0xE369, /* 0x60 */
+ 0xE36A, 0xE36B, 0xE36C, 0xE36D, 0xBCF8, 0xE36E, 0xE36F, 0xE370, /* 0x70 */
+ 0xE371, 0xE372, 0xE373, 0xE374, 0xE375, 0xE376, 0xE377, 0xE378, /* 0x70 */
+ 0xE379, 0xE37A, 0xE37B, 0xE37C, 0xE37D, 0xE37E, 0xE380, 0xE381, /* 0x80 */
+ 0xE382, 0xE383, 0xE384, 0xE385, 0xE386, 0xE387, 0xF6C6, 0xE388, /* 0x80 */
+ 0xE389, 0xE38A, 0xE38B, 0xE38C, 0xE38D, 0xE38E, 0xE38F, 0xE390, /* 0x90 */
+ 0xE391, 0xE392, 0xE393, 0xE394, 0xE395, 0xE396, 0xE397, 0xE398, /* 0x90 */
+ 0xE399, 0xE39A, 0xE39B, 0xE39C, 0xE39D, 0xE39E, 0xE39F, 0xE3A0, /* 0xA0 */
+ 0xE440, 0xE441, 0xE442, 0xE443, 0xE444, 0xE445, 0xF6C7, 0xE446, /* 0xA0 */
+ 0xE447, 0xE448, 0xE449, 0xE44A, 0xE44B, 0xE44C, 0xE44D, 0xE44E, /* 0xB0 */
+ 0xE44F, 0xE450, 0xE451, 0xE452, 0xE453, 0xE454, 0xE455, 0xE456, /* 0xB0 */
+ 0xE457, 0xE458, 0xE459, 0xE45A, 0xE45B, 0xE45C, 0xE45D, 0xE45E, /* 0xC0 */
+ 0xF6C8, 0xE45F, 0xE460, 0xE461, 0xE462, 0xE463, 0xE464, 0xE465, /* 0xC0 */
+ 0xE466, 0xE467, 0xE468, 0xE469, 0xE46A, 0xE46B, 0xE46C, 0xE46D, /* 0xD0 */
+ 0xE46E, 0xE46F, 0xE470, 0xE471, 0xE472, 0xE473, 0xE474, 0xE475, /* 0xD0 */
+ 0xE476, 0xE477, 0xE478, 0xE479, 0xE47A, 0xE47B, 0xE47C, 0xE47D, /* 0xE0 */
+ 0xE47E, 0xE480, 0xE481, 0xE482, 0xE483, 0xE484, 0xE485, 0xE486, /* 0xE0 */
+ 0xE487, 0xE488, 0xE489, 0xE48A, 0xE48B, 0xE48C, 0xE48D, 0xE48E, /* 0xF0 */
+ 0xE48F, 0xE490, 0xE491, 0xE492, 0xE493, 0xE494, 0xE495, 0xE496 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE497, 0xE498, 0xE499, 0xE49A, 0xE49B, 0xE49C, 0xE49D, 0xE49E, /* 0x00 */
+ 0xE49F, 0xE4A0, 0xE540, 0xE541, 0xE542, 0xE543, 0xE544, 0xE545, /* 0x00 */
+ 0xE546, 0xE547, 0xE548, 0xE549, 0xE54A, 0xE54B, 0xE54C, 0xE54D, /* 0x10 */
+ 0xE54E, 0xE54F, 0xE550, 0xE551, 0xE552, 0xE553, 0xE554, 0xE555, /* 0x10 */
+ 0xE556, 0xE557, 0xE558, 0xE559, 0xE55A, 0xE55B, 0xE55C, 0xE55D, /* 0x20 */
+ 0xE55E, 0xE55F, 0xE560, 0xE561, 0xE562, 0xE563, 0xE564, 0xE565, /* 0x20 */
+ 0xE566, 0xE567, 0xE568, 0xE569, 0xE56A, 0xE56B, 0xE56C, 0xE56D, /* 0x30 */
+ 0xE56E, 0xE56F, 0xE570, 0xE571, 0xE572, 0xE573, 0xF6C9, 0xE574, /* 0x30 */
+ 0xE575, 0xE576, 0xE577, 0xE578, 0xE579, 0xE57A, 0xE57B, 0xE57C, /* 0x40 */
+ 0xE57D, 0xE57E, 0xE580, 0xE581, 0xE582, 0xE583, 0xE584, 0xE585, /* 0x40 */
+ 0xE586, 0xE587, 0xE588, 0xE589, 0xE58A, 0xE58B, 0xE58C, 0xE58D, /* 0x50 */
+ 0xE58E, 0xE58F, 0xE590, 0xE591, 0xE592, 0xE593, 0xE594, 0xE595, /* 0x50 */
+ 0xE596, 0xE597, 0xE598, 0xE599, 0xE59A, 0xE59B, 0xE59C, 0xE59D, /* 0x60 */
+ 0xE59E, 0xE59F, 0xF6CA, 0xE5A0, 0xE640, 0xE641, 0xE642, 0xE643, /* 0x60 */
+ 0xE644, 0xE645, 0xE646, 0xE647, 0xE648, 0xE649, 0xE64A, 0xE64B, /* 0x70 */
+ 0xE64C, 0xE64D, 0xE64E, 0xE64F, 0xE650, 0xE651, 0xE652, 0xE653, /* 0x70 */
+ 0xE654, 0xE655, 0xE656, 0xE657, 0xE658, 0xE659, 0xE65A, 0xE65B, /* 0x80 */
+ 0xE65C, 0xE65D, 0xE65E, 0xE65F, 0xE660, 0xE661, 0xE662, 0xF6CC, /* 0x80 */
+ 0xE663, 0xE664, 0xE665, 0xE666, 0xE667, 0xE668, 0xE669, 0xE66A, /* 0x90 */
+ 0xE66B, 0xE66C, 0xE66D, 0xE66E, 0xE66F, 0xE670, 0xE671, 0xE672, /* 0x90 */
+ 0xE673, 0xE674, 0xE675, 0xE676, 0xE677, 0xE678, 0xE679, 0xE67A, /* 0xA0 */
+ 0xE67B, 0xE67C, 0xE67D, 0xE67E, 0xE680, 0xE681, 0xE682, 0xE683, /* 0xA0 */
+ 0xE684, 0xE685, 0xE686, 0xE687, 0xE688, 0xE689, 0xE68A, 0xE68B, /* 0xB0 */
+ 0xE68C, 0xE68D, 0xE68E, 0xE68F, 0xE690, 0xE691, 0xE692, 0xE693, /* 0xB0 */
+ 0xE694, 0xE695, 0xE696, 0xE697, 0xE698, 0xE699, 0xE69A, 0xE69B, /* 0xC0 */
+ 0xE69C, 0xE69D, 0xF6CB, 0xE69E, 0xE69F, 0xE6A0, 0xE740, 0xE741, /* 0xC0 */
+ 0xE742, 0xE743, 0xE744, 0xE745, 0xE746, 0xE747, 0xF7E9, 0xE748, /* 0xD0 */
+ 0xE749, 0xE74A, 0xE74B, 0xE74C, 0xE74D, 0xE74E, 0xE74F, 0xE750, /* 0xD0 */
+ 0xE751, 0xE752, 0xE753, 0xE754, 0xE755, 0xE756, 0xE757, 0xE758, /* 0xE0 */
+ 0xE759, 0xE75A, 0xE75B, 0xE75C, 0xE75D, 0xE75E, 0xE75F, 0xE760, /* 0xE0 */
+ 0xE761, 0xE762, 0xE763, 0xE764, 0xE765, 0xE766, 0xE767, 0xE768, /* 0xF0 */
+ 0xE769, 0xE76A, 0xE76B, 0xE76C, 0xE76D, 0xE76E, 0xE76F, 0xE770 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE771, 0xE772, 0xE773, 0xE774, 0xE775, 0xE776, 0xE777, 0xE778, /* 0x00 */
+ 0xE779, 0xE77A, 0xE77B, 0xE77C, 0xE77D, 0xE77E, 0xE780, 0xE781, /* 0x00 */
+ 0xE782, 0xE783, 0xE784, 0xE785, 0xE786, 0xE787, 0xE788, 0xE789, /* 0x10 */
+ 0xE78A, 0xE78B, 0xE78C, 0xE78D, 0xE78E, 0xE78F, 0xE790, 0xE791, /* 0x10 */
+ 0xE792, 0xE793, 0xE794, 0xE795, 0xE796, 0xE797, 0xE798, 0xE799, /* 0x20 */
+ 0xE79A, 0xE79B, 0xE79C, 0xE79D, 0xE79E, 0xE79F, 0xE7A0, 0xE840, /* 0x20 */
+ 0xE841, 0xE842, 0xE843, 0xE844, 0xE845, 0xE846, 0xE847, 0xE848, /* 0x30 */
+ 0xE849, 0xE84A, 0xE84B, 0xE84C, 0xE84D, 0xE84E, 0xF6CD, 0xE84F, /* 0x30 */
+ 0xE850, 0xE851, 0xE852, 0xE853, 0xE854, 0xE855, 0xE856, 0xE857, /* 0x40 */
+ 0xE858, 0xE859, 0xE85A, 0xE85B, 0xE85C, 0xE85D, 0xE85E, 0xE85F, /* 0x40 */
+ 0xE860, 0xE861, 0xE862, 0xE863, 0xE864, 0xE865, 0xE866, 0xE867, /* 0x50 */
+ 0xE868, 0xE869, 0xE86A, 0xE86B, 0xE86C, 0xE86D, 0xE86E, 0xE86F, /* 0x50 */
+ 0xE870, 0xE871, 0xE872, 0xE873, 0xE874, 0xE875, 0xE876, 0xE877, /* 0x60 */
+ 0xE878, 0xE879, 0xE87A, 0xF6CE, 0xE87B, 0xE87C, 0xE87D, 0xE87E, /* 0x60 */
+ 0xE880, 0xE881, 0xE882, 0xE883, 0xE884, 0xE885, 0xE886, 0xE887, /* 0x70 */
+ 0xE888, 0xE889, 0xE88A, 0xE88B, 0xE88C, 0xE88D, 0xE88E, 0xE88F, /* 0x70 */
+ 0xE890, 0xE891, 0xE892, 0xE893, 0xE894, 0xEEC4, 0xEEC5, 0xEEC6, /* 0x80 */
+ 0xD5EB, 0xB6A4, 0xEEC8, 0xEEC7, 0xEEC9, 0xEECA, 0xC7A5, 0xEECB, /* 0x80 */
+ 0xEECC, 0xE895, 0xB7B0, 0xB5F6, 0xEECD, 0xEECF, 0xE896, 0xEECE, /* 0x90 */
+ 0xE897, 0xB8C6, 0xEED0, 0xEED1, 0xEED2, 0xB6DB, 0xB3AE, 0xD6D3, /* 0x90 */
+ 0xC4C6, 0xB1B5, 0xB8D6, 0xEED3, 0xEED4, 0xD4BF, 0xC7D5, 0xBEFB, /* 0xA0 */
+ 0xCED9, 0xB9B3, 0xEED6, 0xEED5, 0xEED8, 0xEED7, 0xC5A5, 0xEED9, /* 0xA0 */
+ 0xEEDA, 0xC7AE, 0xEEDB, 0xC7AF, 0xEEDC, 0xB2A7, 0xEEDD, 0xEEDE, /* 0xB0 */
+ 0xEEDF, 0xEEE0, 0xEEE1, 0xD7EA, 0xEEE2, 0xEEE3, 0xBCD8, 0xEEE4, /* 0xB0 */
+ 0xD3CB, 0xCCFA, 0xB2AC, 0xC1E5, 0xEEE5, 0xC7A6, 0xC3AD, 0xE898, /* 0xC0 */
+ 0xEEE6, 0xEEE7, 0xEEE8, 0xEEE9, 0xEEEA, 0xEEEB, 0xEEEC, 0xE899, /* 0xC0 */
+ 0xEEED, 0xEEEE, 0xEEEF, 0xE89A, 0xE89B, 0xEEF0, 0xEEF1, 0xEEF2, /* 0xD0 */
+ 0xEEF4, 0xEEF3, 0xE89C, 0xEEF5, 0xCDAD, 0xC2C1, 0xEEF6, 0xEEF7, /* 0xD0 */
+ 0xEEF8, 0xD5A1, 0xEEF9, 0xCFB3, 0xEEFA, 0xEEFB, 0xE89D, 0xEEFC, /* 0xE0 */
+ 0xEEFD, 0xEFA1, 0xEEFE, 0xEFA2, 0xB8F5, 0xC3FA, 0xEFA3, 0xEFA4, /* 0xE0 */
+ 0xBDC2, 0xD2BF, 0xB2F9, 0xEFA5, 0xEFA6, 0xEFA7, 0xD2F8, 0xEFA8, /* 0xF0 */
+ 0xD6FD, 0xEFA9, 0xC6CC, 0xE89E, 0xEFAA, 0xEFAB, 0xC1B4, 0xEFAC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFFA, 0xCBF8, 0xEFAE, 0xEFAD, 0xB3FA, 0xB9F8, 0xEFAF, 0xEFB0, /* 0x00 */
+ 0xD0E2, 0xEFB1, 0xEFB2, 0xB7E6, 0xD0BF, 0xEFB3, 0xEFB4, 0xEFB5, /* 0x00 */
+ 0xC8F1, 0xCCE0, 0xEFB6, 0xEFB7, 0xEFB8, 0xEFB9, 0xEFBA, 0xD5E0, /* 0x10 */
+ 0xEFBB, 0xB4ED, 0xC3AA, 0xEFBC, 0xE89F, 0xEFBD, 0xEFBE, 0xEFBF, /* 0x10 */
+ 0xE8A0, 0xCEFD, 0xEFC0, 0xC2E0, 0xB4B8, 0xD7B6, 0xBDF5, 0xE940, /* 0x20 */
+ 0xCFC7, 0xEFC3, 0xEFC1, 0xEFC2, 0xEFC4, 0xB6A7, 0xBCFC, 0xBEE2, /* 0x20 */
+ 0xC3CC, 0xEFC5, 0xEFC6, 0xE941, 0xEFC7, 0xEFCF, 0xEFC8, 0xEFC9, /* 0x30 */
+ 0xEFCA, 0xC7C2, 0xEFF1, 0xB6CD, 0xEFCB, 0xE942, 0xEFCC, 0xEFCD, /* 0x30 */
+ 0xB6C6, 0xC3BE, 0xEFCE, 0xE943, 0xEFD0, 0xEFD1, 0xEFD2, 0xD5F2, /* 0x40 */
+ 0xE944, 0xEFD3, 0xC4F7, 0xE945, 0xEFD4, 0xC4F8, 0xEFD5, 0xEFD6, /* 0x40 */
+ 0xB8E4, 0xB0F7, 0xEFD7, 0xEFD8, 0xEFD9, 0xE946, 0xEFDA, 0xEFDB, /* 0x50 */
+ 0xEFDC, 0xEFDD, 0xE947, 0xEFDE, 0xBEB5, 0xEFE1, 0xEFDF, 0xEFE0, /* 0x50 */
+ 0xE948, 0xEFE2, 0xEFE3, 0xC1CD, 0xEFE4, 0xEFE5, 0xEFE6, 0xEFE7, /* 0x60 */
+ 0xEFE8, 0xEFE9, 0xEFEA, 0xEFEB, 0xEFEC, 0xC0D8, 0xE949, 0xEFED, /* 0x60 */
+ 0xC1AD, 0xEFEE, 0xEFEF, 0xEFF0, 0xE94A, 0xE94B, 0xCFE2, 0xE94C, /* 0x70 */
+ 0xE94D, 0xE94E, 0xE94F, 0xE950, 0xE951, 0xE952, 0xE953, 0xB3A4, /* 0x70 */
+ 0xE954, 0xE955, 0xE956, 0xE957, 0xE958, 0xE959, 0xE95A, 0xE95B, /* 0x80 */
+ 0xE95C, 0xE95D, 0xE95E, 0xE95F, 0xE960, 0xE961, 0xE962, 0xE963, /* 0x80 */
+ 0xE964, 0xE965, 0xE966, 0xE967, 0xE968, 0xE969, 0xE96A, 0xE96B, /* 0x90 */
+ 0xE96C, 0xE96D, 0xE96E, 0xE96F, 0xE970, 0xE971, 0xE972, 0xE973, /* 0x90 */
+ 0xE974, 0xE975, 0xE976, 0xE977, 0xE978, 0xE979, 0xE97A, 0xE97B, /* 0xA0 */
+ 0xE97C, 0xE97D, 0xE97E, 0xE980, 0xE981, 0xE982, 0xE983, 0xE984, /* 0xA0 */
+ 0xE985, 0xE986, 0xE987, 0xE988, 0xE989, 0xE98A, 0xE98B, 0xE98C, /* 0xB0 */
+ 0xE98D, 0xE98E, 0xE98F, 0xE990, 0xE991, 0xE992, 0xE993, 0xE994, /* 0xB0 */
+ 0xE995, 0xE996, 0xE997, 0xE998, 0xE999, 0xE99A, 0xE99B, 0xE99C, /* 0xC0 */
+ 0xE99D, 0xE99E, 0xE99F, 0xE9A0, 0xEA40, 0xEA41, 0xEA42, 0xEA43, /* 0xC0 */
+ 0xEA44, 0xEA45, 0xEA46, 0xEA47, 0xEA48, 0xEA49, 0xEA4A, 0xEA4B, /* 0xD0 */
+ 0xEA4C, 0xEA4D, 0xEA4E, 0xEA4F, 0xEA50, 0xEA51, 0xEA52, 0xEA53, /* 0xD0 */
+ 0xEA54, 0xEA55, 0xEA56, 0xEA57, 0xEA58, 0xEA59, 0xEA5A, 0xEA5B, /* 0xE0 */
+ 0xC3C5, 0xE3C5, 0xC9C1, 0xE3C6, 0xEA5C, 0xB1D5, 0xCECA, 0xB4B3, /* 0xE0 */
+ 0xC8F2, 0xE3C7, 0xCFD0, 0xE3C8, 0xBCE4, 0xE3C9, 0xE3CA, 0xC3C6, /* 0xF0 */
+ 0xD5A2, 0xC4D6, 0xB9EB, 0xCEC5, 0xE3CB, 0xC3F6, 0xE3CC, 0xEA5D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB7A7, 0xB8F3, 0xBAD2, 0xE3CD, 0xE3CE, 0xD4C4, 0xE3CF, 0xEA5E, /* 0x00 */
+ 0xE3D0, 0xD1CB, 0xE3D1, 0xE3D2, 0xE3D3, 0xE3D4, 0xD1D6, 0xE3D5, /* 0x00 */
+ 0xB2FB, 0xC0BB, 0xE3D6, 0xEA5F, 0xC0AB, 0xE3D7, 0xE3D8, 0xE3D9, /* 0x10 */
+ 0xEA60, 0xE3DA, 0xE3DB, 0xEA61, 0xB8B7, 0xDAE2, 0xEA62, 0xB6D3, /* 0x10 */
+ 0xEA63, 0xDAE4, 0xDAE3, 0xEA64, 0xEA65, 0xEA66, 0xEA67, 0xEA68, /* 0x20 */
+ 0xEA69, 0xEA6A, 0xDAE6, 0xEA6B, 0xEA6C, 0xEA6D, 0xC8EE, 0xEA6E, /* 0x20 */
+ 0xEA6F, 0xDAE5, 0xB7C0, 0xD1F4, 0xD2F5, 0xD5F3, 0xBDD7, 0xEA70, /* 0x30 */
+ 0xEA71, 0xEA72, 0xEA73, 0xD7E8, 0xDAE8, 0xDAE7, 0xEA74, 0xB0A2, /* 0x30 */
+ 0xCDD3, 0xEA75, 0xDAE9, 0xEA76, 0xB8BD, 0xBCCA, 0xC2BD, 0xC2A4, /* 0x40 */
+ 0xB3C2, 0xDAEA, 0xEA77, 0xC2AA, 0xC4B0, 0xBDB5, 0xEA78, 0xEA79, /* 0x40 */
+ 0xCFDE, 0xEA7A, 0xEA7B, 0xEA7C, 0xDAEB, 0xC9C2, 0xEA7D, 0xEA7E, /* 0x50 */
+ 0xEA80, 0xEA81, 0xEA82, 0xB1DD, 0xEA83, 0xEA84, 0xEA85, 0xDAEC, /* 0x50 */
+ 0xEA86, 0xB6B8, 0xD4BA, 0xEA87, 0xB3FD, 0xEA88, 0xEA89, 0xDAED, /* 0x60 */
+ 0xD4C9, 0xCFD5, 0xC5E3, 0xEA8A, 0xDAEE, 0xEA8B, 0xEA8C, 0xEA8D, /* 0x60 */
+ 0xEA8E, 0xEA8F, 0xDAEF, 0xEA90, 0xDAF0, 0xC1EA, 0xCCD5, 0xCFDD, /* 0x70 */
+ 0xEA91, 0xEA92, 0xEA93, 0xEA94, 0xEA95, 0xEA96, 0xEA97, 0xEA98, /* 0x70 */
+ 0xEA99, 0xEA9A, 0xEA9B, 0xEA9C, 0xEA9D, 0xD3E7, 0xC2A1, 0xEA9E, /* 0x80 */
+ 0xDAF1, 0xEA9F, 0xEAA0, 0xCBE5, 0xEB40, 0xDAF2, 0xEB41, 0xCBE6, /* 0x80 */
+ 0xD2FE, 0xEB42, 0xEB43, 0xEB44, 0xB8F4, 0xEB45, 0xEB46, 0xDAF3, /* 0x90 */
+ 0xB0AF, 0xCFB6, 0xEB47, 0xEB48, 0xD5CF, 0xEB49, 0xEB4A, 0xEB4B, /* 0x90 */
+ 0xEB4C, 0xEB4D, 0xEB4E, 0xEB4F, 0xEB50, 0xEB51, 0xEB52, 0xCBED, /* 0xA0 */
+ 0xEB53, 0xEB54, 0xEB55, 0xEB56, 0xEB57, 0xEB58, 0xEB59, 0xEB5A, /* 0xA0 */
+ 0xDAF4, 0xEB5B, 0xEB5C, 0xE3C4, 0xEB5D, 0xEB5E, 0xC1A5, 0xEB5F, /* 0xB0 */
+ 0xEB60, 0xF6BF, 0xEB61, 0xEB62, 0xF6C0, 0xF6C1, 0xC4D1, 0xEB63, /* 0xB0 */
+ 0xC8B8, 0xD1E3, 0xEB64, 0xEB65, 0xD0DB, 0xD1C5, 0xBCAF, 0xB9CD, /* 0xC0 */
+ 0xEB66, 0xEFF4, 0xEB67, 0xEB68, 0xB4C6, 0xD3BA, 0xF6C2, 0xB3FB, /* 0xC0 */
+ 0xEB69, 0xEB6A, 0xF6C3, 0xEB6B, 0xEB6C, 0xB5F1, 0xEB6D, 0xEB6E, /* 0xD0 */
+ 0xEB6F, 0xEB70, 0xEB71, 0xEB72, 0xEB73, 0xEB74, 0xEB75, 0xEB76, /* 0xD0 */
+ 0xF6C5, 0xEB77, 0xEB78, 0xEB79, 0xEB7A, 0xEB7B, 0xEB7C, 0xEB7D, /* 0xE0 */
+ 0xD3EA, 0xF6A7, 0xD1A9, 0xEB7E, 0xEB80, 0xEB81, 0xEB82, 0xF6A9, /* 0xE0 */
+ 0xEB83, 0xEB84, 0xEB85, 0xF6A8, 0xEB86, 0xEB87, 0xC1E3, 0xC0D7, /* 0xF0 */
+ 0xEB88, 0xB1A2, 0xEB89, 0xEB8A, 0xEB8B, 0xEB8C, 0xCEED, 0xEB8D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD0E8, 0xF6AB, 0xEB8E, 0xEB8F, 0xCFF6, 0xEB90, 0xF6AA, 0xD5F0, /* 0x00 */
+ 0xF6AC, 0xC3B9, 0xEB91, 0xEB92, 0xEB93, 0xBBF4, 0xF6AE, 0xF6AD, /* 0x00 */
+ 0xEB94, 0xEB95, 0xEB96, 0xC4DE, 0xEB97, 0xEB98, 0xC1D8, 0xEB99, /* 0x10 */
+ 0xEB9A, 0xEB9B, 0xEB9C, 0xEB9D, 0xCBAA, 0xEB9E, 0xCFBC, 0xEB9F, /* 0x10 */
+ 0xEBA0, 0xEC40, 0xEC41, 0xEC42, 0xEC43, 0xEC44, 0xEC45, 0xEC46, /* 0x20 */
+ 0xEC47, 0xEC48, 0xF6AF, 0xEC49, 0xEC4A, 0xF6B0, 0xEC4B, 0xEC4C, /* 0x20 */
+ 0xF6B1, 0xEC4D, 0xC2B6, 0xEC4E, 0xEC4F, 0xEC50, 0xEC51, 0xEC52, /* 0x30 */
+ 0xB0D4, 0xC5F9, 0xEC53, 0xEC54, 0xEC55, 0xEC56, 0xF6B2, 0xEC57, /* 0x30 */
+ 0xEC58, 0xEC59, 0xEC5A, 0xEC5B, 0xEC5C, 0xEC5D, 0xEC5E, 0xEC5F, /* 0x40 */
+ 0xEC60, 0xEC61, 0xEC62, 0xEC63, 0xEC64, 0xEC65, 0xEC66, 0xEC67, /* 0x40 */
+ 0xEC68, 0xEC69, 0xC7E0, 0xF6A6, 0xEC6A, 0xEC6B, 0xBEB8, 0xEC6C, /* 0x50 */
+ 0xEC6D, 0xBEB2, 0xEC6E, 0xB5E5, 0xEC6F, 0xEC70, 0xB7C7, 0xEC71, /* 0x50 */
+ 0xBFBF, 0xC3D2, 0xC3E6, 0xEC72, 0xEC73, 0xD8CC, 0xEC74, 0xEC75, /* 0x60 */
+ 0xEC76, 0xB8EF, 0xEC77, 0xEC78, 0xEC79, 0xEC7A, 0xEC7B, 0xEC7C, /* 0x60 */
+ 0xEC7D, 0xEC7E, 0xEC80, 0xBDF9, 0xD1A5, 0xEC81, 0xB0D0, 0xEC82, /* 0x70 */
+ 0xEC83, 0xEC84, 0xEC85, 0xEC86, 0xF7B0, 0xEC87, 0xEC88, 0xEC89, /* 0x70 */
+ 0xEC8A, 0xEC8B, 0xEC8C, 0xEC8D, 0xEC8E, 0xF7B1, 0xEC8F, 0xEC90, /* 0x80 */
+ 0xEC91, 0xEC92, 0xEC93, 0xD0AC, 0xEC94, 0xB0B0, 0xEC95, 0xEC96, /* 0x80 */
+ 0xEC97, 0xF7B2, 0xF7B3, 0xEC98, 0xF7B4, 0xEC99, 0xEC9A, 0xEC9B, /* 0x90 */
+ 0xC7CA, 0xEC9C, 0xEC9D, 0xEC9E, 0xEC9F, 0xECA0, 0xED40, 0xED41, /* 0x90 */
+ 0xBECF, 0xED42, 0xED43, 0xF7B7, 0xED44, 0xED45, 0xED46, 0xED47, /* 0xA0 */
+ 0xED48, 0xED49, 0xED4A, 0xF7B6, 0xED4B, 0xB1DE, 0xED4C, 0xF7B5, /* 0xA0 */
+ 0xED4D, 0xED4E, 0xF7B8, 0xED4F, 0xF7B9, 0xED50, 0xED51, 0xED52, /* 0xB0 */
+ 0xED53, 0xED54, 0xED55, 0xED56, 0xED57, 0xED58, 0xED59, 0xED5A, /* 0xB0 */
+ 0xED5B, 0xED5C, 0xED5D, 0xED5E, 0xED5F, 0xED60, 0xED61, 0xED62, /* 0xC0 */
+ 0xED63, 0xED64, 0xED65, 0xED66, 0xED67, 0xED68, 0xED69, 0xED6A, /* 0xC0 */
+ 0xED6B, 0xED6C, 0xED6D, 0xED6E, 0xED6F, 0xED70, 0xED71, 0xED72, /* 0xD0 */
+ 0xED73, 0xED74, 0xED75, 0xED76, 0xED77, 0xED78, 0xED79, 0xED7A, /* 0xD0 */
+ 0xED7B, 0xED7C, 0xED7D, 0xED7E, 0xED80, 0xED81, 0xCEA4, 0xC8CD, /* 0xE0 */
+ 0xED82, 0xBAAB, 0xE8B8, 0xE8B9, 0xE8BA, 0xBEC2, 0xED83, 0xED84, /* 0xE0 */
+ 0xED85, 0xED86, 0xED87, 0xD2F4, 0xED88, 0xD4CF, 0xC9D8, 0xED89, /* 0xF0 */
+ 0xED8A, 0xED8B, 0xED8C, 0xED8D, 0xED8E, 0xED8F, 0xED90, 0xED91 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xED92, 0xED93, 0xED94, 0xED95, 0xED96, 0xED97, 0xED98, 0xED99, /* 0x00 */
+ 0xED9A, 0xED9B, 0xED9C, 0xED9D, 0xED9E, 0xED9F, 0xEDA0, 0xEE40, /* 0x00 */
+ 0xEE41, 0xEE42, 0xEE43, 0xEE44, 0xEE45, 0xEE46, 0xEE47, 0xEE48, /* 0x10 */
+ 0xEE49, 0xEE4A, 0xEE4B, 0xEE4C, 0xEE4D, 0xEE4E, 0xEE4F, 0xEE50, /* 0x10 */
+ 0xEE51, 0xEE52, 0xEE53, 0xEE54, 0xEE55, 0xEE56, 0xEE57, 0xEE58, /* 0x20 */
+ 0xEE59, 0xEE5A, 0xEE5B, 0xEE5C, 0xEE5D, 0xEE5E, 0xEE5F, 0xEE60, /* 0x20 */
+ 0xEE61, 0xEE62, 0xEE63, 0xEE64, 0xEE65, 0xEE66, 0xEE67, 0xEE68, /* 0x30 */
+ 0xEE69, 0xEE6A, 0xEE6B, 0xEE6C, 0xEE6D, 0xEE6E, 0xEE6F, 0xEE70, /* 0x30 */
+ 0xEE71, 0xEE72, 0xEE73, 0xEE74, 0xEE75, 0xEE76, 0xEE77, 0xEE78, /* 0x40 */
+ 0xEE79, 0xEE7A, 0xEE7B, 0xEE7C, 0xEE7D, 0xEE7E, 0xEE80, 0xEE81, /* 0x40 */
+ 0xEE82, 0xEE83, 0xEE84, 0xEE85, 0xEE86, 0xEE87, 0xEE88, 0xEE89, /* 0x50 */
+ 0xEE8A, 0xEE8B, 0xEE8C, 0xEE8D, 0xEE8E, 0xEE8F, 0xEE90, 0xEE91, /* 0x50 */
+ 0xEE92, 0xEE93, 0xEE94, 0xEE95, 0xEE96, 0xEE97, 0xEE98, 0xEE99, /* 0x60 */
+ 0xEE9A, 0xEE9B, 0xEE9C, 0xEE9D, 0xEE9E, 0xEE9F, 0xEEA0, 0xEF40, /* 0x60 */
+ 0xEF41, 0xEF42, 0xEF43, 0xEF44, 0xEF45, 0xD2B3, 0xB6A5, 0xC7EA, /* 0x70 */
+ 0xF1FC, 0xCFEE, 0xCBB3, 0xD0EB, 0xE7EF, 0xCDE7, 0xB9CB, 0xB6D9, /* 0x70 */
+ 0xF1FD, 0xB0E4, 0xCBCC, 0xF1FE, 0xD4A4, 0xC2AD, 0xC1EC, 0xC6C4, /* 0x80 */
+ 0xBEB1, 0xF2A1, 0xBCD5, 0xEF46, 0xF2A2, 0xF2A3, 0xEF47, 0xF2A4, /* 0x80 */
+ 0xD2C3, 0xC6B5, 0xEF48, 0xCDC7, 0xF2A5, 0xEF49, 0xD3B1, 0xBFC5, /* 0x90 */
+ 0xCCE2, 0xEF4A, 0xF2A6, 0xF2A7, 0xD1D5, 0xB6EE, 0xF2A8, 0xF2A9, /* 0x90 */
+ 0xB5DF, 0xF2AA, 0xF2AB, 0xEF4B, 0xB2FC, 0xF2AC, 0xF2AD, 0xC8A7, /* 0xA0 */
+ 0xEF4C, 0xEF4D, 0xEF4E, 0xEF4F, 0xEF50, 0xEF51, 0xEF52, 0xEF53, /* 0xA0 */
+ 0xEF54, 0xEF55, 0xEF56, 0xEF57, 0xEF58, 0xEF59, 0xEF5A, 0xEF5B, /* 0xB0 */
+ 0xEF5C, 0xEF5D, 0xEF5E, 0xEF5F, 0xEF60, 0xEF61, 0xEF62, 0xEF63, /* 0xB0 */
+ 0xEF64, 0xEF65, 0xEF66, 0xEF67, 0xEF68, 0xEF69, 0xEF6A, 0xEF6B, /* 0xC0 */
+ 0xEF6C, 0xEF6D, 0xEF6E, 0xEF6F, 0xEF70, 0xEF71, 0xB7E7, 0xEF72, /* 0xC0 */
+ 0xEF73, 0xECA9, 0xECAA, 0xECAB, 0xEF74, 0xECAC, 0xEF75, 0xEF76, /* 0xD0 */
+ 0xC6AE, 0xECAD, 0xECAE, 0xEF77, 0xEF78, 0xEF79, 0xB7C9, 0xCAB3, /* 0xD0 */
+ 0xEF7A, 0xEF7B, 0xEF7C, 0xEF7D, 0xEF7E, 0xEF80, 0xEF81, 0xE2B8, /* 0xE0 */
+ 0xF7CF, 0xEF82, 0xEF83, 0xEF84, 0xEF85, 0xEF86, 0xEF87, 0xEF88, /* 0xE0 */
+ 0xEF89, 0xEF8A, 0xEF8B, 0xEF8C, 0xEF8D, 0xEF8E, 0xEF8F, 0xEF90, /* 0xF0 */
+ 0xEF91, 0xEF92, 0xEF93, 0xEF94, 0xEF95, 0xEF96, 0xEF97, 0xEF98 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEF99, 0xEF9A, 0xEF9B, 0xEF9C, 0xEF9D, 0xEF9E, 0xEF9F, 0xEFA0, /* 0x00 */
+ 0xF040, 0xF041, 0xF042, 0xF043, 0xF044, 0xF7D0, 0xF045, 0xF046, /* 0x00 */
+ 0xB2CD, 0xF047, 0xF048, 0xF049, 0xF04A, 0xF04B, 0xF04C, 0xF04D, /* 0x10 */
+ 0xF04E, 0xF04F, 0xF050, 0xF051, 0xF052, 0xF053, 0xF054, 0xF055, /* 0x10 */
+ 0xF056, 0xF057, 0xF058, 0xF059, 0xF05A, 0xF05B, 0xF05C, 0xF05D, /* 0x20 */
+ 0xF05E, 0xF05F, 0xF060, 0xF061, 0xF062, 0xF063, 0xF7D1, 0xF064, /* 0x20 */
+ 0xF065, 0xF066, 0xF067, 0xF068, 0xF069, 0xF06A, 0xF06B, 0xF06C, /* 0x30 */
+ 0xF06D, 0xF06E, 0xF06F, 0xF070, 0xF071, 0xF072, 0xF073, 0xF074, /* 0x30 */
+ 0xF075, 0xF076, 0xF077, 0xF078, 0xF079, 0xF07A, 0xF07B, 0xF07C, /* 0x40 */
+ 0xF07D, 0xF07E, 0xF080, 0xF081, 0xF082, 0xF083, 0xF084, 0xF085, /* 0x40 */
+ 0xF086, 0xF087, 0xF088, 0xF089, 0xF7D3, 0xF7D2, 0xF08A, 0xF08B, /* 0x50 */
+ 0xF08C, 0xF08D, 0xF08E, 0xF08F, 0xF090, 0xF091, 0xF092, 0xF093, /* 0x50 */
+ 0xF094, 0xF095, 0xF096, 0xE2BB, 0xF097, 0xBCA2, 0xF098, 0xE2BC, /* 0x60 */
+ 0xE2BD, 0xE2BE, 0xE2BF, 0xE2C0, 0xE2C1, 0xB7B9, 0xD2FB, 0xBDA4, /* 0x60 */
+ 0xCACE, 0xB1A5, 0xCBC7, 0xF099, 0xE2C2, 0xB6FC, 0xC8C4, 0xE2C3, /* 0x70 */
+ 0xF09A, 0xF09B, 0xBDC8, 0xF09C, 0xB1FD, 0xE2C4, 0xF09D, 0xB6F6, /* 0x70 */
+ 0xE2C5, 0xC4D9, 0xF09E, 0xF09F, 0xE2C6, 0xCFDA, 0xB9DD, 0xE2C7, /* 0x80 */
+ 0xC0A1, 0xF0A0, 0xE2C8, 0xB2F6, 0xF140, 0xE2C9, 0xF141, 0xC1F3, /* 0x80 */
+ 0xE2CA, 0xE2CB, 0xC2F8, 0xE2CC, 0xE2CD, 0xE2CE, 0xCAD7, 0xD8B8, /* 0x90 */
+ 0xD9E5, 0xCFE3, 0xF142, 0xF143, 0xF144, 0xF145, 0xF146, 0xF147, /* 0x90 */
+ 0xF148, 0xF149, 0xF14A, 0xF14B, 0xF14C, 0xF0A5, 0xF14D, 0xF14E, /* 0xA0 */
+ 0xDCB0, 0xF14F, 0xF150, 0xF151, 0xF152, 0xF153, 0xF154, 0xF155, /* 0xA0 */
+ 0xF156, 0xF157, 0xF158, 0xF159, 0xF15A, 0xF15B, 0xF15C, 0xF15D, /* 0xB0 */
+ 0xF15E, 0xF15F, 0xF160, 0xF161, 0xF162, 0xF163, 0xF164, 0xF165, /* 0xB0 */
+ 0xF166, 0xF167, 0xF168, 0xF169, 0xF16A, 0xF16B, 0xF16C, 0xF16D, /* 0xC0 */
+ 0xF16E, 0xF16F, 0xF170, 0xF171, 0xF172, 0xF173, 0xF174, 0xF175, /* 0xC0 */
+ 0xF176, 0xF177, 0xF178, 0xF179, 0xF17A, 0xF17B, 0xF17C, 0xF17D, /* 0xD0 */
+ 0xF17E, 0xF180, 0xF181, 0xF182, 0xF183, 0xF184, 0xF185, 0xF186, /* 0xD0 */
+ 0xF187, 0xF188, 0xF189, 0xF18A, 0xF18B, 0xF18C, 0xF18D, 0xF18E, /* 0xE0 */
+ 0xF18F, 0xF190, 0xF191, 0xF192, 0xF193, 0xF194, 0xF195, 0xF196, /* 0xE0 */
+ 0xF197, 0xF198, 0xF199, 0xF19A, 0xF19B, 0xF19C, 0xF19D, 0xF19E, /* 0xF0 */
+ 0xF19F, 0xF1A0, 0xF240, 0xF241, 0xF242, 0xF243, 0xF244, 0xF245 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF246, 0xF247, 0xF248, 0xF249, 0xF24A, 0xF24B, 0xF24C, 0xF24D, /* 0x00 */
+ 0xF24E, 0xF24F, 0xF250, 0xF251, 0xF252, 0xF253, 0xF254, 0xF255, /* 0x00 */
+ 0xF256, 0xF257, 0xF258, 0xF259, 0xF25A, 0xF25B, 0xF25C, 0xF25D, /* 0x10 */
+ 0xF25E, 0xF25F, 0xF260, 0xF261, 0xF262, 0xF263, 0xF264, 0xF265, /* 0x10 */
+ 0xF266, 0xF267, 0xF268, 0xF269, 0xF26A, 0xF26B, 0xF26C, 0xF26D, /* 0x20 */
+ 0xF26E, 0xF26F, 0xF270, 0xF271, 0xF272, 0xF273, 0xF274, 0xF275, /* 0x20 */
+ 0xF276, 0xF277, 0xF278, 0xF279, 0xF27A, 0xF27B, 0xF27C, 0xF27D, /* 0x30 */
+ 0xF27E, 0xF280, 0xF281, 0xF282, 0xF283, 0xF284, 0xF285, 0xF286, /* 0x30 */
+ 0xF287, 0xF288, 0xF289, 0xF28A, 0xF28B, 0xF28C, 0xF28D, 0xF28E, /* 0x40 */
+ 0xF28F, 0xF290, 0xF291, 0xF292, 0xF293, 0xF294, 0xF295, 0xF296, /* 0x40 */
+ 0xF297, 0xF298, 0xF299, 0xF29A, 0xF29B, 0xF29C, 0xF29D, 0xF29E, /* 0x50 */
+ 0xF29F, 0xF2A0, 0xF340, 0xF341, 0xF342, 0xF343, 0xF344, 0xF345, /* 0x50 */
+ 0xF346, 0xF347, 0xF348, 0xF349, 0xF34A, 0xF34B, 0xF34C, 0xF34D, /* 0x60 */
+ 0xF34E, 0xF34F, 0xF350, 0xF351, 0xC2ED, 0xD4A6, 0xCDD4, 0xD1B1, /* 0x60 */
+ 0xB3DB, 0xC7FD, 0xF352, 0xB2B5, 0xC2BF, 0xE6E0, 0xCABB, 0xE6E1, /* 0x70 */
+ 0xE6E2, 0xBED4, 0xE6E3, 0xD7A4, 0xCDD5, 0xE6E5, 0xBCDD, 0xE6E4, /* 0x70 */
+ 0xE6E6, 0xE6E7, 0xC2EE, 0xF353, 0xBDBE, 0xE6E8, 0xC2E6, 0xBAA7, /* 0x80 */
+ 0xE6E9, 0xF354, 0xE6EA, 0xB3D2, 0xD1E9, 0xF355, 0xF356, 0xBFA5, /* 0x80 */
+ 0xE6EB, 0xC6EF, 0xE6EC, 0xE6ED, 0xF357, 0xF358, 0xE6EE, 0xC6AD, /* 0x90 */
+ 0xE6EF, 0xF359, 0xC9A7, 0xE6F0, 0xE6F1, 0xE6F2, 0xE5B9, 0xE6F3, /* 0x90 */
+ 0xE6F4, 0xC2E2, 0xE6F5, 0xE6F6, 0xD6E8, 0xE6F7, 0xF35A, 0xE6F8, /* 0xA0 */
+ 0xB9C7, 0xF35B, 0xF35C, 0xF35D, 0xF35E, 0xF35F, 0xF360, 0xF361, /* 0xA0 */
+ 0xF7BB, 0xF7BA, 0xF362, 0xF363, 0xF364, 0xF365, 0xF7BE, 0xF7BC, /* 0xB0 */
+ 0xBAA1, 0xF366, 0xF7BF, 0xF367, 0xF7C0, 0xF368, 0xF369, 0xF36A, /* 0xB0 */
+ 0xF7C2, 0xF7C1, 0xF7C4, 0xF36B, 0xF36C, 0xF7C3, 0xF36D, 0xF36E, /* 0xC0 */
+ 0xF36F, 0xF370, 0xF371, 0xF7C5, 0xF7C6, 0xF372, 0xF373, 0xF374, /* 0xC0 */
+ 0xF375, 0xF7C7, 0xF376, 0xCBE8, 0xF377, 0xF378, 0xF379, 0xF37A, /* 0xD0 */
+ 0xB8DF, 0xF37B, 0xF37C, 0xF37D, 0xF37E, 0xF380, 0xF381, 0xF7D4, /* 0xD0 */
+ 0xF382, 0xF7D5, 0xF383, 0xF384, 0xF385, 0xF386, 0xF7D6, 0xF387, /* 0xE0 */
+ 0xF388, 0xF389, 0xF38A, 0xF7D8, 0xF38B, 0xF7DA, 0xF38C, 0xF7D7, /* 0xE0 */
+ 0xF38D, 0xF38E, 0xF38F, 0xF390, 0xF391, 0xF392, 0xF393, 0xF394, /* 0xF0 */
+ 0xF395, 0xF7DB, 0xF396, 0xF7D9, 0xF397, 0xF398, 0xF399, 0xF39A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF39B, 0xF39C, 0xF39D, 0xD7D7, 0xF39E, 0xF39F, 0xF3A0, 0xF440, /* 0x00 */
+ 0xF7DC, 0xF441, 0xF442, 0xF443, 0xF444, 0xF445, 0xF446, 0xF7DD, /* 0x00 */
+ 0xF447, 0xF448, 0xF449, 0xF7DE, 0xF44A, 0xF44B, 0xF44C, 0xF44D, /* 0x10 */
+ 0xF44E, 0xF44F, 0xF450, 0xF451, 0xF452, 0xF453, 0xF454, 0xF7DF, /* 0x10 */
+ 0xF455, 0xF456, 0xF457, 0xF7E0, 0xF458, 0xF459, 0xF45A, 0xF45B, /* 0x20 */
+ 0xF45C, 0xF45D, 0xF45E, 0xF45F, 0xF460, 0xF461, 0xF462, 0xDBCB, /* 0x20 */
+ 0xF463, 0xF464, 0xD8AA, 0xF465, 0xF466, 0xF467, 0xF468, 0xF469, /* 0x30 */
+ 0xF46A, 0xF46B, 0xF46C, 0xE5F7, 0xB9ED, 0xF46D, 0xF46E, 0xF46F, /* 0x30 */
+ 0xF470, 0xBFFD, 0xBBEA, 0xF7C9, 0xC6C7, 0xF7C8, 0xF471, 0xF7CA, /* 0x40 */
+ 0xF7CC, 0xF7CB, 0xF472, 0xF473, 0xF474, 0xF7CD, 0xF475, 0xCEBA, /* 0x40 */
+ 0xF476, 0xF7CE, 0xF477, 0xF478, 0xC4A7, 0xF479, 0xF47A, 0xF47B, /* 0x50 */
+ 0xF47C, 0xF47D, 0xF47E, 0xF480, 0xF481, 0xF482, 0xF483, 0xF484, /* 0x50 */
+ 0xF485, 0xF486, 0xF487, 0xF488, 0xF489, 0xF48A, 0xF48B, 0xF48C, /* 0x60 */
+ 0xF48D, 0xF48E, 0xF48F, 0xF490, 0xF491, 0xF492, 0xF493, 0xF494, /* 0x60 */
+ 0xF495, 0xF496, 0xF497, 0xF498, 0xF499, 0xF49A, 0xF49B, 0xF49C, /* 0x70 */
+ 0xF49D, 0xF49E, 0xF49F, 0xF4A0, 0xF540, 0xF541, 0xF542, 0xF543, /* 0x70 */
+ 0xF544, 0xF545, 0xF546, 0xF547, 0xF548, 0xF549, 0xF54A, 0xF54B, /* 0x80 */
+ 0xF54C, 0xF54D, 0xF54E, 0xF54F, 0xF550, 0xF551, 0xF552, 0xF553, /* 0x80 */
+ 0xF554, 0xF555, 0xF556, 0xF557, 0xF558, 0xF559, 0xF55A, 0xF55B, /* 0x90 */
+ 0xF55C, 0xF55D, 0xF55E, 0xF55F, 0xF560, 0xF561, 0xF562, 0xF563, /* 0x90 */
+ 0xF564, 0xF565, 0xF566, 0xF567, 0xF568, 0xF569, 0xF56A, 0xF56B, /* 0xA0 */
+ 0xF56C, 0xF56D, 0xF56E, 0xF56F, 0xF570, 0xF571, 0xF572, 0xF573, /* 0xA0 */
+ 0xF574, 0xF575, 0xF576, 0xF577, 0xF578, 0xF579, 0xF57A, 0xF57B, /* 0xB0 */
+ 0xF57C, 0xF57D, 0xF57E, 0xF580, 0xF581, 0xF582, 0xF583, 0xF584, /* 0xB0 */
+ 0xF585, 0xF586, 0xF587, 0xF588, 0xF589, 0xF58A, 0xF58B, 0xF58C, /* 0xC0 */
+ 0xF58D, 0xF58E, 0xF58F, 0xF590, 0xF591, 0xF592, 0xF593, 0xF594, /* 0xC0 */
+ 0xF595, 0xF596, 0xF597, 0xF598, 0xF599, 0xF59A, 0xF59B, 0xF59C, /* 0xD0 */
+ 0xF59D, 0xF59E, 0xF59F, 0xF5A0, 0xF640, 0xF641, 0xF642, 0xF643, /* 0xD0 */
+ 0xF644, 0xF645, 0xF646, 0xF647, 0xF648, 0xF649, 0xF64A, 0xF64B, /* 0xE0 */
+ 0xF64C, 0xF64D, 0xF64E, 0xF64F, 0xF650, 0xF651, 0xF652, 0xF653, /* 0xE0 */
+ 0xF654, 0xF655, 0xF656, 0xF657, 0xF658, 0xF659, 0xF65A, 0xF65B, /* 0xF0 */
+ 0xF65C, 0xF65D, 0xF65E, 0xF65F, 0xF660, 0xF661, 0xF662, 0xF663 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF664, 0xF665, 0xF666, 0xF667, 0xF668, 0xF669, 0xF66A, 0xF66B, /* 0x00 */
+ 0xF66C, 0xF66D, 0xF66E, 0xF66F, 0xF670, 0xF671, 0xF672, 0xF673, /* 0x00 */
+ 0xF674, 0xF675, 0xF676, 0xF677, 0xF678, 0xF679, 0xF67A, 0xF67B, /* 0x10 */
+ 0xF67C, 0xF67D, 0xF67E, 0xF680, 0xF681, 0xF682, 0xF683, 0xF684, /* 0x10 */
+ 0xF685, 0xF686, 0xF687, 0xF688, 0xF689, 0xF68A, 0xF68B, 0xF68C, /* 0x20 */
+ 0xF68D, 0xF68E, 0xF68F, 0xF690, 0xF691, 0xF692, 0xF693, 0xF694, /* 0x20 */
+ 0xF695, 0xF696, 0xF697, 0xF698, 0xF699, 0xF69A, 0xF69B, 0xF69C, /* 0x30 */
+ 0xF69D, 0xF69E, 0xF69F, 0xF6A0, 0xF740, 0xF741, 0xF742, 0xF743, /* 0x30 */
+ 0xF744, 0xF745, 0xF746, 0xF747, 0xF748, 0xF749, 0xF74A, 0xF74B, /* 0x40 */
+ 0xF74C, 0xF74D, 0xF74E, 0xF74F, 0xF750, 0xF751, 0xF752, 0xF753, /* 0x40 */
+ 0xF754, 0xF755, 0xF756, 0xF757, 0xF758, 0xF759, 0xF75A, 0xF75B, /* 0x50 */
+ 0xF75C, 0xF75D, 0xF75E, 0xF75F, 0xF760, 0xF761, 0xF762, 0xF763, /* 0x50 */
+ 0xF764, 0xF765, 0xF766, 0xF767, 0xF768, 0xF769, 0xF76A, 0xF76B, /* 0x60 */
+ 0xF76C, 0xF76D, 0xF76E, 0xF76F, 0xF770, 0xF771, 0xF772, 0xF773, /* 0x60 */
+ 0xF774, 0xF775, 0xF776, 0xF777, 0xF778, 0xF779, 0xF77A, 0xF77B, /* 0x70 */
+ 0xF77C, 0xF77D, 0xF77E, 0xF780, 0xD3E3, 0xF781, 0xF782, 0xF6CF, /* 0x70 */
+ 0xF783, 0xC2B3, 0xF6D0, 0xF784, 0xF785, 0xF6D1, 0xF6D2, 0xF6D3, /* 0x80 */
+ 0xF6D4, 0xF786, 0xF787, 0xF6D6, 0xF788, 0xB1AB, 0xF6D7, 0xF789, /* 0x80 */
+ 0xF6D8, 0xF6D9, 0xF6DA, 0xF78A, 0xF6DB, 0xF6DC, 0xF78B, 0xF78C, /* 0x90 */
+ 0xF78D, 0xF78E, 0xF6DD, 0xF6DE, 0xCFCA, 0xF78F, 0xF6DF, 0xF6E0, /* 0x90 */
+ 0xF6E1, 0xF6E2, 0xF6E3, 0xF6E4, 0xC0F0, 0xF6E5, 0xF6E6, 0xF6E7, /* 0xA0 */
+ 0xF6E8, 0xF6E9, 0xF790, 0xF6EA, 0xF791, 0xF6EB, 0xF6EC, 0xF792, /* 0xA0 */
+ 0xF6ED, 0xF6EE, 0xF6EF, 0xF6F0, 0xF6F1, 0xF6F2, 0xF6F3, 0xF6F4, /* 0xB0 */
+ 0xBEA8, 0xF793, 0xF6F5, 0xF6F6, 0xF6F7, 0xF6F8, 0xF794, 0xF795, /* 0xB0 */
+ 0xF796, 0xF797, 0xF798, 0xC8FA, 0xF6F9, 0xF6FA, 0xF6FB, 0xF6FC, /* 0xC0 */
+ 0xF799, 0xF79A, 0xF6FD, 0xF6FE, 0xF7A1, 0xF7A2, 0xF7A3, 0xF7A4, /* 0xC0 */
+ 0xF7A5, 0xF79B, 0xF79C, 0xF7A6, 0xF7A7, 0xF7A8, 0xB1EE, 0xF7A9, /* 0xD0 */
+ 0xF7AA, 0xF7AB, 0xF79D, 0xF79E, 0xF7AC, 0xF7AD, 0xC1DB, 0xF7AE, /* 0xD0 */
+ 0xF79F, 0xF7A0, 0xF7AF, 0xF840, 0xF841, 0xF842, 0xF843, 0xF844, /* 0xE0 */
+ 0xF845, 0xF846, 0xF847, 0xF848, 0xF849, 0xF84A, 0xF84B, 0xF84C, /* 0xE0 */
+ 0xF84D, 0xF84E, 0xF84F, 0xF850, 0xF851, 0xF852, 0xF853, 0xF854, /* 0xF0 */
+ 0xF855, 0xF856, 0xF857, 0xF858, 0xF859, 0xF85A, 0xF85B, 0xF85C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF85D, 0xF85E, 0xF85F, 0xF860, 0xF861, 0xF862, 0xF863, 0xF864, /* 0x00 */
+ 0xF865, 0xF866, 0xF867, 0xF868, 0xF869, 0xF86A, 0xF86B, 0xF86C, /* 0x00 */
+ 0xF86D, 0xF86E, 0xF86F, 0xF870, 0xF871, 0xF872, 0xF873, 0xF874, /* 0x10 */
+ 0xF875, 0xF876, 0xF877, 0xF878, 0xF879, 0xF87A, 0xF87B, 0xF87C, /* 0x10 */
+ 0xF87D, 0xF87E, 0xF880, 0xF881, 0xF882, 0xF883, 0xF884, 0xF885, /* 0x20 */
+ 0xF886, 0xF887, 0xF888, 0xF889, 0xF88A, 0xF88B, 0xF88C, 0xF88D, /* 0x20 */
+ 0xF88E, 0xF88F, 0xF890, 0xF891, 0xF892, 0xF893, 0xF894, 0xF895, /* 0x30 */
+ 0xF896, 0xF897, 0xF898, 0xF899, 0xF89A, 0xF89B, 0xF89C, 0xF89D, /* 0x30 */
+ 0xF89E, 0xF89F, 0xF8A0, 0xF940, 0xF941, 0xF942, 0xF943, 0xF944, /* 0x40 */
+ 0xF945, 0xF946, 0xF947, 0xF948, 0xF949, 0xF94A, 0xF94B, 0xF94C, /* 0x40 */
+ 0xF94D, 0xF94E, 0xF94F, 0xF950, 0xF951, 0xF952, 0xF953, 0xF954, /* 0x50 */
+ 0xF955, 0xF956, 0xF957, 0xF958, 0xF959, 0xF95A, 0xF95B, 0xF95C, /* 0x50 */
+ 0xF95D, 0xF95E, 0xF95F, 0xF960, 0xF961, 0xF962, 0xF963, 0xF964, /* 0x60 */
+ 0xF965, 0xF966, 0xF967, 0xF968, 0xF969, 0xF96A, 0xF96B, 0xF96C, /* 0x60 */
+ 0xF96D, 0xF96E, 0xF96F, 0xF970, 0xF971, 0xF972, 0xF973, 0xF974, /* 0x70 */
+ 0xF975, 0xF976, 0xF977, 0xF978, 0xF979, 0xF97A, 0xF97B, 0xF97C, /* 0x70 */
+ 0xF97D, 0xF97E, 0xF980, 0xF981, 0xF982, 0xF983, 0xF984, 0xF985, /* 0x80 */
+ 0xF986, 0xF987, 0xF988, 0xF989, 0xF98A, 0xF98B, 0xF98C, 0xF98D, /* 0x80 */
+ 0xF98E, 0xF98F, 0xF990, 0xF991, 0xF992, 0xF993, 0xF994, 0xF995, /* 0x90 */
+ 0xF996, 0xF997, 0xF998, 0xF999, 0xF99A, 0xF99B, 0xF99C, 0xF99D, /* 0x90 */
+ 0xF99E, 0xF99F, 0xF9A0, 0xFA40, 0xFA41, 0xFA42, 0xFA43, 0xFA44, /* 0xA0 */
+ 0xFA45, 0xFA46, 0xFA47, 0xFA48, 0xFA49, 0xFA4A, 0xFA4B, 0xFA4C, /* 0xA0 */
+ 0xFA4D, 0xFA4E, 0xFA4F, 0xFA50, 0xFA51, 0xFA52, 0xFA53, 0xFA54, /* 0xB0 */
+ 0xFA55, 0xFA56, 0xFA57, 0xFA58, 0xFA59, 0xFA5A, 0xFA5B, 0xFA5C, /* 0xB0 */
+ 0xFA5D, 0xFA5E, 0xFA5F, 0xFA60, 0xFA61, 0xFA62, 0xFA63, 0xFA64, /* 0xC0 */
+ 0xFA65, 0xFA66, 0xFA67, 0xFA68, 0xFA69, 0xFA6A, 0xFA6B, 0xFA6C, /* 0xC0 */
+ 0xFA6D, 0xFA6E, 0xFA6F, 0xFA70, 0xFA71, 0xFA72, 0xFA73, 0xFA74, /* 0xD0 */
+ 0xFA75, 0xFA76, 0xFA77, 0xFA78, 0xFA79, 0xFA7A, 0xFA7B, 0xFA7C, /* 0xD0 */
+ 0xFA7D, 0xFA7E, 0xFA80, 0xFA81, 0xFA82, 0xFA83, 0xFA84, 0xFA85, /* 0xE0 */
+ 0xFA86, 0xFA87, 0xFA88, 0xFA89, 0xFA8A, 0xFA8B, 0xFA8C, 0xFA8D, /* 0xE0 */
+ 0xFA8E, 0xFA8F, 0xFA90, 0xFA91, 0xFA92, 0xFA93, 0xFA94, 0xFA95, /* 0xF0 */
+ 0xFA96, 0xFA97, 0xFA98, 0xFA99, 0xFA9A, 0xFA9B, 0xFA9C, 0xFA9D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFA9E, 0xFA9F, 0xFAA0, 0xFB40, 0xFB41, 0xFB42, 0xFB43, 0xFB44, /* 0x00 */
+ 0xFB45, 0xFB46, 0xFB47, 0xFB48, 0xFB49, 0xFB4A, 0xFB4B, 0xFB4C, /* 0x00 */
+ 0xFB4D, 0xFB4E, 0xFB4F, 0xFB50, 0xFB51, 0xFB52, 0xFB53, 0xFB54, /* 0x10 */
+ 0xFB55, 0xFB56, 0xFB57, 0xFB58, 0xFB59, 0xFB5A, 0xFB5B, 0xC4F1, /* 0x10 */
+ 0xF0AF, 0xBCA6, 0xF0B0, 0xC3F9, 0xFB5C, 0xC5B8, 0xD1BB, 0xFB5D, /* 0x20 */
+ 0xF0B1, 0xF0B2, 0xF0B3, 0xF0B4, 0xF0B5, 0xD1BC, 0xFB5E, 0xD1EC, /* 0x20 */
+ 0xFB5F, 0xF0B7, 0xF0B6, 0xD4A7, 0xFB60, 0xCDD2, 0xF0B8, 0xF0BA, /* 0x30 */
+ 0xF0B9, 0xF0BB, 0xF0BC, 0xFB61, 0xFB62, 0xB8EB, 0xF0BD, 0xBAE8, /* 0x30 */
+ 0xFB63, 0xF0BE, 0xF0BF, 0xBEE9, 0xF0C0, 0xB6EC, 0xF0C1, 0xF0C2, /* 0x40 */
+ 0xF0C3, 0xF0C4, 0xC8B5, 0xF0C5, 0xF0C6, 0xFB64, 0xF0C7, 0xC5F4, /* 0x40 */
+ 0xFB65, 0xF0C8, 0xFB66, 0xFB67, 0xFB68, 0xF0C9, 0xFB69, 0xF0CA, /* 0x50 */
+ 0xF7BD, 0xFB6A, 0xF0CB, 0xF0CC, 0xF0CD, 0xFB6B, 0xF0CE, 0xFB6C, /* 0x50 */
+ 0xFB6D, 0xFB6E, 0xFB6F, 0xF0CF, 0xBAD7, 0xFB70, 0xF0D0, 0xF0D1, /* 0x60 */
+ 0xF0D2, 0xF0D3, 0xF0D4, 0xF0D5, 0xF0D6, 0xF0D8, 0xFB71, 0xFB72, /* 0x60 */
+ 0xD3A5, 0xF0D7, 0xFB73, 0xF0D9, 0xFB74, 0xFB75, 0xFB76, 0xFB77, /* 0x70 */
+ 0xFB78, 0xFB79, 0xFB7A, 0xFB7B, 0xFB7C, 0xFB7D, 0xF5BA, 0xC2B9, /* 0x70 */
+ 0xFB7E, 0xFB80, 0xF7E4, 0xFB81, 0xFB82, 0xFB83, 0xFB84, 0xF7E5, /* 0x80 */
+ 0xF7E6, 0xFB85, 0xFB86, 0xF7E7, 0xFB87, 0xFB88, 0xFB89, 0xFB8A, /* 0x80 */
+ 0xFB8B, 0xFB8C, 0xF7E8, 0xC2B4, 0xFB8D, 0xFB8E, 0xFB8F, 0xFB90, /* 0x90 */
+ 0xFB91, 0xFB92, 0xFB93, 0xFB94, 0xFB95, 0xF7EA, 0xFB96, 0xF7EB, /* 0x90 */
+ 0xFB97, 0xFB98, 0xFB99, 0xFB9A, 0xFB9B, 0xFB9C, 0xC2F3, 0xFB9D, /* 0xA0 */
+ 0xFB9E, 0xFB9F, 0xFBA0, 0xFC40, 0xFC41, 0xFC42, 0xFC43, 0xFC44, /* 0xA0 */
+ 0xFC45, 0xFC46, 0xFC47, 0xFC48, 0xF4F0, 0xFC49, 0xFC4A, 0xFC4B, /* 0xB0 */
+ 0xF4EF, 0xFC4C, 0xFC4D, 0xC2E9, 0xFC4E, 0xF7E1, 0xF7E2, 0xFC4F, /* 0xB0 */
+ 0xFC50, 0xFC51, 0xFC52, 0xFC53, 0xBBC6, 0xFC54, 0xFC55, 0xFC56, /* 0xC0 */
+ 0xFC57, 0xD9E4, 0xFC58, 0xFC59, 0xFC5A, 0xCAF2, 0xC0E8, 0xF0A4, /* 0xC0 */
+ 0xFC5B, 0xBADA, 0xFC5C, 0xFC5D, 0xC7AD, 0xFC5E, 0xFC5F, 0xFC60, /* 0xD0 */
+ 0xC4AC, 0xFC61, 0xFC62, 0xF7EC, 0xF7ED, 0xF7EE, 0xFC63, 0xF7F0, /* 0xD0 */
+ 0xF7EF, 0xFC64, 0xF7F1, 0xFC65, 0xFC66, 0xF7F4, 0xFC67, 0xF7F3, /* 0xE0 */
+ 0xFC68, 0xF7F2, 0xF7F5, 0xFC69, 0xFC6A, 0xFC6B, 0xFC6C, 0xF7F6, /* 0xE0 */
+ 0xFC6D, 0xFC6E, 0xFC6F, 0xFC70, 0xFC71, 0xFC72, 0xFC73, 0xFC74, /* 0xF0 */
+ 0xFC75, 0xEDE9, 0xFC76, 0xEDEA, 0xEDEB, 0xFC77, 0xF6BC, 0xFC78 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFC79, 0xFC7A, 0xFC7B, 0xFC7C, 0xFC7D, 0xFC7E, 0xFC80, 0xFC81, /* 0x00 */
+ 0xFC82, 0xFC83, 0xFC84, 0xF6BD, 0xFC85, 0xF6BE, 0xB6A6, 0xFC86, /* 0x00 */
+ 0xD8BE, 0xFC87, 0xFC88, 0xB9C4, 0xFC89, 0xFC8A, 0xFC8B, 0xD8BB, /* 0x10 */
+ 0xFC8C, 0xDCB1, 0xFC8D, 0xFC8E, 0xFC8F, 0xFC90, 0xFC91, 0xFC92, /* 0x10 */
+ 0xCAF3, 0xFC93, 0xF7F7, 0xFC94, 0xFC95, 0xFC96, 0xFC97, 0xFC98, /* 0x20 */
+ 0xFC99, 0xFC9A, 0xFC9B, 0xFC9C, 0xF7F8, 0xFC9D, 0xFC9E, 0xF7F9, /* 0x20 */
+ 0xFC9F, 0xFCA0, 0xFD40, 0xFD41, 0xFD42, 0xFD43, 0xFD44, 0xF7FB, /* 0x30 */
+ 0xFD45, 0xF7FA, 0xFD46, 0xB1C7, 0xFD47, 0xF7FC, 0xF7FD, 0xFD48, /* 0x30 */
+ 0xFD49, 0xFD4A, 0xFD4B, 0xFD4C, 0xF7FE, 0xFD4D, 0xFD4E, 0xFD4F, /* 0x40 */
+ 0xFD50, 0xFD51, 0xFD52, 0xFD53, 0xFD54, 0xFD55, 0xFD56, 0xFD57, /* 0x40 */
+ 0xC6EB, 0xECB4, 0xFD58, 0xFD59, 0xFD5A, 0xFD5B, 0xFD5C, 0xFD5D, /* 0x50 */
+ 0xFD5E, 0xFD5F, 0xFD60, 0xFD61, 0xFD62, 0xFD63, 0xFD64, 0xFD65, /* 0x50 */
+ 0xFD66, 0xFD67, 0xFD68, 0xFD69, 0xFD6A, 0xFD6B, 0xFD6C, 0xFD6D, /* 0x60 */
+ 0xFD6E, 0xFD6F, 0xFD70, 0xFD71, 0xFD72, 0xFD73, 0xFD74, 0xFD75, /* 0x60 */
+ 0xFD76, 0xFD77, 0xFD78, 0xFD79, 0xFD7A, 0xFD7B, 0xFD7C, 0xFD7D, /* 0x70 */
+ 0xFD7E, 0xFD80, 0xFD81, 0xFD82, 0xFD83, 0xFD84, 0xFD85, 0xB3DD, /* 0x70 */
+ 0xF6B3, 0xFD86, 0xFD87, 0xF6B4, 0xC1E4, 0xF6B5, 0xF6B6, 0xF6B7, /* 0x80 */
+ 0xF6B8, 0xF6B9, 0xF6BA, 0xC8A3, 0xF6BB, 0xFD88, 0xFD89, 0xFD8A, /* 0x80 */
+ 0xFD8B, 0xFD8C, 0xFD8D, 0xFD8E, 0xFD8F, 0xFD90, 0xFD91, 0xFD92, /* 0x90 */
+ 0xFD93, 0xC1FA, 0xB9A8, 0xEDE8, 0xFD94, 0xFD95, 0xFD96, 0xB9EA, /* 0x90 */
+ 0xD9DF, 0xFD97, 0xFD98, 0xFD99, 0xFD9A, 0xFD9B /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLECHINSIMP_F8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0081, 0x0082 /* 0x80 */
+ /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x20 */
+ 0xFD9C, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xFD9D, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xFD9E, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xFD9F, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xFDA0 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_FA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xFE40, 0xFE41, 0xFE42, 0xFE43, /* 0x00 */
+ 0, 0xFE44, 0, 0xFE45, 0xFE46, 0, 0, 0, /* 0x10 */
+ 0xFE47, 0, 0, 0, 0, 0, 0, 0xFE48, /* 0x10 */
+ 0xFE49, 0xFE4A, 0, 0xFE4B, 0xFE4C, 0, 0, 0xFE4D, /* 0x20 */
+ 0xFE4E, 0xFE4F /* 0x20 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_FE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA955, 0xA6F2, 0, 0xA6F4, 0xA6F5, 0xA6E0, 0xA6E1, 0xA6F0, /* 0x30 */
+ 0xA6F1, 0xA6E2, 0xA6E3, 0xA6EE, 0xA6EF, 0xA6E6, 0xA6E7, 0xA6E4, /* 0x30 */
+ 0xA6E5, 0xA6E8, 0xA6E9, 0xA6EA, 0xA6EB, 0, 0, 0, /* 0x40 */
+ 0, 0xA968, 0xA969, 0xA96A, 0xA96B, 0xA96C, 0xA96D, 0xA96E, /* 0x40 */
+ 0xA96F, 0xA970, 0xA971, 0, 0xA972, 0xA973, 0xA974, 0xA975, /* 0x50 */
+ 0, 0xA976, 0xA977, 0xA978, 0xA979, 0xA97A, 0xA97B, 0xA97C, /* 0x50 */
+ 0xA97D, 0xA97E, 0xA980, 0xA981, 0xA982, 0xA983, 0xA984, 0, /* 0x60 */
+ 0xA985, 0xA986, 0xA987, 0xA988 /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_FE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA6F2, 0, 0xA6F4, 0xA6F5, 0xA6E0, 0xA6E1, 0xA6F0, /* 0x30 */
+ 0xA6F1, 0xA6E2, 0xA6E3, 0xA6EE, 0xA6EF, 0xA6E6, 0xA6E7, 0xA6E4, /* 0x30 */
+ 0xA6E5, 0xA6E8, 0xA6E9, 0xA6EA, 0xA6EB /* 0x40 */
+ /* 0x40 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBK_FF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA3A1, 0xA3A2, 0xA3A3, 0xA1E7, 0xA3A5, 0xA3A6, 0xA3A7, /* 0x00 */
+ 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, /* 0x00 */
+ 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, /* 0x10 */
+ 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF, /* 0x10 */
+ 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, 0xA3C5, 0xA3C6, 0xA3C7, /* 0x20 */
+ 0xA3C8, 0xA3C9, 0xA3CA, 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF, /* 0x20 */
+ 0xA3D0, 0xA3D1, 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, 0xA3D7, /* 0x30 */
+ 0xA3D8, 0xA3D9, 0xA3DA, 0xA3DB, 0xA3DC, 0xA3DD, 0xA3DE, 0xA3DF, /* 0x30 */
+ 0xA3E0, 0xA3E1, 0xA3E2, 0xA3E3, 0xA3E4, 0xA3E5, 0xA3E6, 0xA3E7, /* 0x40 */
+ 0xA3E8, 0xA3E9, 0xA3EA, 0xA3EB, 0xA3EC, 0xA3ED, 0xA3EE, 0xA3EF, /* 0x40 */
+ 0xA3F0, 0xA3F1, 0xA3F2, 0xA3F3, 0xA3F4, 0xA3F5, 0xA3F6, 0xA3F7, /* 0x50 */
+ 0xA3F8, 0xA3F9, 0xA3FA, 0xA3FB, 0xA3FC, 0xA3FD, 0xA1AB, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xA1E9, 0xA1EA, 0xA956, 0xA3FE, 0xA957, 0xA3A4 /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_FF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA3A1, 0xA3A2, 0xA3A3, 0xA1E7, 0xA3A5, 0xA3A6, 0xA3A7, /* 0x00 */
+ 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, /* 0x00 */
+ 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, /* 0x10 */
+ 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF, /* 0x10 */
+ 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, 0xA3C5, 0xA3C6, 0xA3C7, /* 0x20 */
+ 0xA3C8, 0xA3C9, 0xA3CA, 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF, /* 0x20 */
+ 0xA3D0, 0xA3D1, 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, 0xA3D7, /* 0x30 */
+ 0xA3D8, 0xA3D9, 0xA3DA, 0xA3DB, 0xA3DC, 0xA3DD, 0xA3DE, 0xA3DF, /* 0x30 */
+ 0xA3E0, 0xA3E1, 0xA3E2, 0xA3E3, 0xA3E4, 0xA3E5, 0xA3E6, 0xA3E7, /* 0x40 */
+ 0xA3E8, 0xA3E9, 0xA3EA, 0xA3EB, 0xA3EC, 0xA3ED, 0xA3EE, 0xA3EF, /* 0x40 */
+ 0xA3F0, 0xA3F1, 0xA3F2, 0xA3F3, 0xA3F4, 0xA3F5, 0xA3F6, 0xA3F7, /* 0x50 */
+ 0xA3F8, 0xA3F9, 0xA3FA, 0xA3FB, 0xA3FC, 0xA3FD, 0xA1AB, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xA1E9, 0xA1EA, 0, 0xA3FE, 0, 0xA3A4, /* 0xE0 */
+ /* 0xE0 */
+};
+
diff --git a/sal/textenc/tcvtscn3.tab b/sal/textenc/tcvtscn3.tab
new file mode 100644
index 000000000..fe1ee73ec
--- /dev/null
+++ b/sal/textenc/tcvtscn3.tab
@@ -0,0 +1,1493 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the DBCS to UniCode tables for the following */
+/* chinese simplified (China) charsets: */
+/* GBT (GB12345) */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x554A, 0x963F, 0x57C3, 0x6328, 0x54CE, 0x5509, 0x54C0, /* 0xA0 */
+ 0x769A, 0x764C, 0x85F9, 0x77EE, 0x827E, 0x7919, 0x611B, 0x9698, /* 0xA0 */
+ 0x978D, 0x6C28, 0x5B89, 0x4FFA, 0x6309, 0x6697, 0x5CB8, 0x80FA, /* 0xB0 */
+ 0x6848, 0x9AAF, 0x6602, 0x76CE, 0x51F9, 0x6556, 0x71AC, 0x7FF1, /* 0xB0 */
+ 0x8956, 0x50B2, 0x5965, 0x61CA, 0x6FB3, 0x82AD, 0x634C, 0x6252, /* 0xC0 */
+ 0x53ED, 0x5427, 0x7B06, 0x516B, 0x75A4, 0x5DF4, 0x62D4, 0x8DCB, /* 0xC0 */
+ 0x9776, 0x628A, 0x8019, 0x58E9, 0x9738, 0x7F77, 0x7238, 0x767D, /* 0xD0 */
+ 0x67CF, 0x767E, 0x64FA, 0x4F70, 0x6557, 0x62DC, 0x7A17, 0x6591, /* 0xD0 */
+ 0x73ED, 0x642C, 0x6273, 0x822C, 0x9812, 0x677F, 0x7248, 0x626E, /* 0xE0 */
+ 0x62CC, 0x4F34, 0x74E3, 0x534A, 0x8FA6, 0x7D46, 0x90A6, 0x5E6B, /* 0xE0 */
+ 0x6886, 0x699C, 0x8180, 0x7D81, 0x68D2, 0x78C5, 0x868C, 0x938A, /* 0xF0 */
+ 0x508D, 0x8B17, 0x82DE, 0x80DE, 0x5305, 0x8912, 0x5265 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8584, 0x96F9, 0x4FDD, 0x5821, 0x98FD, 0x5BF6, 0x62B1, /* 0xA0 */
+ 0x5831, 0x66B4, 0x8C79, 0x9B91, 0x7206, 0x676F, 0x7891, 0x60B2, /* 0xA0 */
+ 0x5351, 0x5317, 0x8F29, 0x80CC, 0x8C9D, 0x92C7, 0x500D, 0x72FD, /* 0xB0 */
+ 0x5099, 0x618A, 0x7119, 0x88AB, 0x5954, 0x82EF, 0x672C, 0x7B28, /* 0xB0 */
+ 0x5D29, 0x7DB3, 0x752D, 0x6CF5, 0x8E66, 0x8FF8, 0x903C, 0x9F3B, /* 0xC0 */
+ 0x6BD4, 0x9119, 0x7B46, 0x5F7C, 0x78A7, 0x84D6, 0x853D, 0x7562, /* 0xC0 */
+ 0x6583, 0x6BD6, 0x5E63, 0x5E87, 0x75F9, 0x9589, 0x655D, 0x5F0A, /* 0xD0 */
+ 0x5FC5, 0x8F9F, 0x58C1, 0x81C2, 0x907F, 0x965B, 0x97AD, 0x908A, /* 0xD0 */
+ 0x7DE8, 0x8CB6, 0x6241, 0x4FBF, 0x8B8A, 0x535E, 0x8FA8, 0x8FAF, /* 0xE0 */
+ 0x8FAE, 0x904D, 0x6A19, 0x5F6A, 0x8198, 0x8868, 0x9C49, 0x618B, /* 0xE0 */
+ 0x522B, 0x765F, 0x5F6C, 0x658C, 0x7015, 0x6FF1, 0x8CD3, 0x64EF, /* 0xF0 */
+ 0x5175, 0x51B0, 0x67C4, 0x4E19, 0x79C9, 0x9905, 0x70B3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x75C5, 0x5E76, 0x73BB, 0x83E0, 0x64AD, 0x64A5, 0x9262, /* 0xA0 */
+ 0x6CE2, 0x535A, 0x52C3, 0x640F, 0x9251, 0x7B94, 0x4F2F, 0x5E1B, /* 0xA0 */
+ 0x8236, 0x8116, 0x818A, 0x6E24, 0x6CCA, 0x99C1, 0x6355, 0x535C, /* 0xB0 */
+ 0x54FA, 0x88DC, 0x57E0, 0x4E0D, 0x5E03, 0x6B65, 0x7C3F, 0x90E8, /* 0xB0 */
+ 0x6016, 0x64E6, 0x731C, 0x88C1, 0x6750, 0x624D, 0x8CA1, 0x776C, /* 0xC0 */
+ 0x8E29, 0x91C7, 0x5F69, 0x83DC, 0x8521, 0x9910, 0x53C3, 0x8836, /* 0xC0 */
+ 0x6B98, 0x615A, 0x6158, 0x71E6, 0x84BC, 0x8259, 0x5009, 0x6EC4, /* 0xD0 */
+ 0x85CF, 0x64CD, 0x7CD9, 0x69FD, 0x66F9, 0x8349, 0x53A0, 0x7B56, /* 0xD0 */
+ 0x5074, 0x518C, 0x6E2C, 0x5C64, 0x8E6D, 0x63D2, 0x53C9, 0x832C, /* 0xE0 */
+ 0x8336, 0x67E5, 0x78B4, 0x643D, 0x5BDF, 0x5C94, 0x5DEE, 0x8A6B, /* 0xE0 */
+ 0x62C6, 0x67F4, 0x8C7A, 0x6519, 0x647B, 0x87EC, 0x995E, 0x8B92, /* 0xF0 */
+ 0x7E8F, 0x93DF, 0x7523, 0x95E1, 0x986B, 0x660C, 0x7316 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5834, 0x5617, 0x5E38, 0x9577, 0x511F, 0x8178, 0x5EE0, /* 0xA0 */
+ 0x655E, 0x66A2, 0x5531, 0x5021, 0x8D85, 0x6284, 0x9214, 0x671D, /* 0xA0 */
+ 0x5632, 0x6F6E, 0x5DE2, 0x5435, 0x7092, 0x8ECA, 0x626F, 0x64A4, /* 0xB0 */
+ 0x63A3, 0x5FB9, 0x6F88, 0x90F4, 0x81E3, 0x8FB0, 0x5875, 0x6668, /* 0xB0 */
+ 0x5FF1, 0x6C89, 0x9673, 0x8D81, 0x896F, 0x6491, 0x7A31, 0x57CE, /* 0xC0 */
+ 0x6A59, 0x6210, 0x5448, 0x4E58, 0x7A0B, 0x61F2, 0x6F84, 0x8AA0, /* 0xC0 */
+ 0x627F, 0x901E, 0x9A01, 0x79E4, 0x5403, 0x75F4, 0x6301, 0x5319, /* 0xD0 */
+ 0x6C60, 0x9072, 0x5F1B, 0x99B3, 0x803B, 0x9F52, 0x4F88, 0x5C3A, /* 0xD0 */
+ 0x8D64, 0x7FC5, 0x65A5, 0x71BE, 0x5145, 0x885D, 0x87F2, 0x5D07, /* 0xE0 */
+ 0x5BF5, 0x62BD, 0x916C, 0x7587, 0x8E8A, 0x7A20, 0x6101, 0x7C4C, /* 0xE0 */
+ 0x4EC7, 0x7DA2, 0x7785, 0x919C, 0x81ED, 0x521D, 0x51FA, 0x6A71, /* 0xF0 */
+ 0x53A8, 0x8E87, 0x92E4, 0x96DB, 0x6EC1, 0x9664, 0x695A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x790E, 0x5132, 0x77D7, 0x6410, 0x89F8, 0x8655, 0x63E3, /* 0xA0 */
+ 0x5DDD, 0x7A7F, 0x693D, 0x50B3, 0x8239, 0x5598, 0x4E32, 0x7621, /* 0xA0 */
+ 0x7A97, 0x5E62, 0x5E8A, 0x95D6, 0x5275, 0x5439, 0x708A, 0x6376, /* 0xB0 */
+ 0x9318, 0x5782, 0x6625, 0x693F, 0x9187, 0x5507, 0x6DF3, 0x7D14, /* 0xB0 */
+ 0x8822, 0x6233, 0x7DBD, 0x75B5, 0x8328, 0x78C1, 0x96CC, 0x8FAD, /* 0xC0 */
+ 0x6148, 0x74F7, 0x8A5E, 0x6B64, 0x523A, 0x8CDC, 0x6B21, 0x8070, /* 0xC0 */
+ 0x8471, 0x56F1, 0x5306, 0x5F9E, 0x53E2, 0x51D1, 0x7C97, 0x918B, /* 0xD0 */
+ 0x7C07, 0x4FC3, 0x8EA5, 0x7BE1, 0x7AC4, 0x6467, 0x5D14, 0x50AC, /* 0xD0 */
+ 0x8106, 0x7601, 0x7CB9, 0x6DEC, 0x7FE0, 0x6751, 0x5B58, 0x5BF8, /* 0xE0 */
+ 0x78CB, 0x64AE, 0x6413, 0x63AA, 0x632B, 0x932F, 0x642D, 0x9054, /* 0xE0 */
+ 0x7B54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6B79, 0x50A3, 0x6234, /* 0xF0 */
+ 0x5E36, 0x6B86, 0x4EE3, 0x8CB8, 0x888B, 0x5F85, 0x902E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6020, 0x803D, 0x64D4, 0x4E39, 0x55AE, 0x9132, 0x64A3, /* 0xA0 */
+ 0x81BD, 0x65E6, 0x6C2E, 0x4F46, 0x619A, 0x6DE1, 0x8A95, 0x5F48, /* 0xA0 */
+ 0x86CB, 0x7576, 0x64CB, 0x9EE8, 0x8569, 0x6A94, 0x5200, 0x6417, /* 0xB0 */
+ 0x8E48, 0x5012, 0x5CF6, 0x79B1, 0x5C0E, 0x5230, 0x7A3B, 0x60BC, /* 0xB0 */
+ 0x9053, 0x76D7, 0x5FB7, 0x5F97, 0x7684, 0x8E6C, 0x71C8, 0x767B, /* 0xC0 */
+ 0x7B49, 0x77AA, 0x51F3, 0x9127, 0x5824, 0x4F4E, 0x6EF4, 0x8FEA, /* 0xC0 */
+ 0x6575, 0x7B1B, 0x72C4, 0x6ECC, 0x7FDF, 0x5AE1, 0x62B5, 0x5E95, /* 0xD0 */
+ 0x5730, 0x8482, 0x7B2C, 0x5E1D, 0x5F1F, 0x905E, 0x7DE0, 0x985B, /* 0xD0 */
+ 0x6382, 0x6EC7, 0x7898, 0x9EDE, 0x5178, 0x975B, 0x588A, 0x96FB, /* 0xE0 */
+ 0x4F43, 0x7538, 0x5E97, 0x60E6, 0x5960, 0x6FB1, 0x6BBF, 0x7889, /* 0xE0 */
+ 0x53FC, 0x96D5, 0x51CB, 0x5201, 0x6389, 0x540A, 0x91E3, 0x8ABF, /* 0xF0 */
+ 0x8DCC, 0x7239, 0x789F, 0x8776, 0x8FED, 0x8ADC, 0x758A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E01, 0x76EF, 0x53EE, 0x91D8, 0x9802, 0x9F0E, 0x9320, /* 0xA0 */
+ 0x5B9A, 0x8A02, 0x4E22, 0x6771, 0x51AC, 0x8463, 0x61C2, 0x52D5, /* 0xA0 */
+ 0x68DF, 0x4F97, 0x606B, 0x51CD, 0x6D1E, 0x515C, 0x6296, 0x9B25, /* 0xB0 */
+ 0x9661, 0x8C46, 0x9017, 0x75D8, 0x90FD, 0x7763, 0x6BD2, 0x72A2, /* 0xB0 */
+ 0x7368, 0x8B80, 0x5835, 0x7779, 0x8CED, 0x675C, 0x934D, 0x809A, /* 0xC0 */
+ 0x5EA6, 0x6E21, 0x5992, 0x7AEF, 0x77ED, 0x935B, 0x6BB5, 0x65B7, /* 0xC0 */
+ 0x7DDE, 0x5806, 0x5151, 0x968A, 0x5C0D, 0x58A9, 0x5678, 0x8E72, /* 0xD0 */
+ 0x6566, 0x9813, 0x56E4, 0x920D, 0x76FE, 0x9041, 0x6387, 0x54C6, /* 0xD0 */
+ 0x591A, 0x596A, 0x579B, 0x8EB2, 0x6735, 0x8DFA, 0x8235, 0x5241, /* 0xE0 */
+ 0x60F0, 0x58AE, 0x86FE, 0x5CE8, 0x9D5D, 0x4FC4, 0x984D, 0x8A1B, /* 0xE0 */
+ 0x5A25, 0x60E1, 0x5384, 0x627C, 0x904F, 0x9102, 0x9913, 0x6069, /* 0xF0 */
+ 0x800C, 0x5152, 0x8033, 0x723E, 0x990C, 0x6D31, 0x4E8C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8CB3, 0x767C, 0x7F70, 0x7B4F, 0x4F10, 0x4E4F, 0x95A5, /* 0xA0 */
+ 0x6CD5, 0x73D0, 0x85E9, 0x5E06, 0x756A, 0x7FFB, 0x6A0A, 0x792C, /* 0xA0 */
+ 0x91E9, 0x7E41, 0x51E1, 0x7169, 0x53CD, 0x8FD4, 0x7BC4, 0x8CA9, /* 0xB0 */
+ 0x72AF, 0x98EF, 0x6CDB, 0x574A, 0x82B3, 0x65B9, 0x80AA, 0x623F, /* 0xB0 */
+ 0x9632, 0x59A8, 0x4EFF, 0x8A2A, 0x7D21, 0x653E, 0x83F2, 0x975E, /* 0xC0 */
+ 0x5561, 0x98DB, 0x80A5, 0x532A, 0x8AB9, 0x5420, 0x80BA, 0x5EE2, /* 0xC0 */
+ 0x6CB8, 0x8CBB, 0x82AC, 0x915A, 0x5429, 0x6C1B, 0x5206, 0x7D1B, /* 0xD0 */
+ 0x58B3, 0x711A, 0x6C7E, 0x7C89, 0x596E, 0x4EFD, 0x5FFF, 0x61A4, /* 0xD0 */
+ 0x7CDE, 0x8C50, 0x5C01, 0x6953, 0x8702, 0x5CF0, 0x92D2, 0x98A8, /* 0xE0 */
+ 0x760B, 0x70FD, 0x9022, 0x99AE, 0x7E2B, 0x8AF7, 0x5949, 0x9CF3, /* 0xE0 */
+ 0x4F5B, 0x5426, 0x592B, 0x6577, 0x819A, 0x5B75, 0x6276, 0x62C2, /* 0xF0 */
+ 0x8F3B, 0x5E45, 0x6C1F, 0x7B26, 0x4F0F, 0x4FD8, 0x670D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6D6E, 0x6DAA, 0x798F, 0x88B1, 0x5F17, 0x752B, 0x64AB, /* 0xA0 */
+ 0x8F14, 0x4FEF, 0x91DC, 0x65A7, 0x812F, 0x8151, 0x5E9C, 0x8150, /* 0xA0 */
+ 0x8D74, 0x526F, 0x8986, 0x8CE6, 0x5FA9, 0x5085, 0x4ED8, 0x961C, /* 0xB0 */
+ 0x7236, 0x8179, 0x8CA0, 0x5BCC, 0x8A03, 0x9644, 0x5A66, 0x7E1B, /* 0xB0 */
+ 0x5490, 0x5676, 0x560E, 0x8A72, 0x6539, 0x6982, 0x9223, 0x84CB, /* 0xC0 */
+ 0x6E89, 0x5E79, 0x7518, 0x6746, 0x67D1, 0x7AFF, 0x809D, 0x8D95, /* 0xC0 */
+ 0x611F, 0x79C6, 0x6562, 0x8D1B, 0x5CA1, 0x525B, 0x92FC, 0x7F38, /* 0xD0 */
+ 0x809B, 0x7DB1, 0x5D17, 0x6E2F, 0x6760, 0x7BD9, 0x768B, 0x9AD8, /* 0xD0 */
+ 0x818F, 0x7F94, 0x7CD5, 0x641E, 0x93AC, 0x7A3F, 0x544A, 0x54E5, /* 0xE0 */
+ 0x6B4C, 0x64F1, 0x6208, 0x9D3F, 0x80F3, 0x7599, 0x5272, 0x9769, /* 0xE0 */
+ 0x845B, 0x683C, 0x86E4, 0x95A3, 0x9694, 0x927B, 0x500B, 0x5404, /* 0xF0 */
+ 0x7D66, 0x6839, 0x8DDF, 0x8015, 0x66F4, 0x5E9A, 0x7FB9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_B9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x57C2, 0x803F, 0x6897, 0x5DE5, 0x653B, 0x529F, 0x606D, /* 0xA0 */
+ 0x9F94, 0x4F9B, 0x8EAC, 0x516C, 0x5BAB, 0x5F13, 0x978F, 0x6C5E, /* 0xA0 */
+ 0x62F1, 0x8CA2, 0x5171, 0x920E, 0x52FE, 0x6E9D, 0x82DF, 0x72D7, /* 0xB0 */
+ 0x57A2, 0x69CB, 0x8CFC, 0x591F, 0x8F9C, 0x83C7, 0x5495, 0x7B8D, /* 0xB0 */
+ 0x4F30, 0x6CBD, 0x5B64, 0x59D1, 0x9F13, 0x53E4, 0x8831, 0x9AA8, /* 0xC0 */
+ 0x8C37, 0x80A1, 0x6545, 0x9867, 0x56FA, 0x96C7, 0x522E, 0x74DC, /* 0xC0 */
+ 0x526E, 0x5BE1, 0x6302, 0x8902, 0x4E56, 0x62D0, 0x602A, 0x68FA, /* 0xD0 */
+ 0x95DC, 0x5B98, 0x51A0, 0x89C0, 0x7BA1, 0x9928, 0x7F50, 0x6163, /* 0xD0 */
+ 0x704C, 0x8CAB, 0x5149, 0x5EE3, 0x901B, 0x7470, 0x898F, 0x572D, /* 0xE0 */
+ 0x7845, 0x6B78, 0x9F9C, 0x95A8, 0x8ECC, 0x9B3C, 0x8A6D, 0x7678, /* 0xE0 */
+ 0x6842, 0x6AC3, 0x8DEA, 0x8CB4, 0x528A, 0x8F25, 0x6EDA, 0x68CD, /* 0xF0 */
+ 0x934B, 0x90ED, 0x570B, 0x679C, 0x88F9, 0x904E, 0x54C8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_BA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9AB8, 0x5B69, 0x6D77, 0x6C26, 0x4EA5, 0x5BB3, 0x99ED, /* 0xA0 */
+ 0x9163, 0x61A8, 0x90AF, 0x97D3, 0x542B, 0x6DB5, 0x5BD2, 0x51FD, /* 0xA0 */
+ 0x558A, 0x7F55, 0x7FF0, 0x64BC, 0x634D, 0x65F1, 0x61BE, 0x608D, /* 0xB0 */
+ 0x710A, 0x6C57, 0x6F22, 0x592F, 0x676D, 0x822A, 0x58D5, 0x568E, /* 0xB0 */
+ 0x8C6A, 0x6BEB, 0x90DD, 0x597D, 0x8017, 0x865F, 0x6D69, 0x5475, /* 0xC0 */
+ 0x559D, 0x8377, 0x83CF, 0x6838, 0x79BE, 0x548C, 0x4F55, 0x5408, /* 0xC0 */
+ 0x76D2, 0x8C89, 0x95A1, 0x6CB3, 0x6DB8, 0x8D6B, 0x8910, 0x9DB4, /* 0xD0 */
+ 0x8CC0, 0x563F, 0x9ED1, 0x75D5, 0x5F88, 0x72E0, 0x6068, 0x54FC, /* 0xD0 */
+ 0x4EA8, 0x6A2A, 0x8861, 0x6052, 0x8F5F, 0x54C4, 0x70D8, 0x8679, /* 0xE0 */
+ 0x9D3B, 0x6D2A, 0x5B8F, 0x5F18, 0x7D05, 0x5589, 0x4FAF, 0x7334, /* 0xE0 */
+ 0x543C, 0x539A, 0x5019, 0x5F8C, 0x547C, 0x4E4E, 0x5FFD, 0x745A, /* 0xF0 */
+ 0x58FA, 0x846B, 0x80E1, 0x8774, 0x72D0, 0x7CCA, 0x6E56 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_BB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5F27, 0x864E, 0x552C, 0x8B77, 0x4E92, 0x6EEC, 0x6237, /* 0xA0 */
+ 0x82B1, 0x5629, 0x83EF, 0x733E, 0x6ED1, 0x756B, 0x5283, 0x5316, /* 0xA0 */
+ 0x8A71, 0x69D0, 0x5F8A, 0x61F7, 0x6DEE, 0x58DE, 0x6B61, 0x74B0, /* 0xB0 */
+ 0x6853, 0x9084, 0x7DE9, 0x63DB, 0x60A3, 0x559A, 0x7613, 0x8C62, /* 0xB0 */
+ 0x7165, 0x6E19, 0x5BA6, 0x5E7B, 0x8352, 0x614C, 0x9EC4, 0x78FA, /* 0xC0 */
+ 0x8757, 0x7C27, 0x7687, 0x51F0, 0x60F6, 0x714C, 0x6643, 0x5E4C, /* 0xC0 */
+ 0x604D, 0x8B0A, 0x7070, 0x63EE, 0x8F1D, 0x5FBD, 0x6062, 0x86D4, /* 0xD0 */
+ 0x56DE, 0x6BC1, 0x6094, 0x6167, 0x5349, 0x60E0, 0x6666, 0x8CC4, /* 0xD0 */
+ 0x7A62, 0x6703, 0x71F4, 0x532F, 0x8AF1, 0x8AA8, 0x7E6A, 0x8477, /* 0xE0 */
+ 0x660F, 0x5A5A, 0x9B42, 0x6E3E, 0x6DF7, 0x8C41, 0x6D3B, 0x4F19, /* 0xE0 */
+ 0x706B, 0x7372, 0x6216, 0x60D1, 0x970D, 0x8CA8, 0x798D, 0x64CA, /* 0xF0 */
+ 0x573E, 0x57FA, 0x6A5F, 0x7578, 0x7A3D, 0x7A4D, 0x7B95 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_BC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x808C, 0x9951, 0x8FF9, 0x6FC0, 0x8B4F, 0x9DC4, 0x59EC, /* 0xA0 */
+ 0x7E3E, 0x7DDD, 0x5409, 0x6975, 0x68D8, 0x8F2F, 0x7C4D, 0x96C6, /* 0xA0 */
+ 0x53CA, 0x6025, 0x75BE, 0x6C72, 0x5373, 0x5AC9, 0x7D1A, 0x64E0, /* 0xB0 */
+ 0x5E7E, 0x810A, 0x5DF1, 0x858A, 0x6280, 0x5180, 0x5B63, 0x4F0E, /* 0xB0 */
+ 0x796D, 0x5291, 0x60B8, 0x6FDF, 0x5BC4, 0x5BC2, 0x8A08, 0x8A18, /* 0xC0 */
+ 0x65E2, 0x5FCC, 0x969B, 0x5993, 0x7E7C, 0x7D00, 0x5609, 0x67B7, /* 0xC0 */
+ 0x593E, 0x4F73, 0x5BB6, 0x52A0, 0x83A2, 0x9830, 0x8CC8, 0x7532, /* 0xD0 */
+ 0x9240, 0x5047, 0x7A3C, 0x50F9, 0x67B6, 0x99D5, 0x5AC1, 0x6BB2, /* 0xD0 */
+ 0x76E3, 0x5805, 0x5C16, 0x7B8B, 0x9593, 0x714E, 0x517C, 0x80A9, /* 0xE0 */
+ 0x8271, 0x5978, 0x7DD8, 0x7E6D, 0x6AA2, 0x67EC, 0x78B1, 0x9E7C, /* 0xE0 */
+ 0x63C0, 0x64BF, 0x7C21, 0x5109, 0x526A, 0x51CF, 0x85A6, 0x6ABB, /* 0xF0 */
+ 0x9452, 0x8E10, 0x8CE4, 0x898B, 0x9375, 0x7BAD, 0x4EF6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_BD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5065, 0x8266, 0x528D, 0x991E, 0x6F38, 0x6FFA, 0x6F97, /* 0xA0 */
+ 0x5EFA, 0x50F5, 0x59DC, 0x5C07, 0x6F3F, 0x6C5F, 0x7586, 0x8523, /* 0xA0 */
+ 0x69F3, 0x596C, 0x8B1B, 0x5320, 0x91AC, 0x964D, 0x8549, 0x6912, /* 0xB0 */
+ 0x7901, 0x7126, 0x81A0, 0x4EA4, 0x90CA, 0x6F86, 0x9A55, 0x5B0C, /* 0xB0 */
+ 0x56BC, 0x652A, 0x9278, 0x77EF, 0x50E5, 0x811A, 0x72E1, 0x89D2, /* 0xC0 */
+ 0x9903, 0x7E73, 0x7D5E, 0x527F, 0x6559, 0x9175, 0x8F4E, 0x8F03, /* 0xC0 */
+ 0x53EB, 0x7A96, 0x63ED, 0x63A5, 0x7686, 0x79F8, 0x8857, 0x968E, /* 0xD0 */
+ 0x622A, 0x52AB, 0x7BC0, 0x6854, 0x6770, 0x6377, 0x776B, 0x7AED, /* 0xD0 */
+ 0x6F54, 0x7D50, 0x89E3, 0x59D0, 0x6212, 0x85C9, 0x82A5, 0x754C, /* 0xE0 */
+ 0x501F, 0x4ECB, 0x75A5, 0x8AA1, 0x5C4A, 0x5DFE, 0x7B4B, 0x65A4, /* 0xE0 */
+ 0x91D1, 0x4ECA, 0x6D25, 0x895F, 0x7DCA, 0x9326, 0x50C5, 0x8B39, /* 0xF0 */
+ 0x9032, 0x9773, 0x6649, 0x7981, 0x8FD1, 0x71FC, 0x6D78 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_BE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x76E1, 0x52C1, 0x8346, 0x5162, 0x8396, 0x775B, 0x6676, /* 0xA0 */
+ 0x9BE8, 0x4EAC, 0x9A5A, 0x7CBE, 0x7CB3, 0x7D93, 0x4E95, 0x8B66, /* 0xA0 */
+ 0x666F, 0x9838, 0x975C, 0x5883, 0x656C, 0x93E1, 0x5F91, 0x75D9, /* 0xB0 */
+ 0x9756, 0x7ADF, 0x7AF6, 0x51C8, 0x70AF, 0x7A98, 0x63EA, 0x7A76, /* 0xB0 */
+ 0x7CFE, 0x7396, 0x97ED, 0x4E45, 0x7078, 0x4E5D, 0x9152, 0x53A9, /* 0xC0 */
+ 0x6551, 0x820A, 0x81FC, 0x8205, 0x548E, 0x5C31, 0x759A, 0x97A0, /* 0xC0 */
+ 0x62D8, 0x72D9, 0x75BD, 0x5C45, 0x99D2, 0x83CA, 0x5C40, 0x5480, /* 0xD0 */
+ 0x77E9, 0x8209, 0x6CAE, 0x805A, 0x62D2, 0x64DA, 0x5DE8, 0x5177, /* 0xD0 */
+ 0x8DDD, 0x8E1E, 0x92F8, 0x4FF1, 0x53E5, 0x61FC, 0x70AC, 0x5287, /* 0xE0 */
+ 0x6350, 0x9D51, 0x5A1F, 0x5026, 0x7737, 0x5377, 0x7D79, 0x6485, /* 0xE0 */
+ 0x652B, 0x6289, 0x6398, 0x5014, 0x7235, 0x89BA, 0x51B3, 0x8A23, /* 0xF0 */
+ 0x7D76, 0x5747, 0x83CC, 0x921E, 0x8ECD, 0x541B, 0x5CFB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_BF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4FCA, 0x7AE3, 0x6D5A, 0x90E1, 0x99FF, 0x5580, 0x5496, /* 0xA0 */
+ 0x5361, 0x54AF, 0x958B, 0x63E9, 0x6977, 0x51F1, 0x6168, 0x520A, /* 0xA0 */
+ 0x582A, 0x52D8, 0x574E, 0x780D, 0x770B, 0x5EB7, 0x6177, 0x7CE0, /* 0xB0 */
+ 0x625B, 0x6297, 0x4EA2, 0x7095, 0x8003, 0x62F7, 0x70E4, 0x9760, /* 0xB0 */
+ 0x5777, 0x82DB, 0x67EF, 0x68F5, 0x78D5, 0x9846, 0x79D1, 0x6BBB, /* 0xC0 */
+ 0x54B3, 0x53EF, 0x6E34, 0x514B, 0x523B, 0x5BA2, 0x8AB2, 0x80AF, /* 0xC0 */
+ 0x5543, 0x58BE, 0x61C7, 0x5751, 0x542D, 0x7A7A, 0x6050, 0x5B54, /* 0xD0 */
+ 0x63A7, 0x6473, 0x53E3, 0x6263, 0x5BC7, 0x67AF, 0x54ED, 0x7A9F, /* 0xD0 */
+ 0x82E6, 0x9177, 0x5EAB, 0x8932, 0x8A87, 0x57AE, 0x630E, 0x8DE8, /* 0xE0 */
+ 0x80EF, 0x584A, 0x7B77, 0x5108, 0x5FEB, 0x5BEC, 0x6B3E, 0x5321, /* 0xE0 */
+ 0x7B50, 0x72C2, 0x6846, 0x7926, 0x7736, 0x66E0, 0x51B5, 0x8667, /* 0xF0 */
+ 0x76D4, 0x5DCB, 0x7ABA, 0x8475, 0x594E, 0x9B41, 0x5080 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x994B, 0x6127, 0x6F70, 0x5764, 0x6606, 0x6346, 0x56F0, /* 0xA0 */
+ 0x62EC, 0x64F4, 0x5ED3, 0x95CA, 0x5783, 0x62C9, 0x5587, 0x881F, /* 0xA0 */
+ 0x81D8, 0x8FA3, 0x5566, 0x840A, 0x4F86, 0x8CF4, 0x85CD, 0x5A6A, /* 0xB0 */
+ 0x6B04, 0x6514, 0x7C43, 0x95CC, 0x862D, 0x703E, 0x8B95, 0x652C, /* 0xB0 */
+ 0x89BD, 0x61F6, 0x7E9C, 0x721B, 0x6FEB, 0x7405, 0x6994, 0x72FC, /* 0xC0 */
+ 0x5ECA, 0x90CE, 0x6717, 0x6D6A, 0x6488, 0x52DE, 0x7262, 0x8001, /* 0xC0 */
+ 0x4F6C, 0x59E5, 0x916A, 0x70D9, 0x6F87, 0x52D2, 0x6A02, 0x96F7, /* 0xD0 */
+ 0x9433, 0x857E, 0x78CA, 0x7D2F, 0x5121, 0x58D8, 0x64C2, 0x808B, /* 0xD0 */
+ 0x985E, 0x6CEA, 0x68F1, 0x695E, 0x51B7, 0x5398, 0x68A8, 0x7281, /* 0xE0 */
+ 0x9ECE, 0x7C6C, 0x72F8, 0x96E2, 0x7055, 0x7406, 0x674E, 0x88CF, /* 0xE0 */
+ 0x9BC9, 0x79AE, 0x8389, 0x8354, 0x540F, 0x6817, 0x9E97, 0x53B2, /* 0xF0 */
+ 0x52F5, 0x792B, 0x6B77, 0x5229, 0x5088, 0x4F8B, 0x4FD0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x75E2, 0x7ACB, 0x7C92, 0x701D, 0x96B8, 0x529B, 0x7483, /* 0xA0 */
+ 0x54E9, 0x5006, 0x806F, 0x84EE, 0x9023, 0x942E, 0x5EC9, 0x6190, /* 0xA0 */
+ 0x6F23, 0x7C3E, 0x6582, 0x81C9, 0x93C8, 0x6200, 0x7149, 0x7DF4, /* 0xB0 */
+ 0x7CE7, 0x51C9, 0x6881, 0x7CB1, 0x826F, 0x5169, 0x8F1B, 0x91CF, /* 0xB0 */
+ 0x667E, 0x4EAE, 0x8AD2, 0x64A9, 0x804A, 0x50DA, 0x7642, 0x71CE, /* 0xC0 */
+ 0x5BE5, 0x907C, 0x6F66, 0x4E86, 0x6482, 0x9410, 0x5ED6, 0x6599, /* 0xC0 */
+ 0x5217, 0x88C2, 0x70C8, 0x52A3, 0x7375, 0x7433, 0x6797, 0x78F7, /* 0xD0 */
+ 0x9716, 0x81E8, 0x9130, 0x9C57, 0x6DCB, 0x51DB, 0x8CC3, 0x541D, /* 0xD0 */
+ 0x62CE, 0x73B2, 0x83F1, 0x96F6, 0x9F61, 0x9234, 0x4F36, 0x7F9A, /* 0xE0 */
+ 0x51CC, 0x9748, 0x9675, 0x5DBA, 0x9818, 0x53E6, 0x4EE4, 0x6E9C, /* 0xE0 */
+ 0x7409, 0x69B4, 0x786B, 0x993E, 0x7559, 0x5289, 0x7624, 0x6D41, /* 0xF0 */
+ 0x67F3, 0x516D, 0x9F8D, 0x807E, 0x56A8, 0x7C60, 0x7ABF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9686, 0x58DF, 0x650F, 0x96B4, 0x6A13, 0x5A41, 0x645F, /* 0xA0 */
+ 0x7C0D, 0x6F0F, 0x964B, 0x8606, 0x76E7, 0x9871, 0x5EEC, 0x7210, /* 0xA0 */
+ 0x64C4, 0x6EF7, 0x865C, 0x9B6F, 0x9E93, 0x788C, 0x9732, 0x8DEF, /* 0xB0 */
+ 0x8CC2, 0x9E7F, 0x6F5E, 0x7984, 0x9332, 0x9678, 0x622E, 0x9A62, /* 0xB0 */
+ 0x5415, 0x92C1, 0x4FA3, 0x65C5, 0x5C65, 0x5C62, 0x7E37, 0x616E, /* 0xC0 */
+ 0x6C2F, 0x5F8B, 0x7387, 0x6FFE, 0x7DD1, 0x5DD2, 0x6523, 0x5B7F, /* 0xC0 */
+ 0x7064, 0x5375, 0x4E82, 0x63A0, 0x7565, 0x6384, 0x8F2A, 0x502B, /* 0xD0 */
+ 0x4F96, 0x6DEA, 0x7DB8, 0x8AD6, 0x863F, 0x87BA, 0x7F85, 0x908F, /* 0xD0 */
+ 0x947C, 0x7C6E, 0x9A3E, 0x88F8, 0x843D, 0x6D1B, 0x99F1, 0x7D61, /* 0xE0 */
+ 0x5ABD, 0x9EBB, 0x746A, 0x78BC, 0x879E, 0x99AC, 0x99E1, 0x561B, /* 0xE0 */
+ 0x55CE, 0x57CB, 0x8CB7, 0x9EA5, 0x8CE3, 0x9081, 0x8109, 0x779E, /* 0xF0 */
+ 0x9945, 0x883B, 0x6EFF, 0x8513, 0x66FC, 0x6162, 0x6F2B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B3E, 0x8292, 0x832B, 0x76F2, 0x6C13, 0x5FD9, 0x83BD, /* 0xA0 */
+ 0x732B, 0x8305, 0x9328, 0x6BDB, 0x77DB, 0x925A, 0x536F, 0x8302, /* 0xA0 */
+ 0x5192, 0x5E3D, 0x8C8C, 0x8CBF, 0x9EBD, 0x73AB, 0x679A, 0x6885, /* 0xB0 */
+ 0x9176, 0x9709, 0x7164, 0x6CA1, 0x7709, 0x5A92, 0x9382, 0x6BCF, /* 0xB0 */
+ 0x7F8E, 0x6627, 0x5BD0, 0x59B9, 0x5A9A, 0x9580, 0x60B6, 0x5011, /* 0xC0 */
+ 0x840C, 0x8499, 0x6AAC, 0x76DF, 0x9333, 0x731B, 0x5922, 0x5B5F, /* 0xC0 */
+ 0x772F, 0x919A, 0x9761, 0x7CDC, 0x8FF7, 0x8B0E, 0x5F4C, 0x7C73, /* 0xD0 */
+ 0x79D8, 0x8993, 0x6CCC, 0x871C, 0x5BC6, 0x5E42, 0x68C9, 0x7720, /* 0xD0 */
+ 0x7DBF, 0x5195, 0x514D, 0x52C9, 0x5A29, 0x7DEC, 0x9762, 0x82D7, /* 0xE0 */
+ 0x63CF, 0x7784, 0x85D0, 0x79D2, 0x6E3A, 0x5EDF, 0x5999, 0x8511, /* 0xE0 */
+ 0x6EC5, 0x6C11, 0x62BF, 0x76BF, 0x654F, 0x61AB, 0x95A9, 0x660E, /* 0xF0 */
+ 0x879F, 0x9CF4, 0x9298, 0x540D, 0x547D, 0x8B2C, 0x6478 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6479, 0x8611, 0x6A21, 0x819C, 0x78E8, 0x6469, 0x9B54, /* 0xA0 */
+ 0x62B9, 0x672B, 0x83AB, 0x58A8, 0x9ED8, 0x6CAB, 0x6F20, 0x5BDE, /* 0xA0 */
+ 0x964C, 0x8B00, 0x725F, 0x67D0, 0x62C7, 0x7261, 0x755D, 0x59C6, /* 0xB0 */
+ 0x6BCD, 0x5893, 0x66AE, 0x5E55, 0x52DF, 0x6155, 0x6728, 0x76EE, /* 0xB0 */
+ 0x7766, 0x7267, 0x7A46, 0x62FF, 0x54EA, 0x5450, 0x9209, 0x90A3, /* 0xC0 */
+ 0x5A1C, 0x7D0D, 0x6C16, 0x4E43, 0x5976, 0x8010, 0x5948, 0x5357, /* 0xC0 */
+ 0x7537, 0x96E3, 0x56CA, 0x6493, 0x8166, 0x60F1, 0x9B27, 0x6DD6, /* 0xD0 */
+ 0x5462, 0x9912, 0x5185, 0x5AE9, 0x80FD, 0x59AE, 0x9713, 0x502A, /* 0xD0 */
+ 0x6CE5, 0x5C3C, 0x64EC, 0x4F60, 0x533F, 0x81A9, 0x9006, 0x6EBA, /* 0xE0 */
+ 0x852B, 0x62C8, 0x5E74, 0x78BE, 0x6506, 0x637B, 0x5FF5, 0x5A18, /* 0xE0 */
+ 0x91C0, 0x9CE5, 0x5C3F, 0x634F, 0x8076, 0x5B7D, 0x5699, 0x9477, /* 0xF0 */
+ 0x93B3, 0x6D85, 0x60A8, 0x6AB8, 0x7370, 0x51DD, 0x5BE7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x64F0, 0x6FD8, 0x725B, 0x626D, 0x9215, 0x7D10, 0x81BF, /* 0xA0 */
+ 0x6FC3, 0x8FB2, 0x5F04, 0x5974, 0x52AA, 0x6012, 0x5973, 0x6696, /* 0xA0 */
+ 0x8650, 0x7627, 0x632A, 0x61E6, 0x7CEF, 0x8AFE, 0x54E6, 0x6B50, /* 0xB0 */
+ 0x9DD7, 0x6BC6, 0x85D5, 0x5614, 0x5076, 0x6F1A, 0x556A, 0x8DB4, /* 0xB0 */
+ 0x722C, 0x5E15, 0x6015, 0x7436, 0x62CD, 0x6392, 0x724C, 0x5F98, /* 0xC0 */
+ 0x6E43, 0x6D3E, 0x6500, 0x6F58, 0x76E4, 0x78D0, 0x76FC, 0x7554, /* 0xC0 */
+ 0x5224, 0x53DB, 0x4E53, 0x9F90, 0x65C1, 0x802A, 0x80D6, 0x629B, /* 0xD0 */
+ 0x5486, 0x5228, 0x70AE, 0x888D, 0x8DD1, 0x6CE1, 0x5478, 0x80DA, /* 0xD0 */
+ 0x57F9, 0x88F4, 0x8CE0, 0x966A, 0x914D, 0x4F69, 0x6C9B, 0x5674, /* 0xE0 */
+ 0x76C6, 0x7830, 0x62A8, 0x70F9, 0x6F8E, 0x5F6D, 0x84EC, 0x68DA, /* 0xE0 */
+ 0x787C, 0x7BF7, 0x81A8, 0x670B, 0x9D6C, 0x6367, 0x78B0, 0x576F, /* 0xF0 */
+ 0x7812, 0x9739, 0x6279, 0x62AB, 0x5288, 0x7435, 0x6BD7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5564, 0x813E, 0x75B2, 0x76AE, 0x5339, 0x75DE, 0x50FB, /* 0xA0 */
+ 0x5C41, 0x8B6C, 0x7BC7, 0x504F, 0x7247, 0x9A19, 0x98C4, 0x6F02, /* 0xA0 */
+ 0x74E2, 0x7968, 0x6487, 0x77A5, 0x62FC, 0x983B, 0x8CA7, 0x54C1, /* 0xB0 */
+ 0x8058, 0x4E52, 0x576A, 0x860B, 0x840D, 0x5E73, 0x6191, 0x74F6, /* 0xB0 */
+ 0x8A55, 0x5C4F, 0x5761, 0x6F51, 0x9817, 0x5A46, 0x7834, 0x9B44, /* 0xC0 */
+ 0x8FEB, 0x7C95, 0x5256, 0x64B2, 0x92EA, 0x50D5, 0x8386, 0x8461, /* 0xC0 */
+ 0x83E9, 0x84B2, 0x57D4, 0x6A38, 0x5703, 0x666E, 0x6D66, 0x8B5C, /* 0xD0 */
+ 0x66DD, 0x7011, 0x671F, 0x6B3A, 0x68F2, 0x621A, 0x59BB, 0x4E03, /* 0xD0 */
+ 0x51C4, 0x6F06, 0x67D2, 0x6C8F, 0x5176, 0x68CB, 0x5947, 0x6B67, /* 0xE0 */
+ 0x7566, 0x5D0E, 0x81CD, 0x9F4A, 0x65D7, 0x7948, 0x7941, 0x9A0E, /* 0xE0 */
+ 0x8D77, 0x8C48, 0x4E5E, 0x4F01, 0x5553, 0x5951, 0x780C, 0x5668, /* 0xF0 */
+ 0x6C23, 0x8FC4, 0x68C4, 0x6C7D, 0x6CE3, 0x8A16, 0x6390 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6070, 0x6D3D, 0x727D, 0x6266, 0x91FA, 0x925B, 0x5343, /* 0xA0 */
+ 0x9077, 0x7C3D, 0x4EDF, 0x8B19, 0x4E7E, 0x9ED4, 0x9322, 0x9257, /* 0xA0 */
+ 0x524D, 0x6F5B, 0x9063, 0x6DFA, 0x8B74, 0x5879, 0x5D4C, 0x6B20, /* 0xB0 */
+ 0x6B49, 0x69CD, 0x55C6, 0x8154, 0x7F8C, 0x58BB, 0x8594, 0x5F3A, /* 0xB0 */
+ 0x6436, 0x6A47, 0x936C, 0x6572, 0x6084, 0x6A4B, 0x77A7, 0x55AC, /* 0xC0 */
+ 0x50D1, 0x5DE7, 0x9798, 0x64AC, 0x7FF9, 0x5CED, 0x4FCF, 0x7AC5, /* 0xC0 */
+ 0x5207, 0x8304, 0x4E14, 0x602F, 0x7ACA, 0x6B3D, 0x4FB5, 0x89AA, /* 0xD0 */
+ 0x79E6, 0x7434, 0x52E4, 0x82B9, 0x64D2, 0x79BD, 0x5BE2, 0x6C81, /* 0xD0 */
+ 0x9752, 0x8F15, 0x6C2B, 0x50BE, 0x537F, 0x6E05, 0x64CE, 0x6674, /* 0xE0 */
+ 0x6C30, 0x60C5, 0x9803, 0x8ACB, 0x6176, 0x74CA, 0x7AAE, 0x79CB, /* 0xE0 */
+ 0x4E18, 0x90B1, 0x7403, 0x6C42, 0x56DA, 0x914B, 0x6CC5, 0x8DA8, /* 0xF0 */
+ 0x5340, 0x86C6, 0x66F2, 0x8EC0, 0x5C48, 0x9A45, 0x6E20 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x53D6, 0x5A36, 0x9F72, 0x8DA3, 0x53BB, 0x5708, 0x9874, /* 0xA0 */
+ 0x6B0A, 0x919B, 0x6CC9, 0x5168, 0x75CA, 0x62F3, 0x72AC, 0x5238, /* 0xA0 */
+ 0x52F8, 0x7F3A, 0x7094, 0x7638, 0x5374, 0x9D72, 0x69B7, 0x78BA, /* 0xB0 */
+ 0x96C0, 0x88D9, 0x7FA4, 0x7136, 0x71C3, 0x5189, 0x67D3, 0x74E4, /* 0xB0 */
+ 0x58E4, 0x6518, 0x56B7, 0x8B93, 0x9952, 0x64FE, 0x7E5E, 0x60F9, /* 0xC0 */
+ 0x71B1, 0x58EC, 0x4EC1, 0x4EBA, 0x5FCD, 0x97CC, 0x4EFB, 0x8A8D, /* 0xC0 */
+ 0x5203, 0x598A, 0x7D09, 0x6254, 0x4ECD, 0x65E5, 0x620E, 0x8338, /* 0xD0 */
+ 0x84C9, 0x69AE, 0x878D, 0x7194, 0x6EB6, 0x5BB9, 0x7D68, 0x5197, /* 0xD0 */
+ 0x63C9, 0x67D4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5B7A, 0x5982, /* 0xE0 */
+ 0x8FB1, 0x4E73, 0x6C5D, 0x5165, 0x8925, 0x8EDF, 0x962E, 0x854A, /* 0xE0 */
+ 0x745E, 0x92ED, 0x958F, 0x6F64, 0x82E5, 0x5F31, 0x6492, 0x7051, /* 0xF0 */
+ 0x85A9, 0x816E, 0x9C13, 0x585E, 0x8CFD, 0x4E09, 0x53C1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_C9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5098, 0x6563, 0x6851, 0x55D3, 0x55AA, 0x6414, 0x9A37, /* 0xA0 */
+ 0x6383, 0x5AC2, 0x745F, 0x8272, 0x6F80, 0x68EE, 0x50E7, 0x838E, /* 0xA0 */
+ 0x7802, 0x6BBA, 0x5239, 0x6C99, 0x7D17, 0x50BB, 0x5565, 0x715E, /* 0xB0 */
+ 0x7BE9, 0x66EC, 0x73CA, 0x82EB, 0x6749, 0x5C71, 0x5220, 0x717D, /* 0xB0 */
+ 0x886B, 0x9583, 0x965D, 0x64C5, 0x8D0D, 0x81B3, 0x5584, 0x6C55, /* 0xC0 */
+ 0x6247, 0x7E55, 0x5892, 0x50B7, 0x5546, 0x8CDE, 0x664C, 0x4E0A, /* 0xC0 */
+ 0x5C1A, 0x88F3, 0x68A2, 0x634E, 0x7A0D, 0x71D2, 0x828D, 0x52FA, /* 0xD0 */
+ 0x97F6, 0x5C11, 0x54E8, 0x90B5, 0x7D39, 0x5962, 0x8CD2, 0x86C7, /* 0xD0 */
+ 0x820C, 0x6368, 0x8D66, 0x651D, 0x5C04, 0x61FE, 0x6D89, 0x793E, /* 0xE0 */
+ 0x8A2D, 0x7837, 0x7533, 0x547B, 0x4F38, 0x8EAB, 0x6DF1, 0x5A20, /* 0xE0 */
+ 0x7D33, 0x795E, 0x6C88, 0x5BE9, 0x5B38, 0x751A, 0x814E, 0x614E, /* 0xF0 */
+ 0x6EF2, 0x8072, 0x751F, 0x7525, 0x7272, 0x5347, 0x7E69 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_CA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7701, 0x76DB, 0x5269, 0x52DD, 0x8056, 0x5E2B, 0x5931, /* 0xA0 */
+ 0x7345, 0x65BD, 0x6FD5, 0x8A69, 0x5C38, 0x8671, 0x5341, 0x77F3, /* 0xA0 */
+ 0x62FE, 0x6642, 0x4EC0, 0x98DF, 0x8755, 0x5BE6, 0x8B58, 0x53F2, /* 0xB0 */
+ 0x77E2, 0x4F7F, 0x5C4E, 0x99DB, 0x59CB, 0x5F0F, 0x793A, 0x58EB, /* 0xB0 */
+ 0x4E16, 0x67FF, 0x4E8B, 0x62ED, 0x8A93, 0x901D, 0x52E2, 0x662F, /* 0xC0 */
+ 0x55DC, 0x566C, 0x9069, 0x4ED5, 0x4F8D, 0x91CB, 0x98FE, 0x6C0F, /* 0xC0 */
+ 0x5E02, 0x6043, 0x5BA4, 0x8996, 0x8A66, 0x6536, 0x624B, 0x9996, /* 0xD0 */
+ 0x5B88, 0x58FD, 0x6388, 0x552E, 0x53D7, 0x7626, 0x7378, 0x852C, /* 0xD0 */
+ 0x6A1E, 0x68B3, 0x6B8A, 0x6292, 0x8F38, 0x53D4, 0x8212, 0x6DD1, /* 0xE0 */
+ 0x758F, 0x66F8, 0x8D16, 0x5B70, 0x719F, 0x85AF, 0x6691, 0x66D9, /* 0xE0 */
+ 0x7F72, 0x8700, 0x9ECD, 0x9F20, 0x5C6C, 0x8853, 0x8FF0, 0x6A39, /* 0xF0 */
+ 0x675F, 0x620D, 0x7AEA, 0x5885, 0x5EB6, 0x6578, 0x6F31 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_CB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6055, 0x5237, 0x800D, 0x6454, 0x8870, 0x7529, 0x5E25, /* 0xA0 */
+ 0x6813, 0x62F4, 0x971C, 0x96D9, 0x723D, 0x8AB0, 0x6C34, 0x7761, /* 0xA0 */
+ 0x7A0E, 0x542E, 0x77AC, 0x9806, 0x821C, 0x8AAC, 0x78A9, 0x6714, /* 0xB0 */
+ 0x720D, 0x65AF, 0x6495, 0x5636, 0x601D, 0x79C1, 0x53F8, 0x7D72, /* 0xB0 */
+ 0x6B7B, 0x8086, 0x5BFA, 0x55E3, 0x56DB, 0x4F3A, 0x4F3C, 0x98FC, /* 0xC0 */
+ 0x5DF3, 0x9B06, 0x8073, 0x616B, 0x980C, 0x9001, 0x5B8B, 0x8A1F, /* 0xC0 */
+ 0x8AA6, 0x641C, 0x8258, 0x64FB, 0x55FD, 0x8607, 0x9165, 0x4FD7, /* 0xD0 */
+ 0x7D20, 0x901F, 0x7C9F, 0x50F3, 0x5851, 0x6EAF, 0x5BBF, 0x8A34, /* 0xD0 */
+ 0x8085, 0x9178, 0x849C, 0x7B97, 0x96D6, 0x968B, 0x96A8, 0x7D8F, /* 0xE0 */
+ 0x9AD3, 0x788E, 0x6B72, 0x7A57, 0x9042, 0x96A7, 0x795F, 0x5B6B, /* 0xE0 */
+ 0x640D, 0x7B0B, 0x84D1, 0x68AD, 0x5506, 0x7E2E, 0x7463, 0x7D22, /* 0xF0 */
+ 0x9396, 0x6240, 0x584C, 0x4ED6, 0x5B83, 0x5979, 0x5854 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_CC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x737A, 0x64BB, 0x8E4B, 0x8E0F, 0x80CE, 0x82D4, 0x62AC, /* 0xA0 */
+ 0x81FA, 0x6CF0, 0x915E, 0x592A, 0x614B, 0x6C70, 0x574D, 0x6524, /* 0xA0 */
+ 0x8CAA, 0x7671, 0x7058, 0x58C7, 0x6A80, 0x75F0, 0x6F6D, 0x8B5A, /* 0xB0 */
+ 0x8AC7, 0x5766, 0x6BEF, 0x8892, 0x78B3, 0x63A2, 0x5606, 0x70AD, /* 0xB0 */
+ 0x6E6F, 0x5858, 0x642A, 0x5802, 0x68E0, 0x819B, 0x5510, 0x7CD6, /* 0xC0 */
+ 0x5018, 0x8EBA, 0x6DCC, 0x8D9F, 0x71D9, 0x638F, 0x6FE4, 0x6ED4, /* 0xC0 */
+ 0x7E27, 0x8404, 0x6843, 0x9003, 0x6DD8, 0x9676, 0x8A0E, 0x5957, /* 0xD0 */
+ 0x7279, 0x85E4, 0x9A30, 0x75BC, 0x8B04, 0x68AF, 0x5254, 0x8E22, /* 0xD0 */
+ 0x92BB, 0x63D0, 0x984C, 0x8E44, 0x557C, 0x9AD4, 0x66FF, 0x568F, /* 0xE0 */
+ 0x60D5, 0x6D95, 0x5243, 0x5C49, 0x5929, 0x6DFB, 0x586B, 0x7530, /* 0xE0 */
+ 0x751C, 0x606C, 0x8214, 0x8146, 0x6311, 0x689D, 0x8FE2, 0x773A, /* 0xF0 */
+ 0x8DF3, 0x8CBC, 0x9435, 0x5E16, 0x5EF3, 0x807D, 0x70F4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_CD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6C40, 0x5EF7, 0x505C, 0x4EAD, 0x5EAD, 0x633A, 0x8247, /* 0xA0 */
+ 0x901A, 0x6850, 0x916E, 0x77B3, 0x540C, 0x9285, 0x5F64, 0x7AE5, /* 0xA0 */
+ 0x6876, 0x6345, 0x7B52, 0x7D71, 0x75DB, 0x5077, 0x6295, 0x982D, /* 0xB0 */
+ 0x900F, 0x51F8, 0x79C3, 0x7A81, 0x5716, 0x5F92, 0x9014, 0x5857, /* 0xB0 */
+ 0x5C60, 0x571F, 0x5410, 0x5154, 0x6E4D, 0x5718, 0x63A8, 0x983D, /* 0xC0 */
+ 0x817F, 0x8715, 0x892A, 0x9000, 0x541E, 0x5C6F, 0x81C0, 0x62D6, /* 0xC0 */
+ 0x6258, 0x8131, 0x9D15, 0x9640, 0x99B1, 0x99DD, 0x6A62, 0x59A5, /* 0xD0 */
+ 0x62D3, 0x553E, 0x6316, 0x54C7, 0x86D9, 0x7AAA, 0x5A03, 0x74E6, /* 0xD0 */
+ 0x896A, 0x6B6A, 0x5916, 0x8C4C, 0x5F4E, 0x7063, 0x73A9, 0x9811, /* 0xE0 */
+ 0x4E38, 0x70F7, 0x5B8C, 0x7897, 0x633D, 0x665A, 0x7696, 0x60CB, /* 0xE0 */
+ 0x5B9B, 0x5A49, 0x842C, 0x8155, 0x6C6A, 0x738B, 0x4EA1, 0x6789, /* 0xF0 */
+ 0x7DB2, 0x5F80, 0x65FA, 0x671B, 0x5FD8, 0x5984, 0x5A01 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_CE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5DCD, 0x5FAE, 0x5371, 0x97CB, 0x9055, 0x6845, 0x570D, /* 0xA0 */
+ 0x552F, 0x60DF, 0x7232, 0x6FF0, 0x7DAD, 0x8466, 0x840E, 0x59D4, /* 0xA0 */
+ 0x5049, 0x50DE, 0x5C3E, 0x7DEF, 0x672A, 0x851A, 0x5473, 0x754F, /* 0xB0 */
+ 0x80C3, 0x5582, 0x9B4F, 0x4F4D, 0x6E2D, 0x8B02, 0x5C09, 0x6170, /* 0xB0 */
+ 0x885B, 0x761F, 0x6E29, 0x868A, 0x6587, 0x805E, 0x7D0B, 0x543B, /* 0xC0 */
+ 0x7A69, 0x7D0A, 0x554F, 0x55E1, 0x7FC1, 0x74EE, 0x64BE, 0x8778, /* 0xC0 */
+ 0x6E26, 0x7AA9, 0x6211, 0x65A1, 0x5367, 0x63E1, 0x6C83, 0x5DEB, /* 0xD0 */
+ 0x55DA, 0x93A2, 0x70CF, 0x6C61, 0x8AA3, 0x5C4B, 0x7121, 0x856A, /* 0xD0 */
+ 0x68A7, 0x543E, 0x5434, 0x6BCB, 0x6B66, 0x4E94, 0x6342, 0x5348, /* 0xE0 */
+ 0x821E, 0x4F0D, 0x4FAE, 0x5862, 0x620A, 0x9727, 0x6664, 0x7269, /* 0xE0 */
+ 0x52FF, 0x52D9, 0x609F, 0x8AA4, 0x6614, 0x7199, 0x6790, 0x897F, /* 0xF0 */
+ 0x7852, 0x77FD, 0x6670, 0x563B, 0x5438, 0x932B, 0x72A7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_CF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7A00, 0x606F, 0x5E0C, 0x6089, 0x819D, 0x5915, 0x60DC, /* 0xA0 */
+ 0x7184, 0x70EF, 0x6EAA, 0x6C50, 0x7280, 0x6A84, 0x8972, 0x5E2D, /* 0xA0 */
+ 0x7FD2, 0x5AB3, 0x559C, 0x9291, 0x6D17, 0x7CFB, 0x9699, 0x6232, /* 0xB0 */
+ 0x7D30, 0x778E, 0x8766, 0x5323, 0x971E, 0x8F44, 0x6687, 0x5CFD, /* 0xB0 */
+ 0x4FE0, 0x72F9, 0x4E0B, 0x53A6, 0x590F, 0x5687, 0x6380, 0x9341, /* 0xC0 */
+ 0x5148, 0x4ED9, 0x9BAE, 0x7E96, 0x54B8, 0x8CE2, 0x929C, 0x8237, /* 0xC0 */
+ 0x9591, 0x6D8E, 0x5F26, 0x5ACC, 0x986F, 0x96AA, 0x73FE, 0x737B, /* 0xD0 */
+ 0x7E23, 0x817A, 0x9921, 0x7FA1, 0x61B2, 0x9677, 0x9650, 0x7DAB, /* 0xD0 */
+ 0x76F8, 0x53A2, 0x9472, 0x9999, 0x7BB1, 0x8944, 0x6E58, 0x9109, /* 0xE0 */
+ 0x7FD4, 0x7965, 0x8A73, 0x60F3, 0x97FF, 0x4EAB, 0x9805, 0x5DF7, /* 0xE0 */
+ 0x6A61, 0x50CF, 0x5411, 0x8C61, 0x856D, 0x785D, 0x9704, 0x524A, /* 0xF0 */
+ 0x54EE, 0x56C2, 0x92B7, 0x6D88, 0x5BB5, 0x6DC6, 0x66C9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5C0F, 0x5B5D, 0x6821, 0x8096, 0x562F, 0x7B11, 0x6548, /* 0xA0 */
+ 0x6954, 0x4E9B, 0x6B47, 0x874E, 0x978B, 0x5354, 0x633E, 0x643A, /* 0xA0 */
+ 0x90AA, 0x659C, 0x8105, 0x8AE7, 0x5BEB, 0x68B0, 0x5378, 0x87F9, /* 0xB0 */
+ 0x61C8, 0x6CC4, 0x7009, 0x8B1D, 0x5C51, 0x85AA, 0x82AF, 0x92C5, /* 0xB0 */
+ 0x6B23, 0x8F9B, 0x65B0, 0x5FFB, 0x5FC3, 0x4FE1, 0x91C1, 0x661F, /* 0xC0 */
+ 0x8165, 0x7329, 0x60FA, 0x8208, 0x5211, 0x578B, 0x5F62, 0x90A2, /* 0xC0 */
+ 0x884C, 0x9192, 0x5E78, 0x674F, 0x6027, 0x59D3, 0x5144, 0x51F6, /* 0xD0 */
+ 0x80F8, 0x5308, 0x6C79, 0x96C4, 0x718A, 0x4F11, 0x4FEE, 0x7F9E, /* 0xD0 */
+ 0x673D, 0x55C5, 0x92B9, 0x79C0, 0x8896, 0x7D89, 0x589F, 0x620C, /* 0xE0 */
+ 0x9700, 0x865A, 0x5618, 0x9808, 0x5F90, 0x8A31, 0x84C4, 0x9157, /* 0xE0 */
+ 0x53D9, 0x65ED, 0x5E8F, 0x755C, 0x6064, 0x7D6E, 0x5A7F, 0x7DD2, /* 0xF0 */
+ 0x7E8C, 0x8ED2, 0x55A7, 0x5BA3, 0x61F8, 0x65CB, 0x7384 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9078, 0x766C, 0x7729, 0x7D62, 0x9774, 0x859B, 0x5B78, /* 0xA0 */
+ 0x7A74, 0x96EA, 0x8840, 0x52DB, 0x718F, 0x5FAA, 0x65EC, 0x8A62, /* 0xA0 */
+ 0x5C0B, 0x99B4, 0x5DE1, 0x6B89, 0x6C5B, 0x8A13, 0x8A0A, 0x905C, /* 0xB0 */
+ 0x8FC5, 0x58D3, 0x62BC, 0x9D09, 0x9D28, 0x5440, 0x4E2B, 0x82BD, /* 0xB0 */
+ 0x7259, 0x869C, 0x5D16, 0x8859, 0x6DAF, 0x96C5, 0x555E, 0x4E9E, /* 0xC0 */
+ 0x8A1D, 0x7109, 0x54BD, 0x95B9, 0x70DF, 0x6DF9, 0x9E7D, 0x56B4, /* 0xC0 */
+ 0x7814, 0x8712, 0x5CA9, 0x5EF6, 0x8A00, 0x9854, 0x95BB, 0x708E, /* 0xD0 */
+ 0x6CBF, 0x5944, 0x63A9, 0x773C, 0x884D, 0x6F14, 0x8277, 0x5830, /* 0xD0 */
+ 0x71D5, 0x53AD, 0x786F, 0x96C1, 0x5501, 0x5F66, 0x7130, 0x5BB4, /* 0xE0 */
+ 0x8AFA, 0x9A57, 0x6B83, 0x592E, 0x9D26, 0x79E7, 0x694A, 0x63DA, /* 0xE0 */
+ 0x4F6F, 0x760D, 0x7F8A, 0x6D0B, 0x967D, 0x6C27, 0x4EF0, 0x7662, /* 0xF0 */
+ 0x990A, 0x6A23, 0x6F3E, 0x9080, 0x8170, 0x5996, 0x7476 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6447, 0x582F, 0x9065, 0x7A91, 0x8B21, 0x59DA, 0x54AC, /* 0xA0 */
+ 0x8200, 0x85E5, 0x8981, 0x8000, 0x6930, 0x564E, 0x8036, 0x723A, /* 0xA0 */
+ 0x91CE, 0x51B6, 0x4E5F, 0x9801, 0x6396, 0x696D, 0x8449, 0x66F3, /* 0xB0 */
+ 0x814B, 0x591C, 0x6DB2, 0x4E00, 0x58F9, 0x91AB, 0x63D6, 0x92A5, /* 0xB0 */
+ 0x4F9D, 0x4F0A, 0x8863, 0x9824, 0x5937, 0x907A, 0x79FB, 0x5100, /* 0xC0 */
+ 0x80F0, 0x7591, 0x6C82, 0x5B9C, 0x59E8, 0x5F5D, 0x6905, 0x87FB, /* 0xC0 */
+ 0x501A, 0x5DF2, 0x4E59, 0x77E3, 0x4EE5, 0x85DD, 0x6291, 0x6613, /* 0xD0 */
+ 0x9091, 0x5C79, 0x5104, 0x5F79, 0x81C6, 0x9038, 0x8084, 0x75AB, /* 0xD0 */
+ 0x4EA6, 0x88D4, 0x610F, 0x6BC5, 0x61B6, 0x7FA9, 0x76CA, 0x6EA2, /* 0xE0 */
+ 0x8A63, 0x8B70, 0x8ABC, 0x8B6F, 0x5F02, 0x7FFC, 0x7FCC, 0x7E79, /* 0xE0 */
+ 0x8335, 0x852D, 0x56E0, 0x6BB7, 0x97F3, 0x9670, 0x59FB, 0x541F, /* 0xF0 */
+ 0x9280, 0x6DEB, 0x5BC5, 0x98F2, 0x5C39, 0x5F15, 0x96B1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5370, 0x82F1, 0x6AFB, 0x5B30, 0x9DF9, 0x61C9, 0x7E93, /* 0xA0 */
+ 0x7469, 0x87A2, 0x71DF, 0x7192, 0x8805, 0x8FCE, 0x8D0F, 0x76C8, /* 0xA0 */
+ 0x5F71, 0x7A4E, 0x786C, 0x6620, 0x55B2, 0x64C1, 0x50AD, 0x81C3, /* 0xB0 */
+ 0x7670, 0x5EB8, 0x96CD, 0x8E34, 0x86F9, 0x548F, 0x6CF3, 0x6D8C, /* 0xB0 */
+ 0x6C38, 0x607F, 0x52C7, 0x7528, 0x5E7D, 0x512A, 0x60A0, 0x6182, /* 0xC0 */
+ 0x5C24, 0x7531, 0x90F5, 0x923E, 0x7336, 0x6CB9, 0x6E38, 0x9149, /* 0xC0 */
+ 0x6709, 0x53CB, 0x53F3, 0x4F51, 0x91C9, 0x8A98, 0x53C8, 0x5E7C, /* 0xD0 */
+ 0x8FC2, 0x6DE4, 0x4E8E, 0x76C2, 0x6986, 0x865E, 0x611A, 0x8F3F, /* 0xD0 */
+ 0x9918, 0x4FDE, 0x903E, 0x9B5A, 0x6109, 0x6E1D, 0x6F01, 0x9685, /* 0xE0 */
+ 0x4E88, 0x5A31, 0x96E8, 0x8207, 0x5DBC, 0x79B9, 0x5B87, 0x8A9E, /* 0xE0 */
+ 0x7FBD, 0x7389, 0x57DF, 0x828B, 0x9B31, 0x5401, 0x9047, 0x55BB, /* 0xF0 */
+ 0x5CEA, 0x5FA1, 0x6108, 0x6B32, 0x7344, 0x80B2, 0x8B7D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6D74, 0x5BD3, 0x88D5, 0x9810, 0x8C6B, 0x99AD, 0x9D1B, /* 0xA0 */
+ 0x6DF5, 0x51A4, 0x5143, 0x57A3, 0x8881, 0x539F, 0x63F4, 0x8F45, /* 0xA0 */
+ 0x5712, 0x54E1, 0x5713, 0x733F, 0x6E90, 0x7DE3, 0x9060, 0x82D1, /* 0xB0 */
+ 0x9858, 0x6028, 0x9662, 0x66F0, 0x7D04, 0x8D8A, 0x8E8D, 0x9470, /* 0xB0 */
+ 0x5CB3, 0x7CA4, 0x6708, 0x60A6, 0x95B2, 0x8018, 0x96F2, 0x9116, /* 0xC0 */
+ 0x5300, 0x9695, 0x5141, 0x904B, 0x85F4, 0x9196, 0x6688, 0x97F5, /* 0xC0 */
+ 0x5B55, 0x531D, 0x7838, 0x96DC, 0x683D, 0x54C9, 0x707E, 0x5BB0, /* 0xD0 */
+ 0x8F09, 0x518D, 0x5728, 0x54B1, 0x6522, 0x66AB, 0x8D0A, 0x8D1C, /* 0xD0 */
+ 0x81DF, 0x846C, 0x906D, 0x7CDF, 0x947F, 0x85FB, 0x68D7, 0x65E9, /* 0xE0 */
+ 0x6FA1, 0x86A4, 0x8E81, 0x566A, 0x9020, 0x7682, 0x7AC8, 0x71E5, /* 0xE0 */
+ 0x8CAC, 0x64C7, 0x5247, 0x6FA4, 0x8CCA, 0x600E, 0x589E, 0x618E, /* 0xF0 */
+ 0x66FE, 0x8D08, 0x624E, 0x55B3, 0x6E23, 0x672D, 0x8ECB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9358, 0x9598, 0x7728, 0x6805, 0x69A8, 0x548B, 0x4E4D, /* 0xA0 */
+ 0x70B8, 0x8A50, 0x6458, 0x9F4B, 0x5B85, 0x7A84, 0x50B5, 0x5BE8, /* 0xA0 */
+ 0x77BB, 0x6C08, 0x8A79, 0x7C98, 0x6CBE, 0x76DE, 0x65AC, 0x8F3E, /* 0xB0 */
+ 0x5D84, 0x5C55, 0x8638, 0x68E7, 0x5360, 0x6230, 0x7AD9, 0x6E5B, /* 0xB0 */
+ 0x7DBB, 0x6A1F, 0x7AE0, 0x5F70, 0x6F33, 0x5F35, 0x638C, 0x6F32, /* 0xC0 */
+ 0x6756, 0x4E08, 0x5E33, 0x8CEC, 0x4ED7, 0x8139, 0x7634, 0x969C, /* 0xC0 */
+ 0x62DB, 0x662D, 0x627E, 0x6CBC, 0x8D99, 0x7167, 0x7F69, 0x5146, /* 0xD0 */
+ 0x8087, 0x53EC, 0x906E, 0x6298, 0x54F2, 0x87C4, 0x8F4D, 0x8005, /* 0xD0 */
+ 0x937A, 0x8517, 0x9019, 0x6D59, 0x73CD, 0x659F, 0x771F, 0x7504, /* 0xE0 */
+ 0x7827, 0x81FB, 0x8C9E, 0x91DD, 0x5075, 0x6795, 0x75B9, 0x8A3A, /* 0xE0 */
+ 0x9707, 0x632F, 0x93AE, 0x9663, 0x84B8, 0x6399, 0x775C, 0x5F81, /* 0xF0 */
+ 0x7319, 0x722D, 0x6014, 0x6574, 0x62EF, 0x6B63, 0x653F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5E40, 0x7665, 0x912D, 0x8B49, 0x829D, 0x679D, 0x652F, /* 0xA0 */
+ 0x5431, 0x8718, 0x77E5, 0x80A2, 0x8102, 0x6C41, 0x4E4B, 0x7E54, /* 0xA0 */
+ 0x8077, 0x76F4, 0x690D, 0x6B96, 0x57F7, 0x503C, 0x4F84, 0x5740, /* 0xB0 */
+ 0x6307, 0x6B62, 0x8DBE, 0x8879, 0x65E8, 0x7D19, 0x5FD7, 0x646F, /* 0xB0 */
+ 0x64F2, 0x81F3, 0x81F4, 0x7F6E, 0x5E5F, 0x5CD9, 0x5236, 0x667A, /* 0xC0 */
+ 0x79E9, 0x7A1A, 0x8CEA, 0x7099, 0x75D4, 0x6EEF, 0x6CBB, 0x7A92, /* 0xC0 */
+ 0x4E2D, 0x76C5, 0x5FE0, 0x9418, 0x8877, 0x7D42, 0x7A2E, 0x816B, /* 0xD0 */
+ 0x91CD, 0x4EF2, 0x8846, 0x821F, 0x5468, 0x5DDE, 0x6D32, 0x8B05, /* 0xD0 */
+ 0x7CA5, 0x8EF8, 0x8098, 0x5E1A, 0x5492, 0x76BA, 0x5B99, 0x665D, /* 0xE0 */
+ 0x9A5F, 0x73E0, 0x682A, 0x86DB, 0x6731, 0x732A, 0x8AF8, 0x8A85, /* 0xE0 */
+ 0x9010, 0x7AF9, 0x71ED, 0x716E, 0x62C4, 0x77DA, 0x56D1, 0x4E3B, /* 0xF0 */
+ 0x8457, 0x67F1, 0x52A9, 0x86C0, 0x8CAF, 0x9444, 0x7BC9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F4F, 0x6CE8, 0x795D, 0x99D0, 0x6293, 0x722A, 0x62FD, /* 0xA0 */
+ 0x5C08, 0x78DA, 0x8F49, 0x64B0, 0x8CFA, 0x7BC6, 0x6A01, 0x838A, /* 0xA0 */
+ 0x88DD, 0x599D, 0x649E, 0x58EF, 0x72C0, 0x690E, 0x9310, 0x8FFD, /* 0xB0 */
+ 0x8D05, 0x589C, 0x7DB4, 0x8AC4, 0x6E96, 0x6349, 0x62D9, 0x5353, /* 0xB0 */
+ 0x684C, 0x7422, 0x8301, 0x914C, 0x5544, 0x7740, 0x707C, 0x6FC1, /* 0xC0 */
+ 0x5179, 0x54A8, 0x8CC7, 0x59FF, 0x6ECB, 0x6DC4, 0x5B5C, 0x7D2B, /* 0xC0 */
+ 0x4ED4, 0x7C7D, 0x6ED3, 0x5B50, 0x81EA, 0x6F2C, 0x5B57, 0x9B03, /* 0xD0 */
+ 0x68D5, 0x8E2A, 0x5B97, 0x7D9C, 0x7E3D, 0x7E31, 0x9112, 0x8D70, /* 0xD0 */
+ 0x594F, 0x63CD, 0x79DF, 0x8DB3, 0x5352, 0x65CF, 0x7956, 0x8A5B, /* 0xE0 */
+ 0x963B, 0x7D44, 0x947D, 0x7E82, 0x5634, 0x9189, 0x6700, 0x7F6A, /* 0xE0 */
+ 0x5C0A, 0x9075, 0x6628, 0x5DE6, 0x4F50, 0x67DE, 0x505A, 0x4F5C, /* 0xF0 */
+ 0x5750, 0x5EA7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E8D, 0x4E0C, 0x5140, 0x4E10, 0x5EFF, 0x5345, 0x4E15, /* 0xA0 */
+ 0x4E98, 0x4E1E, 0x9B32, 0x5B6C, 0x5669, 0x4E28, 0x79BA, 0x4E3F, /* 0xA0 */
+ 0x5315, 0x4E47, 0x592D, 0x723B, 0x536E, 0x6C10, 0x56DF, 0x80E4, /* 0xB0 */
+ 0x9997, 0x6BD3, 0x777E, 0x9F17, 0x4E36, 0x4E9F, 0x9F10, 0x4E5C, /* 0xB0 */
+ 0x4E69, 0x4E93, 0x8288, 0x5B5B, 0x55C7, 0x560F, 0x4EC4, 0x5399, /* 0xC0 */
+ 0x539D, 0x53B4, 0x53A5, 0x53AE, 0x9768, 0x8D0B, 0x531A, 0x53F5, /* 0xC0 */
+ 0x532D, 0x5331, 0x533E, 0x8CFE, 0x5366, 0x5363, 0x5202, 0x5208, /* 0xD0 */
+ 0x520E, 0x5244, 0x5233, 0x528C, 0x5274, 0x524C, 0x525E, 0x5261, /* 0xD0 */
+ 0x525C, 0x84AF, 0x527D, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, /* 0xE0 */
+ 0x7F54, 0x4EBB, 0x4EC3, 0x4EC9, 0x4EC2, 0x4EE8, 0x4EE1, 0x4EEB, /* 0xE0 */
+ 0x4EDE, 0x50B4, 0x4EF3, 0x4F22, 0x4F64, 0x4EF5, 0x5000, 0x5096, /* 0xF0 */
+ 0x4F09, 0x4F47, 0x4F5E, 0x4F67, 0x6538, 0x4F5A, 0x4F5D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_D9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F5F, 0x4F57, 0x4F32, 0x4F3D, 0x4F76, 0x4F74, 0x4F91, /* 0xA0 */
+ 0x4F89, 0x4F83, 0x4F8F, 0x4F7E, 0x4F7B, 0x5115, 0x4F7C, 0x5102, /* 0xA0 */
+ 0x4F94, 0x5114, 0x513C, 0x5137, 0x4FC5, 0x4FDA, 0x4FE3, 0x4FDC, /* 0xB0 */
+ 0x4FD1, 0x4FDF, 0x4FF8, 0x5029, 0x504C, 0x4FF3, 0x502C, 0x500F, /* 0xB0 */
+ 0x502E, 0x502D, 0x4FFE, 0x501C, 0x500C, 0x5025, 0x5028, 0x50E8, /* 0xC0 */
+ 0x5043, 0x5055, 0x5048, 0x504E, 0x506C, 0x50C2, 0x513B, 0x5110, /* 0xC0 */
+ 0x513A, 0x50BA, 0x50D6, 0x5106, 0x50ED, 0x50EC, 0x50E6, 0x50EE, /* 0xD0 */
+ 0x5107, 0x510B, 0x4EDD, 0x6C3D, 0x4F58, 0x50C9, 0x4FCE, 0x9FA0, /* 0xD0 */
+ 0x6C46, 0x7CF4, 0x516E, 0x5DFD, 0x9ECC, 0x9998, 0x56C5, 0x5914, /* 0xE0 */
+ 0x52F9, 0x530D, 0x8A07, 0x5310, 0x9CEC, 0x5919, 0x5155, 0x4EA0, /* 0xE0 */
+ 0x5156, 0x4EB3, 0x886E, 0x88A4, 0x893B, 0x81E0, 0x88D2, 0x7980, /* 0xF0 */
+ 0x5B34, 0x8803, 0x7FB8, 0x51AB, 0x51B1, 0x51BD, 0x51BC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_DA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x51C7, 0x5196, 0x51A2, 0x51A5, 0x8A01, 0x8A10, 0x8A0C, /* 0xA0 */
+ 0x8A15, 0x8B33, 0x8A4E, 0x8A25, 0x8A41, 0x8A36, 0x8A46, 0x8A54, /* 0xA0 */
+ 0x8A58, 0x8A52, 0x8A86, 0x8A84, 0x8A7F, 0x8A70, 0x8A7C, 0x8A75, /* 0xB0 */
+ 0x8A6C, 0x8A6E, 0x8ACD, 0x8AE2, 0x8A61, 0x8A9A, 0x8AA5, 0x8A91, /* 0xB0 */
+ 0x8A92, 0x8ACF, 0x8AD1, 0x8AC9, 0x8ADB, 0x8AD7, 0x8AC2, 0x8AB6, /* 0xC0 */
+ 0x8AF6, 0x8AEB, 0x8B14, 0x8B01, 0x8AE4, 0x8AED, 0x8AFC, 0x8AF3, /* 0xC0 */
+ 0x8AE6, 0x8AEE, 0x8ADE, 0x8B28, 0x8B9C, 0x8B16, 0x8B1A, 0x8B10, /* 0xD0 */
+ 0x8B2B, 0x8B2D, 0x8B56, 0x8B59, 0x8B4E, 0x8B9E, 0x8B6B, 0x8B96, /* 0xD0 */
+ 0x5369, 0x537A, 0x961D, 0x9622, 0x9621, 0x9631, 0x962A, 0x963D, /* 0xE0 */
+ 0x963C, 0x9642, 0x9658, 0x9654, 0x965F, 0x9689, 0x966C, 0x9672, /* 0xE0 */
+ 0x9674, 0x9688, 0x968D, 0x9697, 0x96B0, 0x9097, 0x909B, 0x913A, /* 0xF0 */
+ 0x9099, 0x9114, 0x90A1, 0x90B4, 0x90B3, 0x90B6, 0x9134 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_DB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x90B8, 0x90B0, 0x90DF, 0x90C5, 0x90BE, 0x9136, 0x90C4, /* 0xA0 */
+ 0x90C7, 0x9106, 0x9148, 0x90E2, 0x90DC, 0x90D7, 0x90DB, 0x90EB, /* 0xA0 */
+ 0x90EF, 0x90FE, 0x9104, 0x9122, 0x911E, 0x9123, 0x9131, 0x912F, /* 0xB0 */
+ 0x9139, 0x9143, 0x9146, 0x82BB, 0x5950, 0x52F1, 0x52AC, 0x52AD, /* 0xB0 */
+ 0x52BE, 0x54FF, 0x52D0, 0x52D6, 0x52F0, 0x53DF, 0x71EE, 0x77CD, /* 0xC0 */
+ 0x5EF4, 0x51F5, 0x51FC, 0x9B2F, 0x53B6, 0x5F01, 0x755A, 0x5DF0, /* 0xC0 */
+ 0x574C, 0x580A, 0x57A1, 0x587E, 0x58BC, 0x58C5, 0x58D1, 0x5729, /* 0xD0 */
+ 0x572C, 0x572A, 0x5733, 0x58D9, 0x572E, 0x572F, 0x58E2, 0x573B, /* 0xD0 */
+ 0x5742, 0x5769, 0x58E0, 0x576B, 0x58DA, 0x577C, 0x577B, 0x5768, /* 0xE0 */
+ 0x576D, 0x5776, 0x5773, 0x57E1, 0x57A4, 0x578C, 0x584F, 0x57CF, /* 0xE0 */
+ 0x57A7, 0x5816, 0x5793, 0x57A0, 0x57D5, 0x5852, 0x581D, 0x5864, /* 0xF0 */
+ 0x57D2, 0x57B8, 0x57F4, 0x57EF, 0x57F8, 0x57E4, 0x57DD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_DC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x580B, 0x580D, 0x57FD, 0x57ED, 0x5800, 0x581E, 0x5819, /* 0xA0 */
+ 0x5844, 0x5820, 0x5865, 0x586C, 0x5881, 0x5889, 0x589A, 0x5880, /* 0xA0 */
+ 0x99A8, 0x9F19, 0x61FF, 0x8279, 0x827D, 0x827F, 0x828F, 0x828A, /* 0xB0 */
+ 0x82A8, 0x8284, 0x828E, 0x8291, 0x858C, 0x8299, 0x82AB, 0x8553, /* 0xB0 */
+ 0x82BE, 0x82B0, 0x85F6, 0x82CA, 0x82E3, 0x8298, 0x82B7, 0x82AE, /* 0xC0 */
+ 0x83A7, 0x8407, 0x84EF, 0x82A9, 0x82B4, 0x82A1, 0x82AA, 0x829F, /* 0xC0 */
+ 0x82C4, 0x82E7, 0x82A4, 0x82E1, 0x8309, 0x82F7, 0x82E4, 0x8622, /* 0xD0 */
+ 0x8307, 0x82DC, 0x82F4, 0x82D2, 0x82D8, 0x830C, 0x82FB, 0x82D3, /* 0xD0 */
+ 0x8526, 0x831A, 0x8306, 0x584B, 0x7162, 0x82E0, 0x82D5, 0x831C, /* 0xE0 */
+ 0x8351, 0x8558, 0x84FD, 0x8308, 0x8392, 0x833C, 0x8334, 0x8331, /* 0xE0 */
+ 0x839B, 0x854E, 0x832F, 0x834F, 0x8347, 0x8343, 0x8588, 0x8340, /* 0xF0 */
+ 0x8317, 0x85BA, 0x832D, 0x833A, 0x8333, 0x7296, 0x6ECE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_DD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8541, 0x831B, 0x85CE, 0x8552, 0x84C0, 0x8452, 0x8464, /* 0xA0 */
+ 0x83B0, 0x8378, 0x8494, 0x8435, 0x83A0, 0x83AA, 0x8393, 0x839C, /* 0xA0 */
+ 0x8385, 0x837C, 0x859F, 0x83A9, 0x837D, 0x8555, 0x837B, 0x8398, /* 0xB0 */
+ 0x839E, 0x83A8, 0x9DAF, 0x8493, 0x83C1, 0x8401, 0x83E5, 0x83D8, /* 0xB0 */
+ 0x5807, 0x8418, 0x840B, 0x83DD, 0x83FD, 0x83D6, 0x841C, 0x8438, /* 0xC0 */
+ 0x8411, 0x8406, 0x83D4, 0x83DF, 0x840F, 0x8403, 0x83F8, 0x83F9, /* 0xC0 */
+ 0x83EA, 0x83C5, 0x83C0, 0x7E08, 0x83F0, 0x83E1, 0x845C, 0x8451, /* 0xD0 */
+ 0x845A, 0x8459, 0x8473, 0x8546, 0x8488, 0x847A, 0x8562, 0x8478, /* 0xD0 */
+ 0x843C, 0x8446, 0x8469, 0x8476, 0x851E, 0x848E, 0x8431, 0x846D, /* 0xE0 */
+ 0x84C1, 0x84CD, 0x84D0, 0x9A40, 0x84BD, 0x84D3, 0x84CA, 0x84BF, /* 0xE0 */
+ 0x84BA, 0x863A, 0x84A1, 0x84B9, 0x84B4, 0x8497, 0x93A3, 0x8577, /* 0xF0 */
+ 0x850C, 0x750D, 0x8538, 0x84F0, 0x861E, 0x851F, 0x85FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_DE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8556, 0x853B, 0x84FF, 0x84FC, 0x8559, 0x8548, 0x8568, /* 0xA0 */
+ 0x8564, 0x855E, 0x857A, 0x77A2, 0x8543, 0x8604, 0x857B, 0x85A4, /* 0xA0 */
+ 0x85A8, 0x8587, 0x858F, 0x8579, 0x85EA, 0x859C, 0x8585, 0x85B9, /* 0xB0 */
+ 0x85B7, 0x85B0, 0x861A, 0x85C1, 0x85DC, 0x85FF, 0x8627, 0x8605, /* 0xB0 */
+ 0x8629, 0x8616, 0x863C, 0x5EFE, 0x5F08, 0x593C, 0x5969, 0x8037, /* 0xC0 */
+ 0x5955, 0x595A, 0x5958, 0x530F, 0x5C22, 0x5C25, 0x5C2C, 0x5C37, /* 0xC0 */
+ 0x624C, 0x636B, 0x6476, 0x62BB, 0x62CA, 0x62DA, 0x62D7, 0x62EE, /* 0xD0 */
+ 0x649F, 0x62F6, 0x6339, 0x634B, 0x6343, 0x63AD, 0x63F6, 0x6371, /* 0xD0 */
+ 0x637A, 0x638E, 0x6451, 0x636D, 0x63AC, 0x638A, 0x6369, 0x63AE, /* 0xE0 */
+ 0x645C, 0x63F2, 0x63F8, 0x63E0, 0x64B3, 0x63C4, 0x63DE, 0x63CE, /* 0xE0 */
+ 0x6452, 0x63C6, 0x63BE, 0x6504, 0x6441, 0x640B, 0x641B, 0x6420, /* 0xF0 */
+ 0x640C, 0x6426, 0x6421, 0x645E, 0x6516, 0x646D, 0x6496 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_DF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x647A, 0x64F7, 0x64FC, 0x6499, 0x651B, 0x64C0, 0x64D0, /* 0xA0 */
+ 0x64D7, 0x64E4, 0x64E2, 0x6509, 0x6525, 0x652E, 0x5F0B, 0x5FD2, /* 0xA0 */
+ 0x7519, 0x5F11, 0x535F, 0x53F1, 0x5630, 0x53E9, 0x53E8, 0x53FB, /* 0xB0 */
+ 0x5412, 0x5416, 0x5406, 0x544B, 0x5638, 0x56C8, 0x5454, 0x56A6, /* 0xB0 */
+ 0x5443, 0x5421, 0x5504, 0x54BC, 0x5423, 0x5432, 0x5482, 0x5494, /* 0xC0 */
+ 0x5477, 0x5471, 0x5464, 0x549A, 0x5680, 0x5484, 0x5476, 0x5466, /* 0xC0 */
+ 0x565D, 0x54D0, 0x54AD, 0x54C2, 0x54B4, 0x5660, 0x54A7, 0x54A6, /* 0xD0 */
+ 0x5635, 0x55F6, 0x5472, 0x54A3, 0x5666, 0x54BB, 0x54BF, 0x54CC, /* 0xD0 */
+ 0x5672, 0x54DA, 0x568C, 0x54A9, 0x54AA, 0x54A4, 0x5665, 0x54CF, /* 0xE0 */
+ 0x54DE, 0x561C, 0x54E7, 0x562E, 0x54FD, 0x5514, 0x54F3, 0x55E9, /* 0xE0 */
+ 0x5523, 0x550F, 0x5511, 0x5527, 0x552A, 0x5616, 0x558F, 0x55B5, /* 0xF0 */
+ 0x5549, 0x56C0, 0x5541, 0x5555, 0x553F, 0x5550, 0x553C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, /* 0xA0 */
+ 0x555C, 0x558B, 0x55D2, 0x5583, 0x55B1, 0x55B9, 0x5588, 0x5581, /* 0xA0 */
+ 0x559F, 0x557E, 0x55D6, 0x5591, 0x557B, 0x55DF, 0x560D, 0x56B3, /* 0xB0 */
+ 0x5594, 0x5599, 0x55EA, 0x55F7, 0x55C9, 0x561F, 0x55D1, 0x56C1, /* 0xB0 */
+ 0x55EC, 0x55D4, 0x55E6, 0x55DD, 0x55C4, 0x55EF, 0x55E5, 0x55F2, /* 0xC0 */
+ 0x566F, 0x55CC, 0x55CD, 0x55E8, 0x55F5, 0x55E4, 0x8F61, 0x561E, /* 0xC0 */
+ 0x5608, 0x560C, 0x5601, 0x56B6, 0x5623, 0x55FE, 0x5600, 0x5627, /* 0xD0 */
+ 0x562D, 0x5658, 0x5639, 0x5657, 0x562C, 0x564D, 0x5662, 0x5659, /* 0xD0 */
+ 0x5695, 0x564C, 0x5654, 0x5686, 0x5664, 0x5671, 0x566B, 0x567B, /* 0xE0 */
+ 0x567C, 0x5685, 0x5693, 0x56AF, 0x56D4, 0x56D7, 0x56DD, 0x56E1, /* 0xE0 */
+ 0x5707, 0x56EB, 0x56F9, 0x56FF, 0x5704, 0x570A, 0x5709, 0x571C, /* 0xF0 */
+ 0x5E43, 0x5E19, 0x5E14, 0x5E11, 0x5E6C, 0x5E58, 0x5E57 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5E37, 0x5E44, 0x5E54, 0x5E5B, 0x5E5E, 0x5E61, 0x5C8C, /* 0xA0 */
+ 0x5C7A, 0x5C8D, 0x5C90, 0x5D87, 0x5C88, 0x5CF4, 0x5C99, 0x5C91, /* 0xA0 */
+ 0x5D50, 0x5C9C, 0x5CB5, 0x5CA2, 0x5D2C, 0x5CAC, 0x5CAB, 0x5CB1, /* 0xB0 */
+ 0x5CA3, 0x5CC1, 0x5CB7, 0x5DA7, 0x5CD2, 0x5DA0, 0x5CCB, 0x5D22, /* 0xB0 */
+ 0x5D97, 0x5D0D, 0x5D27, 0x5D26, 0x5D2E, 0x5D24, 0x5D1E, 0x5D06, /* 0xC0 */
+ 0x5D1B, 0x5DB8, 0x5D3E, 0x5D34, 0x5D3D, 0x5D6C, 0x5D5B, 0x5D6F, /* 0xC0 */
+ 0x5D81, 0x5D6B, 0x5D4B, 0x5D4A, 0x5D69, 0x5D74, 0x5D82, 0x5D99, /* 0xD0 */
+ 0x5D9D, 0x8C73, 0x5DB7, 0x5DD4, 0x5F73, 0x5F77, 0x5F82, 0x5F87, /* 0xD0 */
+ 0x5F89, 0x540E, 0x5FA0, 0x5F99, 0x5F9C, 0x5FA8, 0x5FAD, 0x5FB5, /* 0xE0 */
+ 0x5FBC, 0x8862, 0x5F61, 0x72AD, 0x72B0, 0x72B4, 0x7377, 0x7341, /* 0xE0 */
+ 0x72C3, 0x72C1, 0x72CE, 0x72CD, 0x72D2, 0x72E8, 0x736A, 0x72E9, /* 0xF0 */
+ 0x733B, 0x72F4, 0x72F7, 0x7301, 0x72F3, 0x736B, 0x72FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x72FB, 0x7317, 0x7313, 0x7380, 0x730A, 0x731E, 0x731D, /* 0xA0 */
+ 0x737C, 0x7322, 0x7339, 0x7325, 0x732C, 0x7338, 0x7331, 0x7350, /* 0xA0 */
+ 0x734D, 0x7357, 0x7360, 0x736C, 0x736F, 0x737E, 0x821B, 0x5925, /* 0xB0 */
+ 0x98E7, 0x5924, 0x5902, 0x98E0, 0x9933, 0x98E9, 0x993C, 0x98EA, /* 0xB0 */
+ 0x98EB, 0x98ED, 0x98F4, 0x9909, 0x9911, 0x4F59, 0x991B, 0x9937, /* 0xC0 */
+ 0x993F, 0x9943, 0x9948, 0x9949, 0x994A, 0x994C, 0x9962, 0x5E80, /* 0xC0 */
+ 0x5EE1, 0x5E8B, 0x5E96, 0x5EA5, 0x5EA0, 0x5EB9, 0x5EB5, 0x5EBE, /* 0xD0 */
+ 0x5EB3, 0x8CE1, 0x5ED2, 0x5ED1, 0x5EDB, 0x5EE8, 0x5EEA, 0x81BA, /* 0xD0 */
+ 0x5FC4, 0x5FC9, 0x5FD6, 0x61FA, 0x61AE, 0x5FEE, 0x616A, 0x5FE1, /* 0xE0 */
+ 0x5FE4, 0x613E, 0x60B5, 0x6134, 0x5FEA, 0x5FED, 0x5FF8, 0x6019, /* 0xE0 */
+ 0x6035, 0x6026, 0x601B, 0x600F, 0x600D, 0x6029, 0x602B, 0x600A, /* 0xF0 */
+ 0x61CC, 0x6021, 0x615F, 0x61E8, 0x60FB, 0x6137, 0x6042 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x606A, 0x60F2, 0x6096, 0x609A, 0x6173, 0x609D, 0x6083, /* 0xA0 */
+ 0x6092, 0x608C, 0x609B, 0x611C, 0x60BB, 0x60B1, 0x60DD, 0x60D8, /* 0xA0 */
+ 0x60C6, 0x60DA, 0x60B4, 0x6120, 0x6192, 0x6115, 0x6123, 0x60F4, /* 0xB0 */
+ 0x6100, 0x610E, 0x612B, 0x614A, 0x6175, 0x61AC, 0x6194, 0x61A7, /* 0xB0 */
+ 0x61B7, 0x61D4, 0x61F5, 0x5FDD, 0x96B3, 0x9582, 0x9586, 0x95C8, /* 0xC0 */
+ 0x958E, 0x9594, 0x958C, 0x95E5, 0x95AD, 0x95AB, 0x9B2E, 0x95AC, /* 0xC0 */
+ 0x95BE, 0x95B6, 0x9B29, 0x95BF, 0x95BD, 0x95BC, 0x95C3, 0x95CB, /* 0xD0 */
+ 0x95D4, 0x95D0, 0x95D5, 0x95DE, 0x4E2C, 0x723F, 0x6215, 0x6C35, /* 0xD0 */
+ 0x6C54, 0x6C5C, 0x6C4A, 0x7043, 0x6C85, 0x6C90, 0x6C94, 0x6C8C, /* 0xE0 */
+ 0x6C68, 0x6C69, 0x6C74, 0x6C76, 0x6C86, 0x6F59, 0x6CD0, 0x6CD4, /* 0xE0 */
+ 0x6CAD, 0x7027, 0x7018, 0x6CF1, 0x6CD7, 0x6CB2, 0x6CE0, 0x6CD6, /* 0xF0 */
+ 0x6FFC, 0x6CEB, 0x6CEE, 0x6CB1, 0x6CD3, 0x6CEF, 0x6D87 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6D39, 0x6D27, 0x6D0C, 0x6D79, 0x6E5E, 0x6D07, 0x6D04, /* 0xA0 */
+ 0x6D19, 0x6D0E, 0x6D2B, 0x6FAE, 0x6D2E, 0x6D35, 0x6D1A, 0x700F, /* 0xA0 */
+ 0x6EF8, 0x6F6F, 0x6D33, 0x6D91, 0x6D6F, 0x6DF6, 0x6F7F, 0x6D5E, /* 0xB0 */
+ 0x6D93, 0x6D94, 0x6D5C, 0x6D60, 0x6D7C, 0x6D63, 0x6E1A, 0x6DC7, /* 0xB0 */
+ 0x6DC5, 0x6DDE, 0x7006, 0x6DBF, 0x6DE0, 0x6FA0, 0x6DE6, 0x6DDD, /* 0xC0 */
+ 0x6DD9, 0x700B, 0x6DAB, 0x6E0C, 0x6DAE, 0x6E2B, 0x6E6E, 0x6E4E, /* 0xC0 */
+ 0x6E6B, 0x6EB2, 0x6E5F, 0x6E86, 0x6E53, 0x6E54, 0x6E32, 0x6E25, /* 0xD0 */
+ 0x6E44, 0x7067, 0x6EB1, 0x6E98, 0x7044, 0x6F2D, 0x7005, 0x6EA5, /* 0xD0 */
+ 0x6EA7, 0x6EBD, 0x6EBB, 0x6EB7, 0x6F77, 0x6EB4, 0x6ECF, 0x6E8F, /* 0xE0 */
+ 0x6EC2, 0x6E9F, 0x6F62, 0x7020, 0x701F, 0x6F24, 0x6F15, 0x6EF9, /* 0xE0 */
+ 0x6F2F, 0x6F36, 0x7032, 0x6F74, 0x6F2A, 0x6F09, 0x6F29, 0x6F89, /* 0xF0 */
+ 0x6F8D, 0x6F8C, 0x6F78, 0x6F72, 0x6F7C, 0x6F7A, 0x7028 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6FC9, 0x6FA7, 0x6FB9, 0x6FB6, 0x6FC2, 0x6FE1, 0x6FEE, /* 0xA0 */
+ 0x6FDE, 0x6FE0, 0x6FEF, 0x701A, 0x7023, 0x701B, 0x7039, 0x7035, /* 0xA0 */
+ 0x705D, 0x705E, 0x5B80, 0x5B84, 0x5B95, 0x5B93, 0x5BA5, 0x5BB8, /* 0xB0 */
+ 0x752F, 0x9A2B, 0x6434, 0x5BE4, 0x5BEE, 0x8930, 0x5BF0, 0x8E47, /* 0xB0 */
+ 0x8B07, 0x8FB6, 0x8FD3, 0x8FD5, 0x8FE5, 0x8FEE, 0x8FE4, 0x9087, /* 0xC0 */
+ 0x8FE6, 0x9015, 0x8FE8, 0x9005, 0x9004, 0x900B, 0x9090, 0x9011, /* 0xC0 */
+ 0x900D, 0x9016, 0x9021, 0x9035, 0x9036, 0x902D, 0x902F, 0x9044, /* 0xD0 */
+ 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905B, 0x66B9, /* 0xD0 */
+ 0x9074, 0x907D, 0x9082, 0x9088, 0x9083, 0x908B, 0x5F50, 0x5F57, /* 0xE0 */
+ 0x5F56, 0x5F58, 0x5C3B, 0x54AB, 0x5C50, 0x5C59, 0x5B71, 0x5C63, /* 0xE0 */
+ 0x5C68, 0x7FBC, 0x5F33, 0x5F29, 0x5F2D, 0x8274, 0x5F3C, 0x9B3B, /* 0xF0 */
+ 0x5C6E, 0x5981, 0x5983, 0x598D, 0x5AF5, 0x5AD7, 0x59A3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5997, 0x59CA, 0x5B00, 0x599E, 0x59A4, 0x59D2, 0x59B2, /* 0xA0 */
+ 0x59AF, 0x59D7, 0x59BE, 0x5A6D, 0x5B08, 0x59DD, 0x5B4C, 0x59E3, /* 0xA0 */
+ 0x59D8, 0x59F9, 0x5A0C, 0x5A09, 0x5AA7, 0x5AFB, 0x5A11, 0x5A23, /* 0xB0 */
+ 0x5A13, 0x5A40, 0x5A67, 0x5A4A, 0x5A55, 0x5A3C, 0x5A62, 0x5B0B, /* 0xB0 */
+ 0x80EC, 0x5AAA, 0x5A9B, 0x5A77, 0x5A7A, 0x5ABE, 0x5AEB, 0x5AB2, /* 0xC0 */
+ 0x5B21, 0x5B2A, 0x5AB8, 0x5AE0, 0x5AE3, 0x5B19, 0x5AD6, 0x5AE6, /* 0xC0 */
+ 0x5AD8, 0x5ADC, 0x5B09, 0x5B17, 0x5B16, 0x5B32, 0x5B37, 0x5B40, /* 0xD0 */
+ 0x5C15, 0x5C1C, 0x5B5A, 0x5B65, 0x5B73, 0x5B51, 0x5B53, 0x5B62, /* 0xD0 */
+ 0x99D4, 0x99DF, 0x99D9, 0x9A36, 0x9A5B, 0x99D1, 0x99D8, 0x9A4D, /* 0xE0 */
+ 0x9A4A, 0x99E2, 0x9A6A, 0x9A0F, 0x9A0D, 0x9A05, 0x9A42, 0x9A2D, /* 0xE0 */
+ 0x9A16, 0x9A41, 0x9A2E, 0x9A38, 0x9A43, 0x9A44, 0x9A4F, 0x9A65, /* 0xF0 */
+ 0x9A64, 0x7CF9, 0x7D06, 0x7D02, 0x7D07, 0x7D08, 0x7E8A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7D1C, 0x7D15, 0x7D13, 0x7D3A, 0x7D32, 0x7D31, 0x7E10, /* 0xA0 */
+ 0x7D3C, 0x7D40, 0x7D3F, 0x7D5D, 0x7D4E, 0x7D73, 0x7D86, 0x7D83, /* 0xA0 */
+ 0x7D88, 0x7DBE, 0x7DBA, 0x7DCB, 0x7DD4, 0x7DC4, 0x7D9E, 0x7DAC, /* 0xB0 */
+ 0x7DB9, 0x7DA3, 0x7DB0, 0x7DC7, 0x7DD9, 0x7DD7, 0x7DF9, 0x7DF2, /* 0xB0 */
+ 0x7E62, 0x7DE6, 0x7DF6, 0x7DF1, 0x7E0B, 0x7DE1, 0x7E09, 0x7E1D, /* 0xC0 */
+ 0x7E1F, 0x7E1E, 0x7E2D, 0x7E0A, 0x7E11, 0x7E7D, 0x7E39, 0x7E35, /* 0xC0 */
+ 0x7E32, 0x7E46, 0x7E45, 0x7E88, 0x7E5A, 0x7E52, 0x7E6E, 0x7E7E, /* 0xD0 */
+ 0x7E70, 0x7E6F, 0x7E98, 0x5E7A, 0x757F, 0x5DDB, 0x753E, 0x9095, /* 0xD0 */
+ 0x738E, 0x74A3, 0x744B, 0x73A2, 0x739F, 0x73CF, 0x73C2, 0x74CF, /* 0xE0 */
+ 0x73B7, 0x73B3, 0x73C0, 0x73C9, 0x73C8, 0x73E5, 0x73D9, 0x980A, /* 0xE0 */
+ 0x740A, 0x73E9, 0x73E7, 0x73DE, 0x74BD, 0x743F, 0x7489, 0x742A, /* 0xF0 */
+ 0x745B, 0x7426, 0x7425, 0x7428, 0x7430, 0x742E, 0x742C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x741B, 0x741A, 0x7441, 0x745C, 0x7457, 0x7455, 0x7459, /* 0xA0 */
+ 0x74A6, 0x746D, 0x747E, 0x749C, 0x74D4, 0x7480, 0x7481, 0x7487, /* 0xA0 */
+ 0x748B, 0x749E, 0x74A8, 0x74A9, 0x7490, 0x74A7, 0x74DA, 0x74BA, /* 0xB0 */
+ 0x97D9, 0x97DE, 0x97DC, 0x674C, 0x6753, 0x675E, 0x6748, 0x69AA, /* 0xB0 */
+ 0x6AEA, 0x6787, 0x676A, 0x6773, 0x6798, 0x6898, 0x6775, 0x68D6, /* 0xC0 */
+ 0x6A05, 0x689F, 0x678B, 0x6777, 0x677C, 0x67F0, 0x6ADB, 0x67D8, /* 0xC0 */
+ 0x6AF3, 0x67E9, 0x67B0, 0x6AE8, 0x67D9, 0x67B5, 0x67DA, 0x67B3, /* 0xD0 */
+ 0x67DD, 0x6800, 0x67C3, 0x67B8, 0x67E2, 0x6ADF, 0x67C1, 0x6A89, /* 0xD0 */
+ 0x6832, 0x6833, 0x690F, 0x6A48, 0x684E, 0x6968, 0x6844, 0x69BF, /* 0xE0 */
+ 0x6883, 0x681D, 0x6855, 0x6A3A, 0x6841, 0x6A9C, 0x6840, 0x6B12, /* 0xE0 */
+ 0x684A, 0x6849, 0x6829, 0x68B5, 0x688F, 0x6874, 0x6877, 0x6893, /* 0xF0 */
+ 0x686B, 0x6B1E, 0x696E, 0x68FC, 0x6ADD, 0x69E7, 0x68F9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_E9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6B0F, 0x68F0, 0x690B, 0x6901, 0x6957, 0x68E3, 0x6910, /* 0xA0 */
+ 0x6971, 0x6939, 0x6960, 0x6942, 0x695D, 0x6B16, 0x696B, 0x6980, /* 0xA0 */
+ 0x6998, 0x6978, 0x6934, 0x69CC, 0x6AEC, 0x6ADA, 0x69CE, 0x6AF8, /* 0xB0 */
+ 0x6966, 0x6963, 0x6979, 0x699B, 0x69A7, 0x69BB, 0x69AB, 0x69AD, /* 0xB0 */
+ 0x69D4, 0x69B1, 0x69C1, 0x69CA, 0x6AB3, 0x6995, 0x6AE7, 0x698D, /* 0xC0 */
+ 0x69FF, 0x6AA3, 0x69ED, 0x6A17, 0x6A18, 0x6A65, 0x69F2, 0x6A44, /* 0xC0 */
+ 0x6A3E, 0x6AA0, 0x6A50, 0x6A5B, 0x6A35, 0x6A8E, 0x6AD3, 0x6A3D, /* 0xD0 */
+ 0x6A28, 0x6A58, 0x6ADE, 0x6A91, 0x6A90, 0x6AA9, 0x6A97, 0x6AAB, /* 0xD0 */
+ 0x7337, 0x7352, 0x6B81, 0x6B82, 0x6BA4, 0x6B84, 0x6B9E, 0x6BAE, /* 0xE0 */
+ 0x6B8D, 0x6BAB, 0x6B9B, 0x6BAF, 0x6BAA, 0x8ED4, 0x8EDB, 0x8EF2, /* 0xE0 */
+ 0x8EFB, 0x8F64, 0x8EF9, 0x8EFC, 0x8EEB, 0x8EE4, 0x8F62, 0x8EFA, /* 0xF0 */
+ 0x8EFE, 0x8F0A, 0x8F07, 0x8F05, 0x8F12, 0x8F26, 0x8F1E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_EA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8F1F, 0x8F1C, 0x8F33, 0x8F46, 0x8F54, 0x8ECE, 0x6214, /* 0xA0 */
+ 0x6227, 0x621B, 0x621F, 0x6222, 0x6221, 0x6225, 0x6224, 0x6229, /* 0xA0 */
+ 0x81E7, 0x750C, 0x74F4, 0x74FF, 0x750F, 0x7511, 0x7513, 0x6534, /* 0xB0 */
+ 0x65EE, 0x65EF, 0x65F0, 0x660A, 0x66C7, 0x6772, 0x6603, 0x6615, /* 0xB0 */
+ 0x6600, 0x7085, 0x66F7, 0x661D, 0x6634, 0x6631, 0x6636, 0x6635, /* 0xC0 */
+ 0x8006, 0x665F, 0x66C4, 0x6641, 0x664F, 0x6689, 0x6661, 0x6657, /* 0xC0 */
+ 0x6677, 0x6684, 0x668C, 0x66D6, 0x669D, 0x66BE, 0x66DB, 0x66DC, /* 0xD0 */
+ 0x66E6, 0x66E9, 0x8CC1, 0x8CB0, 0x8CBA, 0x8CBD, 0x8D04, 0x8CB2, /* 0xD0 */
+ 0x8CC5, 0x8D10, 0x8CD1, 0x8CDA, 0x8CD5, 0x8CEB, 0x8CE7, 0x8CFB, /* 0xE0 */
+ 0x8998, 0x89AC, 0x89A1, 0x89BF, 0x89A6, 0x89AF, 0x89B2, 0x89B7, /* 0xE0 */
+ 0x726E, 0x729F, 0x725D, 0x7266, 0x726F, 0x727E, 0x727F, 0x7284, /* 0xF0 */
+ 0x728B, 0x728D, 0x728F, 0x7292, 0x6308, 0x6332, 0x63B0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_EB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x643F, 0x64D8, 0x8004, 0x6BEA, 0x6BF3, 0x6BFD, 0x6BFF, /* 0xA0 */
+ 0x6BF9, 0x6C05, 0x6C0C, 0x6C06, 0x6C0D, 0x6C15, 0x6C18, 0x6C19, /* 0xA0 */
+ 0x6C1A, 0x6C21, 0x6C2C, 0x6C24, 0x6C2A, 0x6C32, 0x6535, 0x6555, /* 0xB0 */
+ 0x656B, 0x7258, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809F, /* 0xB0 */
+ 0x809C, 0x8093, 0x80BC, 0x670A, 0x80BD, 0x80B1, 0x80AB, 0x80AD, /* 0xC0 */
+ 0x80B4, 0x80B7, 0x6727, 0x8156, 0x80E9, 0x81DA, 0x80DB, 0x80C2, /* 0xC0 */
+ 0x80C4, 0x80D9, 0x80CD, 0x80D7, 0x6710, 0x80DD, 0x811B, 0x80F1, /* 0xD0 */
+ 0x80F4, 0x80ED, 0x81BE, 0x810E, 0x80F2, 0x80FC, 0x6715, 0x8112, /* 0xD0 */
+ 0x8C5A, 0x8161, 0x811E, 0x812C, 0x8118, 0x8132, 0x8148, 0x814C, /* 0xE0 */
+ 0x8153, 0x8174, 0x8159, 0x815A, 0x8171, 0x8160, 0x8169, 0x817C, /* 0xE0 */
+ 0x817D, 0x816D, 0x8167, 0x584D, 0x5AB5, 0x8188, 0x8182, 0x81CF, /* 0xF0 */
+ 0x6ED5, 0x81A3, 0x81AA, 0x81CC, 0x6726, 0x81CA, 0x81BB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_EC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x81C1, 0x81A6, 0x6B5F, 0x6B37, 0x6B39, 0x6B43, 0x6B46, /* 0xA0 */
+ 0x6B59, 0x98AE, 0x98AF, 0x98B6, 0x98BC, 0x98C6, 0x98C8, 0x6BB3, /* 0xA0 */
+ 0x5F40, 0x8F42, 0x89F3, 0x6590, 0x9F4F, 0x6595, 0x65BC, 0x65C6, /* 0xB0 */
+ 0x65C4, 0x65C3, 0x65CC, 0x65CE, 0x65D2, 0x65D6, 0x716C, 0x7152, /* 0xB0 */
+ 0x7096, 0x7197, 0x70BB, 0x70C0, 0x70B7, 0x70AB, 0x70B1, 0x71C1, /* 0xC0 */
+ 0x70CA, 0x7110, 0x7113, 0x71DC, 0x712F, 0x7131, 0x7173, 0x715C, /* 0xC0 */
+ 0x7168, 0x7145, 0x7172, 0x714A, 0x7178, 0x717A, 0x7198, 0x71B3, /* 0xD0 */
+ 0x71B5, 0x71A8, 0x71A0, 0x71E0, 0x71D4, 0x71E7, 0x71F9, 0x721D, /* 0xD0 */
+ 0x7228, 0x706C, 0x71FE, 0x7166, 0x71B9, 0x623E, 0x623D, 0x6243, /* 0xE0 */
+ 0x6248, 0x6249, 0x793B, 0x7940, 0x7946, 0x7949, 0x795B, 0x795C, /* 0xE0 */
+ 0x7953, 0x795A, 0x79B0, 0x7957, 0x7960, 0x798E, 0x7967, 0x797A, /* 0xF0 */
+ 0x79AA, 0x798A, 0x799A, 0x79A7, 0x79B3, 0x5FD1, 0x5FD0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_ED[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x61DF, 0x605D, 0x605A, 0x6067, 0x6041, 0x6059, 0x6063, /* 0xA0 */
+ 0x6164, 0x6106, 0x610D, 0x615D, 0x61A9, 0x619D, 0x61CB, 0x61E3, /* 0xA0 */
+ 0x6207, 0x8080, 0x807F, 0x6C93, 0x6FA9, 0x6DFC, 0x78EF, 0x77F8, /* 0xB0 */
+ 0x78AD, 0x7809, 0x7868, 0x7818, 0x7811, 0x65AB, 0x782D, 0x78B8, /* 0xB0 */
+ 0x781D, 0x7839, 0x792A, 0x7931, 0x781F, 0x783C, 0x7825, 0x782C, /* 0xC0 */
+ 0x7823, 0x7829, 0x784E, 0x786D, 0x7864, 0x78FD, 0x7826, 0x7850, /* 0xC0 */
+ 0x7847, 0x784C, 0x786A, 0x78E7, 0x7893, 0x789A, 0x7887, 0x78E3, /* 0xD0 */
+ 0x78A1, 0x78A3, 0x78B2, 0x78B9, 0x78A5, 0x78D4, 0x78D9, 0x78C9, /* 0xD0 */
+ 0x78EC, 0x78F2, 0x7905, 0x78F4, 0x7913, 0x7924, 0x791E, 0x7934, /* 0xE0 */
+ 0x9F95, 0x9EF9, 0x9EFB, 0x9EFC, 0x76F1, 0x7704, 0x7798, 0x76F9, /* 0xE0 */
+ 0x7707, 0x7708, 0x771A, 0x7722, 0x7719, 0x772D, 0x7726, 0x7735, /* 0xF0 */
+ 0x7738, 0x775E, 0x77BC, 0x7747, 0x7743, 0x775A, 0x7768 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_EE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7762, 0x7765, 0x777F, 0x778D, 0x777D, 0x7780, 0x778C, /* 0xA0 */
+ 0x7791, 0x779F, 0x77A0, 0x77B0, 0x77B5, 0x77BD, 0x753A, 0x7540, /* 0xA0 */
+ 0x754E, 0x754B, 0x7548, 0x755B, 0x7572, 0x7579, 0x7583, 0x7F58, /* 0xB0 */
+ 0x7F61, 0x7F5F, 0x8A48, 0x7F68, 0x7F86, 0x7F71, 0x7F79, 0x7F88, /* 0xB0 */
+ 0x7F7E, 0x76CD, 0x76E5, 0x8832, 0x91D2, 0x91D3, 0x91D4, 0x91D9, /* 0xC0 */
+ 0x91D7, 0x91D5, 0x91F7, 0x91E7, 0x91E4, 0x9346, 0x91F5, 0x91F9, /* 0xC0 */
+ 0x9208, 0x9226, 0x9245, 0x9211, 0x9210, 0x9201, 0x9227, 0x9204, /* 0xD0 */
+ 0x9225, 0x9200, 0x923A, 0x9266, 0x9237, 0x9233, 0x9255, 0x923D, /* 0xD0 */
+ 0x9238, 0x925E, 0x926C, 0x926D, 0x923F, 0x9460, 0x9230, 0x9249, /* 0xE0 */
+ 0x9248, 0x924D, 0x922E, 0x9239, 0x9438, 0x92AC, 0x92A0, 0x927A, /* 0xE0 */
+ 0x92AA, 0x92EE, 0x92CF, 0x9403, 0x92E3, 0x943A, 0x92B1, 0x92A6, /* 0xF0 */
+ 0x93A7, 0x9296, 0x92CC, 0x92A9, 0x93F5, 0x9293, 0x927F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_EF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x93A9, 0x929A, 0x931A, 0x92AB, 0x9283, 0x940B, 0x92A8, /* 0xA0 */
+ 0x92A3, 0x9412, 0x9338, 0x92F1, 0x93D7, 0x92E5, 0x92F0, 0x92EF, /* 0xA0 */
+ 0x92E8, 0x92BC, 0x92DD, 0x92F6, 0x9426, 0x9427, 0x92C3, 0x92DF, /* 0xB0 */
+ 0x92E6, 0x9312, 0x9306, 0x9369, 0x931B, 0x9340, 0x9301, 0x9315, /* 0xB0 */
+ 0x932E, 0x9343, 0x9307, 0x9308, 0x931F, 0x9319, 0x9365, 0x9347, /* 0xC0 */
+ 0x9376, 0x9354, 0x9364, 0x93AA, 0x9370, 0x9384, 0x93E4, 0x93D8, /* 0xC0 */
+ 0x9428, 0x9387, 0x93CC, 0x9398, 0x93B8, 0x93BF, 0x93A6, 0x93B0, /* 0xD0 */
+ 0x93B5, 0x944C, 0x93E2, 0x93DC, 0x93DD, 0x93CD, 0x93DE, 0x93C3, /* 0xD0 */
+ 0x93C7, 0x93D1, 0x9414, 0x941D, 0x93F7, 0x9465, 0x9413, 0x946D, /* 0xE0 */
+ 0x9420, 0x9479, 0x93F9, 0x9419, 0x944A, 0x9432, 0x943F, 0x9454, /* 0xE0 */
+ 0x9463, 0x937E, 0x77E7, 0x77EC, 0x96C9, 0x79D5, 0x79ED, 0x79E3, /* 0xF0 */
+ 0x79EB, 0x7A06, 0x5D47, 0x7A03, 0x7A02, 0x7A1E, 0x7A14 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7A39, 0x7A37, 0x7A61, 0x9ECF, 0x99A5, 0x7A70, 0x7688, /* 0xA0 */
+ 0x768E, 0x7693, 0x7699, 0x76A4, 0x74DE, 0x74E0, 0x752C, 0x9CE9, /* 0xA0 */
+ 0x9CF6, 0x9D07, 0x9D06, 0x9D23, 0x9D87, 0x9E15, 0x9D1D, 0x9D1F, /* 0xB0 */
+ 0x9DE5, 0x9D2F, 0x9DD9, 0x9D30, 0x9D42, 0x9E1E, 0x9D53, 0x9E1D, /* 0xB0 */
+ 0x9D60, 0x9D52, 0x9DF3, 0x9D5C, 0x9D61, 0x9D93, 0x9D6A, 0x9D6F, /* 0xC0 */
+ 0x9D89, 0x9D98, 0x9D9A, 0x9DC0, 0x9DA5, 0x9DA9, 0x9DC2, 0x9DBC, /* 0xC0 */
+ 0x9E1A, 0x9DD3, 0x9DDA, 0x9DEF, 0x9DE6, 0x9DF2, 0x9DF8, 0x9E0C, /* 0xD0 */
+ 0x9DFA, 0x9E1B, 0x7592, 0x7594, 0x7664, 0x7658, 0x759D, 0x7667, /* 0xD0 */
+ 0x75A3, 0x75B3, 0x75B4, 0x75B8, 0x75C4, 0x75B1, 0x75B0, 0x75C3, /* 0xE0 */
+ 0x75C2, 0x7602, 0x75CD, 0x75E3, 0x7646, 0x75E6, 0x75E4, 0x7647, /* 0xE0 */
+ 0x75E7, 0x7603, 0x75F1, 0x75FC, 0x75FF, 0x7610, 0x7600, 0x7649, /* 0xF0 */
+ 0x760C, 0x761E, 0x760A, 0x7625, 0x763B, 0x7615, 0x7619 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x761B, 0x763C, 0x7622, 0x7620, 0x7640, 0x762D, 0x7630, /* 0xA0 */
+ 0x766D, 0x7635, 0x7643, 0x766E, 0x7633, 0x764D, 0x7669, 0x7654, /* 0xA0 */
+ 0x765C, 0x7656, 0x7672, 0x766F, 0x7FCA, 0x7AE6, 0x7A78, 0x7A79, /* 0xB0 */
+ 0x7A80, 0x7A86, 0x7A88, 0x7A95, 0x7AC7, 0x7AA0, 0x7AAC, 0x7AA8, /* 0xB0 */
+ 0x7AB6, 0x7AB3, 0x8864, 0x8869, 0x8872, 0x887D, 0x887F, 0x8882, /* 0xC0 */
+ 0x88A2, 0x8960, 0x88B7, 0x88BC, 0x88C9, 0x8933, 0x88CE, 0x895D, /* 0xC0 */
+ 0x8947, 0x88F1, 0x891A, 0x88FC, 0x88E8, 0x88FE, 0x88F0, 0x8921, /* 0xD0 */
+ 0x8919, 0x8913, 0x8938, 0x890A, 0x8964, 0x892B, 0x8936, 0x8941, /* 0xD0 */
+ 0x8966, 0x897B, 0x758B, 0x80E5, 0x76B8, 0x76B4, 0x77DC, 0x8012, /* 0xE0 */
+ 0x8014, 0x8016, 0x801C, 0x8020, 0x802E, 0x8025, 0x8026, 0x802C, /* 0xE0 */
+ 0x8029, 0x8028, 0x8031, 0x800B, 0x8035, 0x8043, 0x8046, 0x8079, /* 0xF0 */
+ 0x8052, 0x8075, 0x8071, 0x8983, 0x9807, 0x980E, 0x980F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9821, 0x981C, 0x6F41, 0x9826, 0x9837, 0x984E, 0x9853, /* 0xA0 */
+ 0x9873, 0x9862, 0x9859, 0x9865, 0x986C, 0x9870, 0x864D, 0x8654, /* 0xA0 */
+ 0x866C, 0x87E3, 0x8806, 0x867A, 0x867C, 0x867B, 0x86A8, 0x868D, /* 0xB0 */
+ 0x868B, 0x8706, 0x869D, 0x86A7, 0x86A3, 0x86AA, 0x8693, 0x86A9, /* 0xB0 */
+ 0x86B6, 0x86C4, 0x86B5, 0x8823, 0x86B0, 0x86BA, 0x86B1, 0x86AF, /* 0xC0 */
+ 0x86C9, 0x87F6, 0x86B4, 0x86E9, 0x86FA, 0x87EF, 0x86ED, 0x8784, /* 0xC0 */
+ 0x86D0, 0x8713, 0x86DE, 0x8810, 0x86DF, 0x86D8, 0x86D1, 0x8703, /* 0xD0 */
+ 0x8707, 0x86F8, 0x8708, 0x870A, 0x870D, 0x8709, 0x8723, 0x873B, /* 0xD0 */
+ 0x871E, 0x8725, 0x872E, 0x871A, 0x873E, 0x87C8, 0x8734, 0x8731, /* 0xE0 */
+ 0x8729, 0x8737, 0x873F, 0x8782, 0x8722, 0x877D, 0x8811, 0x877B, /* 0xE0 */
+ 0x8760, 0x8770, 0x874C, 0x876E, 0x878B, 0x8753, 0x8763, 0x87BB, /* 0xF0 */
+ 0x8764, 0x8759, 0x8765, 0x8793, 0x87AF, 0x87CE, 0x87D2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x87C6, 0x8788, 0x8785, 0x87AD, 0x8797, 0x8783, 0x87AB, /* 0xA0 */
+ 0x87E5, 0x87AC, 0x87B5, 0x87B3, 0x87CB, 0x87D3, 0x87BD, 0x87D1, /* 0xA0 */
+ 0x87C0, 0x87CA, 0x87DB, 0x87EA, 0x87E0, 0x87EE, 0x8816, 0x8813, /* 0xB0 */
+ 0x87FE, 0x880A, 0x881B, 0x8821, 0x8839, 0x883C, 0x7F36, 0x7F4C, /* 0xB0 */
+ 0x7F44, 0x7F45, 0x8210, 0x7AFA, 0x7AFD, 0x7B08, 0x7BE4, 0x7B04, /* 0xC0 */
+ 0x7B67, 0x7B0A, 0x7B2B, 0x7B0F, 0x7B47, 0x7B38, 0x7B2A, 0x7B19, /* 0xC0 */
+ 0x7B2E, 0x7B31, 0x7B20, 0x7B25, 0x7B24, 0x7B33, 0x7C69, 0x7B1E, /* 0xD0 */
+ 0x7B58, 0x7BF3, 0x7B45, 0x7B75, 0x7B4C, 0x7B8F, 0x7B60, 0x7B6E, /* 0xD0 */
+ 0x7B7B, 0x7B62, 0x7B72, 0x7B71, 0x7B90, 0x7C00, 0x7BCB, 0x7BB8, /* 0xE0 */
+ 0x7BAC, 0x7B9D, 0x7C5C, 0x7B85, 0x7C1E, 0x7B9C, 0x7BA2, 0x7C2B, /* 0xE0 */
+ 0x7BB4, 0x7C23, 0x7BC1, 0x7BCC, 0x7BDD, 0x7BDA, 0x7BE5, 0x7BE6, /* 0xF0 */
+ 0x7BEA, 0x7C0C, 0x7BFE, 0x7BFC, 0x7C0F, 0x7C6A, 0x7C0B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7C1F, 0x7C2A, 0x7C26, 0x7C38, 0x7C5F, 0x7C40, 0x81FE, /* 0xA0 */
+ 0x8201, 0x8202, 0x8204, 0x81EC, 0x8844, 0x8221, 0x8222, 0x8264, /* 0xA0 */
+ 0x822D, 0x822F, 0x8228, 0x822B, 0x8238, 0x826B, 0x8233, 0x8234, /* 0xB0 */
+ 0x823E, 0x8244, 0x8249, 0x824B, 0x824F, 0x825A, 0x825F, 0x8268, /* 0xB0 */
+ 0x887E, 0x88CA, 0x8888, 0x88D8, 0x88DF, 0x895E, 0x7F9D, 0x7FA5, /* 0xC0 */
+ 0x7FA7, 0x7FAF, 0x7FB0, 0x7FB2, 0x7C7C, 0x6549, 0x7C91, 0x7CF2, /* 0xC0 */
+ 0x7CF6, 0x7C9E, 0x7CA2, 0x7CB2, 0x7CBC, 0x7CBD, 0x7CDD, 0x7CC7, /* 0xD0 */
+ 0x7CCC, 0x7CCD, 0x7CC8, 0x7CC5, 0x7CD7, 0x7CE8, 0x826E, 0x66A8, /* 0xD0 */
+ 0x7FBF, 0x7FCE, 0x7FD5, 0x7FE5, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FEE, /* 0xE0 */
+ 0x7FF3, 0x7CF8, 0x7E36, 0x7DA6, 0x7DAE, 0x7E47, 0x7E9B, 0x9EA9, /* 0xE0 */
+ 0x9EB4, 0x8D73, 0x8D84, 0x8D94, 0x8D91, 0x8DB2, 0x8D67, 0x8D6D, /* 0xF0 */
+ 0x8C47, 0x8C49, 0x914A, 0x9150, 0x914E, 0x914F, 0x9164 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9162, 0x9161, 0x9170, 0x9169, 0x916F, 0x91C5, 0x91C3, /* 0xA0 */
+ 0x9172, 0x9174, 0x9179, 0x918C, 0x9185, 0x9190, 0x918D, 0x9191, /* 0xA0 */
+ 0x91A2, 0x91A3, 0x91AA, 0x91AD, 0x91AE, 0x91AF, 0x91B5, 0x91B4, /* 0xB0 */
+ 0x91BA, 0x8C55, 0x9E7A, 0x8E89, 0x8DEB, 0x8E05, 0x8E59, 0x8E69, /* 0xB0 */
+ 0x8DB5, 0x8DBF, 0x8DBC, 0x8DBA, 0x8E4C, 0x8DD6, 0x8DD7, 0x8DDA, /* 0xC0 */
+ 0x8E92, 0x8DCE, 0x8DCF, 0x8DDB, 0x8DC6, 0x8DEC, 0x8E7A, 0x8E55, /* 0xC0 */
+ 0x8DE3, 0x8E9A, 0x8E8B, 0x8DE4, 0x8E09, 0x8DFD, 0x8E14, 0x8E1D, /* 0xD0 */
+ 0x8E1F, 0x8E93, 0x8E2E, 0x8E23, 0x8E91, 0x8E3A, 0x8E40, 0x8E39, /* 0xD0 */
+ 0x8E35, 0x8E3D, 0x8E31, 0x8E49, 0x8E41, 0x8E42, 0x8EA1, 0x8E63, /* 0xE0 */
+ 0x8E4A, 0x8E70, 0x8E76, 0x8E7C, 0x8E6F, 0x8E74, 0x8E85, 0x8EAA, /* 0xE0 */
+ 0x8E94, 0x8E90, 0x8EA6, 0x8E9E, 0x8C78, 0x8C82, 0x8C8A, 0x8C85, /* 0xF0 */
+ 0x8C98, 0x8C94, 0x659B, 0x89D6, 0x89F4, 0x89DA, 0x89DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x89E5, 0x89EB, 0x89F6, 0x8A3E, 0x8B26, 0x975A, 0x96E9, /* 0xA0 */
+ 0x9742, 0x96EF, 0x9706, 0x973D, 0x9708, 0x970F, 0x970E, 0x972A, /* 0xA0 */
+ 0x9744, 0x9730, 0x973E, 0x9F54, 0x9F5F, 0x9F59, 0x9F60, 0x9F5C, /* 0xB0 */
+ 0x9F66, 0x9F6C, 0x9F6A, 0x9F77, 0x9EFD, 0x9EFF, 0x9F09, 0x96B9, /* 0xB0 */
+ 0x96BC, 0x96BD, 0x96CE, 0x96D2, 0x77BF, 0x8B8E, 0x928E, 0x947E, /* 0xC0 */
+ 0x92C8, 0x93E8, 0x936A, 0x93CA, 0x938F, 0x943E, 0x946B, 0x9B77, /* 0xC0 */
+ 0x9B74, 0x9B81, 0x9B83, 0x9B8E, 0x9C78, 0x7A4C, 0x9B92, 0x9C5F, /* 0xD0 */
+ 0x9B90, 0x9BAD, 0x9B9A, 0x9BAA, 0x9B9E, 0x9C6D, 0x9BAB, 0x9B9D, /* 0xD0 */
+ 0x9C58, 0x9BC1, 0x9C7A, 0x9C31, 0x9C39, 0x9C23, 0x9C37, 0x9BC0, /* 0xE0 */
+ 0x9BCA, 0x9BC7, 0x9BFD, 0x9BD6, 0x9BEA, 0x9BEB, 0x9BE1, 0x9BE4, /* 0xE0 */
+ 0x9BE7, 0x9BDD, 0x9BE2, 0x9BF0, 0x9BDB, 0x9BF4, 0x9BD4, 0x9C5D, /* 0xF0 */
+ 0x9C08, 0x9C10, 0x9C0D, 0x9C12, 0x9C09, 0x9BFF, 0x9C20 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9C32, 0x9C2D, 0x9C28, 0x9C25, 0x9C29, 0x9C33, 0x9C3E, /* 0xA0 */
+ 0x9C48, 0x9C3B, 0x9C35, 0x9C45, 0x9C56, 0x9C54, 0x9C52, 0x9C67, /* 0xA0 */
+ 0x977C, 0x9785, 0x97C3, 0x97BD, 0x9794, 0x97C9, 0x97AB, 0x97A3, /* 0xB0 */
+ 0x97B2, 0x97B4, 0x9AB1, 0x9AB0, 0x9AB7, 0x9DBB, 0x9AB6, 0x9ABA, /* 0xB0 */
+ 0x9ABC, 0x9AC1, 0x9AC0, 0x9ACF, 0x9AC2, 0x9AD6, 0x9AD5, 0x9AD1, /* 0xC0 */
+ 0x9B45, 0x9B43, 0x9B58, 0x9B4E, 0x9B48, 0x9B4D, 0x9B51, 0x9957, /* 0xC0 */
+ 0x995C, 0x992E, 0x9955, 0x9954, 0x9ADF, 0x9AE1, 0x9AE6, 0x9AEF, /* 0xD0 */
+ 0x9AEB, 0x9AFB, 0x9AED, 0x9AF9, 0x9B08, 0x9B0F, 0x9B22, 0x9B1F, /* 0xD0 */
+ 0x9B23, 0x4E48, 0x9EBE, 0x7E3B, 0x9E82, 0x9E87, 0x9E88, 0x9E8B, /* 0xE0 */
+ 0x9E92, 0x93D6, 0x9E9D, 0x9E9F, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EE0, /* 0xE0 */
+ 0x9EDF, 0x9EE2, 0x9EF7, 0x9EE7, 0x9EE5, 0x9EF2, 0x9EEF, 0x9F22, /* 0xF0 */
+ 0x9F2C, 0x9F2F, 0x9F39, 0x9F37, 0x9F3D, 0x9F3E, 0x9F44 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x896C, 0x95C6, 0x9336, 0x5F46, 0x8514, 0x7E94, 0x5382, /* 0xA0 */
+ 0x51B2, 0x4E11, 0x9F63, 0x5679, 0x515A, 0x6DC0, 0x9F15, 0x6597, /* 0xA0 */
+ 0x5641, 0x9AEE, 0x8303, 0x4E30, 0x8907, 0x5E72, 0x7A40, 0x98B3, /* 0xB0 */
+ 0x5E7F, 0x95A4, 0x9B0D, 0x5212, 0x8FF4, 0x5F59, 0x7A6B, 0x98E2, /* 0xB0 */
+ 0x51E0, 0x50A2, 0x4EF7, 0x8350, 0x8591, 0x5118, 0x636E, 0x6372, /* 0xC0 */
+ 0x524B, 0x5938, 0x774F, 0x8721, 0x814A, 0x7E8D, 0x91CC, 0x66C6, /* 0xC0 */
+ 0x5E18, 0x77AD, 0x9E75, 0x56C9, 0x9EF4, 0x6FDB, 0x61DE, 0x77C7, /* 0xD0 */
+ 0x7030, 0x9EB5, 0x884A, 0x95E2, 0x82F9, 0x51ED, 0x6251, 0x4EC6, /* 0xD0 */
+ 0x6734, 0x97C6, 0x7C64, 0x7E34, 0x97A6, 0x9EAF, 0x786E, 0x820D, /* 0xE0 */
+ 0x672F, 0x677E, 0x56CC, 0x53F0, 0x98B1, 0x6AAF, 0x7F4E, 0x6D82, /* 0xE0 */
+ 0x7CF0, 0x4E07, 0x4FC2, 0x7E6B, 0x9E79, 0x56AE, 0x9B1A, 0x846F, /* 0xF0 */
+ 0x53F6, 0x90C1, 0x79A6, 0x7C72, 0x613F, 0x4E91, 0x9AD2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_GBT_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x75C7, 0x96BB, 0x53EA, 0x7DFB, 0x88FD, 0x79CD, 0x7843, /* 0xA0 */
+ 0x7B51, 0x51C6 /* 0xA0 */
+};
diff --git a/sal/textenc/tcvtscn4.tab b/sal/textenc/tcvtscn4.tab
new file mode 100644
index 000000000..653f3d816
--- /dev/null
+++ b/sal/textenc/tcvtscn4.tab
@@ -0,0 +1,3061 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the UniCode to DBCS tables for the following */
+/* chinese simplified (China) charsets: */
+/* GB (GB2312) */
+
+/* In this file we have only the GB tables for the kanji characters, */
+/* because these tables can't shared with the GBK tables. */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2BB, 0xB6A1, 0, 0xC6DF, 0, 0, 0, 0xCDF2, /* 0x00 */
+ 0xD5C9, 0xC8FD, 0xC9CF, 0xCFC2, 0xD8A2, 0xB2BB, 0xD3EB, 0, /* 0x00 */
+ 0xD8A4, 0xB3F3, 0, 0xD7A8, 0xC7D2, 0xD8A7, 0xCAC0, 0, /* 0x10 */
+ 0xC7F0, 0xB1FB, 0xD2B5, 0xB4D4, 0xB6AB, 0xCBBF, 0xD8A9, 0, /* 0x10 */
+ 0, 0, 0xB6AA, 0, 0xC1BD, 0xD1CF, 0, 0xC9A5, /* 0x20 */
+ 0xD8AD, 0, 0xB8F6, 0xD1BE, 0xE3DC, 0xD6D0, 0, 0, /* 0x20 */
+ 0xB7E1, 0, 0xB4AE, 0, 0xC1D9, 0, 0xD8BC, 0, /* 0x30 */
+ 0xCDE8, 0xB5A4, 0xCEAA, 0xD6F7, 0, 0xC0F6, 0xBED9, 0xD8AF, /* 0x30 */
+ 0, 0, 0, 0xC4CB, 0, 0xBEC3, 0, 0xD8B1, /* 0x40 */
+ 0xC3B4, 0xD2E5, 0, 0xD6AE, 0xCEDA, 0xD5A7, 0xBAF5, 0xB7A6, /* 0x40 */
+ 0xC0D6, 0, 0xC6B9, 0xC5D2, 0xC7C7, 0, 0xB9D4, 0, /* 0x50 */
+ 0xB3CB, 0xD2D2, 0, 0, 0xD8BF, 0xBEC5, 0xC6F2, 0xD2B2, /* 0x50 */
+ 0xCFB0, 0xCFE7, 0, 0, 0, 0, 0xCAE9, 0, /* 0x60 */
+ 0, 0xD8C0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xC2F2, 0xC2D2, 0, 0xC8E9, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xC7AC, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xC1CB, 0, /* 0x80 */
+ 0xD3E8, 0xD5F9, 0, 0xCAC2, 0xB6FE, 0xD8A1, 0xD3DA, 0xBFF7, /* 0x80 */
+ 0, 0xD4C6, 0xBBA5, 0xD8C1, 0xCEE5, 0xBEAE, 0, 0, /* 0x90 */
+ 0xD8A8, 0, 0xD1C7, 0xD0A9, 0, 0, 0, 0xD8BD, /* 0x90 */
+ 0xD9EF, 0xCDF6, 0xBFBA, 0, 0xBDBB, 0xBAA5, 0xD2E0, 0xB2FA, /* 0xA0 */
+ 0xBAE0, 0xC4B6, 0, 0xCFED, 0xBEA9, 0xCDA4, 0xC1C1, 0, /* 0xA0 */
+ 0, 0, 0xC7D7, 0xD9F1, 0, 0xD9F4, 0, 0, /* 0xB0 */
+ 0, 0, 0xC8CB, 0xD8E9, 0, 0, 0, 0xD2DA, /* 0xB0 */
+ 0xCAB2, 0xC8CA, 0xD8EC, 0xD8EA, 0xD8C6, 0xBDF6, 0xC6CD, 0xB3F0, /* 0xC0 */
+ 0, 0xD8EB, 0xBDF1, 0xBDE9, 0, 0xC8D4, 0xB4D3, 0, /* 0xC0 */
+ 0, 0xC2D8, 0, 0xB2D6, 0xD7D0, 0xCACB, 0xCBFB, 0xD5CC, /* 0xD0 */
+ 0xB8B6, 0xCFC9, 0, 0, 0, 0xD9DA, 0xD8F0, 0xC7AA, /* 0xD0 */
+ 0, 0xD8EE, 0, 0xB4FA, 0xC1EE, 0xD2D4, 0, 0, /* 0xE0 */
+ 0xD8ED, 0, 0xD2C7, 0xD8EF, 0xC3C7, 0, 0, 0, /* 0xE0 */
+ 0xD1F6, 0, 0xD6D9, 0xD8F2, 0, 0xD8F5, 0xBCFE, 0xBCDB, /* 0xF0 */
+ 0, 0, 0, 0xC8CE, 0, 0xB7DD, 0, 0xB7C2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6F3, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xD8F8, 0xD2C1, 0, 0, 0xCEE9, 0xBCBF, 0xB7FC, /* 0x00 */
+ 0xB7A5, 0xD0DD, 0, 0, 0, 0, 0, 0xD6DA, /* 0x10 */
+ 0xD3C5, 0xBBEF, 0xBBE1, 0xD8F1, 0, 0, 0xC9A1, 0xCEB0, /* 0x10 */
+ 0xB4AB, 0, 0xD8F3, 0, 0xC9CB, 0xD8F6, 0xC2D7, 0xD8F7, /* 0x20 */
+ 0, 0, 0xCEB1, 0xD8F9, 0, 0, 0, 0xB2AE, /* 0x20 */
+ 0xB9C0, 0, 0xD9A3, 0, 0xB0E9, 0, 0xC1E6, 0, /* 0x30 */
+ 0xC9EC, 0, 0xCBC5, 0, 0xCBC6, 0xD9A4, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xB5E8, 0, 0, 0xB5AB, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xCEBB, 0xB5CD, 0xD7A1, /* 0x40 */
+ 0xD7F4, 0xD3D3, 0, 0xCCE5, 0, 0xBACE, 0, 0xD9A2, /* 0x50 */
+ 0xD9DC, 0xD3E0, 0xD8FD, 0xB7F0, 0xD7F7, 0xD8FE, 0xD8FA, 0xD9A1, /* 0x50 */
+ 0xC4E3, 0, 0, 0xD3B6, 0xD8F4, 0xD9DD, 0, 0xD8FB, /* 0x60 */
+ 0, 0xC5E5, 0, 0, 0xC0D0, 0, 0, 0xD1F0, /* 0x60 */
+ 0xB0DB, 0, 0, 0xBCD1, 0xD9A6, 0, 0xD9A5, 0, /* 0x70 */
+ 0, 0, 0, 0xD9AC, 0xD9AE, 0, 0xD9AB, 0xCAB9, /* 0x70 */
+ 0, 0, 0, 0xD9A9, 0xD6B6, 0, 0, 0, /* 0x80 */
+ 0xB3DE, 0xD9A8, 0, 0xC0FD, 0, 0xCACC, 0, 0xD9AA, /* 0x80 */
+ 0, 0xD9A7, 0, 0, 0xD9B0, 0, 0, 0xB6B1, /* 0x90 */
+ 0, 0, 0, 0xB9A9, 0, 0xD2C0, 0, 0, /* 0x90 */
+ 0xCFC0, 0, 0, 0xC2C2, 0, 0xBDC4, 0xD5EC, 0xB2E0, /* 0xA0 */
+ 0xC7C8, 0xBFEB, 0xD9AD, 0, 0xD9AF, 0, 0xCEEA, 0xBAEE, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xC7D6, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB1E3, /* 0xB0 */
+ 0, 0, 0, 0xB4D9, 0xB6ED, 0xD9B4, 0, 0, /* 0xC0 */
+ 0, 0, 0xBFA1, 0, 0, 0, 0xD9DE, 0xC7CE, /* 0xC0 */
+ 0xC0FE, 0xD9B8, 0, 0, 0, 0, 0, 0xCBD7, /* 0xD0 */
+ 0xB7FD, 0, 0xD9B5, 0, 0xD9B7, 0xB1A3, 0xD3E1, 0xD9B9, /* 0xD0 */
+ 0, 0xD0C5, 0, 0xD9B6, 0, 0, 0xD9B1, 0, /* 0xE0 */
+ 0xD9B2, 0xC1A9, 0xD9B3, 0, 0, 0xBCF3, 0xD0DE, 0xB8A9, /* 0xE0 */
+ 0, 0xBEE3, 0, 0xD9BD, 0, 0, 0, 0, /* 0xF0 */
+ 0xD9BA, 0, 0xB0B3, 0, 0, 0, 0xD9C2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xD9C4, 0xB1B6, 0, 0xD9BF, /* 0x00 */
+ 0, 0, 0xB5B9, 0, 0xBEF3, 0, 0, 0, /* 0x10 */
+ 0xCCC8, 0xBAF2, 0xD2D0, 0, 0xD9C3, 0, 0, 0xBDE8, /* 0x10 */
+ 0, 0xB3AB, 0, 0, 0, 0xD9C5, 0xBEEB, 0, /* 0x20 */
+ 0xD9C6, 0xD9BB, 0xC4DF, 0, 0xD9BE, 0xD9C1, 0xD9C0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xD5AE, 0, 0xD6B5, 0, 0xC7E3, 0, /* 0x30 */
+ 0, 0, 0, 0xD9C8, 0, 0, 0, 0xBCD9, /* 0x40 */
+ 0xD9CA, 0, 0, 0, 0xD9BC, 0, 0xD9CB, 0xC6AB, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xD9C9, 0, 0, /* 0x50 */
+ 0, 0, 0xD7F6, 0, 0xCDA3, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xBDA1, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xD9CC, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xC5BC, 0xCDB5, /* 0x70 */
+ 0, 0, 0, 0xD9CD, 0, 0, 0xD9C7, 0xB3A5, /* 0x70 */
+ 0xBFFE, 0, 0, 0, 0, 0xB8B5, 0, 0, /* 0x80 */
+ 0xC0FC, 0, 0, 0, 0, 0xB0F8, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xB4F6, 0, 0xD9CE, 0, 0xD9CF, /* 0xA0 */
+ 0xB4A2, 0xD9D0, 0, 0, 0xB4DF, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xB0C1, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xD9D1, 0xC9B5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCFF1, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xD9D2, 0, /* 0xD0 */
+ 0, 0, 0xC1C5, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xD9D6, 0xC9AE, /* 0xE0 */
+ 0, 0, 0, 0, 0xD9D5, 0xD9D4, 0xD9D7, 0, /* 0xE0 */
+ 0, 0, 0, 0xCBDB, 0, 0xBDA9, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xC6A7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD9D3, 0xD9D8, /* 0x00 */
+ 0, 0, 0, 0xD9D9, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xC8E5, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xC0DC, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB6F9, /* 0x30 */
+ 0xD8A3, 0xD4CA, 0, 0xD4AA, 0xD0D6, 0xB3E4, 0xD5D7, 0, /* 0x40 */
+ 0xCFC8, 0xB9E2, 0, 0xBFCB, 0, 0xC3E2, 0, 0, /* 0x40 */
+ 0, 0xB6D2, 0, 0, 0xCDC3, 0xD9EE, 0xD9F0, 0, /* 0x50 */
+ 0, 0, 0xB5B3, 0, 0xB6B5, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xBEA4, 0, 0, 0xC8EB, 0, 0, /* 0x60 */
+ 0xC8AB, 0, 0, 0xB0CB, 0xB9AB, 0xC1F9, 0xD9E2, 0, /* 0x60 */
+ 0xC0BC, 0xB9B2, 0, 0xB9D8, 0xD0CB, 0xB1F8, 0xC6E4, 0xBEDF, /* 0x70 */
+ 0xB5E4, 0xD7C8, 0, 0xD1F8, 0xBCE6, 0xCADE, 0, 0, /* 0x70 */
+ 0xBCBD, 0xD9E6, 0xD8E7, 0, 0, 0xC4DA, 0, 0, /* 0x80 */
+ 0xB8D4, 0xC8BD, 0, 0, 0xB2E1, 0xD4D9, 0, 0, /* 0x80 */
+ 0, 0, 0xC3B0, 0, 0, 0xC3E1, 0xDAA2, 0xC8DF, /* 0x90 */
+ 0, 0xD0B4, 0, 0xBEFC, 0xC5A9, 0, 0, 0, /* 0x90 */
+ 0xB9DA, 0, 0xDAA3, 0, 0xD4A9, 0xDAA4, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xD9FB, 0xB6AC, 0, 0, 0xB7EB, /* 0xA0 */
+ 0xB1F9, 0xD9FC, 0xB3E5, 0xBEF6, 0, 0xBFF6, 0xD2B1, 0xC0E4, /* 0xB0 */
+ 0, 0, 0, 0xB6B3, 0xD9FE, 0xD9FD, 0, 0, /* 0xB0 */
+ 0xBEBB, 0, 0, 0, 0xC6E0, 0, 0xD7BC, 0xDAA1, /* 0xC0 */
+ 0, 0xC1B9, 0, 0xB5F2, 0xC1E8, 0, 0, 0xBCF5, /* 0xC0 */
+ 0, 0xB4D5, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xC1DD, 0, 0xC4FD, 0, 0, /* 0xD0 */
+ 0xBCB8, 0xB7B2, 0, 0, 0xB7EF, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xD9EC, 0, 0xC6BE, 0, 0xBFAD, /* 0xE0 */
+ 0xBBCB, 0, 0, 0xB5CA, 0, 0xDBC9, 0xD0D7, 0, /* 0xF0 */
+ 0xCDB9, 0xB0BC, 0xB3F6, 0xBBF7, 0xDBCA, 0xBAAF, 0, 0xD4E4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB5B6, 0xB5F3, 0xD8D6, 0xC8D0, 0, 0, 0xB7D6, 0xC7D0, /* 0x00 */
+ 0xD8D7, 0, 0xBFAF, 0, 0, 0xDBBB, 0xD8D8, 0, /* 0x00 */
+ 0, 0xD0CC, 0xBBAE, 0, 0, 0, 0xEBBE, 0xC1D0, /* 0x10 */
+ 0xC1F5, 0xD4F2, 0xB8D5, 0xB4B4, 0, 0xB3F5, 0, 0, /* 0x10 */
+ 0xC9BE, 0, 0, 0, 0xC5D0, 0, 0, 0, /* 0x20 */
+ 0xC5D9, 0xC0FB, 0, 0xB1F0, 0, 0xD8D9, 0xB9CE, 0, /* 0x20 */
+ 0xB5BD, 0, 0, 0xD8DA, 0, 0, 0xD6C6, 0xCBA2, /* 0x30 */
+ 0xC8AF, 0xC9B2, 0xB4CC, 0xBFCC, 0, 0xB9F4, 0, 0xD8DB, /* 0x30 */
+ 0xD8DC, 0xB6E7, 0xBCC1, 0xCCEA, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xCFF7, 0, 0xD8DD, 0xC7B0, 0, 0, /* 0x40 */
+ 0xB9D0, 0xBDA3, 0, 0, 0xCCDE, 0, 0xC6CA, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xD8E0, 0, 0xD8DE, 0, /* 0x50 */
+ 0, 0xD8DF, 0, 0, 0, 0xB0FE, 0, 0xBEE7, /* 0x60 */
+ 0, 0xCAA3, 0xBCF4, 0, 0, 0, 0, 0xB8B1, /* 0x60 */
+ 0, 0, 0xB8EE, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xD8E2, 0, 0xBDCB, /* 0x70 */
+ 0, 0xD8E4, 0xD8E3, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xC5FC, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xD8E5, 0, 0, 0xD8E6, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xC1A6, 0, 0xC8B0, 0xB0EC, 0xB9A6, /* 0x90 */
+ 0xBCD3, 0xCEF1, 0xDBBD, 0xC1D3, 0, 0, 0, 0, /* 0xA0 */
+ 0xB6AF, 0xD6FA, 0xC5AC, 0xBDD9, 0xDBBE, 0xDBBF, 0, 0, /* 0xA0 */
+ 0, 0xC0F8, 0xBEA2, 0xC0CD, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xDBC0, 0xCAC6, /* 0xB0 */
+ 0, 0, 0, 0xB2AA, 0, 0, 0, 0xD3C2, /* 0xC0 */
+ 0, 0xC3E3, 0, 0xD1AB, 0, 0, 0, 0, /* 0xC0 */
+ 0xDBC2, 0, 0xC0D5, 0, 0, 0, 0xDBC3, 0, /* 0xD0 */
+ 0xBFB1, 0, 0, 0, 0, 0, 0, 0xC4BC, /* 0xD0 */
+ 0, 0, 0, 0, 0xC7DA, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xDBC4, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xD9E8, 0xC9D7, 0, 0, 0, 0xB9B4, 0xCEF0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD4C8, 0, 0, 0, 0, 0xB0FC, 0xB4D2, 0, /* 0x00 */
+ 0xD0D9, 0, 0, 0, 0, 0xD9E9, 0, 0xDECB, /* 0x00 */
+ 0xD9EB, 0, 0, 0, 0, 0xD8B0, 0xBBAF, 0xB1B1, /* 0x10 */
+ 0, 0xB3D7, 0xD8CE, 0, 0, 0xD4D1, 0, 0, /* 0x10 */
+ 0xBDB3, 0xBFEF, 0, 0xCFBB, 0, 0, 0xD8D0, 0, /* 0x20 */
+ 0, 0, 0xB7CB, 0, 0, 0, 0xD8D1, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xC6A5, 0xC7F8, 0xD2BD, 0, 0, 0xD8D2, 0xC4E4, /* 0x30 */
+ 0, 0xCAAE, 0, 0xC7A7, 0, 0xD8A6, 0, 0xC9FD, /* 0x40 */
+ 0xCEE7, 0xBBDC, 0xB0EB, 0, 0, 0, 0xBBAA, 0xD0AD, /* 0x40 */
+ 0, 0xB1B0, 0xD7E4, 0xD7BF, 0, 0xB5A5, 0xC2F4, 0xC4CF, /* 0x50 */
+ 0, 0, 0xB2A9, 0, 0xB2B7, 0, 0xB1E5, 0xDFB2, /* 0x50 */
+ 0xD5BC, 0xBFA8, 0xC2AC, 0xD8D5, 0xC2B1, 0, 0xD8D4, 0xCED4, /* 0x60 */
+ 0, 0xDAE0, 0, 0xCEC0, 0, 0, 0xD8B4, 0xC3AE, /* 0x60 */
+ 0xD3A1, 0xCEA3, 0, 0xBCB4, 0xC8B4, 0xC2D1, 0, 0xBEED, /* 0x70 */
+ 0xD0B6, 0, 0xDAE1, 0, 0, 0, 0, 0xC7E4, /* 0x70 */
+ 0, 0, 0xB3A7, 0, 0xB6F2, 0xCCFC, 0xC0FA, 0, /* 0x80 */
+ 0, 0xC0F7, 0, 0xD1B9, 0xD1E1, 0xD8C7, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xB2DE, 0, 0, /* 0x90 */
+ 0xC0E5, 0, 0xBAF1, 0, 0, 0xD8C8, 0, 0xD4AD, /* 0x90 */
+ 0, 0, 0xCFE1, 0xD8C9, 0, 0xD8CA, 0xCFC3, 0, /* 0xA0 */
+ 0xB3F8, 0xBEC7, 0, 0, 0, 0, 0xD8CB, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xDBCC, 0, /* 0xB0 */
+ 0, 0, 0, 0xC8A5, 0, 0, 0, 0xCFD8, /* 0xB0 */
+ 0, 0xC8FE, 0xB2CE, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xD3D6, 0xB2E6, 0xBCB0, 0xD3D1, 0xCBAB, 0xB7B4, 0, 0, /* 0xC0 */
+ 0, 0xB7A2, 0, 0, 0xCAE5, 0, 0xC8A1, 0xCADC, /* 0xD0 */
+ 0xB1E4, 0xD0F0, 0, 0xC5D1, 0, 0, 0, 0xDBC5, /* 0xD0 */
+ 0xB5FE, 0, 0, 0xBFDA, 0xB9C5, 0xBEE4, 0xC1ED, 0, /* 0xE0 */
+ 0xDFB6, 0xDFB5, 0xD6BB, 0xBDD0, 0xD5D9, 0xB0C8, 0xB6A3, 0xBFC9, /* 0xE0 */
+ 0xCCA8, 0xDFB3, 0xCAB7, 0xD3D2, 0, 0xD8CF, 0xD2B6, 0xBAC5, /* 0xF0 */
+ 0xCBBE, 0xCCBE, 0, 0xDFB7, 0xB5F0, 0xDFB4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD3F5, 0, 0xB3D4, 0xB8F7, 0, 0xDFBA, 0, /* 0x00 */
+ 0xBACF, 0xBCAA, 0xB5F5, 0, 0xCDAC, 0xC3FB, 0xBAF3, 0xC0F4, /* 0x00 */
+ 0xCDC2, 0xCFF2, 0xDFB8, 0xCFC5, 0, 0xC2C0, 0xDFB9, 0xC2F0, /* 0x10 */
+ 0, 0, 0, 0xBEFD, 0, 0xC1DF, 0xCDCC, 0xD2F7, /* 0x10 */
+ 0xB7CD, 0xDFC1, 0, 0xDFC4, 0, 0, 0xB7F1, 0xB0C9, /* 0x20 */
+ 0xB6D6, 0xB7D4, 0, 0xBAAC, 0xCCFD, 0xBFD4, 0xCBB1, 0xC6F4, /* 0x20 */
+ 0, 0xD6A8, 0xDFC5, 0, 0xCEE2, 0xB3B3, 0, 0, /* 0x30 */
+ 0xCEFC, 0xB4B5, 0, 0xCEC7, 0xBAF0, 0, 0xCEE1, 0, /* 0x30 */
+ 0xD1BD, 0, 0, 0xDFC0, 0, 0, 0xB4F4, 0, /* 0x40 */
+ 0xB3CA, 0, 0xB8E6, 0xDFBB, 0, 0, 0, 0, /* 0x40 */
+ 0xC4C5, 0, 0xDFBC, 0xDFBD, 0xDFBE, 0xC5BB, 0xDFBF, 0xDFC2, /* 0x50 */
+ 0xD4B1, 0xDFC3, 0, 0xC7BA, 0xCED8, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xC4D8, 0, 0xDFCA, 0, 0xDFCF, 0, /* 0x60 */
+ 0xD6DC, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xDFC9, 0xDFDA, 0xCEB6, 0, 0xBAC7, 0xDFCE, 0xDFC8, /* 0x70 */
+ 0xC5DE, 0, 0, 0xC9EB, 0xBAF4, 0xC3FC, 0, 0, /* 0x70 */
+ 0xBED7, 0, 0xDFC6, 0, 0xDFCD, 0, 0xC5D8, 0, /* 0x80 */
+ 0, 0, 0, 0xD5A6, 0xBACD, 0, 0xBECC, 0xD3BD, /* 0x80 */
+ 0xB8C0, 0, 0xD6E4, 0, 0xDFC7, 0xB9BE, 0xBFA7, 0, /* 0x90 */
+ 0, 0xC1FC, 0xDFCB, 0xDFCC, 0, 0xDFD0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xDFDB, 0xDFE5, 0, 0xDFD7, 0xDFD6, /* 0xA0 */
+ 0xD7C9, 0xDFE3, 0xDFE4, 0xE5EB, 0xD2A7, 0xDFD2, 0, 0xBFA9, /* 0xA0 */
+ 0, 0xD4DB, 0, 0xBFC8, 0xDFD4, 0, 0, 0, /* 0xB0 */
+ 0xCFCC, 0, 0, 0xDFDD, 0, 0xD1CA, 0, 0xDFDE, /* 0xB0 */
+ 0xB0A7, 0xC6B7, 0xDFD3, 0, 0xBAE5, 0, 0xB6DF, 0xCDDB, /* 0xC0 */
+ 0xB9FE, 0xD4D5, 0, 0, 0xDFDF, 0xCFEC, 0xB0A5, 0xDFE7, /* 0xC0 */
+ 0xDFD1, 0xD1C6, 0xDFD5, 0xDFD8, 0xDFD9, 0xDFDC, 0, 0xBBA9, /* 0xD0 */
+ 0, 0xDFE0, 0xDFE1, 0, 0xDFE2, 0xDFE6, 0xDFE8, 0xD3B4, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xB8E7, 0xC5B6, 0xDFEA, /* 0xE0 */
+ 0xC9DA, 0xC1A8, 0xC4C4, 0, 0, 0xBFDE, 0xCFF8, 0, /* 0xE0 */
+ 0, 0, 0xD5DC, 0xDFEE, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xB2B8, 0, 0xBADF, 0xDFEC, 0, 0xDBC1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1E4, 0, 0, 0, 0, 0xCBF4, 0xB4BD, /* 0x00 */
+ 0, 0xB0A6, 0, 0, 0, 0, 0, 0xDFF1, /* 0x00 */
+ 0xCCC6, 0xDFF2, 0, 0, 0xDFED, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xDFE9, 0, 0, 0, 0, /* 0x10 */
+ 0xDFEB, 0, 0xDFEF, 0xDFF0, 0xBBBD, 0, 0, 0xDFF3, /* 0x20 */
+ 0, 0, 0xDFF4, 0, 0xBBA3, 0, 0xCADB, 0xCEA8, /* 0x20 */
+ 0xE0A7, 0xB3AA, 0, 0xE0A6, 0, 0, 0, 0xE0A1, /* 0x30 */
+ 0, 0, 0, 0, 0xDFFE, 0, 0xCDD9, 0xDFFC, /* 0x30 */
+ 0, 0xDFFA, 0, 0xBFD0, 0xD7C4, 0, 0xC9CC, 0, /* 0x40 */
+ 0, 0xDFF8, 0xB0A1, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xDFFD, 0, 0, 0, 0, 0xDFFB, 0xE0A2, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xE0A8, 0, 0, 0, /* 0x50 */
+ 0, 0xB7C8, 0, 0, 0xC6A1, 0xC9B6, 0xC0B2, 0xDFF5, /* 0x60 */
+ 0, 0, 0xC5BE, 0, 0xD8C4, 0xDFF9, 0xC4F6, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE0A3, 0xE0A4, 0xE0A5, /* 0x70 */
+ 0xD0A5, 0, 0, 0xE0B4, 0xCCE4, 0, 0xE0B1, 0, /* 0x70 */
+ 0xBFA6, 0xE0AF, 0xCEB9, 0xE0AB, 0xC9C6, 0, 0, 0xC0AE, /* 0x80 */
+ 0xE0AE, 0xBAED, 0xBAB0, 0xE0A9, 0, 0, 0, 0xDFF6, /* 0x80 */
+ 0, 0xE0B3, 0, 0, 0xE0B8, 0, 0, 0, /* 0x90 */
+ 0xB4AD, 0xE0B9, 0, 0, 0xCFB2, 0xBAC8, 0, 0xE0B0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD0FA, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE0AC, 0, 0xD4FB, 0, 0xDFF7, 0, 0xC5E7, /* 0xB0 */
+ 0, 0xE0AD, 0, 0xD3F7, 0, 0xE0B6, 0xE0B7, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE0C4, 0xD0E1, 0, 0, /* 0xC0 */
+ 0, 0xE0BC, 0, 0, 0xE0C9, 0xE0CA, 0, 0, /* 0xC0 */
+ 0, 0xE0BE, 0xE0AA, 0xC9A4, 0xE0C1, 0, 0xE0B2, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xCAC8, 0xE0C3, 0, 0xE0B5, /* 0xD0 */
+ 0, 0xCECB, 0, 0xCBC3, 0xE0CD, 0xE0C6, 0xE0C2, 0, /* 0xE0 */
+ 0xE0CB, 0, 0xE0BA, 0xE0BF, 0xE0C0, 0, 0, 0xE0C5, /* 0xE0 */
+ 0, 0, 0xE0C7, 0xE0C8, 0, 0xE0CC, 0, 0xE0BB, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xCBD4, 0xE0D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE0D6, 0xE0D2, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xE0D0, 0xBCCE, 0, 0, 0xE0D1, 0, 0xB8C2, 0xD8C5, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xD0EA, 0, 0, 0xC2EF, 0, 0, 0xE0CF, 0xE0BD, /* 0x10 */
+ 0, 0, 0, 0xE0D4, 0xE0D3, 0, 0, 0xE0D7, /* 0x20 */
+ 0, 0, 0, 0, 0xE0DC, 0xE0D8, 0, 0, /* 0x20 */
+ 0, 0xD6F6, 0xB3B0, 0, 0xD7EC, 0, 0xCBBB, 0, /* 0x30 */
+ 0, 0xE0DA, 0, 0xCEFB, 0, 0, 0, 0xBAD9, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE0E1, 0xE0DD, 0xD2AD, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE0E2, 0, 0, 0xE0DB, /* 0x50 */
+ 0xE0D9, 0xE0DF, 0, 0, 0xE0E0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE0DE, 0, 0xE0E4, 0, 0, 0, /* 0x60 */
+ 0xC6F7, 0xD8AC, 0xD4EB, 0xE0E6, 0xCAC9, 0, 0, 0, /* 0x60 */
+ 0, 0xE0E5, 0, 0, 0, 0, 0xB8C1, 0, /* 0x70 */
+ 0, 0, 0, 0xE0E7, 0xE0E8, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE0E9, 0xE0E3, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xBABF, 0xCCE7, /* 0x80 */
+ 0, 0, 0, 0xE0EA, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xCFF9, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE0EB, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC8C2, /* 0xB0 */
+ 0, 0, 0, 0, 0xBDC0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xC4D2, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE0EC, 0, 0, 0xE0ED, /* 0xD0 */
+ 0, 0, 0xC7F4, 0xCBC4, 0, 0xE0EE, 0xBBD8, 0xD8B6, /* 0xD0 */
+ 0xD2F2, 0xE0EF, 0xCDC5, 0, 0xB6DA, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE0F1, 0, 0xD4B0, 0, 0, /* 0xE0 */
+ 0xC0A7, 0xB4D1, 0, 0, 0xCEA7, 0xE0F0, 0, 0, /* 0xF0 */
+ 0, 0xE0F2, 0xB9CC, 0, 0, 0xB9FA, 0xCDBC, 0xE0F3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6D4, 0xE0F4, 0, 0xD4B2, 0, /* 0x00 */
+ 0xC8A6, 0xE0F6, 0xE0F5, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xE0F7, 0, 0, 0xCDC1, /* 0x10 */
+ 0, 0, 0, 0xCAA5, 0, 0, 0, 0, /* 0x20 */
+ 0xD4DA, 0xDBD7, 0xDBD9, 0, 0xDBD8, 0xB9E7, 0xDBDC, 0xDBDD, /* 0x20 */
+ 0xB5D8, 0, 0, 0xDBDA, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xDBDB, 0xB3A1, 0xDBDF, 0, 0, 0xBBF8, 0, /* 0x30 */
+ 0xD6B7, 0, 0xDBE0, 0, 0, 0, 0, 0xBEF9, /* 0x40 */
+ 0, 0, 0xB7BB, 0, 0xDBD0, 0xCCAE, 0xBFB2, 0xBBB5, /* 0x40 */
+ 0xD7F8, 0xBFD3, 0, 0, 0, 0, 0, 0xBFE9, /* 0x50 */
+ 0, 0, 0xBCE1, 0xCCB3, 0xDBDE, 0xB0D3, 0xCEEB, 0xB7D8, /* 0x50 */
+ 0xD7B9, 0xC6C2, 0, 0, 0xC0A4, 0, 0xCCB9, 0, /* 0x60 */
+ 0xDBE7, 0xDBE1, 0xC6BA, 0xDBE3, 0, 0xDBE8, 0, 0xC5F7, /* 0x60 */
+ 0, 0, 0, 0xDBEA, 0, 0, 0xDBE9, 0xBFC0, /* 0x70 */
+ 0, 0, 0, 0xDBE6, 0xDBE5, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xB4B9, 0xC0AC, 0xC2A2, 0xDBE2, 0xDBE4, 0, /* 0x80 */
+ 0, 0, 0, 0xD0CD, 0xDBED, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xC0DD, 0xDBF2, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xB6E2, 0, 0, 0, 0, /* 0x90 */
+ 0xDBF3, 0xDBD2, 0xB9B8, 0xD4AB, 0xDBEC, 0, 0xBFD1, 0xDBF0, /* 0xA0 */
+ 0, 0xDBD1, 0, 0xB5E6, 0, 0xDBEB, 0xBFE5, 0, /* 0xA0 */
+ 0, 0, 0xDBEE, 0, 0xDBF1, 0, 0, 0, /* 0xB0 */
+ 0xDBF9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xB9A1, 0xB0A3, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xC2F1, 0, 0, 0xB3C7, 0xDBEF, /* 0xC0 */
+ 0, 0, 0xDBF8, 0, 0xC6D2, 0xDBF4, 0, 0, /* 0xD0 */
+ 0xDBF5, 0xDBF7, 0xDBF6, 0, 0, 0xDBFE, 0, 0xD3F2, /* 0xD0 */
+ 0xB2BA, 0, 0, 0, 0xDBFD, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xDCA4, 0, 0xDBFB, /* 0xE0 */
+ 0, 0, 0, 0, 0xDBFA, 0, 0, 0, /* 0xF0 */
+ 0xDBFC, 0xC5E0, 0xBBF9, 0, 0, 0xDCA3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCA5, 0, 0xCCC3, 0, 0, 0, 0xB6D1, 0xDDC0, /* 0x00 */
+ 0, 0, 0, 0xDCA1, 0, 0xDCA2, 0, 0, /* 0x00 */
+ 0, 0xC7B5, 0, 0, 0, 0xB6E9, 0, 0, /* 0x10 */
+ 0, 0xDCA7, 0, 0, 0, 0, 0xDCA6, 0, /* 0x10 */
+ 0xDCA9, 0xB1A4, 0, 0, 0xB5CC, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xBFB0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xD1DF, 0, 0, 0, 0, 0xB6C2, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xDCA8, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xCBFA, 0xEBF3, 0, 0, /* 0x40 */
+ 0, 0xCBDC, 0, 0, 0xCBFE, 0, 0, 0, /* 0x50 */
+ 0xCCC1, 0, 0, 0, 0, 0, 0xC8FB, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xDCAA, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xCCEE, 0xDCAB, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xDBD3, 0, /* 0x70 */
+ 0xDCAF, 0xDCAC, 0, 0xBEB3, 0, 0xCAFB, 0, 0, /* 0x80 */
+ 0, 0xDCAD, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xC9CA, 0xC4B9, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xC7BD, 0xDCAE, 0, 0, 0, 0xD4F6, 0xD0E6, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xC4AB, 0xB6D5, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xDBD4, 0, 0, 0, /* 0xB0 */
+ 0, 0xB1DA, 0, 0, 0, 0xDBD5, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xDBD6, 0, 0, 0, 0xBABE, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xC8C0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xCABF, 0xC8C9, 0, 0xD7B3, 0, /* 0xE0 */
+ 0xC9F9, 0, 0, 0xBFC7, 0, 0, 0xBAF8, 0, /* 0xF0 */
+ 0, 0xD2BC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2BA, 0, 0xB4A6, 0, 0, 0xB1B8, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xB8B4, 0, 0xCFC4, /* 0x00 */
+ 0, 0, 0, 0, 0xD9E7, 0xCFA6, 0xCDE2, 0, /* 0x10 */
+ 0, 0xD9ED, 0xB6E0, 0, 0xD2B9, 0, 0, 0xB9BB, /* 0x10 */
+ 0, 0, 0, 0, 0xE2B9, 0xE2B7, 0, 0xB4F3, /* 0x20 */
+ 0, 0xCCEC, 0xCCAB, 0xB7F2, 0, 0xD8B2, 0xD1EB, 0xBABB, /* 0x20 */
+ 0, 0xCAA7, 0, 0, 0xCDB7, 0, 0, 0xD2C4, /* 0x30 */
+ 0xBFE4, 0xBCD0, 0xB6E1, 0, 0xDEC5, 0, 0, 0, /* 0x30 */
+ 0, 0xDEC6, 0xDBBC, 0, 0xD1D9, 0, 0, 0xC6E6, /* 0x40 */
+ 0xC4CE, 0xB7EE, 0, 0xB7DC, 0, 0, 0xBFFC, 0xD7E0, /* 0x40 */
+ 0, 0xC6F5, 0, 0, 0xB1BC, 0xDEC8, 0xBDB1, 0xCCD7, /* 0x50 */
+ 0xDECA, 0, 0xDEC9, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xB5EC, 0, 0xC9DD, 0, 0, 0xB0C2, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xC5AE, 0xC5AB, 0, 0xC4CC, 0, /* 0x70 */
+ 0xBCE9, 0xCBFD, 0, 0, 0, 0xBAC3, 0, 0, /* 0x70 */
+ 0, 0xE5F9, 0xC8E7, 0xE5FA, 0xCDFD, 0, 0xD7B1, 0xB8BE, /* 0x80 */
+ 0xC2E8, 0, 0xC8D1, 0, 0, 0xE5FB, 0, 0, /* 0x80 */
+ 0, 0, 0xB6CA, 0xBCCB, 0, 0, 0xD1FD, 0xE6A1, /* 0x90 */
+ 0, 0xC3EE, 0, 0, 0, 0, 0xE6A4, 0, /* 0x90 */
+ 0, 0, 0, 0xE5FE, 0xE6A5, 0xCDD7, 0, 0, /* 0xA0 */
+ 0xB7C1, 0xE5FC, 0xE5FD, 0xE6A3, 0, 0, 0xC4DD, 0xE6A8, /* 0xA0 */
+ 0, 0, 0xE6A7, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xC3C3, 0, 0xC6DE, 0, 0, 0xE6AA, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xC4B7, 0, /* 0xC0 */
+ 0, 0, 0xE6A2, 0xCABC, 0, 0, 0, 0, /* 0xC0 */
+ 0xBDE3, 0xB9C3, 0xE6A6, 0xD0D5, 0xCEAF, 0, 0, 0xE6A9, /* 0xD0 */
+ 0xE6B0, 0, 0xD2A6, 0, 0xBDAA, 0xE6AD, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xE6AF, 0, 0xC0D1, 0, 0, /* 0xE0 */
+ 0xD2CC, 0, 0, 0, 0xBCA7, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xE6B1, 0, 0xD2F6, 0, 0, 0, 0xD7CB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDFE, 0, 0xCDDE, 0xC2A6, 0xE6AB, 0xE6AC, 0xBDBF, /* 0x00 */
+ 0xE6AE, 0xE6B3, 0, 0, 0xE6B2, 0, 0, 0, /* 0x00 */
+ 0, 0xE6B6, 0, 0xE6B8, 0, 0, 0, 0, /* 0x10 */
+ 0xC4EF, 0, 0, 0, 0xC4C8, 0, 0, 0xBEEA, /* 0x10 */
+ 0xC9EF, 0, 0, 0xE6B7, 0, 0xB6F0, 0, 0, /* 0x20 */
+ 0, 0xC3E4, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xD3E9, 0xE6B4, 0, 0xE6B5, 0, 0xC8A2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE6BD, 0, 0, 0, /* 0x30 */
+ 0xE6B9, 0, 0, 0, 0, 0, 0xC6C5, 0, /* 0x40 */
+ 0, 0xCDF1, 0xE6BB, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE6BC, 0, 0, /* 0x50 */
+ 0, 0, 0xBBE9, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE6BE, 0, 0, 0, 0, 0xE6BA, /* 0x60 */
+ 0, 0, 0xC0B7, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xD3A4, 0xE6BF, 0xC9F4, 0xE6C3, /* 0x70 */
+ 0, 0, 0xE6C4, 0, 0, 0, 0, 0xD0F6, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xC3BD, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xC3C4, 0xE6C2, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE6C1, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE6C7, 0xCFB1, 0, 0xEBF4, 0, 0, /* 0xB0 */
+ 0xE6CA, 0, 0, 0, 0, 0, 0xE6C5, 0, /* 0xB0 */
+ 0, 0xBCDE, 0xC9A9, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xBCB5, 0, 0, 0xCFD3, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE6C8, 0, 0xE6C9, 0, 0xE6CE, 0, /* 0xD0 */
+ 0xE6D0, 0, 0, 0, 0xE6D1, 0, 0, 0, /* 0xD0 */
+ 0xE6CB, 0xB5D5, 0, 0xE6CC, 0, 0, 0xE6CF, 0, /* 0xE0 */
+ 0, 0xC4DB, 0, 0xE6C6, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xE6CD /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xE6D2, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE6D4, 0xE6D3, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE6D5, 0, 0xD9F8, 0, 0, 0xE6D6, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE6D7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xD7D3, 0xE6DD, 0, 0xE6DE, 0xBFD7, 0xD4D0, 0, 0xD7D6, /* 0x50 */
+ 0xB4E6, 0xCBEF, 0xE6DA, 0xD8C3, 0xD7CE, 0xD0A2, 0, 0xC3CF, /* 0x50 */
+ 0, 0, 0xE6DF, 0xBCBE, 0xB9C2, 0xE6DB, 0xD1A7, 0, /* 0x60 */
+ 0, 0xBAA2, 0xC2CF, 0, 0xD8AB, 0, 0, 0, /* 0x60 */
+ 0xCAEB, 0xE5EE, 0, 0xE6DC, 0, 0xB7F5, 0, 0, /* 0x70 */
+ 0, 0, 0xC8E6, 0, 0, 0xC4F5, 0, 0, /* 0x70 */
+ 0xE5B2, 0xC4FE, 0, 0xCBFC, 0xE5B3, 0xD5AC, 0, 0xD3EE, /* 0x80 */
+ 0xCAD8, 0xB0B2, 0, 0xCBCE, 0xCDEA, 0, 0, 0xBAEA, /* 0x80 */
+ 0, 0, 0, 0xE5B5, 0, 0xE5B4, 0, 0xD7DA, /* 0x90 */
+ 0xB9D9, 0xD6E6, 0xB6A8, 0xCDF0, 0xD2CB, 0xB1A6, 0xCAB5, 0, /* 0x90 */
+ 0xB3E8, 0xC9F3, 0xBFCD, 0xD0FB, 0xCAD2, 0xE5B6, 0xBBC2, 0, /* 0xA0 */
+ 0, 0, 0xCFDC, 0xB9AC, 0, 0, 0, 0, /* 0xA0 */
+ 0xD4D7, 0, 0, 0xBAA6, 0xD1E7, 0xCFFC, 0xBCD2, 0, /* 0xB0 */
+ 0xE5B7, 0xC8DD, 0, 0, 0, 0xBFED, 0xB1F6, 0xCBDE, /* 0xB0 */
+ 0, 0, 0xBCC5, 0, 0xBCC4, 0xD2FA, 0xC3DC, 0xBFDC, /* 0xC0 */
+ 0, 0, 0, 0, 0xB8BB, 0, 0, 0, /* 0xC0 */
+ 0xC3C2, 0, 0xBAAE, 0xD4A2, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xC7DE, 0xC4AF, 0xB2EC, /* 0xD0 */
+ 0, 0xB9D1, 0, 0, 0xE5BB, 0xC1C8, 0, 0, /* 0xE0 */
+ 0xD5AF, 0, 0, 0, 0, 0, 0xE5BC, 0, /* 0xE0 */
+ 0xE5BE, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xB4E7, 0xB6D4, 0xCBC2, 0xD1B0, 0xB5BC, 0, 0, 0xCAD9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB7E2, 0, 0, 0xC9E4, 0, 0xBDAB, 0, /* 0x00 */
+ 0, 0xCEBE, 0xD7F0, 0, 0, 0, 0, 0xD0A1, /* 0x00 */
+ 0, 0xC9D9, 0, 0, 0xB6FB, 0xE6D8, 0xBCE2, 0, /* 0x10 */
+ 0xB3BE, 0, 0xC9D0, 0, 0xE6D9, 0xB3A2, 0, 0, /* 0x10 */
+ 0, 0, 0xDECC, 0, 0xD3C8, 0xDECD, 0, 0xD2A2, /* 0x20 */
+ 0, 0, 0, 0, 0xDECE, 0, 0, 0, /* 0x20 */
+ 0, 0xBECD, 0, 0, 0xDECF, 0, 0, 0, /* 0x30 */
+ 0xCAAC, 0xD2FC, 0xB3DF, 0xE5EA, 0xC4E1, 0xBEA1, 0xCEB2, 0xC4F2, /* 0x30 */
+ 0xBED6, 0xC6A8, 0xB2E3, 0, 0, 0xBED3, 0, 0, /* 0x40 */
+ 0xC7FC, 0xCCEB, 0xBDEC, 0xCEDD, 0, 0, 0xCABA, 0xC6C1, /* 0x40 */
+ 0xE5EC, 0xD0BC, 0, 0, 0, 0xD5B9, 0, 0, /* 0x50 */
+ 0, 0xE5ED, 0, 0, 0, 0, 0xCAF4, 0, /* 0x50 */
+ 0xCDC0, 0xC2C5, 0, 0xE5EF, 0, 0xC2C4, 0xE5F0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xE5F8, 0xCDCD, /* 0x60 */
+ 0, 0xC9BD, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD2D9, 0xE1A8, 0, 0, 0, 0, 0xD3EC, /* 0x70 */
+ 0, 0xCBEA, 0xC6F1, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE1AC, 0, 0, 0, 0xE1A7, 0xE1A9, 0, 0, /* 0x80 */
+ 0xE1AA, 0xE1AF, 0, 0, 0xB2ED, 0, 0xE1AB, 0xB8DA, /* 0x90 */
+ 0xE1AD, 0xE1AE, 0xE1B0, 0xB5BA, 0xE1B1, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xE1B3, 0xE1B8, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xD1D2, 0, 0xE1B6, 0xE1B5, 0xC1EB, 0, 0, /* 0xA0 */
+ 0, 0xE1B7, 0, 0xD4C0, 0, 0xE1B2, 0, 0xE1BA, /* 0xB0 */
+ 0xB0B6, 0, 0, 0, 0, 0xE1B4, 0, 0xBFF9, /* 0xB0 */
+ 0, 0xE1B9, 0, 0, 0xE1BB, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE1BE, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE1BC, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xD6C5, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xCFBF, 0, 0, 0xE1BD, 0xE1BF, 0xC2CD, 0, /* 0xE0 */
+ 0xB6EB, 0, 0xD3F8, 0, 0, 0xC7CD, 0, 0, /* 0xE0 */
+ 0xB7E5, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xBEFE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1C0, 0xE1C1, 0, 0, 0xE1C7, 0xB3E7, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xC6E9, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xB4DE, 0, 0xD1C2, 0, /* 0x10 */
+ 0, 0, 0, 0xE1C8, 0, 0, 0xE1C6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xE1C5, 0, 0xE1C3, 0xE1C2, /* 0x20 */
+ 0, 0xB1C0, 0, 0, 0, 0xD5B8, 0xE1C4, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE1CB, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE1CC, 0xE1CA, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEFFA, /* 0x40 */
+ 0, 0, 0xE1D3, 0xE1D2, 0xC7B6, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE1C9, 0, 0, 0xE1CE, 0, 0xE1D0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE1D4, 0, 0xE1D1, 0xE1CD, 0, 0, 0xE1CF, /* 0x60 */
+ 0, 0, 0, 0, 0xE1D5, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE1D6, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE1D7, 0, 0, 0, 0xE1D8, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1DA, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xE1DB, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xCEA1, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xE7DD, 0, 0xB4A8, 0xD6DD, 0, /* 0xD0 */
+ 0, 0xD1B2, 0xB3B2, 0, 0, 0xB9A4, 0xD7F3, 0xC7C9, /* 0xE0 */
+ 0xBEDE, 0xB9AE, 0, 0xCED7, 0, 0, 0xB2EE, 0xDBCF, /* 0xE0 */
+ 0, 0xBCBA, 0xD2D1, 0xCBC8, 0xB0CD, 0, 0, 0xCFEF, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xD9E3, 0xBDED /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB1D2, 0xCAD0, 0xB2BC, 0, 0xCBA7, 0xB7AB, 0, /* 0x00 */
+ 0xCAA6, 0, 0, 0, 0xCFA3, 0, 0, 0xE0F8, /* 0x00 */
+ 0xD5CA, 0xE0FB, 0, 0, 0xE0FA, 0xC5C1, 0xCCFB, 0, /* 0x10 */
+ 0xC1B1, 0xE0F9, 0xD6E3, 0xB2AF, 0xD6C4, 0xB5DB, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xB4F8, 0xD6A1, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xCFAF, 0xB0EF, 0, /* 0x20 */
+ 0, 0xE0FC, 0, 0, 0, 0, 0, 0xE1A1, /* 0x30 */
+ 0xB3A3, 0, 0, 0xE0FD, 0xE0FE, 0xC3B1, 0, 0, /* 0x30 */
+ 0, 0, 0xC3DD, 0, 0xE1A2, 0xB7F9, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xBBCF, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE1A3, 0xC4BB, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE1A4, 0, 0, 0xE1A5, 0, /* 0x50 */
+ 0, 0xE1A6, 0xB4B1, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xB8C9, 0xC6BD, 0xC4EA, 0, 0xB2A2, 0, /* 0x70 */
+ 0xD0D2, 0, 0xE7DB, 0xBBC3, 0xD3D7, 0xD3C4, 0, 0xB9E3, /* 0x70 */
+ 0xE2CF, 0, 0, 0, 0xD7AF, 0, 0xC7EC, 0xB1D3, /* 0x80 */
+ 0, 0, 0xB4B2, 0xE2D1, 0, 0, 0, 0xD0F2, /* 0x80 */
+ 0xC2AE, 0xE2D0, 0, 0xBFE2, 0xD3A6, 0xB5D7, 0xE2D2, 0xB5EA, /* 0x90 */
+ 0, 0xC3ED, 0xB8FD, 0, 0xB8AE, 0, 0xC5D3, 0xB7CF, /* 0x90 */
+ 0xE2D4, 0, 0, 0, 0, 0xE2D3, 0xB6C8, 0xD7F9, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xCDA5, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE2D8, 0, 0xE2D6, 0xCAFC, 0xBFB5, /* 0xB0 */
+ 0xD3B9, 0xE2D5, 0, 0, 0, 0, 0xE2D7, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xC1AE, 0xC0C8, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE2DB, 0xE2DA, 0xC0AA, 0, 0, 0xC1CE, 0, /* 0xD0 */
+ 0, 0, 0, 0xE2DC, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE2DD, 0, 0xE2DE, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xDBC8, 0, 0xD1D3, 0xCDA2, /* 0xF0 */
+ 0, 0, 0xBDA8, 0, 0, 0, 0xDEC3, 0xD8A5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBFAA, 0xDBCD, 0xD2EC, 0xC6FA, 0xC5AA, 0, 0, 0, /* 0x00 */
+ 0xDEC4, 0, 0xB1D7, 0xDFAE, 0, 0, 0, 0xCABD, /* 0x00 */
+ 0, 0xDFB1, 0, 0xB9AD, 0, 0xD2FD, 0, 0xB8A5, /* 0x10 */
+ 0xBAEB, 0, 0, 0xB3DA, 0, 0, 0, 0xB5DC, /* 0x10 */
+ 0xD5C5, 0, 0, 0, 0, 0xC3D6, 0xCFD2, 0xBBA1, /* 0x20 */
+ 0, 0xE5F3, 0xE5F2, 0, 0, 0xE5F4, 0, 0xCDE4, /* 0x20 */
+ 0, 0xC8F5, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xB5AF, 0xC7BF, 0, 0xE5F6, 0, 0, 0, /* 0x30 */
+ 0xECB0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xE5E6, 0, 0xB9E9, 0xB5B1, 0, 0xC2BC, 0xE5E8, 0xE5E7, /* 0x50 */
+ 0xE5E9, 0, 0, 0, 0, 0xD2CD, 0, 0, /* 0x50 */
+ 0, 0xE1EA, 0xD0CE, 0, 0xCDAE, 0, 0xD1E5, 0, /* 0x60 */
+ 0, 0xB2CA, 0xB1EB, 0, 0xB1F2, 0xC5ED, 0, 0, /* 0x60 */
+ 0xD5C3, 0xD3B0, 0, 0xE1DC, 0, 0, 0, 0xE1DD, /* 0x70 */
+ 0, 0xD2DB, 0, 0xB3B9, 0xB1CB, 0, 0, 0, /* 0x70 */
+ 0xCDF9, 0xD5F7, 0xE1DE, 0, 0xBEB6, 0xB4FD, 0, 0xE1DF, /* 0x80 */
+ 0xBADC, 0xE1E0, 0xBBB2, 0xC2C9, 0xE1E1, 0, 0, 0, /* 0x80 */
+ 0xD0EC, 0, 0xCDBD, 0, 0, 0xE1E2, 0, 0xB5C3, /* 0x90 */
+ 0xC5C7, 0xE1E3, 0, 0, 0xE1E4, 0, 0, 0, /* 0x90 */
+ 0, 0xD3F9, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE1E5, 0, 0xD1AD, 0, 0, 0xE1E6, 0xCEA2, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xE1E7, 0, 0xB5C2, /* 0xB0 */
+ 0, 0, 0, 0, 0xE1E8, 0xBBD5, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xD0C4, 0xE2E0, 0xB1D8, 0xD2E4, 0, /* 0xC0 */
+ 0, 0xE2E1, 0, 0, 0xBCC9, 0xC8CC, 0, 0xE2E3, /* 0xC0 */
+ 0xECFE, 0xECFD, 0xDFAF, 0, 0, 0, 0xE2E2, 0xD6BE, /* 0xD0 */
+ 0xCDFC, 0xC3A6, 0, 0, 0, 0xE3C3, 0, 0, /* 0xD0 */
+ 0xD6D2, 0xE2E7, 0, 0, 0xE2E8, 0, 0, 0xD3C7, /* 0xE0 */
+ 0, 0, 0xE2EC, 0xBFEC, 0, 0xE2ED, 0xE2E5, 0, /* 0xE0 */
+ 0, 0xB3C0, 0, 0, 0, 0xC4EE, 0, 0, /* 0xF0 */
+ 0xE2EE, 0, 0, 0xD0C3, 0, 0xBAF6, 0xE2E9, 0xB7DE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBBB3, 0xCCAC, 0xCBCB, 0xE2E4, 0xE2E6, 0xE2EA, 0xE2EB, 0, /* 0x00 */
+ 0, 0, 0xE2F7, 0, 0, 0xE2F4, 0xD4F5, 0xE2F3, /* 0x00 */
+ 0, 0, 0xC5AD, 0, 0xD5FA, 0xC5C2, 0xB2C0, 0, /* 0x10 */
+ 0, 0xE2EF, 0, 0xE2F2, 0xC1AF, 0xCBBC, 0, 0, /* 0x10 */
+ 0xB5A1, 0xE2F9, 0, 0, 0, 0xBCB1, 0xE2F1, 0xD0D4, /* 0x20 */
+ 0xD4B9, 0xE2F5, 0xB9D6, 0xE2F6, 0, 0, 0, 0xC7D3, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE2F0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xD7DC, 0xEDA1, 0, 0, 0xE2F8, /* 0x30 */
+ 0, 0xEDA5, 0xE2FE, 0xCAD1, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xC1B5, 0, 0xBBD0, 0, 0, /* 0x40 */
+ 0xBFD6, 0, 0xBAE3, 0, 0, 0xCBA1, 0, 0, /* 0x50 */
+ 0, 0xEDA6, 0xEDA3, 0, 0, 0xEDA2, 0, 0, /* 0x50 */
+ 0, 0, 0xBBD6, 0xEDA7, 0xD0F4, 0, 0, 0xEDA4, /* 0x60 */
+ 0xBADE, 0xB6F7, 0xE3A1, 0xB6B2, 0xCCF1, 0xB9A7, 0, 0xCFA2, /* 0x60 */
+ 0xC7A1, 0, 0, 0xBFD2, 0, 0, 0xB6F1, 0, /* 0x70 */
+ 0xE2FA, 0xE2FB, 0xE2FD, 0xE2FC, 0xC4D5, 0xE3A2, 0, 0xD3C1, /* 0x70 */
+ 0, 0, 0, 0xE3A7, 0xC7C4, 0, 0, 0, /* 0x80 */
+ 0, 0xCFA4, 0, 0, 0xE3A9, 0xBAB7, 0, 0, /* 0x80 */
+ 0, 0, 0xE3A8, 0, 0xBBDA, 0, 0xE3A3, 0, /* 0x90 */
+ 0, 0, 0xE3A4, 0xE3AA, 0, 0xE3A6, 0, 0xCEF2, /* 0x90 */
+ 0xD3C6, 0, 0, 0xBBBC, 0, 0, 0xD4C3, 0, /* 0xA0 */
+ 0xC4FA, 0, 0, 0xEDA8, 0xD0FC, 0xE3A5, 0, 0xC3F5, /* 0xA0 */
+ 0, 0xE3AD, 0xB1AF, 0, 0xE3B2, 0, 0, 0, /* 0xB0 */
+ 0xBCC2, 0, 0, 0xE3AC, 0xB5BF, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xC7E9, 0xE3B0, 0, /* 0xC0 */
+ 0, 0, 0xBEAA, 0xCDEF, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xBBF3, 0, 0, 0, 0xCCE8, 0, 0, /* 0xD0 */
+ 0xE3AF, 0, 0xE3B1, 0, 0xCFA7, 0xE3AE, 0, 0xCEA9, /* 0xD0 */
+ 0xBBDD, 0, 0, 0, 0, 0, 0xB5EB, 0xBEE5, /* 0xE0 */
+ 0xB2D2, 0xB3CD, 0, 0xB1B9, 0xE3AB, 0xB2D1, 0xB5AC, 0xB9DF, /* 0xE0 */
+ 0xB6E8, 0, 0, 0xCFEB, 0xE3B7, 0, 0xBBCC, 0, /* 0xF0 */
+ 0, 0xC8C7, 0xD0CA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE3B8, 0xB3EE, 0, 0, 0, 0, 0xEDA9, 0, /* 0x00 */
+ 0xD3FA, 0xD3E4, 0, 0, 0, 0xEDAA, 0xE3B9, 0xD2E2, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE3B5, 0, 0, /* 0x10 */
+ 0, 0, 0xD3DE, 0, 0, 0, 0, 0xB8D0, /* 0x10 */
+ 0xE3B3, 0, 0, 0xE3B6, 0xB7DF, 0, 0xE3B4, 0xC0A2, /* 0x20 */
+ 0, 0, 0, 0xE3BA, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD4B8, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xB4C8, 0, 0xE3BB, 0, 0xBBC5, 0, 0xC9F7, 0, /* 0x40 */
+ 0, 0xC9E5, 0, 0, 0, 0xC4BD, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xEDAB, 0, 0, /* 0x50 */
+ 0, 0, 0xC2FD, 0, 0, 0, 0, 0xBBDB, /* 0x60 */
+ 0xBFAE, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xCEBF, 0, 0, 0, 0, 0xE3BC, 0, 0xBFB6, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xB1EF, 0, 0, 0xD4F7, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xE3BE, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xEDAD, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE3BF, /* 0xA0 */
+ 0xBAA9, 0xEDAC, 0, 0, 0xE3BD, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE3C0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xBAB6, 0, /* 0xB0 */
+ 0, 0, 0xB6AE, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xD0B8, 0, 0xB0C3, 0xEDAE, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xEDAF, 0xC0C1, 0, 0xE3C1, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xC5B3, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE3C2, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDCB2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDB0, 0, /* 0x00 */
+ 0xB8EA, 0, 0xCEEC, 0xEAA7, 0xD0E7, 0xCAF9, 0xC8D6, 0xCFB7, /* 0x00 */
+ 0xB3C9, 0xCED2, 0xBDE4, 0, 0, 0xE3DE, 0xBBF2, 0xEAA8, /* 0x10 */
+ 0xD5BD, 0, 0xC6DD, 0xEAA9, 0, 0, 0, 0xEAAA, /* 0x10 */
+ 0, 0xEAAC, 0xEAAB, 0, 0xEAAE, 0xEAAD, 0, 0, /* 0x20 */
+ 0, 0, 0xBDD8, 0, 0xEAAF, 0, 0xC2BE, 0, /* 0x20 */
+ 0, 0, 0, 0xB4C1, 0xB4F7, 0, 0, 0xBBA7, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xECE6, 0xECE5, 0xB7BF, /* 0x30 */
+ 0xCBF9, 0xB1E2, 0, 0xECE7, 0, 0, 0, 0xC9C8, /* 0x40 */
+ 0xECE8, 0xECE9, 0, 0xCAD6, 0xDED0, 0xB2C5, 0xD4FA, 0, /* 0x40 */
+ 0, 0xC6CB, 0xB0C7, 0xB4F2, 0xC8D3, 0, 0, 0, /* 0x50 */
+ 0xCDD0, 0, 0, 0xBFB8, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xBFDB, 0, 0, 0xC7A4, 0xD6B4, /* 0x60 */
+ 0, 0xC0A9, 0xDED1, 0xC9A8, 0xD1EF, 0xC5A4, 0xB0E7, 0xB3B6, /* 0x60 */
+ 0xC8C5, 0, 0, 0xB0E2, 0, 0, 0xB7F6, 0, /* 0x70 */
+ 0, 0xC5FA, 0, 0, 0xB6F3, 0, 0xD5D2, 0xB3D0, /* 0x70 */
+ 0xBCBC, 0, 0, 0, 0xB3AD, 0, 0, 0, /* 0x80 */
+ 0, 0xBEF1, 0xB0D1, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xD2D6, 0xCAE3, 0xD7A5, 0, 0xCDB6, 0xB6B6, 0xBFB9, /* 0x90 */
+ 0xD5DB, 0, 0xB8A7, 0xC5D7, 0, 0, 0, 0xDED2, /* 0x90 */
+ 0xBFD9, 0xC2D5, 0xC7C0, 0, 0xBBA4, 0xB1A8, 0, 0, /* 0xA0 */
+ 0xC5EA, 0, 0, 0xC5FB, 0xCCA7, 0, 0, 0, /* 0xA0 */
+ 0, 0xB1A7, 0, 0, 0, 0xB5D6, 0, 0, /* 0xB0 */
+ 0, 0xC4A8, 0, 0xDED3, 0xD1BA, 0xB3E9, 0, 0xC3F2, /* 0xB0 */
+ 0, 0, 0xB7F7, 0, 0xD6F4, 0xB5A3, 0xB2F0, 0xC4B4, /* 0xC0 */
+ 0xC4E9, 0xC0AD, 0xDED4, 0, 0xB0E8, 0xC5C4, 0xC1E0, 0, /* 0xC0 */
+ 0xB9D5, 0, 0xBEDC, 0xCDD8, 0xB0CE, 0, 0xCDCF, 0xDED6, /* 0xD0 */
+ 0xBED0, 0xD7BE, 0xDED5, 0xD5D0, 0xB0DD, 0, 0, 0xC4E2, /* 0xD0 */
+ 0, 0, 0xC2A3, 0xBCF0, 0, 0xD3B5, 0xC0B9, 0xC5A1, /* 0xE0 */
+ 0xB2A6, 0xD4F1, 0, 0, 0xC0A8, 0xCAC3, 0xDED7, 0xD5FC, /* 0xE0 */
+ 0, 0xB9B0, 0, 0xC8AD, 0xCBA9, 0, 0xDED9, 0xBFBD, /* 0xF0 */
+ 0, 0, 0, 0, 0xC6B4, 0xD7A7, 0xCAB0, 0xC4C3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB3D6, 0xB9D2, 0, 0, 0, 0, 0xD6B8, /* 0x00 */
+ 0xEAFC, 0xB0B4, 0, 0, 0, 0, 0xBFE6, 0, /* 0x00 */
+ 0, 0xCCF4, 0, 0, 0, 0, 0xCDDA, 0, /* 0x10 */
+ 0, 0, 0xD6BF, 0xC2CE, 0, 0xCECE, 0xCCA2, 0xD0AE, /* 0x10 */
+ 0xC4D3, 0xB5B2, 0xDED8, 0xD5F5, 0xBCB7, 0xBBD3, 0, 0, /* 0x20 */
+ 0xB0A4, 0, 0xC5B2, 0xB4EC, 0, 0, 0, 0xD5F1, /* 0x20 */
+ 0, 0, 0xEAFD, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xDEDA, 0xCDA6, 0, 0, 0xCDEC, 0, 0, /* 0x30 */
+ 0, 0, 0xCEE6, 0xDEDC, 0, 0xCDB1, 0xC0A6, 0, /* 0x40 */
+ 0, 0xD7BD, 0, 0xDEDB, 0xB0C6, 0xBAB4, 0xC9D3, 0xC4F3, /* 0x40 */
+ 0xBEE8, 0, 0, 0, 0, 0xB2B6, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xC0CC, 0xCBF0, /* 0x50 */
+ 0, 0xBCF1, 0xBBBB, 0xB5B7, 0, 0, 0, 0xC5F5, /* 0x60 */
+ 0, 0xDEE6, 0, 0, 0, 0xDEE3, 0xBEDD, 0, /* 0x60 */
+ 0, 0xDEDF, 0, 0, 0, 0, 0xB4B7, 0xBDDD, /* 0x70 */
+ 0, 0, 0xDEE0, 0xC4ED, 0, 0, 0, 0, /* 0x70 */
+ 0xCFC6, 0, 0xB5E0, 0, 0, 0, 0, 0xB6DE, /* 0x80 */
+ 0xCADA, 0xB5F4, 0xDEE5, 0, 0xD5C6, 0, 0xDEE1, 0xCCCD, /* 0x80 */
+ 0xC6FE, 0, 0xC5C5, 0, 0, 0, 0xD2B4, 0, /* 0x90 */
+ 0xBEF2, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xC2D3, 0, 0xCCBD, 0xB3B8, 0, 0xBDD3, 0, 0xBFD8, /* 0xA0 */
+ 0xCDC6, 0xD1DA, 0xB4EB, 0, 0xDEE4, 0xDEDD, 0xDEE7, 0, /* 0xA0 */
+ 0xEAFE, 0, 0, 0xC2B0, 0xDEE2, 0, 0, 0xD6C0, /* 0xB0 */
+ 0xB5A7, 0, 0xB2F4, 0, 0xDEE8, 0, 0xDEF2, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xDEED, 0, 0xDEF1, 0, /* 0xC0 */
+ 0, 0xC8E0, 0, 0, 0, 0xD7E1, 0xDEEF, 0xC3E8, /* 0xC0 */
+ 0xCCE1, 0, 0xB2E5, 0, 0, 0, 0xD2BE, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xDEEE, 0, /* 0xD0 */
+ 0xDEEB, 0xCED5, 0, 0xB4A7, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xBFAB, 0xBEBE, 0, 0, 0xBDD2, 0, 0, /* 0xE0 */
+ 0, 0, 0xDEE9, 0, 0xD4AE, 0, 0xDEDE, 0, /* 0xF0 */
+ 0xDEEA, 0, 0, 0, 0, 0xC0BF, 0, 0xDEEC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB2F3, 0xB8E9, 0xC2A7, 0, 0, 0xBDC1, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xDEF5, 0xDEF8, 0, 0, 0xB2AB, /* 0x00 */
+ 0xB4A4, 0, 0, 0xB4EA, 0xC9A6, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xDEF6, 0xCBD1, 0, 0xB8E3, 0, /* 0x10 */
+ 0xDEF7, 0xDEFA, 0, 0, 0, 0, 0xDEF9, 0, /* 0x20 */
+ 0, 0, 0xCCC2, 0, 0xB0E1, 0xB4EE, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE5BA, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xD0AF, 0, 0, 0xB2EB, 0, 0xEBA1, /* 0x30 */
+ 0, 0xDEF4, 0, 0, 0xC9E3, 0xDEF3, 0xB0DA, 0xD2A1, /* 0x40 */
+ 0xB1F7, 0, 0xCCAF, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xDEF0, 0, 0xCBA4, 0, 0, 0, /* 0x50 */
+ 0xD5AA, 0, 0, 0, 0, 0, 0xDEFB, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB4DD, /* 0x60 */
+ 0, 0xC4A6, 0, 0, 0, 0xDEFD, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xC3FE, 0xC4A1, 0xDFA1, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xC1CC, 0, 0xDEFC, 0xBEEF, 0, 0xC6B2, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xB3C5, 0xC8F6, 0, 0, 0xCBBA, 0xDEFE, 0, /* 0x90 */
+ 0, 0xDFA4, 0, 0, 0, 0, 0xD7B2, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xB3B7, 0, 0, 0, /* 0xA0 */
+ 0, 0xC1C3, 0, 0, 0xC7CB, 0xB2A5, 0xB4E9, 0, /* 0xA0 */
+ 0xD7AB, 0, 0, 0, 0, 0xC4EC, 0, 0xDFA2, /* 0xB0 */
+ 0xDFA3, 0, 0xDFA5, 0, 0xBAB3, 0, 0, 0, /* 0xB0 */
+ 0xDFA6, 0, 0xC0DE, 0, 0, 0xC9C3, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xB2D9, 0xC7E6, 0, /* 0xC0 */
+ 0xDFA7, 0, 0xC7DC, 0, 0, 0, 0, 0xDFA8, /* 0xD0 */
+ 0xEBA2, 0, 0, 0, 0, 0, 0xCBD3, 0, /* 0xD0 */
+ 0, 0, 0xDFAA, 0, 0xDFA9, 0, 0xB2C1 /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC5CA, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xDFAB, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xD4DC, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xC8C1, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xDFAC, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xBEF0, 0, 0, 0xDFAD, 0xD6A7, /* 0x20 */
+ 0, 0, 0, 0, 0xEAB7, 0xEBB6, 0xCAD5, 0, /* 0x30 */
+ 0xD8FC, 0xB8C4, 0, 0xB9A5, 0, 0, 0xB7C5, 0xD5FE, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xB9CA, 0, 0, /* 0x40 */
+ 0xD0A7, 0xF4CD, 0, 0, 0xB5D0, 0, 0, 0xC3F4, /* 0x40 */
+ 0, 0xBEC8, 0, 0, 0, 0xEBB7, 0xB0BD, 0, /* 0x50 */
+ 0, 0xBDCC, 0, 0xC1B2, 0, 0xB1D6, 0xB3A8, 0, /* 0x50 */
+ 0, 0, 0xB8D2, 0xC9A2, 0, 0, 0xB6D8, 0, /* 0x60 */
+ 0, 0, 0, 0xEBB8, 0xBEB4, 0, 0, 0, /* 0x60 */
+ 0xCAFD, 0, 0xC7C3, 0, 0xD5FB, 0, 0, 0xB7F3, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCEC4, /* 0x80 */
+ 0, 0, 0, 0xD5AB, 0xB1F3, 0, 0, 0, /* 0x80 */
+ 0xECB3, 0xB0DF, 0, 0xECB5, 0, 0, 0, 0xB6B7, /* 0x90 */
+ 0, 0xC1CF, 0, 0xF5FA, 0xD0B1, 0, 0, 0xD5E5, /* 0x90 */
+ 0, 0xCED3, 0, 0, 0xBDEF, 0xB3E2, 0, 0xB8AB, /* 0xA0 */
+ 0, 0xD5B6, 0, 0xEDBD, 0, 0xB6CF, 0, 0xCBB9, /* 0xA0 */
+ 0xD0C2, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xB7BD, 0, 0, 0xECB6, 0xCAA9, 0, 0, /* 0xB0 */
+ 0, 0xC5D4, 0, 0xECB9, 0xECB8, 0xC2C3, 0xECB7, 0, /* 0xC0 */
+ 0, 0, 0, 0xD0FD, 0xECBA, 0, 0xECBB, 0xD7E5, /* 0xC0 */
+ 0, 0, 0xECBC, 0, 0, 0, 0xECBD, 0xC6EC, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xCEDE, 0, 0xBCC8, 0, 0, 0xC8D5, 0xB5A9, 0xBEC9, /* 0xE0 */
+ 0xD6BC, 0xD4E7, 0, 0, 0xD1AE, 0xD0F1, 0xEAB8, 0xEAB9, /* 0xE0 */
+ 0xEABA, 0xBAB5, 0, 0, 0, 0, 0xCAB1, 0xBFF5, /* 0xF0 */
+ 0, 0, 0xCDFA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEAC0, 0, 0xB0BA, 0xEABE, 0, 0, 0xC0A5, 0, /* 0x00 */
+ 0, 0, 0xEABB, 0, 0xB2FD, 0, 0xC3F7, 0xBBE8, /* 0x00 */
+ 0, 0, 0, 0xD2D7, 0xCEF4, 0xEABF, 0, 0, /* 0x10 */
+ 0, 0xEABC, 0, 0, 0, 0xEAC3, 0, 0xD0C7, /* 0x10 */
+ 0xD3B3, 0, 0, 0, 0, 0xB4BA, 0, 0xC3C1, /* 0x20 */
+ 0xD7F2, 0, 0, 0, 0, 0xD5D1, 0, 0xCAC7, /* 0x20 */
+ 0, 0xEAC5, 0, 0, 0xEAC4, 0xEAC7, 0xEAC6, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xD6E7, 0, 0xCFD4, 0, /* 0x30 */
+ 0, 0xEACB, 0, 0xBBCE, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xBDFA, 0xC9CE, 0, 0, 0xEACC, /* 0x40 */
+ 0, 0, 0xC9B9, 0xCFFE, 0xEACA, 0xD4CE, 0xEACD, 0xEACF, /* 0x50 */
+ 0, 0, 0xCDED, 0, 0, 0, 0, 0xEAC9, /* 0x50 */
+ 0, 0xEACE, 0, 0, 0xCEEE, 0, 0xBBDE, 0, /* 0x60 */
+ 0xB3BF, 0, 0, 0, 0, 0, 0xC6D5, 0xBEB0, /* 0x60 */
+ 0xCEFA, 0, 0, 0, 0xC7E7, 0, 0xBEA7, 0xEAD0, /* 0x70 */
+ 0, 0, 0xD6C7, 0, 0, 0, 0xC1C0, 0, /* 0x70 */
+ 0, 0, 0xD4DD, 0, 0xEAD1, 0, 0, 0xCFBE, /* 0x80 */
+ 0, 0, 0, 0, 0xEAD2, 0, 0, 0, /* 0x80 */
+ 0, 0xCAEE, 0, 0, 0, 0, 0xC5AF, 0xB0B5, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xEAD4, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEAD3, /* 0xA0 */
+ 0xF4DF, 0, 0, 0, 0, 0, 0xC4BA, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xB1A9, 0, 0, 0, /* 0xB0 */
+ 0, 0xE5DF, 0, 0, 0, 0, 0xEAD5, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xCAEF, 0, 0xEAD6, 0xEAD7, 0xC6D8, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xEAD8, 0, /* 0xE0 */
+ 0, 0xEAD9, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xD4BB, 0, 0xC7FA, 0xD2B7, 0xB8FC, 0, 0, 0xEAC2, /* 0xF0 */
+ 0, 0xB2DC, 0, 0, 0xC2FC, 0, 0xD4F8, 0xCCE6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7EE, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xD4C2, 0xD3D0, 0xEBC3, 0xC5F3, 0, 0xB7FE, 0, 0, /* 0x00 */
+ 0xEBD4, 0, 0, 0, 0xCBB7, 0xEBDE, 0, 0xC0CA, /* 0x10 */
+ 0, 0, 0, 0xCDFB, 0, 0xB3AF, 0, 0xC6DA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xEBFC, 0, /* 0x20 */
+ 0xC4BE, 0, 0xCEB4, 0xC4A9, 0xB1BE, 0xD4FD, 0, 0xCAF5, /* 0x20 */
+ 0, 0xD6EC, 0, 0, 0xC6D3, 0xB6E4, 0, 0, /* 0x30 */
+ 0, 0, 0xBBFA, 0, 0, 0xD0E0, 0, 0, /* 0x30 */
+ 0xC9B1, 0, 0xD4D3, 0xC8A8, 0, 0, 0xB8CB, 0, /* 0x40 */
+ 0xE8BE, 0xC9BC, 0, 0, 0xE8BB, 0, 0xC0EE, 0xD0D3, /* 0x40 */
+ 0xB2C4, 0xB4E5, 0, 0xE8BC, 0, 0, 0xD5C8, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xB6C5, 0, 0xE8BD, 0xCAF8, /* 0x50 */
+ 0xB8DC, 0xCCF5, 0, 0, 0, 0xC0B4, 0, 0, /* 0x60 */
+ 0xD1EE, 0xE8BF, 0xE8C2, 0, 0, 0xBABC, 0, 0xB1AD, /* 0x60 */
+ 0xBDDC, 0, 0xEABD, 0xE8C3, 0, 0xE8C6, 0, 0xE8CB, /* 0x70 */
+ 0, 0, 0, 0, 0xE8CC, 0, 0xCBC9, 0xB0E5, /* 0x70 */
+ 0, 0xBCAB, 0, 0, 0xB9B9, 0, 0, 0xE8C1, /* 0x80 */
+ 0, 0xCDF7, 0, 0xE8CA, 0, 0, 0, 0, /* 0x80 */
+ 0xCEF6, 0, 0, 0, 0, 0xD5ED, 0, 0xC1D6, /* 0x90 */
+ 0xE8C4, 0, 0xC3B6, 0, 0xB9FB, 0xD6A6, 0xE8C8, 0, /* 0x90 */
+ 0, 0, 0xCAE0, 0xD4E6, 0, 0xE8C0, 0, 0xE8C5, /* 0xA0 */
+ 0xE8C7, 0, 0xC7B9, 0xB7E3, 0, 0xE8C9, 0, 0xBFDD, /* 0xA0 */
+ 0xE8D2, 0, 0, 0xE8D7, 0, 0xE8D5, 0xBCDC, 0xBCCF, /* 0xB0 */
+ 0xE8DB, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE8DE, 0, 0xE8DA, 0xB1FA, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB0D8, /* 0xC0 */
+ 0xC4B3, 0xB8CC, 0xC6E2, 0xC8BE, 0xC8E1, 0, 0, 0, /* 0xD0 */
+ 0xE8CF, 0xE8D4, 0xE8D6, 0, 0xB9F1, 0xE8D8, 0xD7F5, 0, /* 0xD0 */
+ 0xC4FB, 0, 0xE8DC, 0, 0, 0xB2E9, 0, 0, /* 0xE0 */
+ 0, 0xE8D1, 0, 0, 0xBCED, 0, 0, 0xBFC2, /* 0xE0 */
+ 0xE8CD, 0xD6F9, 0, 0xC1F8, 0xB2F1, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xE8DF, 0, 0xCAC1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE8D9, 0, 0, 0, 0, 0xD5A4, 0, 0xB1EA, /* 0x00 */
+ 0xD5BB, 0xE8CE, 0xE8D0, 0xB6B0, 0xE8D3, 0, 0xE8DD, 0xC0B8, /* 0x00 */
+ 0, 0xCAF7, 0, 0xCBA8, 0, 0, 0xC6DC, 0xC0F5, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE8E9, 0, 0, /* 0x10 */
+ 0, 0xD0A3, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE8F2, 0xD6EA, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE8E0, 0xE8E1, 0, 0, 0, 0xD1F9, /* 0x30 */
+ 0xBACB, 0xB8F9, 0, 0, 0xB8F1, 0xD4D4, 0xE8EF, 0, /* 0x30 */
+ 0xE8EE, 0xE8EC, 0xB9F0, 0xCCD2, 0xE8E6, 0xCEA6, 0xBFF2, 0, /* 0x40 */
+ 0xB0B8, 0xE8F1, 0xE8F0, 0, 0xD7C0, 0, 0xE8E4, 0, /* 0x40 */
+ 0xCDA9, 0xC9A3, 0, 0xBBB8, 0xBDDB, 0xE8EA, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE8E2, 0xE8E3, 0xE8E5, 0xB5B5, 0xE8E7, 0xC7C5, 0xE8EB, 0xE8ED, /* 0x60 */
+ 0xBDB0, 0xD7AE, 0, 0xE8F8, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE8F5, 0, 0xCDB0, 0xE8F6, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC1BA, 0, 0xE8E8, 0, 0xC3B7, 0xB0F0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8F4, /* 0x80 */
+ 0, 0, 0, 0xE8F7, 0, 0, 0, 0xB9A3, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xC9D2, 0, 0, 0, 0xC3CE, 0xCEE0, /* 0xA0 */
+ 0xC0E6, 0, 0, 0, 0, 0xCBF3, 0, 0xCCDD, /* 0xA0 */
+ 0xD0B5, 0, 0, 0xCAE1, 0, 0xE8F3, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xBCEC, 0, 0xE8F9, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xC3DE, 0, 0xC6E5, 0, 0xB9F7, 0, 0, /* 0xC0 */
+ 0, 0, 0xB0F4, 0, 0, 0xD7D8, 0, 0, /* 0xD0 */
+ 0xBCAC, 0, 0xC5EF, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xCCC4, 0, 0, 0xE9A6, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xC9AD, 0, /* 0xE0 */
+ 0xE9A2, 0xC0E2, 0, 0, 0, 0xBFC3, 0, 0, /* 0xF0 */
+ 0, 0xE8FE, 0xB9D7, 0, 0xE8FB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE9A4, 0, 0, 0, 0xD2CE, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xE9A3, 0, 0xD6B2, 0xD7B5, 0, /* 0x00 */
+ 0xE9A7, 0, 0xBDB7, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8FC, /* 0x10 */
+ 0xE8FD, 0, 0, 0, 0xE9A1, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xCDD6, 0, 0, /* 0x20 */
+ 0xD2AC, 0, 0, 0, 0xE9B2, 0, 0, 0, /* 0x30 */
+ 0, 0xE9A9, 0, 0, 0, 0xB4AA, 0, 0xB4BB, /* 0x30 */
+ 0, 0, 0xE9AB, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xD0A8, 0, 0, 0xE9A5, /* 0x50 */
+ 0, 0, 0xB3FE, 0, 0, 0xE9AC, 0xC0E3, 0, /* 0x50 */
+ 0xE9AA, 0, 0, 0xE9B9, 0, 0, 0xE9B8, 0, /* 0x60 */
+ 0, 0, 0, 0xE9AE, 0, 0, 0xE8FA, 0, /* 0x60 */
+ 0, 0xE9A8, 0, 0, 0, 0, 0, 0xBFAC, /* 0x70 */
+ 0xE9B1, 0xE9BA, 0, 0, 0xC2A5, 0, 0, 0, /* 0x70 */
+ 0xE9AF, 0, 0xB8C5, 0, 0xE9AD, 0, 0xD3DC, 0xE9B4, /* 0x80 */
+ 0xE9B5, 0xE9B7, 0, 0, 0, 0xE9C7, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xC0C6, 0xE9C5, 0, 0, /* 0x90 */
+ 0xE9B0, 0, 0, 0xE9BB, 0xB0F1, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE9BC, /* 0xA0 */
+ 0xD5A5, 0, 0, 0xE9BE, 0, 0xE9BF, 0, 0, /* 0xA0 */
+ 0, 0xE9C1, 0, 0, 0xC1F1, 0, 0, 0xC8B6, /* 0xB0 */
+ 0, 0, 0, 0xE9BD, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE9C2, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE9C3, 0, 0xE9B3, 0, 0xE9B6, 0, /* 0xC0 */
+ 0xBBB1, 0, 0, 0, 0xE9C0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xBCF7, 0, 0, 0, 0xE9C4, /* 0xD0 */
+ 0xE9C6, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE9CA, 0, 0, /* 0xE0 */
+ 0, 0, 0xE9CE, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xB2DB, 0, 0xE9C8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xB7AE, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE9CB, /* 0x10 */
+ 0xE9CC, 0, 0, 0, 0, 0, 0, 0xD5C1, /* 0x10 */
+ 0, 0xC4A3, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xE9D8, 0, 0xBAE1, 0, 0, 0, 0, 0xE9C9, /* 0x20 */
+ 0, 0xD3A3, 0, 0, 0, 0xE9D4, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE9D7, 0xE9D0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE9CF, 0, 0, 0xC7C1, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xE9D2, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE9D9, 0xB3C8, 0, 0xE9D3, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCFF0, 0, 0, 0, 0xE9CD, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xB3F7, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xE9D6, 0, 0, 0xE9DA, 0, 0, 0, /* 0x70 */
+ 0xCCB4, 0, 0, 0, 0xCFAD, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xE9D5, 0, /* 0x80 */
+ 0xE9DC, 0xE9DB, 0, 0, 0, 0, 0, 0xE9DE, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xE9D1, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE9DD, 0, 0xE9DF, 0xC3CA /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7B7, 0xB4CE, 0xBBB6, 0xD0C0, 0xECA3, 0, 0, 0xC5B7, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xD3FB, 0, 0, 0, 0, 0xECA4, /* 0x30 */
+ 0, 0xECA5, 0xC6DB, 0, 0, 0, 0xBFEE, 0, /* 0x30 */
+ 0, 0, 0, 0xECA6, 0, 0, 0xECA7, 0xD0AA, /* 0x40 */
+ 0, 0xC7B8, 0, 0, 0xB8E8, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xECA8, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xD6B9, 0xD5FD, 0xB4CB, 0xB2BD, 0xCEE4, 0xC6E7, /* 0x60 */
+ 0, 0, 0xCDE1, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB4F5, 0, 0xCBC0, 0xBCDF, 0, 0, 0, /* 0x70 */
+ 0, 0xE9E2, 0xE9E3, 0xD1EA, 0xE9E5, 0, 0xB4F9, 0xE9E4, /* 0x80 */
+ 0, 0xD1B3, 0xCAE2, 0xB2D0, 0, 0xE9E8, 0, 0, /* 0x80 */
+ 0, 0, 0xE9E6, 0xE9E7, 0, 0, 0xD6B3, 0, /* 0x90 */
+ 0, 0, 0xE9E9, 0xE9EA, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xE9EB, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE9EC, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xECAF, 0xC5B9, 0xB6CE, 0, 0xD2F3, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB5EE, /* 0xB0 */
+ 0, 0xBBD9, 0xECB1, 0, 0, 0xD2E3, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xCEE3, 0, 0xC4B8, 0, 0xC3BF, /* 0xC0 */
+ 0, 0, 0xB6BE, 0xD8B9, 0xB1C8, 0xB1CF, 0xB1D1, 0xC5FE, /* 0xD0 */
+ 0, 0xB1D0, 0, 0xC3AB, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xD5B1, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xEBA4, 0xBAC1, 0, 0, 0, 0xCCBA, /* 0xE0 */
+ 0, 0, 0, 0xEBA5, 0, 0xEBA7, 0, 0, /* 0xF0 */
+ 0, 0xEBA8, 0, 0, 0, 0xEBA6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEBA9, 0xEBAB, 0xEBAA, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xEBAC, 0, 0xCACF, /* 0x00 */
+ 0xD8B5, 0xC3F1, 0, 0xC3A5, 0xC6F8, 0xEBAD, 0xC4CA, 0, /* 0x10 */
+ 0xEBAE, 0xEBAF, 0xEBB0, 0xB7D5, 0, 0, 0, 0xB7FA, /* 0x10 */
+ 0, 0xEBB1, 0xC7E2, 0, 0xEBB3, 0, 0xBAA4, 0xD1F5, /* 0x20 */
+ 0xB0B1, 0xEBB2, 0xEBB4, 0, 0, 0, 0xB5AA, 0xC2C8, /* 0x20 */
+ 0xC7E8, 0, 0xEBB5, 0, 0xCBAE, 0xE3DF, 0, 0, /* 0x30 */
+ 0xD3C0, 0, 0, 0, 0, 0xD9DB, 0, 0, /* 0x30 */
+ 0xCDA1, 0xD6AD, 0xC7F3, 0, 0, 0, 0xD9E0, 0xBBE3, /* 0x40 */
+ 0, 0xBABA, 0xE3E2, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xCFAB, 0, 0, 0, 0xE3E0, 0xC9C7, 0, 0xBAB9, /* 0x50 */
+ 0, 0, 0, 0xD1B4, 0xE3E1, 0xC8EA, 0xB9AF, 0xBDAD, /* 0x50 */
+ 0xB3D8, 0xCEDB, 0, 0, 0xCCC0, 0, 0, 0, /* 0x60 */
+ 0xE3E8, 0xE3E9, 0xCDF4, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xCCAD, 0, 0xBCB3, 0, 0xE3EA, 0, 0xE3EB, 0, /* 0x70 */
+ 0, 0xD0DA, 0, 0, 0, 0xC6FB, 0xB7DA, 0, /* 0x70 */
+ 0, 0xC7DF, 0xD2CA, 0xCED6, 0, 0xE3E4, 0xE3EC, 0, /* 0x80 */
+ 0xC9F2, 0xB3C1, 0, 0, 0xE3E7, 0, 0, 0xC6E3, /* 0x80 */
+ 0xE3E5, 0, 0, 0xEDB3, 0xE3E6, 0, 0, 0, /* 0x90 */
+ 0, 0xC9B3, 0, 0xC5E6, 0, 0, 0, 0xB9B5, /* 0x90 */
+ 0, 0xC3BB, 0, 0xE3E3, 0xC5BD, 0xC1A4, 0xC2D9, 0xB2D7, /* 0xA0 */
+ 0, 0xE3ED, 0xBBA6, 0xC4AD, 0, 0xE3F0, 0xBEDA, 0, /* 0xA0 */
+ 0, 0xE3FB, 0xE3F5, 0xBAD3, 0, 0, 0, 0, /* 0xB0 */
+ 0xB7D0, 0xD3CD, 0, 0xD6CE, 0xD5D3, 0xB9C1, 0xD5B4, 0xD1D8, /* 0xB0 */
+ 0, 0, 0, 0, 0xD0B9, 0xC7F6, 0, 0, /* 0xC0 */
+ 0, 0xC8AA, 0xB2B4, 0, 0xC3DA, 0, 0, 0, /* 0xC0 */
+ 0xE3EE, 0, 0, 0xE3FC, 0xE3EF, 0xB7A8, 0xE3F7, 0xE3F4, /* 0xD0 */
+ 0, 0, 0, 0xB7BA, 0, 0, 0xC5A2, 0, /* 0xD0 */
+ 0xE3F6, 0xC5DD, 0xB2A8, 0xC6FC, 0, 0xC4E0, 0, 0, /* 0xE0 */
+ 0xD7A2, 0, 0xC0E1, 0xE3F9, 0, 0, 0xE3FA, 0xE3FD, /* 0xE0 */
+ 0xCCA9, 0xE3F3, 0, 0xD3BE, 0, 0xB1C3, 0xEDB4, 0xE3F1, /* 0xF0 */
+ 0xE3F2, 0, 0xE3F8, 0xD0BA, 0xC6C3, 0xD4F3, 0xE3FE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDE0, 0, 0, 0xE4A7, 0, 0, 0xE4A6, /* 0x00 */
+ 0, 0, 0, 0xD1F3, 0xE4A3, 0, 0xE4A9, 0, /* 0x00 */
+ 0, 0, 0xC8F7, 0, 0, 0, 0, 0xCFB4, /* 0x10 */
+ 0, 0xE4A8, 0xE4AE, 0xC2E5, 0, 0, 0xB6B4, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xBDF2, 0, 0xE4A2, /* 0x20 */
+ 0, 0, 0xBAE9, 0xE4AA, 0, 0, 0xE4AC, 0, /* 0x20 */
+ 0, 0xB6FD, 0xD6DE, 0xE4B2, 0, 0xE4AD, 0, 0, /* 0x30 */
+ 0, 0xE4A1, 0, 0xBBEE, 0xCDDD, 0xC7A2, 0xC5C9, 0, /* 0x30 */
+ 0, 0xC1F7, 0, 0xE4A4, 0, 0xC7B3, 0xBDAC, 0xBDBD, /* 0x40 */
+ 0xE4A5, 0, 0xD7C7, 0xB2E2, 0, 0xE4AB, 0xBCC3, 0xE4AF, /* 0x40 */
+ 0, 0xBBEB, 0xE4B0, 0xC5A8, 0xE4B1, 0, 0, 0, /* 0x50 */
+ 0, 0xD5E3, 0xBFA3, 0, 0xE4BA, 0, 0xE4B7, 0, /* 0x50 */
+ 0xE4BB, 0, 0, 0xE4BD, 0, 0, 0xC6D6, 0, /* 0x60 */
+ 0, 0xBAC6, 0xC0CB, 0, 0, 0, 0xB8A1, 0xE4B4, /* 0x60 */
+ 0, 0, 0, 0, 0xD4A1, 0, 0, 0xBAA3, /* 0x70 */
+ 0xBDFE, 0, 0, 0, 0xE4BC, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xCDBF, 0, 0, 0xC4F9, 0, 0, /* 0x80 */
+ 0xCFFB, 0xC9E6, 0, 0, 0xD3BF, 0, 0xCFD1, 0, /* 0x80 */
+ 0, 0xE4B3, 0, 0xE4B8, 0xE4B9, 0xCCE9, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xCCCE, 0, 0xC0D4, 0xE4B5, 0xC1B0, /* 0x90 */
+ 0xE4B6, 0xCED0, 0, 0xBBC1, 0xB5D3, 0, 0xC8F3, 0xBDA7, /* 0xA0 */
+ 0xD5C7, 0xC9AC, 0xB8A2, 0xE4CA, 0, 0, 0xE4CC, 0xD1C4, /* 0xA0 */
+ 0, 0, 0xD2BA, 0, 0, 0xBAAD, 0, 0, /* 0xB0 */
+ 0xBAD4, 0, 0, 0, 0, 0, 0, 0xE4C3, /* 0xB0 */
+ 0xB5ED, 0, 0, 0, 0xD7CD, 0xE4C0, 0xCFFD, 0xE4BF, /* 0xC0 */
+ 0, 0, 0, 0xC1DC, 0xCCCA, 0, 0, 0, /* 0xC0 */
+ 0, 0xCAE7, 0, 0, 0, 0, 0xC4D7, 0, /* 0xD0 */
+ 0xCCD4, 0xE4C8, 0, 0, 0, 0xE4C7, 0xE4C1, 0, /* 0xD0 */
+ 0xE4C4, 0xB5AD, 0, 0, 0xD3D9, 0, 0xE4C6, 0, /* 0xE0 */
+ 0, 0, 0, 0xD2F9, 0xB4E3, 0, 0xBBB4, 0, /* 0xE0 */
+ 0, 0xC9EE, 0, 0xB4BE, 0, 0, 0, 0xBBEC, /* 0xF0 */
+ 0, 0xD1CD, 0, 0xCCED, 0xEDB5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7E5, 0, 0, /* 0x00 */
+ 0, 0, 0xD4A8, 0, 0xE4CB, 0xD7D5, 0xE4C2, 0, /* 0x00 */
+ 0xBDA5, 0xE4C5, 0, 0, 0xD3E6, 0, 0xE4C9, 0xC9F8, /* 0x10 */
+ 0, 0, 0xE4BE, 0, 0, 0xD3E5, 0, 0, /* 0x10 */
+ 0xC7FE, 0xB6C9, 0, 0xD4FC, 0xB2B3, 0xE4D7, 0, 0, /* 0x20 */
+ 0, 0xCEC2, 0, 0xE4CD, 0, 0xCEBC, 0, 0xB8DB, /* 0x20 */
+ 0, 0, 0xE4D6, 0, 0xBFCA, 0, 0, 0, /* 0x30 */
+ 0xD3CE, 0, 0xC3EC, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xC5C8, 0xE4D8, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xCDC4, 0xE4CF, 0, /* 0x40 */
+ 0, 0, 0, 0xE4D4, 0xE4D5, 0, 0xBAFE, 0, /* 0x50 */
+ 0xCFE6, 0, 0, 0xD5BF, 0, 0, 0, 0xE4D2, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE4D0, 0, 0, 0xE4CE, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xCDE5, 0xCAAA, /* 0x70 */
+ 0, 0, 0, 0xC0A3, 0, 0xBDA6, 0xE4D3, 0, /* 0x80 */
+ 0, 0xB8C8, 0, 0, 0, 0, 0, 0xE4E7, /* 0x80 */
+ 0xD4B4, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xE4DB, 0, 0, 0, 0xC1EF, 0, 0, 0xE4E9, /* 0x90 */
+ 0, 0, 0xD2E7, 0, 0, 0xE4DF, 0, 0xE4E0, /* 0xA0 */
+ 0, 0, 0xCFAA, 0, 0, 0, 0, 0xCBDD, /* 0xA0 */
+ 0, 0xE4DA, 0xE4D1, 0, 0xE4E5, 0, 0xC8DC, 0xE4E3, /* 0xB0 */
+ 0, 0, 0xC4E7, 0xE4E2, 0, 0xE4E1, 0, 0, /* 0xB0 */
+ 0, 0xB3FC, 0xE4E8, 0, 0, 0, 0, 0xB5E1, /* 0xC0 */
+ 0, 0, 0, 0xD7CC, 0, 0, 0, 0xE4E6, /* 0xC0 */
+ 0, 0xBBAC, 0, 0xD7D2, 0xCCCF, 0xEBF8, 0, 0xE4E4, /* 0xD0 */
+ 0, 0, 0xB9F6, 0, 0, 0, 0xD6CD, 0xE4D9, /* 0xD0 */
+ 0xE4DC, 0xC2FA, 0xE4DE, 0, 0xC2CB, 0xC0C4, 0xC2D0, 0, /* 0xE0 */
+ 0xB1F5, 0xCCB2, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xB5CE, 0, 0, 0, /* 0xF0 */
+ 0, 0xE4EF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6AF, 0, 0, 0, 0xC6E1, 0, /* 0x00 */
+ 0, 0xE4F5, 0, 0, 0, 0, 0, 0xC2A9, /* 0x00 */
+ 0, 0, 0, 0xC0EC, 0xD1DD, 0xE4EE, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xC4AE, 0, 0, 0, 0xE4ED, 0, 0, 0, /* 0x20 */
+ 0, 0xE4F6, 0xE4F4, 0xC2FE, 0, 0xE4DD, 0, 0xE4F0, /* 0x20 */
+ 0, 0xCAFE, 0, 0xD5C4, 0, 0, 0xE4F1, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xD1FA, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE4EB, 0xE4EC, /* 0x40 */
+ 0, 0, 0, 0xE4F2, 0, 0xCEAB, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xC5CB, 0, 0, 0, 0xC7B1, 0, 0xC2BA, 0, /* 0x50 */
+ 0, 0, 0xE4EA, 0, 0, 0, 0xC1CA, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xCCB6, 0xB3B1, 0, /* 0x60 */
+ 0, 0, 0xE4FB, 0, 0xE4F3, 0, 0, 0, /* 0x70 */
+ 0xE4FA, 0, 0xE4FD, 0, 0xE4FC, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xB3CE, 0, 0, 0, /* 0x80 */
+ 0xB3BA, 0xE4F7, 0, 0, 0xE4F9, 0xE4F8, 0xC5EC, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xC0BD, 0, 0, 0, /* 0x90 */
+ 0, 0xD4E8, 0, 0, 0, 0, 0, 0xE5A2, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xB0C4, 0, 0, 0xE5A4, 0, /* 0xB0 */
+ 0, 0xE5A3, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xBCA4, 0, 0xE5A5, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE5A1, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE4FE, 0xB1F4, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xE5A8, 0, /* 0xD0 */
+ 0xE5A9, 0xE5A6, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xE5A7, 0xE5AA /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6D9, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xE5AB, 0xE5AD, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE5AC, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE5AF, 0, 0, /* 0x30 */
+ 0, 0xE5AE, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xB9E0, 0, 0, 0xE5B0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xE5B1, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xBBF0, 0xECE1, 0xC3F0, 0, 0xB5C6, /* 0x60 */
+ 0xBBD2, 0, 0, 0, 0, 0xC1E9, 0xD4EE, 0, /* 0x70 */
+ 0xBEC4, 0, 0, 0, 0xD7C6, 0, 0xD4D6, 0xB2D3, /* 0x70 */
+ 0xECBE, 0, 0, 0, 0, 0xEAC1, 0, 0, /* 0x80 */
+ 0, 0xC2AF, 0xB4B6, 0, 0, 0, 0xD1D7, 0, /* 0x80 */
+ 0, 0, 0xB3B4, 0, 0xC8B2, 0xBFBB, 0xECC0, 0, /* 0x90 */
+ 0, 0xD6CB, 0, 0, 0xECBF, 0xECC1, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xECC5, 0xBEE6, 0xCCBF, 0xC5DA, 0xBEBC, /* 0xA0 */
+ 0, 0xECC6, 0, 0xB1FE, 0, 0, 0, 0xECC4, /* 0xB0 */
+ 0xD5A8, 0xB5E3, 0, 0xECC2, 0xC1B6, 0xB3E3, 0, 0, /* 0xB0 */
+ 0xECC3, 0xCBB8, 0xC0C3, 0xCCFE, 0, 0, 0, 0, /* 0xC0 */
+ 0xC1D2, 0, 0xECC8, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xBAE6, 0xC0D3, 0, 0xD6F2, 0, 0, 0, 0xD1CC, /* 0xD0 */
+ 0, 0, 0, 0, 0xBFBE, 0, 0xB7B3, 0xC9D5, /* 0xE0 */
+ 0xECC7, 0xBBE2, 0, 0xCCCC, 0xBDFD, 0xC8C8, 0, 0xCFA9, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCDE9, /* 0xF0 */
+ 0, 0xC5EB, 0, 0, 0, 0xB7E9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xD1C9, 0xBAB8, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xECC9, 0, 0, 0xECCA, 0, 0xBBC0, 0xECCB, 0, /* 0x10 */
+ 0xECE2, 0xB1BA, 0xB7D9, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xBDB9, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xECCC, /* 0x20 */
+ 0xD1E6, 0xECCD, 0, 0, 0, 0, 0xC8BB, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xECD1, 0, 0, /* 0x40 */
+ 0, 0, 0xECD3, 0, 0xBBCD, 0, 0xBCE5, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xECCF, 0, 0xC9B7, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xC3BA, 0, 0xECE3, 0xD5D5, /* 0x60 */
+ 0xECD0, 0, 0, 0, 0, 0, 0xD6F3, 0, /* 0x60 */
+ 0, 0, 0xECD2, 0xECCE, 0, 0, 0, 0, /* 0x70 */
+ 0xECD4, 0, 0xECD5, 0, 0, 0xC9BF, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xCFA8, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD0DC, 0, 0, 0, 0, 0xD1AC, /* 0x80 */
+ 0, 0, 0, 0, 0xC8DB, 0, 0, 0, /* 0x90 */
+ 0xECD6, 0xCEF5, 0, 0, 0, 0, 0, 0xCAEC, /* 0x90 */
+ 0xECDA, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xECD9, 0, 0, 0, 0xB0BE, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xECD7, 0, 0xECD8, 0, 0, /* 0xB0 */
+ 0, 0xECE4, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xC8BC, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xC1C7, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xECDC, 0xD1E0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xECDB, 0, 0, 0, 0, 0xD4EF, 0, 0xECDD, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xDBC6, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xECDE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB1AC, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xECDF, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xECE0, 0, 0xD7A6, 0, 0xC5C0, 0, 0, 0, /* 0x20 */
+ 0xEBBC, 0xB0AE, 0, 0, 0, 0xBEF4, 0xB8B8, 0xD2AF, /* 0x30 */
+ 0xB0D6, 0xB5F9, 0, 0xD8B3, 0, 0xCBAC, 0, 0xE3DD, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC6AC, /* 0x40 */
+ 0xB0E6, 0, 0, 0, 0xC5C6, 0xEBB9, 0, 0, /* 0x40 */
+ 0, 0, 0xEBBA, 0, 0, 0, 0xEBBB, 0, /* 0x50 */
+ 0, 0xD1C0, 0, 0xC5A3, 0, 0xEAF2, 0, 0xC4B2, /* 0x50 */
+ 0, 0xC4B5, 0xC0CE, 0, 0, 0, 0xEAF3, 0xC4C1, /* 0x60 */
+ 0, 0xCEEF, 0, 0, 0, 0, 0xEAF0, 0xEAF4, /* 0x60 */
+ 0, 0, 0xC9FC, 0, 0, 0xC7A3, 0, 0, /* 0x70 */
+ 0, 0xCCD8, 0xCEFE, 0, 0, 0, 0xEAF5, 0xEAF6, /* 0x70 */
+ 0xCFAC, 0xC0E7, 0, 0, 0xEAF7, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xB6BF, 0xEAF8, 0, 0xEAF9, 0, 0xEAFA, /* 0x80 */
+ 0, 0, 0xEAFB, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEAF1, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xC8AE, 0xE1EB, 0, 0xB7B8, /* 0xA0 */
+ 0xE1EC, 0, 0, 0, 0xE1ED, 0, 0xD7B4, 0xE1EE, /* 0xB0 */
+ 0xE1EF, 0xD3CC, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE1F1, 0xBFF1, 0xE1F0, 0xB5D2, 0, 0, 0, /* 0xC0 */
+ 0xB1B7, 0, 0, 0, 0, 0xE1F3, 0xE1F2, 0, /* 0xC0 */
+ 0xBAFC, 0, 0xE1F4, 0, 0, 0, 0, 0xB9B7, /* 0xD0 */
+ 0, 0xBED1, 0, 0, 0, 0, 0xC4FC, 0, /* 0xD0 */
+ 0xBADD, 0xBDC6, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE1F5, 0xE1F7, 0, 0, 0xB6C0, 0xCFC1, 0xCAA8, 0xE1F6, /* 0xE0 */
+ 0xD5F8, 0xD3FC, 0xE1F8, 0xE1FC, 0xE1F9, 0, 0, 0xE1FA, /* 0xF0 */
+ 0xC0EA, 0, 0xE1FE, 0xE2A1, 0xC0C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1FB, 0, 0xE1FD, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE2A5, 0, 0, 0, 0xC1D4, 0, /* 0x00 */
+ 0, 0, 0, 0xE2A3, 0, 0xE2A8, 0xB2FE, 0xE2A2, /* 0x10 */
+ 0, 0, 0, 0xC3CD, 0xB2C2, 0xE2A7, 0xE2A6, 0, /* 0x10 */
+ 0, 0xE2A4, 0xE2A9, 0, 0, 0xE2AB, 0, 0, /* 0x20 */
+ 0, 0xD0C9, 0xD6ED, 0xC3A8, 0xE2AC, 0, 0xCFD7, 0, /* 0x20 */
+ 0, 0xE2AE, 0, 0, 0xBAEF, 0, 0, 0xE9E0, /* 0x30 */
+ 0xE2AD, 0xE2AA, 0, 0, 0, 0, 0xBBAB, 0xD4B3, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE2B0, 0, 0, /* 0x40 */
+ 0xE2AF, 0, 0xE9E1, 0, 0, 0, 0, 0xE2B1, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE2B2, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE2B3, 0xCCA1, 0, 0xE2B4, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE2B5, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xD0FE, 0, 0, 0xC2CA, /* 0x80 */
+ 0, 0xD3F1, 0, 0xCDF5, 0, 0, 0xE7E0, 0, /* 0x80 */
+ 0, 0xE7E1, 0, 0, 0, 0, 0xBEC1, 0, /* 0x90 */
+ 0, 0, 0, 0xC2EA, 0, 0, 0, 0xE7E4, /* 0x90 */
+ 0, 0, 0xE7E3, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xCDE6, 0, 0xC3B5, 0, 0, 0xE7E2, 0xBBB7, /* 0xA0 */
+ 0xCFD6, 0, 0xC1E1, 0xE7E9, 0, 0, 0, 0xE7E8, /* 0xB0 */
+ 0, 0, 0xE7F4, 0xB2A3, 0, 0, 0, 0, /* 0xB0 */
+ 0xE7EA, 0, 0xE7E6, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xE7EC, 0xE7EB, 0xC9BA, 0, 0, 0xD5E4, 0, 0xE7E5, /* 0xC0 */
+ 0xB7A9, 0xE7E7, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE7EE, 0, 0, 0, 0, 0xE7F3, 0, /* 0xD0 */
+ 0xD6E9, 0, 0, 0, 0, 0xE7ED, 0, 0xE7F2, /* 0xE0 */
+ 0, 0xE7F1, 0, 0, 0, 0xB0E0, 0, 0, /* 0xE0 */
+ 0, 0, 0xE7F5 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7F2, 0, 0xC0C5, 0xC0ED, 0, /* 0x00 */
+ 0, 0xC1F0, 0xE7F0, 0, 0, 0, 0, 0xE7F6, /* 0x00 */
+ 0xCBF6, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xE8A2, 0xE8A1, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xD7C1, 0, 0, 0xE7FA, 0xE7F9, 0, /* 0x20 */
+ 0xE7FB, 0, 0xE7F7, 0, 0xE7FE, 0, 0xE7FD, 0, /* 0x20 */
+ 0xE7FC, 0, 0, 0xC1D5, 0xC7D9, 0xC5FD, 0xC5C3, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xC7ED, 0, 0, 0, /* 0x30 */
+ 0, 0xE8A3, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE8A6, 0, 0xE8A5, /* 0x50 */
+ 0, 0xE8A7, 0xBAF7, 0xE7F8, 0xE8A4, 0, 0xC8F0, 0xC9AA, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE8A9, 0, 0, /* 0x60 */
+ 0xB9E5, 0, 0, 0, 0, 0, 0xD1FE, 0xE8A8, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE8AA, 0, /* 0x70 */
+ 0xE8AD, 0xE8AE, 0, 0xC1A7, 0, 0, 0, 0xE8AF, /* 0x80 */
+ 0, 0, 0, 0xE8B0, 0, 0, 0xE8AC, 0, /* 0x80 */
+ 0xE8B4, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE8AB, 0, 0xE8B1, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8B5, /* 0xA0 */
+ 0xE8B2, 0xE8B3, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE8B7, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE8B6, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xB9CF, 0, 0xF0AC, 0, /* 0xD0 */
+ 0xF0AD, 0, 0xC6B0, 0xB0EA, 0xC8BF, 0, 0xCDDF, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xCECD, 0xEAB1, /* 0xE0 */
+ 0, 0, 0, 0, 0xEAB2, 0, 0xC6BF, 0xB4C9, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEAB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD5E7, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xDDF9, 0, 0xEAB4, /* 0x00 */
+ 0, 0xEAB5, 0, 0xEAB6, 0, 0, 0, 0, /* 0x10 */
+ 0xB8CA, 0xDFB0, 0xC9F5, 0, 0xCCF0, 0, 0, 0xC9FA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xC9FB, 0, 0, /* 0x20 */
+ 0xD3C3, 0xCBA6, 0, 0xB8A6, 0xF0AE, 0xB1C2, 0, 0xE5B8, /* 0x20 */
+ 0xCCEF, 0xD3C9, 0xBCD7, 0xC9EA, 0, 0xB5E7, 0, 0xC4D0, /* 0x30 */
+ 0xB5E9, 0, 0xEEAE, 0xBBAD, 0, 0, 0xE7DE, 0, /* 0x30 */
+ 0xEEAF, 0, 0, 0, 0, 0xB3A9, 0, 0, /* 0x40 */
+ 0xEEB2, 0, 0, 0xEEB1, 0xBDE7, 0, 0xEEB0, 0xCEB7, /* 0x40 */
+ 0, 0, 0, 0, 0xC5CF, 0, 0, 0, /* 0x50 */
+ 0, 0xC1F4, 0xDBCE, 0xEEB3, 0xD0F3, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xC2D4, 0xC6E8, 0, /* 0x60 */
+ 0, 0, 0xB7AC, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xEEB4, 0, 0xB3EB, 0, 0, 0, /* 0x70 */
+ 0xBBFB, 0xEEB5, 0, 0, 0, 0, 0, 0xE7DC, /* 0x70 */
+ 0, 0, 0, 0xEEB6, 0, 0, 0xBDAE, 0, /* 0x80 */
+ 0, 0, 0, 0xF1E2, 0, 0, 0, 0xCAE8, /* 0x80 */
+ 0, 0xD2C9, 0xF0DA, 0, 0xF0DB, 0, 0xF0DC, 0xC1C6, /* 0x90 */
+ 0, 0xB8ED, 0xBECE, 0, 0, 0xF0DE, 0, 0xC5B1, /* 0x90 */
+ 0xF0DD, 0xD1F1, 0, 0xF0E0, 0xB0CC, 0xBDEA, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xD2DF, 0xF0DF, 0, 0xB4AF, 0xB7E8, /* 0xA0 */
+ 0xF0E6, 0xF0E5, 0xC6A3, 0xF0E1, 0xF0E2, 0xB4C3, 0, 0, /* 0xB0 */
+ 0xF0E3, 0xD5EE, 0, 0, 0xCCDB, 0xBED2, 0xBCB2, 0, /* 0xB0 */
+ 0, 0, 0xF0E8, 0xF0E7, 0xF0E4, 0xB2A1, 0, 0xD6A2, /* 0xC0 */
+ 0xD3B8, 0xBEB7, 0xC8AC, 0, 0, 0xF0EA, 0, 0, /* 0xC0 */
+ 0, 0, 0xD1F7, 0, 0xD6CC, 0xBADB, 0xF0E9, 0, /* 0xD0 */
+ 0xB6BB, 0, 0, 0xCDB4, 0, 0, 0xC6A6, 0, /* 0xD0 */
+ 0, 0, 0xC1A1, 0xF0EB, 0xF0EE, 0, 0xF0ED, 0xF0F0, /* 0xE0 */
+ 0xF0EC, 0, 0xBBBE, 0xF0EF, 0, 0, 0, 0, /* 0xE0 */
+ 0xCCB5, 0xF0F2, 0, 0, 0xB3D5, 0, 0, 0, /* 0xF0 */
+ 0, 0xB1D4, 0, 0, 0xF0F3, 0, 0, 0xF0F4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0F6, 0xB4E1, 0, 0xF0F1, 0, 0xF0F7, 0, 0, /* 0x00 */
+ 0, 0, 0xF0FA, 0, 0xF0F8, 0, 0, 0, /* 0x00 */
+ 0xF0F5, 0, 0, 0, 0, 0xF0FD, 0, 0xF0F9, /* 0x10 */
+ 0xF0FC, 0xF0FE, 0, 0xF1A1, 0, 0, 0, 0xCEC1, /* 0x10 */
+ 0xF1A4, 0, 0xF1A3, 0, 0xC1F6, 0xF0FB, 0xCADD, 0, /* 0x20 */
+ 0, 0xB4F1, 0xB1F1, 0xCCB1, 0, 0xF1A6, 0, 0, /* 0x20 */
+ 0xF1A7, 0, 0, 0xF1AC, 0xD5CE, 0xF1A9, 0, 0, /* 0x30 */
+ 0xC8B3, 0, 0, 0, 0xF1A2, 0, 0xF1AB, 0xF1A8, /* 0x30 */
+ 0xF1A5, 0, 0, 0xF1AA, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xB0A9, 0xF1AD, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF1AF, 0, 0xF1B1, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xF1B0, 0, 0xF1AE, 0, /* 0x50 */
+ 0, 0, 0, 0xD1A2, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xF1B2, 0, 0, 0, 0xF1B3, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xB9EF, 0, 0, 0xB5C7, 0, 0xB0D7, 0xB0D9, 0, /* 0x70 */
+ 0, 0, 0xD4ED, 0, 0xB5C4, 0, 0xBDD4, 0xBBCA, /* 0x80 */
+ 0xF0A7, 0, 0, 0xB8DE, 0, 0, 0xF0A8, 0, /* 0x80 */
+ 0, 0xB0A8, 0, 0xF0A9, 0, 0, 0xCDEE, 0, /* 0x90 */
+ 0, 0xF0AA, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF0AB, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xC6A4, 0, /* 0xA0 */
+ 0, 0xD6E5, 0xF1E4, 0, 0xF1E5, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC3F3, /* 0xB0 */
+ 0, 0, 0xD3DB, 0, 0, 0xD6D1, 0xC5E8, 0, /* 0xC0 */
+ 0xD3AF, 0, 0xD2E6, 0, 0, 0xEEC1, 0xB0BB, 0xD5B5, /* 0xC0 */
+ 0xD1CE, 0xBCE0, 0xBAD0, 0, 0xBFF8, 0, 0xB8C7, 0xB5C1, /* 0xD0 */
+ 0xC5CC, 0, 0, 0xCAA2, 0, 0, 0, 0xC3CB, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xEEC2, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xC4BF, 0xB6A2, /* 0xE0 */
+ 0, 0xEDEC, 0xC3A4, 0, 0xD6B1, 0, 0, 0, /* 0xF0 */
+ 0xCFE0, 0xEDEF, 0, 0, 0xC5CE, 0, 0xB6DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCAA1, 0, 0, 0xEDED, 0, 0, 0xEDF0, /* 0x00 */
+ 0xEDF1, 0xC3BC, 0, 0xBFB4, 0, 0xEDEE, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xEDF4, 0xEDF2, 0, 0, 0, 0, 0xD5E6, /* 0x10 */
+ 0xC3DF, 0, 0xEDF3, 0, 0, 0, 0xEDF6, 0, /* 0x20 */
+ 0xD5A3, 0xD1A3, 0, 0, 0, 0xEDF5, 0, 0xC3D0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xEDF7, 0xBFF4, 0xBEEC, /* 0x30 */
+ 0xEDF8, 0, 0xCCF7, 0, 0xD1DB, 0, 0, 0, /* 0x30 */
+ 0xD7C5, 0xD5F6, 0, 0xEDFC, 0, 0, 0, 0xEDFB, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEDF9, 0xEDFA, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xEDFD, 0xBEA6, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCBAF, 0xEEA1, 0xB6BD, 0, 0xEEA2, 0xC4C0, 0, /* 0x60 */
+ 0xEDFE, 0, 0, 0xBDDE, 0xB2C7, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB6C3, 0, 0, 0, 0xEEA5, 0xD8BA, 0xEEA3, /* 0x70 */
+ 0xEEA6, 0, 0, 0, 0xC3E9, 0xB3F2, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xEEA7, 0xEEA4, 0xCFB9, 0, /* 0x80 */
+ 0, 0xEEA8, 0xC2F7, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEEA9, /* 0x90 */
+ 0xEEAA, 0, 0xDEAB, 0, 0, 0xC6B3, 0, 0xC7C6, /* 0xA0 */
+ 0, 0xD6F5, 0xB5C9, 0, 0xCBB2, 0, 0, 0, /* 0xA0 */
+ 0xEEAB, 0, 0, 0xCDAB, 0, 0xEEAC, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xD5B0, 0, 0xEEAD, 0, 0xF6C4, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xDBC7, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB4A3, /* 0xD0 */
+ 0, 0, 0, 0xC3AC, 0xF1E6, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xCAB8, 0xD2D3, 0, 0xD6AA, 0, 0xEFF2, /* 0xE0 */
+ 0, 0xBED8, 0, 0xBDC3, 0xEFF3, 0xB6CC, 0xB0AB, 0, /* 0xE0 */
+ 0, 0, 0, 0xCAAF, 0, 0, 0xEDB6, 0, /* 0xF0 */
+ 0xEDB7, 0, 0, 0, 0, 0xCEF9, 0xB7AF, 0xBFF3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDB8, 0xC2EB, 0xC9B0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xEDB9, 0, 0, 0xC6F6, 0xBFB3, 0, 0, /* 0x00 */
+ 0, 0xEDBC, 0xC5F8, 0, 0xD1D0, 0, 0xD7A9, 0xEDBA, /* 0x10 */
+ 0xEDBB, 0, 0xD1E2, 0, 0xEDBF, 0xEDC0, 0, 0xEDC4, /* 0x10 */
+ 0, 0, 0, 0xEDC8, 0, 0xEDC6, 0xEDCE, 0xD5E8, /* 0x20 */
+ 0, 0xEDC9, 0, 0, 0xEDC7, 0xEDBE, 0, 0, /* 0x20 */
+ 0xC5E9, 0, 0, 0, 0xC6C6, 0, 0, 0xC9E9, /* 0x30 */
+ 0xD4D2, 0xEDC1, 0xEDC2, 0xEDC3, 0xEDC5, 0, 0xC0F9, 0, /* 0x30 */
+ 0xB4A1, 0, 0, 0, 0, 0xB9E8, 0, 0xEDD0, /* 0x40 */
+ 0, 0, 0, 0, 0xEDD1, 0, 0xEDCA, 0, /* 0x40 */
+ 0xEDCF, 0, 0xCEF8, 0, 0, 0xCBB6, 0xEDCC, 0xEDCD, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xCFF5, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xEDD2, 0xC1F2, 0xD3B2, 0xEDCB, 0xC8B7, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xBCEF, /* 0x70 */
+ 0, 0, 0, 0, 0xC5F0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEDD6, /* 0x80 */
+ 0, 0xB5EF, 0, 0, 0xC2B5, 0xB0AD, 0xCBE9, 0, /* 0x80 */
+ 0, 0xB1AE, 0, 0xEDD4, 0, 0, 0, 0xCDEB, /* 0x90 */
+ 0xB5E2, 0, 0xEDD5, 0xEDD3, 0xEDD7, 0, 0, 0xB5FA, /* 0x90 */
+ 0, 0xEDD8, 0, 0xEDD9, 0, 0xEDDC, 0, 0xB1CC, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xC5F6, 0xBCEE, 0xEDDA, 0xCCBC, 0xB2EA, 0, 0, 0, /* 0xB0 */
+ 0, 0xEDDB, 0, 0, 0, 0, 0xC4EB, 0, /* 0xB0 */
+ 0, 0xB4C5, 0, 0, 0, 0xB0F5, 0, 0, /* 0xC0 */
+ 0, 0xEDDF, 0xC0DA, 0xB4E8, 0, 0, 0, 0, /* 0xC0 */
+ 0xC5CD, 0, 0, 0, 0xEDDD, 0xBFC4, 0, 0, /* 0xD0 */
+ 0, 0xEDDE, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xC4A5, 0, 0, 0, 0xEDE0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xEDE1, 0, 0xEDE3, 0, 0, 0xC1D7, /* 0xF0 */
+ 0, 0, 0xBBC7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDB8, 0, 0, 0, 0xEDE2, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xEDE4, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xEDE6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xEDE5, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xEDE7, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xCABE, 0xECEA, 0xC0F1, 0, 0xC9E7, 0, /* 0x30 */
+ 0xECEB, 0xC6EE, 0, 0, 0, 0, 0xECEC, 0, /* 0x40 */
+ 0xC6ED, 0xECED, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xECF0, 0, 0, 0xD7E6, 0xECF3, /* 0x50 */
+ 0, 0, 0xECF1, 0xECEE, 0xECEF, 0xD7A3, 0xC9F1, 0xCBEE, /* 0x50 */
+ 0xECF4, 0, 0xECF2, 0, 0, 0xCFE9, 0, 0xECF6, /* 0x60 */
+ 0xC6B1, 0, 0, 0, 0, 0xBCC0, 0, 0xECF5, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB5BB, /* 0x70 */
+ 0xBBF6, 0, 0xECF7, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xD9F7, 0xBDFB, 0, 0, 0xC2BB, 0xECF8, 0, 0, /* 0x80 */
+ 0, 0, 0xECF9, 0, 0, 0, 0, 0xB8A3, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xECFA, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xECFB, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xECFC, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xD3ED, 0xD8AE, 0xC0EB, 0, 0xC7DD, 0xBACC, 0, /* 0xB0 */
+ 0xD0E3, 0xCBBD, 0, 0xCDBA, 0, 0, 0xB8D1, 0, /* 0xC0 */
+ 0, 0xB1FC, 0, 0xC7EF, 0, 0xD6D6, 0, 0, /* 0xC0 */
+ 0, 0xBFC6, 0xC3EB, 0, 0, 0xEFF5, 0, 0, /* 0xD0 */
+ 0xC3D8, 0, 0, 0, 0, 0, 0, 0xD7E2, /* 0xD0 */
+ 0, 0, 0, 0xEFF7, 0xB3D3, 0, 0xC7D8, 0xD1ED, /* 0xE0 */
+ 0, 0xD6C8, 0, 0xEFF8, 0, 0xEFF6, 0, 0xBBFD, /* 0xE0 */
+ 0xB3C6, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xBDD5, 0, 0, 0xD2C6, 0, 0xBBE0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFA1, 0, 0xEFFC, 0xEFFB, 0, 0, 0xEFF9, 0, /* 0x00 */
+ 0, 0, 0, 0xB3CC, 0, 0xC9D4, 0xCBB0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xEFFE, 0, 0, 0xB0DE, /* 0x10 */
+ 0, 0, 0xD6C9, 0, 0, 0, 0xEFFD, 0, /* 0x10 */
+ 0xB3ED, 0, 0, 0xF6D5, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xCEC8, 0, 0, 0, 0xF0A2, /* 0x30 */
+ 0, 0xF0A1, 0, 0xB5BE, 0xBCDA, 0xBBFC, 0, 0xB8E5, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xC4C2, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF0A3, 0, 0, 0, 0, 0, 0xCBEB, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xF0A6, 0, 0, 0, 0xD1A8, 0, 0xBEBF, 0xC7EE, /* 0x70 */
+ 0xF1B6, 0xF1B7, 0xBFD5, 0, 0, 0, 0, 0xB4A9, /* 0x70 */
+ 0xF1B8, 0xCDBB, 0, 0xC7D4, 0xD5AD, 0, 0xF1B9, 0, /* 0x80 */
+ 0xF1BA, 0, 0, 0, 0, 0xC7CF, 0, 0, /* 0x80 */
+ 0, 0xD2A4, 0xD6CF, 0, 0, 0xF1BB, 0xBDD1, 0xB4B0, /* 0x90 */
+ 0xBEBD, 0, 0, 0, 0xB4DC, 0xCED1, 0, 0xBFDF, /* 0x90 */
+ 0xF1BD, 0, 0, 0, 0, 0xBFFA, 0xF1BC, 0, /* 0xA0 */
+ 0xF1BF, 0, 0, 0, 0xF1BE, 0xF1C0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF1C1, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC1FE, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xC1A2, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xCAFA, 0, /* 0xD0 */
+ 0, 0xD5BE, 0, 0, 0, 0, 0xBEBA, 0xBEB9, /* 0xD0 */
+ 0xD5C2, 0, 0, 0xBFA2, 0, 0xCDAF, 0xF1B5, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xBDDF, 0, 0xB6CB, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xD6F1, 0xF3C3, 0, 0, 0xF3C4, 0, 0xB8CD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF3C6, 0xF3C7, 0, 0xB0CA, 0, /* 0x00 */
+ 0xF3C5, 0, 0xF3C9, 0xCBF1, 0, 0, 0, 0xF3CB, /* 0x00 */
+ 0, 0xD0A6, 0, 0, 0xB1CA, 0xF3C8, 0, 0, /* 0x10 */
+ 0, 0xF3CF, 0, 0xB5D1, 0, 0, 0xF3D7, 0, /* 0x10 */
+ 0xF3D2, 0, 0, 0, 0xF3D4, 0xF3D3, 0xB7FB, 0, /* 0x20 */
+ 0xB1BF, 0, 0xF3CE, 0xF3CA, 0xB5DA, 0, 0xF3D0, 0, /* 0x20 */
+ 0, 0xF3D1, 0, 0xF3D5, 0, 0, 0, 0, /* 0x30 */
+ 0xF3CD, 0, 0xBCE3, 0, 0xC1FD, 0, 0xF3D6, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF3DA, 0, 0xF3CC, /* 0x40 */
+ 0, 0xB5C8, 0, 0xBDEE, 0xF3DC, 0, 0, 0xB7A4, /* 0x40 */
+ 0xBFF0, 0xD6FE, 0xCDB2, 0, 0xB4F0, 0, 0xB2DF, 0, /* 0x50 */
+ 0xF3D8, 0, 0xF3D9, 0xC9B8, 0, 0xF3DD, 0, 0, /* 0x50 */
+ 0xF3DE, 0, 0xF3E1, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xF3DF, 0, /* 0x60 */
+ 0, 0xF3E3, 0xF3E2, 0, 0, 0xF3DB, 0, 0xBFEA, /* 0x70 */
+ 0, 0xB3EF, 0, 0xF3E0, 0, 0, 0xC7A9, 0, /* 0x70 */
+ 0xBCF2, 0, 0, 0, 0, 0xF3EB, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xB9BF, 0, 0, /* 0x80 */
+ 0xF3E4, 0, 0, 0, 0xB2AD, 0xBBFE, 0, 0xCBE3, /* 0x90 */
+ 0, 0, 0, 0, 0xF3ED, 0xF3E9, 0, 0, /* 0x90 */
+ 0, 0xB9DC, 0xF3EE, 0, 0, 0, 0xF3E5, 0xF3E6, /* 0xA0 */
+ 0xF3EA, 0xC2E1, 0xF3EC, 0xF3EF, 0xF3E8, 0xBCFD, 0, 0, /* 0xA0 */
+ 0, 0xCFE4, 0, 0, 0xF3F0, 0, 0, 0, /* 0xB0 */
+ 0xF3E7, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xF3F2, 0, 0, 0, 0, 0xD7AD, 0xC6AA, /* 0xC0 */
+ 0, 0, 0, 0, 0xF3F3, 0, 0, 0, /* 0xC0 */
+ 0, 0xF3F1, 0, 0xC2A8, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xB8DD, 0xF3F5, 0, 0, 0xF3F4, 0, 0, /* 0xD0 */
+ 0, 0xB4DB, 0, 0, 0, 0xF3F6, 0xF3F7, 0, /* 0xE0 */
+ 0, 0, 0xF3F8, 0, 0, 0, 0xC0BA, 0, /* 0xE0 */
+ 0, 0xC0E9, 0, 0, 0, 0, 0, 0xC5F1, /* 0xF0 */
+ 0, 0, 0, 0, 0xF3FB, 0, 0xF3FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB4D8, /* 0x00 */
+ 0, 0, 0, 0xF3FE, 0xF3F9, 0, 0, 0xF3FC, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xF3FD, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF4A1, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xF4A3, 0xBBC9, /* 0x20 */
+ 0, 0, 0xF4A2, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xF4A4, 0, 0, 0, 0, 0, 0, 0xB2BE, /* 0x30 */
+ 0xF4A6, 0xF4A5, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xBCAE, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xC3D7, 0xD9E1, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0xC0E0, 0xF4CC, 0xD7D1, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xB7DB, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF4CE, 0xC1A3, 0, 0, 0xC6C9, 0, 0xB4D6, /* 0x90 */
+ 0xD5B3, 0, 0, 0, 0xF4D0, 0xF4CF, 0xF4D1, 0xCBDA, /* 0x90 */
+ 0, 0, 0xF4D2, 0, 0xD4C1, 0xD6E0, 0, 0, /* 0xA0 */
+ 0, 0, 0xB7E0, 0, 0, 0, 0xC1B8, 0, /* 0xA0 */
+ 0, 0xC1BB, 0xF4D3, 0xBEAC, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xB4E2, 0, 0, 0xF4D4, 0xF4D5, 0xBEAB, 0, /* 0xB0 */
+ 0, 0xF4D6, 0, 0, 0, 0xF4DB, 0, 0xF4D7, /* 0xC0 */
+ 0xF4DA, 0, 0xBAFD, 0, 0xF4D8, 0xF4D9, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xB8E2, 0xCCC7, 0xF4DC, /* 0xD0 */
+ 0, 0xB2DA, 0, 0, 0xC3D3, 0, 0, 0xD4E3, /* 0xD0 */
+ 0xBFB7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF4DD, 0, 0, 0, 0, 0, 0, 0xC5B4, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xF4E9, 0, 0, 0xCFB5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xCEC9, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xCBD8, 0, 0xCBF7, 0, 0, 0, 0, 0xBDF4, /* 0x20 */
+ 0, 0, 0, 0xD7CF, 0, 0, 0, 0xC0DB, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xD0F5, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF4EA, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xF4EB, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xF4EC /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x30 */
+ 0xF7E3, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xB7B1, 0, 0, 0, 0, 0, 0xF4ED, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xD7EB, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF4EE, 0, 0, 0, 0xE6F9, /* 0x90 */
+ 0xBEC0, 0xE6FA, 0xBAEC, 0xE6FB, 0xCFCB, 0xE6FC, 0xD4BC, 0xBCB6, /* 0xA0 */
+ 0xE6FD, 0xE6FE, 0xBCCD, 0xC8D2, 0xCEB3, 0xE7A1, 0, 0xB4BF, /* 0xA0 */
+ 0xE7A2, 0xC9B4, 0xB8D9, 0xC4C9, 0, 0xD7DD, 0xC2DA, 0xB7D7, /* 0xB0 */
+ 0xD6BD, 0xCEC6, 0xB7C4, 0, 0, 0xC5A6, 0xE7A3, 0xCFDF, /* 0xB0 */
+ 0xE7A4, 0xE7A5, 0xE7A6, 0xC1B7, 0xD7E9, 0xC9F0, 0xCFB8, 0xD6AF, /* 0xC0 */
+ 0xD6D5, 0xE7A7, 0xB0ED, 0xE7A8, 0xE7A9, 0xC9DC, 0xD2EF, 0xBEAD, /* 0xC0 */
+ 0xE7AA, 0xB0F3, 0xC8DE, 0xBDE1, 0xE7AB, 0xC8C6, 0, 0xE7AC, /* 0xD0 */
+ 0xBBE6, 0xB8F8, 0xD1A4, 0xE7AD, 0xC2E7, 0xBEF8, 0xBDCA, 0xCDB3, /* 0xD0 */
+ 0xE7AE, 0xE7AF, 0xBEEE, 0xD0E5, 0, 0xCBE7, 0xCCD0, 0xBCCC, /* 0xE0 */
+ 0xE7B0, 0xBCA8, 0xD0F7, 0xE7B1, 0, 0xD0F8, 0xE7B2, 0xE7B3, /* 0xE0 */
+ 0xB4C2, 0xE7B4, 0xE7B5, 0xC9FE, 0xCEAC, 0xC3E0, 0xE7B7, 0xB1C1, /* 0xF0 */
+ 0xB3F1, 0, 0xE7B8, 0xE7B9, 0xD7DB, 0xD5C0, 0xE7BA, 0xC2CC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7BA, 0xE7BB, 0xE7BC, 0xE7BD, 0xBCEA, 0xC3E5, 0xC0C2, 0xE7BE, /* 0x00 */
+ 0xE7BF, 0xBCA9, 0, 0xE7C0, 0xE7C1, 0xE7B6, 0xB6D0, 0xE7C2, /* 0x00 */
+ 0, 0xE7C3, 0xE7C4, 0xBBBA, 0xB5DE, 0xC2C6, 0xB1E0, 0xE7C5, /* 0x10 */
+ 0xD4B5, 0xE7C6, 0xB8BF, 0xE7C8, 0xE7C7, 0xB7EC, 0, 0xE7C9, /* 0x10 */
+ 0xB2F8, 0xE7CA, 0xE7CB, 0xE7CC, 0xE7CD, 0xE7CE, 0xE7CF, 0xE7D0, /* 0x20 */
+ 0xD3A7, 0xCBF5, 0xE7D1, 0xE7D2, 0xE7D3, 0xE7D4, 0xC9C9, 0xE7D5, /* 0x20 */
+ 0xE7D6, 0xE7D7, 0xE7D8, 0xE7D9, 0xBDC9, 0xE7DA, 0xF3BE, 0, /* 0x30 */
+ 0xB8D7, 0, 0xC8B1, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xF3BF, 0, 0xF3C0, 0xF3C1, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xB9DE, 0xCDF8, 0, 0, 0xD8E8, 0xBAB1, 0, 0xC2DE, /* 0x50 */
+ 0xEEB7, 0, 0xB7A3, 0, 0, 0, 0, 0xEEB9, /* 0x50 */
+ 0, 0xEEB8, 0xB0D5, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xEEBB, 0xD5D6, 0xD7EF, 0, 0, 0, 0xD6C3, 0, /* 0x60 */
+ 0, 0xEEBD, 0xCAF0, 0, 0xEEBC, 0, 0, 0, /* 0x70 */
+ 0, 0xEEBE, 0, 0, 0, 0, 0xEEC0, 0, /* 0x70 */
+ 0, 0xEEBF, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD1F2, 0, 0xC7BC, 0, 0xC3C0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xB8E1, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xC1E7, 0, 0, 0xF4C6, 0xD0DF, 0xF4C7, /* 0x90 */
+ 0, 0xCFDB, 0, 0, 0xC8BA, 0, 0, 0xF4C8, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF4C9, /* 0xA0 */
+ 0xF4CA, 0, 0xF4CB, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xD9FA, 0xB8FE, 0, 0, 0xE5F1, 0xD3F0, 0, 0xF4E0, /* 0xB0 */
+ 0, 0xCECC, 0, 0, 0, 0xB3E1, 0, 0, /* 0xC0 */
+ 0, 0, 0xF1B4, 0, 0xD2EE, 0, 0xF4E1, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xCFE8, 0xF4E2, 0, 0, /* 0xD0 */
+ 0xC7CC, 0, 0, 0, 0, 0, 0, 0xB5D4, /* 0xD0 */
+ 0xB4E4, 0xF4E4, 0, 0, 0, 0xF4E3, 0xF4E5, 0, /* 0xE0 */
+ 0, 0xF4E6, 0, 0, 0, 0, 0xF4E7, 0, /* 0xE0 */
+ 0xBAB2, 0xB0BF, 0, 0xF4E8, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xB7AD, 0xD2ED /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2AB, 0xC0CF, 0, 0xBFBC, 0xEBA3, 0xD5DF, 0xEAC8, 0, /* 0x00 */
+ 0, 0, 0, 0xF1F3, 0xB6F8, 0xCBA3, 0, 0, /* 0x00 */
+ 0xC4CD, 0, 0xF1E7, 0, 0xF1E8, 0xB8FB, 0xF1E9, 0xBAC4, /* 0x10 */
+ 0xD4C5, 0xB0D2, 0, 0, 0xF1EA, 0, 0, 0, /* 0x10 */
+ 0xF1EB, 0, 0xF1EC, 0, 0, 0xF1ED, 0xF1EE, 0xF1EF, /* 0x20 */
+ 0xF1F1, 0xF1F0, 0xC5D5, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xF1F2, 0, 0xB6FA, 0, 0xF1F4, 0xD2AE, 0xDEC7, /* 0x30 */
+ 0xCBCA, 0, 0, 0xB3DC, 0, 0xB5A2, 0, 0xB9A2, /* 0x30 */
+ 0, 0, 0xC4F4, 0xF1F5, 0, 0, 0xF1F6, 0, /* 0x40 */
+ 0, 0, 0xC1C4, 0xC1FB, 0xD6B0, 0xF1F7, 0, 0, /* 0x40 */
+ 0, 0, 0xF1F8, 0, 0xC1AA, 0, 0, 0, /* 0x50 */
+ 0xC6B8, 0, 0xBEDB, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xF1F9, 0xB4CF, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xF1FA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEDB2, /* 0x70 */
+ 0xEDB1, 0, 0, 0xCBE0, 0xD2DE, 0, 0xCBC1, 0xD5D8, /* 0x80 */
+ 0, 0xC8E2, 0, 0xC0DF, 0xBCA1, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xEBC1, 0, 0, 0xD0A4, 0, /* 0x90 */
+ 0xD6E2, 0, 0xB6C7, 0xB8D8, 0xEBC0, 0xB8CE, 0, 0xEBBF, /* 0x90 */
+ 0xB3A6, 0xB9C9, 0xD6AB, 0, 0xB7F4, 0xB7CA, 0, 0, /* 0xA0 */
+ 0, 0xBCE7, 0xB7BE, 0xEBC6, 0, 0xEBC7, 0xB0B9, 0xBFCF, /* 0xA0 */
+ 0, 0xEBC5, 0xD3FD, 0, 0xEBC8, 0, 0, 0xEBC9, /* 0xB0 */
+ 0, 0, 0xB7CE, 0, 0xEBC2, 0xEBC4, 0xC9F6, 0xD6D7, /* 0xB0 */
+ 0xD5CD, 0xD0B2, 0xEBCF, 0xCEB8, 0xEBD0, 0, 0xB5A8, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xB1B3, 0xEBD2, 0xCCA5, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xC5D6, 0xEBD3, /* 0xD0 */
+ 0, 0xEBD1, 0xC5DF, 0xEBCE, 0xCAA4, 0xEBD5, 0xB0FB, 0, /* 0xD0 */
+ 0, 0xBAFA, 0, 0, 0xD8B7, 0xF1E3, 0, 0xEBCA, /* 0xE0 */
+ 0xEBCB, 0xEBCC, 0xEBCD, 0xEBD6, 0xE6C0, 0xEBD9, 0, 0xBFE8, /* 0xE0 */
+ 0xD2C8, 0xEBD7, 0xEBDC, 0xB8EC, 0xEBD8, 0, 0xBDBA, 0, /* 0xF0 */
+ 0xD0D8, 0, 0xB0B7, 0, 0xEBDD, 0xC4DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD6AC, 0, 0, 0, 0xB4E0, 0, /* 0x00 */
+ 0, 0xC2F6, 0xBCB9, 0, 0, 0xEBDA, 0xEBDB, 0xD4E0, /* 0x00 */
+ 0xC6EA, 0xC4D4, 0xEBDF, 0xC5A7, 0xD9F5, 0, 0xB2B1, 0, /* 0x10 */
+ 0xEBE4, 0, 0xBDC5, 0, 0, 0, 0xEBE2, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xEBE3, 0, 0, 0xB8AC, /* 0x20 */
+ 0, 0xCDD1, 0xEBE5, 0, 0, 0, 0xEBE1, 0, /* 0x30 */
+ 0xC1B3, 0, 0, 0, 0, 0, 0xC6A2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xCCF3, 0, /* 0x40 */
+ 0xEBE6, 0, 0xC0B0, 0xD2B8, 0xEBE7, 0, 0, 0, /* 0x40 */
+ 0xB8AF, 0xB8AD, 0, 0xEBE8, 0xC7BB, 0xCDF3, 0, 0, /* 0x50 */
+ 0, 0xEBEA, 0xEBEB, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xEBED, 0, 0, 0, 0, 0xD0C8, 0, 0xEBF2, /* 0x60 */
+ 0, 0xEBEE, 0, 0, 0, 0xEBF1, 0xC8F9, 0, /* 0x60 */
+ 0xD1FC, 0xEBEC, 0, 0, 0xEBE9, 0, 0, 0, /* 0x70 */
+ 0, 0xB8B9, 0xCFD9, 0xC4E5, 0xEBEF, 0xEBF0, 0xCCDA, 0xCDC8, /* 0x70 */
+ 0xB0F2, 0, 0xEBF6, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xEBF5, 0, 0xB2B2, 0, 0, 0, 0, 0xB8E0, /* 0x80 */
+ 0, 0xEBF7, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xB1EC, 0, 0, 0xCCC5, 0xC4A4, 0xCFA5, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xEBF9, 0, 0, 0xECA2, 0, /* 0xA0 */
+ 0xC5F2, 0, 0xEBFA, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xC9C5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE2DF, 0xEBFE, 0, 0, 0, 0, /* 0xB0 */
+ 0xCDCE, 0xECA1, 0xB1DB, 0xD3B7, 0, 0, 0xD2DC, 0, /* 0xC0 */
+ 0, 0, 0xEBFD, 0, 0xEBFB, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xB3BC, 0, 0, 0, 0xEAB0, /* 0xE0 */
+ 0, 0, 0xD7D4, 0, 0xF4AB, 0xB3F4, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xD6C1, 0xD6C2, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xD5E9, 0xBECA, 0, 0xF4A7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2A8, 0xF4A8, 0xF4A9, 0, 0xF4AA, 0xBECB, 0xD3DF, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xC9E0, 0xC9E1, 0, 0, /* 0x00 */
+ 0xF3C2, 0, 0xCAE6, 0, 0xCCF2, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE2B6, 0xCBB4, 0, 0xCEE8, 0xD6DB, /* 0x10 */
+ 0, 0xF4AD, 0xF4AE, 0xF4AF, 0, 0, 0, 0, /* 0x20 */
+ 0xF4B2, 0, 0xBABD, 0xF4B3, 0xB0E3, 0xF4B0, 0, 0xF4B1, /* 0x20 */
+ 0xBDA2, 0xB2D5, 0, 0xF4B6, 0xF4B7, 0xB6E6, 0xB2B0, 0xCFCF, /* 0x30 */
+ 0xF4B4, 0xB4AC, 0, 0xF4B5, 0, 0, 0xF4B8, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF4B9, 0, 0, 0xCDA7, /* 0x40 */
+ 0, 0xF4BA, 0, 0xF4BB, 0, 0, 0, 0xF4BC, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xCBD2, 0, 0xF4BD, 0, 0, 0, 0, 0xF4BE, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xF4BF, 0, 0, 0, 0, 0, 0xF4DE, 0xC1BC, /* 0x60 */
+ 0xBCE8, 0, 0xC9AB, 0xD1DE, 0xE5F5, 0, 0, 0, /* 0x70 */
+ 0, 0xDCB3, 0xD2D5, 0, 0, 0xDCB4, 0xB0AC, 0xDCB5, /* 0x70 */
+ 0, 0, 0xBDDA, 0, 0xDCB9, 0, 0, 0, /* 0x80 */
+ 0xD8C2, 0, 0xDCB7, 0xD3F3, 0, 0xC9D6, 0xDCBA, 0xDCB6, /* 0x80 */
+ 0, 0xDCBB, 0xC3A2, 0, 0, 0, 0, 0xDCBC, /* 0x90 */
+ 0xDCC5, 0xDCBD, 0, 0, 0xCEDF, 0xD6A5, 0, 0xDCCF, /* 0x90 */
+ 0, 0xDCCD, 0, 0, 0xDCD2, 0xBDE6, 0xC2AB, 0, /* 0xA0 */
+ 0xDCB8, 0xDCCB, 0xDCCE, 0xDCBE, 0xB7D2, 0xB0C5, 0xDCC7, 0xD0BE, /* 0xA0 */
+ 0xDCC1, 0xBBA8, 0, 0xB7BC, 0xDCCC, 0, 0, 0xDCC6, /* 0xB0 */
+ 0xDCBF, 0xC7DB, 0, 0, 0, 0xD1BF, 0xDCC0, 0, /* 0xB0 */
+ 0, 0xDCCA, 0, 0, 0xDCD0, 0, 0, 0xCEAD, /* 0xC0 */
+ 0xDCC2, 0, 0xDCC3, 0xDCC8, 0xDCC9, 0xB2D4, 0xDCD1, 0xCBD5, /* 0xC0 */
+ 0, 0xD4B7, 0xDCDB, 0xDCDF, 0xCCA6, 0xDCE6, 0, 0xC3E7, /* 0xD0 */
+ 0xDCDC, 0, 0, 0xBFC1, 0xDCD9, 0, 0xB0FA, 0xB9B6, /* 0xD0 */
+ 0xDCE5, 0xDCD3, 0, 0xDCC4, 0xDCD6, 0xC8F4, 0xBFE0, 0, /* 0xE0 */
+ 0, 0, 0, 0xC9BB, 0, 0, 0, 0xB1BD, /* 0xE0 */
+ 0, 0xD3A2, 0, 0, 0xDCDA, 0, 0, 0xDCD5, /* 0xF0 */
+ 0, 0xC6BB, 0, 0xDCDE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7C2, 0xC3AF, 0xB7B6, 0xC7D1, 0xC3A9, 0xDCE2, 0xDCD8, /* 0x00 */
+ 0xDCEB, 0xDCD4, 0, 0, 0xDCDD, 0, 0xBEA5, 0xDCD7, /* 0x00 */
+ 0, 0xDCE0, 0, 0, 0xDCE3, 0xDCE4, 0, 0xDCF8, /* 0x10 */
+ 0, 0, 0xDCE1, 0xDDA2, 0xDCE7, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xBCEB, /* 0x20 */
+ 0xB4C4, 0, 0, 0xC3A3, 0xB2E7, 0xDCFA, 0, 0xDCF2, /* 0x20 */
+ 0, 0xDCEF, 0, 0xDCFC, 0xDCEE, 0xD2F0, 0xB2E8, 0, /* 0x30 */
+ 0xC8D7, 0xC8E3, 0xDCFB, 0, 0xDCED, 0, 0, 0, /* 0x30 */
+ 0xDCF7, 0, 0, 0xDCF5, 0, 0, 0xBEA3, 0xDCF4, /* 0x40 */
+ 0, 0xB2DD, 0, 0, 0, 0, 0, 0xDCF3, /* 0x40 */
+ 0xBCF6, 0xDCE8, 0xBBC4, 0, 0xC0F3, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xBCD4, 0xDCE9, 0xDCEA, 0, 0xDCF1, 0xDCF6, /* 0x50 */
+ 0xDCF9, 0xB5B4, 0, 0xC8D9, 0xBBE7, 0xDCFE, 0xDCFD, 0xD3AB, /* 0x60 */
+ 0xDDA1, 0xDDA3, 0xDDA5, 0xD2F1, 0xDDA4, 0xDDA6, 0xDDA7, 0xD2A9, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xBAC9, /* 0x70 */
+ 0xDDA9, 0, 0, 0xDDB6, 0xDDB1, 0xDDB4, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xDDB0, 0xC6CE, 0, /* 0x80 */
+ 0, 0xC0F2, 0, 0, 0, 0, 0xC9AF, 0, /* 0x80 */
+ 0, 0, 0xDCEC, 0xDDAE, 0, 0, 0, 0, /* 0x90 */
+ 0xDDB7, 0, 0, 0xDCF0, 0xDDAF, 0, 0xDDB8, 0, /* 0x90 */
+ 0xDDAC, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xDDB9, 0xDDB3, 0xDDAD, 0xC4AA, 0, 0, 0, 0, /* 0xA0 */
+ 0xDDA8, 0xC0B3, 0xC1AB, 0xDDAA, 0xDDAB, 0, 0xDDB2, 0xBBF1, /* 0xB0 */
+ 0xDDB5, 0xD3A8, 0xDDBA, 0, 0xDDBB, 0xC3A7, 0, 0, /* 0xB0 */
+ 0xDDD2, 0xDDBC, 0, 0, 0, 0xDDD1, 0, 0xB9BD, /* 0xC0 */
+ 0, 0, 0xBED5, 0, 0xBEFA, 0, 0, 0xBACA, /* 0xC0 */
+ 0, 0, 0, 0, 0xDDCA, 0, 0xDDC5, 0, /* 0xD0 */
+ 0xDDBF, 0, 0, 0, 0xB2CB, 0xDDC3, 0, 0xDDCB, /* 0xD0 */
+ 0xB2A4, 0xDDD5, 0, 0, 0, 0xDDBE, 0, 0, /* 0xE0 */
+ 0, 0xC6D0, 0xDDD0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xDDD4, 0xC1E2, 0xB7C6, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xDDCE, 0xDDCF, 0, 0, 0, 0xDDC4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDDBD, 0, 0xDDCD, 0xCCD1, 0, 0xDDC9, 0, /* 0x00 */
+ 0, 0, 0, 0xDDC2, 0xC3C8, 0xC6BC, 0xCEAE, 0xDDCC, /* 0x00 */
+ 0, 0xDDC8, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xDDC1, 0, 0, 0, 0xDDC6, 0xC2DC, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xD3A9, 0xD3AA, 0xDDD3, 0xCFF4, /* 0x20 */
+ 0xC8F8, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xDDE6, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xDDC7, 0, 0, 0, 0xDDE0, 0xC2E4, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xDDE1, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xDDD7, 0, 0, 0, 0, 0, 0xD6F8, /* 0x50 */
+ 0, 0xDDD9, 0xDDD8, 0xB8F0, 0xDDD6, 0, 0, 0, /* 0x50 */
+ 0, 0xC6CF, 0, 0xB6AD, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xDDE2, 0, 0xBAF9, 0xD4E1, 0xDDE7, 0, 0, /* 0x60 */
+ 0, 0xB4D0, 0, 0xDDDA, 0, 0xBFFB, 0xDDE3, 0, /* 0x70 */
+ 0xDDDF, 0, 0xDDDD, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xB5D9, 0, 0, 0, 0, 0xDDDB, /* 0x80 */
+ 0xDDDC, 0xDDDE, 0, 0xBDAF, 0xDDE4, 0, 0xDDE5, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDDF5, /* 0x90 */
+ 0, 0xC3C9, 0, 0, 0xCBE2, 0, 0, 0, /* 0x90 */
+ 0, 0xDDF2, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD8E1, /* 0xA0 */
+ 0, 0, 0xC6D1, 0, 0xDDF4, 0, 0, 0, /* 0xB0 */
+ 0xD5F4, 0xDDF3, 0xDDF0, 0, 0, 0xDDEC, 0, 0xDDEF, /* 0xB0 */
+ 0, 0xDDE8, 0, 0, 0xD0EE, 0, 0, 0, /* 0xC0 */
+ 0, 0xC8D8, 0xDDEE, 0, 0, 0xDDE9, 0, 0, /* 0xC0 */
+ 0xDDEA, 0xCBF2, 0, 0xDDED, 0, 0, 0xB1CD, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xC0B6, 0, 0xBCBB, /* 0xD0 */
+ 0xDDF1, 0, 0, 0xDDF7, 0, 0xDDF6, 0xDDEB, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xC5EE, 0, 0, 0, /* 0xE0 */
+ 0xDDFB, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xDEA4, 0, 0, 0xDEA3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xDDF8, 0, 0, 0, /* 0x00 */
+ 0, 0xC3EF, 0, 0xC2FB, 0, 0, 0, 0xD5E1, /* 0x10 */
+ 0, 0, 0xCEB5, 0, 0, 0, 0, 0xDDFD, /* 0x10 */
+ 0, 0xB2CC, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xC4E8, 0xCADF, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC7BE, /* 0x30 */
+ 0xDDFA, 0xDDFC, 0xDDFE, 0xDEA2, 0xB0AA, 0xB1CE, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xDEAC, 0, 0, 0, 0, /* 0x40 */
+ 0xDEA6, 0xBDB6, 0xC8EF, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xDEA1, 0, /* 0x50 */
+ 0, 0xDEA5, 0, 0, 0, 0, 0xDEA9, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xDEA8, 0, 0, 0, /* 0x60 */
+ 0xDEA7, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xDEAD, 0, 0xD4CC, 0, 0, 0, /* 0x70 */
+ 0, 0xDEB3, 0xDEAA, 0xDEAE, 0, 0, 0xC0D9, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xB1A1, 0xDEB6, 0, 0xDEB1, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDEB2, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xD1A6, 0xDEB5, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xDEAF, 0, 0, 0, /* 0xA0 */
+ 0xDEB0, 0, 0xD0BD, 0, 0, 0, 0xDEB4, 0xCAED, /* 0xA0 */
+ 0xDEB9, 0, 0, 0, 0, 0, 0, 0xDEB8, /* 0xB0 */
+ 0, 0xDEB7, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xDEBB, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xBDE5, 0, 0, 0, 0, 0, 0xB2D8, /* 0xC0 */
+ 0xC3EA, 0, 0, 0xDEBA, 0, 0xC5BA, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xDEBC, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xCCD9, 0, 0, 0, /* 0xE0 */
+ 0, 0xB7AA, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xD4E5, 0, 0, 0, 0xDEBD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDEBF, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xC4A2, 0, 0, 0, 0, 0xDEC1, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDEBE, /* 0x20 */
+ 0, 0xDEC0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xD5BA, 0, 0, 0, 0xDEC2, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF2AE, 0xBBA2, 0xC2B2, /* 0x40 */
+ 0xC5B0, 0xC2C7, 0, 0, 0xF2AF, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xD0E9, 0, 0, 0, 0xD3DD, 0, /* 0x50 */
+ 0, 0, 0xEBBD, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xB3E6, 0xF2B0, 0, 0xF2B1, 0, /* 0x60 */
+ 0, 0xCAAD, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBAE7, 0xF2B3, 0xF2B5, 0xF2B4, 0xCBE4, 0xCFBA, 0xF2B2, /* 0x70 */
+ 0xCAB4, 0xD2CF, 0xC2EC, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xCEC3, 0xF2B8, 0xB0F6, 0xF2B7, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF2BE, 0, 0xB2CF, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xD1C1, 0xF2BA, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF2BC, 0xD4E9, 0, 0, 0xF2BB, /* 0xA0 */
+ 0xF2B6, 0xF2BF, 0xF2BD, 0, 0xF2B9, 0, 0, 0xF2C7, /* 0xA0 */
+ 0xF2C4, 0xF2C6, 0, 0, 0xF2CA, 0xF2C2, 0xF2C0, 0, /* 0xB0 */
+ 0, 0, 0xF2C5, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xD6FB, 0, 0, 0, 0xF2C1, 0, 0xC7F9, 0xC9DF, /* 0xC0 */
+ 0, 0xF2C8, 0xB9C6, 0xB5B0, 0, 0, 0xF2C3, 0xF2C9, /* 0xC0 */
+ 0xF2D0, 0xF2D6, 0, 0, 0xBBD7, 0, 0, 0, /* 0xD0 */
+ 0xF2D5, 0xCDDC, 0, 0xD6EB, 0, 0, 0xF2D2, 0xF2D4, /* 0xD0 */
+ 0, 0, 0, 0, 0xB8F2, 0, 0, 0, /* 0xE0 */
+ 0, 0xF2CB, 0, 0, 0, 0xF2CE, 0xC2F9, 0, /* 0xE0 */
+ 0xD5DD, 0xF2CC, 0xF2CD, 0xF2CF, 0xF2D3, 0, 0, 0, /* 0xF0 */
+ 0xF2D9, 0xD3BC, 0, 0, 0, 0, 0xB6EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCAF1, 0, 0xB7E4, 0xF2D7, 0, 0, 0, 0xF2D8, /* 0x00 */
+ 0xF2DA, 0xF2DD, 0xF2DB, 0, 0, 0xF2DC, 0, 0, /* 0x00 */
+ 0, 0, 0xD1D1, 0xF2D1, 0, 0xCDC9, 0, 0xCECF, /* 0x10 */
+ 0xD6A9, 0, 0xF2E3, 0, 0xC3DB, 0, 0xF2E0, 0, /* 0x10 */
+ 0, 0xC0AF, 0xF2EC, 0xF2DE, 0, 0xF2E1, 0, 0, /* 0x20 */
+ 0, 0xF2E8, 0, 0, 0, 0, 0xF2E2, 0, /* 0x20 */
+ 0, 0xF2E7, 0, 0, 0xF2E6, 0, 0, 0xF2E9, /* 0x30 */
+ 0, 0, 0, 0xF2DF, 0, 0, 0xF2E4, 0xF2EA, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD3AC, /* 0x40 */
+ 0xF2E5, 0xB2F5, 0, 0, 0xF2F2, 0, 0xD0AB, 0, /* 0x40 */
+ 0, 0, 0, 0xF2F5, 0, 0, 0, 0xBBC8, /* 0x50 */
+ 0, 0xF2F9, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF2F0, 0, 0, 0xF2F6, 0xF2F8, 0xF2FA, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xF2F3, 0, /* 0x60 */
+ 0xF2F1, 0, 0, 0, 0xBAFB, 0, 0xB5FB, 0, /* 0x70 */
+ 0, 0, 0, 0xF2EF, 0xF2F7, 0xF2ED, 0xF2EE, 0, /* 0x70 */
+ 0, 0, 0xF2EB, 0xF3A6, 0, 0xF3A3, 0, 0, /* 0x80 */
+ 0xF3A2, 0, 0, 0xF2F4, 0, 0xC8DA, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF2FB, 0, 0, 0, 0xF3A5, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC3F8, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF2FD, 0, 0, 0xF3A7, 0xF3A9, 0xF3A4, 0, 0xF2FC, /* 0xA0 */
+ 0, 0, 0, 0xF3AB, 0, 0xF3AA, 0, 0, /* 0xB0 */
+ 0, 0, 0xC2DD, 0, 0, 0xF3AE, 0, 0, /* 0xB0 */
+ 0xF3B0, 0, 0, 0, 0, 0, 0xF3A1, 0, /* 0xC0 */
+ 0, 0, 0xF3B1, 0xF3AC, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF3AF, 0xF2FE, 0xF3AD, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xF3B2, 0, 0, 0, 0, /* 0xD0 */
+ 0xF3B4, 0, 0, 0, 0, 0xF3A8, 0, 0, /* 0xE0 */
+ 0, 0, 0xF3B3, 0, 0, 0, 0xF3B5, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xD0B7, 0, 0, 0, 0, 0xF3B8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD9F9, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF3B9, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xF3B7, 0, 0xC8E4, 0xF3B6, 0, /* 0x10 */
+ 0, 0, 0, 0xF3BA, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF3BB, 0xB4C0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xEEC3, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF3BC, 0, 0, 0xF3BD, 0, 0, 0, /* 0x30 */
+ 0xD1AA, 0, 0, 0, 0xF4AC, 0xD0C6, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xD0D0, 0xD1DC, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xCFCE, 0, 0, 0xBDD6, /* 0x50 */
+ 0, 0xD1C3, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xBAE2, 0xE1E9, 0xD2C2, 0xF1C2, 0xB2B9, 0, 0, /* 0x60 */
+ 0xB1ED, 0xF1C3, 0, 0xC9C0, 0xB3C4, 0, 0xD9F2, 0, /* 0x60 */
+ 0xCBA5, 0, 0xF1C4, 0, 0, 0, 0, 0xD6D4, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF1C5, 0xF4C0, 0xF1C6, /* 0x70 */
+ 0, 0xD4AC, 0xF1C7, 0, 0xB0C0, 0xF4C1, 0, 0, /* 0x80 */
+ 0xF4C2, 0, 0, 0xB4FC, 0, 0xC5DB, 0, 0, /* 0x80 */
+ 0, 0, 0xCCBB, 0, 0, 0, 0xD0E4, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xCDE0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xF1C8, 0, 0xD9F3, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xB1BB, 0, 0xCFAE, 0, 0, /* 0xA0 */
+ 0, 0xB8A4, 0, 0, 0, 0, 0, 0xF1CA, /* 0xB0 */
+ 0, 0, 0, 0, 0xF1CB, 0, 0, 0, /* 0xB0 */
+ 0, 0xB2C3, 0xC1D1, 0, 0, 0xD7B0, 0xF1C9, 0, /* 0xC0 */
+ 0, 0xF1CC, 0, 0, 0, 0, 0xF1CE, 0, /* 0xC0 */
+ 0, 0, 0xD9F6, 0, 0xD2E1, 0xD4A3, 0, 0, /* 0xD0 */
+ 0xF4C3, 0xC8B9, 0, 0, 0, 0, 0, 0xF4C4, /* 0xD0 */
+ 0, 0, 0xF1CD, 0xF1CF, 0xBFE3, 0xF1D0, 0, 0, /* 0xE0 */
+ 0xF1D4, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF1D6, 0xF1D1, 0, 0xC9D1, 0xC5E1, 0, 0, 0, /* 0xF0 */
+ 0xC2E3, 0xB9FC, 0, 0, 0xF1D3, 0, 0xF1D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB9D3, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF1DB, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xBAD6, 0, 0xB0FD, 0xF1D9, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF1D8, 0xF1D2, 0xF1DA, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF1D7, 0, 0, 0, 0xC8EC, 0, 0, /* 0x20 */
+ 0, 0, 0xCDCA, 0xF1DD, 0, 0, 0, 0, /* 0x20 */
+ 0xE5BD, 0, 0, 0, 0xF1DC, 0, 0xF1DE, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF1DF, 0, 0, 0xCFE5, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xF4C5, 0xBDF3, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xF1E0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0xF1E1, 0, 0, 0, 0xCEF7, /* 0x70 */
+ 0, 0xD2AA, 0, 0xF1FB, 0, 0, 0xB8B2, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xBCFB, 0xB9DB, 0, 0xB9E6, 0xC3D9, 0xCAD3, 0xEAE8, /* 0xC0 */
+ 0xC0C0, 0xBEF5, 0xEAE9, 0xEAEA, 0xEAEB, 0, 0xEAEC, 0xEAED, /* 0xC0 */
+ 0xEAEE, 0xEAEF, 0xBDC7, 0, 0, 0, 0xF5FB, 0, /* 0xD0 */
+ 0, 0, 0xF5FD, 0, 0xF5FE, 0, 0xF5FC, 0, /* 0xD0 */
+ 0, 0, 0, 0xBDE2, 0, 0xF6A1, 0xB4A5, 0, /* 0xE0 */
+ 0, 0, 0, 0xF6A2, 0, 0, 0, 0xF6A3, /* 0xE0 */
+ 0, 0, 0, 0xECB2 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1D4, 0, 0, 0, 0, 0, 0, 0xD9EA, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xF6A4, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEEBA, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD5B2, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xD3FE, 0xCCDC, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xCAC4 /* 0x90 */
+ /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5C0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xF6A5, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xBEAF, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xC6A9, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xDAA5, 0xBCC6, 0xB6A9, 0xB8BC, 0xC8CF, 0xBCA5, 0xDAA6, 0xDAA7, /* 0xA0 */
+ 0xCCD6, 0xC8C3, 0xDAA8, 0xC6FD, 0, 0xD1B5, 0xD2E9, 0xD1B6, /* 0xA0 */
+ 0xBCC7, 0, 0xBDB2, 0xBBE4, 0xDAA9, 0xDAAA, 0xD1C8, 0xDAAB, /* 0xB0 */
+ 0xD0ED, 0xB6EF, 0xC2DB, 0, 0xCBCF, 0xB7ED, 0xC9E8, 0xB7C3, /* 0xB0 */
+ 0xBEF7, 0xD6A4, 0xDAAC, 0xDAAD, 0xC6C0, 0xD7E7, 0xCAB6, 0, /* 0xC0 */
+ 0xD5A9, 0xCBDF, 0xD5EF, 0xDAAE, 0xD6DF, 0xB4CA, 0xDAB0, 0xDAAF, /* 0xC0 */
+ 0, 0xD2EB, 0xDAB1, 0xDAB2, 0xDAB3, 0xCAD4, 0xDAB4, 0xCAAB, /* 0xD0 */
+ 0xDAB5, 0xDAB6, 0xB3CF, 0xD6EF, 0xDAB7, 0xBBB0, 0xB5AE, 0xDAB8, /* 0xD0 */
+ 0xDAB9, 0xB9EE, 0xD1AF, 0xD2E8, 0xDABA, 0xB8C3, 0xCFEA, 0xB2EF, /* 0xE0 */
+ 0xDABB, 0xDABC, 0, 0xBDEB, 0xCEDC, 0xD3EF, 0xDABD, 0xCEF3, /* 0xE0 */
+ 0xDABE, 0xD3D5, 0xBBE5, 0xDABF, 0xCBB5, 0xCBD0, 0xDAC0, 0xC7EB, /* 0xF0 */
+ 0xD6EE, 0xDAC1, 0xC5B5, 0xB6C1, 0xDAC2, 0xB7CC, 0xBFCE, 0xDAC3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDAC4, 0xCBAD, 0xDAC5, 0xB5F7, 0xDAC6, 0xC1C2, 0xD7BB, 0xDAC7, /* 0x00 */
+ 0xCCB8, 0, 0xD2EA, 0xC4B1, 0xDAC8, 0xB5FD, 0xBBD1, 0xDAC9, /* 0x00 */
+ 0xD0B3, 0xDACA, 0xDACB, 0xCEBD, 0xDACC, 0xDACD, 0xDACE, 0xB2F7, /* 0x10 */
+ 0xDAD1, 0xDACF, 0xD1E8, 0xDAD0, 0xC3D5, 0xDAD2, 0, 0xDAD3, /* 0x10 */
+ 0xDAD4, 0xDAD5, 0xD0BB, 0xD2A5, 0xB0F9, 0xDAD6, 0xC7AB, 0xDAD7, /* 0x20 */
+ 0xBDF7, 0xC3A1, 0xDAD8, 0xDAD9, 0xC3FD, 0xCCB7, 0xDADA, 0xDADB, /* 0x20 */
+ 0xC0BE, 0xC6D7, 0xDADC, 0xDADD, 0xC7B4, 0xDADE, 0xDADF, 0xB9C8, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xBBED, 0, 0, 0, 0, 0xB6B9, 0xF4F8, /* 0x40 */
+ 0, 0xF4F9, 0, 0, 0xCDE3, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF5B9, 0, 0, /* 0x50 */
+ 0, 0, 0xEBE0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCFF3, 0xBBBF, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xBAC0, 0xD4A5, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE1D9, 0, 0, 0, 0, /* 0x70 */
+ 0xF5F4, 0xB1AA, 0xB2F2, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xF5F5, 0, 0, 0xF5F7, 0, 0, /* 0x80 */
+ 0, 0xBAD1, 0xF5F6, 0, 0xC3B2, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xF5F9, 0, 0, 0, /* 0x90 */
+ 0xF5F8 /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0xB1B4, 0xD5EA, 0xB8BA, /* 0x10 */
+ 0, 0xB9B1, 0xB2C6, 0xD4F0, 0xCFCD, 0xB0DC, 0xD5CB, 0xBBF5, /* 0x20 */
+ 0xD6CA, 0xB7B7, 0xCCB0, 0xC6B6, 0xB1E1, 0xB9BA, 0xD6FC, 0xB9E1, /* 0x20 */
+ 0xB7A1, 0xBCFA, 0xEADA, 0xEADB, 0xCCF9, 0xB9F3, 0xEADC, 0xB4FB, /* 0x30 */
+ 0xC3B3, 0xB7D1, 0xBAD8, 0xEADD, 0xD4F4, 0xEADE, 0xBCD6, 0xBBDF, /* 0x30 */
+ 0xEADF, 0xC1DE, 0xC2B8, 0xD4DF, 0xD7CA, 0xEAE0, 0xEAE1, 0xEAE4, /* 0x40 */
+ 0xEAE2, 0xEAE3, 0xC9DE, 0xB8B3, 0xB6C4, 0xEAE5, 0xCAEA, 0xC9CD, /* 0x40 */
+ 0xB4CD, 0, 0, 0xE2D9, 0xC5E2, 0xEAE6, 0xC0B5, 0, /* 0x50 */
+ 0xD7B8, 0xEAE7, 0xD7AC, 0xC8FC, 0xD8D3, 0xD8CD, 0xD4DE, 0, /* 0x50 */
+ 0xD4F9, 0xC9C4, 0xD3AE, 0xB8D3, 0xB3E0, 0, 0xC9E2, 0xF4F6, /* 0x60 */
+ 0, 0, 0, 0xBAD5, 0, 0xF4F7, 0, 0, /* 0x60 */
+ 0xD7DF, 0, 0, 0xF4F1, 0xB8B0, 0xD5D4, 0xB8CF, 0xC6F0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB3C3, 0, 0, 0xF4F2, 0xB3AC, 0, 0, /* 0x80 */
+ 0, 0, 0xD4BD, 0xC7F7, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF4F4, 0, 0, 0xF4F3, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCCCB, /* 0x90 */
+ 0, 0, 0, 0xC8A4, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xF4F5, 0, 0xD7E3, 0xC5BF, 0xF5C0, 0, 0, /* 0xB0 */
+ 0xF5BB, 0, 0xF5C3, 0, 0xF5C2, 0, 0xD6BA, 0xF5C1, /* 0xB0 */
+ 0, 0, 0, 0xD4BE, 0xF5C4, 0, 0xF5CC, 0, /* 0xC0 */
+ 0, 0, 0, 0xB0CF, 0xB5F8, 0, 0xF5C9, 0xF5CA, /* 0xC0 */
+ 0, 0xC5DC, 0, 0, 0, 0, 0xF5C5, 0xF5C6, /* 0xD0 */
+ 0, 0, 0xF5C7, 0xF5CB, 0, 0xBEE0, 0xF5C8, 0xB8FA, /* 0xD0 */
+ 0, 0, 0, 0xF5D0, 0xF5D3, 0, 0, 0, /* 0xE0 */
+ 0xBFE7, 0, 0xB9F2, 0xF5BC, 0xF5CD, 0, 0, 0xC2B7, /* 0xE0 */
+ 0, 0, 0, 0xCCF8, 0, 0xBCF9, 0, 0xF5CE, /* 0xF0 */
+ 0xF5CF, 0xF5D1, 0xB6E5, 0xF5D2, 0, 0xF5D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5BD, 0, 0, /* 0x00 */
+ 0, 0xF5D4, 0xD3BB, 0, 0xB3EC, 0, 0, 0xCCA4, /* 0x00 */
+ 0, 0, 0, 0, 0xF5D6, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF5D7, 0xBEE1, 0xF5D8, /* 0x10 */
+ 0, 0, 0xCCDF, 0xF5DB, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xB2C8, 0xD7D9, 0, 0xF5D9, 0, 0xF5DA, 0xF5DC, /* 0x20 */
+ 0, 0xF5E2, 0, 0, 0, 0xF5E0, 0, 0, /* 0x30 */
+ 0, 0xF5DF, 0xF5DD, 0, 0, 0xF5E1, 0, 0, /* 0x30 */
+ 0xF5DE, 0xF5E4, 0xF5E5, 0, 0xCCE3, 0, 0, 0xE5BF, /* 0x40 */
+ 0xB5B8, 0xF5E3, 0xF5E8, 0xCCA3, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xF5E6, 0xF5E7, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF5BE, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xB1C4, 0, /* 0x60 */
+ 0, 0xF5BF, 0, 0, 0xB5C5, 0xB2E4, 0, 0xF5EC, /* 0x60 */
+ 0xF5E9, 0, 0xB6D7, 0, 0xF5ED, 0, 0xF5EA, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF5EB, 0, 0, 0xB4DA, /* 0x70 */
+ 0, 0xD4EA, 0, 0, 0, 0xF5EE, 0, 0xB3F9, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF5EF, /* 0x80 */
+ 0xF5F1, 0, 0, 0, 0xF5F0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF5F2, 0, 0xF5F3, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xC9ED, 0xB9AA, 0, 0, 0xC7FB, /* 0xA0 */
+ 0, 0, 0xB6E3, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xCCC9, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xEAA6 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB3B5, 0xD4FE, /* 0x60 */
+ 0xB9EC, 0xD0F9, 0, 0xE9ED, 0xD7AA, 0xE9EE, 0xC2D6, 0xC8ED, /* 0x60 */
+ 0xBAE4, 0xE9EF, 0xE9F0, 0xE9F1, 0xD6E1, 0xE9F2, 0xE9F3, 0xE9F5, /* 0x70 */
+ 0xE9F4, 0xE9F6, 0xE9F7, 0xC7E1, 0xE9F8, 0xD4D8, 0xE9F9, 0xBDCE, /* 0x70 */
+ 0, 0xE9FA, 0xE9FB, 0xBDCF, 0xE9FC, 0xB8A8, 0xC1BE, 0xE9FD, /* 0x80 */
+ 0xB1B2, 0xBBD4, 0xB9F5, 0xE9FE, 0, 0xEAA1, 0xEAA2, 0xEAA3, /* 0x80 */
+ 0xB7F8, 0xBCAD, 0, 0xCAE4, 0xE0CE, 0xD4AF, 0xCFBD, 0xD5B7, /* 0x90 */
+ 0xEAA4, 0xD5DE, 0xEAA5, 0xD0C1, 0xB9BC, 0, 0xB4C7, 0xB1D9, /* 0x90 */
+ 0, 0, 0, 0xC0B1, 0, 0, 0, 0, /* 0xA0 */
+ 0xB1E6, 0xB1E7, 0, 0xB1E8, 0, 0, 0, 0, /* 0xA0 */
+ 0xB3BD, 0xC8E8, 0, 0, 0, 0, 0xE5C1, 0, /* 0xB0 */
+ 0, 0xB1DF, 0, 0, 0, 0xC1C9, 0xB4EF, 0, /* 0xB0 */
+ 0, 0xC7A8, 0xD3D8, 0, 0xC6F9, 0xD1B8, 0, 0xB9FD, /* 0xC0 */
+ 0xC2F5, 0, 0, 0, 0, 0, 0xD3AD, 0, /* 0xC0 */
+ 0xD4CB, 0xBDFC, 0, 0xE5C2, 0xB7B5, 0xE5C3, 0, 0, /* 0xD0 */
+ 0xBBB9, 0xD5E2, 0, 0xBDF8, 0xD4B6, 0xCEA5, 0xC1AC, 0xB3D9, /* 0xD0 */
+ 0, 0, 0xCCF6, 0, 0xE5C6, 0xE5C4, 0xE5C8, 0, /* 0xE0 */
+ 0xE5CA, 0xE5C7, 0xB5CF, 0xC6C8, 0, 0xB5FC, 0xE5C5, 0, /* 0xE0 */
+ 0xCAF6, 0, 0, 0xE5C9, 0, 0, 0, 0xC3D4, /* 0xF0 */
+ 0xB1C5, 0xBCA3, 0, 0, 0, 0xD7B7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDCB, 0xCBCD, 0xCACA, 0xCCD3, 0xE5CC, 0xE5CB, 0xC4E6, 0, /* 0x00 */
+ 0, 0xD1A1, 0xD1B7, 0xE5CD, 0, 0xE5D0, 0, 0xCDB8, /* 0x00 */
+ 0xD6F0, 0xE5CF, 0xB5DD, 0, 0xCDBE, 0, 0xE5D1, 0xB6BA, /* 0x10 */
+ 0, 0, 0xCDA8, 0xB9E4, 0, 0xCAC5, 0xB3D1, 0xCBD9, /* 0x10 */
+ 0xD4EC, 0xE5D2, 0xB7EA, 0, 0, 0, 0xE5CE, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE5D5, 0xB4FE, 0xE5D6, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE5D3, 0xE5D4, 0, /* 0x30 */
+ 0xD2DD, 0, 0, 0xC2DF, 0xB1C6, 0, 0xD3E2, 0, /* 0x30 */
+ 0, 0xB6DD, 0xCBEC, 0, 0xE5D7, 0, 0, 0xD3F6, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xB1E9, 0, 0xB6F4, /* 0x40 */
+ 0xE5DA, 0xE5D8, 0xE5D9, 0xB5C0, 0, 0, 0, 0xD2C5, /* 0x50 */
+ 0xE5DC, 0, 0, 0xE5DE, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE5DD, 0xC7B2, 0, 0xD2A3, 0, 0, /* 0x60 */
+ 0xE5DB, 0, 0, 0, 0, 0xD4E2, 0xD5DA, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE5E0, 0xD7F1, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xE5E1, 0, 0xB1DC, /* 0x70 */
+ 0xD1FB, 0, 0xE5E2, 0xE5E4, 0, 0, 0, 0, /* 0x80 */
+ 0xE5E3, 0, 0, 0xE5E5, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xD2D8, 0, 0xB5CB, 0, 0xE7DF, 0, 0xDAF5, /* 0x90 */
+ 0, 0xDAF8, 0, 0xDAF6, 0, 0xDAF7, 0, 0, /* 0x90 */
+ 0, 0xDAFA, 0xD0CF, 0xC4C7, 0, 0, 0xB0EE, 0, /* 0xA0 */
+ 0, 0, 0xD0B0, 0, 0xDAF9, 0, 0xD3CA, 0xBAAA, /* 0xA0 */
+ 0xDBA2, 0xC7F1, 0, 0xDAFC, 0xDAFB, 0xC9DB, 0xDAFD, 0, /* 0xB0 */
+ 0xDBA1, 0xD7DE, 0xDAFE, 0xC1DA, 0, 0, 0xDBA5, 0, /* 0xB0 */
+ 0, 0xD3F4, 0, 0, 0xDBA7, 0xDBA4, 0, 0xDBA8, /* 0xC0 */
+ 0, 0, 0xBDBC, 0, 0, 0, 0xC0C9, 0xDBA3, /* 0xC0 */
+ 0xDBA6, 0xD6A3, 0, 0xDBA9, 0, 0, 0, 0xDBAD, /* 0xD0 */
+ 0, 0, 0, 0xDBAE, 0xDBAC, 0xBAC2, 0, 0, /* 0xD0 */
+ 0, 0xBFA4, 0xDBAB, 0, 0, 0, 0xDBAA, 0xD4C7, /* 0xE0 */
+ 0xB2BF, 0, 0, 0xDBAF, 0, 0xB9F9, 0, 0xDBB0, /* 0xE0 */
+ 0, 0, 0, 0, 0xB3BB, 0, 0, 0, /* 0xF0 */
+ 0xB5A6, 0, 0, 0, 0, 0xB6BC, 0xDBB1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB6F5, 0, 0xDBB2, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xB1C9, 0, 0, 0, 0, 0xDBB4, 0, /* 0x10 */
+ 0, 0, 0xDBB3, 0xDBB5, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDBB7, /* 0x20 */
+ 0, 0xDBB6, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xDBB8, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xDBB9, 0, 0, 0xDBBA, 0, /* 0x40 */
+ 0, 0xD3CF, 0xF4FA, 0xC7F5, 0xD7C3, 0xC5E4, 0xF4FC, 0xF4FD, /* 0x40 */
+ 0xF4FB, 0, 0xBEC6, 0, 0, 0, 0, 0xD0EF, /* 0x50 */
+ 0, 0, 0xB7D3, 0, 0, 0xD4CD, 0xCCAA, 0, /* 0x50 */
+ 0, 0xF5A2, 0xF5A1, 0xBAA8, 0xF4FE, 0xCBD6, 0, 0, /* 0x60 */
+ 0, 0xF5A4, 0xC0D2, 0, 0xB3EA, 0, 0xCDAA, 0xF5A5, /* 0x60 */
+ 0xF5A3, 0xBDB4, 0xF5A8, 0, 0xF5A9, 0xBDCD, 0xC3B8, 0xBFE1, /* 0x70 */
+ 0xCBE1, 0xF5AA, 0, 0, 0, 0xF5A6, 0xF5A7, 0xC4F0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF5AC, 0, 0xB4BC, /* 0x80 */
+ 0, 0xD7ED, 0, 0xB4D7, 0xF5AB, 0xF5AE, 0, 0, /* 0x80 */
+ 0xF5AD, 0xF5AF, 0xD0D1, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xC3D1, 0xC8A9, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xF5B0, 0xF5B1, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xF5B2, 0, 0, 0xF5B3, 0xF5B4, 0xF5B5, /* 0xA0 */
+ 0, 0, 0, 0, 0xF5B7, 0xF5B6, 0, 0, /* 0xB0 */
+ 0, 0, 0xF5B8, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB2C9, /* 0xC0 */
+ 0, 0xD3D4, 0xCACD, 0, 0xC0EF, 0xD6D8, 0xD2B0, 0xC1BF, /* 0xC0 */
+ 0, 0xBDF0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xB8AA /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBCF8, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xF6C6, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xF6C7, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xF6C8 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x30 */
+ 0xF6C9, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xF6CA, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF6CC, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xF6CB, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xF7E9 /* 0xD0 */
+ /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x30 */
+ 0xF6CD, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xF6CE, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xEEC4, 0xEEC5, 0xEEC6, /* 0x80 */
+ 0xD5EB, 0xB6A4, 0xEEC8, 0xEEC7, 0xEEC9, 0xEECA, 0xC7A5, 0xEECB, /* 0x80 */
+ 0xEECC, 0, 0xB7B0, 0xB5F6, 0xEECD, 0xEECF, 0, 0xEECE, /* 0x90 */
+ 0, 0xB8C6, 0xEED0, 0xEED1, 0xEED2, 0xB6DB, 0xB3AE, 0xD6D3, /* 0x90 */
+ 0xC4C6, 0xB1B5, 0xB8D6, 0xEED3, 0xEED4, 0xD4BF, 0xC7D5, 0xBEFB, /* 0xA0 */
+ 0xCED9, 0xB9B3, 0xEED6, 0xEED5, 0xEED8, 0xEED7, 0xC5A5, 0xEED9, /* 0xA0 */
+ 0xEEDA, 0xC7AE, 0xEEDB, 0xC7AF, 0xEEDC, 0xB2A7, 0xEEDD, 0xEEDE, /* 0xB0 */
+ 0xEEDF, 0xEEE0, 0xEEE1, 0xD7EA, 0xEEE2, 0xEEE3, 0xBCD8, 0xEEE4, /* 0xB0 */
+ 0xD3CB, 0xCCFA, 0xB2AC, 0xC1E5, 0xEEE5, 0xC7A6, 0xC3AD, 0, /* 0xC0 */
+ 0xEEE6, 0xEEE7, 0xEEE8, 0xEEE9, 0xEEEA, 0xEEEB, 0xEEEC, 0, /* 0xC0 */
+ 0xEEED, 0xEEEE, 0xEEEF, 0, 0, 0xEEF0, 0xEEF1, 0xEEF2, /* 0xD0 */
+ 0xEEF4, 0xEEF3, 0, 0xEEF5, 0xCDAD, 0xC2C1, 0xEEF6, 0xEEF7, /* 0xD0 */
+ 0xEEF8, 0xD5A1, 0xEEF9, 0xCFB3, 0xEEFA, 0xEEFB, 0, 0xEEFC, /* 0xE0 */
+ 0xEEFD, 0xEFA1, 0xEEFE, 0xEFA2, 0xB8F5, 0xC3FA, 0xEFA3, 0xEFA4, /* 0xE0 */
+ 0xBDC2, 0xD2BF, 0xB2F9, 0xEFA5, 0xEFA6, 0xEFA7, 0xD2F8, 0xEFA8, /* 0xF0 */
+ 0xD6FD, 0xEFA9, 0xC6CC, 0, 0xEFAA, 0xEFAB, 0xC1B4, 0xEFAC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFFA, 0xCBF8, 0xEFAE, 0xEFAD, 0xB3FA, 0xB9F8, 0xEFAF, 0xEFB0, /* 0x00 */
+ 0xD0E2, 0xEFB1, 0xEFB2, 0xB7E6, 0xD0BF, 0xEFB3, 0xEFB4, 0xEFB5, /* 0x00 */
+ 0xC8F1, 0xCCE0, 0xEFB6, 0xEFB7, 0xEFB8, 0xEFB9, 0xEFBA, 0xD5E0, /* 0x10 */
+ 0xEFBB, 0xB4ED, 0xC3AA, 0xEFBC, 0, 0xEFBD, 0xEFBE, 0xEFBF, /* 0x10 */
+ 0, 0xCEFD, 0xEFC0, 0xC2E0, 0xB4B8, 0xD7B6, 0xBDF5, 0, /* 0x20 */
+ 0xCFC7, 0xEFC3, 0xEFC1, 0xEFC2, 0xEFC4, 0xB6A7, 0xBCFC, 0xBEE2, /* 0x20 */
+ 0xC3CC, 0xEFC5, 0xEFC6, 0, 0xEFC7, 0xEFCF, 0xEFC8, 0xEFC9, /* 0x30 */
+ 0xEFCA, 0xC7C2, 0xEFF1, 0xB6CD, 0xEFCB, 0, 0xEFCC, 0xEFCD, /* 0x30 */
+ 0xB6C6, 0xC3BE, 0xEFCE, 0, 0xEFD0, 0xEFD1, 0xEFD2, 0xD5F2, /* 0x40 */
+ 0, 0xEFD3, 0xC4F7, 0, 0xEFD4, 0xC4F8, 0xEFD5, 0xEFD6, /* 0x40 */
+ 0xB8E4, 0xB0F7, 0xEFD7, 0xEFD8, 0xEFD9, 0, 0xEFDA, 0xEFDB, /* 0x50 */
+ 0xEFDC, 0xEFDD, 0, 0xEFDE, 0xBEB5, 0xEFE1, 0xEFDF, 0xEFE0, /* 0x50 */
+ 0, 0xEFE2, 0xEFE3, 0xC1CD, 0xEFE4, 0xEFE5, 0xEFE6, 0xEFE7, /* 0x60 */
+ 0xEFE8, 0xEFE9, 0xEFEA, 0xEFEB, 0xEFEC, 0xC0D8, 0, 0xEFED, /* 0x60 */
+ 0xC1AD, 0xEFEE, 0xEFEF, 0xEFF0, 0, 0, 0xCFE2, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB3A4, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xC3C5, 0xE3C5, 0xC9C1, 0xE3C6, 0, 0xB1D5, 0xCECA, 0xB4B3, /* 0xE0 */
+ 0xC8F2, 0xE3C7, 0xCFD0, 0xE3C8, 0xBCE4, 0xE3C9, 0xE3CA, 0xC3C6, /* 0xF0 */
+ 0xD5A2, 0xC4D6, 0xB9EB, 0xCEC5, 0xE3CB, 0xC3F6, 0xE3CC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB7A7, 0xB8F3, 0xBAD2, 0xE3CD, 0xE3CE, 0xD4C4, 0xE3CF, 0, /* 0x00 */
+ 0xE3D0, 0xD1CB, 0xE3D1, 0xE3D2, 0xE3D3, 0xE3D4, 0xD1D6, 0xE3D5, /* 0x00 */
+ 0xB2FB, 0xC0BB, 0xE3D6, 0, 0xC0AB, 0xE3D7, 0xE3D8, 0xE3D9, /* 0x10 */
+ 0, 0xE3DA, 0xE3DB, 0, 0xB8B7, 0xDAE2, 0, 0xB6D3, /* 0x10 */
+ 0, 0xDAE4, 0xDAE3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xDAE6, 0, 0, 0, 0xC8EE, 0, /* 0x20 */
+ 0, 0xDAE5, 0xB7C0, 0xD1F4, 0xD2F5, 0xD5F3, 0xBDD7, 0, /* 0x30 */
+ 0, 0, 0, 0xD7E8, 0xDAE8, 0xDAE7, 0, 0xB0A2, /* 0x30 */
+ 0xCDD3, 0, 0xDAE9, 0, 0xB8BD, 0xBCCA, 0xC2BD, 0xC2A4, /* 0x40 */
+ 0xB3C2, 0xDAEA, 0, 0xC2AA, 0xC4B0, 0xBDB5, 0, 0, /* 0x40 */
+ 0xCFDE, 0, 0, 0, 0xDAEB, 0xC9C2, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xB1DD, 0, 0, 0, 0xDAEC, /* 0x50 */
+ 0, 0xB6B8, 0xD4BA, 0, 0xB3FD, 0, 0, 0xDAED, /* 0x60 */
+ 0xD4C9, 0xCFD5, 0xC5E3, 0, 0xDAEE, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xDAEF, 0, 0xDAF0, 0xC1EA, 0xCCD5, 0xCFDD, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xD3E7, 0xC2A1, 0, /* 0x80 */
+ 0xDAF1, 0, 0, 0xCBE5, 0, 0xDAF2, 0, 0xCBE6, /* 0x80 */
+ 0xD2FE, 0, 0, 0, 0xB8F4, 0, 0, 0xDAF3, /* 0x90 */
+ 0xB0AF, 0xCFB6, 0, 0, 0xD5CF, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCBED, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xDAF4, 0, 0, 0xE3C4, 0, 0, 0xC1A5, 0, /* 0xB0 */
+ 0, 0xF6BF, 0, 0, 0xF6C0, 0xF6C1, 0xC4D1, 0, /* 0xB0 */
+ 0xC8B8, 0xD1E3, 0, 0, 0xD0DB, 0xD1C5, 0xBCAF, 0xB9CD, /* 0xC0 */
+ 0, 0xEFF4, 0, 0, 0xB4C6, 0xD3BA, 0xF6C2, 0xB3FB, /* 0xC0 */
+ 0, 0, 0xF6C3, 0, 0, 0xB5F1, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xF6C5, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xD3EA, 0xF6A7, 0xD1A9, 0, 0, 0, 0, 0xF6A9, /* 0xE0 */
+ 0, 0, 0, 0xF6A8, 0, 0, 0xC1E3, 0xC0D7, /* 0xF0 */
+ 0, 0xB1A2, 0, 0, 0, 0, 0xCEED /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD0E8, 0xF6AB, 0, 0, 0xCFF6, 0, 0xF6AA, 0xD5F0, /* 0x00 */
+ 0xF6AC, 0xC3B9, 0, 0, 0, 0xBBF4, 0xF6AE, 0xF6AD, /* 0x00 */
+ 0, 0, 0, 0xC4DE, 0, 0, 0xC1D8, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xCBAA, 0, 0xCFBC, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xF6AF, 0, 0, 0xF6B0, 0, 0, /* 0x20 */
+ 0xF6B1, 0, 0xC2B6, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xB0D4, 0xC5F9, 0, 0, 0, 0, 0xF6B2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xC7E0, 0xF6A6, 0, 0, 0xBEB8, 0, /* 0x50 */
+ 0, 0xBEB2, 0, 0xB5E5, 0, 0, 0xB7C7, 0, /* 0x50 */
+ 0xBFBF, 0xC3D2, 0xC3E6, 0, 0, 0xD8CC, 0, 0, /* 0x60 */
+ 0, 0xB8EF, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xBDF9, 0xD1A5, 0, 0xB0D0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF7B0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF7B1, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xD0AC, 0, 0xB0B0, 0, 0, /* 0x80 */
+ 0, 0xF7B2, 0xF7B3, 0, 0xF7B4, 0, 0, 0, /* 0x90 */
+ 0xC7CA, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xBECF, 0, 0, 0xF7B7, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF7B6, 0, 0xB1DE, 0, 0xF7B5, /* 0xA0 */
+ 0, 0, 0xF7B8, 0, 0xF7B9, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xCEA4, 0xC8CD, /* 0xE0 */
+ 0, 0xBAAB, 0xE8B8, 0xE8B9, 0xE8BA, 0xBEC2, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xD2F4, 0, 0xD4CF, 0xC9D8 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2B3, 0xB6A5, 0xC7EA, /* 0x70 */
+ 0xF1FC, 0xCFEE, 0xCBB3, 0xD0EB, 0xE7EF, 0xCDE7, 0xB9CB, 0xB6D9, /* 0x70 */
+ 0xF1FD, 0xB0E4, 0xCBCC, 0xF1FE, 0xD4A4, 0xC2AD, 0xC1EC, 0xC6C4, /* 0x80 */
+ 0xBEB1, 0xF2A1, 0xBCD5, 0, 0xF2A2, 0xF2A3, 0, 0xF2A4, /* 0x80 */
+ 0xD2C3, 0xC6B5, 0, 0xCDC7, 0xF2A5, 0, 0xD3B1, 0xBFC5, /* 0x90 */
+ 0xCCE2, 0, 0xF2A6, 0xF2A7, 0xD1D5, 0xB6EE, 0xF2A8, 0xF2A9, /* 0x90 */
+ 0xB5DF, 0xF2AA, 0xF2AB, 0, 0xB2FC, 0xF2AC, 0xF2AD, 0xC8A7, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xB7E7, 0, /* 0xC0 */
+ 0, 0xECA9, 0xECAA, 0xECAB, 0, 0xECAC, 0, 0, /* 0xD0 */
+ 0xC6AE, 0xECAD, 0xECAE, 0, 0, 0, 0xB7C9, 0xCAB3, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE2B8, /* 0xE0 */
+ 0xF7CF /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xF7D0, 0, 0, /* 0x00 */
+ 0xB2CD, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xF7D1, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF7D3, 0xF7D2, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE2BB, 0, 0xBCA2, 0, 0xE2BC, /* 0x60 */
+ 0xE2BD, 0xE2BE, 0xE2BF, 0xE2C0, 0xE2C1, 0xB7B9, 0xD2FB, 0xBDA4, /* 0x60 */
+ 0xCACE, 0xB1A5, 0xCBC7, 0, 0xE2C2, 0xB6FC, 0xC8C4, 0xE2C3, /* 0x70 */
+ 0, 0, 0xBDC8, 0, 0xB1FD, 0xE2C4, 0, 0xB6F6, /* 0x70 */
+ 0xE2C5, 0xC4D9, 0, 0, 0xE2C6, 0xCFDA, 0xB9DD, 0xE2C7, /* 0x80 */
+ 0xC0A1, 0, 0xE2C8, 0xB2F6, 0, 0xE2C9, 0, 0xC1F3, /* 0x80 */
+ 0xE2CA, 0xE2CB, 0xC2F8, 0xE2CC, 0xE2CD, 0xE2CE, 0xCAD7, 0xD8B8, /* 0x90 */
+ 0xD9E5, 0xCFE3, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF0A5, 0, 0, /* 0xA0 */
+ 0xDCB0 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x60 */
+ 0xC2ED, 0xD4A6, 0xCDD4, 0xD1B1, /* 0x60 */
+ 0xB3DB, 0xC7FD, 0, 0xB2B5, 0xC2BF, 0xE6E0, 0xCABB, 0xE6E1, /* 0x70 */
+ 0xE6E2, 0xBED4, 0xE6E3, 0xD7A4, 0xCDD5, 0xE6E5, 0xBCDD, 0xE6E4, /* 0x70 */
+ 0xE6E6, 0xE6E7, 0xC2EE, 0, 0xBDBE, 0xE6E8, 0xC2E6, 0xBAA7, /* 0x80 */
+ 0xE6E9, 0, 0xE6EA, 0xB3D2, 0xD1E9, 0, 0, 0xBFA5, /* 0x80 */
+ 0xE6EB, 0xC6EF, 0xE6EC, 0xE6ED, 0, 0, 0xE6EE, 0xC6AD, /* 0x90 */
+ 0xE6EF, 0, 0xC9A7, 0xE6F0, 0xE6F1, 0xE6F2, 0xE5B9, 0xE6F3, /* 0x90 */
+ 0xE6F4, 0xC2E2, 0xE6F5, 0xE6F6, 0xD6E8, 0xE6F7, 0, 0xE6F8, /* 0xA0 */
+ 0xB9C7, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF7BB, 0xF7BA, 0, 0, 0, 0, 0xF7BE, 0xF7BC, /* 0xB0 */
+ 0xBAA1, 0, 0xF7BF, 0, 0xF7C0, 0, 0, 0, /* 0xB0 */
+ 0xF7C2, 0xF7C1, 0xF7C4, 0, 0, 0xF7C3, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xF7C5, 0xF7C6, 0, 0, 0, /* 0xC0 */
+ 0, 0xF7C7, 0, 0xCBE8, 0, 0, 0, 0, /* 0xD0 */
+ 0xB8DF, 0, 0, 0, 0, 0, 0, 0xF7D4, /* 0xD0 */
+ 0, 0xF7D5, 0, 0, 0, 0, 0xF7D6, 0, /* 0xE0 */
+ 0, 0, 0, 0xF7D8, 0, 0xF7DA, 0, 0xF7D7, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xF7DB, 0, 0xF7D9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7D7, 0, 0, 0, 0, /* 0x00 */
+ 0xF7DC, 0, 0, 0, 0, 0, 0, 0xF7DD, /* 0x00 */
+ 0, 0, 0, 0xF7DE, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF7DF, /* 0x10 */
+ 0, 0, 0, 0xF7E0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDBCB, /* 0x20 */
+ 0, 0, 0xD8AA, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE5F7, 0xB9ED, 0, 0, 0, /* 0x30 */
+ 0, 0xBFFD, 0xBBEA, 0xF7C9, 0xC6C7, 0xF7C8, 0, 0xF7CA, /* 0x40 */
+ 0xF7CC, 0xF7CB, 0, 0, 0, 0xF7CD, 0, 0xCEBA, /* 0x40 */
+ 0, 0xF7CE, 0, 0, 0xC4A7 /* 0x50 */
+ /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x70 */
+ 0xD3E3, 0, 0, 0xF6CF, /* 0x70 */
+ 0, 0xC2B3, 0xF6D0, 0, 0, 0xF6D1, 0xF6D2, 0xF6D3, /* 0x80 */
+ 0xF6D4, 0, 0, 0xF6D6, 0, 0xB1AB, 0xF6D7, 0, /* 0x80 */
+ 0xF6D8, 0xF6D9, 0xF6DA, 0, 0xF6DB, 0xF6DC, 0, 0, /* 0x90 */
+ 0, 0, 0xF6DD, 0xF6DE, 0xCFCA, 0, 0xF6DF, 0xF6E0, /* 0x90 */
+ 0xF6E1, 0xF6E2, 0xF6E3, 0xF6E4, 0xC0F0, 0xF6E5, 0xF6E6, 0xF6E7, /* 0xA0 */
+ 0xF6E8, 0xF6E9, 0, 0xF6EA, 0, 0xF6EB, 0xF6EC, 0, /* 0xA0 */
+ 0xF6ED, 0xF6EE, 0xF6EF, 0xF6F0, 0xF6F1, 0xF6F2, 0xF6F3, 0xF6F4, /* 0xB0 */
+ 0xBEA8, 0, 0xF6F5, 0xF6F6, 0xF6F7, 0xF6F8, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xC8FA, 0xF6F9, 0xF6FA, 0xF6FB, 0xF6FC, /* 0xC0 */
+ 0, 0, 0xF6FD, 0xF6FE, 0xF7A1, 0xF7A2, 0xF7A3, 0xF7A4, /* 0xC0 */
+ 0xF7A5, 0, 0, 0xF7A6, 0xF7A7, 0xF7A8, 0xB1EE, 0xF7A9, /* 0xD0 */
+ 0xF7AA, 0xF7AB, 0, 0, 0xF7AC, 0xF7AD, 0xC1DB, 0xF7AE, /* 0xD0 */
+ 0, 0, 0xF7AF /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0xC4F1, /* 0x10 */
+ 0xF0AF, 0xBCA6, 0xF0B0, 0xC3F9, 0, 0xC5B8, 0xD1BB, 0, /* 0x20 */
+ 0xF0B1, 0xF0B2, 0xF0B3, 0xF0B4, 0xF0B5, 0xD1BC, 0, 0xD1EC, /* 0x20 */
+ 0, 0xF0B7, 0xF0B6, 0xD4A7, 0, 0xCDD2, 0xF0B8, 0xF0BA, /* 0x30 */
+ 0xF0B9, 0xF0BB, 0xF0BC, 0, 0, 0xB8EB, 0xF0BD, 0xBAE8, /* 0x30 */
+ 0, 0xF0BE, 0xF0BF, 0xBEE9, 0xF0C0, 0xB6EC, 0xF0C1, 0xF0C2, /* 0x40 */
+ 0xF0C3, 0xF0C4, 0xC8B5, 0xF0C5, 0xF0C6, 0, 0xF0C7, 0xC5F4, /* 0x40 */
+ 0, 0xF0C8, 0, 0, 0, 0xF0C9, 0, 0xF0CA, /* 0x50 */
+ 0xF7BD, 0, 0xF0CB, 0xF0CC, 0xF0CD, 0, 0xF0CE, 0, /* 0x50 */
+ 0, 0, 0, 0xF0CF, 0xBAD7, 0, 0xF0D0, 0xF0D1, /* 0x60 */
+ 0xF0D2, 0xF0D3, 0xF0D4, 0xF0D5, 0xF0D6, 0xF0D8, 0, 0, /* 0x60 */
+ 0xD3A5, 0xF0D7, 0, 0xF0D9, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xF5BA, 0xC2B9, /* 0x70 */
+ 0, 0, 0xF7E4, 0, 0, 0, 0, 0xF7E5, /* 0x80 */
+ 0xF7E6, 0, 0, 0xF7E7, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xF7E8, 0xC2B4, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF7EA, 0, 0xF7EB, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xC2F3, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xF4F0, 0, 0, 0, /* 0xB0 */
+ 0xF4EF, 0, 0, 0xC2E9, 0, 0xF7E1, 0xF7E2, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xBBC6, 0, 0, 0, /* 0xC0 */
+ 0, 0xD9E4, 0, 0, 0, 0xCAF2, 0xC0E8, 0xF0A4, /* 0xC0 */
+ 0, 0xBADA, 0, 0, 0xC7AD, 0, 0, 0, /* 0xD0 */
+ 0xC4AC, 0, 0, 0xF7EC, 0xF7ED, 0xF7EE, 0, 0xF7F0, /* 0xD0 */
+ 0xF7EF, 0, 0xF7F1, 0, 0, 0xF7F4, 0, 0xF7F3, /* 0xE0 */
+ 0, 0xF7F2, 0xF7F5, 0, 0, 0, 0, 0xF7F6, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xEDE9, 0, 0xEDEA, 0xEDEB, 0, 0xF6BC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GB_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xF6BD, 0, 0xF6BE, 0xB6A6, 0, /* 0x00 */
+ 0xD8BE, 0, 0, 0xB9C4, 0, 0, 0, 0xD8BB, /* 0x10 */
+ 0, 0xDCB1, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xCAF3, 0, 0xF7F7, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xF7F8, 0, 0, 0xF7F9, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF7FB, /* 0x30 */
+ 0, 0xF7FA, 0, 0xB1C7, 0, 0xF7FC, 0xF7FD, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF7FE, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xC6EB, 0xECB4, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB3DD, /* 0x70 */
+ 0xF6B3, 0, 0, 0xF6B4, 0xC1E4, 0xF6B5, 0xF6B6, 0xF6B7, /* 0x80 */
+ 0xF6B8, 0xF6B9, 0xF6BA, 0xC8A3, 0xF6BB, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xC1FA, 0xB9A8, 0xEDE8, 0, 0, 0, 0xB9EA, /* 0x90 */
+ 0xD9DF /* 0xA0 */
+ /* 0xA0 */
+};
+
diff --git a/sal/textenc/tcvtscn5.tab b/sal/textenc/tcvtscn5.tab
new file mode 100644
index 000000000..18dc95f8b
--- /dev/null
+++ b/sal/textenc/tcvtscn5.tab
@@ -0,0 +1,3226 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the UniCode to DBCS tables for the following */
+/* chinese simplified (China) charsets: */
+/* GBT (GB12345) */
+
+/* Some tables are in ctabscn2.cxx, because these tables are shared with */
+/* GB or GBK. */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2BB, 0xB6A1, 0, 0xC6DF, 0, 0, 0, 0xF8F1, /* 0x00 */
+ 0xD5C9, 0xC8FD, 0xC9CF, 0xCFC2, 0xD8A2, 0xB2BB, 0, 0, /* 0x00 */
+ 0xD8A4, 0xF8A9, 0, 0, 0xC7D2, 0xD8A7, 0xCAC0, 0, /* 0x10 */
+ 0xC7F0, 0xB1FB, 0, 0, 0, 0, 0xD8A9, 0, /* 0x10 */
+ 0, 0, 0xB6AA, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xD8AD, 0, 0, 0xD1BE, 0xE3DC, 0xD6D0, 0, 0, /* 0x20 */
+ 0xF8B3, 0, 0xB4AE, 0, 0, 0, 0xD8BC, 0, /* 0x30 */
+ 0xCDE8, 0xB5A4, 0, 0xD6F7, 0, 0, 0, 0xD8AF, /* 0x30 */
+ 0, 0, 0, 0xC4CB, 0, 0xBEC3, 0, 0xD8B1, /* 0x40 */
+ 0xF7E1, 0, 0, 0xD6AE, 0, 0xD5A7, 0xBAF5, 0xB7A6, /* 0x40 */
+ 0, 0, 0xC6B9, 0xC5D2, 0, 0, 0xB9D4, 0, /* 0x50 */
+ 0xB3CB, 0xD2D2, 0, 0, 0xD8BF, 0xBEC5, 0xC6F2, 0xD2B2, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xD8C0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xC8E9, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xC7AC, 0, /* 0x70 */
+ 0, 0, 0xC2D2, 0, 0, 0, 0xC1CB, 0, /* 0x80 */
+ 0xD3E8, 0, 0, 0xCAC2, 0xB6FE, 0xD8A1, 0xD3DA, 0, /* 0x80 */
+ 0, 0xF8FD, 0xBBA5, 0xD8C1, 0xCEE5, 0xBEAE, 0, 0, /* 0x90 */
+ 0xD8A8, 0, 0, 0xD0A9, 0, 0, 0xD1C7, 0xD8BD, /* 0x90 */
+ 0xD9EF, 0xCDF6, 0xBFBA, 0, 0xBDBB, 0xBAA5, 0xD2E0, 0, /* 0xA0 */
+ 0xBAE0, 0, 0, 0xCFED, 0xBEA9, 0xCDA4, 0xC1C1, 0, /* 0xA0 */
+ 0, 0, 0, 0xD9F1, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xC8CB, 0xD8E9, 0, 0, 0, 0, /* 0xB0 */
+ 0xCAB2, 0xC8CA, 0xD8EC, 0xD8EA, 0xD8C6, 0, 0xF8DF, 0xB3F0, /* 0xC0 */
+ 0, 0xD8EB, 0xBDF1, 0xBDE9, 0, 0xC8D4, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xD7D0, 0xCACB, 0xCBFB, 0xD5CC, /* 0xD0 */
+ 0xB8B6, 0xCFC9, 0, 0, 0, 0xD9DA, 0xD8F0, 0xC7AA, /* 0xD0 */
+ 0, 0xD8EE, 0, 0xB4FA, 0xC1EE, 0xD2D4, 0, 0, /* 0xE0 */
+ 0xD8ED, 0, 0, 0xD8EF, 0, 0, 0, 0, /* 0xE0 */
+ 0xD1F6, 0, 0xD6D9, 0xD8F2, 0, 0xD8F5, 0xBCFE, 0xF8C2, /* 0xF0 */
+ 0, 0, 0, 0xC8CE, 0, 0xB7DD, 0, 0xB7C2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6F3, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xD8F8, 0xD2C1, 0, 0, 0xCEE9, 0xBCBF, 0xB7FC, /* 0x00 */
+ 0xB7A5, 0xD0DD, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xBBEF, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xD8F3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB2AE, /* 0x20 */
+ 0xB9C0, 0, 0xD9A3, 0, 0xB0E9, 0, 0xC1E6, 0, /* 0x30 */
+ 0xC9EC, 0, 0xCBC5, 0, 0xCBC6, 0xD9A4, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xB5E8, 0, 0, 0xB5AB, 0xD8F9, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xCEBB, 0xB5CD, 0xD7A1, /* 0x40 */
+ 0xD7F4, 0xD3D3, 0, 0, 0, 0xBACE, 0, 0xD9A2, /* 0x50 */
+ 0xD9DC, 0xE2C5, 0xD8FD, 0xB7F0, 0xD7F7, 0xD8FE, 0xD8FA, 0xD9A1, /* 0x50 */
+ 0xC4E3, 0, 0, 0, 0xD8F4, 0, 0, 0xD8FB, /* 0x60 */
+ 0, 0xC5E5, 0, 0, 0xC0D0, 0, 0, 0xD1F0, /* 0x60 */
+ 0xB0DB, 0, 0, 0xBCD1, 0xD9A6, 0, 0xD9A5, 0, /* 0x70 */
+ 0, 0, 0, 0xD9AC, 0xD9AE, 0, 0xD9AB, 0xCAB9, /* 0x70 */
+ 0, 0, 0, 0xD9A9, 0xD6B6, 0, 0xC0B4, 0, /* 0x80 */
+ 0xB3DE, 0xD9A8, 0, 0xC0FD, 0, 0xCACC, 0, 0xD9AA, /* 0x80 */
+ 0, 0xD9A7, 0, 0, 0xD9B0, 0, 0xC2D8, 0xB6B1, /* 0x90 */
+ 0, 0, 0, 0xB9A9, 0, 0xD2C0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xC2C2, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xCEEA, 0xBAEE, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xC7D6, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB1E3, /* 0xB0 */
+ 0, 0, 0xF8F2, 0xB4D9, 0xB6ED, 0xD9B4, 0, 0, /* 0xC0 */
+ 0, 0, 0xBFA1, 0, 0, 0, 0xD9DE, 0xC7CE, /* 0xC0 */
+ 0xC0FE, 0xD9B8, 0, 0, 0, 0, 0, 0xCBD7, /* 0xD0 */
+ 0xB7FD, 0, 0xD9B5, 0, 0xD9B7, 0xB1A3, 0xD3E1, 0xD9B9, /* 0xD0 */
+ 0xCFC0, 0xD0C5, 0, 0xD9B6, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xD0DE, 0xB8A9, /* 0xE0 */
+ 0, 0xBEE3, 0, 0xD9BD, 0, 0, 0, 0, /* 0xF0 */
+ 0xD9BA, 0, 0xB0B3, 0, 0, 0, 0xD9C2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD8F6, 0, 0, 0, 0, 0, 0xC1A9, 0, /* 0x00 */
+ 0, 0xB2D6, 0, 0xB8F6, 0xD9C4, 0xB1B6, 0, 0xD9BF, /* 0x00 */
+ 0, 0xC3C7, 0xB5B9, 0, 0xBEF3, 0, 0, 0, /* 0x10 */
+ 0xCCC8, 0xBAF2, 0xD2D0, 0, 0xD9C3, 0, 0, 0xBDE8, /* 0x10 */
+ 0, 0xB3AB, 0, 0, 0, 0xD9C5, 0xBEEB, 0, /* 0x20 */
+ 0xD9C6, 0xD9BB, 0xC4DF, 0xC2D7, 0xD9BE, 0xD9C1, 0xD9C0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xD6B5, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xD9C8, 0, 0, 0, 0xBCD9, /* 0x40 */
+ 0xD9CA, 0xCEB0, 0, 0, 0xD9BC, 0, 0xD9CB, 0xC6AB, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xD9C9, 0, 0, /* 0x50 */
+ 0, 0, 0xD7F6, 0, 0xCDA3, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xBDA1, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xD9CC, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xB2E0, 0xD5EC, 0xC5BC, 0xCDB5, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xBFFE, 0, 0, 0, 0, 0xB8B5, 0, 0, /* 0x80 */
+ 0xC0FC, 0, 0, 0, 0, 0xB0F8, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xD8F7, 0, /* 0x90 */
+ 0xC9A1, 0xB1B8, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xF8C1, 0xB4F6, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xB4DF, 0xD3B6, 0, 0, /* 0xA0 */
+ 0, 0, 0xB0C1, 0xB4AB, 0xD8F1, 0xD5AE, 0, 0xC9CB, /* 0xB0 */
+ 0, 0, 0xD9D1, 0xC9B5, 0, 0, 0xC7E3, 0, /* 0xB0 */
+ 0, 0, 0xD9CD, 0, 0, 0xBDF6, 0, 0, /* 0xC0 */
+ 0, 0xD9DD, 0, 0, 0, 0, 0, 0xCFF1, /* 0xC0 */
+ 0, 0xC7C8, 0, 0, 0, 0xC6CD, 0xD9D2, 0, /* 0xD0 */
+ 0, 0, 0xC1C5, 0, 0, 0, 0xCEB1, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xBDC4, 0xD9D6, 0xC9AE, /* 0xE0 */
+ 0xD9C7, 0, 0, 0, 0xD9D5, 0xD9D4, 0xD9D7, 0, /* 0xE0 */
+ 0, 0, 0, 0xCBDB, 0, 0xBDA9, 0, 0, /* 0xF0 */
+ 0, 0xBCDB, 0, 0xC6A7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2C7, 0, 0xD9AF, 0, 0xD2DA, 0, 0xD9D3, 0xD9D8, /* 0x00 */
+ 0xBFEB, 0xBCF3, 0, 0xD9D9, 0, 0, 0, 0, /* 0x00 */
+ 0xD9CF, 0, 0xC8E5, 0, 0xD9B1, 0xD9AD, 0, 0, /* 0x10 */
+ 0xF8C5, 0, 0, 0, 0, 0, 0, 0xB3A5, /* 0x10 */
+ 0, 0xC0DC, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xD3C5, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xB4A2, 0, 0, 0, 0, 0xD9B3, /* 0x30 */
+ 0, 0, 0xD9D0, 0xD9CE, 0xD9B2, 0, 0, 0, /* 0x30 */
+ 0xD8A3, 0xD4CA, 0, 0xD4AA, 0xD0D6, 0xB3E4, 0xD5D7, 0, /* 0x40 */
+ 0xCFC8, 0xB9E2, 0, 0xBFCB, 0, 0xC3E2, 0, 0, /* 0x40 */
+ 0, 0xB6D2, 0xB6F9, 0, 0xCDC3, 0xD9EE, 0xD9F0, 0, /* 0x50 */
+ 0, 0, 0xF8AC, 0, 0xB6B5, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xBEA4, 0, 0, 0xC8EB, 0, 0, /* 0x60 */
+ 0xC8AB, 0xC1BD, 0, 0xB0CB, 0xB9AB, 0xC1F9, 0xD9E2, 0, /* 0x60 */
+ 0, 0xB9B2, 0, 0, 0, 0xB1F8, 0xC6E4, 0xBEDF, /* 0x70 */
+ 0xB5E4, 0xD7C8, 0, 0, 0xBCE6, 0, 0, 0, /* 0x70 */
+ 0xBCBD, 0, 0xD8E7, 0, 0, 0xC4DA, 0, 0, /* 0x80 */
+ 0, 0xC8BD, 0, 0, 0xB2E1, 0xD4D9, 0, 0, /* 0x80 */
+ 0, 0, 0xC3B0, 0, 0, 0xC3E1, 0xDAA2, 0xC8DF, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xB9DA, 0, 0xDAA3, 0, 0xD4A9, 0xDAA4, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xD9FB, 0xB6AC, 0, 0, 0, /* 0xA0 */
+ 0xB1F9, 0xD9FC, 0xF8A8, 0xBEF6, 0, 0xBFF6, 0xD2B1, 0xC0E4, /* 0xB0 */
+ 0, 0, 0, 0, 0xD9FE, 0xD9FD, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xC6E0, 0, 0xF9A9, 0xDAA1, /* 0xC0 */
+ 0xBEBB, 0xC1B9, 0, 0xB5F2, 0xC1E8, 0xB6B3, 0, 0xBCF5, /* 0xC0 */
+ 0, 0xB4D5, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xC1DD, 0, 0xC4FD, 0, 0, /* 0xD0 */
+ 0xF8C0, 0xB7B2, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF8DD, 0, 0, /* 0xE0 */
+ 0xBBCB, 0xBFAD, 0, 0xB5CA, 0, 0xDBC9, 0xD0D7, 0, /* 0xF0 */
+ 0xCDB9, 0xB0BC, 0xB3F6, 0, 0xDBCA, 0xBAAF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB5B6, 0xB5F3, 0xD8D6, 0xC8D0, 0, 0, 0xB7D6, 0xC7D0, /* 0x00 */
+ 0xD8D7, 0, 0xBFAF, 0, 0, 0, 0xD8D8, 0, /* 0x00 */
+ 0, 0xD0CC, 0xF8BB, 0, 0, 0, 0xEBBE, 0xC1D0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xB3F5, 0, 0, /* 0x10 */
+ 0xC9BE, 0, 0, 0, 0xC5D0, 0, 0, 0, /* 0x20 */
+ 0xC5D9, 0xC0FB, 0, 0xB1F0, 0, 0, 0xB9CE, 0, /* 0x20 */
+ 0xB5BD, 0, 0, 0xD8DA, 0, 0, 0xD6C6, 0xCBA2, /* 0x30 */
+ 0xC8AF, 0xC9B2, 0xB4CC, 0xBFCC, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xB6E7, 0, 0xCCEA, 0xD8D9, 0, 0, 0xD4F2, /* 0x40 */
+ 0, 0, 0xCFF7, 0xF8C8, 0xD8DD, 0xC7B0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xCCDE, 0, 0xC6CA, 0, /* 0x50 */
+ 0, 0, 0, 0xB8D5, 0xD8E0, 0, 0xD8DE, 0, /* 0x50 */
+ 0, 0xD8DF, 0, 0, 0, 0xB0FE, 0, 0, /* 0x60 */
+ 0, 0xCAA3, 0xBCF4, 0, 0, 0, 0xB9D0, 0xB8B1, /* 0x60 */
+ 0, 0, 0xB8EE, 0, 0xD8DC, 0xB4B4, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xD8E2, 0, 0xBDCB, /* 0x70 */
+ 0, 0xD8E4, 0xD8E3, 0xBBAE, 0, 0, 0, 0xBEE7, /* 0x80 */
+ 0xC5FC, 0xC1F5, 0xB9F4, 0, 0xD8DB, 0xBDA3, 0, 0, /* 0x80 */
+ 0xD8E5, 0xBCC1, 0, 0xD8E6, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xC1A6, 0, 0, 0, 0xB9A6, /* 0x90 */
+ 0xBCD3, 0, 0, 0xC1D3, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xD6FA, 0xC5AC, 0xBDD9, 0xDBBE, 0xDBBF, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xDBC0, 0, /* 0xB0 */
+ 0, 0xBEA2, 0, 0xB2AA, 0, 0, 0, 0xD3C2, /* 0xC0 */
+ 0, 0xC3E3, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xDBC2, 0, 0xC0D5, 0, 0, 0xB6AF, 0xDBC3, 0, /* 0xD0 */
+ 0xBFB1, 0xCEF1, 0, 0xD1AB, 0, 0xCAA4, 0xC0CD, 0xC4BC, /* 0xD0 */
+ 0, 0, 0xCAC6, 0, 0xC7DA, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xDBC4, 0xDBBD, 0, 0, 0, 0xC0F8, 0, 0, /* 0xF0 */
+ 0xC8B0, 0xD9E8, 0xC9D7, 0, 0, 0, 0xB9B4, 0xCEF0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD4C8, 0, 0, 0, 0, 0xB0FC, 0xB4D2, 0, /* 0x00 */
+ 0xD0D9, 0, 0, 0, 0, 0xD9E9, 0, 0xDECB, /* 0x00 */
+ 0xD9EB, 0, 0, 0, 0, 0xD8B0, 0xBBAF, 0xB1B1, /* 0x10 */
+ 0, 0xB3D7, 0xD8CE, 0, 0, 0xD4D1, 0, 0, /* 0x10 */
+ 0xBDB3, 0xBFEF, 0, 0xCFBB, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xB7CB, 0, 0, 0xD8D0, 0, 0xBBE3, /* 0x20 */
+ 0, 0xD8D1, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xC6A5, 0, 0, 0, 0, 0xD8D2, 0xC4E4, /* 0x30 */
+ 0xC7F8, 0xCAAE, 0, 0xC7A7, 0, 0xD8A6, 0, 0xC9FD, /* 0x40 */
+ 0xCEE7, 0xBBDC, 0xB0EB, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xB1B0, 0xD7E4, 0xD7BF, 0xD0AD, 0, 0, 0xC4CF, /* 0x50 */
+ 0, 0, 0xB2A9, 0, 0xB2B7, 0, 0xB1E5, 0xDFB2, /* 0x50 */
+ 0xD5BC, 0xBFA8, 0, 0xD8D5, 0, 0, 0xD8D4, 0xCED4, /* 0x60 */
+ 0, 0xDAE0, 0, 0, 0, 0, 0xD8B4, 0xC3AE, /* 0x60 */
+ 0xD3A1, 0xCEA3, 0, 0xBCB4, 0xC8B4, 0xC2D1, 0, 0xBEED, /* 0x70 */
+ 0xD0B6, 0, 0xDAE1, 0, 0, 0, 0, 0xC7E4, /* 0x70 */
+ 0, 0, 0xF8A7, 0, 0xB6F2, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xC0E5, 0xD8C7, 0xBAF1, 0, 0, 0xD8C8, 0, 0xD4AD, /* 0x90 */
+ 0xB2DE, 0, 0xCFE1, 0, 0, 0xD8CA, 0xCFC3, 0, /* 0xA0 */
+ 0xB3F8, 0xBEC7, 0, 0, 0, 0xD1E1, 0xD8CB, 0, /* 0xA0 */
+ 0, 0, 0xC0F7, 0, 0xD8C9, 0, 0xDBCC, 0, /* 0xB0 */
+ 0, 0, 0, 0xC8A5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xC8FE, 0, 0xB2CE, 0, 0, 0, 0, /* 0xC0 */
+ 0xD3D6, 0xB2E6, 0xBCB0, 0xD3D1, 0, 0xB7B4, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xCAE5, 0, 0xC8A1, 0xCADC, /* 0xD0 */
+ 0, 0xD0F0, 0, 0xC5D1, 0, 0, 0, 0xDBC5, /* 0xD0 */
+ 0, 0, 0xB4D4, 0xBFDA, 0xB9C5, 0xBEE4, 0xC1ED, 0, /* 0xE0 */
+ 0xDFB6, 0xDFB5, 0xF9A3, 0xBDD0, 0xD5D9, 0xB0C8, 0xB6A3, 0xBFC9, /* 0xE0 */
+ 0xF8EB, 0xDFB3, 0xCAB7, 0xD3D2, 0, 0xD8CF, 0xF8F8, 0, /* 0xF0 */
+ 0xCBBE, 0, 0, 0xDFB7, 0xB5F0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD3F5, 0, 0xB3D4, 0xB8F7, 0, 0xDFBA, 0, /* 0x00 */
+ 0xBACF, 0xBCAA, 0xB5F5, 0, 0xCDAC, 0xC3FB, 0xE1E1, 0xC0F4, /* 0x00 */
+ 0xCDC2, 0xCFF2, 0xDFB8, 0, 0, 0xC2C0, 0xDFB9, 0, /* 0x10 */
+ 0, 0, 0, 0xBEFD, 0, 0xC1DF, 0xCDCC, 0xD2F7, /* 0x10 */
+ 0xB7CD, 0xDFC1, 0, 0xDFC4, 0, 0, 0xB7F1, 0xB0C9, /* 0x20 */
+ 0, 0xB7D4, 0, 0xBAAC, 0, 0xBFD4, 0xCBB1, 0, /* 0x20 */
+ 0, 0xD6A8, 0xDFC5, 0, 0xCEE2, 0xB3B3, 0, 0, /* 0x30 */
+ 0xCEFC, 0xB4B5, 0, 0xCEC7, 0xBAF0, 0, 0xCEE1, 0, /* 0x30 */
+ 0xD1BD, 0, 0, 0xDFC0, 0, 0, 0xB4F4, 0, /* 0x40 */
+ 0xB3CA, 0, 0xB8E6, 0xDFBB, 0, 0, 0, 0, /* 0x40 */
+ 0xC4C5, 0, 0, 0, 0xDFBE, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xC4D8, 0, 0xDFCA, 0, 0xDFCF, 0, /* 0x60 */
+ 0xD6DC, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xDFC9, 0xDFDA, 0xCEB6, 0, 0xBAC7, 0xDFCE, 0xDFC8, /* 0x70 */
+ 0xC5DE, 0, 0, 0xC9EB, 0xBAF4, 0xC3FC, 0, 0, /* 0x70 */
+ 0xBED7, 0, 0xDFC6, 0, 0xDFCD, 0, 0xC5D8, 0, /* 0x80 */
+ 0, 0, 0, 0xD5A6, 0xBACD, 0, 0xBECC, 0xD3BD, /* 0x80 */
+ 0xB8C0, 0, 0xD6E4, 0, 0xDFC7, 0xB9BE, 0xBFA7, 0, /* 0x90 */
+ 0, 0, 0xDFCB, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xDFDB, 0xDFE5, 0, 0xDFD7, 0xDFD6, /* 0xA0 */
+ 0xD7C9, 0xDFE3, 0xDFE4, 0xE5EB, 0xD2A7, 0xDFD2, 0, 0xBFA9, /* 0xA0 */
+ 0, 0xD4DB, 0, 0xBFC8, 0xDFD4, 0, 0, 0, /* 0xB0 */
+ 0xCFCC, 0, 0, 0xDFDD, 0xDFC3, 0xD1CA, 0, 0xDFDE, /* 0xB0 */
+ 0xB0A7, 0xC6B7, 0xDFD3, 0, 0xBAE5, 0, 0xB6DF, 0xCDDB, /* 0xC0 */
+ 0xB9FE, 0xD4D5, 0, 0, 0xDFDF, 0, 0xB0A5, 0xDFE7, /* 0xC0 */
+ 0xDFD1, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xDFE1, 0, 0, 0, 0xDFE8, 0, /* 0xD0 */
+ 0, 0xD4B1, 0, 0, 0, 0xB8E7, 0xC5B6, 0xDFEA, /* 0xE0 */
+ 0xC9DA, 0xC1A8, 0xC4C4, 0, 0, 0xBFDE, 0xCFF8, 0, /* 0xE0 */
+ 0, 0, 0xD5DC, 0xDFEE, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xB2B8, 0, 0xBADF, 0xDFEC, 0, 0xDBC1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1E4, 0, 0, 0xDFC2, 0, 0xCBF4, 0xB4BD, /* 0x00 */
+ 0, 0xB0A6, 0, 0, 0, 0, 0, 0xDFF1, /* 0x00 */
+ 0xCCC6, 0xDFF2, 0, 0, 0xDFED, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xDFF0, 0, 0, 0, 0xDFF3, /* 0x20 */
+ 0, 0, 0xDFF4, 0, 0xBBA3, 0, 0xCADB, 0xCEA8, /* 0x20 */
+ 0xE0A7, 0xB3AA, 0, 0xE0A6, 0, 0, 0, 0xE0A1, /* 0x30 */
+ 0, 0, 0, 0, 0xDFFE, 0, 0xCDD9, 0xDFFC, /* 0x30 */
+ 0, 0xDFFA, 0, 0xBFD0, 0xD7C4, 0, 0xC9CC, 0, /* 0x40 */
+ 0, 0xDFF8, 0xB0A1, 0, 0, 0, 0, 0xCECA, /* 0x40 */
+ 0xDFFD, 0, 0, 0xC6F4, 0, 0xDFFB, 0xE0A2, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xE0A8, 0, 0xD1C6, 0, /* 0x50 */
+ 0, 0xB7C8, 0, 0, 0xC6A1, 0xC9B6, 0xC0B2, 0, /* 0x60 */
+ 0, 0, 0xC5BE, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xE0A3, 0xE0A4, 0xE0A5, /* 0x70 */
+ 0, 0, 0, 0xE0B4, 0xCCE4, 0, 0xE0B1, 0, /* 0x70 */
+ 0xBFA6, 0xE0AF, 0xCEB9, 0xE0AB, 0xC9C6, 0, 0, 0xC0AE, /* 0x80 */
+ 0xE0AE, 0xBAED, 0xBAB0, 0xE0A9, 0, 0, 0, 0xDFF6, /* 0x80 */
+ 0, 0xE0B3, 0, 0, 0xE0B8, 0, 0, 0, /* 0x90 */
+ 0xB4AD, 0xE0B9, 0xBBBD, 0, 0xCFB2, 0xBAC8, 0, 0xE0B0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD0FA, /* 0xA0 */
+ 0, 0, 0xC9A5, 0, 0xC7C7, 0, 0xB5A5, 0, /* 0xA0 */
+ 0, 0xE0AC, 0xD3B4, 0xD4FB, 0, 0xDFF7, 0, 0, /* 0xB0 */
+ 0, 0xE0AD, 0, 0xD3F7, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE0C4, 0xD0E1, 0xC7BA, 0xD8C4, /* 0xC0 */
+ 0, 0xE0BC, 0, 0, 0xE0C9, 0xE0CA, 0xC2F0, 0, /* 0xC0 */
+ 0, 0xE0BE, 0xE0AA, 0xC9A4, 0xE0C1, 0, 0xE0B2, 0, /* 0xD0 */
+ 0, 0, 0xCED8, 0, 0xCAC8, 0xE0C3, 0, 0xE0B5, /* 0xD0 */
+ 0, 0xCECB, 0, 0xCBC3, 0xE0CD, 0xE0C6, 0xE0C2, 0, /* 0xE0 */
+ 0xE0CB, 0xDFEF, 0xE0BA, 0, 0xE0C0, 0, 0, 0xE0C5, /* 0xE0 */
+ 0, 0, 0xE0C7, 0, 0, 0xE0CC, 0xDFD9, 0xE0BB, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xCBD4, 0xE0D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE0D6, 0xE0D2, 0, 0, 0, 0, 0xCCBE, 0, /* 0x00 */
+ 0xE0D0, 0xBCCE, 0, 0, 0xE0D1, 0xE0B6, 0xB8C2, 0xD8C5, /* 0x00 */
+ 0, 0, 0, 0, 0xC5BB, 0, 0xDFF5, 0xB3A2, /* 0x10 */
+ 0xD0EA, 0, 0, 0xC2EF, 0xDFE9, 0, 0xE0CF, 0xE0BD, /* 0x10 */
+ 0, 0, 0, 0xE0D4, 0, 0, 0, 0xE0D7, /* 0x20 */
+ 0, 0xBBA9, 0, 0, 0xE0DC, 0xE0D8, 0xDFEB, 0xD0A5, /* 0x20 */
+ 0xDFB4, 0, 0xB3B0, 0, 0xD7EC, 0xDFD8, 0xCBBB, 0, /* 0x30 */
+ 0xDFBC, 0xE0DA, 0, 0xCEFB, 0, 0, 0, 0xBAD9, /* 0x30 */
+ 0, 0xF8B0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE0E1, 0xE0DD, 0xD2AD, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE0E2, 0, 0, 0xE0DB, /* 0x50 */
+ 0xE0D9, 0xE0DF, 0, 0, 0, 0xDFD0, 0, 0, /* 0x50 */
+ 0xDFD5, 0, 0xE0DE, 0, 0xE0E4, 0xDFE6, 0xDFDC, 0, /* 0x60 */
+ 0xC6F7, 0xD8AC, 0xD4EB, 0xE0E6, 0xCAC9, 0, 0, 0xE0C8, /* 0x60 */
+ 0, 0xE0E5, 0xDFE0, 0, 0xC5E7, 0, 0xB8C1, 0, /* 0x70 */
+ 0xB6D6, 0xF8AB, 0, 0xE0E7, 0xE0E8, 0, 0, 0, /* 0x70 */
+ 0xDFCC, 0, 0, 0, 0, 0xE0E9, 0xE0E3, 0xCFC5, /* 0x80 */
+ 0, 0, 0, 0, 0xDFE2, 0, 0xBABF, 0xCCE7, /* 0x80 */
+ 0, 0, 0, 0xE0EA, 0, 0xE0E0, 0, 0, /* 0x90 */
+ 0, 0xC4F6, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xDFBF, 0, /* 0xA0 */
+ 0xC1FC, 0, 0, 0, 0, 0, 0xF8F5, 0xE0EB, /* 0xA0 */
+ 0, 0, 0, 0xE0B7, 0xD1CF, 0, 0xE0D3, 0xC8C2, /* 0xB0 */
+ 0, 0, 0, 0, 0xBDC0, 0, 0, 0, /* 0xB0 */
+ 0xDFF9, 0xE0BF, 0xCFF9, 0, 0, 0xD9E6, 0, 0, /* 0xC0 */
+ 0xDFBD, 0xF8D3, 0xC4D2, 0, 0xF8EA, 0, 0, 0, /* 0xC0 */
+ 0, 0xD6F6, 0, 0, 0xE0EC, 0, 0, 0xE0ED, /* 0xD0 */
+ 0, 0, 0xC7F4, 0xCBC4, 0, 0xE0EE, 0xBBD8, 0xD8B6, /* 0xD0 */
+ 0xD2F2, 0xE0EF, 0, 0, 0xB6DA, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE0F1, 0, 0, 0, 0, /* 0xE0 */
+ 0xC0A7, 0xB4D1, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xE0F2, 0xB9CC, 0, 0, 0, 0, 0xE0F3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC6D4, 0xE0F4, 0, 0, 0xE0F0, /* 0x00 */
+ 0xC8A6, 0xE0F6, 0xE0F5, 0xB9FA, 0, 0xCEA7, 0, 0, /* 0x00 */
+ 0, 0, 0xD4B0, 0xD4B2, 0, 0, 0xCDBC, 0, /* 0x10 */
+ 0xCDC5, 0, 0, 0, 0xE0F7, 0, 0, 0xCDC1, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xD4DA, 0xDBD7, 0xDBD9, 0, 0xDBD8, 0xB9E7, 0xDBDC, 0xDBDD, /* 0x20 */
+ 0xB5D8, 0, 0, 0xDBDA, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xDBDF, 0, 0, 0xBBF8, 0, /* 0x30 */
+ 0xD6B7, 0, 0xDBE0, 0, 0, 0, 0, 0xBEF9, /* 0x40 */
+ 0, 0, 0xB7BB, 0, 0xDBD0, 0xCCAE, 0xBFB2, 0, /* 0x40 */
+ 0xD7F8, 0xBFD3, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xC6C2, 0, 0, 0xC0A4, 0, 0xCCB9, 0, /* 0x60 */
+ 0xDBE7, 0xDBE1, 0xC6BA, 0xDBE3, 0, 0xDBE8, 0, 0xC5F7, /* 0x60 */
+ 0, 0, 0, 0xDBEA, 0, 0, 0xDBE9, 0xBFC0, /* 0x70 */
+ 0, 0, 0, 0xDBE6, 0xDBE5, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xB4B9, 0xC0AC, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xD0CD, 0xDBED, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xDBF2, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xB6E2, 0, 0, 0, 0, /* 0x90 */
+ 0xDBF3, 0xDBD2, 0xB9B8, 0xD4AB, 0xDBEC, 0, 0, 0xDBF0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xBFE5, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xDBF9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xB9A1, 0xB0A3, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xC2F1, 0, 0, 0xB3C7, 0xDBEF, /* 0xC0 */
+ 0, 0, 0xDBF8, 0, 0xC6D2, 0xDBF4, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xDBFE, 0, 0xD3F2, /* 0xD0 */
+ 0xB2BA, 0xDBEB, 0, 0, 0xDBFD, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xDCA4, 0, 0xDBFB, /* 0xE0 */
+ 0, 0, 0, 0, 0xDBFA, 0, 0, 0xD6B4, /* 0xF0 */
+ 0xDBFC, 0xC5E0, 0xBBF9, 0, 0, 0xDCA3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDCA5, 0, 0xCCC3, 0, 0, 0xBCE1, 0xB6D1, 0xDDC0, /* 0x00 */
+ 0, 0, 0xDBD1, 0xDCA1, 0, 0xDCA2, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xDBF1, 0, /* 0x10 */
+ 0, 0xDCA7, 0, 0, 0, 0xDBF6, 0xDCA6, 0, /* 0x10 */
+ 0xDCA9, 0xB1A4, 0, 0, 0xB5CC, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xBFB0, 0, 0, 0, 0, 0xD2A2, /* 0x20 */
+ 0xD1DF, 0xB1A8, 0, 0, 0xB3A1, 0xB6C2, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xDCA8, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xBFE9, 0xDCE3, 0xCBFA, 0xEBF3, 0, 0xDBEE, /* 0x40 */
+ 0, 0xCBDC, 0xDBF5, 0, 0xCBFE, 0, 0, 0xCDBF, /* 0x50 */
+ 0xCCC1, 0, 0, 0, 0, 0, 0xC8FB, 0, /* 0x50 */
+ 0, 0, 0xCEEB, 0, 0xDBF7, 0xDCAA, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xCCEE, 0xDCAB, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xB3BE, 0, 0, /* 0x70 */
+ 0, 0xC7B5, 0, 0, 0, 0, 0xDBD3, 0, /* 0x70 */
+ 0xDCAF, 0xDCAC, 0, 0xBEB3, 0, 0xCAFB, 0, 0, /* 0x80 */
+ 0, 0xDCAD, 0xB5E6, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xC9CA, 0xC4B9, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xDCAE, 0, 0xD7B9, 0, 0xD4F6, 0xD0E6, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xC4AB, 0xB6D5, 0, 0, 0, 0, 0xB6E9, 0, /* 0xA0 */
+ 0, 0, 0, 0xB7D8, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xC7BD, 0xDBD4, 0, 0xBFD1, 0, /* 0xB0 */
+ 0, 0xB1DA, 0, 0, 0, 0xDBD5, 0, 0xCCB3, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xDBD6, 0, 0xD1B9, 0, 0xBABE, 0, 0, /* 0xD0 */
+ 0xC0DD, 0xDBDB, 0xDBE4, 0, 0, 0, 0xBBB5, 0xC2A2, /* 0xD0 */
+ 0xDBE2, 0, 0xDBDE, 0, 0xC8C0, 0, 0, 0, /* 0xE0 */
+ 0, 0xB0D3, 0, 0xCABF, 0xC8C9, 0, 0, 0xD7B3, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xD2BC, 0xBAF8, 0, 0, 0xCAD9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2BA, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCFC4, /* 0x00 */
+ 0, 0, 0, 0, 0xD9E7, 0xCFA6, 0xCDE2, 0, /* 0x10 */
+ 0, 0xD9ED, 0xB6E0, 0, 0xD2B9, 0, 0, 0xB9BB, /* 0x10 */
+ 0, 0, 0xC3CE, 0, 0xE2B9, 0xE2B7, 0, 0xB4F3, /* 0x20 */
+ 0, 0xCCEC, 0xCCAB, 0xB7F2, 0, 0xD8B2, 0xD1EB, 0xBABB, /* 0x20 */
+ 0, 0xCAA7, 0, 0, 0, 0, 0, 0xD2C4, /* 0x30 */
+ 0xF8C9, 0, 0, 0, 0xDEC5, 0, 0xBCD0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xD1D9, 0, 0, 0xC6E6, /* 0x40 */
+ 0xC4CE, 0xB7EE, 0, 0, 0, 0, 0xBFFC, 0xD7E0, /* 0x40 */
+ 0xDBBC, 0xC6F5, 0, 0, 0xB1BC, 0xDEC8, 0, 0xCCD7, /* 0x50 */
+ 0xDECA, 0, 0xDEC9, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xB5EC, 0, 0xC9DD, 0, 0, 0xB0C2, 0, 0, /* 0x60 */
+ 0, 0xDEC6, 0xB6E1, 0, 0xBDB1, 0, 0xB7DC, 0, /* 0x60 */
+ 0, 0, 0, 0xC5AE, 0xC5AB, 0, 0xC4CC, 0, /* 0x70 */
+ 0xBCE9, 0xCBFD, 0, 0, 0, 0xBAC3, 0, 0, /* 0x70 */
+ 0, 0xE5F9, 0xC8E7, 0xE5FA, 0xCDFD, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xC8D1, 0, 0, 0xE5FB, 0, 0, /* 0x80 */
+ 0, 0, 0xB6CA, 0xBCCB, 0, 0, 0xD1FD, 0xE6A1, /* 0x90 */
+ 0, 0xC3EE, 0, 0, 0, 0xD7B1, 0xE6A4, 0, /* 0x90 */
+ 0, 0, 0, 0xE5FE, 0xE6A5, 0xCDD7, 0, 0, /* 0xA0 */
+ 0xB7C1, 0, 0, 0, 0, 0, 0xC4DD, 0xE6A8, /* 0xA0 */
+ 0, 0, 0xE6A7, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xC3C3, 0, 0xC6DE, 0, 0, 0xE6AA, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xC4B7, 0, /* 0xC0 */
+ 0, 0, 0xE6A2, 0xCABC, 0, 0, 0, 0, /* 0xC0 */
+ 0xBDE3, 0xB9C3, 0xE6A6, 0xD0D5, 0xCEAF, 0, 0, 0xE6A9, /* 0xD0 */
+ 0xE6B0, 0, 0xD2A6, 0, 0xBDAA, 0xE6AD, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xE6AF, 0, 0xC0D1, 0, 0, /* 0xE0 */
+ 0xD2CC, 0, 0, 0, 0xBCA7, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xE6B1, 0, 0xD2F6, 0, 0, 0, 0xD7CB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDFE, 0, 0xCDDE, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xE6B3, 0, 0, 0xE6B2, 0, 0, 0, /* 0x00 */
+ 0, 0xE6B6, 0, 0xE6B8, 0, 0, 0, 0, /* 0x10 */
+ 0xC4EF, 0, 0, 0, 0xC4C8, 0, 0, 0xBEEA, /* 0x10 */
+ 0xC9EF, 0, 0, 0xE6B7, 0, 0xB6F0, 0, 0, /* 0x20 */
+ 0, 0xC3E4, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xD3E9, 0, 0, 0, 0, 0xC8A2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE6BD, 0, 0, 0, /* 0x30 */
+ 0xE6B9, 0xC2A6, 0, 0, 0, 0, 0xC6C5, 0, /* 0x40 */
+ 0, 0xCDF1, 0xE6BB, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE6BC, 0, 0, /* 0x50 */
+ 0, 0, 0xBBE9, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xE6BE, 0, 0, 0, 0xB8BE, 0xE6BA, /* 0x60 */
+ 0, 0, 0xC0B7, 0, 0, 0xE6AB, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6C3, /* 0x70 */
+ 0, 0, 0xE6C4, 0, 0, 0, 0, 0xD0F6, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xC3BD, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xC3C4, 0xE6C2, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE6B4, /* 0xA0 */
+ 0, 0, 0xE6C1, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE6C7, 0xCFB1, 0, 0xEBF4, 0, 0, /* 0xB0 */
+ 0xE6CA, 0, 0, 0, 0, 0xC2E8, 0xE6C5, 0, /* 0xB0 */
+ 0, 0xBCDE, 0xC9A9, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xBCB5, 0, 0, 0xCFD3, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xE6CE, 0xE5FD, /* 0xD0 */
+ 0xE6D0, 0, 0, 0, 0xE6D1, 0, 0, 0, /* 0xD0 */
+ 0xE6CB, 0xB5D5, 0, 0xE6CC, 0, 0, 0xE6CF, 0, /* 0xE0 */
+ 0, 0xC4DB, 0, 0xE6C6, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE5FC, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0xE6B5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE6A3, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xE6AC, 0xE6D2, 0, 0xE6BF, 0xBDBF, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE6D4, 0xE6D3, /* 0x10 */
+ 0, 0xE6CD, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xE6C8, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE6C9, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xD3A4, 0, 0xE6D5, 0, 0xD9F8, 0, 0, 0xE6D6, /* 0x30 */
+ 0xC9F4, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xE6D7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE6AE, 0, 0, 0, /* 0x40 */
+ 0xD7D3, 0xE6DD, 0, 0xE6DE, 0xBFD7, 0xD4D0, 0, 0xD7D6, /* 0x50 */
+ 0xB4E6, 0, 0xE6DA, 0xD8C3, 0xD7CE, 0xD0A2, 0, 0xC3CF, /* 0x50 */
+ 0, 0, 0xE6DF, 0xBCBE, 0xB9C2, 0xE6DB, 0, 0, /* 0x60 */
+ 0, 0xBAA2, 0, 0xCBEF, 0xD8AB, 0, 0, 0, /* 0x60 */
+ 0xCAEB, 0xE5EE, 0, 0xE6DC, 0, 0xB7F5, 0, 0, /* 0x70 */
+ 0xD1A7, 0, 0xC8E6, 0, 0, 0xC4F5, 0, 0xC2CF, /* 0x70 */
+ 0xE5B2, 0, 0, 0xCBFC, 0xE5B3, 0xD5AC, 0, 0xD3EE, /* 0x80 */
+ 0xCAD8, 0xB0B2, 0, 0xCBCE, 0xCDEA, 0, 0, 0xBAEA, /* 0x80 */
+ 0, 0, 0, 0xE5B5, 0, 0xE5B4, 0, 0xD7DA, /* 0x90 */
+ 0xB9D9, 0xD6E6, 0xB6A8, 0xCDF0, 0xD2CB, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xBFCD, 0xD0FB, 0xCAD2, 0xE5B6, 0xBBC2, 0, /* 0xA0 */
+ 0, 0, 0, 0xB9AC, 0, 0, 0, 0, /* 0xA0 */
+ 0xD4D7, 0, 0, 0xBAA6, 0xD1E7, 0xCFFC, 0xBCD2, 0, /* 0xB0 */
+ 0xE5B7, 0xC8DD, 0, 0, 0, 0, 0, 0xCBDE, /* 0xB0 */
+ 0, 0, 0xBCC5, 0, 0xBCC4, 0xD2FA, 0xC3DC, 0xBFDC, /* 0xC0 */
+ 0, 0, 0, 0, 0xB8BB, 0, 0, 0, /* 0xC0 */
+ 0xC3C2, 0, 0xBAAE, 0xD4A2, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xC4AF, 0xB2EC, /* 0xD0 */
+ 0, 0xB9D1, 0xC7DE, 0, 0xE5BB, 0xC1C8, 0xCAB5, 0xC4FE, /* 0xE0 */
+ 0xD5AF, 0xC9F3, 0, 0xD0B4, 0xBFED, 0, 0xE5BC, 0, /* 0xE0 */
+ 0xE5BE, 0, 0, 0, 0, 0xB3E8, 0xB1A6, 0, /* 0xF0 */
+ 0xB4E7, 0, 0xCBC2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB7E2, 0, 0, 0xC9E4, 0, 0, 0xBDAB, /* 0x00 */
+ 0xD7A8, 0xCEBE, 0xD7F0, 0xD1B0, 0, 0xB6D4, 0xB5BC, 0xD0A1, /* 0x00 */
+ 0, 0xC9D9, 0, 0, 0, 0xE6D8, 0xBCE2, 0, /* 0x10 */
+ 0, 0, 0xC9D0, 0, 0xE6D9, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xDECC, 0, 0xD3C8, 0xDECD, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xDECE, 0, 0, 0, /* 0x20 */
+ 0, 0xBECD, 0, 0, 0, 0, 0, 0xDECF, /* 0x30 */
+ 0xCAAC, 0xD2FC, 0xB3DF, 0xE5EA, 0xC4E1, 0, 0xCEB2, 0xC4F2, /* 0x30 */
+ 0xBED6, 0xC6A8, 0, 0, 0, 0xBED3, 0, 0, /* 0x40 */
+ 0xC7FC, 0xCCEB, 0xBDEC, 0xCEDD, 0, 0, 0xCABA, 0xC6C1, /* 0x40 */
+ 0xE5EC, 0xD0BC, 0, 0, 0, 0xD5B9, 0, 0, /* 0x50 */
+ 0, 0xE5ED, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xCDC0, 0, 0xC2C5, 0xE5EF, 0xB2E3, 0xC2C4, 0, 0, /* 0x60 */
+ 0xE5F0, 0, 0, 0, 0xCAF4, 0, 0xE5F8, 0xCDCD, /* 0x60 */
+ 0, 0xC9BD, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD2D9, 0xE1A8, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE1AC, 0, 0, 0, 0xE1A7, 0xE1A9, 0, 0, /* 0x80 */
+ 0xE1AA, 0xE1AF, 0, 0, 0xB2ED, 0, 0, 0, /* 0x90 */
+ 0, 0xE1AE, 0, 0, 0xE1B1, 0, 0, 0, /* 0x90 */
+ 0, 0xB8D4, 0xE1B3, 0xE1B8, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xD1D2, 0, 0xE1B6, 0xE1B5, 0, 0, 0, /* 0xA0 */
+ 0, 0xE1B7, 0, 0xD4C0, 0, 0xE1B2, 0, 0xE1BA, /* 0xB0 */
+ 0xB0B6, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE1B9, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE1BE, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE1BC, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xD6C5, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xB6EB, 0, 0xD3F8, 0, 0, 0xC7CD, 0, 0, /* 0xE0 */
+ 0xB7E5, 0, 0, 0, 0xE1AD, 0, 0xB5BA, 0, /* 0xF0 */
+ 0, 0, 0, 0xBEFE, 0, 0xCFBF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1C7, 0xB3E7, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE1C1, 0xC6E9, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xB4DE, 0, 0xD1C2, 0xB8DA, /* 0x10 */
+ 0, 0, 0, 0xE1C8, 0, 0, 0xE1C6, 0, /* 0x10 */
+ 0, 0, 0xE1BF, 0, 0xE1C5, 0, 0xE1C3, 0xE1C2, /* 0x20 */
+ 0, 0xB1C0, 0, 0, 0xE1B4, 0, 0xE1C4, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE1CB, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xE1CC, 0xE1CA, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEFFA, /* 0x40 */
+ 0, 0, 0xE1D3, 0xE1D2, 0xC7B6, 0, 0, 0, /* 0x40 */
+ 0xE1B0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xE1CE, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xE1D4, 0, 0xE1D1, 0xE1CD, 0, 0, 0xE1CF, /* 0x60 */
+ 0, 0, 0, 0, 0xE1D5, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xE1D0, 0xE1D6, 0, 0xD5B8, 0, 0, 0xE1AB, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1C0, /* 0x90 */
+ 0, 0xE1D7, 0, 0, 0, 0xE1D8, 0, 0, /* 0x90 */
+ 0xE1BD, 0, 0, 0, 0, 0, 0, 0xE1BB, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE1DA, /* 0xB0 */
+ 0xE1C9, 0, 0xC1EB, 0, 0xD3EC, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xBFF9, 0, 0xCEA1, 0, 0, /* 0xC0 */
+ 0, 0, 0xC2CD, 0, 0xE1DB, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xE7DD, 0, 0xB4A8, 0xD6DD, 0, /* 0xD0 */
+ 0, 0xD1B2, 0xB3B2, 0, 0, 0xB9A4, 0xD7F3, 0xC7C9, /* 0xE0 */
+ 0xBEDE, 0, 0, 0xCED7, 0, 0, 0xB2EE, 0, /* 0xE0 */
+ 0xDBCF, 0xBCBA, 0xD2D1, 0xCBC8, 0xB0CD, 0, 0, 0xCFEF, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xD9E3, 0xBDED /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCAD0, 0xB2BC, 0, 0, 0xB7AB, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xCFA3, 0, 0, 0, /* 0x00 */
+ 0, 0xE0FB, 0, 0, 0xE0FA, 0xC5C1, 0xCCFB, 0, /* 0x10 */
+ 0xF8D0, 0xE0F9, 0xD6E3, 0xB2AF, 0, 0xB5DB, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xCBA7, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xCAA6, 0, 0xCFAF, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xD5CA, 0, 0, 0xB4F8, 0xE1A1, /* 0x30 */
+ 0xB3A3, 0, 0, 0, 0, 0xC3B1, 0, 0, /* 0x30 */
+ 0xD6A1, 0, 0xC3DD, 0xE0F8, 0xE1A2, 0xB7F9, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xBBCF, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xE1A3, 0xC4BB, 0, 0xE0FE, /* 0x50 */
+ 0xE0FD, 0, 0, 0xE1A4, 0, 0, 0xE1A5, 0xD6C4, /* 0x50 */
+ 0, 0xE1A6, 0xB4B1, 0xB1D2, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xB0EF, 0xE0FC, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xF8B5, 0xC6BD, 0xC4EA, 0, 0xB2A2, 0, /* 0x70 */
+ 0xD0D2, 0xB8C9, 0xE7DB, 0xBBC3, 0xD3D7, 0xD3C4, 0xBCB8, 0xF8B8, /* 0x70 */
+ 0xE2CF, 0, 0, 0, 0, 0, 0, 0xB1D3, /* 0x80 */
+ 0, 0, 0xB4B2, 0xE2D1, 0, 0, 0, 0xD0F2, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xB5D7, 0xE2D2, 0xB5EA, /* 0x90 */
+ 0, 0, 0xB8FD, 0, 0xB8AE, 0, 0, 0, /* 0x90 */
+ 0xE2D4, 0, 0, 0, 0, 0xE2D3, 0xB6C8, 0xD7F9, /* 0xA0 */
+ 0, 0, 0, 0xBFE2, 0, 0xCDA5, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xE2D8, 0, 0xE2D6, 0xCAFC, 0xBFB5, /* 0xB0 */
+ 0xD3B9, 0xE2D5, 0, 0, 0, 0, 0xE2D7, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xC1AE, 0xC0C8, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE2DB, 0xE2DA, 0xC0AA, 0, 0, 0xC1CE, 0, /* 0xD0 */
+ 0, 0, 0, 0xE2DC, 0, 0, 0, 0xC3ED, /* 0xD0 */
+ 0xB3A7, 0xE2D0, 0xB7CF, 0xB9E3, 0, 0, 0, 0, /* 0xE0 */
+ 0xE2DD, 0, 0xE2DE, 0, 0xC2AE, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xCCFC, 0xDBC8, 0, 0xD1D3, 0xCDA2, /* 0xF0 */
+ 0, 0, 0xBDA8, 0, 0, 0, 0xDEC3, 0xD8A5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDBCD, 0xD2EC, 0, 0xC5AA, 0, 0, 0, /* 0x00 */
+ 0xDEC4, 0, 0xB1D7, 0xDFAE, 0, 0, 0, 0xCABD, /* 0x00 */
+ 0, 0xDFB1, 0, 0xB9AD, 0, 0xD2FD, 0, 0xB8A5, /* 0x10 */
+ 0xBAEB, 0, 0, 0xB3DA, 0, 0, 0, 0xB5DC, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xCFD2, 0xBBA1, /* 0x20 */
+ 0, 0xE5F3, 0, 0, 0, 0xE5F4, 0, 0, /* 0x20 */
+ 0, 0xC8F5, 0, 0xE5F2, 0, 0xD5C5, 0, 0, /* 0x30 */
+ 0, 0, 0xC7BF, 0, 0xE5F6, 0, 0, 0, /* 0x30 */
+ 0xECB0, 0, 0, 0, 0, 0, 0xF8A4, 0, /* 0x40 */
+ 0xB5AF, 0, 0, 0, 0xC3D6, 0, 0xCDE4, 0, /* 0x40 */
+ 0xE5E6, 0, 0, 0, 0, 0, 0xE5E8, 0xE5E7, /* 0x50 */
+ 0xE5E9, 0xF8BD, 0, 0, 0, 0xD2CD, 0, 0, /* 0x50 */
+ 0, 0xE1EA, 0xD0CE, 0, 0xCDAE, 0, 0xD1E5, 0, /* 0x60 */
+ 0, 0xB2CA, 0xB1EB, 0, 0xB1F2, 0xC5ED, 0, 0, /* 0x60 */
+ 0xD5C3, 0xD3B0, 0, 0xE1DC, 0, 0, 0, 0xE1DD, /* 0x70 */
+ 0, 0xD2DB, 0, 0, 0xB1CB, 0, 0, 0, /* 0x70 */
+ 0xCDF9, 0xD5F7, 0xE1DE, 0, 0, 0xB4FD, 0, 0xE1DF, /* 0x80 */
+ 0xBADC, 0xE1E0, 0xBBB2, 0xC2C9, 0xBAF3, 0, 0, 0, /* 0x80 */
+ 0xD0EC, 0xBEB6, 0xCDBD, 0, 0, 0, 0, 0xB5C3, /* 0x90 */
+ 0xC5C7, 0xE1E3, 0, 0, 0xE1E4, 0, 0xB4D3, 0, /* 0x90 */
+ 0xE1E2, 0xD3F9, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xE1E5, 0xB8B4, 0xD1AD, 0, 0, 0xE1E6, 0xCEA2, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xE1E7, 0, 0xB5C2, /* 0xB0 */
+ 0, 0xB3B9, 0, 0, 0xE1E8, 0xBBD5, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xD0C4, 0xE2E0, 0xB1D8, 0, 0, /* 0xC0 */
+ 0, 0xE2E1, 0, 0, 0xBCC9, 0xC8CC, 0, 0, /* 0xC0 */
+ 0xECFE, 0xECFD, 0xDFAF, 0, 0, 0, 0xE2E2, 0xD6BE, /* 0xD0 */
+ 0xCDFC, 0xC3A6, 0, 0, 0, 0xE3C3, 0, 0, /* 0xD0 */
+ 0xD6D2, 0xE2E7, 0, 0, 0xE2E8, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xE2EC, 0xBFEC, 0, 0xE2ED, 0xE2E5, 0, /* 0xE0 */
+ 0, 0xB3C0, 0, 0, 0, 0xC4EE, 0, 0, /* 0xF0 */
+ 0xE2EE, 0, 0, 0xD0C3, 0, 0xBAF6, 0, 0xB7DE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xE2F7, 0, 0, 0xE2F4, 0xD4F5, 0xE2F3, /* 0x00 */
+ 0, 0, 0xC5AD, 0, 0xD5FA, 0xC5C2, 0xB2C0, 0, /* 0x10 */
+ 0, 0xE2EF, 0, 0xE2F2, 0, 0xCBBC, 0, 0, /* 0x10 */
+ 0xB5A1, 0xE2F9, 0, 0, 0, 0xBCB1, 0xE2F1, 0xD0D4, /* 0x20 */
+ 0xD4B9, 0xE2F5, 0xB9D6, 0xE2F6, 0, 0, 0, 0xC7D3, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE2F0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xEDA5, 0xE2FE, 0xCAD1, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xBBD0, 0, 0, /* 0x40 */
+ 0xBFD6, 0, 0xBAE3, 0, 0, 0xCBA1, 0, 0, /* 0x50 */
+ 0, 0xEDA6, 0xEDA3, 0, 0, 0xEDA2, 0, 0, /* 0x50 */
+ 0, 0, 0xBBD6, 0xEDA7, 0xD0F4, 0, 0, 0xEDA4, /* 0x60 */
+ 0xBADE, 0xB6F7, 0xE3A1, 0xB6B2, 0xCCF1, 0xB9A7, 0, 0xCFA2, /* 0x60 */
+ 0xC7A1, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD3C1, /* 0x70 */
+ 0, 0, 0, 0xE3A7, 0xC7C4, 0, 0, 0, /* 0x80 */
+ 0, 0xCFA4, 0, 0, 0xE3A9, 0xBAB7, 0, 0, /* 0x80 */
+ 0, 0, 0xE3A8, 0, 0xBBDA, 0, 0xE3A3, 0, /* 0x90 */
+ 0, 0, 0xE3A4, 0xE3AA, 0, 0xE3A6, 0, 0xCEF2, /* 0x90 */
+ 0xD3C6, 0, 0, 0xBBBC, 0, 0, 0xD4C3, 0, /* 0xA0 */
+ 0xC4FA, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE3AD, 0xB1AF, 0, 0xE3B2, 0xE2EA, 0xC3C6, 0, /* 0xB0 */
+ 0xBCC2, 0, 0, 0xE3AC, 0xB5BF, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xC7E9, 0xE3B0, 0, /* 0xC0 */
+ 0, 0, 0, 0xCDEF, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xBBF3, 0, 0, 0, 0xCCE8, 0, 0, /* 0xD0 */
+ 0xE3AF, 0, 0xE3B1, 0, 0xCFA7, 0xE3AE, 0, 0xCEA9, /* 0xD0 */
+ 0xBBDD, 0xB6F1, 0, 0, 0, 0, 0xB5EB, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xB6E8, 0xC4D5, 0xE3A2, 0xCFEB, 0xE3B7, 0, 0xBBCC, 0, /* 0xF0 */
+ 0, 0xC8C7, 0xD0CA, 0xE2FC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE3B8, 0xB3EE, 0, 0, 0, 0, 0xEDA9, 0, /* 0x00 */
+ 0xD3FA, 0xD3E4, 0, 0, 0, 0xEDAA, 0xE3B9, 0xD2E2, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE3B5, 0, 0, /* 0x10 */
+ 0, 0, 0xD3DE, 0xB0AE, 0xE3AB, 0, 0, 0xB8D0, /* 0x10 */
+ 0xE3B3, 0, 0, 0xE3B6, 0, 0, 0, 0xC0A2, /* 0x20 */
+ 0, 0, 0, 0xE3BA, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE2EB, 0, 0, 0xE2FD, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xE2E9, 0xF8FC, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xB4C8, 0, 0xE3BB, 0xCCAC, 0xBBC5, 0, 0xC9F7, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xC4BD, 0, 0, /* 0x50 */
+ 0xB2D2, 0, 0xB2D1, 0, 0, 0xEDAB, 0, 0xE2FA, /* 0x50 */
+ 0, 0, 0xC2FD, 0xB9DF, 0xEDA8, 0, 0, 0xBBDB, /* 0x60 */
+ 0xBFAE, 0, 0xE2E6, 0xCBCB, 0, 0, 0xC2C7, 0, /* 0x60 */
+ 0xCEBF, 0, 0, 0xE3A5, 0, 0xE3BC, 0xC7EC, 0xBFB6, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xD3C7, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xB1B9, 0xB1EF, 0, 0, 0xD4F7, 0, /* 0x80 */
+ 0xC1AF, 0xC6BE, 0xE3B4, 0, 0xE3BE, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xB5AC, 0, 0, 0xEDAD, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xB7DF, 0, 0, 0xE3BF, /* 0xA0 */
+ 0xBAA9, 0xEDAC, 0, 0xC3F5, 0xE3BD, 0, 0xE2E4, 0, /* 0xA0 */
+ 0, 0, 0xCFDC, 0, 0, 0, 0xD2E4, 0xE3C0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xBAB6, 0, /* 0xB0 */
+ 0, 0, 0xB6AE, 0, 0, 0, 0, 0xBFD2, /* 0xC0 */
+ 0xD0B8, 0xD3A6, 0xB0C3, 0xEDAE, 0xE2F8, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xE3C1, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xF8D6, 0xEDA1, /* 0xD0 */
+ 0, 0, 0, 0xEDAF, 0, 0, 0xC5B3, 0, /* 0xE0 */
+ 0xE2FB, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xB3CD, 0, 0, 0xE3C2, 0xC0C1, 0xBBB3, /* 0xF0 */
+ 0xD0FC, 0, 0xE2E3, 0, 0xBEE5, 0, 0xC9E5, 0xDCB2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC1B5, 0, 0, 0, 0, 0, 0, 0xEDB0, /* 0x00 */
+ 0xB8EA, 0, 0xCEEC, 0, 0xD0E7, 0xCAF9, 0xC8D6, 0, /* 0x00 */
+ 0xB3C9, 0xCED2, 0xBDE4, 0, 0xEAA7, 0xE3DE, 0xBBF2, 0, /* 0x10 */
+ 0, 0, 0xC6DD, 0xEAA9, 0, 0, 0, 0xEAAA, /* 0x10 */
+ 0, 0xEAAC, 0xEAAB, 0, 0xEAAE, 0xEAAD, 0, 0xEAA8, /* 0x20 */
+ 0, 0xEAAF, 0xBDD8, 0, 0, 0, 0xC2BE, 0, /* 0x20 */
+ 0xD5BD, 0, 0xCFB7, 0xB4C1, 0xB4F7, 0, 0, 0xBBA7, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xECE6, 0xECE5, 0xB7BF, /* 0x30 */
+ 0xCBF9, 0xB1E2, 0, 0xECE7, 0, 0, 0, 0xC9C8, /* 0x40 */
+ 0xECE8, 0xECE9, 0, 0xCAD6, 0xDED0, 0xB2C5, 0xD4FA, 0, /* 0x40 */
+ 0, 0xF8DE, 0xB0C7, 0xB4F2, 0xC8D3, 0, 0, 0, /* 0x50 */
+ 0xCDD0, 0, 0, 0xBFB8, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xBFDB, 0, 0, 0xC7A4, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xC5A4, 0xB0E7, 0xB3B6, /* 0x60 */
+ 0, 0, 0, 0xB0E2, 0, 0, 0xB7F6, 0, /* 0x70 */
+ 0, 0xC5FA, 0, 0, 0xB6F3, 0, 0xD5D2, 0xB3D0, /* 0x70 */
+ 0xBCBC, 0, 0, 0, 0xB3AD, 0, 0, 0, /* 0x80 */
+ 0, 0xBEF1, 0xB0D1, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xD2D6, 0xCAE3, 0xD7A5, 0, 0xCDB6, 0xB6B6, 0xBFB9, /* 0x90 */
+ 0xD5DB, 0, 0, 0xC5D7, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xC5EA, 0, 0, 0xC5FB, 0xCCA7, 0, 0, 0, /* 0xA0 */
+ 0, 0xB1A7, 0, 0, 0, 0xB5D6, 0, 0, /* 0xB0 */
+ 0, 0xC4A8, 0, 0xDED3, 0xD1BA, 0xB3E9, 0, 0xC3F2, /* 0xB0 */
+ 0, 0, 0xB7F7, 0, 0xD6F4, 0, 0xB2F0, 0xC4B4, /* 0xC0 */
+ 0xC4E9, 0xC0AD, 0xDED4, 0, 0xB0E8, 0xC5C4, 0xC1E0, 0, /* 0xC0 */
+ 0xB9D5, 0, 0xBEDC, 0xCDD8, 0xB0CE, 0, 0xCDCF, 0xDED6, /* 0xD0 */
+ 0xBED0, 0xD7BE, 0xDED5, 0xD5D0, 0xB0DD, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xC0A8, 0xCAC3, 0xDED7, 0xD5FC, /* 0xE0 */
+ 0, 0xB9B0, 0, 0xC8AD, 0xCBA9, 0, 0xDED9, 0xBFBD, /* 0xF0 */
+ 0, 0, 0, 0, 0xC6B4, 0xD7A7, 0xCAB0, 0xC4C3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB3D6, 0xB9D2, 0, 0, 0, 0, 0xD6B8, /* 0x00 */
+ 0xEAFC, 0xB0B4, 0, 0, 0, 0, 0xBFE6, 0, /* 0x00 */
+ 0, 0xCCF4, 0, 0, 0, 0, 0xCDDA, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xB0A4, 0, 0xC5B2, 0xB4EC, 0, 0, 0, 0xD5F1, /* 0x20 */
+ 0, 0, 0xEAFD, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xDEDA, 0xCDA6, 0, 0, 0xCDEC, 0xD0AE, 0, /* 0x30 */
+ 0, 0, 0xCEE6, 0xDEDC, 0, 0xCDB1, 0xC0A6, 0, /* 0x40 */
+ 0, 0xD7BD, 0, 0xDEDB, 0xB0C6, 0xBAB4, 0xC9D3, 0xC4F3, /* 0x40 */
+ 0xBEE8, 0, 0, 0, 0, 0xB2B6, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC5F5, /* 0x60 */
+ 0xC9E1, 0xDEE6, 0, 0xDED1, 0, 0xDEE3, 0xF8C6, 0, /* 0x60 */
+ 0, 0xDEDF, 0xF8C7, 0, 0, 0, 0xB4B7, 0xBDDD, /* 0x70 */
+ 0, 0, 0xDEE0, 0xC4ED, 0, 0, 0, 0, /* 0x70 */
+ 0xCFC6, 0, 0xB5E0, 0xC9A8, 0xC2D5, 0, 0, 0xB6DE, /* 0x80 */
+ 0xCADA, 0xB5F4, 0xDEE5, 0, 0xD5C6, 0, 0xDEE1, 0xCCCD, /* 0x80 */
+ 0xC6FE, 0, 0xC5C5, 0, 0, 0, 0xD2B4, 0, /* 0x90 */
+ 0xBEF2, 0xD5F5, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xC2D3, 0, 0xCCBD, 0xB3B8, 0, 0xBDD3, 0, 0xBFD8, /* 0xA0 */
+ 0xCDC6, 0xD1DA, 0xB4EB, 0, 0xDEE4, 0xDEDD, 0xDEE7, 0, /* 0xA0 */
+ 0xEAFE, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xDEF2, 0, /* 0xB0 */
+ 0xBCF0, 0, 0, 0, 0xDEED, 0, 0xDEF1, 0, /* 0xC0 */
+ 0, 0xC8E0, 0, 0, 0, 0xD7E1, 0xDEEF, 0xC3E8, /* 0xC0 */
+ 0xCCE1, 0, 0xB2E5, 0, 0, 0, 0xD2BE, 0, /* 0xD0 */
+ 0, 0, 0xD1EF, 0xBBBB, 0, 0, 0xDEEE, 0, /* 0xD0 */
+ 0xDEEB, 0xCED5, 0, 0xB4A7, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0xBFAB, 0xBEBE, 0, 0, 0xBDD2, 0xBBD3, 0, /* 0xE0 */
+ 0, 0, 0xDEE9, 0, 0xD4AE, 0, 0xDEDE, 0, /* 0xF0 */
+ 0xDEEA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xDEF5, 0xDEF8, 0xCBF0, 0, 0xB2AB, /* 0x00 */
+ 0xB4A4, 0, 0, 0xB4EA, 0xC9A6, 0, 0, 0xB5B7, /* 0x10 */
+ 0, 0, 0, 0xDEF6, 0xCBD1, 0, 0xB8E3, 0, /* 0x10 */
+ 0xDEF7, 0xDEFA, 0, 0, 0, 0, 0xDEF9, 0, /* 0x20 */
+ 0, 0, 0xCCC2, 0, 0xB0E1, 0xB4EE, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xE5BA, 0, 0xC7C0, 0, /* 0x30 */
+ 0, 0, 0xD0AF, 0, 0, 0xB2EB, 0, 0xEBA1, /* 0x30 */
+ 0, 0xDEF4, 0, 0, 0, 0, 0, 0xD2A1, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xDEE2, 0xDEF0, 0, 0xCBA4, 0, 0, 0, /* 0x50 */
+ 0xD5AA, 0, 0, 0, 0xDEE8, 0, 0xDEFB, 0xC2A7, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB4DD, /* 0x60 */
+ 0, 0xC4A6, 0, 0, 0, 0xDEFD, 0, 0xD6BF, /* 0x60 */
+ 0, 0, 0, 0xBFD9, 0, 0, 0xDED2, 0, /* 0x70 */
+ 0xC3FE, 0xC4A1, 0xDFA1, 0xB2F4, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xC1CC, 0, 0, 0xBEEF, 0, 0xC6B2, /* 0x80 */
+ 0xC0CC, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xB3C5, 0xC8F6, 0xC4D3, 0, 0xCBBA, 0xDEFE, 0, /* 0x90 */
+ 0, 0xDFA4, 0, 0, 0, 0, 0xD7B2, 0xDED8, /* 0x90 */
+ 0, 0, 0, 0xB5A7, 0xB3B7, 0xB2A6, 0, 0, /* 0xA0 */
+ 0, 0xC1C3, 0, 0xB8A7, 0xC7CB, 0xB2A5, 0xB4E9, 0, /* 0xA0 */
+ 0xD7AB, 0, 0xC6CB, 0xDEEC, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xCCA2, 0xBAB3, 0, 0xCECE, 0xBCF1, /* 0xB0 */
+ 0xDFA6, 0xD3B5, 0xC0DE, 0, 0xC2B0, 0xC9C3, 0, 0xD4F1, /* 0xC0 */
+ 0, 0, 0xBBF7, 0xB5B2, 0, 0xB2D9, 0xC7E6, 0, /* 0xC0 */
+ 0xDFA7, 0, 0xC7DC, 0, 0xB5A3, 0, 0, 0xDFA8, /* 0xD0 */
+ 0xEBA2, 0, 0xBEDD, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xBCB7, 0, 0xDFAA, 0, 0xDFA9, 0, 0xB2C1, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xC4E2, 0, 0, 0xB1F7, /* 0xE0 */
+ 0xC5A1, 0xB8E9, 0xD6C0, 0, 0xC0A9, 0, 0, 0xDFA2, /* 0xF0 */
+ 0, 0, 0xB0DA, 0xCBD3, 0xDFA3, 0, 0xC8C5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC5CA, 0, 0, 0, 0xDEF3, 0, 0xC4EC, 0, /* 0x00 */
+ 0, 0xDFAB, 0, 0, 0, 0, 0, 0xC2A3, /* 0x00 */
+ 0, 0, 0, 0, 0xC0B9, 0, 0xDEFC, 0, /* 0x10 */
+ 0xC8C1, 0xB2F3, 0, 0xDFA5, 0, 0xC9E3, 0, 0, /* 0x10 */
+ 0, 0, 0xD4DC, 0xC2CE, 0xCCAF, 0xDFAC, 0, 0, /* 0x20 */
+ 0, 0, 0xBDC1, 0xBEF0, 0xC0BF, 0, 0xDFAD, 0xD6A7, /* 0x20 */
+ 0, 0, 0, 0, 0xEAB7, 0xEBB6, 0xCAD5, 0, /* 0x30 */
+ 0xD8FC, 0xB8C4, 0, 0xB9A5, 0, 0, 0xB7C5, 0xD5FE, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xB9CA, 0, 0, /* 0x40 */
+ 0xD0A7, 0xF4CD, 0, 0, 0, 0, 0, 0xC3F4, /* 0x40 */
+ 0, 0xBEC8, 0, 0, 0, 0xEBB7, 0xB0BD, 0xB0DC, /* 0x50 */
+ 0, 0xBDCC, 0, 0, 0, 0xB1D6, 0xB3A8, 0, /* 0x50 */
+ 0, 0, 0xB8D2, 0xC9A2, 0, 0, 0xB6D8, 0, /* 0x60 */
+ 0, 0, 0, 0xEBB8, 0xBEB4, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xC7C3, 0, 0xD5FB, 0xB5D0, 0, 0xB7F3, /* 0x70 */
+ 0xCAFD, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xC1B2, 0xB1D0, 0, 0, 0, 0xCEC4, /* 0x80 */
+ 0, 0, 0, 0, 0xB1F3, 0, 0, 0, /* 0x80 */
+ 0xECB3, 0xB0DF, 0, 0, 0, 0xECB5, 0, 0xF8AF, /* 0x90 */
+ 0, 0xC1CF, 0, 0xF5FA, 0xD0B1, 0, 0, 0xD5E5, /* 0x90 */
+ 0, 0xCED3, 0, 0, 0xBDEF, 0xB3E2, 0, 0xB8AB, /* 0xA0 */
+ 0, 0, 0, 0xEDBD, 0xD5B6, 0, 0, 0xCBB9, /* 0xA0 */
+ 0xD0C2, 0, 0, 0, 0, 0, 0, 0xB6CF, /* 0xB0 */
+ 0, 0xB7BD, 0, 0, 0xECB6, 0xCAA9, 0, 0, /* 0xB0 */
+ 0, 0xC5D4, 0, 0xECB9, 0xECB8, 0xC2C3, 0xECB7, 0, /* 0xC0 */
+ 0, 0, 0, 0xD0FD, 0xECBA, 0, 0xECBB, 0xD7E5, /* 0xC0 */
+ 0, 0, 0xECBC, 0, 0, 0, 0xECBD, 0xC6EC, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xBCC8, 0, 0, 0xC8D5, 0xB5A9, 0, /* 0xE0 */
+ 0xD6BC, 0xD4E7, 0, 0, 0xD1AE, 0xD0F1, 0xEAB8, 0xEAB9, /* 0xE0 */
+ 0xEABA, 0xBAB5, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xCDFA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEAC0, 0, 0xB0BA, 0xEABE, 0, 0, 0xC0A5, 0, /* 0x00 */
+ 0, 0, 0xEABB, 0, 0xB2FD, 0, 0xC3F7, 0xBBE8, /* 0x00 */
+ 0, 0, 0, 0xD2D7, 0xCEF4, 0xEABF, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xEAC3, 0, 0xD0C7, /* 0x10 */
+ 0xD3B3, 0, 0, 0, 0, 0xB4BA, 0, 0xC3C1, /* 0x20 */
+ 0xD7F2, 0, 0, 0, 0, 0xD5D1, 0, 0xCAC7, /* 0x20 */
+ 0, 0xEAC5, 0, 0, 0xEAC4, 0xEAC7, 0xEAC6, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xEACB, 0xCAB1, 0xBBCE, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xBDFA, 0, 0, 0xC9CE, 0, 0, 0xEACC, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEACF, /* 0x50 */
+ 0, 0, 0xCDED, 0, 0, 0xD6E7, 0, 0xEAC9, /* 0x50 */
+ 0, 0xEACE, 0, 0, 0xCEEE, 0, 0xBBDE, 0, /* 0x60 */
+ 0xB3BF, 0, 0, 0, 0, 0, 0xC6D5, 0xBEB0, /* 0x60 */
+ 0xCEFA, 0, 0, 0, 0xC7E7, 0, 0xBEA7, 0xEAD0, /* 0x70 */
+ 0, 0, 0xD6C7, 0, 0, 0, 0xC1C0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xEAD1, 0, 0, 0xCFBE, /* 0x80 */
+ 0xD4CE, 0xEACD, 0, 0, 0xEAD2, 0, 0, 0, /* 0x80 */
+ 0, 0xCAEE, 0, 0, 0, 0, 0xC5AF, 0xB0B5, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xEAD4, 0, 0, /* 0x90 */
+ 0, 0, 0xB3A9, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF4DF, 0, 0, 0xD4DD, 0, 0, 0xC4BA, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xB1A9, 0, 0, 0, /* 0xB0 */
+ 0, 0xE5DF, 0, 0, 0, 0, 0xEAD5, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xEACA, 0, 0xF8CF, 0xEABC, /* 0xC0 */
+ 0, 0xCFFE, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xEAD3, 0, /* 0xD0 */
+ 0, 0xCAEF, 0, 0xEAD6, 0xEAD7, 0xC6D8, 0, 0, /* 0xD0 */
+ 0xBFF5, 0, 0, 0, 0, 0, 0xEAD8, 0, /* 0xE0 */
+ 0, 0xEAD9, 0, 0, 0xC9B9, 0, 0, 0, /* 0xE0 */
+ 0xD4BB, 0, 0xC7FA, 0xD2B7, 0xB8FC, 0, 0, 0xEAC2, /* 0xF0 */
+ 0xCAE9, 0xB2DC, 0, 0, 0xC2FC, 0, 0xD4F8, 0xCCE6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7EE, 0, 0, 0xBBE1, 0, 0, 0, 0, /* 0x00 */
+ 0xD4C2, 0xD3D0, 0xEBC3, 0xC5F3, 0, 0xB7FE, 0, 0, /* 0x00 */
+ 0xEBD4, 0, 0, 0, 0xCBB7, 0xEBDE, 0, 0xC0CA, /* 0x10 */
+ 0, 0, 0, 0xCDFB, 0, 0xB3AF, 0, 0xC6DA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xEBFC, 0xEBCA, /* 0x20 */
+ 0xC4BE, 0, 0xCEB4, 0xC4A9, 0xB1BE, 0xD4FD, 0, 0xF8E8, /* 0x20 */
+ 0, 0xD6EC, 0, 0, 0xF8E0, 0xB6E4, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xD0E0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xB8CB, 0, /* 0x40 */
+ 0xE8BE, 0xC9BC, 0, 0, 0xE8BB, 0, 0xC0EE, 0xD0D3, /* 0x40 */
+ 0xB2C4, 0xB4E5, 0, 0xE8BC, 0, 0, 0xD5C8, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xB6C5, 0, 0xE8BD, 0xCAF8, /* 0x50 */
+ 0xB8DC, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xE8C2, 0, 0, 0xBABC, 0, 0xB1AD, /* 0x60 */
+ 0xBDDC, 0xB6AB, 0xEABD, 0xE8C3, 0, 0xE8C6, 0, 0xE8CB, /* 0x70 */
+ 0, 0, 0, 0, 0xE8CC, 0, 0xF8E9, 0xB0E5, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8C1, /* 0x80 */
+ 0, 0xCDF7, 0, 0xE8CA, 0, 0, 0, 0, /* 0x80 */
+ 0xCEF6, 0, 0, 0, 0, 0xD5ED, 0, 0xC1D6, /* 0x90 */
+ 0xE8C4, 0, 0xC3B6, 0, 0xB9FB, 0xD6A6, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xBFDD, /* 0xA0 */
+ 0xE8D2, 0, 0, 0xE8D7, 0, 0xE8D5, 0xBCDC, 0xBCCF, /* 0xB0 */
+ 0xE8DB, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xE8DE, 0, 0xE8DA, 0xB1FA, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB0D8, /* 0xC0 */
+ 0xC4B3, 0xB8CC, 0xC6E2, 0xC8BE, 0xC8E1, 0, 0, 0, /* 0xD0 */
+ 0xE8CF, 0xE8D4, 0xE8D6, 0, 0, 0xE8D8, 0xD7F5, 0, /* 0xD0 */
+ 0, 0, 0xE8DC, 0, 0, 0xB2E9, 0, 0, /* 0xE0 */
+ 0, 0xE8D1, 0, 0, 0xBCED, 0, 0, 0xBFC2, /* 0xE0 */
+ 0xE8CD, 0xD6F9, 0, 0xC1F8, 0xB2F1, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCAC1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE8D9, 0, 0, 0, 0, 0xD5A4, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xCBA8, 0, 0, 0, 0xC0F5, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xE8E9, 0, 0, /* 0x10 */
+ 0, 0xD0A3, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xE8F2, 0xD6EA, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE8E0, 0xE8E1, 0, 0, 0, 0, /* 0x30 */
+ 0xBACB, 0xB8F9, 0, 0, 0xB8F1, 0xD4D4, 0, 0, /* 0x30 */
+ 0xE8EE, 0xE8EC, 0xB9F0, 0xCCD2, 0xE8E6, 0xCEA6, 0xBFF2, 0, /* 0x40 */
+ 0xB0B8, 0xE8F1, 0xE8F0, 0, 0xD7C0, 0, 0xE8E4, 0, /* 0x40 */
+ 0xCDA9, 0xC9A3, 0, 0xBBB8, 0xBDDB, 0xE8EA, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE8F8, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xE8F5, 0, 0xCDB0, 0xE8F6, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xC1BA, 0, 0xE8E8, 0, 0xC3B7, 0xB0F0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8F4, /* 0x80 */
+ 0, 0, 0, 0xE8F7, 0, 0, 0, 0xB9A3, /* 0x90 */
+ 0xE8C5, 0, 0, 0, 0, 0xCCF5, 0, 0xE8C9, /* 0x90 */
+ 0, 0, 0xC9D2, 0, 0, 0, 0, 0xCEE0, /* 0xA0 */
+ 0xC0E6, 0, 0, 0, 0, 0xCBF3, 0, 0xCCDD, /* 0xA0 */
+ 0xD0B5, 0, 0, 0xCAE1, 0, 0xE8F3, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xC6FA, 0, 0, 0, /* 0xC0 */
+ 0, 0xC3DE, 0, 0xC6E5, 0, 0xB9F7, 0, 0, /* 0xC0 */
+ 0, 0, 0xB0F4, 0, 0, 0xD7D8, 0xE8C7, 0xD4E6, /* 0xD0 */
+ 0xBCAC, 0, 0xC5EF, 0, 0, 0, 0, 0xB6B0, /* 0xD0 */
+ 0xCCC4, 0, 0, 0xE9A6, 0, 0, 0, 0xD5BB, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xC9AD, 0, /* 0xE0 */
+ 0xE9A2, 0xC0E2, 0xC6DC, 0, 0, 0xBFC3, 0, 0, /* 0xF0 */
+ 0, 0xE8FE, 0xB9D7, 0, 0xE8FB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE9A4, 0, 0, 0, 0xD2CE, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xE9A3, 0, 0xD6B2, 0xD7B5, 0xE8E2, /* 0x00 */
+ 0xE9A7, 0, 0xBDB7, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xD2AC, 0, 0, 0, 0xE9B2, 0, 0, 0, /* 0x30 */
+ 0, 0xE9A9, 0, 0, 0, 0xB4AA, 0, 0xB4BB, /* 0x30 */
+ 0, 0, 0xE9AB, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xD1EE, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xB7E3, 0xD0A8, 0, 0, 0xE9A5, /* 0x50 */
+ 0, 0, 0xB3FE, 0, 0, 0xE9AC, 0xC0E3, 0, /* 0x50 */
+ 0xE9AA, 0, 0, 0xE9B9, 0, 0, 0xE9B8, 0, /* 0x60 */
+ 0xE8E5, 0, 0, 0xE9AE, 0, 0xD2B5, 0xE8FA, 0, /* 0x60 */
+ 0, 0xE9A8, 0, 0, 0, 0xBCAB, 0, 0xBFAC, /* 0x70 */
+ 0xE9B1, 0xE9BA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE9AF, 0, 0xB8C5, 0, 0, 0, 0xD3DC, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xE9C7, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xC0C6, 0xE9C5, 0, 0, /* 0x90 */
+ 0xE9B0, 0, 0, 0xE9BB, 0xB0F1, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE9BC, /* 0xA0 */
+ 0xD5A5, 0, 0xE8BF, 0xE9BE, 0, 0xE9BF, 0xC8D9, 0, /* 0xA0 */
+ 0, 0xE9C1, 0, 0, 0xC1F1, 0, 0, 0xC8B6, /* 0xB0 */
+ 0, 0, 0, 0xE9BD, 0, 0, 0, 0xE8E7, /* 0xB0 */
+ 0, 0xE9C2, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xE9C3, 0xB9B9, 0xE9B3, 0xC7B9, 0xE9B6, 0, /* 0xC0 */
+ 0xBBB1, 0, 0, 0, 0xE9C0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE8FD, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xE9CA, 0, 0, /* 0xE0 */
+ 0, 0, 0xE9CE, 0xBDB0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xB2DB, 0, 0xE9C8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7AE, 0xC0D6, 0, 0, 0xE8C8, 0, 0, /* 0x00 */
+ 0, 0, 0xB7AE, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xC2A5, 0, 0, 0, 0xE9CB, /* 0x10 */
+ 0xE9CC, 0xB1EA, 0, 0, 0, 0, 0xCAE0, 0xD5C1, /* 0x10 */
+ 0, 0xC4A3, 0, 0xD1F9, 0, 0, 0, 0, /* 0x20 */
+ 0xE9D8, 0, 0xBAE1, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE9D4, 0, 0, /* 0x30 */
+ 0xC6D3, 0xCAF7, 0xE8EB, 0, 0, 0xE9D7, 0xE9D0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xE9CF, 0, 0, 0xC7C1, /* 0x40 */
+ 0xE8E3, 0, 0, 0xC7C5, 0, 0, 0, 0, /* 0x40 */
+ 0xE9D2, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE9D9, 0xB3C8, 0, 0xE9D3, 0, 0, 0, 0xBBFA, /* 0x50 */
+ 0, 0xCFF0, 0xCDD6, 0, 0, 0xE9CD, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xB3F7, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xCCB4, 0, 0, 0, 0xCFAD, 0, 0, 0, /* 0x80 */
+ 0, 0xE8DF, 0, 0, 0, 0, 0xE9D5, 0, /* 0x80 */
+ 0xE9DC, 0xE9DB, 0, 0, 0xB5B5, 0, 0, 0xE9DE, /* 0x90 */
+ 0, 0, 0, 0, 0xE8ED, 0, 0, 0, /* 0x90 */
+ 0xE9D1, 0, 0xBCEC, 0xE9C9, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xE9DD, 0, 0xE9DF, 0xC3CA, 0, 0, 0xF8ED, /* 0xA0 */
+ 0, 0, 0, 0xE9C4, 0, 0, 0, 0, /* 0xB0 */
+ 0xC4FB, 0, 0, 0xBCF7, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xB9F1, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xE9D6, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE9B5, 0xE8CE, 0, 0xE8FC, 0xE9DA, 0xE8DD, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE9C6, /* 0xE0 */
+ 0xE8D3, 0, 0xE8C0, 0, 0xE9B4, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE8D0, 0, 0, 0, 0, /* 0xF0 */
+ 0xE9B7, 0, 0, 0xD3A3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC0B8, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xC8A8, 0, 0, 0, 0, 0xE9A1, /* 0x00 */
+ 0, 0, 0xE8EF, 0, 0, 0, 0xE9AD, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xE8F9, 0, /* 0x10 */
+ 0xC7B7, 0xB4CE, 0, 0xD0C0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xD3FB, 0, 0, 0, 0, 0xECA4, /* 0x30 */
+ 0, 0xECA5, 0xC6DB, 0, 0, 0xC7D5, 0xBFEE, 0, /* 0x30 */
+ 0, 0, 0, 0xECA6, 0, 0, 0xECA7, 0xD0AA, /* 0x40 */
+ 0, 0xC7B8, 0, 0, 0xB8E8, 0, 0, 0, /* 0x40 */
+ 0xC5B7, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xECA8, 0, 0, 0, 0, 0, 0xECA3, /* 0x50 */
+ 0, 0xBBB6, 0xD6B9, 0xD5FD, 0xB4CB, 0xB2BD, 0xCEE4, 0xC6E7, /* 0x60 */
+ 0, 0, 0xCDE1, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xCBEA, 0, 0, 0, 0, 0xC0FA, /* 0x70 */
+ 0xB9E9, 0xB4F5, 0, 0xCBC0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xE9E2, 0xE9E3, 0xD1EA, 0xE9E5, 0, 0xB4F9, 0, /* 0x80 */
+ 0, 0xD1B3, 0xCAE2, 0, 0, 0xE9E8, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xD6B3, 0, /* 0x90 */
+ 0xB2D0, 0, 0, 0xE9EA, 0, 0, 0xE9E6, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE9E4, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xE9EC, 0xE9E9, 0, 0, 0xE9E7, 0xE9EB, /* 0xA0 */
+ 0, 0, 0xBCDF, 0xECAF, 0, 0xB6CE, 0, 0xD2F3, /* 0xB0 */
+ 0, 0, 0xC9B1, 0xBFC7, 0, 0, 0, 0xB5EE, /* 0xB0 */
+ 0, 0xBBD9, 0, 0, 0, 0xD2E3, 0xC5B9, 0, /* 0xC0 */
+ 0, 0, 0, 0xCEE3, 0, 0xC4B8, 0, 0xC3BF, /* 0xC0 */
+ 0, 0, 0xB6BE, 0xD8B9, 0xB1C8, 0, 0xB1D1, 0xC5FE, /* 0xD0 */
+ 0, 0, 0, 0xC3AB, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xEBA4, 0xBAC1, 0, 0, 0, 0xCCBA, /* 0xE0 */
+ 0, 0, 0, 0xEBA5, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xEBA8, 0, 0, 0, 0xEBA6, 0, 0xEBA7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEBA9, 0xEBAB, 0, /* 0x00 */
+ 0xD5B1, 0, 0, 0, 0xEBAA, 0xEBAC, 0, 0xCACF, /* 0x00 */
+ 0xD8B5, 0xC3F1, 0, 0xC3A5, 0, 0xEBAD, 0xC4CA, 0, /* 0x10 */
+ 0xEBAE, 0xEBAF, 0xEBB0, 0xB7D5, 0, 0, 0, 0xB7FA, /* 0x10 */
+ 0, 0xEBB1, 0, 0xC6F8, 0xEBB3, 0, 0xBAA4, 0xD1F5, /* 0x20 */
+ 0xB0B1, 0, 0xEBB4, 0xC7E2, 0xEBB2, 0, 0xB5AA, 0xC2C8, /* 0x20 */
+ 0xC7E8, 0, 0xEBB5, 0, 0xCBAE, 0xE3DF, 0, 0, /* 0x30 */
+ 0xD3C0, 0, 0, 0, 0, 0xD9DB, 0, 0, /* 0x30 */
+ 0xCDA1, 0xD6AD, 0xC7F3, 0, 0, 0, 0xD9E0, 0, /* 0x40 */
+ 0, 0, 0xE3E2, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xCFAB, 0, 0, 0, 0xE3E0, 0xC9C7, 0, 0xBAB9, /* 0x50 */
+ 0, 0, 0, 0xD1B4, 0xE3E1, 0xC8EA, 0xB9AF, 0xBDAD, /* 0x50 */
+ 0xB3D8, 0xCEDB, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xE3E8, 0xE3E9, 0xCDF4, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xCCAD, 0, 0xBCB3, 0, 0xE3EA, 0, 0xE3EB, 0, /* 0x70 */
+ 0, 0xD0DA, 0, 0, 0, 0xC6FB, 0xB7DA, 0, /* 0x70 */
+ 0, 0xC7DF, 0xD2CA, 0xCED6, 0, 0xE3E4, 0xE3EC, 0, /* 0x80 */
+ 0xC9F2, 0xB3C1, 0, 0, 0xE3E7, 0, 0, 0xC6E3, /* 0x80 */
+ 0xE3E5, 0, 0, 0xEDB3, 0xE3E6, 0, 0, 0, /* 0x90 */
+ 0, 0xC9B3, 0, 0xC5E6, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xC3BB, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xC4AD, 0, 0xE3F0, 0xBEDA, 0, /* 0xA0 */
+ 0, 0xE3FB, 0xE3F5, 0xBAD3, 0, 0, 0, 0, /* 0xB0 */
+ 0xB7D0, 0xD3CD, 0, 0xD6CE, 0xD5D3, 0xB9C1, 0xD5B4, 0xD1D8, /* 0xB0 */
+ 0, 0, 0, 0, 0xD0B9, 0xC7F6, 0, 0, /* 0xC0 */
+ 0, 0xC8AA, 0xB2B4, 0, 0xC3DA, 0, 0, 0, /* 0xC0 */
+ 0xE3EE, 0, 0, 0xE3FC, 0xE3EF, 0xB7A8, 0xE3F7, 0xE3F4, /* 0xD0 */
+ 0, 0, 0, 0xB7BA, 0, 0, 0, 0, /* 0xD0 */
+ 0xE3F6, 0xC5DD, 0xB2A8, 0xC6FC, 0, 0xC4E0, 0, 0, /* 0xE0 */
+ 0xD7A2, 0, 0xC0E1, 0xE3F9, 0, 0, 0xE3FA, 0xE3FD, /* 0xE0 */
+ 0xCCA9, 0xE3F3, 0, 0xD3BE, 0, 0xB1C3 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4A7, 0, 0, 0xE4A6, /* 0x00 */
+ 0, 0, 0, 0xD1F3, 0xE4A3, 0, 0xE4A9, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCFB4, /* 0x10 */
+ 0, 0xE4A8, 0xE4AE, 0xC2E5, 0, 0, 0xB6B4, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xBDF2, 0, 0xE4A2, /* 0x20 */
+ 0, 0, 0xBAE9, 0xE4AA, 0, 0, 0xE4AC, 0, /* 0x20 */
+ 0, 0xB6FD, 0xD6DE, 0xE4B2, 0, 0xE4AD, 0, 0, /* 0x30 */
+ 0, 0xE4A1, 0, 0xBBEE, 0, 0xC7A2, 0xC5C9, 0, /* 0x30 */
+ 0, 0xC1F7, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD5E3, 0xBFA3, 0, 0xE4BA, 0, 0xE4B7, 0, /* 0x50 */
+ 0xE4BB, 0, 0, 0xE4BD, 0, 0, 0xC6D6, 0, /* 0x60 */
+ 0, 0xBAC6, 0xC0CB, 0, 0, 0, 0xB8A1, 0xE4B4, /* 0x60 */
+ 0, 0, 0, 0, 0xD4A1, 0, 0, 0xBAA3, /* 0x70 */
+ 0xBDFE, 0xE4A4, 0, 0, 0xE4BC, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xF8EF, 0, 0, 0xC4F9, 0, 0xE3FE, /* 0x80 */
+ 0xCFFB, 0xC9E6, 0, 0, 0xD3BF, 0, 0xCFD1, 0, /* 0x80 */
+ 0, 0xE4B3, 0, 0xE4B8, 0xE4B9, 0xCCE9, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xB8A2, 0xE4CA, 0, 0, 0xE4CC, 0xD1C4, /* 0xA0 */
+ 0, 0, 0xD2BA, 0, 0, 0xBAAD, 0, 0, /* 0xB0 */
+ 0xBAD4, 0, 0, 0, 0, 0, 0, 0xE4C3, /* 0xB0 */
+ 0xF8AD, 0, 0, 0, 0xD7CD, 0xE4C0, 0xCFFD, 0xE4BF, /* 0xC0 */
+ 0, 0, 0, 0xC1DC, 0xCCCA, 0, 0, 0, /* 0xC0 */
+ 0, 0xCAE7, 0, 0, 0, 0, 0xC4D7, 0, /* 0xD0 */
+ 0xCCD4, 0xE4C8, 0, 0, 0, 0xE4C7, 0xE4C1, 0, /* 0xD0 */
+ 0xE4C4, 0xB5AD, 0, 0, 0xD3D9, 0, 0xE4C6, 0, /* 0xE0 */
+ 0, 0, 0xC2D9, 0xD2F9, 0xB4E3, 0, 0xBBB4, 0, /* 0xE0 */
+ 0, 0xC9EE, 0, 0xB4BE, 0, 0xD4A8, 0xE4B5, 0xBBEC, /* 0xF0 */
+ 0, 0xD1CD, 0xC7B3, 0xCCED, 0xEDB5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7E5, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xE4CB, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xBBC1, 0xE4BE, 0, 0, 0xD3E5, 0, 0, /* 0x10 */
+ 0xC7FE, 0xB6C9, 0, 0xD4FC, 0xB2B3, 0xE4D7, 0xCED0, 0, /* 0x20 */
+ 0, 0xCEC2, 0, 0xE4CD, 0xB2E2, 0xCEBC, 0, 0xB8DB, /* 0x20 */
+ 0, 0, 0xE4D6, 0, 0xBFCA, 0, 0, 0, /* 0x30 */
+ 0xD3CE, 0, 0xC3EC, 0, 0, 0, 0xBBEB, 0, /* 0x30 */
+ 0, 0, 0, 0xC5C8, 0xE4D8, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xCDC4, 0xE4CF, 0, /* 0x40 */
+ 0, 0, 0, 0xE4D4, 0xE4D5, 0, 0xBAFE, 0, /* 0x50 */
+ 0xCFE6, 0, 0, 0xD5BF, 0, 0, 0xE4A5, 0xE4D2, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE4D0, 0, 0, 0xE4CE, 0xCCC0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE4D3, 0, /* 0x80 */
+ 0, 0xB8C8, 0, 0, 0, 0, 0, 0xE4E7, /* 0x80 */
+ 0xD4B4, 0, 0, 0, 0, 0, 0xD7BC, 0, /* 0x90 */
+ 0xE4DB, 0, 0, 0, 0xC1EF, 0xB9B5, 0, 0xE4E9, /* 0x90 */
+ 0, 0, 0xD2E7, 0, 0, 0xE4DF, 0, 0xE4E0, /* 0xA0 */
+ 0, 0, 0xCFAA, 0, 0, 0, 0, 0xCBDD, /* 0xA0 */
+ 0, 0xE4DA, 0xE4D1, 0, 0xE4E5, 0, 0xC8DC, 0xE4E3, /* 0xB0 */
+ 0, 0, 0xC4E7, 0xE4E2, 0, 0xE4E1, 0, 0, /* 0xB0 */
+ 0, 0xB3FC, 0xE4E8, 0, 0xB2D7, 0xC3F0, 0, 0xB5E1, /* 0xC0 */
+ 0, 0, 0, 0xD7CC, 0xB5D3, 0, 0xDCFE, 0xE4E6, /* 0xC0 */
+ 0, 0xBBAC, 0, 0xD7D2, 0xCCCF, 0xEBF8, 0, 0, /* 0xD0 */
+ 0, 0, 0xB9F6, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xBBA6, 0, 0, 0xD6CD, /* 0xE0 */
+ 0, 0, 0xC9F8, 0, 0xB5CE, 0, 0, 0xC2B1, /* 0xF0 */
+ 0xE4B0, 0xE4EF, 0, 0, 0, 0, 0, 0xC2FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD3E6, 0xC6AF, 0, 0, 0, 0xC6E1, 0, /* 0x00 */
+ 0, 0xE4F5, 0, 0, 0, 0, 0, 0xC2A9, /* 0x00 */
+ 0, 0, 0, 0, 0xD1DD, 0xE4EE, 0, 0, /* 0x10 */
+ 0, 0, 0xC5BD, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xC4AE, 0, 0xBABA, 0xC1B0, 0xE4ED, 0, 0, 0, /* 0x20 */
+ 0, 0xE4F6, 0xE4F4, 0xC2FE, 0xD7D5, 0xE4DD, 0, 0xE4F0, /* 0x20 */
+ 0, 0xCAFE, 0xD5C7, 0xD5C4, 0, 0, 0xE4F1, 0, /* 0x30 */
+ 0xBDA5, 0, 0, 0, 0, 0, 0xD1FA, 0xBDAC, /* 0x30 */
+ 0, 0xF2A3, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xC6C3, 0, 0, 0xBDE0, 0, 0, 0, /* 0x50 */
+ 0xC5CB, 0xE3ED, 0, 0xC7B1, 0, 0, 0xC2BA, 0, /* 0x50 */
+ 0, 0, 0xE4EA, 0, 0xC8F3, 0, 0xC1CA, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xCCB6, 0xB3B1, 0xE4B1, /* 0x60 */
+ 0xC0A3, 0, 0xE4FB, 0, 0xE4F3, 0, 0, 0xE4E4, /* 0x70 */
+ 0xE4FA, 0, 0xE4FD, 0, 0xE4FC, 0, 0, 0xE4B6, /* 0x70 */
+ 0xC9AC, 0, 0, 0, 0xB3CE, 0, 0xBDBD, 0xC0D4, /* 0x80 */
+ 0xB3BA, 0xE4F7, 0, 0, 0xE4F9, 0xE4F8, 0xC5EC, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0xBDA7, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xE4C5, 0xD4E8, 0, 0, 0xD4F3, 0, 0, 0xE5A2, /* 0xA0 */
+ 0, 0xEDB4, 0, 0, 0, 0, 0xE4AB, 0, /* 0xA0 */
+ 0, 0xB5ED, 0, 0xB0C4, 0, 0, 0xE5A4, 0, /* 0xB0 */
+ 0, 0xE5A3, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xBCA4, 0xD7C7, 0xE5A5, 0xC5A8, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xE5A1, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xCAAA, 0, 0, /* 0xD0 */
+ 0xC5A2, 0, 0, 0xF8D5, 0, 0, 0xE5A8, 0xBCC3, /* 0xD0 */
+ 0xE5A9, 0xE5A6, 0, 0, 0xCCCE, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xC0C4, 0, 0, 0xE5A7, 0xE5AA, /* 0xE0 */
+ 0xCEAB, 0xB1F5, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xBDA6, 0, 0xE3F8, 0, 0xC2CB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4DE, 0xE4C2, 0, /* 0x00 */
+ 0, 0xD0BA, 0, 0xE4C9, 0, 0, 0, 0xE4AF, /* 0x00 */
+ 0, 0xC6D9, 0, 0, 0, 0xB1F4, 0, 0, /* 0x10 */
+ 0xE3F2, 0, 0xE5AB, 0xE5AD, 0, 0xC1A4, 0, 0xE4EC, /* 0x10 */
+ 0xE4EB, 0, 0, 0xE5AC, 0, 0, 0, 0xE3F1, /* 0x20 */
+ 0xE4FE, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xF8D8, 0, 0xE4F2, 0, 0, 0xE5AF, 0, 0, /* 0x30 */
+ 0, 0xE5AE, 0, 0, 0, 0, 0xC0BD, 0, /* 0x30 */
+ 0, 0, 0, 0xE3E3, 0xE4DC, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xB9E0, 0, 0, 0, /* 0x40 */
+ 0, 0xC8F7, 0, 0, 0, 0xC0EC, 0, 0, /* 0x50 */
+ 0xCCB2, 0, 0, 0, 0, 0xE5B0, 0xE5B1, 0, /* 0x50 */
+ 0, 0, 0, 0xCDE5, 0xC2D0, 0, 0, 0xE4D9, /* 0x60 */
+ 0, 0, 0, 0xBBF0, 0xECE1, 0, 0, 0, /* 0x60 */
+ 0xBBD2, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xBEC4, 0, 0, 0, 0xD7C6, 0, 0xD4D6, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xEAC1, 0, 0, /* 0x80 */
+ 0, 0, 0xB4B6, 0, 0, 0, 0xD1D7, 0, /* 0x80 */
+ 0, 0, 0xB3B4, 0, 0xC8B2, 0xBFBB, 0xECC0, 0, /* 0x90 */
+ 0, 0xD6CB, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xECC5, 0xBEE6, 0xCCBF, 0xC5DA, 0xBEBC, /* 0xA0 */
+ 0, 0xECC6, 0, 0xB1FE, 0, 0, 0, 0xECC4, /* 0xB0 */
+ 0xD5A8, 0, 0, 0xECC2, 0, 0, 0, 0, /* 0xB0 */
+ 0xECC3, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xC1D2, 0, 0xECC8, 0, 0, 0, 0, 0xCEDA, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xBAE6, 0xC0D3, 0, 0, 0, 0, 0, 0xD1CC, /* 0xD0 */
+ 0, 0, 0, 0, 0xBFBE, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCFA9, /* 0xE0 */
+ 0, 0, 0, 0, 0xCCFE, 0, 0, 0xCDE9, /* 0xF0 */
+ 0, 0xC5EB, 0, 0, 0, 0xB7E9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xD1C9, 0xBAB8, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xECC9, 0, 0, 0xECCA, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xB1BA, 0xB7D9, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xCEDE, 0, 0, 0, 0, 0xBDB9, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xECCC, /* 0x20 */
+ 0xD1E6, 0xECCD, 0, 0, 0, 0, 0xC8BB, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xECD1, 0, 0, /* 0x40 */
+ 0, 0xC1B6, 0xECD3, 0, 0xBBCD, 0, 0xBCE5, 0, /* 0x40 */
+ 0, 0, 0xECBF, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xECCF, 0, 0xC9B7, 0, /* 0x50 */
+ 0, 0, 0xDCE4, 0, 0xC3BA, 0xBBC0, 0xECE3, 0xD5D5, /* 0x60 */
+ 0xECD0, 0xB7B3, 0, 0, 0xECBE, 0, 0xD6F3, 0, /* 0x60 */
+ 0, 0, 0xECD2, 0xECCE, 0, 0, 0, 0, /* 0x70 */
+ 0xECD4, 0, 0xECD5, 0, 0, 0xC9BF, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xCFA8, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD0DC, 0, 0, 0, 0, 0xD1AC, /* 0x80 */
+ 0, 0, 0xD3AB, 0, 0xC8DB, 0, 0, 0xECC1, /* 0x90 */
+ 0xECD6, 0xCEF5, 0, 0, 0, 0, 0, 0xCAEC, /* 0x90 */
+ 0xECDA, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xECD9, 0, 0, 0, 0xB0BE, 0, 0, 0, /* 0xA0 */
+ 0, 0xC8C8, 0, 0xECD7, 0, 0xECD8, 0, 0, /* 0xB0 */
+ 0, 0xECE4, 0, 0, 0, 0, 0xB3E3, 0, /* 0xB0 */
+ 0, 0xECC7, 0, 0xC8BC, 0, 0, 0, 0, /* 0xC0 */
+ 0xB5C6, 0, 0, 0, 0, 0, 0xC1C7, 0, /* 0xC0 */
+ 0, 0, 0xC9D5, 0, 0xECDC, 0xD1E0, 0, 0, /* 0xD0 */
+ 0, 0xCCCC, 0, 0, 0xECCB, 0, 0, 0xD3AA, /* 0xD0 */
+ 0xECDB, 0, 0, 0, 0, 0xD4EF, 0xB2D3, 0xECDD, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xD6F2, 0xDBC6, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xBBE2, 0, 0, 0, /* 0xF0 */
+ 0, 0xECDE, 0, 0, 0xBDFD, 0, 0xECE2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB1AC, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xCBB8, 0, 0, /* 0x00 */
+ 0xC2AF, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xC0C3, 0, 0xECDF, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xECE0, 0, 0xD7A6, 0, 0xC5C0, 0xD5F9, 0, 0, /* 0x20 */
+ 0xEBBC, 0, 0xCEAA, 0, 0, 0xBEF4, 0xB8B8, 0, /* 0x30 */
+ 0xB0D6, 0xB5F9, 0xD2AF, 0xD8B3, 0, 0xCBAC, 0xB6FB, 0xE3DD, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC6AC, /* 0x40 */
+ 0xB0E6, 0, 0, 0, 0xC5C6, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xEBBA, 0, 0, 0, 0xEBBB, 0, /* 0x50 */
+ 0xEBB9, 0xD1C0, 0, 0xC5A3, 0, 0xEAF2, 0, 0xC4B2, /* 0x50 */
+ 0, 0xC4B5, 0xC0CE, 0, 0, 0, 0xEAF3, 0xC4C1, /* 0x60 */
+ 0, 0xCEEF, 0, 0, 0, 0, 0xEAF0, 0xEAF4, /* 0x60 */
+ 0, 0, 0xC9FC, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xCCD8, 0, 0, 0, 0xC7A3, 0xEAF5, 0xEAF6, /* 0x70 */
+ 0xCFAC, 0xC0E7, 0, 0, 0xEAF7, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xEAF8, 0, 0xEAF9, 0, 0xEAFA, /* 0x80 */
+ 0, 0, 0xEAFB, 0, 0, 0, 0xDCFD, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEAF1, /* 0x90 */
+ 0, 0, 0xB6BF, 0, 0, 0, 0, 0xCEFE, /* 0xA0 */
+ 0, 0, 0, 0, 0xC8AE, 0xE1EB, 0, 0xB7B8, /* 0xA0 */
+ 0xE1EC, 0, 0, 0, 0xE1ED, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xD7B4, 0xE1F1, 0xBFF1, 0xE1F0, 0xB5D2, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xE1F3, 0xE1F2, 0, /* 0xC0 */
+ 0xBAFC, 0, 0xE1F4, 0, 0, 0, 0, 0xB9B7, /* 0xD0 */
+ 0, 0xBED1, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xBADD, 0xBDC6, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xE1F5, 0xE1F7, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE1FC, 0xE1F9, 0, 0, 0xE1FA, /* 0xF0 */
+ 0xC0EA, 0xCFC1, 0xE1FE, 0xE2A1, 0xC0C7, 0xB1B7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE1FB, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE2A5, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xE2A3, 0, 0, 0xB2FE, 0xE2A2, /* 0x10 */
+ 0, 0xD5F8, 0, 0xC3CD, 0xB2C2, 0xE2A7, 0xE2A6, 0, /* 0x10 */
+ 0, 0, 0xE2A9, 0, 0, 0xE2AB, 0, 0, /* 0x20 */
+ 0, 0xD0C9, 0xD6ED, 0xC3A8, 0xE2AC, 0, 0, 0, /* 0x20 */
+ 0, 0xE2AE, 0, 0, 0xBAEF, 0, 0xD3CC, 0xE9E0, /* 0x30 */
+ 0xE2AD, 0xE2AA, 0, 0xE1F8, 0, 0, 0xBBAB, 0xD4B3, /* 0x30 */
+ 0, 0xE1EF, 0, 0, 0xD3FC, 0xCAA8, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE2B0, 0, 0, /* 0x40 */
+ 0xE2AF, 0, 0xE9E1, 0, 0, 0, 0, 0xE2B1, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xE2B2, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xB6C0, 0, 0xE1F6, 0xE1FD, 0xE2B3, 0, 0, 0xE2B4, /* 0x60 */
+ 0xC4FC, 0, 0xBBF1, 0, 0, 0xC1D4, 0, 0xE1EE, /* 0x70 */
+ 0xCADE, 0, 0xCCA1, 0xCFD7, 0xE2A8, 0, 0xE2B5, 0, /* 0x70 */
+ 0xE2A4, 0, 0, 0, 0xD0FE, 0, 0, 0xC2CA, /* 0x80 */
+ 0, 0xD3F1, 0, 0xCDF5, 0, 0, 0xE7E0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xBEC1, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7E4, /* 0x90 */
+ 0, 0, 0xE7E3, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xCDE6, 0, 0xC3B5, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xC1E1, 0xE7E9, 0, 0, 0, 0xE7E8, /* 0xB0 */
+ 0, 0, 0, 0xB2A3, 0, 0, 0, 0, /* 0xB0 */
+ 0xE7EA, 0, 0xE7E6, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xE7EC, 0xE7EB, 0xC9BA, 0, 0, 0xD5E4, 0, 0xE7E5, /* 0xC0 */
+ 0xB7A9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE7EE, 0, 0, 0, 0, 0xE7F3, 0, /* 0xD0 */
+ 0xD6E9, 0, 0, 0, 0, 0xE7ED, 0, 0xE7F2, /* 0xE0 */
+ 0, 0xE7F1, 0, 0, 0, 0xB0E0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0xCFD6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7F2, 0, 0xC0C5, 0xC0ED, 0, /* 0x00 */
+ 0, 0xC1F0, 0xE7F0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xE8A2, 0xE8A1, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xD7C1, 0, 0, 0xE7FA, 0xE7F9, 0, /* 0x20 */
+ 0xE7FB, 0, 0xE7F7, 0, 0xE7FE, 0, 0xE7FD, 0, /* 0x20 */
+ 0xE7FC, 0, 0, 0xC1D5, 0xC7D9, 0xC5FD, 0xC5C3, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE7F5, /* 0x30 */
+ 0, 0xE8A3, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xE7E2, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xE8A6, 0, 0xE8A5, /* 0x50 */
+ 0, 0xE8A7, 0xBAF7, 0xE7F8, 0xE8A4, 0, 0xC8F0, 0xC9AA, /* 0x50 */
+ 0, 0, 0, 0xCBF6, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xD3A8, 0xC2EA, 0, 0, 0xE8A9, 0, 0, /* 0x60 */
+ 0xB9E5, 0, 0, 0, 0, 0, 0xD1FE, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xE8AA, 0, /* 0x70 */
+ 0xE8AD, 0xE8AE, 0, 0xC1A7, 0, 0, 0, 0xE8AF, /* 0x80 */
+ 0, 0xE7F6, 0, 0xE8B0, 0, 0, 0, 0, /* 0x80 */
+ 0xE8B4, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xE8AB, 0, 0xE8B1, 0, /* 0x90 */
+ 0, 0, 0, 0xE7E1, 0, 0, 0xE8A8, 0xE8B5, /* 0xA0 */
+ 0xE8B2, 0xE8B3, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xBBB7, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE8B7, 0, 0, 0xE7F4, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xC7ED, 0, 0, 0, 0, 0xE7E7, /* 0xC0 */
+ 0, 0, 0, 0, 0xE8AC, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE8B6, 0, 0xB9CF, 0, 0xF0AC, 0, /* 0xD0 */
+ 0xF0AD, 0, 0xC6B0, 0xB0EA, 0xC8BF, 0, 0xCDDF, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xCECD, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xEAB2, 0, 0xC6BF, 0xB4C9, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEAB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD5E7, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xEAB1, 0xDDF9, 0, 0xEAB4, /* 0x00 */
+ 0, 0xEAB5, 0, 0xEAB6, 0, 0, 0, 0, /* 0x10 */
+ 0xB8CA, 0xDFB0, 0xC9F5, 0, 0xCCF0, 0, 0, 0xC9FA, /* 0x10 */
+ 0, 0, 0, 0xB2FA, 0, 0xC9FB, 0, 0, /* 0x20 */
+ 0xD3C3, 0xCBA6, 0, 0xB8A6, 0xF0AE, 0xB1C2, 0, 0xE5B8, /* 0x20 */
+ 0xCCEF, 0xD3C9, 0xBCD7, 0xC9EA, 0, 0, 0, 0xC4D0, /* 0x30 */
+ 0xB5E9, 0, 0xEEAE, 0, 0, 0, 0xE7DE, 0, /* 0x30 */
+ 0xEEAF, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xEEB2, 0, 0, 0xEEB1, 0xBDE7, 0, 0xEEB0, 0xCEB7, /* 0x40 */
+ 0, 0, 0, 0, 0xC5CF, 0, 0, 0, /* 0x50 */
+ 0, 0xC1F4, 0xDBCE, 0xEEB3, 0xD0F3, 0xC4B6, 0, 0, /* 0x50 */
+ 0, 0, 0xB1CF, 0, 0, 0xC2D4, 0xC6E8, 0, /* 0x60 */
+ 0, 0, 0xB7AC, 0xBBAD, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xEEB4, 0, 0, 0, 0xB5B1, 0, /* 0x70 */
+ 0xBBFB, 0xEEB5, 0, 0, 0, 0, 0, 0xE7DC, /* 0x70 */
+ 0, 0, 0, 0xEEB6, 0, 0, 0xBDAE, 0xB3EB, /* 0x80 */
+ 0, 0, 0xB5FE, 0xF1E2, 0, 0, 0, 0xCAE8, /* 0x80 */
+ 0, 0xD2C9, 0xF0DA, 0, 0xF0DB, 0, 0, 0, /* 0x90 */
+ 0, 0xB8ED, 0xBECE, 0, 0, 0xF0DE, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF0E0, 0xB0CC, 0xBDEA, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xD2DF, 0, 0, 0, 0, /* 0xA0 */
+ 0xF0E6, 0xF0E5, 0xC6A3, 0xF0E1, 0xF0E2, 0xB4C3, 0, 0, /* 0xB0 */
+ 0xF0E3, 0xD5EE, 0, 0, 0xCCDB, 0xBED2, 0xBCB2, 0, /* 0xB0 */
+ 0, 0, 0xF0E8, 0xF0E7, 0xF0E4, 0xB2A1, 0, 0xF9A1, /* 0xC0 */
+ 0, 0, 0xC8AC, 0, 0, 0xF0EA, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xD6CC, 0xBADB, 0, 0, /* 0xD0 */
+ 0xB6BB, 0xBEB7, 0, 0xCDB4, 0, 0, 0xC6A6, 0, /* 0xD0 */
+ 0, 0, 0xC1A1, 0xF0EB, 0xF0EE, 0, 0xF0ED, 0xF0F0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xCCB5, 0xF0F2, 0, 0, 0xB3D5, 0, 0, 0, /* 0xF0 */
+ 0, 0xB1D4, 0, 0, 0xF0F3, 0, 0, 0xF0F4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0F6, 0xB4E1, 0xF0E9, 0xF0F1, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xF0FA, 0xB7E8, 0xF0F8, 0xD1F1, 0, 0, /* 0x00 */
+ 0xF0F5, 0, 0, 0xBBBE, 0, 0xF0FD, 0, 0, /* 0x10 */
+ 0, 0xF0FE, 0, 0xF1A1, 0, 0, 0xF0F9, 0xCEC1, /* 0x10 */
+ 0xF1A4, 0xB4AF, 0xF1A3, 0, 0xC1F6, 0xF0FB, 0xCADD, 0xC5B1, /* 0x20 */
+ 0, 0xB4F1, 0, 0, 0, 0xF1A6, 0, 0, /* 0x20 */
+ 0xF1A7, 0, 0, 0xF1AC, 0xD5CE, 0xF1A9, 0, 0, /* 0x30 */
+ 0xC8B3, 0, 0, 0xF0FC, 0xF1A2, 0, 0, 0, /* 0x30 */
+ 0xF1A5, 0, 0xC1C6, 0xF1AA, 0, 0, 0xF0EC, 0xF0EF, /* 0x40 */
+ 0, 0xF0F7, 0, 0, 0xB0A9, 0xF1AD, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF1AF, 0, 0xF1B1, 0, /* 0x50 */
+ 0xF0DD, 0, 0, 0, 0xF1B0, 0, 0, 0xB1F1, /* 0x50 */
+ 0, 0, 0xD1F7, 0, 0xF0DC, 0xD6A2, 0, 0xF0DF, /* 0x60 */
+ 0, 0xF1AE, 0, 0, 0xD1A2, 0xF1A8, 0xF1AB, 0xF1B3, /* 0x60 */
+ 0xD3B8, 0xCCB1, 0xF1B2, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xB9EF, 0, 0, 0xB5C7, 0xB7A2, 0xB0D7, 0xB0D9, 0, /* 0x70 */
+ 0, 0, 0xD4ED, 0, 0xB5C4, 0, 0xBDD4, 0xBBCA, /* 0x80 */
+ 0xF0A7, 0, 0, 0xB8DE, 0, 0, 0xF0A8, 0, /* 0x80 */
+ 0, 0, 0, 0xF0A9, 0, 0, 0xCDEE, 0, /* 0x90 */
+ 0, 0xF0AA, 0xB0A8, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xF0AB, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xC6A4, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xF1E5, 0, 0, 0, /* 0xB0 */
+ 0xF1E4, 0, 0xD6E5, 0, 0, 0, 0, 0xC3F3, /* 0xB0 */
+ 0, 0, 0xD3DB, 0, 0, 0xD6D1, 0xC5E8, 0, /* 0xC0 */
+ 0xD3AF, 0, 0xD2E6, 0, 0, 0xEEC1, 0xB0BB, 0, /* 0xC0 */
+ 0, 0, 0xBAD0, 0, 0xBFF8, 0, 0, 0xB5C1, /* 0xD0 */
+ 0, 0, 0, 0xCAA2, 0, 0, 0xD5B5, 0xC3CB, /* 0xD0 */
+ 0, 0xBEA1, 0, 0xBCE0, 0xC5CC, 0xEEC2, 0, 0xC2AC, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xC4BF, 0xB6A2, /* 0xE0 */
+ 0, 0xEDEC, 0xC3A4, 0, 0xD6B1, 0, 0, 0, /* 0xF0 */
+ 0xCFE0, 0xEDEF, 0, 0, 0xC5CE, 0, 0xB6DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCAA1, 0, 0, 0xEDED, 0, 0, 0xEDF0, /* 0x00 */
+ 0xEDF1, 0xC3BC, 0, 0xBFB4, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xEDF4, 0xEDF2, 0, 0, 0, 0, 0xD5E6, /* 0x10 */
+ 0xC3DF, 0, 0xEDF3, 0, 0, 0, 0xEDF6, 0, /* 0x20 */
+ 0xD5A3, 0xD1A3, 0, 0, 0, 0xEDF5, 0, 0xC3D0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xEDF7, 0xBFF4, 0xBEEC, /* 0x30 */
+ 0xEDF8, 0, 0xCCF7, 0, 0xD1DB, 0, 0, 0, /* 0x30 */
+ 0xD7C5, 0, 0, 0xEDFC, 0, 0, 0, 0xEDFB, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF8CA, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0xEDFD, 0xBEA6, 0xD5F6, 0, 0xEDF9, 0, /* 0x50 */
+ 0, 0xCBAF, 0xEEA1, 0xB6BD, 0, 0xEEA2, 0xC4C0, 0, /* 0x60 */
+ 0xEDFE, 0, 0, 0xBDDE, 0xB2C7, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB6C3, 0, 0, 0, 0xEEA5, 0xD8BA, 0xEEA3, /* 0x70 */
+ 0xEEA6, 0, 0, 0, 0xC3E9, 0xB3F2, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xEEA7, 0xEEA4, 0xCFB9, 0, /* 0x80 */
+ 0, 0xEEA8, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xEDEE, 0, 0, 0, 0, 0, 0xC2F7, 0xEEA9, /* 0x90 */
+ 0xEEAA, 0, 0xDEAB, 0, 0, 0xC6B3, 0, 0xC7C6, /* 0xA0 */
+ 0, 0, 0xB5C9, 0, 0xCBB2, 0xF8D1, 0, 0, /* 0xA0 */
+ 0xEEAB, 0, 0, 0xCDAB, 0, 0xEEAC, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xD5B0, 0xEDFA, 0xEEAD, 0, 0xF6C4, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF8D7, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xDBC7, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB4A3, /* 0xD0 */
+ 0, 0, 0xD6F5, 0xC3AC, 0xF1E6, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xCAB8, 0xD2D3, 0, 0xD6AA, 0, 0xEFF2, /* 0xE0 */
+ 0, 0xBED8, 0, 0, 0xEFF3, 0xB6CC, 0xB0AB, 0xBDC3, /* 0xE0 */
+ 0, 0, 0, 0xCAAF, 0, 0, 0, 0, /* 0xF0 */
+ 0xEDB7, 0, 0, 0, 0, 0xCEF9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC9B0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xEDB9, 0, 0, 0xC6F6, 0xBFB3, 0, 0, /* 0x00 */
+ 0, 0xEDBC, 0xC5F8, 0, 0xD1D0, 0, 0, 0, /* 0x10 */
+ 0xEDBB, 0, 0, 0, 0, 0xEDC0, 0, 0xEDC4, /* 0x10 */
+ 0, 0, 0, 0xEDC8, 0, 0xEDC6, 0xEDCE, 0xD5E8, /* 0x20 */
+ 0, 0xEDC9, 0, 0, 0xEDC7, 0xEDBE, 0, 0, /* 0x20 */
+ 0xC5E9, 0, 0, 0, 0xC6C6, 0, 0, 0xC9E9, /* 0x30 */
+ 0xD4D2, 0xEDC1, 0, 0, 0xEDC5, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xF9A7, 0, 0xB9E8, 0, 0xEDD0, /* 0x40 */
+ 0, 0, 0, 0, 0xEDD1, 0, 0xEDCA, 0, /* 0x40 */
+ 0xEDCF, 0, 0xCEF8, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xCFF5, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xEDCC, 0, 0, 0, /* 0x60 */
+ 0xEDBA, 0, 0xEDD2, 0xC1F2, 0xD3B2, 0xEDCB, 0xF8E6, 0xD1E2, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xC5F0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xEDD6, /* 0x80 */
+ 0, 0xB5EF, 0, 0, 0xC2B5, 0, 0xCBE9, 0, /* 0x80 */
+ 0, 0xB1AE, 0, 0xEDD4, 0, 0, 0, 0xCDEB, /* 0x90 */
+ 0xB5E2, 0, 0xEDD5, 0, 0, 0, 0, 0xB5FA, /* 0x90 */
+ 0, 0xEDD8, 0, 0xEDD9, 0, 0xEDDC, 0, 0xB1CC, /* 0xA0 */
+ 0, 0xCBB6, 0, 0, 0, 0xEDB8, 0, 0, /* 0xA0 */
+ 0xC5F6, 0xBCEE, 0xEDDA, 0xCCBC, 0xB2EA, 0, 0, 0, /* 0xB0 */
+ 0xEDBF, 0xEDDB, 0xC8B7, 0, 0xC2EB, 0, 0xC4EB, 0, /* 0xB0 */
+ 0, 0xB4C5, 0, 0, 0, 0xB0F5, 0, 0, /* 0xC0 */
+ 0, 0xEDDF, 0xC0DA, 0xB4E8, 0, 0, 0, 0, /* 0xC0 */
+ 0xC5CD, 0, 0, 0, 0xEDDD, 0xBFC4, 0, 0, /* 0xD0 */
+ 0, 0xEDDE, 0xD7A9, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xEDD7, 0, 0, 0, 0xEDD3, /* 0xE0 */
+ 0xC4A5, 0, 0, 0, 0xEDE0, 0, 0, 0xEDB6, /* 0xE0 */
+ 0, 0, 0xEDE1, 0, 0xEDE3, 0, 0, 0xC1D7, /* 0xF0 */
+ 0, 0, 0xBBC7, 0, 0, 0xEDCD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDB8, 0, 0, 0, 0xEDE2, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xB4A1, 0, /* 0x00 */
+ 0, 0, 0, 0xEDE4, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xB0AD, 0, 0, 0, 0, 0xEDE6, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xEDE5, 0, 0xBFF3, 0, /* 0x20 */
+ 0, 0, 0xEDC2, 0xC0F9, 0xB7AF, 0, 0, 0, /* 0x20 */
+ 0, 0xEDC3, 0, 0, 0xEDE7, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xCABE, 0xECEA, 0, 0, 0xC9E7, 0, /* 0x30 */
+ 0xECEB, 0xC6EE, 0, 0, 0, 0, 0xECEC, 0, /* 0x40 */
+ 0xC6ED, 0xECED, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xECF0, 0, 0, 0xD7E6, 0xECF3, /* 0x50 */
+ 0, 0, 0xECF1, 0xECEE, 0xECEF, 0xD7A3, 0xC9F1, 0xCBEE, /* 0x50 */
+ 0xECF4, 0, 0, 0, 0, 0xCFE9, 0, 0xECF6, /* 0x60 */
+ 0xC6B1, 0, 0, 0, 0, 0xBCC0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xECF7, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xD9F7, 0xBDFB, 0, 0, 0xC2BB, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xECF9, 0, 0, 0xBBF6, 0xECF5, 0xB8A3, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xECFA, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xF8FA, 0xECFB, /* 0xA0 */
+ 0, 0, 0xECF8, 0, 0, 0, 0xC0F1, 0, /* 0xA0 */
+ 0xECF2, 0xB5BB, 0, 0xECFC, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xD3ED, 0xD8AE, 0, 0, 0xC7DD, 0xBACC, 0, /* 0xB0 */
+ 0xD0E3, 0xCBBD, 0, 0xCDBA, 0, 0, 0xB8D1, 0, /* 0xC0 */
+ 0, 0xB1FC, 0, 0xC7EF, 0, 0xF9A6, 0, 0, /* 0xC0 */
+ 0, 0xBFC6, 0xC3EB, 0, 0, 0xEFF5, 0, 0, /* 0xD0 */
+ 0xC3D8, 0, 0, 0, 0, 0, 0, 0xD7E2, /* 0xD0 */
+ 0, 0, 0, 0xEFF7, 0xB3D3, 0, 0xC7D8, 0xD1ED, /* 0xE0 */
+ 0, 0xD6C8, 0, 0xEFF8, 0, 0xEFF6, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xBDD5, 0, 0, 0xD2C6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCFA1, 0, 0xEFFC, 0xEFFB, 0, 0, 0xEFF9, 0, /* 0x00 */
+ 0, 0, 0, 0xB3CC, 0, 0xC9D4, 0xCBB0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xEFFE, 0, 0, 0xB0DE, /* 0x10 */
+ 0, 0, 0xD6C9, 0, 0, 0, 0xEFFD, 0, /* 0x10 */
+ 0xB3ED, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xD6D6, 0, /* 0x20 */
+ 0, 0xB3C6, 0, 0, 0, 0, 0, 0xF0A2, /* 0x30 */
+ 0, 0xF0A1, 0, 0xB5BE, 0xBCDA, 0xBBFC, 0, 0xB8E5, /* 0x30 */
+ 0xF8B6, 0, 0, 0, 0, 0, 0xC4C2, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF6D5, 0xBBFD, 0xD3B1, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCBEB, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xF0A3, 0xBBE0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xCEC8, 0, 0xF8BE, 0, 0, 0, 0, /* 0x60 */
+ 0xF0A6, 0, 0, 0, 0xD1A8, 0, 0xBEBF, 0, /* 0x70 */
+ 0xF1B6, 0xF1B7, 0xBFD5, 0, 0, 0, 0, 0xB4A9, /* 0x70 */
+ 0xF1B8, 0xCDBB, 0, 0, 0xD5AD, 0, 0xF1B9, 0, /* 0x80 */
+ 0xF1BA, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xD2A4, 0xD6CF, 0, 0, 0xF1BB, 0xBDD1, 0xB4B0, /* 0x90 */
+ 0xBEBD, 0, 0, 0, 0, 0, 0, 0xBFDF, /* 0x90 */
+ 0xF1BD, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xF1BF, 0xCED1, 0xCDDD, 0, 0xF1BE, 0, 0xC7EE, 0, /* 0xA0 */
+ 0, 0, 0, 0xF1C1, 0, 0, 0xF1C0, 0, /* 0xB0 */
+ 0, 0, 0xBFFA, 0, 0, 0, 0, 0xC1FE, /* 0xB0 */
+ 0, 0, 0, 0, 0xB4DC, 0xC7CF, 0, 0xF1BC, /* 0xC0 */
+ 0xD4EE, 0, 0xC7D4, 0xC1A2, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xD5BE, 0, 0, 0, 0, 0, 0xBEB9, /* 0xD0 */
+ 0xD5C2, 0, 0, 0xBFA2, 0, 0xCDAF, 0xF1B5, 0, /* 0xE0 */
+ 0, 0, 0xCAFA, 0, 0, 0xBDDF, 0, 0xB6CB, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xBEBA, 0, /* 0xF0 */
+ 0, 0xD6F1, 0xF3C3, 0, 0, 0xF3C4, 0, 0xB8CD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF3C7, 0, 0xB0CA, 0, /* 0x00 */
+ 0xF3C5, 0, 0xF3C9, 0xCBF1, 0, 0, 0, 0xF3CB, /* 0x00 */
+ 0, 0xD0A6, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF3CF, 0, 0xB5D1, 0, 0, 0xF3D7, 0, /* 0x10 */
+ 0xF3D2, 0, 0, 0, 0xF3D4, 0xF3D3, 0xB7FB, 0, /* 0x20 */
+ 0xB1BF, 0, 0xF3CE, 0xF3CA, 0xB5DA, 0, 0xF3D0, 0, /* 0x20 */
+ 0, 0xF3D1, 0, 0xF3D5, 0, 0, 0, 0, /* 0x30 */
+ 0xF3CD, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF3DA, 0xB1CA, 0xF3CC, /* 0x40 */
+ 0, 0xB5C8, 0, 0xBDEE, 0xF3DC, 0, 0, 0xB7A4, /* 0x40 */
+ 0xBFF0, 0xF9A8, 0xCDB2, 0, 0xB4F0, 0, 0xB2DF, 0, /* 0x50 */
+ 0xF3D8, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF3DE, 0, 0xF3E1, 0, 0, 0, 0, 0xF3C8, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xF3DF, 0, /* 0x60 */
+ 0, 0xF3E3, 0xF3E2, 0, 0, 0xF3DB, 0, 0xBFEA, /* 0x70 */
+ 0, 0, 0, 0xF3E0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF3EB, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xBCE3, 0, 0xB9BF, 0, 0xF3DD, /* 0x80 */
+ 0xF3E4, 0, 0, 0, 0xB2AD, 0xBBFE, 0, 0xCBE3, /* 0x90 */
+ 0, 0, 0, 0, 0xF3ED, 0xF3E9, 0, 0, /* 0x90 */
+ 0, 0xB9DC, 0xF3EE, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xF3E8, 0xBCFD, 0, 0, /* 0xA0 */
+ 0, 0xCFE4, 0, 0, 0xF3F0, 0, 0, 0, /* 0xB0 */
+ 0xF3E7, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xBDDA, 0xF3F2, 0, 0, 0xB7B6, 0, 0xD7AD, 0xC6AA, /* 0xC0 */
+ 0, 0xD6FE, 0, 0xF3E6, 0xF3F3, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xB8DD, 0xF3F5, 0, 0, 0xF3F4, 0, 0, /* 0xD0 */
+ 0, 0xB4DB, 0, 0, 0xF3C6, 0xF3F6, 0xF3F7, 0, /* 0xE0 */
+ 0, 0xC9B8, 0xF3F8, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF3D9, 0, 0, 0, 0xC5F1, /* 0xF0 */
+ 0, 0, 0, 0, 0xF3FB, 0, 0xF3FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF3E5, 0, 0, 0, 0, 0, 0, 0xB4D8, /* 0x00 */
+ 0, 0, 0, 0xF3FE, 0xF3F9, 0xC2A8, 0, 0xF3FC, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xF3EC, 0xF4A1, /* 0x10 */
+ 0, 0xBCF2, 0, 0xF3F1, 0, 0, 0xF4A3, 0xBBC9, /* 0x20 */
+ 0, 0, 0xF4A2, 0xF3EF, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xF4A4, 0, 0, 0, 0, 0xC7A9, 0xC1B1, 0xB2BE, /* 0x30 */
+ 0xF4A6, 0, 0, 0xC0BA, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xB3EF, 0xBCAE, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xF3EA, 0, 0, 0xF4A5, /* 0x50 */
+ 0xC1FD, 0, 0, 0, 0xF8E2, 0, 0, 0, /* 0x60 */
+ 0, 0xF3D6, 0xF3FD, 0, 0xC0E9, 0, 0xC2E1, 0, /* 0x60 */
+ 0, 0, 0xF8FB, 0xC3D7, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF4CC, 0xD7D1, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xB7DB, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF4CE, 0xC1A3, 0, 0, 0xC6C9, 0, 0xB4D6, /* 0x90 */
+ 0xD5B3, 0, 0, 0, 0, 0, 0xF4D1, 0xCBDA, /* 0x90 */
+ 0, 0, 0xF4D2, 0, 0xD4C1, 0xD6E0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xC1BB, 0xF4D3, 0xBEAC, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xB4E2, 0, 0, 0xF4D4, 0xF4D5, 0xBEAB, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xF4DB, 0, 0xF4D7, /* 0xC0 */
+ 0xF4DA, 0, 0xBAFD, 0, 0xF4D8, 0xF4D9, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xB8E2, 0xCCC7, 0xF4DC, /* 0xD0 */
+ 0, 0xB2DA, 0, 0, 0xC3D3, 0xF4D6, 0xB7E0, 0xD4E3, /* 0xD0 */
+ 0xBFB7, 0, 0, 0, 0, 0, 0, 0xC1B8, /* 0xE0 */
+ 0xF4DD, 0, 0, 0, 0, 0, 0, 0xC5B4, /* 0xE0 */
+ 0xF8F0, 0, 0xF4CF, 0, 0xD9E1, 0, 0xF4D0, 0, /* 0xF0 */
+ 0xF4E9, 0xE6F9, 0, 0xCFB5, 0, 0, 0xBEC0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBCCD, 0, 0xE6FB, 0, 0xD4BC, 0xBAEC, 0xE6FA, 0xE6FC, /* 0x00 */
+ 0xE6FD, 0xC8D2, 0xCEC9, 0xCEC6, 0, 0xC4C9, 0, 0, /* 0x00 */
+ 0xC5A6, 0, 0, 0xE7A3, 0xB4BF, 0xE7A2, 0, 0xC9B4, /* 0x10 */
+ 0, 0xD6BD, 0xBCB6, 0xB7D7, 0xE7A1, 0, 0, 0, /* 0x10 */
+ 0xCBD8, 0xB7C4, 0xCBF7, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xD7CF, 0, 0, 0, 0xC0DB, /* 0x20 */
+ 0xCFB8, 0xE7A6, 0xE7A5, 0xC9F0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xC9DC, 0xE7A4, 0, 0xE7A8, 0, 0, 0xE7AA, /* 0x30 */
+ 0xE7A9, 0, 0xD6D5, 0, 0xD7E9, 0, 0xB0ED, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xE7AC, 0, /* 0x40 */
+ 0xBDE1, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xE7AB, 0xBDCA, 0, /* 0x50 */
+ 0, 0xC2E7, 0xD1A4, 0, 0, 0, 0xB8F8, 0, /* 0x60 */
+ 0xC8DE, 0, 0, 0, 0, 0, 0xD0F5, 0, /* 0x60 */
+ 0, 0xCDB3, 0xCBBF, 0xE7AD, 0, 0, 0xBEF8, 0, /* 0x70 */
+ 0, 0xBEEE, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB0F3, 0, 0xE7AF, 0, 0, 0xE7AE, 0, /* 0x80 */
+ 0xE7B0, 0xD0E5, 0, 0, 0, 0, 0, 0xCBE7, /* 0x80 */
+ 0, 0, 0, 0xBEAD, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xD7DB, 0, 0xE7B6, 0, /* 0x90 */
+ 0, 0, 0xB3F1, 0xE7B9, 0, 0, 0xF4EB, 0, /* 0xA0 */
+ 0, 0, 0, 0xCFDF, 0xE7B7, 0xCEAC, 0xF4EC, 0, /* 0xA0 */
+ 0xE7BA, 0xB8D9, 0xCDF8, 0xB1C1, 0xD7BA, 0, 0, 0, /* 0xB0 */
+ 0xC2DA, 0xE7B8, 0xE7B2, 0xD5C0, 0, 0xB4C2, 0xE7B1, 0xC3E0, /* 0xB0 */
+ 0, 0, 0, 0, 0xE7B5, 0, 0, 0xE7BB, /* 0xC0 */
+ 0, 0, 0xBDF4, 0xE7B3, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xC2CC, 0xD0F7, 0, 0xE7B4, 0, 0, 0xE7BD, /* 0xD0 */
+ 0xBCEA, 0xE7BC, 0, 0, 0, 0xBCA9, 0xB6D0, 0, /* 0xD0 */
+ 0xB5DE, 0xE7C5, 0, 0xD4B5, 0, 0, 0xE7C1, 0, /* 0xE0 */
+ 0xB1E0, 0xBBBA, 0, 0, 0xC3E5, 0, 0, 0xCEB3, /* 0xE0 */
+ 0, 0xE7C3, 0xE7BF, 0, 0xC1B7, 0, 0xE7C2, 0, /* 0xF0 */
+ 0, 0xE7BE, 0, 0xF9A4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xDDD3, 0xE7C6, 0xE7CB, 0xE7C4, 0, 0, 0, 0, /* 0x00 */
+ 0xE7A7, 0xE7CC, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xB8BF, 0, 0xE7C7, 0xE7C9, 0xE7C8, /* 0x10 */
+ 0, 0, 0, 0xCFD8, 0, 0, 0, 0xCCD0, /* 0x20 */
+ 0, 0, 0, 0xB7EC, 0, 0xE7CA, 0xCBF5, 0, /* 0x20 */
+ 0, 0xD7DD, 0xE7D0, 0, 0xF8E3, 0xE7CF, 0xF4EA, 0xC2C6, /* 0x30 */
+ 0, 0xE7CE, 0, 0xF7E3, 0, 0xD7DC, 0xBCA8, 0, /* 0x30 */
+ 0, 0xB7B1, 0, 0, 0, 0xE7D2, 0xE7D1, 0xF4ED, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xE7D5, 0, 0xD6AF, 0xC9C9, 0, 0, /* 0x50 */
+ 0, 0, 0xE7D4, 0, 0, 0, 0xC8C6, 0, /* 0x50 */
+ 0, 0, 0xE7C0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xC9FE, 0xBBE6, 0xF8F3, 0, 0xBCEB, 0xE7D6, 0xE7D9, /* 0x60 */
+ 0xE7D8, 0, 0, 0xBDC9, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xD2EF, 0, 0, 0xBCCC, 0xE7CD, 0xE7D7, 0, /* 0x70 */
+ 0, 0, 0xD7EB, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE7D3, 0, 0xE6FE, 0, 0xD0F8, 0xF8CD, 0, 0xB2F8, /* 0x80 */
+ 0, 0, 0, 0xD3A7, 0xF8A6, 0, 0xCFCB, 0, /* 0x90 */
+ 0xE7DA, 0, 0, 0xF4EE, 0xC0C2 /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF3BE, 0, /* 0x30 */
+ 0xB8D7, 0, 0xC8B1, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF3C0, 0xF3C1, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF3BF, 0, 0xF8EE, 0, /* 0x40 */
+ 0xB9DE, 0, 0, 0, 0xD8E8, 0xBAB1, 0, 0, /* 0x50 */
+ 0xEEB7, 0, 0, 0, 0, 0, 0, 0xEEB9, /* 0x50 */
+ 0, 0xEEB8, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xEEBB, 0xD5D6, 0xD7EF, 0, 0, 0, 0xD6C3, 0, /* 0x60 */
+ 0xB7A3, 0xEEBD, 0xCAF0, 0, 0, 0, 0, 0xB0D5, /* 0x70 */
+ 0, 0xEEBE, 0, 0, 0, 0, 0xEEC0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xC2DE, 0xEEBC, 0, /* 0x80 */
+ 0xEEBF, 0, 0xD1F2, 0, 0xC7BC, 0, 0xC3C0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xB8E1, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xC1E7, 0, 0, 0xF4C6, 0xD0DF, 0, /* 0x90 */
+ 0, 0xCFDB, 0, 0, 0xC8BA, 0xF4C7, 0, 0xF4C8, /* 0xA0 */
+ 0, 0xD2E5, 0, 0, 0, 0, 0, 0xF4C9, /* 0xA0 */
+ 0xF4CA, 0, 0xF4CB, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xD9FA, 0xB8FE, 0, 0, 0xE5F1, 0xD3F0, 0, 0xF4E0, /* 0xB0 */
+ 0, 0xCECC, 0, 0, 0, 0xB3E1, 0, 0, /* 0xC0 */
+ 0, 0, 0xF1B4, 0, 0xD2EE, 0, 0xF4E1, 0, /* 0xC0 */
+ 0, 0, 0xCFB0, 0, 0xCFE8, 0xF4E2, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB5D4, /* 0xD0 */
+ 0xB4E4, 0xF4E4, 0, 0, 0, 0xF4E3, 0xF4E5, 0, /* 0xE0 */
+ 0, 0xF4E6, 0, 0, 0, 0, 0xF4E7, 0, /* 0xE0 */
+ 0xBAB2, 0xB0BF, 0, 0xF4E8, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xC7CC, 0, 0xB7AD, 0xD2ED /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2AB, 0xC0CF, 0, 0xBFBC, 0xEBA3, 0xD5DF, 0xEAC8, 0, /* 0x00 */
+ 0, 0, 0, 0xF1F3, 0xB6F8, 0xCBA3, 0, 0, /* 0x00 */
+ 0xC4CD, 0, 0xF1E7, 0, 0xF1E8, 0xB8FB, 0xF1E9, 0xBAC4, /* 0x10 */
+ 0xD4C5, 0xB0D2, 0, 0, 0xF1EA, 0, 0, 0, /* 0x10 */
+ 0xF1EB, 0, 0, 0, 0, 0xF1ED, 0xF1EE, 0, /* 0x20 */
+ 0xF1F1, 0xF1F0, 0xC5D5, 0, 0xF1EF, 0, 0xF1EC, 0, /* 0x20 */
+ 0, 0xF1F2, 0, 0xB6FA, 0, 0xF1F4, 0xD2AE, 0xDEC7, /* 0x30 */
+ 0, 0, 0, 0xB3DC, 0, 0xB5A2, 0, 0xB9A2, /* 0x30 */
+ 0, 0, 0, 0xF1F5, 0, 0, 0xF1F6, 0, /* 0x40 */
+ 0, 0, 0xC1C4, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF1F8, 0, 0, 0, 0xCAA5, 0, /* 0x50 */
+ 0xC6B8, 0, 0xBEDB, 0, 0, 0, 0xCEC5, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC1AA, /* 0x60 */
+ 0xB4CF, 0xF1FA, 0xC9F9, 0xCBCA, 0, 0xF1F9, 0xC4F4, 0xD6B0, /* 0x70 */
+ 0, 0xF1F7, 0, 0, 0, 0xCCFD, 0xC1FB, 0xEDB2, /* 0x70 */
+ 0xEDB1, 0, 0, 0, 0xD2DE, 0xCBE0, 0xCBC1, 0xD5D8, /* 0x80 */
+ 0, 0xC8E2, 0, 0xC0DF, 0xBCA1, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xEBC1, 0, 0, 0xD0A4, 0, /* 0x90 */
+ 0xD6E2, 0, 0xB6C7, 0xB8D8, 0xEBC0, 0xB8CE, 0, 0xEBBF, /* 0x90 */
+ 0, 0xB9C9, 0xD6AB, 0, 0, 0xB7CA, 0, 0, /* 0xA0 */
+ 0, 0xBCE7, 0xB7BE, 0xEBC6, 0, 0xEBC7, 0, 0xBFCF, /* 0xA0 */
+ 0, 0xEBC5, 0xD3FD, 0, 0xEBC8, 0, 0, 0xEBC9, /* 0xB0 */
+ 0, 0, 0xB7CE, 0, 0xEBC2, 0xEBC4, 0, 0, /* 0xB0 */
+ 0, 0, 0xEBCF, 0xCEB8, 0xEBD0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xB1B3, 0xEBD2, 0xCCA5, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xC5D6, 0xEBD3, /* 0xD0 */
+ 0, 0xEBD1, 0xC5DF, 0xEBCE, 0, 0xEBD5, 0xB0FB, 0, /* 0xD0 */
+ 0, 0xBAFA, 0, 0, 0xD8B7, 0xF1E3, 0, 0, /* 0xE0 */
+ 0, 0xEBCC, 0, 0, 0xE6C0, 0xEBD9, 0, 0xBFE8, /* 0xE0 */
+ 0xD2C8, 0xEBD7, 0xEBDC, 0xB8EC, 0xEBD8, 0, 0, 0, /* 0xF0 */
+ 0xD0D8, 0, 0xB0B7, 0, 0xEBDD, 0xC4DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD6AC, 0, 0, 0xD0B2, 0xB4E0, 0, /* 0x00 */
+ 0, 0xC2F6, 0xBCB9, 0, 0, 0, 0xEBDB, 0, /* 0x00 */
+ 0, 0, 0xEBDF, 0, 0, 0, 0xB2B1, 0, /* 0x10 */
+ 0xEBE4, 0, 0xBDC5, 0xEBD6, 0, 0, 0xEBE2, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xEBE3, 0, 0, 0xB8AC, /* 0x20 */
+ 0, 0xCDD1, 0xEBE5, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xD5CD, 0, 0, 0, 0, 0xC6A2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xCCF3, 0, /* 0x40 */
+ 0xEBE6, 0, 0xF8CC, 0xD2B8, 0xEBE7, 0, 0xC9F6, 0, /* 0x40 */
+ 0xB8AF, 0xB8AD, 0, 0xEBE8, 0xC7BB, 0xCDF3, 0xEBCB, 0, /* 0x50 */
+ 0, 0xEBEA, 0xEBEB, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xEBED, 0xEBE1, 0, 0, 0, 0xD0C8, 0xC4D4, 0xEBF2, /* 0x60 */
+ 0, 0xEBEE, 0, 0xD6D7, 0, 0xEBF1, 0xC8F9, 0, /* 0x60 */
+ 0xD1FC, 0xEBEC, 0, 0, 0xEBE9, 0, 0, 0, /* 0x70 */
+ 0xB3A6, 0xB8B9, 0xCFD9, 0, 0xEBEF, 0xEBF0, 0, 0xCDC8, /* 0x70 */
+ 0xB0F2, 0, 0xEBF6, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xEBF5, 0, 0xB2B2, 0, 0, 0, 0, 0xB8E0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xB1EC, 0, 0xB7F4, 0xCCC5, 0xC4A4, 0xCFA5, 0, 0, /* 0x90 */
+ 0xBDBA, 0, 0, 0xEBF9, 0, 0, 0xECA2, 0, /* 0xA0 */
+ 0xC5F2, 0xC4E5, 0xEBFA, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xC9C5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE2DF, 0xEBFE, 0, 0xB5A8, 0xEBDA, 0xC5A7, /* 0xB0 */
+ 0xCDCE, 0xECA1, 0xB1DB, 0xD3B7, 0, 0, 0xD2DC, 0, /* 0xC0 */
+ 0, 0xC1B3, 0xEBFD, 0, 0xEBFB, 0xC6EA, 0, 0xEBF7, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xC0B0, 0, 0xEBCD, 0, 0, 0, 0, 0xD4E0, /* 0xD0 */
+ 0xD9F5, 0, 0, 0xB3BC, 0, 0, 0, 0xEAB0, /* 0xE0 */
+ 0xC1D9, 0, 0xD7D4, 0, 0xF4AB, 0xB3F4, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xD6C1, 0xD6C2, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xCCA8, 0xD5E9, 0xBECA, 0, 0xF4A7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2A8, 0xF4A8, 0xF4A9, 0, 0xF4AA, 0xBECB, 0, 0xD3EB, /* 0x00 */
+ 0xD0CB, 0xBED9, 0xBEC9, 0, 0xC9E0, 0xF8E7, 0, 0, /* 0x00 */
+ 0xF3C2, 0, 0xCAE6, 0, 0xCCF2, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xE2B6, 0xCBB4, 0, 0xCEE8, 0xD6DB, /* 0x10 */
+ 0, 0xF4AD, 0xF4AE, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xF4B2, 0, 0xBABD, 0xF4B3, 0xB0E3, 0xF4B0, 0, 0xF4B1, /* 0x20 */
+ 0, 0, 0, 0xF4B6, 0xF4B7, 0xB6E6, 0xB2B0, 0xCFCF, /* 0x30 */
+ 0xF4B4, 0xB4AC, 0, 0, 0, 0, 0xF4B8, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF4B9, 0, 0, 0xCDA7, /* 0x40 */
+ 0, 0xF4BA, 0, 0xF4BB, 0, 0, 0, 0xF4BC, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xCBD2, 0xB2D5, 0xF4BD, 0, 0, 0, 0, 0xF4BE, /* 0x50 */
+ 0, 0, 0, 0, 0xF4AF, 0, 0xBDA2, 0, /* 0x60 */
+ 0xF4BF, 0, 0, 0xF4B5, 0, 0, 0xF4DE, 0xC1BC, /* 0x60 */
+ 0, 0xBCE8, 0xC9AB, 0, 0xE5F5, 0, 0, 0xD1DE, /* 0x70 */
+ 0, 0xDCB3, 0, 0, 0, 0xDCB4, 0xB0AC, 0xDCB5, /* 0x70 */
+ 0, 0, 0, 0, 0xDCB9, 0, 0, 0, /* 0x80 */
+ 0xD8C2, 0, 0xDCB7, 0xD3F3, 0, 0xC9D6, 0xDCBA, 0xDCB6, /* 0x80 */
+ 0, 0xDCBB, 0xC3A2, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xDCC5, 0xDCBD, 0, 0, 0, 0xD6A5, 0, 0xDCCF, /* 0x90 */
+ 0, 0xDCCD, 0, 0, 0xDCD2, 0xBDE6, 0, 0, /* 0xA0 */
+ 0xDCB8, 0xDCCB, 0xDCCE, 0xDCBE, 0xB7D2, 0xB0C5, 0xDCC7, 0xD0BE, /* 0xA0 */
+ 0xDCC1, 0xBBA8, 0, 0xB7BC, 0xDCCC, 0, 0, 0xDCC6, /* 0xB0 */
+ 0, 0xC7DB, 0, 0xDBBB, 0, 0xD1BF, 0xDCC0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xDCD0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xDCC3, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xD4B7, 0xDCDB, 0xDCDF, 0xCCA6, 0xDCE6, 0, 0xC3E7, /* 0xD0 */
+ 0xDCDC, 0, 0, 0xBFC1, 0xDCD9, 0, 0xB0FA, 0xB9B6, /* 0xD0 */
+ 0xDCE5, 0xDCD3, 0, 0xDCC4, 0xDCD6, 0xC8F4, 0xBFE0, 0xDCD1, /* 0xE0 */
+ 0, 0, 0, 0xC9BB, 0, 0, 0, 0xB1BD, /* 0xE0 */
+ 0, 0xD3A2, 0, 0, 0xDCDA, 0, 0, 0xDCD5, /* 0xF0 */
+ 0, 0xF8DC, 0, 0xDCDE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7C2, 0xC3AF, 0xF8B2, 0xC7D1, 0xC3A9, 0xDCE2, 0xDCD8, /* 0x00 */
+ 0xDCEB, 0xDCD4, 0, 0, 0xDCDD, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDCF8, /* 0x10 */
+ 0, 0, 0xDCE1, 0xDDA2, 0xDCE7, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xB4C4, 0, 0, 0xC3A3, 0xB2E7, 0xDCFA, 0, 0xDCF2, /* 0x20 */
+ 0, 0xDCEF, 0, 0xDCFC, 0xDCEE, 0xD2F0, 0xB2E8, 0, /* 0x30 */
+ 0xC8D7, 0xC8E3, 0xDCFB, 0, 0xDCED, 0, 0, 0, /* 0x30 */
+ 0xDCF7, 0, 0, 0xDCF5, 0, 0, 0xBEA3, 0xDCF4, /* 0x40 */
+ 0, 0xB2DD, 0, 0, 0, 0, 0, 0xDCF3, /* 0x40 */
+ 0xF8C3, 0xDCE8, 0xBBC4, 0, 0xC0F3, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xBAC9, /* 0x70 */
+ 0xDDA9, 0, 0, 0xDDB6, 0xDDB1, 0xDDB4, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xDDB0, 0xC6CE, 0, /* 0x80 */
+ 0, 0xC0F2, 0xD7AF, 0, 0, 0, 0xC9AF, 0, /* 0x80 */
+ 0, 0, 0xDCEC, 0xDDAE, 0, 0, 0xBEA5, 0, /* 0x90 */
+ 0xDDB7, 0, 0, 0xDCF0, 0xDDAF, 0, 0xDDB8, 0, /* 0x90 */
+ 0xDDAC, 0, 0xBCD4, 0, 0, 0, 0, 0xDCC8, /* 0xA0 */
+ 0xDDB9, 0xDDB3, 0xDDAD, 0xC4AA, 0, 0, 0, 0, /* 0xA0 */
+ 0xDDA8, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xC3A7, 0, 0, /* 0xB0 */
+ 0xDDD2, 0xDDBC, 0, 0, 0, 0xDDD1, 0, 0xB9BD, /* 0xC0 */
+ 0, 0, 0xBED5, 0, 0xBEFA, 0, 0, 0xBACA, /* 0xC0 */
+ 0, 0, 0, 0, 0xDDCA, 0, 0xDDC5, 0, /* 0xD0 */
+ 0xDDBF, 0, 0, 0, 0xB2CB, 0xDDC3, 0, 0xDDCB, /* 0xD0 */
+ 0xB2A4, 0xDDD5, 0, 0, 0, 0xDDBE, 0, 0, /* 0xE0 */
+ 0, 0xC6D0, 0xDDD0, 0, 0, 0, 0, 0xBBAA, /* 0xE0 */
+ 0xDDD4, 0xC1E2, 0xB7C6, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xDDCE, 0xDDCF, 0, 0, 0, 0xDDC4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDDBD, 0, 0xDDCD, 0xCCD1, 0, 0xDDC9, 0xDCC9, /* 0x00 */
+ 0, 0, 0xC0B3, 0xDDC2, 0xC3C8, 0xC6BC, 0xCEAE, 0xDDCC, /* 0x00 */
+ 0, 0xDDC8, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xDDC1, 0, 0, 0, 0xDDC6, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xCDF2, 0, 0, 0, /* 0x20 */
+ 0, 0xDDE6, 0, 0, 0, 0xDDAB, 0, 0, /* 0x30 */
+ 0xDDC7, 0, 0, 0, 0xDDE0, 0xC2E4, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xDDE1, 0, /* 0x40 */
+ 0, 0xD2B6, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xDDD7, 0xDDA6, 0, 0, 0, 0, 0xD6F8, /* 0x50 */
+ 0, 0xDDD9, 0xDDD8, 0xB8F0, 0xDDD6, 0, 0, 0, /* 0x50 */
+ 0, 0xC6CF, 0, 0xB6AD, 0xDDA7, 0, 0xCEAD, 0, /* 0x60 */
+ 0, 0xDDE2, 0, 0xBAF9, 0xD4E1, 0xDDE7, 0, 0xF8F7, /* 0x60 */
+ 0, 0xB4D0, 0, 0xDDDA, 0, 0xBFFB, 0xDDE3, 0xBBE7, /* 0x70 */
+ 0xDDDF, 0, 0xDDDD, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xB5D9, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xDDDC, 0, 0, 0, 0, 0, 0xDDE5, 0, /* 0x80 */
+ 0, 0, 0, 0xDDBB, 0xDDAA, 0, 0, 0xDDF5, /* 0x90 */
+ 0, 0xC3C9, 0, 0, 0xCBE2, 0, 0, 0, /* 0x90 */
+ 0, 0xDDF2, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xD8E1, /* 0xA0 */
+ 0, 0, 0xC6D1, 0, 0xDDF4, 0, 0, 0, /* 0xB0 */
+ 0xD5F4, 0xDDF3, 0xDDF0, 0, 0xB2D4, 0xDDEC, 0, 0xDDEF, /* 0xB0 */
+ 0xDDA5, 0xDDE8, 0, 0, 0xD0EE, 0, 0, 0, /* 0xC0 */
+ 0, 0xC8D8, 0xDDEE, 0xB8C7, 0, 0xDDE9, 0, 0, /* 0xC0 */
+ 0xDDEA, 0xCBF2, 0, 0xDDED, 0, 0, 0xB1CD, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xC5EE, 0, 0xC1AB, 0xDCCA, /* 0xE0 */
+ 0xDDFB, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xDEA4, 0xDCEA, 0, 0xDEA3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xDDF8, 0, 0, 0, /* 0x00 */
+ 0, 0xC3EF, 0, 0xC2FB, 0xF8A5, 0, 0, 0xD5E1, /* 0x10 */
+ 0, 0, 0xCEB5, 0, 0, 0, 0xDDE4, 0xDDFD, /* 0x10 */
+ 0, 0xB2CC, 0, 0xBDAF, 0, 0, 0xDCE0, 0, /* 0x20 */
+ 0, 0, 0, 0xC4E8, 0xCADF, 0xD2F1, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xDDFA, 0, 0, 0xDEA2, 0, 0xB1CE, 0, 0, /* 0x30 */
+ 0, 0xDDA1, 0, 0xDEAC, 0, 0, 0xDDDB, 0, /* 0x40 */
+ 0xDEA6, 0xBDB6, 0xC8EF, 0, 0, 0, 0xDCF1, 0, /* 0x40 */
+ 0, 0, 0xDDA4, 0xDCBF, 0, 0xDDB5, 0xDEA1, 0, /* 0x50 */
+ 0xDCE9, 0xDEA5, 0, 0, 0, 0, 0xDEA9, 0, /* 0x50 */
+ 0, 0, 0xDDDE, 0, 0xDEA8, 0, 0, 0, /* 0x60 */
+ 0xDEA7, 0xB5B4, 0xCEDF, 0, 0, 0xCFF4, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDDF7, /* 0x70 */
+ 0, 0xDEB3, 0xDEAA, 0xDEAE, 0, 0, 0xC0D9, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xB1A1, 0xDEB6, 0, 0xDEB1, /* 0x80 */
+ 0xDCF6, 0, 0xBCBB, 0, 0xDCBC, 0, 0, 0xDEB2, /* 0x80 */
+ 0, 0xF8C4, 0, 0, 0xC7BE, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xD1A6, 0xDEB5, 0, 0, 0xDDB2, /* 0x90 */
+ 0, 0, 0, 0, 0xDEAF, 0, 0xBCF6, 0, /* 0xA0 */
+ 0xDEB0, 0xC8F8, 0xD0BD, 0, 0, 0, 0, 0xCAED, /* 0xA0 */
+ 0xDEB9, 0, 0, 0, 0, 0, 0, 0xDEB8, /* 0xB0 */
+ 0, 0xDEB7, 0xDCF9, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xDEBB, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xBDE5, 0, 0, 0, 0xC0B6, 0xDDA3, 0xB2D8, /* 0xC0 */
+ 0xC3EA, 0, 0, 0, 0, 0xC5BA, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xDEBC, 0xD2D5, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xCCD9, 0xD2A9, 0, 0, /* 0xE0 */
+ 0, 0xB7AA, 0xDEB4, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xD4CC, 0, 0xDCC2, 0, /* 0xF0 */
+ 0, 0xB0AA, 0xDDFE, 0xD4E5, 0, 0, 0, 0xDEBD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDEAD, 0xDEBF, 0xC2AB, 0xCBD5, /* 0x00 */
+ 0, 0, 0, 0xC6BB, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xC4A2, 0, 0, 0, 0, 0xDEC1, 0, /* 0x10 */
+ 0, 0, 0xDEBA, 0, 0, 0, 0xDDFC, 0, /* 0x10 */
+ 0, 0, 0xDCD7, 0, 0, 0, 0, 0xDEBE, /* 0x20 */
+ 0, 0xDEC0, 0, 0, 0, 0xC0BC, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xD5BA, 0, 0xDDF1, 0, 0xDEC2, 0, 0, 0xC2DC, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF2AE, 0xBBA2, 0, /* 0x40 */
+ 0xC5B0, 0, 0, 0, 0xF2AF, 0xB4A6, 0, 0, /* 0x50 */
+ 0, 0, 0xD0E9, 0, 0xC2B2, 0, 0xD3DD, 0xBAC5, /* 0x50 */
+ 0, 0, 0xEBBD, 0, 0, 0, 0, 0xBFF7, /* 0x60 */
+ 0, 0, 0, 0, 0xF2B0, 0, 0, 0, /* 0x60 */
+ 0, 0xCAAD, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xBAE7, 0xF2B3, 0xF2B5, 0xF2B4, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xCEC3, 0xF2B8, 0xB0F6, 0xF2B7, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF2BE, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xD1C1, 0xF2BA, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xF2BC, 0xD4E9, 0, 0, 0xF2BB, /* 0xA0 */
+ 0xF2B6, 0xF2BF, 0xF2BD, 0, 0, 0, 0, 0xF2C7, /* 0xA0 */
+ 0xF2C4, 0xF2C6, 0, 0, 0xF2CA, 0xF2C2, 0xF2C0, 0, /* 0xB0 */
+ 0, 0, 0xF2C5, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xD6FB, 0, 0, 0, 0xF2C1, 0, 0xC7F9, 0xC9DF, /* 0xC0 */
+ 0, 0xF2C8, 0, 0xB5B0, 0, 0, 0, 0, /* 0xC0 */
+ 0xF2D0, 0xF2D6, 0, 0, 0xBBD7, 0, 0, 0, /* 0xD0 */
+ 0xF2D5, 0xCDDC, 0, 0xD6EB, 0, 0, 0xF2D2, 0xF2D4, /* 0xD0 */
+ 0, 0, 0, 0, 0xB8F2, 0, 0, 0, /* 0xE0 */
+ 0, 0xF2CB, 0, 0, 0, 0xF2CE, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xF2D9, 0xD3BC, 0xF2CC, 0, 0, 0, 0xB6EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCAF1, 0, 0xB7E4, 0xF2D7, 0, 0, 0xF2B9, 0xF2D8, /* 0x00 */
+ 0xF2DA, 0xF2DD, 0xF2DB, 0, 0, 0xF2DC, 0, 0, /* 0x00 */
+ 0, 0, 0xD1D1, 0xF2D1, 0, 0xCDC9, 0, 0, /* 0x10 */
+ 0xD6A9, 0, 0xF2E3, 0, 0xC3DB, 0, 0xF2E0, 0, /* 0x10 */
+ 0, 0xF8CB, 0xF2EC, 0xF2DE, 0, 0xF2E1, 0, 0, /* 0x20 */
+ 0, 0xF2E8, 0, 0, 0, 0, 0xF2E2, 0, /* 0x20 */
+ 0, 0xF2E7, 0, 0, 0xF2E6, 0, 0, 0xF2E9, /* 0x30 */
+ 0, 0, 0, 0xF2DF, 0, 0, 0xF2E4, 0xF2EA, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xF2F2, 0, 0xD0AB, 0, /* 0x40 */
+ 0, 0, 0, 0xF2F5, 0, 0xCAB4, 0, 0xBBC8, /* 0x50 */
+ 0, 0xF2F9, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xF2F0, 0, 0, 0xF2F6, 0xF2F8, 0xF2FA, 0xCFBA, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xF2F3, 0, /* 0x60 */
+ 0xF2F1, 0, 0, 0, 0xBAFB, 0, 0xB5FB, 0, /* 0x70 */
+ 0xCECF, 0, 0, 0xF2EF, 0, 0xF2ED, 0, 0, /* 0x70 */
+ 0, 0, 0xF2EB, 0xF3A6, 0xF2CF, 0xF3A3, 0, 0, /* 0x80 */
+ 0xF3A2, 0, 0, 0xF2F4, 0, 0xC8DA, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF2FB, 0, 0, 0, 0xF3A5, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xC2EC, 0xC3F8, /* 0x90 */
+ 0, 0, 0xD3A9, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xF3A7, 0xF3A9, 0xF3A4, 0, 0xF2FC, /* 0xA0 */
+ 0, 0, 0, 0xF3AB, 0, 0xF3AA, 0, 0, /* 0xB0 */
+ 0, 0, 0xC2DD, 0xF2F7, 0, 0xF3AE, 0, 0, /* 0xB0 */
+ 0xF3B0, 0, 0, 0, 0xD5DD, 0, 0xF3A1, 0, /* 0xC0 */
+ 0xF2E5, 0, 0xF3B1, 0xF3AC, 0, 0, 0xF2FD, 0, /* 0xC0 */
+ 0, 0xF3AF, 0xF2FE, 0xF3AD, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xF3B2, 0, 0, 0, 0, /* 0xD0 */
+ 0xF3B4, 0, 0, 0xF2B1, 0, 0xF3A8, 0, 0, /* 0xE0 */
+ 0, 0, 0xF3B3, 0, 0xB2F5, 0, 0xF3B5, 0xF2CD, /* 0xE0 */
+ 0, 0, 0xB3E6, 0, 0, 0, 0xF2C9, 0, /* 0xF0 */
+ 0, 0xD0B7, 0, 0xD2CF, 0, 0, 0xF3B8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD9F9, 0, 0xD3AC, 0xF2B2, 0, /* 0x00 */
+ 0, 0, 0xF3B9, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xF2D3, 0xF2EE, 0, 0xF3B7, 0, 0xC8E4, 0xF3B6, 0, /* 0x10 */
+ 0, 0, 0, 0xF3BA, 0, 0, 0, 0xC0AF, /* 0x10 */
+ 0, 0xF3BB, 0xB4C0, 0xF2C3, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xB9C6, 0xEEC3, 0, 0, 0, 0xB2CF, 0, /* 0x30 */
+ 0, 0xF3BC, 0, 0xC2F9, 0xF3BD, 0, 0, 0, /* 0x30 */
+ 0xD1AA, 0, 0, 0, 0xF4AC, 0, 0xD6DA, 0, /* 0x40 */
+ 0, 0, 0xF8DA, 0, 0xD0D0, 0xD1DC, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xCAF5, 0, 0, 0, 0xBDD6, /* 0x50 */
+ 0, 0xD1C3, 0, 0xCEC0, 0, 0xB3E5, 0, 0, /* 0x50 */
+ 0, 0xBAE2, 0xE1E9, 0xD2C2, 0xF1C2, 0, 0, 0, /* 0x60 */
+ 0xB1ED, 0xF1C3, 0, 0xC9C0, 0, 0, 0xD9F2, 0, /* 0x60 */
+ 0xCBA5, 0, 0xF1C4, 0, 0, 0, 0, 0xD6D4, /* 0x70 */
+ 0, 0xD6BB, 0, 0, 0, 0xF1C5, 0xF4C0, 0xF1C6, /* 0x70 */
+ 0, 0xD4AC, 0xF1C7, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xF4C2, 0, 0, 0xB4FC, 0, 0xC5DB, 0, 0, /* 0x80 */
+ 0, 0, 0xCCBB, 0, 0, 0, 0xD0E4, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xF1C8, 0, 0xD9F3, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xB1BB, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xB8A4, 0, 0, 0, 0, 0, 0xF1CA, /* 0xB0 */
+ 0, 0, 0, 0, 0xF1CB, 0, 0, 0, /* 0xB0 */
+ 0, 0xB2C3, 0xC1D1, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF1CC, 0xF4C1, 0, 0, 0, 0xF1CE, 0xC0EF, /* 0xC0 */
+ 0, 0, 0xD9F6, 0, 0xD2E1, 0xD4A3, 0, 0, /* 0xD0 */
+ 0xF4C3, 0xC8B9, 0, 0, 0xB2B9, 0xD7B0, 0, 0xF4C4, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF1D4, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xF1D6, 0xF1D1, 0, 0xC9D1, 0xC5E1, 0, 0, 0, /* 0xF0 */
+ 0xC2E3, 0xB9FC, 0, 0, 0xF1D3, 0xF9A5, 0xF1D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB9D3, 0, 0, 0, 0, 0xF8B4, /* 0x00 */
+ 0, 0, 0xF1DB, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xBAD6, 0, 0xB0FD, 0xF1D9, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF1D8, 0xF1D2, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF1D7, 0, 0, 0, 0xC8EC, 0, 0, /* 0x20 */
+ 0, 0, 0xCDCA, 0xF1DD, 0, 0, 0, 0, /* 0x20 */
+ 0xE5BD, 0, 0xBFE3, 0xF1CD, 0, 0, 0xF1DE, 0, /* 0x30 */
+ 0xF1DA, 0, 0, 0xD9F4, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xF1DF, 0, 0, 0xCFE5, 0, 0, 0xF1D0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xB0C0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xF1CF, 0xF4C5, 0xBDF3, /* 0x50 */
+ 0xF1C9, 0, 0, 0, 0xF1DC, 0, 0xF1E0, 0, /* 0x60 */
+ 0, 0, 0xCDE0, 0, 0xF8A1, 0, 0, 0xB3C4, /* 0x60 */
+ 0, 0, 0xCFAE, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0xF1E1, 0, 0, 0, 0xCEF7, /* 0x70 */
+ 0, 0xD2AA, 0, 0xF1FB, 0, 0, 0xB8B2, 0, /* 0x80 */
+ 0, 0, 0, 0xBCFB, 0, 0, 0, 0xB9E6, /* 0x80 */
+ 0, 0, 0, 0xC3D9, 0, 0, 0xCAD3, 0, /* 0x90 */
+ 0xEAE8, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xEAEA, 0, 0, 0, 0, 0xEAEC, 0, /* 0xA0 */
+ 0, 0, 0xC7D7, 0, 0xEAE9, 0, 0, 0xEAED, /* 0xA0 */
+ 0, 0, 0xEAEE, 0, 0, 0, 0, 0xEAEF, /* 0xB0 */
+ 0, 0, 0xBEF5, 0, 0, 0xC0C0, 0, 0xEAEB, /* 0xB0 */
+ 0xB9DB, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xBDC7, 0, 0, 0, 0xF5FB, 0, /* 0xD0 */
+ 0, 0, 0xF5FD, 0, 0xF5FE, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xBDE2, 0, 0xF6A1, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xF6A2, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xECB2, 0xF5FC, 0, 0xF6A3, 0, /* 0xF0 */
+ 0xB4A5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1D4, 0xDAA5, 0xB6A9, 0xB8BC, 0, 0, 0, 0xD9EA, /* 0x00 */
+ 0xBCC6, 0, 0xD1B6, 0, 0xDAA7, 0, 0xCCD6, 0, /* 0x00 */
+ 0xDAA6, 0, 0, 0xD1B5, 0, 0xDAA8, 0xC6FD, 0, /* 0x10 */
+ 0xBCC7, 0, 0, 0xB6EF, 0, 0xD1C8, 0, 0xCBCF, /* 0x10 */
+ 0, 0, 0, 0xBEF7, 0, 0xDAAB, 0, 0, /* 0x20 */
+ 0, 0, 0xB7C3, 0, 0, 0xC9E8, 0, 0, /* 0x20 */
+ 0, 0xD0ED, 0, 0, 0xCBDF, 0, 0xDAAD, 0, /* 0x30 */
+ 0, 0, 0xD5EF, 0, 0, 0, 0xF6A4, 0, /* 0x30 */
+ 0, 0xDAAC, 0, 0, 0, 0, 0xDAAE, 0, /* 0x40 */
+ 0xEEBA, 0, 0, 0, 0, 0, 0xDAAA, 0, /* 0x40 */
+ 0xD5A9, 0, 0xDAB1, 0, 0xDAAF, 0xC6C0, 0, 0, /* 0x50 */
+ 0xDAB0, 0, 0, 0xD7E7, 0, 0, 0xB4CA, 0, /* 0x50 */
+ 0, 0xDABC, 0xD1AF, 0xD2E8, 0, 0, 0xCAD4, 0, /* 0x60 */
+ 0, 0xCAAB, 0, 0xB2EF, 0xDAB8, 0xB9EE, 0xDAB9, 0, /* 0x60 */
+ 0xDAB5, 0xBBB0, 0xB8C3, 0xCFEA, 0, 0xDAB7, 0, 0, /* 0x70 */
+ 0, 0xD5B2, 0, 0, 0xDAB6, 0, 0, 0xDAB4, /* 0x70 */
+ 0, 0, 0, 0, 0xDAB3, 0xD6EF, 0xDAB2, 0xBFE4, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xC8CF, 0, 0, /* 0x80 */
+ 0, 0xDABF, 0xDAC0, 0xCAC4, 0, 0xB5AE, 0, 0, /* 0x90 */
+ 0xD3D5, 0, 0xDABD, 0, 0, 0, 0xD3EF, 0, /* 0x90 */
+ 0xB3CF, 0xBDEB, 0, 0xCEDC, 0xCEF3, 0xDABE, 0xCBD0, 0, /* 0xA0 */
+ 0xBBE5, 0, 0, 0, 0xCBB5, 0, 0, 0, /* 0xA0 */
+ 0xCBAD, 0, 0xBFCE, 0, 0, 0, 0xDAC7, 0, /* 0xB0 */
+ 0, 0xB7CC, 0, 0, 0xD2EA, 0, 0, 0xB5F7, /* 0xB0 */
+ 0, 0, 0xDAC6, 0, 0xD7BB, 0, 0, 0xCCB8, /* 0xC0 */
+ 0, 0xDAC3, 0, 0xC7EB, 0, 0xDABA, 0, 0xDAC1, /* 0xC0 */
+ 0, 0xDAC2, 0xC1C2, 0, 0, 0, 0xC2DB, 0xDAC5, /* 0xD0 */
+ 0, 0, 0, 0xDAC4, 0xB5FD, 0, 0xDAD2, 0, /* 0xD0 */
+ 0, 0, 0xDABB, 0, 0xDACC, 0, 0xDAD0, 0xD0B3, /* 0xE0 */
+ 0, 0, 0, 0xDAC9, 0, 0xDACD, 0xDAD1, 0, /* 0xE0 */
+ 0, 0xBBE4, 0, 0xDACF, 0, 0, 0xDAC8, 0xB7ED, /* 0xF0 */
+ 0xD6EE, 0, 0xD1E8, 0, 0xDACE, 0, 0xC5B5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC4B1, 0xDACB, 0xCEBD, 0, 0xCCDC, 0xD6DF, 0, 0xE5C0, /* 0x00 */
+ 0, 0, 0xBBD1, 0, 0, 0, 0xC3D5, 0, /* 0x00 */
+ 0xDAD7, 0, 0, 0, 0xDACA, 0, 0xDAD5, 0xB0F9, /* 0x10 */
+ 0, 0xC7AB, 0xDAD6, 0xBDB2, 0, 0xD0BB, 0, 0, /* 0x10 */
+ 0, 0xD2A5, 0, 0, 0, 0, 0xF6A5, 0, /* 0x20 */
+ 0xDAD3, 0, 0, 0xDAD8, 0xC3FD, 0xDAD9, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xDAA9, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xBDF7, 0, 0, 0, 0, 0xC3A1, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xD6A4, 0, 0, 0, 0, 0xDADC, 0xBCA5, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xDADA, 0, /* 0x50 */
+ 0xCAB6, 0xDADB, 0xCCB7, 0, 0xC6D7, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0xBEAF, 0, /* 0x60 */
+ 0, 0, 0, 0xDADE, 0xC6A9, 0, 0, 0xD2EB, /* 0x60 */
+ 0xD2E9, 0, 0, 0, 0xC7B4, 0, 0, 0xBBA4, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xD3FE, 0, 0, /* 0x70 */
+ 0xB6C1, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xB1E4, 0, 0, 0, 0xF6C5, 0, /* 0x80 */
+ 0, 0, 0xB2F7, 0xC8C3, 0, 0xC0BE, 0xDADF, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xDAD4, 0, 0xDADD /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB9C8, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xBBED, 0, 0, 0, 0, 0xB6B9, 0xF4F8, /* 0x40 */
+ 0xC6F1, 0xF4F9, 0, 0, 0xCDE3, 0, 0, 0, /* 0x40 */
+ 0xB7E1, 0, 0, 0, 0, 0xF5B9, 0, 0, /* 0x50 */
+ 0, 0, 0xEBE0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xCFF3, 0xBBBF, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xBAC0, 0xD4A5, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xE1D9, 0, 0, 0, 0, /* 0x70 */
+ 0xF5F4, 0xB1AA, 0xB2F2, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xF5F5, 0, 0, 0xF5F7, 0, 0, /* 0x80 */
+ 0, 0xBAD1, 0xF5F6, 0, 0xC3B2, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xF5F9, 0, 0, 0, /* 0x90 */
+ 0xF5F8, 0, 0, 0, 0, 0xB1B4, 0xD5EA, 0, /* 0x90 */
+ 0xB8BA, 0xB2C6, 0xB9B1, 0, 0, 0, 0, 0xC6B6, /* 0xA0 */
+ 0xBBF5, 0xB7B7, 0xCCB0, 0xB9E1, 0xD4F0, 0, 0, 0xD6FC, /* 0xA0 */
+ 0xEADB, 0, 0xEADF, 0xB7A1, 0xB9F3, 0, 0xB1E1, 0xC2F2, /* 0xB0 */
+ 0xB4FB, 0, 0xEADC, 0xB7D1, 0xCCF9, 0xEADD, 0, 0xC3B3, /* 0xB0 */
+ 0xBAD8, 0xEADA, 0xC2B8, 0xC1DE, 0xBBDF, 0xEAE0, 0, 0xD7CA, /* 0xC0 */
+ 0xBCD6, 0, 0xD4F4, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xEAE2, 0xC9DE, 0xB1F6, 0, 0xEAE4, 0, 0, /* 0xD0 */
+ 0, 0, 0xEAE3, 0, 0xB4CD, 0, 0xC9CD, 0, /* 0xD0 */
+ 0xC5E2, 0xE2D9, 0xCFCD, 0xC2F4, 0xBCFA, 0, 0xB8B3, 0xEAE6, /* 0xE0 */
+ 0, 0, 0xD6CA, 0xEAE5, 0xD5CB, 0xB6C4, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xC0B5, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xD7AC, 0xEAE7, 0xB9BA, 0xC8FC, 0xD8D3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEADE, 0xD7B8, 0, 0, /* 0x00 */
+ 0xD4F9, 0, 0xD4DE, 0xD8CD, 0, 0xC9C4, 0, 0xD3AE, /* 0x00 */
+ 0xEAE1, 0, 0, 0, 0, 0, 0xCAEA, 0, /* 0x10 */
+ 0, 0, 0, 0xB8D3, 0xD4DF, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xB3E0, 0, 0xC9E2, 0xF4F6, /* 0x60 */
+ 0, 0, 0, 0xBAD5, 0, 0xF4F7, 0, 0, /* 0x60 */
+ 0xD7DF, 0, 0, 0xF4F1, 0xB8B0, 0, 0, 0xC6F0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB3C3, 0, 0, 0xF4F2, 0xB3AC, 0, 0, /* 0x80 */
+ 0, 0, 0xD4BD, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xF4F4, 0, 0, 0xF4F3, 0xB8CF, 0, 0, /* 0x90 */
+ 0, 0xD5D4, 0, 0, 0, 0, 0, 0xCCCB, /* 0x90 */
+ 0, 0, 0, 0xC8A4, 0, 0, 0, 0, /* 0xA0 */
+ 0xC7F7, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xF4F5, 0xD7E3, 0xC5BF, 0xF5C0, 0, 0, /* 0xB0 */
+ 0, 0, 0xF5C3, 0, 0xF5C2, 0, 0xD6BA, 0xF5C1, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xF5CC, 0, /* 0xC0 */
+ 0, 0, 0, 0xB0CF, 0xB5F8, 0, 0xF5C9, 0xF5CA, /* 0xC0 */
+ 0, 0xC5DC, 0, 0, 0, 0, 0xF5C5, 0xF5C6, /* 0xD0 */
+ 0, 0, 0xF5C7, 0xF5CB, 0, 0xBEE0, 0, 0xB8FA, /* 0xD0 */
+ 0, 0, 0, 0xF5D0, 0xF5D3, 0, 0, 0, /* 0xE0 */
+ 0xBFE7, 0, 0xB9F2, 0xF5BC, 0xF5CD, 0, 0, 0xC2B7, /* 0xE0 */
+ 0, 0, 0, 0xCCF8, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xB6E5, 0, 0, 0xF5D5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5BD, 0, 0, /* 0x00 */
+ 0, 0xF5D4, 0, 0, 0, 0, 0, 0xCCA4, /* 0x00 */
+ 0xBCF9, 0, 0, 0, 0xF5D6, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xF5D7, 0xBEE1, 0xF5D8, /* 0x10 */
+ 0, 0, 0xCCDF, 0xF5DB, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xB2C8, 0xD7D9, 0, 0, 0, 0xF5DA, 0, /* 0x20 */
+ 0, 0xF5E2, 0, 0, 0xD3BB, 0xF5E0, 0, 0, /* 0x30 */
+ 0, 0xF5DF, 0xF5DD, 0, 0, 0xF5E1, 0, 0, /* 0x30 */
+ 0xF5DE, 0xF5E4, 0xF5E5, 0, 0xCCE3, 0, 0, 0xE5BF, /* 0x40 */
+ 0xB5B8, 0xF5E3, 0xF5E8, 0xCCA3, 0xF5C4, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xF5CF, 0, 0, /* 0x50 */
+ 0, 0xF5BE, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xF5E7, 0, 0, 0xB1C4, 0, /* 0x60 */
+ 0, 0xF5BF, 0, 0, 0xB5C5, 0xB2E4, 0, 0xF5EC, /* 0x60 */
+ 0xF5E9, 0, 0xB6D7, 0, 0xF5ED, 0, 0xF5EA, 0, /* 0x70 */
+ 0, 0, 0xF5CE, 0, 0xF5EB, 0, 0, 0, /* 0x70 */
+ 0, 0xD4EA, 0, 0, 0, 0xF5EE, 0, 0xB3F9, /* 0x80 */
+ 0, 0xF5BB, 0xB3EC, 0xF5D2, 0, 0xD4BE, 0, 0, /* 0x80 */
+ 0xF5F1, 0xF5DC, 0xF5C8, 0xF5D9, 0xF5F0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xF5D1, 0, 0, 0, 0xF5F3, 0, /* 0x90 */
+ 0, 0xF5E6, 0, 0, 0, 0xB4DA, 0xF5F2, 0, /* 0xA0 */
+ 0, 0, 0xF5EF, 0xC9ED, 0xB9AA, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xB6E3, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xCCC9, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xC7FB, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xB3B5, 0xD4FE, 0xB9EC, 0xBEFC, 0xEAA6, 0, /* 0xC0 */
+ 0, 0, 0xD0F9, 0, 0xE9ED, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xE9EE, 0, 0, 0, 0xC8ED, /* 0xD0 */
+ 0, 0, 0, 0, 0xE9F5, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE9F4, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0xE9EF, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0xD6E1, 0xE9F2, 0xE9F7, 0xE9F0, 0xE9F3, 0, 0xE9F8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDCF, 0, 0xE9FB, 0, 0xE9FA, /* 0x00 */
+ 0, 0xD4D8, 0xE9F9, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xE9FC, 0, 0xB8A8, 0xC7E1, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xC1BE, 0xEAA2, 0xBBD4, 0xE9FE, 0xEAA1, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xB9F5, 0xE9FD, 0, /* 0x20 */
+ 0, 0xB1B2, 0xC2D6, 0, 0, 0, 0, 0xBCAD, /* 0x20 */
+ 0, 0, 0, 0xEAA3, 0, 0, 0, 0, /* 0x30 */
+ 0xCAE4, 0, 0, 0xB7F8, 0, 0, 0xD5B7, 0xD3DF, /* 0x30 */
+ 0, 0, 0xECB1, 0, 0xCFBD, 0xD4AF, 0xEAA4, 0, /* 0x40 */
+ 0, 0xD7AA, 0, 0, 0, 0xD5DE, 0xBDCE, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xEAA5, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xBAE4, /* 0x50 */
+ 0, 0xE0CE, 0xE9F6, 0, 0xE9F1, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xD0C1, 0xB9BC, 0, 0, 0xB1D9, /* 0x90 */
+ 0, 0, 0, 0xC0B1, 0, 0, 0xB0EC, 0, /* 0xA0 */
+ 0xB1E6, 0, 0, 0, 0, 0xB4C7, 0xB1E8, 0xB1E7, /* 0xA0 */
+ 0xB3BD, 0xC8E8, 0xC5A9, 0, 0, 0, 0xE5C1, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xD3D8, 0, 0xC6F9, 0xD1B8, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xD3AD, 0, /* 0xC0 */
+ 0, 0xBDFC, 0, 0xE5C2, 0xB7B5, 0xE5C3, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xCCF6, 0, 0xE5C6, 0xE5C4, 0xE5C8, 0, /* 0xE0 */
+ 0xE5CA, 0, 0xB5CF, 0xC6C8, 0, 0xB5FC, 0xE5C5, 0, /* 0xE0 */
+ 0xCAF6, 0, 0, 0, 0xF8BC, 0, 0, 0xC3D4, /* 0xF0 */
+ 0xB1C5, 0xBCA3, 0, 0, 0, 0xD7B7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCDCB, 0xCBCD, 0, 0xCCD3, 0xE5CC, 0xE5CB, 0xC4E6, 0, /* 0x00 */
+ 0, 0, 0, 0xE5CD, 0, 0xE5D0, 0, 0xCDB8, /* 0x00 */
+ 0xD6F0, 0xE5CF, 0, 0, 0xCDBE, 0xE5C9, 0xE5D1, 0xB6BA, /* 0x10 */
+ 0, 0xD5E2, 0xCDA8, 0xB9E4, 0, 0xCAC5, 0xB3D1, 0xCBD9, /* 0x10 */
+ 0xD4EC, 0xE5D2, 0xB7EA, 0xC1AC, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE5D5, 0xB4FE, 0xE5D6, /* 0x20 */
+ 0, 0, 0xBDF8, 0, 0, 0xE5D3, 0xE5D4, 0, /* 0x30 */
+ 0xD2DD, 0, 0, 0, 0xB1C6, 0, 0xD3E2, 0, /* 0x30 */
+ 0, 0xB6DD, 0xCBEC, 0, 0xE5D7, 0, 0, 0xD3F6, /* 0x40 */
+ 0, 0, 0, 0xD4CB, 0, 0xB1E9, 0xB9FD, 0xB6F4, /* 0x40 */
+ 0xE5DA, 0xE5D8, 0xE5D9, 0xB5C0, 0xB4EF, 0xCEA5, 0, 0, /* 0x50 */
+ 0xE5DC, 0, 0, 0xE5DE, 0xD1B7, 0, 0xB5DD, 0, /* 0x50 */
+ 0xD4B6, 0, 0xE5DD, 0xC7B2, 0, 0xD2A3, 0, 0, /* 0x60 */
+ 0xE5DB, 0xCACA, 0, 0, 0, 0xD4E2, 0xD5DA, 0, /* 0x60 */
+ 0, 0, 0xB3D9, 0, 0xE5E0, 0xD7F1, 0, 0xC7A8, /* 0x70 */
+ 0xD1A1, 0, 0xD2C5, 0, 0xC1C9, 0xE5E1, 0, 0xB1DC, /* 0x70 */
+ 0xD1FB, 0xC2F5, 0xE5E2, 0xE5E4, 0xBBB9, 0, 0, 0xE5C7, /* 0x80 */
+ 0xE5E3, 0, 0xB1DF, 0xE5E5, 0, 0, 0, 0xC2DF, /* 0x80 */
+ 0xE5CE, 0xD2D8, 0, 0, 0, 0xE7DF, 0, 0xDAF5, /* 0x90 */
+ 0, 0xDAF8, 0, 0xDAF6, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xDAFA, 0xD0CF, 0xC4C7, 0, 0, 0xB0EE, 0, /* 0xA0 */
+ 0, 0, 0xD0B0, 0, 0, 0, 0, 0xBAAA, /* 0xA0 */
+ 0xDBA2, 0xC7F1, 0, 0xDAFC, 0xDAFB, 0xC9DB, 0xDAFD, 0, /* 0xB0 */
+ 0xDBA1, 0, 0, 0, 0, 0, 0xDBA5, 0, /* 0xB0 */
+ 0, 0xF8F9, 0, 0, 0xDBA7, 0xDBA4, 0, 0xDBA8, /* 0xC0 */
+ 0, 0, 0xBDBC, 0, 0, 0, 0xC0C9, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xDBAD, /* 0xD0 */
+ 0, 0, 0, 0xDBAE, 0xDBAC, 0xBAC2, 0, 0xDBA3, /* 0xD0 */
+ 0, 0xBFA4, 0xDBAB, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xB2BF, 0, 0, 0xDBAF, 0, 0xB9F9, 0, 0xDBB0, /* 0xE0 */
+ 0, 0, 0, 0, 0xB3BB, 0xD3CA, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xB6BC, 0xDBB1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB6F5, 0, 0xDBB2, 0, 0xDBA9, 0, /* 0x00 */
+ 0, 0xCFE7, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0xD7DE, 0, 0xDAF9, 0, 0xD4C7, 0, /* 0x10 */
+ 0, 0xB1C9, 0, 0, 0, 0, 0xDBB4, 0, /* 0x10 */
+ 0, 0, 0xDBB3, 0xDBB5, 0, 0, 0, 0xB5CB, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xD6A3, 0, 0xDBB7, /* 0x20 */
+ 0xC1DA, 0xDBB6, 0xB5A6, 0, 0xDAFE, 0, 0xDBA6, 0, /* 0x30 */
+ 0, 0xDBB8, 0xDAF7, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xDBB9, 0, 0, 0xDBBA, 0, /* 0x40 */
+ 0xDBAA, 0xD3CF, 0xF4FA, 0xC7F5, 0xD7C3, 0xC5E4, 0xF4FC, 0xF4FD, /* 0x40 */
+ 0xF4FB, 0, 0xBEC6, 0, 0, 0, 0, 0xD0EF, /* 0x50 */
+ 0, 0, 0xB7D3, 0, 0, 0, 0xCCAA, 0, /* 0x50 */
+ 0, 0xF5A2, 0xF5A1, 0xBAA8, 0xF4FE, 0xCBD6, 0, 0, /* 0x60 */
+ 0, 0xF5A4, 0xC0D2, 0, 0xB3EA, 0, 0xCDAA, 0xF5A5, /* 0x60 */
+ 0xF5A3, 0, 0xF5A8, 0, 0xF5A9, 0xBDCD, 0xC3B8, 0xBFE1, /* 0x70 */
+ 0xCBE1, 0xF5AA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF5AC, 0, 0xB4BC, /* 0x80 */
+ 0, 0xD7ED, 0, 0xB4D7, 0xF5AB, 0xF5AE, 0, 0, /* 0x80 */
+ 0xF5AD, 0xF5AF, 0xD0D1, 0, 0, 0, 0xD4CD, 0, /* 0x90 */
+ 0, 0, 0xC3D1, 0xC8A9, 0xB3F3, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xF5B0, 0xF5B1, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xF5B2, 0xD2BD, 0xBDB4, 0xF5B3, 0xF5B4, 0xF5B5, /* 0xA0 */
+ 0, 0, 0, 0, 0xF5B7, 0xF5B6, 0, 0, /* 0xB0 */
+ 0, 0, 0xF5B8, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xC4F0, 0xD0C6, 0, 0xF5A7, 0, 0xF5A6, 0, 0xB2C9, /* 0xC0 */
+ 0, 0xD3D4, 0, 0xCACD, 0xF8CE, 0xD6D8, 0xD2B0, 0xC1BF, /* 0xC0 */
+ 0, 0xBDF0, 0xEEC4, 0xEEC5, 0xEEC6, 0xEEC9, 0, 0xEEC8, /* 0xD0 */
+ 0xB6A4, 0xEEC7, 0, 0, 0xB8AA, 0xD5EB, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xB5F6, 0xEECC, 0, 0, 0xEECB, /* 0xE0 */
+ 0, 0xB7B0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xEECE, 0, 0xEECA, /* 0xF0 */
+ 0, 0xEECF, 0xC7A5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEED9, 0xEED5, 0, 0, 0xEED7, 0, 0, 0, /* 0x00 */
+ 0xEED0, 0xC4C6, 0, 0, 0, 0xB6DB, 0xB9B3, 0, /* 0x00 */
+ 0xEED4, 0xEED3, 0, 0, 0xB3AE, 0xC5A5, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xBEFB, 0, /* 0x10 */
+ 0, 0, 0, 0xB8C6, 0, 0xEED8, 0xEED1, 0xEED6, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0xEEEA, 0, /* 0x20 */
+ 0xEEE6, 0, 0, 0xEEDD, 0xC1E5, 0, 0, 0xEEDC, /* 0x30 */
+ 0xEEE0, 0xEEEB, 0xEEDA, 0, 0, 0xEEDF, 0xD3CB, 0xEEE4, /* 0x30 */
+ 0xBCD8, 0, 0, 0, 0, 0xEED2, 0, 0, /* 0x40 */
+ 0xEEE8, 0xEEE7, 0, 0, 0, 0xEEE9, 0, 0, /* 0x40 */
+ 0, 0xB2AC, 0, 0, 0, 0xEEDE, 0, 0xC7AF, /* 0x50 */
+ 0, 0, 0xC3AD, 0xC7A6, 0, 0, 0xEEE1, 0, /* 0x50 */
+ 0, 0, 0xB2A7, 0, 0, 0, 0xEEDB, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xEEE2, 0xEEE3, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xBDC2, 0, 0xEEEF, 0xB8F5, 0, 0, 0, 0xEEFE, /* 0x70 */
+ 0xD2F8, 0, 0, 0xEFA5, 0, 0xCDAD, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xF6C6, 0, /* 0x80 */
+ 0, 0xCFB3, 0, 0xEEFD, 0, 0, 0xEEF9, 0, /* 0x90 */
+ 0xC3FA, 0, 0xEFA2, 0, 0xCFCE, 0, 0, 0, /* 0x90 */
+ 0xEEEE, 0, 0, 0xEFA8, 0, 0xD2BF, 0xEEF7, 0, /* 0xA0 */
+ 0xEFA7, 0xEEFB, 0xEEF0, 0xEFA4, 0xEEED, 0, 0, 0, /* 0xA0 */
+ 0, 0xEEF6, 0, 0, 0, 0, 0, 0xCFFA, /* 0xB0 */
+ 0, 0xD0E2, 0, 0xCCE0, 0xEFB1, 0, 0, 0, /* 0xB0 */
+ 0, 0xC2C1, 0, 0xEFB6, 0, 0xD0BF, 0, 0xB1B5, /* 0xC0 */
+ 0xF6C8, 0, 0, 0, 0xEEFA, 0, 0, 0xEEF2, /* 0xC0 */
+ 0, 0, 0xB7E6, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xEFB2, 0, 0xEFB7, /* 0xD0 */
+ 0, 0, 0, 0xEEF4, 0xB3FA, 0xEFAD, 0xEFB8, 0, /* 0xE0 */
+ 0xEFB0, 0, 0xC6CC, 0, 0, 0xC8F1, 0xEEF1, 0xEFAF, /* 0xE0 */
+ 0xEFAE, 0xEFAB, 0, 0, 0, 0, 0xEFB3, 0, /* 0xF0 */
+ 0xBEE2, 0, 0, 0, 0xB8D6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEFBE, 0, 0, 0, 0, 0xEFBA, 0xEFC2, /* 0x00 */
+ 0xEFC3, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xD7B6, 0, 0xEFB9, 0, 0, 0xEFBF, 0, 0, /* 0x10 */
+ 0xB4B8, 0xEFC5, 0xEFA3, 0xEFBC, 0, 0, 0, 0xEFC4, /* 0x10 */
+ 0xB6A7, 0, 0xC7AE, 0, 0, 0, 0xBDF5, 0, /* 0x20 */
+ 0xC3AA, 0, 0, 0xCEFD, 0, 0, 0xEFC0, 0xB4ED, /* 0x20 */
+ 0, 0, 0xC2BC, 0xC3CC, 0, 0, 0xF8A3, 0, /* 0x30 */
+ 0xEFAA, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xEFBD, 0xCFC7, 0, 0xEFC1, 0, 0, 0xEECD, 0xEFC7, /* 0x40 */
+ 0, 0, 0, 0xB9F8, 0, 0xB6C6, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xEFC9, 0, 0, 0, /* 0x50 */
+ 0xD5A1, 0, 0, 0xB6CD, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xEFCA, 0xEFC6, 0, 0, /* 0x60 */
+ 0, 0xEFBB, 0xF6CA, 0, 0xC7C2, 0, 0, 0, /* 0x60 */
+ 0xEFCC, 0, 0, 0, 0, 0xBCFC, 0xEFC8, 0, /* 0x70 */
+ 0, 0, 0xD5E0, 0, 0, 0, 0xEFF1, 0, /* 0x70 */
+ 0, 0, 0xC3BE, 0, 0xEFCD, 0, 0, 0xEFD1, /* 0x80 */
+ 0, 0, 0xB0F7, 0, 0, 0, 0, 0xF6CC, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xCBF8, 0, /* 0x90 */
+ 0xEFD3, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xCED9, 0xDDF6, 0, 0, 0xEFD6, 0xEEF8, /* 0xA0 */
+ 0, 0xEFA1, 0xEFCB, 0, 0xB8E4, 0, 0xD5F2, 0, /* 0xA0 */
+ 0xEFD7, 0, 0, 0xC4F8, 0, 0xEFD8, 0, 0, /* 0xB0 */
+ 0xEFD4, 0, 0, 0, 0, 0, 0, 0xEFD5, /* 0xB0 */
+ 0, 0, 0, 0xEFDF, 0, 0, 0, 0xEFE0, /* 0xC0 */
+ 0xC1B4, 0, 0xF6CB, 0, 0xEFD2, 0xEFDD, 0, 0, /* 0xC0 */
+ 0, 0xEFE1, 0, 0, 0, 0, 0xF7E9, 0xEFAC, /* 0xD0 */
+ 0xEFCF, 0, 0, 0, 0xEFDB, 0xEFDC, 0xEFDE, 0xB2F9, /* 0xD0 */
+ 0, 0xBEB5, 0xEFDA, 0, 0xEFCE, 0, 0, 0, /* 0xE0 */
+ 0xF6C9, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xEEFC, 0, 0xEFE4, /* 0xF0 */
+ 0, 0xEFEA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEEF3, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0xEFA6, 0, 0, 0, 0, /* 0x00 */
+ 0xC1CD, 0, 0xEFA9, 0xEFE6, 0xEFE2, 0, 0, 0, /* 0x10 */
+ 0xD6D3, 0xEFEB, 0, 0, 0, 0xEFE3, 0, 0, /* 0x10 */
+ 0xEFE8, 0, 0, 0, 0, 0, 0xEFB4, 0xEFB5, /* 0x20 */
+ 0xEFD0, 0, 0, 0, 0, 0, 0xC1AD, 0, /* 0x20 */
+ 0, 0, 0xEFED, 0xC0D8, 0, 0xCCFA, 0, 0, /* 0x30 */
+ 0xEEEC, 0, 0xEEF5, 0, 0, 0, 0xF6CD, 0xEFEE, /* 0x30 */
+ 0, 0, 0, 0, 0xD6FD, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xEFEC, 0, 0xEFD9, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xBCF8, 0, 0xEFEF, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xEEE5, 0, 0, 0xEFF0, 0, 0xEFE5, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xF6CE, 0, 0xEFE7, 0, 0, /* 0x60 */
+ 0xD4BF, 0, 0xCFE2, 0, 0, 0, 0, 0xC4F7, /* 0x70 */
+ 0, 0xEFE9, 0, 0, 0xC2E0, 0xD7EA, 0xF6C7, 0xD4E4 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB3A4, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xC3C5, 0, 0xE3C5, 0xC9C1, 0, 0, 0xE3C6, 0, /* 0x80 */
+ 0, 0xB1D5, 0, 0xBFAA, 0xE3CA, 0, 0xE3C8, 0xC8F2, /* 0x80 */
+ 0, 0xCFD0, 0, 0xBCE4, 0xE3C9, 0, 0, 0, /* 0x90 */
+ 0xD5A2, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xBAD2, 0, 0xB8F3, 0xF8B9, 0xB7A7, 0, 0, /* 0xA0 */
+ 0xB9EB, 0xC3F6, 0, 0xE3CD, 0xE3CF, 0xE3CC, 0, 0, /* 0xA0 */
+ 0, 0, 0xD4C4, 0, 0, 0, 0xE3D1, 0, /* 0xB0 */
+ 0, 0xD1CB, 0, 0xD1D6, 0xE3D5, 0xE3D4, 0xE3D0, 0xE3D3, /* 0xB0 */
+ 0, 0, 0, 0xE3D6, 0, 0, 0xF8A2, 0, /* 0xC0 */
+ 0xE3C7, 0, 0xC0AB, 0xE3D7, 0xC0BB, 0, 0, 0, /* 0xC0 */
+ 0xE3D9, 0, 0, 0, 0xE3D8, 0xE3DA, 0xB4B3, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xB9D8, 0, 0xE3DB, 0, /* 0xD0 */
+ 0, 0xB2FB, 0xF8DB, 0, 0, 0xE3CB /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0xB8B7, 0xDAE2, 0, 0, /* 0x10 */
+ 0, 0xDAE4, 0xDAE3, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xDAE6, 0, 0, 0, 0xC8EE, 0, /* 0x20 */
+ 0, 0xDAE5, 0xB7C0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xD7E8, 0xDAE8, 0xDAE7, 0, 0xB0A2, /* 0x30 */
+ 0xCDD3, 0, 0xDAE9, 0, 0xB8BD, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xC2AA, 0xC4B0, 0xBDB5, 0, 0, /* 0x40 */
+ 0xCFDE, 0, 0, 0, 0xDAEB, 0, 0, 0, /* 0x50 */
+ 0xDAEA, 0, 0, 0xB1DD, 0, 0xC9C2, 0, 0xDAEC, /* 0x50 */
+ 0, 0xB6B8, 0xD4BA, 0xD5F3, 0xB3FD, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xC5E3, 0, 0xDAEE, 0, 0, 0, /* 0x60 */
+ 0xD2F5, 0, 0xDAEF, 0xB3C2, 0xDAF0, 0xC1EA, 0xCCD5, 0xCFDD, /* 0x70 */
+ 0xC2BD, 0, 0, 0, 0, 0xD1F4, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xD3E7, 0xC2A1, 0, /* 0x80 */
+ 0xDAF1, 0xDAED, 0xB6D3, 0xCBE5, 0, 0xDAF2, 0xBDD7, 0, /* 0x80 */
+ 0, 0, 0, 0, 0xB8F4, 0xD4C9, 0, 0xDAF3, /* 0x90 */
+ 0xB0AF, 0xCFB6, 0, 0xBCCA, 0xD5CF, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCBED, /* 0xA0 */
+ 0xCBE6, 0, 0xCFD5, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xDAF4, 0xD2FE, 0, 0xE3C4, 0xC2A4, 0, 0, 0, /* 0xB0 */
+ 0xC1A5, 0xF6BF, 0, 0xF9A2, 0xF6C0, 0xF6C1, 0, 0, /* 0xB0 */
+ 0xC8B8, 0xD1E3, 0, 0, 0xD0DB, 0xD1C5, 0xBCAF, 0xB9CD, /* 0xC0 */
+ 0, 0xEFF4, 0, 0, 0xB4C6, 0xD3BA, 0xF6C2, 0, /* 0xC0 */
+ 0, 0, 0xF6C3, 0, 0, 0xB5F1, 0xCBE4, 0, /* 0xD0 */
+ 0, 0xCBAB, 0, 0xB3FB, 0xD4D3, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xC0EB, 0xC4D1, 0, 0, 0, 0, /* 0xE0 */
+ 0xD3EA, 0xF6A7, 0xD1A9, 0, 0, 0, 0, 0xF6A9, /* 0xE0 */
+ 0, 0, 0xD4C6, 0, 0, 0, 0xC1E3, 0xC0D7, /* 0xF0 */
+ 0, 0xB1A2, 0, 0xB5E7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD0E8, 0, 0, 0, 0xCFF6, 0, 0xF6AA, 0xD5F0, /* 0x00 */
+ 0xF6AC, 0xC3B9, 0, 0, 0, 0xBBF4, 0xF6AE, 0xF6AD, /* 0x00 */
+ 0, 0, 0, 0xC4DE, 0, 0, 0xC1D8, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xCBAA, 0, 0xCFBC, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCEED, /* 0x20 */
+ 0, 0, 0xF6AF, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xF6B1, 0, 0xC2B6, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xB0D4, 0xC5F9, 0, 0, 0, 0xF6AB, 0xF6B2, 0, /* 0x30 */
+ 0, 0, 0xF6A8, 0, 0xF6B0, 0, 0, 0, /* 0x40 */
+ 0xC1E9, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xC7E0, 0, 0, 0, 0xBEB8, 0, /* 0x50 */
+ 0, 0, 0xF6A6, 0xB5E5, 0xBEB2, 0, 0xB7C7, 0, /* 0x50 */
+ 0xBFBF, 0xC3D2, 0xC3E6, 0, 0, 0, 0, 0, /* 0x60 */
+ 0xD8CC, 0xB8EF, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xBDF9, 0xD1A5, 0, 0xB0D0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0xF7B0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xF7B1, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xD0AC, 0, 0xB0B0, 0, 0xB9AE, /* 0x80 */
+ 0, 0, 0, 0, 0xF7B4, 0, 0, 0, /* 0x90 */
+ 0xC7CA, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xBECF, 0, 0, 0xF7B7, 0, 0, 0xF8E4, 0, /* 0xA0 */
+ 0, 0, 0, 0xF7B6, 0, 0xB1DE, 0, 0, /* 0xA0 */
+ 0, 0, 0xF7B8, 0, 0xF7B9, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xF7B3, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF7B2, 0, 0, 0xF8E1, 0, /* 0xC0 */
+ 0, 0xF7B5, 0, 0xCEA4, 0xC8CD, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xBAAB, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xE8B8, 0, 0, 0xE8BA, 0, 0xE8B9, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xBEC2, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xD2F4, 0, 0xD4CF, 0xC9D8, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCFEC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2B3, 0xB6A5, 0xC7EA, 0, 0xCFEE, 0xCBB3, 0xF1FC, /* 0x00 */
+ 0xD0EB, 0, 0xE7EF, 0, 0xCBCC, 0, 0xF1FD, 0xF1FE, /* 0x00 */
+ 0xD4A4, 0xCDE7, 0xB0E4, 0xB6D9, 0, 0, 0, 0xC6C4, /* 0x10 */
+ 0xC1EC, 0, 0, 0, 0xF2A2, 0, 0, 0, /* 0x10 */
+ 0, 0xF2A1, 0, 0, 0xD2C3, 0, 0xF2A4, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xCDB7, 0, 0, /* 0x20 */
+ 0xBCD5, 0, 0, 0, 0, 0, 0, 0xF2A5, /* 0x30 */
+ 0xBEB1, 0, 0, 0xC6B5, 0, 0xCDC7, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xBFC5, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xCCE2, 0xB6EE, 0xF2A6, 0, /* 0x40 */
+ 0, 0, 0, 0xF2A7, 0xD1D5, 0, 0, 0, /* 0x50 */
+ 0xD4B8, 0xF2AA, 0, 0xB5DF, 0, 0, 0xC0E0, 0, /* 0x50 */
+ 0, 0, 0xF2A9, 0, 0, 0xF2AB, 0, 0xB9CB, /* 0x60 */
+ 0, 0, 0, 0xB2FC, 0xF2AC, 0, 0, 0xCFD4, /* 0x60 */
+ 0xF2AD, 0xC2AD, 0, 0xF2A8, 0xC8A7, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xB7E7, 0, 0, 0, 0, 0, 0xECA9, 0xECAA, /* 0xA0 */
+ 0, 0xF8EC, 0, 0xF8B7, 0, 0, 0xECAB, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xECAC, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xC6AE, 0, 0xECAD, 0, /* 0xC0 */
+ 0xECAE, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xB7C9, 0, 0, 0, 0xCAB3, /* 0xD0 */
+ 0xE2BB, 0, 0xF8BF, 0, 0, 0, 0, 0xE2B8, /* 0xE0 */
+ 0, 0xE2BD, 0xE2BF, 0xE2C0, 0, 0xE2C1, 0, 0xB7B9, /* 0xE0 */
+ 0, 0, 0xD2FB, 0, 0xE2C2, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0xCBC7, 0xB1A5, 0xCACE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBDC8, 0, 0xB1FD, 0, 0, /* 0x00 */
+ 0, 0xE2C3, 0xD1F8, 0, 0xB6FC, 0, 0, 0, /* 0x00 */
+ 0xB2CD, 0xE2C4, 0xC4D9, 0xB6F6, 0, 0, 0, 0, /* 0x10 */
+ 0xD3E0, 0, 0, 0xE2C6, 0, 0, 0xBDA4, 0, /* 0x10 */
+ 0, 0xCFDA, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xB9DD, 0, 0, 0, 0, 0, 0xF7D1, 0, /* 0x20 */
+ 0, 0, 0, 0xE2BC, 0, 0, 0, 0xE2C7, /* 0x30 */
+ 0, 0, 0, 0, 0xE2BE, 0, 0xC1F3, 0xE2C8, /* 0x30 */
+ 0, 0, 0, 0xE2C9, 0, 0xC2F8, 0, 0, /* 0x40 */
+ 0xE2CA, 0xE2CB, 0xE2CC, 0xC0A1, 0xE2CD, 0, 0, 0, /* 0x40 */
+ 0, 0xBCA2, 0xC8C4, 0, 0xF7D3, 0xF7D2, 0, 0xF7CF, /* 0x50 */
+ 0, 0, 0, 0, 0xF7D0, 0, 0xB2F6, 0, /* 0x50 */
+ 0, 0, 0xE2CE, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xCAD7, 0xD8B8, /* 0x90 */
+ 0xD9E5, 0xCFE3, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF0A5, 0, 0, /* 0xA0 */
+ 0xDCB0, 0, 0, 0, 0xC2ED, 0xD4A6, 0xB7EB, 0, /* 0xA0 */
+ 0, 0xCDD4, 0, 0xB3DB, 0xD1B1, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0xB2B5, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0xD7A4, 0xE6E5, 0xBED4, 0, 0xE6E0, 0xBCDD, 0, 0, /* 0xD0 */
+ 0xE6E6, 0xE6E2, 0, 0xCABB, 0, 0xCDD5, 0, 0xE6E1, /* 0xD0 */
+ 0, 0xC2EE, 0xE6E9, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xBAA7, 0, 0, /* 0xE0 */
+ 0, 0xC2E6, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xBFA5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB3D2, 0, 0, 0, 0xE6ED, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xE6EC, 0xC6EF, 0xE6EB, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xE6F0, 0, /* 0x10 */
+ 0, 0xC6AD, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xE5B9, 0, 0xE6EF, 0xE6F2, 0, /* 0x20 */
+ 0xCCDA, 0, 0, 0, 0, 0, 0xE6E3, 0xC9A7, /* 0x30 */
+ 0xE6F3, 0, 0, 0, 0, 0, 0xC2E2, 0, /* 0x30 */
+ 0xDDEB, 0xE6F1, 0xE6EE, 0xE6F4, 0xE6F5, 0xC7FD, 0, 0, /* 0x40 */
+ 0, 0, 0xE6E8, 0, 0, 0xE6E7, 0, 0xE6F6, /* 0x40 */
+ 0, 0, 0, 0, 0, 0xBDBE, 0, 0xD1E9, /* 0x50 */
+ 0, 0, 0xBEAA, 0xE6E4, 0, 0, 0, 0xD6E8, /* 0x50 */
+ 0, 0, 0xC2BF, 0, 0xE6F8, 0xE6F7, 0, 0, /* 0x60 */
+ 0, 0, 0xE6EA, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xB9C7, 0, 0, 0, 0, 0, 0, 0xB0B9, /* 0xA0 */
+ 0xF7BB, 0xF7BA, 0, 0, 0, 0, 0xF7BE, 0xF7BC, /* 0xB0 */
+ 0xBAA1, 0, 0xF7BF, 0, 0xF7C0, 0, 0, 0, /* 0xB0 */
+ 0xF7C2, 0xF7C1, 0xF7C4, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF7C3, /* 0xC0 */
+ 0, 0xF7C7, 0xF8FE, 0xCBE8, 0xCCE5, 0xF7C6, 0xF7C5, 0, /* 0xD0 */
+ 0xB8DF, 0, 0, 0, 0, 0, 0, 0xF7D4, /* 0xD0 */
+ 0, 0xF7D5, 0, 0, 0, 0, 0xF7D6, 0, /* 0xE0 */
+ 0, 0, 0, 0xF7D8, 0, 0xF7DA, 0xF8B1, 0xF7D7, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0xF7DB, 0, 0xF7D9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD7D7, 0, 0, 0xCBC9, 0, /* 0x00 */
+ 0xF7DC, 0, 0, 0, 0, 0xF8BA, 0, 0xF7DD, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0xF8F6, 0, 0, 0, 0, 0xF7DF, /* 0x10 */
+ 0, 0, 0xF7DE, 0xF7E0, 0, 0xB6B7, 0, 0xC4D6, /* 0x20 */
+ 0, 0xE3D2, 0, 0, 0, 0, 0xE3CE, 0xDBCB, /* 0x20 */
+ 0, 0xD3F4, 0xD8AA, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE5F7, 0xB9ED, 0, 0, 0, /* 0x30 */
+ 0, 0xBFFD, 0xBBEA, 0xF7C9, 0xC6C7, 0xF7C8, 0, 0, /* 0x40 */
+ 0xF7CC, 0, 0, 0, 0, 0xF7CD, 0xF7CB, 0xCEBA, /* 0x40 */
+ 0, 0xF7CE, 0, 0, 0xC4A7, 0, 0, 0, /* 0x50 */
+ 0xF7CA, 0, 0xD3E3, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0xC2B3, /* 0x60 */
+ 0, 0, 0, 0, 0xF6D0, 0, 0, 0xF6CF, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xF6D1, 0, 0xF6D2, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xF6D3, 0, /* 0x80 */
+ 0xF6D8, 0xB1AB, 0xF6D6, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xF6DA, 0, 0, 0xF6DF, 0xF6DC, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xF6DB, 0xF6DE, 0, 0xF6D9, 0xCFCA, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xF6E7, 0xF6E1, 0, 0, 0, 0, 0, 0xF6E9, /* 0xC0 */
+ 0, 0xC0F0, 0xF6E8, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xF6F6, 0, 0xF6EB, 0, /* 0xD0 */
+ 0, 0, 0, 0xF6F4, 0, 0xF6F1, 0, 0, /* 0xD0 */
+ 0, 0xF6EE, 0xF6F2, 0, 0xF6EF, 0, 0, 0xF6F0, /* 0xE0 */
+ 0xBEA8, 0, 0xF6EC, 0xF6ED, 0, 0, 0, 0, /* 0xE0 */
+ 0xF6F3, 0, 0, 0, 0xF6F5, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xF6EA, 0, 0xF6FD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xF6F8, 0xF6FC, 0, 0, 0, 0xF6FA, 0, 0, /* 0x00 */
+ 0xF6F9, 0, 0xF6FB, 0xC8FA, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF6FE, 0, 0, 0xF6E5, 0, 0xF7A4, 0, 0, /* 0x20 */
+ 0xF7A3, 0xF7A5, 0, 0, 0, 0xF7A2, 0, 0, /* 0x20 */
+ 0, 0xF6E3, 0xF7A1, 0xF7A6, 0, 0xF7AA, 0, 0xF6E6, /* 0x30 */
+ 0, 0xF6E4, 0, 0xF7A9, 0, 0, 0xF7A7, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xF7AB, 0, 0, /* 0x40 */
+ 0xF7A8, 0xB1EE, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xF7AE, 0, 0xF7AD, 0, 0xF7AC, 0xC1DB, /* 0x50 */
+ 0xF6E0, 0, 0, 0, 0, 0xF6F7, 0, 0xF6D7, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF7AF, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF6DD, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xF6D4, 0, 0xF6E2, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xC4F1, 0, 0, /* 0xE0 */
+ 0, 0xF0AF, 0, 0, 0xD9EC, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xB7EF, 0xC3F9, 0, 0xF0B0 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0B2, 0xF0B1, /* 0x00 */
+ 0, 0xD1BB, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xCDD2, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xD4A7, 0, 0xF0B6, 0, 0xF0B7, /* 0x10 */
+ 0, 0, 0, 0xF0B3, 0, 0, 0xD1EC, 0, /* 0x20 */
+ 0xD1BC, 0, 0, 0, 0, 0, 0, 0xF0B9, /* 0x20 */
+ 0xF0BB, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xBAE8, 0, 0, 0, 0xB8EB, /* 0x30 */
+ 0, 0, 0xF0BC, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0xBEE9, 0xF0C1, 0xF0BE, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xF0C3, 0xB6EC, 0, 0, /* 0x50 */
+ 0xF0C0, 0xF0C4, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xF0C6, 0, 0xC5F4, 0, 0, 0xF0C7, /* 0x60 */
+ 0, 0, 0xC8B5, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF0B4, /* 0x80 */
+ 0, 0xF0C8, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xF0C5, 0, 0, 0, 0, /* 0x90 */
+ 0xF0C9, 0, 0xF0CA, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF0CC, 0, 0, /* 0xA0 */
+ 0, 0xF0CD, 0, 0, 0, 0, 0, 0xDDBA, /* 0xA0 */
+ 0, 0, 0, 0, 0xBAD7, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xF7BD, 0xF0CF, 0, 0, 0, /* 0xB0 */
+ 0xF0CB, 0, 0xF0CE, 0, 0xBCA6, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xF0D1, 0, 0, 0, 0xC5B8, /* 0xD0 */
+ 0, 0xF0BA, 0xF0D2, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xF0B8, 0xF0D4, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF0D3, /* 0xE0 */
+ 0, 0, 0xF0D5, 0xF0C2, 0, 0, 0, 0, /* 0xF0 */
+ 0xF0D6, 0xD3A5, 0xF0D8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xF0D7, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xF0B5, 0, 0, /* 0x10 */
+ 0, 0, 0xF0D0, 0xF0D9, 0, 0xF0BF, 0xF0BD, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xF8D2, 0, 0, /* 0x70 */
+ 0, 0xF8F4, 0xF5BA, 0, 0xBCEF, 0xD1CE, 0, 0xC2B9, /* 0x70 */
+ 0, 0, 0xF7E4, 0, 0, 0, 0, 0xF7E5, /* 0x80 */
+ 0xF7E6, 0, 0, 0xF7E7, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xF7E8, 0xC2B4, 0, 0, 0, 0xC0F6, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xF7EA, 0, 0xF7EB, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xC2F3, 0, 0, /* 0xA0 */
+ 0, 0xF4EF, 0, 0, 0, 0, 0, 0xF8E5, /* 0xA0 */
+ 0, 0, 0, 0, 0xF4F0, 0xF8D9, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xC2E9, 0, 0xC3B4, 0xF7E2, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xBBC6, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xD9E4, 0xCAF2, 0xC0E8, 0xF0A4, /* 0xC0 */
+ 0, 0xBADA, 0, 0, 0xC7AD, 0, 0, 0, /* 0xD0 */
+ 0xC4AC, 0, 0, 0xF7EC, 0xF7ED, 0xF7EE, 0xB5E3, 0xF7F0, /* 0xD0 */
+ 0xF7EF, 0, 0xF7F1, 0, 0, 0xF7F4, 0, 0xF7F3, /* 0xE0 */
+ 0xB5B3, 0, 0, 0, 0, 0, 0, 0xF7F6, /* 0xE0 */
+ 0, 0, 0xF7F5, 0, 0xF8D4, 0, 0, 0xF7F2, /* 0xF0 */
+ 0, 0xEDE9, 0, 0xEDEA, 0xEDEB, 0xF6BC, 0, 0xF6BD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_GBT_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xF6BE, 0, 0, 0, 0, 0xB6A6, 0, /* 0x00 */
+ 0xD8BE, 0, 0, 0xB9C4, 0, 0xF8AE, 0, 0xD8BB, /* 0x10 */
+ 0, 0xDCB1, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xCAF3, 0, 0xF7F7, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xF7F8, 0, 0, 0xF7F9, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0xF7FB, /* 0x30 */
+ 0, 0xF7FA, 0, 0xB1C7, 0, 0xF7FC, 0xF7FD, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xF7FE, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xC6EB, 0xD5AB, 0, 0, 0, 0xECB4, /* 0x40 */
+ 0, 0, 0xB3DD, 0, 0xF6B3, 0, 0, 0, /* 0x50 */
+ 0, 0xF6B5, 0, 0, 0xF6B7, 0, 0, 0xF6B4, /* 0x50 */
+ 0xF6B6, 0xC1E4, 0, 0xF8AA, 0, 0, 0xF6B8, 0, /* 0x60 */
+ 0, 0, 0xF6BA, 0, 0xF6B9, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xC8A3, 0, 0, 0, 0, 0xF6BB, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xC1FA, 0, 0, /* 0x80 */
+ 0xC5D3, 0, 0, 0, 0xB9A8, 0xEDE8, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xB9EA, 0, 0, 0, /* 0x90 */
+ 0xD9DF /* 0xA0 */
+ /* 0xA0 */
+};
diff --git a/sal/textenc/tcvtscn6.tab b/sal/textenc/tcvtscn6.tab
new file mode 100644
index 000000000..806ec561b
--- /dev/null
+++ b/sal/textenc/tcvtscn6.tab
@@ -0,0 +1,2951 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+/* This file contain the information tables for all */
+/* chinese simplified (China) charsets: */
+/* GB2312, GBK, MS936, APPLE_CHINSIMP */
+
+/* GBK is MS-CP 936 and a superset of GB-2312-80. In GB-2312-80 the range */
+/* is 0xA1-0xFE for the leading byte and 0xA1-0xFE for the trailing byte. */
+/* In GBK the range is from 0x81-0xFE for the leading byte and 0x40-0xFE */
+/* for the trailing byte. */
+
+/* ======================================================================= */
+
+#define GBKOFF 0x61
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aGB2312UniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0x20AC, 0, 0, nullptr }, /* 0x80 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x81 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x82 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */
+ { 0, 1, 0, nullptr }, /* 0xA0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */
+ { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */
+ { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */
+ { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */
+ { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */
+ { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */
+ { 0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF }, /* 0xA8 */
+ { 0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF }, /* 0xA9 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAC */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAD */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAE */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAF */ /* We convert this as double byte */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B0+GBKOFF }, /* 0xB0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B1+GBKOFF }, /* 0xB1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B2+GBKOFF }, /* 0xB2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B3+GBKOFF }, /* 0xB3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B4+GBKOFF }, /* 0xB4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B5+GBKOFF }, /* 0xB5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B6+GBKOFF }, /* 0xB6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B7+GBKOFF }, /* 0xB7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B8+GBKOFF }, /* 0xB8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B9+GBKOFF }, /* 0xB9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BA+GBKOFF }, /* 0xBA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BB+GBKOFF }, /* 0xBB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BC+GBKOFF }, /* 0xBC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BD+GBKOFF }, /* 0xBD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BE+GBKOFF }, /* 0xBE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BF+GBKOFF }, /* 0xBF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C0+GBKOFF }, /* 0xC0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C1+GBKOFF }, /* 0xC1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C2+GBKOFF }, /* 0xC2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C3+GBKOFF }, /* 0xC3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C4+GBKOFF }, /* 0xC4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C5+GBKOFF }, /* 0xC5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C6+GBKOFF }, /* 0xC6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C7+GBKOFF }, /* 0xC7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C8+GBKOFF }, /* 0xC8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C9+GBKOFF }, /* 0xC9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CA+GBKOFF }, /* 0xCA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CB+GBKOFF }, /* 0xCB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CC+GBKOFF }, /* 0xCC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CD+GBKOFF }, /* 0xCD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CE+GBKOFF }, /* 0xCE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CF+GBKOFF }, /* 0xCF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D0+GBKOFF }, /* 0xD0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D1+GBKOFF }, /* 0xD1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D2+GBKOFF }, /* 0xD2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D3+GBKOFF }, /* 0xD3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D4+GBKOFF }, /* 0xD4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D5+GBKOFF }, /* 0xD5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D6+GBKOFF }, /* 0xD6 */
+ { 0, 0xA1, 0xF9, aImplDBCSToUniTab_GBK_D7+GBKOFF }, /* 0xD7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D8+GBKOFF }, /* 0xD8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D9+GBKOFF }, /* 0xD9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DA+GBKOFF }, /* 0xDA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DB+GBKOFF }, /* 0xDB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DC+GBKOFF }, /* 0xDC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DD+GBKOFF }, /* 0xDD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DE+GBKOFF }, /* 0xDE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DF+GBKOFF }, /* 0xDF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E0+GBKOFF }, /* 0xE0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E1+GBKOFF }, /* 0xE1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E2+GBKOFF }, /* 0xE2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E3+GBKOFF }, /* 0xE3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E4+GBKOFF }, /* 0xE4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E5+GBKOFF }, /* 0xE5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E6+GBKOFF }, /* 0xE6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E7+GBKOFF }, /* 0xE7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E8+GBKOFF }, /* 0xE8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E9+GBKOFF }, /* 0xE9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EA+GBKOFF }, /* 0xEA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EB+GBKOFF }, /* 0xEB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EC+GBKOFF }, /* 0xEC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_ED+GBKOFF }, /* 0xED */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EE+GBKOFF }, /* 0xEE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EF+GBKOFF }, /* 0xEF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F0+GBKOFF }, /* 0xF0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F1+GBKOFF }, /* 0xF1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F2+GBKOFF }, /* 0xF2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F3+GBKOFF }, /* 0xF3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F4+GBKOFF }, /* 0xF4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F5+GBKOFF }, /* 0xF5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F6+GBKOFF }, /* 0xF6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F7+GBKOFF }, /* 0xF7 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFD */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ /* We convert this as double byte */
+ { 0, 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aGB2312DBCSHighTab[256] =
+{
+ { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 }, /* 0x00 */
+ { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */
+ { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ /* we convert this char also to unicode */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x14, 0xAC, aImplUniToDBCSTab_GB_20 }, /* 0x20 */
+ { 0x03, 0x93, aImplUniToDBCSTab_GB_21 }, /* 0x21 */
+ { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */
+ { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */
+ { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 }, /* 0x25 */
+ { 0x05, 0x42, aImplUniToDBCSTab_GB_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 }, /* 0x30 */
+ { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */
+ { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */
+ { 1, 0, nullptr }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_4E }, /* 0x4E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GB_4F }, /* 0x4F */
+ { 0x0C, 0xFB, aImplUniToDBCSTab_GB_50 }, /* 0x50 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_GB_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_52 }, /* 0x52 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_GB_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_54 }, /* 0x54 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GB_55 }, /* 0x55 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_56 }, /* 0x56 */
+ { 0x03, 0xFD, aImplUniToDBCSTab_GB_57 }, /* 0x57 */
+ { 0x00, 0xF9, aImplUniToDBCSTab_GB_58 }, /* 0x58 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_GB_59 }, /* 0x59 */
+ { 0x01, 0xF1, aImplUniToDBCSTab_GB_5A }, /* 0x5A */
+ { 0x09, 0xFF, aImplUniToDBCSTab_GB_5B }, /* 0x5B */
+ { 0x01, 0xFB, aImplUniToDBCSTab_GB_5C }, /* 0x5C */
+ { 0x02, 0xFE, aImplUniToDBCSTab_GB_5D }, /* 0x5D */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_5E }, /* 0x5E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_5F }, /* 0x5F */
+ { 0x00, 0xFA, aImplUniToDBCSTab_GB_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_61 }, /* 0x61 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_GB_62 }, /* 0x62 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_63 }, /* 0x63 */
+ { 0x00, 0xE6, aImplUniToDBCSTab_GB_64 }, /* 0x64 */
+ { 0x00, 0xFA, aImplUniToDBCSTab_GB_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_67 }, /* 0x67 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_GB_68 }, /* 0x68 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_69 }, /* 0x69 */
+ { 0x0A, 0xAC, aImplUniToDBCSTab_GB_6A }, /* 0x6A */
+ { 0x20, 0xFD, aImplUniToDBCSTab_GB_6B }, /* 0x6B */
+ { 0x05, 0xFE, aImplUniToDBCSTab_GB_6C }, /* 0x6C */
+ { 0x01, 0xFC, aImplUniToDBCSTab_GB_6D }, /* 0x6D */
+ { 0x05, 0xF9, aImplUniToDBCSTab_GB_6E }, /* 0x6E */
+ { 0x02, 0xEF, aImplUniToDBCSTab_GB_6F }, /* 0x6F */
+ { 0x11, 0xFD, aImplUniToDBCSTab_GB_70 }, /* 0x70 */
+ { 0x09, 0xF9, aImplUniToDBCSTab_GB_71 }, /* 0x71 */
+ { 0x06, 0xFC, aImplUniToDBCSTab_GB_72 }, /* 0x72 */
+ { 0x01, 0xF2, aImplUniToDBCSTab_GB_73 }, /* 0x73 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_GB_74 }, /* 0x74 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_GB_75 }, /* 0x75 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_76 }, /* 0x76 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_77 }, /* 0x77 */
+ { 0x00, 0xFA, aImplUniToDBCSTab_GB_78 }, /* 0x78 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_GB_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_7A }, /* 0x7A */
+ { 0x03, 0xFE, aImplUniToDBCSTab_GB_7B }, /* 0x7B */
+ { 0x07, 0xFB, aImplUniToDBCSTab_GB_7C }, /* 0x7C */
+ { 0x0A, 0xAE, aImplUniToDBCSTab_GB_7D }, /* 0x7D */
+ { 0x3B, 0xFF, aImplUniToDBCSTab_GB_7E }, /* 0x7E */
+ { 0x00, 0xFC, aImplUniToDBCSTab_GB_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_GB_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_GB_81 }, /* 0x81 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_GB_82 }, /* 0x82 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_GB_83 }, /* 0x83 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_84 }, /* 0x84 */
+ { 0x0C, 0xFF, aImplUniToDBCSTab_GB_85 }, /* 0x85 */
+ { 0x05, 0xFE, aImplUniToDBCSTab_GB_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_87 }, /* 0x87 */
+ { 0x03, 0xFE, aImplUniToDBCSTab_GB_88 }, /* 0x88 */
+ { 0x02, 0xF3, aImplUniToDBCSTab_GB_89 }, /* 0x89 */
+ { 0x00, 0x93, aImplUniToDBCSTab_GB_8A }, /* 0x8A */
+ { 0x07, 0xFF, aImplUniToDBCSTab_GB_8B }, /* 0x8B */
+ { 0x00, 0x98, aImplUniToDBCSTab_GB_8C }, /* 0x8C */
+ { 0x1D, 0xFD, aImplUniToDBCSTab_GB_8D }, /* 0x8D */
+ { 0x05, 0xCE, aImplUniToDBCSTab_GB_8E }, /* 0x8E */
+ { 0x66, 0xFD, aImplUniToDBCSTab_GB_8F }, /* 0x8F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_90 }, /* 0x90 */
+ { 0x02, 0xDC, aImplUniToDBCSTab_GB_91 }, /* 0x91 */
+ { 0x74, 0xC8, aImplUniToDBCSTab_GB_92 }, /* 0x92 */
+ { 0x3E, 0xD6, aImplUniToDBCSTab_GB_93 }, /* 0x93 */
+ { 0x3E, 0xFF, aImplUniToDBCSTab_GB_94 }, /* 0x94 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_95 }, /* 0x95 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_96 }, /* 0x96 */
+ { 0x00, 0xF6, aImplUniToDBCSTab_GB_97 }, /* 0x97 */
+ { 0x75, 0xE9, aImplUniToDBCSTab_GB_98 }, /* 0x98 */
+ { 0x0D, 0xA8, aImplUniToDBCSTab_GB_99 }, /* 0x99 */
+ { 0x6C, 0xFB, aImplUniToDBCSTab_GB_9A }, /* 0x9A */
+ { 0x03, 0x54, aImplUniToDBCSTab_GB_9B }, /* 0x9B */
+ { 0x7C, 0xE2, aImplUniToDBCSTab_GB_9C }, /* 0x9C */
+ { 1, 0, nullptr }, /* 0x9D */
+ { 0x1F, 0xFE, aImplUniToDBCSTab_GB_9E }, /* 0x9E */
+ { 0x0B, 0xA0, aImplUniToDBCSTab_GB_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 1, 0, nullptr }, /* 0xF9 */
+ { 1, 0, nullptr }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x31, 0x44, aImplUniToDBCSTab_GB_FE }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* F8A1-FEFE --> E000-E29F */
+/* AAA1-AFFE --> E2A0-E4DF */
+
+#define DBCS_EUDC_MS936_COUNT 2
+ImplDBCSEUDCData const aImplMS936DBCSEUDCTab[DBCS_EUDC_MS936_COUNT] =
+{
+ /* EUDC-Range (the mapping defined by MS is A0-FF, because the */
+ /* unicode range is E000-E29F and E2A0-E4DF) */
+ /* Lead: F8-FE */
+ /* Trail: A1-FE */
+ { 0xF8, 0xFE, 0xA0, 0xFF, 0, 0, 0, 0, 1, 0x60, 0xE000, 0xE29F },
+ /* Lead: AA-AF */
+ /* Trail: A1-FE */
+ { 0xAA, 0xAF, 0xA0, 0xFF, 0, 0, 0, 0, 1, 0x60, 0xE2A0, 0xE4DF }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplGB2312DBCSCvtData =
+{
+ aGB2312UniLeadTab,
+ aGB2312DBCSHighTab,
+ aImplMS936DBCSEUDCTab,
+ DBCS_EUDC_MS936_COUNT,
+ 0x00, 0xFF,
+ 0xA1, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplGB2312TextEncodingData
+ = { { &aImplGB2312DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-cn",
+ "gb2312",
+ 1,
+ 2,
+ 2,
+ 134,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
+
+/* ======================================================================= */
+
+ImplTextEncodingData const aImplEUCCNTextEncodingData
+ = { { &aImplGB2312DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-cn",
+ "gb2312",
+ 1,
+ 2,
+ 2,
+ 134,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aGBT12345UniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0x20AC, 0, 0, nullptr }, /* 0x80 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x81 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x82 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */
+ { 0, 1, 0, nullptr }, /* 0xA0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */
+ { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */
+ { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */
+ { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */
+ { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */
+ { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */
+ { 0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF }, /* 0xA8 */
+ { 0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF }, /* 0xA9 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAC */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAD */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAE */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAF */ /* We convert this as double byte */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B0 }, /* 0xB0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B1 }, /* 0xB1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B2 }, /* 0xB2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B3 }, /* 0xB3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B4 }, /* 0xB4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B5 }, /* 0xB5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B6 }, /* 0xB6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B7 }, /* 0xB7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B8 }, /* 0xB8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B9 }, /* 0xB9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BA }, /* 0xBA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BB }, /* 0xBB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BC }, /* 0xBC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BD }, /* 0xBD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BE }, /* 0xBE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BF }, /* 0xBF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C0 }, /* 0xC0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C1 }, /* 0xC1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C2 }, /* 0xC2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C3 }, /* 0xC3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C4 }, /* 0xC4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C5 }, /* 0xC5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C6 }, /* 0xC6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C7 }, /* 0xC7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C8 }, /* 0xC8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C9 }, /* 0xC9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CA }, /* 0xCA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CB }, /* 0xCB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CC }, /* 0xCC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CD }, /* 0xCD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CE }, /* 0xCE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CF }, /* 0xCF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D0 }, /* 0xD0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D1 }, /* 0xD1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D2 }, /* 0xD2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D3 }, /* 0xD3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D4 }, /* 0xD4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D5 }, /* 0xD5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D6 }, /* 0xD6 */
+ { 0, 0xA1, 0xF9, aImplDBCSToUniTab_GBT_D7 }, /* 0xD7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D8 }, /* 0xD8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D9 }, /* 0xD9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DA }, /* 0xDA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DB }, /* 0xDB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DC }, /* 0xDC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DD }, /* 0xDD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DE }, /* 0xDE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DF }, /* 0xDF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E0 }, /* 0xE0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E1 }, /* 0xE1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E2 }, /* 0xE2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E3 }, /* 0xE3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E4 }, /* 0xE4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E5 }, /* 0xE5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E6 }, /* 0xE6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E7 }, /* 0xE7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E8 }, /* 0xE8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E9 }, /* 0xE9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EA }, /* 0xEA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EB }, /* 0xEB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EC }, /* 0xEC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_ED }, /* 0xED */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EE }, /* 0xEE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EF }, /* 0xEF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F0 }, /* 0xF0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F1 }, /* 0xF1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F2 }, /* 0xF2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F3 }, /* 0xF3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F4 }, /* 0xF4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F5 }, /* 0xF5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F6 }, /* 0xF6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F7 }, /* 0xF7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F8 }, /* 0xF8 */
+ { 0, 0xA1, 0xA9, aImplDBCSToUniTab_GBT_F9 }, /* 0xF9 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFD */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ /* We convert this as double byte */
+ { 0, 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aGBT12345DBCSHighTab[256] =
+{
+ { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 }, /* 0x00 */
+ { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */
+ { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ /* we convert this char also to unicode */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x14, 0xAC, aImplUniToDBCSTab_GB_20 }, /* 0x20 */
+ { 0x03, 0x93, aImplUniToDBCSTab_GB_21 }, /* 0x21 */
+ { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */
+ { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */
+ { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 }, /* 0x25 */
+ { 0x05, 0x42, aImplUniToDBCSTab_GB_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 }, /* 0x30 */
+ { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */
+ { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */
+ { 1, 0, nullptr }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_4E }, /* 0x4E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GBT_4F }, /* 0x4F */
+ { 0x00, 0xFB, aImplUniToDBCSTab_GBT_50 }, /* 0x50 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_GBT_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_52 }, /* 0x52 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_GBT_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GBT_54 }, /* 0x54 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GBT_55 }, /* 0x55 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_56 }, /* 0x56 */
+ { 0x03, 0xFD, aImplUniToDBCSTab_GBT_57 }, /* 0x57 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_GBT_58 }, /* 0x58 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_GBT_59 }, /* 0x59 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_GBT_5A }, /* 0x5A */
+ { 0x00, 0xFA, aImplUniToDBCSTab_GBT_5B }, /* 0x5B */
+ { 0x01, 0xFD, aImplUniToDBCSTab_GBT_5C }, /* 0x5C */
+ { 0x06, 0xFE, aImplUniToDBCSTab_GBT_5D }, /* 0x5D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_GBT_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GBT_5F }, /* 0x5F */
+ { 0x0A, 0xFB, aImplUniToDBCSTab_GBT_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_62 }, /* 0x62 */
+ { 0x01, 0xF8, aImplUniToDBCSTab_GBT_63 }, /* 0x63 */
+ { 0x0B, 0xFE, aImplUniToDBCSTab_GBT_64 }, /* 0x64 */
+ { 0x00, 0xFA, aImplUniToDBCSTab_GBT_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_67 }, /* 0x67 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_GBT_68 }, /* 0x68 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GBT_69 }, /* 0x69 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_GBT_6A }, /* 0x6A */
+ { 0x04, 0xFF, aImplUniToDBCSTab_GBT_6B }, /* 0x6B */
+ { 0x05, 0xF5, aImplUniToDBCSTab_GBT_6C }, /* 0x6C */
+ { 0x04, 0xFC, aImplUniToDBCSTab_GBT_6D }, /* 0x6D */
+ { 0x05, 0xFF, aImplUniToDBCSTab_GBT_6E }, /* 0x6E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GBT_6F }, /* 0x6F */
+ { 0x05, 0xFD, aImplUniToDBCSTab_GBT_70 }, /* 0x70 */
+ { 0x09, 0xFE, aImplUniToDBCSTab_GBT_71 }, /* 0x71 */
+ { 0x06, 0xFD, aImplUniToDBCSTab_GBT_72 }, /* 0x72 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GBT_73 }, /* 0x73 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_GBT_74 }, /* 0x74 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_GBT_75 }, /* 0x75 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GBT_76 }, /* 0x76 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_GBT_77 }, /* 0x77 */
+ { 0x02, 0xFD, aImplUniToDBCSTab_GBT_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_GBT_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_7A }, /* 0x7A */
+ { 0x04, 0xFE, aImplUniToDBCSTab_GBT_7B }, /* 0x7B */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GBT_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_GBT_7D }, /* 0x7D */
+ { 0x08, 0x9C, aImplUniToDBCSTab_GBT_7E }, /* 0x7E */
+ { 0x36, 0xFC, aImplUniToDBCSTab_GBT_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_GBT_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_GBT_81 }, /* 0x81 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_GBT_82 }, /* 0x82 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_GBT_83 }, /* 0x83 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GBT_84 }, /* 0x84 */
+ { 0x0C, 0xFF, aImplUniToDBCSTab_GBT_85 }, /* 0x85 */
+ { 0x04, 0xFE, aImplUniToDBCSTab_GBT_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GBT_87 }, /* 0x87 */
+ { 0x03, 0xFE, aImplUniToDBCSTab_GBT_88 }, /* 0x88 */
+ { 0x02, 0xF8, aImplUniToDBCSTab_GBT_89 }, /* 0x89 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GBT_8A }, /* 0x8A */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GBT_8B }, /* 0x8B */
+ { 0x07, 0xFE, aImplUniToDBCSTab_GBT_8C }, /* 0x8C */
+ { 0x04, 0xFD, aImplUniToDBCSTab_GBT_8D }, /* 0x8D */
+ { 0x05, 0xFE, aImplUniToDBCSTab_GBT_8E }, /* 0x8E */
+ { 0x03, 0xFD, aImplUniToDBCSTab_GBT_8F }, /* 0x8F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GBT_90 }, /* 0x90 */
+ { 0x02, 0xFA, aImplUniToDBCSTab_GBT_91 }, /* 0x91 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_GBT_92 }, /* 0x92 */
+ { 0x01, 0xF9, aImplUniToDBCSTab_GBT_93 }, /* 0x93 */
+ { 0x03, 0x7F, aImplUniToDBCSTab_GBT_94 }, /* 0x94 */
+ { 0x77, 0xE5, aImplUniToDBCSTab_GBT_95 }, /* 0x95 */
+ { 0x1C, 0xFB, aImplUniToDBCSTab_GBT_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBT_97 }, /* 0x97 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GBT_98 }, /* 0x98 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_GBT_99 }, /* 0x99 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_GBT_9A }, /* 0x9A */
+ { 0x03, 0xFF, aImplUniToDBCSTab_GBT_9B }, /* 0x9B */
+ { 0x08, 0xF6, aImplUniToDBCSTab_GBT_9C }, /* 0x9C */
+ { 0x06, 0xFA, aImplUniToDBCSTab_GBT_9D }, /* 0x9D */
+ { 0x0C, 0xFF, aImplUniToDBCSTab_GBT_9E }, /* 0x9E */
+ { 0x09, 0xA0, aImplUniToDBCSTab_GBT_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 1, 0, nullptr }, /* 0xF9 */
+ { 1, 0, nullptr }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x31, 0x44, aImplUniToDBCSTab_GB_FE }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplGBT12345DBCSCvtData =
+{
+ aGBT12345UniLeadTab,
+ aGBT12345DBCSHighTab,
+ aImplMS936DBCSEUDCTab,
+ DBCS_EUDC_MS936_COUNT,
+ 0x00, 0xFF,
+ 0xA1, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplGBT12345TextEncodingData
+ = { { &aImplGBT12345DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-cn",
+ "cn-gb-12345",
+ 1,
+ 2,
+ 2,
+ 134,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
+
+/* ======================================================================= */
+
+/* #100054# In the GBK range FE50--FEA0, added those mappings (in both
+ directions) taken from GB-18030 that do not map to Unicode PUA (i.e., those
+ mappings marked with an * below):
+
+ FE50 -> U+2E81 *
+ FE51 -> U+E816
+ FE52 -> U+E817
+ FE53 -> U+E818
+ FE54 -> U+2E84 *
+ FE55 -> U+3473 *
+ FE56 -> U+3447 *
+ FE57 -> U+2E88 *
+ FE58 -> U+2E8B *
+ FE59 -> U+E81E
+ FE5A -> U+359E *
+ FE5B -> U+361A *
+ FE5C -> U+360E *
+ FE5D -> U+2E8C *
+ FE5E -> U+2E97 *
+ FE5F -> U+396E *
+ FE60 -> U+3918 *
+ FE61 -> U+E826
+ FE62 -> U+39CF *
+ FE63 -> U+39DF *
+ FE64 -> U+3A73 *
+ FE65 -> U+39D0 *
+ FE66 -> U+E82B
+ FE67 -> U+E82C
+ FE68 -> U+3B4E *
+ FE69 -> U+3C6E *
+ FE6A -> U+3CE0 *
+ FE6B -> U+2EA7 *
+ FE6C -> U+E831
+ FE6D -> U+E832
+ FE6E -> U+2EAA *
+ FE6F -> U+4056 *
+ FE70 -> U+415F *
+ FE71 -> U+2EAE *
+ FE72 -> U+4337 *
+ FE73 -> U+2EB3 *
+ FE74 -> U+2EB6 *
+ FE75 -> U+2EB7 *
+ FE76 -> U+E83B
+ FE77 -> U+43B1 *
+ FE78 -> U+43AC *
+ FE79 -> U+2EBB *
+ FE7A -> U+43DD *
+ FE7B -> U+44D6 *
+ FE7C -> U+4661 *
+ FE7D -> U+464C *
+ FE7E -> U+E843
+ FE80 -> U+4723 *
+ FE81 -> U+4729 *
+ FE82 -> U+477C *
+ FE83 -> U+478D *
+ FE84 -> U+2ECA *
+ FE85 -> U+4947 *
+ FE86 -> U+497A *
+ FE87 -> U+497D *
+ FE88 -> U+4982 *
+ FE89 -> U+4983 *
+ FE8A -> U+4985 *
+ FE8B -> U+4986 *
+ FE8C -> U+499F *
+ FE8D -> U+499B *
+ FE8E -> U+49B7 *
+ FE8F -> U+49B6 *
+ FE90 -> U+E854
+ FE91 -> U+E855
+ FE92 -> U+4CA3 *
+ FE93 -> U+4C9F *
+ FE94 -> U+4CA0 *
+ FE95 -> U+4CA1 *
+ FE96 -> U+4C77 *
+ FE97 -> U+4CA2 *
+ FE98 -> U+4D13 *
+ FE99 -> U+4D14 *
+ FE9A -> U+4D15 *
+ FE9B -> U+4D16 *
+ FE9C -> U+4D17 *
+ FE9D -> U+4D18 *
+ FE9E -> U+4D19 *
+ FE9F -> U+4DAE *
+ FEA0 -> U+E864
+*/
+
+ImplDBCSToUniLeadTab const aGBKUniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0x20AC, 0, 0, nullptr }, /* 0x80 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_81 }, /* 0x81 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_82 }, /* 0x82 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_83 }, /* 0x83 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_84 }, /* 0x84 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_85 }, /* 0x85 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_86 }, /* 0x86 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_87 }, /* 0x87 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_88 }, /* 0x88 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_89 }, /* 0x89 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8A }, /* 0x8A */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8B }, /* 0x8B */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8C }, /* 0x8C */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8D }, /* 0x8D */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8E }, /* 0x8E */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8F }, /* 0x8F */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_90 }, /* 0x90 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_91 }, /* 0x91 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_92 }, /* 0x92 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_93 }, /* 0x93 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_94 }, /* 0x94 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_95 }, /* 0x95 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_96 }, /* 0x96 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_97 }, /* 0x97 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_98 }, /* 0x98 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_99 }, /* 0x99 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9A }, /* 0x9A */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9B }, /* 0x9B */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9C }, /* 0x9C */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9D }, /* 0x9D */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9E }, /* 0x9E */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9F }, /* 0x9F */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_A0 }, /* 0xA0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */
+ { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */
+ { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */
+ { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */
+ { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */
+ { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */
+ { 0, 0x40, 0xE9, aImplDBCSToUniTab_GBK_A8 }, /* 0xA8 */
+ { 0, 0x40, 0xEF, aImplDBCSToUniTab_GBK_A9 }, /* 0xA9 */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AA }, /* 0xAA */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AB }, /* 0xAB */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AC }, /* 0xAC */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AD }, /* 0xAD */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AE }, /* 0xAE */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AF }, /* 0xAF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B0 }, /* 0xB0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B1 }, /* 0xB1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B2 }, /* 0xB2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B3 }, /* 0xB3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B4 }, /* 0xB4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B5 }, /* 0xB5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B6 }, /* 0xB6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B7 }, /* 0xB7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B8 }, /* 0xB8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B9 }, /* 0xB9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BA }, /* 0xBA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BB }, /* 0xBB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BC }, /* 0xBC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BD }, /* 0xBD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BE }, /* 0xBE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BF }, /* 0xBF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C0 }, /* 0xC0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C1 }, /* 0xC1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C2 }, /* 0xC2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C3 }, /* 0xC3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C4 }, /* 0xC4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C5 }, /* 0xC5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C6 }, /* 0xC6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C7 }, /* 0xC7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C8 }, /* 0xC8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C9 }, /* 0xC9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CA }, /* 0xCA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CB }, /* 0xCB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CC }, /* 0xCC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CD }, /* 0xCD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CE }, /* 0xCE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CF }, /* 0xCF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D0 }, /* 0xD0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D1 }, /* 0xD1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D2 }, /* 0xD2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D3 }, /* 0xD3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D4 }, /* 0xD4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D5 }, /* 0xD5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D6 }, /* 0xD6 */
+ { 0, 0x40, 0xF9, aImplDBCSToUniTab_GBK_D7 }, /* 0xD7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D8 }, /* 0xD8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D9 }, /* 0xD9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DA }, /* 0xDA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DB }, /* 0xDB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DC }, /* 0xDC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DD }, /* 0xDD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DE }, /* 0xDE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DF }, /* 0xDF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E0 }, /* 0xE0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E1 }, /* 0xE1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E2 }, /* 0xE2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E3 }, /* 0xE3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E4 }, /* 0xE4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E5 }, /* 0xE5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E6 }, /* 0xE6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E7 }, /* 0xE7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E8 }, /* 0xE8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E9 }, /* 0xE9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EA }, /* 0xEA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EB }, /* 0xEB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EC }, /* 0xEC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_ED }, /* 0xED */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EE }, /* 0xEE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EF }, /* 0xEF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F0 }, /* 0xF0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F1 }, /* 0xF1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F2 }, /* 0xF2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F3 }, /* 0xF3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F4 }, /* 0xF4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F5 }, /* 0xF5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F6 }, /* 0xF6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F7 }, /* 0xF7 */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F8 }, /* 0xF8 */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F9 }, /* 0xF9 */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FA }, /* 0xFA */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FB }, /* 0xFB */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FC }, /* 0xFC */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FD }, /* 0xFD */
+ { 0, 0x40, 0x9F, aImplDBCSToUniTab_GBK_FE }, /* 0xFE */
+ { 0, 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aGBKDBCSHighTab[256] =
+{
+ { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 }, /* 0x00 */
+ { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */
+ { 0x51, 0xD9, aImplUniToDBCSTab_GBK_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ /* we convert this char also to unicode */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x10, 0xAC, aImplUniToDBCSTab_GBK_20 }, /* 0x20 */
+ { 0x03, 0x99, aImplUniToDBCSTab_GBK_21 }, /* 0x21 */
+ { 0x08, 0xEF, aImplUniToDBCSTab_GBK_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */
+ { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */
+ { 0x00, 0xE5, aImplUniToDBCSTab_GBK_25 }, /* 0x25 */
+ { 0x05, 0x42, aImplUniToDBCSTab_GBK_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 0x81, 0xCA, aImplUniToDBCSTab_GBK_2E }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GBK_30 }, /* 0x30 */
+ { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */
+ { 0x20, 0xA3, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */
+ { 0x8E, 0xD5, aImplUniToDBCSTab_GBK_33 }, /* 0x33 */
+ { 0x47, 0x73, aImplUniToDBCSTab_GBK_34 }, /* 0x34 */
+ { 0x9E, 0x9E, aImplUniToDBCSTab_GBK_35 }, /* 0x35 */
+ { 0x0E, 0x1A, aImplUniToDBCSTab_GBK_36 }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 0x18, 0xDF, aImplUniToDBCSTab_GBK_39 }, /* 0x39 */
+ { 0x73, 0x73, aImplUniToDBCSTab_GBK_3A }, /* 0x3A */
+ { 0x4E, 0x4E, aImplUniToDBCSTab_GBK_3B }, /* 0x3B */
+ { 0x6E, 0xE0, aImplUniToDBCSTab_GBK_3C }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 0x56, 0x56, aImplUniToDBCSTab_GBK_40 }, /* 0x40 */
+ { 0x5F, 0x5F, aImplUniToDBCSTab_GBK_41 }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 0x37, 0xDD, aImplUniToDBCSTab_GBK_43 }, /* 0x43 */
+ { 0xD6, 0xD6, aImplUniToDBCSTab_GBK_44 }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 0x4C, 0x61, aImplUniToDBCSTab_GBK_46 }, /* 0x46 */
+ { 0x23, 0x8D, aImplUniToDBCSTab_GBK_47 }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 0x47, 0xB7, aImplUniToDBCSTab_GBK_49 }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 0x77, 0xA3, aImplUniToDBCSTab_GBK_4C }, /* 0x4C */
+ { 0x13, 0xAE, aImplUniToDBCSTab_GBK_4D }, /* 0x4D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4E }, /* 0x4E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4F }, /* 0x4F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_50 }, /* 0x50 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_52 }, /* 0x52 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_53 }, /* 0x53 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_54 }, /* 0x54 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_55 }, /* 0x55 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_56 }, /* 0x56 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_57 }, /* 0x57 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_58 }, /* 0x58 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_59 }, /* 0x59 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5A }, /* 0x5A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5B }, /* 0x5B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5C }, /* 0x5C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5D }, /* 0x5D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5E }, /* 0x5E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5F }, /* 0x5F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_62 }, /* 0x62 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_63 }, /* 0x63 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_64 }, /* 0x64 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_67 }, /* 0x67 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_68 }, /* 0x68 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_69 }, /* 0x69 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6A }, /* 0x6A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6B }, /* 0x6B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6C }, /* 0x6C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6D }, /* 0x6D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6E }, /* 0x6E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6F }, /* 0x6F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_70 }, /* 0x70 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_71 }, /* 0x71 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_72 }, /* 0x72 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_73 }, /* 0x73 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_74 }, /* 0x74 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_75 }, /* 0x75 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_76 }, /* 0x76 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_77 }, /* 0x77 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_78 }, /* 0x78 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7A }, /* 0x7A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7B }, /* 0x7B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7C }, /* 0x7C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7D }, /* 0x7D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7E }, /* 0x7E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7F }, /* 0x7F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_80 }, /* 0x80 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_81 }, /* 0x81 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_82 }, /* 0x82 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_83 }, /* 0x83 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_84 }, /* 0x84 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_85 }, /* 0x85 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_86 }, /* 0x86 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_87 }, /* 0x87 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_88 }, /* 0x88 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_89 }, /* 0x89 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8A }, /* 0x8A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8B }, /* 0x8B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8C }, /* 0x8C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8D }, /* 0x8D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8E }, /* 0x8E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8F }, /* 0x8F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_90 }, /* 0x90 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_91 }, /* 0x91 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_92 }, /* 0x92 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_93 }, /* 0x93 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_94 }, /* 0x94 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_95 }, /* 0x95 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_97 }, /* 0x97 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_98 }, /* 0x98 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_99 }, /* 0x99 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9A }, /* 0x9A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9B }, /* 0x9B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9C }, /* 0x9C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9D }, /* 0x9D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9E }, /* 0x9E */
+ { 0x00, 0xA5, aImplUniToDBCSTab_GBK_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 0x2C, 0xF1, aImplUniToDBCSTab_GBK_F9 }, /* 0xF9 */
+ { 0x0C, 0x29, aImplUniToDBCSTab_GBK_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x30, 0x6B, aImplUniToDBCSTab_GBK_FE }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_GBK_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplGBKDBCSCvtData =
+{
+ aGBKUniLeadTab,
+ aGBKDBCSHighTab,
+ aImplMS936DBCSEUDCTab,
+ DBCS_EUDC_MS936_COUNT,
+ 0x00, 0xFF,
+ 0x40, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplGBKTextEncodingData
+ = { { &aImplGBKDBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-cn",
+ "GBK",
+ 1,
+ 2,
+ 2,
+ 134,
+ RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aMS936UniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0x20AC, 0, 0, nullptr }, /* 0x80 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_81 }, /* 0x81 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_82 }, /* 0x82 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_83 }, /* 0x83 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_84 }, /* 0x84 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_85 }, /* 0x85 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_86 }, /* 0x86 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_87 }, /* 0x87 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_88 }, /* 0x88 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_89 }, /* 0x89 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8A }, /* 0x8A */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8B }, /* 0x8B */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8C }, /* 0x8C */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8D }, /* 0x8D */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8E }, /* 0x8E */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8F }, /* 0x8F */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_90 }, /* 0x90 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_91 }, /* 0x91 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_92 }, /* 0x92 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_93 }, /* 0x93 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_94 }, /* 0x94 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_95 }, /* 0x95 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_96 }, /* 0x96 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_97 }, /* 0x97 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_98 }, /* 0x98 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_99 }, /* 0x99 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9A }, /* 0x9A */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9B }, /* 0x9B */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9C }, /* 0x9C */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9D }, /* 0x9D */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9E }, /* 0x9E */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9F }, /* 0x9F */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_A0 }, /* 0xA0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */
+ { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */
+ { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */
+ { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */
+ { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */
+ { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */
+ { 0, 0x40, 0xE9, aImplDBCSToUniTab_GBK_A8 }, /* 0xA8 */
+ { 0, 0x40, 0xEF, aImplDBCSToUniTab_GBK_A9 }, /* 0xA9 */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AA }, /* 0xAA */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AB }, /* 0xAB */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AC }, /* 0xAC */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AD }, /* 0xAD */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AE }, /* 0xAE */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AF }, /* 0xAF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B0 }, /* 0xB0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B1 }, /* 0xB1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B2 }, /* 0xB2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B3 }, /* 0xB3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B4 }, /* 0xB4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B5 }, /* 0xB5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B6 }, /* 0xB6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B7 }, /* 0xB7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B8 }, /* 0xB8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B9 }, /* 0xB9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BA }, /* 0xBA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BB }, /* 0xBB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BC }, /* 0xBC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BD }, /* 0xBD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BE }, /* 0xBE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BF }, /* 0xBF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C0 }, /* 0xC0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C1 }, /* 0xC1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C2 }, /* 0xC2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C3 }, /* 0xC3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C4 }, /* 0xC4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C5 }, /* 0xC5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C6 }, /* 0xC6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C7 }, /* 0xC7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C8 }, /* 0xC8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C9 }, /* 0xC9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CA }, /* 0xCA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CB }, /* 0xCB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CC }, /* 0xCC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CD }, /* 0xCD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CE }, /* 0xCE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CF }, /* 0xCF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D0 }, /* 0xD0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D1 }, /* 0xD1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D2 }, /* 0xD2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D3 }, /* 0xD3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D4 }, /* 0xD4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D5 }, /* 0xD5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D6 }, /* 0xD6 */
+ { 0, 0x40, 0xF9, aImplDBCSToUniTab_GBK_D7 }, /* 0xD7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D8 }, /* 0xD8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D9 }, /* 0xD9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DA }, /* 0xDA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DB }, /* 0xDB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DC }, /* 0xDC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DD }, /* 0xDD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DE }, /* 0xDE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DF }, /* 0xDF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E0 }, /* 0xE0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E1 }, /* 0xE1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E2 }, /* 0xE2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E3 }, /* 0xE3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E4 }, /* 0xE4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E5 }, /* 0xE5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E6 }, /* 0xE6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E7 }, /* 0xE7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E8 }, /* 0xE8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E9 }, /* 0xE9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EA }, /* 0xEA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EB }, /* 0xEB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EC }, /* 0xEC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_ED }, /* 0xED */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EE }, /* 0xEE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EF }, /* 0xEF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F0 }, /* 0xF0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F1 }, /* 0xF1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F2 }, /* 0xF2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F3 }, /* 0xF3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F4 }, /* 0xF4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F5 }, /* 0xF5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F6 }, /* 0xF6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F7 }, /* 0xF7 */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F8 }, /* 0xF8 */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F9 }, /* 0xF9 */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FA }, /* 0xFA */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FB }, /* 0xFB */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FC }, /* 0xFC */
+ { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FD }, /* 0xFD */
+ { 0, 0x40, 0x4F, aImplDBCSToUniTab_GBK_FE }, /* 0xFE */
+ { 0, 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aMS936DBCSHighTab[256] =
+{
+ { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 }, /* 0x00 */
+ { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */
+ { 0x51, 0xD9, aImplUniToDBCSTab_GBK_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ /* we convert this char also to unicode */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x10, 0xAC, aImplUniToDBCSTab_GBK_20 }, /* 0x20 */
+ { 0x03, 0x99, aImplUniToDBCSTab_GBK_21 }, /* 0x21 */
+ { 0x08, 0xEF, aImplUniToDBCSTab_GBK_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */
+ { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */
+ { 0x00, 0xE5, aImplUniToDBCSTab_GBK_25 }, /* 0x25 */
+ { 0x05, 0x42, aImplUniToDBCSTab_GBK_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GBK_30 }, /* 0x30 */
+ { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */
+ { 0x20, 0xA3, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */
+ { 0x8E, 0xD5, aImplUniToDBCSTab_GBK_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4E }, /* 0x4E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4F }, /* 0x4F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_50 }, /* 0x50 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_52 }, /* 0x52 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_53 }, /* 0x53 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_54 }, /* 0x54 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_55 }, /* 0x55 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_56 }, /* 0x56 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_57 }, /* 0x57 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_58 }, /* 0x58 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_59 }, /* 0x59 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5A }, /* 0x5A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5B }, /* 0x5B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5C }, /* 0x5C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5D }, /* 0x5D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5E }, /* 0x5E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5F }, /* 0x5F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_62 }, /* 0x62 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_63 }, /* 0x63 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_64 }, /* 0x64 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_67 }, /* 0x67 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_68 }, /* 0x68 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_69 }, /* 0x69 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6A }, /* 0x6A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6B }, /* 0x6B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6C }, /* 0x6C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6D }, /* 0x6D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6E }, /* 0x6E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6F }, /* 0x6F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_70 }, /* 0x70 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_71 }, /* 0x71 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_72 }, /* 0x72 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_73 }, /* 0x73 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_74 }, /* 0x74 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_75 }, /* 0x75 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_76 }, /* 0x76 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_77 }, /* 0x77 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_78 }, /* 0x78 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7A }, /* 0x7A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7B }, /* 0x7B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7C }, /* 0x7C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7D }, /* 0x7D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7E }, /* 0x7E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7F }, /* 0x7F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_80 }, /* 0x80 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_81 }, /* 0x81 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_82 }, /* 0x82 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_83 }, /* 0x83 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_84 }, /* 0x84 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_85 }, /* 0x85 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_86 }, /* 0x86 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_87 }, /* 0x87 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_88 }, /* 0x88 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_89 }, /* 0x89 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8A }, /* 0x8A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8B }, /* 0x8B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8C }, /* 0x8C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8D }, /* 0x8D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8E }, /* 0x8E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8F }, /* 0x8F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_90 }, /* 0x90 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_91 }, /* 0x91 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_92 }, /* 0x92 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_93 }, /* 0x93 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_94 }, /* 0x94 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_95 }, /* 0x95 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_97 }, /* 0x97 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_98 }, /* 0x98 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_99 }, /* 0x99 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9A }, /* 0x9A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9B }, /* 0x9B */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9C }, /* 0x9C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9D }, /* 0x9D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9E }, /* 0x9E */
+ { 0x00, 0xA5, aImplUniToDBCSTab_GBK_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 0x2C, 0xF1, aImplUniToDBCSTab_GBK_F9 }, /* 0xF9 */
+ { 0x0C, 0x29, aImplUniToDBCSTab_GBK_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x30, 0x6B, aImplUniToDBCSTab_GBK_FE }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_GBK_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplMS936DBCSCvtData =
+{
+ aMS936UniLeadTab,
+ aMS936DBCSHighTab,
+ aImplMS936DBCSEUDCTab,
+ DBCS_EUDC_MS936_COUNT,
+ 0x00, 0xFF,
+ 0x40, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS936TextEncodingData
+ = { { &aImplMS936DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-cn",
+ "gb2312",
+ 1,
+ 2,
+ 2,
+ 134,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* WIN/DOS/OS2, SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding
+ 25 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aAPPLECHINSIMPUniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0, 1, 0, nullptr }, /* 0x80 */
+ { 0xF880, 0, 0, nullptr }, /* 0x81 */
+ { 0xF881, 0, 0, nullptr }, /* 0x82 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */
+ { 0x00A0, 0, 0, nullptr }, /* 0xA0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */
+ { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */
+ { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */
+ { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */
+ { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */
+ { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */
+ { 0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF }, /* 0xA8 */
+ { 0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF }, /* 0xA9 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAC */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAD */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAE */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAF */ /* We convert this as double byte */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B0+GBKOFF }, /* 0xB0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B1+GBKOFF }, /* 0xB1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B2+GBKOFF }, /* 0xB2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B3+GBKOFF }, /* 0xB3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B4+GBKOFF }, /* 0xB4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B5+GBKOFF }, /* 0xB5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B6+GBKOFF }, /* 0xB6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B7+GBKOFF }, /* 0xB7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B8+GBKOFF }, /* 0xB8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B9+GBKOFF }, /* 0xB9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BA+GBKOFF }, /* 0xBA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BB+GBKOFF }, /* 0xBB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BC+GBKOFF }, /* 0xBC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BD+GBKOFF }, /* 0xBD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BE+GBKOFF }, /* 0xBE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BF+GBKOFF }, /* 0xBF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C0+GBKOFF }, /* 0xC0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C1+GBKOFF }, /* 0xC1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C2+GBKOFF }, /* 0xC2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C3+GBKOFF }, /* 0xC3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C4+GBKOFF }, /* 0xC4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C5+GBKOFF }, /* 0xC5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C6+GBKOFF }, /* 0xC6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C7+GBKOFF }, /* 0xC7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C8+GBKOFF }, /* 0xC8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C9+GBKOFF }, /* 0xC9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CA+GBKOFF }, /* 0xCA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CB+GBKOFF }, /* 0xCB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CC+GBKOFF }, /* 0xCC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CD+GBKOFF }, /* 0xCD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CE+GBKOFF }, /* 0xCE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CF+GBKOFF }, /* 0xCF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D0+GBKOFF }, /* 0xD0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D1+GBKOFF }, /* 0xD1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D2+GBKOFF }, /* 0xD2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D3+GBKOFF }, /* 0xD3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D4+GBKOFF }, /* 0xD4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D5+GBKOFF }, /* 0xD5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D6+GBKOFF }, /* 0xD6 */
+ { 0, 0xA1, 0xF9, aImplDBCSToUniTab_GBK_D7+GBKOFF }, /* 0xD7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D8+GBKOFF }, /* 0xD8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D9+GBKOFF }, /* 0xD9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DA+GBKOFF }, /* 0xDA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DB+GBKOFF }, /* 0xDB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DC+GBKOFF }, /* 0xDC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DD+GBKOFF }, /* 0xDD */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DE+GBKOFF }, /* 0xDE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DF+GBKOFF }, /* 0xDF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E0+GBKOFF }, /* 0xE0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E1+GBKOFF }, /* 0xE1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E2+GBKOFF }, /* 0xE2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E3+GBKOFF }, /* 0xE3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E4+GBKOFF }, /* 0xE4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E5+GBKOFF }, /* 0xE5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E6+GBKOFF }, /* 0xE6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E7+GBKOFF }, /* 0xE7 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E8+GBKOFF }, /* 0xE8 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E9+GBKOFF }, /* 0xE9 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EA+GBKOFF }, /* 0xEA */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EB+GBKOFF }, /* 0xEB */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EC+GBKOFF }, /* 0xEC */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_ED+GBKOFF }, /* 0xED */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EE+GBKOFF }, /* 0xEE */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EF+GBKOFF }, /* 0xEF */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F0+GBKOFF }, /* 0xF0 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F1+GBKOFF }, /* 0xF1 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F2+GBKOFF }, /* 0xF2 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F3+GBKOFF }, /* 0xF3 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F4+GBKOFF }, /* 0xF4 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F5+GBKOFF }, /* 0xF5 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F6+GBKOFF }, /* 0xF6 */
+ { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F7+GBKOFF }, /* 0xF7 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */
+ { 0x00A9, 0, 0, nullptr }, /* 0xFD */
+ { 0x2122, 0, 0, nullptr }, /* 0xFE */
+ { 0x2026, 0, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aAPPLECHINSIMPDBCSHighTab[256] =
+{
+ { 0x00, 0xFC, aImplUniToDBCSTab_APPLECHINSIMP_00 }, /* 0x00 */
+ { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */
+ { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x14, 0x3E, aImplUniToDBCSTab_GB_20 }, /* 0x20 */
+ { 0x03, 0x93, aImplUniToDBCSTab_APPLECHINSIMP_21 }, /* 0x21 */
+ { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 }, /* 0x22 */
+ { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */
+ { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */
+ { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 }, /* 0x25 */
+ { 0x05, 0x42, aImplUniToDBCSTab_GB_26 }, /* 0x26 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 }, /* 0x30 */
+ { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */
+ { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */
+ { 1, 0, nullptr }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_4E }, /* 0x4E */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GB_4F }, /* 0x4F */
+ { 0x0C, 0xFB, aImplUniToDBCSTab_GB_50 }, /* 0x50 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_GB_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_52 }, /* 0x52 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_GB_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_54 }, /* 0x54 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_GB_55 }, /* 0x55 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_56 }, /* 0x56 */
+ { 0x03, 0xFD, aImplUniToDBCSTab_GB_57 }, /* 0x57 */
+ { 0x00, 0xF9, aImplUniToDBCSTab_GB_58 }, /* 0x58 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_GB_59 }, /* 0x59 */
+ { 0x01, 0xF1, aImplUniToDBCSTab_GB_5A }, /* 0x5A */
+ { 0x09, 0xFF, aImplUniToDBCSTab_GB_5B }, /* 0x5B */
+ { 0x01, 0xFB, aImplUniToDBCSTab_GB_5C }, /* 0x5C */
+ { 0x02, 0xFE, aImplUniToDBCSTab_GB_5D }, /* 0x5D */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_5E }, /* 0x5E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_5F }, /* 0x5F */
+ { 0x00, 0xFA, aImplUniToDBCSTab_GB_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_61 }, /* 0x61 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_GB_62 }, /* 0x62 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_63 }, /* 0x63 */
+ { 0x00, 0xE6, aImplUniToDBCSTab_GB_64 }, /* 0x64 */
+ { 0x00, 0xFA, aImplUniToDBCSTab_GB_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_67 }, /* 0x67 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_GB_68 }, /* 0x68 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_69 }, /* 0x69 */
+ { 0x0A, 0xAC, aImplUniToDBCSTab_GB_6A }, /* 0x6A */
+ { 0x20, 0xFD, aImplUniToDBCSTab_GB_6B }, /* 0x6B */
+ { 0x05, 0xFE, aImplUniToDBCSTab_GB_6C }, /* 0x6C */
+ { 0x01, 0xFC, aImplUniToDBCSTab_GB_6D }, /* 0x6D */
+ { 0x05, 0xF9, aImplUniToDBCSTab_GB_6E }, /* 0x6E */
+ { 0x02, 0xEF, aImplUniToDBCSTab_GB_6F }, /* 0x6F */
+ { 0x11, 0xFD, aImplUniToDBCSTab_GB_70 }, /* 0x70 */
+ { 0x09, 0xF9, aImplUniToDBCSTab_GB_71 }, /* 0x71 */
+ { 0x06, 0xFC, aImplUniToDBCSTab_GB_72 }, /* 0x72 */
+ { 0x01, 0xF2, aImplUniToDBCSTab_GB_73 }, /* 0x73 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_GB_74 }, /* 0x74 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_GB_75 }, /* 0x75 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_76 }, /* 0x76 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_77 }, /* 0x77 */
+ { 0x00, 0xFA, aImplUniToDBCSTab_GB_78 }, /* 0x78 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_GB_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_GB_7A }, /* 0x7A */
+ { 0x03, 0xFE, aImplUniToDBCSTab_GB_7B }, /* 0x7B */
+ { 0x07, 0xFB, aImplUniToDBCSTab_GB_7C }, /* 0x7C */
+ { 0x0A, 0xAE, aImplUniToDBCSTab_GB_7D }, /* 0x7D */
+ { 0x3B, 0xFF, aImplUniToDBCSTab_GB_7E }, /* 0x7E */
+ { 0x00, 0xFC, aImplUniToDBCSTab_GB_7F }, /* 0x7F */
+ { 0x00, 0xFD, aImplUniToDBCSTab_GB_80 }, /* 0x80 */
+ { 0x02, 0xFE, aImplUniToDBCSTab_GB_81 }, /* 0x81 */
+ { 0x00, 0xFB, aImplUniToDBCSTab_GB_82 }, /* 0x82 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_GB_83 }, /* 0x83 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_GB_84 }, /* 0x84 */
+ { 0x0C, 0xFF, aImplUniToDBCSTab_GB_85 }, /* 0x85 */
+ { 0x05, 0xFE, aImplUniToDBCSTab_GB_86 }, /* 0x86 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_87 }, /* 0x87 */
+ { 0x03, 0xFE, aImplUniToDBCSTab_GB_88 }, /* 0x88 */
+ { 0x02, 0xF3, aImplUniToDBCSTab_GB_89 }, /* 0x89 */
+ { 0x00, 0x93, aImplUniToDBCSTab_GB_8A }, /* 0x8A */
+ { 0x07, 0xFF, aImplUniToDBCSTab_GB_8B }, /* 0x8B */
+ { 0x00, 0x98, aImplUniToDBCSTab_GB_8C }, /* 0x8C */
+ { 0x1D, 0xFD, aImplUniToDBCSTab_GB_8D }, /* 0x8D */
+ { 0x05, 0xCE, aImplUniToDBCSTab_GB_8E }, /* 0x8E */
+ { 0x66, 0xFD, aImplUniToDBCSTab_GB_8F }, /* 0x8F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_90 }, /* 0x90 */
+ { 0x02, 0xDC, aImplUniToDBCSTab_GB_91 }, /* 0x91 */
+ { 0x74, 0xC8, aImplUniToDBCSTab_GB_92 }, /* 0x92 */
+ { 0x3E, 0xD6, aImplUniToDBCSTab_GB_93 }, /* 0x93 */
+ { 0x3E, 0xFF, aImplUniToDBCSTab_GB_94 }, /* 0x94 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_95 }, /* 0x95 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_GB_96 }, /* 0x96 */
+ { 0x00, 0xF6, aImplUniToDBCSTab_GB_97 }, /* 0x97 */
+ { 0x75, 0xE9, aImplUniToDBCSTab_GB_98 }, /* 0x98 */
+ { 0x0D, 0xA8, aImplUniToDBCSTab_GB_99 }, /* 0x99 */
+ { 0x6C, 0xFB, aImplUniToDBCSTab_GB_9A }, /* 0x9A */
+ { 0x03, 0x54, aImplUniToDBCSTab_GB_9B }, /* 0x9B */
+ { 0x7C, 0xE2, aImplUniToDBCSTab_GB_9C }, /* 0x9C */
+ { 1, 0, nullptr }, /* 0x9D */
+ { 0x1F, 0xFE, aImplUniToDBCSTab_GB_9E }, /* 0x9E */
+ { 0x0B, 0xA0, aImplUniToDBCSTab_GB_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 0x80, 0x81, aImplUniToDBCSTab_APPLECHINSIMP_F8 }, /* 0xF8 */
+ { 1, 0, nullptr }, /* 0xF9 */
+ { 1, 0, nullptr }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x31, 0x44, aImplUniToDBCSTab_GB_FE }, /* 0xFE */
+ { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplAPPLECHINSIMPDBCSCvtData =
+{
+ aAPPLECHINSIMPUniLeadTab,
+ aAPPLECHINSIMPDBCSHighTab,
+ nullptr,
+ 0,
+ 0x00, 0xFF,
+ 0xA1, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLECHINSIMPTextEncodingData
+ = { { &aImplAPPLECHINSIMPDBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-cn",
+ "gb2312",
+ 1,
+ 2,
+ 2,
+ 134,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* MAC, SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
diff --git a/sal/textenc/tcvtsym1.tab b/sal/textenc/tcvtsym1.tab
new file mode 100644
index 000000000..1b4f0f24b
--- /dev/null
+++ b/sal/textenc/tcvtsym1.tab
@@ -0,0 +1,42 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "tcvtbyte.hxx"
+
+/* Symbol Font Encodings */
+
+ImplTextEncodingData const aImplSYMBOLTextEncodingData
+ = { { nullptr,
+ ImplSymbolToUnicode,
+ ImplUnicodeToSymbol,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "adobe-fontspecific",
+ "invariant",
+ 1,
+ 1,
+ 1,
+ 2,
+ RTL_TEXTENCODING_INFO_SYMBOL };
+ /* SCRIPT_SYMBOL, pc code page 65400, mac encoding 32 */
diff --git a/sal/textenc/tcvttcn1.tab b/sal/textenc/tcvttcn1.tab
new file mode 100644
index 000000000..af78905ab
--- /dev/null
+++ b/sal/textenc/tcvttcn1.tab
@@ -0,0 +1,2885 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the DBCS to UniCode tables for the following */
+/* chinese traditional (Taiwan/HongKong) charsets: */
+/* BIG5, MS950, APPLE_CHINTRAD */
+
+/* ======================================================================= */
+
+/* Changes: */
+/* A1_45: MS950 == 0x2027, APPLE_CHINTRAD == 0x00B7 - we use in all systems 0x2027 for better MS compatibility */
+/* A1_4B: MS950 == 0x2026, APPLE_CHINTRAD == 0x22EF - we use in all systems 0x2026 for better MS compatibility */
+/* A1_4B: MS950 == 0x2026, APPLE_CHINTRAD == 0x22EF - we use in all systems 0x2026 for better MS compatibility */
+/* A1_C2: MS950 == 0x00AF, APPLE_CHINTRAD == 0x203E - we use in all systems 0x00AF for better MS compatibility */
+/* A1_E3: MS950 == 0xFF5E, APPLE_CHINTRAD == 0x223C - we use in all systems 0xFF5E for better MS compatibility */
+/* A1_F3: MS950 == 0x2299, APPLE_CHINTRAD == 0x2609 - we use in all systems 0x2299 for better MS compatibility */
+/* A1_4D-A1_54, A1_5A, A1_75-A1_76, A1_A1-A1_A4, A1_C3, A1_C5, A1_CB, A1_FE: is MS950 extension */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x3000, 0xFF0C, 0x3001, 0x3002, 0xFF0E, 0x2027, 0xFF1B, 0xFF1A, /* 0x40 */
+ 0xFF1F, 0xFF01, 0xFE30, 0x2026, 0x2025, 0xFE50, 0xFE51, 0xFE52, /* 0x40 */
+ 0x00B7, 0xFE54, 0xFE55, 0xFE56, 0xFE57, 0xFF5C, 0x2013, 0xFE31, /* 0x50 */
+ 0x2014, 0xFE33, 0x2574, 0xFE34, 0xFE4F, 0xFF08, 0xFF09, 0xFE35, /* 0x50 */
+ 0xFE36, 0xFF5B, 0xFF5D, 0xFE37, 0xFE38, 0x3014, 0x3015, 0xFE39, /* 0x60 */
+ 0xFE3A, 0x3010, 0x3011, 0xFE3B, 0xFE3C, 0x300A, 0x300B, 0xFE3D, /* 0x60 */
+ 0xFE3E, 0x3008, 0x3009, 0xFE3F, 0xFE40, 0x300C, 0x300D, 0xFE41, /* 0x70 */
+ 0xFE42, 0x300E, 0x300F, 0xFE43, 0xFE44, 0xFE59, 0xFE5A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0x2018, 0x2019, 0x201C, /* 0xA0 */
+ 0x201D, 0x301D, 0x301E, 0x2035, 0x2032, 0xFF03, 0xFF06, 0xFF0A, /* 0xA0 */
+ 0x203B, 0x00A7, 0x3003, 0x25CB, 0x25CF, 0x25B3, 0x25B2, 0x25CE, /* 0xB0 */
+ 0x2606, 0x2605, 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25BD, 0x25BC, /* 0xB0 */
+ 0x32A3, 0x2105, 0x00AF, 0xFFE3, 0xFF3F, 0x02CD, 0xFE49, 0xFE4A, /* 0xC0 */
+ 0xFE4D, 0xFE4E, 0xFE4B, 0xFE4C, 0xFE5F, 0xFE60, 0xFE61, 0xFF0B, /* 0xC0 */
+ 0xFF0D, 0x00D7, 0x00F7, 0x00B1, 0x221A, 0xFF1C, 0xFF1E, 0xFF1D, /* 0xD0 */
+ 0x2266, 0x2267, 0x2260, 0x221E, 0x2252, 0x2261, 0xFE62, 0xFE63, /* 0xD0 */
+ 0xFE64, 0xFE65, 0xFE66, 0xFF5E, 0x2229, 0x222A, 0x22A5, 0x2220, /* 0xE0 */
+ 0x221F, 0x22BF, 0x33D2, 0x33D1, 0x222B, 0x222E, 0x2235, 0x2234, /* 0xE0 */
+ 0x2640, 0x2642, 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192, /* 0xF0 */
+ 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xFF0F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* A2_41: MS950 == 0x2215, APPLE_CHINTRAD == 0xFF0F - we use in all systems 0x2215 for better MS compatibility */
+/* A2_42: MS950 == 0xFE68, APPLE_CHINTRAD == 0xFF3C - we use in all systems 0xFE68 for better MS compatibility */
+/* A2_44: MS950 == 0xFFE5, APPLE_CHINTRAD == 0x00A5 - we use in all systems 0xFFE5 for better MS compatibility */
+/* A2_44: MS950 == 0xFFE5, APPLE_CHINTRAD == 0x00A5 - we use in all systems 0xFFE5 for better MS compatibility */
+/* A2_46: MS950 == 0xFFE0, APPLE_CHINTRAD == 0x00A2 - we use in all systems 0xFFE0 for better MS compatibility */
+/* A2_47: MS950 == 0xFFE1, APPLE_CHINTRAD == 0x00A3 - we use in all systems 0xFFE1 for better MS compatibility */
+/* A2_47: MS950 == 0xFFE1, APPLE_CHINTRAD == 0x00A3 - we use in all systems 0xFFE1 for better MS compatibility */
+/* A2_40, A2_79, A2_CC, A2_CE: is MS950 extension */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF3C, 0x2215, 0xFE68, 0xFF04, 0xFFE5, 0x3012, 0xFFE0, 0xFFE1, /* 0x40 */
+ 0xFF05, 0xFF20, 0x2103, 0x2109, 0xFE69, 0xFE6A, 0xFE6B, 0x33D5, /* 0x40 */
+ 0x339C, 0x339D, 0x339E, 0x33CE, 0x33A1, 0x338E, 0x338F, 0x33C4, /* 0x50 */
+ 0x00B0, 0x5159, 0x515B, 0x515E, 0x515D, 0x5161, 0x5163, 0x55E7, /* 0x50 */
+ 0x74E9, 0x7CCE, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, /* 0x60 */
+ 0x2587, 0x2588, 0x258F, 0x258E, 0x258D, 0x258C, 0x258B, 0x258A, /* 0x60 */
+ 0x2589, 0x253C, 0x2534, 0x252C, 0x2524, 0x251C, 0x2594, 0x2500, /* 0x70 */
+ 0x2502, 0x2595, 0x250C, 0x2510, 0x2514, 0x2518, 0x256D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x256E, 0x2570, 0x256F, 0x2550, 0x255E, 0x256A, 0x2561, /* 0xA0 */
+ 0x25E2, 0x25E3, 0x25E5, 0x25E4, 0x2571, 0x2572, 0x2573, 0xFF10, /* 0xA0 */
+ 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, /* 0xB0 */
+ 0xFF19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, /* 0xB0 */
+ 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, /* 0xC0 */
+ 0x3026, 0x3027, 0x3028, 0x3029, 0x5341, 0x5344, 0x5345, 0xFF21, /* 0xC0 */
+ 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, /* 0xD0 */
+ 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, /* 0xD0 */
+ 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, /* 0xE0 */
+ 0xFF3A, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0xE0 */
+ 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0xF0 */
+ 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* Added EURO SIGN from cp950.txt (01/07/2000) at 0xA3E1 */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0x0391, 0x0392, 0x0393, 0x0394, /* 0x40 */
+ 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, /* 0x40 */
+ 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, /* 0x50 */
+ 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, /* 0x50 */
+ 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, /* 0x60 */
+ 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, /* 0x60 */
+ 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x3105, 0x3106, 0x3107, 0x3108, /* 0x70 */
+ 0x3109, 0x310A, 0x310B, 0x310C, 0x310D, 0x310E, 0x310F, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, /* 0xA0 */
+ 0x3117, 0x3118, 0x3119, 0x311A, 0x311B, 0x311C, 0x311D, 0x311E, /* 0xA0 */
+ 0x311F, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, /* 0xB0 */
+ 0x3127, 0x3128, 0x3129, 0x02D9, 0x02C9, 0x02CA, 0x02C7, 0x02CB, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0x20AC, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E00, 0x4E59, 0x4E01, 0x4E03, 0x4E43, 0x4E5D, 0x4E86, 0x4E8C, /* 0x40 */
+ 0x4EBA, 0x513F, 0x5165, 0x516B, 0x51E0, 0x5200, 0x5201, 0x529B, /* 0x40 */
+ 0x5315, 0x5341, 0x535C, 0x53C8, 0x4E09, 0x4E0B, 0x4E08, 0x4E0A, /* 0x50 */
+ 0x4E2B, 0x4E38, 0x51E1, 0x4E45, 0x4E48, 0x4E5F, 0x4E5E, 0x4E8E, /* 0x50 */
+ 0x4EA1, 0x5140, 0x5203, 0x52FA, 0x5343, 0x53C9, 0x53E3, 0x571F, /* 0x60 */
+ 0x58EB, 0x5915, 0x5927, 0x5973, 0x5B50, 0x5B51, 0x5B53, 0x5BF8, /* 0x60 */
+ 0x5C0F, 0x5C22, 0x5C38, 0x5C71, 0x5DDD, 0x5DE5, 0x5DF1, 0x5DF2, /* 0x70 */
+ 0x5DF3, 0x5DFE, 0x5E72, 0x5EFE, 0x5F0B, 0x5F13, 0x624D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x4E11, 0x4E10, 0x4E0D, 0x4E2D, 0x4E30, 0x4E39, 0x4E4B, /* 0xA0 */
+ 0x5C39, 0x4E88, 0x4E91, 0x4E95, 0x4E92, 0x4E94, 0x4EA2, 0x4EC1, /* 0xA0 */
+ 0x4EC0, 0x4EC3, 0x4EC6, 0x4EC7, 0x4ECD, 0x4ECA, 0x4ECB, 0x4EC4, /* 0xB0 */
+ 0x5143, 0x5141, 0x5167, 0x516D, 0x516E, 0x516C, 0x5197, 0x51F6, /* 0xB0 */
+ 0x5206, 0x5207, 0x5208, 0x52FB, 0x52FE, 0x52FF, 0x5316, 0x5339, /* 0xC0 */
+ 0x5348, 0x5347, 0x5345, 0x535E, 0x5384, 0x53CB, 0x53CA, 0x53CD, /* 0xC0 */
+ 0x58EC, 0x5929, 0x592B, 0x592A, 0x592D, 0x5B54, 0x5C11, 0x5C24, /* 0xD0 */
+ 0x5C3A, 0x5C6F, 0x5DF4, 0x5E7B, 0x5EFF, 0x5F14, 0x5F15, 0x5FC3, /* 0xD0 */
+ 0x6208, 0x6236, 0x624B, 0x624E, 0x652F, 0x6587, 0x6597, 0x65A4, /* 0xE0 */
+ 0x65B9, 0x65E5, 0x66F0, 0x6708, 0x6728, 0x6B20, 0x6B62, 0x6B79, /* 0xE0 */
+ 0x6BCB, 0x6BD4, 0x6BDB, 0x6C0F, 0x6C34, 0x706B, 0x722A, 0x7236, /* 0xF0 */
+ 0x723B, 0x7247, 0x7259, 0x725B, 0x72AC, 0x738B, 0x4E19 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E16, 0x4E15, 0x4E14, 0x4E18, 0x4E3B, 0x4E4D, 0x4E4F, 0x4E4E, /* 0x40 */
+ 0x4EE5, 0x4ED8, 0x4ED4, 0x4ED5, 0x4ED6, 0x4ED7, 0x4EE3, 0x4EE4, /* 0x40 */
+ 0x4ED9, 0x4EDE, 0x5145, 0x5144, 0x5189, 0x518A, 0x51AC, 0x51F9, /* 0x50 */
+ 0x51FA, 0x51F8, 0x520A, 0x52A0, 0x529F, 0x5305, 0x5306, 0x5317, /* 0x50 */
+ 0x531D, 0x4EDF, 0x534A, 0x5349, 0x5361, 0x5360, 0x536F, 0x536E, /* 0x60 */
+ 0x53BB, 0x53EF, 0x53E4, 0x53F3, 0x53EC, 0x53EE, 0x53E9, 0x53E8, /* 0x60 */
+ 0x53FC, 0x53F8, 0x53F5, 0x53EB, 0x53E6, 0x53EA, 0x53F2, 0x53F1, /* 0x70 */
+ 0x53F0, 0x53E5, 0x53ED, 0x53FB, 0x56DB, 0x56DA, 0x5916, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x592E, 0x5931, 0x5974, 0x5976, 0x5B55, 0x5B83, 0x5C3C, /* 0xA0 */
+ 0x5DE8, 0x5DE7, 0x5DE6, 0x5E02, 0x5E03, 0x5E73, 0x5E7C, 0x5F01, /* 0xA0 */
+ 0x5F18, 0x5F17, 0x5FC5, 0x620A, 0x6253, 0x6254, 0x6252, 0x6251, /* 0xB0 */
+ 0x65A5, 0x65E6, 0x672E, 0x672C, 0x672A, 0x672B, 0x672D, 0x6B63, /* 0xB0 */
+ 0x6BCD, 0x6C11, 0x6C10, 0x6C38, 0x6C41, 0x6C40, 0x6C3E, 0x72AF, /* 0xC0 */
+ 0x7384, 0x7389, 0x74DC, 0x74E6, 0x7518, 0x751F, 0x7528, 0x7529, /* 0xC0 */
+ 0x7530, 0x7531, 0x7532, 0x7533, 0x758B, 0x767D, 0x76AE, 0x76BF, /* 0xD0 */
+ 0x76EE, 0x77DB, 0x77E2, 0x77F3, 0x793A, 0x79BE, 0x7A74, 0x7ACB, /* 0xD0 */
+ 0x4E1E, 0x4E1F, 0x4E52, 0x4E53, 0x4E69, 0x4E99, 0x4EA4, 0x4EA6, /* 0xE0 */
+ 0x4EA5, 0x4EFF, 0x4F09, 0x4F19, 0x4F0A, 0x4F15, 0x4F0D, 0x4F10, /* 0xE0 */
+ 0x4F11, 0x4F0F, 0x4EF2, 0x4EF6, 0x4EFB, 0x4EF0, 0x4EF3, 0x4EFD, /* 0xF0 */
+ 0x4F01, 0x4F0B, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5171, 0x518D, 0x51B0, 0x5217, 0x5211, 0x5212, 0x520E, 0x5216, /* 0x40 */
+ 0x52A3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540F, /* 0x40 */
+ 0x540C, 0x540A, 0x5410, 0x5401, 0x540B, 0x5404, 0x5411, 0x540D, /* 0x50 */
+ 0x5408, 0x5403, 0x540E, 0x5406, 0x5412, 0x56E0, 0x56DE, 0x56DD, /* 0x50 */
+ 0x5733, 0x5730, 0x5728, 0x572D, 0x572C, 0x572F, 0x5729, 0x5919, /* 0x60 */
+ 0x591A, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597D, 0x5979, /* 0x60 */
+ 0x5982, 0x5981, 0x5B57, 0x5B58, 0x5B87, 0x5B88, 0x5B85, 0x5B89, /* 0x70 */
+ 0x5BFA, 0x5C16, 0x5C79, 0x5DDE, 0x5E06, 0x5E76, 0x5E74, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5F0F, 0x5F1B, 0x5FD9, 0x5FD6, 0x620E, 0x620C, 0x620D, /* 0xA0 */
+ 0x6210, 0x6263, 0x625B, 0x6258, 0x6536, 0x65E9, 0x65E8, 0x65EC, /* 0xA0 */
+ 0x65ED, 0x66F2, 0x66F3, 0x6709, 0x673D, 0x6734, 0x6731, 0x6735, /* 0xB0 */
+ 0x6B21, 0x6B64, 0x6B7B, 0x6C16, 0x6C5D, 0x6C57, 0x6C59, 0x6C5F, /* 0xB0 */
+ 0x6C60, 0x6C50, 0x6C55, 0x6C61, 0x6C5B, 0x6C4D, 0x6C4E, 0x7070, /* 0xC0 */
+ 0x725F, 0x725D, 0x767E, 0x7AF9, 0x7C73, 0x7CF8, 0x7F36, 0x7F8A, /* 0xC0 */
+ 0x7FBD, 0x8001, 0x8003, 0x800C, 0x8012, 0x8033, 0x807F, 0x8089, /* 0xD0 */
+ 0x808B, 0x808C, 0x81E3, 0x81EA, 0x81F3, 0x81FC, 0x820C, 0x821B, /* 0xD0 */
+ 0x821F, 0x826E, 0x8272, 0x827E, 0x866B, 0x8840, 0x884C, 0x8863, /* 0xE0 */
+ 0x897F, 0x9621, 0x4E32, 0x4EA8, 0x4F4D, 0x4F4F, 0x4F47, 0x4F57, /* 0xE0 */
+ 0x4F5E, 0x4F34, 0x4F5B, 0x4F55, 0x4F30, 0x4F50, 0x4F51, 0x4F3D, /* 0xF0 */
+ 0x4F3A, 0x4F38, 0x4F43, 0x4F54, 0x4F3C, 0x4F46, 0x4F63 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4F5C, 0x4F60, 0x4F2F, 0x4F4E, 0x4F36, 0x4F59, 0x4F5D, 0x4F48, /* 0x40 */
+ 0x4F5A, 0x514C, 0x514B, 0x514D, 0x5175, 0x51B6, 0x51B7, 0x5225, /* 0x40 */
+ 0x5224, 0x5229, 0x522A, 0x5228, 0x52AB, 0x52A9, 0x52AA, 0x52AC, /* 0x50 */
+ 0x5323, 0x5373, 0x5375, 0x541D, 0x542D, 0x541E, 0x543E, 0x5426, /* 0x50 */
+ 0x544E, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541B, /* 0x60 */
+ 0x5429, 0x544A, 0x5439, 0x543B, 0x5438, 0x542E, 0x5435, 0x5436, /* 0x60 */
+ 0x5420, 0x543C, 0x5440, 0x5431, 0x542B, 0x541F, 0x542C, 0x56EA, /* 0x70 */
+ 0x56F0, 0x56E4, 0x56EB, 0x574A, 0x5751, 0x5740, 0x574D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5747, 0x574E, 0x573E, 0x5750, 0x574F, 0x573B, 0x58EF, /* 0xA0 */
+ 0x593E, 0x599D, 0x5992, 0x59A8, 0x599E, 0x59A3, 0x5999, 0x5996, /* 0xA0 */
+ 0x598D, 0x59A4, 0x5993, 0x598A, 0x59A5, 0x5B5D, 0x5B5C, 0x5B5A, /* 0xB0 */
+ 0x5B5B, 0x5B8C, 0x5B8B, 0x5B8F, 0x5C2C, 0x5C40, 0x5C41, 0x5C3F, /* 0xB0 */
+ 0x5C3E, 0x5C90, 0x5C91, 0x5C94, 0x5C8C, 0x5DEB, 0x5E0C, 0x5E8F, /* 0xC0 */
+ 0x5E87, 0x5E8A, 0x5EF7, 0x5F04, 0x5F1F, 0x5F64, 0x5F62, 0x5F77, /* 0xC0 */
+ 0x5F79, 0x5FD8, 0x5FCC, 0x5FD7, 0x5FCD, 0x5FF1, 0x5FEB, 0x5FF8, /* 0xD0 */
+ 0x5FEA, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, /* 0xD0 */
+ 0x6289, 0x626D, 0x628A, 0x627C, 0x627E, 0x6279, 0x6273, 0x6292, /* 0xE0 */
+ 0x626F, 0x6298, 0x626E, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, /* 0xE0 */
+ 0x653B, 0x6538, 0x65F1, 0x66F4, 0x675F, 0x674E, 0x674F, 0x6750, /* 0xF0 */
+ 0x6751, 0x675C, 0x6756, 0x675E, 0x6749, 0x6746, 0x6760 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6753, 0x6757, 0x6B65, 0x6BCF, 0x6C42, 0x6C5E, 0x6C99, 0x6C81, /* 0x40 */
+ 0x6C88, 0x6C89, 0x6C85, 0x6C9B, 0x6C6A, 0x6C7A, 0x6C90, 0x6C70, /* 0x40 */
+ 0x6C8C, 0x6C68, 0x6C96, 0x6C92, 0x6C7D, 0x6C83, 0x6C72, 0x6C7E, /* 0x50 */
+ 0x6C74, 0x6C86, 0x6C76, 0x6C8D, 0x6C94, 0x6C98, 0x6C82, 0x7076, /* 0x50 */
+ 0x707C, 0x707D, 0x7078, 0x7262, 0x7261, 0x7260, 0x72C4, 0x72C2, /* 0x60 */
+ 0x7396, 0x752C, 0x752B, 0x7537, 0x7538, 0x7682, 0x76EF, 0x77E3, /* 0x60 */
+ 0x79C1, 0x79C0, 0x79BF, 0x7A76, 0x7CFB, 0x7F55, 0x8096, 0x8093, /* 0x70 */
+ 0x809D, 0x8098, 0x809B, 0x809A, 0x80B2, 0x826F, 0x8292, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x828B, 0x828D, 0x898B, 0x89D2, 0x8A00, 0x8C37, 0x8C46, /* 0xA0 */
+ 0x8C55, 0x8C9D, 0x8D64, 0x8D70, 0x8DB3, 0x8EAB, 0x8ECA, 0x8F9B, /* 0xA0 */
+ 0x8FB0, 0x8FC2, 0x8FC6, 0x8FC5, 0x8FC4, 0x5DE1, 0x9091, 0x90A2, /* 0xB0 */
+ 0x90AA, 0x90A6, 0x90A3, 0x9149, 0x91C6, 0x91CC, 0x9632, 0x962E, /* 0xB0 */
+ 0x9631, 0x962A, 0x962C, 0x4E26, 0x4E56, 0x4E73, 0x4E8B, 0x4E9B, /* 0xC0 */
+ 0x4E9E, 0x4EAB, 0x4EAC, 0x4F6F, 0x4F9D, 0x4F8D, 0x4F73, 0x4F7F, /* 0xC0 */
+ 0x4F6C, 0x4F9B, 0x4F8B, 0x4F86, 0x4F83, 0x4F70, 0x4F75, 0x4F88, /* 0xD0 */
+ 0x4F69, 0x4F7B, 0x4F96, 0x4F7E, 0x4F8F, 0x4F91, 0x4F7A, 0x5154, /* 0xD0 */
+ 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51BD, 0x51FD, /* 0xE0 */
+ 0x523B, 0x5238, 0x5237, 0x523A, 0x5230, 0x522E, 0x5236, 0x5241, /* 0xE0 */
+ 0x52BE, 0x52BB, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, /* 0xF0 */
+ 0x5378, 0x5379, 0x53D6, 0x53D4, 0x53D7, 0x5473, 0x5475 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_A9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5496, 0x5478, 0x5495, 0x5480, 0x547B, 0x5477, 0x5484, 0x5492, /* 0x40 */
+ 0x5486, 0x547C, 0x5490, 0x5471, 0x5476, 0x548C, 0x549A, 0x5462, /* 0x40 */
+ 0x5468, 0x548B, 0x547D, 0x548E, 0x56FA, 0x5783, 0x5777, 0x576A, /* 0x50 */
+ 0x5769, 0x5761, 0x5766, 0x5764, 0x577C, 0x591C, 0x5949, 0x5947, /* 0x50 */
+ 0x5948, 0x5944, 0x5954, 0x59BE, 0x59BB, 0x59D4, 0x59B9, 0x59AE, /* 0x60 */
+ 0x59D1, 0x59C6, 0x59D0, 0x59CD, 0x59CB, 0x59D3, 0x59CA, 0x59AF, /* 0x60 */
+ 0x59B3, 0x59D2, 0x59C5, 0x5B5F, 0x5B64, 0x5B63, 0x5B97, 0x5B9A, /* 0x70 */
+ 0x5B98, 0x5B9C, 0x5B99, 0x5B9B, 0x5C1A, 0x5C48, 0x5C45, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5C46, 0x5CB7, 0x5CA1, 0x5CB8, 0x5CA9, 0x5CAB, 0x5CB1, /* 0xA0 */
+ 0x5CB3, 0x5E18, 0x5E1A, 0x5E16, 0x5E15, 0x5E1B, 0x5E11, 0x5E78, /* 0xA0 */
+ 0x5E9A, 0x5E97, 0x5E9C, 0x5E95, 0x5E96, 0x5EF6, 0x5F26, 0x5F27, /* 0xB0 */
+ 0x5F29, 0x5F80, 0x5F81, 0x5F7F, 0x5F7C, 0x5FDD, 0x5FE0, 0x5FFD, /* 0xB0 */
+ 0x5FF5, 0x5FFF, 0x600F, 0x6014, 0x602F, 0x6035, 0x6016, 0x602A, /* 0xC0 */
+ 0x6015, 0x6021, 0x6027, 0x6029, 0x602B, 0x601B, 0x6216, 0x6215, /* 0xC0 */
+ 0x623F, 0x623E, 0x6240, 0x627F, 0x62C9, 0x62CC, 0x62C4, 0x62BF, /* 0xD0 */
+ 0x62C2, 0x62B9, 0x62D2, 0x62DB, 0x62AB, 0x62D3, 0x62D4, 0x62CB, /* 0xD0 */
+ 0x62C8, 0x62A8, 0x62BD, 0x62BC, 0x62D0, 0x62D9, 0x62C7, 0x62CD, /* 0xE0 */
+ 0x62B5, 0x62DA, 0x62B1, 0x62D8, 0x62D6, 0x62D7, 0x62C6, 0x62AC, /* 0xE0 */
+ 0x62CE, 0x653E, 0x65A7, 0x65BC, 0x65FA, 0x6614, 0x6613, 0x660C, /* 0xF0 */
+ 0x6606, 0x6602, 0x660E, 0x6600, 0x660F, 0x6615, 0x660A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_AA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6607, 0x670D, 0x670B, 0x676D, 0x678B, 0x6795, 0x6771, 0x679C, /* 0x40 */
+ 0x6773, 0x6777, 0x6787, 0x679D, 0x6797, 0x676F, 0x6770, 0x677F, /* 0x40 */
+ 0x6789, 0x677E, 0x6790, 0x6775, 0x679A, 0x6793, 0x677C, 0x676A, /* 0x50 */
+ 0x6772, 0x6B23, 0x6B66, 0x6B67, 0x6B7F, 0x6C13, 0x6C1B, 0x6CE3, /* 0x50 */
+ 0x6CE8, 0x6CF3, 0x6CB1, 0x6CCC, 0x6CE5, 0x6CB3, 0x6CBD, 0x6CBE, /* 0x60 */
+ 0x6CBC, 0x6CE2, 0x6CAB, 0x6CD5, 0x6CD3, 0x6CB8, 0x6CC4, 0x6CB9, /* 0x60 */
+ 0x6CC1, 0x6CAE, 0x6CD7, 0x6CC5, 0x6CF1, 0x6CBF, 0x6CBB, 0x6CE1, /* 0x70 */
+ 0x6CDB, 0x6CCA, 0x6CAC, 0x6CEF, 0x6CDC, 0x6CD6, 0x6CE0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7095, 0x708E, 0x7092, 0x708A, 0x7099, 0x722C, 0x722D, /* 0xA0 */
+ 0x7238, 0x7248, 0x7267, 0x7269, 0x72C0, 0x72CE, 0x72D9, 0x72D7, /* 0xA0 */
+ 0x72D0, 0x73A9, 0x73A8, 0x739F, 0x73AB, 0x73A5, 0x753D, 0x759D, /* 0xB0 */
+ 0x7599, 0x759A, 0x7684, 0x76C2, 0x76F2, 0x76F4, 0x77E5, 0x77FD, /* 0xB0 */
+ 0x793E, 0x7940, 0x7941, 0x79C9, 0x79C8, 0x7A7A, 0x7A79, 0x7AFA, /* 0xC0 */
+ 0x7CFE, 0x7F54, 0x7F8C, 0x7F8B, 0x8005, 0x80BA, 0x80A5, 0x80A2, /* 0xC0 */
+ 0x80B1, 0x80A1, 0x80AB, 0x80A9, 0x80B4, 0x80AA, 0x80AF, 0x81E5, /* 0xD0 */
+ 0x81FE, 0x820D, 0x82B3, 0x829D, 0x8299, 0x82AD, 0x82BD, 0x829F, /* 0xD0 */
+ 0x82B9, 0x82B1, 0x82AC, 0x82A5, 0x82AF, 0x82B8, 0x82A3, 0x82B0, /* 0xE0 */
+ 0x82BE, 0x82B7, 0x864E, 0x8671, 0x521D, 0x8868, 0x8ECB, 0x8FCE, /* 0xE0 */
+ 0x8FD4, 0x8FD1, 0x90B5, 0x90B8, 0x90B1, 0x90B6, 0x91C7, 0x91D1, /* 0xF0 */
+ 0x9577, 0x9580, 0x961C, 0x9640, 0x963F, 0x963B, 0x9644 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_AB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9642, 0x96B9, 0x96E8, 0x9752, 0x975E, 0x4E9F, 0x4EAD, 0x4EAE, /* 0x40 */
+ 0x4FE1, 0x4FB5, 0x4FAF, 0x4FBF, 0x4FE0, 0x4FD1, 0x4FCF, 0x4FDD, /* 0x40 */
+ 0x4FC3, 0x4FB6, 0x4FD8, 0x4FDF, 0x4FCA, 0x4FD7, 0x4FAE, 0x4FD0, /* 0x50 */
+ 0x4FC4, 0x4FC2, 0x4FDA, 0x4FCE, 0x4FDE, 0x4FB7, 0x5157, 0x5192, /* 0x50 */
+ 0x5191, 0x51A0, 0x524E, 0x5243, 0x524A, 0x524D, 0x524C, 0x524B, /* 0x60 */
+ 0x5247, 0x52C7, 0x52C9, 0x52C3, 0x52C1, 0x530D, 0x5357, 0x537B, /* 0x60 */
+ 0x539A, 0x53DB, 0x54AC, 0x54C0, 0x54A8, 0x54CE, 0x54C9, 0x54B8, /* 0x70 */
+ 0x54A6, 0x54B3, 0x54C7, 0x54C2, 0x54BD, 0x54AA, 0x54C1, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x54C4, 0x54C8, 0x54AF, 0x54AB, 0x54B1, 0x54BB, 0x54A9, /* 0xA0 */
+ 0x54A7, 0x54BF, 0x56FF, 0x5782, 0x578B, 0x57A0, 0x57A3, 0x57A2, /* 0xA0 */
+ 0x57CE, 0x57AE, 0x5793, 0x5955, 0x5951, 0x594F, 0x594E, 0x5950, /* 0xB0 */
+ 0x59DC, 0x59D8, 0x59FF, 0x59E3, 0x59E8, 0x5A03, 0x59E5, 0x59EA, /* 0xB0 */
+ 0x59DA, 0x59E6, 0x5A01, 0x59FB, 0x5B69, 0x5BA3, 0x5BA6, 0x5BA4, /* 0xC0 */
+ 0x5BA2, 0x5BA5, 0x5C01, 0x5C4E, 0x5C4F, 0x5C4D, 0x5C4B, 0x5CD9, /* 0xC0 */
+ 0x5CD2, 0x5DF7, 0x5E1D, 0x5E25, 0x5E1F, 0x5E7D, 0x5EA0, 0x5EA6, /* 0xD0 */
+ 0x5EFA, 0x5F08, 0x5F2D, 0x5F65, 0x5F88, 0x5F85, 0x5F8A, 0x5F8B, /* 0xD0 */
+ 0x5F87, 0x5F8C, 0x5F89, 0x6012, 0x601D, 0x6020, 0x6025, 0x600E, /* 0xE0 */
+ 0x6028, 0x604D, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606C, /* 0xE0 */
+ 0x606B, 0x606A, 0x6064, 0x6241, 0x62DC, 0x6316, 0x6309, 0x62FC, /* 0xF0 */
+ 0x62ED, 0x6301, 0x62EE, 0x62FD, 0x6307, 0x62F1, 0x62F7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_AC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x62EF, 0x62EC, 0x62FE, 0x62F4, 0x6311, 0x6302, 0x653F, 0x6545, /* 0x40 */
+ 0x65AB, 0x65BD, 0x65E2, 0x6625, 0x662D, 0x6620, 0x6627, 0x662F, /* 0x40 */
+ 0x661F, 0x6628, 0x6631, 0x6624, 0x66F7, 0x67FF, 0x67D3, 0x67F1, /* 0x50 */
+ 0x67D4, 0x67D0, 0x67EC, 0x67B6, 0x67AF, 0x67F5, 0x67E9, 0x67EF, /* 0x50 */
+ 0x67C4, 0x67D1, 0x67B4, 0x67DA, 0x67E5, 0x67B8, 0x67CF, 0x67DE, /* 0x60 */
+ 0x67F3, 0x67B0, 0x67D9, 0x67E2, 0x67DD, 0x67D2, 0x6B6A, 0x6B83, /* 0x60 */
+ 0x6B86, 0x6BB5, 0x6BD2, 0x6BD7, 0x6C1F, 0x6CC9, 0x6D0B, 0x6D32, /* 0x70 */
+ 0x6D2A, 0x6D41, 0x6D25, 0x6D0C, 0x6D31, 0x6D1E, 0x6D17, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6D3B, 0x6D3D, 0x6D3E, 0x6D36, 0x6D1B, 0x6CF5, 0x6D39, /* 0xA0 */
+ 0x6D27, 0x6D38, 0x6D29, 0x6D2E, 0x6D35, 0x6D0E, 0x6D2B, 0x70AB, /* 0xA0 */
+ 0x70BA, 0x70B3, 0x70AC, 0x70AF, 0x70AD, 0x70B8, 0x70AE, 0x70A4, /* 0xB0 */
+ 0x7230, 0x7272, 0x726F, 0x7274, 0x72E9, 0x72E0, 0x72E1, 0x73B7, /* 0xB0 */
+ 0x73CA, 0x73BB, 0x73B2, 0x73CD, 0x73C0, 0x73B3, 0x751A, 0x752D, /* 0xC0 */
+ 0x754F, 0x754C, 0x754E, 0x754B, 0x75AB, 0x75A4, 0x75A5, 0x75A2, /* 0xC0 */
+ 0x75A3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76C8, 0x76C6, 0x76C3, /* 0xD0 */
+ 0x76C5, 0x7701, 0x76F9, 0x76F8, 0x7709, 0x770B, 0x76FE, 0x76FC, /* 0xD0 */
+ 0x7707, 0x77DC, 0x7802, 0x7814, 0x780C, 0x780D, 0x7946, 0x7949, /* 0xE0 */
+ 0x7948, 0x7947, 0x79B9, 0x79BA, 0x79D1, 0x79D2, 0x79CB, 0x7A7F, /* 0xE0 */
+ 0x7A81, 0x7AFF, 0x7AFD, 0x7C7D, 0x7D02, 0x7D05, 0x7D00, 0x7D09, /* 0xF0 */
+ 0x7D07, 0x7D04, 0x7D06, 0x7F38, 0x7F8E, 0x7FBF, 0x8004 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_AD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8010, 0x800D, 0x8011, 0x8036, 0x80D6, 0x80E5, 0x80DA, 0x80C3, /* 0x40 */
+ 0x80C4, 0x80CC, 0x80E1, 0x80DB, 0x80CE, 0x80DE, 0x80E4, 0x80DD, /* 0x40 */
+ 0x81F4, 0x8222, 0x82E7, 0x8303, 0x8305, 0x82E3, 0x82DB, 0x82E6, /* 0x50 */
+ 0x8304, 0x82E5, 0x8302, 0x8309, 0x82D2, 0x82D7, 0x82F1, 0x8301, /* 0x50 */
+ 0x82DC, 0x82D4, 0x82D1, 0x82DE, 0x82D3, 0x82DF, 0x82EF, 0x8306, /* 0x60 */
+ 0x8650, 0x8679, 0x867B, 0x867A, 0x884D, 0x886B, 0x8981, 0x89D4, /* 0x60 */
+ 0x8A08, 0x8A02, 0x8A03, 0x8C9E, 0x8CA0, 0x8D74, 0x8D73, 0x8DB4, /* 0x70 */
+ 0x8ECD, 0x8ECC, 0x8FF0, 0x8FE6, 0x8FE2, 0x8FEA, 0x8FE5, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8FED, 0x8FEB, 0x8FE4, 0x8FE8, 0x90CA, 0x90CE, 0x90C1, /* 0xA0 */
+ 0x90C3, 0x914B, 0x914A, 0x91CD, 0x9582, 0x9650, 0x964B, 0x964C, /* 0xA0 */
+ 0x964D, 0x9762, 0x9769, 0x97CB, 0x97ED, 0x97F3, 0x9801, 0x98A8, /* 0xB0 */
+ 0x98DB, 0x98DF, 0x9996, 0x9999, 0x4E58, 0x4EB3, 0x500C, 0x500D, /* 0xB0 */
+ 0x5023, 0x4FEF, 0x5026, 0x5025, 0x4FF8, 0x5029, 0x5016, 0x5006, /* 0xC0 */
+ 0x503C, 0x501F, 0x501A, 0x5012, 0x5011, 0x4FFA, 0x5000, 0x5014, /* 0xC0 */
+ 0x5028, 0x4FF1, 0x5021, 0x500B, 0x5019, 0x5018, 0x4FF3, 0x4FEE, /* 0xD0 */
+ 0x502D, 0x502A, 0x4FFE, 0x502B, 0x5009, 0x517C, 0x51A4, 0x51A5, /* 0xD0 */
+ 0x51A2, 0x51CD, 0x51CC, 0x51C6, 0x51CB, 0x5256, 0x525C, 0x5254, /* 0xE0 */
+ 0x525B, 0x525D, 0x532A, 0x537F, 0x539F, 0x539D, 0x53DF, 0x54E8, /* 0xE0 */
+ 0x5510, 0x5501, 0x5537, 0x54FC, 0x54E5, 0x54F2, 0x5506, 0x54FA, /* 0xF0 */
+ 0x5514, 0x54E9, 0x54ED, 0x54E1, 0x5509, 0x54EE, 0x54EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_AE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x54E6, 0x5527, 0x5507, 0x54FD, 0x550F, 0x5703, 0x5704, 0x57C2, /* 0x40 */
+ 0x57D4, 0x57CB, 0x57C3, 0x5809, 0x590F, 0x5957, 0x5958, 0x595A, /* 0x40 */
+ 0x5A11, 0x5A18, 0x5A1C, 0x5A1F, 0x5A1B, 0x5A13, 0x59EC, 0x5A20, /* 0x50 */
+ 0x5A23, 0x5A29, 0x5A25, 0x5A0C, 0x5A09, 0x5B6B, 0x5C58, 0x5BB0, /* 0x50 */
+ 0x5BB3, 0x5BB6, 0x5BB4, 0x5BAE, 0x5BB5, 0x5BB9, 0x5BB8, 0x5C04, /* 0x60 */
+ 0x5C51, 0x5C55, 0x5C50, 0x5CED, 0x5CFD, 0x5CFB, 0x5CEA, 0x5CE8, /* 0x60 */
+ 0x5CF0, 0x5CF6, 0x5D01, 0x5CF4, 0x5DEE, 0x5E2D, 0x5E2B, 0x5EAB, /* 0x70 */
+ 0x5EAD, 0x5EA7, 0x5F31, 0x5F92, 0x5F91, 0x5F90, 0x6059, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6063, 0x6065, 0x6050, 0x6055, 0x606D, 0x6069, 0x606F, /* 0xA0 */
+ 0x6084, 0x609F, 0x609A, 0x608D, 0x6094, 0x608C, 0x6085, 0x6096, /* 0xA0 */
+ 0x6247, 0x62F3, 0x6308, 0x62FF, 0x634E, 0x633E, 0x632F, 0x6355, /* 0xB0 */
+ 0x6342, 0x6346, 0x634F, 0x6349, 0x633A, 0x6350, 0x633D, 0x632A, /* 0xB0 */
+ 0x632B, 0x6328, 0x634D, 0x634C, 0x6548, 0x6549, 0x6599, 0x65C1, /* 0xC0 */
+ 0x65C5, 0x6642, 0x6649, 0x664F, 0x6643, 0x6652, 0x664C, 0x6645, /* 0xC0 */
+ 0x6641, 0x66F8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, /* 0xD0 */
+ 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68B3, 0x6817, /* 0xD0 */
+ 0x684C, 0x6851, 0x683D, 0x67F4, 0x6850, 0x6840, 0x683C, 0x6843, /* 0xE0 */
+ 0x682A, 0x6845, 0x6813, 0x6818, 0x6841, 0x6B8A, 0x6B89, 0x6BB7, /* 0xE0 */
+ 0x6C23, 0x6C27, 0x6C28, 0x6C26, 0x6C24, 0x6CF0, 0x6D6A, 0x6D95, /* 0xF0 */
+ 0x6D88, 0x6D87, 0x6D66, 0x6D78, 0x6D77, 0x6D59, 0x6D93 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_AF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6D6C, 0x6D89, 0x6D6E, 0x6D5A, 0x6D74, 0x6D69, 0x6D8C, 0x6D8A, /* 0x40 */
+ 0x6D79, 0x6D85, 0x6D65, 0x6D94, 0x70CA, 0x70D8, 0x70E4, 0x70D9, /* 0x40 */
+ 0x70C8, 0x70CF, 0x7239, 0x7279, 0x72FC, 0x72F9, 0x72FD, 0x72F8, /* 0x50 */
+ 0x72F7, 0x7386, 0x73ED, 0x7409, 0x73EE, 0x73E0, 0x73EA, 0x73DE, /* 0x50 */
+ 0x7554, 0x755D, 0x755C, 0x755A, 0x7559, 0x75BE, 0x75C5, 0x75C7, /* 0x60 */
+ 0x75B2, 0x75B3, 0x75BD, 0x75BC, 0x75B9, 0x75C2, 0x75B8, 0x768B, /* 0x60 */
+ 0x76B0, 0x76CA, 0x76CD, 0x76CE, 0x7729, 0x771F, 0x7720, 0x7728, /* 0x70 */
+ 0x77E9, 0x7830, 0x7827, 0x7838, 0x781D, 0x7834, 0x7837, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7825, 0x782D, 0x7820, 0x781F, 0x7832, 0x7955, 0x7950, /* 0xA0 */
+ 0x7960, 0x795F, 0x7956, 0x795E, 0x795D, 0x7957, 0x795A, 0x79E4, /* 0xA0 */
+ 0x79E3, 0x79E7, 0x79DF, 0x79E6, 0x79E9, 0x79D8, 0x7A84, 0x7A88, /* 0xB0 */
+ 0x7AD9, 0x7B06, 0x7B11, 0x7C89, 0x7D21, 0x7D17, 0x7D0B, 0x7D0A, /* 0xB0 */
+ 0x7D20, 0x7D22, 0x7D14, 0x7D10, 0x7D15, 0x7D1A, 0x7D1C, 0x7D0D, /* 0xC0 */
+ 0x7D19, 0x7D1B, 0x7F3A, 0x7F5F, 0x7F94, 0x7FC5, 0x7FC1, 0x8006, /* 0xC0 */
+ 0x8018, 0x8015, 0x8019, 0x8017, 0x803D, 0x803F, 0x80F1, 0x8102, /* 0xD0 */
+ 0x80F0, 0x8105, 0x80ED, 0x80F4, 0x8106, 0x80F8, 0x80F3, 0x8108, /* 0xD0 */
+ 0x80FD, 0x810A, 0x80FC, 0x80EF, 0x81ED, 0x81EC, 0x8200, 0x8210, /* 0xE0 */
+ 0x822A, 0x822B, 0x8228, 0x822C, 0x82BB, 0x832B, 0x8352, 0x8354, /* 0xE0 */
+ 0x834A, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834F, 0x8332, /* 0xF0 */
+ 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8654, 0x868A, 0x86AA, 0x8693, 0x86A4, 0x86A9, 0x868C, 0x86A3, /* 0x40 */
+ 0x869C, 0x8870, 0x8877, 0x8881, 0x8882, 0x887D, 0x8879, 0x8A18, /* 0x40 */
+ 0x8A10, 0x8A0E, 0x8A0C, 0x8A15, 0x8A0A, 0x8A17, 0x8A13, 0x8A16, /* 0x50 */
+ 0x8A0F, 0x8A11, 0x8C48, 0x8C7A, 0x8C79, 0x8CA1, 0x8CA2, 0x8D77, /* 0x50 */
+ 0x8EAC, 0x8ED2, 0x8ED4, 0x8ECF, 0x8FB1, 0x9001, 0x9006, 0x8FF7, /* 0x60 */
+ 0x9000, 0x8FFA, 0x8FF4, 0x9003, 0x8FFD, 0x9005, 0x8FF8, 0x9095, /* 0x60 */
+ 0x90E1, 0x90DD, 0x90E2, 0x9152, 0x914D, 0x914C, 0x91D8, 0x91DD, /* 0x70 */
+ 0x91D7, 0x91DC, 0x91D9, 0x9583, 0x9662, 0x9663, 0x9661, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x965B, 0x965D, 0x9664, 0x9658, 0x965E, 0x96BB, 0x98E2, /* 0xA0 */
+ 0x99AC, 0x9AA8, 0x9AD8, 0x9B25, 0x9B32, 0x9B3C, 0x4E7E, 0x507A, /* 0xA0 */
+ 0x507D, 0x505C, 0x5047, 0x5043, 0x504C, 0x505A, 0x5049, 0x5065, /* 0xB0 */
+ 0x5076, 0x504E, 0x5055, 0x5075, 0x5074, 0x5077, 0x504F, 0x500F, /* 0xB0 */
+ 0x506F, 0x506D, 0x515C, 0x5195, 0x51F0, 0x526A, 0x526F, 0x52D2, /* 0xC0 */
+ 0x52D9, 0x52D8, 0x52D5, 0x5310, 0x530F, 0x5319, 0x533F, 0x5340, /* 0xC0 */
+ 0x533E, 0x53C3, 0x66FC, 0x5546, 0x556A, 0x5566, 0x5544, 0x555E, /* 0xD0 */
+ 0x5561, 0x5543, 0x554A, 0x5531, 0x5556, 0x554F, 0x5555, 0x552F, /* 0xD0 */
+ 0x5564, 0x5538, 0x552E, 0x555C, 0x552C, 0x5563, 0x5533, 0x5541, /* 0xE0 */
+ 0x5557, 0x5708, 0x570B, 0x5709, 0x57DF, 0x5805, 0x580A, 0x5806, /* 0xE0 */
+ 0x57E0, 0x57E4, 0x57FA, 0x5802, 0x5835, 0x57F7, 0x57F9, 0x5920, /* 0xF0 */
+ 0x5962, 0x5A36, 0x5A41, 0x5A49, 0x5A66, 0x5A6A, 0x5A40 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5A3C, 0x5A62, 0x5A5A, 0x5A46, 0x5A4A, 0x5B70, 0x5BC7, 0x5BC5, /* 0x40 */
+ 0x5BC4, 0x5BC2, 0x5BBF, 0x5BC6, 0x5C09, 0x5C08, 0x5C07, 0x5C60, /* 0x40 */
+ 0x5C5C, 0x5C5D, 0x5D07, 0x5D06, 0x5D0E, 0x5D1B, 0x5D16, 0x5D22, /* 0x50 */
+ 0x5D11, 0x5D29, 0x5D14, 0x5D19, 0x5D24, 0x5D27, 0x5D17, 0x5DE2, /* 0x50 */
+ 0x5E38, 0x5E36, 0x5E33, 0x5E37, 0x5EB7, 0x5EB8, 0x5EB6, 0x5EB5, /* 0x60 */
+ 0x5EBE, 0x5F35, 0x5F37, 0x5F57, 0x5F6C, 0x5F69, 0x5F6B, 0x5F97, /* 0x60 */
+ 0x5F99, 0x5F9E, 0x5F98, 0x5FA1, 0x5FA0, 0x5F9C, 0x607F, 0x60A3, /* 0x70 */
+ 0x6089, 0x60A0, 0x60A8, 0x60CB, 0x60B4, 0x60E6, 0x60BD, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x60C5, 0x60BB, 0x60B5, 0x60DC, 0x60BC, 0x60D8, 0x60D5, /* 0xA0 */
+ 0x60C6, 0x60DF, 0x60B8, 0x60DA, 0x60C7, 0x621A, 0x621B, 0x6248, /* 0xA0 */
+ 0x63A0, 0x63A7, 0x6372, 0x6396, 0x63A2, 0x63A5, 0x6377, 0x6367, /* 0xB0 */
+ 0x6398, 0x63AA, 0x6371, 0x63A9, 0x6389, 0x6383, 0x639B, 0x636B, /* 0xB0 */
+ 0x63A8, 0x6384, 0x6388, 0x6399, 0x63A1, 0x63AC, 0x6392, 0x638F, /* 0xC0 */
+ 0x6380, 0x637B, 0x6369, 0x6368, 0x637A, 0x655D, 0x6556, 0x6551, /* 0xC0 */
+ 0x6559, 0x6557, 0x555F, 0x654F, 0x6558, 0x6555, 0x6554, 0x659C, /* 0xD0 */
+ 0x659B, 0x65AC, 0x65CF, 0x65CB, 0x65CC, 0x65CE, 0x665D, 0x665A, /* 0xD0 */
+ 0x6664, 0x6668, 0x6666, 0x665E, 0x66F9, 0x52D7, 0x671B, 0x6881, /* 0xE0 */
+ 0x68AF, 0x68A2, 0x6893, 0x68B5, 0x687F, 0x6876, 0x68B1, 0x68A7, /* 0xE0 */
+ 0x6897, 0x68B0, 0x6883, 0x68C4, 0x68AD, 0x6886, 0x6885, 0x6894, /* 0xF0 */
+ 0x689D, 0x68A8, 0x689F, 0x68A1, 0x6882, 0x6B32, 0x6BBA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6BEB, 0x6BEC, 0x6C2B, 0x6D8E, 0x6DBC, 0x6DF3, 0x6DD9, 0x6DB2, /* 0x40 */
+ 0x6DE1, 0x6DCC, 0x6DE4, 0x6DFB, 0x6DFA, 0x6E05, 0x6DC7, 0x6DCB, /* 0x40 */
+ 0x6DAF, 0x6DD1, 0x6DAE, 0x6DDE, 0x6DF9, 0x6DB8, 0x6DF7, 0x6DF5, /* 0x50 */
+ 0x6DC5, 0x6DD2, 0x6E1A, 0x6DB5, 0x6DDA, 0x6DEB, 0x6DD8, 0x6DEA, /* 0x50 */
+ 0x6DF1, 0x6DEE, 0x6DE8, 0x6DC6, 0x6DC4, 0x6DAA, 0x6DEC, 0x6DBF, /* 0x60 */
+ 0x6DE6, 0x70F9, 0x7109, 0x710A, 0x70FD, 0x70EF, 0x723D, 0x727D, /* 0x60 */
+ 0x7281, 0x731C, 0x731B, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, /* 0x70 */
+ 0x740A, 0x7403, 0x7406, 0x73FE, 0x740D, 0x74E0, 0x74F6, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x74F7, 0x751C, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, /* 0xA0 */
+ 0x758F, 0x75D4, 0x75D5, 0x75B5, 0x75CA, 0x75CD, 0x768E, 0x76D4, /* 0xA0 */
+ 0x76D2, 0x76DB, 0x7737, 0x773E, 0x773C, 0x7736, 0x7738, 0x773A, /* 0xB0 */
+ 0x786B, 0x7843, 0x784E, 0x7965, 0x7968, 0x796D, 0x79FB, 0x7A92, /* 0xB0 */
+ 0x7A95, 0x7B20, 0x7B28, 0x7B1B, 0x7B2C, 0x7B26, 0x7B19, 0x7B1E, /* 0xC0 */
+ 0x7B2E, 0x7C92, 0x7C97, 0x7C95, 0x7D46, 0x7D43, 0x7D71, 0x7D2E, /* 0xC0 */
+ 0x7D39, 0x7D3C, 0x7D40, 0x7D30, 0x7D33, 0x7D44, 0x7D2F, 0x7D42, /* 0xD0 */
+ 0x7D32, 0x7D31, 0x7F3D, 0x7F9E, 0x7F9A, 0x7FCC, 0x7FCE, 0x7FD2, /* 0xD0 */
+ 0x801C, 0x804A, 0x8046, 0x812F, 0x8116, 0x8123, 0x812B, 0x8129, /* 0xE0 */
+ 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838E, /* 0xE0 */
+ 0x839E, 0x8398, 0x8378, 0x83A2, 0x8396, 0x83BD, 0x83AB, 0x8392, /* 0xF0 */
+ 0x838A, 0x8393, 0x8389, 0x83A0, 0x8377, 0x837B, 0x837C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8386, 0x83A7, 0x8655, 0x5F6A, 0x86C7, 0x86C0, 0x86B6, 0x86C4, /* 0x40 */
+ 0x86B5, 0x86C6, 0x86CB, 0x86B1, 0x86AF, 0x86C9, 0x8853, 0x889E, /* 0x40 */
+ 0x8888, 0x88AB, 0x8892, 0x8896, 0x888D, 0x888B, 0x8993, 0x898F, /* 0x50 */
+ 0x8A2A, 0x8A1D, 0x8A23, 0x8A25, 0x8A31, 0x8A2D, 0x8A1F, 0x8A1B, /* 0x50 */
+ 0x8A22, 0x8C49, 0x8C5A, 0x8CA9, 0x8CAC, 0x8CAB, 0x8CA8, 0x8CAA, /* 0x60 */
+ 0x8CA7, 0x8D67, 0x8D66, 0x8DBE, 0x8DBA, 0x8EDB, 0x8EDF, 0x9019, /* 0x60 */
+ 0x900D, 0x901A, 0x9017, 0x9023, 0x901F, 0x901D, 0x9010, 0x9015, /* 0x70 */
+ 0x901E, 0x9020, 0x900F, 0x9022, 0x9016, 0x901B, 0x9014, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x90E8, 0x90ED, 0x90FD, 0x9157, 0x91CE, 0x91F5, 0x91E6, /* 0xA0 */
+ 0x91E3, 0x91E7, 0x91ED, 0x91E9, 0x9589, 0x966A, 0x9675, 0x9673, /* 0xA0 */
+ 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, 0x966C, 0x96C0, 0x96EA, /* 0xB0 */
+ 0x96E9, 0x7AE0, 0x7ADF, 0x9802, 0x9803, 0x9B5A, 0x9CE5, 0x9E75, /* 0xB0 */
+ 0x9E7F, 0x9EA5, 0x9EBB, 0x50A2, 0x508D, 0x5085, 0x5099, 0x5091, /* 0xC0 */
+ 0x5080, 0x5096, 0x5098, 0x509A, 0x6700, 0x51F1, 0x5272, 0x5274, /* 0xC0 */
+ 0x5275, 0x5269, 0x52DE, 0x52DD, 0x52DB, 0x535A, 0x53A5, 0x557B, /* 0xD0 */
+ 0x5580, 0x55A7, 0x557C, 0x558A, 0x559D, 0x5598, 0x5582, 0x559C, /* 0xD0 */
+ 0x55AA, 0x5594, 0x5587, 0x558B, 0x5583, 0x55B3, 0x55AE, 0x559F, /* 0xE0 */
+ 0x553E, 0x55B2, 0x559A, 0x55BB, 0x55AC, 0x55B1, 0x557E, 0x5589, /* 0xE0 */
+ 0x55AB, 0x5599, 0x570D, 0x582F, 0x582A, 0x5834, 0x5824, 0x5830, /* 0xF0 */
+ 0x5831, 0x5821, 0x581D, 0x5820, 0x58F9, 0x58FA, 0x5960 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5A77, 0x5A9A, 0x5A7F, 0x5A92, 0x5A9B, 0x5AA7, 0x5B73, 0x5B71, /* 0x40 */
+ 0x5BD2, 0x5BCC, 0x5BD3, 0x5BD0, 0x5C0A, 0x5C0B, 0x5C31, 0x5D4C, /* 0x40 */
+ 0x5D50, 0x5D34, 0x5D47, 0x5DFD, 0x5E45, 0x5E3D, 0x5E40, 0x5E43, /* 0x50 */
+ 0x5E7E, 0x5ECA, 0x5EC1, 0x5EC2, 0x5EC4, 0x5F3C, 0x5F6D, 0x5FA9, /* 0x50 */
+ 0x5FAA, 0x5FA8, 0x60D1, 0x60E1, 0x60B2, 0x60B6, 0x60E0, 0x611C, /* 0x60 */
+ 0x6123, 0x60FA, 0x6115, 0x60F0, 0x60FB, 0x60F4, 0x6168, 0x60F1, /* 0x60 */
+ 0x610E, 0x60F6, 0x6109, 0x6100, 0x6112, 0x621F, 0x6249, 0x63A3, /* 0x70 */
+ 0x638C, 0x63CF, 0x63C0, 0x63E9, 0x63C9, 0x63C6, 0x63CD, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x63D2, 0x63E3, 0x63D0, 0x63E1, 0x63D6, 0x63ED, 0x63EE, /* 0xA0 */
+ 0x6376, 0x63F4, 0x63EA, 0x63DB, 0x6452, 0x63DA, 0x63F9, 0x655E, /* 0xA0 */
+ 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65AF, 0x666E, 0x6670, /* 0xB0 */
+ 0x6674, 0x6676, 0x666F, 0x6691, 0x667A, 0x667E, 0x6677, 0x66FE, /* 0xB0 */
+ 0x66FF, 0x671F, 0x671D, 0x68FA, 0x68D5, 0x68E0, 0x68D8, 0x68D7, /* 0xC0 */
+ 0x6905, 0x68DF, 0x68F5, 0x68EE, 0x68E7, 0x68F9, 0x68D2, 0x68F2, /* 0xC0 */
+ 0x68E3, 0x68CB, 0x68CD, 0x690D, 0x6912, 0x690E, 0x68C9, 0x68DA, /* 0xD0 */
+ 0x696E, 0x68FB, 0x6B3E, 0x6B3A, 0x6B3D, 0x6B98, 0x6B96, 0x6BBC, /* 0xD0 */
+ 0x6BEF, 0x6C2E, 0x6C2F, 0x6C2C, 0x6E2F, 0x6E38, 0x6E54, 0x6E21, /* 0xE0 */
+ 0x6E32, 0x6E67, 0x6E4A, 0x6E20, 0x6E25, 0x6E23, 0x6E1B, 0x6E5B, /* 0xE0 */
+ 0x6E58, 0x6E24, 0x6E56, 0x6E6E, 0x6E2D, 0x6E26, 0x6E6F, 0x6E34, /* 0xF0 */
+ 0x6E4D, 0x6E3A, 0x6E2C, 0x6E43, 0x6E1D, 0x6E3E, 0x6ECB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6E89, 0x6E19, 0x6E4E, 0x6E63, 0x6E44, 0x6E72, 0x6E69, 0x6E5F, /* 0x40 */
+ 0x7119, 0x711A, 0x7126, 0x7130, 0x7121, 0x7136, 0x716E, 0x711C, /* 0x40 */
+ 0x724C, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743A, /* 0x50 */
+ 0x742A, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742F, /* 0x50 */
+ 0x741B, 0x7426, 0x7428, 0x7525, 0x7526, 0x756B, 0x756A, 0x75E2, /* 0x60 */
+ 0x75DB, 0x75E3, 0x75D9, 0x75D8, 0x75DE, 0x75E0, 0x767B, 0x767C, /* 0x60 */
+ 0x7696, 0x7693, 0x76B4, 0x76DC, 0x774F, 0x77ED, 0x785D, 0x786C, /* 0x70 */
+ 0x786F, 0x7A0D, 0x7A08, 0x7A0B, 0x7A05, 0x7A00, 0x7A98, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7A97, 0x7A96, 0x7AE5, 0x7AE3, 0x7B49, 0x7B56, 0x7B46, /* 0xA0 */
+ 0x7B50, 0x7B52, 0x7B54, 0x7B4D, 0x7B4B, 0x7B4F, 0x7B51, 0x7C9F, /* 0xA0 */
+ 0x7CA5, 0x7D5E, 0x7D50, 0x7D68, 0x7D55, 0x7D2B, 0x7D6E, 0x7D72, /* 0xB0 */
+ 0x7D61, 0x7D66, 0x7D62, 0x7D70, 0x7D73, 0x5584, 0x7FD4, 0x7FD5, /* 0xB0 */
+ 0x800B, 0x8052, 0x8085, 0x8155, 0x8154, 0x814B, 0x8151, 0x814E, /* 0xC0 */
+ 0x8139, 0x8146, 0x813E, 0x814C, 0x8153, 0x8174, 0x8212, 0x821C, /* 0xC0 */
+ 0x83E9, 0x8403, 0x83F8, 0x840D, 0x83E0, 0x83C5, 0x840B, 0x83C1, /* 0xD0 */
+ 0x83EF, 0x83F1, 0x83F4, 0x8457, 0x840A, 0x83F0, 0x840C, 0x83CC, /* 0xD0 */
+ 0x83FD, 0x83F2, 0x83CA, 0x8438, 0x840E, 0x8404, 0x83DC, 0x8407, /* 0xE0 */
+ 0x83D4, 0x83DF, 0x865B, 0x86DF, 0x86D9, 0x86ED, 0x86D4, 0x86DB, /* 0xE0 */
+ 0x86E4, 0x86D0, 0x86DE, 0x8857, 0x88C1, 0x88C2, 0x88B1, 0x8983, /* 0xF0 */
+ 0x8996, 0x8A3B, 0x8A60, 0x8A55, 0x8A5E, 0x8A3C, 0x8A41 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8A54, 0x8A5B, 0x8A50, 0x8A46, 0x8A34, 0x8A3A, 0x8A36, 0x8A56, /* 0x40 */
+ 0x8C61, 0x8C82, 0x8CAF, 0x8CBC, 0x8CB3, 0x8CBD, 0x8CC1, 0x8CBB, /* 0x40 */
+ 0x8CC0, 0x8CB4, 0x8CB7, 0x8CB6, 0x8CBF, 0x8CB8, 0x8D8A, 0x8D85, /* 0x50 */
+ 0x8D81, 0x8DCE, 0x8DDD, 0x8DCB, 0x8DDA, 0x8DD1, 0x8DCC, 0x8DDB, /* 0x50 */
+ 0x8DC6, 0x8EFB, 0x8EF8, 0x8EFC, 0x8F9C, 0x902E, 0x9035, 0x9031, /* 0x60 */
+ 0x9038, 0x9032, 0x9036, 0x9102, 0x90F5, 0x9109, 0x90FE, 0x9163, /* 0x60 */
+ 0x9165, 0x91CF, 0x9214, 0x9215, 0x9223, 0x9209, 0x921E, 0x920D, /* 0x70 */
+ 0x9210, 0x9207, 0x9211, 0x9594, 0x958F, 0x958B, 0x9591, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9593, 0x9592, 0x958E, 0x968A, 0x968E, 0x968B, 0x967D, /* 0xA0 */
+ 0x9685, 0x9686, 0x968D, 0x9672, 0x9684, 0x96C1, 0x96C5, 0x96C4, /* 0xA0 */
+ 0x96C6, 0x96C7, 0x96EF, 0x96F2, 0x97CC, 0x9805, 0x9806, 0x9808, /* 0xB0 */
+ 0x98E7, 0x98EA, 0x98EF, 0x98E9, 0x98F2, 0x98ED, 0x99AE, 0x99AD, /* 0xB0 */
+ 0x9EC3, 0x9ECD, 0x9ED1, 0x4E82, 0x50AD, 0x50B5, 0x50B2, 0x50B3, /* 0xC0 */
+ 0x50C5, 0x50BE, 0x50AC, 0x50B7, 0x50BB, 0x50AF, 0x50C7, 0x527F, /* 0xC0 */
+ 0x5277, 0x527D, 0x52DF, 0x52E6, 0x52E4, 0x52E2, 0x52E3, 0x532F, /* 0xD0 */
+ 0x55DF, 0x55E8, 0x55D3, 0x55E6, 0x55CE, 0x55DC, 0x55C7, 0x55D1, /* 0xD0 */
+ 0x55E3, 0x55E4, 0x55EF, 0x55DA, 0x55E1, 0x55C5, 0x55C6, 0x55E5, /* 0xE0 */
+ 0x55C9, 0x5712, 0x5713, 0x585E, 0x5851, 0x5858, 0x5857, 0x585A, /* 0xE0 */
+ 0x5854, 0x586B, 0x584C, 0x586D, 0x584A, 0x5862, 0x5852, 0x584B, /* 0xF0 */
+ 0x5967, 0x5AC1, 0x5AC9, 0x5ACC, 0x5ABE, 0x5ABD, 0x5ABC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5AB3, 0x5AC2, 0x5AB2, 0x5D69, 0x5D6F, 0x5E4C, 0x5E79, 0x5EC9, /* 0x40 */
+ 0x5EC8, 0x5F12, 0x5F59, 0x5FAC, 0x5FAE, 0x611A, 0x610F, 0x6148, /* 0x40 */
+ 0x611F, 0x60F3, 0x611B, 0x60F9, 0x6101, 0x6108, 0x614E, 0x614C, /* 0x50 */
+ 0x6144, 0x614D, 0x613E, 0x6134, 0x6127, 0x610D, 0x6106, 0x6137, /* 0x50 */
+ 0x6221, 0x6222, 0x6413, 0x643E, 0x641E, 0x642A, 0x642D, 0x643D, /* 0x60 */
+ 0x642C, 0x640F, 0x641C, 0x6414, 0x640D, 0x6436, 0x6416, 0x6417, /* 0x60 */
+ 0x6406, 0x656C, 0x659F, 0x65B0, 0x6697, 0x6689, 0x6687, 0x6688, /* 0x70 */
+ 0x6696, 0x6684, 0x6698, 0x668D, 0x6703, 0x6994, 0x696D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x695A, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, /* 0xA0 */
+ 0x694A, 0x6968, 0x696B, 0x695E, 0x6953, 0x6979, 0x6986, 0x695D, /* 0xA0 */
+ 0x6963, 0x695B, 0x6B47, 0x6B72, 0x6BC0, 0x6BBF, 0x6BD3, 0x6BFD, /* 0xB0 */
+ 0x6EA2, 0x6EAF, 0x6ED3, 0x6EB6, 0x6EC2, 0x6E90, 0x6E9D, 0x6EC7, /* 0xB0 */
+ 0x6EC5, 0x6EA5, 0x6E98, 0x6EBC, 0x6EBA, 0x6EAB, 0x6ED1, 0x6E96, /* 0xC0 */
+ 0x6E9C, 0x6EC4, 0x6ED4, 0x6EAA, 0x6EA7, 0x6EB4, 0x714E, 0x7159, /* 0xC0 */
+ 0x7169, 0x7164, 0x7149, 0x7167, 0x715C, 0x716C, 0x7166, 0x714C, /* 0xD0 */
+ 0x7165, 0x715E, 0x7146, 0x7168, 0x7156, 0x723A, 0x7252, 0x7337, /* 0xD0 */
+ 0x7345, 0x733F, 0x733E, 0x746F, 0x745A, 0x7455, 0x745F, 0x745E, /* 0xE0 */
+ 0x7441, 0x743F, 0x7459, 0x745B, 0x745C, 0x7576, 0x7578, 0x7600, /* 0xE0 */
+ 0x75F0, 0x7601, 0x75F2, 0x75F1, 0x75FA, 0x75FF, 0x75F4, 0x75F3, /* 0xF0 */
+ 0x76DE, 0x76DF, 0x775B, 0x776B, 0x7766, 0x775E, 0x7763 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7779, 0x776A, 0x776C, 0x775C, 0x7765, 0x7768, 0x7762, 0x77EE, /* 0x40 */
+ 0x788E, 0x78B0, 0x7897, 0x7898, 0x788C, 0x7889, 0x787C, 0x7891, /* 0x40 */
+ 0x7893, 0x787F, 0x797A, 0x797F, 0x7981, 0x842C, 0x79BD, 0x7A1C, /* 0x50 */
+ 0x7A1A, 0x7A20, 0x7A14, 0x7A1F, 0x7A1E, 0x7A9F, 0x7AA0, 0x7B77, /* 0x50 */
+ 0x7BC0, 0x7B60, 0x7B6E, 0x7B67, 0x7CB1, 0x7CB3, 0x7CB5, 0x7D93, /* 0x60 */
+ 0x7D79, 0x7D91, 0x7D81, 0x7D8F, 0x7D5B, 0x7F6E, 0x7F69, 0x7F6A, /* 0x60 */
+ 0x7F72, 0x7FA9, 0x7FA8, 0x7FA4, 0x8056, 0x8058, 0x8086, 0x8084, /* 0x70 */
+ 0x8171, 0x8170, 0x8178, 0x8165, 0x816E, 0x8173, 0x816B, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8179, 0x817A, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, /* 0xA0 */
+ 0x843D, 0x8431, 0x8475, 0x8466, 0x846B, 0x8449, 0x846C, 0x845B, /* 0xA0 */
+ 0x843C, 0x8435, 0x8461, 0x8463, 0x8469, 0x846D, 0x8446, 0x865E, /* 0xB0 */
+ 0x865C, 0x865F, 0x86F9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86FE, /* 0xB0 */
+ 0x86FB, 0x8702, 0x8703, 0x8706, 0x870A, 0x8859, 0x88DF, 0x88D4, /* 0xC0 */
+ 0x88D9, 0x88DC, 0x88D8, 0x88DD, 0x88E1, 0x88CA, 0x88D5, 0x88D2, /* 0xC0 */
+ 0x899C, 0x89E3, 0x8A6B, 0x8A72, 0x8A73, 0x8A66, 0x8A69, 0x8A70, /* 0xD0 */
+ 0x8A87, 0x8A7C, 0x8A63, 0x8AA0, 0x8A71, 0x8A85, 0x8A6D, 0x8A62, /* 0xD0 */
+ 0x8A6E, 0x8A6C, 0x8A79, 0x8A7B, 0x8A3E, 0x8A68, 0x8C62, 0x8C8A, /* 0xE0 */
+ 0x8C89, 0x8CCA, 0x8CC7, 0x8CC8, 0x8CC4, 0x8CB2, 0x8CC3, 0x8CC2, /* 0xE0 */
+ 0x8CC5, 0x8DE1, 0x8DDF, 0x8DE8, 0x8DEF, 0x8DF3, 0x8DFA, 0x8DEA, /* 0xF0 */
+ 0x8DE4, 0x8DE6, 0x8EB2, 0x8F03, 0x8F09, 0x8EFE, 0x8F0A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_B9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8F9F, 0x8FB2, 0x904B, 0x904A, 0x9053, 0x9042, 0x9054, 0x903C, /* 0x40 */
+ 0x9055, 0x9050, 0x9047, 0x904F, 0x904E, 0x904D, 0x9051, 0x903E, /* 0x40 */
+ 0x9041, 0x9112, 0x9117, 0x916C, 0x916A, 0x9169, 0x91C9, 0x9237, /* 0x50 */
+ 0x9257, 0x9238, 0x923D, 0x9240, 0x923E, 0x925B, 0x924B, 0x9264, /* 0x50 */
+ 0x9251, 0x9234, 0x9249, 0x924D, 0x9245, 0x9239, 0x923F, 0x925A, /* 0x60 */
+ 0x9598, 0x9698, 0x9694, 0x9695, 0x96CD, 0x96CB, 0x96C9, 0x96CA, /* 0x60 */
+ 0x96F7, 0x96FB, 0x96F9, 0x96F6, 0x9756, 0x9774, 0x9776, 0x9810, /* 0x70 */
+ 0x9811, 0x9813, 0x980A, 0x9812, 0x980C, 0x98FC, 0x98F4, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x98FD, 0x98FE, 0x99B3, 0x99B1, 0x99B4, 0x9AE1, 0x9CE9, /* 0xA0 */
+ 0x9E82, 0x9F0E, 0x9F13, 0x9F20, 0x50E7, 0x50EE, 0x50E5, 0x50D6, /* 0xA0 */
+ 0x50ED, 0x50DA, 0x50D5, 0x50CF, 0x50D1, 0x50F1, 0x50CE, 0x50E9, /* 0xB0 */
+ 0x5162, 0x51F3, 0x5283, 0x5282, 0x5331, 0x53AD, 0x55FE, 0x5600, /* 0xB0 */
+ 0x561B, 0x5617, 0x55FD, 0x5614, 0x5606, 0x5609, 0x560D, 0x560E, /* 0xC0 */
+ 0x55F7, 0x5616, 0x561F, 0x5608, 0x5610, 0x55F6, 0x5718, 0x5716, /* 0xC0 */
+ 0x5875, 0x587E, 0x5883, 0x5893, 0x588A, 0x5879, 0x5885, 0x587D, /* 0xD0 */
+ 0x58FD, 0x5925, 0x5922, 0x5924, 0x596A, 0x5969, 0x5AE1, 0x5AE6, /* 0xD0 */
+ 0x5AE9, 0x5AD7, 0x5AD6, 0x5AD8, 0x5AE3, 0x5B75, 0x5BDE, 0x5BE7, /* 0xE0 */
+ 0x5BE1, 0x5BE5, 0x5BE6, 0x5BE8, 0x5BE2, 0x5BE4, 0x5BDF, 0x5C0D, /* 0xE0 */
+ 0x5C62, 0x5D84, 0x5D87, 0x5E5B, 0x5E63, 0x5E55, 0x5E57, 0x5E54, /* 0xF0 */
+ 0x5ED3, 0x5ED6, 0x5F0A, 0x5F46, 0x5F70, 0x5FB9, 0x6147 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_BA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x613F, 0x614B, 0x6177, 0x6162, 0x6163, 0x615F, 0x615A, 0x6158, /* 0x40 */
+ 0x6175, 0x622A, 0x6487, 0x6458, 0x6454, 0x64A4, 0x6478, 0x645F, /* 0x40 */
+ 0x647A, 0x6451, 0x6467, 0x6434, 0x646D, 0x647B, 0x6572, 0x65A1, /* 0x50 */
+ 0x65D7, 0x65D6, 0x66A2, 0x66A8, 0x669D, 0x699C, 0x69A8, 0x6995, /* 0x50 */
+ 0x69C1, 0x69AE, 0x69D3, 0x69CB, 0x699B, 0x69B7, 0x69BB, 0x69AB, /* 0x60 */
+ 0x69B4, 0x69D0, 0x69CD, 0x69AD, 0x69CC, 0x69A6, 0x69C3, 0x69A3, /* 0x60 */
+ 0x6B49, 0x6B4C, 0x6C33, 0x6F33, 0x6F14, 0x6EFE, 0x6F13, 0x6EF4, /* 0x70 */
+ 0x6F29, 0x6F3E, 0x6F20, 0x6F2C, 0x6F0F, 0x6F02, 0x6F22, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6EFF, 0x6EEF, 0x6F06, 0x6F31, 0x6F38, 0x6F32, 0x6F23, /* 0xA0 */
+ 0x6F15, 0x6F2B, 0x6F2F, 0x6F88, 0x6F2A, 0x6EEC, 0x6F01, 0x6EF2, /* 0xA0 */
+ 0x6ECC, 0x6EF7, 0x7194, 0x7199, 0x717D, 0x718A, 0x7184, 0x7192, /* 0xB0 */
+ 0x723E, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746A, /* 0xB0 */
+ 0x7470, 0x746D, 0x7504, 0x7591, 0x7627, 0x760D, 0x760B, 0x7609, /* 0xC0 */
+ 0x7613, 0x76E1, 0x76E3, 0x7784, 0x777D, 0x777F, 0x7761, 0x78C1, /* 0xC0 */
+ 0x789F, 0x78A7, 0x78B3, 0x78A9, 0x78A3, 0x798E, 0x798F, 0x798D, /* 0xD0 */
+ 0x7A2E, 0x7A31, 0x7AAA, 0x7AA9, 0x7AED, 0x7AEF, 0x7BA1, 0x7B95, /* 0xD0 */
+ 0x7B8B, 0x7B75, 0x7B97, 0x7B9D, 0x7B94, 0x7B8F, 0x7BB8, 0x7B87, /* 0xE0 */
+ 0x7B84, 0x7CB9, 0x7CBD, 0x7CBE, 0x7DBB, 0x7DB0, 0x7D9C, 0x7DBD, /* 0xE0 */
+ 0x7DBE, 0x7DA0, 0x7DCA, 0x7DB4, 0x7DB2, 0x7DB1, 0x7DBA, 0x7DA2, /* 0xF0 */
+ 0x7DBF, 0x7DB5, 0x7DB8, 0x7DAD, 0x7DD2, 0x7DC7, 0x7DAC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_BB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7F70, 0x7FE0, 0x7FE1, 0x7FDF, 0x805E, 0x805A, 0x8087, 0x8150, /* 0x40 */
+ 0x8180, 0x818F, 0x8188, 0x818A, 0x817F, 0x8182, 0x81E7, 0x81FA, /* 0x40 */
+ 0x8207, 0x8214, 0x821E, 0x824B, 0x84C9, 0x84BF, 0x84C6, 0x84C4, /* 0x50 */
+ 0x8499, 0x849E, 0x84B2, 0x849C, 0x84CB, 0x84B8, 0x84C0, 0x84D3, /* 0x50 */
+ 0x8490, 0x84BC, 0x84D1, 0x84CA, 0x873F, 0x871C, 0x873B, 0x8722, /* 0x60 */
+ 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88F3, 0x8902, /* 0x60 */
+ 0x88F4, 0x88F9, 0x88F8, 0x88FD, 0x88E8, 0x891A, 0x88EF, 0x8AA6, /* 0x70 */
+ 0x8A8C, 0x8A9E, 0x8AA3, 0x8A8D, 0x8AA1, 0x8A93, 0x8AA4, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8AAA, 0x8AA5, 0x8AA8, 0x8A98, 0x8A91, 0x8A9A, 0x8AA7, /* 0xA0 */
+ 0x8C6A, 0x8C8D, 0x8C8C, 0x8CD3, 0x8CD1, 0x8CD2, 0x8D6B, 0x8D99, /* 0xA0 */
+ 0x8D95, 0x8DFC, 0x8F14, 0x8F12, 0x8F15, 0x8F13, 0x8FA3, 0x9060, /* 0xB0 */
+ 0x9058, 0x905C, 0x9063, 0x9059, 0x905E, 0x9062, 0x905D, 0x905B, /* 0xB0 */
+ 0x9119, 0x9118, 0x911E, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, /* 0xC0 */
+ 0x9280, 0x9285, 0x9298, 0x9296, 0x927B, 0x9293, 0x929C, 0x92A8, /* 0xC0 */
+ 0x927C, 0x9291, 0x95A1, 0x95A8, 0x95A9, 0x95A3, 0x95A5, 0x95A4, /* 0xD0 */
+ 0x9699, 0x969C, 0x969B, 0x96CC, 0x96D2, 0x9700, 0x977C, 0x9785, /* 0xD0 */
+ 0x97F6, 0x9817, 0x9818, 0x98AF, 0x98B1, 0x9903, 0x9905, 0x990C, /* 0xE0 */
+ 0x9909, 0x99C1, 0x9AAF, 0x9AB0, 0x9AE6, 0x9B41, 0x9B42, 0x9CF4, /* 0xE0 */
+ 0x9CF6, 0x9CF3, 0x9EBC, 0x9F3B, 0x9F4A, 0x5104, 0x5100, 0x50FB, /* 0xF0 */
+ 0x50F5, 0x50F9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_BC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5287, 0x5288, 0x5289, 0x528D, 0x528A, 0x52F0, 0x53B2, 0x562E, /* 0x40 */
+ 0x563B, 0x5639, 0x5632, 0x563F, 0x5634, 0x5629, 0x5653, 0x564E, /* 0x40 */
+ 0x5657, 0x5674, 0x5636, 0x562F, 0x5630, 0x5880, 0x589F, 0x589E, /* 0x50 */
+ 0x58B3, 0x589C, 0x58AE, 0x58A9, 0x58A6, 0x596D, 0x5B09, 0x5AFB, /* 0x50 */
+ 0x5B0B, 0x5AF5, 0x5B0C, 0x5B08, 0x5BEE, 0x5BEC, 0x5BE9, 0x5BEB, /* 0x60 */
+ 0x5C64, 0x5C65, 0x5D9D, 0x5D94, 0x5E62, 0x5E5F, 0x5E61, 0x5EE2, /* 0x60 */
+ 0x5EDA, 0x5EDF, 0x5EDD, 0x5EE3, 0x5EE0, 0x5F48, 0x5F71, 0x5FB7, /* 0x70 */
+ 0x5FB5, 0x6176, 0x6167, 0x616E, 0x615D, 0x6155, 0x6182, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x617C, 0x6170, 0x616B, 0x617E, 0x61A7, 0x6190, 0x61AB, /* 0xA0 */
+ 0x618E, 0x61AC, 0x619A, 0x61A4, 0x6194, 0x61AE, 0x622E, 0x6469, /* 0xA0 */
+ 0x646F, 0x6479, 0x649E, 0x64B2, 0x6488, 0x6490, 0x64B0, 0x64A5, /* 0xB0 */
+ 0x6493, 0x6495, 0x64A9, 0x6492, 0x64AE, 0x64AD, 0x64AB, 0x649A, /* 0xB0 */
+ 0x64AC, 0x6499, 0x64A2, 0x64B3, 0x6575, 0x6577, 0x6578, 0x66AE, /* 0xC0 */
+ 0x66AB, 0x66B4, 0x66B1, 0x6A23, 0x6A1F, 0x69E8, 0x6A01, 0x6A1E, /* 0xC0 */
+ 0x6A19, 0x69FD, 0x6A21, 0x6A13, 0x6A0A, 0x69F3, 0x6A02, 0x6A05, /* 0xD0 */
+ 0x69ED, 0x6A11, 0x6B50, 0x6B4E, 0x6BA4, 0x6BC5, 0x6BC6, 0x6F3F, /* 0xD0 */
+ 0x6F7C, 0x6F84, 0x6F51, 0x6F66, 0x6F54, 0x6F86, 0x6F6D, 0x6F5B, /* 0xE0 */
+ 0x6F78, 0x6F6E, 0x6F8E, 0x6F7A, 0x6F70, 0x6F64, 0x6F97, 0x6F58, /* 0xE0 */
+ 0x6ED5, 0x6F6F, 0x6F60, 0x6F5F, 0x719F, 0x71AC, 0x71B1, 0x71A8, /* 0xF0 */
+ 0x7256, 0x729B, 0x734E, 0x7357, 0x7469, 0x748B, 0x7483 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_BD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x747E, 0x7480, 0x757F, 0x7620, 0x7629, 0x761F, 0x7624, 0x7626, /* 0x40 */
+ 0x7621, 0x7622, 0x769A, 0x76BA, 0x76E4, 0x778E, 0x7787, 0x778C, /* 0x40 */
+ 0x7791, 0x778B, 0x78CB, 0x78C5, 0x78BA, 0x78CA, 0x78BE, 0x78D5, /* 0x50 */
+ 0x78BC, 0x78D0, 0x7A3F, 0x7A3C, 0x7A40, 0x7A3D, 0x7A37, 0x7A3B, /* 0x50 */
+ 0x7AAF, 0x7AAE, 0x7BAD, 0x7BB1, 0x7BC4, 0x7BB4, 0x7BC6, 0x7BC7, /* 0x60 */
+ 0x7BC1, 0x7BA0, 0x7BCC, 0x7CCA, 0x7DE0, 0x7DF4, 0x7DEF, 0x7DFB, /* 0x60 */
+ 0x7DD8, 0x7DEC, 0x7DDD, 0x7DE8, 0x7DE3, 0x7DDA, 0x7DDE, 0x7DE9, /* 0x70 */
+ 0x7D9E, 0x7DD9, 0x7DF2, 0x7DF9, 0x7F75, 0x7F77, 0x7FAF, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7FE9, 0x8026, 0x819B, 0x819C, 0x819D, 0x81A0, 0x819A, /* 0xA0 */
+ 0x8198, 0x8517, 0x853D, 0x851A, 0x84EE, 0x852C, 0x852D, 0x8513, /* 0xA0 */
+ 0x8511, 0x8523, 0x8521, 0x8514, 0x84EC, 0x8525, 0x84FF, 0x8506, /* 0xB0 */
+ 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, /* 0xB0 */
+ 0x8757, 0x874C, 0x8753, 0x885B, 0x885D, 0x8910, 0x8907, 0x8912, /* 0xC0 */
+ 0x8913, 0x8915, 0x890A, 0x8ABC, 0x8AD2, 0x8AC7, 0x8AC4, 0x8A95, /* 0xC0 */
+ 0x8ACB, 0x8AF8, 0x8AB2, 0x8AC9, 0x8AC2, 0x8ABF, 0x8AB0, 0x8AD6, /* 0xD0 */
+ 0x8ACD, 0x8AB6, 0x8AB9, 0x8ADB, 0x8C4C, 0x8C4E, 0x8C6C, 0x8CE0, /* 0xD0 */
+ 0x8CDE, 0x8CE6, 0x8CE4, 0x8CEC, 0x8CED, 0x8CE2, 0x8CE3, 0x8CDC, /* 0xE0 */
+ 0x8CEA, 0x8CE1, 0x8D6D, 0x8D9F, 0x8DA3, 0x8E2B, 0x8E10, 0x8E1D, /* 0xE0 */
+ 0x8E22, 0x8E0F, 0x8E29, 0x8E1F, 0x8E21, 0x8E1E, 0x8EBA, 0x8F1D, /* 0xF0 */
+ 0x8F1B, 0x8F1F, 0x8F29, 0x8F26, 0x8F2A, 0x8F1C, 0x8F1E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_BE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8F25, 0x9069, 0x906E, 0x9068, 0x906D, 0x9077, 0x9130, 0x912D, /* 0x40 */
+ 0x9127, 0x9131, 0x9187, 0x9189, 0x918B, 0x9183, 0x92C5, 0x92BB, /* 0x40 */
+ 0x92B7, 0x92EA, 0x92AC, 0x92E4, 0x92C1, 0x92B3, 0x92BC, 0x92D2, /* 0x50 */
+ 0x92C7, 0x92F0, 0x92B2, 0x95AD, 0x95B1, 0x9704, 0x9706, 0x9707, /* 0x50 */
+ 0x9709, 0x9760, 0x978D, 0x978B, 0x978F, 0x9821, 0x982B, 0x981C, /* 0x60 */
+ 0x98B3, 0x990A, 0x9913, 0x9912, 0x9918, 0x99DD, 0x99D0, 0x99DF, /* 0x60 */
+ 0x99DB, 0x99D1, 0x99D5, 0x99D2, 0x99D9, 0x9AB7, 0x9AEE, 0x9AEF, /* 0x70 */
+ 0x9B27, 0x9B45, 0x9B44, 0x9B77, 0x9B6F, 0x9D06, 0x9D09, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9D03, 0x9EA9, 0x9EBE, 0x9ECE, 0x58A8, 0x9F52, 0x5112, /* 0xA0 */
+ 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51AA, 0x51DD, 0x5291, /* 0xA0 */
+ 0x5293, 0x52F3, 0x5659, 0x566B, 0x5679, 0x5669, 0x5664, 0x5678, /* 0xB0 */
+ 0x566A, 0x5668, 0x5665, 0x5671, 0x566F, 0x566C, 0x5662, 0x5676, /* 0xB0 */
+ 0x58C1, 0x58BE, 0x58C7, 0x58C5, 0x596E, 0x5B1D, 0x5B34, 0x5B78, /* 0xC0 */
+ 0x5BF0, 0x5C0E, 0x5F4A, 0x61B2, 0x6191, 0x61A9, 0x618A, 0x61CD, /* 0xC0 */
+ 0x61B6, 0x61BE, 0x61CA, 0x61C8, 0x6230, 0x64C5, 0x64C1, 0x64CB, /* 0xD0 */
+ 0x64BB, 0x64BC, 0x64DA, 0x64C4, 0x64C7, 0x64C2, 0x64CD, 0x64BF, /* 0xD0 */
+ 0x64D2, 0x64D4, 0x64BE, 0x6574, 0x66C6, 0x66C9, 0x66B9, 0x66C4, /* 0xE0 */
+ 0x66C7, 0x66B8, 0x6A3D, 0x6A38, 0x6A3A, 0x6A59, 0x6A6B, 0x6A58, /* 0xE0 */
+ 0x6A39, 0x6A44, 0x6A62, 0x6A61, 0x6A4B, 0x6A47, 0x6A35, 0x6A5F, /* 0xF0 */
+ 0x6A48, 0x6B59, 0x6B77, 0x6C05, 0x6FC2, 0x6FB1, 0x6FA1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_BF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6FC3, 0x6FA4, 0x6FC1, 0x6FA7, 0x6FB3, 0x6FC0, 0x6FB9, 0x6FB6, /* 0x40 */
+ 0x6FA6, 0x6FA0, 0x6FB4, 0x71BE, 0x71C9, 0x71D0, 0x71D2, 0x71C8, /* 0x40 */
+ 0x71D5, 0x71B9, 0x71CE, 0x71D9, 0x71DC, 0x71C3, 0x71C4, 0x7368, /* 0x50 */
+ 0x749C, 0x74A3, 0x7498, 0x749F, 0x749E, 0x74E2, 0x750C, 0x750D, /* 0x50 */
+ 0x7634, 0x7638, 0x763A, 0x76E7, 0x76E5, 0x77A0, 0x779E, 0x779F, /* 0x60 */
+ 0x77A5, 0x78E8, 0x78DA, 0x78EC, 0x78E7, 0x79A6, 0x7A4D, 0x7A4E, /* 0x60 */
+ 0x7A46, 0x7A4C, 0x7A4B, 0x7ABA, 0x7BD9, 0x7C11, 0x7BC9, 0x7BE4, /* 0x70 */
+ 0x7BDB, 0x7BE1, 0x7BE9, 0x7BE6, 0x7CD5, 0x7CD6, 0x7E0A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7E11, 0x7E08, 0x7E1B, 0x7E23, 0x7E1E, 0x7E1D, 0x7E09, /* 0xA0 */
+ 0x7E10, 0x7F79, 0x7FB2, 0x7FF0, 0x7FF1, 0x7FEE, 0x8028, 0x81B3, /* 0xA0 */
+ 0x81A9, 0x81A8, 0x81FB, 0x8208, 0x8258, 0x8259, 0x854A, 0x8559, /* 0xB0 */
+ 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856D, 0x856A, 0x855E, /* 0xB0 */
+ 0x8783, 0x879F, 0x879E, 0x87A2, 0x878D, 0x8861, 0x892A, 0x8932, /* 0xC0 */
+ 0x8925, 0x892B, 0x8921, 0x89AA, 0x89A6, 0x8AE6, 0x8AFA, 0x8AEB, /* 0xC0 */
+ 0x8AF1, 0x8B00, 0x8ADC, 0x8AE7, 0x8AEE, 0x8AFE, 0x8B01, 0x8B02, /* 0xD0 */
+ 0x8AF7, 0x8AED, 0x8AF3, 0x8AF6, 0x8AFC, 0x8C6B, 0x8C6D, 0x8C93, /* 0xD0 */
+ 0x8CF4, 0x8E44, 0x8E31, 0x8E34, 0x8E42, 0x8E39, 0x8E35, 0x8F3B, /* 0xE0 */
+ 0x8F2F, 0x8F38, 0x8F33, 0x8FA8, 0x8FA6, 0x9075, 0x9074, 0x9078, /* 0xE0 */
+ 0x9072, 0x907C, 0x907A, 0x9134, 0x9192, 0x9320, 0x9336, 0x92F8, /* 0xF0 */
+ 0x9333, 0x932F, 0x9322, 0x92FC, 0x932B, 0x9304, 0x931A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_C0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9310, 0x9326, 0x9321, 0x9315, 0x932E, 0x9319, 0x95BB, 0x96A7, /* 0x40 */
+ 0x96A8, 0x96AA, 0x96D5, 0x970E, 0x9711, 0x9716, 0x970D, 0x9713, /* 0x40 */
+ 0x970F, 0x975B, 0x975C, 0x9766, 0x9798, 0x9830, 0x9838, 0x983B, /* 0x50 */
+ 0x9837, 0x982D, 0x9839, 0x9824, 0x9910, 0x9928, 0x991E, 0x991B, /* 0x50 */
+ 0x9921, 0x991A, 0x99ED, 0x99E2, 0x99F1, 0x9AB8, 0x9ABC, 0x9AFB, /* 0x60 */
+ 0x9AED, 0x9B28, 0x9B91, 0x9D15, 0x9D23, 0x9D26, 0x9D28, 0x9D12, /* 0x60 */
+ 0x9D1B, 0x9ED8, 0x9ED4, 0x9F8D, 0x9F9C, 0x512A, 0x511F, 0x5121, /* 0x70 */
+ 0x5132, 0x52F5, 0x568E, 0x5680, 0x5690, 0x5685, 0x5687, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x568F, 0x58D5, 0x58D3, 0x58D1, 0x58CE, 0x5B30, 0x5B2A, /* 0xA0 */
+ 0x5B24, 0x5B7A, 0x5C37, 0x5C68, 0x5DBC, 0x5DBA, 0x5DBD, 0x5DB8, /* 0xA0 */
+ 0x5E6B, 0x5F4C, 0x5FBD, 0x61C9, 0x61C2, 0x61C7, 0x61E6, 0x61CB, /* 0xB0 */
+ 0x6232, 0x6234, 0x64CE, 0x64CA, 0x64D8, 0x64E0, 0x64F0, 0x64E6, /* 0xB0 */
+ 0x64EC, 0x64F1, 0x64E2, 0x64ED, 0x6582, 0x6583, 0x66D9, 0x66D6, /* 0xC0 */
+ 0x6A80, 0x6A94, 0x6A84, 0x6AA2, 0x6A9C, 0x6ADB, 0x6AA3, 0x6A7E, /* 0xC0 */
+ 0x6A97, 0x6A90, 0x6AA0, 0x6B5C, 0x6BAE, 0x6BDA, 0x6C08, 0x6FD8, /* 0xD0 */
+ 0x6FF1, 0x6FDF, 0x6FE0, 0x6FDB, 0x6FE4, 0x6FEB, 0x6FEF, 0x6F80, /* 0xD0 */
+ 0x6FEC, 0x6FE1, 0x6FE9, 0x6FD5, 0x6FEE, 0x6FF0, 0x71E7, 0x71DF, /* 0xE0 */
+ 0x71EE, 0x71E6, 0x71E5, 0x71ED, 0x71EC, 0x71F4, 0x71E0, 0x7235, /* 0xE0 */
+ 0x7246, 0x7370, 0x7372, 0x74A9, 0x74B0, 0x74A6, 0x74A8, 0x7646, /* 0xF0 */
+ 0x7642, 0x764C, 0x76EA, 0x77B3, 0x77AA, 0x77B0, 0x77AC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_C1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x77A7, 0x77AD, 0x77EF, 0x78F7, 0x78FA, 0x78F4, 0x78EF, 0x7901, /* 0x40 */
+ 0x79A7, 0x79AA, 0x7A57, 0x7ABF, 0x7C07, 0x7C0D, 0x7BFE, 0x7BF7, /* 0x40 */
+ 0x7C0C, 0x7BE0, 0x7CE0, 0x7CDC, 0x7CDE, 0x7CE2, 0x7CDF, 0x7CD9, /* 0x50 */
+ 0x7CDD, 0x7E2E, 0x7E3E, 0x7E46, 0x7E37, 0x7E32, 0x7E43, 0x7E2B, /* 0x50 */
+ 0x7E3D, 0x7E31, 0x7E45, 0x7E41, 0x7E34, 0x7E39, 0x7E48, 0x7E35, /* 0x60 */
+ 0x7E3F, 0x7E2F, 0x7F44, 0x7FF3, 0x7FFC, 0x8071, 0x8072, 0x8070, /* 0x60 */
+ 0x806F, 0x8073, 0x81C6, 0x81C3, 0x81BA, 0x81C2, 0x81C0, 0x81BF, /* 0x70 */
+ 0x81BD, 0x81C9, 0x81BE, 0x81E8, 0x8209, 0x8271, 0x85AA, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8584, 0x857E, 0x859C, 0x8591, 0x8594, 0x85AF, 0x859B, /* 0xA0 */
+ 0x8587, 0x85A8, 0x858A, 0x8667, 0x87C0, 0x87D1, 0x87B3, 0x87D2, /* 0xA0 */
+ 0x87C6, 0x87AB, 0x87BB, 0x87BA, 0x87C8, 0x87CB, 0x893B, 0x8936, /* 0xB0 */
+ 0x8944, 0x8938, 0x893D, 0x89AC, 0x8B0E, 0x8B17, 0x8B19, 0x8B1B, /* 0xB0 */
+ 0x8B0A, 0x8B20, 0x8B1D, 0x8B04, 0x8B10, 0x8C41, 0x8C3F, 0x8C73, /* 0xC0 */
+ 0x8CFA, 0x8CFD, 0x8CFC, 0x8CF8, 0x8CFB, 0x8DA8, 0x8E49, 0x8E4B, /* 0xC0 */
+ 0x8E48, 0x8E4A, 0x8F44, 0x8F3E, 0x8F42, 0x8F45, 0x8F3F, 0x907F, /* 0xD0 */
+ 0x907D, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91A3, 0x919E, /* 0xD0 */
+ 0x919C, 0x934D, 0x9382, 0x9328, 0x9375, 0x934A, 0x9365, 0x934B, /* 0xE0 */
+ 0x9318, 0x937E, 0x936C, 0x935B, 0x9370, 0x935A, 0x9354, 0x95CA, /* 0xE0 */
+ 0x95CB, 0x95CC, 0x95C8, 0x95C6, 0x96B1, 0x96B8, 0x96D6, 0x971C, /* 0xF0 */
+ 0x971E, 0x97A0, 0x97D3, 0x9846, 0x98B6, 0x9935, 0x9A01 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_C2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x99FF, 0x9BAE, 0x9BAB, 0x9BAA, 0x9BAD, 0x9D3B, 0x9D3F, 0x9E8B, /* 0x40 */
+ 0x9ECF, 0x9EDE, 0x9EDC, 0x9EDD, 0x9EDB, 0x9F3E, 0x9F4B, 0x53E2, /* 0x40 */
+ 0x5695, 0x56AE, 0x58D9, 0x58D8, 0x5B38, 0x5F5D, 0x61E3, 0x6233, /* 0x50 */
+ 0x64F4, 0x64F2, 0x64FE, 0x6506, 0x64FA, 0x64FB, 0x64F7, 0x65B7, /* 0x50 */
+ 0x66DC, 0x6726, 0x6AB3, 0x6AAC, 0x6AC3, 0x6ABB, 0x6AB8, 0x6AC2, /* 0x60 */
+ 0x6AAE, 0x6AAF, 0x6B5F, 0x6B78, 0x6BAF, 0x7009, 0x700B, 0x6FFE, /* 0x60 */
+ 0x7006, 0x6FFA, 0x7011, 0x700F, 0x71FB, 0x71FC, 0x71FE, 0x71F8, /* 0x70 */
+ 0x7377, 0x7375, 0x74A7, 0x74BF, 0x7515, 0x7656, 0x7658, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7652, 0x77BD, 0x77BF, 0x77BB, 0x77BC, 0x790E, 0x79AE, /* 0xA0 */
+ 0x7A61, 0x7A62, 0x7A60, 0x7AC4, 0x7AC5, 0x7C2B, 0x7C27, 0x7C2A, /* 0xA0 */
+ 0x7C1E, 0x7C23, 0x7C21, 0x7CE7, 0x7E54, 0x7E55, 0x7E5E, 0x7E5A, /* 0xB0 */
+ 0x7E61, 0x7E52, 0x7E59, 0x7F48, 0x7FF9, 0x7FFB, 0x8077, 0x8076, /* 0xB0 */
+ 0x81CD, 0x81CF, 0x820A, 0x85CF, 0x85A9, 0x85CD, 0x85D0, 0x85C9, /* 0xC0 */
+ 0x85B0, 0x85BA, 0x85B9, 0x85A6, 0x87EF, 0x87EC, 0x87F2, 0x87E0, /* 0xC0 */
+ 0x8986, 0x89B2, 0x89F4, 0x8B28, 0x8B39, 0x8B2C, 0x8B2B, 0x8C50, /* 0xD0 */
+ 0x8D05, 0x8E59, 0x8E63, 0x8E66, 0x8E64, 0x8E5F, 0x8E55, 0x8EC0, /* 0xD0 */
+ 0x8F49, 0x8F4D, 0x9087, 0x9083, 0x9088, 0x91AB, 0x91AC, 0x91D0, /* 0xE0 */
+ 0x9394, 0x938A, 0x9396, 0x93A2, 0x93B3, 0x93AE, 0x93AC, 0x93B0, /* 0xE0 */
+ 0x9398, 0x939A, 0x9397, 0x95D4, 0x95D6, 0x95D0, 0x95D5, 0x96E2, /* 0xF0 */
+ 0x96DC, 0x96D9, 0x96DB, 0x96DE, 0x9724, 0x97A3, 0x97A6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_C3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x97AD, 0x97F9, 0x984D, 0x984F, 0x984C, 0x984E, 0x9853, 0x98BA, /* 0x40 */
+ 0x993E, 0x993F, 0x993D, 0x992E, 0x99A5, 0x9A0E, 0x9AC1, 0x9B03, /* 0x40 */
+ 0x9B06, 0x9B4F, 0x9B4E, 0x9B4D, 0x9BCA, 0x9BC9, 0x9BFD, 0x9BC8, /* 0x50 */
+ 0x9BC0, 0x9D51, 0x9D5D, 0x9D60, 0x9EE0, 0x9F15, 0x9F2C, 0x5133, /* 0x50 */
+ 0x56A5, 0x58DE, 0x58DF, 0x58E2, 0x5BF5, 0x9F90, 0x5EEC, 0x61F2, /* 0x60 */
+ 0x61F7, 0x61F6, 0x61F5, 0x6500, 0x650F, 0x66E0, 0x66DD, 0x6AE5, /* 0x60 */
+ 0x6ADD, 0x6ADA, 0x6AD3, 0x701B, 0x701F, 0x7028, 0x701A, 0x701D, /* 0x70 */
+ 0x7015, 0x7018, 0x7206, 0x720D, 0x7258, 0x72A2, 0x7378, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x737A, 0x74BD, 0x74CA, 0x74E3, 0x7587, 0x7586, 0x765F, /* 0xA0 */
+ 0x7661, 0x77C7, 0x7919, 0x79B1, 0x7A6B, 0x7A69, 0x7C3E, 0x7C3F, /* 0xA0 */
+ 0x7C38, 0x7C3D, 0x7C37, 0x7C40, 0x7E6B, 0x7E6D, 0x7E79, 0x7E69, /* 0xB0 */
+ 0x7E6A, 0x7F85, 0x7E73, 0x7FB6, 0x7FB9, 0x7FB8, 0x81D8, 0x85E9, /* 0xB0 */
+ 0x85DD, 0x85EA, 0x85D5, 0x85E4, 0x85E5, 0x85F7, 0x87FB, 0x8805, /* 0xC0 */
+ 0x880D, 0x87F9, 0x87FE, 0x8960, 0x895F, 0x8956, 0x895E, 0x8B41, /* 0xC0 */
+ 0x8B5C, 0x8B58, 0x8B49, 0x8B5A, 0x8B4E, 0x8B4F, 0x8B46, 0x8B59, /* 0xD0 */
+ 0x8D08, 0x8D0A, 0x8E7C, 0x8E72, 0x8E87, 0x8E76, 0x8E6C, 0x8E7A, /* 0xD0 */
+ 0x8E74, 0x8F54, 0x8F4E, 0x8FAD, 0x908A, 0x908B, 0x91B1, 0x91AE, /* 0xE0 */
+ 0x93E1, 0x93D1, 0x93DF, 0x93C3, 0x93C8, 0x93DC, 0x93DD, 0x93D6, /* 0xE0 */
+ 0x93E2, 0x93CD, 0x93D8, 0x93E4, 0x93D7, 0x93E8, 0x95DC, 0x96B4, /* 0xF0 */
+ 0x96E3, 0x972A, 0x9727, 0x9761, 0x97DC, 0x97FB, 0x985E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_C4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x9858, 0x985B, 0x98BC, 0x9945, 0x9949, 0x9A16, 0x9A19, 0x9B0D, /* 0x40 */
+ 0x9BE8, 0x9BE7, 0x9BD6, 0x9BDB, 0x9D89, 0x9D61, 0x9D72, 0x9D6A, /* 0x40 */
+ 0x9D6C, 0x9E92, 0x9E97, 0x9E93, 0x9EB4, 0x52F8, 0x56A8, 0x56B7, /* 0x50 */
+ 0x56B6, 0x56B4, 0x56BC, 0x58E4, 0x5B40, 0x5B43, 0x5B7D, 0x5BF6, /* 0x50 */
+ 0x5DC9, 0x61F8, 0x61FA, 0x6518, 0x6514, 0x6519, 0x66E6, 0x6727, /* 0x60 */
+ 0x6AEC, 0x703E, 0x7030, 0x7032, 0x7210, 0x737B, 0x74CF, 0x7662, /* 0x60 */
+ 0x7665, 0x7926, 0x792A, 0x792C, 0x792B, 0x7AC7, 0x7AF6, 0x7C4C, /* 0x70 */
+ 0x7C43, 0x7C4D, 0x7CEF, 0x7CF0, 0x8FAE, 0x7E7D, 0x7E7C, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7E82, 0x7F4C, 0x8000, 0x81DA, 0x8266, 0x85FB, 0x85F9, /* 0xA0 */
+ 0x8611, 0x85FA, 0x8606, 0x860B, 0x8607, 0x860A, 0x8814, 0x8815, /* 0xA0 */
+ 0x8964, 0x89BA, 0x89F8, 0x8B70, 0x8B6C, 0x8B66, 0x8B6F, 0x8B5F, /* 0xB0 */
+ 0x8B6B, 0x8D0F, 0x8D0D, 0x8E89, 0x8E81, 0x8E85, 0x8E82, 0x91B4, /* 0xB0 */
+ 0x91CB, 0x9418, 0x9403, 0x93FD, 0x95E1, 0x9730, 0x98C4, 0x9952, /* 0xC0 */
+ 0x9951, 0x99A8, 0x9A2B, 0x9A30, 0x9A37, 0x9A35, 0x9C13, 0x9C0D, /* 0xC0 */
+ 0x9E79, 0x9EB5, 0x9EE8, 0x9F2F, 0x9F5F, 0x9F63, 0x9F61, 0x5137, /* 0xD0 */
+ 0x5138, 0x56C1, 0x56C0, 0x56C2, 0x5914, 0x5C6C, 0x5DCD, 0x61FC, /* 0xD0 */
+ 0x61FE, 0x651D, 0x651C, 0x6595, 0x66E9, 0x6AFB, 0x6B04, 0x6AFA, /* 0xE0 */
+ 0x6BB2, 0x704C, 0x721B, 0x72A7, 0x74D6, 0x74D4, 0x7669, 0x77D3, /* 0xE0 */
+ 0x7C50, 0x7E8F, 0x7E8C, 0x7FBC, 0x8617, 0x862D, 0x861A, 0x8823, /* 0xF0 */
+ 0x8822, 0x8821, 0x881F, 0x896A, 0x896C, 0x89BD, 0x8B74 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_C5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B77, 0x8B7D, 0x8D13, 0x8E8A, 0x8E8D, 0x8E8B, 0x8F5F, 0x8FAF, /* 0x40 */
+ 0x91BA, 0x942E, 0x9433, 0x9435, 0x943A, 0x9438, 0x9432, 0x942B, /* 0x40 */
+ 0x95E2, 0x9738, 0x9739, 0x9732, 0x97FF, 0x9867, 0x9865, 0x9957, /* 0x50 */
+ 0x9A45, 0x9A43, 0x9A40, 0x9A3E, 0x9ACF, 0x9B54, 0x9B51, 0x9C2D, /* 0x50 */
+ 0x9C25, 0x9DAF, 0x9DB4, 0x9DC2, 0x9DB8, 0x9E9D, 0x9EEF, 0x9F19, /* 0x60 */
+ 0x9F5C, 0x9F66, 0x9F67, 0x513C, 0x513B, 0x56C8, 0x56CA, 0x56C9, /* 0x60 */
+ 0x5B7F, 0x5DD4, 0x5DD2, 0x5F4E, 0x61FF, 0x6524, 0x6B0A, 0x6B61, /* 0x70 */
+ 0x7051, 0x7058, 0x7380, 0x74E4, 0x758A, 0x766E, 0x766C, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x79B3, 0x7C60, 0x7C5F, 0x807E, 0x807D, 0x81DF, 0x8972, /* 0xA0 */
+ 0x896F, 0x89FC, 0x8B80, 0x8D16, 0x8D17, 0x8E91, 0x8E93, 0x8F61, /* 0xA0 */
+ 0x9148, 0x9444, 0x9451, 0x9452, 0x973D, 0x973E, 0x97C3, 0x97C1, /* 0xB0 */
+ 0x986B, 0x9955, 0x9A55, 0x9A4D, 0x9AD2, 0x9B1A, 0x9C49, 0x9C31, /* 0xB0 */
+ 0x9C3E, 0x9C3B, 0x9DD3, 0x9DD7, 0x9F34, 0x9F6C, 0x9F6A, 0x9F94, /* 0xC0 */
+ 0x56CC, 0x5DD6, 0x6200, 0x6523, 0x652B, 0x652A, 0x66EC, 0x6B10, /* 0xC0 */
+ 0x74DA, 0x7ACA, 0x7C64, 0x7C63, 0x7C65, 0x7E93, 0x7E96, 0x7E94, /* 0xD0 */
+ 0x81E2, 0x8638, 0x863F, 0x8831, 0x8B8A, 0x9090, 0x908F, 0x9463, /* 0xD0 */
+ 0x9460, 0x9464, 0x9768, 0x986F, 0x995C, 0x9A5A, 0x9A5B, 0x9A57, /* 0xE0 */
+ 0x9AD3, 0x9AD4, 0x9AD1, 0x9C54, 0x9C57, 0x9C56, 0x9DE5, 0x9E9F, /* 0xE0 */
+ 0x9EF4, 0x56D1, 0x58E9, 0x652C, 0x705E, 0x7671, 0x7672, 0x77D7, /* 0xF0 */
+ 0x7F50, 0x7F88, 0x8836, 0x8839, 0x8862, 0x8B93, 0x8B92 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_C6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B96, 0x8277, 0x8D1B, 0x91C0, 0x946A, 0x9742, 0x9748, 0x9744, /* 0x40 */
+ 0x97C6, 0x9870, 0x9A5F, 0x9B22, 0x9B58, 0x9C5F, 0x9DF9, 0x9DFA, /* 0x40 */
+ 0x9E7C, 0x9E7D, 0x9F07, 0x9F77, 0x9F72, 0x5EF3, 0x6B16, 0x7063, /* 0x50 */
+ 0x7C6C, 0x7C6E, 0x883B, 0x89C0, 0x8EA1, 0x91C1, 0x9472, 0x9470, /* 0x50 */
+ 0x9871, 0x995E, 0x9AD6, 0x9B23, 0x9ECC, 0x7064, 0x77DA, 0x8B9A, /* 0x60 */
+ 0x9477, 0x97C9, 0x9A62, 0x9A65, 0x7E9C, 0x8B9C, 0x8EAA, 0x91C5, /* 0x60 */
+ 0x947D, 0x947E, 0x947C, 0x9C77, 0x9C78, 0x9EF7, 0x8C54, 0x947F, /* 0x70 */
+ 0x9E1A, 0x7228, 0x9A6A, 0x9B31, 0x9E1B, 0x9E1E, 0x7C72 /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* This table only used for BIG5, because on other systems these */
+/* chars are end user defined characters */
+/* SB: This is nonstandard, and has effects on generate/big5hkscs2001.pl. */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5ONLY_C6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B96, 0x8277, 0x8D1B, 0x91C0, 0x946A, 0x9742, 0x9748, 0x9744, /* 0x40 */
+ 0x97C6, 0x9870, 0x9A5F, 0x9B22, 0x9B58, 0x9C5F, 0x9DF9, 0x9DFA, /* 0x40 */
+ 0x9E7C, 0x9E7D, 0x9F07, 0x9F77, 0x9F72, 0x5EF3, 0x6B16, 0x7063, /* 0x50 */
+ 0x7C6C, 0x7C6E, 0x883B, 0x89C0, 0x8EA1, 0x91C1, 0x9472, 0x9470, /* 0x50 */
+ 0x9871, 0x995E, 0x9AD6, 0x9B23, 0x9ECC, 0x7064, 0x77DA, 0x8B9A, /* 0x60 */
+ 0x9477, 0x97C9, 0x9A62, 0x9A65, 0x7E9C, 0x8B9C, 0x8EAA, 0x91C5, /* 0x60 */
+ 0x947D, 0x947E, 0x947C, 0x9C77, 0x9C78, 0x9EF7, 0x8C54, 0x947F, /* 0x70 */
+ 0x9E1A, 0x7228, 0x9A6A, 0x9B31, 0x9E1B, 0x9E1E, 0x7C72, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x30FE, 0x309D, 0x309E, 0x3005, 0x3041, 0x3042, 0x3043, /* 0xA0 */
+ 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304A, 0x304B, /* 0xA0 */
+ 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, 0x3053, /* 0xB0 */
+ 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, /* 0xB0 */
+ 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3063, /* 0xC0 */
+ 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, /* 0xC0 */
+ 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, /* 0xD0 */
+ 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, /* 0xD0 */
+ 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3083, /* 0xE0 */
+ 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A, 0x308B, /* 0xE0 */
+ 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, /* 0xF0 */
+ 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* This table only used for BIG5, because on other systems these */
+/* chars are end user defined characters */
+/* SB: This is nonstandard, and has effects on generate/big5hkscs2001.pl. */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5ONLY_C7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0x40 */
+ 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0x40 */
+ 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0x50 */
+ 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0x50 */
+ 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0x60 */
+ 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0x60 */
+ 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0x70 */
+ 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x30E7, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, /* 0xA0 */
+ 0x30EE, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, /* 0xA0 */
+ 0x30F6, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, /* 0xB0 */
+ 0x041A, 0x041B, 0x041C, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0xB0 */
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0xC0 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, /* 0xC0 */
+ 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, /* 0xD0 */
+ 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, /* 0xD0 */
+ 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, /* 0xE0 */
+ 0x044F, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, /* 0xE0 */
+ 0x2467, 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, /* 0xF0 */
+ 0x2479, 0x247A, 0x247B, 0x247C, 0x247D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_C9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x4E42, 0x4E5C, 0x51F5, 0x531A, 0x5382, 0x4E07, 0x4E0C, 0x4E47, /* 0x40 */
+ 0x4E8D, 0x56D7, 0xFA0C, 0x5C6E, 0x5F73, 0x4E0F, 0x5187, 0x4E0E, /* 0x40 */
+ 0x4E2E, 0x4E93, 0x4EC2, 0x4EC9, 0x4EC8, 0x5198, 0x52FC, 0x536C, /* 0x50 */
+ 0x53B9, 0x5720, 0x5903, 0x592C, 0x5C10, 0x5DFF, 0x65E1, 0x6BB3, /* 0x50 */
+ 0x6BCC, 0x6C14, 0x723F, 0x4E31, 0x4E3C, 0x4EE8, 0x4EDC, 0x4EE9, /* 0x60 */
+ 0x4EE1, 0x4EDD, 0x4EDA, 0x520C, 0x531C, 0x534C, 0x5722, 0x5723, /* 0x60 */
+ 0x5917, 0x592F, 0x5B81, 0x5B84, 0x5C12, 0x5C3B, 0x5C74, 0x5C73, /* 0x70 */
+ 0x5E04, 0x5E80, 0x5E82, 0x5FC9, 0x6209, 0x6250, 0x6C15, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6C36, 0x6C43, 0x6C3F, 0x6C3B, 0x72AE, 0x72B0, 0x738A, /* 0xA0 */
+ 0x79B8, 0x808A, 0x961E, 0x4F0E, 0x4F18, 0x4F2C, 0x4EF5, 0x4F14, /* 0xA0 */
+ 0x4EF1, 0x4F00, 0x4EF7, 0x4F08, 0x4F1D, 0x4F02, 0x4F05, 0x4F22, /* 0xB0 */
+ 0x4F13, 0x4F04, 0x4EF4, 0x4F12, 0x51B1, 0x5213, 0x5209, 0x5210, /* 0xB0 */
+ 0x52A6, 0x5322, 0x531F, 0x534D, 0x538A, 0x5407, 0x56E1, 0x56DF, /* 0xC0 */
+ 0x572E, 0x572A, 0x5734, 0x593C, 0x5980, 0x597C, 0x5985, 0x597B, /* 0xC0 */
+ 0x597E, 0x5977, 0x597F, 0x5B56, 0x5C15, 0x5C25, 0x5C7C, 0x5C7A, /* 0xD0 */
+ 0x5C7B, 0x5C7E, 0x5DDF, 0x5E75, 0x5E84, 0x5F02, 0x5F1A, 0x5F74, /* 0xD0 */
+ 0x5FD5, 0x5FD4, 0x5FCF, 0x625C, 0x625E, 0x6264, 0x6261, 0x6266, /* 0xE0 */
+ 0x6262, 0x6259, 0x6260, 0x625A, 0x6265, 0x65EF, 0x65EE, 0x673E, /* 0xE0 */
+ 0x6739, 0x6738, 0x673B, 0x673A, 0x673F, 0x673C, 0x6733, 0x6C18, /* 0xF0 */
+ 0x6C46, 0x6C52, 0x6C5C, 0x6C4F, 0x6C4A, 0x6C54, 0x6C4B /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_CA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6C4C, 0x7071, 0x725E, 0x72B4, 0x72B5, 0x738E, 0x752A, 0x767F, /* 0x40 */
+ 0x7A75, 0x7F51, 0x8278, 0x827C, 0x8280, 0x827D, 0x827F, 0x864D, /* 0x40 */
+ 0x897E, 0x9099, 0x9097, 0x9098, 0x909B, 0x9094, 0x9622, 0x9624, /* 0x50 */
+ 0x9620, 0x9623, 0x4F56, 0x4F3B, 0x4F62, 0x4F49, 0x4F53, 0x4F64, /* 0x50 */
+ 0x4F3E, 0x4F67, 0x4F52, 0x4F5F, 0x4F41, 0x4F58, 0x4F2D, 0x4F33, /* 0x60 */
+ 0x4F3F, 0x4F61, 0x518F, 0x51B9, 0x521C, 0x521E, 0x5221, 0x52AD, /* 0x60 */
+ 0x52AE, 0x5309, 0x5363, 0x5372, 0x538E, 0x538F, 0x5430, 0x5437, /* 0x70 */
+ 0x542A, 0x5454, 0x5445, 0x5419, 0x541C, 0x5425, 0x5418, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x543D, 0x544F, 0x5441, 0x5428, 0x5424, 0x5447, 0x56EE, /* 0xA0 */
+ 0x56E7, 0x56E5, 0x5741, 0x5745, 0x574C, 0x5749, 0x574B, 0x5752, /* 0xA0 */
+ 0x5906, 0x5940, 0x59A6, 0x5998, 0x59A0, 0x5997, 0x598E, 0x59A2, /* 0xB0 */
+ 0x5990, 0x598F, 0x59A7, 0x59A1, 0x5B8E, 0x5B92, 0x5C28, 0x5C2A, /* 0xB0 */
+ 0x5C8D, 0x5C8F, 0x5C88, 0x5C8B, 0x5C89, 0x5C92, 0x5C8A, 0x5C86, /* 0xC0 */
+ 0x5C93, 0x5C95, 0x5DE0, 0x5E0A, 0x5E0E, 0x5E8B, 0x5E89, 0x5E8C, /* 0xC0 */
+ 0x5E88, 0x5E8D, 0x5F05, 0x5F1D, 0x5F78, 0x5F76, 0x5FD2, 0x5FD1, /* 0xD0 */
+ 0x5FD0, 0x5FED, 0x5FE8, 0x5FEE, 0x5FF3, 0x5FE1, 0x5FE4, 0x5FE3, /* 0xD0 */
+ 0x5FFA, 0x5FEF, 0x5FF7, 0x5FFB, 0x6000, 0x5FF4, 0x623A, 0x6283, /* 0xE0 */
+ 0x628C, 0x628E, 0x628F, 0x6294, 0x6287, 0x6271, 0x627B, 0x627A, /* 0xE0 */
+ 0x6270, 0x6281, 0x6288, 0x6277, 0x627D, 0x6272, 0x6274, 0x6537, /* 0xF0 */
+ 0x65F0, 0x65F4, 0x65F3, 0x65F2, 0x65F5, 0x6745, 0x6747 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_CB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6759, 0x6755, 0x674C, 0x6748, 0x675D, 0x674D, 0x675A, 0x674B, /* 0x40 */
+ 0x6BD0, 0x6C19, 0x6C1A, 0x6C78, 0x6C67, 0x6C6B, 0x6C84, 0x6C8B, /* 0x40 */
+ 0x6C8F, 0x6C71, 0x6C6F, 0x6C69, 0x6C9A, 0x6C6D, 0x6C87, 0x6C95, /* 0x50 */
+ 0x6C9C, 0x6C66, 0x6C73, 0x6C65, 0x6C7B, 0x6C8E, 0x7074, 0x707A, /* 0x50 */
+ 0x7263, 0x72BF, 0x72BD, 0x72C3, 0x72C6, 0x72C1, 0x72BA, 0x72C5, /* 0x60 */
+ 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753A, 0x7539, 0x7594, /* 0x60 */
+ 0x7595, 0x7681, 0x793D, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, /* 0x70 */
+ 0x809C, 0x8290, 0x828F, 0x8285, 0x828E, 0x8291, 0x8293, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x828A, 0x8283, 0x8284, 0x8C78, 0x8FC9, 0x8FBF, 0x909F, /* 0xA0 */
+ 0x90A1, 0x90A5, 0x909E, 0x90A7, 0x90A0, 0x9630, 0x9628, 0x962F, /* 0xA0 */
+ 0x962D, 0x4E33, 0x4F98, 0x4F7C, 0x4F85, 0x4F7D, 0x4F80, 0x4F87, /* 0xB0 */
+ 0x4F76, 0x4F74, 0x4F89, 0x4F84, 0x4F77, 0x4F4C, 0x4F97, 0x4F6A, /* 0xB0 */
+ 0x4F9A, 0x4F79, 0x4F81, 0x4F78, 0x4F90, 0x4F9C, 0x4F94, 0x4F9E, /* 0xC0 */
+ 0x4F92, 0x4F82, 0x4F95, 0x4F6B, 0x4F6E, 0x519E, 0x51BC, 0x51BE, /* 0xC0 */
+ 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52BC, 0x530A, 0x530B, /* 0xD0 */
+ 0x533C, 0x5392, 0x5394, 0x5487, 0x547F, 0x5481, 0x5491, 0x5482, /* 0xD0 */
+ 0x5488, 0x546B, 0x547A, 0x547E, 0x5465, 0x546C, 0x5474, 0x5466, /* 0xE0 */
+ 0x548D, 0x546F, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, /* 0xE0 */
+ 0x56F7, 0x56F9, 0x576F, 0x5772, 0x576D, 0x576B, 0x5771, 0x5770, /* 0xF0 */
+ 0x5776, 0x5780, 0x5775, 0x577B, 0x5773, 0x5774, 0x5762 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_CC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5768, 0x577D, 0x590C, 0x5945, 0x59B5, 0x59BA, 0x59CF, 0x59CE, /* 0x40 */
+ 0x59B2, 0x59CC, 0x59C1, 0x59B6, 0x59BC, 0x59C3, 0x59D6, 0x59B1, /* 0x40 */
+ 0x59BD, 0x59C0, 0x59C8, 0x59B4, 0x59C7, 0x5B62, 0x5B65, 0x5B93, /* 0x50 */
+ 0x5B95, 0x5C44, 0x5C47, 0x5CAE, 0x5CA4, 0x5CA0, 0x5CB5, 0x5CAF, /* 0x50 */
+ 0x5CA8, 0x5CAC, 0x5C9F, 0x5CA3, 0x5CAD, 0x5CA2, 0x5CAA, 0x5CA7, /* 0x60 */
+ 0x5C9D, 0x5CA5, 0x5CB6, 0x5CB0, 0x5CA6, 0x5E17, 0x5E14, 0x5E19, /* 0x60 */
+ 0x5F28, 0x5F22, 0x5F23, 0x5F24, 0x5F54, 0x5F82, 0x5F7E, 0x5F7D, /* 0x70 */
+ 0x5FDE, 0x5FE5, 0x602D, 0x6026, 0x6019, 0x6032, 0x600B, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6034, 0x600A, 0x6017, 0x6033, 0x601A, 0x601E, 0x602C, /* 0xA0 */
+ 0x6022, 0x600D, 0x6010, 0x602E, 0x6013, 0x6011, 0x600C, 0x6009, /* 0xA0 */
+ 0x601C, 0x6214, 0x623D, 0x62AD, 0x62B4, 0x62D1, 0x62BE, 0x62AA, /* 0xB0 */
+ 0x62B6, 0x62CA, 0x62AE, 0x62B3, 0x62AF, 0x62BB, 0x62A9, 0x62B0, /* 0xB0 */
+ 0x62B8, 0x653D, 0x65A8, 0x65BB, 0x6609, 0x65FC, 0x6604, 0x6612, /* 0xC0 */
+ 0x6608, 0x65FB, 0x6603, 0x660B, 0x660D, 0x6605, 0x65FD, 0x6611, /* 0xC0 */
+ 0x6610, 0x66F6, 0x670A, 0x6785, 0x676C, 0x678E, 0x6792, 0x6776, /* 0xD0 */
+ 0x677B, 0x6798, 0x6786, 0x6784, 0x6774, 0x678D, 0x678C, 0x677A, /* 0xD0 */
+ 0x679F, 0x6791, 0x6799, 0x6783, 0x677D, 0x6781, 0x6778, 0x6779, /* 0xE0 */
+ 0x6794, 0x6B25, 0x6B80, 0x6B7E, 0x6BDE, 0x6C1D, 0x6C93, 0x6CEC, /* 0xE0 */
+ 0x6CEB, 0x6CEE, 0x6CD9, 0x6CB6, 0x6CD4, 0x6CAD, 0x6CE7, 0x6CB7, /* 0xF0 */
+ 0x6CD0, 0x6CC2, 0x6CBA, 0x6CC3, 0x6CC6, 0x6CED, 0x6CF2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_CD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6CD2, 0x6CDD, 0x6CB4, 0x6C8A, 0x6C9D, 0x6C80, 0x6CDE, 0x6CC0, /* 0x40 */
+ 0x6D30, 0x6CCD, 0x6CC7, 0x6CB0, 0x6CF9, 0x6CCF, 0x6CE9, 0x6CD1, /* 0x40 */
+ 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, /* 0x50 */
+ 0x7082, 0x709A, 0x7083, 0x726A, 0x72D6, 0x72CB, 0x72D8, 0x72C9, /* 0x50 */
+ 0x72DC, 0x72D2, 0x72D4, 0x72DA, 0x72CC, 0x72D1, 0x73A4, 0x73A1, /* 0x60 */
+ 0x73AD, 0x73A6, 0x73A2, 0x73A0, 0x73AC, 0x739D, 0x74DD, 0x74E8, /* 0x60 */
+ 0x753F, 0x7540, 0x753E, 0x758C, 0x7598, 0x76AF, 0x76F3, 0x76F1, /* 0x70 */
+ 0x76F0, 0x76F5, 0x77F8, 0x77FC, 0x77F9, 0x77FB, 0x77FA, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x77F7, 0x7942, 0x793F, 0x79C5, 0x7A78, 0x7A7B, 0x7AFB, /* 0xA0 */
+ 0x7C75, 0x7CFD, 0x8035, 0x808F, 0x80AE, 0x80A3, 0x80B8, 0x80B5, /* 0xA0 */
+ 0x80AD, 0x8220, 0x82A0, 0x82C0, 0x82AB, 0x829A, 0x8298, 0x829B, /* 0xB0 */
+ 0x82B5, 0x82A7, 0x82AE, 0x82BC, 0x829E, 0x82BA, 0x82B4, 0x82A8, /* 0xB0 */
+ 0x82A1, 0x82A9, 0x82C2, 0x82A4, 0x82C3, 0x82B6, 0x82A2, 0x8670, /* 0xC0 */
+ 0x866F, 0x866D, 0x866E, 0x8C56, 0x8FD2, 0x8FCB, 0x8FD3, 0x8FCD, /* 0xC0 */
+ 0x8FD6, 0x8FD5, 0x8FD7, 0x90B2, 0x90B4, 0x90AF, 0x90B3, 0x90B0, /* 0xD0 */
+ 0x9639, 0x963D, 0x963C, 0x963A, 0x9643, 0x4FCD, 0x4FC5, 0x4FD3, /* 0xD0 */
+ 0x4FB2, 0x4FC9, 0x4FCB, 0x4FC1, 0x4FD4, 0x4FDC, 0x4FD9, 0x4FBB, /* 0xE0 */
+ 0x4FB3, 0x4FDB, 0x4FC7, 0x4FD6, 0x4FBA, 0x4FC0, 0x4FB9, 0x4FEC, /* 0xE0 */
+ 0x5244, 0x5249, 0x52C0, 0x52C2, 0x533D, 0x537C, 0x5397, 0x5396, /* 0xF0 */
+ 0x5399, 0x5398, 0x54BA, 0x54A1, 0x54AD, 0x54A5, 0x54CF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_CE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x54C3, 0x830D, 0x54B7, 0x54AE, 0x54D6, 0x54B6, 0x54C5, 0x54C6, /* 0x40 */
+ 0x54A0, 0x5470, 0x54BC, 0x54A2, 0x54BE, 0x5472, 0x54DE, 0x54B0, /* 0x40 */
+ 0x57B5, 0x579E, 0x579F, 0x57A4, 0x578C, 0x5797, 0x579D, 0x579B, /* 0x50 */
+ 0x5794, 0x5798, 0x578F, 0x5799, 0x57A5, 0x579A, 0x5795, 0x58F4, /* 0x50 */
+ 0x590D, 0x5953, 0x59E1, 0x59DE, 0x59EE, 0x5A00, 0x59F1, 0x59DD, /* 0x60 */
+ 0x59FA, 0x59FD, 0x59FC, 0x59F6, 0x59E4, 0x59F2, 0x59F7, 0x59DB, /* 0x60 */
+ 0x59E9, 0x59F3, 0x59F5, 0x59E0, 0x59FE, 0x59F4, 0x59ED, 0x5BA8, /* 0x70 */
+ 0x5C4C, 0x5CD0, 0x5CD8, 0x5CCC, 0x5CD7, 0x5CCB, 0x5CDB, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5CDE, 0x5CDA, 0x5CC9, 0x5CC7, 0x5CCA, 0x5CD6, 0x5CD3, /* 0xA0 */
+ 0x5CD4, 0x5CCF, 0x5CC8, 0x5CC6, 0x5CCE, 0x5CDF, 0x5CF8, 0x5DF9, /* 0xA0 */
+ 0x5E21, 0x5E22, 0x5E23, 0x5E20, 0x5E24, 0x5EB0, 0x5EA4, 0x5EA2, /* 0xB0 */
+ 0x5E9B, 0x5EA3, 0x5EA5, 0x5F07, 0x5F2E, 0x5F56, 0x5F86, 0x6037, /* 0xB0 */
+ 0x6039, 0x6054, 0x6072, 0x605E, 0x6045, 0x6053, 0x6047, 0x6049, /* 0xC0 */
+ 0x605B, 0x604C, 0x6040, 0x6042, 0x605F, 0x6024, 0x6044, 0x6058, /* 0xC0 */
+ 0x6066, 0x606E, 0x6242, 0x6243, 0x62CF, 0x630D, 0x630B, 0x62F5, /* 0xD0 */
+ 0x630E, 0x6303, 0x62EB, 0x62F9, 0x630F, 0x630C, 0x62F8, 0x62F6, /* 0xD0 */
+ 0x6300, 0x6313, 0x6314, 0x62FA, 0x6315, 0x62FB, 0x62F0, 0x6541, /* 0xE0 */
+ 0x6543, 0x65AA, 0x65BF, 0x6636, 0x6621, 0x6632, 0x6635, 0x661C, /* 0xE0 */
+ 0x6626, 0x6622, 0x6633, 0x662B, 0x663A, 0x661D, 0x6634, 0x6639, /* 0xF0 */
+ 0x662E, 0x670F, 0x6710, 0x67C1, 0x67F2, 0x67C8, 0x67BA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_CF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x67DC, 0x67BB, 0x67F8, 0x67D8, 0x67C0, 0x67B7, 0x67C5, 0x67EB, /* 0x40 */
+ 0x67E4, 0x67DF, 0x67B5, 0x67CD, 0x67B3, 0x67F7, 0x67F6, 0x67EE, /* 0x40 */
+ 0x67E3, 0x67C2, 0x67B9, 0x67CE, 0x67E7, 0x67F0, 0x67B2, 0x67FC, /* 0x50 */
+ 0x67C6, 0x67ED, 0x67CC, 0x67AE, 0x67E6, 0x67DB, 0x67FA, 0x67C9, /* 0x50 */
+ 0x67CA, 0x67C3, 0x67EA, 0x67CB, 0x6B28, 0x6B82, 0x6B84, 0x6BB6, /* 0x60 */
+ 0x6BD6, 0x6BD8, 0x6BE0, 0x6C20, 0x6C21, 0x6D28, 0x6D34, 0x6D2D, /* 0x60 */
+ 0x6D1F, 0x6D3C, 0x6D3F, 0x6D12, 0x6D0A, 0x6CDA, 0x6D33, 0x6D04, /* 0x70 */
+ 0x6D19, 0x6D3A, 0x6D1A, 0x6D11, 0x6D00, 0x6D1D, 0x6D42, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6D01, 0x6D18, 0x6D37, 0x6D03, 0x6D0F, 0x6D40, 0x6D07, /* 0xA0 */
+ 0x6D20, 0x6D2C, 0x6D08, 0x6D22, 0x6D09, 0x6D10, 0x70B7, 0x709F, /* 0xA0 */
+ 0x70BE, 0x70B1, 0x70B0, 0x70A1, 0x70B4, 0x70B5, 0x70A9, 0x7241, /* 0xB0 */
+ 0x7249, 0x724A, 0x726C, 0x7270, 0x7273, 0x726E, 0x72CA, 0x72E4, /* 0xB0 */
+ 0x72E8, 0x72EB, 0x72DF, 0x72EA, 0x72E6, 0x72E3, 0x7385, 0x73CC, /* 0xC0 */
+ 0x73C2, 0x73C8, 0x73C5, 0x73B9, 0x73B6, 0x73B5, 0x73B4, 0x73EB, /* 0xC0 */
+ 0x73BF, 0x73C7, 0x73BE, 0x73C3, 0x73C6, 0x73B8, 0x73CB, 0x74EC, /* 0xD0 */
+ 0x74EE, 0x752E, 0x7547, 0x7548, 0x75A7, 0x75AA, 0x7679, 0x76C4, /* 0xD0 */
+ 0x7708, 0x7703, 0x7704, 0x7705, 0x770A, 0x76F7, 0x76FB, 0x76FA, /* 0xE0 */
+ 0x77E7, 0x77E8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780F, /* 0xE0 */
+ 0x780E, 0x7809, 0x7803, 0x7813, 0x794A, 0x794C, 0x794B, 0x7945, /* 0xF0 */
+ 0x7944, 0x79D5, 0x79CD, 0x79CF, 0x79D6, 0x79CE, 0x7A80 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7A7E, 0x7AD1, 0x7B00, 0x7B01, 0x7C7A, 0x7C78, 0x7C79, 0x7C7F, /* 0x40 */
+ 0x7C80, 0x7C81, 0x7D03, 0x7D08, 0x7D01, 0x7F58, 0x7F91, 0x7F8D, /* 0x40 */
+ 0x7FBE, 0x8007, 0x800E, 0x800F, 0x8014, 0x8037, 0x80D8, 0x80C7, /* 0x50 */
+ 0x80E0, 0x80D1, 0x80C8, 0x80C2, 0x80D0, 0x80C5, 0x80E3, 0x80D9, /* 0x50 */
+ 0x80DC, 0x80CA, 0x80D5, 0x80C9, 0x80CF, 0x80D7, 0x80E6, 0x80CD, /* 0x60 */
+ 0x81FF, 0x8221, 0x8294, 0x82D9, 0x82FE, 0x82F9, 0x8307, 0x82E8, /* 0x60 */
+ 0x8300, 0x82D5, 0x833A, 0x82EB, 0x82D6, 0x82F4, 0x82EC, 0x82E1, /* 0x70 */
+ 0x82F2, 0x82F5, 0x830C, 0x82FB, 0x82F6, 0x82F0, 0x82EA, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x82E4, 0x82E0, 0x82FA, 0x82F3, 0x82ED, 0x8677, 0x8674, /* 0xA0 */
+ 0x867C, 0x8673, 0x8841, 0x884E, 0x8867, 0x886A, 0x8869, 0x89D3, /* 0xA0 */
+ 0x8A04, 0x8A07, 0x8D72, 0x8FE3, 0x8FE1, 0x8FEE, 0x8FE0, 0x90F1, /* 0xB0 */
+ 0x90BD, 0x90BF, 0x90D5, 0x90C5, 0x90BE, 0x90C7, 0x90CB, 0x90C8, /* 0xB0 */
+ 0x91D4, 0x91D3, 0x9654, 0x964F, 0x9651, 0x9653, 0x964A, 0x964E, /* 0xC0 */
+ 0x501E, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501B, 0x4FF5, /* 0xC0 */
+ 0x4FF4, 0x5033, 0x5037, 0x502C, 0x4FF6, 0x4FF7, 0x5017, 0x501C, /* 0xD0 */
+ 0x5020, 0x5027, 0x5035, 0x502F, 0x5031, 0x500E, 0x515A, 0x5194, /* 0xD0 */
+ 0x5193, 0x51CA, 0x51C4, 0x51C5, 0x51C8, 0x51CE, 0x5261, 0x525A, /* 0xE0 */
+ 0x5252, 0x525E, 0x525F, 0x5255, 0x5262, 0x52CD, 0x530E, 0x539E, /* 0xE0 */
+ 0x5526, 0x54E2, 0x5517, 0x5512, 0x54E7, 0x54F3, 0x54E4, 0x551A, /* 0xF0 */
+ 0x54FF, 0x5504, 0x5508, 0x54EB, 0x5511, 0x5505, 0x54F1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x550A, 0x54FB, 0x54F7, 0x54F8, 0x54E0, 0x550E, 0x5503, 0x550B, /* 0x40 */
+ 0x5701, 0x5702, 0x57CC, 0x5832, 0x57D5, 0x57D2, 0x57BA, 0x57C6, /* 0x40 */
+ 0x57BD, 0x57BC, 0x57B8, 0x57B6, 0x57BF, 0x57C7, 0x57D0, 0x57B9, /* 0x50 */
+ 0x57C1, 0x590E, 0x594A, 0x5A19, 0x5A16, 0x5A2D, 0x5A2E, 0x5A15, /* 0x50 */
+ 0x5A0F, 0x5A17, 0x5A0A, 0x5A1E, 0x5A33, 0x5B6C, 0x5BA7, 0x5BAD, /* 0x60 */
+ 0x5BAC, 0x5C03, 0x5C56, 0x5C54, 0x5CEC, 0x5CFF, 0x5CEE, 0x5CF1, /* 0x60 */
+ 0x5CF7, 0x5D00, 0x5CF9, 0x5E29, 0x5E28, 0x5EA8, 0x5EAE, 0x5EAA, /* 0x70 */
+ 0x5EAC, 0x5F33, 0x5F30, 0x5F67, 0x605D, 0x605A, 0x6067, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6041, 0x60A2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609D, /* 0xA0 */
+ 0x6083, 0x6095, 0x609B, 0x6097, 0x6087, 0x609C, 0x608E, 0x6219, /* 0xA0 */
+ 0x6246, 0x62F2, 0x6310, 0x6356, 0x632C, 0x6344, 0x6345, 0x6336, /* 0xB0 */
+ 0x6343, 0x63E4, 0x6339, 0x634B, 0x634A, 0x633C, 0x6329, 0x6341, /* 0xB0 */
+ 0x6334, 0x6358, 0x6354, 0x6359, 0x632D, 0x6347, 0x6333, 0x635A, /* 0xC0 */
+ 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654A, 0x6546, 0x65C6, /* 0xC0 */
+ 0x65C3, 0x65C4, 0x65C2, 0x664A, 0x665F, 0x6647, 0x6651, 0x6712, /* 0xD0 */
+ 0x6713, 0x681F, 0x681A, 0x6849, 0x6832, 0x6833, 0x683B, 0x684B, /* 0xD0 */
+ 0x684F, 0x6816, 0x6831, 0x681C, 0x6835, 0x682B, 0x682D, 0x682F, /* 0xE0 */
+ 0x684E, 0x6844, 0x6834, 0x681D, 0x6812, 0x6814, 0x6826, 0x6828, /* 0xE0 */
+ 0x682E, 0x684D, 0x683A, 0x6825, 0x6820, 0x6B2C, 0x6B2F, 0x6B2D, /* 0xF0 */
+ 0x6B31, 0x6B34, 0x6B6D, 0x8082, 0x6B88, 0x6BE6, 0x6BE4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6BE8, 0x6BE3, 0x6BE2, 0x6BE7, 0x6C25, 0x6D7A, 0x6D63, 0x6D64, /* 0x40 */
+ 0x6D76, 0x6D0D, 0x6D61, 0x6D92, 0x6D58, 0x6D62, 0x6D6D, 0x6D6F, /* 0x40 */
+ 0x6D91, 0x6D8D, 0x6DEF, 0x6D7F, 0x6D86, 0x6D5E, 0x6D67, 0x6D60, /* 0x50 */
+ 0x6D97, 0x6D70, 0x6D7C, 0x6D5F, 0x6D82, 0x6D98, 0x6D2F, 0x6D68, /* 0x50 */
+ 0x6D8B, 0x6D7E, 0x6D80, 0x6D84, 0x6D16, 0x6D83, 0x6D7B, 0x6D7D, /* 0x60 */
+ 0x6D75, 0x6D90, 0x70DC, 0x70D3, 0x70D1, 0x70DD, 0x70CB, 0x7F39, /* 0x60 */
+ 0x70E2, 0x70D7, 0x70D2, 0x70DE, 0x70E0, 0x70D4, 0x70CD, 0x70C5, /* 0x70 */
+ 0x70C6, 0x70C7, 0x70DA, 0x70CE, 0x70E1, 0x7242, 0x7278, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7277, 0x7276, 0x7300, 0x72FA, 0x72F4, 0x72FE, 0x72F6, /* 0xA0 */
+ 0x72F3, 0x72FB, 0x7301, 0x73D3, 0x73D9, 0x73E5, 0x73D6, 0x73BC, /* 0xA0 */
+ 0x73E7, 0x73E3, 0x73E9, 0x73DC, 0x73D2, 0x73DB, 0x73D4, 0x73DD, /* 0xB0 */
+ 0x73DA, 0x73D7, 0x73D8, 0x73E8, 0x74DE, 0x74DF, 0x74F4, 0x74F5, /* 0xB0 */
+ 0x7521, 0x755B, 0x755F, 0x75B0, 0x75C1, 0x75BB, 0x75C4, 0x75C0, /* 0xC0 */
+ 0x75BF, 0x75B6, 0x75BA, 0x768A, 0x76C9, 0x771D, 0x771B, 0x7710, /* 0xC0 */
+ 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771A, 0x7722, /* 0xD0 */
+ 0x7727, 0x7823, 0x782C, 0x7822, 0x7835, 0x782F, 0x7828, 0x782E, /* 0xD0 */
+ 0x782B, 0x7821, 0x7829, 0x7833, 0x782A, 0x7831, 0x7954, 0x795B, /* 0xE0 */
+ 0x794F, 0x795C, 0x7953, 0x7952, 0x7951, 0x79EB, 0x79EC, 0x79E0, /* 0xE0 */
+ 0x79EE, 0x79ED, 0x79EA, 0x79DC, 0x79DE, 0x79DD, 0x7A86, 0x7A89, /* 0xF0 */
+ 0x7A85, 0x7A8B, 0x7A8C, 0x7A8A, 0x7A87, 0x7AD8, 0x7B10 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7B04, 0x7B13, 0x7B05, 0x7B0F, 0x7B08, 0x7B0A, 0x7B0E, 0x7B09, /* 0x40 */
+ 0x7B12, 0x7C84, 0x7C91, 0x7C8A, 0x7C8C, 0x7C88, 0x7C8D, 0x7C85, /* 0x40 */
+ 0x7D1E, 0x7D1D, 0x7D11, 0x7D0E, 0x7D18, 0x7D16, 0x7D13, 0x7D1F, /* 0x50 */
+ 0x7D12, 0x7D0F, 0x7D0C, 0x7F5C, 0x7F61, 0x7F5E, 0x7F60, 0x7F5D, /* 0x50 */
+ 0x7F5B, 0x7F96, 0x7F92, 0x7FC3, 0x7FC2, 0x7FC0, 0x8016, 0x803E, /* 0x60 */
+ 0x8039, 0x80FA, 0x80F2, 0x80F9, 0x80F5, 0x8101, 0x80FB, 0x8100, /* 0x60 */
+ 0x8201, 0x822F, 0x8225, 0x8333, 0x832D, 0x8344, 0x8319, 0x8351, /* 0x70 */
+ 0x8325, 0x8356, 0x833F, 0x8341, 0x8326, 0x831C, 0x8322, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8342, 0x834E, 0x831B, 0x832A, 0x8308, 0x833C, 0x834D, /* 0xA0 */
+ 0x8316, 0x8324, 0x8320, 0x8337, 0x832F, 0x8329, 0x8347, 0x8345, /* 0xA0 */
+ 0x834C, 0x8353, 0x831E, 0x832C, 0x834B, 0x8327, 0x8348, 0x8653, /* 0xB0 */
+ 0x8652, 0x86A2, 0x86A8, 0x8696, 0x868D, 0x8691, 0x869E, 0x8687, /* 0xB0 */
+ 0x8697, 0x8686, 0x868B, 0x869A, 0x8685, 0x86A5, 0x8699, 0x86A1, /* 0xC0 */
+ 0x86A7, 0x8695, 0x8698, 0x868E, 0x869D, 0x8690, 0x8694, 0x8843, /* 0xC0 */
+ 0x8844, 0x886D, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887F, /* 0xD0 */
+ 0x886F, 0x8883, 0x887E, 0x8874, 0x887C, 0x8A12, 0x8C47, 0x8C57, /* 0xD0 */
+ 0x8C7B, 0x8CA4, 0x8CA3, 0x8D76, 0x8D78, 0x8DB5, 0x8DB7, 0x8DB6, /* 0xE0 */
+ 0x8ED1, 0x8ED3, 0x8FFE, 0x8FF5, 0x9002, 0x8FFF, 0x8FFB, 0x9004, /* 0xE0 */
+ 0x8FFC, 0x8FF6, 0x90D6, 0x90E0, 0x90D9, 0x90DA, 0x90E3, 0x90DF, /* 0xF0 */
+ 0x90E5, 0x90D8, 0x90DB, 0x90D7, 0x90DC, 0x90E4, 0x9150 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x914E, 0x914F, 0x91D5, 0x91E2, 0x91DA, 0x965C, 0x965F, 0x96BC, /* 0x40 */
+ 0x98E3, 0x9ADF, 0x9B2F, 0x4E7F, 0x5070, 0x506A, 0x5061, 0x505E, /* 0x40 */
+ 0x5060, 0x5053, 0x504B, 0x505D, 0x5072, 0x5048, 0x504D, 0x5041, /* 0x50 */
+ 0x505B, 0x504A, 0x5062, 0x5015, 0x5045, 0x505F, 0x5069, 0x506B, /* 0x50 */
+ 0x5063, 0x5064, 0x5046, 0x5040, 0x506E, 0x5073, 0x5057, 0x5051, /* 0x60 */
+ 0x51D0, 0x526B, 0x526D, 0x526C, 0x526E, 0x52D6, 0x52D3, 0x532D, /* 0x60 */
+ 0x539C, 0x5575, 0x5576, 0x553C, 0x554D, 0x5550, 0x5534, 0x552A, /* 0x70 */
+ 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x550C, 0x5532, 0x5565, 0x554E, 0x5539, 0x5548, 0x552D, /* 0xA0 */
+ 0x553B, 0x5540, 0x554B, 0x570A, 0x5707, 0x57FB, 0x5814, 0x57E2, /* 0xA0 */
+ 0x57F6, 0x57DC, 0x57F4, 0x5800, 0x57ED, 0x57FD, 0x5808, 0x57F8, /* 0xB0 */
+ 0x580B, 0x57F3, 0x57CF, 0x5807, 0x57EE, 0x57E3, 0x57F2, 0x57E5, /* 0xB0 */
+ 0x57EC, 0x57E1, 0x580E, 0x57FC, 0x5810, 0x57E7, 0x5801, 0x580C, /* 0xC0 */
+ 0x57F1, 0x57E9, 0x57F0, 0x580D, 0x5804, 0x595C, 0x5A60, 0x5A58, /* 0xC0 */
+ 0x5A55, 0x5A67, 0x5A5E, 0x5A38, 0x5A35, 0x5A6D, 0x5A50, 0x5A5F, /* 0xD0 */
+ 0x5A65, 0x5A6C, 0x5A53, 0x5A64, 0x5A57, 0x5A43, 0x5A5D, 0x5A52, /* 0xD0 */
+ 0x5A44, 0x5A5B, 0x5A48, 0x5A8E, 0x5A3E, 0x5A4D, 0x5A39, 0x5A4C, /* 0xE0 */
+ 0x5A70, 0x5A69, 0x5A47, 0x5A51, 0x5A56, 0x5A42, 0x5A5C, 0x5B72, /* 0xE0 */
+ 0x5B6E, 0x5BC1, 0x5BC0, 0x5C59, 0x5D1E, 0x5D0B, 0x5D1D, 0x5D1A, /* 0xF0 */
+ 0x5D20, 0x5D0C, 0x5D28, 0x5D0D, 0x5D26, 0x5D25, 0x5D0F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5D30, 0x5D12, 0x5D23, 0x5D1F, 0x5D2E, 0x5E3E, 0x5E34, 0x5EB1, /* 0x40 */
+ 0x5EB4, 0x5EB9, 0x5EB2, 0x5EB3, 0x5F36, 0x5F38, 0x5F9B, 0x5F96, /* 0x40 */
+ 0x5F9F, 0x608A, 0x6090, 0x6086, 0x60BE, 0x60B0, 0x60BA, 0x60D3, /* 0x50 */
+ 0x60D4, 0x60CF, 0x60E4, 0x60D9, 0x60DD, 0x60C8, 0x60B1, 0x60DB, /* 0x50 */
+ 0x60B7, 0x60CA, 0x60BF, 0x60C3, 0x60CD, 0x60C0, 0x6332, 0x6365, /* 0x60 */
+ 0x638A, 0x6382, 0x637D, 0x63BD, 0x639E, 0x63AD, 0x639D, 0x6397, /* 0x60 */
+ 0x63AB, 0x638E, 0x636F, 0x6387, 0x6390, 0x636E, 0x63AF, 0x6375, /* 0x70 */
+ 0x639C, 0x636D, 0x63AE, 0x637C, 0x63A4, 0x633B, 0x639F, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6378, 0x6385, 0x6381, 0x6391, 0x638D, 0x6370, 0x6553, /* 0xA0 */
+ 0x65CD, 0x6665, 0x6661, 0x665B, 0x6659, 0x665C, 0x6662, 0x6718, /* 0xA0 */
+ 0x6879, 0x6887, 0x6890, 0x689C, 0x686D, 0x686E, 0x68AE, 0x68AB, /* 0xB0 */
+ 0x6956, 0x686F, 0x68A3, 0x68AC, 0x68A9, 0x6875, 0x6874, 0x68B2, /* 0xB0 */
+ 0x688F, 0x6877, 0x6892, 0x687C, 0x686B, 0x6872, 0x68AA, 0x6880, /* 0xC0 */
+ 0x6871, 0x687E, 0x689B, 0x6896, 0x688B, 0x68A0, 0x6889, 0x68A4, /* 0xC0 */
+ 0x6878, 0x687B, 0x6891, 0x688C, 0x688A, 0x687D, 0x6B36, 0x6B33, /* 0xD0 */
+ 0x6B37, 0x6B38, 0x6B91, 0x6B8F, 0x6B8D, 0x6B8E, 0x6B8C, 0x6C2A, /* 0xD0 */
+ 0x6DC0, 0x6DAB, 0x6DB4, 0x6DB3, 0x6E74, 0x6DAC, 0x6DE9, 0x6DE2, /* 0xE0 */
+ 0x6DB7, 0x6DF6, 0x6DD4, 0x6E00, 0x6DC8, 0x6DE0, 0x6DDF, 0x6DD6, /* 0xE0 */
+ 0x6DBE, 0x6DE5, 0x6DDC, 0x6DDD, 0x6DDB, 0x6DF4, 0x6DCA, 0x6DBD, /* 0xF0 */
+ 0x6DED, 0x6DF0, 0x6DBA, 0x6DD5, 0x6DC2, 0x6DCF, 0x6DC9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6DD0, 0x6DF2, 0x6DD3, 0x6DFD, 0x6DD7, 0x6DCD, 0x6DE3, 0x6DBB, /* 0x40 */
+ 0x70FA, 0x710D, 0x70F7, 0x7117, 0x70F4, 0x710C, 0x70F0, 0x7104, /* 0x40 */
+ 0x70F3, 0x7110, 0x70FC, 0x70FF, 0x7106, 0x7113, 0x7100, 0x70F8, /* 0x50 */
+ 0x70F6, 0x710B, 0x7102, 0x710E, 0x727E, 0x727B, 0x727C, 0x727F, /* 0x50 */
+ 0x731D, 0x7317, 0x7307, 0x7311, 0x7318, 0x730A, 0x7308, 0x72FF, /* 0x60 */
+ 0x730F, 0x731E, 0x7388, 0x73F6, 0x73F8, 0x73F5, 0x7404, 0x7401, /* 0x60 */
+ 0x73FD, 0x7407, 0x7400, 0x73FA, 0x73FC, 0x73FF, 0x740C, 0x740B, /* 0x70 */
+ 0x73F4, 0x7408, 0x7564, 0x7563, 0x75CE, 0x75D2, 0x75CF, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x75CB, 0x75CC, 0x75D1, 0x75D0, 0x768F, 0x7689, 0x76D3, /* 0xA0 */
+ 0x7739, 0x772F, 0x772D, 0x7731, 0x7732, 0x7734, 0x7733, 0x773D, /* 0xA0 */
+ 0x7725, 0x773B, 0x7735, 0x7848, 0x7852, 0x7849, 0x784D, 0x784A, /* 0xB0 */
+ 0x784C, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796A, /* 0xB0 */
+ 0x7963, 0x796B, 0x7961, 0x79BB, 0x79FA, 0x79F8, 0x79F6, 0x79F7, /* 0xC0 */
+ 0x7A8F, 0x7A94, 0x7A90, 0x7B35, 0x7B47, 0x7B34, 0x7B25, 0x7B30, /* 0xC0 */
+ 0x7B22, 0x7B24, 0x7B33, 0x7B18, 0x7B2A, 0x7B1D, 0x7B31, 0x7B2B, /* 0xD0 */
+ 0x7B2D, 0x7B2F, 0x7B32, 0x7B38, 0x7B1A, 0x7B23, 0x7C94, 0x7C98, /* 0xD0 */
+ 0x7C96, 0x7CA3, 0x7D35, 0x7D3D, 0x7D38, 0x7D36, 0x7D3A, 0x7D45, /* 0xE0 */
+ 0x7D2C, 0x7D29, 0x7D41, 0x7D47, 0x7D3E, 0x7D3F, 0x7D4A, 0x7D3B, /* 0xE0 */
+ 0x7D28, 0x7F63, 0x7F95, 0x7F9C, 0x7F9D, 0x7F9B, 0x7FCA, 0x7FCB, /* 0xF0 */
+ 0x7FCD, 0x7FD0, 0x7FD1, 0x7FC7, 0x7FCF, 0x7FC9, 0x801F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x801E, 0x801B, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, /* 0x40 */
+ 0x811B, 0x812D, 0x811F, 0x812C, 0x811E, 0x8121, 0x8115, 0x8127, /* 0x40 */
+ 0x811D, 0x8122, 0x8211, 0x8238, 0x8233, 0x823A, 0x8234, 0x8232, /* 0x50 */
+ 0x8274, 0x8390, 0x83A3, 0x83A8, 0x838D, 0x837A, 0x8373, 0x83A4, /* 0x50 */
+ 0x8374, 0x838F, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83A9, /* 0x60 */
+ 0x837D, 0x8383, 0x838C, 0x839D, 0x839B, 0x83AA, 0x838B, 0x837E, /* 0x60 */
+ 0x83A5, 0x83AF, 0x8388, 0x8397, 0x83B0, 0x837F, 0x83A6, 0x8387, /* 0x70 */
+ 0x83AE, 0x8376, 0x839A, 0x8659, 0x8656, 0x86BF, 0x86B7, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x86C2, 0x86C1, 0x86C5, 0x86BA, 0x86B0, 0x86C8, 0x86B9, /* 0xA0 */
+ 0x86B3, 0x86B8, 0x86CC, 0x86B4, 0x86BB, 0x86BC, 0x86C3, 0x86BD, /* 0xA0 */
+ 0x86BE, 0x8852, 0x8889, 0x8895, 0x88A8, 0x88A2, 0x88AA, 0x889A, /* 0xB0 */
+ 0x8891, 0x88A1, 0x889F, 0x8898, 0x88A7, 0x8899, 0x889B, 0x8897, /* 0xB0 */
+ 0x88A4, 0x88AC, 0x888C, 0x8893, 0x888E, 0x8982, 0x89D6, 0x89D9, /* 0xC0 */
+ 0x89D5, 0x8A30, 0x8A27, 0x8A2C, 0x8A1E, 0x8C39, 0x8C3B, 0x8C5C, /* 0xC0 */
+ 0x8C5D, 0x8C7D, 0x8CA5, 0x8D7D, 0x8D7B, 0x8D79, 0x8DBC, 0x8DC2, /* 0xD0 */
+ 0x8DB9, 0x8DBF, 0x8DC1, 0x8ED8, 0x8EDE, 0x8EDD, 0x8EDC, 0x8ED7, /* 0xD0 */
+ 0x8EE0, 0x8EE1, 0x9024, 0x900B, 0x9011, 0x901C, 0x900C, 0x9021, /* 0xE0 */
+ 0x90EF, 0x90EA, 0x90F0, 0x90F4, 0x90F2, 0x90F3, 0x90D4, 0x90EB, /* 0xE0 */
+ 0x90EC, 0x90E9, 0x9156, 0x9158, 0x915A, 0x9153, 0x9155, 0x91EC, /* 0xF0 */
+ 0x91F4, 0x91F1, 0x91F3, 0x91F8, 0x91E4, 0x91F9, 0x91EA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x91EB, 0x91F7, 0x91E8, 0x91EE, 0x957A, 0x9586, 0x9588, 0x967C, /* 0x40 */
+ 0x966D, 0x966B, 0x9671, 0x966F, 0x96BF, 0x976A, 0x9804, 0x98E5, /* 0x40 */
+ 0x9997, 0x509B, 0x5095, 0x5094, 0x509E, 0x508B, 0x50A3, 0x5083, /* 0x50 */
+ 0x508C, 0x508E, 0x509D, 0x5068, 0x509C, 0x5092, 0x5082, 0x5087, /* 0x50 */
+ 0x515F, 0x51D4, 0x5312, 0x5311, 0x53A4, 0x53A7, 0x5591, 0x55A8, /* 0x60 */
+ 0x55A5, 0x55AD, 0x5577, 0x5645, 0x55A2, 0x5593, 0x5588, 0x558F, /* 0x60 */
+ 0x55B5, 0x5581, 0x55A3, 0x5592, 0x55A4, 0x557D, 0x558C, 0x55A6, /* 0x70 */
+ 0x557F, 0x5595, 0x55A1, 0x558E, 0x570C, 0x5829, 0x5837, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5819, 0x581E, 0x5827, 0x5823, 0x5828, 0x57F5, 0x5848, /* 0xA0 */
+ 0x5825, 0x581C, 0x581B, 0x5833, 0x583F, 0x5836, 0x582E, 0x5839, /* 0xA0 */
+ 0x5838, 0x582D, 0x582C, 0x583B, 0x5961, 0x5AAF, 0x5A94, 0x5A9F, /* 0xB0 */
+ 0x5A7A, 0x5AA2, 0x5A9E, 0x5A78, 0x5AA6, 0x5A7C, 0x5AA5, 0x5AAC, /* 0xB0 */
+ 0x5A95, 0x5AAE, 0x5A37, 0x5A84, 0x5A8A, 0x5A97, 0x5A83, 0x5A8B, /* 0xC0 */
+ 0x5AA9, 0x5A7B, 0x5A7D, 0x5A8C, 0x5A9C, 0x5A8F, 0x5A93, 0x5A9D, /* 0xC0 */
+ 0x5BEA, 0x5BCD, 0x5BCB, 0x5BD4, 0x5BD1, 0x5BCA, 0x5BCE, 0x5C0C, /* 0xD0 */
+ 0x5C30, 0x5D37, 0x5D43, 0x5D6B, 0x5D41, 0x5D4B, 0x5D3F, 0x5D35, /* 0xD0 */
+ 0x5D51, 0x5D4E, 0x5D55, 0x5D33, 0x5D3A, 0x5D52, 0x5D3D, 0x5D31, /* 0xE0 */
+ 0x5D59, 0x5D42, 0x5D39, 0x5D49, 0x5D38, 0x5D3C, 0x5D32, 0x5D36, /* 0xE0 */
+ 0x5D40, 0x5D45, 0x5E44, 0x5E41, 0x5F58, 0x5FA6, 0x5FA5, 0x5FAB, /* 0xF0 */
+ 0x60C9, 0x60B9, 0x60CC, 0x60E2, 0x60CE, 0x60C4, 0x6114 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_D9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x60F2, 0x610A, 0x6116, 0x6105, 0x60F5, 0x6113, 0x60F8, 0x60FC, /* 0x40 */
+ 0x60FE, 0x60C1, 0x6103, 0x6118, 0x611D, 0x6110, 0x60FF, 0x6104, /* 0x40 */
+ 0x610B, 0x624A, 0x6394, 0x63B1, 0x63B0, 0x63CE, 0x63E5, 0x63E8, /* 0x50 */
+ 0x63EF, 0x63C3, 0x649D, 0x63F3, 0x63CA, 0x63E0, 0x63F6, 0x63D5, /* 0x50 */
+ 0x63F2, 0x63F5, 0x6461, 0x63DF, 0x63BE, 0x63DD, 0x63DC, 0x63C4, /* 0x60 */
+ 0x63D8, 0x63D3, 0x63C2, 0x63C7, 0x63CC, 0x63CB, 0x63C8, 0x63F0, /* 0x60 */
+ 0x63D7, 0x63D9, 0x6532, 0x6567, 0x656A, 0x6564, 0x655C, 0x6568, /* 0x70 */
+ 0x6565, 0x658C, 0x659D, 0x659E, 0x65AE, 0x65D0, 0x65D2, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x667C, 0x666C, 0x667B, 0x6680, 0x6671, 0x6679, 0x666A, /* 0xA0 */
+ 0x6672, 0x6701, 0x690C, 0x68D3, 0x6904, 0x68DC, 0x692A, 0x68EC, /* 0xA0 */
+ 0x68EA, 0x68F1, 0x690F, 0x68D6, 0x68F7, 0x68EB, 0x68E4, 0x68F6, /* 0xB0 */
+ 0x6913, 0x6910, 0x68F3, 0x68E1, 0x6907, 0x68CC, 0x6908, 0x6970, /* 0xB0 */
+ 0x68B4, 0x6911, 0x68EF, 0x68C6, 0x6914, 0x68F8, 0x68D0, 0x68FD, /* 0xC0 */
+ 0x68FC, 0x68E8, 0x690B, 0x690A, 0x6917, 0x68CE, 0x68C8, 0x68DD, /* 0xC0 */
+ 0x68DE, 0x68E6, 0x68F4, 0x68D1, 0x6906, 0x68D4, 0x68E9, 0x6915, /* 0xD0 */
+ 0x6925, 0x68C7, 0x6B39, 0x6B3B, 0x6B3F, 0x6B3C, 0x6B94, 0x6B97, /* 0xD0 */
+ 0x6B99, 0x6B95, 0x6BBD, 0x6BF0, 0x6BF2, 0x6BF3, 0x6C30, 0x6DFC, /* 0xE0 */
+ 0x6E46, 0x6E47, 0x6E1F, 0x6E49, 0x6E88, 0x6E3C, 0x6E3D, 0x6E45, /* 0xE0 */
+ 0x6E62, 0x6E2B, 0x6E3F, 0x6E41, 0x6E5D, 0x6E73, 0x6E1C, 0x6E33, /* 0xF0 */
+ 0x6E4B, 0x6E40, 0x6E51, 0x6E3B, 0x6E03, 0x6E2E, 0x6E5E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_DA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6E68, 0x6E5C, 0x6E61, 0x6E31, 0x6E28, 0x6E60, 0x6E71, 0x6E6B, /* 0x40 */
+ 0x6E39, 0x6E22, 0x6E30, 0x6E53, 0x6E65, 0x6E27, 0x6E78, 0x6E64, /* 0x40 */
+ 0x6E77, 0x6E55, 0x6E79, 0x6E52, 0x6E66, 0x6E35, 0x6E36, 0x6E5A, /* 0x50 */
+ 0x7120, 0x711E, 0x712F, 0x70FB, 0x712E, 0x7131, 0x7123, 0x7125, /* 0x50 */
+ 0x7122, 0x7132, 0x711F, 0x7128, 0x713A, 0x711B, 0x724B, 0x725A, /* 0x60 */
+ 0x7288, 0x7289, 0x7286, 0x7285, 0x728B, 0x7312, 0x730B, 0x7330, /* 0x60 */
+ 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732D, 0x7326, 0x7323, /* 0x70 */
+ 0x7335, 0x730C, 0x742E, 0x742C, 0x7430, 0x742B, 0x7416, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x741A, 0x7421, 0x742D, 0x7431, 0x7424, 0x7423, 0x741D, /* 0xA0 */
+ 0x7429, 0x7420, 0x7432, 0x74FB, 0x752F, 0x756F, 0x756C, 0x75E7, /* 0xA0 */
+ 0x75DA, 0x75E1, 0x75E6, 0x75DD, 0x75DF, 0x75E4, 0x75D7, 0x7695, /* 0xB0 */
+ 0x7692, 0x76DA, 0x7746, 0x7747, 0x7744, 0x774D, 0x7745, 0x774A, /* 0xB0 */
+ 0x774E, 0x774B, 0x774C, 0x77DE, 0x77EC, 0x7860, 0x7864, 0x7865, /* 0xC0 */
+ 0x785C, 0x786D, 0x7871, 0x786A, 0x786E, 0x7870, 0x7869, 0x7868, /* 0xC0 */
+ 0x785E, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7A02, 0x7A0A, /* 0xD0 */
+ 0x7A03, 0x7A0C, 0x7A04, 0x7A99, 0x7AE6, 0x7AE4, 0x7B4A, 0x7B3B, /* 0xD0 */
+ 0x7B44, 0x7B48, 0x7B4C, 0x7B4E, 0x7B40, 0x7B58, 0x7B45, 0x7CA2, /* 0xE0 */
+ 0x7C9E, 0x7CA8, 0x7CA1, 0x7D58, 0x7D6F, 0x7D63, 0x7D53, 0x7D56, /* 0xE0 */
+ 0x7D67, 0x7D6A, 0x7D4F, 0x7D6D, 0x7D5C, 0x7D6B, 0x7D52, 0x7D54, /* 0xF0 */
+ 0x7D69, 0x7D51, 0x7D5F, 0x7D4E, 0x7F3E, 0x7F3F, 0x7F65 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_DB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7F66, 0x7FA2, 0x7FA0, 0x7FA1, 0x7FD7, 0x8051, 0x804F, 0x8050, /* 0x40 */
+ 0x80FE, 0x80D4, 0x8143, 0x814A, 0x8152, 0x814F, 0x8147, 0x813D, /* 0x40 */
+ 0x814D, 0x813A, 0x81E6, 0x81EE, 0x81F7, 0x81F8, 0x81F9, 0x8204, /* 0x50 */
+ 0x823C, 0x823D, 0x823F, 0x8275, 0x833B, 0x83CF, 0x83F9, 0x8423, /* 0x50 */
+ 0x83C0, 0x83E8, 0x8412, 0x83E7, 0x83E4, 0x83FC, 0x83F6, 0x8410, /* 0x60 */
+ 0x83C6, 0x83C8, 0x83EB, 0x83E3, 0x83BF, 0x8401, 0x83DD, 0x83E5, /* 0x60 */
+ 0x83D8, 0x83FF, 0x83E1, 0x83CB, 0x83CE, 0x83D6, 0x83F5, 0x83C9, /* 0x70 */
+ 0x8409, 0x840F, 0x83DE, 0x8411, 0x8406, 0x83C2, 0x83F3, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x83D5, 0x83FA, 0x83C7, 0x83D1, 0x83EA, 0x8413, 0x83C3, /* 0xA0 */
+ 0x83EC, 0x83EE, 0x83C4, 0x83FB, 0x83D7, 0x83E2, 0x841B, 0x83DB, /* 0xA0 */
+ 0x83FE, 0x86D8, 0x86E2, 0x86E6, 0x86D3, 0x86E3, 0x86DA, 0x86EA, /* 0xB0 */
+ 0x86DD, 0x86EB, 0x86DC, 0x86EC, 0x86E9, 0x86D7, 0x86E8, 0x86D1, /* 0xB0 */
+ 0x8848, 0x8856, 0x8855, 0x88BA, 0x88D7, 0x88B9, 0x88B8, 0x88C0, /* 0xC0 */
+ 0x88BE, 0x88B6, 0x88BC, 0x88B7, 0x88BD, 0x88B2, 0x8901, 0x88C9, /* 0xC0 */
+ 0x8995, 0x8998, 0x8997, 0x89DD, 0x89DA, 0x89DB, 0x8A4E, 0x8A4D, /* 0xD0 */
+ 0x8A39, 0x8A59, 0x8A40, 0x8A57, 0x8A58, 0x8A44, 0x8A45, 0x8A52, /* 0xD0 */
+ 0x8A48, 0x8A51, 0x8A4A, 0x8A4C, 0x8A4F, 0x8C5F, 0x8C81, 0x8C80, /* 0xE0 */
+ 0x8CBA, 0x8CBE, 0x8CB0, 0x8CB9, 0x8CB5, 0x8D84, 0x8D80, 0x8D89, /* 0xE0 */
+ 0x8DD8, 0x8DD3, 0x8DCD, 0x8DC7, 0x8DD6, 0x8DDC, 0x8DCF, 0x8DD5, /* 0xF0 */
+ 0x8DD9, 0x8DC8, 0x8DD7, 0x8DC5, 0x8EEF, 0x8EF7, 0x8EFA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_DC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8EF9, 0x8EE6, 0x8EEE, 0x8EE5, 0x8EF5, 0x8EE7, 0x8EE8, 0x8EF6, /* 0x40 */
+ 0x8EEB, 0x8EF1, 0x8EEC, 0x8EF4, 0x8EE9, 0x902D, 0x9034, 0x902F, /* 0x40 */
+ 0x9106, 0x912C, 0x9104, 0x90FF, 0x90FC, 0x9108, 0x90F9, 0x90FB, /* 0x50 */
+ 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915F, /* 0x50 */
+ 0x9162, 0x9160, 0x9201, 0x920A, 0x9225, 0x9203, 0x921A, 0x9226, /* 0x60 */
+ 0x920F, 0x920C, 0x9200, 0x9212, 0x91FF, 0x91FD, 0x9206, 0x9204, /* 0x60 */
+ 0x9227, 0x9202, 0x921C, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, /* 0x70 */
+ 0x957B, 0x958D, 0x958C, 0x9590, 0x9687, 0x967E, 0x9688, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9689, 0x9683, 0x9680, 0x96C2, 0x96C8, 0x96C3, 0x96F1, /* 0xA0 */
+ 0x96F0, 0x976C, 0x9770, 0x976E, 0x9807, 0x98A9, 0x98EB, 0x9CE6, /* 0xA0 */
+ 0x9EF9, 0x4E83, 0x4E84, 0x4EB6, 0x50BD, 0x50BF, 0x50C6, 0x50AE, /* 0xB0 */
+ 0x50C4, 0x50CA, 0x50B4, 0x50C8, 0x50C2, 0x50B0, 0x50C1, 0x50BA, /* 0xB0 */
+ 0x50B1, 0x50CB, 0x50C9, 0x50B6, 0x50B8, 0x51D7, 0x527A, 0x5278, /* 0xC0 */
+ 0x527B, 0x527C, 0x55C3, 0x55DB, 0x55CC, 0x55D0, 0x55CB, 0x55CA, /* 0xC0 */
+ 0x55DD, 0x55C0, 0x55D4, 0x55C4, 0x55E9, 0x55BF, 0x55D2, 0x558D, /* 0xD0 */
+ 0x55CF, 0x55D5, 0x55E2, 0x55D6, 0x55C8, 0x55F2, 0x55CD, 0x55D9, /* 0xD0 */
+ 0x55C2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584F, 0x584D, 0x5849, /* 0xE0 */
+ 0x586F, 0x5855, 0x584E, 0x585D, 0x5859, 0x5865, 0x585B, 0x583D, /* 0xE0 */
+ 0x5863, 0x5871, 0x58FC, 0x5AC7, 0x5AC4, 0x5ACB, 0x5ABA, 0x5AB8, /* 0xF0 */
+ 0x5AB1, 0x5AB5, 0x5AB0, 0x5ABF, 0x5AC8, 0x5ABB, 0x5AC6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_DD[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5AB7, 0x5AC0, 0x5ACA, 0x5AB4, 0x5AB6, 0x5ACD, 0x5AB9, 0x5A90, /* 0x40 */
+ 0x5BD6, 0x5BD8, 0x5BD9, 0x5C1F, 0x5C33, 0x5D71, 0x5D63, 0x5D4A, /* 0x40 */
+ 0x5D65, 0x5D72, 0x5D6C, 0x5D5E, 0x5D68, 0x5D67, 0x5D62, 0x5DF0, /* 0x50 */
+ 0x5E4F, 0x5E4E, 0x5E4A, 0x5E4D, 0x5E4B, 0x5EC5, 0x5ECC, 0x5EC6, /* 0x50 */
+ 0x5ECB, 0x5EC7, 0x5F40, 0x5FAF, 0x5FAD, 0x60F7, 0x6149, 0x614A, /* 0x60 */
+ 0x612B, 0x6145, 0x6136, 0x6132, 0x612E, 0x6146, 0x612F, 0x614F, /* 0x60 */
+ 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63C5, /* 0x70 */
+ 0x63F1, 0x63EB, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6433, 0x6443, 0x641F, 0x6415, 0x6418, 0x6439, 0x6437, /* 0xA0 */
+ 0x6422, 0x6423, 0x640C, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, /* 0xA0 */
+ 0x642F, 0x640A, 0x641A, 0x6440, 0x6425, 0x6427, 0x640B, 0x63E7, /* 0xB0 */
+ 0x641B, 0x642E, 0x6421, 0x640E, 0x656F, 0x6592, 0x65D3, 0x6686, /* 0xB0 */
+ 0x668C, 0x6695, 0x6690, 0x668B, 0x668A, 0x6699, 0x6694, 0x6678, /* 0xC0 */
+ 0x6720, 0x6966, 0x695F, 0x6938, 0x694E, 0x6962, 0x6971, 0x693F, /* 0xC0 */
+ 0x6945, 0x696A, 0x6939, 0x6942, 0x6957, 0x6959, 0x697A, 0x6948, /* 0xD0 */
+ 0x6949, 0x6935, 0x696C, 0x6933, 0x693D, 0x6965, 0x68F0, 0x6978, /* 0xD0 */
+ 0x6934, 0x6969, 0x6940, 0x696F, 0x6944, 0x6976, 0x6958, 0x6941, /* 0xE0 */
+ 0x6974, 0x694C, 0x693B, 0x694B, 0x6937, 0x695C, 0x694F, 0x6951, /* 0xE0 */
+ 0x6932, 0x6952, 0x692F, 0x697B, 0x693C, 0x6B46, 0x6B45, 0x6B43, /* 0xF0 */
+ 0x6B42, 0x6B48, 0x6B41, 0x6B9B, 0xFA0D, 0x6BFB, 0x6BFC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_DE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6BF9, 0x6BF7, 0x6BF8, 0x6E9B, 0x6ED6, 0x6EC8, 0x6E8F, 0x6EC0, /* 0x40 */
+ 0x6E9F, 0x6E93, 0x6E94, 0x6EA0, 0x6EB1, 0x6EB9, 0x6EC6, 0x6ED2, /* 0x40 */
+ 0x6EBD, 0x6EC1, 0x6E9E, 0x6EC9, 0x6EB7, 0x6EB0, 0x6ECD, 0x6EA6, /* 0x50 */
+ 0x6ECF, 0x6EB2, 0x6EBE, 0x6EC3, 0x6EDC, 0x6ED8, 0x6E99, 0x6E92, /* 0x50 */
+ 0x6E8E, 0x6E8D, 0x6EA4, 0x6EA1, 0x6EBF, 0x6EB3, 0x6ED0, 0x6ECA, /* 0x60 */
+ 0x6E97, 0x6EAE, 0x6EA3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, /* 0x60 */
+ 0x7141, 0x715D, 0x7162, 0x7172, 0x7178, 0x716A, 0x7161, 0x7142, /* 0x70 */
+ 0x7158, 0x7143, 0x714B, 0x7170, 0x715F, 0x7150, 0x7153, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7144, 0x714D, 0x715A, 0x724F, 0x728D, 0x728C, 0x7291, /* 0xA0 */
+ 0x7290, 0x728E, 0x733C, 0x7342, 0x733B, 0x733A, 0x7340, 0x734A, /* 0xA0 */
+ 0x7349, 0x7444, 0x744A, 0x744B, 0x7452, 0x7451, 0x7457, 0x7440, /* 0xB0 */
+ 0x744F, 0x7450, 0x744E, 0x7442, 0x7446, 0x744D, 0x7454, 0x74E1, /* 0xB0 */
+ 0x74FF, 0x74FE, 0x74FD, 0x751D, 0x7579, 0x7577, 0x6983, 0x75EF, /* 0xC0 */
+ 0x760F, 0x7603, 0x75F7, 0x75FE, 0x75FC, 0x75F9, 0x75F8, 0x7610, /* 0xC0 */
+ 0x75FB, 0x75F6, 0x75ED, 0x75F5, 0x75FD, 0x7699, 0x76B5, 0x76DD, /* 0xD0 */
+ 0x7755, 0x775F, 0x7760, 0x7752, 0x7756, 0x775A, 0x7769, 0x7767, /* 0xD0 */
+ 0x7754, 0x7759, 0x776D, 0x77E0, 0x7887, 0x789A, 0x7894, 0x788F, /* 0xE0 */
+ 0x7884, 0x7895, 0x7885, 0x7886, 0x78A1, 0x7883, 0x7879, 0x7899, /* 0xE0 */
+ 0x7880, 0x7896, 0x787B, 0x797C, 0x7982, 0x797D, 0x7979, 0x7A11, /* 0xF0 */
+ 0x7A18, 0x7A19, 0x7A12, 0x7A17, 0x7A15, 0x7A22, 0x7A13 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_DF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7A1B, 0x7A10, 0x7AA3, 0x7AA2, 0x7A9E, 0x7AEB, 0x7B66, 0x7B64, /* 0x40 */
+ 0x7B6D, 0x7B74, 0x7B69, 0x7B72, 0x7B65, 0x7B73, 0x7B71, 0x7B70, /* 0x40 */
+ 0x7B61, 0x7B78, 0x7B76, 0x7B63, 0x7CB2, 0x7CB4, 0x7CAF, 0x7D88, /* 0x50 */
+ 0x7D86, 0x7D80, 0x7D8D, 0x7D7F, 0x7D85, 0x7D7A, 0x7D8E, 0x7D7B, /* 0x50 */
+ 0x7D83, 0x7D7C, 0x7D8C, 0x7D94, 0x7D84, 0x7D7D, 0x7D92, 0x7F6D, /* 0x60 */
+ 0x7F6B, 0x7F67, 0x7F68, 0x7F6C, 0x7FA6, 0x7FA5, 0x7FA7, 0x7FDB, /* 0x60 */
+ 0x7FDC, 0x8021, 0x8164, 0x8160, 0x8177, 0x815C, 0x8169, 0x815B, /* 0x70 */
+ 0x8162, 0x8172, 0x6721, 0x815E, 0x8176, 0x8167, 0x816F, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8144, 0x8161, 0x821D, 0x8249, 0x8244, 0x8240, 0x8242, /* 0xA0 */
+ 0x8245, 0x84F1, 0x843F, 0x8456, 0x8476, 0x8479, 0x848F, 0x848D, /* 0xA0 */
+ 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844D, 0x847D, /* 0xB0 */
+ 0x845A, 0x8459, 0x8474, 0x8473, 0x845D, 0x8507, 0x845E, 0x8437, /* 0xB0 */
+ 0x843A, 0x8434, 0x847A, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, /* 0xC0 */
+ 0x83D9, 0x844B, 0x842F, 0x8442, 0x842D, 0x845F, 0x8470, 0x8439, /* 0xC0 */
+ 0x844E, 0x844C, 0x8452, 0x846F, 0x84C5, 0x848E, 0x843B, 0x8447, /* 0xD0 */
+ 0x8436, 0x8433, 0x8468, 0x847E, 0x8444, 0x842B, 0x8460, 0x8454, /* 0xD0 */
+ 0x846E, 0x8450, 0x870B, 0x8704, 0x86F7, 0x870C, 0x86FA, 0x86D6, /* 0xE0 */
+ 0x86F5, 0x874D, 0x86F8, 0x870E, 0x8709, 0x8701, 0x86F6, 0x870D, /* 0xE0 */
+ 0x8705, 0x88D6, 0x88CB, 0x88CD, 0x88CE, 0x88DE, 0x88DB, 0x88DA, /* 0xF0 */
+ 0x88CC, 0x88D0, 0x8985, 0x899B, 0x89DF, 0x89E5, 0x89E4 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x89E1, 0x89E0, 0x89E2, 0x89DC, 0x89E6, 0x8A76, 0x8A86, 0x8A7F, /* 0x40 */
+ 0x8A61, 0x8A3F, 0x8A77, 0x8A82, 0x8A84, 0x8A75, 0x8A83, 0x8A81, /* 0x40 */
+ 0x8A74, 0x8A7A, 0x8C3C, 0x8C4B, 0x8C4A, 0x8C65, 0x8C64, 0x8C66, /* 0x50 */
+ 0x8C86, 0x8C84, 0x8C85, 0x8CCC, 0x8D68, 0x8D69, 0x8D91, 0x8D8C, /* 0x50 */
+ 0x8D8E, 0x8D8F, 0x8D8D, 0x8D93, 0x8D94, 0x8D90, 0x8D92, 0x8DF0, /* 0x60 */
+ 0x8DE0, 0x8DEC, 0x8DF1, 0x8DEE, 0x8DD0, 0x8DE9, 0x8DE3, 0x8DE2, /* 0x60 */
+ 0x8DE7, 0x8DF2, 0x8DEB, 0x8DF4, 0x8F06, 0x8EFF, 0x8F01, 0x8F00, /* 0x70 */
+ 0x8F05, 0x8F07, 0x8F08, 0x8F02, 0x8F0B, 0x9052, 0x903F, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9044, 0x9049, 0x903D, 0x9110, 0x910D, 0x910F, 0x9111, /* 0xA0 */
+ 0x9116, 0x9114, 0x910B, 0x910E, 0x916E, 0x916F, 0x9248, 0x9252, /* 0xA0 */
+ 0x9230, 0x923A, 0x9266, 0x9233, 0x9265, 0x925E, 0x9283, 0x922E, /* 0xB0 */
+ 0x924A, 0x9246, 0x926D, 0x926C, 0x924F, 0x9260, 0x9267, 0x926F, /* 0xB0 */
+ 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, /* 0xC0 */
+ 0x924E, 0x9253, 0x924C, 0x9256, 0x9232, 0x959F, 0x959C, 0x959E, /* 0xC0 */
+ 0x959B, 0x9692, 0x9693, 0x9691, 0x9697, 0x96CE, 0x96FA, 0x96FD, /* 0xD0 */
+ 0x96F8, 0x96F5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980F, 0x980D, /* 0xD0 */
+ 0x980E, 0x98AC, 0x98F6, 0x98F9, 0x99AF, 0x99B2, 0x99B0, 0x99B5, /* 0xE0 */
+ 0x9AAD, 0x9AAB, 0x9B5B, 0x9CEA, 0x9CED, 0x9CE7, 0x9E80, 0x9EFD, /* 0xE0 */
+ 0x50E6, 0x50D4, 0x50D7, 0x50E8, 0x50F3, 0x50DB, 0x50EA, 0x50DD, /* 0xF0 */
+ 0x50E4, 0x50D3, 0x50EC, 0x50F0, 0x50EF, 0x50E3, 0x50E0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x51D8, 0x5280, 0x5281, 0x52E9, 0x52EB, 0x5330, 0x53AC, 0x5627, /* 0x40 */
+ 0x5615, 0x560C, 0x5612, 0x55FC, 0x560F, 0x561C, 0x5601, 0x5613, /* 0x40 */
+ 0x5602, 0x55FA, 0x561D, 0x5604, 0x55FF, 0x55F9, 0x5889, 0x587C, /* 0x50 */
+ 0x5890, 0x5898, 0x5886, 0x5881, 0x587F, 0x5874, 0x588B, 0x587A, /* 0x50 */
+ 0x5887, 0x5891, 0x588E, 0x5876, 0x5882, 0x5888, 0x587B, 0x5894, /* 0x60 */
+ 0x588F, 0x58FE, 0x596B, 0x5ADC, 0x5AEE, 0x5AE5, 0x5AD5, 0x5AEA, /* 0x60 */
+ 0x5ADA, 0x5AED, 0x5AEB, 0x5AF3, 0x5AE2, 0x5AE0, 0x5ADB, 0x5AEC, /* 0x70 */
+ 0x5ADE, 0x5ADD, 0x5AD9, 0x5AE8, 0x5ADF, 0x5B77, 0x5BE0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x5BE3, 0x5C63, 0x5D82, 0x5D80, 0x5D7D, 0x5D86, 0x5D7A, /* 0xA0 */
+ 0x5D81, 0x5D77, 0x5D8A, 0x5D89, 0x5D88, 0x5D7E, 0x5D7C, 0x5D8D, /* 0xA0 */
+ 0x5D79, 0x5D7F, 0x5E58, 0x5E59, 0x5E53, 0x5ED8, 0x5ED1, 0x5ED7, /* 0xB0 */
+ 0x5ECE, 0x5EDC, 0x5ED5, 0x5ED9, 0x5ED2, 0x5ED4, 0x5F44, 0x5F43, /* 0xB0 */
+ 0x5F6F, 0x5FB6, 0x612C, 0x6128, 0x6141, 0x615E, 0x6171, 0x6173, /* 0xC0 */
+ 0x6152, 0x6153, 0x6172, 0x616C, 0x6180, 0x6174, 0x6154, 0x617A, /* 0xC0 */
+ 0x615B, 0x6165, 0x613B, 0x616A, 0x6161, 0x6156, 0x6229, 0x6227, /* 0xD0 */
+ 0x622B, 0x642B, 0x644D, 0x645B, 0x645D, 0x6474, 0x6476, 0x6472, /* 0xD0 */
+ 0x6473, 0x647D, 0x6475, 0x6466, 0x64A6, 0x644E, 0x6482, 0x645E, /* 0xE0 */
+ 0x645C, 0x644B, 0x6453, 0x6460, 0x6450, 0x647F, 0x643F, 0x646C, /* 0xE0 */
+ 0x646B, 0x6459, 0x6465, 0x6477, 0x6573, 0x65A0, 0x66A1, 0x66A0, /* 0xF0 */
+ 0x669F, 0x6705, 0x6704, 0x6722, 0x69B1, 0x69B6, 0x69C9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x69A0, 0x69CE, 0x6996, 0x69B0, 0x69AC, 0x69BC, 0x6991, 0x6999, /* 0x40 */
+ 0x698E, 0x69A7, 0x698D, 0x69A9, 0x69BE, 0x69AF, 0x69BF, 0x69C4, /* 0x40 */
+ 0x69BD, 0x69A4, 0x69D4, 0x69B9, 0x69CA, 0x699A, 0x69CF, 0x69B3, /* 0x50 */
+ 0x6993, 0x69AA, 0x69A1, 0x699E, 0x69D9, 0x6997, 0x6990, 0x69C2, /* 0x50 */
+ 0x69B5, 0x69A5, 0x69C6, 0x6B4A, 0x6B4D, 0x6B4B, 0x6B9E, 0x6B9F, /* 0x60 */
+ 0x6BA0, 0x6BC3, 0x6BC4, 0x6BFE, 0x6ECE, 0x6EF5, 0x6EF1, 0x6F03, /* 0x60 */
+ 0x6F25, 0x6EF8, 0x6F37, 0x6EFB, 0x6F2E, 0x6F09, 0x6F4E, 0x6F19, /* 0x70 */
+ 0x6F1A, 0x6F27, 0x6F18, 0x6F3B, 0x6F12, 0x6EED, 0x6F0A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x6F36, 0x6F73, 0x6EF9, 0x6EEE, 0x6F2D, 0x6F40, 0x6F30, /* 0xA0 */
+ 0x6F3C, 0x6F35, 0x6EEB, 0x6F07, 0x6F0E, 0x6F43, 0x6F05, 0x6EFD, /* 0xA0 */
+ 0x6EF6, 0x6F39, 0x6F1C, 0x6EFC, 0x6F3A, 0x6F1F, 0x6F0D, 0x6F1E, /* 0xB0 */
+ 0x6F08, 0x6F21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, /* 0xB0 */
+ 0x718F, 0x717B, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, /* 0xC0 */
+ 0x7295, 0x7293, 0x7343, 0x734D, 0x7351, 0x734C, 0x7462, 0x7473, /* 0xC0 */
+ 0x7471, 0x7475, 0x7472, 0x7467, 0x746E, 0x7500, 0x7502, 0x7503, /* 0xD0 */
+ 0x757D, 0x7590, 0x7616, 0x7608, 0x760C, 0x7615, 0x7611, 0x760A, /* 0xD0 */
+ 0x7614, 0x76B8, 0x7781, 0x777C, 0x7785, 0x7782, 0x776E, 0x7780, /* 0xE0 */
+ 0x776F, 0x777E, 0x7783, 0x78B2, 0x78AA, 0x78B4, 0x78AD, 0x78A8, /* 0xE0 */
+ 0x787E, 0x78AB, 0x789E, 0x78A5, 0x78A0, 0x78AC, 0x78A2, 0x78A4, /* 0xF0 */
+ 0x7998, 0x798A, 0x798B, 0x7996, 0x7995, 0x7994, 0x7993 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7997, 0x7988, 0x7992, 0x7990, 0x7A2B, 0x7A4A, 0x7A30, 0x7A2F, /* 0x40 */
+ 0x7A28, 0x7A26, 0x7AA8, 0x7AAB, 0x7AAC, 0x7AEE, 0x7B88, 0x7B9C, /* 0x40 */
+ 0x7B8A, 0x7B91, 0x7B90, 0x7B96, 0x7B8D, 0x7B8C, 0x7B9B, 0x7B8E, /* 0x50 */
+ 0x7B85, 0x7B98, 0x5284, 0x7B99, 0x7BA4, 0x7B82, 0x7CBB, 0x7CBF, /* 0x50 */
+ 0x7CBC, 0x7CBA, 0x7DA7, 0x7DB7, 0x7DC2, 0x7DA3, 0x7DAA, 0x7DC1, /* 0x60 */
+ 0x7DC0, 0x7DC5, 0x7D9D, 0x7DCE, 0x7DC4, 0x7DC6, 0x7DCB, 0x7DCC, /* 0x60 */
+ 0x7DAF, 0x7DB9, 0x7D96, 0x7DBC, 0x7D9F, 0x7DA6, 0x7DAE, 0x7DA9, /* 0x70 */
+ 0x7DA1, 0x7DC9, 0x7F73, 0x7FE2, 0x7FE3, 0x7FE5, 0x7FDE, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8024, 0x805D, 0x805C, 0x8189, 0x8186, 0x8183, 0x8187, /* 0xA0 */
+ 0x818D, 0x818C, 0x818B, 0x8215, 0x8497, 0x84A4, 0x84A1, 0x849F, /* 0xA0 */
+ 0x84BA, 0x84CE, 0x84C2, 0x84AC, 0x84AE, 0x84AB, 0x84B9, 0x84B4, /* 0xB0 */
+ 0x84C1, 0x84CD, 0x84AA, 0x849A, 0x84B1, 0x84D0, 0x849D, 0x84A7, /* 0xB0 */
+ 0x84BB, 0x84A2, 0x8494, 0x84C7, 0x84CC, 0x849B, 0x84A9, 0x84AF, /* 0xC0 */
+ 0x84A8, 0x84D6, 0x8498, 0x84B6, 0x84CF, 0x84A0, 0x84D7, 0x84D4, /* 0xC0 */
+ 0x84D2, 0x84DB, 0x84B0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, /* 0xD0 */
+ 0x876B, 0x8740, 0x872E, 0x871E, 0x8721, 0x8719, 0x871B, 0x8743, /* 0xD0 */
+ 0x872C, 0x8741, 0x873E, 0x8746, 0x8720, 0x8732, 0x872A, 0x872D, /* 0xE0 */
+ 0x873C, 0x8712, 0x873A, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, /* 0xE0 */
+ 0x8738, 0x8724, 0x871A, 0x8730, 0x8711, 0x88F7, 0x88E7, 0x88F1, /* 0xF0 */
+ 0x88F2, 0x88FA, 0x88FE, 0x88EE, 0x88FC, 0x88F6, 0x88FB /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x88F0, 0x88EC, 0x88EB, 0x899D, 0x89A1, 0x899F, 0x899E, 0x89E9, /* 0x40 */
+ 0x89EB, 0x89E8, 0x8AAB, 0x8A99, 0x8A8B, 0x8A92, 0x8A8F, 0x8A96, /* 0x40 */
+ 0x8C3D, 0x8C68, 0x8C69, 0x8CD5, 0x8CCF, 0x8CD7, 0x8D96, 0x8E09, /* 0x50 */
+ 0x8E02, 0x8DFF, 0x8E0D, 0x8DFD, 0x8E0A, 0x8E03, 0x8E07, 0x8E06, /* 0x50 */
+ 0x8E05, 0x8DFE, 0x8E00, 0x8E04, 0x8F10, 0x8F11, 0x8F0E, 0x8F0D, /* 0x60 */
+ 0x9123, 0x911C, 0x9120, 0x9122, 0x911F, 0x911D, 0x911A, 0x9124, /* 0x60 */
+ 0x9121, 0x911B, 0x917A, 0x9172, 0x9179, 0x9173, 0x92A5, 0x92A4, /* 0x70 */
+ 0x9276, 0x929B, 0x927A, 0x92A0, 0x9294, 0x92AA, 0x928D, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x92A6, 0x929A, 0x92AB, 0x9279, 0x9297, 0x927F, 0x92A3, /* 0xA0 */
+ 0x92EE, 0x928E, 0x9282, 0x9295, 0x92A2, 0x927D, 0x9288, 0x92A1, /* 0xA0 */
+ 0x928A, 0x9286, 0x928C, 0x9299, 0x92A7, 0x927E, 0x9287, 0x92A9, /* 0xB0 */
+ 0x929D, 0x928B, 0x922D, 0x969E, 0x96A1, 0x96FF, 0x9758, 0x977D, /* 0xB0 */
+ 0x977A, 0x977E, 0x9783, 0x9780, 0x9782, 0x977B, 0x9784, 0x9781, /* 0xC0 */
+ 0x977F, 0x97CE, 0x97CD, 0x9816, 0x98AD, 0x98AE, 0x9902, 0x9900, /* 0xC0 */
+ 0x9907, 0x999D, 0x999C, 0x99C3, 0x99B9, 0x99BB, 0x99BA, 0x99C2, /* 0xD0 */
+ 0x99BD, 0x99C7, 0x9AB1, 0x9AE3, 0x9AE7, 0x9B3E, 0x9B3F, 0x9B60, /* 0xD0 */
+ 0x9B61, 0x9B5F, 0x9CF1, 0x9CF2, 0x9CF5, 0x9EA7, 0x50FF, 0x5103, /* 0xE0 */
+ 0x5130, 0x50F8, 0x5106, 0x5107, 0x50F6, 0x50FE, 0x510B, 0x510C, /* 0xE0 */
+ 0x50FD, 0x510A, 0x528B, 0x528C, 0x52F1, 0x52EF, 0x5648, 0x5642, /* 0xF0 */
+ 0x564C, 0x5635, 0x5641, 0x564A, 0x5649, 0x5646, 0x5658 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x565A, 0x5640, 0x5633, 0x563D, 0x562C, 0x563E, 0x5638, 0x562A, /* 0x40 */
+ 0x563A, 0x571A, 0x58AB, 0x589D, 0x58B1, 0x58A0, 0x58A3, 0x58AF, /* 0x40 */
+ 0x58AC, 0x58A5, 0x58A1, 0x58FF, 0x5AFF, 0x5AF4, 0x5AFD, 0x5AF7, /* 0x50 */
+ 0x5AF6, 0x5B03, 0x5AF8, 0x5B02, 0x5AF9, 0x5B01, 0x5B07, 0x5B05, /* 0x50 */
+ 0x5B0F, 0x5C67, 0x5D99, 0x5D97, 0x5D9F, 0x5D92, 0x5DA2, 0x5D93, /* 0x60 */
+ 0x5D95, 0x5DA0, 0x5D9C, 0x5DA1, 0x5D9A, 0x5D9E, 0x5E69, 0x5E5D, /* 0x60 */
+ 0x5E60, 0x5E5C, 0x7DF3, 0x5EDB, 0x5EDE, 0x5EE1, 0x5F49, 0x5FB2, /* 0x70 */
+ 0x618B, 0x6183, 0x6179, 0x61B1, 0x61B0, 0x61A2, 0x6189, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x619B, 0x6193, 0x61AF, 0x61AD, 0x619F, 0x6192, 0x61AA, /* 0xA0 */
+ 0x61A1, 0x618D, 0x6166, 0x61B3, 0x622D, 0x646E, 0x6470, 0x6496, /* 0xA0 */
+ 0x64A0, 0x6485, 0x6497, 0x649C, 0x648F, 0x648B, 0x648A, 0x648C, /* 0xB0 */
+ 0x64A3, 0x649F, 0x6468, 0x64B1, 0x6498, 0x6576, 0x657A, 0x6579, /* 0xB0 */
+ 0x657B, 0x65B2, 0x65B3, 0x66B5, 0x66B0, 0x66A9, 0x66B2, 0x66B7, /* 0xC0 */
+ 0x66AA, 0x66AF, 0x6A00, 0x6A06, 0x6A17, 0x69E5, 0x69F8, 0x6A15, /* 0xC0 */
+ 0x69F1, 0x69E4, 0x6A20, 0x69FF, 0x69EC, 0x69E2, 0x6A1B, 0x6A1D, /* 0xD0 */
+ 0x69FE, 0x6A27, 0x69F2, 0x69EE, 0x6A14, 0x69F7, 0x69E7, 0x6A40, /* 0xD0 */
+ 0x6A08, 0x69E6, 0x69FB, 0x6A0D, 0x69FC, 0x69EB, 0x6A09, 0x6A04, /* 0xE0 */
+ 0x6A18, 0x6A25, 0x6A0F, 0x69F6, 0x6A26, 0x6A07, 0x69F4, 0x6A16, /* 0xE0 */
+ 0x6B51, 0x6BA5, 0x6BA3, 0x6BA2, 0x6BA6, 0x6C01, 0x6C00, 0x6BFF, /* 0xF0 */
+ 0x6C02, 0x6F41, 0x6F26, 0x6F7E, 0x6F87, 0x6FC6, 0x6F92 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6F8D, 0x6F89, 0x6F8C, 0x6F62, 0x6F4F, 0x6F85, 0x6F5A, 0x6F96, /* 0x40 */
+ 0x6F76, 0x6F6C, 0x6F82, 0x6F55, 0x6F72, 0x6F52, 0x6F50, 0x6F57, /* 0x40 */
+ 0x6F94, 0x6F93, 0x6F5D, 0x6F00, 0x6F61, 0x6F6B, 0x6F7D, 0x6F67, /* 0x50 */
+ 0x6F90, 0x6F53, 0x6F8B, 0x6F69, 0x6F7F, 0x6F95, 0x6F63, 0x6F77, /* 0x50 */
+ 0x6F6A, 0x6F7B, 0x71B2, 0x71AF, 0x719B, 0x71B0, 0x71A0, 0x719A, /* 0x60 */
+ 0x71A9, 0x71B5, 0x719D, 0x71A5, 0x719E, 0x71A4, 0x71A1, 0x71AA, /* 0x60 */
+ 0x719C, 0x71A7, 0x71B3, 0x7298, 0x729A, 0x7358, 0x7352, 0x735E, /* 0x70 */
+ 0x735F, 0x7360, 0x735D, 0x735B, 0x7361, 0x735A, 0x7359, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7362, 0x7487, 0x7489, 0x748A, 0x7486, 0x7481, 0x747D, /* 0xA0 */
+ 0x7485, 0x7488, 0x747C, 0x7479, 0x7508, 0x7507, 0x757E, 0x7625, /* 0xA0 */
+ 0x761E, 0x7619, 0x761D, 0x761C, 0x7623, 0x761A, 0x7628, 0x761B, /* 0xB0 */
+ 0x769C, 0x769D, 0x769E, 0x769B, 0x778D, 0x778F, 0x7789, 0x7788, /* 0xB0 */
+ 0x78CD, 0x78BB, 0x78CF, 0x78CC, 0x78D1, 0x78CE, 0x78D4, 0x78C8, /* 0xC0 */
+ 0x78C3, 0x78C4, 0x78C9, 0x799A, 0x79A1, 0x79A0, 0x799C, 0x79A2, /* 0xC0 */
+ 0x799B, 0x6B76, 0x7A39, 0x7AB2, 0x7AB4, 0x7AB3, 0x7BB7, 0x7BCB, /* 0xD0 */
+ 0x7BBE, 0x7BAC, 0x7BCE, 0x7BAF, 0x7BB9, 0x7BCA, 0x7BB5, 0x7CC5, /* 0xD0 */
+ 0x7CC8, 0x7CCC, 0x7CCB, 0x7DF7, 0x7DDB, 0x7DEA, 0x7DE7, 0x7DD7, /* 0xE0 */
+ 0x7DE1, 0x7E03, 0x7DFA, 0x7DE6, 0x7DF6, 0x7DF1, 0x7DF0, 0x7DEE, /* 0xE0 */
+ 0x7DDF, 0x7F76, 0x7FAC, 0x7FB0, 0x7FAD, 0x7FED, 0x7FEB, 0x7FEA, /* 0xF0 */
+ 0x7FEC, 0x7FE6, 0x7FE8, 0x8064, 0x8067, 0x81A3, 0x819F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x819E, 0x8195, 0x81A2, 0x8199, 0x8197, 0x8216, 0x824F, 0x8253, /* 0x40 */
+ 0x8252, 0x8250, 0x824E, 0x8251, 0x8524, 0x853B, 0x850F, 0x8500, /* 0x40 */
+ 0x8529, 0x850E, 0x8509, 0x850D, 0x851F, 0x850A, 0x8527, 0x851C, /* 0x50 */
+ 0x84FB, 0x852B, 0x84FA, 0x8508, 0x850C, 0x84F4, 0x852A, 0x84F2, /* 0x50 */
+ 0x8515, 0x84F7, 0x84EB, 0x84F3, 0x84FC, 0x8512, 0x84EA, 0x84E9, /* 0x60 */
+ 0x8516, 0x84FE, 0x8528, 0x851D, 0x852E, 0x8502, 0x84FD, 0x851E, /* 0x60 */
+ 0x84F6, 0x8531, 0x8526, 0x84E7, 0x84E8, 0x84F0, 0x84EF, 0x84F9, /* 0x70 */
+ 0x8518, 0x8520, 0x8530, 0x850B, 0x8519, 0x852F, 0x8662, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8756, 0x8763, 0x8764, 0x8777, 0x87E1, 0x8773, 0x8758, /* 0xA0 */
+ 0x8754, 0x875B, 0x8752, 0x8761, 0x875A, 0x8751, 0x875E, 0x876D, /* 0xA0 */
+ 0x876A, 0x8750, 0x874E, 0x875F, 0x875D, 0x876F, 0x876C, 0x877A, /* 0xB0 */
+ 0x876E, 0x875C, 0x8765, 0x874F, 0x877B, 0x8775, 0x8762, 0x8767, /* 0xB0 */
+ 0x8769, 0x885A, 0x8905, 0x890C, 0x8914, 0x890B, 0x8917, 0x8918, /* 0xC0 */
+ 0x8919, 0x8906, 0x8916, 0x8911, 0x890E, 0x8909, 0x89A2, 0x89A4, /* 0xC0 */
+ 0x89A3, 0x89ED, 0x89F0, 0x89EC, 0x8ACF, 0x8AC6, 0x8AB8, 0x8AD3, /* 0xD0 */
+ 0x8AD1, 0x8AD4, 0x8AD5, 0x8ABB, 0x8AD7, 0x8ABE, 0x8AC0, 0x8AC5, /* 0xD0 */
+ 0x8AD8, 0x8AC3, 0x8ABA, 0x8ABD, 0x8AD9, 0x8C3E, 0x8C4D, 0x8C8F, /* 0xE0 */
+ 0x8CE5, 0x8CDF, 0x8CD9, 0x8CE8, 0x8CDA, 0x8CDD, 0x8CE7, 0x8DA0, /* 0xE0 */
+ 0x8D9C, 0x8DA1, 0x8D9B, 0x8E20, 0x8E23, 0x8E25, 0x8E24, 0x8E2E, /* 0xF0 */
+ 0x8E15, 0x8E1B, 0x8E16, 0x8E11, 0x8E19, 0x8E26, 0x8E27 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E14, 0x8E12, 0x8E18, 0x8E13, 0x8E1C, 0x8E17, 0x8E1A, 0x8F2C, /* 0x40 */
+ 0x8F24, 0x8F18, 0x8F1A, 0x8F20, 0x8F23, 0x8F16, 0x8F17, 0x9073, /* 0x40 */
+ 0x9070, 0x906F, 0x9067, 0x906B, 0x912F, 0x912B, 0x9129, 0x912A, /* 0x50 */
+ 0x9132, 0x9126, 0x912E, 0x9185, 0x9186, 0x918A, 0x9181, 0x9182, /* 0x50 */
+ 0x9184, 0x9180, 0x92D0, 0x92C3, 0x92C4, 0x92C0, 0x92D9, 0x92B6, /* 0x60 */
+ 0x92CF, 0x92F1, 0x92DF, 0x92D8, 0x92E9, 0x92D7, 0x92DD, 0x92CC, /* 0x60 */
+ 0x92EF, 0x92C2, 0x92E8, 0x92CA, 0x92C8, 0x92CE, 0x92E6, 0x92CD, /* 0x70 */
+ 0x92D5, 0x92C9, 0x92E0, 0x92DE, 0x92E7, 0x92D1, 0x92D3, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x92B5, 0x92E1, 0x92C6, 0x92B4, 0x957C, 0x95AC, 0x95AB, /* 0xA0 */
+ 0x95AE, 0x95B0, 0x96A4, 0x96A2, 0x96D3, 0x9705, 0x9708, 0x9702, /* 0xA0 */
+ 0x975A, 0x978A, 0x978E, 0x9788, 0x97D0, 0x97CF, 0x981E, 0x981D, /* 0xB0 */
+ 0x9826, 0x9829, 0x9828, 0x9820, 0x981B, 0x9827, 0x98B2, 0x9908, /* 0xB0 */
+ 0x98FA, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99DC, 0x99CD, /* 0xC0 */
+ 0x99CF, 0x99D3, 0x99D4, 0x99CE, 0x99C9, 0x99D6, 0x99D8, 0x99CB, /* 0xC0 */
+ 0x99D7, 0x99CC, 0x9AB3, 0x9AEC, 0x9AEB, 0x9AF3, 0x9AF2, 0x9AF1, /* 0xD0 */
+ 0x9B46, 0x9B43, 0x9B67, 0x9B74, 0x9B71, 0x9B66, 0x9B76, 0x9B75, /* 0xD0 */
+ 0x9B70, 0x9B68, 0x9B64, 0x9B6C, 0x9CFC, 0x9CFA, 0x9CFD, 0x9CFF, /* 0xE0 */
+ 0x9CF7, 0x9D07, 0x9D00, 0x9CF9, 0x9CFB, 0x9D08, 0x9D05, 0x9D04, /* 0xE0 */
+ 0x9E83, 0x9ED3, 0x9F0F, 0x9F10, 0x511C, 0x5113, 0x5117, 0x511A, /* 0xF0 */
+ 0x5111, 0x51DE, 0x5334, 0x53E1, 0x5670, 0x5660, 0x566E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_E9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5673, 0x5666, 0x5663, 0x566D, 0x5672, 0x565E, 0x5677, 0x571C, /* 0x40 */
+ 0x571B, 0x58C8, 0x58BD, 0x58C9, 0x58BF, 0x58BA, 0x58C2, 0x58BC, /* 0x40 */
+ 0x58C6, 0x5B17, 0x5B19, 0x5B1B, 0x5B21, 0x5B14, 0x5B13, 0x5B10, /* 0x50 */
+ 0x5B16, 0x5B28, 0x5B1A, 0x5B20, 0x5B1E, 0x5BEF, 0x5DAC, 0x5DB1, /* 0x50 */
+ 0x5DA9, 0x5DA7, 0x5DB5, 0x5DB0, 0x5DAE, 0x5DAA, 0x5DA8, 0x5DB2, /* 0x60 */
+ 0x5DAD, 0x5DAF, 0x5DB4, 0x5E67, 0x5E68, 0x5E66, 0x5E6F, 0x5EE9, /* 0x60 */
+ 0x5EE7, 0x5EE6, 0x5EE8, 0x5EE5, 0x5F4B, 0x5FBC, 0x619D, 0x61A8, /* 0x70 */
+ 0x6196, 0x61C5, 0x61B4, 0x61C6, 0x61C1, 0x61CC, 0x61BA, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x61BF, 0x61B8, 0x618C, 0x64D7, 0x64D6, 0x64D0, 0x64CF, /* 0xA0 */
+ 0x64C9, 0x64BD, 0x6489, 0x64C3, 0x64DB, 0x64F3, 0x64D9, 0x6533, /* 0xA0 */
+ 0x657F, 0x657C, 0x65A2, 0x66C8, 0x66BE, 0x66C0, 0x66CA, 0x66CB, /* 0xB0 */
+ 0x66CF, 0x66BD, 0x66BB, 0x66BA, 0x66CC, 0x6723, 0x6A34, 0x6A66, /* 0xB0 */
+ 0x6A49, 0x6A67, 0x6A32, 0x6A68, 0x6A3E, 0x6A5D, 0x6A6D, 0x6A76, /* 0xC0 */
+ 0x6A5B, 0x6A51, 0x6A28, 0x6A5A, 0x6A3B, 0x6A3F, 0x6A41, 0x6A6A, /* 0xC0 */
+ 0x6A64, 0x6A50, 0x6A4F, 0x6A54, 0x6A6F, 0x6A69, 0x6A60, 0x6A3C, /* 0xD0 */
+ 0x6A5E, 0x6A56, 0x6A55, 0x6A4D, 0x6A4E, 0x6A46, 0x6B55, 0x6B54, /* 0xD0 */
+ 0x6B56, 0x6BA7, 0x6BAA, 0x6BAB, 0x6BC8, 0x6BC7, 0x6C04, 0x6C03, /* 0xE0 */
+ 0x6C06, 0x6FAD, 0x6FCB, 0x6FA3, 0x6FC7, 0x6FBC, 0x6FCE, 0x6FC8, /* 0xE0 */
+ 0x6F5E, 0x6FC4, 0x6FBD, 0x6F9E, 0x6FCA, 0x6FA8, 0x7004, 0x6FA5, /* 0xF0 */
+ 0x6FAE, 0x6FBA, 0x6FAC, 0x6FAA, 0x6FCF, 0x6FBF, 0x6FB8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_EA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6FA2, 0x6FC9, 0x6FAB, 0x6FCD, 0x6FAF, 0x6FB2, 0x6FB0, 0x71C5, /* 0x40 */
+ 0x71C2, 0x71BF, 0x71B8, 0x71D6, 0x71C0, 0x71C1, 0x71CB, 0x71D4, /* 0x40 */
+ 0x71CA, 0x71C7, 0x71CF, 0x71BD, 0x71D8, 0x71BC, 0x71C6, 0x71DA, /* 0x50 */
+ 0x71DB, 0x729D, 0x729E, 0x7369, 0x7366, 0x7367, 0x736C, 0x7365, /* 0x50 */
+ 0x736B, 0x736A, 0x747F, 0x749A, 0x74A0, 0x7494, 0x7492, 0x7495, /* 0x60 */
+ 0x74A1, 0x750B, 0x7580, 0x762F, 0x762D, 0x7631, 0x763D, 0x7633, /* 0x60 */
+ 0x763C, 0x7635, 0x7632, 0x7630, 0x76BB, 0x76E6, 0x779A, 0x779D, /* 0x70 */
+ 0x77A1, 0x779C, 0x779B, 0x77A2, 0x77A3, 0x7795, 0x7799, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7797, 0x78DD, 0x78E9, 0x78E5, 0x78EA, 0x78DE, 0x78E3, /* 0xA0 */
+ 0x78DB, 0x78E1, 0x78E2, 0x78ED, 0x78DF, 0x78E0, 0x79A4, 0x7A44, /* 0xA0 */
+ 0x7A48, 0x7A47, 0x7AB6, 0x7AB8, 0x7AB5, 0x7AB1, 0x7AB7, 0x7BDE, /* 0xB0 */
+ 0x7BE3, 0x7BE7, 0x7BDD, 0x7BD5, 0x7BE5, 0x7BDA, 0x7BE8, 0x7BF9, /* 0xB0 */
+ 0x7BD4, 0x7BEA, 0x7BE2, 0x7BDC, 0x7BEB, 0x7BD8, 0x7BDF, 0x7CD2, /* 0xC0 */
+ 0x7CD4, 0x7CD7, 0x7CD0, 0x7CD1, 0x7E12, 0x7E21, 0x7E17, 0x7E0C, /* 0xC0 */
+ 0x7E1F, 0x7E20, 0x7E13, 0x7E0E, 0x7E1C, 0x7E15, 0x7E1A, 0x7E22, /* 0xD0 */
+ 0x7E0B, 0x7E0F, 0x7E16, 0x7E0D, 0x7E14, 0x7E25, 0x7E24, 0x7F43, /* 0xD0 */
+ 0x7F7B, 0x7F7C, 0x7F7A, 0x7FB1, 0x7FEF, 0x802A, 0x8029, 0x806C, /* 0xE0 */
+ 0x81B1, 0x81A6, 0x81AE, 0x81B9, 0x81B5, 0x81AB, 0x81B0, 0x81AC, /* 0xE0 */
+ 0x81B4, 0x81B2, 0x81B7, 0x81A7, 0x81F2, 0x8255, 0x8256, 0x8257, /* 0xF0 */
+ 0x8556, 0x8545, 0x856B, 0x854D, 0x8553, 0x8561, 0x8558 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_EB[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, /* 0x40 */
+ 0x8563, 0x853E, 0x855B, 0x8571, 0x854E, 0x856E, 0x8575, 0x8555, /* 0x40 */
+ 0x8567, 0x8560, 0x858C, 0x8566, 0x855D, 0x8554, 0x8565, 0x856C, /* 0x50 */
+ 0x8663, 0x8665, 0x8664, 0x879B, 0x878F, 0x8797, 0x8793, 0x8792, /* 0x50 */
+ 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87A3, 0x8785, /* 0x60 */
+ 0x8790, 0x8791, 0x879D, 0x8784, 0x8794, 0x879C, 0x879A, 0x8789, /* 0x60 */
+ 0x891E, 0x8926, 0x8930, 0x892D, 0x892E, 0x8927, 0x8931, 0x8922, /* 0x70 */
+ 0x8929, 0x8923, 0x892F, 0x892C, 0x891F, 0x89F1, 0x8AE0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8AE2, 0x8AF2, 0x8AF4, 0x8AF5, 0x8ADD, 0x8B14, 0x8AE4, /* 0xA0 */
+ 0x8ADF, 0x8AF0, 0x8AC8, 0x8ADE, 0x8AE1, 0x8AE8, 0x8AFF, 0x8AEF, /* 0xA0 */
+ 0x8AFB, 0x8C91, 0x8C92, 0x8C90, 0x8CF5, 0x8CEE, 0x8CF1, 0x8CF0, /* 0xB0 */
+ 0x8CF3, 0x8D6C, 0x8D6E, 0x8DA5, 0x8DA7, 0x8E33, 0x8E3E, 0x8E38, /* 0xB0 */
+ 0x8E40, 0x8E45, 0x8E36, 0x8E3C, 0x8E3D, 0x8E41, 0x8E30, 0x8E3F, /* 0xC0 */
+ 0x8EBD, 0x8F36, 0x8F2E, 0x8F35, 0x8F32, 0x8F39, 0x8F37, 0x8F34, /* 0xC0 */
+ 0x9076, 0x9079, 0x907B, 0x9086, 0x90FA, 0x9133, 0x9135, 0x9136, /* 0xD0 */
+ 0x9193, 0x9190, 0x9191, 0x918D, 0x918F, 0x9327, 0x931E, 0x9308, /* 0xD0 */
+ 0x931F, 0x9306, 0x930F, 0x937A, 0x9338, 0x933C, 0x931B, 0x9323, /* 0xE0 */
+ 0x9312, 0x9301, 0x9346, 0x932D, 0x930E, 0x930D, 0x92CB, 0x931D, /* 0xE0 */
+ 0x92FA, 0x9325, 0x9313, 0x92F9, 0x92F7, 0x9334, 0x9302, 0x9324, /* 0xF0 */
+ 0x92FF, 0x9329, 0x9339, 0x9335, 0x932A, 0x9314, 0x930C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_EC[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x930B, 0x92FE, 0x9309, 0x9300, 0x92FB, 0x9316, 0x95BC, 0x95CD, /* 0x40 */
+ 0x95BE, 0x95B9, 0x95BA, 0x95B6, 0x95BF, 0x95B5, 0x95BD, 0x96A9, /* 0x40 */
+ 0x96D4, 0x970B, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97F0, /* 0x50 */
+ 0x97F8, 0x9835, 0x982F, 0x9832, 0x9924, 0x991F, 0x9927, 0x9929, /* 0x50 */
+ 0x999E, 0x99EE, 0x99EC, 0x99E5, 0x99E4, 0x99F0, 0x99E3, 0x99EA, /* 0x60 */
+ 0x99E9, 0x99E7, 0x9AB9, 0x9ABF, 0x9AB4, 0x9ABB, 0x9AF6, 0x9AFA, /* 0x60 */
+ 0x9AF9, 0x9AF7, 0x9B33, 0x9B80, 0x9B85, 0x9B87, 0x9B7C, 0x9B7E, /* 0x70 */
+ 0x9B7B, 0x9B82, 0x9B93, 0x9B92, 0x9B90, 0x9B7A, 0x9B95, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9B7D, 0x9B88, 0x9D25, 0x9D17, 0x9D20, 0x9D1E, 0x9D14, /* 0xA0 */
+ 0x9D29, 0x9D1D, 0x9D18, 0x9D22, 0x9D10, 0x9D19, 0x9D1F, 0x9E88, /* 0xA0 */
+ 0x9E86, 0x9E87, 0x9EAE, 0x9EAD, 0x9ED5, 0x9ED6, 0x9EFA, 0x9F12, /* 0xB0 */
+ 0x9F3D, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52F4, /* 0xB0 */
+ 0x5693, 0x568C, 0x568D, 0x5686, 0x5684, 0x5683, 0x567E, 0x5682, /* 0xC0 */
+ 0x567F, 0x5681, 0x58D6, 0x58D4, 0x58CF, 0x58D2, 0x5B2D, 0x5B25, /* 0xC0 */
+ 0x5B32, 0x5B23, 0x5B2C, 0x5B27, 0x5B26, 0x5B2F, 0x5B2E, 0x5B7B, /* 0xD0 */
+ 0x5BF1, 0x5BF2, 0x5DB7, 0x5E6C, 0x5E6A, 0x5FBE, 0x5FBB, 0x61C3, /* 0xD0 */
+ 0x61B5, 0x61BC, 0x61E7, 0x61E0, 0x61E5, 0x61E4, 0x61E8, 0x61DE, /* 0xE0 */
+ 0x64EF, 0x64E9, 0x64E3, 0x64EB, 0x64E4, 0x64E8, 0x6581, 0x6580, /* 0xE0 */
+ 0x65B6, 0x65DA, 0x66D2, 0x6A8D, 0x6A96, 0x6A81, 0x6AA5, 0x6A89, /* 0xF0 */
+ 0x6A9F, 0x6A9B, 0x6AA1, 0x6A9E, 0x6A87, 0x6A93, 0x6A8E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_ED[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x6A95, 0x6A83, 0x6AA8, 0x6AA4, 0x6A91, 0x6A7F, 0x6AA6, 0x6A9A, /* 0x40 */
+ 0x6A85, 0x6A8C, 0x6A92, 0x6B5B, 0x6BAD, 0x6C09, 0x6FCC, 0x6FA9, /* 0x40 */
+ 0x6FF4, 0x6FD4, 0x6FE3, 0x6FDC, 0x6FED, 0x6FE7, 0x6FE6, 0x6FDE, /* 0x50 */
+ 0x6FF2, 0x6FDD, 0x6FE2, 0x6FE8, 0x71E1, 0x71F1, 0x71E8, 0x71F2, /* 0x50 */
+ 0x71E4, 0x71F0, 0x71E2, 0x7373, 0x736E, 0x736F, 0x7497, 0x74B2, /* 0x60 */
+ 0x74AB, 0x7490, 0x74AA, 0x74AD, 0x74B1, 0x74A5, 0x74AF, 0x7510, /* 0x60 */
+ 0x7511, 0x7512, 0x750F, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, /* 0x70 */
+ 0x76A4, 0x76E9, 0x77B5, 0x77AB, 0x77B2, 0x77B7, 0x77B6, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x77B4, 0x77B1, 0x77A8, 0x77F0, 0x78F3, 0x78FD, 0x7902, /* 0xA0 */
+ 0x78FB, 0x78FC, 0x78F2, 0x7905, 0x78F9, 0x78FE, 0x7904, 0x79AB, /* 0xA0 */
+ 0x79A8, 0x7A5C, 0x7A5B, 0x7A56, 0x7A58, 0x7A54, 0x7A5A, 0x7ABE, /* 0xB0 */
+ 0x7AC0, 0x7AC1, 0x7C05, 0x7C0F, 0x7BF2, 0x7C00, 0x7BFF, 0x7BFB, /* 0xB0 */
+ 0x7C0E, 0x7BF4, 0x7C0B, 0x7BF3, 0x7C02, 0x7C09, 0x7C03, 0x7C01, /* 0xC0 */
+ 0x7BF8, 0x7BFD, 0x7C06, 0x7BF0, 0x7BF1, 0x7C10, 0x7C0A, 0x7CE8, /* 0xC0 */
+ 0x7E2D, 0x7E3C, 0x7E42, 0x7E33, 0x9848, 0x7E38, 0x7E2A, 0x7E49, /* 0xD0 */
+ 0x7E40, 0x7E47, 0x7E29, 0x7E4C, 0x7E30, 0x7E3B, 0x7E36, 0x7E44, /* 0xD0 */
+ 0x7E3A, 0x7F45, 0x7F7F, 0x7F7E, 0x7F7D, 0x7FF4, 0x7FF2, 0x802C, /* 0xE0 */
+ 0x81BB, 0x81C4, 0x81CC, 0x81CA, 0x81C5, 0x81C7, 0x81BC, 0x81E9, /* 0xE0 */
+ 0x825B, 0x825A, 0x825C, 0x8583, 0x8580, 0x858F, 0x85A7, 0x8595, /* 0xF0 */
+ 0x85A0, 0x858B, 0x85A3, 0x857B, 0x85A4, 0x859A, 0x859E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_EE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8577, 0x857C, 0x8589, 0x85A1, 0x857A, 0x8578, 0x8557, 0x858E, /* 0x40 */
+ 0x8596, 0x8586, 0x858D, 0x8599, 0x859D, 0x8581, 0x85A2, 0x8582, /* 0x40 */
+ 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859F, 0x8668, /* 0x50 */
+ 0x87BE, 0x87AA, 0x87AD, 0x87C5, 0x87B0, 0x87AC, 0x87B9, 0x87B5, /* 0x50 */
+ 0x87BC, 0x87AE, 0x87C9, 0x87C3, 0x87C2, 0x87CC, 0x87B7, 0x87AF, /* 0x60 */
+ 0x87C4, 0x87CA, 0x87B4, 0x87B6, 0x87BF, 0x87B8, 0x87BD, 0x87DE, /* 0x60 */
+ 0x87B2, 0x8935, 0x8933, 0x893C, 0x893E, 0x8941, 0x8952, 0x8937, /* 0x70 */
+ 0x8942, 0x89AD, 0x89AF, 0x89AE, 0x89F2, 0x89F3, 0x8B1E, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x8B18, 0x8B16, 0x8B11, 0x8B05, 0x8B0B, 0x8B22, 0x8B0F, /* 0xA0 */
+ 0x8B12, 0x8B15, 0x8B07, 0x8B0D, 0x8B08, 0x8B06, 0x8B1C, 0x8B13, /* 0xA0 */
+ 0x8B1A, 0x8C4F, 0x8C70, 0x8C72, 0x8C71, 0x8C6F, 0x8C95, 0x8C94, /* 0xB0 */
+ 0x8CF9, 0x8D6F, 0x8E4E, 0x8E4D, 0x8E53, 0x8E50, 0x8E4C, 0x8E47, /* 0xB0 */
+ 0x8F43, 0x8F40, 0x9085, 0x907E, 0x9138, 0x919A, 0x91A2, 0x919B, /* 0xC0 */
+ 0x9199, 0x919F, 0x91A1, 0x919D, 0x91A0, 0x93A1, 0x9383, 0x93AF, /* 0xC0 */
+ 0x9364, 0x9356, 0x9347, 0x937C, 0x9358, 0x935C, 0x9376, 0x9349, /* 0xD0 */
+ 0x9350, 0x9351, 0x9360, 0x936D, 0x938F, 0x934C, 0x936A, 0x9379, /* 0xD0 */
+ 0x9357, 0x9355, 0x9352, 0x934F, 0x9371, 0x9377, 0x937B, 0x9361, /* 0xE0 */
+ 0x935E, 0x9363, 0x9367, 0x9380, 0x934E, 0x9359, 0x95C7, 0x95C0, /* 0xE0 */
+ 0x95C9, 0x95C3, 0x95C5, 0x95B7, 0x96AE, 0x96B0, 0x96AC, 0x9720, /* 0xF0 */
+ 0x971F, 0x9718, 0x971D, 0x9719, 0x979A, 0x97A1, 0x979C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_EF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x979E, 0x979D, 0x97D5, 0x97D4, 0x97F1, 0x9841, 0x9844, 0x984A, /* 0x40 */
+ 0x9849, 0x9845, 0x9843, 0x9925, 0x992B, 0x992C, 0x992A, 0x9933, /* 0x40 */
+ 0x9932, 0x992F, 0x992D, 0x9931, 0x9930, 0x9998, 0x99A3, 0x99A1, /* 0x50 */
+ 0x9A02, 0x99FA, 0x99F4, 0x99F7, 0x99F9, 0x99F8, 0x99F6, 0x99FB, /* 0x50 */
+ 0x99FD, 0x99FE, 0x99FC, 0x9A03, 0x9ABE, 0x9AFE, 0x9AFD, 0x9B01, /* 0x60 */
+ 0x9AFC, 0x9B48, 0x9B9A, 0x9BA8, 0x9B9E, 0x9B9B, 0x9BA6, 0x9BA1, /* 0x60 */
+ 0x9BA5, 0x9BA4, 0x9B86, 0x9BA2, 0x9BA0, 0x9BAF, 0x9D33, 0x9D41, /* 0x70 */
+ 0x9D67, 0x9D36, 0x9D2E, 0x9D2F, 0x9D31, 0x9D38, 0x9D30, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9D45, 0x9D42, 0x9D43, 0x9D3E, 0x9D37, 0x9D40, 0x9D3D, /* 0xA0 */
+ 0x7FF5, 0x9D2D, 0x9E8A, 0x9E89, 0x9E8D, 0x9EB0, 0x9EC8, 0x9EDA, /* 0xA0 */
+ 0x9EFB, 0x9EFF, 0x9F24, 0x9F23, 0x9F22, 0x9F54, 0x9FA0, 0x5131, /* 0xB0 */
+ 0x512D, 0x512E, 0x5698, 0x569C, 0x5697, 0x569A, 0x569D, 0x5699, /* 0xB0 */
+ 0x5970, 0x5B3C, 0x5C69, 0x5C6A, 0x5DC0, 0x5E6D, 0x5E6E, 0x61D8, /* 0xC0 */
+ 0x61DF, 0x61ED, 0x61EE, 0x61F1, 0x61EA, 0x61F0, 0x61EB, 0x61D6, /* 0xC0 */
+ 0x61E9, 0x64FF, 0x6504, 0x64FD, 0x64F8, 0x6501, 0x6503, 0x64FC, /* 0xD0 */
+ 0x6594, 0x65DB, 0x66DA, 0x66DB, 0x66D8, 0x6AC5, 0x6AB9, 0x6ABD, /* 0xD0 */
+ 0x6AE1, 0x6AC6, 0x6ABA, 0x6AB6, 0x6AB7, 0x6AC7, 0x6AB4, 0x6AAD, /* 0xE0 */
+ 0x6B5E, 0x6BC9, 0x6C0B, 0x7007, 0x700C, 0x700D, 0x7001, 0x7005, /* 0xE0 */
+ 0x7014, 0x700E, 0x6FFF, 0x7000, 0x6FFB, 0x7026, 0x6FFC, 0x6FF7, /* 0xF0 */
+ 0x700A, 0x7201, 0x71FF, 0x71F9, 0x7203, 0x71FD, 0x7376 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F0[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x74B8, 0x74C0, 0x74B5, 0x74C1, 0x74BE, 0x74B6, 0x74BB, 0x74C2, /* 0x40 */
+ 0x7514, 0x7513, 0x765C, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, /* 0x40 */
+ 0x765A, 0x76A6, 0x76BD, 0x76EC, 0x77C2, 0x77BA, 0x78FF, 0x790C, /* 0x50 */
+ 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79AD, 0x79AC, /* 0x50 */
+ 0x7A5F, 0x7C1C, 0x7C29, 0x7C19, 0x7C20, 0x7C1F, 0x7C2D, 0x7C1D, /* 0x60 */
+ 0x7C26, 0x7C28, 0x7C22, 0x7C25, 0x7C30, 0x7E5C, 0x7E50, 0x7E56, /* 0x60 */
+ 0x7E63, 0x7E58, 0x7E62, 0x7E5F, 0x7E51, 0x7E60, 0x7E57, 0x7E53, /* 0x70 */
+ 0x7FB5, 0x7FB3, 0x7FF7, 0x7FF8, 0x8075, 0x81D1, 0x81D2, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x81D0, 0x825F, 0x825E, 0x85B4, 0x85C6, 0x85C0, 0x85C3, /* 0xA0 */
+ 0x85C2, 0x85B3, 0x85B5, 0x85BD, 0x85C7, 0x85C4, 0x85BF, 0x85CB, /* 0xA0 */
+ 0x85CE, 0x85C8, 0x85C5, 0x85B1, 0x85B6, 0x85D2, 0x8624, 0x85B8, /* 0xB0 */
+ 0x85B7, 0x85BE, 0x8669, 0x87E7, 0x87E6, 0x87E2, 0x87DB, 0x87EB, /* 0xB0 */
+ 0x87EA, 0x87E5, 0x87DF, 0x87F3, 0x87E4, 0x87D4, 0x87DC, 0x87D3, /* 0xC0 */
+ 0x87ED, 0x87D8, 0x87E3, 0x87A4, 0x87D7, 0x87D9, 0x8801, 0x87F4, /* 0xC0 */
+ 0x87E8, 0x87DD, 0x8953, 0x894B, 0x894F, 0x894C, 0x8946, 0x8950, /* 0xD0 */
+ 0x8951, 0x8949, 0x8B2A, 0x8B27, 0x8B23, 0x8B33, 0x8B30, 0x8B35, /* 0xD0 */
+ 0x8B47, 0x8B2F, 0x8B3C, 0x8B3E, 0x8B31, 0x8B25, 0x8B37, 0x8B26, /* 0xE0 */
+ 0x8B36, 0x8B2E, 0x8B24, 0x8B3B, 0x8B3D, 0x8B3A, 0x8C42, 0x8C75, /* 0xE0 */
+ 0x8C99, 0x8C98, 0x8C97, 0x8CFE, 0x8D04, 0x8D02, 0x8D00, 0x8E5C, /* 0xF0 */
+ 0x8E62, 0x8E60, 0x8E57, 0x8E56, 0x8E5E, 0x8E65, 0x8E67 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F1[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8E5B, 0x8E5A, 0x8E61, 0x8E5D, 0x8E69, 0x8E54, 0x8F46, 0x8F47, /* 0x40 */
+ 0x8F48, 0x8F4B, 0x9128, 0x913A, 0x913B, 0x913E, 0x91A8, 0x91A5, /* 0x40 */
+ 0x91A7, 0x91AF, 0x91AA, 0x93B5, 0x938C, 0x9392, 0x93B7, 0x939B, /* 0x50 */
+ 0x939D, 0x9389, 0x93A7, 0x938E, 0x93AA, 0x939E, 0x93A6, 0x9395, /* 0x50 */
+ 0x9388, 0x9399, 0x939F, 0x938D, 0x93B1, 0x9391, 0x93B2, 0x93A4, /* 0x60 */
+ 0x93A8, 0x93B4, 0x93A3, 0x93A5, 0x95D2, 0x95D3, 0x95D1, 0x96B3, /* 0x60 */
+ 0x96D7, 0x96DA, 0x5DC2, 0x96DF, 0x96D8, 0x96DD, 0x9723, 0x9722, /* 0x70 */
+ 0x9725, 0x97AC, 0x97AE, 0x97A8, 0x97AB, 0x97A4, 0x97AA, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x97A2, 0x97A5, 0x97D7, 0x97D9, 0x97D6, 0x97D8, 0x97FA, /* 0xA0 */
+ 0x9850, 0x9851, 0x9852, 0x98B8, 0x9941, 0x993C, 0x993A, 0x9A0F, /* 0xA0 */
+ 0x9A0B, 0x9A09, 0x9A0D, 0x9A04, 0x9A11, 0x9A0A, 0x9A05, 0x9A07, /* 0xB0 */
+ 0x9A06, 0x9AC0, 0x9ADC, 0x9B08, 0x9B04, 0x9B05, 0x9B29, 0x9B35, /* 0xB0 */
+ 0x9B4A, 0x9B4C, 0x9B4B, 0x9BC7, 0x9BC6, 0x9BC3, 0x9BBF, 0x9BC1, /* 0xC0 */
+ 0x9BB5, 0x9BB8, 0x9BD3, 0x9BB6, 0x9BC4, 0x9BB9, 0x9BBD, 0x9D5C, /* 0xC0 */
+ 0x9D53, 0x9D4F, 0x9D4A, 0x9D5B, 0x9D4B, 0x9D59, 0x9D56, 0x9D4C, /* 0xD0 */
+ 0x9D57, 0x9D52, 0x9D54, 0x9D5F, 0x9D58, 0x9D5A, 0x9E8E, 0x9E8C, /* 0xD0 */
+ 0x9EDF, 0x9F01, 0x9F00, 0x9F16, 0x9F25, 0x9F2B, 0x9F2A, 0x9F29, /* 0xE0 */
+ 0x9F28, 0x9F4C, 0x9F55, 0x5134, 0x5135, 0x5296, 0x52F7, 0x53B4, /* 0xE0 */
+ 0x56AB, 0x56AD, 0x56A6, 0x56A7, 0x56AA, 0x56AC, 0x58DA, 0x58DD, /* 0xF0 */
+ 0x58DB, 0x5912, 0x5B3D, 0x5B3E, 0x5B3F, 0x5DC3, 0x5E70 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F2[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x5FBF, 0x61FB, 0x6507, 0x6510, 0x650D, 0x6509, 0x650C, 0x650E, /* 0x40 */
+ 0x6584, 0x65DE, 0x65DD, 0x66DE, 0x6AE7, 0x6AE0, 0x6ACC, 0x6AD1, /* 0x40 */
+ 0x6AD9, 0x6ACB, 0x6ADF, 0x6ADC, 0x6AD0, 0x6AEB, 0x6ACF, 0x6ACD, /* 0x50 */
+ 0x6ADE, 0x6B60, 0x6BB0, 0x6C0C, 0x7019, 0x7027, 0x7020, 0x7016, /* 0x50 */
+ 0x702B, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701C, /* 0x60 */
+ 0x702A, 0x720C, 0x720A, 0x7207, 0x7202, 0x7205, 0x72A5, 0x72A6, /* 0x60 */
+ 0x72A4, 0x72A3, 0x72A1, 0x74CB, 0x74C5, 0x74B7, 0x74C3, 0x7516, /* 0x70 */
+ 0x7660, 0x77C9, 0x77CA, 0x77C4, 0x77F1, 0x791D, 0x791B, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x7921, 0x791C, 0x7917, 0x791E, 0x79B0, 0x7A67, 0x7A68, /* 0xA0 */
+ 0x7C33, 0x7C3C, 0x7C39, 0x7C2C, 0x7C3B, 0x7CEC, 0x7CEA, 0x7E76, /* 0xA0 */
+ 0x7E75, 0x7E78, 0x7E70, 0x7E77, 0x7E6F, 0x7E7A, 0x7E72, 0x7E74, /* 0xB0 */
+ 0x7E68, 0x7F4B, 0x7F4A, 0x7F83, 0x7F86, 0x7FB7, 0x7FFD, 0x7FFE, /* 0xB0 */
+ 0x8078, 0x81D7, 0x81D5, 0x8264, 0x8261, 0x8263, 0x85EB, 0x85F1, /* 0xC0 */
+ 0x85ED, 0x85D9, 0x85E1, 0x85E8, 0x85DA, 0x85D7, 0x85EC, 0x85F2, /* 0xC0 */
+ 0x85F8, 0x85D8, 0x85DF, 0x85E3, 0x85DC, 0x85D1, 0x85F0, 0x85E6, /* 0xD0 */
+ 0x85EF, 0x85DE, 0x85E2, 0x8800, 0x87FA, 0x8803, 0x87F6, 0x87F7, /* 0xD0 */
+ 0x8809, 0x880C, 0x880B, 0x8806, 0x87FC, 0x8808, 0x87FF, 0x880A, /* 0xE0 */
+ 0x8802, 0x8962, 0x895A, 0x895B, 0x8957, 0x8961, 0x895C, 0x8958, /* 0xE0 */
+ 0x895D, 0x8959, 0x8988, 0x89B7, 0x89B6, 0x89F6, 0x8B50, 0x8B48, /* 0xF0 */
+ 0x8B4A, 0x8B40, 0x8B53, 0x8B56, 0x8B54, 0x8B4B, 0x8B55 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F3[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B51, 0x8B42, 0x8B52, 0x8B57, 0x8C43, 0x8C77, 0x8C76, 0x8C9A, /* 0x40 */
+ 0x8D06, 0x8D07, 0x8D09, 0x8DAC, 0x8DAA, 0x8DAD, 0x8DAB, 0x8E6D, /* 0x40 */
+ 0x8E78, 0x8E73, 0x8E6A, 0x8E6F, 0x8E7B, 0x8EC2, 0x8F52, 0x8F51, /* 0x50 */
+ 0x8F4F, 0x8F50, 0x8F53, 0x8FB4, 0x9140, 0x913F, 0x91B0, 0x91AD, /* 0x50 */
+ 0x93DE, 0x93C7, 0x93CF, 0x93C2, 0x93DA, 0x93D0, 0x93F9, 0x93EC, /* 0x60 */
+ 0x93CC, 0x93D9, 0x93A9, 0x93E6, 0x93CA, 0x93D4, 0x93EE, 0x93E3, /* 0x60 */
+ 0x93D5, 0x93C4, 0x93CE, 0x93C0, 0x93D2, 0x93E7, 0x957D, 0x95DA, /* 0x70 */
+ 0x95DB, 0x96E1, 0x9729, 0x972B, 0x972C, 0x9728, 0x9726, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x97B3, 0x97B7, 0x97B6, 0x97DD, 0x97DE, 0x97DF, 0x985C, /* 0xA0 */
+ 0x9859, 0x985D, 0x9857, 0x98BF, 0x98BD, 0x98BB, 0x98BE, 0x9948, /* 0xA0 */
+ 0x9947, 0x9943, 0x99A6, 0x99A7, 0x9A1A, 0x9A15, 0x9A25, 0x9A1D, /* 0xB0 */
+ 0x9A24, 0x9A1B, 0x9A22, 0x9A20, 0x9A27, 0x9A23, 0x9A1E, 0x9A1C, /* 0xB0 */
+ 0x9A14, 0x9AC2, 0x9B0B, 0x9B0A, 0x9B0E, 0x9B0C, 0x9B37, 0x9BEA, /* 0xC0 */
+ 0x9BEB, 0x9BE0, 0x9BDE, 0x9BE4, 0x9BE6, 0x9BE2, 0x9BF0, 0x9BD4, /* 0xC0 */
+ 0x9BD7, 0x9BEC, 0x9BDC, 0x9BD9, 0x9BE5, 0x9BD5, 0x9BE1, 0x9BDA, /* 0xD0 */
+ 0x9D77, 0x9D81, 0x9D8A, 0x9D84, 0x9D88, 0x9D71, 0x9D80, 0x9D78, /* 0xD0 */
+ 0x9D86, 0x9D8B, 0x9D8C, 0x9D7D, 0x9D6B, 0x9D74, 0x9D75, 0x9D70, /* 0xE0 */
+ 0x9D69, 0x9D85, 0x9D73, 0x9D7B, 0x9D82, 0x9D6F, 0x9D79, 0x9D7F, /* 0xE0 */
+ 0x9D87, 0x9D68, 0x9E94, 0x9E91, 0x9EC0, 0x9EFC, 0x9F2D, 0x9F40, /* 0xF0 */
+ 0x9F41, 0x9F4D, 0x9F56, 0x9F57, 0x9F58, 0x5337, 0x56B2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F4[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x56B5, 0x56B3, 0x58E3, 0x5B45, 0x5DC6, 0x5DC7, 0x5EEE, 0x5EEF, /* 0x40 */
+ 0x5FC0, 0x5FC1, 0x61F9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65DF, /* 0x40 */
+ 0x66E8, 0x66E3, 0x66E4, 0x6AF3, 0x6AF0, 0x6AEA, 0x6AE8, 0x6AF9, /* 0x50 */
+ 0x6AF1, 0x6AEE, 0x6AEF, 0x703C, 0x7035, 0x702F, 0x7037, 0x7034, /* 0x50 */
+ 0x7031, 0x7042, 0x7038, 0x703F, 0x703A, 0x7039, 0x7040, 0x703B, /* 0x60 */
+ 0x7033, 0x7041, 0x7213, 0x7214, 0x72A8, 0x737D, 0x737C, 0x74BA, /* 0x60 */
+ 0x76AB, 0x76AA, 0x76BE, 0x76ED, 0x77CC, 0x77CE, 0x77CF, 0x77CD, /* 0x70 */
+ 0x77F2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x79B2, 0x7A6E, 0x7A6C, 0x7A6D, 0x7AF7, 0x7C49, 0x7C48, /* 0xA0 */
+ 0x7C4A, 0x7C47, 0x7C45, 0x7CEE, 0x7E7B, 0x7E7E, 0x7E81, 0x7E80, /* 0xA0 */
+ 0x7FBA, 0x7FFF, 0x8079, 0x81DB, 0x81D9, 0x820B, 0x8268, 0x8269, /* 0xB0 */
+ 0x8622, 0x85FF, 0x8601, 0x85FE, 0x861B, 0x8600, 0x85F6, 0x8604, /* 0xB0 */
+ 0x8609, 0x8605, 0x860C, 0x85FD, 0x8819, 0x8810, 0x8811, 0x8817, /* 0xC0 */
+ 0x8813, 0x8816, 0x8963, 0x8966, 0x89B9, 0x89F7, 0x8B60, 0x8B6A, /* 0xC0 */
+ 0x8B5D, 0x8B68, 0x8B63, 0x8B65, 0x8B67, 0x8B6D, 0x8DAE, 0x8E86, /* 0xD0 */
+ 0x8E88, 0x8E84, 0x8F59, 0x8F56, 0x8F57, 0x8F55, 0x8F58, 0x8F5A, /* 0xD0 */
+ 0x908D, 0x9143, 0x9141, 0x91B7, 0x91B5, 0x91B2, 0x91B3, 0x940B, /* 0xE0 */
+ 0x9413, 0x93FB, 0x9420, 0x940F, 0x9414, 0x93FE, 0x9415, 0x9410, /* 0xE0 */
+ 0x9428, 0x9419, 0x940D, 0x93F5, 0x9400, 0x93F7, 0x9407, 0x940E, /* 0xF0 */
+ 0x9416, 0x9412, 0x93FA, 0x9409, 0x93F8, 0x940A, 0x93FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F5[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x93FC, 0x940C, 0x93F6, 0x9411, 0x9406, 0x95DE, 0x95E0, 0x95DF, /* 0x40 */
+ 0x972E, 0x972F, 0x97B9, 0x97BB, 0x97FD, 0x97FE, 0x9860, 0x9862, /* 0x40 */
+ 0x9863, 0x985F, 0x98C1, 0x98C2, 0x9950, 0x994E, 0x9959, 0x994C, /* 0x50 */
+ 0x994B, 0x9953, 0x9A32, 0x9A34, 0x9A31, 0x9A2C, 0x9A2A, 0x9A36, /* 0x50 */
+ 0x9A29, 0x9A2E, 0x9A38, 0x9A2D, 0x9AC7, 0x9ACA, 0x9AC6, 0x9B10, /* 0x60 */
+ 0x9B12, 0x9B11, 0x9C0B, 0x9C08, 0x9BF7, 0x9C05, 0x9C12, 0x9BF8, /* 0x60 */
+ 0x9C40, 0x9C07, 0x9C0E, 0x9C06, 0x9C17, 0x9C14, 0x9C09, 0x9D9F, /* 0x70 */
+ 0x9D99, 0x9DA4, 0x9D9D, 0x9D92, 0x9D98, 0x9D90, 0x9D9B, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9DA0, 0x9D94, 0x9D9C, 0x9DAA, 0x9D97, 0x9DA1, 0x9D9A, /* 0xA0 */
+ 0x9DA2, 0x9DA8, 0x9D9E, 0x9DA3, 0x9DBF, 0x9DA9, 0x9D96, 0x9DA6, /* 0xA0 */
+ 0x9DA7, 0x9E99, 0x9E9B, 0x9E9A, 0x9EE5, 0x9EE4, 0x9EE7, 0x9EE6, /* 0xB0 */
+ 0x9F30, 0x9F2E, 0x9F5B, 0x9F60, 0x9F5E, 0x9F5D, 0x9F59, 0x9F91, /* 0xB0 */
+ 0x513A, 0x5139, 0x5298, 0x5297, 0x56C3, 0x56BD, 0x56BE, 0x5B48, /* 0xC0 */
+ 0x5B47, 0x5DCB, 0x5DCF, 0x5EF1, 0x61FD, 0x651B, 0x6B02, 0x6AFC, /* 0xC0 */
+ 0x6B03, 0x6AF8, 0x6B00, 0x7043, 0x7044, 0x704A, 0x7048, 0x7049, /* 0xD0 */
+ 0x7045, 0x7046, 0x721D, 0x721A, 0x7219, 0x737E, 0x7517, 0x766A, /* 0xD0 */
+ 0x77D0, 0x792D, 0x7931, 0x792F, 0x7C54, 0x7C53, 0x7CF2, 0x7E8A, /* 0xE0 */
+ 0x7E87, 0x7E88, 0x7E8B, 0x7E86, 0x7E8D, 0x7F4D, 0x7FBB, 0x8030, /* 0xE0 */
+ 0x81DD, 0x8618, 0x862A, 0x8626, 0x861F, 0x8623, 0x861C, 0x8619, /* 0xF0 */
+ 0x8627, 0x862E, 0x8621, 0x8620, 0x8629, 0x861E, 0x8625 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F6[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8829, 0x881D, 0x881B, 0x8820, 0x8824, 0x881C, 0x882B, 0x884A, /* 0x40 */
+ 0x896D, 0x8969, 0x896E, 0x896B, 0x89FA, 0x8B79, 0x8B78, 0x8B45, /* 0x40 */
+ 0x8B7A, 0x8B7B, 0x8D10, 0x8D14, 0x8DAF, 0x8E8E, 0x8E8C, 0x8F5E, /* 0x50 */
+ 0x8F5B, 0x8F5D, 0x9146, 0x9144, 0x9145, 0x91B9, 0x943F, 0x943B, /* 0x50 */
+ 0x9436, 0x9429, 0x943D, 0x943C, 0x9430, 0x9439, 0x942A, 0x9437, /* 0x60 */
+ 0x942C, 0x9440, 0x9431, 0x95E5, 0x95E4, 0x95E3, 0x9735, 0x973A, /* 0x60 */
+ 0x97BF, 0x97E1, 0x9864, 0x98C9, 0x98C6, 0x98C0, 0x9958, 0x9956, /* 0x70 */
+ 0x9A39, 0x9A3D, 0x9A46, 0x9A44, 0x9A42, 0x9A41, 0x9A3A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9A3F, 0x9ACD, 0x9B15, 0x9B17, 0x9B18, 0x9B16, 0x9B3A, /* 0xA0 */
+ 0x9B52, 0x9C2B, 0x9C1D, 0x9C1C, 0x9C2C, 0x9C23, 0x9C28, 0x9C29, /* 0xA0 */
+ 0x9C24, 0x9C21, 0x9DB7, 0x9DB6, 0x9DBC, 0x9DC1, 0x9DC7, 0x9DCA, /* 0xB0 */
+ 0x9DCF, 0x9DBE, 0x9DC5, 0x9DC3, 0x9DBB, 0x9DB5, 0x9DCE, 0x9DB9, /* 0xB0 */
+ 0x9DBA, 0x9DAC, 0x9DC8, 0x9DB1, 0x9DAD, 0x9DCC, 0x9DB3, 0x9DCD, /* 0xC0 */
+ 0x9DB2, 0x9E7A, 0x9E9C, 0x9EEB, 0x9EEE, 0x9EED, 0x9F1B, 0x9F18, /* 0xC0 */
+ 0x9F1A, 0x9F31, 0x9F4E, 0x9F65, 0x9F64, 0x9F92, 0x4EB9, 0x56C6, /* 0xD0 */
+ 0x56C5, 0x56CB, 0x5971, 0x5B4B, 0x5B4C, 0x5DD5, 0x5DD1, 0x5EF2, /* 0xD0 */
+ 0x6521, 0x6520, 0x6526, 0x6522, 0x6B0B, 0x6B08, 0x6B09, 0x6C0D, /* 0xE0 */
+ 0x7055, 0x7056, 0x7057, 0x7052, 0x721E, 0x721F, 0x72A9, 0x737F, /* 0xE0 */
+ 0x74D8, 0x74D5, 0x74D9, 0x74D7, 0x766D, 0x76AD, 0x7935, 0x79B4, /* 0xF0 */
+ 0x7A70, 0x7A71, 0x7C57, 0x7C5C, 0x7C59, 0x7C5B, 0x7C5A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F7[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7CF4, 0x7CF1, 0x7E91, 0x7F4F, 0x7F87, 0x81DE, 0x826B, 0x8634, /* 0x40 */
+ 0x8635, 0x8633, 0x862C, 0x8632, 0x8636, 0x882C, 0x8828, 0x8826, /* 0x40 */
+ 0x882A, 0x8825, 0x8971, 0x89BF, 0x89BE, 0x89FB, 0x8B7E, 0x8B84, /* 0x50 */
+ 0x8B82, 0x8B86, 0x8B85, 0x8B7F, 0x8D15, 0x8E95, 0x8E94, 0x8E9A, /* 0x50 */
+ 0x8E92, 0x8E90, 0x8E96, 0x8E97, 0x8F60, 0x8F62, 0x9147, 0x944C, /* 0x60 */
+ 0x9450, 0x944A, 0x944B, 0x944F, 0x9447, 0x9445, 0x9448, 0x9449, /* 0x60 */
+ 0x9446, 0x973F, 0x97E3, 0x986A, 0x9869, 0x98CB, 0x9954, 0x995B, /* 0x70 */
+ 0x9A4E, 0x9A53, 0x9A54, 0x9A4C, 0x9A4F, 0x9A48, 0x9A4A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9A49, 0x9A52, 0x9A50, 0x9AD0, 0x9B19, 0x9B2B, 0x9B3B, /* 0xA0 */
+ 0x9B56, 0x9B55, 0x9C46, 0x9C48, 0x9C3F, 0x9C44, 0x9C39, 0x9C33, /* 0xA0 */
+ 0x9C41, 0x9C3C, 0x9C37, 0x9C34, 0x9C32, 0x9C3D, 0x9C36, 0x9DDB, /* 0xB0 */
+ 0x9DD2, 0x9DDE, 0x9DDA, 0x9DCB, 0x9DD0, 0x9DDC, 0x9DD1, 0x9DDF, /* 0xB0 */
+ 0x9DE9, 0x9DD9, 0x9DD8, 0x9DD6, 0x9DF5, 0x9DD5, 0x9DDD, 0x9EB6, /* 0xC0 */
+ 0x9EF0, 0x9F35, 0x9F33, 0x9F32, 0x9F42, 0x9F6B, 0x9F95, 0x9FA2, /* 0xC0 */
+ 0x513D, 0x5299, 0x58E8, 0x58E7, 0x5972, 0x5B4D, 0x5DD8, 0x882F, /* 0xD0 */
+ 0x5F4F, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66EB, /* 0xD0 */
+ 0x6B11, 0x6B12, 0x6B0F, 0x6BCA, 0x705B, 0x705A, 0x7222, 0x7382, /* 0xE0 */
+ 0x7381, 0x7383, 0x7670, 0x77D4, 0x7C67, 0x7C66, 0x7E95, 0x826C, /* 0xE0 */
+ 0x863A, 0x8640, 0x8639, 0x863C, 0x8631, 0x863B, 0x863E, 0x8830, /* 0xF0 */
+ 0x8832, 0x882E, 0x8833, 0x8976, 0x8974, 0x8973, 0x89FE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x8B8C, 0x8B8E, 0x8B8B, 0x8B88, 0x8C45, 0x8D19, 0x8E98, 0x8F64, /* 0x40 */
+ 0x8F63, 0x91BC, 0x9462, 0x9455, 0x945D, 0x9457, 0x945E, 0x97C4, /* 0x40 */
+ 0x97C5, 0x9800, 0x9A56, 0x9A59, 0x9B1E, 0x9B1F, 0x9B20, 0x9C52, /* 0x50 */
+ 0x9C58, 0x9C50, 0x9C4A, 0x9C4D, 0x9C4B, 0x9C55, 0x9C59, 0x9C4C, /* 0x50 */
+ 0x9C4E, 0x9DFB, 0x9DF7, 0x9DEF, 0x9DE3, 0x9DEB, 0x9DF8, 0x9DE4, /* 0x60 */
+ 0x9DF6, 0x9DE1, 0x9DEE, 0x9DE6, 0x9DF2, 0x9DF0, 0x9DE2, 0x9DEC, /* 0x60 */
+ 0x9DF4, 0x9DF3, 0x9DE8, 0x9DED, 0x9EC2, 0x9ED0, 0x9EF2, 0x9EF3, /* 0x70 */
+ 0x9F06, 0x9F1C, 0x9F38, 0x9F37, 0x9F36, 0x9F43, 0x9F4F, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9F71, 0x9F70, 0x9F6E, 0x9F6F, 0x56D3, 0x56CD, 0x5B4E, /* 0xA0 */
+ 0x5C6D, 0x652D, 0x66ED, 0x66EE, 0x6B13, 0x705F, 0x7061, 0x705D, /* 0xA0 */
+ 0x7060, 0x7223, 0x74DB, 0x74E5, 0x77D5, 0x7938, 0x79B7, 0x79B6, /* 0xB0 */
+ 0x7C6A, 0x7E97, 0x7F89, 0x826D, 0x8643, 0x8838, 0x8837, 0x8835, /* 0xB0 */
+ 0x884B, 0x8B94, 0x8B95, 0x8E9E, 0x8E9F, 0x8EA0, 0x8E9D, 0x91BE, /* 0xC0 */
+ 0x91BD, 0x91C2, 0x946B, 0x9468, 0x9469, 0x96E5, 0x9746, 0x9743, /* 0xC0 */
+ 0x9747, 0x97C7, 0x97E5, 0x9A5E, 0x9AD5, 0x9B59, 0x9C63, 0x9C67, /* 0xD0 */
+ 0x9C66, 0x9C62, 0x9C5E, 0x9C60, 0x9E02, 0x9DFE, 0x9E07, 0x9E03, /* 0xD0 */
+ 0x9E06, 0x9E05, 0x9E00, 0x9E01, 0x9E09, 0x9DFF, 0x9DFD, 0x9E04, /* 0xE0 */
+ 0x9EA0, 0x9F1E, 0x9F46, 0x9F74, 0x9F75, 0x9F76, 0x56D4, 0x652E, /* 0xE0 */
+ 0x65B8, 0x6B18, 0x6B19, 0x6B17, 0x6B1A, 0x7062, 0x7226, 0x72AA, /* 0xF0 */
+ 0x77D8, 0x77D9, 0x7939, 0x7C69, 0x7C6B, 0x7CF6, 0x7E9A /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* F9_D6-F9_FE: is MS950 extension */
+
+sal_uInt16 const aImplDBCSToUniTab_BIG5_F9[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x7E98, 0x7E9B, 0x7E99, 0x81E0, 0x81E1, 0x8646, 0x8647, 0x8648, /* 0x40 */
+ 0x8979, 0x897A, 0x897C, 0x897B, 0x89FF, 0x8B98, 0x8B99, 0x8EA5, /* 0x40 */
+ 0x8EA4, 0x8EA3, 0x946E, 0x946D, 0x946F, 0x9471, 0x9473, 0x9749, /* 0x50 */
+ 0x9872, 0x995F, 0x9C68, 0x9C6E, 0x9C6D, 0x9E0B, 0x9E0D, 0x9E10, /* 0x50 */
+ 0x9E0F, 0x9E12, 0x9E11, 0x9EA1, 0x9EF5, 0x9F09, 0x9F47, 0x9F78, /* 0x60 */
+ 0x9F7B, 0x9F7A, 0x9F79, 0x571E, 0x7066, 0x7C6F, 0x883C, 0x8DB2, /* 0x60 */
+ 0x8EA6, 0x91C3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9A60, 0x9C74, /* 0x70 */
+ 0x9C73, 0x9C71, 0x9C75, 0x9E14, 0x9E13, 0x9EF6, 0x9F0A, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0x9FA4, 0x7068, 0x7065, 0x7CF7, 0x866A, 0x883E, 0x883D, /* 0xA0 */
+ 0x883F, 0x8B9E, 0x8C9C, 0x8EA9, 0x8EC9, 0x974B, 0x9873, 0x9874, /* 0xA0 */
+ 0x98CC, 0x9961, 0x99AB, 0x9A64, 0x9A66, 0x9A67, 0x9B24, 0x9E15, /* 0xB0 */
+ 0x9E17, 0x9F48, 0x6207, 0x6B1E, 0x7227, 0x864C, 0x8EA8, 0x9482, /* 0xB0 */
+ 0x9480, 0x9481, 0x9A69, 0x9A68, 0x9B2E, 0x9E19, 0x7229, 0x864B, /* 0xC0 */
+ 0x8B9F, 0x9483, 0x9C79, 0x9EB7, 0x7675, 0x9A6B, 0x9C7A, 0x9E1D, /* 0xC0 */
+ 0x7069, 0x706A, 0x9EA4, 0x9F7E, 0x9F49, 0x9F98, 0x7881, 0x92B9, /* 0xD0 */
+ 0x88CF, 0x58BB, 0x6052, 0x7CA7, 0x5AFA, 0x2554, 0x2566, 0x2557, /* 0xD0 */
+ 0x2560, 0x256C, 0x2563, 0x255A, 0x2569, 0x255D, 0x2552, 0x2564, /* 0xE0 */
+ 0x2555, 0x255E, 0x256A, 0x2561, 0x2558, 0x2567, 0x255B, 0x2553, /* 0xE0 */
+ 0x2565, 0x2556, 0x255F, 0x256B, 0x2562, 0x2559, 0x2568, 0x255C, /* 0xF0 */
+ 0x2551, 0x2550, 0x256D, 0x256E, 0x2570, 0x256F, 0x2593 /* 0xF0 */
+};
diff --git a/sal/textenc/tcvttcn2.tab b/sal/textenc/tcvttcn2.tab
new file mode 100644
index 000000000..8fefa230b
--- /dev/null
+++ b/sal/textenc/tcvttcn2.tab
@@ -0,0 +1,3706 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* ======================================================================= */
+
+/* This file contain the UniCode to DBCS tables for the following */
+/* chinese traditional (Taiwan/HongKong) charsets: */
+/* BIG5, MS950, APPLE_CHINTRAD */
+
+/* ======================================================================= */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xA246, 0xA247, 0, 0xA244, 0, 0xA1B1, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1C2, /* 0xA0 */
+ 0xA258, 0xA1D3, 0, 0, 0, 0, 0, 0xA150, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1D1, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1D2 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLECHINTRAD_00[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0x00A0, 0, 0xA246, 0xA247, 0, 0xA244, 0, 0xA1B1, /* 0xA0 */
+ 0, 0x00FD, 0, 0, 0, 0, 0, 0xA1C2, /* 0xA0 */
+ 0xA258, 0xA1D3, 0, 0, 0, 0, 0, 0xA145, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1D1, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1D2 /* 0xF0 */
+ /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_02[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA3BE, /* 0xC0 */
+ 0, 0xA3BC, 0xA3BD, 0xA3BF, 0, 0xA1C5, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xA3BB /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_03[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA344, 0xA345, 0xA346, 0xA347, 0xA348, 0xA349, 0xA34A, /* 0x90 */
+ 0xA34B, 0xA34C, 0xA34D, 0xA34E, 0xA34F, 0xA350, 0xA351, 0xA352, /* 0x90 */
+ 0xA353, 0xA354, 0, 0xA355, 0xA356, 0xA357, 0xA358, 0xA359, /* 0xA0 */
+ 0xA35A, 0xA35B, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0xA35C, 0xA35D, 0xA35E, 0xA35F, 0xA360, 0xA361, 0xA362, /* 0xB0 */
+ 0xA363, 0xA364, 0xA365, 0xA366, 0xA367, 0xA368, 0xA369, 0xA36A, /* 0xB0 */
+ 0xA36B, 0xA36C, 0, 0xA36D, 0xA36E, 0xA36F, 0xA370, 0xA371, /* 0xC0 */
+ 0xA372, 0xA373 /* 0xC0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* only defined in BIG5, but we convert back to this codes in all systems */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_04[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7B3, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xC7B1, 0xC7B2, 0xC7B4, 0xC7B5, /* 0x10 */
+ 0xC7B6, 0xC7B7, 0xC7B8, 0xC7B9, 0xC7BA, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xC7BB, 0xC7BC, 0xC7BD, 0xC7BE, 0xC7BF, /* 0x20 */
+ 0xC7C0, 0xC7C1, 0xC7C2, 0xC7C3, 0xC7C4, 0xC7C5, 0xC7C6, 0xC7C7, /* 0x20 */
+ 0xC7C8, 0xC7C9, 0xC7CA, 0xC7CB, 0xC7CC, 0xC7CD, 0xC7CF, 0xC7D0, /* 0x30 */
+ 0xC7D1, 0xC7D2, 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6, 0xC7D7, 0xC7D8, /* 0x30 */
+ 0xC7D9, 0xC7DA, 0xC7DB, 0xC7DC, 0xC7DD, 0xC7DE, 0xC7DF, 0xC7E0, /* 0x40 */
+ 0xC7E1, 0xC7E2, 0xC7E3, 0xC7E4, 0xC7E5, 0xC7E6, 0xC7E7, 0xC7E8, /* 0x40 */
+ 0, 0xC7CE /* 0x50 */
+ /* 0x50 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_20[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA156, 0xA158, 0, 0, 0, /* 0x10 */
+ 0xA1A5, 0xA1A6, 0, 0, 0xA1A7, 0xA1A8, 0, 0, /* 0x10 */
+ 0, 0, 0xA145, 0, 0, 0xA14C, 0xA14B, 0xA145, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xA1AC, 0, 0, 0xA1AB, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xA1B0, 0, 0, 0xA1C2, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xA3E1 /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA24A, 0, 0xA1C1, 0, 0, /* 0x00 */
+ 0, 0xA24B, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA2B9, 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, 0xA2BF, 0xA2C0, /* 0x60 */
+ 0xA2C1, 0xA2C2, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xA1F6, 0xA1F4, 0xA1F7, 0xA1F5, 0, 0, 0xA1F8, 0xA1F9, /* 0x90 */
+ 0xA1FB, 0xA1FA /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLECHINTRAD_21[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA24A, 0, 0xA1C1, 0, 0, /* 0x00 */
+ 0, 0xA24B, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0x00FE, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA2B9, 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, 0xA2BF, 0xA2C0, /* 0x60 */
+ 0xA2C1, 0xA2C2, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xA1F6, 0xA1F4, 0xA1F7, 0xA1F5, 0, 0, 0xA1F8, 0xA1F9, /* 0x90 */
+ 0xA1FB, 0xA1FA /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_22[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA241, 0, 0, /* 0x10 */
+ 0, 0, 0xA1D4, 0, 0, 0, 0xA1DB, 0xA1E8, /* 0x10 */
+ 0xA1E7, 0, 0, 0xA1FD, 0, 0xA1FC, 0, 0, /* 0x20 */
+ 0, 0xA1E4, 0xA1E5, 0xA1EC, 0, 0, 0xA1ED, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xA1EF, 0xA1EE, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xA1E3, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xA1DC, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xA1DA, 0xA1DD, 0, 0, 0, 0, 0xA1D8, 0xA1D9, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xA1F2, 0, 0, /* 0x90 */
+ 0, 0xA1F3, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xA1E6, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA1E9, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xA14B /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* only defined in BIG5, but we convert back to this codes in all systems */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_24[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC7E9, 0xC7EA, 0xC7EB, 0xC7EC, 0xC7ED, 0xC7EE, 0xC7EF, 0xC7F0, /* 0x60 */
+ 0xC7F1, 0xC7F2, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xC7F3, 0xC7F4, 0xC7F5, 0xC7F6, /* 0x70 */
+ 0xC7F7, 0xC7F8, 0xC7F9, 0xC7FA, 0xC7FB, 0xC7FC /* 0x70 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_25[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA277, 0, 0xA278, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xA27A, 0, 0, 0, /* 0x00 */
+ 0xA27B, 0, 0, 0, 0xA27C, 0, 0, 0, /* 0x10 */
+ 0xA27D, 0, 0, 0, 0xA275, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xA274, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xA273, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xA272, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xA271, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xA2A4, 0xF9F8, 0xF9E6, 0xF9EF, 0xF9DD, 0xF9E8, 0xF9F1, 0xF9DF, /* 0x50 */
+ 0xF9EC, 0xF9F5, 0xF9E3, 0xF9EE, 0xF9F7, 0xF9E5, 0xA2A5, 0xF9F2, /* 0x50 */
+ 0xF9E0, 0xA2A7, 0xF9F4, 0xF9E2, 0xF9E7, 0xF9F0, 0xF9DE, 0xF9ED, /* 0x60 */
+ 0xF9F6, 0xF9E4, 0xA2A6, 0xF9F3, 0xF9E1, 0xA27E, 0xA2A1, 0xA2A3, /* 0x60 */
+ 0xA2A2, 0xA2AC, 0xA2AD, 0xA2AE, 0xA15A, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xA262, 0xA263, 0xA264, 0xA265, 0xA266, 0xA267, 0xA268, /* 0x80 */
+ 0xA269, 0xA270, 0xA26F, 0xA26E, 0xA26D, 0xA26C, 0xA26B, 0xA26A, /* 0x80 */
+ 0, 0, 0, 0xF9FE, 0xA276, 0xA279, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xA1BD, 0xA1BC, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xA1B6, 0xA1B5, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xA1BF, 0xA1BE, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xA1BB, 0xA1BA, /* 0xC0 */
+ 0, 0, 0, 0xA1B3, 0, 0, 0xA1B7, 0xA1B4, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xA2A8, 0xA2A9, 0xA2AB, 0xA2AA /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_26[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1B9, 0xA1B8, 0, /* 0x00 */
+ 0, 0xA1F3, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xA1F0, 0xA1F2, 0xA1F1 /* 0x40 */
+ /* 0x40 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* all values with 0xC6.. or 0xC7.. only defined in BIG5, but we convert back */
+/* to this codes in all systems */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_30[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA140, 0xA142, 0xA143, 0xA1B2, 0, 0xC6A4, 0, 0, /* 0x00 */
+ 0xA171, 0xA172, 0xA16D, 0xA16E, 0xA175, 0xA176, 0xA179, 0xA17A, /* 0x00 */
+ 0xA169, 0xA16A, 0xA245, 0, 0xA165, 0xA166, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xA1A9, 0xA1AA, 0, /* 0x10 */
+ 0, 0xA2C3, 0xA2C4, 0xA2C5, 0xA2C6, 0xA2C7, 0xA2C8, 0xA2C9, /* 0x20 */
+ 0xA2CA, 0xA2CB, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xC6A5, 0xC6A6, 0xC6A7, 0xC6A8, 0xC6A9, 0xC6AA, 0xC6AB, /* 0x40 */
+ 0xC6AC, 0xC6AD, 0xC6AE, 0xC6AF, 0xC6B0, 0xC6B1, 0xC6B2, 0xC6B3, /* 0x40 */
+ 0xC6B4, 0xC6B5, 0xC6B6, 0xC6B7, 0xC6B8, 0xC6B9, 0xC6BA, 0xC6BB, /* 0x50 */
+ 0xC6BC, 0xC6BD, 0xC6BE, 0xC6BF, 0xC6C0, 0xC6C1, 0xC6C2, 0xC6C3, /* 0x50 */
+ 0xC6C4, 0xC6C5, 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9, 0xC6CA, 0xC6CB, /* 0x60 */
+ 0xC6CC, 0xC6CD, 0xC6CE, 0xC6CF, 0xC6D0, 0xC6D1, 0xC6D2, 0xC6D3, /* 0x60 */
+ 0xC6D4, 0xC6D5, 0xC6D6, 0xC6D7, 0xC6D8, 0xC6D9, 0xC6DA, 0xC6DB, /* 0x70 */
+ 0xC6DC, 0xC6DD, 0xC6DE, 0xC6DF, 0xC6E0, 0xC6E1, 0xC6E2, 0xC6E3, /* 0x70 */
+ 0xC6E4, 0xC6E5, 0xC6E6, 0xC6E7, 0xC6E8, 0xC6E9, 0xC6EA, 0xC6EB, /* 0x80 */
+ 0xC6EC, 0xC6ED, 0xC6EE, 0xC6EF, 0xC6F0, 0xC6F1, 0xC6F2, 0xC6F3, /* 0x80 */
+ 0xC6F4, 0xC6F5, 0xC6F6, 0xC6F7, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xC6A2, 0xC6A3, 0, /* 0x90 */
+ 0, 0xC6F8, 0xC6F9, 0xC6FA, 0xC6FB, 0xC6FC, 0xC6FD, 0xC6FE, /* 0xA0 */
+ 0xC740, 0xC741, 0xC742, 0xC743, 0xC744, 0xC745, 0xC746, 0xC747, /* 0xA0 */
+ 0xC748, 0xC749, 0xC74A, 0xC74B, 0xC74C, 0xC74D, 0xC74E, 0xC74F, /* 0xB0 */
+ 0xC750, 0xC751, 0xC752, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, /* 0xB0 */
+ 0xC758, 0xC759, 0xC75A, 0xC75B, 0xC75C, 0xC75D, 0xC75E, 0xC75F, /* 0xC0 */
+ 0xC760, 0xC761, 0xC762, 0xC763, 0xC764, 0xC765, 0xC766, 0xC767, /* 0xC0 */
+ 0xC768, 0xC769, 0xC76A, 0xC76B, 0xC76C, 0xC76D, 0xC76E, 0xC76F, /* 0xD0 */
+ 0xC770, 0xC771, 0xC772, 0xC773, 0xC774, 0xC775, 0xC776, 0xC777, /* 0xD0 */
+ 0xC778, 0xC779, 0xC77A, 0xC77B, 0xC77C, 0xC77D, 0xC77E, 0xC7A1, /* 0xE0 */
+ 0xC7A2, 0xC7A3, 0xC7A4, 0xC7A5, 0xC7A6, 0xC7A7, 0xC7A8, 0xC7A9, /* 0xE0 */
+ 0xC7AA, 0xC7AB, 0xC7AC, 0xC7AD, 0xC7AE, 0xC7AF, 0xC7B0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0, 0xC6A1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_31[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA374, 0xA375, 0xA376, /* 0x00 */
+ 0xA377, 0xA378, 0xA379, 0xA37A, 0xA37B, 0xA37C, 0xA37D, 0xA37E, /* 0x00 */
+ 0xA3A1, 0xA3A2, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA3A7, 0xA3A8, /* 0x10 */
+ 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, 0xA3B0, /* 0x10 */
+ 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, 0xA3B8, /* 0x20 */
+ 0xA3B9, 0xA3BA /* 0x20 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_32[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA1C0 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_33[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x80 */
+ 0xA255, 0xA256, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xA250, 0xA251, 0xA252, 0, /* 0x90 */
+ 0, 0xA254, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xA257, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xA253, 0, /* 0xC0 */
+ 0, 0xA1EB, 0xA1EA, 0, 0, 0xA24F /* 0xD0 */
+ /* 0xD0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_4E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA440, 0xA442, 0, 0xA443, 0, 0, 0, 0xC945, /* 0x00 */
+ 0xA456, 0xA454, 0xA457, 0xA455, 0xC946, 0xA4A3, 0xC94F, 0xC94D, /* 0x00 */
+ 0xA4A2, 0xA4A1, 0, 0, 0xA542, 0xA541, 0xA540, 0, /* 0x10 */
+ 0xA543, 0xA4FE, 0, 0, 0, 0, 0xA5E0, 0xA5E1, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xA8C3, 0, /* 0x20 */
+ 0, 0, 0, 0xA458, 0, 0xA4A4, 0xC950, 0, /* 0x20 */
+ 0xA4A5, 0xC963, 0xA6EA, 0xCBB1, 0, 0, 0, 0, /* 0x30 */
+ 0xA459, 0xA4A6, 0, 0xA544, 0xC964, 0, 0, 0, /* 0x30 */
+ 0, 0, 0xC940, 0xA444, 0, 0xA45B, 0, 0xC947, /* 0x40 */
+ 0xA45C, 0, 0, 0xA4A7, 0, 0xA545, 0xA547, 0xA546, /* 0x40 */
+ 0, 0, 0xA5E2, 0xA5E3, 0, 0, 0xA8C4, 0, /* 0x50 */
+ 0xADBC, 0xA441, 0, 0, 0xC941, 0xA445, 0xA45E, 0xA45D, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xA5E4, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xA8C5, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xB0AE, 0xD44B, /* 0x70 */
+ 0, 0, 0xB6C3, 0xDCB1, 0xDCB2, 0, 0xA446, 0, /* 0x80 */
+ 0xA4A9, 0, 0, 0xA8C6, 0xA447, 0xC948, 0xA45F, 0, /* 0x80 */
+ 0, 0xA4AA, 0xA4AC, 0xC951, 0xA4AD, 0xA4AB, 0, 0, /* 0x90 */
+ 0, 0xA5E5, 0, 0xA8C7, 0, 0, 0xA8C8, 0xAB45, /* 0x90 */
+ 0, 0xA460, 0xA4AE, 0, 0xA5E6, 0xA5E8, 0xA5E7, 0, /* 0xA0 */
+ 0xA6EB, 0, 0, 0xA8C9, 0xA8CA, 0xAB46, 0xAB47, 0, /* 0xA0 */
+ 0, 0, 0, 0xADBD, 0, 0, 0xDCB3, 0, /* 0xB0 */
+ 0, 0xF6D6, 0xA448, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xA4B0, 0xA4AF, 0xC952, 0xA4B1, 0xA4B7, 0, 0xA4B2, 0xA4B3, /* 0xC0 */
+ 0xC954, 0xC953, 0xA4B5, 0xA4B6, 0, 0xA4B4, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xA54A, 0xA54B, 0xA54C, 0xA54D, /* 0xD0 */
+ 0xA549, 0xA550, 0xC96A, 0, 0xC966, 0xC969, 0xA551, 0xA561, /* 0xD0 */
+ 0, 0xC968, 0, 0xA54E, 0xA54F, 0xA548, 0, 0, /* 0xE0 */
+ 0xC965, 0xC967, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xA5F5, 0xC9B0, 0xA5F2, 0xA5F6, 0xC9BA, 0xC9AE, 0xA5F3, 0xC9B2, /* 0xF0 */
+ 0, 0, 0, 0xA5F4, 0, 0xA5F7, 0, 0xA5E9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_4F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC9B1, 0xA5F8, 0xC9B5, 0, 0xC9B9, 0xC9B6, 0, 0, /* 0x00 */
+ 0xC9B3, 0xA5EA, 0xA5EC, 0xA5F9, 0, 0xA5EE, 0xC9AB, 0xA5F1, /* 0x00 */
+ 0xA5EF, 0xA5F0, 0xC9BB, 0xC9B8, 0xC9AF, 0xA5ED, 0, 0, /* 0x10 */
+ 0xC9AC, 0xA5EB, 0, 0, 0, 0xC9B4, 0, 0, /* 0x10 */
+ 0, 0, 0xC9B7, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0xC9AD, 0xCA66, 0, 0xA742, /* 0x20 */
+ 0xA6F4, 0, 0, 0xCA67, 0xA6F1, 0, 0xA744, 0, /* 0x30 */
+ 0xA6F9, 0, 0xA6F8, 0xCA5B, 0xA6FC, 0xA6F7, 0xCA60, 0xCA68, /* 0x30 */
+ 0, 0xCA64, 0, 0xA6FA, 0, 0, 0xA6FD, 0xA6EE, /* 0x40 */
+ 0xA747, 0xCA5D, 0, 0, 0xCBBD, 0xA6EC, 0xA743, 0xA6ED, /* 0x40 */
+ 0xA6F5, 0xA6F6, 0xCA62, 0xCA5E, 0xA6FB, 0xA6F3, 0xCA5A, 0xA6EF, /* 0x50 */
+ 0xCA65, 0xA745, 0xA748, 0xA6F2, 0xA740, 0xA746, 0xA6F0, 0xCA63, /* 0x50 */
+ 0xA741, 0xCA69, 0xCA5C, 0xA6FE, 0xCA5F, 0, 0, 0xCA61, /* 0x60 */
+ 0, 0xA8D8, 0xCBBF, 0xCBCB, 0xA8D0, 0, 0xCBCC, 0xA8CB, /* 0x60 */
+ 0xA8D5, 0, 0, 0xA8CE, 0xCBB9, 0xA8D6, 0xCBB8, 0xCBBC, /* 0x70 */
+ 0xCBC3, 0xCBC1, 0xA8DE, 0xA8D9, 0xCBB3, 0xCBB5, 0xA8DB, 0xA8CF, /* 0x70 */
+ 0xCBB6, 0xCBC2, 0xCBC9, 0xA8D4, 0xCBBB, 0xCBB4, 0xA8D3, 0xCBB7, /* 0x80 */
+ 0xA8D7, 0xCBBA, 0, 0xA8D2, 0, 0xA8CD, 0, 0xA8DC, /* 0x80 */
+ 0xCBC4, 0xA8DD, 0xCBC8, 0, 0xCBC6, 0xCBCA, 0xA8DA, 0xCBBE, /* 0x90 */
+ 0xCBB2, 0, 0xCBC0, 0xA8D1, 0xCBC5, 0xA8CC, 0xCBC7, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xAB56, 0xAB4A, /* 0xA0 */
+ 0, 0, 0xCDE0, 0xCDE8, 0, 0xAB49, 0xAB51, 0xAB5D, /* 0xB0 */
+ 0, 0xCDEE, 0xCDEC, 0xCDE7, 0, 0, 0, 0xAB4B, /* 0xB0 */
+ 0xCDED, 0xCDE3, 0xAB59, 0xAB50, 0xAB58, 0xCDDE, 0, 0xCDEA, /* 0xC0 */
+ 0, 0xCDE1, 0xAB54, 0xCDE2, 0, 0xCDDD, 0xAB5B, 0xAB4E, /* 0xC0 */
+ 0xAB57, 0xAB4D, 0, 0xCDDF, 0xCDE4, 0, 0xCDEB, 0xAB55, /* 0xD0 */
+ 0xAB52, 0xCDE6, 0xAB5A, 0xCDE9, 0xCDE5, 0xAB4F, 0xAB5C, 0xAB53, /* 0xD0 */
+ 0xAB4C, 0xAB48, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xCDEF, 0, 0xADD7, 0xADC1, /* 0xE0 */
+ 0, 0xADD1, 0, 0xADD6, 0xD0D0, 0xD0CF, 0xD0D4, 0xD0D5, /* 0xF0 */
+ 0xADC4, 0, 0xADCD, 0, 0, 0, 0xADDA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_50[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xADCE, 0, 0, 0, 0, 0xD0C9, 0xADC7, 0xD0CA, /* 0x00 */
+ 0, 0xADDC, 0, 0xADD3, 0xADBE, 0xADBF, 0xD0DD, 0xB0BF, /* 0x00 */
+ 0, 0xADCC, 0xADCB, 0xD0CB, 0xADCF, 0xD45B, 0xADC6, 0xD0D6, /* 0x10 */
+ 0xADD5, 0xADD4, 0xADCA, 0xD0CE, 0xD0D7, 0, 0xD0C8, 0xADC9, /* 0x10 */
+ 0xD0D8, 0xADD2, 0xD0CC, 0xADC0, 0, 0xADC3, 0xADC2, 0xD0D9, /* 0x20 */
+ 0xADD0, 0xADC5, 0xADD9, 0xADDB, 0xD0D3, 0xADD8, 0, 0xD0DB, /* 0x20 */
+ 0xD0CD, 0xD0DC, 0, 0xD0D1, 0, 0xD0DA, 0, 0xD0D2, /* 0x30 */
+ 0, 0, 0, 0, 0xADC8, 0, 0, 0, /* 0x30 */
+ 0xD463, 0xD457, 0, 0xB0B3, 0, 0xD45C, 0xD462, 0xB0B2, /* 0x40 */
+ 0xD455, 0xB0B6, 0xD459, 0xD452, 0xB0B4, 0xD456, 0xB0B9, 0xB0BE, /* 0x40 */
+ 0, 0xD467, 0, 0xD451, 0, 0xB0BA, 0, 0xD466, /* 0x50 */
+ 0, 0, 0xB0B5, 0xD458, 0xB0B1, 0xD453, 0xD44F, 0xD45D, /* 0x50 */
+ 0xD450, 0xD44E, 0xD45A, 0xD460, 0xD461, 0xB0B7, 0, 0, /* 0x60 */
+ 0xD85B, 0xD45E, 0xD44D, 0xD45F, 0, 0xB0C1, 0xD464, 0xB0C0, /* 0x60 */
+ 0xD44C, 0, 0xD454, 0xD465, 0xB0BC, 0xB0BB, 0xB0B8, 0xB0BD, /* 0x70 */
+ 0, 0, 0xB0AF, 0, 0, 0xB0B0, 0, 0, /* 0x70 */
+ 0xB3C8, 0, 0xD85E, 0xD857, 0, 0xB3C5, 0, 0xD85F, /* 0x80 */
+ 0, 0, 0, 0xD855, 0xD858, 0xB3C4, 0xD859, 0, /* 0x80 */
+ 0, 0xB3C7, 0xD85D, 0, 0xD853, 0xD852, 0xB3C9, 0, /* 0x90 */
+ 0xB3CA, 0xB3C6, 0xB3CB, 0xD851, 0xD85C, 0xD85A, 0xD854, 0, /* 0x90 */
+ 0, 0, 0xB3C3, 0xD856, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xB6CA, 0xB6C4, 0xDCB7, 0xB6CD, /* 0xA0 */
+ 0xDCBD, 0xDCC0, 0xB6C6, 0xB6C7, 0xDCBA, 0xB6C5, 0xDCC3, 0xB6CB, /* 0xB0 */
+ 0xDCC4, 0, 0xDCBF, 0xB6CC, 0, 0xDCB4, 0xB6C9, 0xDCB5, /* 0xB0 */
+ 0, 0xDCBE, 0xDCBC, 0, 0xDCB8, 0xB6C8, 0xDCB6, 0xB6CE, /* 0xC0 */
+ 0xDCBB, 0xDCC2, 0xDCB9, 0xDCC1, 0, 0, 0xB9B6, 0xB9B3, /* 0xC0 */
+ 0, 0xB9B4, 0, 0xE0F9, 0xE0F1, 0xB9B2, 0xB9AF, 0xE0F2, /* 0xD0 */
+ 0, 0, 0xB9B1, 0xE0F5, 0, 0xE0F7, 0, 0, /* 0xD0 */
+ 0xE0FE, 0, 0, 0xE0FD, 0xE0F8, 0xB9AE, 0xE0F0, 0xB9AC, /* 0xE0 */
+ 0xE0F3, 0xB9B7, 0xE0F6, 0, 0xE0FA, 0xB9B0, 0xB9AD, 0xE0FC, /* 0xE0 */
+ 0xE0FB, 0xB9B5, 0, 0xE0F4, 0, 0xBBF8, 0xE4EC, 0, /* 0xF0 */
+ 0xE4E9, 0xBBF9, 0, 0xBBF7, 0, 0xE4F0, 0xE4ED, 0xE4E6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_51[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBBF6, 0, 0xBBFA, 0xE4E7, 0xBBF5, 0xBBFD, 0xE4EA, 0xE4EB, /* 0x00 */
+ 0xBBFB, 0xBBFC, 0xE4F1, 0xE4EE, 0xE4EF, 0, 0, 0, /* 0x00 */
+ 0xBEAA, 0xE8F8, 0xBEA7, 0xE8F5, 0xBEA9, 0xBEAB, 0, 0xE8F6, /* 0x10 */
+ 0xBEA8, 0, 0xE8F7, 0, 0xE8F4, 0, 0, 0xC076, /* 0x10 */
+ 0xECBD, 0xC077, 0xECBB, 0, 0xECBC, 0xECBA, 0xECB9, 0, /* 0x20 */
+ 0, 0xECBE, 0xC075, 0, 0, 0xEFB8, 0xEFB9, 0, /* 0x20 */
+ 0xE4E8, 0xEFB7, 0xC078, 0xC35F, 0xF1EB, 0xF1EC, 0, 0xC4D7, /* 0x30 */
+ 0xC4D8, 0xF5C1, 0xF5C0, 0xC56C, 0xC56B, 0xF7D0, 0, 0xA449, /* 0x30 */
+ 0xA461, 0xA4B9, 0, 0xA4B8, 0xA553, 0xA552, 0xA5FC, 0xA5FB, /* 0x40 */
+ 0xA5FD, 0xA5FA, 0, 0xA74A, 0xA749, 0xA74B, 0, 0, /* 0x40 */
+ 0, 0, 0xA8E0, 0, 0xA8DF, 0xA8E1, 0, 0xAB5E, /* 0x50 */
+ 0, 0xA259, 0xD0DE, 0xA25A, 0xB0C2, 0xA25C, 0xA25B, 0xD860, /* 0x50 */
+ 0, 0xA25D, 0xB9B8, 0xA25E, 0, 0xA44A, 0, 0xA4BA, /* 0x60 */
+ 0xA5FE, 0xA8E2, 0, 0xA44B, 0xA4BD, 0xA4BB, 0xA4BC, 0, /* 0x60 */
+ 0, 0xA640, 0, 0, 0, 0xA74C, 0xA8E4, 0xA8E3, /* 0x70 */
+ 0xA8E5, 0, 0, 0, 0xADDD, 0, 0, 0, /* 0x70 */
+ 0xBEAC, 0, 0, 0, 0, 0, 0, 0xC94E, /* 0x80 */
+ 0, 0xA554, 0xA555, 0, 0, 0xA641, 0, 0xCA6A, /* 0x80 */
+ 0, 0xAB60, 0xAB5F, 0xD0E0, 0xD0DF, 0xB0C3, 0, 0xA4BE, /* 0x90 */
+ 0xC955, 0, 0, 0, 0, 0, 0xCBCD, 0, /* 0x90 */
+ 0xAB61, 0, 0xADE0, 0, 0xADDE, 0xADDF, 0, 0, /* 0xA0 */
+ 0, 0, 0xBEAD, 0, 0xA556, 0, 0, 0, /* 0xA0 */
+ 0xA642, 0xC9BC, 0, 0, 0, 0, 0xA74D, 0xA74E, /* 0xB0 */
+ 0, 0xCA6B, 0, 0, 0xCBCE, 0xA8E6, 0xCBCF, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xD0E2, 0xD0E3, 0xADE3, 0, /* 0xC0 */
+ 0xD0E4, 0, 0xD0E1, 0xADE4, 0xADE2, 0xADE1, 0xD0E5, 0, /* 0xC0 */
+ 0xD468, 0, 0, 0, 0xD861, 0, 0, 0xDCC5, /* 0xD0 */
+ 0xE140, 0, 0, 0, 0xBBFE, 0xBEAE, 0xE8F9, 0, /* 0xD0 */
+ 0xA44C, 0xA45A, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xB0C4, 0xB3CD, 0, 0xB9B9, 0, 0xC942, 0xA4BF, 0, /* 0xF0 */
+ 0xA559, 0xA557, 0xA558, 0, 0, 0xA8E7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_52[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA44D, 0xA44E, 0, 0xA462, 0, 0, 0xA4C0, 0xA4C1, /* 0x00 */
+ 0xA4C2, 0xC9BE, 0xA55A, 0, 0xC96B, 0, 0xA646, 0, /* 0x00 */
+ 0xC9BF, 0xA644, 0xA645, 0xC9BD, 0, 0, 0xA647, 0xA643, /* 0x10 */
+ 0, 0, 0, 0, 0xCA6C, 0xAAEC, 0xCA6D, 0, /* 0x10 */
+ 0, 0xCA6E, 0, 0, 0xA750, 0xA74F, 0, 0, /* 0x20 */
+ 0xA753, 0xA751, 0xA752, 0, 0, 0, 0xA8ED, 0, /* 0x20 */
+ 0xA8EC, 0xCBD4, 0xCBD1, 0xCBD2, 0, 0xCBD0, 0xA8EE, 0xA8EA, /* 0x30 */
+ 0xA8E9, 0, 0xA8EB, 0xA8E8, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xA8EF, 0, 0xAB63, 0xCDF0, 0, 0xCBD3, 0xAB68, /* 0x40 */
+ 0, 0xCDF1, 0xAB64, 0xAB67, 0xAB66, 0xAB65, 0xAB62, 0, /* 0x40 */
+ 0, 0, 0xD0E8, 0, 0xADE7, 0xD0EB, 0xADE5, 0, /* 0x50 */
+ 0, 0, 0xD0E7, 0xADE8, 0xADE6, 0xADE9, 0xD0E9, 0xD0EA, /* 0x50 */
+ 0, 0xD0E6, 0xD0EC, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0xB3D1, 0xB0C5, 0xD469, 0xD46B, 0xD46A, 0xD46C, 0xB0C6, /* 0x60 */
+ 0, 0, 0xB3CE, 0, 0xB3CF, 0xB3D0, 0, 0xB6D0, /* 0x70 */
+ 0xDCC7, 0, 0xDCC6, 0xDCC8, 0xDCC9, 0xB6D1, 0, 0xB6CF, /* 0x70 */
+ 0xE141, 0xE142, 0xB9BB, 0xB9BA, 0xE35A, 0, 0, 0xBC40, /* 0x80 */
+ 0xBC41, 0xBC42, 0xBC44, 0xE4F2, 0xE4F3, 0xBC43, 0, 0, /* 0x80 */
+ 0, 0xBEAF, 0, 0xBEB0, 0, 0, 0xF1ED, 0xF5C3, /* 0x90 */
+ 0xF5C2, 0xF7D1, 0, 0xA44F, 0, 0, 0, 0xA55C, /* 0x90 */
+ 0xA55B, 0, 0, 0xA648, 0, 0, 0xC9C0, 0, /* 0xA0 */
+ 0, 0xA755, 0xA756, 0xA754, 0xA757, 0xCA6F, 0xCA70, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xA8F1, 0xCBD5, 0, 0xA8F0, 0, /* 0xB0 */
+ 0xCDF2, 0xAB6C, 0xCDF3, 0xAB6B, 0, 0, 0, 0xAB69, /* 0xC0 */
+ 0, 0xAB6A, 0, 0, 0, 0xD0ED, 0, 0, /* 0xC0 */
+ 0, 0, 0xB0C7, 0xD46E, 0, 0xB0CA, 0xD46D, 0xB1E5, /* 0xD0 */
+ 0xB0C9, 0xB0C8, 0, 0xB3D4, 0, 0xB3D3, 0xB3D2, 0xB6D2, /* 0xD0 */
+ 0, 0, 0xB6D5, 0xB6D6, 0xB6D4, 0, 0xB6D3, 0, /* 0xE0 */
+ 0, 0xE143, 0, 0xE144, 0, 0, 0, 0xE4F5, /* 0xE0 */
+ 0xBC45, 0xE4F4, 0, 0xBEB1, 0xECBF, 0xC079, 0, 0xF1EE, /* 0xF0 */
+ 0xC455, 0, 0xA463, 0xA4C3, 0xC956, 0, 0xA4C4, 0xA4C5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_53[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA55D, 0xA55E, 0, /* 0x00 */
+ 0xA649, 0xCA71, 0xCBD6, 0xCBD7, 0, 0xAB6D, 0xD0EE, 0xB0CC, /* 0x00 */
+ 0xB0CB, 0xD863, 0xD862, 0, 0, 0xA450, 0xA4C6, 0xA55F, /* 0x10 */
+ 0, 0xB0CD, 0xC943, 0, 0xC96C, 0xA560, 0, 0xC9C2, /* 0x10 */
+ 0xA64B, 0xA64A, 0xC9C1, 0xA758, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xADEA, 0, 0, 0xD46F, 0, 0xB6D7, /* 0x20 */
+ 0xE145, 0xB9BC, 0, 0, 0xE8FA, 0, 0, 0xF3FD, /* 0x30 */
+ 0, 0xA4C7, 0, 0, 0xCBD8, 0xCDF4, 0xB0D0, 0xB0CE, /* 0x30 */
+ 0xB0CF, 0xA451, 0, 0xA464, 0xA2CD, 0xA4CA, 0, 0xA4C9, /* 0x40 */
+ 0xA4C8, 0xA563, 0xA562, 0, 0xC96D, 0xC9C3, 0, 0, /* 0x40 */
+ 0, 0xA8F5, 0xA8F2, 0xA8F4, 0xA8F3, 0, 0, 0xAB6E, /* 0x50 */
+ 0, 0, 0xB3D5, 0, 0xA452, 0, 0xA4CB, 0, /* 0x50 */
+ 0xA565, 0xA564, 0, 0xCA72, 0, 0, 0xA8F6, 0, /* 0x60 */
+ 0, 0, 0, 0, 0xC957, 0, 0xA567, 0xA566, /* 0x60 */
+ 0xA64C, 0xA64D, 0xCA73, 0xA759, 0, 0xA75A, 0, 0xA8F7, /* 0x70 */
+ 0xA8F8, 0xA8F9, 0, 0xAB6F, 0xCDF5, 0, 0, 0xADEB, /* 0x70 */
+ 0, 0, 0xC944, 0, 0xA4CC, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xC9C4, 0, 0, 0, 0xCA74, 0xCA75, /* 0x80 */
+ 0, 0, 0xCBD9, 0, 0xCBDA, 0, 0xCDF7, 0xCDF6, /* 0x90 */
+ 0xCDF9, 0xCDF8, 0xAB70, 0, 0xD470, 0xADED, 0xD0EF, 0xADEC, /* 0x90 */
+ 0, 0, 0, 0, 0xD864, 0xB3D6, 0, 0xD865, /* 0xA0 */
+ 0, 0, 0, 0, 0xE146, 0xB9BD, 0, 0, /* 0xA0 */
+ 0, 0, 0xBC46, 0, 0xF1EF, 0, 0, 0, /* 0xB0 */
+ 0, 0xC958, 0, 0xA568, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xB0D1, 0, 0, 0, 0, /* 0xC0 */
+ 0xA453, 0xA465, 0xA4CE, 0xA4CD, 0, 0xA4CF, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xA8FB, 0, 0xA8FA, 0xA8FC, /* 0xD0 */
+ 0, 0, 0, 0xAB71, 0, 0, 0, 0xADEE, /* 0xD0 */
+ 0, 0xE8FB, 0xC24F, 0xA466, 0xA56A, 0xA579, 0xA574, 0, /* 0xE0 */
+ 0xA56F, 0xA56E, 0xA575, 0xA573, 0xA56C, 0xA57A, 0xA56D, 0xA569, /* 0xE0 */
+ 0xA578, 0xA577, 0xA576, 0xA56B, 0, 0xA572, 0, 0, /* 0xF0 */
+ 0xA571, 0, 0, 0xA57B, 0xA570 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_54[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA653, 0, 0xA659, 0xA655, 0, 0xA65B, 0xC9C5, /* 0x00 */
+ 0xA658, 0xA64E, 0xA651, 0xA654, 0xA650, 0xA657, 0xA65A, 0xA64F, /* 0x00 */
+ 0xA652, 0xA656, 0xA65C, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xCA7E, 0xCA7B, 0, 0xA767, 0xCA7C, 0xA75B, 0xA75D, 0xA775, /* 0x10 */
+ 0xA770, 0, 0, 0, 0xCAA5, 0xCA7D, 0xA75F, 0xA761, /* 0x20 */
+ 0xCAA4, 0xA768, 0xCA78, 0xA774, 0xA776, 0xA75C, 0xA76D, 0, /* 0x20 */
+ 0xCA76, 0xA773, 0, 0xA764, 0, 0xA76E, 0xA76F, 0xCA77, /* 0x30 */
+ 0xA76C, 0xA76A, 0, 0xA76B, 0xA771, 0xCAA1, 0xA75E, 0, /* 0x30 */
+ 0xA772, 0xCAA3, 0xA766, 0xA763, 0, 0xCA7A, 0xA762, 0xCAA6, /* 0x40 */
+ 0xA765, 0, 0xA769, 0, 0, 0, 0xA760, 0xCAA2, /* 0x40 */
+ 0, 0, 0, 0, 0xCA79, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xCBEB, 0xCBEA, 0xA94F, 0xCBED, 0xCBEF, 0xCBE4, 0xCBE7, 0xCBEE, /* 0x60 */
+ 0xA950, 0, 0, 0xCBE1, 0xCBE5, 0, 0, 0xCBE9, /* 0x60 */
+ 0xCE49, 0xA94B, 0xCE4D, 0xA8FD, 0xCBE6, 0xA8FE, 0xA94C, 0xA945, /* 0x70 */
+ 0xA941, 0, 0xCBE2, 0xA944, 0xA949, 0xA952, 0xCBE3, 0xCBDC, /* 0x70 */
+ 0xA943, 0xCBDD, 0xCBDF, 0, 0xA946, 0, 0xA948, 0xCBDB, /* 0x80 */
+ 0xCBE0, 0, 0, 0xA951, 0xA94D, 0xCBE8, 0xA953, 0, /* 0x80 */
+ 0xA94A, 0xCBDE, 0xA947, 0, 0, 0xA942, 0xA940, 0, /* 0x90 */
+ 0xCBEC, 0, 0xA94E, 0, 0, 0, 0, 0, /* 0x90 */
+ 0xCE48, 0xCDFB, 0xCE4B, 0, 0, 0xCDFD, 0xAB78, 0xABA8, /* 0xA0 */
+ 0xAB74, 0xABA7, 0xAB7D, 0xABA4, 0xAB72, 0xCDFC, 0xCE43, 0xABA3, /* 0xA0 */
+ 0xCE4F, 0xABA5, 0, 0xAB79, 0, 0, 0xCE45, 0xCE42, /* 0xB0 */
+ 0xAB77, 0, 0xCDFA, 0xABA6, 0xCE4A, 0xAB7C, 0xCE4C, 0xABA9, /* 0xB0 */
+ 0xAB73, 0xAB7E, 0xAB7B, 0xCE40, 0xABA1, 0xCE46, 0xCE47, 0xAB7A, /* 0xC0 */
+ 0xABA2, 0xAB76, 0, 0, 0, 0, 0xAB75, 0xCDFE, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xCE44, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0xCE4E, 0, /* 0xD0 */
+ 0xD144, 0xADFB, 0xD0F1, 0, 0xD0F6, 0xADF4, 0xAE40, 0xD0F4, /* 0xE0 */
+ 0xADEF, 0xADF9, 0xADFE, 0xD0FB, 0, 0xADFA, 0xADFD, 0, /* 0xE0 */
+ 0, 0xD0FE, 0xADF5, 0xD0F5, 0, 0, 0, 0xD142, /* 0xF0 */
+ 0xD143, 0, 0xADF7, 0xD141, 0xADF3, 0xAE43, 0, 0xD0F8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_55[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xADF1, 0, 0xD146, 0xD0F9, 0xD0FD, 0xADF6, 0xAE42, /* 0x00 */
+ 0xD0FA, 0xADFC, 0xD140, 0xD147, 0xD4A1, 0, 0xD145, 0xAE44, /* 0x00 */
+ 0xADF0, 0xD0FC, 0xD0F3, 0, 0xADF8, 0, 0, 0xD0F2, /* 0x10 */
+ 0, 0, 0xD0F7, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0xD0F0, 0xAE41, /* 0x20 */
+ 0, 0, 0xD477, 0, 0xB0E4, 0xD4A7, 0xB0E2, 0xB0DF, /* 0x20 */
+ 0xD47C, 0xB0DB, 0xD4A2, 0xB0E6, 0xD476, 0xD47B, 0xD47A, 0xADF2, /* 0x30 */
+ 0xB0E1, 0xD4A5, 0, 0xD4A8, 0xD473, 0, 0xB3E8, 0, /* 0x30 */
+ 0xD4A9, 0xB0E7, 0, 0xB0D9, 0xB0D6, 0xD47E, 0xB0D3, 0, /* 0x40 */
+ 0xD4A6, 0, 0xB0DA, 0xD4AA, 0, 0xD474, 0xD4A4, 0xB0DD, /* 0x40 */
+ 0xD475, 0xD478, 0xD47D, 0, 0, 0xB0DE, 0xB0DC, 0xB0E8, /* 0x50 */
+ 0, 0, 0, 0, 0xB0E3, 0, 0xB0D7, 0xB1D2, /* 0x50 */
+ 0, 0xB0D8, 0xD479, 0xB0E5, 0xB0E0, 0xD4A3, 0xB0D5, 0, /* 0x60 */
+ 0, 0, 0xB0D4, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xD471, 0xD472, 0xD86A, /* 0x70 */
+ 0, 0, 0, 0xB3D7, 0xB3DA, 0xD875, 0xB3EE, 0xD878, /* 0x70 */
+ 0xB3D8, 0xD871, 0xB3DE, 0xB3E4, 0xB5BD, 0, 0, 0xB3E2, /* 0x80 */
+ 0xD86E, 0xB3EF, 0xB3DB, 0xB3E3, 0xD876, 0xDCD7, 0xD87B, 0xD86F, /* 0x80 */
+ 0, 0xD866, 0xD873, 0xD86D, 0xB3E1, 0xD879, 0, 0, /* 0x90 */
+ 0xB3DD, 0xB3F1, 0xB3EA, 0, 0xB3DF, 0xB3DC, 0, 0xB3E7, /* 0x90 */
+ 0, 0xD87A, 0xD86C, 0xD872, 0xD874, 0xD868, 0xD877, 0xB3D9, /* 0xA0 */
+ 0xD867, 0, 0xB3E0, 0xB3F0, 0xB3EC, 0xD869, 0xB3E6, 0, /* 0xA0 */
+ 0, 0xB3ED, 0xB3E9, 0xB3E5, 0, 0xD870, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xB3EB, 0, 0, 0, 0xDCD5, /* 0xB0 */
+ 0xDCD1, 0, 0xDCE0, 0xDCCA, 0xDCD3, 0xB6E5, 0xB6E6, 0xB6DE, /* 0xC0 */
+ 0xDCDC, 0xB6E8, 0xDCCF, 0xDCCE, 0xDCCC, 0xDCDE, 0xB6DC, 0xDCD8, /* 0xC0 */
+ 0xDCCD, 0xB6DF, 0xDCD6, 0xB6DA, 0xDCD2, 0xDCD9, 0xDCDB, 0, /* 0xD0 */
+ 0, 0xDCDF, 0xB6E3, 0xDCCB, 0xB6DD, 0xDCD0, 0, 0xB6D8, /* 0xD0 */
+ 0, 0xB6E4, 0xDCDA, 0xB6E0, 0xB6E1, 0xB6E7, 0xB6DB, 0xA25F, /* 0xE0 */
+ 0xB6D9, 0xDCD4, 0, 0, 0, 0, 0, 0xB6E2, /* 0xE0 */
+ 0, 0, 0xDCDD, 0, 0, 0, 0xB9CD, 0xB9C8, /* 0xF0 */
+ 0, 0xE155, 0xE151, 0, 0xE14B, 0xB9C2, 0xB9BE, 0xE154 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_56[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB9BF, 0xE14E, 0xE150, 0, 0xE153, 0, 0xB9C4, 0, /* 0x00 */
+ 0xB9CB, 0xB9C5, 0, 0, 0xE149, 0xB9C6, 0xB9C7, 0xE14C, /* 0x00 */
+ 0xB9CC, 0, 0xE14A, 0xE14F, 0xB9C3, 0xE148, 0xB9C9, 0xB9C1, /* 0x10 */
+ 0, 0, 0, 0xB9C0, 0xE14D, 0xE152, 0, 0xB9CA, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE147, /* 0x20 */
+ 0, 0xBC4D, 0xE547, 0, 0xE544, 0, 0xBC47, 0xBC53, /* 0x20 */
+ 0xBC54, 0, 0xBC4A, 0xE542, 0xBC4C, 0xE4F9, 0xBC52, 0, /* 0x30 */
+ 0xE546, 0xBC49, 0xE548, 0xBC48, 0, 0xE543, 0xE545, 0xBC4B, /* 0x30 */
+ 0xE541, 0xE4FA, 0xE4F7, 0, 0, 0xD86B, 0xE4FD, 0, /* 0x40 */
+ 0xE4F6, 0xE4FC, 0xE4FB, 0, 0xE4F8, 0, 0xBC4F, 0, /* 0x40 */
+ 0, 0, 0, 0xBC4E, 0, 0, 0, 0xBC50, /* 0x50 */
+ 0xE4FE, 0xBEB2, 0xE540, 0, 0, 0, 0xE945, 0, /* 0x50 */
+ 0xE8FD, 0, 0xBEBE, 0xE942, 0xBEB6, 0xBEBA, 0xE941, 0, /* 0x60 */
+ 0xBEB9, 0xBEB5, 0xBEB8, 0xBEB3, 0xBEBD, 0xE943, 0xE8FE, 0xBEBC, /* 0x60 */
+ 0xE8FC, 0xBEBB, 0xE944, 0xE940, 0xBC51, 0, 0xBEBF, 0xE946, /* 0x70 */
+ 0xBEB7, 0xBEB4, 0, 0, 0, 0, 0xECC6, 0xECC8, /* 0x70 */
+ 0xC07B, 0xECC9, 0xECC7, 0xECC5, 0xECC4, 0xC07D, 0xECC3, 0xC07E, /* 0x80 */
+ 0, 0, 0, 0, 0xECC1, 0xECC2, 0xC07A, 0xC0A1, /* 0x80 */
+ 0xC07C, 0, 0, 0xECC0, 0, 0xC250, 0, 0xEFBC, /* 0x90 */
+ 0xEFBA, 0xEFBF, 0xEFBD, 0, 0xEFBB, 0xEFBE, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xC360, 0xF1F2, 0xF1F3, /* 0xA0 */
+ 0xC456, 0, 0xF1F4, 0xF1F0, 0xF1F5, 0xF1F1, 0xC251, 0, /* 0xA0 */
+ 0, 0, 0xF3FE, 0xF441, 0xC459, 0xF440, 0xC458, 0xC457, /* 0xB0 */
+ 0, 0, 0, 0, 0xC45A, 0xF5C5, 0xF5C6, 0, /* 0xB0 */
+ 0xC4DA, 0xC4D9, 0xC4DB, 0xF5C4, 0, 0xF6D8, 0xF6D7, 0, /* 0xC0 */
+ 0xC56D, 0xC56F, 0xC56E, 0xF6D9, 0xC5C8, 0xF8A6, 0, 0, /* 0xC0 */
+ 0, 0xC5F1, 0, 0xF8A5, 0xF8EE, 0, 0, 0xC949, /* 0xD0 */
+ 0, 0, 0xA57D, 0xA57C, 0, 0xA65F, 0xA65E, 0xC9C7, /* 0xD0 */
+ 0xA65D, 0xC9C6, 0, 0, 0xA779, 0xCAA9, 0, 0xCAA8, /* 0xE0 */
+ 0, 0, 0xA777, 0xA77A, 0, 0, 0xCAA7, 0, /* 0xE0 */
+ 0xA778, 0, 0, 0, 0, 0, 0, 0xCBF0, /* 0xF0 */
+ 0, 0xCBF1, 0xA954, 0, 0, 0, 0, 0xABAA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_57[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD148, 0xD149, 0xAE45, 0xAE46, 0, 0, 0xD4AC, /* 0x00 */
+ 0xB0E9, 0xB0EB, 0xD4AB, 0xB0EA, 0xD87C, 0xB3F2, 0, 0, /* 0x00 */
+ 0, 0, 0xB6E9, 0xB6EA, 0xDCE1, 0, 0xB9CF, 0, /* 0x10 */
+ 0xB9CE, 0, 0xE549, 0xE948, 0xE947, 0, 0xF96B, 0xA467, /* 0x10 */
+ 0xC959, 0, 0xC96E, 0xC96F, 0, 0, 0, 0, /* 0x20 */
+ 0xA662, 0xA666, 0xC9C9, 0, 0xA664, 0xA663, 0xC9C8, 0xA665, /* 0x20 */
+ 0xA661, 0, 0, 0xA660, 0xC9CA, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xA7A6, 0, 0, 0xA7A3, 0, /* 0x30 */
+ 0xA77D, 0xCAAA, 0, 0, 0, 0xCAAB, 0, 0xA7A1, /* 0x40 */
+ 0, 0xCAAD, 0xA77B, 0xCAAE, 0xCAAC, 0xA77E, 0xA7A2, 0xA7A5, /* 0x40 */
+ 0xA7A4, 0xA77C, 0xCAAF, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xA959, 0xCBFE, 0, 0xA95B, 0, 0xA95A, 0, /* 0x60 */
+ 0xCC40, 0xA958, 0xA957, 0xCBF5, 0, 0xCBF4, 0, 0xCBF2, /* 0x60 */
+ 0xCBF7, 0xCBF6, 0xCBF3, 0xCBFC, 0xCBFD, 0xCBFA, 0xCBF8, 0xA956, /* 0x70 */
+ 0, 0, 0, 0xCBFB, 0xA95C, 0xCC41, 0, 0, /* 0x70 */
+ 0xCBF9, 0, 0xABAB, 0xA955, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0xABAC, 0xCE54, 0, 0, 0xCE5A, /* 0x80 */
+ 0, 0, 0, 0xABB2, 0xCE58, 0xCE5E, 0, 0xCE55, /* 0x90 */
+ 0xCE59, 0xCE5B, 0xCE5D, 0xCE57, 0, 0xCE56, 0xCE51, 0xCE52, /* 0x90 */
+ 0xABAD, 0, 0xABAF, 0xABAE, 0xCE53, 0xCE5C, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xABB1, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xCE50, 0xD153, 0, /* 0xB0 */
+ 0xD152, 0xD157, 0xD14E, 0, 0xD151, 0xD150, 0, 0xD154, /* 0xB0 */
+ 0, 0xD158, 0xAE47, 0xAE4A, 0, 0, 0xD14F, 0xD155, /* 0xC0 */
+ 0, 0, 0, 0xAE49, 0xD14A, 0, 0xABB0, 0xD4BA, /* 0xC0 */
+ 0xD156, 0, 0xD14D, 0, 0xAE48, 0xD14C, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0xD4B1, 0, 0, 0xB0EC, /* 0xD0 */
+ 0xB0F0, 0xD4C1, 0xD4AF, 0xD4BD, 0xB0F1, 0xD4BF, 0, 0xD4C5, /* 0xE0 */
+ 0, 0xD4C9, 0, 0, 0xD4C0, 0xD4B4, 0xD4BC, 0, /* 0xE0 */
+ 0xD4CA, 0xD4C8, 0xD4BE, 0xD4B9, 0xD4B2, 0xD8A6, 0xD4B0, 0xB0F5, /* 0xF0 */
+ 0xD4B7, 0xB0F6, 0xB0F2, 0xD4AD, 0xD4C3, 0xD4B5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_58[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD4B3, 0xD4C6, 0xB0F3, 0, 0xD4CC, 0xB0ED, 0xB0EF, 0xD4BB, /* 0x00 */
+ 0xD4B6, 0xAE4B, 0xB0EE, 0xD4B8, 0xD4C7, 0xD4CB, 0xD4C2, 0, /* 0x00 */
+ 0xD4C4, 0, 0, 0, 0xD4AE, 0, 0, 0, /* 0x10 */
+ 0, 0xD8A1, 0, 0xD8AA, 0xD8A9, 0xB3FA, 0xD8A2, 0, /* 0x10 */
+ 0xB3FB, 0xB3F9, 0, 0xD8A4, 0xB3F6, 0xD8A8, 0, 0xD8A3, /* 0x20 */
+ 0xD8A5, 0xD87D, 0xB3F4, 0, 0xD8B2, 0xD8B1, 0xD8AE, 0xB3F3, /* 0x20 */
+ 0xB3F7, 0xB3F8, 0xD14B, 0xD8AB, 0xB3F5, 0xB0F4, 0xD8AD, 0xD87E, /* 0x30 */
+ 0xD8B0, 0xD8AF, 0, 0xD8B3, 0, 0xDCEF, 0, 0xD8AC, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0xD8A7, 0xDCE7, 0xB6F4, 0xB6F7, 0xB6F2, 0xDCE6, 0xDCEA, 0xDCE5, /* 0x40 */
+ 0, 0xB6EC, 0xB6F6, 0xDCE2, 0xB6F0, 0xDCE9, 0, 0xB6EE, /* 0x50 */
+ 0xB6ED, 0xDCEC, 0xB6EF, 0xDCEE, 0, 0xDCEB, 0xB6EB, 0, /* 0x50 */
+ 0, 0, 0xB6F5, 0xDCF0, 0xDCE4, 0xDCED, 0, 0, /* 0x60 */
+ 0xDCE3, 0, 0, 0xB6F1, 0, 0xB6F3, 0, 0xDCE8, /* 0x60 */
+ 0, 0xDCF1, 0, 0, 0xE15D, 0xB9D0, 0xE163, 0, /* 0x70 */
+ 0, 0xB9D5, 0xE15F, 0xE166, 0xE157, 0xB9D7, 0xB9D1, 0xE15C, /* 0x70 */
+ 0xBC55, 0xE15B, 0xE164, 0xB9D2, 0, 0xB9D6, 0xE15A, 0xE160, /* 0x80 */
+ 0xE165, 0xE156, 0xB9D4, 0xE15E, 0, 0, 0xE162, 0xE168, /* 0x80 */
+ 0xE158, 0xE161, 0, 0xB9D3, 0xE167, 0, 0, 0, /* 0x90 */
+ 0xE159, 0, 0, 0, 0xBC59, 0xE54B, 0xBC57, 0xBC56, /* 0x90 */
+ 0xE54D, 0xE552, 0, 0xE54E, 0, 0xE551, 0xBC5C, 0, /* 0xA0 */
+ 0xBEA5, 0xBC5B, 0, 0xE54A, 0xE550, 0, 0xBC5A, 0xE54F, /* 0xA0 */
+ 0, 0xE54C, 0, 0xBC58, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xE94D, 0xF9D9, 0xE94F, 0xE94A, 0xBEC1, 0xE94C, /* 0xB0 */
+ 0, 0xBEC0, 0xE94E, 0, 0, 0xBEC3, 0xE950, 0xBEC2, /* 0xC0 */
+ 0xE949, 0xE94B, 0, 0, 0, 0, 0xC0A5, 0xECCC, /* 0xC0 */
+ 0, 0xC0A4, 0xECCD, 0xC0A3, 0xECCB, 0xC0A2, 0xECCA, 0, /* 0xD0 */
+ 0xC253, 0xC252, 0xF1F6, 0xF1F8, 0, 0xF1F7, 0xC361, 0xC362, /* 0xD0 */
+ 0, 0, 0xC363, 0xF442, 0xC45B, 0, 0, 0xF7D3, /* 0xE0 */
+ 0xF7D2, 0xC5F2, 0, 0xA468, 0xA4D0, 0, 0, 0xA7A7, /* 0xE0 */
+ 0, 0, 0, 0, 0xCE5F, 0, 0, 0, /* 0xF0 */
+ 0, 0xB3FC, 0xB3FD, 0, 0xDCF2, 0xB9D8, 0xE169, 0xE553 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_59[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC95A, 0, 0, 0xCAB0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0xCC42, 0xCE60, 0xD159, 0xAE4C, /* 0x00 */
+ 0, 0, 0xF1F9, 0, 0xC4DC, 0xA469, 0xA57E, 0xC970, /* 0x10 */
+ 0, 0xA667, 0xA668, 0, 0xA95D, 0, 0, 0, /* 0x10 */
+ 0xB0F7, 0, 0xB9DA, 0, 0xB9DB, 0xB9D9, 0, 0xA46A, /* 0x20 */
+ 0, 0xA4D1, 0xA4D3, 0xA4D2, 0xC95B, 0xA4D4, 0xA5A1, 0xC971, /* 0x20 */
+ 0, 0xA5A2, 0, 0, 0, 0, 0, 0xA669, /* 0x30 */
+ 0xA66A, 0, 0, 0, 0xC9CB, 0, 0xA7A8, 0, /* 0x30 */
+ 0xCAB1, 0, 0, 0, 0xA961, 0xCC43, 0, 0xA95F, /* 0x40 */
+ 0xA960, 0xA95E, 0xD15A, 0, 0, 0, 0xABB6, 0xABB5, /* 0x40 */
+ 0xABB7, 0xABB4, 0, 0xCE61, 0xA962, 0xABB3, 0, 0xAE4D, /* 0x50 */
+ 0xAE4E, 0, 0xAE4F, 0, 0xD4CD, 0, 0, 0, /* 0x50 */
+ 0xB3FE, 0xD8B4, 0xB0F8, 0, 0, 0, 0, 0xB6F8, /* 0x60 */
+ 0, 0xB9DD, 0xB9DC, 0xE16A, 0, 0xBC5D, 0xBEC4, 0, /* 0x60 */
+ 0xEFC0, 0xF6DA, 0xF7D4, 0xA46B, 0xA5A3, 0, 0xA5A4, 0xC9D1, /* 0x70 */
+ 0xA66C, 0xA66F, 0, 0xC9CF, 0xC9CD, 0xA66E, 0xC9D0, 0xC9D2, /* 0x70 */
+ 0xC9CC, 0xA671, 0xA670, 0xA66D, 0xA66B, 0xC9CE, 0, 0, /* 0x80 */
+ 0, 0, 0xA7B3, 0, 0, 0xA7B0, 0xCAB6, 0xCAB9, /* 0x80 */
+ 0xCAB8, 0, 0xA7AA, 0xA7B2, 0, 0, 0xA7AF, 0xCAB5, /* 0x90 */
+ 0xCAB3, 0xA7AE, 0, 0, 0, 0xA7A9, 0xA7AC, 0, /* 0x90 */
+ 0xCAB4, 0xCABB, 0xCAB7, 0xA7AD, 0xA7B1, 0xA7B4, 0xCAB2, 0xCABA, /* 0xA0 */
+ 0xA7AB, 0, 0, 0, 0, 0, 0xA967, 0xA96F, /* 0xA0 */
+ 0, 0xCC4F, 0xCC48, 0xA970, 0xCC53, 0xCC44, 0xCC4B, 0, /* 0xB0 */
+ 0, 0xA966, 0xCC45, 0xA964, 0xCC4C, 0xCC50, 0xA963, 0, /* 0xB0 */
+ 0xCC51, 0xCC4A, 0, 0xCC4D, 0, 0xA972, 0xA969, 0xCC54, /* 0xC0 */
+ 0xCC52, 0, 0xA96E, 0xA96C, 0xCC49, 0xA96B, 0xCC47, 0xCC46, /* 0xC0 */
+ 0xA96A, 0xA968, 0xA971, 0xA96D, 0xA965, 0, 0xCC4E, 0, /* 0xD0 */
+ 0xABB9, 0, 0xABC0, 0xCE6F, 0xABB8, 0xCE67, 0xCE63, 0, /* 0xD0 */
+ 0xCE73, 0xCE62, 0, 0xABBB, 0xCE6C, 0xABBE, 0xABC1, 0, /* 0xE0 */
+ 0xABBC, 0xCE70, 0xABBF, 0, 0xAE56, 0xCE76, 0xCE64, 0, /* 0xE0 */
+ 0, 0xCE66, 0xCE6D, 0xCE71, 0xCE75, 0xCE72, 0xCE6B, 0xCE6E, /* 0xF0 */
+ 0, 0, 0xCE68, 0xABC3, 0xCE6A, 0xCE69, 0xCE74, 0xABBA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_5A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCE65, 0xABC2, 0, 0xABBD, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xAE5C, 0xD162, 0, 0xAE5B, 0, 0, 0xD160, /* 0x00 */
+ 0, 0xAE50, 0, 0xAE55, 0, 0xD15F, 0xD15C, 0xD161, /* 0x10 */
+ 0xAE51, 0xD15B, 0, 0xAE54, 0xAE52, 0, 0xD163, 0xAE53, /* 0x10 */
+ 0xAE57, 0, 0, 0xAE58, 0, 0xAE5A, 0, 0, /* 0x20 */
+ 0, 0xAE59, 0, 0, 0, 0xD15D, 0xD15E, 0, /* 0x20 */
+ 0, 0, 0, 0xD164, 0, 0xD4D4, 0xB0F9, 0xD8C2, /* 0x30 */
+ 0xD4D3, 0xD4E6, 0, 0, 0xB140, 0, 0xD4E4, 0, /* 0x30 */
+ 0xB0FE, 0xB0FA, 0xD4ED, 0xD4DD, 0xD4E0, 0, 0xB143, 0xD4EA, /* 0x40 */
+ 0xD4E2, 0xB0FB, 0xB144, 0, 0xD4E7, 0xD4E5, 0, 0, /* 0x40 */
+ 0xD4D6, 0xD4EB, 0xD4DF, 0xD4DA, 0, 0xD4D0, 0xD4EC, 0xD4DC, /* 0x50 */
+ 0xD4CF, 0, 0xB142, 0xD4E1, 0xD4EE, 0xD4DE, 0xD4D2, 0xD4D7, /* 0x50 */
+ 0xD4CE, 0, 0xB141, 0, 0xD4DB, 0xD4D8, 0xB0FC, 0xD4D1, /* 0x60 */
+ 0, 0xD4E9, 0xB0FD, 0, 0xD4D9, 0xD4D5, 0, 0, /* 0x60 */
+ 0xD4E8, 0, 0, 0, 0, 0, 0, 0xB440, /* 0x70 */
+ 0xD8BB, 0, 0xD8B8, 0xD8C9, 0xD8BD, 0xD8CA, 0, 0xB442, /* 0x70 */
+ 0, 0, 0, 0xD8C6, 0xD8C3, 0, 0, 0, /* 0x80 */
+ 0, 0, 0xD8C4, 0xD8C7, 0xD8CB, 0, 0xD4E3, 0xD8CD, /* 0x80 */
+ 0xDD47, 0, 0xB443, 0xD8CE, 0xD8B6, 0xD8C0, 0, 0xD8C5, /* 0x90 */
+ 0, 0, 0xB441, 0xB444, 0xD8CC, 0xD8CF, 0xD8BA, 0xD8B7, /* 0x90 */
+ 0, 0, 0xD8B9, 0, 0, 0xD8BE, 0xD8BC, 0xB445, /* 0xA0 */
+ 0, 0xD8C8, 0, 0, 0xD8BF, 0, 0xD8C1, 0xD8B5, /* 0xA0 */
+ 0xDCFA, 0xDCF8, 0xB742, 0xB740, 0xDD43, 0xDCF9, 0xDD44, 0xDD40, /* 0xB0 */
+ 0xDCF7, 0xDD46, 0xDCF6, 0xDCFD, 0xB6FE, 0xB6FD, 0xB6FC, 0xDCFB, /* 0xB0 */
+ 0xDD41, 0xB6F9, 0xB741, 0, 0xDCF4, 0, 0xDCFE, 0xDCF3, /* 0xC0 */
+ 0xDCFC, 0xB6FA, 0xDD42, 0xDCF5, 0xB6FB, 0xDD45, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0xE16E, 0xB9E2, 0xB9E1, /* 0xD0 */
+ 0xB9E3, 0xE17A, 0xE170, 0xE176, 0xE16B, 0xE179, 0xE178, 0xE17C, /* 0xD0 */
+ 0xE175, 0xB9DE, 0xE174, 0xB9E4, 0, 0xE16D, 0xB9DF, 0, /* 0xE0 */
+ 0xE17B, 0xB9E0, 0xE16F, 0xE172, 0xE177, 0xE171, 0xE16C, 0, /* 0xE0 */
+ 0, 0, 0, 0xE173, 0xE555, 0xBC61, 0xE558, 0xE557, /* 0xF0 */
+ 0xE55A, 0xE55C, 0xF9DC, 0xBC5F, 0, 0xE556, 0, 0xE554 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_5B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE55D, 0xE55B, 0xE559, 0, 0xE55F, 0, 0xE55E, /* 0x00 */
+ 0xBC63, 0xBC5E, 0, 0xBC60, 0xBC62, 0, 0, 0xE560, /* 0x00 */
+ 0xE957, 0, 0, 0xE956, 0xE955, 0, 0xE958, 0xE951, /* 0x10 */
+ 0, 0xE952, 0xE95A, 0xE953, 0, 0xBEC5, 0xE95C, 0, /* 0x10 */
+ 0xE95B, 0xE954, 0, 0xECD1, 0xC0A8, 0xECCF, 0xECD4, 0xECD3, /* 0x20 */
+ 0xE959, 0, 0xC0A7, 0, 0xECD2, 0xECCE, 0xECD6, 0xECD5, /* 0x20 */
+ 0xC0A6, 0, 0xECD0, 0, 0xBEC6, 0, 0, 0, /* 0x30 */
+ 0xC254, 0, 0, 0, 0xEFC1, 0xF1FA, 0xF1FB, 0xF1FC, /* 0x30 */
+ 0xC45C, 0, 0, 0xC45D, 0, 0xF443, 0, 0xF5C8, /* 0x40 */
+ 0xF5C7, 0, 0, 0xF6DB, 0xF6DC, 0xF7D5, 0xF8A7, 0, /* 0x40 */
+ 0xA46C, 0xA46D, 0, 0xA46E, 0xA4D5, 0xA5A5, 0xC9D3, 0xA672, /* 0x50 */
+ 0xA673, 0, 0xA7B7, 0xA7B8, 0xA7B6, 0xA7B5, 0, 0xA973, /* 0x50 */
+ 0, 0, 0xCC55, 0xA975, 0xA974, 0xCC56, 0, 0, /* 0x60 */
+ 0, 0xABC4, 0, 0xAE5D, 0xD165, 0, 0xD4F0, 0, /* 0x60 */
+ 0xB145, 0xB447, 0xD4EF, 0xB446, 0, 0xB9E5, 0, 0xE17D, /* 0x70 */
+ 0xBEC7, 0, 0xC0A9, 0xECD7, 0, 0xC45E, 0, 0xC570, /* 0x70 */
+ 0, 0xC972, 0, 0xA5A6, 0xC973, 0xA676, 0, 0xA674, /* 0x80 */
+ 0xA675, 0xA677, 0, 0xA7BA, 0xA7B9, 0, 0xCABC, 0xA7BB, /* 0x80 */
+ 0, 0, 0xCABD, 0xCC57, 0, 0xCC58, 0, 0xA976, /* 0x90 */
+ 0xA978, 0xA97A, 0xA977, 0xA97B, 0xA979, 0, 0, 0, /* 0x90 */
+ 0, 0, 0xABC8, 0xABC5, 0xABC7, 0xABC9, 0xABC6, 0xD166, /* 0xA0 */
+ 0xCE77, 0, 0, 0, 0xD168, 0xD167, 0xAE63, 0, /* 0xA0 */
+ 0xAE5F, 0, 0, 0xAE60, 0xAE62, 0xAE64, 0xAE61, 0, /* 0xB0 */
+ 0xAE66, 0xAE65, 0, 0, 0, 0, 0, 0xB14A, /* 0xB0 */
+ 0xD4F2, 0xD4F1, 0xB149, 0, 0xB148, 0xB147, 0xB14B, 0xB146, /* 0xC0 */
+ 0, 0, 0xD8D5, 0xD8D2, 0xB449, 0xD8D1, 0xD8D6, 0, /* 0xC0 */
+ 0xB44B, 0xD8D4, 0xB448, 0xB44A, 0xD8D3, 0, 0xDD48, 0, /* 0xD0 */
+ 0xDD49, 0xDD4A, 0, 0, 0, 0, 0xB9E6, 0xB9EE, /* 0xD0 */
+ 0xE17E, 0xB9E8, 0xB9EC, 0xE1A1, 0xB9ED, 0xB9E9, 0xB9EA, 0xB9E7, /* 0xE0 */
+ 0xB9EB, 0xBC66, 0xD8D0, 0xBC67, 0xBC65, 0, 0xBC64, 0xE95D, /* 0xE0 */
+ 0xBEC8, 0xECD8, 0xECD9, 0, 0, 0xC364, 0xC45F, 0, /* 0xF0 */
+ 0xA46F, 0, 0xA678 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_5C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xABCA, 0, 0xD169, 0xAE67, 0, 0, 0xB14E, /* 0x00 */
+ 0xB14D, 0xB14C, 0xB44C, 0xB44D, 0xD8D7, 0xB9EF, 0xBEC9, 0xA470, /* 0x00 */
+ 0xC95C, 0xA4D6, 0xC974, 0, 0, 0xC9D4, 0xA679, 0, /* 0x10 */
+ 0, 0, 0xA97C, 0, 0, 0, 0, 0xDD4B, /* 0x10 */
+ 0, 0, 0xA471, 0, 0xA4D7, 0xC9D5, 0, 0, /* 0x20 */
+ 0xCABE, 0, 0xCABF, 0, 0xA7BC, 0, 0, 0, /* 0x20 */
+ 0xD8D8, 0xB44E, 0, 0xDD4C, 0, 0, 0, 0xC0AA, /* 0x30 */
+ 0xA472, 0xA4A8, 0xA4D8, 0xC975, 0xA5A7, 0, 0xA7C0, 0xA7BF, /* 0x30 */
+ 0xA7BD, 0xA7BE, 0, 0, 0xCC59, 0xA97E, 0xA9A1, 0xCC5A, /* 0x40 */
+ 0xA97D, 0, 0, 0xABCE, 0xCE78, 0xABCD, 0xABCB, 0xABCC, /* 0x40 */
+ 0xAE6A, 0xAE68, 0, 0, 0xD16B, 0xAE69, 0xD16A, 0, /* 0x50 */
+ 0xAE5E, 0xD4F3, 0, 0, 0xB150, 0xB151, 0, 0, /* 0x50 */
+ 0xB14F, 0, 0xB9F0, 0xE1A2, 0xBC68, 0xBC69, 0, 0xE561, /* 0x60 */
+ 0xC0AB, 0xEFC2, 0xEFC3, 0, 0xC4DD, 0xF8A8, 0xC94B, 0xA4D9, /* 0x60 */
+ 0, 0xA473, 0, 0xC977, 0xC976, 0, 0, 0, /* 0x70 */
+ 0, 0xA67A, 0xC9D7, 0xC9D8, 0xC9D6, 0, 0xC9D9, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xCAC7, 0, /* 0x80 */
+ 0xCAC2, 0xCAC4, 0xCAC6, 0xCAC3, 0xA7C4, 0xCAC0, 0, 0xCAC1, /* 0x80 */
+ 0xA7C1, 0xA7C2, 0xCAC5, 0xCAC8, 0xA7C3, 0xCAC9, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xCC68, 0, 0xCC62, /* 0x90 */
+ 0xCC5D, 0xA9A3, 0xCC65, 0xCC63, 0xCC5C, 0xCC69, 0xCC6C, 0xCC67, /* 0xA0 */
+ 0xCC60, 0xA9A5, 0xCC66, 0xA9A6, 0xCC61, 0xCC64, 0xCC5B, 0xCC5F, /* 0xA0 */
+ 0xCC6B, 0xA9A7, 0, 0xA9A8, 0, 0xCC5E, 0xCC6A, 0xA9A2, /* 0xB0 */
+ 0xA9A4, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0xCEAB, 0xCEA4, /* 0xC0 */
+ 0xCEAA, 0xCEA3, 0xCEA5, 0xCE7D, 0xCE7B, 0, 0xCEAC, 0xCEA9, /* 0xC0 */
+ 0xCE79, 0, 0xABD0, 0xCEA7, 0xCEA8, 0, 0xCEA6, 0xCE7C, /* 0xD0 */
+ 0xCE7A, 0xABCF, 0xCEA2, 0xCE7E, 0, 0, 0xCEA1, 0xCEAD, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xAE6F, 0, 0xAE6E, 0, 0xD16C, 0xAE6B, 0xD16E, 0, /* 0xE0 */
+ 0xAE70, 0xD16F, 0, 0, 0xAE73, 0, 0xAE71, 0xD170, /* 0xF0 */
+ 0xCEAE, 0xD172, 0, 0xAE6D, 0, 0xAE6C, 0, 0xD16D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_5D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD171, 0xAE72, 0, 0, 0, 0, 0xB153, 0xB152, /* 0x00 */
+ 0, 0, 0, 0xD4F5, 0xD4F9, 0xD4FB, 0xB154, 0xD4FE, /* 0x00 */
+ 0, 0xB158, 0xD541, 0, 0xB15A, 0, 0xB156, 0xB15E, /* 0x10 */
+ 0, 0xB15B, 0xD4F7, 0xB155, 0, 0xD4F6, 0xD4F4, 0xD543, /* 0x10 */
+ 0xD4F8, 0, 0xB157, 0xD542, 0xB15C, 0xD4FD, 0xD4FC, 0xB15D, /* 0x20 */
+ 0xD4FA, 0xB159, 0, 0, 0, 0, 0xD544, 0, /* 0x20 */
+ 0xD540, 0xD8E7, 0xD8EE, 0xD8E3, 0xB451, 0xD8DF, 0xD8EF, 0xD8D9, /* 0x30 */
+ 0xD8EC, 0xD8EA, 0xD8E4, 0, 0xD8ED, 0xD8E6, 0, 0xD8DE, /* 0x30 */
+ 0xD8F0, 0xD8DC, 0xD8E9, 0xD8DA, 0, 0xD8F1, 0, 0xB452, /* 0x40 */
+ 0, 0xD8EB, 0xDD4F, 0xD8DD, 0xB44F, 0, 0xD8E1, 0, /* 0x40 */
+ 0xB450, 0xD8E0, 0xD8E5, 0, 0, 0xD8E2, 0, 0, /* 0x50 */
+ 0, 0xD8E8, 0, 0, 0, 0, 0xDD53, 0, /* 0x50 */
+ 0, 0, 0xDD56, 0xDD4E, 0, 0xDD50, 0, 0xDD55, /* 0x60 */
+ 0xDD54, 0xB743, 0, 0xD8DB, 0xDD52, 0, 0, 0xB744, /* 0x60 */
+ 0, 0xDD4D, 0xDD51, 0, 0, 0, 0, 0xE1A9, /* 0x70 */
+ 0, 0xE1B0, 0xE1A7, 0, 0xE1AE, 0xE1A5, 0xE1AD, 0xE1B1, /* 0x70 */
+ 0xE1A4, 0xE1A8, 0xE1A3, 0, 0xB9F1, 0, 0xE1A6, 0xB9F2, /* 0x80 */
+ 0xE1AC, 0xE1AB, 0xE1AA, 0, 0, 0xE1AF, 0, 0, /* 0x80 */
+ 0, 0, 0xE565, 0xE567, 0xBC6B, 0xE568, 0, 0xE563, /* 0x90 */
+ 0, 0xE562, 0xE56C, 0, 0xE56A, 0xBC6A, 0xE56D, 0xE564, /* 0x90 */
+ 0xE569, 0xE56B, 0xE566, 0, 0, 0, 0, 0xE961, /* 0xA0 */
+ 0xE966, 0xE960, 0xE965, 0, 0xE95E, 0xE968, 0xE964, 0xE969, /* 0xA0 */
+ 0xE963, 0xE95F, 0xE967, 0, 0xE96A, 0xE962, 0, 0xECDA, /* 0xB0 */
+ 0xC0AF, 0, 0xC0AD, 0, 0xC0AC, 0xC0AE, 0, 0, /* 0xB0 */
+ 0xEFC4, 0, 0xF172, 0xF1FD, 0, 0, 0xF444, 0xF445, /* 0xC0 */
+ 0, 0xC460, 0, 0xF5C9, 0, 0xC4DE, 0, 0xF5CA, /* 0xC0 */
+ 0, 0xF6DE, 0xC572, 0, 0xC571, 0xF6DD, 0xC5C9, 0, /* 0xD0 */
+ 0xF7D6, 0, 0, 0, 0, 0xA474, 0xA67B, 0xC9DA, /* 0xD0 */
+ 0xCACA, 0xA8B5, 0xB15F, 0, 0, 0xA475, 0xA5AA, 0xA5A9, /* 0xE0 */
+ 0xA5A8, 0, 0, 0xA7C5, 0, 0, 0xAE74, 0, /* 0xE0 */
+ 0xDD57, 0xA476, 0xA477, 0xA478, 0xA4DA, 0, 0, 0xABD1, /* 0xF0 */
+ 0, 0xCEAF, 0, 0, 0, 0xB453, 0xA479, 0xC95D /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_5E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA5AB, 0xA5AC, 0xC978, 0, 0xA67C, 0, /* 0x00 */
+ 0, 0, 0xCACB, 0, 0xA7C6, 0, 0xCACC, 0, /* 0x00 */
+ 0, 0xA9AE, 0, 0, 0xCC6E, 0xA9AC, 0xA9AB, 0xCC6D, /* 0x10 */
+ 0xA9A9, 0xCC6F, 0xA9AA, 0xA9AD, 0, 0xABD2, 0, 0xABD4, /* 0x10 */
+ 0xCEB3, 0xCEB0, 0xCEB1, 0xCEB2, 0xCEB4, 0xABD3, 0, 0, /* 0x20 */
+ 0xD174, 0xD173, 0, 0xAE76, 0, 0xAE75, 0, 0, /* 0x20 */
+ 0, 0, 0, 0xB162, 0xD546, 0, 0xB161, 0xB163, /* 0x30 */
+ 0xB160, 0, 0, 0, 0, 0xB455, 0xD545, 0, /* 0x30 */
+ 0xB456, 0xD8F3, 0, 0xB457, 0xD8F2, 0xB454, 0, 0, /* 0x40 */
+ 0, 0, 0xDD5A, 0xDD5C, 0xB745, 0xDD5B, 0xDD59, 0xDD58, /* 0x40 */
+ 0, 0, 0, 0xE1B4, 0xB9F7, 0xB9F5, 0, 0xB9F6, /* 0x50 */
+ 0xE1B2, 0xE1B3, 0, 0xB9F3, 0xE571, 0xE56F, 0, 0xBC6D, /* 0x50 */
+ 0xE570, 0xBC6E, 0xBC6C, 0xB9F4, 0, 0, 0xE96D, 0xE96B, /* 0x60 */
+ 0xE96C, 0xE56E, 0xECDC, 0xC0B0, 0xECDB, 0xEFC5, 0xEFC6, 0xE96E, /* 0x60 */
+ 0xF1FE, 0, 0xA47A, 0xA5AD, 0xA67E, 0xC9DB, 0xA67D, 0, /* 0x70 */
+ 0xA9AF, 0xB746, 0, 0xA4DB, 0xA5AE, 0xABD5, 0xB458, 0, /* 0x70 */
+ 0xC979, 0, 0xC97A, 0, 0xC9DC, 0, 0, 0xA7C8, /* 0x80 */
+ 0xCAD0, 0xCACE, 0xA7C9, 0xCACD, 0xCACF, 0xCAD1, 0, 0xA7C7, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xA9B3, 0xA9B4, 0xA9B1, /* 0x90 */
+ 0, 0, 0xA9B0, 0xCEB8, 0xA9B2, 0, 0, 0, /* 0x90 */
+ 0xABD6, 0, 0xCEB7, 0xCEB9, 0xCEB6, 0xCEBA, 0xABD7, 0xAE79, /* 0xA0 */
+ 0xD175, 0, 0xD177, 0xAE77, 0xD178, 0xAE78, 0xD176, 0, /* 0xA0 */
+ 0xCEB5, 0xD547, 0xD54A, 0xD54B, 0xD548, 0xB167, 0xB166, 0xB164, /* 0xB0 */
+ 0xB165, 0xD549, 0, 0, 0, 0, 0xB168, 0, /* 0xB0 */
+ 0, 0xB45A, 0xB45B, 0, 0xB45C, 0xDD5D, 0xDD5F, 0xDD61, /* 0xC0 */
+ 0xB748, 0xB747, 0xB459, 0xDD60, 0xDD5E, 0, 0xE1B8, 0, /* 0xC0 */
+ 0, 0xE1B6, 0xE1BC, 0xB9F8, 0xE1BD, 0xE1BA, 0xB9F9, 0xE1B7, /* 0xD0 */
+ 0xE1B5, 0xE1BB, 0xBC70, 0xE573, 0xE1B9, 0xBC72, 0xE574, 0xBC71, /* 0xD0 */
+ 0xBC74, 0xE575, 0xBC6F, 0xBC73, 0, 0xE973, 0xE971, 0xE970, /* 0xE0 */
+ 0xE972, 0xE96F, 0, 0, 0xC366, 0, 0xF446, 0xF447, /* 0xE0 */
+ 0, 0xF5CB, 0xF6DF, 0xC655, 0, 0, 0xA9B5, 0xA7CA, /* 0xF0 */
+ 0, 0, 0xABD8, 0, 0, 0, 0xA47B, 0xA4DC /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_5F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA5AF, 0xC9DD, 0, 0xA7CB, 0xCAD2, 0, 0xCEBB, /* 0x00 */
+ 0xABD9, 0, 0xB9FA, 0xA47C, 0, 0, 0, 0xA6A1, /* 0x00 */
+ 0, 0, 0xB749, 0xA47D, 0xA4DD, 0xA4DE, 0, 0xA5B1, /* 0x10 */
+ 0xA5B0, 0, 0xC9DE, 0xA6A2, 0, 0xCAD3, 0, 0xA7CC, /* 0x10 */
+ 0, 0, 0xCC71, 0xCC72, 0xCC73, 0, 0xA9B6, 0xA9B7, /* 0x20 */
+ 0xCC70, 0xA9B8, 0, 0, 0, 0xABDA, 0xCEBC, 0, /* 0x20 */
+ 0xD17A, 0xAE7A, 0, 0xD179, 0, 0xB169, 0xD54C, 0xB16A, /* 0x30 */
+ 0xD54D, 0, 0, 0, 0xB45D, 0, 0, 0, /* 0x30 */
+ 0xDD62, 0, 0, 0xE1BF, 0xE1BE, 0, 0xB9FB, 0, /* 0x40 */
+ 0xBC75, 0xE576, 0xBECA, 0xE974, 0xC0B1, 0, 0xC573, 0xF7D8, /* 0x40 */
+ 0, 0, 0, 0, 0xCC74, 0, 0xCEBD, 0xB16B, /* 0x50 */
+ 0xD8F4, 0xB74A, 0, 0, 0, 0xC255, 0, 0, /* 0x50 */
+ 0, 0, 0xA7CE, 0, 0xA7CD, 0xABDB, 0, 0xD17B, /* 0x60 */
+ 0, 0xB16D, 0xB343, 0xB16E, 0xB16C, 0xB45E, 0, 0xE1C0, /* 0x60 */
+ 0xB9FC, 0xBC76, 0, 0xC94C, 0xC9DF, 0, 0xCAD5, 0xA7CF, /* 0x70 */
+ 0xCAD4, 0xA7D0, 0, 0, 0xA9BC, 0xCC77, 0xCC76, 0xA9BB, /* 0x70 */
+ 0xA9B9, 0xA9BA, 0xCC75, 0, 0, 0xABDD, 0xCEBE, 0xABE0, /* 0x80 */
+ 0xABDC, 0xABE2, 0xABDE, 0xABDF, 0xABE1, 0, 0, 0, /* 0x80 */
+ 0xAE7D, 0xAE7C, 0xAE7B, 0, 0, 0, 0xD54F, 0xB16F, /* 0x90 */
+ 0xB172, 0xB170, 0, 0xD54E, 0xB175, 0, 0xB171, 0xD550, /* 0x90 */
+ 0xB174, 0xB173, 0, 0, 0, 0xD8F6, 0xD8F5, 0, /* 0xA0 */
+ 0xB461, 0xB45F, 0xB460, 0xD8F7, 0xB74B, 0xDD64, 0xB74C, 0xDD63, /* 0xA0 */
+ 0, 0, 0xE577, 0, 0, 0xBC78, 0xE1C1, 0xBC77, /* 0xB0 */
+ 0, 0xB9FD, 0, 0xECDE, 0xE975, 0xC0B2, 0xECDD, 0xF240, /* 0xB0 */
+ 0xF448, 0xF449, 0, 0xA4DF, 0, 0xA5B2, 0, 0, /* 0xC0 */
+ 0, 0xC97B, 0, 0, 0xA7D2, 0xA7D4, 0, 0xC9E2, /* 0xC0 */
+ 0xCAD8, 0xCAD7, 0xCAD6, 0, 0xC9E1, 0xC9E0, 0xA6A4, 0xA7D3, /* 0xD0 */
+ 0xA7D1, 0xA6A3, 0, 0, 0, 0xA9BD, 0xCC78, 0, /* 0xD0 */
+ 0xA9BE, 0xCADD, 0, 0xCADF, 0xCADE, 0xCC79, 0, 0, /* 0xE0 */
+ 0xCADA, 0, 0xA7D8, 0xA7D6, 0, 0xCAD9, 0xCADB, 0xCAE1, /* 0xE0 */
+ 0, 0xA7D5, 0, 0xCADC, 0xCAE5, 0xA9C0, 0, 0xCAE2, /* 0xF0 */
+ 0xA7D7, 0, 0xCAE0, 0xCAE3, 0, 0xA9BF, 0, 0xA9C1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_60[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCAE4, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0xCCAF, 0xCCA2, 0xCC7E, 0xCCAE, 0xCCA9, 0xABE7, 0xA9C2, /* 0x00 */
+ 0xCCAA, 0xCCAD, 0xABE3, 0xCCAC, 0xA9C3, 0xA9C8, 0xA9C6, 0xCCA3, /* 0x10 */
+ 0, 0xCC7C, 0xCCA5, 0xA9CD, 0xCCB0, 0xABE4, 0xCCA6, 0, /* 0x10 */
+ 0xABE5, 0xA9C9, 0xCCA8, 0, 0xCECD, 0xABE6, 0xCC7B, 0xA9CA, /* 0x20 */
+ 0xABE8, 0xA9CB, 0xA9C7, 0xA9CC, 0xCCA7, 0xCC7A, 0xCCAB, 0xA9C4, /* 0x20 */
+ 0, 0, 0xCC7D, 0xCCA4, 0xCCA1, 0xA9C5, 0, 0xCEBF, /* 0x30 */
+ 0, 0xCEC0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0xCECA, 0xD1A1, 0xCECB, 0xABEE, 0xCECE, 0xCEC4, 0xABED, 0xCEC6, /* 0x40 */
+ 0, 0xCEC7, 0, 0, 0xCEC9, 0xABE9, 0, 0, /* 0x40 */
+ 0xAEA3, 0, 0xF9DA, 0xCEC5, 0xCEC1, 0xAEA4, 0, 0, /* 0x50 */
+ 0xCECF, 0xAE7E, 0xD17D, 0xCEC8, 0, 0xD17C, 0xCEC3, 0xCECC, /* 0x50 */
+ 0, 0, 0xABEC, 0xAEA1, 0xABF2, 0xAEA2, 0xCED0, 0xD17E, /* 0x60 */
+ 0xABEB, 0xAEA6, 0xABF1, 0xABF0, 0xABEF, 0xAEA5, 0xCED1, 0xAEA7, /* 0x60 */
+ 0xABEA, 0, 0xCEC2, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB176, /* 0x70 */
+ 0xD1A4, 0xD1A6, 0, 0xD1A8, 0xAEA8, 0xAEAE, 0xD553, 0xD1AC, /* 0x80 */
+ 0xD1A3, 0xB178, 0xD551, 0, 0xAEAD, 0xAEAB, 0xD1AE, 0, /* 0x80 */
+ 0xD552, 0, 0xD1A5, 0, 0xAEAC, 0xD1A9, 0xAEAF, 0xD1AB, /* 0x90 */
+ 0, 0, 0xAEAA, 0xD1AA, 0xD1AD, 0xD1A7, 0, 0xAEA9, /* 0x90 */
+ 0xB179, 0, 0xD1A2, 0xB177, 0, 0, 0, 0, /* 0xA0 */
+ 0xB17A, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xD555, 0xD55E, 0xB464, 0, 0xB17C, 0xB1A3, 0xB465, 0xD560, /* 0xB0 */
+ 0xB1AA, 0xD8F9, 0xD556, 0xB1A2, 0xB1A5, 0xB17E, 0xD554, 0xD562, /* 0xB0 */
+ 0xD565, 0xD949, 0, 0xD563, 0xD8FD, 0xB1A1, 0xB1A8, 0xB1AC, /* 0xC0 */
+ 0xD55D, 0xD8F8, 0xD561, 0xB17B, 0xD8FA, 0xD564, 0xD8FC, 0xD559, /* 0xC0 */
+ 0, 0xB462, 0, 0xD557, 0xD558, 0xB1A7, 0, 0, /* 0xD0 */
+ 0xB1A6, 0xD55B, 0xB1AB, 0xD55F, 0xB1A4, 0xD55C, 0, 0xB1A9, /* 0xD0 */
+ 0xB466, 0xB463, 0xD8FB, 0, 0xD55A, 0, 0xB17D, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0xB46B, 0xB46F, 0xD940, 0xB751, 0xB46D, 0xD944, 0xB471, 0xDD65, /* 0xF0 */
+ 0xD946, 0xB753, 0xB469, 0xB46C, 0xD947, 0, 0xD948, 0xD94E /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_61[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB473, 0xB754, 0, 0xD94A, 0xD94F, 0xD943, 0xB75E, 0, /* 0x00 */
+ 0xB755, 0xB472, 0xD941, 0xD950, 0, 0xB75D, 0xB470, 0xB74E, /* 0x00 */
+ 0xD94D, 0, 0xB474, 0xD945, 0xD8FE, 0xB46A, 0xD942, 0, /* 0x10 */
+ 0xD94B, 0, 0xB74D, 0xB752, 0xB467, 0xD94C, 0, 0xB750, /* 0x10 */
+ 0, 0, 0, 0xB468, 0, 0, 0, 0xB75C, /* 0x20 */
+ 0xE1C3, 0xDD70, 0, 0xDD68, 0xE1C2, 0, 0xDD6C, 0xDD6E, /* 0x20 */
+ 0, 0, 0xDD6B, 0, 0xB75B, 0, 0xDD6A, 0xB75F, /* 0x30 */
+ 0, 0, 0, 0xE1D2, 0, 0, 0xB75A, 0xBA40, /* 0x30 */
+ 0xDD71, 0xE1C4, 0, 0, 0xB758, 0xDD69, 0xDD6D, 0xB9FE, /* 0x40 */
+ 0xB74F, 0xDD66, 0xDD67, 0xBA41, 0xB757, 0xB759, 0xB756, 0xDD6F, /* 0x40 */
+ 0, 0, 0xE1C8, 0xE1C9, 0xE1CE, 0xBC7D, 0xE1D5, 0, /* 0x50 */
+ 0xBA47, 0, 0xBA46, 0xE1D0, 0, 0xBC7C, 0xE1C5, 0xBA45, /* 0x50 */
+ 0, 0xE1D4, 0xBA43, 0xBA44, 0, 0xE1D1, 0xE5AA, 0xBC7A, /* 0x60 */
+ 0xB46E, 0, 0xE1D3, 0xBCA3, 0xE1CB, 0, 0xBC7B, 0, /* 0x60 */
+ 0xBCA2, 0xE1C6, 0xE1CA, 0xE1C7, 0xE1CD, 0xBA48, 0xBC79, 0xBA42, /* 0x70 */
+ 0, 0xE57A, 0xE1CF, 0, 0xBCA1, 0, 0xBCA4, 0, /* 0x70 */
+ 0xE1CC, 0, 0xBC7E, 0xE579, 0, 0, 0, 0, /* 0x80 */
+ 0, 0xE57E, 0xBECE, 0xE578, 0xE9A3, 0xE5A9, 0xBCA8, 0, /* 0x80 */
+ 0xBCA6, 0xBECC, 0xE5A6, 0xE5A2, 0xBCAC, 0, 0xE978, 0, /* 0x90 */
+ 0, 0, 0xBCAA, 0xE5A1, 0, 0xE976, 0, 0xE5A5, /* 0x90 */
+ 0, 0xE5A8, 0xE57D, 0, 0xBCAB, 0, 0, 0xBCA5, /* 0xA0 */
+ 0xE977, 0xBECD, 0xE5A7, 0xBCA7, 0xBCA9, 0xE5A4, 0xBCAD, 0xE5A3, /* 0xA0 */
+ 0xE57C, 0xE57B, 0xBECB, 0xE5AB, 0xE97A, 0xECE0, 0xBED0, 0, /* 0xB0 */
+ 0xE9A2, 0, 0xE97E, 0, 0xECE1, 0, 0xBED1, 0xE9A1, /* 0xB0 */
+ 0, 0xE97C, 0xC0B4, 0xECDF, 0, 0xE979, 0xE97B, 0xC0B5, /* 0xC0 */
+ 0xBED3, 0xC0B3, 0xBED2, 0xC0B7, 0xE97D, 0xBECF, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0xEFCF, 0, /* 0xD0 */
+ 0xEFC7, 0, 0, 0, 0, 0, 0xECE7, 0xEFC8, /* 0xD0 */
+ 0xECE3, 0, 0, 0xC256, 0xECE5, 0xECE4, 0xC0B6, 0xECE2, /* 0xE0 */
+ 0xECE6, 0xEFD0, 0xEFCC, 0xEFCE, 0, 0xEFC9, 0xEFCA, 0, /* 0xE0 */
+ 0xEFCD, 0xEFCB, 0xC367, 0, 0, 0xC36A, 0xC369, 0xC368, /* 0xF0 */
+ 0xC461, 0xF44A, 0xC462, 0xF241, 0xC4DF, 0xF5CC, 0xC4E0, 0xC574 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_62[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC5CA, 0xF7D9, 0, 0xF7DA, 0xF7DB, 0, 0, 0xF9BA, /* 0x00 */
+ 0xA4E0, 0xC97C, 0xA5B3, 0, 0xA6A6, 0xA6A7, 0xA6A5, 0, /* 0x00 */
+ 0xA6A8, 0xA7DA, 0xA7D9, 0, 0xCCB1, 0xA9CF, 0xA9CE, 0, /* 0x10 */
+ 0, 0xD1AF, 0xB1AD, 0xB1AE, 0, 0, 0, 0xB475, /* 0x10 */
+ 0xDD72, 0xB760, 0xB761, 0xDD74, 0xDD76, 0xDD75, 0, 0xE1D7, /* 0x20 */
+ 0, 0xE1D6, 0xBA49, 0xE1D8, 0, 0xE5AC, 0xBCAE, 0, /* 0x20 */
+ 0xBED4, 0, 0xC0B8, 0xC257, 0xC0B9, 0, 0xA4E1, 0, /* 0x30 */
+ 0, 0, 0xCAE6, 0, 0, 0xCCB2, 0xA9D1, 0xA9D0, /* 0x30 */
+ 0xA9D2, 0xABF3, 0xCED2, 0xCED3, 0, 0, 0xD1B0, 0xAEB0, /* 0x40 */
+ 0xB1AF, 0xB476, 0xD951, 0xA4E2, 0, 0xA47E, 0xA4E3, 0, /* 0x40 */
+ 0xC97D, 0xA5B7, 0xA5B6, 0xA5B4, 0xA5B5, 0, 0, 0, /* 0x50 */
+ 0xA6AB, 0xC9E9, 0xC9EB, 0xA6AA, 0xC9E3, 0, 0xC9E4, 0, /* 0x50 */
+ 0xC9EA, 0xC9E6, 0xC9E8, 0xA6A9, 0xC9E5, 0xC9EC, 0xC9E7, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xA7E1, 0xA7EA, 0xA7E8, /* 0x60 */
+ 0xCAF0, 0xCAED, 0xCAF5, 0xA7E6, 0xCAF6, 0, 0xA7DF, 0xCAF3, /* 0x70 */
+ 0, 0xA7E5, 0xCAEF, 0xCAEE, 0xA7E3, 0xCAF4, 0xA7E4, 0xA9D3, /* 0x70 */
+ 0xA7DE, 0xCAF1, 0, 0xCAE7, 0xA7DB, 0, 0xA7EE, 0xCAEC, /* 0x80 */
+ 0xCAF2, 0xA7E0, 0xA7E2, 0, 0xCAE8, 0, 0xCAE9, 0xCAEA, /* 0x80 */
+ 0, 0xA7ED, 0xA7E7, 0xA7EC, 0xCAEB, 0xA7EB, 0xA7DD, 0xA7DC, /* 0x90 */
+ 0xA7E9, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xA9E1, 0xCCBE, 0xCCB7, 0xA9DC, 0xA9EF, 0xCCB3, 0xCCBA, 0xCCBC, /* 0xA0 */
+ 0xCCBF, 0xA9EA, 0, 0xCCBB, 0xCCB4, 0xA9E8, 0xCCB8, 0, /* 0xB0 */
+ 0xCCC0, 0xA9D9, 0, 0xCCBD, 0xA9E3, 0xA9E2, 0xCCB6, 0xA9D7, /* 0xB0 */
+ 0, 0, 0xA9D8, 0, 0xA9D6, 0, 0xA9EE, 0xA9E6, /* 0xC0 */
+ 0xA9E0, 0xA9D4, 0xCCB9, 0xA9DF, 0xA9D5, 0xA9E7, 0xA9F0, 0xCED4, /* 0xC0 */
+ 0xA9E4, 0xCCB5, 0xA9DA, 0xA9DD, 0xA9DE, 0, 0xA9EC, 0xA9ED, /* 0xD0 */
+ 0xA9EB, 0xA9E5, 0xA9E9, 0xA9DB, 0xABF4, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xCEDA, 0xAC41, 0xABF8, 0xABFA, 0xAC40, /* 0xE0 */
+ 0xCEE6, 0xABFD, 0xD1B1, 0xAEB1, 0xAC43, 0xCED7, 0xCEDF, 0xABFE, /* 0xF0 */
+ 0xCEDE, 0xCEDB, 0xCEE3, 0xCEE5, 0xABF7, 0xABFB, 0xAC42, 0xAEB3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_63[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCEE0, 0xABF9, 0xAC45, 0xCED9, 0, 0, 0, 0xABFC, /* 0x00 */
+ 0xAEB2, 0xABF6, 0, 0xCED6, 0xCEDD, 0xCED5, 0xCED8, 0xCEDC, /* 0x00 */
+ 0xD1B2, 0xAC44, 0, 0xCEE1, 0xCEE2, 0xCEE4, 0xABF5, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xAEC1, 0xD1BE, 0xAEBF, 0xAEC0, 0xD1B4, 0xD1C4, 0, 0xAEB6, /* 0x20 */
+ 0, 0, 0xD566, 0xD1C6, 0xD1C0, 0, 0xD1B7, 0, /* 0x30 */
+ 0xD1C9, 0xD1BA, 0xAEBC, 0xD57D, 0xD1BD, 0xAEBE, 0xAEB5, 0, /* 0x30 */
+ 0xD1CB, 0xD1BF, 0xAEB8, 0xD1B8, 0xD1B5, 0xD1B6, 0xAEB9, 0xD1C5, /* 0x40 */
+ 0xD1CC, 0xAEBB, 0xD1BC, 0xD1BB, 0xAEC3, 0xAEC2, 0xAEB4, 0xAEBA, /* 0x40 */
+ 0xAEBD, 0xD1C8, 0, 0, 0xD1C2, 0xAEB7, 0xD1B3, 0xD1CA, /* 0x50 */
+ 0xD1C1, 0xD1C3, 0xD1C7, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xD567, 0, 0xB1B7, /* 0x60 */
+ 0xB1CB, 0xB1CA, 0, 0xB1BF, 0, 0xD579, 0xD575, 0xD572, /* 0x60 */
+ 0xD5A6, 0xB1BA, 0xB1B2, 0, 0, 0xD577, 0xB4A8, 0xB1B6, /* 0x70 */
+ 0xD5A1, 0, 0xB1CC, 0xB1C9, 0xD57B, 0xD56A, 0, 0, /* 0x70 */
+ 0xB1C8, 0xD5A3, 0xD569, 0xB1BD, 0xB1C1, 0xD5A2, 0, 0xD573, /* 0x80 */
+ 0xB1C2, 0xB1BC, 0xD568, 0, 0xB478, 0xD5A5, 0xD571, 0xB1C7, /* 0x80 */
+ 0xD574, 0xD5A4, 0xB1C6, 0, 0xD952, 0, 0xB1B3, 0xD56F, /* 0x90 */
+ 0xB1B8, 0xB1C3, 0, 0xB1BE, 0xD578, 0xD56E, 0xD56C, 0xD57E, /* 0x90 */
+ 0xB1B0, 0xB1C4, 0xB1B4, 0xB477, 0xD57C, 0xB1B5, 0, 0xB1B1, /* 0xA0 */
+ 0xB1C0, 0xB1BB, 0xB1B9, 0xD570, 0xB1C5, 0xD56D, 0xD57A, 0xD576, /* 0xA0 */
+ 0xD954, 0xD953, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xD56B, 0xD964, 0, /* 0xB0 */
+ 0xB47A, 0, 0xD96A, 0xD959, 0xD967, 0xDD77, 0xB47D, 0xD96B, /* 0xC0 */
+ 0xD96E, 0xB47C, 0xD95C, 0xD96D, 0xD96C, 0xB47E, 0xD955, 0xB479, /* 0xC0 */
+ 0xB4A3, 0, 0xB4A1, 0xD969, 0, 0xD95F, 0xB4A5, 0xD970, /* 0xD0 */
+ 0xD968, 0xD971, 0xB4AD, 0xB4AB, 0xD966, 0xD965, 0, 0xD963, /* 0xD0 */
+ 0xD95D, 0xB4A4, 0, 0xB4A2, 0xD1B9, 0xD956, 0, 0xDDB7, /* 0xE0 */
+ 0xD957, 0xB47B, 0xB4AA, 0xDD79, 0, 0xB4A6, 0xB4A7, 0xD958, /* 0xE0 */
+ 0xD96F, 0xDD78, 0xD960, 0xD95B, 0xB4A9, 0xD961, 0xD95E, 0, /* 0xF0 */
+ 0, 0xB4AE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_64[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB770, 0, /* 0x00 */
+ 0, 0xDD7C, 0xDDB1, 0xDDB6, 0xDDAA, 0xB76C, 0xDDBB, 0xB769, /* 0x00 */
+ 0xDD7A, 0, 0xDD7B, 0xB762, 0xB76B, 0xDDA4, 0xB76E, 0xB76F, /* 0x10 */
+ 0xDDA5, 0, 0xDDB2, 0xDDB8, 0xB76A, 0, 0xB764, 0xDDA3, /* 0x10 */
+ 0xDD7D, 0xDDBA, 0xDDA8, 0xDDA9, 0xDD7E, 0xDDB4, 0xDDAB, 0xDDB5, /* 0x20 */
+ 0xDDAD, 0, 0xB765, 0xE1D9, 0xB768, 0xB766, 0xDDB9, 0xDDB0, /* 0x20 */
+ 0xDDAC, 0, 0, 0xDDA1, 0xBA53, 0xDDAF, 0xB76D, 0xDDA7, /* 0x30 */
+ 0, 0xDDA6, 0, 0, 0, 0xB767, 0xB763, 0xE1EE, /* 0x30 */
+ 0xDDB3, 0xDDAE, 0, 0xDDA2, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0xE1E9, 0, 0xE1DA, 0xE1E5, 0, /* 0x40 */
+ 0xE1EC, 0xBA51, 0xB4AC, 0xE1EA, 0xBA4C, 0, 0, 0, /* 0x50 */
+ 0xBA4B, 0xE1F1, 0, 0xE1DB, 0xE1E8, 0xE1DC, 0xE1E7, 0xBA4F, /* 0x50 */
+ 0xE1EB, 0xD962, 0, 0, 0, 0xE1F2, 0xE1E3, 0xBA52, /* 0x60 */
+ 0xE5BA, 0xBCAF, 0, 0xE1F0, 0xE1EF, 0xBA54, 0xE5AD, 0xBCB0, /* 0x60 */
+ 0xE5AE, 0, 0xE1DF, 0xE1E0, 0xE1DD, 0xE1E2, 0xE1DE, 0xE1F3, /* 0x70 */
+ 0xBA4E, 0xBCB1, 0xBA50, 0xBA55, 0, 0xE1E1, 0, 0xE1ED, /* 0x70 */
+ 0, 0, 0xE1E6, 0, 0, 0xE5B1, 0, 0xBA4A, /* 0x80 */
+ 0xBCB4, 0xE9AA, 0xE5B6, 0xE5B5, 0xE5B7, 0, 0, 0xE5B4, /* 0x80 */
+ 0xBCB5, 0, 0xBCBB, 0xBCB8, 0, 0xBCB9, 0xE5AF, 0xE5B2, /* 0x90 */
+ 0xE5BC, 0xBCC1, 0xBCBF, 0, 0xE5B3, 0xD95A, 0xBCB2, 0xE5B9, /* 0x90 */
+ 0xE5B0, 0, 0xBCC2, 0xE5B8, 0xBA4D, 0xBCB7, 0xE1E4, 0, /* 0xA0 */
+ 0, 0xBCBA, 0, 0xBCBE, 0xBCC0, 0xBCBD, 0xBCBC, 0, /* 0xA0 */
+ 0xBCB6, 0xE5BB, 0xBCB3, 0xBCC3, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0xBED8, 0xBED9, 0xE9A9, 0xBEE2, 0xBEDF, /* 0xB0 */
+ 0, 0xBED6, 0xBEDD, 0xE9AB, 0xBEDB, 0xBED5, 0, 0xBEDC, /* 0xC0 */
+ 0, 0xE9A8, 0xC0BB, 0xBED7, 0, 0xBEDE, 0xC0BA, 0xE9A7, /* 0xC0 */
+ 0xE9A6, 0, 0xBEE0, 0, 0xBEE1, 0, 0xE9A5, 0xE9A4, /* 0xD0 */
+ 0xC0BC, 0xE9AE, 0xBEDA, 0xE9AC, 0, 0, 0, 0, /* 0xD0 */
+ 0xC0BD, 0, 0xC0C2, 0xECEA, 0xECEC, 0, 0xC0BF, 0, /* 0xE0 */
+ 0xECED, 0xECE9, 0, 0xECEB, 0xC0C0, 0xC0C3, 0, 0xECE8, /* 0xE0 */
+ 0xC0BE, 0xC0C1, 0xC259, 0xE9AD, 0xC258, 0, 0, 0xC25E, /* 0xF0 */
+ 0xEFD4, 0, 0xC25C, 0xC25D, 0xEFD7, 0xEFD3, 0xC25A, 0xEFD1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_65[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC36B, 0xEFD5, 0, 0xEFD6, 0xEFD2, 0, 0xC25B, 0xF242, /* 0x00 */
+ 0, 0xF245, 0, 0, 0xF246, 0xF244, 0xF247, 0xC36C, /* 0x00 */
+ 0xF243, 0, 0, 0xF44E, 0xC464, 0xF44D, 0xF44C, 0xF44B, /* 0x10 */
+ 0xC463, 0xC465, 0, 0xF5CD, 0xC4E2, 0xC4E1, 0, 0, /* 0x10 */
+ 0xF6E1, 0xF6E0, 0xF6E3, 0xC5CB, 0xC575, 0xF7DD, 0xF6E2, 0, /* 0x20 */
+ 0, 0xF7DC, 0xC5CD, 0xC5CC, 0xC5F3, 0xF8A9, 0xF8EF, 0xA4E4, /* 0x20 */
+ 0, 0, 0xD972, 0xE9AF, 0, 0, 0xA6AC, 0xCAF7, /* 0x30 */
+ 0xA7F1, 0xA7EF, 0, 0xA7F0, 0, 0xCCC1, 0xA9F1, 0xAC46, /* 0x30 */
+ 0, 0xCEE7, 0, 0xCEE8, 0, 0xAC47, 0xD1CE, 0, /* 0x40 */
+ 0xAEC4, 0xAEC5, 0xD1CD, 0, 0, 0, 0, 0xB1D3, /* 0x40 */
+ 0, 0xB1CF, 0, 0xD5A7, 0xB1D6, 0xB1D5, 0xB1CE, 0xB1D1, /* 0x50 */
+ 0xB1D4, 0xB1D0, 0, 0, 0xD976, 0xB1CD, 0xB4AF, 0, /* 0x50 */
+ 0, 0, 0xB4B1, 0xB4B2, 0xD975, 0xD978, 0xB4B0, 0xD973, /* 0x60 */
+ 0xD977, 0, 0xD974, 0, 0xB771, 0, 0, 0xDDBC, /* 0x60 */
+ 0, 0, 0xBA56, 0xE1F4, 0xBEE3, 0xBCC4, 0xE5BD, 0xBCC5, /* 0x70 */
+ 0xBCC6, 0xE5BF, 0xE5BE, 0xE5C0, 0xE9B1, 0, 0, 0xE9B0, /* 0x70 */
+ 0xECEF, 0xECEE, 0xC0C4, 0xC0C5, 0xF248, 0, 0, 0xA4E5, /* 0x80 */
+ 0, 0, 0, 0, 0xD979, 0, 0, 0, /* 0x80 */
+ 0xB4B4, 0xB4B3, 0xDDBD, 0, 0xEFD8, 0xC4E3, 0xF7DE, 0xA4E6, /* 0x90 */
+ 0, 0xAEC6, 0, 0xB1D8, 0xB1D7, 0xD97A, 0xD97B, 0xB772, /* 0x90 */
+ 0xE1F5, 0xBA57, 0xE9B2, 0, 0xA4E7, 0xA5B8, 0, 0xA9F2, /* 0xA0 */
+ 0xCCC2, 0, 0xCEE9, 0xAC48, 0xB1D9, 0, 0xD97C, 0xB4B5, /* 0xA0 */
+ 0xB773, 0, 0xE5C1, 0xE5C2, 0, 0, 0xECF0, 0xC25F, /* 0xB0 */
+ 0xF8F0, 0xA4E8, 0, 0xCCC3, 0xA9F3, 0xAC49, 0, 0xCEEA, /* 0xB0 */
+ 0, 0xAEC7, 0xD1D2, 0xD1D0, 0xD1D1, 0xAEC8, 0xD1CF, 0, /* 0xC0 */
+ 0, 0, 0, 0xB1DB, 0xB1DC, 0xD5A8, 0xB1DD, 0xB1DA, /* 0xC0 */
+ 0xD97D, 0, 0xD97E, 0xDDBE, 0, 0, 0xBA59, 0xBA58, /* 0xD0 */
+ 0, 0, 0xECF1, 0xEFD9, 0, 0xF24A, 0xF249, 0xF44F, /* 0xD0 */
+ 0, 0xC95E, 0xAC4A, 0, 0, 0xA4E9, 0xA5B9, 0, /* 0xE0 */
+ 0xA6AE, 0xA6AD, 0, 0, 0xA6AF, 0xA6B0, 0xC9EE, 0xC9ED, /* 0xE0 */
+ 0xCAF8, 0xA7F2, 0xCAFB, 0xCAFA, 0xCAF9, 0xCAFC, 0, 0, /* 0xF0 */
+ 0, 0, 0xA9F4, 0xCCC9, 0xCCC5, 0xCCCE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_66[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA9FB, 0, 0xA9F9, 0xCCCA, 0xCCC6, 0xCCCD, 0xA9F8, 0xAA40, /* 0x00 */
+ 0xCCC8, 0xCCC4, 0xA9FE, 0xCCCB, 0xA9F7, 0xCCCC, 0xA9FA, 0xA9FC, /* 0x00 */
+ 0xCCD0, 0xCCCF, 0xCCC7, 0xA9F6, 0xA9F5, 0xA9FD, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0xCEEF, 0xCEF5, 0, 0xAC50, /* 0x10 */
+ 0xAC4D, 0xCEEC, 0xCEF1, 0, 0xAC53, 0xAC4B, 0xCEF0, 0xAC4E, /* 0x20 */
+ 0xAC51, 0, 0, 0xCEF3, 0, 0xAC4C, 0xCEF8, 0xAC4F, /* 0x20 */
+ 0, 0xAC52, 0xCEED, 0xCEF2, 0xCEF6, 0xCEEE, 0xCEEB, 0, /* 0x30 */
+ 0, 0xCEF7, 0xCEF4, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xAED0, 0xAEC9, 0xAECC, 0, 0xAECF, 0, 0xD1D5, /* 0x40 */
+ 0, 0xAECA, 0xD1D3, 0, 0xAECE, 0, 0, 0xAECB, /* 0x40 */
+ 0, 0xD1D6, 0xAECD, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xD5AC, 0xB1DF, 0xD5AB, 0xD5AD, 0xB1DE, 0xB1E3, 0xD1D4, /* 0x50 */
+ 0, 0xD5AA, 0xD5AE, 0, 0xB1E0, 0xD5A9, 0xB1E2, 0, /* 0x60 */
+ 0xB1E1, 0, 0xD9A7, 0, 0xD9A2, 0, 0xB4B6, 0xB4BA, /* 0x60 */
+ 0xB4B7, 0xD9A5, 0xD9A8, 0, 0xB4B8, 0, 0xB4B9, 0xB4BE, /* 0x70 */
+ 0xDDC7, 0xD9A6, 0xB4BC, 0xD9A3, 0xD9A1, 0, 0xB4BD, 0, /* 0x70 */
+ 0xD9A4, 0, 0, 0, 0xB779, 0, 0xDDBF, 0xB776, /* 0x80 */
+ 0xB777, 0xB775, 0xDDC4, 0xDDC3, 0xDDC0, 0xB77B, 0, 0, /* 0x80 */
+ 0xDDC2, 0xB4BB, 0, 0, 0xDDC6, 0xDDC1, 0xB778, 0xB774, /* 0x90 */
+ 0xB77A, 0xDDC5, 0, 0, 0, 0xBA5C, 0, 0xE1F8, /* 0x90 */
+ 0xE1F7, 0xE1F6, 0xBA5A, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xBA5B, 0xE5C5, 0xE5C8, 0xBCC8, 0, 0, 0xBCC7, 0xE5C9, /* 0xA0 */
+ 0xE5C4, 0xBCCA, 0xE5C6, 0, 0xBCC9, 0xE5C3, 0, 0xE5C7, /* 0xB0 */
+ 0xBEE9, 0xBEE6, 0xE9BB, 0xE9BA, 0, 0xE9B9, 0xE9B4, 0, /* 0xB0 */
+ 0xE9B5, 0, 0, 0, 0xBEE7, 0, 0xBEE4, 0xBEE8, /* 0xC0 */
+ 0xE9B3, 0xBEE5, 0xE9B6, 0xE9B7, 0xE9BC, 0, 0, 0xE9B8, /* 0xC0 */
+ 0, 0, 0xECF2, 0, 0, 0, 0xC0C7, 0, /* 0xD0 */
+ 0xEFDC, 0xC0C6, 0xEFDA, 0xEFDB, 0xC260, 0xC36E, 0xF24B, 0, /* 0xD0 */
+ 0xC36D, 0, 0, 0xF451, 0xF452, 0, 0xC466, 0, /* 0xE0 */
+ 0xF450, 0xC4E4, 0, 0xF7DF, 0xC5CE, 0xF8AA, 0xF8AB, 0, /* 0xE0 */
+ 0xA4EA, 0, 0xA6B1, 0xA6B2, 0xA7F3, 0, 0xCCD1, 0xAC54, /* 0xF0 */
+ 0xAED1, 0xB1E4, 0, 0, 0xB0D2, 0, 0xB4BF, 0xB4C0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_67[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB3CC, 0xD9A9, 0, 0xB77C, 0xE1FA, 0xE1F9, 0, 0, /* 0x00 */
+ 0xA4EB, 0xA6B3, 0xCCD2, 0xAA42, 0, 0xAA41, 0, 0xCEF9, /* 0x00 */
+ 0xCEFA, 0, 0xD1D7, 0xD1D8, 0xAED2, 0xAED3, 0, 0xAED4, /* 0x10 */
+ 0xD5AF, 0, 0, 0xB1E6, 0, 0xB4C2, 0, 0xB4C1, /* 0x10 */
+ 0xDDC8, 0xDF7A, 0xE1FB, 0xE9BD, 0, 0, 0xC261, 0xC467, /* 0x20 */
+ 0xA4EC, 0, 0xA5BC, 0xA5BD, 0xA5BB, 0xA5BE, 0xA5BA, 0, /* 0x20 */
+ 0, 0xA6B6, 0, 0xC9F6, 0xA6B5, 0xA6B7, 0, 0, /* 0x30 */
+ 0xC9F1, 0xC9F0, 0xC9F3, 0xC9F2, 0xC9F5, 0xA6B4, 0xC9EF, 0xC9F4, /* 0x30 */
+ 0, 0, 0, 0, 0, 0xCAFD, 0xA7FD, 0xCAFE, /* 0x40 */
+ 0xCB43, 0xA7FC, 0, 0xCB47, 0xCB42, 0xCB45, 0xA7F5, 0xA7F6, /* 0x40 */
+ 0xA7F7, 0xA7F8, 0, 0xA840, 0, 0xCB41, 0xA7FA, 0xA841, /* 0x50 */
+ 0, 0xCB40, 0xCB46, 0, 0xA7F9, 0xCB44, 0xA7FB, 0xA7F4, /* 0x50 */
+ 0xA7FE, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xAA57, 0, 0xCCD4, 0xAA43, 0, 0xAA4D, /* 0x60 */
+ 0xAA4E, 0xAA46, 0xAA58, 0xAA48, 0xCCDC, 0xAA53, 0xCCD7, 0xAA49, /* 0x70 */
+ 0xCCE6, 0xCCE7, 0xCCDF, 0xCCD8, 0xAA56, 0xCCE4, 0xAA51, 0xAA4F, /* 0x70 */
+ 0, 0xCCE5, 0, 0xCCE3, 0xCCDB, 0xCCD3, 0xCCDA, 0xAA4A, /* 0x80 */
+ 0, 0xAA50, 0, 0xAA44, 0xCCDE, 0xCCDD, 0xCCD5, 0, /* 0x80 */
+ 0xAA52, 0xCCE1, 0xCCD6, 0xAA55, 0xCCE8, 0xAA45, 0, 0xAA4C, /* 0x90 */
+ 0xCCD9, 0xCCE2, 0xAA54, 0, 0xAA47, 0xAA4B, 0, 0xCCE0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0xCF5B, 0xAC5C, /* 0xA0 */
+ 0xAC69, 0, 0xCF56, 0xCF4C, 0xAC62, 0xCF4A, 0xAC5B, 0xCF45, /* 0xB0 */
+ 0xAC65, 0xCF52, 0xCEFE, 0xCF41, 0, 0, 0, 0, /* 0xB0 */
+ 0xCF44, 0xCEFB, 0xCF51, 0xCF61, 0xAC60, 0xCF46, 0xCF58, 0, /* 0xC0 */
+ 0xCEFD, 0xCF5F, 0xCF60, 0xCF63, 0xCF5A, 0xCF4B, 0xCF53, 0xAC66, /* 0xC0 */
+ 0xAC59, 0xAC61, 0xAC6D, 0xAC56, 0xAC58, 0, 0, 0, /* 0xD0 */
+ 0xCF43, 0xAC6A, 0xAC63, 0xCF5D, 0xCF40, 0xAC6C, 0xAC67, 0xCF49, /* 0xD0 */
+ 0, 0, 0xAC6B, 0xCF50, 0xCF48, 0xAC64, 0xCF5C, 0xCF54, /* 0xE0 */
+ 0, 0xAC5E, 0xCF62, 0xCF47, 0xAC5A, 0xCF59, 0xCF4F, 0xAC5F, /* 0xE0 */
+ 0xCF55, 0xAC57, 0xCEFC, 0xAC68, 0xAEE3, 0xAC5D, 0xCF4E, 0xCF4D, /* 0xF0 */
+ 0xCF42, 0, 0xCF5E, 0, 0xCF57, 0, 0, 0xAC55 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_68[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD1EC, 0xAEEA, 0xD1ED, 0, 0xD1E1, 0xAEDF, /* 0x10 */
+ 0xAEEB, 0, 0xD1DA, 0, 0xD1E3, 0xD1EB, 0, 0xD1D9, /* 0x10 */
+ 0xD1F4, 0xAED5, 0, 0, 0, 0xD1F3, 0xD1EE, 0, /* 0x20 */
+ 0xD1EF, 0xAEDD, 0xAEE8, 0xD1E5, 0, 0xD1E6, 0xD1F0, 0xD1E7, /* 0x20 */
+ 0, 0xD1E2, 0xD1DC, 0xD1DD, 0xD1EA, 0xD1E4, 0, 0, /* 0x30 */
+ 0xAED6, 0xAEDA, 0xD1F2, 0xD1DE, 0xAEE6, 0xAEE2, 0, 0, /* 0x30 */
+ 0xAEE5, 0xAEEC, 0xAEDB, 0xAEE7, 0xD1E9, 0xAEE9, 0xAED8, 0, /* 0x40 */
+ 0xAED7, 0xD1DB, 0, 0xD1DF, 0xAEE0, 0xD1F1, 0xD1E8, 0xD1E0, /* 0x40 */
+ 0xAEE4, 0xAEE1, 0, 0xAED9, 0xAEDC, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xD5C4, 0, 0xD5B4, 0xD5B5, 0xD5B9, /* 0x60 */
+ 0, 0xD5C8, 0xD5C5, 0, 0xD5BE, 0xD5BD, 0xB1ED, 0xD5C1, /* 0x70 */
+ 0xD5D0, 0xD5B0, 0, 0xD5D1, 0xD5C3, 0xD5D5, 0xD5C9, 0xB1EC, /* 0x70 */
+ 0xD5C7, 0xB1E7, 0xB1FC, 0xB1F2, 0, 0xB1F6, 0xB1F5, 0xD5B1, /* 0x80 */
+ 0, 0xD5CE, 0xD5D4, 0xD5CC, 0xD5D3, 0, 0, 0xD5C0, /* 0x80 */
+ 0xD5B2, 0xD5D2, 0xD5C2, 0xB1EA, 0xB1F7, 0, 0xD5CB, 0xB1F0, /* 0x90 */
+ 0, 0, 0, 0xD5CA, 0xD5B3, 0xB1F8, 0, 0xB1FA, /* 0x90 */
+ 0xD5CD, 0xB1FB, 0xB1E9, 0xD5BA, 0xD5CF, 0, 0, 0xB1EF, /* 0xA0 */
+ 0xB1F9, 0xD5BC, 0xD5C6, 0xD5B7, 0xD5BB, 0xB1F4, 0xD5B6, 0xB1E8, /* 0xA0 */
+ 0xB1F1, 0xB1EE, 0xD5BF, 0xAEDE, 0xD9C0, 0xB1EB, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0xB1F3, 0, 0xD9C3, 0xD9D9, /* 0xC0 */
+ 0xD9CE, 0xB4D6, 0, 0xB4D1, 0xD9BD, 0xB4D2, 0xD9CD, 0, /* 0xC0 */
+ 0xD9C6, 0xD9D3, 0xB4CE, 0xD9AB, 0xD9D5, 0xB4C4, 0xD9B3, 0xB4C7, /* 0xD0 */
+ 0xB4C6, 0, 0xB4D7, 0, 0xD9AD, 0xD9CF, 0xD9D0, 0xB4C9, /* 0xD0 */
+ 0xB4C5, 0xD9BB, 0, 0xB4D0, 0xD9B6, 0, 0xD9D1, 0xB4CC, /* 0xE0 */
+ 0xD9C9, 0xD9D6, 0xD9B0, 0xD9B5, 0xD9AF, 0, 0xB4CB, 0xD9C2, /* 0xE0 */
+ 0xDDDE, 0xD9B1, 0xB4CF, 0xD9BA, 0xD9D2, 0xB4CA, 0xD9B7, 0xD9B4, /* 0xF0 */
+ 0xD9C5, 0xB4CD, 0xB4C3, 0xB4D9, 0xD9C8, 0xD9C7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_69[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD9AC, 0xB4C8, 0xD9D4, 0xD9BC, /* 0x00 */
+ 0xD9BE, 0, 0xD9CB, 0xD9CA, 0xD9AA, 0xB4D3, 0xB4D5, 0xD9B2, /* 0x00 */
+ 0xD9B9, 0xD9C1, 0xB4D4, 0xD9B8, 0xD9C4, 0xD9D7, 0, 0xD9CC, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xD9D8, 0, 0, /* 0x20 */
+ 0, 0, 0xD9AE, 0, 0, 0, 0, 0xDDF2, /* 0x20 */
+ 0xB7A6, 0, 0xDDF0, 0xDDDB, 0xDDE0, 0xDDD9, 0, 0xDDEC, /* 0x30 */
+ 0xDDCB, 0xDDD2, 0, 0xDDEA, 0xDDF4, 0xDDDC, 0, 0xDDCF, /* 0x30 */
+ 0xDDE2, 0xDDE7, 0xDDD3, 0, 0xDDE4, 0xDDD0, 0, 0, /* 0x40 */
+ 0xDDD7, 0xDDD8, 0xB7A8, 0xDDEB, 0xDDE9, 0, 0xDDCC, 0xDDEE, /* 0x40 */
+ 0, 0xDDEF, 0xDDF1, 0xB7AC, 0xB7A4, 0, 0xD5B8, 0xDDD4, /* 0x50 */
+ 0xDDE6, 0xDDD5, 0xB7A1, 0xB7B1, 0xDDED, 0xB7AF, 0xB7AB, 0xDDCA, /* 0x50 */
+ 0xB7A3, 0, 0xDDCD, 0xB7B0, 0, 0xDDDD, 0xDDC9, 0, /* 0x60 */
+ 0xB7A9, 0xDDE1, 0xDDD1, 0xB7AA, 0xDDDA, 0xB77E, 0xB4D8, 0xDDE3, /* 0x60 */
+ 0xD9BF, 0xDDCE, 0, 0, 0xDDE8, 0xB7A5, 0xDDE5, 0xB7A2, /* 0x70 */
+ 0xDDDF, 0xB7AD, 0xDDD6, 0xDDF3, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xB7A7, 0xDEC6, 0, 0, 0xB7AE, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xE24A, 0xE248, 0, /* 0x80 */
+ 0xE25E, 0xE246, 0, 0xE258, 0xB77D, 0xBA5F, 0xE242, 0xE25D, /* 0x90 */
+ 0, 0xE247, 0xE255, 0xBA64, 0xBA5D, 0, 0xE25B, 0, /* 0x90 */
+ 0xE240, 0xE25A, 0, 0xBA6F, 0xE251, 0xE261, 0xBA6D, 0xE249, /* 0xA0 */
+ 0xBA5E, 0xE24B, 0xE259, 0xBA67, 0xE244, 0xBA6B, 0xBA61, 0xE24D, /* 0xA0 */
+ 0xE243, 0xE1FC, 0, 0xE257, 0xBA68, 0xE260, 0xE1FD, 0xBA65, /* 0xB0 */
+ 0, 0xE253, 0, 0xBA66, 0xE245, 0xE250, 0xE24C, 0xE24E, /* 0xB0 */
+ 0, 0xBA60, 0xE25F, 0xBA6E, 0xE24F, 0, 0xE262, 0, /* 0xC0 */
+ 0, 0xE1FE, 0xE254, 0xBA63, 0xBA6C, 0xBA6A, 0xE241, 0xE256, /* 0xC0 */
+ 0xBA69, 0, 0, 0xBA62, 0xE252, 0, 0, 0, /* 0xD0 */
+ 0, 0xE25C, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xE5D5, 0, 0xE5D1, 0xE5CD, 0xE5E1, 0xE5DE, /* 0xE0 */
+ 0xBCCD, 0, 0, 0xE5E5, 0xE5D4, 0xBCD8, 0xE5DB, 0, /* 0xE0 */
+ 0, 0xE5D0, 0xE5DA, 0xBCD5, 0xE5EE, 0, 0xE5EB, 0xE5DD, /* 0xF0 */
+ 0xE5CE, 0, 0, 0xE5E2, 0xE5E4, 0xBCD1, 0xE5D8, 0xE5D3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_6A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5CA, 0xBCCE, 0xBCD6, 0, 0xE5E7, 0xBCD7, 0xE5CB, 0xE5ED, /* 0x00 */
+ 0xE5E0, 0xE5E6, 0xBCD4, 0, 0, 0xE5E3, 0, 0xE5EA, /* 0x00 */
+ 0, 0xBCD9, 0, 0xBCD3, 0xE5DC, 0xE5CF, 0xE5EF, 0xE5CC, /* 0x10 */
+ 0xE5E8, 0xBCD0, 0, 0xE5D6, 0, 0xE5D7, 0xBCCF, 0xBCCC, /* 0x10 */
+ 0xE5D2, 0xBCD2, 0, 0xBCCB, 0, 0xE5E9, 0xE5EC, 0xE5D9, /* 0x20 */
+ 0xE9CA, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0xE9C2, 0, 0xE9BE, 0xBEF6, 0, 0, /* 0x30 */
+ 0xBEEB, 0xBEF0, 0xBEEC, 0xE9CC, 0xE9D7, 0xBEEA, 0xE9C4, 0xE9CD, /* 0x30 */
+ 0xE5DF, 0xE9CE, 0, 0, 0xBEF1, 0, 0xE9DD, 0xBEF5, /* 0x40 */
+ 0xBEF8, 0xE9C0, 0, 0xBEF4, 0, 0xE9DB, 0xE9DC, 0xE9D2, /* 0x40 */
+ 0xE9D1, 0xE9C9, 0, 0, 0xE9D3, 0xE9DA, 0xE9D9, 0, /* 0x50 */
+ 0xBEEF, 0xBEED, 0xE9CB, 0xE9C8, 0, 0xE9C5, 0xE9D8, 0xBEF7, /* 0x50 */
+ 0xE9D6, 0xBEF3, 0xBEF2, 0, 0xE9D0, 0, 0xE9BF, 0xE9C1, /* 0x60 */
+ 0xE9C3, 0xE9D5, 0xE9CF, 0xBEEE, 0, 0xE9C6, 0, 0xE9D4, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0xE9C7, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0xC0CF, 0xED45, /* 0x70 */
+ 0xC0C8, 0xECF5, 0, 0xED41, 0xC0CA, 0xED48, 0, 0xECFC, /* 0x80 */
+ 0, 0xECF7, 0, 0, 0xED49, 0xECF3, 0xECFE, 0, /* 0x80 */
+ 0xC0D1, 0xED44, 0xED4A, 0xECFD, 0xC0C9, 0xED40, 0xECF4, 0xC0D0, /* 0x90 */
+ 0, 0, 0xED47, 0xECF9, 0xC0CC, 0, 0xECFB, 0xECF8, /* 0x90 */
+ 0xC0D2, 0xECFA, 0xC0CB, 0xC0CE, 0xED43, 0xECF6, 0xED46, 0, /* 0xA0 */
+ 0xED42, 0, 0, 0, 0xC263, 0xEFE7, 0xC268, 0xC269, /* 0xA0 */
+ 0, 0, 0, 0xC262, 0xEFE6, 0, 0xEFE3, 0xEFE4, /* 0xB0 */
+ 0xC266, 0xEFDE, 0xEFE2, 0xC265, 0, 0xEFDF, 0, 0, /* 0xB0 */
+ 0, 0, 0xC267, 0xC264, 0, 0xEFDD, 0xEFE1, 0xEFE5, /* 0xC0 */
+ 0, 0, 0, 0xF251, 0xF24E, 0xF257, 0, 0xF256, /* 0xC0 */
+ 0xF254, 0xF24F, 0, 0xC372, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0xF250, 0xC371, 0xC0CD, 0xF253, 0xC370, 0xF258, 0xF252, /* 0xD0 */
+ 0xF24D, 0xEFE0, 0, 0, 0, 0xC36F, 0, 0xF24C, /* 0xE0 */
+ 0xF456, 0, 0xF455, 0xF255, 0xC468, 0, 0xF459, 0xF45A, /* 0xE0 */
+ 0xF454, 0xF458, 0, 0xF453, 0, 0, 0, 0, /* 0xF0 */
+ 0xF5D1, 0xF457, 0xC4E7, 0xC4E5, 0xF5CF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_6B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF5D2, 0, 0xF5CE, 0xF5D0, 0xC4E6, 0, 0, 0, /* 0x00 */
+ 0xF6E5, 0xF6E6, 0xC576, 0xF6E4, 0, 0, 0, 0xF7E2, /* 0x00 */
+ 0xC5CF, 0xF7E0, 0xF7E1, 0xF8AC, 0, 0, 0xC656, 0xF8F3, /* 0x10 */
+ 0xF8F1, 0xF8F2, 0xF8F4, 0, 0, 0, 0xF9BB, 0, /* 0x10 */
+ 0xA4ED, 0xA6B8, 0, 0xAA59, 0, 0xCCE9, 0, 0, /* 0x20 */
+ 0xCF64, 0, 0, 0, 0xD1F5, 0xD1F7, 0, 0xD1F6, /* 0x20 */
+ 0, 0xD1F8, 0xB1FD, 0xD5D7, 0xD1F9, 0, 0xD5D6, 0xD5D8, /* 0x30 */
+ 0xD5D9, 0xD9DA, 0xB4DB, 0xD9DB, 0xD9DD, 0xB4DC, 0xB4DA, 0xD9DC, /* 0x30 */
+ 0, 0xDDFA, 0xDDF8, 0xDDF7, 0, 0xDDF6, 0xDDF5, 0xB7B2, /* 0x40 */
+ 0xDDF9, 0xBA70, 0xE263, 0xE265, 0xBA71, 0xE264, 0xBCDB, 0, /* 0x40 */
+ 0xBCDA, 0xE5F0, 0, 0, 0xE9DF, 0xE9DE, 0xE9E0, 0, /* 0x50 */
+ 0, 0xBEF9, 0, 0xED4B, 0xC0D3, 0, 0xEFE8, 0xC26A, /* 0x50 */
+ 0xF259, 0xC577, 0xA4EE, 0xA5BF, 0xA6B9, 0xA842, 0xAA5A, 0xAA5B, /* 0x60 */
+ 0, 0, 0xAC6E, 0, 0, 0xD1FA, 0, 0, /* 0x60 */
+ 0, 0, 0xB7B3, 0, 0, 0, 0xE6D1, 0xBEFA, /* 0x70 */
+ 0xC26B, 0xA4EF, 0, 0xA6BA, 0, 0, 0xCCEB, 0xAA5C, /* 0x70 */
+ 0xCCEA, 0, 0xCF65, 0xAC6F, 0xCF66, 0, 0xAC70, 0, /* 0x80 */
+ 0xD1FC, 0xAEEE, 0xAEED, 0, 0xD5DE, 0xD5DC, 0xD5DD, 0xD5DB, /* 0x80 */
+ 0, 0xD5DA, 0, 0, 0xD9DE, 0xD9E1, 0xB4DE, 0xD9DF, /* 0x90 */
+ 0xB4DD, 0xD9E0, 0, 0xDDFB, 0, 0, 0xE266, 0xE267, /* 0x90 */
+ 0xE268, 0, 0xE5F3, 0xE5F2, 0xBCDC, 0xE5F1, 0xE5F4, 0xE9E1, /* 0xA0 */
+ 0, 0, 0xE9E2, 0xE9E3, 0, 0xED4C, 0xC0D4, 0xC26C, /* 0xA0 */
+ 0xF25A, 0, 0xC4E8, 0xC95F, 0, 0xAC71, 0xCF67, 0xAEEF, /* 0xB0 */
+ 0, 0, 0xB1FE, 0, 0xB4DF, 0xD9E2, 0, 0xB7B5, /* 0xB0 */
+ 0xB7B4, 0, 0, 0xE269, 0xE26A, 0xBCDD, 0xBCDE, 0xE9E5, /* 0xC0 */
+ 0xE9E4, 0xEFE9, 0xF7E3, 0xA4F0, 0xC960, 0xA5C0, 0, 0xA843, /* 0xC0 */
+ 0xCB48, 0, 0xAC72, 0xB7B6, 0xA4F1, 0, 0xCF68, 0xAC73, /* 0xD0 */
+ 0xCF69, 0, 0xC0D5, 0xA4F2, 0, 0, 0xCCEC, 0, /* 0xD0 */
+ 0xCF6A, 0, 0xD242, 0xD241, 0xD1FE, 0, 0xD1FD, 0xD243, /* 0xE0 */
+ 0xD240, 0, 0, 0xB240, 0xB241, 0, 0, 0xB4E0, /* 0xE0 */
+ 0xD9E3, 0, 0xD9E4, 0xD9E5, 0, 0, 0, 0xDE41, /* 0xF0 */
+ 0xDE42, 0xDE40, 0, 0xDDFD, 0xDDFE, 0xB7B7, 0xE26B, 0xE5F7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_6C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE5F6, 0xE5F5, 0xE5F8, 0xE9E7, 0xE9E6, 0xBEFB, 0xE9E8, 0, /* 0x00 */
+ 0xC0D6, 0xED4D, 0, 0xEFEA, 0xF25B, 0xF6E7, 0, 0xA4F3, /* 0x00 */
+ 0xA5C2, 0xA5C1, 0, 0xAA5D, 0xC961, 0xC97E, 0xA6BB, 0, /* 0x10 */
+ 0xC9F7, 0xCB49, 0xCB4A, 0xAA5E, 0, 0xCCED, 0, 0xAC74, /* 0x10 */
+ 0xCF6B, 0xCF6C, 0, 0xAEF0, 0xAEF4, 0xD244, 0xAEF3, 0xAEF1, /* 0x20 */
+ 0xAEF2, 0, 0xD5DF, 0xB242, 0xB4E3, 0, 0xB4E1, 0xB4E2, /* 0x20 */
+ 0xD9E6, 0, 0, 0xBA72, 0xA4F4, 0, 0xC9A1, 0, /* 0x30 */
+ 0xA5C3, 0, 0, 0xC9A4, 0, 0, 0xA5C6, 0xC9A3, /* 0x30 */
+ 0xA5C5, 0xA5C4, 0xA844, 0xC9A2, 0, 0, 0xC9F8, 0, /* 0x40 */
+ 0, 0, 0xC9FC, 0xC9FE, 0xCA40, 0xA6C5, 0xA6C6, 0xC9FB, /* 0x40 */
+ 0xA6C1, 0, 0xC9F9, 0, 0xC9FD, 0xA6C2, 0, 0xA6BD, /* 0x50 */
+ 0, 0xA6BE, 0, 0xA6C4, 0xC9FA, 0xA6BC, 0xA845, 0xA6BF, /* 0x50 */
+ 0xA6C0, 0xA6C3, 0, 0, 0, 0xCB5B, 0xCB59, 0xCB4C, /* 0x60 */
+ 0xA851, 0xCB53, 0xA84C, 0xCB4D, 0, 0xCB55, 0, 0xCB52, /* 0x60 */
+ 0xA84F, 0xCB51, 0xA856, 0xCB5A, 0xA858, 0, 0xA85A, 0, /* 0x70 */
+ 0xCB4B, 0, 0xA84D, 0xCB5C, 0, 0xA854, 0xA857, 0, /* 0x70 */
+ 0xCD45, 0xA847, 0xA85E, 0xA855, 0xCB4E, 0xA84A, 0xA859, 0xCB56, /* 0x80 */
+ 0xA848, 0xA849, 0xCD43, 0xCB4F, 0xA850, 0xA85B, 0xCB5D, 0xCB50, /* 0x80 */
+ 0xA84E, 0, 0xA853, 0xCCEE, 0xA85C, 0xCB57, 0xA852, 0, /* 0x90 */
+ 0xA85D, 0xA846, 0xCB54, 0xA84B, 0xCB58, 0xCD44, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0xAA6A, 0xAA7A, 0xCCF5, 0xAA71, 0, /* 0xA0 */
+ 0xCD4B, 0xAA62, 0, 0xAA65, 0xCD42, 0, 0xCCF3, 0xCCF7, /* 0xB0 */
+ 0xAA6D, 0xAA6F, 0xCCFA, 0xAA76, 0xAA68, 0xAA66, 0xAA67, 0xAA75, /* 0xB0 */
+ 0xCD47, 0xAA70, 0xCCF9, 0xCCFB, 0xAA6E, 0xAA73, 0xCCFC, 0xCD4A, /* 0xC0 */
+ 0, 0xAC75, 0xAA79, 0, 0xAA63, 0xCD49, 0, 0xCD4D, /* 0xC0 */
+ 0xCCF8, 0xCD4F, 0xCD40, 0xAA6C, 0xCCF4, 0xAA6B, 0xAA7D, 0xAA72, /* 0xD0 */
+ 0, 0xCCF2, 0xCF75, 0xAA78, 0xAA7C, 0xCD41, 0xCD46, 0, /* 0xD0 */
+ 0xAA7E, 0xAA77, 0xAA69, 0xAA5F, 0, 0xAA64, 0, 0xCCF6, /* 0xE0 */
+ 0xAA60, 0xCD4E, 0, 0xCCF0, 0xCCEF, 0xCCFD, 0xCCF1, 0xAA7B, /* 0xE0 */
+ 0xAEF5, 0xAA74, 0xCCFE, 0xAA61, 0, 0xACA6, 0, 0, /* 0xF0 */
+ 0, 0xCD4C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_6D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xCF7C, 0xCFA1, 0, 0xCFA4, 0xCF77, 0, 0, 0xCFA7, /* 0x00 */
+ 0xCFAA, 0xCFAC, 0xCF74, 0xAC76, 0xAC7B, 0xD249, 0xACAD, 0xCFA5, /* 0x00 */
+ 0xCFAD, 0xCF7B, 0xCF73, 0, 0, 0, 0xD264, 0xAC7E, /* 0x10 */
+ 0xCFA2, 0xCF78, 0xCF7A, 0xACA5, 0, 0xCF7D, 0xAC7D, 0xCF70, /* 0x10 */
+ 0xCFA8, 0, 0xCFAB, 0, 0, 0xAC7A, 0, 0xACA8, /* 0x20 */
+ 0xCF6D, 0xACAA, 0xAC78, 0xACAE, 0xCFA9, 0xCF6F, 0xACAB, 0xD25E, /* 0x20 */
+ 0xCD48, 0xAC7C, 0xAC77, 0xCF76, 0xCF6E, 0xACAC, 0xACA4, 0xCFA3, /* 0x30 */
+ 0xACA9, 0xACA7, 0xCF79, 0xACA1, 0xCF71, 0xACA2, 0xACA3, 0xCF72, /* 0x30 */
+ 0xCFA6, 0xAC79, 0xCF7E, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xD24C, 0xAEFD, 0xAF43, 0, 0, 0, 0xD255, 0xD25B, /* 0x50 */
+ 0xD257, 0xD24A, 0xD24D, 0xD246, 0xD247, 0xAF4A, 0xAEFA, 0xD256, /* 0x60 */
+ 0xD25F, 0xAF45, 0xAEF6, 0, 0xAF40, 0xD24E, 0xAF42, 0xD24F, /* 0x60 */
+ 0xD259, 0, 0, 0, 0xAF44, 0xD268, 0xD248, 0xAEFC, /* 0x70 */
+ 0xAEFB, 0xAF48, 0xD245, 0xD266, 0xD25A, 0xD267, 0xD261, 0xD253, /* 0x70 */
+ 0xD262, 0, 0xD25C, 0xD265, 0xD263, 0xAF49, 0xD254, 0xAEF9, /* 0x80 */
+ 0xAEF8, 0xAF41, 0xAF47, 0xD260, 0xAF46, 0xD251, 0xB243, 0, /* 0x80 */
+ 0xD269, 0xD250, 0xD24B, 0xAEFE, 0xAF4B, 0xAEF7, 0, 0xD258, /* 0x90 */
+ 0xD25D, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xB265, 0xD5E1, 0xD5E5, 0, 0xB252, 0xB250, /* 0xA0 */
+ 0, 0, 0xB247, 0xD5E3, 0xD5E2, 0xB25B, 0, 0xD5E8, /* 0xB0 */
+ 0xB255, 0, 0xD5FA, 0xD647, 0xB244, 0xD5F7, 0xD5F0, 0xB267, /* 0xB0 */
+ 0xD5E0, 0, 0xD5FC, 0, 0xB264, 0xB258, 0xB263, 0xB24E, /* 0xC0 */
+ 0xD5EC, 0xD5FE, 0xD5F6, 0xB24F, 0xB249, 0xD645, 0, 0xD5FD, /* 0xC0 */
+ 0xD640, 0xB251, 0xB259, 0xD642, 0xD5EA, 0xD5FB, 0xD5EF, 0xD644, /* 0xD0 */
+ 0xB25E, 0xB246, 0xB25C, 0xD5F4, 0xD5F2, 0xD5F3, 0xB253, 0xD5EE, /* 0xD0 */
+ 0xD5ED, 0xB248, 0xD5E7, 0xD646, 0xB24A, 0xD5F1, 0xB268, 0, /* 0xE0 */
+ 0xB262, 0xD5E6, 0xB25F, 0xB25D, 0xB266, 0xD5F8, 0xB261, 0xD252, /* 0xE0 */
+ 0xD5F9, 0xB260, 0xD641, 0xB245, 0xD5F5, 0xB257, 0xD5E9, 0xB256, /* 0xF0 */
+ 0, 0xB254, 0xB24C, 0xB24B, 0xD9E7, 0xD643 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_6E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD5EB, 0, 0, 0xD9FC, 0, 0xB24D, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xB541, 0xB25A, 0xB4EE, 0xD9F6, 0xB4FC, 0, 0xD9EA, /* 0x10 */
+ 0xB4EB, 0xB4E7, 0xDA49, 0xB4ED, 0xB4F1, 0xB4EC, 0xB4F5, 0xDA4D, /* 0x20 */
+ 0xDA44, 0, 0, 0xD9F1, 0xB4FA, 0xB4F4, 0xD9FD, 0xB4E4, /* 0x20 */
+ 0xDA4A, 0xDA43, 0xB4E8, 0xD9F7, 0xB4F7, 0xDA55, 0xDA56, 0, /* 0x30 */
+ 0xB4E5, 0xDA48, 0xB4F9, 0xD9FB, 0xD9ED, 0xD9EE, 0xB4FD, 0xD9F2, /* 0x30 */
+ 0xD9F9, 0xD9F3, 0, 0xB4FB, 0xB544, 0xD9EF, 0xD9E8, 0xD9E9, /* 0x40 */
+ 0, 0xD9EB, 0xB4EA, 0xD9F8, 0, 0xB4F8, 0xB542, 0, /* 0x40 */
+ 0, 0xD9FA, 0xDA53, 0xDA4B, 0xB4E6, 0xDA51, 0xB4F2, 0, /* 0x50 */
+ 0xB4F0, 0, 0xDA57, 0xB4EF, 0xDA41, 0xD9F4, 0xD9FE, 0xB547, /* 0x50 */
+ 0xDA45, 0xDA42, 0xD9F0, 0xB543, 0xDA4F, 0xDA4C, 0xDA54, 0xB4E9, /* 0x60 */
+ 0xDA40, 0xB546, 0, 0xDA47, 0, 0, 0xB4F3, 0xB4F6, /* 0x60 */
+ 0, 0xDA46, 0xB545, 0xD9F5, 0xD5E4, 0, 0, 0xDA50, /* 0x70 */
+ 0xDA4E, 0xDA52, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xD9EC, 0xB540, 0, 0, 0, 0xDE61, 0xDE60, 0xDE46, /* 0x80 */
+ 0xB7BD, 0, 0xDE5F, 0xDE49, 0xDE4A, 0, 0xB7C7, 0xDE68, /* 0x90 */
+ 0xB7C2, 0xDE5E, 0, 0xDE43, 0xB7C8, 0xB7BE, 0xDE52, 0xDE48, /* 0x90 */
+ 0xDE4B, 0xDE63, 0xB7B8, 0xDE6A, 0xDE62, 0xB7C1, 0xDE57, 0xB7CC, /* 0xA0 */
+ 0, 0, 0xB7CB, 0xB7C5, 0, 0, 0xDE69, 0xB7B9, /* 0xA0 */
+ 0xDE55, 0xDE4C, 0xDE59, 0xDE65, 0xB7CD, 0, 0xB7BB, 0xDE54, /* 0xB0 */
+ 0, 0xDE4D, 0xB7C4, 0, 0xB7C3, 0xDE50, 0xDE5A, 0xDE64, /* 0xB0 */
+ 0xDE47, 0xDE51, 0xB7BC, 0xDE5B, 0xB7C9, 0xB7C0, 0xDE4E, 0xB7BF, /* 0xC0 */
+ 0xDE45, 0xDE53, 0xDE67, 0xB4FE, 0xBAB0, 0xDE56, 0xE26C, 0xDE58, /* 0xC0 */
+ 0xDE66, 0xB7C6, 0xDE4F, 0xB7BA, 0xB7CA, 0xBCF0, 0xDE44, 0, /* 0xD0 */
+ 0xDE5D, 0, 0, 0, 0xDE5C, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xE2AA, 0xBAAD, 0xE27D, 0xE2A4, 0xBAA2, /* 0xE0 */
+ 0, 0xE26E, 0xBAAF, 0, 0xBA77, 0xE26D, 0xE2B0, 0xBAB1, /* 0xF0 */
+ 0xE271, 0xE2A3, 0, 0xE273, 0xE2B3, 0xE2AF, 0xBA75, 0xBAA1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_6F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE653, 0xBAAE, 0xBA7D, 0xE26F, 0, 0xE2AE, 0xBAA3, 0xE2AB, /* 0x00 */
+ 0xE2B8, 0xE275, 0xE27E, 0, 0, 0xE2B6, 0xE2AC, 0xBA7C, /* 0x00 */
+ 0, 0, 0xE27C, 0xBA76, 0xBA74, 0xBAA8, 0, 0, /* 0x10 */
+ 0xE27A, 0xE277, 0xE278, 0, 0xE2B2, 0, 0xE2B7, 0xE2B5, /* 0x10 */
+ 0xBA7A, 0xE2B9, 0xBA7E, 0xBAA7, 0, 0xE270, 0xE5FA, 0xE279, /* 0x20 */
+ 0, 0xBA78, 0xBAAC, 0xBAA9, 0xBA7B, 0xE2A5, 0xE274, 0xBAAA, /* 0x20 */
+ 0xE2A7, 0xBAA4, 0xBAA6, 0xBA73, 0, 0xE2A9, 0xE2A1, 0xE272, /* 0x30 */
+ 0xBAA5, 0xE2B1, 0xE2B4, 0xE27B, 0xE2A8, 0, 0xBA79, 0xBCDF, /* 0x30 */
+ 0xE2A6, 0xE5F9, 0, 0xE2AD, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0xE276, 0xE644, /* 0x40 */
+ 0xE64E, 0xBCE2, 0xE64D, 0xE659, 0xBCE4, 0xE64B, 0, 0xE64F, /* 0x50 */
+ 0xBCEF, 0, 0xE646, 0xBCE7, 0, 0xE652, 0xE9F0, 0xBCF3, /* 0x50 */
+ 0xBCF2, 0xE654, 0xE643, 0xE65E, 0xBCED, 0, 0xBCE3, 0xE657, /* 0x60 */
+ 0, 0xE65B, 0xE660, 0xE655, 0xE649, 0xBCE6, 0xBCE9, 0xBCF1, /* 0x60 */
+ 0xBCEC, 0, 0xE64C, 0xE2A2, 0, 0, 0xE648, 0xE65F, /* 0x70 */
+ 0xBCE8, 0, 0xBCEB, 0xE661, 0xBCE0, 0xE656, 0xE5FB, 0xE65C, /* 0x70 */
+ 0xC0DF, 0, 0xE64A, 0, 0xBCE1, 0xE645, 0xBCE5, 0xE5FC, /* 0x80 */
+ 0xBAAB, 0xE641, 0, 0xE65A, 0xE642, 0xE640, 0xBCEA, 0, /* 0x80 */
+ 0xE658, 0, 0xE5FE, 0xE651, 0xE650, 0xE65D, 0xE647, 0xBCEE, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0xE9F3, 0, /* 0x90 */
+ 0xBF49, 0xBEFE, 0xEA40, 0xE9EB, 0xBF41, 0xE9F7, 0xBF48, 0xBF43, /* 0xA0 */
+ 0xE9F5, 0xED4F, 0xE9FB, 0xEA42, 0xE9FA, 0xE9E9, 0xE9F8, 0xEA44, /* 0xA0 */
+ 0xEA46, 0xBEFD, 0xEA45, 0xBF44, 0xBF4A, 0, 0xBF47, 0, /* 0xB0 */
+ 0xE9FE, 0xBF46, 0xE9F9, 0, 0xE9ED, 0xE9F2, 0, 0xE9FD, /* 0xB0 */
+ 0xBF45, 0xBF42, 0xBEFC, 0xBF40, 0xE9F1, 0, 0xE5FD, 0xE9EC, /* 0xC0 */
+ 0xE9EF, 0xEA41, 0xE9F4, 0xE9EA, 0xED4E, 0xEA43, 0xE9EE, 0xE9FC, /* 0xC0 */
+ 0, 0, 0, 0, 0xED51, 0xC0E3, 0, 0, /* 0xD0 */
+ 0xC0D7, 0, 0, 0xC0DB, 0xED53, 0xED59, 0xED57, 0xC0D9, /* 0xD0 */
+ 0xC0DA, 0xC0E1, 0xED5A, 0xED52, 0xC0DC, 0, 0xED56, 0xED55, /* 0xE0 */
+ 0xED5B, 0xC0E2, 0, 0xC0DD, 0xC0E0, 0xED54, 0xC0E4, 0xC0DE, /* 0xE0 */
+ 0xC0E5, 0xC0D8, 0xED58, 0, 0xED50, 0, 0, 0xEFF7, /* 0xF0 */
+ 0, 0, 0xC271, 0xEFF4, 0xEFF6, 0, 0xC26F, 0xEFF2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_70[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEFF3, 0xEFEE, 0, 0, 0xE9F6, 0xEFEF, 0xC270, 0xEFEB, /* 0x00 */
+ 0, 0xC26D, 0xEFF8, 0xC26E, 0xEFEC, 0xEFED, 0xEFF1, 0xC273, /* 0x00 */
+ 0, 0xC272, 0, 0, 0xEFF0, 0xC378, 0xF25F, 0xF265, /* 0x10 */
+ 0xC379, 0xF25C, 0xC376, 0xC373, 0xF267, 0xC377, 0, 0xC374, /* 0x10 */
+ 0xF25E, 0xF261, 0xF262, 0xF263, 0xF266, 0, 0xEFF5, 0xF25D, /* 0x20 */
+ 0xC375, 0xF264, 0xF268, 0xF260, 0, 0, 0, 0xF45D, /* 0x20 */
+ 0xC46A, 0xF460, 0xC46B, 0xF468, 0xF45F, 0xF45C, 0, 0xF45E, /* 0x30 */
+ 0xF462, 0xF465, 0xF464, 0xF467, 0xF45B, 0, 0xC469, 0xF463, /* 0x30 */
+ 0xF466, 0xF469, 0xF461, 0xF5D3, 0xF5D4, 0xF5D8, 0xF5D9, 0, /* 0x40 */
+ 0xF5D6, 0xF5D7, 0xF5D5, 0, 0xC4E9, 0, 0, 0, /* 0x40 */
+ 0, 0xC578, 0xF6EB, 0, 0, 0xF6E8, 0xF6E9, 0xF6EA, /* 0x50 */
+ 0xC579, 0, 0xF7E5, 0xF7E4, 0, 0xF8AF, 0xC5F4, 0xF8AD, /* 0x50 */
+ 0xF8B0, 0xF8AE, 0xF8F5, 0xC657, 0xC665, 0xF9A3, 0xF96C, 0, /* 0x60 */
+ 0xF9A2, 0xF9D0, 0xF9D1, 0xA4F5, 0, 0, 0, 0, /* 0x60 */
+ 0xA6C7, 0xCA41, 0, 0, 0xCB5E, 0, 0xA85F, 0, /* 0x70 */
+ 0xA862, 0, 0xCB5F, 0, 0xA860, 0xA861, 0, 0, /* 0x70 */
+ 0, 0, 0xCD58, 0xCD5A, 0xCD55, 0xCD52, 0xCD54, 0, /* 0x80 */
+ 0, 0, 0xAAA4, 0, 0, 0, 0xAAA2, 0, /* 0x80 */
+ 0, 0xCD56, 0xAAA3, 0xCD53, 0xCD50, 0xAAA1, 0xCD57, 0, /* 0x90 */
+ 0xCD51, 0xAAA5, 0xCD59, 0, 0, 0, 0, 0xCFAF, /* 0x90 */
+ 0, 0xCFB3, 0, 0, 0xACB7, 0, 0, 0, /* 0xA0 */
+ 0, 0xCFB6, 0, 0xACAF, 0xACB2, 0xACB4, 0xACB6, 0xACB3, /* 0xA0 */
+ 0xCFB2, 0xCFB1, 0, 0xACB1, 0xCFB4, 0xCFB5, 0, 0xCFAE, /* 0xB0 */
+ 0xACB5, 0, 0xACB0, 0, 0, 0, 0xCFB0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xD277, 0xD278, 0xD279, /* 0xC0 */
+ 0xAF50, 0, 0xAF4C, 0xD26E, 0, 0xD276, 0xD27B, 0xAF51, /* 0xC0 */
+ 0, 0xD26C, 0xD272, 0xD26B, 0xD275, 0, 0, 0xD271, /* 0xD0 */
+ 0xAF4D, 0xAF4F, 0xD27A, 0, 0xD26A, 0xD26D, 0xD273, 0, /* 0xD0 */
+ 0xD274, 0xD27C, 0xD270, 0, 0xAF4E, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xB26D, /* 0xE0 */
+ 0xD64E, 0, 0, 0xD650, 0xD64C, 0, 0xD658, 0xD64A, /* 0xF0 */
+ 0xD657, 0xB269, 0xD648, 0xDA5B, 0xD652, 0xB26C, 0, 0xD653 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_71[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD656, 0, 0xD65A, 0, 0xD64F, 0, 0xD654, 0, /* 0x00 */
+ 0, 0xB26A, 0xB26B, 0xD659, 0xD64D, 0xD649, 0xD65B, 0, /* 0x00 */
+ 0xD651, 0, 0, 0xD655, 0, 0, 0, 0xD64B, /* 0x10 */
+ 0, 0xB548, 0xB549, 0xDA65, 0xB54F, 0, 0xDA59, 0xDA62, /* 0x10 */
+ 0xDA58, 0xB54C, 0xDA60, 0xDA5E, 0, 0xDA5F, 0xB54A, 0, /* 0x20 */
+ 0xDA63, 0, 0, 0, 0, 0, 0xDA5C, 0xDA5A, /* 0x20 */
+ 0xB54B, 0xDA5D, 0xDA61, 0, 0, 0, 0xB54D, 0, /* 0x30 */
+ 0, 0, 0xDA64, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xDE70, 0xDE77, 0xDE79, 0xDEA1, 0, 0xB7DA, 0xDE6B, /* 0x40 */
+ 0, 0xB7D2, 0, 0xDE7A, 0xB7D7, 0xDEA2, 0xB7CE, 0, /* 0x40 */
+ 0xDE7D, 0, 0xDE6D, 0xDE7E, 0xDE6C, 0, 0xB7DC, 0, /* 0x50 */
+ 0xDE78, 0xB7CF, 0xDEA3, 0, 0xB7D4, 0xDE71, 0xB7D9, 0xDE7C, /* 0x50 */
+ 0xDE6F, 0xDE76, 0xDE72, 0xDE6E, 0xB7D1, 0xB7D8, 0xB7D6, 0xB7D3, /* 0x60 */
+ 0xB7DB, 0xB7D0, 0xDE75, 0, 0xB7D5, 0, 0xB54E, 0, /* 0x60 */
+ 0xDE7B, 0, 0xDE73, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xDE74, 0, 0, 0xE2C1, 0, 0xBAB4, 0, 0, /* 0x70 */
+ 0xE2BD, 0xE2C3, 0xE2BF, 0, 0xBAB6, 0xE2BE, 0xE2C2, 0xE2BA, /* 0x80 */
+ 0, 0xE2BC, 0xBAB5, 0, 0, 0, 0, 0xE2C0, /* 0x80 */
+ 0xE2BB, 0, 0xBAB7, 0, 0xBAB2, 0, 0, 0xE2C4, /* 0x90 */
+ 0, 0xBAB3, 0xE667, 0xE664, 0xE670, 0xE66A, 0xE66C, 0xBCF4, /* 0x90 */
+ 0xE666, 0xE66E, 0, 0, 0xE66D, 0xE66B, 0, 0xE671, /* 0xA0 */
+ 0xBCF7, 0xE668, 0xE66F, 0, 0xBCF5, 0, 0, 0xE663, /* 0xA0 */
+ 0xE665, 0xBCF6, 0xE662, 0xE672, 0, 0xE669, 0, 0, /* 0xB0 */
+ 0xEA4A, 0xBF51, 0, 0, 0xEA55, 0xEA53, 0xBF4B, 0xEA49, /* 0xB0 */
+ 0xEA4C, 0xEA4D, 0xEA48, 0xBF55, 0xBF56, 0xEA47, 0xEA56, 0xEA51, /* 0xC0 */
+ 0xBF4F, 0xBF4C, 0xEA50, 0xEA4E, 0, 0, 0xBF52, 0xEA52, /* 0xC0 */
+ 0xBF4D, 0, 0xBF4E, 0, 0xEA4F, 0xBF50, 0xEA4B, 0, /* 0xD0 */
+ 0xEA54, 0xBF53, 0xEA57, 0xEA58, 0xBF54, 0, 0, 0xC0E7, /* 0xD0 */
+ 0xC0EE, 0xED5C, 0xED62, 0, 0xED60, 0xC0EA, 0xC0E9, 0xC0E6, /* 0xE0 */
+ 0xED5E, 0, 0, 0, 0xC0EC, 0xC0EB, 0xC0E8, 0, /* 0xE0 */
+ 0xED61, 0xED5D, 0xED5F, 0, 0xC0ED, 0, 0, 0, /* 0xF0 */
+ 0xC277, 0xEFFB, 0, 0xC274, 0xC275, 0xEFFD, 0xC276, 0xEFFA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_72[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEFF9, 0xF26C, 0xEFFC, 0, 0xF26D, 0xC37A, 0xF26B, /* 0x00 */
+ 0, 0, 0xF26A, 0, 0xF269, 0xC37B, 0, 0, /* 0x00 */
+ 0xC46C, 0, 0, 0xF46A, 0xF46B, 0, 0, 0, /* 0x10 */
+ 0, 0xF5DC, 0xF5DB, 0xC4EA, 0, 0xF5DA, 0xF6EC, 0xF6ED, /* 0x10 */
+ 0, 0, 0xF7E6, 0xF8B1, 0, 0, 0xF8F6, 0xF9BC, /* 0x20 */
+ 0xC679, 0xF9C6, 0xA4F6, 0, 0xAAA6, 0xAAA7, 0, 0, /* 0x20 */
+ 0xACB8, 0, 0, 0, 0, 0xC0EF, 0xA4F7, 0, /* 0x30 */
+ 0xAAA8, 0xAF52, 0xB7DD, 0xA4F8, 0, 0xB26E, 0xBAB8, 0xC962, /* 0x30 */
+ 0, 0xCFB7, 0xD27D, 0, 0xE2C5, 0, 0xC0F0, 0xA4F9, /* 0x40 */
+ 0xAAA9, 0xCFB8, 0xCFB9, 0xDA66, 0xB550, 0, 0, 0xDEA4, /* 0x40 */
+ 0, 0, 0xB7DE, 0xE2C6, 0, 0, 0xBCF8, 0, /* 0x50 */
+ 0xC37C, 0xA4FA, 0xDA67, 0xA4FB, 0, 0xA6C9, 0xCA42, 0xA6C8, /* 0x50 */
+ 0xA865, 0xA864, 0xA863, 0xCB60, 0, 0, 0, 0xAAAA, /* 0x60 */
+ 0, 0xAAAB, 0xCD5B, 0, 0xCFBA, 0, 0xCFBD, 0xACBA, /* 0x60 */
+ 0xCFBB, 0, 0xACB9, 0xCFBC, 0xACBB, 0, 0xD2A2, 0xD2A1, /* 0x70 */
+ 0xD27E, 0xAF53, 0, 0xD65D, 0xD65E, 0xB26F, 0xD65C, 0xD65F, /* 0x70 */
+ 0xB552, 0xB270, 0, 0, 0xB551, 0xDA6B, 0xDA6A, 0, /* 0x80 */
+ 0xDA68, 0xDA69, 0, 0xDA6C, 0xDEA6, 0xDEA5, 0xDEA9, 0, /* 0x80 */
+ 0xDEA8, 0xDEA7, 0xBAB9, 0xE2C9, 0, 0xE2C8, 0xBABA, 0xE2C7, /* 0x90 */
+ 0xE673, 0, 0xE674, 0xBCF9, 0, 0xEA59, 0xEA5A, 0, /* 0x90 */
+ 0, 0xF272, 0xC37D, 0xF271, 0xF270, 0xF26E, 0xF26F, 0xC4EB, /* 0xA0 */
+ 0xF46C, 0xF6EE, 0xF8F7, 0, 0xA4FC, 0, 0xC9A5, 0xA5C7, /* 0xA0 */
+ 0xC9A6, 0, 0, 0, 0xCA43, 0xCA44, 0, 0, /* 0xB0 */
+ 0, 0, 0xCB66, 0, 0, 0xCB62, 0, 0xCB61, /* 0xB0 */
+ 0xAAAC, 0xCB65, 0xA867, 0xCB63, 0xA866, 0xCB67, 0xCB64, 0, /* 0xC0 */
+ 0, 0xCD5F, 0xCFBE, 0xCD5D, 0xCD64, 0, 0xAAAD, 0, /* 0xC0 */
+ 0xAAB0, 0xCD65, 0xCD61, 0, 0xCD62, 0, 0xCD5C, 0xAAAF, /* 0xD0 */
+ 0xCD5E, 0xAAAE, 0xCD63, 0, 0xCD60, 0, 0, 0xCFC2, /* 0xD0 */
+ 0xACBD, 0xACBE, 0, 0xCFC5, 0xCFBF, 0, 0xCFC4, 0, /* 0xE0 */
+ 0xCFC0, 0xACBC, 0xCFC3, 0xCFC1, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0xD2A8, 0xD2A5, 0, 0xD2A7, 0xAF58, /* 0xF0 */
+ 0xAF57, 0xAF55, 0xD2A4, 0xD2A9, 0xAF54, 0xAF56, 0xD2A6, 0xD667 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_73[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD2A3, 0xD2AA, 0, 0, 0, 0, 0, 0xD662, /* 0x00 */
+ 0xD666, 0, 0xD665, 0xDA6E, 0xDA79, 0, 0, 0xD668, /* 0x00 */
+ 0, 0xD663, 0xDA6D, 0xB274, 0, 0, 0xB273, 0xD661, /* 0x10 */
+ 0xD664, 0xB275, 0, 0xB272, 0xB271, 0xD660, 0xD669, 0, /* 0x10 */
+ 0, 0, 0xDA70, 0xDA77, 0, 0xB554, 0xDA76, 0xDA73, /* 0x20 */
+ 0, 0xB556, 0, 0, 0, 0xDA75, 0, 0, /* 0x20 */
+ 0xDA6F, 0xDA71, 0xDA74, 0xDA72, 0xB555, 0xDA78, 0xB553, 0xB7DF, /* 0x30 */
+ 0, 0, 0xDEAD, 0xDEAC, 0xDEAA, 0, 0xB7E2, 0xB7E1, /* 0x30 */
+ 0xDEAE, 0, 0xDEAB, 0xE2CA, 0xBABB, 0xB7E0, 0, 0, /* 0x40 */
+ 0, 0xDEB0, 0xDEAF, 0, 0xE2CD, 0xE2CB, 0xBCFA, 0, /* 0x40 */
+ 0xBABC, 0xE2CC, 0xE676, 0, 0, 0, 0, 0xBCFB, /* 0x50 */
+ 0xE675, 0xE67E, 0xE67D, 0xE67B, 0, 0xE67A, 0xE677, 0xE678, /* 0x50 */
+ 0xE679, 0xE67C, 0xE6A1, 0, 0, 0xEA5F, 0xEA5C, 0xEA5D, /* 0x60 */
+ 0xBF57, 0xEA5B, 0xEA61, 0xEA60, 0xEA5E, 0, 0xED64, 0xED65, /* 0x60 */
+ 0xC0F1, 0, 0xC0F2, 0xED63, 0, 0xC279, 0xEFFE, 0xC278, /* 0x70 */
+ 0xC37E, 0, 0xC3A1, 0xC46D, 0xF46E, 0xF46D, 0xF5DD, 0xF6EF, /* 0x70 */
+ 0xC57A, 0xF7E8, 0xF7E7, 0xF7E9, 0xA5C8, 0xCFC6, 0xAF59, 0xB276, /* 0x80 */
+ 0xD66A, 0xA5C9, 0xC9A7, 0xA4FD, 0, 0, 0xCA45, 0, /* 0x80 */
+ 0, 0, 0xCB6C, 0xCB6A, 0xCB6B, 0xCB68, 0xA868, 0xCB69, /* 0x90 */
+ 0, 0, 0, 0, 0, 0xCD6D, 0, 0xAAB3, /* 0x90 */
+ 0xCD6B, 0xCD67, 0xCD6A, 0, 0xCD66, 0xAAB5, 0xCD69, 0, /* 0xA0 */
+ 0xAAB2, 0xAAB1, 0, 0xAAB4, 0xCD6C, 0xCD68, 0, 0, /* 0xA0 */
+ 0, 0, 0xACC2, 0xACC5, 0xCFCE, 0xCFCD, 0xCFCC, 0xACBF, /* 0xB0 */
+ 0xCFD5, 0xCFCB, 0, 0xACC1, 0xD2AF, 0, 0xCFD2, 0xCFD0, /* 0xB0 */
+ 0xACC4, 0, 0xCFC8, 0xCFD3, 0, 0xCFCA, 0xCFD4, 0xCFD1, /* 0xC0 */
+ 0xCFC9, 0, 0xACC0, 0xCFD6, 0xCFC7, 0xACC3, 0, 0, /* 0xC0 */
+ 0, 0, 0xD2B4, 0xD2AB, 0xD2B6, 0, 0xD2AE, 0xD2B9, /* 0xD0 */
+ 0xD2BA, 0xD2AC, 0xD2B8, 0xD2B5, 0xD2B3, 0xD2B7, 0xAF5F, 0, /* 0xD0 */
+ 0xAF5D, 0, 0, 0xD2B1, 0, 0xD2AD, 0, 0xD2B0, /* 0xE0 */
+ 0xD2BB, 0xD2B2, 0xAF5E, 0xCFCF, 0, 0xAF5A, 0xAF5C, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xD678, 0xD66D, 0xD66B, 0, /* 0xF0 */
+ 0xD66C, 0, 0xD673, 0, 0xD674, 0xD670, 0xB27B, 0xD675 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_74[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD672, 0xD66F, 0, 0xB279, 0xD66E, 0xB277, 0xB27A, 0xD671, /* 0x00 */
+ 0xD679, 0xAF5B, 0xB278, 0xD677, 0xD676, 0xB27C, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xDA7E, 0, /* 0x10 */
+ 0, 0, 0xDAA1, 0xB560, 0, 0xDAA7, 0, 0, /* 0x10 */
+ 0xDAA9, 0xDAA2, 0xB55A, 0xDAA6, 0xDAA5, 0xB55B, 0xB561, 0, /* 0x20 */
+ 0xB562, 0xDAA8, 0xB558, 0xDA7D, 0xDA7B, 0xDAA3, 0xDA7A, 0xB55F, /* 0x20 */
+ 0xDA7C, 0xDAA4, 0xDAAA, 0xB559, 0xB55E, 0xB55C, 0xB55D, 0, /* 0x30 */
+ 0, 0, 0xB557, 0, 0, 0, 0, 0xB7E9, /* 0x30 */
+ 0xDEB7, 0xB7E8, 0xDEBB, 0, 0xDEB1, 0, 0xDEBC, 0, /* 0x40 */
+ 0, 0, 0xDEB2, 0xDEB3, 0, 0xDEBD, 0xDEBA, 0xDEB8, /* 0x40 */
+ 0xDEB9, 0xDEB5, 0xDEB4, 0, 0xDEBE, 0xB7E5, 0, 0xDEB6, /* 0x50 */
+ 0, 0xB7EA, 0xB7E4, 0xB7EB, 0xB7EC, 0, 0xB7E7, 0xB7E6, /* 0x50 */
+ 0, 0, 0xE2CE, 0xBABE, 0xBABD, 0, 0, 0xE2D3, /* 0x60 */
+ 0, 0xBCFC, 0xBABF, 0, 0, 0xBAC1, 0xE2D4, 0xB7E3, /* 0x60 */
+ 0xBAC0, 0xE2D0, 0xE2D2, 0xE2CF, 0, 0xE2D1, 0, 0, /* 0x70 */
+ 0, 0xE6AB, 0, 0, 0xE6AA, 0xE6A7, 0xBD40, 0xEA62, /* 0x70 */
+ 0xBD41, 0xE6A6, 0, 0xBCFE, 0, 0xE6A8, 0xE6A5, 0xE6A2, /* 0x80 */
+ 0xE6A9, 0xE6A3, 0xE6A4, 0xBCFD, 0, 0, 0, 0, /* 0x80 */
+ 0xED69, 0, 0xEA66, 0, 0xEA65, 0xEA67, 0, 0xED66, /* 0x90 */
+ 0xBF5A, 0, 0xEA63, 0, 0xBF58, 0, 0xBF5C, 0xBF5B, /* 0x90 */
+ 0xEA64, 0xEA68, 0, 0xBF59, 0, 0xED6D, 0xC0F5, 0xC27A, /* 0xA0 */
+ 0xC0F6, 0xC0F3, 0xED6A, 0xED68, 0, 0xED6B, 0, 0xED6E, /* 0xA0 */
+ 0xC0F4, 0xED6C, 0xED67, 0, 0, 0xF042, 0xF045, 0xF275, /* 0xB0 */
+ 0xF040, 0, 0xF46F, 0xF046, 0, 0xC3A2, 0xF044, 0xC27B, /* 0xB0 */
+ 0xF041, 0xF043, 0xF047, 0xF276, 0, 0xF274, 0, 0, /* 0xC0 */
+ 0, 0, 0xC3A3, 0xF273, 0, 0, 0, 0xC46E, /* 0xC0 */
+ 0, 0, 0, 0, 0xC4ED, 0xF6F1, 0xC4EC, 0xF6F3, /* 0xD0 */
+ 0xF6F0, 0xF6F2, 0xC5D0, 0xF8B2, 0xA5CA, 0xCD6E, 0xD2BC, 0xD2BD, /* 0xD0 */
+ 0xB27D, 0xDEBF, 0xBF5D, 0xC3A4, 0xC57B, 0xF8B3, 0xA5CB, 0, /* 0xE0 */
+ 0xCD6F, 0xA260, 0, 0, 0xCFD7, 0, 0xCFD8, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0xD2BE, 0xD2BF, 0xB27E, 0xB2A1, /* 0xF0 */
+ 0, 0, 0, 0xDAAB, 0, 0xDEC2, 0xDEC1, 0xDEC0 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_75[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE2D5, 0, 0xE2D6, 0xE2D7, 0xBAC2, 0, 0, 0xE6AD, /* 0x00 */
+ 0xE6AC, 0, 0, 0xEA69, 0xBF5E, 0xBF5F, 0, 0xED72, /* 0x00 */
+ 0xED6F, 0xED70, 0xED71, 0xF049, 0xF048, 0xC27C, 0xF277, 0xF5DE, /* 0x10 */
+ 0xA5CC, 0, 0xACC6, 0, 0xB2A2, 0xDEC3, 0, 0xA5CD, /* 0x10 */
+ 0, 0xD2C0, 0xB2A3, 0, 0, 0xB563, 0xB564, 0, /* 0x20 */
+ 0xA5CE, 0xA5CF, 0xCA46, 0xA86A, 0xA869, 0xACC7, 0xCFD9, 0xDAAC, /* 0x20 */
+ 0xA5D0, 0xA5D1, 0xA5D2, 0xA5D3, 0, 0, 0, 0xA86B, /* 0x30 */
+ 0xA86C, 0xCB6E, 0xCB6D, 0, 0, 0xAAB6, 0xCD72, 0xCD70, /* 0x30 */
+ 0xCD71, 0, 0, 0, 0, 0, 0, 0xCFDA, /* 0x40 */
+ 0xCFDB, 0, 0, 0xACCB, 0xACC9, 0, 0xACCA, 0xACC8, /* 0x40 */
+ 0, 0, 0, 0, 0xAF60, 0, 0, 0, /* 0x50 */
+ 0, 0xAF64, 0xAF63, 0xD2C1, 0xAF62, 0xAF61, 0, 0xD2C2, /* 0x50 */
+ 0, 0, 0xB2A6, 0xD67B, 0xD67A, 0xB2A4, 0xB2A5, 0, /* 0x60 */
+ 0, 0, 0xB566, 0xB565, 0xDAAE, 0, 0, 0xDAAD, /* 0x60 */
+ 0xB2A7, 0, 0, 0, 0, 0, 0xB7ED, 0xDEC5, /* 0x70 */
+ 0xB7EE, 0xDEC4, 0, 0, 0, 0xE2D8, 0xE6AE, 0xBD42, /* 0x70 */
+ 0xEA6A, 0, 0, 0, 0xED73, 0, 0xC3A6, 0xC3A5, /* 0x80 */
+ 0, 0, 0xC57C, 0xA5D4, 0xCD73, 0, 0, 0xB2A8, /* 0x80 */
+ 0xE2D9, 0xBAC3, 0, 0, 0xCB6F, 0xCB70, 0, 0, /* 0x90 */
+ 0xCD74, 0xAAB8, 0xAAB9, 0, 0, 0xAAB7, 0, 0, /* 0x90 */
+ 0, 0, 0xACCF, 0xACD0, 0xACCD, 0xACCE, 0, 0xCFDC, /* 0xA0 */
+ 0, 0, 0xCFDD, 0xACCC, 0, 0, 0, 0, /* 0xA0 */
+ 0xD2C3, 0, 0xAF68, 0xAF69, 0, 0xB2AB, 0xD2C9, 0, /* 0xB0 */
+ 0xAF6E, 0xAF6C, 0xD2CA, 0xD2C5, 0xAF6B, 0xAF6A, 0xAF65, 0xD2C8, /* 0xB0 */
+ 0xD2C7, 0xD2C4, 0xAF6D, 0, 0xD2C6, 0xAF66, 0, 0xAF67, /* 0xC0 */
+ 0, 0, 0xB2AC, 0xD6A1, 0xD6A2, 0xB2AD, 0xD67C, 0xD67E, /* 0xC0 */
+ 0xD6A4, 0xD6A3, 0xD67D, 0, 0xB2A9, 0xB2AA, 0, 0xDAB6, /* 0xD0 */
+ 0xB56B, 0xB56A, 0xDAB0, 0xB568, 0, 0xDAB3, 0xB56C, 0xDAB4, /* 0xD0 */
+ 0xB56D, 0xDAB1, 0xB567, 0xB569, 0xDAB5, 0, 0xDAB2, 0xDAAF, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xDED2, 0, 0xDEC7, /* 0xE0 */
+ 0xB7F0, 0xB7F3, 0xB7F2, 0xB7F7, 0xB7F6, 0xDED3, 0xDED1, 0xDECA, /* 0xF0 */
+ 0xDECE, 0xDECD, 0xB7F4, 0xDED0, 0xDECC, 0xDED4, 0xDECB, 0xB7F5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_76[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB7EF, 0xB7F1, 0, 0xDEC9, 0, 0, 0, 0, /* 0x00 */
+ 0xE2DB, 0xBAC7, 0xE2DF, 0xBAC6, 0xE2DC, 0xBAC5, 0, 0xDEC8, /* 0x00 */
+ 0xDECF, 0xE2DE, 0, 0xBAC8, 0xE2E0, 0xE2DD, 0xE2DA, 0, /* 0x10 */
+ 0, 0xE6B1, 0xE6B5, 0xE6B7, 0xE6B3, 0xE6B2, 0xE6B0, 0xBD45, /* 0x10 */
+ 0xBD43, 0xBD48, 0xBD49, 0xE6B4, 0xBD46, 0xE6AF, 0xBD47, 0xBAC4, /* 0x20 */
+ 0xE6B6, 0xBD44, 0, 0, 0, 0xEA6C, 0, 0xEA6B, /* 0x20 */
+ 0xEA73, 0xEA6D, 0xEA72, 0xEA6F, 0xBF60, 0xEA71, 0, 0, /* 0x30 */
+ 0xBF61, 0, 0xBF62, 0, 0xEA70, 0xEA6E, 0, 0, /* 0x30 */
+ 0, 0, 0xC0F8, 0xED74, 0, 0, 0xC0F7, 0xED77, /* 0x40 */
+ 0xED75, 0xED76, 0, 0, 0xC0F9, 0, 0, 0, /* 0x40 */
+ 0xF04D, 0, 0xC2A1, 0xF04E, 0, 0, 0xC27D, 0xF04F, /* 0x50 */
+ 0xC27E, 0xF04C, 0xF050, 0, 0xF04A, 0, 0, 0xC3A7, /* 0x50 */
+ 0xF278, 0xC3A8, 0xC46F, 0, 0xF04B, 0xC470, 0, 0, /* 0x60 */
+ 0, 0xC4EE, 0xF5DF, 0, 0xC57E, 0xF6F4, 0xC57D, 0, /* 0x60 */
+ 0xF7EA, 0xC5F5, 0xC5F6, 0, 0, 0xF9CC, 0, 0, /* 0x70 */
+ 0xACD1, 0xCFDE, 0, 0xB56E, 0xB56F, 0xA5D5, 0xA6CA, 0xCA47, /* 0x70 */
+ 0, 0xCB71, 0xA86D, 0, 0xAABA, 0, 0xACD2, 0xACD3, /* 0x80 */
+ 0xACD4, 0xD6A6, 0xD2CB, 0xAF6F, 0, 0, 0xB2AE, 0xD6A5, /* 0x80 */
+ 0, 0, 0xDAB8, 0xB571, 0, 0xDAB7, 0xB570, 0, /* 0x90 */
+ 0, 0xDED5, 0xBD4A, 0xE6BB, 0xE6B8, 0xE6B9, 0xE6BA, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xED78, 0, 0xF051, 0, /* 0xA0 */
+ 0, 0, 0xF471, 0xF470, 0, 0xF6F5, 0xA5D6, 0xCD75, /* 0xA0 */
+ 0xAF70, 0, 0, 0, 0xB572, 0xDED6, 0, 0, /* 0xB0 */
+ 0xE2E1, 0, 0xBD4B, 0xEA74, 0, 0xF052, 0xF472, 0xA5D7, /* 0xB0 */
+ 0, 0, 0xAABB, 0xACD7, 0xCFDF, 0xACD8, 0xACD6, 0, /* 0xC0 */
+ 0xACD5, 0xD2CC, 0xAF71, 0, 0, 0xAF72, 0xAF73, 0, /* 0xC0 */
+ 0, 0, 0xB2B0, 0xD6A7, 0xB2AF, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0xDAB9, 0xB2B1, 0xB573, 0xDED7, 0xB7F8, 0xB7F9, /* 0xD0 */
+ 0, 0xBAC9, 0, 0xBACA, 0xBD4C, 0xBF64, 0xEA75, 0xBF63, /* 0xE0 */
+ 0, 0xED79, 0xC0FA, 0, 0xF053, 0xF473, 0xA5D8, 0xA86E, /* 0xE0 */
+ 0xCD78, 0xCD77, 0xAABC, 0xCD76, 0xAABD, 0xCD79, 0, 0xCFE5, /* 0xF0 */
+ 0xACDB, 0xACDA, 0xCFE7, 0xCFE6, 0xACDF, 0, 0xACDE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_77[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xACD9, 0, 0xCFE1, 0xCFE2, 0xCFE3, 0, 0xACE0, /* 0x00 */
+ 0xCFE0, 0xACDC, 0xCFE4, 0xACDD, 0, 0, 0, 0, /* 0x00 */
+ 0xD2CF, 0xD2D3, 0xD2D1, 0xD2D0, 0, 0xD2D4, 0, 0, /* 0x10 */
+ 0, 0xD2D5, 0xD2D6, 0xD2CE, 0, 0xD2CD, 0, 0xAF75, /* 0x10 */
+ 0xAF76, 0, 0xD2D7, 0xD2D2, 0, 0xD6B0, 0, 0xD2D8, /* 0x20 */
+ 0xAF77, 0xAF74, 0, 0, 0, 0xD6AA, 0, 0xD6A9, /* 0x20 */
+ 0, 0xD6AB, 0xD6AC, 0xD6AE, 0xD6AD, 0xD6B2, 0xB2B5, 0xB2B2, /* 0x30 */
+ 0xB2B6, 0xD6A8, 0xB2B7, 0xD6B1, 0xB2B4, 0xD6AF, 0xB2B3, 0, /* 0x30 */
+ 0, 0, 0, 0, 0xDABC, 0xDABE, 0xDABA, 0xDABB, /* 0x40 */
+ 0, 0, 0xDABF, 0xDAC1, 0xDAC2, 0xDABD, 0xDAC0, 0xB574, /* 0x40 */
+ 0, 0, 0xDEDB, 0, 0xDEE0, 0xDED8, 0xDEDC, 0, /* 0x50 */
+ 0, 0xDEE1, 0xDEDD, 0xB7FA, 0xB843, 0, 0xB7FD, 0xDED9, /* 0x50 */
+ 0xDEDA, 0xBACE, 0xB846, 0xB7FE, 0, 0xB844, 0xB7FC, 0xDEDF, /* 0x60 */
+ 0xB845, 0xDEDE, 0xB841, 0xB7FB, 0xB842, 0xDEE2, 0xE2E6, 0xE2E8, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB840, 0, 0, 0xE2E3, 0xBACC, 0xE2E9, 0xBACD, /* 0x70 */
+ 0xE2E7, 0xE2E2, 0xE2E5, 0xE2EA, 0xBACB, 0xE2E4, 0, 0xBD4E, /* 0x80 */
+ 0xE6BF, 0xE6BE, 0, 0xBD51, 0xBD4F, 0xE6BC, 0xBD4D, 0xE6BD, /* 0x80 */
+ 0, 0xBD50, 0, 0, 0, 0xEA7D, 0, 0xEAA1, /* 0x90 */
+ 0, 0xEA7E, 0xEA76, 0xEA7A, 0xEA79, 0xEA77, 0xBF66, 0xBF67, /* 0x90 */
+ 0xBF65, 0xEA78, 0xEA7B, 0xEA7C, 0, 0xBF68, 0, 0xC140, /* 0xA0 */
+ 0xEDA3, 0, 0xC0FC, 0xED7B, 0xC0FE, 0xC141, 0, 0, /* 0xA0 */
+ 0xC0FD, 0xEDA2, 0xED7C, 0xC0FB, 0xEDA1, 0xED7A, 0xED7E, 0xED7D, /* 0xB0 */
+ 0, 0, 0xF055, 0xC2A4, 0xC2A5, 0xC2A2, 0, 0xC2A3, /* 0xB0 */
+ 0, 0, 0xF054, 0, 0xF27B, 0, 0, 0xC3A9, /* 0xC0 */
+ 0, 0xF279, 0xF27A, 0, 0xF474, 0xF477, 0xF475, 0xF476, /* 0xC0 */
+ 0xF5E0, 0, 0, 0xC4EF, 0xF7EB, 0xF8B4, 0, 0xC5F7, /* 0xD0 */
+ 0xF8F8, 0xF8F9, 0xC666, 0xA5D9, 0xACE1, 0, 0xDAC3, 0, /* 0xD0 */
+ 0xDEE3, 0, 0xA5DA, 0xA86F, 0, 0xAABE, 0, 0xCFE8, /* 0xE0 */
+ 0xCFE9, 0xAF78, 0, 0, 0xDAC4, 0xB575, 0xB847, 0xC142, /* 0xE0 */
+ 0xEDA4, 0xF27C, 0xF478, 0xA5DB, 0, 0, 0, 0xCDA1, /* 0xF0 */
+ 0xCD7A, 0xCD7C, 0xCD7E, 0xCD7D, 0xCD7B, 0xAABF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_78[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xACE2, 0xCFF2, 0, 0xCFED, 0xCFEA, 0, /* 0x00 */
+ 0, 0xCFF1, 0, 0, 0xACE4, 0xACE5, 0xCFF0, 0xCFEF, /* 0x00 */
+ 0xCFEE, 0xCFEB, 0xCFEC, 0xCFF3, 0xACE3, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0xAF7C, 0, 0xAFA4, /* 0x10 */
+ 0xAFA3, 0xD2E1, 0xD2DB, 0xD2D9, 0, 0xAFA1, 0xD6B9, 0xAF7A, /* 0x20 */
+ 0xD2DE, 0xD2E2, 0xD2E4, 0xD2E0, 0xD2DA, 0xAFA2, 0xD2DF, 0xD2DD, /* 0x20 */
+ 0xAF79, 0xD2E5, 0xAFA5, 0xD2E3, 0xAF7D, 0xD2DC, 0, 0xAF7E, /* 0x30 */
+ 0xAF7B, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xB2B9, 0, 0xD6BA, 0, 0, /* 0x40 */
+ 0xD6B3, 0xD6B5, 0xD6B7, 0, 0xD6B8, 0xD6B6, 0xB2BA, 0, /* 0x40 */
+ 0xD6BB, 0, 0xD6B4, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xDAC8, 0xB576, 0xDAD0, 0, /* 0x50 */
+ 0xDAC5, 0, 0xDAD1, 0, 0xDAC6, 0xDAC7, 0, 0, /* 0x60 */
+ 0xDACF, 0xDACE, 0xDACB, 0xB2B8, 0xB577, 0xDAC9, 0xDACC, 0xB578, /* 0x60 */
+ 0xDACD, 0xDACA, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xDEEE, 0, 0xDEF2, 0xB84E, 0, 0xE2F0, 0xB851, /* 0x70 */
+ 0xDEF0, 0xF9D6, 0, 0xDEED, 0xDEE8, 0xDEEA, 0xDEEB, 0xDEE4, /* 0x80 */
+ 0, 0xB84D, 0, 0, 0xB84C, 0, 0xB848, 0xDEE7, /* 0x80 */
+ 0, 0xB84F, 0, 0xB850, 0xDEE6, 0xDEE9, 0xDEF1, 0xB84A, /* 0x90 */
+ 0xB84B, 0xDEEF, 0xDEE5, 0, 0, 0, 0xE2F2, 0xBAD0, /* 0x90 */
+ 0xE2F4, 0xDEEC, 0xE2F6, 0xBAD4, 0xE2F7, 0xE2F3, 0, 0xBAD1, /* 0xA0 */
+ 0xE2EF, 0xBAD3, 0xE2EC, 0xE2F1, 0xE2F5, 0xE2EE, 0, 0, /* 0xA0 */
+ 0xB849, 0, 0xE2EB, 0xBAD2, 0xE2ED, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xBD54, 0xE6C1, 0xBD58, 0, 0xBD56, 0, /* 0xB0 */
+ 0, 0xBACF, 0, 0xE6C8, 0xE6C9, 0xBD53, 0, 0, /* 0xC0 */
+ 0xE6C7, 0xE6CA, 0xBD55, 0xBD52, 0xE6C3, 0xE6C0, 0xE6C5, 0xE6C2, /* 0xC0 */
+ 0xBD59, 0xE6C4, 0, 0, 0xE6C6, 0xBD57, 0, 0, /* 0xD0 */
+ 0, 0, 0xBF6A, 0xEAA8, 0, 0xEAA2, 0xEAA6, 0xEAAC, /* 0xD0 */
+ 0xEAAD, 0xEAA9, 0xEAAA, 0xEAA7, 0, 0xEAA4, 0, 0xBF6C, /* 0xE0 */
+ 0xBF69, 0xEAA3, 0xEAA5, 0, 0xBF6B, 0xEAAB, 0, 0xC146, /* 0xE0 */
+ 0, 0, 0xEDAA, 0xEDA5, 0xC145, 0, 0, 0xC143, /* 0xF0 */
+ 0, 0xEDAC, 0xC144, 0xEDA8, 0xEDA9, 0xEDA6, 0xEDAD, 0xF056 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_79[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC147, 0xEDA7, 0, 0xEDAE, 0xEDAB, 0, 0, /* 0x00 */
+ 0, 0xF05A, 0, 0, 0xF057, 0, 0xC2A6, 0, /* 0x00 */
+ 0xF05B, 0xF05D, 0xF05C, 0xF058, 0xF059, 0, 0, 0xF2A3, /* 0x10 */
+ 0, 0xC3AA, 0, 0xF27E, 0xF2A2, 0xF27D, 0xF2A4, 0, /* 0x10 */
+ 0, 0xF2A1, 0, 0xF47A, 0xF47D, 0xF479, 0xC471, 0xF47B, /* 0x20 */
+ 0xF47C, 0xF47E, 0xC472, 0xC474, 0xC473, 0xF5E1, 0, 0xF5E3, /* 0x20 */
+ 0, 0xF5E2, 0, 0, 0, 0xF6F6, 0, 0, /* 0x30 */
+ 0xF8B5, 0xF8FA, 0xA5DC, 0, 0, 0xCB72, 0xAAC0, 0xCDA3, /* 0x30 */
+ 0xAAC1, 0xAAC2, 0xCDA2, 0, 0xCFF8, 0xCFF7, 0xACE6, 0xACE9, /* 0x40 */
+ 0xACE8, 0xACE7, 0xCFF4, 0xCFF6, 0xCFF5, 0, 0, 0xD2E8, /* 0x40 */
+ 0xAFA7, 0xD2EC, 0xD2EB, 0xD2EA, 0xD2E6, 0xAFA6, 0xAFAA, 0xAFAD, /* 0x50 */
+ 0, 0, 0xAFAE, 0xD2E7, 0xD2E9, 0xAFAC, 0xAFAB, 0xAFA9, /* 0x50 */
+ 0xAFA8, 0xD6C2, 0, 0xD6C0, 0xD6BC, 0xB2BB, 0, 0xD6BD, /* 0x60 */
+ 0xB2BC, 0xD6BE, 0xD6BF, 0xD6C1, 0, 0xB2BD, 0, 0, /* 0x60 */
+ 0xDAD5, 0, 0xDAD4, 0xDAD3, 0xDAD2, 0, 0, 0, /* 0x70 */
+ 0, 0xDEF6, 0xB852, 0, 0xDEF3, 0xDEF5, 0, 0xB853, /* 0x70 */
+ 0, 0xB854, 0xDEF4, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xE341, 0, 0xE2F9, 0xE2FA, 0, 0xBAD7, 0xBAD5, 0xBAD6, /* 0x80 */
+ 0xE343, 0, 0xE342, 0xE2FE, 0xE2FD, 0xE2FC, 0xE2FB, 0xE340, /* 0x90 */
+ 0xE2F8, 0, 0xE6CB, 0xE6D0, 0xE6CE, 0, 0, 0, /* 0x90 */
+ 0xE6CD, 0xE6CC, 0xE6CF, 0, 0xEAAE, 0, 0xBF6D, 0xC148, /* 0xA0 */
+ 0xEDB0, 0, 0xC149, 0xEDAF, 0xF05F, 0xF05E, 0xC2A7, 0, /* 0xA0 */
+ 0xF2A5, 0xC3AB, 0xF4A1, 0xC5A1, 0xF6F7, 0, 0xF8B7, 0xF8B6, /* 0xB0 */
+ 0xC9A8, 0xACEA, 0xACEB, 0xD6C3, 0, 0xB856, 0xA5DD, 0xA872, /* 0xB0 */
+ 0xA871, 0xA870, 0, 0, 0, 0xCDA4, 0, 0, /* 0xC0 */
+ 0xAAC4, 0xAAC3, 0, 0xACEE, 0, 0xCFFA, 0xCFFD, 0xCFFB, /* 0xC0 */
+ 0, 0xACEC, 0xACED, 0, 0, 0xCFF9, 0xCFFC, 0, /* 0xD0 */
+ 0xAFB5, 0, 0, 0, 0xD2F3, 0xD2F5, 0xD2F4, 0xAFB2, /* 0xD0 */
+ 0xD2EF, 0, 0, 0xAFB0, 0xAFAF, 0, 0xAFB3, 0xAFB1, /* 0xE0 */
+ 0, 0xAFB4, 0xD2F2, 0xD2ED, 0xD2EE, 0xD2F1, 0xD2F0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xD6C6, 0xD6C7, /* 0xF0 */
+ 0xD6C5, 0, 0xD6C4, 0xB2BE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_7A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB57D, 0, 0xDAD6, 0xDAD8, 0xDADA, 0xB57C, 0, 0, /* 0x00 */
+ 0xB57A, 0, 0xDAD7, 0xB57B, 0xDAD9, 0xB579, 0, 0, /* 0x00 */
+ 0xDF41, 0xDEF7, 0xDEFA, 0xDEFE, 0xB85A, 0xDEFC, 0, 0xDEFB, /* 0x10 */
+ 0xDEF8, 0xDEF9, 0xB858, 0xDF40, 0xB857, 0, 0xB85C, 0xB85B, /* 0x10 */
+ 0xB859, 0, 0xDEFD, 0, 0, 0, 0xE349, 0, /* 0x20 */
+ 0xE348, 0, 0, 0xE344, 0, 0, 0xBAD8, 0xE347, /* 0x20 */
+ 0xE346, 0xBAD9, 0, 0, 0, 0, 0, 0xBD5E, /* 0x30 */
+ 0, 0xE6D2, 0, 0xBD5F, 0xBD5B, 0xBD5D, 0, 0xBD5A, /* 0x30 */
+ 0xBD5C, 0, 0, 0, 0xEAAF, 0, 0xBF70, 0xEAB1, /* 0x40 */
+ 0xEAB0, 0, 0xE345, 0xBF72, 0xBF71, 0xBF6E, 0xBF6F, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xEDB5, 0, 0xEDB3, 0xC14A, /* 0x50 */
+ 0xEDB4, 0, 0xEDB6, 0xEDB2, 0xEDB1, 0, 0, 0xF060, /* 0x50 */
+ 0xC2AA, 0xC2A8, 0xC2A9, 0, 0, 0, 0, 0xF2A6, /* 0x60 */
+ 0xF2A7, 0xC3AD, 0, 0xC3AC, 0xF4A3, 0xF4A4, 0xF4A2, 0, /* 0x60 */
+ 0xF6F8, 0xF6F9, 0, 0, 0xA5DE, 0xCA48, 0xA873, 0, /* 0x70 */
+ 0xCDA5, 0xAAC6, 0xAAC5, 0xCDA6, 0, 0, 0xD040, 0xACEF, /* 0x70 */
+ 0xCFFE, 0xACF0, 0, 0, 0xAFB6, 0xD2F8, 0xD2F6, 0xD2FC, /* 0x80 */
+ 0xAFB7, 0xD2F7, 0xD2FB, 0xD2F9, 0xD2FA, 0, 0, 0xD6C8, /* 0x80 */
+ 0xD6CA, 0, 0xB2BF, 0, 0xD6C9, 0xB2C0, 0xB5A2, 0xB5A1, /* 0x90 */
+ 0xB57E, 0xDADB, 0, 0, 0, 0, 0xDF44, 0xB85D, /* 0x90 */
+ 0xB85E, 0, 0xDF43, 0xDF42, 0, 0, 0, 0, /* 0xA0 */
+ 0xE34A, 0xBADB, 0xBADA, 0xE34B, 0xE34C, 0, 0xBD61, 0xBD60, /* 0xA0 */
+ 0, 0xEAB5, 0xE6D3, 0xE6D5, 0xE6D4, 0xEAB4, 0xEAB2, 0xEAB6, /* 0xB0 */
+ 0xEAB3, 0, 0xBF73, 0, 0, 0, 0xEDB7, 0xC14B, /* 0xB0 */
+ 0xEDB8, 0xEDB9, 0, 0, 0xC2AB, 0xC2AC, 0, 0xC475, /* 0xC0 */
+ 0, 0, 0xC5D1, 0xA5DF, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xD041, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xD2FD, 0xAFB8, 0, 0, 0, 0, 0, 0xB3BA, /* 0xD0 */
+ 0xB3B9, 0, 0, 0xB5A4, 0xDADD, 0xB5A3, 0xDADC, 0, /* 0xE0 */
+ 0, 0, 0, 0xDF45, 0, 0xBADC, 0xE34D, 0xBADD, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0xC476, 0xF4A5, /* 0xF0 */
+ 0, 0xA6CB, 0xAAC7, 0xCDA7, 0, 0xACF2, 0, 0xACF1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_7B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD042, 0xD043, 0, 0, 0xD340, 0xD342, 0xAFB9, 0, /* 0x00 */
+ 0xD344, 0xD347, 0xD345, 0, 0, 0, 0xD346, 0xD343, /* 0x00 */
+ 0xD2FE, 0xAFBA, 0xD348, 0xD341, 0, 0, 0, 0, /* 0x10 */
+ 0xD6D3, 0xB2C6, 0xD6DC, 0xB2C3, 0, 0xD6D5, 0xB2C7, 0, /* 0x10 */
+ 0xB2C1, 0, 0xD6D0, 0xD6DD, 0xD6D1, 0xD6CE, 0xB2C5, 0, /* 0x20 */
+ 0xB2C2, 0, 0xD6D4, 0xD6D7, 0xB2C4, 0xD6D8, 0xB2C8, 0xD6D9, /* 0x20 */
+ 0xD6CF, 0xD6D6, 0xD6DA, 0xD6D2, 0xD6CD, 0xD6CB, 0, 0, /* 0x30 */
+ 0xD6DB, 0, 0, 0xDADF, 0, 0, 0, 0, /* 0x30 */
+ 0xDAE4, 0, 0, 0, 0xDAE0, 0xDAE6, 0xB5A7, 0xD6CC, /* 0x40 */
+ 0xDAE1, 0xB5A5, 0xDADE, 0xB5AC, 0xDAE2, 0xB5AB, 0xDAE3, 0xB5AD, /* 0x40 */
+ 0xB5A8, 0xB5AE, 0xB5A9, 0, 0xB5AA, 0, 0xB5A6, 0, /* 0x50 */
+ 0xDAE5, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0xB861, 0xDF50, 0, 0xDF53, 0xDF47, 0xDF4C, 0xDF46, 0xB863, /* 0x60 */
+ 0, 0xDF4A, 0, 0, 0, 0xDF48, 0xB862, 0, /* 0x60 */
+ 0xDF4F, 0xDF4E, 0xDF4B, 0xDF4D, 0xDF49, 0xBAE1, 0xDF52, 0xB85F, /* 0x70 */
+ 0xDF51, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0xE35D, 0, 0xBAE8, 0xE358, 0, 0xBAE7, /* 0x80 */
+ 0xE34E, 0, 0xE350, 0xBAE0, 0xE355, 0xE354, 0xE357, 0xBAE5, /* 0x80 */
+ 0xE352, 0xE351, 0, 0, 0xBAE4, 0xBADF, 0xE353, 0xBAE2, /* 0x90 */
+ 0xE359, 0xE35B, 0, 0xE356, 0xE34F, 0xBAE3, 0, 0, /* 0x90 */
+ 0xBD69, 0xBADE, 0, 0, 0xE35C, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0xE6D9, 0xBD62, 0, 0xE6DB, /* 0xA0 */
+ 0, 0xBD63, 0, 0, 0xBD65, 0xE6DE, 0, 0xE6D6, /* 0xB0 */
+ 0xBAE6, 0xE6DC, 0, 0, 0, 0, 0xE6D8, 0, /* 0xB0 */
+ 0xB860, 0xBD68, 0, 0, 0xBD64, 0, 0xBD66, 0xBD67, /* 0xC0 */
+ 0, 0xBF76, 0xE6DD, 0xE6D7, 0xBD6A, 0, 0xE6DA, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xEAC0, 0xEABB, 0, 0, /* 0xD0 */
+ 0xEAC5, 0xBF74, 0xEABD, 0xBF78, 0xEAC3, 0xEABA, 0xEAB7, 0xEAC6, /* 0xD0 */
+ 0xC151, 0xBF79, 0xEAC2, 0xEAB8, 0xBF77, 0xEABC, 0xBF7B, 0xEAB9, /* 0xE0 */
+ 0xEABE, 0xBF7A, 0xEAC1, 0xEAC4, 0, 0, 0, 0, /* 0xE0 */
+ 0xEDCB, 0xEDCC, 0xEDBC, 0xEDC3, 0xEDC1, 0, 0, 0xC14F, /* 0xF0 */
+ 0xEDC8, 0xEABF, 0, 0xEDBF, 0, 0xEDC9, 0xC14E, 0xEDBE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_7C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEDBD, 0xEDC7, 0xEDC4, 0xEDC6, 0, 0xEDBA, 0xEDCA, 0xC14C, /* 0x00 */
+ 0, 0xEDC5, 0xEDCE, 0xEDC2, 0xC150, 0xC14D, 0xEDC0, 0xEDBB, /* 0x00 */
+ 0xEDCD, 0xBF75, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0xF063, 0, 0, 0xF061, 0xF067, 0xC2B0, 0xF065, /* 0x10 */
+ 0xF064, 0xC2B2, 0xF06A, 0xC2B1, 0, 0xF06B, 0xF068, 0xC2AE, /* 0x20 */
+ 0xF069, 0xF062, 0xC2AF, 0xC2AD, 0xF2AB, 0xF066, 0, 0, /* 0x20 */
+ 0xF06C, 0, 0, 0xF2A8, 0, 0, 0, 0xC3B2, /* 0x30 */
+ 0xC3B0, 0xF2AA, 0, 0xF2AC, 0xF2A9, 0xC3B1, 0xC3AE, 0xC3AF, /* 0x30 */
+ 0xC3B3, 0, 0, 0xC478, 0, 0xF4AA, 0, 0xF4A9, /* 0x40 */
+ 0xF4A7, 0xF4A6, 0xF4A8, 0, 0xC477, 0xC479, 0, 0, /* 0x40 */
+ 0xC4F0, 0, 0, 0xF5E5, 0xF5E4, 0, 0, 0xF6FA, /* 0x50 */
+ 0, 0xF6FC, 0xF6FE, 0xF6FD, 0xF6FB, 0, 0, 0xC5A3, /* 0x50 */
+ 0xC5A2, 0, 0, 0xC5D3, 0xC5D2, 0xC5D4, 0xF7ED, 0xF7EC, /* 0x60 */
+ 0, 0xF8FB, 0xF8B8, 0xF8FC, 0xC658, 0, 0xC659, 0xF96D, /* 0x60 */
+ 0, 0, 0xC67E, 0xA6CC, 0, 0xCDA8, 0, 0, /* 0x70 */
+ 0xD045, 0xD046, 0xD044, 0, 0, 0xACF3, 0, 0xD047, /* 0x70 */
+ 0xD048, 0xD049, 0, 0, 0xD349, 0xD34F, 0, 0, /* 0x80 */
+ 0xD34D, 0xAFBB, 0xD34B, 0, 0xD34C, 0xD34E, 0, 0, /* 0x80 */
+ 0, 0xD34A, 0xB2C9, 0, 0xD6DE, 0xB2CB, 0xD6E0, 0xB2CA, /* 0x90 */
+ 0xD6DF, 0, 0, 0, 0, 0, 0xDAE8, 0xB5AF, /* 0x90 */
+ 0, 0xDAEA, 0xDAE7, 0xD6E1, 0, 0xB5B0, 0, 0xF9DB, /* 0xA0 */
+ 0xDAE9, 0, 0, 0, 0, 0, 0, 0xDF56, /* 0xA0 */
+ 0, 0xB864, 0xDF54, 0xB865, 0xDF55, 0xB866, 0, 0, /* 0xB0 */
+ 0, 0xBAE9, 0xE361, 0xE35E, 0xE360, 0xBAEA, 0xBAEB, 0xE35F, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xE6DF, 0, 0, /* 0xC0 */
+ 0xE6E0, 0, 0xBD6B, 0xE6E2, 0xE6E1, 0, 0xA261, 0, /* 0xC0 */
+ 0xEACA, 0xEACB, 0xEAC7, 0, 0xEAC8, 0xBF7C, 0xBF7D, 0xEAC9, /* 0xD0 */
+ 0, 0xC157, 0, 0, 0xC153, 0xC158, 0xC154, 0xC156, /* 0xD0 */
+ 0xC152, 0, 0xC155, 0, 0, 0, 0, 0xC2B3, /* 0xE0 */
+ 0xEDCF, 0, 0xF2AE, 0, 0xF2AD, 0, 0xF4AB, 0xC47A, /* 0xE0 */
+ 0xC47B, 0xF741, 0xF5E6, 0, 0xF740, 0, 0xF8FD, 0xF9A4, /* 0xF0 */
+ 0xA6CD, 0, 0, 0xA874, 0, 0xCDA9, 0xAAC8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_7D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xACF6, 0xD04C, 0xACF4, 0xD04A, 0xACF9, 0xACF5, 0xACFA, 0xACF8, /* 0x00 */
+ 0xD04B, 0xACF7, 0xAFBF, 0xAFBE, 0xD35A, 0xAFC7, 0xD353, 0xD359, /* 0x00 */
+ 0xAFC3, 0xD352, 0xD358, 0xD356, 0xAFC2, 0xAFC4, 0xD355, 0xAFBD, /* 0x10 */
+ 0xD354, 0xAFC8, 0xAFC5, 0xAFC9, 0xAFC6, 0xD351, 0xD350, 0xD357, /* 0x10 */
+ 0xAFC0, 0xAFBC, 0xAFC1, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xD6F0, 0xD6E9, 0, 0xB5B5, 0xD6E8, 0, 0xB2CF, 0xB2D6, /* 0x20 */
+ 0xB2D3, 0xB2D9, 0xB2D8, 0xB2D4, 0, 0xD6E2, 0xD6E5, 0, /* 0x30 */
+ 0xD6E4, 0xB2D0, 0xD6E6, 0xD6EF, 0xB2D1, 0xD6E3, 0xD6EC, 0xD6ED, /* 0x30 */
+ 0xB2D2, 0xD6EA, 0xB2D7, 0xB2CD, 0xB2D5, 0xD6E7, 0xB2CC, 0xD6EB, /* 0x40 */
+ 0, 0, 0xD6EE, 0, 0, 0, 0xDAFB, 0xDAF2, /* 0x40 */
+ 0xB5B2, 0xDAF9, 0xDAF6, 0xDAEE, 0xDAF7, 0xB5B4, 0xDAEF, 0, /* 0x50 */
+ 0xDAEB, 0, 0, 0xB86C, 0xDAF4, 0, 0xB5B1, 0xDAFA, /* 0x50 */
+ 0, 0xB5B8, 0xB5BA, 0xDAED, 0, 0, 0xB5B9, 0xDAF0, /* 0x60 */
+ 0xB5B3, 0xDAF8, 0xDAF1, 0xDAF5, 0, 0xDAF3, 0xB5B6, 0xDAEC, /* 0x60 */
+ 0xB5BB, 0xB2CE, 0xB5B7, 0xB5BC, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xB868, 0xDF5D, 0xDF5F, 0xDF61, 0xDF65, 0, 0xDF5B, /* 0x70 */
+ 0xDF59, 0xB86A, 0, 0xDF60, 0xDF64, 0xDF5C, 0xDF58, 0, /* 0x80 */
+ 0xDF57, 0, 0, 0, 0xDF62, 0xDF5A, 0xDF5E, 0xB86B, /* 0x80 */
+ 0, 0xB869, 0xDF66, 0xB867, 0xDF63, 0, 0xE372, 0, /* 0x90 */
+ 0, 0, 0, 0, 0xBAEE, 0xE36A, 0xBD78, 0xE374, /* 0x90 */
+ 0xBAF1, 0xE378, 0xBAF7, 0xE365, 0, 0, 0xE375, 0xE362, /* 0xA0 */
+ 0, 0xE377, 0xE366, 0, 0xBAFE, 0xBAFB, 0xE376, 0xE370, /* 0xA0 */
+ 0xBAED, 0xBAF5, 0xBAF4, 0, 0xBAF3, 0xBAF9, 0, 0xE363, /* 0xB0 */
+ 0xBAFA, 0xE371, 0xBAF6, 0xBAEC, 0xE373, 0xBAEF, 0xBAF0, 0xBAF8, /* 0xB0 */
+ 0xE368, 0xE367, 0xE364, 0, 0xE36C, 0xE369, 0xE36D, 0xBAFD, /* 0xC0 */
+ 0, 0xE379, 0xBAF2, 0xE36E, 0xE36F, 0, 0xE36B, 0, /* 0xC0 */
+ 0, 0, 0xBAFC, 0, 0, 0, 0, 0xE6E7, /* 0xD0 */
+ 0xBD70, 0xBD79, 0xBD75, 0xE6E4, 0, 0xBD72, 0xBD76, 0xE6F0, /* 0xD0 */
+ 0xBD6C, 0xE6E8, 0, 0xBD74, 0, 0, 0xE6EB, 0xE6E6, /* 0xE0 */
+ 0xBD73, 0xBD77, 0xE6E5, 0, 0xBD71, 0, 0xE6EF, 0xBD6E, /* 0xE0 */
+ 0xE6EE, 0xE6ED, 0xBD7A, 0xE572, 0xBD6D, 0, 0xE6EC, 0xE6E3, /* 0xF0 */
+ 0, 0xBD7B, 0xE6EA, 0xBD6F /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_7E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE6E9, 0, 0, 0, 0, /* 0x00 */
+ 0xBFA2, 0xBFA7, 0xBF7E, 0xEAD8, 0xEACF, 0xEADB, 0xEAD3, 0xEAD9, /* 0x00 */
+ 0xBFA8, 0xBFA1, 0xEACC, 0xEAD2, 0xEADC, 0xEAD5, 0xEADA, 0xEACE, /* 0x10 */
+ 0, 0, 0xEAD6, 0xBFA3, 0xEAD4, 0xBFA6, 0xBFA5, 0xEAD0, /* 0x10 */
+ 0xEAD1, 0xEACD, 0xEAD7, 0xBFA4, 0xEADE, 0xEADD, 0, 0, /* 0x20 */
+ 0, 0xEDDA, 0xEDD6, 0xC15F, 0, 0xEDD0, 0xC159, 0xC169, /* 0x20 */
+ 0xEDDC, 0xC161, 0xC15D, 0xEDD3, 0xC164, 0xC167, 0xEDDE, 0xC15C, /* 0x30 */
+ 0xEDD5, 0xC165, 0xEDE0, 0xEDDD, 0xEDD1, 0xC160, 0xC15A, 0xC168, /* 0x30 */
+ 0xEDD8, 0xC163, 0xEDD2, 0xC15E, 0xEDDF, 0xC162, 0xC15B, 0xEDD9, /* 0x40 */
+ 0xC166, 0xEDD7, 0, 0, 0xEDDB, 0, 0, 0, /* 0x40 */
+ 0xF06E, 0xF074, 0xC2B9, 0xF077, 0xC2B4, 0xC2B5, 0xF06F, 0xF076, /* 0x50 */
+ 0xF071, 0xC2BA, 0xC2B7, 0, 0xF06D, 0, 0xC2B6, 0xF073, /* 0x50 */
+ 0xF075, 0xC2B8, 0xF072, 0xF070, 0, 0, 0, 0, /* 0x60 */
+ 0xF2B8, 0xC3B7, 0xC3B8, 0xC3B4, 0, 0xC3B5, 0, 0xF2B4, /* 0x60 */
+ 0xF2B2, 0, 0xF2B6, 0xC3BA, 0xF2B7, 0xF2B0, 0xF2AF, 0xF2B3, /* 0x70 */
+ 0xF2B1, 0xC3B6, 0xF2B5, 0xF4AC, 0xC47E, 0xC47D, 0xF4AD, 0, /* 0x70 */
+ 0xF4AF, 0xF4AE, 0xC4A1, 0, 0, 0, 0xF5EB, 0xF5E8, /* 0x80 */
+ 0xF5E9, 0, 0xF5E7, 0xF5EA, 0xC4F2, 0xF5EC, 0, 0xC4F1, /* 0x80 */
+ 0, 0xF742, 0, 0xC5D5, 0xC5D7, 0xF7EE, 0xC5D6, 0xF8B9, /* 0x90 */
+ 0xF940, 0xF942, 0xF8FE, 0xF941, 0xC66C /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_7F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA6CE, 0, /* 0x30 */
+ 0xACFB, 0xD26F, 0xAFCA, 0, 0, 0xB2DA, 0xDAFC, 0xDAFD, /* 0x30 */
+ 0, 0, 0, 0xEADF, 0xC16A, 0xEDE1, 0, 0, /* 0x40 */
+ 0xC2BB, 0, 0xF2BA, 0xF2B9, 0xC4A2, 0xF5ED, 0, 0xF743, /* 0x40 */
+ 0xC5F8, 0xCA49, 0, 0, 0xAAC9, 0xA875, 0, 0, /* 0x50 */
+ 0xD04D, 0, 0, 0xD360, 0xD35B, 0xD35F, 0xD35D, 0xAFCB, /* 0x50 */
+ 0xD35E, 0xD35C, 0, 0xD6F1, 0, 0xDAFE, 0xDB40, 0xDF69, /* 0x60 */
+ 0xDF6A, 0xB86E, 0xB86F, 0xDF68, 0xDF6B, 0xDF67, 0xB86D, 0, /* 0x60 */
+ 0xBB40, 0, 0xB870, 0xE37A, 0, 0xBD7C, 0xE6F1, 0xBD7D, /* 0x70 */
+ 0, 0xBFA9, 0xEAE2, 0xEAE0, 0xEAE1, 0xEDE4, 0xEDE3, 0xEDE2, /* 0x70 */
+ 0, 0, 0, 0xF2BB, 0, 0xC3B9, 0xF2BC, 0xF744, /* 0x80 */
+ 0xC5F9, 0xF8BA, 0xA6CF, 0xAACB, 0xAACA, 0xD04F, 0xACFC, 0, /* 0x80 */
+ 0, 0xD04E, 0xD362, 0, 0xAFCC, 0xD6F2, 0xD361, 0, /* 0x90 */
+ 0, 0, 0xB2DC, 0xD6F5, 0xD6F3, 0xD6F4, 0xB2DB, 0, /* 0x90 */
+ 0xDB42, 0xDB43, 0xDB41, 0, 0xB873, 0xDF6D, 0xDF6C, 0xDF6E, /* 0xA0 */
+ 0xB872, 0xB871, 0, 0, 0xE6F2, 0xE6F4, 0, 0xBD7E, /* 0xA0 */
+ 0xE6F3, 0xEAE3, 0xBFAA, 0xF079, 0, 0xF078, 0xC3BB, 0xF2BD, /* 0xB0 */
+ 0xC3BD, 0xC3BC, 0xF4B0, 0xF5EE, 0xC4F3, 0xA6D0, 0xD050, 0xACFD, /* 0xB0 */
+ 0xD365, 0xAFCE, 0xD364, 0xD363, 0, 0xAFCD, 0, 0xD6FB, /* 0xC0 */
+ 0, 0xD6FD, 0xD6F6, 0xD6F7, 0xB2DD, 0xD6F8, 0xB2DE, 0xD6FC, /* 0xC0 */
+ 0xD6F9, 0xD6FA, 0xB2DF, 0, 0xB5BE, 0xB5BF, 0, 0xDB44, /* 0xD0 */
+ 0, 0, 0, 0xDF6F, 0xDF70, 0, 0xE37E, 0xBB43, /* 0xD0 */
+ 0xBB41, 0xBB42, 0xE37B, 0xE37C, 0, 0xE37D, 0xE6F9, 0, /* 0xE0 */
+ 0xE6FA, 0xBDA1, 0xE6F7, 0xE6F6, 0xE6F8, 0xE6F5, 0xBFAD, 0xEAE4, /* 0xE0 */
+ 0xBFAB, 0xBFAC, 0xEDE6, 0xC16B, 0xEDE5, 0xEFA8, 0, 0xF07A, /* 0xF0 */
+ 0xF07B, 0xC2BC, 0, 0xC2BD, 0xC16C, 0xF2BE, 0xF2BF, 0xF4B1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_80[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC4A3, 0xA6D1, 0, 0xA6D2, 0xACFE, 0xAACC, 0xAFCF, 0xD051, /* 0x00 */
+ 0, 0, 0, 0xB5C0, 0xA6D3, 0xAD41, 0xD052, 0xD053, /* 0x00 */
+ 0xAD40, 0xAD42, 0xA6D4, 0, 0xD054, 0xAFD1, 0xD366, 0xAFD3, /* 0x10 */
+ 0xAFD0, 0xAFD2, 0, 0xD741, 0xB2E0, 0, 0xD740, 0xD6FE, /* 0x10 */
+ 0, 0xDF71, 0, 0, 0xE3A1, 0, 0xBDA2, 0, /* 0x20 */
+ 0xBFAE, 0xEAE6, 0xEAE5, 0, 0xEDE7, 0, 0, 0, /* 0x20 */
+ 0xF5EF, 0, 0, 0xA6D5, 0xCB73, 0xCDAA, 0xAD43, 0xD055, /* 0x30 */
+ 0, 0xD368, 0, 0, 0, 0xAFD4, 0xD367, 0xAFD5, /* 0x30 */
+ 0, 0, 0, 0xD743, 0, 0, 0xB2E2, 0xD742, /* 0x40 */
+ 0xD744, 0, 0xB2E1, 0, 0, 0, 0, 0xDB46, /* 0x40 */
+ 0xDB47, 0xDB45, 0xB5C1, 0, 0, 0, 0xB874, 0, /* 0x50 */
+ 0xB875, 0, 0xBB45, 0, 0xE3A3, 0xE3A2, 0xBB44, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xE6FB, 0, 0, 0xE6FC, /* 0x60 */
+ 0, 0, 0, 0, 0xEAE7, 0, 0, 0xC170, /* 0x60 */
+ 0xC16F, 0xC16D, 0xC16E, 0xC171, 0, 0xF07C, 0xC2BF, 0xC2BE, /* 0x70 */
+ 0xF2C0, 0xF4B2, 0, 0, 0, 0xC5A5, 0xC5A4, 0xA6D6, /* 0x70 */
+ 0, 0, 0xD1FB, 0, 0xB877, 0xB5C2, 0xB876, 0xBB46, /* 0x80 */
+ 0, 0xA6D7, 0xC9A9, 0xA6D8, 0xA6D9, 0, 0, 0xCDAB, /* 0x80 */
+ 0xCB76, 0, 0xCB77, 0xA877, 0, 0xCB74, 0xA876, 0, /* 0x90 */
+ 0xA879, 0xCB75, 0xA87B, 0xA87A, 0xCB78, 0xA878, 0, 0, /* 0x90 */
+ 0, 0xAAD1, 0xAACF, 0xCDAD, 0, 0xAACE, 0, 0, /* 0xA0 */
+ 0, 0xAAD3, 0xAAD5, 0xAAD2, 0, 0xCDB0, 0xCDAC, 0xAAD6, /* 0xA0 */
+ 0, 0xAAD0, 0xA87C, 0, 0xAAD4, 0xCDAF, 0, 0, /* 0xB0 */
+ 0xCDAE, 0, 0xAACD, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xD05B, 0xAD47, 0xAD48, 0xD05D, 0, 0xD057, /* 0xC0 */
+ 0xD05A, 0xD063, 0xD061, 0, 0xAD49, 0xD067, 0xAD4C, 0xD064, /* 0xC0 */
+ 0xD05C, 0xD059, 0, 0, 0xDB49, 0xD062, 0xAD44, 0xD065, /* 0xD0 */
+ 0xD056, 0xD05F, 0xAD46, 0xAD4B, 0xD060, 0xAD4F, 0xAD4D, 0, /* 0xD0 */
+ 0xD058, 0xAD4A, 0, 0xD05E, 0xAD4E, 0xAD45, 0xD066, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xAFDA, 0, 0xAFE3, /* 0xE0 */
+ 0xAFD8, 0xAFD6, 0xD36A, 0xAFDE, 0xAFDB, 0xD36C, 0, 0, /* 0xF0 */
+ 0xAFDD, 0xD36B, 0xD369, 0xD36E, 0xAFE2, 0xAFE0, 0xDB48 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_81[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD36F, 0xD36D, 0xAFD7, 0, 0, 0xAFD9, 0xAFDC, 0, /* 0x00 */
+ 0xAFDF, 0, 0xAFE1, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0xD74E, 0xB2E4, 0, /* 0x10 */
+ 0xD745, 0xD747, 0, 0xD748, 0, 0xD750, 0xD74C, 0xD74A, /* 0x10 */
+ 0, 0xD74D, 0xD751, 0xB2E5, 0xB2E9, 0xD746, 0, 0xD74F, /* 0x20 */
+ 0, 0xB2E7, 0, 0xB2E6, 0xD74B, 0xD749, 0, 0xB2E3, /* 0x20 */
+ 0xB2E8, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xB5C8, 0xDB51, 0, 0, 0xDB4F, 0xB5CA, 0, /* 0x30 */
+ 0, 0, 0, 0xDB4A, 0xDFA1, 0, 0xB5C9, 0xDB4E, /* 0x40 */
+ 0, 0, 0xDB4B, 0xB5C5, 0xB5CB, 0xDB50, 0xB5C7, 0xDB4D, /* 0x40 */
+ 0xBB47, 0xB5C6, 0xDB4C, 0xB5CC, 0xB5C4, 0xB5C3, 0, 0, /* 0x50 */
+ 0, 0, 0, 0xDF77, 0xDF75, 0, 0xDF7B, 0, /* 0x50 */
+ 0xDF73, 0xDFA2, 0xDF78, 0, 0xDF72, 0xB87B, 0xB8A3, 0xDF7D, /* 0x60 */
+ 0, 0xDF76, 0, 0xB87E, 0, 0, 0xB87C, 0xDF7E, /* 0x60 */
+ 0xB879, 0xB878, 0xDF79, 0xB87D, 0xB5CD, 0, 0xDF7C, 0xDF74, /* 0x70 */
+ 0xB87A, 0xB8A1, 0xB8A2, 0, 0, 0, 0, 0xBB4C, /* 0x70 */
+ 0xBB48, 0, 0xBB4D, 0xE3A6, 0, 0, 0xE3A5, 0xE3A7, /* 0x80 */
+ 0xBB4A, 0xE3A4, 0xBB4B, 0xE3AA, 0xE3A9, 0xE3A8, 0, 0xBB49, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xE741, 0, 0xE744, /* 0x90 */
+ 0xBDA8, 0xE743, 0xBDA7, 0xBDA3, 0xBDA4, 0xBDA5, 0xE740, 0xE6FE, /* 0x90 */
+ 0xBDA6, 0, 0xE742, 0xE6FD, 0, 0, 0xEAE9, 0xEAF3, /* 0xA0 */
+ 0xBFB1, 0xBFB0, 0, 0xEAED, 0xEAEF, 0, 0xEAEA, 0, /* 0xA0 */
+ 0xEAEE, 0xEAE8, 0xEAF1, 0xBFAF, 0xEAF0, 0xEAEC, 0, 0xEAF2, /* 0xB0 */
+ 0, 0xEAEB, 0xC174, 0xEDE8, 0xEDEE, 0xC178, 0xC17A, 0xC177, /* 0xB0 */
+ 0xC176, 0, 0xC175, 0xC173, 0xEDE9, 0xEDEC, 0xC172, 0xEDED, /* 0xC0 */
+ 0, 0xC179, 0xEDEB, 0, 0xEDEA, 0xC2C0, 0, 0xC2C1, /* 0xC0 */
+ 0xF0A1, 0xF07D, 0xF07E, 0, 0, 0xF2C2, 0, 0xF2C1, /* 0xD0 */
+ 0xC3BE, 0xF4B4, 0xC4A4, 0xF4B3, 0, 0xF5F0, 0xF745, 0xC5A6, /* 0xD0 */
+ 0xF943, 0xF944, 0xC5D8, 0xA6DA, 0, 0xAAD7, 0xDB52, 0xBB4E, /* 0xE0 */
+ 0xC17B, 0xEDEF, 0xA6DB, 0, 0xAFE5, 0xAFE4, 0xDB53, 0, /* 0xE0 */
+ 0, 0, 0xEAF4, 0xA6DC, 0xAD50, 0, 0, 0xDB54, /* 0xF0 */
+ 0xDB55, 0xDB56, 0xBB4F, 0xBFB2, 0xA6DD, 0, 0xAAD8, 0xD068 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_82[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAFE6, 0xD370, 0xB2EA, 0, 0xDB57, 0xB8A4, 0, 0xBB50, /* 0x00 */
+ 0xBFB3, 0xC17C, 0xC2C2, 0xF4B5, 0xA6DE, 0xAAD9, 0, 0, /* 0x00 */
+ 0xAFE7, 0xD752, 0xB5CE, 0, 0xBB51, 0xE3AB, 0xE745, 0, /* 0x10 */
+ 0, 0, 0, 0xA6DF, 0xB5CF, 0xDFA3, 0xBB52, 0xA6E0, /* 0x10 */
+ 0xCDB1, 0xD069, 0xAD51, 0, 0, 0xD372, 0, 0, /* 0x20 */
+ 0xAFEA, 0, 0xAFE8, 0xAFE9, 0xAFEB, 0, 0, 0xD371, /* 0x20 */
+ 0, 0, 0xD757, 0xD754, 0xD756, 0xB2EB, 0xB2ED, 0xB2EC, /* 0x30 */
+ 0xD753, 0xB2EE, 0xD755, 0, 0xDB58, 0xDB59, 0, 0xDB5A, /* 0x30 */
+ 0xDFA6, 0, 0xDFA7, 0, 0xDFA5, 0xDFA8, 0, 0xB8A5, /* 0x40 */
+ 0, 0xDFA4, 0, 0xBB53, 0, 0, 0xE74A, 0xE746, /* 0x40 */
+ 0xE749, 0xE74B, 0xE748, 0xE747, 0, 0xEAF5, 0xEAF6, 0xEAF7, /* 0x50 */
+ 0xBFB4, 0xBFB5, 0xEDF1, 0xEDF0, 0xEDF2, 0, 0xF0A3, 0xF0A2, /* 0x50 */
+ 0, 0xF2C4, 0, 0xF2C5, 0xF2C3, 0, 0xC4A5, 0, /* 0x60 */
+ 0xF4B6, 0xF4B7, 0, 0xF746, 0xF7EF, 0xF8BB, 0xA6E1, 0xA87D, /* 0x60 */
+ 0, 0xC17D, 0xA6E2, 0, 0xD758, 0xDB5B, 0, 0xC641, /* 0x70 */
+ 0xCA4A, 0, 0, 0, 0xCA4B, 0xCA4D, 0xA6E3, 0xCA4E, /* 0x70 */
+ 0xCA4C, 0, 0, 0xCBA2, 0xCBA3, 0xCB7B, 0, 0, /* 0x80 */
+ 0, 0, 0xCBA1, 0xA8A1, 0, 0xA8A2, 0xCB7C, 0xCB7A, /* 0x80 */
+ 0xCB79, 0xCB7D, 0xA87E, 0xCB7E, 0xD06A, 0, 0, 0, /* 0x90 */
+ 0xCDB6, 0xAADC, 0xCDB5, 0xCDB7, 0, 0xAADB, 0xCDBC, 0xAADF, /* 0x90 */
+ 0xCDB2, 0xCDC0, 0xCDC6, 0xAAE6, 0xCDC3, 0xAAE3, 0, 0xCDB9, /* 0xA0 */
+ 0xCDBF, 0xCDC1, 0, 0xCDB4, 0xAAE2, 0xAADD, 0xCDBA, 0xAAE4, /* 0xA0 */
+ 0xAAE7, 0xAAE1, 0, 0xAADA, 0xCDBE, 0xCDB8, 0xCDC5, 0xAAE9, /* 0xB0 */
+ 0xAAE5, 0xAAE0, 0xCDBD, 0xAFEC, 0xCDBB, 0xAADE, 0xAAE8, 0, /* 0xB0 */
+ 0xCDB3, 0, 0xCDC2, 0xCDC4, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xAD62, 0xAD5C, 0xAD64, 0xAD61, 0xD071, 0xD074, 0xAD5D, /* 0xD0 */
+ 0, 0xD06B, 0, 0xAD56, 0xAD60, 0, 0xAD63, 0xAD65, /* 0xD0 */
+ 0xD0A2, 0xD077, 0, 0xAD55, 0xD0A1, 0xAD59, 0xAD57, 0xAD52, /* 0xE0 */
+ 0xD06F, 0, 0xD07E, 0xD073, 0xD076, 0xD0A5, 0, 0xAD66, /* 0xE0 */
+ 0xD07D, 0xAD5E, 0xD078, 0xD0A4, 0xD075, 0xD079, 0xD07C, 0, /* 0xF0 */
+ 0, 0xD06D, 0xD0A3, 0xD07B, 0, 0, 0xD06C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_83[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xD070, 0xAD5F, 0xAD5A, 0xAD53, 0xAD58, 0xAD54, 0xAD67, 0xD06E, /* 0x00 */
+ 0xD3A5, 0xAD5B, 0, 0, 0xD07A, 0xCE41, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0xD3A8, 0xAFFA, /* 0x10 */
+ 0, 0xD376, 0, 0xD3A3, 0xD37D, 0, 0xD3B2, 0, /* 0x10 */
+ 0xD3AA, 0, 0xD37E, 0, 0xD3A9, 0xD378, 0xD37C, 0xD3B5, /* 0x20 */
+ 0xAFFD, 0xD3AD, 0xD3A4, 0xAFED, 0xD3B3, 0xD374, 0, 0xD3AC, /* 0x20 */
+ 0, 0xAFFC, 0xAFF7, 0xD373, 0xAFF5, 0xAFF4, 0xAFF9, 0xD3AB, /* 0x30 */
+ 0xAFF1, 0xAFF8, 0xD072, 0xDB5C, 0xD3A6, 0, 0, 0xD37A, /* 0x30 */
+ 0xAFFB, 0xD37B, 0xD3A1, 0xAFFE, 0xD375, 0xD3AF, 0, 0xD3AE, /* 0x40 */
+ 0xD3B6, 0xAFF3, 0xAFF0, 0xD3B4, 0xD3B0, 0xD3A7, 0xD3A2, 0xAFF6, /* 0x40 */
+ 0xAFF2, 0xD377, 0xAFEE, 0xD3B1, 0xAFEF, 0, 0xD379, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0xD75E, 0xD760, 0xD765, 0xD779, 0xB2FC, /* 0x70 */
+ 0xB2F2, 0, 0xD75D, 0xB2FD, 0xB2FE, 0xD768, 0xD76F, 0xD775, /* 0x70 */
+ 0, 0xD762, 0, 0xD769, 0, 0, 0xB340, 0xD777, /* 0x80 */
+ 0xD772, 0xB2FA, 0xB2F8, 0xD76E, 0xD76A, 0xD75C, 0xB2EF, 0xD761, /* 0x80 */
+ 0xD759, 0, 0xB2F7, 0xB2F9, 0xD766, 0xD763, 0xB2F4, 0xD773, /* 0x90 */
+ 0xB2F1, 0xD764, 0xD77A, 0xD76C, 0, 0xD76B, 0xB2F0, 0, /* 0x90 */
+ 0xB2FB, 0, 0xB2F3, 0xD75A, 0xD75F, 0xD770, 0xD776, 0xB341, /* 0xA0 */
+ 0xD75B, 0xD767, 0xD76D, 0xB2F6, 0, 0, 0xD778, 0xD771, /* 0xA0 */
+ 0xD774, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0xB2F5, 0, 0xDB6C, /* 0xB0 */
+ 0xDB60, 0xB5D7, 0xDB7D, 0xDBA7, 0xDBAA, 0xB5D5, 0xDB68, 0xDBA3, /* 0xC0 */
+ 0xDB69, 0xDB77, 0xB5E2, 0xDB73, 0xB5DF, 0, 0xDB74, 0xDB5D, /* 0xC0 */
+ 0, 0xDBA4, 0, 0, 0xB5E8, 0xDBA1, 0xDB75, 0xDBAC, /* 0xD0 */
+ 0xDB70, 0xDFC8, 0, 0xDBAF, 0xB5E6, 0xDB6E, 0xDB7A, 0xB5E9, /* 0xD0 */
+ 0xB5D4, 0xDB72, 0xDBAD, 0xDB6B, 0xDB64, 0xDB6F, 0, 0xDB63, /* 0xE0 */
+ 0xDB61, 0xB5D0, 0xDBA5, 0xDB6A, 0xDBA8, 0, 0xDBA9, 0xB5D8, /* 0xE0 */
+ 0xB5DD, 0xB5D9, 0xB5E1, 0xDB7E, 0xB5DA, 0xDB76, 0xDB66, 0, /* 0xF0 */
+ 0xB5D2, 0xDB5E, 0xDBA2, 0xDBAB, 0xDB65, 0xB5E0, 0xDBB0, 0xDB71 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_84[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDB6D, 0, 0xB5D1, 0xB5E5, 0, 0xDB7C, 0xB5E7, /* 0x00 */
+ 0, 0xDB78, 0xB5DC, 0xB5D6, 0xB5DE, 0xB5D3, 0xB5E4, 0xDB79, /* 0x00 */
+ 0xDB67, 0xDB7B, 0xDB62, 0xDBA6, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xDBAE, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0xDB5F, 0, 0, 0, 0, /* 0x20 */
+ 0, 0xDFC7, 0, 0xDFDD, 0xB855, 0xDFCC, 0, 0xDFCA, /* 0x20 */
+ 0xDFB5, 0xB8A9, 0xDFC5, 0xDFD9, 0xDFC1, 0xB8B1, 0xDFD8, 0xDFBF, /* 0x30 */
+ 0xB5E3, 0xDFCF, 0xDFC0, 0xDFD6, 0xB8B0, 0xB8A8, 0, 0xDFAA, /* 0x30 */
+ 0xDFB2, 0, 0xDFCB, 0xDFC3, 0xDFDC, 0xDFC6, 0xB8B6, 0xDFD7, /* 0x40 */
+ 0, 0xB8AD, 0, 0xDFC9, 0xDFD1, 0xDFB6, 0xDFD0, 0, /* 0x40 */
+ 0xDFE1, 0xDFB1, 0xDFD2, 0, 0xDFDF, 0, 0xDFAB, 0xB5DB, /* 0x50 */
+ 0, 0xDFB9, 0xDFB8, 0xB8AF, 0, 0xDFBC, 0xDFBE, 0xDFCD, /* 0x50 */
+ 0xDFDE, 0xB8B2, 0, 0xB8B3, 0, 0xDFB0, 0xB8AB, 0xDFB4, /* 0x60 */
+ 0xDFDA, 0xB8B4, 0, 0xB8AC, 0xB8AE, 0xB8B5, 0xDFE0, 0xDFD3, /* 0x60 */
+ 0xDFCE, 0, 0, 0xDFBB, 0xDFBA, 0xB8AA, 0xDFAC, 0xB8A7, /* 0x70 */
+ 0xDFC4, 0xDFAD, 0xDFC2, 0, 0, 0xDFB7, 0xDFDB, 0, /* 0x70 */
+ 0, 0, 0xB8A6, 0, 0, 0, 0xDFB3, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xDFAF, 0xDFD5, 0xDFAE, /* 0x80 */
+ 0xBB60, 0xE3D3, 0, 0, 0xE3C2, 0, 0, 0xE3AC, /* 0x90 */
+ 0xE3CA, 0xBB58, 0xE3BB, 0xE3C5, 0xBB5B, 0xE3BE, 0xBB59, 0xE3AF, /* 0x90 */
+ 0xE3CD, 0xE3AE, 0xE3C1, 0, 0xE3AD, 0, 0, 0xE3BF, /* 0xA0 */
+ 0xE3C8, 0xE3C6, 0xE3BA, 0xE3B5, 0xE3B3, 0, 0xE3B4, 0xE3C7, /* 0xA0 */
+ 0xE3D2, 0xE3BC, 0xBB5A, 0, 0xE3B7, 0, 0xE3CB, 0, /* 0xB0 */
+ 0xBB5D, 0xE3B6, 0xE3B0, 0xE3C0, 0xBB61, 0, 0, 0xBB55, /* 0xB0 */
+ 0xBB5E, 0xE3B8, 0xE3B2, 0, 0xBB57, 0xDFD4, 0xBB56, 0xE3C3, /* 0xC0 */
+ 0, 0xBB54, 0xBB63, 0xBB5C, 0xE3C4, 0xE3B9, 0xE3B1, 0xE3CC, /* 0xC0 */
+ 0xE3BD, 0xBB62, 0xE3D0, 0xBB5F, 0xE3CF, 0, 0xE3C9, 0xE3CE, /* 0xD0 */
+ 0, 0, 0, 0xE3D1, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xE773, /* 0xE0 */
+ 0xE774, 0xE767, 0xE766, 0xE762, 0xBDB4, 0, 0xBDAC, 0xE776, /* 0xE0 */
+ 0xE775, 0xDFA9, 0xE75F, 0xE763, 0xE75D, 0, 0xE770, 0xE761, /* 0xF0 */
+ 0, 0xE777, 0xE75A, 0xE758, 0xE764, 0xE76E, 0xE769, 0xBDB6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_85[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE74F, 0, 0xE76D, 0, 0, 0, 0xBDB7, 0xDFBD, /* 0x00 */
+ 0xE75B, 0xE752, 0xE755, 0xE77B, 0xE75C, 0xE753, 0xE751, 0xE74E, /* 0x00 */
+ 0, 0xBDB0, 0xE765, 0xBDAF, 0xBDB3, 0xE760, 0xE768, 0xBDA9, /* 0x10 */
+ 0xE778, 0xE77C, 0xBDAB, 0, 0xE757, 0xE76B, 0xE76F, 0xE754, /* 0x10 */
+ 0xE779, 0xBDB2, 0, 0xBDB1, 0xE74C, 0xBDB5, 0xE772, 0xE756, /* 0x20 */
+ 0xE76A, 0xE750, 0xE75E, 0xE759, 0xBDAD, 0xBDAE, 0xE76C, 0xE77D, /* 0x20 */
+ 0xE77A, 0xE771, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0xE74D, 0, 0xBDAA, 0xEB49, 0, /* 0x30 */
+ 0xEB40, 0xEB43, 0, 0xBFBB, 0xEB45, 0xEAF9, 0xEB41, 0xEB47, /* 0x40 */
+ 0xBFB8, 0xBFBC, 0xBFB6, 0, 0, 0xEAFB, 0xEB4C, 0, /* 0x40 */
+ 0, 0xEB46, 0, 0xEAFC, 0xEB55, 0xEB4F, 0xEAF8, 0xEE46, /* 0x50 */
+ 0xEAFE, 0xBFB7, 0, 0xEB4A, 0, 0xEB54, 0xBFBF, 0, /* 0x50 */
+ 0xEB51, 0xEAFD, 0xEB44, 0xEB48, 0xEB42, 0xEB56, 0xEB53, 0xEB50, /* 0x60 */
+ 0xBFB9, 0xBFBA, 0xBFBE, 0xEAFA, 0xEB57, 0xBFBD, 0xEB4D, 0, /* 0x60 */
+ 0, 0xEB4B, 0, 0, 0, 0xEB4E, 0xEE53, 0xEE40, /* 0x70 */
+ 0xEE45, 0xEE52, 0xEE44, 0xEDFB, 0xEE41, 0, 0xC1A2, 0, /* 0x70 */
+ 0xEDF4, 0xEE4D, 0xEE4F, 0xEDF3, 0xC1A1, 0xEE51, 0xEE49, 0xC1A8, /* 0x80 */
+ 0xEE50, 0xEE42, 0xC1AA, 0xEDF9, 0xEB52, 0xEE4A, 0xEE47, 0xEDF5, /* 0x80 */
+ 0xEE55, 0xC1A4, 0, 0, 0xC1A5, 0xEDF7, 0xEE48, 0, /* 0x90 */
+ 0xEE54, 0xEE4B, 0xEDFD, 0xC1A7, 0xC1A3, 0xEE4C, 0xEDFE, 0xEE56, /* 0x90 */
+ 0xEDF8, 0xEE43, 0xEE4E, 0xEDFA, 0xEDFC, 0, 0xC2CB, 0xEDF6, /* 0xA0 */
+ 0xC1A9, 0xC2C4, 0xC17E, 0, 0, 0, 0, 0xC1A6, /* 0xA0 */
+ 0xC2C8, 0xF0B3, 0, 0xF0A9, 0xF0A4, 0xF0AA, 0xF0B4, 0xF0B8, /* 0xB0 */
+ 0xF0B7, 0xC2CA, 0xC2C9, 0, 0, 0xF0AB, 0xF0B9, 0xF0AE, /* 0xB0 */
+ 0xF0A6, 0, 0xF0A8, 0xF0A7, 0xF0AD, 0xF0B2, 0xF0A5, 0xF0AC, /* 0xC0 */
+ 0xF0B1, 0xC2C7, 0, 0xF0AF, 0, 0xC2C5, 0xF0B0, 0xC2C3, /* 0xC0 */
+ 0xC2C6, 0xF2D5, 0xF0B5, 0, 0, 0xC3C2, 0, 0xF2CD, /* 0xD0 */
+ 0xF2D1, 0xF2C9, 0xF2CC, 0, 0xF2D4, 0xC3C0, 0xF2D9, 0xF2D2, /* 0xD0 */
+ 0, 0xF2CA, 0xF2DA, 0xF2D3, 0xC3C3, 0xC3C4, 0xF2D7, 0, /* 0xE0 */
+ 0xF2CB, 0xC3BF, 0xC3C1, 0xF2C6, 0xF2CE, 0xF2C8, 0, 0xF2D8, /* 0xE0 */
+ 0xF2D6, 0xF2C7, 0xF2CF, 0, 0, 0, 0xF4BE, 0xC3C5, /* 0xF0 */
+ 0xF2D0, 0xC4A7, 0xC4A9, 0xC4A6, 0, 0xF4C3, 0xF4BB, 0xF4B9 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_86[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF4BD, 0xF4BA, 0, 0, 0xF4BF, 0xF4C1, 0xC4AA, 0xC4AC, /* 0x00 */
+ 0, 0xF4C0, 0xC4AD, 0xC4AB, 0xF4C2, 0, 0, 0, /* 0x00 */
+ 0, 0xC4A8, 0, 0, 0, 0, 0, 0xC4F4, /* 0x10 */
+ 0xF5F1, 0xF5F7, 0xC4F6, 0xF4BC, 0xF5F6, 0, 0xF5FD, 0xF5F4, /* 0x10 */
+ 0xF5FB, 0xF5FA, 0xF4B8, 0xF5F5, 0xF0B6, 0xF5FE, 0xF5F3, 0xF5F8, /* 0x20 */
+ 0, 0xF5FC, 0xF5F2, 0, 0xF74A, 0xC4F5, 0xF5F9, 0, /* 0x20 */
+ 0, 0xF7F4, 0xF74B, 0xF749, 0xF747, 0xF748, 0xF74C, 0, /* 0x30 */
+ 0xC5D9, 0xF7F2, 0xF7F0, 0xF7F5, 0xF7F3, 0, 0xF7F6, 0xC5DA, /* 0x30 */
+ 0xF7F1, 0, 0, 0xF8BC, 0, 0, 0xF945, 0xF946, /* 0x40 */
+ 0xF947, 0, 0, 0xF9C7, 0xF9BD, 0xCA4F, 0xAAEA, 0, /* 0x40 */
+ 0xAD68, 0, 0xD3B8, 0xD3B7, 0xB040, 0xB342, 0xD77C, 0, /* 0x50 */
+ 0, 0xD77B, 0, 0xB5EA, 0xB8B8, 0, 0xB8B7, 0xB8B9, /* 0x50 */
+ 0, 0xE3D4, 0xE77E, 0xEB58, 0xEB5A, 0xEB59, 0, 0xC1AB, /* 0x60 */
+ 0xEE57, 0xF0BA, 0xF9A5, 0xA6E4, 0, 0xCDC9, 0xCDCA, 0xCDC8, /* 0x60 */
+ 0xCDC7, 0xAAEB, 0, 0xD0A9, 0xD0A7, 0, 0, 0xD0A6, /* 0x70 */
+ 0, 0xAD69, 0xAD6B, 0xAD6A, 0xD0A8, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0xD3C4, 0xD3C1, 0xD3BF, /* 0x80 */
+ 0, 0, 0xB041, 0xD3C2, 0xB046, 0xD3BC, 0xD3CB, 0, /* 0x80 */
+ 0xD3CD, 0xD3BD, 0, 0xB043, 0xD3CE, 0xD3C9, 0xD3BB, 0xD3C0, /* 0x90 */
+ 0xD3CA, 0xD3C6, 0xD3C3, 0, 0xB048, 0xD3CC, 0xD3BE, 0, /* 0x90 */
+ 0, 0xD3C7, 0xD3B9, 0xB047, 0xB044, 0xD3C5, 0, 0xD3C8, /* 0xA0 */
+ 0xD3BA, 0xB045, 0xB042, 0, 0, 0, 0, 0xB34C, /* 0xA0 */
+ 0xD7A5, 0xB34B, 0, 0xD7A8, 0xD7AB, 0xB348, 0xB346, 0xD77E, /* 0xB0 */
+ 0xD7A9, 0xD7A7, 0xD7A4, 0xD7AC, 0xD7AD, 0xD7AF, 0xD7B0, 0xD77D, /* 0xB0 */
+ 0xB345, 0xD7A2, 0xD7A1, 0xD7AE, 0xB347, 0xD7A3, 0xB349, 0xB344, /* 0xC0 */
+ 0xD7A6, 0xB34D, 0, 0xB34A, 0xD7AA, 0, 0, 0, /* 0xC0 */
+ 0xB5F1, 0xDBBF, 0, 0xDBB4, 0xB5EE, 0, 0xDFE7, 0xDBBD, /* 0xD0 */
+ 0xDBB1, 0xB5EC, 0xDBB6, 0xB5EF, 0xDBBA, 0xDBB8, 0xB5F2, 0xB5EB, /* 0xD0 */
+ 0, 0, 0xDBB2, 0xDBB5, 0xB5F0, 0, 0xDBB3, 0, /* 0xE0 */
+ 0xDBBE, 0xDBBC, 0xDBB7, 0xDBB9, 0xDBBB, 0xB5ED, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xDFE8, 0xDFEE, 0xDFE4, /* 0xF0 */
+ 0xDFEA, 0xB8BA, 0xDFE6, 0xB8C0, 0, 0, 0xB8BF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_87[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB8BE, 0xDFED, 0xB8C1, 0xB8C2, 0xDFE3, 0xDFF0, 0xB8C3, 0xB8BD, /* 0x00 */
+ 0xB8BC, 0xDFEC, 0xB8C4, 0xDFE2, 0xDFE5, 0xDFEF, 0xDFEB, 0, /* 0x00 */
+ 0, 0xE3F4, 0xE3E9, 0xB8BB, 0, 0, 0, 0, /* 0x10 */
+ 0xBB6A, 0xE3DD, 0xE3F2, 0xE3DE, 0xBB65, 0, 0xE3DB, 0, /* 0x10 */
+ 0xE3E4, 0xE3DC, 0xBB67, 0xE3D6, 0xE3F1, 0xBB68, 0xE3EE, 0xE3EF, /* 0x20 */
+ 0xE3D7, 0xBB6D, 0xE3E6, 0, 0xE3E0, 0xE3E7, 0xE3DA, 0, /* 0x20 */
+ 0xE3F3, 0xE3EB, 0xE3E5, 0xE3D5, 0xBB69, 0xE3EC, 0, 0xBB6C, /* 0x30 */
+ 0xE3F0, 0, 0xE3EA, 0xBB66, 0xE3E8, 0, 0xE3E2, 0xBB64, /* 0x30 */
+ 0xE3D9, 0xE3E1, 0xE3ED, 0xE3DF, 0, 0, 0xE3E3, 0, /* 0x40 */
+ 0, 0, 0, 0, 0xBDC1, 0xDFE9, 0xE7B2, 0xE7BB, /* 0x40 */
+ 0xE7B1, 0xE7AD, 0xE7AA, 0xBDC2, 0xE7A8, 0xBB6B, 0xE7A1, 0xBDC0, /* 0x50 */
+ 0xE7A7, 0xBDBF, 0xE7AC, 0xE7A9, 0xE7B9, 0xE7B4, 0xE7AE, 0xE7B3, /* 0x50 */
+ 0xBDBB, 0xE7AB, 0xE7BE, 0xE7A2, 0xE7A3, 0xE7BA, 0xBDBC, 0xE7BF, /* 0x60 */
+ 0xBDBE, 0xE7C0, 0xE7B0, 0xE3D8, 0xE7B6, 0xE7AF, 0xE7B8, 0xE7B5, /* 0x60 */
+ 0, 0, 0, 0xE7A6, 0xBDB9, 0xE7BD, 0xBDBA, 0xE7A4, /* 0x70 */
+ 0xBDBD, 0xEB64, 0xE7B7, 0xE7BC, 0, 0, 0, 0, /* 0x70 */
+ 0, 0xEB61, 0xBDB8, 0xBFC0, 0xEB6B, 0xEB67, 0, 0xEB65, /* 0x80 */
+ 0xEB60, 0xEB6F, 0, 0, 0, 0xBFC4, 0, 0xEB5C, /* 0x80 */
+ 0xEB68, 0xEB69, 0xEB5F, 0xEB5E, 0xEB6C, 0, 0xEB62, 0xEB5D, /* 0x90 */
+ 0xEB63, 0, 0xEB6E, 0xEB5B, 0xEB6D, 0xEB6A, 0xBFC2, 0xBFC1, /* 0x90 */
+ 0, 0, 0xBFC3, 0xEB66, 0xF0CB, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xEE59, 0xC1B1, 0xEE5D, 0xEE5A, 0xEE61, 0xEE67, /* 0xA0 */
+ 0xEE5C, 0, 0xEE70, 0xC1AE, 0xEE6A, 0xEE5F, 0xEE6B, 0xEE66, /* 0xB0 */
+ 0xEE6D, 0xEE5E, 0xC1B3, 0xC1B2, 0xEE60, 0xEE6E, 0xEE58, 0xEE6C, /* 0xB0 */
+ 0xC1AC, 0, 0xEE64, 0xEE63, 0xEE68, 0xEE5B, 0xC1B0, 0, /* 0xC0 */
+ 0xC1B4, 0xEE62, 0xEE69, 0xC1B5, 0xEE65, 0, 0, 0, /* 0xC0 */
+ 0, 0xC1AD, 0xC1AF, 0xF0C7, 0xF0C5, 0, 0, 0xF0CC, /* 0xD0 */
+ 0xF0C9, 0xF0CD, 0, 0xF0BE, 0xF0C6, 0xF0D1, 0xEE6F, 0xF0C2, /* 0xD0 */
+ 0xC2CF, 0xE7A5, 0xF0BD, 0xF0CA, 0xF0C4, 0xF0C1, 0xF0BC, 0xF0BB, /* 0xE0 */
+ 0xF0D0, 0, 0xF0C0, 0xF0BF, 0xC2CD, 0xF0C8, 0, 0xC2CC, /* 0xE0 */
+ 0, 0, 0xC2CE, 0xF0C3, 0xF0CF, 0, 0xF2DE, 0xF2DF, /* 0xF0 */
+ 0, 0xC3C9, 0xF2DC, 0xC3C6, 0xF2E4, 0, 0xC3CA, 0xF2E6 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_88[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF2DB, 0xF0CE, 0xF2E8, 0xF2DD, 0, 0xC3C7, 0xF2E3, 0, /* 0x00 */
+ 0xF2E5, 0xF2E0, 0xF2E7, 0xF2E2, 0xF2E1, 0xC3C8, 0, 0, /* 0x00 */
+ 0xF4C5, 0xF4C6, 0, 0xF4C8, 0xC4AE, 0xC4AF, 0xF4C9, 0xF4C7, /* 0x10 */
+ 0, 0xF4C4, 0, 0xF642, 0xF645, 0xF641, 0, 0xC4FA, /* 0x10 */
+ 0xF643, 0xC4F9, 0xC4F8, 0xC4F7, 0xF644, 0xF751, 0xF74F, 0, /* 0x20 */
+ 0xF74E, 0xF640, 0xF750, 0xF646, 0xF74D, 0, 0xF7F9, 0xF7D7, /* 0x20 */
+ 0xF7F7, 0xC5DB, 0xF7F8, 0xF7FA, 0, 0xF8BF, 0xC5FA, 0xF8BE, /* 0x30 */
+ 0xF8BD, 0xC5FB, 0, 0xC65A, 0xF96E, 0xF9A7, 0xF9A6, 0xF9A8, /* 0x30 */
+ 0xA6E5, 0xD0AA, 0, 0xD3CF, 0xD3D0, 0, 0, 0, /* 0x40 */
+ 0xDBC0, 0, 0xF647, 0xF8C0, 0xA6E6, 0xAD6C, 0xD0AB, 0, /* 0x40 */
+ 0, 0, 0xD7B1, 0xB34E, 0, 0xDBC2, 0xDBC1, 0xB5F3, /* 0x50 */
+ 0, 0xB8C5, 0xE7C1, 0xBDC3, 0, 0xBDC4, 0, 0, /* 0x50 */
+ 0, 0xBFC5, 0xC5FC, 0xA6E7, 0, 0, 0, 0xD0AC, /* 0x60 */
+ 0xAAED, 0xD0AE, 0xD0AD, 0xAD6D, 0, 0xD3D1, 0, 0xD3D8, /* 0x60 */
+ 0xB049, 0xD3D6, 0xD3D4, 0, 0xD3DB, 0xD3D2, 0xD3D3, 0xB04A, /* 0x70 */
+ 0, 0xB04E, 0, 0, 0xD3DC, 0xB04D, 0xD3DA, 0xD3D7, /* 0x70 */
+ 0xD3D5, 0xB04B, 0xB04C, 0xD3D9, 0, 0, 0, 0, /* 0x80 */
+ 0xB350, 0xD7B2, 0, 0xB355, 0xD7C2, 0xB354, 0xD7C4, 0, /* 0x80 */
+ 0, 0xD7B8, 0xB352, 0xD7C3, 0, 0xD7B3, 0xB353, 0xD7BF, /* 0x90 */
+ 0xD7BB, 0xD7BD, 0xD7B7, 0xD7BE, 0, 0, 0xB34F, 0xD7BA, /* 0x90 */
+ 0, 0xD7B9, 0xD7B5, 0, 0xD7C0, 0, 0, 0xD7BC, /* 0xA0 */
+ 0xD7B4, 0, 0xD7B6, 0xB351, 0xD7C1, 0, 0, 0, /* 0xA0 */
+ 0, 0xB5F6, 0xDBCD, 0, 0, 0, 0xDBC9, 0xDBCB, /* 0xB0 */
+ 0xDBC6, 0xDBC5, 0xDBC3, 0, 0xDBCA, 0xDBCC, 0xDBC8, 0, /* 0xB0 */
+ 0xDBC7, 0xB5F4, 0xB5F5, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xDBCF, 0xB8CD, 0xDFF2, 0xDFF8, 0xDFF3, 0xDFF4, 0xF9D8, /* 0xC0 */
+ 0xDFF9, 0, 0xB8CF, 0, 0xB8C7, 0xB8CE, 0xDFF1, 0xDBC4, /* 0xD0 */
+ 0xB8CA, 0xB8C8, 0xDFF7, 0xDFF6, 0xB8C9, 0xB8CB, 0xDFF5, 0xB8C6, /* 0xD0 */
+ 0, 0xB8CC, 0, 0, 0, 0, 0, 0xE3F6, /* 0xE0 */
+ 0xBB74, 0, 0, 0xE442, 0xE441, 0, 0xE3FB, 0xBB76, /* 0xE0 */
+ 0xE440, 0xE3F7, 0xE3F8, 0xBB6E, 0xBB70, 0, 0xE3FD, 0xE3F5, /* 0xF0 */
+ 0xBB72, 0xBB71, 0xE3F9, 0xE3FE, 0xE3FC, 0xBB73, 0xE3FA /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_89[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDBCE, 0xBB6F, 0, 0, 0xE7C2, 0xE7C9, 0xBDC6, /* 0x00 */
+ 0, 0xE7CD, 0xBDCA, 0xE7C5, 0xE7C3, 0, 0xE7CC, 0, /* 0x00 */
+ 0xBDC5, 0xE7CB, 0xBDC7, 0xBDC8, 0xE7C4, 0xBDC9, 0xE7CA, 0xE7C6, /* 0x10 */
+ 0xE7C7, 0xE7C8, 0xBB75, 0, 0, 0, 0xEB70, 0xEB7C, /* 0x10 */
+ 0, 0xBFCA, 0xEB77, 0xEB79, 0, 0xBFC8, 0xEB71, 0xEB75, /* 0x20 */
+ 0, 0xEB78, 0xBFC6, 0xBFC9, 0xEB7B, 0xEB73, 0xEB74, 0xEB7A, /* 0x20 */
+ 0xEB72, 0xEB76, 0xBFC7, 0xEE72, 0, 0xEE71, 0xC1B7, 0xEE77, /* 0x30 */
+ 0xC1B9, 0, 0, 0xC1B6, 0xEE73, 0xC1BA, 0xEE74, 0, /* 0x30 */
+ 0, 0xEE75, 0xEE78, 0, 0xC1B8, 0, 0xF0D6, 0, /* 0x40 */
+ 0, 0xF0D9, 0, 0xF0D3, 0xF0D5, 0, 0, 0xF0D4, /* 0x40 */
+ 0xF0D7, 0xF0D8, 0xEE76, 0xF0D2, 0, 0, 0xC3CD, 0xF2EC, /* 0x50 */
+ 0xF2EF, 0xF2F1, 0xF2EA, 0xF2EB, 0xF2EE, 0xF2F0, 0xC3CE, 0xC3CC, /* 0x50 */
+ 0xC3CB, 0xF2ED, 0xF2E9, 0xF4CA, 0xC4B0, 0, 0xF4CB, 0, /* 0x60 */
+ 0, 0xF649, 0xC4FB, 0xF64B, 0xC4FC, 0xF648, 0xF64A, 0xC5A8, /* 0x60 */
+ 0, 0xF752, 0xC5A7, 0xF7FD, 0xF7FC, 0, 0xF7FB, 0, /* 0x70 */
+ 0, 0xF948, 0xF949, 0xF94B, 0xF94A, 0, 0xCA50, 0xA6E8, /* 0x70 */
+ 0, 0xAD6E, 0xD7C5, 0xB5F7, 0, 0xDFFA, 0xC2D0, 0, /* 0x80 */
+ 0xF2F2, 0, 0, 0xA8A3, 0, 0, 0, 0xB357, /* 0x80 */
+ 0, 0, 0, 0xB356, 0, 0xDBD0, 0xB5F8, 0xDBD2, /* 0x90 */
+ 0xDBD1, 0, 0, 0xDFFB, 0xB8D0, 0xE443, 0xE446, 0xE445, /* 0x90 */
+ 0, 0xE444, 0xE7CE, 0xE7D0, 0xE7CF, 0, 0xBFCC, 0, /* 0xA0 */
+ 0, 0, 0xBFCB, 0, 0xC1BB, 0xEE79, 0xEE7B, 0xEE7A, /* 0xA0 */
+ 0, 0, 0xC2D1, 0, 0, 0, 0xF2F4, 0xF2F3, /* 0xB0 */
+ 0, 0xF4CC, 0xC4B1, 0, 0, 0xC4FD, 0xF754, 0xF753, /* 0xB0 */
+ 0xC65B, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0xA8A4, 0xD0AF, 0xAD6F, 0xD7C8, 0xD7C6, 0, /* 0xD0 */
+ 0, 0xD7C7, 0xDBD4, 0xDBD5, 0xE043, 0xDBD3, 0, 0xDFFC, /* 0xD0 */
+ 0xE041, 0xE040, 0xE042, 0xB8D1, 0xDFFE, 0xDFFD, 0xE044, 0, /* 0xE0 */
+ 0xE449, 0xE447, 0, 0xE448, 0xE7D3, 0xE7D1, 0, 0, /* 0xE0 */
+ 0xE7D2, 0xEB7D, 0xEE7C, 0xEE7D, 0xC2D2, 0, 0xF2F5, 0xF4CD, /* 0xF0 */
+ 0xC4B2, 0, 0xF64C, 0xF755, 0xC5A9, 0, 0xF7FE, 0xF94C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_8A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA8A5, 0, 0xAD71, 0xAD72, 0xD0B0, 0, 0, 0xD0B1, /* 0x00 */
+ 0xAD70, 0, 0xB054, 0, 0xB052, 0, 0xB051, 0xB058, /* 0x00 */
+ 0xB050, 0xB059, 0xD3DD, 0xB056, 0, 0xB053, 0xB057, 0xB055, /* 0x10 */
+ 0xB04F, 0, 0, 0xB35F, 0, 0xB359, 0xD7CC, 0xB35E, /* 0x10 */
+ 0, 0, 0xB360, 0xB35A, 0, 0xB35B, 0, 0xD7CA, /* 0x20 */
+ 0, 0, 0xB358, 0, 0xD7CB, 0xB35D, 0, 0, /* 0x20 */
+ 0xD7C9, 0xB35C, 0, 0, 0xB644, 0, 0xB646, 0, /* 0x30 */
+ 0, 0xDBD8, 0xB645, 0xB5F9, 0xB5FD, 0, 0xB8E4, 0xE049, /* 0x30 */
+ 0xDBDA, 0xB5FE, 0, 0, 0xDBDD, 0xDBDE, 0xB643, 0, /* 0x40 */
+ 0xDBE0, 0, 0xDBE2, 0, 0xDBE3, 0xDBD7, 0xDBD6, 0xDBE4, /* 0x40 */
+ 0xB642, 0xDBE1, 0xDBDF, 0, 0xB640, 0xB5FB, 0xB647, 0xDBDB, /* 0x50 */
+ 0xDBDC, 0xDBD9, 0, 0xB641, 0, 0, 0xB5FC, 0, /* 0x50 */
+ 0xB5FA, 0xE048, 0xB8DF, 0xB8DA, 0, 0, 0xB8D5, 0, /* 0x60 */
+ 0xB8E5, 0xB8D6, 0, 0xB8D2, 0xB8E1, 0xB8DE, 0xB8E0, 0, /* 0x60 */
+ 0xB8D7, 0xB8DC, 0xB8D3, 0xB8D4, 0xE050, 0xE04D, 0xE045, 0xE04A, /* 0x70 */
+ 0, 0xB8E2, 0xE051, 0xB8E3, 0xB8D9, 0, 0, 0xE047, /* 0x70 */
+ 0, 0xE04F, 0xE04B, 0xE04E, 0xE04C, 0xB8DD, 0xE046, 0xB8D8, /* 0x80 */
+ 0, 0, 0, 0xE44C, 0xBB78, 0xBB7B, 0, 0xE44E, /* 0x80 */
+ 0, 0xBBA5, 0xE44D, 0xBB7D, 0, 0xBDCF, 0xE44F, 0, /* 0x90 */
+ 0xBBA4, 0xE44B, 0xBBA6, 0, 0, 0, 0xBB79, 0, /* 0x90 */
+ 0xB8DB, 0xBB7C, 0, 0xBB7A, 0xBB7E, 0xBBA2, 0xBB77, 0xBBA7, /* 0xA0 */
+ 0xBBA3, 0, 0xBBA1, 0xE44A, 0, 0, 0, 0, /* 0xA0 */
+ 0xBDD6, 0, 0xBDD2, 0, 0, 0, 0xBDD9, 0, /* 0xB0 */
+ 0xE7D6, 0xBDDA, 0xE7E2, 0xE7DB, 0xBDCB, 0xE7E3, 0xE7DD, 0xBDD5, /* 0xB0 */
+ 0xE7DE, 0, 0xBDD4, 0xE7E1, 0xBDCE, 0xE7DF, 0xE7D5, 0xBDCD, /* 0xC0 */
+ 0xEBAA, 0xBDD3, 0, 0xBDD0, 0, 0xBDD8, 0, 0xE7D4, /* 0xC0 */
+ 0, 0xE7D8, 0xBDCC, 0xE7D7, 0xE7D9, 0xE7DA, 0xBDD7, 0xE7DC, /* 0xD0 */
+ 0xE7E0, 0xE7E4, 0, 0xBDDB, 0xBFD2, 0xEBA5, 0xEBAB, 0xEBA8, /* 0xD0 */
+ 0xEB7E, 0xEBAC, 0xEBA1, 0, 0xEBA7, 0, 0xBFCD, 0xBFD3, /* 0xE0 */
+ 0xEBAD, 0, 0, 0xBFCF, 0, 0xBFD9, 0xBFD4, 0xEBAF, /* 0xE0 */
+ 0xEBA9, 0xBFD0, 0xEBA2, 0xBFDA, 0xEBA3, 0xEBA4, 0xBFDB, 0xBFD8, /* 0xF0 */
+ 0xBDD1, 0, 0xBFCE, 0xEBB0, 0xBFDC, 0, 0xBFD5, 0xEBAE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_8B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBFD1, 0xBFD6, 0xBFD7, 0, 0xC1C3, 0xEEA4, 0xEEAD, 0xEEAA, /* 0x00 */
+ 0xEEAC, 0, 0xC1C0, 0xEEA5, 0, 0xEEAB, 0xC1BC, 0xEEA7, /* 0x00 */
+ 0xC1C4, 0xEEA3, 0xEEA8, 0xEEAF, 0xEBA6, 0xEEA9, 0xEEA2, 0xC1BD, /* 0x10 */
+ 0xEEA1, 0xC1BE, 0xEEB0, 0xC1BF, 0xEEAE, 0xC1C2, 0xEE7E, 0, /* 0x10 */
+ 0xC1C1, 0, 0xEEA6, 0xF0DC, 0xF0EA, 0xF0E5, 0xF0E7, 0xF0DB, /* 0x20 */
+ 0xC2D3, 0, 0xF0DA, 0xC2D6, 0xC2D5, 0, 0xF0E9, 0xF0E1, /* 0x20 */
+ 0xF0DE, 0xF0E4, 0, 0xF0DD, 0, 0xF0DF, 0xF0E8, 0xF0E6, /* 0x30 */
+ 0, 0xC2D4, 0xF0ED, 0xF0EB, 0xF0E2, 0xF0EC, 0xF0E3, 0, /* 0x30 */
+ 0xF2F9, 0xC3CF, 0xF341, 0, 0, 0xF64F, 0xC3D6, 0xF0E0, /* 0x40 */
+ 0xF2F7, 0xC3D2, 0xF2F8, 0xF2FD, 0, 0, 0xC3D4, 0xC3D5, /* 0x40 */
+ 0xF2F6, 0xF340, 0xF342, 0xF2FA, 0xF2FC, 0xF2FE, 0xF2FB, 0xF343, /* 0x50 */
+ 0xC3D1, 0xC3D7, 0xC3D3, 0, 0xC3D0, 0xF4D0, 0, 0xC4B7, /* 0x50 */
+ 0xF4CE, 0, 0, 0xF4D2, 0, 0xF4D3, 0xC4B5, 0xF4D4, /* 0x60 */
+ 0xF4D1, 0, 0xF4CF, 0xC4B8, 0xC4B4, 0xF4D5, 0, 0xC4B6, /* 0x60 */
+ 0xC4B3, 0, 0, 0, 0xC4FE, 0, 0, 0xC540, /* 0x70 */
+ 0xF64E, 0xF64D, 0xF650, 0xF651, 0, 0xC541, 0xF756, 0xF75B, /* 0x70 */
+ 0xC5AA, 0, 0xF758, 0, 0xF757, 0xF75A, 0xF759, 0, /* 0x80 */
+ 0xF843, 0, 0xC5DC, 0xF842, 0xF840, 0, 0xF841, 0, /* 0x80 */
+ 0, 0, 0xC5FE, 0xC5FD, 0xF8C1, 0xF8C2, 0xC640, 0, /* 0x90 */
+ 0xF94D, 0xF94E, 0xC667, 0, 0xC66D, 0, 0xF9A9, 0xF9C8, /* 0x90 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_8C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA8A6, /* 0x30 */
+ 0, 0xD7CD, 0, 0xD7CE, 0xE052, 0xE450, 0xE7E5, 0xC1C6, /* 0x30 */
+ 0, 0xC1C5, 0xF0EE, 0xF344, 0, 0xF844, 0xA8A7, 0xD3DE, /* 0x40 */
+ 0xB05A, 0xB361, 0xE054, 0xE053, 0xBDDC, 0xE7E6, 0xBDDD, 0xEEB1, /* 0x40 */
+ 0xC2D7, 0, 0, 0, 0xC676, 0xA8A8, 0xCDCB, 0xD3DF, /* 0x50 */
+ 0, 0, 0xB362, 0, 0xD7CF, 0xD7D0, 0, 0xDBE5, /* 0x50 */
+ 0, 0xB648, 0xB8E6, 0, 0xE056, 0xE055, 0xE057, 0, /* 0x60 */
+ 0xE451, 0xE452, 0xBBA8, 0xBFDD, 0xBDDE, 0xBFDE, 0, 0xEEB5, /* 0x60 */
+ 0xEEB2, 0xEEB4, 0xEEB3, 0xC1C7, 0, 0xF0EF, 0xF346, 0xF345, /* 0x70 */
+ 0xCBA4, 0xB05C, 0xB05B, 0xD3E0, 0, 0xD7D1, 0, 0, /* 0x70 */
+ 0xDBE7, 0xDBE6, 0xB649, 0, 0xE059, 0xE05A, 0xE058, 0, /* 0x80 */
+ 0, 0xB8E8, 0xB8E7, 0, 0xBBAA, 0xBBA9, 0, 0xE7E7, /* 0x80 */
+ 0xEBB3, 0xEBB1, 0xEBB2, 0xBFDF, 0xEEB7, 0xEEB6, 0, 0xF0F2, /* 0x90 */
+ 0xF0F1, 0xF0F0, 0xF347, 0, 0xF9AA, 0xA8A9, 0xAD73, 0, /* 0x90 */
+ 0xAD74, 0xB05D, 0xB05E, 0xD3E2, 0xD3E1, 0xD7D2, 0, 0xB368, /* 0xA0 */
+ 0xB366, 0xB363, 0xB367, 0xB365, 0xB364, 0, 0, 0xB64A, /* 0xA0 */
+ 0xDBEA, 0, 0xB8ED, 0xB64C, 0xB651, 0xDBEC, 0xB653, 0xB652, /* 0xB0 */
+ 0xB655, 0xDBEB, 0xDBE8, 0xB64F, 0xB64B, 0xB64D, 0xDBE9, 0xB654, /* 0xB0 */
+ 0xB650, 0xB64E, 0xB8EF, 0xB8EE, 0xB8EC, 0xB8F0, 0, 0xB8EA, /* 0xC0 */
+ 0xB8EB, 0, 0xB8E9, 0, 0xE05B, 0, 0, 0xE454, /* 0xC0 */
+ 0, 0xBBAC, 0xBBAD, 0xBBAB, 0, 0xE453, 0, 0xE455, /* 0xD0 */
+ 0, 0xE7EA, 0xE7EC, 0, 0xBDE7, 0xE7ED, 0xBDE0, 0xE7E9, /* 0xD0 */
+ 0xBDDF, 0xBDE9, 0xBDE5, 0xBDE6, 0xBDE2, 0xE7E8, 0xBDE1, 0xE7EE, /* 0xE0 */
+ 0xE7EB, 0, 0xBDE8, 0, 0xBDE3, 0xBDE4, 0xEBB5, 0, /* 0xE0 */
+ 0xEBB7, 0xEBB6, 0, 0xEBB8, 0xBFE0, 0xEBB4, 0, 0, /* 0xF0 */
+ 0xC1CB, 0xEEB8, 0xC1C8, 0xC1CC, 0xC1CA, 0xC1C9, 0xF0F3 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_8D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF0F6, 0, 0xF0F5, 0, 0xF0F4, 0xC2D8, 0xF348, 0xF349, /* 0x00 */
+ 0xC3D8, 0xF34A, 0xC3D9, 0, 0, 0xC4BA, 0, 0xC4B9, /* 0x00 */
+ 0xF652, 0, 0, 0xC542, 0xF653, 0xF75C, 0xC5AB, 0xC5AC, /* 0x10 */
+ 0, 0xF845, 0, 0xC642, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xA8AA, 0, 0xB36A, 0xB369, /* 0x60 */
+ 0xE05C, 0xE05D, 0, 0xBBAE, 0xEBB9, 0xBDEA, 0xEBBA, 0xEEB9, /* 0x60 */
+ 0xA8AB, 0, 0xD0B2, 0xAD76, 0xAD75, 0, 0xD3E3, 0xB05F, /* 0x70 */
+ 0xD3E4, 0xD7D5, 0, 0xD7D4, 0, 0xD7D3, 0, 0, /* 0x70 */
+ 0xDBEE, 0xB658, 0, 0, 0xDBED, 0xB657, 0, 0, /* 0x80 */
+ 0, 0xDBEF, 0xB656, 0, 0xE05F, 0xE062, 0xE060, 0xE061, /* 0x80 */
+ 0xE065, 0xE05E, 0xE066, 0xE063, 0xE064, 0xBBB0, 0xE456, 0, /* 0x90 */
+ 0, 0xBBAF, 0, 0xE7F2, 0xE7F0, 0, 0, 0xBDEB, /* 0x90 */
+ 0xE7EF, 0xE7F1, 0, 0xBDEC, 0, 0xEBBB, 0, 0xEBBC, /* 0xA0 */
+ 0xC1CD, 0, 0xF34C, 0xF34E, 0xF34B, 0xF34D, 0xF4D6, 0xF654, /* 0xA0 */
+ 0, 0, 0xF96F, 0xA8AC, 0xAD77, 0xD3E5, 0xD3E7, 0xD3E6, /* 0xB0 */
+ 0, 0xD7D8, 0xB36C, 0, 0xD7D6, 0, 0xB36B, 0xD7D9, /* 0xB0 */
+ 0, 0xD7DA, 0xD7D7, 0, 0, 0xDBFB, 0xB660, 0xDBF3, /* 0xC0 */
+ 0xDBF9, 0, 0, 0xB65B, 0xB65E, 0xDBF2, 0xB659, 0xDBF6, /* 0xC0 */
+ 0xE06C, 0xB65D, 0, 0xDBF1, 0, 0xDBF7, 0xDBF4, 0xDBFA, /* 0xD0 */
+ 0xDBF0, 0xDBF8, 0xB65C, 0xB65F, 0xDBF5, 0xB65A, 0, 0xB8F2, /* 0xD0 */
+ 0xE068, 0xB8F1, 0xE06F, 0xE06E, 0xB8F8, 0, 0xB8F9, 0xE070, /* 0xE0 */
+ 0xB8F3, 0xE06D, 0xB8F7, 0xE072, 0xE069, 0, 0xE06B, 0xB8F4, /* 0xE0 */
+ 0xE067, 0xE06A, 0xE071, 0xB8F5, 0xE073, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0xB8F6, 0, 0xBBB1, 0xE45B, 0xE461, 0xE459 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_8E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE462, 0, 0xE458, 0xE45D, 0xE463, 0xE460, 0xE45F, 0xE45E, /* 0x00 */
+ 0, 0xE457, 0xE45C, 0, 0, 0xE45A, 0, 0xBDF1, /* 0x00 */
+ 0xBDEE, 0xE7FB, 0xE841, 0xE843, 0xE840, 0xE7F8, 0xE7FA, 0xE845, /* 0x10 */
+ 0xE842, 0xE7FC, 0xE846, 0xE7F9, 0xE844, 0xBDEF, 0xBDF5, 0xBDF3, /* 0x10 */
+ 0xE7F3, 0xBDF4, 0xBDF0, 0xE7F4, 0xE7F6, 0xE7F5, 0xE7FD, 0xE7FE, /* 0x20 */
+ 0, 0xBDF2, 0, 0xBDED, 0, 0, 0xE7F7, 0, /* 0x20 */
+ 0xEBC6, 0xBFE2, 0, 0xEBBD, 0xBFE3, 0xBFE6, 0xEBC2, 0, /* 0x30 */
+ 0xEBBF, 0xBFE5, 0, 0, 0xEBC3, 0xEBC4, 0xEBBE, 0xEBC7, /* 0x30 */
+ 0xEBC0, 0xEBC5, 0xBFE4, 0, 0xBFE1, 0xEBC1, 0, 0xEEBF, /* 0x40 */
+ 0xC1D0, 0xC1CE, 0xC1D1, 0xC1CF, 0xEEBE, 0xEEBB, 0xEEBA, 0, /* 0x40 */
+ 0xEEBD, 0, 0, 0xEEBC, 0xF145, 0xC2DE, 0xF0FB, 0xF0FA, /* 0x50 */
+ 0, 0xC2D9, 0xF141, 0xF140, 0xF0F7, 0xF143, 0xF0FC, 0xC2DD, /* 0x50 */
+ 0xF0F9, 0xF142, 0xF0F8, 0xC2DA, 0xC2DC, 0xF0FD, 0xC2DB, 0xF0FE, /* 0x60 */
+ 0, 0xF144, 0xF352, 0, 0xC3DE, 0xF34F, 0, 0xF353, /* 0x60 */
+ 0, 0, 0xC3DB, 0xF351, 0xC3E0, 0, 0xC3DD, 0, /* 0x70 */
+ 0xF350, 0, 0xC3DF, 0xF354, 0xC3DA, 0, 0, 0, /* 0x70 */
+ 0, 0xC4BC, 0xC4BE, 0, 0xF4D9, 0xC4BD, 0xF4D7, 0xC3DC, /* 0x80 */
+ 0xF4D8, 0xC4BB, 0xC543, 0xC545, 0xF656, 0xC544, 0xF655, 0, /* 0x80 */
+ 0xF761, 0xC5AD, 0xF760, 0xC5AE, 0xF75E, 0xF75D, 0xF762, 0xF763, /* 0x90 */
+ 0xF846, 0, 0xF75F, 0, 0, 0xF8C6, 0xF8C3, 0xF8C4, /* 0x90 */
+ 0xF8C5, 0xC65C, 0, 0xF951, 0xF950, 0xF94F, 0xF970, 0, /* 0xA0 */
+ 0xF9BE, 0xF9AB, 0xC66E, 0xA8AD, 0xB060, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xB8FA, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0xBDF6, 0, 0, 0xEBC8, 0, 0, /* 0xB0 */
+ 0xC2DF, 0, 0xF355, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0xF9AC, 0xA8AE, 0xAAEE, 0xAD79, 0xAD78, 0, 0xB063, /* 0xC0 */
+ 0, 0xD3E8, 0xB061, 0xD3E9, 0xB062, 0, 0, 0xD7DF, /* 0xD0 */
+ 0xD7DB, 0, 0, 0xB36D, 0xD7DE, 0xD7DD, 0xD7DC, 0xB36E, /* 0xD0 */
+ 0xD7E0, 0xD7E1, 0, 0, 0, 0xDC43, 0xDC41, 0xDC45, /* 0xE0 */
+ 0xDC46, 0xDC4C, 0, 0xDC48, 0xDC4A, 0, 0xDC42, 0xDBFC, /* 0xE0 */
+ 0, 0xDC49, 0, 0, 0xDC4B, 0xDC44, 0xDC47, 0xDBFD, /* 0xF0 */
+ 0xB662, 0xDC40, 0xDBFE, 0xB661, 0xB663, 0, 0xB8FD, 0xE075 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_8F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE077, 0xE076, 0xE07B, 0xB8FB, 0, 0xE078, 0xE074, 0xE079, /* 0x00 */
+ 0xE07A, 0xB8FC, 0xB8FE, 0xE07C, 0, 0xE467, 0xE466, 0, /* 0x00 */
+ 0xE464, 0xE465, 0xBBB3, 0xBBB5, 0xBBB2, 0xBBB4, 0xE84D, 0xE84E, /* 0x10 */
+ 0xE849, 0, 0xE84A, 0xBDF8, 0xBDFD, 0xBDF7, 0xBDFE, 0xBDF9, /* 0x10 */
+ 0xE84B, 0, 0, 0xE84C, 0xE848, 0xBE40, 0xBDFB, 0, /* 0x20 */
+ 0, 0xBDFA, 0xBDFC, 0, 0xE847, 0, 0xEBCA, 0xBFE8, /* 0x20 */
+ 0, 0, 0xEBCC, 0xBFEA, 0xEBCF, 0xEBCB, 0xEBC9, 0xEBCE, /* 0x30 */
+ 0xBFE9, 0xEBCD, 0, 0xBFE7, 0, 0, 0xC1D3, 0xC1D6, /* 0x30 */
+ 0xEEC1, 0, 0xC1D4, 0xEEC0, 0xC1D2, 0xC1D5, 0xF146, 0xF147, /* 0x40 */
+ 0xF148, 0xC2E0, 0, 0xF149, 0, 0xC2E1, 0xC3E2, 0xF358, /* 0x40 */
+ 0xF359, 0xF357, 0xF356, 0xF35A, 0xC3E1, 0xF4DD, 0xF4DB, 0xF4DC, /* 0x50 */
+ 0xF4DE, 0xF4DA, 0xF4DF, 0xF658, 0, 0xF659, 0xF657, 0xC546, /* 0x50 */
+ 0xF764, 0xC5AF, 0xF765, 0xF848, 0xF847, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0xA8AF, 0xB664, 0, 0, 0xB940, /* 0x90 */
+ 0, 0, 0, 0xBBB6, 0, 0, 0xBFEC, 0, /* 0xA0 */
+ 0xBFEB, 0, 0, 0, 0, 0xC3E3, 0xC47C, 0xC547, /* 0xA0 */
+ 0xA8B0, 0xB064, 0xB941, 0, 0xF35B, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0xCBA6, /* 0xB0 */
+ 0, 0, 0xA8B1, 0, 0xA8B4, 0xA8B3, 0xA8B2, 0, /* 0xC0 */
+ 0, 0xCBA5, 0, 0xCDCD, 0, 0xCDCF, 0xAAEF, 0, /* 0xC0 */
+ 0, 0xAAF1, 0xCDCC, 0xCDCE, 0xAAF0, 0xCDD1, 0xCDD0, 0xCDD2, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xD0B6, 0xD0B4, 0xAD7C, 0xD0B3, 0xADA3, 0xAD7E, 0xAD7B, 0, /* 0xE0 */
+ 0xADA4, 0, 0xAD7D, 0xADA2, 0, 0xADA1, 0xD0B5, 0, /* 0xE0 */
+ 0xAD7A, 0, 0, 0, 0xB06A, 0xD3EB, 0xD3F1, 0xB067, /* 0xF0 */
+ 0xB06E, 0, 0xB069, 0xD3EE, 0xD3F0, 0xB06C, 0xD3EA, 0xD3ED /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_90[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xB068, 0xB065, 0xD3EC, 0xB06B, 0xD3EF, 0xB06D, 0xB066, 0, /* 0x00 */
+ 0, 0, 0, 0xD7E3, 0xD7E6, 0xB370, 0, 0xB37A, /* 0x00 */
+ 0xB376, 0xD7E4, 0, 0, 0xB37E, 0xB377, 0xB37C, 0xB372, /* 0x10 */
+ 0, 0xB36F, 0xB371, 0xB37D, 0xD7E5, 0xB375, 0xB378, 0xB374, /* 0x10 */
+ 0xB379, 0xD7E7, 0xB37B, 0xB373, 0xD7E2, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xDC4D, 0xB665, 0xDC4F, /* 0x20 */
+ 0, 0xB667, 0xB669, 0, 0xDC4E, 0xB666, 0xB66A, 0, /* 0x30 */
+ 0xB668, 0, 0, 0, 0xB947, 0xE0A3, 0xB94F, 0xE07E, /* 0x30 */
+ 0, 0xB950, 0xB945, 0, 0xE0A1, 0, 0, 0xB94A, /* 0x40 */
+ 0, 0xE0A2, 0xB943, 0xB942, 0, 0xB94D, 0xB94C, 0xB94B, /* 0x40 */
+ 0xB949, 0xB94E, 0xE07D, 0xB944, 0xB946, 0xB948, 0, 0, /* 0x50 */
+ 0xBBB8, 0xBBBB, 0, 0xBBBF, 0xBBB9, 0xBBBE, 0xBBBC, 0, /* 0x50 */
+ 0xBBB7, 0, 0xBBBD, 0xBBBA, 0, 0, 0, 0xE852, /* 0x60 */
+ 0xBE43, 0xBE41, 0, 0xE853, 0, 0xBE44, 0xBE42, 0xE851, /* 0x60 */
+ 0xE850, 0, 0xBFF0, 0xE84F, 0xBFEE, 0xBFED, 0xEBD0, 0xBE45, /* 0x70 */
+ 0xBFEF, 0xEBD1, 0xBFF2, 0xEBD2, 0xBFF1, 0xC1D8, 0xEEC3, 0xC1D7, /* 0x70 */
+ 0xC1DC, 0xC1DA, 0xC1DB, 0xC2E3, 0xC1D9, 0xEEC2, 0xEBD3, 0xC2E2, /* 0x80 */
+ 0xC2E4, 0, 0xC3E4, 0xC3E5, 0, 0xF4E0, 0, 0xC5DE, /* 0x80 */
+ 0xC5DD, 0xA8B6, 0, 0, 0xCA55, 0xB06F, 0, 0xCA52, /* 0x90 */
+ 0xCA53, 0xCA51, 0, 0xCA54, 0, 0, 0xCBAA, 0xCBA7, /* 0x90 */
+ 0xCBAC, 0xCBA8, 0xA8B7, 0xA8BA, 0, 0xCBA9, 0xA8B9, 0xCBAB, /* 0xA0 */
+ 0, 0, 0xA8B8, 0, 0, 0, 0, 0xCDD5, /* 0xA0 */
+ 0xCDD7, 0xAAF4, 0xCDD3, 0xCDD6, 0xCDD4, 0xAAF2, 0xAAF5, 0, /* 0xB0 */
+ 0xAAF3, 0, 0, 0, 0, 0xD0B8, 0xD0BC, 0xD0B9, /* 0xB0 */
+ 0, 0xADA7, 0, 0xADA8, 0, 0xD0BB, 0, 0xD0BD, /* 0xC0 */
+ 0xD0BF, 0, 0xADA5, 0xD0BE, 0, 0, 0xADA6, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0xD7EE, 0xD0BA, 0xD3F2, 0xD3FB, /* 0xD0 */
+ 0xD3F9, 0xD3F4, 0xD3F5, 0xD3FA, 0xD3FC, 0xB071, 0, 0xD3F7, /* 0xD0 */
+ 0xD3F3, 0xB070, 0xB072, 0xD3F6, 0xD3FD, 0xD3F8, 0, 0, /* 0xE0 */
+ 0xB3A1, 0xD7F1, 0xD7E9, 0xD7EF, 0xD7F0, 0xB3A2, 0, 0xD7E8, /* 0xE0 */
+ 0xD7EA, 0xD0B7, 0xD7EC, 0xD7ED, 0xD7EB, 0xB66C, 0, 0, /* 0xF0 */
+ 0, 0xDC56, 0xEBD4, 0xDC57, 0xDC54, 0xB3A3, 0xB66E, 0xDC53 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_91[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDC59, 0xDC58, 0xB66B, 0xDC5C, 0xDC52, 0xDC5B, 0xDC50, 0xDC5A, /* 0x00 */
+ 0xDC55, 0xB66D, 0, 0xE0AA, 0, 0xE0A5, 0xE0AB, 0xE0A6, /* 0x00 */
+ 0xE0A4, 0xE0A7, 0xB951, 0, 0xE0A9, 0, 0xE0A8, 0xB952, /* 0x10 */
+ 0xBBC1, 0xBBC0, 0xE46E, 0xE471, 0xE469, 0xE46D, 0xBBC2, 0xE46C, /* 0x10 */
+ 0xE46A, 0xE470, 0xE46B, 0xE468, 0xE46F, 0, 0xE859, 0xBE48, /* 0x20 */
+ 0xF14A, 0xE856, 0xE857, 0xE855, 0xDC51, 0xBE47, 0xE85A, 0xE854, /* 0x20 */
+ 0xBE46, 0xBE49, 0xE858, 0xEBD5, 0xBFF3, 0xEBD6, 0xEBD7, 0, /* 0x30 */
+ 0xEEC4, 0xC1DD, 0xF14B, 0xF14C, 0, 0, 0xF14D, 0xF35D, /* 0x30 */
+ 0xF35C, 0xF4E2, 0, 0xF4E1, 0xF65B, 0xF65C, 0xF65A, 0xF766, /* 0x40 */
+ 0xC5B0, 0xA8BB, 0xADAA, 0xADA9, 0xB075, 0xB074, 0xD440, 0xD441, /* 0x40 */
+ 0xD3FE, 0, 0xB073, 0xD7F5, 0, 0xD7F6, 0xD7F2, 0xB3A4, /* 0x50 */
+ 0xD7F3, 0, 0xD7F4, 0, 0, 0, 0, 0xDC5F, /* 0x50 */
+ 0xDC61, 0xDC5D, 0xDC60, 0xB66F, 0xDC5E, 0xB670, 0, 0, /* 0x60 */
+ 0xDD73, 0xB955, 0xB954, 0, 0xB953, 0, 0xE0AC, 0xE0AD, /* 0x60 */
+ 0, 0, 0xE473, 0xE475, 0xBBC6, 0xBBC3, 0, 0xBBC5, /* 0x70 */
+ 0xBBC4, 0xE474, 0xE472, 0, 0, 0, 0, 0, /* 0x70 */
+ 0xE861, 0xE85E, 0xE85F, 0xBE4D, 0xE860, 0xE85B, 0xE85C, 0xBE4A, /* 0x80 */
+ 0, 0xBE4B, 0xE85D, 0xBE4C, 0, 0xEBDB, 0, 0xEBDC, /* 0x80 */
+ 0xEBD9, 0xEBDA, 0xBFF4, 0xEBD8, 0, 0, 0, 0, /* 0x90 */
+ 0, 0xEEC8, 0xEEC5, 0xEEC7, 0xC1E0, 0xEECB, 0xC1DF, 0xEEC9, /* 0x90 */
+ 0xEECC, 0xEECA, 0xEEC6, 0xC1DE, 0, 0xF14F, 0, 0xF150, /* 0xA0 */
+ 0xF14E, 0, 0xF152, 0xC2E5, 0xC2E6, 0xF35F, 0xC3E7, 0xF151, /* 0xA0 */
+ 0xF35E, 0xC3E6, 0xF4E5, 0xF4E6, 0xC4BF, 0xF4E4, 0, 0xF4E3, /* 0xB0 */
+ 0, 0xF65D, 0xC548, 0, 0xF849, 0xF8C8, 0xF8C7, 0, /* 0xB0 */
+ 0xC643, 0xC65D, 0xF8C9, 0xF971, 0, 0xC66F, 0xA8BC, 0xAAF6, /* 0xC0 */
+ 0, 0xB956, 0, 0xC4C0, 0xA8BD, 0xADAB, 0xB3A5, 0xB671, /* 0xC0 */
+ 0xC2E7, 0xAAF7, 0, 0xD0C1, 0xD0C0, 0xD442, 0, 0xB078, /* 0xD0 */
+ 0xB076, 0xB07A, 0xD444, 0, 0xB079, 0xB077, 0, 0, /* 0xD0 */
+ 0, 0, 0xD443, 0xB3A8, 0xD7FC, 0, 0xB3A7, 0xB3A9, /* 0xE0 */
+ 0xD842, 0xB3AB, 0xD7FE, 0xD840, 0xD7F7, 0xB3AA, 0xD843, 0, /* 0xE0 */
+ 0, 0xD7F9, 0, 0xD7FA, 0xD7F8, 0xB3A6, 0, 0xD841, /* 0xF0 */
+ 0xD7FB, 0xD7FD, 0, 0, 0, 0xDC6D, 0, 0xDC6C /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_92[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xDC6A, 0xDC62, 0xDC71, 0xDC65, 0xDC6F, 0xDC76, 0xDC6E, 0xB679, /* 0x00 */
+ 0, 0xB675, 0xDC63, 0, 0xDC69, 0xB677, 0, 0xDC68, /* 0x00 */
+ 0xB678, 0xB67A, 0xDC6B, 0, 0xB672, 0xB673, 0xDC77, 0xDC75, /* 0x10 */
+ 0, 0xDC74, 0xDC66, 0, 0xDC72, 0, 0xB676, 0, /* 0x10 */
+ 0, 0, 0, 0xB674, 0xDC73, 0xDC64, 0xDC67, 0xDC70, /* 0x20 */
+ 0, 0, 0, 0, 0, 0xE4BA, 0xE0B7, 0, /* 0x20 */
+ 0xE0B0, 0xE0C3, 0xE0CC, 0xE0B3, 0xB961, 0, 0xE0C0, 0xB957, /* 0x30 */
+ 0xB959, 0xB965, 0xE0B1, 0, 0, 0xB95A, 0xB95C, 0xB966, /* 0x30 */
+ 0xB95B, 0, 0, 0, 0, 0xB964, 0xE0B9, 0, /* 0x40 */
+ 0xE0AE, 0xB962, 0xE0B8, 0xB95E, 0xE0CA, 0xB963, 0xE0C8, 0xE0BC, /* 0x40 */
+ 0xE0C6, 0xB960, 0xE0AF, 0xE0C9, 0xE0C4, 0, 0xE0CB, 0xB958, /* 0x50 */
+ 0, 0, 0xB967, 0xB95D, 0, 0, 0xE0B5, 0, /* 0x50 */
+ 0xE0BD, 0xE0C1, 0, 0xE0C5, 0xB95F, 0xE0B4, 0xE0B2, 0xE0BE, /* 0x60 */
+ 0, 0, 0, 0, 0xE0BB, 0xE0BA, 0, 0xE0BF, /* 0x60 */
+ 0xE0C2, 0, 0xE0C7, 0, 0, 0, 0xE478, 0, /* 0x70 */
+ 0xBBC7, 0xE4A4, 0xE47A, 0xBBCC, 0xBBD0, 0xE4AD, 0xE4B5, 0xE4A6, /* 0x70 */
+ 0xBBC8, 0, 0xE4AA, 0xE0B6, 0, 0xBBC9, 0xE4B1, 0xE4B6, /* 0x80 */
+ 0xE4AE, 0, 0xE4B0, 0xE4B9, 0xE4B2, 0xE47E, 0xE4A9, 0, /* 0x80 */
+ 0, 0xBBD1, 0, 0xBBCD, 0xE47C, 0xE4AB, 0xBBCB, 0xE4A5, /* 0x90 */
+ 0xBBCA, 0xE4B3, 0xE4A2, 0xE479, 0xBBCE, 0xE4B8, 0, 0, /* 0x90 */
+ 0xE47B, 0xE4AF, 0xE4AC, 0xE4A7, 0xE477, 0xE476, 0xE4A1, 0xE4B4, /* 0xA0 */
+ 0xBBCF, 0xE4B7, 0xE47D, 0xE4A3, 0xBE52, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0xBE5A, 0xBE55, 0xE8A4, 0xE8A1, 0xE867, 0xBE50, /* 0xB0 */
+ 0, 0xF9D7, 0, 0xBE4F, 0xBE56, 0, 0, 0, /* 0xB0 */
+ 0xE865, 0xBE54, 0xE871, 0xE863, 0xE864, 0xBE4E, 0xE8A3, 0xBE58, /* 0xC0 */
+ 0xE874, 0xE879, 0xE873, 0xEBEE, 0xE86F, 0xE877, 0xE875, 0xE868, /* 0xC0 */
+ 0xE862, 0xE87D, 0xBE57, 0xE87E, 0, 0xE878, 0, 0xE86D, /* 0xD0 */
+ 0xE86B, 0xE866, 0, 0, 0, 0xE86E, 0xE87B, 0xE86A, /* 0xD0 */
+ 0xE87A, 0xE8A2, 0, 0, 0xBE53, 0, 0xE876, 0xE87C, /* 0xE0 */
+ 0xE872, 0xE86C, 0xBE51, 0, 0, 0, 0xE4A8, 0xE870, /* 0xE0 */
+ 0xBE59, 0xE869, 0, 0, 0, 0, 0, 0xEBF4, /* 0xF0 */
+ 0xBFF7, 0xEBF3, 0xEBF0, 0xEC44, 0xBFFB, 0, 0xEC41, 0xEBF8 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_93[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEC43, 0xEBE9, 0xEBF6, 0, 0xBFFD, 0, 0xEBE1, 0, /* 0x00 */
+ 0xEBDF, 0xEC42, 0, 0xEC40, 0xEBFE, 0xEBED, 0xEBEC, 0xEBE2, /* 0x00 */
+ 0xC040, 0, 0xEBE8, 0xEBF2, 0xEBFD, 0xC043, 0xEC45, 0, /* 0x10 */
+ 0xC1E8, 0xC045, 0xBFFE, 0xEBE6, 0, 0xEBEF, 0xEBDE, 0xEBE0, /* 0x10 */
+ 0xBFF5, 0xC042, 0xBFFA, 0xEBE7, 0xEBF7, 0xEBF1, 0xC041, 0xEBDD, /* 0x20 */
+ 0xC1E3, 0xEBF9, 0xEBFC, 0xBFFC, 0, 0xEBEB, 0xC044, 0xBFF9, /* 0x20 */
+ 0, 0, 0, 0xBFF8, 0xEBF5, 0xEBFB, 0xBFF6, 0, /* 0x30 */
+ 0xEBE4, 0xEBFA, 0, 0, 0xEBE5, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0xEBEA, 0xEED2, /* 0x40 */
+ 0, 0xEED7, 0xC1E5, 0xC1E7, 0xEEDD, 0xC1E1, 0xEEEC, 0xEEE3, /* 0x40 */
+ 0xEED8, 0xEED9, 0xEEE2, 0, 0xC1EE, 0xEEE1, 0xEED1, 0xEEE0, /* 0x50 */
+ 0xEED4, 0xEEED, 0xC1ED, 0xC1EB, 0xEED5, 0, 0xEEE8, 0, /* 0x50 */
+ 0xEEDA, 0xEEE7, 0, 0xEEE9, 0xEED0, 0xC1E6, 0, 0xEEEA, /* 0x60 */
+ 0, 0, 0xEEDE, 0, 0xC1EA, 0xEEDB, 0, 0, /* 0x60 */
+ 0xC1EC, 0xEEE4, 0, 0, 0, 0xC1E4, 0xEED6, 0xEEE5, /* 0x70 */
+ 0, 0xEEDF, 0xEBE3, 0xEEE6, 0xEED3, 0, 0xC1E9, 0, /* 0x70 */
+ 0xEEEB, 0, 0xC1E2, 0xEECE, 0, 0, 0, 0, /* 0x80 */
+ 0xF160, 0xF159, 0xC2E9, 0, 0xF154, 0xF163, 0xF15B, 0xEEDC, /* 0x80 */
+ 0, 0xF165, 0xF155, 0, 0xC2E8, 0xF15F, 0xC2EA, 0xC2F2, /* 0x90 */
+ 0xC2F0, 0xF161, 0xC2F1, 0xF157, 0, 0xF158, 0xF15D, 0xF162, /* 0x90 */
+ 0, 0xEECD, 0xC2EB, 0xF16A, 0xF167, 0xF16B, 0xF15E, 0xF15A, /* 0xA0 */
+ 0xF168, 0xF36A, 0xF15C, 0, 0xC2EE, 0, 0xC2ED, 0xEECF, /* 0xA0 */
+ 0xC2EF, 0xF164, 0xF166, 0xC2EC, 0xF169, 0xF153, 0, 0xF156, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0xF373, 0, 0xF363, 0xC3EB, 0xF371, 0, 0, 0xF361, /* 0xC0 */
+ 0xC3EC, 0, 0xF36C, 0, 0xF368, 0xC3F1, 0xF372, 0xF362, /* 0xC0 */
+ 0xF365, 0xC3E9, 0xF374, 0, 0xF36D, 0xF370, 0xC3EF, 0xC3F4, /* 0xD0 */
+ 0xC3F2, 0xF369, 0xF364, 0, 0xC3ED, 0xC3EE, 0xF360, 0xC3EA, /* 0xD0 */
+ 0, 0xC3E8, 0xC3F0, 0xF36F, 0xC3F3, 0, 0xF36B, 0xF375, /* 0xE0 */
+ 0xC3F5, 0, 0, 0, 0xF367, 0, 0xF36E, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xF4F3, 0xF542, 0xF4F5, /* 0xF0 */
+ 0xF4FC, 0xF366, 0xF4FA, 0xF4E9, 0xF540, 0xC4C3, 0xF4ED, 0xF4FE /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_94[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF4F4, 0, 0, 0xC4C2, 0, 0, 0xF544, 0xF4F6, /* 0x00 */
+ 0, 0xF4FB, 0xF4FD, 0xF4E7, 0xF541, 0xF4F2, 0xF4F7, 0xF4EB, /* 0x00 */
+ 0xF4EF, 0xF543, 0xF4F9, 0xF4E8, 0xF4EC, 0xF4EE, 0xF4F8, 0, /* 0x10 */
+ 0xC4C1, 0xF4F1, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0xF4EA, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0xF4F0, 0xF661, 0xF666, 0xC54F, 0xF668, 0, 0xC549, 0, /* 0x20 */
+ 0xF664, 0xF66A, 0xC54E, 0xC54A, 0, 0xC54B, 0xF660, 0xF667, /* 0x30 */
+ 0xC54D, 0xF665, 0xC54C, 0xF65F, 0xF663, 0xF662, 0, 0xF65E, /* 0x30 */
+ 0xF669, 0, 0, 0, 0xC5B1, 0xF76D, 0xF770, 0xF76C, /* 0x40 */
+ 0xF76E, 0xF76F, 0xF769, 0xF76A, 0xF767, 0, 0, 0xF76B, /* 0x40 */
+ 0xF768, 0xC5B2, 0xC5B3, 0, 0, 0xF84B, 0, 0xF84D, /* 0x50 */
+ 0, 0, 0, 0, 0, 0xF84C, 0xF84E, 0, /* 0x50 */
+ 0xC5E0, 0, 0xF84A, 0xC5DF, 0xC5E1, 0, 0, 0, /* 0x60 */
+ 0xF8CB, 0xF8CC, 0xC644, 0xF8CA, 0, 0xF953, 0xF952, 0xF954, /* 0x60 */
+ 0xC65F, 0xF955, 0xC65E, 0xF956, 0xF972, 0xF975, 0xF974, 0xC668, /* 0x70 */
+ 0xF973, 0, 0, 0, 0xC672, 0xC670, 0xC671, 0xC677, /* 0x70 */
+ 0xF9C0, 0xF9C1, 0xF9BF, 0xF9C9 /* 0x80 */
+ /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_95[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xAAF8, /* 0x70 */
+ 0, 0, 0xD844, 0xDC78, 0xE8A5, 0xF376, 0, 0, /* 0x70 */
+ 0xAAF9, 0, 0xADAC, 0xB07B, 0, 0, 0xD845, 0, /* 0x80 */
+ 0xD846, 0xB3AC, 0, 0xB67D, 0xDC7A, 0xDC79, 0xB6A3, 0xB67C, /* 0x80 */
+ 0xDC7B, 0xB67E, 0xB6A2, 0xB6A1, 0xB67B, 0, 0, 0, /* 0x90 */
+ 0xB968, 0, 0, 0xE0D0, 0xE0CE, 0, 0xE0CF, 0xE0CD, /* 0x90 */
+ 0, 0xBBD2, 0, 0xBBD5, 0xBBD7, 0xBBD6, 0, 0, /* 0xA0 */
+ 0xBBD3, 0xBBD4, 0, 0xE8A7, 0xE8A6, 0xBE5B, 0xE8A8, 0, /* 0xA0 */
+ 0xE8A9, 0xBE5C, 0, 0, 0, 0xEC4D, 0xEC4B, 0xEEF3, /* 0xB0 */
+ 0, 0xEC49, 0xEC4A, 0xC046, 0xEC46, 0xEC4E, 0xEC48, 0xEC4C, /* 0xB0 */
+ 0xEEEF, 0, 0, 0xEEF1, 0, 0xEEF2, 0xC1F3, 0xEEEE, /* 0xC0 */
+ 0xC1F2, 0xEEF0, 0xC1EF, 0xC1F0, 0xC1F1, 0xEC47, 0, 0, /* 0xC0 */
+ 0xC2F5, 0xF16E, 0xF16C, 0xF16D, 0xC2F3, 0xC2F6, 0xC2F4, 0, /* 0xD0 */
+ 0, 0, 0xF377, 0xF378, 0xC3F6, 0, 0xF545, 0xF547, /* 0xD0 */
+ 0xF546, 0xC4C4, 0xC550, 0xF66D, 0xF66C, 0xF66B /* 0xE0 */
+ /* 0xE0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_96[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x10 */
+ 0xAAFA, 0, 0xC9AA, 0, /* 0x10 */
+ 0xCA58, 0xA6E9, 0xCA56, 0xCA59, 0xCA57, 0, 0, 0, /* 0x20 */
+ 0xCBAE, 0, 0xA8C1, 0, 0xA8C2, 0xCBB0, 0xA8BF, 0xCBAF, /* 0x20 */
+ 0xCBAD, 0xA8C0, 0xA8BE, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xCDD8, 0xCDDB, 0xAAFD, 0xCDDA, 0xCDD9, 0, 0xAAFC, /* 0x30 */
+ 0xAAFB, 0, 0xAB40, 0xCDDC, 0xAAFE, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xD0C6, 0xADAE, 0xADAF, 0xADB0, 0xD0C7, 0xD0C3, /* 0x40 */
+ 0xADAD, 0xD0C4, 0, 0xD0C5, 0xD0C2, 0, 0, 0, /* 0x50 */
+ 0xB0A4, 0, 0, 0xB0A1, 0xD445, 0xB0A2, 0xB0A5, 0xD446, /* 0x50 */
+ 0, 0xB07E, 0xB07C, 0xB07D, 0xB0A3, 0, 0, 0, /* 0x60 */
+ 0, 0, 0xB3AD, 0xD849, 0xB3B5, 0xD848, 0, 0xD84B, /* 0x60 */
+ 0xB3B1, 0xD84A, 0xB6AB, 0xB3AF, 0xB3B2, 0xB3AE, 0xB3B3, 0xB3B4, /* 0x70 */
+ 0xB3B0, 0, 0, 0, 0xD847, 0xB6A7, 0xDC7D, 0, /* 0x70 */
+ 0xDCA3, 0, 0, 0xDCA2, 0xB6AC, 0xB6A8, 0xB6A9, 0xDC7C, /* 0x80 */
+ 0xDC7E, 0xDCA1, 0xB6A4, 0xB6A6, 0, 0xB6AA, 0xB6A5, 0, /* 0x80 */
+ 0, 0xE0D3, 0xE0D1, 0xE0D2, 0xB96A, 0xB96B, 0, 0xE0D4, /* 0x90 */
+ 0xB969, 0xBBD8, 0, 0xBBDA, 0xBBD9, 0, 0xE4BB, 0, /* 0x90 */
+ 0, 0xE4BC, 0xE8AB, 0, 0xE8AA, 0, 0, 0xC047, /* 0xA0 */
+ 0xC048, 0xEC4F, 0xC049, 0, 0xEEF6, 0, 0xEEF4, 0, /* 0xA0 */
+ 0xEEF5, 0xC1F4, 0, 0xF16F, 0xC3F7, 0, 0, 0, /* 0xB0 */
+ 0xC1F5, 0xAB41, 0, 0xB0A6, 0xD447, 0, 0, 0xD84C, /* 0xB0 */
+ 0xB3B6, 0xB6AD, 0xDCA4, 0xDCA6, 0xB6AF, 0xB6AE, 0xB6B0, 0xB6B1, /* 0xC0 */
+ 0xDCA5, 0xB96E, 0xB96F, 0xB96D, 0xBBDB, 0xB96C, 0xE0D5, 0, /* 0xC0 */
+ 0, 0, 0xBBDC, 0xE8AC, 0xEC50, 0xC04A, 0xC1F6, 0xF170, /* 0xD0 */
+ 0xF174, 0xC2F9, 0xF171, 0xC2FA, 0xC2F8, 0xF175, 0xC2FB, 0xF173, /* 0xD0 */
+ 0, 0xF379, 0xC2F7, 0xC3F8, 0, 0xF8CD, 0, 0, /* 0xE0 */
+ 0xAB42, 0xB3B8, 0xB3B7, 0, 0, 0, 0, 0xB6B2, /* 0xE0 */
+ 0xDCA8, 0xDCA7, 0xB6B3, 0, 0, 0xE0D9, 0xB973, 0xB970, /* 0xF0 */
+ 0xE0D8, 0xB972, 0xE0D6, 0xB971, 0, 0xE0D7, 0, 0xE4BD /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_97[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xBBDD, 0, 0xE8AF, 0, 0xBE5D, 0xE8AD, 0xBE5E, 0xBE5F, /* 0x00 */
+ 0xE8AE, 0xBE60, 0, 0xEC51, 0, 0xC04E, 0xC04B, 0xC050, /* 0x00 */
+ 0xEC53, 0xC04C, 0xEC52, 0xC04F, 0, 0, 0xC04D, 0, /* 0x10 */
+ 0xEEF9, 0xEEFB, 0, 0, 0xC1F7, 0xEEFA, 0xC1F8, 0xEEF8, /* 0x10 */
+ 0xEEF7, 0, 0xF177, 0xF176, 0xC2FC, 0xF178, 0xF37E, 0xC3FA, /* 0x20 */
+ 0xF37D, 0xF37A, 0xC3F9, 0xF37B, 0xF37C, 0, 0xF548, 0xF549, /* 0x20 */
+ 0xC4C5, 0, 0xC553, 0, 0, 0xF66E, 0, 0, /* 0x30 */
+ 0xC551, 0xC552, 0xF66F, 0, 0, 0xC5B4, 0xC5B5, 0xF771, /* 0x30 */
+ 0, 0, 0xC645, 0xF8CF, 0xC647, 0, 0xF8CE, 0xF8D0, /* 0x40 */
+ 0xC646, 0xF957, 0, 0xF9AD, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0xAB43, 0, 0, 0, 0xB974, 0, /* 0x50 */
+ 0xE4BE, 0, 0xE8B0, 0xC051, 0xC052, 0, 0xAB44, 0, /* 0x50 */
+ 0xBE61, 0xC3FB, 0xADB1, 0, 0, 0, 0xC053, 0, /* 0x60 */
+ 0xC5E2, 0xADB2, 0xD84D, 0, 0xDCA9, 0, 0xDCAB, 0, /* 0x60 */
+ 0xDCAA, 0, 0xE0DD, 0xE0DA, 0xB975, 0, 0xB976, 0xE0DB, /* 0x70 */
+ 0xE0DC, 0, 0xE4C0, 0xE4C5, 0xBBDE, 0xE4BF, 0xE4C1, 0xE4C8, /* 0x70 */
+ 0xE4C3, 0xE4C7, 0xE4C4, 0xE4C2, 0xE4C6, 0xBBDF, 0, 0, /* 0x80 */
+ 0xE8B3, 0, 0xE8B1, 0xBE63, 0, 0xBE62, 0xE8B2, 0xBE64, /* 0x80 */
+ 0, 0, 0, 0, 0xEC56, 0, 0, 0xEC55, /* 0x90 */
+ 0xC054, 0xEC54, 0xEEFC, 0, 0xEEFE, 0xEF41, 0xEF40, 0, /* 0x90 */
+ 0xC1F9, 0xEEFD, 0xF1A1, 0xC2FD, 0xF17D, 0xF1A2, 0xC2FE, 0, /* 0xA0 */
+ 0xF17B, 0, 0xF17E, 0xF17C, 0xF179, 0xC340, 0xF17A, 0, /* 0xA0 */
+ 0, 0, 0, 0xF3A1, 0, 0, 0xF3A3, 0xF3A2, /* 0xB0 */
+ 0, 0xF54A, 0, 0xF54B, 0, 0, 0, 0xF670, /* 0xB0 */
+ 0, 0xC5B7, 0, 0xC5B6, 0xF84F, 0xF850, 0xC648, 0xF8D1, /* 0xC0 */
+ 0, 0xC669, 0, 0xADB3, 0xB6B4, 0xE4CA, 0xE4C9, 0xE8B5, /* 0xC0 */
+ 0xE8B4, 0, 0, 0xC1FA, 0xEF43, 0xEF42, 0xF1A5, 0xF1A3, /* 0xD0 */
+ 0xF1A6, 0xF1A4, 0, 0, 0xC3FC, 0xF3A4, 0xF3A5, 0xF3A6, /* 0xD0 */
+ 0, 0xF671, 0, 0xF772, 0, 0xF8D2, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0xADB4, 0, 0, /* 0xE0 */
+ 0xEC57, 0xEF44, 0, 0xADB5, 0, 0, 0xBBE0, 0, /* 0xF0 */
+ 0xEC58, 0xC341, 0xF1A7, 0xC3FD, 0, 0xF54C, 0xF54D, 0xC554 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_98[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF851, 0xADB6, 0xB3BB, 0xB3BC, 0xD84E, 0xB6B5, 0xB6B6, 0xDCAC, /* 0x00 */
+ 0xB6B7, 0, 0xB97A, 0, 0xB97C, 0xE0DF, 0xE0E0, 0xE0DE, /* 0x00 */
+ 0xB977, 0xB978, 0xB97B, 0xB979, 0, 0, 0xE4CB, 0xBBE1, /* 0x10 */
+ 0xBBE2, 0, 0, 0xE8BC, 0xBE67, 0xE8B7, 0xE8B6, 0, /* 0x10 */
+ 0xE8BB, 0xBE65, 0, 0, 0xC05B, 0, 0xE8B8, 0xE8BD, /* 0x20 */
+ 0xE8BA, 0xE8B9, 0, 0xBE66, 0, 0xC059, 0, 0xEC5A, /* 0x20 */
+ 0xC055, 0, 0xEC5B, 0, 0, 0xEC59, 0, 0xC058, /* 0x30 */
+ 0xC056, 0xC05A, 0, 0xC057, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xEF45, 0, 0xEF4A, 0xEF46, 0xEF49, 0xC1FB, 0, /* 0x40 */
+ 0xEDD4, 0xEF48, 0xEF47, 0, 0xC344, 0xC342, 0xC345, 0xC343, /* 0x40 */
+ 0xF1A8, 0xF1A9, 0xF1AA, 0xC346, 0, 0, 0, 0xF3AA, /* 0x50 */
+ 0xC440, 0xF3A8, 0, 0xC441, 0xF3A7, 0xF3A9, 0xC3FE, 0xF551, /* 0x50 */
+ 0xF54E, 0, 0xF54F, 0xF550, 0xF672, 0xC556, 0, 0xC555, /* 0x60 */
+ 0, 0xF774, 0xF773, 0xC5B8, 0, 0, 0, 0xC5E3, /* 0x60 */
+ 0xC649, 0xC660, 0xF958, 0xF9AE, 0xF9AF, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xADB7, 0xDCAD, 0, 0, 0xE0E1, 0xE4CC, 0xE4CD, 0xBBE3, /* 0xA0 */
+ 0, 0xBBE4, 0xE8BE, 0xBE68, 0, 0, 0xC1FC, 0, /* 0xB0 */
+ 0xF1AB, 0, 0xC347, 0xF3AD, 0xC442, 0xF3AC, 0xF3AE, 0xF3AB, /* 0xB0 */
+ 0xF675, 0xF552, 0xF553, 0, 0xC4C6, 0, 0xF674, 0, /* 0xC0 */
+ 0, 0xF673, 0, 0xF775, 0xF9B0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0xADB8, 0, 0, 0, 0xADB9, /* 0xD0 */
+ 0, 0, 0xB0A7, 0xD448, 0, 0xD84F, 0, 0xB6B8, /* 0xE0 */
+ 0, 0xB6BB, 0xB6B9, 0xDCAE, 0, 0xB6BD, 0, 0xB6BA, /* 0xE0 */
+ 0, 0, 0xB6BC, 0, 0xB97E, 0, 0xE0E2, 0, /* 0xF0 */
+ 0, 0xE0E3, 0xE8C0, 0, 0xB97D, 0xB9A1, 0xB9A2 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_99[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE4CF, 0, 0xE4CE, 0xBBE5, 0, 0xBBE6, 0, 0xE4D0, /* 0x00 */
+ 0xE8BF, 0xBBE8, 0xBE69, 0, 0xBBE7, 0, 0, 0, /* 0x00 */
+ 0xC05C, 0xE8C1, 0xBE6B, 0xBE6A, 0xE8C2, 0xE8C5, 0xE8C3, 0xE8C4, /* 0x10 */
+ 0xBE6C, 0, 0xC061, 0xC05F, 0, 0, 0xC05E, 0xEC5D, /* 0x10 */
+ 0, 0xC060, 0, 0, 0xEC5C, 0xEF4B, 0, 0xEC5E, /* 0x20 */
+ 0xC05D, 0xEC5F, 0xEF4E, 0xEF4C, 0xEF4D, 0xEF52, 0xC34B, 0xEF51, /* 0x20 */
+ 0xEF54, 0xEF53, 0xEF50, 0xEF4F, 0, 0xC1FD, 0, 0, /* 0x30 */
+ 0, 0, 0xF1AE, 0, 0xF1AD, 0xC34A, 0xC348, 0xC349, /* 0x30 */
+ 0, 0xF1AC, 0, 0xF3B1, 0, 0xC443, 0, 0xF3B0, /* 0x40 */
+ 0xF3AF, 0xC444, 0, 0xF558, 0xF557, 0, 0xF555, 0, /* 0x40 */
+ 0xF554, 0xC4C8, 0xC4C7, 0xF559, 0xF776, 0xC5B9, 0xF677, 0xC557, /* 0x50 */
+ 0xF676, 0xF556, 0, 0xF777, 0xC5E4, 0, 0xC661, 0xF959, /* 0x50 */
+ 0, 0xF9B1, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0xADBA, 0xD850, /* 0x90 */
+ 0xEF55, 0xADBB, 0, 0, 0xE4D2, 0xE4D1, 0xEC60, 0, /* 0x90 */
+ 0, 0xEF57, 0, 0xEF56, 0, 0xC34C, 0xF3B2, 0xF3B3, /* 0xA0 */
+ 0xC4C9, 0, 0, 0xF9B2, 0xB0A8, 0xB6BF, 0xB6BE, 0xE0E4, /* 0xA0 */
+ 0xE0E6, 0xB9A4, 0xE0E5, 0xB9A3, 0xB9A5, 0xE0E7, 0, 0, /* 0xB0 */
+ 0, 0xE4D4, 0xE4D6, 0xE4D5, 0, 0xE4D8, 0, 0, /* 0xB0 */
+ 0, 0xBBE9, 0xE4D7, 0xE4D3, 0, 0, 0, 0xE4D9, /* 0xC0 */
+ 0, 0xE8CC, 0, 0xE8CF, 0xE8D1, 0xE8C7, 0xE8CB, 0xE8C8, /* 0xC0 */
+ 0xBE6E, 0xBE71, 0xBE73, 0xE8C9, 0xE8CA, 0xBE72, 0xE8CD, 0xE8D0, /* 0xD0 */
+ 0xE8CE, 0xBE74, 0, 0xBE70, 0xE8C6, 0xBE6D, 0, 0xBE6F, /* 0xD0 */
+ 0, 0, 0xC063, 0xEC66, 0xEC64, 0xEC63, 0, 0xEC69, /* 0xE0 */
+ 0, 0xEC68, 0xEC67, 0, 0xEC62, 0xC062, 0xEC61, 0, /* 0xE0 */
+ 0xEC65, 0xC064, 0, 0, 0xEF5A, 0, 0xEF5E, 0xEF5B, /* 0xF0 */
+ 0xEF5D, 0xEF5C, 0xEF59, 0xEF5F, 0xEF62, 0xEF60, 0xEF61, 0xC240 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_9A[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xC1FE, 0xEF58, 0xEF63, 0xF1B3, 0xF1B6, 0xF1B8, 0xF1B7, /* 0x00 */
+ 0, 0xF1B1, 0xF1B5, 0xF1B0, 0, 0xF1B2, 0xC34D, 0xF1AF, /* 0x00 */
+ 0, 0xF1B4, 0, 0, 0xF3C0, 0xF3B5, 0xC445, 0, /* 0x10 */
+ 0, 0xC446, 0xF3B4, 0xF3B9, 0xF3BF, 0xF3B7, 0xF3BE, 0, /* 0x10 */
+ 0xF3BB, 0, 0xF3BA, 0xF3BD, 0xF3B8, 0xF3B6, 0, 0xF3BC, /* 0x20 */
+ 0, 0xF560, 0xF55E, 0xC4CA, 0xF55D, 0xF563, 0xF561, 0, /* 0x20 */
+ 0xC4CB, 0xF55C, 0xF55A, 0, 0xF55B, 0xC4CD, 0xF55F, 0xC4CC, /* 0x30 */
+ 0xF562, 0xF678, 0xF67E, 0, 0, 0xF679, 0xC55B, 0xF6A1, /* 0x30 */
+ 0xC55A, 0xF67D, 0xF67C, 0xC559, 0xF67B, 0xC558, 0xF67A, 0, /* 0x40 */
+ 0xF77D, 0xF7A1, 0xF77E, 0, 0xF77B, 0xC5BB, 0xF778, 0xF77C, /* 0x40 */
+ 0xF7A3, 0, 0xF7A2, 0xF779, 0xF77A, 0xC5BA, 0xF852, 0xC5E7, /* 0x50 */
+ 0, 0xF853, 0xC5E5, 0xC5E6, 0, 0, 0xF8D3, 0xC64A, /* 0x50 */
+ 0xF976, 0, 0xC66A, 0, 0xF9B3, 0xC66B, 0xF9B4, 0xF9B5, /* 0x60 */
+ 0xF9C3, 0xF9C2, 0xC67A, 0xF9CD, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0xB0A9, 0, 0, 0xE0E9, 0, 0xE0E8, 0, 0xBBEA, /* 0xA0 */
+ 0xBBEB, 0xE4DA, 0, 0xE8D2, 0xEC6C, 0, 0, 0xBE75, /* 0xB0 */
+ 0xC065, 0xEC6A, 0, 0xEC6D, 0xC066, 0, 0xEF64, 0xEC6B, /* 0xB0 */
+ 0xF1B9, 0xC34E, 0xF3C1, 0, 0, 0, 0xF566, 0xF564, /* 0xC0 */
+ 0, 0, 0xF565, 0, 0, 0xF6A2, 0, 0xC55C, /* 0xC0 */
+ 0xF7A4, 0xC5EA, 0xC5BC, 0xC5E8, 0xC5E9, 0xF8D4, 0xC662, 0, /* 0xD0 */
+ 0xB0AA, 0, 0, 0, 0xF1BA, 0, 0, 0xD449, /* 0xD0 */
+ 0, 0xB9A6, 0, 0xE4DB, 0, 0, 0xBBEC, 0xE4DC, /* 0xE0 */
+ 0, 0, 0, 0xE8D4, 0xE8D3, 0xC068, 0xBE76, 0xBE77, /* 0xE0 */
+ 0, 0xE8D7, 0xE8D6, 0xE8D5, 0, 0, 0xEC6E, 0xEC71, /* 0xF0 */
+ 0, 0xEC70, 0xEC6F, 0xC067, 0xEF68, 0xEF66, 0xEF65 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_9B[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xEF67, 0, 0xC34F, 0xF1BC, 0xF1BD, 0xC350, 0, /* 0x00 */
+ 0xF1BB, 0, 0xF3C3, 0xF3C2, 0xF3C5, 0xC447, 0xF3C4, 0, /* 0x00 */
+ 0xF567, 0xF569, 0xF568, 0, 0, 0xF6A3, 0xF6A6, 0xF6A4, /* 0x10 */
+ 0xF6A5, 0xF7A5, 0xC5BD, 0, 0, 0, 0xF854, 0xF855, /* 0x10 */
+ 0xF856, 0, 0xC64B, 0xC663, 0xF9B6, 0xB0AB, 0, 0xBE78, /* 0x20 */
+ 0xC069, 0xF1BE, 0, 0xF7A6, 0, 0, 0xF9C4, 0xD44A, /* 0x20 */
+ 0, 0xC67B, 0xB0AC, 0xEC72, 0, 0xF1BF, 0, 0xF3C6, /* 0x30 */
+ 0, 0, 0xF6A7, 0xF7A7, 0xB0AD, 0, 0xE4DD, 0xE4DE, /* 0x30 */
+ 0, 0xBBED, 0xBBEE, 0xE8D9, 0xBE7A, 0xBE79, 0xE8D8, 0, /* 0x40 */
+ 0xEF69, 0, 0xF1C0, 0xF1C2, 0xF1C1, 0xC353, 0xC352, 0xC351, /* 0x40 */
+ 0, 0xC55E, 0xF6A8, 0, 0xC55D, 0xF7A9, 0xF7A8, 0, /* 0x50 */
+ 0xC64C, 0xF8D5, 0xB3BD, 0xE0EA, 0, 0, 0, 0xE4E1, /* 0x50 */
+ 0xE4DF, 0xE4E0, 0, 0, 0xE8E2, 0, 0xE8DD, 0xE8DA, /* 0x60 */
+ 0xE8E1, 0, 0, 0, 0xE8E3, 0, 0, 0xBE7C, /* 0x60 */
+ 0xE8E0, 0xE8DC, 0, 0, 0xE8DB, 0xE8DF, 0xE8DE, 0xBE7B, /* 0x70 */
+ 0, 0, 0xEC7D, 0xEC78, 0xEC76, 0xECA1, 0xEC77, 0, /* 0x70 */
+ 0xEC73, 0, 0xEC79, 0, 0, 0xEC74, 0xEF72, 0xEC75, /* 0x80 */
+ 0xECA2, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0xEC7C, 0xC06A, 0xEC7B, 0xEC7A, 0, 0xEC7E, 0, 0, /* 0x90 */
+ 0, 0, 0xEF6A, 0xEF6D, 0, 0, 0xEF6C, 0, /* 0x90 */
+ 0xEF74, 0xEF6F, 0xEF73, 0, 0xEF71, 0xEF70, 0xEF6E, 0, /* 0xA0 */
+ 0xEF6B, 0, 0xC243, 0xC242, 0, 0xC244, 0xC241, 0xEF75, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0xF1C8, 0xF1CB, 0, /* 0xB0 */
+ 0xF1C9, 0xF1CD, 0, 0, 0, 0xF1CE, 0, 0xF1C6, /* 0xB0 */
+ 0xC358, 0xF1C7, 0, 0xF1C5, 0xF1CC, 0, 0xF1C4, 0xF1C3, /* 0xC0 */
+ 0xC357, 0xC355, 0xC354, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0xF1CA, 0xF3CF, 0xF3D5, 0xC44A, 0xF3D0, /* 0xD0 */
+ 0, 0xF3D3, 0xF3D7, 0xC44B, 0xF3D2, 0, 0xF3CA, 0, /* 0xD0 */
+ 0xF3C9, 0xF3D6, 0xF3CD, 0, 0xF3CB, 0xF3D4, 0xF3CC, 0xC449, /* 0xE0 */
+ 0xC448, 0, 0xF3C7, 0xF3C8, 0xF3D1, 0, 0, 0, /* 0xE0 */
+ 0xF3CE, 0, 0, 0, 0, 0, 0, 0xF56C, /* 0xF0 */
+ 0xF56F, 0, 0, 0, 0, 0xC356 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_9C[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF56D, 0xF573, 0xF571, /* 0x00 */
+ 0xF56B, 0xF576, 0, 0xF56A, 0, 0xC4CF, 0xF572, 0, /* 0x00 */
+ 0, 0, 0xF56E, 0xC4CE, 0xF575, 0, 0, 0xF574, /* 0x10 */
+ 0, 0, 0, 0, 0xF6AB, 0xF6AA, 0, 0, /* 0x10 */
+ 0, 0xF6B1, 0, 0xF6AD, 0xF6B0, 0xC560, 0, 0, /* 0x20 */
+ 0xF6AE, 0xF6AF, 0, 0xF6A9, 0xF6AC, 0xC55F, 0, 0, /* 0x20 */
+ 0, 0xC5BF, 0xF7B4, 0xF7AF, 0xF7B3, 0, 0xF7B6, 0xF7B2, /* 0x30 */
+ 0, 0xF7AE, 0, 0xC5C1, 0xF7B1, 0xF7B5, 0xC5C0, 0xF7AC, /* 0x30 */
+ 0xF570, 0xF7B0, 0, 0, 0xF7AD, 0, 0xF7AA, 0, /* 0x40 */
+ 0xF7AB, 0xC5BE, 0xF85A, 0xF85C, 0xF85F, 0xF85B, 0xF860, 0, /* 0x40 */
+ 0xF859, 0, 0xF857, 0, 0xC5EB, 0xF85D, 0xC5ED, 0xC5EC, /* 0x50 */
+ 0xF858, 0xF85E, 0, 0, 0, 0, 0xF8DA, 0xC64D, /* 0x50 */
+ 0xF8DB, 0, 0xF8D9, 0xF8D6, 0, 0, 0xF8D8, 0xF8D7, /* 0x60 */
+ 0xF95A, 0, 0, 0, 0, 0xF95C, 0xF95B, 0, /* 0x60 */
+ 0, 0xF979, 0, 0xF978, 0xF977, 0xF97A, 0, 0xC673, /* 0x70 */
+ 0xC674, 0xF9CA, 0xF9CE, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0xB3BE, 0xDCAF, 0xE0ED, /* 0xE0 */
+ 0, 0xB9A7, 0xE0EB, 0, 0, 0xE0EC, 0, 0, /* 0xE0 */
+ 0, 0xE4E2, 0xE4E3, 0xBBF1, 0xBBEF, 0xE4E4, 0xBBF0, 0xE8E8, /* 0xF0 */
+ 0, 0xE8EB, 0xE8E5, 0xE8EC, 0xE8E4, 0xE8E6, 0, 0xE8E7 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_9D[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xE8EA, 0, 0, 0xBEA1, 0xE8EF, 0xE8EE, 0xBE7D, 0xE8E9, /* 0x00 */
+ 0xE8ED, 0xBE7E, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0xECAC, 0, 0xC06F, 0, 0xECA7, 0xC06B, 0, 0xECA4, /* 0x10 */
+ 0xECAA, 0xECAD, 0, 0xC070, 0, 0xECA9, 0xECA6, 0xECAE, /* 0x10 */
+ 0xECA5, 0, 0xECAB, 0xC06C, 0, 0xECA3, 0xC06D, 0, /* 0x20 */
+ 0xC06E, 0xECA8, 0, 0, 0, 0xEFA9, 0xEF7A, 0xEF7B, /* 0x20 */
+ 0xEF7E, 0xEF7C, 0, 0xEF76, 0, 0, 0xEF79, 0xEFA5, /* 0x30 */
+ 0xEF7D, 0, 0, 0xC245, 0, 0xEFA7, 0xEFA4, 0xC246, /* 0x30 */
+ 0xEFA6, 0xEF77, 0xEFA2, 0xEFA3, 0, 0xEFA1, 0, 0, /* 0x40 */
+ 0, 0, 0xF1D2, 0xF1D4, 0xF1D7, 0, 0, 0xF1D1, /* 0x40 */
+ 0, 0xC359, 0xF1D9, 0xF1D0, 0xF1DA, 0, 0xF1D6, 0xF1D8, /* 0x50 */
+ 0xF1DC, 0xF1D5, 0xF1DD, 0xF1D3, 0xF1CF, 0xC35A, 0, 0xF1DB, /* 0x50 */
+ 0xC35B, 0xC44D, 0, 0, 0, 0, 0, 0xEF78, /* 0x60 */
+ 0xF3F1, 0xF3E8, 0xC44F, 0xF3E4, 0xC450, 0, 0, 0xF3ED, /* 0x60 */
+ 0xF3E7, 0xF3DD, 0xC44E, 0xF3EA, 0xF3E5, 0xF3E6, 0, 0xF3D8, /* 0x70 */
+ 0xF3DF, 0xF3EE, 0, 0xF3EB, 0, 0xF3E3, 0, 0xF3EF, /* 0x70 */
+ 0xF3DE, 0xF3D9, 0xF3EC, 0, 0xF3DB, 0xF3E9, 0xF3E0, 0xF3F0, /* 0x80 */
+ 0xF3DC, 0xC44C, 0xF3DA, 0xF3E1, 0xF3E2, 0, 0, 0, /* 0x80 */
+ 0xF57D, 0, 0xF57B, 0, 0xF5A2, 0, 0xF5AE, 0xF5A5, /* 0x90 */
+ 0xF57C, 0xF578, 0xF5A7, 0xF57E, 0xF5A3, 0xF57A, 0xF5AA, 0xF577, /* 0x90 */
+ 0xF5A1, 0xF5A6, 0xF5A8, 0xF5AB, 0xF579, 0, 0xF5AF, 0xF5B0, /* 0xA0 */
+ 0xF5A9, 0xF5AD, 0xF5A4, 0, 0xF6C1, 0xF6C4, 0, 0xC561, /* 0xA0 */
+ 0, 0xF6C3, 0xF6C8, 0xF6C6, 0xC562, 0xF6BD, 0xF6B3, 0xF6B2, /* 0xB0 */
+ 0xC564, 0xF6BF, 0xF6C0, 0xF6BC, 0xF6B4, 0, 0xF6B9, 0xF5AC, /* 0xB0 */
+ 0, 0xF6B5, 0xC563, 0xF6BB, 0, 0xF6BA, 0, 0xF6B6, /* 0xC0 */
+ 0xF6C2, 0, 0xF6B7, 0xF7BB, 0xF6C5, 0xF6C7, 0xF6BE, 0xF6B8, /* 0xC0 */
+ 0xF7BC, 0xF7BE, 0xF7B8, 0xC5C2, 0, 0xF7C5, 0xF7C3, 0xC5C3, /* 0xD0 */
+ 0xF7C2, 0xF7C1, 0xF7BA, 0xF7B7, 0xF7BD, 0xF7C6, 0xF7B9, 0xF7BF, /* 0xD0 */
+ 0, 0xF869, 0xF86E, 0xF864, 0xF867, 0xC5EE, 0xF86B, 0, /* 0xE0 */
+ 0xF872, 0xF7C0, 0, 0xF865, 0xF86F, 0xF873, 0xF86A, 0xF863, /* 0xE0 */
+ 0xF86D, 0, 0xF86C, 0xF871, 0xF870, 0xF7C4, 0xF868, 0xF862, /* 0xF0 */
+ 0xF866, 0xC64E, 0xC64F, 0xF861, 0, 0xF8E6, 0xF8DD, 0xF8E5 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_9E[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF8E2, 0xF8E3, 0xF8DC, 0xF8DF, 0xF8E7, 0xF8E1, 0xF8E0, 0xF8DE, /* 0x00 */
+ 0, 0xF8E4, 0, 0xF95D, 0, 0xF95E, 0, 0xF960, /* 0x00 */
+ 0xF95F, 0xF962, 0xF961, 0xF97C, 0xF97B, 0xF9B7, 0, 0xF9B8, /* 0x10 */
+ 0, 0xF9C5, 0xC678, 0xC67C, 0, 0xF9CF, 0xC67D, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0xB3BF, 0, 0, /* 0x70 */
+ 0, 0xC4D0, 0xF6C9, 0, 0xC650, 0xC651, 0, 0xB3C0, /* 0x70 */
+ 0xE0EE, 0, 0xB9A8, 0xE8F0, 0, 0, 0xECB0, 0xECB1, /* 0x80 */
+ 0xECAF, 0xEFAB, 0xEFAA, 0xC247, 0xF1DF, 0xEFAC, 0xF1DE, 0, /* 0x80 */
+ 0, 0xF3F3, 0xC451, 0xC453, 0xF3F2, 0, 0, 0xC452, /* 0x90 */
+ 0, 0xF5B1, 0xF5B3, 0xF5B2, 0xF6CA, 0xC565, 0, 0xC5EF, /* 0x90 */
+ 0xF8E8, 0xF963, 0, 0, 0xF9D2, 0xB3C1, 0, 0xE4E5, /* 0xA0 */
+ 0, 0xBEA2, 0, 0, 0, 0xECB3, 0xECB2, 0, /* 0xA0 */
+ 0xEFAD, 0, 0, 0, 0xC454, 0xC4D1, 0xF7C7, 0xF9CB, /* 0xB0 */
+ 0, 0, 0, 0xB3C2, 0xBBF2, 0, 0xBEA3, 0, /* 0xB0 */
+ 0xF3F4, 0, 0xF874, 0xB6C0, 0, 0, 0, 0, /* 0xC0 */
+ 0xEFAE, 0, 0, 0, 0xC664, 0xB6C1, 0xBEA4, 0xC248, /* 0xC0 */
+ 0xF875, 0xB6C2, 0, 0xE8F1, 0xC072, 0xECB4, 0xECB5, 0, /* 0xD0 */
+ 0xC071, 0, 0xEFAF, 0xC24C, 0xC24A, 0xC24B, 0xC249, 0xF1E0, /* 0xD0 */
+ 0xC35C, 0, 0, 0, 0xF5B5, 0xF5B4, 0xF5B7, 0xF5B6, /* 0xE0 */
+ 0xC4D2, 0, 0, 0xF6CB, 0, 0xF6CD, 0xF6CC, 0xC566, /* 0xE0 */
+ 0xF7C8, 0, 0xF876, 0xF877, 0xC5F0, 0xF964, 0xF97D, 0xC675, /* 0xF0 */
+ 0, 0xDCB0, 0xECB6, 0xEFB0, 0xF3F5, 0xE0EF, 0, 0xEFB1 /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_9F[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xF1E2, 0xF1E1, 0, 0, 0, 0, 0xF878, 0xC652, /* 0x00 */
+ 0, 0xF965, 0xF97E, 0, 0, 0, 0xB9A9, 0xE8F2, /* 0x00 */
+ 0xE8F3, 0, 0xECB7, 0xB9AA, 0, 0xC35D, 0xF1E3, 0, /* 0x10 */
+ 0xF6CF, 0xC567, 0xF6D0, 0xF6CE, 0xF879, 0, 0xF8E9, 0, /* 0x10 */
+ 0xB9AB, 0, 0xEFB4, 0xEFB3, 0xEFB2, 0xF1E4, 0, 0, /* 0x20 */
+ 0xF1E8, 0xF1E7, 0xF1E6, 0xF1E5, 0xC35E, 0xF3F6, 0xF5B9, 0xC4D3, /* 0x20 */
+ 0xF5B8, 0xF6D1, 0xF7CB, 0xF7CA, 0xC5C4, 0xF7C9, 0xF87C, 0xF87B, /* 0x30 */
+ 0xF87A, 0, 0, 0xBBF3, 0, 0xECB8, 0xC24D, 0, /* 0x30 */
+ 0xF3F7, 0xF3F8, 0xF7CC, 0xF87D, 0, 0, 0xF8EA, 0xF966, /* 0x40 */
+ 0xF9B9, 0xF9D4, 0xBBF4, 0xC24E, 0xF1E9, 0xF3F9, 0xF6D2, 0xF87E, /* 0x40 */
+ 0, 0, 0xBEA6, 0, 0xEFB5, 0xF1EA, 0xF3FA, 0xF3FB, /* 0x50 */
+ 0xF3FC, 0xF5BE, 0, 0xF5BA, 0xC568, 0xF5BD, 0xF5BC, 0xC4D4, /* 0x50 */
+ 0xF5BB, 0xC4D6, 0, 0xC4D5, 0xF6D4, 0xF6D3, 0xC569, 0xC56A, /* 0x60 */
+ 0, 0, 0xC5C6, 0xF7CD, 0xC5C5, 0, 0xF8A3, 0xF8A4, /* 0x60 */
+ 0xF8A2, 0xF8A1, 0xC654, 0, 0xF8EB, 0xF8EC, 0xF8ED, 0xC653, /* 0x70 */
+ 0xF967, 0xF96A, 0xF969, 0xF968, 0, 0, 0xF9D3, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0xC073, 0, 0, /* 0x80 */
+ 0xC365, 0xF5BF, 0xF6D5, 0, 0xC5C7, 0xF7CE, 0, 0, /* 0x90 */
+ 0xF9D5, 0, 0, 0, 0xC074, 0, 0, 0, /* 0x90 */
+ 0xEFB6, 0, 0xF7CF, 0, 0xF9A1 /* 0xA0 */
+ /* 0xA0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_APPLECHINTRAD_F8[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x0081, 0x0082 /* 0x80 */
+ /* 0x80 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_FA[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ /* 0x00 */
+ 0xC94A, 0xDDFC /* 0x00 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_FE[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA14A, 0xA157, 0, 0xA159, 0xA15B, 0xA15F, 0xA160, 0xA163, /* 0x30 */
+ 0xA164, 0xA167, 0xA168, 0xA16B, 0xA16C, 0xA16F, 0xA170, 0xA173, /* 0x30 */
+ 0xA174, 0xA177, 0xA178, 0xA17B, 0xA17C, 0, 0, 0, /* 0x40 */
+ 0, 0xA1C6, 0xA1C7, 0xA1CA, 0xA1CB, 0xA1C8, 0xA1C9, 0xA15C, /* 0x40 */
+ 0xA14D, 0xA14E, 0xA14F, 0, 0xA151, 0xA152, 0xA153, 0xA154, /* 0x50 */
+ 0, 0xA17D, 0xA17E, 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A4, 0xA1CC, /* 0x50 */
+ 0xA1CD, 0xA1CE, 0xA1DE, 0xA1DF, 0xA1E0, 0xA1E1, 0xA1E2, 0, /* 0x60 */
+ 0xA242, 0xA24C, 0xA24D, 0xA24E /* 0x60 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+sal_uInt16 const aImplUniToDBCSTab_BIG5_FF[] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0xA149, 0, 0xA1AD, 0xA243, 0xA248, 0xA1AE, 0, /* 0x00 */
+ 0xA15D, 0xA15E, 0xA1AF, 0xA1CF, 0xA141, 0xA1D0, 0xA144, 0xA1FE, /* 0x00 */
+ 0xA2AF, 0xA2B0, 0xA2B1, 0xA2B2, 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, /* 0x10 */
+ 0xA2B7, 0xA2B8, 0xA147, 0xA146, 0xA1D5, 0xA1D7, 0xA1D6, 0xA148, /* 0x10 */
+ 0xA249, 0xA2CF, 0xA2D0, 0xA2D1, 0xA2D2, 0xA2D3, 0xA2D4, 0xA2D5, /* 0x20 */
+ 0xA2D6, 0xA2D7, 0xA2D8, 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, /* 0x20 */
+ 0xA2DE, 0xA2DF, 0xA2E0, 0xA2E1, 0xA2E2, 0xA2E3, 0xA2E4, 0xA2E5, /* 0x30 */
+ 0xA2E6, 0xA2E7, 0xA2E8, 0, 0xA240, 0, 0, 0xA1C4, /* 0x30 */
+ 0, 0xA2E9, 0xA2EA, 0xA2EB, 0xA2EC, 0xA2ED, 0xA2EE, 0xA2EF, /* 0x40 */
+ 0xA2F0, 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, /* 0x40 */
+ 0xA2F8, 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0xA2FD, 0xA2FE, 0xA340, /* 0x50 */
+ 0xA341, 0xA342, 0xA343, 0xA161, 0xA155, 0xA162, 0xA1E3, 0, /* 0x50 */
+ 0, 0, 0, 0, 0xA14E, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */
+ 0xA246, 0xA247, 0, 0xA1C3, 0, 0xA244, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */
+ 0, 0, 0, 0, 0, 0xA1C5 /* 0xF0 */
+};
diff --git a/sal/textenc/tcvttcn6.tab b/sal/textenc/tcvttcn6.tab
new file mode 100644
index 000000000..7dedf3f4d
--- /dev/null
+++ b/sal/textenc/tcvttcn6.tab
@@ -0,0 +1,1728 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+/* This file contain the information tables for all */
+/* chinese traditional (Taiwan/HongKong) charsets: */
+/* BIG5, MS950, APPLE_CHINTRAD */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aBIG5UniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0, 1, 0, nullptr }, /* 0x80 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x81 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x82 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xA0 */ /* We convert this as double byte */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A1 }, /* 0xA1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A2 }, /* 0xA2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A3 }, /* 0xA3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A4 }, /* 0xA4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A5 }, /* 0xA5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A6 }, /* 0xA6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A7 }, /* 0xA7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A8 }, /* 0xA8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A9 }, /* 0xA9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AA }, /* 0xAA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AB }, /* 0xAB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AC }, /* 0xAC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AD }, /* 0xAD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AE }, /* 0xAE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AF }, /* 0xAF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B0 }, /* 0xB0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B1 }, /* 0xB1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B2 }, /* 0xB2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B3 }, /* 0xB3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B4 }, /* 0xB4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B5 }, /* 0xB5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B6 }, /* 0xB6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B7 }, /* 0xB7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B8 }, /* 0xB8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B9 }, /* 0xB9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BA }, /* 0xBA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BB }, /* 0xBB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BC }, /* 0xBC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BD }, /* 0xBD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BE }, /* 0xBE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BF }, /* 0xBF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C0 }, /* 0xC0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C1 }, /* 0xC1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C2 }, /* 0xC2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C3 }, /* 0xC3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C4 }, /* 0xC4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C5 }, /* 0xC5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5ONLY_C6 }, /* 0xC6 */
+ { 0, 0x40, 0xFC, aImplDBCSToUniTab_BIG5ONLY_C7 }, /* 0xC7 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC8 */ /* We convert this as double byte */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C9 }, /* 0xC9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CA }, /* 0xCA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CB }, /* 0xCB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CC }, /* 0xCC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CD }, /* 0xCD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CE }, /* 0xCE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CF }, /* 0xCF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D0 }, /* 0xD0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D1 }, /* 0xD1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D2 }, /* 0xD2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D3 }, /* 0xD3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D4 }, /* 0xD4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D5 }, /* 0xD5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D6 }, /* 0xD6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D7 }, /* 0xD7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D8 }, /* 0xD8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D9 }, /* 0xD9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DA }, /* 0xDA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DB }, /* 0xDB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DC }, /* 0xDC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DD }, /* 0xDD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DE }, /* 0xDE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DF }, /* 0xDF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E0 }, /* 0xE0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E1 }, /* 0xE1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E2 }, /* 0xE2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E3 }, /* 0xE3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E4 }, /* 0xE4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E5 }, /* 0xE5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E6 }, /* 0xE6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E7 }, /* 0xE7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E8 }, /* 0xE8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E9 }, /* 0xE9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EA }, /* 0xEA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EB }, /* 0xEB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EC }, /* 0xEC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_ED }, /* 0xED */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EE }, /* 0xEE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EF }, /* 0xEF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F0 }, /* 0xF0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F1 }, /* 0xF1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F2 }, /* 0xF2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F3 }, /* 0xF3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F4 }, /* 0xF4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F5 }, /* 0xF5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F6 }, /* 0xF6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F7 }, /* 0xF7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F8 }, /* 0xF8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F9 }, /* 0xF9 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFD */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ /* We convert this as double byte */
+ { 0, 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aBIG5DBCSHighTab[256] =
+{
+ { 0x00, 0xF7, aImplUniToDBCSTab_BIG5_00 }, /* 0x00 */
+ { 1, 0, nullptr }, /* 0x01 */
+ { 0xC7, 0xD9, aImplUniToDBCSTab_BIG5_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_BIG5_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_BIG5_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x13, 0xAC, aImplUniToDBCSTab_BIG5_20 }, /* 0x20 */
+ { 0x03, 0x99, aImplUniToDBCSTab_BIG5_21 }, /* 0x21 */
+ { 0x15, 0xEF, aImplUniToDBCSTab_BIG5_22 }, /* 0x22 */
+ { 1, 0, nullptr }, /* 0x23 */
+ { 0x60, 0x7D, aImplUniToDBCSTab_BIG5_24 }, /* 0x24 */
+ { 0x00, 0xE5, aImplUniToDBCSTab_BIG5_25 }, /* 0x25 */
+ { 0x05, 0x42, aImplUniToDBCSTab_BIG5_26 }, /* 0x25 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_30 }, /* 0x30 */
+ { 0x05, 0x29, aImplUniToDBCSTab_BIG5_31 }, /* 0x31 */
+ { 0xA3, 0xA3, aImplUniToDBCSTab_BIG5_32 }, /* 0x32 */
+ { 0x8E, 0xD5, aImplUniToDBCSTab_BIG5_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_4E }, /* 0x4E */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_4F }, /* 0x4F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_50 }, /* 0x50 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_52 }, /* 0x52 */
+ { 0x05, 0xFC, aImplUniToDBCSTab_BIG5_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_54 }, /* 0x54 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_55 }, /* 0x55 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_56 }, /* 0x56 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_57 }, /* 0x57 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_58 }, /* 0x58 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_BIG5_59 }, /* 0x59 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5A }, /* 0x5A */
+ { 0x01, 0xFA, aImplUniToDBCSTab_BIG5_5B }, /* 0x5B */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5C }, /* 0x5C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5D }, /* 0x5D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5F }, /* 0x5F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_62 }, /* 0x62 */
+ { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_63 }, /* 0x63 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_BIG5_64 }, /* 0x64 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_67 }, /* 0x67 */
+ { 0x12, 0xFD, aImplUniToDBCSTab_BIG5_68 }, /* 0x68 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_BIG5_69 }, /* 0x69 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_BIG5_6A }, /* 0x6A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6B }, /* 0x6B */
+ { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_6C }, /* 0x6C */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_6D }, /* 0x6D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6E }, /* 0x6E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6F }, /* 0x6F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_70 }, /* 0x70 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_71 }, /* 0x71 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_72 }, /* 0x72 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_73 }, /* 0x73 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_74 }, /* 0x74 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_75 }, /* 0x75 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_76 }, /* 0x76 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_77 }, /* 0x77 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_BIG5_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7A }, /* 0x7A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7B }, /* 0x7B */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_BIG5_7D }, /* 0x7D */
+ { 0x03, 0x9C, aImplUniToDBCSTab_BIG5_7E }, /* 0x7E */
+ { 0x36, 0xFF, aImplUniToDBCSTab_BIG5_7F }, /* 0x7F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_80 }, /* 0x80 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_81 }, /* 0x81 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_82 }, /* 0x82 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_83 }, /* 0x83 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_84 }, /* 0x84 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_85 }, /* 0x85 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_86 }, /* 0x86 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_87 }, /* 0x87 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_88 }, /* 0x88 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_89 }, /* 0x89 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8A }, /* 0x8A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8B }, /* 0x8B */
+ { 0x37, 0xFE, aImplUniToDBCSTab_BIG5_8C }, /* 0x8C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8D }, /* 0x8D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8E }, /* 0x8E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8F }, /* 0x8F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_90 }, /* 0x90 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_91 }, /* 0x91 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_92 }, /* 0x92 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_93 }, /* 0x93 */
+ { 0x00, 0x83, aImplUniToDBCSTab_BIG5_94 }, /* 0x94 */
+ { 0x77, 0xE5, aImplUniToDBCSTab_BIG5_95 }, /* 0x95 */
+ { 0x1C, 0xFF, aImplUniToDBCSTab_BIG5_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_97 }, /* 0x97 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_98 }, /* 0x98 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_99 }, /* 0x99 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_BIG5_9A }, /* 0x9A */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_9B }, /* 0x9B */
+ { 0x05, 0xFF, aImplUniToDBCSTab_BIG5_9C }, /* 0x9C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9D }, /* 0x9D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9E }, /* 0x9E */
+ { 0x00, 0xA4, aImplUniToDBCSTab_BIG5_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 1, 0, nullptr }, /* 0xF9 */
+ { 0x0C, 0x0D, aImplUniToDBCSTab_BIG5_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x30, 0x6B, aImplUniToDBCSTab_BIG5_FE }, /* 0xFE */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+/* FA40-FEFE --> E000-E310 */
+/* 8E40-A0FE --> E311-EEB7 */
+/* 8140-8DFE --> EEB8-F6B0 */
+/* C6A1-C6FE --> F6B1-F70E */
+/* C740-C8FE --> F70F-F848 */
+
+#define DBCS_EUDC_MS950_COUNT 5
+ImplDBCSEUDCData const aImplMS950DBCSEUDCTab[DBCS_EUDC_MS950_COUNT] =
+{
+ /* EUDC-Range */
+ /* Lead: FA-FE */
+ /* Trail: 40-7E, A1-FE */
+ { 0xFA, 0xFE, 0x40, 0x7E, 0xA1, 0xFE, 0, 0, 2, 0x9D, 0xE000, 0xE310 },
+ /* Lead: 8E-A0 */
+ /* Trail: 40-7E, A1-FE */
+ { 0x8E, 0xA0, 0x40, 0x7E, 0xA1, 0xFE, 0, 0, 2, 0x9D, 0xE311, 0xEEB7 },
+ /* Lead: 81-8D */
+ /* Trail: 40-7E, A1-FE */
+ { 0x81, 0x8D, 0x40, 0x7E, 0xA1, 0xFE, 0, 0, 2, 0x9D, 0xEEB8, 0xF6B0 },
+ /* Lead: C6-C6 */
+ /* Trail: A1-FE */
+ { 0xC6, 0xC6, 0xA1, 0xFE, 0, 0, 0, 0, 1, 0x5E, 0xF6B1, 0xF70E },
+ /* Lead: C7-C8 */
+ /* Trail: 40-7E, A1-FE */
+ { 0xC7, 0xC8, 0x40, 0x7E, 0xA1, 0xFE, 0, 0, 2, 0x9D, 0xF70F, 0xF848 }
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplBIG5DBCSCvtData =
+{
+ aBIG5UniLeadTab,
+ aBIG5DBCSHighTab,
+ aImplMS950DBCSEUDCTab,
+ DBCS_EUDC_MS950_COUNT,
+ 0x00, 0xFF,
+ 0x40, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplBIG5TextEncodingData
+ = { { &aImplBIG5DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-tw",
+ "big5",
+ 1,
+ 2,
+ 2,
+ 136,
+ RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_CHINESE_TRADITIONAL, pc code page 950, mac encoding 2 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aMS950UniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0, 1, 0, nullptr }, /* 0x80 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x81 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x82 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xA0 */ /* We convert this as double byte */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A1 }, /* 0xA1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A2 }, /* 0xA2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A3 }, /* 0xA3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A4 }, /* 0xA4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A5 }, /* 0xA5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A6 }, /* 0xA6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A7 }, /* 0xA7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A8 }, /* 0xA8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A9 }, /* 0xA9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AA }, /* 0xAA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AB }, /* 0xAB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AC }, /* 0xAC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AD }, /* 0xAD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AE }, /* 0xAE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AF }, /* 0xAF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B0 }, /* 0xB0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B1 }, /* 0xB1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B2 }, /* 0xB2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B3 }, /* 0xB3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B4 }, /* 0xB4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B5 }, /* 0xB5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B6 }, /* 0xB6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B7 }, /* 0xB7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B8 }, /* 0xB8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B9 }, /* 0xB9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BA }, /* 0xBA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BB }, /* 0xBB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BC }, /* 0xBC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BD }, /* 0xBD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BE }, /* 0xBE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BF }, /* 0xBF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C0 }, /* 0xC0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C1 }, /* 0xC1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C2 }, /* 0xC2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C3 }, /* 0xC3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C4 }, /* 0xC4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C5 }, /* 0xC5 */
+ { 0, 0x40, 0x7E, aImplDBCSToUniTab_BIG5_C6 }, /* 0xC6 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC7 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC8 */ /* We convert this as double byte */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C9 }, /* 0xC9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CA }, /* 0xCA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CB }, /* 0xCB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CC }, /* 0xCC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CD }, /* 0xCD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CE }, /* 0xCE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CF }, /* 0xCF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D0 }, /* 0xD0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D1 }, /* 0xD1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D2 }, /* 0xD2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D3 }, /* 0xD3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D4 }, /* 0xD4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D5 }, /* 0xD5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D6 }, /* 0xD6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D7 }, /* 0xD7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D8 }, /* 0xD8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D9 }, /* 0xD9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DA }, /* 0xDA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DB }, /* 0xDB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DC }, /* 0xDC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DD }, /* 0xDD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DE }, /* 0xDE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DF }, /* 0xDF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E0 }, /* 0xE0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E1 }, /* 0xE1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E2 }, /* 0xE2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E3 }, /* 0xE3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E4 }, /* 0xE4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E5 }, /* 0xE5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E6 }, /* 0xE6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E7 }, /* 0xE7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E8 }, /* 0xE8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E9 }, /* 0xE9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EA }, /* 0xEA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EB }, /* 0xEB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EC }, /* 0xEC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_ED }, /* 0xED */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EE }, /* 0xEE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EF }, /* 0xEF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F0 }, /* 0xF0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F1 }, /* 0xF1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F2 }, /* 0xF2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F3 }, /* 0xF3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F4 }, /* 0xF4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F5 }, /* 0xF5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F6 }, /* 0xF6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F7 }, /* 0xF7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F8 }, /* 0xF8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F9 }, /* 0xF9 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFD */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ /* We convert this as double byte */
+ { 0, 1, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aMS950DBCSHighTab[256] =
+{
+ { 0x00, 0xF7, aImplUniToDBCSTab_BIG5_00 }, /* 0x00 */
+ { 1, 0, nullptr }, /* 0x01 */
+ { 0xC7, 0xD9, aImplUniToDBCSTab_BIG5_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_BIG5_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_BIG5_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x13, 0xAC, aImplUniToDBCSTab_BIG5_20 }, /* 0x20 */
+ { 0x03, 0x99, aImplUniToDBCSTab_BIG5_21 }, /* 0x21 */
+ { 0x15, 0xEF, aImplUniToDBCSTab_BIG5_22 }, /* 0x22 */
+ { 1, 0, nullptr }, /* 0x23 */
+ { 0x60, 0x7D, aImplUniToDBCSTab_BIG5_24 }, /* 0x24 */
+ { 0x00, 0xE5, aImplUniToDBCSTab_BIG5_25 }, /* 0x25 */
+ { 0x05, 0x42, aImplUniToDBCSTab_BIG5_26 }, /* 0x25 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_30 }, /* 0x30 */
+ { 0x05, 0x29, aImplUniToDBCSTab_BIG5_31 }, /* 0x31 */
+ { 0xA3, 0xA3, aImplUniToDBCSTab_BIG5_32 }, /* 0x32 */
+ { 0x8E, 0xD5, aImplUniToDBCSTab_BIG5_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_4E }, /* 0x4E */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_4F }, /* 0x4F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_50 }, /* 0x50 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_52 }, /* 0x52 */
+ { 0x05, 0xFC, aImplUniToDBCSTab_BIG5_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_54 }, /* 0x54 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_55 }, /* 0x55 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_56 }, /* 0x56 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_57 }, /* 0x57 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_58 }, /* 0x58 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_BIG5_59 }, /* 0x59 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5A }, /* 0x5A */
+ { 0x01, 0xFA, aImplUniToDBCSTab_BIG5_5B }, /* 0x5B */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5C }, /* 0x5C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5D }, /* 0x5D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5F }, /* 0x5F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_62 }, /* 0x62 */
+ { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_63 }, /* 0x63 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_BIG5_64 }, /* 0x64 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_67 }, /* 0x67 */
+ { 0x12, 0xFD, aImplUniToDBCSTab_BIG5_68 }, /* 0x68 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_BIG5_69 }, /* 0x69 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_BIG5_6A }, /* 0x6A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6B }, /* 0x6B */
+ { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_6C }, /* 0x6C */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_6D }, /* 0x6D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6E }, /* 0x6E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6F }, /* 0x6F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_70 }, /* 0x70 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_71 }, /* 0x71 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_72 }, /* 0x72 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_73 }, /* 0x73 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_74 }, /* 0x74 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_75 }, /* 0x75 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_76 }, /* 0x76 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_77 }, /* 0x77 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_BIG5_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7A }, /* 0x7A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7B }, /* 0x7B */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_BIG5_7D }, /* 0x7D */
+ { 0x03, 0x9C, aImplUniToDBCSTab_BIG5_7E }, /* 0x7E */
+ { 0x36, 0xFF, aImplUniToDBCSTab_BIG5_7F }, /* 0x7F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_80 }, /* 0x80 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_81 }, /* 0x81 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_82 }, /* 0x82 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_83 }, /* 0x83 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_84 }, /* 0x84 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_85 }, /* 0x85 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_86 }, /* 0x86 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_87 }, /* 0x87 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_88 }, /* 0x88 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_89 }, /* 0x89 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8A }, /* 0x8A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8B }, /* 0x8B */
+ { 0x37, 0xFE, aImplUniToDBCSTab_BIG5_8C }, /* 0x8C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8D }, /* 0x8D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8E }, /* 0x8E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8F }, /* 0x8F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_90 }, /* 0x90 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_91 }, /* 0x91 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_92 }, /* 0x92 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_93 }, /* 0x93 */
+ { 0x00, 0x83, aImplUniToDBCSTab_BIG5_94 }, /* 0x94 */
+ { 0x77, 0xE5, aImplUniToDBCSTab_BIG5_95 }, /* 0x95 */
+ { 0x1C, 0xFF, aImplUniToDBCSTab_BIG5_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_97 }, /* 0x97 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_98 }, /* 0x98 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_99 }, /* 0x99 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_BIG5_9A }, /* 0x9A */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_9B }, /* 0x9B */
+ { 0x05, 0xFF, aImplUniToDBCSTab_BIG5_9C }, /* 0x9C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9D }, /* 0x9D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9E }, /* 0x9E */
+ { 0x00, 0xA4, aImplUniToDBCSTab_BIG5_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 1, 0, nullptr }, /* 0xF8 */
+ { 1, 0, nullptr }, /* 0xF9 */
+ { 0x0C, 0x0D, aImplUniToDBCSTab_BIG5_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x30, 0x6B, aImplUniToDBCSTab_BIG5_FE }, /* 0xFE */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplMS950DBCSCvtData =
+{
+ aMS950UniLeadTab,
+ aMS950DBCSHighTab,
+ aImplMS950DBCSEUDCTab,
+ DBCS_EUDC_MS950_COUNT,
+ 0x00, 0xFF,
+ 0x40, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS950TextEncodingData
+ = { { &aImplMS950DBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-tw",
+ "big5",
+ 1,
+ 2,
+ 2,
+ 136,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* WIN/DOS/OS2, SCRIPT_CHINESE_TRADITIONAL, pc code page 950, mac encoding
+ 2 */
+
+/* ======================================================================= */
+
+ImplDBCSToUniLeadTab const aAPPLECHINTRADUniLeadTab[256] =
+{
+ { 0x0000, 0, 0, nullptr }, /* 0x00 */
+ { 0x0001, 0, 0, nullptr }, /* 0x01 */
+ { 0x0002, 0, 0, nullptr }, /* 0x02 */
+ { 0x0003, 0, 0, nullptr }, /* 0x03 */
+ { 0x0004, 0, 0, nullptr }, /* 0x04 */
+ { 0x0005, 0, 0, nullptr }, /* 0x05 */
+ { 0x0006, 0, 0, nullptr }, /* 0x06 */
+ { 0x0007, 0, 0, nullptr }, /* 0x07 */
+ { 0x0008, 0, 0, nullptr }, /* 0x08 */
+ { 0x0009, 0, 0, nullptr }, /* 0x09 */
+ { 0x000A, 0, 0, nullptr }, /* 0x0A */
+ { 0x000B, 0, 0, nullptr }, /* 0x0B */
+ { 0x000C, 0, 0, nullptr }, /* 0x0C */
+ { 0x000D, 0, 0, nullptr }, /* 0x0D */
+ { 0x000E, 0, 0, nullptr }, /* 0x0E */
+ { 0x000F, 0, 0, nullptr }, /* 0x0F */
+ { 0x0010, 0, 0, nullptr }, /* 0x10 */
+ { 0x0011, 0, 0, nullptr }, /* 0x11 */
+ { 0x0012, 0, 0, nullptr }, /* 0x12 */
+ { 0x0013, 0, 0, nullptr }, /* 0x13 */
+ { 0x0014, 0, 0, nullptr }, /* 0x14 */
+ { 0x0015, 0, 0, nullptr }, /* 0x15 */
+ { 0x0016, 0, 0, nullptr }, /* 0x16 */
+ { 0x0017, 0, 0, nullptr }, /* 0x17 */
+ { 0x0018, 0, 0, nullptr }, /* 0x18 */
+ { 0x0019, 0, 0, nullptr }, /* 0x19 */
+ { 0x001A, 0, 0, nullptr }, /* 0x1A */
+ { 0x001B, 0, 0, nullptr }, /* 0x1B */
+ { 0x001C, 0, 0, nullptr }, /* 0x1C */
+ { 0x001D, 0, 0, nullptr }, /* 0x1D */
+ { 0x001E, 0, 0, nullptr }, /* 0x1E */
+ { 0x001F, 0, 0, nullptr }, /* 0x1F */
+ { 0x0020, 0, 0, nullptr }, /* 0x20 */
+ { 0x0021, 0, 0, nullptr }, /* 0x21 */
+ { 0x0022, 0, 0, nullptr }, /* 0x22 */
+ { 0x0023, 0, 0, nullptr }, /* 0x23 */
+ { 0x0024, 0, 0, nullptr }, /* 0x24 */
+ { 0x0025, 0, 0, nullptr }, /* 0x25 */
+ { 0x0026, 0, 0, nullptr }, /* 0x26 */
+ { 0x0027, 0, 0, nullptr }, /* 0x27 */
+ { 0x0028, 0, 0, nullptr }, /* 0x28 */
+ { 0x0029, 0, 0, nullptr }, /* 0x29 */
+ { 0x002A, 0, 0, nullptr }, /* 0x2A */
+ { 0x002B, 0, 0, nullptr }, /* 0x2B */
+ { 0x002C, 0, 0, nullptr }, /* 0x2C */
+ { 0x002D, 0, 0, nullptr }, /* 0x2D */
+ { 0x002E, 0, 0, nullptr }, /* 0x2E */
+ { 0x002F, 0, 0, nullptr }, /* 0x2F */
+ { 0x0030, 0, 0, nullptr }, /* 0x30 */
+ { 0x0031, 0, 0, nullptr }, /* 0x31 */
+ { 0x0032, 0, 0, nullptr }, /* 0x32 */
+ { 0x0033, 0, 0, nullptr }, /* 0x33 */
+ { 0x0034, 0, 0, nullptr }, /* 0x34 */
+ { 0x0035, 0, 0, nullptr }, /* 0x35 */
+ { 0x0036, 0, 0, nullptr }, /* 0x36 */
+ { 0x0037, 0, 0, nullptr }, /* 0x37 */
+ { 0x0038, 0, 0, nullptr }, /* 0x38 */
+ { 0x0039, 0, 0, nullptr }, /* 0x39 */
+ { 0x003A, 0, 0, nullptr }, /* 0x3A */
+ { 0x003B, 0, 0, nullptr }, /* 0x3B */
+ { 0x003C, 0, 0, nullptr }, /* 0x3C */
+ { 0x003D, 0, 0, nullptr }, /* 0x3D */
+ { 0x003E, 0, 0, nullptr }, /* 0x3E */
+ { 0x003F, 0, 0, nullptr }, /* 0x3F */
+ { 0x0040, 0, 0, nullptr }, /* 0x40 */
+ { 0x0041, 0, 0, nullptr }, /* 0x41 */
+ { 0x0042, 0, 0, nullptr }, /* 0x42 */
+ { 0x0043, 0, 0, nullptr }, /* 0x43 */
+ { 0x0044, 0, 0, nullptr }, /* 0x44 */
+ { 0x0045, 0, 0, nullptr }, /* 0x45 */
+ { 0x0046, 0, 0, nullptr }, /* 0x46 */
+ { 0x0047, 0, 0, nullptr }, /* 0x47 */
+ { 0x0048, 0, 0, nullptr }, /* 0x48 */
+ { 0x0049, 0, 0, nullptr }, /* 0x49 */
+ { 0x004A, 0, 0, nullptr }, /* 0x4A */
+ { 0x004B, 0, 0, nullptr }, /* 0x4B */
+ { 0x004C, 0, 0, nullptr }, /* 0x4C */
+ { 0x004D, 0, 0, nullptr }, /* 0x4D */
+ { 0x004E, 0, 0, nullptr }, /* 0x4E */
+ { 0x004F, 0, 0, nullptr }, /* 0x4F */
+ { 0x0050, 0, 0, nullptr }, /* 0x50 */
+ { 0x0051, 0, 0, nullptr }, /* 0x51 */
+ { 0x0052, 0, 0, nullptr }, /* 0x52 */
+ { 0x0053, 0, 0, nullptr }, /* 0x53 */
+ { 0x0054, 0, 0, nullptr }, /* 0x54 */
+ { 0x0055, 0, 0, nullptr }, /* 0x55 */
+ { 0x0056, 0, 0, nullptr }, /* 0x56 */
+ { 0x0057, 0, 0, nullptr }, /* 0x57 */
+ { 0x0058, 0, 0, nullptr }, /* 0x58 */
+ { 0x0059, 0, 0, nullptr }, /* 0x59 */
+ { 0x005A, 0, 0, nullptr }, /* 0x5A */
+ { 0x005B, 0, 0, nullptr }, /* 0x5B */
+ { 0x005C, 0, 0, nullptr }, /* 0x5C */
+ { 0x005D, 0, 0, nullptr }, /* 0x5D */
+ { 0x005E, 0, 0, nullptr }, /* 0x5E */
+ { 0x005F, 0, 0, nullptr }, /* 0x5F */
+ { 0x0060, 0, 0, nullptr }, /* 0x60 */
+ { 0x0061, 0, 0, nullptr }, /* 0x61 */
+ { 0x0062, 0, 0, nullptr }, /* 0x62 */
+ { 0x0063, 0, 0, nullptr }, /* 0x63 */
+ { 0x0064, 0, 0, nullptr }, /* 0x64 */
+ { 0x0065, 0, 0, nullptr }, /* 0x65 */
+ { 0x0066, 0, 0, nullptr }, /* 0x66 */
+ { 0x0067, 0, 0, nullptr }, /* 0x67 */
+ { 0x0068, 0, 0, nullptr }, /* 0x68 */
+ { 0x0069, 0, 0, nullptr }, /* 0x69 */
+ { 0x006A, 0, 0, nullptr }, /* 0x6A */
+ { 0x006B, 0, 0, nullptr }, /* 0x6B */
+ { 0x006C, 0, 0, nullptr }, /* 0x6C */
+ { 0x006D, 0, 0, nullptr }, /* 0x6D */
+ { 0x006E, 0, 0, nullptr }, /* 0x6E */
+ { 0x006F, 0, 0, nullptr }, /* 0x6F */
+ { 0x0070, 0, 0, nullptr }, /* 0x70 */
+ { 0x0071, 0, 0, nullptr }, /* 0x71 */
+ { 0x0072, 0, 0, nullptr }, /* 0x72 */
+ { 0x0073, 0, 0, nullptr }, /* 0x73 */
+ { 0x0074, 0, 0, nullptr }, /* 0x74 */
+ { 0x0075, 0, 0, nullptr }, /* 0x75 */
+ { 0x0076, 0, 0, nullptr }, /* 0x76 */
+ { 0x0077, 0, 0, nullptr }, /* 0x77 */
+ { 0x0078, 0, 0, nullptr }, /* 0x78 */
+ { 0x0079, 0, 0, nullptr }, /* 0x79 */
+ { 0x007A, 0, 0, nullptr }, /* 0x7A */
+ { 0x007B, 0, 0, nullptr }, /* 0x7B */
+ { 0x007C, 0, 0, nullptr }, /* 0x7C */
+ { 0x007D, 0, 0, nullptr }, /* 0x7D */
+ { 0x007E, 0, 0, nullptr }, /* 0x7E */
+ { 0x007F, 0, 0, nullptr }, /* 0x7F */
+ { 0, 1, 0, nullptr }, /* 0x80 */
+ { 0xF880, 0, 0, nullptr }, /* 0x81 */
+ { 0xF881, 0, 0, nullptr }, /* 0x82 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */
+ { 0x00A0, 0, 0, nullptr }, /* 0xA0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A1 }, /* 0xA1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A2 }, /* 0xA2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A3 }, /* 0xA3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A4 }, /* 0xA4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A5 }, /* 0xA5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A6 }, /* 0xA6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A7 }, /* 0xA7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A8 }, /* 0xA8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A9 }, /* 0xA9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AA }, /* 0xAA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AB }, /* 0xAB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AC }, /* 0xAC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AD }, /* 0xAD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AE }, /* 0xAE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AF }, /* 0xAF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B0 }, /* 0xB0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B1 }, /* 0xB1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B2 }, /* 0xB2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B3 }, /* 0xB3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B4 }, /* 0xB4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B5 }, /* 0xB5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B6 }, /* 0xB6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B7 }, /* 0xB7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B8 }, /* 0xB8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B9 }, /* 0xB9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BA }, /* 0xBA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BB }, /* 0xBB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BC }, /* 0xBC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BD }, /* 0xBD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BE }, /* 0xBE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BF }, /* 0xBF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C0 }, /* 0xC0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C1 }, /* 0xC1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C2 }, /* 0xC2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C3 }, /* 0xC3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C4 }, /* 0xC4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C5 }, /* 0xC5 */
+ { 0, 0x40, 0x7E, aImplDBCSToUniTab_BIG5_C6 }, /* 0xC6 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC7 */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC8 */ /* We convert this as double byte */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C9 }, /* 0xC9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CA }, /* 0xCA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CB }, /* 0xCB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CC }, /* 0xCC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CD }, /* 0xCD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CE }, /* 0xCE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CF }, /* 0xCF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D0 }, /* 0xD0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D1 }, /* 0xD1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D2 }, /* 0xD2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D3 }, /* 0xD3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D4 }, /* 0xD4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D5 }, /* 0xD5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D6 }, /* 0xD6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D7 }, /* 0xD7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D8 }, /* 0xD8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D9 }, /* 0xD9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DA }, /* 0xDA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DB }, /* 0xDB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DC }, /* 0xDC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DD }, /* 0xDD */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DE }, /* 0xDE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DF }, /* 0xDF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E0 }, /* 0xE0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E1 }, /* 0xE1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E2 }, /* 0xE2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E3 }, /* 0xE3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E4 }, /* 0xE4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E5 }, /* 0xE5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E6 }, /* 0xE6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E7 }, /* 0xE7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E8 }, /* 0xE8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E9 }, /* 0xE9 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EA }, /* 0xEA */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EB }, /* 0xEB */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EC }, /* 0xEC */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_ED }, /* 0xED */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EE }, /* 0xEE */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EF }, /* 0xEF */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F0 }, /* 0xF0 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F1 }, /* 0xF1 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F2 }, /* 0xF2 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F3 }, /* 0xF3 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F4 }, /* 0xF4 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F5 }, /* 0xF5 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F6 }, /* 0xF6 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F7 }, /* 0xF7 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F8 }, /* 0xF8 */
+ { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F9 }, /* 0xF9 */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */
+ { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */
+ { 0x00A9, 0, 0, nullptr }, /* 0xFD */
+ { 0x2122, 0, 0, nullptr }, /* 0xFE */
+ { 0x2026, 0, 0, nullptr } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplUniToDBCSHighTab const aAPPLECHINTRADDBCSHighTab[256] =
+{
+ { 0x00, 0xF7, aImplUniToDBCSTab_APPLECHINTRAD_00 }, /* 0x00 */
+ { 1, 0, nullptr }, /* 0x01 */
+ { 0xC7, 0xD9, aImplUniToDBCSTab_BIG5_02 }, /* 0x02 */
+ { 0x91, 0xC9, aImplUniToDBCSTab_BIG5_03 }, /* 0x03 */
+ { 0x01, 0x51, aImplUniToDBCSTab_BIG5_04 }, /* 0x04 */
+ { 1, 0, nullptr }, /* 0x05 */
+ { 1, 0, nullptr }, /* 0x06 */
+ { 1, 0, nullptr }, /* 0x07 */
+ { 1, 0, nullptr }, /* 0x08 */
+ { 1, 0, nullptr }, /* 0x09 */
+ { 1, 0, nullptr }, /* 0x0A */
+ { 1, 0, nullptr }, /* 0x0B */
+ { 1, 0, nullptr }, /* 0x0C */
+ { 1, 0, nullptr }, /* 0x0D */
+ { 1, 0, nullptr }, /* 0x0E */
+ { 1, 0, nullptr }, /* 0x0F */
+ { 1, 0, nullptr }, /* 0x10 */
+ { 1, 0, nullptr }, /* 0x11 */
+ { 1, 0, nullptr }, /* 0x12 */
+ { 1, 0, nullptr }, /* 0x13 */
+ { 1, 0, nullptr }, /* 0x14 */
+ { 1, 0, nullptr }, /* 0x15 */
+ { 1, 0, nullptr }, /* 0x16 */
+ { 1, 0, nullptr }, /* 0x17 */
+ { 1, 0, nullptr }, /* 0x18 */
+ { 1, 0, nullptr }, /* 0x19 */
+ { 1, 0, nullptr }, /* 0x1A */
+ { 1, 0, nullptr }, /* 0x1B */
+ { 1, 0, nullptr }, /* 0x1C */
+ { 1, 0, nullptr }, /* 0x1D */
+ { 1, 0, nullptr }, /* 0x1E */
+ { 1, 0, nullptr }, /* 0x1F */
+ { 0x13, 0xAC, aImplUniToDBCSTab_BIG5_20 }, /* 0x20 */
+ { 0x03, 0x99, aImplUniToDBCSTab_APPLECHINTRAD_21 }, /* 0x21 */
+ { 0x15, 0xEF, aImplUniToDBCSTab_BIG5_22 }, /* 0x22 */
+ { 1, 0, nullptr }, /* 0x23 */
+ { 0x60, 0x7D, aImplUniToDBCSTab_BIG5_24 }, /* 0x24 */
+ { 0x00, 0xE5, aImplUniToDBCSTab_BIG5_25 }, /* 0x25 */
+ { 0x05, 0x42, aImplUniToDBCSTab_BIG5_26 }, /* 0x25 */
+ { 1, 0, nullptr }, /* 0x27 */
+ { 1, 0, nullptr }, /* 0x28 */
+ { 1, 0, nullptr }, /* 0x29 */
+ { 1, 0, nullptr }, /* 0x2A */
+ { 1, 0, nullptr }, /* 0x2B */
+ { 1, 0, nullptr }, /* 0x2C */
+ { 1, 0, nullptr }, /* 0x2D */
+ { 1, 0, nullptr }, /* 0x2E */
+ { 1, 0, nullptr }, /* 0x2F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_30 }, /* 0x30 */
+ { 0x05, 0x29, aImplUniToDBCSTab_BIG5_31 }, /* 0x31 */
+ { 0xA3, 0xA3, aImplUniToDBCSTab_BIG5_32 }, /* 0x32 */
+ { 0x8E, 0xD5, aImplUniToDBCSTab_BIG5_33 }, /* 0x33 */
+ { 1, 0, nullptr }, /* 0x34 */
+ { 1, 0, nullptr }, /* 0x35 */
+ { 1, 0, nullptr }, /* 0x36 */
+ { 1, 0, nullptr }, /* 0x37 */
+ { 1, 0, nullptr }, /* 0x38 */
+ { 1, 0, nullptr }, /* 0x39 */
+ { 1, 0, nullptr }, /* 0x3A */
+ { 1, 0, nullptr }, /* 0x3B */
+ { 1, 0, nullptr }, /* 0x3C */
+ { 1, 0, nullptr }, /* 0x3D */
+ { 1, 0, nullptr }, /* 0x3E */
+ { 1, 0, nullptr }, /* 0x3F */
+ { 1, 0, nullptr }, /* 0x40 */
+ { 1, 0, nullptr }, /* 0x41 */
+ { 1, 0, nullptr }, /* 0x42 */
+ { 1, 0, nullptr }, /* 0x43 */
+ { 1, 0, nullptr }, /* 0x44 */
+ { 1, 0, nullptr }, /* 0x45 */
+ { 1, 0, nullptr }, /* 0x46 */
+ { 1, 0, nullptr }, /* 0x47 */
+ { 1, 0, nullptr }, /* 0x48 */
+ { 1, 0, nullptr }, /* 0x49 */
+ { 1, 0, nullptr }, /* 0x4A */
+ { 1, 0, nullptr }, /* 0x4B */
+ { 1, 0, nullptr }, /* 0x4C */
+ { 1, 0, nullptr }, /* 0x4D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_4E }, /* 0x4E */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_4F }, /* 0x4F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_50 }, /* 0x50 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_51 }, /* 0x51 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_52 }, /* 0x52 */
+ { 0x05, 0xFC, aImplUniToDBCSTab_BIG5_53 }, /* 0x53 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_54 }, /* 0x54 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_55 }, /* 0x55 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_56 }, /* 0x56 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_57 }, /* 0x57 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_58 }, /* 0x58 */
+ { 0x03, 0xFF, aImplUniToDBCSTab_BIG5_59 }, /* 0x59 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5A }, /* 0x5A */
+ { 0x01, 0xFA, aImplUniToDBCSTab_BIG5_5B }, /* 0x5B */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5C }, /* 0x5C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5D }, /* 0x5D */
+ { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_5E }, /* 0x5E */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5F }, /* 0x5F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_60 }, /* 0x60 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_61 }, /* 0x61 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_62 }, /* 0x62 */
+ { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_63 }, /* 0x63 */
+ { 0x06, 0xFF, aImplUniToDBCSTab_BIG5_64 }, /* 0x64 */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_65 }, /* 0x65 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_66 }, /* 0x66 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_67 }, /* 0x67 */
+ { 0x12, 0xFD, aImplUniToDBCSTab_BIG5_68 }, /* 0x68 */
+ { 0x04, 0xFF, aImplUniToDBCSTab_BIG5_69 }, /* 0x69 */
+ { 0x00, 0xFC, aImplUniToDBCSTab_BIG5_6A }, /* 0x6A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6B }, /* 0x6B */
+ { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_6C }, /* 0x6C */
+ { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_6D }, /* 0x6D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6E }, /* 0x6E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6F }, /* 0x6F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_70 }, /* 0x70 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_71 }, /* 0x71 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_72 }, /* 0x72 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_73 }, /* 0x73 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_74 }, /* 0x74 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_75 }, /* 0x75 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_76 }, /* 0x76 */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_77 }, /* 0x77 */
+ { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_78 }, /* 0x78 */
+ { 0x01, 0xFB, aImplUniToDBCSTab_BIG5_79 }, /* 0x79 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7A }, /* 0x7A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7B }, /* 0x7B */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_7C }, /* 0x7C */
+ { 0x00, 0xFB, aImplUniToDBCSTab_BIG5_7D }, /* 0x7D */
+ { 0x03, 0x9C, aImplUniToDBCSTab_BIG5_7E }, /* 0x7E */
+ { 0x36, 0xFF, aImplUniToDBCSTab_BIG5_7F }, /* 0x7F */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_80 }, /* 0x80 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_81 }, /* 0x81 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_82 }, /* 0x82 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_83 }, /* 0x83 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_84 }, /* 0x84 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_85 }, /* 0x85 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_86 }, /* 0x86 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_87 }, /* 0x87 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_88 }, /* 0x88 */
+ { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_89 }, /* 0x89 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8A }, /* 0x8A */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8B }, /* 0x8B */
+ { 0x37, 0xFE, aImplUniToDBCSTab_BIG5_8C }, /* 0x8C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8D }, /* 0x8D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8E }, /* 0x8E */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8F }, /* 0x8F */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_90 }, /* 0x90 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_91 }, /* 0x91 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_92 }, /* 0x92 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_93 }, /* 0x93 */
+ { 0x00, 0x83, aImplUniToDBCSTab_BIG5_94 }, /* 0x94 */
+ { 0x77, 0xE5, aImplUniToDBCSTab_BIG5_95 }, /* 0x95 */
+ { 0x1C, 0xFF, aImplUniToDBCSTab_BIG5_96 }, /* 0x96 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_97 }, /* 0x97 */
+ { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_98 }, /* 0x98 */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_99 }, /* 0x99 */
+ { 0x01, 0xFE, aImplUniToDBCSTab_BIG5_9A }, /* 0x9A */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_9B }, /* 0x9B */
+ { 0x05, 0xFF, aImplUniToDBCSTab_BIG5_9C }, /* 0x9C */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9D }, /* 0x9D */
+ { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9E }, /* 0x9E */
+ { 0x00, 0xA4, aImplUniToDBCSTab_BIG5_9F }, /* 0x9F */
+ { 1, 0, nullptr }, /* 0xA0 */
+ { 1, 0, nullptr }, /* 0xA1 */
+ { 1, 0, nullptr }, /* 0xA2 */
+ { 1, 0, nullptr }, /* 0xA3 */
+ { 1, 0, nullptr }, /* 0xA4 */
+ { 1, 0, nullptr }, /* 0xA5 */
+ { 1, 0, nullptr }, /* 0xA6 */
+ { 1, 0, nullptr }, /* 0xA7 */
+ { 1, 0, nullptr }, /* 0xA8 */
+ { 1, 0, nullptr }, /* 0xA9 */
+ { 1, 0, nullptr }, /* 0xAA */
+ { 1, 0, nullptr }, /* 0xAB */
+ { 1, 0, nullptr }, /* 0xAC */
+ { 1, 0, nullptr }, /* 0xAD */
+ { 1, 0, nullptr }, /* 0xAE */
+ { 1, 0, nullptr }, /* 0xAF */
+ { 1, 0, nullptr }, /* 0xB0 */
+ { 1, 0, nullptr }, /* 0xB1 */
+ { 1, 0, nullptr }, /* 0xB2 */
+ { 1, 0, nullptr }, /* 0xB3 */
+ { 1, 0, nullptr }, /* 0xB4 */
+ { 1, 0, nullptr }, /* 0xB5 */
+ { 1, 0, nullptr }, /* 0xB6 */
+ { 1, 0, nullptr }, /* 0xB7 */
+ { 1, 0, nullptr }, /* 0xB8 */
+ { 1, 0, nullptr }, /* 0xB9 */
+ { 1, 0, nullptr }, /* 0xBA */
+ { 1, 0, nullptr }, /* 0xBB */
+ { 1, 0, nullptr }, /* 0xBC */
+ { 1, 0, nullptr }, /* 0xBD */
+ { 1, 0, nullptr }, /* 0xBE */
+ { 1, 0, nullptr }, /* 0xBF */
+ { 1, 0, nullptr }, /* 0xC0 */
+ { 1, 0, nullptr }, /* 0xC1 */
+ { 1, 0, nullptr }, /* 0xC2 */
+ { 1, 0, nullptr }, /* 0xC3 */
+ { 1, 0, nullptr }, /* 0xC4 */
+ { 1, 0, nullptr }, /* 0xC5 */
+ { 1, 0, nullptr }, /* 0xC6 */
+ { 1, 0, nullptr }, /* 0xC7 */
+ { 1, 0, nullptr }, /* 0xC8 */
+ { 1, 0, nullptr }, /* 0xC9 */
+ { 1, 0, nullptr }, /* 0xCA */
+ { 1, 0, nullptr }, /* 0xCB */
+ { 1, 0, nullptr }, /* 0xCC */
+ { 1, 0, nullptr }, /* 0xCD */
+ { 1, 0, nullptr }, /* 0xCE */
+ { 1, 0, nullptr }, /* 0xCF */
+ { 1, 0, nullptr }, /* 0xD0 */
+ { 1, 0, nullptr }, /* 0xD1 */
+ { 1, 0, nullptr }, /* 0xD2 */
+ { 1, 0, nullptr }, /* 0xD3 */
+ { 1, 0, nullptr }, /* 0xD4 */
+ { 1, 0, nullptr }, /* 0xD5 */
+ { 1, 0, nullptr }, /* 0xD6 */
+ { 1, 0, nullptr }, /* 0xD7 */
+ { 1, 0, nullptr }, /* 0xD8 */
+ { 1, 0, nullptr }, /* 0xD9 */
+ { 1, 0, nullptr }, /* 0xDA */
+ { 1, 0, nullptr }, /* 0xDB */
+ { 1, 0, nullptr }, /* 0xDC */
+ { 1, 0, nullptr }, /* 0xDD */
+ { 1, 0, nullptr }, /* 0xDE */
+ { 1, 0, nullptr }, /* 0xDF */
+ { 1, 0, nullptr }, /* 0xE0 */
+ { 1, 0, nullptr }, /* 0xE1 */
+ { 1, 0, nullptr }, /* 0xE2 */
+ { 1, 0, nullptr }, /* 0xE3 */
+ { 1, 0, nullptr }, /* 0xE4 */
+ { 1, 0, nullptr }, /* 0xE5 */
+ { 1, 0, nullptr }, /* 0xE6 */
+ { 1, 0, nullptr }, /* 0xE7 */
+ { 1, 0, nullptr }, /* 0xE8 */
+ { 1, 0, nullptr }, /* 0xE9 */
+ { 1, 0, nullptr }, /* 0xEA */
+ { 1, 0, nullptr }, /* 0xEB */
+ { 1, 0, nullptr }, /* 0xEC */
+ { 1, 0, nullptr }, /* 0xED */
+ { 1, 0, nullptr }, /* 0xEE */
+ { 1, 0, nullptr }, /* 0xEF */
+ { 1, 0, nullptr }, /* 0xF0 */
+ { 1, 0, nullptr }, /* 0xF1 */
+ { 1, 0, nullptr }, /* 0xF2 */
+ { 1, 0, nullptr }, /* 0xF3 */
+ { 1, 0, nullptr }, /* 0xF4 */
+ { 1, 0, nullptr }, /* 0xF5 */
+ { 1, 0, nullptr }, /* 0xF6 */
+ { 1, 0, nullptr }, /* 0xF7 */
+ { 0x80, 0x81, aImplUniToDBCSTab_APPLECHINTRAD_F8 }, /* 0xF8 */
+ { 1, 0, nullptr }, /* 0xF9 */
+ { 0x0C, 0x0D, aImplUniToDBCSTab_BIG5_FA }, /* 0xFA */
+ { 1, 0, nullptr }, /* 0xFB */
+ { 1, 0, nullptr }, /* 0xFC */
+ { 1, 0, nullptr }, /* 0xFD */
+ { 0x30, 0x6B, aImplUniToDBCSTab_BIG5_FE }, /* 0xFE */
+ { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_FF } /* 0xFF */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplDBCSConvertData const aImplAPPLECHINTRADDBCSCvtData =
+{
+ aAPPLECHINTRADUniLeadTab,
+ aAPPLECHINTRADDBCSHighTab,
+ nullptr,
+ 0,
+ 0x00, 0xFF,
+ 0x40, 0xFE,
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplAPPLECHINTRADTextEncodingData
+ = { { &aImplAPPLECHINTRADDBCSCvtData,
+ ImplDBCSToUnicode,
+ ImplUnicodeToDBCS,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "euc-tw",
+ "big5",
+ 1,
+ 2,
+ 2,
+ 136,
+ RTL_TEXTENCODING_INFO_MULTIBYTE };
+ /* MAC, SCRIPT_CHINESE_TRADITIONAL, pc code page 950, mac encoding 2 */
diff --git a/sal/textenc/tcvtuni1.tab b/sal/textenc/tcvtuni1.tab
new file mode 100644
index 000000000..e2c781317
--- /dev/null
+++ b/sal/textenc/tcvtuni1.tab
@@ -0,0 +1,42 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* Unicode Encodings */
+
+ImplTextEncodingData const aImplUTF7TextEncodingData
+ = { { nullptr,
+ ImplUTF7ToUnicode,
+ ImplUnicodeToUTF7,
+ ImplUTF7CreateUTF7TextToUnicodeContext,
+ ImplUTF7DestroyTextToUnicodeContext,
+ ImplUTF7ResetTextToUnicodeContext,
+ ImplUTF7CreateUnicodeToTextContext,
+ ImplUTF7DestroyUnicodeToTextContext,
+ ImplUTF7ResetUnicodeToTextContext },
+ "iso8859-1",
+ "utf-7",
+ 1,
+ 6,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_CONTEXT
+ | RTL_TEXTENCODING_INFO_UNICODE
+ | RTL_TEXTENCODING_INFO_7BIT
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_UNICODE, pc code page 850 */
diff --git a/sal/textenc/tcvtutf7.cxx b/sal/textenc/tcvtutf7.cxx
new file mode 100644
index 000000000..0f3ea4e7c
--- /dev/null
+++ b/sal/textenc/tcvtutf7.cxx
@@ -0,0 +1,602 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <rtl/textcvt.h>
+
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+/* ======================================================================= */
+
+unsigned char const aImplBase64Tab[64] =
+{
+ /* A-Z */
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5A,
+ /* a-z */
+ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7A,
+ /* 0-9,+,/ */
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x2B, 0x2F
+};
+
+/* Index in Base64Tab or 0xFF, when is an invalid character */
+unsigned char const aImplBase64IndexTab[128] =
+{
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x00-0x07 */
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x08-0x0F */
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x10-0x17 */
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x18-0x1F */
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x20-0x27 !"#$%&' */
+ 0xFF, 0xFF, 0xFF, 62, 0xFF, 0xFF, 0xFF, 63, /* 0x28-0x2F ()*+,-./ */
+ 52, 53, 54, 55, 56, 57, 58, 59, /* 0x30-0x37 01234567 */
+ 60, 61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x38-0x3F 89:;<=>? */
+ 0xFF, 0, 1, 2, 3, 4, 5, 6, /* 0x40-0x47 @ABCDEFG */
+ 7, 8, 9, 10, 11, 12, 13, 14, /* 0x48-0x4F HIJKLMNO */
+ 15, 16, 17, 18, 19, 20, 21, 22, /* 0x50-0x57 PQRSTUVW */
+ 23, 24, 25, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x58-0x5F XYZ[\]^_ */
+ 0xFF, 26, 27, 28, 29, 30, 31, 32, /* 0x60-0x67 `abcdefg */
+ 33, 34, 35, 36, 37, 38, 39, 40, /* 0x68-0x6F hijklmno */
+ 41, 42, 43, 44, 45, 46, 47, 48, /* 0x70-0x77 pqrstuvw */
+ 49, 50, 51, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 0x78-0x7F xyz{|}~ */
+};
+
+unsigned char const aImplMustShiftTab[128] =
+{
+ 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00-0x07 */
+ 1, 0, 0, 1, 0, 1, 1, 1, /* 0x08-0x0F 0x09 == HTAB, 0x0A == LF 0x0C == CR */
+ 1, 1, 1, 1, 1, 1, 1, 1, /* 0x10-0x17 */
+ 1, 1, 1, 1, 1, 1, 1, 1, /* 0x18-0x1F */
+ 0, 1, 1, 1, 1, 1, 1, 0, /* 0x20-0x27 !"#$%&' */
+ 0, 0, 1, 1, 0, 1, 0, 0, /* 0x28-0x2F ()*+,-./ */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30-0x37 01234567 */
+ 0, 0, 0, 1, 1, 1, 1, 0, /* 0x38-0x3F 89:;<=>? */
+ 1, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x47 @ABCDEFG */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x48-0x4F HIJKLMNO */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x57 PQRSTUVW */
+ 0, 0, 0, 1, 1, 1, 1, 1, /* 0x58-0x5F XYZ[\]^_ */
+ 1, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x67 `abcdefg */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x68-0x6F hijklmno */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x77 pqrstuvw */
+ 0, 0, 0, 1, 1, 1, 1, 1 /* 0x78-0x7F xyz{|}~ */
+};
+
+/* + */
+#define IMPL_SHIFT_IN_CHAR 0x2B
+/* - */
+#define IMPL_SHIFT_OUT_CHAR 0x2D
+
+/* ----------------------------------------------------------------------- */
+
+namespace {
+
+struct ImplUTF7ToUCContextData
+{
+ bool mbShifted;
+ bool mbFirst;
+ bool mbWroteOne;
+ sal_uInt32 mnBitBuffer;
+ sal_uInt32 mnBufferBits;
+};
+
+}
+
+/* ----------------------------------------------------------------------- */
+
+void* ImplUTF7CreateUTF7TextToUnicodeContext()
+{
+ ImplUTF7ToUCContextData* pContextData = new ImplUTF7ToUCContextData;
+ pContextData->mbShifted = false;
+ pContextData->mbFirst = false;
+ pContextData->mbWroteOne = false;
+ pContextData->mnBitBuffer = 0;
+ pContextData->mnBufferBits = 0;
+ return pContextData;
+}
+
+/* ----------------------------------------------------------------------- */
+
+void ImplUTF7DestroyTextToUnicodeContext( void* pContext )
+{
+ delete static_cast< ImplUTF7ToUCContextData * >(pContext);
+}
+
+/* ----------------------------------------------------------------------- */
+
+void ImplUTF7ResetTextToUnicodeContext( void* pContext )
+{
+ ImplUTF7ToUCContextData* pContextData = static_cast<ImplUTF7ToUCContextData*>(pContext);
+ pContextData->mbShifted = false;
+ pContextData->mbFirst = false;
+ pContextData->mbWroteOne = false;
+ pContextData->mnBitBuffer = 0;
+ pContextData->mnBufferBits = 0;
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Size ImplUTF7ToUnicode( SAL_UNUSED_PARAMETER const void*, void* pContext,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes )
+{
+ ImplUTF7ToUCContextData* pContextData = static_cast<ImplUTF7ToUCContextData*>(pContext);
+ unsigned char c ='\0';
+ unsigned char nBase64Value = 0;
+ bool bEnd = false;
+ bool bShifted;
+ bool bFirst;
+ bool bWroteOne;
+ bool bBase64End;
+ sal_uInt32 nBitBuffer;
+ sal_uInt32 nBitBufferTemp;
+ sal_uInt32 nBufferBits;
+ sal_Unicode* pEndDestBuf;
+ const char* pEndSrcBuf;
+
+/* !!! Implementation not finished !!!
+ if ( pContextData )
+ {
+ bShifted = pContextData->mbShifted;
+ bFirst = pContextData->mbFirst;
+ bWroteOne = pContextData->mbWroteOne;
+ nBitBuffer = pContextData->mnBitBuffer;
+ nBufferBits = pContextData->mnBufferBits;
+ }
+ else
+*/
+ {
+ bShifted = false;
+ bFirst = false;
+ bWroteOne = false;
+ nBitBuffer = 0;
+ nBufferBits = 0;
+ }
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestChars;
+ pEndSrcBuf = pSrcBuf+nSrcBytes;
+ do
+ {
+ if ( pSrcBuf < pEndSrcBuf )
+ {
+ c = static_cast<unsigned char>(*pSrcBuf);
+
+ /* End, when not a base64 character */
+ bBase64End = false;
+ if ( c <= 0x7F )
+ {
+ nBase64Value = aImplBase64IndexTab[c];
+ if ( nBase64Value == 0xFF )
+ bBase64End = true;
+ }
+ }
+ else
+ {
+ bEnd = true;
+ bBase64End = true;
+ }
+
+ if ( bShifted )
+ {
+ if ( bBase64End )
+ {
+ bShifted = false;
+
+ /* If the character causing us to drop out was SHIFT_IN */
+ /* or SHIFT_OUT, it may be a special escape for SHIFT_IN. */
+ /* The test for SHIFT_IN is not necessary, but allows */
+ /* an alternate form of UTF-7 where SHIFT_IN is escaped */
+ /* by SHIFT_IN. This only works for some values of */
+ /* SHIFT_IN. It is so implemented, because this comes */
+ /* from the official unicode book (The Unicode Standard, */
+ /* Version 2.0) and so I think, that someone of the */
+ /* world has used this feature. */
+ if ( !bEnd )
+ {
+ if ( (c == IMPL_SHIFT_IN_CHAR) || (c == IMPL_SHIFT_OUT_CHAR) )
+ {
+ /* If no base64 character, and the terminating */
+ /* character of the shift sequence was the */
+ /* SHIFT_OUT_CHAR, then it't a special escape */
+ /* for SHIFT_IN_CHAR. */
+ if ( bFirst && (c == IMPL_SHIFT_OUT_CHAR) )
+ {
+ if ( pDestBuf >= pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ *pDestBuf = IMPL_SHIFT_IN_CHAR;
+ pDestBuf++;
+ bWroteOne = true;
+ }
+
+ /* Skip character */
+ pSrcBuf++;
+ if ( pSrcBuf < pEndSrcBuf )
+ c = static_cast<unsigned char>(*pSrcBuf);
+ else
+ bEnd = true;
+ }
+ }
+
+ /* Empty sequence not allowed, so when we don't write one */
+ /* valid char, then the sequence is corrupt */
+ if ( !bWroteOne )
+ {
+ /* When no more bytes in the source buffer, then */
+ /* this buffer may be too small */
+ if ( bEnd )
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR )
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ if (!bEnd) {
+ ++pSrcBuf;
+ }
+ } else {
+ //TODO: move pSrcBuf back to a reasonable starting place
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ /* We insert here no default char, because I think */
+ /* this is better to ignore this */
+ }
+ }
+ }
+ else
+ {
+ /* Add 6 Bits from character to the bit buffer */
+ nBufferBits += 6;
+ nBitBuffer |= static_cast<sal_uInt32>(nBase64Value & 0x3F) << (32-nBufferBits);
+ bFirst = false;
+ }
+
+ /* Extract as many full 16 bit characters as possible from the */
+ /* bit buffer. */
+ while ( (pDestBuf < pEndDestBuf) && (nBufferBits >= 16) )
+ {
+ nBitBufferTemp = nBitBuffer >> (32-16);
+ *pDestBuf = static_cast<sal_Unicode>(nBitBufferTemp & 0xFFFF);
+ pDestBuf++;
+ nBitBuffer <<= 16;
+ nBufferBits -= 16;
+ bWroteOne = true;
+ }
+
+ if ( nBufferBits >= 16 )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ if ( bBase64End )
+ {
+ /* Sequence ended and we have some bits, then the */
+ /* sequence is corrupted */
+ if ( nBufferBits && nBitBuffer )
+ {
+ /* When no more bytes in the source buffer, then */
+ /* this buffer may be too small */
+ if ( bEnd )
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR )
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ if (!bEnd) {
+ ++pSrcBuf;
+ }
+ } else {
+ //TODO: move pSrcBuf back to a reasonable starting place
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) != RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE )
+ {
+ if ( pDestBuf >= pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ *pDestBuf++
+ = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+ }
+ }
+
+ }
+
+ nBitBuffer = 0;
+ nBufferBits = 0;
+ }
+ }
+
+ if ( !bEnd )
+ {
+ if ( !bShifted )
+ {
+ if ( c == IMPL_SHIFT_IN_CHAR )
+ {
+ bShifted = true;
+ bFirst = true;
+ bWroteOne = false;
+ }
+ else
+ {
+ /* No direct encoded character, then the buffer is */
+ /* corrupt */
+ if ( c > 0x7F )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID;
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR )
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ ++pSrcBuf;
+ }
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
+ break;
+ }
+ if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) != RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE )
+ {
+ if ( pDestBuf >= pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ *pDestBuf++
+ = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+ }
+ }
+ else
+ {
+ /* Write char to unicode buffer */
+ if ( pDestBuf >= pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ *pDestBuf = c;
+ pDestBuf++;
+
+ }
+ }
+ }
+
+ pSrcBuf++;
+ }
+ }
+ while ( !bEnd );
+
+ if ( pContextData )
+ {
+ pContextData->mbShifted = bShifted;
+ pContextData->mbFirst = bFirst;
+ pContextData->mbWroteOne = bWroteOne;
+ pContextData->mnBitBuffer = nBitBuffer;
+ pContextData->mnBufferBits = nBufferBits;
+ }
+
+ *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf);
+ return (nDestChars - (pEndDestBuf-pDestBuf));
+}
+
+/* ======================================================================= */
+
+namespace {
+
+struct ImplUTF7FromUCContextData
+{
+ bool mbShifted;
+ sal_uInt32 mnBitBuffer;
+ sal_uInt32 mnBufferBits;
+};
+
+}
+
+/* ----------------------------------------------------------------------- */
+
+void* ImplUTF7CreateUnicodeToTextContext()
+{
+ ImplUTF7FromUCContextData* pContextData = new ImplUTF7FromUCContextData;
+ pContextData->mbShifted = false;
+ pContextData->mnBitBuffer = 0;
+ pContextData->mnBufferBits = 0;
+ return pContextData;
+}
+
+/* ----------------------------------------------------------------------- */
+
+void ImplUTF7DestroyUnicodeToTextContext( void* pContext )
+{
+ delete static_cast< ImplUTF7FromUCContextData * >(pContext);
+}
+
+/* ----------------------------------------------------------------------- */
+
+void ImplUTF7ResetUnicodeToTextContext( void* pContext )
+{
+ ImplUTF7FromUCContextData* pContextData = static_cast<ImplUTF7FromUCContextData*>(pContext);
+ pContextData->mbShifted = false;
+ pContextData->mnBitBuffer = 0;
+ pContextData->mnBufferBits = 0;
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Size ImplUnicodeToUTF7( SAL_UNUSED_PARAMETER const void*, void* pContext,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ SAL_UNUSED_PARAMETER sal_uInt32, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars )
+{
+ ImplUTF7FromUCContextData* pContextData = static_cast<ImplUTF7FromUCContextData*>(pContext);
+ sal_Unicode c = '\0';
+ bool bEnd = false;
+ bool bShifted;
+ bool bNeedShift;
+ sal_uInt32 nBitBuffer;
+ sal_uInt32 nBitBufferTemp;
+ sal_uInt32 nBufferBits;
+ char* pEndDestBuf;
+ const sal_Unicode* pEndSrcBuf;
+
+/* !!! Implementation not finished !!!
+ if ( pContextData )
+ {
+ bShifted = pContextData->mbShifted;
+ nBitBuffer = pContextData->mnBitBuffer;
+ nBufferBits = pContextData->mnBufferBits;
+ }
+ else
+*/
+ {
+ bShifted = false;
+ nBitBuffer = 0;
+ nBufferBits = 0;
+ }
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestBytes;
+ pEndSrcBuf = pSrcBuf+nSrcChars;
+ do
+ {
+ if ( pSrcBuf < pEndSrcBuf )
+ {
+ c = *pSrcBuf;
+
+ bNeedShift = (c > 0x7F) || aImplMustShiftTab[c];
+ if ( bNeedShift && !bShifted )
+ {
+ if ( pDestBuf >= pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ *pDestBuf = IMPL_SHIFT_IN_CHAR;
+ pDestBuf++;
+ /* Special case handling for SHIFT_IN_CHAR */
+ if ( c == IMPL_SHIFT_IN_CHAR )
+ {
+ if ( pDestBuf >= pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ *pDestBuf = IMPL_SHIFT_OUT_CHAR;
+ pDestBuf++;
+ }
+ else
+ bShifted = true;
+ }
+ }
+ else
+ {
+ bEnd = true;
+ bNeedShift = false;
+ }
+
+ if ( bShifted )
+ {
+ /* Write the character to the bit buffer, or pad the bit */
+ /* buffer out to a full base64 character */
+ if ( bNeedShift )
+ {
+ nBufferBits += 16;
+ nBitBuffer |= static_cast<sal_uInt32>(c) << (32-nBufferBits);
+ }
+ else
+ nBufferBits += (6-(nBufferBits%6))%6;
+
+ /* Flush out as many full base64 characters as possible */
+ while ( (pDestBuf < pEndDestBuf) && (nBufferBits >= 6) )
+ {
+ nBitBufferTemp = nBitBuffer >> (32-6);
+ *pDestBuf = aImplBase64Tab[nBitBufferTemp];
+ pDestBuf++;
+ nBitBuffer <<= 6;
+ nBufferBits -= 6;
+ }
+
+ if ( nBufferBits >= 6 )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ /* Write SHIFT_OUT_CHAR, when needed */
+ if ( !bNeedShift )
+ {
+ if ( pDestBuf >= pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ *pDestBuf = IMPL_SHIFT_OUT_CHAR;
+ pDestBuf++;
+ bShifted = false;
+ }
+ }
+
+ if ( !bEnd )
+ {
+ /* Character can be directly encoded */
+ if ( !bNeedShift )
+ {
+ if ( pDestBuf >= pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ *pDestBuf = static_cast< char >(static_cast< unsigned char >(c));
+ pDestBuf++;
+ }
+
+ pSrcBuf++;
+ }
+ }
+ while ( !bEnd );
+
+ if ( pContextData )
+ {
+ pContextData->mbShifted = bShifted;
+ pContextData->mnBitBuffer = nBitBuffer;
+ pContextData->mnBufferBits = nBufferBits;
+ }
+
+ *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf);
+ return (nDestBytes - (pEndDestBuf-pDestBuf));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/tcvtutf8.cxx b/sal/textenc/tcvtutf8.cxx
new file mode 100644
index 000000000..f210b654d
--- /dev/null
+++ b/sal/textenc/tcvtutf8.cxx
@@ -0,0 +1,458 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <sal/types.h>
+#include <rtl/character.hxx>
+#include <rtl/textcvt.h>
+
+#include "converter.hxx"
+#include "tcvtutf8.hxx"
+#include "tenchelp.hxx"
+#include "unichars.hxx"
+
+namespace {
+
+struct ImplUtf8ToUnicodeContext
+{
+ sal_uInt32 nUtf32;
+ int nBytes;
+ int nShift;
+ bool bCheckBom;
+};
+
+struct ImplUnicodeToUtf8Context
+{
+ sal_Unicode nHighSurrogate; /* 0xFFFF: write BOM */
+};
+
+}
+
+void * ImplCreateUtf8ToUnicodeContext()
+{
+ ImplUtf8ToUnicodeContext * p = new ImplUtf8ToUnicodeContext;
+ ImplResetUtf8ToUnicodeContext(p);
+ return p;
+}
+
+void ImplResetUtf8ToUnicodeContext(void * pContext)
+{
+ if (pContext != nullptr)
+ {
+ static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nShift = -1;
+ static_cast< ImplUtf8ToUnicodeContext * >(pContext)->bCheckBom = true;
+ }
+}
+
+void ImplDestroyUtf8ToUnicodeContext(void * pContext)
+{
+ delete static_cast< ImplUtf8ToUnicodeContext * >(pContext);
+}
+
+sal_Size ImplConvertUtf8ToUnicode(
+ void const * pData, void * pContext, char const * pSrcBuf,
+ sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes)
+{
+ bool bJavaUtf8 = pData != nullptr;
+ sal_uInt32 nUtf32 = 0;
+ int nBytes = int();
+ int nShift = -1;
+ bool bCheckBom = true;
+ sal_uInt32 nInfo = 0;
+ unsigned char const * pSrcBufPtr = reinterpret_cast<unsigned char const *>(pSrcBuf);
+ unsigned char const * pSrcBufEnd = pSrcBufPtr + nSrcBytes;
+ sal_Unicode * pDestBufPtr = pDestBuf;
+ sal_Unicode * pDestBufEnd = pDestBufPtr + nDestChars;
+ unsigned char const * startOfCurrentChar = pSrcBufPtr;
+
+ if (pContext != nullptr)
+ {
+ nUtf32 = static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nUtf32;
+ nBytes = static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nBytes;
+ nShift = static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nShift;
+ bCheckBom = static_cast< ImplUtf8ToUnicodeContext * >(pContext)->bCheckBom;
+ }
+
+ while (pSrcBufPtr < pSrcBufEnd)
+ {
+ bool bConsume = true;
+ sal_uInt32 nChar = *pSrcBufPtr++;
+ if (nShift < 0)
+ // Allow (illegal) 5 and 6 byte sequences, so they are read as a
+ // single individual bad character:
+ if (nChar <= 0x7F)
+ {
+ nUtf32 = nChar;
+ nBytes = 1;
+ goto transform;
+ }
+ else if (nChar <= 0xBF)
+ goto bad_input;
+ else if (nChar <= 0xDF)
+ {
+ nUtf32 = (nChar & 0x1F) << 6;
+ nBytes = 2;
+ nShift = 0;
+ }
+ else if (nChar <= 0xEF)
+ {
+ nUtf32 = (nChar & 0x0F) << 12;
+ nBytes = 3;
+ nShift = 6;
+ }
+ else if (nChar <= 0xF7)
+ {
+ nUtf32 = (nChar & 0x07) << 18;
+ nBytes = 4;
+ nShift = 12;
+ }
+ else if (nChar <= 0xFB)
+ {
+ nUtf32 = (nChar & 0x03) << 24;
+ nBytes = 5;
+ nShift = 18;
+ }
+ else if (nChar <= 0xFD)
+ {
+ nUtf32 = (nChar & 0x01) << 30;
+ nBytes = 6;
+ nShift = 24;
+ }
+ else
+ goto bad_input;
+ else if ((nChar & 0xC0) == 0x80)
+ {
+ nUtf32 |= (nChar & 0x3F) << nShift;
+ if (nShift == 0)
+ goto transform;
+ else
+ nShift -= 6;
+ }
+ else
+ {
+ /*
+ This byte is preceded by a broken UTF-8 sequence; if this byte
+ is neither in the range [0x80..0xBF] nor in the range
+ [0xFE..0xFF], assume that this byte does not belong to that
+ broken sequence, but instead starts a new, legal UTF-8 sequence:
+ */
+ bConsume = nChar >= 0xFE;
+ goto bad_input;
+ }
+ continue;
+
+ transform:
+ if (!bCheckBom || nUtf32 != 0xFEFF || nBytes != 3
+ || (nFlags & RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE) == 0
+ || bJavaUtf8)
+ {
+ switch (nBytes) {
+ case 1:
+ if (bJavaUtf8 && nUtf32 == 0) {
+ goto bad_input;
+ }
+ break;
+ case 2:
+ if (nUtf32 < 0x80 && !(bJavaUtf8 && nUtf32 == 0)) {
+ goto bad_input;
+ }
+ break;
+ case 3:
+ if (nUtf32 < 0x800 || (!bJavaUtf8 && rtl::isSurrogate(nUtf32)))
+ {
+ goto bad_input;
+ }
+ break;
+ case 4:
+ if (nUtf32 < 0x10000 || !rtl::isUnicodeCodePoint(nUtf32)
+ || bJavaUtf8)
+ {
+ goto bad_input;
+ }
+ break;
+ default:
+ goto bad_input;
+ }
+ if (nUtf32 <= 0xFFFF)
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast<sal_Unicode>(nUtf32);
+ else
+ goto no_output;
+ else if (pDestBufEnd - pDestBufPtr >= 2)
+ pDestBufPtr += rtl::splitSurrogates(nUtf32, pDestBufPtr);
+ else
+ goto no_output;
+ }
+ nShift = -1;
+ bCheckBom = false;
+ startOfCurrentChar = pSrcBufPtr;
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ false, nBytes != 1, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nShift = -1;
+ bCheckBom = false;
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
+ if (!bConsume)
+ --pSrcBufPtr;
+ } else {
+ pSrcBufPtr = startOfCurrentChar;
+ }
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nShift = -1;
+ bCheckBom = false;
+ if (!bConsume)
+ --pSrcBufPtr;
+ startOfCurrentChar = pSrcBufPtr;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBufPtr;
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ if (nShift >= 0
+ && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR
+ | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0)
+ nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion(
+ false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd,
+ &nInfo))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) {
+ pSrcBufPtr = startOfCurrentChar;
+ }
+ [[fallthrough]];
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nShift = -1;
+ bCheckBom = false;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+ }
+
+ if (pContext != nullptr)
+ {
+ static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nUtf32 = nUtf32;
+ static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nBytes = nBytes;
+ static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nShift = nShift;
+ static_cast< ImplUtf8ToUnicodeContext * >(pContext)->bCheckBom = bCheckBom;
+ }
+ if (pInfo != nullptr)
+ *pInfo = nInfo;
+ if (pSrcCvtBytes != nullptr)
+ *pSrcCvtBytes = reinterpret_cast< char const * >(pSrcBufPtr) - pSrcBuf;
+ return pDestBufPtr - pDestBuf;
+}
+
+void * ImplCreateUnicodeToUtf8Context()
+{
+ ImplUnicodeToUtf8Context * p = new ImplUnicodeToUtf8Context;
+ ImplResetUnicodeToUtf8Context(p);
+ return p;
+}
+
+void ImplResetUnicodeToUtf8Context(void * pContext)
+{
+ if (pContext != nullptr)
+ static_cast< ImplUnicodeToUtf8Context * >(pContext)->nHighSurrogate = 0xFFFF;
+}
+
+void ImplDestroyUnicodeToUtf8Context(void * pContext)
+{
+ delete static_cast< ImplUnicodeToUtf8Context * >(pContext);
+}
+
+sal_Size ImplConvertUnicodeToUtf8(
+ void const * pData, void * pContext, sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars, char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size * pSrcCvtChars)
+{
+ bool bJavaUtf8 = pData != nullptr;
+ sal_Unicode nHighSurrogate = 0xFFFF;
+ sal_uInt32 nInfo = 0;
+ sal_Unicode const * pSrcBufPtr = pSrcBuf;
+ sal_Unicode const * pSrcBufEnd = pSrcBufPtr + nSrcChars;
+ char * pDestBufPtr = pDestBuf;
+ char * pDestBufEnd = pDestBufPtr + nDestBytes;
+
+ if (pContext != nullptr)
+ nHighSurrogate
+ = static_cast< ImplUnicodeToUtf8Context * >(pContext)->nHighSurrogate;
+
+ if (nHighSurrogate == 0xFFFF)
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE) != 0
+ && !bJavaUtf8)
+ {
+ if (pDestBufEnd - pDestBufPtr >= 3)
+ {
+ /* Write BOM (U+FEFF) as UTF-8: */
+ *pDestBufPtr++ = static_cast< char >(static_cast< unsigned char >(0xEF));
+ *pDestBufPtr++ = static_cast< char >(static_cast< unsigned char >(0xBB));
+ *pDestBufPtr++ = static_cast< char >(static_cast< unsigned char >(0xBF));
+ }
+ else
+ {
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ goto done;
+ }
+ }
+ nHighSurrogate = 0;
+ }
+
+ while (pSrcBufPtr < pSrcBufEnd)
+ {
+ sal_uInt32 nChar = *pSrcBufPtr++;
+ if (nHighSurrogate == 0)
+ {
+ if (rtl::isHighSurrogate(nChar) && !bJavaUtf8)
+ {
+ nHighSurrogate = static_cast<sal_Unicode>(nChar);
+ continue;
+ }
+ else if (rtl::isLowSurrogate(nChar) && !bJavaUtf8)
+ {
+ goto bad_input;
+ }
+ }
+ else if (rtl::isLowSurrogate(nChar) && !bJavaUtf8)
+ nChar = rtl::combineSurrogates(nHighSurrogate, nChar);
+ else
+ goto bad_input;
+
+ assert(bJavaUtf8 ? nChar <= 0xFFFF : rtl::isUnicodeScalarValue(nChar));
+
+ if (nChar <= 0x7F && (!bJavaUtf8 || nChar != 0))
+ if (pDestBufPtr != pDestBufEnd)
+ *pDestBufPtr++ = static_cast< char >(nChar);
+ else
+ goto no_output;
+ else if (nChar <= 0x7FF)
+ if (pDestBufEnd - pDestBufPtr >= 2)
+ {
+ *pDestBufPtr++ = static_cast< char >(0xC0 | (nChar >> 6));
+ *pDestBufPtr++ = static_cast< char >(0x80 | (nChar & 0x3F));
+ }
+ else
+ goto no_output;
+ else if (nChar <= 0xFFFF)
+ if (pDestBufEnd - pDestBufPtr >= 3)
+ {
+ *pDestBufPtr++ = static_cast< char >(0xE0 | (nChar >> 12));
+ *pDestBufPtr++ = static_cast< char >(0x80 | ((nChar >> 6) & 0x3F));
+ *pDestBufPtr++ = static_cast< char >(0x80 | (nChar & 0x3F));
+ }
+ else
+ goto no_output;
+ else if (pDestBufEnd - pDestBufPtr >= 4)
+ {
+ *pDestBufPtr++ = static_cast< char >(0xF0 | (nChar >> 18));
+ *pDestBufPtr++ = static_cast< char >(0x80 | ((nChar >> 12) & 0x3F));
+ *pDestBufPtr++ = static_cast< char >(0x80 | ((nChar >> 6) & 0x3F));
+ *pDestBufPtr++ = static_cast< char >(0x80 | (nChar & 0x3F));
+ }
+ else
+ goto no_output;
+ nHighSurrogate = 0;
+ continue;
+
+ bad_input:
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, nullptr,
+ 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nHighSurrogate = 0;
+ continue;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ goto no_output;
+ }
+ break;
+
+ no_output:
+ --pSrcBufPtr;
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ if (nHighSurrogate != 0
+ && (nInfo & (RTL_UNICODETOTEXT_INFO_ERROR
+ | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL))
+ == 0)
+ {
+ if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0)
+ nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL;
+ else
+ switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion(
+ false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo,
+ nullptr, 0, nullptr))
+ {
+ case sal::detail::textenc::BAD_INPUT_STOP:
+ case sal::detail::textenc::BAD_INPUT_CONTINUE:
+ nHighSurrogate = 0;
+ break;
+
+ case sal::detail::textenc::BAD_INPUT_NO_OUTPUT:
+ nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+ }
+
+ done:
+ if (pContext != nullptr)
+ static_cast< ImplUnicodeToUtf8Context * >(pContext)->nHighSurrogate
+ = nHighSurrogate;
+ if (pInfo != nullptr)
+ *pInfo = nInfo;
+ if (pSrcCvtChars != nullptr)
+ *pSrcCvtChars = pSrcBufPtr - pSrcBuf;
+ return pDestBufPtr - pDestBuf;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/tcvtutf8.hxx b/sal/textenc/tcvtutf8.hxx
new file mode 100644
index 000000000..a64d50044
--- /dev/null
+++ b/sal/textenc/tcvtutf8.hxx
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_TCVTUTF8_HXX
+#define INCLUDED_SAL_TEXTENC_TCVTUTF8_HXX
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+
+void * ImplCreateUtf8ToUnicodeContext();
+
+void ImplResetUtf8ToUnicodeContext(void * pContext);
+
+void ImplDestroyUtf8ToUnicodeContext(void * pContext);
+
+sal_Size ImplConvertUtf8ToUnicode(
+ void const * pData, void * pContext, char const * pSrcBuf,
+ sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes);
+
+void * ImplCreateUnicodeToUtf8Context();
+
+void ImplResetUnicodeToUtf8Context(void * pContext);
+
+void ImplDestroyUnicodeToUtf8Context(void * pContext);
+
+sal_Size ImplConvertUnicodeToUtf8(
+ void const * pData, void * pContext, sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars, char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags,
+ sal_uInt32 * pInfo, sal_Size* pSrcCvtChars);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/tenchelp.hxx b/sal/textenc/tenchelp.hxx
new file mode 100644
index 000000000..469ffabb7
--- /dev/null
+++ b/sal/textenc/tenchelp.hxx
@@ -0,0 +1,250 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_TENCHELP_HXX
+#define INCLUDED_SAL_TEXTENC_TENCHELP_HXX
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textcvt.h>
+#include <rtl/textenc.h>
+#include <sal/types.h>
+
+#include "unichars.hxx"
+
+#define RTL_TEXTCVT_BYTE_PRIVATE_START 0xF100
+#define RTL_TEXTCVT_BYTE_PRIVATE_END 0xF1FF
+
+/* ----------------- */
+/* - TextConverter - */
+/* ----------------- */
+
+typedef
+sal_Size (* ImplConvertToUnicodeProc)(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes);
+
+typedef
+sal_Size (* ImplConvertToTextProc)(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars);
+
+typedef void * (* ImplCreateTextContextProc)();
+
+typedef void (* ImplDestroyTextContextProc)(void * pContext);
+
+typedef void (* ImplResetTextContextProc)(void * pContext);
+
+typedef void * (* ImplCreateUnicodeContextProc)();
+
+typedef void (* ImplDestroyUnicodeContextProc)(void * pContext);
+
+typedef void (* ImplResetUnicodeContextProc)(void * pContext);
+
+struct ImplTextConverter
+{
+ void const * mpConvertData;
+ ImplConvertToUnicodeProc mpConvertTextToUnicodeProc;
+ ImplConvertToTextProc mpConvertUnicodeToTextProc;
+ ImplCreateTextContextProc mpCreateTextToUnicodeContext;
+ ImplDestroyTextContextProc mpDestroyTextToUnicodeContext;
+ ImplResetTextContextProc mpResetTextToUnicodeContext;
+ ImplCreateUnicodeContextProc mpCreateUnicodeToTextContext;
+ ImplDestroyUnicodeContextProc mpDestroyUnicodeToTextContext;
+ ImplResetUnicodeContextProc mpResetUnicodeToTextContext;
+};
+
+/* ----------------------------- */
+/* - TextEncoding - Structures - */
+/* ----------------------------- */
+
+struct SAL_DLLPUBLIC_RTTI ImplTextEncodingData
+{
+ ImplTextConverter maConverter;
+ char const * mpBestUnixCharset;
+ char const * mpBestMimeCharset;
+ sal_uInt8 mnMinCharSize;
+ sal_uInt8 mnMaxCharSize;
+ sal_uInt8 mnAveCharSize;
+ sal_uInt8 mnBestWindowsCharset;
+ sal_uInt32 mnInfoFlags;
+};
+
+/* ----------------------------------- */
+/* - TextConverter - Byte-Structures - */
+/* ----------------------------------- */
+
+struct ImplUniCharTabData
+{
+ sal_uInt16 mnUniChar;
+ unsigned char mnChar;
+ unsigned char mnChar2;
+ // to cater for mappings like MS1258 with 1--2 bytes per Unicode char,
+ // 0 if unused
+};
+
+struct ImplByteConvertData
+{
+ const sal_uInt16* mpToUniTab1;
+ const sal_uInt16* mpToUniTab2;
+ const unsigned char* mpToCharTab1;
+ const unsigned char* mpToCharTab2;
+ const ImplUniCharTabData* mpToCharExTab;
+ unsigned char mnToUniStart1;
+ unsigned char mnToUniEnd1;
+ unsigned char mnToUniStart2;
+ unsigned char mnToUniEnd2;
+ sal_uInt16 mnToCharStart1;
+ sal_uInt16 mnToCharEnd1;
+ sal_uInt16 mnToCharStart2;
+ sal_uInt16 mnToCharEnd2;
+ sal_uInt16 mnToCharExCount;
+};
+
+/* ----------------------------------- */
+/* - TextConverter - DBCS-Structures - */
+/* ----------------------------------- */
+
+struct ImplDBCSEUDCData
+{
+ unsigned char mnLeadStart;
+ unsigned char mnLeadEnd;
+ unsigned char mnTrail1Start;
+ unsigned char mnTrail1End;
+ unsigned char mnTrail2Start;
+ unsigned char mnTrail2End;
+ unsigned char mnTrail3Start;
+ unsigned char mnTrail3End;
+ unsigned char mnTrailCount;
+ sal_uInt16 mnTrailRangeCount;
+ sal_uInt16 mnUniStart;
+ sal_uInt16 mnUniEnd;
+};
+
+struct ImplDBCSToUniLeadTab
+{
+ sal_uInt16 mnUniChar;
+ sal_uInt8 mnTrailStart;
+ sal_uInt8 mnTrailEnd;
+ const sal_uInt16* mpToUniTrailTab;
+};
+
+struct ImplUniToDBCSHighTab
+{
+ sal_uInt8 mnLowStart;
+ sal_uInt8 mnLowEnd;
+ const sal_uInt16* mpToUniTrailTab;
+};
+
+struct ImplDBCSConvertData
+{
+ const ImplDBCSToUniLeadTab* mpToUniLeadTab;
+ const ImplUniToDBCSHighTab* mpToDBCSHighTab;
+ const ImplDBCSEUDCData* mpEUDCTab;
+ sal_uInt16 mnEUDCCount;
+ unsigned char mnLeadStart;
+ unsigned char mnLeadEnd;
+ unsigned char mnTrailStart;
+ unsigned char mnTrailEnd;
+};
+
+/* ---------------------------------- */
+/* - TextConverter - EUC-Structures - */
+/* ---------------------------------- */
+
+struct ImplEUCJPConvertData
+{
+ const ImplDBCSToUniLeadTab* mpJIS0208ToUniLeadTab;
+ const ImplDBCSToUniLeadTab* mpJIS0212ToUniLeadTab;
+ const ImplUniToDBCSHighTab* mpUniToJIS0208HighTab;
+ const ImplUniToDBCSHighTab* mpUniToJIS0212HighTab;
+};
+
+/* --------------------------------- */
+/* - TextConverter - HelpFunctions - */
+/* --------------------------------- */
+
+inline sal_Unicode ImplGetUndefinedUnicodeChar(
+ unsigned char cChar, sal_uInt32 nFlags)
+{
+ return ((nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK)
+ == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE) ?
+ RTL_TEXTCVT_BYTE_PRIVATE_START + cChar :
+ RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+}
+
+/* ----------------------------- */
+/* - TextConverter - Functions - */
+/* ----------------------------- */
+
+sal_Size ImplDBCSToUnicode( const void* pData, void* pContext,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes );
+sal_Size ImplUnicodeToDBCS( const void* pData, void* pContext,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars );
+sal_Size ImplEUCJPToUnicode( const void* pData,
+ void* pContext,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes );
+sal_Size ImplUnicodeToEUCJP( const void* pData,
+ void* pContext,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars );
+void* ImplUTF7CreateUTF7TextToUnicodeContext();
+void ImplUTF7DestroyTextToUnicodeContext( void* pContext );
+void ImplUTF7ResetTextToUnicodeContext( void* pContext );
+sal_Size ImplUTF7ToUnicode( const void* pData, void* pContext,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes );
+void* ImplUTF7CreateUnicodeToTextContext();
+void ImplUTF7DestroyUnicodeToTextContext( void* pContext );
+void ImplUTF7ResetUnicodeToTextContext( void* pContext );
+sal_Size ImplUnicodeToUTF7( const void* pData, void* pContext,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars );
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/tencinfo.cxx b/sal/textenc/tencinfo.cxx
new file mode 100644
index 000000000..61439b489
--- /dev/null
+++ b/sal/textenc/tencinfo.cxx
@@ -0,0 +1,982 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cstddef>
+#include <cstring>
+
+#include <rtl/tencinfo.h>
+
+#include "gettextencodingdata.hxx"
+#include "tenchelp.hxx"
+#include <memory>
+
+sal_Bool SAL_CALL rtl_isOctetTextEncoding(rtl_TextEncoding nEncoding)
+{
+ return
+ nEncoding > RTL_TEXTENCODING_DONTKNOW
+ && nEncoding != 9 // RTL_TEXTENCODING_SYSTEM
+ && nEncoding <= RTL_TEXTENCODING_ADOBE_DINGBATS; // always update this!
+}
+
+/* ======================================================================= */
+
+static void Impl_toAsciiLower( const char* pName, char* pBuf )
+{
+ while ( *pName )
+ {
+ /* A-Z */
+ if ( (*pName >= 0x41) && (*pName <= 0x5A) )
+ *pBuf = (*pName)+0x20; /* toAsciiLower */
+ else
+ *pBuf = *pName;
+
+ pBuf++;
+ pName++;
+ }
+
+ *pBuf = '\0';
+}
+
+/* ----------------------------------------------------------------------- */
+
+static void Impl_toAsciiLowerAndRemoveNonAlphanumeric( const char* pName, char* pBuf )
+{
+ while ( *pName )
+ {
+ /* A-Z */
+ if ( (*pName >= 0x41) && (*pName <= 0x5A) )
+ {
+ *pBuf = (*pName)+0x20; /* toAsciiLower */
+ pBuf++;
+ }
+ /* a-z, 0-9 */
+ else if ( ((*pName >= 0x61) && (*pName <= 0x7A)) ||
+ ((*pName >= 0x30) && (*pName <= 0x39)) )
+ {
+ *pBuf = *pName;
+ pBuf++;
+ }
+
+ pName++;
+ }
+
+ *pBuf = '\0';
+}
+
+/* ----------------------------------------------------------------------- */
+
+/* pMatchStr must match with all characters in pCompStr */
+static bool Impl_matchString( const char* pCompStr, const char* pMatchStr )
+{
+ /* We test only for end in MatchStr, because the last 0 character from */
+ /* pCompStr is unequal a character in MatchStr, so the loop terminates */
+ while ( *pMatchStr )
+ {
+ if ( *pCompStr != *pMatchStr )
+ return false;
+
+ pCompStr++;
+ pMatchStr++;
+ }
+
+ return true;
+}
+
+/* ======================================================================= */
+
+namespace {
+
+struct ImplStrCharsetDef
+{
+ const char* mpCharsetStr;
+ rtl_TextEncoding meTextEncoding;
+};
+
+struct ImplStrFirstPartCharsetDef
+{
+ const char* mpCharsetStr;
+ const ImplStrCharsetDef* mpSecondPartTab;
+};
+
+}
+
+/* ======================================================================= */
+
+sal_Bool SAL_CALL rtl_getTextEncodingInfo( rtl_TextEncoding eTextEncoding, rtl_TextEncodingInfo* pEncInfo )
+{
+ const ImplTextEncodingData* pData;
+
+ pData = Impl_getTextEncodingData( eTextEncoding );
+ if ( !pData )
+ {
+ /* HACK: For not implemented encoding, because not all
+ calls handle the errors */
+ if ( pEncInfo->StructSize < 5 )
+ return false;
+ pEncInfo->MinimumCharSize = 1;
+
+ if ( pEncInfo->StructSize < 6 )
+ return true;
+ pEncInfo->MaximumCharSize = 1;
+
+ if ( pEncInfo->StructSize < 7 )
+ return true;
+ pEncInfo->AverageCharSize = 1;
+
+ if ( pEncInfo->StructSize < 12 )
+ return true;
+ pEncInfo->Flags = 0;
+
+ return false;
+ }
+
+ if ( pEncInfo->StructSize < 5 )
+ return false;
+ pEncInfo->MinimumCharSize = pData->mnMinCharSize;
+
+ if ( pEncInfo->StructSize < 6 )
+ return true;
+ pEncInfo->MaximumCharSize = pData->mnMaxCharSize;
+
+ if ( pEncInfo->StructSize < 7 )
+ return true;
+ pEncInfo->AverageCharSize = pData->mnAveCharSize;
+
+ if ( pEncInfo->StructSize < 12 )
+ return true;
+ pEncInfo->Flags = pData->mnInfoFlags;
+
+ return true;
+}
+
+/* ======================================================================= */
+
+rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromWindowsCharset( sal_uInt8 nWinCharset )
+{
+ rtl_TextEncoding eTextEncoding;
+
+ switch ( nWinCharset )
+ {
+ case 0: eTextEncoding = RTL_TEXTENCODING_MS_1252; break; /* ANSI_CHARSET */
+ case 2: eTextEncoding = RTL_TEXTENCODING_SYMBOL; break; /* SYMBOL_CHARSET */
+ case 77: eTextEncoding = RTL_TEXTENCODING_APPLE_ROMAN; break;/* MAC_CHARSET */
+ case 128: eTextEncoding = RTL_TEXTENCODING_MS_932; break; /* SHIFTJIS_CHARSET */
+ case 129: eTextEncoding = RTL_TEXTENCODING_MS_949; break; /* HANGEUL_CHARSET */
+ case 130: eTextEncoding = RTL_TEXTENCODING_MS_1361; break; /* JOHAB_CHARSET */
+ case 134: eTextEncoding = RTL_TEXTENCODING_MS_936; break; /* GB2312_CHARSET */
+ case 136: eTextEncoding = RTL_TEXTENCODING_MS_950; break; /* CHINESEBIG5_CHARSET */
+ case 161: eTextEncoding = RTL_TEXTENCODING_MS_1253; break; /* GREEK_CHARSET */
+ case 162: eTextEncoding = RTL_TEXTENCODING_MS_1254; break; /* TURKISH_CHARSET */
+ case 163: eTextEncoding = RTL_TEXTENCODING_MS_1258; break; /* VIETNAMESE_CHARSET !!! */
+ case 177: eTextEncoding = RTL_TEXTENCODING_MS_1255; break; /* HEBREW_CHARSET */
+ case 178: eTextEncoding = RTL_TEXTENCODING_MS_1256; break; /* ARABIC_CHARSET */
+ case 186: eTextEncoding = RTL_TEXTENCODING_MS_1257; break; /* BALTIC_CHARSET */
+ case 204: eTextEncoding = RTL_TEXTENCODING_MS_1251; break; /* RUSSIAN_CHARSET */
+ case 222: eTextEncoding = RTL_TEXTENCODING_MS_874; break; /* THAI_CHARSET */
+ case 238: eTextEncoding = RTL_TEXTENCODING_MS_1250; break; /* EASTEUROPE_CHARSET */
+ case 255: eTextEncoding = RTL_TEXTENCODING_IBM_850; break; /* OEM_CHARSET */
+ default: eTextEncoding = RTL_TEXTENCODING_DONTKNOW; break;
+ }
+
+ return eTextEncoding;
+}
+
+/* ----------------------------------------------------------------------- */
+
+rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromUnixCharset( const char* pUnixCharset )
+{
+ /* See <ftp://ftp.x.org/pub/DOCS/registry>, section 14 ("Font Charset
+ * (Registry and Encoding) Names").
+ */
+
+ /* All Identifiers in the tables are lower case The function search */
+ /* for the first matching string in the tables. */
+ /* Sort order: unique (first 14, then 1), important */
+
+ static ImplStrCharsetDef const aUnixCharsetISOTab[] =
+ {
+ { "15", RTL_TEXTENCODING_ISO_8859_15 },
+ { "14", RTL_TEXTENCODING_ISO_8859_14 },
+ { "13", RTL_TEXTENCODING_ISO_8859_13 },
+ { "11", RTL_TEXTENCODING_TIS_620 },
+ { "10", RTL_TEXTENCODING_ISO_8859_10 },
+ { "1", RTL_TEXTENCODING_ISO_8859_1 },
+ { "2", RTL_TEXTENCODING_ISO_8859_2 },
+ { "3", RTL_TEXTENCODING_ISO_8859_3 },
+ { "4", RTL_TEXTENCODING_ISO_8859_4 },
+ { "5", RTL_TEXTENCODING_ISO_8859_5 },
+ { "6", RTL_TEXTENCODING_ISO_8859_6 },
+ { "7", RTL_TEXTENCODING_ISO_8859_7 },
+ { "8", RTL_TEXTENCODING_ISO_8859_8 },
+ { "9", RTL_TEXTENCODING_ISO_8859_9 },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetADOBETab[] =
+ {
+ { "fontspecific", RTL_TEXTENCODING_SYMBOL },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetMSTab[] =
+ {
+ { "1252", RTL_TEXTENCODING_MS_1252 },
+ { "1250", RTL_TEXTENCODING_MS_1250 },
+ { "1251", RTL_TEXTENCODING_MS_1251 },
+ { "1253", RTL_TEXTENCODING_MS_1253 },
+ { "1254", RTL_TEXTENCODING_MS_1254 },
+ { "1255", RTL_TEXTENCODING_MS_1255 },
+ { "1256", RTL_TEXTENCODING_MS_1256 },
+ { "1257", RTL_TEXTENCODING_MS_1257 },
+ { "1258", RTL_TEXTENCODING_MS_1258 },
+ { "932", RTL_TEXTENCODING_MS_932 },
+ { "936", RTL_TEXTENCODING_MS_936 },
+ { "949", RTL_TEXTENCODING_MS_949 },
+ { "950", RTL_TEXTENCODING_MS_950 },
+ { "1361", RTL_TEXTENCODING_MS_1361 },
+ { "cp1252", RTL_TEXTENCODING_MS_1252 },
+ { "cp1250", RTL_TEXTENCODING_MS_1250 },
+ { "cp1251", RTL_TEXTENCODING_MS_1251 },
+ { "cp1253", RTL_TEXTENCODING_MS_1253 },
+ { "cp1254", RTL_TEXTENCODING_MS_1254 },
+ { "cp1255", RTL_TEXTENCODING_MS_1255 },
+ { "cp1256", RTL_TEXTENCODING_MS_1256 },
+ { "cp1257", RTL_TEXTENCODING_MS_1257 },
+ { "cp1258", RTL_TEXTENCODING_MS_1258 },
+ { "cp932", RTL_TEXTENCODING_MS_932 },
+ { "cp936", RTL_TEXTENCODING_MS_936 },
+ { "cp949", RTL_TEXTENCODING_MS_949 },
+ { "cp950", RTL_TEXTENCODING_MS_950 },
+ { "cp1361", RTL_TEXTENCODING_MS_1361 },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetIBMTab[] =
+ {
+ { "437", RTL_TEXTENCODING_IBM_437 },
+ { "850", RTL_TEXTENCODING_IBM_850 },
+ { "860", RTL_TEXTENCODING_IBM_860 },
+ { "861", RTL_TEXTENCODING_IBM_861 },
+ { "863", RTL_TEXTENCODING_IBM_863 },
+ { "865", RTL_TEXTENCODING_IBM_865 },
+ { "737", RTL_TEXTENCODING_IBM_737 },
+ { "775", RTL_TEXTENCODING_IBM_775 },
+ { "852", RTL_TEXTENCODING_IBM_852 },
+ { "855", RTL_TEXTENCODING_IBM_855 },
+ { "857", RTL_TEXTENCODING_IBM_857 },
+ { "862", RTL_TEXTENCODING_IBM_862 },
+ { "864", RTL_TEXTENCODING_IBM_864 },
+ { "866", RTL_TEXTENCODING_IBM_866 },
+ { "869", RTL_TEXTENCODING_IBM_869 },
+ { "874", RTL_TEXTENCODING_MS_874 },
+ { "1004", RTL_TEXTENCODING_MS_1252 },
+ { "65400", RTL_TEXTENCODING_SYMBOL },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetKOI8Tab[] =
+ {
+ { "r", RTL_TEXTENCODING_KOI8_R },
+ { "u", RTL_TEXTENCODING_KOI8_U },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetJISX0208Tab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_JIS_X_0208 }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetJISX0201Tab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_JIS_X_0201 }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetJISX0212Tab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_JIS_X_0212 }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetGBTab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_GB_2312 }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetGBKTab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_GBK }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetBIG5Tab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_BIG5 }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetKSC56011987Tab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_EUC_KR }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetKSC56011992Tab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_MS_1361 }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetISO10646Tab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_UNICODE }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetUNICODETab[] =
+ {
+/* Currently every Unicode Encoding is for us Unicode */
+/* { "fontspecific", RTL_TEXTENCODING_UNICODE }, */
+ { nullptr, RTL_TEXTENCODING_UNICODE }
+ };
+
+ static ImplStrCharsetDef const aUnixCharsetSymbolTab[] =
+ {
+ { nullptr, RTL_TEXTENCODING_SYMBOL }
+ };
+
+ /* See <http://cvs.freedesktop.org/xorg/xc/fonts/encodings/iso8859-11.enc?
+ rev=1.1.1.1>: */
+ static ImplStrCharsetDef const aUnixCharsetTIS620Tab[] =
+ {
+ { "0", RTL_TEXTENCODING_TIS_620 },
+ { "2529", RTL_TEXTENCODING_TIS_620 },
+ { "2533", RTL_TEXTENCODING_TIS_620 },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+ static ImplStrCharsetDef const aUnixCharsetTIS6202529Tab[] =
+ {
+ { "1", RTL_TEXTENCODING_TIS_620 },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+ static ImplStrCharsetDef const aUnixCharsetTIS6202533Tab[] =
+ {
+ { "0", RTL_TEXTENCODING_TIS_620 },
+ { "1", RTL_TEXTENCODING_TIS_620 },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+
+ static ImplStrFirstPartCharsetDef const aUnixCharsetFirstPartTab[] =
+ {
+ { "iso8859", aUnixCharsetISOTab },
+ { "adobe", aUnixCharsetADOBETab },
+ { "ansi", aUnixCharsetMSTab },
+ { "microsoft", aUnixCharsetMSTab },
+ { "ibm", aUnixCharsetIBMTab },
+ { "koi8", aUnixCharsetKOI8Tab },
+ { "jisx0208", aUnixCharsetJISX0208Tab },
+ { "jisx0208.1983", aUnixCharsetJISX0208Tab },
+ { "jisx0201", aUnixCharsetJISX0201Tab },
+ { "jisx0201.1976", aUnixCharsetJISX0201Tab },
+ { "jisx0212", aUnixCharsetJISX0212Tab },
+ { "jisx0212.1990", aUnixCharsetJISX0212Tab },
+ { "gb2312", aUnixCharsetGBTab },
+ { "gbk", aUnixCharsetGBKTab },
+ { "big5", aUnixCharsetBIG5Tab },
+ { "iso10646", aUnixCharsetISO10646Tab },
+/* { "unicode", aUnixCharsetUNICODETab }, */ /* fonts contain only default chars */
+ { "sunolcursor", aUnixCharsetSymbolTab },
+ { "sunolglyph", aUnixCharsetSymbolTab },
+ { "iso10646", aUnixCharsetUNICODETab },
+ { "ksc5601.1987", aUnixCharsetKSC56011987Tab },
+ { "ksc5601.1992", aUnixCharsetKSC56011992Tab },
+ { "tis620.2529", aUnixCharsetTIS6202529Tab },
+ { "tis620.2533", aUnixCharsetTIS6202533Tab },
+ { "tis620", aUnixCharsetTIS620Tab },
+/* { "sunudcja.1997", }, */
+/* { "sunudcko.1997", }, */
+/* { "sunudczh.1997", }, */
+/* { "sunudczhtw.1997", }, */
+ { nullptr, nullptr }
+ };
+
+ rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW;
+ char* pTempBuf;
+ sal_uInt32 nBufLen = strlen( pUnixCharset )+1;
+ const char* pFirstPart;
+ const char* pSecondPart;
+
+ /* Alloc Buffer and map to lower case */
+ std::unique_ptr<char[]> pBuf(new char[nBufLen]);
+ Impl_toAsciiLower( pUnixCharset, pBuf.get() );
+
+ /* Search FirstPart */
+ pFirstPart = pBuf.get();
+ pSecondPart = nullptr;
+ pTempBuf = pBuf.get();
+ while ( *pTempBuf )
+ {
+ if ( *pTempBuf == '-' )
+ {
+ *pTempBuf = '\0';
+ pSecondPart = pTempBuf+1;
+ break;
+ }
+
+ pTempBuf++;
+ }
+
+ /* found part separator */
+ if ( pSecondPart )
+ {
+ /* Search for the part tab */
+ const ImplStrFirstPartCharsetDef* pFirstPartData = aUnixCharsetFirstPartTab;
+ while ( pFirstPartData->mpCharsetStr )
+ {
+ if ( Impl_matchString( pFirstPart, pFirstPartData->mpCharsetStr ) )
+ {
+ /* Search for the charset in the second part tab */
+ const ImplStrCharsetDef* pData = pFirstPartData->mpSecondPartTab;
+ while ( pData->mpCharsetStr )
+ {
+ if ( Impl_matchString( pSecondPart, pData->mpCharsetStr ) )
+ {
+ break;
+ }
+
+ pData++;
+ }
+
+ /* use default encoding for first part */
+ eEncoding = pData->meTextEncoding;
+ break;
+ }
+
+ pFirstPartData++;
+ }
+ }
+
+ return eEncoding;
+}
+
+/* ----------------------------------------------------------------------- */
+
+rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromMimeCharset( const char* pMimeCharset )
+{
+ /* All Identifiers are in lower case and contain only alphanumeric */
+ /* characters. The function search for the first equal string in */
+ /* the table. In this table are only the most used mime types. */
+ /* Sort order: important */
+ static ImplStrCharsetDef const aVIPMimeCharsetTab[] =
+ {
+ { "usascii", RTL_TEXTENCODING_ASCII_US },
+ { "utf8", RTL_TEXTENCODING_UTF8 },
+ { "utf7", RTL_TEXTENCODING_UTF7 },
+ { "iso88591", RTL_TEXTENCODING_ISO_8859_1 },
+ { "iso88592", RTL_TEXTENCODING_ISO_8859_2 },
+ { "iso88593", RTL_TEXTENCODING_ISO_8859_3 },
+ { "iso88594", RTL_TEXTENCODING_ISO_8859_4 },
+ { "iso88595", RTL_TEXTENCODING_ISO_8859_5 },
+ { "iso88596", RTL_TEXTENCODING_ISO_8859_6 },
+ { "iso88597", RTL_TEXTENCODING_ISO_8859_7 },
+ { "iso88598", RTL_TEXTENCODING_ISO_8859_8 },
+ { "iso88599", RTL_TEXTENCODING_ISO_8859_9 },
+ { "iso885910", RTL_TEXTENCODING_ISO_8859_10 },
+ { "iso885913", RTL_TEXTENCODING_ISO_8859_13 },
+ { "iso885914", RTL_TEXTENCODING_ISO_8859_14 },
+ { "iso885915", RTL_TEXTENCODING_ISO_8859_15 },
+ { "iso2022jp", RTL_TEXTENCODING_ISO_2022_JP },
+ { "iso2022jp2", RTL_TEXTENCODING_ISO_2022_JP },
+ { "iso2022cn", RTL_TEXTENCODING_ISO_2022_CN },
+ { "iso2022cnext", RTL_TEXTENCODING_ISO_2022_CN },
+ { "iso2022kr", RTL_TEXTENCODING_ISO_2022_KR },
+ { "eucjp", RTL_TEXTENCODING_EUC_JP },
+ { "shiftjis", RTL_TEXTENCODING_SHIFT_JIS },
+ { "mskanji", RTL_TEXTENCODING_MS_932 },
+ { "gb2312", RTL_TEXTENCODING_GB_2312 },
+ { "cngb", RTL_TEXTENCODING_GB_2312 },
+ { "big5", RTL_TEXTENCODING_BIG5 },
+ { "cnbig5", RTL_TEXTENCODING_BIG5 },
+ { "cngb12345", RTL_TEXTENCODING_GBT_12345 },
+ { "euckr", RTL_TEXTENCODING_EUC_KR },
+ { "koi8r", RTL_TEXTENCODING_KOI8_R },
+ { "windows1252", RTL_TEXTENCODING_MS_1252 },
+ { "windows1250", RTL_TEXTENCODING_MS_1250 },
+ { "windows1251", RTL_TEXTENCODING_MS_1251 },
+ { "windows1253", RTL_TEXTENCODING_MS_1253 },
+ { "windows1254", RTL_TEXTENCODING_MS_1254 },
+ { "windows1255", RTL_TEXTENCODING_MS_1255 },
+ { "windows1256", RTL_TEXTENCODING_MS_1256 },
+ { "windows1257", RTL_TEXTENCODING_MS_1257 },
+ { "windows1258", RTL_TEXTENCODING_MS_1258 },
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+
+ /* All Identifiers are in lower case and contain only alphanumeric */
+ /* characters. The function search for the first matching string in */
+ /* the table. */
+ /* Sort order: unique (first iso885914, then iso88591), important */
+ static ImplStrCharsetDef const aMimeCharsetTab[] =
+ {
+ { "unicode11utf7", RTL_TEXTENCODING_UTF7 },
+ { "caunicode11utf7", RTL_TEXTENCODING_UTF7 },
+ { "iso88591windows30", RTL_TEXTENCODING_ISO_8859_1 },
+ { "iso88591win", RTL_TEXTENCODING_MS_1252 },
+ { "iso88592win", RTL_TEXTENCODING_MS_1250 },
+ { "iso88599win", RTL_TEXTENCODING_MS_1254 },
+ { "iso885915", RTL_TEXTENCODING_ISO_8859_15 },
+ { "iso885914", RTL_TEXTENCODING_ISO_8859_14 },
+ { "iso885913", RTL_TEXTENCODING_ISO_8859_13 },
+ { "iso885911", RTL_TEXTENCODING_TIS_620 },
+ /* This is no official MIME character set name, but it might be in
+ use in Thailand. */
+ { "iso885910", RTL_TEXTENCODING_ISO_8859_10 },
+ { "iso88591", RTL_TEXTENCODING_ISO_8859_1 },
+ { "iso88592", RTL_TEXTENCODING_ISO_8859_2 },
+ { "iso88593", RTL_TEXTENCODING_ISO_8859_3 },
+ { "iso88594", RTL_TEXTENCODING_ISO_8859_4 },
+ { "iso88595", RTL_TEXTENCODING_ISO_8859_5 },
+ { "iso88596", RTL_TEXTENCODING_ISO_8859_6 },
+ { "iso88597", RTL_TEXTENCODING_ISO_8859_7 },
+ { "iso88598", RTL_TEXTENCODING_ISO_8859_8 },
+ { "iso88599", RTL_TEXTENCODING_ISO_8859_9 },
+ { "isoir100", RTL_TEXTENCODING_ISO_8859_1 },
+ { "latin1", RTL_TEXTENCODING_ISO_8859_1 },
+ { "l1", RTL_TEXTENCODING_ISO_8859_1 },
+ { "cp819", RTL_TEXTENCODING_ISO_8859_1 },
+ { "ibm819", RTL_TEXTENCODING_ISO_8859_1 },
+ { "csisolatin1", RTL_TEXTENCODING_ISO_8859_1 },
+ { "isoir101", RTL_TEXTENCODING_ISO_8859_2 },
+ { "latin2", RTL_TEXTENCODING_ISO_8859_2 },
+ { "l2", RTL_TEXTENCODING_ISO_8859_2 },
+ { "csisolatin2", RTL_TEXTENCODING_ISO_8859_2 },
+ { "isoir109", RTL_TEXTENCODING_ISO_8859_3 },
+ { "latin3", RTL_TEXTENCODING_ISO_8859_3 },
+ { "l3", RTL_TEXTENCODING_ISO_8859_3 },
+ { "csisolatin3", RTL_TEXTENCODING_ISO_8859_3 },
+ { "isoir110", RTL_TEXTENCODING_ISO_8859_4 },
+ { "latin4", RTL_TEXTENCODING_ISO_8859_4 },
+ { "l4", RTL_TEXTENCODING_ISO_8859_4 },
+ { "csisolatin4", RTL_TEXTENCODING_ISO_8859_4 },
+ { "isoir144", RTL_TEXTENCODING_ISO_8859_5 },
+ { "cyrillicasian", RTL_TEXTENCODING_PT154 },
+ { "cyrillic", RTL_TEXTENCODING_ISO_8859_5 },
+ { "csisolatincyrillic", RTL_TEXTENCODING_ISO_8859_5 },
+ { "isoir127", RTL_TEXTENCODING_ISO_8859_6 },
+ { "arabic", RTL_TEXTENCODING_ISO_8859_6 },
+ { "csisolatinarabic", RTL_TEXTENCODING_ISO_8859_6 },
+ { "ecma114", RTL_TEXTENCODING_ISO_8859_6 },
+ { "asmo708", RTL_TEXTENCODING_ISO_8859_6 },
+ { "isoir126", RTL_TEXTENCODING_ISO_8859_7 },
+ { "greek", RTL_TEXTENCODING_ISO_8859_7 },
+ { "csisolatingreek", RTL_TEXTENCODING_ISO_8859_7 },
+ { "elot928", RTL_TEXTENCODING_ISO_8859_7 },
+ { "ecma118", RTL_TEXTENCODING_ISO_8859_7 },
+ { "isoir138", RTL_TEXTENCODING_ISO_8859_8 },
+ { "hebrew", RTL_TEXTENCODING_ISO_8859_8 },
+ { "csisolatinhebrew", RTL_TEXTENCODING_ISO_8859_8 },
+ { "isoir148", RTL_TEXTENCODING_ISO_8859_9 },
+ { "latin5", RTL_TEXTENCODING_ISO_8859_9 },
+ { "l5", RTL_TEXTENCODING_ISO_8859_9 },
+ { "csisolatin5", RTL_TEXTENCODING_ISO_8859_9 },
+ { "cswindows30latin1", RTL_TEXTENCODING_ISO_8859_1 },
+ { "cswindows30latin1", RTL_TEXTENCODING_ISO_8859_1 },
+ { "cswindows31latin1", RTL_TEXTENCODING_MS_1252 },
+ { "cswindows31latin2", RTL_TEXTENCODING_MS_1250 },
+ { "cswindows31latin5", RTL_TEXTENCODING_MS_1254 },
+ { "iso10646us", RTL_TEXTENCODING_ASCII_US },
+ { "iso646irv", RTL_TEXTENCODING_ASCII_US },
+ { "cskoi8r", RTL_TEXTENCODING_KOI8_R },
+ { "ibm437", RTL_TEXTENCODING_IBM_437 },
+ { "cp437", RTL_TEXTENCODING_IBM_437 },
+ { "437", RTL_TEXTENCODING_IBM_437 },
+ { "cspc8codepage437", RTL_TEXTENCODING_IBM_437 },
+ { "ansix34", RTL_TEXTENCODING_ASCII_US },
+ { "ibm367", RTL_TEXTENCODING_ASCII_US },
+ { "cp367", RTL_TEXTENCODING_ASCII_US },
+ { "csascii", RTL_TEXTENCODING_ASCII_US },
+ { "ibm775", RTL_TEXTENCODING_IBM_775 },
+ { "cp775", RTL_TEXTENCODING_IBM_775 },
+ { "cspc775baltic", RTL_TEXTENCODING_IBM_775 },
+ { "ibm850", RTL_TEXTENCODING_IBM_850 },
+ { "cp850", RTL_TEXTENCODING_IBM_850 },
+ { "850", RTL_TEXTENCODING_IBM_850 },
+ { "cspc850multilingual", RTL_TEXTENCODING_IBM_850 },
+/* { "ibm851", RTL_TEXTENCODING_IBM_851 }, */
+/* { "cp851", RTL_TEXTENCODING_IBM_851 }, */
+/* { "851", RTL_TEXTENCODING_IBM_851 }, */
+/* { "csibm851", RTL_TEXTENCODING_IBM_851 }, */
+ { "ibm852", RTL_TEXTENCODING_IBM_852 },
+ { "cp852", RTL_TEXTENCODING_IBM_852 },
+ { "852", RTL_TEXTENCODING_IBM_852 },
+ { "cspcp852", RTL_TEXTENCODING_IBM_852 },
+ { "ibm855", RTL_TEXTENCODING_IBM_855 },
+ { "cp855", RTL_TEXTENCODING_IBM_855 },
+ { "855", RTL_TEXTENCODING_IBM_855 },
+ { "csibm855", RTL_TEXTENCODING_IBM_855 },
+ { "ibm857", RTL_TEXTENCODING_IBM_857 },
+ { "cp857", RTL_TEXTENCODING_IBM_857 },
+ { "857", RTL_TEXTENCODING_IBM_857 },
+ { "csibm857", RTL_TEXTENCODING_IBM_857 },
+ { "ibm860", RTL_TEXTENCODING_IBM_860 },
+ { "cp860", RTL_TEXTENCODING_IBM_860 },
+ { "860", RTL_TEXTENCODING_IBM_860 },
+ { "csibm860", RTL_TEXTENCODING_IBM_860 },
+ { "ibm861", RTL_TEXTENCODING_IBM_861 },
+ { "cp861", RTL_TEXTENCODING_IBM_861 },
+ { "861", RTL_TEXTENCODING_IBM_861 },
+ { "csis", RTL_TEXTENCODING_IBM_861 },
+ { "csibm861", RTL_TEXTENCODING_IBM_861 },
+ { "ibm862", RTL_TEXTENCODING_IBM_862 },
+ { "cp862", RTL_TEXTENCODING_IBM_862 },
+ { "862", RTL_TEXTENCODING_IBM_862 },
+ { "cspc862latinhebrew", RTL_TEXTENCODING_IBM_862 },
+ { "ibm863", RTL_TEXTENCODING_IBM_863 },
+ { "cp863", RTL_TEXTENCODING_IBM_863 },
+ { "863", RTL_TEXTENCODING_IBM_863 },
+ { "csibm863", RTL_TEXTENCODING_IBM_863 },
+ { "ibm864", RTL_TEXTENCODING_IBM_864 },
+ { "cp864", RTL_TEXTENCODING_IBM_864 },
+ { "864", RTL_TEXTENCODING_IBM_864 },
+ { "csibm864", RTL_TEXTENCODING_IBM_864 },
+ { "ibm865", RTL_TEXTENCODING_IBM_865 },
+ { "cp865", RTL_TEXTENCODING_IBM_865 },
+ { "865", RTL_TEXTENCODING_IBM_865 },
+ { "csibm865", RTL_TEXTENCODING_IBM_865 },
+ { "ibm866", RTL_TEXTENCODING_IBM_866 },
+ { "cp866", RTL_TEXTENCODING_IBM_866 },
+ { "866", RTL_TEXTENCODING_IBM_866 },
+ { "csibm866", RTL_TEXTENCODING_IBM_866 },
+/* { "ibm868", RTL_TEXTENCODING_IBM_868 }, */
+/* { "cp868", RTL_TEXTENCODING_IBM_868 }, */
+/* { "cpar", RTL_TEXTENCODING_IBM_868 }, */
+/* { "csibm868", RTL_TEXTENCODING_IBM_868 }, */
+ { "ibm869", RTL_TEXTENCODING_IBM_869 },
+ { "cp869", RTL_TEXTENCODING_IBM_869 },
+ { "869", RTL_TEXTENCODING_IBM_869 },
+ { "cpgr", RTL_TEXTENCODING_IBM_869 },
+ { "csibm869", RTL_TEXTENCODING_IBM_869 },
+ { "ibm869", RTL_TEXTENCODING_IBM_869 },
+ { "cp869", RTL_TEXTENCODING_IBM_869 },
+ { "869", RTL_TEXTENCODING_IBM_869 },
+ { "cpgr", RTL_TEXTENCODING_IBM_869 },
+ { "csibm869", RTL_TEXTENCODING_IBM_869 },
+ { "mac", RTL_TEXTENCODING_APPLE_ROMAN },
+ { "csmacintosh", RTL_TEXTENCODING_APPLE_ROMAN },
+ { "shiftjis", RTL_TEXTENCODING_SHIFT_JIS },
+ { "mskanji", RTL_TEXTENCODING_MS_932 },
+ { "csshiftjis", RTL_TEXTENCODING_SHIFT_JIS },
+ { "jisx0208", RTL_TEXTENCODING_JIS_X_0208 },
+ { "jisc62261983", RTL_TEXTENCODING_JIS_X_0208 },
+ { "csiso87jisx0208", RTL_TEXTENCODING_JIS_X_0208 },
+ { "isoir86", RTL_TEXTENCODING_JIS_X_0208 },
+ { "x0208", RTL_TEXTENCODING_JIS_X_0208 },
+ { "jisx0201", RTL_TEXTENCODING_JIS_X_0201 },
+ { "cshalfwidthkatakana", RTL_TEXTENCODING_JIS_X_0201 },
+ { "x0201", RTL_TEXTENCODING_JIS_X_0201 },
+ { "jisx0212", RTL_TEXTENCODING_JIS_X_0212 },
+ { "csiso159jisx0212", RTL_TEXTENCODING_JIS_X_0212 },
+ { "isoir159", RTL_TEXTENCODING_JIS_X_0208 },
+ { "x0212", RTL_TEXTENCODING_JIS_X_0212 },
+ { "isoir6", RTL_TEXTENCODING_ASCII_US },
+ { "xsjis", RTL_TEXTENCODING_SHIFT_JIS },
+ { "sjis", RTL_TEXTENCODING_SHIFT_JIS },
+ { "ascii", RTL_TEXTENCODING_ASCII_US },
+ { "us", RTL_TEXTENCODING_ASCII_US },
+ { "gb180302000", RTL_TEXTENCODING_GB_18030 },
+ /* This is no actual MIME character set name, it is only in here
+ for backwards compatibility (before "GB18030" was officially
+ registered with IANA, this code contained some guesses of what
+ would become official names for GB18030). */
+ { "gb18030", RTL_TEXTENCODING_GB_18030 },
+ { "big5hkscs", RTL_TEXTENCODING_BIG5_HKSCS },
+ { "tis620", RTL_TEXTENCODING_TIS_620 },
+ { "gbk", RTL_TEXTENCODING_GBK },
+ { "cp936", RTL_TEXTENCODING_GBK },
+ { "ms936", RTL_TEXTENCODING_GBK },
+ { "windows936", RTL_TEXTENCODING_GBK },
+ { "cp874", RTL_TEXTENCODING_MS_874 },
+ /* This is no official MIME character set name, but it might be in
+ use in Thailand. */
+ { "ms874", RTL_TEXTENCODING_MS_874 },
+ /* This is no official MIME character set name, but it might be in
+ use in Thailand. */
+ { "windows874", RTL_TEXTENCODING_MS_874 },
+ /* This is no official MIME character set name, but it might be in
+ use in Thailand. */
+ { "koi8u", RTL_TEXTENCODING_KOI8_U },
+ { "cpis", RTL_TEXTENCODING_IBM_861 },
+ { "ksc56011987", RTL_TEXTENCODING_MS_949 },
+ { "isoir149", RTL_TEXTENCODING_MS_949 },
+ { "ksc56011989", RTL_TEXTENCODING_MS_949 },
+ { "ksc5601", RTL_TEXTENCODING_MS_949 },
+ { "korean", RTL_TEXTENCODING_MS_949 },
+ { "csksc56011987", RTL_TEXTENCODING_MS_949 },
+ /* Map KS_C_5601-1987 and aliases to MS-949 instead of EUC-KR, as
+ this character set identifier seems to be prominently used by MS
+ to stand for KS C 5601 plus MS-949 extensions */
+ { "latin9", RTL_TEXTENCODING_ISO_8859_15 },
+ { "adobestandardencoding", RTL_TEXTENCODING_ADOBE_STANDARD },
+ { "csadobestandardencoding", RTL_TEXTENCODING_ADOBE_STANDARD },
+ { "adobesymbolencoding", RTL_TEXTENCODING_ADOBE_SYMBOL },
+ { "cshppsmath", RTL_TEXTENCODING_ADOBE_SYMBOL },
+ { "ptcp154", RTL_TEXTENCODING_PT154 },
+ { "csptcp154", RTL_TEXTENCODING_PT154 },
+ { "pt154", RTL_TEXTENCODING_PT154 },
+ { "cp154", RTL_TEXTENCODING_PT154 },
+ { "xisciide", RTL_TEXTENCODING_ISCII_DEVANAGARI },
+ /* This is not an official MIME character set name, but is in use by
+ various windows APIs. */
+ { nullptr, RTL_TEXTENCODING_DONTKNOW }
+ };
+
+ rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW;
+ const ImplStrCharsetDef* pData = aVIPMimeCharsetTab;
+ sal_uInt32 nBufLen = strlen( pMimeCharset )+1;
+
+ /* Alloc Buffer and map to lower case and remove non alphanumeric chars */
+ std::unique_ptr<char[]> pBuf(new char[nBufLen]);
+ Impl_toAsciiLowerAndRemoveNonAlphanumeric( pMimeCharset, pBuf.get() );
+
+ /* Search for equal in the VIP table */
+ while ( pData->mpCharsetStr )
+ {
+ if ( strcmp( pBuf.get(), pData->mpCharsetStr ) == 0 )
+ {
+ eEncoding = pData->meTextEncoding;
+ break;
+ }
+
+ pData++;
+ }
+
+ /* Search for matching in the mime table */
+ if ( eEncoding == RTL_TEXTENCODING_DONTKNOW )
+ {
+ pData = aMimeCharsetTab;
+ while ( pData->mpCharsetStr )
+ {
+ if ( Impl_matchString( pBuf.get(), pData->mpCharsetStr ) )
+ {
+ eEncoding = pData->meTextEncoding;
+ break;
+ }
+
+ pData++;
+ }
+ }
+
+ return eEncoding;
+}
+
+/* ======================================================================= */
+
+sal_uInt8 SAL_CALL rtl_getBestWindowsCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding )
+{
+ const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding );
+ if ( pData )
+ return pData->mnBestWindowsCharset;
+ return 1;
+}
+
+/* ----------------------------------------------------------------------- */
+
+const char* SAL_CALL rtl_getBestUnixCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding )
+{
+ const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding );
+ if ( pData )
+ return pData->mpBestUnixCharset;
+ if( eTextEncoding == RTL_TEXTENCODING_UNICODE )
+ return "iso10646-1";
+ return nullptr;
+}
+
+/* ----------------------------------------------------------------------- */
+
+char const * SAL_CALL rtl_getMimeCharsetFromTextEncoding(rtl_TextEncoding
+ nEncoding)
+{
+ ImplTextEncodingData const * p = Impl_getTextEncodingData(nEncoding);
+ return p && (p->mnInfoFlags & RTL_TEXTENCODING_INFO_MIME) != 0 ?
+ p->mpBestMimeCharset : nullptr;
+}
+
+const char* SAL_CALL rtl_getBestMimeCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding )
+{
+ const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding );
+ if ( pData )
+ return pData->mpBestMimeCharset;
+ return nullptr;
+}
+
+/* The following two functions are based on <http://www.sharmahd.com/tm/
+ codepages.html>, <http://msdn.microsoft.com/workshop/author/dhtml/reference/
+ charsets/charset4.asp>, and <http://www.iana.org/assignments/character-sets>.
+ */
+
+rtl_TextEncoding SAL_CALL
+rtl_getTextEncodingFromWindowsCodePage(sal_uInt32 nCodePage)
+{
+ switch (nCodePage)
+ {
+ case 42: return RTL_TEXTENCODING_SYMBOL;
+ case 437: return RTL_TEXTENCODING_IBM_437;
+ case 708: return RTL_TEXTENCODING_ISO_8859_6;
+ case 737: return RTL_TEXTENCODING_IBM_737;
+ case 775: return RTL_TEXTENCODING_IBM_775;
+ case 850: return RTL_TEXTENCODING_IBM_850;
+ case 852: return RTL_TEXTENCODING_IBM_852;
+ case 855: return RTL_TEXTENCODING_IBM_855;
+ case 857: return RTL_TEXTENCODING_IBM_857;
+ case 860: return RTL_TEXTENCODING_IBM_860;
+ case 861: return RTL_TEXTENCODING_IBM_861;
+ case 862: return RTL_TEXTENCODING_IBM_862;
+ case 863: return RTL_TEXTENCODING_IBM_863;
+ case 864: return RTL_TEXTENCODING_IBM_864;
+ case 865: return RTL_TEXTENCODING_IBM_865;
+ case 866: return RTL_TEXTENCODING_IBM_866;
+ case 869: return RTL_TEXTENCODING_IBM_869;
+ case 874: return RTL_TEXTENCODING_MS_874;
+ case 932: return RTL_TEXTENCODING_MS_932;
+ case 936: return RTL_TEXTENCODING_MS_936;
+ case 949: return RTL_TEXTENCODING_MS_949;
+ case 950: return RTL_TEXTENCODING_MS_950;
+ case 1250: return RTL_TEXTENCODING_MS_1250;
+ case 1251: return RTL_TEXTENCODING_MS_1251;
+ case 1252: return RTL_TEXTENCODING_MS_1252;
+ case 1253: return RTL_TEXTENCODING_MS_1253;
+ case 1254: return RTL_TEXTENCODING_MS_1254;
+ case 1255: return RTL_TEXTENCODING_MS_1255;
+ case 1256: return RTL_TEXTENCODING_MS_1256;
+ case 1257: return RTL_TEXTENCODING_MS_1257;
+ case 1258: return RTL_TEXTENCODING_MS_1258;
+ case 1361: return RTL_TEXTENCODING_MS_1361;
+ case 10000: return RTL_TEXTENCODING_APPLE_ROMAN;
+ case 10001: return RTL_TEXTENCODING_APPLE_JAPANESE;
+ case 10002: return RTL_TEXTENCODING_APPLE_CHINTRAD;
+ case 10003: return RTL_TEXTENCODING_APPLE_KOREAN;
+ case 10004: return RTL_TEXTENCODING_APPLE_ARABIC;
+ case 10005: return RTL_TEXTENCODING_APPLE_HEBREW;
+ case 10006: return RTL_TEXTENCODING_APPLE_GREEK;
+ case 10007: return RTL_TEXTENCODING_APPLE_CYRILLIC;
+ case 10008: return RTL_TEXTENCODING_APPLE_CHINSIMP;
+ case 10010: return RTL_TEXTENCODING_APPLE_ROMANIAN;
+ case 10017: return RTL_TEXTENCODING_APPLE_UKRAINIAN;
+ case 10029: return RTL_TEXTENCODING_APPLE_CENTEURO;
+ case 10079: return RTL_TEXTENCODING_APPLE_ICELAND;
+ case 10081: return RTL_TEXTENCODING_APPLE_TURKISH;
+ case 10082: return RTL_TEXTENCODING_APPLE_CROATIAN;
+ case 20127: return RTL_TEXTENCODING_ASCII_US;
+ case 20866: return RTL_TEXTENCODING_KOI8_R;
+ case 21866: return RTL_TEXTENCODING_KOI8_U;
+ case 28591: return RTL_TEXTENCODING_ISO_8859_1;
+ case 28592: return RTL_TEXTENCODING_ISO_8859_2;
+ case 28593: return RTL_TEXTENCODING_ISO_8859_3;
+ case 28594: return RTL_TEXTENCODING_ISO_8859_4;
+ case 28595: return RTL_TEXTENCODING_ISO_8859_5;
+ case 28596: return RTL_TEXTENCODING_ISO_8859_6;
+ case 28597: return RTL_TEXTENCODING_ISO_8859_7;
+ case 28598: return RTL_TEXTENCODING_ISO_8859_8;
+ case 28599: return RTL_TEXTENCODING_ISO_8859_9;
+ case 28605: return RTL_TEXTENCODING_ISO_8859_15;
+ case 50220: return RTL_TEXTENCODING_ISO_2022_JP;
+ case 50225: return RTL_TEXTENCODING_ISO_2022_KR;
+ case 51932: return RTL_TEXTENCODING_EUC_JP;
+ case 51936: return RTL_TEXTENCODING_EUC_CN;
+ case 51949: return RTL_TEXTENCODING_EUC_KR;
+ case 57002: return RTL_TEXTENCODING_ISCII_DEVANAGARI;
+ case 65000: return RTL_TEXTENCODING_UTF7;
+ case 65001: return RTL_TEXTENCODING_UTF8;
+ default: return RTL_TEXTENCODING_DONTKNOW;
+ }
+}
+
+sal_uInt32 SAL_CALL
+rtl_getWindowsCodePageFromTextEncoding(rtl_TextEncoding nEncoding)
+{
+ switch (nEncoding)
+ {
+ case RTL_TEXTENCODING_SYMBOL: return 42;
+ case RTL_TEXTENCODING_IBM_437: return 437;
+ /* case RTL_TEXTENCODING_ISO_8859_6: return 708; */
+ case RTL_TEXTENCODING_IBM_737: return 737;
+ case RTL_TEXTENCODING_IBM_775: return 775;
+ case RTL_TEXTENCODING_IBM_850: return 850;
+ case RTL_TEXTENCODING_IBM_852: return 852;
+ case RTL_TEXTENCODING_IBM_855: return 855;
+ case RTL_TEXTENCODING_IBM_857: return 857;
+ case RTL_TEXTENCODING_IBM_860: return 860;
+ case RTL_TEXTENCODING_IBM_861: return 861;
+ case RTL_TEXTENCODING_IBM_862: return 862;
+ case RTL_TEXTENCODING_IBM_863: return 863;
+ case RTL_TEXTENCODING_IBM_864: return 864;
+ case RTL_TEXTENCODING_IBM_865: return 865;
+ case RTL_TEXTENCODING_IBM_866: return 866;
+ case RTL_TEXTENCODING_IBM_869: return 869;
+ case RTL_TEXTENCODING_MS_874: return 874;
+ case RTL_TEXTENCODING_MS_932: return 932;
+ case RTL_TEXTENCODING_MS_936: return 936;
+ case RTL_TEXTENCODING_MS_949: return 949;
+ case RTL_TEXTENCODING_MS_950: return 950;
+ case RTL_TEXTENCODING_MS_1250: return 1250;
+ case RTL_TEXTENCODING_MS_1251: return 1251;
+ case RTL_TEXTENCODING_MS_1252: return 1252;
+ case RTL_TEXTENCODING_MS_1253: return 1253;
+ case RTL_TEXTENCODING_MS_1254: return 1254;
+ case RTL_TEXTENCODING_MS_1255: return 1255;
+ case RTL_TEXTENCODING_MS_1256: return 1256;
+ case RTL_TEXTENCODING_MS_1257: return 1257;
+ case RTL_TEXTENCODING_MS_1258: return 1258;
+ case RTL_TEXTENCODING_MS_1361: return 1361;
+ case RTL_TEXTENCODING_APPLE_ROMAN: return 10000;
+ case RTL_TEXTENCODING_APPLE_JAPANESE: return 10001;
+ case RTL_TEXTENCODING_APPLE_CHINTRAD: return 10002;
+ case RTL_TEXTENCODING_APPLE_KOREAN: return 10003;
+ case RTL_TEXTENCODING_APPLE_ARABIC: return 10004;
+ case RTL_TEXTENCODING_APPLE_HEBREW: return 10005;
+ case RTL_TEXTENCODING_APPLE_GREEK: return 10006;
+ case RTL_TEXTENCODING_APPLE_CYRILLIC: return 10007;
+ case RTL_TEXTENCODING_APPLE_CHINSIMP: return 10008;
+ case RTL_TEXTENCODING_APPLE_ROMANIAN: return 10010;
+ case RTL_TEXTENCODING_APPLE_UKRAINIAN: return 10017;
+ case RTL_TEXTENCODING_APPLE_CENTEURO: return 10029;
+ case RTL_TEXTENCODING_APPLE_ICELAND: return 10079;
+ case RTL_TEXTENCODING_APPLE_TURKISH: return 10081;
+ case RTL_TEXTENCODING_APPLE_CROATIAN: return 10082;
+ case RTL_TEXTENCODING_ASCII_US: return 20127;
+ case RTL_TEXTENCODING_KOI8_R: return 20866;
+ case RTL_TEXTENCODING_KOI8_U: return 21866;
+ case RTL_TEXTENCODING_ISO_8859_1: return 28591;
+ case RTL_TEXTENCODING_ISO_8859_2: return 28592;
+ case RTL_TEXTENCODING_ISO_8859_3: return 28593;
+ case RTL_TEXTENCODING_ISO_8859_4: return 28594;
+ case RTL_TEXTENCODING_ISO_8859_5: return 28595;
+ case RTL_TEXTENCODING_ISO_8859_6: return 28596;
+ case RTL_TEXTENCODING_ISO_8859_7: return 28597;
+ case RTL_TEXTENCODING_ISO_8859_8: return 28598;
+ case RTL_TEXTENCODING_ISO_8859_9: return 28599;
+ case RTL_TEXTENCODING_ISO_8859_15: return 28605;
+ case RTL_TEXTENCODING_ISO_2022_JP: return 50220;
+ case RTL_TEXTENCODING_ISO_2022_KR: return 50225;
+ case RTL_TEXTENCODING_EUC_JP: return 51932;
+ case RTL_TEXTENCODING_EUC_CN: return 51936;
+ case RTL_TEXTENCODING_EUC_KR: return 51949;
+ case RTL_TEXTENCODING_ISCII_DEVANAGARI: return 57002;
+ case RTL_TEXTENCODING_UTF7: return 65000;
+ case RTL_TEXTENCODING_UTF8: return 65001;
+ default: return 0;
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/textcvt.cxx b/sal/textenc/textcvt.cxx
new file mode 100644
index 000000000..2d5add0a8
--- /dev/null
+++ b/sal/textenc/textcvt.cxx
@@ -0,0 +1,299 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <rtl/textcvt.h>
+#include <sal/log.hxx>
+
+#include "gettextencodingdata.hxx"
+#include "tenchelp.hxx"
+
+/* ======================================================================= */
+
+static sal_Size ImplDummyToUnicode( const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes )
+{
+ sal_Unicode* pEndDestBuf;
+ const char* pEndSrcBuf;
+
+ if ( ((nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR) ||
+ ((nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR) )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR |
+ RTL_TEXTTOUNICODE_INFO_UNDEFINED |
+ RTL_TEXTTOUNICODE_INFO_MBUNDEFINED;
+ return 0;
+ }
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestChars;
+ pEndSrcBuf = pSrcBuf+nSrcBytes;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
+ break;
+ }
+
+ *pDestBuf = static_cast<sal_Unicode>(static_cast<unsigned char>(*pSrcBuf));
+ pDestBuf++;
+ pSrcBuf++;
+ }
+
+ *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf);
+ return (nDestChars - (pEndDestBuf-pDestBuf));
+}
+
+/* ----------------------------------------------------------------------- */
+
+static sal_Size ImplUnicodeToDummy( const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars )
+{
+ char* pEndDestBuf;
+ const sal_Unicode* pEndSrcBuf;
+
+ if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK) == RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR |
+ RTL_UNICODETOTEXT_INFO_UNDEFINED;
+ return 0;
+ }
+
+ *pInfo = 0;
+ pEndDestBuf = pDestBuf+nDestBytes;
+ pEndSrcBuf = pSrcBuf+nSrcChars;
+ while ( pSrcBuf < pEndSrcBuf )
+ {
+ if ( pDestBuf == pEndDestBuf )
+ {
+ *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
+ break;
+ }
+
+ *pDestBuf = static_cast<char>(static_cast<unsigned char>(*pSrcBuf & 0x00FF));
+ pDestBuf++;
+ pSrcBuf++;
+ }
+
+ *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf);
+ return (nDestBytes - (pEndDestBuf-pDestBuf));
+}
+
+/* ======================================================================= */
+
+rtl_TextToUnicodeConverter SAL_CALL rtl_createTextToUnicodeConverter( rtl_TextEncoding eTextEncoding )
+{
+ const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding );
+ if ( pData )
+ return static_cast<rtl_TextToUnicodeConverter>(const_cast<ImplTextConverter *>(&pData->maConverter));
+ return nullptr;
+}
+
+/* ----------------------------------------------------------------------- */
+
+void SAL_CALL rtl_destroyTextToUnicodeConverter(
+ SAL_UNUSED_PARAMETER rtl_TextToUnicodeConverter )
+{}
+
+/* ----------------------------------------------------------------------- */
+
+rtl_TextToUnicodeContext SAL_CALL rtl_createTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter )
+{
+ const ImplTextConverter* pConverter = static_cast<const ImplTextConverter*>(hConverter);
+ if ( !pConverter )
+ return nullptr;
+ if ( pConverter->mpCreateTextToUnicodeContext )
+ return pConverter->mpCreateTextToUnicodeContext();
+ return reinterpret_cast<rtl_TextToUnicodeContext>(1);
+}
+
+/* ----------------------------------------------------------------------- */
+
+void SAL_CALL rtl_destroyTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter,
+ rtl_TextToUnicodeContext hContext )
+{
+ const ImplTextConverter* pConverter = static_cast<const ImplTextConverter*>(hConverter);
+ if ( pConverter && hContext && pConverter->mpDestroyTextToUnicodeContext )
+ pConverter->mpDestroyTextToUnicodeContext( hContext );
+}
+
+/* ----------------------------------------------------------------------- */
+
+void SAL_CALL rtl_resetTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter,
+ rtl_TextToUnicodeContext hContext )
+{
+ const ImplTextConverter* pConverter = static_cast<const ImplTextConverter*>(hConverter);
+ if ( pConverter && hContext && pConverter->mpResetTextToUnicodeContext )
+ pConverter->mpResetTextToUnicodeContext( hContext );
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Size SAL_CALL rtl_convertTextToUnicode( rtl_TextToUnicodeConverter hConverter,
+ rtl_TextToUnicodeContext hContext,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes )
+{
+ assert(
+ (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK)
+ <= RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_DEFAULT);
+ assert(
+ (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK)
+ <= RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT);
+ assert(
+ (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK)
+ <= RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT);
+ assert(
+ (nFlags
+ & ~(RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH
+ | RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE))
+ == 0);
+
+ const ImplTextConverter* pConverter = static_cast<const ImplTextConverter*>(hConverter);
+
+ /* Only temporary, because we don't want die, if we don't have a
+ converter, because not all converters are implemented yet */
+ if ( !pConverter )
+ {
+ SAL_WARN("sal.textenc", "Missing rtl_TextToUnicodeConverter");
+ return ImplDummyToUnicode( pSrcBuf, nSrcBytes,
+ pDestBuf, nDestChars,
+ nFlags, pInfo, pSrcCvtBytes );
+ }
+
+ return pConverter->mpConvertTextToUnicodeProc( pConverter->mpConvertData,
+ hContext,
+ pSrcBuf, nSrcBytes,
+ pDestBuf, nDestChars,
+ nFlags, pInfo,
+ pSrcCvtBytes );
+}
+
+/* ======================================================================= */
+
+rtl_UnicodeToTextConverter SAL_CALL rtl_createUnicodeToTextConverter( rtl_TextEncoding eTextEncoding )
+{
+ const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding );
+ if ( pData )
+ return static_cast<rtl_TextToUnicodeConverter>(const_cast<ImplTextConverter *>(&pData->maConverter));
+ return nullptr;
+}
+
+/* ----------------------------------------------------------------------- */
+
+void SAL_CALL rtl_destroyUnicodeToTextConverter(
+ SAL_UNUSED_PARAMETER rtl_UnicodeToTextConverter )
+{}
+
+/* ----------------------------------------------------------------------- */
+
+rtl_UnicodeToTextContext SAL_CALL rtl_createUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter )
+{
+ const ImplTextConverter* pConverter = static_cast<const ImplTextConverter*>(hConverter);
+ if ( !pConverter )
+ return nullptr;
+ if ( pConverter->mpCreateUnicodeToTextContext )
+ return pConverter->mpCreateUnicodeToTextContext();
+ return reinterpret_cast<rtl_UnicodeToTextContext>(1);
+}
+
+/* ----------------------------------------------------------------------- */
+
+void SAL_CALL rtl_destroyUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter,
+ rtl_UnicodeToTextContext hContext )
+{
+ const ImplTextConverter* pConverter = static_cast<const ImplTextConverter*>(hConverter);
+ if ( pConverter && hContext && pConverter->mpDestroyUnicodeToTextContext )
+ pConverter->mpDestroyUnicodeToTextContext( hContext );
+}
+
+/* ----------------------------------------------------------------------- */
+
+void SAL_CALL rtl_resetUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter,
+ rtl_UnicodeToTextContext hContext )
+{
+ const ImplTextConverter* pConverter = static_cast<const ImplTextConverter*>(hConverter);
+ if ( pConverter && hContext && pConverter->mpResetUnicodeToTextContext )
+ pConverter->mpResetUnicodeToTextContext( hContext );
+}
+
+/* ----------------------------------------------------------------------- */
+
+sal_Size SAL_CALL rtl_convertUnicodeToText( rtl_UnicodeToTextConverter hConverter,
+ rtl_UnicodeToTextContext hContext,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars )
+{
+ assert(
+ (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK)
+ <= RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT);
+ assert(
+ (nFlags & RTL_UNICODETOTEXT_FLAGS_INVALID_MASK)
+ <= RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT);
+ assert(
+ (nFlags
+ & ~(RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_MASK
+ | RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE
+ | RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR
+ | RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0
+ | RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE
+ | RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE
+ | RTL_UNICODETOTEXT_FLAGS_PRIVATE_IGNORE
+ | RTL_UNICODETOTEXT_FLAGS_NOCOMPOSITE
+ | RTL_UNICODETOTEXT_FLAGS_FLUSH
+ | RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE))
+ == 0);
+
+ const ImplTextConverter* pConverter = static_cast<const ImplTextConverter*>(hConverter);
+
+ /* Only temporary, because we don't want die, if we don't have a
+ converter, because not all converters are implemented yet */
+ if ( !pConverter )
+ {
+ SAL_WARN("sal.textenc", "Missing rtl_UnicodeToTextConverter");
+ return ImplUnicodeToDummy( pSrcBuf, nSrcChars,
+ pDestBuf, nDestBytes,
+ nFlags, pInfo, pSrcCvtChars );
+ }
+
+ return pConverter->mpConvertUnicodeToTextProc( pConverter->mpConvertData,
+ hContext,
+ pSrcBuf, nSrcChars,
+ pDestBuf, nDestBytes,
+ nFlags, pInfo,
+ pSrcCvtChars );
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/textenc.cxx b/sal/textenc/textenc.cxx
new file mode 100644
index 000000000..5765637fd
--- /dev/null
+++ b/sal/textenc/textenc.cxx
@@ -0,0 +1,436 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/* TODO! This file should not be called textenc.c, because it is not the
+ implementation of rtl/textenc.h. Rather, it should be called
+ gettextencodingdata.c. */
+
+#include <sal/config.h>
+
+#include <cstddef>
+#include <cstdlib>
+
+#include <osl/module.hxx>
+#include <rtl/textenc.h>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <sal/log.hxx>
+#include <sal/macros.h>
+#include <sal/types.h>
+
+#include "convertsimple.hxx"
+#include "gettextencodingdata.hxx"
+#include "tcvtbyte.hxx"
+#include "tcvtutf8.hxx"
+#include "tenchelp.hxx"
+
+#define NOTABUNI_START 0xFF
+#define NOTABUNI_END 0x00
+
+#define NOTABCHAR_START 0xFFFF
+#define NOTABCHAR_END 0x0000
+
+#define SAME8090UNI_START 0x80
+#define SAME8090UNI_END 0x9F
+sal_uInt16 const aImpl8090SameToUniTab[SAME8090UNI_END
+ - SAME8090UNI_START
+ + 1]
+= { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, /* 0x80 */
+ 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, /* 0x90 */
+ 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F };
+
+#define SAME8090CHAR_START 0x0080
+#define SAME8090CHAR_END 0x009F
+unsigned char const aImpl8090SameToCharTab[SAME8090CHAR_END
+ - SAME8090CHAR_START
+ + 1]
+ = { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0080 */
+ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0090 */
+ 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F };
+
+#define SAMEA0FFCHAR_START 0x00A0
+#define SAMEA0FFCHAR_END 0x00FF
+unsigned char const aImplA0FFSameToCharTab[SAMEA0FFCHAR_END
+ - SAMEA0FFCHAR_START
+ + 1]
+ = { 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */
+ 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x00D0 */
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x00F0 */
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF };
+
+/* ======================================================================= */
+
+/* MS-1252 */
+/* Windows Standard CharSet (ANSI) for Western Script */
+/* 1-Byte, 0x00-0x7F ASCII without exception */
+/* Convert-Tables: mappings/vendors/micsft/windows/cp1252.txt from 04/15/98 Version 2.01 */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1252UNI_START 0x80
+#define MS1252UNI_END 0xFF
+sal_uInt16 const aImplMS1252ToUniTab[MS1252UNI_END - MS1252UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
+ 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0, 0x017D, 0, /* 0x80 */
+ 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
+ 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0, 0x017E, 0x0178, /* 0x90 */
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0xD0 */
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+#define MS1252TOCHARTABEX_COUNT 27
+ImplUniCharTabData const aImplMS1252ToCharTabEx[MS1252TOCHARTABEX_COUNT] =
+{
+ { 0x0152, 0x8C, 0 },
+ { 0x0153, 0x9C, 0 },
+ { 0x0160, 0x8A, 0 },
+ { 0x0161, 0x9A, 0 },
+ { 0x0178, 0x9F, 0 },
+ { 0x017D, 0x8E, 0 },
+ { 0x017E, 0x9E, 0 },
+ { 0x0192, 0x83, 0 },
+ { 0x02C6, 0x88, 0 },
+ { 0x02DC, 0x98, 0 },
+ { 0x2013, 0x96, 0 },
+ { 0x2014, 0x97, 0 },
+ { 0x2018, 0x91, 0 },
+ { 0x2019, 0x92, 0 },
+ { 0x201A, 0x82, 0 },
+ { 0x201C, 0x93, 0 },
+ { 0x201D, 0x94, 0 },
+ { 0x201E, 0x84, 0 },
+ { 0x2020, 0x86, 0 },
+ { 0x2021, 0x87, 0 },
+ { 0x2022, 0x95, 0 },
+ { 0x2026, 0x85, 0 },
+ { 0x2030, 0x89, 0 },
+ { 0x2039, 0x8B, 0 },
+ { 0x203A, 0x9B, 0 },
+ { 0x20AC, 0x80, 0 },
+ { 0x2122, 0x99, 0 },
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplMS1252ByteCvtData =
+{
+ aImplMS1252ToUniTab,
+ nullptr,
+ aImplA0FFSameToCharTab,
+ nullptr,
+ aImplMS1252ToCharTabEx,
+ MS1252UNI_START, MS1252UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ SAMEA0FFCHAR_START, SAMEA0FFCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ MS1252TOCHARTABEX_COUNT
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplMS1252TextEncodingData
+ = { { &aImplMS1252ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "windows-1252",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* WIN, SCRIPT_LATIN, pc code page 850 */
+
+/* ======================================================================= */
+
+/* ISO-8859-1 */
+/* Unix Standard CharSet (Latin1) for Western Script */
+/* 1-Byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */
+/* Convert-Tables: mappings/iso8859/8859-1.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */
+/* Last-Changes from us: */
+
+#define ISO88591UNI_START 0xA0
+#define ISO88591UNI_END 0xFF
+sal_uInt16 const aImplISO88591ToUniTab[ISO88591UNI_END - ISO88591UNI_START + 1] =
+{
+/* 0 1 2 3 4 5 6 7 */
+/* 8 9 A B C D E F */
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0xD0 */
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF /* 0xF0 */
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplISO88591ByteCvtData =
+{
+ aImplISO88591ToUniTab,
+ aImpl8090SameToUniTab,
+ aImplA0FFSameToCharTab,
+ aImpl8090SameToCharTab,
+ nullptr,
+ ISO88591UNI_START, ISO88591UNI_END,
+ SAME8090UNI_START, SAME8090UNI_END,
+ SAMEA0FFCHAR_START, SAMEA0FFCHAR_END,
+ SAME8090CHAR_START, SAME8090CHAR_END,
+ 0
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplISO88591TextEncodingData
+ = { { &aImplISO88591ByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "iso-8859-1",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_LATIN, pc code page 850 */
+
+/* ======================================================================= */
+
+/* US-ASCII */
+/* 7-Bit ASCII */
+/* 1-Byte, 0x00-0x7F ASCII without exception */
+/* For the import we use ISO-8859-1 with MS extension (MS-1252), because */
+/* when the 8-Bit is set, the chance, that this is an ISO-8859-1 character */
+/* is the greatest. For the export all chars greater than 127 are not */
+/* converted and are replaced by the replacement character. */
+/* Last-Changes from us: */
+
+/* ----------------------------------------------------------------------- */
+
+ImplByteConvertData const aImplUSASCIIByteCvtData =
+{
+ aImplMS1252ToUniTab,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ MS1252UNI_START, MS1252UNI_END,
+ NOTABUNI_START, NOTABUNI_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ NOTABCHAR_START, NOTABCHAR_END,
+ 0
+};
+
+/* ----------------------------------------------------------------------- */
+
+ImplTextEncodingData const aImplUSASCIITextEncodingData
+ = { { &aImplUSASCIIByteCvtData,
+ sal::detail::textenc::convertCharToUnicode,
+ sal::detail::textenc::convertUnicodeToChar,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr },
+ "iso8859-1",
+ "us-ascii",
+ 1,
+ 1,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_7BIT
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_LATIN, pc code page 437 */
+
+ImplTextEncodingData const aImplUTF8TextEncodingData
+ = { { nullptr,
+ &ImplConvertUtf8ToUnicode,
+ &ImplConvertUnicodeToUtf8,
+ &ImplCreateUtf8ToUnicodeContext,
+ &ImplDestroyUtf8ToUnicodeContext,
+ &ImplResetUtf8ToUnicodeContext,
+ &ImplCreateUnicodeToUtf8Context,
+ &ImplDestroyUnicodeToUtf8Context,
+ &ImplResetUnicodeToUtf8Context },
+ "iso8859-1",
+ "utf-8",
+ 1,
+ 6,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_ASCII
+ | RTL_TEXTENCODING_INFO_UNICODE
+ | RTL_TEXTENCODING_INFO_MULTIBYTE
+ | RTL_TEXTENCODING_INFO_MIME };
+ /* SCRIPT_UNICODE, pc code page 850 */
+
+static char aImplJavaUtf8TextConverterTag;
+ /* The value of this tag is irrelevant. Only its address != NULL is used to
+ distinguish between RTL_TEXTENCODING_UTF8 and
+ RTL_TEXTENCODING_JAVA_UTF8. */
+
+ImplTextEncodingData const aImplJavaUtf8TextEncodingData
+ = { { &aImplJavaUtf8TextConverterTag,
+ &ImplConvertUtf8ToUnicode,
+ &ImplConvertUnicodeToUtf8,
+ &ImplCreateUtf8ToUnicodeContext,
+ &ImplDestroyUtf8ToUnicodeContext,
+ &ImplResetUtf8ToUnicodeContext,
+ &ImplCreateUnicodeToUtf8Context,
+ &ImplDestroyUnicodeToUtf8Context,
+ &ImplResetUnicodeToUtf8Context },
+ nullptr,
+ nullptr,
+ 1,
+ 3,
+ 1,
+ 0,
+ RTL_TEXTENCODING_INFO_UNICODE | RTL_TEXTENCODING_INFO_MULTIBYTE };
+
+namespace {
+
+#ifndef COND_LIB_SAL_TEXTENC
+
+extern "C" ImplTextEncodingData const * sal_getFullTextEncodingData(
+ rtl_TextEncoding); // from tables.cxx in sal_textenc library
+
+class FullTextEncodingData {
+public:
+ ImplTextEncodingData const * get(rtl_TextEncoding encoding) {
+ (void) this; // loplugin:staticmethods
+ return sal_getFullTextEncodingData(encoding);
+ }
+ FullTextEncodingData() = default;
+ FullTextEncodingData(const FullTextEncodingData&) = delete;
+ FullTextEncodingData& operator=(const FullTextEncodingData&) = delete;
+};
+
+#else
+
+extern "C" {
+
+typedef ImplTextEncodingData const * TextEncodingFunction(rtl_TextEncoding);
+
+void thisModule() {}
+
+}
+
+class FullTextEncodingData {
+public:
+ FullTextEncodingData() {
+ if (!module_.loadRelative(&thisModule, SAL_MODULENAME("sal_textenclo")))
+ {
+ SAL_WARN( "sal.textenc", "Loading sal_textenc library failed" );
+ std::abort();
+ }
+ function_ = reinterpret_cast< TextEncodingFunction * >(
+ module_.getFunctionSymbol("sal_getFullTextEncodingData"));
+ if (function_ == nullptr) {
+ SAL_WARN( "sal.textenc", "Obtaining sal_getFullTextEncodingData function from sal_textenc"
+ " library failed");
+ std::abort();
+ }
+ }
+
+ ImplTextEncodingData const * get(rtl_TextEncoding encoding) const {
+ return (*function_)(encoding);
+ }
+
+ FullTextEncodingData(const FullTextEncodingData&) = delete;
+ FullTextEncodingData& operator=(const FullTextEncodingData&) = delete;
+
+private:
+ osl::Module module_;
+ TextEncodingFunction * function_;
+};
+
+#endif
+
+}
+
+ImplTextEncodingData const *
+Impl_getTextEncodingData(rtl_TextEncoding nEncoding)
+{
+ switch(nEncoding)
+ {
+ case RTL_TEXTENCODING_ASCII_US:
+ return &aImplUSASCIITextEncodingData; break;
+ case RTL_TEXTENCODING_MS_1252:
+ return &aImplMS1252TextEncodingData; break;
+ case RTL_TEXTENCODING_UTF8:
+ return &aImplUTF8TextEncodingData; break;
+ case RTL_TEXTENCODING_JAVA_UTF8:
+ return &aImplJavaUtf8TextEncodingData; break;
+ case RTL_TEXTENCODING_ISO_8859_1:
+ return &aImplISO88591TextEncodingData; break;
+ default:
+ {
+ static FullTextEncodingData gFullTextEncodingData;
+ return gFullTextEncodingData.get(nEncoding);
+ }
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/unichars.cxx b/sal/textenc/unichars.cxx
new file mode 100644
index 000000000..abd6945cf
--- /dev/null
+++ b/sal/textenc/unichars.cxx
@@ -0,0 +1,87 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+#include <sal/types.h>
+#include "unichars.hxx"
+
+bool ImplIsControlOrFormat(sal_uInt32 nUtf32)
+{
+ // All code points of
+ // <http://www.unicode.org/Public/UNIDATA/UnicodeData.txt>, Version 3.1.1,
+ // that have a General Category of Cc (Other, Control) or Cf (Other,
+ // Format):
+ return nUtf32 <= 0x001F || (nUtf32 >= 0x007F && nUtf32 <= 0x009F)
+ || nUtf32 == 0x070F // SYRIAC ABBREVIATION MARK
+ || nUtf32 == 0x180B // MONGOLIAN FREE VARIATION SELECTOR ONE
+ || nUtf32 == 0x180C // MONGOLIAN FREE VARIATION SELECTOR TWO
+ || nUtf32 == 0x180D // MONGOLIAN FREE VARIATION SELECTOR THREE
+ || nUtf32 == 0x180E // MONGOLIAN VOWEL SEPARATOR
+ || nUtf32 == 0x200C // ZERO WIDTH NON-JOINER
+ || nUtf32 == 0x200D // ZERO WIDTH JOINER
+ || nUtf32 == 0x200E // LEFT-TO-RIGHT MARK
+ || nUtf32 == 0x200F // RIGHT-TO-LEFT MARK
+ || nUtf32 == 0x202A // LEFT-TO-RIGHT EMBEDDING
+ || nUtf32 == 0x202B // RIGHT-TO-LEFT EMBEDDING
+ || nUtf32 == 0x202C // POP DIRECTIONAL FORMATTING
+ || nUtf32 == 0x202D // LEFT-TO-RIGHT OVERRIDE
+ || nUtf32 == 0x202E // RIGHT-TO-LEFT OVERRIDE
+ || nUtf32 == 0x206A // INHIBIT SYMMETRIC SWAPPING
+ || nUtf32 == 0x206B // ACTIVATE SYMMETRIC SWAPPING
+ || nUtf32 == 0x206C // INHIBIT ARABIC FORM SHAPING
+ || nUtf32 == 0x206D // ACTIVATE ARABIC FORM SHAPING
+ || nUtf32 == 0x206E // NATIONAL DIGIT SHAPES
+ || nUtf32 == 0x206F // NOMINAL DIGIT SHAPES
+ || nUtf32 == 0xFEFF // ZERO WIDTH NO-BREAK SPACE
+ || nUtf32 == 0xFFF9 // INTERLINEAR ANNOTATION ANCHOR
+ || nUtf32 == 0xFFFA // INTERLINEAR ANNOTATION SEPARATOR
+ || nUtf32 == 0xFFFB // INTERLINEAR ANNOTATION TERMINATOR
+ || nUtf32 == 0x1D173 // MUSICAL SYMBOL BEGIN BEAM
+ || nUtf32 == 0x1D174 // MUSICAL SYMBOL END BEAM
+ || nUtf32 == 0x1D175 // MUSICAL SYMBOL BEGIN TIE
+ || nUtf32 == 0x1D176 // MUSICAL SYMBOL END TIE
+ || nUtf32 == 0x1D177 // MUSICAL SYMBOL BEGIN SLUR
+ || nUtf32 == 0x1D178 // MUSICAL SYMBOL END SLUR
+ || nUtf32 == 0x1D179 // MUSICAL SYMBOL BEGIN PHRASE
+ || nUtf32 == 0x1D17A // MUSICAL SYMBOL END PHRASE
+ || nUtf32 == 0xE0001 // LANGUAGE TAG
+ || (nUtf32 >= 0xE0020 && nUtf32 <= 0xE007F);
+}
+
+bool ImplIsPrivateUse(sal_uInt32 nUtf32)
+{
+ // All code points of
+ // <http://www.unicode.org/Public/UNIDATA/UnicodeData.txt>, Version 3.1.1,
+ // that have a General Category of Co (Other, Private Use):
+ return (nUtf32 >= 0xE000 && nUtf32 <= 0xF8FF) || (nUtf32 >= 0xF0000 && nUtf32 <= 0xFFFFD)
+ || (nUtf32 >= 0x100000 && nUtf32 <= 0x10FFFD);
+}
+
+bool ImplIsZeroWidth(sal_uInt32 nUtf32)
+{
+ // All code points of
+ // <http://www.unicode.org/Public/UNIDATA/UnicodeData.txt>, Version 3.1.1,
+ // that have "ZERO WIDTH" in their Character name:
+ return nUtf32 == 0x200B // ZERO WIDTH SPACE
+ || nUtf32 == 0x200C // ZERO WIDTH NON-JOINER
+ || nUtf32 == 0x200D // ZERO WIDTH JOINER
+ || nUtf32 == 0xFEFF; // ZERO WIDTH NO-BREAK SPACE
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/textenc/unichars.hxx b/sal/textenc/unichars.hxx
new file mode 100644
index 000000000..e627d3c95
--- /dev/null
+++ b/sal/textenc/unichars.hxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_TEXTENC_UNICHARS_HXX
+#define INCLUDED_SAL_TEXTENC_UNICHARS_HXX
+
+#include <sal/config.h>
+
+#include <cassert>
+
+#include <rtl/character.hxx>
+#include <sal/types.h>
+
+#define RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER 0xFFFD
+
+bool ImplIsControlOrFormat(sal_uInt32 nUtf32);
+
+bool ImplIsPrivateUse(sal_uInt32 nUtf32);
+
+bool ImplIsZeroWidth(sal_uInt32 nUtf32);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/util/sal.map b/sal/util/sal.map
new file mode 100644
index 000000000..c5c3e4d55
--- /dev/null
+++ b/sal/util/sal.map
@@ -0,0 +1,778 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+UDK_3_0_0 {
+ global:
+ _ZTI*; _ZTS*; # weak RTTI symbols for C++ exceptions
+
+ osl_acceptConnectionOnSocket;
+ osl_acceptPipe;
+ osl_acquireSocket;
+ osl_acquirePipe;
+ osl_acquireMutex;
+ osl_acquireSemaphore;
+ osl_addSignalHandler;
+ osl_addToSocketSet;
+ osl_assertFailedLine;
+ osl_bindAddrToSocket;
+ osl_breakDebug;
+ osl_checkCondition;
+ osl_clearSocketSet;
+ osl_closeDirectory;
+ osl_closePipe;
+ osl_closeProfile;
+ osl_connectSocketTo;
+ osl_copyHostAddr;
+ osl_copySocketAddr;
+ osl_createCondition;
+ osl_createEmptySocketAddr;
+ osl_createHostAddr;
+ osl_createHostAddrByAddr;
+ osl_createHostAddrByName;
+ osl_createInetSocketAddr;
+ osl_createMutex;
+ osl_createPipe;
+ osl_createSemaphore;
+ osl_createSocket;
+ osl_createSocketSet;
+ osl_createSuspendedThread;
+ osl_createThread;
+ osl_createThreadKey;
+ osl_decrementInterlockedCount;
+ osl_demultiplexSocketEvents;
+ osl_destroyCondition;
+ osl_destroyHostAddr;
+ osl_destroyMutex;
+ osl_destroySemaphore;
+ osl_destroySocketAddr;
+ osl_destroySocketSet;
+ osl_destroyThread;
+ osl_destroyThreadKey;
+ osl_enableNonBlockingMode;
+ osl_executeProcess;
+ osl_executeProcess_WithRedirectedIO;
+ osl_flushProfile;
+ osl_freeProcessHandle;
+ osl_freeSecurityHandle;
+ osl_getAddrOfSocketAddr;
+ osl_getCommandArg;
+ osl_getCommandArgCount;
+ osl_getConfigDir;
+ osl_getCurrentSecurity;
+ osl_getDirectoryItem;
+ osl_getDottedInetAddrOfSocketAddr;
+ osl_getEnvironment;
+ osl_getEthernetAddress;
+ osl_getExecutableFile;
+ osl_getFamilyOfSocketAddr;
+ osl_getFileStatus;
+ osl_getFileURLFromSystemPath;
+ osl_getGlobalMutex;
+ osl_getHomeDir;
+ osl_getHostnameOfHostAddr;
+ osl_getHostnameOfSocketAddr;
+ osl_getInetPortOfSocketAddr;
+ osl_getLastPipeError;
+ osl_getLastSocketError;
+ osl_getLastSocketErrorDescription;
+ osl_getLocalAddrOfSocket;
+ osl_getLocalHostname;
+ osl_getModuleURLFromAddress;
+ osl_getNextDirectoryItem;
+ osl_getPeerAddrOfSocket;
+ osl_getProcess;
+ osl_getProcessInfo;
+ osl_getProcessWorkingDir;
+ osl_getProfileSectionEntries;
+ osl_getProfileSections;
+ osl_getServicePort;
+ osl_getSocketAddrOfHostAddr;
+ osl_getSocketOption;
+ osl_getSocketType;
+ osl_getSymbol;
+ osl_getSystemPathFromFileURL;
+ osl_getSystemTime;
+ osl_getThreadIdentifier;
+ osl_getThreadKeyData;
+ osl_getThreadPriority;
+ osl_getThreadTextEncoding;
+ osl_getUserIdent;
+ osl_getUserName;
+ osl_getVolumeInformation;
+ osl_incrementInterlockedCount;
+ osl_isAdministrator;
+ osl_isEndOfFile;
+ osl_isEqualSocketAddr;
+ osl_isExceptionPending;
+ osl_isInSocketSet;
+ osl_isNonBlockingMode;
+ osl_isReceiveReady;
+ osl_isSendReady;
+ osl_isThreadRunning;
+ osl_joinProcess;
+ osl_joinWithThread;
+ osl_listenOnSocket;
+ osl_loadModule;
+ osl_loginUser;
+ osl_loginUserOnFileServer;
+ osl_openDirectory;
+ osl_openProfile;
+ osl_raiseSignal;
+ osl_readProfileBool;
+ osl_readProfileIdent;
+ osl_readProfileString;
+ osl_readPipe;
+ osl_readSocket;
+ osl_receiveFromSocket;
+ osl_receivePipe;
+ osl_receiveSocket;
+ osl_releaseDirectoryItem;
+ osl_releaseMutex;
+ osl_releasePipe;
+ osl_releaseSemaphore;
+ osl_releaseSocket;
+ osl_removeFromSocketSet;
+ osl_removeProfileEntry;
+ osl_removeSignalHandler;
+ osl_reportError;
+ osl_resetCondition;
+ osl_resolveHostname;
+ osl_resumeThread;
+ osl_scheduleThread;
+ osl_searchFileURL;
+ osl_sendPipe;
+ osl_sendSocket;
+ osl_sendToSocket;
+ osl_setCondition;
+ osl_setFileAttributes;
+ osl_setFileTime;
+ osl_setInetPortOfSocketAddr;
+ osl_setAddrOfSocketAddr;
+ osl_setSocketOption;
+ osl_setThreadKeyData;
+ osl_setThreadPriority;
+ osl_setThreadTextEncoding;
+ osl_shutdownSocket;
+ osl_suspendThread;
+ osl_terminateProcess;
+ osl_terminateThread;
+ osl_trace;
+ osl_tryToAcquireMutex;
+ osl_tryToAcquireSemaphore;
+ osl_unloadModule;
+ osl_waitCondition;
+ osl_waitThread;
+ osl_writePipe;
+ osl_writeSocket;
+ osl_writeProfileBool;
+ osl_writeProfileIdent;
+ osl_writeProfileString;
+ osl_yieldThread;
+ osl_loadUserProfile;
+ osl_unloadUserProfile;
+ osl_sendResourcePipe;
+ osl_receiveResourcePipe;
+ rtl_allocateMemory;
+ rtl_compareMemory;
+ rtl_copyMemory;
+ rtl_fillMemory;
+ rtl_freeMemory;
+ rtl_moveMemory;
+ rtl_reallocateMemory;
+ rtl_zeroMemory;
+ rtl_findInMemory;
+ rtl_locale_equals;
+ rtl_locale_getCountry;
+ rtl_locale_getDefault;
+ rtl_locale_getLanguage;
+ rtl_locale_getVariant;
+ rtl_locale_hashCode;
+ rtl_locale_register;
+ rtl_locale_setDefault;
+ rtl_str_getLength;
+ rtl_str_compare;
+ rtl_str_compare_WithLength;
+ rtl_str_shortenedCompare_WithLength;
+ rtl_str_reverseCompare_WithLength;
+ rtl_str_compareIgnoreAsciiCase;
+ rtl_str_compareIgnoreAsciiCase_WithLength;
+ rtl_str_shortenedCompareIgnoreAsciiCase_WithLength;
+ rtl_str_hashCode;
+ rtl_str_hashCode_WithLength;
+ rtl_str_indexOfChar;
+ rtl_str_indexOfChar_WithLength;
+ rtl_str_indexOfStr;
+ rtl_str_indexOfStr_WithLength;
+ rtl_str_lastIndexOfChar;
+ rtl_str_lastIndexOfChar_WithLength;
+ rtl_str_lastIndexOfStr;
+ rtl_str_lastIndexOfStr_WithLength;
+ rtl_str_replaceChar;
+ rtl_str_replaceChar_WithLength;
+ rtl_str_toAsciiLowerCase;
+ rtl_str_toAsciiLowerCase_WithLength;
+ rtl_str_toAsciiUpperCase;
+ rtl_str_toAsciiUpperCase_WithLength;
+ rtl_str_trim;
+ rtl_str_trim_WithLength;
+ rtl_str_valueOfBoolean;
+ rtl_str_valueOfChar;
+ rtl_str_valueOfInt32;
+ rtl_str_valueOfInt64;
+ rtl_str_valueOfDouble;
+ rtl_str_valueOfFloat;
+ rtl_str_toBoolean;
+ rtl_str_toInt32;
+ rtl_str_toInt64;
+ rtl_str_toDouble;
+ rtl_str_toFloat;
+ rtl_string_acquire;
+ rtl_string_assign;
+ rtl_string_getLength;
+ rtl_string_getStr;
+ rtl_string_getToken;
+ rtl_string_new;
+ rtl_string_newConcat;
+ rtl_string_newFromStr;
+ rtl_string_newFromStr_WithLength;
+ rtl_string_newFromLiteral;
+ rtl_string_newFromString;
+ rtl_string_newReplace;
+ rtl_string_newReplaceStrAt;
+ rtl_string_newToAsciiLowerCase;
+ rtl_string_newToAsciiUpperCase;
+ rtl_string_newTrim;
+ rtl_string_new_WithLength;
+ rtl_string_release;
+ rtl_stringbuffer_ensureCapacity;
+ rtl_stringbuffer_insert;
+ rtl_stringbuffer_newFromStr_WithLength;
+ rtl_stringbuffer_newFromStringBuffer;
+ rtl_ustr_compare;
+ rtl_ustr_compare_WithLength;
+ rtl_ustr_shortenedCompare_WithLength;
+ rtl_ustr_reverseCompare_WithLength;
+ rtl_ustr_compareIgnoreAsciiCase;
+ rtl_ustr_compareIgnoreAsciiCase_WithLength;
+ rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength;
+ rtl_ustr_ascii_compare;
+ rtl_ustr_ascii_compare_WithLength;
+ rtl_ustr_ascii_shortenedCompare_WithLength;
+ rtl_ustr_asciil_reverseCompare_WithLength;
+ rtl_ustr_ascii_compareIgnoreAsciiCase;
+ rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength;
+ rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength;
+ rtl_ustr_getLength;
+ rtl_ustr_hashCode;
+ rtl_ustr_hashCode_WithLength;
+ rtl_ustr_indexOfChar;
+ rtl_ustr_indexOfChar_WithLength;
+ rtl_ustr_indexOfStr;
+ rtl_ustr_indexOfStr_WithLength;
+ rtl_ustr_lastIndexOfChar;
+ rtl_ustr_lastIndexOfChar_WithLength;
+ rtl_ustr_lastIndexOfStr;
+ rtl_ustr_lastIndexOfStr_WithLength;
+ rtl_ustr_replaceChar;
+ rtl_ustr_replaceChar_WithLength;
+ rtl_ustr_toAsciiLowerCase;
+ rtl_ustr_toAsciiLowerCase_WithLength;
+ rtl_ustr_toAsciiUpperCase;
+ rtl_ustr_toAsciiUpperCase_WithLength;
+ rtl_ustr_trim;
+ rtl_ustr_trim_WithLength;
+ rtl_ustr_valueOfBoolean;
+ rtl_ustr_valueOfChar;
+ rtl_ustr_valueOfInt32;
+ rtl_ustr_valueOfInt64;
+ rtl_ustr_valueOfDouble;
+ rtl_ustr_valueOfFloat;
+ rtl_ustr_toBoolean;
+ rtl_ustr_toInt32;
+ rtl_ustr_toInt64;
+ rtl_ustr_toDouble;
+ rtl_ustr_toFloat;
+ rtl_uString_acquire;
+ rtl_uString_assign;
+ rtl_uString_getLength;
+ rtl_uString_getStr;
+ rtl_uString_getToken;
+ rtl_uString_new;
+ rtl_uString_newConcat;
+ rtl_uString_newFromStr;
+ rtl_uString_newFromStr_WithLength;
+ rtl_uString_newFromAscii;
+ rtl_uString_newFromLiteral;
+ rtl_uString_newFromString;
+ rtl_uString_newReplace;
+ rtl_uString_newReplaceStrAt;
+ rtl_uString_newToAsciiLowerCase;
+ rtl_uString_newToAsciiUpperCase;
+ rtl_uString_newTrim;
+ rtl_uString_new_WithLength;
+ rtl_uString_release;
+ rtl_uStringbuffer_ensureCapacity;
+ rtl_uStringbuffer_insert;
+ rtl_uStringbuffer_insert_ascii;
+ rtl_uStringbuffer_newFromStr_WithLength;
+ rtl_uStringbuffer_newFromStringBuffer;
+ rtl_string2UString;
+ rtl_uString2String;
+ rtl_createTextToUnicodeConverter;
+ rtl_destroyTextToUnicodeConverter;
+ rtl_createTextToUnicodeContext;
+ rtl_destroyTextToUnicodeContext;
+ rtl_resetTextToUnicodeContext;
+ rtl_convertTextToUnicode;
+ rtl_createUnicodeToTextConverter;
+ rtl_destroyUnicodeToTextConverter;
+ rtl_createUnicodeToTextContext;
+ rtl_destroyUnicodeToTextContext;
+ rtl_resetUnicodeToTextContext;
+ rtl_convertUnicodeToText;
+ rtl_isOctetTextEncoding;
+ rtl_getTextEncodingInfo;
+ rtl_getTextEncodingFromWindowsCharset;
+ rtl_getTextEncodingFromUnixCharset;
+ rtl_getTextEncodingFromMimeCharset;
+ rtl_getBestWindowsCharsetFromTextEncoding;
+ rtl_getMimeCharsetFromTextEncoding;
+ rtl_getBestMimeCharsetFromTextEncoding;
+ rtl_getBestUnixCharsetFromTextEncoding;
+ rtl_allocateZeroMemory;
+ rtl_freeZeroMemory;
+ rtl_crc32;
+ rtl_digest_create;
+ rtl_digest_createMD2;
+ rtl_digest_createMD5;
+ rtl_digest_createSHA;
+ rtl_digest_createSHA1;
+ rtl_digest_createHMAC_MD5;
+ rtl_digest_createHMAC_SHA1;
+ rtl_digest_destroy;
+ rtl_digest_destroyMD2;
+ rtl_digest_destroyMD5;
+ rtl_digest_destroySHA;
+ rtl_digest_destroySHA1;
+ rtl_digest_destroyHMAC_MD5;
+ rtl_digest_destroyHMAC_SHA1;
+ rtl_digest_get;
+ rtl_digest_getMD2;
+ rtl_digest_getMD5;
+ rtl_digest_getSHA;
+ rtl_digest_getSHA1;
+ rtl_digest_getHMAC_MD5;
+ rtl_digest_getHMAC_SHA1;
+ rtl_digest_init;
+ rtl_digest_initHMAC_MD5;
+ rtl_digest_initHMAC_SHA1;
+ rtl_digest_queryAlgorithm;
+ rtl_digest_queryLength;
+ rtl_digest_update;
+ rtl_digest_updateMD2;
+ rtl_digest_updateMD5;
+ rtl_digest_updateSHA;
+ rtl_digest_updateSHA1;
+ rtl_digest_updateHMAC_MD5;
+ rtl_digest_updateHMAC_SHA1;
+ rtl_digest_MD2;
+ rtl_digest_MD5;
+ rtl_digest_SHA;
+ rtl_digest_SHA1;
+ rtl_digest_HMAC_MD5;
+ rtl_digest_HMAC_SHA1;
+ rtl_digest_PBKDF2;
+
+ rtl_random_createPool;
+ rtl_random_destroyPool;
+ rtl_random_addBytes;
+ rtl_random_getBytes;
+
+ rtl_createUuid;
+ rtl_createNamedUuid;
+ rtl_compareUuid;
+ rtl_getGlobalProcessId;
+
+ osl_openFile;
+ osl_setFilePos;
+ osl_getFilePos;
+ osl_setFileSize;
+ osl_readFile;
+ osl_writeFile;
+ osl_closeFile;
+ osl_createDirectory;
+ osl_removeDirectory;
+ osl_removeFile;
+ osl_copyFile;
+ osl_moveFile;
+
+ osl_closeSocket;
+ osl_createInetBroadcastAddr;
+
+ rtl_cipher_create;
+ rtl_cipher_createBF;
+ rtl_cipher_init;
+ rtl_cipher_initBF;
+ rtl_cipher_encode;
+ rtl_cipher_encodeBF;
+ rtl_cipher_decode;
+ rtl_cipher_decodeBF;
+ rtl_cipher_destroy;
+ rtl_cipher_destroyBF;
+
+ rtl_byte_sequence_reference2One;
+ rtl_byte_sequence_realloc;
+ rtl_byte_sequence_acquire;
+ rtl_byte_sequence_release;
+ rtl_byte_sequence_construct;
+ rtl_byte_sequence_constructNoDefault;
+ rtl_byte_sequence_constructFromArray;
+ rtl_byte_sequence_assign;
+ rtl_byte_sequence_equals;
+ rtl_byte_sequence_getConstArray;
+ rtl_byte_sequence_getLength;
+
+ osl_acquireDirectoryItem;
+
+ osl_abbreviateSystemPath;
+ osl_getDateTimeFromTimeValue;
+ osl_getTimeValueFromDateTime;
+ osl_getLocalTimeFromSystemTime;
+ osl_getSystemTimeFromLocalTime;
+ osl_getAbsoluteFileURL;
+
+ osl_releaseVolumeDeviceHandle;
+ osl_getVolumeDeviceMountPath;
+ osl_acquireVolumeDeviceHandle;
+
+ osl_setDebugMessageFunc;
+ osl_setDetailedDebugMessageFunc;
+ osl_readLine;
+ osl_getGlobalTimer;
+ osl_getCanonicalName;
+ osl_getTextEncodingFromLocale;
+
+ rtl_getUriCharClass;
+ rtl_uriConvertRelToAbs;
+ rtl_uriEncode;
+ rtl_uriDecode;
+
+ rtl_bootstrap_get;
+ rtl_bootstrap_set;
+ rtl_bootstrap_setIniFileName;
+ rtl_bootstrap_args_open;
+ rtl_bootstrap_args_close;
+ rtl_bootstrap_get_from_handle;
+ rtl_bootstrap_get_iniName_from_handle;
+ rtl_bootstrap_expandMacros_from_handle;
+ rtl_bootstrap_expandMacros;
+ rtl_getAppCommandArgCount;
+ rtl_getAppCommandArg;
+
+ rtl_moduleCount_acquire;
+ rtl_moduleCount_release;
+ rtl_moduleCount_canUnload;
+ rtl_registerModuleForUnloading;
+ rtl_unregisterModuleForUnloading;
+ rtl_unloadUnusedModules;
+ rtl_addUnloadingListener;
+ rtl_removeUnloadingListener;
+
+ rtl_logfile_trace;
+ osl_getProcessLocale;
+ osl_setProcessLocale;
+ local:
+ *;
+};
+
+UDK_3.1 {
+ global:
+ osl_getTempDirURL;
+ osl_createTempFile;
+
+ rtl_math_doubleToString;
+ rtl_math_doubleToUString;
+ rtl_math_pow10Exp;
+ rtl_math_round;
+ rtl_math_stringToDouble;
+ rtl_math_uStringToDouble;
+ rtl_convertUStringToString;
+
+ osl_joinProcessWithTimeout;
+
+ rtl_getTextEncodingFromWindowsCodePage;
+ rtl_getWindowsCodePageFromTextEncoding;
+} UDK_3_0_0;
+
+UDK_3.2 {
+ global:
+ osl_syncFile;
+} UDK_3.1;
+
+UDK_3.3 {
+ global:
+ osl_createDirectoryPath;
+ osl_getFunctionSymbol;
+ osl_getModuleURLFromFunctionAddress;
+ rtl_cipher_createARCFOUR;
+ rtl_cipher_initARCFOUR;
+ rtl_cipher_decodeARCFOUR;
+ rtl_cipher_encodeARCFOUR;
+ rtl_cipher_destroyARCFOUR;
+ rtl_digest_rawMD5;
+ osl_getFileSize;
+ osl_setCommandArgs;
+ rtl_uStringbuffer_insertUtf32;
+ rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths;
+ rtl_logfile_longTrace;
+ rtl_ustr_asciil_reverseEquals_WithLength;
+} UDK_3.2;
+
+UDK_3.4 {
+ global:
+ osl_setErrorReporting;
+} UDK_3.3;
+
+UDK_3.5 {
+ global:
+ rtl_arena_create;
+ rtl_arena_destroy;
+ rtl_arena_alloc;
+ rtl_arena_free;
+
+ rtl_cache_create;
+ rtl_cache_destroy;
+ rtl_cache_alloc;
+ rtl_cache_free;
+} UDK_3.4;
+
+UDK_3.6 { # OOo 2.3
+ global:
+ osl_loadModuleAscii;
+ osl_getAsciiFunctionSymbol;
+ osl_getModuleHandle;
+ rtl_uString_intern;
+ rtl_uString_internConvert;
+ rtl_ustr_indexOfAscii_WithLength;
+ rtl_ustr_lastIndexOfAscii_WithLength;
+ rtl_uString_iterateCodePoints;
+ rtl_uString_newFromCodePoints;
+} UDK_3.5;
+
+UDK_3.7 { # OOo 2.4
+ global:
+ osl_loadModuleRelative;
+} UDK_3.6;
+
+UDK_3.8 { # OOo 3.0
+ global:
+ rtl_bootstrap_encode;
+ rtl_convertStringToUString;
+ rtl_math_approxValue;
+} UDK_3.7;
+
+UDK_3.9 { # OOo 3.1
+ global:
+ osl_mapFile;
+ osl_unmapFile;
+
+ osl_readFileAt;
+ osl_writeFileAt;
+
+ rtl_math_expm1;
+ rtl_math_log1p;
+ rtl_math_atanh;
+} UDK_3.8;
+
+UDK_3.10 { # OOo 3.2
+ global:
+ rtl_logfile_hasLogFile;
+ rtl_math_erf;
+ rtl_math_erfc;
+ rtl_math_asinh;
+ rtl_math_acosh;
+} UDK_3.9;
+
+UDK_3.11 { # symbols available in >= OOo/LibO 3.4
+ global:
+ osl_setEnvironment;
+ osl_clearEnvironment;
+ osl_setThreadName;
+} UDK_3.10;
+
+LIBO_UDK_3.5 { # symbols available in >= LibO 3.5
+ global:
+ rtl_stringbuffer_remove;
+ rtl_uStringbuffer_remove;
+} UDK_3.10;
+
+LIBO_UDK_3.6 { # symbols available in >= LibO 3.6
+ global:
+ osl_unmapMappedFile;
+ osl_identicalDirectoryItem;
+ osl_loadModuleRelativeAscii;
+ rtl_string_newReplaceAll;
+ rtl_string_newReplaceFirst;
+ rtl_uString_newReplaceAll;
+ rtl_uString_newReplaceAllAsciiL;
+ rtl_uString_newReplaceAllAsciiLAsciiL;
+ rtl_uString_newReplaceFirst;
+ rtl_uString_newReplaceFirstAsciiL;
+ rtl_uString_newReplaceFirstAsciiLAsciiL;
+ rtl_uStringBuffer_refReturn;
+ rtl_uStringBuffer_makeStringAndClear;
+} UDK_3.10;
+
+LIBO_UDK_4.0 { # symbols available in >= LibO 4.0
+ global:
+ rtl_string_newFromSubString;
+ rtl_uString_newFromSubString;
+ rtl_uString_newReplaceAllFromIndex;
+} LIBO_UDK_3.6;
+
+LIBO_UDK_4.1 { # symbols available in >= LibO 4.1
+ global:
+ rtl_string_ensureCapacity;
+ rtl_uString_ensureCapacity;
+ rtl_string_alloc;
+ rtl_uString_alloc;
+ rtl_str_toUInt64;
+ rtl_str_valueOfUInt64;
+ rtl_ustr_valueOfUInt64;
+ rtl_ustr_toUInt64;
+} LIBO_UDK_4.0;
+
+LIBO_UDK_4.2 { # symbols available in >= LibO 4.2
+ global:
+ rtl_str_toUInt32;
+ rtl_ustr_toUInt32;
+} LIBO_UDK_4.1;
+
+LIBO_UDK_4.3 { # symbols available in >= LibO 4.3
+ global:
+ osl_createDirectoryWithFlags;
+ rtl_allocateAlignedMemory;
+ rtl_freeAlignedMemory;
+ osl_areCommandArgsSet;
+} LIBO_UDK_4.2;
+
+LIBO_UDK_5.0 { # symbols available in >= LibO 5.0
+ global:
+ rtl_secureZeroMemory;
+} LIBO_UDK_4.3;
+
+LIBO_UDK_5.1 { # symbols available in >= LibO 5.1
+ global:
+ rtl_uString_newConcatAsciiL;
+ rtl_uString_newReplaceAllToAsciiL;
+ rtl_uString_newReplaceFirstToAsciiL;
+} LIBO_UDK_5.0;
+
+LIBO_UDK_5.2 { # symbols available in >= LibO 5.2
+ global:
+ osl_getShortUserName;
+} LIBO_UDK_5.1;
+
+LIBO_UDK_5.3 { # symbols available in >= LibO 5.3
+ global:
+ rtl_math_approxEqual;
+ rtl_uString_newConcatUtf16L;
+ rtl_uString_newReplaceAllAsciiLUtf16L;
+ rtl_uString_newReplaceAllUtf16LAsciiL;
+ rtl_uString_newReplaceAllUtf16LUtf16L;
+ rtl_uString_newReplaceFirstAsciiLUtf16L;
+ rtl_uString_newReplaceFirstUtf16LAsciiL;
+ rtl_uString_newReplaceFirstUtf16LUtf16L;
+} LIBO_UDK_5.2;
+
+LIBO_UDK_6.2 { # symbols available in >= LibO 6.2
+ global:
+ osl_replaceFile;
+} LIBO_UDK_5.3;
+
+PRIVATE_1.0 {
+ global:
+ osl_detail_ObjectRegistry_storeAddresses;
+ osl_detail_ObjectRegistry_checkObjectCount;
+ osl_detail_ObjectRegistry_registerObject;
+ osl_detail_ObjectRegistry_revokeObject;
+ osl_detail_ObjectRegistry_getMutex;
+};
+
+PRIVATE_1.1 {
+ global:
+ sal_detail_initialize;
+ sal_detail_deinitialize;
+} PRIVATE_1.0;
+
+PRIVATE_1.2 { # LibreOffice 3.5
+ global:
+ sal_detail_log;
+ sal_detail_logFormat;
+} PRIVATE_1.1;
+
+PRIVATE_1.3 { # LibreOffice 5.4
+ global:
+ sal_detail_log_report;
+} PRIVATE_1.2;
+
+PRIVATE_1.4 { # LibreOffice 6.0
+ global:
+ _ZN3sal13backtrace_getEj;
+ _ZN3sal13backtrace_getEm;
+ _ZN3sal19backtrace_to_stringEPNS_14BacktraceStateE;
+} PRIVATE_1.3;
+
+PRIVATE_1.5 { # LibreOffice 6.1
+ global:
+ rtl_alloc_preInit;
+} PRIVATE_1.4;
+
+PRIVATE_1.6 { # LibreOffice 6.4
+ global:
+ rtl_str_toInt64_WithLength;
+ rtl_ustr_toInt64_WithLength;
+ sal_detail_set_log_selector;
+} PRIVATE_1.5;
+
+PRIVATE_1.7 { # LibreOffice 7.1
+ global:
+ rtl_uString_newReplaceAllFromIndexUtf16LUtf16L;
+} PRIVATE_1.5;
+
+PRIVATE_1.8 { # LibreOffice 7.3
+ global:
+ rtl_string_newReplaceStrAt_WithLength;
+ rtl_uString_newReplaceStrAtUtf16L;
+} PRIVATE_1.7;
+
+PRIVATE_textenc.1 { # LibreOffice 3.6
+ global:
+ _ZN3sal6detail7textenc20convertCharToUnicode*;
+ _ZN3sal6detail7textenc20convertUnicodeToChar*;
+ _ZN3sal6detail7textenc32handleUndefinedUnicodeToTextChar*;
+ _ZN3sal6detail7textenc37handleBadInputTextToUnicodeConversion*;
+ _ZN3sal6detail7textenc37handleBadInputUnicodeToTextConversion*;
+};
+
+# Unique libstdc++ symbols:
+GLIBCXX_3.4 {
+ global:
+ _ZGVNSt7num_put*; _ZNSt7num_put*;
+ _ZNSs4_Rep20_S_empty_rep_storageE;
+};